summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--2019/talks/24.md2
-rw-r--r--2020/info/01.md3
-rw-r--r--2020/info/03.md6
-rw-r--r--2020/info/04.md3
-rw-r--r--2020/info/05.md9
-rw-r--r--2020/info/06.md3
-rw-r--r--2020/info/07.md6
-rw-r--r--2020/info/08.md7
-rw-r--r--2020/info/09.md6
-rw-r--r--2020/info/10.md3
-rw-r--r--2020/info/12.md3
-rw-r--r--2020/info/13.md3
-rw-r--r--2020/info/14.md3
-rw-r--r--2020/info/15.md3
-rw-r--r--2020/info/17.md3
-rw-r--r--2020/info/18.md3
-rw-r--r--2020/info/19.md3
-rw-r--r--2020/info/20.md3
-rw-r--r--2020/info/21.md3
-rw-r--r--2020/info/22.md3
-rw-r--r--2020/info/23.md10
-rw-r--r--2020/info/24.md3
-rw-r--r--2020/info/25.md3
-rw-r--r--2020/info/26.md6
-rw-r--r--2020/info/27.md3
-rw-r--r--2020/info/28.md3
-rw-r--r--2020/info/30.md188
-rw-r--r--2020/info/31.md6
-rw-r--r--2020/info/32.md3
-rw-r--r--2020/info/33.md3
-rw-r--r--2020/info/34.md3
-rw-r--r--2020/info/35.md6
-rw-r--r--2020/info/38.md3
-rw-r--r--2020/info/39.md6
-rw-r--r--2020/info/40.md6
-rw-r--r--2020/info/41.md3
-rw-r--r--2020/info/42.md3
-rw-r--r--2020/organizers-notebook.org6
-rw-r--r--2020/submissions.org121
-rw-r--r--2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt5075
-rw-r--r--2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo-autogen.vtt634
-rw-r--r--2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt526
-rw-r--r--2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt905
-rw-r--r--2020/talks/16.md2
-rw-r--r--2020/talks/17.md1
-rw-r--r--2020/talks/18.md2
-rw-r--r--2020/talks/28.md5
-rw-r--r--2020/talks/30.md1
-rw-r--r--2020/talks/31.md5
-rw-r--r--2020/talks/32.md7
-rw-r--r--2021.md77
-rw-r--r--2021/all-include.md289
-rw-r--r--2021/all.md11
-rw-r--r--2021/captions/babel.md270
-rw-r--r--2021/captions/bidi.md366
-rw-r--r--2021/captions/bindat.md621
-rw-r--r--2021/captions/borg.md155
-rw-r--r--2021/captions/clede.md419
-rw-r--r--2021/captions/cs.md261
-rw-r--r--2021/captions/dashboard.md329
-rw-r--r--2021/captions/design.md174
-rw-r--r--2021/captions/dev-update.md244
-rw-r--r--2021/captions/eaf.md188
-rw-r--r--2021/captions/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.vtt802
-rw-r--r--2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--chapters.vtt55
-rw-r--r--2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main--main--chapters.vtt55
-rw-r--r--2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt1093
-rw-r--r--2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt34
-rw-r--r--2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt1855
-rw-r--r--2021/captions/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt457
-rw-r--r--2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt1246
-rw-r--r--2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--chapters.vtt25
-rw-r--r--2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main--chapters.vtt25
-rw-r--r--2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt775
-rw-r--r--2021/captions/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.vtt979
-rw-r--r--2021/captions/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.vtt514
-rw-r--r--2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--chapters.vtt43
-rw-r--r--2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main--chapters.vtt43
-rw-r--r--2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt724
-rw-r--r--2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main--chapters.vtt26
-rw-r--r--2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt622
-rw-r--r--2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--chapters.vtt43
-rw-r--r--2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main--chapters.vtt43
-rw-r--r--2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt1054
-rw-r--r--2021/captions/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.vtt550
-rw-r--r--2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--chapters.vtt31
-rw-r--r--2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main--chapters.vtt31
-rw-r--r--2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt1528
-rw-r--r--2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--chapters.vtt82
-rw-r--r--2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--main--chapters.vtt82
-rw-r--r--2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--chapters.vtt61
-rw-r--r--2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main--chapters.vtt61
-rw-r--r--2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt2674
-rw-r--r--2021/captions/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt1282
-rw-r--r--2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--chapters.vtt25
-rw-r--r--2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main--chapters.vtt25
-rw-r--r--2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt2512
-rw-r--r--2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--chapters.vtt37
-rw-r--r--2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main--chapters.vtt37
-rw-r--r--2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt1552
-rw-r--r--2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main--chapters.vtt22
-rw-r--r--2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt820
-rw-r--r--2021/captions/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.vtt697
-rw-r--r--2021/captions/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.vtt706
-rw-r--r--2021/captions/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt1780
-rw-r--r--2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--answers--chapters.vtt40
-rw-r--r--2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main--chapters.vtt64
-rw-r--r--2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt730
-rw-r--r--2021/captions/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.vtt676
-rw-r--r--2021/captions/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.vtt796
-rw-r--r--2021/captions/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.vtt628
-rw-r--r--2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--chapters.vtt46
-rw-r--r--2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main--chapters.vtt46
-rw-r--r--2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt826
-rw-r--r--2021/captions/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt673
-rw-r--r--2021/captions/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--answers--chapters.vtt94
-rw-r--r--2021/captions/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.vtt2752
-rw-r--r--2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--chapters.vtt34
-rw-r--r--2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main--chapters.vtt34
-rw-r--r--2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt469
-rw-r--r--2021/captions/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.vtt535
-rw-r--r--2021/captions/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.vtt532
-rw-r--r--2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main--chapters.vtt31
-rw-r--r--2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.vtt892
-rw-r--r--2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_fr.vtt892
-rw-r--r--2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_ja.vtt892
-rw-r--r--2021/captions/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.vtt770
-rw-r--r--2021/captions/emacsconf-2021-pattern--edit--main.vtt13
-rw-r--r--2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--chapters.vtt25
-rw-r--r--2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main--chapters.vtt25
-rw-r--r--2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt1876
-rw-r--r--2021/captions/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.vtt871
-rw-r--r--2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--chapters.vtt31
-rw-r--r--2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main--chapters.vtt31
-rw-r--r--2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt565
-rw-r--r--2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--chapters.vtt16
-rw-r--r--2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main--chapters.vtt16
-rw-r--r--2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt520
-rw-r--r--2021/captions/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.vtt817
-rw-r--r--2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt1663
-rw-r--r--2021/captions/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.vtt829
-rw-r--r--2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt768
-rw-r--r--2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla-and-evgeny-zajcev--main.vtt769
-rw-r--r--2021/captions/emacsconf-2021-test--test-blocks--eduardo-ochs--main.vtt493
-rw-r--r--2021/captions/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.vtt634
-rw-r--r--2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--chapters.vtt40
-rw-r--r--2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main--chapters.vtt40
-rw-r--r--2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt766
-rw-r--r--2021/captions/erg.md354
-rw-r--r--2021/captions/exec.md186
-rw-r--r--2021/captions/faster.md512
-rw-r--r--2021/captions/forever.md894
-rw-r--r--2021/captions/form.md430
-rw-r--r--2021/captions/freedom.md840
-rw-r--r--2021/captions/frownies.md520
-rw-r--r--2021/captions/gregorian.md277
-rw-r--r--2021/captions/imaginary.md235
-rw-r--r--2021/captions/invoice.md236
-rw-r--r--2021/captions/janitor.md596
-rw-r--r--2021/captions/maintainers.md246
-rw-r--r--2021/captions/model.md228
-rw-r--r--2021/captions/mold.md268
-rw-r--r--2021/captions/molecular.md212
-rw-r--r--2021/captions/montessori.md277
-rw-r--r--2021/captions/nangulator.md227
-rw-r--r--2021/captions/native.md920
-rw-r--r--2021/captions/news.md159
-rw-r--r--2021/captions/nongnu.md181
-rw-r--r--2021/captions/nyxt.md180
-rw-r--r--2021/captions/omegat.md900
-rw-r--r--2021/captions/org-outside.md259
-rw-r--r--2021/captions/pattern.md627
-rw-r--r--2021/captions/professional.md293
-rw-r--r--2021/captions/project.md241
-rw-r--r--2021/captions/research.md176
-rw-r--r--2021/captions/structural.md275
-rw-r--r--2021/captions/teach.md557
-rw-r--r--2021/captions/tech.md279
-rw-r--r--2021/captions/telega.md259
-rw-r--r--2021/captions/test.md167
-rw-r--r--2021/captions/ui.md214
-rw-r--r--2021/captions/unix.md258
-rw-r--r--2021/cfp.md229
-rw-r--r--2021/cfp.org242
-rw-r--r--2021/contribute.md117
-rw-r--r--2021/emacsconf-2021-cfp-sacha.org187
-rw-r--r--2021/emacsconf-pentabarf.xml107
-rw-r--r--2021/emacsconf.ics659
-rw-r--r--2021/ideas.md12
-rw-r--r--2021/info/babel-nav.md3
-rw-r--r--2021/info/babel-schedule.md30
-rw-r--r--2021/info/bidi-nav.md3
-rw-r--r--2021/info/bidi-schedule.md31
-rw-r--r--2021/info/bindat-nav.md3
-rw-r--r--2021/info/bindat-schedule.md69
-rw-r--r--2021/info/borg-nav.md3
-rw-r--r--2021/info/borg-schedule.md20
-rw-r--r--2021/info/bug-nav.md3
-rw-r--r--2021/info/bug-schedule.md10
-rw-r--r--2021/info/build-nav.md3
-rw-r--r--2021/info/build-schedule.md27
-rw-r--r--2021/info/clede-nav.md3
-rw-r--r--2021/info/clede-schedule.md28
-rw-r--r--2021/info/cs-nav.md3
-rw-r--r--2021/info/cs-schedule.md40
-rw-r--r--2021/info/dashboard-nav.md3
-rw-r--r--2021/info/dashboard-schedule.md27
-rw-r--r--2021/info/day1-close-nav.md3
-rw-r--r--2021/info/day1-close-schedule.md12
-rw-r--r--2021/info/day1-open-nav.md2
-rw-r--r--2021/info/day1-open-schedule.md13
-rw-r--r--2021/info/day2-close-nav.md2
-rw-r--r--2021/info/day2-close-schedule.md12
-rw-r--r--2021/info/day2-open-nav.md3
-rw-r--r--2021/info/day2-open-schedule.md12
-rw-r--r--2021/info/design-nav.md3
-rw-r--r--2021/info/design-schedule.md29
-rw-r--r--2021/info/dev-update-nav.md3
-rw-r--r--2021/info/dev-update-schedule.md38
-rw-r--r--2021/info/devel-nav.md3
-rw-r--r--2021/info/devel-schedule.md9
-rw-r--r--2021/info/dsl-nav.md3
-rw-r--r--2021/info/dsl-schedule.md10
-rw-r--r--2021/info/eaf-nav.md3
-rw-r--r--2021/info/eaf-schedule.md30
-rw-r--r--2021/info/erg-nav.md3
-rw-r--r--2021/info/erg-schedule.md47
-rw-r--r--2021/info/exec-nav.md3
-rw-r--r--2021/info/exec-schedule.md28
-rw-r--r--2021/info/faster-nav.md3
-rw-r--r--2021/info/faster-schedule.md55
-rw-r--r--2021/info/forever-nav.md3
-rw-r--r--2021/info/forever-schedule.md81
-rw-r--r--2021/info/form-nav.md3
-rw-r--r--2021/info/form-schedule.md28
-rw-r--r--2021/info/freedom-nav.md3
-rw-r--r--2021/info/freedom-schedule.md32
-rw-r--r--2021/info/frownies-nav.md3
-rw-r--r--2021/info/frownies-schedule.md44
-rw-r--r--2021/info/gregorian-nav.md3
-rw-r--r--2021/info/gregorian-schedule.md30
-rw-r--r--2021/info/imaginary-nav.md3
-rw-r--r--2021/info/imaginary-schedule.md30
-rw-r--r--2021/info/invoice-nav.md3
-rw-r--r--2021/info/invoice-schedule.md21
-rw-r--r--2021/info/janitor-nav.md3
-rw-r--r--2021/info/janitor-schedule.md65
-rw-r--r--2021/info/maintainers-nav.md3
-rw-r--r--2021/info/maintainers-schedule.md67
-rw-r--r--2021/info/model-nav.md3
-rw-r--r--2021/info/model-schedule.md20
-rw-r--r--2021/info/mold-nav.md3
-rw-r--r--2021/info/mold-schedule.md20
-rw-r--r--2021/info/molecular-nav.md3
-rw-r--r--2021/info/molecular-schedule.md21
-rw-r--r--2021/info/montessori-nav.md3
-rw-r--r--2021/info/montessori-schedule.md48
-rw-r--r--2021/info/nangulator-nav.md3
-rw-r--r--2021/info/nangulator-schedule.md28
-rw-r--r--2021/info/native-nav.md3
-rw-r--r--2021/info/native-schedule.md62
-rw-r--r--2021/info/news-nav.md3
-rw-r--r--2021/info/news-schedule.md35
-rw-r--r--2021/info/nongnu-nav.md3
-rw-r--r--2021/info/nongnu-schedule.md20
-rw-r--r--2021/info/nyxt-nav.md3
-rw-r--r--2021/info/nyxt-schedule.md20
-rw-r--r--2021/info/omegat-nav.md3
-rw-r--r--2021/info/omegat-schedule.md23
-rw-r--r--2021/info/org-outside-nav.md3
-rw-r--r--2021/info/org-outside-schedule.md27
-rw-r--r--2021/info/pattern-nav.md3
-rw-r--r--2021/info/pattern-schedule.md33
-rw-r--r--2021/info/professional-nav.md3
-rw-r--r--2021/info/professional-schedule.md19
-rw-r--r--2021/info/project-nav.md3
-rw-r--r--2021/info/project-schedule.md32
-rw-r--r--2021/info/research-nav.md3
-rw-r--r--2021/info/research-schedule.md29
-rw-r--r--2021/info/rust-nav.md3
-rw-r--r--2021/info/rust-schedule.md10
-rw-r--r--2021/info/structural-nav.md3
-rw-r--r--2021/info/structural-schedule.md28
-rw-r--r--2021/info/teach-nav.md3
-rw-r--r--2021/info/teach-schedule.md28
-rw-r--r--2021/info/tech-nav.md3
-rw-r--r--2021/info/tech-schedule.md29
-rw-r--r--2021/info/telega-nav.md3
-rw-r--r--2021/info/telega-schedule.md19
-rw-r--r--2021/info/test-nav.md3
-rw-r--r--2021/info/test-schedule.md19
-rw-r--r--2021/info/ui-nav.md3
-rw-r--r--2021/info/ui-schedule.md29
-rw-r--r--2021/info/unix-nav.md3
-rw-r--r--2021/info/unix-schedule.md46
-rw-r--r--2021/inline-alternate.md1
-rw-r--r--2021/meetings.org1554
-rw-r--r--2021/office-hours.md38
-rw-r--r--2021/office-hours.org43
-rw-r--r--2021/organizers-notebook.md10
-rw-r--r--2021/organizers-notebook.org33
-rw-r--r--2021/planning.md23
-rw-r--r--2021/playbook.md1411
-rw-r--r--2021/playbook.org1194
-rw-r--r--2021/playbook/restream-flv.sh2
-rw-r--r--2021/playbook/restream-lowres.sh2
-rw-r--r--2021/playbook/restream-youtube.sh2
-rw-r--r--2021/playbook/stream-desktop-and-audio.sh1
-rw-r--r--2021/poster.md58
-rw-r--r--2021/prepare.md289
-rw-r--r--2021/schedule-details.md58
-rw-r--r--2021/schedule.md1
-rw-r--r--2021/sidebar.md13
-rw-r--r--2021/speakers.md52
-rw-r--r--2021/submit.md100
-rw-r--r--2021/talks.md18
-rw-r--r--2021/talks/babel.md114
-rw-r--r--2021/talks/bidi.md195
-rw-r--r--2021/talks/bindat.md83
-rw-r--r--2021/talks/borg.md34
-rw-r--r--2021/talks/bug.md23
-rw-r--r--2021/talks/build.md72
-rw-r--r--2021/talks/clede.md43
-rw-r--r--2021/talks/cs.md84
-rw-r--r--2021/talks/dashboard.md213
-rw-r--r--2021/talks/day1-close.md50
-rw-r--r--2021/talks/day1-open.md60
-rw-r--r--2021/talks/day2-close.md61
-rw-r--r--2021/talks/day2-open.md20
-rw-r--r--2021/talks/design.md115
-rw-r--r--2021/talks/dev-update.md29
-rw-r--r--2021/talks/devel.md60
-rw-r--r--2021/talks/dsl.md49
-rw-r--r--2021/talks/eaf.md112
-rw-r--r--2021/talks/erg.md50
-rw-r--r--2021/talks/exec.md103
-rw-r--r--2021/talks/faster.md133
-rw-r--r--2021/talks/forever.md118
-rw-r--r--2021/talks/form.md113
-rw-r--r--2021/talks/freedom.md84
-rw-r--r--2021/talks/frownies.md91
-rw-r--r--2021/talks/gregorian.md40
-rw-r--r--2021/talks/imaginary.md243
-rw-r--r--2021/talks/invoice.md60
-rw-r--r--2021/talks/janitor.md158
-rw-r--r--2021/talks/maintainers.md104
-rw-r--r--2021/talks/model.md124
-rw-r--r--2021/talks/mold.md113
-rw-r--r--2021/talks/molecular.md158
-rw-r--r--2021/talks/montessori.md234
-rw-r--r--2021/talks/nangulator.md57
-rw-r--r--2021/talks/native.md193
-rw-r--r--2021/talks/news.md31
-rw-r--r--2021/talks/nongnu.md32
-rw-r--r--2021/talks/nyxt.md52
-rw-r--r--2021/talks/omegat.md84
-rw-r--r--2021/talks/org-outside.md153
-rw-r--r--2021/talks/pattern.md285
-rw-r--r--2021/talks/professional.md83
-rw-r--r--2021/talks/project.md36
-rw-r--r--2021/talks/research.md60
-rw-r--r--2021/talks/rust.md36
-rw-r--r--2021/talks/structural.md124
-rw-r--r--2021/talks/teach.md77
-rw-r--r--2021/talks/tech.md84
-rw-r--r--2021/talks/telega.md42
-rw-r--r--2021/talks/test.md62
-rw-r--r--2021/talks/ui.md121
-rw-r--r--2021/talks/unix.md79
-rw-r--r--2021/talks/world.md74
-rw-r--r--2021/watch.md24
-rw-r--r--2022.md88
-rw-r--r--2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt411
-rw-r--r--2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt52
-rw-r--r--2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt874
-rw-r--r--2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.vtt970
-rw-r--r--2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt40
-rw-r--r--2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt1505
-rw-r--r--2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt25
-rw-r--r--2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt424
-rw-r--r--2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.vtt1004
-rw-r--r--2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt49
-rw-r--r--2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt890
-rw-r--r--2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt1691
-rw-r--r--2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt55
-rw-r--r--2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt1126
-rw-r--r--2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.vtt1028
-rw-r--r--2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt34
-rw-r--r--2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt502
-rw-r--r--2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt53
-rw-r--r--2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt473
-rw-r--r--2022/captions/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt489
-rw-r--r--2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.vtt1184
-rw-r--r--2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt38
-rw-r--r--2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt739
-rw-r--r--2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.vtt6638
-rw-r--r--2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt787
-rw-r--r--2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.vtt791
-rw-r--r--2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt65
-rw-r--r--2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt1945
-rw-r--r--2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.vtt815
-rw-r--r--2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt31
-rw-r--r--2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt323
-rw-r--r--2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt554
-rw-r--r--2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt117
-rw-r--r--2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt1354
-rw-r--r--2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.vtt653
-rw-r--r--2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt56
-rw-r--r--2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt1261
-rw-r--r--2022/captions/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt1184
-rw-r--r--2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.vtt467
-rw-r--r--2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt43
-rw-r--r--2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt1048
-rw-r--r--2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.vtt1019
-rw-r--r--2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt29
-rw-r--r--2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt818
-rw-r--r--2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.vtt464
-rw-r--r--2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt41
-rw-r--r--2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt792
-rw-r--r--2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt43
-rw-r--r--2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt826
-rw-r--r--2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.vtt497
-rw-r--r--2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt726
-rw-r--r--2022/captions/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt1002
-rw-r--r--2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.vtt1046
-rw-r--r--2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt80
-rw-r--r--2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt1757
-rw-r--r--2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt44
-rw-r--r--2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.vtt806
-rw-r--r--2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt56
-rw-r--r--2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt1192
-rw-r--r--2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.vtt563
-rw-r--r--2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt82
-rw-r--r--2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt1321
-rw-r--r--2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt1322
-rw-r--r--2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.vtt611
-rw-r--r--2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt34
-rw-r--r--2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt508
-rw-r--r--2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--answers.vtt2348
-rw-r--r--2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt80
-rw-r--r--2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt2258
-rw-r--r--2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt71
-rw-r--r--2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt1220
-rw-r--r--2022/captions/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt852
-rw-r--r--2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.vtt1133
-rw-r--r--2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt38
-rw-r--r--2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt1129
-rw-r--r--2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt56
-rw-r--r--2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt1736
-rw-r--r--2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt109
-rw-r--r--2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.vtt2217
-rw-r--r--2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt32
-rw-r--r--2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt756
-rw-r--r--2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt73
-rw-r--r--2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt1315
-rw-r--r--2022/captions/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt29
-rw-r--r--2022/captions/emacsconf-2022-sat-open--opening-remarks--main.vtt273
-rw-r--r--2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt26
-rw-r--r--2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt383
-rw-r--r--2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt32
-rw-r--r--2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.vtt1232
-rw-r--r--2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt55
-rw-r--r--2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt1153
-rw-r--r--2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.vtt1535
-rw-r--r--2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt38
-rw-r--r--2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt1309
-rw-r--r--2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt68
-rw-r--r--2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt1614
-rw-r--r--2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt40
-rw-r--r--2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt727
-rw-r--r--2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.vtt2153
-rw-r--r--2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt471
-rw-r--r--2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt23
-rw-r--r--2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.vtt893
-rw-r--r--2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt77
-rw-r--r--2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt1309
-rw-r--r--2022/cfp.md229
-rw-r--r--2022/cfp.org242
-rw-r--r--2022/decisions.md90
-rw-r--r--2022/decisions/index.org327
-rw-r--r--2022/decisions/index.org_archive462
-rw-r--r--2022/decisions/schedule-option-back-to-one.svg1
-rw-r--r--2022/decisions/schedule-option-gen-and-dev-aligned.svg1
-rw-r--r--2022/decisions/schedule-option-gen-and-dev.svg1
-rw-r--r--2022/decisions/schedule-option-gen-to-specific.svg1
-rw-r--r--2022/decisions/schedule-option-non-round-buffer.svg1
-rw-r--r--2022/decisions/schedule-option-one-afternoon-track.svg1
-rw-r--r--2022/decisions/schedule-option-one-full-day.svg1
-rw-r--r--2022/decisions/schedule-option-only-live-qa.svg1
-rw-r--r--2022/decisions/schedule-option-two-afternoon-tracks.svg1
-rw-r--r--2022/draft-schedule.md53
-rw-r--r--2022/ideas.md13
-rw-r--r--2022/info/asmblox-after.md306
-rw-r--r--2022/info/asmblox-before.md44
-rw-r--r--2022/info/asmblox-nav.md7
-rw-r--r--2022/info/async-after.md396
-rw-r--r--2022/info/async-before.md39
-rw-r--r--2022/info/async-nav.md7
-rw-r--r--2022/info/buddy-after.md156
-rw-r--r--2022/info/buddy-before.md16
-rw-r--r--2022/info/buddy-nav.md7
-rw-r--r--2022/info/buttons-after.md238
-rw-r--r--2022/info/buttons-before.md50
-rw-r--r--2022/info/buttons-nav.md7
-rw-r--r--2022/info/community-after.md7
-rw-r--r--2022/info/community-before.md16
-rw-r--r--2022/info/community-nav.md7
-rw-r--r--2022/info/dbus-after.md378
-rw-r--r--2022/info/dbus-before.md62
-rw-r--r--2022/info/dbus-nav.md7
-rw-r--r--2022/info/detached-after.md182
-rw-r--r--2022/info/detached-before.md50
-rw-r--r--2022/info/detached-nav.md7
-rw-r--r--2022/info/devel-after.md133
-rw-r--r--2022/info/devel-before.md21
-rw-r--r--2022/info/devel-nav.md7
-rw-r--r--2022/info/eev-after.md173
-rw-r--r--2022/info/eev-before.md18
-rw-r--r--2022/info/eev-nav.md7
-rw-r--r--2022/info/eshell-after.md253
-rw-r--r--2022/info/eshell-before.md52
-rw-r--r--2022/info/eshell-nav.md7
-rw-r--r--2022/info/fanfare-after.md273
-rw-r--r--2022/info/fanfare-before.md57
-rw-r--r--2022/info/fanfare-nav.md7
-rw-r--r--2022/info/grail-after.md645
-rw-r--r--2022/info/grail-before.md33
-rw-r--r--2022/info/grail-nav.md7
-rw-r--r--2022/info/handwritten-after.md123
-rw-r--r--2022/info/handwritten-before.md50
-rw-r--r--2022/info/handwritten-nav.md7
-rw-r--r--2022/info/haskell-after.md466
-rw-r--r--2022/info/haskell-before.md63
-rw-r--r--2022/info/haskell-nav.md7
-rw-r--r--2022/info/health-after.md423
-rw-r--r--2022/info/health-before.md56
-rw-r--r--2022/info/health-nav.md7
-rw-r--r--2022/info/hyperorg-after.md7
-rw-r--r--2022/info/hyperorg-before.md12
-rw-r--r--2022/info/hyperorg-nav.md7
-rw-r--r--2022/info/indieweb-after.md364
-rw-r--r--2022/info/indieweb-before.md62
-rw-r--r--2022/info/indieweb-nav.md7
-rw-r--r--2022/info/journalism-after.md277
-rw-r--r--2022/info/journalism-before.md45
-rw-r--r--2022/info/journalism-nav.md7
-rw-r--r--2022/info/jupyter-after.md270
-rw-r--r--2022/info/jupyter-before.md52
-rw-r--r--2022/info/jupyter-nav.md7
-rw-r--r--2022/info/justl-after.md290
-rw-r--r--2022/info/justl-before.md22
-rw-r--r--2022/info/justl-nav.md7
-rw-r--r--2022/info/links-after.md5
-rw-r--r--2022/info/links-before.md2
-rw-r--r--2022/info/links-nav.md7
-rw-r--r--2022/info/localizing-after.md248
-rw-r--r--2022/info/localizing-before.md30
-rw-r--r--2022/info/localizing-nav.md7
-rw-r--r--2022/info/lspbridge-after.md332
-rw-r--r--2022/info/lspbridge-before.md4
-rw-r--r--2022/info/lspbridge-nav.md7
-rw-r--r--2022/info/mail-after.md581
-rw-r--r--2022/info/mail-before.md64
-rw-r--r--2022/info/mail-nav.md7
-rw-r--r--2022/info/maint-after.md400
-rw-r--r--2022/info/maint-before.md60
-rw-r--r--2022/info/maint-nav.md7
-rw-r--r--2022/info/meetups-after.md899
-rw-r--r--2022/info/meetups-before.md63
-rw-r--r--2022/info/meetups-nav.md7
-rw-r--r--2022/info/news-after.md5
-rw-r--r--2022/info/news-before.md17
-rw-r--r--2022/info/news-nav.md2
-rw-r--r--2022/info/orgsuperlinks-after.md184
-rw-r--r--2022/info/orgsuperlinks-before.md51
-rw-r--r--2022/info/orgsuperlinks-nav.md7
-rw-r--r--2022/info/orgvm-after.md746
-rw-r--r--2022/info/orgvm-before.md46
-rw-r--r--2022/info/orgvm-nav.md7
-rw-r--r--2022/info/orgyear-after.md406
-rw-r--r--2022/info/orgyear-before.md29
-rw-r--r--2022/info/orgyear-nav.md7
-rw-r--r--2022/info/python-after.md298
-rw-r--r--2022/info/python-before.md18
-rw-r--r--2022/info/python-nav.md7
-rw-r--r--2022/info/rde-after.md391
-rw-r--r--2022/info/rde-before.md52
-rw-r--r--2022/info/rde-nav.md7
-rw-r--r--2022/info/realestate-after.md593
-rw-r--r--2022/info/realestate-before.md40
-rw-r--r--2022/info/realestate-nav.md7
-rw-r--r--2022/info/rms-after.md260
-rw-r--r--2022/info/rms-before.md78
-rw-r--r--2022/info/rms-nav.md7
-rw-r--r--2022/info/rolodex-after.md453
-rw-r--r--2022/info/rolodex-before.md32
-rw-r--r--2022/info/rolodex-nav.md7
-rw-r--r--2022/info/sat-close-after.md7
-rw-r--r--2022/info/sat-close-before.md4
-rw-r--r--2022/info/sat-close-nav.md7
-rw-r--r--2022/info/sat-open-after.md89
-rw-r--r--2022/info/sat-open-before.md15
-rw-r--r--2022/info/sat-open-nav.md6
-rw-r--r--2022/info/school-after.md137
-rw-r--r--2022/info/school-before.md16
-rw-r--r--2022/info/school-nav.md7
-rw-r--r--2022/info/science-after.md399
-rw-r--r--2022/info/science-before.md58
-rw-r--r--2022/info/science-nav.md7
-rw-r--r--2022/info/sqlite-after.md451
-rw-r--r--2022/info/sqlite-before.md57
-rw-r--r--2022/info/sqlite-nav.md7
-rw-r--r--2022/info/sun-close-after.md7
-rw-r--r--2022/info/sun-close-before.md4
-rw-r--r--2022/info/sun-close-nav.md6
-rw-r--r--2022/info/sun-open-after.md7
-rw-r--r--2022/info/sun-open-before.md4
-rw-r--r--2022/info/sun-open-nav.md7
-rw-r--r--2022/info/survey-after.md538
-rw-r--r--2022/info/survey-before.md28
-rw-r--r--2022/info/survey-nav.md7
-rw-r--r--2022/info/tramp-after.md7
-rw-r--r--2022/info/tramp-before.md16
-rw-r--r--2022/info/tramp-nav.md7
-rw-r--r--2022/info/treesitter-after.md257
-rw-r--r--2022/info/treesitter-before.md21
-rw-r--r--2022/info/treesitter-nav.md7
-rw-r--r--2022/info/watch.md9
-rw-r--r--2022/info/wayland-after.md163
-rw-r--r--2022/info/wayland-before.md10
-rw-r--r--2022/info/wayland-nav.md7
-rw-r--r--2022/info/workflows-after.md451
-rw-r--r--2022/info/workflows-before.md56
-rw-r--r--2022/info/workflows-nav.md7
-rw-r--r--2022/meetings.org21
-rw-r--r--2022/organizers-notebook.bash10
-rw-r--r--2022/organizers-notebook.md8533
-rw-r--r--2022/organizers-notebook/emergency-back-to-one-sat-pm.svg1
-rw-r--r--2022/organizers-notebook/emergency-back-to-one-sun-am.svg1
-rw-r--r--2022/organizers-notebook/emergency-back-to-one-sun-pm.svg1
-rw-r--r--2022/organizers-notebook/index.org8712
-rw-r--r--2022/organizers-notebook/schedule.svg1
-rw-r--r--2022/planning.md25
-rw-r--r--2022/prepare.md301
-rw-r--r--2022/qa.md43
-rw-r--r--2022/schedule-2022-12-03.md1
-rw-r--r--2022/schedule-2022-12-04.md1
-rw-r--r--2022/schedule-details.md54
-rw-r--r--2022/schedule-image.md1
-rw-r--r--2022/schedule.svg1
-rw-r--r--2022/sidebar.md11
-rw-r--r--2022/speakers.md98
-rw-r--r--2022/submit.md107
-rw-r--r--2022/talks.md26
-rw-r--r--2022/talks/asmblox.md94
-rw-r--r--2022/talks/async.md103
-rw-r--r--2022/talks/buddy.md100
-rw-r--r--2022/talks/buttons.md108
-rw-r--r--2022/talks/community.md57
-rw-r--r--2022/talks/dbus.md173
-rw-r--r--2022/talks/detached.md89
-rw-r--r--2022/talks/devel.md73
-rw-r--r--2022/talks/eev.md71
-rw-r--r--2022/talks/eshell.md156
-rw-r--r--2022/talks/fanfare.md179
-rw-r--r--2022/talks/grail.md322
-rw-r--r--2022/talks/handwritten.md138
-rw-r--r--2022/talks/haskell.md45
-rw-r--r--2022/talks/health.md105
-rw-r--r--2022/talks/hyperorg.md160
-rw-r--r--2022/talks/indieweb.md132
-rw-r--r--2022/talks/journalism.md208
-rw-r--r--2022/talks/jupyter.md102
-rw-r--r--2022/talks/justl.md42
-rw-r--r--2022/talks/links.md2
-rw-r--r--2022/talks/localizing.md53
-rw-r--r--2022/talks/lspbridge.md143
-rw-r--r--2022/talks/mail.md153
-rw-r--r--2022/talks/maint.md249
-rw-r--r--2022/talks/meetups.md81
-rw-r--r--2022/talks/orgsuperlinks.md196
-rw-r--r--2022/talks/orgvm.md45
-rw-r--r--2022/talks/orgyear.md129
-rw-r--r--2022/talks/python.md69
-rw-r--r--2022/talks/rde.md105
-rw-r--r--2022/talks/realestate.md91
-rw-r--r--2022/talks/rms.md433
-rw-r--r--2022/talks/rolodex.md298
-rw-r--r--2022/talks/sat-close.md50
-rw-r--r--2022/talks/sat-open.md22
-rw-r--r--2022/talks/schedule-2022-12-03.svg1
-rw-r--r--2022/talks/schedule-2022-12-04.svg1
-rw-r--r--2022/talks/school.md102
-rw-r--r--2022/talks/science.md167
-rw-r--r--2022/talks/sqlite.md175
-rw-r--r--2022/talks/sun-close.md253
-rw-r--r--2022/talks/sun-open.md23
-rw-r--r--2022/talks/survey.md160
-rw-r--r--2022/talks/tramp.md28
-rw-r--r--2022/talks/treesitter.md121
-rw-r--r--2022/talks/wayland.md122
-rw-r--r--2022/talks/workflows.md56
-rw-r--r--2022/upload.md100
-rw-r--r--2022/volunteer.md35
-rw-r--r--2022/volunteer/caption.md63
-rw-r--r--2022/volunteer/checkin.md118
-rw-r--r--2022/volunteer/host.md111
-rw-r--r--2022/volunteer/irc.md82
-rw-r--r--2022/volunteer/pad.md83
-rw-r--r--2022/watch-dev.md45
-rw-r--r--2022/watch-gen.md52
-rw-r--r--2022/watch.md68
-rw-r--r--2022/watch/announce.md6
-rw-r--r--2022/watch/dev.md151
-rw-r--r--2022/watch/gen.md200
-rw-r--r--2022/watch/info.md7
-rw-r--r--2023.md56
-rw-r--r--2023/bbb-for-speakers.md127
-rw-r--r--2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt14
-rw-r--r--2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt315
-rw-r--r--2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt23
-rw-r--r--2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt1176
-rw-r--r--2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt4664
-rw-r--r--2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt38
-rw-r--r--2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt803
-rw-r--r--2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt1652
-rw-r--r--2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt593
-rw-r--r--2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt71
-rw-r--r--2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt2759
-rw-r--r--2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt244
-rw-r--r--2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt8261
-rw-r--r--2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt53
-rw-r--r--2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt1076
-rw-r--r--2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt3803
-rw-r--r--2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt35
-rw-r--r--2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt1079
-rw-r--r--2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt1829
-rw-r--r--2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt80
-rw-r--r--2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt2048
-rw-r--r--2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt20
-rw-r--r--2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt607
-rw-r--r--2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt755
-rw-r--r--2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt1049
-rw-r--r--2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt1780
-rw-r--r--2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt4022
-rw-r--r--2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt4625
-rw-r--r--2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt1595
-rw-r--r--2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt2274
-rw-r--r--2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt353
-rw-r--r--2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt1910
-rw-r--r--2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt41
-rw-r--r--2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt1377
-rw-r--r--2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt1019
-rw-r--r--2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt56
-rw-r--r--2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt1180
-rw-r--r--2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt17
-rw-r--r--2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt602
-rw-r--r--2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt4486
-rw-r--r--2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt696
-rw-r--r--2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt680
-rw-r--r--2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt17
-rw-r--r--2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt767
-rw-r--r--2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt1472
-rw-r--r--2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt38
-rw-r--r--2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt1102
-rw-r--r--2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt638
-rw-r--r--2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt80
-rw-r--r--2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt1319
-rw-r--r--2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt767
-rw-r--r--2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt49
-rw-r--r--2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt972
-rw-r--r--2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt1973
-rw-r--r--2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt20
-rw-r--r--2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt808
-rw-r--r--2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt44
-rw-r--r--2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt3324
-rw-r--r--2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt503
-rw-r--r--2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt364
-rw-r--r--2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt371
-rw-r--r--2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt68
-rw-r--r--2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt1044
-rw-r--r--2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt1871
-rw-r--r--2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt26
-rw-r--r--2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt1148
-rw-r--r--2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt1304
-rw-r--r--2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt41
-rw-r--r--2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt834
-rw-r--r--2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt1033
-rw-r--r--2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt355
-rw-r--r--2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt649
-rw-r--r--2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt2654
-rw-r--r--2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt53
-rw-r--r--2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt1193
-rw-r--r--2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt1406
-rw-r--r--2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt68
-rw-r--r--2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt1371
-rw-r--r--2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt788
-rw-r--r--2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt1202
-rw-r--r--2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt47
-rw-r--r--2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt1557
-rw-r--r--2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt3361
-rw-r--r--2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt53
-rw-r--r--2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt890
-rw-r--r--2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt779
-rw-r--r--2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt38
-rw-r--r--2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt1629
-rw-r--r--2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt1394
-rw-r--r--2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt2345
-rw-r--r--2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt314
-rw-r--r--2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt56
-rw-r--r--2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt649
-rw-r--r--2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt893
-rw-r--r--2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt26
-rw-r--r--2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt557
-rw-r--r--2023/cfp.md103
-rw-r--r--2023/cfp.org181
-rw-r--r--2023/draft-schedule.md60
-rw-r--r--2023/ideas.md31
-rw-r--r--2023/info/adventure-after.md129
-rw-r--r--2023/info/adventure-before.md18
-rw-r--r--2023/info/adventure-nav.md6
-rw-r--r--2023/info/collab-after.md423
-rw-r--r--2023/info/collab-before.md21
-rw-r--r--2023/info/collab-nav.md7
-rw-r--r--2023/info/core-after.md1565
-rw-r--r--2023/info/core-before.md12
-rw-r--r--2023/info/core-nav.md7
-rw-r--r--2023/info/cubing-after.md310
-rw-r--r--2023/info/cubing-before.md26
-rw-r--r--2023/info/cubing-nav.md7
-rw-r--r--2023/info/devel-after.md561
-rw-r--r--2023/info/devel-before.md12
-rw-r--r--2023/info/devel-nav.md7
-rw-r--r--2023/info/doc-after.md1189
-rw-r--r--2023/info/doc-before.md45
-rw-r--r--2023/info/doc-nav.md7
-rw-r--r--2023/info/eat-after.md113
-rw-r--r--2023/info/eat-before.md12
-rw-r--r--2023/info/eat-nav.md7
-rw-r--r--2023/info/emacsconf-after.md3170
-rw-r--r--2023/info/emacsconf-before.md37
-rw-r--r--2023/info/emacsconf-nav.md7
-rw-r--r--2023/info/emacsen-after.md1671
-rw-r--r--2023/info/emacsen-before.md31
-rw-r--r--2023/info/emacsen-nav.md7
-rw-r--r--2023/info/emms-after.md1371
-rw-r--r--2023/info/emms-before.md46
-rw-r--r--2023/info/emms-nav.md7
-rw-r--r--2023/info/eval-after.md231
-rw-r--r--2023/info/eval-before.md20
-rw-r--r--2023/info/eval-nav.md7
-rw-r--r--2023/info/extending-after.md7
-rw-r--r--2023/info/extending-before.md12
-rw-r--r--2023/info/extending-nav.md7
-rw-r--r--2023/info/flat-after.md262
-rw-r--r--2023/info/flat-before.md12
-rw-r--r--2023/info/flat-nav.md7
-rw-r--r--2023/info/gc-after.md964
-rw-r--r--2023/info/gc-before.md12
-rw-r--r--2023/info/gc-nav.md7
-rw-r--r--2023/info/hn-after.md7
-rw-r--r--2023/info/hn-before.md18
-rw-r--r--2023/info/hn-nav.md7
-rw-r--r--2023/info/hyperamp-after.md1351
-rw-r--r--2023/info/hyperamp-before.md18
-rw-r--r--2023/info/hyperamp-nav.md7
-rw-r--r--2023/info/hyperdrive-after.md1338
-rw-r--r--2023/info/hyperdrive-before.md20
-rw-r--r--2023/info/hyperdrive-nav.md7
-rw-r--r--2023/info/koutline-after.md128
-rw-r--r--2023/info/koutline-before.md12
-rw-r--r--2023/info/koutline-nav.md7
-rw-r--r--2023/info/lem-after.md7
-rw-r--r--2023/info/lem-before.md4
-rw-r--r--2023/info/lem-nav.md7
-rw-r--r--2023/info/llm-after.md1144
-rw-r--r--2023/info/llm-before.md33
-rw-r--r--2023/info/llm-nav.md7
-rw-r--r--2023/info/lspocaml-after.md793
-rw-r--r--2023/info/lspocaml-before.md38
-rw-r--r--2023/info/lspocaml-nav.md7
-rw-r--r--2023/info/matplotllm-after.md227
-rw-r--r--2023/info/matplotllm-before.md19
-rw-r--r--2023/info/matplotllm-nav.md7
-rw-r--r--2023/info/mentor-after.md1792
-rw-r--r--2023/info/mentor-before.md18
-rw-r--r--2023/info/mentor-nav.md7
-rw-r--r--2023/info/multi-after.md7
-rw-r--r--2023/info/multi-before.md4
-rw-r--r--2023/info/multi-nav.md7
-rw-r--r--2023/info/nabokov-after.md512
-rw-r--r--2023/info/nabokov-before.md25
-rw-r--r--2023/info/nabokov-nav.md7
-rw-r--r--2023/info/one-after.md904
-rw-r--r--2023/info/one-before.md32
-rw-r--r--2023/info/one-nav.md7
-rw-r--r--2023/info/overlay-after.md731
-rw-r--r--2023/info/overlay-before.md46
-rw-r--r--2023/info/overlay-nav.md7
-rw-r--r--2023/info/parallel-after.md631
-rw-r--r--2023/info/parallel-before.md36
-rw-r--r--2023/info/parallel-nav.md7
-rw-r--r--2023/info/poltys-after.md7
-rw-r--r--2023/info/poltys-before.md12
-rw-r--r--2023/info/poltys-nav.md7
-rw-r--r--2023/info/ref-after.md298
-rw-r--r--2023/info/ref-before.md20
-rw-r--r--2023/info/ref-nav.md7
-rw-r--r--2023/info/repl-after.md1146
-rw-r--r--2023/info/repl-before.md28
-rw-r--r--2023/info/repl-nav.md7
-rw-r--r--2023/info/sat-close-after.md178
-rw-r--r--2023/info/sat-close-before.md18
-rw-r--r--2023/info/sat-close-nav.md7
-rw-r--r--2023/info/sat-open-after.md132
-rw-r--r--2023/info/sat-open-before.md12
-rw-r--r--2023/info/sat-open-nav.md7
-rw-r--r--2023/info/scheme-after.md544
-rw-r--r--2023/info/scheme-before.md36
-rw-r--r--2023/info/scheme-nav.md7
-rw-r--r--2023/info/sharing-after.md1071
-rw-r--r--2023/info/sharing-before.md28
-rw-r--r--2023/info/sharing-nav.md7
-rw-r--r--2023/info/solo-after.md761
-rw-r--r--2023/info/solo-before.md33
-rw-r--r--2023/info/solo-nav.md7
-rw-r--r--2023/info/steno-after.md359
-rw-r--r--2023/info/steno-before.md12
-rw-r--r--2023/info/steno-nav.md7
-rw-r--r--2023/info/sun-close-after.md7
-rw-r--r--2023/info/sun-close-before.md12
-rw-r--r--2023/info/sun-close-nav.md6
-rw-r--r--2023/info/sun-open-after.md129
-rw-r--r--2023/info/sun-open-before.md12
-rw-r--r--2023/info/sun-open-nav.md7
-rw-r--r--2023/info/table-after.md252
-rw-r--r--2023/info/table-before.md12
-rw-r--r--2023/info/table-nav.md7
-rw-r--r--2023/info/taming-after.md7
-rw-r--r--2023/info/taming-before.md18
-rw-r--r--2023/info/taming-nav.md7
-rw-r--r--2023/info/teaching-after.md1340
-rw-r--r--2023/info/teaching-before.md37
-rw-r--r--2023/info/teaching-nav.md7
-rw-r--r--2023/info/test-after.md991
-rw-r--r--2023/info/test-before.md42
-rw-r--r--2023/info/test-nav.md7
-rw-r--r--2023/info/unentangling-after.md273
-rw-r--r--2023/info/unentangling-before.md12
-rw-r--r--2023/info/unentangling-nav.md7
-rw-r--r--2023/info/uni-after.md971
-rw-r--r--2023/info/uni-before.md35
-rw-r--r--2023/info/uni-nav.md7
-rw-r--r--2023/info/voice-after.md1473
-rw-r--r--2023/info/voice-before.md37
-rw-r--r--2023/info/voice-nav.md7
-rw-r--r--2023/info/web-after.md850
-rw-r--r--2023/info/web-before.md32
-rw-r--r--2023/info/web-nav.md7
-rw-r--r--2023/info/windows-after.md1260
-rw-r--r--2023/info/windows-before.md18
-rw-r--r--2023/info/windows-nav.md7
-rw-r--r--2023/info/woof-nav.md7
-rw-r--r--2023/info/world-after.md381
-rw-r--r--2023/info/world-before.md32
-rw-r--r--2023/info/world-nav.md7
-rw-r--r--2023/info/writing-after.md520
-rw-r--r--2023/info/writing-before.md28
-rw-r--r--2023/info/writing-nav.md7
-rw-r--r--2023/organizers-notebook.md2350
-rw-r--r--2023/organizers-notebook/index.org2555
-rw-r--r--2023/organizers-notebook/schedule-option-aligned-talks.svg1
-rw-r--r--2023/organizers-notebook/schedule-option-sun-am.svg1
-rw-r--r--2023/organizers-notebook/schedule.svg1
-rw-r--r--2023/planning.md26
-rw-r--r--2023/prepare.md262
-rw-r--r--2023/qa.md43
-rw-r--r--2023/report.md366
-rw-r--r--2023/report.org755
-rw-r--r--2023/schedule-2023-12-02.md1
-rw-r--r--2023/schedule-2023-12-03.md1
-rw-r--r--2023/schedule-details.md56
-rw-r--r--2023/sidebar.md12
-rw-r--r--2023/speakers.md98
-rw-r--r--2023/submit.md78
-rw-r--r--2023/talk-details.md27
-rw-r--r--2023/talks.md17
-rw-r--r--2023/talks/adventure.md73
-rw-r--r--2023/talks/collab.md195
-rw-r--r--2023/talks/core.md179
-rw-r--r--2023/talks/cubing.md105
-rw-r--r--2023/talks/devel.md111
-rw-r--r--2023/talks/doc.md69
-rw-r--r--2023/talks/eat.md141
-rw-r--r--2023/talks/emacsconf.md149
-rw-r--r--2023/talks/emacsen.md73
-rw-r--r--2023/talks/emms.md102
-rw-r--r--2023/talks/eval.md77
-rw-r--r--2023/talks/extending.md34
-rw-r--r--2023/talks/flat.md69
-rw-r--r--2023/talks/gc.md134
-rw-r--r--2023/talks/hn.md36
-rw-r--r--2023/talks/hyperamp.md121
-rw-r--r--2023/talks/hyperdrive.md194
-rw-r--r--2023/talks/koutline.md70
-rw-r--r--2023/talks/llm.md118
-rw-r--r--2023/talks/lspocaml.md50
-rw-r--r--2023/talks/matplotllm.md73
-rw-r--r--2023/talks/mentor.md144
-rw-r--r--2023/talks/multi.md29
-rw-r--r--2023/talks/nabokov.md125
-rw-r--r--2023/talks/one.md173
-rw-r--r--2023/talks/overlay.md111
-rw-r--r--2023/talks/parallel.md88
-rw-r--r--2023/talks/poltys.md100
-rw-r--r--2023/talks/ref.md64
-rw-r--r--2023/talks/repl.md116
-rw-r--r--2023/talks/sat-close.md21
-rw-r--r--2023/talks/sat-open.md24
-rw-r--r--2023/talks/scheme.md78
-rw-r--r--2023/talks/sharing.md117
-rw-r--r--2023/talks/solo.md136
-rw-r--r--2023/talks/steno.md68
-rw-r--r--2023/talks/sun-close.md46
-rw-r--r--2023/talks/sun-open.md21
-rw-r--r--2023/talks/table.md88
-rw-r--r--2023/talks/taming.md47
-rw-r--r--2023/talks/teaching.md145
-rw-r--r--2023/talks/test.md113
-rw-r--r--2023/talks/unentangling.md166
-rw-r--r--2023/talks/uni.md167
-rw-r--r--2023/talks/voice.md216
-rw-r--r--2023/talks/web.md147
-rw-r--r--2023/talks/windows.md70
-rw-r--r--2023/talks/world.md98
-rw-r--r--2023/talks/writing.md99
-rw-r--r--2023/volunteer.md114
-rw-r--r--2023/volunteer/caption.md63
-rw-r--r--2023/volunteer/checkin.md118
-rw-r--r--2023/volunteer/host.md111
-rw-r--r--2023/volunteer/irc.md82
-rw-r--r--2023/volunteer/pad.md83
-rw-r--r--2023/volunteer/stream.md90
-rw-r--r--2023/watch.md73
-rw-r--r--2023/watch/dev.md157
-rw-r--r--2023/watch/gen.md234
-rw-r--r--2023/watch/info.md11
-rw-r--r--CategoryCategory.md1
-rw-r--r--CategoryCoding.md6
-rw-r--r--CategoryCommunity.md6
-rw-r--r--CategoryConfiguration.md6
-rw-r--r--CategoryEEV.md6
-rw-r--r--CategoryEmacsLisp.md4
-rw-r--r--CategoryEmacsNews.md7
-rw-r--r--CategoryFun.md6
-rw-r--r--CategoryHyperbole.md6
-rw-r--r--CategoryLinguistics.md6
-rw-r--r--CategoryMail.md6
-rw-r--r--CategoryOrgMode.md3
-rw-r--r--CategoryOrgRoam.md3
-rw-r--r--CategoryPhilosophy.md3
-rw-r--r--CategoryPython.md6
-rw-r--r--CategoryTreeSitter.md6
-rw-r--r--CategoryVolunteer.md4
-rw-r--r--CategoryZettelkasten.md6
-rw-r--r--__60__TMPL_VAR.md4
-rw-r--r--bandali.md25
-rw-r--r--blog.md1
-rw-r--r--blog/2022-10-16.md44
-rw-r--r--blog/2022-10-23.md67
-rw-r--r--blog/2022-10-30.md51
-rw-r--r--blog/2022-11-07.md51
-rw-r--r--blog/2023-08-14-cfp-progress.md141
-rw-r--r--blog/2023-09-25-draft-schedule.md33
-rw-r--r--captioning.md201
-rw-r--r--colophon.md39
-rw-r--r--contact.md26
-rw-r--r--edit.md22
-rw-r--r--harvesting.md66
-rw-r--r--help.md27
-rw-r--r--help_with_chapter_markers.md83
-rw-r--r--help_with_main_captions.md15
-rw-r--r--i/2022-handwritten-abstract.pngbin0 -> 140141 bytes
-rw-r--r--i/2022-handwritten-title.pngbin0 -> 6681 bytes
-rw-r--r--i/emacsconf-2020-poster-alphapapa.svg7598
-rw-r--r--i/emacsconf-2021-poster-alphapapa.pngbin0 -> 204071 bytes
-rw-r--r--i/emacsconf-2021-poster-alphapapa.svg2642
-rw-r--r--i/emacsconf-2021-poster-garulfo.pngbin0 -> 501708 bytes
-rw-r--r--i/emacsconf-2021-poster-zleap.pngbin0 -> 298413 bytes
-rw-r--r--i/emacsconf-2023-collab-sponsorship.pngbin0 -> 387431 bytes
-rw-r--r--in-progress.md1
-rw-r--r--index.md19
-rw-r--r--infra.md76
-rw-r--r--local.css63
-rw-r--r--mpv.md93
-rw-r--r--tags__62__.md4
-rw-r--r--talks.md3
-rw-r--r--templates/chapters.md3
-rw-r--r--templates/chat.md1
-rw-r--r--templates/help.md12
-rw-r--r--templates/page.tmpl187
-rw-r--r--templates/pagedraft.md5
-rw-r--r--templates/sched.md20
-rw-r--r--templates/subtitle.md2
-rw-r--r--templates/time.md1
-rw-r--r--templates/vid.md12
1106 files changed, 366239 insertions, 4560 deletions
diff --git a/2019/talks/24.md b/2019/talks/24.md
index cc909e43..09917ca0 100644
--- a/2019/talks/24.md
+++ b/2019/talks/24.md
@@ -1,6 +1,8 @@
[[!meta title="GNU Emacs as software freedom in practice - Greg Farough"]]
[[!meta copyright="Copyright © 2019 Greg Farough"]]
+[[!taglink CategoryPhilosophy]]
+
[[!template id=vid
src="https://mirror.csclub.uwaterloo.ca/emacsconf/2019/emacsconf-2019-24-gnu-emacs-as-software-freedom-in-practice--ggoes.webm"
type="video/webm"]]
diff --git a/2020/info/01.md b/2020/info/01.md
index 1d575b35..70db1190 100644
--- a/2020/info/01.md
+++ b/2020/info/01.md
@@ -2,7 +2,8 @@
Sacha Chua
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--01-emacs-news-highlights--sacha-chua.webm" subtitles="/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt" duration="3:58" download="Download with subtitles" size="11MB"]]
-[Download compressed .webm video (10M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--01-emacs-news-highlights--sacha-chua--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (13.4M)](https://media.emacsconf.org/2020/emacsconf-2020--01-emacs-news-highlights--sacha-chua--compressed32.webm)
+[Download compressed .webm video (10M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--01-emacs-news-highlights--sacha-chua--vp9-q56-video-original-audio.webm)
[View transcript](https://github.com/sachac/emacsconf-2020-emacs-news-highlights)
Quick highlights from Emacs News since the last EmacsConf
diff --git a/2020/info/03.md b/2020/info/03.md
index 2eaa404e..db3be888 100644
--- a/2020/info/03.md
+++ b/2020/info/03.md
@@ -2,10 +2,12 @@
Bala Ramadurai
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.webm" subtitles="/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt"]]
-[Download compressed .webm video (8.1M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (17.3M)](https://media.emacsconf.org/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai--compressed32.webm)
+[Download compressed .webm video (8.1M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai--vp9-q56-video-original-audio.webm)
[[!template id=vid vidid="qnaVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm" download="Download Q&A .webm video, 720p" subtitles="/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt"]]
-[Download compressed Q&A .webm video (10.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (22.4M)](https://media.emacsconf.org/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai--compressed32.webm)
+[Download compressed Q&A .webm video (10.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai--vp9-q56-video-original-audio.webm)
[View transcript](#transcript-questions)
You want to write a novel, but you don't know how to create an
diff --git a/2020/info/04.md b/2020/info/04.md
index e80e7518..40ad0ec9 100644
--- a/2020/info/04.md
+++ b/2020/info/04.md
@@ -2,7 +2,8 @@
Jonathan Gregory
[[!template id=vid vidid=mainVideo src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.webm" subtitles="/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt"]]
-[Download compressed .webm video (13.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--04-music-in-plain-text--jonathan-gregory--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (15.6M)](https://media.emacsconf.org/2020/emacsconf-2020--04-music-in-plain-text--jonathan-gregory--compressed32.webm)
+[Download compressed .webm video (13.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--04-music-in-plain-text--jonathan-gregory--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
LilyPond is an extensible program for producing high-quality sheet
diff --git a/2020/info/05.md b/2020/info/05.md
index 30aaf561..c892d04f 100644
--- a/2020/info/05.md
+++ b/2020/info/05.md
@@ -1,12 +1,15 @@
# Bard Bivou(m)acs - Building a bandcamp-like page for an album of music
Grant Shangreaux
-[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.webm" subtitles="/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt"]]
-[Download compressed .webm video (20.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux--vp9-q56-video-original-audio.webm)
+[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.webm" subtitles="/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt"
+other_resources="""[Download compressed .webm video (65.2M)](https://media.emacsconf.org/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux--compressed32.webm)
+[Download compressed .webm video (20.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux--vp9-q56-video-original-audio.webm)
+"""]]
[View transcript](#transcript)
[[!template id=vid vidid="qnaVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.webm" download="Download Q&A video, 720p" subtitles="/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt"]]
-[Download compressed Q&A .webm video (15.7M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (40.1M)](https://media.emacsconf.org/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux--compressed32.webm)
+[Download compressed Q&A .webm video (15.7M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux--vp9-q56-video-original-audio.webm)
[View transcript for Q&A](#transcript-questions)
I hoped to become a successful musician someday, and while that has
diff --git a/2020/info/06.md b/2020/info/06.md
index 98be1573..2eae273f 100644
--- a/2020/info/06.md
+++ b/2020/info/06.md
@@ -2,7 +2,8 @@
Corwin Brust
[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.webm" size="114M" duration="13:41" subtitles="/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt"]]
-[Download compressed .webm video (12M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--06-trivial-emacs-kits--corwin-brust--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (20.2M)](https://media.emacsconf.org/2020/emacsconf-2020--06-trivial-emacs-kits--corwin-brust--compressed32.webm)
+[Download compressed .webm video (12M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--06-trivial-emacs-kits--corwin-brust--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
Techniques to help new users bootstrap a more gentle introduction to
diff --git a/2020/info/07.md b/2020/info/07.md
index 1b9e0939..2fd5352f 100644
--- a/2020/info/07.md
+++ b/2020/info/07.md
@@ -2,11 +2,13 @@
Sid Kasivajhula
[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.webm" subtitles="/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt" size="161MB"]]
-[Download compressed .webm video (45.1M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (40M)](https://media.emacsconf.org/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula--compressed32.webm)
+[Download compressed .webm video (45.1M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.webm" subtitles="/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt" size="40MB"]]
-[Download compressed .webm video (5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (9.2M)](https://media.emacsconf.org/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula--compressed32.webm)
+[Download compressed .webm video (5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula--vp9-q56-video-original-audio.webm)
A practiced dexterity with the arcane incantations known as keybindings is
the true mark of the veteran Emacs user. Yet, it takes years to get there,
diff --git a/2020/info/08.md b/2020/info/08.md
index 5494a68e..da17faf5 100644
--- a/2020/info/08.md
+++ b/2020/info/08.md
@@ -2,7 +2,8 @@
Andrew Tropin
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.webm" subtitles="/2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt"]]
-[Download compressed .webm video (18.4M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (29.4M)](https://media.emacsconf.org/2020/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin--compressed32.webm)
+[Download compressed .webm video (18.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
It's not always easy to take part of someone's configuration and make
@@ -59,6 +60,10 @@ Currently trying it, and also in-process of switching from Nix to Guix.
- Using Org-roam to demo how to config a Nix layer(?)
- custom.el conflicts with Nix(?)
+# Related talks
+
+- [rde Emacs introduction](/2022/talks/rde/) - Andrew's 2022 talk
+
<a name="transcript"></a>
# Transcript
diff --git a/2020/info/09.md b/2020/info/09.md
index 55490bca..6c3f6a45 100644
--- a/2020/info/09.md
+++ b/2020/info/09.md
@@ -2,11 +2,13 @@
Rainer König
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.webm" subtitles="/2020/subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt"]]
-[Download compressed .webm video (12M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (22.5M)](https://media.emacsconf.org/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig--compressed32.webm)
+[Download compressed .webm video (12M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--questions--rainer-konig.webm" download="Download Q&A video, 720p"]]
-[Download compressed Q&A .webm video (5.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--09-orgmode-your-life-in-plain-text--questions--rainer-konig--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (12.2M)](https://media.emacsconf.org/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--questions--rainer-konig--compressed32.webm)
+[Download compressed Q&A .webm video (5.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--09-orgmode-your-life-in-plain-text--questions--rainer-konig--vp9-q56-video-original-audio.webm)
In this talk I'll give you a quick overview of my Orgmode GTD
system. We start with capturing a small project, scheduling
diff --git a/2020/info/10.md b/2020/info/10.md
index 40bf9516..9d0cb53d 100644
--- a/2020/info/10.md
+++ b/2020/info/10.md
@@ -2,7 +2,8 @@
Andrea
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--10-lead-your-future-with-org--andrea.webm" subtitles="/2020/subtitles/emacsconf-2020--10-lead-your-future-with-org--andrea.vtt"]]
-[Download compressed .webm video (10.5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--10-lead-your-future-with-org--andrea--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (16.5M)](https://media.emacsconf.org/2020/emacsconf-2020--10-lead-your-future-with-org--andrea--compressed32.webm)
+[Download compressed .webm video (10.5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--10-lead-your-future-with-org--andrea--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
The world is full of possibilities. A person life is rather short
diff --git a/2020/info/12.md b/2020/info/12.md
index 1f60436b..32ed9f83 100644
--- a/2020/info/12.md
+++ b/2020/info/12.md
@@ -2,7 +2,8 @@
Leo Vivier
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.webm" subtitles="/2020/subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.vtt"]]
-[Download compressed .webm video (22.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (52.1M)](https://media.emacsconf.org/2020/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier--compressed32.webm)
+[Download compressed .webm video (22.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
Many discussions have been had over the years on the debate between
diff --git a/2020/info/13.md b/2020/info/13.md
index f98ef404..346d1d40 100644
--- a/2020/info/13.md
+++ b/2020/info/13.md
@@ -2,7 +2,8 @@
Joseph Corneli, Raymond Puzio, and Cameron Ray Smith
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.webm" subtitles="/2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.vtt"]]
-[Download compressed .webm video (8.6M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (14.7M)](https://media.emacsconf.org/2020/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith--compressed32.webm)
+[Download compressed .webm video (8.6M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
We present a short experience report from the perspective of two
diff --git a/2020/info/14.md b/2020/info/14.md
index e6e4e127..dfb65c43 100644
--- a/2020/info/14.md
+++ b/2020/info/14.md
@@ -2,7 +2,8 @@
Adam Ard
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--14-readme-driven-design--adam-ard.webm" subtitles="/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt"]]
-[Download compressed .webm video (21.4M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--14-readme-driven-design--adam-ard--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (26.6M)](https://media.emacsconf.org/2020/emacsconf-2020--14-readme-driven-design--adam-ard--compressed32.webm)
+[Download compressed .webm video (21.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--14-readme-driven-design--adam-ard--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
Many source code projects these days begin with a README file. While
diff --git a/2020/info/15.md b/2020/info/15.md
index 297b6cfe..d559901d 100644
--- a/2020/info/15.md
+++ b/2020/info/15.md
@@ -2,7 +2,8 @@
Adolfo Villafiorita
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.webm" subtitles="/2020/subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.vtt"]]
-[Download compressed .webm video (13.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (23.6M)](https://media.emacsconf.org/2020/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita--compressed32.webm)
+[Download compressed .webm video (13.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
I have been a long time user of static site generators, such as
diff --git a/2020/info/17.md b/2020/info/17.md
index 37a07710..83675788 100644
--- a/2020/info/17.md
+++ b/2020/info/17.md
@@ -2,7 +2,8 @@
Noorah Alhasan
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.webm" subtitles="/2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt"]]
-[Download compressed .webm video (22.2M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (50.8M)](https://media.emacsconf.org/2020/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan--compressed32.webm)
+[Download compressed .webm video (22.2M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
Org-mode improved so much over the years, and the use-cases in org-mode are
diff --git a/2020/info/18.md b/2020/info/18.md
index 67794237..80390a73 100644
--- a/2020/info/18.md
+++ b/2020/info/18.md
@@ -2,7 +2,8 @@
Leo Vivier
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.webm" subtitles="/2020/subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt"]]
-[Download compressed .webm video (23.5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (47.4M)](https://media.emacsconf.org/2020/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier--compressed32.webm)
+[Download compressed .webm video (23.5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier--vp9-q56-video-original-audio.webm)
Org-roam is a Roam replica built on top of the all-powerful Org-mode.
diff --git a/2020/info/19.md b/2020/info/19.md
index ec5f5442..4dc84a04 100644
--- a/2020/info/19.md
+++ b/2020/info/19.md
@@ -2,7 +2,8 @@
Brett Gilio
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.webm" subtitles="/2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt"]]
-[Download compressed .webm video (20.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (25.8M)](https://media.emacsconf.org/2020/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio--compressed32.webm)
+[Download compressed .webm video (20.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio--vp9-q56-video-original-audio.webm)
In this talk I will detail the ways in which static website generation
results may be enhanced using org-webring. This talk will cover not
diff --git a/2020/info/20.md b/2020/info/20.md
index 51024c41..a8af5e35 100644
--- a/2020/info/20.md
+++ b/2020/info/20.md
@@ -2,7 +2,8 @@
Corwin Brust
[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm" subtitles="/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt"]]
-[Download compressed .webm video (24.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--20-omg-macros--corwin-brust--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (45.8M)](https://media.emacsconf.org/2020/emacsconf-2020--20-omg-macros--corwin-brust--compressed32.webm)
+[Download compressed .webm video (24.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--20-omg-macros--corwin-brust--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
Macros are a powerful tool. In the context of Emacs Lisp programming
diff --git a/2020/info/21.md b/2020/info/21.md
index aa5dabf7..96165e9e 100644
--- a/2020/info/21.md
+++ b/2020/info/21.md
@@ -2,7 +2,8 @@
Eduardo Ochs
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.webm" subtitles="/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt"]]
-[Download compressed .webm video (43.9M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (92.9M)](https://media.emacsconf.org/2020/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs--compressed32.webm)
+[Download compressed .webm video (43.9M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs--vp9-q56-video-original-audio.webm)
In the last months there were several hundreds of messages in
emacs-devel in threads with names like "A proposal for a friendlier
diff --git a/2020/info/22.md b/2020/info/22.md
index 85e366d1..638a2d2f 100644
--- a/2020/info/22.md
+++ b/2020/info/22.md
@@ -2,7 +2,8 @@
Musa Al-hassy
[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.webm" subtitles="/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt" video]]
-[Download compressed .webm video (29.2M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (58.5M)](https://media.emacsconf.org/2020/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy--compressed32.webm)
+[Download compressed .webm video (29.2M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
Users will generally only make use of a few predefined \`special
diff --git a/2020/info/23.md b/2020/info/23.md
index 7f20b2fd..e00d3c28 100644
--- a/2020/info/23.md
+++ b/2020/info/23.md
@@ -2,11 +2,13 @@
Tuấn-Anh Nguyễn
[[!template vidid="mainVideo" id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.webm" subtitles="/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.vtt"]]
-[Download compressed .webm video (21.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (26.2M)](https://media.emacsconf.org/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen--compressed32.webm)
+[Download compressed .webm video (21.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen.webm" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (16.4M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (35.8M)](https://media.emacsconf.org/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen--compressed32.webm)
+[Download compressed Q&A .webm video (16.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen--vp9-q56-video-original-audio.webm)
Tree-sitter is a parser generator and an incremental parsing library.
emacs-tree-sitter is its most popular Emacs binding, which aims to be
@@ -177,6 +179,10 @@ Yes, it is just matter of paperwork.
- An updated video version was uploaded after the event, with the
missing introduction to Tree-sitter added.
+# Related talks
+
+[[!taglink CategoryTreeSitter]]
+
<a name="transcript"></a>
# Transcript
diff --git a/2020/info/24.md b/2020/info/24.md
index 9b9ae189..af8e503f 100644
--- a/2020/info/24.md
+++ b/2020/info/24.md
@@ -2,7 +2,8 @@
Andrea
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--24-analyze-code-quality-through-emacs-a-smart-forensics-approach-and-the-story-of-a-hack--andrea.webm"]]
-[Download compressed .webm video (36.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--24-analyze-code-quality-through-emacs-a-smart-forensics-approach-and-the-story-of-a-hack--andrea--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (55.4M)](https://media.emacsconf.org/2020/emacsconf-2020--24-analyze-code-quality-through-emacs-a-smart-forensics-approach-and-the-story-of-a-hack--andrea--compressed32.webm)
+[Download compressed .webm video (36.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--24-analyze-code-quality-through-emacs-a-smart-forensics-approach-and-the-story-of-a-hack--andrea--vp9-q56-video-original-audio.webm)
[EmacsConf2020: first steps towards Emacs becoming your code compass!](https://ag91.github.io/blog/2020/12/11/emacsconf2020-first-steps-towards-emacs-becoming-your-code-compass/)
diff --git a/2020/info/25.md b/2020/info/25.md
index 4e49cdc6..506f3de5 100644
--- a/2020/info/25.md
+++ b/2020/info/25.md
@@ -2,7 +2,8 @@
Zen Monk Alain M. Lafon
[[!template vidid="mainVideo" id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.webm" subtitles="/2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.vtt"]]
-[Download compressed .webm video (15.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (18.1M)](https://media.emacsconf.org/2020/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon--compressed32.webm)
+[Download compressed .webm video (15.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
If you are working with complex nested JSON structures, you are
diff --git a/2020/info/26.md b/2020/info/26.md
index c53853f0..50463949 100644
--- a/2020/info/26.md
+++ b/2020/info/26.md
@@ -2,11 +2,13 @@
Pierce Wang
[[!template vidid="mainVideo" id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.webm" subtitles="/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.vtt"]]
-[Download compressed .webm video (9.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (16.7M)](https://media.emacsconf.org/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang--compressed32.webm)
+[Download compressed .webm video (9.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang.webm" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (7.5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (20.9M)](https://media.emacsconf.org/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang--compressed32.webm)
+[Download compressed Q&A .webm video (7.5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang--vp9-q56-video-original-audio.webm)
Could Emacs be humanity's solution to the turbulent years of
adolescence? So much more than a text editor, Emacs changed the way I
diff --git a/2020/info/27.md b/2020/info/27.md
index 9740bd07..d7a5c1b5 100644
--- a/2020/info/27.md
+++ b/2020/info/27.md
@@ -2,7 +2,8 @@
Vasilij "wasamasa" Schneidermann
[[!template vidid=mainVideo id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.webm" subtitles="/2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.vtt"]]
-[Download compressed .webm video (7.2M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (9.6M)](https://media.emacsconf.org/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann--compressed32.webm)
+[Download compressed .webm video (7.2M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
- [chip8 demo - alien, .webm video, 720p, 2M](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-alien--vasilij-wasamasa-schneidermann.webm)
diff --git a/2020/info/28.md b/2020/info/28.md
index 9aa61df0..5ea02d1c 100644
--- a/2020/info/28.md
+++ b/2020/info/28.md
@@ -2,7 +2,8 @@
Erik Elmshauser and Corwin Brust
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust.webm"]]
-[Download compressed .webm video (84.2M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (257.5M)](https://media.emacsconf.org/2020/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust--compressed32.webm)
+[Download compressed .webm video (84.2M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust--vp9-q56-video-original-audio.webm)
Dungeon is an oral and physical media fantasy and abstract role-play
gaming tradition that seems to have grown from miniature and
diff --git a/2020/info/30.md b/2020/info/30.md
index 1535f2ab..c1ccb761 100644
--- a/2020/info/30.md
+++ b/2020/info/30.md
@@ -1,11 +1,14 @@
# A tour of vterm
Gabriele Bozzola (@sbozzolo)
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.webm"]]
-[Download compressed .webm video (10.9M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo--vp9-q56-video-original-audio.webm)
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.webm" subtitles="/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt"]]
+[Download compressed .webm video (17.7M)](https://media.emacsconf.org/2020/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo--compressed32.webm)
+[Download compressed .webm video (10.9M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo--vp9-q56-video-original-audio.webm) g
+[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo.webm" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (3.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (4.1M)](https://media.emacsconf.org/2020/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo--compressed32.webm)
+[Download compressed Q&A .webm video (3.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo--vp9-q56-video-original-audio.webm)
Vterm is a fast and fully capable terminal emulator in GNU Emacs built
as a dynamic module on top of libvterm. In this talk, I will give an
@@ -47,3 +50,182 @@ in Emacs.
# Notes
<https://github.com/akermu/emacs-libvterm>
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello and welcome to this talk." start="00:00:00.880" video="mainVideo" id=subtitle]]
+[[!template text="The title of this talk is a tour of vterm," start="00:00:03.760" video="mainVideo" id=subtitle]]
+[[!template text="a fast and fully featured terminal emulator" start="00:00:06.080" video="mainVideo" id=subtitle]]
+[[!template text="inside GNU Emacs." start="00:00:08.559" video="mainVideo" id=subtitle]]
+[[!template text="So let's try to understand what we mean" start="00:00:10.801" video="mainVideo" id=subtitle]]
+[[!template text="with &quot ;fast and fully featured.&quot ;" start="00:00:12.720" video="mainVideo" id=subtitle]]
+[[!template text="To do that we'll compare vterm" start="00:00:14.559" video="mainVideo" id=subtitle]]
+[[!template text="with the packages which are built in Emacs," start="00:00:16.801" video="mainVideo" id=subtitle]]
+[[!template text="mainly, term." start="00:00:20.401" video="mainVideo" id=subtitle]]
+[[!template text="So let's jump into the vterm." start="00:00:22.400" video="mainVideo" id=subtitle]]
+[[!template text="So this is a vterm buffer" start="00:00:25.040" video="mainVideo" id=subtitle]]
+[[!template text="and this is a ansi-term buffer." start="00:00:26.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="What I'm going to do now is" start="00:00:29.440" video="mainVideo" id=subtitle]]
+[[!template text="first I'm going to prove to you" start="00:00:30.721" video="mainVideo" id=subtitle]]
+[[!template text="what we mean by fast." start="00:00:32.160" video="mainVideo" id=subtitle]]
+[[!template text="To do that, let me open a large file display on screen--" start="00:00:34.161" video="mainVideo" id=subtitle]]
+[[!template text="a large file, this is about one megabyte of data--" start="00:00:37.441" video="mainVideo" id=subtitle]]
+[[!template text="and let me time that." start="00:00:40.239" video="mainVideo" id=subtitle]]
+[[!template text="It takes about 0.6 seconds with vterm." start="00:00:41.841" video="mainVideo" id=subtitle]]
+[[!template text="Let's do the same with with ansi-term." start="00:00:45.201" video="mainVideo" id=subtitle]]
+[[!template text="Well, we already see the difference." start="00:00:48.321" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I will use this time to tell you" start="00:00:51.520" video="mainVideo" id=subtitle]]
+[[!template text="what's different, and what is vterm exactly." start="00:00:53.039" video="mainVideo" id=subtitle]]
+[[!template text="vterm is a terminal emulator" start="00:00:56.321" video="mainVideo" id=subtitle]]
+[[!template text="built on top of an external library." start="00:00:58.400" video="mainVideo" id=subtitle]]
+[[!template text="The library is called libvterm," start="00:01:00.801" video="mainVideo" id=subtitle]]
+[[!template text="and is the same library used by Newton" start="00:01:02.719" video="mainVideo" id=subtitle]]
+[[!template text="for their own terminal emulator." start="00:01:05.519" video="mainVideo" id=subtitle]]
+[[!template text="It's a C library, and this is what gives us" start="00:01:07.200" video="mainVideo" id=subtitle]]
+[[!template text="a lot of good features. First, the speed." start="00:01:10.799" video="mainVideo" id=subtitle]]
+[[!template text="Time spent here, 0.6, is essentially" start="00:01:15.119" video="mainVideo" id=subtitle]]
+[[!template text="the time that it takes to:" start="00:01:17.120" video="mainVideo" id=subtitle]]
+[[!template text="1\. convert the Emacs representation of text" start="00:01:18.479" video="mainVideo" id=subtitle]]
+[[!template text="into the vterm representation of what is a string," start="00:01:22.241" video="mainVideo" id=subtitle]]
+[[!template text="and 2., into actually displaying that," start="00:01:25.041" video="mainVideo" id=subtitle]]
+[[!template text="and that can take time" start="00:01:27.361" video="mainVideo" id=subtitle]]
+[[!template text="if there's fontification involved." start="00:01:29.520" video="mainVideo" id=subtitle]]
+[[!template text="So these are the 0.6 seconds there." start="00:01:32.241" video="mainVideo" id=subtitle]]
+[[!template text="As we say, in ansi-term, that's much more time." start="00:01:34.240" video="mainVideo" id=subtitle]]
+[[!template text="It's much slower. So the terminal will feel" start="00:01:38.480" video="mainVideo" id=subtitle]]
+[[!template text="much snappier, much faster." start="00:01:40.721" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But that's not the main benefit or the only benefit" start="00:01:42.880" video="mainVideo" id=subtitle]]
+[[!template text="of using this external library vterm." start="00:01:46.721" video="mainVideo" id=subtitle]]
+[[!template text="The second big benefit is that" start="00:01:49.760" video="mainVideo" id=subtitle]]
+[[!template text="vterm has support for all the escape codes" start="00:01:53.041" video="mainVideo" id=subtitle]]
+[[!template text="that xterm has support for," start="00:01:56.560" video="mainVideo" id=subtitle]]
+[[!template text="so vterm is essentially as running xterm" start="00:01:58.321" video="mainVideo" id=subtitle]]
+[[!template text="inside an Emacs buffer. So let's see that." start="00:02:01.119" video="mainVideo" id=subtitle]]
+[[!template text="For example, let's start by looking" start="00:02:03.600" video="mainVideo" id=subtitle]]
+[[!template text="at the support for colors." start="00:02:05.760" video="mainVideo" id=subtitle]]
+[[!template text="We have support for all the colors out of the box." start="00:02:08.239" video="mainVideo" id=subtitle]]
+[[!template text="We don't have to do anything." start="00:02:10.320" video="mainVideo" id=subtitle]]
+[[!template text="And if we did the same here, well," start="00:02:11.840" video="mainVideo" id=subtitle]]
+[[!template text="we have only 20 colors." start="00:02:14.721" video="mainVideo" id=subtitle]]
+[[!template text="There's a way to get all the colors," start="00:02:16.801" video="mainVideo" id=subtitle]]
+[[!template text="but it's much more involved." start="00:02:18.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But this is not where vterm shines." start="00:02:19.680" video="mainVideo" id=subtitle]]
+[[!template text="We can run all the commands that we want." start="00:02:23.040" video="mainVideo" id=subtitle]]
+[[!template text="htop, ncdu, everything runs here." start="00:02:27.200" video="mainVideo" id=subtitle]]
+[[!template text="Also this title, it's a fairly complicated" start="00:02:31.441" video="mainVideo" id=subtitle]]
+[[!template text="manipulation of the window" start="00:02:35.520" video="mainVideo" id=subtitle]]
+[[!template text="and it will not work here." start="00:02:37.921" video="mainVideo" id=subtitle]]
+[[!template text="It just doesn't work actually." start="00:02:40.879" video="mainVideo" id=subtitle]]
+[[!template text="Now the terminal is probably messed up. Yes." start="00:02:42.001" video="mainVideo" id=subtitle]]
+[[!template text="So using this external library" start="00:02:46.161" video="mainVideo" id=subtitle]]
+[[!template text="removes the burden from the developers" start="00:02:48.400" video="mainVideo" id=subtitle]]
+[[!template text="of having to implement support" start="00:02:50.959" video="mainVideo" id=subtitle]]
+[[!template text="for all the escape codes." start="00:02:52.320" video="mainVideo" id=subtitle]]
+[[!template text="We just use those." start="00:02:53.281" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So in many ways, running vterm" start="00:02:55.360" video="mainVideo" id=subtitle]]
+[[!template text="is running xterm inside Emacs," start="00:02:58.480" video="mainVideo" id=subtitle]]
+[[!template text="but it's better than that because," start="00:03:01.760" video="mainVideo" id=subtitle]]
+[[!template text="since this is an Emacs buffer," start="00:03:04.160" video="mainVideo" id=subtitle]]
+[[!template text="we can enjoy a lot of features from Emacs" start="00:03:05.840" video="mainVideo" id=subtitle]]
+[[!template text="as well as a tighter integration" start="00:03:09.760" video="mainVideo" id=subtitle]]
+[[!template text="with Emacs itself." start="00:03:11.361" video="mainVideo" id=subtitle]]
+[[!template text="For example, as you see here," start="00:03:13.200" video="mainVideo" id=subtitle]]
+[[!template text="the title of my buffer is from the directory I'm in." start="00:03:15.841" video="mainVideo" id=subtitle]]
+[[!template text="So let's go to my tmp." start="00:03:20.240" video="mainVideo" id=subtitle]]
+[[!template text="The title will change." start="00:03:21.760" video="mainVideo" id=subtitle]]
+[[!template text="So there's information being exchanged" start="00:03:23.441" video="mainVideo" id=subtitle]]
+[[!template text="between vterm and Emacs." start="00:03:25.921" video="mainVideo" id=subtitle]]
+[[!template text="And of course, the title is not the only place" start="00:03:28.000" video="mainVideo" id=subtitle]]
+[[!template text="where information is exchanged." start="00:03:30.001" video="mainVideo" id=subtitle]]
+[[!template text="I can find a file and I will be in the directory" start="00:03:32.000" video="mainVideo" id=subtitle]]
+[[!template text="where my terminal is." start="00:03:35.920" video="mainVideo" id=subtitle]]
+[[!template text="This feature is also available in ansi-term," start="00:03:37.681" video="mainVideo" id=subtitle]]
+[[!template text="and it works also on vterm," start="00:03:40.000" video="mainVideo" id=subtitle]]
+[[!template text="and it follows me. So if I go to tmp," start="00:03:41.361" video="mainVideo" id=subtitle]]
+[[!template text="I'll get the tmp." start="00:03:43.441" video="mainVideo" id=subtitle]]
+[[!template text="If I ssh to a remote server," start="00:03:44.720" video="mainVideo" id=subtitle]]
+[[!template text="it will work also on remote servers as well," start="00:03:47.121" video="mainVideo" id=subtitle]]
+[[!template text="which is a very nice way to edit files remotely" start="00:03:50.240" video="mainVideo" id=subtitle]]
+[[!template text="while we're working on a shell." start="00:03:53.920" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And second, while vterm is not an Elisp interpreter" start="00:03:55.600" video="mainVideo" id=subtitle]]
+[[!template text="like eshell, what we can do is" start="00:03:59.281" video="mainVideo" id=subtitle]]
+[[!template text="we can still run Emacs functions." start="00:04:01.201" video="mainVideo" id=subtitle]]
+[[!template text="So for example..." start="00:04:04.721" video="mainVideo" id=subtitle]]
+[[!template text="that requires some configuration." start="00:04:06.081" video="mainVideo" id=subtitle]]
+[[!template text="vterm command (message &quot;hi&quot;)" start="00:04:08.001" video="mainVideo" id=subtitle]]
+[[!template text="as you see there's a &quot;hi&quot; here." start="00:04:11.600" video="mainVideo" id=subtitle]]
+[[!template text="So what I'm doing is I'm executing" start="00:04:13.121" video="mainVideo" id=subtitle]]
+[[!template text="the Elisp function hi." start="00:04:14.960" video="mainVideo" id=subtitle]]
+[[!template text="I can drop that and turn it around," start="00:04:16.239" video="mainVideo" id=subtitle]]
+[[!template text="hash function to run Elisp functions." start="00:04:18.960" video="mainVideo" id=subtitle]]
+[[!template text="Or another one, find-file, same." start="00:04:21.601" video="mainVideo" id=subtitle]]
+[[!template text="We call this feature &quot;message passing,&quot;" start="00:04:24.880" video="mainVideo" id=subtitle]]
+[[!template text="and it requires some configuration" start="00:04:27.361" video="mainVideo" id=subtitle]]
+[[!template text="on the Emacs side as well as in the shell side." start="00:04:30.001" video="mainVideo" id=subtitle]]
+[[!template new="1" text="It's important to stress" start="00:04:32.000" video="mainVideo" id=subtitle]]
+[[!template text="what's the nature of vterm." start="00:04:33.441" video="mainVideo" id=subtitle]]
+[[!template text="For instance, every time I'm sending a key binding," start="00:04:35.360" video="mainVideo" id=subtitle]]
+[[!template text="it's not immediately clear if my intention is" start="00:04:37.920" video="mainVideo" id=subtitle]]
+[[!template text="to send it to the shell or to Emacs." start="00:04:40.001" video="mainVideo" id=subtitle]]
+[[!template text="So vterm implements some reasonable defaults," start="00:04:41.841" video="mainVideo" id=subtitle]]
+[[!template text="but at the moment it's mainly packaged" start="00:04:44.320" video="mainVideo" id=subtitle]]
+[[!template text="to display characters on a screen." start="00:04:46.800" video="mainVideo" id=subtitle]]
+[[!template text="So for example, if you're using evil," start="00:04:49.120" video="mainVideo" id=subtitle]]
+[[!template text="the editing commands in evil" start="00:04:50.721" video="mainVideo" id=subtitle]]
+[[!template text="will not work immediately." start="00:04:52.640" video="mainVideo" id=subtitle]]
+[[!template text="There's some work to be done" start="00:04:54.081" video="mainVideo" id=subtitle]]
+[[!template text="and integration can be improved on that side," start="00:04:55.759" video="mainVideo" id=subtitle]]
+[[!template new="1" text="but sometimes we really want this to behave" start="00:04:58.161" video="mainVideo" id=subtitle]]
+[[!template text="exactly like a Emacs buffer." start="00:05:00.240" video="mainVideo" id=subtitle]]
+[[!template text="We want to be able to search." start="00:05:02.240" video="mainVideo" id=subtitle]]
+[[!template text="If I try to get it to search," start="00:05:03.681" video="mainVideo" id=subtitle]]
+[[!template text="it will not work." start="00:05:06.640" video="mainVideo" id=subtitle]]
+[[!template text="I will send it to the shell." start="00:05:07.281" video="mainVideo" id=subtitle]]
+[[!template text="So to do that, we enabled vterm copy mode." start="00:05:08.401" video="mainVideo" id=subtitle]]
+[[!template text="As you see, copy mode, and now this buffer" start="00:05:11.920" video="mainVideo" id=subtitle]]
+[[!template text="is essentially a fundamental buffer." start="00:05:14.721" video="mainVideo" id=subtitle]]
+[[!template text="I can move around. I can search." start="00:05:17.039" video="mainVideo" id=subtitle]]
+[[!template text="So it must have... I can do everything I want." start="00:05:21.120" video="mainVideo" id=subtitle]]
+[[!template text="And there are additional features." start="00:05:25.521" video="mainVideo" id=subtitle]]
+[[!template text="For example, I can jump around all the prompts." start="00:05:26.480" video="mainVideo" id=subtitle]]
+[[!template text="I find this extremely useful," start="00:05:30.561" video="mainVideo" id=subtitle]]
+[[!template text="because I can copy updates from my programs." start="00:05:32.639" video="mainVideo" id=subtitle]]
+[[!template text="What I always have to do is" start="00:05:35.040" video="mainVideo" id=subtitle]]
+[[!template text="I have to Google some errors." start="00:05:38.321" video="mainVideo" id=subtitle]]
+[[!template text="So what I do is I select that" start="00:05:41.521" video="mainVideo" id=subtitle]]
+[[!template text="and I have my keybinding in Emacs conf," start="00:05:43.120" video="mainVideo" id=subtitle]]
+[[!template text="and I'm Googling what I have to Google." start="00:05:45.121" video="mainVideo" id=subtitle]]
+[[!template text="So this is very nice and if I..." start="00:05:48.480" video="mainVideo" id=subtitle]]
+[[!template text="now that I have selected something," start="00:05:51.121" video="mainVideo" id=subtitle]]
+[[!template text="if I just press return," start="00:05:52.640" video="mainVideo" id=subtitle]]
+[[!template text="I will go back to my normal editing mode" start="00:05:53.841" video="mainVideo" id=subtitle]]
+[[!template text="with the text copied, so I can paste it back." start="00:05:56.401" video="mainVideo" id=subtitle]]
+[[!template text="So it's a quick way to interact with copy" start="00:06:00.161" video="mainVideo" id=subtitle]]
+[[!template text="and interact with the output of a buffer." start="00:06:02.721" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So finally, let's discuss how to actually use vterm." start="00:06:05.841" video="mainVideo" id=subtitle]]
+[[!template text="Let's circle back, let's go," start="00:06:09.121" video="mainVideo" id=subtitle]]
+[[!template text="and let's look at the GitHub repo" start="00:06:10.560" video="mainVideo" id=subtitle]]
+[[!template text="where development is happening." start="00:06:12.400" video="mainVideo" id=subtitle]]
+[[!template text="vterm is available in MELPA," start="00:06:14.001" video="mainVideo" id=subtitle]]
+[[!template text="but since it's leveraging the power" start="00:06:15.520" video="mainVideo" id=subtitle]]
+[[!template text="of an external module," start="00:06:17.760" video="mainVideo" id=subtitle]]
+[[!template text="you must have Emacs compiled" start="00:06:18.960" video="mainVideo" id=subtitle]]
+[[!template text="with support for modules," start="00:06:20.480" video="mainVideo" id=subtitle]]
+[[!template text="and many distros like Ubuntu, Debian," start="00:06:22.000" video="mainVideo" id=subtitle]]
+[[!template text="that's not there. So you have to" start="00:06:25.600" video="mainVideo" id=subtitle]]
+[[!template text="get Emacs with support for modules:" start="00:06:26.881" video="mainVideo" id=subtitle]]
+[[!template text="compiling or getting images somewhere else." start="00:06:29.200" video="mainVideo" id=subtitle]]
+[[!template text="And also, the first time you are going to use this," start="00:06:31.361" video="mainVideo" id=subtitle]]
+[[!template text="which works only on Mac or GNU Linux systems," start="00:06:33.840" video="mainVideo" id=subtitle]]
+[[!template text="Emacs will try to find and compile this module," start="00:06:38.961" video="mainVideo" id=subtitle]]
+[[!template text="so it's important. This requirement is important." start="00:06:41.759" video="mainVideo" id=subtitle]]
+[[!template text="If you're using Windows, well," start="00:06:44.241" video="mainVideo" id=subtitle]]
+[[!template text="it's not available and will not work." start="00:06:46.401" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So to conclude, I want to just advertise this page." start="00:06:49.199" video="mainVideo" id=subtitle]]
+[[!template text="If you have problems, look at the issues" start="00:06:53.440" video="mainVideo" id=subtitle]]
+[[!template text="and open an issue in case." start="00:06:56.240" video="mainVideo" id=subtitle]]
+[[!template text="We'll try to help you." start="00:06:58.241" video="mainVideo" id=subtitle]]
+[[!template text="We are very excited about vterm," start="00:06:59.200" video="mainVideo" id=subtitle]]
+[[!template text="and I think it's a transformative" start="00:07:00.800" video="mainVideo" id=subtitle]]
+[[!template text="terminal experience inside GNU Emacs." start="00:07:02.639" video="mainVideo" id=subtitle]]
diff --git a/2020/info/31.md b/2020/info/31.md
index 7ea737d9..b5c5c661 100644
--- a/2020/info/31.md
+++ b/2020/info/31.md
@@ -2,10 +2,12 @@
Grant Shangreaux
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux.webm"]]
-[Download compressed .webm video (11.5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (36.3M)](https://media.emacsconf.org/2020/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux--compressed32.webm)
+[Download compressed .webm video (11.5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux--vp9-q56-video-original-audio.webm)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux.webm" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (6.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (14.3M)](https://media.emacsconf.org/2020/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux--compressed32.webm)
+[Download compressed Q&A .webm video (6.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux--vp9-q56-video-original-audio.webm)
<https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux.org>
diff --git a/2020/info/32.md b/2020/info/32.md
index b1952d04..ad063ad9 100644
--- a/2020/info/32.md
+++ b/2020/info/32.md
@@ -2,7 +2,8 @@
Eric Abrahamsen
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen.webm"]]
-[Download compressed .webm video (21.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (43.9M)](https://media.emacsconf.org/2020/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen--compressed32.webm)
+[Download compressed .webm video (21.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen--vp9-q56-video-original-audio.webm)
The venerable Gnus newsreader has evolved over the years to interface
with many different types of news- or mail-like backend programs,
diff --git a/2020/info/33.md b/2020/info/33.md
index ca231c6e..69920002 100644
--- a/2020/info/33.md
+++ b/2020/info/33.md
@@ -2,7 +2,8 @@
Fermin MF
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.webm"]]
-[Download compressed .webm video (26.5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (52.6M)](https://media.emacsconf.org/2020/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin--compressed32.webm)
+[Download compressed .webm video (26.5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin--vp9-q56-video-original-audio.webm)
[Download prerecorded video](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--prerec--fermin.webm)
diff --git a/2020/info/34.md b/2020/info/34.md
index ba1bade1..7c73b7ce 100644
--- a/2020/info/34.md
+++ b/2020/info/34.md
@@ -2,7 +2,8 @@
Matthew Zeng
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.webm" size="113M" subtitles="/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt" duration="22:23"]]
-[Download compressed .webm video (28.4M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (41.7M)](https://media.emacsconf.org/2020/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng--compressed32.webm)
+[Download compressed .webm video (28.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
Emacs Application Framework (EAF) is a customizable and extensible GUI
diff --git a/2020/info/35.md b/2020/info/35.md
index 276d24aa..d0dd67c2 100644
--- a/2020/info/35.md
+++ b/2020/info/35.md
@@ -2,11 +2,13 @@
Zachary Kanfer
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.webm" size="122M" subtitles="/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt" duration="9:44"]]
-[Download compressed .webm video (12.7M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (20.7M)](https://media.emacsconf.org/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer--compressed32.webm)
+[Download compressed .webm video (12.7M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm" download="Download Q&A video" size="89M" subtitles="/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt" duration="6:18"]]
-[Download compressed Q&A .webm video (6.9M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (15.2M)](https://media.emacsconf.org/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer--compressed32.webm)
+[Download compressed Q&A .webm video (6.9M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer--vp9-q56-video-original-audio.webm)
[View transcript for Q&A](#transcript-questions)
During quarantine, I found myself spending time with an Android app.
diff --git a/2020/info/38.md b/2020/info/38.md
index 6991eda4..af52e80e 100644
--- a/2020/info/38.md
+++ b/2020/info/38.md
@@ -2,7 +2,8 @@
John Wiegley
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--38-emacs-development-update--john-wiegley.webm" size="75M" subtitles="/2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt" duration="5:07"]]
-[Download compressed .webm video (8.4M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--38-emacs-development-update--john-wiegley--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (14.3M)](https://media.emacsconf.org/2020/emacsconf-2020--38-emacs-development-update--john-wiegley--compressed32.webm)
+[Download compressed .webm video (8.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--38-emacs-development-update--john-wiegley--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
- Actual start and end time (EST): Start 2020-11-29T09.12.40; End:
diff --git a/2020/info/39.md b/2020/info/39.md
index 4ca2f49d..32b06cb7 100644
--- a/2020/info/39.md
+++ b/2020/info/39.md
@@ -2,11 +2,13 @@
Richard Stallman
[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--39-nongnu-elpa--richard-stallman.webm" size="282M" subtitles="/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt" duration="6:56"]]
-[Download compressed .webm video (20.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--39-nongnu-elpa--richard-stallman--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (72.9M)](https://media.emacsconf.org/2020/emacsconf-2020--39-nongnu-elpa--richard-stallman--compressed32.webm)
+[Download compressed .webm video (20.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--39-nongnu-elpa--richard-stallman--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.webm" size="470M" subtitles="/2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt" duration="46:42" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (44M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (0)](https://media.emacsconf.org/2020/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman--compressed32.webm)
+[Download compressed Q&A .webm video (44M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman--vp9-q56-video-original-audio.webm)
[View transcript for Q&A](#transcript-questions)
<!-- from the pad --->
diff --git a/2020/info/40.md b/2020/info/40.md
index 4886d63e..eaf409ed 100644
--- a/2020/info/40.md
+++ b/2020/info/40.md
@@ -1,10 +1,12 @@
# Closing remarks (Saturday)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--40-closing-remarks-part-1.webm" download="Download part 1"]]
-[Download compressed .webm video (2.7M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--40-closing-remarks-part-1--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (4.7M)](https://media.emacsconf.org/2020/emacsconf-2020--40-closing-remarks-part-1--compressed32.webm)
+[Download compressed .webm video (2.7M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--40-closing-remarks-part-1--vp9-q56-video-original-audio.webm)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--40-closing-remarks-part-2.webm" download="Download part 2"]]
-[Download compressed .webm video (14M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--40-closing-remarks-part-2--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (37.3M)](https://media.emacsconf.org/2020/emacsconf-2020--40-closing-remarks-part-2--compressed32.webm)
+[Download compressed .webm video (14M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--40-closing-remarks-part-2--vp9-q56-video-original-audio.webm)
- Stats:
- 21 talks today, 16 tomorrow (30 last year)
diff --git a/2020/info/41.md b/2020/info/41.md
index e387caeb..272be760 100644
--- a/2020/info/41.md
+++ b/2020/info/41.md
@@ -1,7 +1,8 @@
# Opening remarks (Sunday)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--41-opening-remarks.webm" size="207MB"]]
-[Download compressed .webm video (15M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--41-opening-remarks--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (37.8M)](https://media.emacsconf.org/2020/emacsconf-2020--41-opening-remarks--compressed32.webm)
+[Download compressed .webm video (15M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--41-opening-remarks--vp9-q56-video-original-audio.webm)
- Hello and welcome again to EmacsConf 2020!
diff --git a/2020/info/42.md b/2020/info/42.md
index 69f856d7..de11079c 100644
--- a/2020/info/42.md
+++ b/2020/info/42.md
@@ -1,7 +1,8 @@
# Closing remarks (Sunday)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--42-closing-remarks.webm" size="261MB"]]
-[Download compressed .webm video (48M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--42-closing-remarks--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (142.5M)](https://media.emacsconf.org/2020/emacsconf-2020--42-closing-remarks--compressed32.webm)
+[Download compressed .webm video (48M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--42-closing-remarks--vp9-q56-video-original-audio.webm)
- Stats:
- 16 talks today, 37 total
diff --git a/2020/organizers-notebook.org b/2020/organizers-notebook.org
index 33a6118a..b2a2f355 100644
--- a/2020/organizers-notebook.org
+++ b/2020/organizers-notebook.org
@@ -493,11 +493,7 @@ Set the info based on submissions.org.
- Music demos and other things that use system audio will need to be prerecorded (or done through virtual loopback device, maybe? Technical risk.)
- Multi-monitor setups might not be handled well by BBB; share window instead of desktop
- Check if comfortable checking into IRC: #emacsconf-org
-- Ask about Q&A preference; OR:
- - live Q&A
- - Q&A over pad or IRC
- - no Q&A
-- Get IRC nick and phone number for emergency contact, store in private wiki
+- Get IRC nick, phone number for emergency contact, store in private wiki
- Try to record name pronunciation
- Encourage webcam for Q&A, although make it clear that it's totally optional
- Possible picture-in-picture approach to maximize screen real estate
diff --git a/2020/submissions.org b/2020/submissions.org
index 5d7416f7..14aef5a1 100644
--- a/2020/submissions.org
+++ b/2020/submissions.org
@@ -168,6 +168,7 @@ execute the buffer, update the talk's info/TALKID.md file.
:MIN_TIME_SUM: 880
:TARGET_TIME: 768
:DIFFERENCE: Needs: 112
+:CUSTOM_ID: submissions
:END:
** NOVEMBER 28 (Saturday) :sat:
@@ -182,6 +183,8 @@ SCHEDULED: <2020-11-28 Sat 09:00-09:30>
:TALK_ID: 00
:ROOM: A
:DURATION: 7:04
+:SLUG: 00
+:TIME: 8
:END:
*** 9:30 - 12:00 User talks :morning:
@@ -224,6 +227,9 @@ SCHEDULED: <2020-11-28 Sat 09:33-09:37>
:CUSTOM_ID: talk01
:TALK_ID: 01
:DURATION: 3:58
+:SLUG: 01
+:TIME: 4
+:DATE_SUBMITTED: 2020-10-05
:END:
Name: Sacha Chua
@@ -294,6 +300,9 @@ SCHEDULED: <2020-11-28 Sat 09:40-10:00>
:CUSTOM_ID: talk02
:TALK_ID: 02
:DURATION: 24:15
+:SLUG: 02
+:TIME: 25
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Leo Vivier
@@ -368,6 +377,9 @@ SCHEDULED: <2020-11-28 Sat 10:03-10:13>
:TALK_ID: 03
:PREREC: done, live Q&A
:DURATION: 14:50
+:SLUG: 03
+:TIME: 15
+:DATE_SUBMITTED: 2020-09-02
:END:
Name: Bala Ramadurai
@@ -458,6 +470,9 @@ SCHEDULED: <2020-11-28 Sat 10:16-10:26>
:CUSTOM_ID: talk04
:TALK_ID: 04
:DURATION: 8:26
+:SLUG: 04
+:TIME: 9
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Jonathan Gregory
@@ -520,6 +535,9 @@ SCHEDULED: <2020-11-28 Sat 10:29-10:45>
:CUSTOM_ID: talk05
:TALK_ID: 05
:DURATION: 29:50
+:SLUG: 05
+:TIME: 30
+:DATE_SUBMITTED: 2020-10-07
:END:
Name: Grant Shangreaux
@@ -589,6 +607,9 @@ SCHEDULED: <2020-11-28 Sat 10:48-10:58>
:CUSTOM_ID: talk06
:TALK_ID: 06
:DURATION: 13:41
+:SLUG: 06
+:TIME: 14
+:DATE_SUBMITTED: 2020-10-02
:END:
Name: Corwin Brust
@@ -642,6 +663,9 @@ SCHEDULED: <2020-11-28 Sat 11:01-11:21>
:CUSTOM_ID: talk07
:TALK_ID: 07
:DURATION: 22:05
+:SLUG: 07
+:TIME: 23
+:DATE_SUBMITTED: 2020-10-10
:END:
Name: Sid Kasivajhula
@@ -736,6 +760,9 @@ SCHEDULED: <2020-11-28 Sat 11:24-11:44>
:CUSTOM_ID: talk08
:TALK_ID: 08
:DURATION: 17:19
+:SLUG: 08
+:TIME: 18
+:DATE_SUBMITTED: 2020-09-25
:END:
Name: Andrew Tropin
@@ -808,6 +835,9 @@ fair use.
:CUSTOM_ID: talk21
:TALK_ID: 21
:DURATION: 47:08
+ :SLUG: 21
+ :TIME: 48
+ :DATE_SUBMITTED: 2020-10-05
:END:
Name: Eduardo Ochs
@@ -950,6 +980,9 @@ SCHEDULED: <2020-11-28 Sat 12:00-13:00>
:CUSTOM_ID: talk09
:TALK_ID: 09
:DURATION: 14:09
+ :SLUG: 09
+ :TIME: 15
+ :DATE_SUBMITTED: 2020-10-05
:END:
Name: Rainer König
@@ -1035,6 +1068,9 @@ fair use.
:CUSTOM_ID: talk10
:TALK_ID: 10
:DURATION: 8:18
+ :SLUG: 10
+ :TIME: 9
+ :DATE_SUBMITTED: 2020-09-25
:END:
Name: Andrea
@@ -1100,6 +1136,9 @@ fair use.
:CUSTOM_ID: talk11
:TALK_ID: 11
:DURATION: 15:18
+ :SLUG: 11
+ :TIME: 16
+ :DATE_SUBMITTED: 2020-10-07
:END:
Name: Aldric
@@ -1156,6 +1195,9 @@ fair use.
:CUSTOM_ID: talk12
:TALK_ID: 12
:DURATION: 16:38
+ :SLUG: 12
+ :TIME: 17
+ :DATE_SUBMITTED: 2020-10-06
:END:
Name: Leo Vivier
@@ -1231,6 +1273,9 @@ SCHEDULED: <2020-11-28 Sat 14:05-14:15>
:CUSTOM_ID: talk13
:TALK_ID: 13
:DURATION: 12:05
+:SLUG: 13
+:TIME: 13
+:DATE_SUBMITTED: 2020-10-07
:END:
Name: Joseph Corneli, Raymond Puzio, and Cameron Ray Smith
@@ -1309,6 +1354,9 @@ SCHEDULED: <2020-11-28 Sat 14:18-14:38>
:TALK_ID: 14
:PREREC: done
:DURATION: 19:41
+:SLUG: 14
+:TIME: 20
+:DATE_SUBMITTED: 2020-09-23
:END:
Name: Adam Ard
@@ -1370,6 +1418,9 @@ SCHEDULED: <2020-11-28 Sat 14:41-14:51>
:CUSTOM_ID: talk15
:TALK_ID: 15
:DURATION: 25:00
+:SLUG: 15
+:TIME: 25
+:DATE_SUBMITTED: 2020-10-07
:END:
Name: Adolfo Villafiorita
@@ -1433,6 +1484,9 @@ SCHEDULED: <2020-11-28 Sat 14:54-15:14>
:CUSTOM_ID: talk16
:TALK_ID: 16
:DURATION: 21:56
+:SLUG: 16
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Leo Vivier
@@ -1513,6 +1567,9 @@ SCHEDULED: <2020-11-28 Sat 15:17-15:37>
:CUSTOM_ID: talk17
:TALK_ID: 17
:DURATION: 21:15
+:SLUG: 17
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-10
:END:
Name: Noorah Alhasan
@@ -1595,6 +1652,9 @@ SCHEDULED: <2020-11-28 Sat 15:40-16:00>
:CUSTOM_ID: talk18
:TALK_ID: 18
:DURATION: 21:26
+:SLUG: 18
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Leo Vivier
@@ -1680,6 +1740,9 @@ SCHEDULED: <2020-11-28 Sat 16:03-16:13>
:CUSTOM_ID: talk19
:TALK_ID: 19
:DURATION: 8:13
+:SLUG: 19
+:TIME: 9
+:DATE_SUBMITTED: 2020-10-02
:END:
Name: Brett Gilio
@@ -1744,6 +1807,9 @@ SCHEDULED: <2020-11-28 Sat 16:16-16:36>
:CUSTOM_ID: talk20
:TALK_ID: 20
:DURATION: 22:50
+:SLUG: 20
+:TIME: 23
+:DATE_SUBMITTED: 2020-10-09
:END:
Name: Corwin Brust
@@ -1807,6 +1873,8 @@ SCHEDULED: <2020-11-28 Sat 16:30-17:00>
:TALK_ID: 40
:CUSTOM_ID: talk40
:DURATION: 15:47
+:SLUG: 40
+:TIME: 16
:END:
** NOVEMBER 29 (Sunday) :sun:
@@ -1820,6 +1888,8 @@ SCHEDULED: <2020-11-29 Sun 09:00-09:10>
:TALK_ID: 41
:CUSTOM_ID: talk41
:DURATION: 11:47
+:SLUG: 41
+:TIME: 12
:END:
*** 9:10 - 12:00 Morning talks :morning:
@@ -1857,6 +1927,8 @@ SCHEDULED: <2020-11-29 Sun 09:00-09:10>
:CUSTOM_ID: talk38
:PREREC: done
:DURATION: 5:07
+ :SLUG: 38
+ :TIME: 6
:END:
***** Talk information
@@ -1873,6 +1945,9 @@ SCHEDULED: <2020-11-29 Sun 09:33-09:53>
:CUSTOM_ID: talk22
:TALK_ID: 22
:DURATION: 29:06
+:SLUG: 22
+:TIME: 30
+:DATE_SUBMITTED: 2020-09-22
:END:
Name: Musa Al-hassy
@@ -1993,6 +2068,9 @@ SCHEDULED: <2020-11-29 Sun 09:56-10:46>
:CUSTOM_ID: talk23
:TALK_ID: 23
:DURATION: 43:54
+:SLUG: 23
+:TIME: 44
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Tuấn-Anh Nguyễn
@@ -2060,6 +2138,9 @@ SCHEDULED: <2020-11-29 Sun 10:49-11:09>
:TALK_ID: 24
:PREREC: done
:DURATION: 20:46
+:SLUG: 24
+:TIME: 21
+:DATE_SUBMITTED: 2020-09-25
:END:
Name: Andrea
@@ -2135,6 +2216,9 @@ SCHEDULED: <2020-11-29 Sun 11:12-11:22>
:TALK_ID: 25
:PREREC: done
:DURATION: 9:52
+:SLUG: 25
+:TIME: 10
+:DATE_SUBMITTED: 2020-08-30
:END:
Name: Zen Monk Alain M. Lafon
@@ -2208,9 +2292,11 @@ fair use.
:AVAILABILITY: tbd
:NAME: Richard Stallman
:DURATION: 53:38
+ :SLUG: 39
+ :TIME: 54
:END:
-**** Talk information
+***** Talk information
TBD - plans for a NonGNU ELPA that will be easy to enable and contribute to without signing copyright assignment papers
@@ -2261,6 +2347,9 @@ SCHEDULED: <2020-11-29 Sun 13:03-13:13>
:TALK_ID: 26
:PREREC: done
:DURATION: 14:57
+:SLUG: 26
+:TIME: 15
+:DATE_SUBMITTED: 2020-10-01
:END:
Name: Pierce Wang
@@ -2338,6 +2427,9 @@ SCHEDULED: <2020-11-29 Sun 13:16-13:26>
:PREREC: done
:TALK_ID: 27
:DURATION: 21:26
+:SLUG: 27
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-05
:END:
Hello,
@@ -2409,6 +2501,9 @@ SCHEDULED: <2020-11-29 Sun 13:29-14:19>
:QA: rtmp
:TALK_ID: 28
:DURATION: 9:00
+:SLUG: 28
+:TIME: 9
+:DATE_SUBMITTED: 2020-10-02
:END:
Name: Erik Elmshauser and Corwin Brust
@@ -2482,6 +2577,9 @@ SCHEDULED: <2020-11-29 Sun 14:22-14:42>
:CUSTOM_ID: talk29
:QA: rtmp
:TALK_ID: 29
+:SLUG: 29
+:DATE_SUBMITTED: 2020-10-02
+:TIME: 20
:END:
Name: Erik Elmshauser and Corwin Brust (mplsCorwin)
@@ -2599,6 +2697,9 @@ SCHEDULED: <2020-11-29 Sun 14:45-14:55>
:TALK_ID: 30
:PREREC: done
:DURATION: 11:30
+:TIME: 10
+:SLUG: 30
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Gabriele Bozzola (@sbozzolo)
@@ -2653,12 +2754,15 @@ SCHEDULED: <2020-11-29 Sun 14:58-15:14>
:PROPERTIES:
:MAX_TIME: 16
:MIN_TIME: 16
+:DATE_SUBMITTED: 2020-10-06
:AVAILABILITY: Central time, 10am EST-5pm EST
:NAME: Grant Shangreaux
:CUSTOM_ID: talk31
:TALK_ID: 31
:PREREC: done
:DURATION: 16:50
+:SLUG: 31
+:TIME: 16
:END:
Name: Grant Shangreaux
@@ -2736,6 +2840,9 @@ SCHEDULED: <2020-11-29 Sun 15:17-15:41>
:TALK_ID: 32
:PREREC: planned
:DURATION: 23:57
+:SLUG: 32
+:DATE_SUBMITTED: 2020-10-02
+:TIME: 24
:END:
Name: Eric Abrahamsen
@@ -2803,6 +2910,9 @@ SCHEDULED: <2020-11-29 Sun 15:44-16:04>
:CUSTOM_ID: talk33
:TALK_ID: 33
:DURATION: 39:16
+:SLUG: 33
+:DATE_SUBMITTED: 2020-10-05
+:TIME: 40
:END:
Name: Fermin MF
@@ -2868,6 +2978,9 @@ SCHEDULED: <2020-11-29 Sun 16:07-16:30>
:TALK_ID: 34
:QA: irc
:DURATION: 22:22
+:SLUG: 34
+:DATE_SUBMITTED: 2020-10-02
+:TIME: 23
:END:
Name: Matthew Zeng
@@ -2926,6 +3039,9 @@ SCHEDULED: <2020-11-29 Sun 16:33-16:43>
:PREREC: done
:QA: live
:DURATION: 16:02
+:SLUG: 35
+:DATE_SUBMITTED: 2020-10-06
+:TIME: 16
:END:
Name: Zachary Kanfer
@@ -2988,6 +3104,8 @@ SCHEDULED: <2020-11-29 Sun 16:30-17:00>
:TALK_ID: 42
:CUSTOM_ID: talk42
:DURATION: 36:29
+:SLUG: 42
+:TIME: 36
:END:
* Withdrawn
@@ -3003,6 +3121,7 @@ SCHEDULED: <2020-11-29 Sun 16:30-17:00>
:NAME: Corwin Brust
:CUSTOM_ID: talk36
:TALK_ID: 36
+ :SLUG: 36
:END:
#+begin_quote
diff --git a/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt b/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt
index 0d7a296c..24c1910c 100644
--- a/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt
+++ b/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt
@@ -193,7 +193,7 @@ ERIK: Cool. Well, let's begin here.
Welcome to the dungeon, everybody.
00:04:37.840 --> 00:04:38.320
-As you're aware, I'm Erik,
+As you're aware, I'm Erik and this is Corwin,
00:04:38.320 --> 00:04:43.040
and this is the Dungeon project that we've been working on
@@ -226,8 +226,7 @@ most of the commercial role-playing games
that you have heard of or maybe tried out
00:05:07.919 --> 00:05:11.919
-from various stores and friends, what
-have you.
+from various stores and friends, what have you.
00:05:11.919 --> 00:05:14.800
So one of the first things we want to talk about is:
@@ -272,12 +271,10 @@ So that's kind of why we like it,
but also it makes it a tricky problem
00:06:08.533 --> 00:06:12.567
-when it comes to writing a computer game
-to mimic
+when it comes to writing a computer game to mimic
00:06:12.567 --> 00:06:16.400
-the game that we played with paper and
-dice around a table.
+the game that we played with paper and dice around a table.
00:06:16.400 --> 00:06:24.000
CORWIN: So when we look at it as kind of a technology problem... Whoops...
@@ -310,7 +307,7 @@ Specifically, I learned it from Corwin when I was 7 or 8.
CORWIN: Yeah, that's where... that's my cue in, right?
00:07:09.599 --> 00:07:14.560
-My folks and Erik's folks were were really tight.
+My folks and Erik's folks were really tight.
00:07:14.560 --> 00:07:17.360
They used to run science fiction conventions together.
@@ -340,8 +337,7 @@ basically we've also been into playing with computers.
Over the years, we've worked with many, many different systems.
00:07:56.720 --> 00:07:59.700
-We've played with Ataris, Apples, and
-Amigas
+We've played with Ataris, Apples, and Amigas
00:07:59.700 --> 00:08:03.567
for a long time before either of us got PC clones
@@ -359,8 +355,7 @@ So we also always thought, like,
how is it that we can use these cool computers that we're into
00:08:22.639 --> 00:08:25.967
-to build this Dungeon game that we're
-into?
+to build this Dungeon game that we're into?
00:08:25.967 --> 00:08:28.319
'Cause that's what you do, right?
@@ -588,4195 +583,2605 @@ in order to recreate the Dungeon experience that we had
with paper and dice sitting around a
00:13:01.279 --> 00:13:05.600
-table when we were kids
+table when we were kids.
-00:13:05.600 --> 00:13:09.680
-and
+00:13:02.160 --> 00:13:12.570
+And, I mean, we've, you know, it took a while for us to kind of
-00:13:09.680 --> 00:13:12.079
-I mean we you know it took a while for
+00:13:12.570 --> 00:13:15.870
+tease apart the problem in a way where we could actually
-00:13:12.079 --> 00:13:13.839
-us to kind of
+00:13:15.870 --> 00:13:19.370
+list out all of the features, like, what are the problems
-00:13:13.839 --> 00:13:16.079
-tease apart the problem in a way where
+00:13:19.370 --> 00:13:22.160
+we have to solve and how do we solve them?
-00:13:16.079 --> 00:13:18.000
-we could actually list out all of the
+00:13:27.160 --> 00:13:31.050
+So, creating any free software, any self-organizing free
-00:13:18.000 --> 00:13:19.120
-features like
+00:13:31.050 --> 00:13:34.740
+software project is challenging to start with, and we're
-00:13:19.120 --> 00:13:20.959
-what are the problems we have to solve
+00:13:34.740 --> 00:13:38.530
+generally people with a bunch of other responsibilities by
-00:13:20.959 --> 00:13:27.760
-and how do we solve them
+00:13:38.530 --> 00:13:43.570
+the time we get to it. So, it's not just, hey, you know,
-00:13:27.760 --> 00:13:30.959
-so creating any free software any
+00:13:43.570 --> 00:13:48.350
+the general herding cats, it's, you know, trying to make it
-00:13:30.959 --> 00:13:33.040
-self-organizing free software project
+00:13:48.350 --> 00:13:50.160
+a part of your life, too.
-00:13:33.040 --> 00:13:36.000
-is is challenging to start with and
+00:13:52.160 --> 00:13:56.570
+That being kind of a, you know, challenging battle, we kind
-00:13:36.000 --> 00:13:37.200
-we're generally
+00:13:56.570 --> 00:14:00.580
+of aligned on some principles that we wanted to adhere to
-00:13:37.200 --> 00:13:38.480
-people with a bunch of other
+00:14:00.580 --> 00:14:04.160
+once we started taking the project seriously.
-00:13:38.480 --> 00:13:40.320
-responsibilities by the time we get to
+00:14:04.160 --> 00:14:10.640
+Like, you know, particularly recognizing GNU in specific as
-00:13:40.320 --> 00:13:40.560
-it
+00:14:10.640 --> 00:14:14.160
+we focus on giving back to the community.
-00:13:40.560 --> 00:13:44.000
-so it's it's not just hey
+00:14:15.160 --> 00:14:19.830
+Taking what we learned as Perl programmers and, you know,
-00:13:44.000 --> 00:13:47.040
-you know the general herding cats it's
+00:14:19.830 --> 00:14:23.920
+bringing that spirit forward into our work and maybe
-00:13:47.040 --> 00:13:47.680
-it's
+00:14:23.920 --> 00:14:28.830
+specifically support, making sure that we can, you know,
-00:13:47.680 --> 00:13:49.120
-you know trying to make it a part of
+00:14:28.830 --> 00:14:34.160
+write functions for the game in Perl if we want to.
-00:13:49.120 --> 00:13:51.040
-your life to
+00:14:35.160 --> 00:14:40.250
+And then to use the game as a vehicle to make people look
-00:13:51.040 --> 00:13:54.399
-that being kind of a
+00:14:40.250 --> 00:14:45.510
+beyond the typically open source – sorry, typically nom
-00:13:54.399 --> 00:13:57.680
-you know challenging battle we we
+00:14:45.510 --> 00:14:50.290
+inally open source at best, generally pretty closed world of
-00:13:57.680 --> 00:14:00.480
-kind of aligned on some some principles
+00:14:50.290 --> 00:14:52.160
+computer gaming.
-00:14:00.480 --> 00:14:02.639
-that we wanted to adhere to
+00:14:52.160 --> 00:14:55.260
+A lot of Windows users out there, a lot of non-free
-00:14:02.639 --> 00:14:04.079
-once we started taking the project
+00:14:55.260 --> 00:14:58.670
+communication tools, and a lot of, you know, a lot of
-00:14:04.079 --> 00:14:05.680
-seriously
+00:14:58.670 --> 00:15:02.160
+ground to cover from a free software perspective.
-00:14:05.680 --> 00:14:09.519
-like pre you know particularly
+00:15:03.160 --> 00:15:08.160
+So what can Emacs do from a gaming standpoint to open that up?
-00:14:09.519 --> 00:14:12.720
-recognizing gnu in specific as we focus
+00:15:08.160 --> 00:15:12.960
+And not to mention the hubris of the, you know, the two of
-00:14:12.720 --> 00:14:15.199
-on giving back to the community
+00:15:12.960 --> 00:15:17.600
+us with a few friends basically deciding to take on what
-00:14:15.199 --> 00:14:16.480
-taking what we learned as pearl
+00:15:17.600 --> 00:15:20.160
+amounts to a huge project.
-00:14:16.480 --> 00:14:18.240
-programmers and
+00:15:20.160 --> 00:15:24.080
+You know, we're essentially a year in now and we haven't
-00:14:18.240 --> 00:14:22.079
-you know bringing that spirit forward
+00:15:24.080 --> 00:15:29.160
+really gotten over halfway to our minimum play testable candidate.
-00:14:22.079 --> 00:14:24.320
-into into our work and maybe
+00:15:30.160 --> 00:15:34.160
+It's a work in progress. We've got a long road to go.
-00:14:24.320 --> 00:14:26.399
-specifically support making sure that we
+00:15:34.160 --> 00:15:37.310
+There's at least 50 items on the things that we think are
-00:14:26.399 --> 00:14:27.120
-can
+00:15:37.310 --> 00:15:40.390
+critical to be able to introduce it to my younger kids, for
-00:14:27.120 --> 00:14:30.639
-you know write functions for the
+00:15:40.390 --> 00:15:41.160
+example.
-00:14:30.639 --> 00:14:31.760
-game
+00:15:41.160 --> 00:15:48.650
+Okay, so we're in the accomplishments section. So we're
-00:14:31.760 --> 00:14:35.199
-in pearl if we want to
+00:15:48.650 --> 00:15:51.700
+supposed to be talking about the things that we have
-00:14:35.199 --> 00:14:38.079
-and then to use the game as a vehicle to
+00:15:51.700 --> 00:15:54.160
+succeeded in doing in our first year.
-00:14:38.079 --> 00:14:40.320
-make people look beyond
+00:15:55.160 --> 00:15:59.580
+We have succeeded in working with data in org documents,
-00:14:40.320 --> 00:14:43.360
-the
+00:15:59.580 --> 00:16:04.030
+using org mode tables to store the data that we're going to
-00:14:43.360 --> 00:14:46.800
-typically open source or sorry typically
+00:16:04.030 --> 00:16:07.160
+use in the various parts of our game.
-00:14:46.800 --> 00:14:49.600
-nominally open source at best
+00:16:07.160 --> 00:16:14.440
+And we've had a lot of success with svg.el. It started with
-00:14:49.600 --> 00:14:52.160
-generally pretty closed world of
+00:16:14.440 --> 00:16:18.130
+drawing maps and we have another talk about our mapping
-00:14:52.160 --> 00:14:54.160
-computer gaming a lot of windows users
+00:16:18.130 --> 00:16:20.160
+specifically coming up next.
-00:14:54.160 --> 00:14:55.440
-out there a lot of free
+00:16:21.160 --> 00:16:25.160
+So we'll put off some of that discussion for a separate talk.
-00:14:55.440 --> 00:14:57.519
-non-free communication tools and a lot
+00:16:25.160 --> 00:16:30.050
+But we've also succeeded in getting into a bunch of
-00:14:57.519 --> 00:14:59.760
-of
+00:16:30.050 --> 00:16:36.770
+different elements of the game where we're, you know,
-00:14:59.760 --> 00:15:01.839
-you know a lot of ground to cover from a
+00:16:36.770 --> 00:16:39.340
+making a lot of progress using this drawing engine we
-00:15:01.839 --> 00:15:03.360
-free software perspective
+00:16:39.340 --> 00:16:43.360
+developed to also draw this other thing and also draw this
-00:15:03.360 --> 00:15:05.920
-so what can Emacs do from a gaming
+00:16:43.360 --> 00:16:45.160
+other thing and also draw this other thing.
-00:15:05.920 --> 00:15:07.360
-standpoint to
+00:16:46.160 --> 00:16:46.160
+And we kind of backed into, we've got this aesthetic
-00:15:07.360 --> 00:15:12.160
-to open that up
+00:16:46.161 --> 00:16:54.750
+and we're using it to draw interfaces for all of the different
-00:15:12.160 --> 00:15:14.880
-and not to mention the hubris of the you
+00:16:54.750 --> 00:16:56.160
+parts of the game.
-00:15:14.880 --> 00:15:16.720
-know the two of us with a few friends
+00:16:56.160 --> 00:17:08.160
+So let's talk a little bit about what works now.
-00:15:16.720 --> 00:15:18.399
-basically deciding to take on what
+00:17:11.160 --> 00:17:15.330
+First of all, there's the mapping part that Erik mentioned
-00:15:18.399 --> 00:15:19.440
-amounts to a
+00:17:15.330 --> 00:17:19.040
+and we'll jump here into, we'll start opening up some files
-00:15:19.440 --> 00:15:21.839
-huge project you know we're
+00:17:19.040 --> 00:17:20.160
+and looking around.
-00:15:21.839 --> 00:15:24.720
-essentially a year in now and we haven't
+00:17:20.160 --> 00:17:25.060
+But then also later we'll fire up an IELM and look at some
-00:15:24.720 --> 00:15:27.839
-really gotten over halfway to our
+00:17:25.060 --> 00:17:28.160
+of the other proofs of concept.
-00:15:27.839 --> 00:15:30.000
-minimum playtestable candidate
+00:17:28.160 --> 00:17:31.350
+So hopefully we can pivot the second talk more toward the
-00:15:30.000 --> 00:15:32.880
-it's a it's a work in progress we've
+00:17:31.350 --> 00:17:34.520
+demos as we skip some of the interactive stuff that might
-00:15:32.880 --> 00:15:34.320
-got a long row to go
+00:17:34.520 --> 00:17:37.160
+be mentioned in the slides that we go by.
-00:15:34.320 --> 00:15:36.800
-there's at least 50 items on the things
+00:17:37.160 --> 00:17:38.160
+Okay.
-00:15:36.800 --> 00:15:38.399
-that we think are critical to
+00:17:38.160 --> 00:17:48.160
+So, maps, visual battleboard.
-00:15:38.399 --> 00:15:40.320
-to be able to introduce it to my younger
+00:17:48.160 --> 00:17:51.160
+The battleboard...
-00:15:40.320 --> 00:15:44.720
-kids for example
+00:17:51.160 --> 00:17:55.160
+I'm just going to skip it Erik, we'll hit it in the next one.
-00:15:44.720 --> 00:15:48.399
-okay so we're in the accomplishments
+00:17:55.160 --> 00:17:57.160
+Okay.
-00:15:48.399 --> 00:15:49.279
-section
+00:17:57.160 --> 00:18:03.160
+Hang on.
-00:15:49.279 --> 00:15:50.959
-so we're supposed to be talking about
+00:18:05.160 --> 00:18:07.660
+Okay, so I'm just going to go ahead and open up maps and
-00:15:50.959 --> 00:15:52.639
-the things that we have
+00:18:07.660 --> 00:18:12.490
+let you talk from the SVG process itself, because that's
-00:15:52.639 --> 00:15:55.920
-succeeded in doing in our first year
+00:18:12.490 --> 00:18:15.160
+the interesting part to me.
-00:15:55.920 --> 00:15:58.880
-we have succeeded in working with data
+00:18:15.160 --> 00:18:21.160
+Okay.
-00:15:58.880 --> 00:16:01.199
-in org documents using org mode
+00:18:22.160 --> 00:18:26.350
+Talk about the SVG process, like what do you think exactly
-00:16:01.199 --> 00:16:04.480
-tables to store the data that we're
+00:18:26.350 --> 00:18:31.310
+we want to talk about? How we turn our data into an image
-00:16:04.480 --> 00:16:05.360
-going to use
+00:18:31.310 --> 00:18:34.160
+or what are you hoping for?
-00:16:05.360 --> 00:16:09.279
-in the various parts of our game
+00:18:34.160 --> 00:18:40.140
+Yeah, so I mean did you want to talk more from the hand-d
-00:16:09.279 --> 00:16:12.519
-and we've had a lot of success with
+00:18:40.140 --> 00:18:43.160
+rawn SVG graphics at all?
-00:16:12.519 --> 00:16:14.160
-SVG.el
+00:18:43.160 --> 00:18:48.160
+I thought we were going to save that stuff for the pathing talk.
-00:16:14.160 --> 00:16:16.639
-it started withdrawing maps and we
+00:18:48.160 --> 00:18:49.160
+Okay, that sounds fine.
-00:16:16.639 --> 00:16:17.279
-have
+00:18:49.160 --> 00:18:50.160
+But we can go into it right now if you want.
-00:16:17.279 --> 00:16:19.440
-another talk about our mapping
+00:18:50.160 --> 00:18:54.640
+Yeah, so we've got about 10 minutes before the turn where
-00:16:19.440 --> 00:16:21.440
-specifically coming up next so we'll
+00:18:54.640 --> 00:18:58.470
+we thought we would first take any questions that are
-00:16:21.440 --> 00:16:23.759
-put off some of that discussion for a
+00:18:58.470 --> 00:19:00.160
+hanging out there.
-00:16:23.759 --> 00:16:25.199
-separate talk
+00:19:00.160 --> 00:19:04.160
+I unfortunately closed the Etherpad, but I can open it again real quick.
-00:16:25.199 --> 00:16:28.720
-but we've also succeeded in
+00:19:04.160 --> 00:19:09.850
+Or you can jump into the pathing stuff now, or I can just
-00:16:28.720 --> 00:16:32.320
-getting into a bunch of different
+00:19:09.850 --> 00:19:14.160
+throw open an IELM and we can start the demos.
-00:16:32.320 --> 00:16:35.680
-elements of the game where
+00:19:15.160 --> 00:19:20.600
+So let me invite Amin or Sacha back in, or Leo, if any of
-00:16:35.680 --> 00:16:38.160
-we're you know making a lot of progress
+00:19:20.600 --> 00:19:23.350
+you want to join the conversation and make a suggestion as
-00:16:38.160 --> 00:16:38.959
-using this
+00:19:23.350 --> 00:19:27.160
+to how we balance between the remaining time.
-00:16:38.959 --> 00:16:41.920
-drawing engine we developed to also draw
+00:19:27.160 --> 00:19:30.300
+The rest of what we have left starts in on toward the
-00:16:41.920 --> 00:16:43.759
-this other thing and also draw this
+00:19:30.300 --> 00:19:34.250
+technical, so especially if there would be questions about
-00:16:43.759 --> 00:16:45.279
-other thing and also draw this other
+00:19:34.250 --> 00:19:37.160
+the game right now, that would be awesome.
-00:16:45.279 --> 00:16:46.079
-thing and it's
+00:19:37.160 --> 00:19:42.160
+And I'm going to get seated again.
-00:16:46.079 --> 00:16:49.519
-you know we kind of backed into
+00:19:44.160 --> 00:19:48.870
+I'm not sure if I talk over the stream, if you'll hear it,
-00:16:49.519 --> 00:16:52.560
-we've got this aesthetic and we're
+00:19:48.870 --> 00:19:57.160
+because I'm just watching your stream, but I can try writing on IRC.
-00:16:52.560 --> 00:16:54.720
-using it to draw interfaces for all of
+00:20:01.160 --> 00:20:06.140
+Sure, yeah, questions would be cool. Or, yeah, well Erik,
-00:16:54.720 --> 00:17:03.120
-the different parts of the game
+00:20:06.140 --> 00:20:08.980
+why don't you just go ahead and start walking us through
-00:17:03.120 --> 00:17:05.600
-so let's talk let's talk a little bit
+00:20:08.980 --> 00:20:12.000
+the hand drawn SVG stuff just a little bit, because I think
-00:17:05.600 --> 00:17:06.959
-about what
+00:20:12.000 --> 00:20:14.950
+if that isn't interesting to people, we can just preempt
-00:17:06.959 --> 00:17:10.880
-what works now
+00:20:14.950 --> 00:20:16.160
+for a question.
-00:17:10.880 --> 00:17:13.360
-first of all there's the mapping part
+00:20:17.160 --> 00:20:23.010
+Okay, so historically when we decided to actually start
-00:17:13.360 --> 00:17:14.640
-that Erik mentioned
+00:20:23.010 --> 00:20:27.080
+writing code, one of the very first things we wanted to do
-00:17:14.640 --> 00:17:18.480
-and we'll jump here into we'll start
+00:20:27.080 --> 00:20:30.990
+was the maps, because initially it seemed like the maps
-00:17:18.480 --> 00:17:20.880
-opening up some files and looking around
+00:20:30.990 --> 00:20:34.750
+were going to be one of the biggest challenges in terms of
-00:17:20.880 --> 00:17:22.160
-but then
+00:20:34.750 --> 00:20:37.160
+how do we get a text editor to draw pictures for us.
-00:17:22.160 --> 00:17:25.520
-also later we'll we'll fire up an eye
+00:20:40.160 --> 00:20:44.350
+So, we pretty quickly decided we wanted to work with SVGs
-00:17:25.520 --> 00:17:26.959
-elm and look at some of the
+00:20:44.350 --> 00:20:48.370
+because it allowed us to leverage the power of Emacs as a
-00:17:26.959 --> 00:17:28.400
-some of the other proofs of concept so
+00:20:48.370 --> 00:20:53.680
+text editor and a text manipulator to write text graphics
-00:17:28.400 --> 00:17:30.240
-hopefully we can
+00:20:53.680 --> 00:20:56.160
+with the SVG format.
-00:17:30.240 --> 00:17:32.240
-pivot the second talk more toward the
+00:20:56.160 --> 00:20:59.770
+So we did some SVG graphics by hand, we went in and just
-00:17:32.240 --> 00:17:34.320
-demos as as we skip some of the
+00:20:59.770 --> 00:21:03.620
+started hand coding things that looked visually like the
-00:17:34.320 --> 00:17:35.520
-interactive stuff that might be
+00:21:03.620 --> 00:21:07.300
+maps we used to draw by hand on graph paper when we were,
-00:17:35.520 --> 00:17:43.200
-mentioned in the slides that we go by
+00:21:07.300 --> 00:21:10.160
+you know, sitting around the table.
-00:17:43.200 --> 00:17:46.880
-so maps
+00:21:10.160 --> 00:21:13.160
+Yep, absolutely.
-00:17:46.880 --> 00:17:50.080
-visual battle board
+00:21:13.160 --> 00:21:17.610
+What emerged from that is as we started working on some of
-00:17:50.080 --> 00:17:53.120
-the battle board I'm just going to I'm just
+00:21:17.610 --> 00:21:22.140
+these files, this particular image is a test of some 20
-00:17:53.120 --> 00:17:54.160
-going to skip it Erik
+00:21:22.140 --> 00:21:25.910
+wide water with some beaches around it and a special
-00:17:54.160 --> 00:18:02.000
-we'll hit it in the next one okay
+00:21:25.910 --> 00:21:29.160
+chamber kind of off to the side called a clapper.
-00:18:02.000 --> 00:18:08.480
-hang on
+00:21:29.160 --> 00:21:32.960
+And this was the way we would code is by sketching by hand
-00:18:08.480 --> 00:18:09.919
-okay so I'm just going to go ahead and
+00:21:32.960 --> 00:21:36.940
+all of these things to look right. And then we would take
-00:18:09.919 --> 00:18:11.840
-open up maps and
+00:21:36.940 --> 00:21:40.810
+that code and we noticed it became real repetitive as we
-00:18:11.840 --> 00:18:13.760
-let you talk from the from the SVG
+00:21:40.810 --> 00:21:45.160
+would go like chunk of water chunk of water chunk of water.
-00:18:13.760 --> 00:18:15.039
-process itself
+00:21:45.160 --> 00:21:48.860
+And we're like okay so what we really need is to define a
-00:18:15.039 --> 00:18:16.480
-because that's the interesting part to
+00:21:48.860 --> 00:21:52.620
+set of, we call it tiles, but like you can think of it as
-00:18:16.480 --> 00:18:22.240
-me that to me
+00:21:52.620 --> 00:21:56.660
+rubber stamps where we write this graphics code, and then
-00:18:22.240 --> 00:18:26.080
-okay talk about the SVG
+00:21:56.660 --> 00:22:01.160
+we're able to repeat it in different places around the map.
-00:18:26.080 --> 00:18:28.640
-process like what what are you thinking
+00:22:01.160 --> 00:22:05.680
+You want to flip over to code view and show that or do we
-00:18:28.640 --> 00:18:30.640
-exactly we want to talk about how
+00:22:05.680 --> 00:22:09.160
+want to move into. Sure.
-00:18:30.640 --> 00:18:33.760
-we turn our data into an image or
+00:22:09.160 --> 00:22:10.160
+Code view.
-00:18:33.760 --> 00:18:37.919
-what what are you hoping for yeah so
+00:22:10.160 --> 00:22:14.700
+So, you know, you can see just really obviously here the
-00:18:37.919 --> 00:18:39.760
-I mean did you did you want to talk more
+00:22:14.700 --> 00:22:19.240
+only thing that's changing from chunk of water to chunk of
-00:18:39.760 --> 00:18:41.200
-from from the
+00:22:19.240 --> 00:22:22.160
+water is the x and y coordinates.
-00:18:41.200 --> 00:18:45.679
-SVG the hand-drawn SVG graphics at all
+00:22:22.160 --> 00:22:26.990
+And, you know, we can skip getting into the SVG directives
-00:18:45.679 --> 00:18:47.039
-I thought we were going to save that
+00:22:26.990 --> 00:22:31.640
+and how all of the path statements actually work, but you
-00:18:47.039 --> 00:18:49.760
-stuff for the passing talk okay
+00:22:31.640 --> 00:22:36.230
+can trust us, all of these D equals and there's m's and h's
-00:18:49.760 --> 00:18:52.000
-right now if you want yeah I mean so
+00:22:36.230 --> 00:22:41.160
+and V's that turns out to be horizontal lines and vertical
-00:18:52.000 --> 00:18:53.440
-we've got about
+00:22:41.160 --> 00:22:42.160
+lines and cursor moves
-00:18:53.440 --> 00:18:56.559
-10 minutes before the turn where we
+00:22:42.160 --> 00:22:46.900
+kind of like turtle graphics if anyone remembers that far
-00:18:56.559 --> 00:18:58.400
-thought we would first take any
+00:22:46.900 --> 00:22:50.910
+back, and we're picking up our pen and dropping it and
-00:18:58.400 --> 00:19:00.400
-questions that are hanging out there
+00:22:50.910 --> 00:22:54.160
+drawing lines around on our map.
-00:19:00.400 --> 00:19:02.320
-I unfortunately closed the ether pad but
+00:22:54.160 --> 00:22:58.090
+Okay, so we do have a few questions if you want to take
-00:19:02.320 --> 00:19:04.799
-I can open it again real quick
+00:22:58.090 --> 00:23:01.160
+them now otherwise we can also jump in.
-00:19:04.799 --> 00:19:08.480
-and or you can jump
+00:23:01.160 --> 00:23:05.160
+Let's get them while they're fresh. Okay, sounds good.
-00:19:08.480 --> 00:19:11.440
-jump into the to the pathing stuff now
+00:23:05.160 --> 00:23:08.540
+So we'll probably shift to question and answer mode for up
-00:19:11.440 --> 00:19:12.320
-or I can just
+00:23:08.540 --> 00:23:12.490
+to 15 minutes here. So if you do have questions, maybe
-00:19:12.320 --> 00:19:13.760
-throw up an animal and we can start the
+00:23:12.490 --> 00:23:15.740
+stack rank, go ahead and sort the questions a little for us
-00:19:13.760 --> 00:19:15.440
-demos so
+00:23:15.740 --> 00:23:18.880
+or comment on them to let us know which ones you want to
-00:19:15.440 --> 00:19:18.880
-let me invite almond or sasha back in
+00:23:18.880 --> 00:23:21.540
+see us get here if we start getting a little long winded or
-00:19:18.880 --> 00:19:19.840
-if you guys
+00:23:21.540 --> 00:23:23.160
+not just a long, we'll take direction.
-00:19:19.840 --> 00:19:22.160
-or leo if any of you want to join the
+00:23:23.160 --> 00:23:26.160
+But thanks for your questions.
-00:19:22.160 --> 00:19:22.960
-conversation
+00:23:26.160 --> 00:23:30.050
+I'd like to see a demo as well we'll look at that with the
-00:19:22.960 --> 00:19:25.840
-make a suggestion as to how we balance
+00:23:30.050 --> 00:23:33.160
+remaining time after this question block.
-00:19:25.840 --> 00:19:27.120
-between the remaining time
+00:23:33.160 --> 00:23:38.000
+More about what the game is okay sure. So let's let's take
-00:19:27.120 --> 00:19:29.840
-the rest of what we have left starts in
+00:23:38.000 --> 00:23:42.510
+our one minute each swing at what the game is, you want to
-00:19:29.840 --> 00:19:32.480
-on toward the technical so especially
+00:23:42.510 --> 00:23:45.160
+go first, I called weapons.
-00:19:32.480 --> 00:19:35.120
-if there would be questions questions
+00:23:45.160 --> 00:23:47.160
+Okay.
-00:19:35.120 --> 00:19:36.840
-about the game right now that would be
+00:23:47.160 --> 00:23:52.180
+Dungeon is like role playing games, but you don't really do
-00:19:36.840 --> 00:19:40.160
-awesome
+00:23:52.180 --> 00:23:56.990
+role playing like the, for me the thing the core of being a
-00:19:40.160 --> 00:19:48.720
-and I'm going to get seated again
+00:23:56.990 --> 00:24:01.400
+role playing game is you take on the role of being your
-00:19:48.720 --> 00:19:51.200
-I'm not sure if I talk over the stream
+00:24:01.400 --> 00:24:06.500
+character and you play your character and dungeons not like
-00:19:51.200 --> 00:19:53.200
-if you'll hear it because I'm just
+00:24:06.500 --> 00:24:08.160
+that dungeon.
-00:19:53.200 --> 00:19:54.720
-watching your stream
+00:24:08.160 --> 00:24:11.160
+You can play.
-00:19:54.720 --> 00:20:01.200
-but I can try writing an irc
+00:24:11.160 --> 00:24:14.660
+So, the dungeon party always has eight characters in it.
-00:20:01.200 --> 00:20:04.640
-sure yeah questions would be cool or
+00:24:14.660 --> 00:24:17.890
+There's four in the front row and four in the back row and
-00:20:04.640 --> 00:20:07.360
-yeah well Erik why don't you just go
+00:24:17.890 --> 00:24:22.160
+you march through the dungeon, fighting, whatever you encounter.
-00:20:07.360 --> 00:20:08.559
-ahead and start walking us through the
+00:24:22.160 --> 00:24:25.700
+And if there's one player you play all eight characters.
-00:20:08.559 --> 00:20:09.120
-hand
+00:24:25.700 --> 00:24:29.180
+And depending on how many players you have you split up the
-00:20:09.120 --> 00:20:11.440
-hand-drawn SVG stuff just a little bit
+00:24:29.180 --> 00:24:33.160
+party in whatever way seems fair and equitable to everybody.
-00:20:11.440 --> 00:20:12.960
-because I think
+00:24:33.160 --> 00:24:36.010
+And similarly I said the dungeon is kind of a simple game
-00:20:12.960 --> 00:20:14.640
-if that isn't interesting to people we
+00:24:36.010 --> 00:24:38.720
+like there's only three races and there's only three
-00:20:14.640 --> 00:20:17.120
-can just preempt for a question
+00:24:38.720 --> 00:24:42.160
+classes, all of your characters are either human elf dwarf.
-00:20:17.120 --> 00:20:21.120
-okay so historically when we
+00:24:42.160 --> 00:24:45.680
+They're all a warrior, a priest or a wizard, and all of
-00:20:21.120 --> 00:20:24.080
-decided to actually start writing
+00:24:45.680 --> 00:24:49.400
+these characters have, you know, special properties and
-00:20:24.080 --> 00:20:25.840
-code one of the very first things we
+00:24:49.400 --> 00:24:52.820
+special talents, that is why they come together in this
-00:20:25.840 --> 00:20:26.720
-wanted to do
+00:24:52.820 --> 00:24:54.160
+party of eight.
-00:20:26.720 --> 00:20:30.080
-was the maps because initially it seemed
+00:24:54.160 --> 00:24:57.730
+So essentially dungeon is a game about making up all of
-00:20:30.080 --> 00:20:31.919
-like the maps were going to be one of
+00:24:57.730 --> 00:25:01.530
+these eight characters and stomping through the dungeon
-00:20:31.919 --> 00:20:33.840
-the biggest challenges
+00:25:01.530 --> 00:25:04.160
+killing things taking their stuff.
-00:20:33.840 --> 00:20:35.760
-in terms of how do we get a text editor
+00:25:04.160 --> 00:25:08.120
+Well you're way over but I don't know how much I have to
-00:20:35.760 --> 00:20:38.000
-to draw pictures for us
+00:25:08.120 --> 00:25:12.160
+add to that. I will just add that if, if you're.
-00:20:38.000 --> 00:20:42.159
-we pretty quickly decided we wanted
+00:25:12.160 --> 00:25:15.570
+If one's passion as a dungeon master is killing player
-00:20:42.159 --> 00:20:45.280
-to work with svgs because it allowed us
+00:25:15.570 --> 00:25:19.210
+characters this game is meant for you. You don't have to
-00:20:45.280 --> 00:20:48.559
-to leverage the power of Emacs as a text
+00:25:19.210 --> 00:25:23.050
+build your game like that. But that's definitely a thing
-00:20:48.559 --> 00:20:52.159
-editor and a text manipulator to write
+00:25:23.050 --> 00:25:25.160
+that people do with this game.
-00:20:52.159 --> 00:20:56.080
-text graphics with the SVG format
+00:25:25.160 --> 00:25:28.430
+And then as Erik said, it just encourages you to put your
-00:20:56.080 --> 00:20:59.520
-so we did some SVG graphics by hand
+00:25:28.430 --> 00:25:32.160
+creativity on the table to bring all the different elements.
-00:20:59.520 --> 00:21:01.440
-we went in and just started hand coding
+00:25:32.160 --> 00:25:35.830
+Hopefully, this may be clear in our slides since we were a
-00:21:01.440 --> 00:21:02.640
-things that looked
+00:25:35.830 --> 00:25:39.430
+little fumbling for the first few minutes of the talk
-00:21:02.640 --> 00:21:05.440
-visually like the maps we used to draw
+00:25:39.431 --> 00:25:44.160
+but there's also a kind of a player's guide that I started a few years ago.
-00:21:05.440 --> 00:21:07.440
-by hand on graph paper when
+00:25:44.160 --> 00:25:47.950
+That's not super complete, but does cover some
-00:21:07.440 --> 00:21:08.960
-we were you know sitting around the
+00:25:47.950 --> 00:25:52.160
+of the high level basics of the game that Erik's been talking from.
-00:21:08.960 --> 00:21:11.360
-table
+00:25:52.160 --> 00:25:55.800
+And I would add that some of the things that you know some
-00:21:11.360 --> 00:21:14.559
-yep absolutely what emerged from that
+00:25:55.800 --> 00:25:58.890
+of what makes dungeon great is that there's a lot of
-00:21:14.559 --> 00:21:17.840
-is as we started working on some of
+00:25:58.890 --> 00:26:02.950
+mystery about it, like the player's handbook doesn't tell
-00:21:17.840 --> 00:21:20.400
-these files this particular image is a
+00:26:02.950 --> 00:26:07.020
+you all of the rules, or like any really mystery and like
-00:21:20.400 --> 00:21:24.000
-test of some 20 wide water
+00:26:07.020 --> 00:26:09.160
+there's mazes and there's puzzles,
-00:21:24.000 --> 00:21:26.240
-with some beaches around it and a
+00:26:09.160 --> 00:26:12.650
+and you have to figure out how things work, and like we've
-00:21:26.240 --> 00:21:28.000
-special chamber kind of off to the side
+00:26:12.650 --> 00:26:16.020
+got all of these treasure items in there that could help
-00:21:28.000 --> 00:21:29.679
-called a clapper
+00:26:16.020 --> 00:26:20.160
+you deal with a particular monster if it occurs to you to use it.
-00:21:29.679 --> 00:21:33.760
-and this was the way we would code is by
+00:26:20.160 --> 00:26:24.160
+And, you know, like that. There's a lot of.
-00:21:33.760 --> 00:21:36.559
-sketching by hand all of these things to
+00:26:24.160 --> 00:26:27.450
+You don't know what's going on you're dropped in the middle
-00:21:36.559 --> 00:21:37.600
-look right
+00:26:27.450 --> 00:26:30.680
+of this situation and you have to try and survive and level
-00:21:37.600 --> 00:21:39.440
-and then we would take that code and we
+00:26:30.680 --> 00:26:33.750
+up and figure it out. And if you succeed in doing that for
-00:21:39.440 --> 00:21:42.080
-noticed it became real repetitive
+00:26:33.750 --> 00:26:36.520
+a long enough eventually you start realizing that there are
-00:21:42.080 --> 00:21:43.919
-as we would go like chunk of water chunk
+00:26:36.520 --> 00:26:40.890
+big picture puzzles that there are, you know, there is more to this than just
-00:21:43.919 --> 00:21:45.440
-of water chunk of water
+00:26:40.890 --> 00:26:43.160
+killing things and taking their stuff.
-00:21:45.440 --> 00:21:46.880
-and we're like okay so what we really
+00:26:43.160 --> 00:26:46.190
+And that's where the joy of designing these games comes in
-00:21:46.880 --> 00:21:48.559
-need is to define a
+00:26:46.190 --> 00:26:48.890
+for me is like designing the mazes and designing the
-00:21:48.559 --> 00:21:52.000
-set of we called it tiles but like
+00:26:48.890 --> 00:26:51.890
+puzzles and like, oh yeah and then they're going to come
-00:21:52.000 --> 00:21:53.600
-you could think of it as rubber stamps
+00:26:51.890 --> 00:26:51.890
+out of this room and you know what they're going to do.
-00:21:53.600 --> 00:21:55.760
-where we write this graphics code
+00:26:51.891 --> 00:26:57.160
+They're wanting to go that way.
-00:21:55.760 --> 00:21:57.440
-and then we're able to repeat it in
+00:26:57.160 --> 00:27:00.160
+So I'm going to put the trap right there.
-00:21:57.440 --> 00:22:00.400
-different places around the map
+00:27:00.160 --> 00:27:00.160
+And I walk right into it every time.
-00:22:00.400 --> 00:22:03.039
-you want to flip over to code view
+00:27:00.161 --> 00:27:00.161
+And then when the party does get in your map
-00:22:03.039 --> 00:22:07.120
-and show that or do we want to move into
+00:27:00.162 --> 00:27:00.162
+and they do exactly what you thought and they hit the trap
-00:22:07.120 --> 00:22:10.240
-tiles code
+00:27:00.163 --> 00:27:07.820
+it's just really satisfying
-00:22:10.240 --> 00:22:12.720
-so you know you can see just really
+00:27:07.820 --> 00:27:07.820
+to watch the look on their little faces
-00:22:12.720 --> 00:22:14.320
-obviously here the only thing that's
+00:27:07.821 --> 00:27:12.160
+as they squirm and struggle to stay alive.
-00:22:14.320 --> 00:22:15.200
-changing from
+00:27:12.160 --> 00:27:14.580
+Yeah, that's, that's what I was trying to get at. Thanks.
-00:22:15.200 --> 00:22:18.240
-chunk of water to chunk of water is the
+00:27:14.580 --> 00:27:18.160
+All right, that was perfect for me. All right.
-00:22:18.240 --> 00:22:21.600
-x and y coordinates
+00:27:18.160 --> 00:27:21.360
+So so highlight your question for me if you think it's
-00:22:21.600 --> 00:22:24.640
-we're you know we can skip getting into
+00:27:21.360 --> 00:27:24.800
+important we grab it here before we jump into demos,
-00:22:24.640 --> 00:22:26.000
-the SVG directives
+00:27:24.801 --> 00:27:28.160
+but otherwise I think it's time to try running some code.
-00:22:26.000 --> 00:22:29.360
-and how all of the path statements
+00:27:28.160 --> 00:27:30.160
+Let's say.
-00:22:29.360 --> 00:22:30.640
-actually work
+00:27:30.160 --> 00:27:37.160
+Okay, I say do it. Okay, so you less less camera more more emacs now.
-00:22:30.640 --> 00:22:33.679
-but you can trust us
+00:27:37.160 --> 00:27:40.380
+And hopefully I could find the right emacs the right
-00:22:33.679 --> 00:22:36.480
-all of these d equals and there's m's
+00:27:40.380 --> 00:27:43.160
+desktop. All right, there we are.
-00:22:36.480 --> 00:22:39.039
-and h's and v's that turns out to be
+00:27:43.160 --> 00:27:49.160
+So we'll try to fire up
-00:22:39.039 --> 00:22:41.039
-horizontal lines and vertical lines and
+00:27:49.160 --> 00:27:59.160
+a command right now. And I usually like to do the full path to emacs.
-00:22:41.039 --> 00:22:42.480
-cursor moves and it's kind of like
+00:27:59.160 --> 00:28:07.160
+When I'm going to run it under minus q.
-00:22:42.480 --> 00:22:44.159
-turtle graphics if anyone
+00:28:07.160 --> 00:28:13.160
+All right.
-00:22:44.159 --> 00:22:46.640
-remembers that far back and we're
+00:28:13.160 --> 00:28:17.160
+Let's have some IELM.
-00:22:46.640 --> 00:22:48.720
-picking up our pen and dropping it and
+00:28:17.160 --> 00:28:23.270
+All right, and then I'm also going to do a load file on the
-00:22:48.720 --> 00:22:54.720
-drawing lines around on our map
+00:28:23.270 --> 00:28:29.790
+net script that you can find in the repository in the emacs
-00:22:54.720 --> 00:22:56.240
-so we do have a few questions if you
+00:28:29.790 --> 00:28:36.160
+user and it's init scripts
-00:22:56.240 --> 00:22:58.000
-want to take them now otherwise
-
-00:22:58.000 --> 00:23:01.200
-we can also jump in
-
-00:23:01.200 --> 00:23:03.120
-let's get them while they're fresh okay
-
-00:23:03.120 --> 00:23:04.559
-sounds good
-
-00:23:04.559 --> 00:23:07.520
-so we'll probably shift to question
-
-00:23:07.520 --> 00:23:08.000
-and answer
-
-00:23:08.000 --> 00:23:10.799
-mode for up to 15 minutes here so if you
-
-00:23:10.799 --> 00:23:11.919
-do have questions
-
-00:23:11.919 --> 00:23:14.480
-maybe stack rank go ahead and sort
-
-00:23:14.480 --> 00:23:15.679
-the questions
-
-00:23:15.679 --> 00:23:17.600
-a little for us or comment on them to
-
-00:23:17.600 --> 00:23:18.960
-let us know which ones you want to see
-
-00:23:18.960 --> 00:23:19.760
-us get here
-
-00:23:19.760 --> 00:23:21.280
-if we start getting a little long-winded
-
-00:23:21.280 --> 00:23:23.600
-or nudges along we'll take direction
-
-00:23:23.600 --> 00:23:26.960
-but thanks for your questions I'd
-
-00:23:26.960 --> 00:23:28.799
-like to see a demo as well we'll look at
-
-00:23:28.799 --> 00:23:30.720
-that with the remaining time after this
-
-00:23:30.720 --> 00:23:32.159
-question block
-
-00:23:32.159 --> 00:23:35.200
-more about what the game is
-
-00:23:35.200 --> 00:23:38.720
-okay sure so let's let's take our
-
-00:23:38.720 --> 00:23:40.720
-one minute each swing at what the
-
-00:23:40.720 --> 00:23:42.799
-game is you want to go first I called
-
-00:23:42.799 --> 00:23:45.120
-weapons
-
-00:23:45.120 --> 00:23:48.840
-okay Dungeon
-
-00:23:48.840 --> 00:23:52.720
-is like role-playing games
-
-00:23:52.720 --> 00:23:55.440
-but you don't really do role-playing
-
-00:23:55.440 --> 00:23:56.159
-like the
-
-00:23:56.159 --> 00:23:57.919
-for me the thing the core of being a
-
-00:23:57.919 --> 00:23:59.520
-role-playing game is you
-
-00:23:59.520 --> 00:24:02.080
-take on the role of being your character
-
-00:24:02.080 --> 00:24:03.039
-and you play
-
-00:24:03.039 --> 00:24:06.000
-your character and Dungeon's not like
-
-00:24:06.000 --> 00:24:06.400
-that
-
-00:24:06.400 --> 00:24:10.320
-Dungeon you can play
-
-00:24:10.320 --> 00:24:12.640
-so the Dungeon party always has eight
-
-00:24:12.640 --> 00:24:13.840
-characters in it
-
-00:24:13.840 --> 00:24:15.840
-there's four in the front row and four
-
-00:24:15.840 --> 00:24:17.679
-in the back row and you march through
-
-00:24:17.679 --> 00:24:18.720
-the Dungeon
-
-00:24:18.720 --> 00:24:22.159
-fighting whatever you encounter and if
-
-00:24:22.159 --> 00:24:24.000
-there's one player you play all eight
-
-00:24:24.000 --> 00:24:25.200
-characters
-
-00:24:25.200 --> 00:24:27.120
-and depending on how many players you
-
-00:24:27.120 --> 00:24:28.720
-have you split up the party
-
-00:24:28.720 --> 00:24:30.799
-in whatever way seems fair and equitable
-
-00:24:30.799 --> 00:24:32.960
-to everybody
-
-00:24:32.960 --> 00:24:34.880
-similarly I said the Dungeon is kind of
-
-00:24:34.880 --> 00:24:36.720
-a simple game like there's only
-
-00:24:36.720 --> 00:24:38.320
-three races and there's only three
-
-00:24:38.320 --> 00:24:40.080
-classes all of your characters are
-
-00:24:40.080 --> 00:24:41.760
-either human elf dwarf
-
-00:24:41.760 --> 00:24:44.080
-they're all a warrior a priest or a
-
-00:24:44.080 --> 00:24:44.880
-wizard
-
-00:24:44.880 --> 00:24:46.640
-and all of these characters have you
-
-00:24:46.640 --> 00:24:48.320
-know special properties
-
-00:24:48.320 --> 00:24:51.279
-and special talents that is why they
-
-00:24:51.279 --> 00:24:53.760
-come together in this party of eight
-
-00:24:53.760 --> 00:24:56.240
-but essentially Dungeon is a game about
-
-00:24:56.240 --> 00:24:57.600
-making up all of these
-
-00:24:57.600 --> 00:25:00.000
-eight characters and stomping through
-
-00:25:00.000 --> 00:25:01.679
-the Dungeon killing things taking their
-
-00:25:01.679 --> 00:25:03.840
-stuff
-
-00:25:03.840 --> 00:25:05.120
-well you're way over but I don't know
-
-00:25:05.120 --> 00:25:06.960
-how much I have to add to that
-
-00:25:06.960 --> 00:25:10.080
-I will just add that if if you're
-
-00:25:10.080 --> 00:25:14.159
-if if one's passion as a Dungeon
-
-00:25:14.159 --> 00:25:16.559
-master is killing player characters this
-
-00:25:16.559 --> 00:25:17.120
-game
-
-00:25:17.120 --> 00:25:19.600
-is meant for you you don't have to build
-
-00:25:19.600 --> 00:25:21.039
-your game like that
-
-00:25:21.039 --> 00:25:22.559
-but that's definitely a thing that
-
-00:25:22.559 --> 00:25:24.400
-people do with this game
-
-00:25:24.400 --> 00:25:27.360
-and then as Erik said it just
-
-00:25:27.360 --> 00:25:28.960
-encourages you to put your creativity on
-
-00:25:28.960 --> 00:25:30.320
-the table to bring all the different
-
-00:25:30.320 --> 00:25:31.039
-elements
-
-00:25:31.039 --> 00:25:33.760
-and this hopefully this may be clear
-
-00:25:33.760 --> 00:25:35.039
-in our slides since we were a little
-
-00:25:35.039 --> 00:25:36.400
-fumbling for the first few minutes of
-
-00:25:36.400 --> 00:25:36.960
-the talk
-
-00:25:36.960 --> 00:25:40.480
-but there's also a kind of a player's
-
-00:25:40.480 --> 00:25:41.200
-guide
-
-00:25:41.200 --> 00:25:43.760
-that that I started a few years ago
-
-00:25:43.760 --> 00:25:45.919
-that's that's not super complete
-
-00:25:45.919 --> 00:25:48.400
-but but does cover some of the high
-
-00:25:48.400 --> 00:25:50.159
-level basics of the game that Erik's
-
-00:25:50.159 --> 00:25:52.320
-been talking from
-
-00:25:52.320 --> 00:25:55.679
-and I would add that some of the things
-
-00:25:55.679 --> 00:25:56.960
-you know some of what makes Dungeon
-
-00:25:56.960 --> 00:25:58.480
-great is that there's a lot of mystery
-
-00:25:58.480 --> 00:25:59.360
-about it
-
-00:25:59.360 --> 00:26:01.120
-like the player's handbook doesn't tell
-
-00:26:01.120 --> 00:26:02.880
-you all of the rules
-
-00:26:02.880 --> 00:26:06.080
-or like really mystery
-
-00:26:06.080 --> 00:26:08.080
-and like there's mazes and there's
-
-00:26:08.080 --> 00:26:09.679
-puzzles and
-
-00:26:09.679 --> 00:26:12.240
-you have to figure out how things work
-
-00:26:12.240 --> 00:26:12.799
-and like
-
-00:26:12.799 --> 00:26:14.559
-we've got all of these treasure items in
-
-00:26:14.559 --> 00:26:16.640
-there that could help you deal with a
-
-00:26:16.640 --> 00:26:18.480
-particular monster if it occurs to you
-
-00:26:18.480 --> 00:26:19.919
-to use it
-
-00:26:19.919 --> 00:26:22.720
-and you know like that there's a lot
-
-00:26:22.720 --> 00:26:23.360
-of
-
-00:26:23.360 --> 00:26:25.279
-you don't know what's going on you're
-
-00:26:25.279 --> 00:26:27.039
-dropped in the middle of this situation
-
-00:26:27.039 --> 00:26:28.559
-and you have to try and survive
-
-00:26:28.559 --> 00:26:31.919
-and level up and figure it out and
-
-00:26:31.919 --> 00:26:33.840
-if you succeed in doing that for long
-
-00:26:33.840 --> 00:26:35.520
-enough eventually you start realizing
-
-00:26:35.520 --> 00:26:37.520
-that there are big picture puzzles
-
-00:26:37.520 --> 00:26:40.000
-that there are you know there is more to
-
-00:26:40.000 --> 00:26:41.760
-this than just killing things and taking
-
-00:26:41.760 --> 00:26:43.360
-their stuff
-
-00:26:43.360 --> 00:26:46.000
-and that's where the joy of designing
-
-00:26:46.000 --> 00:26:47.279
-these games comes in
-
-00:26:47.279 --> 00:26:49.679
-for me is like designing the mazes and
-
-00:26:49.679 --> 00:26:51.679
-designing the puzzles and like
-
-00:26:51.679 --> 00:26:53.200
-oh yeah and then they're going to come
-
-00:26:53.200 --> 00:26:54.240
-out of this room and you know what
-
-00:26:54.240 --> 00:26:55.919
-they're going to do they want to
-
-00:26:55.919 --> 00:26:58.240
-go that way so I'm going to put the trap
-
-00:26:58.240 --> 00:26:59.600
-right there
-
-00:26:59.600 --> 00:27:01.360
-and they'll walk right into it every
-
-00:27:01.360 --> 00:27:03.840
-time and then when the party does get in
-
-00:27:03.840 --> 00:27:05.440
-your map and they do exactly what you
-
-00:27:05.440 --> 00:27:07.200
-thought and they hit the trap it's just
-
-00:27:07.200 --> 00:27:09.279
-really satisfying to watch the look on
-
-00:27:09.279 --> 00:27:10.960
-their little faces as they squirm and
-
-00:27:10.960 --> 00:27:12.320
-struggle to stay alive
-
-00:27:12.320 --> 00:27:13.760
-yeah that's that's what I was trying to
-
-00:27:13.760 --> 00:27:15.520
-get at thanks all right that was perfect
-
-00:27:15.520 --> 00:27:16.320
-for me
-
-00:27:16.320 --> 00:27:19.200
-all right so so highlight your
-
-00:27:19.200 --> 00:27:20.320
-question for me if you think it's
-
-00:27:20.320 --> 00:27:21.840
-important we grab it here before we jump
-
-00:27:21.840 --> 00:27:22.960
-into demos
-
-00:27:22.960 --> 00:27:25.039
-but otherwise I think it's time to try
-
-00:27:25.039 --> 00:27:27.919
-running some code
-
-00:27:27.919 --> 00:27:31.279
-what say okay I say do it
-
-00:27:31.279 --> 00:27:33.840
-okay so you less less camera more more
-
-00:27:33.840 --> 00:27:36.480
-Emacs now
-
-00:27:36.480 --> 00:27:39.120
-and hopefully I could find the right e
-
-00:27:39.120 --> 00:27:39.840
-max
-
-00:27:39.840 --> 00:27:42.960
-the right desktop all right there we are
-
-00:27:42.960 --> 00:27:48.799
-so we'll try to fire up
-
-00:27:48.799 --> 00:27:54.000
-and right now and I usually like to do
-
-00:27:54.000 --> 00:27:59.120
-the full path to Emacs
-
-00:27:59.120 --> 00:28:07.279
-when I'm going to run it under minus q
-
-00:28:07.279 --> 00:28:13.120
-all right
-
-00:28:13.120 --> 00:28:16.720
-let's have some iom
-
-00:28:16.720 --> 00:28:19.360
-all right and then I'm also going to do
-
-00:28:19.360 --> 00:28:20.000
-a
-
-00:28:20.000 --> 00:28:24.000
-load file on the init script that you
-
-00:28:24.000 --> 00:28:25.840
-can find in the repository
-
-00:28:25.840 --> 00:28:30.480
-in the Emacs user and it's
-
-00:28:30.480 --> 00:28:34.960
-init scripts
-
-00:28:34.960 --> 00:28:40.159
+00:28:36.160 --> 00:28:41.160
users folder
-00:28:40.159 --> 00:28:48.080
-user folder nice
-
-00:28:48.080 --> 00:28:49.919
-and it's called init dm because that
-
-00:28:49.919 --> 00:28:51.840
-happened to fit with my naming scheme
-
-00:28:51.840 --> 00:28:55.360
-potentially terrible all right and with
-
-00:28:55.360 --> 00:28:56.320
-that loaded
-
-00:28:56.320 --> 00:28:58.320
-in theory some very basic stuff will
-
-00:28:58.320 --> 00:29:00.159
-work even without us doing anything in
-
-00:29:00.159 --> 00:29:02.159
-iom so I think the the last thing Erik
-
-00:29:02.159 --> 00:29:04.399
-was talking about was the SVG code
-
-00:29:04.399 --> 00:29:06.000
-behind the maps
-
-00:29:06.000 --> 00:29:10.720
-there as kind of the technical thread
-
-00:29:10.720 --> 00:29:13.760
-so we'll just fire open the maps pick a
-
-00:29:13.760 --> 00:29:15.440
-Dungeon level
-
-00:29:15.440 --> 00:29:18.480
-let's pick a pretty one okay if I show
-
-00:29:18.480 --> 00:29:19.840
-this
-
-00:29:19.840 --> 00:29:23.440
-yeah whatever
-
-00:29:23.440 --> 00:29:27.679
-is that the surface yeah
-
-00:29:27.679 --> 00:29:30.799
-and let's scale it here I think if I
-
-00:29:30.799 --> 00:29:32.159
-wrap
-
-00:29:32.159 --> 00:29:34.960
-like once once we got the engine up and
-
-00:29:34.960 --> 00:29:36.399
-running a little bit
-
-00:29:36.399 --> 00:29:39.120
-we decided to do some experimentation
-
-00:29:39.120 --> 00:29:42.480
-about seeing what we could do to push
-
-00:29:42.480 --> 00:29:46.080
-the limits of our tile
-
-00:29:46.080 --> 00:29:49.360
-and gender so we more or less on the
-
-00:29:49.360 --> 00:29:50.080
-surface
-
-00:29:50.080 --> 00:29:53.120
-map I
-
-00:29:53.120 --> 00:29:56.399
-basically started with almost no
-
-00:29:56.399 --> 00:29:58.399
-tiles from below like the water and the
-
-00:29:58.399 --> 00:30:00.240
-beaches and the general store and the
-
-00:30:00.240 --> 00:30:01.279
-stairs
-
-00:30:01.279 --> 00:30:03.679
-were existing tiles but then we were
-
-00:30:03.679 --> 00:30:05.200
-like this is going to be a surface map
-
-00:30:05.200 --> 00:30:07.279
-so we're outdoors so I want hills and I
-
-00:30:07.279 --> 00:30:08.399
-want trees
-
-00:30:08.399 --> 00:30:11.760
-and I want grass and it took a little
-
-00:30:11.760 --> 00:30:12.399
-while
-
-00:30:12.399 --> 00:30:15.039
-playing with SVG to come up with some
-
-00:30:15.039 --> 00:30:16.320
-acceptable code
-
-00:30:16.320 --> 00:30:18.480
-but once the like the grass gets tiled
-
-00:30:18.480 --> 00:30:19.840
-out it
-
-00:30:19.840 --> 00:30:21.600
-kind of you know gives the illusion of
-
-00:30:21.600 --> 00:30:23.039
-grass and
+00:28:41.160 --> 00:28:48.160
+nice.
-00:30:23.039 --> 00:30:24.880
-you know these are all in my estimation
+00:28:48.160 --> 00:28:51.530
+And it's called init-dm because that happened to fit with
-00:30:24.880 --> 00:30:26.399
-kind of crude graphics
+00:28:51.531 --> 00:28:54.160
+my naming scheme, potentially terrible.
-00:30:26.399 --> 00:30:28.640
-but we're at the proof of concept stage
+00:28:54.160 --> 00:28:54.160
+All right, and with that loaded in theory some very basic stuff will work
-00:30:28.640 --> 00:30:30.399
-and it definitely proves that we can use
+00:28:54.161 --> 00:28:54.161
+even without us doing anything in IELM
-00:30:30.399 --> 00:30:31.679
-our graphics engine
+00:28:54.162 --> 00:29:05.870
+so I think the last thing Erik was talking about
-00:30:31.679 --> 00:30:34.640
-to decide what we want our maps to look
+00:29:05.871 --> 00:29:07.160
+was the SVG code behind the maps.
-00:30:34.640 --> 00:30:35.279
-like
+00:29:07.160 --> 00:29:11.800
+There as kind of the technical thread so we'll just fire
-00:30:35.279 --> 00:30:39.440
-and real quickly compose new map tiles
+00:29:11.800 --> 00:29:15.160
+open the maps, pick a dungeon level.
-00:30:39.440 --> 00:30:44.240
-and stamp out a bunch of new maps
+00:29:15.160 --> 00:29:17.160
+Let's pick a pretty one.
-00:30:44.240 --> 00:30:46.880
-so now I'll show off one of the other
+00:29:17.160 --> 00:29:19.160
+Okay, if I show this.
-00:30:46.880 --> 00:30:48.640
-things so the next thing we did once we
+00:29:19.160 --> 00:29:23.160
+Yeah, whatever.
-00:30:48.640 --> 00:30:50.559
-once we had the maps doing
+00:29:23.160 --> 00:29:27.160
+Is that the surface. Yeah.
-00:30:50.559 --> 00:30:51.919
-and we haven't gotten into the features
+00:29:27.160 --> 00:29:32.740
+And let's scale it here I think if I recall that fun like
-00:30:51.919 --> 00:30:53.600
-of the maps we can we can appoint time
+00:29:32.740 --> 00:29:36.820
+once, once we got the engine up and running a little bit.
-00:30:53.600 --> 00:30:54.960
-to that or not
+00:29:36.820 --> 00:29:40.870
+We decided to do some experimentation about seeing
-00:30:54.960 --> 00:30:58.960
-but there are a number of
+00:29:40.871 --> 00:29:47.160
+what we could do to push the limits of our tile engine.
-00:30:58.960 --> 00:31:00.720
-featured features there that we can
+00:29:47.160 --> 00:29:54.450
+So we more or less on the surface map, I basically started
-00:31:00.720 --> 00:31:02.840
-look at the
+00:29:54.450 --> 00:29:54.450
+with almost no tiles from below like the water
-00:31:02.840 --> 00:31:05.760
-we then wanted to
+00:29:54.451 --> 00:30:01.370
+and the beaches and the general store and the stairs were existing tiles
-00:31:05.760 --> 00:31:08.640
-try to see if that could make other
+00:30:01.371 --> 00:30:04.730
+but then we were like this is going to be surface maps.
-00:31:08.640 --> 00:31:10.399
-interfaces more appealing so we built
+00:30:04.731 --> 00:30:07.160
+We're outdoors so I want hills
-00:31:10.399 --> 00:31:11.360
-stuff like
+00:30:07.160 --> 00:30:11.150
+and I want trees, and I want grass, and it took a little
-00:31:11.360 --> 00:31:14.320
-oop that's going to be the map again
+00:30:11.150 --> 00:30:15.430
+while playing with SVG to come up with some acceptable code,
-00:31:14.320 --> 00:31:15.919
-I'll just run it here through I
+00:30:15.430 --> 00:30:19.610
+but once the like the grass gets tiled out, it kind of,
-00:31:15.919 --> 00:31:18.320
-am so it's more obvious what I'm doing
+00:30:19.610 --> 00:30:24.510
+you know, gives the illusion of grass, and, you know, these
-00:31:18.320 --> 00:31:20.080
+00:30:24.510 --> 00:30:25.160
+are all in my estimation
+00:30:25.160 --> 00:30:29.970
+of crude graphics, but we're at the proof of concept stage,
-00:31:20.080 --> 00:31:21.679
-so let's look next to the character
+00:30:29.970 --> 00:30:34.130
+and it definitely proves that we can use our graphics
-00:31:21.679 --> 00:31:26.080
-sheet oops
+00:30:34.130 --> 00:30:38.490
+engine to decide what we want our maps to look like, and
-00:31:26.080 --> 00:31:32.880
-back and alt p doesn't work okay
+00:30:38.490 --> 00:30:42.970
+real quickly compose new map tiles and stamp out a bunch of
-00:31:32.880 --> 00:31:35.840
-that's a bummer that is not
+00:30:42.970 --> 00:30:44.160
+new maps.
-00:31:35.840 --> 00:31:38.240
-autoloaded
+00:30:44.160 --> 00:30:48.050
+So now I'll show off one of the other things. So the next
-00:31:38.240 --> 00:31:40.559
-so this this project is a bit of a mess
+00:30:48.050 --> 00:30:51.680
+thing we did once we once we had the maps doing, and we
-00:31:40.559 --> 00:31:41.600
-right now y'all
+00:30:51.680 --> 00:30:56.040
+haven't gotten into the features of the maps we can we can
-00:31:41.600 --> 00:31:43.120
-it does some stuff that's really
+00:30:56.040 --> 00:30:59.200
+appoint time to that or not, but there are a number of
-00:31:43.120 --> 00:31:45.120
-exciting to us but the code is terrible
+00:30:59.200 --> 00:31:01.160
+features there that we can look at.
-00:31:45.120 --> 00:31:47.039
-and we need all the help we can get
+00:31:01.160 --> 00:31:06.310
+The, we then wanted to try to see if that could make other
-00:31:47.039 --> 00:31:48.399
-being told what our problems are and how
+00:31:06.310 --> 00:31:11.550
+interfaces more appealing so we built stuff like, that's
-00:31:48.399 --> 00:31:49.279
-to fix them
+00:31:11.550 --> 00:31:14.160
+going to be the map again.
-00:31:49.279 --> 00:31:51.360
-so that is if you take nothing away from
+00:31:14.160 --> 00:31:18.580
+I'll just run it here through I am so it's more obvious
-00:31:51.360 --> 00:31:52.559
-this talk
+00:31:18.580 --> 00:31:20.160
+what I'm doing.
-00:31:52.559 --> 00:31:54.799
-take away from it that we could use
+00:31:20.160 --> 00:31:23.160
+So let's look next to the character sheet.
-00:31:54.799 --> 00:32:00.480
-your help
+00:31:23.160 --> 00:31:27.160
+Oops.
-00:32:00.480 --> 00:32:02.399
-yeah that doubles back to when we
+00:31:27.160 --> 00:31:33.160
+And alt P doesn't work. Okay.
-00:32:02.399 --> 00:32:04.640
-were talking about larry wall's cardinal
+00:31:33.160 --> 00:31:35.160
+That's a bummer.
-00:32:04.640 --> 00:32:06.320
-virtues of programming like we
+00:31:35.160 --> 00:31:38.160
+That is not auto loaded.
-00:32:06.320 --> 00:32:07.440
-definitely
+00:31:38.160 --> 00:31:41.120
+So this, this project is a bit of a mess right now, y'all,
-00:32:07.440 --> 00:32:09.760
-took on some hubris thinking we could do
+00:31:41.120 --> 00:31:43.800
+it does some stuff that's really exciting to us but the
-00:32:09.760 --> 00:32:10.640
-this
+00:31:43.800 --> 00:31:46.560
+code is terrible and we need all the help we can get being
-00:32:10.640 --> 00:32:13.519
-and we might not be wrong but we
+00:31:46.560 --> 00:31:49.160
+told what our problems are and how to fix them.
-00:32:13.519 --> 00:32:14.799
-could do it easier with
+00:31:49.160 --> 00:31:53.160
+So that is if you take nothing away from this talk.
-00:32:14.799 --> 00:32:16.799
-more hands you know many hands make
+00:31:53.160 --> 00:32:00.160
+Take away from it that we could use your help.
-00:32:16.799 --> 00:32:18.240
-light work all right
+00:32:00.160 --> 00:32:03.692
+Yeah, that doubles back to when we were talking about
-00:32:18.240 --> 00:32:21.760
-I'll bite yeah
+00:32:03.693 --> 00:32:07.800
+Larry Wall's cardinal virtues of programming like we definitely
-00:32:21.760 --> 00:32:23.360
-and the character she won't load for us
+00:32:07.800 --> 00:32:11.160
+took on some hubris, thinking we could do this.
-00:32:23.360 --> 00:32:24.799
-today I had some problems with my
+00:32:11.160 --> 00:32:14.300
+We might not be wrong, but we could do it easier with more
-00:32:24.799 --> 00:32:26.960
-version control I had to revert my thing
+00:32:14.300 --> 00:32:18.160
+hands, you know, many hands make light work. All right.
-00:32:26.960 --> 00:32:29.360
-I threw all my local changes in a stash
+00:32:18.160 --> 00:32:21.160
+I'll bite.
-00:32:29.360 --> 00:32:31.200
-and it's it's a terrible mess let's look
+00:32:21.160 --> 00:32:24.580
+Yeah, and the character she won't load for us today I had
-00:32:31.200 --> 00:32:32.080
-at stuff I
+00:32:24.580 --> 00:32:27.880
+some problems with my version control I had to revert my
-00:32:32.080 --> 00:32:37.519
-tested already today before
+00:32:27.880 --> 00:32:31.290
+thing I threw all my local changes in a stash and it's it's
-00:32:37.519 --> 00:32:40.559
-you got the battle board available
+00:32:31.290 --> 00:32:35.160
+a terrible mess let's look at stuff I tested already today.
-00:32:40.559 --> 00:32:43.760
-let's find out first we'll load library
+00:32:35.160 --> 00:32:40.160
+Before you got the battle board available.
-00:32:43.760 --> 00:32:45.760
-it
+00:32:40.160 --> 00:32:42.160
+Let's find out.
-00:32:45.760 --> 00:32:48.000
-in fact actually your basic require
+00:32:42.160 --> 00:32:46.160
+First of all, the library.
-00:32:48.000 --> 00:32:57.440
-should work
+00:32:46.160 --> 00:32:57.160
+In fact, actually, your basic require should work.
-00:32:57.440 --> 00:33:00.480
-no I can try load library
+00:32:57.160 --> 00:32:59.160
+No.
-00:33:00.480 --> 00:33:02.640
-you know what let's forg I'm just
+00:32:59.160 --> 00:33:03.490
+You can try a load library. You know what, let's, I'm just
-00:33:02.640 --> 00:33:03.760
-going to go ahead and give it to you as a
+00:33:03.490 --> 00:33:07.350
+going to go ahead and give it to you as a lab beast, since
-00:33:03.760 --> 00:33:04.960
-lab beast
+00:33:07.350 --> 00:33:10.160
+that's probably more fun to watch.
-00:33:04.960 --> 00:33:09.919
-since that's probably more fun to watch
+00:33:10.160 --> 00:33:16.570
+So we'll take it from my own and this is more likely to be
-00:33:09.919 --> 00:33:11.600
-we'll take it from my own inet
+00:33:16.570 --> 00:33:17.160
+healthy.
-00:33:11.600 --> 00:33:16.640
-this is more likely to be healthy
+00:33:17.160 --> 00:33:19.160
+Since only some of the time.
-00:33:16.640 --> 00:33:19.840
-since only some of the time first we
+00:33:19.160 --> 00:33:25.160
+First we have to control x, all the IDM.
-00:33:19.840 --> 00:33:20.880
-have to
+00:33:25.160 --> 00:33:30.360
+All right, and having then loaded the net control you have
-00:33:20.880 --> 00:33:24.799
-ctrl x alt I d m
+00:33:30.360 --> 00:33:35.550
+nine should give me the maps, and we can verify things work
-00:33:24.799 --> 00:33:28.559
-all right and having then loaded
+00:33:35.550 --> 00:33:39.160
+in a basic way just by changing level.
-00:33:28.559 --> 00:33:31.760
-the init control u f9
+00:33:39.160 --> 00:33:44.160
+Let's look at something else.
-00:33:31.760 --> 00:33:34.080
-should give me the maps and we can
+00:33:44.160 --> 00:33:49.380
+I mentioned, there were a number of bindings, show them
-00:33:34.080 --> 00:33:35.200
-verify
+00:33:49.380 --> 00:33:50.160
+briefly.
-00:33:35.200 --> 00:33:37.200
-things work in a basic way just by
+00:33:50.160 --> 00:33:55.820
+We wrote our own functions to handle movement. Some of
-00:33:37.200 --> 00:33:38.640
-changing level
+00:33:55.820 --> 00:34:00.872
+those in SVG dot el the left, left and right movements
-00:33:38.640 --> 00:33:43.200
-let's look at something else
+00:34:00.873 --> 00:34:07.160
+didn't seem to work quite quite likely coding, of course.
-00:33:43.200 --> 00:33:46.399
-I mentioned there were a number of
+00:34:07.160 --> 00:34:10.160
+Um, all right, enough.
-00:33:46.399 --> 00:33:47.360
-bindings
+00:34:10.160 --> 00:34:13.160
+So let's, let's see if battle board works now.
-00:33:47.360 --> 00:33:51.600
-show them briefly we wrote our own
+00:34:13.160 --> 00:34:16.160
+I really thought that was on F7.
-00:33:51.600 --> 00:33:54.080
-functions to handle movement some of
+00:34:16.160 --> 00:34:19.160
+Up that's the character sheet suite.
-00:33:54.080 --> 00:33:56.640
-those in SVG.el the left
+00:34:19.160 --> 00:34:25.160
+Okay, how to use your bindings.
-00:33:56.640 --> 00:33:59.679
-left and right movements didn't
+00:34:25.160 --> 00:34:28.160
+So that looks a little better.
-00:33:59.679 --> 00:34:02.640
-didn't seem to work quite quite likely
+00:34:28.160 --> 00:34:34.160
+So let's talk about the character sheet.
-00:34:02.640 --> 00:34:03.120
-coding
+00:34:34.160 --> 00:34:36.160
+Yeah.
-00:34:03.120 --> 00:34:06.720
-of course
+00:34:36.160 --> 00:34:40.570
+So the character sheet was our first big repurposing of the
-00:34:06.720 --> 00:34:09.760
-all right enough
+00:34:40.570 --> 00:34:45.160
+engine that we couldn't do the battle board program that.
-00:34:09.760 --> 00:34:11.760
-so let's let's see if battleboard works
+00:34:45.160 --> 00:34:54.160
+Let's see if that runs now to.
-00:34:11.760 --> 00:34:13.040
-now
+00:34:54.160 --> 00:35:01.160
+It's not interactive if it does.
-00:34:13.040 --> 00:34:15.760
-I really thought that was on f7 up
+00:35:01.160 --> 00:35:05.160
+Good.
-00:34:15.760 --> 00:34:17.040
-that's the character sheet
+00:35:05.160 --> 00:35:09.160
+So,
-00:34:17.040 --> 00:34:19.679
-sweet that's why you stay out of user
+00:35:09.160 --> 00:35:12.360
+try smex guess? No joy. All right, I'm not sure what's
-00:34:19.679 --> 00:34:24.879
-bindings
+00:35:12.360 --> 00:35:14.160
+up with the battle board Erik.
-00:34:24.879 --> 00:34:28.079
-so that looks a little better
+00:35:14.160 --> 00:35:17.190
+We haven't messed with that one for a while in fact we had
-00:34:28.079 --> 00:34:33.919
-so let's talk about the character sheet
+00:35:17.190 --> 00:35:20.270
+discussed using its code as an example so maybe we'll debug
-00:34:33.919 --> 00:34:35.919
-yeah
+00:35:20.270 --> 00:35:21.160
+it with you.
-00:34:35.919 --> 00:34:38.000
-so the character sheet was our first big
+00:35:21.160 --> 00:35:24.160
+I'll certainly check for questions first.
-00:34:38.000 --> 00:34:39.839
-repurposing
+00:35:24.160 --> 00:35:29.740
+Um, the. So the character sheet which is not scaling
-00:34:39.839 --> 00:34:42.560
-of the engine that we couldn't do the
+00:35:29.740 --> 00:35:31.160
+ideally here.
-00:34:42.560 --> 00:34:44.159
-battle board program
+00:35:31.160 --> 00:35:36.160
+See if reloading it does anything.
-00:34:44.159 --> 00:34:53.599
-that let's see if that runs now too
+00:35:36.160 --> 00:35:37.160
+Nope.
-00:34:53.599 --> 00:35:00.880
-it's not interactive if it does
+00:35:37.160 --> 00:35:40.660
+As far as I can tell, assuming you don't have this
-00:35:00.880 --> 00:35:04.960
-good
+00:35:40.660 --> 00:35:43.160
+implemented character sheet.
-00:35:04.960 --> 00:35:08.480
-no
+00:35:43.160 --> 00:35:49.800
+That's right, there's everything in scale, it take in order
-00:35:08.480 --> 00:35:11.760
-try let cemex guess no joy all right I'm
+00:35:49.800 --> 00:35:54.160
+to get what you were looking at there.
-00:35:11.760 --> 00:35:13.040
-not sure what's up with the battle board
+00:35:54.160 --> 00:35:56.160
+All right.
-00:35:13.040 --> 00:35:14.079
-Erik
+00:35:56.160 --> 00:36:03.201
+This, this whole thing is hard coded, basically to the
-00:35:14.079 --> 00:35:15.280
-we haven't messed with that one for a
+00:36:03.202 --> 00:36:08.160
+gills, except for things like this.
-00:35:15.280 --> 00:35:17.119
-while in fact
+00:36:08.160 --> 00:36:11.780
+This program represents a re implementation of the drawing
-00:35:17.119 --> 00:35:18.880
-we had discussed using its code as an
+00:36:11.780 --> 00:36:17.420
+engine using all of the same things. Let's see that
-00:35:18.880 --> 00:35:21.040
-example so maybe we'll debug it with you
+00:36:17.420 --> 00:36:20.160
+selected so
-00:35:21.040 --> 00:35:22.640
-I'll certainly check for questions
+00:36:20.160 --> 00:36:23.160
+we'll just try bringing up a map again.
-00:35:22.640 --> 00:35:25.359
-first
+00:36:23.160 --> 00:36:27.180
+There's one and you'll notice DM map doesn't know anything
-00:35:25.359 --> 00:35:28.079
-the so the character sheet which is
+00:36:27.180 --> 00:36:31.240
+about the new draw engine, and there are a couple of places
-00:35:28.079 --> 00:35:31.280
-not scaling ideally here
+00:36:31.240 --> 00:36:35.160
+where the new draw engine is still hooked in to the.
-00:35:31.280 --> 00:35:35.680
-see if reloading it does anything
+00:36:35.160 --> 00:36:38.250
+For example, particularly the sizing of the graph paper
-00:35:35.680 --> 00:35:39.440
-nope not as far as I can tell assuming
+00:36:38.250 --> 00:36:43.160
+background. So I've started the work in DM draw.
-00:35:39.440 --> 00:35:40.960
-you don't have this scale implemented
+00:36:44.160 --> 00:36:47.950
+Of trying to show how exactly we did this removing the, how
-00:35:40.960 --> 00:35:42.800
-for character sheet
+00:36:47.950 --> 00:36:51.040
+did we get data out of org mode that I talked about
-00:35:42.800 --> 00:35:44.960
-that's right there's everything in scale
+00:36:51.040 --> 00:36:56.410
+yesterday with our ETL flows, and just focusing on what how
-00:35:44.960 --> 00:35:46.800
-it take in order to get what you were
+00:36:56.410 --> 00:37:00.580
+did we solve the problem of predicated drawing, which I
-00:35:46.800 --> 00:35:54.079
-looking at there
+00:37:00.580 --> 00:37:04.290
+realized we didn't really talk about so should I jump into
-00:35:54.079 --> 00:35:58.640
-all right this
+00:37:04.290 --> 00:37:05.160
+that.
-00:35:58.640 --> 00:36:02.240
-this whole thing is hard-coded
+00:37:05.160 --> 00:37:06.160
+Yeah, I guess.
-00:36:02.240 --> 00:36:05.440
-basically to the gills except
+00:37:06.160 --> 00:37:09.160
+How are we on time, we have time for detours.
-00:36:05.440 --> 00:36:09.040
-for things like this this program
+00:37:09.160 --> 00:37:12.450
+Um, yeah, it looks like we could spend two or three minutes
-00:36:09.040 --> 00:36:10.640
-represents a re-implementation of the
+00:37:12.450 --> 00:37:15.160
+on that and then come back for the questions.
-00:36:10.640 --> 00:36:11.040
-draw
+00:37:15.160 --> 00:37:18.160
+Cool.
-00:36:11.040 --> 00:36:14.880
-engine using all of the same things
+00:37:18.160 --> 00:37:21.440
+And I'm just going to peek into my org mode into my chat
-00:36:14.880 --> 00:36:19.599
-let's see that's selected so
+00:37:21.440 --> 00:37:24.970
+conference and I don't see anybody talking to me from the
-00:36:19.599 --> 00:36:21.680
-we'll just try bringing up a map
+00:37:24.970 --> 00:37:29.160
+organizer channel, so I'm gonna assume that's a good guess.
-00:36:21.680 --> 00:36:23.119
-again
+00:37:29.160 --> 00:37:33.700
+All right, so let's go ahead and play with the map a
-00:36:23.119 --> 00:36:26.320
-there's one and you'll notice dm
+00:37:33.700 --> 00:37:38.170
+little then that is pretty fun and so much fun that we
-00:36:26.320 --> 00:36:28.560
-map doesn't know anything about the new
+00:37:38.170 --> 00:37:42.640
+had to curtail play sessions in order to keep working on
-00:36:28.560 --> 00:36:29.839
-draw engine
+00:37:42.640 --> 00:37:44.160
+the project.
-00:36:29.839 --> 00:36:31.599
-and there are a couple of places where
+00:37:44.160 --> 00:37:52.160
+So, I'll, I'll do the.
-00:36:31.599 --> 00:36:33.520
-the new draw engine is still
+00:37:52.160 --> 00:37:58.516
+Um, we'll try to find something different from any gift
-00:36:33.520 --> 00:36:36.480
-hooked in to the s for example
+00:37:58.517 --> 00:38:01.160
+I've shared here right.
-00:36:36.480 --> 00:36:37.440
-particularly
+00:38:01.160 --> 00:38:06.160
+So here we are in a random. Go ahead, Erik, you feel.
-00:36:37.440 --> 00:36:39.680
-the sizing of the graph paper background
+00:38:06.160 --> 00:38:10.660
+Okay, so what we're, what Corwin is doing here is he's
-00:36:39.680 --> 00:36:41.119
-so I've started the work
+00:38:10.660 --> 00:38:15.380
+about to put the map into play mode, which is going to turn
-00:36:41.119 --> 00:36:44.240
-in dmdraw.el
+00:38:15.380 --> 00:38:17.160
+on the fog of war.
-00:36:44.240 --> 00:36:47.040
-of trying to show how exactly we did
+00:38:17.160 --> 00:38:21.100
+And then we're going to use the fog of war and the, the
-00:36:47.040 --> 00:36:47.440
-this
+00:38:21.100 --> 00:38:25.230
+play mode to kind of reveal the map, one square at a time
-00:36:47.440 --> 00:36:50.160
-removing the how did we get data out of
+00:38:25.230 --> 00:38:28.160
+like we would during a play session.
-00:36:50.160 --> 00:36:51.760
-org mode that I talked about yesterday
+00:38:28.160 --> 00:38:32.350
+So we'll just drop the party randomly somewhere onto this
-00:36:51.760 --> 00:36:53.280
-with our etl flows
+00:38:32.350 --> 00:38:36.160
+map looks like we're on alpha maze level three here.
-00:36:53.280 --> 00:36:56.480
-and just focusing on
+00:38:36.160 --> 00:38:46.160
+And then we'll walk around a little.
-00:36:56.480 --> 00:36:58.960
-how did we solve the problem of
+00:38:46.160 --> 00:38:52.280
+Okay, so we're halfway there. I'll have to, I'll have to do
-00:36:58.960 --> 00:37:00.160
-predicated drawing
+00:38:52.280 --> 00:38:55.540
+a full redraw the sketch the sketching stuff has has has
-00:37:00.160 --> 00:37:01.839
-which I realized we didn't really talk
+00:38:55.540 --> 00:38:58.980
+broken things here like I said, the two aren't separated
-00:37:01.839 --> 00:37:05.200
-about so should I jump into that
+00:38:58.980 --> 00:39:01.910
+once I run them in the same instance, they're not
-00:37:05.200 --> 00:37:07.760
-yeah I guess how are we on time we
+00:39:01.910 --> 00:39:03.160
+predictable.
-00:37:07.760 --> 00:37:09.280
-have time for detours
+00:39:03.160 --> 00:39:08.060
+Okay, so let me elaborate here when he says the sketching
-00:37:09.280 --> 00:37:11.359
-yeah it looks like we could spend two
+00:39:08.060 --> 00:39:12.960
+stuff. The current focus of our work is to turn all of this
-00:37:11.359 --> 00:37:12.800
-or three minutes on that and then
+00:39:12.960 --> 00:39:17.940
+map stuff we've got into a basically a WYSIWYG map editor,
-00:37:12.800 --> 00:37:15.599
-come back for the questions cool do
+00:39:17.940 --> 00:39:22.330
+where we can get into the tiles, and we'll be able to
-00:37:15.599 --> 00:37:17.680
-it
-
-00:37:17.680 --> 00:37:20.480
-and I'm just going to peek into my org mode
-
-00:37:20.480 --> 00:37:20.800
-by
-
-00:37:20.800 --> 00:37:23.200
-into my chat conference and I don't see
-
-00:37:23.200 --> 00:37:24.960
-anybody talking to me from the organizer
-
-00:37:24.960 --> 00:37:25.520
-channel
-
-00:37:25.520 --> 00:37:26.560
-so I'm going to assume that's a good
-
-00:37:26.560 --> 00:37:28.800
-guess
-
-00:37:28.800 --> 00:37:32.079
-all right so let's let's go ahead and
-
-00:37:32.079 --> 00:37:34.160
-play with the map a little then that is
-
-00:37:34.160 --> 00:37:37.760
-pretty fun and and so much fun
-
-00:37:37.760 --> 00:37:39.440
-that we had to curtail play sessions in
-
-00:37:39.440 --> 00:37:41.760
-order to keep working on the project
-
-00:37:41.760 --> 00:37:45.119
-
-
-00:37:45.119 --> 00:37:48.480
-so I'll
-
-00:37:48.480 --> 00:37:51.839
-I'll do the
-
-00:37:51.839 --> 00:37:55.920
-we'll try to find something different
-
-00:37:55.920 --> 00:38:01.040
-from any gif I've shared here right
-
-00:38:01.040 --> 00:38:03.359
-so here we are in a random go ahead Erik
-
-00:38:03.359 --> 00:38:05.760
-you phil
-
-00:38:05.760 --> 00:38:08.240
-oh okay so what what what corwin is
-
-00:38:08.240 --> 00:38:10.000
-doing here is he's about to put the
-
-00:38:10.000 --> 00:38:13.359
-the map into play mode
-
-00:38:13.359 --> 00:38:16.800
-which is going to turn on the fog of war
-
-00:38:16.800 --> 00:38:19.920
-and then we're going to use
-
-00:38:19.920 --> 00:38:23.040
-the fog of war and the the play mode to
-
-00:38:23.040 --> 00:38:24.560
-kind of reveal the map
-
-00:38:24.560 --> 00:38:26.240
-one square at a time like we would
-
-00:38:26.240 --> 00:38:28.160
-during a play session
-
-00:38:28.160 --> 00:38:29.920
-so we'll just drop the party randomly
-
-00:38:29.920 --> 00:38:31.280
-somewhere onto this map
-
-00:38:31.280 --> 00:38:33.839
-looks like we're on alpha maze level
-
-00:38:33.839 --> 00:38:36.079
-three here
-
-00:38:36.079 --> 00:38:40.800
-and
-
-00:38:40.800 --> 00:38:46.320
--oh then we'll walk around a little
-
-00:38:46.320 --> 00:38:50.480
-okay there we go we're halfway there
-
-00:38:50.480 --> 00:38:52.160
-I'll have to I'll have to do a full
-
-00:38:52.160 --> 00:38:53.520
-redraw
-
-00:38:53.520 --> 00:38:55.920
-the sketch the sketching stuff has
-
-00:38:55.920 --> 00:38:58.480
-has has broken things here like I said
-
-00:38:58.480 --> 00:39:00.240
-the two aren't separated once I run them
-
-00:39:00.240 --> 00:39:01.599
-in the same instance they're not
-
-00:39:01.599 --> 00:39:03.520
-predictable
-
-00:39:03.520 --> 00:39:05.359
-okay so let me elaborate here when he
-
-00:39:05.359 --> 00:39:07.040
-says the sketching stuff
-
-00:39:07.040 --> 00:39:10.560
-the current focus of our work is to
-
-00:39:10.560 --> 00:39:13.520
-turn all of this map stuff we've got
-
-00:39:13.520 --> 00:39:14.320
-into
-
-00:39:14.320 --> 00:39:17.920
-a basically a wysiwyg map editor
-
-00:39:17.920 --> 00:39:20.880
-where we can get into the tiles and
-
-00:39:20.880 --> 00:39:22.160
-we'll be able to
-
-00:39:22.160 --> 00:39:24.480
+00:39:22.330 --> 00:39:24.160
select the tile and basically rubber
-00:39:24.480 --> 00:39:26.560
-stamp it into a map
-
-00:39:26.560 --> 00:39:29.680
-graphically and then save the map file
-
-00:39:29.680 --> 00:39:30.000
-out
-
-00:39:30.000 --> 00:39:33.280
-and load it back in later so that
-
-00:39:33.280 --> 00:39:36.720
-we're able to you know just pound out
-
-00:39:36.720 --> 00:39:38.480
-these maps real fast
-
-00:39:38.480 --> 00:39:42.000
-using a graphical editor rather than
-
-00:39:42.000 --> 00:39:43.200
-having to hand code
-
-00:39:43.200 --> 00:39:45.440
-every symbol and every square of the
-
-00:39:45.440 --> 00:39:48.000
-tables
-
-00:39:48.000 --> 00:39:52.960
-so the process of doing that
-
-00:39:52.960 --> 00:39:54.800
-things are a mess we've got covers off
-
-00:39:54.800 --> 00:39:56.720
-there's wires hanging out
-
-00:39:56.720 --> 00:39:58.720
-different stuff works on different
-
-00:39:58.720 --> 00:40:03.119
-days
-
-00:40:03.119 --> 00:40:05.200
-well I will say in our defense this is
-
-00:40:05.200 --> 00:40:07.119
-exactly why we staged a complicated
-
-00:40:07.119 --> 00:40:07.520
-thing
-
-00:40:07.520 --> 00:40:09.680
-and probably we should have just gone
-
-00:40:09.680 --> 00:40:11.119
-with that instead of
-
-00:40:11.119 --> 00:40:14.160
-trying to give you the experience
-
-00:40:14.160 --> 00:40:17.760
-of of of what it's like to use Emacs
-
-00:40:17.760 --> 00:40:19.200
-to do this which is
-
-00:40:19.200 --> 00:40:21.359
-which is sort of the last minute thought
-
-00:40:21.359 --> 00:40:23.280
-there and my apologies for that
-
-00:40:23.280 --> 00:40:25.119
-if that's made it harder to follow the
-
-00:40:25.119 --> 00:40:27.200
-thread let's check back now for
-
-00:40:27.200 --> 00:40:28.240
-questions
-
-00:40:28.240 --> 00:40:30.000
-and see if anybody wants to redirect at
-
-00:40:30.000 --> 00:40:36.640
-all
-
-00:40:36.640 --> 00:40:39.599
-so yep this so what you're looking at
-
-00:40:39.599 --> 00:40:40.800
-all uses prog
-
-00:40:40.800 --> 00:40:44.880
-pragmatic SVG
-
-00:40:44.880 --> 00:40:47.760
-SVG generation for question number
-
-00:40:47.760 --> 00:40:49.119
-four there have you played with
-
-00:40:49.119 --> 00:40:52.000
-generating svgs pragmatically in Emacs
-
-00:40:52.000 --> 00:40:55.119
-that is what the maps are doing in
-
-00:40:55.119 --> 00:40:55.680
-terms
-
-00:40:55.680 --> 00:40:58.480
-of we should have been maybe more
-
-00:40:58.480 --> 00:41:00.400
-explicit about that we started hand
-
-00:41:00.400 --> 00:41:01.680
-coding things and
-
-00:41:01.680 --> 00:41:05.119
-once we got the idea of what the code
-
-00:41:05.119 --> 00:41:06.400
-was going to look like
-
-00:41:06.400 --> 00:41:09.359
-we switched to doing it programmatically
-
-00:41:09.359 --> 00:41:10.000
-so
-
-00:41:10.000 --> 00:41:12.880
-we were going to open up maybe now if
-
-00:41:12.880 --> 00:41:14.640
-we've got time we can get into the tile
-
-00:41:14.640 --> 00:41:15.839
-set real quick
-
-00:41:15.839 --> 00:41:18.640
-sure we definitely didn't do any of the
-
-00:41:18.640 --> 00:41:20.560
-pathing slides and so now we've skipped
-
-00:41:20.560 --> 00:41:23.040
-over some stuff we were going to present
-
-00:41:23.040 --> 00:41:25.040
-yeah that's right we skipped a whole
-
-00:41:25.040 --> 00:41:26.880
-bunch of slides and I can certainly
-
-00:41:26.880 --> 00:41:28.160
-go back to them they're open here
-
-00:41:28.160 --> 00:41:31.040
-obviously
-
-00:41:31.040 --> 00:41:33.599
-right I was just showing off the
-
-00:41:33.599 --> 00:41:34.480
-sketching
-
-00:41:34.480 --> 00:41:36.880
-tool briefly in that context but I
-
-00:41:36.880 --> 00:41:38.000
-think you're right let's
-
-00:41:38.000 --> 00:41:40.000
-we can jump over to the actually I
-
-00:41:40.000 --> 00:41:41.280
-should finish with this now having
-
-00:41:41.280 --> 00:41:42.000
-teased it
-
-00:41:42.000 --> 00:41:45.119
-so let's do the same thing here ctrl h m
-
-00:41:45.119 --> 00:41:47.119
-and you'll see in this case there are
-
-00:41:47.119 --> 00:41:48.560
-very few keyboard
-
-00:41:48.560 --> 00:41:52.160
-key bindings that are set up even
-
-00:41:52.160 --> 00:41:55.359
-this shift delete has a tera
-
-00:41:55.359 --> 00:41:59.280
-or shift with
-
-00:41:59.280 --> 00:42:02.560
-yeah control delete it would seem to be
-
-00:42:02.560 --> 00:42:05.680
-so that has couple obvious bugs with it
-
-00:42:05.680 --> 00:42:07.119
-right didn't pick it didn't pick up
-
-00:42:07.119 --> 00:42:09.280
-those control points until I reused them
-
-00:42:09.280 --> 00:42:11.280
-not clearing that stack
-
-00:42:11.280 --> 00:42:13.760
-and also should probably think about
-
-00:42:13.760 --> 00:42:14.480
-whether
-
-00:42:14.480 --> 00:42:16.720
-the origin should return and hey marking
-
-00:42:16.720 --> 00:42:18.400
-that origin would be nice
-
-00:42:18.400 --> 00:42:19.839
-so there's a tremendous amount to do
-
-00:42:19.839 --> 00:42:21.680
-here this is just
-
-00:42:21.680 --> 00:42:24.400
-showing that it is possible to use
-
-00:42:24.400 --> 00:42:26.079
-essentially like a touch input
-
-00:42:26.079 --> 00:42:31.680
-to
-
-00:42:31.680 --> 00:42:35.119
-yeah and then also we can switch over to
-
-00:42:35.119 --> 00:42:35.760
-our place
-
-00:42:35.760 --> 00:42:39.040
-tool and
-
-00:42:39.040 --> 00:42:43.040
-hopefully we can get a nice big menu
-
-00:42:43.040 --> 00:42:45.040
-of all the tiles that Erik prepared for
-
-00:42:45.040 --> 00:42:49.440
-the game maps
-
-00:42:49.440 --> 00:42:51.680
-that was probably a terrible choice
-
-00:42:51.680 --> 00:42:53.119
-but there you have just a bit of
-
-00:42:53.119 --> 00:42:56.800
-corridor right
-
-00:42:56.800 --> 00:43:00.480
-that looks
-
-00:43:00.480 --> 00:43:04.560
-and even the click yep and this this
-
-00:43:04.560 --> 00:43:06.160
-glitch action here is the last thing I
-
-00:43:06.160 --> 00:43:07.280
-was working on before I dropped
-
-00:43:07.280 --> 00:43:08.079
-everything to
-
-00:43:08.079 --> 00:43:10.079
-to build the decks that we will soon
-
-00:43:10.079 --> 00:43:14.240
-share for this conference
-
-00:43:14.240 --> 00:43:19.680
-so okay back to the tile sets
-
-00:43:19.680 --> 00:43:22.160
-right so the way we approached drawing
-
-00:43:22.160 --> 00:43:23.440
-it programmatically
-
-00:43:23.440 --> 00:43:25.200
-is we broke our code up into little
-
-00:43:25.200 --> 00:43:27.280
-snippets we called tiles
-
-00:43:27.280 --> 00:43:29.280
-corman's going to open up the tile
-
-00:43:29.280 --> 00:43:32.160
-set here basically each tile has a name
-
-00:43:32.160 --> 00:43:35.280
-and then with that name we place data
-
-00:43:35.280 --> 00:43:37.920
-into different layers of the image
-
-00:43:37.920 --> 00:43:40.640
-some of the layers are just SVG paths
-
-00:43:40.640 --> 00:43:41.280
-and
-
-00:43:41.280 --> 00:43:44.880
-the data is just SVG commands
-
-00:43:44.880 --> 00:43:47.920
-like we saw in that handwritten code and
-
-00:43:47.920 --> 00:43:50.960
-some of it is compositions of other
-
-00:43:50.960 --> 00:43:54.160
-tiles so a tile can be made up of other
-
-00:43:54.160 --> 00:43:56.160
-tiles
-
-00:43:56.160 --> 00:43:58.000
-furthermore some of these tiles have
-
-00:43:58.000 --> 00:43:59.599
-conditional code in it
-
-00:43:59.599 --> 00:44:02.319
-where like some of this stuff is talking
-
-00:44:02.319 --> 00:44:02.720
-about
-
-00:44:02.720 --> 00:44:06.560
-elf and bang elf so the map is going to
-
-00:44:06.560 --> 00:44:08.079
-be drawn differently depending
-
-00:44:08.079 --> 00:44:09.440
-on whether or not there's elves in the
-
-00:44:09.440 --> 00:44:11.200
-party
-
-00:44:11.200 --> 00:44:16.880
-so and that's the demo they broke
-
-00:44:16.880 --> 00:44:18.240
-the engine has to make all those
-
-00:44:18.240 --> 00:44:20.000
-decisions
-
-00:44:20.000 --> 00:44:21.599
-and that's what we're calling predicated
-
-00:44:21.599 --> 00:44:23.280
-drawing oh there's a
-
-00:44:23.280 --> 00:44:25.200
-special room here do you have any elves
-
-00:44:25.200 --> 00:44:26.480
-you do so I draw
-
-00:44:26.480 --> 00:44:32.880
-there is elf's way
-
-00:44:32.880 --> 00:44:35.839
-yeah so we built up the set of tiles and
-
-00:44:35.839 --> 00:44:36.319
-then
-
-00:44:36.319 --> 00:44:39.920
-we basically made map files which
-
-00:44:39.920 --> 00:44:43.760
-take our map and break it up into xy
-
-00:44:43.760 --> 00:44:47.839
-grids and then we drop these tiles into
-
-00:44:47.839 --> 00:44:50.240
-positions on the map so we can use the
-
-00:44:50.240 --> 00:44:52.000
-same tile square after square after
-
-00:44:52.000 --> 00:44:52.480
-square
-
-00:44:52.480 --> 00:44:54.720
-when there's a corridor north south it's
-
-00:44:54.720 --> 00:44:55.680
-the same tile
-
-00:44:55.680 --> 00:44:59.119
-over and over again and that makes it
-
-00:44:59.119 --> 00:45:02.400
-easy to reuse the code and then also
-
-00:45:02.400 --> 00:45:05.920
-when
-
-00:45:05.920 --> 00:45:10.560
-when we go to present the
-
-00:45:10.560 --> 00:45:13.520
-what am I trying to say the the drawing
-
-00:45:13.520 --> 00:45:15.839
-in in fog of war mode as we move down
-
-00:45:15.839 --> 00:45:18.000
-the corridor we can just add the
-
-00:45:18.000 --> 00:45:20.640
-necessary code one bit at a time to the
-
-00:45:20.640 --> 00:45:23.440
-visible image so that what we're
-
-00:45:23.440 --> 00:45:24.960
-displaying doesn't contain
-
-00:45:24.960 --> 00:45:27.359
-any data except what the party has
-
-00:45:27.359 --> 00:45:30.240
-already discovered
-
-00:45:30.240 --> 00:45:32.319
-and thus we have kind of spoiler rich
-
-00:45:32.319 --> 00:45:34.400
-documents sitting on the gm
-
-00:45:34.400 --> 00:45:37.359
-server and then less you know and
-
-00:45:37.359 --> 00:45:38.400
-spoiler-free
-
-00:45:38.400 --> 00:45:41.440
-data that flows down to the org mode
-
-00:45:41.440 --> 00:45:44.000
-files on the player system and the only
-
-00:45:44.000 --> 00:45:47.040
-real challenge is making sure that the
-
-00:45:47.040 --> 00:45:50.160
-the nothing that the game does can mess
-
-00:45:50.160 --> 00:45:50.960
-with the
-
-00:45:50.960 --> 00:45:54.480
-the the users the the players data file
-
-00:45:54.480 --> 00:45:55.280
-in case they
-
-00:45:55.280 --> 00:45:57.680
-might have their own notes and things in
-
-00:45:57.680 --> 00:46:00.160
-it that that would be the one
-
-00:46:00.160 --> 00:46:06.160
-you know number one thing to avoid
-
-00:46:06.160 --> 00:46:08.000
-another thing we can talk about here is
-
-00:46:08.000 --> 00:46:09.680
-that there are layers
-
-00:46:09.680 --> 00:46:11.839
-you can see this table at the bottom has
-
-00:46:11.839 --> 00:46:13.520
-tile and overlay
-
-00:46:13.520 --> 00:46:15.119
-the overlay column is just going to
-
-00:46:15.119 --> 00:46:17.040
-contain some actual SVG
-
-00:46:17.040 --> 00:46:20.800
-xml style tags so that's where we can
-
-00:46:20.800 --> 00:46:21.599
-add whatever
-
-00:46:21.599 --> 00:46:25.359
-text elements or other SVG like raw SVG
-
-00:46:25.359 --> 00:46:26.720
-tags we want
-
-00:46:26.720 --> 00:46:28.880
-whereas a lot of the other layers are
-
-00:46:28.880 --> 00:46:30.560
-going to be like path layers we've got
-
-00:46:30.560 --> 00:46:32.960
-water layers and beach layers
-
-00:46:32.960 --> 00:46:35.359
-and our plan was to have a style sheet
-
-00:46:35.359 --> 00:46:37.680
-that defines how each of those layers
-
-00:46:37.680 --> 00:46:38.720
-are represented
-
-00:46:38.720 --> 00:46:40.720
-so like when the water gets drawn blue
-
-00:46:40.720 --> 00:46:42.160
-and it's got arrows on it
-
-00:46:42.160 --> 00:46:45.520
-giving it direction all of that
-
-00:46:45.520 --> 00:46:47.680
-can be customized with a style sheet to
-
-00:46:47.680 --> 00:46:49.200
-change the water to be
-
-00:46:49.200 --> 00:46:51.200
-whatever you want and like we have
-
-00:46:51.200 --> 00:46:52.960
-beaches as yellow but maybe you like
-
-00:46:52.960 --> 00:46:54.319
-beaches as red or
-
-00:46:54.319 --> 00:46:57.359
-you know whatever so we also built
-
-00:46:57.359 --> 00:47:01.200
-some test programs
-
-00:47:01.200 --> 00:47:04.079
-and various of the I'm not not sure what
-
-00:47:04.079 --> 00:47:05.359
-kind of shape we're going to find these in
-
-00:47:05.359 --> 00:47:07.040
-but we can try running them
-
-00:47:07.040 --> 00:47:10.640
-here for example is just a
-
-00:47:10.640 --> 00:47:12.960
-very basic all of using a saint using
-
-00:47:12.960 --> 00:47:15.119
-the same file to define
-
-00:47:15.119 --> 00:47:18.560
-the tiles and and then
-
-00:47:18.560 --> 00:47:24.880
-the layout so to speak oh look at that
-
-00:47:24.880 --> 00:47:26.640
-there's the layout okay so that
-
-00:47:26.640 --> 00:47:28.960
-actually looks fine tile
-
-00:47:28.960 --> 00:47:30.960
-and it's pat so this is defining a tile
-
-00:47:30.960 --> 00:47:32.400
-named seas
-
-00:47:32.400 --> 00:47:35.440
-and it's going to have a list of tiles
-
-00:47:35.440 --> 00:47:38.720
-defined above and you'll notice also
-
-00:47:38.720 --> 00:47:41.839
-that we can just sort of freely define
-
-00:47:41.839 --> 00:47:44.559
-and redefine and it sort of figures out
-
-00:47:44.559 --> 00:47:46.160
-oh this must still be part of the b
-
-00:47:46.160 --> 00:47:50.839
-row we could also have done
-
-00:47:50.839 --> 00:48:00.000
-this
-
-00:48:00.000 --> 00:48:02.160
-okay so this would this would work as
-
-00:48:02.160 --> 00:48:08.480
-would this
-
-00:48:08.480 --> 00:48:11.599
-one of early on in development when
-
-00:48:11.599 --> 00:48:12.720
-we were talking about
-
-00:48:12.720 --> 00:48:14.400
-getting data in and out of these org
-
-00:48:14.400 --> 00:48:15.839
-tables it
-
-00:48:15.839 --> 00:48:19.440
-was kind of a priority to us to
-
-00:48:19.440 --> 00:48:22.319
-leave the way the data is organized open
-
-00:48:22.319 --> 00:48:23.040
-to
-
-00:48:23.040 --> 00:48:26.960
-the users and to the Dungeon masters so
-
-00:48:26.960 --> 00:48:30.720
-while we set our tile set apart from our
-
-00:48:30.720 --> 00:48:32.559
-map sets
-
-00:48:32.559 --> 00:48:35.440
-this clearly shows that you can cram a
-
-00:48:35.440 --> 00:48:38.319
-tile set and a map into a single file
-
-00:48:38.319 --> 00:48:41.040
-so in situations like the surface where
-
-00:48:41.040 --> 00:48:43.040
-we're using different tiles from other
-
-00:48:43.040 --> 00:48:43.760
-maps
-
-00:48:43.760 --> 00:48:46.559
-maybe it makes sense to move you know
-
-00:48:46.559 --> 00:48:48.079
-those tiles just into the file
-
-00:48:48.079 --> 00:48:50.559
-with your map or like it's hard for us
-
-00:48:50.559 --> 00:48:52.400
-to predict how other people are going to
-
-00:48:52.400 --> 00:48:54.319
-want to use this when they design their
-
-00:48:54.319 --> 00:48:55.119
-games
-
-00:48:55.119 --> 00:48:57.359
-so we wanted to leave it as versatile as
-
-00:48:57.359 --> 00:48:58.160
-possible
-
-00:48:58.160 --> 00:49:01.599
-about how you can use it where it
-
-00:49:01.599 --> 00:49:02.640
-matters right
-
-00:49:02.640 --> 00:49:04.319
-not support every feature in the world I
-
-00:49:04.319 --> 00:49:05.920
-can't count the number of times I said
-
-00:49:05.920 --> 00:49:07.280
-Erik Erik Erik
-
-00:49:07.280 --> 00:49:09.200
-hey if we do it like this people will be
-
-00:49:09.200 --> 00:49:10.800
-able and he just like
-
-00:49:10.800 --> 00:49:14.000
-does it have to do that do we do we does
-
-00:49:14.000 --> 00:49:14.480
-it like
-
-00:49:14.480 --> 00:49:17.920
-do we need it right away
-
-00:49:17.920 --> 00:49:19.599
-do you have to really rewrite everything
-
-00:49:19.599 --> 00:49:21.040
-so it can all do that
-
-00:49:21.040 --> 00:49:24.160
-and a lot of those
-
-00:49:24.160 --> 00:49:26.880
-a lot of those conversations too but the
-
-00:49:26.880 --> 00:49:28.240
-the key flexibilities
-
-00:49:28.240 --> 00:49:31.200
-are really there people might want to
-
-00:49:31.200 --> 00:49:32.559
-use a lot of different files they might
-
-00:49:32.559 --> 00:49:34.160
-want to lay the tables out however they
-
-00:49:34.160 --> 00:49:35.760
-want they have to be able to say hey
-
-00:49:35.760 --> 00:49:37.440
-this is a table that has
-
-00:49:37.440 --> 00:49:39.440
-data that's controlled by the game and
-
-00:49:39.440 --> 00:49:40.720
-everything else in the file
-
-00:49:40.720 --> 00:49:44.079
-is not the game's problem
-
-00:49:44.079 --> 00:49:45.920
-on our table some of our tables started
-
-00:49:45.920 --> 00:49:47.440
-getting really wide so we started
-
-00:49:47.440 --> 00:49:48.960
-striping the tables
-
-00:49:48.960 --> 00:49:51.119
-where we'll repeat the same table over
-
-00:49:51.119 --> 00:49:52.640
-and over and over again to
-
-00:49:52.640 --> 00:49:56.400
-get all of the columns in there without
-
-00:49:56.400 --> 00:49:59.119
-making it you know a million miles wide
-
-00:49:59.119 --> 00:49:59.599
-yeah
-
-00:49:59.599 --> 00:50:01.040
-do you want to should I go ahead and
-
-00:50:01.040 --> 00:50:02.640
-pull open like a level here
-
-00:50:02.640 --> 00:50:06.079
-do you think sure just to have shown it
-
-00:50:06.079 --> 00:50:08.319
-the aisle set's a great example of
-
-00:50:08.319 --> 00:50:09.680
-striped tables if you
-
-00:50:09.680 --> 00:50:11.119
-look down like in the level change
-
-00:50:11.119 --> 00:50:18.800
-feature oh sure
-
-00:50:18.800 --> 00:50:20.240
-sorry I'm not quite sitting well to my
-
-00:50:20.240 --> 00:50:22.400
-keyboard here I can just readjust things
-
-00:50:22.400 --> 00:50:30.079
-real quick
-
-00:50:30.079 --> 00:50:33.280
-so what you know you can see here
-
-00:50:33.280 --> 00:50:35.200
-like some of these tables got real wide
-
-00:50:35.200 --> 00:50:36.800
-when we're stuffing SVG
-
-00:50:36.800 --> 00:50:40.559
-tags into them and what we
+00:39:24.160 --> 00:39:30.510
+stamp it into a map graphically, and then save the map file
-00:50:40.559 --> 00:50:44.160
-oh maybe it's not in these
+00:39:30.510 --> 00:39:36.470
+out and load it back in later, so that we're able to just
-00:50:44.160 --> 00:50:50.079
-I thought it was
+00:39:36.470 --> 00:39:40.160
+pound out these maps real fast.
-00:50:50.079 --> 00:50:52.960
-special probably yeah no there it is
+00:39:40.160 --> 00:39:44.480
+Using a graphical editor rather than having to hand code
-00:50:52.960 --> 00:50:54.240
-yeah
+00:39:44.480 --> 00:39:48.160
+every symbol and every square of the tables.
-00:50:54.240 --> 00:50:56.000
-it was in level change it does the table
+00:39:48.160 --> 00:39:51.160
+So the process of doing that.
-00:50:56.000 --> 00:50:58.720
-can you repeat okay great
+00:39:51.160 --> 00:39:56.190
+I hate them on things are a mess we've got covers off those
-00:50:58.720 --> 00:51:00.640
-up and down so fast I didn't realize so
+00:39:56.190 --> 00:40:03.160
+wires hanging out different stuff works on different days.
-00:51:00.640 --> 00:51:01.920
-this first table
+00:40:03.160 --> 00:40:06.860
+Well, I will say in our defense this is exactly why we
-00:51:01.920 --> 00:51:05.680
-we've got path and what is that stairs
+00:40:06.860 --> 00:40:10.880
+staged a complicated thing, and probably we should have
-00:51:05.680 --> 00:51:08.800
-so the stairs level is one that draws in
+00:40:10.880 --> 00:40:14.510
+just gone with that instead of trying to give you the
-00:51:08.800 --> 00:51:10.079
-like a pink color
+00:40:14.510 --> 00:40:18.460
+experience of, of what it's like to use Emacs to do this
-00:51:10.079 --> 00:51:11.920
-to highlight the places where you can
+00:40:18.460 --> 00:40:21.160
+which is sort of the last
-00:51:11.920 --> 00:51:13.440
-change level
+00:40:21.160 --> 00:40:26.450
+thought there and my apologies for that if that's made it
-00:51:13.440 --> 00:51:15.200
-and then if we scroll down to the second
+00:40:26.450 --> 00:40:31.650
+harder to follow the thread. Let's check back now for
-00:51:15.200 --> 00:51:17.200
-half of this section
+00:40:31.650 --> 00:40:37.160
+questions and see if anybody wants to redirect at all.
-00:51:17.200 --> 00:51:19.359
-the second table is going to have all of
+00:40:37.160 --> 00:40:41.438
+Oh yep, this. So what you're looking at all uses
-00:51:19.359 --> 00:51:20.960
-these same tiles in it but
+00:40:41.439 --> 00:40:46.860
+progrmamatic SVG generation for question number four there,
-00:51:20.960 --> 00:51:22.800
-instead of path and stairs we're going
+00:40:46.860 --> 00:40:52.160
+have you played with generating SVGs programmatically in Emacs.
-00:51:22.800 --> 00:51:24.720
-to have other
+00:40:52.160 --> 00:40:58.160
+That is what the maps are doing in terms of
-00:51:24.720 --> 00:51:27.920
-columns can we
+00:40:58.160 --> 00:41:01.860
+being more explicit about that we started hand coding
-00:51:27.920 --> 00:51:31.680
-see the next table
+00:41:01.860 --> 00:41:05.650
+things and once we got the, the idea of what the code was
-00:51:31.680 --> 00:51:33.839
-there we go so the same tiles only here
+00:41:05.650 --> 00:41:10.160
+going to look like we switched to doing it programmatically.
-00:51:33.839 --> 00:51:35.359
-we've got overlay
+00:41:10.160 --> 00:41:13.330
+So, we were going to open up maybe now we've got time we
-00:51:35.359 --> 00:51:38.720
-documentation and behavior and I guess
+00:41:13.330 --> 00:41:16.910
+can get into the tileset real quick. Sure, we definitely
-00:51:38.720 --> 00:51:40.319
-we haven't talked about this at all the
+00:41:16.910 --> 00:41:19.820
+didn't do any of the pathing slides and so now we've
-00:51:40.319 --> 00:51:41.839
-behavior column
+00:41:19.820 --> 00:41:23.160
+skipped over some stuff we were going to present.
-00:51:41.839 --> 00:51:44.880
-was our concept of a way that we could
+00:41:23.160 --> 00:41:27.030
+Yeah, that's right we skipped a whole bunch of slides and I
-00:51:44.880 --> 00:51:47.520
-attach
+00:41:27.030 --> 00:41:31.160
+can certainly go back to them they're open here obviously.
-00:51:47.520 --> 00:51:49.680
-functions basically to these different
+00:41:31.160 --> 00:41:34.110
+I'm right I was just showing off the sketching tool,
-00:51:49.680 --> 00:51:51.359
-areas of the map
+00:41:34.110 --> 00:41:37.530
+briefly in that context but I think you're right, let's, we
-00:51:51.359 --> 00:51:54.720
-because sometimes when you enter an area
+00:41:37.530 --> 00:41:40.800
+can jump over to the actually I should finish with this now
-00:51:54.720 --> 00:51:57.760
-we want it to do something like
+00:41:40.800 --> 00:41:42.160
+having teased it.
-00:51:57.760 --> 00:51:59.920
-when you enter a stairs down maybe we
+00:41:42.160 --> 00:41:46.970
+So let's do the same thing here Ctrl H M, and you'll see in
-00:51:59.920 --> 00:52:02.319
-want it to change to the next level
+00:41:46.970 --> 00:41:52.160
+this case there are very few key bindings that are set up.
-00:52:02.319 --> 00:52:04.559
-and draw the stairs up behind you and
+00:41:52.160 --> 00:41:57.320
+This shift delete has a terror or shift with a control
-00:52:04.559 --> 00:52:06.160
-draw you where you are
+00:41:57.320 --> 00:42:01.920
+delete, it would seem to be. So that has a couple obvious
-00:52:06.160 --> 00:52:09.200
-on the next level so
+00:42:01.920 --> 00:42:06.590
+bugs with it right didn't pick it didn't pick up those
-00:52:09.200 --> 00:52:11.040
-these are like hooks where we could
+00:42:06.590 --> 00:42:12.160
+control points until I reuse them not clearing that stack.
-00:52:11.040 --> 00:52:12.240
-attach functions
+00:42:12.160 --> 00:42:16.720
+I think we can also should probably think about whether the
-00:52:12.240 --> 00:52:16.400
-or you know macros or whatever to
+00:42:16.720 --> 00:42:21.060
+origin should return and hey marking that origin would be
-00:52:16.400 --> 00:52:18.480
-make the map have these behaviors as we
+00:42:21.060 --> 00:42:25.370
+nice. So there's a tremendous amount to do here this is
-00:52:18.480 --> 00:52:23.440
-get further towards automation
+00:42:25.370 --> 00:42:30.090
+just showing that it is possible to use, essentially like a
-00:52:23.440 --> 00:52:26.559
-cool so that's that
+00:42:30.090 --> 00:42:31.160
+touch input to,
-00:52:26.559 --> 00:52:30.839
-should be pretty close to our time
+00:42:31.160 --> 00:42:40.730
+yeah, and then also we can switch over to our place tool,
-00:52:30.839 --> 00:52:33.920
-questions or just say goodbye
+00:42:40.730 --> 00:42:46.830
+and hopefully we can get a nice big menu of all the tiles that
-00:52:33.920 --> 00:52:36.880
-yeah so there's the I'm sorry we
+00:42:46.830 --> 00:42:50.160
+Erik prepared for the game maps.
-00:52:36.880 --> 00:52:38.559
-couldn't show it earlier there is the
+00:42:50.160 --> 00:42:55.160
+That was probably a terrible choice but there you have just
-00:52:38.559 --> 00:52:40.000
-battle board
+00:42:55.160 --> 00:42:57.160
+a bit of corridor right.
-00:52:40.000 --> 00:52:44.240
-and so this is used just to keep
+00:42:57.160 --> 00:43:01.160
+That looks.
-00:52:44.240 --> 00:52:48.079
-track of hit points so with this example
+00:43:01.160 --> 00:43:03.160
+And even the click.
-00:52:48.079 --> 00:52:49.319
-battle board
+00:43:03.160 --> 00:43:06.870
+Yep, and this click action here is the last thing I
-00:52:49.319 --> 00:52:51.680
-dmbattleboard.el there's there's a
+00:43:06.870 --> 00:43:10.510
+was working on before I dropped everything to build the
-00:52:51.680 --> 00:52:53.760
-complete example of not only
+00:43:10.510 --> 00:43:14.160
+decks that we will soon share for this conference.
-00:52:53.760 --> 00:52:57.200
-in a single file repub filling out the
+00:43:14.160 --> 00:43:20.160
+So okay, back to the tile sets.
-00:52:57.200 --> 00:53:00.480
-the cells and the tiles but then coming
+00:43:20.160 --> 00:43:24.130
+So the way we approached drawing it programmatically is we
-00:53:00.480 --> 00:53:00.960
-in
+00:43:24.130 --> 00:43:28.160
+broke our code up into little snippets we called tiles.
-00:53:00.960 --> 00:53:04.640
-and keeping the org mode file in sync
+00:43:28.160 --> 00:43:31.240
+And so this is where I was going to open up the tiles out
-00:53:04.640 --> 00:53:05.280
-with
+00:43:31.240 --> 00:43:34.610
+here, basically each tile has a name, and then with that
-00:53:05.280 --> 00:53:09.040
-with clicks so and I can press the star
+00:43:34.610 --> 00:43:38.160
+name we place data into different layers of the image.
-00:53:09.040 --> 00:53:12.319
-key and set my damage to -1 and
+00:43:38.160 --> 00:43:43.290
+Some of the layers are just SVG paths, and the data is just
-00:53:12.319 --> 00:53:15.359
-take the damage back off I just haven't
+00:43:43.290 --> 00:43:48.430
+SVG commands, like we saw in that handwritten code, and
-00:53:15.359 --> 00:53:16.400
-spent a lot of time
+00:43:48.430 --> 00:43:53.560
+some of it is compositions of other tiles, so a tile can be
-00:53:16.400 --> 00:53:18.079
-building up fancy bindings for this
+00:43:53.560 --> 00:43:56.160
+made up of other tiles.
-00:53:18.079 --> 00:53:20.800
-you'll also find that the crew
+00:43:56.160 --> 00:44:00.270
+Furthermore, some of these tiles have conditional code in
-00:53:20.800 --> 00:53:23.119
-probably find how I figure out what was
+00:44:00.270 --> 00:44:04.460
+it, where like some of this stuff is talking about elf and
-00:53:23.119 --> 00:53:23.839
-clicked on
+00:44:04.460 --> 00:44:05.160
+bang elf.
-00:53:23.839 --> 00:53:26.880
-in the code hard but if I just assign
+00:44:05.160 --> 00:44:09.540
+So the map is going to be drawn differently depending on
-00:53:26.880 --> 00:53:28.000
-something recognizable
+00:44:09.540 --> 00:44:13.160
+whether or not there's elves in the party.
-00:53:28.000 --> 00:53:33.520
-for damage and then come into
+00:44:13.160 --> 00:44:17.160
+So, and that's the demo they broke.
-00:53:33.520 --> 00:53:35.440
-it will now have opened the org mode
+00:44:17.160 --> 00:44:20.160
+So the engine has to make all those decisions.
-00:53:35.440 --> 00:53:37.040
-file behind the scenes because it's
+00:44:20.160 --> 00:44:22.887
+And that's what we're calling predicated drawing. Oh, there's
-00:53:37.040 --> 00:53:41.280
-changing it
+00:44:22.888 --> 00:44:26.810
+a special room here. Do you have any elves? You do. So I
-00:53:41.280 --> 00:53:44.640
-and we can then look at that file a
+00:44:26.810 --> 00:44:33.160
+draw it the "there is elves" way.
-00:53:44.640 --> 00:53:47.599
-little bit and hopefully
+00:44:33.160 --> 00:44:37.440
+Yeah, so we built up the set of tiles, and then we
-00:53:47.599 --> 00:53:51.040
-that is un
+00:44:37.440 --> 00:44:42.450
+basically made map files, which take our map and break it
-00:53:51.040 --> 00:53:53.440
-large enough you can kind of see
+00:44:42.450 --> 00:44:46.840
+up into XY grids, and then we drop these tiles into
-00:53:53.440 --> 00:53:55.520
-there's our 17 damage landed
+00:44:46.840 --> 00:44:49.160
+positions on the map.
-00:53:55.520 --> 00:53:59.119
-in armor the logic that sits behind that
+00:44:49.160 --> 00:44:52.060
+So we can use the same tile square after square after
-00:53:59.119 --> 00:54:01.200
-to figure out the part of the screen
+00:44:52.060 --> 00:44:55.470
+square. When there's a corridor north-south, it's the same
-00:54:01.200 --> 00:54:08.880
-is not necessarily our finest work
+00:44:55.470 --> 00:44:59.980
+tile over and over again. And that makes it easy to reuse
-00:54:08.880 --> 00:54:11.839
-but it but it does work and it's
+00:44:59.980 --> 00:45:01.160
+the code.
-00:54:11.839 --> 00:54:12.319
-one for
+00:45:01.160 --> 00:45:12.370
+And also, when we go to present the -- what am I trying to
-00:54:12.319 --> 00:54:14.000
-the stuff was used on the map a little
+00:45:12.370 --> 00:45:16.180
+say -- the drawing in fog of war mode, as we move down the
-00:54:14.000 --> 00:54:15.920
-bit too we didn't really need to show
+00:45:16.180 --> 00:45:20.280
+corridor, we can just add the necessary code one bit at a
-00:54:15.920 --> 00:54:17.520
-that in the demo but as you're scrolling
+00:45:20.280 --> 00:45:24.160
+time to the visible image, so that what we're displaying
-00:54:17.520 --> 00:54:19.680
-around there's like a highlighter
+00:45:24.160 --> 00:45:28.160
+doesn't contain any data except what the party has already
-00:54:19.680 --> 00:54:22.960
-that that you know we were drawing on
+00:45:28.160 --> 00:45:30.160
+discovered.
-00:54:22.960 --> 00:54:24.720
-shaft to show you which square you've
+00:45:30.160 --> 00:45:34.720
+And thus we have kind of spoiler-rich documents sitting on
-00:54:24.720 --> 00:54:26.160
-got selected
+00:45:34.720 --> 00:45:39.120
+the GM server, and then less -- and spoiler-free data that
-00:54:26.160 --> 00:54:28.800
-because we were having trouble with
+00:45:39.120 --> 00:45:43.160
+flows down to the org mode files on the player system.
-00:54:28.800 --> 00:54:29.839
-that code
+00:45:43.160 --> 00:45:47.660
+And the only real challenge is making sure that nothing
-00:54:29.839 --> 00:54:31.280
-initially and we were sometimes
+00:45:47.660 --> 00:45:52.230
+that the game does can mess with the users -- the players'
-00:54:31.280 --> 00:54:36.839
-revealing the wrong
+00:45:52.230 --> 00:45:56.610
+data file, in case they might have their own notes and
-00:54:36.839 --> 00:54:38.720
-okay
+00:45:56.610 --> 00:46:03.800
+things in it. That would be the one, you know, number one
-00:54:38.720 --> 00:54:40.480
-and I don't know how we're set for time
+00:46:03.800 --> 00:46:06.160
+thing to avoid.
-00:54:40.480 --> 00:54:42.160
-but I just saw a message
+00:46:06.160 --> 00:46:09.200
+Another thing we can talk about here is that there are
-00:54:42.160 --> 00:54:44.400
-from trixie that she could jump on if
+00:46:09.200 --> 00:46:12.350
+layers. You can see this table at the bottom has tile and
-00:54:44.400 --> 00:54:46.480
-we want her oh that would be amazing
+00:46:12.350 --> 00:46:16.860
+overlay. The overlay column is just going to contain some
-00:54:46.480 --> 00:54:47.920
-yeah go ahead and invite her in I'll
+00:46:16.860 --> 00:46:19.160
+actual SVG XML style tags.
-00:54:47.920 --> 00:54:51.680
-just cut to the scene as soon as she's
+00:46:19.160 --> 00:46:23.100
+So that's where we can add whatever text elements or other
-00:54:51.680 --> 00:54:56.160
-I in yeah so we're reaching the ask
+00:46:23.100 --> 00:46:27.120
+SVG, like raw SVG tags we want. Whereas a lot of the other
-00:54:56.160 --> 00:54:56.799
-me any
+00:46:27.120 --> 00:46:30.980
+layers are going to be like path layers, we've got water
-00:54:56.799 --> 00:54:58.960
-anything portion of the program here
+00:46:30.980 --> 00:46:33.160
+layers and beach layers.
-00:54:58.960 --> 00:55:01.200
-with what with what time we have left
+00:46:33.160 --> 00:46:36.370
+And our plan was to have a style sheet that defines how
-00:55:01.200 --> 00:55:02.559
-for your questions
+00:46:36.370 --> 00:46:39.790
+each of those layers are represented. So like when the
-00:55:02.559 --> 00:55:05.200
-please correct me if we're still like
+00:46:39.790 --> 00:46:43.140
+water gets drawn blue and it's got arrows on it giving it
-00:55:05.200 --> 00:55:06.160
-10 minutes
+00:46:43.140 --> 00:46:47.140
+direction, all of that can be customized with a style sheet
-00:55:06.160 --> 00:55:08.799
-you know if we're if we're more than
+00:46:47.140 --> 00:46:50.160
+to change the water to be whatever you want.
-00:55:08.799 --> 00:55:10.000
-like
+00:46:50.160 --> 00:46:53.430
+And like we have beaches as yellow, but maybe you like
-00:55:10.000 --> 00:55:12.640
-15 to 20 minutes from our time but I I
+00:46:53.430 --> 00:46:56.160
+beaches as red or, you know, whatever.
-00:55:12.640 --> 00:55:13.760
-suspect we've less weight
+00:46:56.160 --> 00:47:03.570
+So we also built some test programs and various -- I'm not
-00:55:13.760 --> 00:55:16.640
-left way less than that and out of
+00:47:03.570 --> 00:47:05.900
+sure what kind of shape we're going to find these in, but
-00:55:16.640 --> 00:55:17.440
-respect for
+00:47:05.900 --> 00:47:07.160
+we can try running them.
-00:55:17.440 --> 00:55:24.319
-all the other presenters
+00:47:07.160 --> 00:47:13.950
+Here, for example, is just a very basic -- using the same
-00:55:24.319 --> 00:55:28.720
-oh I don't want to close that actually
+00:47:13.950 --> 00:47:21.160
+file to define the tiles and then the layout, so to speak.
-00:55:28.720 --> 00:55:30.640
-I think I may have found an old version
+00:47:21.160 --> 00:47:25.160
+Oh, look at that.
-00:55:30.640 --> 00:55:32.839
-of my slides that could have some good
+00:47:25.160 --> 00:47:29.160
+There's the layout. Okay, so that actually looks fine. Tile.
-00:55:32.839 --> 00:55:35.200
-stuff
+00:47:29.160 --> 00:47:33.430
+And it's path. So this is defining a tile named "seas" and
-00:55:35.200 --> 00:55:36.799
-it's been an event for a couple of weeks
+00:47:33.430 --> 00:47:37.160
+it's going to have a list of tiles defined above.
-00:55:36.799 --> 00:55:38.799
-here I had a break in and
+00:47:37.160 --> 00:47:41.120
+And you'll notice also that we can just sort of freely
-00:55:38.799 --> 00:55:41.359
-my somebody got into our bank accounts
+00:47:41.120 --> 00:47:44.750
+define and redefine and it sort of figures out, oh, this
-00:55:41.359 --> 00:55:43.599
-and
+00:47:44.750 --> 00:47:47.160
+must still be part of the B row.
-00:55:43.599 --> 00:55:46.880
-nasty business just a lot going on over
+00:47:47.160 --> 00:48:00.160
+We could also have done this.
-00:55:46.880 --> 00:55:50.720
-over this whole year I think
+00:48:00.160 --> 00:48:08.160
+Okay, so this would work as would this.
-00:55:50.720 --> 00:55:53.040
-do we have more questions to shag or
+00:48:08.160 --> 00:48:11.930
+>> Early on in development when we were talking about
-00:55:53.040 --> 00:55:53.839
-where
+00:48:11.930 --> 00:48:16.520
+getting data in and out of these org tables, it was kind of
-00:55:53.839 --> 00:55:56.960
-sure so I think
+00:48:16.520 --> 00:48:22.160
+a priority to us to leave the way the data is organized
-00:55:56.960 --> 00:55:58.799
-there was at least one we deferred a
+00:48:22.160 --> 00:48:25.160
+open to the users and to the dungeon masters.
-00:55:58.799 --> 00:56:01.040
-little bit what the game
+00:48:25.160 --> 00:48:30.860
+So while we set our tile set apart from our map sets, this
-00:56:01.040 --> 00:56:05.040
-is
+00:48:30.860 --> 00:48:36.430
+clearly shows that you can cram a tile set and a map into a
-00:56:05.040 --> 00:56:06.799
-always eight characters that can be
+00:48:36.430 --> 00:48:38.160
+single file.
-00:56:06.799 --> 00:56:08.400
-divided right that's so always eight
+00:48:38.160 --> 00:48:41.170
+So in situations like the surface where we're using
-00:56:08.400 --> 00:56:10.000
-characters that can be divided between
+00:48:41.170 --> 00:48:44.610
+different tiles from other maps, maybe it makes sense to
-00:56:10.000 --> 00:56:12.160
-the party is the classic formula
+00:48:44.610 --> 00:48:47.890
+move, you know, those tiles just into the file with your
-00:56:12.160 --> 00:56:14.319
-it actually works pretty well for a
+00:48:47.890 --> 00:48:49.160
+map.
-00:56:14.319 --> 00:56:16.240
-conversational group remember that
+00:48:49.160 --> 00:48:51.880
+But we also wanted to make sure, like, it's hard for us to
-00:56:16.240 --> 00:56:17.760
-role-playing games are about talking to
+00:48:51.880 --> 00:48:54.640
+predict how other people are going to want to use this when
-00:56:17.760 --> 00:56:18.480
-each other
+00:48:54.640 --> 00:48:56.160
+they design their games.
-00:56:18.480 --> 00:56:20.000
-and being good at them is about taking
+00:48:56.160 --> 00:49:00.780
+So we wanted to leave it as versatile as possible about how
-00:56:20.000 --> 00:56:22.079
-excellent notes so
+00:49:00.780 --> 00:49:02.160
+you can use it.
-00:56:22.079 --> 00:56:23.200
-when you're sitting around with a group
+00:49:02.160 --> 00:49:04.810
+>> Where it matters, right? Not support every feature in
-00:56:23.200 --> 00:56:24.559
-of people and you're going to have to
+00:49:04.810 --> 00:49:05.160
+the world.
-00:56:24.559 --> 00:56:25.920
-wait for them while they dig through
+00:49:05.160 --> 00:49:08.560
+I can't count the number of times I said, Erik, Erik, Erik,
-00:56:25.920 --> 00:56:26.880
-their notes
+00:49:08.560 --> 00:49:12.000
+hey, if we do it like this, people will be -- and he just,
-00:56:26.880 --> 00:56:28.720
-and listen to all of the things they
+00:49:12.000 --> 00:49:14.160
+like, does it have to do that?
-00:56:28.720 --> 00:56:30.319
-find interesting to say
+00:49:14.160 --> 00:49:19.090
+Like, do we need it right away? Do you have to really
-00:56:30.319 --> 00:56:32.240
-and try to reach an imaginative place
+00:49:19.090 --> 00:49:21.160
+rewrite everything so it can all do that?
-00:56:32.240 --> 00:56:34.160
-that you can stay together
+00:49:21.160 --> 00:49:26.160
+And a lot of those conversations, too.
-00:56:34.160 --> 00:56:36.160
-while you're doing all that and working
+00:49:26.160 --> 00:49:30.160
+But the key flexibilities are really there.
-00:56:36.160 --> 00:56:38.319
-in dice and remembering the rules
+00:49:30.160 --> 00:49:32.160
+People might want to use a lot of different files.
-00:56:38.319 --> 00:56:40.880
-it's actually a complicated activity I
+00:49:32.160 --> 00:49:34.160
+They might want to lay the tables out however they want.
-00:56:40.880 --> 00:56:43.200
-liken it more to a bridge game
+00:49:34.160 --> 00:49:37.590
+They have to be able to say, hey, this is a table that has
-00:56:43.200 --> 00:56:46.240
-than to like
+00:49:37.590 --> 00:49:40.950
+data that's controlled by the game, and everything else in
-00:56:46.240 --> 00:56:48.960
-you know parcheesi or perhaps even like
+00:49:40.950 --> 00:49:43.160
+the file is not the game's problem.
-00:56:48.960 --> 00:56:51.359
-risk or access and allies or other games
+00:49:43.160 --> 00:49:45.980
+>> And our table, some of our tables started getting really
-00:56:51.359 --> 00:56:52.160
-that
+00:49:45.980 --> 00:49:48.160
+wide, so we started striping the tables.
-00:56:52.160 --> 00:56:54.319
-have have definitely the strategy to
+00:49:48.160 --> 00:49:52.140
+We'll repeat the same table over and over and over again to
-00:56:54.319 --> 00:56:56.160
-them but
+00:49:52.140 --> 00:49:56.180
+get all of the columns in there without making it, you know,
-00:56:56.160 --> 00:57:00.160
-I don't Erik your thoughts
+00:49:56.180 --> 00:49:58.160
+a million miles wide.
-00:57:00.160 --> 00:57:03.920
-yeah I mean I think that's fair
+00:49:58.160 --> 00:49:59.160
+>> Yeah.
-00:57:03.920 --> 00:57:06.640
-you know yes definitely the the
+00:49:59.160 --> 00:50:02.450
+Do you want to -- should I go ahead and pull open, like, a
-00:57:06.640 --> 00:57:08.160
-tradition is to always have eight
+00:50:02.450 --> 00:50:04.160
+level here, do you think?
-00:57:08.160 --> 00:57:09.440
-characters in the party
+00:50:04.160 --> 00:50:05.160
+>> Sure.
-00:57:09.440 --> 00:57:12.079
-and you know one of the great things
+00:50:05.160 --> 00:50:06.160
+>> Just to have shown it.
-00:57:12.079 --> 00:57:13.760
-about Dungeon is that everybody who
+00:50:06.160 --> 00:50:08.750
+>> The file set's a great example of striped tables if you
-00:57:13.760 --> 00:57:15.200
-writes their own Dungeon
+00:50:08.750 --> 00:50:11.160
+look down, like, in the level change feature.
-00:57:15.200 --> 00:57:18.000
-gets to write their own rules and is
+00:50:11.160 --> 00:50:18.160
+>> Oh, sure.
-00:57:18.000 --> 00:57:19.440
-free to change whatever
+00:50:18.160 --> 00:50:21.160
+>> Sorry, I'm not quite sitting well to my keyboard here.
-00:57:19.440 --> 00:57:21.760
-you want and that being said I've
+00:50:21.160 --> 00:50:30.160
+I can just readjust things real quick.
-00:57:21.760 --> 00:57:22.720
-certainly seen
+00:50:30.160 --> 00:50:33.920
+So what, you know, you can see here, like, some of these
-00:57:22.720 --> 00:57:25.839
-people try to take on challenging that
+00:50:33.920 --> 00:50:38.160
+tables got real wide when we're stuffing SVG tags into them.
-00:57:25.839 --> 00:57:28.079
-always eight characters in a party
+00:50:38.160 --> 00:50:44.160
+And what we -- oh, maybe it's not in these.
-00:57:28.079 --> 00:57:30.640
-thing I've seen people take
+00:50:44.160 --> 00:50:50.160
+I thought it was.
-00:57:30.640 --> 00:57:32.640
-approaches like every player gets two
+00:50:50.160 --> 00:50:51.160
+It's special, probably.
-00:57:32.640 --> 00:57:34.640
-characters and then you can have a party
+00:50:51.160 --> 00:50:52.160
+>> Yeah.
-00:57:34.640 --> 00:57:36.319
-ranging from two to ten
+00:50:52.160 --> 00:50:54.160
+No, there it is, yeah.
-00:57:36.319 --> 00:57:38.079
-or there's always going to be ten or
+00:50:54.160 --> 00:50:55.160
+It was in level change.
-00:57:38.079 --> 00:57:40.000
-there's you know this or that or people
+00:50:55.160 --> 00:50:57.160
+It does the table key repeat.
-00:57:40.000 --> 00:57:43.200
-have tried stuff and none of it has
+00:50:57.160 --> 00:50:58.160
+>> Okay, great.
-00:57:43.200 --> 00:57:45.280
-really worked out very satisfactorily we
+00:50:58.160 --> 00:50:59.720
+>> You were just scrolling up and down so fast I didn't
-00:57:45.280 --> 00:57:45.839
-always
+00:50:59.720 --> 00:51:00.160
+realize.
-00:57:45.839 --> 00:57:48.319
-seem to keep coming back to our party
+00:51:00.160 --> 00:51:04.270
+So this first table, we've got path and what is that,
-00:57:48.319 --> 00:57:49.680
-of eight
+00:51:04.270 --> 00:51:05.160
+stairs?
-00:57:49.680 --> 00:57:54.160
-yeah it's I I I I it's one of the things
+00:51:05.160 --> 00:51:09.010
+So the stairs level is one that draws in, like, a pink
-00:57:54.160 --> 00:57:55.839
-Dungeon that you can't change when you
+00:51:09.010 --> 00:51:13.160
+color to highlight places where you can change level.
-00:57:55.839 --> 00:57:57.359
-write your own Dungeon
+00:51:13.160 --> 00:51:16.120
+And then if we scroll down to the second half of this
-00:57:57.359 --> 00:57:58.720
-and that's the reason it's so
+00:51:16.120 --> 00:51:19.380
+section, the second table is going to have all of these
-00:57:58.720 --> 00:58:00.960
-complicated as a as a software
+00:51:19.380 --> 00:51:24.000
+same tiles in it, but instead of path and stairs, we're
-00:58:00.960 --> 00:58:03.119
-project why it's taken us decades
+00:51:24.000 --> 00:51:27.160
+going to have other columns.
-00:58:03.119 --> 00:58:04.559
-because
+00:51:27.160 --> 00:51:31.160
+Can we see the next table?
-00:58:04.559 --> 00:58:08.000
-trying to model the data for example or
+00:51:31.160 --> 00:51:32.160
+There we go.
-00:58:08.000 --> 00:58:11.280
-really any attempt to
+00:51:32.160 --> 00:51:35.610
+So the same tiles, only here we've got overlay,
-00:58:11.280 --> 00:58:14.160
-quantify it in specific terms always
+00:51:35.610 --> 00:51:38.160
+documentation, and behavior.
-00:58:14.160 --> 00:58:15.680
-falls to examples
+00:51:38.160 --> 00:51:40.160
+And I guess we haven't talked about this at all.
-00:58:15.680 --> 00:58:18.880
-well you know Dungeons usually have
+00:51:40.160 --> 00:51:44.920
+The behavior column was our concept of a way that we could
-00:58:18.880 --> 00:58:22.079
-elves dwarves and humans they have
+00:51:44.920 --> 00:51:50.100
+attach functions, basically, to these different areas of
-00:58:22.079 --> 00:58:25.280
-priests wizards and warriors they
+00:51:50.100 --> 00:51:51.160
+the map.
-00:58:25.280 --> 00:58:27.599
-have eight characters in the party
+00:51:51.160 --> 00:51:55.920
+Because sometimes when you enter an area, we want it to do
-00:58:27.599 --> 00:58:30.000
-the bell rocks are particularly nasty
+00:51:55.920 --> 00:51:57.160
+something.
-00:58:30.000 --> 00:58:31.680
-and live in a room of some
+00:51:57.160 --> 00:52:00.880
+Like when you enter a stairs down, maybe we want it to
-00:58:31.680 --> 00:58:35.119
-specific shape spoilers
+00:52:00.880 --> 00:52:04.850
+change to the next level and draw the stairs up behind you
-00:58:35.119 --> 00:58:38.319
-right and we don't tell you the rules
+00:52:04.850 --> 00:52:08.160
+and draw you where you are on the next level.
-00:58:38.319 --> 00:58:39.520
-and that's what you know
+00:52:08.160 --> 00:52:13.470
+So these are like hooks where we could attach functions or,
-00:58:39.520 --> 00:58:40.960
-and you sit down at the table and you
+00:52:13.470 --> 00:52:18.390
+you know, macros or whatever to make the map have these
-00:58:40.960 --> 00:58:42.640
-say what's your character name and
+00:52:18.390 --> 00:52:23.160
+behaviors as we get further towards automation.
-00:58:42.640 --> 00:58:44.480
-what's your special power
+00:52:23.160 --> 00:52:25.160
+Cool.
-00:58:44.480 --> 00:58:48.400
-and and then I say I
+00:52:25.160 --> 00:52:31.160
+So that's that should be pretty close to our time.
-00:58:48.400 --> 00:58:51.599
-I I'm zelda and
+00:52:31.160 --> 00:52:34.160
+Questions or just say goodbye.
-00:58:51.599 --> 00:58:53.839
-I I have this bridge that I can put down
+00:52:34.160 --> 00:52:38.160
+Yeah, so there's the I'm sorry we couldn't show it earlier.
-00:58:53.839 --> 00:58:56.000
-that always gets me across the river
+00:52:38.160 --> 00:52:41.160
+There is the battle board.
-00:58:56.000 --> 00:58:59.040
-so let's touch on special power real
+00:52:41.160 --> 00:52:46.160
+And so this is used just to keep track of hit points.
-00:58:59.040 --> 00:58:59.359
-quick
+00:52:46.160 --> 00:52:50.540
+So with this example, battle board, dm battle board.el,
-00:58:59.359 --> 00:59:01.119
-since that's one of the things that is
+00:52:50.540 --> 00:52:54.590
+there's there's a complete example of not only in a single
-00:59:01.119 --> 00:59:03.280
-kind of unique to Dungeon
+00:52:54.590 --> 00:52:58.430
+file reaper, we filling out the tell the cells and the
-00:59:03.280 --> 00:59:06.160
-and one of the things that is the
+00:52:58.430 --> 00:53:03.720
+tiles, but then coming in and keeping the org mode file in
-00:59:06.160 --> 00:59:06.720
-biggest
+00:53:03.720 --> 00:53:06.160
+sync with with clicks.
-00:59:06.720 --> 00:59:08.960
-challenge to us in trying to code a
+00:53:06.160 --> 00:53:11.040
+So, and I can press the star key and set my damage to minus
-00:59:08.960 --> 00:59:10.240
-system like this for
+00:53:11.040 --> 00:53:14.160
+one and take the damage back off.
-00:59:10.240 --> 00:59:13.200
-automated play and that's that every
+00:53:14.160 --> 00:53:17.770
+I just haven't spent a lot of time building up fancy bind
-00:59:13.200 --> 00:59:14.319
-character gets a
+00:53:17.770 --> 00:53:21.620
+ings for this, you'll also find that the crew probably find
-00:59:14.319 --> 00:59:17.119
-unique special power and traditionally
+00:53:21.620 --> 00:53:25.270
+how I figure out what was clicked on in the code hard, but
-00:59:17.119 --> 00:59:18.000
-you negotiate
+00:53:25.270 --> 00:53:30.010
+if I just assign something recognizable for damage, and
-00:59:18.000 --> 00:59:19.520
-your special power with the Dungeon
+00:53:30.010 --> 00:53:33.160
+then come into.
-00:59:19.520 --> 00:59:21.839
-master when you create your character
+00:53:33.160 --> 00:53:39.030
+It will now have opened the org mode file behind the scenes
-00:59:21.839 --> 00:59:24.079
-and occasionally throughout the course
+00:53:39.030 --> 00:53:41.160
+because it's changing it.
-00:59:24.079 --> 00:59:25.839
-of the character's life their special
+00:53:41.160 --> 00:53:48.340
+And we can then look at that file a little bit and
-00:59:25.839 --> 00:59:27.359
-power might change
+00:53:48.340 --> 00:53:54.130
+hopefully that is on large enough you can kind of see there
-00:59:27.359 --> 00:59:29.920
-due to game circumstances usually it
+00:53:54.130 --> 00:53:57.160
+'s our 17 damage landed in armor.
-00:59:29.920 --> 00:59:33.280
-improves but sometimes not
+00:53:57.160 --> 00:54:04.200
+The logic that sits behind that to figure out the part of
-00:59:33.280 --> 00:59:34.960
-and that's those are the most fun
+00:54:04.200 --> 00:54:10.160
+the screen is not necessarily our finest work.
-00:59:34.960 --> 00:59:36.960
-conversations right sometimes we have
+00:54:10.160 --> 00:54:12.960
+But it does work and that's one kind of stuff was used on
-00:59:36.960 --> 00:59:39.440
-fun gaming sessions where we barely get
+00:54:12.960 --> 00:54:16.030
+the map a little bit too. We didn't really get to show that
-00:59:39.440 --> 00:59:41.760
-all the characters created and started
+00:54:16.030 --> 00:54:18.970
+in the demo but as you're scrolling around there's like a
-00:59:41.760 --> 00:59:43.680
-because we get off into arguing about
+00:54:18.970 --> 00:54:22.160
+highlighter that that, you know, we were drawing on.
-00:59:43.680 --> 00:59:45.440
-the special powers no zelda special
+00:54:22.160 --> 00:54:26.160
+Oh sure, show you which square you've got selected.
-00:59:45.440 --> 00:59:48.319
-powers obviously the candle come on
+00:54:26.160 --> 00:54:30.300
+We were having trouble with that code. Initially, and we
-00:59:48.319 --> 00:59:53.359
-also that was link not zelda
+00:54:30.300 --> 00:54:33.160
+were sometimes revealing the wrong.
-00:59:53.359 --> 00:59:56.240
-I still have my t-shirt hey there she is
+00:54:33.160 --> 00:54:38.160
+Okay.
-00:59:56.240 --> 01:00:01.440
-let's cut scene
+00:54:38.160 --> 00:54:41.320
+And I don't know how we're set for time but I just saw a
-01:00:01.440 --> 01:00:05.839
-you get video fun filters today because
+00:54:41.320 --> 00:54:45.240
+message from Trixie that she could jump on if we want her.
-01:00:05.839 --> 01:00:07.359
-that's what we got going on over here
+00:54:45.240 --> 00:54:48.290
+Oh, that would be amazing. Yeah, go ahead and invite her in
-01:00:07.359 --> 01:00:08.799
-today all right I'm going to recut
+00:54:48.290 --> 00:54:51.160
+I'll just cut to the scene as soon as she's in.
-01:00:08.799 --> 01:00:18.079
-everybody hang on tight
+00:54:51.160 --> 00:54:54.160
+I think.
-01:00:18.079 --> 01:00:20.799
-all right there's Erik this is going to be
+00:54:54.160 --> 00:54:58.080
+Yeah, so we're reaching the ask me anything portion of the
-01:00:20.799 --> 01:00:23.200
-Erik for a second hope
+00:54:58.080 --> 00:55:01.760
+program here with what, with what time we have left for
-01:00:23.200 --> 01:00:25.200
-no worries. welcome to the welcome to
+00:55:01.760 --> 00:55:03.160
+your questions.
-01:00:25.200 --> 01:00:27.440
-the stream trixie horror
+00:55:03.160 --> 00:55:09.170
+Please correct me if we're still like 10 minutes, you know,
-01:00:27.440 --> 01:00:30.960
-who is
+00:55:09.170 --> 00:55:15.450
+if we're, if we're more than like 15 to 20 minutes from our
-01:00:30.960 --> 01:00:32.720
-one of our project team members
+00:55:15.450 --> 00:55:20.560
+time but I suspect we've left way left way less than that
-01:00:32.720 --> 01:00:34.559
-somebody who's learning Emacs as part of
+00:55:20.560 --> 00:55:25.160
+and out of respect for all the other presenters.
-01:00:34.559 --> 01:00:35.440
-the project
+00:55:25.160 --> 00:55:29.160
+I don't want to close that actually.
-01:00:35.440 --> 01:00:38.480
-and yeah I
+00:55:29.160 --> 00:55:33.060
+I think I may have found an old version of my slides that
-01:00:38.480 --> 01:00:40.720
-I I particularly wanted to invite you on
+00:55:33.060 --> 00:55:35.160
+can have some good stuff.
-01:00:40.720 --> 01:00:42.160
-to talk about your experience learning
+00:55:35.160 --> 00:55:40.220
+It's been an event for a couple of weeks here I had a break
-01:00:42.160 --> 01:00:42.640
-Emacs
+00:55:40.220 --> 00:55:45.190
+in and my somebody got into our bank accounts and nasty
-01:00:42.640 --> 01:00:44.640
-I think you have run into places
+00:55:45.190 --> 00:55:51.160
+business, just a lot going on over, over this whole year I think.
-01:00:44.640 --> 01:00:46.799
-where it's a pain in the butt to learn Emacs
+00:55:51.160 --> 00:55:54.160
+Any more questions to share.
-01:00:46.799 --> 01:00:47.839
-and that this is a safe
+00:55:54.160 --> 00:56:02.240
+Sure. So, I think there was at least one we deferred a
-01:00:47.839 --> 01:00:56.000
-space to talk about that
+00:56:02.240 --> 00:56:06.160
+little bit with the game is
-01:00:56.000 --> 01:01:00.640
-TRIXIE: I'll jump into that by saying the Emacs cheat sheet,
+00:56:06.160 --> 00:56:08.990
+always eight characters that can be divided right that's so
-01:01:00.640 --> 01:01:03.680
-I think it's the one that GNU puts out,
+00:56:08.990 --> 00:56:11.660
+always eight characters that can be divided between the
-01:01:03.680 --> 01:01:06.559
-is a lifesaver.
+00:56:11.660 --> 00:56:14.540
+party is the classic formula, it actually works pretty well
-01:01:06.559 --> 01:01:09.440
-A little bit of a vocabulary disconnect.
+00:56:14.540 --> 00:56:16.160
+for a conversational group.
-01:01:09.440 --> 01:01:13.359
-This actually kind of comes up a lot
+00:56:16.160 --> 00:56:18.810
+I think the idea that role playing games are about talking
-01:01:13.359 --> 01:01:15.200
-in conversation with Corwin and Erik and
+00:56:18.810 --> 00:56:21.330
+to each other and being good at them is about taking
-01:01:15.200 --> 01:01:18.000
-I but copy paste versus
+00:56:21.330 --> 00:56:23.770
+excellent notes. So, when you're sitting around with a
-01:01:18.000 --> 01:01:21.920
-what yank and w
+00:56:23.770 --> 00:56:26.070
+group of people and you're going to have to wait for them
-01:01:21.920 --> 01:01:27.920
-whatever w
+00:56:26.070 --> 00:56:29.410
+while they dig through their notes and listen to all of the
-01:01:27.920 --> 01:01:30.000
-why would you even do that to us right
+00:56:29.410 --> 00:56:33.160
+things they find interesting to say, and try to reach an
-01:01:30.000 --> 01:01:31.200
-where where were you
+00:56:33.160 --> 00:56:35.160
+imaginative place that you can stay together.
-01:01:31.200 --> 01:01:33.359
-when zero's park happened no I I
+00:56:35.160 --> 00:56:38.800
+And when you're doing all that and working in dice and
-01:01:33.359 --> 01:01:38.480
-understand that makes sense what else
+00:56:38.800 --> 00:56:43.250
+remembering the rules. It's actually a complicated activity,
-01:01:38.480 --> 01:01:39.520
-I mean you don't have to sit here and
+00:56:43.250 --> 00:56:47.340
+I liken it more to a bridge game, then to like, you know,
-01:01:39.520 --> 01:01:41.440
-rag on Emacs but we're here for that
+00:56:47.340 --> 00:56:51.310
+part cheesy or perhaps even like risk or access and allies
-01:01:41.440 --> 01:01:43.119
-that's all I'm saying
+00:56:51.310 --> 00:56:55.620
+or other games that have have definitely the strategy to
-01:01:43.119 --> 01:01:46.799
-TRIXIE: No, I'm like that's been the biggest thing.
+00:56:55.620 --> 00:56:57.160
+them but I don't.
-01:01:46.799 --> 01:01:52.799
-I'm used to the very binary nature, like, nope that didn't work.
+00:56:57.160 --> 00:57:01.160
+Erik, your thoughts.
-01:01:52.799 --> 01:01:53.839
-Try something else.
+00:57:02.160 --> 00:57:05.160
+I think that's fair.
-01:01:53.839 --> 01:01:59.200
-So as long as you're willing to try other stuff,
+00:57:05.160 --> 00:57:08.880
+You know yes definitely. The, the tradition is to always
-01:01:59.200 --> 01:02:02.880
-Emacs will be fine.
+00:57:08.880 --> 00:57:12.600
+have eight characters in the party, and, you know, one of
-01:02:02.880 --> 01:02:06.559
-it's a tough cookie I can take it
+00:57:12.600 --> 00:57:16.320
+the great things about dungeon is that everybody who writes
-01:02:06.559 --> 01:02:08.960
-worst thing that happens is you have to
+00:57:16.320 --> 00:57:19.730
+their own dungeon gets to write their own rules, and is
-01:02:08.960 --> 01:02:11.119
-really install it
+00:57:19.730 --> 00:57:22.160
+free to change whatever you want.
-01:02:11.119 --> 01:02:13.520
-throw your ignite file that you
+00:57:22.160 --> 00:57:26.700
+I've definitely seen people try to take on challenging that
-01:02:13.520 --> 01:02:19.920
-hopefully have a backup of
+00:57:26.700 --> 00:57:30.160
+always eight characters in a party thing.
-01:02:19.920 --> 01:02:21.520
-all right fine
+00:57:30.160 --> 00:57:33.460
+I've seen people take approaches like every player gets two
-01:02:21.520 --> 01:02:24.640
-ERIK: Are there more questions in the hopper?
+00:57:33.460 --> 00:57:36.570
+characters and then you can have a party ranging from two
-01:02:24.640 --> 01:02:26.480
-yeah if anybody does have any questions
+00:57:36.570 --> 00:57:40.130
+to 10, or there's always going to be 10 or there's, you
-01:02:26.480 --> 01:02:27.680
-up there
+00:57:40.130 --> 00:57:43.340
+know, this or that or people have tried stuff, and none of
-01:02:27.680 --> 01:02:29.839
-for hope for Erik or I so just to
+00:57:43.340 --> 00:57:47.170
+it has really worked out very satisfactorily we always seem
-01:02:29.839 --> 01:02:32.000
-summarize I've known Erik
+00:57:47.170 --> 00:57:50.160
+to keep coming back to our party of eight.
-01:02:32.000 --> 01:02:34.240
-I've known Erik my whole life I've known
+00:57:50.160 --> 00:57:55.710
+It's, it's one of the things that dungeon that you can't
-01:02:34.240 --> 01:02:36.160
-hope around a decade we
+00:57:55.710 --> 00:57:59.290
+change when you write your own dungeon. And that's the
-01:02:36.160 --> 01:02:39.599
-worked together on a project for
+00:57:59.290 --> 00:58:03.900
+reason it's so complicated as a, as a software project why
-01:02:39.599 --> 01:02:44.559
-for a science fiction convention yeah
+00:58:03.900 --> 00:58:08.640
+it's taken us decades, because trying to model the data for
-01:02:44.559 --> 01:02:46.880
-we got conventions and then I also
+00:58:08.640 --> 00:58:13.820
+example or really any attempt, quantify it in specific
-01:02:46.880 --> 01:02:48.960
-helped with I just wrote a bio
+00:58:13.820 --> 00:58:16.160
+terms always falls to examples.
-01:02:48.960 --> 01:02:50.799
-so this should like all theoretically be
+00:58:16.160 --> 00:58:20.740
+You know dungeons usually have elves, elves, dwarves and
-01:02:50.799 --> 01:02:53.599
-in my head right
+00:58:20.740 --> 00:58:25.160
+humans. They have priests, wizards and warriors.
-01:02:53.599 --> 01:02:58.079
-I want I refer to my own bio
+00:58:25.160 --> 00:58:29.330
+They have eight characters in the party. The Balrogs are
-01:02:58.079 --> 01:03:00.160
-I'm the project coordinator for Dungeon
+00:58:29.330 --> 00:58:34.160
+particularly nasty and live in a room of some specific shape.
-01:03:00.160 --> 01:03:10.799
-mode
+00:58:34.160 --> 00:58:57.160
+And they have spoilers.
-01:03:10.799 --> 01:03:14.000
-that's nice
+00:58:57.160 --> 00:59:00.900
+So let's touch on special power real quick since that's one
-01:03:14.000 --> 01:03:16.400
-we've gotten a ton of support from a lot
+00:59:00.900 --> 00:59:04.820
+of the things that is kind of unique to dungeon. And one of
-01:03:16.400 --> 01:03:18.000
-of our lifelong friends people
+00:59:04.820 --> 00:59:08.710
+the things that is the biggest challenge to us and trying
-01:03:18.000 --> 01:03:20.480
-and also people that we just met maybe
+00:59:08.710 --> 00:59:12.160
+to code a system like this for automated play.
-01:03:20.480 --> 01:03:22.319
-that's a that's a great segue
+00:59:12.160 --> 00:59:15.680
+And that's that every character gets a unique special power
-01:03:22.319 --> 01:03:25.039
-do throw your questions in there I'm
+00:59:15.680 --> 00:59:19.300
+and traditionally you negotiate your special power with the
-01:03:25.039 --> 01:03:26.400
-going to fill for just a second and then
+00:59:19.300 --> 00:59:22.600
+dungeon master when you create your character, and
-01:03:26.400 --> 01:03:27.839
-we'll probably cut away
+00:59:22.600 --> 00:59:25.970
+occasionally throughout the course of the characters life
-01:03:27.839 --> 01:03:32.319
-but
+00:59:25.970 --> 00:59:29.160
+their special power might change due to game circumstances,
-01:03:32.319 --> 01:03:34.960
-I mean thematically actually that's
+00:59:29.160 --> 00:59:34.160
+usually it improves but sometimes not.
-01:03:34.960 --> 01:03:36.319
-that's too abrupt so we need to go
+00:59:34.160 --> 00:59:37.180
+So those are the most fun conversations right sometimes we
-01:03:36.319 --> 01:03:37.200
-around the room
+00:59:37.180 --> 00:59:39.820
+have fun gaming sessions where we barely get all the
-01:03:37.200 --> 01:03:39.119
-Erik you had hours and hours to rehearse
+00:59:39.820 --> 00:59:42.800
+characters created and started, because we get off into
-01:03:39.119 --> 01:03:40.720
-hope kind of jumped in on the last
+00:59:42.800 --> 00:59:45.780
+arguing about the special powers no Zelda special powers
-01:03:40.720 --> 01:03:41.359
-minute
+00:59:45.780 --> 00:59:49.160
+obviously the candle Come on.
-01:03:41.359 --> 01:03:43.520
-so let's let's is it okay to pick on you
+00:59:49.160 --> 00:59:54.160
+Also that was like, not so.
-01:03:43.520 --> 01:03:46.319
-or do you want me to give mine
+00:59:54.160 --> 01:00:02.160
+I still have my t shirt. Hey, there she is. Let's cut scene.
-01:03:46.319 --> 01:03:48.880
-to what are you asking me to do what
+01:00:02.160 --> 01:00:05.890
+I'm going to be working with fun filters today, because
-01:03:48.880 --> 01:03:50.000
-do you what do you want people to take
+01:00:05.890 --> 01:00:12.250
+that's what we got going on over here. All right, I'm going
-01:03:50.000 --> 01:03:51.359
-away from this talk
+01:00:12.250 --> 01:00:19.160
+to recut everybody hang on tight.
-01:03:51.359 --> 01:03:54.240
-you know as we think about Dungeon and
+01:00:19.160 --> 01:00:21.160
+All right, there's Erik.
-01:03:54.240 --> 01:03:55.280
-sharing it's
+01:00:21.160 --> 01:00:24.160
+This is going to be Erik for a second home.
-01:03:55.280 --> 01:03:57.520
-sharing its tradition as we think about
+01:00:24.160 --> 01:00:27.680
+No worries. And welcome to that welcome to the stream. Trix
-01:03:57.520 --> 01:03:58.799
-learning Emacs
+01:00:27.680 --> 01:00:29.160
+ie horror.
-01:03:58.799 --> 01:04:02.799
-and like making that awesome
+01:00:29.160 --> 01:00:33.410
+Who is one of our project team members somebody who's
-01:04:02.799 --> 01:04:04.880
-and just you know generally what's up
+01:00:33.410 --> 01:00:37.160
+learning Emacs as part of the project, and.
-01:04:04.880 --> 01:04:07.599
-with free software and trying to make
+01:00:37.160 --> 01:00:42.690
+Yeah, I particularly wanted to invite you on to talk about
-01:04:07.599 --> 01:04:12.480
-computers a tool to make people freer
+01:00:42.690 --> 01:00:47.700
+your experience learning Emacs I think you have run into
-01:04:12.480 --> 01:04:15.200
-wow that's like five questions yeah so
+01:00:47.700 --> 01:00:52.900
+places where it's a pain in the butt to learn Emacs and that
-01:04:15.200 --> 01:04:15.920
-I'm going to start
+01:00:52.900 --> 01:00:56.160
+this is a safe space to talk about that.
-01:04:15.920 --> 01:04:18.960
-with jumping I think
+01:00:56.160 --> 01:01:02.160
+I'll jump in by saying the Emacs cheat sheet.
-01:04:18.960 --> 01:04:22.240
-that Dungeon is a lot of fun and
+01:01:02.160 --> 01:01:07.160
+I think it's the one that can do puts out is a lifesaver.
-01:04:22.240 --> 01:04:25.359
-you know I'm I've played many
+01:01:07.160 --> 01:01:12.030
+I think there's a little bit of a vocabulary disconnect,
-01:04:25.359 --> 01:04:27.599
-commercial role-playing games over the
+01:01:12.030 --> 01:01:16.050
+like, and this actually kind of comes up a lot in
-01:04:27.599 --> 01:04:28.480
-years
+01:01:16.050 --> 01:01:21.080
+conversation with Corwin and Erik and I, but coffee paste
-01:04:28.480 --> 01:04:31.680
-and I've enjoyed all of them and there
+01:01:21.080 --> 01:01:25.160
+versus what yank and w, whatever w killing yank.
-01:04:31.680 --> 01:04:32.000
-are
+01:01:25.160 --> 01:01:28.160
+Yeah.
-01:04:32.000 --> 01:04:34.720
-very few of them that I've had as many
+01:01:28.160 --> 01:01:31.380
+Why would you even do that to us right where where were you
-01:04:34.720 --> 01:04:36.319
-belly laughs and as much
+01:01:31.380 --> 01:01:34.810
+when zeros park happened. No, I understand that makes sense.
-01:04:36.319 --> 01:04:40.160
-just joy playing as from Dungeon
+01:01:34.810 --> 01:01:39.160
+What else.
-01:04:40.160 --> 01:04:42.799
-and I think you know the magic of it is
+01:01:39.160 --> 01:01:41.920
+I mean you don't have to sit here and rag on Emacs but we're
-01:04:42.799 --> 01:04:43.280
-you know
+01:01:41.920 --> 01:01:44.160
+here for that. That's all I'm saying.
-01:04:43.280 --> 01:04:45.520
-like any game like the real magic is the
+01:01:44.160 --> 01:01:48.250
+I think that's the biggest thing, like, I'm, I'm used to,
-01:04:45.520 --> 01:04:47.200
-people you play with and having fun with
+01:01:48.250 --> 01:01:52.170
+like, just kind of the very binary nature of like, nope,
-01:04:47.200 --> 01:04:49.599
-your friends
+01:01:52.170 --> 01:01:55.160
+that didn't work, try something else.
-01:04:49.599 --> 01:04:51.280
-and what I would hope that people can
+01:01:55.160 --> 01:02:00.680
+So, as long as you're willing to try other stuff like Emacs
-01:04:51.280 --> 01:04:53.440
-take away from is that Dungeon has the
+01:02:00.680 --> 01:02:07.160
+will be fine. So, it's a tough cookie it can take it.
-01:04:53.440 --> 01:04:55.920
-ability to be that magical thing
+01:02:07.160 --> 01:02:14.430
+The only thing that happens is you have to install it
-01:04:55.920 --> 01:04:59.280
-and hopefully we can get our project to
+01:02:14.430 --> 01:02:21.160
+through your file that you hopefully have a backup of.
-01:04:59.280 --> 01:05:00.000
-the point
+01:02:21.160 --> 01:02:25.160
+Um, are there more questions in the hopper.
-01:05:00.000 --> 01:05:02.160
-where it gets out of the way and lets
+01:02:25.160 --> 01:02:29.500
+If anybody does have any questions up there for hope for
-01:05:02.160 --> 01:05:04.960
-you have that fun with your friends
+01:02:29.500 --> 01:02:34.210
+Erik or I so just to summarize, I've known Erik, I've known
-01:05:04.960 --> 01:05:07.200
-but there's a lot of work to do we
+01:02:34.210 --> 01:02:38.640
+Erik, my whole life, I've known hope around a decade we
-01:05:07.200 --> 01:05:08.240
-could use some help
+01:02:38.640 --> 01:02:41.760
+work together on a project for, for a science fiction
-01:05:08.240 --> 01:05:10.880
-so if you're interested in having fun
+01:02:41.760 --> 01:02:42.160
+convention.
-01:05:10.880 --> 01:05:20.960
-come help us build this fun tool
+01:02:42.160 --> 01:02:45.160
+Yeah.
-01:05:20.960 --> 01:05:22.319
-all right so I just got the call that
+01:02:45.160 --> 01:02:49.360
+I've written a few conventions and then I also helped with
-01:05:22.319 --> 01:05:24.079
-we've got just about two to three
+01:02:49.360 --> 01:02:53.710
+I just wrote a bio. So this should like all theoretically
-01:05:24.079 --> 01:05:25.039
-minutes left
+01:02:53.710 --> 01:02:55.160
+be in my head right.
-01:05:25.039 --> 01:05:28.160
-and we should start our wrap-up
+01:02:55.160 --> 01:03:01.660
+I want to refer to my own bio project coordinator for
-01:05:28.160 --> 01:05:31.440
-okay wrap up so
+01:03:01.660 --> 01:03:03.160
+dungeon mode.
-01:05:31.440 --> 01:05:34.240
-yeah so I'll I'll see if I can charge
+01:03:03.160 --> 01:03:07.160
+I was a bird assistant good credit.
-01:05:34.240 --> 01:05:35.920
-the room with some energy unless you're
+01:03:07.160 --> 01:03:13.160
+And family friend to the Bruce. Oh,
-01:05:35.920 --> 01:05:38.480
-ready to have at it hope
+01:03:13.160 --> 01:03:17.870
+yeah, we've gotten a ton of support from a lot of our
-01:05:38.480 --> 01:05:40.720
-here here's here's what I want people to
+01:03:17.870 --> 01:03:21.720
+lifelong friends people, and also people that we just met.
-01:05:40.720 --> 01:05:42.799
-take away
+01:03:21.720 --> 01:03:24.160
+Maybe that's a that's a great segue.
-01:05:42.799 --> 01:05:47.039
-were you like no okay
+01:03:24.160 --> 01:03:26.900
+Do throw your questions in there I'm going to fill for just
-01:05:47.039 --> 01:05:53.599
-I'm not getting your audio hope
+01:03:26.900 --> 01:03:29.160
+a second and then we'll probably cut away.
-01:05:53.599 --> 01:05:55.839
-it's okay on my end maybe I just need to
+01:03:29.160 --> 01:03:35.970
+But, I'm thinking thematically actually, that's that's too
-01:05:55.839 --> 01:05:57.359
-speak up
+01:03:35.970 --> 01:03:38.810
+abrupt so we need to go around the room, Erik you had hours
-01:05:57.359 --> 01:05:58.880
-is this better let me know when I'm
+01:03:38.810 --> 01:03:41.480
+and hours to rehearse hope kind of jumped in on the last
-01:05:58.880 --> 01:06:00.640
-coming through yeah you're coming
+01:03:41.480 --> 01:03:42.160
+minute.
-01:06:00.640 --> 01:06:01.680
-through now
+01:03:42.160 --> 01:03:47.050
+So let's let's, is it okay to pick on you or do you want me
-01:06:01.680 --> 01:06:05.359
-okay cool oh no I
+01:03:47.050 --> 01:03:48.160
+to get mine.
-01:06:05.359 --> 01:06:08.799
-was going to say go ahead I didn't okay
+01:03:48.160 --> 01:03:51.490
+What are you asking me to do what do you what do you want
-01:06:08.799 --> 01:06:10.559
-I mean I I don't know that I know what I
+01:03:51.490 --> 01:03:55.280
+people to take away from this talk, you know, as we think
-01:06:10.559 --> 01:06:12.880
-want to say either except a whole ton of
+01:03:55.280 --> 01:03:59.010
+about dungeon and sharing it's sharing its tradition, as we
-01:06:12.880 --> 01:06:13.599
-thank yous
+01:03:59.010 --> 01:04:03.160
+think about learning Emacs, and like making that awesome.
-01:06:13.599 --> 01:06:16.480
-so I will I will save those for the for
+01:04:03.160 --> 01:04:08.210
+And just, you know, generally what's up with free software
-01:06:16.480 --> 01:06:17.200
-the literal
+01:04:08.210 --> 01:04:13.160
+and trying to make computers a tool to make people freer.
-01:06:17.200 --> 01:06:20.880
-end here and instead
+01:04:13.160 --> 01:04:18.160
+Yeah, I'm going to ask like five questions. Yeah, so just
-01:06:20.880 --> 01:06:24.160
-what I would say is as we build
+01:04:18.160 --> 01:04:19.160
+jump in.
-01:06:24.160 --> 01:06:27.839
-our amazing innovations and
+01:04:19.160 --> 01:04:24.160
+I think that dungeon is a lot of fun. And, you know, I'm, I
-01:06:27.839 --> 01:06:32.160
-explore our ideas in Emacs
+01:04:24.160 --> 01:04:29.260
+'ve played many commercial role playing games over the years
-01:06:32.160 --> 01:06:35.119
-we are fighting our own ego for the will
+01:04:29.260 --> 01:04:32.160
+, and I've enjoyed all of them.
-01:06:35.119 --> 01:06:36.079
-to get them done
+01:04:32.160 --> 01:04:36.500
+But there's very few of them that I've had as many belly
-01:06:36.079 --> 01:06:37.680
-it's hard and we're not sure if they're
+01:04:36.500 --> 01:04:41.410
+laughs and as much just joy, playing as from dungeon. And I
-01:06:37.680 --> 01:06:38.960
-going to be a good idea and will it
+01:04:41.410 --> 01:04:44.500
+think, you know, the magic of it is, you know, like any
-01:06:38.960 --> 01:06:40.000
-excite people and part of our
+01:04:44.500 --> 01:04:47.400
+game like the real magic is the people you play with and
-01:06:40.000 --> 01:06:41.680
-responsibility is to excite people so
+01:04:47.400 --> 01:04:50.160
+having fun with your friends.
-01:06:41.680 --> 01:06:43.440
-that they can feel good about liking
+01:04:50.160 --> 01:04:53.780
+And what I would hope that people can take away from is
-01:06:43.440 --> 01:06:44.240
-them
+01:04:53.780 --> 01:04:57.900
+that dungeon has the ability to be that magical thing. And
-01:06:44.240 --> 01:06:45.680
-if you come off and you're like hey this
+01:04:57.900 --> 01:05:01.870
+hopefully we can get our project to the point where it gets
-01:06:45.680 --> 01:06:47.359
-is a terrible idea it's really hard to
+01:05:01.870 --> 01:05:06.160
+out of the way and lets you have that fun with your friends.
-01:06:47.359 --> 01:06:47.920
-be like
+01:05:06.160 --> 01:05:12.180
+So I think there's a lot of work to do we could use some
-01:06:47.920 --> 01:06:49.760
-no I love that idea it works
+01:05:12.180 --> 01:05:19.330
+help. So if you're interested in having fun. Come help us
-01:06:49.760 --> 01:06:51.200
-theatrically but
+01:05:19.330 --> 01:05:22.160
+build this fun tool.
-01:06:51.200 --> 01:06:55.680
-in larger groups may not scale
+01:05:22.160 --> 01:05:25.370
+Alright so I just got the call that we've got just about
-01:06:55.680 --> 01:06:58.400
-so that's a crucible for ideas and a
+01:05:25.370 --> 01:05:29.160
+two to three minutes left, and we should start our wrap up.
-01:06:58.400 --> 01:07:00.400
-crucible for teams
+01:05:29.160 --> 01:05:31.160
+Wrap up.
-01:07:00.400 --> 01:07:03.280
-the first part is definitely healthy the
+01:05:31.160 --> 01:05:35.090
+Yeah, so I'll see if I can charge the room with some energy
-01:07:03.280 --> 01:07:04.240
-second part
+01:05:35.090 --> 01:05:38.160
+unless you're ready to have that at home.
-01:07:04.240 --> 01:07:07.440
-there's a lot we can we can do you know
+01:05:38.160 --> 01:05:43.160
+Here, here's, here's what I want people to take away.
-01:07:07.440 --> 01:07:08.640
-having upfront
+01:05:43.160 --> 01:05:47.160
+Were you like, No, okay.
-01:07:08.640 --> 01:07:10.880
-and and and good faith conversations on
+01:05:47.160 --> 01:05:54.160
+I'm not getting your audio hope.
-01:07:10.880 --> 01:07:15.440
-that subject
+01:05:54.160 --> 01:05:57.160
+So my end, maybe I just need to speak up.
-01:07:15.440 --> 01:07:17.520
-anybody else wanted I want to weigh it
+01:05:57.160 --> 01:06:01.160
+Is this better, let me know when I'm coming through.
-01:07:17.520 --> 01:07:19.119
-in after that sorry that that was more
+01:06:01.160 --> 01:06:05.160
+Okay, cool.
-01:07:19.119 --> 01:07:23.200
-of a calm down than a then a fire out
+01:06:05.160 --> 01:06:07.160
+I was gonna say go ahead.
-01:07:23.200 --> 01:07:27.280
-oh that's okay
+01:06:07.160 --> 01:06:11.240
+I didn't. Okay. I mean I don't know that I know what I want
-01:07:27.280 --> 01:07:29.280
-I mean the first part of this but I
+01:06:11.240 --> 01:06:15.290
+to say either except a whole ton of thank you. So, I will,
-01:07:29.280 --> 01:07:30.960
-think
+01:06:15.290 --> 01:06:19.160
+I will save those for the, for the literal end here.
-01:07:30.960 --> 01:07:32.960
-we would be remiss not to highlight org
+01:06:19.160 --> 01:06:26.630
+And instead, what I would say is, as we build our amazing
-01:07:32.960 --> 01:07:34.880
-mode a little bit
+01:06:26.630 --> 01:06:32.160
+innovations and explore our ideas in Emacs.
-01:07:34.880 --> 01:07:37.839
-yeah like that's that's our bread and
+01:06:32.160 --> 01:06:34.980
+We are fighting our own ego for the will to get them done,
-01:07:37.839 --> 01:07:38.480
-butter
+01:06:34.980 --> 01:06:37.740
+it's hard and we're not sure if they're going to be a good
-01:07:38.480 --> 01:07:40.240
-yeah our whole project is built on org
+01:06:37.740 --> 01:06:39.960
+idea and will it excite people and part of our
-01:07:40.240 --> 01:07:42.720
-mode right and I'm just really excited
+01:06:39.960 --> 01:06:42.780
+responsibility is to excite people so that they can feel
-01:07:42.720 --> 01:07:46.240
-because like I have I don't have adhd
+01:06:42.780 --> 01:06:44.160
+good about liking them.
-01:07:46.240 --> 01:07:49.680
-but I have like something similar and so
+01:06:44.160 --> 01:06:47.930
+If you come off and you're like hey this is a terrible idea
-01:07:49.680 --> 01:07:51.119
-like to know that there's something that
+01:06:47.930 --> 01:06:51.470
+it's really hard to be like, no I love that idea works
-01:07:51.119 --> 01:07:54.880
-exists that is like purely hierarchical
+01:06:51.470 --> 01:06:55.160
+theatrically but in larger groups may not scale.
-01:07:54.880 --> 01:07:57.760
-is incredible like I can just run a
+01:06:55.160 --> 01:07:00.160
+So that's a crucible for ideas and a crucible for teams.
-01:07:57.760 --> 01:07:58.559
-report
+01:07:00.160 --> 01:07:05.280
+The first part is definitely healthy. The second part,
-01:07:58.559 --> 01:08:01.839
-basically and get all of my like
+01:07:05.280 --> 01:07:10.070
+there's a lot we can we can do, you know, having a front
-01:08:01.839 --> 01:08:03.839
-to-do lists that I didn't have to put in
+01:07:10.070 --> 01:07:15.160
+and and and good faith conversations on that subject.
-01:08:03.839 --> 01:08:05.760
-one specific place
+01:07:15.160 --> 01:07:19.600
+Anybody else want to want to wade in after that sorry that
-01:08:05.760 --> 01:08:10.559
-and like that's kind of been
+01:07:19.600 --> 01:07:23.160
+that was more of a calm down than a fire out.
-01:08:10.559 --> 01:08:14.559
-a complex issue for me of like
+01:07:23.160 --> 01:07:25.160
+Okay.
-01:08:14.559 --> 01:08:16.480
-okay I have all these to-do lists like
+01:07:25.160 --> 01:07:27.160
+I think.
-01:08:16.480 --> 01:08:18.080
-in google keep or whatever like what do
+01:07:27.160 --> 01:07:32.180
+The first part of this but I think we would be remiss not
-01:08:18.080 --> 01:08:18.319
-I
+01:07:32.180 --> 01:07:35.860
+to highlight org mode, a little bit. Yeah, like, that's,
-01:08:18.319 --> 01:08:20.719
-do with them now so being able to like
+01:07:35.860 --> 01:07:39.280
+that's our bread and butter. Yeah, our whole project is
-01:08:20.719 --> 01:08:21.359
-pull them
+01:07:39.280 --> 01:07:40.160
+built on org mode.
-01:08:21.359 --> 01:08:24.400
-into one list and then just cycle
+01:07:40.160 --> 01:07:44.580
+Right. And I'm just really excited because, like, I have, I
-01:08:24.400 --> 01:08:26.640
-through them is really incredible
+01:07:44.580 --> 01:07:48.670
+don't have ADHD, but I have like something similar. And so,
-01:08:26.640 --> 01:08:30.239
-and I think taking a Dungeon and
+01:07:48.670 --> 01:07:52.230
+like to know that there's something that exists, that is
-01:08:30.239 --> 01:08:34.480
-like using it to
+01:07:52.230 --> 01:07:54.160
+like purely hierarchical.
-01:08:34.480 --> 01:08:35.839
-like combining it with org mode
+01:07:54.160 --> 01:07:59.170
+It's incredible, like I can just run a report, basically
-01:08:35.839 --> 01:08:37.759
-basically
+01:07:59.170 --> 01:08:03.550
+and get all of my like to do lists that I didn't have to
-01:08:37.759 --> 01:08:41.040
-really yeah I'm excited about it I'm
+01:08:03.550 --> 01:08:06.160
+put in one specific place.
-01:08:41.040 --> 01:08:42.560
-excited to see like what it can do for
+01:08:06.160 --> 01:08:13.190
+And, like, that's kind of been a complex issue for me of
-01:08:42.560 --> 01:08:44.159
-player groups
+01:08:13.190 --> 01:08:16.680
+like, okay, I have all these to do lists, like in Google
-01:08:44.159 --> 01:08:47.759
-yeah especially
+01:08:16.680 --> 01:08:19.160
+Keep or whatever like what do I do with them now.
-01:08:47.759 --> 01:08:50.319
-like I was excited about Dungeon mode
+01:08:19.160 --> 01:08:24.160
+So being able to like pull them into one list.
-01:08:50.319 --> 01:08:52.319
-before the pandemic and now like I'm
+01:08:24.160 --> 01:08:27.160
+And then recycle through them is really incredible.
-01:08:52.319 --> 01:08:53.920
-only more enthusiastic
+01:08:27.160 --> 01:08:35.500
+And I think taking dungeon and like using it to like
-01:08:53.920 --> 01:08:57.120
-so yeah definitely the pandemic has
+01:08:35.500 --> 01:08:40.160
+combining it with org mode basically really.
-01:08:57.120 --> 01:08:58.400
-been the greatest thing that happened to
+01:08:40.160 --> 01:08:44.210
+I'm excited about it and I'm excited to see like what it
-01:08:58.400 --> 01:08:59.120
-this game
+01:08:44.210 --> 01:08:46.160
+can do for player groups.
-01:08:59.120 --> 01:09:02.080
-terrible terrible as it is to say that
+01:08:46.160 --> 01:08:49.190
+Especially now that quarantine like I was excited about
-01:09:02.080 --> 01:09:02.640
-it
+01:08:49.190 --> 01:08:50.160
+dungeon mode.
-01:09:02.640 --> 01:09:05.120
-if we needed a hobby and it turns out
+01:08:50.160 --> 01:08:54.040
+Before the pandemic and now like I'm only more enthusiastic.
-01:09:05.120 --> 01:09:06.719
-role-playing games are
+01:08:54.040 --> 01:08:57.940
+So, yeah, definitely the pandemic has been the greatest
-01:09:06.719 --> 01:09:11.279
-a really good fit
+01:08:57.940 --> 01:09:01.720
+thing that happened to this game, terrible terrible as it
-01:09:11.279 --> 01:09:13.839
-so so I think that's probably about
+01:09:01.720 --> 01:09:05.090
+is to say that it, if we needed a hobby and it turns out
-01:09:13.839 --> 01:09:14.799
-our time
+01:09:05.090 --> 01:09:11.160
+role playing games are are really good.
-01:09:14.799 --> 01:09:18.560
-I'm guessing that's my call and
+01:09:11.160 --> 01:09:16.610
+So, so I think that's probably about our time. I'm guessing
-01:09:18.560 --> 01:09:21.759
-thank you very much thank you
+01:09:16.610 --> 01:09:21.160
+that's my call. And thank you very much.
-01:09:21.759 --> 01:09:23.120
-everybody
+01:09:21.160 --> 01:09:24.970
+Thank you everybody will be around for discord and stuff
-01:09:23.120 --> 01:09:25.679
-we'll be around for discord and stuff
+01:09:24.970 --> 01:09:27.160
+later come catch us if you want to talk.
-01:09:25.679 --> 01:09:31.759
-later come catch us if you want to talk
+01:09:27.160 --> 01:09:30.160
+Okay.
diff --git a/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo-autogen.vtt b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo-autogen.vtt
deleted file mode 100644
index 49db0989..00000000
--- a/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo-autogen.vtt
+++ /dev/null
@@ -1,634 +0,0 @@
-WEBVTT
-
-00:00:00.880 --> 00:00:03.760
-hello and welcome to the stock
-
-00:00:03.760 --> 00:00:06.080
-the title of the stock is a tour feature
-
-00:00:06.080 --> 00:00:07.919
-a fast and fully featured terminal
-
-00:00:07.919 --> 00:00:08.559
-emulator
-
-00:00:08.559 --> 00:00:11.840
-inside new e-max so let's try to
-
-00:00:11.840 --> 00:00:13.360
-understand what we mean with the pass
-
-00:00:13.360 --> 00:00:14.559
-and fully featured
-
-00:00:14.559 --> 00:00:17.520
-and to do that we'll compare v term with
-
-00:00:17.520 --> 00:00:18.320
-the
-
-00:00:18.320 --> 00:00:20.640
-packages which are built in Emacs mean
-
-00:00:20.640 --> 00:00:22.400
-the term
-
-00:00:22.400 --> 00:00:25.199
-so let's let's jump into the v term so
-
-00:00:25.199 --> 00:00:26.720
-this is a feature buffer
-
-00:00:26.720 --> 00:00:29.679
-and this is a ansi term buffer what I'm
-
-00:00:29.679 --> 00:00:31.519
-going to do now is first I'm going to
-
-00:00:31.519 --> 00:00:32.160
-prove you
-
-00:00:32.160 --> 00:00:35.760
-what we move fast so to do that let me
-
-00:00:35.760 --> 00:00:37.520
-open a large file display on screen or
-
-00:00:37.520 --> 00:00:39.280
-large file this is about one megabyte of
-
-00:00:39.280 --> 00:00:40.239
-data
-
-00:00:40.239 --> 00:00:43.520
-and let me time that it takes about 0.6
-
-00:00:43.520 --> 00:00:44.160
-seconds
-
-00:00:44.160 --> 00:00:47.200
-with feature let's do the same with
-
-00:00:47.200 --> 00:00:49.760
-with ancient term well we already
-
-00:00:49.760 --> 00:00:51.520
-already see the difference
-
-00:00:51.520 --> 00:00:53.039
-so I will use this time to tell you
-
-00:00:53.039 --> 00:00:54.559
-what's different and
-
-00:00:54.559 --> 00:00:57.360
-what is v term exactly so v term is a
-
-00:00:57.360 --> 00:00:58.879
-terminal emulator built
-
-00:00:58.879 --> 00:01:01.120
-on top of an external library the
-
-00:01:01.120 --> 00:01:02.719
-library is called libvi term
-
-00:01:02.719 --> 00:01:05.519
-and is the same library used by newton
-
-00:01:05.519 --> 00:01:07.200
-for their own terminal emulator
-
-00:01:07.200 --> 00:01:10.000
-it's a c library and this is what gives
-
-00:01:10.000 --> 00:01:10.799
-us
-
-00:01:10.799 --> 00:01:15.119
-a lot of good features first the speed
-
-00:01:15.119 --> 00:01:17.280
-time spent here 0.6 is essentially the
-
-00:01:17.280 --> 00:01:18.479
-time that it takes to
-
-00:01:18.479 --> 00:01:21.520
-one convert the emax representation of
-
-00:01:21.520 --> 00:01:22.240
-like text
-
-00:01:22.240 --> 00:01:23.840
-into the visa and representation of what
-
-00:01:23.840 --> 00:01:26.400
-was a string and two into
-
-00:01:26.400 --> 00:01:28.479
-actually displaying that and that can
-
-00:01:28.479 --> 00:01:29.520
-take time
-
-00:01:29.520 --> 00:01:31.840
-if there's a if there's quantification
-
-00:01:31.840 --> 00:01:33.680
-involved so these are the 0.6 seconds
-
-00:01:33.680 --> 00:01:34.240
-there
-
-00:01:34.240 --> 00:01:36.960
-as we say in the in ancestor that's much
-
-00:01:36.960 --> 00:01:37.920
-much
-
-00:01:37.920 --> 00:01:39.920
-more time it's much slower so the
-
-00:01:39.920 --> 00:01:41.680
-terminal will feel much snappier much
-
-00:01:41.680 --> 00:01:42.880
-faster
-
-00:01:42.880 --> 00:01:46.079
-but that's not the main benefit or the
-
-00:01:46.079 --> 00:01:47.840
-only benefit of using this external
-
-00:01:47.840 --> 00:01:48.799
-library
-
-00:01:48.799 --> 00:01:52.320
-feature the second big benefit
-
-00:01:52.320 --> 00:01:55.439
-is that v term has support for all the
-
-00:01:55.439 --> 00:01:56.560
-escape codes
-
-00:01:56.560 --> 00:01:59.200
-that exterm has support for so v term is
-
-00:01:59.200 --> 00:02:01.119
-essentially as running x term
-
-00:02:01.119 --> 00:02:03.600
-inside an imax buffer so let's see that
-
-00:02:03.600 --> 00:02:04.799
-this for example
-
-00:02:04.799 --> 00:02:07.119
-let's start by looking at the support
-
-00:02:07.119 --> 00:02:08.239
-for colors
-
-00:02:08.239 --> 00:02:09.920
-we have support for all the colors out
-
-00:02:09.920 --> 00:02:11.840
-of the box we don't have to do anything
-
-00:02:11.840 --> 00:02:15.040
-and if we did the same here well we have
-
-00:02:15.040 --> 00:02:15.680
-only
-
-00:02:15.680 --> 00:02:17.920
-20 colors there's a way to get all the
-
-00:02:17.920 --> 00:02:19.680
-colors but it's much more involved
-
-00:02:19.680 --> 00:02:23.040
-but this is not where v term shines
-
-00:02:23.040 --> 00:02:26.000
-uh we can run all the commands that we
-
-00:02:26.000 --> 00:02:27.200
-want
-
-00:02:27.200 --> 00:02:30.480
-h top and cdu
-
-00:02:30.480 --> 00:02:33.040
-everything runs here also this title
-
-00:02:33.040 --> 00:02:33.840
-it's a
-
-00:02:33.840 --> 00:02:36.400
-it's a fairly complicated manipulation
-
-00:02:36.400 --> 00:02:37.040
-of
-
-00:02:37.040 --> 00:02:40.879
-the window and it will not work here
-
-00:02:40.879 --> 00:02:42.319
-it just doesn't work actually now the
-
-00:02:42.319 --> 00:02:44.640
-terminal is probably messed up
-
-00:02:44.640 --> 00:02:48.400
-yes so using this external library
-
-00:02:48.400 --> 00:02:50.959
-removes the burden from the developers
-
-00:02:50.959 --> 00:02:52.000
-of having to implement
-
-00:02:52.000 --> 00:02:54.000
-support for all these cape codes we just
-
-00:02:54.000 --> 00:02:55.360
-use those
-
-00:02:55.360 --> 00:02:58.480
-so in many ways running veteran
-
-00:02:58.480 --> 00:03:01.760
-is us running extern inside a max
-
-00:03:01.760 --> 00:03:04.400
-but it's better than that because since
-
-00:03:04.400 --> 00:03:05.840
-this is an e-max buffer
-
-00:03:05.840 --> 00:03:08.879
-we can enjoy a lot of features from
-
-00:03:08.879 --> 00:03:09.760
-Emacs
-
-00:03:09.760 --> 00:03:11.920
-as well as a tighter integration with
-
-00:03:11.920 --> 00:03:13.200
-e-max itself
-
-00:03:13.200 --> 00:03:16.560
-for example as you see here the title of
-
-00:03:16.560 --> 00:03:17.599
-my buffer
-
-00:03:17.599 --> 00:03:20.720
-is from the director I'm in so let's go
-
-00:03:20.720 --> 00:03:21.760
-to my tmp
-
-00:03:21.760 --> 00:03:24.799
-the title will change so there's
-
-00:03:24.799 --> 00:03:26.560
-information being exchanged between v
-
-00:03:26.560 --> 00:03:28.000
-term and index
-
-00:03:28.000 --> 00:03:29.760
-and of course the title is not the only
-
-00:03:29.760 --> 00:03:32.000
-place where information is exchanged
-
-00:03:32.000 --> 00:03:34.799
-I can find a file and I will be in the
-
-00:03:34.799 --> 00:03:35.920
-directory
-
-00:03:35.920 --> 00:03:38.239
-where my terminal is this feature is
-
-00:03:38.239 --> 00:03:40.000
-also available in nc term
-
-00:03:40.000 --> 00:03:41.680
-and it works also on b term and it
-
-00:03:41.680 --> 00:03:43.840
-follows me so if I go to tmp I'll get
-
-00:03:43.840 --> 00:03:44.720
-the tmp
-
-00:03:44.720 --> 00:03:48.000
-if I ssh to a remote server it will work
-
-00:03:48.000 --> 00:03:48.640
-also
-
-00:03:48.640 --> 00:03:51.120
-on remote servers as well which is a
-
-00:03:51.120 --> 00:03:53.920
-very nice way to edit files remotely
-
-00:03:53.920 --> 00:03:55.760
-while we're working on a shelf and
-
-00:03:55.760 --> 00:03:57.360
-second while vterm
-
-00:03:57.360 --> 00:03:59.599
-is not an e-lisp interpreter like
-
-00:03:59.599 --> 00:04:02.159
-initial what we can do is we can
-
-00:04:02.159 --> 00:04:06.080
-still run inbox functions so for example
-
-00:04:06.080 --> 00:04:08.319
-that requires some configuration the
-
-00:04:08.319 --> 00:04:10.159
-term
-
-00:04:10.159 --> 00:04:12.480
-command message I as you see there's a
-
-00:04:12.480 --> 00:04:14.000
-higher so what I'm doing
-
-00:04:14.000 --> 00:04:16.239
-is I'm executing the eagles function I
-
-00:04:16.239 --> 00:04:17.199
-and I can drop that
-
-00:04:17.199 --> 00:04:19.840
-and turn it around uh hash function to
-
-00:04:19.840 --> 00:04:20.320
-run
-
-00:04:20.320 --> 00:04:24.880
-a-list functions or another one file see
-
-00:04:24.880 --> 00:04:27.600
-we call this feature message passing and
-
-00:04:27.600 --> 00:04:28.800
-it requires
-
-00:04:28.800 --> 00:04:30.880
-some configuration on the emac side as
-
-00:04:30.880 --> 00:04:32.000
-well as in the shell side
-
-00:04:32.000 --> 00:04:34.000
-it's important to stress what's the
-
-00:04:34.000 --> 00:04:35.360
-nature of feature
-
-00:04:35.360 --> 00:04:37.360
-for instance every time I'm sending a
-
-00:04:37.360 --> 00:04:39.120
-key binding it's not immediately clear
-
-00:04:39.120 --> 00:04:40.800
-if my intention is to send it to the
-
-00:04:40.800 --> 00:04:42.720
-shell or to imax so v term implements
-
-00:04:42.720 --> 00:04:44.320
-some reasonable defaults
-
-00:04:44.320 --> 00:04:46.800
-but at the moment it's mainly packaged
-
-00:04:46.800 --> 00:04:49.120
-to display characters on a screen
-
-00:04:49.120 --> 00:04:51.199
-so for example if you're using evil the
-
-00:04:51.199 --> 00:04:53.600
-editing commands in evil will not work
-
-00:04:53.600 --> 00:04:55.759
-immediately there's some work to be done
-
-00:04:55.759 --> 00:04:57.840
-and integration can be improved on that
-
-00:04:57.840 --> 00:04:58.479
-side but
-
-00:04:58.479 --> 00:05:00.240
-sometimes we really want this to behave
-
-00:05:00.240 --> 00:05:02.240
-exactly like a imax buffer
-
-00:05:02.240 --> 00:05:05.440
-we want to be able to search if
-
-00:05:05.440 --> 00:05:07.039
-if I try to get it to search it will not
-
-00:05:07.039 --> 00:05:08.880
-work I will send it to the shop so to do
-
-00:05:08.880 --> 00:05:09.360
-that
-
-00:05:09.360 --> 00:05:12.400
-we enabled the term copy mode so as you
-
-00:05:12.400 --> 00:05:12.800
-see
-
-00:05:12.800 --> 00:05:15.280
-copy mode and now this buffer is
-
-00:05:15.280 --> 00:05:17.039
-essentially a fundamental buffer
-
-00:05:17.039 --> 00:05:21.120
-I can move around as I can search
-
-00:05:21.120 --> 00:05:24.400
-uh so it must have I
-
-00:05:24.400 --> 00:05:25.840
-can do everything I want and there are
-
-00:05:25.840 --> 00:05:27.120
-additional features for example I can
-
-00:05:27.120 --> 00:05:29.600
-jump around
-
-00:05:29.600 --> 00:05:31.440
-all the prompts and I find this
-
-00:05:31.440 --> 00:05:32.639
-extremely useful
-
-00:05:32.639 --> 00:05:34.400
-because I can copy update from my
-
-00:05:34.400 --> 00:05:35.919
-programs or
-
-00:05:35.919 --> 00:05:39.199
-what I always have to do is I have to
-
-00:05:39.199 --> 00:05:42.400
-google some errors so what I do is I
-
-00:05:42.400 --> 00:05:43.120
-select that
-
-00:05:43.120 --> 00:05:45.919
-and I have my keybinding in maksakov and
-
-00:05:45.919 --> 00:05:46.880
-I'm googling
-
-00:05:46.880 --> 00:05:49.199
-what I have to google so this is very
-
-00:05:49.199 --> 00:05:50.400
-nice and
-
-00:05:50.400 --> 00:05:52.800
-if I now that have selected something if
-
-00:05:52.800 --> 00:05:54.400
-I just press return I will
-
-00:05:54.400 --> 00:05:57.120
-go back to my normal editing mode with
-
-00:05:57.120 --> 00:05:57.440
-the
-
-00:05:57.440 --> 00:06:00.400
-text copied so I can paste it back so
-
-00:06:00.400 --> 00:06:01.600
-it's a quick way to
-
-00:06:01.600 --> 00:06:04.160
-interact with copy and interact with uh
-
-00:06:04.160 --> 00:06:06.400
-with the output of a buffer so finally
-
-00:06:06.400 --> 00:06:07.840
-let's discuss how to actually
-
-00:06:07.840 --> 00:06:10.560
-use beta let's circle back and let's go
-
-00:06:10.560 --> 00:06:12.400
-and let's look at the github repo
-
-00:06:12.400 --> 00:06:14.400
-where development is happening v term is
-
-00:06:14.400 --> 00:06:15.520
-available in velpa
-
-00:06:15.520 --> 00:06:17.919
-but since it's leveraging the power of
-
-00:06:17.919 --> 00:06:18.960
-an external module
-
-00:06:18.960 --> 00:06:20.639
-you must have Emacs compiled with
-
-00:06:20.639 --> 00:06:22.000
-support for modules
-
-00:06:22.000 --> 00:06:25.600
-and many distros like ubuntu debian
-
-00:06:25.600 --> 00:06:27.199
-that's not there so you have to get
-
-00:06:27.199 --> 00:06:29.840
-Emacs with support for modules compiling
-
-00:06:29.840 --> 00:06:30.160
-or
-
-00:06:30.160 --> 00:06:32.000
-getting images somewhere else and also
-
-00:06:32.000 --> 00:06:33.840
-the first time you are going to use this
-
-00:06:33.840 --> 00:06:34.400
-which
-
-00:06:34.400 --> 00:06:37.440
-works only on mac or
-
-00:06:37.440 --> 00:06:40.319
-new linux systems Emacs will try to find
-
-00:06:40.319 --> 00:06:41.759
-and compile this module
-
-00:06:41.759 --> 00:06:43.680
-so it's important this requirement is
-
-00:06:43.680 --> 00:06:45.440
-important if you're using windows
-
-00:06:45.440 --> 00:06:47.600
-well that's not it's not available and
-
-00:06:47.600 --> 00:06:49.199
-will not work
-
-00:06:49.199 --> 00:06:52.560
-so to conclude I want to just advertise
-
-00:06:52.560 --> 00:06:53.440
-this page
-
-00:06:53.440 --> 00:06:56.240
-if you have problems look at the issues
-
-00:06:56.240 --> 00:06:57.120
-and
-
-00:06:57.120 --> 00:06:59.039
-open unusual in case we'll try to help
-
-00:06:59.039 --> 00:07:00.800
-you we are very excited about feature
-
-00:07:00.800 --> 00:07:02.639
-and I think it's a transformative
-
-00:07:02.639 --> 00:07:10.319
-terminal experience inside glue imax
diff --git a/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt
new file mode 100644
index 00000000..183ea9f6
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt
@@ -0,0 +1,526 @@
+WEBVTT
+
+00:00:00.880 --> 00:00:03.760
+Hello and welcome to this talk.
+
+00:00:03.760 --> 00:00:06.080
+The title of this talk is a tour of vterm,
+
+00:00:06.080 --> 00:00:08.559
+a fast and fully featured terminal emulator
+
+00:00:08.559 --> 00:00:10.800
+inside GNU Emacs.
+
+00:00:10.801 --> 00:00:12.719
+So let's try to understand what we mean
+
+00:00:12.720 --> 00:00:14.559
+with "fast and fully featured."
+
+00:00:14.559 --> 00:00:16.800
+To do that we'll compare vterm
+
+00:00:16.801 --> 00:00:20.400
+with the packages which are built in Emacs,
+
+00:00:20.401 --> 00:00:22.400
+mainly, term.
+
+00:00:22.400 --> 00:00:25.039
+So let's jump into the vterm.
+
+00:00:25.040 --> 00:00:26.720
+So this is a vterm buffer
+
+00:00:26.720 --> 00:00:29.439
+and this is a ansi-term buffer.
+
+00:00:29.440 --> 00:00:30.720
+What I'm going to do now is
+
+00:00:30.721 --> 00:00:32.160
+first I'm going to prove to you
+
+00:00:32.160 --> 00:00:34.160
+what we mean by fast.
+
+00:00:34.161 --> 00:00:37.440
+To do that, let me open a large file display on screen--
+
+00:00:37.441 --> 00:00:40.239
+a large file, this is about one megabyte of data--
+
+00:00:40.239 --> 00:00:41.840
+and let me time that.
+
+00:00:41.841 --> 00:00:45.200
+It takes about 0.6 seconds with vterm.
+
+00:00:45.201 --> 00:00:48.320
+Let's do the same with with ansi-term.
+
+00:00:48.321 --> 00:00:51.520
+Well, we already see the difference.
+
+00:00:51.520 --> 00:00:53.039
+So I will use this time to tell you
+
+00:00:53.039 --> 00:00:56.320
+what's different, and what is vterm exactly.
+
+00:00:56.321 --> 00:00:58.399
+vterm is a terminal emulator
+
+00:00:58.400 --> 00:01:00.800
+built on top of an external library.
+
+00:01:00.801 --> 00:01:02.719
+The library is called libvterm,
+
+00:01:02.719 --> 00:01:05.519
+and is the same library used by Newton
+
+00:01:05.519 --> 00:01:07.200
+for their own terminal emulator.
+
+00:01:07.200 --> 00:01:10.799
+It's a C library, and this is what gives us
+
+00:01:10.799 --> 00:01:15.119
+a lot of good features. First, the speed.
+
+00:01:15.119 --> 00:01:17.119
+Time spent here, 0.6, is essentially
+
+00:01:17.120 --> 00:01:18.479
+the time that it takes to:
+
+00:01:18.479 --> 00:01:22.240
+1. convert the Emacs representation of text
+
+00:01:22.241 --> 00:01:25.040
+into the vterm representation of what is a string,
+
+00:01:25.041 --> 00:01:27.360
+and 2., into actually displaying that,
+
+00:01:27.361 --> 00:01:29.520
+and that can take time
+
+00:01:29.520 --> 00:01:32.240
+if there's fontification involved.
+
+00:01:32.241 --> 00:01:34.240
+So these are the 0.6 seconds there.
+
+00:01:34.240 --> 00:01:38.479
+As we say, in ansi-term, that's much more time.
+
+00:01:38.480 --> 00:01:40.720
+It's much slower. So the terminal will feel
+
+00:01:40.721 --> 00:01:42.880
+much snappier, much faster.
+
+00:01:42.880 --> 00:01:46.720
+But that's not the main benefit or the only benefit
+
+00:01:46.721 --> 00:01:49.759
+of using this external library vterm.
+
+00:01:49.760 --> 00:01:53.040
+The second big benefit is that
+
+00:01:53.041 --> 00:01:56.560
+vterm has support for all the escape codes
+
+00:01:56.560 --> 00:01:58.320
+that xterm has support for,
+
+00:01:58.321 --> 00:02:01.119
+so vterm is essentially as running xterm
+
+00:02:01.119 --> 00:02:03.600
+inside an Emacs buffer. So let's see that.
+
+00:02:03.600 --> 00:02:05.759
+For example, let's start by looking
+
+00:02:05.760 --> 00:02:08.239
+at the support for colors.
+
+00:02:08.239 --> 00:02:10.319
+We have support for all the colors out of the box.
+
+00:02:10.320 --> 00:02:11.840
+We don't have to do anything.
+
+00:02:11.840 --> 00:02:14.720
+And if we did the same here, well,
+
+00:02:14.721 --> 00:02:16.800
+we have only 20 colors.
+
+00:02:16.801 --> 00:02:18.239
+There's a way to get all the colors,
+
+00:02:18.240 --> 00:02:19.680
+but it's much more involved.
+
+00:02:19.680 --> 00:02:23.040
+But this is not where vterm shines.
+
+00:02:23.040 --> 00:02:27.200
+We can run all the commands that we want.
+
+00:02:27.200 --> 00:02:31.440
+htop, ncdu, everything runs here.
+
+00:02:31.441 --> 00:02:35.519
+Also this title, it's a fairly complicated
+
+00:02:35.520 --> 00:02:37.920
+manipulation of the window
+
+00:02:37.921 --> 00:02:40.879
+and it will not work here.
+
+00:02:40.879 --> 00:02:42.000
+It just doesn't work actually.
+
+00:02:42.001 --> 00:02:46.160
+Now the terminal is probably messed up. Yes.
+
+00:02:46.161 --> 00:02:48.400
+So using this external library
+
+00:02:48.400 --> 00:02:50.959
+removes the burden from the developers
+
+00:02:50.959 --> 00:02:52.319
+of having to implement support
+
+00:02:52.320 --> 00:02:53.280
+for all the escape codes.
+
+00:02:53.281 --> 00:02:55.360
+We just use those.
+
+00:02:55.360 --> 00:02:58.480
+So in many ways, running vterm
+
+00:02:58.480 --> 00:03:01.760
+is running xterm inside Emacs,
+
+00:03:01.760 --> 00:03:04.159
+but it's better than that because,
+
+00:03:04.160 --> 00:03:05.840
+since this is an Emacs buffer,
+
+00:03:05.840 --> 00:03:09.760
+we can enjoy a lot of features from Emacs
+
+00:03:09.760 --> 00:03:11.360
+as well as a tighter integration
+
+00:03:11.361 --> 00:03:13.200
+with Emacs itself.
+
+00:03:13.200 --> 00:03:15.840
+For example, as you see here,
+
+00:03:15.841 --> 00:03:20.239
+the title of my buffer is from the directory I'm in.
+
+00:03:20.240 --> 00:03:21.760
+So let's go to my tmp.
+
+00:03:21.760 --> 00:03:23.440
+The title will change.
+
+00:03:23.441 --> 00:03:25.920
+So there's information being exchanged
+
+00:03:25.921 --> 00:03:28.000
+between vterm and Emacs.
+
+00:03:28.000 --> 00:03:30.000
+And of course, the title is not the only place
+
+00:03:30.001 --> 00:03:32.000
+where information is exchanged.
+
+00:03:32.000 --> 00:03:35.920
+I can find a file and I will be in the directory
+
+00:03:35.920 --> 00:03:37.680
+where my terminal is.
+
+00:03:37.681 --> 00:03:40.000
+This feature is also available in ansi-term,
+
+00:03:40.000 --> 00:03:41.360
+and it works also on vterm,
+
+00:03:41.361 --> 00:03:43.440
+and it follows me. So if I go to tmp,
+
+00:03:43.441 --> 00:03:44.720
+I'll get the tmp.
+
+00:03:44.720 --> 00:03:47.120
+If I ssh to a remote server,
+
+00:03:47.121 --> 00:03:50.239
+it will work also on remote servers as well,
+
+00:03:50.240 --> 00:03:53.920
+which is a very nice way to edit files remotely
+
+00:03:53.920 --> 00:03:55.599
+while we're working on a shell.
+
+00:03:55.600 --> 00:03:59.280
+And second, while vterm is not an Elisp interpreter
+
+00:03:59.281 --> 00:04:01.200
+like eshell, what we can do is
+
+00:04:01.201 --> 00:04:04.720
+we can still run Emacs functions.
+
+00:04:04.721 --> 00:04:06.080
+So for example...
+
+00:04:06.081 --> 00:04:08.000
+that requires some configuration.
+
+00:04:08.001 --> 00:04:11.599
+vterm command (message "hi")
+
+00:04:11.600 --> 00:04:13.120
+as you see there's a "hi" here.
+
+00:04:13.121 --> 00:04:14.959
+So what I'm doing is I'm executing
+
+00:04:14.960 --> 00:04:16.239
+the Elisp function hi.
+
+00:04:16.239 --> 00:04:18.959
+I can drop that and turn it around,
+
+00:04:18.960 --> 00:04:21.600
+hash function to run Elisp functions.
+
+00:04:21.601 --> 00:04:24.880
+Or another one, find-file, same.
+
+00:04:24.880 --> 00:04:27.360
+We call this feature "message passing,"
+
+00:04:27.361 --> 00:04:30.000
+and it requires some configuration
+
+00:04:30.001 --> 00:04:32.000
+on the Emacs side as well as in the shell side.
+
+00:04:32.000 --> 00:04:33.440
+It's important to stress
+
+00:04:33.441 --> 00:04:35.360
+what's the nature of vterm.
+
+00:04:35.360 --> 00:04:37.919
+For instance, every time I'm sending a key binding,
+
+00:04:37.920 --> 00:04:40.000
+it's not immediately clear if my intention is
+
+00:04:40.001 --> 00:04:41.840
+to send it to the shell or to Emacs.
+
+00:04:41.841 --> 00:04:44.320
+So vterm implements some reasonable defaults,
+
+00:04:44.320 --> 00:04:46.800
+but at the moment it's mainly packaged
+
+00:04:46.800 --> 00:04:49.120
+to display characters on a screen.
+
+00:04:49.120 --> 00:04:50.720
+So for example, if you're using evil,
+
+00:04:50.721 --> 00:04:52.639
+the editing commands in evil
+
+00:04:52.640 --> 00:04:54.080
+will not work immediately.
+
+00:04:54.081 --> 00:04:55.759
+There's some work to be done
+
+00:04:55.759 --> 00:04:58.160
+and integration can be improved on that side,
+
+00:04:58.161 --> 00:05:00.240
+but sometimes we really want this to behave
+
+00:05:00.240 --> 00:05:02.240
+exactly like a Emacs buffer.
+
+00:05:02.240 --> 00:05:03.680
+We want to be able to search.
+
+00:05:03.681 --> 00:05:06.639
+If I try to get it to search,
+
+00:05:06.640 --> 00:05:07.280
+it will not work.
+
+00:05:07.281 --> 00:05:08.400
+I will send it to the shell.
+
+00:05:08.401 --> 00:05:11.919
+So to do that, we enabled vterm copy mode.
+
+00:05:11.920 --> 00:05:14.720
+As you see, copy mode, and now this buffer
+
+00:05:14.721 --> 00:05:17.039
+is essentially a fundamental buffer.
+
+00:05:17.039 --> 00:05:21.120
+I can move around. I can search.
+
+00:05:21.120 --> 00:05:25.520
+So it must have... I can do everything I want.
+
+00:05:25.521 --> 00:05:26.479
+And there are additional features.
+
+00:05:26.480 --> 00:05:30.560
+For example, I can jump around all the prompts.
+
+00:05:30.561 --> 00:05:32.639
+I find this extremely useful,
+
+00:05:32.639 --> 00:05:35.039
+because I can copy updates from my programs.
+
+00:05:35.040 --> 00:05:38.320
+What I always have to do is
+
+00:05:38.321 --> 00:05:41.520
+I have to Google some errors.
+
+00:05:41.521 --> 00:05:43.120
+So what I do is I select that
+
+00:05:43.120 --> 00:05:45.120
+and I have my keybinding in Emacs conf,
+
+00:05:45.121 --> 00:05:48.479
+and I'm Googling what I have to Google.
+
+00:05:48.480 --> 00:05:51.120
+So this is very nice and if I...
+
+00:05:51.121 --> 00:05:52.639
+now that I have selected something,
+
+00:05:52.640 --> 00:05:53.840
+if I just press return,
+
+00:05:53.841 --> 00:05:56.400
+I will go back to my normal editing mode
+
+00:05:56.401 --> 00:06:00.160
+with the text copied, so I can paste it back.
+
+00:06:00.161 --> 00:06:02.720
+So it's a quick way to interact with copy
+
+00:06:02.721 --> 00:06:05.840
+and interact with the output of a buffer.
+
+00:06:05.841 --> 00:06:09.120
+So finally, let's discuss how to actually use vterm.
+
+00:06:09.121 --> 00:06:10.560
+Let's circle back, let's go,
+
+00:06:10.560 --> 00:06:12.400
+and let's look at the GitHub repo
+
+00:06:12.400 --> 00:06:14.000
+where development is happening.
+
+00:06:14.001 --> 00:06:15.520
+vterm is available in MELPA,
+
+00:06:15.520 --> 00:06:17.759
+but since it's leveraging the power
+
+00:06:17.760 --> 00:06:18.960
+of an external module,
+
+00:06:18.960 --> 00:06:20.479
+you must have Emacs compiled
+
+00:06:20.480 --> 00:06:22.000
+with support for modules,
+
+00:06:22.000 --> 00:06:25.600
+and many distros like Ubuntu, Debian,
+
+00:06:25.600 --> 00:06:26.880
+that's not there. So you have to
+
+00:06:26.881 --> 00:06:29.199
+get Emacs with support for modules:
+
+00:06:29.200 --> 00:06:31.360
+compiling or getting images somewhere else.
+
+00:06:31.361 --> 00:06:33.840
+And also, the first time you are going to use this,
+
+00:06:33.840 --> 00:06:38.960
+which works only on Mac or GNU Linux systems,
+
+00:06:38.961 --> 00:06:41.759
+Emacs will try to find and compile this module,
+
+00:06:41.759 --> 00:06:44.240
+so it's important. This requirement is important.
+
+00:06:44.241 --> 00:06:46.400
+If you're using Windows, well,
+
+00:06:46.401 --> 00:06:49.199
+it's not available and will not work.
+
+00:06:49.199 --> 00:06:53.440
+So to conclude, I want to just advertise this page.
+
+00:06:53.440 --> 00:06:56.240
+If you have problems, look at the issues
+
+00:06:56.240 --> 00:06:58.240
+and open an issue in case.
+
+00:06:58.241 --> 00:06:59.199
+We'll try to help you.
+
+00:06:59.200 --> 00:07:00.800
+We are very excited about vterm,
+
+00:07:00.800 --> 00:07:02.639
+and I think it's a transformative
+
+00:07:02.639 --> 00:07:10.319
+terminal experience inside GNU Emacs.
diff --git a/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt b/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt
index 9f4d0e06..55af2c4c 100644
--- a/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt
+++ b/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt
@@ -1,733 +1,682 @@
WEBVTT
00:00:01.839 --> 00:00:04.160
-hello EmacsConf
+Hello, EmacsConf!
-00:00:04.160 --> 00:00:05.759
-thanks very much first of all to the
+00:00:04.160 --> 00:00:05.279
+Thanks very much, first of all,
-00:00:05.759 --> 00:00:07.200
-organizers of the conference
+00:00:05.280 --> 00:00:07.200
+to the organizers of the conference
-00:00:07.200 --> 00:00:09.440
-and to the audience who I hope is out
+00:00:07.200 --> 00:00:08.800
+and to the audience,
-00:00:09.440 --> 00:00:10.480
-there somewhere
+00:00:08.801 --> 00:00:10.480
+who I hope is out there somewhere,
-00:00:10.480 --> 00:00:12.080
-uh for giving me this chance to talk
+00:00:10.480 --> 00:00:11.679
+for giving me this chance
-00:00:12.080 --> 00:00:14.240
-about Emacs and some of my uh
+00:00:11.680 --> 00:00:12.880
+to talk about Emacs
-00:00:14.240 --> 00:00:16.560
-my poking around with Emacs lisp my name
+00:00:12.881 --> 00:00:16.240
+and some of my poking around with Emacs Lisp.
-00:00:16.560 --> 00:00:18.480
-is eric abrahamson I'm not
+00:00:16.241 --> 00:00:17.680
+My name is Eric Abrahamsen.
-00:00:18.480 --> 00:00:20.960
-a professional programmer but I use
+00:00:17.681 --> 00:00:20.480
+I'm not a professional programmer,
-00:00:20.960 --> 00:00:21.920
-Emacs all day
+00:00:20.481 --> 00:00:23.039
+but I use Emacs all day, every day,
-00:00:21.920 --> 00:00:24.800
-every day for writing for translating
+00:00:23.040 --> 00:00:24.800
+for writing, for translating,
00:00:24.800 --> 00:00:26.160
-for project management
+for project management,
-00:00:26.160 --> 00:00:28.160
-and most importantly for email which
+00:00:26.160 --> 00:00:27.920
+and most importantly, for email,
-00:00:28.160 --> 00:00:29.199
-will be the
+00:00:27.921 --> 00:00:30.640
+which will be the subject of my talk today.
-00:00:29.199 --> 00:00:32.480
-subject of my talk today so I'm talking
+00:00:30.641 --> 00:00:32.880
+So I'm talking about
-00:00:32.480 --> 00:00:35.440
-about object-oriented code in Emacs
+00:00:32.881 --> 00:00:34.160
+object-oriented code
-00:00:35.440 --> 00:00:38.320
-uh most famous possibly oldest
+00:00:34.161 --> 00:00:38.320
+in Emacs' most famous, possibly oldest,
-00:00:38.320 --> 00:00:40.160
-definitely most notorious news reader
+00:00:38.320 --> 00:00:39.520
+definitely most notorious
-00:00:40.160 --> 00:00:41.760
-slash Emacs client
+00:00:39.521 --> 00:00:42.800
+news reader / email client,
-00:00:41.760 --> 00:00:44.320
-email client so in particular object
+00:00:42.801 --> 00:00:44.000
+so, in particular,
-00:00:44.320 --> 00:00:45.440
-oriented code
+00:00:44.001 --> 00:00:46.000
+object-oriented code in Gnus.
-00:00:45.440 --> 00:00:50.239
-in news why object-oriented code
+00:00:46.001 --> 00:00:50.239
+Why object-oriented code?
-00:00:50.239 --> 00:00:51.920
-the way news works is it started off as
+00:00:50.239 --> 00:00:51.199
+The way Gnus works is
-00:00:51.920 --> 00:00:53.600
-a news reader so for access
+00:00:51.200 --> 00:00:52.480
+it started off as a news reader,
-00:00:53.600 --> 00:00:57.039
-accessing nntp servers and later on grew
+00:00:52.481 --> 00:00:55.920
+so for accessing NNTP servers
-00:00:57.039 --> 00:00:59.120
-a whole bunch of new functionality as a
+00:00:55.921 --> 00:00:57.600
+and later on grew a whole bunch
-00:00:59.120 --> 00:01:01.039
-mail client so it can talk to imap
+00:00:57.601 --> 00:00:59.760
+of new functionality as a mail client,
-00:01:01.039 --> 00:01:02.079
-servers
+00:00:59.761 --> 00:01:02.079
+so it can talk to IMAP servers,
-00:01:02.079 --> 00:01:04.799
-mail dealer directories uh folders on
+00:01:02.079 --> 00:01:04.320
+Maildir directories,
-00:01:04.799 --> 00:01:06.640
-your file system all kinds of stuff
+00:01:04.321 --> 00:01:05.360
+folders on your file system,
-00:01:06.640 --> 00:01:08.400
-but it presents a unified interface to
+00:01:05.361 --> 00:01:06.640
+all kinds of stuff,
-00:01:08.400 --> 00:01:09.760
-all those things so it's basically
+00:01:06.640 --> 00:01:08.320
+but it presents a unified interface
-00:01:09.760 --> 00:01:11.040
-polymorphism
+00:01:08.321 --> 00:01:08.960
+to all those things,
-00:01:11.040 --> 00:01:14.000
-one of the the basic fundamental
+00:01:08.961 --> 00:01:11.040
+so it's basically polymorphism,
-00:01:14.000 --> 00:01:16.400
-principles of object oriented code so
+00:01:11.040 --> 00:01:14.560
+one of the the basic fundamental principles
-00:01:16.400 --> 00:01:18.720
-it's a good fit second reason is it
+00:01:14.561 --> 00:01:15.680
+of object oriented code.
-00:01:18.720 --> 00:01:19.920
-already is
+00:01:15.681 --> 00:01:17.600
+So it's a good fit.
-00:01:19.920 --> 00:01:22.880
-object oriented and I'll get into what
+00:01:17.601 --> 00:01:21.439
+Second reason is it already is object-oriented,
-00:01:22.880 --> 00:01:23.759
-that means
+00:01:21.440 --> 00:01:25.280
+and I'll get into what that means in a second.
-00:01:23.759 --> 00:01:27.280
-in a second so
+00:01:25.281 --> 00:01:28.479
+So the background that you should know
-00:01:27.280 --> 00:01:28.640
-the background that you should know is
+00:01:28.480 --> 00:01:30.000
+is that most of this code
-00:01:28.640 --> 00:01:30.640
-that most of this code was written in
-
-00:01:30.640 --> 00:01:32.560
-the 90s
+00:01:30.001 --> 00:01:32.560
+was written in the 90s.
00:01:32.560 --> 00:01:34.880
-Emacs lisp has only grown sort of
-
-00:01:34.880 --> 00:01:36.159
-official
+Emacs Lisp has only grown sort of
-00:01:36.159 --> 00:01:38.640
-object orientation support libraries
+00:01:34.881 --> 00:01:38.640
+official object orientation support libraries
00:01:38.640 --> 00:01:41.200
-over the past 10 years or so
-
-00:01:41.200 --> 00:01:43.840
-from about 2010 to the present so what
-
-00:01:43.840 --> 00:01:44.799
-does
-
-00:01:44.799 --> 00:01:48.640
-news do so the basics of
+over the past 10 years or so,
-00:01:48.640 --> 00:01:50.560
-object orientation in most languages are
+00:01:41.200 --> 00:01:42.799
+from about 2010 to the present.
-00:01:50.560 --> 00:01:52.240
-you you define
+00:01:42.800 --> 00:01:45.920
+So what does Gnus do?
-00:01:52.240 --> 00:01:53.759
-a class of some sort and then you
+00:01:45.921 --> 00:01:49.520
+So the basics of object orientation
-00:01:53.759 --> 00:01:55.840
-instantiate that class and these
+00:01:49.521 --> 00:01:50.560
+in most languages are:
-00:01:55.840 --> 00:01:58.079
-class instances have two things they
+00:01:50.560 --> 00:01:53.439
+you define a class of some sort,
-00:01:58.079 --> 00:02:00.320
-have data attributes or
+00:01:53.440 --> 00:01:55.040
+and then you instantiate that class.
-00:02:00.320 --> 00:02:01.759
-slots or members or whatever you're
+00:01:55.041 --> 00:01:57.920
+These class instances have two things:
-00:02:01.759 --> 00:02:04.799
-going to call them and they have
+00:01:57.921 --> 00:02:00.719
+they have data attributes (or slots,
-00:02:04.799 --> 00:02:07.280
-methods which operate on individual
+00:02:00.720 --> 00:02:01.680
+or members, or whatever
-00:02:07.280 --> 00:02:08.399
-instances
+00:02:01.681 --> 00:02:02.640
+you're going to call them),
-00:02:08.399 --> 00:02:11.120
-so you could say that you create or
+00:02:02.641 --> 00:02:05.600
+and they have methods
-00:02:11.120 --> 00:02:12.879
-instantiate an instance of a class in
+00:02:05.601 --> 00:02:08.399
+which operate on individual instances.
-00:02:12.879 --> 00:02:13.920
-that instance
+00:02:08.399 --> 00:02:10.239
+So you could say that
-00:02:13.920 --> 00:02:16.239
-owns two things that owns its set of
+00:02:10.240 --> 00:02:11.840
+you create or instantiate
-00:02:16.239 --> 00:02:17.120
-attributes
+00:02:11.841 --> 00:02:12.800
+an instance of a class,
-00:02:17.120 --> 00:02:20.239
-and it owns some methods which
+00:02:12.801 --> 00:02:14.800
+and that instance owns two things.
-00:02:20.239 --> 00:02:23.280
-also work on the on the instance
+00:02:14.801 --> 00:02:17.120
+That owns its set of attributes,
-00:02:23.280 --> 00:02:26.720
-so both in nurse's existing code and in
+00:02:17.120 --> 00:02:19.520
+and it owns some methods,
-00:02:26.720 --> 00:02:29.040
-the more standard object oriented Emacs
+00:02:19.521 --> 00:02:23.280
+which also work on the instance.
-00:02:29.040 --> 00:02:30.080
-lisp libraries
+00:02:23.280 --> 00:02:25.680
+Both in Gnus' existing code
-00:02:30.080 --> 00:02:32.480
-this relationship is turned on its head
+00:02:25.681 --> 00:02:28.560
+and in the more standard object-oriented
-00:02:32.480 --> 00:02:34.080
-a little bit
+00:02:28.561 --> 00:02:31.680
+Emacs Lisp libraries, this relationship
-00:02:34.080 --> 00:02:37.599
-in that data slots and
+00:02:31.681 --> 00:02:34.080
+is turned on its head a little bit,
-00:02:37.599 --> 00:02:40.239
-uh and instance methods are defined
+00:02:34.080 --> 00:02:39.599
+in that data slots and instance methods
-00:02:40.239 --> 00:02:41.360
-outside of the
+00:02:39.600 --> 00:02:41.760
+are defined outside of the class
-00:02:41.360 --> 00:02:42.959
-class or the instances themselves so
+00:02:41.761 --> 00:02:42.959
+or the instances themselves.
00:02:42.959 --> 00:02:45.040
-they are top level definitions
+They are top-level definitions.
00:02:45.040 --> 00:02:46.879
-so we'll get to what that means in the
+We'll get to what that means
-00:02:46.879 --> 00:02:48.319
-in the newer libraries um
+00:02:46.879 --> 00:02:48.720
+in the newer libraries in a bit,
-00:02:48.319 --> 00:02:49.840
-in a bit but uh first I want to talk
+00:02:48.721 --> 00:02:49.920
+but first I want to talk about
-00:02:49.840 --> 00:02:51.760
-about how news does this and in order to
+00:02:49.921 --> 00:02:51.280
+how Gnus does this.
-00:02:51.760 --> 00:02:54.319
-do that we are going to go deep into
+00:02:51.281 --> 00:02:52.160
+In order to do that,
-00:02:54.319 --> 00:02:57.440
-the darkest corner of the new co source
+00:02:52.161 --> 00:02:54.319
+we are going to go deep into
-00:02:57.440 --> 00:02:59.879
-code tree to a library called
+00:02:54.319 --> 00:02:55.760
+the darkest corner
-00:02:59.879 --> 00:03:02.879
-nno.l very cryptically
+00:02:55.761 --> 00:02:58.080
+of the Gnus source code tree
-00:03:02.879 --> 00:03:05.040
-titled uh library and when we open it up
+00:02:58.081 --> 00:03:01.440
+to a library called nnoo.el,
-00:03:05.040 --> 00:03:06.800
-we find
+00:03:01.441 --> 00:03:04.080
+very cryptically-titled library,
-00:03:06.800 --> 00:03:09.519
-a library with no code comments and
+00:03:04.081 --> 00:03:06.800
+and when we open it up, we find
-00:03:09.519 --> 00:03:11.040
-almost no doc strings
+00:03:06.800 --> 00:03:09.280
+a library with no code comments
+
+00:03:09.281 --> 00:03:11.040
+and almost no doc strings.
00:03:11.040 --> 00:03:12.800
-almost as if lars was a little ashamed
+Almost as if Lars was a little ashamed--
00:03:12.800 --> 00:03:14.159
-not ashamed but knew he was doing
+not ashamed, but knew he was doing
00:03:14.159 --> 00:03:16.000
something a little bit crazy
-00:03:16.000 --> 00:03:19.040
-and didn't want anyone to see so
+00:03:16.000 --> 00:03:18.080
+and didn't want anyone to see.
-00:03:19.040 --> 00:03:21.040
-this file contains the the object
+00:03:18.081 --> 00:03:20.560
+So this file contains
-00:03:21.040 --> 00:03:22.400
-oriented mechanism
+00:03:20.561 --> 00:03:22.400
+the object-oriented mechanism
-00:03:22.400 --> 00:03:24.480
-whereby you can define different kinds
+00:03:22.400 --> 00:03:23.920
+whereby you can define
-00:03:24.480 --> 00:03:25.760
-of back ends for news
+00:03:23.921 --> 00:03:25.760
+different kinds of backends for Gnus,
-00:03:25.760 --> 00:03:27.280
-and then those back ends can be
+00:03:25.760 --> 00:03:26.799
+and then those backends
-00:03:27.280 --> 00:03:29.760
-instantiated as individual
+00:03:26.800 --> 00:03:30.879
+can be instantiated as individual servers.
-00:03:29.760 --> 00:03:32.480
-servers and as you define these backends
+00:03:30.880 --> 00:03:32.480
+As you define these backends,
-00:03:32.480 --> 00:03:33.360
-you're supposed to use
+00:03:32.480 --> 00:03:34.319
+you're supposed to use two macros,
-00:03:33.360 --> 00:03:36.000
-two macros which you can see here one is
+00:03:34.320 --> 00:03:35.680
+which you can see here.
-00:03:36.000 --> 00:03:36.640
-called def
+00:03:35.681 --> 00:03:37.280
+One is called defvoo,
-00:03:36.640 --> 00:03:39.599
-vu and one is called defu and if you
+00:03:37.281 --> 00:03:39.440
+and one is called deffoo.
-00:03:39.599 --> 00:03:41.280
-look at the definitions the definitions
+00:03:39.441 --> 00:03:40.400
+If you look at the definitions,
-00:03:41.280 --> 00:03:43.280
-look pretty simple here def vu basically
+00:03:40.401 --> 00:03:41.920
+the definitions look pretty simple.
-00:03:43.280 --> 00:03:45.440
-turns into a def var
+00:03:41.921 --> 00:03:45.440
+Here, defvoo basically turns into a defvar
00:03:45.440 --> 00:03:49.040
-and foo turns into a defund
+and foo turns into a defun.
00:03:49.040 --> 00:03:52.239
-and along with those basic definitions
+Along with those basic definitions,
00:03:52.239 --> 00:03:55.760
-the library also does some registration
+the library also does some registration,
00:03:55.760 --> 00:03:58.720
-memoization caching of those variables
-
-00:03:58.720 --> 00:04:00.080
-it saves them in the structure
-
-00:04:00.080 --> 00:04:01.840
-for later use so that we know that those
-
-00:04:01.840 --> 00:04:03.360
-are meant to be
-
-00:04:03.360 --> 00:04:05.280
-uh attributes and methods that are used
+memoization, caching of those variables.
-00:04:05.280 --> 00:04:06.640
-with instances
+00:03:58.720 --> 00:04:00.879
+It saves them in the structure for later use,
-00:04:06.640 --> 00:04:08.000
-with server instances but you can see
+00:04:00.880 --> 00:04:03.360
+so that we know that those are meant to be
-00:04:08.000 --> 00:04:09.280
-that there's no server instance
+00:04:03.360 --> 00:04:04.799
+attributes and methods
-00:04:09.280 --> 00:04:10.560
-definition here there's no
+00:04:04.800 --> 00:04:06.640
+that are used with instances,
-00:04:10.560 --> 00:04:13.200
-like no nothing these are top level
+00:04:06.640 --> 00:04:07.519
+with server instances.
-00:04:13.200 --> 00:04:14.239
-these are top level
+00:04:07.520 --> 00:04:08.159
+But you can see that
-00:04:14.239 --> 00:04:18.160
-definitions so really data attributes
+00:04:08.160 --> 00:04:10.000
+there's no server instance definition here.
-00:04:18.160 --> 00:04:18.639
-for
+00:04:10.001 --> 00:04:12.159
+There's no, like, no nothing.
-00:04:18.639 --> 00:04:22.000
-new servers and
+00:04:12.160 --> 00:04:14.799
+These are top-level definitions,
-00:04:22.000 --> 00:04:23.840
-methods or functions that operate on
+00:04:14.800 --> 00:04:20.239
+so really, data attributes for new servers
-00:04:23.840 --> 00:04:25.440
-those instances are completely
+00:04:20.240 --> 00:04:23.040
+and methods or functions
-00:04:25.440 --> 00:04:28.400
-separate mechanisms they don't really
+00:04:23.041 --> 00:04:24.639
+that operate on those instances
-00:04:28.400 --> 00:04:29.600
-have anything to do with each other they
+00:04:24.640 --> 00:04:27.840
+are completely separate mechanisms.
-00:04:29.600 --> 00:04:31.680
-don't belong to the same data structures
+00:04:27.841 --> 00:04:29.040
+They don't really have anything to do
-00:04:31.680 --> 00:04:37.120
-so how do they work follow me
+00:04:29.041 --> 00:04:29.520
+with each other.
-00:04:37.120 --> 00:04:39.520
-aka methods and attributes these are all
+00:04:29.521 --> 00:04:31.680
+They don't belong to the same data structures.
-00:04:39.520 --> 00:04:41.360
-the things I just said
+00:04:31.680 --> 00:04:34.080
+So how do they work?
-00:04:41.360 --> 00:04:44.479
-so when you define a
+00:04:34.081 --> 00:04:37.120
+Follow me. deffoo and defvoo,
-00:04:44.479 --> 00:04:48.560
-a backend type
+00:04:37.120 --> 00:04:38.960
+aka methods and attributes,
-00:04:48.560 --> 00:04:51.199
-in noose what you get is this a
+00:04:38.961 --> 00:04:41.360
+these are all the things I just said.
-00:04:51.199 --> 00:04:52.400
-definition a list
+00:04:41.360 --> 00:04:50.240
+So when you define a a backend type in Gnus,
-00:04:52.400 --> 00:04:54.080
-and it'll say there is such a back end
+00:04:50.241 --> 00:04:52.400
+what you get is this: a definition, a list.
-00:04:54.080 --> 00:04:55.520
-as nnml
+00:04:52.400 --> 00:04:55.520
+It'll say, there is such a backend as nnml,
00:04:55.520 --> 00:04:58.880
-and these are its uh data attributes
+and these are its data attributes
-00:04:58.880 --> 00:04:59.520
-that any
+00:04:58.880 --> 00:05:01.039
+that any given instance can have,
-00:04:59.520 --> 00:05:01.840
-given instance can have and then these
+00:05:01.040 --> 00:05:04.720
+and then these are the functions or methods
-00:05:01.840 --> 00:05:02.960
-are
+00:05:04.721 --> 00:05:06.880
+that are defined to operate on
-00:05:02.960 --> 00:05:04.960
-the functions or methods that are
+00:05:06.880 --> 00:05:08.240
+an instance of this backend,
-00:05:04.960 --> 00:05:06.880
-defined to operate on
+00:05:08.241 --> 00:05:09.600
+so a server that belongs to
-00:05:06.880 --> 00:05:08.960
-an instance of this backend so a server
+00:05:09.601 --> 00:05:12.160
+the nnml backend.
-00:05:08.960 --> 00:05:11.440
-that belongs to the nnml
+00:05:12.161 --> 00:05:13.600
+So at least we have this data here.
-00:05:11.440 --> 00:05:13.360
-backend so at least we have this data
+00:05:13.601 --> 00:05:16.080
+That's handy. We don't really touch that.
-00:05:13.360 --> 00:05:15.120
-here so that's that's handy we don't you
+00:05:16.081 --> 00:05:19.600
+That's, like, very, very, very deep Gnus code
-00:05:15.120 --> 00:05:16.880
-don't really touch that that's like very
+00:05:19.601 --> 00:05:20.560
+that doesn't really come up
-00:05:16.880 --> 00:05:18.000
-very very deep
+00:05:20.560 --> 00:05:25.199
+even as a bug squasher or whatever.
-00:05:18.000 --> 00:05:20.560
-um use code that doesn't really come up
+00:05:25.200 --> 00:05:26.160
+We don't touch that very often,
-00:05:20.560 --> 00:05:22.560
-even as a
+00:05:26.161 --> 00:05:26.800
+but there they are,
-00:05:22.560 --> 00:05:25.280
-even as a bug squasher or whatever we
+00:05:26.801 --> 00:05:29.199
+and that's how they work.
-00:05:25.280 --> 00:05:26.479
-don't touch that very often but there
+00:05:29.200 --> 00:05:31.039
+Now the next thing that obviously
-00:05:26.479 --> 00:05:27.280
-they are and that's
+00:05:31.040 --> 00:05:32.080
+you want to know is, okay,
-00:05:27.280 --> 00:05:30.400
-that's how they work now the next thing
+00:05:32.080 --> 00:05:33.759
+where are... if I've started up Gnus,
-00:05:30.400 --> 00:05:32.080
-that obviously you want to know is okay
+00:05:33.760 --> 00:05:35.039
+where are my servers?
-00:05:32.080 --> 00:05:34.000
-where are if I've started up news where
+00:05:35.039 --> 00:05:36.880
+Where are these server objects,
-00:05:34.000 --> 00:05:35.039
-are my servers
+00:05:36.881 --> 00:05:40.479
+since this is object-oriented programming?
-00:05:35.039 --> 00:05:37.199
-uh where are these server objects since
+00:05:40.480 --> 00:05:41.520
+And the weird thing
-00:05:37.199 --> 00:05:39.199
-this is object oriented
+00:05:41.521 --> 00:05:43.759
+that you will eventually figure out
-00:05:39.199 --> 00:05:41.840
-programming and the weird thing that you
+00:05:43.760 --> 00:05:45.680
+(in some cases, after years of poking around)
-00:05:41.840 --> 00:05:43.199
-will eventually
+00:05:45.681 --> 00:05:46.880
+in the Gnus source code
-00:05:43.199 --> 00:05:45.199
-figure out in some cases after years of
+00:05:46.880 --> 00:05:48.880
+is that servers do not exist
-00:05:45.199 --> 00:05:46.880
-poking around in the new source code
+00:05:48.881 --> 00:05:51.360
+in an ontological, philosophical sense,
-00:05:46.880 --> 00:05:49.199
-is that servers do not exist in an
+00:05:51.361 --> 00:05:55.280
+as objects. The primary data structures of Gnus
-00:05:49.199 --> 00:05:50.320
-ontological
+00:05:55.281 --> 00:05:58.160
+are groups, and in sort of
-00:05:50.320 --> 00:05:53.440
-philosophical sense as objects the
+00:05:58.161 --> 00:06:00.560
+an object-oriented hierarchical mindset,
-00:05:53.440 --> 00:05:55.440
-primary data structures of noose are
+00:06:00.561 --> 00:06:03.039
+you'd think, well, groups belong to servers,
-00:05:55.440 --> 00:05:57.039
-groups
+00:06:03.040 --> 00:06:05.759
+so servers must exist, but they don't.
-00:05:57.039 --> 00:05:58.960
-and in sort of an object-oriented
+00:06:05.759 --> 00:06:07.840
+Each group... And here you can see
-00:05:58.960 --> 00:06:00.720
-hierarchical you know mindset you'd
-
-00:06:00.720 --> 00:06:01.759
-think well
-
-00:06:01.759 --> 00:06:03.759
-groups belong to servers so servers must
-
-00:06:03.759 --> 00:06:05.759
-exist but they don't
-
-00:06:05.759 --> 00:06:08.000
-each group and here you can see some
-
-00:06:08.000 --> 00:06:09.360
-examples of groups
+00:06:07.841 --> 00:06:09.360
+some examples of groups...
00:06:09.360 --> 00:06:11.199
-these are basically the data structures
+These are basically the data structures
-00:06:11.199 --> 00:06:13.039
-that represent a group each group also
+00:06:11.199 --> 00:06:12.240
+that represent a group.
-00:06:13.039 --> 00:06:14.960
-has a little entry here that
+00:06:12.241 --> 00:06:14.160
+Each group also has a little entry here
-00:06:14.960 --> 00:06:17.039
-that tells you what server it belongs to
+00:06:14.161 --> 00:06:17.039
+that tells you what server it belongs to,
-00:06:17.039 --> 00:06:18.000
-and each group
+00:06:17.039 --> 00:06:20.080
+and each group replicates that data,
-00:06:18.000 --> 00:06:20.479
-replicates that data uh saying which
+00:06:20.081 --> 00:06:21.600
+saying which server it belongs to.
-00:06:20.479 --> 00:06:23.120
-server it belongs to and so when
+00:06:21.601 --> 00:06:24.000
+So when Gnus is going through
-00:06:23.120 --> 00:06:24.479
-nurse is going through doing its
+00:06:24.001 --> 00:06:25.280
+doing its business,
-00:06:24.479 --> 00:06:26.160
-business uh trying to figure out what's
+00:06:25.281 --> 00:06:27.039
+trying to figure out updating mail
-00:06:26.160 --> 00:06:27.680
-like updating mail from the groups or
+00:06:27.040 --> 00:06:28.479
+from the groups or whatever,
-00:06:27.680 --> 00:06:29.840
-whatever almost every time
+00:06:28.480 --> 00:06:30.960
+almost every time, it will cycle through
-00:06:29.840 --> 00:06:31.600
-it will cycle through all the list of
-
-00:06:31.600 --> 00:06:32.960
-groups it'll
+00:06:30.961 --> 00:06:32.960
+all the list of groups.
00:06:32.960 --> 00:06:34.960
-it'll look at all the server definitions
-
-00:06:34.960 --> 00:06:36.720
-and it will categorize the groups by
+It'll look at all the server definitions,
-00:06:36.720 --> 00:06:38.160
-server
+00:06:34.960 --> 00:06:38.160
+and it will categorize the groups by server,
-00:06:38.160 --> 00:06:41.120
-which which is just weird because you're
+00:06:38.160 --> 00:06:40.000
+which is just weird,
-00:06:41.120 --> 00:06:42.160
-sort of looking for okay where does the
+00:06:40.001 --> 00:06:41.680
+because you're sort of looking for...
-00:06:42.160 --> 00:06:43.840
-server exist it doesn't exist it's put
+00:06:41.681 --> 00:06:42.720
+okay, where does the server exist?
-00:06:43.840 --> 00:06:44.479
-together
+00:06:42.721 --> 00:06:43.440
+It doesn't exist.
-00:06:44.479 --> 00:06:48.319
-every time uh out of out of code
+00:06:43.441 --> 00:06:46.240
+It's put together every time
-00:06:48.319 --> 00:06:50.400
-elsewhere in the news code base
+00:06:46.241 --> 00:06:50.400
+out of code elsewhere in the Gnus code base,
-00:06:50.400 --> 00:06:51.840
-specifically from these group
+00:06:50.400 --> 00:06:53.599
+specifically from these group definitions.
-00:06:51.840 --> 00:06:54.080
-these group definitions and so this is
+00:06:53.600 --> 00:06:54.479
+So this is very odd,
-00:06:54.080 --> 00:06:55.199
-very odd because
+00:06:54.480 --> 00:06:56.319
+because in some sense...
-00:06:55.199 --> 00:06:58.080
-in in some sense like here this one its
+00:06:56.320 --> 00:06:59.360
+Like here, this one, its server is nnml
-00:06:58.080 --> 00:06:58.720
-server is
+00:06:59.361 --> 00:07:01.680
+and an empty string,
-00:06:58.720 --> 00:07:02.240
-nnml and an empty string so there's a
+00:07:01.681 --> 00:07:02.880
+so there's a certain sense here
-00:07:02.240 --> 00:07:03.919
-certain sense here in which this server
+00:07:02.881 --> 00:07:04.720
+in which this server is not really
-00:07:03.919 --> 00:07:04.479
-is not
+00:07:04.721 --> 00:07:06.160
+an object at all. What it is
-00:07:04.479 --> 00:07:06.400
-really an object at all what it is is a
+00:07:06.161 --> 00:07:07.120
+is a set of instructions
-00:07:06.400 --> 00:07:07.759
-set of instructions for how to find
+00:07:07.121 --> 00:07:08.560
+for how to find messages,
-00:07:07.759 --> 00:07:08.560
-messages
+00:07:08.560 --> 00:07:10.319
+and this set of instructions is:
-00:07:08.560 --> 00:07:11.199
-and this set of instructions is go to
+00:07:10.320 --> 00:07:12.000
+go to the default place
-00:07:11.199 --> 00:07:12.800
-the default place where the user
+00:07:12.001 --> 00:07:14.000
+where the user might have their mail
-00:07:12.800 --> 00:07:15.440
-might have their mail and expect to find
+00:07:14.001 --> 00:07:16.319
+and expect to find messages there
-00:07:15.440 --> 00:07:16.000
-messages
+00:07:16.320 --> 00:07:18.479
+in an nnml format, which is basically
-00:07:16.000 --> 00:07:18.080
-there in an nml format which is
+00:07:18.480 --> 00:07:21.759
+just one message per file.
-00:07:18.080 --> 00:07:19.840
-basically just one message per
+00:07:21.760 --> 00:07:22.720
+Any number of groups could have
-00:07:19.840 --> 00:07:22.479
-um per file and any number of groups
+00:07:22.721 --> 00:07:24.400
+those same instructions, but they're not...
-00:07:22.479 --> 00:07:23.840
-could have those same instructions uh
-
-00:07:23.840 --> 00:07:25.440
-but they're not it's not really a thing
+00:07:24.401 --> 00:07:25.440
+It's not really a thing.
00:07:25.440 --> 00:07:26.720
-it's really just a
+It's really just a...
00:07:26.720 --> 00:07:28.639
-it's more of a procedural instruction
-
-00:07:28.639 --> 00:07:30.240
-and on the other end of the spectrum you
+It's more of a procedural instruction.
-00:07:30.240 --> 00:07:31.919
-might have an nni map
+00:07:28.639 --> 00:07:30.160
+On the other end of the spectrum,
-00:07:31.919 --> 00:07:33.599
-server which very much is a thing it has
+00:07:30.161 --> 00:07:32.240
+you might have an nnimap server,
-00:07:33.599 --> 00:07:35.840
-its own it has its own server its own
+00:07:32.241 --> 00:07:33.280
+which very much is a thing.
-00:07:35.840 --> 00:07:37.759
-port its own authentication
+00:07:33.281 --> 00:07:36.160
+It has its own server, its own port,
-00:07:37.759 --> 00:07:40.240
-system so some of the servers are more
+00:07:36.161 --> 00:07:38.960
+its own authentication system.
-00:07:40.240 --> 00:07:41.360
-like things some of the servers are more
+00:07:38.961 --> 00:07:40.639
+So some of the servers are more like things,
-00:07:41.360 --> 00:07:42.400
-like instructions
+00:07:40.640 --> 00:07:42.400
+some of the servers are more like instructions.
00:07:42.400 --> 00:07:45.520
-as news works right now um these
+As Gnus works right now,
00:07:45.520 --> 00:07:47.280
most of the servers are treated like
00:07:47.280 --> 00:07:48.879
-just instruction sets
+just instruction sets,
00:07:48.879 --> 00:07:50.879
-and and there's no place where you can
+and there's no place where you can
-00:07:50.879 --> 00:07:53.120
-go and find them there's no one central
+00:07:50.880 --> 00:07:51.840
+go and find them.
-00:07:53.120 --> 00:07:55.360
-uh variable that defines them all so how
+00:07:51.841 --> 00:07:53.680
+There's no one central variable
-00:07:55.360 --> 00:07:56.160
-do the
+00:07:53.681 --> 00:07:56.160
+that defines them all. So how do the...
-00:07:56.160 --> 00:07:57.520
-um so we'll talk about the methods in a
+00:07:56.160 --> 00:07:57.759
+We'll talk about the methods in a second.
-00:07:57.520 --> 00:07:59.520
-second how do the data attributes work
+00:07:57.760 --> 00:07:59.520
+How do the data attributes work?
00:07:59.520 --> 00:08:02.639
-uh put very crudely um
+Put very crudely,
00:08:02.639 --> 00:08:04.479
-your servers when they're put together
+your servers, when they're put together,
-00:08:04.479 --> 00:08:05.919
-uh they are okay they are
+00:08:04.479 --> 00:08:06.879
+they are kept in a variable,
-00:08:05.919 --> 00:08:08.080
-kept in a variable and it's called nno
+00:08:06.880 --> 00:08:08.080
+and it's called nnoo
00:08:08.080 --> 00:08:08.960
nno
diff --git a/2020/talks/16.md b/2020/talks/16.md
index 66f4a5eb..13f67e26 100644
--- a/2020/talks/16.md
+++ b/2020/talks/16.md
@@ -3,11 +3,11 @@
<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
-
Back to the [[schedule]]
Previous: <a href="/2020/talks/15">Moving from Jekyll to OrgMode, an experience report</a>
Next: <a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a>
+[[!taglink CategoryOrgRoam]]
[[!inline pages="internal(2020/info/16)" raw="yes"]]
diff --git a/2020/talks/17.md b/2020/talks/17.md
index 2e234180..cb6be4f5 100644
--- a/2020/talks/17.md
+++ b/2020/talks/17.md
@@ -8,6 +8,7 @@ Back to the [[schedule]]
Previous: <a href="/2020/talks/16">Org-roam: Presentation, Demonstration, and What's on the Horizon</a>
Next: <a href="/2020/talks/18">Org-roam: Technical Presentation</a>
+[[!taglink CategoryOrgRoam]]
[[!inline pages="internal(2020/info/17)" raw="yes"]]
diff --git a/2020/talks/18.md b/2020/talks/18.md
index 460e0c63..2623a4cb 100644
--- a/2020/talks/18.md
+++ b/2020/talks/18.md
@@ -3,11 +3,11 @@
<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
-
Back to the [[schedule]]
Previous: <a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a>
Next: <a href="/2020/talks/19">Sharing blogs (and more) with org-webring</a>
+[[!taglink CategoryOrgRoam]]
[[!inline pages="internal(2020/info/18)" raw="yes"]]
diff --git a/2020/talks/28.md b/2020/talks/28.md
index 3dae6103..bae5f837 100644
--- a/2020/talks/28.md
+++ b/2020/talks/28.md
@@ -8,6 +8,11 @@ Back to the [[schedule]]
Previous: <a href="/2020/talks/27">State of Retro Gaming in Emacs</a>
Next: <a href="/2020/talks/29">Pathing of Least Resistance</a>
+[[!template id="help" tags="help_with_main_captions"
+summary="main talk does not have captions"
+volunteer=""
+message="""This talk does not have captions yet. Would you like to help [caption this talk](/help_with_main_captions)? You may be able to start with these
+[autogenerated captions](/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt)."""]]
[[!inline pages="internal(2020/info/28)" raw="yes"]]
diff --git a/2020/talks/30.md b/2020/talks/30.md
index 249e3ca2..1b6c41f4 100644
--- a/2020/talks/30.md
+++ b/2020/talks/30.md
@@ -8,7 +8,6 @@ Back to the [[schedule]]
Previous: <a href="/2020/talks/29">Pathing of Least Resistance</a>
Next: <a href="/2020/talks/31">Lakota Language and Emacs</a>
-
[[!inline pages="internal(2020/info/30)" raw="yes"]]
Sunday, Nov 29 2020, ~ 2:45 PM - 2:55 PM EST
diff --git a/2020/talks/31.md b/2020/talks/31.md
index 0c5bfb79..4d6b308f 100644
--- a/2020/talks/31.md
+++ b/2020/talks/31.md
@@ -8,6 +8,11 @@ Back to the [[schedule]]
Previous: <a href="/2020/talks/30">A tour of vterm</a>
Next: <a href="/2020/talks/32">Object Oriented Code in the Gnus Newsreader</a>
+[[!template id="help" tags="help_with_main_captions"
+summary="main talk does not have captions"
+volunteer=""
+message="""This talk does not have captions yet. Would you like to help [caption this talk](/help_with_main_captions)? You may be able to start with these
+[autogenerated captions](/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt)."""]]
[[!inline pages="internal(2020/info/31)" raw="yes"]]
diff --git a/2020/talks/32.md b/2020/talks/32.md
index 29254e52..ed6eaa81 100644
--- a/2020/talks/32.md
+++ b/2020/talks/32.md
@@ -3,11 +3,16 @@
<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
-
Back to the [[schedule]]
Previous: <a href="/2020/talks/31">Lakota Language and Emacs</a>
Next: <a href="/2020/talks/33">Maxima a computer algebra system in Emacs</a>
+[[!template id="help" tags="help_with_main_captions"
+summary="main talk does not have captions"
+volunteer="sachac"
+message="""This talk does not have captions yet. Would you like to help [caption this talk](/help_with_main_captions)? You may be able to start with these
+[autogenerated captions](/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt)."""]]
+
[[!inline pages="internal(2020/info/32)" raw="yes"]]
diff --git a/2021.md b/2021.md
new file mode 100644
index 00000000..ff4b4cc8
--- /dev/null
+++ b/2021.md
@@ -0,0 +1,77 @@
+[[!meta copyright="Copyright &copy; 2021 Amin Bandali"]]
+
+<p class="center">EmacsConf 2021 | Online Conference |
+<strong>November 27 and 28, 2021 (Sat-Sun)</strong></p>
+
+<p class="center">[[!img /i/emacsconf-logo1-256.png
+alt="EmacsConf logo"]]</p>
+
+<p class="center">[[<strong>Schedule</strong>|talks]] |
+[[<strong>Resources</strong>|all]] |
+[[Posters|poster]] | [[Planning]] |
+[[Guidelines for Conduct|conduct]]</p>
+
+<p class="center">EmacsConf is the conference about the joy of
+<a href="https://www.gnu.org/software/emacs/">Emacs</a> and
+Emacs Lisp.</p>
+
+We held EmacsConf 2021 as an online conference again this year.
+We remain fully committed to freedom, and we will continue using our
+infrastructure and streaming setup consisting entirely of [free
+software][freesw], much like previous EmacsConf conferences.
+
+## Watching
+
+To watch the recordings now that the conference is over, head over to the [[index of EmacsConf 2021 resources|all]]
+or go to the individual talk pages in the [[schedule|talks]]. You can also see them on the [the
+EmacsConf 2021 media page](https://media.emacsconf.org/2021/). It includes
+videos of all the talks, with their captions, notes, Toobnix links, and more!
+There's even an [m3u playlist](https://media.emacsconf.org/2021/index.m3u) with
+all the videos for easy, local watching.
+
+## Participating
+
+For audience questions specifically, we used a
+collaboratively-editable Etherpad as the primary means of collecting
+audience questions. <https://etherpad.wikimedia.org/p/emacsconf-2021>
+
+You can also ask questions or hang out with us in the `#emacsconf`
+channel on `irc.libera.chat` (the [Libera.Chat][libera] IRC network).
+You can join the chat using
+[your favourite IRC client][libera-emacsconf],
+[your favourite Matrix client][matrix-emacsconf], or by visiting
+[chat.emacsconf.org][chat] in your web browser.
+
+[emacs]: https://www.gnu.org/software/emacs/
+[freesw]: https://www.gnu.org/philosophy/free-sw.html
+[libera]: https://libera.chat
+[libera-emacsconf]: ircs://irc.libera.chat:6697/emacsconf
+[matrix-emacsconf]: https://matrix.to/#/#emacsconf:libera.chat
+[chat]: https://chat.emacsconf.org
+
+## Alternate Stream for APAC
+
+There was also an alternate stream suitable for APAC hours, see
+<https://libreau.org/past.html#emacsconf21>.
+
+## Contributing
+
+EmacsConf 2021 is over, but there's still a lot more work to do. [[Come help out!|contribute]]
+
+- Volunteers:
+ - bandali (Amin Bandali): main organization, communications
+ - zaeph (Leo Vivier): meeting chair, notes, communications
+ - mplsCorwin (Corwin Brust): FOSSHost
+ - sachac (Sacha Chua): schedule, captions, video conversion, publishing
+ - seabass (Sebastian Crane), dto (David O'Toole): ideas
+ - zleap (Paul Sutton), garulfo (Garulfo Azules),
+ alphapapa (Adam Porter): beautiful posters for EmacsConf 2021
+ - Yuchen Pei: alternate stream for APAC timezones
+ - Captions:
+ - bhavin192 (Bhavin Gandhi)
+ - Hannah Miller
+ - John Cummings
+
+## Archive
+
+[[Call for Proposals|cfp]] | [[Ideas]] | [[Submit]] | [[Prepare]]
diff --git a/2021/all-include.md b/2021/all-include.md
new file mode 100644
index 00000000..77408164
--- /dev/null
+++ b/2021/all-include.md
@@ -0,0 +1,289 @@
+<ol class="videos"><li><div class="title"><a href="https://emacsconf.org/2021/talks/day1-open">Opening remarks</a></div><div class="speakers"></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/news">Emacs News Highlights</a></div><div class="speakers">Sacha Chua</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.webm">Download .webm video (4:24, 6.1MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/ueMACQQh39buYwf5K9Y5fh">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.003" data-stop="11.023">00:00 Introduction</li>
+<li data-start="11.024" data-stop="24.987">00:11 Upcoming Emacs 28 release</li>
+<li data-start="24.988" data-stop="57.125">00:24 Org mode 9.5</li>
+<li data-start="57.126" data-stop="78.107">00:57 Magit major release</li>
+<li data-start="78.108" data-stop="111.283">01:18 Completion</li>
+<li data-start="111.284" data-stop="132.064">01:51 Embark</li>
+<li data-start="132.065" data-stop="164.655">02:12 tree-sitter</li>
+<li data-start="164.656" data-stop="183.656">02:44 Collaborative editing</li>
+<li data-start="183.657" data-stop="221.737">03:03 Graphical experiments</li>
+<li data-start="221.738" data-stop="240.070">03:41 Community</li>
+<li data-start="240.071" data-stop="241.071">04:00 libera.chat</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/frownies">The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability</a></div><div class="speakers">Case Duckworth</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.webm">Download .webm video (19:40, 26.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/5s64FqtX3pqq4uYDwtTvrA">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.000" data-stop="61.569">00:00 Introduction</li>
+<li data-start="61.570" data-stop="127.635">01:01 Before the beginning, the Beginning</li>
+<li data-start="127.636" data-stop="176.169">02:07 Oops</li>
+<li data-start="176.170" data-stop="292.935">02:56 Yada yada yada</li>
+<li data-start="292.936" data-stop="411.802">04:52 During all this time...</li>
+<li data-start="411.803" data-stop="449.769">06:51 Pandemic</li>
+<li data-start="449.770" data-stop="530.002">07:29 Anyway</li>
+<li data-start="530.003" data-stop="578.235">08:50 A growing obsession</li>
+<li data-start="578.236" data-stop="632.735">09:38 What is the point of all of this? I thought we were talking about frowing.</li>
+<li data-start="632.736" data-stop="674.669">10:32 Conversation</li>
+<li data-start="674.670" data-stop="693.069">11:14 Later...</li>
+<li data-start="693.070" data-stop="694.070">11:33 frowny.el</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/omegat">Emacs manuals translation and OmegaT</a></div><div class="speakers">Jean-Christophe Helary</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.webm">Download .webm video (9:07, 9.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/cQbCi4a9E3YVSW9KdiyW2V">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/unix">GNU's Not UNIX: Why Emacs Demonstrates The UNIX Philosophy Isn't Always The Only Answer</a></div><div class="speakers">Daniel Rose</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.webm">Download .webm video (6:41, 6.1MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/18qckj5KshdahW5AiUuMHB">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.080" data-stop="31.598">00:00 Introduction</li>
+<li data-start="31.599" data-stop="57.599">00:31 UNIX Philosophy?</li>
+<li data-start="57.600" data-stop="85.438">00:57 Enter Emacs</li>
+<li data-start="85.439" data-stop="110.798">01:25 Emacs versus the original ideas</li>
+<li data-start="110.799" data-stop="137.439">01:50 Why compare to UNIX?</li>
+<li data-start="137.440" data-stop="179.649">02:17 Emacs /does/ work with the UNIX philosophy</li>
+<li data-start="179.650" data-stop="195.049">02:59 Philosophies don't really matter in computing</li>
+<li data-start="195.050" data-stop="254.382">03:15 Android Studio</li>
+<li data-start="254.383" data-stop="282.899">04:14 Window Managers</li>
+<li data-start="282.900" data-stop="309.299">04:42 Browsers</li>
+<li data-start="309.300" data-stop="334.638">05:09 Vim</li>
+<li data-start="334.639" data-stop="372.232">05:34 Terminals</li>
+<li data-start="372.233" data-stop="373.233">06:12 Do what helps you most, not what a philosophy tells you</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/montessori">Emacs and Montessori Philosophy</a></div><div class="speakers">Grant Shangreaux</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.webm">Download .webm video (10:27, 11.4MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/c5sEmoZbK3ay1b9VGNmP1z">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="4.960" data-stop="20.319">00:04 Introduction</li>
+<li data-start="20.320" data-stop="35.839">00:20 Respect</li>
+<li data-start="35.840" data-stop="79.118">00:35 The Prepared Environment</li>
+<li data-start="79.119" data-stop="116.559">01:19 Human tendencies</li>
+<li data-start="116.560" data-stop="210.719">01:56 Orientation</li>
+<li data-start="210.720" data-stop="265.999">03:30 Order</li>
+<li data-start="266.000" data-stop="312.079">04:26 Exploration</li>
+<li data-start="312.080" data-stop="346.159">05:12 Communication</li>
+<li data-start="346.160" data-stop="381.198">05:46 Activity</li>
+<li data-start="381.199" data-stop="408.318">06:21 Manipulation</li>
+<li data-start="408.319" data-stop="429.198">06:48 Work (or Purposeful Activity)</li>
+<li data-start="429.199" data-stop="458.959">07:09 Repetition</li>
+<li data-start="458.960" data-stop="496.318">07:38 Exactness</li>
+<li data-start="496.319" data-stop="541.999">08:16 Abstraction</li>
+<li data-start="542.000" data-stop="543.000">09:02 Perfection</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/pattern">Emacs as Design Pattern Learning</a></div><div class="speakers">Greta Goetz</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.webm">Download .webm video (23:01, 36.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/afvaVspSSR9YypjUqTypQz">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.000" data-stop="76.239">00:00 Introduction</li>
+<li data-start="76.240" data-stop="318.799">01:16 Definition of design patterns and relation to Emacs</li>
+<li data-start="318.800" data-stop="552.239">05:18 Why this approach matters</li>
+<li data-start="552.240" data-stop="689.999">09:12 Managing complexity: Emacs as mind map</li>
+<li data-start="690.000" data-stop="751.679">11:30 Emacs as design pattern framework</li>
+<li data-start="751.680" data-stop="810.638">12:31 Personal customization</li>
+<li data-start="810.639" data-stop="1001.998">13:30 Implementing Emacs as a model for learning</li>
+<li data-start="1001.999" data-stop="1380.920">16:41 Emacs as accommodating complex social, community assemblages</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/freedom">How Emacs made me appreciate software freedom</a></div><div class="speakers">Protesilaos Stavrou</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.webm">Download .webm video (38:24, 54.9MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/ktxYMzsYPYguc3HwkDiKea">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.000" data-stop="284.206">00:00 About me and this talk</li>
+<li data-start="284.207" data-stop="557.106">04:44 The inherent Emacs qualities for an autodidact</li>
+<li data-start="557.107" data-stop="847.873">09:17 The interconnectedness of the Emacs space</li>
+<li data-start="847.874" data-stop="1135.039">14:07 The documentation culture of the Emacs community</li>
+<li data-start="1135.040" data-stop="1439.528">18:55 The Promethean Ideal of freeing know-how and expertise</li>
+<li data-start="1439.529" data-stop="1733.139">23:59 The 'killer apps' of Emacs</li>
+<li data-start="1733.140" data-stop="2019.173">28:53 You can't be an Emacs tourist</li>
+<li data-start="2019.174" data-stop="2020.174">33:39 Emacs as a champion of software freedom</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/nongnu">NonGNU ELPA Update</a></div><div class="speakers">Philip Kaludercic</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.webm">Download .webm video (6:28, 7.2MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/ovpi53peSt7aX8EtvKMFFy">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/borg">Manual Package Management in The Era of Repositories - Why and How</a></div><div class="speakers">Dhavan (codingquark)</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.webm">Download .webm video (7:49, 7.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/5oG4HmrCV5REgRHfA1rqa3">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/nangulator">Introducing N-Angulator</a></div><div class="speakers">Kevin Haddock</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.webm">Download .webm video (9:58, 9.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/pHrShaGAJwtXvsqKhNWZ56">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/gregorian">Typesetting Gregorian Chant with Emacs</a></div><div class="speakers">Spencer King</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.webm">Download .webm video (8:08, 7MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/ig7rS3VpJjLXCLeq5GYb5z">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.240" data-stop="10.000">00:00 Title</li>
+<li data-start="10.000" data-stop="46.800">00:10 Roadmap</li>
+<li data-start="46.800" data-stop="106.079">00:46 Gregorio</li>
+<li data-start="106.079" data-stop="128.560">01:46 Metadata</li>
+<li data-start="128.560" data-stop="168.640">02:08 `gregorian-mode`</li>
+<li data-start="168.640" data-stop="409.520">02:48 Examples</li>
+<li data-start="409.520" data-stop="487.520">06:49 Useful links</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/telega">telega.el and the Emacs community on Telegram</a></div><div class="speakers">Gabriele Bozzola</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.webm">Download .webm video (7:58, 8.1MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/g1YBMdbNqMHMZu7wCHB5rH">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/janitor">A day in the life of a janitor</a></div><div class="speakers">Stefan Monnier</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.webm">Download .webm video (25:57, 36.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/1h7QmFBDjBQZPBeWtARK9j">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/erg">Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year</a></div><div class="speakers">Noorah Alhasan, Joe Corneli, Raymond Puzio, Leo Vivier</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.webm">Download .webm video (10:23, 11MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/jXni2SVVquM8FLjMLuK4Fg">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.880" data-stop="105.999">00:00 Introduction</li>
+<li data-start="106.000" data-stop="173.679">01:46 Background and technology: Emacs Research Group</li>
+<li data-start="173.680" data-stop="313.599">02:53 Prerecorded demo</li>
+<li data-start="313.600" data-stop="335.119">05:13 Organising metaphor</li>
+<li data-start="335.120" data-stop="360.719">05:35 Timetable</li>
+<li data-start="360.720" data-stop="392.239">06:00 Project Action Review</li>
+<li data-start="392.240" data-stop="422.318">06:32 Causal Layered Analysis</li>
+<li data-start="422.319" data-stop="462.879">07:02 Design Patterns and Next Steps</li>
+<li data-start="462.880" data-stop="473.598">07:42 Projects</li>
+<li data-start="473.599" data-stop="504.559">07:53 Patterns of Patterns (PLoP 2021)</li>
+<li data-start="504.560" data-stop="537.518">08:24 PLACARD Workshop roles</li>
+<li data-start="537.519" data-stop="578.479">08:57 Initial user studies</li>
+<li data-start="578.480" data-stop="608.559">09:38 Broader context</li>
+<li data-start="608.560" data-stop="609.560">10:08 Conclusion</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/cs">One effective CS grad student workflow</a></div><div class="speakers">Greg Coladonato</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.webm">Download .webm video (9:28, 43.2MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/mxFkFd9TiUsJ8goGWZNAcz">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.000" data-stop="27.038">00:00 Self-intro and context of the talk</li>
+<li data-start="27.039" data-stop="43.119">00:27 Goals of the workflow</li>
+<li data-start="43.120" data-stop="93.999">00:43 Requirements of the workflow</li>
+<li data-start="94.000" data-stop="102.719">01:34 Package dependencies</li>
+<li data-start="102.720" data-stop="204.238">01:42 Demo: Class notes PDFs</li>
+<li data-start="204.239" data-stop="492.638">03:24 Pulling down arXiv papers</li>
+<li data-start="492.639" data-stop="539.439">08:12 Small customizations</li>
+<li data-start="539.440" data-stop="568.080">08:59 TODO</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/professional">Using Org-Mode For Recording Continuous Professional Development</a></div><div class="speakers">Philip Beadling</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.webm">Download .webm video (10:33, 9.1MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/rXjPE7hdELfGJhFFUqFhF5">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/tech">Creating technical API documentation and presentations using org-babel, restclient, and org-treeslide</a></div><div class="speakers">Jan Ypma</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.webm">Download .webm video (10:22, 15.9MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/2pPvDFSAwr2zhGfHGHUbko">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/exec">Org as an executable format</a></div><div class="speakers">Tom Gillespie</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.webm">Download .webm video (7:09, 10.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/6TaLDJ4goGaa2R7dsxMi9F">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/org-outside">The use of Org mode syntax outside of GNU/Emacs</a></div><div class="speakers">Karl Voit</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.webm">Download .webm video (12:09, 27.1MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/g35zpQfCCqDM39ZMEphNj7">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/teach">Using Org-mode to teach programming</a></div><div class="speakers">Daniel German</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.webm">Download .webm video (20:49, 26.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/w6CowfCZotPnYkwhudU32V">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/babel">Babel for academics</a></div><div class="speakers">Asilata Bapat</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.webm">Download .webm video (9:58, 13.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/wPJWkEYqyGKxi9SQ82Hmn6">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/research">Managing a research workflow (bibliographies, note-taking, and arXiv)</a></div><div class="speakers">Ahmed Khaled</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.webm">Download .webm video (8:47, 14.2MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/jTXAtCYNWFPRFR1pt94yi1">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.480" data-stop="51.759">00:00 Introduction</li>
+<li data-start="51.760" data-stop="150.238">00:51 Elfeed</li>
+<li data-start="150.239" data-stop="230.559">02:30 org-ref</li>
+<li data-start="230.560" data-stop="348.719">03:50 BibLaTeX</li>
+<li data-start="348.720" data-stop="349.720">05:48 Notes and org-roam</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/molecular">Reproducible molecular graphics with Org-mode</a></div><div class="speakers">Blaine Mooers</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.webm">Download .webm video (8:04, 8.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/tKmTCVtngTLQfQzHpG4BgU">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/invoice">Finding Your (In)voice: Emacs for Invoicing</a></div><div class="speakers">Bala Ramadurai</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.webm">Download .webm video (9:59, 14.9MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/kD6nFQsJFSQys8DCmR76gi">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/project">Budgeting, Project Monitoring and Invoicing with Org Mode</a></div><div class="speakers">Adolfo Villafiorita</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.webm">Download .webm video (9:37, 15.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/71vGdiqdkaN1bAcoDd8VkT">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="1.040" data-stop="10.558">00:01 Introduction</li>
+<li data-start="10.559" data-stop="102.719">00:10 How we build and budget project proposals</li>
+<li data-start="102.720" data-stop="178.399">01:42 Org mode template with embedded Emacs Lisp</li>
+<li data-start="178.400" data-stop="217.279">02:58 The project plan</li>
+<li data-start="217.280" data-stop="280.719">03:37 Effort</li>
+<li data-start="280.720" data-stop="367.439">04:40 Hourly rates</li>
+<li data-start="367.440" data-stop="448.159">06:07 Totals</li>
+<li data-start="448.160" data-stop="501.038">07:28 Payment structure</li>
+<li data-start="501.039" data-stop="547.999">08:21 Export</li>
+<li data-start="548.000" data-stop="549.000">09:08 Advantages</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/dashboard">Productivity Dashboards with Emacs and Kindle</a></div><div class="speakers">Mehmet Tekman</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.webm">Download .webm video (8:31, 10.4MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/ojNW5UwYUzzRTsLhoHZMzG">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/nyxt">Emacs with Nyxt: extend your editor with the power of a Lisp browser</a></div><div class="speakers">Andrea</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.webm">Download .webm video (8:26, 24.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/qBpVxaayFezJMgG9WVQsoy">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/dev-update">Emacs development updates</a></div><div class="speakers">John Wiegley</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.webm">Download .webm video (7:17, 10.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/aBGWhAhfgB4obi5c58qhFM">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.320" data-stop="18.559">00:00 Introduction</li>
+<li data-start="18.560" data-stop="33.599">00:18 Emacs 28</li>
+<li data-start="33.600" data-stop="156.399">00:33 Native compilation</li>
+<li data-start="156.400" data-stop="175.759">02:36 Build with Cairo by default</li>
+<li data-start="175.760" data-stop="202.958">02:55 New mode, but off by default: context-menus</li>
+<li data-start="202.959" data-stop="217.839">03:22 Tab-bar and tab-line received many enhancements</li>
+<li data-start="217.840" data-stop="260.319">03:37 A command can marked as specific to a mode</li>
+<li data-start="260.320" data-stop="300.879">04:20 Transient input methods</li>
+<li data-start="300.880" data-stop="314.559">05:00 show-paren-mode is enabled by default</li>
+<li data-start="314.560" data-stop="339.519">05:14 We now have a Non-GNU ELPA</li>
+<li data-start="339.520" data-stop="378.399">05:39 repeat-mode</li>
+<li data-start="378.400" data-stop="386.719">06:18 project.el has dozens of new commands</li>
+<li data-start="386.720" data-stop="414.959">06:26 Shorthands for Lisp symbols</li>
+<li data-start="414.960" data-stop="415.960">06:54 Emacs 29 is just beginning</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/design">On the design of text editors</a></div><div class="speakers">Nicolas P. Rougier</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.webm">Download .webm video (6:39, 6.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/hmiKha234Q2FygiaspQEP4">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/day1-close">Closing remarks day 1</a></div><div class="speakers"></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/day2-open">Opening remarks day 2</a></div><div class="speakers"></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/faster">Optimizing Emacs Lisp Code</a></div><div class="speakers">Dmitry Gutov</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.webm">Download .webm video (35:35, 57.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/kJkKrSyfeuhL7Gttgxb572">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="1.120" data-stop="156.479">00:01 Introduction</li>
+<li data-start="156.480" data-stop="259.839">02:36 Emacs Lisp is a little old</li>
+<li data-start="259.840" data-stop="303.038">04:19 Benchmark then optimize, not vice versa</li>
+<li data-start="303.039" data-stop="571.199">05:03 profiler-start</li>
+<li data-start="571.200" data-stop="781.359">09:31 elp - Emacs Lisp Profiler</li>
+<li data-start="781.360" data-stop="1153.439">13:01 benchmark</li>
+<li data-start="1153.440" data-stop="1200.239">19:13 Write less code</li>
+<li data-start="1200.240" data-stop="1372.158">20:00 Reduce allocations</li>
+<li data-start="1372.159" data-stop="1852.239">22:52 Recent optimizations in Xref</li>
+<li data-start="1852.240" data-stop="1853.240">30:52 cl-lib, dash, and seq</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/structural">Tree-edit: Structural editing for Java, Python, C, and beyond!</a></div><div class="speakers">Ethan Leba</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.webm">Download .webm video (10:24, 13MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/8Smc22cLzi7UzosijPt7DP">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/ui">Yak-shaving to a UI framework</a></div><div class="speakers">Erik Anderson</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.webm">Download .webm video (9:28, 10.6MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/cwoEZmDr3YDAkskSq8nYEf">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/mold">Moldable Emacs, a step towards sustainable software</a></div><div class="speakers">Andrea</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.webm">Download .webm video (9:34, 14.2MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/4CfNuj8YPpB8HreQHqGXWf">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/model">Extending the "model" of Emacs to other applications</a></div><div class="speakers">Laszlo Krajnikovszkij</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.webm">Download .webm video (9:49, 8.6MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/vsuuxy2SUsWpcLoeAtqJhG">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/native">Emacs Lisp native compiler, current status and future developments</a></div><div class="speakers">Andrea Corallo</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.webm">Download .webm video (39:08, 40.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/aCnFuNEzX1kMKJp3q31YKx">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/form">Old McCarthy Had a Form</a></div><div class="speakers">Ian Eure</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm">Download .webm video (12:44, 13.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/mcyaNMBE1QpjvQa2qDayvi">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/bindat">Turbo Bindat</a></div><div class="speakers">Stefan Monnier</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.webm">Download .webm video (29:48, 28.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/qQeuipEkbSJgZbDm6xRg9q">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="1.360" data-stop="126.006">00:01 Introduction</li>
+<li data-start="126.007" data-stop="327.537">02:06 What is BinDat?</li>
+<li data-start="327.538" data-stop="510.748">05:27 Conversion to lexical scoping</li>
+<li data-start="510.749" data-stop="935.890">08:30 The BinDat specification</li>
+<li data-start="935.891" data-stop="1067.579">15:35 New design</li>
+<li data-start="1067.580" data-stop="1170.225">17:47 Documentation</li>
+<li data-start="1170.226" data-stop="1311.272">19:30 Advantages</li>
+<li data-start="1311.273" data-stop="1388.077">21:51 New features</li>
+<li data-start="1388.078" data-stop="1676.093">23:08 Examples</li>
+<li data-start="1676.094" data-stop="1708.335">27:56 Conclusion</li>
+<li data-start="1708.336" data-stop="1709.336">28:28 Negatives</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/test">Test blocks</a></div><div class="speakers">Eduardo Ochs</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-test--test-blocks--eduardo-ochs--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.webm">Download .webm video (6:04, 7.7MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/qRKLj4VdBG8cFN1MEfcRho">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/bidi">Perso-Arabic Input Methods And Making More Emacs Apps BIDI Aware</a></div><div class="speakers">Mohsen BANAN</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.webm">Download .webm video (19:52, 20.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/sBy9n22kgLMjXu9Cr1Ta44">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/eaf">Emacs Application Framework: A 2021 Update</a></div><div class="speakers">Matthew Zeng</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.webm">Download .webm video (9:15, 10.7MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/9hMPmTLzAxx4bxHJnSbkMr">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="3.040" data-stop="38.045">00:03 Introduction</li>
+<li data-start="38.046" data-stop="125.725">00:38 EAF Overview</li>
+<li data-start="125.726" data-stop="143.285">02:05 New logo</li>
+<li data-start="143.286" data-stop="195.359">02:23 EAF Supports Windows, macOS, and many Linux distros</li>
+<li data-start="195.360" data-stop="236.958">03:15 Multi-language scripting</li>
+<li data-start="236.959" data-stop="345.359">03:56 VueJS extension</li>
+<li data-start="345.360" data-stop="429.598">05:45 EAF core-app separation</li>
+<li data-start="429.599" data-stop="465.319">07:09 Other notable updates Popweb</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/imaginary">Imaginary Programming</a></div><div class="speakers">Shane Mulligan</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.webm">Download .webm video (10:17, 19.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/3ydn2davFQZPoiwB78KZWm">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/clede">CLEDE: the Common Lisp Emacs Development Environment</a></div><div class="speakers">Fermin MF</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.webm">Download .webm video (18:55, 24.6MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/1HuHMank52gcpHqf4M7Sa5">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/maintainers">How to help Emacs maintainers?</a></div><div class="speakers">Bastien Guerry</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.webm">Download .webm video (10:07, 9.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/naNvWzM2jjj5ownu9zmbAf">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="0.799" data-stop="47.567">00:00 Introduction</li>
+<li data-start="47.568" data-stop="139.600">00:47 What is a free software maintainer?</li>
+<li data-start="139.601" data-stop="204.600">02:19 What do I do as the Org maintainer?</li>
+<li data-start="204.601" data-stop="258.400">03:24 Do you see a pattern here?</li>
+<li data-start="258.401" data-stop="303.900">04:18 What a free software maintainer is or should be</li>
+<li data-start="303.901" data-stop="326.900">05:03 Summary</li>
+<li data-start="326.901" data-stop="388.800">05:26 ACDC: Asynchronous Collective Distributed Care</li>
+<li data-start="388.801" data-stop="397.533">06:28 How can you help Emacs maintainers?</li>
+<li data-start="397.534" data-stop="416.500">06:37 Become a maintainer for your own project, however small</li>
+<li data-start="416.501" data-stop="430.900">06:56 Volunteer as a contributor steward for another project</li>
+<li data-start="430.901" data-stop="445.400">07:10 Learn how to teach</li>
+<li data-start="445.401" data-stop="455.633">07:25 Test and enhance the project's contribution process</li>
+<li data-start="455.634" data-stop="472.833">07:35 Take care of the project's calls for help</li>
+<li data-start="472.834" data-stop="488.800">07:52 Encourage users from outside the project to contribute to the core forum</li>
+<li data-start="488.801" data-stop="496.600">08:08 Let the core forum know about what happens in this outside world</li>
+<li data-start="496.601" data-stop="506.100">08:16 Propose your help for non-code tasks</li>
+<li data-start="506.101" data-stop="522.067">08:26 If you expect someone else to fix your bug, try fixing someone else's bug first</li>
+<li data-start="522.068" data-stop="529.233">08:42 Don't expect the maintainer to be a hotline</li>
+<li data-start="529.234" data-stop="537.167">08:49 Complete this list</li>
+<li data-start="537.168" data-stop="575.667">08:57 Yes, this is hard</li>
+<li data-start="575.668" data-stop="576.668">09:35 Thanks</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/build">How to build an Emacs</a></div><div class="speakers">Fermin MF</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.vtt" default /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.webm">Download .webm video (16:54, 15.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/jJJwKDTmUVeRQhSj7bazhz">View on Toobnix</a></li></ul></div></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/forever">M-x Forever: Why Emacs will outlast text editor trends</a></div><div class="speakers">David Wilson (System Crafters)</div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.png" id="mainVideo"><source src="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.webm" /><track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt" default /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.webm">Download .webm video (24:52, 27.6MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://toobnix.org/w/jSW4Gk3hsuv2ZfW8jXHz39">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="1.280" data-stop="28.079">00:01 Introduction and conclusion</li>
+<li data-start="28.080" data-stop="67.199">00:28 Who am I?</li>
+<li data-start="67.200" data-stop="146.958">01:07 Is Emacs unpopular?</li>
+<li data-start="146.959" data-stop="255.679">02:26 What does popularity really mean?</li>
+<li data-start="255.680" data-stop="272.399">04:15 How do we measure popularity?</li>
+<li data-start="272.400" data-stop="378.318">04:32 Google Trends</li>
+<li data-start="378.319" data-stop="499.999">06:18 Stack Overflow Survey</li>
+<li data-start="500.000" data-stop="623.199">08:20 Community Activity</li>
+<li data-start="623.200" data-stop="638.319">10:23 How do editors lose popularity?</li>
+<li data-start="638.320" data-stop="745.679">10:38 A new editor with better features appears</li>
+<li data-start="745.680" data-stop="841.039">12:25 Lack of sufficient maintenance</li>
+<li data-start="841.040" data-stop="876.958">14:01 The "fashion" moves on</li>
+<li data-start="876.959" data-stop="1030.239">14:36 What happens when an editor loses popularity?</li>
+<li data-start="1030.240" data-stop="1040.159">17:10 How will Emacs survive *despite* popularity?</li>
+<li data-start="1040.160" data-stop="1191.439">17:20 Emacs is more deeply hackable than almost all other editors</li>
+<li data-start="1191.440" data-stop="1275.279">19:51 Emacs has a strong community of highly skilled package authors</li>
+<li data-start="1275.280" data-stop="1353.439">21:15 Emacs has a very strong user community</li>
+<li data-start="1353.440" data-stop="1420.959">22:33 The Emacs maintainers and contributors care about the users</li>
+<li data-start="1420.960" data-stop="1462.879">23:40 Isn't all this supposed to come when an editor is popular?</li>
+<li data-start="1462.880" data-stop="1463.880">24:22 When someone talks about popularity...</li>
+</ol></div><div class="vid"><video controls preload="metadata" poster="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers.png" id="qanda"><source src="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers.webm" /><track kind="chapters" label="Chapters" src="/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--chapters.vtt"" /></video><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers.webm">Download .webm video (60:00, 131.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://toobnix.org/w/jSW4Gk3hsuv2ZfW8jXHz39">View on Toobnix</a></li></ul></div><ol class="chapters">
+<li data-start="11.120" data-stop="76.158">00:11 Thanks</li>
+<li data-start="76.159" data-stop="239.438">01:16 In your opinion, what is Emacs' Achilles heel?</li>
+<li data-start="239.439" data-stop="356.799">03:59 What is your opinion about the documentation of Emacs in other languages?</li>
+<li data-start="356.800" data-stop="441.679">05:56 Do you think more effort should be made to popularize hacking on the C parts of Emacs?</li>
+<li data-start="441.680" data-stop="481.839">07:21 Can you name a few features from other programming languages that you miss in Emacs Lisp?</li>
+<li data-start="481.840" data-stop="552.239">08:01 What are your opinions on Emacs's commitments to free software?</li>
+<li data-start="552.240" data-stop="752.799">09:12 Do you think that packages like Magit or Org mode make people see Emacs as an obstacle to these applications that they want to use?</li>
+<li data-start="752.800" data-stop="827.759">12:32 Another way people can help inspire others to use Emacs</li>
+<li data-start="827.760" data-stop="939.679">13:47 Should Emacs continue to present itself as an esoteric program and culture, or should we try to dispel the myth?</li>
+<li data-start="939.680" data-stop="971.919">15:39 Do you think there could be changes made to the core of Emacs that would betray the ethos you and most people here appreciate?</li>
+<li data-start="971.920" data-stop="988.319">16:11 When will David Wilson and Protesilaos collaborate?</li>
+<li data-start="988.320" data-stop="1038.479">16:28 If you had to choose between graphics or real browser support within Emacs, which would you choose?</li>
+<li data-start="1038.480" data-stop="1159.519">17:18 How do you feel being an Emacs-focused YouTuber?</li>
+<li data-start="1159.520" data-stop="1280.959">19:19 More typesetting capabilities versus better performance</li>
+<li data-start="1280.960" data-stop="1533.039">21:20 Sneak peek of what's coming in the YouTube channel soon?</li>
+<li data-start="1533.040" data-stop="1557.759">25:33 Principles and compromises</li>
+<li data-start="1557.760" data-stop="1620.239">25:57 Understanding the value of Emacs Lisp</li>
+<li data-start="1620.240" data-stop="1654.159">27:00 Will you do a video showing your personal workflow?</li>
+<li data-start="1654.160" data-stop="1742.639">27:34 What do you think about Guix or NixOS?</li>
+<li data-start="1742.640" data-stop="1928.239">29:02 Can you talk about your actual work?</li>
+<li data-start="1928.240" data-stop="2172.959">32:08 Do your colleagues use Emacs as well?</li>
+<li data-start="2172.960" data-stop="2413.439">36:12 Any thoughts on the idea that the best tool to use is the one that is easiest to leave?</li>
+<li data-start="2413.440" data-stop="2599.759">40:13 Do you think there should be an updated initial configuration for fresh Emacs installations with more modern UI features and cool shortcuts?</li>
+<li data-start="2599.760" data-stop="2680.559">43:19 How hard is it to get into the native code side of Emacs?</li>
+<li data-start="2680.560" data-stop="2838.239">44:40 Emacs Chats</li>
+<li data-start="2838.240" data-stop="3264.719">47:18 Livestreams</li>
+<li data-start="3264.720" data-stop="3265.720">54:24 Short-form videos</li>
+</ol></div></li>
+<li><div class="title"><a href="https://emacsconf.org/2021/talks/day2-close">Closing remarks day 2</a></div><div class="speakers"></div><div class="vid">The video for "Closing remarks day 2" will be posted here when available. You can also subscribe to the <a href="https://lists.gnu.org/mailman/listinfo/emacsconf-discuss">emacsconf-discuss mailing list</a> for updates.<div class="files resources"><ul></ul></div></div></li> \ No newline at end of file
diff --git a/2021/all.md b/2021/all.md
new file mode 100644
index 00000000..23886e42
--- /dev/null
+++ b/2021/all.md
@@ -0,0 +1,11 @@
+[[!meta title="Everything from EmacsConf 2021"]]
+[[!meta copyright="Copyright &copy; 2021 Various authors"]]
+
+You can also play this [M3U playlist](https://media.emacsconf.org/2021/index.m3u) in MPV or other players or use `wget -r -l 2 -nc -nd -A '*webm' https://media.emacsconf.org/2021/` to download all the video files. (Thanks to ggoes for the command!)
+
+<div class="all">
+[[!inline pages="internal(2021/all-include)" raw="yes"]]
+</div>
+
+[[!sidebar content=""]]
+
diff --git a/2021/captions/babel.md b/2021/captions/babel.md
new file mode 100644
index 00000000..5923e3b5
--- /dev/null
+++ b/2021/captions/babel.md
@@ -0,0 +1,270 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hi! My name is Asilata Bapat," start="00:00:00.799" video="mainVideo" id=subtitle]]
+[[!template text="and I'm talking about Babel for academics." start="00:00:02.560" video="mainVideo" id=subtitle]]
+[[!template text="So, I'm an academic at a university," start="00:00:04.960" video="mainVideo" id=subtitle]]
+[[!template text="and I use Emacs, Org mode, and Babel" start="00:00:06.879" video="mainVideo" id=subtitle]]
+[[!template text="for a whole bunch of work related tasks." start="00:00:09.040" video="mainVideo" id=subtitle]]
+[[!template text="And there are many other tools" start="00:00:11.280" video="mainVideo" id=subtitle]]
+[[!template text="that one could use to help with" start="00:00:12.559" video="mainVideo" id=subtitle]]
+[[!template text="this workflow." start="00:00:14.240" video="mainVideo" id=subtitle]]
+[[!template text="I won't be going through all of these," start="00:00:15.200" video="mainVideo" id=subtitle]]
+[[!template text="and the ones that I've listed are just" start="00:00:16.597" video="mainVideo" id=subtitle]]
+[[!template text="a few of the many that are available." start="00:00:18.160" video="mainVideo" id=subtitle]]
+[[!template text="Today, I'll really be talking about" start="00:00:20.240" video="mainVideo" id=subtitle]]
+[[!template text="my teaching workflow." start="00:00:22.000" video="mainVideo" id=subtitle]]
+[[!template text="Let's just dive right in to a demo." start="00:00:24.080" video="mainVideo" id=subtitle]]
+[[!template text="So, the first file that I want to" start="00:00:27.840" video="mainVideo" id=subtitle]]
+[[!template text="show you is the notes and admin file." start="00:00:29.243" video="mainVideo" id=subtitle]]
+[[!template text="From this file, I'll generate" start="00:00:31.599" video="mainVideo" id=subtitle]]
+[[!template text="a nice-looking PDF document of notes," start="00:00:33.040" video="mainVideo" id=subtitle]]
+[[!template text="and I'll also keep track of some" start="00:00:35.440" video="mainVideo" id=subtitle]]
+[[!template text="course admin." start="00:00:36.963" video="mainVideo" id=subtitle]]
+[[!template text="So, the file that I have here is this one," start="00:00:38.399" video="mainVideo" id=subtitle]]
+[[!template text="and all of the files that I'm going to" start="00:00:43.200" video="mainVideo" id=subtitle]]
+[[!template text="show you today are taken from a course" start="00:00:44.719" video="mainVideo" id=subtitle]]
+[[!template text="that I'm teaching at the moment" start="00:00:46.320" video="mainVideo" id=subtitle]]
+[[!template text="this semester." start="00:00:48.096" video="mainVideo" id=subtitle]]
+[[!template text="What I want to do is export this" start="00:00:49.680" video="mainVideo" id=subtitle]]
+[[!template text="entire document to LaTeX" start="00:00:53.147" video="mainVideo" id=subtitle]]
+[[!template text="because this is where" start="00:00:55.520" video="mainVideo" id=subtitle]]
+[[!template text="I'll be writing my course notes." start="00:00:56.320" video="mainVideo" id=subtitle]]
+[[!template text="But before I do that," start="00:00:58.800" video="mainVideo" id=subtitle]]
+[[!template text="I have some setup that I want to do," start="00:01:00.480" video="mainVideo" id=subtitle]]
+[[!template text="and you'll notice some of these headings" start="00:01:03.199" video="mainVideo" id=subtitle]]
+[[!template text="are tagged as noexport," start="00:01:05.199" video="mainVideo" id=subtitle]]
+[[!template text="and they won't be exported." start="00:01:06.509" video="mainVideo" id=subtitle]]
+[[!template text="The startup setting I'll skip," start="00:01:08.400" video="mainVideo" id=subtitle]]
+[[!template text="and then the main thing here" start="00:01:11.680" video="mainVideo" id=subtitle]]
+[[!template text="is the LaTeX setup." start="00:01:13.499" video="mainVideo" id=subtitle]]
+[[!template text="So, I'm using these #+ option lines," start="00:01:14.880" video="mainVideo" id=subtitle]]
+[[!template text="and I've told Org that" start="00:01:18.560" video="mainVideo" id=subtitle]]
+[[!template text="I want to use an unusual LaTeX class," start="00:01:21.360" video="mainVideo" id=subtitle]]
+[[!template text="I'll have to tell Org about it later," start="00:01:23.280" video="mainVideo" id=subtitle]]
+[[!template text="I'll do that in a moment," start="00:01:24.880" video="mainVideo" id=subtitle]]
+[[!template text="and I have some" start="00:01:26.240" video="mainVideo" id=subtitle]]
+[[!template text="LaTeX header lines, and so on." start="00:01:27.001" video="mainVideo" id=subtitle]]
+[[!template text="And then I have some export settings," start="00:01:29.600" video="mainVideo" id=subtitle]]
+[[!template text="the first export setting is" start="00:01:31.360" video="mainVideo" id=subtitle]]
+[[!template text="to export into a different directory," start="00:01:32.941" video="mainVideo" id=subtitle]]
+[[!template text="not just at the same level" start="00:01:35.119" video="mainVideo" id=subtitle]]
+[[!template text="because I want everything to go into" start="00:01:36.799" video="mainVideo" id=subtitle]]
+[[!template text="the artifacts directory," start="00:01:38.560" video="mainVideo" id=subtitle]]
+[[!template text="and then I can ignore that artifacts" start="00:01:39.716" video="mainVideo" id=subtitle]]
+[[!template text="directory using Git." start="00:01:41.360" video="mainVideo" id=subtitle]]
+[[!template text="This is the first" start="00:01:44.399" video="mainVideo" id=subtitle]]
+[[!template text="source code block that we see," start="00:01:45.600" video="mainVideo" id=subtitle]]
+[[!template text="which is the Babel side of things," start="00:01:47.280" video="mainVideo" id=subtitle]]
+[[!template text="and I've called it export-setup." start="00:01:49.759" video="mainVideo" id=subtitle]]
+[[!template text="The way I write it is, #+begin_src," start="00:01:52.079" video="mainVideo" id=subtitle]]
+[[!template text="the language that I want to use," start="00:01:55.759" video="mainVideo" id=subtitle]]
+[[!template text="which is emacs-lisp," start="00:01:56.965" video="mainVideo" id=subtitle]]
+[[!template text="and maybe some options," start="00:01:58.159" video="mainVideo" id=subtitle]]
+[[!template text="and this is collapsed at the moment," start="00:01:59.600" video="mainVideo" id=subtitle]]
+[[!template text="if I expand it, you'll see" start="00:02:01.119" video="mainVideo" id=subtitle]]
+[[!template text="inside here, this is really" start="00:02:03.600" video="mainVideo" id=subtitle]]
+[[!template text="just Elisp, Emacs Lisp." start="00:02:05.155" video="mainVideo" id=subtitle]]
+[[!template text="So, the first thing I've done is," start="00:02:07.600" video="mainVideo" id=subtitle]]
+[[!template text="I've added this LaTeX class" start="00:02:09.592" video="mainVideo" id=subtitle]]
+[[!template text="to the list of known LaTeX classes." start="00:02:12.440" video="mainVideo" id=subtitle]]
+[[!template text="And the second thing I've done is," start="00:02:15.360" video="mainVideo" id=subtitle]]
+[[!template text="I have locally set the value of" start="00:02:17.433" video="mainVideo" id=subtitle]]
+[[!template text="org-latex-pdf-process," start="00:02:19.599" video="mainVideo" id=subtitle]]
+[[!template text="which is the compiler, to something…," start="00:02:21.112" video="mainVideo" id=subtitle]]
+[[!template text="this command is complicated I guess," start="00:02:24.720" video="mainVideo" id=subtitle]]
+[[!template text="but what the main thing it's doing" start="00:02:27.200" video="mainVideo" id=subtitle]]
+[[!template text="is that it's moving the generated output…," start="00:02:29.440" video="mainVideo" id=subtitle]]
+[[!template text="sorry, the generated image files" start="00:02:32.160" video="mainVideo" id=subtitle]]
+[[!template text="to the output directory," start="00:02:34.160" video="mainVideo" id=subtitle]]
+[[!template text="so that everything can remain" start="00:02:35.169" video="mainVideo" id=subtitle]]
+[[!template text="inside of this artifacts directory," start="00:02:37.519" video="mainVideo" id=subtitle]]
+[[!template text="and maybe it's doing some other things." start="00:02:39.680" video="mainVideo" id=subtitle]]
+[[!template text="And then there are some other" start="00:02:41.519" video="mainVideo" id=subtitle]]
+[[!template text="setup options that I'll skip." start="00:02:43.680" video="mainVideo" id=subtitle]]
+[[!template text="So, this is a source code block," start="00:02:47.120" video="mainVideo" id=subtitle]]
+[[!template text="inside of the source code block" start="00:02:49.360" video="mainVideo" id=subtitle]]
+[[!template text="everything is basically Emacs Lisp." start="00:02:50.640" video="mainVideo" id=subtitle]]
+[[!template text="How do I evaluate this?" start="00:02:52.319" video="mainVideo" id=subtitle]]
+[[!template text="I just press Control c Control c (C-c C-c)," start="00:02:54.640" video="mainVideo" id=subtitle]]
+[[!template text="and it evaluates everything," start="00:02:56.319" video="mainVideo" id=subtitle]]
+[[!template text="but if I want to automate the evaluation," start="00:02:57.920" video="mainVideo" id=subtitle]]
+[[!template text="there's one other thing I can do." start="00:03:00.319" video="mainVideo" id=subtitle]]
+[[!template text="So, let me jump down to" start="00:03:02.080" video="mainVideo" id=subtitle]]
+[[!template text="the local variables section." start="00:03:04.658" video="mainVideo" id=subtitle]]
+[[!template text="In this local variable section" start="00:03:06.720" video="mainVideo" id=subtitle]]
+[[!template text="I have an eval block," start="00:03:09.740" video="mainVideo" id=subtitle]]
+[[!template text="so, I've added a certain hook to the" start="00:03:11.680" video="mainVideo" id=subtitle]]
+[[!template text="org-export-before-processing-hook," start="00:03:14.681" video="mainVideo" id=subtitle]]
+[[!template text="and that just resolves" start="00:03:16.879" video="mainVideo" id=subtitle]]
+[[!template text="this reference from this file." start="00:03:18.319" video="mainVideo" id=subtitle]]
+[[!template text="It looks for a code block titled" start="00:03:19.519" video="mainVideo" id=subtitle]]
+[[!template text="export-setup, and it runs it" start="00:03:23.040" video="mainVideo" id=subtitle]]
+[[!template text="right before exporting," start="00:03:24.859" video="mainVideo" id=subtitle]]
+[[!template text="and this is all local to this buffer." start="00:03:26.000" video="mainVideo" id=subtitle]]
+[[!template text="So, before I export," start="00:03:29.200" video="mainVideo" id=subtitle]]
+[[!template text="it'll then read the correct options." start="00:03:30.799" video="mainVideo" id=subtitle]]
+[[!template text="And after this setup," start="00:03:34.000" video="mainVideo" id=subtitle]]
+[[!template text="I have the course plan," start="00:03:37.519" video="mainVideo" id=subtitle]]
+[[!template text="which is just what goes into my agenda" start="00:03:39.760" video="mainVideo" id=subtitle]]
+[[!template text="as to-dos, I'll skip that." start="00:03:41.599" video="mainVideo" id=subtitle]]
+[[!template text="And after that, I have the actual notes," start="00:03:43.360" video="mainVideo" id=subtitle]]
+[[!template text="and what they actually look like…," start="00:03:45.519" video="mainVideo" id=subtitle]]
+[[!template text="so, this is what they actually look like," start="00:03:48.640" video="mainVideo" id=subtitle]]
+[[!template text="nicely LaTeXed with diagrams and so on," start="00:03:54.400" video="mainVideo" id=subtitle]]
+[[!template text="everything generated" start="00:03:57.040" video="mainVideo" id=subtitle]]
+[[!template text="from that single Org file." start="00:03:57.920" video="mainVideo" id=subtitle]]
+[[!template text="I'll say more about diagrams later." start="00:04:00.720" video="mainVideo" id=subtitle]]
+[[!template text="I also have to write assignments" start="00:04:04.480" video="mainVideo" id=subtitle]]
+[[!template text="and assignment solutions," start="00:04:06.080" video="mainVideo" id=subtitle]]
+[[!template text="so let me jump to that." start="00:04:07.260" video="mainVideo" id=subtitle]]
+[[!template text="Again, this is a very similar file," start="00:04:10.239" video="mainVideo" id=subtitle]]
+[[!template text="but I want to now export" start="00:04:11.840" video="mainVideo" id=subtitle]]
+[[!template text="different headings to different files." start="00:04:14.080" video="mainVideo" id=subtitle]]
+[[!template text="This is not going to be" start="00:04:15.760" video="mainVideo" id=subtitle]]
+[[!template text="exported all at once." start="00:04:16.639" video="mainVideo" id=subtitle]]
+[[!template text="So, again I have some setup," start="00:04:18.320" video="mainVideo" id=subtitle]]
+[[!template text="some general setup that I'll skip," start="00:04:19.759" video="mainVideo" id=subtitle]]
+[[!template text="export setup just like before," start="00:04:22.400" video="mainVideo" id=subtitle]]
+[[!template text="code setup for Python, really," start="00:04:25.120" video="mainVideo" id=subtitle]]
+[[!template text="I have a various…, a bunch of different" start="00:04:29.280" video="mainVideo" id=subtitle]]
+[[!template text="languages here, so Shell and Python," start="00:04:31.280" video="mainVideo" id=subtitle]]
+[[!template text="and some helper functions." start="00:04:33.199" video="mainVideo" id=subtitle]]
+[[!template text="So, let me jump to this one called" start="00:04:36.088" video="mainVideo" id=subtitle]]
+[[!template text="togglesolutions, this is again" start="00:04:38.160" video="mainVideo" id=subtitle]]
+[[!template text="an Emacs Lisp code block." start="00:04:39.756" video="mainVideo" id=subtitle]]
+[[!template text="What this does is," start="00:04:41.919" video="mainVideo" id=subtitle]]
+[[!template text="it tells LaTeX to either toggle the" start="00:04:43.600" video="mainVideo" id=subtitle]]
+[[!template text="display of solutions on, or off" start="00:04:48.632" video="mainVideo" id=subtitle]]
+[[!template text="based on what the tag is" start="00:04:50.336" video="mainVideo" id=subtitle]]
+[[!template text="for that particular assignment." start="00:04:53.096" video="mainVideo" id=subtitle]]
+[[!template text="So, whether if the assignment" start="00:04:54.240" video="mainVideo" id=subtitle]]
+[[!template text="is tagged as solved," start="00:04:57.520" video="mainVideo" id=subtitle]]
+[[!template text="then the solution should be displayed," start="00:04:58.800" video="mainVideo" id=subtitle]]
+[[!template text="otherwise they shouldn't be." start="00:05:00.240" video="mainVideo" id=subtitle]]
+[[!template text="And here most of the assignments" start="00:05:03.280" video="mainVideo" id=subtitle]]
+[[!template text="are tagged as solved," start="00:05:05.447" video="mainVideo" id=subtitle]]
+[[!template text="so in this case if I export this," start="00:05:07.120" video="mainVideo" id=subtitle]]
+[[!template text="the solutions will be displayed." start="00:05:08.880" video="mainVideo" id=subtitle]]
+[[!template text="Let's look at that." start="00:05:11.840" video="mainVideo" id=subtitle]]
+[[!template text="So, I see the solutions blocks," start="00:05:20.800" video="mainVideo" id=subtitle]]
+[[!template text="and this is because it's calling" start="00:05:23.919" video="mainVideo" id=subtitle]]
+[[!template text="the toggle solutions piece of code." start="00:05:27.036" video="mainVideo" id=subtitle]]
+[[!template text="And the properties," start="00:05:29.919" video="mainVideo" id=subtitle]]
+[[!template text="if I expand this properties drawer," start="00:05:32.240" video="mainVideo" id=subtitle]]
+[[!template text="you see this output file name" start="00:05:33.840" video="mainVideo" id=subtitle]]
+[[!template text="has a homework one dash solved," start="00:05:39.280" video="mainVideo" id=subtitle]]
+[[!template text="so it has a solved suffix," start="00:05:41.440" video="mainVideo" id=subtitle]]
+[[!template text="and this is related to the fact that" start="00:05:43.360" video="mainVideo" id=subtitle]]
+[[!template text="I have a solved tag up here." start="00:05:45.912" video="mainVideo" id=subtitle]]
+[[!template text="So, let's see what happens" start="00:05:47.680" video="mainVideo" id=subtitle]]
+[[!template text="if I delete the solved tag," start="00:05:48.960" video="mainVideo" id=subtitle]]
+[[!template text="so nothing's happened yet," start="00:05:51.199" video="mainVideo" id=subtitle]]
+[[!template text="but if I save the file," start="00:05:52.639" video="mainVideo" id=subtitle]]
+[[!template text="then suddenly this homework one" start="00:05:54.000" video="mainVideo" id=subtitle]]
+[[!template text="dash solved becomes homework one," start="00:05:55.919" video="mainVideo" id=subtitle]]
+[[!template text="and this is desired behavior," start="00:05:58.240" video="mainVideo" id=subtitle]]
+[[!template text="this is what I want because" start="00:06:00.080" video="mainVideo" id=subtitle]]
+[[!template text="I want to keep the solved" start="00:06:02.084" video="mainVideo" id=subtitle]]
+[[!template text="and unsolved files separate." start="00:06:03.222" video="mainVideo" id=subtitle]]
+[[!template text="So, once again, if I put in" start="00:06:04.497" video="mainVideo" id=subtitle]]
+[[!template text="the solved tag, and if I save," start="00:06:07.120" video="mainVideo" id=subtitle]]
+[[!template text="I get back the different file name." start="00:06:09.440" video="mainVideo" id=subtitle]]
+[[!template text="And how did I achieve this?" start="00:06:11.440" video="mainVideo" id=subtitle]]
+[[!template text="This is again back in the setup section," start="00:06:12.720" video="mainVideo" id=subtitle]]
+[[!template text="it's the process-export-filenames block." start="00:06:16.479" video="mainVideo" id=subtitle]]
+[[!template text="It's some big piece of Elisp" start="00:06:19.280" video="mainVideo" id=subtitle]]
+[[!template text="that I won't go through," start="00:06:21.120" video="mainVideo" id=subtitle]]
+[[!template text="but basically it's mapping over" start="00:06:22.349" video="mainVideo" id=subtitle]]
+[[!template text="Org entries, and it's either" start="00:06:24.240" video="mainVideo" id=subtitle]]
+[[!template text="adding or removing this solved suffix" start="00:06:26.720" video="mainVideo" id=subtitle]]
+[[!template text="based on what tag it sees." start="00:06:30.080" video="mainVideo" id=subtitle]]
+[[!template text="Okay, when does this" start="00:06:34.560" video="mainVideo" id=subtitle]]
+[[!template text="code block get evaluated?" start="00:06:36.781" video="mainVideo" id=subtitle]]
+[[!template text="Well, I want it to be evaluated" start="00:06:37.919" video="mainVideo" id=subtitle]]
+[[!template text="right before I save" start="00:06:39.840" video="mainVideo" id=subtitle]]
+[[!template text="because I change something," start="00:06:41.039" video="mainVideo" id=subtitle]]
+[[!template text="I save, and I want the properties" start="00:06:43.199" video="mainVideo" id=subtitle]]
+[[!template text="to be get updated accordingly." start="00:06:45.840" video="mainVideo" id=subtitle]]
+[[!template text="If I go down to the" start="00:06:49.199" video="mainVideo" id=subtitle]]
+[[!template text="local variables section again." start="00:06:51.364" video="mainVideo" id=subtitle]]
+[[!template text="Again, I have a local variables" start="00:06:52.639" video="mainVideo" id=subtitle]]
+[[!template text="section here," start="00:06:55.840" video="mainVideo" id=subtitle]]
+[[!template text="and I'm evaluating this Elisp," start="00:06:56.800" video="mainVideo" id=subtitle]]
+[[!template text="which is setting the before-save-hook" start="00:06:58.479" video="mainVideo" id=subtitle]]
+[[!template text="to resolve the process-export-filenames" start="00:07:01.199" video="mainVideo" id=subtitle]]
+[[!template text="function, and so that's what" start="00:07:04.240" video="mainVideo" id=subtitle]]
+[[!template text="gives me that functionality." start="00:07:05.716" video="mainVideo" id=subtitle]]
+[[!template text="And finally," start="00:07:09.199" video="mainVideo" id=subtitle]]
+[[!template text="I have some skeletons, which are…." start="00:07:12.720" video="mainVideo" id=subtitle]]
+[[!template text="Emacs has this skeleton language," start="00:07:16.240" video="mainVideo" id=subtitle]]
+[[!template text="which is a rudimentary templating language." start="00:07:19.360" video="mainVideo" id=subtitle]]
+[[!template text="So, I've defined some templates" start="00:07:22.240" video="mainVideo" id=subtitle]]
+[[!template text="for my assignment and worksheet" start="00:07:24.220" video="mainVideo" id=subtitle]]
+[[!template text="in this little Emacs Lisp block," start="00:07:26.319" video="mainVideo" id=subtitle]]
+[[!template text="which I think I usually just evaluate" start="00:07:29.440" video="mainVideo" id=subtitle]]
+[[!template text="manually, and then if I just call it," start="00:07:31.120" video="mainVideo" id=subtitle]]
+[[!template text="I get a nice-looking skeleton" start="00:07:33.280" video="mainVideo" id=subtitle]]
+[[!template text="that gives me this assignment." start="00:07:35.199" video="mainVideo" id=subtitle]]
+[[!template text="One thing I want to show you" start="00:07:37.360" video="mainVideo" id=subtitle]]
+[[!template text="in these assignments, or I mean," start="00:07:40.080" video="mainVideo" id=subtitle]]
+[[!template text="in this file in particular," start="00:07:43.199" video="mainVideo" id=subtitle]]
+[[!template text="are these dot source code blocks." start="00:07:44.720" video="mainVideo" id=subtitle]]
+[[!template text="So, I've had to type in or draw in" start="00:07:46.560" video="mainVideo" id=subtitle]]
+[[!template text="some graphs in this assignment," start="00:07:49.840" video="mainVideo" id=subtitle]]
+[[!template text="and I can do that right from Org." start="00:07:52.000" video="mainVideo" id=subtitle]]
+[[!template text="So, this is some piece of code" start="00:07:54.720" video="mainVideo" id=subtitle]]
+[[!template text="that's creating a file," start="00:07:56.400" video="mainVideo" id=subtitle]]
+[[!template text="which has this name," start="00:07:59.199" video="mainVideo" id=subtitle]]
+[[!template text="and if I evaluate this block," start="00:08:00.879" video="mainVideo" id=subtitle]]
+[[!template text="I see a results drawer with this file." start="00:08:05.840" video="mainVideo" id=subtitle]]
+[[!template text="And this is a PNG file," start="00:08:10.720" video="mainVideo" id=subtitle]]
+[[!template text="which now gets embedded" start="00:08:12.711" video="mainVideo" id=subtitle]]
+[[!template text="into my LaTeX document." start="00:08:13.759" video="mainVideo" id=subtitle]]
+[[!template text="So, this is nice," start="00:08:15.680" video="mainVideo" id=subtitle]]
+[[!template text="I can actually delete this from here," start="00:08:16.639" video="mainVideo" id=subtitle]]
+[[!template text="and when I export," start="00:08:18.720" video="mainVideo" id=subtitle]]
+[[!template text="the file will get attached automatically." start="00:08:20.479" video="mainVideo" id=subtitle]]
+[[!template text="And similarly," start="00:08:23.919" video="mainVideo" id=subtitle]]
+[[!template text="in some other assignments here," start="00:08:26.639" video="mainVideo" id=subtitle]]
+[[!template text="I have some Python source," start="00:08:28.800" video="mainVideo" id=subtitle]]
+[[!template text="so I've had to type in" start="00:08:30.639" video="mainVideo" id=subtitle]]
+[[!template text="some complicated matrices," start="00:08:33.284" video="mainVideo" id=subtitle]]
+[[!template text="and some complicated matrix products," start="00:08:34.527" video="mainVideo" id=subtitle]]
+[[!template text="and so on," start="00:08:36.128" video="mainVideo" id=subtitle]]
+[[!template text="which I didn't want to do by hand," start="00:08:36.640" video="mainVideo" id=subtitle]]
+[[!template text="so that I didn't introduce errors," start="00:08:38.000" video="mainVideo" id=subtitle]]
+[[!template text="so I've written some Python code." start="00:08:39.760" video="mainVideo" id=subtitle]]
+[[!template text="If I Control c Control c (C-c C-c)" start="00:08:41.599" video="mainVideo" id=subtitle]]
+[[!template text="on this block, you'll notice," start="00:08:44.240" video="mainVideo" id=subtitle]]
+[[!template text="it's in the session matrix," start="00:08:45.920" video="mainVideo" id=subtitle]]
+[[!template text="so it's using the previous," start="00:08:47.120" video="mainVideo" id=subtitle]]
+[[!template text="the same kind of session." start="00:08:49.200" video="mainVideo" id=subtitle]]
+[[!template text="And you'll see that the results," start="00:08:52.399" video="mainVideo" id=subtitle]]
+[[!template text="because of the way I chose to format them," start="00:08:55.440" video="mainVideo" id=subtitle]]
+[[!template text="look like a nice drawer with" start="00:08:57.760" video="mainVideo" id=subtitle]]
+[[!template text="nicely formatted LaTeX." start="00:08:59.920" video="mainVideo" id=subtitle]]
+[[!template text="Once again these results" start="00:09:01.600" video="mainVideo" id=subtitle]]
+[[!template text="I can cut from the file," start="00:09:03.920" video="mainVideo" id=subtitle]]
+[[!template text="and the file will get exported…," start="00:09:05.519" video="mainVideo" id=subtitle]]
+[[!template text="when the file gets exported," start="00:09:07.600" video="mainVideo" id=subtitle]]
+[[!template text="these source code blocks will get" start="00:09:09.200" video="mainVideo" id=subtitle]]
+[[!template text="evaluated, and the answer" start="00:09:10.480" video="mainVideo" id=subtitle]]
+[[!template text="will show up in the file." start="00:09:12.000" video="mainVideo" id=subtitle]]
+[[!template text="And finally," start="00:09:19.200" video="mainVideo" id=subtitle]]
+[[!template text="the last thing I want to show you" start="00:09:20.097" video="mainVideo" id=subtitle]]
+[[!template text="very briefly is the web page" start="00:09:21.363" video="mainVideo" id=subtitle]]
+[[!template text="for this course." start="00:09:23.531" video="mainVideo" id=subtitle]]
+[[!template text="The only thing I want to show you here" start="00:09:26.720" video="mainVideo" id=subtitle]]
+[[!template text="is that I have a Python source code block," start="00:09:28.399" video="mainVideo" id=subtitle]]
+[[!template text="which pulls in my handwritten course notes," start="00:09:30.399" video="mainVideo" id=subtitle]]
+[[!template text="and makes them into a nice-looking list" start="00:09:33.279" video="mainVideo" id=subtitle]]
+[[!template text="with a nice-looking order," start="00:09:36.399" video="mainVideo" id=subtitle]]
+[[!template text="and then just exports as HTML." start="00:09:38.880" video="mainVideo" id=subtitle]]
+[[!template text="So, this is what" start="00:09:41.680" video="mainVideo" id=subtitle]]
+[[!template text="the web page looks like," start="00:09:44.600" video="mainVideo" id=subtitle]]
+[[!template text="and you can see it at this URL." start="00:09:46.080" video="mainVideo" id=subtitle]]
+[[!template text="If you go click on" start="00:09:48.880" video="mainVideo" id=subtitle]]
+[[!template text="the 2021 link at this URL." start="00:09:49.892" video="mainVideo" id=subtitle]]
+[[!template text="So, that's all that I wanted to say." start="00:09:52.800" video="mainVideo" id=subtitle]]
+[[!template text="Thank you very much!" start="00:09:54.880" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/bidi.md b/2021/captions/bidi.md
new file mode 100644
index 00000000..85969b31
--- /dev/null
+++ b/2021/captions/bidi.md
@@ -0,0 +1,366 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Greetings. Salaam. This is Mohsen Banan." start="00:00:02.960" video="mainVideo" id=subtitle]]
+[[!template text="I am an Iranian software and internet engineer." start="00:00:10.240" video="mainVideo" id=subtitle]]
+[[!template text="I converted to Emacs in 1986." start="00:00:14.080" video="mainVideo" id=subtitle]]
+[[!template text="It was Emacs version 17 then." start="00:00:17.199" video="mainVideo" id=subtitle]]
+[[!template text="By around 1988, when Emacs version 18" start="00:00:20.480" video="mainVideo" id=subtitle]]
+[[!template text="was well in place," start="00:00:23.920" video="mainVideo" id=subtitle]]
+[[!template text="I started living inside of Emacs." start="00:00:25.680" video="mainVideo" id=subtitle]]
+[[!template text="My primary digital environment" start="00:00:28.960" video="mainVideo" id=subtitle]]
+[[!template text="has been Emacs ever since." start="00:00:31.119" video="mainVideo" id=subtitle]]
+[[!template text="It has been a good life." start="00:00:33.680" video="mainVideo" id=subtitle]]
+[[!template text="I'm a native Farsi speaker and writer." start="00:00:36.559" video="mainVideo" id=subtitle]]
+[[!template text="I'm not a linguist," start="00:00:40.000" video="mainVideo" id=subtitle]]
+[[!template text="and I do not specialize in" start="00:00:41.520" video="mainVideo" id=subtitle]]
+[[!template text="multilingualization, internationalization," start="00:00:43.800" video="mainVideo" id=subtitle]]
+[[!template text="and localization." start="00:00:46.719" video="mainVideo" id=subtitle]]
+[[!template text="My favorite programming language is Lisp," start="00:00:48.879" video="mainVideo" id=subtitle]]
+[[!template text="and I am a bit of an Emacs developer." start="00:00:52.239" video="mainVideo" id=subtitle]]
+[[!template new="1" text="This presentation is about use of" start="00:00:58.320" video="mainVideo" id=subtitle]]
+[[!template text="Perso-Arabic Scripts with Emacs." start="00:01:00.719" video="mainVideo" id=subtitle]]
+[[!template text="It's an overview presentation." start="00:01:04.000" video="mainVideo" id=subtitle]]
+[[!template text="I won't be digging deep" start="00:01:06.720" video="mainVideo" id=subtitle]]
+[[!template text="in many of the mentioned topics." start="00:01:08.320" video="mainVideo" id=subtitle]]
+[[!template text="My goal is to make you aware" start="00:01:11.360" video="mainVideo" id=subtitle]]
+[[!template text="of what can be done with Emacs today," start="00:01:13.119" video="mainVideo" id=subtitle]]
+[[!template text="and the potentials that Emacs presents" start="00:01:16.159" video="mainVideo" id=subtitle]]
+[[!template text="for Perso-Arabic writers." start="00:01:19.280" video="mainVideo" id=subtitle]]
+[[!template text="The main topics that i'll cover are:" start="00:01:22.640" video="mainVideo" id=subtitle]]
+[[!template text="- a brief introduction to Perso-Arabic scripts" start="00:01:25.759" video="mainVideo" id=subtitle]]
+[[!template text="- two existing Emacs Persian input methods" start="00:01:30.320" video="mainVideo" id=subtitle]]
+[[!template text="- the challenges involved with" start="00:01:35.119" video="mainVideo" id=subtitle]]
+[[!template text="making Emacs applications bidirectional-aware" start="00:01:36.960" video="mainVideo" id=subtitle]]
+[[!template text="- the ultimate goal of creating" start="00:01:42.960" video="mainVideo" id=subtitle]]
+[[!template text="a complete digital environment" start="00:01:45.280" video="mainVideo" id=subtitle]]
+[[!template text="for Perso-Arabic writers" start="00:01:47.759" video="mainVideo" id=subtitle]]
+[[!template text="I'll also be including various pointers." start="00:01:51.200" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So first, let's make sure" start="00:01:57.680" video="mainVideo" id=subtitle]]
+[[!template text="that what I'm presenting" start="00:02:00.320" video="mainVideo" id=subtitle]]
+[[!template text="is of interest to you." start="00:02:02.079" video="mainVideo" id=subtitle]]
+[[!template text="if you are a Perso-Arabic writer" start="00:02:04.560" video="mainVideo" id=subtitle]]
+[[!template text="and if you use Emacs," start="00:02:07.040" video="mainVideo" id=subtitle]]
+[[!template text="you're definitely my intended audience." start="00:02:08.879" video="mainVideo" id=subtitle]]
+[[!template text="If you're an Emacs developer" start="00:02:12.720" video="mainVideo" id=subtitle]]
+[[!template text="who wishes to make her Emacs apps" start="00:02:15.120" video="mainVideo" id=subtitle]]
+[[!template text="multilingual and bidi-aware," start="00:02:19.120" video="mainVideo" id=subtitle]]
+[[!template text="you're also my intended audience." start="00:02:22.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="For the purposes of this presentation," start="00:02:27.360" video="mainVideo" id=subtitle]]
+[[!template text="in this slide, I'm categorizing scripts" start="00:02:30.480" video="mainVideo" id=subtitle]]
+[[!template text="based on directionality and shaping." start="00:02:34.160" video="mainVideo" id=subtitle]]
+[[!template text="Latin letters are not shaped." start="00:02:39.040" video="mainVideo" id=subtitle]]
+[[!template text="Generally speaking," start="00:02:41.280" video="mainVideo" id=subtitle]]
+[[!template text="the shape of a Latin letter" start="00:02:43.120" video="mainVideo" id=subtitle]]
+[[!template text="is independent of its position in a word." start="00:02:44.800" video="mainVideo" id=subtitle]]
+[[!template text="Perso-Arabic letters are subject to shaping." start="00:02:49.599" video="mainVideo" id=subtitle]]
+[[!template text="For example the letter mim--" start="00:02:53.280" video="mainVideo" id=subtitle]]
+[[!template text="sounding similar to M--" start="00:02:56.319" video="mainVideo" id=subtitle]]
+[[!template text="takes three shapes depending on whether" start="00:02:58.800" video="mainVideo" id=subtitle]]
+[[!template text="it is in the beginning of a word," start="00:03:01.840" video="mainVideo" id=subtitle]]
+[[!template text="in the middle of a word," start="00:03:04.720" video="mainVideo" id=subtitle]]
+[[!template text="or at the end of a word." start="00:03:06.480" video="mainVideo" id=subtitle]]
+[[!template text="I'll be showing more of how shaping works" start="00:03:09.200" video="mainVideo" id=subtitle]]
+[[!template text="in an Emacs session screencast later." start="00:03:12.159" video="mainVideo" id=subtitle]]
+[[!template text="Shaping has ramifications" start="00:03:16.400" video="mainVideo" id=subtitle]]
+[[!template text="for Emacs application developers." start="00:03:18.159" video="mainVideo" id=subtitle]]
+[[!template text="For example, if you are combining" start="00:03:21.040" video="mainVideo" id=subtitle]]
+[[!template text="initial letters to create a label," start="00:03:23.760" video="mainVideo" id=subtitle]]
+[[!template text="those letters can be shaped together--" start="00:03:26.720" video="mainVideo" id=subtitle]]
+[[!template text="which is not what you want." start="00:03:29.680" video="mainVideo" id=subtitle]]
+[[!template text="In such cases, you would need to" start="00:03:31.760" video="mainVideo" id=subtitle]]
+[[!template text="explicitly keep them separate." start="00:03:34.000" video="mainVideo" id=subtitle]]
+[[!template text="Latin-based scripts are always" start="00:03:37.840" video="mainVideo" id=subtitle]]
+[[!template text="left-to-right." start="00:03:40.799" video="mainVideo" id=subtitle]]
+[[!template text="Perso-Arabic scripts are right-to-left" start="00:03:42.560" video="mainVideo" id=subtitle]]
+[[!template text="with letters, but numbers are left-to-right." start="00:03:46.560" video="mainVideo" id=subtitle]]
+[[!template text="So, Perso-Arabic scripts" start="00:03:51.040" video="mainVideo" id=subtitle]]
+[[!template text="are bi-directional (BIDI)." start="00:03:53.040" video="mainVideo" id=subtitle]]
+[[!template text="Hebrew is also bi-directional," start="00:03:56.319" video="mainVideo" id=subtitle]]
+[[!template text="but Hebrew is not shaped." start="00:03:58.879" video="mainVideo" id=subtitle]]
+[[!template text="More recently, it has become very common" start="00:04:02.159" video="mainVideo" id=subtitle]]
+[[!template text="to mix Perso-Arabic and Latin text." start="00:04:05.680" video="mainVideo" id=subtitle]]
+[[!template text="This can become very confusing" start="00:04:10.400" video="mainVideo" id=subtitle]]
+[[!template text="if paragraph directionality" start="00:04:12.560" video="mainVideo" id=subtitle]]
+[[!template text="is not properly observed." start="00:04:14.959" video="mainVideo" id=subtitle]]
+[[!template text="I'll be providing some examples" start="00:04:17.759" video="mainVideo" id=subtitle]]
+[[!template text="as screencasts." start="00:04:20.000" video="mainVideo" id=subtitle]]
+[[!template text="The Emacs display engine" start="00:04:23.120" video="mainVideo" id=subtitle]]
+[[!template text="now fully and well supports" start="00:04:24.880" video="mainVideo" id=subtitle]]
+[[!template text="both shaping and BIDI." start="00:04:27.280" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Since 2012, starting with Emacs version 24," start="00:04:32.080" video="mainVideo" id=subtitle]]
+[[!template text="we can say that Emacs" start="00:04:37.120" video="mainVideo" id=subtitle]]
+[[!template text="is a truly multilingual-capable environment." start="00:04:38.639" video="mainVideo" id=subtitle]]
+[[!template text="Like everything else," start="00:04:43.600" video="mainVideo" id=subtitle]]
+[[!template text="multilingual support for Emacs" start="00:04:45.040" video="mainVideo" id=subtitle]]
+[[!template text="was added gradually." start="00:04:46.880" video="mainVideo" id=subtitle]]
+[[!template text="Unicode support was added early on." start="00:04:49.280" video="mainVideo" id=subtitle]]
+[[!template text="The framework for input methods evolved" start="00:04:52.560" video="mainVideo" id=subtitle]]
+[[!template text="in the 1990s. But it was not till version 24" start="00:04:55.520" video="mainVideo" id=subtitle]]
+[[!template text="in 2012 that the display engine" start="00:05:00.320" video="mainVideo" id=subtitle]]
+[[!template text="could fully support BIDI." start="00:05:03.360" video="mainVideo" id=subtitle]]
+[[!template text="Hats off to Eli Zaretskii" start="00:05:06.240" video="mainVideo" id=subtitle]]
+[[!template text="for his work on Emacs BIDI." start="00:05:08.800" video="mainVideo" id=subtitle]]
+[[!template text="Once full BIDI support was in place" start="00:05:12.960" video="mainVideo" id=subtitle]]
+[[!template text="in 2012, I went ahead and added" start="00:05:15.600" video="mainVideo" id=subtitle]]
+[[!template text="two Persian input methods to Emacs 24." start="00:05:19.199" video="mainVideo" id=subtitle]]
+[[!template text="So now Emacs fully supports" start="00:05:24.000" video="mainVideo" id=subtitle]]
+[[!template text="Perso-Arabic scripts." start="00:05:26.400" video="mainVideo" id=subtitle]]
+[[!template new="1" text="By Perso-Arabic script, we're referring to" start="00:05:30.639" video="mainVideo" id=subtitle]]
+[[!template text="the Arabic writing system" start="00:05:34.080" video="mainVideo" id=subtitle]]
+[[!template text="with various extensions" start="00:05:36.320" video="mainVideo" id=subtitle]]
+[[!template text="used by a large number of languages." start="00:05:38.160" video="mainVideo" id=subtitle]]
+[[!template text="Perso-Arabic is the second most" start="00:05:42.240" video="mainVideo" id=subtitle]]
+[[!template text="widely used writing system in the world" start="00:05:44.479" video="mainVideo" id=subtitle]]
+[[!template text="by the number of countries." start="00:05:47.520" video="mainVideo" id=subtitle]]
+[[!template text="It is the third by the number of users" start="00:05:50.479" video="mainVideo" id=subtitle]]
+[[!template text="after the Latin and Chinese scripts." start="00:05:54.000" video="mainVideo" id=subtitle]]
+[[!template text="So, by well supporting Perso-Arabic," start="00:05:59.039" video="mainVideo" id=subtitle]]
+[[!template text="Emacs's potential user base" start="00:06:02.160" video="mainVideo" id=subtitle]]
+[[!template text="can be greatly enhanced." start="00:06:04.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Before focusing on the Persian input methods," start="00:06:09.919" video="mainVideo" id=subtitle]]
+[[!template text="let me quickly summarize" start="00:06:12.960" video="mainVideo" id=subtitle]]
+[[!template text="Emacs's input methods model." start="00:06:14.960" video="mainVideo" id=subtitle]]
+[[!template text="Input methods allow you to enter characters" start="00:06:18.319" video="mainVideo" id=subtitle]]
+[[!template text="that are not supported by your keyboard." start="00:06:21.360" video="mainVideo" id=subtitle]]
+[[!template text="With Quail maps, we can map ASCII key strings" start="00:06:25.120" video="mainVideo" id=subtitle]]
+[[!template text="to multilingual characters." start="00:06:29.280" video="mainVideo" id=subtitle]]
+[[!template text="So we can input any text" start="00:06:31.919" video="mainVideo" id=subtitle]]
+[[!template text="from an ASCII keyboard." start="00:06:34.080" video="mainVideo" id=subtitle]]
+[[!template text="You select an input method" start="00:06:36.960" video="mainVideo" id=subtitle]]
+[[!template text="with C-x RET C-\ ." start="00:06:38.960" video="mainVideo" id=subtitle]]
+[[!template text="We'll try that in a screencast shortly." start="00:06:44.400" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Since version 24, Emacs comes loaded with" start="00:06:49.919" video="mainVideo" id=subtitle]]
+[[!template text="two Persian input methods:" start="00:06:53.919" video="mainVideo" id=subtitle]]
+[[!template text="farsi-isiri-9147 is the standard" start="00:06:56.880" video="mainVideo" id=subtitle]]
+[[!template text="traditional Iranian keyboard." start="00:07:01.520" video="mainVideo" id=subtitle]]
+[[!template text="farsi-transliterate-banan is an intuitive" start="00:07:04.960" video="mainVideo" id=subtitle]]
+[[!template text="transliteration keyboard for Farsi" start="00:07:09.199" video="mainVideo" id=subtitle]]
+[[!template text="which requires near-zero training for use." start="00:07:12.319" video="mainVideo" id=subtitle]]
+[[!template text="I'll be mostly focused on" start="00:07:16.960" video="mainVideo" id=subtitle]]
+[[!template text="farsi-transliterate-banan" start="00:07:18.960" video="mainVideo" id=subtitle]]
+[[!template text="in this presentation." start="00:07:21.520" video="mainVideo" id=subtitle]]
+[[!template text="So let's try this out." start="00:07:23.919" video="mainVideo" id=subtitle]]
+[[!template new="1" text="In this gif-cast, we're going to select" start="00:07:27.840" video="mainVideo" id=subtitle]]
+[[!template text="a Persian input method" start="00:07:30.319" video="mainVideo" id=subtitle]]
+[[!template text="and write a few simple sentences." start="00:07:32.240" video="mainVideo" id=subtitle]]
+[[!template text="With no training and no documentation," start="00:07:35.280" video="mainVideo" id=subtitle]]
+[[!template text="any Farsi writer familiar with Emacs" start="00:07:38.160" video="mainVideo" id=subtitle]]
+[[!template text="can write these, as farsi-transliterate-banan" start="00:07:41.360" video="mainVideo" id=subtitle]]
+[[!template text="input method is intuitive." start="00:07:45.440" video="mainVideo" id=subtitle]]
+[[!template text="I'll be using keycast" start="00:07:48.560" video="mainVideo" id=subtitle]]
+[[!template text="to show you keys as they are used." start="00:07:50.400" video="mainVideo" id=subtitle]]
+[[!template text="Let me first describe as to what we have" start="00:07:54.160" video="mainVideo" id=subtitle]]
+[[!template text="on the screen." start="00:07:56.560" video="mainVideo" id=subtitle]]
+[[!template text="There are three windows in one frame." start="00:07:58.720" video="mainVideo" id=subtitle]]
+[[!template text="Keycast will show commands and keys" start="00:08:01.520" video="mainVideo" id=subtitle]]
+[[!template text="on the mode line." start="00:08:04.639" video="mainVideo" id=subtitle]]
+[[!template text="The leftmost window is showing" start="00:08:06.319" video="mainVideo" id=subtitle]]
+[[!template text="logs of keycast." start="00:08:08.639" video="mainVideo" id=subtitle]]
+[[!template text="Transformed individual unshaped letters" start="00:08:10.879" video="mainVideo" id=subtitle]]
+[[!template text="will appear here." start="00:08:14.639" video="mainVideo" id=subtitle]]
+[[!template text="The middle window is running a tail -f" start="00:08:17.360" video="mainVideo" id=subtitle]]
+[[!template text="on the dribble file piped to fold -w1." start="00:08:21.120" video="mainVideo" id=subtitle]]
+[[!template text="This lets you see the raw ASCII characters" start="00:08:27.440" video="mainVideo" id=subtitle]]
+[[!template text="as I type them." start="00:08:30.720" video="mainVideo" id=subtitle]]
+[[!template text="The right window is the empty buffer" start="00:08:34.479" video="mainVideo" id=subtitle]]
+[[!template text="on the ex.fa file." start="00:08:37.839" video="mainVideo" id=subtitle]]
+[[!template text="Anything that I described here" start="00:08:41.680" video="mainVideo" id=subtitle]]
+[[!template text="can be done with virgin Emacs distribution" start="00:08:44.560" video="mainVideo" id=subtitle]]
+[[!template text="with nothing added," start="00:08:49.040" video="mainVideo" id=subtitle]]
+[[!template text="but I'm using Blee" start="00:08:51.360" video="mainVideo" id=subtitle]]
+[[!template text="(By* Libre-Halaal Emacs Environment)" start="00:08:53.760" video="mainVideo" id=subtitle]]
+[[!template text="to show things. You don't need to have blee" start="00:08:57.120" video="mainVideo" id=subtitle]]
+[[!template text="for writing the equivalent of the text" start="00:09:02.720" video="mainVideo" id=subtitle]]
+[[!template text="in this gif-cast." start="00:09:07.600" video="mainVideo" id=subtitle]]
+[[!template text="First, I'm going to select" start="00:09:10.800" video="mainVideo" id=subtitle]]
+[[!template text="the farsi-transliterate-banan." start="00:09:13.440" video="mainVideo" id=subtitle]]
+[[!template text="I'm entering C-x RET C-\ ." start="00:09:16.800" video="mainVideo" id=subtitle]]
+[[!template text="Notice the mode -ine" start="00:09:22.080" video="mainVideo" id=subtitle]]
+[[!template text="and the prompt at mini-buffer." start="00:09:23.839" video="mainVideo" id=subtitle]]
+[[!template text="With completion, I'm going to select" start="00:09:27.040" video="mainVideo" id=subtitle]]
+[[!template text="farsi-transliterate-banan." start="00:09:30.399" video="mainVideo" id=subtitle]]
+[[!template text="Notice that farsi-isiri-9147" start="00:09:34.000" video="mainVideo" id=subtitle]]
+[[!template text="was also provided as a choice." start="00:09:38.560" video="mainVideo" id=subtitle]]
+[[!template text="Also notice that the letter 'b' appears" start="00:09:43.360" video="mainVideo" id=subtitle]]
+[[!template text="in the left of the mode line of ex.fa." start="00:09:47.440" video="mainVideo" id=subtitle]]
+[[!template text="This indicates which input method" start="00:09:51.760" video="mainVideo" id=subtitle]]
+[[!template text="has been selected." start="00:09:54.000" video="mainVideo" id=subtitle]]
+[[!template text="Also notice that cursor is on" start="00:09:56.320" video="mainVideo" id=subtitle]]
+[[!template text="the top left corner of ex.fa." start="00:09:58.560" video="mainVideo" id=subtitle]]
+[[!template text="Next, I'm going to enter the 's' character." start="00:10:04.399" video="mainVideo" id=subtitle]]
+[[!template text="Notice the cursor moved to the right," start="00:10:08.800" video="mainVideo" id=subtitle]]
+[[!template text="and unshaped ’seen’ appeared" start="00:10:12.000" video="mainVideo" id=subtitle]]
+[[!template text="in the ex.fa buffer, on the mode-line," start="00:10:15.120" video="mainVideo" id=subtitle]]
+[[!template text="and in the keycast log buffer." start="00:10:20.079" video="mainVideo" id=subtitle]]
+[[!template text="Next, I'm going to enter 'l'." start="00:10:23.760" video="mainVideo" id=subtitle]]
+[[!template text="Notice ل in the mode-line," start="00:10:28.000" video="mainVideo" id=subtitle]]
+[[!template text="and notice how س was subjected to shaping." start="00:10:32.800" video="mainVideo" id=subtitle]]
+[[!template text="Next I'm going to write the letter" start="00:10:39.920" video="mainVideo" id=subtitle]]
+[[!template text="to write the following:" start="00:10:42.640" video="mainVideo" id=subtitle]]
+[[!template text=" سلام –حال شما چه طوره؟ –با ایمکس همه کار میشه کرد" start="00:10:44.640" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Hello, how are you?&quot;" start="00:10:50.560" video="mainVideo" id=subtitle]]
+[[!template text="You can do everything with Emacs." start="00:10:52.480" video="mainVideo" id=subtitle]]
+[[!template text="Generally, same-sounding Latin characters" start="00:10:56.720" video="mainVideo" id=subtitle]]
+[[!template text="are used. As usual, vowels are ignored" start="00:11:00.000" video="mainVideo" id=subtitle]]
+[[!template text="unless called for." start="00:11:03.920" video="mainVideo" id=subtitle]]
+[[!template text="Notice that in order to get ح," start="00:11:06.720" video="mainVideo" id=subtitle]]
+[[!template text="i repeated 'h' twice." start="00:11:10.800" video="mainVideo" id=subtitle]]
+[[!template text="ش" start="00:11:14.560" video="mainVideo" id=subtitle]]
+[[!template text="is the obvious 'sh'." start="00:11:15.440" video="mainVideo" id=subtitle]]
+[[!template text="چ" start="00:11:18.560" video="mainVideo" id=subtitle]]
+[[!template text="is the obvious 'ch'." start="00:11:19.519" video="mainVideo" id=subtitle]]
+[[!template text="t, that's the ط is upper case T." start="00:11:22.480" video="mainVideo" id=subtitle]]
+[[!template text=" ت" start="00:11:28.640" video="mainVideo" id=subtitle]]
+[[!template text="is lowercase t." start="00:11:29.439" video="mainVideo" id=subtitle]]
+[[!template text="That's it. We managed to write in Farsi" start="00:11:31.839" video="mainVideo" id=subtitle]]
+[[!template text="with a QWERTY keyboard, intuitively." start="00:11:34.880" video="mainVideo" id=subtitle]]
+[[!template text="Next, we are going to switch back to" start="00:11:38.640" video="mainVideo" id=subtitle]]
+[[!template text="globish and write &quot;back to globish&quot;." start="00:11:40.959" video="mainVideo" id=subtitle]]
+[[!template text="Notice that the globish sentence" start="00:11:45.680" video="mainVideo" id=subtitle]]
+[[!template text="started from the left side." start="00:11:47.920" video="mainVideo" id=subtitle]]
+[[!template text="This is due to proper detection" start="00:11:50.959" video="mainVideo" id=subtitle]]
+[[!template text="of paragraph directionality by Emacs." start="00:11:53.279" video="mainVideo" id=subtitle]]
+[[!template new="1" text="For the most part, Emacs is self-documenting." start="00:12:00.160" video="mainVideo" id=subtitle]]
+[[!template text="Here we are pointing you to some" start="00:12:05.600" video="mainVideo" id=subtitle]]
+[[!template text="relevant self-contained Emacs resources." start="00:12:07.920" video="mainVideo" id=subtitle]]
+[[!template text="The BIDI documentation applies to" start="00:12:12.880" video="mainVideo" id=subtitle]]
+[[!template text="all BIDI scripts," start="00:12:15.680" video="mainVideo" id=subtitle]]
+[[!template text="not just Perso-Arabic scripts." start="00:12:18.000" video="mainVideo" id=subtitle]]
+[[!template text="Referring to the code" start="00:12:22.079" video="mainVideo" id=subtitle]]
+[[!template text="can also be useful for some." start="00:12:23.279" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Here are some pointers." start="00:12:28.000" video="mainVideo" id=subtitle]]
+[[!template text="The Quail translation code" start="00:12:30.079" video="mainVideo" id=subtitle]]
+[[!template text="for Persian input methods:" start="00:12:32.399" video="mainVideo" id=subtitle]]
+[[!template text="the persian.el file has full details" start="00:12:35.519" video="mainVideo" id=subtitle]]
+[[!template text="of the mapping and some documentation." start="00:12:39.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Next, we'll show the keyboard layouts" start="00:12:44.000" video="mainVideo" id=subtitle]]
+[[!template text="as a gif-cast. You can get" start="00:12:46.639" video="mainVideo" id=subtitle]]
+[[!template text="relevant documentation for any input method" start="00:12:51.519" video="mainVideo" id=subtitle]]
+[[!template text="with the describe-input-method command." start="00:12:55.519" video="mainVideo" id=subtitle]]
+[[!template text="So, let's try that for farsi-transliterate-banan." start="00:13:00.320" video="mainVideo" id=subtitle]]
+[[!template text="We are back in the ex.fa buffer" start="00:13:05.920" video="mainVideo" id=subtitle]]
+[[!template text="as one window." start="00:13:09.360" video="mainVideo" id=subtitle]]
+[[!template text="We don't need the keycast logging" start="00:13:11.279" video="mainVideo" id=subtitle]]
+[[!template text="and the dribble windows any more." start="00:13:13.839" video="mainVideo" id=subtitle]]
+[[!template text="With the C-\, I reactivate" start="00:13:17.040" video="mainVideo" id=subtitle]]
+[[!template text="the farsi input method." start="00:13:20.320" video="mainVideo" id=subtitle]]
+[[!template text="Notice that keycast is still active" start="00:13:23.360" video="mainVideo" id=subtitle]]
+[[!template text="on the mode line." start="00:13:26.399" video="mainVideo" id=subtitle]]
+[[!template text="Next, with the C-h C-\ ," start="00:13:29.360" video="mainVideo" id=subtitle]]
+[[!template text="I get the input methods documentation." start="00:13:34.240" video="mainVideo" id=subtitle]]
+[[!template text="I then delete other windows" start="00:13:38.560" video="mainVideo" id=subtitle]]
+[[!template text="and keep the help buffer visible." start="00:13:40.639" video="mainVideo" id=subtitle]]
+[[!template text="Notice that beh" start="00:13:45.440" video="mainVideo" id=subtitle]]
+[[!template text="in this input methods identifier." start="00:13:47.279" video="mainVideo" id=subtitle]]
+[[!template text="Here is the URL for full documentation" start="00:13:52.720" video="mainVideo" id=subtitle]]
+[[!template text="on the web. The keyboard layout itself" start="00:13:55.920" video="mainVideo" id=subtitle]]
+[[!template text="is a one-to-one mapping, but towards" start="00:14:00.639" video="mainVideo" id=subtitle]]
+[[!template text="making transliteration intuitive." start="00:14:03.760" video="mainVideo" id=subtitle]]
+[[!template text="Multiple keys are sometimes mapped to" start="00:14:07.360" video="mainVideo" id=subtitle]]
+[[!template text="the same letter." start="00:14:10.240" video="mainVideo" id=subtitle]]
+[[!template text="For example, both 'i' and 'y' produce yeh." start="00:14:12.079" video="mainVideo" id=subtitle]]
+[[!template text="The usual two letter transliterations" start="00:14:19.760" video="mainVideo" id=subtitle]]
+[[!template text="ending with 'h' -- zh, ch, sh, and kh" start="00:14:22.959" video="mainVideo" id=subtitle]]
+[[!template text="are provided. The ampersand prefix" start="00:14:29.600" video="mainVideo" id=subtitle]]
+[[!template text="is used to support often invisible" start="00:14:34.160" video="mainVideo" id=subtitle]]
+[[!template text="BIDI markings. In addition to this" start="00:14:37.440" video="mainVideo" id=subtitle]]
+[[!template text="internal documentation," start="00:14:41.600" video="mainVideo" id=subtitle]]
+[[!template text="full documentation is also available." start="00:14:43.920" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Complete documentation" start="00:14:48.959" video="mainVideo" id=subtitle]]
+[[!template text="for Persian input methods" start="00:14:50.560" video="mainVideo" id=subtitle]]
+[[!template text="is available as PLPC-120036." start="00:14:52.240" video="mainVideo" id=subtitle]]
+[[!template text="Next, we'll take a quick look at this" start="00:14:58.560" video="mainVideo" id=subtitle]]
+[[!template text="on the web." start="00:15:00.880" video="mainVideo" id=subtitle]]
+[[!template text="You can click on links" start="00:15:03.600" video="mainVideo" id=subtitle]]
+[[!template text="in the reveal web-based form" start="00:15:05.440" video="mainVideo" id=subtitle]]
+[[!template text="of this presentation." start="00:15:07.440" video="mainVideo" id=subtitle]]
+[[!template text="So let's visit PLPC-120036." start="00:15:09.839" video="mainVideo" id=subtitle]]
+[[!template text="This document fully describes" start="00:15:15.440" video="mainVideo" id=subtitle]]
+[[!template text="Persian input methods." start="00:15:17.600" video="mainVideo" id=subtitle]]
+[[!template text="In addition to HTML," start="00:15:20.560" video="mainVideo" id=subtitle]]
+[[!template text="you can also obtain it in PDF." start="00:15:22.320" video="mainVideo" id=subtitle]]
+[[!template text="Let's do that. Of particular interest" start="00:15:26.079" video="mainVideo" id=subtitle]]
+[[!template text="in this document are various tables" start="00:15:30.079" video="mainVideo" id=subtitle]]
+[[!template text="that enumerate lists of letters" start="00:15:33.120" video="mainVideo" id=subtitle]]
+[[!template text="with their association" start="00:15:35.839" video="mainVideo" id=subtitle]]
+[[!template text="to both Persian input methods." start="00:15:37.120" video="mainVideo" id=subtitle]]
+[[!template text="Let's take a look at a few of these." start="00:15:41.839" video="mainVideo" id=subtitle]]
+[[!template text="Table 3, mapping of isiri-6219" start="00:15:46.240" video="mainVideo" id=subtitle]]
+[[!template text="(the Farsi character set)" start="00:15:51.360" video="mainVideo" id=subtitle]]
+[[!template text="to Emacs version input methods" start="00:15:53.680" video="mainVideo" id=subtitle]]
+[[!template text="could be of interest to you," start="00:15:55.680" video="mainVideo" id=subtitle]]
+[[!template text="as well as table 8" start="00:15:58.720" video="mainVideo" id=subtitle]]
+[[!template text="for BIDI-related control markups," start="00:16:01.040" video="mainVideo" id=subtitle]]
+[[!template text="and table 9, for vowels and other signs." start="00:16:04.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Having covered input methods," start="00:16:17.519" video="mainVideo" id=subtitle]]
+[[!template text="let's turn our attention" start="00:16:19.759" video="mainVideo" id=subtitle]]
+[[!template text="to ramifications of BIDI and Perso-Arabic" start="00:16:21.279" video="mainVideo" id=subtitle]]
+[[!template text="on various Emacs applications." start="00:16:25.199" video="mainVideo" id=subtitle]]
+[[!template text="Since 2012, I have been using Persian text" start="00:16:28.480" video="mainVideo" id=subtitle]]
+[[!template text="in various Emacs applications." start="00:16:32.160" video="mainVideo" id=subtitle]]
+[[!template text="In short, my experience has been" start="00:16:35.839" video="mainVideo" id=subtitle]]
+[[!template text="that most Emacs apps are usable," start="00:16:38.079" video="mainVideo" id=subtitle]]
+[[!template text="but they all have glitches" start="00:16:42.399" video="mainVideo" id=subtitle]]
+[[!template text="that could at a minimum" start="00:16:44.880" video="mainVideo" id=subtitle]]
+[[!template text="annoy Perso-Arabic users." start="00:16:47.279" video="mainVideo" id=subtitle]]
+[[!template text="In this slide, I'm presenting a summary." start="00:16:51.279" video="mainVideo" id=subtitle]]
+[[!template text="The glitches with Gnus" start="00:16:54.639" video="mainVideo" id=subtitle]]
+[[!template text="are not all that significant for me." start="00:16:56.399" video="mainVideo" id=subtitle]]
+[[!template text="BBDB glitches can easily be fixed." start="00:17:00.079" video="mainVideo" id=subtitle]]
+[[!template text="For Calendar, I have customized my own setup" start="00:17:04.240" video="mainVideo" id=subtitle]]
+[[!template text="to support Persian and Islamic dates" start="00:17:07.679" video="mainVideo" id=subtitle]]
+[[!template text="in Perso-Arabic. Perhaps they should be" start="00:17:10.799" video="mainVideo" id=subtitle]]
+[[!template text="merged upstream, instead of" start="00:17:14.079" video="mainVideo" id=subtitle]]
+[[!template text="dealing with apps one at a time." start="00:17:17.039" video="mainVideo" id=subtitle]]
+[[!template text="I think it's more reasonable" start="00:17:19.679" video="mainVideo" id=subtitle]]
+[[!template text="to consider them collectively." start="00:17:21.439" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The glitches that I mentioned" start="00:17:25.280" video="mainVideo" id=subtitle]]
+[[!template text="in the previous slide" start="00:17:26.880" video="mainVideo" id=subtitle]]
+[[!template text="have two routes:" start="00:17:28.799" video="mainVideo" id=subtitle]]
+[[!template text="some are BIDI-specific" start="00:17:30.480" video="mainVideo" id=subtitle]]
+[[!template text="and some are Perso-Arabic-specific." start="00:17:32.480" video="mainVideo" id=subtitle]]
+[[!template text="In this slide," start="00:17:35.919" video="mainVideo" id=subtitle]]
+[[!template text="I have classified them as such" start="00:17:36.720" video="mainVideo" id=subtitle]]
+[[!template text="and have made some general suggestions," start="00:17:39.280" video="mainVideo" id=subtitle]]
+[[!template text="but all of these at best amount to" start="00:17:42.960" video="mainVideo" id=subtitle]]
+[[!template text="tactical approaches." start="00:17:45.679" video="mainVideo" id=subtitle]]
+[[!template text="I think a more strategic approach" start="00:17:47.679" video="mainVideo" id=subtitle]]
+[[!template text="is called for." start="00:17:50.160" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The right way to address BIDI-awareness" start="00:17:53.520" video="mainVideo" id=subtitle]]
+[[!template text="and other awarenesses" start="00:17:56.240" video="mainVideo" id=subtitle]]
+[[!template text="is to build them in frameworks" start="00:17:58.559" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs apps can then use." start="00:18:00.559" video="mainVideo" id=subtitle]]
+[[!template text="So, I'm proposing that we first create ENML," start="00:18:04.160" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs Native Markup Language," start="00:18:08.480" video="mainVideo" id=subtitle]]
+[[!template text="as a Lisp-ish (perhaps even not fully secure)" start="00:18:11.520" video="mainVideo" id=subtitle]]
+[[!template text="super-set of HTML5." start="00:18:16.880" video="mainVideo" id=subtitle]]
+[[!template text="With that in place, we can then build on" start="00:18:20.320" video="mainVideo" id=subtitle]]
+[[!template text="the two decades of experience" start="00:18:22.960" video="mainVideo" id=subtitle]]
+[[!template text="that have produced various" start="00:18:25.360" video="mainVideo" id=subtitle]]
+[[!template text="web application development frameworks" start="00:18:27.600" video="mainVideo" id=subtitle]]
+[[!template text="by mimicking one of them." start="00:18:31.039" video="mainVideo" id=subtitle]]
+[[!template text="I don't have any running code" start="00:18:33.919" video="mainVideo" id=subtitle]]
+[[!template text="for any of these, but discussing strategy" start="00:18:35.679" video="mainVideo" id=subtitle]]
+[[!template text="need not always be futile." start="00:18:39.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Emacs has immense potentials," start="00:18:44.640" video="mainVideo" id=subtitle]]
+[[!template text="but those potentials cannot be realized" start="00:18:47.679" video="mainVideo" id=subtitle]]
+[[!template text="unless we integrate Emacs in the totality" start="00:18:51.120" video="mainVideo" id=subtitle]]
+[[!template text="of a specific complete digital ecosystem." start="00:18:54.640" video="mainVideo" id=subtitle]]
+[[!template text="Over the past two decades, I've been" start="00:18:59.840" video="mainVideo" id=subtitle]]
+[[!template text="building the contours" start="00:19:02.000" video="mainVideo" id=subtitle]]
+[[!template text="of The Libre-Halaal By* (ByStar)" start="00:19:03.440" video="mainVideo" id=subtitle]]
+[[!template text="digital ecosystem." start="00:19:06.240" video="mainVideo" id=subtitle]]
+[[!template text="Emacs can then be fully integrated into" start="00:19:10.240" video="mainVideo" id=subtitle]]
+[[!template text="ByStar. It's through such integration" start="00:19:13.039" video="mainVideo" id=subtitle]]
+[[!template text="that full conviviality of Emacs" start="00:19:16.799" video="mainVideo" id=subtitle]]
+[[!template text="can be experienced." start="00:19:19.679" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Blee, the ByStar Libre-Halaal" start="00:19:24.240" video="mainVideo" id=subtitle]]
+[[!template text="Emacs environment is Emacs" start="00:19:26.640" video="mainVideo" id=subtitle]]
+[[!template text="plus a whole lot of Emacs apps" start="00:19:30.000" video="mainVideo" id=subtitle]]
+[[!template text="integrated with Debian," start="00:19:32.720" video="mainVideo" id=subtitle]]
+[[!template text="With ByStar services and with BISOS," start="00:19:34.880" video="mainVideo" id=subtitle]]
+[[!template text="the ByStar Internet Services OS." start="00:19:38.320" video="mainVideo" id=subtitle]]
+[[!template text="Perhaps this could be" start="00:19:42.480" video="mainVideo" id=subtitle]]
+[[!template text="the topic of a presentation" start="00:19:43.600" video="mainVideo" id=subtitle]]
+[[!template text="captions by Mohsen Banan" start="00:19:46.840" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/bindat.md b/2021/captions/bindat.md
new file mode 100644
index 00000000..062de190
--- /dev/null
+++ b/2021/captions/bindat.md
@@ -0,0 +1,621 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hi. So I'm going to talk today" start="00:00:01.360" video="mainVideo" id=subtitle]]
+[[!template text="about a fun rewrite I did of the BinDat package." start="00:00:04.180" video="mainVideo" id=subtitle]]
+[[!template text="I call this Turbo BinDat." start="00:00:10.000" video="mainVideo" id=subtitle]]
+[[!template text="Actually, the package hasn't changed name," start="00:00:12.400" video="mainVideo" id=subtitle]]
+[[!template text="it's just that the result happens to be faster." start="00:00:14.101" video="mainVideo" id=subtitle]]
+[[!template text="The point was not to make it faster though," start="00:00:16.901" video="mainVideo" id=subtitle]]
+[[!template text="and the point was not to make you understand" start="00:00:19.621" video="mainVideo" id=subtitle]]
+[[!template text="that data is not code." start="00:00:22.341" video="mainVideo" id=subtitle]]
+[[!template text="It's just one more experience I've had" start="00:00:23.540" video="mainVideo" id=subtitle]]
+[[!template text="where I've seen that treating data as code" start="00:00:27.120" video="mainVideo" id=subtitle]]
+[[!template text="is not always a good idea." start="00:00:31.381" video="mainVideo" id=subtitle]]
+[[!template text="It's important to keep the difference." start="00:00:33.622" video="mainVideo" id=subtitle]]
+[[!template text="So let's get started." start="00:00:36.162" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So what is BinDat anyway?" start="00:00:38.881" video="mainVideo" id=subtitle]]
+[[!template text="Here's just the overview of basically" start="00:00:40.742" video="mainVideo" id=subtitle]]
+[[!template text="what I'm going to present." start="00:00:43.602" video="mainVideo" id=subtitle]]
+[[!template text="So I'm first going to present BinDat itself" start="00:00:45.062" video="mainVideo" id=subtitle]]
+[[!template text="for those who don't know it," start="00:00:47.843" video="mainVideo" id=subtitle]]
+[[!template text="which is probably the majority of you." start="00:00:49.039" video="mainVideo" id=subtitle]]
+[[!template text="Then I'm going to talk about the actual problems" start="00:00:51.923" video="mainVideo" id=subtitle]]
+[[!template text="that I encountered with this package" start="00:00:55.363" video="mainVideo" id=subtitle]]
+[[!template text="that motivated me to rewrite it." start="00:00:58.882" video="mainVideo" id=subtitle]]
+[[!template text="Most of them were lack of flexibility," start="00:01:01.843" video="mainVideo" id=subtitle]]
+[[!template text="and some of it was just poor behavior" start="00:01:05.044" video="mainVideo" id=subtitle]]
+[[!template text="with respect to scoping and variables," start="00:01:09.924" video="mainVideo" id=subtitle]]
+[[!template text="which of course, you know, is bad --" start="00:01:13.364" video="mainVideo" id=subtitle]]
+[[!template text="basically uses of eval or, &quot ;eval is evil.&quot ;" start="00:01:16.424" video="mainVideo" id=subtitle]]
+[[!template text="Then I'm going to talk about the new design --" start="00:01:20.724" video="mainVideo" id=subtitle]]
+[[!template text="how I redesigned it" start="00:01:24.985" video="mainVideo" id=subtitle]]
+[[!template text="to make it both simpler and more flexible," start="00:01:28.105" video="mainVideo" id=subtitle]]
+[[!template text="and where the key idea was" start="00:01:31.365" video="mainVideo" id=subtitle]]
+[[!template text="to expose code as code" start="00:01:33.065" video="mainVideo" id=subtitle]]
+[[!template text="instead of having it as data," start="00:01:35.305" video="mainVideo" id=subtitle]]
+[[!template text="and so here the distinction between the two" start="00:01:37.625" video="mainVideo" id=subtitle]]
+[[!template text="is important and made things simpler." start="00:01:39.706" video="mainVideo" id=subtitle]]
+[[!template text="I tried to keep efficiency in mind," start="00:01:44.085" video="mainVideo" id=subtitle]]
+[[!template text="which resulted in some of the aspects of the design" start="00:01:46.405" video="mainVideo" id=subtitle]]
+[[!template text="which are not completely satisfactory," start="00:01:52.505" video="mainVideo" id=subtitle]]
+[[!template text="but the result is actually fairly efficient." start="00:01:54.886" video="mainVideo" id=subtitle]]
+[[!template text="Even though it was not the main motivation," start="00:01:57.146" video="mainVideo" id=subtitle]]
+[[!template text="it was one of the nice outcomes." start="00:01:59.287" video="mainVideo" id=subtitle]]
+[[!template text="And then I'm going to present some examples." start="00:02:02.967" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So first: what is BinDat?" start="00:02:06.007" video="mainVideo" id=subtitle]]
+[[!template text="Oh actually, rather than present THIS," start="00:02:08.267" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to go straight to the code," start="00:02:10.667" video="mainVideo" id=subtitle]]
+[[!template text="because BinDat actually had" start="00:02:12.507" video="mainVideo" id=subtitle]]
+[[!template text="an introduction which was fairly legible." start="00:02:14.346" video="mainVideo" id=subtitle]]
+[[!template text="So here we go: this is the old BinDat from Emacs 27" start="00:02:16.748" video="mainVideo" id=subtitle]]
+[[!template text="and the commentary starts by explaining" start="00:02:21.128" video="mainVideo" id=subtitle]]
+[[!template text="what is BinDat? Basically BinDat is a package" start="00:02:23.448" video="mainVideo" id=subtitle]]
+[[!template text="that lets you parse and unparse" start="00:02:25.948" video="mainVideo" id=subtitle]]
+[[!template text="basically binary data." start="00:02:30.247" video="mainVideo" id=subtitle]]
+[[!template text="The intent is to have typically network data" start="00:02:31.627" video="mainVideo" id=subtitle]]
+[[!template text="or something like this." start="00:02:34.749" video="mainVideo" id=subtitle]]
+[[!template text="So assuming you have network data," start="00:02:35.949" video="mainVideo" id=subtitle]]
+[[!template text="presented or defined" start="00:02:38.328" video="mainVideo" id=subtitle]]
+[[!template text="with some kind of C-style structs, typically," start="00:02:41.628" video="mainVideo" id=subtitle]]
+[[!template text="or something along these lines." start="00:02:44.669" video="mainVideo" id=subtitle]]
+[[!template text="So you presumably start with documentation" start="00:02:46.109" video="mainVideo" id=subtitle]]
+[[!template text="that presents something like those structs here," start="00:02:49.120" video="mainVideo" id=subtitle]]
+[[!template text="and you want to be able to generate such packets" start="00:02:52.810" video="mainVideo" id=subtitle]]
+[[!template text="and read such packets," start="00:02:57.230" video="mainVideo" id=subtitle]]
+[[!template text="so the way you do it is" start="00:03:00.349" video="mainVideo" id=subtitle]]
+[[!template text="you rewrite those specifications" start="00:03:02.190" video="mainVideo" id=subtitle]]
+[[!template text="into the BinDat syntax." start="00:03:04.670" video="mainVideo" id=subtitle]]
+[[!template text="So here's the BinDat syntax" start="00:03:06.110" video="mainVideo" id=subtitle]]
+[[!template text="for the the previous specification." start="00:03:07.529" video="mainVideo" id=subtitle]]
+[[!template text="So here, for example," start="00:03:10.491" video="mainVideo" id=subtitle]]
+[[!template text="you see the case for a data packet" start="00:03:11.610" video="mainVideo" id=subtitle]]
+[[!template text="which will have a 'type' field which is a byte" start="00:03:16.970" video="mainVideo" id=subtitle]]
+[[!template text="(an unsigned 8-bit entity)," start="00:03:20.411" video="mainVideo" id=subtitle]]
+[[!template text="then an 'opcode' which is also a byte," start="00:03:24.091" video="mainVideo" id=subtitle]]
+[[!template text="then a 'length' which is a 16-bit unsigned integer" start="00:03:26.411" video="mainVideo" id=subtitle]]
+[[!template text="in little endian order," start="00:03:30.732" video="mainVideo" id=subtitle]]
+[[!template text="and then some 'id' for this entry, which is" start="00:03:34.092" video="mainVideo" id=subtitle]]
+[[!template text="8 bytes containing a zero-terminated string," start="00:03:38.732" video="mainVideo" id=subtitle]]
+[[!template text="and then the actual data, basically the payload," start="00:03:43.531" video="mainVideo" id=subtitle]]
+[[!template text="which is in this case a vector of bytes," start="00:03:47.532" video="mainVideo" id=subtitle]]
+[[!template text="('bytes' here doesn't doesn't need to be specified)" start="00:03:51.453" video="mainVideo" id=subtitle]]
+[[!template text="and here we specify the length of this vector." start="00:03:54.812" video="mainVideo" id=subtitle]]
+[[!template text="This 'length' here" start="00:03:58.172" video="mainVideo" id=subtitle]]
+[[!template text="happens to be actually the name of THIS field," start="00:03:59.773" video="mainVideo" id=subtitle]]
+[[!template text="so the length of the data" start="00:04:02.252" video="mainVideo" id=subtitle]]
+[[!template text="is specified by the 'length' field here," start="00:04:03.854" video="mainVideo" id=subtitle]]
+[[!template text="and BinDat will understand this part," start="00:04:06.574" video="mainVideo" id=subtitle]]
+[[!template text="which is the the nice part of BinDat." start="00:04:08.574" video="mainVideo" id=subtitle]]
+[[!template text="And then you have an alignment field at the end," start="00:04:12.333" video="mainVideo" id=subtitle]]
+[[!template text="which is basically padding." start="00:04:15.774" video="mainVideo" id=subtitle]]
+[[!template text="It says that it is padded" start="00:04:18.253" video="mainVideo" id=subtitle]]
+[[!template text="until the next multiple of four." start="00:04:20.575" video="mainVideo" id=subtitle]]
+[[!template text="Okay. So this works reasonably well." start="00:04:23.295" video="mainVideo" id=subtitle]]
+[[!template text="This is actually very nice." start="00:04:25.855" video="mainVideo" id=subtitle]]
+[[!template text="With this, you can then call" start="00:04:27.455" video="mainVideo" id=subtitle]]
+[[!template text="bindat-pack or bindat-unpack," start="00:04:30.335" video="mainVideo" id=subtitle]]
+[[!template text="passing it a string, or passing it an alist," start="00:04:32.975" video="mainVideo" id=subtitle]]
+[[!template text="to do the packing and unpacking." start="00:04:37.774" video="mainVideo" id=subtitle]]
+[[!template text="So, for example, if you take this string--" start="00:04:40.416" video="mainVideo" id=subtitle]]
+[[!template text="actually, in this case, it's a vector of bytes" start="00:04:43.296" video="mainVideo" id=subtitle]]
+[[!template text="but it works the same; it works in both ways--" start="00:04:45.856" video="mainVideo" id=subtitle]]
+[[!template text="if you pass this to bindat-unpack," start="00:04:49.456" video="mainVideo" id=subtitle]]
+[[!template text="it will presumably return you this structure" start="00:04:53.536" video="mainVideo" id=subtitle]]
+[[!template text="if you've given it the corresponding type." start="00:04:57.457" video="mainVideo" id=subtitle]]
+[[!template text="So it will extract--" start="00:05:00.017" video="mainVideo" id=subtitle]]
+[[!template text="you will see that there is an IP address," start="00:05:01.776" video="mainVideo" id=subtitle]]
+[[!template text="which is a destination IP, a source IP," start="00:05:05.617" video="mainVideo" id=subtitle]]
+[[!template text="and some port number," start="00:05:08.017" video="mainVideo" id=subtitle]]
+[[!template text="and some actual data here and there, etc." start="00:05:09.857" video="mainVideo" id=subtitle]]
+[[!template text="So this is quite convenient if you need to do this," start="00:05:12.977" video="mainVideo" id=subtitle]]
+[[!template text="and that's what it was designed for." start="00:05:18.018" video="mainVideo" id=subtitle]]
+[[!template text="So here we are. Let's go back to the actual talk." start="00:05:20.898" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I converted BinDat to lexical scoping at some point" start="00:05:27.538" video="mainVideo" id=subtitle]]
+[[!template text="and things seemed to work fine," start="00:05:34.339" video="mainVideo" id=subtitle]]
+[[!template text="except, at some point, probably weeks later," start="00:05:37.299" video="mainVideo" id=subtitle]]
+[[!template text="I saw a bug report" start="00:05:42.819" video="mainVideo" id=subtitle]]
+[[!template text="about the new version using lexical scoping" start="00:05:47.139" video="mainVideo" id=subtitle]]
+[[!template text="not working correctly with WeeChat." start="00:05:53.059" video="mainVideo" id=subtitle]]
+[[!template text="So here's the actual chunk of code" start="00:05:56.339" video="mainVideo" id=subtitle]]
+[[!template text="that appears in WeeChat." start="00:06:00.580" video="mainVideo" id=subtitle]]
+[[!template text="Here you see that they also define a BinDat spec." start="00:06:02.820" video="mainVideo" id=subtitle]]
+[[!template text="It's a packet that has a 32-bit unsigned length," start="00:06:08.421" video="mainVideo" id=subtitle]]
+[[!template text="then some compression byte/compression information," start="00:06:14.741" video="mainVideo" id=subtitle]]
+[[!template text="then an id which contains basically another struct" start="00:06:18.500" video="mainVideo" id=subtitle]]
+[[!template text="(which is specified elsewhere; doesn't matter here)," start="00:06:23.780" video="mainVideo" id=subtitle]]
+[[!template text="and after that, a vector" start="00:06:26.902" video="mainVideo" id=subtitle]]
+[[!template text="whose size is not just specified by 'length'," start="00:06:28.661" video="mainVideo" id=subtitle]]
+[[!template text="but is computed from 'length'." start="00:06:33.382" video="mainVideo" id=subtitle]]
+[[!template text="So here's how they used to compute it in WeeChat." start="00:06:35.142" video="mainVideo" id=subtitle]]
+[[!template text="So the length here can be specified in BinDat." start="00:06:39.142" video="mainVideo" id=subtitle]]
+[[!template text="Instead of having" start="00:06:42.822" video="mainVideo" id=subtitle]]
+[[!template text="just a reference to one of the fields," start="00:06:43.942" video="mainVideo" id=subtitle]]
+[[!template text="or having a constant, you can actually compute it," start="00:06:45.863" video="mainVideo" id=subtitle]]
+[[!template text="where you have to use this '(eval'," start="00:06:48.903" video="mainVideo" id=subtitle]]
+[[!template text="and then followed by the actual expression" start="00:06:52.502" video="mainVideo" id=subtitle]]
+[[!template text="where you say how you compute it." start="00:06:54.743" video="mainVideo" id=subtitle]]
+[[!template text="And here you see that it actually computes it" start="00:06:58.103" video="mainVideo" id=subtitle]]
+[[!template text="based on the 'length of the structure --" start="00:07:01.464" video="mainVideo" id=subtitle]]
+[[!template text="that's supposed to be this 'length' field here --" start="00:07:04.904" video="mainVideo" id=subtitle]]
+[[!template text="and it's referred to using the bindat-get-field" start="00:07:07.783" video="mainVideo" id=subtitle]]
+[[!template text="to extract the field from the variable 'struct'." start="00:07:11.223" video="mainVideo" id=subtitle]]
+[[!template text="And then it subtracts four, it subtracts one," start="00:07:14.503" video="mainVideo" id=subtitle]]
+[[!template text="and adds some other things" start="00:07:17.943" video="mainVideo" id=subtitle]]
+[[!template text="which depend on some field" start="00:07:19.468" video="mainVideo" id=subtitle]]
+[[!template text="that's found in this 'id' field here." start="00:07:22.185" video="mainVideo" id=subtitle]]
+[[!template text="And the problem with this code" start="00:07:26.905" video="mainVideo" id=subtitle]]
+[[!template text="was that it broke" start="00:07:28.425" video="mainVideo" id=subtitle]]
+[[!template text="because of this 'struct' variable here," start="00:07:30.425" video="mainVideo" id=subtitle]]
+[[!template text="because this 'struct' variable is not defined" start="00:07:32.745" video="mainVideo" id=subtitle]]
+[[!template text="anywhere in the specification of BinDat." start="00:07:35.145" video="mainVideo" id=subtitle]]
+[[!template text="It was used internally as a local variable," start="00:07:38.106" video="mainVideo" id=subtitle]]
+[[!template text="and because it was using dynamic scoping," start="00:07:41.866" video="mainVideo" id=subtitle]]
+[[!template text="it actually happened to be available here," start="00:07:45.306" video="mainVideo" id=subtitle]]
+[[!template text="but the documentation nowhere specifies it." start="00:07:47.386" video="mainVideo" id=subtitle]]
+[[!template text="So it was not exactly" start="00:07:50.826" video="mainVideo" id=subtitle]]
+[[!template text="a bug of the conversion to lexical scoping," start="00:07:52.506" video="mainVideo" id=subtitle]]
+[[!template text="but it ended up breaking this code." start="00:07:55.547" video="mainVideo" id=subtitle]]
+[[!template text="And there was no way to actually" start="00:07:58.906" video="mainVideo" id=subtitle]]
+[[!template text="fix the code within the specification of BinDat." start="00:08:01.226" video="mainVideo" id=subtitle]]
+[[!template text="You had to go outside the specification of BinDat" start="00:08:05.066" video="mainVideo" id=subtitle]]
+[[!template text="to fix this problem." start="00:08:08.287" video="mainVideo" id=subtitle]]
+[[!template text="This is basically how I started looking at BinDat." start="00:08:10.427" video="mainVideo" id=subtitle]]
+[[!template text="Then I went to actually investigate a bit more" start="00:08:14.347" video="mainVideo" id=subtitle]]
+[[!template text="what was going on," start="00:08:17.808" video="mainVideo" id=subtitle]]
+[[!template text="and the thing I noticed along the way" start="00:08:19.627" video="mainVideo" id=subtitle]]
+[[!template text="was basically that the specification of BinDat" start="00:08:22.108" video="mainVideo" id=subtitle]]
+[[!template text="is fairly complex and has a lot of eval" start="00:08:25.787" video="mainVideo" id=subtitle]]
+[[!template text="and things like this." start="00:08:29.528" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's take a look" start="00:08:30.749" video="mainVideo" id=subtitle]]
+[[!template text="at what the BinDat specification looks like." start="00:08:32.288" video="mainVideo" id=subtitle]]
+[[!template text="So here it's actually documented" start="00:08:35.068" video="mainVideo" id=subtitle]]
+[[!template text="as a kind of grammar rules." start="00:08:36.589" video="mainVideo" id=subtitle]]
+[[!template text="A specification is basically a sequence of items," start="00:08:40.269" video="mainVideo" id=subtitle]]
+[[!template text="and then each of the items is basically" start="00:08:45.308" video="mainVideo" id=subtitle]]
+[[!template text="a FIELD of a struct, so it has a FIELD name," start="00:08:47.389" video="mainVideo" id=subtitle]]
+[[!template text="and then a TYPE." start="00:08:51.249" video="mainVideo" id=subtitle]]
+[[!template text="Instead of a TYPE," start="00:08:53.249" video="mainVideo" id=subtitle]]
+[[!template text="it could have some other FORM for eval," start="00:08:54.510" video="mainVideo" id=subtitle]]
+[[!template text="which was basically never used as far as I know," start="00:08:56.590" video="mainVideo" id=subtitle]]
+[[!template text="or it can be some filler," start="00:08:58.989" video="mainVideo" id=subtitle]]
+[[!template text="or you can have some 'align' specification," start="00:09:00.190" video="mainVideo" id=subtitle]]
+[[!template text="or you can refer to another struct." start="00:09:02.750" video="mainVideo" id=subtitle]]
+[[!template text="It could also be some kind of union," start="00:09:05.150" video="mainVideo" id=subtitle]]
+[[!template text="or it can be some kind of repetition of something." start="00:09:07.391" video="mainVideo" id=subtitle]]
+[[!template text="And then you have the TYPE specified here," start="00:09:10.430" video="mainVideo" id=subtitle]]
+[[!template text="which can be some integers, strings, or a vector," start="00:09:12.430" video="mainVideo" id=subtitle]]
+[[!template text="and there are a few other special cases." start="00:09:18.271" video="mainVideo" id=subtitle]]
+[[!template text="And then the actual field itself" start="00:09:21.631" video="mainVideo" id=subtitle]]
+[[!template text="can be either a NAME, or something that's computed," start="00:09:25.311" video="mainVideo" id=subtitle]]
+[[!template text="and then everywhere here, you have LEN," start="00:09:28.192" video="mainVideo" id=subtitle]]
+[[!template text="which specifies the length of vectors," start="00:09:30.752" video="mainVideo" id=subtitle]]
+[[!template text="for example, or length of strings." start="00:09:32.480" video="mainVideo" id=subtitle]]
+[[!template text="This is actually either nil to mean one," start="00:09:34.672" video="mainVideo" id=subtitle]]
+[[!template text="or it can be an ARG," start="00:09:37.632" video="mainVideo" id=subtitle]]
+[[!template text="where ARG is defined to be" start="00:09:39.072" video="mainVideo" id=subtitle]]
+[[!template text="either an integer or DEREF," start="00:09:40.952" video="mainVideo" id=subtitle]]
+[[!template text="where DEREF is basically a specification" start="00:09:42.673" video="mainVideo" id=subtitle]]
+[[!template text="that can refer, for example, to the 'length' field" start="00:09:46.673" video="mainVideo" id=subtitle]]
+[[!template text="-- that's what we saw between parentheses: (length)" start="00:09:48.833" video="mainVideo" id=subtitle]]
+[[!template text="was this way to refer to the 'length' field." start="00:09:51.956" video="mainVideo" id=subtitle]]
+[[!template text="Or it can be an expression, which is what we saw" start="00:09:56.273" video="mainVideo" id=subtitle]]
+[[!template text="in the computation of the length for WeeChat," start="00:09:59.794" video="mainVideo" id=subtitle]]
+[[!template text="where you just had a '(eval'" start="00:10:02.834" video="mainVideo" id=subtitle]]
+[[!template text="and then some computation" start="00:10:04.914" video="mainVideo" id=subtitle]]
+[[!template text="of the length of the payload." start="00:10:06.334" video="mainVideo" id=subtitle]]
+[[!template text="And so if you look here, you see that" start="00:10:10.274" video="mainVideo" id=subtitle]]
+[[!template text="it is fairly large and complex," start="00:10:12.354" video="mainVideo" id=subtitle]]
+[[!template text="and it uses eval everywhere. And actually," start="00:10:14.674" video="mainVideo" id=subtitle]]
+[[!template text="it's not just that it has eval in its syntax," start="00:10:18.515" video="mainVideo" id=subtitle]]
+[[!template text="but the implementation has to use eval everywhere," start="00:10:20.675" video="mainVideo" id=subtitle]]
+[[!template text="because, if you go back" start="00:10:23.395" video="mainVideo" id=subtitle]]
+[[!template text="to see the kind of code we see," start="00:10:25.314" video="mainVideo" id=subtitle]]
+[[!template text="we see here we just define" start="00:10:27.475" video="mainVideo" id=subtitle]]
+[[!template text="weechat--relay-message-spec as a constant!" start="00:10:29.538" video="mainVideo" id=subtitle]]
+[[!template text="It's nothing than just data, right?" start="00:10:34.195" video="mainVideo" id=subtitle]]
+[[!template text="So within this data" start="00:10:37.315" video="mainVideo" id=subtitle]]
+[[!template text="there are things we need to evaluate," start="00:10:38.836" video="mainVideo" id=subtitle]]
+[[!template text="but it's pure data," start="00:10:41.076" video="mainVideo" id=subtitle]]
+[[!template text="so it will have to be evaluated" start="00:10:42.356" video="mainVideo" id=subtitle]]
+[[!template text="by passing it to eval. It can't be compiled," start="00:10:44.356" video="mainVideo" id=subtitle]]
+[[!template text="because it's within a quote, right?" start="00:10:46.596" video="mainVideo" id=subtitle]]
+[[!template text="And so for that reason, kittens really" start="00:10:50.196" video="mainVideo" id=subtitle]]
+[[!template text="suffer terribly with uses of BinDat." start="00:10:52.837" video="mainVideo" id=subtitle]]
+[[!template text="You really have to be very careful with that." start="00:10:55.956" video="mainVideo" id=subtitle]]
+[[!template text="More seriously," start="00:10:59.957" video="mainVideo" id=subtitle]]
+[[!template text="the 'struct' variable was not documented," start="00:11:02.037" video="mainVideo" id=subtitle]]
+[[!template text="and yet it's indispensable" start="00:11:05.157" video="mainVideo" id=subtitle]]
+[[!template text="for important applications," start="00:11:07.797" video="mainVideo" id=subtitle]]
+[[!template text="such as using in WeeChat." start="00:11:08.996" video="mainVideo" id=subtitle]]
+[[!template text="So clearly this needs to be fixed." start="00:11:11.158" video="mainVideo" id=subtitle]]
+[[!template text="Of course, we can just document 'struct'" start="00:11:13.078" video="mainVideo" id=subtitle]]
+[[!template text="as some variable that's used there," start="00:11:15.481" video="mainVideo" id=subtitle]]
+[[!template text="but of course we don't want to do that," start="00:11:18.038" video="mainVideo" id=subtitle]]
+[[!template text="because 'struct' is not obviously" start="00:11:19.798" video="mainVideo" id=subtitle]]
+[[!template text="a dynamically scoped variable," start="00:11:23.398" video="mainVideo" id=subtitle]]
+[[!template text="so it's not very clean." start="00:11:25.398" video="mainVideo" id=subtitle]]
+[[!template text="Also other problems I noticed was that the grammar" start="00:11:29.318" video="mainVideo" id=subtitle]]
+[[!template text="is significantly more complex than necessary." start="00:11:31.939" video="mainVideo" id=subtitle]]
+[[!template text="We have nine distinct non-terminals." start="00:11:35.239" video="mainVideo" id=subtitle]]
+[[!template text="There is ambiguity." start="00:11:38.199" video="mainVideo" id=subtitle]]
+[[!template text="If you try to use a field whose name is 'align'," start="00:11:39.639" video="mainVideo" id=subtitle]]
+[[!template text="or 'fill', or something like this," start="00:11:44.919" video="mainVideo" id=subtitle]]
+[[!template text="then it's going to be misinterpreted," start="00:11:48.680" video="mainVideo" id=subtitle]]
+[[!template text="or it can be misinterpreted." start="00:11:50.920" video="mainVideo" id=subtitle]]
+[[!template text="The vector length can be either an expression," start="00:11:54.920" video="mainVideo" id=subtitle]]
+[[!template text="or an integer, or a reference to a label," start="00:11:58.760" video="mainVideo" id=subtitle]]
+[[!template text="but the expression" start="00:12:02.280" video="mainVideo" id=subtitle]]
+[[!template text="should already be the general case," start="00:12:03.720" video="mainVideo" id=subtitle]]
+[[!template text="and this expression can itself be" start="00:12:06.361" video="mainVideo" id=subtitle]]
+[[!template text="just a constant integer," start="00:12:08.041" video="mainVideo" id=subtitle]]
+[[!template text="so this complexity is probably not indispensable," start="00:12:09.401" video="mainVideo" id=subtitle]]
+[[!template text="or it could be replaced with something simpler." start="00:12:13.961" video="mainVideo" id=subtitle]]
+[[!template text="That's what I felt like." start="00:12:15.641" video="mainVideo" id=subtitle]]
+[[!template text="And basically lots of places" start="00:12:17.401" video="mainVideo" id=subtitle]]
+[[!template text="allow an (eval EXP) form somewhere" start="00:12:19.161" video="mainVideo" id=subtitle]]
+[[!template text="to open up the door for more flexibility," start="00:12:21.721" video="mainVideo" id=subtitle]]
+[[!template text="but not all of them do," start="00:12:25.082" video="mainVideo" id=subtitle]]
+[[!template text="and we don't really want" start="00:12:26.922" video="mainVideo" id=subtitle]]
+[[!template text="to have this eval there, right?" start="00:12:29.482" video="mainVideo" id=subtitle]]
+[[!template text="It's not very convenient syntactically either." start="00:12:31.001" video="mainVideo" id=subtitle]]
+[[!template text="So it makes the uses of eval" start="00:12:33.802" video="mainVideo" id=subtitle]]
+[[!template text="a bit heavier than they need to be," start="00:12:36.042" video="mainVideo" id=subtitle]]
+[[!template text="and so I didn't really like this part." start="00:12:38.362" video="mainVideo" id=subtitle]]
+[[!template text="Another part is that" start="00:12:41.723" video="mainVideo" id=subtitle]]
+[[!template text="when I tried to figure out what was going on," start="00:12:42.603" video="mainVideo" id=subtitle]]
+[[!template text="dog barks and distracts Stefan" start="00:12:45.183" video="mainVideo" id=subtitle]]
+[[!template text="I had trouble... Winnie as well, as you can hear." start="00:12:46.666" video="mainVideo" id=subtitle]]
+[[!template text="She had trouble as well." start="00:12:50.043" video="mainVideo" id=subtitle]]
+[[!template text="But one of the troubles was that" start="00:12:50.923" video="mainVideo" id=subtitle]]
+[[!template text="there was no way to debug the code" start="00:12:53.083" video="mainVideo" id=subtitle]]
+[[!template text="via Edebug, because it's just data," start="00:12:55.002" video="mainVideo" id=subtitle]]
+[[!template text="so Edebug doesn't know that it has to look at it" start="00:12:57.562" video="mainVideo" id=subtitle]]
+[[!template text="and instrument it." start="00:13:00.524" video="mainVideo" id=subtitle]]
+[[!template text="And of course it was not conveniently extensible." start="00:13:02.683" video="mainVideo" id=subtitle]]
+[[!template text="That's also one of the things" start="00:13:05.644" video="mainVideo" id=subtitle]]
+[[!template text="I noticed along the way." start="00:13:07.164" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so here's an example of" start="00:13:09.084" video="mainVideo" id=subtitle]]
+[[!template text="problems not that I didn't just see there," start="00:13:12.844" video="mainVideo" id=subtitle]]
+[[!template text="but that were actually present in code." start="00:13:15.485" video="mainVideo" id=subtitle]]
+[[!template text="I went to look at code that was using BinDat" start="00:13:18.684" video="mainVideo" id=subtitle]]
+[[!template text="to see what uses looked like," start="00:13:22.124" video="mainVideo" id=subtitle]]
+[[!template text="and I saw that BinDat was not used very heavily," start="00:13:24.285" video="mainVideo" id=subtitle]]
+[[!template text="but some of the main uses" start="00:13:28.765" video="mainVideo" id=subtitle]]
+[[!template text="were just to read and write integers." start="00:13:30.365" video="mainVideo" id=subtitle]]
+[[!template text="And here you can see a very typical case." start="00:13:33.885" video="mainVideo" id=subtitle]]
+[[!template text="This is also coming from WeeChat." start="00:13:37.565" video="mainVideo" id=subtitle]]
+[[!template text="We do a bindat-get-field" start="00:13:41.726" video="mainVideo" id=subtitle]]
+[[!template text="of the length of some struct we read." start="00:13:43.565" video="mainVideo" id=subtitle]]
+[[!template text="Actually, the struct we read is here." start="00:13:48.445" video="mainVideo" id=subtitle]]
+[[!template text="It has a single field," start="00:13:50.685" video="mainVideo" id=subtitle]]
+[[!template text="because the only thing we want to do" start="00:13:51.647" video="mainVideo" id=subtitle]]
+[[!template text="is actually to unpack a 32-bit integer," start="00:13:53.006" video="mainVideo" id=subtitle]]
+[[!template text="but the only way we can do that" start="00:13:56.287" video="mainVideo" id=subtitle]]
+[[!template text="is by specifying a struct with one field." start="00:13:58.287" video="mainVideo" id=subtitle]]
+[[!template text="And so we have to extract this struct of one field," start="00:14:01.647" video="mainVideo" id=subtitle]]
+[[!template text="which constructs an alist" start="00:14:04.847" video="mainVideo" id=subtitle]]
+[[!template text="containing the actual integer," start="00:14:07.246" video="mainVideo" id=subtitle]]
+[[!template text="and then we just use get-field to extract it." start="00:14:09.648" video="mainVideo" id=subtitle]]
+[[!template text="So this doesn't seem very elegant" start="00:14:11.887" video="mainVideo" id=subtitle]]
+[[!template text="to have to construct an alist" start="00:14:15.007" video="mainVideo" id=subtitle]]
+[[!template text="just to then extract the integer from it." start="00:14:16.528" video="mainVideo" id=subtitle]]
+[[!template text="Same thing if you try to pack it:" start="00:14:20.368" video="mainVideo" id=subtitle]]
+[[!template text="you first have to construct the alist" start="00:14:21.648" video="mainVideo" id=subtitle]]
+[[!template text="to pass it to bindat-pack unnecessarily." start="00:14:25.007" video="mainVideo" id=subtitle]]
+[[!template text="Another problem that I saw in this case" start="00:14:31.248" video="mainVideo" id=subtitle]]
+[[!template text="(it was in the websocket package)" start="00:14:33.248" video="mainVideo" id=subtitle]]
+[[!template text="was here, where they actually have a function" start="00:14:35.729" video="mainVideo" id=subtitle]]
+[[!template text="where they need to write" start="00:14:39.568" video="mainVideo" id=subtitle]]
+[[!template text="an integer of a size that will vary" start="00:14:41.169" video="mainVideo" id=subtitle]]
+[[!template text="depending on the circumstances." start="00:14:43.888" video="mainVideo" id=subtitle]]
+[[!template text="And so they have to test the value of this integer," start="00:14:45.889" video="mainVideo" id=subtitle]]
+[[!template text="and depending on which one it is," start="00:14:49.650" video="mainVideo" id=subtitle]]
+[[!template text="they're going to use different types." start="00:14:52.210" video="mainVideo" id=subtitle]]
+[[!template text="So here it's a case" start="00:14:54.449" video="mainVideo" id=subtitle]]
+[[!template text="where we want to have some kind of way to eval --" start="00:14:56.290" video="mainVideo" id=subtitle]]
+[[!template text="to compute the length of the integer --" start="00:14:59.490" video="mainVideo" id=subtitle]]
+[[!template text="instead of it being predefined or fixed." start="00:15:02.531" video="mainVideo" id=subtitle]]
+[[!template text="So this is one of the cases" start="00:15:08.130" video="mainVideo" id=subtitle]]
+[[!template text="where the lack of eval was a problem." start="00:15:10.211" video="mainVideo" id=subtitle]]
+[[!template text="And actually in all of websocket," start="00:15:16.531" video="mainVideo" id=subtitle]]
+[[!template text="BinDat is only used to pack and unpack integers," start="00:15:20.051" video="mainVideo" id=subtitle]]
+[[!template text="even though there are many more opportunities" start="00:15:22.612" video="mainVideo" id=subtitle]]
+[[!template text="to use BinDat in there." start="00:15:24.612" video="mainVideo" id=subtitle]]
+[[!template text="But it's not very convenient to use BinDat," start="00:15:26.772" video="mainVideo" id=subtitle]]
+[[!template text="as it stands, for those other cases." start="00:15:29.331" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So what does the new design look like?" start="00:15:35.891" video="mainVideo" id=subtitle]]
+[[!template text="Well in the new design, here's the problematic code" start="00:15:39.733" video="mainVideo" id=subtitle]]
+[[!template text="for WeeChat." start="00:15:44.132" video="mainVideo" id=subtitle]]
+[[!template text="So we basically have the same fields as before," start="00:15:46.373" video="mainVideo" id=subtitle]]
+[[!template text="you just see that instead of u32," start="00:15:49.012" video="mainVideo" id=subtitle]]
+[[!template text="we now have 'uint 32' separately." start="00:15:50.853" video="mainVideo" id=subtitle]]
+[[!template text="The idea is that now this 32" start="00:15:53.733" video="mainVideo" id=subtitle]]
+[[!template text="can be an expression you can evaluate," start="00:15:55.332" video="mainVideo" id=subtitle]]
+[[!template text="and so the u8 is also replaced by 'uint 8'," start="00:15:59.094" video="mainVideo" id=subtitle]]
+[[!template text="and the id type is basically the same as before," start="00:16:04.054" video="mainVideo" id=subtitle]]
+[[!template text="and here another difference we see," start="00:16:07.253" video="mainVideo" id=subtitle]]
+[[!template text="and the main difference..." start="00:16:08.854" video="mainVideo" id=subtitle]]
+[[!template text="Actually, it's the second main difference." start="00:16:11.654" video="mainVideo" id=subtitle]]
+[[!template text="The first main difference is that" start="00:16:13.494" video="mainVideo" id=subtitle]]
+[[!template text="we don't actually quote this whole thing." start="00:16:15.175" video="mainVideo" id=subtitle]]
+[[!template text="Instead, we pass it to the bindat-type macro." start="00:16:18.694" video="mainVideo" id=subtitle]]
+[[!template text="So this is a macro" start="00:16:23.095" video="mainVideo" id=subtitle]]
+[[!template text="that's going to actually build the type." start="00:16:25.095" video="mainVideo" id=subtitle]]
+[[!template text="This is a big difference" start="00:16:27.574" video="mainVideo" id=subtitle]]
+[[!template text="in terms of performance also," start="00:16:29.254" video="mainVideo" id=subtitle]]
+[[!template text="because by making it a macro," start="00:16:30.535" video="mainVideo" id=subtitle]]
+[[!template text="we can pre-compute the code" start="00:16:32.695" video="mainVideo" id=subtitle]]
+[[!template text="that's going to pack and unpack this thing," start="00:16:34.296" video="mainVideo" id=subtitle]]
+[[!template text="instead of having to interpret it" start="00:16:37.255" video="mainVideo" id=subtitle]]
+[[!template text="every time we pack and unpack." start="00:16:38.936" video="mainVideo" id=subtitle]]
+[[!template text="So this macro will generate more efficient code" start="00:16:41.096" video="mainVideo" id=subtitle]]
+[[!template text="along the way." start="00:16:43.815" video="mainVideo" id=subtitle]]
+[[!template text="Also it makes the code that appears in here" start="00:16:45.815" video="mainVideo" id=subtitle]]
+[[!template text="visible to the compiler" start="00:16:48.695" video="mainVideo" id=subtitle]]
+[[!template text="because we can give an Edebug spec for it." start="00:16:50.297" video="mainVideo" id=subtitle]]
+[[!template text="And so here as an argument to vec," start="00:16:54.617" video="mainVideo" id=subtitle]]
+[[!template text="instead of having to specify" start="00:16:57.497" video="mainVideo" id=subtitle]]
+[[!template text="that this is an evaluated expression," start="00:16:59.016" video="mainVideo" id=subtitle]]
+[[!template text="we just write the expression directly," start="00:17:00.937" video="mainVideo" id=subtitle]]
+[[!template text="because all the expressions that appear there" start="00:17:02.777" video="mainVideo" id=subtitle]]
+[[!template text="will just be evaluated," start="00:17:05.096" video="mainVideo" id=subtitle]]
+[[!template text="and we don't need to use the 'struct' variable" start="00:17:07.418" video="mainVideo" id=subtitle]]
+[[!template text="and then extract the length field from it." start="00:17:11.418" video="mainVideo" id=subtitle]]
+[[!template text="We can just use length as a variable." start="00:17:14.137" video="mainVideo" id=subtitle]]
+[[!template text="So this variable 'length' here" start="00:17:16.938" video="mainVideo" id=subtitle]]
+[[!template text="will refer to this field here," start="00:17:18.698" video="mainVideo" id=subtitle]]
+[[!template text="and then this variable 'id' here" start="00:17:20.778" video="mainVideo" id=subtitle]]
+[[!template text="will refer to this field here," start="00:17:23.578" video="mainVideo" id=subtitle]]
+[[!template text="and so we can just use the field values" start="00:17:25.898" video="mainVideo" id=subtitle]]
+[[!template text="as local variables, which is very natural" start="00:17:27.738" video="mainVideo" id=subtitle]]
+[[!template text="and very efficient also," start="00:17:30.459" video="mainVideo" id=subtitle]]
+[[!template text="because the code would actually directly do that," start="00:17:31.679" video="mainVideo" id=subtitle]]
+[[!template text="and the code that unpacks those data" start="00:17:34.618" video="mainVideo" id=subtitle]]
+[[!template text="will just extract an integer" start="00:17:37.899" video="mainVideo" id=subtitle]]
+[[!template text="and bind it to the length variable," start="00:17:40.299" video="mainVideo" id=subtitle]]
+[[!template text="and so that makes it immediately available there." start="00:17:42.219" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay, let's see also" start="00:17:47.580" video="mainVideo" id=subtitle]]
+[[!template text="what the actual documentation looks like." start="00:17:51.340" video="mainVideo" id=subtitle]]
+[[!template text="And so if we look at the doc of BinDat," start="00:17:54.220" video="mainVideo" id=subtitle]]
+[[!template text="we see the actual specification of the grammar." start="00:17:57.739" video="mainVideo" id=subtitle]]
+[[!template text="And so here we see instead of having" start="00:18:01.181" video="mainVideo" id=subtitle]]
+[[!template text="these nine different non-terminals," start="00:18:03.181" video="mainVideo" id=subtitle]]
+[[!template text="we basically have two:" start="00:18:06.461" video="mainVideo" id=subtitle]]
+[[!template text="we have the non-terminal for TYPE," start="00:18:08.061" video="mainVideo" id=subtitle]]
+[[!template text="which can be either a uint, a uintr, or a string," start="00:18:10.781" video="mainVideo" id=subtitle]]
+[[!template text="or bits, or fill, or align, or vec," start="00:18:15.021" video="mainVideo" id=subtitle]]
+[[!template text="or those various other forms;" start="00:18:17.421" video="mainVideo" id=subtitle]]
+[[!template text="or it can be a struct, in which case," start="00:18:19.902" video="mainVideo" id=subtitle]]
+[[!template text="in the case of struct," start="00:18:22.621" video="mainVideo" id=subtitle]]
+[[!template text="then it will be followed by a sequence --" start="00:18:23.981" video="mainVideo" id=subtitle]]
+[[!template text="a list of FIELDs, where each of the FIELDs" start="00:18:27.502" video="mainVideo" id=subtitle]]
+[[!template text="is basically a LABEL followed by another TYPE." start="00:18:30.142" video="mainVideo" id=subtitle]]
+[[!template text="And so this makes the whole specification" start="00:18:33.902" video="mainVideo" id=subtitle]]
+[[!template text="much simpler. We don't have any distinction now" start="00:18:37.343" video="mainVideo" id=subtitle]]
+[[!template text="between struct being a special case," start="00:18:39.823" video="mainVideo" id=subtitle]]
+[[!template text="as opposed to just the normal types." start="00:18:42.862" video="mainVideo" id=subtitle]]
+[[!template text="struct is just now one of the possible types" start="00:18:46.383" video="mainVideo" id=subtitle]]
+[[!template text="that can appear here." start="00:18:49.263" video="mainVideo" id=subtitle]]
+[[!template text="The other thing is that" start="00:18:52.543" video="mainVideo" id=subtitle]]
+[[!template text="the LABEL is always present in the structure," start="00:18:53.263" video="mainVideo" id=subtitle]]
+[[!template text="so there's no ambiguity." start="00:18:55.743" video="mainVideo" id=subtitle]]
+[[!template text="Also all the above things," start="00:18:58.384" video="mainVideo" id=subtitle]]
+[[!template text="like the BITLEN we have here," start="00:19:00.304" video="mainVideo" id=subtitle]]
+[[!template text="the LEN we have here," start="00:19:03.103" video="mainVideo" id=subtitle]]
+[[!template text="the COUNT for vector we have here," start="00:19:04.384" video="mainVideo" id=subtitle]]
+[[!template text="these are all plain Elisp expressions," start="00:19:07.504" video="mainVideo" id=subtitle]]
+[[!template text="so they are implicitly evaluated if necessary." start="00:19:10.224" video="mainVideo" id=subtitle]]
+[[!template text="If you want them to be constant," start="00:19:13.025" video="mainVideo" id=subtitle]]
+[[!template text="and really constant, you can just use quotes," start="00:19:14.705" video="mainVideo" id=subtitle]]
+[[!template text="for those rare cases where it's necessary." start="00:19:16.705" video="mainVideo" id=subtitle]]
+[[!template text="Another thing is that you can extend it" start="00:19:20.145" video="mainVideo" id=subtitle]]
+[[!template text="with with bindat-defmacro." start="00:19:21.905" video="mainVideo" id=subtitle]]
+[[!template text="Okay, let's go back here." start="00:19:25.505" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So what are the advantages of this approach?" start="00:19:30.226" video="mainVideo" id=subtitle]]
+[[!template text="As I said, one of the main advantages" start="00:19:32.706" video="mainVideo" id=subtitle]]
+[[!template text="is that we now have support for Edebug." start="00:19:34.625" video="mainVideo" id=subtitle]]
+[[!template text="We don't have 'struct', 'repeat', and 'align'" start="00:19:39.346" video="mainVideo" id=subtitle]]
+[[!template text="as special cases anymore." start="00:19:41.426" video="mainVideo" id=subtitle]]
+[[!template text="These are just normal types." start="00:19:42.946" video="mainVideo" id=subtitle]]
+[[!template text="Before, there was uint as type, int as type," start="00:19:44.625" video="mainVideo" id=subtitle]]
+[[!template text="and those kinds of things." start="00:19:48.067" video="mainVideo" id=subtitle]]
+[[!template text="'struct' and 'repeat' and 'align'" start="00:19:49.267" video="mainVideo" id=subtitle]]
+[[!template text="were in a different case." start="00:19:51.110" video="mainVideo" id=subtitle]]
+[[!template text="So there were" start="00:19:53.267" video="mainVideo" id=subtitle]]
+[[!template text="some subtle differences between those" start="00:19:54.387" video="mainVideo" id=subtitle]]
+[[!template text="that completely disappeared." start="00:19:56.787" video="mainVideo" id=subtitle]]
+[[!template text="Also in the special cases, there was 'union'," start="00:19:59.027" video="mainVideo" id=subtitle]]
+[[!template text="and union now has completely disappeared." start="00:20:02.626" video="mainVideo" id=subtitle]]
+[[!template text="We don't need it anymore, because instead," start="00:20:05.027" video="mainVideo" id=subtitle]]
+[[!template text="we can actually use code anywhere." start="00:20:07.828" video="mainVideo" id=subtitle]]
+[[!template text="That's one of the things I didn't mention here," start="00:20:09.588" video="mainVideo" id=subtitle]]
+[[!template text="but in this note here," start="00:20:11.908" video="mainVideo" id=subtitle]]
+[[!template text="that's one of the important notes." start="00:20:17.268" video="mainVideo" id=subtitle]]
+[[!template text="Not only are BITLEN, LEN, COUNT etc." start="00:20:19.747" video="mainVideo" id=subtitle]]
+[[!template text="Elisp expressions," start="00:20:21.987" video="mainVideo" id=subtitle]]
+[[!template text="but the type itself -- any type itself --" start="00:20:23.028" video="mainVideo" id=subtitle]]
+[[!template text="is basically an expression." start="00:20:26.789" video="mainVideo" id=subtitle]]
+[[!template text="And so you can, instead of having 'uint BITLEN'," start="00:20:29.029" video="mainVideo" id=subtitle]]
+[[!template text="you can have '(if blah-blah-blah uint string)'," start="00:20:32.709" video="mainVideo" id=subtitle]]
+[[!template text="and so you can have a field" start="00:20:36.628" video="mainVideo" id=subtitle]]
+[[!template text="that can be either string or an int," start="00:20:38.149" video="mainVideo" id=subtitle]]
+[[!template text="depending on some condition." start="00:20:40.549" video="mainVideo" id=subtitle]]
+[[!template text="And for that reason we don't need a union." start="00:20:44.790" video="mainVideo" id=subtitle]]
+[[!template text="Instead of having a union," start="00:20:46.869" video="mainVideo" id=subtitle]]
+[[!template text="we can just have a 'cond' or a 'pcase'" start="00:20:47.910" video="mainVideo" id=subtitle]]
+[[!template text="that will return the type we want to use," start="00:20:50.710" video="mainVideo" id=subtitle]]
+[[!template text="depending on the context," start="00:20:53.590" video="mainVideo" id=subtitle]]
+[[!template text="which will generally depend on some previous field." start="00:20:55.109" video="mainVideo" id=subtitle]]
+[[!template text="Also we don't need to use single-field structs" start="00:21:00.951" video="mainVideo" id=subtitle]]
+[[!template text="for simple types anymore," start="00:21:03.750" video="mainVideo" id=subtitle]]
+[[!template text="because there's no distinction between struct" start="00:21:05.351" video="mainVideo" id=subtitle]]
+[[!template text="and other types." start="00:21:09.271" video="mainVideo" id=subtitle]]
+[[!template text="So we can pass to bindat-pack and bindat-unpack" start="00:21:11.271" video="mainVideo" id=subtitle]]
+[[!template text="a specification which just says &quot ;here's an integer&quot ;" start="00:21:17.191" video="mainVideo" id=subtitle]]
+[[!template text="and we'll just pack and unpack the integer." start="00:21:20.952" video="mainVideo" id=subtitle]]
+[[!template text="And of course now all the code is exposed," start="00:21:24.392" video="mainVideo" id=subtitle]]
+[[!template text="so not only Edebug works, but also Flymake," start="00:21:26.472" video="mainVideo" id=subtitle]]
+[[!template text="and the compiler, etc. --" start="00:21:29.192" video="mainVideo" id=subtitle]]
+[[!template text="they can complain about it," start="00:21:30.392" video="mainVideo" id=subtitle]]
+[[!template text="and give you warnings and errors as we like them." start="00:21:33.111" video="mainVideo" id=subtitle]]
+[[!template text="And of course the kittens are much happier." start="00:21:38.872" video="mainVideo" id=subtitle]]
+[[!template text="Okay. This is going a bit over time," start="00:21:44.553" video="mainVideo" id=subtitle]]
+[[!template text="so let's try to go faster." start="00:21:48.153" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Here are some of the new features" start="00:21:51.273" video="mainVideo" id=subtitle]]
+[[!template text="that are introduced." start="00:21:53.753" video="mainVideo" id=subtitle]]
+[[!template text="I already mentioned briefly" start="00:21:54.794" video="mainVideo" id=subtitle]]
+[[!template text="that you can define new types with bindat-defmacro." start="00:21:56.314" video="mainVideo" id=subtitle]]
+[[!template text="that's one of the important novelties," start="00:22:00.633" video="mainVideo" id=subtitle]]
+[[!template text="and you can extend BinDat with new types this way." start="00:22:04.474" video="mainVideo" id=subtitle]]
+[[!template text="The other thing you can do is" start="00:22:08.794" video="mainVideo" id=subtitle]]
+[[!template text="you can control how values or packets" start="00:22:10.714" video="mainVideo" id=subtitle]]
+[[!template text="are unpacked, and how they are represented." start="00:22:16.234" video="mainVideo" id=subtitle]]
+[[!template text="In the old BinDat," start="00:22:20.315" video="mainVideo" id=subtitle]]
+[[!template text="the packet is necessarily represented," start="00:22:22.555" video="mainVideo" id=subtitle]]
+[[!template text="when you unpack it, as an alist, basically," start="00:22:24.315" video="mainVideo" id=subtitle]]
+[[!template text="or a struct becomes an alist," start="00:22:28.635" video="mainVideo" id=subtitle]]
+[[!template text="and that's all there is." start="00:22:30.396" video="mainVideo" id=subtitle]]
+[[!template text="You don't have any choice about it." start="00:22:31.676" video="mainVideo" id=subtitle]]
+[[!template text="With the new system," start="00:22:34.076" video="mainVideo" id=subtitle]]
+[[!template text="by default, it also returns just an alist," start="00:22:35.596" video="mainVideo" id=subtitle]]
+[[!template text="but you can actually control what it's unpacked as," start="00:22:38.076" video="mainVideo" id=subtitle]]
+[[!template text="or what it's packed from, using these keywords." start="00:22:41.916" video="mainVideo" id=subtitle]]
+[[!template text="With :unpack-val, you can give an expression" start="00:22:46.396" video="mainVideo" id=subtitle]]
+[[!template text="that will construct the unpacked value" start="00:22:49.597" video="mainVideo" id=subtitle]]
+[[!template text="from the various fields." start="00:22:53.357" video="mainVideo" id=subtitle]]
+[[!template text="And with :pack-val and :pack-var," start="00:22:56.957" video="mainVideo" id=subtitle]]
+[[!template text="you can specify how to extract the information" start="00:22:59.197" video="mainVideo" id=subtitle]]
+[[!template text="from the unpacked value" start="00:23:02.557" video="mainVideo" id=subtitle]]
+[[!template text="to generate the pack value." start="00:23:05.117" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So here are some examples." start="00:23:08.078" video="mainVideo" id=subtitle]]
+[[!template text="Here's an example taken from osc." start="00:23:12.637" video="mainVideo" id=subtitle]]
+[[!template text="osc actually doesn't use BinDat currently," start="00:23:15.358" video="mainVideo" id=subtitle]]
+[[!template text="but I have played with it" start="00:23:17.438" video="mainVideo" id=subtitle]]
+[[!template text="to see what it would look like" start="00:23:22.479" video="mainVideo" id=subtitle]]
+[[!template text="if we were to use BinDat." start="00:23:23.758" video="mainVideo" id=subtitle]]
+[[!template text="So here's the definition" start="00:23:26.159" video="mainVideo" id=subtitle]]
+[[!template text="of the timetag representation," start="00:23:28.638" video="mainVideo" id=subtitle]]
+[[!template text="which represents timestamps in osc." start="00:23:30.638" video="mainVideo" id=subtitle]]
+[[!template text="So you would use bindat-type" start="00:23:35.279" video="mainVideo" id=subtitle]]
+[[!template text="and then you have here :pack-var" start="00:23:37.998" video="mainVideo" id=subtitle]]
+[[!template text="basically gives a name" start="00:23:40.559" video="mainVideo" id=subtitle]]
+[[!template text="when we try to pack a timestamp." start="00:23:42.080" video="mainVideo" id=subtitle]]
+[[!template text="'time' will be the variable whose name contains" start="00:23:48.559" video="mainVideo" id=subtitle]]
+[[!template text="the actual timestamp we will receive." start="00:23:51.520" video="mainVideo" id=subtitle]]
+[[!template text="So we want to represent the unpacked value" start="00:23:54.159" video="mainVideo" id=subtitle]]
+[[!template text="as a normal Emacs timestamp," start="00:23:57.520" video="mainVideo" id=subtitle]]
+[[!template text="and then basically convert from this timestamp" start="00:24:00.240" video="mainVideo" id=subtitle]]
+[[!template text="to a string, or from a string to this timestamp." start="00:24:02.480" video="mainVideo" id=subtitle]]
+[[!template text="When we receive it, it will be called time," start="00:24:06.401" video="mainVideo" id=subtitle]]
+[[!template text="so we can refer to it," start="00:24:10.080" video="mainVideo" id=subtitle]]
+[[!template text="and so in order to actually encode it," start="00:24:12.240" video="mainVideo" id=subtitle]]
+[[!template text="we basically turn this timestamp into an integer --" start="00:24:15.360" video="mainVideo" id=subtitle]]
+[[!template text="that's what this :pack-val does." start="00:24:18.320" video="mainVideo" id=subtitle]]
+[[!template text="It says when we try to pack it," start="00:24:20.799" video="mainVideo" id=subtitle]]
+[[!template text="here's the the value that we should use." start="00:24:23.442" video="mainVideo" id=subtitle]]
+[[!template text="We turn it into an integer," start="00:24:26.082" video="mainVideo" id=subtitle]]
+[[!template text="and then this integer is going to be encoded" start="00:24:27.760" video="mainVideo" id=subtitle]]
+[[!template text="as a uint 64-bit. So a 64-bit unsigned integer." start="00:24:30.320" video="mainVideo" id=subtitle]]
+[[!template text="When we try to unpack the value," start="00:24:36.163" video="mainVideo" id=subtitle]]
+[[!template text="this 'ticks' field" start="00:24:38.960" video="mainVideo" id=subtitle]]
+[[!template text="will contain an unsigned int of 64 bits." start="00:24:40.720" video="mainVideo" id=subtitle]]
+[[!template text="We want to return instead a timestamp --" start="00:24:45.679" video="mainVideo" id=subtitle]]
+[[!template text="a time value -- from Emacs." start="00:24:50.559" video="mainVideo" id=subtitle]]
+[[!template text="Here we use the representation of time" start="00:24:53.924" video="mainVideo" id=subtitle]]
+[[!template text="as a pair of number of ticks" start="00:24:59.363" video="mainVideo" id=subtitle]]
+[[!template text="and the corresponding frequency of those ticks." start="00:25:02.799" video="mainVideo" id=subtitle]]
+[[!template text="So that's what we do here with :unpack-val," start="00:25:06.720" video="mainVideo" id=subtitle]]
+[[!template text="which is construct the cons corresponding to it." start="00:25:09.120" video="mainVideo" id=subtitle]]
+[[!template text="With this definition, bindat-pack/unpack" start="00:25:12.004" video="mainVideo" id=subtitle]]
+[[!template text="are going to convert to and from" start="00:25:16.400" video="mainVideo" id=subtitle]]
+[[!template text="proper time values on one side," start="00:25:19.039" video="mainVideo" id=subtitle]]
+[[!template text="and binary strings on the other." start="00:25:21.760" video="mainVideo" id=subtitle]]
+[[!template text="Note, of course," start="00:25:26.159" video="mainVideo" id=subtitle]]
+[[!template text="that I complained that the old BinDat" start="00:25:27.520" video="mainVideo" id=subtitle]]
+[[!template text="had to use single-field structs for simple types," start="00:25:30.320" video="mainVideo" id=subtitle]]
+[[!template text="and here, basically," start="00:25:36.080" video="mainVideo" id=subtitle]]
+[[!template text="I'm back using single-field structs as well" start="00:25:37.039" video="mainVideo" id=subtitle]]
+[[!template text="for this particular case --" start="00:25:39.840" video="mainVideo" id=subtitle]]
+[[!template text="actually a reasonably frequent case, to be honest." start="00:25:41.120" video="mainVideo" id=subtitle]]
+[[!template text="But at least this is not so problematic," start="00:25:44.640" video="mainVideo" id=subtitle]]
+[[!template text="because we actually control what is returned," start="00:25:49.279" video="mainVideo" id=subtitle]]
+[[!template text="so even though it's a single-field struct," start="00:25:51.840" video="mainVideo" id=subtitle]]
+[[!template text="it's not going to construct an alist" start="00:25:54.159" video="mainVideo" id=subtitle]]
+[[!template text="or force you to construct an alist." start="00:25:56.640" video="mainVideo" id=subtitle]]
+[[!template text="Instead, it really receives and takes a value" start="00:25:58.320" video="mainVideo" id=subtitle]]
+[[!template text="in the ideal representation that we chose." start="00:26:02.720" video="mainVideo" id=subtitle]]
+[[!template text="Here we have a more complex example," start="00:26:07.367" video="mainVideo" id=subtitle]]
+[[!template text="where the actual type is recursive," start="00:26:10.007" video="mainVideo" id=subtitle]]
+[[!template text="because it's representing those &quot ;LEB&quot ;..." start="00:26:12.488" video="mainVideo" id=subtitle]]
+[[!template text="I can't remember what &quot ;LEB&quot ; stands for," start="00:26:18.640" video="mainVideo" id=subtitle]]
+[[!template text="but it's a representation" start="00:26:20.400" video="mainVideo" id=subtitle]]
+[[!template text="for arbitrary length integers," start="00:26:22.559" video="mainVideo" id=subtitle]]
+[[!template text="where basically" start="00:26:25.600" video="mainVideo" id=subtitle]]
+[[!template text="every byte is either smaller than 128," start="00:26:27.520" video="mainVideo" id=subtitle]]
+[[!template text="in which case it's the end of the of the value," start="00:26:33.360" video="mainVideo" id=subtitle]]
+[[!template text="or it's a value bigger than 128," start="00:26:36.799" video="mainVideo" id=subtitle]]
+[[!template text="in which case there's an extra byte on the end" start="00:26:39.760" video="mainVideo" id=subtitle]]
+[[!template text="that's going to continue." start="00:26:42.159" video="mainVideo" id=subtitle]]
+[[!template text="Here we see the representation" start="00:26:44.490" video="mainVideo" id=subtitle]]
+[[!template text="is basically a structure that starts with a byte," start="00:26:46.640" video="mainVideo" id=subtitle]]
+[[!template text="which contains this value," start="00:26:52.240" video="mainVideo" id=subtitle]]
+[[!template text="which can be either the last value or not," start="00:26:53.679" video="mainVideo" id=subtitle]]
+[[!template text="and the tail, which will either be empty," start="00:26:56.000" video="mainVideo" id=subtitle]]
+[[!template text="or contain something else." start="00:26:59.770" video="mainVideo" id=subtitle]]
+[[!template text="The empty case is here;" start="00:27:01.279" video="mainVideo" id=subtitle]]
+[[!template text="if the head value is smaller than 128," start="00:27:04.000" video="mainVideo" id=subtitle]]
+[[!template text="then the type of this tail is going to be (unit 0)," start="00:27:07.039" video="mainVideo" id=subtitle]]
+[[!template text="so basically 'unit' is the empty type," start="00:27:11.840" video="mainVideo" id=subtitle]]
+[[!template text="and 0 is the value we will receive when we read it." start="00:27:16.492" video="mainVideo" id=subtitle]]
+[[!template text="And if not, then it has as type 'loop'," start="00:27:20.880" video="mainVideo" id=subtitle]]
+[[!template text="which is the type we're defining," start="00:27:25.520" video="mainVideo" id=subtitle]]
+[[!template text="so it's the recursive case," start="00:27:28.240" video="mainVideo" id=subtitle]]
+[[!template text="where then the rest of the type is the type itself." start="00:27:30.491" video="mainVideo" id=subtitle]]
+[[!template text="And so this lets us pack and unpack." start="00:27:35.132" video="mainVideo" id=subtitle]]
+[[!template text="We pass it an arbitrary size integer," start="00:27:37.120" video="mainVideo" id=subtitle]]
+[[!template text="and it's going to turn it into" start="00:27:39.600" video="mainVideo" id=subtitle]]
+[[!template text="this LEB128 binary representation, and vice versa." start="00:27:42.240" video="mainVideo" id=subtitle]]
+[[!template text="I have other examples if you're interested," start="00:27:48.492" video="mainVideo" id=subtitle]]
+[[!template text="but anyway, here's the conclusion." start="00:27:52.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="We have a simpler, more flexible," start="00:27:56.094" video="mainVideo" id=subtitle]]
+[[!template text="and more powerful BinDat now," start="00:27:58.320" video="mainVideo" id=subtitle]]
+[[!template text="which is also significantly faster." start="00:28:01.039" video="mainVideo" id=subtitle]]
+[[!template text="And I can't remember the exact speed-up," start="00:28:03.454" video="mainVideo" id=subtitle]]
+[[!template text="but it's definitely not a few percents." start="00:28:06.799" video="mainVideo" id=subtitle]]
+[[!template text="I vaguely remember about 4x faster in my tests," start="00:28:08.720" video="mainVideo" id=subtitle]]
+[[!template text="but it's probably very different in different cases" start="00:28:12.640" video="mainVideo" id=subtitle]]
+[[!template text="so it might be just 4x, 2x -- who knows?" start="00:28:16.815" video="mainVideo" id=subtitle]]
+[[!template text="Try it for yourself, but I was pretty pleased," start="00:28:20.159" video="mainVideo" id=subtitle]]
+[[!template text="because it wasn't the main motivation, so anyway..." start="00:28:23.374" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The negatives are here." start="00:28:28.336" video="mainVideo" id=subtitle]]
+[[!template text="In the new system, there's this bindat-defmacro" start="00:28:31.135" video="mainVideo" id=subtitle]]
+[[!template text="which lets us define, kind of, new types," start="00:28:34.480" video="mainVideo" id=subtitle]]
+[[!template text="and bindat-type also lets us define new types," start="00:28:36.720" video="mainVideo" id=subtitle]]
+[[!template text="and the distinction between them is a bit subtle;" start="00:28:40.895" video="mainVideo" id=subtitle]]
+[[!template text="it kind of depends on..." start="00:28:45.360" video="mainVideo" id=subtitle]]
+[[!template text="well it has an impact on efficiency" start="00:28:48.080" video="mainVideo" id=subtitle]]
+[[!template text="more than anything, so it's not very satisfactory." start="00:28:50.880" video="mainVideo" id=subtitle]]
+[[!template text="There's a bit of redundancy between the two." start="00:28:53.520" video="mainVideo" id=subtitle]]
+[[!template text="There is no bit-level control, just as before." start="00:28:56.737" video="mainVideo" id=subtitle]]
+[[!template text="We can only manipulate basically bytes." start="00:28:59.039" video="mainVideo" id=subtitle]]
+[[!template text="So this is definitely not usable" start="00:29:02.098" video="mainVideo" id=subtitle]]
+[[!template text="for a Huffman encoding kind of thing." start="00:29:03.360" video="mainVideo" id=subtitle]]
+[[!template text="Also, it's not nearly as flexible" start="00:29:09.058" video="mainVideo" id=subtitle]]
+[[!template text="as some of the alternatives." start="00:29:10.880" video="mainVideo" id=subtitle]]
+[[!template text="So you know GNU Poke" start="00:29:12.240" video="mainVideo" id=subtitle]]
+[[!template text="has been a vague inspiration for this work," start="00:29:13.760" video="mainVideo" id=subtitle]]
+[[!template text="and GNU Poke gives you a lot more power" start="00:29:20.018" video="mainVideo" id=subtitle]]
+[[!template text="in how to specify the types, etc." start="00:29:22.480" video="mainVideo" id=subtitle]]
+[[!template text="And of course one of the main downsides" start="00:29:25.059" video="mainVideo" id=subtitle]]
+[[!template text="is that it's still not used very much." start="00:29:26.579" video="mainVideo" id=subtitle]]
+[[!template text="Actually the new BinDat" start="00:29:28.018" video="mainVideo" id=subtitle]]
+[[!template text="is not used by any package" start="00:29:29.283" video="mainVideo" id=subtitle]]
+[[!template text="as far as I know right now," start="00:29:31.039" video="mainVideo" id=subtitle]]
+[[!template text="but even the old one is not used very often," start="00:29:33.059" video="mainVideo" id=subtitle]]
+[[!template text="so who knows" start="00:29:35.279" video="mainVideo" id=subtitle]]
+[[!template text="whether it's actually going to" start="00:29:36.799" video="mainVideo" id=subtitle]]
+[[!template text="work very much better or not?" start="00:29:38.799" video="mainVideo" id=subtitle]]
+[[!template text="Anyway, this is it for this talk." start="00:29:41.520" video="mainVideo" id=subtitle]]
+[[!template text="Thank you very much. Have a nice day." start="00:29:44.399" video="mainVideo" id=subtitle]]
+[[!template text="(captions by John Cummings)" start="00:29:46.683" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/borg.md b/2021/captions/borg.md
new file mode 100644
index 00000000..f35d5c41
--- /dev/null
+++ b/2021/captions/borg.md
@@ -0,0 +1,155 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello, my name is Dhavan," start="00:00:00.950" video="mainVideo" id=subtitle]]
+[[!template text="also known as codingquark!" start="00:00:03.225" video="mainVideo" id=subtitle]]
+[[!template text="I started out learning Emacs" start="00:00:05.500" video="mainVideo" id=subtitle]]
+[[!template text="without knowing I had to plug things in" start="00:00:08.041" video="mainVideo" id=subtitle]]
+[[!template text="to make it work." start="00:00:12.540" video="mainVideo" id=subtitle]]
+[[!template text="Eventually I had to learn to set up ELPA." start="00:00:13.629" video="mainVideo" id=subtitle]]
+[[!template text="Since then I’ve used MELPA" start="00:00:14.849" video="mainVideo" id=subtitle]]
+[[!template text="and Debian apt sources." start="00:00:16.850" video="mainVideo" id=subtitle]]
+[[!template text="Recent discussions about ELPA," start="00:00:21.030" video="mainVideo" id=subtitle]]
+[[!template text="NonGNU ELPA, MELPA, etc." start="00:00:21.054" video="mainVideo" id=subtitle]]
+[[!template text="made me reconsider" start="00:00:21.054" video="mainVideo" id=subtitle]]
+[[!template text="what I was doing" start="00:00:21.054" video="mainVideo" id=subtitle]]
+[[!template text="with my Emacs." start="00:00:21.054" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I am not the kind of person" start="00:00:28.590" video="mainVideo" id=subtitle]]
+[[!template text="to mindlessly ram things into my emacs." start="00:00:30.887" video="mainVideo" id=subtitle]]
+[[!template text="I like to ponder," start="00:00:34.290" video="mainVideo" id=subtitle]]
+[[!template text="to understand," start="00:00:36.041" video="mainVideo" id=subtitle]]
+[[!template text="to have a level of control" start="00:00:37.500" video="mainVideo" id=subtitle]]
+[[!template text="and mindfulness" start="00:00:40.128" video="mainVideo" id=subtitle]]
+[[!template text="about my Emacs." start="00:00:42.069" video="mainVideo" id=subtitle]]
+[[!template text="It is not just a matter" start="00:00:43.890" video="mainVideo" id=subtitle]]
+[[!template text="of trying things out," start="00:00:45.730" video="mainVideo" id=subtitle]]
+[[!template text="it is about living an examined life" start="00:00:47.340" video="mainVideo" id=subtitle]]
+[[!template text="as the Greeks would say;" start="00:00:50.909" video="mainVideo" id=subtitle]]
+[[!template text="or sutta as Buddhists would say." start="00:00:53.387" video="mainVideo" id=subtitle]]
+[[!template text="Such an Emacs is an Emacs worth having." start="00:00:57.040" video="mainVideo" id=subtitle]]
+[[!template new="1" text="This pursuit of mine" start="00:00:59.860" video="mainVideo" id=subtitle]]
+[[!template text="brought me to learn about borg." start="00:01:01.414" video="mainVideo" id=subtitle]]
+[[!template text="And I am going to share with you" start="00:01:03.710" video="mainVideo" id=subtitle]]
+[[!template text="how to use it." start="00:01:05.595" video="mainVideo" id=subtitle]]
+[[!template text="I believe the approach of using borg" start="00:01:06.479" video="mainVideo" id=subtitle]]
+[[!template text="for package management" start="00:01:09.018" video="mainVideo" id=subtitle]]
+[[!template text="is not for everyone." start="00:01:10.597" video="mainVideo" id=subtitle]]
+[[!template text="It involves knowing git," start="00:01:12.710" video="mainVideo" id=subtitle]]
+[[!template text="it involves looking into source code" start="00:01:14.307" video="mainVideo" id=subtitle]]
+[[!template text="and reading makefiles." start="00:01:16.648" video="mainVideo" id=subtitle]]
+[[!template text="Sure, anyone can learn" start="00:01:18.229" video="mainVideo" id=subtitle]]
+[[!template text="should they be motivated so," start="00:01:20.170" video="mainVideo" id=subtitle]]
+[[!template text="but people have different priorities." start="00:01:22.617" video="mainVideo" id=subtitle]]
+[[!template text="This is what is working for me right now." start="00:01:25.740" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Here is what we are going to do." start="00:01:29.056" video="mainVideo" id=subtitle]]
+[[!template text="We'll set up Debian, install dependencies," start="00:01:32.826" video="mainVideo" id=subtitle]]
+[[!template text="set up borg, install a package," start="00:01:35.696" video="mainVideo" id=subtitle]]
+[[!template text="and make sure it installs all the docs." start="00:01:39.032" video="mainVideo" id=subtitle]]
+[[!template text="Let’s get started!" start="00:01:42.090" video="mainVideo" id=subtitle]]
+[[!template text="Would it not be amazing" start="00:01:47.240" video="mainVideo" id=subtitle]]
+[[!template text="if we could start out with" start="00:01:48.342" video="mainVideo" id=subtitle]]
+[[!template text="just Debian and basic tools?" start="00:01:49.560" video="mainVideo" id=subtitle]]
+[[!template text="For borg, we need git," start="00:01:52.399" video="mainVideo" id=subtitle]]
+[[!template text="build-essential," start="00:01:54.848" video="mainVideo" id=subtitle]]
+[[!template text="and something to build docs." start="00:01:55.916" video="mainVideo" id=subtitle]]
+[[!template text="Nothing more!" start="00:01:57.384" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now that we have the OS setup," start="00:02:00.499" video="mainVideo" id=subtitle]]
+[[!template text="it is time to clone" start="00:02:04.658" video="mainVideo" id=subtitle]]
+[[!template text="what is called a “seed”." start="00:02:06.226" video="mainVideo" id=subtitle]]
+[[!template text="A seed will speed our process up" start="00:02:09.429" video="mainVideo" id=subtitle]]
+[[!template text="by providing things like" start="00:02:11.431" video="mainVideo" id=subtitle]]
+[[!template text="magit, epkg, auto-compile, etc." start="00:02:13.379" video="mainVideo" id=subtitle]]
+[[!template text="We will soon be using epkg and magit." start="00:02:15.500" video="mainVideo" id=subtitle]]
+[[!template text="The docs cover how to start" start="00:02:20.430" video="mainVideo" id=subtitle]]
+[[!template text="without a seed," start="00:02:22.642" video="mainVideo" id=subtitle]]
+[[!template text="but for the purposes of a short demo," start="00:02:23.477" video="mainVideo" id=subtitle]]
+[[!template text="seeds are better." start="00:02:25.779" video="mainVideo" id=subtitle]]
+[[!template text="I started with a seed" start="00:02:27.770" video="mainVideo" id=subtitle]]
+[[!template text="for my own dot emacs." start="00:02:28.682" video="mainVideo" id=subtitle]]
+[[!template text="It is fairly slim." start="00:02:30.083" video="mainVideo" id=subtitle]]
+[[!template new="1" text="As you can see," start="00:02:32.890" video="mainVideo" id=subtitle]]
+[[!template text="borg uses git URLs" start="00:02:33.854" video="mainVideo" id=subtitle]]
+[[!template text="and /not/ HTTPS URLs." start="00:02:35.088" video="mainVideo" id=subtitle]]
+[[!template text="Make sure you have your ssh keys" start="00:02:37.290" video="mainVideo" id=subtitle]]
+[[!template text="set up on GitHub, GitLab, etc." start="00:02:38.992" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Bootstrapping is like cloning a dot emacs," start="00:02:43.989" video="mainVideo" id=subtitle]]
+[[!template text="but it only comes with a" start="00:02:45.899" video="mainVideo" id=subtitle]]
+[[!template text="useful dot git submodules file." start="00:02:47.310" video="mainVideo" id=subtitle]]
+[[!template text="We get a Makefile that has targets" start="00:02:51.400" video="mainVideo" id=subtitle]]
+[[!template text="like help and bootstrap-borg." start="00:02:54.841" video="mainVideo" id=subtitle]]
+[[!template text="There will be more targets" start="00:02:57.739" video="mainVideo" id=subtitle]]
+[[!template text="after we finish the bootstrapping process." start="00:02:59.880" video="mainVideo" id=subtitle]]
+[[!template text="Then, we need to clone all the git modules," start="00:03:30.110" video="mainVideo" id=subtitle]]
+[[!template text="which is also done by a make target." start="00:03:35.582" video="mainVideo" id=subtitle]]
+[[!template text="This time, it will not just pull" start="00:03:38.310" video="mainVideo" id=subtitle]]
+[[!template text="the git submodules," start="00:03:40.754" video="mainVideo" id=subtitle]]
+[[!template text="but will also run various things" start="00:03:42.656" video="mainVideo" id=subtitle]]
+[[!template text="like auto-compilation," start="00:03:44.658" video="mainVideo" id=subtitle]]
+[[!template text="Info doc installation, etc." start="00:03:45.826" video="mainVideo" id=subtitle]]
+[[!template text="Good thing we installed texinfo earlier!" start="00:03:48.030" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now that we have borg bootstrapped," start="00:04:08.282" video="mainVideo" id=subtitle]]
+[[!template text="let’s see how to “assimilate” a drone." start="00:04:10.884" video="mainVideo" id=subtitle]]
+[[!template text="Well, that’s just a borg way of saying" start="00:04:14.520" video="mainVideo" id=subtitle]]
+[[!template text="how to install a new package." start="00:04:17.090" video="mainVideo" id=subtitle]]
+[[!template text="We get to work from inside Emacs now." start="00:04:19.900" video="mainVideo" id=subtitle]]
+[[!template text="Borg has excellent info docs," start="00:04:22.910" video="mainVideo" id=subtitle]]
+[[!template text="should you ever be having questions." start="00:04:26.366" video="mainVideo" id=subtitle]]
+[[!template text="I earlier talked about using a seed." start="00:04:28.450" video="mainVideo" id=subtitle]]
+[[!template text="Borg docs go into details of what that means." start="00:04:32.240" video="mainVideo" id=subtitle]]
+[[!template text="I encourage you to read the docs." start="00:04:34.830" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let’s try to install lsp-mode." start="00:04:40.190" video="mainVideo" id=subtitle]]
+[[!template text="Examining lsp-mode" start="00:04:51.500" video="mainVideo" id=subtitle]]
+[[!template text="with epkg’s helper function," start="00:04:52.459" video="mainVideo" id=subtitle]]
+[[!template text="we can see details of the package," start="00:04:54.694" video="mainVideo" id=subtitle]]
+[[!template text="dependencies required, and so on." start="00:04:57.280" video="mainVideo" id=subtitle]]
+[[!template text="epkg uses sqlite database." start="00:05:00.200" video="mainVideo" id=subtitle]]
+[[!template text="Now you know why I installed sqlite" start="00:05:02.470" video="mainVideo" id=subtitle]]
+[[!template text="in the OS preparation step!" start="00:05:04.871" video="mainVideo" id=subtitle]]
+[[!template text="Well, lsp-mode has" start="00:05:20.820" video="mainVideo" id=subtitle]]
+[[!template text="way too many dependencies" start="00:05:22.622" video="mainVideo" id=subtitle]]
+[[!template text="for this demo." start="00:05:24.057" video="mainVideo" id=subtitle]]
+[[!template text="Note how one is naturally led" start="00:05:25.830" video="mainVideo" id=subtitle]]
+[[!template text="to take a peek at the innards of the packages" start="00:05:28.795" video="mainVideo" id=subtitle]]
+[[!template text="in this simple workflow." start="00:05:32.332" video="mainVideo" id=subtitle]]
+[[!template text="As I said, it is about being mindful!" start="00:05:34.780" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay, instead of lsp-mode," start="00:05:37.270" video="mainVideo" id=subtitle]]
+[[!template text="let’s take a look at" start="00:05:39.573" video="mainVideo" id=subtitle]]
+[[!template text="Prot’s excellent modus-themes." start="00:05:41.308" video="mainVideo" id=subtitle]]
+[[!template text="No extra dependencies needed." start="00:05:45.400" video="mainVideo" id=subtitle]]
+[[!template text="That is perfect!" start="00:05:47.247" video="mainVideo" id=subtitle]]
+[[!template text="The themes have great docs" start="00:05:49.870" video="mainVideo" id=subtitle]]
+[[!template text="and our philosopher friend" start="00:05:52.018" video="mainVideo" id=subtitle]]
+[[!template text="is good at writing." start="00:05:53.620" video="mainVideo" id=subtitle]]
+[[!template text="Alright, first, we clone the package." start="00:05:56.000" video="mainVideo" id=subtitle]]
+[[!template text="This allows us to inspect the code," start="00:06:02.930" video="mainVideo" id=subtitle]]
+[[!template text="should we want to." start="00:06:04.664" video="mainVideo" id=subtitle]]
+[[!template text="Well, you /should/." start="00:06:06.330" video="mainVideo" id=subtitle]]
+[[!template text="Upon inspecting the code," start="00:06:23.000" video="mainVideo" id=subtitle]]
+[[!template text="we ask borg to assimilate the package." start="00:06:25.552" video="mainVideo" id=subtitle]]
+[[!template text="This will load the code in our Emacs" start="00:06:30.620" video="mainVideo" id=subtitle]]
+[[!template text="and make the package available for use." start="00:06:33.927" video="mainVideo" id=subtitle]]
+[[!template tnew="1" ext="Wait, I was praising all the docs," start="00:06:39.799" video="mainVideo" id=subtitle]]
+[[!template text="but where are they?" start="00:06:42.135" video="mainVideo" id=subtitle]]
+[[!template text="To install the docs," start="00:06:43.690" video="mainVideo" id=subtitle]]
+[[!template text="we need to instruct borg" start="00:06:44.571" video="mainVideo" id=subtitle]]
+[[!template text="about where to find them." start="00:06:46.273" video="mainVideo" id=subtitle]]
+[[!template text="To do this, we edit the gitmodules file" start="00:06:48.020" video="mainVideo" id=subtitle]]
+[[!template text="and add the details." start="00:06:51.978" video="mainVideo" id=subtitle]]
+[[!template text="There they are!" start="00:06:53.910" video="mainVideo" id=subtitle]]
+[[!template text="We have our docs!" start="00:06:58.310" video="mainVideo" id=subtitle]]
+[[!template text="Alright, we have assimilated a package." start="00:07:04.170" video="mainVideo" id=subtitle]]
+[[!template text="After sufficient testing," start="00:07:09.940" video="mainVideo" id=subtitle]]
+[[!template text="we can commit it as a part of our own dot emacs," start="00:07:11.398" video="mainVideo" id=subtitle]]
+[[!template text="which is a drone of our borg collective." start="00:07:14.234" video="mainVideo" id=subtitle]]
+[[!template text="Since all the packages are git submodules," start="00:07:19.272" video="mainVideo" id=subtitle]]
+[[!template text="we get to use magit" start="00:07:21.741" video="mainVideo" id=subtitle]]
+[[!template text="(all hail magit!)" start="00:07:23.810" video="mainVideo" id=subtitle]]
+[[!template text="and borg’s helper functions" start="00:07:25.245" video="mainVideo" id=subtitle]]
+[[!template text="to commit the code." start="00:07:27.514" video="mainVideo" id=subtitle]]
+[[!template text="Now create your own dot el file" start="00:07:29.530" video="mainVideo" id=subtitle]]
+[[!template text="and hack away!" start="00:07:31.818" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So that is it." start="00:07:38.758" video="mainVideo" id=subtitle]]
+[[!template text="I hope you enjoyed the talk" start="00:07:39.793" video="mainVideo" id=subtitle]]
+[[!template text="and I will be hanging out in IRC" start="00:07:41.661" video="mainVideo" id=subtitle]]
+[[!template text="if you have any questions." start="00:07:45.131" video="mainVideo" id=subtitle]]
+[[!template text="Thank you, and bye." start="00:07:46.666" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/clede.md b/2021/captions/clede.md
new file mode 100644
index 00000000..b98e0820
--- /dev/null
+++ b/2021/captions/clede.md
@@ -0,0 +1,419 @@
+<a name="transcript"></a>
+# Transcript
+
+Thanks to Hannah Miller for these captions!
+
+[[!template text="My name is Fermin. I work as" start="00:00:04.467" video="mainVideo" id=subtitle]]
+[[!template text="a Common Lisp engineer at RavenPack," start="00:00:07.617" video="mainVideo" id=subtitle]]
+[[!template text="and today I'm going to talk about" start="00:00:09.817" video="mainVideo" id=subtitle]]
+[[!template text="CLEDE: the Common Lisp Emacs Development Environment." start="00:00:11.833" video="mainVideo" id=subtitle]]
+[[!template text="So what is CLEDE?" start="00:00:15.883" video="mainVideo" id=subtitle]]
+[[!template text="So CLEDE is a project" start="00:00:19.500" video="mainVideo" id=subtitle]]
+[[!template text="I've been working on this year" start="00:00:20.500" video="mainVideo" id=subtitle]]
+[[!template text="for better... well, yeah..." start="00:00:22.117" video="mainVideo" id=subtitle]]
+[[!template text="a better Common Lisp integration" start="00:00:24.750" video="mainVideo" id=subtitle]]
+[[!template text="for static tools and" start="00:00:27.217" video="mainVideo" id=subtitle]]
+[[!template text="for static and integrated Emacs tools." start="00:00:30.417" video="mainVideo" id=subtitle]]
+[[!template text="And to understand better what" start="00:00:33.350" video="mainVideo" id=subtitle]]
+[[!template text="CLEDE is, one first has to understand" start="00:00:35.467" video="mainVideo" id=subtitle]]
+[[!template text="the base that I use..." start="00:00:37.750" video="mainVideo" id=subtitle]]
+[[!template text="so the foundation that I use for CLEDE." start="00:00:40.233" video="mainVideo" id=subtitle]]
+[[!template text="Um, so it is CEDET--" start="00:00:43.867" video="mainVideo" id=subtitle]]
+[[!template text="and specifically Semantic--" start="00:00:46.150" video="mainVideo" id=subtitle]]
+[[!template text="so we first have to talk about and" start="00:00:47.517" video="mainVideo" id=subtitle]]
+[[!template text="understand what it is." start="00:00:49.833" video="mainVideo" id=subtitle]]
+[[!template text="So CEDET is a collection" start="00:00:50.517" video="mainVideo" id=subtitle]]
+[[!template text="of Emacs development environment tools." start="00:00:53.917" video="mainVideo" id=subtitle]]
+[[!template text="It was created by Eric Ludlam" start="00:00:55.283" video="mainVideo" id=subtitle]]
+[[!template text="(I hope to say that name right)" start="00:00:57.333" video="mainVideo" id=subtitle]]
+[[!template text="in the late 90s, and" start="00:01:00.867" video="mainVideo" id=subtitle]]
+[[!template text="the idea was to create entire IDE for Emacs." start="00:01:02.433" video="mainVideo" id=subtitle]]
+[[!template text="CEDET is still integrated into Emacs," start="00:01:04.933" video="mainVideo" id=subtitle]]
+[[!template text="and it has a lot of interesting things" start="00:01:10.533" video="mainVideo" id=subtitle]]
+[[!template text="that are not used for too many people," start="00:01:11.817" video="mainVideo" id=subtitle]]
+[[!template text="so I'm going to explain some of those." start="00:01:14.133" video="mainVideo" id=subtitle]]
+[[!template text="First, let's go with the good ones that" start="00:01:16.267" video="mainVideo" id=subtitle]]
+[[!template text="one that I use for CLEDE and that can" start="00:01:18.517" video="mainVideo" id=subtitle]]
+[[!template text="be used for other projects as well." start="00:01:21.333" video="mainVideo" id=subtitle]]
+[[!template text="Some of the features that" start="00:01:23.267" video="mainVideo" id=subtitle]]
+[[!template text="CEDET has is parse generators" start="00:01:28.550" video="mainVideo" id=subtitle]]
+[[!template text="so we have Wisent and Bovine." start="00:01:32.550" video="mainVideo" id=subtitle]]
+[[!template text="Wisent is basically a Bison clone" start="00:01:35.317" video="mainVideo" id=subtitle]]
+[[!template text="that was written in Emacs Lisp" start="00:01:38.450" video="mainVideo" id=subtitle]]
+[[!template text="that you can also specify grammars." start="00:01:40.300" video="mainVideo" id=subtitle]]
+[[!template text="It's a really big and rather complex" start="00:01:43.217" video="mainVideo" id=subtitle]]
+[[!template text="tool to work with," start="00:01:45.717" video="mainVideo" id=subtitle]]
+[[!template text="and it's secretly used for, as far as" start="00:01:47.450" video="mainVideo" id=subtitle]]
+[[!template text="I know, two languages." start="00:01:49.283" video="mainVideo" id=subtitle]]
+[[!template text="They're not also well supported," start="00:01:51.767" video="mainVideo" id=subtitle]]
+[[!template text="but we'll get into that later." start="00:01:53.417" video="mainVideo" id=subtitle]]
+[[!template text="Also Bovine, which is a way more" start="00:01:55.417" video="mainVideo" id=subtitle]]
+[[!template text="simple tool, like you can..." start="00:01:58.233" video="mainVideo" id=subtitle]]
+[[!template text="you don't need grammar files," start="00:01:59.967" video="mainVideo" id=subtitle]]
+[[!template text="you can write just in plain Emacs Lisp." start="00:02:01.833" video="mainVideo" id=subtitle]]
+[[!template text="And you also have utilities to work with" start="00:02:07.450" video="mainVideo" id=subtitle]]
+[[!template text="those generated tag trees, so to say." start="00:02:11.017" video="mainVideo" id=subtitle]]
+[[!template text="These are not AST parsers like real Bison;" start="00:02:16.650" video="mainVideo" id=subtitle]]
+[[!template text="they are tag-based so they basically get" start="00:02:23.633" video="mainVideo" id=subtitle]]
+[[!template text="tags and extract information from them," start="00:02:25.717" video="mainVideo" id=subtitle]]
+[[!template text="and I can use that information" start="00:02:27.633" video="mainVideo" id=subtitle]]
+[[!template text="with Emacs Lisp" start="00:02:30.183" video="mainVideo" id=subtitle]]
+[[!template text="to contextually understand better" start="00:02:31.000" video="mainVideo" id=subtitle]]
+[[!template text="the language that you're parsing," start="00:02:33.667" video="mainVideo" id=subtitle]]
+[[!template text="but in general," start="00:02:36.367" video="mainVideo" id=subtitle]]
+[[!template text="this decision was made (as far as I know)" start="00:02:37.183" video="mainVideo" id=subtitle]]
+[[!template text="because of the Emacs Lisp" start="00:02:40.183" video="mainVideo" id=subtitle]]
+[[!template text="limitation of the time." start="00:02:43.317" video="mainVideo" id=subtitle]]
+[[!template text="So Emacs was a rather" start="00:02:44.317" video="mainVideo" id=subtitle]]
+[[!template text="slower Lisp-- slow Lisp--" start="00:02:50.333" video="mainVideo" id=subtitle]]
+[[!template text="so they decide to just use" start="00:02:52.267" video="mainVideo" id=subtitle]]
+[[!template text="tag-based thing instead of a parse--" start="00:02:55.950" video="mainVideo" id=subtitle]]
+[[!template text="I mean-- an AST-based one." start="00:02:58.850" video="mainVideo" id=subtitle]]
+[[!template text="And Semantic give you some utility with" start="00:03:02.433" video="mainVideo" id=subtitle]]
+[[!template text="that as Senator, for example, give you" start="00:03:05.267" video="mainVideo" id=subtitle]]
+[[!template text="some semantic navigation." start="00:03:06.350" video="mainVideo" id=subtitle]]
+[[!template text="So CEDET is way more than this," start="00:03:07.767" video="mainVideo" id=subtitle]]
+[[!template text="but this is not a CEDET talk." start="00:03:09.850" video="mainVideo" id=subtitle]]
+[[!template text="So if you want to get more information," start="00:03:12.533" video="mainVideo" id=subtitle]]
+[[!template text="you can go to the official webpage." start="00:03:14.083" video="mainVideo" id=subtitle]]
+[[!template text="I have to say that it is outdated, and" start="00:03:16.450" video="mainVideo" id=subtitle]]
+[[!template text="Emacs changed some things over the years" start="00:03:20.033" video="mainVideo" id=subtitle]]
+[[!template text="because CEDET was merged into Emacs" start="00:03:23.033" video="mainVideo" id=subtitle]]
+[[!template text="in 2011, as far as I know." start="00:03:24.167" video="mainVideo" id=subtitle]]
+[[!template text="You can also go to the official Emacs" start="00:03:27.867" video="mainVideo" id=subtitle]]
+[[!template text="documentation (the manual), which will get" start="00:03:30.517" video="mainVideo" id=subtitle]]
+[[!template text="more information about every tool," start="00:03:32.983" video="mainVideo" id=subtitle]]
+[[!template text="but it's a really interesting thing, and" start="00:03:35.417" video="mainVideo" id=subtitle]]
+[[!template text="I'm really sad that it is forgotten." start="00:03:38.417" video="mainVideo" id=subtitle]]
+[[!template text="So let's go with the bad things:" start="00:03:40.983" video="mainVideo" id=subtitle]]
+[[!template text="that CEDET is an abandoned project." start="00:03:43.333" video="mainVideo" id=subtitle]]
+[[!template text="This has some benefits like it's not" start="00:03:46.583" video="mainVideo" id=subtitle]]
+[[!template text="going to change that much," start="00:03:48.317" video="mainVideo" id=subtitle]]
+[[!template text="but it's, of course, not ideal." start="00:03:50.650" video="mainVideo" id=subtitle]]
+[[!template text="Most of the tooling that CEDET" start="00:03:52.467" video="mainVideo" id=subtitle]]
+[[!template text="have right now are surpassed" start="00:03:56.933" video="mainVideo" id=subtitle]]
+[[!template text="by other packages." start="00:03:58.200" video="mainVideo" id=subtitle]]
+[[!template text="And at first, I know Eric was working" start="00:03:59.733" video="mainVideo" id=subtitle]]
+[[!template text="with C at the time so he totally has" start="00:04:02.750" video="mainVideo" id=subtitle]]
+[[!template text="&quot ;real support&quot ; so you can use CEDET" start="00:04:07.567" video="mainVideo" id=subtitle]]
+[[!template text="for other languages, but" start="00:04:10.633" video="mainVideo" id=subtitle]]
+[[!template text="to work really like an IDE, more or less," start="00:04:13.133" video="mainVideo" id=subtitle]]
+[[!template text="it's all the..." start="00:04:15.483" video="mainVideo" id=subtitle]]
+[[!template text="C is the only language supported," start="00:04:17.117" video="mainVideo" id=subtitle]]
+[[!template text="and maybe some simple C++, but that's it." start="00:04:19.617" video="mainVideo" id=subtitle]]
+[[!template text="It needs more documentation." start="00:04:21.767" video="mainVideo" id=subtitle]]
+[[!template text="People really don't know how to use it" start="00:04:24.117" video="mainVideo" id=subtitle]]
+[[!template text="because, I have to say, rather complex" start="00:04:25.783" video="mainVideo" id=subtitle]]
+[[!template text="to get a project working with it," start="00:04:28.683" video="mainVideo" id=subtitle]]
+[[!template text="and then make use of Semantic" start="00:04:30.167" video="mainVideo" id=subtitle]]
+[[!template text="because it needs some maintenance and" start="00:04:33.817" video="mainVideo" id=subtitle]]
+[[!template text="to update the code." start="00:04:36.767" video="mainVideo" id=subtitle]]
+[[!template text="But I will argue that even with these" start="00:04:38.667" video="mainVideo" id=subtitle]]
+[[!template text="deficiencies, it's usable, and" start="00:04:41.183" video="mainVideo" id=subtitle]]
+[[!template text="I use the foundation of base for" start="00:04:44.483" video="mainVideo" id=subtitle]]
+[[!template text="parse infrastructure for other languages." start="00:04:47.617" video="mainVideo" id=subtitle]]
+[[!template text="I will say that with Common Lisp was" start="00:04:49.633" video="mainVideo" id=subtitle]]
+[[!template text="rather easy because" start="00:04:52.467" video="mainVideo" id=subtitle]]
+[[!template text="CEDET already have Emacs Lisp parser" start="00:04:54.083" video="mainVideo" id=subtitle]]
+[[!template text="even though it's not great." start="00:04:56.133" video="mainVideo" id=subtitle]]
+[[!template text="It's easy to adapt and to use." start="00:04:58.000" video="mainVideo" id=subtitle]]
+[[!template text="It's not used in an Emacs" start="00:05:00.583" video="mainVideo" id=subtitle]]
+[[!template text="right now because, well," start="00:05:04.100" video="mainVideo" id=subtitle]]
+[[!template text="Emacs know very well itself," start="00:05:05.533" video="mainVideo" id=subtitle]]
+[[!template text="but it's there." start="00:05:08.983" video="mainVideo" id=subtitle]]
+[[!template text="So these, of course, are static parsers" start="00:05:11.700" video="mainVideo" id=subtitle]]
+[[!template text="so you don't need to run any" start="00:05:17.683" video="mainVideo" id=subtitle]]
+[[!template text="other language-specific tools, which is" start="00:05:19.617" video="mainVideo" id=subtitle]]
+[[!template text="an advantage for some things." start="00:05:21.983" video="mainVideo" id=subtitle]]
+[[!template text="And this was basically CEDET is," start="00:05:24.500" video="mainVideo" id=subtitle]]
+[[!template text="and I use the parse infrastructure" start="00:05:27.233" video="mainVideo" id=subtitle]]
+[[!template text="and some tools" start="00:05:30.383" video="mainVideo" id=subtitle]]
+[[!template text="to create a parser for Common Lisp." start="00:05:31.433" video="mainVideo" id=subtitle]]
+[[!template text="Well, more or less. *laughs*" start="00:05:34.433" video="mainVideo" id=subtitle]]
+[[!template text="Let's go to details." start="00:05:36.800" video="mainVideo" id=subtitle]]
+[[!template text="So I will say that it's not a parser" start="00:05:38.000" video="mainVideo" id=subtitle]]
+[[!template text="by itself because, as we all know," start="00:05:39.950" video="mainVideo" id=subtitle]]
+[[!template text="to parse a macro-based language" start="00:05:42.533" video="mainVideo" id=subtitle]]
+[[!template text="is really hard." start="00:05:44.600" video="mainVideo" id=subtitle]]
+[[!template text="Mostly if you cannot have contextual" start="00:05:46.933" video="mainVideo" id=subtitle]]
+[[!template text="information because if you create code" start="00:05:48.550" video="mainVideo" id=subtitle]]
+[[!template text="at compile time or runtime is really hard" start="00:05:52.900" video="mainVideo" id=subtitle]]
+[[!template text="if you don't have run time, right?" start="00:05:56.133" video="mainVideo" id=subtitle]]
+[[!template text="Basically, CLEDE can be described" start="00:05:59.333" video="mainVideo" id=subtitle]]
+[[!template text="as a Semantic extension." start="00:06:01.050" video="mainVideo" id=subtitle]]
+[[!template text="So basically it's like," start="00:06:02.700" video="mainVideo" id=subtitle]]
+[[!template text="you can have Semantic" start="00:06:03.967" video="mainVideo" id=subtitle]]
+[[!template text="and use it with Common Lisp code" start="00:06:07.233" video="mainVideo" id=subtitle]]
+[[!template text="and some Common Lisp Emacs tools." start="00:06:09.917" video="mainVideo" id=subtitle]]
+[[!template text="So Bison (which is not Bison) is" start="00:06:11.700" video="mainVideo" id=subtitle]]
+[[!template text="Bovine, and Semantic and Senator" start="00:06:17.450" video="mainVideo" id=subtitle]]
+[[!template text="for navigating tags," start="00:06:21.750" video="mainVideo" id=subtitle]]
+[[!template text="and then communication with SLIME, SLY," start="00:06:24.850" video="mainVideo" id=subtitle]]
+[[!template text="and inferior Lisp." start="00:06:26.467" video="mainVideo" id=subtitle]]
+[[!template text="That means... I will show that later, but" start="00:06:28.833" video="mainVideo" id=subtitle]]
+[[!template text="basically, you can parse the buffer," start="00:06:30.550" video="mainVideo" id=subtitle]]
+[[!template text="get some tags," start="00:06:32.900" video="mainVideo" id=subtitle]]
+[[!template text="get information about the tags that you want," start="00:06:34.267" video="mainVideo" id=subtitle]]
+[[!template text="and then send some of that information" start="00:06:36.067" video="mainVideo" id=subtitle]]
+[[!template text="to the SLIME, SLY, or inferior Lisp REPL buffer," start="00:06:38.117" video="mainVideo" id=subtitle]]
+[[!template text="so you can get both things" start="00:06:44.000" video="mainVideo" id=subtitle]]
+[[!template text="at the same time." start="00:06:45.817" video="mainVideo" id=subtitle]]
+[[!template text="And given that it's a Lisp language," start="00:06:48.583" video="mainVideo" id=subtitle]]
+[[!template text="this can be pretty interesting." start="00:06:50.317" video="mainVideo" id=subtitle]]
+[[!template text="Also I wrote some common package integration," start="00:06:53.400" video="mainVideo" id=subtitle]]
+[[!template text="so even though there's not" start="00:06:57.700" video="mainVideo" id=subtitle]]
+[[!template text="a Common Lisp standard," start="00:06:59.317" video="mainVideo" id=subtitle]]
+[[!template text="there's some libraries that are used" start="00:07:00.400" video="mainVideo" id=subtitle]]
+[[!template text="by basically everyone." start="00:07:05.200" video="mainVideo" id=subtitle]]
+[[!template text="They're not part of the standard," start="00:07:07.683" video="mainVideo" id=subtitle]]
+[[!template text="but yeah." start="00:07:09.517" video="mainVideo" id=subtitle]]
+[[!template text="A lot of people use it: like `asdf`," start="00:07:11.100" video="mainVideo" id=subtitle]]
+[[!template text="which is the package manager," start="00:07:14.000" video="mainVideo" id=subtitle]]
+[[!template text="I will say it's `asdf` is the" start="00:07:15.650" video="mainVideo" id=subtitle]]
+[[!template text="definition packages, so to say," start="00:07:19.067" video="mainVideo" id=subtitle]]
+[[!template text="better than packages itself" start="00:07:21.883" video="mainVideo" id=subtitle]]
+[[!template text="and have more features." start="00:07:23.767" video="mainVideo" id=subtitle]]
+[[!template text="I wrote a nice integration with it" start="00:07:26.417" video="mainVideo" id=subtitle]]
+[[!template text="and also `fiveam`," start="00:07:28.483" video="mainVideo" id=subtitle]]
+[[!template text="which is a well-known test package." start="00:07:29.600" video="mainVideo" id=subtitle]]
+[[!template text="I just wrote this as an example" start="00:07:34.517" video="mainVideo" id=subtitle]]
+[[!template text="on how we can do with CLEDE." start="00:07:39.400" video="mainVideo" id=subtitle]]
+[[!template text="Let's look at the features," start="00:07:41.983" video="mainVideo" id=subtitle]]
+[[!template text="and then we go to a demo." start="00:07:43.733" video="mainVideo" id=subtitle]]
+[[!template text="You can go to the repository." start="00:07:51.367" video="mainVideo" id=subtitle]]
+[[!template text="Currently, it's not in Melpa" start="00:07:54.100" video="mainVideo" id=subtitle]]
+[[!template text="although I wanted" start="00:07:56.650" video="mainVideo" id=subtitle]]
+[[!template text="to merge it-- I mean, to add it--" start="00:07:58.017" video="mainVideo" id=subtitle]]
+[[!template text="to Melpa in the future." start="00:08:01.450" video="mainVideo" id=subtitle]]
+[[!template text="I want to clean the code and" start="00:08:04.767" video="mainVideo" id=subtitle]]
+[[!template text="add some more features;" start="00:08:06.467" video="mainVideo" id=subtitle]]
+[[!template text="I'm working on that and now" start="00:08:07.517" video="mainVideo" id=subtitle]]
+[[!template text="like an eagle, so to say..." start="00:08:09.750" video="mainVideo" id=subtitle]]
+[[!template text="but yeah, you can go here and then check" start="00:08:12.667" video="mainVideo" id=subtitle]]
+[[!template text="all the features and test it." start="00:08:15.633" video="mainVideo" id=subtitle]]
+[[!template text="To install is pretty easy:" start="00:08:18.933" video="mainVideo" id=subtitle]]
+[[!template text="just &quot ;add to path&quot ; thing." start="00:08:20.833" video="mainVideo" id=subtitle]]
+[[!template text="You don't need any external dependencies;" start="00:08:22.600" video="mainVideo" id=subtitle]]
+[[!template text="everything's in Emacs." start="00:08:23.750" video="mainVideo" id=subtitle]]
+[[!template text="This was tested with Emacs 27," start="00:08:25.917" video="mainVideo" id=subtitle]]
+[[!template text="but probably going to work" start="00:08:28.567" video="mainVideo" id=subtitle]]
+[[!template text="with Emacs 25 onwards so" start="00:08:29.983" video="mainVideo" id=subtitle]]
+[[!template text="it shouldn't be any problem." start="00:08:32.850" video="mainVideo" id=subtitle]]
+[[!template text="So let's go with the features." start="00:08:34.367" video="mainVideo" id=subtitle]]
+[[!template text="This is some CEDET integrations," start="00:08:38.733" video="mainVideo" id=subtitle]]
+[[!template text="and first, like I said, it has" start="00:08:42.883" video="mainVideo" id=subtitle]]
+[[!template text="support for SLY, SLIME, and inferior Lisp." start="00:08:44.517" video="mainVideo" id=subtitle]]
+[[!template text="If you are Common Lisp developer, you" start="00:08:48.100" video="mainVideo" id=subtitle]]
+[[!template text="probably know a SLIME and a SLY," start="00:08:49.617" video="mainVideo" id=subtitle]]
+[[!template text="and inferior Lisp is basically" start="00:08:52.367" video="mainVideo" id=subtitle]]
+[[!template text="just stock Emacs REPL." start="00:08:53.583" video="mainVideo" id=subtitle]]
+[[!template text="I support all three equally, so to say," start="00:08:57.900" video="mainVideo" id=subtitle]]
+[[!template text="and we have also `fiveam` integration," start="00:09:00.917" video="mainVideo" id=subtitle]]
+[[!template text="the ability to-- as I'm going to show later," start="00:09:05.683" video="mainVideo" id=subtitle]]
+[[!template text="you have the ability to send a test--" start="00:09:08.967" video="mainVideo" id=subtitle]]
+[[!template text="either packages or an entire suite of tests," start="00:09:10.983" video="mainVideo" id=subtitle]]
+[[!template text="and `asdf`, which currently I'm just" start="00:09:16.333" video="mainVideo" id=subtitle]]
+[[!template text="supporting basic project navigation" start="00:09:21.450" video="mainVideo" id=subtitle]]
+[[!template text="and some information," start="00:09:23.617" video="mainVideo" id=subtitle]]
+[[!template text="but it's a work-in-progress." start="00:09:25.533" video="mainVideo" id=subtitle]]
+[[!template text="I also have some general activities" start="00:09:28.617" video="mainVideo" id=subtitle]]
+[[!template text="that are not directly related to CEDET" start="00:09:29.883" video="mainVideo" id=subtitle]]
+[[!template text="but part of the CLEDE package, which" start="00:09:32.017" video="mainVideo" id=subtitle]]
+[[!template text="is CLEDE highlight." start="00:09:34.150" video="mainVideo" id=subtitle]]
+[[!template text="It's highly inspired by the" start="00:09:35.600" video="mainVideo" id=subtitle]]
+[[!template text="Emacs re-factor `erefactor`." start="00:09:36.917" video="mainVideo" id=subtitle]]
+[[!template text="Basically, you have some nice" start="00:09:41.267" video="mainVideo" id=subtitle]]
+[[!template text="highlights for lint variables." start="00:09:44.050" video="mainVideo" id=subtitle]]
+[[!template text="I want to expand that to also" start="00:09:47.983" video="mainVideo" id=subtitle]]
+[[!template text="support parameters and function stuff," start="00:09:49.567" video="mainVideo" id=subtitle]]
+[[!template text="but it's not a high priority for me." start="00:09:53.233" video="mainVideo" id=subtitle]]
+[[!template text="But yeah, I sometimes use this;" start="00:09:56.400" video="mainVideo" id=subtitle]]
+[[!template text="it's pretty neat when you have a big lint." start="00:09:58.217" video="mainVideo" id=subtitle]]
+[[!template text="Also some refactoring utilities..." start="00:10:02.050" video="mainVideo" id=subtitle]]
+[[!template text="some of those can be said" start="00:10:05.433" video="mainVideo" id=subtitle]]
+[[!template text="that it's overlapped with some..." start="00:10:06.800" video="mainVideo" id=subtitle]]
+[[!template text="because it is a string base, it doesn't" start="00:10:08.500" video="mainVideo" id=subtitle]]
+[[!template text="have too much context information," start="00:10:12.567" video="mainVideo" id=subtitle]]
+[[!template text="but yeah, some sort of" start="00:10:16.083" video="mainVideo" id=subtitle]]
+[[!template text="`replace-symbol-in-region` and `symbol-tag`." start="00:10:18.067" video="mainVideo" id=subtitle]]
+[[!template text="And then some CLEDE commands." start="00:10:22.267" video="mainVideo" id=subtitle]]
+[[!template text="This is the thing that I use all the time." start="00:10:23.967" video="mainVideo" id=subtitle]]
+[[!template text="It's like you're going to find" start="00:10:25.600" video="mainVideo" id=subtitle]]
+[[!template text="some commands to send to a REPL." start="00:10:26.167" video="mainVideo" id=subtitle]]
+[[!template text="I will show some example, but basically," start="00:10:29.167" video="mainVideo" id=subtitle]]
+[[!template text="you have already an example." start="00:10:31.467" video="mainVideo" id=subtitle]]
+[[!template text="You define a list of commands," start="00:10:33.083" video="mainVideo" id=subtitle]]
+[[!template text="you put name, and then you put the" start="00:10:34.433" video="mainVideo" id=subtitle]]
+[[!template text="Common Lisp code that you want to send." start="00:10:37.967" video="mainVideo" id=subtitle]]
+[[!template text="Given that, you're writing this" start="00:10:39.400" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Lisp in your configuration." start="00:10:41.650" video="mainVideo" id=subtitle]]
+[[!template text="You can have some runtime information" start="00:10:43.583" video="mainVideo" id=subtitle]]
+[[!template text="when the code is sent, right?" start="00:10:46.967" video="mainVideo" id=subtitle]]
+[[!template text="so insert, get a variable value, or whatever." start="00:10:49.550" video="mainVideo" id=subtitle]]
+[[!template text="OK, `imenu` integration." start="00:10:53.550" video="mainVideo" id=subtitle]]
+[[!template text="Yes, Semantic..." start="00:10:56.233" video="mainVideo" id=subtitle]]
+[[!template text="CEDET has a great `imenu` utilities" start="00:10:59.067" video="mainVideo" id=subtitle]]
+[[!template text="to have a better `imenu`." start="00:11:02.550" video="mainVideo" id=subtitle]]
+[[!template text="`imenu-list` also works really well." start="00:11:05.700" video="mainVideo" id=subtitle]]
+[[!template text="So you have better... when you go to a file" start="00:11:10.483" video="mainVideo" id=subtitle]]
+[[!template text="that you don't fully know what is inside," start="00:11:13.017" video="mainVideo" id=subtitle]]
+[[!template text="it's better to navigate having like a tree." start="00:11:15.300" video="mainVideo" id=subtitle]]
+[[!template text="Yeah, this one's the thing is going" start="00:11:20.633" video="mainVideo" id=subtitle]]
+[[!template text="to show that Senator, which is" start="00:11:22.483" video="mainVideo" id=subtitle]]
+[[!template text="Semantic navigator, and then some" start="00:11:24.883" video="mainVideo" id=subtitle]]
+[[!template text="Semantic-specific tools like `complete-jump`," start="00:11:26.733" video="mainVideo" id=subtitle]]
+[[!template text="which I don't use this one too much" start="00:11:30.317" video="mainVideo" id=subtitle]]
+[[!template text="because we have SLY/SLIME," start="00:11:32.850" video="mainVideo" id=subtitle]]
+[[!template text="but they're there, so yeah." start="00:11:35.400" video="mainVideo" id=subtitle]]
+[[!template text="Like I said, Common Lisp library support," start="00:11:39.183" video="mainVideo" id=subtitle]]
+[[!template text="which is duplicated." start="00:11:41.533" video="mainVideo" id=subtitle]]
+[[!template text="OK, so let's go to the demo." start="00:11:44.433" video="mainVideo" id=subtitle]]
+[[!template text="Um." start="00:11:47.117" video="mainVideo" id=subtitle]]
+[[!template text="Let's go to the demo file." start="00:11:51.083" video="mainVideo" id=subtitle]]
+[[!template text="Right." start="00:11:53.667" video="mainVideo" id=subtitle]]
+[[!template text="First, we have to do is enable CLEDE." start="00:11:55.400" video="mainVideo" id=subtitle]]
+[[!template text="This is pretty easy:" start="00:11:58.350" video="mainVideo" id=subtitle]]
+[[!template text="we call `clede-start`, right," start="00:11:59.533" video="mainVideo" id=subtitle]]
+[[!template text="and now it's started." start="00:12:03.500" video="mainVideo" id=subtitle]]
+[[!template text="CLEDE is not an asynchronous parser so" start="00:12:05.200" video="mainVideo" id=subtitle]]
+[[!template text="Semantic (in this case, Bovine) is not." start="00:12:08.200" video="mainVideo" id=subtitle]]
+[[!template text="If the file is large, it may take some time." start="00:12:11.000" video="mainVideo" id=subtitle]]
+[[!template text="It shouldn't because we have" start="00:12:16.017" video="mainVideo" id=subtitle]]
+[[!template text="powerful computers, but if your" start="00:12:16.117" video="mainVideo" id=subtitle]]
+[[!template text="computer is not that powerful," start="00:12:19.217" video="mainVideo" id=subtitle]]
+[[!template text="it may take a while." start="00:12:22.017" video="mainVideo" id=subtitle]]
+[[!template text="To see the information that has been" start="00:12:23.033" video="mainVideo" id=subtitle]]
+[[!template text="parsed, we're going to call `bovinate`." start="00:12:26.217" video="mainVideo" id=subtitle]]
+[[!template text="Oops... oops..." start="00:12:31.267" video="mainVideo" id=subtitle]]
+[[!template text="Oh! I have to-- sorry..." start="00:12:33.867" video="mainVideo" id=subtitle]]
+[[!template text="Let's enable Semantic again." start="00:12:36.133" video="mainVideo" id=subtitle]]
+[[!template text="Let's start... `bovinate`..." start="00:12:43.367" video="mainVideo" id=subtitle]]
+[[!template text="OK, so..." start="00:12:45.317" video="mainVideo" id=subtitle]]
+[[!template text="This is the information that" start="00:12:48.217" video="mainVideo" id=subtitle]]
+[[!template text="currently CLEDE is taking from the buffer." start="00:12:50.017" video="mainVideo" id=subtitle]]
+[[!template text="So we can see it's taking this, and" start="00:12:53.083" video="mainVideo" id=subtitle]]
+[[!template text="it doesn't know what it is," start="00:12:55.617" video="mainVideo" id=subtitle]]
+[[!template text="so this is the tag name..." start="00:12:58.550" video="mainVideo" id=subtitle]]
+[[!template text="this is the type," start="00:13:02.267" video="mainVideo" id=subtitle]]
+[[!template text="and these are some information" start="00:13:02.950" video="mainVideo" id=subtitle]]
+[[!template text="and the location." start="00:13:03.833" video="mainVideo" id=subtitle]]
+[[!template text="OK, so we know that this is a variable," start="00:13:05.850" video="mainVideo" id=subtitle]]
+[[!template text="and it has the full value." start="00:13:08.250" video="mainVideo" id=subtitle]]
+[[!template text="You know this is a package, right," start="00:13:10.250" video="mainVideo" id=subtitle]]
+[[!template text="because it's defined as a package." start="00:13:13.333" video="mainVideo" id=subtitle]]
+[[!template text="It doesn't understand what this is." start="00:13:15.550" video="mainVideo" id=subtitle]]
+[[!template text="This node is a function" start="00:13:18.300" video="mainVideo" id=subtitle]]
+[[!template text="because of the `fun`," start="00:13:19.067" video="mainVideo" id=subtitle]]
+[[!template text="and some of this is code," start="00:13:19.917" video="mainVideo" id=subtitle]]
+[[!template text="and it also understands some tests" start="00:13:23.233" video="mainVideo" id=subtitle]]
+[[!template text="because it has `fiveam` integration." start="00:13:26.017" video="mainVideo" id=subtitle]]
+[[!template text="If it detects that has some test here" start="00:13:27.767" video="mainVideo" id=subtitle]]
+[[!template text="it will know that, indeed, it is test." start="00:13:31.000" video="mainVideo" id=subtitle]]
+[[!template text="So let's try some, first, `imenu`." start="00:13:34.517" video="mainVideo" id=subtitle]]
+[[!template text="So we can see here we have..." start="00:13:40.417" video="mainVideo" id=subtitle]]
+[[!template text="I understand that this have" start="00:13:42.650" video="mainVideo" id=subtitle]]
+[[!template text="some sort of `fiveam` switch" start="00:13:44.850" video="mainVideo" id=subtitle]]
+[[!template text="and some tests defined." start="00:13:46.700" video="mainVideo" id=subtitle]]
+[[!template text="It understands this package, and" start="00:13:49.450" video="mainVideo" id=subtitle]]
+[[!template text="it'll give you some variables-- `defuns`," start="00:13:51.100" video="mainVideo" id=subtitle]]
+[[!template text="and it also will give you some misc" start="00:13:52.883" video="mainVideo" id=subtitle]]
+[[!template text="for things that doesn't know what it is." start="00:13:55.217" video="mainVideo" id=subtitle]]
+[[!template text="And you can also" start="00:14:00.017" video="mainVideo" id=subtitle]]
+[[!template text="navigate with this-- like this `imenu`." start="00:14:01.083" video="mainVideo" id=subtitle]]
+[[!template text="So, um, let's go first with some Senator." start="00:14:06.000" video="mainVideo" id=subtitle]]
+[[!template text="So with Senator, we can navigate," start="00:14:12.000" video="mainVideo" id=subtitle]]
+[[!template text="go to the next stack, previous stack," start="00:14:14.967" video="mainVideo" id=subtitle]]
+[[!template text="all this, um, top-level `s-expression`" start="00:14:16.300" video="mainVideo" id=subtitle]]
+[[!template text="are basically a tag, even though" start="00:14:20.883" video="mainVideo" id=subtitle]]
+[[!template text="it's code... you can navigate, right." start="00:14:22.567" video="mainVideo" id=subtitle]]
+[[!template text="Um, copy/kill this or some other stuff." start="00:14:28.567" video="mainVideo" id=subtitle]]
+[[!template text="Um, some interesting thing that we can" start="00:14:31.433" video="mainVideo" id=subtitle]]
+[[!template text="do is let's launch SLY, right." start="00:14:34.117" video="mainVideo" id=subtitle]]
+[[!template text="Um, let's load `fiveam`," start="00:14:38.817" video="mainVideo" id=subtitle]]
+[[!template text="and let's send some tests." start="00:14:44.417" video="mainVideo" id=subtitle]]
+[[!template text="We can say, OK, `clede-fiveam-send-current-test`," start="00:14:45.600" video="mainVideo" id=subtitle]]
+[[!template text="and it will-- OK, have to compile" start="00:14:51.567" video="mainVideo" id=subtitle]]
+[[!template text="this file first." start="00:14:53.133" video="mainVideo" id=subtitle]]
+[[!template text="OK, you don't like this..." start="00:14:54.850" video="mainVideo" id=subtitle]]
+[[!template text="you compile the tests." start="00:14:56.083" video="mainVideo" id=subtitle]]
+[[!template text="OK... um... well..." start="00:14:58.467" video="mainVideo" id=subtitle]]
+[[!template text="I don't have-- yeah, I don't have" start="00:15:03.767" video="mainVideo" id=subtitle]]
+[[!template text="the switch here so let's..." start="00:15:05.117" video="mainVideo" id=subtitle]]
+[[!template text="OK, yeah because I guess it's getting..." start="00:15:11.933" video="mainVideo" id=subtitle]]
+[[!template text="sorry about this..." start="00:15:14.833" video="mainVideo" id=subtitle]]
+[[!template text="Let's say we're going to send this test..." start="00:15:19.683" video="mainVideo" id=subtitle]]
+[[!template text="It isn't working..." start="00:15:23.083" video="mainVideo" id=subtitle]]
+[[!template text="OK, why are you not working..." start="00:15:28.767" video="mainVideo" id=subtitle]]
+[[!template text="maybe because we have to go" start="00:15:37.067" video="mainVideo" id=subtitle]]
+[[!template text="to the package `fiveam`." start="00:15:38.550" video="mainVideo" id=subtitle]]
+[[!template text="Yes, sorry... um..." start="00:15:47.183" video="mainVideo" id=subtitle]]
+[[!template text="Yeah, so we're gonna go here, and" start="00:15:49.233" video="mainVideo" id=subtitle]]
+[[!template text="we can say `fiveam-send-tests`," start="00:15:51.650" video="mainVideo" id=subtitle]]
+[[!template text="and there we have it." start="00:15:54.217" video="mainVideo" id=subtitle]]
+[[!template text="It will send the test" start="00:15:55.350" video="mainVideo" id=subtitle]]
+[[!template text="that we are currently in, right." start="00:15:56.300" video="mainVideo" id=subtitle]]
+[[!template text="So that's the thing." start="00:16:00.317" video="mainVideo" id=subtitle]]
+[[!template text="Another interesting thing that I said is" start="00:16:01.983" video="mainVideo" id=subtitle]]
+[[!template text="`clede-highlight-minor-mode`." start="00:16:04.000" video="mainVideo" id=subtitle]]
+[[!template text="Basically, work in `let`'s context" start="00:16:08.550" video="mainVideo" id=subtitle]]
+[[!template text="to know where to highlight" start="00:16:11.667" video="mainVideo" id=subtitle]]
+[[!template text="all the variables," start="00:16:13.550" video="mainVideo" id=subtitle]]
+[[!template text="and we can disable." start="00:16:17.217" video="mainVideo" id=subtitle]]
+[[!template text="What else do we have?" start="00:16:20.317" video="mainVideo" id=subtitle]]
+[[!template text="So we have framework integration." start="00:16:21.933" video="mainVideo" id=subtitle]]
+[[!template text="You can go `clede-` and" start="00:16:24.200" video="mainVideo" id=subtitle]]
+[[!template text="see what more commands are." start="00:16:26.000" video="mainVideo" id=subtitle]]
+[[!template text="`commands-run` are basically a way" start="00:16:27.817" video="mainVideo" id=subtitle]]
+[[!template text="to define commands, you have a variable," start="00:16:29.867" video="mainVideo" id=subtitle]]
+[[!template text="which is `clede-commands-list`." start="00:16:31.717" video="mainVideo" id=subtitle]]
+[[!template text="Let's explain that you can get" start="00:16:35.417" video="mainVideo" id=subtitle]]
+[[!template text="some system working" start="00:16:37.333" video="mainVideo" id=subtitle]]
+[[!template text="or whatever command you want, right." start="00:16:39.917" video="mainVideo" id=subtitle]]
+[[!template text="Also you have `asdf` basic integration." start="00:16:42.717" video="mainVideo" id=subtitle]]
+[[!template text="You can go to a definition file" start="00:16:46.183" video="mainVideo" id=subtitle]]
+[[!template text="of some of the systems are already loaded." start="00:16:48.167" video="mainVideo" id=subtitle]]
+[[!template text="For example, let's go to here," start="00:16:51.150" video="mainVideo" id=subtitle]]
+[[!template text="and we go to the definition file--" start="00:16:53.767" video="mainVideo" id=subtitle]]
+[[!template text="there's the file, right?" start="00:16:55.650" video="mainVideo" id=subtitle]]
+[[!template text="This is used because I'm sending" start="00:16:58.017" video="mainVideo" id=subtitle]]
+[[!template text="commands for the REPL, so this" start="00:16:59.100" video="mainVideo" id=subtitle]]
+[[!template text="functionality is not provided" start="00:17:00.900" video="mainVideo" id=subtitle]]
+[[!template text="by CEDET or Semantic," start="00:17:04.217" video="mainVideo" id=subtitle]]
+[[!template text="but I can also get some sort" start="00:17:09.267" video="mainVideo" id=subtitle]]
+[[!template text="of information for `asd` file," start="00:17:11.733" video="mainVideo" id=subtitle]]
+[[!template text="which is a work-in-progress," start="00:17:19.817" video="mainVideo" id=subtitle]]
+[[!template text="but you can go to some component file" start="00:17:21.650" video="mainVideo" id=subtitle]]
+[[!template text="when you have a big `asd` file" start="00:17:23.200" video="mainVideo" id=subtitle]]
+[[!template text="with lots of components" start="00:17:24.250" video="mainVideo" id=subtitle]]
+[[!template text="and some other interesting thing." start="00:17:25.300" video="mainVideo" id=subtitle]]
+[[!template text="Like I said, that's a work-in-progress," start="00:17:27.883" video="mainVideo" id=subtitle]]
+[[!template text="Yes, so this is most of the functionality." start="00:17:30.383" video="mainVideo" id=subtitle]]
+[[!template text="The most interesting thing, I think," start="00:17:35.067" video="mainVideo" id=subtitle]]
+[[!template text="is the base for the foundation." start="00:17:37.100" video="mainVideo" id=subtitle]]
+[[!template text="So you can expand: let's go to source code," start="00:17:40.367" video="mainVideo" id=subtitle]]
+[[!template text="for example, that `fiveam`." start="00:17:43.100" video="mainVideo" id=subtitle]]
+[[!template text="So as we can see here, this is" start="00:17:48.433" video="mainVideo" id=subtitle]]
+[[!template text="the `fiveam` integration, and to add it," start="00:17:50.000" video="mainVideo" id=subtitle]]
+[[!template text="I just define some new functions," start="00:17:53.533" video="mainVideo" id=subtitle]]
+[[!template text="and then you use this..." start="00:17:58.333" video="mainVideo" id=subtitle]]
+[[!template text="set up a new form parser that we use" start="00:18:02.083" video="mainVideo" id=subtitle]]
+[[!template text="to get some information" start="00:18:04.250" video="mainVideo" id=subtitle]]
+[[!template text="about the `s-expression` top-level," start="00:18:06.500" video="mainVideo" id=subtitle]]
+[[!template text="and we define the names," start="00:18:09.250" video="mainVideo" id=subtitle]]
+[[!template text="we define information we want to take" start="00:18:10.533" video="mainVideo" id=subtitle]]
+[[!template text="from the symbol and everything else." start="00:18:11.717" video="mainVideo" id=subtitle]]
+[[!template text="Also some ?? types" start="00:18:13.800" video="mainVideo" id=subtitle]]
+[[!template text="that would be going to be added" start="00:18:17.233" video="mainVideo" id=subtitle]]
+[[!template text="to the `imenu` thing:" start="00:18:19.467" video="mainVideo" id=subtitle]]
+[[!template text="for example, `imenu test switch and test`." start="00:18:21.167" video="mainVideo" id=subtitle]]
+[[!template text="And then, these are, for example," start="00:18:24.133" video="mainVideo" id=subtitle]]
+[[!template text="some function to send information" start="00:18:27.417" video="mainVideo" id=subtitle]]
+[[!template text="to the SLY, SLIME, or inferior Lisp" start="00:18:29.433" video="mainVideo" id=subtitle]]
+[[!template text="depending on the Lisp that you're using." start="00:18:33.583" video="mainVideo" id=subtitle]]
+[[!template text="So I do not have more time." start="00:18:37.150" video="mainVideo" id=subtitle]]
+[[!template text="Sorry about that." start="00:18:39.500" video="mainVideo" id=subtitle]]
+[[!template text="Thank you very much." start="00:18:40.467" video="mainVideo" id=subtitle]]
+[[!template text="My name is Fermin." start="00:18:45.017" video="mainVideo" id=subtitle]]
+[[!template text="You can send me a mail in my mail," start="00:18:46.483" video="mainVideo" id=subtitle]]
+[[!template text="and that's my webpage." start="00:18:49.833" video="mainVideo" id=subtitle]]
+[[!template text="I hope you like it." start="00:18:51.333" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/cs.md b/2021/captions/cs.md
new file mode 100644
index 00000000..08a23267
--- /dev/null
+++ b/2021/captions/cs.md
@@ -0,0 +1,261 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="My name is Greg Coladonato," start="00:00:00.000" video="mainVideo" id=subtitle]]
+[[!template text="and this is my presentation named" start="00:00:01.520" video="mainVideo" id=subtitle]]
+[[!template text="One Effective Computer Science" start="00:00:03.199" video="mainVideo" id=subtitle]]
+[[!template text="Grad Student Workflow." start="00:00:04.560" video="mainVideo" id=subtitle]]
+[[!template text="For self-introduction," start="00:00:06.480" video="mainVideo" id=subtitle]]
+[[!template text="I've been an Emacs user since 1989" start="00:00:07.680" video="mainVideo" id=subtitle]]
+[[!template text="when I was an undergrad in computer science," start="00:00:09.599" video="mainVideo" id=subtitle]]
+[[!template text="and I'm still an Emacs user" start="00:00:11.599" video="mainVideo" id=subtitle]]
+[[!template text="now I'm getting a master's of science" start="00:00:13.040" video="mainVideo" id=subtitle]]
+[[!template text="in computer science." start="00:00:15.280" video="mainVideo" id=subtitle]]
+[[!template text="In my day job," start="00:00:16.880" video="mainVideo" id=subtitle]]
+[[!template text="I work in product management" start="00:00:17.760" video="mainVideo" id=subtitle]]
+[[!template text="in a Silicon Valley" start="00:00:19.199" video="mainVideo" id=subtitle]]
+[[!template text="computer vision startup," start="00:00:20.640" video="mainVideo" id=subtitle]]
+[[!template text="and I'm proud to say" start="00:00:21.840" video="mainVideo" id=subtitle]]
+[[!template text="I've been submitting my first PRs" start="00:00:22.880" video="mainVideo" id=subtitle]]
+[[!template text="to open source projects this year." start="00:00:25.039" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The goals of my workflow are first" start="00:00:27.039" video="mainVideo" id=subtitle]]
+[[!template text="to make my notes easily accessible" start="00:00:29.199" video="mainVideo" id=subtitle]]
+[[!template text="and searchable." start="00:00:30.800" video="mainVideo" id=subtitle]]
+[[!template text="Second goal, provide a way for me" start="00:00:33.280" video="mainVideo" id=subtitle]]
+[[!template text="to permanently remember what I learned," start="00:00:34.800" video="mainVideo" id=subtitle]]
+[[!template text="and thirdly, to enable conceptual linking" start="00:00:36.480" video="mainVideo" id=subtitle]]
+[[!template text="between related topics and entities." start="00:00:38.879" video="mainVideo" id=subtitle]]
+[[!template text="I'll give examples of each of these" start="00:00:40.480" video="mainVideo" id=subtitle]]
+[[!template text="as we go along." start="00:00:41.920" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The requirements of my workflow:" start="00:00:43.120" video="mainVideo" id=subtitle]]
+[[!template text="it needs to be tightly integrated with PDFs," start="00:00:45.120" video="mainVideo" id=subtitle]]
+[[!template text="as most of the documents I get from grad school" start="00:00:47.920" video="mainVideo" id=subtitle]]
+[[!template text="are in PDF form," start="00:00:50.399" video="mainVideo" id=subtitle]]
+[[!template text="most of my submissions of work" start="00:00:51.440" video="mainVideo" id=subtitle]]
+[[!template text="are in PDF form," start="00:00:53.760" video="mainVideo" id=subtitle]]
+[[!template text="and most research papers I have access to" start="00:00:54.719" video="mainVideo" id=subtitle]]
+[[!template text="are in PDF form as well." start="00:00:56.640" video="mainVideo" id=subtitle]]
+[[!template text="I want my workflow to be subscription-free." start="00:00:58.399" video="mainVideo" id=subtitle]]
+[[!template text="I do not want to be locked into" start="00:01:00.320" video="mainVideo" id=subtitle]]
+[[!template text="paying a subscription" start="00:01:01.840" video="mainVideo" id=subtitle]]
+[[!template text="just to read my own notes." start="00:01:03.120" video="mainVideo" id=subtitle]]
+[[!template text="It must be future proof." start="00:01:04.799" video="mainVideo" id=subtitle]]
+[[!template text="I have used note-taking systems in the past" start="00:01:06.720" video="mainVideo" id=subtitle]]
+[[!template text="that I now no longer have a way to decode," start="00:01:09.600" video="mainVideo" id=subtitle]]
+[[!template text="so they're locked into some format" start="00:01:12.960" video="mainVideo" id=subtitle]]
+[[!template text="that I can no longer use." start="00:01:14.640" video="mainVideo" id=subtitle]]
+[[!template text="I want my notes to be version-controlled," start="00:01:17.200" video="mainVideo" id=subtitle]]
+[[!template text="so that if I make a big mistake," start="00:01:19.119" video="mainVideo" id=subtitle]]
+[[!template text="I can undo and revert" start="00:01:20.479" video="mainVideo" id=subtitle]]
+[[!template text="to a prior good version," start="00:01:22.080" video="mainVideo" id=subtitle]]
+[[!template text="and I want my system to use spaced repetition," start="00:01:23.840" video="mainVideo" id=subtitle]]
+[[!template text="which is an advanced method" start="00:01:27.680" video="mainVideo" id=subtitle]]
+[[!template text="of learning things over time" start="00:01:29.520" video="mainVideo" id=subtitle]]
+[[!template text="so that you don't forget them." start="00:01:31.840" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The package dependencies, in brief." start="00:01:34.000" video="mainVideo" id=subtitle]]
+[[!template text="org-mode, org-roam, org-roam-bibtex," start="00:01:36.799" video="mainVideo" id=subtitle]]
+[[!template text="pdf-tools, org-noter and org-ref." start="00:01:38.960" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And now let's get on to some demos." start="00:01:42.720" video="mainVideo" id=subtitle]]
+[[!template text="Here in my browser window here" start="00:01:45.119" video="mainVideo" id=subtitle]]
+[[!template text="is a lecture in the course" start="00:01:47.520" video="mainVideo" id=subtitle]]
+[[!template text="I'm currently taking on deep learning." start="00:01:49.680" video="mainVideo" id=subtitle]]
+[[!template text="It's very nice that the professor" start="00:01:51.840" video="mainVideo" id=subtitle]]
+[[!template text="provides slides. So this is" start="00:01:54.240" video="mainVideo" id=subtitle]]
+[[!template text="the 54-page PDF file of the slides" start="00:01:55.759" video="mainVideo" id=subtitle]]
+[[!template text="for the lecture. The problem is," start="00:02:00.000" video="mainVideo" id=subtitle]]
+[[!template text="it's hard to take notes on them." start="00:02:02.079" video="mainVideo" id=subtitle]]
+[[!template text="It's impossible to take notes on them" start="00:02:03.200" video="mainVideo" id=subtitle]]
+[[!template text="here in this browser," start="00:02:04.560" video="mainVideo" id=subtitle]]
+[[!template text="as far as I know. So what I've done is" start="00:02:05.840" video="mainVideo" id=subtitle]]
+[[!template text="I've incorporated these slides as a PDF" start="00:02:07.840" video="mainVideo" id=subtitle]]
+[[!template text="in org-roam, which..." start="00:02:11.440" video="mainVideo" id=subtitle]]
+[[!template text="I will now visit this file" start="00:02:12.959" video="mainVideo" id=subtitle]]
+[[!template text="and you can bring it up alongside the PDF" start="00:02:16.640" video="mainVideo" id=subtitle]]
+[[!template text="I was just looking at here." start="00:02:19.120" video="mainVideo" id=subtitle]]
+[[!template text="So what i like about this system is," start="00:02:20.560" video="mainVideo" id=subtitle]]
+[[!template text="as I'm going through and reading" start="00:02:23.200" video="mainVideo" id=subtitle]]
+[[!template text="watching the video of the lecture," start="00:02:24.800" video="mainVideo" id=subtitle]]
+[[!template text="I'm following along in the PDF notes here," start="00:02:26.720" video="mainVideo" id=subtitle]]
+[[!template text="and I'm taking my notes alongside them." start="00:02:29.599" video="mainVideo" id=subtitle]]
+[[!template text="So here's the first part of that lecture." start="00:02:31.680" video="mainVideo" id=subtitle]]
+[[!template text="You can't see at the bottom right now," start="00:02:34.400" video="mainVideo" id=subtitle]]
+[[!template text="but this is one of the earlier pages." start="00:02:36.319" video="mainVideo" id=subtitle]]
+[[!template text="I go to the second section here" start="00:02:38.800" video="mainVideo" id=subtitle]]
+[[!template text="and you see that my notes" start="00:02:42.400" video="mainVideo" id=subtitle]]
+[[!template text="for this part of the lecture," start="00:02:45.040" video="mainVideo" id=subtitle]]
+[[!template text="here, my notes here..." start="00:02:46.640" video="mainVideo" id=subtitle]]
+[[!template text="I love how the notes" start="00:02:48.480" video="mainVideo" id=subtitle]]
+[[!template text="for different parts of the lecture" start="00:02:49.599" video="mainVideo" id=subtitle]]
+[[!template text="are coordinated with the different parts" start="00:02:50.959" video="mainVideo" id=subtitle]]
+[[!template text="of the PDF that go along with the lecture." start="00:02:52.560" video="mainVideo" id=subtitle]]
+[[!template text="Now let's go back to the top of this" start="00:02:55.200" video="mainVideo" id=subtitle]]
+[[!template text="and you'll see... First, you'll see my notes" start="00:02:57.519" video="mainVideo" id=subtitle]]
+[[!template text="down here. I'll go into these" start="00:03:01.840" video="mainVideo" id=subtitle]]
+[[!template text="a little bit more shortly," start="00:03:03.920" video="mainVideo" id=subtitle]]
+[[!template text="but one of the things" start="00:03:06.319" video="mainVideo" id=subtitle]]
+[[!template text="that goes along with a lecture" start="00:03:07.200" video="mainVideo" id=subtitle]]
+[[!template text="in a grad school class is these days" start="00:03:08.959" video="mainVideo" id=subtitle]]
+[[!template text="in computer science citations" start="00:03:11.519" video="mainVideo" id=subtitle]]
+[[!template text="for research papers" start="00:03:13.680" video="mainVideo" id=subtitle]]
+[[!template text="that were expected to read." start="00:03:14.640" video="mainVideo" id=subtitle]]
+[[!template text="So here's one entitled MixMatch." start="00:03:16.480" video="mainVideo" id=subtitle]]
+[[!template text="I haven't downloaded this paper yet," start="00:03:20.080" video="mainVideo" id=subtitle]]
+[[!template text="so let's go. Take a look at that." start="00:03:22.319" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I use a keystroke to select" start="00:03:24.239" video="mainVideo" id=subtitle]]
+[[!template text="the title of the paper" start="00:03:26.319" video="mainVideo" id=subtitle]]
+[[!template text="and another keybinding" start="00:03:28.480" video="mainVideo" id=subtitle]]
+[[!template text="to search for that paper" start="00:03:30.239" video="mainVideo" id=subtitle]]
+[[!template text="on a website called arXiv." start="00:03:31.440" video="mainVideo" id=subtitle]]
+[[!template text="arXiv, if you're not familiar--" start="00:03:33.519" video="mainVideo" id=subtitle]]
+[[!template text="and here's a match--" start="00:03:35.280" video="mainVideo" id=subtitle]]
+[[!template text="arXiv, if you're not familiar," start="00:03:36.400" video="mainVideo" id=subtitle]]
+[[!template text="is an open research server" start="00:03:37.680" video="mainVideo" id=subtitle]]
+[[!template text="where researchers publish papers" start="00:03:42.000" video="mainVideo" id=subtitle]]
+[[!template text="before they're published in journals" start="00:03:43.760" video="mainVideo" id=subtitle]]
+[[!template text="or conferences, and they are copyright-free" start="00:03:45.040" video="mainVideo" id=subtitle]]
+[[!template text="and open to anyone to read." start="00:03:47.920" video="mainVideo" id=subtitle]]
+[[!template text="So here is the paper I was looking for." start="00:03:50.159" video="mainVideo" id=subtitle]]
+[[!template text="I copy this link into an Org mode link," start="00:03:52.799" video="mainVideo" id=subtitle]]
+[[!template text="and I come back to Emacs," start="00:03:58.560" video="mainVideo" id=subtitle]]
+[[!template text="and now another keystroke" start="00:03:59.840" video="mainVideo" id=subtitle]]
+[[!template text="will revisit that website," start="00:04:02.400" video="mainVideo" id=subtitle]]
+[[!template text="pull down the PDF, and pull down" start="00:04:04.879" video="mainVideo" id=subtitle]]
+[[!template text="all the information in the bibliography" start="00:04:06.400" video="mainVideo" id=subtitle]]
+[[!template text="and put it into a bibliography here," start="00:04:08.400" video="mainVideo" id=subtitle]]
+[[!template text="inside my local bibliography." start="00:04:11.040" video="mainVideo" id=subtitle]]
+[[!template text="So here's the paper I was just looking at." start="00:04:13.599" video="mainVideo" id=subtitle]]
+[[!template text="Another great thing about a lot of PDFs" start="00:04:15.840" video="mainVideo" id=subtitle]]
+[[!template text="is that they have an embedded outline" start="00:04:17.840" video="mainVideo" id=subtitle]]
+[[!template text="that you can extract via the pdf-tools package." start="00:04:20.320" video="mainVideo" id=subtitle]]
+[[!template text="So now you see on the right here:" start="00:04:24.160" video="mainVideo" id=subtitle]]
+[[!template text="introduction, related work, MixMatch," start="00:04:25.680" video="mainVideo" id=subtitle]]
+[[!template text="experiments. I can go right to that section," start="00:04:27.360" video="mainVideo" id=subtitle]]
+[[!template text="and this outline knows exactly" start="00:04:30.479" video="mainVideo" id=subtitle]]
+[[!template text="which part of the PDF" start="00:04:32.639" video="mainVideo" id=subtitle]]
+[[!template text="corresponds to each of the parts" start="00:04:33.759" video="mainVideo" id=subtitle]]
+[[!template text="of this outline in the paper." start="00:04:35.919" video="mainVideo" id=subtitle]]
+[[!template text="So then, when I go take notes in here," start="00:04:37.680" video="mainVideo" id=subtitle]]
+[[!template text="just like in my other notes," start="00:04:40.240" video="mainVideo" id=subtitle]]
+[[!template text="it'll be coordinated with the PDF" start="00:04:41.280" video="mainVideo" id=subtitle]]
+[[!template text="that goes along with it." start="00:04:43.040" video="mainVideo" id=subtitle]]
+[[!template text="So let's quit out of here." start="00:04:44.639" video="mainVideo" id=subtitle]]
+[[!template text="So now that I've captured that..." start="00:04:48.080" video="mainVideo" id=subtitle]]
+[[!template text="Uh oh, this is the same paper." start="00:04:50.160" video="mainVideo" id=subtitle]]
+[[!template text="So now here I am back in my notes." start="00:04:53.199" video="mainVideo" id=subtitle]]
+[[!template text="now that I've captured this paper." start="00:04:56.000" video="mainVideo" id=subtitle]]
+[[!template text="What I'm going to do is make it a link," start="00:04:58.000" video="mainVideo" id=subtitle]]
+[[!template text="so the org-roam node that I just took" start="00:05:02.400" video="mainVideo" id=subtitle]]
+[[!template text="will be here at the top. MixMatch." start="00:05:07.520" video="mainVideo" id=subtitle]]
+[[!template text="There's a little difference." start="00:05:09.600" video="mainVideo" id=subtitle]]
+[[!template text="You'll see here, this m is a different case" start="00:05:10.639" video="mainVideo" id=subtitle]]
+[[!template text="than this m, and that's one of my to-do list." start="00:05:13.120" video="mainVideo" id=subtitle]]
+[[!template text="I'd like to make it so that this search" start="00:05:16.240" video="mainVideo" id=subtitle]]
+[[!template text="is a little less case-sensitive." start="00:05:18.720" video="mainVideo" id=subtitle]]
+[[!template text="So now I've linked this link to this paper" start="00:05:20.320" video="mainVideo" id=subtitle]]
+[[!template text="into these notes, and now these are..." start="00:05:23.520" video="mainVideo" id=subtitle]]
+[[!template text="you'll see a little bit later" start="00:05:25.680" video="mainVideo" id=subtitle]]
+[[!template text="how these links can be graphed and followed" start="00:05:26.639" video="mainVideo" id=subtitle]]
+[[!template text="and so forth. While I'm in this document," start="00:05:29.360" video="mainVideo" id=subtitle]]
+[[!template text="I'd like to show you" start="00:05:32.960" video="mainVideo" id=subtitle]]
+[[!template text="that when I'm learning something" start="00:05:33.680" video="mainVideo" id=subtitle]]
+[[!template text="and I learn a new fact," start="00:05:36.639" video="mainVideo" id=subtitle]]
+[[!template text="I write down what I learned" start="00:05:38.400" video="mainVideo" id=subtitle]]
+[[!template text="in the form of a question and an answer." start="00:05:40.320" video="mainVideo" id=subtitle]]
+[[!template text="So you can see here, there's a question" start="00:05:42.400" video="mainVideo" id=subtitle]]
+[[!template text="that begins with who, what, where." start="00:05:45.039" video="mainVideo" id=subtitle]]
+[[!template text="It begins with a w word, or how," start="00:05:46.800" video="mainVideo" id=subtitle]]
+[[!template text="or if or is, and it ends in a question mark," start="00:05:49.360" video="mainVideo" id=subtitle]]
+[[!template text="and then following that is another string" start="00:05:53.039" video="mainVideo" id=subtitle]]
+[[!template text="that ends in a period." start="00:05:54.960" video="mainVideo" id=subtitle]]
+[[!template text="So I have a... I'd like to do this" start="00:05:56.560" video="mainVideo" id=subtitle]]
+[[!template text="in Emacs as well, but I haven't" start="00:05:58.240" video="mainVideo" id=subtitle]]
+[[!template text="worked that out yet." start="00:05:59.280" video="mainVideo" id=subtitle]]
+[[!template text="I have a script that will..." start="00:06:00.319" video="mainVideo" id=subtitle]]
+[[!template text="Let's find a-n-k-i-f." start="00:06:04.639" video="mainVideo" id=subtitle]]
+[[!template text="Okay, I have a script that will go through" start="00:06:07.680" video="mainVideo" id=subtitle]]
+[[!template text="all the notes in my org-roam directory" start="00:06:09.680" video="mainVideo" id=subtitle]]
+[[!template text="and find all the questions." start="00:06:13.680" video="mainVideo" id=subtitle]]
+[[!template text="Now let's pull up the most..." start="00:06:16.880" video="mainVideo" id=subtitle]]
+[[!template text="No, don't edit the buffer." start="00:06:20.720" video="mainVideo" id=subtitle]]
+[[!template text="Save that. Come back to here." start="00:06:24.319" video="mainVideo" id=subtitle]]
+[[!template text="So now you can see that all the questions" start="00:06:29.039" video="mainVideo" id=subtitle]]
+[[!template text="that I've written in my notes" start="00:06:31.680" video="mainVideo" id=subtitle]]
+[[!template text="have now been ANKIFIED." start="00:06:32.560" video="mainVideo" id=subtitle]]
+[[!template text="Now what's that mean?" start="00:06:33.759" video="mainVideo" id=subtitle]]
+[[!template text="Anki is this program here" start="00:06:34.880" video="mainVideo" id=subtitle]]
+[[!template text="which is a flashcard system" start="00:06:40.960" video="mainVideo" id=subtitle]]
+[[!template text="based on the idea..." start="00:06:43.199" video="mainVideo" id=subtitle]]
+[[!template text="No, let's not download that right now." start="00:06:44.560" video="mainVideo" id=subtitle]]
+[[!template text="This is a system that enables" start="00:06:48.000" video="mainVideo" id=subtitle]]
+[[!template text="the easy creation of flash cards" start="00:06:50.720" video="mainVideo" id=subtitle]]
+[[!template text="that show you the front," start="00:06:53.120" video="mainVideo" id=subtitle]]
+[[!template text="show you the back," start="00:06:54.479" video="mainVideo" id=subtitle]]
+[[!template text="and then you decide" start="00:06:55.360" video="mainVideo" id=subtitle]]
+[[!template text="if you knew that question or not." start="00:06:56.160" video="mainVideo" id=subtitle]]
+[[!template text="So I don't want to spend much time on this," start="00:07:00.000" video="mainVideo" id=subtitle]]
+[[!template text="but everything I'm learning in a class," start="00:07:02.639" video="mainVideo" id=subtitle]]
+[[!template text="I write into my notes as a question" start="00:07:04.639" video="mainVideo" id=subtitle]]
+[[!template text="that I load into this flashcard system" start="00:07:06.800" video="mainVideo" id=subtitle]]
+[[!template text="that then I can review on a walk," start="00:07:08.800" video="mainVideo" id=subtitle]]
+[[!template text="or on a bus ride, or whatever," start="00:07:10.880" video="mainVideo" id=subtitle]]
+[[!template text="and stay on top of indefinitely." start="00:07:13.680" video="mainVideo" id=subtitle]]
+[[!template text="As long as I can continue" start="00:07:16.400" video="mainVideo" id=subtitle]]
+[[!template text="to keep reviewing that," start="00:07:17.440" video="mainVideo" id=subtitle]]
+[[!template text="I will keep that information" start="00:07:18.400" video="mainVideo" id=subtitle]]
+[[!template text="fresh in my mind." start="00:07:20.639" video="mainVideo" id=subtitle]]
+[[!template text="So now let's come out of these files" start="00:07:22.319" video="mainVideo" id=subtitle]]
+[[!template text="back to here." start="00:07:24.479" video="mainVideo" id=subtitle]]
+[[!template text="So I've demoed class note PDFs," start="00:07:25.039" video="mainVideo" id=subtitle]]
+[[!template text="grabbing papers from arXiv," start="00:07:27.440" video="mainVideo" id=subtitle]]
+[[!template text="autogenerating the skeletons" start="00:07:29.440" video="mainVideo" id=subtitle]]
+[[!template text="and the flashcards," start="00:07:31.199" video="mainVideo" id=subtitle]]
+[[!template text="and now let's see what it looks like." start="00:07:32.720" video="mainVideo" id=subtitle]]
+[[!template text="Let's visualize the connections" start="00:07:35.280" video="mainVideo" id=subtitle]]
+[[!template text="between these nodes." start="00:07:40.160" video="mainVideo" id=subtitle]]
+[[!template text="So here is a graph for the file" start="00:07:42.000" video="mainVideo" id=subtitle]]
+[[!template text="I'm reading right now:" start="00:07:45.199" video="mainVideo" id=subtitle]]
+[[!template text="One Effective Grad Student Workflow." start="00:07:46.319" video="mainVideo" id=subtitle]]
+[[!template text="Here is the node I have a link to" start="00:07:49.520" video="mainVideo" id=subtitle]]
+[[!template text="in my Org mode document" start="00:07:53.599" video="mainVideo" id=subtitle]]
+[[!template text="on spaced repetition. We can open that" start="00:07:54.639" video="mainVideo" id=subtitle]]
+[[!template text="and come right back to Emacs," start="00:07:57.199" video="mainVideo" id=subtitle]]
+[[!template text="and I just love that." start="00:07:59.280" video="mainVideo" id=subtitle]]
+[[!template text="For the more complicated topics," start="00:08:01.680" video="mainVideo" id=subtitle]]
+[[!template text="you can see connections between things" start="00:08:03.919" video="mainVideo" id=subtitle]]
+[[!template text="that you maybe didn't realize you had," start="00:08:05.520" video="mainVideo" id=subtitle]]
+[[!template text="and some of the notes you've taken." start="00:08:07.520" video="mainVideo" id=subtitle]]
+[[!template text="And so I'm getting near the end." start="00:08:10.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I just want to show some small customizations." start="00:08:12.639" video="mainVideo" id=subtitle]]
+[[!template text="I save my org mode files" start="00:08:15.120" video="mainVideo" id=subtitle]]
+[[!template text="that are in org-roam" start="00:08:17.120" video="mainVideo" id=subtitle]]
+[[!template text="with a year year month month date prefix," start="00:08:18.479" video="mainVideo" id=subtitle]]
+[[!template text="so that I can tell when the node was created" start="00:08:21.520" video="mainVideo" id=subtitle]]
+[[!template text="I also truncate them at 30 characters," start="00:08:24.639" video="mainVideo" id=subtitle]]
+[[!template text="so that when I do an ls," start="00:08:26.560" video="mainVideo" id=subtitle]]
+[[!template text="they don't word wrap." start="00:08:27.919" video="mainVideo" id=subtitle]]
+[[!template text="Maybe that's OCD." start="00:08:29.280" video="mainVideo" id=subtitle]]
+[[!template text="I also use an ID format that is year month" start="00:08:32.800" video="mainVideo" id=subtitle]]
+[[!template text="day hour month hour minute second" start="00:08:38.159" video="mainVideo" id=subtitle]]
+[[!template text="rather than the full UUID format" start="00:08:40.479" video="mainVideo" id=subtitle]]
+[[!template text="because that number up there," start="00:08:43.279" video="mainVideo" id=subtitle]]
+[[!template text="that ID makes sense to me" start="00:08:44.720" video="mainVideo" id=subtitle]]
+[[!template text="and it gives me an idea of when that node--" start="00:08:46.160" video="mainVideo" id=subtitle]]
+[[!template text="which you can, by the way," start="00:08:50.160" video="mainVideo" id=subtitle]]
+[[!template text="you can have--even one of these subheadings" start="00:08:51.040" video="mainVideo" id=subtitle]]
+[[!template text="can be a node in org-roam." start="00:08:55.040" video="mainVideo" id=subtitle]]
+[[!template text="So now that you can see" start="00:08:56.240" video="mainVideo" id=subtitle]]
+[[!template text="that was created right now." start="00:08:57.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Some of the TODOs I still have" start="00:08:59.440" video="mainVideo" id=subtitle]]
+[[!template text="in this system... We don't have to go" start="00:09:00.640" video="mainVideo" id=subtitle]]
+[[!template text="too much into them, but I mentioned" start="00:09:02.720" video="mainVideo" id=subtitle]]
+[[!template text="case insensitivity, and I'd like" start="00:09:04.000" video="mainVideo" id=subtitle]]
+[[!template text="to make some improvements to org-noter." start="00:09:07.600" video="mainVideo" id=subtitle]]
+[[!template text="At this point, I'd just like to..." start="00:09:10.080" video="mainVideo" id=subtitle]]
+[[!template text="I have a list of people I'd like to thank." start="00:09:12.240" video="mainVideo" id=subtitle]]
+[[!template text="I'm not gonna read the whole list out," start="00:09:14.959" video="mainVideo" id=subtitle]]
+[[!template text="but they're a bunch of software engineers" start="00:09:16.240" video="mainVideo" id=subtitle]]
+[[!template text="that created great free software" start="00:09:17.680" video="mainVideo" id=subtitle]]
+[[!template text="that's very useful to me" start="00:09:20.399" video="mainVideo" id=subtitle]]
+[[!template text="and I use every day, so thank you to them," start="00:09:21.519" video="mainVideo" id=subtitle]]
+[[!template text="and thank you all for listening to my talk." start="00:09:23.839" video="mainVideo" id=subtitle]]
+[[!template text="captions by sachac" start="00:09:27.080" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/dashboard.md b/2021/captions/dashboard.md
new file mode 100644
index 00000000..71d332f3
--- /dev/null
+++ b/2021/captions/dashboard.md
@@ -0,0 +1,329 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hi everyone! I'm Mehmet Tekman," start="00:00:00.000" video="mainVideo" id=subtitle]]
+[[!template text="and I'm here to talk to you" start="00:00:01.567" video="mainVideo" id=subtitle]]
+[[!template text="about using Amazon Kindles" start="00:00:02.483" video="mainVideo" id=subtitle]]
+[[!template text="as a productivity dashboard for" start="00:00:03.700" video="mainVideo" id=subtitle]]
+[[!template text="your various projects." start="00:00:05.040" video="mainVideo" id=subtitle]]
+[[!template text="In a nutshell, you describe your machines," start="00:00:07.359" video="mainVideo" id=subtitle]]
+[[!template text="your commands, and your schedules" start="00:00:09.519" video="mainVideo" id=subtitle]]
+[[!template text="in an Org-Mode file," start="00:00:11.317" video="mainVideo" id=subtitle]]
+[[!template text="and then you just initialize" start="00:00:13.120" video="mainVideo" id=subtitle]]
+[[!template text="your Kindle devices." start="00:00:14.933" video="mainVideo" id=subtitle]]
+[[!template text="These devices are asleep" start="00:00:16.960" video="mainVideo" id=subtitle]]
+[[!template text="most of the time," start="00:00:18.367" video="mainVideo" id=subtitle]]
+[[!template text="but they wake up at scheduled times" start="00:00:19.117" video="mainVideo" id=subtitle]]
+[[!template text="to retrieve content" start="00:00:20.720" video="mainVideo" id=subtitle]]
+[[!template text="from the centralized server." start="00:00:22.033" video="mainVideo" id=subtitle]]
+[[!template text="Content can be Org mode and Emacs-based," start="00:00:24.800" video="mainVideo" id=subtitle]]
+[[!template text="or it can be from Web content," start="00:00:27.599" video="mainVideo" id=subtitle]]
+[[!template text="or it can just be static images and WAV." start="00:00:29.500" video="mainVideo" id=subtitle]]
+[[!template text="If you, like me, struggle to" start="00:00:42.840" video="mainVideo" id=subtitle]]
+[[!template text="keep your life under tabs," start="00:00:45.600" video="mainVideo" id=subtitle]]
+[[!template text="or find it very hard to separate" start="00:00:46.833" video="mainVideo" id=subtitle]]
+[[!template text="your work life from your home life," start="00:00:48.300" video="mainVideo" id=subtitle]]
+[[!template text="then you, like me, likely need" start="00:00:49.417" video="mainVideo" id=subtitle]]
+[[!template text="some kind of passive background service" start="00:00:51.283" video="mainVideo" id=subtitle]]
+[[!template text="that reminds you of where you are" start="00:00:52.917" video="mainVideo" id=subtitle]]
+[[!template text="and what you are supposed to be doing." start="00:00:54.083" video="mainVideo" id=subtitle]]
+[[!template text="Even if it's just a sign saying," start="00:00:55.267" video="mainVideo" id=subtitle]]
+[[!template text="&quot;You're at home! Relax!&quot;" start="00:00:56.960" video="mainVideo" id=subtitle]]
+[[!template text="An Amazon Kindle is perfect for this." start="00:00:58.640" video="mainVideo" id=subtitle]]
+[[!template text="In a nutshell, it's a cheap" start="00:01:00.400" video="mainVideo" id=subtitle]]
+[[!template text="black and white e-ink device" start="00:01:01.717" video="mainVideo" id=subtitle]]
+[[!template text="that can go for weeks" start="00:01:03.117" video="mainVideo" id=subtitle]]
+[[!template text="without needing a single charge." start="00:01:03.800" video="mainVideo" id=subtitle]]
+[[!template text="Every year, Amazon brings out" start="00:01:05.033" video="mainVideo" id=subtitle]]
+[[!template text="an incrementally better model," start="00:01:06.767" video="mainVideo" id=subtitle]]
+[[!template text="which makes the old devices obsolete," start="00:01:07.983" video="mainVideo" id=subtitle]]
+[[!template text="and you can find these older models" start="00:01:09.333" video="mainVideo" id=subtitle]]
+[[!template text="for 5 euros on second-hand websites." start="00:01:11.067" video="mainVideo" id=subtitle]]
+[[!template text="Plus it runs Linux, has WiFi networking," start="00:01:13.360" video="mainVideo" id=subtitle]]
+[[!template text="and has a dedicated forum of hackers" start="00:01:15.360" video="mainVideo" id=subtitle]]
+[[!template text="for getting the most out of the device." start="00:01:16.987" video="mainVideo" id=subtitle]]
+[[!template text="Some drawbacks of this is that" start="00:01:19.200" video="mainVideo" id=subtitle]]
+[[!template text="the device often comes with unwanted bloat:" start="00:01:20.366" video="mainVideo" id=subtitle]]
+[[!template text="over-the-air updates," start="00:01:22.799" video="mainVideo" id=subtitle]]
+[[!template text="it phones home to Amazon regularly," start="00:01:24.050" video="mainVideo" id=subtitle]]
+[[!template text="it has a secret microphone" start="00:01:25.833" video="mainVideo" id=subtitle]]
+[[!template text="embedded in the device," start="00:01:27.033" video="mainVideo" id=subtitle]]
+[[!template text="and it has a bunch of creepy" start="00:01:27.983" video="mainVideo" id=subtitle]]
+[[!template text="seemingly interdependent" start="00:01:29.433" video="mainVideo" id=subtitle]]
+[[!template text="background processes," start="00:01:30.633" video="mainVideo" id=subtitle]]
+[[!template text="where killing one kind of kills the others" start="00:01:31.439" video="mainVideo" id=subtitle]]
+[[!template text="risking that you will break the device." start="00:01:34.083" video="mainVideo" id=subtitle]]
+[[!template text="But this is where the community" start="00:01:36.560" video="mainVideo" id=subtitle]]
+[[!template text="really shines through," start="00:01:37.799" video="mainVideo" id=subtitle]]
+[[!template text="since the friendly (and not-so-friendly)" start="00:01:38.883" video="mainVideo" id=subtitle]]
+[[!template text="users (and developers)" start="00:01:40.483" video="mainVideo" id=subtitle]]
+[[!template text="from the MobileRead forums have pretty much" start="00:01:41.583" video="mainVideo" id=subtitle]]
+[[!template text="scraped out a good portion of the" start="00:01:43.200" video="mainVideo" id=subtitle]]
+[[!template text="harmful Amazon scripts from the device." start="00:01:44.560" video="mainVideo" id=subtitle]]
+[[!template text="Some of the devices even use" start="00:01:46.960" video="mainVideo" id=subtitle]]
+[[!template text="Awesome Window Manager," start="00:01:48.550" video="mainVideo" id=subtitle]]
+[[!template text="meaning you can really play around" start="00:01:49.483" video="mainVideo" id=subtitle]]
+[[!template text="with the existing system" start="00:01:50.800" video="mainVideo" id=subtitle]]
+[[!template text="without having to create" start="00:01:51.620" video="mainVideo" id=subtitle]]
+[[!template text="your own X11 server." start="00:01:52.633" video="mainVideo" id=subtitle]]
+[[!template text="This then empowers users" start="00:01:54.233" video="mainVideo" id=subtitle]]
+[[!template text="to display whatever they want on the device." start="00:01:55.377" video="mainVideo" id=subtitle]]
+[[!template text="One project that really got this going" start="00:01:57.600" video="mainVideo" id=subtitle]]
+[[!template text="was the Kindle-Dash dashboard from" start="00:01:59.040" video="mainVideo" id=subtitle]]
+[[!template text="Pascal Widdershoven, who really refined a" start="00:02:00.560" video="mainVideo" id=subtitle]]
+[[!template text="lot of the internal scripts" start="00:02:02.320" video="mainVideo" id=subtitle]]
+[[!template text="to stabilize the device." start="00:02:03.483" video="mainVideo" id=subtitle]]
+[[!template text="However, the project then" start="00:02:05.439" video="mainVideo" id=subtitle]]
+[[!template text="puts the onus on the device" start="00:02:06.600" video="mainVideo" id=subtitle]]
+[[!template text="to retrieve the data from" start="00:02:07.650" video="mainVideo" id=subtitle]]
+[[!template text="somewhere else over the internet," start="00:02:08.560" video="mainVideo" id=subtitle]]
+[[!template text="and so you still need to" start="00:02:09.950" video="mainVideo" id=subtitle]]
+[[!template text="generate the content" start="00:02:10.753" video="mainVideo" id=subtitle]]
+[[!template text="and place it on the web somewhere." start="00:02:11.440" video="mainVideo" id=subtitle]]
+[[!template text="Plus you need to do this and manage it" start="00:02:13.200" video="mainVideo" id=subtitle]]
+[[!template text="for every Kindle device that you have." start="00:02:14.640" video="mainVideo" id=subtitle]]
+[[!template text="Kindle-Sync, however," start="00:02:17.360" video="mainVideo" id=subtitle]]
+[[!template text="is an entirely different beast," start="00:02:18.500" video="mainVideo" id=subtitle]]
+[[!template text="albeit one that builds off of the works" start="00:02:19.867" video="mainVideo" id=subtitle]]
+[[!template text="of the aforementioned projects." start="00:02:21.800" video="mainVideo" id=subtitle]]
+[[!template text="It assumes that instead of just having" start="00:02:23.440" video="mainVideo" id=subtitle]]
+[[!template text="one Kindle device around" start="00:02:24.800" video="mainVideo" id=subtitle]]
+[[!template text="that you wish to re-purpose" start="00:02:26.050" video="mainVideo" id=subtitle]]
+[[!template text="for productivity purposes," start="00:02:27.133" video="mainVideo" id=subtitle]]
+[[!template text="that you actually have" start="00:02:28.080" video="mainVideo" id=subtitle]]
+[[!template text="multiple Kindle devices" start="00:02:28.983" video="mainVideo" id=subtitle]]
+[[!template text="that you want to manage" start="00:02:30.117" video="mainVideo" id=subtitle]]
+[[!template text="and configure in tandem." start="00:02:30.794" video="mainVideo" id=subtitle]]
+[[!template text="Everything is managed" start="00:02:32.720" video="mainVideo" id=subtitle]]
+[[!template text="from a dedicated server (or a raspberry pi)" start="00:02:33.633" video="mainVideo" id=subtitle]]
+[[!template text="which distributes jobs to multiple Kindles," start="00:02:35.667" video="mainVideo" id=subtitle]]
+[[!template text="running on different update timers." start="00:02:37.440" video="mainVideo" id=subtitle]]
+[[!template text="These timers are all managed" start="00:02:39.519" video="mainVideo" id=subtitle]]
+[[!template text="from the server," start="00:02:40.786" video="mainVideo" id=subtitle]]
+[[!template text="and all the Kindle device has to do is:" start="00:02:41.486" video="mainVideo" id=subtitle]]
+[[!template text="to wake up, power on the WiFi," start="00:02:43.017" video="mainVideo" id=subtitle]]
+[[!template text="receive some media, display the media, and" start="00:02:45.200" video="mainVideo" id=subtitle]]
+[[!template text="receive a barebones RTC sleep request." start="00:02:47.280" video="mainVideo" id=subtitle]]
+[[!template text="Then it sleeps for the requested time," start="00:02:49.680" video="mainVideo" id=subtitle]]
+[[!template text="consuming no power, whilst displaying the" start="00:02:51.040" video="mainVideo" id=subtitle]]
+[[!template text="desired media. That is maybe 10 seconds" start="00:02:52.800" video="mainVideo" id=subtitle]]
+[[!template text="of awake time between each request." start="00:02:55.200" video="mainVideo" id=subtitle]]
+[[!template text="Cron does not actually run" start="00:02:57.599" video="mainVideo" id=subtitle]]
+[[!template text="on the Kindle device itself," start="00:02:58.933" video="mainVideo" id=subtitle]]
+[[!template text="simply because it does not reliably work." start="00:02:59.933" video="mainVideo" id=subtitle]]
+[[!template text="All of this is handled by the server." start="00:03:01.600" video="mainVideo" id=subtitle]]
+[[!template text="With the server-client model," start="00:03:04.050" video="mainVideo" id=subtitle]]
+[[!template text="it also tries to restrict Amazon access." start="00:03:05.599" video="mainVideo" id=subtitle]]
+[[!template text="SSH keys are shared" start="00:03:08.000" video="mainVideo" id=subtitle]]
+[[!template text="only from the client to the server," start="00:03:09.517" video="mainVideo" id=subtitle]]
+[[!template text="but not from the server to the client," start="00:03:11.217" video="mainVideo" id=subtitle]]
+[[!template text="so the Kindle cannot connect" start="00:03:12.517" video="mainVideo" id=subtitle]]
+[[!template text="to the Raspberry Pi without a password." start="00:03:13.920" video="mainVideo" id=subtitle]]
+[[!template text="IPtables rules are also set" start="00:03:16.319" video="mainVideo" id=subtitle]]
+[[!template text="so that the Kindle cannot phone home" start="00:03:18.033" video="mainVideo" id=subtitle]]
+[[!template text="to Amazon, and the connections" start="00:03:19.483" video="mainVideo" id=subtitle]]
+[[!template text="are restricted to just the LAN." start="00:03:20.667" video="mainVideo" id=subtitle]]
+[[!template text="So I got very curious at one point" start="00:03:23.200" video="mainVideo" id=subtitle]]
+[[!template text="and decided to see how long" start="00:03:24.820" video="mainVideo" id=subtitle]]
+[[!template text="a Kindle could last on a single charge" start="00:03:26.133" video="mainVideo" id=subtitle]]
+[[!template text="in such an arrangement," start="00:03:27.599" video="mainVideo" id=subtitle]]
+[[!template text="so that every 15 minutes for 18 hours," start="00:03:28.560" video="mainVideo" id=subtitle]]
+[[!template text="I tested the device" start="00:03:30.640" video="mainVideo" id=subtitle]]
+[[!template text="by sending a media item" start="00:03:31.599" video="mainVideo" id=subtitle]]
+[[!template text="and recording the battery level." start="00:03:32.959" video="mainVideo" id=subtitle]]
+[[!template text="The Kindle doesn't seem to" start="00:03:35.200" video="mainVideo" id=subtitle]]
+[[!template text="report the battery level" start="00:03:36.159" video="mainVideo" id=subtitle]]
+[[!template text="very continuously," start="00:03:36.959" video="mainVideo" id=subtitle]]
+[[!template text="but at discrete percentages," start="00:03:37.760" video="mainVideo" id=subtitle]]
+[[!template text="so that you could end up with" start="00:03:39.040" video="mainVideo" id=subtitle]]
+[[!template text="a graph that looks like this." start="00:03:39.840" video="mainVideo" id=subtitle]]
+[[!template text="Assuming you have half the charge," start="00:03:42.159" video="mainVideo" id=subtitle]]
+[[!template text="and use it once every hour -" start="00:03:43.617" video="mainVideo" id=subtitle]]
+[[!template text="it will drop by 10% battery in 76 hours," start="00:03:45.200" video="mainVideo" id=subtitle]]
+[[!template text="which is roughly three days." start="00:03:48.319" video="mainVideo" id=subtitle]]
+[[!template text="It's hard to extrapolate" start="00:03:49.760" video="mainVideo" id=subtitle]]
+[[!template text="with only three good summarized data points," start="00:03:50.640" video="mainVideo" id=subtitle]]
+[[!template text="of which the number of requests" start="00:03:52.400" video="mainVideo" id=subtitle]]
+[[!template text="per battery level appear to diminish" start="00:03:53.519" video="mainVideo" id=subtitle]]
+[[!template text="as shown in the table below," start="00:03:54.879" video="mainVideo" id=subtitle]]
+[[!template text="but the final result yields 76 requests" start="00:03:56.640" video="mainVideo" id=subtitle]]
+[[!template text="with an average loss of 0.5% battery life" start="00:03:58.560" video="mainVideo" id=subtitle]]
+[[!template text="per request. Which is not bad!" start="00:04:00.799" video="mainVideo" id=subtitle]]
+[[!template text="Assuming you do a request every 2 hours" start="00:04:02.273" video="mainVideo" id=subtitle]]
+[[!template text="from 8am to 8pm," start="00:04:04.400" video="mainVideo" id=subtitle]]
+[[!template text="and let it sleep at night," start="00:04:06.000" video="mainVideo" id=subtitle]]
+[[!template text="then that's approximately 6 requests a day," start="00:04:07.040" video="mainVideo" id=subtitle]]
+[[!template text="which could easily last a device" start="00:04:09.040" video="mainVideo" id=subtitle]]
+[[!template text="for a month." start="00:04:10.400" video="mainVideo" id=subtitle]]
+[[!template text="The ksync script does" start="00:04:11.280" video="mainVideo" id=subtitle]]
+[[!template text="essentially everything:" start="00:04:12.586" video="mainVideo" id=subtitle]]
+[[!template text="from generating and fetching the media," start="00:04:13.200" video="mainVideo" id=subtitle]]
+[[!template text="to initializing all Kindle devices," start="00:04:14.799" video="mainVideo" id=subtitle]]
+[[!template text="generating the server cronjobs," start="00:04:16.720" video="mainVideo" id=subtitle]]
+[[!template text="log report summaries," start="00:04:18.160" video="mainVideo" id=subtitle]]
+[[!template text="editing the config tables," start="00:04:19.199" video="mainVideo" id=subtitle]]
+[[!template text="and much more." start="00:04:20.400" video="mainVideo" id=subtitle]]
+[[!template text="The media operations are comparatively" start="00:04:21.199" video="mainVideo" id=subtitle]]
+[[!template text="much more complex" start="00:04:22.880" video="mainVideo" id=subtitle]]
+[[!template text="and encompass a few media use cases" start="00:04:23.680" video="mainVideo" id=subtitle]]
+[[!template text="such as fetching the weather" start="00:04:25.280" video="mainVideo" id=subtitle]]
+[[!template text="(though only from Open Weather Maps)" start="00:04:26.400" video="mainVideo" id=subtitle]]
+[[!template text="and retrieving Google Calendar views" start="00:04:28.560" video="mainVideo" id=subtitle]]
+[[!template text="by week, month, agenda, and four day view." start="00:04:30.000" video="mainVideo" id=subtitle]]
+[[!template text="You can retrieve Org-Mode data" start="00:04:32.000" video="mainVideo" id=subtitle]]
+[[!template text="from an Emacs instance on the server," start="00:04:33.199" video="mainVideo" id=subtitle]]
+[[!template text="which in my case" start="00:04:34.639" video="mainVideo" id=subtitle]]
+[[!template text="I produce views for an agenda" start="00:04:35.360" video="mainVideo" id=subtitle]]
+[[!template text="or a sparse tree of my main projects file." start="00:04:36.720" video="mainVideo" id=subtitle]]
+[[!template text="Finally we have gallery and wavfile," start="00:04:39.360" video="mainVideo" id=subtitle]]
+[[!template text="which are static resources" start="00:04:41.120" video="mainVideo" id=subtitle]]
+[[!template text="which will never change once generated." start="00:04:42.240" video="mainVideo" id=subtitle]]
+[[!template text="The idea is that you feed it" start="00:04:44.000" video="mainVideo" id=subtitle]]
+[[!template text="text and an image location," start="00:04:45.199" video="mainVideo" id=subtitle]]
+[[!template text="and it generates" start="00:04:46.400" video="mainVideo" id=subtitle]]
+[[!template text="a Kindle-compatible image" start="00:04:47.040" video="mainVideo" id=subtitle]]
+[[!template text="using imagemagick as a backend for it." start="00:04:48.720" video="mainVideo" id=subtitle]]
+[[!template text="In the case of the wavfile," start="00:04:51.280" video="mainVideo" id=subtitle]]
+[[!template text="it uses espeak on the backend." start="00:04:52.240" video="mainVideo" id=subtitle]]
+[[!template text="The below is summarized" start="00:04:54.160" video="mainVideo" id=subtitle]]
+[[!template text="from the help-me text" start="00:04:55.280" video="mainVideo" id=subtitle]]
+[[!template text="in the main ksync file," start="00:04:56.317" video="mainVideo" id=subtitle]]
+[[!template text="but essentially, you need to" start="00:04:57.199" video="mainVideo" id=subtitle]]
+[[!template text="define your config in the CSV files," start="00:04:58.160" video="mainVideo" id=subtitle]]
+[[!template text="which we talk about in the next section;" start="00:04:59.919" video="mainVideo" id=subtitle]]
+[[!template text="initialize all your Kindle devices," start="00:05:01.440" video="mainVideo" id=subtitle]]
+[[!template text="i.e. copy over SSH keys," start="00:05:03.120" video="mainVideo" id=subtitle]]
+[[!template text="kill all the unnecessary services," start="00:05:04.720" video="mainVideo" id=subtitle]]
+[[!template text="and prime them for media collection;" start="00:05:06.160" video="mainVideo" id=subtitle]]
+[[!template text="and ensure that you have" start="00:05:07.840" video="mainVideo" id=subtitle]]
+[[!template text="all your static media generated" start="00:05:08.720" video="mainVideo" id=subtitle]]
+[[!template text="and fetchable; and finally" start="00:05:10.080" video="mainVideo" id=subtitle]]
+[[!template text="you then refresh the scheduling" start="00:05:11.440" video="mainVideo" id=subtitle]]
+[[!template text="on the server." start="00:05:12.720" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so this is all good and well," start="00:05:14.240" video="mainVideo" id=subtitle]]
+[[!template text="and we now know what the server does" start="00:05:15.759" video="mainVideo" id=subtitle]]
+[[!template text="and how to probe and inspect it -" start="00:05:17.039" video="mainVideo" id=subtitle]]
+[[!template text="but how does the server generate" start="00:05:18.400" video="mainVideo" id=subtitle]]
+[[!template text="much of the content?" start="00:05:19.759" video="mainVideo" id=subtitle]]
+[[!template text="So a lot of the content" start="00:05:21.120" video="mainVideo" id=subtitle]]
+[[!template text="will be dynamically generated," start="00:05:22.080" video="mainVideo" id=subtitle]]
+[[!template text="meaning it cannot be cached" start="00:05:23.360" video="mainVideo" id=subtitle]]
+[[!template text="and is likely to change from hour to hour." start="00:05:24.639" video="mainVideo" id=subtitle]]
+[[!template text="The media content that is generated here" start="00:05:26.720" video="mainVideo" id=subtitle]]
+[[!template text="are mostly PNG images" start="00:05:28.400" video="mainVideo" id=subtitle]]
+[[!template text="and have a timestamp" start="00:05:29.759" video="mainVideo" id=subtitle]]
+[[!template text="embedded in their filenames." start="00:05:30.567" video="mainVideo" id=subtitle]]
+[[!template text="The Emacs-specific content" start="00:05:32.320" video="mainVideo" id=subtitle]]
+[[!template text="consists of a few views," start="00:05:33.520" video="mainVideo" id=subtitle]]
+[[!template text="namely the org-gcal views," start="00:05:34.560" video="mainVideo" id=subtitle]]
+[[!template text="org-agenda, and org-calories --" start="00:05:36.000" video="mainVideo" id=subtitle]]
+[[!template text="essentially anything that Emacs can display" start="00:05:37.600" video="mainVideo" id=subtitle]]
+[[!template text="and that you want to capture into an image." start="00:05:39.520" video="mainVideo" id=subtitle]]
+[[!template text="Emacs can't (as far as I know)" start="00:05:42.000" video="mainVideo" id=subtitle]]
+[[!template text="render graphics in a headless way," start="00:05:43.360" video="mainVideo" id=subtitle]]
+[[!template text="so what we do instead" start="00:05:44.639" video="mainVideo" id=subtitle]]
+[[!template text="is run Emacs in a dummy minimal X11 session" start="00:05:45.600" video="mainVideo" id=subtitle]]
+[[!template text="via &quot;xvrb-run.&quot;" start="00:05:48.240" video="mainVideo" id=subtitle]]
+[[!template text="From inside, you can take screenshots" start="00:05:50.080" video="mainVideo" id=subtitle]]
+[[!template text="as you would in" start="00:05:51.680" video="mainVideo" id=subtitle]]
+[[!template text="a normal desktop environment," start="00:05:52.233" video="mainVideo" id=subtitle]]
+[[!template text="but with the benefit that" start="00:05:53.440" video="mainVideo" id=subtitle]]
+[[!template text="you don't actually need to invoke a desktop" start="00:05:54.400" video="mainVideo" id=subtitle]]
+[[!template text="or interfere with an existing one." start="00:05:56.479" video="mainVideo" id=subtitle]]
+[[!template text="The minimal elisp shown here" start="00:05:58.560" video="mainVideo" id=subtitle]]
+[[!template text="is all that is required" start="00:05:59.840" video="mainVideo" id=subtitle]]
+[[!template text="to output your desired image from Emacs" start="00:06:00.720" video="mainVideo" id=subtitle]]
+[[!template text="and configure it for the Kindle environment." start="00:06:02.400" video="mainVideo" id=subtitle]]
+[[!template text="On the web side of things," start="00:06:04.479" video="mainVideo" id=subtitle]]
+[[!template text="we don't really need to invoke" start="00:06:05.360" video="mainVideo" id=subtitle]]
+[[!template text="a dummy X11 session" start="00:06:06.400" video="mainVideo" id=subtitle]]
+[[!template text="because Chromium can run headless" start="00:06:07.520" video="mainVideo" id=subtitle]]
+[[!template text="and can be controlled" start="00:06:09.120" video="mainVideo" id=subtitle]]
+[[!template text="by the node library &quot;puppeteer&quot;" start="00:06:09.919" video="mainVideo" id=subtitle]]
+[[!template text="to render dynamic content," start="00:06:11.600" video="mainVideo" id=subtitle]]
+[[!template text="focus on regions of the webpage," start="00:06:13.039" video="mainVideo" id=subtitle]]
+[[!template text="and take snapshots." start="00:06:14.560" video="mainVideo" id=subtitle]]
+[[!template text="The static content comprises" start="00:06:16.080" video="mainVideo" id=subtitle]]
+[[!template text="of two types: images and audio." start="00:06:17.600" video="mainVideo" id=subtitle]]
+[[!template text="The content is accessed by a key," start="00:06:19.600" video="mainVideo" id=subtitle]]
+[[!template text="in this case Batman," start="00:06:21.520" video="mainVideo" id=subtitle]]
+[[!template text="and the content information" start="00:06:22.560" video="mainVideo" id=subtitle]]
+[[!template text="is given by the &quot;--extra&quot; parameter" start="00:06:23.600" video="mainVideo" id=subtitle]]
+[[!template text="which describes either or both" start="00:06:25.199" video="mainVideo" id=subtitle]]
+[[!template text="an image and text." start="00:06:26.960" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so now we have content," start="00:06:30.880" video="mainVideo" id=subtitle]]
+[[!template text="how do we schedule this content" start="00:06:32.248" video="mainVideo" id=subtitle]]
+[[!template text="to appear on our desired machines" start="00:06:33.600" video="mainVideo" id=subtitle]]
+[[!template text="at desired times?" start="00:06:34.960" video="mainVideo" id=subtitle]]
+[[!template text="Everything is run via cron." start="00:06:36.400" video="mainVideo" id=subtitle]]
+[[!template text="So previously we saw that" start="00:06:37.759" video="mainVideo" id=subtitle]]
+[[!template text="we only needed the tables MACHINES.csv," start="00:06:38.720" video="mainVideo" id=subtitle]]
+[[!template text="COMMANDS.csv, and multiple TIME_*.csv tables" start="00:06:40.880" video="mainVideo" id=subtitle]]
+[[!template text="for the shell script to work." start="00:06:43.440" video="mainVideo" id=subtitle]]
+[[!template text="But Org-Mode does this far easier," start="00:06:44.880" video="mainVideo" id=subtitle]]
+[[!template text="since you can just have everything" start="00:06:46.479" video="mainVideo" id=subtitle]]
+[[!template text="in the same file," start="00:06:47.919" video="mainVideo" id=subtitle]]
+[[!template text="and with the helper minor-mode," start="00:06:49.039" video="mainVideo" id=subtitle]]
+[[!template text="manage everything" start="00:06:50.720" video="mainVideo" id=subtitle]]
+[[!template text="from a single Org-Mode document." start="00:06:51.360" video="mainVideo" id=subtitle]]
+[[!template text="Here I have 4 kindles and their shortnames." start="00:06:53.120" video="mainVideo" id=subtitle]]
+[[!template text="Yes, I even have a Kindle" start="00:06:55.120" video="mainVideo" id=subtitle]]
+[[!template text="hanging outside my door." start="00:06:56.160" video="mainVideo" id=subtitle]]
+[[!template text="I have 11 defined commands" start="00:06:57.520" video="mainVideo" id=subtitle]]
+[[!template text="which represent the views I want to see," start="00:06:58.960" video="mainVideo" id=subtitle]]
+[[!template text="and there are 4 timetables I use," start="00:07:00.800" video="mainVideo" id=subtitle]]
+[[!template text="but you can have" start="00:07:02.319" video="mainVideo" id=subtitle]]
+[[!template text="everything on one, if you like." start="00:07:02.800" video="mainVideo" id=subtitle]]
+[[!template text="Rows are machine names," start="00:07:04.319" video="mainVideo" id=subtitle]]
+[[!template text="and columns are corresponding hours" start="00:07:05.360" video="mainVideo" id=subtitle]]
+[[!template text="at which they run." start="00:07:06.800" video="mainVideo" id=subtitle]]
+[[!template text="Trust me, it's easier to configure" start="00:07:07.840" video="mainVideo" id=subtitle]]
+[[!template text="repeating tasks just by repeating them" start="00:07:09.440" video="mainVideo" id=subtitle]]
+[[!template text="multiple times, because at least this way," start="00:07:10.960" video="mainVideo" id=subtitle]]
+[[!template text="it's human readable," start="00:07:12.720" video="mainVideo" id=subtitle]]
+[[!template text="and the script which converts these" start="00:07:13.680" video="mainVideo" id=subtitle]]
+[[!template text="to a cronjob" start="00:07:14.880" video="mainVideo" id=subtitle]]
+[[!template text="collapses the repeating tasks by itself." start="00:07:15.759" video="mainVideo" id=subtitle]]
+[[!template text="The ksync script can be called" start="00:07:18.800" video="mainVideo" id=subtitle]]
+[[!template text="from within the config.org file" start="00:07:20.560" video="mainVideo" id=subtitle]]
+[[!template text="using this convenient" start="00:07:23.120" video="mainVideo" id=subtitle]]
+[[!template text="use-package declaration." start="00:07:24.683" video="mainVideo" id=subtitle]]
+[[!template text="All that one needs to do" start="00:07:26.960" video="mainVideo" id=subtitle]]
+[[!template text="is to configure the ENVIRONMENT_VARIABLES" start="00:07:28.319" video="mainVideo" id=subtitle]]
+[[!template text="by setting them in this table" start="00:07:30.560" video="mainVideo" id=subtitle]]
+[[!template text="where you set the repo name," start="00:07:32.880" video="mainVideo" id=subtitle]]
+[[!template text="the config directory," start="00:07:34.479" video="mainVideo" id=subtitle]]
+[[!template text="where the media shall go," start="00:07:36.160" video="mainVideo" id=subtitle]]
+[[!template text="and the server IP," start="00:07:37.599" video="mainVideo" id=subtitle]]
+[[!template text="although this can be" start="00:07:38.960" video="mainVideo" id=subtitle]]
+[[!template text="automatically detected." start="00:07:39.919" video="mainVideo" id=subtitle]]
+[[!template text="The package allows you" start="00:07:41.360" video="mainVideo" id=subtitle]]
+[[!template text="to export your tables" start="00:07:42.240" video="mainVideo" id=subtitle]]
+[[!template text="by running C-c C-c on them," start="00:07:43.440" video="mainVideo" id=subtitle]]
+[[!template text="and allows you to update all the jobs" start="00:07:46.720" video="mainVideo" id=subtitle]]
+[[!template text="related to each of your clients." start="00:07:49.199" video="mainVideo" id=subtitle]]
+[[!template text="You can also initialize clients" start="00:07:52.319" video="mainVideo" id=subtitle]]
+[[!template text="using this package --" start="00:07:53.759" video="mainVideo" id=subtitle]]
+[[!template text="for either all of them" start="00:07:55.120" video="mainVideo" id=subtitle]]
+[[!template text="or individual clients --" start="00:07:56.479" video="mainVideo" id=subtitle]]
+[[!template text="and the package comes with" start="00:07:58.479" video="mainVideo" id=subtitle]]
+[[!template text="some convenience functions" start="00:07:59.599" video="mainVideo" id=subtitle]]
+[[!template text="to do this automatically" start="00:08:01.120" video="mainVideo" id=subtitle]]
+[[!template text="for all tables in the buffer." start="00:08:02.720" video="mainVideo" id=subtitle]]
+[[!template text="With this, I want to say a big thank you" start="00:08:06.720" video="mainVideo" id=subtitle]]
+[[!template text="to Takaaki Ishikawa" start="00:08:08.319" video="mainVideo" id=subtitle]]
+[[!template text="for his fantastic &quot;org-tree-slide&quot;" start="00:08:09.840" video="mainVideo" id=subtitle]]
+[[!template text="presentation package." start="00:08:11.520" video="mainVideo" id=subtitle]]
+[[!template text="To Pascal Widdershoven" start="00:08:12.879" video="mainVideo" id=subtitle]]
+[[!template text="and David Hamp-Gonsalves," start="00:08:14.136" video="mainVideo" id=subtitle]]
+[[!template text="for their fantastic" start="00:08:15.803" video="mainVideo" id=subtitle]]
+[[!template text="kindle-dash repositories," start="00:08:16.633" video="mainVideo" id=subtitle]]
+[[!template text="for which some of my internal Kindle scripts" start="00:08:17.840" video="mainVideo" id=subtitle]]
+[[!template text="are derived from." start="00:08:19.903" video="mainVideo" id=subtitle]]
+[[!template text="Also a big thanks to the friendly" start="00:08:20.720" video="mainVideo" id=subtitle]]
+[[!template text="and not-so-friendly users and hackers" start="00:08:22.160" video="mainVideo" id=subtitle]]
+[[!template text="in the MobileRead forums." start="00:08:23.520" video="mainVideo" id=subtitle]]
+[[!template text="And finally, a big thanks" start="00:08:24.960" video="mainVideo" id=subtitle]]
+[[!template text="to the Emacs community" start="00:08:25.919" video="mainVideo" id=subtitle]]
+[[!template text="and the conference organizers." start="00:08:26.960" video="mainVideo" id=subtitle]]
+[[!template text="Thank you! captions by Mehmet" start="00:08:28.270" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/design.md b/2021/captions/design.md
new file mode 100644
index 00000000..10345adc
--- /dev/null
+++ b/2021/captions/design.md
@@ -0,0 +1,174 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Good afternoon. I'm Nicolas Rougier," start="00:00:00.880" video="mainVideo" id=subtitle]]
+[[!template text="and today I would like to present some of" start="00:00:02.386" video="mainVideo" id=subtitle]]
+[[!template text="the experiments I've made with Emacs." start="00:00:04.080" video="mainVideo" id=subtitle]]
+[[!template text="My initial motivation was an" start="00:00:06.560" video="mainVideo" id=subtitle]]
+[[!template text="inner feeling that something was" start="00:00:08.400" video="mainVideo" id=subtitle]]
+[[!template text="wrong with most modern editors," start="00:00:09.920" video="mainVideo" id=subtitle]]
+[[!template text="and before I show you my experiment," start="00:00:12.559" video="mainVideo" id=subtitle]]
+[[!template text="I will try to demonstrate" start="00:00:14.559" video="mainVideo" id=subtitle]]
+[[!template text="what I think is wrong." start="00:00:16.004" video="mainVideo" id=subtitle]]
+[[!template text="Note that this is mostly my" start="00:00:17.440" video="mainVideo" id=subtitle]]
+[[!template text="personal feelings and I did not commit" start="00:00:18.720" video="mainVideo" id=subtitle]]
+[[!template text="any experiment to test is this or" start="00:00:20.640" video="mainVideo" id=subtitle]]
+[[!template text="that choice would be better." start="00:00:23.279" video="mainVideo" id=subtitle]]
+[[!template text="Of course, some of you might" start="00:00:25.279" video="mainVideo" id=subtitle]]
+[[!template text="legitimately disagree with me." start="00:00:26.781" video="mainVideo" id=subtitle]]
+[[!template text="Let's start with a short review of a" start="00:00:30.480" video="mainVideo" id=subtitle]]
+[[!template text="modern text editor. I chose Nova editor" start="00:00:32.399" video="mainVideo" id=subtitle]]
+[[!template text="that is only available on OS X," start="00:00:35.160" video="mainVideo" id=subtitle]]
+[[!template text="but there are actually many other very" start="00:00:37.680" video="mainVideo" id=subtitle]]
+[[!template text="similar editors, such as, for example," start="00:00:39.920" video="mainVideo" id=subtitle]]
+[[!template text="Atom, Sublime Text, or Visual Studio." start="00:00:42.960" video="mainVideo" id=subtitle]]
+[[!template text="Now it's quite interesting because I think" start="00:00:45.680" video="mainVideo" id=subtitle]]
+[[!template text="it manages to gather everything what is" start="00:00:47.760" video="mainVideo" id=subtitle]]
+[[!template text="wrong in this single screenshot that is" start="00:00:50.239" video="mainVideo" id=subtitle]]
+[[!template text="also the teaser image on their website." start="00:00:53.120" video="mainVideo" id=subtitle]]
+[[!template text="So let me now review it according to my" start="00:00:55.920" video="mainVideo" id=subtitle]]
+[[!template text="personal biases and for further analysis" start="00:00:58.160" video="mainVideo" id=subtitle]]
+[[!template text="I can only recommend to attend" start="00:01:01.039" video="mainVideo" id=subtitle]]
+[[!template text="David Wilson's talks tomorrow." start="00:01:02.667" video="mainVideo" id=subtitle]]
+[[!template text="The most (inaudible) thing that really" start="00:01:05.680" video="mainVideo" id=subtitle]]
+[[!template text="bothers me is the actual area dedicated" start="00:01:07.360" video="mainVideo" id=subtitle]]
+[[!template text="to the editing. When you measure" start="00:01:11.583" video="mainVideo" id=subtitle]]
+[[!template text="this editing area as I did on the" start="00:01:13.504" video="mainVideo" id=subtitle]]
+[[!template text="screenshot, you'll find an impressive 35%," start="00:01:15.553" video="mainVideo" id=subtitle]]
+[[!template text="which is ridiculously small" start="00:01:19.112" video="mainVideo" id=subtitle]]
+[[!template text="compared to the side of the window." start="00:01:22.316" video="mainVideo" id=subtitle]]
+[[!template text="This means that two-thirds of the window" start="00:01:24.240" video="mainVideo" id=subtitle]]
+[[!template text="area is dedicated to peripheral information" start="00:01:26.320" video="mainVideo" id=subtitle]]
+[[!template text="that you don't look so often" start="00:01:30.079" video="mainVideo" id=subtitle]]
+[[!template text="when writing code or prose." start="00:01:32.079" video="mainVideo" id=subtitle]]
+[[!template text="This results in the main editing area to" start="00:01:34.159" video="mainVideo" id=subtitle]]
+[[!template text="be reduced to one third even if we tend" start="00:01:36.560" video="mainVideo" id=subtitle]]
+[[!template text="to have larger and larger monitors, I think" start="00:01:39.119" video="mainVideo" id=subtitle]]
+[[!template text="this is wrong to lost so much of space." start="00:01:42.040" video="mainVideo" id=subtitle]]
+[[!template text="If we now look closer at this peripheral" start="00:01:45.600" video="mainVideo" id=subtitle]]
+[[!template text="information, we can immediately see that" start="00:01:47.759" video="mainVideo" id=subtitle]]
+[[!template text="there is a lot of redundancy." start="00:01:49.920" video="mainVideo" id=subtitle]]
+[[!template text="For example, on the screenshot," start="00:01:52.079" video="mainVideo" id=subtitle]]
+[[!template text="I highlighted the information related" start="00:01:53.617" video="mainVideo" id=subtitle]]
+[[!template text="to the file name being edited." start="00:01:55.709" video="mainVideo" id=subtitle]]
+[[!template text="Unless I missed, some this file name" start="00:01:57.759" video="mainVideo" id=subtitle]]
+[[!template text="is displayed four times." start="00:02:00.640" video="mainVideo" id=subtitle]]
+[[!template text="This is way too much even if it" start="00:02:02.320" video="mainVideo" id=subtitle]]
+[[!template text="displayed for different reasons" start="00:02:04.399" video="mainVideo" id=subtitle]]
+[[!template text="in different contexts, but still I think" start="00:02:06.320" video="mainVideo" id=subtitle]]
+[[!template text="you have a design problem if you need to" start="00:02:08.959" video="mainVideo" id=subtitle]]
+[[!template text="repeat an information up to four times." start="00:02:10.720" video="mainVideo" id=subtitle]]
+[[!template text="If we now look at colors," start="00:02:14.560" video="mainVideo" id=subtitle]]
+[[!template text="you can count 15 different colors," start="00:02:15.947" video="mainVideo" id=subtitle]]
+[[!template text="such that it is impossible to guess" start="00:02:18.160" video="mainVideo" id=subtitle]]
+[[!template text="which color indicates what." start="00:02:20.560" video="mainVideo" id=subtitle]]
+[[!template text="Such colorization based on syntax is" start="00:02:22.959" video="mainVideo" id=subtitle]]
+[[!template text="actually quite widespread in code editors" start="00:02:25.440" video="mainVideo" id=subtitle]]
+[[!template text="including Emacs, unfortunately." start="00:02:28.720" video="mainVideo" id=subtitle]]
+[[!template text="The problem is that we still don't know" start="00:02:30.959" video="mainVideo" id=subtitle]]
+[[!template text="whether it helps or not." start="00:02:32.640" video="mainVideo" id=subtitle]]
+[[!template text="Some studies say yes, some others say no," start="00:02:34.319" video="mainVideo" id=subtitle]]
+[[!template text="and in the end the conclusion" start="00:02:36.780" video="mainVideo" id=subtitle]]
+[[!template text="is not yet settled." start="00:02:38.239" video="mainVideo" id=subtitle]]
+[[!template text="Furthermore, there is another problem" start="00:02:40.080" video="mainVideo" id=subtitle]]
+[[!template text="because there is no scientific method" start="00:02:41.840" video="mainVideo" id=subtitle]]
+[[!template text="on how to enforce colorization." start="00:02:43.663" video="mainVideo" id=subtitle]]
+[[!template text="Should it be based on syntax, or semantic," start="00:02:46.080" video="mainVideo" id=subtitle]]
+[[!template text="or context, or something else?" start="00:02:48.800" video="mainVideo" id=subtitle]]
+[[!template text="Developers are actually pretty free to do" start="00:02:51.519" video="mainVideo" id=subtitle]]
+[[!template text="whatever they want, a lot of them will" start="00:02:53.599" video="mainVideo" id=subtitle]]
+[[!template text="use syntax based colorization because it" start="00:02:56.400" video="mainVideo" id=subtitle]]
+[[!template text="is the most simple to write." start="00:02:58.879" video="mainVideo" id=subtitle]]
+[[!template text="In the end, most of them achieve a" start="00:03:01.280" video="mainVideo" id=subtitle]]
+[[!template text="Christmas tree effect." start="00:03:03.280" video="mainVideo" id=subtitle]]
+[[!template text="We know however, how to use colors" start="00:03:06.080" video="mainVideo" id=subtitle]]
+[[!template text="to drag attention to a specific position" start="00:03:08.189" video="mainVideo" id=subtitle]]
+[[!template text="as it is shown on the screenshot." start="00:03:10.560" video="mainVideo" id=subtitle]]
+[[!template text="This is called the pop-out effect," start="00:03:13.920" video="mainVideo" id=subtitle]]
+[[!template text="which is quite well known in neuroscience." start="00:03:15.760" video="mainVideo" id=subtitle]]
+[[!template text="Here, the media keyword has been" start="00:03:18.080" video="mainVideo" id=subtitle]]
+[[!template text="made very salient just by setting" start="00:03:20.000" video="mainVideo" id=subtitle]]
+[[!template text="the color in red while all other" start="00:03:23.120" video="mainVideo" id=subtitle]]
+[[!template text="elements are desaturated." start="00:03:25.760" video="mainVideo" id=subtitle]]
+[[!template text="It literally pops out from the screen" start="00:03:28.080" video="mainVideo" id=subtitle]]
+[[!template text="and point attention toward it." start="00:03:30.480" video="mainVideo" id=subtitle]]
+[[!template text="Finally, if we look at the overall" start="00:03:33.680" video="mainVideo" id=subtitle]]
+[[!template text="structure of the Nova editor," start="00:03:35.360" video="mainVideo" id=subtitle]]
+[[!template text="we can characterize structural elements" start="00:03:36.879" video="mainVideo" id=subtitle]]
+[[!template text="that are also present in a large number" start="00:03:39.353" video="mainVideo" id=subtitle]]
+[[!template text="of modern editors namely," start="00:03:41.840" video="mainVideo" id=subtitle]]
+[[!template text="a file browser, a gutter, a mini map," start="00:03:44.029" video="mainVideo" id=subtitle]]
+[[!template text="a tab bar, a toolbar," start="00:03:46.400" video="mainVideo" id=subtitle]]
+[[!template text="and some versioning tools." start="00:03:47.844" video="mainVideo" id=subtitle]]
+[[!template text="I think this is too much information," start="00:03:49.920" video="mainVideo" id=subtitle]]
+[[!template text="and can lead to cognitive overload" start="00:03:52.477" video="mainVideo" id=subtitle]]
+[[!template text="such that you end up to not pay attention" start="00:03:54.879" video="mainVideo" id=subtitle]]
+[[!template text="to important information." start="00:03:57.725" video="mainVideo" id=subtitle]]
+[[!template text="So definitely more is not always better," start="00:03:59.599" video="mainVideo" id=subtitle]]
+[[!template text="and to paraphrase Edward Tufte in his book" start="00:04:02.720" video="mainVideo" id=subtitle]]
+[[!template text="The Visual Display of" start="00:04:05.280" video="mainVideo" id=subtitle]]
+[[!template text="Quantitative Information," start="00:04:06.780" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Above all else show the data.&quot;" start="00:04:08.720" video="mainVideo" id=subtitle]]
+[[!template text="This is a reason that led me to" start="00:04:12.560" video="mainVideo" id=subtitle]]
+[[!template text="experiment alternative design," start="00:04:14.640" video="mainVideo" id=subtitle]]
+[[!template text="and of course, to do that with" start="00:04:16.720" video="mainVideo" id=subtitle]]
+[[!template text="the total freedom I didn't have" start="00:04:18.079" video="mainVideo" id=subtitle]]
+[[!template text="much choice but to use and hack Emacs." start="00:04:19.840" video="mainVideo" id=subtitle]]
+[[!template text="My first iteration was called Elegant Emacs," start="00:04:24.080" video="mainVideo" id=subtitle]]
+[[!template text="and I try to enforce a few principles" start="00:04:27.001" video="mainVideo" id=subtitle]]
+[[!template text="that I will detail into the next slide." start="00:04:29.271" video="mainVideo" id=subtitle]]
+[[!template text="But roughly, my idea was to" start="00:04:31.759" video="mainVideo" id=subtitle]]
+[[!template text="enforce a radically different design" start="00:04:33.919" video="mainVideo" id=subtitle]]
+[[!template text="by simply removing as much" start="00:04:35.857" video="mainVideo" id=subtitle]]
+[[!template text="information as I could." start="00:04:38.320" video="mainVideo" id=subtitle]]
+[[!template text="Even so, vanilla Emacs is" start="00:04:40.080" video="mainVideo" id=subtitle]]
+[[!template text="already quite simple." start="00:04:42.240" video="mainVideo" id=subtitle]]
+[[!template text="You can see the result on the screen," start="00:04:44.000" video="mainVideo" id=subtitle]]
+[[!template text="and I'm practically happy with the third" start="00:04:45.759" video="mainVideo" id=subtitle]]
+[[!template text="screenshot that mimics the PDF layout of" start="00:04:47.759" video="mainVideo" id=subtitle]]
+[[!template text="a scientific article by Stefan Monnier" start="00:04:50.240" video="mainVideo" id=subtitle]]
+[[!template text="and Michael Sperber but rather" start="00:04:53.120" video="mainVideo" id=subtitle]]
+[[!template text="fully inside Emacs." start="00:04:55.360" video="mainVideo" id=subtitle]]
+[[!template text="The second iteration is called NANO Emacs," start="00:04:58.160" video="mainVideo" id=subtitle]]
+[[!template text="and it is a version I try to maintain" start="00:05:01.080" video="mainVideo" id=subtitle]]
+[[!template text="with a set of standalone packages" start="00:05:03.680" video="mainVideo" id=subtitle]]
+[[!template text="that you can test individually." start="00:05:05.592" video="mainVideo" id=subtitle]]
+[[!template text="It is based on a set of" start="00:05:07.759" video="mainVideo" id=subtitle]]
+[[!template text="a few principles, namely" start="00:05:09.271" video="mainVideo" id=subtitle]]
+[[!template text="large margins, reduced number of faces," start="00:05:11.919" video="mainVideo" id=subtitle]]
+[[!template text="a simplified and contextual header line," start="00:05:14.677" video="mainVideo" id=subtitle]]
+[[!template text="and a default aspect ratio that" start="00:05:17.360" video="mainVideo" id=subtitle]]
+[[!template text="mimics the A4 ISO format." start="00:05:19.280" video="mainVideo" id=subtitle]]
+[[!template text="I've been using this layout for a" start="00:05:21.759" video="mainVideo" id=subtitle]]
+[[!template text="year and so far I'm quite happy with it." start="00:05:24.240" video="mainVideo" id=subtitle]]
+[[!template text="I know this is quite an opinionated" start="00:05:26.720" video="mainVideo" id=subtitle]]
+[[!template text="design and some of you may totally" start="00:05:29.440" video="mainVideo" id=subtitle]]
+[[!template text="disagree with me." start="00:05:31.680" video="mainVideo" id=subtitle]]
+[[!template text="Lately I've been experimenting" start="00:05:34.240" video="mainVideo" id=subtitle]]
+[[!template text="with some special modes where" start="00:05:36.630" video="mainVideo" id=subtitle]]
+[[!template text="the header line is made even simpler," start="00:05:38.682" video="mainVideo" id=subtitle]]
+[[!template text="this is the case for org-agenda," start="00:05:41.919" video="mainVideo" id=subtitle]]
+[[!template text="mu4e, deft, and elfeed." start="00:05:44.080" video="mainVideo" id=subtitle]]
+[[!template text="This worked reasonably well" start="00:05:46.720" video="mainVideo" id=subtitle]]
+[[!template text="because these modes are search based," start="00:05:48.560" video="mainVideo" id=subtitle]]
+[[!template text="and it was easy to unify their design." start="00:05:50.952" video="mainVideo" id=subtitle]]
+[[!template text="I've also integrated some dynamic tags" start="00:05:54.720" video="mainVideo" id=subtitle]]
+[[!template text="and icon in my agenda using svg-lib," start="00:05:56.960" video="mainVideo" id=subtitle]]
+[[!template text="which is available on ELPA." start="00:06:00.484" video="mainVideo" id=subtitle]]
+[[!template text="And for example, you can see the" start="00:06:02.400" video="mainVideo" id=subtitle]]
+[[!template text="pie progress that help to show" start="00:06:04.960" video="mainVideo" id=subtitle]]
+[[!template text="some incoming deadlines." start="00:06:08.560" video="mainVideo" id=subtitle]]
+[[!template text="There are still ongoing development" start="00:06:11.440" video="mainVideo" id=subtitle]]
+[[!template text="to develop new packages to give" start="00:06:13.261" video="mainVideo" id=subtitle]]
+[[!template text="a unified look and feel." start="00:06:15.120" video="mainVideo" id=subtitle]]
+[[!template text="I got a lot of feedback from" start="00:06:17.280" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs community," start="00:06:18.792" video="mainVideo" id=subtitle]]
+[[!template text="mostly in Reddit and GitHub," start="00:06:20.768" video="mainVideo" id=subtitle]]
+[[!template text="and I would like to thank them here" start="00:06:22.288" video="mainVideo" id=subtitle]]
+[[!template text="because this is incredibly useful." start="00:06:24.319" video="mainVideo" id=subtitle]]
+[[!template text="If you want to follow or support my work," start="00:06:26.880" video="mainVideo" id=subtitle]]
+[[!template text="best place is probably GitHub." start="00:06:29.039" video="mainVideo" id=subtitle]]
+[[!template text="Thank you for your attention." start="00:06:31.600" video="mainVideo" id=subtitle]]
+[[!template text="I will be happy to answer" start="00:06:33.099" video="mainVideo" id=subtitle]]
+[[!template text="any questions you may have." start="00:06:34.479" video="mainVideo" id=subtitle]]
+[[!template text="captions by bhavin192 (Bhavin Gandhi)" start="00:06:36.874" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/dev-update.md b/2021/captions/dev-update.md
new file mode 100644
index 00000000..f2283b76
--- /dev/null
+++ b/2021/captions/dev-update.md
@@ -0,0 +1,244 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello, my name is John Wiegley." start="00:00:00.320" video="mainVideo" id=subtitle]]
+[[!template text="I'm a past co-maintainer of Emacs." start="00:00:02.200" video="mainVideo" id=subtitle]]
+[[!template text="Nowadays, all of the work" start="00:00:05.040" video="mainVideo" id=subtitle]]
+[[!template text="and mailing list traffic" start="00:00:06.799" video="mainVideo" id=subtitle]]
+[[!template text="is handled by Eli Zaretskii" start="00:00:08.160" video="mainVideo" id=subtitle]]
+[[!template text="and Lars Ingebrigtsen." start="00:00:09.599" video="mainVideo" id=subtitle]]
+[[!template text="I just wanted to give you an update" start="00:00:12.559" video="mainVideo" id=subtitle]]
+[[!template text="of what has been happening" start="00:00:14.320" video="mainVideo" id=subtitle]]
+[[!template text="and what is soon to come" start="00:00:15.360" video="mainVideo" id=subtitle]]
+[[!template text="in Emacs development." start="00:00:16.560" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I spoke to Eli" start="00:00:18.560" video="mainVideo" id=subtitle]]
+[[!template text="and he gave me the lowdown" start="00:00:19.760" video="mainVideo" id=subtitle]]
+[[!template text="on Emacs 28, which is the next" start="00:00:20.880" video="mainVideo" id=subtitle]]
+[[!template text="big release to come up yet." start="00:00:23.359" video="mainVideo" id=subtitle]]
+[[!template text="He says that we hope to" start="00:00:25.840" video="mainVideo" id=subtitle]]
+[[!template text="release this soon." start="00:00:27.039" video="mainVideo" id=subtitle]]
+[[!template text="Pre-testing has not yet started," start="00:00:28.160" video="mainVideo" id=subtitle]]
+[[!template text="but maybe looking at" start="00:00:30.080" video="mainVideo" id=subtitle]]
+[[!template text="the first quarter of next year." start="00:00:31.519" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The biggest feature coming in Emacs 28" start="00:00:33.600" video="mainVideo" id=subtitle]]
+[[!template text="is going to be native compilation," start="00:00:35.840" video="mainVideo" id=subtitle]]
+[[!template text="and this will make some Emacs code" start="00:00:39.040" video="mainVideo" id=subtitle]]
+[[!template text="two to four times as fast," start="00:00:41.280" video="mainVideo" id=subtitle]]
+[[!template text="depending on what kind of Lisp" start="00:00:43.120" video="mainVideo" id=subtitle]]
+[[!template text="you're running" start="00:00:44.640" video="mainVideo" id=subtitle]]
+[[!template text="and how much of your Lisp code" start="00:00:45.360" video="mainVideo" id=subtitle]]
+[[!template text="is just Lisp," start="00:00:47.840" video="mainVideo" id=subtitle]]
+[[!template text="or makes calls to primitive functions." start="00:00:48.800" video="mainVideo" id=subtitle]]
+[[!template text="There were previous JIT attempts." start="00:00:50.879" video="mainVideo" id=subtitle]]
+[[!template text="Some of them still live on" start="00:00:53.680" video="mainVideo" id=subtitle]]
+[[!template text="in development branches," start="00:00:54.879" video="mainVideo" id=subtitle]]
+[[!template text="but they were found" start="00:00:56.559" video="mainVideo" id=subtitle]]
+[[!template text="to not speed things up too much." start="00:00:57.280" video="mainVideo" id=subtitle]]
+[[!template text="The version coming in Emacs 28" start="00:01:00.960" video="mainVideo" id=subtitle]]
+[[!template text="has much better results" start="00:01:03.280" video="mainVideo" id=subtitle]]
+[[!template text="than these past attempts," start="00:01:04.479" video="mainVideo" id=subtitle]]
+[[!template text="but it should be noted" start="00:01:05.760" video="mainVideo" id=subtitle]]
+[[!template text="that it has some side effects." start="00:01:06.960" video="mainVideo" id=subtitle]]
+[[!template text="One is that natively-compiled files" start="00:01:09.439" video="mainVideo" id=subtitle]]
+[[!template text="are going to be system-dependent," start="00:01:11.439" video="mainVideo" id=subtitle]]
+[[!template text="so they can't be included" start="00:01:13.680" video="mainVideo" id=subtitle]]
+[[!template text="in any distributions" start="00:01:14.960" video="mainVideo" id=subtitle]]
+[[!template text="the way we do now with .elc files," start="00:01:16.000" video="mainVideo" id=subtitle]]
+[[!template text="since those run on any platform." start="00:01:18.080" video="mainVideo" id=subtitle]]
+[[!template text="This means that you will need to" start="00:01:20.479" video="mainVideo" id=subtitle]]
+[[!template text="compile those files" start="00:01:22.240" video="mainVideo" id=subtitle]]
+[[!template text="for your own machine, sometimes," start="00:01:23.600" video="mainVideo" id=subtitle]]
+[[!template text="depending on how" start="00:01:26.479" video="mainVideo" id=subtitle]]
+[[!template text="the compilation process goes." start="00:01:27.360" video="mainVideo" id=subtitle]]
+[[!template text="It could vary by processor." start="00:01:28.799" video="mainVideo" id=subtitle]]
+[[!template text="And it requires you also" start="00:01:31.520" video="mainVideo" id=subtitle]]
+[[!template text="to have the right" start="00:01:32.720" video="mainVideo" id=subtitle]]
+[[!template text="compilation environment." start="00:01:33.520" video="mainVideo" id=subtitle]]
+[[!template text="This means that you may need tools" start="00:01:35.600" video="mainVideo" id=subtitle]]
+[[!template text="from the gcc tool chain" start="00:01:37.200" video="mainVideo" id=subtitle]]
+[[!template text="that aren't installed" start="00:01:38.560" video="mainVideo" id=subtitle]]
+[[!template text="as part of the default," start="00:01:39.520" video="mainVideo" id=subtitle]]
+[[!template text="so you will maybe have to do some work" start="00:01:40.799" video="mainVideo" id=subtitle]]
+[[!template text="to set up the right" start="00:01:42.640" video="mainVideo" id=subtitle]]
+[[!template text="compilation environment" start="00:01:43.680" video="mainVideo" id=subtitle]]
+[[!template text="for your platform." start="00:01:44.720" video="mainVideo" id=subtitle]]
+[[!template text="Natively-compiled files" start="00:01:46.560" video="mainVideo" id=subtitle]]
+[[!template text="are also kept in a separate directory." start="00:01:47.680" video="mainVideo" id=subtitle]]
+[[!template text="There are some issues" start="00:01:50.799" video="mainVideo" id=subtitle]]
+[[!template text="having to do with recompilation too," start="00:01:52.079" video="mainVideo" id=subtitle]]
+[[!template text="so there are certain changes which," start="00:01:54.159" video="mainVideo" id=subtitle]]
+[[!template text="if made to the Emacs source code" start="00:01:55.920" video="mainVideo" id=subtitle]]
+[[!template text="between releases," start="00:01:57.360" video="mainVideo" id=subtitle]]
+[[!template text="may require you to recompile" start="00:01:58.560" video="mainVideo" id=subtitle]]
+[[!template text="all of the natively-compiled files" start="00:02:00.159" video="mainVideo" id=subtitle]]
+[[!template text="that you had compiled previously." start="00:02:02.000" video="mainVideo" id=subtitle]]
+[[!template text="Also, the file names of compiled files" start="00:02:04.479" video="mainVideo" id=subtitle]]
+[[!template text="that get installed" start="00:02:06.880" video="mainVideo" id=subtitle]]
+[[!template text="have hashes on them" start="00:02:07.680" video="mainVideo" id=subtitle]]
+[[!template text="depending on the Emacs" start="00:02:08.800" video="mainVideo" id=subtitle]]
+[[!template text="that they were built against," start="00:02:10.319" video="mainVideo" id=subtitle]]
+[[!template text="so Emacs should be able to detect" start="00:02:11.920" video="mainVideo" id=subtitle]]
+[[!template text="when recompilation is necessary," start="00:02:14.000" video="mainVideo" id=subtitle]]
+[[!template text="but it may be difficult" start="00:02:16.239" video="mainVideo" id=subtitle]]
+[[!template text="for distributions who want to know" start="00:02:17.840" video="mainVideo" id=subtitle]]
+[[!template text="what all of the build files" start="00:02:19.599" video="mainVideo" id=subtitle]]
+[[!template text="are going to be in advance" start="00:02:20.800" video="mainVideo" id=subtitle]]
+[[!template text="in order to prepare" start="00:02:22.160" video="mainVideo" id=subtitle]]
+[[!template text="a binary distribution" start="00:02:23.840" video="mainVideo" id=subtitle]]
+[[!template text="for that for that platform." start="00:02:25.360" video="mainVideo" id=subtitle]]
+[[!template text="So these are all little wrinkles" start="00:02:27.280" video="mainVideo" id=subtitle]]
+[[!template text="that we're going to discover" start="00:02:28.800" video="mainVideo" id=subtitle]]
+[[!template text="and have to work out" start="00:02:29.840" video="mainVideo" id=subtitle]]
+[[!template text="as this functionality comes out" start="00:02:30.800" video="mainVideo" id=subtitle]]
+[[!template text="and starts getting used" start="00:02:32.560" video="mainVideo" id=subtitle]]
+[[!template text="in lots of different distributions." start="00:02:33.599" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Another feature is that Cairo is" start="00:02:36.400" video="mainVideo" id=subtitle]]
+[[!template text="now being built with by default," start="00:02:38.560" video="mainVideo" id=subtitle]]
+[[!template text="and this is one step further toward" start="00:02:40.319" video="mainVideo" id=subtitle]]
+[[!template text="better support for emojis." start="00:02:42.560" video="mainVideo" id=subtitle]]
+[[!template text="If you build with Cairo," start="00:02:44.319" video="mainVideo" id=subtitle]]
+[[!template text="you will get all of the emoji sequences" start="00:02:45.519" video="mainVideo" id=subtitle]]
+[[!template text="defined by the latest Unicode," start="00:02:47.599" video="mainVideo" id=subtitle]]
+[[!template text="and in full color," start="00:02:49.360" video="mainVideo" id=subtitle]]
+[[!template text="the exact same as on your smartphone ," start="00:02:50.400" video="mainVideo" id=subtitle]]
+[[!template text="and it works on macOS as well." start="00:02:52.560" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There's a new mode," start="00:02:55.760" video="mainVideo" id=subtitle]]
+[[!template text="but it is off by default," start="00:02:56.640" video="mainVideo" id=subtitle]]
+[[!template text="called context-menus mode," start="00:02:58.400" video="mainVideo" id=subtitle]]
+[[!template text="and this gives menus that appear" start="00:03:00.480" video="mainVideo" id=subtitle]]
+[[!template text="when you right-click" start="00:03:02.800" video="mainVideo" id=subtitle]]
+[[!template text="somewhere in a buffer," start="00:03:03.599" video="mainVideo" id=subtitle]]
+[[!template text="but now will make it easier" start="00:03:04.959" video="mainVideo" id=subtitle]]
+[[!template text="for other modes to define" start="00:03:06.480" video="mainVideo" id=subtitle]]
+[[!template text="what those context menus" start="00:03:08.080" video="mainVideo" id=subtitle]]
+[[!template text="should look like," start="00:03:09.440" video="mainVideo" id=subtitle]]
+[[!template text="so that's sort of making that support..." start="00:03:10.080" video="mainVideo" id=subtitle]]
+[[!template text="having it less custom" start="00:03:13.840" video="mainVideo" id=subtitle]]
+[[!template text="in each module that implements" start="00:03:16.080" video="mainVideo" id=subtitle]]
+[[!template text="that type of behavior." start="00:03:17.920" video="mainVideo" id=subtitle]]
+[[!template text="They can now do it through this context" start="00:03:19.360" video="mainVideo" id=subtitle]]
+[[!template text="and then use the facility." start="00:03:20.879" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Tab-bar and tab-line have received" start="00:03:22.959" video="mainVideo" id=subtitle]]
+[[!template text="many enhancements." start="00:03:25.120" video="mainVideo" id=subtitle]]
+[[!template text="So there's new commands, new variables," start="00:03:26.799" video="mainVideo" id=subtitle]]
+[[!template text="there's quite a large number of changes," start="00:03:28.560" video="mainVideo" id=subtitle]]
+[[!template text="so if you like those modes," start="00:03:30.080" video="mainVideo" id=subtitle]]
+[[!template text="if you use them," start="00:03:31.440" video="mainVideo" id=subtitle]]
+[[!template text="then you should be happy" start="00:03:32.560" video="mainVideo" id=subtitle]]
+[[!template text="with what's coming." start="00:03:33.440" video="mainVideo" id=subtitle]]
+[[!template text="There is a command..." start="00:03:35.040" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now, a command can be marked" start="00:03:37.840" video="mainVideo" id=subtitle]]
+[[!template text="as being specific to a mode," start="00:03:40.720" video="mainVideo" id=subtitle]]
+[[!template text="so that if you're not in that mode," start="00:03:42.799" video="mainVideo" id=subtitle]]
+[[!template text="then, when you press M-x," start="00:03:44.560" video="mainVideo" id=subtitle]]
+[[!template text="it won't appear" start="00:03:46.000" video="mainVideo" id=subtitle]]
+[[!template text="in the tab completion list." start="00:03:46.959" video="mainVideo" id=subtitle]]
+[[!template text="Right now, M-x is a full population" start="00:03:48.319" video="mainVideo" id=subtitle]]
+[[!template text="of every interactive command" start="00:03:50.799" video="mainVideo" id=subtitle]]
+[[!template text="known to Emacs," start="00:03:52.560" video="mainVideo" id=subtitle]]
+[[!template text="but in many cases," start="00:03:53.920" video="mainVideo" id=subtitle]]
+[[!template text="unless you're in a text-mode buffer" start="00:03:55.120" video="mainVideo" id=subtitle]]
+[[!template text="or a latex-mode buffer," start="00:03:57.360" video="mainVideo" id=subtitle]]
+[[!template text="or some programming language mode buffer," start="00:03:58.560" video="mainVideo" id=subtitle]]
+[[!template text="a lot of the commands" start="00:04:00.799" video="mainVideo" id=subtitle]]
+[[!template text="that might be presented to you today" start="00:04:01.840" video="mainVideo" id=subtitle]]
+[[!template text="are irrelevant to that buffer" start="00:04:04.480" video="mainVideo" id=subtitle]]
+[[!template text="that you're in. So commands can now" start="00:04:06.239" video="mainVideo" id=subtitle]]
+[[!template text="specify in their interactive declaration" start="00:04:08.400" video="mainVideo" id=subtitle]]
+[[!template text="which mode they're specific to," start="00:04:11.120" video="mainVideo" id=subtitle]]
+[[!template text="and in that case, they will only appear" start="00:04:12.640" video="mainVideo" id=subtitle]]
+[[!template text="in the completion list for that mode." start="00:04:14.319" video="mainVideo" id=subtitle]]
+[[!template text="In fact, only be available" start="00:04:16.079" video="mainVideo" id=subtitle]]
+[[!template text="in that mode to execute." start="00:04:17.840" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There are going to be" start="00:04:20.320" video="mainVideo" id=subtitle]]
+[[!template text="transient input methods," start="00:04:21.680" video="mainVideo" id=subtitle]]
+[[!template text="and what this means is that right now," start="00:04:23.759" video="mainVideo" id=subtitle]]
+[[!template text="with Emacs, you can hit a key sequence" start="00:04:25.440" video="mainVideo" id=subtitle]]
+[[!template text="to change your input method" start="00:04:27.520" video="mainVideo" id=subtitle]]
+[[!template text="to, say, latin1 or to Arabic or Hebrew" start="00:04:29.520" video="mainVideo" id=subtitle]]
+[[!template text="or some other language," start="00:04:32.240" video="mainVideo" id=subtitle]]
+[[!template text="so that you can start entering text" start="00:04:33.040" video="mainVideo" id=subtitle]]
+[[!template text="using that input mode," start="00:04:35.199" video="mainVideo" id=subtitle]]
+[[!template text="but transient input methods" start="00:04:38.080" video="mainVideo" id=subtitle]]
+[[!template text="will allow you" start="00:04:39.759" video="mainVideo" id=subtitle]]
+[[!template text="to switch to an input mode temporarily." start="00:04:40.400" video="mainVideo" id=subtitle]]
+[[!template text="So if you're mostly writing" start="00:04:42.960" video="mainVideo" id=subtitle]]
+[[!template text="in English text, but you want to insert" start="00:04:44.720" video="mainVideo" id=subtitle]]
+[[!template text="one Greek letter, you don't have to" start="00:04:46.720" video="mainVideo" id=subtitle]]
+[[!template text="switch to an input mode" start="00:04:48.720" video="mainVideo" id=subtitle]]
+[[!template text="that has Latin and Greek letters." start="00:04:49.840" video="mainVideo" id=subtitle]]
+[[!template text="You can just switch over" start="00:04:52.080" video="mainVideo" id=subtitle]]
+[[!template text="to a Greek input mode," start="00:04:53.280" video="mainVideo" id=subtitle]]
+[[!template text="momentarily enter in the Greek letter," start="00:04:54.560" video="mainVideo" id=subtitle]]
+[[!template text="and then come back" start="00:04:56.639" video="mainVideo" id=subtitle]]
+[[!template text="to your default input method." start="00:04:57.600" video="mainVideo" id=subtitle]]
+[[!template new="1" text="show-paren-mode will be enabled" start="00:05:00.880" video="mainVideo" id=subtitle]]
+[[!template text="by default in Emacs 28," start="00:05:02.880" video="mainVideo" id=subtitle]]
+[[!template text="so that's the highlighting of parens" start="00:05:04.880" video="mainVideo" id=subtitle]]
+[[!template text="whenever your cursor is on or near" start="00:05:06.720" video="mainVideo" id=subtitle]]
+[[!template text="a closing paren or an opening paren," start="00:05:11.039" video="mainVideo" id=subtitle]]
+[[!template text="for example." start="00:05:12.800" video="mainVideo" id=subtitle]]
+[[!template new="1" text="We're also going to have a NonGNU ELPA," start="00:05:14.560" video="mainVideo" id=subtitle]]
+[[!template text="so there will be a ELPA repository" start="00:05:18.080" video="mainVideo" id=subtitle]]
+[[!template text="just like the ELPA we have today," start="00:05:20.639" video="mainVideo" id=subtitle]]
+[[!template text="except it will have packages in it" start="00:05:22.160" video="mainVideo" id=subtitle]]
+[[!template text="that have not gone through" start="00:05:24.400" video="mainVideo" id=subtitle]]
+[[!template text="the same level of" start="00:05:25.840" video="mainVideo" id=subtitle]]
+[[!template text="copyright assignment requirements" start="00:05:26.880" video="mainVideo" id=subtitle]]
+[[!template text="as the GNU ELPA." start="00:05:28.560" video="mainVideo" id=subtitle]]
+[[!template text="So NonGNU ELPA will make it easier" start="00:05:29.919" video="mainVideo" id=subtitle]]
+[[!template text="for packages to get into a repository" start="00:05:31.919" video="mainVideo" id=subtitle]]
+[[!template text="that is managed by the package.el" start="00:05:34.560" video="mainVideo" id=subtitle]]
+[[!template text="that ships with Emacs." start="00:05:37.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There's going to be a repeat-mode" start="00:05:39.520" video="mainVideo" id=subtitle]]
+[[!template text="added to Emacs 28, repeat-mode.el." start="00:05:42.160" video="mainVideo" id=subtitle]]
+[[!template text="What this does is when you turn it on," start="00:05:45.039" video="mainVideo" id=subtitle]]
+[[!template text="when you enable repeat-mode," start="00:05:46.880" video="mainVideo" id=subtitle]]
+[[!template text="then certain commands" start="00:05:48.720" video="mainVideo" id=subtitle]]
+[[!template text="which are executed by keybindings" start="00:05:50.800" video="mainVideo" id=subtitle]]
+[[!template text="like C-x u for undo" start="00:05:53.120" video="mainVideo" id=subtitle]]
+[[!template text="will allow you to just" start="00:05:55.120" video="mainVideo" id=subtitle]]
+[[!template text="keep hitting that u, that final letter" start="00:05:56.160" video="mainVideo" id=subtitle]]
+[[!template text="you used for the command" start="00:05:58.240" video="mainVideo" id=subtitle]]
+[[!template text="to keep repeating that function." start="00:05:59.680" video="mainVideo" id=subtitle]]
+[[!template text="This works today already" start="00:06:01.600" video="mainVideo" id=subtitle]]
+[[!template text="for things like macro repetition, C-x e," start="00:06:03.440" video="mainVideo" id=subtitle]]
+[[!template text="where you can just keep hitting e" start="00:06:06.720" video="mainVideo" id=subtitle]]
+[[!template text="to repeat the macro" start="00:06:08.080" video="mainVideo" id=subtitle]]
+[[!template text="as many times as you like," start="00:06:08.960" video="mainVideo" id=subtitle]]
+[[!template text="but that was a custom feature" start="00:06:10.000" video="mainVideo" id=subtitle]]
+[[!template text="just for macros." start="00:06:11.360" video="mainVideo" id=subtitle]]
+[[!template text="This makes repeat mode accessible to" start="00:06:12.560" video="mainVideo" id=subtitle]]
+[[!template text="most commands." start="00:06:16.319" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The project.el package" start="00:06:18.400" video="mainVideo" id=subtitle]]
+[[!template text="has dozens of new commands," start="00:06:20.080" video="mainVideo" id=subtitle]]
+[[!template text="so check the documentation there" start="00:06:22.000" video="mainVideo" id=subtitle]]
+[[!template text="to find out what's going to be new" start="00:06:23.759" video="mainVideo" id=subtitle]]
+[[!template text="in project.el." start="00:06:25.039" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And there will be shorthands" start="00:06:26.720" video="mainVideo" id=subtitle]]
+[[!template text="for Lisp symbols" start="00:06:28.560" video="mainVideo" id=subtitle]]
+[[!template text="supported in the Lisp symbol reader." start="00:06:30.000" video="mainVideo" id=subtitle]]
+[[!template text="This means that for packages" start="00:06:32.400" video="mainVideo" id=subtitle]]
+[[!template text="like s and f that have a whole bunch" start="00:06:34.240" video="mainVideo" id=subtitle]]
+[[!template text="of really short named functions" start="00:06:36.800" video="mainVideo" id=subtitle]]
+[[!template text="that might pollute the namespace," start="00:06:38.479" video="mainVideo" id=subtitle]]
+[[!template text="those functions now can be" start="00:06:40.560" video="mainVideo" id=subtitle]]
+[[!template text="implemented behind a prefix" start="00:06:43.199" video="mainVideo" id=subtitle]]
+[[!template text="where the symbol reader can be taught" start="00:06:45.039" video="mainVideo" id=subtitle]]
+[[!template text="that there is a shorthand" start="00:06:47.520" video="mainVideo" id=subtitle]]
+[[!template text="for that prefix," start="00:06:48.639" video="mainVideo" id=subtitle]]
+[[!template text="and that way, it'll only apply" start="00:06:50.319" video="mainVideo" id=subtitle]]
+[[!template text="for the use of that package." start="00:06:51.680" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And then finally, work on Emacs 29" start="00:06:54.960" video="mainVideo" id=subtitle]]
+[[!template text="has just started." start="00:06:57.840" video="mainVideo" id=subtitle]]
+[[!template text="I don't have any details" start="00:06:59.280" video="mainVideo" id=subtitle]]
+[[!template text="to report to you there," start="00:07:00.400" video="mainVideo" id=subtitle]]
+[[!template text="just to say that now" start="00:07:01.440" video="mainVideo" id=subtitle]]
+[[!template text="the ship is moving on" start="00:07:02.880" video="mainVideo" id=subtitle]]
+[[!template text="to the next release after," start="00:07:04.000" video="mainVideo" id=subtitle]]
+[[!template text="and Emacs 28 has a release branch" start="00:07:05.360" video="mainVideo" id=subtitle]]
+[[!template text="and is getting cleaned up" start="00:07:07.599" video="mainVideo" id=subtitle]]
+[[!template text="and ready for release." start="00:07:08.720" video="mainVideo" id=subtitle]]
+[[!template text="And that is the technical summary" start="00:07:10.400" video="mainVideo" id=subtitle]]
+[[!template text="of what's new in Emacs." start="00:07:12.720" video="mainVideo" id=subtitle]]
+[[!template text="Thank you." start="00:07:14.000" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/eaf.md b/2021/captions/eaf.md
new file mode 100644
index 00000000..2e9a618c
--- /dev/null
+++ b/2021/captions/eaf.md
@@ -0,0 +1,188 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hi, my name is Matthew Zeng," start="00:00:03.040" video="mainVideo" id=subtitle]]
+[[!template text="aka MT or Mingde." start="00:00:05.206" video="mainVideo" id=subtitle]]
+[[!template text="I am one of the maintainers" start="00:00:14.286" video="mainVideo" id=subtitle]]
+[[!template text="I was also here last year during EmacsConf2020" start="00:00:18.566" video="mainVideo" id=subtitle]]
+[[!template text="and did a 20 minute presentation" start="00:00:22.606" video="mainVideo" id=subtitle]]
+[[!template text="as well as a small demo." start="00:00:26.606" video="mainVideo" id=subtitle]]
+[[!template text="A lot of things had changed since 2020," start="00:00:28.486" video="mainVideo" id=subtitle]]
+[[!template text="and that's why today I'm here to present:" start="00:00:31.966" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Application Framework, A 2021 Update." start="00:00:34.406" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So we all know Emacs," start="00:00:38.046" video="mainVideo" id=subtitle]]
+[[!template text="and we definitely know that" start="00:00:41.086" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is not just a text editor," start="00:00:42.326" video="mainVideo" id=subtitle]]
+[[!template text="but a text-centric work environment," start="00:00:44.486" video="mainVideo" id=subtitle]]
+[[!template text="We all want that, right?" start="00:00:53.126" video="mainVideo" id=subtitle]]
+[[!template text="Therefore the EAF project wants to" start="00:00:55.361" video="mainVideo" id=subtitle]]
+[[!template text="solve this problem while also" start="00:00:58.366" video="mainVideo" id=subtitle]]
+[[!template text="retaining the rich Emacs ecosystem" start="00:01:00.286" video="mainVideo" id=subtitle]]
+[[!template text="and its customizability and extensibility." start="00:01:02.806" video="mainVideo" id=subtitle]]
+[[!template text="The solution is to outsource the hard part" start="00:01:06.046" video="mainVideo" id=subtitle]]
+[[!template text="to Python and NodeJS" start="00:01:10.726" video="mainVideo" id=subtitle]]
+[[!template text="by bridging Elisp with them" start="00:01:12.486" video="mainVideo" id=subtitle]]
+[[!template text="so that Python and JavaScript" start="00:01:14.366" video="mainVideo" id=subtitle]]
+[[!template text="can do the hard work" start="00:01:16.126" video="mainVideo" id=subtitle]]
+[[!template text="and minimize the Elisp workload," start="00:01:17.926" video="mainVideo" id=subtitle]]
+[[!template text="Do note that Python and JavaScript" start="00:01:24.446" video="mainVideo" id=subtitle]]
+[[!template text="already have a very mature ecosystem" start="00:01:27.646" video="mainVideo" id=subtitle]]
+[[!template text="that provides a foundation" start="00:01:30.406" video="mainVideo" id=subtitle]]
+[[!template text="to Python and JavaScript ecosystems," start="00:01:38.006" video="mainVideo" id=subtitle]]
+[[!template text="modern multimedia apps too." start="00:01:42.286" video="mainVideo" id=subtitle]]
+[[!template text="As we're on a tight schedule today," start="00:01:44.366" video="mainVideo" id=subtitle]]
+[[!template text="I can't go into every detail" start="00:01:47.606" video="mainVideo" id=subtitle]]
+[[!template text="about how EAF achieves this." start="00:01:49.726" video="mainVideo" id=subtitle]]
+[[!template text="I did go through a lot of things" start="00:01:51.486" video="mainVideo" id=subtitle]]
+[[!template text="during last year's presentation," start="00:01:53.606" video="mainVideo" id=subtitle]]
+[[!template text="to check out that presentation," start="00:01:57.326" video="mainVideo" id=subtitle]]
+[[!template text="Today we're focusing on *what changed*." start="00:02:01.686" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now the first change" start="00:02:05.726" video="mainVideo" id=subtitle]]
+[[!template text="that you'll definitely notice" start="00:02:09.606" video="mainVideo" id=subtitle]]
+[[!template text="This logo uses gearwheels" start="00:02:12.686" video="mainVideo" id=subtitle]]
+[[!template text="to web and multimedia applications" start="00:02:18.486" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Since last year, EAF has replaced" start="00:02:23.286" video="mainVideo" id=subtitle]]
+[[!template text="the DBus communication technology" start="00:02:28.726" video="mainVideo" id=subtitle]]
+[[!template text="with the cross-platform EPC," start="00:02:30.886" video="mainVideo" id=subtitle]]
+[[!template text="This and some other changes" start="00:02:42.160" video="mainVideo" id=subtitle]]
+[[!template text="enable EAF to support Windows," start="00:02:43.760" video="mainVideo" id=subtitle]]
+[[!template text="Windows 10 and Windows Subsystem for Linux," start="00:02:46.080" video="mainVideo" id=subtitle]]
+[[!template text="as well as all distros that support" start="00:02:49.519" video="mainVideo" id=subtitle]]
+[[!template text="pacman, apt, dnf, pkg," start="00:02:51.840" video="mainVideo" id=subtitle]]
+[[!template text="zypper package installer commands," start="00:02:54.319" video="mainVideo" id=subtitle]]
+[[!template text="which includes Arch-based, Debian," start="00:02:56.959" video="mainVideo" id=subtitle]]
+[[!template text="or Ubuntu-based, Fedora, etc." start="00:02:59.840" video="mainVideo" id=subtitle]]
+[[!template text="However, do note that the maOS support" start="00:03:04.720" video="mainVideo" id=subtitle]]
+[[!template text="works with some known issues." start="00:03:08.239" video="mainVideo" id=subtitle]]
+[[!template text="Have a look if you want to try out." start="00:03:10.319" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Previously, EAF was able to make Elisp" start="00:03:15.360" video="mainVideo" id=subtitle]]
+[[!template text="communicate with Python, as well as" start="00:03:18.400" video="mainVideo" id=subtitle]]
+[[!template text="Python to communicate with JavaScript," start="00:03:20.720" video="mainVideo" id=subtitle]]
+[[!template text="meaning that Elisp can call" start="00:03:23.280" video="mainVideo" id=subtitle]]
+[[!template text="Python functions and vice versa," start="00:03:24.959" video="mainVideo" id=subtitle]]
+[[!template text="and Python can call JavaScript functions" start="00:03:27.280" video="mainVideo" id=subtitle]]
+[[!template text="and vice versa, but if you want Elisp" start="00:03:29.680" video="mainVideo" id=subtitle]]
+[[!template text="to communicate with JavaScript," start="00:03:32.560" video="mainVideo" id=subtitle]]
+[[!template text="you have to go through Python," start="00:03:34.720" video="mainVideo" id=subtitle]]
+[[!template text="which is rather troublesome." start="00:03:36.239" video="mainVideo" id=subtitle]]
+[[!template text="Now, thanks to the EPC," start="00:03:38.879" video="mainVideo" id=subtitle]]
+[[!template text="Elisp can communicate" start="00:03:41.120" video="mainVideo" id=subtitle]]
+[[!template text="with JavaScript directly" start="00:03:42.400" video="mainVideo" id=subtitle]]
+[[!template text="using =eval_js= function" start="00:03:43.840" video="mainVideo" id=subtitle]]
+[[!template text="and =eval_emacs_function=" start="00:03:45.519" video="mainVideo" id=subtitle]]
+[[!template text="in Elisp and Python respectively." start="00:03:47.040" video="mainVideo" id=subtitle]]
+[[!template text="This greatly simplifies the code" start="00:03:49.840" video="mainVideo" id=subtitle]]
+[[!template text="that will be needed" start="00:03:51.840" video="mainVideo" id=subtitle]]
+[[!template text="to write a web app in EAF." start="00:03:52.640" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Speaking of web applications," start="00:03:56.959" video="mainVideo" id=subtitle]]
+[[!template text="VueJS is a web framework" start="00:03:59.120" video="mainVideo" id=subtitle]]
+[[!template text="that's been gaining a lot of popularity" start="00:04:01.200" video="mainVideo" id=subtitle]]
+[[!template text="in recent years" start="00:04:03.840" video="mainVideo" id=subtitle]]
+[[!template text="for its simplicity and functionality." start="00:04:04.720" video="mainVideo" id=subtitle]]
+[[!template text="In the past, you were only able to write" start="00:04:08.959" video="mainVideo" id=subtitle]]
+[[!template text="simple JavaScript and HTML web apps" start="00:04:11.840" video="mainVideo" id=subtitle]]
+[[!template text="for EAF. It was quite some work" start="00:04:14.319" video="mainVideo" id=subtitle]]
+[[!template text="to create a full-featured web application." start="00:04:17.280" video="mainVideo" id=subtitle]]
+[[!template text="Now you can write new apps using EAF" start="00:04:20.880" video="mainVideo" id=subtitle]]
+[[!template text="that work seamlessly with Emacs and Elisp." start="00:04:23.360" video="mainVideo" id=subtitle]]
+[[!template text="There are a few existing EAF apps" start="00:04:27.919" video="mainVideo" id=subtitle]]
+[[!template text="written with Vue already" start="00:04:30.880" video="mainVideo" id=subtitle]]
+[[!template text="to demonstrate the possibilities" start="00:04:32.800" video="mainVideo" id=subtitle]]
+[[!template text="of Vue-based extensions in Emacs." start="00:04:34.639" video="mainVideo" id=subtitle]]
+[[!template text="The first one is the EAF File Manager," start="00:04:38.720" video="mainVideo" id=subtitle]]
+[[!template text="written by ManateeLazycat himself," start="00:04:41.520" video="mainVideo" id=subtitle]]
+[[!template text="as an alternative option to dired," start="00:04:44.160" video="mainVideo" id=subtitle]]
+[[!template text="as he found dired's performance" start="00:04:46.400" video="mainVideo" id=subtitle]]
+[[!template text="to lag considerably" start="00:04:47.919" video="mainVideo" id=subtitle]]
+[[!template text="when there are way too many files." start="00:04:49.280" video="mainVideo" id=subtitle]]
+[[!template text="It supports wdired and fd functionality," start="00:04:52.240" video="mainVideo" id=subtitle]]
+[[!template text="and let me demonstrate that to you." start="00:04:56.080" video="mainVideo" id=subtitle]]
+[[!template text="See? And this is the app." start="00:05:01.600" video="mainVideo" id=subtitle]]
+[[!template text="Go back here." start="00:05:06.160" video="mainVideo" id=subtitle]]
+[[!template text="Another one is the EAF RSS Reader," start="00:05:08.639" video="mainVideo" id=subtitle]]
+[[!template text="written by our Summer of Code 2021 student" start="00:05:12.240" video="mainVideo" id=subtitle]]
+[[!template text="ShaoChenHeng. It is a fast RSS reader" start="00:05:15.039" video="mainVideo" id=subtitle]]
+[[!template text="that uses the EAF browser for previews," start="00:05:18.240" video="mainVideo" id=subtitle]]
+[[!template text="and let me demo that to you as well." start="00:05:21.600" video="mainVideo" id=subtitle]]
+[[!template text="Pragmatic Emacs." start="00:05:32.479" video="mainVideo" id=subtitle]]
+[[!template text="And you can view every site" start="00:05:35.039" video="mainVideo" id=subtitle]]
+[[!template text="in the EAF Browser." start="00:05:37.199" video="mainVideo" id=subtitle]]
+[[!template new="1" text="To ease the process" start="00:05:45.360" video="mainVideo" id=subtitle]]
+[[!template text="of creating a new EAF application," start="00:05:46.880" video="mainVideo" id=subtitle]]
+[[!template text="we've separated the EAF core and its apps," start="00:05:49.840" video="mainVideo" id=subtitle]]
+[[!template text="so that EAF apps now have" start="00:05:52.880" video="mainVideo" id=subtitle]]
+[[!template text="their individual repositories." start="00:05:54.479" video="mainVideo" id=subtitle]]
+[[!template text="You can find them under" start="00:05:56.800" video="mainVideo" id=subtitle]]
+[[!template text="the emacs-eaf GitHub organization." start="00:05:58.000" video="mainVideo" id=subtitle]]
+[[!template text="Because of the number of EAF apps" start="00:06:02.000" video="mainVideo" id=subtitle]]
+[[!template text="and their dependencies" start="00:06:04.560" video="mainVideo" id=subtitle]]
+[[!template text="that vary from system to system," start="00:06:05.840" video="mainVideo" id=subtitle]]
+[[!template text="we've also introduced a new" start="00:06:08.319" video="mainVideo" id=subtitle]]
+[[!template text="=M-x eaf-install-and-update= command" start="00:06:10.080" video="mainVideo" id=subtitle]]
+[[!template text="which is a wrapper around the new" start="00:06:12.639" video="mainVideo" id=subtitle]]
+[[!template text="install-eaf python script" start="00:06:14.560" video="mainVideo" id=subtitle]]
+[[!template text="dedicated to installing, updating," start="00:06:17.039" video="mainVideo" id=subtitle]]
+[[!template text="and maintaining EAF apps" start="00:06:19.280" video="mainVideo" id=subtitle]]
+[[!template text="and their dependencies" start="00:06:20.720" video="mainVideo" id=subtitle]]
+[[!template text="for the end user." start="00:06:21.680" video="mainVideo" id=subtitle]]
+[[!template text="Now it is very easy" start="00:06:24.160" video="mainVideo" id=subtitle]]
+[[!template text="to create a new EAF app." start="00:06:25.600" video="mainVideo" id=subtitle]]
+[[!template text="You just need to do it." start="00:06:27.440" video="mainVideo" id=subtitle]]
+[[!template text="You can just do it in your own repository," start="00:06:29.039" video="mainVideo" id=subtitle]]
+[[!template text="such as in GitHub, GitLab, or wherever." start="00:06:31.120" video="mainVideo" id=subtitle]]
+[[!template text="The first thing to do is" start="00:06:34.720" video="mainVideo" id=subtitle]]
+[[!template text="to fork the eaf-demo or the eaf-vue-demo" start="00:06:36.160" video="mainVideo" id=subtitle]]
+[[!template text="as a starting template," start="00:06:39.520" video="mainVideo" id=subtitle]]
+[[!template text="then update the dependencies.json file" start="00:06:41.280" video="mainVideo" id=subtitle]]
+[[!template text="to list the new dependencies you introduced" start="00:06:43.520" video="mainVideo" id=subtitle]]
+[[!template text="on various systems." start="00:06:46.400" video="mainVideo" id=subtitle]]
+[[!template text="Afterwards, once your app is finished," start="00:06:48.560" video="mainVideo" id=subtitle]]
+[[!template text="you simply need to submit a PR" start="00:06:51.199" video="mainVideo" id=subtitle]]
+[[!template text="to the EAF core" start="00:06:53.039" video="mainVideo" id=subtitle]]
+[[!template text="that modifies the applications.json list" start="00:06:54.000" video="mainVideo" id=subtitle]]
+[[!template text="to include your new app. And that's it." start="00:06:56.720" video="mainVideo" id=subtitle]]
+[[!template text="Come try it out and write your own" start="00:07:03.039" video="mainVideo" id=subtitle]]
+[[!template text="EAF extensions today!" start="00:07:04.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There are many other new updates." start="00:07:09.599" video="mainVideo" id=subtitle]]
+[[!template text="To list a few: we reached" start="00:07:11.840" video="mainVideo" id=subtitle]]
+[[!template text="more than 60 contributors, hooray!" start="00:07:13.919" video="mainVideo" id=subtitle]]
+[[!template text="And also, you can now use the familiar" start="00:07:17.199" video="mainVideo" id=subtitle]]
+[[!template text="Control s and Control r isearch" start="00:07:19.759" video="mainVideo" id=subtitle]]
+[[!template text="for real-time search," start="00:07:22.160" video="mainVideo" id=subtitle]]
+[[!template text="functioning very similar" start="00:07:23.280" video="mainVideo" id=subtitle]]
+[[!template text="to the Emacs isearch," start="00:07:24.560" video="mainVideo" id=subtitle]]
+[[!template text="in the EAF Browser, PDF Viewer," start="00:07:27.039" video="mainVideo" id=subtitle]]
+[[!template text="and many other applications." start="00:07:29.759" video="mainVideo" id=subtitle]]
+[[!template text="Additionally, you can also create" start="00:07:32.080" video="mainVideo" id=subtitle]]
+[[!template text="EAF PDF annotations" start="00:07:34.000" video="mainVideo" id=subtitle]]
+[[!template text="either inline or as a pop-up, etc. etc. etc." start="00:07:35.680" video="mainVideo" id=subtitle]]
+[[!template text="Finally, let's talk about Popweb." start="00:07:44.319" video="mainVideo" id=subtitle]]
+[[!template text="Popweb is a very, very new project" start="00:07:47.680" video="mainVideo" id=subtitle]]
+[[!template text="that started like exactly two weeks ago," start="00:07:50.080" video="mainVideo" id=subtitle]]
+[[!template text="that focuses particularly on the" start="00:07:52.639" video="mainVideo" id=subtitle]]
+[[!template text="multimedia pop-up functionality in Emacs." start="00:07:55.199" video="mainVideo" id=subtitle]]
+[[!template text="Pop is considered to be a sister project" start="00:07:55.919" video="mainVideo" id=subtitle]]
+[[!template text="and lightweight version of EAF." start="00:08:02.080" video="mainVideo" id=subtitle]]
+[[!template text="They both share a very similar design" start="00:08:04.879" video="mainVideo" id=subtitle]]
+[[!template text="and some code, and they are maintained" start="00:08:07.039" video="mainVideo" id=subtitle]]
+[[!template text="by the same people," start="00:08:09.039" video="mainVideo" id=subtitle]]
+[[!template text="which is me and ManateeLazycat." start="00:08:10.080" video="mainVideo" id=subtitle]]
+[[!template text="Here's a quick demo to see the" start="00:08:13.680" video="mainVideo" id=subtitle]]
+[[!template text="responsiveness of its preview." start="00:08:15.599" video="mainVideo" id=subtitle]]
+[[!template text="Here we go. On the right, see..." start="00:08:23.840" video="mainVideo" id=subtitle]]
+[[!template text="Oh, here we go. Yes." start="00:08:27.919" video="mainVideo" id=subtitle]]
+[[!template text="And these are the LaTeX preview." start="00:08:30.720" video="mainVideo" id=subtitle]]
+[[!template text="I can quickly show the next one." start="00:08:32.560" video="mainVideo" id=subtitle]]
+[[!template text="So this is the end of my presentation." start="00:08:44.800" video="mainVideo" id=subtitle]]
+[[!template text="Feel free to post questions" start="00:08:48.160" video="mainVideo" id=subtitle]]
+[[!template text="on the collaborative pad, IRC," start="00:08:50.000" video="mainVideo" id=subtitle]]
+[[!template text="or directly send me an email." start="00:08:52.160" video="mainVideo" id=subtitle]]
+[[!template text="I'll be around all this," start="00:08:53.519" video="mainVideo" id=subtitle]]
+[[!template text="at all these places," start="00:08:55.680" video="mainVideo" id=subtitle]]
+[[!template text="and if you found any issue," start="00:08:57.839" video="mainVideo" id=subtitle]]
+[[!template text="please submit an issue" start="00:08:59.519" video="mainVideo" id=subtitle]]
+[[!template text="to the EAF official issues," start="00:09:01.200" video="mainVideo" id=subtitle]]
+[[!template text="and don't forget to check out the wiki." start="00:09:04.160" video="mainVideo" id=subtitle]]
+[[!template text="Thank you and enjoy" start="00:09:08.880" video="mainVideo" id=subtitle]]
+[[!template text="the rest of EmacsConf 2021." start="00:09:10.160" video="mainVideo" id=subtitle]]
+[[!template text="captions by sachac" start="00:09:13.680" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.vtt b/2021/captions/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.vtt
new file mode 100644
index 00000000..5b4a23c5
--- /dev/null
+++ b/2021/captions/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.vtt
@@ -0,0 +1,802 @@
+WEBVTT
+
+00:00.799 --> 00:02.560
+Hi! My name is Asilata Bapat,
+
+00:02.560 --> 00:04.960
+and I'm talking about Babel for academics.
+
+00:04.960 --> 00:06.879
+So, I'm an academic at a university,
+
+00:06.879 --> 00:09.040
+and I use Emacs, Org mode, and Babel
+
+00:09.040 --> 00:11.280
+for a whole bunch of work related tasks.
+
+00:11.280 --> 00:12.559
+And there are many other tools
+
+00:12.559 --> 00:14.240
+that one could use to help with
+
+00:14.240 --> 00:15.200
+this workflow.
+
+00:15.200 --> 00:16.597
+I won't be going through all of these,
+
+00:16.597 --> 00:18.160
+and the ones that I've listed are just
+
+00:18.160 --> 00:20.240
+a few of the many that are available.
+
+00:20.240 --> 00:22.000
+Today, I'll really be talking about
+
+00:22.000 --> 00:24.080
+my teaching workflow.
+
+00:24.080 --> 00:27.840
+Let's just dive right in to a demo.
+
+00:27.840 --> 00:29.243
+So, the first file that I want to
+
+00:29.243 --> 00:31.599
+show you is the notes and admin file.
+
+00:31.599 --> 00:33.040
+From this file, I'll generate
+
+00:33.040 --> 00:35.440
+a nice-looking PDF document of notes,
+
+00:35.440 --> 00:36.963
+and I'll also keep track of some
+
+00:36.963 --> 00:38.399
+course admin.
+
+00:38.399 --> 00:43.200
+So, the file that I have here is this one,
+
+00:43.200 --> 00:44.719
+and all of the files that I'm going to
+
+00:44.719 --> 00:46.320
+show you today are taken from a course
+
+00:46.320 --> 00:48.096
+that I'm teaching at the moment
+
+00:48.096 --> 00:49.680
+this semester.
+
+00:49.680 --> 00:53.147
+What I want to do is export this
+
+00:53.147 --> 00:55.520
+entire document to LaTeX
+
+00:55.520 --> 00:56.320
+because this is where
+
+00:56.320 --> 00:58.800
+I'll be writing my course notes.
+
+00:58.800 --> 01:00.480
+But before I do that,
+
+01:00.480 --> 01:03.199
+I have some setup that I want to do,
+
+01:03.199 --> 01:05.199
+and you'll notice some of these headings
+
+01:05.199 --> 01:06.509
+are tagged as noexport,
+
+01:06.509 --> 01:08.400
+and they won't be exported.
+
+01:08.400 --> 01:11.680
+The startup setting I'll skip,
+
+01:11.680 --> 01:13.499
+and then the main thing here
+
+01:13.499 --> 01:14.880
+is the LaTeX setup.
+
+01:14.880 --> 01:18.560
+So, I'm using these #+ option lines,
+
+01:18.560 --> 01:21.360
+and I've told Org that
+
+01:21.360 --> 01:23.280
+I want to use an unusual LaTeX class,
+
+01:23.280 --> 01:24.880
+I'll have to tell Org about it later,
+
+01:24.880 --> 01:26.240
+I'll do that in a moment,
+
+01:26.240 --> 01:27.001
+and I have some
+
+01:27.001 --> 01:29.600
+LaTeX header lines, and so on.
+
+01:29.600 --> 01:31.360
+And then I have some export settings,
+
+01:31.360 --> 01:32.941
+the first export setting is
+
+01:32.941 --> 01:35.119
+to export into a different directory,
+
+01:35.119 --> 01:36.799
+not just at the same level
+
+01:36.799 --> 01:38.560
+because I want everything to go into
+
+01:38.560 --> 01:39.716
+the artifacts directory,
+
+01:39.716 --> 01:41.360
+and then I can ignore that artifacts
+
+01:41.360 --> 01:44.399
+directory using Git.
+
+01:44.399 --> 01:45.600
+This is the first
+
+01:45.600 --> 01:47.280
+source code block that we see,
+
+01:47.280 --> 01:49.759
+which is the Babel side of things,
+
+01:49.759 --> 01:52.079
+and I've called it export-setup.
+
+01:52.079 --> 01:55.759
+The way I write it is, #+begin_src,
+
+01:55.759 --> 01:56.965
+the language that I want to use,
+
+01:56.965 --> 01:58.159
+which is emacs-lisp,
+
+01:58.159 --> 01:59.600
+and maybe some options,
+
+01:59.600 --> 02:01.119
+and this is collapsed at the moment,
+
+02:01.119 --> 02:03.600
+if I expand it, you'll see
+
+02:03.600 --> 02:05.155
+inside here, this is really
+
+02:05.155 --> 02:07.600
+just Elisp, Emacs Lisp.
+
+02:07.600 --> 02:09.592
+So, the first thing I've done is,
+
+02:09.592 --> 02:12.440
+I've added this LaTeX class
+
+02:12.440 --> 02:15.360
+to the list of known LaTeX classes.
+
+02:15.360 --> 02:17.433
+And the second thing I've done is,
+
+02:17.433 --> 02:19.599
+I have locally set the value of
+
+02:19.599 --> 02:21.112
+org-latex-pdf-process,
+
+02:21.112 --> 02:24.720
+which is the compiler, to something…,
+
+02:24.720 --> 02:27.200
+this command is complicated I guess,
+
+02:27.200 --> 02:29.440
+but what the main thing it's doing
+
+02:29.440 --> 02:32.160
+is that it's moving the generated output…,
+
+02:32.160 --> 02:34.160
+sorry, the generated image files
+
+02:34.160 --> 02:35.169
+to the output directory,
+
+02:35.169 --> 02:37.519
+so that everything can remain
+
+02:37.519 --> 02:39.680
+inside of this artifacts directory,
+
+02:39.680 --> 02:41.519
+and maybe it's doing some other things.
+
+02:41.519 --> 02:43.680
+And then there are some other
+
+02:43.680 --> 02:47.120
+setup options that I'll skip.
+
+02:47.120 --> 02:49.360
+So, this is a source code block,
+
+02:49.360 --> 02:50.640
+inside of the source code block
+
+02:50.640 --> 02:52.319
+everything is basically Emacs Lisp.
+
+02:52.319 --> 02:54.640
+How do I evaluate this?
+
+02:54.640 --> 02:56.319
+I just press Control c Control c (C-c C-c),
+
+02:56.319 --> 02:57.920
+and it evaluates everything,
+
+02:57.920 --> 03:00.319
+but if I want to automate the evaluation,
+
+03:00.319 --> 03:02.080
+there's one other thing I can do.
+
+03:02.080 --> 03:04.658
+So, let me jump down to
+
+03:04.658 --> 03:06.720
+the local variables section.
+
+03:06.720 --> 03:09.740
+In this local variable section
+
+03:09.740 --> 03:11.680
+I have an eval block,
+
+03:11.680 --> 03:14.681
+so, I've added a certain hook to the
+
+03:14.681 --> 03:16.879
+org-export-before-processing-hook,
+
+03:16.879 --> 03:18.319
+and that just resolves
+
+03:18.319 --> 03:19.519
+this reference from this file.
+
+03:19.519 --> 03:23.040
+It looks for a code block titled
+
+03:23.040 --> 03:24.859
+export-setup, and it runs it
+
+03:24.859 --> 03:26.000
+right before exporting,
+
+03:26.000 --> 03:29.200
+and this is all local to this buffer.
+
+03:29.200 --> 03:30.799
+So, before I export,
+
+03:30.799 --> 03:34.000
+it'll then read the correct options.
+
+03:34.000 --> 03:37.519
+And after this setup,
+
+03:37.519 --> 03:39.760
+I have the course plan,
+
+03:39.760 --> 03:41.599
+which is just what goes into my agenda
+
+03:41.599 --> 03:43.360
+as to-dos, I'll skip that.
+
+03:43.360 --> 03:45.519
+And after that, I have the actual notes,
+
+03:45.519 --> 03:48.640
+and what they actually look like…,
+
+03:48.640 --> 03:54.400
+so, this is what they actually look like,
+
+03:54.400 --> 03:57.040
+nicely LaTeXed with diagrams and so on,
+
+03:57.040 --> 03:57.920
+everything generated
+
+03:57.920 --> 04:00.720
+from that single Org file.
+
+04:00.720 --> 04:04.480
+I'll say more about diagrams later.
+
+04:04.480 --> 04:06.080
+I also have to write assignments
+
+04:06.080 --> 04:07.260
+and assignment solutions,
+
+04:07.260 --> 04:10.239
+so let me jump to that.
+
+04:10.239 --> 04:11.840
+Again, this is a very similar file,
+
+04:11.840 --> 04:14.080
+but I want to now export
+
+04:14.080 --> 04:15.760
+different headings to different files.
+
+04:15.760 --> 04:16.639
+This is not going to be
+
+04:16.639 --> 04:18.320
+exported all at once.
+
+04:18.320 --> 04:19.759
+So, again I have some setup,
+
+04:19.759 --> 04:22.400
+some general setup that I'll skip,
+
+04:22.400 --> 04:25.120
+export setup just like before,
+
+04:25.120 --> 04:29.280
+code setup for Python, really,
+
+04:29.280 --> 04:31.280
+I have a various…, a bunch of different
+
+04:31.280 --> 04:33.199
+languages here, so Shell and Python,
+
+04:33.199 --> 04:35.967
+and some helper functions.
+
+04:36.088 --> 04:38.160
+So, let me jump to this one called
+
+04:38.160 --> 04:39.756
+togglesolutions, this is again
+
+04:39.756 --> 04:41.919
+an Emacs Lisp code block.
+
+04:41.919 --> 04:43.600
+What this does is,
+
+04:43.600 --> 04:48.632
+it tells LaTeX to either toggle the
+
+04:48.632 --> 04:50.336
+display of solutions on, or off
+
+04:50.336 --> 04:53.096
+based on what the tag is
+
+04:53.096 --> 04:54.240
+for that particular assignment.
+
+04:54.240 --> 04:57.520
+So, whether if the assignment
+
+04:57.520 --> 04:58.800
+is tagged as solved,
+
+04:58.800 --> 05:00.240
+then the solution should be displayed,
+
+05:00.240 --> 05:03.280
+otherwise they shouldn't be.
+
+05:03.280 --> 05:05.447
+And here most of the assignments
+
+05:05.447 --> 05:07.120
+are tagged as solved,
+
+05:07.120 --> 05:08.880
+so in this case if I export this,
+
+05:08.880 --> 05:11.840
+the solutions will be displayed.
+
+05:11.840 --> 05:20.800
+Let's look at that.
+
+05:20.800 --> 05:23.919
+So, I see the solutions blocks,
+
+05:23.919 --> 05:27.036
+and this is because it's calling
+
+05:27.036 --> 05:29.919
+the toggle solutions piece of code.
+
+05:29.919 --> 05:32.240
+And the properties,
+
+05:32.240 --> 05:33.840
+if I expand this properties drawer,
+
+05:33.840 --> 05:39.280
+you see this output file name
+
+05:39.280 --> 05:41.440
+has a homework one dash solved,
+
+05:41.440 --> 05:43.360
+so it has a solved suffix,
+
+05:43.360 --> 05:45.912
+and this is related to the fact that
+
+05:45.912 --> 05:47.680
+I have a solved tag up here.
+
+05:47.680 --> 05:48.960
+So, let's see what happens
+
+05:48.960 --> 05:51.199
+if I delete the solved tag,
+
+05:51.199 --> 05:52.639
+so nothing's happened yet,
+
+05:52.639 --> 05:54.000
+but if I save the file,
+
+05:54.000 --> 05:55.919
+then suddenly this homework one
+
+05:55.919 --> 05:58.240
+dash solved becomes homework one,
+
+05:58.240 --> 06:00.080
+and this is desired behavior,
+
+06:00.080 --> 06:02.084
+this is what I want because
+
+06:02.084 --> 06:03.222
+I want to keep the solved
+
+06:03.222 --> 06:04.497
+and unsolved files separate.
+
+06:04.497 --> 06:07.120
+So, once again, if I put in
+
+06:07.120 --> 06:09.440
+the solved tag, and if I save,
+
+06:09.440 --> 06:11.440
+I get back the different file name.
+
+06:11.440 --> 06:12.720
+And how did I achieve this?
+
+06:12.720 --> 06:16.479
+This is again back in the setup section,
+
+06:16.479 --> 06:19.280
+it's the process-export-filenames block.
+
+06:19.280 --> 06:21.120
+It's some big piece of Elisp
+
+06:21.120 --> 06:22.349
+that I won't go through,
+
+06:22.349 --> 06:24.240
+but basically it's mapping over
+
+06:24.240 --> 06:26.720
+Org entries, and it's either
+
+06:26.720 --> 06:30.080
+adding or removing this solved suffix
+
+06:30.080 --> 06:34.560
+based on what tag it sees.
+
+06:34.560 --> 06:36.781
+Okay, when does this
+
+06:36.781 --> 06:37.919
+code block get evaluated?
+
+06:37.919 --> 06:39.840
+Well, I want it to be evaluated
+
+06:39.840 --> 06:41.039
+right before I save
+
+06:41.039 --> 06:43.199
+because I change something,
+
+06:43.199 --> 06:45.840
+I save, and I want the properties
+
+06:45.840 --> 06:49.199
+to be get updated accordingly.
+
+06:49.199 --> 06:51.364
+If I go down to the
+
+06:51.364 --> 06:52.639
+local variables section again.
+
+06:52.639 --> 06:55.840
+Again, I have a local variables
+
+06:55.840 --> 06:56.800
+section here,
+
+06:56.800 --> 06:58.479
+and I'm evaluating this Elisp,
+
+06:58.479 --> 07:01.199
+which is setting the before-save-hook
+
+07:01.199 --> 07:04.240
+to resolve the process-export-filenames
+
+07:04.240 --> 07:05.716
+function, and so that's what
+
+07:05.716 --> 07:09.199
+gives me that functionality.
+
+07:09.199 --> 07:12.720
+And finally,
+
+07:12.720 --> 07:16.240
+I have some skeletons, which are….
+
+07:16.240 --> 07:19.360
+Emacs has this skeleton language,
+
+07:19.360 --> 07:22.240
+which is a rudimentary templating language.
+
+07:22.240 --> 07:24.220
+So, I've defined some templates
+
+07:24.220 --> 07:26.319
+for my assignment and worksheet
+
+07:26.319 --> 07:29.440
+in this little Emacs Lisp block,
+
+07:29.440 --> 07:31.120
+which I think I usually just evaluate
+
+07:31.120 --> 07:33.280
+manually, and then if I just call it,
+
+07:33.280 --> 07:35.199
+I get a nice-looking skeleton
+
+07:35.199 --> 07:37.360
+that gives me this assignment.
+
+07:37.360 --> 07:40.080
+One thing I want to show you
+
+07:40.080 --> 07:43.199
+in these assignments, or I mean,
+
+07:43.199 --> 07:44.720
+in this file in particular,
+
+07:44.720 --> 07:46.560
+are these dot source code blocks.
+
+07:46.560 --> 07:49.840
+So, I've had to type in or draw in
+
+07:49.840 --> 07:52.000
+some graphs in this assignment,
+
+07:52.000 --> 07:54.720
+and I can do that right from Org.
+
+07:54.720 --> 07:56.400
+So, this is some piece of code
+
+07:56.400 --> 07:59.199
+that's creating a file,
+
+07:59.199 --> 08:00.879
+which has this name,
+
+08:00.879 --> 08:05.840
+and if I evaluate this block,
+
+08:05.840 --> 08:10.720
+I see a results drawer with this file.
+
+08:10.720 --> 08:12.711
+And this is a PNG file,
+
+08:12.711 --> 08:13.759
+which now gets embedded
+
+08:13.759 --> 08:15.680
+into my LaTeX document.
+
+08:15.680 --> 08:16.639
+So, this is nice,
+
+08:16.639 --> 08:18.720
+I can actually delete this from here,
+
+08:18.720 --> 08:20.479
+and when I export,
+
+08:20.479 --> 08:23.919
+the file will get attached automatically.
+
+08:23.919 --> 08:26.639
+And similarly,
+
+08:26.639 --> 08:28.800
+in some other assignments here,
+
+08:28.800 --> 08:30.639
+I have some Python source,
+
+08:30.639 --> 08:33.284
+so I've had to type in
+
+08:33.284 --> 08:34.527
+some complicated matrices,
+
+08:34.527 --> 08:36.128
+and some complicated matrix products,
+
+08:36.128 --> 08:36.640
+and so on,
+
+08:36.640 --> 08:38.000
+which I didn't want to do by hand,
+
+08:38.000 --> 08:39.760
+so that I didn't introduce errors,
+
+08:39.760 --> 08:41.599
+so I've written some Python code.
+
+08:41.599 --> 08:44.240
+If I Control c Control c (C-c C-c)
+
+08:44.240 --> 08:45.920
+on this block, you'll notice,
+
+08:45.920 --> 08:47.120
+it's in the session matrix,
+
+08:47.120 --> 08:49.200
+so it's using the previous,
+
+08:49.200 --> 08:52.399
+the same kind of session.
+
+08:52.399 --> 08:55.440
+And you'll see that the results,
+
+08:55.440 --> 08:57.760
+because of the way I chose to format them,
+
+08:57.760 --> 08:59.920
+look like a nice drawer with
+
+08:59.920 --> 09:01.600
+nicely formatted LaTeX.
+
+09:01.600 --> 09:03.920
+Once again these results
+
+09:03.920 --> 09:05.519
+I can cut from the file,
+
+09:05.519 --> 09:07.600
+and the file will get exported…,
+
+09:07.600 --> 09:09.200
+when the file gets exported,
+
+09:09.200 --> 09:10.480
+these source code blocks will get
+
+09:10.480 --> 09:12.000
+evaluated, and the answer
+
+09:12.000 --> 09:19.200
+will show up in the file.
+
+09:19.200 --> 09:20.097
+And finally,
+
+09:20.097 --> 09:21.363
+the last thing I want to show you
+
+09:21.363 --> 09:23.531
+very briefly is the web page
+
+09:23.531 --> 09:26.720
+for this course.
+
+09:26.720 --> 09:28.399
+The only thing I want to show you here
+
+09:28.399 --> 09:30.399
+is that I have a Python source code block,
+
+09:30.399 --> 09:33.279
+which pulls in my handwritten course notes,
+
+09:33.279 --> 09:36.399
+and makes them into a nice-looking list
+
+09:36.399 --> 09:38.880
+with a nice-looking order,
+
+09:38.880 --> 09:41.680
+and then just exports as HTML.
+
+09:41.680 --> 09:44.600
+So, this is what
+
+09:44.600 --> 09:46.080
+the web page looks like,
+
+09:46.080 --> 09:48.880
+and you can see it at this URL.
+
+09:48.880 --> 09:49.892
+If you go click on
+
+09:49.892 --> 09:52.800
+the 2021 link at this URL.
+
+09:52.800 --> 09:54.880
+So, that's all that I wanted to say.
+
+09:54.880 --> 09:58.360
+Thank you very much!
diff --git a/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--chapters.vtt b/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--chapters.vtt
new file mode 100644
index 00000000..40c8b472
--- /dev/null
+++ b/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--chapters.vtt
@@ -0,0 +1,55 @@
+WEBVTT
+
+00:00:02.960 --> 00:00:58.319
+Introduction
+
+00:00:58.320 --> 00:01:57.679
+Contours of this presentation
+
+00:01:57.680 --> 00:02:27.359
+Intended audience
+
+00:02:27.360 --> 00:04:32.079
+Shaping and bidirectionality
+
+00:04:32.080 --> 00:05:30.638
+Emacs: a truly multilingual capable editor and environment
+
+00:05:30.639 --> 00:06:09.918
+Significance of Emacs support for Perso-Arabic scripts
+
+00:06:09.919 --> 00:06:49.918
+About Emacs input methods
+
+00:06:49.919 --> 00:07:27.839
+Emacs Persian input methods
+
+00:07:27.840 --> 00:12:00.159
+Selecting Persian input methods - gif-screencast
+
+00:12:00.160 --> 00:12:27.999
+Emacs built-in documentation
+
+00:12:28.000 --> 00:12:43.999
+Pointers to code
+
+00:12:44.000 --> 00:14:48.958
+Keyboard layouts for Persian input methods - gif-screencast
+
+00:14:48.959 --> 00:16:17.518
+Complete documentation
+
+00:16:17.519 --> 00:17:25.279
+Ramification Of BIDI and Perso-Arabic on Emacs applications
+
+00:17:25.280 --> 00:17:53.519
+BIDI-aware Emacs applications
+
+00:17:53.520 --> 00:18:44.639
+Emacs Native Markup Language (ENML)
+
+00:18:44.640 --> 00:19:24.239
+About ByStar And BISOS
+
+00:19:24.240 --> 00:19:25.240
+About Blee and Persian Blee
diff --git a/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main--main--chapters.vtt b/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main--main--chapters.vtt
new file mode 100644
index 00000000..40c8b472
--- /dev/null
+++ b/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main--main--chapters.vtt
@@ -0,0 +1,55 @@
+WEBVTT
+
+00:00:02.960 --> 00:00:58.319
+Introduction
+
+00:00:58.320 --> 00:01:57.679
+Contours of this presentation
+
+00:01:57.680 --> 00:02:27.359
+Intended audience
+
+00:02:27.360 --> 00:04:32.079
+Shaping and bidirectionality
+
+00:04:32.080 --> 00:05:30.638
+Emacs: a truly multilingual capable editor and environment
+
+00:05:30.639 --> 00:06:09.918
+Significance of Emacs support for Perso-Arabic scripts
+
+00:06:09.919 --> 00:06:49.918
+About Emacs input methods
+
+00:06:49.919 --> 00:07:27.839
+Emacs Persian input methods
+
+00:07:27.840 --> 00:12:00.159
+Selecting Persian input methods - gif-screencast
+
+00:12:00.160 --> 00:12:27.999
+Emacs built-in documentation
+
+00:12:28.000 --> 00:12:43.999
+Pointers to code
+
+00:12:44.000 --> 00:14:48.958
+Keyboard layouts for Persian input methods - gif-screencast
+
+00:14:48.959 --> 00:16:17.518
+Complete documentation
+
+00:16:17.519 --> 00:17:25.279
+Ramification Of BIDI and Perso-Arabic on Emacs applications
+
+00:17:25.280 --> 00:17:53.519
+BIDI-aware Emacs applications
+
+00:17:53.520 --> 00:18:44.639
+Emacs Native Markup Language (ENML)
+
+00:18:44.640 --> 00:19:24.239
+About ByStar And BISOS
+
+00:19:24.240 --> 00:19:25.240
+About Blee and Persian Blee
diff --git a/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt b/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt
new file mode 100644
index 00000000..ca9a69bf
--- /dev/null
+++ b/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt
@@ -0,0 +1,1093 @@
+WEBVTT
+
+00:02.960 --> 00:00:10.240
+Greetings. Salaam. This is Mohsen Banan.
+
+00:00:10.240 --> 00:00:14.080
+I am an Iranian software and internet engineer.
+
+00:14.080 --> 00:17.199
+I converted to Emacs in 1986.
+
+00:17.199 --> 00:20.480
+It was Emacs version 17 then.
+
+00:20.480 --> 00:00:23.920
+By around 1988, when Emacs version 18
+
+00:00:23.920 --> 00:00:25.680
+was well in place,
+
+00:00:25.680 --> 00:00:28.960
+I started living inside of Emacs.
+
+00:00:28.960 --> 00:00:31.119
+My primary digital environment
+
+00:00:31.119 --> 00:00:33.680
+has been Emacs ever since.
+
+00:33.680 --> 00:36.559
+It has been a good life.
+
+00:36.559 --> 00:40.000
+I'm a native Farsi speaker and writer.
+
+00:40.000 --> 00:00:41.520
+I'm not a linguist,
+
+00:00:41.520 --> 00:00:43.800
+and I do not specialize in
+
+00:43.800 --> 00:46.719
+multilingualization, internationalization,
+
+00:46.719 --> 00:48.879
+and localization.
+
+00:48.879 --> 00:52.239
+My favorite programming language is Lisp,
+
+00:52.239 --> 00:00:58.319
+and I am a bit of an Emacs developer.
+
+00:58.320 --> 01:00.719
+This presentation is about use of
+
+01:00.719 --> 01:04.000
+Perso-Arabic Scripts with Emacs.
+
+01:04.000 --> 01:06.720
+It's an overview presentation.
+
+01:06.720 --> 00:01:08.320
+I won't be digging deep
+
+00:01:08.320 --> 00:01:11.360
+in many of the mentioned topics.
+
+01:11.360 --> 00:01:13.119
+My goal is to make you aware
+
+00:01:13.119 --> 00:01:16.159
+of what can be done with Emacs today,
+
+01:16.159 --> 01:19.280
+and the potentials that Emacs presents
+
+01:19.280 --> 01:22.640
+for Perso-Arabic writers.
+
+01:22.640 --> 01:25.759
+The main topics that i'll cover are:
+
+01:25.759 --> 00:01:30.320
+- a brief introduction to Perso-Arabic scripts
+
+01:30.320 --> 01:35.119
+- two existing Emacs Persian input methods
+
+01:35.119 --> 00:01:36.960
+- the challenges involved with
+
+00:01:36.960 --> 00:01:42.960
+making Emacs applications bidirectional-aware
+
+01:42.960 --> 00:01:45.280
+- the ultimate goal of creating
+
+00:01:45.280 --> 00:01:47.759
+a complete digital environment
+
+00:01:47.759 --> 00:01:51.200
+for Perso-Arabic writers
+
+01:51.200 --> 00:01:57.679
+I'll also be including various pointers.
+
+01:57.680 --> 00:02:00.320
+So first, let's make sure
+
+00:02:00.320 --> 00:02:02.079
+that what I'm presenting
+
+00:02:02.079 --> 00:02:04.560
+is of interest to you.
+
+02:04.560 --> 00:02:07.040
+if you are a Perso-Arabic writer
+
+00:02:07.040 --> 00:02:08.879
+and if you use Emacs,
+
+00:02:08.879 --> 00:02:12.720
+you're definitely my intended audience.
+
+02:12.720 --> 00:02:15.120
+If you're an Emacs developer
+
+00:02:15.120 --> 00:02:19.120
+who wishes to make her Emacs apps
+
+02:19.120 --> 00:02:22.000
+multilingual and bidi-aware,
+
+00:02:22.000 --> 00:02:27.359
+you're also my intended audience.
+
+02:27.360 --> 00:02:30.480
+For the purposes of this presentation,
+
+00:02:30.480 --> 00:02:34.160
+in this slide, I'm categorizing scripts
+
+02:34.160 --> 02:39.040
+based on directionality and shaping.
+
+02:39.040 --> 00:02:41.280
+Latin letters are not shaped.
+
+00:02:41.280 --> 00:02:43.120
+Generally speaking,
+
+00:02:43.120 --> 00:02:44.800
+the shape of a Latin letter
+
+00:02:44.800 --> 00:02:49.599
+is independent of its position in a word.
+
+02:49.599 --> 00:02:53.280
+Perso-Arabic letters are subject to shaping.
+
+02:53.280 --> 02:56.319
+For example the letter mim--
+
+02:56.319 --> 02:58.800
+sounding similar to M--
+
+02:58.800 --> 03:01.840
+takes three shapes depending on whether
+
+03:01.840 --> 03:04.720
+it is in the beginning of a word,
+
+03:04.720 --> 00:03:06.480
+in the middle of a word,
+
+00:03:06.480 --> 00:03:09.200
+or at the end of a word.
+
+03:09.200 --> 00:03:12.159
+I'll be showing more of how shaping works
+
+00:03:12.159 --> 00:03:16.400
+in an Emacs session screencast later.
+
+03:16.400 --> 00:03:18.159
+Shaping has ramifications
+
+00:03:18.159 --> 00:03:21.040
+for Emacs application developers.
+
+03:21.040 --> 00:03:23.760
+For example, if you are combining
+
+00:03:23.760 --> 00:03:26.720
+initial letters to create a label,
+
+03:26.720 --> 03:29.680
+those letters can be shaped together--
+
+03:29.680 --> 03:31.760
+which is not what you want.
+
+03:31.760 --> 03:34.000
+In such cases, you would need to
+
+03:34.000 --> 03:37.840
+explicitly keep them separate.
+
+03:37.840 --> 00:03:40.799
+Latin-based scripts are always
+
+00:03:40.799 --> 00:03:42.560
+left-to-right.
+
+03:42.560 --> 00:03:46.560
+Perso-Arabic scripts are right-to-left
+
+03:46.560 --> 00:03:51.040
+with letters, but numbers are left-to-right.
+
+03:51.040 --> 00:03:53.040
+So, Perso-Arabic scripts
+
+00:03:53.040 --> 00:03:56.319
+are bi-directional (BIDI).
+
+03:56.319 --> 00:03:58.879
+Hebrew is also bi-directional,
+
+00:03:58.879 --> 00:04:02.159
+but Hebrew is not shaped.
+
+04:02.159 --> 00:04:05.680
+More recently, it has become very common
+
+00:04:05.680 --> 00:04:10.400
+to mix Perso-Arabic and Latin text.
+
+04:10.400 --> 00:04:12.560
+This can become very confusing
+
+00:04:12.560 --> 00:04:14.959
+if paragraph directionality
+
+00:04:14.959 --> 00:04:17.759
+is not properly observed.
+
+04:17.759 --> 00:04:20.000
+I'll be providing some examples
+
+00:04:20.000 --> 00:04:23.120
+as screencasts.
+
+04:23.120 --> 00:04:24.880
+The Emacs display engine
+
+00:04:24.880 --> 00:04:27.280
+now fully and well supports
+
+00:04:27.280 --> 00:04:32.079
+both shaping and BIDI.
+
+04:32.080 --> 00:04:37.120
+Since 2012, starting with Emacs version 24,
+
+04:37.120 --> 00:04:38.639
+we can say that Emacs
+
+00:04:38.639 --> 00:04:43.600
+is a truly multilingual-capable environment.
+
+04:43.600 --> 00:04:45.040
+Like everything else,
+
+00:04:45.040 --> 00:04:46.880
+multilingual support for Emacs
+
+00:04:46.880 --> 00:04:49.280
+was added gradually.
+
+04:49.280 --> 04:52.560
+Unicode support was added early on.
+
+04:52.560 --> 04:55.520
+The framework for input methods evolved
+
+04:55.520 --> 00:05:00.320
+in the 1990s. But it was not till version 24
+
+00:05:00.320 --> 00:05:03.360
+in 2012 that the display engine
+
+00:05:03.360 --> 00:05:06.240
+could fully support BIDI.
+
+05:06.240 --> 00:05:08.800
+Hats off to Eli Zaretskii
+
+00:05:08.800 --> 00:05:12.960
+for his work on Emacs BIDI.
+
+05:12.960 --> 00:05:15.600
+Once full BIDI support was in place
+
+00:05:15.600 --> 00:05:19.199
+in 2012, I went ahead and added
+
+00:05:19.199 --> 00:05:24.000
+two Persian input methods to Emacs 24.
+
+05:24.000 --> 00:05:26.400
+So now Emacs fully supports
+
+00:05:26.400 --> 00:05:30.638
+Perso-Arabic scripts.
+
+05:30.639 --> 00:05:34.080
+By Perso-Arabic script, we're referring to
+
+00:05:34.080 --> 00:05:36.320
+the Arabic writing system
+
+05:36.320 --> 00:05:38.160
+with various extensions
+
+00:05:38.160 --> 00:05:42.240
+used by a large number of languages.
+
+05:42.240 --> 00:05:44.479
+Perso-Arabic is the second most
+
+00:05:44.479 --> 00:05:47.520
+widely used writing system in the world
+
+05:47.520 --> 05:50.479
+by the number of countries.
+
+05:50.479 --> 05:54.000
+It is the third by the number of users
+
+05:54.000 --> 05:59.039
+after the Latin and Chinese scripts.
+
+05:59.039 --> 06:02.160
+So, by well supporting Perso-Arabic,
+
+06:02.160 --> 00:06:04.720
+Emacs's potential user base
+
+00:06:04.720 --> 00:06:09.918
+can be greatly enhanced.
+
+06:09.919 --> 00:06:12.960
+Before focusing on the Persian input methods,
+
+00:06:12.960 --> 00:06:14.960
+let me quickly summarize
+
+00:06:14.960 --> 00:06:18.319
+Emacs's input methods model.
+
+06:18.319 --> 00:06:21.360
+Input methods allow you to enter characters
+
+00:06:21.360 --> 00:06:25.120
+that are not supported by your keyboard.
+
+06:25.120 --> 00:06:29.280
+With Quail maps, we can map ASCII key strings
+
+00:06:29.280 --> 00:06:31.919
+to multilingual characters.
+
+06:31.919 --> 00:06:34.080
+So we can input any text
+
+00:06:34.080 --> 00:06:36.960
+from an ASCII keyboard.
+
+06:36.960 --> 00:06:38.960
+You select an input method
+
+00:06:38.960 --> 00:06:44.400
+with C-x RET C-\ .
+
+06:44.400 --> 00:06:49.918
+We'll try that in a screencast shortly.
+
+06:49.919 --> 00:06:53.919
+Since version 24, Emacs comes loaded with
+
+00:06:53.919 --> 00:06:56.880
+two Persian input methods:
+
+06:56.880 --> 00:07:01.520
+farsi-isiri-9147 is the standard
+
+00:07:01.520 --> 00:07:04.960
+traditional Iranian keyboard.
+
+07:04.960 --> 00:07:09.199
+farsi-transliterate-banan is an intuitive
+
+00:07:09.199 --> 00:07:12.319
+transliteration keyboard for Farsi
+
+00:07:12.319 --> 00:07:16.960
+which requires near-zero training for use.
+
+07:16.960 --> 00:07:18.960
+I'll be mostly focused on
+
+00:07:18.960 --> 00:07:21.520
+farsi-transliterate-banan
+
+00:07:21.520 --> 00:07:23.919
+in this presentation.
+
+07:23.919 --> 00:07:27.839
+So let's try this out.
+
+07:27.840 --> 07:30.319
+In this gif-cast, we're going to select
+
+07:30.319 --> 00:07:32.240
+a Persian input method
+
+00:07:32.240 --> 00:07:35.280
+and write a few simple sentences.
+
+07:35.280 --> 07:38.160
+With no training and no documentation,
+
+07:38.160 --> 00:07:41.360
+any Farsi writer familiar with Emacs
+
+00:07:41.360 --> 00:07:45.440
+can write these, as farsi-transliterate-banan
+
+00:07:45.440 --> 00:07:48.560
+input method is intuitive.
+
+07:48.560 --> 00:07:50.400
+I'll be using keycast
+
+00:07:50.400 --> 00:07:54.160
+to show you keys as they are used.
+
+07:54.160 --> 07:56.560
+Let me first describe as to what we have
+
+07:56.560 --> 07:58.720
+on the screen.
+
+07:58.720 --> 08:01.520
+There are three windows in one frame.
+
+08:01.520 --> 00:08:04.639
+Keycast will show commands and keys
+
+00:08:04.639 --> 00:08:06.319
+on the mode line.
+
+08:06.319 --> 00:08:08.639
+The leftmost window is showing
+
+00:08:08.639 --> 00:08:10.879
+logs of keycast.
+
+08:10.879 --> 08:14.639
+Transformed individual unshaped letters
+
+08:14.639 --> 08:17.360
+will appear here.
+
+08:17.360 --> 00:08:21.120
+The middle window is running a tail -f
+
+00:08:21.120 --> 00:08:27.440
+on the dribble file piped to fold -w1.
+
+08:27.440 --> 00:08:30.720
+This lets you see the raw ASCII characters
+
+00:08:30.720 --> 00:08:34.479
+as I type them.
+
+08:34.479 --> 00:08:37.839
+The right window is the empty buffer
+
+00:08:37.839 --> 00:08:41.680
+on the ex.fa file.
+
+08:41.680 --> 00:08:44.560
+Anything that I described here
+
+00:08:44.560 --> 00:08:49.040
+can be done with virgin Emacs distribution
+
+08:49.040 --> 08:51.360
+with nothing added,
+
+08:51.360 --> 08:53.760
+but I'm using Blee
+
+08:53.760 --> 08:57.120
+(By* Libre-Halaal Emacs Environment)
+
+08:57.120 --> 00:09:02.720
+to show things. You don't need to have blee
+
+00:09:02.720 --> 00:09:07.600
+for writing the equivalent of the text
+
+00:09:07.600 --> 00:09:10.800
+in this gif-cast.
+
+09:10.800 --> 00:09:13.440
+First, I'm going to select
+
+00:09:13.440 --> 00:09:16.800
+the farsi-transliterate-banan.
+
+09:16.800 --> 00:09:22.080
+I'm entering C-x RET C-\ .
+
+09:22.080 --> 00:09:23.839
+Notice the mode -ine
+
+00:09:23.839 --> 00:09:27.040
+and the prompt at mini-buffer.
+
+09:27.040 --> 09:30.399
+With completion, I'm going to select
+
+09:30.399 --> 09:34.000
+farsi-transliterate-banan.
+
+09:34.000 --> 00:09:38.560
+Notice that farsi-isiri-9147
+
+09:38.560 --> 09:43.360
+was also provided as a choice.
+
+09:43.360 --> 00:09:47.440
+Also notice that the letter 'b' appears
+
+00:09:47.440 --> 00:09:51.760
+in the left of the mode line of ex.fa.
+
+09:51.760 --> 00:09:54.000
+This indicates which input method
+
+00:09:54.000 --> 00:09:56.320
+has been selected.
+
+09:56.320 --> 00:09:58.560
+Also notice that cursor is on
+
+00:09:58.560 --> 00:10:04.399
+the top left corner of ex.fa.
+
+10:04.399 --> 10:08.800
+Next, I'm going to enter the 's' character.
+
+10:08.800 --> 10:12.000
+Notice the cursor moved to the right,
+
+10:12.000 --> 00:10:15.120
+and unshaped ’seen’ appeared
+
+00:10:15.120 --> 00:10:20.079
+in the ex.fa buffer, on the mode-line,
+
+10:20.079 --> 10:23.760
+and in the keycast log buffer.
+
+10:23.760 --> 00:10:28.000
+Next, I'm going to enter 'l'.
+
+10:28.000 --> 00:10:32.800
+Notice ل in the mode-line,
+
+10:32.800 --> 00:10:39.920
+and notice how س was subjected to shaping.
+
+10:39.920 --> 10:42.640
+Next I'm going to write the letter
+
+10:42.640 --> 10:44.640
+to write the following:
+
+10:44.640 --> 10:50.560
+ سلام –حال شما چه طوره؟ –با ایمکس همه کار میشه کرد
+
+10:50.560 --> 10:52.480
+"Hello, how are you?"
+
+10:52.480 --> 00:10:56.720
+You can do everything with Emacs.
+
+10:56.720 --> 11:00.000
+Generally, same-sounding Latin characters
+
+11:00.000 --> 00:11:03.920
+are used. As usual, vowels are ignored
+
+00:11:03.920 --> 00:11:06.720
+unless called for.
+
+11:06.720 --> 11:10.800
+Notice that in order to get ح,
+
+11:10.800 --> 11:14.560
+i repeated 'h' twice.
+
+11:14.560 --> 11:15.440
+
+11:15.440 --> 11:18.560
+is the obvious 'sh'.
+
+11:18.560 --> 11:19.519
+
+11:19.519 --> 11:22.480
+is the obvious 'ch'.
+
+11:22.480 --> 00:11:28.640
+t, that's the ط is upper case T.
+
+11:28.640 --> 00:11:29.439
+ ت
+
+00:11:29.439 --> 00:11:31.839
+is lowercase t.
+
+11:31.839 --> 11:34.880
+That's it. We managed to write in Farsi
+
+11:34.880 --> 11:38.640
+with a QWERTY keyboard, intuitively.
+
+11:38.640 --> 11:40.959
+Next, we are going to switch back to
+
+11:40.959 --> 00:11:45.680
+globish and write "back to globish".
+
+11:45.680 --> 00:11:47.920
+Notice that the globish sentence
+
+00:11:47.920 --> 00:11:50.959
+started from the left side.
+
+11:50.959 --> 00:11:53.279
+This is due to proper detection
+
+00:11:53.279 --> 00:12:00.159
+of paragraph directionality by Emacs.
+
+12:00.160 --> 00:12:05.600
+For the most part, Emacs is self-documenting.
+
+12:05.600 --> 12:07.920
+Here we are pointing you to some
+
+12:07.920 --> 12:12.880
+relevant self-contained Emacs resources.
+
+12:12.880 --> 00:12:15.680
+The BIDI documentation applies to
+
+00:12:15.680 --> 00:12:18.000
+all BIDI scripts,
+
+12:18.000 --> 12:22.079
+not just Perso-Arabic scripts.
+
+12:22.079 --> 00:12:23.279
+Referring to the code
+
+00:12:23.279 --> 00:12:27.999
+can also be useful for some.
+
+12:28.000 --> 12:30.079
+Here are some pointers.
+
+12:30.079 --> 00:12:32.399
+The Quail translation code
+
+00:12:32.399 --> 00:12:35.519
+for Persian input methods:
+
+00:12:35.519 --> 00:12:39.120
+the persian.el file has full details
+
+00:12:39.120 --> 00:12:43.999
+of the mapping and some documentation.
+
+12:44.000 --> 00:12:46.639
+Next, we'll show the keyboard layouts
+
+00:12:46.639 --> 00:12:51.519
+as a gif-cast. You can get
+
+00:12:51.519 --> 00:12:55.519
+relevant documentation for any input method
+
+12:55.519 --> 00:13:00.320
+with the describe-input-method command.
+
+13:00.320 --> 00:13:05.920
+So, let's try that for farsi-transliterate-banan.
+
+00:13:05.920 --> 00:13:09.360
+We are back in the ex.fa buffer
+
+00:13:09.360 --> 00:13:11.279
+as one window.
+
+13:11.279 --> 13:13.839
+We don't need the keycast logging
+
+13:13.839 --> 13:17.040
+and the dribble windows any more.
+
+13:17.040 --> 13:20.320
+With the C-\, I reactivate
+
+13:20.320 --> 13:23.360
+the farsi input method.
+
+13:23.360 --> 00:13:26.399
+Notice that keycast is still active
+
+00:13:26.399 --> 00:13:29.360
+on the mode line.
+
+13:29.360 --> 00:13:34.240
+Next, with the C-h C-\ ,
+
+00:13:34.240 --> 00:13:38.560
+I get the input methods documentation.
+
+13:38.560 --> 00:13:40.639
+I then delete other windows
+
+00:13:40.639 --> 00:13:45.440
+and keep the help buffer visible.
+
+13:45.440 --> 00:13:47.279
+Notice that beh
+
+00:13:47.279 --> 00:13:52.720
+in this input methods identifier.
+
+13:52.720 --> 13:55.920
+Here is the URL for full documentation
+
+13:55.920 --> 00:14:00.639
+on the web. The keyboard layout itself
+
+00:14:00.639 --> 00:14:03.760
+is a one-to-one mapping, but towards
+
+00:14:03.760 --> 00:14:07.360
+making transliteration intuitive.
+
+14:07.360 --> 14:10.240
+Multiple keys are sometimes mapped to
+
+14:10.240 --> 14:12.079
+the same letter.
+
+14:12.079 --> 00:14:19.760
+For example, both 'i' and 'y' produce yeh.
+
+14:19.760 --> 14:22.959
+The usual two letter transliterations
+
+14:22.959 --> 00:14:29.600
+ending with 'h' -- zh, ch, sh, and kh
+
+00:14:29.600 --> 00:14:34.160
+are provided. The ampersand prefix
+
+00:14:34.160 --> 00:14:37.440
+is used to support often invisible
+
+14:37.440 --> 00:14:41.600
+BIDI markings. In addition to this
+
+00:14:41.600 --> 00:14:43.920
+internal documentation,
+
+00:14:43.920 --> 00:14:48.958
+full documentation is also available.
+
+14:48.959 --> 00:14:50.560
+Complete documentation
+
+00:14:50.560 --> 00:14:52.240
+for Persian input methods
+
+00:14:52.240 --> 00:14:58.560
+is available as PLPC-120036.
+
+14:58.560 --> 00:15:00.880
+Next, we'll take a quick look at this
+
+00:15:00.880 --> 00:15:03.600
+on the web.
+
+15:03.600 --> 00:15:05.440
+You can click on links
+
+00:15:05.440 --> 00:15:07.440
+in the reveal web-based form
+
+00:15:07.440 --> 00:15:09.839
+of this presentation.
+
+15:09.839 --> 15:15.440
+So let's visit PLPC-120036.
+
+15:15.440 --> 00:15:17.600
+This document fully describes
+
+00:15:17.600 --> 00:15:20.560
+Persian input methods.
+
+15:20.560 --> 00:15:22.320
+In addition to HTML,
+
+00:15:22.320 --> 00:15:26.079
+you can also obtain it in PDF.
+
+00:15:26.079 --> 00:15:30.079
+Let's do that. Of particular interest
+
+00:15:30.079 --> 00:15:33.120
+in this document are various tables
+
+15:33.120 --> 00:15:35.839
+that enumerate lists of letters
+
+00:15:35.839 --> 00:15:37.120
+with their association
+
+00:15:37.120 --> 00:15:41.839
+to both Persian input methods.
+
+15:41.839 --> 15:46.240
+Let's take a look at a few of these.
+
+15:46.240 --> 00:15:51.360
+Table 3, mapping of isiri-6219
+
+15:51.360 --> 15:53.680
+(the Farsi character set)
+
+15:53.680 --> 00:15:55.680
+to Emacs version input methods
+
+00:15:55.680 --> 00:15:58.720
+could be of interest to you,
+
+15:58.720 --> 16:01.040
+as well as table 8
+
+16:01.040 --> 16:04.720
+for BIDI-related control markups,
+
+16:04.720 --> 00:16:17.518
+and table 9, for vowels and other signs.
+
+16:17.519 --> 00:16:19.759
+Having covered input methods,
+
+00:16:19.759 --> 00:16:21.279
+let's turn our attention
+
+00:16:21.279 --> 00:16:25.199
+to ramifications of BIDI and Perso-Arabic
+
+00:16:25.199 --> 00:16:28.480
+on various Emacs applications.
+
+16:28.480 --> 00:16:32.160
+Since 2012, I have been using Persian text
+
+00:16:32.160 --> 00:16:35.839
+in various Emacs applications.
+
+16:35.839 --> 00:16:38.079
+In short, my experience has been
+
+00:16:38.079 --> 00:16:42.399
+that most Emacs apps are usable,
+
+16:42.399 --> 16:44.880
+but they all have glitches
+
+16:44.880 --> 00:16:47.279
+that could at a minimum
+
+00:16:47.279 --> 00:16:51.279
+annoy Perso-Arabic users.
+
+16:51.279 --> 16:54.639
+In this slide, I'm presenting a summary.
+
+16:54.639 --> 00:16:56.399
+The glitches with Gnus
+
+00:16:56.399 --> 00:17:00.079
+are not all that significant for me.
+
+17:00.079 --> 17:04.240
+BBDB glitches can easily be fixed.
+
+17:04.240 --> 00:17:07.679
+For Calendar, I have customized my own setup
+
+00:17:07.679 --> 00:17:10.799
+to support Persian and Islamic dates
+
+00:17:10.799 --> 00:17:14.079
+in Perso-Arabic. Perhaps they should be
+
+00:17:14.079 --> 00:17:17.039
+merged upstream, instead of
+
+00:17:17.039 --> 00:17:19.679
+dealing with apps one at a time.
+
+00:17:19.679 --> 00:17:21.439
+I think it's more reasonable
+
+00:17:21.439 --> 00:17:25.279
+to consider them collectively.
+
+17:25.280 --> 00:17:26.880
+The glitches that I mentioned
+
+00:17:26.880 --> 00:17:28.799
+in the previous slide
+
+17:28.799 --> 17:30.480
+have two routes:
+
+17:30.480 --> 17:32.480
+some are BIDI-specific
+
+17:32.480 --> 17:35.919
+and some are Perso-Arabic-specific.
+
+17:35.919 --> 00:17:36.720
+In this slide,
+
+00:17:36.720 --> 00:17:39.280
+I have classified them as such
+
+17:39.280 --> 17:42.960
+and have made some general suggestions,
+
+17:42.960 --> 00:17:45.679
+but all of these at best amount to
+
+00:17:45.679 --> 00:17:47.679
+tactical approaches.
+
+17:47.679 --> 00:17:50.160
+I think a more strategic approach
+
+00:17:50.160 --> 00:17:53.519
+is called for.
+
+17:53.520 --> 17:56.240
+The right way to address BIDI-awareness
+
+17:56.240 --> 17:58.559
+and other awarenesses
+
+17:58.559 --> 00:18:00.559
+is to build them in frameworks
+
+00:18:00.559 --> 00:18:04.160
+that Emacs apps can then use.
+
+18:04.160 --> 00:18:08.480
+So, I'm proposing that we first create ENML,
+
+00:18:08.480 --> 00:18:11.520
+the Emacs Native Markup Language,
+
+00:18:11.520 --> 00:18:16.880
+as a Lisp-ish (perhaps even not fully secure)
+
+18:16.880 --> 18:20.320
+super-set of HTML5.
+
+18:20.320 --> 18:22.960
+With that in place, we can then build on
+
+18:22.960 --> 00:18:25.360
+the two decades of experience
+
+00:18:25.360 --> 00:18:27.600
+that have produced various
+
+00:18:27.600 --> 00:18:31.039
+web application development frameworks
+
+18:31.039 --> 18:33.919
+by mimicking one of them.
+
+18:33.919 --> 00:18:35.679
+I don't have any running code
+
+00:18:35.679 --> 00:18:39.440
+for any of these, but discussing strategy
+
+00:18:39.440 --> 00:18:44.639
+need not always be futile.
+
+18:44.640 --> 18:47.679
+Emacs has immense potentials,
+
+18:47.679 --> 18:51.120
+but those potentials cannot be realized
+
+18:51.120 --> 00:18:54.640
+unless we integrate Emacs in the totality
+
+00:18:54.640 --> 00:18:59.840
+of a specific complete digital ecosystem.
+
+18:59.840 --> 19:02.000
+Over the past two decades, I've been
+
+19:02.000 --> 00:19:03.440
+building the contours
+
+00:19:03.440 --> 00:19:06.240
+of The Libre-Halaal By* (ByStar)
+
+00:19:06.240 --> 00:19:10.240
+digital ecosystem.
+
+19:10.240 --> 19:13.039
+Emacs can then be fully integrated into
+
+19:13.039 --> 00:19:16.799
+ByStar. It's through such integration
+
+00:19:16.799 --> 00:19:19.679
+that full conviviality of Emacs
+
+00:19:19.679 --> 00:19:24.239
+can be experienced.
+
+19:24.240 --> 00:19:26.640
+Blee, the ByStar Libre-Halaal
+
+00:19:26.640 --> 00:19:30.000
+Emacs environment is Emacs
+
+00:19:30.000 --> 00:19:32.720
+plus a whole lot of Emacs apps
+
+00:19:32.720 --> 00:19:34.880
+integrated with Debian,
+
+00:19:34.880 --> 00:19:38.320
+With ByStar services and with BISOS,
+
+00:19:38.320 --> 00:19:42.480
+the ByStar Internet Services OS.
+
+19:42.480 --> 00:19:43.600
+Perhaps this could be
+
+00:19:43.600 --> 00:19:45.840
+the topic of a presentation
+
+00:19:45.840 --> 00:19:46.840
+for the 2022 Emacs Conference.
+
+00:19:46.840 --> 00:19:51.559
+[captions by Mohsen Banan]
diff --git a/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt b/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt
new file mode 100644
index 00000000..16c3fb37
--- /dev/null
+++ b/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt
@@ -0,0 +1,34 @@
+WEBVTT
+
+00:00:01.360 --> 00:02:06.006
+Introduction
+
+00:02:06.007 --> 00:05:27.537
+What is BinDat?
+
+00:05:27.538 --> 00:08:30.748
+Conversion to lexical scoping
+
+00:08:30.749 --> 00:15:35.890
+The BinDat specification
+
+00:15:35.891 --> 00:17:47.579
+New design
+
+00:17:47.580 --> 00:19:30.225
+Documentation
+
+00:19:30.226 --> 00:21:51.272
+Advantages
+
+00:21:51.273 --> 00:23:08.077
+New features
+
+00:23:08.078 --> 00:27:56.093
+Examples
+
+00:27:56.094 --> 00:28:28.335
+Conclusion
+
+00:28:28.336 --> 00:28:29.336
+Negatives
diff --git a/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt b/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt
new file mode 100644
index 00000000..3eb2b4ed
--- /dev/null
+++ b/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt
@@ -0,0 +1,1855 @@
+WEBVTT
+
+00:01.360 --> 00:04.080
+Hi. So I'm going to talk today
+
+00:04.180 --> 00:10.000
+about a fun rewrite I did of the BinDat package.
+
+00:10.000 --> 00:00:12.400
+I call this Turbo BinDat.
+
+00:00:12.400 --> 00:00:14.001
+Actually, the package hasn't changed name,
+
+00:14.101 --> 00:16.801
+it's just that the result happens to be faster.
+
+00:16.901 --> 00:19.521
+The point was not to make it faster though,
+
+00:19.621 --> 00:22.241
+and the point was not to make you understand
+
+00:22.341 --> 00:23.440
+that data is not code.
+
+00:23.540 --> 00:27.120
+It's just one more experience I've had
+
+00:27.120 --> 00:31.280
+where I've seen that treating data as code
+
+00:31.381 --> 00:33.522
+is not always a good idea.
+
+00:33.622 --> 00:36.162
+It's important to keep the difference.
+
+00:36.162 --> 00:38.880
+So let's get started.
+
+00:38.881 --> 00:40.642
+So what is BinDat anyway?
+
+00:40.742 --> 00:43.602
+Here's just the overview of basically
+
+00:43.602 --> 00:44.962
+what I'm going to present.
+
+00:45.062 --> 00:47.842
+So I'm first going to present BinDat itself
+
+00:47.843 --> 00:00:49.039
+for those who don't know it,
+
+00:00:49.039 --> 00:00:51.923
+which is probably the majority of you.
+
+00:51.923 --> 00:55.363
+Then I'm going to talk about the actual problems
+
+00:55.363 --> 00:58.882
+that I encountered with this package
+
+00:58.882 --> 01:01.843
+that motivated me to rewrite it.
+
+01:01.843 --> 01:05.043
+Most of them were lack of flexibility,
+
+01:05.044 --> 01:09.924
+and some of it was just poor behavior
+
+01:09.924 --> 01:13.364
+with respect to scoping and variables,
+
+01:13.364 --> 01:16.324
+which of course, you know, is bad --
+
+01:16.424 --> 01:20.724
+basically uses of eval or, "eval is evil."
+
+01:20.724 --> 01:24.884
+Then I'm going to talk about the new design --
+
+01:24.985 --> 01:28.005
+how I redesigned it
+
+01:28.105 --> 01:31.365
+to make it both simpler and more flexible,
+
+01:31.365 --> 01:32.965
+and where the key idea was
+
+01:33.065 --> 01:35.205
+to expose code as code
+
+01:35.305 --> 01:37.525
+instead of having it as data,
+
+01:37.625 --> 01:39.605
+and so here the distinction between the two
+
+01:39.706 --> 01:44.085
+is important and made things simpler.
+
+01:44.085 --> 01:46.405
+I tried to keep efficiency in mind,
+
+01:46.405 --> 01:52.405
+which resulted in some of the aspects of the design
+
+01:52.505 --> 01:54.886
+which are not completely satisfactory,
+
+01:54.886 --> 01:57.046
+but the result is actually fairly efficient.
+
+01:57.146 --> 01:59.286
+Even though it was not the main motivation,
+
+01:59.287 --> 02:02.967
+it was one of the nice outcomes.
+
+02:02.967 --> 00:02:06.006
+And then I'm going to present some examples.
+
+02:06.007 --> 02:08.167
+So first: what is BinDat?
+
+02:08.267 --> 02:10.567
+Oh actually, rather than present THIS,
+
+02:10.667 --> 02:12.407
+I'm going to go straight to the code,
+
+02:12.507 --> 02:14.246
+because BinDat actually had
+
+02:14.346 --> 02:16.647
+an introduction which was fairly legible.
+
+02:16.748 --> 02:21.128
+So here we go: this is the old BinDat from Emacs 27
+
+02:21.128 --> 02:23.448
+and the commentary starts by explaining
+
+02:23.448 --> 02:25.848
+what is BinDat? Basically BinDat is a package
+
+02:25.948 --> 02:30.247
+that lets you parse and unparse
+
+02:30.247 --> 02:31.527
+basically binary data.
+
+02:31.627 --> 02:34.648
+The intent is to have typically network data
+
+02:34.749 --> 02:35.849
+or something like this.
+
+02:35.949 --> 02:38.328
+So assuming you have network data,
+
+02:38.328 --> 02:41.528
+presented or defined
+
+02:41.628 --> 02:44.569
+with some kind of C-style structs, typically,
+
+02:44.669 --> 02:46.009
+or something along these lines.
+
+02:46.109 --> 02:49.120
+So you presumably start with documentation
+
+02:49.120 --> 02:52.809
+that presents something like those structs here,
+
+02:52.810 --> 02:57.130
+and you want to be able to generate such packets
+
+02:57.230 --> 03:00.249
+and read such packets,
+
+03:00.349 --> 03:02.090
+so the way you do it is
+
+03:02.190 --> 03:04.570
+you rewrite those specifications
+
+03:04.670 --> 03:06.010
+into the BinDat syntax.
+
+03:06.110 --> 03:07.529
+So here's the BinDat syntax
+
+03:07.529 --> 03:10.490
+for the the previous specification.
+
+03:10.491 --> 03:11.610
+So here, for example,
+
+03:11.610 --> 03:16.970
+you see the case for a data packet
+
+03:16.970 --> 03:20.411
+which will have a 'type' field which is a byte
+
+03:20.411 --> 03:24.091
+(an unsigned 8-bit entity),
+
+03:24.091 --> 03:26.411
+then an 'opcode' which is also a byte,
+
+03:26.411 --> 03:30.731
+then a 'length' which is a 16-bit unsigned integer
+
+03:30.732 --> 03:34.092
+in little endian order,
+
+03:34.092 --> 03:38.732
+and then some 'id' for this entry, which is
+
+03:38.732 --> 03:43.531
+8 bytes containing a zero-terminated string,
+
+03:43.531 --> 03:47.531
+and then the actual data, basically the payload,
+
+03:47.532 --> 03:51.453
+which is in this case a vector of bytes,
+
+03:51.453 --> 03:54.812
+('bytes' here doesn't doesn't need to be specified)
+
+03:54.812 --> 03:58.172
+and here we specify the length of this vector.
+
+03:58.172 --> 03:59.773
+This 'length' here
+
+03:59.773 --> 04:02.252
+happens to be actually the name of THIS field,
+
+04:02.252 --> 04:03.853
+so the length of the data
+
+04:03.854 --> 04:06.574
+is specified by the 'length' field here,
+
+04:06.574 --> 04:08.574
+and BinDat will understand this part,
+
+04:08.574 --> 04:12.333
+which is the the nice part of BinDat.
+
+04:12.333 --> 04:15.774
+And then you have an alignment field at the end,
+
+04:15.774 --> 04:18.253
+which is basically padding.
+
+04:18.253 --> 04:20.574
+It says that it is padded
+
+04:20.575 --> 04:23.295
+until the next multiple of four.
+
+04:23.295 --> 04:25.855
+Okay. So this works reasonably well.
+
+04:25.855 --> 04:27.455
+This is actually very nice.
+
+04:27.455 --> 04:30.335
+With this, you can then call
+
+04:30.335 --> 04:32.975
+bindat-pack or bindat-unpack,
+
+04:32.975 --> 04:37.774
+passing it a string, or passing it an alist,
+
+04:37.774 --> 04:40.415
+to do the packing and unpacking.
+
+04:40.416 --> 04:43.296
+So, for example, if you take this string--
+
+04:43.296 --> 04:45.856
+actually, in this case, it's a vector of bytes
+
+04:45.856 --> 04:49.456
+but it works the same; it works in both ways--
+
+04:49.456 --> 04:53.536
+if you pass this to bindat-unpack,
+
+04:53.536 --> 04:57.456
+it will presumably return you this structure
+
+04:57.457 --> 05:00.017
+if you've given it the corresponding type.
+
+05:00.017 --> 05:01.776
+So it will extract--
+
+05:01.776 --> 05:05.617
+you will see that there is an IP address,
+
+05:05.617 --> 05:08.017
+which is a destination IP, a source IP,
+
+05:08.017 --> 05:09.857
+and some port number,
+
+05:09.857 --> 05:12.977
+and some actual data here and there, etc.
+
+05:12.977 --> 05:18.017
+So this is quite convenient if you need to do this,
+
+05:18.018 --> 05:20.898
+and that's what it was designed for.
+
+05:20.898 --> 00:05:27.537
+So here we are. Let's go back to the actual talk.
+
+05:27.538 --> 05:34.338
+I converted BinDat to lexical scoping at some point
+
+05:34.339 --> 05:37.299
+and things seemed to work fine,
+
+05:37.299 --> 05:42.819
+except, at some point, probably weeks later,
+
+05:42.819 --> 05:47.139
+I saw a bug report
+
+05:47.139 --> 05:53.058
+about the new version using lexical scoping
+
+05:53.059 --> 05:56.339
+not working correctly with WeeChat.
+
+05:56.339 --> 06:00.580
+So here's the actual chunk of code
+
+06:00.580 --> 06:02.820
+that appears in WeeChat.
+
+06:02.820 --> 06:08.420
+Here you see that they also define a BinDat spec.
+
+06:08.421 --> 06:14.741
+It's a packet that has a 32-bit unsigned length,
+
+06:14.741 --> 06:18.500
+then some compression byte/compression information,
+
+06:18.500 --> 06:23.780
+then an id which contains basically another struct
+
+06:23.780 --> 06:26.901
+(which is specified elsewhere; doesn't matter here),
+
+06:26.902 --> 06:28.661
+and after that, a vector
+
+06:28.661 --> 06:33.382
+whose size is not just specified by 'length',
+
+06:33.382 --> 06:35.142
+but is computed from 'length'.
+
+06:35.142 --> 06:39.142
+So here's how they used to compute it in WeeChat.
+
+06:39.142 --> 06:42.822
+So the length here can be specified in BinDat.
+
+06:42.822 --> 06:43.941
+Instead of having
+
+06:43.942 --> 06:45.863
+just a reference to one of the fields,
+
+06:45.863 --> 06:48.903
+or having a constant, you can actually compute it,
+
+06:48.903 --> 06:52.502
+where you have to use this '(eval',
+
+06:52.502 --> 06:54.743
+and then followed by the actual expression
+
+06:54.743 --> 06:58.103
+where you say how you compute it.
+
+06:58.103 --> 07:01.463
+And here you see that it actually computes it
+
+07:01.464 --> 07:04.904
+based on the 'length of the structure --
+
+07:04.904 --> 07:07.783
+that's supposed to be this 'length' field here --
+
+07:07.783 --> 07:11.223
+and it's referred to using the bindat-get-field
+
+07:11.223 --> 07:14.503
+to extract the field from the variable 'struct'.
+
+07:14.503 --> 07:17.943
+And then it subtracts four, it subtracts one,
+
+07:17.943 --> 07:19.467
+and adds some other things
+
+07:19.468 --> 07:22.185
+which depend on some field
+
+07:22.185 --> 07:26.905
+that's found in this 'id' field here.
+
+07:26.905 --> 07:28.425
+And the problem with this code
+
+07:28.425 --> 07:30.425
+was that it broke
+
+07:30.425 --> 07:32.745
+because of this 'struct' variable here,
+
+07:32.745 --> 07:35.145
+because this 'struct' variable is not defined
+
+07:35.145 --> 07:38.105
+anywhere in the specification of BinDat.
+
+07:38.106 --> 07:41.866
+It was used internally as a local variable,
+
+07:41.866 --> 07:45.306
+and because it was using dynamic scoping,
+
+07:45.306 --> 07:47.386
+it actually happened to be available here,
+
+07:47.386 --> 07:50.826
+but the documentation nowhere specifies it.
+
+07:50.826 --> 07:52.506
+So it was not exactly
+
+07:52.506 --> 07:55.546
+a bug of the conversion to lexical scoping,
+
+07:55.547 --> 07:58.906
+but it ended up breaking this code.
+
+07:58.906 --> 08:01.226
+And there was no way to actually
+
+08:01.226 --> 08:05.066
+fix the code within the specification of BinDat.
+
+08:05.066 --> 08:08.287
+You had to go outside the specification of BinDat
+
+08:08.287 --> 08:10.427
+to fix this problem.
+
+08:10.427 --> 08:14.346
+This is basically how I started looking at BinDat.
+
+08:14.347 --> 08:17.808
+Then I went to actually investigate a bit more
+
+08:17.808 --> 08:19.627
+what was going on,
+
+08:19.627 --> 08:22.108
+and the thing I noticed along the way
+
+08:22.108 --> 08:25.787
+was basically that the specification of BinDat
+
+08:25.787 --> 08:29.528
+is fairly complex and has a lot of eval
+
+08:29.528 --> 08:30.748
+and things like this.
+
+08:30.749 --> 08:32.288
+So let's take a look
+
+08:32.288 --> 08:35.068
+at what the BinDat specification looks like.
+
+08:35.068 --> 08:36.589
+So here it's actually documented
+
+08:36.589 --> 08:40.269
+as a kind of grammar rules.
+
+08:40.269 --> 08:45.308
+A specification is basically a sequence of items,
+
+08:45.308 --> 08:47.389
+and then each of the items is basically
+
+08:47.389 --> 08:51.248
+a FIELD of a struct, so it has a FIELD name,
+
+08:51.249 --> 08:53.249
+and then a TYPE.
+
+08:53.249 --> 08:54.510
+Instead of a TYPE,
+
+08:54.510 --> 08:56.590
+it could have some other FORM for eval,
+
+08:56.590 --> 08:58.989
+which was basically never used as far as I know,
+
+08:58.989 --> 09:00.190
+or it can be some filler,
+
+09:00.190 --> 09:02.750
+or you can have some 'align' specification,
+
+09:02.750 --> 09:05.150
+or you can refer to another struct.
+
+09:05.150 --> 09:07.390
+It could also be some kind of union,
+
+09:07.391 --> 09:10.430
+or it can be some kind of repetition of something.
+
+09:10.430 --> 09:12.430
+And then you have the TYPE specified here,
+
+09:12.430 --> 09:18.271
+which can be some integers, strings, or a vector,
+
+09:18.271 --> 09:21.631
+and there are a few other special cases.
+
+09:21.631 --> 09:25.310
+And then the actual field itself
+
+09:25.311 --> 09:28.192
+can be either a NAME, or something that's computed,
+
+09:28.192 --> 09:30.752
+and then everywhere here, you have LEN,
+
+09:30.752 --> 00:09:32.480
+which specifies the length of vectors,
+
+00:09:32.480 --> 00:09:34.672
+for example, or length of strings.
+
+09:34.672 --> 09:37.632
+This is actually either nil to mean one,
+
+09:37.632 --> 09:39.072
+or it can be an ARG,
+
+09:39.072 --> 09:40.952
+where ARG is defined to be
+
+09:40.952 --> 09:42.672
+either an integer or DEREF,
+
+09:42.673 --> 09:46.673
+where DEREF is basically a specification
+
+09:46.673 --> 09:48.833
+that can refer, for example, to the 'length' field
+
+09:48.833 --> 09:51.956
+-- that's what we saw between parentheses: (length)
+
+09:51.956 --> 09:56.273
+was this way to refer to the 'length' field.
+
+09:56.273 --> 09:59.793
+Or it can be an expression, which is what we saw
+
+09:59.794 --> 10:02.834
+in the computation of the length for WeeChat,
+
+10:02.834 --> 10:04.914
+where you just had a '(eval'
+
+10:04.914 --> 10:06.334
+and then some computation
+
+10:06.334 --> 10:10.274
+of the length of the payload.
+
+10:10.274 --> 10:12.354
+And so if you look here, you see that
+
+10:12.354 --> 10:14.674
+it is fairly large and complex,
+
+10:14.674 --> 10:18.514
+and it uses eval everywhere. And actually,
+
+10:18.515 --> 10:20.675
+it's not just that it has eval in its syntax,
+
+10:20.675 --> 10:23.395
+but the implementation has to use eval everywhere,
+
+10:23.395 --> 10:25.314
+because, if you go back
+
+10:25.314 --> 10:27.475
+to see the kind of code we see,
+
+10:27.475 --> 10:29.538
+we see here we just define
+
+10:29.538 --> 10:34.195
+weechat--relay-message-spec as a constant!
+
+10:34.195 --> 10:37.314
+It's nothing than just data, right?
+
+10:37.315 --> 10:38.836
+So within this data
+
+10:38.836 --> 10:41.076
+there are things we need to evaluate,
+
+10:41.076 --> 10:42.356
+but it's pure data,
+
+10:42.356 --> 10:44.356
+so it will have to be evaluated
+
+10:44.356 --> 10:46.596
+by passing it to eval. It can't be compiled,
+
+10:46.596 --> 10:50.196
+because it's within a quote, right?
+
+10:50.196 --> 10:52.836
+And so for that reason, kittens really
+
+10:52.837 --> 10:55.956
+suffer terribly with uses of BinDat.
+
+10:55.956 --> 10:59.957
+You really have to be very careful with that.
+
+10:59.957 --> 11:02.037
+More seriously,
+
+11:02.037 --> 11:05.157
+the 'struct' variable was not documented,
+
+11:05.157 --> 11:07.797
+and yet it's indispensable
+
+11:07.797 --> 11:08.996
+for important applications,
+
+11:08.996 --> 11:11.157
+such as using in WeeChat.
+
+11:11.158 --> 11:13.078
+So clearly this needs to be fixed.
+
+11:13.078 --> 11:15.481
+Of course, we can just document 'struct'
+
+11:15.481 --> 11:18.038
+as some variable that's used there,
+
+11:18.038 --> 11:19.798
+but of course we don't want to do that,
+
+11:19.798 --> 11:23.398
+because 'struct' is not obviously
+
+11:23.398 --> 11:25.398
+a dynamically scoped variable,
+
+11:25.398 --> 11:29.317
+so it's not very clean.
+
+11:29.318 --> 11:31.939
+Also other problems I noticed was that the grammar
+
+11:31.939 --> 11:35.239
+is significantly more complex than necessary.
+
+11:35.239 --> 11:38.199
+We have nine distinct non-terminals.
+
+11:38.199 --> 11:39.639
+There is ambiguity.
+
+11:39.639 --> 11:44.919
+If you try to use a field whose name is 'align',
+
+11:44.919 --> 11:48.679
+or 'fill', or something like this,
+
+11:48.680 --> 11:50.920
+then it's going to be misinterpreted,
+
+11:50.920 --> 11:54.920
+or it can be misinterpreted.
+
+11:54.920 --> 11:58.760
+The vector length can be either an expression,
+
+11:58.760 --> 12:02.280
+or an integer, or a reference to a label,
+
+12:02.280 --> 12:03.720
+but the expression
+
+12:03.720 --> 12:06.360
+should already be the general case,
+
+12:06.361 --> 12:08.041
+and this expression can itself be
+
+12:08.041 --> 12:09.401
+just a constant integer,
+
+12:09.401 --> 12:13.961
+so this complexity is probably not indispensable,
+
+12:13.961 --> 12:15.641
+or it could be replaced with something simpler.
+
+12:15.641 --> 12:17.401
+That's what I felt like.
+
+12:17.401 --> 12:19.161
+And basically lots of places
+
+12:19.161 --> 12:21.721
+allow an (eval EXP) form somewhere
+
+12:21.721 --> 12:25.081
+to open up the door for more flexibility,
+
+12:25.082 --> 12:26.922
+but not all of them do,
+
+12:26.922 --> 12:29.482
+and we don't really want
+
+12:29.482 --> 12:31.001
+to have this eval there, right?
+
+12:31.001 --> 12:33.802
+It's not very convenient syntactically either.
+
+12:33.802 --> 12:36.042
+So it makes the uses of eval
+
+12:36.042 --> 12:38.362
+a bit heavier than they need to be,
+
+12:38.362 --> 12:41.722
+and so I didn't really like this part.
+
+12:41.723 --> 12:42.603
+Another part is that
+
+12:42.603 --> 12:45.183
+when I tried to figure out what was going on,
+
+12:45.183 --> 12:46.666
+[dog barks and distracts Stefan]
+
+12:46.666 --> 12:50.043
+I had trouble... Winnie as well, as you can hear.
+
+12:50.043 --> 12:50.923
+She had trouble as well.
+
+12:50.923 --> 12:53.083
+But one of the troubles was that
+
+12:53.083 --> 12:55.002
+there was no way to debug the code
+
+12:55.002 --> 12:57.562
+via Edebug, because it's just data,
+
+12:57.562 --> 13:00.523
+so Edebug doesn't know that it has to look at it
+
+13:00.524 --> 13:02.683
+and instrument it.
+
+13:02.683 --> 13:05.644
+And of course it was not conveniently extensible.
+
+13:05.644 --> 13:07.164
+That's also one of the things
+
+13:07.164 --> 13:08.487
+I noticed along the way.
+
+13:09.084 --> 13:12.844
+Okay, so here's an example of
+
+13:12.844 --> 13:15.484
+problems not that I didn't just see there,
+
+13:15.485 --> 13:18.684
+but that were actually present in code.
+
+13:18.684 --> 13:22.124
+I went to look at code that was using BinDat
+
+13:22.124 --> 13:24.285
+to see what uses looked like,
+
+13:24.285 --> 13:28.765
+and I saw that BinDat was not used very heavily,
+
+13:28.765 --> 13:30.365
+but some of the main uses
+
+13:30.365 --> 13:33.884
+were just to read and write integers.
+
+13:33.885 --> 13:37.565
+And here you can see a very typical case.
+
+13:37.565 --> 13:41.726
+This is also coming from WeeChat.
+
+13:41.726 --> 13:43.565
+We do a bindat-get-field
+
+13:43.565 --> 13:48.445
+of the length of some struct we read.
+
+13:48.445 --> 13:50.685
+Actually, the struct we read is here.
+
+13:50.685 --> 13:51.646
+It has a single field,
+
+13:51.647 --> 13:53.006
+because the only thing we want to do
+
+13:53.006 --> 13:56.287
+is actually to unpack a 32-bit integer,
+
+13:56.287 --> 13:58.287
+but the only way we can do that
+
+13:58.287 --> 14:01.647
+is by specifying a struct with one field.
+
+14:01.647 --> 14:04.847
+And so we have to extract this struct of one field,
+
+14:04.847 --> 14:07.246
+which constructs an alist
+
+14:07.246 --> 14:09.647
+containing the actual integer,
+
+14:09.648 --> 14:11.887
+and then we just use get-field to extract it.
+
+14:11.887 --> 14:15.007
+So this doesn't seem very elegant
+
+14:15.007 --> 14:16.528
+to have to construct an alist
+
+14:16.528 --> 14:20.368
+just to then extract the integer from it.
+
+14:20.368 --> 14:21.648
+Same thing if you try to pack it:
+
+14:21.648 --> 14:25.007
+you first have to construct the alist
+
+14:25.007 --> 14:31.247
+to pass it to bindat-pack unnecessarily.
+
+14:31.248 --> 14:33.248
+Another problem that I saw in this case
+
+14:33.248 --> 14:35.729
+(it was in the websocket package)
+
+14:35.729 --> 14:39.568
+was here, where they actually have a function
+
+14:39.568 --> 14:41.169
+where they need to write
+
+14:41.169 --> 14:43.888
+an integer of a size that will vary
+
+14:43.888 --> 14:45.888
+depending on the circumstances.
+
+14:45.889 --> 14:49.650
+And so they have to test the value of this integer,
+
+14:49.650 --> 14:52.210
+and depending on which one it is,
+
+14:52.210 --> 14:54.449
+they're going to use different types.
+
+14:54.449 --> 14:56.290
+So here it's a case
+
+14:56.290 --> 14:59.490
+where we want to have some kind of way to eval --
+
+14:59.490 --> 15:02.530
+to compute the length of the integer --
+
+15:02.531 --> 15:08.130
+instead of it being predefined or fixed.
+
+15:08.130 --> 15:10.211
+So this is one of the cases
+
+15:10.211 --> 15:16.531
+where the lack of eval was a problem.
+
+15:16.531 --> 15:20.051
+And actually in all of websocket,
+
+15:20.051 --> 15:22.611
+BinDat is only used to pack and unpack integers,
+
+15:22.612 --> 15:24.612
+even though there are many more opportunities
+
+15:24.612 --> 15:26.772
+to use BinDat in there.
+
+15:26.772 --> 15:29.331
+But it's not very convenient to use BinDat,
+
+15:29.331 --> 00:15:35.890
+as it stands, for those other cases.
+
+15:35.891 --> 15:39.732
+So what does the new design look like?
+
+15:39.733 --> 15:44.132
+Well in the new design, here's the problematic code
+
+15:44.132 --> 15:46.373
+for WeeChat.
+
+15:46.373 --> 15:49.012
+So we basically have the same fields as before,
+
+15:49.012 --> 15:50.853
+you just see that instead of u32,
+
+15:50.853 --> 15:53.733
+we now have 'uint 32' separately.
+
+15:53.733 --> 15:55.332
+The idea is that now this 32
+
+15:55.332 --> 15:59.093
+can be an expression you can evaluate,
+
+15:59.094 --> 16:04.054
+and so the u8 is also replaced by 'uint 8',
+
+16:04.054 --> 16:07.253
+and the id type is basically the same as before,
+
+16:07.253 --> 16:08.854
+and here another difference we see,
+
+16:08.854 --> 16:11.654
+and the main difference...
+
+16:11.654 --> 16:13.494
+Actually, it's the second main difference.
+
+16:13.494 --> 16:15.174
+The first main difference is that
+
+16:15.175 --> 16:18.694
+we don't actually quote this whole thing.
+
+16:18.694 --> 16:23.095
+Instead, we pass it to the bindat-type macro.
+
+16:23.095 --> 16:25.095
+So this is a macro
+
+16:25.095 --> 16:27.574
+that's going to actually build the type.
+
+16:27.574 --> 16:29.254
+This is a big difference
+
+16:29.254 --> 16:30.535
+in terms of performance also,
+
+16:30.535 --> 16:32.694
+because by making it a macro,
+
+16:32.695 --> 16:34.296
+we can pre-compute the code
+
+16:34.296 --> 16:37.255
+that's going to pack and unpack this thing,
+
+16:37.255 --> 16:38.936
+instead of having to interpret it
+
+16:38.936 --> 16:41.096
+every time we pack and unpack.
+
+16:41.096 --> 16:43.815
+So this macro will generate more efficient code
+
+16:43.815 --> 16:45.815
+along the way.
+
+16:45.815 --> 16:48.695
+Also it makes the code that appears in here
+
+16:48.695 --> 16:50.296
+visible to the compiler
+
+16:50.297 --> 16:54.617
+because we can give an Edebug spec for it.
+
+16:54.617 --> 16:57.497
+And so here as an argument to vec,
+
+16:57.497 --> 16:59.016
+instead of having to specify
+
+16:59.016 --> 17:00.937
+that this is an evaluated expression,
+
+17:00.937 --> 17:02.777
+we just write the expression directly,
+
+17:02.777 --> 17:05.096
+because all the expressions that appear there
+
+17:05.096 --> 17:07.417
+will just be evaluated,
+
+17:07.418 --> 17:11.418
+and we don't need to use the 'struct' variable
+
+17:11.418 --> 17:14.137
+and then extract the length field from it.
+
+17:14.137 --> 17:16.938
+We can just use length as a variable.
+
+17:16.938 --> 17:18.698
+So this variable 'length' here
+
+17:18.698 --> 17:20.778
+will refer to this field here,
+
+17:20.778 --> 17:23.578
+and then this variable 'id' here
+
+17:23.578 --> 17:25.897
+will refer to this field here,
+
+17:25.898 --> 17:27.738
+and so we can just use the field values
+
+17:27.738 --> 17:30.459
+as local variables, which is very natural
+
+17:30.459 --> 00:17:31.679
+and very efficient also,
+
+00:17:31.679 --> 00:17:34.618
+because the code would actually directly do that,
+
+17:34.618 --> 17:37.899
+and the code that unpacks those data
+
+17:37.899 --> 17:40.299
+will just extract an integer
+
+17:40.299 --> 17:42.219
+and bind it to the length variable,
+
+17:42.219 --> 17:47.579
+and so that makes it immediately available there.
+
+17:47.580 --> 17:51.340
+Okay, let's see also
+
+17:51.340 --> 17:54.220
+what the actual documentation looks like.
+
+17:54.220 --> 17:57.739
+And so if we look at the doc of BinDat,
+
+17:57.739 --> 18:01.180
+we see the actual specification of the grammar.
+
+18:01.181 --> 18:03.181
+And so here we see instead of having
+
+18:03.181 --> 18:06.461
+these nine different non-terminals,
+
+18:06.461 --> 18:08.061
+we basically have two:
+
+18:08.061 --> 18:10.781
+we have the non-terminal for TYPE,
+
+18:10.781 --> 18:15.021
+which can be either a uint, a uintr, or a string,
+
+18:15.021 --> 18:17.421
+or bits, or fill, or align, or vec,
+
+18:17.421 --> 18:19.901
+or those various other forms;
+
+18:19.902 --> 18:22.621
+or it can be a struct, in which case,
+
+18:22.621 --> 18:23.981
+in the case of struct,
+
+18:23.981 --> 18:27.502
+then it will be followed by a sequence --
+
+18:27.502 --> 18:30.142
+a list of FIELDs, where each of the FIELDs
+
+18:30.142 --> 18:33.902
+is basically a LABEL followed by another TYPE.
+
+18:33.902 --> 18:37.342
+And so this makes the whole specification
+
+18:37.343 --> 18:39.823
+much simpler. We don't have any distinction now
+
+18:39.823 --> 18:42.862
+between struct being a special case,
+
+18:42.862 --> 18:46.383
+as opposed to just the normal types.
+
+18:46.383 --> 18:49.263
+struct is just now one of the possible types
+
+18:49.263 --> 18:52.543
+that can appear here.
+
+18:52.543 --> 18:53.263
+The other thing is that
+
+18:53.263 --> 18:55.742
+the LABEL is always present in the structure,
+
+18:55.743 --> 18:58.384
+so there's no ambiguity.
+
+18:58.384 --> 19:00.304
+Also all the above things,
+
+19:00.304 --> 19:03.103
+like the BITLEN we have here,
+
+19:03.103 --> 19:04.384
+the LEN we have here,
+
+19:04.384 --> 19:07.504
+the COUNT for vector we have here,
+
+19:07.504 --> 19:10.224
+these are all plain Elisp expressions,
+
+19:10.224 --> 19:13.024
+so they are implicitly evaluated if necessary.
+
+19:13.025 --> 19:14.705
+If you want them to be constant,
+
+19:14.705 --> 19:16.705
+and really constant, you can just use quotes,
+
+19:16.705 --> 19:20.145
+for those rare cases where it's necessary.
+
+19:20.145 --> 19:21.905
+Another thing is that you can extend it
+
+19:21.905 --> 19:25.505
+with with bindat-defmacro.
+
+19:25.505 --> 19:30.225
+Okay, let's go back here.
+
+19:30.226 --> 19:32.706
+So what are the advantages of this approach?
+
+19:32.706 --> 19:34.625
+As I said, one of the main advantages
+
+19:34.625 --> 19:39.346
+is that we now have support for Edebug.
+
+19:39.346 --> 19:41.426
+We don't have 'struct', 'repeat', and 'align'
+
+19:41.426 --> 19:42.946
+as special cases anymore.
+
+19:42.946 --> 19:44.625
+These are just normal types.
+
+19:44.625 --> 19:48.066
+Before, there was uint as type, int as type,
+
+19:48.067 --> 19:49.267
+and those kinds of things.
+
+19:49.267 --> 19:51.110
+'struct' and 'repeat' and 'align'
+
+19:51.110 --> 19:53.267
+were in a different case.
+
+19:53.267 --> 19:54.387
+So there were
+
+19:54.387 --> 19:56.787
+some subtle differences between those
+
+19:56.787 --> 19:59.027
+that completely disappeared.
+
+19:59.027 --> 20:02.626
+Also in the special cases, there was 'union',
+
+20:02.626 --> 20:05.027
+and union now has completely disappeared.
+
+20:05.027 --> 20:07.827
+We don't need it anymore, because instead,
+
+20:07.828 --> 20:09.588
+we can actually use code anywhere.
+
+20:09.588 --> 20:11.908
+That's one of the things I didn't mention here,
+
+20:11.908 --> 20:17.268
+but in this note here,
+
+20:17.268 --> 20:19.747
+that's one of the important notes.
+
+20:19.747 --> 20:21.987
+Not only are BITLEN, LEN, COUNT etc.
+
+20:21.987 --> 20:23.028
+Elisp expressions,
+
+20:23.028 --> 20:26.788
+but the type itself -- any type itself --
+
+20:26.789 --> 20:29.029
+is basically an expression.
+
+20:29.029 --> 20:32.709
+And so you can, instead of having 'uint BITLEN',
+
+20:32.709 --> 20:36.628
+you can have '(if blah-blah-blah uint string)',
+
+20:36.628 --> 20:38.149
+and so you can have a field
+
+20:38.149 --> 20:40.549
+that can be either string or an int,
+
+20:40.549 --> 20:44.789
+depending on some condition.
+
+20:44.790 --> 20:46.869
+And for that reason we don't need a union.
+
+20:46.869 --> 20:47.910
+Instead of having a union,
+
+20:47.910 --> 20:50.710
+we can just have a 'cond' or a 'pcase'
+
+20:50.710 --> 20:53.590
+that will return the type we want to use,
+
+20:53.590 --> 20:55.109
+depending on the context,
+
+20:55.109 --> 21:00.950
+which will generally depend on some previous field.
+
+21:00.951 --> 21:03.750
+Also we don't need to use single-field structs
+
+21:03.750 --> 21:05.351
+for simple types anymore,
+
+21:05.351 --> 21:09.271
+because there's no distinction between struct
+
+21:09.271 --> 21:11.271
+and other types.
+
+21:11.271 --> 21:17.191
+So we can pass to bindat-pack and bindat-unpack
+
+21:17.191 --> 21:20.951
+a specification which just says "here's an integer"
+
+21:20.952 --> 21:24.392
+and we'll just pack and unpack the integer.
+
+21:24.392 --> 21:26.472
+And of course now all the code is exposed,
+
+21:26.472 --> 21:29.192
+so not only Edebug works, but also Flymake,
+
+21:29.192 --> 21:30.392
+and the compiler, etc. --
+
+21:30.392 --> 21:33.111
+they can complain about it,
+
+21:33.111 --> 21:38.871
+and give you warnings and errors as we like them.
+
+21:38.872 --> 21:44.553
+And of course the kittens are much happier.
+
+21:44.553 --> 21:48.153
+Okay. This is going a bit over time,
+
+21:48.153 --> 00:21:51.272
+so let's try to go faster.
+
+21:51.273 --> 21:53.752
+Here are some of the new features
+
+21:53.753 --> 21:54.794
+that are introduced.
+
+21:54.794 --> 21:56.314
+I already mentioned briefly
+
+21:56.314 --> 22:00.633
+that you can define new types with bindat-defmacro.
+
+22:00.633 --> 22:04.474
+that's one of the important novelties,
+
+22:04.474 --> 22:08.794
+and you can extend BinDat with new types this way.
+
+22:08.794 --> 22:10.714
+The other thing you can do is
+
+22:10.714 --> 22:16.233
+you can control how values or packets
+
+22:16.234 --> 22:20.315
+are unpacked, and how they are represented.
+
+22:20.315 --> 22:22.555
+In the old BinDat,
+
+22:22.555 --> 22:24.315
+the packet is necessarily represented,
+
+22:24.315 --> 22:28.634
+when you unpack it, as an alist, basically,
+
+22:28.635 --> 22:30.396
+or a struct becomes an alist,
+
+22:30.396 --> 22:31.676
+and that's all there is.
+
+22:31.676 --> 22:34.076
+You don't have any choice about it.
+
+22:34.076 --> 22:35.596
+With the new system,
+
+22:35.596 --> 22:38.076
+by default, it also returns just an alist,
+
+22:38.076 --> 22:41.916
+but you can actually control what it's unpacked as,
+
+22:41.916 --> 22:46.396
+or what it's packed from, using these keywords.
+
+22:46.396 --> 22:49.596
+With :unpack-val, you can give an expression
+
+22:49.597 --> 22:53.357
+that will construct the unpacked value
+
+22:53.357 --> 22:56.957
+from the various fields.
+
+22:56.957 --> 22:59.197
+And with :pack-val and :pack-var,
+
+22:59.197 --> 23:02.557
+you can specify how to extract the information
+
+23:02.557 --> 23:05.116
+from the unpacked value
+
+23:05.117 --> 00:23:08.077
+to generate the pack value.
+
+23:08.078 --> 23:12.637
+So here are some examples.
+
+23:12.637 --> 23:15.358
+Here's an example taken from osc.
+
+23:15.358 --> 23:17.438
+osc actually doesn't use BinDat currently,
+
+23:17.438 --> 23:22.478
+but I have played with it
+
+23:22.479 --> 23:23.758
+to see what it would look like
+
+23:23.758 --> 23:26.159
+if we were to use BinDat.
+
+23:26.159 --> 23:28.638
+So here's the definition
+
+23:28.638 --> 23:30.638
+of the timetag representation,
+
+23:30.638 --> 23:35.279
+which represents timestamps in osc.
+
+23:35.279 --> 23:37.998
+So you would use bindat-type
+
+23:37.998 --> 23:40.559
+and then you have here :pack-var
+
+23:40.559 --> 23:42.080
+basically gives a name
+
+23:42.080 --> 23:48.559
+when we try to pack a timestamp.
+
+23:48.559 --> 23:51.520
+'time' will be the variable whose name contains
+
+23:51.520 --> 23:54.159
+the actual timestamp we will receive.
+
+23:54.159 --> 23:57.520
+So we want to represent the unpacked value
+
+23:57.520 --> 24:00.240
+as a normal Emacs timestamp,
+
+24:00.240 --> 24:02.480
+and then basically convert from this timestamp
+
+24:02.480 --> 24:06.401
+to a string, or from a string to this timestamp.
+
+24:06.401 --> 24:10.080
+When we receive it, it will be called time,
+
+24:10.080 --> 24:12.240
+so we can refer to it,
+
+24:12.240 --> 24:15.360
+and so in order to actually encode it,
+
+24:15.360 --> 24:18.320
+we basically turn this timestamp into an integer --
+
+24:18.320 --> 24:20.799
+that's what this :pack-val does.
+
+24:20.799 --> 24:23.442
+It says when we try to pack it,
+
+24:23.442 --> 24:26.082
+here's the the value that we should use.
+
+24:26.082 --> 24:27.760
+We turn it into an integer,
+
+24:27.760 --> 24:30.320
+and then this integer is going to be encoded
+
+24:30.320 --> 24:36.162
+as a uint 64-bit. So a 64-bit unsigned integer.
+
+24:36.163 --> 24:38.960
+When we try to unpack the value,
+
+24:38.960 --> 24:40.720
+this 'ticks' field
+
+24:40.720 --> 24:45.679
+will contain an unsigned int of 64 bits.
+
+24:45.679 --> 24:50.559
+We want to return instead a timestamp --
+
+24:50.559 --> 24:53.924
+a time value -- from Emacs.
+
+24:53.924 --> 24:59.363
+Here we use the representation of time
+
+24:59.363 --> 25:02.799
+as a pair of number of ticks
+
+25:02.799 --> 25:06.720
+and the corresponding frequency of those ticks.
+
+25:06.720 --> 25:09.120
+So that's what we do here with :unpack-val,
+
+25:09.120 --> 25:12.004
+which is construct the cons corresponding to it.
+
+25:12.004 --> 25:16.400
+With this definition, bindat-pack/unpack
+
+25:16.400 --> 00:25:19.039
+are going to convert to and from
+
+00:25:19.039 --> 00:25:21.760
+proper time values on one side,
+
+25:21.760 --> 25:26.159
+and binary strings on the other.
+
+25:26.159 --> 25:27.520
+Note, of course,
+
+25:27.520 --> 25:30.320
+that I complained that the old BinDat
+
+25:30.320 --> 25:36.080
+had to use single-field structs for simple types,
+
+25:36.080 --> 25:37.039
+and here, basically,
+
+25:37.039 --> 25:39.840
+I'm back using single-field structs as well
+
+25:39.840 --> 25:41.120
+for this particular case --
+
+25:41.120 --> 25:44.640
+actually a reasonably frequent case, to be honest.
+
+25:44.640 --> 25:49.279
+But at least this is not so problematic,
+
+25:49.279 --> 25:51.840
+because we actually control what is returned,
+
+25:51.840 --> 25:54.159
+so even though it's a single-field struct,
+
+25:54.159 --> 25:56.640
+it's not going to construct an alist
+
+25:56.640 --> 25:58.320
+or force you to construct an alist.
+
+25:58.320 --> 26:02.720
+Instead, it really receives and takes a value
+
+26:02.720 --> 26:07.367
+in the ideal representation that we chose.
+
+26:07.367 --> 26:10.007
+Here we have a more complex example,
+
+26:10.007 --> 26:12.488
+where the actual type is recursive,
+
+26:12.488 --> 26:18.640
+because it's representing those "LEB"...
+
+26:18.640 --> 26:20.400
+I can't remember what "LEB" stands for,
+
+26:20.400 --> 26:22.559
+but it's a representation
+
+26:22.559 --> 26:25.600
+for arbitrary length integers,
+
+26:25.600 --> 26:27.520
+where basically
+
+26:27.520 --> 26:33.360
+every byte is either smaller than 128,
+
+26:33.360 --> 26:36.799
+in which case it's the end of the of the value,
+
+26:36.799 --> 26:39.760
+or it's a value bigger than 128,
+
+26:39.760 --> 26:42.159
+in which case there's an extra byte on the end
+
+26:42.159 --> 26:44.490
+that's going to continue.
+
+26:44.490 --> 26:46.640
+Here we see the representation
+
+26:46.640 --> 26:52.240
+is basically a structure that starts with a byte,
+
+26:52.240 --> 26:53.679
+which contains this value,
+
+26:53.679 --> 26:56.000
+which can be either the last value or not,
+
+26:56.000 --> 26:59.770
+and the tail, which will either be empty,
+
+26:59.770 --> 27:01.279
+or contain something else.
+
+27:01.279 --> 27:04.000
+The empty [case] is here;
+
+27:04.000 --> 27:07.039
+if the head value is smaller than 128,
+
+27:07.039 --> 27:11.840
+then the type of this tail is going to be (unit 0),
+
+27:11.840 --> 27:16.492
+so basically 'unit' is the empty type,
+
+27:16.492 --> 27:20.880
+and 0 is the value we will receive when we read it.
+
+27:20.880 --> 27:25.520
+And if not, then it has as type 'loop',
+
+27:25.520 --> 27:28.240
+which is the type we're defining,
+
+27:28.240 --> 27:30.491
+so it's the recursive case,
+
+27:30.491 --> 27:35.132
+where then the rest of the type is the type itself.
+
+27:35.132 --> 27:37.120
+And so this lets us pack and unpack.
+
+27:37.120 --> 27:39.600
+We pass it an arbitrary size integer,
+
+27:39.600 --> 27:42.240
+and it's going to turn it into
+
+27:42.240 --> 27:48.492
+this LEB128 binary representation, and vice versa.
+
+27:48.492 --> 27:52.480
+I have other examples if you're interested,
+
+27:52.480 --> 00:27:56.093
+but anyway, here's the conclusion.
+
+27:56.094 --> 27:58.320
+We have a simpler, more flexible,
+
+27:58.320 --> 28:01.039
+and more powerful BinDat now,
+
+28:01.039 --> 28:03.454
+which is also significantly faster.
+
+28:03.454 --> 28:06.799
+And I can't remember the exact speed-up,
+
+28:06.799 --> 28:08.720
+but it's definitely not a few percents.
+
+28:08.720 --> 28:12.640
+I vaguely remember about 4x faster in my tests,
+
+28:12.640 --> 28:16.815
+but it's probably very different in different cases
+
+28:16.815 --> 28:20.159
+so it might be just 4x, 2x -- who knows?
+
+28:20.159 --> 28:23.374
+Try it for yourself, but I was pretty pleased,
+
+28:23.374 --> 00:28:28.335
+because it wasn't the main motivation, so anyway...
+
+28:28.336 --> 28:31.135
+The negatives are here.
+
+28:31.135 --> 28:34.480
+In the new system, there's this bindat-defmacro
+
+28:34.480 --> 28:36.720
+which lets us define, kind of, new types,
+
+28:36.720 --> 28:40.895
+and bindat-type also lets us define new types,
+
+28:40.895 --> 28:45.360
+and the distinction between them is a bit subtle;
+
+28:45.360 --> 28:48.080
+it kind of depends on...
+
+28:48.080 --> 28:50.880
+well it has an impact on efficiency
+
+28:50.880 --> 28:53.520
+more than anything, so it's not very satisfactory.
+
+28:53.520 --> 28:56.737
+There's a bit of redundancy between the two.
+
+28:56.737 --> 28:59.039
+There is no bit-level control, just as before.
+
+28:59.039 --> 29:02.097
+We can only manipulate basically bytes.
+
+29:02.098 --> 29:03.360
+So this is definitely not usable
+
+29:03.360 --> 29:09.058
+for a Huffman encoding kind of thing.
+
+29:09.058 --> 29:10.880
+Also, it's not nearly as flexible
+
+29:10.880 --> 29:12.240
+as some of the alternatives.
+
+29:12.240 --> 29:13.760
+So you know GNU Poke
+
+29:13.760 --> 29:20.017
+has been a vague inspiration for this work,
+
+29:20.018 --> 29:22.480
+and GNU Poke gives you a lot more power
+
+29:22.480 --> 29:25.059
+in how to specify the types, etc.
+
+29:25.059 --> 29:26.579
+And of course one of the main downsides
+
+29:26.579 --> 29:28.018
+is that it's still not used very much.
+
+29:28.018 --> 29:29.283
+Actually, the new BinDat
+
+29:29.283 --> 29:31.039
+is not used by any package
+
+29:31.039 --> 29:33.059
+as far as I know right now,
+
+29:33.059 --> 29:35.279
+but even the old one is not used very often,
+
+29:35.279 --> 29:36.799
+so who knows
+
+29:36.799 --> 29:38.799
+whether it's actually going to
+
+29:38.799 --> 29:41.520
+work very much better or not?
+
+29:41.520 --> 29:44.399
+Anyway, this is it for this talk.
+
+29:44.399 --> 29:46.683
+Thank you very much. Have a nice day.
+
+29:46.683 --> 29:47.883
+[captions by John Cummings]
diff --git a/2021/captions/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt b/2021/captions/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt
new file mode 100644
index 00000000..1da2506d
--- /dev/null
+++ b/2021/captions/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt
@@ -0,0 +1,457 @@
+WEBVTT
+
+00:00.950 --> 00:03.225
+Hello, my name is Dhavan,
+
+00:03.225 --> 00:05.500
+also known as codingquark!
+
+00:05.500 --> 00:08.041
+I started out learning Emacs
+
+00:08.041 --> 00:12.540
+without knowing I had to plug things in
+
+00:12.540 --> 00:13.629
+to make it work.
+
+00:13.629 --> 00:14.849
+Eventually I had to learn to set up ELPA.
+
+00:14.849 --> 00:16.850
+Since then I’ve used MELPA
+
+00:16.850 --> 00:21.030
+and Debian apt sources.
+
+00:21.030 --> 00:21.054
+Recent discussions about ELPA,
+
+00:21.054 --> 00:21.054
+NonGNU ELPA, MELPA, etc.
+
+00:21.054 --> 00:21.054
+made me reconsider
+
+00:21.054 --> 00:21.054
+what I was doing
+
+00:21.054 --> 00:28.590
+with my Emacs.
+
+00:28.590 --> 00:30.887
+I am not the kind of person
+
+00:30.887 --> 00:34.290
+to mindlessly ram things into my emacs.
+
+00:34.290 --> 00:36.041
+I like to ponder,
+
+00:36.041 --> 00:37.500
+to understand,
+
+00:37.500 --> 00:40.128
+to have a level of control
+
+00:40.128 --> 00:42.069
+and mindfulness
+
+00:42.069 --> 00:43.890
+about my Emacs.
+
+00:43.890 --> 00:45.730
+It is not just a matter
+
+00:45.730 --> 00:47.340
+of trying things out,
+
+00:47.340 --> 00:50.909
+it is about living an examined life
+
+00:50.909 --> 00:53.387
+as the Greeks would say;
+
+00:53.387 --> 00:57.040
+or sutta as Buddhists would say.
+
+00:57.040 --> 00:59.860
+Such an Emacs is an Emacs worth having.
+
+00:59.860 --> 01:01.414
+This pursuit of mine
+
+01:01.414 --> 01:03.710
+brought me to learn about borg.
+
+01:03.710 --> 01:05.595
+And I am going to share with you
+
+01:05.595 --> 01:06.479
+how to use it.
+
+01:06.479 --> 01:09.018
+I believe the approach of using borg
+
+01:09.018 --> 01:10.597
+for package management
+
+01:10.597 --> 01:12.710
+is not for everyone.
+
+01:12.710 --> 01:14.307
+It involves knowing git,
+
+01:14.307 --> 01:16.648
+it involves looking into source code
+
+01:16.648 --> 01:18.229
+and reading makefiles.
+
+01:18.229 --> 01:20.170
+Sure, anyone can learn
+
+01:20.170 --> 01:22.617
+should they be motivated so,
+
+01:22.617 --> 01:25.740
+but people have different priorities.
+
+01:25.740 --> 01:29.056
+This is what is working for me right now.
+
+01:29.056 --> 01:32.826
+Here is what we are going to do.
+
+01:32.826 --> 01:35.696
+We'll set up Debian, install dependencies,
+
+01:35.696 --> 01:39.032
+set up borg, install a package,
+
+01:39.032 --> 01:42.090
+and make sure it installs all the docs.
+
+01:42.090 --> 01:47.240
+Let’s get started!
+
+01:47.240 --> 01:48.342
+Would it not be amazing
+
+01:48.342 --> 01:49.560
+if we could start out with
+
+01:49.560 --> 01:52.399
+just Debian and basic tools?
+
+01:52.399 --> 01:54.848
+For borg, we need git,
+
+01:54.848 --> 01:55.916
+build-essential,
+
+01:55.916 --> 01:57.384
+and something to build docs.
+
+01:57.384 --> 02:00.499
+Nothing more!
+
+02:00.499 --> 02:04.658
+Now that we have the OS setup,
+
+02:04.658 --> 02:06.226
+it is time to clone
+
+02:06.226 --> 02:09.429
+what is called a “seed”.
+
+02:09.429 --> 02:11.431
+A seed will speed our process up
+
+02:11.431 --> 02:13.379
+by providing things like
+
+02:13.379 --> 02:15.500
+magit, epkg, auto-compile, etc.
+
+02:15.500 --> 02:20.430
+We will soon be using epkg and magit.
+
+02:20.430 --> 02:22.642
+The docs cover how to start
+
+02:22.642 --> 02:23.477
+without a seed,
+
+02:23.477 --> 02:25.779
+but for the purposes of a short demo,
+
+02:25.779 --> 02:27.770
+seeds are better.
+
+02:27.770 --> 02:28.682
+I started with a seed
+
+02:28.682 --> 02:30.083
+for my own dot emacs.
+
+02:30.083 --> 02:32.890
+It is fairly slim.
+
+02:32.890 --> 02:33.854
+As you can see,
+
+02:33.854 --> 02:35.088
+borg uses git URLs
+
+02:35.088 --> 02:37.290
+and /not/ HTTPS URLs.
+
+02:37.290 --> 02:38.992
+Make sure you have your ssh keys
+
+02:38.992 --> 02:43.989
+set up on GitHub, GitLab, etc.
+
+02:43.989 --> 02:45.899
+Bootstrapping is like cloning a dot emacs,
+
+02:45.899 --> 02:47.310
+but it only comes with a
+
+02:47.310 --> 02:51.400
+useful dot git submodules file.
+
+02:51.400 --> 02:54.841
+We get a Makefile that has targets
+
+02:54.841 --> 02:57.739
+like help and bootstrap-borg.
+
+02:57.739 --> 02:59.880
+There will be more targets
+
+02:59.880 --> 03:02.115
+after we finish the bootstrapping process.
+
+03:30.110 --> 03:35.582
+Then, we need to clone all the git modules,
+
+03:35.582 --> 03:38.310
+which is also done by a make target.
+
+03:38.310 --> 03:40.754
+This time, it will not just pull
+
+03:40.754 --> 03:42.656
+the git submodules,
+
+03:42.656 --> 03:44.658
+but will also run various things
+
+03:44.658 --> 03:45.826
+like auto-compilation,
+
+03:45.826 --> 03:48.030
+Info doc installation, etc.
+
+03:48.030 --> 04:08.680
+Good thing we installed texinfo earlier!
+
+04:08.282 --> 04:10.884
+Now that we have borg bootstrapped,
+
+04:10.884 --> 04:14.520
+let’s see how to “assimilate” a drone.
+
+04:14.520 --> 04:17.090
+Well, that’s just a borg way of saying
+
+04:17.090 --> 04:19.900
+how to install a new package.
+
+04:19.900 --> 04:22.910
+We get to work from inside Emacs now.
+
+04:22.910 --> 04:26.366
+Borg has excellent info docs,
+
+04:26.366 --> 04:28.450
+should you ever be having questions.
+
+04:28.450 --> 04:32.240
+I earlier talked about using a seed.
+
+04:32.240 --> 04:34.830
+Borg docs go into details of what that means.
+
+04:34.830 --> 04:40.190
+I encourage you to read the docs.
+
+04:40.190 --> 04:51.500
+Let’s try to install lsp-mode.
+
+04:51.500 --> 04:52.459
+Examining lsp-mode
+
+04:52.459 --> 04:54.694
+with epkg’s helper function,
+
+04:54.694 --> 04:57.280
+we can see details of the package,
+
+04:57.280 --> 05:00.200
+dependencies required, and so on.
+
+05:00.200 --> 05:02.470
+epkg uses sqlite database.
+
+05:02.470 --> 05:04.871
+Now you know why I installed sqlite
+
+05:04.871 --> 05:12.350
+in the OS preparation step!
+
+05:20.820 --> 05:22.622
+Well, lsp-mode has
+
+05:22.622 --> 05:24.057
+way too many dependencies
+
+05:24.057 --> 05:25.830
+for this demo.
+
+05:25.830 --> 05:28.795
+Note how one is naturally led
+
+05:28.795 --> 05:32.332
+to take a peek at the innards of the packages
+
+05:32.332 --> 05:34.780
+in this simple workflow.
+
+05:34.780 --> 05:37.270
+As I said, it is about being mindful!
+
+05:37.270 --> 05:39.573
+Okay, instead of lsp-mode,
+
+05:39.573 --> 05:41.308
+let’s take a look at
+
+05:41.308 --> 05:45.400
+Prot’s excellent modus-themes.
+
+05:45.400 --> 05:47.247
+No extra dependencies needed.
+
+05:47.247 --> 05:49.870
+That is perfect!
+
+05:49.870 --> 05:52.018
+The themes have great docs
+
+05:52.018 --> 05:53.620
+and our philosopher friend
+
+05:53.620 --> 05:56.000
+is good at writing.
+
+05:56.000 --> 06:02.930
+Alright, first, we clone the package.
+
+06:02.930 --> 06:04.664
+This allows us to inspect the code,
+
+06:04.664 --> 06:06.330
+should we want to.
+
+06:06.330 --> 06:23.000
+Well, you /should/.
+
+06:23.000 --> 06:25.552
+Upon inspecting the code,
+
+06:25.552 --> 06:30.620
+we ask borg to assimilate the package.
+
+06:30.620 --> 06:33.927
+This will load the code in our Emacs
+
+06:33.927 --> 06:37.270
+and make the package available for use.
+
+06:39.799 --> 06:42.135
+Wait, I was praising all the docs,
+
+06:42.135 --> 06:43.690
+but where are they?
+
+06:43.690 --> 06:44.571
+To install the docs,
+
+06:44.571 --> 06:46.273
+we need to instruct borg
+
+06:46.273 --> 06:48.020
+about where to find them.
+
+06:48.020 --> 06:51.978
+To do this, we edit the gitmodules file
+
+06:51.978 --> 06:53.910
+and add the details.
+
+06:53.910 --> 06:58.310
+There they are!
+
+06:58.310 --> 07:04.170
+We have our docs!
+
+07:04.170 --> 07:09.940
+Alright, we have assimilated a package.
+
+07:09.940 --> 07:11.398
+After sufficient testing,
+
+07:11.398 --> 07:14.234
+we can commit it as a part of our own dot emacs,
+
+07:14.234 --> 07:19.272
+which is a drone of our borg collective.
+
+07:19.272 --> 07:21.741
+Since all the packages are git submodules,
+
+07:21.741 --> 07:23.810
+we get to use magit
+
+07:23.810 --> 07:25.245
+(all hail magit!)
+
+07:25.245 --> 07:27.514
+and borg’s helper functions
+
+07:27.514 --> 07:29.530
+to commit the code.
+
+07:29.530 --> 07:31.818
+Now create your own dot el file
+
+07:31.818 --> 07:38.758
+and hack away!
+
+07:38.758 --> 07:39.793
+So that is it.
+
+00:07:39.793 --> 00:07:41.661
+I hope you enjoyed the talk
+
+07:41.661 --> 07:45.131
+and I will be hanging out in IRC
+
+07:45.131 --> 07:46.666
+if you have any questions.
+
+07:46.666 --> 07:48.330
+Thank you, and bye.
diff --git a/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt b/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt
new file mode 100644
index 00000000..07556c0c
--- /dev/null
+++ b/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt
@@ -0,0 +1,1246 @@
+WEBVTT
+
+00:00:01.040 --> 00:00:04.367
+Welcome, everyone, to this Emacs Conf 2021.
+
+00:00:04.467 --> 00:00:07.617
+My name is Fermin. I work as
+
+00:00:07.617 --> 00:00:09.717
+a Common Lisp engineer at RavenPack,
+
+00:00:09.817 --> 00:00:11.733
+and today I'm going to talk about
+
+00:00:11.833 --> 00:00:15.783
+CLEDE: the Common Lisp Emacs Development Environment.
+
+00:00:15.883 --> 00:00:19.400
+So what is CLEDE?
+
+00:00:19.500 --> 00:00:20.500
+So CLEDE is a project
+
+00:00:20.500 --> 00:00:22.017
+I've been working on this year
+
+00:00:22.117 --> 00:00:24.650
+for better... well, yeah...
+
+00:00:24.750 --> 00:00:27.117
+a better Common Lisp integration
+
+00:00:27.217 --> 00:00:30.317
+for static tools and
+
+00:00:30.417 --> 00:00:33.250
+for static and integrated Emacs tools.
+
+00:00:33.350 --> 00:00:35.367
+And to understand better what
+
+00:00:35.467 --> 00:00:37.650
+CLEDE is, one first has to understand
+
+00:00:37.750 --> 00:00:40.133
+the base that I use...
+
+00:00:40.233 --> 00:00:43.767
+so the foundation that I use for CLEDE.
+
+00:00:43.867 --> 00:00:46.050
+Um, so it is CEDET--
+
+00:00:46.150 --> 00:00:47.417
+and specifically Semantic--
+
+00:00:47.517 --> 00:00:49.733
+so we first have to talk about and
+
+00:00:49.833 --> 00:00:50.417
+understand what it is.
+
+00:00:50.517 --> 00:00:53.817
+So CEDET is a collection
+
+00:00:53.917 --> 00:00:55.183
+of Emacs development environment tools.
+
+00:00:55.283 --> 00:00:57.233
+It was created by Eric Ludlam
+
+00:00:57.333 --> 00:01:00.767
+(I hope to say that name right)
+
+00:01:00.867 --> 00:01:02.333
+in the late 90s, and
+
+00:01:02.433 --> 00:01:04.833
+the idea was to create entire IDE for Emacs.
+
+00:01:04.933 --> 00:01:10.433
+CEDET is still integrated into Emacs,
+
+00:01:10.533 --> 00:01:11.717
+and it has a lot of interesting things
+
+00:01:11.817 --> 00:01:14.033
+that are not used for too many people,
+
+00:01:14.133 --> 00:01:16.167
+so I'm going to explain some of those.
+
+00:01:16.267 --> 00:01:18.417
+First, let's go with the good ones that
+
+00:01:18.517 --> 00:01:21.233
+one that I use for CLEDE and that can
+
+00:01:21.333 --> 00:01:23.167
+be used for other projects as well.
+
+00:01:23.267 --> 00:01:28.450
+Some of the features that
+
+00:01:28.550 --> 00:01:32.450
+CEDET has is parse generators
+
+00:01:32.550 --> 00:01:35.217
+so we have Wisent and Bovine.
+
+00:01:35.317 --> 00:01:38.350
+Wisent is basically a Bison clone
+
+00:01:38.450 --> 00:01:40.200
+that was written in Emacs Lisp
+
+00:01:40.300 --> 00:01:43.117
+that you can also specify grammars.
+
+00:01:43.217 --> 00:01:45.617
+It's a really big and rather complex
+
+00:01:45.717 --> 00:01:47.350
+tool to work with,
+
+00:01:47.450 --> 00:01:49.183
+and it's secretly used for, as far as
+
+00:01:49.283 --> 00:01:51.667
+I know, two languages.
+
+00:01:51.767 --> 00:01:53.317
+They're not also well supported,
+
+00:01:53.417 --> 00:01:55.317
+but we'll get into that later.
+
+00:01:55.417 --> 00:01:58.133
+Also Bovine, which is a way more
+
+00:01:58.233 --> 00:01:59.867
+simple tool, like you can...
+
+00:01:59.967 --> 00:02:01.733
+you don't need grammar files,
+
+00:02:01.833 --> 00:02:07.350
+you can write just in plain Emacs Lisp.
+
+00:02:07.450 --> 00:02:10.917
+And you also have utilities to work with
+
+00:02:11.017 --> 00:02:16.550
+those generated tag trees, so to say.
+
+00:02:16.650 --> 00:02:23.533
+These are not AST parsers like real Bison;
+
+00:02:23.633 --> 00:02:25.617
+they are tag-based so they basically get
+
+00:02:25.717 --> 00:02:27.533
+tags and extract information from them,
+
+00:02:27.633 --> 00:02:30.083
+and I can use that information
+
+00:02:30.183 --> 00:02:31.000
+with Emacs Lisp
+
+00:02:31.000 --> 00:02:33.567
+to contextually understand better
+
+00:02:33.667 --> 00:02:36.267
+the language that you're parsing,
+
+00:02:36.367 --> 00:02:37.083
+but in general,
+
+00:02:37.183 --> 00:02:40.083
+this decision was made (as far as I know)
+
+00:02:40.183 --> 00:02:43.217
+because of the Emacs Lisp
+
+00:02:43.317 --> 00:02:44.217
+limitation of the time.
+
+00:02:44.317 --> 00:02:50.233
+So Emacs was a rather
+
+00:02:50.333 --> 00:02:52.167
+slower Lisp-- slow Lisp--
+
+00:02:52.267 --> 00:02:55.850
+so they decide to just use
+
+00:02:55.950 --> 00:02:58.750
+tag-based thing instead of a parse--
+
+00:02:58.850 --> 00:03:02.333
+I mean-- an AST-based one.
+
+00:03:02.433 --> 00:03:05.167
+And Semantic give you some utility with
+
+00:03:05.267 --> 00:03:06.250
+that as Senator, for example, give you
+
+00:03:06.350 --> 00:03:07.667
+some semantic navigation.
+
+00:03:07.767 --> 00:03:09.750
+So CEDET is way more than this,
+
+00:03:09.850 --> 00:03:12.433
+but this is not a CEDET talk.
+
+00:03:12.533 --> 00:03:13.983
+So if you want to get more information,
+
+00:03:14.083 --> 00:03:16.350
+you can go to the official webpage.
+
+00:03:16.450 --> 00:03:19.933
+I have to say that it is outdated, and
+
+00:03:20.033 --> 00:03:22.933
+Emacs changed some things over the years
+
+00:03:23.033 --> 00:03:24.067
+because CEDET was merged into Emacs
+
+00:03:24.167 --> 00:03:27.767
+in 2011, as far as I know.
+
+00:03:27.867 --> 00:03:30.417
+You can also go to the official Emacs
+
+00:03:30.517 --> 00:03:32.883
+documentation (the manual), which will get
+
+00:03:32.983 --> 00:03:35.317
+more information about every tool,
+
+00:03:35.417 --> 00:03:38.317
+but it's a really interesting thing, and
+
+00:03:38.417 --> 00:03:40.883
+I'm really sad that it is forgotten.
+
+00:03:40.983 --> 00:03:43.233
+So let's go with the bad things:
+
+00:03:43.333 --> 00:03:46.483
+that CEDET is an abandoned project.
+
+00:03:46.583 --> 00:03:48.217
+This has some benefits like it's not
+
+00:03:48.317 --> 00:03:50.550
+going to change that much,
+
+00:03:50.650 --> 00:03:52.367
+but it's, of course, not ideal.
+
+00:03:52.467 --> 00:03:56.833
+Most of the tooling that CEDET
+
+00:03:56.933 --> 00:03:58.100
+have right now are surpassed
+
+00:03:58.200 --> 00:03:59.633
+by other packages.
+
+00:03:59.733 --> 00:04:02.650
+And at first, I know Eric was working
+
+00:04:02.750 --> 00:04:07.467
+with C at the time so he totally has
+
+00:04:07.567 --> 00:04:10.533
+"real support" so you can use CEDET
+
+00:04:10.633 --> 00:04:13.033
+for other languages, but
+
+00:04:13.133 --> 00:04:15.383
+to work really like an IDE, more or less,
+
+00:04:15.483 --> 00:04:17.017
+it's all the...
+
+00:04:17.117 --> 00:04:19.517
+C is the only language supported,
+
+00:04:19.617 --> 00:04:21.667
+and maybe some simple C++, but that's it.
+
+00:04:21.767 --> 00:04:24.017
+It needs more documentation.
+
+00:04:24.117 --> 00:04:25.683
+People really don't know how to use it
+
+00:04:25.783 --> 00:04:28.583
+because, I have to say, rather complex
+
+00:04:28.683 --> 00:04:30.067
+to get a project working with it,
+
+00:04:30.167 --> 00:04:33.717
+and then make use of Semantic
+
+00:04:33.817 --> 00:04:36.667
+because [it] needs some maintenance and
+
+00:04:36.767 --> 00:04:38.567
+to update the code.
+
+00:04:38.667 --> 00:04:41.083
+But I will argue that even with these
+
+00:04:41.183 --> 00:04:44.383
+deficiencies, it's usable, and
+
+00:04:44.483 --> 00:04:47.517
+I use the foundation of base for
+
+00:04:47.617 --> 00:04:49.533
+parse infrastructure for other languages.
+
+00:04:49.633 --> 00:04:52.367
+I will say that with Common Lisp was
+
+00:04:52.467 --> 00:04:53.983
+rather easy because
+
+00:04:54.083 --> 00:04:56.033
+CEDET already have Emacs Lisp parser
+
+00:04:56.133 --> 00:04:57.900
+even though it's not great.
+
+00:04:58.000 --> 00:05:00.483
+It's easy to adapt and to use.
+
+00:05:00.583 --> 00:05:04.000
+It's not used in an Emacs
+
+00:05:04.100 --> 00:05:05.433
+right now because, well,
+
+00:05:05.533 --> 00:05:08.883
+Emacs know very well itself,
+
+00:05:08.983 --> 00:05:11.600
+but it's there.
+
+00:05:11.700 --> 00:05:17.583
+So these, of course, are static parsers
+
+00:05:17.683 --> 00:05:19.517
+so you don't need to run any
+
+00:05:19.617 --> 00:05:21.883
+other language-specific tools, which is
+
+00:05:21.983 --> 00:05:24.400
+an advantage for some things.
+
+00:05:24.500 --> 00:05:27.133
+And this was basically CEDET is,
+
+00:05:27.233 --> 00:05:30.283
+and I use the parse infrastructure
+
+00:05:30.383 --> 00:05:31.333
+and some tools
+
+00:05:31.433 --> 00:05:34.333
+to create a parser for Common Lisp.
+
+00:05:34.433 --> 00:05:36.700
+Well, more or less. *laughs*
+
+00:05:36.800 --> 00:05:37.900
+Let's go to details.
+
+00:05:38.000 --> 00:05:39.850
+So I will say that it's not a parser
+
+00:05:39.950 --> 00:05:42.433
+by itself because, as we all know,
+
+00:05:42.533 --> 00:05:44.500
+to parse a macro-based language
+
+00:05:44.600 --> 00:05:46.833
+is really hard.
+
+00:05:46.933 --> 00:05:48.450
+Mostly if you cannot have contextual
+
+00:05:48.550 --> 00:05:52.800
+information because if you create code
+
+00:05:52.900 --> 00:05:56.033
+at compile time or runtime is really hard
+
+00:05:56.133 --> 00:05:59.233
+if you don't have run time, right?
+
+00:05:59.333 --> 00:06:00.950
+Basically, CLEDE can be described
+
+00:06:01.050 --> 00:06:02.600
+as a Semantic extension.
+
+00:06:02.700 --> 00:06:03.867
+So basically it's like,
+
+00:06:03.967 --> 00:06:07.133
+you can have Semantic
+
+00:06:07.233 --> 00:06:09.817
+and use it with Common Lisp code
+
+00:06:09.917 --> 00:06:11.600
+and some Common Lisp Emacs tools.
+
+00:06:11.700 --> 00:06:17.350
+So Bison (which is not Bison) is
+
+00:06:17.450 --> 00:06:21.650
+Bovine, and Semantic and Senator
+
+00:06:21.750 --> 00:06:24.750
+for navigating tags,
+
+00:06:24.850 --> 00:06:26.367
+and then communication with SLIME, SLY,
+
+00:06:26.467 --> 00:06:28.733
+and inferior Lisp.
+
+00:06:28.833 --> 00:06:30.450
+That means... I will show that later, but
+
+00:06:30.550 --> 00:06:32.800
+basically, you can parse the buffer,
+
+00:06:32.900 --> 00:06:34.167
+get some tags,
+
+00:06:34.267 --> 00:06:35.967
+get information about the tags that you want,
+
+00:06:36.067 --> 00:06:38.017
+and then send some of that information
+
+00:06:38.117 --> 00:06:43.900
+to the SLIME, SLY, or inferior Lisp REPL buffer,
+
+00:06:44.000 --> 00:06:45.717
+so you can get both things
+
+00:06:45.817 --> 00:06:48.483
+at the same time.
+
+00:06:48.583 --> 00:06:50.217
+And given that it's a Lisp language,
+
+00:06:50.317 --> 00:06:53.300
+this can be pretty interesting.
+
+00:06:53.400 --> 00:06:57.600
+Also I wrote some common package integration,
+
+00:06:57.700 --> 00:06:59.217
+so even though there's not
+
+00:06:59.317 --> 00:07:00.300
+a Common Lisp standard,
+
+00:07:00.400 --> 00:07:05.100
+there's some libraries that are used
+
+00:07:05.200 --> 00:07:07.583
+by basically everyone.
+
+00:07:07.683 --> 00:07:09.417
+They're not part of the standard,
+
+00:07:09.517 --> 00:07:11.000
+but yeah.
+
+00:07:11.100 --> 00:07:13.900
+A lot of people use it: like `asdf`,
+
+00:07:14.000 --> 00:07:15.550
+which is the package manager,
+
+00:07:15.650 --> 00:07:18.967
+I will say it's [`asdf` is] the
+
+00:07:19.067 --> 00:07:21.783
+definition packages, so to say,
+
+00:07:21.883 --> 00:07:23.667
+better than packages itself
+
+00:07:23.767 --> 00:07:26.317
+and have more features.
+
+00:07:26.417 --> 00:07:28.383
+I wrote a nice integration with it
+
+00:07:28.483 --> 00:07:29.500
+and also `fiveam`,
+
+00:07:29.600 --> 00:07:34.417
+which is a well-known test package.
+
+00:07:34.517 --> 00:07:39.300
+I just wrote this as an example
+
+00:07:39.400 --> 00:07:41.883
+on how we can do with CLEDE.
+
+00:07:41.983 --> 00:07:43.633
+Let's look at the features,
+
+00:07:43.733 --> 00:07:46.267
+and then we go to a demo.
+
+00:07:51.367 --> 00:07:54.000
+You can go to the repository.
+
+00:07:54.100 --> 00:07:56.550
+Currently, it's not in Melpa
+
+00:07:56.650 --> 00:07:57.917
+although I wanted
+
+00:07:58.017 --> 00:08:01.250
+to merge it-- I mean, to add it--
+
+00:08:01.450 --> 00:08:04.667
+to Melpa in the future.
+
+00:08:04.767 --> 00:08:06.367
+I want to clean the code and
+
+00:08:06.467 --> 00:08:07.417
+add some more features;
+
+00:08:07.517 --> 00:08:09.650
+I'm working on that and now
+
+00:08:09.750 --> 00:08:12.567
+like an eagle, so to say...
+
+00:08:12.667 --> 00:08:15.533
+but yeah, you can go here and then check
+
+00:08:15.633 --> 00:08:18.833
+all the features and test it.
+
+00:08:18.933 --> 00:08:20.733
+To install is pretty easy:
+
+00:08:20.833 --> 00:08:22.500
+just "add to path" thing.
+
+00:08:22.600 --> 00:08:23.650
+You don't need any external dependencies;
+
+00:08:23.750 --> 00:08:25.817
+everything's in Emacs.
+
+00:08:25.917 --> 00:08:28.467
+This was tested with Emacs 27,
+
+00:08:28.567 --> 00:08:29.883
+but probably going to work
+
+00:08:29.983 --> 00:08:32.750
+with Emacs 25 onwards so
+
+00:08:32.850 --> 00:08:34.267
+it shouldn't be any problem.
+
+00:08:34.367 --> 00:08:38.633
+So let's go with the features.
+
+00:08:38.733 --> 00:08:42.783
+This is some CEDET integrations,
+
+00:08:42.883 --> 00:08:44.417
+and first, like I said, it has
+
+00:08:44.517 --> 00:08:48.000
+support for SLY, SLIME, and inferior Lisp.
+
+00:08:48.100 --> 00:08:49.517
+If you are Common Lisp developer, you
+
+00:08:49.617 --> 00:08:52.267
+probably know a SLIME and a SLY,
+
+00:08:52.367 --> 00:08:53.483
+and inferior Lisp is basically
+
+00:08:53.583 --> 00:08:57.800
+just stock Emacs REPL.
+
+00:08:57.900 --> 00:09:00.817
+I support all three equally, so to say,
+
+00:09:00.917 --> 00:09:05.583
+and we have also `fiveam` integration,
+
+00:09:05.683 --> 00:09:08.867
+the ability to-- as I'm going to show later,
+
+00:09:08.967 --> 00:09:10.883
+you have the ability to send a test--
+
+00:09:10.983 --> 00:09:16.233
+either packages or an entire suite of tests,
+
+00:09:16.333 --> 00:09:21.350
+and `asdf`, which currently I'm just
+
+00:09:21.450 --> 00:09:23.517
+supporting basic project navigation
+
+00:09:23.617 --> 00:09:25.433
+and some information,
+
+00:09:25.533 --> 00:09:28.517
+but it's a work-in-progress.
+
+00:09:28.617 --> 00:09:29.783
+I also have some general activities
+
+00:09:29.883 --> 00:09:31.917
+that are not directly related to CEDET
+
+00:09:32.017 --> 00:09:34.050
+but part of the CLEDE package, which
+
+00:09:34.150 --> 00:09:35.500
+is CLEDE highlight.
+
+00:09:35.600 --> 00:09:36.817
+It's highly inspired by the
+
+00:09:36.917 --> 00:09:41.167
+Emacs re-factor `erefactor`.
+
+00:09:41.267 --> 00:09:43.950
+Basically, you have some nice
+
+00:09:44.050 --> 00:09:47.883
+highlights for lint variables.
+
+00:09:47.983 --> 00:09:49.467
+I want to expand that to also
+
+00:09:49.567 --> 00:09:53.133
+support parameters and function stuff,
+
+00:09:53.233 --> 00:09:56.300
+but it's not a high priority for me.
+
+00:09:56.400 --> 00:09:58.117
+But yeah, I sometimes use this;
+
+00:09:58.217 --> 00:10:01.950
+it's pretty neat when you have a big lint.
+
+00:10:02.050 --> 00:10:05.333
+Also some refactoring utilities...
+
+00:10:05.433 --> 00:10:06.700
+some of those can be said
+
+00:10:06.800 --> 00:10:08.400
+that it's overlapped with some...
+
+00:10:08.500 --> 00:10:12.467
+because it is a string base, it doesn't
+
+00:10:12.567 --> 00:10:15.983
+have too much context information,
+
+00:10:16.083 --> 00:10:17.967
+but yeah, some sort of
+
+00:10:18.067 --> 00:10:22.167
+`replace-symbol-in-region` and `symbol-tag`.
+
+00:10:22.267 --> 00:10:23.867
+And then some CLEDE commands.
+
+00:10:23.967 --> 00:10:25.500
+This is the thing that I use all the time.
+
+00:10:25.600 --> 00:10:26.067
+It's like you're going to find
+
+00:10:26.167 --> 00:10:29.067
+some commands to send to a REPL.
+
+00:10:29.167 --> 00:10:31.367
+I will show some example, but basically,
+
+00:10:31.467 --> 00:10:32.983
+you have already an example.
+
+00:10:33.083 --> 00:10:34.333
+You define a list of commands,
+
+00:10:34.433 --> 00:10:37.867
+you put name, and then you put the
+
+00:10:37.967 --> 00:10:39.300
+Common Lisp code that you want to send.
+
+00:10:39.400 --> 00:10:41.550
+Given that, you're writing this
+
+00:10:41.650 --> 00:10:43.483
+Emacs Lisp in your configuration.
+
+00:10:43.583 --> 00:10:46.867
+You can have some runtime information
+
+00:10:46.967 --> 00:10:49.450
+when the code is sent, right?
+
+00:10:49.550 --> 00:10:53.450
+so insert, get a variable value, or whatever.
+
+00:10:53.550 --> 00:10:56.133
+OK, `imenu` integration.
+
+00:10:56.233 --> 00:10:58.967
+Yes, Semantic...
+
+00:10:59.067 --> 00:11:02.450
+CEDET has a great `imenu` utilities
+
+00:11:02.550 --> 00:11:05.600
+to have a better `imenu`.
+
+00:11:05.700 --> 00:11:10.383
+`imenu-list` also works really well.
+
+00:11:10.483 --> 00:11:12.917
+So you have better... when you go to a file
+
+00:11:13.017 --> 00:11:15.200
+that you don't fully know what is inside,
+
+00:11:15.300 --> 00:11:20.533
+it's better to navigate having like a tree.
+
+00:11:20.633 --> 00:11:22.383
+Yeah, this one's the thing is going
+
+00:11:22.483 --> 00:11:24.783
+to show that Senator, which is
+
+00:11:24.883 --> 00:11:26.633
+Semantic navigator, and then some
+
+00:11:26.733 --> 00:11:30.217
+Semantic-specific tools like `complete-jump`,
+
+00:11:30.317 --> 00:11:32.750
+which I don't use this one too much
+
+00:11:32.850 --> 00:11:35.300
+because we have SLY/SLIME,
+
+00:11:35.400 --> 00:11:39.083
+but they're there, so yeah.
+
+00:11:39.183 --> 00:11:41.433
+Like I said, Common Lisp library support,
+
+00:11:41.533 --> 00:11:44.333
+which is duplicated.
+
+00:11:44.433 --> 00:11:47.017
+OK, so let's go to the demo.
+
+00:11:47.117 --> 00:11:50.983
+Um.
+
+00:11:51.083 --> 00:11:53.567
+Let's go to the demo file.
+
+00:11:53.667 --> 00:11:55.300
+Right.
+
+00:11:55.400 --> 00:11:58.250
+First, we have to do is enable CLEDE.
+
+00:11:58.350 --> 00:11:59.433
+This is pretty easy:
+
+00:11:59.533 --> 00:12:03.400
+we call `clede-start`, right,
+
+00:12:03.500 --> 00:12:05.100
+and now it's started.
+
+00:12:05.200 --> 00:12:08.100
+CLEDE is not an asynchronous parser so
+
+00:12:08.200 --> 00:12:10.900
+Semantic (in this case, Bovine) is not.
+
+00:12:11.000 --> 00:12:15.917
+If the file is large, it may take some time.
+
+00:12:16.017 --> 00:12:16.017
+It shouldn't because we have
+
+00:12:16.117 --> 00:12:19.117
+powerful computers, but if your
+
+00:12:19.217 --> 00:12:21.917
+computer is not that powerful,
+
+00:12:22.017 --> 00:12:22.933
+it may take a while.
+
+00:12:23.033 --> 00:12:26.117
+To see the information that has been
+
+00:12:26.217 --> 00:12:31.167
+parsed, we're going to call `bovinate`.
+
+00:12:31.267 --> 00:12:33.767
+Oops... oops...
+
+00:12:33.867 --> 00:12:36.033
+Oh! I have to-- sorry...
+
+00:12:36.133 --> 00:12:43.267
+Let's enable Semantic again.
+
+00:12:43.367 --> 00:12:45.217
+Let's start... `bovinate`...
+
+00:12:45.317 --> 00:12:48.117
+OK, so...
+
+00:12:48.217 --> 00:12:49.917
+This is the information that
+
+00:12:50.017 --> 00:12:52.983
+currently CLEDE is taking from the buffer.
+
+00:12:53.083 --> 00:12:55.517
+So we can see it's taking this, and
+
+00:12:55.617 --> 00:12:58.550
+it doesn't know what it is,
+
+00:12:58.550 --> 00:13:02.167
+so this is the tag name...
+
+00:13:02.267 --> 00:13:02.850
+this is the type,
+
+00:13:02.950 --> 00:13:03.733
+and these are some information
+
+00:13:03.833 --> 00:13:05.750
+and the location.
+
+00:13:05.850 --> 00:13:08.150
+OK, so we know that this is a variable,
+
+00:13:08.250 --> 00:13:10.150
+and it has the full value.
+
+00:13:10.250 --> 00:13:13.233
+You know this is a package, right,
+
+00:13:13.333 --> 00:13:15.450
+because it's defined as a package.
+
+00:13:15.550 --> 00:13:18.100
+It doesn't understand what this is.
+
+00:13:18.300 --> 00:13:18.967
+This node is a function
+
+00:13:19.067 --> 00:13:19.817
+because of the `fun`,
+
+00:13:19.917 --> 00:13:23.133
+and some of this is code,
+
+00:13:23.233 --> 00:13:25.917
+and it also understands some tests
+
+00:13:26.017 --> 00:13:27.667
+because it has `fiveam` integration.
+
+00:13:27.767 --> 00:13:31.000
+If it detects that has some test here
+
+00:13:31.000 --> 00:13:34.517
+it will know that, indeed, it is test.
+
+00:13:34.517 --> 00:13:40.317
+So let's try some, first, `imenu`.
+
+00:13:40.417 --> 00:13:42.550
+So we can see here we have...
+
+00:13:42.650 --> 00:13:44.750
+I understand that this have
+
+00:13:44.850 --> 00:13:46.600
+some sort of `fiveam` switch
+
+00:13:46.700 --> 00:13:49.350
+and some tests defined.
+
+00:13:49.450 --> 00:13:51.000
+It understands this package, and
+
+00:13:51.100 --> 00:13:52.783
+it'll give you some variables-- `defuns`,
+
+00:13:52.883 --> 00:13:55.117
+and it also will give you some misc
+
+00:13:55.217 --> 00:13:59.917
+for things that doesn't know what it is.
+
+00:14:00.017 --> 00:14:00.983
+And you can also
+
+00:14:01.083 --> 00:14:04.417
+navigate with this-- like this `imenu`.
+
+00:14:06.000 --> 00:14:12.000
+So, um, let's go first with some Senator.
+
+00:14:12.000 --> 00:14:14.867
+So with Senator, we can navigate,
+
+00:14:14.967 --> 00:14:16.200
+go to the next stack, previous stack,
+
+00:14:16.300 --> 00:14:20.783
+all this, um, top-level `s-expression`
+
+00:14:20.883 --> 00:14:22.467
+are basically a tag, even though
+
+00:14:22.567 --> 00:14:28.467
+it's code... you can navigate, right.
+
+00:14:28.567 --> 00:14:31.333
+Um, copy/kill this or some other stuff.
+
+00:14:31.433 --> 00:14:34.017
+Um, some interesting thing that we can
+
+00:14:34.117 --> 00:14:38.717
+do is let's launch SLY, right.
+
+00:14:38.817 --> 00:14:44.317
+Um, let's load `fiveam`,
+
+00:14:44.417 --> 00:14:45.500
+and let's send some tests.
+
+00:14:45.600 --> 00:14:51.467
+We can say, OK, `clede-fiveam-send-current-test`,
+
+00:14:51.567 --> 00:14:53.033
+and it will-- OK, have to compile
+
+00:14:53.133 --> 00:14:54.750
+this file first.
+
+00:14:54.850 --> 00:14:55.983
+OK, you don't like this...
+
+00:14:56.083 --> 00:14:58.367
+you compile the tests.
+
+00:14:58.467 --> 00:15:03.667
+OK... um... well...
+
+00:15:03.767 --> 00:15:05.017
+I don't have-- yeah, I don't have
+
+00:15:05.117 --> 00:15:11.833
+the switch here so let's...
+
+00:15:11.933 --> 00:15:14.733
+OK, yeah because I guess it's getting...
+
+00:15:14.833 --> 00:15:19.583
+sorry about this...
+
+00:15:19.683 --> 00:15:22.983
+Let's say we're going to send this test...
+
+00:15:23.083 --> 00:15:28.667
+It isn't working...
+
+00:15:28.767 --> 00:15:36.967
+OK, why are you not working...
+
+00:15:37.067 --> 00:15:38.450
+maybe because we have to go
+
+00:15:38.550 --> 00:15:47.083
+to the package `fiveam`.
+
+00:15:47.183 --> 00:15:49.133
+Yes, sorry... um...
+
+00:15:49.233 --> 00:15:51.550
+Yeah, so we're gonna go here, and
+
+00:15:51.650 --> 00:15:54.117
+we can say `fiveam-send-tests`,
+
+00:15:54.217 --> 00:15:55.250
+and there we have it.
+
+00:15:55.350 --> 00:15:56.200
+It will send the test
+
+00:15:56.300 --> 00:16:00.217
+that we are currently in, right.
+
+00:16:00.317 --> 00:16:01.883
+So that's the thing.
+
+00:16:01.983 --> 00:16:04.000
+Another interesting thing that I said is
+
+00:16:04.000 --> 00:16:08.450
+`clede-highlight-minor-mode`.
+
+00:16:08.550 --> 00:16:11.567
+Basically, work in `let`'s context
+
+00:16:11.667 --> 00:16:13.450
+to know where to highlight
+
+00:16:13.550 --> 00:16:17.117
+all the variables,
+
+00:16:17.217 --> 00:16:20.217
+and we can disable.
+
+00:16:20.317 --> 00:16:21.833
+What else do we have?
+
+00:16:21.933 --> 00:16:24.100
+So we have framework integration.
+
+00:16:24.200 --> 00:16:25.900
+You can go `clede-` and
+
+00:16:26.000 --> 00:16:27.717
+see what more commands are.
+
+00:16:27.817 --> 00:16:29.767
+`commands-run` are basically a way
+
+00:16:29.867 --> 00:16:31.617
+to define commands, you have a variable,
+
+00:16:31.717 --> 00:16:35.317
+which is `clede-commands-list`.
+
+00:16:35.417 --> 00:16:37.233
+Let's explain that you can get
+
+00:16:37.333 --> 00:16:39.817
+some system working
+
+00:16:39.917 --> 00:16:42.617
+or whatever command you want, right.
+
+00:16:42.717 --> 00:16:46.083
+Also you have `asdf` basic integration.
+
+00:16:46.183 --> 00:16:48.067
+You can go to a definition file
+
+00:16:48.167 --> 00:16:51.050
+of some of the systems are already loaded.
+
+00:16:51.150 --> 00:16:53.667
+For example, let's go to here,
+
+00:16:53.767 --> 00:16:55.550
+and we go to the definition file--
+
+00:16:55.650 --> 00:16:57.917
+there's the file, right?
+
+00:16:58.017 --> 00:16:59.000
+This is used because I'm sending
+
+00:16:59.100 --> 00:17:00.800
+commands for the REPL, so this
+
+00:17:00.900 --> 00:17:04.117
+functionality is not provided
+
+00:17:04.217 --> 00:17:09.167
+by CEDET or Semantic,
+
+00:17:09.267 --> 00:17:11.633
+but I can also get some sort
+
+00:17:11.733 --> 00:17:19.717
+of information for `asd` file,
+
+00:17:19.817 --> 00:17:21.550
+which is a work-in-progress,
+
+00:17:21.650 --> 00:17:23.100
+but you can go to some component file
+
+00:17:23.200 --> 00:17:24.150
+when you have a big `asd` file
+
+00:17:24.250 --> 00:17:25.200
+with lots of components
+
+00:17:25.300 --> 00:17:27.783
+and some other interesting thing.
+
+00:17:27.883 --> 00:17:30.283
+Like I said, that's a work-in-progress,
+
+00:17:30.383 --> 00:17:34.967
+Yes, so this is most of the functionality.
+
+00:17:35.067 --> 00:17:37.000
+The most interesting thing, I think,
+
+00:17:37.100 --> 00:17:40.267
+is the base for the foundation.
+
+00:17:40.367 --> 00:17:43.000
+So you can expand: let's go to source code,
+
+00:17:43.100 --> 00:17:48.333
+for example, that `fiveam`.
+
+00:17:48.433 --> 00:17:49.900
+So as we can see here, this is
+
+00:17:50.000 --> 00:17:53.433
+the `fiveam` integration, and to add it,
+
+00:17:53.533 --> 00:17:58.233
+I just define some new functions,
+
+00:17:58.333 --> 00:18:01.983
+and then you use this...
+
+00:18:02.083 --> 00:18:04.150
+set up a new form parser that we use
+
+00:18:04.250 --> 00:18:06.400
+to get some information
+
+00:18:06.500 --> 00:18:09.150
+about the `s-expression` top-level,
+
+00:18:09.250 --> 00:18:10.433
+and we define the names,
+
+00:18:10.533 --> 00:18:11.617
+we define information we want to take
+
+00:18:11.717 --> 00:18:13.700
+from the symbol and everything else.
+
+00:18:13.800 --> 00:18:17.133
+Also some [??] types
+
+00:18:17.233 --> 00:18:19.367
+that would be going to be added
+
+00:18:19.467 --> 00:18:21.067
+to the `imenu` thing:
+
+00:18:21.167 --> 00:18:24.033
+for example, `imenu test switch and test`.
+
+00:18:24.133 --> 00:18:27.317
+And then, these are, for example,
+
+00:18:27.417 --> 00:18:29.333
+some function to send information
+
+00:18:29.433 --> 00:18:33.483
+to the SLY, SLIME, or inferior Lisp
+
+00:18:33.583 --> 00:18:37.050
+depending on the Lisp that you're using.
+
+00:18:37.150 --> 00:18:39.400
+So I do not have more time.
+
+00:18:39.500 --> 00:18:40.367
+Sorry about that.
+
+00:18:40.467 --> 00:18:44.917
+Thank you very much.
+
+00:18:45.017 --> 00:18:46.383
+My name is Fermin.
+
+00:18:46.483 --> 00:18:49.733
+You can send me a mail in my mail,
+
+00:18:49.833 --> 00:18:51.233
+and that's my webpage.
+
+00:18:51.333 --> 00:18:54.950
+I hope you like it.
diff --git a/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--chapters.vtt b/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--chapters.vtt
new file mode 100644
index 00000000..a897b790
--- /dev/null
+++ b/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--chapters.vtt
@@ -0,0 +1,25 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:27.038
+Self-intro and context of the talk
+
+00:00:27.039 --> 00:00:43.119
+Goals of the workflow
+
+00:00:43.120 --> 00:01:33.999
+Requirements of the workflow
+
+00:01:34.000 --> 00:01:42.719
+Package dependencies
+
+00:01:42.720 --> 00:03:24.238
+Demo: Class notes PDFs
+
+00:03:24.239 --> 00:08:12.638
+Pulling down arXiv papers
+
+00:08:12.639 --> 00:08:59.439
+Small customizations
+
+00:08:59.440 --> 00:09:28.080
+TODO
diff --git a/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main--chapters.vtt b/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main--chapters.vtt
new file mode 100644
index 00000000..a897b790
--- /dev/null
+++ b/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main--chapters.vtt
@@ -0,0 +1,25 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:27.038
+Self-intro and context of the talk
+
+00:00:27.039 --> 00:00:43.119
+Goals of the workflow
+
+00:00:43.120 --> 00:01:33.999
+Requirements of the workflow
+
+00:01:34.000 --> 00:01:42.719
+Package dependencies
+
+00:01:42.720 --> 00:03:24.238
+Demo: Class notes PDFs
+
+00:03:24.239 --> 00:08:12.638
+Pulling down arXiv papers
+
+00:08:12.639 --> 00:08:59.439
+Small customizations
+
+00:08:59.440 --> 00:09:28.080
+TODO
diff --git a/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt b/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt
new file mode 100644
index 00000000..f6f39af7
--- /dev/null
+++ b/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt
@@ -0,0 +1,775 @@
+WEBVTT
+
+00:00.000 --> 00:00:01.520
+My name is Greg Coladonato,
+
+00:00:01.520 --> 00:00:03.199
+and this is my presentation named
+
+00:00:03.199 --> 00:00:04.560
+One Effective Computer Science
+
+00:00:04.560 --> 00:00:06.480
+Grad Student Workflow.
+
+00:06.480 --> 00:00:07.680
+For self-introduction,
+
+00:00:07.680 --> 00:00:09.599
+I've been an Emacs user since 1989
+
+00:00:09.599 --> 00:00:11.599
+when I was an undergrad in computer science,
+
+00:00:11.599 --> 00:00:13.040
+and I'm still an Emacs user
+
+00:00:13.040 --> 00:00:15.280
+now I'm getting a master's of science
+
+00:00:15.280 --> 00:00:16.880
+in computer science.
+
+00:16.880 --> 00:00:17.760
+In my day job,
+
+00:00:17.760 --> 00:00:19.199
+I work in product management
+
+00:00:19.199 --> 00:00:20.640
+in a Silicon Valley
+
+00:00:20.640 --> 00:00:21.840
+computer vision startup,
+
+00:00:21.840 --> 00:00:22.880
+and I'm proud to say
+
+00:00:22.880 --> 00:00:25.039
+I've been submitting my first PRs
+
+00:00:25.039 --> 00:00:27.038
+to open source projects this year.
+
+00:27.039 --> 00:00:29.199
+The goals of my workflow are first
+
+00:00:29.199 --> 00:00:30.800
+to make my notes easily accessible
+
+00:00:30.800 --> 00:00:33.280
+and searchable.
+
+00:33.280 --> 00:00:34.800
+Second goal, provide a way for me
+
+00:00:34.800 --> 00:00:36.480
+to permanently remember what I learned,
+
+00:00:36.480 --> 00:00:38.879
+and thirdly, to enable conceptual linking
+
+00:38.879 --> 00:00:40.480
+between related topics and entities.
+
+00:00:40.480 --> 00:00:41.920
+I'll give examples of each of these
+
+00:00:41.920 --> 00:00:43.119
+as we go along.
+
+00:00:43.120 --> 00:00:45.120
+The requirements of my workflow:
+
+00:45.120 --> 00:00:47.920
+it needs to be tightly integrated with PDFs,
+
+00:00:47.920 --> 00:00:50.399
+as most of the documents I get from grad school
+
+00:00:50.399 --> 00:00:51.440
+are in PDF form,
+
+00:00:51.440 --> 00:00:53.760
+most of my submissions of work
+
+00:00:53.760 --> 00:00:54.719
+are in PDF form,
+
+00:00:54.719 --> 00:00:56.640
+and most research papers I have access to
+
+00:00:56.640 --> 00:00:58.399
+are in PDF form as well.
+
+00:58.399 --> 00:01:00.320
+I want my workflow to be subscription-free.
+
+00:01:00.320 --> 00:01:01.840
+I do not want to be locked into
+
+01:01.840 --> 00:01:03.120
+paying a subscription
+
+00:01:03.120 --> 00:01:04.799
+just to read my own notes.
+
+00:01:04.799 --> 00:01:06.720
+It must be future proof.
+
+00:01:06.720 --> 00:01:09.600
+I have used note-taking systems in the past
+
+01:09.600 --> 00:01:12.960
+that I now no longer have a way to decode,
+
+00:01:12.960 --> 00:01:14.640
+so they're locked into some format
+
+00:01:14.640 --> 00:01:17.200
+that I can no longer use.
+
+01:17.200 --> 00:01:19.119
+I want my notes to be version-controlled,
+
+01:19.119 --> 00:01:20.479
+so that if I make a big mistake,
+
+00:01:20.479 --> 00:01:22.080
+I can undo and revert
+
+00:01:22.080 --> 00:01:23.840
+to a prior good version,
+
+01:23.840 --> 00:01:27.680
+and I want my system to use spaced repetition,
+
+00:01:27.680 --> 00:01:29.520
+which is an advanced method
+
+00:01:29.520 --> 00:01:31.840
+of learning things over time
+
+00:01:31.840 --> 00:01:33.999
+so that you don't forget them.
+
+01:34.000 --> 00:01:36.799
+The package dependencies, in brief.
+
+00:01:36.799 --> 00:01:38.960
+org-mode, org-roam, org-roam-bibtex,
+
+00:01:38.960 --> 00:01:42.719
+pdf-tools, org-noter and org-ref.
+
+01:42.720 --> 00:01:45.119
+And now let's get on to some demos.
+
+01:45.119 --> 00:01:47.520
+Here in my browser window here
+
+00:01:47.520 --> 00:01:49.680
+is a lecture in the course
+
+00:01:49.680 --> 00:01:51.840
+I'm currently taking on deep learning.
+
+01:51.840 --> 00:01:54.240
+It's very nice that the professor
+
+01:54.240 --> 00:01:55.759
+provides slides. So this is
+
+00:01:55.759 --> 00:02:00.000
+the 54-page PDF file of the slides
+
+00:02:00.000 --> 00:02:02.079
+for the lecture. The problem is,
+
+00:02:02.079 --> 00:02:03.200
+it's hard to take notes on them.
+
+00:02:03.200 --> 00:02:04.560
+It's impossible to take notes on them
+
+00:02:04.560 --> 00:02:05.840
+here in this browser,
+
+00:02:05.840 --> 00:02:07.840
+as far as I know. So what I've done is
+
+00:02:07.840 --> 00:02:11.440
+I've incorporated these slides as a PDF
+
+02:11.440 --> 00:02:12.959
+in org-roam, which...
+
+00:02:12.959 --> 00:02:16.640
+I will now visit this file
+
+00:02:16.640 --> 00:02:19.120
+and you can bring it up alongside the PDF
+
+00:02:19.120 --> 00:02:20.560
+I was just looking at here.
+
+00:02:20.560 --> 00:02:23.200
+So what i like about this system is,
+
+02:23.200 --> 00:02:24.800
+as I'm going through and reading
+
+02:24.800 --> 00:02:26.720
+watching the video of the lecture,
+
+00:02:26.720 --> 00:02:29.599
+I'm following along in the PDF notes here,
+
+02:29.599 --> 00:02:31.680
+and I'm taking my notes alongside them.
+
+02:31.680 --> 00:02:34.400
+So here's the first part of that lecture.
+
+02:34.400 --> 00:02:36.319
+You can't see at the bottom right now,
+
+00:02:36.319 --> 00:02:38.800
+but this is one of the earlier pages.
+
+00:02:38.800 --> 00:02:42.400
+I go to the second section here
+
+00:02:42.400 --> 00:02:45.040
+and you see that my notes
+
+00:02:45.040 --> 00:02:46.640
+for this part of the lecture,
+
+02:46.640 --> 00:02:48.480
+here, my notes here...
+
+00:02:48.480 --> 00:02:49.599
+I love how the notes
+
+00:02:49.599 --> 00:02:50.959
+for different parts of the lecture
+
+00:02:50.959 --> 00:02:52.560
+are coordinated with the different parts
+
+02:52.560 --> 00:02:55.200
+of the PDF that go along with the lecture.
+
+02:55.200 --> 00:02:57.519
+Now let's go back to the top of this
+
+02:57.519 --> 00:03:01.840
+and you'll see... First, you'll see my notes
+
+03:01.840 --> 00:03:03.920
+down here. I'll go into these
+
+00:03:03.920 --> 00:03:06.319
+a little bit more shortly,
+
+00:03:06.319 --> 00:03:07.200
+but one of the things
+
+00:03:07.200 --> 00:03:08.959
+that goes along with a lecture
+
+00:03:08.959 --> 00:03:11.519
+in a grad school class is these days
+
+00:03:11.519 --> 00:03:13.680
+in computer science citations
+
+00:03:13.680 --> 00:03:14.640
+for research papers
+
+00:03:14.640 --> 00:03:16.480
+that were expected to read.
+
+03:16.480 --> 00:03:20.080
+So here's one entitled MixMatch.
+
+03:20.080 --> 00:03:22.319
+I haven't downloaded this paper yet,
+
+03:22.319 --> 00:03:24.238
+so let's go. Take a look at that.
+
+00:03:24.239 --> 00:03:26.319
+So I use a keystroke to select
+
+00:03:26.319 --> 00:03:28.480
+the title of the paper
+
+00:03:28.480 --> 00:03:30.239
+and another keybinding
+
+00:03:30.239 --> 00:03:31.440
+to search for that paper
+
+00:03:31.440 --> 00:03:33.519
+on a website called arXiv.
+
+03:33.519 --> 00:03:35.280
+arXiv, if you're not familiar--
+
+00:03:35.280 --> 00:03:36.400
+and here's a match--
+
+00:03:36.400 --> 00:03:37.680
+arXiv, if you're not familiar,
+
+00:03:37.680 --> 00:03:42.000
+is an open research server
+
+03:42.000 --> 00:03:43.760
+where researchers publish papers
+
+00:03:43.760 --> 00:03:45.040
+before they're published in journals
+
+00:03:45.040 --> 00:03:47.920
+or conferences, and they are copyright-free
+
+03:47.920 --> 00:03:50.159
+and open to anyone to read.
+
+00:03:50.159 --> 00:03:52.799
+So here is the paper I was looking for.
+
+03:52.799 --> 00:03:58.560
+I copy this link into an Org mode link,
+
+00:03:58.560 --> 00:03:59.840
+and I come back to Emacs,
+
+00:03:59.840 --> 00:04:02.400
+and now another keystroke
+
+04:02.400 --> 00:04:04.879
+will revisit that website,
+
+00:04:04.879 --> 00:04:06.400
+pull down the PDF, and pull down
+
+00:04:06.400 --> 00:04:08.400
+all the information in the bibliography
+
+00:04:08.400 --> 00:04:11.040
+and put it into a bibliography here,
+
+04:11.040 --> 00:04:13.599
+inside my local bibliography.
+
+00:04:13.599 --> 00:04:15.840
+So here's the paper I was just looking at.
+
+04:15.840 --> 00:04:17.840
+Another great thing about a lot of PDFs
+
+04:17.840 --> 00:04:20.320
+is that they have an embedded outline
+
+00:04:20.320 --> 00:04:24.160
+that you can extract via the pdf-tools package.
+
+04:24.160 --> 00:04:25.680
+So now you see on the right here:
+
+04:25.680 --> 00:04:27.360
+introduction, related work, MixMatch,
+
+04:27.360 --> 00:04:30.479
+experiments. I can go right to that section,
+
+04:30.479 --> 00:04:32.639
+and this outline knows exactly
+
+00:04:32.639 --> 00:04:33.759
+which part of the PDF
+
+00:04:33.759 --> 00:04:35.919
+corresponds to each of the parts
+
+00:04:35.919 --> 00:04:37.680
+of this outline in the paper.
+
+04:37.680 --> 00:04:40.240
+So then, when I go take notes in here,
+
+04:40.240 --> 00:04:41.280
+just like in my other notes,
+
+00:04:41.280 --> 00:04:43.040
+it'll be coordinated with the PDF
+
+00:04:43.040 --> 00:04:44.639
+that goes along with it.
+
+04:44.639 --> 00:04:48.080
+So let's quit out of here.
+
+00:04:48.080 --> 00:04:50.160
+So now that I've captured that...
+
+00:04:50.160 --> 00:04:53.199
+Uh oh, this is the same paper.
+
+04:53.199 --> 00:04:56.000
+So now here I am back in my notes.
+
+00:04:56.000 --> 00:04:58.000
+now that I've captured this paper.
+
+04:58.000 --> 00:05:02.400
+What I'm going to do is make it a link,
+
+05:02.400 --> 00:05:07.520
+so the org-roam node that I just took
+
+00:05:07.520 --> 00:05:09.600
+will be here at the top. MixMatch.
+
+05:09.600 --> 00:05:10.639
+There's a little difference.
+
+00:05:10.639 --> 00:05:13.120
+You'll see here, this m is a different case
+
+00:05:13.120 --> 00:05:16.240
+than this m, and that's one of my to-do list.
+
+00:05:16.240 --> 00:05:18.720
+I'd like to make it so that this search
+
+00:05:18.720 --> 00:05:20.320
+is a little less case-sensitive.
+
+00:05:20.320 --> 00:05:23.520
+So now I've linked this link to this paper
+
+00:05:23.520 --> 00:05:25.680
+into these notes, and now these are...
+
+00:05:25.680 --> 00:05:26.639
+you'll see a little bit later
+
+00:05:26.639 --> 00:05:29.360
+how these links can be graphed and followed
+
+00:05:29.360 --> 00:05:32.960
+and so forth. While I'm in this document,
+
+00:05:32.960 --> 00:05:33.680
+I'd like to show you
+
+00:05:33.680 --> 00:05:36.639
+that when I'm learning something
+
+05:36.639 --> 00:05:38.400
+and I learn a new fact,
+
+05:38.400 --> 00:05:40.320
+I write down what I learned
+
+00:05:40.320 --> 00:05:42.400
+in the form of a question and an answer.
+
+00:05:42.400 --> 00:05:45.039
+So you can see here, there's a question
+
+00:05:45.039 --> 00:05:46.800
+that begins with who, what, where.
+
+00:05:46.800 --> 00:05:49.360
+It begins with a w word, or how,
+
+05:49.360 --> 00:05:53.039
+or if or is, and it ends in a question mark,
+
+00:05:53.039 --> 00:05:54.960
+and then following that is another string
+
+00:05:54.960 --> 00:05:56.560
+that ends in a period.
+
+05:56.560 --> 00:05:58.240
+So I have a... I'd like to do this
+
+00:05:58.240 --> 00:05:59.280
+in Emacs as well, but I haven't
+
+00:05:59.280 --> 00:06:00.319
+worked that out yet.
+
+00:06:00.319 --> 00:06:04.639
+I have a script that will...
+
+06:04.639 --> 00:06:07.680
+Let's find a-n-k-i-f.
+
+06:07.680 --> 00:06:09.680
+Okay, I have a script that will go through
+
+00:06:09.680 --> 00:06:13.680
+all the notes in my org-roam directory
+
+06:13.680 --> 00:06:16.880
+and find all the questions.
+
+00:06:16.880 --> 00:06:20.720
+Now let's pull up the most...
+
+00:06:20.720 --> 00:06:24.319
+No, don't edit the buffer.
+
+06:24.319 --> 00:06:29.039
+Save that. Come back to here.
+
+06:29.039 --> 00:06:31.680
+So now you can see that all the questions
+
+00:06:31.680 --> 00:06:32.560
+that I've written in my notes
+
+06:32.560 --> 00:06:33.759
+have now been ANKIFIED.
+
+00:06:33.759 --> 00:06:34.880
+Now what's that mean?
+
+00:06:34.880 --> 00:06:40.960
+Anki is this program here
+
+06:40.960 --> 00:06:43.199
+which is a flashcard system
+
+00:06:43.199 --> 00:06:44.560
+based on the idea...
+
+00:06:44.560 --> 00:06:48.000
+No, let's not download that right now.
+
+00:06:48.000 --> 00:06:50.720
+This is a system that enables
+
+00:06:50.720 --> 00:06:53.120
+the easy creation of flash cards
+
+06:53.120 --> 00:06:54.479
+that show you the front,
+
+00:06:54.479 --> 00:06:55.360
+show you the back,
+
+00:06:55.360 --> 00:06:56.160
+and then you decide
+
+00:06:56.160 --> 00:07:00.000
+if you knew that question or not.
+
+07:00.000 --> 00:07:02.639
+So I don't want to spend much time on this,
+
+00:07:02.639 --> 00:07:04.639
+but everything I'm learning in a class,
+
+00:07:04.639 --> 00:07:06.800
+I write into my notes as a question
+
+00:07:06.800 --> 00:07:08.800
+that I load into this flashcard system
+
+00:07:08.800 --> 00:07:10.880
+that then I can review on a walk,
+
+00:07:10.880 --> 00:07:13.680
+or on a bus ride, or whatever,
+
+07:13.680 --> 00:07:16.400
+and stay on top of indefinitely.
+
+00:07:16.400 --> 00:07:17.440
+As long as I can continue
+
+07:17.440 --> 00:07:18.400
+to keep reviewing that,
+
+00:07:18.400 --> 00:07:20.639
+I will keep that information
+
+00:07:20.639 --> 00:07:22.319
+fresh in my mind.
+
+07:22.319 --> 00:07:24.479
+So now let's come out of these files
+
+07:24.479 --> 00:07:25.039
+back to here.
+
+00:07:25.039 --> 00:07:27.440
+So I've demoed class note PDFs,
+
+00:07:27.440 --> 00:07:29.440
+grabbing papers from arXiv,
+
+07:29.440 --> 00:07:31.199
+autogenerating the skeletons
+
+00:07:31.199 --> 00:07:32.720
+and the flashcards,
+
+00:07:32.720 --> 00:07:35.280
+and now let's see what it looks like.
+
+07:35.280 --> 00:07:40.160
+Let's visualize the connections
+
+07:40.160 --> 00:07:42.000
+between these nodes.
+
+07:42.000 --> 00:07:45.199
+So here is a graph for the file
+
+00:07:45.199 --> 00:07:46.319
+I'm reading right now:
+
+00:07:46.319 --> 00:07:49.520
+One Effective Grad Student Workflow.
+
+07:49.520 --> 00:07:53.599
+Here is the node I have a link to
+
+00:07:53.599 --> 00:07:54.639
+in my Org mode document
+
+07:54.639 --> 00:07:57.199
+on spaced repetition. We can open that
+
+00:07:57.199 --> 00:07:59.280
+and come right back to Emacs,
+
+07:59.280 --> 00:08:01.680
+and I just love that.
+
+08:01.680 --> 00:08:03.919
+For the more complicated topics,
+
+00:08:03.919 --> 00:08:05.520
+you can see connections between things
+
+00:08:05.520 --> 00:08:07.520
+that you maybe didn't realize you had,
+
+00:08:07.520 --> 00:08:10.240
+and some of the notes you've taken.
+
+00:08:10.240 --> 00:08:12.638
+And so I'm getting near the end.
+
+00:08:12.639 --> 00:08:15.120
+I just want to show some small customizations.
+
+08:15.120 --> 00:08:17.120
+I save my org mode files
+
+00:08:17.120 --> 00:08:18.479
+that are in org-roam
+
+00:08:18.479 --> 00:08:21.520
+with a year year month month date prefix,
+
+00:08:21.520 --> 00:08:24.639
+so that I can tell when the node was created
+
+00:08:24.639 --> 00:08:26.560
+I also truncate them at 30 characters,
+
+00:08:26.560 --> 00:08:27.919
+so that when I do an ls,
+
+00:08:27.919 --> 00:08:29.280
+they don't word wrap.
+
+00:08:29.280 --> 00:08:32.800
+Maybe that's OCD.
+
+08:32.800 --> 00:08:38.159
+I also use an ID format that is year month
+
+00:08:38.159 --> 00:08:40.479
+day hour month hour minute second
+
+08:40.479 --> 00:08:43.279
+rather than the full UUID format
+
+00:08:43.279 --> 00:08:44.720
+because that number up there,
+
+00:08:44.720 --> 00:08:46.160
+that ID makes sense to me
+
+00:08:46.160 --> 00:08:50.160
+and it gives me an idea of when that node--
+
+08:50.160 --> 00:08:51.040
+which you can, by the way,
+
+00:08:51.040 --> 00:08:55.040
+you can have--even one of these subheadings
+
+00:08:55.040 --> 00:08:56.240
+can be a node in org-roam.
+
+00:08:56.240 --> 00:08:57.120
+So now that you can see
+
+08:57.120 --> 00:08:59.439
+that was created right now.
+
+08:59.440 --> 00:09:00.640
+Some of the TODOs I still have
+
+00:09:00.640 --> 00:09:02.720
+in this system... We don't have to go
+
+00:09:02.720 --> 00:09:04.000
+too much into them, but I mentioned
+
+00:09:04.000 --> 00:09:07.600
+case insensitivity, and I'd like
+
+00:09:07.600 --> 00:09:10.080
+to make some improvements to org-noter.
+
+00:09:10.080 --> 00:09:12.240
+At this point, I'd just like to...
+
+09:12.240 --> 00:09:14.959
+I have a list of people I'd like to thank.
+
+00:09:14.959 --> 00:09:16.240
+I'm not gonna read the whole list out,
+
+00:09:16.240 --> 00:09:17.680
+but they're a bunch of software engineers
+
+00:09:17.680 --> 00:09:20.399
+that created great free software
+
+00:09:20.399 --> 00:09:21.519
+that's very useful to me
+
+00:09:21.519 --> 00:09:23.839
+and I use every day, so thank you to them,
+
+00:09:23.839 --> 00:09:27.080
+and thank you all for listening to my talk.
+
+00:09:27.080 --> 00:09:28.080
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.vtt b/2021/captions/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.vtt
new file mode 100644
index 00000000..4f0147b2
--- /dev/null
+++ b/2021/captions/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.vtt
@@ -0,0 +1,979 @@
+WEBVTT
+
+00:00.000 --> 00:01.567
+Hi everyone! I'm Mehmet Tekman,
+
+00:01.567 --> 00:02.483
+and I'm here to talk to you
+
+00:02.483 --> 00:03.700
+about using Amazon Kindles
+
+00:03.700 --> 00:05.040
+as a productivity dashboard for
+
+00:05.040 --> 00:07.359
+your various projects.
+
+00:07.359 --> 00:09.519
+In a nutshell, you describe your machines,
+
+00:09.519 --> 00:11.317
+your commands, and your schedules
+
+00:11.317 --> 00:13.120
+in an Org-Mode file,
+
+00:13.120 --> 00:14.933
+and then you just initialize
+
+00:14.933 --> 00:16.960
+your Kindle devices.
+
+00:16.960 --> 00:18.367
+These devices are asleep
+
+00:18.367 --> 00:19.117
+most of the time,
+
+00:19.117 --> 00:20.720
+but they wake up at scheduled times
+
+00:20.720 --> 00:22.033
+to retrieve content
+
+00:22.033 --> 00:24.800
+from the centralized server.
+
+00:24.800 --> 00:27.599
+Content can be Org mode and Emacs-based,
+
+00:27.599 --> 00:29.500
+or it can be from Web content,
+
+00:29.500 --> 00:42.840
+or it can just be static images and WAV.
+
+00:42.840 --> 00:45.600
+If you, like me, struggle to
+
+00:45.600 --> 00:46.833
+keep your life under tabs,
+
+00:46.833 --> 00:48.300
+or find it very hard to separate
+
+00:48.300 --> 00:49.417
+your work life from your home life,
+
+00:49.417 --> 00:51.283
+then you, like me, likely need
+
+00:51.283 --> 00:52.917
+some kind of passive background service
+
+00:52.917 --> 00:54.083
+that reminds you of where you are
+
+00:54.083 --> 00:55.267
+and what you are supposed to be doing.
+
+00:55.267 --> 00:56.960
+Even if it's just a sign saying,
+
+00:56.960 --> 00:58.640
+"You're at home! Relax!"
+
+00:58.640 --> 01:00.400
+An Amazon Kindle is perfect for this.
+
+01:00.400 --> 01:01.717
+In a nutshell, it's a cheap
+
+01:01.717 --> 01:03.117
+black and white e-ink device
+
+01:03.117 --> 01:03.800
+that can go for weeks
+
+01:03.800 --> 01:05.033
+without needing a single charge.
+
+01:05.033 --> 01:06.767
+Every year, Amazon brings out
+
+01:06.767 --> 01:07.983
+an incrementally better model,
+
+01:07.983 --> 01:09.333
+which makes the old devices obsolete,
+
+01:09.333 --> 01:11.067
+and you can find these older models
+
+01:11.067 --> 01:13.360
+for 5 euros on second-hand websites.
+
+01:13.360 --> 01:15.360
+Plus it runs Linux, has WiFi networking,
+
+01:15.360 --> 01:16.987
+and has a dedicated forum of hackers
+
+01:16.987 --> 01:19.200
+for getting the most out of the device.
+
+01:19.200 --> 01:20.366
+Some drawbacks of this is that
+
+01:20.366 --> 01:22.799
+the device often comes with unwanted bloat:
+
+01:22.799 --> 01:24.050
+over-the-air updates,
+
+01:24.050 --> 01:25.833
+it phones home to Amazon regularly,
+
+01:25.833 --> 01:27.033
+it has a secret microphone
+
+01:27.033 --> 01:27.983
+embedded in the device,
+
+01:27.983 --> 01:29.433
+and it has a bunch of creepy
+
+01:29.433 --> 01:30.633
+seemingly interdependent
+
+01:30.633 --> 01:31.439
+background processes,
+
+01:31.439 --> 01:34.083
+where killing one kind of kills the others
+
+01:34.083 --> 01:36.560
+risking that you will break the device.
+
+01:36.560 --> 01:37.799
+But this is where the community
+
+01:37.799 --> 01:38.883
+really shines through,
+
+01:38.883 --> 01:40.483
+since the friendly (and not-so-friendly)
+
+01:40.483 --> 01:41.583
+users (and developers)
+
+01:41.583 --> 01:43.200
+from the MobileRead forums have pretty much
+
+01:43.200 --> 01:44.560
+scraped out a good portion of the
+
+01:44.560 --> 01:46.960
+harmful Amazon scripts from the device.
+
+01:46.960 --> 01:48.550
+Some of the devices even use
+
+01:48.550 --> 01:49.483
+Awesome Window Manager,
+
+01:49.483 --> 01:50.800
+meaning you can really play around
+
+01:50.800 --> 01:51.620
+with the existing system
+
+01:51.620 --> 01:52.633
+without having to create
+
+01:52.633 --> 01:54.233
+your own X11 server.
+
+01:54.233 --> 01:55.377
+This then empowers users
+
+01:55.377 --> 01:57.600
+to display whatever they want on the device.
+
+01:57.600 --> 01:59.040
+One project that really got this going
+
+01:59.040 --> 02:00.560
+was the Kindle-Dash dashboard from
+
+02:00.560 --> 02:02.320
+Pascal Widdershoven, who really refined a
+
+02:02.320 --> 02:03.483
+lot of the internal scripts
+
+02:03.483 --> 02:05.439
+to stabilize the device.
+
+02:05.439 --> 02:06.600
+However, the project then
+
+02:06.600 --> 02:07.650
+puts the onus on the device
+
+02:07.650 --> 02:08.560
+to retrieve the data from
+
+02:08.560 --> 02:09.950
+somewhere else over the internet,
+
+02:09.950 --> 02:10.753
+and so you still need to
+
+02:10.753 --> 02:11.440
+generate the content
+
+02:11.440 --> 02:13.200
+and place it on the web somewhere.
+
+02:13.200 --> 02:14.640
+Plus you need to do this and manage it
+
+02:14.640 --> 02:17.360
+for every Kindle device that you have.
+
+02:17.360 --> 02:18.500
+Kindle-Sync, however,
+
+02:18.500 --> 02:19.867
+is an entirely different beast,
+
+02:19.867 --> 02:21.800
+albeit one that builds off of the works
+
+02:21.800 --> 02:23.440
+of the aforementioned projects.
+
+02:23.440 --> 02:24.800
+It assumes that instead of just having
+
+02:24.800 --> 02:26.050
+one Kindle device around
+
+02:26.050 --> 02:27.133
+that you wish to re-purpose
+
+02:27.133 --> 02:28.080
+for productivity purposes,
+
+02:28.080 --> 02:28.983
+that you actually have
+
+02:28.983 --> 02:30.117
+multiple Kindle devices
+
+02:30.117 --> 02:30.794
+that you want to manage
+
+02:30.794 --> 02:32.720
+and configure in tandem.
+
+02:32.720 --> 02:33.633
+Everything is managed
+
+02:33.633 --> 02:35.667
+from a dedicated server (or a raspberry pi)
+
+02:35.667 --> 02:37.440
+which distributes jobs to multiple Kindles,
+
+02:37.440 --> 02:39.519
+running on different update timers.
+
+02:39.519 --> 02:40.786
+These timers are all managed
+
+02:40.786 --> 02:41.486
+from the server,
+
+02:41.486 --> 02:43.017
+and all the Kindle device has to do is:
+
+02:43.017 --> 02:45.200
+to wake up, power on the WiFi,
+
+02:45.200 --> 02:47.280
+receive some media, display the media, and
+
+02:47.280 --> 02:49.680
+receive a barebones RTC sleep request.
+
+02:49.680 --> 02:51.040
+Then it sleeps for the requested time,
+
+02:51.040 --> 02:52.800
+consuming no power, whilst displaying the
+
+02:52.800 --> 02:55.200
+desired media. That is maybe 10 seconds
+
+02:55.200 --> 02:57.599
+of awake time between each request.
+
+02:57.599 --> 02:58.933
+Cron does not actually run
+
+02:58.933 --> 02:59.933
+on the Kindle device itself,
+
+02:59.933 --> 03:01.600
+simply because it does not reliably work.
+
+03:01.600 --> 03:04.050
+All of this is handled by the server.
+
+03:04.050 --> 03:05.599
+With the server-client model,
+
+03:05.599 --> 03:08.000
+it also tries to restrict Amazon access.
+
+03:08.000 --> 03:09.517
+SSH keys are shared
+
+03:09.517 --> 03:11.217
+only from the client to the server,
+
+03:11.217 --> 03:12.517
+but not from the server to the client,
+
+03:12.517 --> 03:13.920
+so the Kindle cannot connect
+
+03:13.920 --> 03:16.319
+to the Raspberry Pi without a password.
+
+03:16.319 --> 03:18.033
+IPtables rules are also set
+
+03:18.033 --> 03:19.483
+so that the Kindle cannot phone home
+
+03:19.483 --> 03:20.667
+to Amazon, and the connections
+
+03:20.667 --> 03:23.200
+are restricted to just the LAN.
+
+03:23.200 --> 03:24.820
+So I got very curious at one point
+
+03:24.820 --> 03:26.133
+and decided to see how long
+
+03:26.133 --> 03:27.599
+a Kindle could last on a single charge
+
+03:27.599 --> 03:28.560
+in such an arrangement,
+
+03:28.560 --> 03:30.640
+so that every 15 minutes for 18 hours,
+
+03:30.640 --> 03:31.599
+I tested the device
+
+03:31.599 --> 03:32.959
+by sending a media item
+
+03:32.959 --> 03:35.200
+and recording the battery level.
+
+03:35.200 --> 03:36.159
+The Kindle doesn't seem to
+
+03:36.159 --> 03:36.959
+report the battery level
+
+03:36.959 --> 03:37.760
+very continuously,
+
+03:37.760 --> 03:39.040
+but at discrete percentages,
+
+03:39.040 --> 03:39.840
+so that you could end up with
+
+03:39.840 --> 03:42.159
+a graph that looks like this.
+
+03:42.159 --> 03:43.617
+Assuming you have half the charge,
+
+03:43.617 --> 03:45.200
+and use it once every hour -
+
+03:45.200 --> 03:48.319
+it will drop by 10% battery in 76 hours,
+
+03:48.319 --> 03:49.760
+which is roughly three days.
+
+03:49.760 --> 03:50.640
+It's hard to extrapolate
+
+03:50.640 --> 03:52.400
+with only three good summarized data points,
+
+03:52.400 --> 03:53.519
+of which the number of requests
+
+03:53.519 --> 03:54.879
+per battery level appear to diminish
+
+03:54.879 --> 03:56.640
+as shown in the table below,
+
+03:56.640 --> 03:58.560
+but the final result yields 76 requests
+
+03:58.560 --> 04:00.799
+with an average loss of 0.5% battery life
+
+04:00.799 --> 04:02.273
+per request. Which is not bad!
+
+04:02.273 --> 04:04.400
+Assuming you do a request every 2 hours
+
+04:04.400 --> 04:06.000
+from 8am to 8pm,
+
+04:06.000 --> 04:07.040
+and let it sleep at night,
+
+04:07.040 --> 04:09.040
+then that's approximately 6 requests a day,
+
+04:09.040 --> 04:10.400
+which could easily last a device
+
+04:10.400 --> 04:11.280
+for a month.
+
+04:11.280 --> 04:12.586
+The ksync script does
+
+04:12.586 --> 04:13.200
+essentially everything:
+
+04:13.200 --> 04:14.799
+from generating and fetching the media,
+
+04:14.799 --> 04:16.720
+to initializing all Kindle devices,
+
+04:16.720 --> 04:18.160
+generating the server cronjobs,
+
+04:18.160 --> 04:19.199
+log report summaries,
+
+04:19.199 --> 04:20.400
+editing the config tables,
+
+04:20.400 --> 04:21.199
+and much more.
+
+04:21.199 --> 04:22.880
+The media operations are comparatively
+
+04:22.880 --> 04:23.680
+much more complex
+
+04:23.680 --> 04:25.280
+and encompass a few media use cases
+
+04:25.280 --> 04:26.400
+such as fetching the weather
+
+04:26.400 --> 04:28.560
+(though only from Open Weather Maps)
+
+04:28.560 --> 04:30.000
+and retrieving Google Calendar views
+
+04:30.000 --> 04:32.000
+by week, month, agenda, and four day view.
+
+04:32.000 --> 04:33.199
+You can retrieve Org-Mode data
+
+04:33.199 --> 04:34.639
+from an Emacs instance on the server,
+
+04:34.639 --> 04:35.360
+which in my case
+
+04:35.360 --> 04:36.720
+I produce views for an agenda
+
+04:36.720 --> 04:39.360
+or a sparse tree of my main projects file.
+
+04:39.360 --> 04:41.120
+Finally we have gallery and wavfile,
+
+04:41.120 --> 04:42.240
+which are static resources
+
+04:42.240 --> 04:44.000
+which will never change once generated.
+
+04:44.000 --> 04:45.199
+The idea is that you feed it
+
+04:45.199 --> 04:46.400
+text and an image location,
+
+04:46.400 --> 04:47.040
+and it generates
+
+04:47.040 --> 04:48.720
+a Kindle-compatible image
+
+04:48.720 --> 04:51.280
+using imagemagick as a backend for it.
+
+04:51.280 --> 04:52.240
+In the case of the wavfile,
+
+04:52.240 --> 04:54.160
+it uses espeak on the backend.
+
+04:54.160 --> 04:55.280
+The below is summarized
+
+04:55.280 --> 04:56.317
+from the help-me text
+
+04:56.317 --> 04:57.199
+in the main ksync file,
+
+04:57.199 --> 04:58.160
+but essentially, you need to
+
+04:58.160 --> 04:59.919
+define your config in the CSV files,
+
+04:59.919 --> 05:01.440
+which we talk about in the next section;
+
+05:01.440 --> 05:03.120
+initialize all your Kindle devices,
+
+05:03.120 --> 05:04.720
+i.e. copy over SSH keys,
+
+05:04.720 --> 05:06.160
+kill all the unnecessary services,
+
+05:06.160 --> 05:07.840
+and prime them for media collection;
+
+05:07.840 --> 05:08.720
+and ensure that you have
+
+05:08.720 --> 05:10.080
+all your static media generated
+
+05:10.080 --> 05:11.440
+and fetchable; and finally
+
+05:11.440 --> 05:12.720
+you then refresh the scheduling
+
+05:12.720 --> 05:14.240
+on the server.
+
+05:14.240 --> 05:15.759
+Okay, so this is all good and well,
+
+05:15.759 --> 05:17.039
+and we now know what the server does
+
+05:17.039 --> 05:18.400
+and how to probe and inspect it -
+
+05:18.400 --> 05:19.759
+but how does the server generate
+
+05:19.759 --> 05:21.120
+much of the content?
+
+05:21.120 --> 05:22.080
+So a lot of the content
+
+05:22.080 --> 05:23.360
+will be dynamically generated,
+
+05:23.360 --> 05:24.639
+meaning it cannot be cached
+
+05:24.639 --> 05:26.720
+and is likely to change from hour to hour.
+
+05:26.720 --> 05:28.400
+The media content that is generated here
+
+05:28.400 --> 05:29.759
+are mostly PNG images
+
+05:29.759 --> 05:30.567
+and have a timestamp
+
+05:30.567 --> 05:32.320
+embedded in their filenames.
+
+05:32.320 --> 05:33.520
+The Emacs-specific content
+
+05:33.520 --> 05:34.560
+consists of a few views,
+
+05:34.560 --> 05:36.000
+namely the org-gcal views,
+
+05:36.000 --> 05:37.600
+org-agenda, and org-calories --
+
+05:37.600 --> 05:39.520
+essentially anything that Emacs can display
+
+05:39.520 --> 05:42.000
+and that you want to capture into an image.
+
+05:42.000 --> 05:43.360
+Emacs can't (as far as I know)
+
+05:43.360 --> 05:44.639
+render graphics in a headless way,
+
+05:44.639 --> 05:45.600
+so what we do instead
+
+05:45.600 --> 05:48.240
+is run Emacs in a dummy minimal X11 session
+
+05:48.240 --> 05:50.080
+via "xvrb-run."
+
+05:50.080 --> 05:51.680
+From inside, you can take screenshots
+
+05:51.680 --> 05:52.233
+as you would in
+
+05:52.233 --> 05:53.440
+a normal desktop environment,
+
+05:53.440 --> 05:54.400
+but with the benefit that
+
+05:54.400 --> 05:56.479
+you don't actually need to invoke a desktop
+
+05:56.479 --> 05:58.560
+or interfere with an existing one.
+
+05:58.560 --> 05:59.840
+The minimal elisp shown here
+
+05:59.840 --> 06:00.720
+is all that is required
+
+06:00.720 --> 06:02.400
+to output your desired image from Emacs
+
+06:02.400 --> 06:04.479
+and configure it for the Kindle environment.
+
+06:04.479 --> 06:05.360
+On the web side of things,
+
+06:05.360 --> 06:06.400
+we don't really need to invoke
+
+06:06.400 --> 06:07.520
+a dummy X11 session
+
+06:07.520 --> 06:09.120
+because Chromium can run headless
+
+06:09.120 --> 06:09.919
+and can be controlled
+
+06:09.919 --> 06:11.600
+by the node library "puppeteer"
+
+06:11.600 --> 06:13.039
+to render dynamic content,
+
+06:13.039 --> 06:14.560
+focus on regions of the webpage,
+
+06:14.560 --> 06:16.080
+and take snapshots.
+
+06:16.080 --> 06:17.600
+The static content comprises
+
+06:17.600 --> 06:19.600
+of two types: images and audio.
+
+06:19.600 --> 06:21.520
+The content is accessed by a key,
+
+06:21.520 --> 06:22.560
+in this case Batman,
+
+06:22.560 --> 06:23.600
+and the content information
+
+06:23.600 --> 06:25.199
+is given by the "--extra" parameter
+
+06:25.199 --> 06:26.960
+which describes either or both
+
+06:26.960 --> 06:30.880
+an image and text.
+
+06:30.880 --> 06:32.248
+Okay, so now we have content,
+
+06:32.248 --> 06:33.600
+how do we schedule this content
+
+06:33.600 --> 06:34.960
+to appear on our desired machines
+
+06:34.960 --> 06:36.400
+at desired times?
+
+06:36.400 --> 06:37.759
+Everything is run via cron.
+
+06:37.759 --> 06:38.720
+So previously we saw that
+
+06:38.720 --> 06:40.880
+we only needed the tables MACHINES.csv,
+
+06:40.880 --> 06:43.440
+COMMANDS.csv, and multiple TIME_*.csv tables
+
+06:43.440 --> 06:44.880
+for the shell script to work.
+
+06:44.880 --> 06:46.479
+But Org-Mode does this far easier,
+
+06:46.479 --> 06:47.919
+since you can just have everything
+
+06:47.919 --> 06:49.039
+in the same file,
+
+06:49.039 --> 06:50.720
+and with the helper minor-mode,
+
+06:50.720 --> 06:51.360
+manage everything
+
+06:51.360 --> 06:53.120
+from a single Org-Mode document.
+
+06:53.120 --> 06:55.120
+Here I have 4 kindles and their shortnames.
+
+06:55.120 --> 06:56.160
+Yes, I even have a Kindle
+
+06:56.160 --> 06:57.520
+hanging outside my door.
+
+06:57.520 --> 06:58.960
+I have 11 defined commands
+
+06:58.960 --> 07:00.800
+which represent the views I want to see,
+
+07:00.800 --> 07:02.319
+and there are 4 timetables I use,
+
+07:02.319 --> 07:02.800
+but you can have
+
+07:02.800 --> 07:04.319
+everything on one, if you like.
+
+07:04.319 --> 07:05.360
+Rows are machine names,
+
+07:05.360 --> 07:06.800
+and columns are corresponding hours
+
+07:06.800 --> 07:07.840
+at which they run.
+
+07:07.840 --> 07:09.440
+Trust me, it's easier to configure
+
+07:09.440 --> 07:10.960
+repeating tasks just by repeating them
+
+07:10.960 --> 07:12.720
+multiple times, because at least this way,
+
+07:12.720 --> 07:13.680
+it's human readable,
+
+07:13.680 --> 07:14.880
+and the script which converts these
+
+07:14.880 --> 07:15.759
+to a cronjob
+
+07:15.759 --> 07:18.800
+collapses the repeating tasks by itself.
+
+07:18.800 --> 07:20.560
+The ksync script can be called
+
+07:20.560 --> 07:23.120
+from within the config.org file
+
+07:23.120 --> 07:24.683
+using this convenient
+
+07:24.683 --> 07:26.960
+use-package declaration.
+
+07:26.960 --> 07:28.319
+All that one needs to do
+
+07:28.319 --> 07:30.560
+is to configure the ENVIRONMENT_VARIABLES
+
+07:30.560 --> 07:32.880
+by setting them in this table
+
+07:32.880 --> 07:34.479
+where you set the repo name,
+
+07:34.479 --> 07:36.160
+the config directory,
+
+07:36.160 --> 07:37.599
+where the media shall go,
+
+07:37.599 --> 07:38.960
+and the server IP,
+
+07:38.960 --> 07:39.919
+although this can be
+
+07:39.919 --> 07:41.360
+automatically detected.
+
+07:41.360 --> 07:42.240
+The package allows you
+
+07:42.240 --> 07:43.440
+to export your tables
+
+07:43.440 --> 07:46.720
+by running C-c C-c on them,
+
+07:46.720 --> 07:49.199
+and allows you to update all the jobs
+
+07:49.199 --> 07:52.319
+related to each of your clients.
+
+07:52.319 --> 07:53.759
+You can also initialize clients
+
+07:53.759 --> 07:55.120
+using this package --
+
+07:55.120 --> 07:56.479
+for either all of them
+
+07:56.479 --> 07:58.479
+or individual clients --
+
+07:58.479 --> 07:59.599
+and the package comes with
+
+07:59.599 --> 08:01.120
+some convenience functions
+
+08:01.120 --> 08:02.720
+to do this automatically
+
+08:02.720 --> 08:06.720
+for all tables in the buffer.
+
+08:06.720 --> 08:08.319
+With this, I want to say a big thank you
+
+08:08.319 --> 08:09.840
+to Takaaki Ishikawa
+
+08:09.840 --> 08:11.520
+for his fantastic "org-tree-slide"
+
+08:11.520 --> 08:12.879
+presentation package.
+
+08:12.879 --> 08:14.136
+To Pascal Widdershoven
+
+08:14.136 --> 08:15.803
+and David Hamp-Gonsalves,
+
+08:15.803 --> 08:16.633
+for their fantastic
+
+08:16.633 --> 08:17.840
+kindle-dash repositories,
+
+08:17.840 --> 08:19.903
+for which some of my internal Kindle scripts
+
+08:19.903 --> 08:20.720
+are derived from.
+
+08:20.720 --> 08:22.160
+Also a big thanks to the friendly
+
+08:22.160 --> 08:23.520
+and not-so-friendly users and hackers
+
+08:23.520 --> 08:24.960
+in the MobileRead forums.
+
+08:24.960 --> 08:25.919
+And finally, a big thanks
+
+08:25.919 --> 08:26.960
+to the Emacs community
+
+08:26.960 --> 08:28.270
+and the conference organizers.
+
+08:28.270 --> 08:31.120
+Thank you! [captions by Mehmet]
diff --git a/2021/captions/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.vtt b/2021/captions/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.vtt
new file mode 100644
index 00000000..a894741c
--- /dev/null
+++ b/2021/captions/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.vtt
@@ -0,0 +1,514 @@
+WEBVTT
+
+00:00.880 --> 00:02.386
+Good afternoon. I'm Nicolas Rougier,
+
+00:02.386 --> 00:04.080
+and today I would like to present some of
+
+00:04.080 --> 00:06.560
+the experiments I've made with Emacs.
+
+00:06.560 --> 00:08.400
+My initial motivation was an
+
+00:08.400 --> 00:09.920
+inner feeling that something was
+
+00:09.920 --> 00:12.559
+wrong with most modern editors,
+
+00:12.559 --> 00:14.559
+and before I show you my experiment,
+
+00:14.559 --> 00:16.004
+I will try to demonstrate
+
+00:16.004 --> 00:17.440
+what I think is wrong.
+
+00:17.440 --> 00:18.720
+Note that this is mostly my
+
+00:18.720 --> 00:20.640
+personal feelings and I did not commit
+
+00:20.640 --> 00:23.279
+any experiment to test is this or
+
+00:23.279 --> 00:25.279
+that choice would be better.
+
+00:25.279 --> 00:26.781
+Of course, some of you might
+
+00:26.781 --> 00:30.480
+legitimately disagree with me.
+
+00:30.480 --> 00:32.399
+Let's start with a short review of a
+
+00:32.399 --> 00:35.160
+modern text editor. I chose Nova editor
+
+00:35.160 --> 00:37.680
+that is only available on OS X,
+
+00:37.680 --> 00:39.920
+but there are actually many other very
+
+00:39.920 --> 00:42.960
+similar editors, such as, for example,
+
+00:42.960 --> 00:45.680
+Atom, Sublime Text, or Visual Studio.
+
+00:45.680 --> 00:47.760
+Now it's quite interesting because I think
+
+00:47.760 --> 00:50.239
+it manages to gather everything what is
+
+00:50.239 --> 00:53.120
+wrong in this single screenshot that is
+
+00:53.120 --> 00:55.920
+also the teaser image on their website.
+
+00:55.920 --> 00:58.160
+So let me now review it according to my
+
+00:58.160 --> 01:01.039
+personal biases and for further analysis
+
+01:01.039 --> 01:02.667
+I can only recommend to attend
+
+01:02.667 --> 01:05.680
+David Wilson's talks tomorrow.
+
+01:05.680 --> 01:07.360
+The most (inaudible) thing that really
+
+01:07.360 --> 01:11.583
+bothers me is the actual area dedicated
+
+01:11.583 --> 01:13.504
+to the editing. When you measure
+
+01:13.504 --> 01:15.553
+this editing area as I did on the
+
+01:15.553 --> 01:19.112
+screenshot, you'll find an impressive 35%,
+
+01:19.112 --> 01:22.316
+which is ridiculously small
+
+01:22.316 --> 01:24.240
+compared to the side of the window.
+
+01:24.240 --> 01:26.320
+This means that two-thirds of the window
+
+01:26.320 --> 01:30.079
+area is dedicated to peripheral information
+
+01:30.079 --> 01:32.079
+that you don't look so often
+
+01:32.079 --> 01:34.159
+when writing code or prose.
+
+01:34.159 --> 01:36.560
+This results in the main editing area to
+
+01:36.560 --> 01:39.119
+be reduced to one third even if we tend
+
+01:39.119 --> 01:42.040
+to have larger and larger monitors, I think
+
+01:42.040 --> 01:45.600
+this is wrong to lost so much of space.
+
+01:45.600 --> 01:47.759
+If we now look closer at this peripheral
+
+01:47.759 --> 01:49.920
+information, we can immediately see that
+
+01:49.920 --> 01:52.079
+there is a lot of redundancy.
+
+01:52.079 --> 01:53.617
+For example, on the screenshot,
+
+01:53.617 --> 01:55.709
+I highlighted the information related
+
+01:55.709 --> 01:57.759
+to the file name being edited.
+
+01:57.759 --> 02:00.640
+Unless I missed, some this file name
+
+02:00.640 --> 02:02.320
+is displayed four times.
+
+02:02.320 --> 02:04.399
+This is way too much even if it
+
+02:04.399 --> 02:06.320
+displayed for different reasons
+
+02:06.320 --> 02:08.959
+in different contexts, but still I think
+
+02:08.959 --> 02:10.720
+you have a design problem if you need to
+
+02:10.720 --> 02:14.560
+repeat an information up to four times.
+
+02:14.560 --> 02:15.947
+If we now look at colors,
+
+02:15.947 --> 02:18.160
+you can count 15 different colors,
+
+02:18.160 --> 02:20.560
+such that it is impossible to guess
+
+02:20.560 --> 02:22.959
+which color indicates what.
+
+02:22.959 --> 02:25.440
+Such colorization based on syntax is
+
+02:25.440 --> 02:28.720
+actually quite widespread in code editors
+
+02:28.720 --> 02:30.959
+including Emacs, unfortunately.
+
+02:30.959 --> 02:32.640
+The problem is that we still don't know
+
+02:32.640 --> 02:34.319
+whether it helps or not.
+
+02:34.319 --> 02:36.780
+Some studies say yes, some others say no,
+
+02:36.780 --> 02:38.239
+and in the end the conclusion
+
+02:38.239 --> 02:40.080
+is not yet settled.
+
+02:40.080 --> 02:41.840
+Furthermore, there is another problem
+
+02:41.840 --> 02:43.663
+because there is no scientific method
+
+02:43.663 --> 02:46.080
+on how to enforce colonization.
+
+02:46.080 --> 02:48.800
+Should it be based on syntax, or semantic,
+
+02:48.800 --> 02:51.519
+or context, or something else?
+
+02:51.519 --> 02:53.599
+Developers are actually pretty free to do
+
+02:53.599 --> 02:56.400
+whatever they want, a lot of them will
+
+02:56.400 --> 02:58.879
+use syntax based colorization because it
+
+02:58.879 --> 03:01.280
+is the most simple to write.
+
+03:01.280 --> 03:03.280
+In the end, most of them achieve a
+
+03:03.280 --> 03:06.080
+Christmas tree effect.
+
+03:06.080 --> 03:08.189
+We know however, how to use colors
+
+03:08.189 --> 03:10.560
+to drag attention to a specific position
+
+03:10.560 --> 03:13.920
+as it is shown on the screenshot.
+
+03:13.920 --> 03:15.760
+This is called the pop-out effect,
+
+03:15.760 --> 03:18.080
+which is quite well known in neuroscience.
+
+03:18.080 --> 03:20.000
+Here, the media keyword has been
+
+03:20.000 --> 03:23.120
+made very silent just by setting
+
+03:23.120 --> 03:25.760
+the color in red while all other
+
+03:25.760 --> 03:28.080
+elements are desaturated.
+
+03:28.080 --> 03:30.480
+It literally pops out from the screen
+
+03:30.480 --> 03:33.680
+and point attention toward it.
+
+03:33.680 --> 03:35.360
+Finally, if we look at the overall
+
+03:35.360 --> 03:36.879
+structure of the Nova editor,
+
+03:36.879 --> 03:39.353
+we can characterize structural elements
+
+03:39.353 --> 03:41.840
+that are also present in a large number
+
+03:41.840 --> 03:44.029
+of modern editors namely,
+
+03:44.029 --> 03:46.400
+a file browser, a gutter, a mini map,
+
+03:46.400 --> 03:47.844
+a tab bar, a toolbar,
+
+03:47.844 --> 03:49.920
+and some versioning tools.
+
+03:49.920 --> 03:52.477
+I think this is too much information,
+
+03:52.477 --> 03:54.879
+and can lead to cognitive overload
+
+03:54.879 --> 03:57.725
+such that you end up to not pay attention
+
+03:57.725 --> 03:59.599
+to important information.
+
+03:59.599 --> 04:02.720
+So definitely more is not always better,
+
+04:02.720 --> 04:05.280
+and to paraphrase Edward Tufte in his book
+
+04:05.280 --> 04:06.780
+The Visual Display of
+
+04:06.780 --> 04:08.720
+Quantitative Information,
+
+04:08.720 --> 04:12.560
+"Above all else show the data."
+
+04:12.560 --> 04:14.640
+This is a reason that led me to
+
+04:14.640 --> 04:16.720
+experiment alternative design,
+
+04:16.720 --> 04:18.079
+and of course, to do that with
+
+04:18.079 --> 04:19.840
+the total freedom I didn't have
+
+04:19.840 --> 04:24.080
+much choice but to use and hack Emacs.
+
+04:24.080 --> 04:27.001
+My first iteration was called Elegant Emacs,
+
+04:27.001 --> 04:29.271
+and I try to enforce a few principles
+
+04:29.271 --> 04:31.759
+that I will detail into the next slide.
+
+04:31.759 --> 04:33.919
+But roughly, my idea was to
+
+04:33.919 --> 04:35.857
+enforce a radically different design
+
+04:35.857 --> 04:38.320
+by simply removing as much
+
+04:38.320 --> 04:40.080
+information as I could.
+
+04:40.080 --> 04:42.240
+Even so, vanilla Emacs is
+
+04:42.240 --> 04:44.000
+already quite simple.
+
+04:44.000 --> 04:45.759
+You can see the result on the screen,
+
+04:45.759 --> 04:47.759
+and I'm practically happy with the third
+
+04:47.759 --> 04:50.240
+screenshot that mimics the PDF layout of
+
+04:50.240 --> 04:53.120
+a scientific article by Stefan Monnier
+
+04:53.120 --> 04:55.360
+and Michael Sperber but rather
+
+04:55.360 --> 04:58.160
+fully inside Emacs.
+
+04:58.160 --> 05:01.080
+The second iteration is called NANO Emacs,
+
+05:01.080 --> 05:03.680
+and it is a version I try to maintain
+
+05:03.680 --> 05:05.592
+with a set of standalone packages
+
+05:05.592 --> 05:07.759
+that you can test individually.
+
+05:07.759 --> 05:09.271
+It is based on a set of
+
+05:09.271 --> 05:11.919
+a few principles, namely
+
+05:11.919 --> 05:14.677
+large margins, reduced number of faces,
+
+05:14.677 --> 05:17.360
+a simplified and contextual header line,
+
+05:17.360 --> 05:19.280
+and a default aspect ratio that
+
+05:19.280 --> 05:21.759
+mimics the A4 ISO format.
+
+05:21.759 --> 05:24.240
+I've been using this layout for a
+
+05:24.240 --> 05:26.720
+year and so far I'm quite happy with it.
+
+05:26.720 --> 05:29.440
+I know this is quite an opinionated
+
+05:29.440 --> 05:31.680
+design and some of you may totally
+
+05:31.680 --> 05:34.240
+disagree with me.
+
+05:34.240 --> 05:36.630
+Lately I've been experimenting
+
+05:36.630 --> 05:38.682
+with some special modes where
+
+05:38.682 --> 05:41.919
+the header line is made even simpler,
+
+05:41.919 --> 05:44.080
+this is the case for org-agenda,
+
+05:44.080 --> 05:46.720
+mu4e, deft, and elfeed.
+
+05:46.720 --> 05:48.560
+This worked reasonably well
+
+05:48.560 --> 05:50.952
+because these modes are search based,
+
+05:50.952 --> 05:54.720
+and it was easy to unify their design.
+
+05:54.720 --> 05:56.960
+I've also integrated some dynamic tags
+
+05:56.960 --> 06:00.484
+and icon in my agenda using svg-lib,
+
+06:00.484 --> 06:02.400
+which is available on ELPA.
+
+06:02.400 --> 06:04.960
+And for example, you can see the
+
+06:04.960 --> 06:08.560
+pie progress that help to show
+
+06:08.560 --> 06:11.440
+some incoming deadlines.
+
+06:11.440 --> 06:13.261
+There are still ongoing development
+
+06:13.261 --> 06:15.120
+to develop new packages to give
+
+06:15.120 --> 06:17.280
+a unified look and feel.
+
+06:17.280 --> 06:18.792
+I got a lot of feedback from
+
+06:18.792 --> 06:20.768
+the Emacs community,
+
+06:20.768 --> 06:22.288
+mostly in Reddit and GitHub,
+
+06:22.288 --> 06:24.319
+and I would like to thank them here
+
+06:24.319 --> 06:26.880
+because this is incredibly useful.
+
+06:26.880 --> 06:29.039
+If you want to follow or support my work,
+
+06:29.039 --> 06:31.600
+best place is probably GitHub.
+
+06:31.600 --> 06:33.099
+Thank you for your attention.
+
+06:33.099 --> 06:34.479
+I will be happy to answer
+
+06:34.479 --> 06:36.874
+any questions you may have.
+
+06:36.874 --> 06:38.520
+[captions by bhavin192 (Bhavin Gandhi)]
diff --git a/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--chapters.vtt b/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--chapters.vtt
new file mode 100644
index 00000000..194156b0
--- /dev/null
+++ b/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--chapters.vtt
@@ -0,0 +1,43 @@
+WEBVTT
+
+00:00:00.320 --> 00:00:18.559
+Introduction
+
+00:00:18.560 --> 00:00:33.599
+Emacs 28
+
+00:00:33.600 --> 00:02:36.399
+Native compilation
+
+00:02:36.400 --> 00:02:55.759
+Build with Cairo by default
+
+00:02:55.760 --> 00:03:22.958
+New mode, but off by default: context-menus
+
+00:03:22.959 --> 00:03:37.839
+Tab-bar and tab-line received many enhancements
+
+00:03:37.840 --> 00:04:20.319
+A command can marked as specific to a mode
+
+00:04:20.320 --> 00:05:00.879
+Transient input methods
+
+00:05:00.880 --> 00:05:14.559
+show-paren-mode is enabled by default
+
+00:05:14.560 --> 00:05:39.519
+We now have a Non-GNU ELPA
+
+00:05:39.520 --> 00:06:18.399
+repeat-mode
+
+00:06:18.400 --> 00:06:26.719
+project.el has dozens of new commands
+
+00:06:26.720 --> 00:06:54.959
+Shorthands for Lisp symbols
+
+00:06:54.960 --> 00:06:55.960
+Emacs 29 is just beginning
diff --git a/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main--chapters.vtt b/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main--chapters.vtt
new file mode 100644
index 00000000..194156b0
--- /dev/null
+++ b/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main--chapters.vtt
@@ -0,0 +1,43 @@
+WEBVTT
+
+00:00:00.320 --> 00:00:18.559
+Introduction
+
+00:00:18.560 --> 00:00:33.599
+Emacs 28
+
+00:00:33.600 --> 00:02:36.399
+Native compilation
+
+00:02:36.400 --> 00:02:55.759
+Build with Cairo by default
+
+00:02:55.760 --> 00:03:22.958
+New mode, but off by default: context-menus
+
+00:03:22.959 --> 00:03:37.839
+Tab-bar and tab-line received many enhancements
+
+00:03:37.840 --> 00:04:20.319
+A command can marked as specific to a mode
+
+00:04:20.320 --> 00:05:00.879
+Transient input methods
+
+00:05:00.880 --> 00:05:14.559
+show-paren-mode is enabled by default
+
+00:05:14.560 --> 00:05:39.519
+We now have a Non-GNU ELPA
+
+00:05:39.520 --> 00:06:18.399
+repeat-mode
+
+00:06:18.400 --> 00:06:26.719
+project.el has dozens of new commands
+
+00:06:26.720 --> 00:06:54.959
+Shorthands for Lisp symbols
+
+00:06:54.960 --> 00:06:55.960
+Emacs 29 is just beginning
diff --git a/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt b/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt
new file mode 100644
index 00000000..8532206f
--- /dev/null
+++ b/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt
@@ -0,0 +1,724 @@
+WEBVTT
+
+00:00.320 --> 00:02.200
+Hello, my name is John Wiegley.
+
+00:02.200 --> 00:05.040
+I'm a past co-maintainer of Emacs.
+
+00:05.040 --> 00:06.799
+Nowadays, all of the work
+
+00:06.799 --> 00:08.160
+and mailing list traffic
+
+00:08.160 --> 00:09.599
+is handled by Eli Zaretskii
+
+00:09.599 --> 00:12.559
+and Lars Ingebrigtsen.
+
+00:12.559 --> 00:14.320
+I just wanted to give you an update
+
+00:14.320 --> 00:15.360
+of what has been happening
+
+00:15.360 --> 00:16.560
+and what is soon to come
+
+00:16.560 --> 00:00:18.559
+in Emacs development.
+
+00:18.560 --> 00:19.760
+So I spoke to Eli
+
+00:19.760 --> 00:20.880
+and he gave me the lowdown
+
+00:20.880 --> 00:23.359
+on Emacs 28, which is the next
+
+00:23.359 --> 00:25.840
+big release to come up yet.
+
+00:25.840 --> 00:27.039
+He says that we hope to
+
+00:27.039 --> 00:28.160
+release this soon.
+
+00:28.160 --> 00:30.080
+Pre-testing has not yet started,
+
+00:30.080 --> 00:31.519
+but maybe looking at
+
+00:31.519 --> 00:00:33.599
+the first quarter of next year.
+
+00:33.600 --> 00:35.840
+The biggest feature coming in Emacs 28
+
+00:35.840 --> 00:39.040
+is going to be native compilation,
+
+00:39.040 --> 00:41.280
+and this will make some Emacs code
+
+00:41.280 --> 00:43.120
+two to four times as fast,
+
+00:43.120 --> 00:44.640
+depending on what kind of Lisp
+
+00:44.640 --> 00:45.360
+you're running
+
+00:45.360 --> 00:47.840
+and how much of your Lisp code
+
+00:47.840 --> 00:48.800
+is just Lisp,
+
+00:48.800 --> 00:50.879
+or makes calls to primitive functions.
+
+00:50.879 --> 00:53.680
+There were previous JIT attempts.
+
+00:53.680 --> 00:54.879
+Some of them still live on
+
+00:54.879 --> 00:56.559
+in development branches,
+
+00:56.559 --> 00:57.280
+but they were found
+
+00:57.280 --> 01:00.960
+to not speed things up too much.
+
+01:00.960 --> 01:03.280
+The version coming in Emacs 28
+
+01:03.280 --> 01:04.479
+has much better results
+
+01:04.479 --> 01:05.760
+than these past attempts,
+
+01:05.760 --> 01:06.960
+but it should be noted
+
+01:06.960 --> 01:09.439
+that it has some side effects.
+
+01:09.439 --> 01:11.439
+One is that natively-compiled files
+
+01:11.439 --> 01:13.680
+are going to be system-dependent,
+
+01:13.680 --> 01:14.960
+so they can't be included
+
+01:14.960 --> 01:16.000
+in any distributions
+
+01:16.000 --> 01:18.080
+the way we do now with .elc files,
+
+01:18.080 --> 01:20.479
+since those run on any platform.
+
+01:20.479 --> 01:22.240
+This means that you will need to
+
+01:22.240 --> 01:23.600
+compile those files
+
+01:23.600 --> 01:26.479
+for your own machine, sometimes,
+
+01:26.479 --> 01:27.360
+depending on how
+
+01:27.360 --> 01:28.799
+the compilation process goes.
+
+01:28.799 --> 01:31.520
+It could vary by processor.
+
+01:31.520 --> 01:32.720
+And it requires you also
+
+01:32.720 --> 01:33.520
+to have the right
+
+01:33.520 --> 01:35.600
+compilation environment.
+
+01:35.600 --> 01:37.200
+This means that you may need tools
+
+01:37.200 --> 01:38.560
+from the gcc tool chain
+
+01:38.560 --> 01:39.520
+that aren't installed
+
+01:39.520 --> 01:40.799
+as part of the default,
+
+01:40.799 --> 01:42.640
+so you will maybe have to do some work
+
+01:42.640 --> 01:43.680
+to set up the right
+
+01:43.680 --> 01:44.720
+compilation environment
+
+01:44.720 --> 01:46.560
+for your platform.
+
+01:46.560 --> 01:47.680
+Natively-compiled files
+
+01:47.680 --> 01:50.799
+are also kept in a separate directory.
+
+01:50.799 --> 01:52.079
+There are some issues
+
+01:52.079 --> 01:54.159
+having to do with recompilation too,
+
+01:54.159 --> 01:55.920
+so there are certain changes which,
+
+01:55.920 --> 01:57.360
+if made to the Emacs source code
+
+01:57.360 --> 01:58.560
+between releases,
+
+01:58.560 --> 02:00.159
+may require you to recompile
+
+02:00.159 --> 02:02.000
+all of the natively-compiled files
+
+02:02.000 --> 02:04.479
+that you had compiled previously.
+
+02:04.479 --> 02:06.880
+Also, the file names of compiled files
+
+02:06.880 --> 02:07.680
+that get installed
+
+02:07.680 --> 02:08.800
+have hashes on them
+
+02:08.800 --> 02:10.319
+depending on the Emacs
+
+02:10.319 --> 02:11.920
+that they were built against,
+
+02:11.920 --> 02:14.000
+so Emacs should be able to detect
+
+02:14.000 --> 02:16.239
+when recompilation is necessary,
+
+02:16.239 --> 02:17.840
+but it may be difficult
+
+02:17.840 --> 02:19.599
+for distributions who want to know
+
+02:19.599 --> 02:20.800
+what all of the build files
+
+02:20.800 --> 02:22.160
+are going to be in advance
+
+02:22.160 --> 02:23.840
+in order to prepare
+
+02:23.840 --> 02:25.360
+a binary distribution
+
+02:25.360 --> 02:27.280
+for that for that platform.
+
+02:27.280 --> 02:28.800
+So these are all little wrinkles
+
+02:28.800 --> 02:29.840
+that we're going to discover
+
+02:29.840 --> 02:30.800
+and have to work out
+
+02:30.800 --> 02:32.560
+as this functionality comes out
+
+02:32.560 --> 02:33.599
+and starts getting used
+
+02:33.599 --> 00:02:36.399
+in lots of different distributions.
+
+02:36.400 --> 02:38.560
+Another feature is that Cairo is
+
+02:38.560 --> 02:40.319
+now being built with by default,
+
+02:40.319 --> 02:42.560
+and this is one step further toward
+
+02:42.560 --> 02:44.319
+better support for emojis.
+
+02:44.319 --> 02:45.519
+If you build with Cairo,
+
+02:45.519 --> 02:47.599
+you will get all of the emoji sequences
+
+02:47.599 --> 02:49.360
+defined by the latest Unicode,
+
+02:49.360 --> 02:50.400
+and in full color,
+
+02:50.400 --> 02:52.560
+the exact same as on your smartphone ,
+
+02:52.560 --> 00:02:55.759
+and it works on macOS as well.
+
+02:55.760 --> 02:56.640
+There's a new mode,
+
+02:56.640 --> 02:58.400
+but it is off by default,
+
+02:58.400 --> 03:00.480
+called context-menus mode,
+
+03:00.480 --> 03:02.800
+and this gives menus that appear
+
+03:02.800 --> 03:03.599
+when you right-click
+
+03:03.599 --> 03:04.959
+somewhere in a buffer,
+
+03:04.959 --> 03:06.480
+but now will make it easier
+
+03:06.480 --> 03:08.080
+for other modes to define
+
+03:08.080 --> 03:09.440
+what those context menus
+
+03:09.440 --> 03:10.080
+should look like,
+
+03:10.080 --> 03:13.840
+so that's sort of making that support...
+
+03:13.840 --> 03:16.080
+having it less custom
+
+03:16.080 --> 03:17.920
+in each module that implements
+
+03:17.920 --> 03:19.360
+that type of behavior.
+
+03:19.360 --> 03:20.879
+They can now do it through this context
+
+03:20.879 --> 00:03:22.958
+and then use the facility.
+
+03:22.959 --> 03:25.120
+Tab-bar and tab-line have received
+
+03:25.120 --> 03:26.799
+many enhancements.
+
+03:26.799 --> 03:28.560
+So there's new commands, new variables,
+
+03:28.560 --> 03:30.080
+there's quite a large number of changes,
+
+03:30.080 --> 03:31.440
+so if you like those modes,
+
+03:31.440 --> 03:32.560
+if you use them,
+
+03:32.560 --> 03:33.440
+then you should be happy
+
+03:33.440 --> 03:35.040
+with what's coming.
+
+03:35.040 --> 00:03:37.839
+There is a command...
+
+03:37.840 --> 03:40.720
+Now, a command can be marked
+
+03:40.720 --> 03:42.799
+as being specific to a mode,
+
+03:42.799 --> 03:44.560
+so that if you're not in that mode,
+
+03:44.560 --> 03:46.000
+then, when you press M-x,
+
+03:46.000 --> 03:46.959
+it won't appear
+
+03:46.959 --> 03:48.319
+in the tab completion list.
+
+03:48.319 --> 03:50.799
+Right now, M-x is a full population
+
+03:50.799 --> 03:52.560
+of every interactive command
+
+03:52.560 --> 03:53.920
+known to Emacs,
+
+03:53.920 --> 03:55.120
+but in many cases,
+
+03:55.120 --> 03:57.360
+unless you're in a text-mode buffer
+
+03:57.360 --> 03:58.560
+or a latex-mode buffer,
+
+03:58.560 --> 04:00.799
+or some programming language mode buffer,
+
+04:00.799 --> 04:01.840
+a lot of the commands
+
+04:01.840 --> 04:04.480
+that might be presented to you today
+
+04:04.480 --> 04:06.239
+are irrelevant to that buffer
+
+04:06.239 --> 04:08.400
+that you're in. So commands can now
+
+04:08.400 --> 04:11.120
+specify in their interactive declaration
+
+04:11.120 --> 04:12.640
+which mode they're specific to,
+
+04:12.640 --> 04:14.319
+and in that case, they will only appear
+
+04:14.319 --> 04:16.079
+in the completion list for that mode.
+
+04:16.079 --> 04:17.840
+In fact, only be available
+
+04:17.840 --> 00:04:20.319
+in that mode to execute.
+
+04:20.320 --> 04:21.680
+There are going to be
+
+04:21.680 --> 04:23.759
+transient input methods,
+
+04:23.759 --> 04:25.440
+and what this means is that right now,
+
+04:25.440 --> 04:27.520
+with Emacs, you can hit a key sequence
+
+04:27.520 --> 04:29.520
+to change your input method
+
+04:29.520 --> 04:32.240
+to, say, latin1 or to Arabic or Hebrew
+
+04:32.240 --> 04:33.040
+or some other language,
+
+04:33.040 --> 04:35.199
+so that you can start entering text
+
+04:35.199 --> 04:38.080
+using that input mode,
+
+04:38.080 --> 04:39.759
+but transient input methods
+
+04:39.759 --> 04:40.400
+will allow you
+
+04:40.400 --> 04:42.960
+to switch to an input mode temporarily.
+
+04:42.960 --> 04:44.720
+So if you're mostly writing
+
+04:44.720 --> 04:46.720
+in English text, but you want to insert
+
+04:46.720 --> 04:48.720
+one Greek letter, you don't have to
+
+04:48.720 --> 04:49.840
+switch to an input mode
+
+04:49.840 --> 04:52.080
+that has Latin and Greek letters.
+
+04:52.080 --> 04:53.280
+You can just switch over
+
+04:53.280 --> 04:54.560
+to a Greek input mode,
+
+04:54.560 --> 04:56.639
+momentarily enter in the Greek letter,
+
+04:56.639 --> 04:57.600
+and then come back
+
+04:57.600 --> 00:05:00.879
+to your default input method.
+
+05:00.880 --> 05:02.880
+show-paren-mode will be enabled
+
+05:02.880 --> 05:04.880
+by default in Emacs 28,
+
+05:04.880 --> 05:06.720
+so that's the highlighting of parens
+
+05:06.720 --> 05:11.039
+whenever your cursor is on or near
+
+05:11.039 --> 05:12.800
+a closing paren or an opening paren,
+
+05:12.800 --> 00:05:14.559
+for example.
+
+05:14.560 --> 05:18.080
+We're also going to have a NonGNU ELPA,
+
+05:18.080 --> 05:20.639
+so there will be a ELPA repository
+
+05:20.639 --> 05:22.160
+just like the ELPA we have today,
+
+05:22.160 --> 05:24.400
+except it will have packages in it
+
+05:24.400 --> 05:25.840
+that have not gone through
+
+05:25.840 --> 05:26.880
+the same level of
+
+05:26.880 --> 05:28.560
+copyright assignment requirements
+
+05:28.560 --> 05:29.919
+as the GNU ELPA.
+
+05:29.919 --> 05:31.919
+So NonGNU ELPA will make it easier
+
+05:31.919 --> 05:34.560
+for packages to get into a repository
+
+05:34.560 --> 05:37.120
+that is managed by the package.el
+
+05:37.120 --> 00:05:39.519
+that ships with Emacs.
+
+05:39.520 --> 05:42.160
+There's going to be a repeat-mode
+
+05:42.160 --> 05:45.039
+added to Emacs 28, repeat-mode.el.
+
+05:45.039 --> 05:46.880
+What this does is when you turn it on,
+
+05:46.880 --> 05:48.720
+when you enable repeat-mode,
+
+05:48.720 --> 05:50.800
+then certain commands
+
+05:50.800 --> 05:53.120
+which are executed by keybindings
+
+05:53.120 --> 05:55.120
+like C-x u for undo
+
+05:55.120 --> 05:56.160
+will allow you to just
+
+05:56.160 --> 05:58.240
+keep hitting that u, that final letter
+
+05:58.240 --> 05:59.680
+you used for the command
+
+05:59.680 --> 06:01.600
+to keep repeating that function.
+
+06:01.600 --> 06:03.440
+This works today already
+
+06:03.440 --> 06:06.720
+for things like macro repetition, C-x e,
+
+06:06.720 --> 06:08.080
+where you can just keep hitting e
+
+06:08.080 --> 06:08.960
+to repeat the macro
+
+06:08.960 --> 06:10.000
+as many times as you like,
+
+06:10.000 --> 06:11.360
+but that was a custom feature
+
+06:11.360 --> 06:12.560
+just for macros.
+
+06:12.560 --> 06:16.319
+This makes repeat mode accessible to
+
+06:16.319 --> 00:06:18.399
+most commands.
+
+06:18.400 --> 06:20.080
+The project.el package
+
+06:20.080 --> 06:22.000
+has dozens of new commands,
+
+06:22.000 --> 06:23.759
+so check the documentation there
+
+06:23.759 --> 06:25.039
+to find out what's going to be new
+
+06:25.039 --> 00:06:26.719
+in project.el.
+
+06:26.720 --> 06:28.560
+And there will be shorthands
+
+06:28.560 --> 06:30.000
+for Lisp symbols
+
+06:30.000 --> 06:32.400
+supported in the Lisp symbol reader.
+
+06:32.400 --> 06:34.240
+This means that for packages
+
+06:34.240 --> 06:36.800
+like s and f that have a whole bunch
+
+06:36.800 --> 06:38.479
+of really short named functions
+
+06:38.479 --> 06:40.560
+that might pollute the namespace,
+
+06:40.560 --> 06:43.199
+those functions now can be
+
+06:43.199 --> 06:45.039
+implemented behind a prefix
+
+06:45.039 --> 06:47.520
+where the symbol reader can be taught
+
+06:47.520 --> 06:48.639
+that there is a shorthand
+
+06:48.639 --> 06:50.319
+for that prefix,
+
+06:50.319 --> 06:51.680
+and that way, it'll only apply
+
+06:51.680 --> 00:06:54.959
+for the use of that package.
+
+06:54.960 --> 06:57.840
+And then finally, work on Emacs 29
+
+06:57.840 --> 06:59.280
+has just started.
+
+06:59.280 --> 07:00.400
+I don't have any details
+
+07:00.400 --> 07:01.440
+to report to you there,
+
+07:01.440 --> 07:02.880
+just to say that now
+
+07:02.880 --> 07:04.000
+the ship is moving on
+
+07:04.000 --> 07:05.360
+to the next release after,
+
+07:05.360 --> 07:07.599
+and Emacs 28 has a release branch
+
+07:07.599 --> 07:08.720
+and is getting cleaned up
+
+07:08.720 --> 07:10.400
+and ready for release.
+
+07:10.400 --> 07:12.720
+And that is the technical summary
+
+07:12.720 --> 07:14.000
+of what's new in Emacs.
+
+07:14.000 --> 07:17.120
+Thank you.
diff --git a/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main--chapters.vtt b/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main--chapters.vtt
new file mode 100644
index 00000000..d6a21081
--- /dev/null
+++ b/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+00:00:03.040 --> 00:00:38.045
+Introduction
+
+00:00:38.046 --> 00:02:05.725
+EAF Overview
+
+00:02:05.726 --> 00:02:23.285
+New logo
+
+00:02:23.286 --> 00:03:15.359
+EAF Supports Windows, macOS, and many Linux distros
+
+00:03:15.360 --> 00:03:56.958
+Multi-language scripting
+
+00:03:56.959 --> 00:05:45.359
+VueJS extension
+
+00:05:45.360 --> 00:07:09.598
+EAF core-app separation
+
+00:07:09.599 --> 00:07:45.319
+Other notable updates Popweb
+
diff --git a/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt b/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt
new file mode 100644
index 00000000..a31b712b
--- /dev/null
+++ b/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt
@@ -0,0 +1,622 @@
+WEBVTT
+
+00:03.040 -->00:00:05.206
+Hi, my name is Matthew Zeng,
+
+00:00:05.206 --> 00:00:07.526
+aka MT or Mingde.
+
+00:00:07.526 --> 00:00:10.766
+Welcome to EmacsConf2021.
+
+00:00:10.766 --> 00:00:12.846
+I hope everyone is enjoying
+
+00:00:12.846 --> 00:00:14.286
+the conference so far.
+
+00:00:14.286 --> 00:00:16.766
+I am one of the maintainers
+
+00:00:16.766 --> 00:00:18.566
+of the Emacs Application Framework.
+
+00:00:18.566 --> 00:00:22.606
+I was also here last year during EmacsConf2020
+
+00:00:22.606 --> 00:00:24.366
+and did a 20 minute presentation
+
+00:00:24.366 --> 00:00:26.606
+on the overall architecture of EAF
+
+00:00:26.606 --> 00:00:28.486
+as well as a small demo.
+
+00:00:28.486 --> 00:00:31.966
+A lot of things had changed since 2020,
+
+00:00:31.966 --> 00:00:34.406
+and that's why today I'm here to present:
+
+00:00:34.406 --> 00:00:38.045
+Emacs Application Framework, A 2021 Update.
+
+00:00:38.046 --> 00:00:41.086
+So we all know Emacs,
+
+00:00:41.086 --> 00:00:42.326
+and we definitely know that
+
+00:00:42.326 --> 00:00:44.486
+Emacs is not just a text editor,
+
+00:00:44.486 --> 00:00:46.926
+but a text-centric work environment,
+
+00:00:46.926 --> 00:00:48.606
+and it lacks *efficient*
+
+00:00:48.606 --> 00:00:50.686
+multimedia rendering capabilities
+
+00:00:50.686 --> 00:00:53.126
+such as website, PDF, and video rendering.
+
+00:00:53.126 --> 00:00:55.361
+We all want that, right?
+
+00:00:55.361 --> 00:00:58.366
+Therefore the EAF project wants to
+
+00:00:58.366 --> 00:01:00.286
+solve this problem while also
+
+00:01:00.286 --> 00:01:02.806
+retaining the rich Emacs ecosystem
+
+00:01:02.806 --> 00:01:06.046
+and its customizability and extensibility.
+
+00:01:06.046 --> 00:01:10.726
+The solution is to outsource the hard part
+
+00:01:10.726 --> 00:01:12.486
+to Python and NodeJS
+
+00:01:12.486 --> 00:01:14.366
+by bridging Elisp with them
+
+00:01:14.366 --> 00:01:16.126
+so that Python and JavaScript
+
+00:01:16.126 --> 00:01:17.926
+can do the hard work
+
+00:01:17.926 --> 00:01:20.126
+and minimize the Elisp workload,
+
+00:01:20.126 --> 00:01:21.926
+which ultimately speeds up
+
+00:01:21.926 --> 00:01:24.446
+our end-user experience using Emacs.
+
+00:01:24.446 --> 00:01:27.646
+Do note that Python and JavaScript
+
+00:01:27.646 --> 00:01:30.406
+already have a very mature ecosystem
+
+00:01:30.406 --> 00:01:32.206
+that provides a foundation
+
+00:01:32.206 --> 00:01:34.366
+to modern multimedia applications,
+
+00:01:34.366 --> 00:01:38.006
+so basically, EAF enables Emacs to extend
+
+00:01:38.006 --> 00:01:40.406
+to Python and JavaScript ecosystems,
+
+00:01:40.406 --> 00:01:42.286
+therefore extending to
+
+00:01:42.286 --> 00:01:44.366
+modern multimedia apps too.
+
+00:01:44.366 --> 00:01:47.606
+As we're on a tight schedule today,
+
+00:01:47.606 --> 00:01:49.726
+I can't go into every detail
+
+00:01:49.726 --> 00:01:51.486
+about how EAF achieves this.
+
+00:01:51.486 --> 00:01:53.606
+I did go through a lot of things
+
+00:01:53.606 --> 00:01:54.886
+during last year's presentation,
+
+00:01:54.886 --> 00:01:57.326
+so I highly recommend anyone interested
+
+00:01:57.326 --> 00:01:59.206
+to check out that presentation,
+
+00:01:59.206 --> 00:02:01.686
+and the project repository itself.
+
+00:02:01.686 --> 00:02:05.725
+Today we're focusing on *what changed*.
+
+00:02:05.726 --> 00:02:09.606
+Now the first change
+
+00:02:09.606 --> 00:02:10.926
+that you'll definitely notice
+
+00:02:10.926 --> 00:02:12.686
+is that we have a new logo!
+
+00:02:12.686 --> 00:02:15.926
+This logo uses gearwheels
+
+00:02:15.926 --> 00:02:18.486
+to symbolize how EAF extends Emacs
+
+00:02:18.486 --> 00:02:20.886
+to web and multimedia applications
+
+00:02:20.886 --> 00:02:23.286
+that bring new possibilities to Emacs.
+
+00:02:23.286 --> 00:02:28.726
+Since last year, EAF has replaced
+
+00:02:28.726 --> 00:02:30.886
+the DBus communication technology
+
+00:02:30.886 --> 00:02:33.446
+with the cross-platform EPC,
+
+00:02:33.446 --> 00:02:35.286
+the Emacs RPC stack,
+
+00:02:35.286 --> 00:02:37.526
+which has an Elisp implementation
+
+00:02:37.526 --> 00:02:39.246
+and a Python implementation,
+
+00:02:39.246 --> 00:02:41.006
+exactly what we need.
+
+02:42.160 --> 00:02:43.760
+This and some other changes
+
+00:02:43.760 --> 00:02:46.080
+enable EAF to support Windows,
+
+00:02:46.080 --> 00:02:49.519
+Windows 10 and Windows Subsystem for Linux,
+
+00:02:49.519 --> 00:02:51.840
+as well as all distros that support
+
+00:02:51.840 --> 00:02:54.319
+pacman, apt, dnf, pkg,
+
+00:02:54.319 --> 00:02:56.959
+zypper package installer commands,
+
+02:56.959 --> 00:02:59.840
+which includes Arch-based, Debian,
+
+00:02:59.840 --> 00:03:04.720
+or Ubuntu-based, Fedora, etc.
+
+03:04.720 --> 00:03:08.239
+However, do note that the maOS support
+
+03:08.239 --> 00:03:10.319
+works with some known issues.
+
+00:03:10.319 --> 00:03:15.359
+Have a look if you want to try out.
+
+03:15.360 --> 00:03:18.400
+Previously, EAF was able to make Elisp
+
+03:18.400 --> 00:03:20.720
+communicate with Python, as well as
+
+00:03:20.720 --> 00:03:23.280
+Python to communicate with JavaScript,
+
+03:23.280 --> 00:03:24.959
+meaning that Elisp can call
+
+00:03:24.959 --> 00:03:27.280
+Python functions and vice versa,
+
+00:03:27.280 --> 00:03:29.680
+and Python can call JavaScript functions
+
+00:03:29.680 --> 00:03:32.560
+and vice versa, but if you want Elisp
+
+00:03:32.560 --> 00:03:34.720
+to communicate with JavaScript,
+
+00:03:34.720 --> 00:03:36.239
+you have to go through Python,
+
+00:03:36.239 --> 00:03:38.879
+which is rather troublesome.
+
+03:38.879 --> 00:03:41.120
+Now, thanks to the EPC,
+
+00:03:41.120 --> 00:03:42.400
+Elisp can communicate
+
+00:03:42.400 --> 00:03:43.840
+with JavaScript directly
+
+03:43.840 --> 00:03:45.519
+using =eval_js= function
+
+00:03:45.519 --> 00:03:47.040
+and =eval_emacs_function=
+
+00:03:47.040 --> 00:03:49.840
+in Elisp and Python respectively.
+
+03:49.840 --> 00:03:51.840
+This greatly simplifies the code
+
+00:03:51.840 --> 00:03:52.640
+that will be needed
+
+00:03:52.640 --> 00:03:56.958
+to write a web app in EAF.
+
+03:56.959 --> 00:03:59.120
+Speaking of web applications,
+
+00:03:59.120 --> 00:04:01.200
+VueJS is a web framework
+
+00:04:01.200 --> 00:04:03.840
+that's been gaining a lot of popularity
+
+00:04:03.840 --> 00:04:04.720
+in recent years
+
+00:04:04.720 --> 00:04:08.959
+for its simplicity and functionality.
+
+04:08.959 --> 00:04:11.840
+In the past, you were only able to write
+
+04:11.840 --> 00:04:14.319
+simple JavaScript and HTML web apps
+
+00:04:14.319 --> 00:04:17.280
+for EAF. It was quite some work
+
+04:17.280 --> 00:04:20.880
+to create a full-featured web application.
+
+04:20.880 --> 00:04:23.360
+Now you can write new apps using EAF
+
+04:23.360 --> 00:04:27.919
+that work seamlessly with Emacs and Elisp.
+
+00:04:27.919 --> 00:04:30.880
+There are a few existing EAF apps
+
+04:30.880 --> 00:04:32.800
+written with Vue already
+
+04:32.800 --> 00:04:34.639
+to demonstrate the possibilities
+
+00:04:34.639 --> 00:04:38.720
+of Vue-based extensions in Emacs.
+
+04:38.720 --> 00:04:41.520
+The first one is the EAF File Manager,
+
+04:41.520 --> 00:04:44.160
+written by ManateeLazycat himself,
+
+00:04:44.160 --> 00:04:46.400
+as an alternative option to dired,
+
+00:04:46.400 --> 00:04:47.919
+as he found dired's performance
+
+00:04:47.919 --> 00:04:49.280
+to lag considerably
+
+04:49.280 --> 00:04:52.240
+when there are way too many files.
+
+04:52.240 --> 00:04:56.080
+It supports wdired and fd functionality,
+
+00:04:56.080 --> 00:05:01.600
+and let me demonstrate that to you.
+
+05:01.600 --> 00:05:06.160
+See? And this is the app.
+
+05:06.160 --> 00:05:08.639
+Go back here.
+
+05:08.639 --> 00:05:12.240
+Another one is the EAF RSS Reader,
+
+05:12.240 --> 00:05:15.039
+written by our Summer of Code 2021 student
+
+00:05:15.039 --> 00:05:18.240
+ShaoChenHeng. It is a fast RSS reader
+
+00:05:18.240 --> 00:05:21.600
+that uses the EAF browser for previews,
+
+05:21.600 --> 00:05:32.479
+and let me demo that to you as well.
+
+05:32.479 --> 00:05:35.039
+Pragmatic Emacs.
+
+05:35.039 --> 00:05:37.199
+And you can view every site
+
+00:05:37.199 --> 00:05:45.359
+in the EAF Browser.
+
+05:45.360 --> 00:05:46.880
+To ease the process
+
+00:05:46.880 --> 00:05:49.840
+of creating a new EAF application,
+
+00:05:49.840 --> 00:05:52.880
+we've separated the EAF core and its apps,
+
+00:05:52.880 --> 00:05:54.479
+so that EAF apps now have
+
+00:05:54.479 --> 00:05:56.800
+their individual repositories.
+
+00:05:56.800 --> 00:05:58.000
+You can find them under
+
+00:05:58.000 --> 00:06:02.000
+the emacs-eaf GitHub organization.
+
+06:02.000 --> 00:06:04.560
+Because of the number of EAF apps
+
+00:06:04.560 --> 00:06:05.840
+and their dependencies
+
+00:06:05.840 --> 00:06:08.319
+that vary from system to system,
+
+06:08.319 --> 00:06:10.080
+we've also introduced a new
+
+00:06:10.080 --> 00:06:12.639
+=M-x eaf-install-and-update= command
+
+00:06:12.639 --> 00:06:14.560
+which is a wrapper around the new
+
+00:06:14.560 --> 00:06:17.039
+install-eaf python script
+
+00:06:17.039 --> 00:06:19.280
+dedicated to installing, updating,
+
+00:06:19.280 --> 00:06:20.720
+and maintaining EAF apps
+
+00:06:20.720 --> 00:06:21.680
+and their dependencies
+
+00:06:21.680 --> 00:06:24.160
+for the end user.
+
+06:24.160 --> 00:06:25.600
+Now it is very easy
+
+00:06:25.600 --> 00:06:27.440
+to create a new EAF app.
+
+00:06:27.440 --> 00:06:29.039
+You just need to do it.
+
+00:06:29.039 --> 00:06:31.120
+You can just do it in your own repository,
+
+00:06:31.120 --> 00:06:34.720
+such as in GitHub, GitLab, or wherever.
+
+06:34.720 --> 00:06:36.160
+The first thing to do is
+
+00:06:36.160 --> 00:06:39.520
+to fork the eaf-demo or the eaf-vue-demo
+
+00:06:39.520 --> 00:06:41.280
+as a starting template,
+
+00:06:41.280 --> 00:06:43.520
+then update the dependencies.json file
+
+00:06:43.520 --> 00:06:46.400
+to list the new dependencies you introduced
+
+06:46.400 --> 00:06:48.560
+on various systems.
+
+06:48.560 --> 00:06:51.199
+Afterwards, once your app is finished,
+
+00:06:51.199 --> 00:06:53.039
+you simply need to submit a PR
+
+00:06:53.039 --> 00:06:54.000
+to the EAF core
+
+06:54.000 --> 00:06:56.720
+that modifies the applications.json list
+
+06:56.720 --> 00:07:03.039
+to include your new app. And that's it.
+
+07:03.039 --> 00:07:04.720
+Come try it out and write your own
+
+00:07:04.720 --> 00:07:09.598
+EAF extensions today!
+
+07:09.599 --> 00:07:11.840
+There are many other new updates.
+
+00:07:11.840 --> 00:07:13.919
+To list a few: we reached
+
+00:07:13.919 --> 00:07:17.199
+more than 60 contributors, hooray!
+
+07:17.199 --> 00:07:19.759
+And also, you can now use the familiar
+
+07:19.759 --> 00:07:22.160
+Control s and Control r isearch
+
+00:07:22.160 --> 00:07:23.280
+for real-time search,
+
+00:07:23.280 --> 00:07:24.560
+functioning very similar
+
+00:07:24.560 --> 00:07:27.039
+to the Emacs isearch,
+
+07:27.039 --> 00:07:29.759
+in the EAF Browser, PDF Viewer,
+
+00:07:29.759 --> 00:07:32.080
+and many other applications.
+
+07:32.080 --> 00:07:34.000
+Additionally, you can also create
+
+00:07:34.000 --> 00:07:35.680
+EAF PDF annotations
+
+00:07:35.680 --> 00:07:44.318
+either inline or as a pop-up, etc. etc. etc.
+
+07:44.319 --> 00:07:47.680
+Finally, let's talk about Popweb.
+
+07:47.680 --> 00:07:50.080
+Popweb is a very, very new project
+
+00:07:50.080 --> 00:07:52.639
+that started like exactly two weeks ago,
+
+00:07:52.639 --> 00:07:55.199
+that focuses particularly on the
+
+00:07:55.199 --> 00:07:55.919
+multimedia pop-up functionality in Emacs.
+
+00:07:55.919 --> 00:08:02.080
+Pop is considered to be a sister project
+
+00:08:02.080 --> 00:08:04.879
+and lightweight version of EAF.
+
+08:04.879 --> 00:08:07.039
+They both share a very similar design
+
+08:07.039 --> 00:08:09.039
+and some code, and they are maintained
+
+00:08:09.039 --> 00:08:10.080
+by the same people,
+
+00:08:10.080 --> 00:08:13.680
+which is me and ManateeLazycat.
+
+08:13.680 --> 00:08:15.599
+Here's a quick demo to see the
+
+08:15.599 --> 00:08:23.840
+responsiveness of its preview.
+
+08:23.840 --> 00:08:27.919
+Here we go. On the right, see...
+
+00:08:27.919 --> 00:08:30.720
+Oh, here we go. Yes.
+
+08:30.720 --> 00:08:32.560
+And these are the LaTeX preview.
+
+00:08:32.560 --> 00:08:44.800
+I can quickly show the next one.
+
+08:44.800 --> 00:08:48.160
+So this is the end of my presentation.
+
+08:48.160 --> 00:08:50.000
+Feel free to post questions
+
+00:08:50.000 --> 00:08:52.160
+on the collaborative pad, IRC,
+
+00:08:52.160 --> 00:08:53.519
+or directly send me an email.
+
+00:08:53.519 --> 00:08:55.680
+I'll be around all this,
+
+00:08:55.680 --> 00:08:57.839
+at all these places,
+
+08:57.839 --> 00:08:59.519
+and if you found any issue,
+
+00:08:59.519 --> 00:09:01.200
+please submit an issue
+
+00:09:01.200 --> 00:09:04.160
+to the EAF official issues,
+
+00:09:04.160 --> 00:09:08.880
+and don't forget to check out the wiki.
+
+09:08.880 --> 00:09:10.160
+Thank you and enjoy
+
+00:09:10.160 --> 00:09:13.680
+the rest of EmacsConf 2021.
+
+00:09:13.680 --> 00:09:14.680
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--chapters.vtt b/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--chapters.vtt
new file mode 100644
index 00000000..4fb35367
--- /dev/null
+++ b/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--chapters.vtt
@@ -0,0 +1,43 @@
+WEBVTT
+
+00:00:00.880 --> 00:01:45.999
+Introduction
+
+00:01:46.000 --> 00:02:53.679
+Background and technology: Emacs Research Group
+
+00:02:53.680 --> 00:05:13.599
+Prerecorded demo
+
+00:05:13.600 --> 00:05:35.119
+Organising metaphor
+
+00:05:35.120 --> 00:06:00.719
+Timetable
+
+00:06:00.720 --> 00:06:32.239
+Project Action Review
+
+00:06:32.240 --> 00:07:02.318
+Causal Layered Analysis
+
+00:07:02.319 --> 00:07:42.879
+Design Patterns and Next Steps
+
+00:07:42.880 --> 00:07:53.598
+Projects
+
+00:07:53.599 --> 00:08:24.559
+Patterns of Patterns (PLoP 2021)
+
+00:08:24.560 --> 00:08:57.518
+PLACARD Workshop roles
+
+00:08:57.519 --> 00:09:38.479
+Initial user studies
+
+00:09:38.480 --> 00:10:08.559
+Broader context
+
+00:10:08.560 --> 00:10:09.560
+Conclusion
diff --git a/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main--chapters.vtt b/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main--chapters.vtt
new file mode 100644
index 00000000..4fb35367
--- /dev/null
+++ b/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main--chapters.vtt
@@ -0,0 +1,43 @@
+WEBVTT
+
+00:00:00.880 --> 00:01:45.999
+Introduction
+
+00:01:46.000 --> 00:02:53.679
+Background and technology: Emacs Research Group
+
+00:02:53.680 --> 00:05:13.599
+Prerecorded demo
+
+00:05:13.600 --> 00:05:35.119
+Organising metaphor
+
+00:05:35.120 --> 00:06:00.719
+Timetable
+
+00:06:00.720 --> 00:06:32.239
+Project Action Review
+
+00:06:32.240 --> 00:07:02.318
+Causal Layered Analysis
+
+00:07:02.319 --> 00:07:42.879
+Design Patterns and Next Steps
+
+00:07:42.880 --> 00:07:53.598
+Projects
+
+00:07:53.599 --> 00:08:24.559
+Patterns of Patterns (PLoP 2021)
+
+00:08:24.560 --> 00:08:57.518
+PLACARD Workshop roles
+
+00:08:57.519 --> 00:09:38.479
+Initial user studies
+
+00:09:38.480 --> 00:10:08.559
+Broader context
+
+00:10:08.560 --> 00:10:09.560
+Conclusion
diff --git a/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt b/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt
new file mode 100644
index 00000000..b450f532
--- /dev/null
+++ b/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt
@@ -0,0 +1,1054 @@
+WEBVTT
+
+00:00.880 --> 00:02.720
+[Raymond Puzio]: Hello, I'm Raymond Puzio.
+
+00:02.720 --> 00:04.799
+I first learned about Emacs and Lisp
+
+00:04.799 --> 00:05.920
+at an enrichment program
+
+00:05.920 --> 00:07.200
+for high school students.
+
+00:07.200 --> 00:09.120
+When I studied physics at the university,
+
+00:09.120 --> 00:10.400
+I used Emacs and Tex
+
+00:10.400 --> 00:12.320
+to write mathematical documents.
+
+00:12.320 --> 00:13.920
+Later on, I became active
+
+00:13.920 --> 00:16.480
+in Emacs and Lisp user groups where,
+
+00:16.480 --> 00:18.160
+among other things, I learned about
+
+00:18.160 --> 00:20.400
+Org mode for reproducible research.
+
+00:20.400 --> 00:21.680
+Nowadays, I am working on
+
+00:21.680 --> 00:24.080
+synthesizing Emacs and other programs
+
+00:24.080 --> 00:25.599
+into an end-to-end platform
+
+00:25.599 --> 00:30.560
+for scientific research and collaboration.
+
+00:30.560 --> 00:31.519
+[Joe Corneli]: I'm Joe Corneli.
+
+00:31.519 --> 00:33.920
+I also started using Emacs in high school
+
+00:33.920 --> 00:35.440
+in a course on C programming,
+
+00:35.440 --> 00:36.800
+and now I'm technically
+
+00:36.800 --> 00:38.239
+a computer scientist.
+
+00:38.239 --> 00:39.280
+My research background
+
+00:39.280 --> 00:43.120
+is in mathematics and online communities.
+
+00:43.120 --> 00:45.039
+[Noorah Alhasan]: Hi, I'm Noorah Alhasan.
+
+00:45.039 --> 00:46.719
+I'm a member of the ERG group
+
+00:46.719 --> 00:49.600
+and a PhD student at UT Austin
+
+00:49.600 --> 00:51.760
+studying climate policy.
+
+00:51.760 --> 00:54.239
+So for this talk, the four of us
+
+00:54.239 --> 00:56.640
+met at EmacsConf 2020 last year
+
+00:56.640 --> 00:57.760
+with a common interest
+
+00:57.760 --> 00:59.520
+in Emacs and research.
+
+00:59.520 --> 01:01.760
+we've met almost every week since then
+
+01:01.760 --> 01:02.640
+because we wanted to
+
+01:02.640 --> 01:04.479
+keep the conversation going.
+
+01:04.479 --> 01:05.519
+In this short talk,
+
+01:05.519 --> 01:06.560
+we share information
+
+01:06.560 --> 01:08.240
+about the methods we use.
+
+01:08.240 --> 01:09.680
+Here's the outline of our talk.
+
+01:09.680 --> 01:10.560
+First, we'll tell you
+
+01:10.560 --> 01:12.320
+about the technologies we use
+
+01:12.320 --> 01:13.840
+and show a short demo video
+
+01:13.840 --> 01:15.360
+from one of the meetings.
+
+01:15.360 --> 01:16.320
+We'll then focus on
+
+01:16.320 --> 01:18.880
+the time and content structuring methods
+
+01:18.880 --> 01:21.040
+we use in our live sessions.
+
+01:21.040 --> 01:22.240
+Finally, we'll talk about
+
+01:22.240 --> 01:24.320
+what came out of all this work.
+
+01:24.320 --> 01:28.159
+For example, we wrote a paper for the
+
+01:28.159 --> 01:30.400
+Pattern Languages of Programs conference,
+
+01:30.400 --> 01:31.759
+and we designed a workshop
+
+01:31.759 --> 01:33.920
+using the knowledge we created together.
+
+01:33.920 --> 01:35.600
+Very practically,
+
+01:35.600 --> 01:37.119
+this has improved the quality
+
+01:37.119 --> 01:38.640
+of our own collaboration
+
+01:38.640 --> 01:39.680
+and we have some lessons
+
+01:39.680 --> 01:41.360
+about how you can create
+
+01:41.360 --> 00:01:45.999
+a research community similar to ours.
+
+01:46.000 --> 01:48.399
+[Joe]: You'll have noticed that we all have
+
+01:48.399 --> 01:50.159
+different research backgrounds
+
+01:50.159 --> 01:52.640
+and we do think that transdisciplinarity
+
+01:52.640 --> 01:54.960
+is important for solving big problems.
+
+01:54.960 --> 01:56.719
+However, if you have people
+
+01:56.719 --> 01:58.000
+from different research backgrounds
+
+01:58.000 --> 01:58.560
+working together,
+
+01:58.560 --> 01:59.680
+they need some scaffolding,
+
+01:59.680 --> 02:01.360
+both in terms of tools and methods,
+
+02:01.360 --> 02:02.880
+to have good conversations.
+
+02:02.880 --> 02:04.320
+And of course, as Emacs users,
+
+02:04.320 --> 02:05.439
+we wanted to have Emacs
+
+02:05.439 --> 02:07.360
+at the center of that.
+
+02:07.360 --> 02:08.640
+Being in a meeting,
+
+02:08.640 --> 02:10.720
+taking real-time notes
+
+02:10.720 --> 02:11.920
+collaboratively with Emacs
+
+02:11.920 --> 02:13.440
+realizes a dream that some of us
+
+02:13.440 --> 02:14.480
+have been entertaining
+
+02:14.480 --> 02:15.520
+(and experimenting with)
+
+02:15.520 --> 02:18.800
+for a while. The package crdt.el
+
+02:18.800 --> 02:21.440
+by Qiantan Hong makes this easy.
+
+02:21.440 --> 02:22.959
+We take notes in our meetings
+
+02:22.959 --> 02:24.239
+using Org Mode.
+
+02:24.239 --> 02:25.520
+Since we've seen this before
+
+02:25.520 --> 02:27.040
+in talks on reproducible research,
+
+02:27.040 --> 02:29.920
+and since Leo is the maintainer of org-roam,
+
+02:29.920 --> 02:31.680
+it was a natural choice for us.
+
+02:31.680 --> 02:32.400
+It allows us to
+
+02:32.400 --> 02:34.080
+put our notes online using git
+
+02:34.080 --> 02:36.080
+and the static state generator Firn.
+
+02:36.080 --> 02:37.599
+And lastly, of course, we need
+
+02:37.599 --> 02:38.720
+a real-time meeting tool.
+
+02:38.720 --> 02:39.519
+For that purpose,
+
+02:39.519 --> 02:41.920
+we use BBB in our weekly sessions
+
+02:41.920 --> 02:43.519
+(in fact, we use the same server
+
+02:43.519 --> 02:44.879
+that's used by EmacsConf,
+
+02:44.879 --> 02:46.720
+thanks again to Leo).
+
+02:46.720 --> 02:48.000
+All of these tools are
+
+02:48.000 --> 02:49.380
+free/libre/open source.
+
+02:49.380 --> 02:50.720
+However, BBB does have
+
+02:50.720 --> 00:02:53.679
+some intensive hardware requirements.
+
+02:53.680 --> 02:54.800
+Next up, here's a
+
+02:54.800 --> 02:56.239
+short pre-recorded snippet
+
+02:56.239 --> 02:57.680
+from one of our recent meetings
+
+02:57.680 --> 03:01.840
+so you can get a sense of how they go.
+
+03:01.840 --> 03:02.640
+[Demo - Leo Vivier]: Are we okay
+
+03:02.640 --> 03:04.159
+pushing the demo to the end?
+
+03:04.159 --> 03:05.440
+That kind of presupposes
+
+03:05.440 --> 03:07.120
+a different structure
+
+03:07.120 --> 03:08.080
+that you would usually have
+
+03:08.080 --> 03:08.800
+in a presentation.
+
+03:08.800 --> 03:09.760
+Generally you have...
+
+03:09.760 --> 03:12.800
+You introduce the demo, you do the demo,
+
+03:12.800 --> 03:14.720
+and then you do the conclusions,
+
+03:14.720 --> 03:16.560
+or what was good about the demo.
+
+03:16.560 --> 03:18.159
+Does that make sense to everyone?
+
+03:18.159 --> 03:18.560
+[Ray]: Let's see.
+
+03:18.560 --> 03:19.599
+When you usually do that,
+
+03:19.599 --> 03:21.760
+that's because whatever you're demonstrating
+
+03:21.760 --> 03:23.840
+is the main point of your talk,
+
+03:23.840 --> 03:25.840
+so if this was a talk about action reviews,
+
+03:25.840 --> 03:29.760
+that would make sense, but isn't it not ERG?
+
+03:29.760 --> 03:32.319
+[Leo]: But it's because we are telling...
+
+03:32.319 --> 03:34.400
+For me, I think it's a compound element.
+
+03:34.400 --> 03:36.640
+Yes, we are demonstrating the power,
+
+03:36.640 --> 03:37.840
+but we are also demonstrating
+
+03:37.840 --> 03:39.680
+how we're working together by...
+
+03:39.680 --> 03:42.000
+Yes, we might have introduced CRDT before
+
+03:42.000 --> 03:43.840
+in the presentation itself,
+
+03:43.840 --> 03:46.959
+but if we need to be doing the power,
+
+03:46.959 --> 03:49.360
+and also showing tools like CRDT,
+
+03:49.360 --> 03:50.879
+obviously, we're not... probably not going
+
+03:50.879 --> 03:52.959
+to be talking about... oh by the way,
+
+03:52.959 --> 03:54.239
+here we are using CRDT
+
+03:54.239 --> 03:54.879
+and stuff like this.
+
+03:54.879 --> 03:57.280
+It feels like cramming a lot of stuff
+
+03:57.280 --> 03:58.720
+into this demo at the end.
+
+03:58.720 --> 04:00.159
+[Joe]: So I think demo to me
+
+04:00.159 --> 04:02.159
+is less about demoing one of the methods,
+
+04:02.159 --> 04:02.879
+because then people will get
+
+04:02.879 --> 04:05.439
+a bit hung up on that.
+
+04:05.439 --> 04:07.360
+I think the demo...
+
+04:07.360 --> 04:08.080
+You know, to be honest,
+
+04:08.080 --> 04:09.200
+here's another thing.
+
+04:09.200 --> 04:09.920
+What we could do--
+
+04:09.920 --> 04:10.959
+this would be very clever--
+
+04:10.959 --> 04:12.400
+we could make this the demo,
+
+04:12.400 --> 04:13.920
+what we're doing right now,
+
+04:13.920 --> 04:15.519
+writing this talk is the demo,
+
+04:15.519 --> 04:18.560
+and just go back into the video
+
+04:18.560 --> 04:20.160
+and just get out a two-minute section,
+
+04:20.160 --> 04:22.479
+so we say, look we tried to write this talk,
+
+04:22.479 --> 04:23.680
+we went around, had a discussion,
+
+04:23.680 --> 04:25.040
+we had these things and then we just take...
+
+04:25.040 --> 04:26.240
+We're going to pick two minutes
+
+04:26.240 --> 04:26.880
+out of this video
+
+04:26.880 --> 04:27.440
+and show you that
+
+04:27.440 --> 04:29.280
+as a demo of how we actually work
+
+04:29.280 --> 04:30.320
+and then we'll go back to the talk.
+
+04:30.320 --> 04:31.199
+I mean, it'd be very funny,
+
+04:31.199 --> 04:32.880
+and then we've already done the demo.
+
+04:32.880 --> 04:34.560
+It's just, like... uh yeah,
+
+04:34.560 --> 04:35.280
+then we're good to go.
+
+04:35.280 --> 04:37.120
+And it's got neural lines on the floor.
+
+04:37.120 --> 04:39.199
+It's like a perfect writer's room.
+
+04:39.199 --> 04:41.199
+It's a total amazing writer's room scenario,
+
+04:41.199 --> 04:43.120
+specifically because she's lying on her back
+
+04:43.120 --> 04:45.360
+on the floor. Anyway. I mean,
+
+04:45.360 --> 04:47.680
+I think this would be fine.
+
+04:47.680 --> 04:49.520
+[Leo]: I think I particularly like the idea
+
+04:49.520 --> 04:52.080
+of taking the snippet,
+
+04:52.080 --> 04:54.000
+the two minutes before the realization
+
+04:54.000 --> 04:56.400
+that we could be using this as the demo,
+
+04:56.400 --> 05:00.240
+and then seeing the... well my face light up
+
+05:00.240 --> 05:01.680
+because it feels like a good idea,
+
+05:01.680 --> 05:03.360
+and Joe gets excited about this.
+
+05:03.360 --> 05:04.720
+I think this could be a good demo,
+
+05:04.720 --> 05:07.120
+and I think this would be
+
+05:07.120 --> 05:08.479
+a very genuine demonstration
+
+05:08.479 --> 05:09.360
+of how we work here
+
+05:09.360 --> 05:10.400
+and how we get excited about
+
+05:10.400 --> 00:05:13.599
+some of our ideas sometimes.
+
+05:13.600 --> 05:14.639
+[Noorah]: In the demo,
+
+05:14.639 --> 05:16.240
+you saw a very improvised
+
+05:16.240 --> 05:18.000
+free-flowing conversation.
+
+05:18.000 --> 05:19.840
+In order to have this kind of conversation
+
+05:19.840 --> 05:20.960
+and still get things done,
+
+05:20.960 --> 05:23.520
+we need a pretty rigorous structure in place
+
+05:23.520 --> 05:26.000
+at the bigger scale of the meetings.
+
+05:26.000 --> 05:27.120
+This involves both
+
+05:27.120 --> 05:31.280
+a timetable for the meetings
+
+05:31.280 --> 00:05:35.119
+and some review and planning processes.
+
+05:35.120 --> 05:36.320
+[Joe]: Just to say a little bit more
+
+05:36.320 --> 05:40.160
+about the timetable, if you could go back,
+
+05:40.160 --> 05:42.320
+the meetings are generally following
+
+05:42.320 --> 05:45.199
+a structure as we have up on the screen
+
+05:45.199 --> 05:46.479
+of informal check-ins
+
+05:46.479 --> 05:48.400
+followed by any announcements,
+
+05:48.400 --> 05:50.960
+and then two topics, at most two topics,
+
+05:50.960 --> 05:52.560
+with a break in the middle.
+
+05:52.560 --> 05:54.800
+The whole thing takes about two hours,
+
+05:54.800 --> 05:56.400
+and we meet weekly.
+
+05:56.400 --> 05:58.160
+The consistency of these meetings
+
+05:58.160 --> 05:58.800
+is really important
+
+05:58.800 --> 00:06:00.719
+for how the group works.
+
+06:00.720 --> 06:02.560
+[Ray]: At at the end of every meeting,
+
+06:02.560 --> 06:03.600
+we ask and answer
+
+06:03.600 --> 06:04.800
+a series of questions
+
+06:04.800 --> 06:07.120
+adapted from the ‘After Action Review’
+
+06:07.120 --> 06:08.880
+developed by the United States Army
+
+06:08.880 --> 06:10.800
+in their training programs,
+
+06:10.800 --> 06:13.840
+and also used in some business contexts.
+
+06:13.840 --> 06:15.759
+The adaptation we use here
+
+06:15.759 --> 06:17.440
+came out of the Peeragogy project,
+
+06:17.440 --> 06:19.600
+which some of us have been involved with
+
+06:19.600 --> 06:22.160
+since 2012, and it's designed to be
+
+06:22.160 --> 06:24.560
+less hierarchical than the army's review.
+
+06:24.560 --> 06:26.960
+By writing down and sharing these reviews,
+
+06:26.960 --> 06:28.240
+we create a resource
+
+06:28.240 --> 06:29.600
+for further peer learning
+
+06:29.600 --> 00:06:32.239
+later down the line.
+
+06:32.240 --> 06:33.280
+[Joe]: So, specifically,
+
+06:33.280 --> 06:34.560
+every six weeks or so,
+
+06:34.560 --> 06:35.840
+we look at the transcripts
+
+06:35.840 --> 06:37.360
+from the previous action reviews
+
+06:37.360 --> 06:39.120
+using a four-layered framework
+
+06:39.120 --> 06:41.199
+that comes from future studies,
+
+06:41.199 --> 06:42.560
+and we use this to better understand
+
+06:42.560 --> 06:43.759
+the underlying themes
+
+06:43.759 --> 06:44.880
+that surface in the reviews
+
+06:44.880 --> 06:46.479
+and to develop the deeper motivations
+
+06:46.479 --> 06:48.160
+for ongoing work together.
+
+06:48.160 --> 06:49.680
+This helps us get a big-picture sense
+
+06:49.680 --> 06:50.720
+of where we're going,
+
+06:50.720 --> 06:51.840
+and we can keep that up to date
+
+06:51.840 --> 06:52.720
+at a slower pace
+
+06:52.720 --> 06:54.479
+than we do in the weekly meetings.
+
+06:54.479 --> 06:55.759
+This also helps us tie our work
+
+06:55.759 --> 06:56.880
+into a broader context
+
+06:56.880 --> 06:57.759
+and gives us some hope
+
+06:57.759 --> 06:59.919
+that over time we can contribute to
+
+06:59.919 --> 00:07:02.318
+solving big problems.
+
+07:02.319 --> 07:02.880
+[Ray]: Going back
+
+07:02.880 --> 07:04.880
+to solving larger problems.
+
+07:04.880 --> 07:06.560
+When we carry out the analysis,
+
+07:06.560 --> 07:08.400
+we don't just think about what happened
+
+07:08.400 --> 07:09.440
+at previous meetings,
+
+07:09.440 --> 07:11.520
+but we also take a longer view,
+
+07:11.520 --> 07:12.960
+thinking about things such as
+
+07:12.960 --> 07:15.680
+structuring a community of collaborators,
+
+07:15.680 --> 07:16.960
+or building platforms
+
+07:16.960 --> 07:18.720
+for scientific research.
+
+07:18.720 --> 07:20.080
+We want to think about how
+
+07:20.080 --> 07:21.120
+what we have been doing
+
+07:21.120 --> 07:23.599
+fits into broader historical patterns
+
+07:23.599 --> 07:24.720
+and trends.
+
+07:24.720 --> 07:27.120
+In the past, the pattern is a
+
+07:27.120 --> 07:28.240
+historical pattern;
+
+07:28.240 --> 07:30.000
+in the present, we contextualize
+
+07:30.000 --> 07:32.400
+what we learned about designed futures;
+
+07:32.400 --> 07:34.639
+towards the future, we use these patterns
+
+07:34.639 --> 07:37.440
+to augment our big-picture analysis
+
+07:37.440 --> 07:38.800
+with the next steps.
+
+07:38.800 --> 00:07:42.879
+This helps keep us on track.
+
+07:42.880 --> 07:44.720
+[Noorah]: Okay. So we have been working on
+
+07:44.720 --> 07:46.160
+several projects: a paper
+
+07:46.160 --> 07:47.280
+for the pattern conference
+
+07:47.280 --> 07:48.240
+mentioned earlier,
+
+07:48.240 --> 07:50.080
+a workshop, and a user study,
+
+07:50.080 --> 07:51.280
+and we'll say a little bit more
+
+07:51.280 --> 00:07:53.598
+about these.
+
+07:53.599 --> 07:56.319
+We co-authored a paper
+
+07:56.319 --> 07:57.919
+that touches on all of the topics
+
+07:57.919 --> 07:58.960
+we mentioned earlier
+
+07:58.960 --> 08:01.120
+and presented it at the leading conference
+
+08:01.120 --> 08:02.080
+on Design Patterns
+
+08:02.080 --> 08:04.000
+for programs and programming.
+
+08:04.000 --> 08:09.520
+One of the case studies in the paper
+
+08:09.520 --> 08:12.960
+sums up the way we work in ERG.
+
+08:12.960 --> 08:16.000
+The paper puts ERG in context
+
+08:16.000 --> 08:17.520
+with other peer learning communities,
+
+08:17.520 --> 08:18.960
+and we aim to describe
+
+08:18.960 --> 08:20.160
+our way of working
+
+08:20.160 --> 08:22.720
+in a way that others would find accessible
+
+08:22.720 --> 00:08:24.559
+and potentially useful.
+
+08:24.560 --> 08:25.680
+We are also developing
+
+08:25.680 --> 08:27.039
+an interactive workshop
+
+08:27.039 --> 08:28.800
+based on the ideas in the paper,
+
+08:28.800 --> 08:31.039
+which we piloted at the PLoP conference.
+
+08:31.039 --> 08:32.479
+Our intent with the workshop
+
+08:32.479 --> 08:34.800
+was to build a method
+
+08:34.800 --> 08:36.240
+for rapid problem solving,
+
+08:36.240 --> 08:37.839
+which could, at least in principle,
+
+08:37.839 --> 08:40.159
+expand beyond the workshop setting
+
+08:40.159 --> 08:41.839
+to distributed networks.
+
+08:41.839 --> 08:44.080
+The workshop involves made-up roles,
+
+08:44.080 --> 08:45.440
+like a kaiju communicator
+
+08:45.440 --> 08:46.800
+who helps understand problems
+
+08:46.800 --> 08:47.839
+as they arise.
+
+08:47.839 --> 08:49.760
+We also realize that it has given us
+
+08:49.760 --> 08:51.279
+a lot of wealth for thinking about
+
+08:51.279 --> 00:08:57.518
+the roles we take on in our weekly meetings.
+
+08:57.519 --> 08:59.920
+[Ray]: Free software may be lacking
+
+08:59.920 --> 09:01.200
+on ‘user’ aspects.
+
+09:01.200 --> 09:02.720
+People too often program
+
+09:02.720 --> 09:04.320
+to scratch their own itches,
+
+09:04.320 --> 09:06.720
+and assume others will do the same.
+
+09:06.720 --> 09:09.360
+To deal with this, we did several things.
+
+09:09.360 --> 09:11.040
+We looked at user experience
+
+09:11.040 --> 09:12.160
+and development together
+
+09:12.160 --> 09:13.760
+to see how the process went
+
+09:13.760 --> 09:15.440
+and where the gaps might be.
+
+09:15.440 --> 09:17.600
+We compared Emacs with other platforms,
+
+09:17.600 --> 09:19.279
+not just a technical level,
+
+09:19.279 --> 09:21.440
+but also at the user experience level.
+
+09:21.440 --> 09:22.640
+We had guest sessions,
+
+09:22.640 --> 09:25.440
+where we've started to gather user stories.
+
+09:25.440 --> 09:26.880
+Building on these conversations,
+
+09:26.880 --> 09:28.480
+we would like to do more research
+
+09:28.480 --> 09:29.839
+in all these topics,
+
+09:29.839 --> 09:30.959
+and eventually be able to
+
+09:30.959 --> 09:32.160
+say something like:
+
+09:32.160 --> 09:34.160
+‘If you are someone who does X,
+
+09:34.160 --> 09:35.279
+these are the packages
+
+09:35.279 --> 00:09:38.479
+that would work for you.’
+
+09:38.480 --> 09:40.640
+[Joe]: Putting these ideas into practice,
+
+09:40.640 --> 09:42.880
+our PLoP paper and the plans it contains
+
+09:42.880 --> 09:43.680
+become a /template/
+
+09:43.680 --> 09:44.720
+for some of the other things
+
+09:44.720 --> 09:45.600
+we want to work on
+
+09:45.600 --> 09:46.880
+as we go forward.
+
+09:46.880 --> 09:49.120
+If we imagine things in 2-3 years,
+
+09:49.120 --> 09:49.920
+what would it actually take
+
+09:49.920 --> 09:52.240
+to realize the vision from that paper?
+
+09:52.240 --> 09:53.200
+Thinking about the future:
+
+09:53.200 --> 09:54.480
+this is one of the main reasons why
+
+09:54.480 --> 09:55.839
+we want to share these ideas
+
+09:55.839 --> 09:56.800
+and invite other people
+
+09:56.800 --> 09:58.160
+into this way of working.
+
+09:58.160 --> 09:59.600
+There's no way we can actually achieve
+
+09:59.600 --> 10:00.560
+everything in our vision
+
+10:00.560 --> 10:02.160
+if we work all by ourselves.
+
+10:02.160 --> 10:03.200
+What we've been focusing on
+
+10:03.200 --> 10:05.120
+in Season Zero of the Emacs Research Group
+
+10:05.120 --> 10:06.640
+is methods that people can use
+
+10:06.640 --> 00:10:08.559
+to organize their own research groups.
+
+10:08.560 --> 10:10.000
+We decided to share this talk
+
+10:10.000 --> 10:12.079
+so that folks can learn from our community.
+
+10:12.079 --> 10:13.040
+Our goal has been to share
+
+10:13.040 --> 10:14.000
+how we've been doing things,
+
+10:14.000 --> 10:14.959
+and we hope this information
+
+10:14.959 --> 10:16.079
+is useful for you
+
+10:16.079 --> 10:18.800
+in your own communities and collaborations.
+
+10:18.800 --> 10:19.262
+Thank you.
+
+10:19.262 --> 10:20.279
+[captions by speakers and sachac]
diff --git a/2021/captions/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.vtt b/2021/captions/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.vtt
new file mode 100644
index 00000000..a5edb43f
--- /dev/null
+++ b/2021/captions/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.vtt
@@ -0,0 +1,550 @@
+WEBVTT
+
+00:00.320 --> 00:00:03.679
+Hello all! Welcome to EmacsConf 2021.
+
+00:00:03.679 --> 00:00:05.040
+I'm Tom Gillespie.
+
+00:00:05.040 --> 00:00:06.799
+Thank you to the organizers for
+
+00:00:06.799 --> 00:00:07.680
+all your hard work,
+
+00:00:07.680 --> 00:00:08.639
+and for inviting me to
+
+00:00:08.639 --> 00:00:10.021
+give this short talk on
+
+00:00:10.021 --> 00:00:12.240
+"Org as an executable format".
+
+00:00:12.240 --> 00:00:13.840
+The links to the talk page,
+
+00:00:13.840 --> 00:00:16.000
+the GitHub page for the project,
+
+00:00:16.000 --> 00:00:18.880
+and the package on MELPA
+
+00:18.880 --> 00:00:20.160
+are listed on the right.
+
+00:00:20.160 --> 00:00:21.760
+Let's start with one of the motivating
+
+00:00:21.760 --> 00:00:25.920
+use cases for executable Org files.
+
+00:25.920 --> 00:00:29.339
+Many users keep global configuration
+
+00:00:29.339 --> 00:00:31.840
+for Org in an init.el file,
+
+00:00:31.840 --> 00:00:33.520
+which works for many workflows.
+
+00:00:33.520 --> 00:00:36.239
+However, for reproducible research,
+
+00:00:36.239 --> 00:00:37.600
+this is a challenge
+
+00:00:37.600 --> 00:00:39.280
+because if an Org file is
+
+00:00:39.280 --> 00:00:41.440
+dissociated from the init.el file,
+
+00:00:41.440 --> 00:00:43.040
+then often it will no longer
+
+00:00:43.040 --> 00:00:44.640
+function as expected.
+
+00:44.640 --> 00:46.719
+One potential solution to this problem
+
+00:46.719 --> 00:48.160
+is to be able to include all of the
+
+00:48.160 --> 00:00:50.239
+global configuration for Emacs
+
+00:00:50.239 --> 00:00:52.960
+and the environment in the Org file itself,
+
+00:00:52.960 --> 00:00:53.840
+in which case when you
+
+00:00:53.840 --> 00:00:55.440
+go to reuse the Org file,
+
+00:00:55.440 --> 00:00:58.640
+it will work as expected.
+
+00:58.640 --> 00:01:00.480
+What does an executable Org file
+
+00:01:00.480 --> 00:01:02.559
+look like in action?
+
+01:02.559 --> 01:05.280
+Here's a demo of an executable Org file
+
+01:05.280 --> 01:09.680
+running in Bash, Dash, Zsh, and PowerShell.
+
+01:09.680 --> 00:01:14.799
+So, we are currently in Bash,
+
+01:14.799 --> 01:19.360
+and we can run our demo,
+
+01:19.360 --> 00:01:21.119
+and it will print some stuff,
+
+00:01:21.119 --> 00:01:22.640
+and wait for input.
+
+01:22.640 --> 00:01:24.144
+We can also run it in Dash,
+
+00:01:24.144 --> 00:01:25.720
+which is the default for Debian
+
+00:01:25.720 --> 00:01:29.840
+and derivatives.
+
+01:29.840 --> 01:32.320
+Same program works as expected.
+
+01:32.320 --> 00:01:38.560
+Zsh also. And lastly PowerShell,
+
+01:38.560 --> 00:01:41.439
+if we try to run demo.org itself,
+
+00:01:41.439 --> 00:01:42.640
+we see (that) we get an error
+
+00:01:42.640 --> 00:01:43.764
+because PowerShell cares
+
+00:01:43.764 --> 00:01:45.439
+about file extensions,
+
+01:45.439 --> 00:01:49.840
+so, if we symlink to ps1,
+
+00:01:49.840 --> 00:01:51.680
+then it works as expected,
+
+00:01:51.680 --> 00:01:53.341
+and there are ways to alias this,
+
+00:01:53.341 --> 00:01:55.044
+so that you can run it as a program
+
+00:01:55.044 --> 00:01:58.640
+without the ps1 extension.
+
+01:58.640 --> 02:03.920
+So, how does this work?
+
+02:03.920 --> 00:02:05.759
+There are three components
+
+00:02:05.759 --> 00:02:07.352
+to an executable Org file
+
+00:02:07.352 --> 00:02:08.560
+that all need to be present
+
+00:02:08.560 --> 00:02:10.080
+in order for this to work.
+
+02:10.080 --> 02:11.920
+Starting from the top of the file,
+
+02:11.920 --> 02:14.239
+we have a shebang block.
+
+02:14.239 --> 00:02:16.640
+Next we have an Org Babel block
+
+00:02:16.640 --> 00:02:17.760
+written in Emacs Lisp,
+
+00:02:17.760 --> 00:02:20.000
+which is what we actually saw executing,
+
+00:02:20.000 --> 00:02:20.959
+and then there are some
+
+00:02:20.959 --> 00:02:23.520
+eval local variables or Elvs
+
+02:23.520 --> 02:25.200
+that are involved in making this
+
+02:25.200 --> 02:26.800
+actually executable.
+
+02:26.800 --> 02:29.760
+Let's start with the shebang block.
+
+02:29.760 --> 00:02:33.280
+Org syntax does not have support
+
+00:02:33.280 --> 00:02:34.959
+for shebang lines.
+
+02:34.959 --> 02:37.120
+However, it supports the shebang block.
+
+02:37.120 --> 02:39.440
+This is because Org comments, blocks,
+
+02:39.440 --> 00:02:41.760
+keywords, etc. that start with the
+
+00:02:41.760 --> 00:02:43.920
+sharp sign have the same syntax as
+
+00:02:43.920 --> 00:02:46.720
+comments in POSIX and PowerShell.
+
+02:46.720 --> 00:02:53.280
+This block is in fact valid
+
+02:53.280 --> 00:02:55.040
+Bash, Dash, Zsh, PowerShell,
+
+00:02:55.040 --> 00:02:57.280
+and maybe some other shells as well.
+
+02:57.280 --> 00:03:02.480
+In essence what it does is,
+
+03:02.480 --> 00:03:03.440
+perform some setup
+
+00:03:03.440 --> 00:03:06.080
+to avoid polluting standard output,
+
+00:03:06.080 --> 00:03:07.516
+and then it runs Emacs
+
+00:03:07.516 --> 00:03:08.959
+to load the file itself.
+
+00:03:08.959 --> 00:03:12.640
+The Elisp that is passed on the command line
+
+00:03:12.640 --> 00:03:14.959
+is explicated over here on the right,
+
+03:14.959 --> 00:03:17.920
+and in essence what it does is,
+
+00:03:17.920 --> 00:03:20.480
+to keep the startup time minimal
+
+00:03:20.480 --> 00:03:21.760
+and as low as possible,
+
+00:03:21.760 --> 00:03:24.080
+it loads the absolute bare minimum
+
+00:03:24.080 --> 00:03:25.120
+needed for Babel,
+
+00:03:25.120 --> 00:03:27.519
+and then it calls hack-local-variables
+
+00:03:27.519 --> 00:03:31.680
+triggering the eval-local-variables.
+
+03:31.680 --> 00:03:33.614
+What do the eval-local-variables do,
+
+00:03:33.614 --> 00:03:34.799
+and how those work?
+
+00:03:34.799 --> 00:03:36.319
+The essence of the approach is to
+
+00:03:36.319 --> 00:03:38.720
+use org-confirm-babel-evaluate
+
+00:03:38.720 --> 00:03:40.480
+to allow Babel execution.
+
+00:03:40.480 --> 00:03:43.360
+We can't set it to nil because that is
+
+00:03:43.360 --> 00:03:45.308
+an arbitrary code execution vector,
+
+00:03:45.308 --> 00:03:48.000
+which we don't want if we're sharing files.
+
+03:48.000 --> 00:03:49.555
+Instead what we do is,
+
+00:03:49.555 --> 00:03:52.000
+we use the fact that it can be a function,
+
+00:03:52.000 --> 00:03:55.280
+and we normalize the block of code,
+
+00:03:55.280 --> 00:03:57.320
+we checksum it, and then we check
+
+00:03:57.320 --> 00:03:59.280
+that it matches this checksum up here
+
+00:03:59.280 --> 00:04:00.400
+at the top of the file,
+
+00:04:00.400 --> 00:04:02.640
+and then sort of inside there,
+
+04:02.640 --> 00:04:04.159
+inside of org-sbe,
+
+00:04:04.159 --> 00:04:06.560
+which is Org source block evaluate,
+
+04:06.560 --> 04:08.959
+we call the block.
+
+04:08.959 --> 00:04:11.120
+The actual implementation of this
+
+00:04:11.120 --> 00:04:12.497
+is somewhat more complicated.
+
+00:04:12.497 --> 00:04:14.799
+However, it's small enough to fit in
+
+00:04:14.799 --> 00:04:17.519
+the local variables at the end of the file.
+
+04:17.519 --> 00:04:19.040
+One thing to note is that
+
+00:04:19.040 --> 00:04:20.799
+if you are using PowerShell,
+
+00:04:20.799 --> 00:04:23.919
+PowerShell parses the whole file
+
+00:04:23.919 --> 00:04:25.040
+which means that
+
+00:04:25.040 --> 00:04:27.759
+for any normal Org content,
+
+00:04:27.759 --> 00:04:28.639
+you need to put it in
+
+04:28.639 --> 00:04:30.240
+a multi-line PowerShell comment,
+
+00:04:30.240 --> 00:04:31.199
+and close it.
+
+00:04:31.199 --> 00:04:32.371
+So, once we hit
+
+00:04:32.371 --> 00:04:34.160
+hack-local-variables at the end,
+
+00:04:34.160 --> 00:04:37.120
+we run the eval-local-variables block,
+
+00:04:37.120 --> 00:04:40.880
+then we enter this Elisp block,
+
+04:40.880 --> 00:04:42.720
+and you can write whatever you want.
+
+00:04:42.720 --> 00:04:44.160
+All the power of Org Babel is
+
+00:04:44.160 --> 00:04:45.360
+now at your fingertips
+
+00:04:45.360 --> 00:04:47.199
+in order to do what you need
+
+04:47.199 --> 04:48.800
+for this file.
+
+04:48.800 --> 00:04:50.320
+Finally, let's do a quick demo
+
+00:04:50.320 --> 00:04:52.453
+of how to use this to make
+
+00:04:52.453 --> 00:04:54.800
+your own Org files executable.
+
+04:54.800 --> 00:05:01.840
+Orgstrap is available on MELPA as mentioned,
+
+05:01.840 --> 00:05:06.080
+and it can be installed using package.el
+
+00:05:06.080 --> 00:05:11.280
+by calling package-install orgstrap.
+
+05:11.280 --> 05:13.520
+It will download, and it will install.
+
+05:13.520 --> 00:05:18.720
+Then you can open an existing file
+
+05:18.720 --> 00:05:21.919
+or a new file. In this case,
+
+00:05:21.919 --> 00:05:25.199
+let me open a file called example.org.
+
+05:25.199 --> 00:05:26.996
+And then orgstrap provides
+
+00:05:26.996 --> 00:05:29.360
+command called orgstrap-init.
+
+05:29.360 --> 00:05:30.953
+What orgstrap-init does is,
+
+00:05:30.953 --> 00:05:33.759
+it populates a file with the machinery
+
+05:33.759 --> 00:05:36.639
+needed to run an orgstrap block.
+
+00:05:36.639 --> 00:05:38.560
+We're just going to do a message
+
+05:38.560 --> 05:43.440
+"hello orgstrap!".
+
+05:43.440 --> 00:05:46.160
+If you look up at the top,
+
+00:05:46.160 --> 00:05:47.386
+you will see that the
+
+00:05:47.386 --> 00:05:50.320
+orgstrap-block-checksum will change
+
+05:50.320 --> 00:05:51.520
+when I save the file.
+
+00:05:51.520 --> 00:05:53.840
+This makes it much easier to author files
+
+00:05:53.840 --> 00:05:55.120
+with orgstrap blocks.
+
+00:05:55.120 --> 00:05:56.560
+And then we need one last piece
+
+00:05:56.560 --> 00:05:57.876
+of machinery,
+
+00:05:57.876 --> 00:06:00.400
+which is the shebang block.
+
+00:06:00.400 --> 00:06:01.520
+I am just going to steal
+
+00:06:01.520 --> 00:06:02.560
+the shebang block from
+
+00:06:02.560 --> 00:06:06.080
+this other file over here
+
+06:06.080 --> 00:06:07.039
+since it is available.
+
+00:06:07.039 --> 00:06:08.880
+You can also get it from shebang.org,
+
+00:06:08.880 --> 00:06:10.800
+and I have plans to add a command
+
+00:06:10.800 --> 00:06:12.560
+to insert this into the file directly,
+
+00:06:12.560 --> 00:06:15.600
+which may actually be done by the time
+
+00:06:15.600 --> 00:06:19.520
+this video is actually posted and visible.
+
+06:19.520 --> 00:06:21.120
+There's one last step,
+
+00:06:21.120 --> 00:06:24.160
+which is that we need to run dired
+
+06:24.160 --> 00:06:27.520
+in order to… There we go.
+
+06:27.520 --> 06:31.039
+So, we use Shift m, capital m,
+
+06:31.039 --> 00:06:32.800
+in order to make our
+
+00:06:32.800 --> 00:06:35.520
+example file executable,
+
+06:35.520 --> 00:06:42.140
+and then if we come back to here,
+
+00:06:42.140 --> 00:06:47.360
+we see that example.org is now executable,
+
+00:06:47.360 --> 00:06:48.000
+and we can run it.
+
+06:48.000 --> 06:50.560
+"hello orgstrap!", and we're done.
+
+06:50.560 --> 06:52.639
+So, that's the basic workflow
+
+06:52.639 --> 06:54.880
+for getting orgstrap files
+
+06:54.880 --> 00:06:56.240
+to be executable.
+
+00:06:56.240 --> 00:06:58.960
+I will be around to answer questions live,
+
+00:06:58.960 --> 00:07:00.800
+and I will be also available in
+
+00:07:00.800 --> 00:07:03.280
+the #emacsconf IRC channel all day.
+
+00:07:03.280 --> 00:07:04.960
+I hope you have found this useful,
+
+00:07:04.960 --> 00:07:08.160
+and thank you very much for watching.
+
+00:07:08.160 --> 00:07:09.160
+[captions by bhavin192 (Bhavin Gandhi)]
diff --git a/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--chapters.vtt b/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--chapters.vtt
new file mode 100644
index 00000000..9aa57433
--- /dev/null
+++ b/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--chapters.vtt
@@ -0,0 +1,31 @@
+WEBVTT
+
+00:00:01.120 --> 00:02:36.479
+Introduction
+
+00:02:36.480 --> 00:04:19.839
+Emacs Lisp is a little old
+
+00:04:19.840 --> 00:05:03.038
+Benchmark then optimize, not vice versa
+
+00:05:03.039 --> 00:09:31.199
+profiler-start
+
+00:09:31.200 --> 00:13:01.359
+elp - Emacs Lisp Profiler
+
+00:13:01.360 --> 00:19:13.439
+benchmark
+
+00:19:13.440 --> 00:20:00.239
+Write less code
+
+00:20:00.240 --> 00:22:52.158
+Reduce allocations
+
+00:22:52.159 --> 00:30:52.239
+Recent optimizations in Xref
+
+00:30:52.240 --> 00:30:53.240
+cl-lib, dash, and seq
diff --git a/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main--chapters.vtt b/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main--chapters.vtt
new file mode 100644
index 00000000..9aa57433
--- /dev/null
+++ b/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main--chapters.vtt
@@ -0,0 +1,31 @@
+WEBVTT
+
+00:00:01.120 --> 00:02:36.479
+Introduction
+
+00:02:36.480 --> 00:04:19.839
+Emacs Lisp is a little old
+
+00:04:19.840 --> 00:05:03.038
+Benchmark then optimize, not vice versa
+
+00:05:03.039 --> 00:09:31.199
+profiler-start
+
+00:09:31.200 --> 00:13:01.359
+elp - Emacs Lisp Profiler
+
+00:13:01.360 --> 00:19:13.439
+benchmark
+
+00:19:13.440 --> 00:20:00.239
+Write less code
+
+00:20:00.240 --> 00:22:52.158
+Reduce allocations
+
+00:22:52.159 --> 00:30:52.239
+Recent optimizations in Xref
+
+00:30:52.240 --> 00:30:53.240
+cl-lib, dash, and seq
diff --git a/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt b/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt
new file mode 100644
index 00000000..057b85f5
--- /dev/null
+++ b/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt
@@ -0,0 +1,1528 @@
+WEBVTT
+
+00:01.120 --> 00:00:04.640
+Hi. Greetings from the cloudy St. Petersburg.
+
+00:04.640 --> 00:00:06.080
+My name is Dmitry Gutov.
+
+00:00:06.080 --> 00:00:09.280
+I write Ruby by day, Emacs Lisp by night
+
+00:00:09.280 --> 00:00:12.080
+when I don't do anything else.
+
+00:12.080 --> 00:00:14.559
+You might know my work
+
+00:00:14.559 --> 00:00:18.160
+from a number of third-party packages
+
+00:00:18.160 --> 00:00:22.240
+as well as built-in ones.
+
+00:22.240 --> 00:00:25.599
+The idea for this talk came out from
+
+00:25.599 --> 00:00:26.800
+an improvement request
+
+00:00:26.800 --> 00:00:32.960
+for the performance of grep-like commands
+
+00:32.960 --> 00:00:35.200
+using the xref interface
+
+00:00:35.200 --> 00:00:43.280
+and its storage types, container types
+
+00:00:43.280 --> 00:00:47.840
+for the search results,
+
+00:47.840 --> 00:00:51.440
+complaining that it's not as fast
+
+00:00:51.440 --> 00:00:54.320
+as it potentially could have been
+
+00:54.320 --> 00:00:58.239
+when there are lots of search results
+
+00:00:58.239 --> 00:01:01.600
+coming for a given search.
+
+01:01.600 --> 00:01:06.159
+I have noticed myself that
+
+00:01:06.159 --> 00:01:10.159
+when working on it, and probably before.
+
+00:01:10.159 --> 00:01:16.560
+My approach to optimizing Lisp code
+
+01:16.560 --> 00:01:21.680
+has changed recently-ish,
+
+01:21.680 --> 00:01:26.960
+and I'd like to talk about it here.
+
+01:26.960 --> 00:01:34.079
+This talk is for people who already
+
+01:34.079 --> 00:01:37.040
+know how to write some Emacs Lisp
+
+00:01:37.040 --> 00:01:38.880
+to solve their problems
+
+00:01:38.880 --> 00:01:43.360
+and who have possibly encountered
+
+00:01:43.360 --> 00:01:49.200
+some performance issues doing that.
+
+01:49.200 --> 00:01:51.600
+Also, if you want to contribute
+
+00:01:51.600 --> 00:01:54.799
+some improvements to the code
+
+00:01:54.799 --> 00:01:56.960
+that is already in Emacs
+
+00:01:56.960 --> 00:02:02.159
+or to other packages
+
+00:02:02.159 --> 00:02:04.479
+which are owned by somebody else,
+
+00:02:04.479 --> 00:02:13.520
+it should also be helpful. Let's start.
+
+00:02:13.520 --> 00:02:18.640
+First of all, about Emacs and Emacs Lisp.
+
+00:02:18.640 --> 00:02:21.360
+It's not the fastest language.
+
+02:21.360 --> 00:02:26.560
+Let's switch to the notes.
+
+00:02:26.560 --> 00:02:31.440
+I hope the font is big enough
+
+00:02:31.440 --> 00:02:36.479
+to be readable on this video, really hope.
+
+02:36.480 --> 00:02:40.160
+Emacs Lisp is not the fastest of the bunch.
+
+00:02:40.160 --> 00:02:44.400
+The garbage collector creates pauses
+
+00:02:44.400 --> 00:02:48.800
+whenever it needs to sweep data.
+
+02:48.800 --> 00:02:51.760
+The interpreter is not the fastest one,
+
+02:51.760 --> 00:02:54.720
+even though the native compilation branch
+
+00:02:54.720 --> 00:02:59.120
+is improving on that by twice
+
+00:02:59.120 --> 00:03:04.640
+in certain scenarios, which is good.
+
+03:04.640 --> 00:03:10.560
+The standard library or functions
+
+00:03:10.560 --> 00:03:12.800
+for working with collections, for example,
+
+03:12.800 --> 00:03:17.599
+are not so uniformly great.
+
+03:17.599 --> 00:03:20.080
+So there is some work to be done there.
+
+03:20.080 --> 00:03:22.239
+Maybe you can contribute
+
+03:22.239 --> 00:03:26.640
+the next improvement in there.
+
+03:26.640 --> 00:03:33.200
+And also, if your package displays stuff,
+
+00:03:33.200 --> 00:03:35.040
+it has a visual component,
+
+03:35.040 --> 00:03:36.959
+then you might have to deal with
+
+00:03:36.959 --> 00:03:43.120
+some drawbacks of the display engine
+
+03:43.120 --> 00:03:47.760
+which might slow to a crawl
+
+00:03:47.760 --> 00:03:53.680
+when your code has...
+
+00:03:53.680 --> 00:03:56.560
+when you're trying to display lines
+
+00:03:56.560 --> 00:04:00.319
+which are a little too long--
+
+00:04:00.319 --> 00:04:03.120
+trying to print a [long] line, for example--
+
+04:03.120 --> 00:04:07.120
+or you are using a lot of overlays,
+
+04:07.120 --> 00:04:09.120
+if you know what it is.
+
+04:09.120 --> 00:04:12.640
+With lots of overlays
+
+00:04:12.640 --> 00:04:19.839
+on the same visual line, in particular.
+
+04:19.840 --> 00:04:24.160
+But okay. The first thing to understand,
+
+00:04:24.160 --> 00:04:27.680
+and I hope everybody who's done
+
+00:04:27.680 --> 00:04:29.520
+some programming in the past knows,
+
+00:04:29.520 --> 00:04:35.120
+it's: first you write correctly,
+
+00:04:35.120 --> 00:04:37.360
+and then you try to benchmark.
+
+04:37.360 --> 00:04:39.199
+and see where the problems are,
+
+00:04:39.199 --> 00:04:40.720
+if there are any.
+
+04:40.720 --> 00:04:45.919
+So first do it right, then do it fast.
+
+04:45.919 --> 00:04:50.720
+How do we find the hotspots,
+
+00:04:50.720 --> 00:04:52.400
+the bottlenecks on the second step?
+
+00:04:52.400 --> 00:04:54.720
+We try to do some profiling
+
+00:04:54.720 --> 00:04:58.960
+or measuring how long the code takes.
+
+04:58.960 --> 00:05:03.038
+Emacs has two different profilers.
+
+00:05:03.039 --> 00:05:05.440
+One is the native profiler,
+
+05:05.440 --> 00:05:10.639
+which as I recall was contributed by
+
+00:05:10.639 --> 00:05:13.280
+Tomohiro Matsuyama, the author
+
+00:05:13.280 --> 00:05:16.240
+of the autocomplete package
+
+05:16.240 --> 00:05:22.720
+back in Emacs 24.3, apparently.
+
+05:22.720 --> 00:05:24.320
+It's a low overhead profiler.
+
+00:05:24.320 --> 00:05:31.520
+It's sampling, which is good on one hand
+
+05:31.520 --> 00:05:33.919
+but might be less good on the other hand.
+
+05:33.919 --> 00:05:35.199
+Let's try using it.
+
+00:05:35.199 --> 00:05:40.960
+So we start with profiler-start.
+
+00:05:40.960 --> 00:05:44.960
+Let's just ask for CPU profiling here,
+
+00:05:44.960 --> 00:05:48.320
+but it also can profile memory locations.
+
+05:48.320 --> 00:05:56.400
+Let's try a search for some string
+
+00:05:56.400 --> 00:06:01.360
+in the current project.
+
+06:01.360 --> 00:06:04.080
+Let's do it a few times, maybe three times,
+
+00:06:04.080 --> 00:06:09.360
+so the profiler has more data to work with.
+
+06:09.360 --> 00:06:13.680
+Let's call the report.
+
+06:13.680 --> 00:06:16.960
+Okay. So here we have the tree,
+
+00:06:16.960 --> 00:06:19.360
+the execution tree with percentages
+
+00:06:19.360 --> 00:06:22.960
+of the time spent in each function.
+
+06:22.960 --> 00:06:25.840
+You can unwrap it by going up and down
+
+00:06:25.840 --> 00:06:35.039
+and pressing TAB to unwrap every element.
+
+06:35.039 --> 00:06:52.000
+This is weird.
+
+06:52.000 --> 00:06:55.199
+Okay, here we see that the actual command
+
+00:06:55.199 --> 00:06:56.639
+that was called only takes
+
+00:06:56.639 --> 00:06:59.599
+8% of the whole runtime,
+
+06:59.599 --> 00:07:07.759
+meaning the input was...
+
+07:07.759 --> 00:07:10.960
+The command took not enough time
+
+00:07:10.960 --> 00:07:13.360
+for us to really dig into it.
+
+00:07:13.360 --> 00:07:18.960
+Let's try a shorter input with more matches.
+
+00:07:18.960 --> 00:07:25.680
+So profiler-start again, CPU.
+
+07:25.680 --> 00:07:34.240
+Let's search for list.
+
+07:34.240 --> 00:07:40.160
+Don't mind the minibuffer just yet.
+
+07:40.160 --> 00:07:47.680
+Okay. So let's look at the report.
+
+07:47.680 --> 00:07:52.000
+We can unwrap it here, and we see
+
+00:07:52.000 --> 00:07:55.759
+52% of the time was spent doing this,
+
+07:55.759 --> 00:07:58.240
+at least according to the profile.
+
+00:07:58.240 --> 00:08:00.960
+We can unwrap it, see the description
+
+00:08:00.960 --> 00:08:02.800
+of any function that was called
+
+00:08:02.800 --> 00:08:08.479
+by hitting d, or even jump to it
+
+00:08:08.479 --> 00:08:12.960
+by tapping f.
+
+08:12.960 --> 00:08:16.160
+By going down the stream,
+
+08:16.160 --> 00:08:18.240
+we unwrap it with TAB,
+
+08:18.240 --> 00:08:22.400
+you can see where time was spent.
+
+08:22.400 --> 00:08:25.199
+One of the bigger drawbacks
+
+00:08:25.199 --> 00:08:30.639
+of this profiler is the arithmetics
+
+08:30.639 --> 00:08:39.200
+don't always work out,
+
+00:08:39.200 --> 00:08:45.760
+like you might have...
+
+08:45.760 --> 00:08:47.519
+This is not a good example,
+
+00:08:47.519 --> 00:08:52.640
+but okay, you have 14% spent in here,
+
+00:08:52.640 --> 00:08:57.200
+but when we expand this entry,
+
+00:08:57.200 --> 00:09:01.760
+we only see like 6%, 3%, and 0%.
+
+00:09:01.760 --> 00:09:06.640
+Different sum, sometimes even bigger than that.
+
+00:09:06.640 --> 00:09:10.800
+So the native profiler
+
+00:09:10.800 --> 00:09:13.200
+can give an accurate picture
+
+00:09:13.200 --> 00:09:15.920
+and it has little overhead,
+
+00:09:15.920 --> 00:09:20.399
+but the specific numbers
+
+00:09:20.399 --> 00:09:22.959
+are not very precise
+
+09:22.959 --> 00:09:28.640
+because the principle is probabilistic.
+
+09:28.640 --> 00:09:31.199
+Let's stop here.
+
+09:31.200 --> 00:09:36.959
+There is another package called elp,
+
+09:36.959 --> 00:09:39.360
+Emacs Lisp Profiler,
+
+00:09:39.360 --> 00:09:43.440
+which is much older than that.
+
+09:43.440 --> 00:09:47.920
+It allows us to instrument
+
+09:47.920 --> 00:09:53.600
+just specific functions or a package.
+
+09:53.600 --> 00:09:57.680
+We're instrumenting the xref package here.
+
+09:57.680 --> 00:10:01.360
+It works through advice. You can see
+
+00:10:01.360 --> 00:10:03.279
+the description of one of the functions
+
+00:10:03.279 --> 00:10:04.320
+in the package, and we see
+
+00:10:04.320 --> 00:10:12.640
+that it has had :around device added.
+
+10:12.640 --> 00:10:18.000
+If we run the same search,
+
+10:18.000 --> 00:10:21.360
+we can see that -- when it finishes --
+
+00:10:21.360 --> 00:10:30.399
+the table of all the numbers,
+
+10:30.399 --> 00:10:32.640
+that every function in the package
+
+00:10:32.640 --> 00:10:41.680
+has been called, and the times
+
+00:10:41.680 --> 00:10:48.000
+which the runtime has spent inside of them.
+
+10:48.000 --> 00:10:55.040
+sorted by impact, as it understands that.
+
+10:55.040 --> 00:11:00.079
+The main problem with this profiler is
+
+00:11:00.079 --> 00:11:04.160
+it is slower because it adds overhead
+
+00:11:04.160 --> 00:11:06.880
+to every function call,
+
+11:06.880 --> 00:11:11.519
+so it, in the end, might give an impression
+
+00:11:11.519 --> 00:11:19.519
+that functions with lots of calls,
+
+11:19.519 --> 00:11:21.839
+which have been called a lot of times,
+
+11:21.839 --> 00:11:26.880
+are more important,
+
+11:26.880 --> 00:11:29.279
+hotter than they actually are,
+
+00:11:29.279 --> 00:11:30.959
+because it slows down
+
+00:11:30.959 --> 00:11:32.640
+every such function call,
+
+11:32.640 --> 00:11:35.279
+including the subsequent calls
+
+00:11:35.279 --> 00:11:38.160
+that these functions do
+
+00:11:38.160 --> 00:11:40.560
+inside the same package.
+
+11:40.560 --> 00:11:48.240
+So it's a good way to analyze and drill down
+
+11:48.240 --> 00:11:50.320
+to see which functions here
+
+00:11:50.320 --> 00:11:51.200
+take a lot of time,
+
+00:11:51.200 --> 00:11:53.839
+but just keep in mind
+
+00:11:53.839 --> 00:11:57.760
+that sometimes you might end up
+
+00:11:57.760 --> 00:12:00.079
+trying to optimize one of these
+
+00:12:00.079 --> 00:12:01.600
+smaller functions called
+
+00:12:01.600 --> 00:12:09.279
+or usually smaller, and that the result
+
+00:12:09.279 --> 00:12:11.040
+might not actually affect
+
+00:12:11.040 --> 00:12:18.720
+the production runtime at all.
+
+12:18.720 --> 00:12:22.240
+But it's still a good tool,
+
+00:12:22.240 --> 00:12:25.440
+especially when you already know
+
+12:25.440 --> 00:12:30.560
+which set of actions you are interested in,
+
+00:12:30.560 --> 00:12:33.760
+and which functions might be slower.
+
+12:33.760 --> 00:12:37.120
+elp allows you to instrument a package
+
+00:12:37.120 --> 00:12:42.720
+or a set of functions. Just don't forget
+
+00:12:42.720 --> 00:12:49.600
+to un-instrument them all afterwards,
+
+00:12:49.600 --> 00:12:52.000
+or else your session,
+
+00:12:52.000 --> 00:12:55.920
+your subsequent optimization efforts
+
+00:12:55.920 --> 00:12:59.360
+might not work as well as you might
+
+12:59.360 --> 00:13:01.359
+want to work.
+
+13:01.360 --> 00:13:04.560
+And there's also this very nice,
+
+00:13:04.560 --> 00:13:09.600
+very handy package called benchmark,
+
+13:09.600 --> 00:13:12.480
+which unfortunately
+
+00:13:12.480 --> 00:13:16.000
+not everybody knows about.
+
+13:16.000 --> 00:13:21.519
+It turns out that a lot of
+
+00:13:21.519 --> 00:13:30.079
+older Emacs Lisp developers,
+
+13:30.079 --> 00:13:34.160
+users, package developers usually have
+
+00:13:34.160 --> 00:13:38.000
+some benchmarking macros of their own.
+
+00:13:38.000 --> 00:13:42.880
+But there is this package
+
+00:13:42.880 --> 00:13:46.160
+with perfectly usable interface
+
+00:13:46.160 --> 00:13:49.199
+which doesn't require you
+
+00:13:49.199 --> 00:13:51.120
+to define something else,
+
+00:13:51.120 --> 00:13:52.560
+especially when you are in
+
+00:13:52.560 --> 00:13:57.120
+an emacs -Q session
+
+13:57.120 --> 00:14:00.480
+trying to benchmark your code
+
+00:14:00.480 --> 00:14:05.440
+in a bare Emacs. So it has
+
+00:14:05.440 --> 00:14:09.680
+two main endpoints, I would say.
+
+14:09.680 --> 00:14:14.480
+First one is the benchmark macro,
+
+14:14.480 --> 00:14:19.199
+and the second one is benchmark-progn.
+
+00:14:19.199 --> 00:14:20.399
+benchmark is a function,
+
+00:14:20.399 --> 00:14:25.040
+and benchmark-progn is a macro.
+
+14:25.040 --> 00:14:27.839
+The first one you can use by specifying
+
+00:14:27.839 --> 00:14:30.480
+the number of iterations and the form.
+
+00:14:30.480 --> 00:14:36.800
+I hope the minibuffer is easy to read here.
+
+14:36.800 --> 00:14:43.360
+For instance, we can take this long list
+
+00:14:43.360 --> 00:14:44.800
+and try nreverse-ing it,
+
+00:14:44.800 --> 00:14:49.680
+and we see how long that takes.
+
+14:49.680 --> 00:14:54.160
+Then you can do it,
+
+14:54.160 --> 00:14:55.600
+adjust the inner code,
+
+00:14:55.600 --> 00:14:58.079
+and then basically compare
+
+00:14:58.079 --> 00:14:59.519
+to figure out how much
+
+00:14:59.519 --> 00:15:01.440
+and how long nreverse takes
+
+00:15:01.440 --> 00:15:03.839
+in this scenario.
+
+15:03.839 --> 00:15:07.760
+Or, we can take a function
+
+00:15:07.760 --> 00:15:10.880
+which we have probably found
+
+15:10.880 --> 00:15:12.880
+using one of the previous methods
+
+00:15:12.880 --> 00:15:17.279
+which we anticipate that,
+
+15:17.279 --> 00:15:19.440
+as we understand, it takes a while,
+
+15:19.440 --> 00:15:26.720
+and annotate it with a benchmark-progn form,
+
+00:15:26.720 --> 00:15:33.360
+which... just execute the body
+
+00:15:33.360 --> 00:15:36.880
+and report, each and every one of them,
+
+15:36.880 --> 00:15:41.360
+how long that body execution took.
+
+15:41.360 --> 00:15:45.360
+So for instance, here we added
+
+00:15:45.360 --> 00:15:46.959
+a few message calls
+
+00:15:46.959 --> 00:15:49.040
+inside those benchmark-progns,
+
+00:15:49.040 --> 00:15:53.199
+so we can see how long each part
+
+00:15:53.199 --> 00:16:03.600
+of the function xref-matches-in-files
+
+00:16:03.600 --> 00:16:06.320
+takes when it is run.
+
+16:06.320 --> 00:16:11.839
+Let's try it. Let's first call
+
+16:11.839 --> 00:16:17.199
+emacs-lisp-byte-compile-and-load,
+
+16:17.199 --> 00:16:20.720
+so that we're sure that we are running
+
+16:20.720 --> 00:16:24.079
+the fastest possible version of this code,
+
+16:24.079 --> 00:16:29.519
+so when we do find the bottlenecks,
+
+00:16:29.519 --> 00:16:31.279
+we are sure that they are real
+
+00:16:31.279 --> 00:16:36.240
+and not because of the uncompiled code,
+
+00:16:36.240 --> 00:16:43.519
+macro expansion, or the lack of
+
+00:16:43.519 --> 00:16:46.160
+some substitutions, other substitutions
+
+00:16:46.160 --> 00:16:50.800
+that our code is relying on
+
+16:50.800 --> 00:17:01.279
+but which might not be available
+
+17:01.279 --> 00:17:03.279
+in the interpreter mode
+
+00:17:03.279 --> 00:17:07.039
+just in the compiled code.
+
+17:07.039 --> 00:17:10.160
+Let's run.
+
+17:10.160 --> 00:17:14.880
+So we have this list,
+
+17:14.880 --> 00:17:26.160
+search for list,
+
+17:26.160 --> 00:17:29.760
+and the remaining time is spent during
+
+00:17:29.760 --> 00:17:36.720
+printing of the results, which we didn't
+
+17:36.720 --> 00:17:38.320
+annotate with the benchmarking macro,
+
+00:17:38.320 --> 00:17:41.280
+but it's still there.
+
+17:41.280 --> 00:17:43.679
+So we can see by switching to the
+
+17:43.679 --> 00:17:49.919
+*Messages* buffer, C-h e,
+
+17:49.919 --> 00:17:52.080
+that unquoting was very fast.
+
+00:17:52.080 --> 00:17:59.280
+So the search took 400 milliseconds.
+
+00:17:59.280 --> 00:18:02.480
+It's slower than it would be
+
+18:02.480 --> 00:18:06.080
+without the video being recorded, as well
+
+00:18:06.080 --> 00:18:09.039
+as the rest of the measurements here.
+
+18:09.039 --> 00:18:12.160
+So the parsing of the results took more
+
+00:18:12.160 --> 00:18:16.559
+than that, and the object allocation
+
+18:16.559 --> 00:18:21.919
+took even more, which is unfortunate
+
+00:18:21.919 --> 00:18:23.919
+but it's the reality
+
+00:18:23.919 --> 00:18:26.400
+when we're dealing with a lot of
+
+00:18:26.400 --> 00:18:29.840
+search results, because, well,
+
+18:29.840 --> 00:18:33.520
+Emacs Lisp is slower than grep.
+
+18:34.559 --> 00:18:49.200
+That's just a given.
+
+18:49.200 --> 00:18:54.400
+What can be done and what had been done
+
+00:18:54.400 --> 00:18:57.120
+to improve on this?
+
+18:57.120 --> 00:19:04.240
+Well, first of all,
+
+19:04.240 --> 00:19:06.000
+let's change the question,
+
+00:19:06.000 --> 00:19:07.360
+because this is more of
+
+00:19:07.360 --> 00:19:09.760
+a retrospective sort of talk
+
+19:09.760 --> 00:19:13.439
+rather than talking about future plans.
+
+00:19:13.440 --> 00:19:19.679
+What can one do to improve performance?
+
+19:19.679 --> 00:19:24.160
+Well, basically, two things:
+
+00:19:24.160 --> 00:19:27.919
+first, you try to make sure
+
+00:19:27.919 --> 00:19:30.559
+that you're writing less code,
+
+00:19:30.559 --> 00:19:37.200
+then your code does fewer things,
+
+19:37.200 --> 00:19:40.400
+Fewer iterations of your operations.
+
+19:40.400 --> 00:19:42.000
+Basically, it's the realm
+
+00:19:42.000 --> 00:19:46.880
+of choosing your algorithm well.
+
+19:46.880 --> 00:19:54.880
+But make sure it's as little complexity
+
+00:19:54.880 --> 00:20:00.239
+as you can manage reasonably.
+
+20:00.240 --> 00:20:05.760
+Another is to try to reduce memory allocations.
+
+20:05.760 --> 00:20:13.760
+It's creating conses, the links of the list,
+
+20:13.760 --> 00:20:17.919
+of the lists. If you are mapping through
+
+00:20:17.919 --> 00:20:19.200
+a list, creating a new one,
+
+00:20:19.200 --> 00:20:22.640
+you are creating conses.
+
+00:20:22.640 --> 00:20:26.159
+New objects in memory, anyway.
+
+20:26.159 --> 00:20:30.480
+And also, when you call string operations
+
+00:20:30.480 --> 00:20:33.679
+like substring, when you create new strings,
+
+20:33.679 --> 00:20:36.640
+that's also what you do.
+
+20:36.640 --> 00:20:39.200
+When you allocate new memory,
+
+00:20:39.200 --> 00:20:43.600
+that triggers garbage collections later,
+
+00:20:43.600 --> 00:20:49.200
+which affect the performance of your code
+
+20:49.200 --> 00:21:01.600
+quite severely. I have found that actually,
+
+00:21:01.600 --> 00:21:04.960
+contrary to my personal intuition,
+
+21:04.960 --> 00:21:08.240
+when you try to fine-tune the code
+
+00:21:08.240 --> 00:21:13.120
+working on long lists of elements,
+
+00:21:13.120 --> 00:21:15.520
+long, long collection, large collections,
+
+00:21:15.520 --> 00:21:20.159
+it's even more important to try to avoid
+
+21:20.159 --> 00:21:23.200
+or reduce memory allocations
+
+21:23.200 --> 00:21:26.400
+rather than try to ensure
+
+00:21:26.400 --> 00:21:32.240
+that less code is running,
+
+21:32.240 --> 00:21:34.960
+less operations are performed,
+
+21:34.960 --> 00:21:38.080
+because the garbage collector
+
+21:38.080 --> 00:21:44.799
+can hit you in the posterior quite suddenly
+
+00:21:44.799 --> 00:21:49.520
+that you will not always...
+
+21:49.520 --> 00:21:51.760
+When you measure the input impact,
+
+00:21:51.760 --> 00:21:56.799
+you might not always measure the whole of it.
+
+21:56.799 --> 00:22:02.640
+And sometimes even when you have
+
+00:22:02.640 --> 00:22:06.559
+a few operations, you can measure
+
+22:06.559 --> 00:22:09.520
+all three of them, but at some point,
+
+00:22:09.520 --> 00:22:11.919
+if you just reduce a lot,
+
+22:11.919 --> 00:22:14.720
+remove most of the allocations,
+
+00:22:14.720 --> 00:22:16.799
+all three of them, the improvement
+
+00:22:16.799 --> 00:22:21.520
+might be even bigger than the total
+
+22:21.520 --> 00:22:23.440
+of three improvements
+
+00:22:23.440 --> 00:22:27.200
+which you might have measured previously,
+
+22:27.200 --> 00:22:29.679
+like separately.
+
+22:29.679 --> 00:22:33.039
+So it's something to be on the lookout for,
+
+00:22:33.039 --> 00:22:39.520
+but of course, when you pick the algorithm,
+
+00:22:39.520 --> 00:22:45.200
+it's important not to do
+
+00:22:45.200 --> 00:22:52.158
+more operations than you have to.
+
+22:52.159 --> 00:22:56.000
+We have examples of both
+
+00:22:56.000 --> 00:22:58.720
+in the recent changes
+
+00:22:58.720 --> 00:23:02.559
+to the xref and project packages,
+
+23:02.559 --> 00:23:06.960
+which we can examine here.
+
+23:06.960 --> 00:23:11.200
+Let's take a look at this one.
+
+23:11.200 --> 00:23:14.880
+This commit message lies a little bit
+
+23:14.880 --> 00:23:19.039
+because it's referring to
+
+00:23:19.039 --> 00:23:24.559
+the use of assoc instead of cl-assoc,
+
+23:24.559 --> 00:23:29.919
+and the actual change incorporates that,
+
+00:23:29.919 --> 00:23:33.440
+but it also incorporates
+
+00:23:33.440 --> 00:23:39.440
+the second part of the sentence
+
+00:23:39.440 --> 00:23:41.360
+which actually replaced
+
+00:23:41.360 --> 00:23:46.960
+the use of assoc in there.
+
+23:46.960 --> 00:23:50.480
+Curiously, cl-assoc was pretty slow
+
+00:23:50.480 --> 00:23:52.559
+because not only it created
+
+00:23:52.559 --> 00:23:57.919
+quadratic complexity in the operation
+
+23:57.919 --> 00:23:59.919
+and it was also calling
+
+00:23:59.919 --> 00:24:02.880
+the Lisp function [equal]
+
+24:02.880 --> 00:24:04.400
+for every iteration,
+
+00:24:04.400 --> 00:24:08.880
+whereas if we just use assoc there,
+
+24:08.880 --> 00:24:10.080
+which was the first version
+
+00:24:10.080 --> 00:24:13.919
+of this change, of the improvement,
+
+24:13.919 --> 00:24:15.760
+it became already much faster,
+
+00:24:15.760 --> 00:24:20.640
+but then switching to a hash table
+
+24:20.640 --> 00:24:28.080
+which turned this lookup
+
+00:24:28.080 --> 00:24:31.760
+from O(n) complexity
+
+24:31.760 --> 00:24:35.600
+into, well, amortized constant one,
+
+24:35.600 --> 00:24:37.600
+even better.
+
+24:37.600 --> 00:24:45.679
+So, use hash tables, kids.
+
+24:45.679 --> 00:24:52.400
+Another commit here is about using
+
+00:24:52.400 --> 00:24:55.520
+the inhibit-modification-hooks.
+
+00:24:55.520 --> 00:24:58.000
+So, turns out when you're printing
+
+00:24:58.000 --> 00:25:01.679
+into a buffer, even if you have already
+
+25:01.679 --> 00:25:06.159
+disabled the undo history,
+
+25:06.159 --> 00:25:08.480
+binding this variable to
+
+25:08.480 --> 00:25:10.880
+a non-null value is pretty good
+
+00:25:10.880 --> 00:25:15.520
+because you are able to avoid running
+
+25:15.520 --> 00:25:21.120
+a number of hooks, which improves performance.
+
+25:21.120 --> 00:25:28.640
+Next. This one was about moving the
+
+00:25:28.640 --> 00:25:32.000
+file-remote-p call
+
+25:32.000 --> 00:25:37.279
+from inside the loop.
+
+25:37.279 --> 00:25:42.039
+This function is actually
+
+00:25:42.039 --> 00:25:49.039
+surprisingly slow-ish for the goal,
+
+25:49.039 --> 00:25:52.000
+for its purpose, so you don't really want
+
+25:52.000 --> 00:25:56.159
+to call it on every file name in the list
+
+00:25:56.159 --> 00:25:59.520
+when you have a lot of them,
+
+25:59.520 --> 00:26:02.000
+and especially if your code
+
+00:26:02.000 --> 00:26:04.640
+is running in a buffer
+
+00:26:04.640 --> 00:26:10.640
+visiting a remote file, like through TRAMP.
+
+26:10.640 --> 00:26:15.120
+You might end up trying to
+
+00:26:15.120 --> 00:26:16.880
+devise different approaches
+
+00:26:16.880 --> 00:26:20.159
+to avoid checking whether
+
+00:26:20.159 --> 00:26:23.279
+every file name is remote
+
+26:23.279 --> 00:26:25.360
+if you're dealing with a list of file names,
+
+00:26:25.360 --> 00:26:34.640
+so this one, take a look, be careful with it.
+
+26:34.640 --> 00:26:43.120
+A similar, slower function, with-current-buffer,
+
+26:43.120 --> 00:26:46.880
+but not so much. So it all depends on
+
+26:46.880 --> 00:26:48.400
+really how often you call it.
+
+00:26:48.400 --> 00:26:51.279
+Sometimes you might want to
+
+00:26:51.279 --> 00:26:52.720
+rewrite your code so that
+
+00:26:52.720 --> 00:26:54.720
+it's called less often.
+
+26:54.720 --> 00:26:59.760
+And expand-file-name, which hits the disk.
+
+26:59.760 --> 00:27:01.200
+So if you're dealing with file names,
+
+00:27:01.200 --> 00:27:02.960
+you might want to replace it
+
+00:27:02.960 --> 00:27:07.520
+with concatenation at certain points.
+
+27:07.520 --> 00:27:22.159
+Okay, back to these changes later.
+
+27:22.159 --> 00:27:28.480
+This one just removed a location of a cons
+
+27:28.480 --> 00:27:33.679
+per match hit, and still it brought 5%
+
+27:33.679 --> 00:27:37.039
+or something like that improvement
+
+00:27:37.039 --> 00:27:41.120
+to the whole command.
+
+27:41.120 --> 00:27:46.000
+So that's a pretty significant improvement
+
+00:27:46.000 --> 00:27:53.600
+for a small change like that.
+
+27:53.600 --> 00:28:01.679
+Similarly, here we just made sure
+
+00:28:01.679 --> 00:28:09.520
+to avoid a splits... no, a substring call,
+
+28:09.520 --> 00:28:12.399
+and probably an allocation of the whole
+
+28:12.399 --> 00:28:16.320
+buffer string, but in my testing,
+
+00:28:16.320 --> 00:28:19.440
+that doesn't actually matter much,
+
+00:28:19.440 --> 00:28:22.399
+at least so much, but a substring call
+
+00:28:22.399 --> 00:28:28.960
+per result... If we see,
+
+00:28:28.960 --> 00:28:33.039
+since we changed to manual parsing
+
+00:28:33.039 --> 00:28:37.440
+of the buffer, with the strings
+
+00:28:37.440 --> 00:28:41.440
+delimited with zero bytes,
+
+28:41.440 --> 00:28:43.840
+it gave an overall improvement
+
+00:28:43.840 --> 00:28:47.440
+of 20%, again on my machine
+
+00:28:47.440 --> 00:28:50.720
+with a pretty fast SSD,
+
+00:28:50.720 --> 00:28:53.679
+and with a warm disk cache, of course.
+
+28:53.679 --> 00:29:05.360
+But still... Going back to this revision,
+
+00:29:05.360 --> 00:29:09.440
+it was actually quite surprising
+
+00:29:09.440 --> 00:29:15.200
+that migration to a cl-defstruct
+
+29:15.200 --> 00:29:24.080
+from eieio, the Common Lisp-inspired
+
+00:29:24.080 --> 00:29:26.480
+object system first introduced
+
+00:29:26.480 --> 00:29:34.240
+in the CEDET tools,
+
+00:29:34.240 --> 00:29:39.360
+that was a bit of a surprise,
+
+00:29:39.360 --> 00:29:44.799
+because not much of my
+
+00:29:44.799 --> 00:29:46.080
+benchmark benchmarking
+
+00:29:46.080 --> 00:29:50.960
+actually pointed at it being the problem.
+
+29:50.960 --> 00:29:55.760
+Probably because the accessors
+
+00:29:55.760 --> 00:29:57.520
+were not the actual problem,
+
+29:57.520 --> 00:30:00.399
+like the oref macros
+
+00:30:00.399 --> 00:30:06.960
+and the code accessing the slots,
+
+30:06.960 --> 00:30:10.720
+but the construction,
+
+00:30:10.720 --> 00:30:14.320
+the object construction code,
+
+30:14.320 --> 00:30:16.559
+that was where most of the time
+
+00:30:16.559 --> 00:30:21.200
+was spent unnecessarily,
+
+30:21.200 --> 00:30:24.240
+maybe doing type-checking,
+
+30:24.240 --> 00:30:28.880
+maybe some other stuff.
+
+30:28.880 --> 00:30:36.080
+So if you have lots of values,
+
+30:36.080 --> 00:30:39.120
+you need to treat like objects in... and
+
+00:30:39.120 --> 00:30:42.000
+virtual dispatch on them in your package,
+
+00:30:42.000 --> 00:30:45.200
+you might want to look into
+
+30:45.200 --> 00:30:52.239
+cl-defstruct for them.
+
+30:52.240 --> 00:30:54.080
+Going on to the next section,
+
+00:30:54.080 --> 00:31:01.200
+I have prepared the sort of comparison
+
+31:01.200 --> 00:31:05.519
+between cl-lib, dash, and seq,
+
+00:31:05.519 --> 00:31:09.360
+the collection libraries we have
+
+31:09.360 --> 00:31:11.279
+available for us in Emacs.
+
+00:31:11.279 --> 00:31:15.760
+That is the popular ones,
+
+31:15.760 --> 00:31:21.440
+but since I'm running behind on time,
+
+00:31:21.440 --> 00:31:27.760
+I'll probably just summarize the findings.
+
+31:27.760 --> 00:31:31.919
+First of all, seq is nice.
+
+00:31:31.919 --> 00:31:38.480
+Its generic approach is probably
+
+31:38.480 --> 00:31:41.919
+quite decent for most of the situations,
+
+31:41.919 --> 00:31:49.840
+but there are places where it could be
+
+31:49.840 --> 00:31:53.679
+optimized better, so instead of having
+
+31:53.679 --> 00:31:56.399
+quadratic performance, it could use a
+
+31:56.399 --> 00:31:59.200
+hash table, like for instance,
+
+31:59.200 --> 00:32:02.000
+dash does here--
+
+32:02.000 --> 00:32:06.240
+in dash, union or delete-dups
+
+00:32:06.240 --> 00:32:12.960
+does in its implementation.
+
+32:12.960 --> 00:32:16.640
+The dash itself is curiously fast,
+
+00:32:16.640 --> 00:32:20.000
+at least faster than I might have expected,
+
+32:20.000 --> 00:32:21.600
+possibly because of
+
+00:32:21.600 --> 00:32:25.120
+the implementation approach
+
+00:32:25.120 --> 00:32:33.200
+where it uses code generation
+
+00:32:33.200 --> 00:32:35.840
+to avoid function calls,
+
+32:35.840 --> 00:32:37.840
+at least some of them,
+
+32:37.840 --> 00:32:41.120
+which is interesting.
+
+32:41.120 --> 00:32:45.600
+But since both seq and dash
+
+00:32:45.600 --> 00:32:49.919
+avoid mutations--they don't really have
+
+32:49.919 --> 00:32:52.399
+mutating counterparts to common functions
+
+00:32:52.399 --> 00:32:56.480
+like you have with cl-remove-if, cl-delete-if,
+
+32:56.480 --> 00:33:02.000
+or just cl-remove, cl-delete,
+
+33:02.000 --> 00:33:08.000
+it still can be valuable to look into
+
+00:33:08.000 --> 00:33:12.240
+destructive versions of those functions,
+
+33:12.240 --> 00:33:16.880
+something from the core library
+
+00:33:16.880 --> 00:33:22.559
+like delete-dups or nreverse,
+
+33:22.559 --> 00:33:24.399
+for your code when you're really trying
+
+33:24.399 --> 00:33:29.519
+to get as close to the metal
+
+00:33:29.519 --> 00:33:34.320
+or whatever as you can,
+
+00:33:34.320 --> 00:33:40.080
+because avoiding extra allocations,
+
+00:33:40.080 --> 00:33:43.200
+it can really be useful.
+
+33:43.200 --> 00:33:46.159
+You can really improve their performance
+
+33:46.159 --> 00:33:54.080
+if you don't do a lot of other stuff.
+
+33:54.080 --> 00:34:00.080
+delete-consecutive-dups is blazing faster.
+
+34:00.080 --> 00:34:03.919
+It only requires pre-sorted strings.
+
+34:03.919 --> 00:34:08.399
+What else to say...
+
+34:08.399 --> 00:34:13.200
+If you are going to read these measurements,
+
+34:13.200 --> 00:34:15.359
+make sure to keep in mind
+
+00:34:15.359 --> 00:34:18.000
+that reverse is not free,
+
+34:18.000 --> 00:34:20.240
+so for instance, if we're looking
+
+00:34:20.240 --> 00:34:22.480
+at this comparison
+
+00:34:22.480 --> 00:34:26.399
+between remove and delete, for instance,
+
+34:26.399 --> 00:34:27.919
+they're using reverse
+
+00:34:27.919 --> 00:34:32.159
+to avoid modifying the data,
+
+34:32.159 --> 00:34:34.800
+the sample data, so we don't have to
+
+34:34.800 --> 00:34:36.720
+create it every time.
+
+34:36.720 --> 00:34:41.919
+But to compare how much faster
+
+00:34:41.919 --> 00:34:43.760
+delete is than remove,
+
+34:43.760 --> 00:34:50.800
+we need to subtract 787 milliseconds
+
+34:50.800 --> 00:34:52.320
+from here and from here
+
+00:34:52.320 --> 00:34:58.480
+so it comes out to like 230 milliseconds
+
+00:34:58.480 --> 00:35:02.560
+in this example, the last example,
+
+00:35:02.560 --> 00:35:12.000
+and 100 to 1 second, 250 milliseconds here,
+
+00:35:12.000 --> 00:35:17.599
+so the difference is 5-fold here.
+
+35:17.599 --> 00:35:20.160
+Not 2-fold.
+
+35:20.160 --> 00:35:26.480
+All right. With this, I'm going to
+
+35:26.480 --> 00:35:29.520
+thank you for listening, for watching
+
+35:29.520 --> 00:35:31.920
+and I'll be taking questions.
+
+35:31.920 --> 00:35:32.920
+Thank you.
+
+00:35:32.920 --> 00:35:35.160
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--chapters.vtt b/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--chapters.vtt
new file mode 100644
index 00000000..3e716c43
--- /dev/null
+++ b/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--chapters.vtt
@@ -0,0 +1,82 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:26.318
+Thanks
+
+00:00:26.319 --> 00:03:09.598
+In your opinion, what is Emacs' Achilles heel?
+
+00:03:09.599 --> 00:05:06.959
+What is your opinion about the documentation of Emacs in other languages?
+
+00:05:06.960 --> 00:06:31.839
+Do you think more effort should be made to popularize hacking on the C parts of Emacs?
+
+00:06:31.840 --> 00:07:11.999
+Can you name a few features from other programming languages that you miss in Emacs Lisp?
+
+00:07:12.000 --> 00:08:22.399
+What are your opinions on Emacs's commitments to free software?
+
+00:08:22.400 --> 00:11:42.959
+Do you think that packages like Magit or Org mode make people see Emacs as an obstacle to these applications that they want to use?
+
+00:11:42.960 --> 00:12:57.919
+Another way people can help inspire others to use Emacs
+
+00:12:57.920 --> 00:14:49.839
+Should Emacs continue to present itself as an esoteric program and culture, or should we try to dispel the myth?
+
+00:14:49.840 --> 00:15:22.079
+Do you think there could be changes made to the core of Emacs that would betray the ethos you and most people here appreciate?
+
+00:15:22.080 --> 00:15:38.479
+When will David Wilson and Protesilaos collaborate?
+
+00:15:38.480 --> 00:16:28.639
+If you had to choose between graphics or real browser support within Emacs, which would you choose?
+
+00:16:28.640 --> 00:18:29.679
+How do you feel being an Emacs-focused YouTuber?
+
+00:18:29.680 --> 00:20:31.119
+More typesetting capabilities versus better performance
+
+00:20:31.120 --> 00:24:43.199
+Sneak peek of what's coming in the YouTube channel soon?
+
+00:24:43.200 --> 00:25:07.919
+Principles and compromises
+
+00:25:07.920 --> 00:26:10.399
+Understanding the value of Emacs Lisp
+
+00:26:10.400 --> 00:26:44.319
+Will you do a video showing your personal workflow?
+
+00:26:44.320 --> 00:28:12.799
+What do you think about Guix or NixOS?
+
+00:28:12.800 --> 00:31:18.399
+Can you talk about your actual work?
+
+00:31:18.400 --> 00:35:23.119
+Do your colleagues use Emacs as well?
+
+00:35:23.120 --> 00:39:23.599
+Any thoughts on the idea that the best tool to use is the one that is easiest to leave?
+
+00:39:23.600 --> 00:42:29.919
+Do you think there should be an updated initial configuration for fresh Emacs installations with more modern UI features and cool shortcuts?
+
+00:42:29.920 --> 00:43:50.719
+How hard is it to get into the native code side of Emacs?
+
+00:43:50.720 --> 00:46:28.399
+Emacs Chats
+
+00:46:28.400 --> 00:53:34.879
+Livestreams
+
+00:53:34.880 --> 00:53:35.880
+Short-form videos
diff --git a/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--main--chapters.vtt b/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--main--chapters.vtt
new file mode 100644
index 00000000..7d688ed4
--- /dev/null
+++ b/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--main--chapters.vtt
@@ -0,0 +1,82 @@
+WEBVTT
+
+00:00:11.120 --> 00:01:16.158
+Thanks
+
+00:01:16.159 --> 00:03:59.438
+In your opinion, what is Emacs' Achilles heel?
+
+00:03:59.439 --> 00:05:56.799
+What is your opinion about the documentation of Emacs in other languages?
+
+00:05:56.800 --> 00:07:21.679
+Do you think more effort should be made to popularize hacking on the C parts of Emacs?
+
+00:07:21.680 --> 00:08:01.839
+Can you name a few features from other programming languages that you miss in Emacs Lisp?
+
+00:08:01.840 --> 00:09:12.239
+What are your opinions on Emacs's commitments to free software?
+
+00:09:12.240 --> 00:12:32.799
+Do you think that packages like Magit or Org mode make people see Emacs as an obstacle to these applications that they want to use?
+
+00:12:32.800 --> 00:13:47.759
+Another way people can help inspire others to use Emacs
+
+00:13:47.760 --> 00:15:39.679
+Should Emacs continue to present itself as an esoteric program and culture, or should we try to dispel the myth?
+
+00:15:39.680 --> 00:16:11.919
+Do you think there could be changes made to the core of Emacs that would betray the ethos you and most people here appreciate?
+
+00:16:11.920 --> 00:16:28.319
+When will David Wilson and Protesilaos collaborate?
+
+00:16:28.320 --> 00:17:18.479
+If you had to choose between graphics or real browser support within Emacs, which would you choose?
+
+00:17:18.480 --> 00:19:19.519
+How do you feel being an Emacs-focused YouTuber?
+
+00:19:19.520 --> 00:21:20.959
+More typesetting capabilities versus better performance
+
+00:21:20.960 --> 00:25:33.039
+Sneak peek of what's coming in the YouTube channel soon?
+
+00:25:33.040 --> 00:25:57.759
+Principles and compromises
+
+00:25:57.760 --> 00:27:00.239
+Understanding the value of Emacs Lisp
+
+00:27:00.240 --> 00:27:34.159
+Will you do a video showing your personal workflow?
+
+00:27:34.160 --> 00:29:02.639
+What do you think about Guix or NixOS?
+
+00:29:02.640 --> 00:32:08.239
+Can you talk about your actual work?
+
+00:32:08.240 --> 00:36:12.959
+Do your colleagues use Emacs as well?
+
+00:36:12.960 --> 00:40:13.439
+Any thoughts on the idea that the best tool to use is the one that is easiest to leave?
+
+00:40:13.440 --> 00:43:19.759
+Do you think there should be an updated initial configuration for fresh Emacs installations with more modern UI features and cool shortcuts?
+
+00:43:19.760 --> 00:44:40.559
+How hard is it to get into the native code side of Emacs?
+
+00:44:40.560 --> 00:47:18.239
+Emacs Chats
+
+00:47:18.240 --> 00:54:24.719
+Livestreams
+
+00:54:24.720 --> 00:54:25.720
+Short-form videos
diff --git a/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--chapters.vtt b/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--chapters.vtt
new file mode 100644
index 00000000..32d90f1e
--- /dev/null
+++ b/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--chapters.vtt
@@ -0,0 +1,61 @@
+WEBVTT
+
+00:00:01.280 --> 00:00:28.079
+Introduction and conclusion
+
+00:00:28.080 --> 00:01:07.199
+Who am I?
+
+00:01:07.200 --> 00:02:26.958
+Is Emacs unpopular?
+
+00:02:26.959 --> 00:04:15.679
+What does popularity really mean?
+
+00:04:15.680 --> 00:04:32.399
+How do we measure popularity?
+
+00:04:32.400 --> 00:06:18.318
+Google Trends
+
+00:06:18.319 --> 00:08:19.999
+Stack Overflow Survey
+
+00:08:20.000 --> 00:10:23.199
+Community Activity
+
+00:10:23.200 --> 00:10:38.319
+How do editors lose popularity?
+
+00:10:38.320 --> 00:12:25.679
+A new editor with better features appears
+
+00:12:25.680 --> 00:14:01.039
+Lack of sufficient maintenance
+
+00:14:01.040 --> 00:14:36.958
+The "fashion" moves on
+
+00:14:36.959 --> 00:17:10.239
+What happens when an editor loses popularity?
+
+00:17:10.240 --> 00:17:20.159
+How will Emacs survive *despite* popularity?
+
+00:17:20.160 --> 00:19:51.439
+Emacs is more deeply hackable than almost all other editors
+
+00:19:51.440 --> 00:21:15.279
+Emacs has a strong community of highly skilled package authors
+
+00:21:15.280 --> 00:22:33.439
+Emacs has a very strong user community
+
+00:22:33.440 --> 00:23:40.959
+The Emacs maintainers and contributors care about the users
+
+00:23:40.960 --> 00:24:22.879
+Isn't all this supposed to come when an editor is popular?
+
+00:24:22.880 --> 00:24:23.880
+When someone talks about popularity...
diff --git a/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main--chapters.vtt b/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main--chapters.vtt
new file mode 100644
index 00000000..32d90f1e
--- /dev/null
+++ b/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main--chapters.vtt
@@ -0,0 +1,61 @@
+WEBVTT
+
+00:00:01.280 --> 00:00:28.079
+Introduction and conclusion
+
+00:00:28.080 --> 00:01:07.199
+Who am I?
+
+00:01:07.200 --> 00:02:26.958
+Is Emacs unpopular?
+
+00:02:26.959 --> 00:04:15.679
+What does popularity really mean?
+
+00:04:15.680 --> 00:04:32.399
+How do we measure popularity?
+
+00:04:32.400 --> 00:06:18.318
+Google Trends
+
+00:06:18.319 --> 00:08:19.999
+Stack Overflow Survey
+
+00:08:20.000 --> 00:10:23.199
+Community Activity
+
+00:10:23.200 --> 00:10:38.319
+How do editors lose popularity?
+
+00:10:38.320 --> 00:12:25.679
+A new editor with better features appears
+
+00:12:25.680 --> 00:14:01.039
+Lack of sufficient maintenance
+
+00:14:01.040 --> 00:14:36.958
+The "fashion" moves on
+
+00:14:36.959 --> 00:17:10.239
+What happens when an editor loses popularity?
+
+00:17:10.240 --> 00:17:20.159
+How will Emacs survive *despite* popularity?
+
+00:17:20.160 --> 00:19:51.439
+Emacs is more deeply hackable than almost all other editors
+
+00:19:51.440 --> 00:21:15.279
+Emacs has a strong community of highly skilled package authors
+
+00:21:15.280 --> 00:22:33.439
+Emacs has a very strong user community
+
+00:22:33.440 --> 00:23:40.959
+The Emacs maintainers and contributors care about the users
+
+00:23:40.960 --> 00:24:22.879
+Isn't all this supposed to come when an editor is popular?
+
+00:24:22.880 --> 00:24:23.880
+When someone talks about popularity...
diff --git a/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt b/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt
new file mode 100644
index 00000000..026216c8
--- /dev/null
+++ b/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt
@@ -0,0 +1,2674 @@
+WEBVTT
+
+00:01.280 --> 00:02.800
+Hi everyone! I'm very excited
+
+00:02.800 --> 00:05.200
+to be here at EmacsConf 2021 today
+
+00:05.200 --> 00:06.640
+to give my talk called
+
+00:06.640 --> 00:09.360
+"M-x Forever: How Emacs Will Outlast
+
+00:09.360 --> 00:11.519
+Text Editor Trends."
+
+00:11.519 --> 00:13.759
+So let's start with the conclusion first.
+
+00:13.759 --> 00:15.040
+I know, it's a little bit unorthodox,
+
+00:15.040 --> 00:16.960
+but let's just try and see what happens.
+
+00:16.960 --> 00:18.400
+So no matter what happens
+
+00:18.400 --> 00:19.760
+in the wider software world,
+
+00:19.760 --> 00:21.520
+GNU Emacs will continue to be
+
+00:21.520 --> 00:22.640
+a beloved program
+
+00:22.640 --> 00:24.080
+with a dedicated community
+
+00:24.080 --> 00:25.199
+and a healthy team
+
+00:25.199 --> 00:00:28.079
+of maintainers and contributors.
+
+00:28.080 --> 00:29.439
+You're probably wondering
+
+00:29.439 --> 00:31.141
+who am I to be making such a claim,
+
+00:31.141 --> 00:32.640
+so I'll tell you.
+
+00:32.640 --> 00:34.640
+I am David Wilson, the creator of the
+
+00:34.640 --> 00:36.000
+System Crafters YouTube channel
+
+00:36.000 --> 00:38.079
+and community. If you want to see
+
+00:38.079 --> 00:39.040
+a lot of really great videos
+
+00:39.040 --> 00:41.280
+about GNU Emacs, GNU Guix, etc.,
+
+00:41.280 --> 00:42.719
+come check out my YouTube channel.
+
+00:42.719 --> 00:44.480
+I'm also on LBRY and Odysee
+
+00:44.480 --> 00:46.399
+if you don't want to go use YouTubea
+
+00:46.399 --> 00:47.360
+And also, if you're the type of person
+
+00:47.360 --> 00:48.399
+who doesn't want to use
+
+00:48.399 --> 00:49.680
+any of these websites
+
+00:49.680 --> 00:51.039
+and you want to see my videos anyway,
+
+00:51.039 --> 00:52.160
+please just send me an email
+
+00:52.160 --> 00:53.280
+at the email address below
+
+00:53.280 --> 00:54.079
+and I'll see if I can set you up
+
+00:54.079 --> 00:55.520
+with that. You can also check out
+
+00:55.520 --> 00:58.160
+my website and the places where we chat,
+
+00:58.160 --> 00:59.440
+especially on libera.chat
+
+00:59.440 --> 01:01.440
+at the #systemcrafters channel.
+
+01:01.440 --> 01:02.719
+If you have any thoughts
+
+01:02.719 --> 01:03.600
+after seeing this talk,
+
+01:03.600 --> 01:04.799
+please feel free to send me an email
+
+01:04.799 --> 00:01:07.199
+or find me on chat.
+
+01:07.200 --> 01:09.920
+So there is a recurring concern
+
+01:09.920 --> 01:11.119
+in the Emacs community
+
+01:11.119 --> 01:12.799
+about its popularity.
+
+01:12.799 --> 01:14.320
+This is something that keeps coming back
+
+01:14.320 --> 01:16.479
+time and time again. You probably see it
+
+01:16.479 --> 01:18.640
+every year or two where people on Reddit
+
+01:18.640 --> 01:19.840
+or maybe on the emacs-devel
+
+01:19.840 --> 01:21.600
+mailing list are talking about ways
+
+01:21.600 --> 01:24.000
+to increase Emacs popularity.
+
+01:24.000 --> 01:25.600
+More recently, there was a discussion
+
+01:25.600 --> 01:27.600
+on Hacker News where somebody posted
+
+01:27.600 --> 01:28.159
+a link to this
+
+01:28.159 --> 01:31.360
+Making Emacs Popular Again blog post
+
+01:31.360 --> 01:32.479
+which does chronicle some of the
+
+01:32.479 --> 01:34.479
+more recent discussions on emacs-devel
+
+01:34.479 --> 01:35.840
+about things that could be done
+
+01:35.840 --> 01:38.479
+to make Emacs a more popular editor.
+
+01:38.479 --> 01:40.079
+So the title of my talk claims
+
+01:40.079 --> 01:41.280
+that Emacs is going to
+
+01:41.280 --> 01:43.759
+outlast text editor trends.
+
+01:43.759 --> 01:45.840
+So to elaborate on this claim,
+
+01:45.840 --> 01:46.799
+we're going to try to answer
+
+01:46.799 --> 01:48.720
+a few specific questions.
+
+01:48.720 --> 01:51.200
+First of all, what is popularity
+
+01:51.200 --> 01:53.280
+and how do you even measure it?
+
+01:53.280 --> 01:54.240
+If people are saying
+
+01:54.240 --> 01:55.920
+that Emacs needs to be more popular,
+
+01:55.920 --> 01:57.040
+then what do we really mean
+
+01:57.040 --> 01:59.040
+by popularity?
+
+01:59.040 --> 02:00.159
+Also, what are the benefits
+
+02:00.159 --> 02:01.920
+of popularity? If emacs did somehow
+
+02:01.920 --> 02:03.920
+become more popular, what benefits
+
+02:03.920 --> 02:05.680
+would it receive from that?
+
+02:05.680 --> 02:07.439
+And also, how does an editor
+
+02:07.439 --> 02:08.720
+lose popularity, and what are
+
+02:08.720 --> 02:11.120
+the possible consequences to that?
+
+02:11.120 --> 02:12.480
+And then what are the unique factors
+
+02:12.480 --> 02:13.680
+about Emacs that will ensure
+
+02:13.680 --> 02:16.000
+that it survives long term?
+
+02:16.000 --> 02:17.520
+What is special about Emacs
+
+02:17.520 --> 02:19.440
+that will help it to thrive
+
+02:19.440 --> 02:21.920
+despite whatever happens in the
+
+02:21.920 --> 02:24.560
+popular sphere of text editors and
+
+02:24.560 --> 00:02:26.958
+programming languages, etc.?
+
+02:26.959 --> 02:28.800
+So, first of all, what does popularity
+
+02:28.800 --> 02:30.720
+really mean? When someone says
+
+02:30.720 --> 02:32.400
+that Emacs needs to become more popular,
+
+02:32.400 --> 02:33.680
+what are they really saying
+
+02:33.680 --> 02:35.840
+is that there needs to be more users,
+
+02:35.840 --> 02:37.102
+and that they stick around.
+
+02:37.102 --> 02:38.800
+Like, they learn how to use Emacs
+
+02:38.800 --> 02:41.680
+and they continue to be users.
+
+02:41.680 --> 02:42.800
+If we did get those new users,
+
+02:42.800 --> 02:45.599
+what would it actually do for Emacs?
+
+02:45.599 --> 02:47.440
+Also, is it that there are
+
+02:47.440 --> 02:48.959
+more community members that are
+
+02:48.959 --> 02:51.040
+creating new packages?
+
+02:51.040 --> 02:52.480
+You know, that sort of assumes
+
+02:52.480 --> 02:53.519
+that the editor itself
+
+02:53.519 --> 02:54.720
+doesn't have enough packages,
+
+02:54.720 --> 02:55.519
+or that the only way
+
+02:55.519 --> 02:57.120
+that the an editor stays alive
+
+02:57.120 --> 02:58.800
+is for there to be constant churn,
+
+02:58.800 --> 03:01.440
+with new packages coming around.
+
+03:01.440 --> 03:03.120
+Is it that there is more content
+
+03:03.120 --> 03:04.319
+being created by users,
+
+03:04.319 --> 03:05.840
+like more blog posts being written,
+
+03:05.840 --> 03:07.920
+more YouTube videos being made,
+
+03:07.920 --> 03:09.360
+more other ways that people are
+
+03:09.360 --> 03:11.599
+evangelizing the use of Emacs
+
+03:11.599 --> 03:14.720
+and also teaching people how to use it?
+
+03:14.720 --> 03:16.080
+Also, is it that
+
+03:16.080 --> 03:18.720
+more long-term stability is had
+
+03:18.720 --> 03:20.159
+in the editor, and more core
+
+03:20.159 --> 03:21.280
+improvements that are being made
+
+03:21.280 --> 03:22.879
+over time? I mean, I guess you could say
+
+03:22.879 --> 03:23.760
+that it does make sense
+
+03:23.760 --> 03:25.680
+that if the editor is more popular,
+
+03:25.680 --> 03:26.959
+then people will be more invested
+
+03:26.959 --> 03:28.080
+in improving it, and there will be
+
+03:28.080 --> 03:30.000
+more new contributors coming in,
+
+03:30.000 --> 03:32.480
+but is greater and greater popularity
+
+03:32.480 --> 03:33.280
+really what's needed
+
+03:33.280 --> 03:35.280
+to ensure that this happens?
+
+03:35.280 --> 03:37.040
+Also, it could just be that
+
+03:37.040 --> 03:38.080
+there's more validation
+
+03:38.080 --> 03:40.480
+for someone's personal choices.
+
+03:40.480 --> 03:42.159
+You know, people tend to use
+
+03:42.159 --> 03:43.760
+these software choices they use
+
+03:43.760 --> 03:44.799
+as part of their identity.
+
+03:44.799 --> 03:46.000
+So is it that they want Emacs
+
+03:46.000 --> 03:46.799
+to be more popular
+
+03:46.799 --> 03:48.319
+so that they can finally say,
+
+03:48.319 --> 03:49.440
+"I'm an Emacs user,"
+
+03:49.440 --> 03:50.080
+and have people think
+
+03:50.080 --> 03:51.840
+that they're cool or "hip" or whatever?
+
+03:51.840 --> 03:52.720
+I hope that... Hopefully,
+
+03:52.720 --> 03:53.370
+that's not the case.
+
+03:53.370 --> 03:54.239
+Hopefully, it's one of these
+
+03:54.239 --> 03:56.000
+other points. But it could be something
+
+03:56.000 --> 03:57.120
+because, as we see, you know,
+
+03:57.120 --> 03:59.439
+there's a lot of trends and fashion
+
+03:59.439 --> 04:00.879
+when it comes to software development
+
+04:00.879 --> 04:02.640
+and also free software
+
+04:02.640 --> 04:04.159
+and open source tools.
+
+04:04.159 --> 04:05.840
+So as we go through this talk,
+
+04:05.840 --> 04:07.200
+keep these questions in mind
+
+04:07.200 --> 04:07.760
+as we talk about
+
+04:07.760 --> 04:09.680
+some of the finer points on all of this,
+
+04:09.680 --> 04:11.280
+and see whether you think
+
+04:11.280 --> 04:13.680
+that popularity really correlates
+
+04:13.680 --> 00:04:15.679
+with these things.
+
+04:15.680 --> 04:17.919
+So first of all, how do we measure
+
+04:17.919 --> 04:20.720
+popularity? What information do we have
+
+04:20.720 --> 04:21.600
+to actually determine
+
+04:21.600 --> 04:23.360
+which editors are popular,
+
+04:23.360 --> 04:25.199
+and whether they're gaining or losing
+
+04:25.199 --> 04:26.880
+popularity? So I've got a few,
+
+04:26.880 --> 04:27.759
+or a couple places here
+
+04:27.759 --> 04:29.120
+that we can look at
+
+04:29.120 --> 04:30.560
+to judge the popularity
+
+04:30.560 --> 00:04:32.399
+of various editors.
+
+04:32.400 --> 04:33.840
+First of all, Google Trends.
+
+04:33.840 --> 04:35.199
+Google actually gives us the ability
+
+04:35.199 --> 04:37.199
+to track and compare search volume
+
+04:37.199 --> 04:39.040
+for particular terms and topics
+
+04:39.040 --> 04:41.759
+over time. So if you wanted to know
+
+04:41.759 --> 04:43.040
+how often someone was searching
+
+04:43.040 --> 04:44.800
+about Emacs, maybe to try to find help
+
+04:44.800 --> 04:46.479
+for something, or look for documentation,
+
+04:46.479 --> 04:48.800
+or maybe look for blog posts, etc.,
+
+04:48.800 --> 04:49.919
+you can look at Google Trends
+
+04:49.919 --> 04:51.600
+to see how often people are searching
+
+04:51.600 --> 04:53.440
+for Emacs over time.
+
+04:53.440 --> 04:55.199
+One useful ability is that we can
+
+04:55.199 --> 04:57.360
+compare how much people are searching
+
+04:57.360 --> 04:58.720
+across various different topics
+
+04:58.720 --> 05:00.000
+and see a graph, which is
+
+05:00.000 --> 05:01.680
+what i'm going to show you right now.
+
+05:01.680 --> 05:04.000
+This graph shows you the search volume
+
+05:04.000 --> 05:06.320
+for Emacs compared to Vim, Atom,
+
+05:06.320 --> 05:08.800
+Sublime Text, and Visual Studio Code
+
+05:08.800 --> 05:11.120
+from 2004 to the present
+
+05:11.120 --> 05:12.880
+worldwide, so all across the world
+
+05:12.880 --> 05:14.479
+where searches are happening.
+
+05:14.479 --> 05:16.240
+You can see that in 2004,
+
+05:16.240 --> 05:18.479
+Emacs is the reigning king supreme
+
+05:18.479 --> 05:21.039
+where you have the most search terms
+
+05:21.039 --> 05:22.720
+or searches happening on emacs
+
+05:22.720 --> 05:25.199
+at that time. Also, Vim is quite high
+
+05:25.199 --> 05:26.960
+on this list as well.
+
+05:26.960 --> 05:28.560
+Let's see. Sublime Text is a bit lower
+
+05:28.560 --> 05:31.120
+in the list, but it's in third place.
+
+05:31.120 --> 05:32.080
+Nope. Yep. That's right.
+
+05:32.080 --> 05:34.880
+Then atom is quite low, but I think that
+
+05:34.880 --> 05:36.320
+Atom didn't exist yet,
+
+05:36.320 --> 05:37.759
+so maybe at that point, you know,
+
+05:37.759 --> 05:39.120
+this is probably something else.
+
+05:39.120 --> 05:41.360
+Google is just getting random data.
+
+05:41.360 --> 05:42.880
+And then Visual Studio Code
+
+05:42.880 --> 05:43.919
+also didn't exist,
+
+05:43.919 --> 05:45.039
+so probably this is like
+
+05:45.039 --> 05:46.479
+Visual Studio searches,
+
+05:46.479 --> 05:48.000
+but then as you go across the years,
+
+05:48.000 --> 05:48.960
+you see that gradually,
+
+05:48.960 --> 05:52.160
+Emacs popularity appears to be declining.
+
+05:52.160 --> 05:54.639
+As does Vim, but not quite so much.
+
+05:54.639 --> 05:56.560
+And then over time, Sublime Text
+
+05:56.560 --> 05:57.520
+becomes more popular,
+
+05:57.520 --> 05:59.280
+and then VS Code in more recent years
+
+05:59.280 --> 06:00.319
+becomes very popular
+
+06:00.319 --> 06:02.400
+compared to everything else.
+
+06:02.400 --> 06:04.479
+So it looks like Emacs
+
+06:04.479 --> 06:06.960
+has declined significantly in popularity,
+
+06:06.960 --> 06:09.600
+while the other editors have taken over.
+
+06:09.600 --> 06:11.360
+But is the search volume really
+
+06:11.360 --> 06:12.800
+the only important factor
+
+06:12.800 --> 06:14.800
+that indicates popularity or health
+
+06:14.800 --> 06:16.080
+of a given editor?
+
+06:16.080 --> 00:06:18.318
+That still remains to be seen.
+
+06:18.319 --> 06:19.680
+We can also take a look
+
+06:19.680 --> 06:22.400
+at the yearly survey
+
+06:22.400 --> 06:24.602
+that the website Stack Overflow puts out
+
+06:24.602 --> 06:26.533
+asking developers about the tools
+
+06:26.533 --> 06:27.360
+that they use to find out
+
+06:27.360 --> 06:28.720
+which ones are being used
+
+06:28.720 --> 06:29.759
+most frequently and that are
+
+06:29.759 --> 06:31.919
+gaining popularity over time.
+
+06:31.919 --> 06:33.680
+So there is a great blog post
+
+06:33.680 --> 06:35.039
+by someone named Roben Kleene,
+
+06:35.039 --> 06:37.039
+who synthesizes some
+
+06:37.039 --> 06:37.840
+of this data together,
+
+06:37.840 --> 06:39.120
+specifically about editors,
+
+06:39.120 --> 06:40.240
+and provides us with a graph
+
+06:40.240 --> 06:41.680
+that we can take a look at
+
+06:41.680 --> 06:43.440
+that compares the popularity
+
+06:43.440 --> 06:44.639
+of particular editors
+
+06:44.639 --> 06:46.560
+in the last maybe four or five years,
+
+06:46.560 --> 06:49.199
+at least 2015 to 2019,
+
+06:49.199 --> 06:50.560
+based on the responses
+
+06:50.560 --> 06:52.560
+to the Stack Overflow survey.
+
+06:52.560 --> 06:54.479
+In this case we see that
+
+06:54.479 --> 06:56.560
+Emacs is the light blue line,
+
+06:56.560 --> 06:59.440
+and it sort of stays in maybe, let's see,
+
+06:59.440 --> 07:00.960
+maybe third place in the beginning,
+
+07:00.960 --> 07:02.000
+and then fifth place,
+
+07:02.000 --> 07:03.520
+and basically just stays in fifth place
+
+07:03.520 --> 07:05.039
+the whole time, compared to things like
+
+07:05.039 --> 07:07.120
+Atom, Sublime Text, and VS Code.
+
+07:07.120 --> 07:08.560
+As we saw before, the VS Code
+
+07:08.560 --> 07:10.960
+just sort of ramps up at the end.
+
+07:10.960 --> 07:13.199
+Now, this is another thing
+
+07:13.199 --> 07:14.560
+that basically is showing us
+
+07:14.560 --> 07:17.039
+similarly to the Google Trends
+
+07:17.039 --> 07:19.280
+that Emacs's popularity is not quite
+
+07:19.280 --> 07:21.840
+as much as other editors out there.
+
+07:21.840 --> 07:23.840
+You can also look at the 2021 results
+
+07:23.840 --> 07:26.160
+of the Stack Overflow survey,
+
+07:26.160 --> 07:27.199
+which I'll show you now,
+
+07:27.199 --> 07:30.319
+which shows Emacs in 16th place.
+
+07:30.319 --> 07:31.680
+Let's see. If we look here,
+
+07:31.680 --> 07:32.960
+we see Visual Studio Code
+
+07:32.960 --> 07:34.400
+is the most popular, then we have
+
+07:34.400 --> 07:36.800
+a whole bunch of other well-known editors.
+
+07:36.800 --> 07:37.840
+Some are kind of surprising,
+
+07:37.840 --> 07:40.400
+like Notepad++ is quite high up there,
+
+07:40.400 --> 07:42.080
+but then we have Emacs here
+
+07:42.080 --> 07:43.199
+coming right in behind
+
+07:43.199 --> 07:44.879
+PhpStorm and NetBeans,
+
+07:44.879 --> 07:46.400
+which is pretty funny to me.
+
+07:46.400 --> 07:48.879
+But it just goes to show you
+
+07:48.879 --> 07:54.000
+that the Emacs community is smaller
+
+07:54.000 --> 07:55.599
+than what you might consider
+
+07:55.599 --> 07:56.960
+for other editors, or at least
+
+07:56.960 --> 07:58.800
+the Emacs user base, maybe.
+
+07:58.800 --> 07:59.440
+Maybe it's just the people
+
+07:59.440 --> 08:00.800
+who actually respond to the survey.
+
+08:00.800 --> 08:02.080
+You can't really tell for sure
+
+08:02.080 --> 08:03.759
+because all this data is coming from
+
+08:03.759 --> 08:05.039
+a self-selected group of people
+
+08:05.039 --> 08:06.720
+who have responded to the survey.
+
+08:06.720 --> 08:08.879
+So I think what... Basically,
+
+08:08.879 --> 08:10.560
+what I'm trying to say is that
+
+08:10.560 --> 08:12.080
+if you look at all these things,
+
+08:12.080 --> 08:14.080
+you would probably get the perception
+
+08:14.080 --> 08:15.919
+that Emacs is dead
+
+08:15.919 --> 08:17.199
+and that maybe nobody really
+
+08:17.199 --> 08:18.240
+uses the editor anymore,
+
+08:18.240 --> 00:08:19.999
+or that it's on its way out.
+
+08:20.000 --> 08:21.599
+However, I think there's another way
+
+08:21.599 --> 08:24.879
+to look at the health or popularity
+
+08:24.879 --> 08:27.280
+of Emacs (or any other editor, really),
+
+08:27.280 --> 08:28.240
+and that is to judge
+
+08:28.240 --> 08:29.520
+the popularity and health
+
+08:29.520 --> 08:30.240
+by taking a look
+
+08:30.240 --> 08:32.080
+at the community activity
+
+08:32.080 --> 08:33.680
+in places such as Reddit,
+
+08:33.680 --> 08:35.760
+or maybe on Discord servers,
+
+08:35.760 --> 08:38.880
+Slack servers, IRC channels,
+
+08:38.880 --> 08:40.000
+mailing lists, particularly
+
+08:40.000 --> 08:41.120
+on emacs-devel,
+
+08:41.120 --> 08:42.640
+where all of the conversation
+
+08:42.640 --> 08:45.120
+about the development of Emacs happens.
+
+08:45.120 --> 08:46.640
+Blogs. There's quite a lot of people
+
+08:46.640 --> 08:47.519
+in the Emacs community
+
+08:47.519 --> 08:48.959
+writing blog posts.
+
+08:48.959 --> 08:50.640
+There's quite a few YouTube channels now
+
+08:50.640 --> 08:52.399
+making content about Emacs
+
+08:52.399 --> 08:53.839
+pretty frequently, and then
+
+08:53.839 --> 08:56.880
+conferences like this one, EmacsConf.
+
+08:56.880 --> 08:58.399
+If you've spent any time
+
+08:58.399 --> 08:59.600
+in any of these places recently,
+
+08:59.600 --> 09:00.640
+did you actually get the sense
+
+09:00.640 --> 09:03.440
+that Emacs community lacks activity?
+
+09:03.440 --> 09:04.800
+I personally don't.
+
+09:04.800 --> 09:06.560
+I see quite a lot of activity on Reddit,
+
+09:06.560 --> 09:07.360
+I see a lot of activity
+
+09:07.360 --> 09:08.320
+in various other places,
+
+09:08.320 --> 09:11.040
+even my own chats that I've created.
+
+09:11.040 --> 09:12.480
+Lots of people talking about Emacs
+
+09:12.480 --> 09:16.320
+every day. But this is harder to measure,
+
+09:16.320 --> 09:18.160
+because you would have to go count
+
+09:18.160 --> 09:21.279
+all of the mailing list emails
+
+09:21.279 --> 09:22.560
+compared to other editors,
+
+09:22.560 --> 09:23.760
+or maybe like the Reddit posts
+
+09:23.760 --> 09:24.959
+compared to other editors.
+
+09:24.959 --> 09:26.880
+We could do that, but really,
+
+09:26.880 --> 09:27.839
+the more important thing
+
+09:27.839 --> 09:29.920
+is to just go experience the community
+
+09:29.920 --> 09:31.279
+by going to one of these places
+
+09:31.279 --> 09:33.360
+and take a look at what's going on.
+
+09:33.360 --> 09:34.560
+You can get a really good sense of that
+
+09:34.560 --> 09:37.760
+by checking out Sacha Chua's Emacs News
+
+09:37.760 --> 09:39.120
+roll-up blog posts
+
+09:39.120 --> 09:40.399
+that come out every week.
+
+09:40.399 --> 09:42.000
+It's a very good distillation of things
+
+09:42.000 --> 09:42.560
+that are happening
+
+09:42.560 --> 09:43.920
+in the Emacs community.
+
+09:43.920 --> 09:48.080
+If you look at those things
+
+09:48.080 --> 09:49.040
+and look at all that,
+
+09:49.040 --> 09:50.640
+you can tell that there is actually
+
+09:50.640 --> 09:51.360
+something happening
+
+09:51.360 --> 09:52.240
+in the Emacs community
+
+09:52.240 --> 09:54.000
+that is more than what you see
+
+09:54.000 --> 09:55.680
+in the numbers on Google Trends
+
+09:55.680 --> 09:58.080
+and on Stack Overflow.
+
+09:58.080 --> 09:59.200
+Another interesting point
+
+09:59.200 --> 10:00.480
+that doesn't really fit into all this,
+
+10:00.480 --> 10:01.440
+but if you want to look
+
+10:01.440 --> 10:02.640
+at the actual data
+
+10:02.640 --> 10:03.920
+from the Emacs community
+
+10:03.920 --> 10:06.160
+about how the community uses Emacs,
+
+10:06.160 --> 10:06.880
+check out the results
+
+10:06.880 --> 10:08.480
+of the 2020 Emacs survey.
+
+10:08.480 --> 10:09.040
+I'm sure there's going to be
+
+10:09.040 --> 10:11.760
+another Emacs survey at some point soon,
+
+10:11.760 --> 10:13.120
+as well, but that will give you
+
+10:13.120 --> 10:14.480
+some insight into what's happening
+
+10:14.480 --> 10:16.000
+within the community itself.
+
+10:16.000 --> 10:16.399
+You can see that
+
+10:16.399 --> 10:17.600
+there's quite a lot of activity
+
+10:17.600 --> 10:19.839
+and a lot of different use cases for Emacs
+
+10:19.839 --> 00:10:23.199
+and types of people who are using Emacs.
+
+10:23.200 --> 10:24.000
+Let's talk about
+
+10:24.000 --> 10:26.079
+how editors lose popularity.
+
+10:26.079 --> 10:26.880
+So people are worried
+
+10:26.880 --> 10:29.360
+that Emacs is going to lose popularity.
+
+10:29.360 --> 10:31.440
+What do they worry is going to happen
+
+10:31.440 --> 10:34.000
+if that happens?
+
+10:37.040 --> 00:10:38.319
+Or how actually could it happen?
+
+10:38.320 --> 10:39.680
+So maybe a new editor
+
+10:39.680 --> 10:41.839
+with better features appears.
+
+10:41.839 --> 10:43.440
+So one theory for why users
+
+10:43.440 --> 10:45.920
+left TextMate for Sublime Text...
+
+10:45.920 --> 10:46.880
+If you don't know about TextMate,
+
+10:46.880 --> 10:49.600
+it was a very popular editor on macOS
+
+10:49.600 --> 10:52.160
+back probably in the Ruby on Rails craze
+
+10:52.160 --> 10:54.079
+time frame, maybe like the mid-2000s,
+
+10:54.079 --> 10:57.200
+2005 or so. Then eventually Sublime Text
+
+10:57.200 --> 10:59.519
+came along, and it had
+
+10:59.519 --> 11:01.360
+a better extensibility API
+
+11:01.360 --> 11:03.200
+and really good performance.
+
+11:03.200 --> 11:05.200
+It also was able to use
+
+11:05.200 --> 11:07.040
+some of the same stuff from TextMate,
+
+11:07.040 --> 11:08.720
+like these syntax highlighting grammars
+
+11:08.720 --> 11:11.040
+and the snippet definitions, etc.
+
+11:11.040 --> 11:12.240
+So you had TextMate
+
+11:12.240 --> 11:13.519
+which was a well-loved editor,
+
+11:13.519 --> 11:15.200
+but then a new editor called Sublime Text
+
+11:15.200 --> 11:17.200
+came along with better functionality,
+
+11:17.200 --> 11:18.880
+and people started switching over to it
+
+11:18.880 --> 11:20.160
+because it could do more things
+
+11:20.160 --> 11:21.680
+and the user had more ability
+
+11:21.680 --> 11:24.399
+to add functionality to it.
+
+11:24.399 --> 11:26.880
+Also, VS Code came along
+
+11:26.880 --> 11:27.920
+and used a similar model
+
+11:27.920 --> 11:29.120
+to the Atom editor,
+
+11:29.120 --> 11:31.360
+basically being a web-based editor
+
+11:31.360 --> 11:32.480
+using Electron,
+
+11:32.480 --> 11:34.640
+but it greatly improved upon performance
+
+11:34.640 --> 11:36.640
+and IDE tooling ecosystem.
+
+11:36.640 --> 11:38.640
+For people getting real work done
+
+11:38.640 --> 11:39.519
+with large projects,
+
+11:39.519 --> 11:41.120
+you need to have things like IntelliSense,
+
+11:41.120 --> 11:42.800
+and being able to find definitions
+
+11:42.800 --> 11:45.839
+of functions or classes that are defined.
+
+11:45.839 --> 11:47.040
+So you have a new editor
+
+11:47.040 --> 11:47.519
+that comes along
+
+11:47.519 --> 11:49.440
+that has basically better functionality
+
+11:49.440 --> 11:51.279
+than the one that was there before.
+
+11:51.279 --> 11:52.399
+But the thing is,
+
+11:52.399 --> 11:53.760
+if you have a new editor that comes along
+
+11:53.760 --> 11:54.720
+with better functionality,
+
+11:54.720 --> 11:57.120
+it still has to be at least as good as
+
+11:57.120 --> 11:58.800
+or better than the previous editor
+
+11:58.800 --> 12:00.000
+for people to stick with it.
+
+12:00.000 --> 12:02.480
+So it's a very tall order
+
+12:02.480 --> 12:03.680
+for someone to say
+
+12:03.680 --> 12:05.200
+there's going to be some editor
+
+12:05.200 --> 12:05.839
+that will come along
+
+12:05.839 --> 12:07.040
+that would be better than Emacs
+
+12:07.040 --> 12:08.240
+on every dimension,
+
+12:08.240 --> 12:09.680
+because there are some unique dimensions
+
+12:09.680 --> 12:11.360
+that are hard to beat
+
+12:11.360 --> 12:14.160
+in an editor like Emacs.
+
+12:14.160 --> 12:15.920
+Lack of sufficient maintenance.
+
+12:15.920 --> 12:16.560
+That's one thing
+
+12:16.560 --> 12:17.600
+that could possibly happen
+
+12:17.600 --> 12:19.279
+if an editor loses popularity.
+
+12:19.279 --> 12:20.687
+So maybe sometimes...
+
+12:20.687 --> 12:22.480
+Sorry, that's something
+
+12:22.480 --> 12:23.440
+that can cause a lack,
+
+12:23.440 --> 00:12:25.679
+a loss of popularity.
+
+12:25.680 --> 12:26.959
+Sometimes the development team
+
+12:26.959 --> 12:28.320
+for an editor either moves on
+
+12:28.320 --> 12:29.279
+or maybe switches focus
+
+12:29.279 --> 12:30.720
+to a different project.
+
+12:30.720 --> 12:32.079
+When this happens, the development
+
+12:32.079 --> 12:33.360
+of the editor can stagnate,
+
+12:33.360 --> 12:36.240
+giving the impression that it's dead.
+
+12:37.279 --> 12:38.160
+You can see this happening
+
+12:38.160 --> 12:40.720
+a lot of times on repositories
+
+12:40.720 --> 12:41.920
+for open source projects,
+
+12:41.920 --> 12:43.440
+where if someone doesn't make any commits
+
+12:43.440 --> 12:44.639
+or adding new features for a while,
+
+12:44.639 --> 12:45.839
+people just automatically assume
+
+12:45.839 --> 12:46.880
+that the thing is dead,
+
+12:46.880 --> 12:48.399
+even if it's in a very stable state
+
+12:48.399 --> 12:49.920
+and doesn't really need any improvements
+
+12:49.920 --> 12:53.680
+to be made. This is something
+
+12:53.680 --> 12:55.360
+that can happen over time.
+
+12:55.360 --> 12:56.720
+The developers of Sublime Text
+
+12:56.720 --> 12:57.920
+sometimes give the impression
+
+12:57.920 --> 12:59.519
+that the editor isn't being maintained
+
+12:59.519 --> 13:02.000
+because of long breaks between updates,
+
+13:02.000 --> 13:03.360
+and this gives people...
+
+13:03.360 --> 13:04.560
+If you go search for
+
+13:04.560 --> 13:05.440
+"Is Sublime Text dead?",
+
+13:05.440 --> 13:06.800
+you'll see posts about this
+
+13:07.519 --> 13:08.240
+every couple years,
+
+13:08.240 --> 13:09.120
+where people are wondering
+
+13:09.120 --> 13:10.320
+what's happening with Sublime Text,
+
+13:10.320 --> 13:12.320
+when in reality, there's actually
+
+13:12.320 --> 13:15.120
+development happening on this project,
+
+13:15.120 --> 13:18.160
+and paid users are getting these updates
+
+13:18.160 --> 13:19.279
+because they've paid,
+
+13:19.279 --> 13:20.639
+but the product is not open source.
+
+13:20.639 --> 13:21.600
+You have no visibility
+
+13:21.600 --> 13:22.399
+into the development.
+
+13:22.399 --> 13:24.639
+So if people have the perception
+
+13:24.639 --> 13:26.160
+that the editor is not being maintained,
+
+13:26.160 --> 13:26.880
+then there's going to be
+
+13:26.880 --> 13:28.079
+rumors getting started,
+
+13:28.079 --> 13:29.200
+and that could cause
+
+13:29.200 --> 13:30.959
+the mentality of people to shift
+
+13:30.959 --> 13:32.639
+and try to move on to other editors
+
+13:32.639 --> 13:34.240
+because they perceive them to be
+
+13:34.240 --> 13:36.399
+more well-maintained or more active.
+
+13:36.399 --> 13:37.920
+Another problem can be that there are
+
+13:37.920 --> 13:39.839
+major bugs that persist over a long time
+
+13:39.839 --> 13:41.040
+that aren't being fixed
+
+13:41.040 --> 13:42.560
+while the maintainers are focusing on
+
+13:42.560 --> 13:44.639
+some other efforts in the project,
+
+13:44.639 --> 13:46.000
+and this could hurt sentiment
+
+13:46.000 --> 13:48.160
+in the community and cause a backlash
+
+13:48.160 --> 13:49.120
+leading to an exodus.
+
+13:49.120 --> 13:51.120
+So if you have really bad bugs
+
+13:51.120 --> 13:51.600
+and people think
+
+13:51.600 --> 13:52.560
+that you're not really concerned
+
+13:52.560 --> 13:53.519
+about fixing them,
+
+13:53.519 --> 13:54.399
+then that could be something
+
+13:54.399 --> 13:55.360
+that would cause an editor
+
+13:55.360 --> 13:56.399
+to lose popularity
+
+13:56.399 --> 13:58.000
+as people move on to find something else
+
+13:58.000 --> 00:14:01.039
+that appears to be more stable.
+
+14:01.040 --> 14:03.199
+Lastly, sometimes all it takes is
+
+14:03.199 --> 14:04.480
+for a new programming language
+
+14:04.480 --> 14:05.279
+to become popular
+
+14:05.279 --> 14:06.880
+or for an influential person to say
+
+14:06.880 --> 14:08.720
+that they switched to a different editor,
+
+14:08.720 --> 14:14.560
+because people are capable of being led
+
+14:14.560 --> 14:16.720
+by someone else who is influential,
+
+14:16.720 --> 14:18.320
+so sometimes it's just...
+
+14:18.320 --> 14:20.240
+All it takes is someone to say, you know,
+
+14:20.240 --> 14:22.240
+I'm not going to use this editor any more,
+
+14:22.240 --> 14:24.000
+and other people will follow.
+
+14:24.000 --> 14:26.240
+But oftentimes, it's not just about
+
+14:26.240 --> 14:27.199
+the fashion changing,
+
+14:27.199 --> 14:28.560
+it's also there's other problems
+
+14:28.560 --> 14:29.040
+that are happening.
+
+14:29.040 --> 14:29.680
+Some of these other things
+
+14:29.680 --> 14:30.959
+that I mentioned before
+
+14:30.959 --> 14:32.160
+that could be contributing
+
+14:32.160 --> 14:33.839
+to this overall sentiment
+
+14:33.839 --> 00:14:36.958
+that caused people to move on.
+
+14:36.959 --> 14:38.000
+So then what happens
+
+14:38.000 --> 14:40.000
+when an editor loses popularity?
+
+14:40.000 --> 14:40.800
+If people are worried
+
+14:40.800 --> 14:43.120
+that Emacs is going to lose popularity,
+
+14:43.120 --> 14:44.880
+what happens if it doesn't gain more?
+
+14:44.880 --> 14:47.839
+So what are the possible consequences?
+
+14:47.839 --> 14:49.120
+Well, maybe core maintainers
+
+14:49.120 --> 14:50.399
+will gradually leave the project
+
+14:50.399 --> 14:52.160
+with nobody to replace them. I mean,
+
+14:52.160 --> 14:53.839
+if you have a project like Emacs
+
+14:53.839 --> 14:57.199
+where there's a core
+
+14:57.199 --> 14:58.240
+that's written in a language
+
+14:58.240 --> 14:59.600
+that's different than the language
+
+14:59.600 --> 15:01.040
+everybody uses to extend it,
+
+15:01.040 --> 15:02.240
+then maybe it's risky
+
+15:02.240 --> 15:03.440
+to have people leave the project
+
+15:03.440 --> 15:04.800
+because you don't have other people
+
+15:04.800 --> 15:06.560
+to come along who can help maintain it
+
+15:06.560 --> 15:10.240
+and to carry on the knowledge of the core.
+
+15:10.240 --> 15:11.519
+Also, maybe no new features
+
+15:11.519 --> 15:13.279
+are being added to stay competitive
+
+15:13.279 --> 15:14.800
+with other editors.
+
+15:14.800 --> 15:15.920
+So this is one of these things
+
+15:15.920 --> 15:17.120
+where people kind of feel like
+
+15:17.120 --> 15:18.800
+there's a feature mill, where you know
+
+15:18.800 --> 15:20.880
+if new features are coming online
+
+15:20.880 --> 15:21.680
+in other editors,
+
+15:21.680 --> 15:23.279
+maybe your editor needs to catch up.
+
+15:23.279 --> 15:24.160
+Well, I don't really think that
+
+15:24.160 --> 15:25.279
+that's necessarily needed,
+
+15:25.279 --> 15:28.160
+but if there are new paradigms
+
+15:28.160 --> 15:29.839
+or usage patterns or workflows
+
+15:29.839 --> 15:32.320
+that are becoming...
+
+15:32.320 --> 15:33.759
+I guess you could say mainstream,
+
+15:33.759 --> 15:34.800
+sometimes it does make sense
+
+15:34.800 --> 15:37.199
+for an editor to be able to adopt these,
+
+15:37.199 --> 15:37.759
+but if you have
+
+15:37.759 --> 15:39.519
+a sufficiently extendable editor,
+
+15:39.519 --> 15:41.440
+then oftentimes, you don't really need to
+
+15:41.440 --> 15:42.079
+do anything other than
+
+15:42.079 --> 15:44.480
+just write a new package.
+
+15:44.480 --> 15:46.160
+Critical bugs that never get fixed...
+
+15:46.160 --> 15:48.240
+I mean, if people start to drift off
+
+15:48.240 --> 15:49.839
+from the project, it is much more likely
+
+15:49.839 --> 15:52.720
+that bad bugs won't get fixed over time.
+
+15:52.720 --> 15:54.079
+Less community interest in creating
+
+15:54.079 --> 15:55.199
+and maintaining packages.
+
+15:55.199 --> 15:56.320
+There's another possibility
+
+15:56.320 --> 15:57.519
+if people don't feel like
+
+15:57.519 --> 15:58.880
+it's worth their time anymore
+
+15:58.880 --> 16:00.079
+because not many people
+
+16:00.079 --> 16:00.880
+are using an editor,
+
+16:00.880 --> 16:02.480
+maybe they'll have more users
+
+16:02.480 --> 16:03.279
+or more interaction
+
+16:03.279 --> 16:04.959
+if they go write a similar package
+
+16:04.959 --> 16:07.440
+for a different editor.
+
+16:07.440 --> 16:10.079
+Less blog posts, videos, content.
+
+16:10.079 --> 16:11.519
+Basically, like, if people feel
+
+16:11.519 --> 16:12.480
+that it's not worth their time
+
+16:12.480 --> 16:13.839
+to make content about the editor either,
+
+16:13.839 --> 16:15.360
+or if you're just not interested any more,
+
+16:15.360 --> 16:17.040
+then those things will dry up.
+
+16:17.040 --> 16:18.639
+And also one thing that is possible,
+
+16:18.639 --> 16:19.839
+but probably not very likely,
+
+16:19.839 --> 16:21.839
+is that the program may not be
+
+16:21.839 --> 16:24.000
+packaged any more in Linux distributions
+
+16:24.000 --> 16:25.680
+or for other operating systems.
+
+16:25.680 --> 16:27.519
+So if it's not worth someone to package it,
+
+16:27.519 --> 16:29.040
+or they just sort of lose interest
+
+16:29.040 --> 16:31.360
+in the editor, then maybe those things
+
+16:31.360 --> 16:32.320
+sort of drift away
+
+16:32.320 --> 16:33.920
+and you can't even install it any more
+
+16:33.920 --> 16:35.360
+in many places.
+
+16:35.360 --> 16:36.399
+But I feel that these things
+
+16:36.399 --> 16:37.279
+would only really happen
+
+16:37.279 --> 16:39.279
+if there was already other major issues
+
+16:39.279 --> 16:41.920
+in the dev team or in the community,
+
+16:41.920 --> 16:44.320
+like maybe a high profile schism
+
+16:44.320 --> 16:45.199
+in the maintainer team,
+
+16:45.199 --> 16:47.519
+sort of like what we saw with GNU Emacs
+
+16:47.519 --> 16:49.759
+versus XEmacs, because you have
+
+16:49.759 --> 16:50.959
+two competing versions
+
+16:50.959 --> 16:52.160
+of the same idea
+
+16:52.160 --> 16:53.600
+with different implementations,
+
+16:53.600 --> 16:54.800
+and then over time,
+
+16:54.800 --> 16:55.920
+one of them may fade out
+
+16:55.920 --> 16:57.839
+because people just lose interest
+
+16:57.839 --> 17:00.800
+and maybe something like GNU Emacs
+
+17:00.800 --> 17:02.399
+gradually catches up and surpasses it
+
+17:02.399 --> 17:04.720
+in functionality. So these things
+
+17:04.720 --> 17:07.520
+can happen, but it's not really
+
+17:07.520 --> 00:17:10.239
+as likely as people would think, I think.
+
+17:10.240 --> 17:12.959
+So how is Emacs going to survive
+
+17:12.959 --> 17:15.280
+despite popularity? I feel that
+
+17:15.280 --> 17:16.640
+there are a few important
+
+17:16.640 --> 17:17.679
+and unique factors
+
+17:17.679 --> 00:17:20.159
+that are going to contribute to this.
+
+17:20.160 --> 17:21.520
+First of all, Emacs is
+
+17:21.520 --> 17:22.720
+more deeply hackable
+
+17:22.720 --> 17:24.959
+than almost all other editors.
+
+17:24.959 --> 17:26.000
+I'm couching that a bit,
+
+17:26.000 --> 17:26.880
+but really it is
+
+17:26.880 --> 17:28.000
+basically more extensible
+
+17:28.000 --> 17:28.960
+than any other editor.
+
+17:28.960 --> 17:29.679
+I haven't seen one
+
+17:29.679 --> 17:31.440
+that's more extensible than Emacs so far,
+
+17:31.440 --> 17:32.000
+and that's because
+
+17:32.000 --> 17:34.160
+Emacs was designed for this.
+
+17:34.160 --> 17:35.360
+The whole point of Emacs
+
+17:35.360 --> 17:36.960
+is that you should be able to go in
+
+17:36.960 --> 17:38.320
+and customize your workflow,
+
+17:38.320 --> 17:39.600
+and customize the editor to do
+
+17:39.600 --> 17:41.039
+exactly what you want it to do.
+
+17:41.039 --> 17:44.080
+It's this whole idea of user freedom.
+
+17:44.080 --> 17:46.320
+You're not letting the editor designer
+
+17:46.320 --> 17:47.120
+tell you what to do,
+
+17:47.120 --> 17:48.880
+you're telling the editor what to do
+
+17:48.880 --> 17:50.559
+at every step of the way.
+
+17:50.559 --> 17:53.440
+Also, an Emacs user can grow their skills
+
+17:53.440 --> 17:55.039
+from small configuration tweaks,
+
+17:55.039 --> 17:56.240
+just basically setting variables
+
+17:56.240 --> 17:57.280
+and whatnot, to writing
+
+17:57.280 --> 17:58.960
+their own packages over time,
+
+17:58.960 --> 17:59.600
+and then eventually
+
+17:59.600 --> 18:01.280
+to contributing to Emacs itself--
+
+18:01.280 --> 18:02.320
+the same skill set,
+
+18:02.320 --> 18:03.360
+because the majority
+
+18:03.360 --> 18:04.640
+of the functionality of the editor
+
+18:04.640 --> 18:06.160
+is written with the same language
+
+18:06.160 --> 18:07.600
+that you use to configure it.
+
+18:07.600 --> 18:09.280
+So unlike other editors,
+
+18:09.280 --> 18:10.960
+where you have...
+
+18:10.960 --> 18:12.960
+the way that you write extensions
+
+18:12.960 --> 18:13.440
+for the editor,
+
+18:13.440 --> 18:14.960
+that has a specific API,
+
+18:14.960 --> 18:16.400
+but if you go contribute to the core,
+
+18:16.400 --> 18:18.160
+the code base is completely different.
+
+18:18.160 --> 18:19.280
+It's different with Emacs
+
+18:19.280 --> 18:22.640
+because you have basically the same APIs,
+
+18:22.640 --> 18:24.320
+the same code and same everything
+
+18:24.320 --> 18:26.080
+that you use to write a package
+
+18:26.080 --> 18:28.160
+versus writing actual code
+
+18:28.160 --> 18:29.600
+for functionality for the editor.
+
+18:29.600 --> 18:30.960
+Now obviously, there's the C layer
+
+18:30.960 --> 18:32.000
+that is different,
+
+18:32.000 --> 18:34.000
+but I think a lot of the actual packages
+
+18:34.000 --> 18:35.280
+and functionality in Emacs
+
+18:35.280 --> 18:36.640
+are at the Emacs Lisp layer.
+
+18:36.640 --> 18:38.797
+So what this means is that
+
+18:38.797 --> 18:41.120
+Emacs configuration hackers
+
+18:41.120 --> 18:42.000
+and package authors
+
+18:42.000 --> 18:43.200
+are prime candidates
+
+18:43.200 --> 18:44.880
+for eventually becoming contributors
+
+18:44.880 --> 18:46.960
+to Emacs itself. You see this play out
+
+18:46.960 --> 18:48.559
+a lot of times in Emacs community,
+
+18:48.559 --> 18:49.760
+where someone writes
+
+18:49.760 --> 18:51.039
+some really good packages,
+
+18:51.039 --> 18:52.240
+and either parts of those
+
+18:52.240 --> 18:53.440
+get merged into Emacs
+
+18:53.440 --> 18:55.520
+or that person maybe makes contributions
+
+18:55.520 --> 18:57.280
+to Emacs to add new functionality
+
+18:57.280 --> 18:59.360
+that their own packages can use,
+
+18:59.360 --> 19:01.679
+or just to improve Emacs as a whole.
+
+19:01.679 --> 19:03.679
+So there's much more chance
+
+19:03.679 --> 19:04.880
+that people who are involved
+
+19:04.880 --> 19:06.160
+in the community of Emacs
+
+19:06.160 --> 19:07.440
+can actually become contributors
+
+19:07.440 --> 19:08.480
+to the project itself.
+
+19:08.480 --> 19:09.200
+I think that's going to be
+
+19:09.200 --> 19:11.600
+very important for its health.
+
+19:11.600 --> 19:13.200
+Also, you don't need to add functionality
+
+19:13.200 --> 19:14.080
+to Emacs core
+
+19:14.080 --> 19:16.160
+to make the editor itself better.
+
+19:16.160 --> 19:17.120
+Package authors are on
+
+19:17.120 --> 19:18.480
+an equal playing field
+
+19:18.480 --> 19:19.679
+as the built-in functionality,
+
+19:19.679 --> 19:21.008
+for the same reason what I said before.
+
+19:21.008 --> 19:22.640
+Everything's written with Emacs Lisp,
+
+19:22.640 --> 19:24.160
+or I guess a lot of the functionality
+
+19:24.160 --> 19:26.000
+is written with Emacs Lisp.
+
+19:26.000 --> 19:28.720
+Since there's a lot of ways to hook into
+
+19:28.720 --> 19:30.720
+or replace functionality in Emacs,
+
+19:30.720 --> 19:33.280
+you can do a lot of deep customizations
+
+19:33.280 --> 19:35.360
+to Emacs itself to make it better
+
+19:35.360 --> 19:37.600
+in ways that aren't really...
+
+19:37.600 --> 19:39.760
+The core developers don't need to
+
+19:39.760 --> 19:40.960
+add new things for you to do that.
+
+19:40.960 --> 19:42.320
+You can just do it if you want to.
+
+19:42.320 --> 19:44.640
+So that gives Emacs more of
+
+19:44.640 --> 19:45.840
+a platform feel
+
+19:45.840 --> 19:47.440
+rather than just being an editor
+
+19:47.440 --> 00:19:51.439
+that can't really be changed very much.
+
+19:51.440 --> 19:53.440
+Also, Emacs has a strong community
+
+19:53.440 --> 19:56.080
+of highly-skilled packaged authors
+
+19:56.080 --> 19:58.000
+and the high-quality packages
+
+19:58.000 --> 19:59.919
+that they create make it far better
+
+19:59.919 --> 20:01.679
+and more uniquely valuable
+
+20:01.679 --> 20:02.960
+than many other editors.
+
+20:02.960 --> 20:04.960
+Specifically, things like Org mode,
+
+20:04.960 --> 20:06.240
+Magit, Org-roam,
+
+20:06.240 --> 20:07.039
+and a lot of other things
+
+20:07.039 --> 20:08.000
+that we've talked about
+
+20:08.000 --> 20:10.000
+on the System Crafters channel over time,
+
+20:10.000 --> 20:11.136
+and the hundreds of other
+
+20:11.136 --> 20:12.480
+workflow-improving packages
+
+20:12.480 --> 20:14.720
+that have been created over the years.
+
+20:14.720 --> 20:18.559
+So all these things really make Emacs
+
+20:18.559 --> 20:20.159
+a unique offering
+
+20:20.159 --> 20:21.679
+in the space of text editors,
+
+20:21.679 --> 20:22.640
+or development tools,
+
+20:22.640 --> 20:24.240
+or even just general
+
+20:24.240 --> 20:25.440
+information management tools,
+
+20:25.440 --> 20:27.120
+or desktop environments,
+
+20:27.120 --> 20:28.960
+if you want to call it that.
+
+20:28.960 --> 20:31.280
+So the people who are involved
+
+20:31.280 --> 20:32.159
+in making these things
+
+20:32.159 --> 20:33.600
+make Emacs far better than it could be
+
+20:33.600 --> 20:35.039
+just by itself,
+
+20:35.039 --> 20:37.360
+and this thriving ecosystem helps Emacs
+
+20:37.360 --> 20:39.120
+to continually feel fresh,
+
+20:39.120 --> 20:40.320
+regardless of what's happening
+
+20:40.320 --> 20:41.600
+in core Emacs development,
+
+20:41.600 --> 20:43.840
+because packages can do so much
+
+20:43.840 --> 20:45.280
+and because people can come along
+
+20:45.280 --> 20:46.640
+and propose sort of
+
+20:46.640 --> 20:47.760
+a new way of doing things
+
+20:47.760 --> 20:49.360
+and other people can start using it.
+
+20:49.360 --> 20:51.120
+Emacs itself doesn't have to be
+
+20:51.120 --> 20:52.400
+beholden to just what
+
+20:52.400 --> 20:53.840
+the core developers do.
+
+20:53.840 --> 20:55.280
+The community can also play
+
+20:55.280 --> 20:57.760
+a major role in making Emacs feel fresh
+
+20:57.760 --> 20:59.919
+and be modernized over time.
+
+20:59.919 --> 21:01.360
+Just take a look at what Doom Emacs
+
+21:01.360 --> 21:03.919
+is doing to give Emacs a better face,
+
+21:03.919 --> 21:04.960
+and Spacemacs as well.
+
+21:04.960 --> 21:06.240
+Those things are very good
+
+21:06.240 --> 21:08.000
+for making Emacs more palatable
+
+21:08.000 --> 21:09.440
+to the general public,
+
+21:09.440 --> 21:11.120
+because you have a much better experience
+
+21:11.120 --> 21:12.240
+out of the box, and a lot of things
+
+21:12.240 --> 21:12.880
+have been polished
+
+21:12.880 --> 00:21:15.279
+for the user experience.
+
+21:15.280 --> 21:17.200
+Emacs also has a very strong
+
+21:17.200 --> 21:18.799
+user community. Lots of activity
+
+21:18.799 --> 21:20.000
+and discussion about emacs
+
+21:20.000 --> 21:21.440
+is taking place all the time
+
+21:21.440 --> 21:22.559
+in various places,
+
+21:22.559 --> 21:23.919
+like we talked about before.
+
+21:23.919 --> 21:26.559
+Mailing lists, IRC, Reddit, etc.
+
+21:26.559 --> 21:28.159
+If you get into Emacs
+
+21:28.159 --> 21:28.880
+and you go take part
+
+21:28.880 --> 21:29.840
+in the Emacs community,
+
+21:29.840 --> 21:30.640
+there's always going to be
+
+21:30.640 --> 21:32.000
+somebody around who's going to want to
+
+21:32.000 --> 21:33.520
+talk about Emacs with you
+
+21:33.520 --> 21:34.960
+and answer your questions.
+
+21:34.960 --> 21:37.120
+So it's a very good thing
+
+21:37.120 --> 21:39.039
+for the health of the project
+
+21:39.039 --> 21:40.320
+because there's a lot of people there
+
+21:40.320 --> 21:42.640
+that are very invested in it every day
+
+21:42.640 --> 21:45.120
+and want to see it succeed.
+
+21:45.120 --> 21:47.039
+Also, there's many community members
+
+21:47.039 --> 21:47.840
+writing articles
+
+21:47.840 --> 21:49.440
+and making videos about Emacs,
+
+21:49.440 --> 21:51.280
+many of which are actually moving forward
+
+21:51.280 --> 21:52.240
+the state of the art
+
+21:52.240 --> 21:53.679
+about how we use the editor,
+
+21:53.679 --> 21:55.360
+and how we use it... I mean,
+
+21:55.360 --> 21:56.480
+how many times have you seen
+
+21:56.480 --> 21:57.520
+a really great blog post
+
+21:57.520 --> 21:59.120
+that completely blew your mind
+
+21:59.120 --> 22:00.880
+and showed you a new way
+
+22:00.880 --> 22:02.720
+to use Emacs, or a new way to think about
+
+22:02.720 --> 22:05.120
+how you use Emacs. I see stuff like that
+
+22:05.120 --> 22:08.480
+all the time, like posts by Protesilaos,
+
+22:08.480 --> 22:10.640
+or by Karthik, or by many other people
+
+22:10.640 --> 22:12.080
+who show you a new way
+
+22:12.080 --> 22:13.360
+to look at things, and then you're, like,
+
+22:13.360 --> 22:14.720
+Wow. This... I could do things
+
+22:14.720 --> 22:15.200
+completely different
+
+22:15.200 --> 22:16.559
+than I was doing before.
+
+22:16.559 --> 22:17.200
+This kind of stuff
+
+22:17.200 --> 22:18.240
+is extremely important
+
+22:18.240 --> 22:20.080
+for the health of the editor
+
+22:20.080 --> 22:22.799
+going forward, because people are able to
+
+22:22.799 --> 22:24.799
+inspire others to use the editor.
+
+22:24.799 --> 22:26.559
+It's a great thing for evangelism as well.
+
+22:26.559 --> 22:28.080
+Like, if someone happens to
+
+22:28.080 --> 22:30.080
+stumble across a video or a blog post,
+
+22:30.080 --> 00:22:33.439
+they may be really inspired to use Emacs.
+
+22:33.440 --> 22:35.280
+And lastly, the Emacs maintainers
+
+22:35.280 --> 22:36.720
+and contributors really care
+
+22:36.720 --> 22:38.000
+about the users.
+
+22:38.000 --> 22:39.280
+There are many core maintainers
+
+22:39.280 --> 22:40.080
+who have been with the project
+
+22:40.080 --> 22:43.360
+for 10+ years, some way longer than that.
+
+22:43.360 --> 22:45.200
+So it shows you that
+
+22:45.200 --> 22:46.559
+the people who work on this project
+
+22:46.559 --> 22:47.600
+really care a lot,
+
+22:47.600 --> 22:48.640
+and they're very invested
+
+22:48.640 --> 22:51.120
+in making sure that it remains healthy
+
+22:51.120 --> 22:53.360
+for the long term.
+
+22:53.360 --> 22:55.440
+They also really care about ensuring
+
+22:55.440 --> 22:56.720
+that Emacs continues to work well
+
+22:56.720 --> 22:58.159
+for long-time users,
+
+22:58.159 --> 23:00.080
+(and some people have been using it
+
+23:00.080 --> 23:01.280
+for 30 to 40 years,
+
+23:01.280 --> 23:02.400
+which is kind of insane,
+
+23:02.400 --> 23:03.760
+if you think about it),
+
+23:03.760 --> 23:05.679
+all while gradually and sensibly
+
+23:05.679 --> 23:07.120
+enabling new scenarios
+
+23:07.120 --> 23:08.080
+and core improvements
+
+23:08.080 --> 23:09.280
+that benefit all of us,
+
+23:09.280 --> 23:11.520
+even the new and the old users.
+
+23:11.520 --> 23:12.880
+Keeping a piece of software
+
+23:12.880 --> 23:13.600
+running and relevant
+
+23:13.600 --> 23:14.400
+for this many years
+
+23:14.400 --> 23:15.440
+is a huge effort,
+
+23:15.440 --> 23:16.799
+so I'm very thankful
+
+23:16.799 --> 23:18.480
+to the maintainers of Emacs,
+
+23:18.480 --> 23:20.159
+and I hope all of you are as well,
+
+23:20.159 --> 23:22.799
+because this is kind of an anomaly
+
+23:22.799 --> 23:23.600
+in the software field
+
+23:23.600 --> 23:24.960
+to have a piece of software
+
+23:24.960 --> 23:26.640
+that has existed for so long,
+
+23:26.640 --> 23:30.000
+who has managed to survive
+
+23:30.000 --> 23:31.840
+despite various different types
+
+23:31.840 --> 23:33.280
+of platform transitions,
+
+23:33.280 --> 23:35.280
+operating transitions over the years
+
+23:35.280 --> 23:37.360
+and still thrive and be a very useful
+
+23:37.360 --> 23:38.559
+and very key piece of software
+
+23:38.559 --> 00:23:40.959
+for a lot of people.
+
+23:40.960 --> 23:42.320
+So aren't all these things
+
+23:42.320 --> 23:43.039
+that we just talked about
+
+23:43.039 --> 23:43.840
+supposed to come
+
+23:43.840 --> 23:45.279
+when an editor is popular?
+
+23:45.279 --> 23:46.080
+We've been talking about
+
+23:46.080 --> 23:47.039
+what is popularity,
+
+23:47.039 --> 23:48.720
+what benefits come with popularity.
+
+23:48.720 --> 23:50.320
+So all the things I just mentioned,
+
+23:50.320 --> 23:51.120
+shouldn't that be something
+
+23:51.120 --> 23:52.720
+that would only be for editors
+
+23:52.720 --> 23:54.640
+that are super popular? Well, I guess
+
+23:54.640 --> 23:56.720
+the answer is maybe Emacs is actually
+
+23:56.720 --> 23:57.840
+popular enough.
+
+23:57.840 --> 23:58.799
+That doesn't necessarily mean
+
+23:58.799 --> 24:00.640
+that we should not try to
+
+24:00.640 --> 24:03.600
+help other people find Emacs,
+
+24:03.600 --> 24:04.960
+but I think that we should not
+
+24:04.960 --> 24:05.760
+worry so much about
+
+24:05.760 --> 24:06.880
+the popularity of Emacs,
+
+24:06.880 --> 24:08.480
+because what we have is great,
+
+24:08.480 --> 24:11.120
+and we should just focus our time
+
+24:11.120 --> 24:13.919
+on continuing to improve the health
+
+24:13.919 --> 24:15.520
+of the community that we have
+
+24:15.520 --> 24:17.360
+and the health of the editor itself,
+
+24:17.360 --> 24:19.440
+and not worry too much about chasing
+
+24:19.440 --> 24:20.880
+whatever is happening out in the world
+
+24:20.880 --> 00:24:22.879
+at any given point.
+
+24:22.880 --> 24:26.159
+To conclude, the next time someone says
+
+24:26.159 --> 24:27.760
+we should do this thing
+
+24:27.760 --> 24:28.559
+or this other thing
+
+24:28.559 --> 24:30.400
+to make Emacs more popular,
+
+24:30.400 --> 24:32.240
+ask them these questions.
+
+24:32.240 --> 24:35.200
+1. What does popularity mean to you?
+
+24:35.200 --> 24:37.279
+2. How do you measure it?
+
+24:37.279 --> 24:39.440
+3. What do you think Emacs is going to
+
+24:39.440 --> 24:41.600
+gain from increased popularity?
+
+24:41.600 --> 24:43.279
+So I hope that you found this talk
+
+24:43.279 --> 24:44.159
+inspiring and maybe
+
+24:44.159 --> 24:46.320
+a little bit reassuring. Thanks so much
+
+24:46.320 --> 24:48.240
+for your time, and happy hacking.
+
+24:48.240 --> 24:50.867
+We'll see ya.
+
+24:50.867 --> 24:51.559
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt b/2021/captions/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt
new file mode 100644
index 00000000..4f95164f
--- /dev/null
+++ b/2021/captions/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt
@@ -0,0 +1,1282 @@
+WEBVTT
+
+00:01.199 --> 00:00:02.320
+My name is Ian Eure,
+
+00:00:02.320 --> 00:00:03.199
+and welcome to my talk
+
+00:00:03.199 --> 00:00:05.120
+"Old McCarthy Had a Form".
+
+00:00:05.120 --> 00:00:05.759
+In this talk,
+
+00:00:05.759 --> 00:00:07.759
+I'm going to be discussing EIEIO,
+
+00:00:07.759 --> 00:00:09.920
+which is an Emacs Lisp implementation
+
+00:00:09.920 --> 00:00:12.320
+of the Common Lisp object system.
+
+00:12.320 --> 00:00:13.519
+CLOS is a way of writing
+
+00:13.519 --> 00:00:15.360
+object-oriented Common Lisp code,
+
+00:00:15.360 --> 00:00:17.920
+and with EIEIO you have much of that same
+
+00:17.920 --> 00:00:19.920
+power but inside Emacs.
+
+00:00:19.920 --> 00:00:21.359
+I'm going to be using those two names
+
+00:00:21.359 --> 00:00:22.988
+interchangeably throughout this talk,
+
+00:00:22.988 --> 00:00:26.640
+since they're nearly equivalent.
+
+00:26.640 --> 00:00:27.534
+You might wonder,
+
+00:00:27.534 --> 00:00:28.880
+"Why would I want to write
+
+00:00:28.880 --> 00:00:31.439
+object Emacs Lisp code?".
+
+00:00:31.439 --> 00:00:33.440
+I like it because I like writing
+
+00:00:33.440 --> 00:00:34.960
+in a functional programming style,
+
+00:00:34.960 --> 00:00:36.896
+or I like to do an imperative style
+
+00:00:36.896 --> 00:00:39.040
+that captures interactive key sequences
+
+00:00:39.040 --> 00:00:41.200
+that I might enter manually.
+
+00:41.200 --> 00:00:42.800
+Well, I think, different kinds of programs
+
+00:42.800 --> 00:00:45.120
+need different kind of programming paradigms,
+
+00:00:45.120 --> 00:00:47.760
+and sometimes OOP is the one that fits.
+
+00:00:47.760 --> 00:00:49.708
+Also, if you've done much OOP before,
+
+00:00:49.708 --> 00:00:50.655
+you might be surprised by
+
+00:00:50.655 --> 00:00:52.879
+how EIEIO works and the sorts of power
+
+00:00:52.879 --> 00:00:55.039
+that it brings to your programs.
+
+00:55.039 --> 00:00:58.480
+So, let's talk about that model now.
+
+00:58.480 --> 00:01:00.000
+Classes are pretty much what
+
+00:01:00.000 --> 00:01:01.120
+you would expect if you've done
+
+00:01:01.120 --> 00:01:02.879
+OOP programming before.
+
+01:02.879 --> 00:01:04.400
+In the CLOS model,
+
+00:01:04.400 --> 00:01:06.400
+they only have fields,
+
+00:01:06.400 --> 00:01:08.000
+they only encapsulate values,
+
+00:01:08.000 --> 00:01:10.720
+they don't have anything to do with methods.
+
+01:10.720 --> 00:01:13.040
+So, in this case, we have a base class for
+
+01:13.040 --> 00:01:15.040
+an EMMS player backend,
+
+00:01:15.040 --> 00:01:18.159
+and it has one field (a slot is what
+
+00:01:18.159 --> 00:01:20.000
+it's called in CLOS terminology),
+
+00:01:20.000 --> 00:01:22.720
+which indicates whether it's playing or not,
+
+00:01:22.720 --> 00:01:24.080
+and it's declared abstract,
+
+00:01:24.080 --> 00:01:25.439
+so you can't create an instance
+
+00:01:25.439 --> 00:01:27.040
+of an object based on this class,
+
+00:01:27.040 --> 00:01:29.280
+you can only extend it with another class,
+
+00:01:29.280 --> 00:01:31.119
+that's an EIEIO extension,
+
+00:01:31.119 --> 00:01:33.439
+but I think it's a pretty good one.
+
+01:33.439 --> 00:01:34.640
+You can also see there's a class
+
+00:01:34.640 --> 00:01:37.119
+that implements an mpv player back-end,
+
+00:01:37.119 --> 00:01:39.680
+and it extends the base class,
+
+00:01:39.680 --> 00:01:40.960
+it doesn't add any slots,
+
+00:01:40.960 --> 00:01:44.479
+and those get inherited from the base class.
+
+01:44.479 --> 00:01:45.936
+If you want these to do much more
+
+00:01:45.936 --> 00:01:46.960
+than encapsulate data,
+
+00:01:46.960 --> 00:01:48.880
+you need to start writing methods.
+
+00:01:48.880 --> 00:01:50.324
+The CLOS model is to have
+
+00:01:50.324 --> 00:01:51.439
+a generic function.
+
+00:01:51.439 --> 00:01:52.399
+A generic function is
+
+00:01:52.399 --> 00:01:53.680
+kind of like an interface,
+
+00:01:53.680 --> 00:01:55.600
+it's just a name and an argument list,
+
+01:55.600 --> 00:01:57.280
+and there's no implementation,
+
+00:01:57.280 --> 00:01:58.560
+you have to write a method
+
+00:01:58.560 --> 00:02:00.960
+in order to have an actual implementation.
+
+00:02:00.960 --> 00:02:02.880
+When you call the generic function,
+
+00:02:02.880 --> 00:02:04.960
+the system will do a dynamic dispatch
+
+00:02:04.960 --> 00:02:06.560
+to a method that matches based on
+
+00:02:06.560 --> 00:02:08.319
+its argument types and how the method
+
+00:02:08.319 --> 00:02:12.239
+has declared that it should be invoked.
+
+02:12.239 --> 00:02:14.239
+Here's an example of some methods
+
+00:02:14.239 --> 00:02:16.480
+for our mpv player backend,
+
+00:02:16.480 --> 00:02:19.599
+you can see that it'll play anything
+
+00:02:19.599 --> 00:02:21.200
+other than something
+
+00:02:21.200 --> 00:02:23.200
+with a keyword of `unplayable`,
+
+00:02:23.200 --> 00:02:25.328
+and it just has dummy start and stop methods
+
+00:02:25.328 --> 00:02:27.680
+that return "Started" and "Stopped" text.
+
+00:02:27.680 --> 00:02:29.599
+A method is just one implementation
+
+00:02:29.599 --> 00:02:30.552
+of a generic function,
+
+00:02:30.552 --> 00:02:32.640
+and you can have as many as you need.
+
+02:32.640 --> 00:02:33.920
+In order to determine
+
+00:02:33.920 --> 00:02:35.519
+which method gets dispatched
+
+00:02:35.519 --> 00:02:36.879
+when you call a generic function,
+
+00:02:36.879 --> 00:02:38.080
+they're specialized based on
+
+02:38.080 --> 00:02:39.360
+their argument type.
+
+00:02:39.360 --> 00:02:40.640
+In this case, you can see that
+
+00:02:40.640 --> 00:02:41.680
+first argument says
+
+00:02:41.680 --> 00:02:44.480
+`player talk/emms-player-mpv`,
+
+00:02:44.480 --> 00:02:46.239
+that means that if that first argument
+
+00:02:46.239 --> 00:02:48.480
+is an instance of the mpv player
+
+00:02:48.480 --> 00:02:50.080
+or a subclass of it,
+
+00:02:50.080 --> 00:02:52.000
+then those methods will be invoked,
+
+00:02:52.000 --> 00:02:53.560
+unless there's a more specific one
+
+00:02:53.560 --> 00:02:55.440
+based on that argument type.
+
+02:55.440 --> 00:02:56.656
+You don't have to define
+
+00:02:56.656 --> 00:02:57.760
+the generic functions.
+
+00:02:57.760 --> 00:02:59.040
+If you define a method,
+
+00:02:59.040 --> 00:03:00.451
+then it'll implicitly define
+
+00:03:00.451 --> 00:03:03.599
+the generic function for you.
+
+03:03.599 --> 00:03:05.440
+Specialization is really powerful.
+
+00:03:05.440 --> 00:03:06.939
+It lets the methods define
+
+00:03:06.939 --> 00:03:08.400
+how they get invoked
+
+00:03:08.400 --> 00:03:10.472
+If you've done much programming in Clojure,
+
+00:03:10.472 --> 00:03:12.959
+this sounds a little bit like multi-methods,
+
+00:03:12.959 --> 00:03:16.319
+but with multi-methods, only the main method,
+
+00:03:16.319 --> 00:03:18.000
+the equivalent of the generic function,
+
+00:03:18.000 --> 00:03:19.920
+can determine how they're dispatched.
+
+00:03:19.920 --> 00:03:21.519
+So, as the writer of an interface,
+
+00:03:21.519 --> 00:03:23.120
+you might not be able to foresee
+
+00:03:23.120 --> 00:03:25.519
+every way that someone who's implementing
+
+00:03:25.519 --> 00:03:26.959
+a version of that interface
+
+03:26.959 --> 00:03:28.400
+would like to dispatch.
+
+00:03:28.400 --> 00:03:29.920
+CLOS doesn't have that problem,
+
+00:03:29.920 --> 00:03:31.200
+you get to define your
+
+03:31.200 --> 00:03:34.080
+own invocation semantics.
+
+03:34.080 --> 00:03:35.360
+You're also not limited to
+
+00:03:35.360 --> 00:03:37.200
+dispatching based on the value
+
+00:03:37.200 --> 00:03:39.920
+being a subclass of an EIEIO type.
+
+00:03:39.920 --> 00:03:41.280
+You can dispatch based on
+
+03:41.280 --> 00:03:42.879
+a primitive type like integer,
+
+00:03:42.879 --> 00:03:45.360
+you can dispatch based on the value,
+
+03:45.360 --> 00:03:47.599
+you can dispatch on multiple arguments,
+
+03:47.599 --> 00:03:49.599
+and there's also a default dispatch
+
+00:03:49.599 --> 00:03:50.688
+that will get applied
+
+00:03:50.688 --> 00:03:53.200
+if there's no others that are defined.
+
+00:03:53.200 --> 00:03:54.319
+If you don't have a default,
+
+00:03:54.319 --> 00:03:55.439
+then you'll just get an error
+
+03:55.439 --> 00:03:56.480
+from the system,
+
+00:03:56.480 --> 00:03:57.439
+and if that doesn't cover it,
+
+00:03:57.439 --> 00:03:59.040
+you can even define your own.
+
+03:59.040 --> 00:04:00.239
+Definition is with the
+
+00:04:00.239 --> 00:04:01.760
+`cl-generic-generalizers`,
+
+00:04:01.760 --> 00:04:03.680
+which is itself a generic function.
+
+00:04:03.680 --> 00:04:05.680
+Much of CLOS is built in CLOS,
+
+00:04:05.680 --> 00:04:08.319
+which I think is really cool.
+
+04:08.319 --> 00:04:09.599
+In addition to all that,
+
+00:04:09.599 --> 00:04:12.319
+you have four different types of methods,
+
+04:12.319 --> 00:04:13.680
+and those are distinguished by
+
+00:04:13.680 --> 00:04:16.000
+what's called a qualifier.
+
+04:16.000 --> 00:04:18.400
+Every function can have methods
+
+00:04:18.400 --> 00:04:20.239
+that have all four different
+
+00:04:20.239 --> 00:04:21.280
+types of qualifiers,
+
+00:04:21.280 --> 00:04:22.960
+and based on your class inheritance,
+
+00:04:22.960 --> 00:04:25.680
+you might have multiple of each type.
+
+04:25.680 --> 00:04:26.800
+There's the primary method,
+
+00:04:26.800 --> 00:04:28.560
+which is equivalent to the method
+
+00:04:28.560 --> 00:04:29.919
+in any other OOP system,
+
+00:04:29.919 --> 00:04:32.160
+so we're not going to cover that too much.
+
+04:32.160 --> 00:04:33.759
+Then there's a `before` method.
+
+00:04:33.759 --> 00:04:35.600
+This is evaluated before
+
+00:04:35.600 --> 00:04:37.440
+the primary method for side effects,
+
+00:04:37.440 --> 00:04:40.080
+and its return value is discarded.
+
+00:04:40.080 --> 00:04:41.120
+There's an `after` method,
+
+00:04:41.120 --> 00:04:42.560
+which is the same but happens after
+
+00:04:42.560 --> 00:04:44.479
+the method has finished evaluating.
+
+04:44.479 --> 00:04:46.639
+And then there's an `around` method
+
+00:04:46.639 --> 00:04:49.199
+that happens around all the other three.
+
+04:49.199 --> 00:04:51.120
+And by using these types of methods
+
+00:04:51.120 --> 00:04:52.560
+and using class inheritance
+
+00:04:52.560 --> 00:04:54.560
+to compose them into your classes,
+
+00:04:54.560 --> 00:04:56.479
+you can add some really powerful
+
+00:04:56.479 --> 00:04:58.240
+mixin type functionality.
+
+00:04:58.240 --> 00:04:59.764
+You can use before and after
+
+00:04:59.764 --> 00:05:01.280
+to build things like logging,
+
+00:05:01.280 --> 00:05:02.479
+and you can use around
+
+00:05:02.479 --> 00:05:04.880
+to implement things like memoization.
+
+05:04.880 --> 00:05:06.720
+If you've done much Emacs Lisp programming,
+
+00:05:06.720 --> 00:05:08.160
+those before after and around
+
+00:05:08.160 --> 00:05:09.919
+might jog your memory because
+
+05:09.919 --> 00:05:11.440
+they're the same features you get
+
+00:05:11.440 --> 00:05:14.160
+with Emacs's built-in function advice.
+
+05:14.160 --> 00:05:15.680
+The thing with function advice is that
+
+05:15.680 --> 00:05:17.199
+it only works on functions
+
+00:05:17.199 --> 00:05:18.240
+in the global namespace,
+
+00:05:18.240 --> 00:05:20.360
+and there's no kind of conditionality,
+
+00:05:20.360 --> 00:05:21.840
+they always get dispatched
+
+00:05:21.840 --> 00:05:23.440
+when that function is invoked.
+
+05:23.440 --> 00:05:25.600
+The nice thing about the CLOS system is that
+
+00:05:25.600 --> 00:05:27.039
+whether they get invoked or not
+
+05:27.039 --> 00:05:28.872
+depends on whether they exist in
+
+00:05:28.872 --> 00:05:30.160
+the class hierarchy,
+
+00:05:30.160 --> 00:05:31.520
+so you can add them to your
+
+00:05:31.520 --> 00:05:32.880
+class hierarchy if you want
+
+00:05:32.880 --> 00:05:34.000
+that extra functionality
+
+00:05:34.000 --> 00:05:35.440
+like logging or memoization,
+
+00:05:35.440 --> 00:05:37.120
+and you can exclude it if you don't.
+
+00:05:37.120 --> 00:05:38.320
+I think that's really powerful
+
+05:38.320 --> 00:05:42.639
+and a very interesting way of doing it.
+
+05:42.639 --> 00:05:44.639
+It also supports multiple inheritance,
+
+05:44.639 --> 00:05:46.639
+which is the mechanism that you can use
+
+05:46.639 --> 00:05:48.560
+to compose all these different kinds of
+
+05:48.560 --> 00:05:50.479
+behaviors into a single object that does
+
+05:50.479 --> 00:05:52.240
+all the things that you want.
+
+00:05:52.240 --> 00:05:54.720
+Here's a quick example of a logger.
+
+00:05:54.720 --> 00:05:56.240
+So, you can see the class just has
+
+00:05:56.240 --> 00:05:58.319
+a single slot called `messages`,
+
+00:05:58.319 --> 00:05:59.840
+it has a `log` method
+
+00:05:59.840 --> 00:06:01.440
+that pushes a new message,
+
+00:06:01.440 --> 00:06:03.840
+which is a format string, into that,
+
+00:06:03.840 --> 00:06:05.520
+and then it will return them back out,
+
+00:06:05.520 --> 00:06:07.280
+or it'll just return the latest.
+
+06:07.280 --> 00:06:08.479
+And there's a simple example
+
+00:06:08.479 --> 00:06:09.600
+that shows it logging,
+
+00:06:09.600 --> 00:06:11.280
+and then shows it coming back out,
+
+00:06:11.280 --> 00:06:14.080
+pretty much what you would expect.
+
+06:14.080 --> 00:06:16.400
+Here's another class that adapts
+
+00:06:16.400 --> 00:06:19.039
+the `emms-player` to the `logger` class.
+
+00:06:19.039 --> 00:06:20.560
+It only extends the logger
+
+00:06:20.560 --> 00:06:22.400
+because it doesn't need any features
+
+00:06:22.400 --> 00:06:25.039
+of the `emms-player` class itself.
+
+00:06:25.039 --> 00:06:27.440
+It just implements methods that dispatch
+
+00:06:27.440 --> 00:06:30.240
+based on it being that logging player class,
+
+00:06:30.240 --> 00:06:31.759
+and you can see it logs whenever
+
+00:06:31.759 --> 00:06:34.240
+a track is started or stopped,
+
+00:06:34.240 --> 00:06:36.240
+and it also adds some track
+
+00:06:36.240 --> 00:06:37.520
+to tell you whether or not
+
+00:06:37.520 --> 00:06:38.560
+the track was playable,
+
+00:06:38.560 --> 00:06:41.199
+that is using the around method.
+
+00:06:41.199 --> 00:06:43.199
+So, you can see we have all three methods
+
+00:06:43.199 --> 00:06:45.280
+before, after, and around in this class,
+
+00:06:45.280 --> 00:06:48.160
+so you can see how those work.
+
+00:06:48.160 --> 00:06:49.440
+Then you need one more,
+
+00:06:49.440 --> 00:06:50.184
+which is the class
+
+00:06:50.184 --> 00:06:51.759
+that mixes it all together,
+
+00:06:51.759 --> 00:06:54.080
+So, that's the `logging-player-mpv`,
+
+00:06:54.080 --> 00:06:56.639
+and it extends both the `logging-player` class
+
+06:56.639 --> 00:06:59.680
+and the `emms-player-mpv` class.
+
+06:59.680 --> 00:07:01.440
+What's really interesting about this is
+
+07:01.440 --> 00:07:03.360
+that even though the logging player is
+
+07:03.360 --> 00:07:05.520
+part of the `emms-player` hierarchy,
+
+00:07:05.520 --> 00:07:06.472
+it doesn't depend on
+
+00:07:06.472 --> 00:07:08.240
+a specific implementation,
+
+00:07:08.240 --> 00:07:10.400
+so you can combine the two different
+
+00:07:10.400 --> 00:07:12.639
+classes that lets the logging class
+
+00:07:12.639 --> 00:07:13.919
+only care about logging,
+
+07:13.919 --> 00:07:15.440
+and the `emms-player` class
+
+00:07:15.440 --> 00:07:17.039
+only care about playing,
+
+00:07:17.039 --> 00:07:18.240
+and that is a really nice
+
+07:18.240 --> 00:07:19.599
+way of separating your concerns
+
+00:07:19.599 --> 00:07:21.440
+that I think is very powerful.
+
+07:21.440 --> 00:07:22.515
+Here's a quick example of
+
+00:07:22.515 --> 00:07:23.599
+just how that works,
+
+00:07:23.599 --> 00:07:25.199
+and you can see the `unplayable`
+
+07:25.199 --> 00:07:26.160
+track is not playable,
+
+00:07:26.160 --> 00:07:27.840
+and it gets logged as such,
+
+00:07:27.840 --> 00:07:29.360
+`foo` is playable, and you can see
+
+07:29.360 --> 00:07:31.120
+the logs in started and stopped.
+
+00:07:31.120 --> 00:07:32.560
+So, you can see it's having
+
+00:07:32.560 --> 00:07:34.000
+the side effects from those methods,
+
+00:07:34.000 --> 00:07:36.960
+and it's also returning
+
+00:07:36.960 --> 00:07:40.319
+the value off the player as well.
+
+07:40.319 --> 00:07:41.599
+I think this system has a bunch of
+
+07:41.599 --> 00:07:43.120
+really nice properties.
+
+07:43.120 --> 00:07:44.080
+First and foremost,
+
+00:07:44.080 --> 00:07:45.840
+it feels like a normal Lisp,
+
+00:07:45.840 --> 00:07:47.360
+all you're doing is calling functions,
+
+00:07:47.360 --> 00:07:49.840
+there's no magic involved.
+
+07:49.840 --> 00:07:51.919
+Also, you can use either or both of the
+
+07:51.919 --> 00:07:53.840
+classes or generic functions.
+
+00:07:53.840 --> 00:07:55.120
+If you only need to
+
+00:07:55.120 --> 00:07:56.960
+encapsulate data into a structure,
+
+00:07:56.960 --> 00:07:58.479
+then you can only use classes,
+
+07:58.479 --> 00:08:00.400
+you don't have to use generic functions.
+
+08:00.400 --> 00:08:02.080
+And if you only need dynamic dispatch,
+
+08:02.080 --> 00:08:03.068
+you can only implement
+
+00:08:03.068 --> 00:08:04.720
+a generic function and methods.
+
+00:08:04.720 --> 00:08:06.560
+You don't get forced into a model
+
+00:08:06.560 --> 00:08:08.000
+where you have to use both.
+
+00:08:08.000 --> 00:08:09.247
+You can mix and match for
+
+00:08:09.247 --> 00:08:10.800
+whatever needs your program has,
+
+00:08:10.800 --> 00:08:13.039
+which I think is really amazing.
+
+08:13.039 --> 00:08:15.440
+Any value can conform to an interface,
+
+08:15.440 --> 00:08:17.039
+meaning a generic function.
+
+00:08:17.039 --> 00:08:19.520
+So, you don't have to use those classes.
+
+00:08:19.520 --> 00:08:20.479
+You can even implement
+
+00:08:20.479 --> 00:08:22.240
+a generic function over `nil`,
+
+00:08:22.240 --> 00:08:23.599
+which gives you those really nice
+
+08:23.599 --> 00:08:24.800
+properties of Lisp,
+
+00:08:24.800 --> 00:08:26.460
+where you have nil-punning, you know,
+
+00:08:26.460 --> 00:08:28.800
+if you take the head of a nil list,
+
+00:08:28.800 --> 00:08:30.479
+then the output is `nil`,
+
+00:08:30.479 --> 00:08:31.283
+but you can do that
+
+00:08:31.283 --> 00:08:32.880
+with your object system too.
+
+00:08:32.880 --> 00:08:34.320
+And a really nice feature of that is
+
+08:34.320 --> 00:08:35.919
+that you have no possibility of
+
+00:08:35.919 --> 00:08:36.959
+null pointer exceptions
+
+00:08:36.959 --> 00:08:38.719
+like you do in other languages.
+
+00:08:38.719 --> 00:08:39.919
+They have a calling convention
+
+00:08:39.919 --> 00:08:42.880
+where you call object dot method,
+
+08:42.880 --> 00:08:45.600
+but in CLOS, you call a generic function,
+
+00:08:45.600 --> 00:08:47.279
+and you just give it some arguments.
+
+00:08:47.279 --> 00:08:48.959
+Typically, the first one is going to be
+
+00:08:48.959 --> 00:08:51.680
+an EIEIO class object,
+
+00:08:51.680 --> 00:08:53.200
+but it doesn't have to be,
+
+00:08:53.200 --> 00:08:54.640
+but because you're not calling that
+
+00:08:54.640 --> 00:08:55.519
+instance of an object,
+
+00:08:55.519 --> 00:08:57.279
+there's nothing to be nil in the first place,
+
+00:08:57.279 --> 00:08:58.320
+so there's no possibility of
+
+00:08:58.320 --> 00:09:00.080
+a nil pointer exception.
+
+09:00.080 --> 00:09:01.376
+And then the ability to
+
+00:09:01.376 --> 00:09:02.480
+have multiple inheritance
+
+00:09:02.480 --> 00:09:04.000
+and mix in all of these different
+
+00:09:04.000 --> 00:09:05.760
+functionalities into your final object
+
+00:09:05.760 --> 00:09:07.279
+is very powerful.
+
+09:07.279 --> 00:09:09.839
+Because you have multiple inheritance,
+
+00:09:09.839 --> 00:09:11.120
+your final object that
+
+00:09:11.120 --> 00:09:12.560
+composes all of those things
+
+00:09:12.560 --> 00:09:14.080
+is both a player and a logger,
+
+00:09:14.080 --> 00:09:15.600
+and it can be substituted into code
+
+00:09:15.600 --> 00:09:17.279
+that expects either of them.
+
+00:09:17.279 --> 00:09:19.040
+It's not an adapter class
+
+09:19.040 --> 00:09:21.360
+that only allows you to do one thing,
+
+00:09:21.360 --> 00:09:22.560
+it does both of them.
+
+00:09:22.560 --> 00:09:24.800
+I think that's amazing.
+
+09:24.800 --> 00:09:26.320
+So, here are some practical examples
+
+09:26.320 --> 00:09:27.387
+where I think maybe this
+
+00:09:27.387 --> 00:09:28.720
+could be a good idea.
+
+00:09:28.720 --> 00:09:30.399
+And I like to think about,
+
+09:30.399 --> 00:09:32.320
+"What is OOP actually good for?".
+
+00:09:32.320 --> 00:09:34.640
+I think it has three really amazing powers,
+
+09:34.640 --> 00:09:36.399
+encapsulation, abstraction,
+
+00:09:36.399 --> 00:09:37.279
+and extensibility,
+
+00:09:37.279 --> 00:09:39.200
+so let's look at those.
+
+09:39.200 --> 00:09:40.959
+Encapsulation is just keeping
+
+00:09:40.959 --> 00:09:42.480
+related data together.
+
+00:09:42.480 --> 00:09:43.680
+Here's an example from the
+
+09:43.680 --> 00:09:45.360
+transmission Torrent client.
+
+00:09:45.360 --> 00:09:46.399
+In order for it to work,
+
+00:09:46.399 --> 00:09:47.600
+it needs to have all four of
+
+09:47.600 --> 00:09:49.920
+these variables set consistently,
+
+00:09:49.920 --> 00:09:52.240
+but if you use the customization interface,
+
+09:52.240 --> 00:09:53.920
+they're kind of strewn all over the buffer
+
+00:09:53.920 --> 00:09:55.760
+because that shows them alphabetically
+
+00:09:55.760 --> 00:09:57.040
+by variable name instead of
+
+00:09:57.040 --> 00:09:59.920
+grouping them logically by function.
+
+09:59.920 --> 00:10:01.327
+You also have all these
+
+00:10:01.327 --> 00:10:02.480
+in the global namespace,
+
+00:10:02.480 --> 00:10:04.720
+so you need this disambiguation in front,
+
+00:10:04.720 --> 00:10:06.800
+you have to have a transmission prefix,
+
+00:10:06.800 --> 00:10:08.720
+so it's kind of ugly.
+
+10:08.720 --> 00:10:10.240
+An alternative example would be to
+
+10:10.240 --> 00:10:11.760
+encapsulate all of that
+
+00:10:11.760 --> 00:10:13.360
+in a single class.
+
+10:13.360 --> 00:10:16.160
+This has one slot for each of those values,
+
+00:10:16.160 --> 00:10:17.040
+except the username
+
+00:10:17.040 --> 00:10:18.000
+and password is broken out,
+
+00:10:18.000 --> 00:10:20.240
+there was only one in the previous example,
+
+00:10:20.240 --> 00:10:23.120
+but it works pretty much the same.
+
+10:23.120 --> 00:10:25.200
+The really neat thing about this is that
+
+10:25.200 --> 00:10:27.279
+the customization interface understands
+
+10:27.279 --> 00:10:29.920
+how to customize EIEIO objects,
+
+00:10:29.920 --> 00:10:32.640
+so you can set your custom variable
+
+00:10:32.640 --> 00:10:34.000
+to the value of an object,
+
+00:10:34.000 --> 00:10:35.760
+and in the customization interface,
+
+00:10:35.760 --> 00:10:37.040
+it shows you all of the fields,
+
+00:10:37.040 --> 00:10:38.399
+and it lets you edit the values
+
+00:10:38.399 --> 00:10:40.079
+of those slots directly.
+
+00:10:40.079 --> 00:10:41.760
+So, that keeps that logical grouping
+
+00:10:41.760 --> 00:10:44.800
+that I think makes things really easy to use.
+
+10:44.800 --> 00:10:46.160
+Another thing it's really good at is
+
+10:46.160 --> 00:10:48.268
+abstraction, and this is really core to
+
+00:10:48.268 --> 00:10:49.408
+a lot of what Emacs does
+
+00:10:49.408 --> 00:10:51.200
+because it runs on so many different systems,
+
+00:10:51.200 --> 00:10:53.308
+and it works with so many different
+
+00:10:53.308 --> 00:10:55.120
+kinds of similar tools.
+
+10:55.120 --> 00:10:56.109
+Here's an example from
+
+00:10:56.109 --> 00:10:58.079
+the built-in SQL implementation.
+
+00:10:58.079 --> 00:10:59.360
+This is the definition of
+
+00:10:59.360 --> 00:11:01.040
+the postgres backend,
+
+00:11:01.040 --> 00:11:02.160
+there's one of these for
+
+00:11:02.160 --> 00:11:04.000
+every supported database backend.
+
+00:11:04.000 --> 00:11:05.440
+And you can see, this is a pretty
+
+11:05.440 --> 00:11:08.480
+classic interface abstraction pattern.
+
+11:08.480 --> 00:11:09.680
+On the left-hand side,
+
+00:11:09.680 --> 00:11:10.880
+you have a symbol that's common
+
+00:11:10.880 --> 00:11:12.399
+among all the database backends,
+
+00:11:12.399 --> 00:11:14.160
+and the code that doesn't
+
+00:11:14.160 --> 00:11:16.240
+know about the implementation can use,
+
+00:11:16.240 --> 00:11:17.519
+no matter what implementation
+
+00:11:17.519 --> 00:11:19.040
+is being specified.
+
+00:11:19.040 --> 00:11:20.000
+On the right-hand side,
+
+00:11:20.000 --> 00:11:21.120
+you have the implementation
+
+00:11:21.120 --> 00:11:22.560
+specific values,
+
+00:11:22.560 --> 00:11:24.399
+in some cases these are just strings,
+
+00:11:24.399 --> 00:11:25.760
+or regexes, and in others
+
+00:11:25.760 --> 00:11:27.519
+those are actual functions.
+
+11:27.519 --> 00:11:29.440
+So, really this already is
+
+00:11:29.440 --> 00:11:30.720
+object orientation,
+
+00:11:30.720 --> 00:11:32.959
+it's just an ad-hoc system for it,
+
+00:11:32.959 --> 00:11:34.880
+but you don't have to use an ad-hoc system
+
+00:11:34.880 --> 00:11:35.519
+because there's this
+
+00:11:35.519 --> 00:11:38.000
+nice formal one instead.
+
+11:38.000 --> 00:11:38.880
+Another thing that it's
+
+00:11:38.880 --> 00:11:40.959
+really good at is extensibility,
+
+00:11:40.959 --> 00:11:42.160
+we saw some of that with
+
+00:11:42.160 --> 00:11:44.800
+the emms-player example earlier.
+
+00:11:44.800 --> 00:11:46.160
+But here's another thing I think
+
+00:11:46.160 --> 00:11:48.720
+it would be interesting to explore.
+
+11:48.720 --> 00:11:51.279
+Emacs has this idea of derived modes
+
+11:51.279 --> 00:11:52.639
+where you have a mode that's based on
+
+11:52.639 --> 00:11:54.639
+another, and that's a pretty clear
+
+11:54.639 --> 00:11:57.040
+inheritance pattern straight out of OOP
+
+11:57.040 --> 00:11:58.560
+as far as I'm concerned.
+
+00:11:58.560 --> 00:12:00.079
+What would it look like
+
+00:12:00.079 --> 00:12:02.959
+if major modes were EIEIO classes,
+
+00:12:02.959 --> 00:12:04.800
+and you could extend your mode
+
+12:04.800 --> 00:12:06.399
+by extending the class.
+
+00:12:06.399 --> 00:12:08.240
+I think that's a really interesting idea,
+
+00:12:08.240 --> 00:12:10.880
+and I'd like to explore that more.
+
+12:10.880 --> 00:12:14.079
+In conclusion, I think EIEIO is amazing,
+
+12:14.079 --> 00:12:16.079
+and I had no idea that such a powerful
+
+12:16.079 --> 00:12:18.079
+object orientation system
+
+00:12:18.079 --> 00:12:20.160
+was available in the Emacs.
+
+12:20.160 --> 00:12:21.519
+My goal with this talk
+
+00:12:21.519 --> 00:12:23.519
+is for anyone who writes Emacs Lisp,
+
+00:12:23.519 --> 00:12:25.360
+to look at these classes of problems,
+
+00:12:25.360 --> 00:12:27.360
+encapsulation, abstraction,
+
+00:12:27.360 --> 00:12:28.639
+and extensibility,
+
+00:12:28.639 --> 00:12:29.600
+and if you run into
+
+00:12:29.600 --> 00:12:31.279
+those problems in your code,
+
+12:31.279 --> 00:12:33.279
+instead of immediately reaching
+
+00:12:33.279 --> 00:12:34.959
+and building your own system,
+
+00:12:34.959 --> 00:12:35.760
+I want you to think:
+
+00:12:35.760 --> 00:12:37.279
+"Oh there's a thing for that,
+
+00:12:37.279 --> 00:12:39.040
+and I can just use it."
+
+12:39.040 --> 00:12:40.560
+That's my talk, thanks.
+
+00:12:40.560 --> 00:12:41.560
+Hack on!
+
+00:12:41.560 --> 00:12:43.880
+[captions by bhavin192 (Bhavin Gandhi)]
diff --git a/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--chapters.vtt b/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--chapters.vtt
new file mode 100644
index 00000000..9a9f1aaf
--- /dev/null
+++ b/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--chapters.vtt
@@ -0,0 +1,25 @@
+WEBVTT
+
+00:00:00.000 --> 00:04:44.206
+About me and this talk
+
+00:04:44.207 --> 00:09:17.106
+The inherent Emacs qualities for an autodidact
+
+00:09:17.107 --> 00:14:07.873
+The interconnectedness of the Emacs space
+
+00:14:07.874 --> 00:18:55.039
+The documentation culture of the Emacs community
+
+00:18:55.040 --> 00:23:59.528
+The Promethean Ideal of freeing know-how and expertise
+
+00:23:59.529 --> 00:28:53.139
+The 'killer apps' of Emacs
+
+00:28:53.140 --> 00:33:39.173
+You can't be an Emacs tourist
+
+00:33:39.174 --> 00:33:40.174
+Emacs as a champion of software freedom
diff --git a/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main--chapters.vtt b/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main--chapters.vtt
new file mode 100644
index 00000000..9a9f1aaf
--- /dev/null
+++ b/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main--chapters.vtt
@@ -0,0 +1,25 @@
+WEBVTT
+
+00:00:00.000 --> 00:04:44.206
+About me and this talk
+
+00:04:44.207 --> 00:09:17.106
+The inherent Emacs qualities for an autodidact
+
+00:09:17.107 --> 00:14:07.873
+The interconnectedness of the Emacs space
+
+00:14:07.874 --> 00:18:55.039
+The documentation culture of the Emacs community
+
+00:18:55.040 --> 00:23:59.528
+The Promethean Ideal of freeing know-how and expertise
+
+00:23:59.529 --> 00:28:53.139
+The 'killer apps' of Emacs
+
+00:28:53.140 --> 00:33:39.173
+You can't be an Emacs tourist
+
+00:33:39.174 --> 00:33:40.174
+Emacs as a champion of software freedom
diff --git a/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt b/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt
new file mode 100644
index 00000000..3f7600e1
--- /dev/null
+++ b/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt
@@ -0,0 +1,2512 @@
+WEBVTT
+
+00:11.610 --> 00:13.974
+Hello EmacsConf! Hello world!
+
+00:13.974 --> 00:15.940
+Today I will talk to you about
+
+00:15.940 --> 00:19.040
+how Emacs made me appreciate
+
+00:19.040 --> 00:20.900
+software freedom.
+
+00:20.900 --> 00:24.180
+My name is Protesilaos, also known as "Prot".
+
+00:24.180 --> 00:28.430
+I am joining you from the mountains of Cyprus.
+
+00:28.430 --> 00:30.274
+Cyprus is an island
+
+00:30.274 --> 00:32.940
+in the Eastern Mediterranean Sea.
+
+00:32.940 --> 00:35.107
+So let's remove this header
+
+00:35.107 --> 00:37.174
+from the top of the presentation
+
+00:37.174 --> 00:40.307
+and proceed with today's talk.
+
+00:40.307 --> 00:41.907
+In that header, you can find a link
+
+00:41.907 --> 00:45.974
+to my website, protesilaos.com .
+
+00:45.974 --> 00:50.207
+My presentation focuses on the intersection
+
+00:50.207 --> 00:52.210
+between software freedom
+
+00:52.210 --> 00:55.890
+and what we find in the Emacs milieu.
+
+00:55.890 --> 00:57.640
+Here "the Emacs milieu"
+
+00:57.640 --> 01:00.507
+encompasses two magnitudes:
+
+01:00.507 --> 01:03.320
+(i) the program we use and
+
+01:03.320 --> 01:06.740
+(ii) the diverse, global community of people
+
+01:06.740 --> 01:10.530
+that has grown organically around it.
+
+01:10.530 --> 01:12.007
+I will talk to you about
+
+01:12.007 --> 01:13.707
+how Emacs made me appreciate
+
+01:13.707 --> 01:14.940
+software freedom
+
+01:14.940 --> 01:16.674
+and helped me exercise it
+
+01:16.674 --> 01:19.830
+to its full potential.
+
+01:19.830 --> 01:21.440
+Personal anecdotes are not
+
+01:21.440 --> 01:23.650
+the main focus of this talk.
+
+01:23.650 --> 01:26.740
+Rather, they serve the ancillary role
+
+01:26.740 --> 01:31.470
+of making certain insights more relatable.
+
+01:31.470 --> 01:34.574
+The presentation is theoretical in nature
+
+01:34.574 --> 01:38.430
+and targeted at a general audience.
+
+01:38.430 --> 01:42.020
+No knowledge of programming is required.
+
+01:42.020 --> 01:43.840
+It is assumed, however,
+
+01:43.840 --> 01:45.374
+that you are familiar
+
+01:45.374 --> 01:47.074
+with some basic concepts,
+
+01:47.074 --> 01:50.707
+such as the fact that Emacs is extended
+
+01:50.707 --> 01:53.507
+with the Emacs Lisp programming language,
+
+01:53.507 --> 01:56.807
+or that Emacs is a GNU project
+
+01:56.807 --> 02:02.450
+that champions end-user software freedom.
+
+02:02.450 --> 02:04.574
+Let's start with a few words about me
+
+02:04.574 --> 02:07.280
+before elaborating further.
+
+02:07.280 --> 02:11.540
+I was born in Greece in 1988
+
+02:11.540 --> 02:13.379
+and was raised there.
+
+02:13.379 --> 02:16.307
+As a kid I was not into
+
+02:16.307 --> 02:19.207
+tech-related activities. Not at all.
+
+02:20.480 --> 02:22.973
+All I cared about was playing football
+
+02:22.973 --> 02:26.440
+(association football, also known as soccer)
+
+02:26.440 --> 02:29.840
+and staying outdoors.
+
+02:29.840 --> 02:33.074
+My formal education is in the humanities
+
+02:33.074 --> 02:35.690
+(or else, the liberal arts).
+
+02:35.690 --> 02:38.040
+I had a career in politics.
+
+02:38.040 --> 02:41.107
+I lived in Brussels, Belgium
+
+02:41.107 --> 02:42.840
+where I worked at the
+
+02:42.840 --> 02:46.050
+European Parliament, among others.
+
+02:46.050 --> 02:49.774
++ After some intense soul-searching,
+
+02:49.774 --> 02:52.607
+I realised I did not want to be
+
+02:52.607 --> 02:55.040
+a political operator any more
+
+02:55.040 --> 02:59.950
+and made radical changes in my life.
+
+02:59.950 --> 03:02.207
+I have since come to terms with the fact
+
+03:02.207 --> 03:04.709
+that I am a philosopher.
+
+03:04.709 --> 03:07.640
+I am not a programmer.
+
+03:07.640 --> 03:10.709
+Neither by trade nor education.
+
+03:10.709 --> 03:13.140
+I code for leisure.
+
+03:13.140 --> 03:17.370
+I was not tech-savvy until my mid-20s.
+
+03:17.370 --> 03:20.740
+I have been using GNU/Linux distributions
+
+03:20.740 --> 03:24.180
+since the summer of 2016.
+
+03:24.180 --> 03:26.374
+While I switched to Emacs full-time
+
+03:26.374 --> 03:30.190
+in the summer of 2019.
+
+03:30.190 --> 03:31.840
+Before that switch, I was running
+
+03:31.840 --> 03:33.774
+a bespoke environment
+
+03:33.774 --> 03:36.907
+that involved several standalone programs
+
+03:36.907 --> 03:41.360
+like Vim, Tmux, and a tiling window manager.
+
+03:41.360 --> 03:44.874
+I am the creator and maintainer
+
+03:44.874 --> 03:47.340
+of the modus-themes package.
+
+03:47.340 --> 03:50.707
+The themes are modus-operandi
+
+03:50.707 --> 03:52.440
+and modus-vivendi,
+
+03:52.440 --> 03:53.874
+but they are grouped together
+
+03:53.874 --> 03:57.007
+in the package called modus-themes.
+
+03:57.760 --> 03:59.274
+These are designed to conform
+
+03:59.274 --> 04:01.840
+with the highest accessibility standard
+
+04:01.840 --> 04:05.007
+for legibility, and optionally
+
+04:05.007 --> 04:07.007
+support the needs of users
+
+04:07.007 --> 04:09.269
+with red-green colour deficiency
+
+04:09.269 --> 04:12.307
+(deuteranopia, as it is known).
+
+04:12.307 --> 04:14.940
+The themes are built into
+
+04:14.940 --> 04:17.579
+Emacs version 28 or higher.
+
+04:17.579 --> 04:19.574
+A section of my website
+
+04:19.574 --> 04:21.307
+is dedicated to them
+
+04:21.307 --> 04:23.840
+as well as to all my other
+
+04:23.840 --> 04:27.620
+Emacs-related contributions.
+
+04:27.620 --> 04:30.274
+For the remainder of this 40-minute talk,
+
+04:30.274 --> 04:31.907
+I will explain how Emacs
+
+04:31.907 --> 04:34.240
+made me appreciate software freedom,
+
+04:34.240 --> 04:36.374
+how it empowers me
+
+04:36.374 --> 04:38.924
+in my day-to-day computing,
+
+04:38.924 --> 04:40.374
+and the lessons I have drawn
+
+04:40.374 --> 00:04:44.206
+from that liberating experience.
+
+04:44.207 --> 04:47.174
+So let's proceed to the body
+
+04:47.174 --> 04:48.407
+of this presentation,
+
+04:48.407 --> 04:51.740
+and the first section is titled:
+
+04:51.740 --> 04:54.807
+"The inherent Emacs qualities
+
+04:54.807 --> 04:56.860
+for an autodidact."
+
+04:56.860 --> 05:00.440
+Emacs has this reputation
+
+05:00.440 --> 05:02.774
+of being extremely hard to learn
+
+05:02.774 --> 05:06.469
+and difficult to get started with.
+
+05:06.469 --> 05:08.140
+So how does someone like me,
+
+05:08.140 --> 05:10.607
+who was not even tech-literate
+
+05:10.607 --> 05:11.907
+a few years ago,
+
+05:11.907 --> 05:15.120
+go on to use Emacs effectively?
+
+05:15.120 --> 05:16.640
+How do you start from zero,
+
+05:16.640 --> 05:19.140
+with no knowledge of ELisp
+
+05:19.140 --> 05:22.174
+and with only a rudimentary understanding
+
+05:22.174 --> 05:23.474
+of programming,
+
+05:23.474 --> 05:25.974
+to eventually maintain packages for Emacs,
+
+05:25.974 --> 05:29.430
+and even contribute directly to emacs.git
+
+05:29.430 --> 05:32.710
+and other sources?
+
+05:32.710 --> 05:35.207
+The answer to these and related questions
+
+05:35.207 --> 05:37.974
+lies in the very description of Emacs
+
+05:37.974 --> 05:41.539
+as a "self-documenting" piece of software.
+
+05:41.539 --> 05:45.574
+It means that Emacs has a robust Help system
+
+05:45.574 --> 05:48.207
+which informs you about the state
+
+05:48.207 --> 05:50.930
+of a given construct.
+
+05:50.930 --> 05:53.574
+Such as what the original and current values
+
+05:53.574 --> 05:56.430
+of a variable are.
+
+05:56.430 --> 05:58.574
+Or whether some function is being "advised",
+
+05:58.574 --> 05:59.640
+as it is known,
+
+05:59.640 --> 06:02.440
+else, dynamically adjusted,
+
+06:02.440 --> 06:04.074
+by another function,
+
+06:04.074 --> 06:08.939
+and what that advice amounts to.
+
+06:08.939 --> 06:10.907
+The self-documenting nature of Emacs
+
+06:10.907 --> 06:12.407
+is combined with the fact
+
+06:12.407 --> 06:16.319
+that it consists of free software.
+
+06:16.319 --> 06:18.040
+Not only do we get information
+
+06:18.040 --> 06:19.540
+about what Emacs knows,
+
+06:19.540 --> 06:22.009
+but have the underlying code
+
+06:22.009 --> 06:24.099
+readily available to us.
+
+06:24.099 --> 06:26.840
+For example, every Help buffer
+
+06:26.840 --> 06:29.107
+provides a link to the source
+
+06:29.107 --> 06:31.490
+of the item it references.
+
+06:31.490 --> 06:37.960
+We can study that and edit it as we wish.
+
+06:37.960 --> 06:39.340
+Self-documentation and free software
+
+06:39.340 --> 06:41.307
+are blended together
+
+06:41.307 --> 06:45.007
+with a third quality of Emacs:
+
+06:45.007 --> 06:48.174
+its implementation as a Lisp machine,
+
+06:48.174 --> 06:52.440
+or else, its ability to evaluate Lisp code
+
+06:52.440 --> 06:56.129
+and make use of it directly.
+
+06:56.129 --> 06:58.774
+The ubiquity and uniformity
+
+06:58.774 --> 07:00.307
+of the Lisp interpreter,
+
+07:00.307 --> 07:04.007
+together with the immediacy of its results
+
+07:04.007 --> 07:06.580
+help one learn how to use Emacs
+
+07:06.580 --> 07:10.360
+and how to write Emacs Lisp expressions.
+
+07:10.360 --> 07:13.474
+For someone who is self-taught like me
+
+07:13.474 --> 07:15.307
+and who often learns through
+
+07:15.307 --> 07:17.507
+a process of trial and error,
+
+07:17.507 --> 07:20.589
+this is of great value.
+
+07:20.589 --> 07:23.074
+Learning how to use Emacs
+
+07:23.074 --> 07:25.007
+and how to write in ELisp
+
+07:25.007 --> 07:27.707
+is the basic skillset you need
+
+07:27.707 --> 07:30.474
+to also start extending Emacs
+
+07:30.474 --> 07:32.140
+for your own use,
+
+07:32.140 --> 07:34.807
+or even for publishing packages
+
+07:34.807 --> 07:36.607
+and making contributions
+
+07:36.607 --> 07:40.490
+to emacs.git directly.
+
+07:40.490 --> 07:42.840
+That is because the skills you acquire
+
+07:42.840 --> 07:46.974
+by tinkering with your init.el as a beginner
+
+07:46.974 --> 07:49.207
+will always stay with you
+
+07:49.207 --> 07:53.550
+throughout your time as an Emacs user.
+
+07:53.550 --> 07:56.210
+That is empowering in itself.
+
+07:56.210 --> 07:58.593
+It rewards your investment
+
+07:58.593 --> 08:00.270
+in time and effort.
+
+08:00.270 --> 08:01.374
+The more you learn,
+
+08:01.374 --> 08:03.340
+the more capable you become
+
+08:03.340 --> 08:06.007
+to enact change,
+
+08:06.007 --> 08:08.074
+to configure things to your liking
+
+08:08.074 --> 08:11.974
+and develop the exact workflow that you want
+
+08:11.974 --> 08:16.569
+without making any compromises.
+
+08:16.569 --> 08:18.507
+Compare that to, say,
+
+08:18.507 --> 08:21.449
+my tiling window manager.
+
+08:21.449 --> 08:24.479
+I can configure it with a shell script.
+
+08:24.479 --> 08:29.689
+So I learn POSIX shell or, let's say, Bash.
+
+08:29.689 --> 08:31.804
+But my knowledge of the shell
+
+08:31.804 --> 08:34.072
+does not extend to modifying
+
+08:34.072 --> 08:37.593
+the behaviour of the window manager as such,
+
+08:37.593 --> 08:40.471
+because that is not implemented
+
+08:40.471 --> 08:42.140
+as a shell script,
+
+08:42.140 --> 08:44.250
+but in another language.
+
+08:44.250 --> 08:46.942
+So for an autodidact like me,
+
+08:46.942 --> 08:49.634
+it is more difficult to learn
+
+08:49.634 --> 08:51.430
+yet another paradigm
+
+08:51.430 --> 08:54.860
+before I can achieve what I want.
+
+08:54.860 --> 08:57.342
+How do you make that extra step
+
+08:57.342 --> 08:59.437
+without self-documentation
+
+08:59.437 --> 09:02.605
+and the immediacy as well as transparency
+
+09:02.605 --> 09:04.307
+that you get from
+
+09:04.307 --> 09:06.850
+the Emacs Lisp interpreter?
+
+09:06.850 --> 09:10.029
+It is more demanding,
+
+09:10.029 --> 09:12.843
+which makes Emacs comparatively easier
+
+09:12.843 --> 09:14.274
+when we account for
+
+09:14.274 --> 00:09:17.106
+the longer-term effort involved.
+
+09:17.107 --> 09:21.410
+Let's move to the next section:
+
+09:21.410 --> 09:24.640
+"The interconnectedness of the Emacs space."
+
+09:24.640 --> 09:27.607
+As I already mentioned,
+
+09:27.607 --> 09:28.874
+Emacs rewards you
+
+09:28.874 --> 09:31.374
+for the investment in time and effort
+
+09:31.374 --> 09:33.649
+you put into it.
+
+09:33.649 --> 09:34.891
+In my experience,
+
+09:34.891 --> 09:36.707
+this makes it easier to master
+
+09:36.707 --> 09:38.007
+than a combination
+
+09:38.007 --> 09:40.434
+of otherwise disparate tools,
+
+09:40.434 --> 09:42.649
+each with its own paradigm
+
+09:42.649 --> 09:45.440
+of interaction and particularities
+
+09:45.440 --> 09:48.350
+of implementation.
+
+09:48.350 --> 09:50.035
+Before switching to Emacs,
+
+09:50.035 --> 09:51.507
+I was using a combination
+
+09:51.507 --> 09:53.640
+of standalone programs
+
+09:53.640 --> 09:56.274
+as part of a bespoke computing environment
+
+09:56.274 --> 09:58.860
+that I had pieced together.
+
+09:58.860 --> 10:00.507
+The program called "Mutt"
+
+10:00.507 --> 10:02.140
+would handle my emails,
+
+10:02.140 --> 10:06.440
+Newsboat dealt with my RSS feeds,
+
+10:06.440 --> 10:08.407
+the Music Player Daemon
+
+10:08.407 --> 10:10.907
+took care of my music collection,
+
+10:10.907 --> 10:12.207
+while I was doing work
+
+10:12.207 --> 10:14.507
+inside of a terminal emulator
+
+10:14.507 --> 10:17.707
+which was running a multiplexer (tmux)
+
+10:17.707 --> 10:22.959
+and Vim for on-the-fly text editing.
+
+10:22.959 --> 10:25.707
+Each of these, and others related to them,
+
+10:25.707 --> 10:29.290
+are fine in their own right.
+
+10:29.290 --> 10:32.507
+But their gestalt, their combined form,
+
+10:32.507 --> 10:35.680
+leaves something to be desired.
+
+10:35.680 --> 10:38.174
+Their lack of homogeneity
+
+10:38.174 --> 10:40.800
+meant that I could not develop
+
+10:40.800 --> 10:43.240
+portable skills between them.
+
+10:43.240 --> 10:45.740
+There is no inter-operability.
+
+10:46.329 --> 10:48.140
+What holds true in Vim
+
+10:48.140 --> 10:50.210
+does not apply to the multiplexer.
+
+10:50.210 --> 10:53.240
+The prevalent methods in the email client
+
+10:53.240 --> 10:59.140
+cannot be used in the RSS reader, and so on.
+
+10:59.140 --> 10:59.940
+Whereas everything
+
+10:59.940 --> 11:02.207
+that is implemented in ELisp
+
+11:02.207 --> 11:04.440
+partakes in the same environment
+
+11:04.440 --> 11:05.540
+automatically.
+
+11:05.540 --> 11:08.574
+If, say, you know how to
+
+11:08.574 --> 11:10.174
+use keyboard macros to edit code,
+
+11:10.174 --> 11:12.274
+you already know how to
+
+11:12.274 --> 11:13.507
+use the exact same skill to,
+
+11:13.507 --> 11:19.221
+for example, create and delete windows
+
+11:19.221 --> 11:23.219
+in a process that involves text editing
+
+11:23.219 --> 11:25.107
+and some elaborate
+
+11:25.107 --> 11:27.340
+file management operations
+
+11:27.340 --> 11:30.607
+with Emacs's directory editor program,
+
+11:30.607 --> 11:33.107
+or file manager, Dired.
+
+11:33.107 --> 11:35.307
+If you have a command
+
+11:35.307 --> 11:38.374
+that scrolls down half a screen,
+
+11:38.374 --> 11:40.174
+it immediately works in all your buffers,
+
+11:40.174 --> 11:44.140
+regardless of whether their major mode
+
+11:44.140 --> 11:46.674
+is about reading emails, editing text,
+
+11:46.674 --> 11:51.269
+enqueuing songs to a playlist, and so on.
+
+11:51.269 --> 11:55.582
+Emacs provides a level of integration
+
+11:55.582 --> 11:58.420
+that I consider peerless.
+
+11:58.420 --> 12:00.471
+Everything the user deals with
+
+12:00.471 --> 12:02.060
+is implemented in ELisp.
+
+12:02.060 --> 12:04.402
+And all the user edits
+
+12:04.402 --> 12:07.459
+is ultimately done with ELisp.
+
+12:07.459 --> 12:10.463
+As such, the environment itself
+
+12:10.463 --> 12:13.749
+provides the conditions for drawing
+
+12:13.749 --> 12:15.774
+linkages between different,
+
+12:15.774 --> 12:18.540
+yet [consubstantial],
+
+12:18.540 --> 12:21.339
+modes of interaction.
+
+12:21.339 --> 12:25.040
+For example, I use bongo.el
+
+12:25.040 --> 12:26.406
+to play back songs
+
+12:26.406 --> 12:29.110
+from my music collection.
+
+12:29.110 --> 12:30.340
+My ~/Music directory
+
+12:30.340 --> 12:33.440
+is configured to have a special minor mode,
+
+12:33.440 --> 12:36.440
+so when I access it with dired,
+
+12:36.440 --> 12:38.407
+it has commands that allow me
+
+12:38.407 --> 12:41.140
+to enqueue albums/songs
+
+12:41.140 --> 12:42.074
+to a playlist,
+
+12:42.074 --> 12:44.999
+create playlists, et cetera.
+
+12:44.999 --> 12:48.307
+Also, I have an org-capture template
+
+12:48.307 --> 12:51.174
+which lets me store the details
+
+12:51.174 --> 12:53.274
+of the currently playing track
+
+12:53.274 --> 12:57.189
+and tag it accordingly.
+
+12:57.189 --> 12:59.603
+Continuing with the example of Bongo,
+
+12:59.603 --> 13:00.810
+I make it interface
+
+13:00.810 --> 13:04.210
+with my RSS reader, elfeed.el,
+
+13:04.210 --> 13:06.953
+by having the latter add
+
+13:06.953 --> 13:09.469
+podcast and video links
+
+13:09.469 --> 13:12.720
+to the former's playback queue.
+
+13:12.720 --> 13:14.131
+All this is done
+
+13:14.131 --> 13:15.709
+by simply re-using
+
+13:15.709 --> 13:18.283
+the same Emacs Lisp skills I learnt
+
+13:18.283 --> 13:23.120
+while configuring and extending Emacs.
+
+13:23.120 --> 13:26.989
+The interconnectedness of the Emacs space
+
+13:26.989 --> 13:29.160
+empowers the end-user.
+
+13:29.160 --> 13:33.149
+It makes such emergent workflows possible.
+
+13:33.149 --> 13:35.359
+And the best part is
+
+13:35.359 --> 13:38.334
+there are no dirty hacks involved:
+
+13:38.334 --> 13:41.690
+it is an innate feature of the system.
+
+13:41.690 --> 13:43.840
+You are leveraging the freedom
+
+13:43.840 --> 13:45.107
+that Emacs gives you
+
+13:45.107 --> 13:49.240
+in a way that confers agency on you.
+
+13:49.240 --> 13:50.970
+You assume the initiative.
+
+13:50.970 --> 13:53.707
+It gives you confidence
+
+13:53.707 --> 13:55.340
+to continue honing your skills
+
+13:55.340 --> 13:58.807
+in anticipation of further optimising---
+
+13:58.807 --> 13:59.807
+and controlling in full---
+
+13:59.807 --> 00:14:07.873
+your own integrated computing environment.
+
+14:07.874 --> 14:09.600
+Next section:
+
+14:09.600 --> 14:12.629
+the documentation culture
+
+14:12.629 --> 14:15.309
+of the Emacs community.
+
+14:15.309 --> 14:17.107
+If what I have mentioned thus far
+
+14:17.107 --> 14:19.140
+was all there was
+
+14:19.140 --> 14:20.007
+to the Emacs experience,
+
+14:20.007 --> 14:21.440
+there would still be
+
+14:21.440 --> 14:24.209
+something to be desired.
+
+14:24.209 --> 14:26.721
+Because while self-documentation is great,
+
+14:26.721 --> 14:28.808
+it is meant to draw from---
+
+14:28.808 --> 14:30.741
+and be a complement to---
+
+14:30.741 --> 14:32.829
+some hand-written material.
+
+14:32.829 --> 14:35.807
+Both new and existing users
+
+14:35.807 --> 14:37.380
+must be able to read
+
+14:37.380 --> 14:41.740
+what something is supposed to do,
+
+14:41.740 --> 14:42.774
+what its main points of entry are,
+
+14:42.774 --> 14:47.279
+how it relates to other parts, and so on.
+
+14:47.279 --> 14:50.181
+This is about the human aspect of Emacs,
+
+14:50.181 --> 14:52.280
+the strong documentation culture
+
+14:52.280 --> 14:53.425
+of its community,
+
+14:53.425 --> 14:55.589
+rather than an irreducible feature
+
+14:55.589 --> 14:58.839
+of the program we use.
+
+14:58.839 --> 15:02.393
+As a matter of packaging etiquette,
+
+15:02.393 --> 15:06.552
+every non-trivial form in an Elisp library
+
+15:06.552 --> 15:09.920
+must have a documentation string.
+
+15:09.920 --> 15:12.785
+What a variable or function does
+
+15:12.785 --> 15:16.189
+needs to be spelt out in clear terms.
+
+15:16.189 --> 15:17.788
+Furthermore, the best
+
+15:17.788 --> 15:20.333
+and most well-maintained packages,
+
+15:20.333 --> 15:22.507
+whether those are built into Emacs
+
+15:22.507 --> 15:24.440
+or distributed via
+
+15:24.440 --> 15:27.540
+an Emacs Lisp Package Archive,
+
+15:27.540 --> 15:28.674
+also known as ELPA,
+
+15:28.674 --> 15:33.350
+come with their own Info manual.
+
+15:33.350 --> 15:34.944
+Unlike a generic README,
+
+15:34.944 --> 15:37.112
+those manuals are more like
+
+15:37.112 --> 15:38.738
+fully fledged books,
+
+15:38.738 --> 15:42.146
+with a table of contents, cross-references,
+
+15:42.146 --> 15:45.107
+and indices for concepts, functions,
+
+15:45.107 --> 15:47.189
+variables, key bindings...
+
+15:47.189 --> 15:49.555
+In short, there is a tradition
+
+15:49.555 --> 15:52.262
+around programming with Emacs Lisp
+
+15:52.262 --> 15:55.387
+which values informative,
+
+15:55.387 --> 15:58.451
+high-quality guidelines
+
+15:58.451 --> 16:01.389
+intended for end-users.
+
+16:01.389 --> 16:02.274
+Apart from what
+
+16:02.274 --> 16:04.684
+each individual package does,
+
+16:04.684 --> 16:06.712
+Emacs itself ships with
+
+16:06.712 --> 16:10.174
+a helpful tutorial for newcomers,
+
+16:10.174 --> 16:11.374
+a comprehensive manual,
+
+16:11.374 --> 16:14.940
+a book targeted at non-programmers
+
+16:14.940 --> 16:17.474
+titled "An Introduction to
+
+16:17.474 --> 16:20.107
+Programming in Emacs Lisp",
+
+16:20.107 --> 16:21.307
+as well as a reference manual
+
+16:21.307 --> 16:24.290
+for Emacs Lisp itself.
+
+16:24.290 --> 16:25.999
+All this material,
+
+16:25.999 --> 16:28.699
+all that wealth of knowledge,
+
+16:28.699 --> 16:31.605
+is readily available to the end-user
+
+16:31.605 --> 16:34.350
+through the built-in Info reader.
+
+16:34.350 --> 16:37.936
+The details on how to access the Info reader
+
+16:37.936 --> 16:40.512
+are already explained
+
+16:40.512 --> 16:45.080
+in the initial learn-by-doing tutorial.
+
+16:45.080 --> 16:47.440
+For people like me who are self-taught,
+
+16:47.440 --> 16:51.408
+the documentation culture of the community
+
+16:51.408 --> 16:55.600
+ensures that we are not left behind.
+
+16:55.600 --> 16:56.840
+It gives us the chance
+
+16:56.840 --> 16:59.011
+to learn from the experts
+
+16:59.011 --> 17:03.639
+and to become better ourselves.
+
+17:03.639 --> 17:06.340
+Writing concise and clear documentation
+
+17:06.340 --> 17:09.474
+is also beneficial for those who do it:
+
+17:09.474 --> 17:10.707
+it helps them clarify their ideas
+
+17:10.707 --> 17:17.250
+and improve their communication skills.
+
+17:17.250 --> 17:19.868
+These contribute to fostering
+
+17:19.868 --> 17:22.399
+a more humane social element.
+
+17:22.399 --> 17:25.774
+In my experience, the Emacs community
+
+17:25.774 --> 17:30.646
+has a propensity against
+
+17:30.646 --> 17:32.149
+becoming elitist.
+
+17:32.149 --> 17:34.907
+It helps integrate new members
+
+17:34.907 --> 17:37.732
+by not hiding anything from them,
+
+17:37.732 --> 17:39.040
+on top of Emacs' inherent
+
+17:39.040 --> 17:43.470
+emancipatory qualities, as described before
+
+17:43.470 --> 17:46.374
+(self-documentation, Elisp interpreter,
+
+17:46.374 --> 17:47.960
+free software).
+
+17:47.960 --> 17:49.807
+At the same time,
+
+17:49.807 --> 17:52.899
+the community strives for excellence,
+
+17:52.899 --> 17:54.840
+so it expects newcomers
+
+17:54.840 --> 17:56.940
+to do their part in reading
+
+17:56.940 --> 18:00.680
+what is generously offered to them.
+
+18:00.680 --> 18:01.940
+There is a difference between
+
+18:01.940 --> 18:03.240
+sharing knowledge
+
+18:03.240 --> 18:06.740
+and spoon-feeding it to users.
+
+18:06.740 --> 18:09.140
+The latter method, that of spoon-feeding,
+
+18:09.140 --> 18:11.499
+keeps users dependent on it
+
+18:11.499 --> 18:14.574
+and is thus detrimental to them
+
+18:14.574 --> 18:15.940
+in the long run.
+
+18:15.940 --> 18:18.374
+The Emacs community
+
+18:18.374 --> 18:20.507
+disseminates what it knows
+
+18:20.507 --> 18:23.974
+and wants newcomers to assume agency
+
+18:23.974 --> 18:26.907
+and be responsible for doing their part
+
+18:26.907 --> 18:30.740
+in learning how things work.
+
+18:30.740 --> 18:33.307
+The community's documentation culture
+
+18:33.307 --> 18:36.074
+and uncompromising standards
+
+18:36.074 --> 18:37.674
+ensure that even
+
+18:37.674 --> 18:41.174
+once-unskilled users like me
+
+18:41.174 --> 18:43.707
+can become productive with Emacs
+
+18:43.707 --> 18:46.574
+and unleash its full potential.
+
+18:46.574 --> 18:50.488
+What newcomers need is commitment
+
+18:50.488 --> 00:18:55.039
+and an open mind to study what they have.
+
+18:55.040 --> 18:58.269
+Next section:
+
+18:58.269 --> 18:59.707
+"The Promethean Ideal
+
+18:59.707 --> 19:05.230
+of freeing know-how and expertise."
+
+19:05.230 --> 19:06.807
+The documentation culture
+
+19:06.807 --> 19:08.074
+of the Emacs community
+
+19:08.074 --> 19:10.307
+springs from a consideration
+
+19:10.307 --> 19:12.840
+of practicality.
+
+19:12.840 --> 19:15.351
+When you explain what your program does,
+
+19:15.351 --> 19:16.505
+it is more likely
+
+19:16.505 --> 19:19.477
+that others will show interest in it
+
+19:19.477 --> 19:22.450
+and incorporate it in their workflow,
+
+19:22.450 --> 19:24.674
+whereas freed source code
+
+19:24.674 --> 19:26.085
+that is distributed
+
+19:26.085 --> 19:29.309
+without any accompanying documentation
+
+19:29.309 --> 19:32.300
+will most likely only attract
+
+19:32.300 --> 19:35.690
+a handful of enthusiastic hackers.
+
+19:35.690 --> 19:39.460
+Still good, but could be better.
+
+19:39.460 --> 19:41.640
+Apart from its practical use though,
+
+19:41.640 --> 19:44.407
+writing documentation for the end-user
+
+19:44.407 --> 19:47.140
+shows a spirit of altruism,
+
+19:47.140 --> 19:50.274
+an ethos of caring for others
+
+19:50.274 --> 19:52.540
+and wanting to empower them
+
+19:52.540 --> 19:55.130
+in their endeavours.
+
+19:55.130 --> 19:57.774
+It essentially is the same
+
+19:57.774 --> 19:58.674
+as helping someone;
+
+19:58.674 --> 20:02.607
+helping them escape from the ignorance
+
+20:02.607 --> 20:03.907
+that contributes
+
+20:03.907 --> 20:07.810
+to their sense of powerlessness.
+
+20:07.810 --> 20:09.974
+I experienced this myself:
+
+20:09.974 --> 20:12.007
+by reading the docs,
+
+20:12.007 --> 20:13.450
+I was able to go from
+
+20:13.450 --> 20:15.274
+an unskilled rookie
+
+20:15.274 --> 20:17.909
+to a competent Emacs user.
+
+20:17.909 --> 20:20.839
+Part of that competence consists in
+
+20:20.839 --> 20:23.037
+maintaining Elisp packages
+
+20:23.037 --> 20:25.480
+and contributing code directly
+
+20:25.480 --> 20:28.760
+to emacs.git.
+
+20:28.760 --> 20:29.740
+Writing documentation
+
+20:29.740 --> 20:31.207
+is about disseminating
+
+20:31.207 --> 20:34.015
+knowledge and expertise,
+
+20:34.015 --> 20:36.707
+not keeping it an exclusive right
+
+20:36.707 --> 20:39.919
+of some elite.
+
+20:39.919 --> 20:42.928
+Allow me then to liken this
+
+20:42.928 --> 20:47.120
+to the ancient Greek myth of Prometheas
+
+20:47.120 --> 20:48.559
+(Prometheus).
+
+20:48.559 --> 20:52.972
+Prometheas was a titan, or else a deity,
+
+20:52.972 --> 20:54.988
+who decided to teach
+
+20:54.988 --> 20:57.772
+the know-how of handling fire
+
+20:57.772 --> 20:59.020
+to humanity.
+
+20:59.020 --> 21:00.447
+The art of fire
+
+21:00.447 --> 21:04.192
+is an allegory about know-how in general,
+
+21:04.192 --> 21:06.840
+not specifically pyrotechnics.
+
+21:06.840 --> 21:11.571
+So Prometheas liberated that key knowledge
+
+21:11.571 --> 21:13.215
+by taking it away
+
+21:13.215 --> 21:16.231
+from the exclusivity of the gods
+
+21:16.231 --> 21:17.693
+and bringing it
+
+21:17.693 --> 21:21.512
+into the domain of humankind
+
+21:21.512 --> 21:24.390
+as a libre resource.
+
+21:24.390 --> 21:26.507
+This act of altruism
+
+21:26.507 --> 21:30.029
+propelled humanity to new heights.
+
+21:30.029 --> 21:32.590
+Every field of expertise
+
+21:32.590 --> 21:35.255
+is about handling "fire",
+
+21:35.255 --> 21:38.681
+in the figurative sense
+
+21:38.681 --> 21:43.679
+of implementing essential know-how.
+
+21:43.679 --> 21:47.123
+Why would Prometheas, an exalted being,
+
+21:47.123 --> 21:48.586
+ever bother with
+
+21:48.586 --> 21:52.250
+the fallible and frail humanity?
+
+21:52.250 --> 21:56.007
+Why did a god want to empower humans
+
+21:56.007 --> 22:00.077
+instead of, say, making them dependent
+
+22:00.077 --> 22:02.970
+on the know-how of "fire"?
+
+22:02.970 --> 22:05.747
+If we look at the world around us,
+
+22:05.747 --> 22:07.970
+we witness how its overlords
+
+22:07.970 --> 22:10.186
+are unscrupulously trying
+
+22:10.186 --> 22:12.274
+to enclose the commons
+
+22:12.274 --> 22:16.076
+and take advantage of expertise
+
+22:16.076 --> 22:18.809
+in order to exploit us.
+
+22:18.809 --> 22:22.700
+Why would Prometheas not do the same thing
+
+22:22.700 --> 22:27.570
+and enslave us for the rest of eternity?
+
+22:27.570 --> 22:29.343
+The answer is that
+
+22:29.343 --> 22:32.891
+unlike this world's aspiring tyrants,
+
+22:32.891 --> 22:36.842
+Prometheas represents a higher conscience,
+
+22:36.842 --> 22:40.640
+one that is not corrupted by egocentrism
+
+22:40.640 --> 22:45.510
+and the greed of short-term profiteering.
+
+22:45.510 --> 22:47.490
+This higher conscience
+
+22:47.490 --> 22:50.332
+makes sense of the bigger picture
+
+22:50.332 --> 22:51.710
+and can foresee
+
+22:51.710 --> 22:54.260
+that the distribution of know-how
+
+22:54.260 --> 22:56.960
+empowers those who access it freely
+
+22:56.960 --> 23:00.530
+to reach their potential.
+
+23:00.530 --> 23:04.650
+It is no coincidence that the ancient sages
+
+23:04.650 --> 23:09.320
+used the name "Prometheas",
+
+23:09.320 --> 23:16.659
+meaning the "prescient one", the "foreseer".
+
+23:16.659 --> 23:19.765
+This is a lesson on the outlook
+
+23:19.765 --> 23:21.791
+we ought to maintain,
+
+23:21.791 --> 23:25.330
+where we aspire to our highest.
+
+23:25.330 --> 23:28.501
+We want to be the best version of ourselves,
+
+23:28.501 --> 23:31.710
+by being more like Prometheas.
+
+23:31.710 --> 23:33.940
+We want our actions to be guided
+
+23:33.940 --> 23:36.674
+by this Promethean Ideal
+
+23:36.674 --> 23:39.097
+of liberating know-how,
+
+23:39.097 --> 23:42.307
+of making expertise readily available,
+
+23:42.307 --> 23:44.507
+and of providing others
+
+23:44.507 --> 23:48.350
+with the chance to prosper.
+
+23:48.350 --> 23:49.927
+When we all do so,
+
+23:49.927 --> 23:52.500
+we are collectively better-off.
+
+23:52.500 --> 23:56.340
+Free software is a microcosm
+
+23:56.340 --> 00:23:59.528
+of that principle.
+
+23:59.529 --> 24:02.940
+So let's move on to the next section:
+
+24:02.940 --> 24:08.020
+"The 'killer apps' of Emacs."
+
+24:08.020 --> 24:10.860
+Let's be a bit more practical now.
+
+24:10.860 --> 24:13.789
+Many new users are attracted to Emacs
+
+24:13.789 --> 24:16.066
+because it has one or a few
+
+24:16.066 --> 24:18.858
+immensely useful applications
+
+24:18.858 --> 24:21.000
+they would like to use.
+
+24:21.000 --> 24:23.019
+This typically covers Org
+
+24:23.019 --> 24:27.090
+and/or one of its numerous accoutrements,
+
+24:27.090 --> 24:33.023
+though there are other excellent packages
+
+24:33.023 --> 24:34.760
+like Magit.
+
+24:34.760 --> 24:36.107
+The fact that Emacs has
+
+24:36.107 --> 24:38.870
+such killer apps is good.
+
+24:38.870 --> 24:41.535
+It shows that its extensibility
+
+24:41.535 --> 24:44.200
+is not some theoretical upside
+
+24:44.200 --> 24:46.340
+of the Lisp interpreter.
+
+24:46.340 --> 24:49.816
+It has tangible utility to a wide user base,
+
+24:49.816 --> 24:51.940
+including those who do not
+
+24:51.940 --> 24:54.850
+write Elisp themselves.
+
+24:54.850 --> 24:57.927
+Furthermore, those killer apps are good
+
+24:57.927 --> 25:00.418
+as they help bring newcomers
+
+25:00.418 --> 25:04.370
+and potential contributors to the fold,
+
+25:04.370 --> 25:06.968
+while they provide real value
+
+25:06.968 --> 25:10.519
+to the existing members of the community.
+
+25:10.519 --> 25:12.339
+The more people we have
+
+25:12.339 --> 25:15.330
+and the happier they are with Emacs,
+
+25:15.330 --> 25:18.726
+the higher the chances that we receive
+
+25:18.726 --> 25:21.600
+some new ideas or code from them.
+
+25:21.600 --> 25:26.305
+The notion of a killer app does, however,
+
+25:26.305 --> 25:29.519
+come with a latent downside
+
+25:29.519 --> 25:32.040
+when targeted at outsiders
+
+25:32.040 --> 25:34.470
+to the Emacs milieu.
+
+25:34.470 --> 25:36.307
+And that is because
+
+25:36.307 --> 25:39.362
+packages like Org and Magit
+
+25:39.362 --> 25:42.000
+do not have a standalone presence.
+
+25:42.000 --> 25:46.770
+They are always used in Emacs or, rather,
+
+25:46.770 --> 25:50.840
+together with the rest of Emacs,
+
+25:50.840 --> 25:54.470
+which means that the user has to know
+
+25:54.470 --> 25:57.120
+what to expect from Emacs.
+
+25:57.120 --> 25:59.986
+You may be aware of the type of user
+
+25:59.986 --> 26:02.680
+who proclaims that they want to
+
+26:02.680 --> 26:04.785
+boost their productivity
+
+26:04.785 --> 26:08.070
+but who also expects immediate results.
+
+26:08.070 --> 26:11.152
+When you bring the "killer app" rhetoric
+
+26:11.152 --> 26:12.581
+to such a crowd,
+
+26:12.581 --> 26:15.608
+you run the risk of misleading them
+
+26:15.608 --> 26:18.720
+into a false sense of self-confidence
+
+26:18.720 --> 26:24.330
+and concomitant expectations of success.
+
+26:24.330 --> 26:26.655
+Such users may be tempted
+
+26:26.655 --> 26:29.249
+to try Org, Magit, and others
+
+26:29.249 --> 26:32.470
+but are most likely going to endure
+
+26:32.470 --> 26:36.179
+a frustrating experience overall.
+
+26:36.179 --> 26:39.834
+The reason is that they are oblivious
+
+26:39.834 --> 26:41.598
+to what Emacs is
+
+26:41.598 --> 26:44.874
+and what is required
+
+26:44.874 --> 26:46.540
+to get started with it
+
+26:46.540 --> 26:47.820
+on a sustainable basis.
+
+26:47.820 --> 26:50.874
+Org, Magit, and friends
+
+26:50.874 --> 26:54.899
+are fantastic tools in their own right.
+
+26:54.899 --> 26:57.399
+But they still are part of Emacs.
+
+26:57.399 --> 26:59.406
+To use them effectively,
+
+26:59.406 --> 27:01.109
+you have to develop
+
+27:01.109 --> 27:04.090
+at least a modicum of understanding
+
+27:04.090 --> 27:06.340
+on what Emacs does.
+
+27:06.340 --> 27:07.692
+You must be patient
+
+27:07.692 --> 27:09.519
+and approach this endeavour
+
+27:09.519 --> 27:12.500
+with an open mind.
+
+27:12.500 --> 27:14.372
+Go through the tutorial,
+
+27:14.372 --> 27:18.939
+familiarise yourself with the Help system,
+
+27:18.939 --> 27:23.401
+make a habit out of reading Info manuals,
+
+27:23.401 --> 27:26.820
+and take things slowly.
+
+27:26.820 --> 27:30.358
+No killer app can ever be a substitute
+
+27:30.358 --> 27:33.132
+for commitment to a cause;
+
+27:33.132 --> 27:35.621
+no vaunted life hack
+
+27:35.621 --> 27:39.771
+will ever provide a direct conduit
+
+27:39.771 --> 27:44.419
+to some fountain of wisdom.
+
+27:44.419 --> 27:46.597
+With regard to software freedom
+
+27:46.597 --> 27:48.094
+and user empowerment,
+
+27:48.094 --> 27:50.024
+what I have learnt is that
+
+27:50.024 --> 27:52.240
+the impulse for the killer app
+
+27:52.240 --> 27:53.974
+ought to emanate
+
+27:53.974 --> 27:56.707
+from a position of knowledge.
+
+27:56.707 --> 27:58.974
+You need to know what you are searching for,
+
+27:58.974 --> 28:00.107
+and you need to know
+
+28:00.107 --> 28:01.840
+where you will implement that.
+
+28:01.840 --> 28:06.571
+First, we need to temper our expectations
+
+28:06.571 --> 28:10.340
+and prefer propitious growth in learning
+
+28:10.340 --> 28:14.159
+over instant gratification.
+
+28:14.159 --> 28:17.323
+With Emacs, we have a strong foundation
+
+28:17.323 --> 28:19.245
+for our computing freedom:
+
+28:19.245 --> 28:21.951
+it consists of the inherent qualities
+
+28:21.951 --> 28:23.367
+of the program
+
+28:23.367 --> 28:27.051
+together with the documentation culture
+
+28:27.051 --> 28:30.169
+and creativity of the community.
+
+28:30.169 --> 28:32.670
+Once we learn how to benefit from those,
+
+28:32.670 --> 28:34.174
+we have everything we need
+
+28:34.174 --> 28:35.893
+to become proficient
+
+28:35.893 --> 28:38.592
+in all the modes of interaction
+
+28:38.592 --> 28:42.330
+that are available to us.
+
+28:42.330 --> 28:46.889
+Think of it as choosing Emacs and Org,
+
+28:46.889 --> 28:48.876
+Emacs and Magit,
+
+28:48.876 --> 00:28:53.139
+Emacs and Org and Magit, et cetera.
+
+28:53.140 --> 28:56.889
+Next section:
+
+28:56.889 --> 29:01.899
+"You can't be an Emacs tourist."
+
+29:01.899 --> 29:04.521
+What I just talked about implies that
+
+29:04.521 --> 29:06.799
+you cannot simply switch to Emacs
+
+29:06.799 --> 29:09.960
+over the weekend or on a whimsy.
+
+29:09.960 --> 29:12.915
+You can't use it opportunistically
+
+29:12.915 --> 29:14.603
+to run a quick demo
+
+29:14.603 --> 29:18.901
+with which to impress your peers
+
+29:18.901 --> 29:22.940
+and win some inane "nerd cred".
+
+29:22.940 --> 29:24.907
+Forget about such frivolous
+
+29:24.907 --> 29:26.170
+superficialities.
+
+29:26.170 --> 29:29.000
+Emacs is a sophisticated tool
+
+29:29.000 --> 29:32.600
+intended for some serious work.
+
+29:32.600 --> 29:35.436
+It has been around for several decades
+
+29:35.436 --> 29:38.116
+and it incorporates the knowledge
+
+29:38.116 --> 29:41.639
+of a diverse group of contributors.
+
+29:41.639 --> 29:43.616
+Even if you want to use Emacs
+
+29:43.616 --> 29:46.766
+just for Org mode or whatever killer app,
+
+29:46.766 --> 29:48.605
+you still have to try
+
+29:48.605 --> 29:51.059
+to learn things in earnest.
+
+29:51.059 --> 29:52.140
+You still need to read
+
+29:52.140 --> 29:54.196
+the relevant Info manual,
+
+29:54.196 --> 29:56.663
+understand how to make changes
+
+29:56.663 --> 30:00.006
+to the plethora of user options on offer,
+
+30:00.006 --> 30:03.117
+and generally don't feel lost
+
+30:03.117 --> 30:05.710
+while working with Emacs.
+
+30:05.710 --> 30:08.264
+This is more so if you use Emacs
+
+30:08.264 --> 30:09.967
+to its full potential
+
+30:09.967 --> 30:13.297
+as an integrated computing environment;
+
+30:13.297 --> 30:16.127
+as your general purpose interface
+
+30:16.127 --> 30:17.460
+to the computer,
+
+30:17.460 --> 30:19.633
+where you handle uniformly
+
+30:19.633 --> 30:21.726
+coding and writing prose,
+
+30:21.726 --> 30:23.820
+your email correspondence,
+
+30:23.820 --> 30:25.022
+your RSS feeds,
+
+30:25.022 --> 30:26.908
+your music collection,
+
+30:26.908 --> 30:30.626
+your agenda and to-do lists,
+
+30:30.626 --> 30:31.909
+and so on.
+
+30:31.909 --> 30:33.872
+The difficulty of Emacs
+
+30:33.872 --> 30:37.144
+is much higher for those who approach it
+
+30:37.144 --> 30:38.667
+without understanding
+
+30:38.667 --> 30:41.299
+what they are getting themselves into,
+
+30:41.299 --> 30:43.711
+or for those who are naive enough
+
+30:43.711 --> 30:47.294
+to believe that they can cheat their way
+
+30:47.294 --> 30:50.340
+out of learning the fundamentals.
+
+30:50.340 --> 30:51.574
+The gist is that
+
+30:51.574 --> 30:54.940
+you cannot be an Emacs tourist.
+
+30:54.940 --> 30:57.165
+You can't go into Emacsland
+
+30:57.165 --> 30:59.469
+thinking that you will spend
+
+30:59.469 --> 31:02.475
+a couple of memorable days there
+
+31:02.475 --> 31:04.206
+and head back home
+
+31:04.206 --> 31:05.755
+to regale others
+
+31:05.755 --> 31:08.580
+with stories about your adventures.
+
+31:08.580 --> 31:11.850
+It does not work that way.
+
+31:11.850 --> 31:15.250
+You commit to Emacs for the long-term,
+
+31:15.250 --> 31:17.990
+for the freedom it offers you.
+
+31:17.990 --> 31:20.142
+Freedom in the moral sense
+
+31:20.142 --> 31:23.123
+but also in the very practical ways
+
+31:23.123 --> 31:25.851
+in which you can mould and extend
+
+31:25.851 --> 31:27.907
+your personal workflows
+
+31:27.907 --> 31:31.160
+with precision.
+
+31:31.160 --> 31:32.773
+Now you may wonder
+
+31:32.773 --> 31:35.320
+why do I mention those things?
+
+31:35.320 --> 31:39.169
+Shouldn't we make Emacs easier for everyone?
+
+31:39.169 --> 31:42.333
+Yes, we should make everything
+
+31:42.333 --> 31:44.760
+as simple as possible.
+
+31:44.760 --> 31:48.031
+Though that still does not refashion Emacs
+
+31:48.031 --> 31:51.460
+into something entirely different.
+
+31:51.460 --> 31:52.740
+We continue to have
+
+31:52.740 --> 31:55.829
+a potent tool at our disposal
+
+31:55.829 --> 31:57.040
+that we must treat
+
+31:57.040 --> 32:00.020
+with the requisite respect.
+
+32:00.020 --> 32:03.954
+Take, for instance, the various frameworks
+
+32:03.954 --> 32:07.571
+that set up Emacs in an opinionated way
+
+32:07.571 --> 32:10.465
+so that newcomers get everything
+
+32:10.465 --> 32:13.360
+set up for them out-of-the-box.
+
+32:13.360 --> 32:14.507
+There is nothing wrong
+
+32:14.507 --> 32:16.220
+with those frameworks.
+
+32:16.220 --> 32:19.417
+In fact, a large part of the community
+
+32:19.417 --> 32:21.690
+uses them to great effect.
+
+32:21.690 --> 32:24.105
+However, the point stands:
+
+32:24.105 --> 32:26.342
+even after every package
+
+32:26.342 --> 32:28.490
+has been set up for you,
+
+32:28.490 --> 32:30.174
+you still have to put in the work
+
+32:30.174 --> 32:31.507
+in making use
+
+32:31.507 --> 32:35.360
+of your newfound computing freedom.
+
+32:35.360 --> 32:37.648
+But, you may insist,
+
+32:37.648 --> 32:41.789
+is that not some sort of gate-keeping?
+
+32:41.789 --> 32:43.750
+Are you not being an elitist
+
+32:43.750 --> 32:45.972
+by telling people how they must
+
+32:45.972 --> 32:48.009
+invest time and effort
+
+32:48.009 --> 32:49.804
+in making the best
+
+32:49.804 --> 32:52.639
+out of their Emacs experience?
+
+32:52.639 --> 32:56.830
+No, I think this is not elitism.
+
+32:56.830 --> 32:59.358
+There are no secrets here,
+
+32:59.358 --> 33:02.530
+no artificial barriers to entry,
+
+33:02.530 --> 33:06.562
+no impediments to making progress,
+
+33:06.562 --> 33:09.409
+no tricks and gimmicks.
+
+33:09.409 --> 33:13.460
+It just is a statement of fact.
+
+33:13.460 --> 33:16.309
+Freedom entails responsibility.
+
+33:16.309 --> 33:20.481
+It requires people to take the initiative
+
+33:20.481 --> 33:23.728
+and assert control over the factors
+
+33:23.728 --> 33:26.420
+that are within their reach.
+
+33:26.420 --> 33:29.267
+Freedom ultimately means
+
+33:29.267 --> 33:33.254
+that we no longer remain dependent
+
+33:33.254 --> 33:35.419
+on being spoon-fed.
+
+33:35.419 --> 00:33:39.173
+We assume agency.
+
+33:39.174 --> 33:41.540
+And with this, I want to come to
+
+33:41.540 --> 33:44.940
+the final section of this presentation.
+
+33:44.940 --> 33:46.407
+The title is:
+
+33:46.407 --> 33:52.250
+"Emacs as a champion of software freedom."
+
+33:52.250 --> 33:56.272
+To my mind, Emacs is the embodiment
+
+33:56.272 --> 33:59.289
+of the GNU project's ethos.
+
+33:59.289 --> 34:01.245
+Everything you expect from a program
+
+34:01.245 --> 34:02.990
+that is underpinned by the values
+
+34:02.990 --> 34:05.342
+of software freedom
+
+34:05.342 --> 34:07.460
+is found in Emacs.
+
+34:07.460 --> 34:10.962
+What you get is not merely an ethical tool,
+
+34:10.962 --> 34:13.032
+important though that is,
+
+34:13.032 --> 34:17.405
+but also a gift that will keep on giving;
+
+34:17.405 --> 34:20.840
+a gift for you to further empower yourself
+
+34:20.840 --> 34:24.020
+as a computer user.
+
+34:24.020 --> 34:27.457
+I understood that freedom of software
+
+34:27.457 --> 34:31.600
+is not about liberating the code itself.
+
+34:31.600 --> 34:34.950
+It is about sharing libre code
+
+34:34.950 --> 34:38.410
+in order to emancipate the user.
+
+34:38.410 --> 34:40.899
+The best way to achieve that
+
+34:40.899 --> 34:43.302
+is by emulating Prometheas:
+
+34:43.302 --> 34:47.187
+don't just give people the so-called "fire";
+
+34:47.187 --> 34:50.907
+offer them the underlying know-how.
+
+34:50.907 --> 34:52.940
+Emacs taught me
+
+34:52.940 --> 34:54.378
+the virtues of software freedom
+
+34:54.378 --> 34:57.362
+in a way that nothing else
+
+34:57.362 --> 35:01.150
+in the GNU/Linux space ever did.
+
+35:01.150 --> 35:04.210
+Here's an example from a few years ago.
+
+35:04.210 --> 35:07.050
+I needed a Markdown editor.
+
+35:07.050 --> 35:09.099
+I wanted it to centre
+
+35:09.099 --> 35:12.080
+the body of the text on display.
+
+35:12.080 --> 35:15.384
+It should have configurable font families
+
+35:15.384 --> 35:17.030
+and point sizes.
+
+35:17.030 --> 35:19.646
+Spell checking for Greek and English
+
+35:19.646 --> 35:20.990
+should be included.
+
+35:20.990 --> 35:25.007
+The colours had to be editable as well,
+
+35:25.007 --> 35:26.940
+so I could adjust them
+
+35:26.940 --> 35:30.064
+to a level of legibility
+
+35:30.064 --> 35:32.760
+I was comfortable with.
+
+35:32.760 --> 35:35.657
+While there were plenty of libre programs,
+
+35:35.657 --> 35:37.174
+I did not find one
+
+35:37.174 --> 35:39.905
+I could control and inspect
+
+35:39.905 --> 35:43.190
+to the extent I can with Emacs.
+
+35:43.190 --> 35:46.982
+Which made me feel that I had stagnated:
+
+35:46.982 --> 35:49.572
+there was an indelible line
+
+35:49.572 --> 35:53.500
+dividing users from developers.
+
+35:53.500 --> 35:55.899
+Whereas Emacs invites you
+
+35:55.899 --> 35:58.106
+to blur the distinction
+
+35:58.106 --> 36:00.590
+between user and the developer.
+
+36:00.590 --> 36:03.837
+It furnishes the means to become
+
+36:03.837 --> 36:05.510
+proficient in it,
+
+36:05.510 --> 36:07.717
+while the community complements those
+
+36:07.717 --> 36:10.744
+with its documentation culture
+
+36:10.744 --> 36:12.990
+and overall creativity.
+
+36:12.990 --> 36:15.679
+You start off as a complete ignoramus,
+
+36:15.679 --> 36:19.190
+but soon pick up skills that remain useful
+
+36:19.190 --> 36:22.200
+for as long as you work with Emacs.
+
+36:22.200 --> 36:23.574
+And if you really want to
+
+36:23.574 --> 36:25.150
+take it a step further,
+
+36:25.150 --> 36:27.569
+you know where to look
+
+36:27.569 --> 36:30.620
+for inspiration and guidance.
+
+36:30.620 --> 36:32.722
+Before you realise it,
+
+36:32.722 --> 36:35.556
+you start writing code in ELisp
+
+36:35.556 --> 36:39.030
+and can one day share it with others.
+
+36:39.030 --> 36:42.060
+What I have learnt over the past 2.5 years
+
+36:42.060 --> 36:43.331
+as an Emacs user
+
+36:43.331 --> 36:45.661
+is that if you go from scratch
+
+36:45.661 --> 36:48.442
+and are meticulous in your approach,
+
+36:48.442 --> 36:51.379
+you will need a few days or weeks
+
+36:51.379 --> 36:54.750
+before everything starts to make sense.
+
+36:54.750 --> 36:57.477
+After that initial awkward phase
+
+36:57.477 --> 37:00.428
+during which you familiarise yourself
+
+37:00.428 --> 37:01.748
+with the basics,
+
+37:01.748 --> 37:06.050
+everything else will become easier to learn.
+
+37:06.050 --> 37:09.524
+It is a matter of gaining more experience,
+
+37:09.524 --> 37:11.060
+one step at a time.
+
+37:11.060 --> 37:13.537
+As with every field of expertise,
+
+37:13.537 --> 37:15.870
+Emacs expects you to work for it
+
+37:15.870 --> 37:19.110
+and to earn it.
+
+37:19.110 --> 37:21.240
+For me, that is worth it.
+
+37:21.240 --> 37:23.655
+In terms of being malleable
+
+37:23.655 --> 37:25.294
+in a consistent way
+
+37:25.294 --> 37:28.388
+and transparent in what it does,
+
+37:28.388 --> 37:31.390
+Emacs is in a league of its own.
+
+37:31.390 --> 37:33.707
+In conclusion, folks,
+
+37:33.707 --> 37:36.898
+Emacs allowed me to assert control
+
+37:36.898 --> 37:39.260
+over a great portion
+
+37:39.260 --> 37:42.780
+of my quotidian computing.
+
+37:42.780 --> 37:44.827
+It helped me grow out of
+
+37:44.827 --> 37:47.448
+the state of ignorance I was in;
+
+37:47.448 --> 37:49.811
+a state that rendered me
+
+37:49.811 --> 37:52.528
+powerless to use the computer
+
+37:52.528 --> 37:54.430
+exactly how I wanted.
+
+37:54.430 --> 37:57.910
+For that I am grateful.
+
+37:57.910 --> 38:00.071
+I now consider it my duty
+
+38:00.071 --> 38:02.025
+to contribute back to
+
+38:02.025 --> 38:04.007
+this wonderful project
+
+38:04.007 --> 38:06.390
+and this awesome community.
+
+38:06.390 --> 38:09.174
+So thank you very much for your attention
+
+38:09.174 --> 38:12.690
+in watching today's presentation.
+
+38:12.690 --> 38:13.874
+Special thanks to
+
+38:13.874 --> 38:18.207
+the EmacsConf organizers and volunteers.
+
+38:18.207 --> 38:20.574
+This is all from my side, folks.
+
+38:20.574 --> 38:23.910
+Thank you very much. Goodbye.
diff --git a/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--chapters.vtt b/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--chapters.vtt
new file mode 100644
index 00000000..a8ce6623
--- /dev/null
+++ b/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--chapters.vtt
@@ -0,0 +1,37 @@
+WEBVTT
+
+00:00:00.000 --> 00:01:01.569
+Introduction
+
+00:01:01.570 --> 00:02:07.635
+Before the beginning, the Beginning
+
+00:02:07.636 --> 00:02:56.169
+Oops
+
+00:02:56.170 --> 00:04:52.935
+Yada yada yada
+
+00:04:52.936 --> 00:06:51.802
+During all this time...
+
+00:06:51.803 --> 00:07:29.769
+Pandemic
+
+00:07:29.770 --> 00:08:50.002
+Anyway
+
+00:08:50.003 --> 00:09:38.235
+A growing obsession
+
+00:09:38.236 --> 00:10:32.735
+What is the point of all of this? I thought we were talking about frowing.
+
+00:10:32.736 --> 00:11:14.669
+Conversation
+
+00:11:14.670 --> 00:11:33.069
+Later...
+
+00:11:33.070 --> 00:11:34.070
+frowny.el
diff --git a/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main--chapters.vtt b/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main--chapters.vtt
new file mode 100644
index 00000000..a8ce6623
--- /dev/null
+++ b/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main--chapters.vtt
@@ -0,0 +1,37 @@
+WEBVTT
+
+00:00:00.000 --> 00:01:01.569
+Introduction
+
+00:01:01.570 --> 00:02:07.635
+Before the beginning, the Beginning
+
+00:02:07.636 --> 00:02:56.169
+Oops
+
+00:02:56.170 --> 00:04:52.935
+Yada yada yada
+
+00:04:52.936 --> 00:06:51.802
+During all this time...
+
+00:06:51.803 --> 00:07:29.769
+Pandemic
+
+00:07:29.770 --> 00:08:50.002
+Anyway
+
+00:08:50.003 --> 00:09:38.235
+A growing obsession
+
+00:09:38.236 --> 00:10:32.735
+What is the point of all of this? I thought we were talking about frowing.
+
+00:10:32.736 --> 00:11:14.669
+Conversation
+
+00:11:14.670 --> 00:11:33.069
+Later...
+
+00:11:33.070 --> 00:11:34.070
+frowny.el
diff --git a/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt b/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt
new file mode 100644
index 00000000..41e5e248
--- /dev/null
+++ b/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt
@@ -0,0 +1,1552 @@
+WEBVTT
+
+00:00.000 --> 00:02.770
+Hi everyone! My name is Case Duckworth
+
+00:02.770 --> 00:04.070
+and I've been using Emacs
+
+00:04.070 --> 00:05.536
+for about a year and a half.
+
+00:05.536 --> 00:06.736
+If you do the math,
+
+00:06.736 --> 00:08.403
+you'll see that was pretty soon
+
+00:08.403 --> 00:11.470
+after the pandemic hit us in the U.S.
+
+00:11.470 --> 00:13.970
+While I was busy making bread
+
+00:13.970 --> 00:14.970
+and walking my dogs,
+
+00:14.970 --> 00:17.936
+trying not to drive myself crazy
+
+00:17.936 --> 00:18.970
+in the house,
+
+00:18.970 --> 00:20.603
+I tried Emacs again.
+
+00:20.603 --> 00:23.270
+I don't know if I was successful in that,
+
+00:23.270 --> 00:26.936
+going crazy... I mean, I still use Emacs.
+
+00:26.936 --> 00:30.436
+But I have been able to enjoy
+
+00:30.436 --> 00:31.670
+the infinitely-malleable,
+
+00:31.670 --> 00:32.870
+immensely enjoyable,
+
+00:32.870 --> 00:34.936
+and sublimely parenthetical world
+
+00:34.936 --> 00:36.470
+of Emacs the editor,
+
+00:36.470 --> 00:37.570
+the community,
+
+00:37.570 --> 00:39.470
+and of course, the Lisp language.
+
+00:39.470 --> 00:42.270
+So. And in this I'm going to
+
+00:42.270 --> 00:46.103
+explore just a little anecdote of that,
+
+00:46.103 --> 00:48.536
+a little nugget of what I think
+
+00:48.536 --> 00:50.870
+makes Emacs so great,
+
+00:50.870 --> 00:53.703
+using the lens of a package that I wrote
+
+00:53.703 --> 00:57.370
+about a month ago now
+
+00:57.370 --> 00:59.536
+called frowny.el.
+
+00:59.536 --> 00:01:01.569
+So yeah, let's go ahead and jump in.
+
+01:01.570 --> 01:08.236
+So, before the beginning,
+
+01:08.236 --> 01:09.036
+I want to talk about
+
+01:09.036 --> 01:10.770
+my very beginning with Linux.
+
+01:10.770 --> 01:12.136
+I first installed Linux
+
+01:12.136 --> 01:13.170
+for the first time
+
+01:13.170 --> 01:15.703
+as a freshman in college, way back in 2008.
+
+01:15.703 --> 01:17.703
+I don't know if you were around,
+
+01:17.703 --> 01:19.503
+but 2008 was not
+
+01:19.503 --> 01:21.570
+the year of the Linux desktop.
+
+01:21.570 --> 01:26.803
+WiFi was weird. Sound was weird.
+
+01:26.803 --> 01:30.136
+Everything was odd and strange and weird.
+
+01:30.136 --> 01:31.670
+I mean, it wasn't good.
+
+01:31.670 --> 01:33.603
+So, at that time,
+
+01:33.603 --> 01:36.203
+I knew absolutely nothing about anything.
+
+01:36.203 --> 01:41.203
+I installed this terrible
+
+01:41.203 --> 01:43.470
+distro called gOS.
+
+01:43.470 --> 01:44.803
+I always forget what it's called
+
+01:44.803 --> 01:45.703
+and then I looked it up.
+
+01:45.703 --> 01:47.636
+And this is what I looked at
+
+01:47.636 --> 01:49.836
+when I signed in.
+
+01:49.836 --> 01:51.903
+It wasn't good.
+
+01:51.903 --> 01:53.203
+I think it was trying to
+
+01:53.203 --> 01:57.003
+integrate better with Google tools?
+
+01:57.003 --> 01:58.870
+So I was, like, oh, yeah, you know,
+
+01:58.870 --> 02:00.870
+Gmail and Google Calendar,
+
+02:00.870 --> 02:02.436
+so this will have it all there.
+
+02:02.436 --> 02:04.536
+Anyway, the company's defunct now
+
+02:04.536 --> 02:07.003
+and it's pretty obvious why.
+
+02:07.003 --> 00:02:07.635
+It was really bad.
+
+02:07.636 --> 02:08.903
+So I thought to myself,
+
+02:08.903 --> 02:11.670
+I'll delete the partition.
+
+02:11.670 --> 02:12.903
+Easy peasy. So I did,
+
+02:12.903 --> 02:13.770
+and I rebooted,
+
+02:13.770 --> 02:15.336
+and the Master Boot Record was gone,
+
+02:15.336 --> 02:16.370
+so I couldn't boot Windows,
+
+02:16.370 --> 02:17.936
+and it was all, bleah, and I was like,
+
+02:17.936 --> 02:22.103
+oh, shit, I have to do my schoolwork.
+
+02:24.536 --> 02:26.203
+So I thought I was terribly hosed
+
+02:26.203 --> 02:28.870
+so I just installed Linux.
+
+02:28.870 --> 02:31.970
+I think I installed Crunchbang Linux first.
+
+02:31.970 --> 02:33.270
+It looked like this.
+
+02:33.270 --> 02:35.203
+It's not super exciting.
+
+02:35.203 --> 02:41.303
+It was an Openbox-based, Debian-based distro
+
+02:41.303 --> 02:43.403
+run by this one guy out in England.
+
+02:43.403 --> 02:46.570
+It was great. I really enjoyed it.
+
+02:46.570 --> 02:47.970
+The forums were amazing.
+
+02:47.970 --> 02:50.603
+It still kind of lives on
+
+02:50.603 --> 02:53.003
+through a project called BunsenLabs
+
+02:53.003 --> 02:54.936
+so go check them out if you want.
+
+02:54.936 --> 00:02:56.169
+It was a good time. Anyway.
+
+02:56.170 --> 02:58.803
+I was using that for a long time,
+
+02:58.803 --> 03:00.436
+and, you know, probably familiar
+
+03:00.436 --> 03:01.670
+to many of you,
+
+03:01.670 --> 03:02.903
+I hopped around
+
+03:02.903 --> 03:03.836
+from distro to distro,
+
+03:03.836 --> 03:08.970
+from WM to DE, just on and on and on,
+
+03:08.970 --> 03:10.270
+trying different things.
+
+03:10.270 --> 03:12.003
+I'm not a programmer.
+
+03:12.003 --> 03:12.736
+I actually went to school
+
+03:12.736 --> 03:15.136
+for English writing,
+
+03:15.136 --> 03:17.536
+and so I learned programming
+
+03:17.536 --> 03:19.636
+mostly from configuring
+
+03:19.636 --> 03:20.836
+different window managers.
+
+03:20.836 --> 03:23.803
+I learned Lua with AwesomeWM.
+
+03:23.803 --> 03:25.836
+I learned Haskell with Xmonad.
+
+03:25.836 --> 03:28.070
+Sort of Haskell. I mean, I liked Haskell.
+
+03:28.070 --> 03:30.770
+I like Haskell a lot,
+
+03:30.770 --> 03:32.536
+at least the syntax.
+
+03:32.536 --> 03:36.070
+It looks like words.
+
+03:36.070 --> 03:40.103
+You can define functions multiple times
+
+03:40.103 --> 03:41.670
+for different inputs.
+
+03:41.670 --> 03:42.703
+It has that really great pattern matching.
+
+03:42.703 --> 03:45.270
+The thing I really didn't get was monads.
+
+03:45.270 --> 03:46.570
+What is a monad?
+
+03:46.570 --> 03:48.103
+Is it a burrito? Is it a box?
+
+03:48.103 --> 03:49.770
+Is it a burrito inside of a box?
+
+03:49.770 --> 03:51.370
+Is it a box inside of a burrito?
+
+03:51.370 --> 03:53.203
+Is there a cat involved,
+
+03:53.203 --> 03:55.336
+or a superposition of such?
+
+03:55.336 --> 03:58.936
+I don't know. Anyway, it got confusing.
+
+03:58.936 --> 04:01.436
+That's really where I lost me.
+
+04:01.436 --> 04:05.170
+Again, you know, if you like Haskell,
+
+04:05.170 --> 04:05.970
+if you write Haskell,
+
+04:05.970 --> 04:08.136
+more power to you.
+
+04:08.136 --> 04:11.370
+It didn't fit my brain right.
+
+04:11.370 --> 04:14.403
+So that was that,
+
+04:14.403 --> 04:15.436
+but it kinda ruined me
+
+04:15.436 --> 04:17.003
+for a lot of other programming languages,
+
+04:17.003 --> 04:19.970
+because the functional style
+
+04:19.970 --> 04:22.403
+I really get. That part I did get.
+
+04:22.403 --> 04:25.703
+And stuff like Python, really,
+
+04:25.703 --> 04:27.070
+object orientation...
+
+04:27.070 --> 04:32.570
+I would always get way too into classes
+
+04:32.570 --> 04:34.703
+and figuring out this and that.
+
+04:34.703 --> 04:35.870
+It just didn't work for me.
+
+04:35.870 --> 04:37.870
+I was kind of floating.
+
+04:37.870 --> 04:41.503
+Learned Bash, which is, you know, Bash.
+
+04:41.503 --> 04:43.603
+It's fine, but it's Bash.
+
+04:43.603 --> 04:46.703
+It wasn't great either.
+
+04:46.703 --> 04:51.470
+Anyway. That was six years or so,
+
+04:51.470 --> 00:04:52.935
+just kind of did that, right.
+
+04:52.936 --> 04:55.870
+And yes, I was using Vim.
+
+04:55.870 --> 04:58.370
+I mean... Keeps you clean, right?
+
+04:58.370 --> 04:59.636
+I'm just kidding.
+
+04:59.636 --> 05:02.536
+I was using Vim, the editor.
+
+05:02.536 --> 05:03.470
+It was fine.
+
+05:03.470 --> 05:05.936
+It was great. I mean...
+
+05:05.936 --> 05:08.203
+Emacs and Vim, they go head to head
+
+05:08.203 --> 05:10.536
+because they're both 40 years old.
+
+05:10.536 --> 05:13.270
+They both are super powerful.
+
+05:13.270 --> 05:15.336
+They both have their own paradigms.
+
+05:15.336 --> 05:16.836
+If you get into it, then it's like
+
+05:16.836 --> 05:19.236
+powpowpow, you're doing all this stuff
+
+05:19.236 --> 05:20.503
+it's great.
+
+05:20.503 --> 05:22.036
+I wrote some plugins with Vim,
+
+05:22.036 --> 05:25.536
+a couple of themes, this and that,
+
+05:25.536 --> 05:28.636
+but you know, VimScript is not great.
+
+05:28.636 --> 05:31.803
+I think one of the common
+
+05:31.803 --> 05:34.936
+criticisms of Elisp
+
+05:34.936 --> 05:37.170
+it's like, oh, it's this weird kind of...
+
+05:37.170 --> 05:38.536
+It's written for (inaudible)...
+
+05:38.536 --> 05:43.336
+Tell you, it's way less than
+
+05:43.336 --> 05:44.470
+VimScript is. Oof.
+
+05:44.470 --> 05:49.670
+Anyway. That, also, really terminal-first,
+
+05:49.670 --> 05:52.570
+which I used for a long time and then
+
+05:52.570 --> 05:54.436
+I only think I started noticing
+
+05:54.436 --> 05:56.236
+now that I'm using Emacs more,
+
+05:56.236 --> 05:57.803
+like, that terminal-first workflow,
+
+05:57.803 --> 06:01.136
+again, for my brain,
+
+06:01.136 --> 06:02.803
+it doesn't super work for me.
+
+06:02.803 --> 06:06.636
+I always had this Platonic ideal
+
+06:06.636 --> 06:08.470
+of what a workflow should look like,
+
+06:08.470 --> 06:10.836
+and I was always working towards it.
+
+06:10.836 --> 06:12.803
+I would run into this problem
+
+06:12.803 --> 06:14.003
+and I wouldn't know how to solve it.
+
+06:14.003 --> 06:15.736
+so I kind of quit. Do something else.
+
+06:15.736 --> 06:17.003
+I think that's part of why
+
+06:17.003 --> 06:17.836
+I had so much churn
+
+06:17.836 --> 06:18.670
+for such a long time.
+
+06:18.670 --> 06:20.336
+Because at the end of the day,
+
+06:20.336 --> 06:23.936
+window managing, you're just
+
+06:23.936 --> 06:26.567
+moving around little boxes on your screen.
+
+06:26.567 --> 06:30.536
+So I was spinning wheels
+
+06:30.536 --> 06:31.203
+for a long time.
+
+06:31.203 --> 06:36.203
+But yes. And it wasn't like
+
+06:36.203 --> 06:36.803
+it was all bad.
+
+06:36.803 --> 06:38.036
+Most of this stuff
+
+06:38.036 --> 06:39.603
+just came out now that
+
+06:39.603 --> 06:40.236
+I'm thinking about it,
+
+06:40.236 --> 06:42.970
+now that I'm kind of going through this
+
+06:42.970 --> 06:45.736
+in my head, like, that part of it wasn't great.
+
+06:45.736 --> 06:46.703
+I was having a good time.
+
+06:46.703 --> 06:48.670
+I was still... Open source,
+
+06:48.670 --> 06:49.936
+I was getting in the community.
+
+06:49.936 --> 06:50.603
+I was doing all this stuff.
+
+06:50.603 --> 00:06:51.802
+It was all great.
+
+06:51.803 --> 06:56.336
+But anyway, the pandemic hit, obviously,
+
+06:56.336 --> 06:58.736
+really hard, last spring, in the US.
+
+06:58.736 --> 07:00.870
+And here we are,
+
+07:00.870 --> 07:03.070
+talking about the pandemic in 2021.
+
+07:03.070 --> 07:04.370
+Can you imagine?
+
+07:04.370 --> 07:05.836
+So, I didn't lose my job.
+
+07:05.836 --> 07:06.903
+Thank goodness.
+
+07:06.903 --> 07:09.236
+But I did... I work for the government,
+
+07:09.236 --> 07:10.236
+I was sent home for two months.
+
+07:10.236 --> 07:11.803
+I had all this free time on my hands.
+
+07:11.803 --> 07:13.903
+I got into baking,
+
+07:13.903 --> 07:16.236
+I bought a 50-pound bag of flour.
+
+07:16.236 --> 07:18.470
+I started a bread-themed tilde server,
+
+07:18.470 --> 07:20.436
+you know, those shared Unix servers
+
+07:20.436 --> 07:21.803
+all the cool kids talk about?
+
+07:21.803 --> 07:26.970
+Yeah, it's breadpunk.club, go check it out!
+
+07:26.970 --> 00:07:29.769
+Join if you want. Anyway. Yeah.
+
+07:29.770 --> 07:32.703
+So I decided to try Emacs again.
+
+07:32.703 --> 07:33.803
+Kind of on a whim, I think.
+
+07:33.803 --> 07:36.170
+I don't super remember, but I think I did.
+
+07:36.170 --> 07:42.103
+I tried Spacemacs. It didn't stick.
+
+07:42.103 --> 07:44.036
+Spacemacs was trying to be Vim,
+
+07:44.036 --> 07:46.403
+but enough things didn't fit in
+
+07:46.403 --> 07:48.636
+with what I was expecting
+
+07:48.636 --> 07:50.603
+with my Vim workflow.
+
+07:50.603 --> 07:53.836
+All sorts of plugins that did certain things
+
+07:53.836 --> 07:57.270
+and I didn't know to just get into Spacemacs.
+
+07:57.270 --> 08:01.070
+It just didn't work for me.
+
+08:01.070 --> 08:05.436
+I tried Emacs. This time, it stuck.
+
+08:05.436 --> 08:07.370
+I started out just vanilla,
+
+08:07.370 --> 08:09.470
+basic no init.el,
+
+08:09.470 --> 08:11.103
+then I wrote an init.el,
+
+08:11.103 --> 08:12.636
+and then I rewrote my init.el,
+
+08:12.636 --> 08:16.570
+and then I took my init.el, crumpled it up,
+
+08:16.570 --> 08:17.736
+threw it in the trash can,
+
+08:17.736 --> 08:19.603
+wrote it again from scratch.
+
+08:19.603 --> 08:21.203
+I'm actually currently
+
+08:21.203 --> 08:23.036
+in the middle of Bankruptcy #8,
+
+08:23.036 --> 08:25.136
+which I think I really got this time.
+
+08:25.136 --> 08:29.036
+It's either that or Number 9.
+
+08:29.036 --> 08:32.936
+So I have 1700-ish commits.
+
+08:32.936 --> 08:37.536
+I also have like, 3 or 4 .emacs repositories
+
+08:37.536 --> 08:41.500
+around my various Git hosting platforms
+
+08:41.500 --> 08:42.270
+that I use.
+
+08:42.270 --> 08:44.103
+I was on GitHub, GitLab, ~/git...
+
+08:44.103 --> 08:47.403
+I don't use Git very well.
+
+08:47.403 --> 00:08:50.002
+I'm very much amateur in that entire thing.
+
+08:50.003 --> 08:52.970
+Anyway, that is all to say
+
+08:52.970 --> 08:55.170
+I got into it, right.
+
+08:55.170 --> 08:57.470
+Like, really into it.
+
+08:57.470 --> 08:59.000
+I was watching
+
+08:59.000 --> 09:02.136
+Emacs Conference videos. Live.
+
+09:02.136 --> 09:06.003
+I was reading /r/emacs.
+
+09:06.003 --> 09:07.036
+I was reading Planet Emacs.
+
+09:07.036 --> 09:09.036
+I subscribed to both.
+
+09:09.036 --> 09:11.603
+I have other blogs that I read.
+
+09:11.603 --> 09:13.570
+All the greats.
+
+09:13.570 --> 09:16.203
+Everyone who's presenting here, probably.
+
+09:16.203 --> 09:18.836
+I started watching people on YouTube
+
+09:18.836 --> 09:20.803
+like Prot, like David Wilson
+
+09:20.803 --> 09:23.003
+who does System Crafters.
+
+09:23.003 --> 09:25.336
+I was already on IRC
+
+09:25.336 --> 09:26.836
+with the tildeverse,
+
+09:26.836 --> 09:29.670
+and so I hopped over to #emacs on Freenode
+
+09:29.670 --> 09:30.936
+(remember Freenode?).
+
+09:30.936 --> 09:34.403
+Anyway, it was a good time.
+
+09:34.403 --> 09:36.003
+So I was doing all this stuff.
+
+09:36.003 --> 00:09:38.235
+And... oh yeah. Right.
+
+09:38.236 --> 09:40.636
+Anyway, so that's all to say...
+
+09:40.636 --> 09:46.736
+Frowns. I was on #systemcrafters channel
+
+09:46.736 --> 09:47.970
+on libera.chat,
+
+09:47.970 --> 09:51.203
+the channel for the YouTube channel
+
+09:51.203 --> 09:53.403
+System Crafters by David Wilson.
+
+09:53.403 --> 09:55.436
+I think he's on later.
+
+09:55.436 --> 09:57.070
+I'm sure he'll talk about it.
+
+09:57.070 --> 09:58.370
+I don't know what he's talking about.
+
+09:58.370 --> 10:01.270
+Anyway, one day we were chatting
+
+10:01.270 --> 10:02.770
+and this guy alphapapa, who also
+
+10:02.770 --> 10:08.236
+has written a lot of these packages, said
+
+10:08.236 --> 10:09.370
+"electric-pair-mode messes up
+
+10:09.370 --> 10:10.733
+my frowny faces sometimes."
+
+10:10.733 --> 10:14.036
+You can see here
+
+10:14.036 --> 10:15.170
+this frowny, what is this...
+
+10:15.170 --> 10:23.136
+You can see it there on the screen.
+
+10:23.136 --> 10:24.303
+What is that, right?
+
+10:24.303 --> 10:27.070
+It's terrifying.
+
+10:27.070 --> 10:28.203
+What is this?
+
+10:28.203 --> 10:30.970
+What is that?
+
+10:30.970 --> 10:31.803
+I don't know.
+
+10:31.803 --> 00:10:32.735
+I don't know what that is.
+
+10:32.736 --> 10:34.736
+And then I said, you know,
+
+10:34.736 --> 10:35.567
+"I have a hook
+
+10:35.567 --> 10:36.536
+that disables electric-pair-mode
+
+10:36.536 --> 10:37.970
+for chat buffers."
+
+10:37.970 --> 10:39.136
+Which, actually, fun fact,
+
+10:39.136 --> 10:40.167
+I was lying.
+
+10:40.167 --> 10:41.836
+Not that that matters.
+
+10:41.836 --> 10:43.370
+I have a hook.
+
+10:43.370 --> 10:44.436
+You could have a hook
+
+10:44.436 --> 10:46.203
+that just disables electric-pair-mode
+
+10:46.203 --> 10:46.800
+in chat buffers.
+
+10:46.800 --> 10:47.803
+To which he replied,
+
+10:47.803 --> 10:50.667
+"Yeah, but I want electric-pair-mode
+
+10:50.667 --> 10:51.900
+everywhere, except for
+
+10:51.900 --> 10:53.670
+when I type a frowny face."
+
+10:53.670 --> 10:56.503
+And this sandwich face. What is that?
+
+10:56.503 --> 10:59.870
+He said, "I could stop typing frowny faces."
+
+10:59.870 --> 11:01.270
+And then I said, "Hmm..."
+
+11:01.270 --> 11:02.533
+And then I said, "I feel like
+
+11:02.533 --> 11:03.200
+you're in the best position
+
+11:03.200 --> 11:05.336
+to write a package, like frowny.el,"
+
+11:05.336 --> 11:07.270
+I said as a joke.
+
+11:07.270 --> 11:10.636
+And then conversation went on,
+
+11:10.636 --> 11:12.636
+we talked about... made some jokes
+
+11:12.636 --> 00:11:14.669
+about Lisp and all that stuff.
+
+11:14.670 --> 11:18.370
+So anyway, went on, went on,
+
+11:18.370 --> 11:20.503
+and then apparently,
+
+11:20.503 --> 11:21.703
+23 minutes later,
+
+11:21.703 --> 11:24.603
+I had a frowny.el package
+
+11:24.603 --> 11:26.770
+just wrote up real quick.
+
+11:26.770 --> 11:30.903
+And yeah. That was it.
+
+11:30.903 --> 11:31.803
+I said, you know, buddy,
+
+11:31.803 --> 00:11:33.069
+anyway...
+
+11:33.070 --> 11:34.270
+So now we're going to look at
+
+11:34.270 --> 11:35.803
+the package that I wrote.
+
+11:35.803 --> 11:36.970
+frowny.el.
+
+11:36.970 --> 11:40.070
+It was actually pretty easy.
+
+11:40.070 --> 11:41.936
+Let's see here.
+
+11:41.936 --> 11:44.170
+This is it now.
+
+11:44.170 --> 11:50.203
+I kind of want to go back into...
+
+11:50.203 --> 11:53.236
+Let's go back to the very beginning.
+
+11:53.236 --> 11:56.536
+We'll see what we have here.
+
+11:56.536 --> 11:57.303
+Here's our very first,
+
+11:57.303 --> 11:59.370
+my very first commit.
+
+11:59.370 --> 12:03.370
+I already had all of this crap.
+
+12:03.370 --> 12:05.736
+Oh, I already did have a...
+
+12:05.736 --> 12:08.336
+I had a defgroup, I had frowny-eyes...
+
+12:08.336 --> 12:11.236
+This is basically the way I thought it was.
+
+12:11.236 --> 12:14.736
+You want to insert a frowny face.
+
+12:14.736 --> 12:16.670
+You type in the colon,
+
+12:16.670 --> 12:18.670
+or the equal sign, or whatever.
+
+12:18.670 --> 12:19.836
+for the eyes,
+
+12:19.836 --> 12:21.436
+and then you type the open parenthesis
+
+12:21.436 --> 12:22.836
+for the frown.
+
+12:22.836 --> 12:25.703
+And the problem is that
+
+12:25.703 --> 12:27.870
+the parenthesis then triggers
+
+12:27.870 --> 12:29.170
+electric-pair-mode.
+
+12:29.170 --> 12:30.303
+It's like, oh, no, I got
+
+12:30.303 --> 12:32.503
+a close parenthesis.
+
+12:32.503 --> 12:33.836
+So we just short-circuit that
+
+12:33.836 --> 12:36.270
+whenever there's a thing,
+
+12:36.270 --> 12:38.636
+a colon or equals sign before,
+
+12:38.636 --> 12:40.136
+and just insert the thing.
+
+12:40.136 --> 12:41.736
+Where did it go?
+
+12:41.736 --> 12:43.303
+That's kind of what I did.
+
+12:43.303 --> 12:45.370
+So I wrote out... This is it.
+
+12:45.370 --> 12:46.603
+This is the whole package.
+
+12:46.603 --> 12:49.803
+It's one function, one minor mode,
+
+12:49.803 --> 12:52.536
+one defcustom, and one group. That's it.
+
+12:52.536 --> 12:54.303
+Super simple.
+
+12:54.303 --> 12:56.970
+Basically, all it does is
+
+12:56.970 --> 12:59.803
+it inserts a frowny
+
+12:59.803 --> 13:04.603
+if it looks back and sees frowny eyes
+
+13:04.603 --> 13:07.536
+which are up here.
+
+13:07.536 --> 13:08.136
+The eyes are up here.
+
+13:08.136 --> 13:11.536
+Colon, equals sign...
+
+13:11.536 --> 13:13.336
+and then it inserts it
+
+13:13.336 --> 13:15.970
+or it does a self insert command.
+
+13:15.970 --> 13:17.636
+That simple.
+
+13:17.636 --> 13:18.803
+self-insert-command is what
+
+13:18.803 --> 13:22.770
+electric-pair-mode hooks into.
+
+13:22.770 --> 13:24.370
+So that's it.
+
+13:24.370 --> 13:25.503
+And then the minor mode
+
+13:25.503 --> 13:27.070
+just makes it a minor mode.
+
+13:27.070 --> 13:28.503
+So that was that.
+
+13:28.503 --> 13:32.436
+And you know, that worked just fine.
+
+13:32.436 --> 13:35.670
+That's the thing. It works just fine.
+
+13:35.670 --> 13:37.270
+Of course, after that,
+
+13:37.270 --> 13:39.103
+I had it do a couple of different things.
+
+13:39.103 --> 13:40.236
+I added a mascot.
+
+13:40.236 --> 13:42.370
+I had to add a README.
+
+13:42.370 --> 13:45.070
+I added a global-frowny-mode
+
+13:45.070 --> 13:49.036
+which was kind of interesting
+
+13:49.036 --> 13:49.870
+because I had to figure out
+
+13:49.870 --> 13:51.603
+turn on the frowny mode,
+
+13:51.603 --> 13:56.336
+I wrote this define-globalized-minor-mode
+
+13:56.336 --> 13:58.603
+which... is that the one
+
+13:58.603 --> 14:00.870
+No, that one's not super new.
+
+14:00.870 --> 14:04.203
+There was another one. Something else
+
+14:04.203 --> 14:07.170
+that was actually for 28 or 27,
+
+14:07.170 --> 14:09.036
+and I tried using it at work,
+
+14:09.036 --> 14:10.970
+where I have Windows
+
+14:10.970 --> 14:13.436
+and it was 27,
+
+14:13.436 --> 14:14.670
+so it must have been for 28.
+
+14:14.670 --> 14:16.103
+Anyway, something didn't work
+
+14:16.103 --> 14:17.170
+and I had to do all this stuff.
+
+14:17.170 --> 14:20.870
+Oops, sorry.
+
+14:20.870 --> 14:23.070
+I added some customization options,
+
+14:23.070 --> 14:25.370
+made package-lint happy...
+
+14:25.370 --> 14:27.336
+So yeah, let's see.
+
+14:27.336 --> 14:30.170
+That's 0.1.
+
+14:30.170 --> 14:33.370
+This version 0.1 was basically
+
+14:33.370 --> 14:36.770
+basic information.
+
+14:36.770 --> 14:39.670
+So then somebody... I put it on GitHub,
+
+14:39.670 --> 14:40.270
+good to go.
+
+14:40.270 --> 14:43.103
+It actually got some traction on Reddit.
+
+14:43.103 --> 14:45.903
+alphapapa, shout out to you
+
+14:45.903 --> 14:47.303
+who posted it there.
+
+14:47.303 --> 14:50.636
+But then I got an issue.
+
+14:50.636 --> 14:51.770
+Somebody said, hey, could you add
+
+14:51.770 --> 14:52.936
+smiley support?
+
+14:52.936 --> 14:54.403
+I was, like, well,
+
+14:54.403 --> 14:55.070
+I don't really understand
+
+14:55.070 --> 14:56.003
+why that's important.
+
+14:56.003 --> 14:58.236
+Well, you know, why not?
+
+14:58.236 --> 15:01.270
+They had a use case for it, I forget,
+
+15:01.270 --> 15:02.270
+but they had a use case for it.
+
+15:02.270 --> 15:03.770
+So, okay, fine.
+
+15:03.770 --> 15:05.270
+So I added smiley support right here.
+
+15:05.270 --> 15:12.570
+Oh, and I added some more eyes
+
+15:12.570 --> 15:13.670
+at some point.
+
+15:13.670 --> 15:16.736
+Now you have... you can do a tear.
+
+15:16.736 --> 15:18.103
+You can do a nose.
+
+15:18.103 --> 15:23.603
+Let's see...
+
+15:23.603 --> 15:27.270
+I had to change frowny-self-insert
+
+15:27.270 --> 15:28.803
+to frowny-insert-character,
+
+15:28.803 --> 15:33.400
+I added frowny-self-insert-frowny
+
+15:33.400 --> 15:34.170
+right here.
+
+15:34.170 --> 15:38.536
+I added... I had an obsolete function alias.
+
+15:38.536 --> 15:39.503
+That was super fun.
+
+15:39.503 --> 15:40.870
+That was a cool thing to do.
+
+15:40.870 --> 15:43.970
+I have insert-smiley as well.
+
+15:43.970 --> 15:45.536
+They're both very similar.
+
+15:45.536 --> 15:47.336
+They're all still there.
+
+15:47.336 --> 15:49.403
+I added a keymap.
+
+15:49.403 --> 15:50.833
+That was pretty much it.
+
+15:50.833 --> 15:51.303
+And you know, again,
+
+15:51.303 --> 15:54.203
+super simple, very small.
+
+15:54.203 --> 15:56.270
+Let me try this again.
+
+15:56.270 --> 15:58.336
+I added comments and docstrings.
+
+15:58.336 --> 15:59.170
+At some point, I decided
+
+15:59.170 --> 16:03.870
+let me try to make a frowny prog mode
+
+16:03.870 --> 16:06.236
+that only works in programming modes,
+
+16:06.236 --> 16:07.536
+that only works in strings
+
+16:07.536 --> 16:09.303
+and in comments, but...
+
+16:09.303 --> 16:11.803
+There's still a branch for it,
+
+16:11.803 --> 16:14.003
+if you want to go check it out.
+
+16:14.003 --> 16:15.303
+It wasn't super useful,
+
+16:15.303 --> 16:16.336
+and I think, actually,
+
+16:16.336 --> 16:18.136
+electric-pair-mode already does that.
+
+16:18.136 --> 16:19.070
+I'm not a hundred percent sure.
+
+16:19.070 --> 16:21.503
+I got a pull request
+
+16:21.503 --> 16:23.903
+from alphapapa, adding HISTORY.org.
+
+16:23.903 --> 16:26.170
+So you can go read the IRC logs about it.
+
+16:26.170 --> 16:29.703
+There's... Let's see...
+
+16:29.703 --> 16:31.236
+And then just recently,
+
+16:31.236 --> 16:33.636
+I actually had to add frowny-inhibit-modes
+
+16:33.636 --> 16:39.603
+because with dired, I kept getting this...
+
+16:39.603 --> 16:43.236
+I would try to hit open parenthesis
+
+16:43.236 --> 16:47.536
+which is my dired-hide-details-mode,
+
+16:47.536 --> 16:50.536
+but it kept saying, hey,
+
+16:50.536 --> 16:51.903
+it's a read-only buffer. I'm, like, what?
+
+16:51.903 --> 16:55.303
+Oh yeah! Right! It's Emacs. I can C-h k
+
+16:55.303 --> 16:59.703
+and then (, and oh, frowny-self-insert.
+
+16:59.703 --> 17:01.636
+Oh, duh. So I had to add
+
+17:01.636 --> 17:05.036
+this little frowny-inhibit-modes bit.
+
+17:05.036 --> 17:06.836
+So now there's a little custom in here.
+
+17:06.836 --> 17:09.136
+Right now, it just defaults to special-mode.
+
+17:09.136 --> 17:12.170
+I added dired myself on my config.
+
+17:12.170 --> 17:14.236
+I might add that as a default as well.
+
+17:14.236 --> 17:15.270
+I'm going to think about it.
+
+17:15.270 --> 17:21.536
+And then, yeah. So now we're at version 0.3,
+
+17:21.536 --> 17:23.470
+that's where we're at now.
+
+17:23.470 --> 17:26.070
+I just updated the README with the last one.
+
+17:26.070 --> 17:28.603
+Basically, lots of functionality,
+
+17:28.603 --> 17:30.303
+plus this frowny-inhibit-mode,
+
+17:30.303 --> 17:32.836
+and yeah, now it is just...
+
+17:32.836 --> 17:34.503
+This is it. This is the whole thing
+
+17:34.503 --> 17:36.736
+right here. It's pretty short.
+
+17:36.736 --> 17:39.103
+I think it's a total of 113 lines.
+
+17:39.103 --> 17:42.203
+But you know what, it's got...
+
+17:42.203 --> 17:43.803
+It's useful for people,
+
+17:43.803 --> 17:45.136
+and it's something where
+
+17:45.136 --> 17:47.770
+I never thought I would write
+
+17:47.770 --> 17:49.470
+software that people would use.
+
+17:49.470 --> 17:51.136
+As I said, I'm not a programmer.
+
+17:51.136 --> 17:54.003
+I'm just this guy.
+
+17:54.003 --> 17:55.070
+I like using Emacs
+
+17:55.070 --> 17:56.103
+because I'm kind of a nerd.
+
+17:56.103 --> 17:57.436
+I like tinkering around
+
+17:57.436 --> 17:58.436
+and doing things the hard way.
+
+17:58.436 --> 18:02.570
+I don't... I could use Microsoft Word.
+
+18:02.570 --> 18:04.136
+I should. I was trying to
+
+18:04.136 --> 18:06.136
+write this presentation up
+
+18:06.136 --> 18:07.500
+and my wife said, "Why don't you just
+
+18:07.500 --> 18:08.903
+write it in Google Docs?"
+
+18:08.903 --> 18:11.503
+And I said, "I don't want to."
+
+18:11.503 --> 18:13.036
+I mean, that's really it.
+
+18:13.036 --> 18:15.036
+Isn't that why we're all here?
+
+18:15.036 --> 18:18.936
+So yeah, you know,
+
+18:18.936 --> 18:21.003
+so anyway, that's the story about frowny
+
+18:21.003 --> 18:22.270
+That's the story about me,
+
+18:22.270 --> 18:25.436
+my journey to Emacs,
+
+18:25.436 --> 18:27.136
+my journey to this conference,
+
+18:27.136 --> 18:30.636
+and the journey of this package.
+
+18:30.636 --> 18:32.536
+I think it's about done.
+
+18:32.536 --> 18:36.136
+I'm not sure what else needs to go in there.
+
+18:36.136 --> 18:38.103
+If you have any suggestions,
+
+18:38.103 --> 18:39.803
+pull requests, comments,
+
+18:39.803 --> 18:43.370
+there's a GitHub right here,
+
+18:43.370 --> 18:45.436
+frowny.el.
+
+18:45.436 --> 18:49.236
+Let's see if I can pull it up.
+
+18:49.236 --> 18:52.370
+frowny.el.
+
+18:52.370 --> 18:55.236
+I'll put it on (inaudible).
+
+18:55.236 --> 18:57.336
+That's something I still don't understand.
+
+18:57.336 --> 18:59.203
+Packages, the whole keywords thing...
+
+18:59.203 --> 19:00.236
+I'm still confused on that.
+
+19:00.236 --> 19:04.636
+But yeah. Just requires Emacs 24.
+
+19:04.636 --> 19:09.970
+That's it. So anyway,
+
+19:09.970 --> 19:12.470
+I'm not sure if I'm going to be
+
+19:12.470 --> 19:13.803
+live for questions.
+
+19:13.803 --> 19:14.736
+I'm recording this, obviously,
+
+19:14.736 --> 19:15.903
+a bit before,
+
+19:15.903 --> 19:18.636
+and I will be travelling that weekend,
+
+19:18.636 --> 19:20.303
+this weekend, when you're watching this,
+
+19:20.303 --> 19:25.236
+so I'm going to... But right now,
+
+19:25.236 --> 19:26.836
+I'm recording it, I'm not 100% sure.
+
+19:26.836 --> 19:28.636
+I will know obviously by then.
+
+19:28.636 --> 19:30.003
+So maybe I'll talk to you
+
+19:30.003 --> 19:31.070
+in a moment, maybe not.
+
+19:31.070 --> 19:33.300
+Otherwise, have a
+
+19:33.300 --> 19:34.336
+great conference, everybody.
+
+19:34.336 --> 19:38.303
+I'm really excited to see everyone's talks.
diff --git a/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main--chapters.vtt b/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main--chapters.vtt
new file mode 100644
index 00000000..5dba9edd
--- /dev/null
+++ b/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main--chapters.vtt
@@ -0,0 +1,22 @@
+WEBVTT
+
+00:00.240 --> 00:00:10.000
+Title
+
+00:10.000 --> 00:00:46.800
+Roadmap
+
+00:46.800 --> 00:01:46.079
+Gregorio
+
+01:46.079 --> 00:02:08.560
+Metadata
+
+02:08.560 --> 00:02:48.640
+`gregorian-mode`
+
+02:48.640 --> 00:06:49.520
+Examples
+
+06:49.520 --> 00:08:07.520
+Useful links
diff --git a/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt b/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt
new file mode 100644
index 00000000..083f2278
--- /dev/null
+++ b/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt
@@ -0,0 +1,820 @@
+WEBVTT
+
+00:00.240 --> 00:00:02.320
+Hello, everyone, my name is Spencer,
+
+00:00:02.320 --> 00:00:03.600
+and today I'm going to tell you all
+
+00:00:03.600 --> 00:00:05.296
+a little bit about how to typeset
+
+00:00:05.296 --> 00:00:06.640
+Gregorian chant sheet music
+
+00:00:06.640 --> 00:00:10.000
+using Emacs and a tool called Gregorio.
+
+00:10.000 --> 00:00:12.160
+Now I expect many, if not all, of you
+
+00:00:12.160 --> 00:00:14.000
+are unfamiliar with Gregorio,
+
+00:00:14.000 --> 00:00:14.719
+so we'll start off
+
+00:00:14.719 --> 00:00:16.240
+with a brief overview of the tool
+
+00:16.240 --> 00:18.080
+and the appropriate syntax.
+
+00:18.080 --> 00:19.760
+Next, I'll show you how I've automated
+
+00:19.760 --> 00:00:20.720
+some of the workflow
+
+00:00:20.720 --> 00:00:22.480
+using some Emacs Lisp functions
+
+00:00:22.480 --> 00:00:23.920
+which I've slowly been turning into
+
+00:00:23.920 --> 00:00:26.080
+a package called `gregorian-mode`.
+
+00:26.080 --> 00:00:26.720
+This will include
+
+00:00:26.720 --> 00:00:28.320
+some live typesetting examples
+
+00:00:28.320 --> 00:00:29.359
+to give you a better idea
+
+00:00:29.359 --> 00:00:31.279
+of how this all works.
+
+00:31.279 --> 00:00:32.079
+Finally, I'll share
+
+00:00:32.079 --> 00:00:33.120
+some information with you
+
+00:00:33.120 --> 00:00:34.480
+about how you can contribute
+
+00:34.480 --> 00:00:35.680
+to the package if you'd like,
+
+00:00:35.680 --> 00:00:38.000
+and how you can learn more about
+
+00:38.000 --> 00:39.600
+both Gregorio and `gregorian-mode`.
+
+00:39.600 --> 00:00:41.120
+And of course, all of the examples
+
+00:00:41.120 --> 00:00:42.320
+from this presentation today
+
+00:00:42.320 --> 00:00:44.079
+have been available online
+
+00:00:44.079 --> 00:00:44.879
+so you can review them
+
+00:00:44.879 --> 00:00:46.800
+all at your own pace.
+
+00:46.800 --> 00:49.440
+Gregorio is a tool that takes
+
+00:49.440 --> 00:51.500
+a `gabc` text file and compiles it
+
+00:51.500 --> 00:52.879
+into a LaTeX document.
+
+00:52.879 --> 00:00:54.719
+Gregorio is included by default
+
+00:00:54.719 --> 00:00:56.559
+with many LaTeX distributions,
+
+00:00:56.559 --> 00:00:58.079
+so you may already have it installed
+
+00:00:58.079 --> 00:01:01.120
+on your machine if you are a user of LaTeX.
+
+01:01.120 --> 01:02.879
+You can see here on the left an example
+
+01:02.879 --> 00:01:04.960
+of some input `gabc` text,
+
+00:01:04.960 --> 00:01:05.600
+and on the right,
+
+00:01:05.600 --> 00:01:08.080
+what the compiled score will look like.
+
+01:08.080 --> 01:10.080
+Looking at the `gabc`, we can see that
+
+01:10.080 --> 01:12.640
+it starts with the clef in parentheses,
+
+01:12.640 --> 00:01:13.600
+and then following this
+
+00:01:13.600 --> 00:01:15.119
+are the syllables of the lyrics
+
+00:01:15.119 --> 00:01:18.080
+and the corresponding notes in parentheses.
+
+01:18.080 --> 01:21.119
+For example, you can see that "EX,"
+
+01:21.119 --> 00:01:22.240
+the first syllable,
+
+00:01:22.240 --> 00:01:24.080
+corresponds to a `d` note
+
+00:01:24.080 --> 00:01:25.920
+in parentheses there,
+
+00:01:25.920 --> 00:01:27.119
+and if you look at the right,
+
+00:01:27.119 --> 00:01:28.560
+you can easily verify that
+
+00:01:28.560 --> 00:01:30.320
+in the output.
+
+01:30.320 --> 00:01:31.040
+Now the last thing
+
+00:01:31.040 --> 00:01:31.680
+that I want to note here
+
+01:31.680 --> 01:34.079
+is that `gabc` files are all plain text,
+
+01:34.079 --> 01:36.320
+meaning they can easily be shared
+
+01:36.320 --> 01:38.000
+and can easily be tracked using
+
+01:38.000 --> 01:40.400
+your favorite version-control software.
+
+01:40.400 --> 01:41.920
+Since these are plain text,
+
+01:41.920 --> 01:43.520
+it's really pretty easy to integrate
+
+01:43.520 --> 01:46.079
+them into your existing workflows.
+
+01:46.079 --> 00:01:48.079
+The `gabc` format also supports
+
+00:01:48.079 --> 00:01:49.439
+many optional header fields
+
+00:01:49.439 --> 00:01:50.560
+for adding more information
+
+00:01:50.560 --> 00:01:51.920
+about your score.
+
+01:51.920 --> 01:53.520
+You can see all the supported fields
+
+01:53.520 --> 00:01:54.799
+listed below, along with
+
+00:01:54.799 --> 00:01:56.479
+some placeholder text.
+
+01:56.479 --> 00:01:57.360
+These fields are placed
+
+00:01:57.360 --> 00:01:58.399
+at the top of a file
+
+00:01:58.399 --> 00:02:01.000
+and are separated from the actual score
+
+02:01.000 --> 00:02:01.439
+by the two percent symbols
+
+00:02:01.439 --> 00:02:03.000
+seen at the bottom.
+
+02:03.000 --> 02:04.399
+After these symbols, you would have the
+
+02:04.399 --> 00:02:05.600
+lines of your score,
+
+00:02:05.600 --> 00:02:07.080
+similar to what you saw
+
+00:02:07.080 --> 00:02:08.560
+on the previous slide.
+
+02:08.560 --> 00:02:09.599
+As I said earlier,
+
+00:02:09.599 --> 00:02:10.560
+I've automated some of
+
+02:10.560 --> 02:12.959
+the score build steps using Emacs Lisp,
+
+02:12.959 --> 00:02:14.000
+and have started turning them
+
+00:02:14.000 --> 00:02:16.480
+into a package called `gregorian-mode`.
+
+02:16.480 --> 00:02:18.160
+This is my first Emacs package,
+
+00:02:18.160 --> 00:02:20.400
+so the code is rather messy at the moment,
+
+00:02:20.400 --> 00:02:22.160
+and for the most part is just a wrapper
+
+02:22.160 --> 02:24.319
+around the Gregorio build process.
+
+02:24.319 --> 00:02:25.536
+However, I have made some
+
+00:02:25.536 --> 00:02:26.720
+quality-of-life improvements
+
+00:02:26.720 --> 00:02:27.920
+to the score writing,
+
+00:02:27.920 --> 00:02:30.239
+and have some more planned for the future.
+
+02:30.239 --> 00:02:31.360
+You'll get to see some of that
+
+00:02:31.360 --> 00:02:32.480
+in some live examples
+
+00:02:32.480 --> 00:02:34.319
+in just a little bit.
+
+02:34.319 --> 02:36.000
+This package is not currently on MELPA
+
+02:36.000 --> 00:02:37.760
+at the time of recording,
+
+00:02:37.760 --> 00:02:38.640
+so if you want it,
+
+00:02:38.640 --> 00:02:40.000
+you will have to clone it manually
+
+00:02:40.000 --> 00:02:41.920
+from GitHub, but it is planned
+
+02:41.920 --> 02:44.080
+to be on MELPA in the near future.
+
+02:44.080 --> 00:02:44.959
+It just needs to go through
+
+00:02:44.959 --> 00:02:46.400
+a little more rigorous cleanup
+
+00:02:46.400 --> 00:02:48.640
+and testing.
+
+02:48.640 --> 02:50.400
+Now that we've covered the basics,
+
+02:50.400 --> 02:52.560
+let's take a look at an actual example.
+
+02:52.560 --> 02:54.319
+In this example, I'm assuming that
+
+02:54.319 --> 02:56.480
+my `gregorian-mode` package is installed.
+
+02:56.480 --> 02:57.920
+However, there is nothing in these steps
+
+02:57.920 --> 00:02:59.200
+that cannot be done manually
+
+00:02:59.200 --> 00:03:01.120
+by just following the official
+
+03:01.120 --> 03:02.480
+Gregorio documentation.
+
+03:02.480 --> 03:04.000
+So if you don't want to use a package,
+
+03:04.000 --> 03:05.840
+you can do all of this pretty easily
+
+03:05.840 --> 03:07.280
+on your own just by following
+
+03:07.280 --> 03:10.000
+their documentation.
+
+03:10.000 --> 00:03:11.680
+So first we'll open up Emacs,
+
+00:03:11.680 --> 00:03:12.480
+and in my case,
+
+00:03:12.480 --> 00:03:14.560
+I'm using the GUI version.
+
+03:14.560 --> 03:16.640
+So now that Emacs is open, we can call
+
+03:16.640 --> 03:21.440
+the function `gregorian-create-new-gabc`,
+
+03:21.440 --> 03:23.680
+and this will prompt us for a file name.
+
+03:23.680 --> 03:25.599
+So we need to pick out a name
+
+03:25.599 --> 03:26.799
+for our new score.
+
+03:26.799 --> 00:03:28.239
+So I think I'm going to go ahead
+
+00:03:28.239 --> 00:03:33.280
+and name ours `emacsconf2021`.
+
+03:33.280 --> 03:34.959
+So you can see here that we now have
+
+03:34.959 --> 00:03:36.879
+a new `gabc` file with all of the
+
+00:03:36.879 --> 00:03:38.720
+optional header fields added,
+
+00:03:38.720 --> 00:03:40.400
+and we can keep whichever of these
+
+00:03:40.400 --> 00:03:41.120
+that we would like,
+
+03:41.120 --> 03:43.200
+and we can modify them as needed.
+
+03:43.200 --> 03:45.360
+So for right now, all I'm going to change
+
+03:45.360 --> 03:47.360
+is this commentary; I'm going to update
+
+03:47.360 --> 00:03:52.560
+this source of words to `emacsconf`,
+
+03:52.560 --> 00:03:53.760
+and then at the bottom here,
+
+00:03:53.760 --> 00:03:55.040
+this is where we'd go ahead
+
+00:03:55.040 --> 00:03:56.959
+and add our score.
+
+03:56.959 --> 03:58.799
+So I don't have time today to typeset
+
+03:58.799 --> 04:01.040
+an entire score, and I think that would
+
+04:01.040 --> 00:04:02.239
+probably be rather boring
+
+00:04:02.239 --> 00:04:03.760
+for most of you to watch,
+
+00:04:03.760 --> 00:04:05.680
+so I'll just demonstrate very briefly
+
+00:04:05.680 --> 00:04:08.500
+with a few syllables and notes here.
+
+04:15.840 --> 04:17.680
+Okay, so now that we have our first few
+
+04:17.680 --> 04:19.840
+syllables and notes down, let's take a
+
+04:19.840 --> 04:21.759
+look at what our score actually looks
+
+04:21.759 --> 04:23.520
+like so far.
+
+04:23.520 --> 04:25.040
+So in order to do this, we're going to
+
+04:25.040 --> 04:29.600
+call the function `gregorian-build`,
+
+04:29.600 --> 00:04:31.199
+and what this function does is
+
+00:04:31.199 --> 00:04:32.320
+it takes this score
+
+00:04:32.320 --> 00:04:33.680
+and creates a LaTeX file for it
+
+04:33.680 --> 04:36.080
+and then goes ahead and compiles it
+
+04:36.080 --> 04:38.160
+into a PDF file that we can actually
+
+04:38.160 --> 04:39.840
+take a look at.
+
+04:39.840 --> 04:42.479
+And this does take a few seconds to run...
+
+04:42.479 --> 04:44.320
+and there it goes...
+
+04:44.320 --> 04:47.040
+so we can see here we have a new buffer
+
+04:47.040 --> 04:48.560
+with all of the output
+
+04:48.560 --> 04:50.320
+from that build process,
+
+04:50.320 --> 00:04:51.840
+but what we really care about
+
+00:04:51.840 --> 00:04:54.000
+is that PDF.
+
+04:56.080 --> 04:58.479
+So opening that up, you can see
+
+04:58.479 --> 05:00.560
+we have a very short score.
+
+05:00.560 --> 05:02.320
+So far we haven't done a whole lot,
+
+05:02.320 --> 05:03.919
+but if you go ahead and compare the
+
+05:03.919 --> 05:05.000
+score on the right
+
+05:05.000 --> 05:06.479
+with the file on the left,
+
+05:06.479 --> 05:08.080
+you can really pretty clearly see that
+
+05:08.080 --> 05:10.080
+those are, in fact, the lyrics
+
+05:10.080 --> 05:11.199
+that we wrote.
+
+05:11.199 --> 05:13.280
+You can see at the top right there,
+
+05:13.280 --> 05:14.300
+the source has, in fact,
+
+05:14.300 --> 05:16.000
+changed to `emacsconf`
+
+05:16.000 --> 00:05:18.240
+so at this point, we could go ahead
+
+00:05:18.240 --> 00:05:20.000
+and just keep adding more lines,
+
+00:05:20.000 --> 00:05:22.240
+more notes, and so on,
+
+05:22.240 --> 05:24.080
+and we would end up with
+
+05:24.080 --> 05:25.919
+a completed score.
+
+05:25.919 --> 00:05:27.919
+Now this process is great and all,
+
+00:05:27.919 --> 00:05:29.120
+but as you can imagine,
+
+00:05:29.120 --> 00:05:30.880
+more complex `gabc` files
+
+05:30.880 --> 05:32.720
+can quickly become pretty difficult
+
+05:32.720 --> 05:34.479
+to read with the notes and the syllables
+
+05:34.479 --> 05:36.080
+all bunched together.
+
+05:36.080 --> 05:37.840
+So to get around this, I've been playing
+
+05:37.840 --> 05:39.840
+around with an alternative format
+
+05:39.840 --> 05:41.000
+called a `greg` file.
+
+05:41.000 --> 05:42.160
+I have an example of that
+
+05:42.160 --> 05:43.919
+for you right here.
+
+05:43.919 --> 05:45.919
+So here we can see there are
+
+05:45.919 --> 05:48.000
+two files side-by-side:
+
+05:48.000 --> 05:50.000
+on the left, we have a `gabc` file,
+
+05:50.000 --> 00:05:51.022
+and then on the right,
+
+00:05:51.022 --> 00:05:52.000
+we have a `greg` file,
+
+05:52.000 --> 05:53.360
+both of them for the same score.
+
+05:53.360 --> 05:55.600
+Now in my opinion, the `gabc` on the left
+
+05:55.600 --> 00:05:57.199
+is really rather difficult to read
+
+00:05:57.199 --> 00:05:58.319
+at a glance.
+
+00:05:58.319 --> 00:05:59.280
+You can see there
+
+00:05:59.280 --> 00:06:00.880
+the notes and the syllables
+
+00:06:00.880 --> 00:06:02.160
+are really all grouped together
+
+00:06:02.160 --> 00:06:03.919
+pretty tightly.
+
+06:03.919 --> 00:06:05.520
+Looking at the `greg` on the right,
+
+00:06:05.520 --> 00:06:06.560
+you can see that all of the
+
+00:06:06.560 --> 00:06:08.479
+header information is the same,
+
+00:06:08.479 --> 00:06:09.680
+but the score itself
+
+00:06:09.680 --> 00:06:11.840
+is split across several lines.
+
+06:11.840 --> 00:06:13.039
+The idea here is that
+
+00:06:13.039 --> 00:06:15.039
+the notes and the corresponding syllables
+
+00:06:15.039 --> 00:06:16.560
+will be on separate lines,
+
+00:06:16.560 --> 00:06:17.600
+one after the other,
+
+06:17.600 --> 06:20.639
+to help improve readability.
+
+06:20.639 --> 00:06:21.906
+Now the `greg` file format
+
+00:06:21.906 --> 00:06:23.800
+is still a work-in-progress.
+
+06:23.800 --> 06:24.960
+It's really not
+
+06:24.960 --> 06:27.520
+set in stone at all,
+
+06:27.520 --> 06:29.840
+but already I think this is a pretty
+
+06:29.840 --> 06:32.560
+substantial quality-of-life improvement,
+
+06:32.560 --> 06:34.720
+and already `gregorian-mode` can, in fact,
+
+06:34.720 --> 00:06:36.720
+build scores from `greg` files
+
+00:06:36.720 --> 00:06:38.300
+as long as they follow the conventions
+
+06:38.300 --> 06:40.400
+that you see in this file here,
+
+06:40.400 --> 00:06:42.560
+and I'm planning to have that
+
+00:06:42.560 --> 00:06:44.240
+quite a bit more well-defined
+
+00:06:44.240 --> 00:06:45.360
+moving forward.
+
+06:45.360 --> 06:47.360
+Like I said, this is really still
+
+06:47.360 --> 06:49.520
+a work-in-progress.
+
+06:49.520 --> 00:06:51.039
+Finally, I want to end today
+
+00:06:51.039 --> 00:06:52.319
+by sharing some resources
+
+00:06:52.319 --> 00:06:53.840
+where you can learn more.
+
+06:53.840 --> 00:06:55.039
+First, you can learn more about
+
+00:06:55.039 --> 00:06:56.319
+the Gregorio project
+
+00:06:56.319 --> 00:06:57.500
+on their official website,
+
+06:57.500 --> 06:58.960
+and I have the link for that
+
+06:58.960 --> 07:00.720
+on this slide here,
+
+07:00.720 --> 07:02.319
+and this site has several detailed examples
+
+07:02.319 --> 07:04.080
+and a lot of additional information
+
+07:04.080 --> 00:07:05.840
+about the project
+
+00:07:05.840 --> 00:07:07.500
+and about chant notation in general.
+
+07:07.500 --> 07:09.500
+It goes into much more depth
+
+07:09.500 --> 00:07:12.000
+than what we covered in this presentation,
+
+00:07:12.000 --> 00:07:13.199
+and overall, it's really
+
+00:07:13.199 --> 00:07:14.960
+a fantastic resource
+
+07:14.960 --> 07:16.560
+for learning more about how to use
+
+07:16.560 --> 07:19.360
+the Gregorio software and more about
+
+07:19.360 --> 07:21.840
+the specifics of chant notation.
+
+07:21.840 --> 00:07:23.680
+Second, if you're interested in using
+
+00:07:23.680 --> 00:07:25.840
+or contributing to `gregorian-mode`,
+
+00:07:25.840 --> 00:07:28.240
+you can check out the project on GitHub
+
+07:28.240 --> 07:30.400
+with the link here on this slide.
+
+07:30.400 --> 07:31.919
+And if you're interested in helping out
+
+07:31.919 --> 07:34.080
+in any way, feel free to open an issue,
+
+07:34.080 --> 07:36.560
+and we can discuss further.
+
+07:36.560 --> 00:07:38.160
+And finally, all of the examples
+
+00:07:38.160 --> 00:07:40.400
+from today are also available on GitHub,
+
+07:40.400 --> 07:42.479
+and that's the last link on this slide,
+
+07:42.479 --> 07:44.160
+and you can feel free to experiment
+
+07:44.160 --> 07:45.919
+with these and really just use them
+
+07:45.919 --> 07:48.560
+in any way that you'd like.
+
+07:48.560 --> 07:50.319
+Now that's all that I had for today,
+
+07:50.319 --> 00:07:51.360
+but I do want to take a moment
+
+00:07:51.360 --> 00:07:52.000
+to thank you all
+
+07:52.000 --> 07:54.160
+for checking out my presentation,
+
+07:54.160 --> 07:55.680
+and I want to thank the organizers
+
+07:55.680 --> 00:07:56.400
+for giving me some time
+
+00:07:56.400 --> 00:07:57.759
+to speak with you all.
+
+07:57.759 --> 00:07:59.120
+I hope that this was at least
+
+00:07:59.120 --> 00:08:01.120
+a little bit interesting to some of you,
+
+00:08:01.120 --> 00:08:02.319
+and I hope that you all enjoy
+
+00:08:02.319 --> 00:08:02.800
+the rest of the conference.
+
+08:02.800 --> 00:08:06.520
+Thank you for your time today.
+
+00:08:06.520 --> 00:08:07.520
+[captions by Hannah Miller]
diff --git a/2021/captions/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.vtt b/2021/captions/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.vtt
new file mode 100644
index 00000000..5d822eae
--- /dev/null
+++ b/2021/captions/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.vtt
@@ -0,0 +1,697 @@
+WEBVTT
+
+00:01.920 --> 00:03.280
+Hi everyone!
+
+00:03.280 --> 00:04.400
+My name is Shane,
+
+00:04.400 --> 00:09.679
+and it's truly a real honor to be
+
+00:09.679 --> 00:14.480
+able to speak at EmacsConf.
+
+00:14.480 --> 00:16.880
+I love Emacs. I love Emacs Lisp,
+
+00:16.880 --> 00:19.279
+and this is also another topic
+
+00:19.279 --> 00:22.233
+that really excites me ever since
+
+00:22.233 --> 00:28.160
+I got my hands on OpenAI's GPT-3.
+
+00:28.160 --> 00:29.920
+Six months ago, I knew that it was
+
+00:29.920 --> 00:33.920
+important to research this for Emacs,
+
+00:33.920 --> 00:35.980
+you know, asides from being somebody
+
+00:35.980 --> 00:39.040
+who never wants to leave Emacs myself,
+
+00:39.040 --> 00:41.440
+and I hope that….
+
+00:41.440 --> 00:43.120
+Being one of the few Emacs users,
+
+00:43.120 --> 00:45.360
+possibly the only one that had
+
+00:45.360 --> 00:48.160
+access to GPT-3 for this long,
+
+00:48.160 --> 00:52.559
+I hope that I can contribute.
+
+00:52.559 --> 00:55.199
+So, Emacs, sorry.
+
+00:55.199 --> 00:58.960
+Imaginary programming is…,
+
+00:58.960 --> 01:01.280
+it's based on prompt engineering currently,
+
+01:01.280 --> 01:02.559
+but it's an abstraction over
+
+01:02.559 --> 01:03.359
+prompt engineering.
+
+01:03.359 --> 01:06.479
+You can read about prompt engineering
+
+01:06.479 --> 01:08.560
+and language models,
+
+01:08.560 --> 01:13.040
+that's quite easy to google for.
+
+01:13.040 --> 01:15.520
+And imaginary programming is a subfield
+
+01:15.520 --> 01:17.360
+of imaginary computing,
+
+01:17.360 --> 01:19.424
+which is just the larger domain
+
+01:19.424 --> 01:21.420
+of employing of computing
+
+01:21.420 --> 01:24.240
+that's based on imagination,
+
+01:24.240 --> 01:25.600
+artificial imagination,
+
+01:25.600 --> 01:29.920
+so, basically, dreaming up user interfaces
+
+01:29.920 --> 01:32.159
+instead of…, or at least partially
+
+01:32.159 --> 01:34.079
+dreaming them up.
+
+01:34.079 --> 01:41.439
+I suppose that it's a fringe paradigm,
+
+01:41.439 --> 01:43.759
+but it's extremely useful.
+
+01:43.759 --> 01:47.759
+Imaginary computing,
+
+01:47.759 --> 01:49.200
+if you're willing to call it that,
+
+01:49.200 --> 01:51.920
+would be what's used to
+
+01:51.920 --> 01:53.413
+imagine simulations
+
+01:53.413 --> 01:54.320
+for self-driving cars,
+
+01:54.320 --> 01:57.840
+as they're trained for example.
+
+01:57.840 --> 01:58.984
+But this technology finds
+
+01:58.984 --> 02:00.960
+its way to the public,
+
+02:00.960 --> 02:04.880
+and it should be in the public domain.
+
+02:04.880 --> 02:06.799
+So, Demis Hassabis
+
+02:06.799 --> 02:08.959
+he's the founder of DeepMind,
+
+02:08.959 --> 02:12.400
+and he did his Ph.D. in human imagination,
+
+02:12.400 --> 02:16.900
+now he's working on artificial imagination.
+
+02:16.900 --> 02:20.239
+So, just a couple of days ago
+
+02:20.239 --> 02:25.040
+I took AlephAlpha's world model API
+
+02:25.040 --> 02:28.080
+and I plugged it into Emacs's eww browser,
+
+02:28.080 --> 02:30.800
+and now I have a way of generating
+
+02:30.800 --> 02:33.840
+text for the images instead of actually…,
+
+02:33.840 --> 02:38.072
+so I can stay in my text only Emacs,
+
+02:38.072 --> 02:42.560
+which is the way it should be.
+
+02:42.560 --> 02:45.636
+Intelligent NFTs, I'll leave this
+
+02:45.636 --> 02:47.360
+for you guys to look at.
+
+02:47.360 --> 02:49.280
+Information bubbles.
+
+02:49.280 --> 02:55.360
+So, there's some potential bad outcomes
+
+02:55.360 --> 03:05.680
+from the runaway empowering of these
+
+03:05.680 --> 03:08.959
+large language models and other models
+
+03:08.959 --> 03:10.000
+in commercial hands.
+
+03:10.000 --> 03:13.680
+It's causing information bubbles and
+
+03:13.680 --> 03:15.680
+ways of controlling people.
+
+03:15.680 --> 03:19.440
+So, for example,
+
+03:19.440 --> 03:21.680
+micro tasks and stuff that…,
+
+03:21.680 --> 03:23.650
+furthermore just automating away,
+
+03:23.650 --> 03:26.000
+or abstracting away the role
+
+03:26.000 --> 03:27.680
+of a programmer,
+
+03:27.680 --> 03:29.360
+and the automating more and more
+
+03:29.360 --> 03:32.319
+increasingly abstract tasks,
+
+03:32.319 --> 03:33.659
+and I think the solution is to
+
+03:33.659 --> 03:36.319
+decentralize and break up these tasks.
+
+03:36.319 --> 03:39.120
+I have a potential way of doing that,
+
+03:39.120 --> 03:40.693
+but firstly I'll talk about
+
+03:40.693 --> 03:42.400
+the imaginary web briefly
+
+03:42.400 --> 03:44.720
+because the thing about these
+
+03:44.720 --> 03:48.000
+language models is,
+
+03:48.000 --> 03:49.280
+they can replace basically
+
+03:49.280 --> 03:52.159
+everything on the internet.
+
+03:52.159 --> 03:55.280
+So, like, replace your Wikipedia,
+
+03:55.280 --> 03:57.680
+or Stack Overflow,
+
+03:57.680 --> 04:01.519
+replace conversation if you want it with,
+
+04:01.519 --> 04:05.920
+from real people to chatbots instead,
+
+04:05.920 --> 04:13.120
+replace basically anything there's
+
+04:13.120 --> 04:14.959
+a website for.
+
+04:14.959 --> 04:17.280
+And that means that rich media has gone
+
+04:17.280 --> 04:20.639
+from becoming images and video
+
+04:20.639 --> 04:22.560
+and even from paywalls
+
+04:22.560 --> 04:26.400
+now into intelligent and truthful,
+
+04:26.400 --> 04:29.520
+because generating fictional websites
+
+04:29.520 --> 04:31.919
+is going to become a very easy thing to do,
+
+04:31.919 --> 04:35.120
+and actually the best way to do it,
+
+04:35.120 --> 04:37.440
+and the most useful way to do it,
+
+04:37.440 --> 04:40.560
+so then you need a source of truth.
+
+04:40.560 --> 04:43.759
+The imaginary web is a thing,
+
+04:43.759 --> 04:46.000
+imaginary interpreters are a thing,
+
+04:46.000 --> 04:50.000
+so you imagine your interpreter,
+
+04:50.000 --> 04:53.759
+or you overlay prompting on top of
+
+04:53.759 --> 04:55.520
+a real interpreter to see
+
+04:55.520 --> 04:57.440
+what you might want to do
+
+04:57.440 --> 04:58.800
+in an interpreter,
+
+04:58.800 --> 05:01.039
+and what you might want to say to somebody
+
+05:01.039 --> 05:01.919
+if you're talking to them.
+
+05:01.919 --> 05:03.199
+If you're inside, say,
+
+05:03.199 --> 05:05.840
+ERC in Emacs, an IRC client,
+
+05:05.840 --> 05:07.440
+and you prompt after somebody
+
+05:07.440 --> 05:08.479
+says something,
+
+05:08.479 --> 05:10.400
+then the prompt will probably suggest,
+
+05:10.400 --> 05:13.120
+what you might say in return,
+
+05:13.120 --> 05:15.199
+and then you can prompt like a multiverse,
+
+05:15.199 --> 05:18.800
+and you can pick from them.
+
+05:18.800 --> 05:23.912
+There's a bunch of crazy utilities
+
+05:23.912 --> 05:26.560
+for these language models.
+
+05:26.560 --> 05:28.960
+Paracosm vs Metaverse.
+
+05:28.960 --> 05:30.828
+So, Mark Zuck wants you to live in
+
+05:30.828 --> 05:34.320
+his virtual reality as defined by him,
+
+05:34.320 --> 05:36.160
+and he's going to do it
+
+05:36.160 --> 05:40.539
+by using these models to make you
+
+05:40.539 --> 05:42.639
+a fictional world that you can live in.
+
+05:42.639 --> 05:43.280
+You can do that,
+
+05:43.280 --> 05:46.400
+or you can use them yourself,
+
+05:46.400 --> 05:50.000
+and you build your own Paracosm.
+
+05:50.000 --> 05:51.440
+And I think that's an important
+
+05:51.440 --> 05:53.440
+ability to be able to have,
+
+05:53.440 --> 05:56.880
+otherwise we will be like the borg,
+
+05:56.880 --> 06:01.520
+and we'll be connected to Mark Zuckerberg.
+
+06:01.520 --> 06:06.400
+Truth is a hot topic.
+
+06:06.400 --> 06:08.880
+So, the way that I think we should do this
+
+06:08.880 --> 06:10.720
+to decentralize the language models is,
+
+06:10.720 --> 06:13.199
+to use Structuralism.
+
+06:13.199 --> 06:19.600
+Universal grammar,
+
+06:19.600 --> 06:21.680
+template metaprogramming, and GPT-3
+
+06:21.680 --> 06:23.919
+what do they have in common?
+
+06:23.919 --> 06:27.759
+Well, you have some kind of basis,
+
+06:27.759 --> 06:31.408
+like, you train your GPT-3,
+
+06:31.408 --> 06:32.663
+and then you do all your prompting
+
+06:32.663 --> 06:33.360
+on top of it.
+
+06:33.360 --> 06:35.840
+Like a person is born with this grammar,
+
+06:35.840 --> 06:37.759
+and then they quickly learn language,
+
+06:37.759 --> 06:40.240
+and like with C++ templates,
+
+06:40.240 --> 06:42.080
+you pre-process and then
+
+06:42.080 --> 06:44.800
+the run time runs on that.
+
+06:44.800 --> 06:48.000
+So, anyway, that was a slide.
+
+06:48.000 --> 06:50.479
+Structuralism.
+
+06:50.479 --> 06:52.080
+I think you can decompile…,
+
+06:52.080 --> 06:52.880
+think you can break,
+
+06:52.880 --> 06:53.840
+so you can decompose
+
+06:53.840 --> 06:55.840
+the language models into units,
+
+06:55.840 --> 06:57.759
+but those units won't look like neurons,
+
+06:57.759 --> 06:59.440
+they would look like these,
+
+06:59.440 --> 07:01.759
+and you put them onto a blockchain.
+
+07:01.759 --> 07:02.744
+But you can look at that later
+
+07:02.744 --> 07:03.840
+if you want anyway.
+
+07:03.840 --> 07:07.199
+I'm going to skip straight to ilambda,
+
+07:07.199 --> 07:09.919
+running out of time.
+
+07:09.919 --> 07:12.240
+I'll just quickly show you
+
+07:12.240 --> 07:15.199
+the ilambda primitive in ilambda.
+
+07:15.199 --> 07:19.199
+So, it evaluates instead of run,
+
+07:19.199 --> 07:21.680
+for example, here's the reduced function,
+
+07:21.680 --> 07:22.632
+and you've defined your
+
+07:22.632 --> 07:25.520
+imaginary lambda here.
+
+07:25.520 --> 07:26.560
+And it doesn't have a body,
+
+07:26.560 --> 07:31.599
+it's just got the comment
+
+07:31.599 --> 07:33.120
+and the parameters,
+
+07:33.120 --> 07:36.560
+and that's enough for….
+
+07:36.560 --> 07:38.720
+Once you have that ilambda
+
+07:38.720 --> 07:40.080
+that runs now as a function,
+
+07:40.080 --> 07:40.800
+you can stick it into
+
+07:40.800 --> 07:42.720
+a reduced function, for example,
+
+07:42.720 --> 07:46.240
+and it'll reduce this list.
+
+07:46.240 --> 07:50.560
+You could even remove…, yeah,
+
+07:50.560 --> 07:51.759
+so you kind of need the comment
+
+07:51.759 --> 07:56.048
+otherwise it's too hard to imagine
+
+07:56.048 --> 07:57.360
+what would happen next,
+
+07:57.360 --> 08:01.520
+but for a function you can literally
+
+08:01.520 --> 08:03.360
+have an idefun even without
+
+08:03.360 --> 08:04.639
+the argument list.
+
+08:04.639 --> 08:06.319
+It was just like generate-fib-sequence,
+
+08:06.319 --> 08:09.919
+and most likely when you run that defun,
+
+08:09.919 --> 08:13.759
+it would work the way you want it.
+
+08:13.759 --> 08:16.000
+The more information you give the idefun,
+
+08:16.000 --> 08:17.840
+the imaginary defun,
+
+08:17.840 --> 08:20.879
+the better it would capture the task
+
+08:20.879 --> 08:22.000
+which you're trying to do,
+
+08:22.000 --> 08:23.039
+in this case you want to generate
+
+08:23.039 --> 08:24.080
+a Fibonacci sequence.
+
+08:24.080 --> 08:28.319
+And yeah, you can define functions
+
+08:28.319 --> 08:30.560
+without having a body,
+
+08:30.560 --> 08:32.640
+and they run an inference instead.
+
+08:32.640 --> 08:34.159
+Here's a way of overriding
+
+08:34.159 --> 08:36.000
+the language model that's used,
+
+08:36.000 --> 08:40.640
+for example, using dynamic scope.
+
+08:40.640 --> 08:41.863
+So, under the hood,
+
+08:41.863 --> 08:47.040
+idefun just uses an ilambda.
+
+08:47.040 --> 08:50.959
+This function here just doubles things.
+
+08:50.959 --> 08:53.752
+So, here's a function that gets you
+
+08:53.752 --> 08:59.279
+a hexadecimal color just from the name.
+
+08:59.279 --> 09:00.160
+And you can create
+
+09:00.160 --> 09:02.160
+arbitrary functions like this,
+
+09:02.160 --> 09:04.268
+so, what we need is like a library
+
+09:04.268 --> 09:07.200
+of imaginary functions, I think,
+
+09:07.200 --> 09:12.800
+that match a language model.
+
+09:12.800 --> 09:15.760
+Macros on the other hand,
+
+09:15.760 --> 09:18.160
+as different from functions,
+
+09:18.160 --> 09:20.000
+they actually macro expand
+
+09:20.000 --> 09:21.360
+and generate code.
+
+09:21.360 --> 09:23.279
+So, when you macro expand this,
+
+09:23.279 --> 09:26.320
+you'll get this,
+
+09:26.320 --> 09:30.000
+and that's because this has an arity of 3,
+
+09:30.000 --> 09:31.839
+and then when you macro expand
+
+09:31.839 --> 09:32.959
+that underlying macro,
+
+09:32.959 --> 09:35.120
+it generates the actual source code.
+
+09:35.120 --> 09:37.839
+You can actually run these macros,
+
+09:37.839 --> 09:41.279
+and it will cache the output…,
+
+09:41.279 --> 09:42.480
+it will catch the source code,
+
+09:42.480 --> 09:44.240
+so the macro runs the same
+
+09:44.240 --> 09:45.839
+every single time,
+
+09:45.839 --> 09:47.519
+or generates the same code,
+
+09:47.519 --> 09:48.560
+but you can just use it
+
+09:48.560 --> 09:49.920
+to generate code really easily
+
+09:49.920 --> 09:52.000
+while you're programming.
+
+09:52.000 --> 09:55.920
+I hope that this has been informative,
+
+09:55.920 --> 09:57.600
+it wasn't too much time,
+
+09:57.600 --> 10:00.312
+but there's plenty of material
+
+10:00.312 --> 10:01.680
+for you to dig into it more
+
+10:01.680 --> 10:04.000
+if you're interested.
+
+10:04.000 --> 10:04.959
+Thank you very much
+
+10:04.959 --> 10:09.519
+for letting me talk today.
+
+10:09.519 --> 10:15.680
+Peace out!
+
+10:15.680 --> 10:16.680
+[captions by bhavin192 (Bhavin Gandhi)]
diff --git a/2021/captions/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.vtt b/2021/captions/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.vtt
new file mode 100644
index 00000000..ecb67f63
--- /dev/null
+++ b/2021/captions/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.vtt
@@ -0,0 +1,706 @@
+WEBVTT
+
+00:10.290 --> 00:22.480
+What is an invoice?
+
+00:22.480 --> 00:25.630
+Invoice is a document
+
+00:25.630 --> 00:28.660
+that you give it to your customer
+
+00:28.660 --> 00:30.416
+so that they can pay you
+
+00:30.416 --> 00:31.450
+for your service or your goods.
+
+00:31.450 --> 00:35.720
+But you are a professor and consultant.
+
+00:35.720 --> 00:38.730
+Why do you need to generate invoices?
+
+00:38.730 --> 00:39.730
+Well...
+
+00:39.730 --> 00:46.640
+I do a service for my clients
+
+00:46.640 --> 00:47.884
+if I'm a consultant,
+
+00:47.884 --> 00:48.999
+and when I'm a professor,
+
+00:48.999 --> 00:51.530
+I'm teaching students,
+
+00:51.530 --> 00:54.910
+so I have to generate an invoice.
+
+00:54.910 --> 00:58.420
+Why not use Excel or something simple
+
+00:58.420 --> 01:00.079
+to generate your invoices?
+
+01:00.079 --> 01:01.079
+I've tried that.
+
+01:01.079 --> 01:04.609
+It's no good, when it... particularly,
+
+01:04.609 --> 01:07.150
+when there are many clients,
+
+01:07.150 --> 01:09.035
+managing Excels and templates
+
+01:09.035 --> 01:10.799
+becomes very very tricky.
+
+01:10.799 --> 01:15.725
+Why don't you hire someone, you know, professional
+
+01:15.725 --> 01:17.350
+to do these for you?
+
+01:17.350 --> 01:18.428
+I've tried it.
+
+01:18.428 --> 01:22.381
+I have to give them lots of information.
+
+01:22.381 --> 01:25.140
+Not that there's anything wrong with them,
+
+01:25.140 --> 01:30.130
+just that I found it to be a bit too tricky.
+
+01:30.130 --> 01:31.250
+Professional software?
+
+01:31.250 --> 01:33.902
+Good point. I've tried that too.
+
+01:33.902 --> 01:36.900
+But, what's the fun in that, right?
+
+01:36.900 --> 01:38.850
+So what did you do?
+
+01:38.850 --> 01:40.869
+Haa.. this is the interesting part!
+
+01:40.869 --> 01:45.600
+I took a software called Emacs Org mode
+
+01:45.600 --> 01:50.640
+and with that, I added Python code to it.
+
+01:50.640 --> 01:52.418
+I added so many other things to it,
+
+01:52.418 --> 01:56.168
+and then it became a really nice
+
+01:56.168 --> 01:59.640
+customizable way to generate invoices.
+
+01:59.640 --> 02:04.549
+Whoa whoa whoa... Just slow it down, bro.
+
+02:04.549 --> 02:06.659
+Give me the story.
+
+02:06.659 --> 02:10.170
+Hey. Okay... Okay... I will.
+
+02:10.170 --> 02:11.170
+Story.
+
+02:11.170 --> 02:14.620
+Uh.. Story is simple.
+
+02:14.620 --> 02:16.590
+The client wanted an invoice.
+
+02:16.590 --> 02:19.900
+So, I generated an invoice.
+
+02:19.900 --> 02:21.419
+It wasn't good enough.
+
+02:21.419 --> 02:24.959
+So, I hacked some little bit of it.
+
+02:24.959 --> 02:28.480
+I changed every time a new client came.
+
+02:28.480 --> 02:29.848
+I had to do it all over again.
+
+02:29.848 --> 02:30.989
+I did that. I did it.
+
+02:30.989 --> 02:33.110
+Then I got really tired of it.
+
+02:33.110 --> 02:36.760
+And that's what led me to all these customizations.
+
+02:36.760 --> 02:38.632
+I want features.
+
+02:38.632 --> 02:43.249
+So, rapid fire questions. Ready? Yep.
+
+02:43.249 --> 02:46.079
+Project management? Yep.
+
+02:46.079 --> 02:48.079
+Format customization? Yes.
+
+02:48.079 --> 02:50.079
+PDF export? Yes.
+
+02:50.079 --> 02:52.079
+Multi-client support? Yes.
+
+02:52.079 --> 02:53.579
+Washing my clothes?
+
+02:53.579 --> 02:54.959
+Yes... No.
+
+02:54.959 --> 02:57.013
+Haa. I was just testing you,
+
+02:57.013 --> 03:00.900
+if you're paying attention or not.
+
+03:00.900 --> 03:04.659
+Logo and signature customization? Yes.
+
+03:04.659 --> 03:06.730
+Multi-currency support? Yes.
+
+03:06.730 --> 03:08.930
+Okay, enough talky or it's just...
+
+03:08.930 --> 03:10.930
+Can you show me a demo that you did?
+
+03:10.930 --> 03:12.950
+Or is it just talky.
+
+03:12.950 --> 03:15.239
+Yes, of course. Demo.
+
+03:15.239 --> 03:16.969
+Okay, demo time.
+
+03:16.969 --> 03:18.909
+Some ingredients for invoicing.
+
+03:18.909 --> 03:21.069
+Org mode, of course.
+
+03:21.069 --> 03:23.849
+Python environment and libraries for Python:
+
+03:23.849 --> 03:25.930
+pandas, tabulate, numbers.
+
+03:25.930 --> 03:28.260
+yasnippet package, very useful.
+
+03:28.260 --> 03:30.969
+And I use for LaTeX, MikTeX packages.
+
+03:30.969 --> 03:34.090
+So, I have a project already set up.
+
+03:34.090 --> 03:36.540
+This is what we have.
+
+03:36.540 --> 03:38.673
+The project is Teaching 2021
+
+03:38.673 --> 03:41.239
+and you can set all this up.
+
+03:41.239 --> 03:43.819
+So let's start with the first and foremost.
+
+03:43.819 --> 03:46.849
+Okay, so we're going to use
+
+03:46.849 --> 03:49.209
+the yasnippet package.
+
+03:49.209 --> 03:52.219
+uh.. um.. sorry, the invoice, okay.
+
+03:52.219 --> 03:54.550
+This one introduced, it gives you this whole...
+
+03:54.550 --> 03:56.377
+generates this whole bunch of code
+
+03:56.377 --> 03:57.150
+based on a template.
+
+03:57.150 --> 03:58.371
+All you're going to do
+
+03:58.371 --> 04:00.939
+is to type out the client's name.
+
+04:00.939 --> 04:02.797
+Okay and that's it.
+
+04:02.797 --> 04:04.469
+That's all there is to it.
+
+04:04.469 --> 04:06.446
+Okay there's a whole bunch of instructions
+
+04:06.446 --> 04:07.199
+that you can follow.
+
+04:07.199 --> 04:09.284
+If it's for the first time,
+
+04:09.284 --> 04:10.549
+use bankinfo.org.
+
+04:10.549 --> 04:14.409
+Let's check out what bankinfo.org involves.
+
+04:14.409 --> 04:16.819
+Okay so you can copy this template
+
+04:16.819 --> 04:19.269
+from my GitHub repository.
+
+04:19.269 --> 04:24.300
+It's basically setup of the LaTeX tags,
+
+04:24.300 --> 04:26.854
+and particularly this text file,
+
+04:26.854 --> 04:28.620
+which is a template.
+
+04:28.620 --> 04:30.469
+There's some personal info
+
+04:30.469 --> 04:32.125
+for all the details that you want.
+
+04:32.125 --> 04:33.814
+Bank information.
+
+04:33.814 --> 04:35.580
+You can look at it in detail
+
+04:35.580 --> 04:40.330
+from my repo. The tax invoice...
+
+04:40.330 --> 04:42.840
+There are some basic constructs.
+
+04:42.840 --> 04:45.809
+You can totally change any of these
+
+04:45.809 --> 04:47.620
+to your liking.
+
+04:47.620 --> 04:50.320
+Okay, so that's bank info.
+
+04:50.320 --> 04:52.200
+Go back. That's the first part.
+
+04:52.200 --> 04:55.540
+The second part is creating a client name.
+
+04:55.540 --> 04:58.420
+So let's look at this setup,
+
+04:58.420 --> 05:00.710
+and I have one created already.
+
+05:00.710 --> 05:02.804
+So, in order to create this,
+
+05:02.804 --> 05:03.880
+all you need to do
+
+05:03.880 --> 05:06.610
+is to use the inv-setup
+
+05:06.610 --> 05:10.300
+invoice setup for your client,
+
+05:10.300 --> 05:12.230
+and it will give you all the information.
+
+05:12.230 --> 05:14.790
+All you need to do is type in here
+
+05:14.790 --> 05:16.410
+and then type in the client's name,
+
+05:16.410 --> 05:18.785
+exactly the same that you see
+
+05:18.785 --> 05:20.210
+as the file name.
+
+05:20.210 --> 05:22.620
+Okay, client one. And that's it.
+
+05:22.620 --> 05:24.250
+You're all set for you.
+
+05:24.250 --> 05:26.218
+Okay, so that's what it looks like.
+
+05:26.218 --> 05:28.043
+All the address and stuff
+
+05:28.043 --> 05:29.710
+filled out here.
+
+05:29.710 --> 05:32.131
+Okay. And then the next one
+
+05:32.131 --> 05:37.010
+is to use the... One time,
+
+05:37.010 --> 05:38.890
+you're going to do the invoice item,
+
+05:38.890 --> 05:40.590
+which is the rate table.
+
+05:40.590 --> 05:42.490
+So let's do the invoice.
+
+05:42.490 --> 05:44.400
+Invoice item...
+
+05:44.400 --> 05:47.080
+This is item master.
+
+05:47.080 --> 05:50.320
+So here again, another place
+
+05:50.320 --> 05:53.060
+where you have to enter the client name,
+
+05:53.060 --> 05:56.780
+and your rate table is ready for use.
+
+05:56.780 --> 05:58.891
+Okay. So that was...
+
+05:58.891 --> 06:00.749
+Now we go to step two,
+
+06:00.749 --> 06:02.510
+which is clock table for reference.
+
+06:02.510 --> 06:04.150
+Okay. Let's go to the clock table.
+
+06:04.150 --> 06:09.660
+I already set up this for ACMEClient1,
+
+06:09.660 --> 06:12.030
+and I give it a tag: billable.
+
+06:12.030 --> 06:13.260
+Okay. We will see that...
+
+06:13.260 --> 06:17.470
+Where have I done that?
+
+06:17.470 --> 06:23.890
+Okay, so that's the client, you know,
+
+06:23.890 --> 06:25.360
+ACMEClient1 table teaching 2021.
+
+06:25.360 --> 06:29.090
+I've clocked it for the previous month.
+
+06:29.090 --> 06:30.090
+That's what you will see.
+
+06:30.090 --> 06:31.090
+Let's see it again.
+
+06:31.090 --> 06:34.840
+Okay. That's... Let's put the instructions.
+
+06:34.840 --> 06:38.110
+And then you go to clock table
+
+06:38.110 --> 06:40.490
+to generate the clock table for the client.
+
+06:40.490 --> 06:42.342
+Okay. So clock table...
+
+06:42.342 --> 06:44.335
+This is only for your reference,
+
+06:44.335 --> 06:45.484
+not going to be exported.
+
+06:45.484 --> 06:50.586
+Here we get a clock table. All right.
+
+06:50.586 --> 06:53.150
+So with this, you get the clock table.
+
+06:53.150 --> 06:55.670
+Okay. Now go into the items part.
+
+06:55.670 --> 06:59.810
+You will see two Python blocks,
+
+06:59.810 --> 07:01.500
+which is what the next instruction says.
+
+07:01.500 --> 07:03.526
+Go into the python block
+
+07:03.526 --> 07:06.180
+and do Control-c c (C-c c).
+
+07:06.180 --> 07:09.860
+Go to the control python source block,
+
+07:09.860 --> 07:12.413
+second one, and do Ctrl-c c...
+
+07:12.413 --> 07:14.490
+Ctrl-c Ctrl-c (C-c C-c) rather.
+
+07:14.490 --> 07:16.028
+and then finally come back
+
+07:16.028 --> 07:18.765
+to Raise Invoice and do dispatcher
+
+07:18.765 --> 07:21.270
+which is exported into PDF.
+
+07:21.270 --> 07:22.718
+Okay, let's do that.
+
+07:22.718 --> 07:27.853
+First one is... I just run this code,
+
+07:27.853 --> 07:30.950
+and it generated this table for me.
+
+07:30.950 --> 07:34.160
+Okay. So it has all the details.
+
+07:34.160 --> 07:35.253
+Now we go in
+
+07:35.253 --> 07:39.560
+the second source code block,
+
+07:39.560 --> 07:41.700
+and does all this...
+
+07:41.700 --> 07:43.530
+And it has generated this stuff.
+
+07:43.530 --> 07:46.335
+Plus, you should note that for beancount,
+
+07:46.335 --> 07:50.795
+it has also generated the block for that.
+
+07:50.795 --> 07:51.775
+It's all in the code.
+
+07:51.775 --> 07:53.820
+You can customize it if you're on Ledger.
+
+07:53.820 --> 07:54.782
+You can customize it
+
+07:54.782 --> 07:55.390
+to the way you want,
+
+07:55.390 --> 07:56.978
+any accounts that you want to change.
+
+07:56.978 --> 07:58.870
+It's all customizable.
+
+07:58.870 --> 08:00.710
+Here, even the currency symbols
+
+08:00.710 --> 08:02.840
+can be changed from INR and Rupees
+
+08:02.840 --> 08:04.681
+to whatever currency you have
+
+08:04.681 --> 08:07.190
+can be changed accordingly.
+
+08:07.190 --> 08:11.304
+I have org-babel-tangle-append code
+
+08:11.304 --> 08:12.650
+that I will share in the...
+
+08:12.650 --> 08:13.872
+I've borrowed it
+
+08:13.872 --> 08:14.889
+from somebody on the Internet,
+
+08:14.889 --> 08:16.440
+so I'll share that as well
+
+08:16.440 --> 08:18.650
+in my GitHub repo.
+
+08:18.650 --> 08:20.830
+Lastly, I just want to share that
+
+08:20.830 --> 08:23.730
+you can fill your GST website
+
+08:23.730 --> 08:24.988
+with these info,
+
+08:24.988 --> 08:26.171
+so you can... You can even put in
+
+08:26.171 --> 08:27.590
+as many entries as you want
+
+08:27.590 --> 08:29.370
+in your yasnippet.
+
+08:29.370 --> 08:30.560
+Customize it the way you want.
+
+08:30.560 --> 08:32.590
+I also added a month later
+
+08:32.590 --> 08:33.820
+due date reminder,
+
+08:33.820 --> 08:36.239
+saying if the invoice is paid or not.
+
+08:36.239 --> 08:37.209
+Okay.
+
+08:37.209 --> 08:42.051
+So, a few tips to end this demo.
+
+08:42.051 --> 08:44.990
+You can customize currency symbol
+
+08:44.990 --> 08:45.860
+and currency words
+
+08:45.860 --> 08:47.540
+according to your own currency.
+
+08:47.540 --> 08:51.269
+I use the European/Indian date format
+
+08:51.269 --> 08:54.980
+which is %d-%m-%Y. You can also...
+
+08:54.980 --> 08:56.816
+The language is Indian English,
+
+08:56.816 --> 08:57.998
+so it will change according--
+
+08:57.998 --> 08:59.860
+the numerals change according to the
+
+08:59.860 --> 09:02.180
+Indian format. Numbering format
+
+09:02.180 --> 09:04.959
+for invoice number is today's date
+
+09:04.959 --> 09:06.620
+followed by client name.
+
+09:06.620 --> 09:07.959
+That's my default.
+
+09:07.959 --> 09:11.120
+You can customize that as well.
+
+09:11.120 --> 09:13.574
+Let's try and export this
+
+09:13.574 --> 09:17.325
+to the subtree. Ctrl-s.
+
+09:17.325 --> 09:20.579
+So that's step number seven.
+
+09:20.579 --> 09:22.029
+And there it is,
+
+09:22.029 --> 09:23.339
+the tax invoice
+
+09:23.339 --> 09:25.870
+for Dr. Wile E. Coyote,
+
+09:25.870 --> 09:27.810
+and with a lovely signature as well.
+
+09:27.810 --> 09:29.990
+[Interviewer:] Well, that's great!
+
+09:29.990 --> 09:34.309
+If I were to try this out, what do I do?
+
+09:34.309 --> 09:36.779
+Go to github.com, into my repository.
+
+09:36.779 --> 09:38.915
+I'll leave my GitHub URL.
+
+09:38.915 --> 09:42.790
+You can download it use it,
+
+09:42.790 --> 09:43.848
+and let me know
+
+09:43.848 --> 09:46.829
+how it pans out for you.
+
+09:46.829 --> 09:47.632
+[Interviewer:] I have spent
+
+00:09:47.632 --> 00:09:49.018
+so much time on this.
+
+00:09:49.018 --> 00:09:50.060
+May I invoice you?
diff --git a/2021/captions/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt b/2021/captions/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt
new file mode 100644
index 00000000..7e9e4bb8
--- /dev/null
+++ b/2021/captions/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt
@@ -0,0 +1,1780 @@
+WEBVTT
+
+00:01.520 --> 00:04.400
+Hello, my name is Stefan Monnier,
+
+00:04.400 --> 00:06.799
+and I'm going to talk to you about--
+
+00:06.799 --> 00:08.240
+well, I'm going to present a bit
+
+00:08.240 --> 00:11.840
+of the life of a janitor.
+
+00:11.840 --> 00:14.050
+So by and large, there's just
+
+00:14.050 --> 00:16.299
+nothing to see here,
+
+00:16.299 --> 00:17.199
+and that's probably
+
+00:17.199 --> 00:18.240
+not super interesting,
+
+00:18.240 --> 00:19.920
+but some of you might actually like to
+
+00:19.920 --> 00:00:23.050
+see how I work, so I figured why not.
+
+00:25.359 --> 00:27.279
+Usually what I do just doesn't make any
+
+00:27.279 --> 00:00:29.920
+any significant difference,
+
+00:00:29.920 --> 00:00:32.160
+and so I basically take existing code
+
+00:00:32.160 --> 00:00:35.040
+that's working, and I try to change it
+
+00:00:35.040 --> 00:00:37.680
+hopefully without breaking it too much
+
+00:00:37.680 --> 00:00:40.079
+and make it slightly more...
+
+00:40.079 --> 00:42.719
+you know, following some of the more
+
+00:42.719 --> 00:44.640
+modern style, let's say,
+
+00:44.640 --> 00:00:46.719
+and sometimes along the way,
+
+00:00:46.719 --> 00:00:50.399
+it actually fixes some bugs.
+
+00:50.399 --> 00:00:51.983
+More concretely, the kind of things
+
+00:00:51.983 --> 00:00:54.079
+that I do is basically activate
+
+00:00:54.079 --> 00:00:54.480
+lexical scoping--
+
+00:54.480 --> 00:56.239
+that's really my main goal usually--
+
+00:56.239 --> 00:58.960
+but also do things like convert
+
+00:58.960 --> 00:01:00.719
+from `cl` to `cl-lib`,
+
+00:01:00.719 --> 00:01:01.440
+sometimes I have to
+
+01:01.440 --> 01:03.760
+fix some compilation dependencies,
+
+01:03.760 --> 01:07.280
+I might convert from `defadvice` to `advice-add`,
+
+01:07.280 --> 01:11.439
+and many of the things--
+
+01:11.439 --> 00:01:13.119
+in terms of number of changes,
+
+00:01:13.119 --> 00:01:14.000
+most of them are actually
+
+00:01:14.000 --> 00:01:16.560
+changing `quote fun` to `hash quote fun`
+
+00:01:16.560 --> 00:01:17.360
+because I prefer it,
+
+01:17.360 --> 00:01:19.920
+but also it often helps me
+
+00:01:19.920 --> 00:01:21.439
+have a better understanding
+
+00:01:21.439 --> 00:01:23.920
+of which function is called where,
+
+01:23.920 --> 01:26.799
+and so the warnings I get from it
+
+01:26.799 --> 01:28.799
+sometimes help me. You look concretely...
+
+01:28.799 --> 00:01:30.880
+it's not nothing really clear;
+
+00:01:30.880 --> 00:01:33.360
+it's more in terms of helping me
+
+00:01:33.360 --> 00:01:35.759
+have a mental image
+
+00:01:35.759 --> 00:01:39.439
+of how the package works.
+
+01:39.439 --> 01:42.880
+So let's take a look.
+
+01:42.880 --> 00:01:45.840
+I'm going to start with
+
+00:01:45.840 --> 00:01:46.799
+the package `heap`,
+
+00:01:46.799 --> 00:01:50.560
+which I saw had a few weird things in it,
+
+00:01:50.560 --> 00:01:53.680
+so I'm going to compile it.
+
+01:53.680 --> 01:55.600
+That's basically the way the way I work,
+
+01:55.600 --> 00:01:57.840
+right. I take a package.
+
+00:01:57.840 --> 00:02:00.479
+I just pass it to the byte compiler.
+
+00:02:00.479 --> 00:02:02.159
+I do that by just having
+
+02:02.159 --> 02:04.560
+a clone of the whole
+
+02:04.560 --> 00:02:06.799
+GNU ELPA repository,
+
+00:02:06.799 --> 00:02:10.000
+and so that's why I built them.
+
+02:10.000 --> 02:11.520
+I use the build rules
+
+02:11.520 --> 02:15.120
+from the GNU ELPA repository.
+
+02:15.120 --> 00:02:16.720
+These build rules enforce--
+
+00:02:16.720 --> 00:02:17.680
+make sure that the files
+
+00:02:17.680 --> 00:02:19.680
+are compiled in a clean environment
+
+00:02:19.680 --> 00:02:21.920
+so you get fairly good warnings.
+
+00:02:21.920 --> 00:02:23.680
+If you look at the warnings you see here,
+
+00:02:23.680 --> 00:02:24.720
+there's a lot of things
+
+00:02:24.720 --> 00:02:26.480
+which are completely irrelevant,
+
+00:02:26.480 --> 00:02:28.400
+which are due to details
+
+00:02:28.400 --> 00:02:30.319
+of the way I have my Emacs set up
+
+00:02:30.319 --> 00:02:31.599
+and some of the local changes
+
+00:02:31.599 --> 00:02:34.319
+I had in it so, you know,
+
+00:02:34.319 --> 00:02:35.280
+there's no point
+
+00:02:35.280 --> 00:02:37.920
+paying too much attention to it,
+
+02:37.920 --> 02:40.400
+but here we have a first warning.
+
+02:40.400 --> 02:42.959
+We see that this is using `cl`,
+
+02:42.959 --> 02:45.040
+so we want to change this to `cl-lib`,
+
+02:45.040 --> 00:02:46.879
+but that also means
+
+00:02:46.879 --> 00:02:48.400
+that we may have a new dependency
+
+00:02:48.400 --> 00:02:49.920
+on the `cl-lib` package,
+
+00:02:49.920 --> 00:02:51.120
+so we have to go check
+
+00:02:51.120 --> 00:02:52.000
+the start of the file
+
+00:02:52.000 --> 00:02:54.080
+to see if it already declares
+
+00:02:54.080 --> 00:02:56.800
+some dependency, and we see it doesn't,
+
+02:56.800 --> 00:03:00.640
+not even on a on a recent-enough Emacs,
+
+00:03:00.640 --> 00:03:02.325
+so we have to add--
+
+00:03:02.325 --> 00:03:05.360
+sorry, that's not going very well...
+
+03:05.360 --> 03:06.480
+oh...
+
+03:06.480 --> 03:08.560
+okay, we're going to get there somewhere...
+
+03:08.560 --> 03:13.200
+somehow...
+
+03:13.200 --> 03:18.020
+oh, that still wasn't it, wow, okay--
+
+03:20.480 --> 03:22.159
+and along the way...
+
+03:22.159 --> 00:03:24.159
+Of course, since we converted to `cl-lib`,
+
+00:03:24.159 --> 00:03:26.159
+we have to update the uses
+
+00:03:26.159 --> 00:03:29.840
+so `defstruct` shouldn't be used anymore.
+
+03:29.840 --> 03:31.599
+We may want to reindent this
+
+03:31.599 --> 03:36.000
+to get something a bit cleaner.
+
+03:37.040 --> 00:03:40.589
+We have here a missing quote...
+
+00:03:40.589 --> 00:03:41.920
+hash, sorry.
+
+03:41.920 --> 00:03:46.480
+We have `decf`, so `decf` is here,
+
+03:46.480 --> 00:03:48.000
+and that needs to be replaced
+
+00:03:48.000 --> 00:03:49.920
+with `cl-decf`.
+
+00:03:49.920 --> 00:03:51.120
+Sometimes it's worth doing
+
+00:03:51.120 --> 00:03:53.360
+a search-and-replace.
+
+00:03:53.360 --> 00:03:54.799
+Here I see there's only two,
+
+00:03:54.799 --> 00:03:57.760
+so it's not worth the trouble;
+
+03:57.760 --> 00:04:00.711
+I just do it by hand, and that's it.
+
+00:04:00.711 --> 00:04:02.000
+Well, that was easy.
+
+04:02.000 --> 04:05.000
+So let's recompile, see what it says.
+
+04:10.159 --> 04:12.959
+Ah, this is clean. Perfect!
+
+04:12.959 --> 04:15.000
+Let's.. we can go see...
+
+04:15.000 --> 04:17.280
+There is another one I had.
+
+04:17.280 --> 04:20.239
+Was it `counsel`, I think. Yes.
+
+04:20.239 --> 00:04:24.160
+So also I saw some funny things
+
+00:04:24.160 --> 00:04:24.320
+going on here.
+
+04:24.320 --> 00:04:26.479
+So I'm going to do
+
+00:04:26.479 --> 00:04:31.040
+the same procedure as before:
+
+00:04:31.040 --> 00:04:32.800
+I just compile the file
+
+00:04:32.800 --> 00:04:35.000
+and look at the warnings.
+
+04:38.000 --> 04:40.479
+Oh, we have many more here.
+
+04:40.479 --> 04:43.120
+So let's see...
+
+04:43.120 --> 00:04:46.504
+Okay, so we have missing quotes--
+
+00:04:46.504 --> 00:04:49.240
+oh, hashes. They're not really missing;
+
+04:49.240 --> 04:54.639
+it's just a personal preference.
+
+04:54.639 --> 04:57.440
+Oh, here... here's an important one:
+
+04:57.440 --> 04:59.280
+so as you know,
+
+04:59.280 --> 05:00.639
+if you look at the top of the file,
+
+05:00.639 --> 00:05:02.240
+you see that here
+
+00:05:02.240 --> 00:05:04.960
+it says it's using lexical binding,
+
+05:04.960 --> 05:07.120
+yet it's not fully using lexical binding,
+
+05:07.120 --> 00:05:08.960
+because as we just saw,
+
+00:05:08.960 --> 00:05:11.039
+there's a call to the `eval` function
+
+00:05:11.039 --> 00:05:11.680
+with only one argument,
+
+05:11.680 --> 05:13.280
+which means the second argument is nil,
+
+05:13.280 --> 05:16.880
+which means that the expression read
+
+05:16.880 --> 00:05:19.520
+by `read` here is going to be evaluated
+
+05:19.520 --> 00:05:22.160
+using the old dialects,
+
+00:05:22.160 --> 00:05:24.240
+which is only dynamic scoping.
+
+00:05:24.240 --> 00:05:25.680
+So here I like to just change this
+
+00:05:25.680 --> 00:05:26.800
+to use lexical scoping,
+
+05:26.800 --> 00:05:28.080
+which in most cases
+
+00:05:28.080 --> 00:05:29.680
+just doesn't make any difference.
+
+00:05:29.680 --> 00:05:30.870
+It just makes me feel better.
+
+05:35.919 --> 05:40.160
+So there's lots of those hashes
+
+05:40.160 --> 05:41.759
+all over the place.
+
+05:43.680 --> 05:45.680
+It's not strictly necessary, as you know,
+
+05:45.680 --> 05:51.500
+but I'm just going to add them anyway.
+
+05:52.479 --> 00:05:53.199
+Here we see
+
+00:05:53.199 --> 00:05:54.800
+it's not going to warn me here
+
+00:05:54.800 --> 00:05:55.759
+because it doesn't know
+
+00:05:55.759 --> 00:05:57.600
+that `ivy-make-magic-action`
+
+00:05:57.600 --> 00:05:58.400
+takes a function,
+
+00:05:58.400 --> 00:06:02.319
+but it's a pretty good guess that it does.
+
+06:12.319 --> 06:14.479
+And here's some more.
+
+06:14.479 --> 06:16.080
+What else do we have?
+
+06:16.080 --> 06:19.120
+Is that all we have here?
+
+06:19.120 --> 06:21.440
+Well, looks like it. Oh, I see a few...
+
+06:21.440 --> 06:27.680
+a few more here...
+
+06:27.680 --> 06:30.639
+and one more.
+
+06:30.639 --> 06:33.039
+And oh, this is more interesting.
+
+06:33.039 --> 06:35.280
+So here we have a use of `defadvice`,
+
+06:35.280 --> 06:37.440
+so if we go back
+
+06:37.440 --> 06:38.479
+to the beginning of the file,
+
+06:40.720 --> 06:42.880
+we see that it actually depends
+
+06:42.880 --> 00:06:47.360
+on Emacs 24.5, so it actually has
+
+06:47.360 --> 00:06:49.280
+the new advice system available
+
+00:06:49.280 --> 00:06:51.520
+without having to add any dependency,
+
+00:06:51.520 --> 00:06:53.599
+so there's really no good reason
+
+00:06:53.599 --> 00:06:54.880
+to keep this.
+
+06:54.880 --> 00:06:56.160
+So we just convert this
+
+00:06:56.160 --> 00:06:58.560
+to an `advice-add`,
+
+06:58.560 --> 00:06:59.840
+so it just says, you know,
+
+00:06:59.840 --> 00:07:02.319
+this is the function that's advised.
+
+07:02.319 --> 07:04.560
+This was a `before` advice.
+
+07:04.560 --> 07:05.500
+The `before` advice, sometimes,
+
+07:05.500 --> 07:08.479
+when we convert it to `advice-add`,
+
+07:08.479 --> 07:11.199
+need to be converted to `around` advice.
+
+07:11.199 --> 07:13.280
+This is when the function
+
+07:13.280 --> 07:15.840
+looks or modifies the argument.
+
+07:15.840 --> 07:18.639
+In this case, if I look at it,
+
+07:18.639 --> 07:20.319
+I see it doesn't seem to be using
+
+07:20.319 --> 07:21.280
+the arguments at all.
+
+07:21.280 --> 00:07:25.280
+So I'm just going to keep it
+
+00:07:25.280 --> 00:07:27.520
+as a `before` advice.
+
+07:27.520 --> 00:07:28.672
+And we have to give it a name.
+
+00:07:28.672 --> 00:07:30.880
+Well, we don't really have to,
+
+07:30.880 --> 07:32.800
+but it's convenient to give it a name
+
+07:32.800 --> 07:34.800
+to the new function.
+
+07:34.800 --> 00:07:36.880
+So here, they actually had
+
+00:07:36.880 --> 00:07:38.080
+given a name to the advice,
+
+00:07:38.080 --> 00:07:39.599
+so we're going to keep it,
+
+00:07:39.599 --> 00:07:41.440
+and indeed it's the only function.
+
+00:07:41.440 --> 00:07:43.360
+This name is not used as a function,
+
+00:07:43.360 --> 00:07:44.160
+so we can use it
+
+00:07:44.160 --> 00:07:46.960
+as the name of the function.
+
+07:46.960 --> 00:07:49.039
+I'm going to add a dash here
+
+00:07:49.039 --> 00:07:51.120
+because I think this function
+
+00:07:51.120 --> 00:07:53.039
+is really fundamentally
+
+00:07:53.039 --> 00:07:54.639
+an internal function.
+
+07:54.639 --> 07:56.720
+So here I just said I add the advice,
+
+07:56.720 --> 07:58.000
+but I still need to actually
+
+07:58.000 --> 07:59.800
+define the function.
+
+08:02.879 --> 00:08:04.160
+So that's what I do here,
+
+00:08:04.160 --> 00:08:06.500
+and we need here to list the arguments
+
+08:06.500 --> 08:08.240
+that are going to be taken.
+
+08:08.240 --> 00:08:09.199
+I don't know what these are,
+
+00:08:09.199 --> 00:08:10.960
+but I know we're not using them,
+
+00:08:10.960 --> 00:08:13.759
+so we'll just accept anything,
+
+08:13.759 --> 08:16.560
+and that will do the trick.
+
+08:16.560 --> 08:19.199
+It's a future-proof as well,
+
+08:19.199 --> 08:22.240
+so that should work.
+
+08:22.240 --> 00:08:24.160
+Oh, here we have another, so it's
+
+00:08:24.160 --> 00:08:29.919
+basically the same story, I think.
+
+08:29.919 --> 00:08:31.599
+It's a `before` advice as well.
+
+00:08:31.599 --> 00:08:32.959
+It doesn't seem to be using
+
+00:08:32.959 --> 00:08:35.599
+the argument at all,
+
+08:35.599 --> 00:08:38.596
+and let's see if this name is not taken.
+
+00:08:38.596 --> 00:08:43.360
+Yeah, good, so we can just do the same:
+
+08:43.360 --> 08:46.880
+turn this into an `advice-add`...
+
+08:46.880 --> 08:48.300
+`before`...
+
+08:53.040 --> 08:55.000
+I just add a dash here.
+
+09:02.480 --> 00:09:05.440
+And same thing--
+
+00:09:05.440 --> 00:09:06.959
+a function that just takes...
+
+09:06.959 --> 09:08.240
+because I don't know which arguments
+
+09:08.240 --> 09:10.480
+these are so...
+
+09:10.480 --> 09:14.640
+I think that should do the trick.
+
+09:14.640 --> 00:09:16.080
+Actually, we see that this function
+
+00:09:16.080 --> 00:09:18.560
+is very similar to the other one.
+
+09:18.560 --> 09:23.000
+Let's look at the two side-by-side...
+
+09:31.519 --> 00:09:33.055
+...it really is--
+
+00:09:33.055 --> 00:09:36.097
+oh, it's not exactly identical...
+
+00:09:36.097 --> 00:09:39.120
+it's, you know, we could try
+
+09:39.120 --> 09:41.680
+to merge them into a single function,
+
+09:41.680 --> 09:43.279
+but it's probably not worth the trouble
+
+09:43.279 --> 09:45.920
+so we can keep it this way.
+
+09:45.920 --> 09:48.720
+Okay, next warning: an `eval` again,
+
+09:48.720 --> 09:50.640
+so I could just add `t` here,
+
+09:50.640 --> 00:09:55.120
+but if you look at it a bit more,
+
+00:09:55.120 --> 00:09:56.000
+you see that the code
+
+00:09:56.000 --> 00:09:57.760
+we're going to evaluate
+
+09:57.760 --> 00:09:59.279
+using either lexical scoping
+
+00:09:59.279 --> 00:10:00.560
+or dynamic scoping
+
+00:10:00.560 --> 00:10:03.440
+is actually just evaluating a symbol,
+
+00:10:03.440 --> 00:10:06.240
+since we just call an `intern` here.
+
+10:06.240 --> 00:10:07.839
+So instead of replacing this
+
+00:10:07.839 --> 00:10:09.279
+by adding an argument,
+
+00:10:09.279 --> 00:10:11.680
+I'm just going to call `symbol-value`
+
+00:10:11.680 --> 00:10:12.640
+because that's exactly
+
+00:10:12.640 --> 00:10:14.480
+what we need to do here, right.
+
+00:10:14.480 --> 00:10:16.320
+I call this "strength reduction,"
+
+00:10:16.320 --> 00:10:17.200
+and I'm using
+
+00:10:17.200 --> 00:10:19.680
+a more primitive function instead,
+
+00:10:19.680 --> 00:10:23.200
+which does just what we need,
+
+10:23.200 --> 10:25.680
+and this one knows that it has to be
+
+10:25.680 --> 00:10:30.640
+accessed by dynamic scoping, of course.
+
+10:30.640 --> 00:10:32.959
+Here I have a `kmacro-ring`,
+
+00:10:32.959 --> 00:10:35.600
+so here I have a function that uses--
+
+10:35.600 --> 00:10:37.360
+`kmacro-ring` comes from
+
+00:10:37.360 --> 00:10:39.760
+the `kmacro` package, obviously,
+
+10:39.760 --> 10:41.600
+and we probably don't want to
+
+10:41.600 --> 10:42.959
+`require` `kmacro` package
+
+10:42.959 --> 00:10:48.560
+all over the place in `counsel` itself,
+
+10:48.560 --> 00:10:50.240
+because `counsel` can be used
+
+00:10:50.240 --> 00:10:53.279
+without `kmacro`.
+
+10:53.279 --> 00:10:55.200
+So I think we're just going to add
+
+00:10:55.200 --> 00:11:04.000
+a `defvar` to silence the warning.
+
+11:05.519 --> 00:11:10.720
+And we have several more. So we have
+
+11:10.720 --> 00:11:14.000
+`initial-counter-value`. (Sorry.)
+
+11:20.480 --> 11:23.360
+We have `kmacro-counter`.
+
+11:23.360 --> 11:25.760
+Do we have more?
+
+11:25.760 --> 11:28.560
+Oh, yes, we do.
+
+11:28.560 --> 11:35.040
+We have `kmacro-counter-value-start`
+
+11:35.040 --> 11:40.839
+and `kmacro-counter-format-start`.
+
+11:40.839 --> 11:43.920
+Okay.
+
+11:45.040 --> 11:50.160
+I hope this is it.
+
+11:50.160 --> 11:52.880
+`kmacro-ring`, `counter`, `ring`...
+
+11:52.880 --> 11:54.959
+blah blah blah.
+
+11:54.959 --> 00:12:00.240
+Here we have another one, `quote`.
+
+12:00.240 --> 12:03.279
+Here we have another hash missing.
+
+12:03.279 --> 12:06.079
+It's not missing...
+
+12:06.079 --> 12:08.000
+but same thing here.
+
+12:12.079 --> 00:12:16.560
+Okay, this is a function from `kmacro`.
+
+12:16.560 --> 00:12:18.079
+We could declare it
+
+00:12:18.079 --> 00:12:20.880
+just to silence the warning
+
+12:20.880 --> 00:12:22.320
+although we don't actually...
+
+00:12:22.320 --> 00:12:24.480
+normally, when we declare such things--
+
+12:24.480 --> 00:12:25.279
+same thing with variables--
+
+00:12:25.279 --> 00:12:27.300
+we should try to make sure that indeed
+
+12:27.300 --> 12:28.760
+by the time the code is executed,
+
+12:28.760 --> 12:30.800
+the function will be available,
+
+12:30.800 --> 00:12:32.800
+and then very often is
+
+00:12:32.800 --> 00:12:34.320
+because there's a `require`
+
+00:12:34.320 --> 00:12:35.680
+sometimes inside a function,
+
+00:12:35.680 --> 00:12:36.399
+and so we should put
+
+00:12:36.399 --> 00:12:37.680
+the `declare` function
+
+00:12:37.680 --> 00:12:39.920
+right after the `require`,
+
+00:12:39.920 --> 00:12:41.839
+but I don't think it's the case here.
+
+12:41.839 --> 00:12:46.399
+So I'm just going to to add this.
+
+12:46.399 --> 12:49.040
+I know this comes from `kmacro`,
+
+12:49.040 --> 00:12:53.500
+and I could actually check the arguments.
+
+12:56.320 --> 00:12:58.480
+It's just taking an optional argument
+
+00:12:58.480 --> 00:13:00.880
+so I'm going to put it there,
+
+00:13:00.880 --> 00:13:06.720
+so we have it complete.
+
+13:06.720 --> 13:10.800
+Okay, we can just recompile,
+
+13:10.800 --> 00:13:14.800
+see what is left
+
+00:13:14.800 --> 00:13:17.760
+from those warnings we've fixed,
+
+00:13:17.760 --> 00:13:21.360
+and we may have new warnings, in any case,
+
+00:13:21.360 --> 00:13:25.440
+because especially when we add the hashes,
+
+00:13:25.440 --> 00:13:29.519
+it tends to give us more warnings.
+
+13:29.519 --> 00:13:31.200
+So we have two more functions
+
+00:13:31.200 --> 00:13:34.560
+which are not known.
+
+13:34.560 --> 13:39.440
+You can just add them here...
+
+13:39.440 --> 13:44.720
+`set-format "kmacro"`
+
+13:44.720 --> 13:48.160
+and same thing for `set-counter`.
+
+13:48.160 --> 13:50.000
+Okay, whatever.
+
+13:54.959 --> 00:13:57.120
+This just takes a `format` argument,
+
+00:13:57.120 --> 00:14:05.920
+and this one just takes an `arg` argument.
+
+14:05.920 --> 14:10.800
+Okay, so let's see what this says now.
+
+14:10.800 --> 14:15.519
+Hopefully, there's no warnings anymore.
+
+14:15.519 --> 14:17.839
+We're done. Okay!
+
+14:17.839 --> 00:14:20.079
+Okay, the last one we're going to see
+
+00:14:20.079 --> 00:14:23.440
+is in `enwc`, I saw the other day...
+
+14:23.440 --> 14:26.240
+I think I have it here...
+
+14:27.760 --> 14:29.680
+here we go, yes...
+
+14:29.680 --> 14:32.800
+so `enwc` is an interesting package here
+
+14:32.800 --> 14:35.680
+because it has-- as you can see it has--
+
+14:35.680 --> 14:37.760
+it's lexical binding,
+
+14:37.760 --> 14:39.760
+but actually some of the files in it
+
+14:39.760 --> 14:42.320
+do not use lexical binding,
+
+14:42.320 --> 14:44.320
+so it has been partly converted
+
+14:44.320 --> 14:46.160
+but not completely.
+
+14:46.160 --> 00:14:49.920
+So here I'm going to
+
+00:14:49.920 --> 00:14:54.160
+enable lexical binding.
+
+14:54.160 --> 14:58.880
+I have also, I think, in `cm`...
+
+14:58.880 --> 15:01.199
+yes...
+
+15:01.199 --> 15:04.000
+so I enable it here,
+
+15:04.000 --> 15:07.360
+and also, I think, `test`.
+
+15:07.360 --> 00:15:09.360
+The test files are often
+
+00:15:09.360 --> 00:15:11.839
+somewhat problematic
+
+00:15:11.839 --> 00:15:15.199
+because very often they're not quite
+
+15:15.199 --> 15:18.880
+as heavily tested themselves, actually,
+
+15:18.880 --> 00:15:20.320
+or they only run
+
+00:15:20.320 --> 00:15:22.160
+in very specific contexts,
+
+00:15:22.160 --> 00:15:24.399
+and so they may have problems
+
+00:15:24.399 --> 00:15:27.360
+with missing `requires` or using packages
+
+00:15:27.360 --> 00:15:29.199
+which are not explicitly in the dependencies
+
+15:29.199 --> 15:31.279
+and those kinds of things.
+
+15:31.279 --> 15:33.360
+I think this is not the case here,
+
+15:33.360 --> 15:35.440
+but we'll see.
+
+15:35.440 --> 15:38.880
+`enwc`...
+
+15:38.880 --> 15:42.320
+Yes, I want to save this one and that one.
+
+15:42.320 --> 15:45.000
+Let's see what it says.
+
+15:47.199 --> 15:51.440
+Okay, unused lexical variable `x`...
+
+15:51.440 --> 15:52.240
+`x`...
+
+15:52.240 --> 15:57.120
+Yes, so here we have an unused variable,
+
+15:57.120 --> 15:58.320
+and indeed, it's not used.
+
+15:58.320 --> 16:00.880
+It probably had to be named before
+
+16:00.880 --> 16:04.079
+because it was...
+
+16:04.079 --> 00:16:05.120
+with dynamic scoping,
+
+00:16:05.120 --> 00:16:06.399
+the `dotimes` requires
+
+00:16:06.399 --> 00:16:08.160
+the variable to be named, actually,
+
+00:16:08.160 --> 00:16:10.399
+because it's used internally somehow,
+
+16:10.399 --> 00:16:11.600
+but with lexical scoping,
+
+00:16:11.600 --> 00:16:12.320
+that's not the case,
+
+00:16:12.320 --> 00:16:14.079
+so we can just put an underscore.
+
+16:14.079 --> 00:16:15.199
+I'm going to change this
+
+00:16:15.199 --> 00:16:16.880
+because I really don't like
+
+16:16.880 --> 16:19.000
+this three-part `dotimes`.
+
+16:19.000 --> 00:16:21.360
+I prefer to have
+
+00:16:21.360 --> 00:16:23.040
+the return value at the end.
+
+16:23.040 --> 00:16:26.480
+It's sort of stashed hidden in the middle.
+
+16:26.480 --> 16:29.680
+That's just a personal preference.
+
+16:29.680 --> 16:31.920
+Okay, what else... we have a `widget`.
+
+16:31.920 --> 16:34.000
+Okay, this argument here says that
+
+16:34.000 --> 16:37.000
+it's not used, so if we look at...
+
+16:44.320 --> 00:16:47.040
+We were here, right? Yes. Right here.
+
+00:16:47.040 --> 00:16:50.480
+Indeed, `widget` is really not used.
+
+16:50.480 --> 16:51.230
+(Sorry.)
+
+16:53.600 --> 00:16:55.279
+Here's what I get for using
+
+00:16:55.279 --> 00:16:58.320
+a somewhat vanilla configuration of Emacs,
+
+16:58.320 --> 17:01.279
+compared to the one I use...
+
+17:01.279 --> 17:04.000
+the personally tricked one.
+
+17:04.000 --> 17:05.439
+Actually, I can...
+
+17:05.439 --> 17:07.919
+so we can just mark this argument
+
+17:07.919 --> 17:09.360
+as unused,
+
+17:09.360 --> 17:11.199
+and we don't want to remove the argument
+
+17:11.199 --> 00:17:12.480
+probably, or maybe we could;
+
+00:17:12.480 --> 00:17:15.679
+we could see where the function is used,
+
+17:15.679 --> 00:17:18.542
+and here we see that it's passed
+
+00:17:18.542 --> 00:17:20.959
+to a higher-order function,
+
+17:20.959 --> 17:24.480
+basically, so it's going to be...
+
+17:24.480 --> 00:17:25.360
+We can't really change
+
+00:17:25.360 --> 00:17:25.760
+the calling convention
+
+17:25.760 --> 17:27.120
+so we have to mark the argument
+
+17:27.120 --> 17:29.600
+as being just an unused argument,
+
+17:29.600 --> 17:34.000
+but we're going to still receive it.
+
+17:34.000 --> 00:17:35.360
+And here it says same thing:
+
+00:17:35.360 --> 00:17:38.240
+that `widget` is not used in this function.
+
+17:38.240 --> 17:40.000
+Let's take a look at the function.
+
+17:40.000 --> 17:42.400
+Indeed it seems it's not used,
+
+17:42.400 --> 17:44.000
+and so we're just going to mark it
+
+17:44.000 --> 17:46.480
+as unused.
+
+17:46.480 --> 00:17:48.320
+This is the part of the conversion
+
+00:17:48.320 --> 00:17:49.200
+to lexical scoping
+
+00:17:49.200 --> 00:17:51.280
+that's somewhat tricky sometimes
+
+00:17:51.280 --> 00:17:53.760
+because we don't really know
+
+00:17:53.760 --> 00:17:56.240
+whether this variable should be using
+
+00:17:56.240 --> 00:17:58.559
+lexical scoping or dynamic scoping.
+
+17:58.559 --> 00:18:00.480
+The fact that it's not used
+
+00:18:00.480 --> 00:18:02.320
+is a hint that there's probably
+
+00:18:02.320 --> 00:18:03.679
+something going on,
+
+18:03.679 --> 00:18:04.960
+so either it's not used
+
+00:18:04.960 --> 00:18:06.400
+because it should be using
+
+00:18:06.400 --> 00:18:07.200
+dynamic scoping--
+
+00:18:07.200 --> 00:18:08.080
+it is going to be used
+
+00:18:08.080 --> 00:18:10.480
+by some other code somewhere else--
+
+18:10.480 --> 00:18:11.840
+or it's really not used
+
+00:18:11.840 --> 00:18:14.000
+because it's just not used, right,
+
+00:18:14.000 --> 00:18:16.320
+and so we need to distinguish the two,
+
+00:18:16.320 --> 00:18:20.880
+and for that, I basically use
+
+00:18:20.880 --> 00:18:22.240
+my own judgment.
+
+18:22.240 --> 18:24.880
+This is based typically on the fact that
+
+18:24.880 --> 00:18:27.760
+this is just a very short name,
+
+00:18:27.760 --> 00:18:32.000
+and most local identifiers use short names,
+
+18:32.000 --> 18:34.400
+whereas item values used for dynamic scoping
+
+18:34.400 --> 18:36.720
+typically have a package prefix
+
+18:36.720 --> 00:18:37.679
+or something like this.
+
+00:18:37.679 --> 00:18:38.960
+So the fact that it's a short name
+
+00:18:38.960 --> 00:18:40.880
+gives me a good idea.
+
+18:40.880 --> 00:18:41.520
+Here in this case,
+
+00:18:41.520 --> 00:18:42.640
+I actually look at the code,
+
+00:18:42.640 --> 00:18:45.600
+and we see that there's nothing in here
+
+18:45.600 --> 00:18:47.039
+that may actually refer
+
+00:18:47.039 --> 00:18:48.080
+to this variable `widget`,
+
+00:18:48.080 --> 00:18:49.280
+so I think it's safe,
+
+18:49.280 --> 00:18:51.360
+but in the general case,
+
+00:18:51.360 --> 00:18:54.400
+we may look here and be surprised,
+
+18:54.400 --> 00:18:55.760
+or, you know, you may call out
+
+00:18:55.760 --> 00:18:58.320
+the functions which may themselves end up
+
+18:58.320 --> 19:00.080
+referring to this variable.
+
+19:00.080 --> 19:02.640
+So sometimes we need to investigate a
+
+19:02.640 --> 19:03.840
+little more.
+
+19:03.840 --> 19:05.919
+We are most of the time not completely sure
+
+19:05.919 --> 19:07.520
+whether the result is correct or not,
+
+19:07.520 --> 00:19:09.520
+of course, so the other thing
+
+00:19:09.520 --> 00:19:10.640
+you may want to check
+
+00:19:10.640 --> 00:19:12.160
+is also uses of things
+
+00:19:12.160 --> 00:19:14.400
+like `eval` or `symbol-value`.
+
+19:14.400 --> 19:17.200
+So it's often a good idea to search,
+
+19:17.200 --> 00:19:18.799
+and you do a search of `eval`,
+
+00:19:18.799 --> 00:19:21.490
+and you see here it's using `eval`.
+
+00:19:21.490 --> 00:19:24.160
+Hmmm... Okay, so what does this `eval` do?
+
+19:24.160 --> 00:19:25.760
+It's evaluating expressions
+
+00:19:25.760 --> 00:19:28.240
+that appear in `args` here
+
+19:28.240 --> 19:31.840
+so you can see where those args come from,
+
+19:31.840 --> 00:19:35.120
+and we see here, these are expressions
+
+00:19:35.120 --> 00:19:36.840
+that don't do anything very special.
+
+19:36.840 --> 19:41.520
+It's just using `make-supplicant-choice`,
+
+19:41.520 --> 19:44.960
+and `make-supplicant-choice` itself
+
+19:44.960 --> 19:47.120
+just doesn't refer to `widget`, for example,
+
+19:47.120 --> 19:50.000
+so you know we should be safe,
+
+19:50.000 --> 19:52.559
+but while I'm here...
+
+19:52.559 --> 19:53.840
+okay, well, then we can do that later.
+
+19:53.840 --> 19:55.679
+Well, that's actually the next warning,
+
+19:55.679 --> 00:19:58.080
+exactly. So here we see that this is
+
+00:19:58.080 --> 00:20:00.000
+using the dynamically-scoped dialect,
+
+00:20:00.000 --> 00:20:02.799
+so we convert it to lexical-scoped.
+
+20:02.799 --> 20:04.559
+Of course, this may introduce errors,
+
+20:04.559 --> 20:07.200
+but we hope it doesn't.
+
+20:07.200 --> 20:08.880
+And actually, it was a good change here,
+
+20:08.880 --> 20:12.080
+because if you see again,
+
+20:12.080 --> 00:20:14.240
+this actually evals expressions
+
+00:20:14.240 --> 00:20:16.159
+that appear here in `args`,
+
+20:16.159 --> 20:18.480
+and so these are expressions
+
+20:18.480 --> 20:21.039
+that are passed here.
+
+20:21.039 --> 20:23.679
+So this expression here used to be
+
+20:23.679 --> 00:20:24.480
+evaluated with dynamic scoping,
+
+00:20:24.480 --> 00:20:28.000
+even though it appears to be normal code
+
+00:20:28.000 --> 00:20:29.760
+within this file, which says
+
+00:20:29.760 --> 00:20:32.559
+it's using lexical scoping,
+
+20:32.559 --> 20:34.400
+and so there are some remnants
+
+20:34.400 --> 20:36.640
+of dynamic scoping all over the place
+
+20:36.640 --> 00:20:37.840
+in Emacs still, because we have
+
+00:20:37.840 --> 00:20:43.679
+those calls of `eval` with a nil argument.
+
+20:44.880 --> 20:47.039
+Here we have `cons`...
+
+20:47.039 --> 20:50.400
+that needs to be `hash quoted`.
+
+20:52.400 --> 00:20:54.080
+Oh, and we have a reference
+
+00:20:54.080 --> 00:20:56.720
+to this variable `enwc-edit-id'.
+
+00:20:56.720 --> 00:20:57.520
+So this is clearly
+
+00:20:57.520 --> 00:21:00.400
+a dynamic-scoped variable.
+
+21:00.400 --> 21:02.000
+We can either add a `defvar`
+
+21:02.000 --> 21:03.440
+to silence the warning,
+
+21:03.440 --> 00:21:06.799
+or maybe we can `require` the package.
+
+21:06.799 --> 21:10.080
+The file that defines it...
+
+21:14.080 --> 21:17.360
+So let's see where it's defined.
+
+21:17.360 --> 21:21.200
+Here it's defined in `enwc.el`,
+
+21:21.200 --> 00:21:23.440
+so I'm going to try just to add
+
+00:21:23.440 --> 00:21:25.039
+the dependency.
+
+21:25.039 --> 00:21:27.840
+I'm going to `require` here. This is risky.
+
+21:27.840 --> 21:30.159
+We'll see when we compile a file later,
+
+21:30.159 --> 21:32.320
+we may get a circular dependency
+
+21:32.320 --> 21:34.720
+because of it.
+
+21:34.720 --> 21:36.320
+If that's the case, we're going to
+
+21:36.320 --> 00:21:38.320
+have to remove this `require`
+
+00:21:38.320 --> 00:21:42.000
+and instead put `defvar`s.
+
+21:42.000 --> 21:42.559
+Sometimes it's worth actually
+
+21:42.559 --> 21:44.640
+looking further at the various files
+
+21:44.640 --> 00:21:48.080
+to see how to redefine the dependencies
+
+21:48.080 --> 21:49.840
+to break those circular dependencies,
+
+21:49.840 --> 21:52.320
+but it's often not really
+
+21:52.320 --> 21:54.720
+worth the trouble.
+
+21:55.679 --> 00:21:58.400
+Oh, no, that's not what--
+
+00:21:58.400 --> 00:22:01.440
+I'm not going to the right place...
+
+00:22:01.440 --> 00:22:07.039
+Here I was. So here `edit-map`.
+
+22:07.039 --> 22:09.760
+Well, we can probably...
+
+22:09.760 --> 22:12.159
+it may disappear or...
+
+22:12.159 --> 22:13.760
+oh, I see.
+
+22:13.760 --> 22:16.320
+Okay, so this `edit-map` actually is
+
+22:16.320 --> 22:18.559
+defined in this very file.
+
+22:18.559 --> 00:22:20.240
+It's just that it's defined later.
+
+00:22:20.240 --> 00:22:21.600
+So all we need to do
+
+00:22:21.600 --> 00:22:24.320
+is to move this definition
+
+00:22:24.320 --> 00:22:27.200
+to before its first use,
+
+22:27.200 --> 22:28.960
+since otherwise it's going to be taken
+
+22:28.960 --> 22:33.520
+as lexically-scoped, which we don't want.
+
+22:33.520 --> 22:35.360
+And while I'm here, I see this `copy-keymap`.
+
+22:35.360 --> 22:38.400
+I don't like `copy-keymap`,
+
+22:38.400 --> 22:40.960
+so I'm going to change this
+
+22:40.960 --> 22:44.080
+to a normal keymap,
+
+22:44.080 --> 22:46.159
+and then I'm just going to use
+
+22:46.159 --> 22:50.080
+`set-keymap-parent` instead of `copy-keymap`
+
+22:50.080 --> 00:22:51.600
+to get basically the same result,
+
+00:22:51.600 --> 00:22:55.280
+but without having copied anything.
+
+22:55.280 --> 22:57.760
+And this one will disappear...
+
+22:57.760 --> 23:00.240
+this one as well-- or should hopefully,
+
+23:00.240 --> 23:03.360
+thanks to the `require`.
+
+23:03.360 --> 23:09.840
+Here we have a `hash` missing,
+
+23:09.840 --> 00:23:11.840
+and we have some functions
+
+00:23:11.840 --> 00:23:14.000
+which are unknown,
+
+23:14.000 --> 00:23:14.666
+so let's see...
+
+00:23:14.666 --> 00:23:18.240
+Where is this function defined?
+
+23:18.240 --> 23:21.679
+Nowhere. Huh, wonderful, okay.
+
+23:21.679 --> 00:23:25.200
+So we'll just leave it like it is,
+
+00:23:25.200 --> 00:23:27.120
+and that's going to be
+
+00:23:27.120 --> 00:23:31.360
+for the author of the package to fix.
+
+23:31.360 --> 23:37.120
+How about this one?
+
+23:37.120 --> 23:40.240
+Oh, okay, so it's defined in `enwc.el`
+
+23:40.240 --> 00:23:41.679
+so presumably,
+
+00:23:41.679 --> 00:23:44.559
+this is going to disappear as well.
+
+23:50.159 --> 23:51.030
+One more...
+
+23:56.159 --> 23:58.640
+Okay, so this one
+
+23:58.640 --> 23:59.919
+is just like the previous one.
+
+23:59.919 --> 24:04.000
+We're going to leave it at that.
+
+24:04.000 --> 24:06.720
+And this is it! Huh, wonderful.
+
+24:06.720 --> 24:10.000
+So let's recompile.
+
+24:16.080 --> 24:23.520
+Oh, we have a warning for `fin`.
+
+24:25.679 --> 00:24:28.640
+This variable seems not to be used
+
+00:24:28.640 --> 00:24:32.000
+anywhere in the file, so we're just
+
+24:32.000 --> 00:24:33.440
+going to remove it.
+
+00:24:33.440 --> 00:24:34.880
+I leave it there just in case
+
+00:24:34.880 --> 00:24:36.000
+someone needs later on
+
+00:24:36.000 --> 00:24:37.679
+to look for a `fin` variable
+
+00:24:37.679 --> 00:24:39.760
+to see where it used to be.
+
+24:39.760 --> 24:41.600
+Again, you know, maybe it's actually used...
+
+24:41.600 --> 24:43.519
+yeah, dynamic scoping somehow,
+
+24:43.519 --> 24:46.159
+but given the short name,
+
+24:46.159 --> 24:48.960
+I presume this is not the case.
+
+24:48.960 --> 24:51.200
+Here, oh, that's the code removed
+
+24:51.200 --> 24:52.559
+that had a hash missing.
+
+24:52.559 --> 24:54.159
+That's the one that's not defined.
+
+24:54.159 --> 24:56.799
+This one is not defined,
+
+24:56.799 --> 24:58.000
+and this is it.
+
+24:58.000 --> 25:03.039
+Let's make a last recompilation
+
+25:03.039 --> 25:06.080
+to see if we missed yet something else.
+
+25:06.080 --> 25:07.919
+Nope, and that's it, okay.
+
+25:07.919 --> 25:11.200
+Well, here we go; we're done.
+
+25:11.200 --> 00:25:14.240
+Okay so this was it.
+
+00:25:14.240 --> 00:25:15.440
+You've seen, I think,
+
+25:15.440 --> 25:18.000
+pretty much examples of all of those,
+
+25:18.000 --> 25:20.159
+and I hope you enjoyed it.
+
+25:20.960 --> 25:22.580
+Lessons to take home:
+
+25:22.580 --> 25:23.919
+use the byte compiler.
+
+25:23.919 --> 25:26.000
+You can also use `flymake-mode` instead.
+
+25:26.000 --> 00:25:31.600
+I recommend enabling it as much as you can,
+
+25:31.600 --> 25:33.520
+and head the warnings.
+
+25:33.520 --> 25:35.440
+Follow the warnings. Try to fix them.
+
+25:35.440 --> 25:37.200
+If you can fix all of the warnings,
+
+25:37.200 --> 00:25:38.080
+it's always much better,
+
+00:25:38.080 --> 00:25:39.200
+because then the new warnings
+
+00:25:39.200 --> 00:25:40.960
+really show up.
+
+25:40.960 --> 25:42.880
+And once you've done it, it's really
+
+25:42.880 --> 00:25:44.559
+kind of-- because there's always
+
+00:25:44.559 --> 00:25:46.799
+new things coming up.
+
+25:46.799 --> 25:48.799
+And I think this is it.
+
+25:48.799 --> 00:25:50.720
+I hope you liked it, and thank you
+
+00:25:50.720 --> 00:25:56.000
+for attending this presentation. Bye.
+
+00:25:56.000 --> 00:25:57.000
+[captions by Hannah Miller]
diff --git a/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--answers--chapters.vtt b/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--answers--chapters.vtt
new file mode 100644
index 00000000..a6b3139b
--- /dev/null
+++ b/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--answers--chapters.vtt
@@ -0,0 +1,40 @@
+WEBVTT
+
+00:00:00.080 --> 00:04:30.839
+Thanks
+
+00:04:30.840 --> 00:06:10.999
+How did you come up with this knowledge? By doing or by experience or by reading books? Which?
+
+00:06:10.000 --> 00:08:39.719
+How did you come to start using Org?
+
+00:08:39.720 --> 00:10:55.199
+You have recently overseen a major transition for org mode maintenance. What would you advise for other teams that are preparing for transitions so that processes can be maintained with minimal disruption? How do we take processes that were originally maintained by a single person to one maintained by multiple people?
+
+00:10:55.200 --> 00:11:27.879
+Which place is the right place to request a dark mode in Org Mode website?
+
+00:11:27.880 --> 00:15:09.879
+More thanks
+
+00:15:09.880 --> 00:17:24.519
+Does this mean that you do not need to be technical to become a maintainer?
+
+00:17:24.520 --> 00:21:11.799
+What does the day of the Org Mode maintainer look like? Lots of hours of work every day?
+
+00:21:11.800 --> 00:24:21.439
+Do you think having centralized roles for people to carry out certain tasks such as documentation across multiple areas would be a constructive approach to inviting new maintainers (in contrast to "every person take an issue of their own choosing", which leaves parts of maintenance and documentation neglected)?
+
+00:24:21.440 --> 00:27:52.319
+I think Org has and may potentially greatly influence Emacs development. If you would tend to agree, do you have places where you feel Emacs need to "pull back" harder, to influence Org? Key areas where Org is clearly "leading the way"?
+
+00:27:52.320 --> 00:35:32.839
+Could you expand a little on what's happening on contrib?
+
+00:35:32.840 --> 00:54:54.079
+Orgdown
+
+00:54:54.080 --> 00:54:55.080
+What about backlinks?
diff --git a/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main--chapters.vtt b/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main--chapters.vtt
new file mode 100644
index 00000000..f01f19da
--- /dev/null
+++ b/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main--chapters.vtt
@@ -0,0 +1,64 @@
+WEBVTT
+
+00:00:00.799 --> 00:00:47.567
+Introduction
+
+00:00:47.568 --> 00:02:19.600
+What is a free software maintainer?
+
+00:02:19.601 --> 00:03:24.600
+What do I do as the Org maintainer?
+
+00:03:24.601 --> 00:04:18.400
+Do you see a pattern here?
+
+00:04:18.401 --> 00:05:03.900
+What a free software maintainer is or should be
+
+00:05:03.901 --> 00:05:26.900
+Summary
+
+00:05:26.901 --> 00:06:28.800
+ACDC: Asynchronous Collective Distributed Care
+
+00:06:28.801 --> 00:06:37.533
+How can you help Emacs maintainers?
+
+00:06:37.534 --> 00:06:56.500
+Become a maintainer for your own project, however small
+
+00:06:56.501 --> 00:07:10.900
+Volunteer as a contributor steward for another project
+
+00:07:10.901 --> 00:07:25.400
+Learn how to teach
+
+00:07:25.401 --> 00:07:35.633
+Test and enhance the project's contribution process
+
+00:07:35.634 --> 00:07:52.833
+Take care of the project's calls for help
+
+00:07:52.834 --> 00:08:08.800
+Encourage users from outside the project to contribute to the core forum
+
+00:08:08.801 --> 00:08:16.600
+Let the core forum know about what happens in this outside world
+
+00:08:16.601 --> 00:08:26.100
+Propose your help for non-code tasks
+
+00:08:26.101 --> 00:08:42.067
+If you expect someone else to fix your bug, try fixing someone else's bug first
+
+00:08:42.068 --> 00:08:49.233
+Don't expect the maintainer to be a hotline
+
+00:08:49.234 --> 00:08:57.167
+Complete this list
+
+00:08:57.168 --> 00:09:35.667
+Yes, this is hard
+
+00:09:35.668 --> 00:09:36.668
+Thanks
diff --git a/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt b/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt
new file mode 100644
index 00000000..0bd1e6d1
--- /dev/null
+++ b/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt
@@ -0,0 +1,730 @@
+WEBVTT
+
+00:00.799 --> 00:02.734
+Hello, I'm Bastien Guerry,
+
+00:02.734 --> 00:04.701
+and I'm very happy to be here.
+
+00:04.701 --> 00:07.734
+I've been the Org-mode maintainer
+
+00:07.734 --> 00:09.501
+for the last 10 years,
+
+00:09.501 --> 00:11.368
+and I would like to ask the question
+
+00:11.368 --> 00:14.034
+how to help GNU Emacs maintainers in general.
+
+00:14.400 --> 00:15.519
+By GNU Emacs, I mean
+
+00:15.519 --> 00:18.080
+the whole GNU Emacs ecosystem,
+
+00:18.080 --> 00:19.520
+including packages,
+
+00:19.520 --> 00:21.039
+not just the core GNU Emacs
+
+00:21.039 --> 00:24.880
+that we all love.
+
+00:24.880 --> 00:28.268
+After a decade of dealing with
+
+00:28.268 --> 00:29.368
+the Org community,
+
+00:29.368 --> 00:32.934
+my view of what a maintainer is changed.
+
+00:32.934 --> 00:35.101
+I'd like to share some ideas with you
+
+00:35.101 --> 00:37.234
+as I think they could be useful
+
+00:37.234 --> 00:39.201
+to help Emacs maintainers in general.
+
+00:39.201 --> 00:41.968
+And hopefully, these ideas also apply
+
+00:41.968 --> 00:43.601
+to other free software projects,
+
+00:43.601 --> 00:45.901
+at least those where contributors
+
+00:45.901 --> 00:47.568
+are all volunteers.
+
+00:47.568 --> 00:51.368
+First of all, what is a free software maintainer?
+
+00:51.368 --> 00:54.601
+Obviously this is some rich dude
+
+00:54.601 --> 00:56.268
+with a lot of free time
+
+00:56.268 --> 00:58.968
+Acting both as a supersmart hacker
+
+00:58.968 --> 01:02.401
+and a super-patient community manager
+
+01:02.401 --> 01:05.101
+Someone who acts as the central hotline
+
+01:05.101 --> 01:06.901
+for users and contributors
+
+01:06.901 --> 01:09.568
+Who knows how to write many emails,
+
+01:09.568 --> 01:11.468
+probably at the same time
+
+01:11.468 --> 01:14.101
+Who does not hesitate
+
+01:14.101 --> 01:16.934
+to publicly scold annoying users
+
+01:16.934 --> 01:19.801
+and someone narcissistic enough
+
+01:19.801 --> 01:22.668
+to seek credits for community efforts
+
+01:22.668 --> 01:26.034
+But really looking for a job
+
+01:26.034 --> 01:27.768
+in some big IT company
+
+01:27.768 --> 01:32.234
+Right? Well... no. That was a joke.
+
+01:32.234 --> 01:34.601
+But maybe you did smile
+
+01:34.601 --> 01:36.634
+and that's probably
+
+01:36.634 --> 01:39.401
+because there is some truth to it.
+
+01:39.401 --> 01:43.834
+Why? Because our culture encourages
+
+01:43.834 --> 01:45.634
+free software users and casual contributors
+
+01:45.634 --> 01:47.868
+to think about maintainers this way.
+
+01:47.868 --> 01:51.568
+Don't we continue to use the expression
+
+01:51.568 --> 01:54.001
+“Benevolent Dictator For Life”?
+
+01:54.001 --> 01:56.434
+This is what I'd call
+
+01:56.434 --> 01:58.068
+the “Spiderman syndrome”:
+
+01:58.068 --> 02:01.268
+maintenance is perceived in terms of
+
+02:01.268 --> 02:04.168
+great power and great responsibility.
+
+02:04.168 --> 02:07.268
+But I believe our culture of superheroes
+
+02:07.268 --> 02:09.101
+is not helpful here:
+
+02:09.101 --> 02:11.301
+it does not reflect the truth,
+
+02:11.301 --> 02:14.134
+it does not set the right expectations,
+
+02:14.134 --> 02:16.334
+and it prevents contributors
+
+02:16.334 --> 02:17.601
+to properly understand
+
+02:17.601 --> 02:19.601
+how to help maintainers.
+
+02:19.601 --> 02:21.334
+So let's start again.
+
+02:21.334 --> 02:24.968
+And instead of asking what a maintainer is,
+
+02:24.968 --> 02:27.068
+let me take the list of
+
+02:27.068 --> 02:30.001
+what I do as the Org maintainer.
+
+02:30.001 --> 02:31.034
+Here is my TODO-list:
+
+02:31.034 --> 02:33.934
+First of all, I take care of
+
+02:33.934 --> 02:35.201
+the orgmode.org website.
+
+02:35.201 --> 02:37.401
+I also take care of the
+
+02:37.401 --> 02:41.434
+org-contrib NonGNU ELPA package.
+
+02:41.434 --> 02:44.034
+I do gardening on the
+
+02:44.034 --> 02:46.168
+community-driven documentation, Worg.
+
+02:46.168 --> 02:48.401
+I do add contributors to Worg.
+
+02:48.401 --> 02:51.134
+I read emails on emacs-orgmode@,
+
+02:51.134 --> 02:54.134
+emacs-devel@ and bug-gnu-emacs@.
+
+02:54.134 --> 02:56.868
+I contribute to email moderation
+
+02:56.868 --> 02:59.801
+of the emacs-orgmode@ list
+
+02:59.801 --> 03:02.468
+with a bunch of other contributors.
+
+03:02.468 --> 03:05.134
+I reply to private emails
+
+03:05.134 --> 03:06.834
+asking me for help about org-mode.
+
+03:06.834 --> 03:10.168
+I coordinate with GNU Emacs maintainers
+
+03:10.168 --> 03:12.934
+and thanks to them for Emacs/Org integration.
+
+03:12.934 --> 03:16.034
+I contribute with public emails
+
+03:16.034 --> 03:17.801
+on the Org mailing list.
+
+03:17.801 --> 03:20.501
+I release new versions of Org-mode.
+
+03:20.501 --> 03:22.634
+and sometimes, sometimes,
+
+03:22.634 --> 03:24.601
+I contribute with code.
+
+03:24.601 --> 03:27.168
+Do you see a pattern here?
+
+03:27.168 --> 03:30.468
+Yes. I bet the last three tasks
+
+03:30.468 --> 03:31.801
+is what most people have in mind
+
+03:31.801 --> 03:34.201
+when they think of a maintainer:
+
+03:34.201 --> 03:35.534
+it's all about hacking
+
+03:35.534 --> 03:37.734
+and being an efficient hotline.
+
+03:37.734 --> 03:39.734
+But in fact, these tasks
+
+03:39.734 --> 03:41.601
+are only a superficial part
+
+03:41.601 --> 03:43.201
+of what I do as a maintainer.
+
+03:43.201 --> 03:47.001
+Some would consider that these core tasks
+
+03:47.001 --> 03:48.501
+are the interesting ones,
+
+03:48.501 --> 03:51.634
+while the others are the boring ones.
+
+03:51.634 --> 03:53.901
+I don't see it that way:
+
+03:53.901 --> 03:56.534
+some tasks are about the product,
+
+03:56.534 --> 03:58.801
+others are about the project.
+
+03:58.801 --> 04:00.834
+Without a good product,
+
+04:00.834 --> 04:02.168
+there is little chance
+
+04:02.168 --> 04:03.401
+you will have a good project,
+
+04:03.401 --> 04:07.534
+but maintaining a project requires thinking
+
+04:07.534 --> 04:09.301
+in terms of infrastructure,
+
+04:09.301 --> 04:11.068
+not in terms of bugs,
+
+04:11.068 --> 04:13.334
+thinking in terms of resources
+
+04:13.334 --> 04:16.701
+that enable both users and contributors,
+
+04:16.701 --> 04:18.401
+not in terms of commits.
+
+04:18.401 --> 04:21.001
+So let me try to define again
+
+04:21.001 --> 04:23.334
+what a free software maintainer is
+
+04:23.334 --> 04:24.434
+or should be.
+
+04:24.434 --> 04:26.234
+A free software maintainer
+
+04:26.234 --> 04:28.368
+is someone who cares about
+
+04:28.368 --> 04:30.968
+enabling users and contributors
+
+04:30.968 --> 04:32.768
+so that they collectively
+
+04:32.768 --> 04:34.201
+take care of the project.
+
+04:34.201 --> 04:36.734
+See another pattern here?
+
+04:36.734 --> 04:40.301
+Yeah, that's all about the project,
+
+04:40.301 --> 04:41.501
+versus the product.
+
+04:41.501 --> 04:43.634
+It's about taking care of it,
+
+04:43.634 --> 04:46.934
+versus being a direct hotline for users,
+
+04:46.934 --> 04:49.901
+so, it's caring about the project infrastructure
+
+04:49.901 --> 04:52.134
+and about empowering users
+
+04:52.134 --> 04:54.234
+with tools and incentives
+
+04:54.234 --> 04:55.268
+so that they care too.
+
+04:55.268 --> 04:58.434
+How can you help such a maintainer?
+
+04:58.434 --> 05:00.901
+By focusing on the project
+
+05:00.901 --> 05:03.901
+and becoming an enabler yourself.
+
+05:03.901 --> 05:06.934
+So, let's pause and summarize:
+
+05:06.934 --> 05:08.801
+our culture wants heroes
+
+05:08.801 --> 05:12.434
+and this leads us to expect maintainers
+
+05:12.434 --> 05:15.234
+to be superhackers and superactive hotlines.
+
+05:15.234 --> 05:19.568
+This is the HOT mindset of maintenance,
+
+05:19.568 --> 05:23.368
+where the maintainers are Headmasters Of Tweaks
+
+05:23.368 --> 05:26.901
+and soon becomes the Headmaster Of Troubles.
+
+05:26.901 --> 05:29.501
+To resist this HOT mindset,
+
+05:29.501 --> 05:33.201
+I suggest to redefine maintenance as ACDC:
+
+05:33.201 --> 05:36.534
+“Asynchronous Collective Distributed Care”:
+
+05:36.534 --> 05:38.968
+“Asynchronous” because time management
+
+05:38.968 --> 05:40.168
+is a private matter
+
+05:40.168 --> 05:41.968
+and we are all volunteers.
+
+05:41.968 --> 05:44.168
+“Collective” because, well,
+
+05:44.168 --> 05:45.634
+no man is an island.
+
+05:45.634 --> 05:49.201
+“Distributed”: because the more power
+
+05:49.201 --> 05:51.601
+to the “edges”, the more resilient
+
+05:51.601 --> 05:53.534
+the system and the project is.
+
+05:53.534 --> 05:56.368
+“Care” because this is all about care:
+
+05:56.368 --> 05:58.501
+with each other as users
+
+05:58.501 --> 06:00.134
+or as contributors,
+
+06:00.134 --> 06:02.101
+with the project's infrastructure
+
+06:02.101 --> 06:05.301
+(servers, websites, bug trackers, etc.)
+
+06:05.301 --> 06:08.701
+and care about having a useful product.
+
+06:08.701 --> 06:13.901
+So, “enabling” users and contributors means
+
+06:13.901 --> 06:16.468
+encouraging them to take ownership,
+
+06:16.468 --> 06:19.801
+which is more than just delegating tasks.
+
+06:19.801 --> 06:22.068
+Let your users and contributors know
+
+06:22.068 --> 06:23.901
+that they need to tap into
+
+06:23.901 --> 06:26.434
+the collective attention pool with care:
+
+06:26.434 --> 06:28.801
+the more autonomous they are, the better.
+
+06:28.801 --> 06:33.801
+So, with this ACDC definition in mind,
+
+06:33.801 --> 06:37.534
+how can <i>you</i> help Emacs maintainers?
+
+06:37.534 --> 06:41.268
+First of all, by <i>becoming</i> a maintainer
+
+06:41.268 --> 06:44.334
+for your own project*, however small.
+
+06:44.334 --> 06:47.001
+Think in terms of project vs. product.
+
+06:47.001 --> 06:49.034
+Empower users and contributors.
+
+06:49.034 --> 06:50.668
+This will help you understand
+
+06:50.668 --> 06:54.068
+how to help other maintainers.
+
+06:54.068 --> 06:56.501
+“More power to the edges!”
+
+06:56.501 --> 07:00.001
+<i>Volunteer</i> as a contributor steward
+
+07:00.001 --> 07:02.201
+for another project: you don't need to
+
+07:02.201 --> 07:03.868
+be a supersmart hacker
+
+07:03.868 --> 07:05.634
+to help others to contribute.
+
+07:05.634 --> 07:07.701
+For Org-mode, we are lucky to have
+
+07:07.701 --> 07:10.901
+two great contributor stewards.
+
+07:10.901 --> 07:12.868
+<i>Learn</i> how to teach,
+
+07:12.868 --> 07:16.468
+because pedagogical skills are invaluable.
+
+07:16.468 --> 07:18.301
+Taking the time to explain
+
+07:18.301 --> 07:20.868
+how to write a bug report or a patch
+
+07:20.868 --> 07:23.834
+is invaluable and this is a core part
+
+07:23.834 --> 07:25.401
+of the Org culture.
+
+07:25.401 --> 07:27.801
+<i>Test</i> and <i>enhance</i> the project's
+
+07:27.801 --> 07:30.001
+contribution process. For Org-mode,
+
+07:30.001 --> 07:33.268
+you would read and suggest contributions to
+
+07:33.268 --> 07:35.634
+the org-contribute pages on Worg.
+
+07:35.634 --> 07:38.601
+Take care of the project's <i>calls for help</i>.
+
+07:38.601 --> 07:40.968
+For Org-mode, this would be this list
+
+07:40.560 --> 07:43.599
+that we have on updates.orgmode.org
+
+07:43.599 --> 07:47.234
+For Emacs, this would be <i>etc/TODO</i> file.
+
+07:47.234 --> 07:50.834
+If the calls for help are not explicit enough,
+
+07:50.834 --> 07:52.834
+try to contribute some.
+
+07:52.834 --> 07:56.701
+<i>Encourage</i> users from outside the project
+
+07:56.701 --> 07:58.434
+to contribute to the core forum.
+
+07:58.434 --> 08:01.434
+For Org-mode, there are many hacks and fixes
+
+08:01.434 --> 08:03.901
+being shared on Reddit and Stack Overflow,
+
+08:03.901 --> 08:05.401
+and that's fine, but we we should not
+
+08:05.401 --> 08:07.401
+wait for months before having this
+
+08:07.401 --> 08:08.801
+shared on the list.
+
+08:08.801 --> 08:11.434
+Let the core forum <i>know</i> about
+
+08:11.434 --> 08:13.701
+what happens in this outside world
+
+08:13.701 --> 08:16.601
+by sharing important information yourself.
+
+08:16.601 --> 08:19.868
+<i>Propose</i> your help for non-code tasks:
+
+08:19.868 --> 08:21.368
+maintain a website,
+
+08:21.368 --> 08:23.734
+enhance the community-driven documentation,
+
+08:23.734 --> 08:26.101
+help with bug triage, etc.
+
+08:26.101 --> 08:29.568
+If you expect someone else to fix your bug,
+
+08:29.568 --> 08:33.234
+try fixing someone else's bug first, and too:
+
+08:33.234 --> 08:36.234
+that's how you'll learn Emacs Lisp
+
+08:36.234 --> 08:37.668
+and that's how you'll concretely
+
+08:37.668 --> 08:40.501
+train your empathy, your sense of taking care.
+
+08:40.501 --> 08:42.068
+That is so critical.
+
+08:42.068 --> 08:44.101
+Don't expect the maintainer
+
+08:44.101 --> 08:45.168
+to be a <i>hotline</i>,
+
+08:45.168 --> 08:46.801
+especially a private one.
+
+08:46.801 --> 08:49.234
+Address yourself to the community.
+
+08:49.234 --> 08:51.968
+and last but not least,
+
+08:51.968 --> 08:53.120
+<i>complete</i> this list.
+
+08:53.120 --> 08:54.959
+I'm trying to open a conversation here,
+
+08:54.959 --> 08:57.168
+so don't be shy.
+
+08:57.168 --> 09:01.760
+That's it. Uhm, is it hard? Yes, this is hard,
+
+09:01.760 --> 09:04.640
+and that's because helping maintainers
+
+09:04.640 --> 09:07.760
+by becoming such a enabler
+
+09:07.760 --> 09:09.839
+in this ACDC mindset
+
+09:09.839 --> 09:12.080
+is not immediately rewarding,
+
+09:12.080 --> 09:15.168
+whereas fixing a bug clearly, clearly is.
+
+09:15.168 --> 09:17.701
+But if you start thinking of the project
+
+09:17.701 --> 09:19.301
+as something that enables you
+
+09:19.301 --> 09:21.440
+to do amazing things, and I believe
+
+09:21.440 --> 09:23.434
+Org is this kind of project,
+
+09:23.434 --> 09:25.034
+and if you start thinking
+
+09:25.034 --> 09:26.634
+of the maintenance as something
+
+09:26.634 --> 09:28.934
+that enables more contributions,
+
+09:28.934 --> 09:31.734
+you will see how important and rewarding
+
+09:31.734 --> 09:35.668
+it is to become such an enabler.
+
+09:35.668 --> 09:39.701
+So, definitely grateful to all the enablers
+
+09:39.701 --> 09:41.401
+that we have in Org's community!
+
+09:41.401 --> 09:43.734
+And to everyone who maintains
+
+09:43.734 --> 09:45.701
+a culture of teaching and learning
+
+09:45.701 --> 09:49.068
+through polite and respectful interactions
+
+09:49.068 --> 09:50.801
+on the mailing list and elsewhere:
+
+09:50.801 --> 09:55.001
+we always need more “power to the edges”.
+
+09:55.001 --> 09:57.168
+And I'm also very grateful
+
+09:57.168 --> 09:59.034
+to the EmacsConf organizers,
+
+09:59.034 --> 10:02.568
+because that's really taking care
+
+10:02.568 --> 10:05.068
+of the community! So, thanks very much!
+
+10:05.068 --> 10:06.868
+[captions by sachac & zaeph]
diff --git a/2021/captions/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.vtt b/2021/captions/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.vtt
new file mode 100644
index 00000000..3985f09a
--- /dev/null
+++ b/2021/captions/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.vtt
@@ -0,0 +1,676 @@
+WEBVTT
+
+00:06.399 --> 00:07.670
+Hello, everyone. My name is
+
+00:07.670 --> 00:08.800
+Laszlo Krajnikovszkij,
+
+00:08.800 --> 00:10.559
+and today I would like to share
+
+00:10.559 --> 00:12.000
+some ideas about extending
+
+00:12.000 --> 00:15.200
+the model of Emacs to other applications.
+
+00:15.200 --> 00:16.720
+Brief introduction of myself:
+
+00:16.720 --> 00:18.400
+I am from Budapest, Hungary;
+
+00:18.400 --> 00:20.320
+and I have a background
+
+00:20.320 --> 00:21.760
+in Financial Economics,
+
+00:21.760 --> 00:24.480
+but by occupation I run
+
+00:24.480 --> 00:26.320
+a software development company
+
+00:26.320 --> 00:29.119
+where I mostly do product management.
+
+00:29.119 --> 00:34.399
+I try to do most of my work from Emacs.
+
+00:34.399 --> 00:36.160
+I've been using it for the past
+
+00:36.160 --> 00:37.200
+two or three years
+
+00:37.200 --> 00:39.120
+as a computer science hobby
+
+00:39.120 --> 00:41.280
+and this fascinating piece of software
+
+00:41.280 --> 00:44.239
+taught me a lot of different concepts
+
+00:44.239 --> 00:46.000
+about software architecture
+
+00:46.000 --> 00:48.800
+and programming languages,
+
+00:48.800 --> 00:51.440
+and also raised a lot of
+
+00:51.440 --> 00:52.719
+philosophical questions
+
+00:52.719 --> 00:55.760
+about human-computer interaction.
+
+00:55.760 --> 00:57.039
+I've been mostly using it
+
+00:57.039 --> 00:59.680
+for organizing my personal information,
+
+00:59.680 --> 01:03.600
+writing notes and tracking my agenda,
+
+01:03.600 --> 01:05.519
+but occasionally, I've also used it
+
+01:05.519 --> 01:07.119
+for reading and writing code
+
+01:07.119 --> 01:09.360
+and for also reading news, email,
+
+01:09.360 --> 01:12.479
+and browsing the web.
+
+01:12.479 --> 01:16.400
+What do I mean by the 'model' of Emacs?
+
+01:16.400 --> 01:18.479
+For me, the 'model' of Emacs is about
+
+01:18.479 --> 01:21.920
+the interaction model.
+
+01:21.920 --> 01:24.880
+And it's not... Emacs is just a tool
+
+01:24.880 --> 01:26.560
+for interacting with the computer.
+
+01:26.560 --> 01:28.640
+It's sort of a universal interface
+
+01:28.640 --> 01:31.119
+that allows for consistency
+
+01:31.119 --> 01:33.280
+across different apps,
+
+01:33.280 --> 01:36.240
+because everything is brought down to
+
+01:36.240 --> 01:39.200
+an Emacs buffer, which is a
+
+01:39.200 --> 01:42.399
+text-oriented interface,
+
+01:42.399 --> 01:44.005
+but that can have consistent
+
+01:44.005 --> 01:44.880
+keybinding scheme,
+
+01:44.880 --> 01:46.960
+they have consistent color scheme,
+
+01:46.960 --> 01:50.640
+and consistent workflow in general.
+
+01:50.640 --> 01:53.200
+Also, Emacs has a lot of functionality
+
+01:53.200 --> 01:55.920
+and utilizes mnemonic key bindings
+
+01:55.920 --> 01:57.680
+for calling functions,
+
+01:57.680 --> 01:59.920
+which is much more powerful than
+
+01:59.920 --> 02:02.000
+navigating contextual menus
+
+02:02.000 --> 02:03.840
+with a pointer,
+
+02:03.840 --> 02:07.119
+because the functions that are
+
+02:07.119 --> 02:08.239
+repeated the most
+
+02:08.239 --> 02:10.640
+are then ingrained in the muscle memory,
+
+02:10.640 --> 02:12.879
+therefore reducing the lag
+
+02:12.879 --> 02:15.680
+between the thought that is occurring
+
+02:15.680 --> 02:17.520
+in your mind, and its reflection
+
+02:17.520 --> 02:21.280
+on your computer screen.
+
+02:21.280 --> 02:23.040
+And also, Emacs provides
+
+02:23.040 --> 02:25.360
+a huge number of packages
+
+02:25.360 --> 02:28.560
+that can all be inspected and modified,
+
+02:28.560 --> 02:30.640
+and extended, and recombined,
+
+02:30.640 --> 02:35.599
+and just provides the best-possible
+
+02:35.599 --> 02:37.840
+malleable system experience
+
+02:37.840 --> 02:42.080
+that can potentially lead to
+
+02:42.080 --> 02:44.080
+almost any desired setup
+
+02:44.080 --> 02:47.599
+for the end-user.
+
+02:47.599 --> 02:49.440
+So, Emacs is great,
+
+02:49.440 --> 02:52.239
+but I need to use a lot of
+
+02:52.239 --> 02:53.280
+different other tools
+
+02:53.280 --> 02:55.200
+to collaborate with my coworkers,
+
+02:55.200 --> 02:57.519
+with my clients and vendors.
+
+02:57.519 --> 03:00.080
+On a normal day, I would need to be
+
+03:00.080 --> 03:02.640
+switching between five to six
+
+03:02.640 --> 03:04.319
+different web applications
+
+03:04.319 --> 03:07.840
+and chat applications.
+
+03:07.840 --> 03:11.840
+They all have the same flaws.
+
+03:11.840 --> 03:14.879
+They all lack customizability,
+
+03:14.879 --> 03:16.560
+because it was never intended
+
+03:16.560 --> 03:19.280
+by the original developers of the app
+
+03:19.280 --> 03:21.120
+that the end user can tinker
+
+03:21.120 --> 03:24.239
+with the product they're creating.
+
+03:24.239 --> 03:29.120
+But also, those apps are cloud-based,
+
+03:29.120 --> 03:33.599
+and usually not very good for privacy,
+
+03:33.599 --> 03:36.480
+and this also creates limitations
+
+03:36.480 --> 03:40.080
+for offline-based workflows,
+
+03:40.080 --> 03:43.599
+or for in general not relying on
+
+03:43.599 --> 03:44.560
+the internet connection
+
+03:44.560 --> 03:46.959
+to use something.
+
+03:46.959 --> 03:49.440
+All these applications,
+
+03:49.440 --> 03:50.720
+they create a situation
+
+03:50.720 --> 03:53.040
+when there's a lot of context-switching
+
+03:53.040 --> 03:55.360
+between different apps,
+
+03:55.360 --> 03:56.959
+and this context-switching
+
+03:56.959 --> 03:59.920
+comes from different color schemes,
+
+03:59.920 --> 04:03.280
+different workflows in general
+
+04:03.280 --> 04:04.879
+for different apps.
+
+04:04.879 --> 04:06.400
+So, there is always
+
+04:06.400 --> 04:10.400
+this little frame of time
+
+04:10.400 --> 04:13.599
+where you need to orient yourself
+
+04:13.599 --> 04:15.280
+in this other application.
+
+04:15.280 --> 04:17.280
+Of course, over time,
+
+04:17.280 --> 04:18.799
+it gets more automated,
+
+04:18.799 --> 04:20.560
+but still, this context switching
+
+04:20.560 --> 04:26.720
+is very bad for productivity.
+
+04:26.720 --> 04:30.080
+These apps don't support very well
+
+04:30.080 --> 04:31.759
+the keyboard-driven workflows,
+
+04:31.759 --> 04:33.520
+because the default set of keybindings
+
+04:33.520 --> 04:34.479
+is always limited,
+
+04:34.479 --> 04:39.280
+and you always need to resort to
+
+04:39.280 --> 04:44.160
+mouse-driven workflows.
+
+04:44.160 --> 04:46.400
+But Emacs has some issues
+
+04:46.400 --> 04:48.320
+as a tool for work as well.
+
+04:48.320 --> 04:50.800
+First of all, it lacks integration
+
+04:50.800 --> 04:51.759
+with all these tools,
+
+04:51.759 --> 04:54.560
+so I constantly need to be switching
+
+04:54.560 --> 04:57.759
+between Emacs and these applications,
+
+04:57.759 --> 04:59.919
+or basically, my web browser.
+
+04:59.919 --> 05:03.039
+Emacs is very good for text input
+
+05:03.039 --> 05:04.720
+and for editing text,
+
+05:04.720 --> 05:07.039
+but it's not always perfect
+
+05:07.039 --> 05:09.440
+for reading information
+
+05:09.440 --> 05:11.199
+from an Emacs buffer,
+
+05:11.199 --> 05:12.080
+because it doesn't
+
+05:12.080 --> 05:16.560
+render images and HTML properly.
+
+05:16.560 --> 05:18.800
+Also, Emacs lacks performance
+
+05:18.800 --> 05:19.919
+under heavy load,
+
+05:19.919 --> 05:21.840
+so when you try to run
+
+05:21.840 --> 05:23.280
+too many things in parallel,
+
+05:23.280 --> 05:26.560
+the single-threaded nature of Emacs
+
+05:26.560 --> 05:28.880
+just makes it hang.
+
+05:28.880 --> 05:30.960
+For this reason,
+
+05:30.960 --> 05:32.560
+I wouldn't rely on Emacs
+
+05:32.560 --> 05:38.320
+to take care of all my system processes.
+
+05:38.320 --> 05:40.400
+And of course, it has some
+
+05:40.400 --> 05:42.240
+legacy UI limitations
+
+05:42.240 --> 05:46.400
+being a software that was written
+
+05:46.400 --> 05:49.039
+40 years ago.
+
+05:49.039 --> 05:53.759
+This results in a very limited usability
+
+05:53.759 --> 05:59.680
+on mobile and other touch devices.
+
+05:59.680 --> 06:01.759
+I've been thinking
+
+06:01.759 --> 06:03.840
+about a hybrid approach
+
+06:03.840 --> 06:05.840
+that you could still use Emacs
+
+06:05.840 --> 06:10.080
+as a core of your life,
+
+06:10.080 --> 06:11.840
+and then extend it
+
+06:11.840 --> 06:15.120
+with adjacent web applications
+
+06:15.120 --> 06:16.960
+where Emacs can be used
+
+06:16.960 --> 06:21.600
+as a text processing backend
+
+06:21.600 --> 06:24.080
+and use Org mode files
+
+06:24.080 --> 06:25.600
+as a universal format
+
+06:25.600 --> 06:29.600
+for converting textual data,
+
+06:29.600 --> 06:33.199
+and then If emacs can be
+
+06:33.199 --> 06:36.639
+connected with those applications
+
+06:36.639 --> 06:37.520
+that I mentioned
+
+06:37.520 --> 06:39.520
+a couple of slides before
+
+06:39.520 --> 06:41.280
+through their API, and you can have
+
+06:41.280 --> 06:43.199
+a two-way communication between them,
+
+06:43.199 --> 06:46.000
+and just export in JSON, let's say,
+
+06:46.000 --> 06:47.440
+and then convert to Org mode,
+
+06:47.440 --> 06:49.039
+and then use the Org mode
+
+06:49.039 --> 06:52.960
+for these local web apps.
+
+06:52.960 --> 06:57.599
+Then you can use Emacs for editing,
+
+06:57.599 --> 07:00.800
+and Org mode, but then you can use
+
+07:00.800 --> 07:03.360
+this adjacent web application
+
+07:03.360 --> 07:05.039
+for viewing information,
+
+07:05.039 --> 07:08.720
+making small edits, and in general,
+
+07:08.720 --> 07:11.692
+possibly have an enhanced
+
+07:11.692 --> 07:14.639
+user-defined UI that is
+
+07:14.639 --> 07:17.039
+directly connected to Emacs.
+
+07:17.039 --> 07:19.759
+Emacs Application Framework
+
+07:19.759 --> 07:21.520
+is a project that tries to achieve
+
+07:21.520 --> 07:23.840
+a common goal, but it tries to
+
+07:23.840 --> 07:24.639
+achieve that through
+
+07:24.639 --> 07:25.520
+displaying everything
+
+07:25.520 --> 07:27.840
+in the Emacs buffer,
+
+07:27.840 --> 07:28.840
+whereas I'm thinking
+
+07:28.840 --> 07:30.800
+if it can be displayed
+
+07:30.800 --> 07:33.759
+in any web browser, but utilize
+
+07:33.759 --> 07:36.560
+Emacs Application Framework API
+
+07:36.560 --> 07:38.639
+as a bridge between Elisp
+
+07:38.639 --> 07:40.960
+and Python and Javascript,
+
+07:40.960 --> 07:41.759
+so you can use
+
+07:41.759 --> 07:44.879
+the modern front-end frameworks
+
+07:44.879 --> 07:48.560
+to create those web interfaces easier
+
+07:48.560 --> 07:49.280
+and connect them
+
+07:49.280 --> 07:53.919
+with Emacs functionality.
+
+07:53.919 --> 07:57.280
+These user-controlled web apps
+
+07:57.280 --> 08:04.126
+would basically result in
+
+08:04.126 --> 08:05.680
+the user connecting
+
+08:05.680 --> 08:10.319
+to this external cloud-based tool,
+
+08:10.319 --> 08:13.759
+let's say Asana, but then
+
+08:13.759 --> 08:16.400
+process everything through Org mode
+
+08:16.400 --> 08:19.840
+and then display in an Org mode file
+
+08:19.840 --> 08:24.720
+or display in this enhanced way
+
+08:24.720 --> 08:28.960
+through the adjacent local web app,
+
+08:28.960 --> 08:31.280
+a front-end for which
+
+08:31.280 --> 08:34.080
+could be written in any .js framework
+
+08:34.080 --> 08:37.440
+for front-end development.
+
+08:37.440 --> 08:42.159
+I encourage everyone in the community
+
+08:42.159 --> 08:45.279
+who is interested in similar questions
+
+08:45.279 --> 08:48.160
+to share their opinion
+
+08:48.160 --> 08:50.959
+about the potential risks and drawbacks,
+
+08:50.959 --> 08:53.120
+about any other ways
+
+08:53.120 --> 08:54.640
+to achieve a similar goal,
+
+08:54.640 --> 08:57.519
+if anyone else is doing this already
+
+08:57.519 --> 08:59.920
+that i might not know about,
+
+08:59.920 --> 09:02.399
+and in general, just share ideas
+
+09:02.399 --> 09:03.760
+about what else can be done
+
+09:03.760 --> 09:07.519
+to integrate Emacs with more stuff
+
+09:07.519 --> 09:10.640
+and how Emacs can become
+
+09:10.640 --> 09:14.080
+more approachable by non-technical users
+
+09:14.080 --> 09:16.160
+because I would love to see
+
+09:16.160 --> 09:20.080
+more people using Emacs, to be honest.
+
+09:20.080 --> 09:21.680
+Yeah. Thank you very much
+
+09:21.680 --> 09:23.440
+for listening to this talk.
+
+09:23.440 --> 09:26.080
+I will be taking questions
+
+09:26.080 --> 09:27.600
+and feedback in the pad
+
+09:27.600 --> 09:31.920
+after the conference.
+
+09:31.920 --> 09:33.920
+You can reach me through this email
+
+09:33.920 --> 09:36.720
+laszlo@laszlo.is .
+
+09:36.720 --> 09:39.600
+I'll be posting
+
+09:39.600 --> 09:41.760
+some more detailed articles
+
+09:41.760 --> 09:44.959
+and description of this idea
+
+09:44.959 --> 09:47.166
+that I was trying to present today.
+
+09:47.166 --> 09:49.040
+[captions by Laszlo]
diff --git a/2021/captions/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.vtt b/2021/captions/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.vtt
new file mode 100644
index 00000000..b1979ba0
--- /dev/null
+++ b/2021/captions/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.vtt
@@ -0,0 +1,796 @@
+WEBVTT
+
+00:00.000 --> 00:01.200
+Welcome to my talk,
+
+00:01.200 --> 00:02.680
+Moldable Emacs: A Step Towards
+
+00:02.680 --> 00:03.800
+Sustainable Software.
+
+00:03.800 --> 00:04.440
+Who am I?
+
+00:04.440 --> 00:05.280
+I am Andrea.
+
+00:05.280 --> 00:07.120
+I work as a Clojure software engineer
+
+00:07.120 --> 00:09.280
+somewhere in the middle of the UK.
+
+00:09.280 --> 00:10.880
+I inherited my passion for Emacs
+
+00:10.880 --> 00:12.480
+from my Ph.D. supervisor,
+
+00:12.480 --> 00:13.880
+and from that moment on,
+
+00:13.880 --> 00:14.960
+I got in synergy with it.
+
+00:14.960 --> 00:17.480
+You can learn more about my interests
+
+00:17.480 --> 00:19.200
+and my Emacs adventure
+
+00:19.200 --> 00:22.520
+at ag91.github.io.
+
+00:22.520 --> 00:24.360
+So let's get in the talk.
+
+00:24.360 --> 00:25.840
+Why moldable development?
+
+00:25.840 --> 00:28.400
+There is too much information to read it all.
+
+00:28.400 --> 00:30.640
+Reading is very difficult.
+
+00:30.640 --> 00:32.320
+It's a very slow activity.
+
+00:32.320 --> 00:33.960
+You need to go word by word
+
+00:33.960 --> 00:35.520
+or paragraph by paragraph,
+
+00:35.520 --> 00:36.400
+if you speedread.
+
+00:36.400 --> 00:39.320
+But anyway, you take a lot of time
+
+00:39.320 --> 00:40.720
+to absorb that information.
+
+00:40.720 --> 00:43.160
+And we urgently need
+
+00:43.160 --> 00:44.960
+to stand on the shoulders of giants,
+
+00:44.960 --> 00:46.880
+so the idea is we should stop
+
+00:46.880 --> 00:48.960
+doing always the same errors
+
+00:48.960 --> 00:50.920
+and we should be able to
+
+00:50.920 --> 00:53.640
+absorb as much of the good ideas
+
+00:53.640 --> 00:56.600
+that the bright people around us generate.
+
+00:56.600 --> 00:59.840
+For example, if I create
+
+00:59.840 --> 01:04.120
+a magnificent program in COBOL,
+
+01:04.120 --> 01:06.000
+and nobody knows any more
+
+01:06.000 --> 01:08.000
+how to learn or read COBOL,
+
+01:08.000 --> 01:09.120
+(and in order to read,
+
+01:09.120 --> 01:10.960
+you take a lot of time),
+
+01:10.960 --> 01:13.040
+well, that fantastic idea
+
+01:13.040 --> 01:15.360
+should be easily translatable
+
+01:15.360 --> 01:19.240
+to C, or to Clojure,
+
+01:19.240 --> 01:20.280
+or to Common Lisp,
+
+01:20.280 --> 01:22.240
+or to a language that will come after.
+
+01:22.240 --> 01:24.080
+The idea shouldn't be lost
+
+01:24.080 --> 01:28.400
+in a codebase somewhere in an old mainframe.
+
+01:28.400 --> 01:31.080
+It should be still accessible.
+
+01:31.080 --> 01:33.920
+Let's get in practice. What does it mean?
+
+01:33.920 --> 01:37.840
+It means that, for example,
+
+01:37.840 --> 01:40.400
+the proponents of moldable development
+
+01:40.400 --> 01:42.440
+prepare this slide to give a sense.
+
+01:42.440 --> 01:45.080
+So the idea is... Look at this.
+
+01:45.080 --> 01:46.640
+What is here? You will see
+
+01:46.640 --> 01:48.680
+that all these little things
+
+01:48.680 --> 01:49.680
+look like the same.
+
+01:49.680 --> 01:50.680
+The first time I looked at it,
+
+01:50.680 --> 01:52.840
+this was looking like a class diagram.
+
+01:52.840 --> 01:54.880
+This is actually code
+
+01:54.880 --> 01:57.800
+describing a little system.
+
+01:57.800 --> 01:59.520
+If you look and if you read,
+
+01:59.520 --> 02:01.320
+you can see that there is a numerator,
+
+02:01.320 --> 02:03.320
+a denominator... So this, you see,
+
+02:03.320 --> 02:05.720
+is interactive, because it's code.
+
+02:05.720 --> 02:06.520
+It's something that is running,
+
+02:06.520 --> 02:07.280
+and it's an object
+
+02:07.280 --> 02:08.560
+because this is Smalltalk --
+
+02:08.560 --> 02:11.440
+Pharo, a dialect of Smalltalk --
+
+02:11.440 --> 02:13.040
+but in the next slide,
+
+02:13.040 --> 02:15.160
+since this is a moldable tool,
+
+02:15.160 --> 02:16.760
+you can see that you can...
+
+02:16.760 --> 02:18.280
+there is a representation
+
+02:18.280 --> 02:20.000
+of the same software
+
+02:20.000 --> 02:23.520
+in a human way.
+
+02:23.520 --> 02:24.640
+So, for example,
+
+02:24.640 --> 02:25.880
+here you can see
+
+02:25.880 --> 02:27.280
+there is a mathematical formula.
+
+02:27.280 --> 02:29.080
+The other object, the second one,
+
+02:29.080 --> 02:30.440
+was a file system kind of thing.
+
+02:30.440 --> 02:33.880
+The third one was an image.
+
+02:33.880 --> 02:36.600
+And the last one was sort of a graph.
+
+02:36.600 --> 02:37.640
+So you can see that
+
+02:37.640 --> 02:40.840
+there is a better way to learn,
+
+02:40.840 --> 02:44.880
+to distinguish, to intuitively get a sense.
+
+02:44.880 --> 02:47.200
+And there is not only a single way.
+
+02:47.200 --> 02:49.480
+It's custom to what you need.
+
+02:49.480 --> 02:51.280
+For example, this is
+
+02:51.280 --> 02:52.680
+a very general way
+
+02:52.680 --> 02:54.040
+to understand what is this object about
+
+02:54.040 --> 02:55.560
+and maybe you want to see
+
+02:55.560 --> 02:56.760
+some other little things.
+
+02:56.760 --> 02:58.840
+For example, the documentation of the code,
+
+02:58.840 --> 03:00.240
+because you are interested
+
+03:00.240 --> 03:01.160
+in developing with it.
+
+03:01.160 --> 03:03.960
+For example, an image,
+
+03:03.960 --> 03:05.240
+you can see there's a path
+
+03:05.240 --> 03:06.840
+on the filesystem,
+
+03:06.840 --> 03:10.520
+or as a hexadecimal representation.
+
+03:10.520 --> 03:12.520
+In a sense, there is not only one view.
+
+03:12.520 --> 03:13.840
+You need to have the view
+
+03:13.840 --> 03:15.320
+that you need at the moment,
+
+03:15.320 --> 03:16.840
+and your tool needs to
+
+03:16.840 --> 03:19.680
+make this easy for you.
+
+03:19.680 --> 03:22.280
+So, why moldable Emacs?
+
+03:22.280 --> 03:24.680
+I wanted to bring that idea
+
+03:24.680 --> 03:26.760
+of having multiple view representations
+
+03:26.760 --> 03:29.520
+of what you need
+
+03:29.520 --> 03:33.280
+to understand better in Emacs.
+
+03:33.280 --> 03:36.280
+And so I want to create immediate story telling.
+
+03:36.280 --> 03:37.880
+Immediate, because it needs to be very quick,
+
+03:37.880 --> 03:38.840
+and story telling is
+
+03:38.840 --> 03:40.760
+because you want to allow connection
+
+03:40.760 --> 03:42.520
+from something that you needed
+
+03:42.520 --> 03:45.520
+to develop it into something new.
+
+03:45.520 --> 03:47.160
+So you are really telling a story:
+
+03:47.160 --> 03:49.040
+what is this mathematical formula
+
+03:49.040 --> 03:51.120
+I created because I need this,
+
+03:51.120 --> 03:54.440
+or this numerator and denominator
+
+03:54.440 --> 03:55.520
+produce this number.
+
+03:55.520 --> 03:58.760
+So this is a story that you are telling
+
+03:58.760 --> 03:59.880
+in my mind.
+
+03:59.880 --> 04:04.000
+And I want multiple views for buffers.
+
+04:04.000 --> 04:05.800
+Buffers is the main concept in Emacs,
+
+04:05.800 --> 04:09.160
+and so buffers are what I want to
+
+04:09.160 --> 04:11.000
+integrate in a story.
+
+04:11.000 --> 04:12.280
+I create a buffer
+
+04:12.280 --> 04:15.080
+and I start manipulating it,
+
+04:15.080 --> 04:16.920
+creating a view and then another view
+
+04:16.920 --> 04:19.520
+in order to tell something to myself,
+
+04:19.520 --> 04:20.720
+in order to learn,
+
+04:20.720 --> 04:21.880
+but also to tell something to others.
+
+04:21.880 --> 04:23.960
+So, for example, let's start
+
+04:23.960 --> 04:25.840
+from a use case: learning better.
+
+04:25.840 --> 04:29.640
+I had, at work, a list of changes
+
+04:29.640 --> 04:31.440
+for a pull request,
+
+04:31.440 --> 04:32.040
+so a code change,
+
+04:32.040 --> 04:33.920
+and I was very tired.
+
+04:33.920 --> 04:34.760
+I couldn't understand
+
+04:34.760 --> 04:37.520
+what this much text was about.
+
+04:37.520 --> 04:38.920
+So what I generate,
+
+04:38.920 --> 04:41.120
+I create a value for myself
+
+04:41.120 --> 04:42.720
+to understand it easily.
+
+04:42.720 --> 04:45.320
+And for me, understanding it easily,
+
+04:45.320 --> 04:49.240
+for example, was a little flow diagram.
+
+04:49.240 --> 04:50.963
+It showed me, okay, there is first
+
+04:50.963 --> 04:52.320
+this, this, and this,
+
+04:52.320 --> 04:54.960
+and so I could follow.
+
+04:54.960 --> 04:58.400
+having it next to the change.
+
+04:58.400 --> 05:00.600
+Having this image next to the change.
+
+05:00.600 --> 05:02.360
+And this is describing
+
+05:02.360 --> 05:05.640
+an Italian recipe for pasta with butter,
+
+05:05.640 --> 05:07.840
+so if you want to try, you're welcome.
+
+05:07.840 --> 05:11.720
+It's very tasty.
+
+05:11.720 --> 05:13.840
+Anyway, the other thing that we can do
+
+05:13.840 --> 05:17.280
+is query text -- structured text.
+
+05:17.280 --> 05:20.680
+So for example, this presentation
+
+05:20.680 --> 05:21.960
+is an Org Mode buffer.
+
+05:21.960 --> 05:24.040
+So when I call the Playground
+
+05:24.040 --> 05:24.960
+(that is one of the molds
+
+05:24.960 --> 05:27.640
+that lets me write some Elisp to query
+
+05:27.640 --> 05:29.680
+the original buffer,)
+
+05:29.680 --> 05:31.640
+if I evaluate this,
+
+05:31.640 --> 05:33.280
+you will see that
+
+05:33.280 --> 05:33.880
+I have just asked
+
+05:33.880 --> 05:35.200
+my Org Mode buffer
+
+05:35.200 --> 05:37.400
+to tell me the content length
+
+05:37.400 --> 05:38.280
+of the headings
+
+05:38.280 --> 05:40.240
+with some interesting content.
+
+05:40.240 --> 05:44.280
+So all the headings at third-level.
+
+05:44.280 --> 05:48.080
+Do you understand? I've just asked a file
+
+05:48.080 --> 05:50.240
+to tell me its contents
+
+05:50.240 --> 05:51.240
+without reading it.
+
+05:51.240 --> 05:56.320
+Or we can do something similar for code.
+
+05:56.320 --> 05:58.840
+We can do... I don't know...
+
+05:58.840 --> 06:00.920
+No idea what is written there,
+
+06:00.920 --> 06:02.000
+but I want to know
+
+06:02.000 --> 06:03.840
+which function is the most complex
+
+06:03.840 --> 06:06.800
+or is overcomplicated.
+
+06:06.800 --> 06:09.560
+I have defined in red,
+
+06:09.560 --> 06:11.600
+(so again, I don't need to read the number
+
+06:11.600 --> 06:13.800
+to know either what it is about!)
+
+06:13.800 --> 06:15.280
+So, I've written in red,
+
+06:15.280 --> 06:18.120
+I've shown in red
+
+06:18.120 --> 06:20.320
+the function with more complexity,
+
+06:20.320 --> 06:22.560
+and I can jump to it.
+
+06:22.560 --> 06:24.160
+So everything is very accessible
+
+06:24.160 --> 06:26.280
+to facilitate my operation
+
+06:26.280 --> 06:27.160
+and my understanding.
+
+06:27.160 --> 06:29.880
+Or I can take notes.
+
+06:29.880 --> 06:36.160
+For example, I can annotate something,
+
+06:36.160 --> 06:37.240
+and you see the note
+
+06:37.240 --> 06:38.920
+is again structured text,
+
+06:38.920 --> 06:40.120
+because you will know
+
+06:40.120 --> 06:42.320
+that I'm going to query my notes
+
+06:42.320 --> 06:43.480
+at some point.
+
+06:43.480 --> 06:46.680
+For example, I can show all my notes,
+
+06:46.680 --> 06:51.480
+for example, by mode, or I can show
+
+06:51.480 --> 06:53.600
+all the notes by mode in Org Mode.
+
+06:53.600 --> 06:56.440
+Because it's structured text,
+
+06:56.440 --> 06:57.840
+I can manipulate it very easily.
+
+06:57.840 --> 07:00.160
+So these are all my notes.
+
+07:00.160 --> 07:05.400
+Finally, the superpower
+
+07:05.400 --> 07:08.320
+of this moldable Emacs
+
+07:08.320 --> 07:10.400
+is the fact that you can compose molds.
+
+07:10.400 --> 07:13.000
+So, for example, let's go in
+
+07:13.000 --> 07:17.480
+showing all my notes.
+
+07:17.480 --> 07:19.040
+Let me show you all my notes.
+
+07:19.040 --> 07:21.520
+And then let's say that I want to know
+
+07:21.520 --> 07:26.720
+how they are... how many lines
+
+07:26.720 --> 07:27.400
+are these notes?
+
+07:27.400 --> 07:30.360
+Look, this is the answer.
+
+07:30.360 --> 07:31.800
+So of all the notes I take,
+
+07:31.800 --> 07:34.200
+I can actually query it and say
+
+07:34.200 --> 07:38.360
+"What are the lengths?"
+
+07:38.360 --> 07:40.040
+But let me show something more.
+
+07:40.040 --> 07:41.680
+Which one is the longest note?
+
+07:41.680 --> 07:44.000
+Now there are lots of notes in there
+
+07:44.000 --> 07:45.080
+so it's difficult to know
+
+07:45.080 --> 07:47.200
+but what if I can, in a click,
+
+07:47.200 --> 07:50.440
+generate a view that is very immediate?
+
+07:50.440 --> 07:52.240
+Look, there is a note that is very long.
+
+07:52.240 --> 07:54.040
+It's about 35 lines.
+
+07:54.040 --> 07:55.160
+Do you understand?
+
+07:55.160 --> 07:56.760
+I didn't read any note.
+
+07:56.760 --> 07:58.400
+This is all coming from
+
+07:58.400 --> 08:02.520
+being able to query your text
+
+08:02.520 --> 08:06.240
+and having multiple representations.
+
+08:06.240 --> 08:08.360
+My presentation is very short.
+
+08:08.360 --> 08:09.720
+What is next?
+
+08:09.720 --> 08:14.360
+Next is to integrate molds with other software
+
+08:14.360 --> 08:15.360
+like code-compass.
+
+08:15.360 --> 08:16.720
+I did a presentation last year
+
+08:16.720 --> 08:18.640
+and I want to make those nice diagrams
+
+08:18.640 --> 08:21.320
+available for small molds
+
+08:21.320 --> 08:22.880
+so that you can use them,
+
+08:22.880 --> 08:24.760
+for example, for notes
+
+08:24.760 --> 08:26.360
+or text that you have.
+
+08:26.360 --> 08:28.200
+To integrate better
+
+08:28.200 --> 08:30.360
+with Nyxt, the Common Lisp browser,
+
+08:30.360 --> 08:32.200
+because there's a lot of opportunity there
+
+08:32.200 --> 08:35.320
+to make funny things,
+
+08:35.320 --> 08:38.040
+a browser accessible for molding,
+
+08:38.040 --> 08:41.240
+and then having some interaction with Smalltalk
+
+08:41.240 --> 08:42.840
+through Glamorous Toolkit,
+
+08:42.840 --> 08:44.080
+so that we can have the best tools,
+
+08:44.080 --> 08:46.800
+Emacs and Glamorous Toolkit and Nyxt
+
+08:46.800 --> 08:49.000
+and others, to work together
+
+08:49.000 --> 08:50.520
+to make our learning easy.
+
+08:50.520 --> 08:52.480
+Then... You've seen the tool;
+
+08:52.480 --> 08:53.840
+my molds that I have shown
+
+08:53.840 --> 08:56.200
+were basically by buffer.
+
+08:56.200 --> 08:58.600
+I want project statistics.
+
+08:58.600 --> 09:00.480
+What about... Give me the complexity
+
+09:00.480 --> 09:01.800
+of all the functions
+
+09:01.800 --> 09:03.480
+in a project,
+
+09:03.480 --> 09:06.120
+of all the paragraphs, whatever.
+
+09:06.120 --> 09:08.120
+And then there is a nice issue on
+
+09:08.120 --> 09:10.880
+my issue-tracker for moldable Emacs
+
+09:10.880 --> 09:13.920
+is about: "Emacs: tell me how can I
+
+09:13.920 --> 09:15.080
+compose the molds that I have
+
+09:15.080 --> 09:17.480
+to make new things?"
+
+09:17.480 --> 09:19.400
+It is a sort of a research-y thing
+
+09:19.400 --> 09:20.680
+that is pretty cool.
+
+09:20.680 --> 09:22.400
+So if you want to learn more,
+
+09:22.400 --> 09:25.520
+just check out at ag91.github.io,
+
+09:25.520 --> 09:28.000
+check out moldable Emacs on GitHub,
+
+09:28.000 --> 09:30.840
+and enjoy the rest of the conference.
+
+09:30.840 --> 09:34.200
+Bye.
diff --git a/2021/captions/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.vtt b/2021/captions/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.vtt
new file mode 100644
index 00000000..06d92f3a
--- /dev/null
+++ b/2021/captions/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.vtt
@@ -0,0 +1,628 @@
+WEBVTT
+
+00:00.880 --> 00:00:02.446
+Hi, I'm Blaine Mooers.
+
+00:00:02.446 --> 00:00:04.160
+I'm going to be talking about
+
+00:00:04.160 --> 00:00:07.919
+the use of molecular graphics in Org
+
+00:07.919 --> 00:00:08.880
+for the purpose of doing
+
+00:00:08.880 --> 00:00:11.840
+reproducible research in structural biology.
+
+00:00:11.840 --> 00:00:13.722
+I'm an associate professor of biochemistry
+
+00:00:13.722 --> 00:00:15.768
+and microbiology at the University of Oklahoma
+
+00:00:15.768 --> 00:00:17.760
+Health Sciences Center in Oklahoma City.
+
+00:00:17.760 --> 00:00:19.600
+My laboratory uses X-ray crystallography
+
+00:00:19.600 --> 00:00:21.920
+to determine the atomic structures
+
+00:00:21.920 --> 00:00:23.439
+of proteins like this one
+
+00:00:23.439 --> 00:00:26.080
+in the lower left, and of nucleic acids
+
+00:26.080 --> 00:27.840
+important in human health.
+
+00:27.840 --> 00:00:29.591
+This is a crystal of an RNA,
+
+00:00:29.591 --> 00:00:31.359
+which we have placed in this
+
+00:00:31.359 --> 00:00:33.200
+X-ray diffraction instrument.
+
+00:00:33.200 --> 00:00:35.600
+And after rotating the crystal
+
+00:00:35.600 --> 00:00:38.000
+in the X-ray beam for two degrees,
+
+00:00:38.000 --> 00:00:40.480
+we obtain this following diffraction pattern,
+
+00:00:40.480 --> 00:00:43.280
+which has thousands of spots on it.
+
+00:43.280 --> 00:00:47.840
+We rotate the crystal for over 180 degrees,
+
+00:47.840 --> 00:00:51.760
+collecting 90 images to obtain all the data.
+
+00:00:51.760 --> 00:00:56.000
+We then process those images
+
+00:56.000 --> 00:00:57.752
+and do an inverse Fourier transform
+
+00:00:57.752 --> 00:00:59.920
+to obtain the electron density.
+
+00:00:59.920 --> 00:01:01.888
+This electron density map has been
+
+00:01:01.888 --> 00:01:04.344
+contoured at the one-sigma level.
+
+00:01:04.344 --> 00:01:06.116
+That level's being shown by
+
+00:01:06.116 --> 00:01:08.640
+this blue chicken wire mesh.
+
+00:01:08.640 --> 00:01:10.152
+Atomic models have been fitted
+
+00:01:10.152 --> 00:01:11.119
+to this chicken wire.
+
+00:01:11.119 --> 00:01:14.240
+These lines represent bonds between atoms,
+
+00:01:14.240 --> 00:01:16.240
+atoms are being represented by points.
+
+00:01:16.240 --> 00:01:18.640
+And atoms are colored by atom type,
+
+00:01:18.640 --> 00:01:21.280
+red for oxygen, blue for nitrogen,
+
+00:01:21.280 --> 00:01:23.040
+and then in this case,
+
+01:23.040 --> 00:01:24.720
+carbon is colored cyan.
+
+00:01:24.720 --> 00:01:27.203
+We have fitted a drug molecule
+
+00:01:27.203 --> 00:01:29.360
+to the central blob of electron density
+
+00:01:29.360 --> 00:01:32.400
+which corresponds to that active site
+
+01:32.400 --> 00:01:35.759
+of this protein, which is RET Kinase.
+
+00:01:35.759 --> 00:01:37.439
+It's important in lung cancer.
+
+00:01:37.439 --> 00:01:40.079
+When we're finished with model building,
+
+00:01:40.079 --> 00:01:41.339
+we will then examine
+
+00:01:41.339 --> 00:01:43.006
+the result of the final structure
+
+00:01:43.006 --> 00:01:45.200
+to prepare images for publication
+
+00:01:45.200 --> 00:01:47.439
+using molecular graphics program.
+
+01:47.439 --> 00:01:48.108
+In this case,
+
+00:01:48.108 --> 00:01:50.000
+we've overlaid a number of structures,
+
+00:01:50.000 --> 00:01:53.600
+and we're examining the distance between
+
+01:53.600 --> 00:01:55.680
+the side chain of an alanine
+
+00:01:55.680 --> 00:01:58.880
+and one or two drug molecules.
+
+00:01:58.880 --> 00:02:00.719
+This alanine sidechain actually blocks
+
+00:02:00.719 --> 00:02:02.159
+the binding of one of these drugs.
+
+00:02:02.159 --> 00:02:03.439
+The most popular program
+
+02:03.439 --> 02:06.320
+for doing this kind of analysis
+
+02:06.320 --> 00:02:07.280
+and for preparing images
+
+00:02:07.280 --> 00:02:09.520
+for publication is PyMOL.
+
+02:09.520 --> 02:11.440
+PyMOL was used to prepare these images
+
+02:11.440 --> 02:14.720
+on the covers of these featured journals.
+
+02:14.720 --> 00:02:17.520
+PyMOL is favored because
+
+00:02:17.520 --> 00:02:19.520
+it has 500 commands
+
+00:02:19.520 --> 00:02:22.128
+and 600 parameter settings
+
+00:02:22.128 --> 00:02:23.360
+that provide exquisite control
+
+00:02:23.360 --> 00:02:24.959
+over the appearance of the output.
+
+00:02:24.959 --> 00:02:28.480
+PyMOL has over 100,000 users,
+
+02:28.480 --> 00:02:30.000
+reflecting its popularity.
+
+00:02:30.000 --> 00:02:31.599
+This is the GUI for PyMOL.
+
+00:02:31.599 --> 00:02:35.120
+It shows in white the viewport area
+
+00:02:35.120 --> 00:02:36.080
+where one interacts
+
+00:02:36.080 --> 00:02:37.840
+with the loaded molecular object.
+
+00:02:37.840 --> 00:02:41.920
+We have rendered the same RET kinase
+
+02:41.920 --> 00:02:49.788
+with a set of preset parameters
+
+00:02:49.788 --> 00:02:51.200
+that have been named "publication".
+
+00:02:51.200 --> 00:02:52.720
+The other way of applying
+
+02:52.720 --> 00:02:54.319
+parameter settings and commands
+
+00:02:54.319 --> 00:02:56.720
+is to enter them at the PyMOL prompt.
+
+00:02:56.720 --> 00:03:00.159
+Then the third way is to load and run scripts.
+
+00:03:00.159 --> 00:03:03.120
+PyMOL is actually written in C for speed,
+
+00:03:03.120 --> 00:03:06.159
+but it is wrapped in Python for extensibility.
+
+03:06.159 --> 03:09.680
+In fact, there are over 100 articles
+
+03:09.680 --> 00:03:11.599
+about various plugins and scripts
+
+00:03:11.599 --> 00:03:12.400
+that people have developed
+
+00:03:12.400 --> 00:03:15.120
+to extend PyMOL for years.
+
+03:15.120 --> 00:03:16.480
+Here's some examples
+
+00:03:16.480 --> 00:03:18.959
+from the snippet library that I developed.
+
+03:18.959 --> 03:21.280
+On the left is a default
+
+03:21.280 --> 03:24.640
+cartoon representation of a RNA hairpin.
+
+03:24.640 --> 03:27.040
+I find this reduced representation
+
+03:27.040 --> 00:03:30.799
+of the RNA hairpin to be too stark.
+
+03:30.799 --> 00:03:32.319
+I prefer these alternate ones
+
+00:03:32.319 --> 00:03:33.840
+that I developed.
+
+03:33.840 --> 03:37.519
+So, these three to the right of this one
+
+03:37.519 --> 00:03:39.519
+are not available through
+
+00:03:39.519 --> 00:03:40.720
+pull downs in PyMOL.
+
+00:03:40.720 --> 00:03:42.748
+So why developed a PyMOL
+
+00:03:42.748 --> 00:03:44.879
+snippet library for Org?
+
+03:44.879 --> 00:03:47.040
+Well, Org provides great support
+
+00:03:47.040 --> 00:03:48.560
+for literate programming,
+
+00:03:48.560 --> 00:03:49.840
+where you have code blocks
+
+00:03:49.840 --> 00:03:52.000
+that contain code that's executable,
+
+00:03:52.000 --> 00:03:53.040
+and the output is shown
+
+00:03:53.040 --> 00:03:54.959
+below that code block.
+
+03:54.959 --> 00:03:56.720
+And then you can fill
+
+00:03:56.720 --> 00:03:58.959
+the surrounding area in the document
+
+03:58.959 --> 00:04:00.799
+with the explanatory prose.
+
+00:04:00.799 --> 00:04:02.000
+Org has great support
+
+00:04:02.000 --> 00:04:04.480
+for editing that explanatory prose.
+
+00:04:04.480 --> 00:04:08.080
+Org can run PyMOL through PyMOL's Python API.
+
+04:08.080 --> 00:04:11.280
+One of the uses of such an Org document
+
+00:04:11.280 --> 00:04:14.487
+is to assemble a gallery of draft images.
+
+00:04:14.487 --> 00:04:16.563
+We often have to look at
+
+00:04:16.563 --> 00:04:19.840
+dozens of candidate images
+
+00:04:19.840 --> 00:04:22.000
+with the molecule in different orientations,
+
+00:04:22.000 --> 00:04:23.520
+different zoom settings,
+
+04:23.520 --> 00:04:25.032
+different representations,
+
+00:04:25.032 --> 00:04:27.280
+different colors, and so on.
+
+00:04:27.280 --> 00:04:30.639
+And to have those images along with…,
+
+00:04:30.639 --> 00:04:31.840
+adjacent to the code
+
+04:31.840 --> 00:04:33.680
+that was used to generate them,
+
+00:04:33.680 --> 00:04:37.199
+can be very effective for
+
+04:37.199 --> 00:04:39.680
+further editing the code
+
+00:04:39.680 --> 00:04:40.880
+and improving the images.
+
+00:04:40.880 --> 00:04:44.080
+Once the final images have been selected,
+
+04:44.080 --> 00:04:46.320
+one can submit the code
+
+00:04:46.320 --> 00:04:48.479
+as part of the supplemental material.
+
+00:04:48.479 --> 00:04:52.400
+Finally, one can use the journal package
+
+04:52.400 --> 00:04:54.608
+to use the Org files as
+
+00:04:54.608 --> 00:04:57.120
+an electronic laboratory notebook,
+
+00:04:57.120 --> 00:04:59.600
+which is illustrated with molecular images.
+
+00:04:59.600 --> 00:05:01.039
+This can be very useful
+
+00:05:01.039 --> 00:05:04.080
+when assembling manuscripts
+
+05:04.080 --> 00:05:05.440
+months or years later.
+
+00:05:05.440 --> 00:05:08.320
+This shows the YASnippet pull down
+
+05:08.320 --> 00:05:12.720
+after my library has been installed.
+
+00:05:12.720 --> 00:05:15.360
+I have an Org file open,
+
+00:05:15.360 --> 00:05:17.120
+so I'm in Org mode.
+
+05:17.120 --> 00:05:20.880
+We have the Org mode submenu,
+
+05:20.880 --> 00:05:23.919
+and under it, all my snippets
+
+00:05:23.919 --> 00:05:26.880
+are located in these sub-sub-menus
+
+05:26.880 --> 00:05:30.880
+that are prepended with pymolpy.
+
+00:05:30.880 --> 00:05:33.840
+Under the molecular representations menu,
+
+00:05:33.840 --> 00:05:36.479
+there is a listing of snippets.
+
+00:05:36.479 --> 00:05:38.563
+The top one is for the ambient occlusion effect,
+
+00:05:38.563 --> 00:05:39.840
+which we're going to apply
+
+00:05:39.840 --> 00:05:41.039
+in this Org file.
+
+00:05:41.039 --> 00:05:44.240
+So these lines of code were inserted after,
+
+00:05:44.240 --> 00:05:48.479
+as well as these flanking lines
+
+05:48.479 --> 00:05:50.240
+that define the source block,
+
+00:05:50.240 --> 00:05:53.280
+were inserted by clicking on that line.
+
+05:53.280 --> 00:05:55.120
+Then I've added some additional code.
+
+00:05:55.120 --> 00:05:56.880
+So, the first line defines
+
+00:05:56.880 --> 00:05:59.039
+the language that we're using.
+
+00:05:59.039 --> 00:05:59.768
+We're going to use
+
+00:05:59.768 --> 00:06:02.639
+the jupyter-python language.
+
+06:02.639 --> 00:06:04.560
+Then you can define the session,
+
+00:06:04.560 --> 00:06:06.400
+and the name of this is arbitrary.
+
+00:06:06.400 --> 00:06:09.680
+Then the kernel is our means
+
+00:06:09.680 --> 00:06:11.360
+by which we gain access
+
+00:06:11.360 --> 00:06:14.880
+to the Python API of PyMOL.
+
+06:14.880 --> 00:06:17.039
+The remaining settings apply to the output.
+
+00:06:17.039 --> 00:06:18.319
+To execute this code
+
+00:06:18.319 --> 00:06:21.199
+and to get the resulting image,
+
+00:06:21.199 --> 00:06:25.120
+you put the cursor inside this code block,
+
+00:06:25.120 --> 00:06:26.560
+or on the top line,
+
+00:06:26.560 --> 00:06:29.840
+and enter Control c Control c (C-c C-c).
+
+06:29.840 --> 00:06:32.240
+This shows the resulting image
+
+00:06:32.240 --> 00:06:33.600
+has been loaded up.
+
+00:06:33.600 --> 00:06:37.280
+It takes about 10 seconds for this to appear.
+
+06:37.280 --> 00:06:38.479
+So the downside of this is
+
+00:06:38.479 --> 00:06:40.729
+if you have a large number of these,
+
+00:06:40.729 --> 00:06:43.919
+the Org file can lag quite a bit
+
+00:06:43.919 --> 00:06:45.120
+when you try to scroll through it,
+
+00:06:45.120 --> 00:06:48.319
+so you need to close up these result drawers,
+
+00:06:48.319 --> 00:06:50.960
+and only open up the ones
+
+00:06:50.960 --> 00:06:53.199
+that you're currently examining.
+
+00:06:53.199 --> 00:06:54.319
+These are features I think
+
+06:54.319 --> 06:56.240
+are important in practical work.
+
+06:56.240 --> 00:06:59.840
+So, the plus is, a feature that's present,
+
+00:06:59.840 --> 00:07:01.120
+minus is absent.
+
+00:07:01.120 --> 00:07:03.199
+I think tab stops and tab triggers
+
+00:07:03.199 --> 00:07:04.800
+are really important.
+
+07:04.800 --> 00:07:05.680
+Triggers are important for
+
+00:07:05.680 --> 00:07:06.720
+the fast assertion code,
+
+00:07:06.720 --> 00:07:08.639
+tab stops are important for
+
+07:08.639 --> 00:07:10.560
+complete, accurate editing of code.
+
+00:07:10.560 --> 00:07:12.735
+I already addressed the rendering speed
+
+00:07:12.735 --> 00:07:14.560
+and scrolling issue.
+
+00:07:14.560 --> 00:07:15.759
+I think the way around this
+
+00:07:15.759 --> 00:07:19.199
+is just to export the Org document to a PDF file
+
+00:07:19.199 --> 00:07:23.360
+and do your evaluation of different images
+
+00:07:23.360 --> 00:07:25.199
+by examining them in the PDF
+
+00:07:25.199 --> 00:07:26.560
+rather than the Org file.
+
+00:07:26.560 --> 00:07:30.400
+The path to PDF is lightning fast in Emacs
+
+00:07:30.400 --> 00:07:32.240
+compared to Jupyter,
+
+00:07:32.240 --> 00:07:35.280
+where it's cumbersome in comparison.
+
+00:07:35.280 --> 00:07:38.400
+This is a snapshot of my initialization file.
+
+00:07:38.400 --> 00:07:41.840
+These parts are relevant to doing this work.
+
+00:07:41.840 --> 00:07:43.039
+A full description of them
+
+00:07:43.039 --> 00:07:46.319
+can be found in the README file
+
+07:46.319 --> 00:07:48.639
+of this repository on GitHub.
+
+00:07:48.639 --> 00:07:49.456
+I'd like to thank the
+
+00:07:49.456 --> 00:07:51.840
+Nathan Shock Data Science Workshop
+
+00:07:51.840 --> 00:07:54.319
+for feedback during presentations
+
+00:07:54.319 --> 00:07:56.160
+I've made about this work.
+
+00:07:56.160 --> 00:07:57.628
+And I would also like to thank
+
+00:07:57.628 --> 00:08:00.240
+the following funding sources for support.
+
+00:08:00.240 --> 00:08:03.879
+I will now take questions. Thank you.
+
+00:08:03.879 --> 00:08:03.986
+[captions by Blaine Mooers and Bhavin Gandhi]
diff --git a/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--chapters.vtt b/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--chapters.vtt
new file mode 100644
index 00000000..3bc5cbff
--- /dev/null
+++ b/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--chapters.vtt
@@ -0,0 +1,46 @@
+WEBVTT
+
+00:00:04.960 --> 00:00:20.319
+Introduction
+
+00:00:20.320 --> 00:00:35.839
+Respect
+
+00:00:35.840 --> 00:01:19.118
+The Prepared Environment
+
+00:01:19.119 --> 00:01:56.559
+Human tendencies
+
+00:01:56.560 --> 00:03:30.719
+Orientation
+
+00:03:30.720 --> 00:04:25.999
+Order
+
+00:04:26.000 --> 00:05:12.079
+Exploration
+
+00:05:12.080 --> 00:05:46.159
+Communication
+
+00:05:46.160 --> 00:06:21.198
+Activity
+
+00:06:21.199 --> 00:06:48.318
+Manipulation
+
+00:06:48.319 --> 00:07:09.198
+Work (or Purposeful Activity)
+
+00:07:09.199 --> 00:07:38.959
+Repetition
+
+00:07:38.960 --> 00:08:16.318
+Exactness
+
+00:08:16.319 --> 00:09:01.999
+Abstraction
+
+00:09:02.000 --> 00:09:03.000
+Perfection
diff --git a/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main--chapters.vtt b/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main--chapters.vtt
new file mode 100644
index 00000000..3bc5cbff
--- /dev/null
+++ b/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main--chapters.vtt
@@ -0,0 +1,46 @@
+WEBVTT
+
+00:00:04.960 --> 00:00:20.319
+Introduction
+
+00:00:20.320 --> 00:00:35.839
+Respect
+
+00:00:35.840 --> 00:01:19.118
+The Prepared Environment
+
+00:01:19.119 --> 00:01:56.559
+Human tendencies
+
+00:01:56.560 --> 00:03:30.719
+Orientation
+
+00:03:30.720 --> 00:04:25.999
+Order
+
+00:04:26.000 --> 00:05:12.079
+Exploration
+
+00:05:12.080 --> 00:05:46.159
+Communication
+
+00:05:46.160 --> 00:06:21.198
+Activity
+
+00:06:21.199 --> 00:06:48.318
+Manipulation
+
+00:06:48.319 --> 00:07:09.198
+Work (or Purposeful Activity)
+
+00:07:09.199 --> 00:07:38.959
+Repetition
+
+00:07:38.960 --> 00:08:16.318
+Exactness
+
+00:08:16.319 --> 00:09:01.999
+Abstraction
+
+00:09:02.000 --> 00:09:03.000
+Perfection
diff --git a/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt b/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt
new file mode 100644
index 00000000..1fd6f335
--- /dev/null
+++ b/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt
@@ -0,0 +1,826 @@
+WEBVTT
+
+00:04.960 --> 00:00:07.680
+Hello everyone. My name is Grant Shangreaux,
+
+00:07.680 --> 00:00:10.719
+and I'm happy to be back here at EmacsConf.
+
+00:00:10.719 --> 00:00:13.840
+So before I was a programmer professionally,
+
+00:00:13.840 --> 00:00:16.800
+I was a Montessori guide with young children,
+
+00:00:16.800 --> 00:00:18.960
+and now I'm a parent of a child
+
+00:00:18.960 --> 00:00:20.319
+in a Montessori classroom.
+
+00:00:20.320 --> 00:00:21.600
+I was thinking Emacs
+
+00:00:21.600 --> 00:00:22.960
+and Montessori philosophy
+
+00:00:22.960 --> 00:00:25.760
+are both fundamentally about respect.
+
+00:00:25.760 --> 00:00:27.840
+Respect children, for the child
+
+00:27.840 --> 00:00:29.760
+is the parent to the adult.
+
+00:00:29.760 --> 00:00:32.079
+And we should respect users.
+
+00:32.079 --> 00:00:33.440
+Maybe the user is the parent
+
+00:00:33.440 --> 00:00:35.839
+to the hacker. That was certainly my case.
+
+00:00:35.840 --> 00:00:37.680
+So this talk is about the similarities
+
+00:37.680 --> 00:00:39.440
+between the Emacs environment
+
+00:00:39.440 --> 00:00:41.040
+and the Montessori classroom,
+
+00:00:41.040 --> 00:00:43.760
+which is called a prepared environment,
+
+00:00:43.760 --> 00:00:45.760
+meaning that everything in the environment
+
+00:00:45.760 --> 00:00:48.559
+has been prepared for the child to come
+
+00:00:48.559 --> 00:00:51.119
+and interact with in a meaningful way.
+
+00:00:51.120 --> 00:00:52.399
+The child will be driven
+
+00:00:52.399 --> 00:00:54.399
+by natural human tendencies
+
+00:00:54.399 --> 00:00:56.399
+to interact with their environment
+
+00:00:56.399 --> 00:00:58.079
+and to construct and refine
+
+00:00:58.079 --> 00:00:59.920
+their understanding of the world
+
+00:00:59.920 --> 00:01:01.359
+and the things in it.
+
+00:01:01.359 --> 00:01:03.600
+What I hope you come away from this talk with
+
+00:01:03.600 --> 00:01:06.080
+is just a new perspective
+
+00:01:06.080 --> 00:01:08.479
+on Emacs and software,
+
+00:01:08.479 --> 00:01:10.240
+and how users interact
+
+00:01:10.240 --> 00:01:13.520
+in a prepared environment like Emacs
+
+00:01:13.520 --> 00:01:15.280
+following their human tendencies
+
+00:01:15.280 --> 00:01:17.200
+to gain understanding
+
+00:01:17.200 --> 00:01:19.118
+and reach toward perfection.
+
+00:01:19.119 --> 00:01:21.040
+Okay. So the human tendencies
+
+00:01:21.040 --> 00:01:24.000
+are innate drives present in everybody.
+
+00:01:24.000 --> 00:01:25.600
+They're what enable us to explore
+
+00:01:25.600 --> 00:01:27.520
+and make sense of our world.
+
+01:27.520 --> 00:01:29.360
+We use these human tendencies
+
+00:01:29.360 --> 00:01:32.960
+to construct and refine the world itself.
+
+01:32.960 --> 00:01:34.240
+You know, if you're an Emacs user,
+
+00:01:34.240 --> 00:01:35.920
+I hope that's ringing some bells for you
+
+00:01:35.920 --> 00:01:38.320
+right away, because what we do
+
+00:01:38.320 --> 00:01:40.960
+when we interact with Emacs as individuals
+
+00:01:40.960 --> 00:01:45.360
+is construct and refine our world in Emacs.
+
+01:45.360 --> 00:01:46.320
+So I'm going to go through
+
+00:01:46.320 --> 00:01:47.920
+the human tendencies one by one
+
+00:01:47.920 --> 00:01:48.960
+and bring up things
+
+00:01:48.960 --> 00:01:52.079
+that I have observed or noticed in Emacs.
+
+01:52.079 --> 00:01:53.840
+I'm sure there's plenty more.
+
+00:01:53.840 --> 00:01:56.559
+Feel free to share it in chat.
+
+01:56.560 --> 00:02:00.000
+So number one is orientation.
+
+00:02:00.000 --> 00:02:02.000
+Human beings want to know their relationship
+
+00:02:02.000 --> 00:02:04.320
+to the environment around them.
+
+02:04.320 --> 00:02:05.840
+With children, when they come into
+
+00:02:05.840 --> 00:02:07.520
+a new environment, they want to look at it,
+
+02:07.520 --> 00:02:09.360
+touch everything around them.
+
+02:09.360 --> 00:02:11.520
+They want to know where they fit in,
+
+02:11.520 --> 00:02:12.800
+things like that.
+
+02:12.800 --> 00:02:15.599
+In Emacs, the easiest thing to think of
+
+00:02:15.599 --> 00:02:18.560
+is the initial new Emacs buffer.
+
+00:02:18.560 --> 00:02:21.040
+Right away, that is giving you
+
+00:02:21.040 --> 00:02:23.440
+some guideposts to orient yourself.
+
+00:02:23.440 --> 00:02:25.920
+If you've used any of the other
+
+02:25.920 --> 00:02:28.720
+Emacs starter packages, different packages
+
+00:02:28.720 --> 00:02:30.239
+take different approaches to this.
+
+00:02:30.239 --> 00:02:33.519
+I think if you're trying to get people
+
+00:02:33.519 --> 00:02:36.080
+to use Emacs for some reason,
+
+00:02:36.080 --> 00:02:39.440
+thinking about how individuals
+
+00:02:39.440 --> 00:02:40.720
+might orient themselves
+
+02:40.720 --> 00:02:43.680
+to this new software world is important.
+
+00:02:43.680 --> 00:02:46.000
+I think that there are friendly ways
+
+02:46.000 --> 00:02:48.080
+to welcome people into the environment
+
+02:48.080 --> 00:02:50.879
+and to make it easier for people
+
+00:02:50.879 --> 00:02:53.120
+to orient themselves within Emacs.
+
+00:02:53.120 --> 00:02:56.080
+Of course we've also got the Info manuals,
+
+00:02:56.080 --> 00:02:57.760
+and one of my favorite examples
+
+02:57.760 --> 00:03:00.080
+is the which-key package, which,
+
+00:03:00.080 --> 00:03:01.519
+when you press a key,
+
+00:03:01.519 --> 00:03:04.000
+it'll pop up with all of the following
+
+00:03:04.000 --> 00:03:05.760
+key bindings that are available.
+
+00:03:05.760 --> 00:03:09.280
+That's a really important way for me
+
+03:09.280 --> 00:03:13.599
+to explore, which is another human tendency,
+
+00:03:13.599 --> 00:03:15.280
+or to orient myself;
+
+00:03:15.280 --> 00:03:17.599
+to think about when I press this key,
+
+00:03:17.599 --> 00:03:19.920
+now I've got these possibilities.
+
+00:03:19.920 --> 00:03:21.760
+You see that all over in Emacs
+
+00:03:21.760 --> 00:03:25.920
+with hydras or the Magit transient buffers.
+
+00:03:25.920 --> 00:03:27.280
+There's all sorts of ways
+
+00:03:27.280 --> 00:03:29.440
+that Emacs is trying to help us
+
+00:03:29.440 --> 00:03:30.719
+orient ourselves.
+
+00:03:30.720 --> 00:03:33.440
+The second tendency is order, which
+
+00:03:33.440 --> 00:03:35.120
+I probably should have talked about first,
+
+00:03:35.120 --> 00:03:38.480
+but here I am. I myself am not
+
+00:03:38.480 --> 00:03:40.799
+particularly attuned to order,
+
+00:03:40.799 --> 00:03:43.120
+but when I was in the Montessori classroom,
+
+00:03:43.120 --> 00:03:45.920
+I found that it wasn't necessarily myself
+
+00:03:45.920 --> 00:03:47.360
+imposing the order, it was...
+
+00:03:47.360 --> 00:03:48.480
+The environment itself
+
+00:03:48.480 --> 00:03:50.239
+has a certain order to it,
+
+00:03:50.239 --> 00:03:52.080
+and by creating an environment
+
+00:03:52.080 --> 00:03:54.239
+where everything has its place,
+
+03:54.239 --> 00:03:56.480
+and everything has its time,
+
+00:03:56.480 --> 00:03:59.840
+and you have a way of doing things,
+
+00:03:59.840 --> 00:04:02.480
+it makes it easier for the child
+
+00:04:02.480 --> 00:04:04.560
+to develop that internal sense of order
+
+00:04:04.560 --> 00:04:07.120
+and succeed at imposing order
+
+00:04:07.120 --> 00:04:09.360
+upon their work, which...
+
+00:04:09.360 --> 00:04:11.360
+We do that as programmers.
+
+04:11.360 --> 00:04:13.280
+If we're contributing to Emacs,
+
+00:04:13.280 --> 00:04:16.079
+we try to do so in an orderly way,
+
+00:04:16.079 --> 00:04:18.160
+use prefixes for namespacing,
+
+00:04:18.160 --> 00:04:19.919
+since we don't have that ability
+
+00:04:19.919 --> 00:04:20.959
+in Emacs Lisp,
+
+00:04:20.959 --> 00:04:22.600
+and by sharing well-ordered
+
+00:04:22.600 --> 00:04:25.999
+self-documenting programs with our community.
+
+04:26.000 --> 00:04:28.560
+Number three is exploration. I think
+
+00:04:28.560 --> 00:04:30.720
+exploration is what drew me into Emacs,
+
+04:30.720 --> 00:04:32.400
+personally. In the beginning,
+
+00:04:32.400 --> 00:04:35.759
+it was just this wondrous
+
+00:04:35.759 --> 00:04:36.800
+software environment
+
+00:04:36.800 --> 00:04:39.360
+that offered so many opportunities.
+
+00:04:39.360 --> 00:04:41.680
+I was curious. Like, you've got
+
+00:04:41.680 --> 00:04:42.880
+your scratch buffer.
+
+00:04:42.880 --> 00:04:45.040
+You can explore in there with expressions.
+
+00:04:45.040 --> 00:04:46.880
+You can start up IELM.
+
+00:04:46.880 --> 00:04:49.440
+You can explore your file system with Dired.
+
+00:04:49.440 --> 00:04:51.199
+You can explore different packages
+
+00:04:51.199 --> 00:04:54.560
+with list-packages. There's so many ways
+
+00:04:54.560 --> 00:04:56.880
+you can explore in Emacs.
+
+00:04:56.880 --> 00:04:59.040
+For me, that was very delightful.
+
+00:04:59.040 --> 00:05:01.919
+It really resonated with my bias
+
+00:05:01.919 --> 00:05:04.960
+of exploration and human tendencies.
+
+05:04.960 --> 00:05:07.280
+Places to explore in Emacs are wonderful,
+
+05:07.280 --> 00:05:08.720
+and eventually you get down
+
+00:05:08.720 --> 00:05:12.079
+into the source code, and it's great.
+
+05:12.080 --> 00:05:14.400
+And then we've got communication.
+
+00:05:14.400 --> 00:05:16.639
+I think communication kind of
+
+00:05:16.639 --> 00:05:17.919
+speaks for itself as well.
+
+00:05:17.919 --> 00:05:19.520
+Emacs is software.
+
+05:19.520 --> 00:05:22.080
+Software is a form of communication.
+
+05:22.080 --> 00:05:23.360
+We're all driven to communicate.
+
+00:05:23.360 --> 00:05:26.240
+That's why we're here at this conference.
+
+05:26.240 --> 00:05:28.320
+Within Emacs, you've got lots of ways
+
+00:05:28.320 --> 00:05:30.960
+to communicate. You've got IRC clients,
+
+00:05:30.960 --> 00:05:32.960
+mail, you've got news readers.
+
+00:05:32.960 --> 00:05:34.080
+You could use Org.
+
+00:05:34.080 --> 00:05:37.600
+I even started working on a magazine in Org
+
+00:05:37.600 --> 00:05:38.800
+that I was going to distribute
+
+00:05:38.800 --> 00:05:42.479
+via live Debian CDs back in the day.
+
+00:05:42.479 --> 00:05:45.120
+So I think Emacs for communication
+
+00:05:45.120 --> 00:05:46.159
+is pretty clear.
+
+00:05:46.160 --> 00:05:48.639
+Activity. So Activities is just
+
+00:05:48.639 --> 00:05:51.120
+a natural thing when you're...
+
+00:05:51.120 --> 00:05:52.479
+You see it in children. Right?
+
+00:05:52.479 --> 00:05:54.720
+Children always find something to do
+
+00:05:54.720 --> 00:05:57.120
+to keep busy, whether they're pretending,
+
+00:05:57.120 --> 00:05:59.039
+or running around, or moving.
+
+00:05:59.039 --> 00:06:00.240
+You don't have to have a goal
+
+00:06:00.240 --> 00:06:01.759
+or end-product in mind.
+
+00:06:01.759 --> 00:06:02.800
+People are just active.
+
+00:06:02.800 --> 00:06:06.160
+You do things. I find that in Emacs,
+
+00:06:06.160 --> 00:06:08.000
+all the time, when I don't know
+
+00:06:08.000 --> 00:06:09.919
+what to work on, sometimes I just go
+
+06:09.919 --> 00:06:12.479
+into Emacs and hack around and, like,
+
+06:12.479 --> 00:06:14.000
+change things in my config.
+
+00:06:14.000 --> 00:06:16.000
+I'm sure we've all been there.
+
+00:06:16.000 --> 00:06:19.120
+So Emacs encourages and enables
+
+00:06:19.120 --> 00:06:21.198
+that kind of activity as well.
+
+00:06:21.199 --> 00:06:23.120
+Manipulation is the next one.
+
+00:06:23.120 --> 00:06:27.120
+So Lisp. Anyone? The fact that Emacs is
+
+00:06:27.120 --> 00:06:29.919
+this live Lisp process that's running,
+
+06:29.919 --> 00:06:33.360
+that you can manipulate at your fingertips...
+
+00:06:33.360 --> 00:06:35.120
+You couldn't ask for something better.
+
+00:06:35.120 --> 00:06:37.360
+I think the malleability of Emacs
+
+00:06:37.360 --> 00:06:39.600
+is why people love it.
+
+06:39.600 --> 00:06:41.840
+Clearly, the environment of Emacs
+
+00:06:41.840 --> 00:06:44.240
+was prepared with manipulation in mind
+
+00:06:44.240 --> 00:06:45.280
+from the very start.
+
+00:06:45.280 --> 00:06:46.960
+We'll go through these next ones
+
+06:46.960 --> 00:06:48.318
+pretty quickly.
+
+00:06:48.319 --> 00:06:51.759
+We've got work or purposeful activity.
+
+06:51.759 --> 00:06:53.039
+Emacs would not exist
+
+00:06:53.039 --> 00:06:55.120
+without this human tendency.
+
+06:55.120 --> 00:06:56.319
+it's been worked on
+
+00:06:56.319 --> 00:06:58.240
+by free software volunteers
+
+00:06:58.240 --> 00:07:03.360
+for 40 years, and this is the kind of
+
+00:07:03.360 --> 00:07:06.000
+self-motivated work that inspired me
+
+00:07:06.000 --> 00:07:09.198
+to be a hacker.
+
+07:09.199 --> 00:07:11.919
+Repetition is another human tendency.
+
+00:07:11.919 --> 00:07:14.960
+I think that one kind of speaks for itself.
+
+07:14.960 --> 00:07:17.120
+It's this tendency that gave me
+
+00:07:17.120 --> 00:07:19.919
+Emacs pinky after learning all of those
+
+00:07:19.919 --> 00:07:23.360
+key bindings, and then that same tendency
+
+00:07:23.360 --> 00:07:26.639
+drove me to learn another modal key mapping
+
+00:07:26.639 --> 00:07:29.759
+ to deal with that. I've repeated myself,
+
+00:07:29.759 --> 00:07:32.400
+starting over new Emacs configs
+
+00:07:32.400 --> 00:07:35.120
+several times. I could give another example,
+
+00:07:35.120 --> 00:07:36.960
+but I'll just be repeating myself
+
+00:07:36.960 --> 00:07:38.959
+at this point.
+
+07:38.960 --> 00:07:42.880
+And then exactness. So we have a tendency,
+
+00:07:42.880 --> 00:07:45.840
+a human tendency toward exactness.
+
+07:45.840 --> 00:07:48.160
+That's not one that's very strong for me.
+
+07:48.160 --> 00:07:50.879
+I'm not a super exacting person.
+
+07:50.879 --> 00:07:53.520
+But I think you can see that in Emacs,
+
+00:07:53.520 --> 00:07:55.520
+like certain parts of it
+
+00:07:55.520 --> 00:07:59.599
+have been refined down to exactness.
+
+00:07:59.599 --> 00:08:01.759
+I know when I'm working,
+
+00:08:01.759 --> 00:08:04.560
+sometimes it's just the theme that I choose
+
+00:08:04.560 --> 00:08:06.319
+or making sure the mode line
+
+00:08:06.319 --> 00:08:07.840
+is exactly the way I want it...
+
+00:08:07.840 --> 00:08:10.160
+You know, getting that environment
+
+00:08:10.160 --> 00:08:14.240
+to feel conducive to thought and work
+
+00:08:14.240 --> 00:08:16.318
+is important to me.
+
+08:16.319 --> 00:08:18.560
+And then we have abstraction, which...
+
+00:08:18.560 --> 00:08:19.680
+That one goes pretty deep,
+
+00:08:19.680 --> 00:08:21.840
+but I think you can see
+
+00:08:21.840 --> 00:08:24.080
+how abstraction works in Emacs.
+
+08:24.080 --> 00:08:26.080
+A buffer is an abstraction.
+
+00:08:26.080 --> 00:08:27.840
+One of the great things about Emacs
+
+00:08:27.840 --> 00:08:29.199
+and about Montessori philosophy
+
+00:08:29.199 --> 00:08:32.080
+is that these abstractions
+
+00:08:32.080 --> 00:08:33.200
+might not be something
+
+00:08:33.200 --> 00:08:34.640
+you need to think about right away,
+
+00:08:34.640 --> 00:08:35.919
+but they're there, right,
+
+00:08:35.919 --> 00:08:39.200
+like the fact that a buffer abstracts
+
+00:08:39.200 --> 00:08:41.279
+over working with text.
+
+08:41.279 --> 00:08:43.519
+Once that becomes clear to you,
+
+00:08:43.519 --> 00:08:45.760
+once you have a reason to manipulate it,
+
+00:08:45.760 --> 00:08:48.320
+having the abstraction of the buffer there
+
+00:08:48.320 --> 00:08:51.440
+to work with makes a huge difference.
+
+00:08:51.440 --> 00:08:52.160
+And then of course,
+
+00:08:52.160 --> 00:08:54.560
+we can create our own abstractions:
+
+08:54.560 --> 00:08:57.519
+transients, pop-up buffers, hydras...
+
+08:57.519 --> 00:08:59.360
+I'm sure there's plenty of examples
+
+00:08:59.360 --> 00:09:01.999
+in chat that I can't come up with.
+
+09:02.000 --> 00:09:03.519
+And finally, perfection.
+
+00:09:03.519 --> 00:09:04.959
+All of the human tendencies
+
+00:09:04.959 --> 00:09:07.279
+culminate in this one.
+
+00:09:07.279 --> 00:09:08.320
+Perfection doesn't mean
+
+00:09:08.320 --> 00:09:10.240
+like you just have to make
+
+00:09:10.240 --> 00:09:13.040
+this perfect shining idealistic thing.
+
+09:13.040 --> 00:09:15.680
+It's about perfecting what we do.
+
+00:09:15.680 --> 00:09:18.800
+I think everybody who's worked with Emacs
+
+00:09:18.800 --> 00:09:19.680
+for a long time,
+
+00:09:19.680 --> 00:09:22.240
+you perfect your configuration.
+
+09:22.240 --> 00:09:25.120
+Sometimes you tear it down and start over.
+
+00:09:25.120 --> 00:09:26.399
+If you're working on a package,
+
+00:09:26.399 --> 00:09:27.760
+you perfect that,
+
+00:09:27.760 --> 00:09:29.760
+and it's an ongoing process.
+
+00:09:29.760 --> 00:09:31.600
+An example I can think of are
+
+00:09:31.600 --> 00:09:33.680
+like raxod502's packages.
+
+09:33.680 --> 00:09:36.720
+straight.el is an attempt at perfecting
+
+00:09:36.720 --> 00:09:40.480
+the package management system in Emacs,
+
+09:40.480 --> 00:09:41.920
+and he's taken a stab at
+
+00:09:41.920 --> 00:09:43.440
+several other common things,
+
+00:09:43.440 --> 00:09:46.320
+like incremental selection and so on.
+
+09:46.320 --> 00:09:50.959
+These aren't necessarily finished problems.
+
+09:50.959 --> 00:09:52.480
+There's room for perfection,
+
+00:09:52.480 --> 00:09:58.160
+and we have a human tendency to pursue that.
+
+09:58.160 --> 00:09:59.040
+I hope this talk
+
+00:09:59.040 --> 00:10:00.080
+has gotten you thinking about
+
+00:10:00.080 --> 00:10:02.880
+how Emacs and the Montessori classroom
+
+00:10:02.880 --> 00:10:04.480
+are similar--they're both
+
+00:10:04.480 --> 00:10:06.160
+prepared environments
+
+10:06.160 --> 00:10:08.800
+that call upon our human tendencies
+
+10:08.800 --> 00:10:12.240
+to construct and refine our world--
+
+10:12.240 --> 00:10:15.519
+and how Emacs respects us as users
+
+10:15.519 --> 00:10:18.480
+in the hopes that we will grow up into
+
+10:18.480 --> 00:10:21.200
+creative hackers.
+
+10:21.200 --> 00:10:22.240
+Thank you for listening.
+
+00:10:22.240 --> 00:10:23.680
+I'm happy to answer any questions
+
+00:10:23.680 --> 00:10:26.079
+after the talk.
+
+00:10:26.079 --> 00:10:27.079
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt b/2021/captions/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt
new file mode 100644
index 00000000..99d8802b
--- /dev/null
+++ b/2021/captions/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt
@@ -0,0 +1,673 @@
+WEBVTT
+
+00:00.240 --> 00:00:02.800
+Hello. This is Kevin Haddock
+
+00:00:02.800 --> 00:00:05.839
+to announce the introduction of N-Angulator,
+
+00:00:05.839 --> 00:00:07.759
+hereafter called NA.
+
+00:07.759 --> 00:00:10.240
+NA allows you, the user, to supply
+
+00:00:10.240 --> 00:00:11.679
+the meaning to your data
+
+00:00:11.679 --> 00:00:13.599
+in a concise, efficient way.
+
+00:00:13.599 --> 00:00:14.880
+How does it work?
+
+00:14.880 --> 00:00:16.880
+Your files are stored on your hard disk
+
+00:00:16.880 --> 00:00:18.160
+in what technically is called
+
+00:00:18.160 --> 00:00:20.640
+a hierarchical file system.
+
+00:20.640 --> 00:00:22.240
+What this means is that
+
+00:00:22.240 --> 00:00:24.560
+the root of the directory tree can be
+
+00:00:24.560 --> 00:00:27.760
+not only files, or what we call leaves,
+
+00:00:27.760 --> 00:00:30.720
+but also other folders/branches
+
+00:00:30.720 --> 00:00:33.680
+that themselves contain other files, leaves,
+
+00:00:33.680 --> 00:00:36.000
+and/or branches.
+
+00:36.000 --> 00:00:37.680
+This structure is supposed to
+
+00:00:37.680 --> 00:00:40.079
+make it easy to locate your data,
+
+00:00:40.079 --> 00:00:42.079
+but as anyone knows who has worked with this
+
+00:00:42.079 --> 00:00:43.600
+single-dimensional file system
+
+00:00:43.600 --> 00:00:45.280
+for any length of time,
+
+00:45.280 --> 00:00:46.800
+it can get quite frustrating
+
+00:00:46.800 --> 00:00:48.960
+when your file would fit equally well
+
+00:00:48.960 --> 00:00:52.079
+on more than one branch of the tree.
+
+00:52.079 --> 00:00:53.920
+What are you to do?
+
+00:53.920 --> 00:00:55.920
+Create multiple copies everywhere
+
+00:00:55.920 --> 00:00:57.840
+it might appropriately fit.
+
+00:00:57.840 --> 00:00:59.039
+What if the file was something
+
+00:00:59.039 --> 00:01:01.120
+people would occasionally modify,
+
+00:01:01.120 --> 00:01:04.879
+like a spreadsheet or a computer source file?
+
+01:04.879 --> 00:01:07.760
+You would have to hunt it down in every place
+
+00:01:07.760 --> 00:01:11.840
+and apply those changes everywhere by hand.
+
+01:11.840 --> 00:01:14.720
+Also, let's say not only did you want
+
+00:01:14.720 --> 00:01:17.040
+to put the file in multiple places,
+
+00:01:17.040 --> 00:01:18.799
+but it was also more appropriate
+
+00:01:18.799 --> 00:01:21.280
+to give it different names?
+
+01:21.280 --> 00:01:23.280
+Plus, let's say in different areas
+
+00:01:23.280 --> 00:01:25.119
+of the tree, there were files
+
+00:01:25.119 --> 00:01:26.560
+with the same name
+
+01:26.560 --> 00:01:29.280
+that had totally different content?
+
+01:29.280 --> 00:01:31.280
+Then updating all the different instances
+
+00:01:31.280 --> 00:01:32.640
+of the file you need
+
+00:01:32.640 --> 00:01:35.200
+would become more and more of a nightmare.
+
+01:35.200 --> 00:01:37.920
+In addition, wouldn't it be great
+
+00:01:37.920 --> 00:01:39.520
+if we could all speed up
+
+00:01:39.520 --> 00:01:42.479
+the actual searching for a particular file
+
+01:42.479 --> 00:01:45.680
+by selecting multiple branches in the tree
+
+00:01:45.680 --> 00:01:47.200
+and simply asking the computer
+
+00:01:47.200 --> 00:01:49.680
+to tell us which branches under those
+
+01:49.680 --> 00:01:52.560
+contain the same file and which do not?
+
+01:52.560 --> 00:01:54.000
+This would be especially great
+
+00:01:54.000 --> 00:01:56.719
+if it were instantaneous.
+
+01:56.719 --> 00:01:58.640
+Well, believe it or not, this is what NA
+
+01:58.640 --> 00:02:00.079
+brings to the table.
+
+02:00.079 --> 00:02:03.040
+In fact, this is how NA got its name.
+
+02:03.040 --> 00:02:05.040
+Your data is located by a process
+
+00:02:05.040 --> 00:02:06.960
+very similar to the triangulation
+
+00:02:06.960 --> 00:02:09.119
+used to locate radio signals,
+
+00:02:09.119 --> 00:02:10.160
+only we are not limited
+
+00:02:10.160 --> 00:02:12.000
+to just two or three angles,
+
+00:02:12.000 --> 00:02:14.720
+but instead, many dozens can be used,
+
+02:14.720 --> 00:02:16.879
+this makes NA appear to be
+
+00:02:16.879 --> 00:02:18.640
+what is known in computer lingo
+
+00:02:18.640 --> 00:02:21.760
+as an n-dimensional sparse array.
+
+02:21.760 --> 00:02:23.599
+If that sounds complex, don't worry.
+
+00:02:23.599 --> 00:02:25.280
+It will become clear when you see it
+
+00:02:25.280 --> 00:02:28.720
+in operation in a couple of minutes.
+
+02:28.720 --> 00:02:32.560
+To start out, here we see the NA main screen.
+
+02:32.560 --> 00:02:36.080
+There are two vital aspects of mastering NA.
+
+00:02:36.080 --> 00:02:37.760
+First is the actual mechanics
+
+00:02:37.760 --> 00:02:39.120
+of using the program,
+
+00:02:39.120 --> 00:02:40.480
+which should be second nature
+
+00:02:40.480 --> 00:02:41.920
+for most anyone familiar with
+
+02:41.920 --> 00:02:46.160
+either a Windows or Unix/apple file system.
+
+02:46.160 --> 00:02:48.080
+We have the same operations
+
+00:02:48.080 --> 00:02:50.400
+as one might do with Windows Explorer
+
+02:50.400 --> 00:02:52.560
+or any number of other file tools,
+
+00:02:52.560 --> 00:02:54.560
+but what we also do
+
+00:02:54.560 --> 00:02:56.080
+that generally they do not
+
+00:02:56.080 --> 00:02:58.000
+is place a leaf on a branch,
+
+00:02:58.000 --> 00:03:00.560
+then cruise around adding links to that leaf
+
+03:00.560 --> 00:03:02.720
+on a multitude of other branches,
+
+00:03:02.720 --> 00:03:05.120
+which could include creating, renaming,
+
+00:03:05.120 --> 00:03:07.360
+or restructuring more branches on the fly
+
+03:07.360 --> 00:03:10.480
+as needed. Plus, when we find ourselves
+
+00:03:10.480 --> 00:03:12.319
+hunting for that file,
+
+00:03:12.319 --> 00:03:13.840
+we can incrementally select
+
+00:03:13.840 --> 00:03:15.120
+a stack of branches
+
+00:03:15.120 --> 00:03:17.200
+while seeking what the latter branches
+
+00:03:17.200 --> 00:03:19.920
+have in common with the earlier ones,
+
+03:19.920 --> 00:03:22.720
+to make putting one's finger on exactly
+
+00:03:22.720 --> 00:03:26.239
+the item they're looking for a snap.
+
+03:26.239 --> 00:03:28.319
+Secondly, you have the actual art
+
+00:03:28.319 --> 00:03:29.680
+of organizing your data,
+
+00:03:29.680 --> 00:03:31.120
+and NA doesn't really put
+
+00:03:31.120 --> 00:03:32.640
+any limitations on this,
+
+00:03:32.640 --> 00:03:34.799
+other than the underlying limitations
+
+00:03:34.799 --> 00:03:36.560
+of the file system.
+
+03:36.560 --> 00:03:39.760
+Let's get started, shall we?
+
+03:39.760 --> 00:03:41.920
+Right-clicking the mouse button here
+
+03:41.920 --> 00:03:43.760
+will bring up what we call
+
+00:03:43.760 --> 00:03:46.000
+a branch navigation menu,
+
+00:03:46.000 --> 00:03:46.959
+because it allows you
+
+00:03:46.959 --> 00:03:48.239
+to move around the tree
+
+00:03:48.239 --> 00:03:50.159
+or commence a new angle.
+
+03:50.159 --> 00:03:52.480
+We have chosen to organize our data
+
+00:03:52.480 --> 00:03:55.519
+with a hopper to put new items in,
+
+00:03:55.519 --> 00:03:57.360
+and the initial branches representing
+
+00:03:57.360 --> 00:03:59.519
+who, what, where, why, and how.
+
+00:03:59.519 --> 00:04:01.280
+We right-click on the root
+
+00:04:01.280 --> 00:04:03.439
+and select 0hopper,
+
+04:03.439 --> 00:04:06.000
+and that branch is added to the display.
+
+04:06.000 --> 00:04:08.080
+If we middle-click on the branch,
+
+04:08.080 --> 00:04:09.360
+we get what is called
+
+00:04:09.360 --> 00:04:11.280
+the branch command menu,
+
+00:04:11.280 --> 00:04:12.959
+which gives us many options,
+
+00:04:12.959 --> 00:04:13.920
+not the least of which
+
+00:04:13.920 --> 00:04:15.920
+is to create a leaf here.
+
+04:15.920 --> 00:04:18.000
+Remember this item as we progress,
+
+04:18.000 --> 00:04:20.320
+because it will become important.
+
+04:20.320 --> 00:04:22.960
+Next we pick what we know is a leaf item,
+
+04:22.960 --> 00:04:24.720
+due to the fact that it does not have
+
+00:04:24.720 --> 00:04:30.960
+a trailing slash.
+
+04:30.960 --> 00:04:32.960
+Now, when we right-click on it,
+
+04:32.960 --> 00:04:35.040
+notice the navigation menu is limited to
+
+00:04:35.040 --> 00:04:37.040
+the two items: New Angle
+
+00:04:37.040 --> 00:04:40.960
+and the leaf name itself.
+
+04:40.960 --> 00:04:43.680
+If we want to view or edit that leaf item,
+
+00:04:43.680 --> 00:04:45.440
+we can select that item.
+
+04:45.440 --> 00:04:47.280
+Now that we have selected a leaf,
+
+00:04:47.280 --> 00:04:48.560
+let's middle-click on it
+
+00:04:48.560 --> 00:04:49.520
+to bring up what we call
+
+00:04:49.520 --> 00:04:51.600
+the leaf command menu.
+
+04:51.600 --> 00:04:54.080
+This shows us a bunch of standard options
+
+00:04:54.080 --> 00:04:56.160
+one might do in a typical file tool
+
+00:04:56.160 --> 00:04:58.320
+like Microsoft Explorer.
+
+04:58.320 --> 00:05:00.479
+Since we want to do what they cannot do,
+
+05:00.479 --> 00:05:01.680
+let's right-click the leaf
+
+00:05:01.680 --> 00:05:04.639
+and select New Angle.
+
+05:04.639 --> 00:05:06.400
+Notice that another slash has appeared
+
+00:05:06.400 --> 00:05:09.840
+below the displayed path of the leaf.
+
+05:09.840 --> 00:05:11.520
+Right-click on it, and you will see
+
+00:05:11.520 --> 00:05:14.639
+the root branch navigation menu appears again,
+
+05:14.639 --> 00:05:19.039
+but now 0hopper entry has a line
+
+00:05:19.039 --> 00:05:20.960
+both above and below it.
+
+05:20.960 --> 00:05:23.199
+Items in between these two lines
+
+00:05:23.199 --> 00:05:24.560
+are called members,
+
+00:05:24.560 --> 00:05:27.520
+and items below them are called others.
+
+05:27.520 --> 00:05:29.680
+What this is saying is that
+
+00:05:29.680 --> 00:05:32.160
+the previously selected angle,
+
+05:32.160 --> 00:05:34.160
+which can be a single leaf
+
+05:34.160 --> 00:05:35.840
+as in this instance,
+
+05:35.840 --> 00:05:37.360
+or can be all of the leaves
+
+00:05:37.360 --> 00:05:38.960
+under a particular branch
+
+00:05:38.960 --> 00:05:43.039
+chosen to navigate new angle from,
+
+05:43.039 --> 00:05:44.880
+shares content with the items
+
+00:05:44.880 --> 00:05:47.680
+under the member area of the menu,
+
+00:05:47.680 --> 00:05:50.880
+but items in the others area do not.
+
+05:50.880 --> 00:05:53.600
+Since the first angle is 0hopper,
+
+05:53.600 --> 00:05:56.800
+of course it shares content with itself,
+
+05:56.800 --> 00:05:59.199
+and so it appears in members.
+
+05:59.199 --> 00:06:01.199
+Now let's click the middle button
+
+00:06:01.199 --> 00:06:02.960
+on the root branch, and see what
+
+00:06:02.960 --> 00:06:07.360
+the branch command menu has to say.
+
+06:07.360 --> 00:06:09.280
+Notice that the entry that used to say
+
+06:09.280 --> 00:06:13.120
+Create a New Leaf now says Add a Link.
+
+06:13.120 --> 00:06:15.039
+This is because we have already selected
+
+06:15.039 --> 00:06:17.360
+a leaf, and now we want to add links
+
+00:06:17.360 --> 00:06:20.479
+to it rather than create a new one.
+
+06:20.479 --> 00:06:21.840
+If you go back to the root
+
+00:06:21.840 --> 00:06:24.319
+and reselect 0hopper,
+
+06:24.319 --> 00:06:29.039
+that option will revert back again.
+
+06:29.039 --> 00:06:40.880
+So let's add a link under person.
+
+06:40.880 --> 00:06:42.720
+We right-click the root,
+
+00:06:42.720 --> 00:06:46.720
+select person, and let's add a link.
+
+06:46.720 --> 00:06:50.560
+Notice the bottom area (called the minibuffer)
+
+00:06:50.560 --> 00:06:53.360
+gives us the proposed name of the link,
+
+06:53.360 --> 00:06:55.680
+and we choose to accept it by hitting enter,
+
+00:06:55.680 --> 00:07:09.759
+or edit it to taste first.
+
+07:09.759 --> 00:07:10.960
+Now let's go back up to
+
+00:07:10.960 --> 00:07:13.120
+the end of the prior angle,
+
+07:13.120 --> 00:07:15.360
+select New Angle again,
+
+07:15.360 --> 00:07:18.319
+and then click the resultant /,
+
+00:07:18.319 --> 00:07:20.240
+and see what are members
+
+00:07:20.240 --> 00:07:21.840
+and what are others.
+
+07:21.840 --> 00:07:24.319
+Notice that the 0hopper and person
+
+07:24.319 --> 00:07:25.759
+are members.
+
+07:25.759 --> 00:07:28.319
+NA knows you added content to the person,
+
+00:07:28.319 --> 00:07:32.160
+so it moves to members.
+
+07:32.160 --> 00:07:33.599
+Now let's add some more links
+
+00:07:33.599 --> 00:07:35.360
+and perhaps a few subdirectories
+
+00:07:35.360 --> 00:08:06.960
+for this item.
+
+08:06.960 --> 00:08:08.960
+Notice how we can even eliminate
+
+00:08:08.960 --> 00:08:11.039
+the file name extension.
+
+08:11.039 --> 00:08:13.680
+It will still know how to display the item
+
+00:08:13.680 --> 00:08:15.440
+as it actually analyzes the file
+
+00:08:15.440 --> 00:08:17.120
+to determine its type.
+
+08:17.120 --> 00:08:19.120
+This greatly cleans up your metadata
+
+00:08:19.120 --> 00:08:40.719
+and makes it more human.
+
+08:40.719 --> 00:08:41.839
+Now let's pick a branch
+
+00:08:41.839 --> 00:08:43.519
+from one of the menus.
+
+08:43.519 --> 00:08:44.880
+For instance, let's look and see
+
+00:08:44.880 --> 00:08:54.880
+where any events broadcast were done from.
+
+08:54.880 --> 00:09:06.640
+We select event, broadcast, then New Angle,
+
+09:06.640 --> 00:09:09.600
+and we can see California is in members.
+
+09:09.600 --> 00:09:11.600
+Now we can also do New Angle
+
+00:09:11.600 --> 00:09:13.920
+and select person,
+
+09:13.920 --> 00:09:16.160
+and we can see who did them.
+
+09:16.160 --> 00:09:18.720
+Another thing we can do is pick a leaf
+
+09:18.720 --> 00:09:19.920
+and quickly display
+
+00:09:19.920 --> 00:09:21.920
+all angles or links for it,
+
+00:09:21.920 --> 00:09:24.160
+or if we are willing to wait a little longer,
+
+00:09:24.160 --> 00:09:26.720
+have NA construct all the display items
+
+00:09:26.720 --> 00:09:28.320
+with Edit All Angles,
+
+00:09:28.320 --> 00:09:30.160
+so we can manipulate them
+
+00:09:30.160 --> 00:09:31.440
+just as if we had entered
+
+00:09:31.440 --> 00:09:44.320
+or selected them by hand.
+
+09:44.320 --> 00:09:46.080
+There are many more tools in NA
+
+00:09:46.080 --> 00:09:47.440
+to handle sets of leaves
+
+00:09:47.440 --> 00:09:50.320
+such as scanned pages of a book,
+
+09:50.320 --> 00:09:53.040
+promoting /, demoting nodes,
+
+09:53.040 --> 00:09:54.560
+and so forth.
+
+09:54.560 --> 00:09:55.560
+Thanks for watching.
+
+00:09:55.560 --> 00:09:58.040
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--answers--chapters.vtt b/2021/captions/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--answers--chapters.vtt
new file mode 100644
index 00000000..734e47f2
--- /dev/null
+++ b/2021/captions/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--answers--chapters.vtt
@@ -0,0 +1,94 @@
+WEBVTT
+
+00:00:00.480 --> 00:01:16.319
+Thanks
+
+00:01:16.320 --> 00:02:05.359
+Why is Elisp not a general-purpose programming language, at least not completely?
+
+00:02:05.360 --> 00:02:37.759
+Is this activity related to the garbage collector?
+
+00:02:37.760 --> 00:03:42.079
+Is the idea to eventually develop Emacs itself in Elisp?
+
+00:03:42.080 --> 00:04:27.199
+How did you work on this?
+
+00:04:27.200 --> 00:05:39.039
+Does this compilation pipeline introduce vulnerabilities?
+
+00:05:39.040 --> 00:07:28.479
+What code, if any, will still benefit significantly from being written in C?
+
+00:07:28.480 --> 00:08:49.359
+What's the risk of (setq native-comp-speed 3)?
+
+00:08:49.360 --> 00:09:15.199
+Are there any limits introduced by native comp with respect to runtime introspectability, changeability/redefinability, etc?
+
+00:09:15.200 --> 00:10:11.359
+Is there a benefit in setting native-comp-compiler-options to "-mtune=native -march="?
+
+00:10:11.360 --> 00:11:54.799
+You mentioned native-comp coming in emacs 28. Will this be the default at build time, or will distros have to set this themselves?
+
+00:11:54.800 --> 00:14:22.479
+Could we avoid libgccjit.so? Or consider using another jit lib (e.g. dynasm used by luajit) et al to gain better optimization?
+
+00:14:22.480 --> 00:16:23.839
+How much of Emacs's C code base could be translated to emacs-lisp? What is the minimum C code base necessary?
+
+00:16:23.840 --> 00:17:27.599
+Could we statically type elisp code (via macros?) to provide more optimization hints to compiler?
+
+00:17:27.600 --> 00:18:55.839
+Elisp and Python all are dynamically typed langauge, but benchmark shows that Elisp runs slower than Python. Could we learn some best practices from the Python community?
+
+00:18:55.840 --> 00:21:35.919
+Did you try to optimize with Rust too? What are your thoughts on Rust for this particular optimization and security?
+
+00:21:35.920 --> 00:22:59.039
+Does the native compilation interface with the Emacs profiling tools?
+
+00:22:59.040 --> 00:27:04.319
+Where did funding for your work come from?
+
+00:27:04.320 --> 00:28:36.879
+What kind of application do I envision native comp enabling to work well in Emacs in the next few years, and which one would not be possible?
+
+00:28:36.880 --> 00:29:47.679
+Is this the first real-world practical use of libgccjit?
+
+00:29:47.680 --> 00:33:49.359
+Is there any task you need help with?
+
+00:33:49.360 --> 00:38:37.519
+What's a good way to proceed?
+
+00:38:37.520 --> 00:40:46.079
+What kind of packages do you think could now be practical with native comp?
+
+00:40:46.080 --> 00:46:29.759
+Why not implement Emacs Lisp in Guile and use Guile's compiler?
+
+00:46:29.760 --> 00:48:27.679
+What are some other hobbies/interests of yours besides Emacs?
+
+00:48:27.680 --> 00:51:04.639
+Will you be presenting at ELS or anywhere else in the next year?
+
+00:51:04.640 --> 00:59:46.959
+How to make Emacs more popular?
+
+00:59:46.960 --> 01:02:04.799
+Do you have 'wish list' features, things you long for Emacs to be able to do?
+
+01:02:04.800 --> 01:05:33.359
+From BBB chat: dickmao has a patch that makes Gnus async....
+
+01:05:33.360 --> 01:10:20.719
+Advice for anyone who wants to bring something into Emacs core
+
+01:10:20.720 --> 01:10:21.720
+Do you have any advice on how to approach the upstream development community?
diff --git a/2021/captions/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.vtt b/2021/captions/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.vtt
new file mode 100644
index 00000000..0f7e6a3c
--- /dev/null
+++ b/2021/captions/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.vtt
@@ -0,0 +1,2752 @@
+WEBVTT
+
+00:00.200 --> 00:02.340
+Hi everybody, my name is Andrea Corallo,
+
+00:02.440 --> 00:03.280
+and this presentation is about
+
+00:03.382 --> 00:05.802
+the Emacs Lisp Native Compiler --
+
+00:05.904 --> 00:07.083
+having GNU Emacs able to
+
+00:07.184 --> 00:08.805
+compile and run Emacs Lisp as native code.
+
+00:08.907 --> 00:11.565
+This project has been my hobby project
+
+00:11.667 --> 00:14.009
+for the last about two years and a half
+
+00:14.111 --> 00:15.408
+And we will see a little bit
+
+00:15.509 --> 00:16.969
+where this project is coming from,
+
+00:17.070 --> 00:18.913
+where we are, and where we want to go.
+
+00:19.015 --> 00:20.571
+So essentially everything you need to know
+
+00:20.672 --> 00:22.132
+about the Emacs Lisp Native Compiler,
+
+00:22.232 --> 00:23.416
+and probably a little more.
+
+00:23.521 --> 00:26.535
+Just a little bit of context on Emacs Lisp.
+
+00:26.635 --> 00:30.175
+Well, Emacs Lisp is a programming language,
+
+00:30.278 --> 00:33.544
+it's indeed a Lisp,
+
+00:33.647 --> 00:36.619
+and one year ago I looked for some statistics,
+
+00:36.722 --> 00:38.742
+and I was kind of pleased to see
+
+00:38.842 --> 00:40.030
+-- surprised to see actually --
+
+00:40.132 --> 00:40.972
+that it's still kind of popular
+
+00:41.073 --> 00:42.844
+as a programming language.
+
+00:42.944 --> 00:43.684
+It doesn't rank that bad
+
+00:43.785 --> 00:45.554
+against other programming languages.
+
+00:45.658 --> 00:48.387
+Also, the other important fact about Emacs Lisp
+
+00:48.487 --> 00:51.518
+is that there is a lot of Emacs Lisp out there,
+
+00:51.622 --> 00:55.922
+and this will have an impact [on this project.]
+
+00:56.025 --> 00:57.632
+It's a programming language that is capable
+
+00:57.734 --> 00:59.320
+of almost any task, so it's
+
+00:59.420 --> 01:01.728
+almost a general-purpose programming language,
+
+01:01.831 --> 01:04.116
+and this reflects on Emacs itself,
+
+01:04.217 --> 01:07.232
+that it's capable of almost any task.
+
+01:07.335 --> 01:09.679
+Indeed this "almost" is something we want to fix,
+
+01:09.781 --> 01:10.720
+because we want to do everything,
+
+01:10.820 --> 01:14.218
+we want [to do] all of our computing [with Emacs].
+
+01:14.321 --> 01:16.523
+Also, an interesting aspect for me
+
+01:16.625 --> 01:18.903
+is that it's not specified by any standard.
+
+01:19.005 --> 01:22.507
+This implies it can evolve in a more agile way
+
+01:22.609 --> 01:25.667
+without having to change the standard, etc.
+
+01:25.770 --> 01:27.870
+And, in fact, it's kind of improving,
+
+01:27.970 --> 01:30.370
+I believe relatively fast.
+
+01:30.473 --> 01:32.791
+A little bit about Lisp in general.
+
+01:32.892 --> 01:34.952
+First, it's the best programming language ever,
+
+01:35.052 --> 01:35.712
+we all know it.
+
+01:35.813 --> 01:37.833
+It has a lot of very nice properties,
+
+01:37.934 --> 01:40.356
+like it's dynamic, it's homoiconic, etc.
+
+01:40.462 --> 01:42.394
+But the interesting thing for implementors,
+
+01:42.496 --> 01:43.476
+is that, in theory,
+
+01:43.576 --> 01:46.716
+it can be implemented with very few primitives.
+
+01:46.817 --> 01:49.485
+You build very few primitives that are like magic,
+
+01:49.590 --> 01:51.838
+and on top of this,
+
+01:51.938 --> 01:53.770
+you can implement the whole language.
+
+01:53.873 --> 01:55.759
+This sounds very nice,
+
+01:55.860 --> 01:57.280
+and very appealing for implementors
+
+01:57.381 --> 02:00.175
+meaning to implement a new Lisp implementation,
+
+02:00.279 --> 02:02.539
+or improving or modifying an existing one.
+
+02:02.641 --> 02:04.163
+So the question is:
+
+02:04.263 --> 02:07.663
+how many primitives do we have to implement
+
+02:07.764 --> 02:09.384
+if we want to change
+
+02:09.485 --> 02:13.203
+the GNU Emacs Lisp implementation?
+
+02:13.308 --> 02:20.128
+Unfortunately, not really as few as we would like.
+
+02:20.234 --> 02:25.294
+In GNU Emacs, we have about 1500 primitives,
+
+02:25.400 --> 02:27.970
+and the main reason for that is performance.
+
+02:28.071 --> 02:30.961
+Actually, GNU Emacs was written
+
+02:31.064 --> 02:34.292
+when performance was a big issue,
+
+02:34.393 --> 02:36.493
+and nowadays certain parts
+
+02:36.594 --> 02:38.486
+are still performance-critical.
+
+02:38.591 --> 02:40.295
+We have a lot of C code;
+
+02:40.395 --> 02:46.331
+30% of the GNU Emacs codebase is C code,
+
+02:46.435 --> 02:49.177
+and we have to maintain this.
+
+02:49.279 --> 02:52.859
+But not only that, this is the main barrier
+
+02:52.959 --> 02:55.579
+for people that tried in the past
+
+02:55.681 --> 02:57.663
+to change the Emacs Lisp implementation.
+
+02:57.765 --> 02:59.101
+Because not only do you have to
+
+02:59.202 --> 03:01.582
+replace these primitives,
+
+03:01.683 --> 03:03.907
+all of them or part of them,
+
+03:04.012 --> 03:06.384
+but sometimes they also share (these primitives),
+
+03:06.484 --> 03:07.952
+internal data structures.
+
+03:08.055 --> 03:09.745
+For instance, it's very difficult to say:
+
+03:09.846 --> 03:12.826
+Now I want to go from C
+
+03:12.926 --> 03:13.906
+to a different programming language
+
+03:14.006 --> 03:15.638
+for implementing these primitives.
+
+03:15.740 --> 03:17.028
+So this has been, effectively,
+
+03:17.128 --> 03:20.380
+the main barrier for doing this work.
+
+03:20.486 --> 03:22.090
+Another interesting aspect
+
+03:22.190 --> 03:23.870
+about the GNU Emacs implementation
+
+03:23.970 --> 03:26.190
+is that Lisp can run interpreted
+
+03:26.291 --> 03:28.647
+or byte-compiled for performance,
+
+03:28.752 --> 03:30.632
+and the byte compiler itself
+
+03:30.733 --> 03:32.673
+is written in Emacs Lisp.
+
+03:32.773 --> 03:35.033
+This implies that GNU Emacs has to go through
+
+03:35.134 --> 03:37.214
+a bootstrap procedure in order to be built.
+
+03:37.319 --> 03:38.715
+But it's kind of interesting
+
+03:38.815 --> 03:41.835
+for something that started as a text editor,
+
+03:41.937 --> 03:43.101
+or something like it.
+
+03:43.203 --> 03:47.877
+The byte-code that is Emacs Lisp
+
+03:47.979 --> 03:50.279
+when it's been byte compiled,
+
+03:50.379 --> 03:53.079
+it's running on a stack-based virtual machine
+
+03:53.180 --> 03:55.146
+that is implemented in C.
+
+03:55.253 --> 03:59.741
+OK, so I've listed a bunch of areas
+
+03:59.842 --> 04:02.074
+where Emacs Lisp could improve:
+
+04:02.178 --> 04:06.924
+Namespace, Extensibility, Performance,
+
+04:07.025 --> 04:11.239
+and Debuggability, and Diagnostic, we could say.
+
+04:11.346 --> 04:14.326
+This activity, this project in particular,
+
+04:14.428 --> 04:17.088
+is affecting primarily Performance
+
+04:17.189 --> 04:21.314
+and the performance area the Execution Engine.
+
+04:21.414 --> 04:22.570
+That said,
+
+04:22.671 --> 04:25.855
+I think it has an impact also on Extensibility,
+
+04:25.957 --> 04:27.811
+and I hope it will have an impact also
+
+04:27.913 --> 04:29.779
+on programming diagnostics,
+
+04:29.881 --> 04:32.501
+so giving better warnings, [unknown].
+
+04:32.604 --> 04:36.694
+So which are the benefits
+
+04:36.795 --> 04:39.215
+of increasing the Emacs Lisp performance?
+
+04:39.316 --> 04:42.976
+Indeed, we will have, if we do that,
+
+04:43.078 --> 04:45.668
+programs that run faster.
+
+04:45.774 --> 04:48.738
+But the main implication of that
+
+04:48.840 --> 04:50.760
+is that we could write less C;
+
+04:50.860 --> 04:52.940
+we could maintain and debug less C.
+
+04:53.041 --> 04:56.437
+That is kind of a time-consuming task.
+
+04:56.542 --> 04:59.502
+And we could also allow for
+
+04:59.603 --> 05:01.723
+writing performance-critical extensions
+
+05:01.824 --> 05:03.804
+directly in Lisp
+
+05:03.909 --> 05:06.305
+without having to use systems like
+
+05:06.406 --> 05:09.686
+[I think there's a bunch.]
+
+05:09.927 --> 05:14.791
+These are very consistent benefits.
+
+05:14.899 --> 05:16.669
+OK, Project Goals,
+
+05:16.769 --> 05:18.829
+but I think the title of this slide
+
+05:18.930 --> 05:21.520
+maybe should be Project Requirements.
+
+05:21.623 --> 05:23.231
+So when I started this activity,
+
+05:23.331 --> 05:26.943
+I set some requirements for the project,
+
+05:27.049 --> 05:29.469
+with the main goal in mind: to go upstream.
+
+05:29.570 --> 05:31.494
+So I wanted to create something,
+
+05:31.594 --> 05:34.250
+a modified implementation of GNU Emacs,
+
+05:34.353 --> 05:36.675
+that was compatible
+
+05:36.776 --> 05:38.596
+as close to 100% as possible
+
+05:38.696 --> 05:40.514
+to the current implementation.
+
+05:40.620 --> 05:42.720
+And when I say "current implementation,"
+
+05:42.820 --> 05:44.758
+I don't refer to what
+
+05:44.859 --> 05:46.879
+the Emacs Lisp Programming Manual specifies
+
+05:46.980 --> 05:49.804
+as expected behavior of the implementation,
+
+05:49.907 --> 05:52.207
+but really the implementation itself.
+
+05:52.309 --> 05:53.841
+This is because there are a lot of corner cases
+
+05:53.942 --> 05:56.390
+that are not specified by the manual,
+
+05:56.493 --> 05:58.093
+but programs do rely on that,
+
+05:58.193 --> 06:00.523
+and given there is a ton of Emacs Lisp
+
+06:00.625 --> 06:01.935
+already around,
+
+06:02.037 --> 06:05.437
+compatibility was definitely a major requirement.
+
+06:05.541 --> 06:07.727
+I wanted to produce something that had
+
+06:07.827 --> 06:09.587
+reduced impact on the Emacs codebase,
+
+06:09.687 --> 06:11.543
+at least as much as possible.
+
+06:11.644 --> 06:14.724
+So I didn't want to rewrite all of GNU Emacs.
+
+06:14.827 --> 06:17.609
+Indeed, because it would have been
+
+06:17.710 --> 06:21.068
+too much work for one single person,
+
+06:21.171 --> 06:25.371
+but also still thinking
+
+06:25.473 --> 06:29.153
+to an upstream outcome all of this time.
+
+06:29.258 --> 06:31.974
+Another requirement was to have
+
+06:32.076 --> 06:34.700
+no, or very reduced, impact on the user,
+
+06:34.804 --> 06:36.456
+so I didn't want to change
+
+06:36.556 --> 06:38.604
+the way Emacs is used by you.
+
+06:38.708 --> 06:40.618
+And last but not least,
+
+06:40.718 --> 06:42.848
+introducing new dependencies,
+
+06:42.951 --> 06:45.379
+those dependencies had to be Free Software,
+
+06:45.479 --> 06:47.191
+possibly GPL,
+
+06:47.295 --> 06:49.995
+and also an important requirement
+
+06:50.097 --> 06:52.941
+is that these dependencies had to be
+
+06:53.043 --> 06:55.143
+some kind of trusted software that we know
+
+06:55.243 --> 06:56.681
+is going to be maintained in the future.
+
+06:56.781 --> 06:59.261
+Given Emacs has been around since forever,
+
+06:59.363 --> 07:01.183
+and will be around forever and ever,
+
+07:01.285 --> 07:05.265
+this was another very important point.
+
+07:05.367 --> 07:08.707
+A little bit of history of this project/
+
+07:08.808 --> 07:10.648
+a quick timeline.
+
+07:10.748 --> 07:14.388
+2019, in May, I did my first commit,
+
+07:14.490 --> 07:17.110
+I think it was when I tried to write
+
+07:17.210 --> 07:20.230
+my first primitive function ever in C,
+
+07:20.332 --> 07:21.752
+in GNU Emacs.
+
+07:21.852 --> 07:24.832
+And this was an attempt to try to compile
+
+07:24.934 --> 07:30.314
+a function that, once executed, returning [?]
+
+07:30.415 --> 07:33.755
+That was it. Six months after (about),
+
+07:33.857 --> 07:37.057
+I had something that was kind of working,
+
+07:37.157 --> 07:42.797
+So I was able to start up a semi-standard Emacs
+
+07:42.899 --> 07:44.879
+and then to compile and load,
+
+07:44.981 --> 07:47.221
+and replacing most of the functions
+
+07:47.321 --> 07:50.921
+that I had defined floating in my Lisp universe.
+
+07:51.022 --> 07:54.202
+Those functions are the functions
+
+07:54.304 --> 07:55.944
+that are essentially composing Emacs,
+
+07:56.044 --> 07:57.884
+at least the Lisp side of Emacs.
+
+07:57.984 --> 08:01.084
+A lot of features were missing,
+
+08:01.186 --> 08:03.426
+like I had no Garbage Collector support,
+
+08:03.526 --> 08:07.006
+no bootstrap, I was not optimizing these functions
+
+08:07.108 --> 08:10.068
+Because optimization [would be broken].
+
+08:10.169 --> 08:12.749
+No image dump support, etc.
+
+08:12.850 --> 08:16.330
+But I think this proved the design could work.
+
+08:16.431 --> 08:19.171
+So I sent to email to emacs-devel. I said
+
+08:19.272 --> 08:20.852
+I have this stuff I'm working on,
+
+08:20.953 --> 08:24.613
+and I wanted some feedback from the upstream
+
+08:24.714 --> 08:27.534
+to see if there was some interest.
+
+08:27.635 --> 08:30.455
+I believe the outcome of this was positive
+
+08:30.557 --> 08:32.837
+because about one month after,
+
+08:32.937 --> 08:35.697
+I pushed my branch within the Emacs git
+
+08:35.798 --> 08:38.438
+as a feature branch, and shortly after,
+
+08:38.539 --> 08:42.679
+we started to use the bug tracker to track bugs.
+
+08:42.779 --> 08:45.479
+So essentially we moved the development
+
+08:45.580 --> 08:50.040
+on the upstream infrastructure.
+
+08:50.140 --> 08:55.620
+I believe two years after the first commit,
+
+08:55.721 --> 08:57.781
+the project was merged
+
+08:57.882 --> 09:00.922
+after literally hundreds of bugs solved,
+
+09:01.022 --> 09:03.842
+and improvements, suggestions [unknown]
+
+09:03.943 --> 09:08.623
+and this was about six months ago.
+
+09:08.723 --> 09:12.363
+Before discussing how the native compiler works,
+
+09:12.464 --> 09:14.224
+I think it's worth looking at
+
+09:14.324 --> 09:17.644
+how Lisp is implemented in GNU Emacs.
+
+09:17.745 --> 09:19.305
+We have Lisp_Objects
+
+09:19.405 --> 09:21.945
+floating around our Lisp universe,
+
+09:22.045 --> 09:23.905
+and they are internally represented in this way.
+
+09:24.006 --> 09:25.606
+We have what is called a tagged pointer,
+
+09:25.706 --> 09:27.406
+that is just a regular pointer
+
+09:27.506 --> 09:29.286
+that is pointing to the area of memory
+
+09:29.386 --> 09:31.926
+where we hold the real data of the object.
+
+09:32.027 --> 09:34.187
+But within this tagged pointer,
+
+09:34.287 --> 09:36.747
+we reserve a few bits
+
+09:36.848 --> 09:38.968
+to indicate the type of object we are pointing to.
+
+09:39.068 --> 09:40.528
+This is important because
+
+09:40.628 --> 09:42.288
+each time we access an object,
+
+09:42.388 --> 09:46.168
+we have to typically check those bits
+
+09:46.269 --> 09:49.029
+to check that the object we are manipulating
+
+09:49.129 --> 09:50.529
+is of the right kind,
+
+09:50.630 --> 09:52.530
+remove those bits, and, if we are happy,
+
+09:52.630 --> 09:55.810
+access the object, otherwise [unknown].
+
+09:55.910 --> 09:57.690
+All the objects are like this,
+
+09:57.791 --> 09:59.731
+except for typically Fixnums,
+
+09:59.831 --> 10:01.031
+that are small integers
+
+10:01.131 --> 10:04.891
+that we manage to fit directly within the pointer.
+
+10:04.992 --> 10:07.292
+Also for manipulating Fixnums,
+
+10:07.392 --> 10:09.412
+we have to check the tag bits each time.
+
+10:09.513 --> 10:13.173
+Whenever we are not sure of the type of object
+
+10:13.273 --> 10:16.493
+we are manipulating (read: almost every time),
+
+10:16.594 --> 10:18.914
+we have to check those bits and remove those bits
+
+10:19.014 --> 10:21.754
+before doing any manipulation on the Fixnum.
+
+10:21.854 --> 10:26.014
+How Emacs Lisp is byte-compiled and executed
+
+10:26.115 --> 10:27.775
+in, let's call it, "Vanilla".
+
+10:27.875 --> 10:30.055
+If we have a Lisp expression of this kind:
+
+10:30.156 --> 10:32.776
+We take the variable 'a' we do plus 2,
+
+10:32.876 --> 10:34.876
+and then we multiply the result by 3,
+
+10:34.976 --> 10:37.376
+the byte compiler will produce this LAP code.
+
+10:37.477 --> 10:38.497
+LAP code is essentially
+
+10:38.597 --> 10:40.017
+the assembly for the byte-code,
+
+10:40.117 --> 10:43.697
+so it's the "intermediate representation"
+
+10:43.798 --> 10:48.458
+that will assembled into byte-code. (.elc files)
+
+10:48.558 --> 10:50.738
+How is this program executed?
+
+10:50.839 --> 10:53.639
+As I mentioned, it's executed in a virtual machine
+
+10:53.739 --> 10:55.699
+that is stack-based,
+
+10:55.800 --> 10:58.540
+but we start with an execution stack that's empty,
+
+10:58.640 --> 11:01.680
+and a stack pointer pointing to its bottom.
+
+11:01.780 --> 11:04.280
+And we execute the first instruction,
+
+11:04.380 --> 11:07.120
+that is pushing in the stack the value of 'a',
+
+11:07.220 --> 11:10.360
+in this case, 100. Then we push the constant 2.
+
+11:10.460 --> 11:12.400
+Then we do the summation,
+
+11:12.500 --> 11:14.040
+and we have the result in the stack.
+
+11:14.140 --> 11:16.860
+Same: we push the constant 3,
+
+11:16.960 --> 11:17.620
+we do the multiplication,
+
+11:17.720 --> 11:19.260
+and we will be able to return.
+
+11:19.360 --> 11:22.700
+Now, what's good and what's bad about this?
+
+11:22.800 --> 11:25.800
+A good thing is that it's very simple
+
+11:25.900 --> 11:27.460
+to start from Lisp
+
+11:27.560 --> 11:31.320
+and compile this kind of LAP output.
+
+11:31.420 --> 11:34.240
+At least it's reasonably simple.
+
+11:34.340 --> 11:36.240
+The compiler is not that complex.
+
+11:36.340 --> 11:39.000
+The bad thing is that all this machinery
+
+11:39.100 --> 11:40.660
+-- push and pop, etc. --
+
+11:40.760 --> 11:44.320
+it's very different from how a modern CPU works.
+
+11:44.420 --> 11:45.720
+Because modern CPUs,
+
+11:45.820 --> 11:47.660
+they are not stack-based anymore
+
+11:47.760 --> 11:50.900
+but they have instead a fixed number of registers,
+
+11:51.000 --> 11:54.020
+and they work with assignment and operation
+
+11:54.120 --> 11:55.040
+within these registers
+
+11:55.140 --> 11:57.040
+that are generally called "general-purpose."
+
+11:57.140 --> 11:59.260
+So to execute this LAP program,
+
+11:59.360 --> 12:00.760
+there is another program,
+
+12:00.860 --> 12:02.600
+that is the implementation of the VM itself
+
+12:02.700 --> 12:06.400
+that is doing conversion during runtime.
+
+12:06.500 --> 12:08.320
+So it's interpreting the LAP program
+
+12:08.420 --> 12:11.360
+and it's converting it into instructions
+
+12:11.460 --> 12:13.180
+that we can execute on the CPU.
+
+12:13.280 --> 12:14.940
+This conversion is done each time
+
+12:15.040 --> 12:17.100
+we will run some byte-code.
+
+12:17.200 --> 12:19.760
+And it's something that we want to avoid.
+
+12:19.860 --> 12:21.560
+Instead of this live conversion,
+
+12:21.660 --> 12:26.220
+we want to convert once:
+
+12:26.320 --> 12:28.920
+our Lisp program into native code,
+
+12:29.020 --> 12:32.380
+that is, a binary program that can be executed
+
+12:32.480 --> 12:34.400
+directly by our CPU.
+
+12:34.500 --> 12:36.680
+We want to save all this unnecessary conversion
+
+12:36.780 --> 12:39.000
+that we do each time we are running a program
+
+12:39.100 --> 12:39.760
+while we are running it.
+
+12:39.860 --> 12:42.060
+And we want to do this process just once,
+
+12:42.160 --> 12:43.740
+when we are compiling.
+
+12:43.840 --> 12:46.240
+That's the main goal of this activity.
+
+12:46.340 --> 12:50.200
+How is the byte compiler implemented?
+
+12:50.300 --> 12:53.940
+As any compiler it's a pipeline of transformations.
+
+12:54.040 --> 12:58.560
+We go through macro expansion, closure conversion,
+
+12:58.660 --> 13:02.120
+we have a bunch of source level optimization.
+
+13:02.220 --> 13:03.940
+Then we go into LAP,
+
+13:04.040 --> 13:06.800
+that's the transformation we are interested in,
+
+13:06.900 --> 13:10.600
+and after a few optimizations on LAP,
+
+13:10.700 --> 13:14.140
+LAP is assembled into byte-code.
+
+13:14.240 --> 13:16.880
+So if we [list it]
+
+13:16.980 --> 13:19.320
+in terms of intermediate representations,
+
+13:19.420 --> 13:23.600
+we can simplify this pipeline like this.
+
+13:23.700 --> 13:26.100
+We start with Lisp, and at a certain point
+
+13:26.200 --> 13:29.520
+we are manipulating the program in LAP form,
+
+13:29.620 --> 13:31.980
+and then at the end we produce the byte-code
+
+13:32.080 --> 13:34.560
+that is the .elc file that [you run]
+
+13:34.660 --> 13:37.660
+What I wanted to realize was something like this.
+
+13:37.760 --> 13:41.200
+I wanted to start from LAP, do something,
+
+13:41.300 --> 13:44.600
+and jump into GCC using libgccjit
+
+13:44.700 --> 13:45.560
+and in particular
+
+13:45.660 --> 13:48.000
+the libgccjit Intermediate Representation
+
+13:48.100 --> 13:50.340
+that we will discuss.
+
+13:50.440 --> 13:53.120
+Now, why I wanted to do something like this?
+
+13:53.220 --> 13:57.300
+Essentially, writing a compiler from scratch
+
+13:57.400 --> 14:01.520
+for Emacs Lisp would have been a very big task.
+
+14:01.620 --> 14:05.120
+So I wanted to rely on, as much as I could,
+
+14:05.220 --> 14:07.180
+the Emacs Lisp byte compiler,
+
+14:07.280 --> 14:10.280
+because I had to produce something
+
+14:10.380 --> 14:12.920
+that was as compatible as possible
+
+14:13.020 --> 14:14.240
+to the current implementation.
+
+14:14.340 --> 14:18.340
+So this was (I believe) a very good idea
+
+14:18.440 --> 14:20.520
+to save an enormous quantity of work
+
+14:20.620 --> 14:22.340
+and to produce something
+
+14:22.440 --> 14:24.940
+that was compatible in terms of semantics
+
+14:25.040 --> 14:26.820
+with the original implementation.
+
+14:26.920 --> 14:30.660
+Also, I didn't want to implement a code generator
+
+14:30.760 --> 14:32.860
+for each architecture we were targeting,
+
+14:32.960 --> 14:35.900
+nor wanted to implement all these optimizations
+
+14:36.000 --> 14:37.840
+that are already in GCC,
+
+14:37.940 --> 14:40.120
+so I thought it was a good idea
+
+14:40.220 --> 14:44.720
+to rely on an existing compiler like GCC [?].
+
+14:44.820 --> 14:47.240
+Let's talk about libgccjit.
+
+14:47.340 --> 14:50.180
+It was added by David Malcolm in GCC 5
+
+14:50.280 --> 14:55.680
+It allows you to describe a C-ish semantic to GCC
+
+14:55.780 --> 14:57.380
+and have it compile.
+
+14:57.480 --> 15:01.400
+It's good for [reading] Jitters or AoT compilers.
+
+15:01.500 --> 15:04.400
+And if we talk about GCC:
+
+15:04.500 --> 15:07.180
+it's a compiler, it's a very good one,
+
+15:07.280 --> 15:09.340
+it has support for a remarkable number
+
+15:09.440 --> 15:11.640
+of target architectures.
+
+15:11.740 --> 15:15.080
+It's also very good at generating [fast code],
+
+15:15.180 --> 15:17.980
+and it's been around for a long time;
+
+15:18.080 --> 15:21.200
+I believe it's like 1 year younger than Emacs.
+
+15:21.300 --> 15:23.220
+It's still very well maintained,
+
+15:23.320 --> 15:25.840
+and we can assume it will be maintained
+
+15:25.940 --> 15:28.920
+for quite a while. And, as I mentioned,
+
+15:29.020 --> 15:31.120
+this was a very important point.
+
+15:31.220 --> 15:33.860
+Also, it's GPL; it's Free Software,
+
+15:33.960 --> 15:36.120
+and it's developed under the GNU umbrella,
+
+15:36.220 --> 15:40.360
+so I thought it was a very good option.
+
+15:40.460 --> 15:43.300
+So we can imagine a simple translation
+
+15:43.400 --> 15:46.400
+that goes from LAP to this subset of C
+
+15:46.500 --> 15:48.880
+that we can describe to libgccjit.
+
+15:48.980 --> 15:52.880
+This simple translation we can see here,
+
+15:52.980 --> 15:55.680
+it's actually pretty trivial.
+
+15:55.780 --> 15:58.500
+Instead of doing operations
+
+15:58.600 --> 16:02.060
+within the execution stack we have seen before,
+
+16:02.160 --> 16:05.080
+we have just an array that is replacing it,
+
+16:05.180 --> 16:07.380
+and it's called 'local' in this case,
+
+16:07.480 --> 16:12.360
+and we have assignments within this array,
+
+16:12.460 --> 16:15.140
+so that they are done in place of the original
+
+16:15.240 --> 16:17.100
+push and pop activity of the stack.
+
+16:17.200 --> 16:18.280
+The nice thing is that,
+
+16:18.380 --> 16:20.260
+when you have done this translation,
+
+16:20.360 --> 16:23.160
+GCC will be able to optimize this,
+
+16:23.260 --> 16:25.840
+and remove all the unnecessary operations,
+
+16:25.940 --> 16:27.180
+and generate code
+
+16:27.280 --> 16:29.660
+for the specific CPU you are targeting,
+
+16:29.760 --> 16:32.020
+[which will be running your code].
+
+16:32.120 --> 16:34.920
+This sounds great; it sounds like
+
+16:35.020 --> 16:37.440
+a very simple and effective translation,
+
+16:37.540 --> 16:39.920
+and in fact the first iteration of my compiler
+
+16:40.020 --> 16:41.120
+was doing just this.
+
+16:41.220 --> 16:45.320
+It was essentially a big C function
+
+16:45.420 --> 16:48.240
+that was taking LAP and doing this conversion
+
+16:48.340 --> 16:50.120
+describing the output to libgccjit.
+
+16:50.220 --> 16:53.720
+Unfortunately, if you do this,
+
+16:53.820 --> 16:55.740
+you will discover that you have
+
+16:55.840 --> 17:00.080
+a performance upper bound limit of about 3x.
+
+17:00.180 --> 17:04.360
+So it was an option,
+
+17:04.460 --> 17:06.560
+but I thought it was a good occasion
+
+17:06.660 --> 17:08.980
+for trying to do something more.
+
+17:09.080 --> 17:11.640
+And doing something more means
+
+17:11.740 --> 17:13.680
+implementing a smarter compiler
+
+17:13.780 --> 17:17.180
+that is doing some advanced analysis on the code,
+
+17:17.280 --> 17:18.640
+and will be able to perform
+
+17:18.740 --> 17:20.700
+Lisp-specific optimizations
+
+17:20.800 --> 17:22.480
+-- optimizations that take advantage of
+
+17:22.580 --> 17:24.960
+the specific Lisp semantics,
+
+17:25.060 --> 17:27.760
+something that GCC is not aware of.
+
+17:27.860 --> 17:31.240
+And while I was thinking about that,
+
+17:31.340 --> 17:34.000
+I thought that having a smarter compiler
+
+17:34.100 --> 17:38.120
+had also other advantages, like a smarter compiler
+
+17:38.220 --> 17:40.120
+that understands the semantics
+
+17:40.220 --> 17:41.820
+of the programming language being compiled
+
+17:41.920 --> 17:43.680
+would be also capable of
+
+17:43.780 --> 17:45.620
+giving feedback to the programmers,
+
+17:45.720 --> 17:47.920
+like better warnings and errors.
+
+17:48.020 --> 17:51.360
+So I was really fascinated about this idea,
+
+17:51.460 --> 17:53.240
+and I wanted to change my implementation
+
+17:53.340 --> 17:55.920
+because I was not really happy about it.
+
+17:56.020 --> 17:58.320
+I had a lot of C code in terms of
+
+17:58.420 --> 18:02.100
+lines that were not doing any smart job.
+
+18:02.200 --> 18:07.380
+And I wanted to write all the interesting logic
+
+18:07.480 --> 18:09.940
+[in Lisp].
+
+18:10.040 --> 18:12.560
+So optimizing outside GCC
+
+18:12.660 --> 18:15.840
+before jumping into GCC,
+
+18:15.940 --> 18:20.500
+as I mentioned, has two main targets:
+
+18:20.600 --> 18:23.060
+Either optimize the code before going into GCC,
+
+18:23.160 --> 18:25.380
+or present to GCC some code
+
+18:25.480 --> 18:27.740
+that we know GCC can optimize effectively.
+
+18:27.840 --> 18:30.800
+And also, this will give, as I mentioned,
+
+18:30.900 --> 18:32.660
+better options for the compiler
+
+18:32.760 --> 18:34.420
+to provide warnings, errors
+
+18:34.520 --> 18:36.340
+-- better diagnostics.
+
+18:36.440 --> 18:38.200
+So this is pretty much
+
+18:38.300 --> 18:40.640
+what the native compiler looks like nowadays,
+
+18:40.740 --> 18:42.720
+in terms of passes.
+
+18:42.820 --> 18:44.560
+We have a list of passes,
+
+18:44.660 --> 18:46.620
+each of which is taking an input
+
+18:46.720 --> 18:48.120
+and producing an output.
+
+18:48.220 --> 18:51.040
+So it's doing either analysis on the program
+
+18:51.140 --> 18:52.640
+that's being passed,
+
+18:52.740 --> 18:54.760
+or it's performing a transformation.
+
+18:54.860 --> 18:57.900
+All of these passes are implemented in Lisp,
+
+18:58.000 --> 19:00.440
+and only the last pass is implemented in C.
+
+19:00.540 --> 19:05.060
+That is the one that is talking to libgccjit.
+
+19:05.160 --> 19:07.760
+To do that, I have introduced
+
+19:07.860 --> 19:10.640
+a new intermediate representation
+
+19:10.740 --> 19:13.960
+that I call LIMPLE, as a tribute to GCC GIMPLE,
+
+19:14.060 --> 19:17.220
+that is the main internal representation of GCC,
+
+19:17.320 --> 19:20.600
+at least one of the main ones.
+
+19:20.700 --> 19:25.080
+Introducing a new intermediate representation
+
+19:25.180 --> 19:27.720
+-- a new way of representing my program --
+
+19:27.820 --> 19:29.540
+solved a bunch of problems.
+
+19:29.640 --> 19:33.200
+First, it allowed me to implement
+
+19:33.300 --> 19:37.280
+non-trivial analysis and transformations,
+
+19:37.380 --> 19:40.000
+the ones I needed in my compiler pipeline.
+
+19:40.100 --> 19:42.160
+But also, it solved the problem of
+
+19:42.260 --> 19:43.840
+what was the boundary between
+
+19:43.940 --> 19:46.120
+what I had to implement in Lisp,
+
+19:46.220 --> 19:48.040
+and what in C.
+
+19:48.140 --> 19:49.040
+Because once I had
+
+19:49.140 --> 19:51.860
+my intermediate representation defined,
+
+19:51.960 --> 19:53.780
+essentially the boundary between Lisp and C
+
+19:53.880 --> 19:55.640
+is just a function, that is,
+
+19:55.740 --> 19:57.780
+the one that is implementing the final pass.
+
+19:57.880 --> 19:59.220
+That is taking, as an input,
+
+19:59.320 --> 20:01.620
+all of my programs in LIMPLE representation
+
+20:01.720 --> 20:03.880
+and it's doing [his bit].
+
+20:03.980 --> 20:07.980
+So I was convinced this design at least had sense.
+
+20:08.080 --> 20:10.120
+When we go through some of these passes,
+
+20:10.220 --> 20:12.600
+just to give you an idea of what these are doing:
+
+20:12.700 --> 20:14.560
+the first pass is just responsible for
+
+20:14.660 --> 20:18.100
+spilling the LAP from the byte compiler
+
+20:18.200 --> 20:20.160
+that effectively here we are using as a front end
+
+20:20.260 --> 20:21.780
+for our compiler pipeline.
+
+20:21.880 --> 20:24.040
+The second pass, called 'limplify',
+
+20:24.140 --> 20:27.920
+will be in charge of converting LAP into LIMPLE.
+
+20:28.020 --> 20:31.260
+LIMPLE is an intermediate representation
+
+20:31.360 --> 20:32.860
+that is Control Flow Graph based,
+
+20:32.960 --> 20:34.700
+and it's capable of SSA.
+
+20:34.800 --> 20:38.640
+So we can have a look to what this means.
+
+20:38.740 --> 20:41.300
+Let's assume we have our LAP program,
+
+20:41.400 --> 20:42.520
+as any program,
+
+20:42.620 --> 20:43.960
+that's a simple list of instructions
+
+20:44.060 --> 20:45.640
+that we will execute one after the other.
+
+20:45.740 --> 20:47.360
+Some of these instructions
+
+20:47.460 --> 20:49.200
+are special instructions
+
+20:49.300 --> 20:51.240
+that we call conditional branches,
+
+20:51.340 --> 20:52.800
+where we check for a condition,
+
+20:52.900 --> 20:54.320
+and if this is verified,
+
+20:54.420 --> 20:56.940
+we jump to a different address within the program.
+
+20:57.040 --> 20:59.580
+(Addresses that here we are calling 'labels'.)
+
+20:59.680 --> 21:03.440
+So we can split our program in chunks,
+
+21:03.540 --> 21:08.200
+and those chunks we execute without interruption,
+
+21:08.300 --> 21:10.460
+so we always enter from the top of those,
+
+21:10.560 --> 21:12.600
+and we exit from the bottom.
+
+21:12.700 --> 21:15.980
+We can name those, and split them apart,
+
+21:16.080 --> 21:18.980
+and these are what we call basic blocks.
+
+21:19.080 --> 21:22.360
+And now we have a bunch of these basic blocks
+
+21:22.460 --> 21:23.380
+that are floating,
+
+21:23.480 --> 21:25.020
+and they are not any more sorted.
+
+21:25.120 --> 21:25.920
+This is what is called
+
+21:26.020 --> 21:28.680
+a Control Flow Graph based representation.
+
+21:28.780 --> 21:31.400
+Now we can get into the SSA topic.
+
+21:31.500 --> 21:33.900
+That stands for Static Single Assignment.
+
+21:34.000 --> 21:35.860
+I don't want to get into the details,
+
+21:35.960 --> 21:36.720
+but just give you a feeling.
+
+21:36.820 --> 21:38.480
+I added into our basic blocks
+
+21:38.580 --> 21:41.400
+in our Control Flow Graph a few assignments.
+
+21:41.500 --> 21:43.840
+We will transform this into SSA
+
+21:43.940 --> 21:45.040
+just for the variable 'x',
+
+21:45.140 --> 21:47.360
+just for the sake of demonstrating it.
+
+21:47.460 --> 21:49.760
+This is done through a number of phases
+
+21:49.860 --> 21:51.760
+that are essentially some analysis,
+
+21:51.860 --> 21:52.600
+mainly renaming.
+
+21:52.700 --> 21:55.560
+But the outcome, the one we see here,
+
+21:55.660 --> 21:59.120
+looks quite similar to the original one,
+
+21:59.220 --> 22:01.120
+but we can see that the variable 'x'
+
+22:01.220 --> 22:01.960
+has been renamed.
+
+22:02.060 --> 22:03.400
+And now we don't have anymore just one,
+
+22:03.500 --> 22:06.140
+but a number of these variables.
+
+22:06.240 --> 22:08.000
+The interesting property is that
+
+22:08.100 --> 22:10.880
+each of these variables is assigned just once.
+
+22:10.980 --> 22:13.240
+And this allows for the compiler
+
+22:13.340 --> 22:16.760
+to do prediction of the value of that variable,
+
+22:16.860 --> 22:19.040
+depending on the position
+
+22:19.140 --> 22:19.840
+within the Control Flow Graph.
+
+22:19.940 --> 22:21.980
+This is very important. For instance,
+
+22:22.080 --> 22:23.440
+a very simple case is 'x1'
+
+22:23.540 --> 22:27.440
+that we see is assigned once by definition,
+
+22:27.540 --> 22:29.300
+in particular here at the beginning.
+
+22:29.400 --> 22:31.040
+Here it's very simple to understand
+
+22:31.140 --> 22:33.080
+that x1 will have the value 3.
+
+22:33.180 --> 22:35.380
+While, for instance, it's more difficult to prove
+
+22:35.480 --> 22:37.060
+what is going to be the value of x5,
+
+22:37.160 --> 22:38.620
+because it's calling a function,
+
+22:38.720 --> 22:41.940
+or we don't know at the moment what x4 is.
+
+22:42.040 --> 22:46.240
+So the compiler will gain the capability
+
+22:46.340 --> 22:48.460
+to do prediction on all the variables,
+
+22:48.560 --> 22:50.620
+and the more we get information on one variable,
+
+22:50.720 --> 22:54.980
+the more we can prove about the others.
+
+22:55.460 --> 22:57.280
+Coming back to our passes, the next one
+
+22:57.380 --> 22:59.320
+is forward propagation.
+
+22:59.420 --> 23:00.600
+This pass is responsible for
+
+23:00.700 --> 23:03.240
+doing what I briefly mentioned just before:
+
+23:03.340 --> 23:07.160
+doing proof over all the different variables
+
+23:07.260 --> 23:09.620
+in different positions of the Control Flow Graph,
+
+23:09.720 --> 23:12.700
+about the values, types, or ranges.
+
+23:12.800 --> 23:15.080
+This pass is also responsible for
+
+23:15.180 --> 23:16.920
+executing functions
+
+23:17.020 --> 23:18.640
+when we know that the function has no side effect
+
+23:18.740 --> 23:20.520
+and the pass managed to
+
+23:20.620 --> 23:22.440
+prove all the values of its argument.
+
+23:22.540 --> 23:24.800
+So the function is then executed at compile time
+
+23:24.900 --> 23:26.700
+and it doesn't even exist anymore
+
+23:26.800 --> 23:27.880
+in the produced code.
+
+23:27.980 --> 23:30.300
+Then we have another pass, this is
+
+23:30.400 --> 23:33.420
+an example of a pass that is very specific:
+
+23:33.520 --> 23:36.120
+it's trying to remove the call to funcall
+
+23:36.220 --> 23:38.040
+when those are not necessary.
+
+23:38.140 --> 23:39.760
+There are a couple situations
+
+23:39.860 --> 23:42.200
+where this is very useful.
+
+23:42.300 --> 23:45.240
+And not only is this beneficial
+
+23:45.340 --> 23:47.560
+because we are generating better code,
+
+23:47.660 --> 23:49.245
+but when we manage to do that,
+
+23:49.345 --> 23:52.000
+we allow GCC better analysis over the code,
+
+23:52.100 --> 23:54.440
+because GCC knows nothing about funcall.
+
+23:54.540 --> 23:57.400
+So if we are calling, from 'foo', directly, 'bar',
+
+23:57.500 --> 24:01.280
+for GCC it's way easier to do its analysis
+
+24:01.380 --> 24:03.360
+on top of this code.
+
+24:03.460 --> 24:06.240
+Another interesting pass we can mention is 'tco'.
+
+24:06.340 --> 24:08.800
+This is performing Tail Recursion Elimination.
+
+24:08.900 --> 24:11.880
+It allows a more functional programming style,
+
+24:11.980 --> 24:13.220
+if you want.
+
+24:13.320 --> 24:14.280
+We can jump to the last pass
+
+24:14.380 --> 24:16.200
+that is called 'final', and as I mentioned,
+
+24:16.300 --> 24:17.520
+this one is responsible for
+
+24:17.620 --> 24:19.880
+taking our program in LIMPLE representation
+
+24:19.980 --> 24:24.900
+and describing it to libgccjit in the gccjit IR.
+
+24:25.000 --> 24:27.480
+That's the main task. It's also
+
+24:27.580 --> 24:29.520
+defining inline functions
+
+24:29.620 --> 24:32.400
+for accessing fundamental data types, and so on.
+
+24:32.500 --> 24:34.460
+This pass is also responsible for
+
+24:34.560 --> 24:36.280
+using some of the predictions
+
+24:36.380 --> 24:39.560
+done by previous passes to generate better code.
+
+24:39.660 --> 24:41.320
+Things we had to add
+
+24:41.420 --> 24:43.880
+to have all of this machinery work
+
+24:43.980 --> 24:45.240
+and to be controllable:
+
+24:45.340 --> 24:47.480
+The first one is an opt called 'native-comp-speed'
+
+24:47.580 --> 24:49.920
+and it's equivalent to Common Lisp's 'speed'.
+
+24:50.020 --> 24:51.920
+It represents the optimization level.
+
+24:52.020 --> 24:53.400
+The default is 2 and is
+
+24:53.500 --> 24:55.400
+the maximum optimization level
+
+24:55.500 --> 24:58.600
+that is meant to reflect
+
+24:58.700 --> 25:00.860
+all the original semantics of Emacs Lisp.
+
+25:00.960 --> 25:02.480
+So it's the one that should be used by default.
+
+25:02.580 --> 25:04.640
+The second one is 'compilation unit'
+
+25:04.740 --> 25:05.960
+and it's a kind of new object
+
+25:06.060 --> 25:11.080
+that has been added to Emacs.
+
+25:11.180 --> 25:12.960
+Let's have a look to
+
+25:13.060 --> 25:14.360
+how the Garbage Collector works in this case.
+
+25:14.460 --> 25:15.840
+The GNU Emacs Garbage Collector
+
+25:15.940 --> 25:18.660
+is a simple mark-and-sweep garbage collector.
+
+25:18.760 --> 25:21.420
+It does a tree walk through all the objects
+
+25:21.520 --> 25:25.100
+and follows references from one object to another.
+
+25:25.200 --> 25:27.960
+All the objects reachable during the mark phase
+
+25:28.060 --> 25:31.240
+will be kept in our Lisp universe.
+
+25:31.340 --> 25:33.680
+All the other ones will be freed.
+
+25:33.780 --> 25:35.080
+In this case we have a bunch of functions,
+
+25:35.180 --> 25:38.760
+'foo1', 'foo2', 'bar1', etc., that are defined.
+
+25:38.860 --> 25:40.320
+When a function is defined,
+
+25:40.420 --> 25:42.400
+it's accessible through its symbol,
+
+25:42.500 --> 25:44.360
+so we have the symbol referring to the function.
+
+25:44.460 --> 25:47.720
+The function, in this case a native-compiled one,
+
+25:47.820 --> 25:50.040
+is referring to the compilation unit.
+
+25:50.140 --> 25:53.020
+The compilation unit is essentially
+
+25:53.120 --> 25:58.600
+the ELF file that has been compiled,
+
+25:58.700 --> 26:01.160
+and contains all those functions
+
+26:01.260 --> 26:03.240
+that came from the original .el file,
+
+26:03.340 --> 26:05.100
+and that we have loaded into memory.
+
+26:05.200 --> 26:10.000
+If, for instance, 'bar1 and 'bar2 are undefined,
+
+26:10.100 --> 26:14.200
+functions [3] and 4 will be no longer reachable,
+
+26:14.300 --> 26:16.040
+and we will be able to free them
+
+26:16.140 --> 26:18.160
+and unload the compilation unit.
+
+26:18.260 --> 26:21.200
+We discussed quite a lot about Control Flow Graph,
+
+26:21.300 --> 26:23.560
+SSA, and a lot of boring stuff,
+
+26:23.660 --> 26:25.400
+and I promised you that we are doing
+
+26:25.500 --> 26:27.320
+a lot of interesting proofs over variables,
+
+26:27.420 --> 26:30.220
+So let's have some examples of them.
+
+26:30.320 --> 26:31.840
+Let's jump into a quick demo
+
+26:31.940 --> 26:34.480
+to see what all of this abstract theory
+
+26:34.580 --> 26:37.680
+and this esoteric propagation engine can do for us
+
+26:37.780 --> 26:39.240
+and how the user can interact with it.
+
+26:39.340 --> 26:42.100
+I've defined a bunch of functions,
+
+26:42.200 --> 26:45.240
+and I will native-compile and load it.
+
+26:47.500 --> 26:48.840
+Alright, Emacs Lisp native compiled and loaded.
+
+26:48.940 --> 26:52.320
+At this point, I can disassemble 'foo1'
+
+26:52.420 --> 26:56.320
+to make sure it's native code and I'm not lying.
+
+26:56.420 --> 26:58.500
+These are the instructions
+
+26:58.600 --> 27:01.320
+that will be executed directly by my CPU
+
+27:01.420 --> 27:03.620
+when I call this function.
+
+27:03.720 --> 27:07.520
+Alright, very cool.
+
+27:07.620 --> 27:16.080
+Now, [Lisp:] (symbol-function #'foo1)
+
+27:16.180 --> 27:19.720
+Interestingly, this is returning a subroutine,
+
+27:19.820 --> 27:21.820
+as it would be a primitive function.
+
+27:21.920 --> 27:23.700
+Because this is native code,
+
+27:23.800 --> 27:24.840
+even if it's written in Lisp,
+
+27:24.940 --> 27:26.340
+has been converted to native code
+
+27:26.440 --> 27:29.200
+as if it's a primitive function.
+
+27:29.300 --> 27:31.560
+But we can do also a new thing:
+
+27:31.660 --> 27:34.440
+asking for the type of the subroutine.
+
+27:34.540 --> 27:38.360
+Alright, very cool. It says this is a function,
+
+27:38.460 --> 27:40.280
+it's taking one argument of type 't'
+
+27:40.380 --> 27:41.560
+(that means anything
+
+27:41.660 --> 27:42.960
+because we don't have any information),
+
+27:43.060 --> 27:45.200
+and is returning a type 't',
+
+27:45.300 --> 27:47.380
+so also there we don't have much information.
+
+27:47.480 --> 27:49.700
+OK, very cool, but not very useful.
+
+27:49.800 --> 27:53.680
+Let's see #'foo2. #'foo2 is slightly different,
+
+27:53.780 --> 27:55.840
+it doesn't take any argument, but it's returning
+
+27:55.940 --> 27:58.040
+an integer included between 3 and 3.
+
+27:58.140 --> 28:01.360
+Wow, amazing!
+
+28:01.460 --> 28:04.040
+Let's get into something a little more complex:
+
+28:04.140 --> 28:09.440
+#'foo3 takes one argument we know nothing about,
+
+28:09.540 --> 28:11.740
+but it's returning a number.
+
+28:11.840 --> 28:13.280
+And why it's returning a number?
+
+28:13.380 --> 28:16.320
+Essentially because 1+ is returning a number,
+
+28:16.420 --> 28:18.880
+and in all the other cases,
+
+28:18.980 --> 28:20.640
+it would signal an error
+
+28:20.740 --> 28:23.380
+if it's not happy about its input argument.
+
+28:23.480 --> 28:27.760
+Let's have a look to #'foo4.
+
+28:27.860 --> 28:32.920
+#'foo4 is a little bit more complex.
+
+28:33.020 --> 28:34.680
+It will return nil
+
+28:34.780 --> 28:37.400
+if the 'when' condition is not satisfied,
+
+28:37.500 --> 28:39.720
+so it's type 'null' here.
+
+28:39.820 --> 28:41.200
+It can return a floating point;
+
+28:41.300 --> 28:43.600
+we don't do propagation of floating point so far,
+
+28:43.700 --> 28:47.080
+or it can return any integer between 4 and 9.
+
+28:47.180 --> 28:52.840
+Wow. Let's go on with #'foo5.
+
+28:52.940 --> 28:55.760
+#'foo5 is even more complex
+
+28:55.860 --> 28:57.200
+because other than
+
+28:57.300 --> 28:59.180
+having to satisfy this condition,
+
+28:59.280 --> 29:02.280
+we can see that the result of the propagation
+
+29:02.380 --> 29:03.800
+of this complex condition
+
+29:03.900 --> 29:05.460
+is propagated also across the 'plus'.
+
+29:05.560 --> 29:08.240
+So this foo5 can return nil,
+
+29:08.340 --> 29:09.720
+a floating point we know nothing about,
+
+29:09.820 --> 29:13.560
+or an integer included between 12 and 24.
+
+29:13.660 --> 29:18.080
+Let's go on with #'foo6.
+
+29:18.180 --> 29:23.320
+#'foo6 is returning anything but an integer.
+
+29:23.420 --> 29:26.520
+I think it should be pretty obvious why,
+
+29:26.620 --> 29:28.120
+because if it's not an integer we return it,
+
+29:28.220 --> 29:30.000
+otherwise we signal an error.
+
+29:30.100 --> 29:32.880
+Let's finish with #'foo7 very quickly.
+
+29:32.980 --> 29:37.920
+#'foo7 has another very complex condition,
+
+29:38.020 --> 29:40.320
+at least for me, but it's also interesting to see
+
+29:40.420 --> 29:42.200
+that we are also propagating values for symbols.
+
+29:42.300 --> 29:45.160
+So we can return the symbol 'big,
+
+29:45.260 --> 29:46.980
+the symbol 'small,
+
+29:47.080 --> 29:51.200
+or an integer included between -100 and 100.
+
+29:51.300 --> 29:54.440
+Now, the question is: why all of this is useful
+
+29:54.540 --> 29:56.800
+other than having Andrea very happy
+
+29:56.900 --> 29:59.560
+when he's playing with this all day?
+
+29:59.660 --> 30:01.440
+Well, we have to come back one second
+
+30:01.540 --> 30:04.920
+to how Lisp_Objects are represented within Emacs.
+
+30:05.020 --> 30:09.480
+Lisp_Objects are represented as machine words,
+
+30:09.580 --> 30:12.580
+where we reserve a few bits to indicate the type.
+
+30:12.680 --> 30:15.560
+And every time we access the object,
+
+30:15.660 --> 30:17.120
+when this is a Fixnum,
+
+30:17.220 --> 30:19.920
+or a regular object where this is a pointer,
+
+30:20.020 --> 30:21.600
+we always have to extract these bits,
+
+30:21.700 --> 30:24.520
+make sure that they satisfy a condition,
+
+30:24.620 --> 30:27.120
+so make sure that we are going to manipulate
+
+30:27.220 --> 30:28.580
+the object of the type we expect,
+
+30:28.680 --> 30:31.040
+and then we can extract the object
+
+30:31.140 --> 30:32.540
+and do the manipulation.
+
+30:32.640 --> 30:34.420
+If the compiler managed to prove
+
+30:34.620 --> 30:37.400
+that the contained object is of the right type,
+
+30:37.500 --> 30:42.440
+it will be able to not emit the type check,
+
+30:42.540 --> 30:44.500
+and save a lot of instructions.
+
+30:44.600 --> 30:48.560
+This is a very powerful optimization.
+
+30:48.660 --> 30:50.760
+Let's discuss some potential future development
+
+30:50.860 --> 30:52.000
+in this area.
+
+30:52.100 --> 30:53.360
+First I think it would be extremely nice
+
+30:53.460 --> 30:54.920
+to extend the propagation
+
+30:55.020 --> 30:56.920
+to types that are not built in.
+
+30:57.020 --> 30:58.160
+There are a lot of cases
+
+30:58.260 --> 31:00.600
+where we could optimize effectively.
+
+31:00.700 --> 31:02.520
+For instance when we do
+
+31:02.620 --> 31:05.720
+a lot of accesses to structures
+
+31:05.820 --> 31:06.920
+-- lots of stuff like that --
+
+31:07.020 --> 31:08.880
+where we keep on checking and checking
+
+31:08.980 --> 31:10.640
+the same object for the type
+
+31:10.740 --> 31:13.080
+where it's obvious, where it should be trivial
+
+31:13.180 --> 31:14.720
+to prove that it's the right type
+
+31:14.820 --> 31:16.360
+after the first access or things like that.
+
+31:16.460 --> 31:18.920
+So I believe this is a low-hanging fruit
+
+31:19.020 --> 31:21.180
+in terms of performance.
+
+31:21.280 --> 31:23.080
+Also I think it would be really nice
+
+31:23.180 --> 31:24.720
+to extend the declare mechanism
+
+31:24.820 --> 31:27.600
+to allow the user to declare argument types.
+
+31:27.700 --> 31:30.480
+(Optionally. Indeed, optionally.)
+
+31:30.580 --> 31:32.880
+Doing that would give the compiler
+
+31:32.980 --> 31:35.120
+a lot of information to propagate value types
+
+31:35.220 --> 31:36.360
+within the function.
+
+31:36.460 --> 31:38.840
+But those will allow the compiler
+
+31:38.940 --> 31:43.040
+to give the user really good diagnostics
+
+31:43.140 --> 31:45.400
+during compile time. Like the compiler could say:
+
+31:45.500 --> 31:47.000
+Hey, here you are calling a function
+
+31:47.100 --> 31:49.200
+that is expecting this argument of this type,
+
+31:49.300 --> 31:52.000
+but I'm proving that you are calling it
+
+31:52.100 --> 31:55.200
+with an argument that is of THIS type,
+
+31:55.300 --> 31:57.840
+and is not a subtype of the expected one.
+
+31:57.940 --> 32:00.240
+So you are doing something not coherent.
+
+32:00.340 --> 32:02.800
+This kind of interprocedural logic.
+
+32:02.900 --> 32:05.000
+And I think the compiler should also take advantage
+
+32:05.100 --> 32:06.640
+(under certain circumstances)
+
+32:06.740 --> 32:08.760
+of this interprocedural analysis
+
+32:08.860 --> 32:12.520
+in order to optimize even more, when possible.
+
+32:12.620 --> 32:13.720
+Also I think we should
+
+32:13.820 --> 32:15.480
+work on our [?] to improve the code generation
+
+32:15.580 --> 32:17.100
+depending on the prediction
+
+32:17.200 --> 32:18.160
+that the compiler is doing.
+
+32:18.260 --> 32:20.120
+We already take advantage of those predictions,
+
+32:20.220 --> 32:22.300
+but I think we could do better.
+
+32:22.400 --> 32:25.120
+A quick look at some performance results.
+
+32:25.220 --> 32:28.720
+These are from the elisp-benchmarks package
+
+32:28.820 --> 32:30.760
+within GNU ELPA.
+
+32:30.860 --> 32:32.520
+This is the performance uplift,
+
+32:32.620 --> 32:38.480
+and we can identify about 4 "classes" of results.
+
+32:38.580 --> 32:41.440
+The first one there is no performance uplift,
+
+32:41.540 --> 32:42.880
+because there is not much we can do,
+
+32:42.980 --> 32:44.720
+and the time is probably not spent
+
+32:44.820 --> 32:46.280
+within the execution engine.
+
+32:46.380 --> 32:49.000
+And the ones around 3x are the ones
+
+32:49.100 --> 32:50.680
+Where probably we are not triggering
+
+32:50.780 --> 32:52.640
+manually specific optimizations,
+
+32:52.740 --> 32:53.600
+but just the fact
+
+32:53.700 --> 32:57.100
+that we are converting into native code
+
+32:57.200 --> 33:00.500
+is giving us this performance uplift.
+
+33:00.600 --> 33:03.280
+Then there is a bunch of other benchmarks
+
+33:03.380 --> 33:05.680
+where the Lisp optimizations are triggering,
+
+33:05.780 --> 33:09.620
+and the uplift is way bigger,
+
+33:09.720 --> 33:11.900
+and then we have 3 benchmarks that at the time
+
+33:12.000 --> 33:13.420
+are completely optimized out.
+
+33:13.520 --> 33:15.580
+That means the compiler became "so smart"
+
+33:15.680 --> 33:18.160
+that it was able to compute the result
+
+33:18.260 --> 33:20.160
+in the compile time and just put the result
+
+33:20.260 --> 33:21.400
+in the generated binary.
+
+33:21.500 --> 33:23.880
+Let's discuss a little bit the compilation model.
+
+33:23.980 --> 33:26.080
+This is an Hybrid one;
+
+33:26.180 --> 33:29.420
+it's both JIT-like and Ahead-of-Time-like.
+
+33:29.520 --> 33:33.400
+Emacs is composed of what we call an Emacs image,
+
+33:33.500 --> 33:36.180
+essentially the Emacs binary that we start.
+
+33:36.280 --> 33:37.720
+It's including all the C code,
+
+33:37.820 --> 33:41.760
+plus all the Lisp code that we preload.
+
+33:41.860 --> 33:46.480
+Then we have the rest of the Emacs Lisp codebase
+
+33:46.580 --> 33:49.440
+that can be loaded just if it's required.
+
+33:49.540 --> 33:52.760
+Same for the external packages, if we have any.
+
+33:52.860 --> 33:55.120
+If we build an Emacs Lisp
+
+33:55.220 --> 33:57.940
+with native compilation enabled, by default,
+
+33:58.040 --> 34:01.200
+only the Emacs image will be native compiled.
+
+34:01.300 --> 34:03.920
+All the other code will be compiled
+
+34:04.020 --> 34:06.720
+on the fly when it's loaded and executed
+
+34:06.820 --> 34:08.800
+the first time, if it's necessary.
+
+34:08.900 --> 34:10.880
+Same for the packages, in a transparent way
+
+34:10.980 --> 34:12.640
+and asynchronous way.
+
+34:12.740 --> 34:13.480
+Also worth noting
+
+34:13.580 --> 34:15.400
+that the result of this compilation
+
+34:15.500 --> 34:17.240
+will be stored into a cache directory
+
+34:17.340 --> 34:19.900
+within the home directory of the user.
+
+34:20.000 --> 34:23.600
+So it will be reused in the following sessions
+
+34:23.700 --> 34:25.440
+if the same file is loaded,
+
+34:25.540 --> 34:27.520
+without having to recompile multiple times
+
+34:27.620 --> 34:29.320
+the same file in different sessions.
+
+34:29.420 --> 34:31.520
+It works a little bit like this:
+
+34:31.620 --> 34:33.800
+When we load the byte-code for the first time,
+
+34:33.900 --> 34:35.900
+we spawn a native compilation process.
+
+34:36.000 --> 34:39.320
+Meanwhile we keep using the byte-code available.
+
+34:39.420 --> 34:41.180
+When the native compilation is finished,
+
+34:41.280 --> 34:43.960
+we hot-swap the definition of the functions
+
+34:44.060 --> 34:46.040
+that are contained in the file
+
+34:46.140 --> 34:47.960
+and start using the native code transparently.
+
+34:48.060 --> 34:49.880
+We do this asynchronously,
+
+34:49.980 --> 34:53.140
+and for more compilation units at the same time,
+
+34:53.240 --> 34:56.280
+so it looks a little bit like this.
+
+34:56.380 --> 34:58.560
+Let's try a quick demo of all of this machinery.
+
+34:58.660 --> 35:00.880
+I've started a fresh Emacs
+
+35:00.980 --> 35:03.280
+with native compilation support,
+
+35:03.380 --> 35:05.060
+and at this moment nothing is going on.
+
+35:05.160 --> 35:07.440
+We will test the machinery with Tetris,
+
+35:07.540 --> 35:10.460
+because I can't imagine anything better
+
+35:10.560 --> 35:12.840
+to test this.
+
+35:12.940 --> 35:15.080
+What I do expect is that when I launch Tetris
+
+35:15.180 --> 35:17.920
+it will be loaded, it will immediately
+
+35:18.020 --> 35:20.460
+start execution of the byte-compiled version,
+
+35:20.560 --> 35:23.000
+so we won't see any delay in the user experience,
+
+35:23.100 --> 35:25.160
+and in the meanwhile, a parallel process
+
+35:25.260 --> 35:28.160
+will start to native-compile Tetris itself.
+
+35:28.260 --> 35:30.200
+When the native compilation will be finished,
+
+35:30.300 --> 35:33.240
+the functions of all Tetris will be hot-swapped.
+
+35:33.340 --> 35:36.280
+So we will not see any interruption.
+
+35:36.380 --> 35:39.680
+So Tetris started, and it's running,
+
+35:39.780 --> 35:41.600
+we have seen no delay, and in the meanwhile,
+
+35:41.700 --> 35:43.520
+the native compilation probably already finished,
+
+35:43.620 --> 35:44.960
+we can have a look.
+
+35:45.060 --> 35:47.160
+In this I see the native compilation log buffer.
+
+35:47.260 --> 35:49.720
+So we see that Tetris has been native compiled,
+
+35:49.820 --> 35:51.760
+and all of its dependencies.
+
+35:51.860 --> 35:53.840
+Now Tetris is still running,
+
+35:53.940 --> 36:00.480
+but I can do "C-h f tetris"
+
+36:00.580 --> 36:02.540
+and we can see that 'tetris'
+
+36:02.640 --> 36:04.880
+is an interactive native compiled
+
+36:04.980 --> 36:07.940
+Lisp function, so it has been native-compiled.
+
+36:08.040 --> 36:13.500
+I can even disassemble if I want.
+
+36:13.600 --> 36:14.880
+OK, so very cool.
+
+36:14.980 --> 36:18.020
+I guess we can say this mechanism is working.
+
+36:18.120 --> 36:20.660
+Also worth noting that if I go back
+
+36:20.760 --> 36:24.120
+to the *Async-native-compile-log* buffer,
+
+36:24.220 --> 36:27.960
+we see we have compiled another bunch of files.
+
+36:28.060 --> 36:31.600
+I think these are because of my 'C-h f',
+
+36:31.700 --> 36:33.800
+this help function command and disassemble,
+
+36:33.900 --> 36:34.920
+and so on.
+
+36:35.020 --> 36:37.720
+The first time you run Emacs, you will have,
+
+36:37.820 --> 36:41.280
+from time to time, these processes spawned.
+
+36:41.380 --> 36:43.100
+Emacs is "compiling itself",
+
+36:43.200 --> 36:45.520
+and it's replacing the byte-code definition
+
+36:45.620 --> 36:47.640
+with the native one. But after a few sessions,
+
+36:47.740 --> 36:49.760
+you will not see this anymore,
+
+36:49.860 --> 36:51.360
+because the output of this compilation,
+
+36:51.460 --> 36:54.900
+as I mentioned, are stored in the user directory.
+
+36:55.000 --> 36:57.560
+To conclude: Emacs with native compilation support
+
+36:57.660 --> 36:59.080
+is coming up in Emacs 28,
+
+36:59.180 --> 37:01.040
+that is gonna be the next major stable release
+
+37:01.140 --> 37:02.080
+that will be released.
+
+37:02.180 --> 37:04.840
+So we ought to celebrate with a big party,
+
+37:04.940 --> 37:07.320
+I believe. But before going to the party,
+
+37:07.420 --> 37:09.080
+I'd like to list a few points
+
+37:09.180 --> 37:11.340
+that I think have been success factors
+
+37:11.440 --> 37:13.420
+in upstreaming this work.
+
+37:13.520 --> 37:15.420
+It has been extremely important
+
+37:15.520 --> 37:18.140
+to get in touch with upstream as soon as possible,
+
+37:18.240 --> 37:20.680
+as soon as I had a proof of concept.
+
+37:20.780 --> 37:22.600
+It's been extremely important
+
+37:22.700 --> 37:24.660
+to involve the community as much as possible,
+
+37:24.760 --> 37:28.480
+and this included keeping a development blog,
+
+37:28.580 --> 37:31.600
+and posts about that on emacs-devel,
+
+37:31.700 --> 37:33.720
+and also producing material,
+
+37:33.820 --> 37:36.020
+participating in conferences,
+
+37:36.120 --> 37:38.320
+and giving presentations like the one I'm doing,
+
+37:38.420 --> 37:40.680
+to explain what I was doing and how it works.
+
+37:40.780 --> 37:43.040
+It has been extremely important, also,
+
+37:43.140 --> 37:45.860
+to be able to rely on the upstream infrastructure.
+
+37:45.960 --> 37:47.540
+So, to develop the software
+
+37:47.640 --> 37:49.080
+as a feature branch in the official git,
+
+37:49.180 --> 37:49.960
+but even more, I would say,
+
+37:50.060 --> 37:51.660
+to use the official bug tracker
+
+37:51.760 --> 37:52.880
+for solving bugs of this branch.
+
+37:52.980 --> 37:54.680
+This gave the opportunity
+
+37:54.780 --> 37:58.160
+to stay really in close touch with maintainers,
+
+37:58.260 --> 37:59.920
+and senior developers of Emacs.
+
+38:00.020 --> 38:02.980
+That helped me a lot. And at the same time
+
+38:03.080 --> 38:04.820
+they were informed about what I was doing
+
+38:04.920 --> 38:07.360
+and what was the status of this feature branch.
+
+38:07.460 --> 38:08.800
+Extremely important.
+
+38:08.900 --> 38:11.160
+And also I think it played a major role
+
+38:11.260 --> 38:14.120
+to try to design this enormous patch
+
+38:14.220 --> 38:18.120
+in a way that the impact on the current codebase
+
+38:18.220 --> 38:21.120
+was minimized (at least as much as possible).
+
+38:21.220 --> 38:23.660
+And also minimizing
+
+38:23.760 --> 38:26.240
+the impact on the user operation of the software,
+
+38:26.340 --> 38:28.040
+in this case Emacs.
+
+38:28.140 --> 38:29.640
+So yes, mandatory Special Thanks:
+
+38:29.740 --> 38:33.360
+Emacs developers, and especially maintainers
+
+38:33.460 --> 38:36.680
+and senior developers like Stefan Monnier,
+
+38:36.780 --> 38:40.440
+that helped me a lot across this long journey.
+
+38:40.540 --> 38:42.800
+And, well, all the community
+
+38:42.900 --> 38:45.160
+that really got so excited about this project
+
+38:45.260 --> 38:46.240
+and gave me the energy
+
+38:46.340 --> 38:49.120
+to go through all of this time and development
+
+38:49.220 --> 38:51.980
+and bugs and solving, etc. etc.
+
+38:52.080 --> 38:54.920
+So yes, it was a really exciting time,
+
+38:55.020 --> 38:58.000
+and I think we have to look forward
+
+38:58.100 --> 39:01.400
+and start thinking about how to improve all this
+
+39:01.500 --> 39:02.920
+for the following years.
+
+39:03.020 --> 39:04.300
+And that's it.
+
+39:04.400 --> 39:06.040
+I think I should be online for questions.
+
+39:06.140 --> 39:07.480
+Thank you very much.
+
+39:07.580 --> 39:07.680
+[captions by John Cummings]
diff --git a/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--chapters.vtt b/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--chapters.vtt
new file mode 100644
index 00000000..7afd1e04
--- /dev/null
+++ b/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--chapters.vtt
@@ -0,0 +1,34 @@
+WEBVTT
+
+00:00:00.003 --> 00:00:11.023
+Introduction
+
+00:00:11.024 --> 00:00:24.987
+Upcoming Emacs 28 release
+
+00:00:24.988 --> 00:00:57.125
+Org mode 9.5
+
+00:00:57.126 --> 00:01:18.107
+Magit major release
+
+00:01:18.108 --> 00:01:51.283
+Completion
+
+00:01:51.284 --> 00:02:12.064
+Embark
+
+00:02:12.065 --> 00:02:44.655
+tree-sitter
+
+00:02:44.656 --> 00:03:03.656
+Collaborative editing
+
+00:03:03.657 --> 00:03:41.737
+Graphical experiments
+
+00:03:41.738 --> 00:04:00.070
+Community
+
+00:04:00.071 --> 00:04:01.071
+libera.chat
diff --git a/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main--chapters.vtt b/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main--chapters.vtt
new file mode 100644
index 00000000..7afd1e04
--- /dev/null
+++ b/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main--chapters.vtt
@@ -0,0 +1,34 @@
+WEBVTT
+
+00:00:00.003 --> 00:00:11.023
+Introduction
+
+00:00:11.024 --> 00:00:24.987
+Upcoming Emacs 28 release
+
+00:00:24.988 --> 00:00:57.125
+Org mode 9.5
+
+00:00:57.126 --> 00:01:18.107
+Magit major release
+
+00:01:18.108 --> 00:01:51.283
+Completion
+
+00:01:51.284 --> 00:02:12.064
+Embark
+
+00:02:12.065 --> 00:02:44.655
+tree-sitter
+
+00:02:44.656 --> 00:03:03.656
+Collaborative editing
+
+00:03:03.657 --> 00:03:41.737
+Graphical experiments
+
+00:03:41.738 --> 00:04:00.070
+Community
+
+00:04:00.071 --> 00:04:01.071
+libera.chat
diff --git a/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt b/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt
new file mode 100644
index 00000000..32533455
--- /dev/null
+++ b/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt
@@ -0,0 +1,469 @@
+WEBVTT
+
+00:00.003 --> 00:01.519
+I'm Sacha Chua, and here are
+
+00:01.519 --> 00:03.754
+ten Emacs News highlights for 2021.
+
+00:03.754 --> 00:05.305
+If you want to follow the links,
+
+00:05.305 --> 00:06.846
+check out the wiki page at
+
+00:06.846 --> 00:11.024
+https://emacsconf.org/2021/talks/news/ .
+
+00:11.024 --> 00:13.442
+1. The Emacs developers are currently
+
+00:13.442 --> 00:15.346
+working on Emacs 28.1,
+
+00:15.346 --> 00:17.119
+which will be the next major release.
+
+00:17.119 --> 00:19.703
+John Wiegley will share more Emacs 28 details
+
+00:19.703 --> 00:21.483
+in his update, so check out his talk.
+
+00:21.483 --> 00:23.353
+Andrea Corallo's giving a talk
+
+00:23.353 --> 00:24.988
+on native compilation too.
+
+00:24.988 --> 00:25.776
+2.
+
+00:25.776 --> 00:28.302
+Org Mode is now at version 9.5.
+
+00:28.302 --> 00:29.656
+New features include
+
+00:29.656 --> 00:31.505
+a library for managing citations,
+
+00:31.505 --> 00:32.984
+asynchronous session support
+
+00:32.984 --> 00:33.945
+for code blocks,
+
+00:33.945 --> 00:34.912
+and better control
+
+00:34.912 --> 00:36.165
+of your agenda's appearance.
+
+00:36.165 --> 00:37.942
+If you've been getting your Org packages
+
+00:37.942 --> 00:39.076
+from Org ELPA,
+
+00:39.076 --> 00:40.698
+you can update your configuration
+
+00:40.698 --> 00:42.466
+to get Org from GNU ELPA
+
+00:42.466 --> 00:44.725
+and org-contrib from NonGNU ELPA.
+
+00:44.725 --> 00:46.848
+The new release of the Org Roam package
+
+00:46.848 --> 00:48.755
+should be a faster and more consistent way
+
+00:48.755 --> 00:50.630
+to use Org to manage a knowledgebase,
+
+00:50.630 --> 00:52.993
+and org-roam-ui looks pretty snazzy.
+
+00:52.993 --> 00:55.101
+The best way to keep up with Org changes
+
+00:55.101 --> 00:57.126
+is to check out the blog This Month in Org.
+
+00:57.126 --> 00:58.009
+3.
+
+00:58.009 --> 01:00.039
+New Magit major release!
+
+01:00.039 --> 01:02.351
+Jonas Bernoulli has split some functionality
+
+01:02.351 --> 01:04.127
+into other packages so that
+
+01:04.127 --> 01:06.289
+Emacs Lisp developers can use them, such as
+
+01:06.289 --> 01:08.619
+magit-section, transient, and forge.
+
+01:08.619 --> 01:11.072
+Here's an example of using magit-section
+
+01:11.072 --> 01:12.343
+to manage groups of buffers.
+
+01:12.343 --> 01:13.903
+You can learn more about Transient
+
+01:13.903 --> 01:15.412
+in the talk on self-describing
+
+01:15.412 --> 01:18.108
+smart domain-specific languages or DSLs.
+
+01:18.108 --> 01:18.890
+4.
+
+01:18.890 --> 01:21.115
+In terms of smaller packages, there's been
+
+01:21.115 --> 01:23.195
+a lot of activity around completion.
+
+01:23.195 --> 01:24.862
+Karthik has a great diagram,
+
+01:24.862 --> 01:27.029
+and Prot explains how things work together.
+
+01:27.029 --> 01:28.984
+I think the idea is that instead of having
+
+01:28.984 --> 01:30.636
+one large completion system
+
+01:30.636 --> 01:32.914
+like Helm or Icicles, you can choose
+
+01:32.914 --> 01:34.680
+a few different, smaller packages
+
+01:34.680 --> 01:36.439
+and configure them to work together.
+
+01:36.439 --> 01:37.699
+If you're curious about this,
+
+01:37.699 --> 01:39.729
+you might start with either selectrum
+
+01:39.729 --> 01:42.441
+or vertico, which are both completion interfaces,
+
+01:42.441 --> 01:45.013
+add marginalia for more information,
+
+01:45.013 --> 01:46.792
+and try consult for many useful
+
+01:46.792 --> 01:47.803
+completing commands.
+
+01:47.803 --> 01:48.849
+There are so many options,
+
+01:48.849 --> 01:50.437
+so it might be useful to check out
+
+01:50.437 --> 01:51.284
+some discussions.
+
+01:51.284 --> 01:52.047
+5.
+
+01:52.047 --> 01:54.101
+Embark is usually mentioned as part of
+
+01:54.101 --> 01:55.177
+that group of packages,
+
+01:55.177 --> 01:56.766
+but it's well worth looking into
+
+01:56.766 --> 01:58.465
+even if you use a different system.
+
+01:58.465 --> 02:00.987
+Embark lets you have context-sensitive shortcuts
+
+02:00.987 --> 02:03.366
+that work on things in buffers, minibuffers,
+
+02:03.366 --> 02:05.338
+and even collections of things.
+
+02:05.338 --> 02:06.307
+You can also use it
+
+02:06.307 --> 02:07.482
+when you start doing one command
+
+02:07.482 --> 02:09.582
+and then decide to do a different one instead.
+
+02:09.582 --> 02:10.841
+For more ideas, check out
+
+02:10.841 --> 00:02:12.064
+Fifteen Ways to Use Embark.
+
+02:12.065 --> 02:12.855
+6.
+
+02:12.855 --> 02:14.733
+Now that there are Emacs Lisp bindings
+
+02:14.733 --> 02:16.709
+for tree-sitter, we can work more easily
+
+02:16.709 --> 02:18.369
+with the structure of code instead of
+
+02:18.369 --> 02:20.031
+just using regular expressions.
+
+02:20.031 --> 02:20.779
+Check out the talk
+
+02:20.779 --> 02:22.374
+on Tree-edit and structural editing
+
+02:22.374 --> 02:23.163
+to learn more.
+
+02:23.163 --> 02:24.626
+You can use tree-sitter for
+
+02:24.626 --> 02:26.521
+intelligent snippets that get information
+
+02:26.521 --> 02:27.739
+from the code around them,
+
+02:27.739 --> 02:29.634
+editing Lisp expressions,
+
+02:29.634 --> 02:31.971
+and navigating text objects in Evil mode.
+
+02:31.971 --> 02:34.240
+(That's when Emacs is pretending to be Vi.)
+
+02:34.240 --> 02:37.133
+Dynamic modules help us add more to Emacs
+
+02:37.133 --> 02:38.958
+than Emacs Lisp easily offers,
+
+02:38.958 --> 02:41.374
+such as structural editing in OCaml
+
+02:41.374 --> 02:43.299
+and using Rust to figure out parentheses
+
+02:43.299 --> 00:02:44.655
+and indentation for Lisp.
+
+02:44.656 --> 02:45.559
+7.
+
+02:45.559 --> 02:47.614
+Collaborative editing is now much easier
+
+02:47.614 --> 02:50.210
+since the CRDT package is in GNU ELPA.
+
+02:50.210 --> 02:51.952
+It allows multiple people to edit
+
+02:51.952 --> 02:53.605
+the same file over the network,
+
+02:53.605 --> 02:55.345
+using their own Emacs.
+
+02:55.345 --> 02:57.170
+This means you can keep your own config
+
+02:57.170 --> 02:58.994
+and keybindings, yay!
+
+02:58.994 --> 03:00.720
+Watch the Emacs Research Group talk
+
+03:00.720 --> 03:02.505
+for an example of how several people
+
+03:02.505 --> 00:03:03.656
+used it to work together.
+
+03:03.657 --> 03:04.158
+8.
+
+03:04.158 --> 03:05.721
+In case you're still under the impression
+
+03:05.721 --> 03:07.369
+that Emacs is just a text editor,
+
+03:07.369 --> 03:08.880
+some folks have been working on
+
+03:08.880 --> 03:10.574
+pretty neat graphical experiments.
+
+03:10.574 --> 03:12.752
+These OpenGL bindings for Emacs Lisp
+
+03:12.752 --> 03:14.515
+use an embedded xwidget,
+
+03:14.515 --> 03:16.927
+while other prototypes use the SVG support
+
+03:16.927 --> 03:18.020
+that's built into Emacs
+
+03:18.020 --> 03:19.367
+for Gantt charts,
+
+03:19.367 --> 03:20.139
+scribbles,
+
+03:20.139 --> 03:21.640
+and even diagrams.
+
+03:21.640 --> 03:23.110
+The color-picker from that one
+
+03:23.110 --> 03:25.161
+looks particularly useful for CSS.
+
+03:25.161 --> 03:27.363
+If you want to play around with adding SVGs
+
+03:27.363 --> 03:29.042
+to your files and interfaces,
+
+03:29.042 --> 03:30.082
+svg-icon
+
+03:30.082 --> 03:30.999
+and svg-lib
+
+03:30.999 --> 03:33.053
+might be good places to start. (Reddit)
+
+03:33.053 --> 03:34.527
+Of course, there's always a place
+
+03:34.527 --> 03:35.529
+for ASCII art,
+
+03:35.529 --> 03:37.253
+especially with the new boxy package
+
+03:37.253 --> 03:38.753
+that you can use for org files,
+
+03:38.753 --> 03:40.073
+imenu navigation,
+
+03:40.073 --> 00:03:41.737
+and even things in real life.
+
+03:41.738 --> 03:42.528
+9.
+
+03:42.528 --> 03:44.731
+There have been a lot of great posts, videos,
+
+03:44.731 --> 03:46.632
+and livestreams about Emacs this year.
+
+03:46.632 --> 03:47.894
+In addition to the ones
+
+03:47.894 --> 03:49.293
+from System Crafters,
+
+03:49.293 --> 03:50.473
+Emacs Elements,
+
+03:50.473 --> 03:51.984
+and Protesilaos,
+
+03:51.984 --> 03:52.794
+John Kitchin
+
+03:52.794 --> 03:53.540
+and Mike Zamansky
+
+03:53.540 --> 03:54.575
+are back, hooray!
+
+03:54.575 --> 03:56.946
+And Marcin Borkowski has just finished
+
+03:56.946 --> 03:58.836
+writing an intermediate textbook
+
+03:58.836 --> 00:04:00.070
+Emacs Lisp, too!
+
+04:00.071 --> 04:00.742
+10.
+
+04:00.742 --> 04:02.249
+Lastly, if you want to chat
+
+04:02.249 --> 04:03.403
+with other Emacs folks
+
+04:03.403 --> 04:05.604
+and get help on Emacs, Org Mode,
+
+04:05.604 --> 04:06.531
+or other topics,
+
+04:06.531 --> 04:07.756
+the #emacs and #org-mode
+
+04:07.756 --> 04:10.181
+Internet Relay Chat or IRC channels
+
+04:10.181 --> 04:12.067
+are now on the libera.chat network
+
+04:12.067 --> 04:13.333
+instead of Freenode.
+
+04:13.333 --> 04:15.208
+If you'd like to add something I've missed,
+
+04:15.208 --> 04:16.903
+please add them to the wiki page,
+
+04:16.903 --> 04:19.354
+or e-mail me at sacha@sachachua.com .
+
+04:19.354 --> 04:20.874
+That's all for this quick review.
+
+04:20.874 --> 04:23.424
+Enjoy the rest of EmacsConf 2021!
diff --git a/2021/captions/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.vtt b/2021/captions/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.vtt
new file mode 100644
index 00000000..e8f36c16
--- /dev/null
+++ b/2021/captions/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.vtt
@@ -0,0 +1,535 @@
+WEBVTT
+
+00:00.000 --> 00:02.283
+Hello! My name is Philip,
+
+00:02.283 --> 00:04.363
+and I'll be giving a brief update on
+
+00:04.363 --> 00:05.963
+NonGNU ELPA.
+
+00:05.963 --> 00:07.403
+Before we begin,
+
+00:07.403 --> 00:08.283
+let's first make sure
+
+00:08.283 --> 00:09.563
+everyone's on the same page.
+
+00:09.563 --> 00:11.203
+What is NonGNU ELPA?
+
+00:11.203 --> 00:14.323
+Put simply, NonGNU ELPA
+
+00:14.323 --> 00:16.723
+is a new Emacs Lisp package archive.
+
+00:16.723 --> 00:19.323
+similar to its sister archive, GNU ELPA.
+
+00:19.323 --> 00:21.883
+The main difference is that
+
+00:21.883 --> 00:24.723
+GNU ELPA regards each package in the archive
+
+00:24.723 --> 00:26.643
+to be part of Emacs itself.
+
+00:26.643 --> 00:30.083
+This means each significant contributor
+
+00:30.083 --> 00:32.483
+has to have signed their copyrights
+
+00:32.483 --> 00:34.803
+to the Free Software Foundation.
+
+00:34.803 --> 00:37.203
+NonGNU ELPA is made for packages
+
+00:37.203 --> 00:39.363
+that cannot ensure this condition.
+
+00:39.363 --> 00:42.483
+The immediate consequence of all of this
+
+00:42.483 --> 00:44.243
+is that more packages can be installed
+
+00:44.243 --> 00:44.723
+out of the box.
+
+00:44.723 --> 00:46.803
+All you need to install,
+
+00:46.803 --> 00:49.443
+for example, magit, evil-mode, slime,
+
+00:49.443 --> 00:52.723
+is a simple M-x package-install.
+
+00:52.723 --> 00:56.083
+The more subtle consequence
+
+00:56.083 --> 00:58.083
+is that ELPA distributes
+
+00:58.083 --> 00:59.763
+stable packages by default.
+
+00:59.763 --> 01:01.563
+This differs from, for example,
+
+01:01.563 --> 01:04.163
+the community-maintained package archive MELPA,
+
+01:04.163 --> 01:08.483
+where each change in the respective package repository
+
+01:08.483 --> 01:12.803
+triggers a new package to be rebuilt.
+
+01:12.803 --> 01:15.123
+Of course, "stable" here has to be taken
+
+01:15.123 --> 01:16.843
+with a grain of salt because,
+
+01:16.843 --> 01:17.963
+on the one hand,
+
+01:17.963 --> 01:19.923
+a package maintainer can be very careful
+
+01:19.923 --> 01:22.403
+to avoid buggy code in their default branch,
+
+01:22.403 --> 01:23.923
+and on the other hand,
+
+01:23.923 --> 01:26.523
+a package maintainer can be too eager
+
+01:26.523 --> 01:28.083
+to tag a new release
+
+01:28.083 --> 01:29.483
+without properly checking
+
+01:29.483 --> 01:31.403
+that the code works as intended.
+
+01:31.403 --> 01:33.483
+My personal hope is that
+
+01:33.483 --> 01:35.603
+more people using NonGNU ELPA
+
+01:35.603 --> 01:37.683
+be incentive for increase
+
+01:37.683 --> 01:39.603
+for package development to shift away
+
+01:39.603 --> 01:41.083
+from the currently predominant
+
+01:41.083 --> 01:42.323
+rolling release model,
+
+01:42.323 --> 01:44.243
+improving the overall stability
+
+01:44.243 --> 01:45.523
+of Emacs configurations.
+
+01:45.523 --> 01:48.843
+Another side effect of the initiative
+
+01:48.843 --> 01:51.003
+is a chance to clean up
+
+01:51.003 --> 01:52.803
+the Emacs package space.
+
+01:52.803 --> 01:54.723
+Over the last few years,
+
+01:54.723 --> 01:56.363
+a lot of packages have been abandoned,
+
+01:56.363 --> 01:59.043
+have been broken, duplicated,
+
+01:59.043 --> 02:00.443
+or even in some cases,
+
+02:00.443 --> 02:03.483
+replaced by functionality in Emacs itself.
+
+02:03.483 --> 02:07.403
+When reviewing packages for NonGNU ELPA,
+
+02:07.403 --> 02:10.043
+the opportunity to avoid these problems
+
+02:10.043 --> 02:12.523
+will hopefully also improve the general quality
+
+02:12.523 --> 02:13.923
+of Emacs packages.
+
+02:13.923 --> 02:16.883
+So, what is this update about?
+
+02:16.883 --> 02:20.443
+I'm taking Richard Stallman's announcement
+
+02:20.443 --> 02:22.363
+at EmacsConf 2020
+
+02:22.363 --> 02:23.563
+as my reference point.
+
+02:23.563 --> 02:26.283
+There, the idea, the history,
+
+02:26.283 --> 02:28.283
+and the motivation was explained,
+
+02:28.283 --> 02:30.443
+and the call for contributions was made.
+
+02:30.443 --> 02:32.643
+I won't be going into these aspects
+
+02:32.643 --> 02:33.483
+again this year.
+
+02:33.483 --> 02:37.163
+As this implies, there was nothing concrete
+
+02:37.163 --> 02:38.683
+at that point.
+
+02:38.683 --> 02:41.883
+The first practical steps towards NonGNU ELPA
+
+02:41.883 --> 02:43.683
+were taken up by Stefan Monnier.
+
+02:43.683 --> 02:47.963
+This included updating GNU ELPA's build system
+
+02:47.963 --> 02:49.523
+to support the requirements
+
+02:49.523 --> 02:51.003
+of NonGNU ELPA as well.
+
+02:51.003 --> 02:53.283
+And so eventually,
+
+02:53.283 --> 02:55.323
+the idea became a Git repository,
+
+02:55.323 --> 02:57.203
+nongnu.git on savannah,
+
+02:57.203 --> 02:59.203
+then a website,
+
+02:59.203 --> 03:02.523
+elpa.nongnu.org,
+
+03:02.523 --> 03:04.643
+and then around late December of last year,
+
+03:04.643 --> 03:06.923
+NonGNU ELPA was also added
+
+03:06.923 --> 03:08.643
+to the package-archives list.
+
+03:08.643 --> 03:11.963
+Sadly, progress stalled from this point on,
+
+03:11.963 --> 03:14.123
+with the new archive consisting of only
+
+03:14.123 --> 03:16.203
+five or six packages.
+
+03:16.203 --> 03:18.083
+It took until August
+
+03:18.083 --> 03:20.123
+for more packages to be added,
+
+03:20.123 --> 03:22.003
+some by their respective authors,
+
+03:22.003 --> 03:23.963
+such as Magit and Projectile,
+
+03:23.963 --> 03:26.163
+but most by contributors such as myself.
+
+03:26.163 --> 03:27.923
+As of recording,
+
+03:27.923 --> 03:30.363
+the archive has around 70 packages,
+
+03:30.363 --> 03:32.803
+with more pending to be out soon.
+
+03:32.803 --> 03:34.803
+These include popular applications
+
+03:34.803 --> 03:36.483
+such as the previously-mentioned Magit,
+
+03:36.483 --> 03:38.083
+SLIME, or wgrep,
+
+03:38.083 --> 03:41.523
+major modes like php-mode, rust-mode,
+
+03:41.523 --> 03:43.723
+go-mode, clojure-mode, lua-mode,
+
+03:43.723 --> 03:45.923
+markdown-mode... You get my point.
+
+03:45.923 --> 03:47.883
+And a number of visual themes,
+
+03:47.883 --> 03:49.443
+among other things.
+
+03:49.443 --> 03:52.643
+If you are interested in using NonGNU ELPA,
+
+03:52.643 --> 03:53.603
+but you are still bound
+
+03:53.603 --> 03:55.203
+to an older version of Emacs,
+
+03:55.203 --> 03:56.683
+all you have to do is
+
+03:56.683 --> 03:57.483
+to add the snippet
+
+03:57.483 --> 03:59.003
+from the NonGNU ELPA home page
+
+03:59.003 --> 04:01.323
+updating the package-archives variable.
+
+04:01.323 --> 04:03.923
+For Emacs 28 and newer,
+
+04:03.923 --> 04:05.123
+one might have to watch out
+
+04:05.123 --> 04:07.563
+that you're not setting package-archives directly,
+
+04:07.563 --> 04:09.363
+and if you are doing so,
+
+04:09.363 --> 04:10.723
+to update the value.
+
+04:10.723 --> 04:14.003
+Emacs 28 only updates the default value
+
+04:14.003 --> 04:17.043
+and will not manipulate the user's configuration.
+
+04:17.043 --> 04:20.363
+Finally, a short note
+
+04:20.363 --> 04:22.163
+for package developers.
+
+04:22.163 --> 04:24.243
+Most packages up until now
+
+04:24.243 --> 04:26.243
+haven't been added by their maintainers.
+
+04:26.243 --> 04:28.083
+For the most part,
+
+04:28.083 --> 04:31.083
+I have been collecting and reviewing the packages
+
+04:31.083 --> 04:32.683
+which have been added,
+
+04:32.683 --> 04:33.923
+which takes time
+
+04:33.923 --> 04:36.043
+and is one of the main reasons
+
+04:36.043 --> 04:38.323
+why we're still at only 70 packages.
+
+04:38.323 --> 04:41.683
+This is of course not a permanent solution.
+
+04:41.683 --> 04:42.243
+The intention here is
+
+04:42.243 --> 04:44.803
+to bootstrap, so to say,
+
+04:44.803 --> 04:46.243
+the interest in NonGNU ELPA
+
+04:46.243 --> 04:48.083
+by making it more interesting to you
+
+04:48.083 --> 04:50.563
+and thus more interesting to contribute to.
+
+04:50.563 --> 04:53.563
+If you are interested in adding a package
+
+04:53.563 --> 04:56.643
+that already exists, or a new package
+
+04:56.643 --> 04:59.443
+to NonGNU ELPA, all you need to do is
+
+04:59.443 --> 05:00.843
+send an e-mail to the
+
+05:00.843 --> 05:02.483
+Emacs development mailing list,
+
+05:02.483 --> 05:05.523
+emacs-devel@gnu.org.
+
+05:05.523 --> 05:08.123
+This is an open mailing list
+
+05:08.123 --> 05:10.563
+and requires no special registration.
+
+05:10.563 --> 05:12.283
+Your message should
+
+05:12.283 --> 05:14.643
+mention NonGNU ELPA in the subject
+
+05:14.643 --> 05:17.483
+and contain a link to a public Git repository
+
+05:17.483 --> 05:20.643
+in the body. Ideally, a brief explanation
+
+05:20.643 --> 05:21.803
+on what your package does
+
+05:21.803 --> 05:23.243
+would be much appreciated.
+
+05:23.243 --> 05:25.603
+The proposal will be reviewed
+
+05:25.603 --> 05:28.043
+by the readers of the mailing list,
+
+05:28.043 --> 05:29.443
+and after a bit of back-and-forth
+
+05:29.443 --> 05:31.123
+on possible issues and improvements,
+
+05:31.123 --> 05:32.723
+the package will hopefully be added
+
+05:32.723 --> 05:34.443
+to NonGNU ELPA itself.
+
+05:34.443 --> 05:38.523
+The simplest mistake a lot of packages make
+
+05:38.523 --> 05:40.043
+is to either not have
+
+05:40.043 --> 05:41.843
+or maintain a version attribute
+
+05:41.843 --> 05:42.803
+in the package header.
+
+05:42.803 --> 05:46.323
+This is done despite actually being necessary
+
+05:46.323 --> 05:48.163
+for a well-formed Emacs package
+
+05:48.163 --> 05:50.083
+according to the Elisp manual.
+
+05:50.083 --> 05:52.443
+ELPA relies on this tag
+
+05:52.443 --> 05:54.323
+to detect new package versions
+
+05:54.323 --> 05:55.843
+that will be built and distributed.
+
+05:55.843 --> 05:58.483
+If the version isn't updated,
+
+05:58.483 --> 06:00.323
+no new package will be released,
+
+06:00.323 --> 06:03.043
+and any changes won't be made public.
+
+06:03.043 --> 06:07.683
+So, that's that on NonGNU ELPA.
+
+06:07.683 --> 06:09.883
+To summarize, NonGNU ELPA is an
+
+06:09.883 --> 06:11.683
+Emacs Lisp Package Archive for Emacs,
+
+06:11.683 --> 06:13.363
+without a need for copyright assignments.
+
+06:13.363 --> 06:17.203
+It works, it exists, and it's been used already.
+
+06:17.203 --> 06:18.403
+I'm looking forward to
+
+06:18.403 --> 06:20.403
+more packages being added to the archive
+
+06:20.403 --> 06:22.803
+and improving the overall experience
+
+06:22.803 --> 06:24.283
+of Emacs out of the box.
+
+00:06:24.283 --> 00:06:27.163
+Thank you for your interest, and goodbye.
+
+00:06:27.163 --> 00:06:27.163
+[captioned by sachac]
diff --git a/2021/captions/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.vtt b/2021/captions/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.vtt
new file mode 100644
index 00000000..d595fc1b
--- /dev/null
+++ b/2021/captions/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.vtt
@@ -0,0 +1,532 @@
+WEBVTT
+
+00:00.000 --> 00:01.783
+Welcome to my talk "Emacs with Nyxt:
+
+00:01.783 --> 00:02.823
+extend your editor with
+
+00:02.823 --> 00:04.623
+the power of a Lisp browser".
+
+00:04.623 --> 00:06.583
+Who am I? I'm Andrea. I work as
+
+00:06.583 --> 00:08.303
+a Clojure software engineer somewhere
+
+00:08.303 --> 00:09.743
+in the middle of the UK.
+
+00:09.743 --> 00:11.743
+And I inherited my passion for Emacs
+
+00:11.743 --> 00:13.703
+from my Ph.D. supervisor, and from that
+
+00:13.703 --> 00:15.943
+moment on Emacs became a core tool
+
+00:15.943 --> 00:17.863
+of my daily routine.
+
+00:17.863 --> 00:20.863
+You can find more about me and my interests
+
+00:20.863 --> 00:23.983
+at ag91.github.io, that is my blog.
+
+00:23.983 --> 00:25.183
+Let's get into the talk.
+
+00:25.183 --> 00:28.183
+So, why Nyxt? Nyxt is an extensible
+
+00:28.183 --> 00:29.543
+Common Lisp browser.
+
+00:29.543 --> 00:31.903
+Fundamentally, it's Emacs for web browsing.
+
+00:31.903 --> 00:34.063
+And why do I say that? I say that
+
+00:34.063 --> 00:36.063
+because is a…, this is Nyxt.
+
+00:36.063 --> 00:40.223
+You can see that is organized with buffers,
+
+00:40.223 --> 00:44.063
+and you can see that I can invoke command,
+
+00:44.063 --> 00:47.183
+like, I was in Emacs with this.
+
+00:47.183 --> 00:48.983
+So, I'm using even the same keybindings,
+
+00:48.983 --> 00:52.783
+so, for that I used M-x.
+
+00:52.783 --> 00:55.983
+And some of the features of Nyxt
+
+00:55.983 --> 01:00.103
+are just amazing. For example, say that
+
+01:00.103 --> 01:03.823
+you want to mark some text, this is the way,
+
+01:03.823 --> 01:08.703
+so, I just pressed Control space (C-SPC),
+
+01:08.703 --> 01:10.423
+and now I will start the marker,
+
+01:10.423 --> 01:13.223
+and now I can copy the text, and when
+
+01:13.223 --> 01:15.663
+I'm done, I can finish to use visual mode.
+
+01:15.663 --> 01:18.023
+Or, for example, what about…,
+
+01:18.023 --> 01:21.183
+I want to navigate without using my mouse.
+
+01:21.183 --> 01:25.183
+I can do something like follow-hint,
+
+01:25.183 --> 01:28.023
+and this opens the possibility to press
+
+01:28.023 --> 01:29.903
+AC to jump on the Articles,
+
+01:29.903 --> 01:33.063
+and all of a sudden I'm on the page
+
+01:33.063 --> 01:36.023
+with the blog posts of the Atlas team.
+
+01:36.023 --> 01:39.383
+Or, for example, I can extend my browser
+
+01:39.383 --> 01:40.783
+from within the browser.
+
+01:40.783 --> 01:43.223
+So, you can see I can evaluate a command,
+
+01:43.223 --> 01:48.663
+a Common Lisp code,
+
+01:48.663 --> 01:50.903
+and it produces the result.
+
+01:50.903 --> 01:56.183
+And then, for example, I can also auto….
+
+01:56.183 --> 01:58.663
+This browser comes by default with an
+
+01:58.663 --> 02:01.143
+integration with your password manager,
+
+02:01.143 --> 02:04.223
+in my case it's pass, and I can copy
+
+02:04.223 --> 02:08.783
+a password. This is just as easy as is,
+
+02:08.783 --> 02:10.543
+it comes by default.
+
+02:10.543 --> 02:13.583
+Another incredibly useful feature
+
+02:13.583 --> 02:18.023
+that I didn't find in other browsers is
+
+02:18.023 --> 02:20.503
+searching between multiple buffers.
+
+02:20.503 --> 02:23.503
+So, this function search-buffers,
+
+02:23.503 --> 02:25.823
+this command lets me select
+
+02:25.823 --> 02:29.503
+some of my open buffers,
+
+02:29.503 --> 02:32.503
+and I can look for a string in there.
+
+02:32.503 --> 02:34.623
+And you would see that the hits are
+
+02:34.623 --> 02:37.423
+from the buffers that I have open,
+
+02:37.423 --> 02:42.583
+for example, Clojure or
+
+02:42.583 --> 02:46.103
+the YouTube video about Clojure.
+
+02:46.103 --> 02:49.623
+Let me get into something very interesting.
+
+02:49.623 --> 02:52.783
+How can I make Emacs speak to Nyxt.
+
+02:52.783 --> 02:55.103
+And for that, let me show you something
+
+02:55.103 --> 02:57.143
+in the literate programming approach.
+
+02:57.143 --> 03:00.183
+So, this Org mode source block is
+
+03:00.183 --> 03:04.423
+linked to this Nyxt REPL.
+
+03:04.423 --> 03:06.983
+I can define a new command,
+
+03:06.983 --> 03:09.343
+and when I go in Nyxt,
+
+03:09.343 --> 03:10.863
+I can find this new command,
+
+03:10.863 --> 03:12.503
+and I can invoke it, and you can see
+
+03:12.503 --> 03:16.943
+there is something in the minibuffer.
+
+03:16.943 --> 03:21.543
+I can use it from Nyxt, but I can do it here.
+
+03:21.543 --> 03:24.703
+I can also use it directly from the REPL.
+
+03:24.703 --> 03:27.743
+You can see that the same thing is logged
+
+03:27.743 --> 03:30.423
+in the REPL.
+
+03:30.423 --> 03:32.663
+And then with something that I would speak
+
+03:32.663 --> 03:36.423
+about in another talk in the conference
+
+03:36.423 --> 03:39.143
+— Moldable Emacs. I can also just
+
+03:39.143 --> 03:42.823
+evaluate JavaScript outside. Let's create
+
+03:42.823 --> 03:46.703
+a playground that allows me to write some
+
+03:46.703 --> 03:49.903
+JavaScript code. And if I evaluate this code,
+
+03:49.903 --> 03:52.023
+I get the title of the webpage
+
+03:52.023 --> 03:54.583
+that is currently open in Nyxt.
+
+03:54.583 --> 03:58.343
+The cool thing is that I can do it also
+
+03:58.343 --> 04:02.263
+directly in Lisp, this is Parenscript
+
+04:02.263 --> 04:05.223
+that evaluates to the same thing,
+
+04:05.223 --> 04:07.823
+(it) is just the same, just document.title,
+
+04:07.823 --> 04:10.743
+only that is in Common Lisp.
+
+04:10.743 --> 04:14.343
+You see that Emacs can speak to Nyxt,
+
+04:14.343 --> 04:16.103
+but also the reverse is true.
+
+04:16.103 --> 04:19.023
+Nyxt can speak to Emacs. So, for example,
+
+04:19.023 --> 04:21.943
+if I'm in Nyxt, and for example,
+
+04:21.943 --> 04:26.623
+let me go to my blog, if I press here,
+
+04:26.623 --> 04:30.863
+this is an email link, automatically in Emacs
+
+04:30.863 --> 04:33.943
+it will let me compone a message
+
+04:33.943 --> 04:35.943
+using my email manager.
+
+04:35.943 --> 04:39.823
+Or, say that always in my blog I want
+
+04:39.823 --> 04:43.543
+to write something here in the searchbar,
+
+04:43.543 --> 04:46.303
+I think that I don't want to write it in
+
+04:46.303 --> 04:50.623
+the browser but in my Emacs because
+
+04:50.623 --> 04:52.903
+I have some template for search.
+
+04:52.903 --> 04:55.503
+If I do this, all of a sudden
+
+04:55.503 --> 04:59.103
+the text is added.
+
+04:59.103 --> 05:03.423
+Or say I'm watching that Clojure video,
+
+05:03.423 --> 05:06.343
+and I get to this point, and then I say
+
+05:06.343 --> 05:09.703
+"Yuu! This is a very interesting thing,
+
+05:09.703 --> 05:12.783
+let me take a note". So, I take some note
+
+05:12.783 --> 05:16.903
+with some text, and if I go back in Emacs,
+
+05:16.903 --> 05:19.023
+tadam! I found the note,
+
+05:19.023 --> 05:21.903
+and I found it with the duration,
+
+05:21.903 --> 05:25.063
+so I can just jump to the same point.
+
+05:25.063 --> 05:28.743
+And what else?
+
+05:28.743 --> 05:31.903
+There is something even bigger
+
+05:31.903 --> 05:32.663
+that we can do,
+
+05:32.663 --> 05:34.063
+this is a bit more advanced,
+
+05:34.063 --> 05:35.823
+and this is something that I do
+
+05:35.823 --> 05:39.023
+again with my Moldable Emacs.
+
+05:39.023 --> 05:41.183
+Say that you want to do some
+
+05:41.183 --> 05:43.223
+data visualization.
+
+05:43.223 --> 05:44.863
+If we use Vega-Lite…, for example,
+
+05:44.863 --> 05:47.823
+we want to visualize a scatter plot.
+
+05:47.823 --> 05:49.623
+Let me take some example data
+
+05:49.623 --> 05:52.423
+that could be interesting also to you.
+
+05:52.423 --> 05:55.063
+So, say that I have this playground
+
+05:55.063 --> 05:57.263
+that lets me evaluate
+
+05:57.263 --> 06:01.703
+some query on my Org-roam database.
+
+06:01.703 --> 06:03.663
+What I'm doing here is I'm gonna
+
+06:03.663 --> 06:05.703
+go through my first 100 notes
+
+06:05.703 --> 06:09.823
+and collect their backlinks,
+
+06:09.823 --> 06:13.183
+so some information that I find interesting.
+
+06:13.183 --> 06:16.343
+If I convert this to JSON,
+
+06:16.343 --> 06:18.903
+now, all of a sudden this is something
+
+06:18.903 --> 06:22.623
+that I can put in that Vega-Lite template
+
+06:22.623 --> 06:26.183
+that I showed you a moment ago.
+
+06:26.183 --> 06:28.343
+So, I'm gonna find out that file,
+
+06:28.343 --> 06:30.463
+you see that I left a question mark,
+
+06:30.463 --> 06:31.703
+(this is) something that I still
+
+06:31.703 --> 06:33.783
+didn't automate completely.
+
+06:33.783 --> 06:37.983
+By saving this file and opening it with Nyxt,
+
+06:37.983 --> 06:41.183
+you can see that now I have a scatter plot.
+
+06:41.183 --> 06:43.943
+And these are my actual notes,
+
+06:43.943 --> 06:48.343
+so you can see that if I stay on it,
+
+06:48.343 --> 06:53.063
+these are actually my notes.
+
+06:53.063 --> 06:55.343
+When I'm in Emacs, what I can do is
+
+06:55.343 --> 06:58.303
+I click here, and now in the background
+
+06:58.303 --> 07:00.903
+it opened my note,
+
+07:00.903 --> 07:04.303
+and it opened with all my backlinks.
+
+07:04.303 --> 07:07.703
+You can see that I have embedded in my
+
+07:07.703 --> 07:11.303
+browser some functionality of Emacs.
+
+07:11.303 --> 07:13.463
+You understand that this is the power of
+
+07:13.463 --> 07:16.983
+unifying, integrating these two experiences,
+
+07:16.983 --> 07:18.943
+and it opens the doors for
+
+07:18.943 --> 07:22.223
+a lot of interesting interactivity.
+
+07:22.223 --> 07:24.743
+Anyway, what is next?
+
+07:24.743 --> 07:29.023
+This was my talk, what is next is
+
+07:29.023 --> 07:32.143
+continue merging it with Moldable Emacs.
+
+07:32.143 --> 07:34.023
+(This) is something I will present in
+
+07:34.023 --> 07:37.463
+another talk in this conference with web,
+
+07:37.463 --> 07:39.263
+so that we can extract meaning from
+
+07:39.263 --> 07:41.103
+the web, and we can bring it in Emacs.
+
+07:41.103 --> 07:43.583
+And from Emacs bringing back stuff
+
+07:43.583 --> 07:46.543
+like a picture into a web page,
+
+07:46.543 --> 07:48.903
+so that we can do fancy visualization.
+
+07:48.903 --> 07:51.063
+Another thing I want to do is to
+
+07:51.063 --> 07:54.263
+automate the boring browser flows
+
+07:54.263 --> 07:55.543
+that I do, like, for example,
+
+07:55.543 --> 07:58.263
+if I periodically buy something,
+
+07:58.263 --> 08:00.863
+I could do it from within Emacs
+
+08:00.863 --> 08:05.263
+instead of always clicking around.
+
+08:05.263 --> 08:08.383
+And then I'm just gonna cross fingers,
+
+08:08.383 --> 08:10.023
+I hope that this browser will
+
+08:10.023 --> 08:11.783
+become mainstream.
+
+08:11.783 --> 08:13.263
+So, this was my talk,
+
+08:13.263 --> 08:14.663
+thank you for listening,
+
+08:14.663 --> 08:17.343
+and you can find more about it at
+
+08:17.343 --> 08:19.823
+ag91.github.io, my blog,
+
+08:19.823 --> 08:22.680
+and enjoy the rest of the conference, bye!
+
+08:22.680 --> 08:25.520
+[captions: bhavin192 (Bhavin Gandhi)]
diff --git a/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main--chapters.vtt b/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main--chapters.vtt
new file mode 100644
index 00000000..51d6ae42
--- /dev/null
+++ b/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main--chapters.vtt
@@ -0,0 +1,31 @@
+WEBVTT
+
+00:01.280 --> 00:00:45.600
+Introduction
+
+00:45.600 --> 00:01:04.559
+State of the manuals
+
+01:04.559 --> 00:02:15.680
+gettext and po4a
+
+00:02:15.680 --> 00:03:39.760
+OmegaT
+
+03:39.760 --> 00:05:21.440
+OmegaT demo
+
+05:21.440 --> 00:06:38.560
+Protected strings
+
+06:38.560 --> 00:06:57.199
+Entering strings
+
+06:57.199 --> 00:07:25.199
+Validation
+
+07:25.199 --> 00:08:39.760
+Collaboration
+
+08:39.760 --> 00:09:06.760
+Conclusion
diff --git a/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.vtt b/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.vtt
new file mode 100644
index 00000000..34cfbcad
--- /dev/null
+++ b/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.vtt
@@ -0,0 +1,892 @@
+WEBVTT
+
+00:01.280 --> 00:00:02.560
+Hello everybody.
+
+00:02.560 --> 00:00:04.400
+My name is Jean-Christophe Helary,
+
+00:00:04.400 --> 00:00:05.680
+and today I’m going to talk about
+
+00:00:05.680 --> 00:00:08.320
+Emacs manuals translation and OmegaT.
+
+00:00:08.320 --> 00:00:10.960
+Thank you for joining the session.
+
+00:10.960 --> 00:00:12.880
+Translation in the free software world
+
+00:12.880 --> 00:00:15.040
+is really a big thing. You already know
+
+00:15.040 --> 00:00:17.119
+that most of the Linux distributions,
+
+00:17.119 --> 00:00:18.720
+most of the software packages,
+
+00:00:18.720 --> 00:00:19.920
+most of the websites
+
+00:00:19.920 --> 00:00:22.320
+are translated by dozens of communities
+
+00:00:22.320 --> 00:00:23.439
+using different processes
+
+00:23.439 --> 00:00:24.880
+and file formats.
+
+00:24.880 --> 00:00:27.359
+Translation and localization
+
+00:27.359 --> 00:00:29.599
+are things we know very well.
+
+00:29.599 --> 00:00:30.400
+It’s a tad different
+
+00:00:30.400 --> 00:00:32.160
+for the Emacs community.
+
+00:32.160 --> 00:00:34.079
+We do not have a localization process
+
+00:34.079 --> 00:00:35.200
+because it’s quite complex
+
+00:00:35.200 --> 00:00:35.920
+and because we don’t
+
+00:00:35.920 --> 00:00:37.600
+have the resources yet.
+
+00:37.600 --> 00:00:39.920
+Still, we could translate the manuals,
+
+00:00:39.920 --> 00:00:41.200
+and translating the manuals
+
+00:00:41.200 --> 00:00:42.399
+would probably bring a lot of good
+
+00:00:42.399 --> 00:00:45.600
+to the Emacs community at large.
+
+00:45.600 --> 00:00:47.920
+So what’s the state of the manuals?
+
+00:47.920 --> 00:00:51.199
+As of today, we have 182 files
+
+00:51.199 --> 00:00:54.160
+coming in .texi and .org format.
+
+00:54.160 --> 00:00:56.559
+We’ve got more than 2 million words.
+
+00:56.559 --> 00:00:57.360
+We’ve got more than
+
+00:00:57.360 --> 00:00:59.039
+50 million characters.
+
+00:00:59.039 --> 00:01:00.559
+So that’s quite a lot of work,
+
+01:00.559 --> 00:01:04.559
+and obviously, it’s not a one person job.
+
+01:04.559 --> 00:01:06.159
+When we open .texi files,
+
+00:01:06.159 --> 00:01:07.760
+what do we have?
+
+01:07.760 --> 00:01:09.439
+Well, we actually have a lot of things
+
+01:09.439 --> 00:01:10.560
+that the translators
+
+00:01:10.560 --> 00:01:12.400
+shouldn’t have to translate.
+
+01:12.400 --> 00:01:13.680
+Here we can see that only
+
+00:01:13.680 --> 00:01:15.040
+the very last segment,
+
+00:01:15.040 --> 00:01:16.400
+the very last sentence
+
+00:01:16.400 --> 00:01:18.080
+should be translated.
+
+01:18.080 --> 00:01:19.360
+All those meta things
+
+00:01:19.360 --> 00:01:20.240
+should not be under
+
+00:01:20.240 --> 00:01:24.479
+the translator’s eyes.
+
+01:24.479 --> 00:01:26.720
+How do we deal with this situation?
+
+01:26.720 --> 00:01:27.680
+For code files, we have
+
+00:01:27.680 --> 00:01:29.360
+the gettext utility that converts
+
+00:01:29.360 --> 00:01:30.640
+all the translatable strings
+
+00:01:30.640 --> 00:01:32.079
+into a translatable format,
+
+00:01:32.079 --> 00:01:33.840
+which is the .po format.
+
+01:33.840 --> 00:01:35.520
+And that .po format is ubiquitous,
+
+00:01:35.520 --> 00:01:36.400
+even in the non-free
+
+00:01:36.400 --> 00:01:38.720
+software translation industry.
+
+01:38.720 --> 00:01:39.520
+For documentation,
+
+00:01:39.520 --> 00:01:40.720
+we have something different.
+
+00:01:40.720 --> 00:01:42.000
+It’s called po4a,
+
+00:01:42.000 --> 00:01:45.119
+which is short for ‘po for all’.
+
+01:45.119 --> 00:01:46.399
+When we use po4a
+
+00:01:46.399 --> 00:01:49.200
+on those 182 .texi and .org files,
+
+00:01:49.200 --> 00:01:50.479
+what do we get?
+
+01:50.479 --> 00:01:52.640
+We get something that’s much better.
+
+01:52.640 --> 00:01:54.799
+Now we have three segments.
+
+01:54.799 --> 00:01:55.759
+It’s not perfect because,
+
+00:01:55.759 --> 00:01:56.399
+as you can see,
+
+00:01:56.399 --> 00:01:57.280
+the two first segments
+
+00:01:57.280 --> 00:01:58.880
+should not be translated.
+
+01:58.880 --> 00:01:59.520
+So there’s still
+
+00:01:59.520 --> 00:02:02.479
+room for improvement.
+
+02:02.479 --> 00:02:04.960
+Now, when we put that file set
+
+00:02:04.960 --> 00:02:07.119
+into OmegaT, we considerably reduce
+
+00:02:07.119 --> 00:02:08.800
+the words total.
+
+02:08.800 --> 00:02:11.360
+We now have 50% fewer words
+
+00:02:11.360 --> 00:02:14.239
+and 23% fewer characters to type,
+
+02:14.239 --> 00:02:15.680
+but that’s still a lot of work.
+
+00:02:15.680 --> 00:02:17.599
+So let’s talk about OmegaT now
+
+00:02:17.599 --> 00:02:22.239
+and see where it can help.
+
+02:22.239 --> 00:02:25.440
+OmegaT is a GPL3+ Java8+
+
+02:25.440 --> 00:02:27.599
+Computer Aided Translation tool.
+
+02:27.599 --> 00:02:29.440
+We call them CATs.
+
+02:29.440 --> 00:02:30.720
+CATs are to translators
+
+00:02:30.720 --> 00:02:33.280
+what IDEs are to programmers.
+
+02:33.280 --> 00:02:35.040
+They leverage the power of computers
+
+00:02:35.040 --> 00:02:36.480
+to automate our work,
+
+00:02:36.480 --> 00:02:38.400
+which is, reference searches,
+
+00:02:38.400 --> 00:02:40.800
+fuzzy matching, automatic insertions,
+
+00:02:40.800 --> 00:02:44.080
+and things like that.
+
+02:44.080 --> 00:02:46.319
+OmegaT is not really recent.
+
+02:46.319 --> 00:02:48.319
+It will turn 20 next year,
+
+02:48.319 --> 00:02:48.959
+and at this point,
+
+00:02:48.959 --> 00:02:51.440
+we have about 1.5 million downloads
+
+00:02:51.440 --> 00:02:53.200
+from the SourceForge site,
+
+00:02:53.200 --> 00:02:54.080
+which doesn’t mean much
+
+00:02:54.080 --> 00:02:55.040
+because that includes
+
+00:02:55.040 --> 00:02:56.480
+files used for localization
+
+00:02:56.480 --> 00:02:57.920
+and manuals, but still
+
+00:02:57.920 --> 00:02:59.599
+it’s a pretty big number.
+
+02:59.599 --> 00:03:00.720
+OmegaT is included in
+
+00:03:00.720 --> 00:03:02.400
+a lot of Linux distributions,
+
+00:03:02.400 --> 00:03:03.680
+but as you can see here,
+
+03:03.680 --> 00:03:05.920
+it’s mostly downloaded on Windows systems
+
+00:03:05.920 --> 00:03:06.800
+because translators
+
+00:03:06.800 --> 00:03:09.680
+mostly work on Windows.
+
+03:09.680 --> 00:03:11.120
+OmegaT comes with a cool logo
+
+00:03:11.120 --> 00:03:12.080
+and a cool site too,
+
+00:03:12.080 --> 00:03:13.920
+and I really invite you to visit it.
+
+00:03:13.920 --> 00:03:16.159
+It’s omegat.org, and you’ll see
+
+03:16.159 --> 00:03:17.280
+all the information you need,
+
+00:03:17.280 --> 00:03:19.040
+plus downloads to Linux versions,
+
+00:03:19.040 --> 00:03:22.080
+with or without Java included.
+
+03:22.080 --> 00:03:24.799
+So what does OmegaT bring to the game?
+
+03:24.799 --> 00:03:26.560
+Professional translators have to deliver
+
+03:26.560 --> 00:03:27.680
+fast, consistent,
+
+00:03:27.680 --> 00:03:29.519
+and quality translations,
+
+03:29.519 --> 00:03:30.720
+and we need to have proper tools
+
+00:03:30.720 --> 00:03:32.159
+to achieve that.
+
+00:03:32.159 --> 00:03:34.239
+I wish po-mode was part of the toolbox,
+
+00:03:34.239 --> 00:03:35.120
+but that’s not the case,
+
+03:35.120 --> 00:03:36.560
+and it’s a pity.
+
+03:36.560 --> 00:03:39.760
+So we have to use those CAT tools.
+
+03:39.760 --> 00:03:41.440
+Let me show you what OmegaT looks like
+
+03:41.440 --> 00:03:43.120
+when I open this project that I created
+
+03:43.120 --> 00:03:45.200
+for this demonstration.
+
+03:45.200 --> 00:03:46.640
+The display is quite a mouthful,
+
+00:03:46.640 --> 00:03:47.760
+but you can actually modify
+
+00:03:47.760 --> 00:03:49.519
+all windows as needed.
+
+03:49.519 --> 00:03:50.400
+I just want to show you
+
+00:03:50.400 --> 00:03:51.120
+everything at once
+
+00:03:51.120 --> 00:03:53.680
+to give you a quick idea of the thing.
+
+03:53.680 --> 00:03:55.200
+You have various colors, windows,
+
+00:03:55.200 --> 00:03:55.920
+and all those spaces
+
+00:03:55.920 --> 00:03:57.120
+have different functions
+
+03:57.120 --> 00:03:58.560
+that help the translator,
+
+00:03:58.560 --> 00:03:59.360
+and that you’re probably
+
+00:03:59.360 --> 00:04:02.879
+not familiar with.
+
+04:02.879 --> 00:04:04.080
+I’m going to introduce you
+
+00:04:04.080 --> 00:04:05.680
+to the interface now.
+
+04:05.680 --> 00:04:07.519
+So first, we have the editor.
+
+04:07.519 --> 00:04:09.439
+The editor comes in two parts:
+
+04:09.439 --> 00:04:10.480
+the current segment,
+
+00:04:10.480 --> 00:04:12.319
+which is associated to a number,
+
+00:04:12.319 --> 00:04:13.519
+and all the other segments,
+
+00:04:13.519 --> 00:04:15.840
+above or below.
+
+04:15.840 --> 00:04:16.720
+At the top of the window,
+
+00:04:16.720 --> 00:04:18.720
+you can see the first three segments
+
+00:04:18.720 --> 00:04:20.799
+that were in the .po file.
+
+04:20.799 --> 00:04:22.880
+The last one here, the fourth one, comes
+
+00:04:22.880 --> 00:04:28.720
+with an automatic fuzzy match insertion.
+
+04:28.720 --> 00:04:30.880
+Such legacy translations are what we
+
+04:30.880 --> 00:04:32.720
+call ‘translation memories’.
+
+04:32.720 --> 00:04:35.280
+OmegaT has inserted this one automatically
+
+00:04:35.280 --> 00:04:37.120
+because I told it to do so,
+
+04:37.120 --> 00:04:38.560
+and for my security, it comes with
+
+00:04:38.560 --> 00:04:40.639
+the predefined fuzzy prefix
+
+00:04:40.639 --> 00:04:41.919
+that I will have to remove
+
+00:04:41.919 --> 00:04:44.880
+to validate the translation.
+
+04:44.880 --> 00:04:47.919
+Our next feature is the glossary feature.
+
+04:47.919 --> 00:04:48.479
+In this project,
+
+00:04:48.479 --> 00:04:50.160
+we have a lot of glossary data.
+
+00:04:50.160 --> 00:04:52.560
+Some is relevant and some is not.
+
+04:52.560 --> 00:04:53.919
+In the segment that I’m translating
+
+00:04:53.919 --> 00:04:55.199
+at the moment, you can see
+
+00:04:55.199 --> 00:04:57.520
+underlined items.
+
+04:57.520 --> 00:04:59.040
+This pop-up menu on the right
+
+00:04:59.040 --> 00:05:02.240
+allows me to enter the terms as I type.
+
+05:02.240 --> 00:05:04.639
+It’s kind of an auto insertion system
+
+00:05:04.639 --> 00:05:07.039
+that also supports history predictions,
+
+00:05:07.039 --> 00:05:14.479
+predefined strings, and things like that.
+
+05:14.479 --> 00:05:15.440
+In the part on the right,
+
+00:05:15.440 --> 00:05:17.120
+we have reference information
+
+00:05:17.120 --> 00:05:18.240
+that comes directly from
+
+00:05:18.240 --> 00:05:21.440
+the .po and .texi files.
+
+05:21.440 --> 00:05:23.440
+We also have notes that I can share
+
+00:05:23.440 --> 00:05:25.759
+with fellow translators,
+
+05:25.759 --> 00:05:28.080
+and we have numbers that tell me
+
+00:05:28.080 --> 00:05:31.199
+that I still have 143 000 segments more to go
+
+00:05:31.199 --> 00:05:35.280
+before I complete this translation.
+
+05:35.280 --> 00:05:37.120
+As we see, there are plenty of strings
+
+05:37.120 --> 00:05:40.000
+that we really don’t want to have to type.
+
+05:40.000 --> 00:05:42.160
+For example, those strings
+
+00:05:42.160 --> 00:05:43.840
+are typical .texi strings
+
+00:05:43.840 --> 00:05:45.039
+that the translator
+
+00:05:45.039 --> 00:05:46.479
+should really not have to type.
+
+00:05:46.479 --> 00:05:47.360
+So we’re going to have to
+
+00:05:47.360 --> 00:05:50.400
+do something about that.
+
+05:50.400 --> 00:05:51.600
+we’re going to have to create
+
+00:05:51.600 --> 00:05:52.479
+protected strings
+
+00:05:52.479 --> 00:05:54.400
+with regular expressions,
+
+05:54.400 --> 00:05:56.800
+so that the strings can be visualized
+
+00:05:56.800 --> 00:05:59.120
+right away in the source segment,
+
+05:59.120 --> 00:06:00.479
+entered semi-automatically
+
+00:06:00.479 --> 00:06:01.680
+in the target segment,
+
+00:06:01.680 --> 00:06:04.479
+and checked for integrity.
+
+06:04.479 --> 00:06:06.479
+The regular expression I came up with
+
+06:06.479 --> 00:06:08.160
+for defining most of the strings
+
+00:06:08.160 --> 00:06:09.600
+is this one,
+
+06:09.600 --> 00:06:11.120
+and I’m not a regular expression pro
+
+00:06:11.120 --> 00:06:13.360
+so I’m sure some of you will correct me.
+
+00:06:13.360 --> 00:06:14.560
+But this expression gives me
+
+00:06:14.560 --> 00:06:15.919
+a good enough definition
+
+00:06:15.919 --> 00:06:17.919
+even though it does not yet include
+
+00:06:17.919 --> 00:06:20.960
+Org mode syntax.
+
+06:20.960 --> 00:06:22.344
+So now we have all those
+
+00:06:22.344 --> 00:06:23.440
+.texi specific things
+
+00:06:23.440 --> 00:06:24.960
+that we don’t want to touch
+
+06:24.960 --> 00:06:26.100
+displayed in gray.
+
+00:06:26.100 --> 00:06:27.680
+Actually, you may have noticed
+
+00:06:27.680 --> 00:06:28.479
+that I cheated a bit,
+
+06:28.479 --> 00:06:30.319
+because here I added the years
+
+00:06:30.319 --> 00:06:32.000
+and the Free Software Foundation name
+
+00:06:32.000 --> 00:06:34.000
+to the previous regular expression
+
+00:06:34.000 --> 00:06:35.520
+to show you that you can protect
+
+00:06:35.520 --> 00:06:38.560
+any kind of string, really.
+
+06:38.560 --> 00:06:39.520
+So what we have now
+
+00:06:39.520 --> 00:06:41.360
+is a way to visualize the strings
+
+00:06:41.360 --> 00:06:43.440
+that we do not want to touch,
+
+06:43.440 --> 00:06:45.440
+but we still have to enter all of them
+
+00:06:45.440 --> 00:06:46.880
+in the translation.
+
+06:46.880 --> 00:06:48.319
+For that, we have the pop-up menu
+
+00:06:48.319 --> 00:06:50.400
+that I used earlier with the glossary,
+
+00:06:50.400 --> 00:06:51.520
+and we also have items
+
+00:06:51.520 --> 00:06:52.400
+in the edit menu
+
+00:06:52.400 --> 00:06:53.919
+that come with shortcuts
+
+00:06:53.919 --> 00:06:57.199
+for easy insertion of missing tags.
+
+06:57.199 --> 00:06:58.800
+Last, but certainly not least,
+
+00:06:58.800 --> 00:07:00.800
+we can now validate our input.
+
+00:07:00.800 --> 00:07:02.479
+Here, OmegaT properly tells me
+
+00:07:02.479 --> 00:07:05.759
+that I missed 7 protected strings,
+
+07:05.759 --> 00:07:07.599
+I entered only 1998,
+
+00:07:07.599 --> 00:07:09.280
+but there were five different years,
+
+00:07:09.280 --> 00:07:10.479
+the copyright string,
+
+00:07:10.479 --> 00:07:14.240
+and the FSF name string.
+
+07:14.240 --> 00:07:15.970
+With all this almost native
+
+00:07:15.970 --> 00:07:16.960
+Texinfo support,
+
+00:07:16.960 --> 00:07:18.880
+we have much less things to type,
+
+07:18.880 --> 00:07:19.919
+and there is a much lower
+
+00:07:19.919 --> 00:07:21.120
+potential for errors.
+
+00:07:21.120 --> 00:07:25.199
+But we agree, it’s still a lot of work.
+
+07:25.199 --> 00:07:26.319
+What we’d like now
+
+00:07:26.319 --> 00:07:27.840
+is to work with fellow translators,
+
+00:07:27.840 --> 00:07:28.720
+and here we need to know
+
+00:07:28.720 --> 00:07:29.840
+that OmegaT is actually
+
+00:07:29.840 --> 00:07:32.080
+a hidden svn/git client,
+
+00:07:32.080 --> 00:07:34.240
+and team projects can be hosted
+
+07:34.240 --> 00:07:36.319
+on svn/git platforms.
+
+07:36.319 --> 00:07:37.199
+Translators don’t need to
+
+00:07:37.199 --> 00:07:38.880
+know anything about VCS.
+
+00:07:38.880 --> 00:07:40.720
+They just need access credentials,
+
+00:07:40.720 --> 00:07:42.400
+and OmegaT commits for them.
+
+00:07:42.400 --> 00:07:44.080
+This way we do not have to use
+
+00:07:44.080 --> 00:07:45.759
+ugly and clumsy web-based
+
+00:07:45.759 --> 00:07:47.199
+translation interfaces,
+
+00:07:47.199 --> 00:07:48.800
+and we can use a powerful
+
+00:07:48.800 --> 00:07:51.440
+offline professional tool.
+
+07:51.440 --> 00:07:52.479
+So this is how it looks
+
+00:07:52.479 --> 00:07:54.160
+when you look at the platform
+
+00:07:54.160 --> 00:07:55.919
+where I hosted this project.
+
+07:55.919 --> 00:07:57.199
+The last updates are from
+
+00:07:57.199 --> 00:07:58.639
+20 days and 30 seconds ago
+
+00:07:58.639 --> 00:08:00.720
+when I created this slide,
+
+08:00.720 --> 00:08:02.479
+and you can see that I had a partner
+
+00:08:02.479 --> 00:08:04.639
+who worked with me on the same file set.
+
+08:04.639 --> 00:08:05.520
+Although it looks like
+
+00:08:05.520 --> 00:08:06.879
+we actually committed the translation
+
+00:08:06.879 --> 00:08:07.680
+to the platform,
+
+00:08:07.680 --> 00:08:11.039
+it was not us, but OmegaT.
+
+00:08:11.039 --> 00:08:13.599
+OmegaT does all the heavy-duty work.
+
+08:13.599 --> 00:08:15.039
+It regularly saves to
+
+00:08:15.039 --> 00:08:16.879
+and syncs from the servers.
+
+08:16.879 --> 00:08:18.720
+Translators are regularly kept updated
+
+08:18.720 --> 00:08:20.479
+with work from fellow translators,
+
+00:08:20.479 --> 00:08:21.680
+and when necessary,
+
+00:08:21.680 --> 00:08:23.360
+OmegaT offers a simple
+
+00:08:23.360 --> 00:08:25.440
+conflict-resolution dialogue.
+
+08:25.440 --> 00:08:27.039
+Translators never have to do anything
+
+08:27.039 --> 00:08:29.360
+with svn or git ever.
+
+08:29.360 --> 00:08:30.800
+And now we can envision a future
+
+00:08:30.800 --> 00:08:31.599
+not so far away
+
+00:08:31.599 --> 00:08:33.120
+where the manuals will be translated
+
+00:08:33.120 --> 00:08:34.159
+and eventually included
+
+00:08:34.159 --> 00:08:35.279
+in the distribution,
+
+00:08:35.279 --> 00:08:36.080
+but that’s a topic
+
+00:08:36.080 --> 00:08:39.760
+for a different presentation.
+
+08:39.760 --> 00:08:42.080
+So we’ve reached the end of this session.
+
+08:42.080 --> 00:08:44.240
+Thank you very much again for joining it.
+
+08:44.240 --> 00:08:45.600
+There are plenty of topics
+
+00:08:45.600 --> 00:08:46.880
+I promised I would not address,
+
+00:08:46.880 --> 00:08:50.000
+and I think I kept my promise.
+
+08:50.000 --> 00:08:51.600
+There will be a Q&A now,
+
+00:08:51.600 --> 00:08:52.517
+and I also started
+
+00:08:52.517 --> 00:08:53.600
+a thread about this talk
+
+00:08:53.600 --> 00:08:55.519
+on Reddit last Saturday.
+
+08:55.519 --> 00:08:57.279
+You can find me on the emacs-help
+
+00:08:57.279 --> 00:08:59.200
+and emacs-devel lists as well,
+
+00:08:59.200 --> 00:09:00.480
+so don’t hesitate to send me
+
+00:09:00.480 --> 00:09:02.080
+questions and remarks.
+
+09:02.080 --> 09:06.760
+Thank you again, and see you around.
diff --git a/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_fr.vtt b/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_fr.vtt
new file mode 100644
index 00000000..69369c4e
--- /dev/null
+++ b/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_fr.vtt
@@ -0,0 +1,892 @@
+WEBVTT
+
+00:01.280 --> 00:00:02.560
+Bonjour tout le monde.
+
+00:02.560 --> 00:00:04.400
+Je m’appelle Jean-Christophe Helary,
+
+00:00:04.400 --> 00:00:05.680
+et aujourd’hui je vais vous parler
+
+00:00:05.680 --> 00:00:08.320
+de la traduction des manuels Emacs avec OmegaT.
+
+00:00:08.320 --> 00:00:10.960
+Merci de vous joindre à moi aujourd’hui.
+
+00:10.960 --> 00:00:12.880
+La traduction dans le monde du logiciel libre
+
+00:12.880 --> 00:00:15.040
+est un phénomène très important. Vous savez déjà
+
+00:15.040 --> 00:00:17.119
+que la plupart des distributions Linux,
+
+00:17.119 --> 00:00:18.720
+la plupart des logiciels,
+
+00:00:18.720 --> 00:00:19.920
+la plupart des sites web
+
+00:00:19.920 --> 00:00:22.320
+sont traduits par des dizaines de communautés
+
+00:00:22.320 --> 00:00:23.439
+à l’aide de processus
+
+00:23.439 --> 00:00:24.880
+et de formats de fichiers tous différents.
+
+00:24.880 --> 00:00:27.359
+La traduction et la localisation
+
+00:27.359 --> 00:00:29.599
+sont des choses que nous connaissons bien.
+
+00:29.599 --> 00:00:30.400
+C’est un peu différent
+
+00:00:30.400 --> 00:00:32.160
+pour la communauté Emacs.
+
+00:32.160 --> 00:00:34.079
+Nous n’avons pas de processus de localisation
+
+00:34.079 --> 00:00:35.200
+parce que c’est encore trop complexe
+
+00:00:35.200 --> 00:00:35.920
+et parce que nous n’avons pas
+
+00:00:35.920 --> 00:00:37.600
+encore les ressources nécessaires.
+
+00:37.600 --> 00:00:39.920
+Néanmoins, nous pourrions traduire les manuels,
+
+00:00:39.920 --> 00:00:41.200
+et traduire les manuels
+
+00:00:41.200 --> 00:00:42.399
+apporterait probablement beaucoup
+
+00:00:42.399 --> 00:00:45.600
+à la communauté Emacs dans son ensemble.
+
+00:45.600 --> 00:00:47.920
+Quel est donc l’état des manuels ?
+
+00:47.920 --> 00:00:51.199
+À ce jour, nous avons 182 fichiers
+
+00:51.199 --> 00:00:54.160
+aux formats .texi et .org.
+
+00:54.160 --> 00:00:56.559
+Nous avons plus de 2 millions de mots.
+
+00:56.559 --> 00:00:57.360
+Nous avons plus de
+
+00:00:57.360 --> 00:00:59.039
+50 millions de caractères.
+
+00:00:59.039 --> 00:01:00.559
+C’est donc beaucoup de travail,
+
+01:00.559 --> 00:01:04.559
+et il est clair qu’une personne ne suffira pas.
+
+01:04.559 --> 00:01:06.159
+Quand on ouvre un fichier .texi
+
+00:01:06.159 --> 00:01:07.760
+qu’est-ce qu’on y trouve ?
+
+01:07.760 --> 00:01:09.439
+Eh bien, beaucoup de choses en fait
+
+01:09.439 --> 00:01:10.560
+que les traducteurs
+
+00:01:10.560 --> 00:01:12.400
+ne devraient pas avoir à traduire.
+
+01:12.400 --> 00:01:13.680
+Ici, on peut voir que seul
+
+00:01:13.680 --> 00:01:15.040
+le tout dernier segment,
+
+00:01:15.040 --> 00:01:16.400
+la toute dernière phrase
+
+00:01:16.400 --> 00:01:18.080
+doit être traduite.
+
+01:18.080 --> 00:01:19.360
+Toutes ces choses « méta »
+
+00:01:19.360 --> 00:01:20.240
+ne devraient pas être sous
+
+00:01:20.240 --> 00:01:24.479
+les yeux du traducteur.
+
+01:24.479 --> 00:01:26.720
+Comment faire face à cette situation ?
+
+01:26.720 --> 00:01:27.680
+Pour les fichiers de code, nous avons
+
+00:01:27.680 --> 00:01:29.360
+l’utilitaire gettext qui convertit
+
+00:01:29.360 --> 00:01:30.640
+toutes les chaînes de traduisibles
+
+00:01:30.640 --> 00:01:32.079
+dans un format traduisible,
+
+00:01:32.079 --> 00:01:33.840
+qui est le format .po.
+
+01:33.840 --> 00:01:35.520
+Ce format .po est omniprésent,
+
+00:01:35.520 --> 00:01:36.400
+même dans l’industrie de la traduction
+
+00:01:36.400 --> 00:01:38.720
+des logiciels non-libres.
+
+01:38.720 --> 00:01:39.520
+Pour la documentation,
+
+00:01:39.520 --> 00:01:40.720
+nous avons quelque chose de différent
+
+00:01:40.720 --> 00:01:42.000
+qui s’appelle po4a,
+
+00:01:42.000 --> 00:01:45.119
+l’abréviation de « po for all » (po pour tous).
+
+01:45.119 --> 00:01:46.399
+Quand on utilise po4a
+
+00:01:46.399 --> 00:01:49.200
+sur ces 182 fichiers .texi et .org,
+
+00:01:49.200 --> 00:01:50.479
+qu’est-ce qu’on obtient ?
+
+01:50.479 --> 00:01:52.640
+On obtient quelque chose de bien mieux.
+
+01:52.640 --> 00:01:54.799
+Maintenant on a trois segments.
+
+01:54.799 --> 00:01:55.759
+Ce n’est pas parfait, car,
+
+00:01:55.759 --> 00:01:56.399
+comme vous pouvez le voir,
+
+00:01:56.399 --> 00:01:57.280
+les deux premiers segments
+
+00:01:57.280 --> 00:01:58.880
+ne sont pas à traduire.
+
+01:58.880 --> 00:01:59.520
+Donc on peut encore
+
+00:01:59.520 --> 00:02:02.479
+améliorer les choses.
+
+02:02.479 --> 00:02:04.960
+Quand on met ces fichiers
+
+00:02:04.960 --> 00:02:07.119
+dans OmegaT, on réduit considérablement
+
+00:02:07.119 --> 00:02:08.800
+le nombre total de mots.
+
+02:08.800 --> 00:02:11.360
+On a maintenant 50 % de mots en moins
+
+00:02:11.360 --> 00:02:14.239
+et 23 % de caractères en moins à taper,
+
+02:14.239 --> 00:02:15.680
+mais c’est toujours encore beaucoup de travail.
+
+00:02:15.680 --> 00:02:17.599
+Je vais donc vous parler d’OmegaT maintenant
+
+00:02:17.599 --> 00:02:22.239
+pour voir où il peut nous être utile.
+
+02:22.239 --> 00:02:25.440
+OmegaT est un logiciel GPL3+, Java8+.
+
+02:25.440 --> 00:02:27.599
+C’est un outil de Traduction Assistée par Ordinateur.
+
+02:27.599 --> 00:02:29.440
+On abrège ça TAO.
+
+02:29.440 --> 00:02:30.720
+La TAO est aux traducteurs
+
+00:02:30.720 --> 00:02:33.280
+ce que les EDI sont aux programmeurs.
+
+02:33.280 --> 00:02:35.040
+Elle exploite la puissance de l’ordinateur
+
+00:02:35.040 --> 00:02:36.480
+pour automatiser notre travail,
+
+00:02:36.480 --> 00:02:38.400
+qui consiste en recherche de références,
+
+00:02:38.400 --> 00:02:40.800
+de correspondances, insertions automatiques,
+
+00:02:40.800 --> 00:02:44.080
+et d’autres choses comme ça.
+
+02:44.080 --> 00:02:46.319
+OmegaT n’est plus si jeune.
+
+02:46.319 --> 00:02:48.319
+Il aura 20 ans l’année prochaine,
+
+02:48.319 --> 00:02:48.959
+et à ce stade
+
+00:02:48.959 --> 00:02:51.440
+nous avons environ 1,5 million de téléchargements
+
+00:02:51.440 --> 00:02:53.200
+sur le site SourceForge
+
+00:02:53.200 --> 00:02:54.080
+ce qui ne veut pas dire grand-chose
+
+00:02:54.080 --> 00:02:55.040
+parce que cela inclut
+
+00:02:55.040 --> 00:02:56.480
+les fichiers utilisés pour la localisation
+
+00:02:56.480 --> 00:02:57.920
+les manuels, mais quand même
+
+00:02:57.920 --> 00:02:59.599
+c’est un chiffre quand même important.
+
+02:59.599 --> 00:03:00.720
+OmegaT est inclus dans
+
+00:03:00.720 --> 00:03:02.400
+beaucoup de distributions Linux,
+
+00:03:02.400 --> 00:03:03.680
+mais comme vous pouvez le voir ici,
+
+03:03.680 --> 00:03:05.920
+il est surtout téléchargé sur Windows
+
+00:03:05.920 --> 00:03:06.800
+car les traducteurs
+
+00:03:06.800 --> 00:03:09.680
+travaillent principalement sous Windows.
+
+03:09.680 --> 00:03:11.120
+OmegaT a un logo sympa
+
+00:03:11.120 --> 00:03:12.080
+et un site sympa aussi,
+
+00:03:12.080 --> 00:03:13.920
+et je vous invite vraiment à le visiter.
+
+00:03:13.920 --> 00:03:16.159
+L’URL est omegat.org et vous y trouverez
+
+03:16.159 --> 00:03:17.280
+toutes les informations dont vous avez besoin
+
+00:03:17.280 --> 00:03:19.040
+ainsi que les téléchargements des versions Linux,
+
+00:03:19.040 --> 00:03:22.080
+avec ou sans Java inclus.
+
+03:22.080 --> 00:03:24.799
+Alors, qu’est-ce qu’OmegaT nous apporte ?
+
+03:24.799 --> 00:03:26.560
+Les traducteurs professionnels doivent fournir
+
+03:26.560 --> 00:03:27.680
+des traductions rapides, cohérentes,
+
+00:03:27.680 --> 00:03:29.519
+et de qualité,
+
+03:29.519 --> 00:03:30.720
+et nous devons disposer d’outils appropriés
+
+00:03:30.720 --> 00:03:32.159
+pour y parvenir.
+
+00:03:32.159 --> 00:03:34.239
+J’aimerais que po-mode fasse partie de nos outils,
+
+00:03:34.239 --> 00:03:35.120
+mais ce n’est pas le cas,
+
+03:35.120 --> 00:03:36.560
+et c’est bien dommage.
+
+03:36.560 --> 00:03:39.760
+Nous devons donc utiliser ces outils de TAO.
+
+03:39.760 --> 00:03:41.440
+Laissez-moi vous montrer à quoi ressemble OmegaT
+
+03:41.440 --> 00:03:43.120
+quand j’ouvre ce projet que j’ai créé
+
+03:43.120 --> 00:03:45.200
+pour cette présentation.
+
+03:45.200 --> 00:03:46.640
+La fenêtre est assez impressionnante,
+
+00:03:46.640 --> 00:03:47.760
+mais vous pouvez en fait modifier
+
+00:03:47.760 --> 00:03:49.519
+toutes les parties selon vos besoins.
+
+03:49.519 --> 00:03:50.400
+Je veux juste vous montrer
+
+00:03:50.400 --> 00:03:51.120
+tout en même temps
+
+00:03:51.120 --> 00:03:53.680
+pour vous donner une idée rapide de l’ensemble.
+
+03:53.680 --> 00:03:55.200
+Vous avez différentes couleurs, fenêtres,
+
+00:03:55.200 --> 00:03:55.920
+et tous ces espaces
+
+00:03:55.920 --> 00:03:57.120
+ont des fonctions différentes
+
+03:57.120 --> 00:03:58.560
+qui aident le traducteur,
+
+00:03:58.560 --> 00:03:59.360
+et qui probablement ne vous sont
+
+00:03:59.360 --> 00:04:02.879
+pas familières.
+
+04:02.879 --> 00:04:04.080
+Je vais vous présenter
+
+00:04:04.080 --> 00:04:05.680
+l’interface maintenant.
+
+04:05.680 --> 00:04:07.519
+Tout d’abord, nous avons l’éditeur.
+
+04:07.519 --> 00:04:09.439
+L’éditeur est composé de deux parties :
+
+04:09.439 --> 00:04:10.480
+le segment courant,
+
+00:04:10.480 --> 00:04:12.319
+qui est associé à un numéro,
+
+00:04:12.319 --> 00:04:13.519
+et tous les autres segments,
+
+00:04:13.519 --> 00:04:15.840
+au-dessus ou en dessous.
+
+04:15.840 --> 00:04:16.720
+En haut de la fenêtre,
+
+00:04:16.720 --> 00:04:18.720
+vous pouvez voir les trois premiers segments
+
+00:04:18.720 --> 00:04:20.799
+qui étaient dans le fichier .po.
+
+04:20.799 --> 00:04:22.880
+Le dernier ici, le quatrième, inclut
+
+00:04:22.880 --> 00:04:28.720
+une insertion automatique de correspondance.
+
+04:28.720 --> 00:04:30.880
+On appelle ce type de traductions
+
+04:30.880 --> 00:04:32.720
+des « mémoires de traduction ».
+
+04:32.720 --> 00:04:35.280
+OmegaT a inséré celle-ci automatiquement
+
+00:04:35.280 --> 00:04:37.120
+parce que j’ai paramétré comme ça,
+
+04:37.120 --> 00:04:38.560
+et pour ma sécurité, elle est insérée avec
+
+00:04:38.560 --> 00:04:40.639
+le préfixe prédéfini « fuzzy »
+
+00:04:40.639 --> 00:04:41.919
+que je devrai retirer
+
+00:04:41.919 --> 00:04:44.880
+pour valider la traduction.
+
+04:44.880 --> 00:04:47.919
+La fonctionnalité suivante est le glossaire.
+
+04:47.919 --> 00:04:48.479
+Dans ce projet,
+
+00:04:48.479 --> 00:04:50.160
+on a beaucoup de glossaires.
+
+00:04:50.160 --> 00:04:52.560
+Certains sont pertinents, d’autres non.
+
+04:52.560 --> 00:04:53.919
+Dans le segment que je suis en train de traduire
+
+00:04:53.919 --> 00:04:55.199
+en ce moment, vous pouvez voir
+
+00:04:55.199 --> 00:04:57.520
+des éléments soulignés.
+
+04:57.520 --> 00:04:59.040
+Ce menu contextuel à droite
+
+00:04:59.040 --> 00:05:02.240
+me permet d’entrer les termes au fur et à mesure que j’écris.
+
+05:02.240 --> 00:05:04.639
+C’est une sorte de système d’insertion automatique
+
+00:05:04.639 --> 00:05:07.039
+qui propose aussi des prédictions de l’historique,
+
+00:05:07.039 --> 00:05:14.479
+des chaînes prédéfinies et d’autres choses comme ça.
+
+05:14.479 --> 00:05:15.440
+Dans la partie à droite,
+
+00:05:15.440 --> 00:05:17.120
+on a des informations de référence
+
+00:05:17.120 --> 00:05:18.240
+qui viennent directement
+
+00:05:18.240 --> 00:05:21.440
+des fichiers .po et .texi.
+
+05:21.440 --> 00:05:23.440
+On a également des notes à partager
+
+00:05:23.440 --> 00:05:25.759
+avec des collègues traducteurs,
+
+05:25.759 --> 00:05:28.080
+et nous avons des chiffres qui me disent
+
+00:05:28.080 --> 00:05:31.199
+qu’il me reste encore 143 000 segments à traduire
+
+00:05:31.199 --> 00:05:35.280
+avant de terminer cette traduction.
+
+05:35.280 --> 00:05:37.120
+Comme on le voit, il y a beaucoup de chaînes
+
+05:37.120 --> 00:05:40.000
+que nous ne voulons vraiment pas avoir à saisir.
+
+05:40.000 --> 00:05:42.160
+Par exemple, ces chaînes
+
+00:05:42.160 --> 00:05:43.840
+sont des chaînes .texi typiques
+
+00:05:43.840 --> 00:05:45.039
+que le traducteur
+
+00:05:45.039 --> 00:05:46.479
+ne devrait vraiment pas avoir à saisir.
+
+00:05:46.479 --> 00:05:47.360
+Nous allons donc devoir
+
+00:05:47.360 --> 00:05:50.400
+faire quelque chose pour gérer ça.
+
+05:50.400 --> 00:05:51.600
+On va devoir créer des
+
+00:05:51.600 --> 00:05:52.479
+chaînes protégées
+
+00:05:52.479 --> 00:05:54.400
+à l’aide d’expressions régulières,
+
+05:54.400 --> 00:05:56.800
+afin que les chaînes puissent être visualisées
+
+00:05:56.800 --> 00:05:59.120
+immédiatement dans le segment source,
+
+05:59.120 --> 00:06:00.479
+saisies de manière semi-automatique
+
+00:06:00.479 --> 00:06:01.680
+dans le segment cible,
+
+00:06:01.680 --> 00:06:04.479
+et validables.
+
+06:04.479 --> 00:06:06.479
+L’expression régulière que j’ai trouvée
+
+06:06.479 --> 00:06:08.160
+pour définir la plupart des chaînes
+
+00:06:08.160 --> 00:06:09.600
+est celle-ci,
+
+06:09.600 --> 00:06:11.120
+et je ne suis pas un pro des regex
+
+00:06:11.120 --> 00:06:13.360
+donc certains d’entre vous pourront me corriger.
+
+00:06:13.360 --> 00:06:14.560
+Mais cette expression me donne
+
+00:06:14.560 --> 00:06:15.919
+une définition suffisante
+
+00:06:15.919 --> 00:06:17.919
+même si elle n’inclut pas encore
+
+00:06:17.919 --> 00:06:20.960
+la syntaxe org-mode.
+
+06:20.960 --> 00:06:22.344
+Donc maintenant on a toutes ces
+
+00:06:22.344 --> 00:06:23.440
+chaînes spécifiques à .texi
+
+00:06:23.440 --> 00:06:24.960
+que nous ne voulons pas toucher
+
+06:24.960 --> 00:06:26.100
+affichées en gris.
+
+00:06:26.100 --> 00:06:27.680
+En fait, vous avez peut-être remarqué
+
+00:06:27.680 --> 00:06:28.479
+que j’ai un peu triché,
+
+06:28.479 --> 00:06:30.319
+car ici j’ai ajouté les années
+
+00:06:30.319 --> 00:06:32.000
+et le nom de la Free Software Foundation
+
+00:06:32.000 --> 00:06:34.000
+à la regex précédente
+
+00:06:34.000 --> 00:06:35.520
+pour vous montrer que vous pouvez protéger
+
+00:06:35.520 --> 00:06:38.560
+vraiment n’importe quel type de chaîne.
+
+06:38.560 --> 00:06:39.520
+On obtient maintenant
+
+00:06:39.520 --> 00:06:41.360
+une visualisation des chaînes de caractères
+
+00:06:41.360 --> 00:06:43.440
+que nous ne voulons pas toucher,
+
+06:43.440 --> 00:06:45.440
+mais on doit encore les saisir toutes
+
+00:06:45.440 --> 00:06:46.880
+dans la traduction.
+
+06:46.880 --> 00:06:48.319
+Pour ça, on a le menu contextuel
+
+00:06:48.319 --> 00:06:50.400
+que j’ai utilisé plus tôt avec le glossaire,
+
+00:06:50.400 --> 00:06:51.520
+et on a également des rubriques
+
+00:06:51.520 --> 00:06:52.400
+dans le menu d’édition
+
+00:06:52.400 --> 00:06:53.919
+qui sont accompagnés de raccourcis
+
+00:06:53.919 --> 00:06:57.199
+pour faciliter l’insertion des balises manquantes.
+
+06:57.199 --> 00:06:58.800
+Enfin, et ce n’est pas le moins important,
+
+00:06:58.800 --> 00:07:00.800
+nous pouvons maintenant valider nos entrées.
+
+00:07:00.800 --> 00:07:02.479
+Ici, OmegaT me dit correctement
+
+00:07:02.479 --> 00:07:05.759
+que j’ai raté 7 chaînes protégées.
+
+07:05.759 --> 00:07:07.599
+Je n’ai entré que 1998,
+
+00:07:07.599 --> 00:07:09.280
+mais il y avait cinq autres années,
+
+00:07:09.280 --> 00:07:10.479
+la chaîne de copyright,
+
+00:07:10.479 --> 00:07:14.240
+et le nom de la FSF.
+
+07:14.240 --> 00:07:15.970
+Avec ce support presque natif
+
+00:07:15.970 --> 00:07:16.960
+du format Texinfo,
+
+00:07:16.960 --> 00:07:18.880
+on a beaucoup moins de choses à saisir,
+
+07:18.880 --> 00:07:19.919
+et il y a beaucoup moins
+
+00:07:19.919 --> 00:07:21.120
+d’erreurs potentielles.
+
+00:07:21.120 --> 00:07:25.199
+Mais on est d’accord, c’est encore beaucoup de travail.
+
+07:25.199 --> 00:07:26.319
+Ce qu’on aimerait maintenant
+
+00:07:26.319 --> 00:07:27.840
+c’est de collaborer avec des collègues traducteurs,
+
+00:07:27.840 --> 00:07:28.720
+et là, on doit savoir
+
+00:07:28.720 --> 00:07:29.840
+qu’OmegaT est en fait
+
+00:07:29.840 --> 00:07:32.080
+un client svn/git dissimulé,
+
+00:07:32.080 --> 00:07:34.240
+et que les projets en équipe peuvent être hébergés
+
+07:34.240 --> 00:07:36.319
+sur des plates-formes svn/git.
+
+07:36.319 --> 00:07:37.199
+Les traducteurs n’ont pas besoin
+
+00:07:37.199 --> 00:07:38.880
+de connaître le contrôle de version.
+
+00:07:38.880 --> 00:07:40.720
+Ils ont juste besoin d’identifiants d’accès,
+
+00:07:40.720 --> 00:07:42.400
+et OmegaT va commiter pour eux.
+
+00:07:42.400 --> 00:07:44.080
+De cette façon, nous n’avons pas besoin d’utiliser
+
+00:07:44.080 --> 00:07:45.759
+d’interfaces de traduction web laides
+
+00:07:45.759 --> 00:07:47.199
+et peu ergonomiques
+
+00:07:47.199 --> 00:07:48.800
+puisqu’on peut utiliser un outil
+
+00:07:48.800 --> 00:07:51.440
+hors ligne professionnel.
+
+07:51.440 --> 00:07:52.479
+Voici donc à quoi ressemble
+
+00:07:52.479 --> 00:07:54.160
+la plateforme
+
+00:07:54.160 --> 00:07:55.919
+où j’héberge ce projet.
+
+07:55.919 --> 00:07:57.199
+Les dernières mises à jour datent d’il y a
+
+00:07:57.199 --> 00:07:58.639
+20 jours et 30 secondes
+
+00:07:58.639 --> 00:08:00.720
+quand j’ai créé cette présentation,
+
+08:00.720 --> 00:08:02.479
+et vous pouvez voir que j’ai un partenaire
+
+00:08:02.479 --> 00:08:04.639
+qui a travaillé avec moi sur le même ensemble de fichiers.
+
+08:04.639 --> 00:08:05.520
+Bien qu’il semble que
+
+00:08:05.520 --> 00:08:06.879
+que nous avons effectivement commité la traduction
+
+00:08:06.879 --> 00:08:07.680
+sur la plateforme,
+
+00:08:07.680 --> 00:08:11.039
+ce n’était pas nous, mais OmegaT.
+
+00:08:11.039 --> 00:08:13.599
+OmegaT fait le gros du travail.
+
+08:13.599 --> 00:08:15.039
+Il effectue régulièrement des sauvegardes et
+
+00:08:15.039 --> 00:08:16.879
+se synchronise avec les serveurs.
+
+08:16.879 --> 00:08:18.720
+Les traducteurs reçoivent régulièrement
+
+08:18.720 --> 00:08:20.479
+les mises à jour de leurs collègues,
+
+00:08:20.479 --> 00:08:21.680
+et quand il le faut,
+
+00:08:21.680 --> 00:08:23.360
+OmegaT affiche un simple
+
+00:08:23.360 --> 00:08:25.440
+dialogue de résolution des conflits.
+
+08:25.440 --> 00:08:27.039
+Les traducteurs n’ont jamais à manipuler
+
+08:27.039 --> 00:08:29.360
+svn ou git, jamais.
+
+08:29.360 --> 00:08:30.800
+Et maintenant, nous pouvons envisager un avenir
+
+00:08:30.800 --> 00:08:31.599
+pas si lointain
+
+00:08:31.599 --> 00:08:33.120
+où les manuels seraient traduits
+
+00:08:33.120 --> 00:08:34.159
+et éventuellement inclus
+
+00:08:34.159 --> 00:08:35.279
+dans la distribution,
+
+00:08:35.279 --> 00:08:36.080
+mais c’est un sujet
+
+00:08:36.080 --> 00:08:39.760
+pour une autre présentation.
+
+08:39.760 --> 00:08:42.080
+J’ai atteint la fin de cette session.
+
+08:42.080 --> 00:08:44.240
+Merci encore d’y avoir participé.
+
+08:44.240 --> 00:08:45.600
+Il y a beaucoup de sujets
+
+00:08:45.600 --> 00:08:46.880
+que j’avais promis de ne pas aborder,
+
+00:08:46.880 --> 00:08:50.000
+et je pense avoir tenu ma promesse.
+
+08:50.000 --> 00:08:51.600
+Il va y avoir des questions-réponses maintenant
+
+00:08:51.600 --> 00:08:52.517
+et j’ai aussi commencé
+
+00:08:52.517 --> 00:08:53.600
+un fil de discussion sur cette session
+
+00:08:53.600 --> 00:08:55.519
+samedi dernier, sur Reddit.
+
+08:55.519 --> 00:08:57.279
+Vous pouvez me trouver sur les listes emacs-help
+
+00:08:57.279 --> 00:08:59.200
+et emacs-devel,
+
+00:08:59.200 --> 00:09:00.480
+alors n’hésitez pas à m’envoyer
+
+00:09:00.480 --> 00:09:02.080
+vos questions et remarques.
+
+09:02.080 --> 09:06.760
+Merci encore, et à bientôt !
diff --git a/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_ja.vtt b/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_ja.vtt
new file mode 100644
index 00000000..8d159336
--- /dev/null
+++ b/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_ja.vtt
@@ -0,0 +1,892 @@
+WEBVTT
+
+00:01.280 --> 00:00:02.560
+皆さん、こんにちは。
+
+00:02.560 --> 00:00:04.400
+エラリー ジャンクリストフといいます。
+
+00:00:04.400 --> 00:00:05.680
+今日はEmacsのマニュアルの翻訳と
+
+00:00:05.680 --> 00:00:08.320
+OmegaTについてお話しします。
+
+00:00:08.320 --> 00:00:10.960
+セッションに参加いただき、ありがとうございます。
+
+00:10.960 --> 00:00:12.880
+自由ソフトウェアの世界では
+
+00:12.880 --> 00:00:15.040
+翻訳は本当に大きな意味を持ちます。
+
+00:15.040 --> 00:00:17.119
+ほとんどのLinuxディストリビューション、
+
+00:17.119 --> 00:00:18.720
+ソフトウェアパッケージ
+
+00:00:18.720 --> 00:00:19.920
+ウェブサイトが
+
+00:00:19.920 --> 00:00:22.320
+異なるプロセスやファイル形式を使い、
+
+00:00:22.320 --> 00:00:23.439
+多くのコミュニティによって
+
+00:23.439 --> 00:00:24.880
+翻訳されていることをすでにご存知でしょう。
+
+00:24.880 --> 00:00:27.359
+翻訳とローカライゼーションについては
+
+00:27.359 --> 00:00:29.599
+ノウハウと経験がかなり蓄積されています。
+
+00:29.599 --> 00:00:30.400
+しかし、Emacsコミュニティについては
+
+00:00:30.400 --> 00:00:32.160
+必ずしもそうではありません。
+
+00:32.160 --> 00:00:34.079
+色々と複雑で、
+
+00:34.079 --> 00:00:35.200
+またリソースがないため、
+
+00:00:35.200 --> 00:00:35.920
+ローカライゼーションプロセスが
+
+00:00:35.920 --> 00:00:37.600
+まだ確立していません。
+
+00:37.600 --> 00:00:39.920
+しかし、マニュアルの翻訳は可能ですし、
+
+00:00:39.920 --> 00:00:41.200
+マニュアルの翻訳によって、
+
+00:00:41.200 --> 00:00:42.399
+Emacsコミュニティ全体に
+
+00:00:42.399 --> 00:00:45.600
+多くの利益がもたらされるでしょう。
+
+00:45.600 --> 00:00:47.920
+では、マニュアルはどうなっているのでしょうか?
+
+00:47.920 --> 00:00:51.199
+今日現在、182のファイルが
+
+00:51.199 --> 00:00:54.160
+.texi や.org 形式で作成されています。
+
+00:54.160 --> 00:00:56.559
+単語数は200万以上です。
+
+00:56.559 --> 00:00:57.360
+文字数は、
+
+00:00:57.360 --> 00:00:59.039
+5000万以上です。
+
+00:00:59.039 --> 00:01:00.559
+これはかなりの量ですし、
+
+01:00.559 --> 00:01:04.559
+当然ながら、一人でできる仕事ではありません。
+
+01:04.559 --> 00:01:06.159
+.texi ファイルを開くと、
+
+00:01:06.159 --> 00:01:07.760
+何が出てくるのでしょうか?
+
+01:07.760 --> 00:01:09.439
+実は、翻訳者が翻訳する必要が
+
+01:09.439 --> 00:01:10.560
+ないものが
+
+00:01:10.560 --> 00:01:12.400
+たくさんあるのです。
+
+01:12.400 --> 00:01:13.680
+ここでは、一番最後の
+
+00:01:13.680 --> 00:01:15.040
+セグメント、一番最後の
+
+00:01:15.040 --> 00:01:16.400
+文だけが翻訳する
+
+00:01:16.400 --> 00:01:18.080
+必要があります。
+
+01:18.080 --> 00:01:19.360
+このようなメタ的なものは
+
+00:01:19.360 --> 00:01:20.240
+すべて翻訳者の目に
+
+00:01:20.240 --> 00:01:24.479
+触れる必要はありません。
+
+01:24.479 --> 00:01:26.720
+このような場合はどう対処すればいいのでしょうか?
+
+01:26.720 --> 00:01:27.680
+ソースファイルの場合、
+
+00:01:27.680 --> 00:01:29.360
+gettext というユーティリティーがあり、
+
+00:01:29.360 --> 00:01:30.640
+翻訳可能な文字列を
+
+00:01:30.640 --> 00:01:32.079
+翻訳可能な形式に変換します。
+
+00:01:32.079 --> 00:01:33.840
+それが .po 形式になります。
+
+01:33.840 --> 00:01:35.520
+この .po 形式はどこにでもあり、
+
+00:01:35.520 --> 00:01:36.400
+自由ではないソフトウェア
+
+00:01:36.400 --> 00:01:38.720
+翻訳業界でも広く使われています。
+
+01:38.720 --> 00:01:39.520
+ドキュメントについては
+
+00:01:39.520 --> 00:01:40.720
+別のツールがあります。
+
+00:01:40.720 --> 00:01:42.000
+po4a と呼ばれるもので、
+
+00:01:42.000 --> 00:01:45.119
+これは「po for all」の略です。
+
+01:45.119 --> 00:01:46.399
+po4aを182.texiと
+
+00:01:46.399 --> 00:01:49.200
+.org ファイルに用いると
+
+00:01:49.200 --> 00:01:50.479
+どうなるでしょうか?
+
+01:50.479 --> 00:01:52.640
+先ほどよりずっといいものができました。
+
+01:52.640 --> 00:01:54.799
+これで分節が3つができました。
+
+01:54.799 --> 00:01:55.759
+ご覧の通り、
+
+00:01:55.759 --> 00:01:56.399
+最初の2つの分節は
+
+00:01:56.399 --> 00:01:57.280
+翻訳の必要がないので、
+
+00:01:57.280 --> 00:01:58.880
+完璧ではありません。
+
+01:58.880 --> 00:01:59.520
+ですから、まだ
+
+00:01:59.520 --> 00:02:02.479
+改善の余地があります。
+
+02:02.479 --> 00:02:04.960
+さて、このファイルセットを
+
+00:02:04.960 --> 00:02:07.119
+OmegaTに入れると翻訳対象単語数が
+
+00:02:07.119 --> 00:02:08.800
+かなり減ります。
+
+02:08.800 --> 00:02:11.360
+単語数が50%、
+
+00:02:11.360 --> 00:02:14.239
+文字数が23%減りましたが、
+
+02:14.239 --> 00:02:15.680
+まだかなりの仕事量です。
+
+00:02:15.680 --> 00:02:17.599
+では、ここでOmegaTについて、
+
+00:02:17.599 --> 00:02:22.239
+そして、OmegaTがどこに役立つかを見てみましょう。
+
+02:22.239 --> 00:02:25.440
+OmegaTは、GPL3+ Java8+ のソフトで
+
+02:25.440 --> 00:02:27.599
+コンピューター支援翻訳ツールです。
+
+02:27.599 --> 00:02:29.440
+Computer Aided Translationと呼ばれます。
+
+02:29.440 --> 00:02:30.720
+CATは翻訳者にとって、
+
+00:02:30.720 --> 00:02:33.280
+プログラマーにとってのIDEのようなものです。
+
+02:33.280 --> 00:02:35.040
+CATは、コンピュータの力を利用して
+
+00:02:35.040 --> 00:02:36.480
+翻訳者の仕事を自動化します。
+
+00:02:36.480 --> 00:02:38.400
+例えば、参考翻訳の検索や
+
+00:02:38.400 --> 00:02:40.800
+ファジーマッチ、自動入力
+
+00:02:40.800 --> 00:02:44.080
+などのようなものです。
+
+02:44.080 --> 00:02:46.319
+OmegaTは最近のものありません。
+
+02:46.319 --> 00:02:48.319
+来年で20年になり、
+
+02:48.319 --> 00:02:48.959
+現時点では
+
+00:02:48.959 --> 00:02:51.440
+SourceForgeのサイトから
+
+00:02:51.440 --> 00:02:53.200
+150万件前後のダウンロードがあります。
+
+00:02:53.200 --> 00:02:54.080
+これにはローカライズや
+
+00:02:54.080 --> 00:02:55.040
+マニュアルに使用されるファイルが
+
+00:02:55.040 --> 00:02:56.480
+多少含まれるので、
+
+00:02:56.480 --> 00:02:57.920
+それほど意味はありませんが、
+
+00:02:57.920 --> 00:02:59.599
+それでもかなり大きな数字です。
+
+02:59.599 --> 00:03:00.720
+OmegaTは、多くのLinux
+
+00:03:00.720 --> 00:03:02.400
+ディストリビューションに含まれますが、
+
+00:03:02.400 --> 00:03:03.680
+ここで見られるように
+
+03:03.680 --> 00:03:05.920
+ほとんどがWindowsでダウンロードされています。
+
+00:03:05.920 --> 00:03:06.800
+なぜなら、翻訳者は
+
+00:03:06.800 --> 00:03:09.680
+ほとんどWindows上で作業しているからです。
+
+03:09.680 --> 00:03:11.120
+OmegaTにもかっこいいロゴと
+
+00:03:11.120 --> 00:03:12.080
+かっこいいサイトがあります。
+
+00:03:12.080 --> 00:03:13.920
+ぜひ一度ご覧ください。
+
+00:03:13.920 --> 00:03:16.159
+サイトはomegat.orgで、
+
+03:16.159 --> 00:03:17.280
+すべての必要な情報が見られます。
+
+00:03:17.280 --> 00:03:19.040
+また、Javaの有無の関わらず、
+
+00:03:19.040 --> 00:03:22.080
+Linuxバージョンもダウンロードできます。
+
+03:22.080 --> 00:03:24.799
+では、OmegaTによって何が変わるのでしょうか?
+
+03:24.799 --> 00:03:26.560
+プロの翻訳者が提供しなければいけないのは、
+
+03:26.560 --> 00:03:27.680
+速く、一貫性があり
+
+00:03:27.680 --> 00:03:29.519
+品質の高い翻訳です。
+
+03:29.519 --> 00:03:30.720
+それを実現するためには、
+
+00:03:30.720 --> 00:03:32.159
+適切なツールが必要です。
+
+00:03:32.159 --> 00:03:34.239
+po-modeがツールボックスの一部であればいいのですが、
+
+00:03:34.239 --> 00:03:35.120
+そうはなっていません。
+
+03:35.120 --> 00:03:36.560
+残念ながら。
+
+03:36.560 --> 00:03:39.760
+ですから、そのようなCATツールを使わなければなりません。
+
+03:39.760 --> 00:03:41.440
+このデモのために作成したプロジェクトを
+
+03:41.440 --> 00:03:43.120
+開くと、OmegaTがどのように表示されるか
+
+03:43.120 --> 00:03:45.200
+お見せしましょう。
+
+03:45.200 --> 00:03:46.640
+表示はかなりややこしいですが、
+
+00:03:46.640 --> 00:03:47.760
+実際には、必要に応じてすべての
+
+00:03:47.760 --> 00:03:49.519
+ウィンドウを変更できます。
+
+03:49.519 --> 00:03:50.400
+OmegaTがどんなものなのか
+
+00:03:50.400 --> 00:03:51.120
+理解していただくために
+
+00:03:51.120 --> 00:03:53.680
+一度にすべてをお見せしたいと思います。
+
+03:53.680 --> 00:03:55.200
+さまざまな色やウィンドウがあり、
+
+00:03:55.200 --> 00:03:55.920
+それらスペースには
+
+00:03:55.920 --> 00:03:57.120
+翻訳者を支援する
+
+03:57.120 --> 00:03:58.560
+さまざまな機能がありますが、
+
+00:03:58.560 --> 00:03:59.360
+皆さんにはあまり
+
+00:03:59.360 --> 00:04:02.879
+馴染みがないかもしれません。
+
+04:02.879 --> 00:04:04.080
+今からそのインターフェースを
+
+00:04:04.080 --> 00:04:05.680
+ご紹介します。
+
+04:05.680 --> 00:04:07.519
+まずは、エディターですね。
+
+04:07.519 --> 00:04:09.439
+エディターは2つの部分から成ります。
+
+04:09.439 --> 00:04:10.480
+番号に関連づけられた
+
+00:04:10.480 --> 00:04:12.319
+現在の分節と、
+
+00:04:12.319 --> 00:04:13.519
+もうひとつは上下にあるすべての
+
+00:04:13.519 --> 00:04:15.840
+分節です。
+
+04:15.840 --> 00:04:16.720
+ウィンドウの一番上には
+
+00:04:16.720 --> 00:04:18.720
+.poファイルにあった最初の3つの分節が
+
+00:04:18.720 --> 00:04:20.799
+表示されています。
+
+04:20.799 --> 00:04:22.880
+ここの最後の4つ目の分節には
+
+00:04:22.880 --> 00:04:28.720
+ファジーマッチが自動挿入されています。
+
+04:28.720 --> 00:04:30.880
+このようなレガシー翻訳は
+
+04:30.880 --> 00:04:32.720
+「翻訳メモリ」と呼ばれます。
+
+04:32.720 --> 00:04:35.280
+OmegaTがこれを自動挿入したのは、
+
+00:04:35.280 --> 00:04:37.120
+私がそうするように設定したからです。
+
+04:37.120 --> 00:04:38.560
+また、私自身のセキュリティのために、
+
+00:04:38.560 --> 00:04:40.639
+翻訳の検証のために
+
+00:04:40.639 --> 00:04:41.919
+削除しなければならない規定の
+
+00:04:41.919 --> 00:04:44.880
+[fuzzy] がついています。
+
+04:44.880 --> 00:04:47.919
+次の機能は、用語集機能です。
+
+04:47.919 --> 00:04:48.479
+今回のプロジェクトには
+
+00:04:48.479 --> 00:04:50.160
+たくさんの用語集データがあります。
+
+00:04:50.160 --> 00:04:52.560
+関連のあるものもあれば、そうでないものもあります。
+
+04:52.560 --> 00:04:53.919
+今翻訳している分節では
+
+00:04:53.919 --> 00:04:55.199
+下線が引かれた項目が
+
+00:04:55.199 --> 00:04:57.520
+あります。
+
+04:57.520 --> 00:04:59.040
+右側のポップアップメニューでは
+
+00:04:59.040 --> 00:05:02.240
+入力中に用語を入れることができます。
+
+05:02.240 --> 00:05:04.639
+これは自動挿入システムのようなもので、
+
+00:05:04.639 --> 00:05:07.039
+履歴予測や定型文などと
+
+00:05:07.039 --> 00:05:14.479
+いったような入力補完に対応しています。
+
+05:14.479 --> 00:05:15.440
+右側の部分には、
+
+00:05:15.440 --> 00:05:17.120
+.poと.texiのファイルから
+
+00:05:17.120 --> 00:05:18.240
+直接得られた
+
+00:05:18.240 --> 00:05:21.440
+参照情報があります。
+
+05:21.440 --> 00:05:23.440
+また、パートナーの翻訳者と
+
+00:05:23.440 --> 00:05:25.759
+共有できるメモもあり、
+
+05:25.759 --> 00:05:28.080
+翻訳完了までに
+
+00:05:28.080 --> 00:05:31.199
+あと143,000分節あることを示す
+
+00:05:31.199 --> 00:05:35.280
+数字も表示されています。
+
+05:35.280 --> 00:05:37.120
+しかし、どうしても
+
+05:37.120 --> 00:05:40.000
+入力したくない文字列がたくさんあります。
+
+05:40.000 --> 00:05:42.160
+例えば、これらの文字列は
+
+00:05:42.160 --> 00:05:43.840
+典型的な .texi の文字列で、
+
+00:05:43.840 --> 00:05:45.039
+翻訳者が入力する
+
+00:05:45.039 --> 00:05:46.479
+必要はありません。
+
+00:05:46.479 --> 00:05:47.360
+これについて
+
+00:05:47.360 --> 00:05:50.400
+どうにかしなければなりません。
+
+05:50.400 --> 00:05:51.600
+そのためには、正規表現を使い
+
+00:05:51.600 --> 00:05:52.479
+保護された文字列を作成し、
+
+00:05:52.479 --> 00:05:54.400
+ソース分節では
+
+05:54.400 --> 00:05:56.800
+文字列をすぐに視覚化し、
+
+00:05:56.800 --> 00:05:59.120
+ターゲット分節で
+
+05:59.120 --> 00:06:00.479
+半自動的に入力し、
+
+00:06:00.479 --> 00:06:01.680
+整合性を
+
+00:06:01.680 --> 00:06:04.479
+チェックできるようにしましょう。
+
+06:04.479 --> 00:06:06.479
+処理したい文字列を定義するのに
+
+06:06.479 --> 00:06:08.160
+考えた正規表現は
+
+00:06:08.160 --> 00:06:09.600
+このようなものです。
+
+06:09.600 --> 00:06:11.120
+正規表現のプロではないので、
+
+00:06:11.120 --> 00:06:13.360
+皆さんからのご指摘もあると思います。
+
+00:06:13.360 --> 00:06:14.560
+しかし、この表現は
+
+00:06:14.560 --> 00:06:15.919
+Orgモードの構文を
+
+00:06:15.919 --> 00:06:17.919
+まだ含んでいないにもかかわらず
+
+00:06:17.919 --> 00:06:20.960
+十分な定義になっています。
+
+06:20.960 --> 00:06:22.344
+これで、触ってはいけない
+
+00:06:22.344 --> 00:06:23.440
+.texi 特有のものが
+
+00:06:23.440 --> 00:06:24.960
+すべてグレーで
+
+06:24.960 --> 00:06:26.100
+表示されるようになりました。
+
+00:06:26.100 --> 00:06:27.680
+実は、お気づきかもしれませんが
+
+00:06:27.680 --> 00:06:28.479
+少しズルをしました。
+
+06:28.479 --> 00:06:30.319
+先ほどの正規表現に「年」と
+
+00:06:30.319 --> 00:06:32.000
+「Free Software Foundation」の名前を追加しました。
+
+00:06:32.000 --> 00:06:34.000
+なぜなら、どんな種類の文字列でも
+
+00:06:34.000 --> 00:06:35.520
+保護できることを
+
+00:06:35.520 --> 00:06:38.560
+示したかったからです。
+
+06:38.560 --> 00:06:39.520
+これで、
+
+00:06:39.520 --> 00:06:41.360
+触れたくない文字列を
+
+00:06:41.360 --> 00:06:43.440
+可視化することができましたが、
+
+06:43.440 --> 00:06:45.440
+それでもすべての文字列を翻訳に
+
+00:06:45.440 --> 00:06:46.880
+入力しなければなりません。
+
+06:46.880 --> 00:06:48.319
+そのために、先ほどの用語集で使った
+
+00:06:48.319 --> 00:06:50.400
+ポップアップメニューがあれば、
+
+00:06:50.400 --> 00:06:51.520
+編集メニューの中にも
+
+00:06:51.520 --> 00:06:52.400
+不足しているタグを
+
+00:06:52.400 --> 00:06:53.919
+簡単に挿入するための
+
+00:06:53.919 --> 00:06:57.199
+ショートカットも用意されています。
+
+06:57.199 --> 00:06:58.800
+最後に忘れてはならないのが
+
+00:06:58.800 --> 00:07:00.800
+入力の検証が可能なことです。
+
+00:07:00.800 --> 00:07:02.479
+ここで、OmegaTは7つの保護された文字列を
+
+00:07:02.479 --> 00:07:05.759
+見逃したことをきちんと見せてくれます。
+
+07:05.759 --> 00:07:07.599
+私は1998年だけを入力しましたが、
+
+00:07:07.599 --> 00:07:09.280
+5つの異なる年があり、
+
+00:07:09.280 --> 00:07:10.479
+著作権の文字列と
+
+00:07:10.479 --> 00:07:14.240
+FSF名の文字列がありました。
+
+07:14.240 --> 00:07:15.970
+この極めてネイティブに近い
+
+00:07:15.970 --> 00:07:16.960
+Texinfo対応により、
+
+00:07:16.960 --> 00:07:18.880
+入力するものがずっと少なくなり、
+
+07:18.880 --> 00:07:19.919
+エラーの可能性も
+
+00:07:19.919 --> 00:07:21.120
+ずっと低くなりました。
+
+00:07:21.120 --> 00:07:25.199
+とはいえ、まだまだ大変な作業であることは間違いありません。
+
+07:25.199 --> 00:07:26.319
+今、私たちが望んでいるのは、
+
+00:07:26.319 --> 00:07:27.840
+仲間の翻訳者と一緒に仕事をすることです。
+
+00:07:27.840 --> 00:07:28.720
+ここでわからないければならないのは、
+
+00:07:28.720 --> 00:07:29.840
+OmegaTが実際に隠れ
+
+00:07:29.840 --> 00:07:32.080
+svn/gitクライアントであり、
+
+00:07:32.080 --> 00:07:34.240
+チームプロジェクトがsvn/gitプラットフォームで
+
+07:34.240 --> 00:07:36.319
+ホスト可能であることです。
+
+07:36.319 --> 00:07:37.199
+翻訳者は、VCSについて
+
+00:07:37.199 --> 00:07:38.880
+何も知る必要はありません。
+
+00:07:38.880 --> 00:07:40.720
+ただ、アクセス認証を必要とし、
+
+00:07:40.720 --> 00:07:42.400
+OmegaTは翻訳者の代わりにコミットします。
+
+00:07:42.400 --> 00:07:44.080
+このようにして、
+
+00:07:44.080 --> 00:07:45.759
+醜くて不十分なウェブベースの
+
+00:07:45.759 --> 00:07:47.199
+翻訳システムを使う必要なく、
+
+00:07:47.199 --> 00:07:48.800
+強力なオフラインのプロフェッショナルツールを
+
+00:07:48.800 --> 00:07:51.440
+使うことができるのです。
+
+07:51.440 --> 00:07:52.479
+この翻訳プロジェクトを
+
+00:07:52.479 --> 00:07:54.160
+ホストしているプラットフォームを見ると、
+
+00:07:54.160 --> 00:07:55.919
+このように見えます。
+
+07:55.919 --> 00:07:57.199
+最後の更新は、このスライドを作成した
+
+00:07:57.199 --> 00:07:58.639
+20日と30秒前のもので、
+
+00:07:58.639 --> 00:08:00.720
+同じファイルセットで
+
+08:00.720 --> 00:08:02.479
+一緒に作業したパートナーが
+
+00:08:02.479 --> 00:08:04.639
+いたことがわかります。
+
+08:04.639 --> 00:08:05.520
+私たちは翻訳をプラットフォームに
+
+00:08:05.520 --> 00:08:06.879
+コミットしたように見えますが、
+
+00:08:06.879 --> 00:08:07.680
+それは私たちでなく、
+
+00:08:07.680 --> 00:08:11.039
+OmegaTでした。
+
+00:08:11.039 --> 00:08:13.599
+すべての面倒臭い仕事はOmegaTが行います。
+
+08:13.599 --> 00:08:15.039
+定期的にサーバーに保存し、
+
+00:08:15.039 --> 00:08:16.879
+サーバーから同期します。
+
+08:16.879 --> 00:08:18.720
+翻訳者は、仲間の翻訳した内容を
+
+08:18.720 --> 00:08:20.479
+定期的に得られます。
+
+00:08:20.479 --> 00:08:21.680
+そして必要に応じて
+
+00:08:21.680 --> 00:08:23.360
+OmegaTは、簡単な
+
+00:08:23.360 --> 00:08:25.440
+コンフリクト解決のためのウインドーを表示します。
+
+08:25.440 --> 00:08:27.039
+翻訳者は、svnやgitを使って
+
+08:27.039 --> 00:08:29.360
+何かをする必要はありません。
+
+08:29.360 --> 00:08:30.800
+そして今、私たちは、
+
+00:08:30.800 --> 00:08:31.599
+マニュアルが翻訳され、
+
+00:08:31.599 --> 00:08:33.120
+最終的にはEmacsに含まれるという
+
+00:08:33.120 --> 00:08:34.159
+そう遠くはない未来を
+
+00:08:34.159 --> 00:08:35.279
+思い描くことができますが、
+
+00:08:35.279 --> 00:08:36.080
+それはこのプレゼンテーションとは
+
+00:08:36.080 --> 00:08:39.760
+別の話になります。
+
+08:39.760 --> 00:08:42.080
+というわけで、セッションの終わりになりました。
+
+08:42.080 --> 00:08:44.240
+ご参加いただいた皆様、本当にありがとうございました。
+
+08:44.240 --> 00:08:45.600
+たくさんのトピックについて
+
+00:08:45.600 --> 00:08:46.880
+触れないと約束しましたが、
+
+00:08:46.880 --> 00:08:50.000
+約束は守れたのではないでしょうか。
+
+08:50.000 --> 00:08:51.600
+Q&Aもありますが、
+
+00:08:51.600 --> 00:08:52.517
+実は、先週の土曜日に
+
+00:08:52.517 --> 00:08:53.600
+Redditでこのセッションに関するスレッドも
+
+00:08:53.600 --> 00:08:55.519
+立ち上げました。
+
+08:55.519 --> 00:08:57.279
+emacs-helpやemacs-develのメーリングリストでも
+
+00:08:57.279 --> 00:08:59.200
+私の名前を見つけることができますので、
+
+00:08:59.200 --> 00:09:00.480
+ご質問やご意見がありましたら、
+
+00:09:00.480 --> 00:09:02.080
+遠慮なくお寄せください。
+
+09:02.080 --> 09:06.760
+それでは、またお会いしましょう。
diff --git a/2021/captions/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.vtt b/2021/captions/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.vtt
new file mode 100644
index 00000000..2884b0c8
--- /dev/null
+++ b/2021/captions/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.vtt
@@ -0,0 +1,770 @@
+WEBVTT
+
+00:05.520 --> 00:08.170
+Hello. My name is Karl Voit,
+
+00:08.170 --> 00:11.360
+and I've spent the last decade
+
+00:11.360 --> 00:13.040
+working with Emacs Org Mode
+
+00:13.040 --> 00:15.280
+as my main organization system
+
+00:15.280 --> 00:16.880
+for my use cases,
+
+00:16.880 --> 00:19.760
+and I would like to take this opportunity
+
+00:19.760 --> 00:22.480
+and point out a subtle issue we've had
+
+00:22.480 --> 00:25.359
+in many different discussions around Org Mode,
+
+00:25.359 --> 00:27.519
+which itself stands for
+
+00:27.519 --> 00:29.679
+quite different kind of things.
+
+00:29.679 --> 00:31.760
+On the one hand side,
+
+00:31.760 --> 00:34.640
+Org Mode is an implementation in Elisp
+
+00:34.640 --> 00:36.559
+on the Emacs platform,
+
+00:36.559 --> 00:38.480
+and on the other hand side,
+
+00:38.480 --> 00:42.960
+Org Mode is also a lightweight markup language
+
+00:42.960 --> 00:45.760
+which we use to express things:
+
+00:45.760 --> 00:47.440
+how headings are marked,
+
+00:47.440 --> 00:49.840
+how text is made boldface,
+
+00:49.840 --> 00:51.680
+how external links are written,
+
+00:51.680 --> 01:01.920
+and so forth, in text documents.
+
+01:01.920 --> 01:03.920
+From my own experience,
+
+01:03.920 --> 01:05.920
+from many different online discussions,
+
+01:05.920 --> 01:09.600
+I once wrote a blog article on my web page
+
+01:09.600 --> 01:11.760
+that summarizes why I do think
+
+01:11.760 --> 01:13.200
+that Org Mode is superior
+
+01:13.200 --> 01:16.000
+to other well-known lightweight markup languages
+
+01:16.000 --> 01:21.040
+such as Markdown, AsciiDoc, reStructuredText and more.
+
+01:21.040 --> 01:23.360
+My main points in this article were that
+
+01:23.360 --> 01:25.040
+Org Mode is an intuitive
+
+01:25.040 --> 01:28.000
+and easy to learn and remember markup.
+
+01:28.000 --> 01:29.360
+It is standardized,
+
+01:29.360 --> 01:31.439
+as in the Emacs implementation
+
+01:31.439 --> 01:32.799
+defines the current standard,
+
+01:32.799 --> 01:35.360
+and there is no different Org mode version
+
+01:35.360 --> 01:38.159
+out there which conflicts with that.
+
+01:38.159 --> 01:41.040
+Org Mode is consistent
+
+01:41.040 --> 01:44.159
+within its markup language design.
+
+01:44.159 --> 01:48.640
+Org Mode can be easily typed in any text-based tool,
+
+01:48.640 --> 01:53.280
+and Org Mode makes much sense outside of Emacs,
+
+01:53.280 --> 01:55.360
+so that you can use it, for example,
+
+01:55.360 --> 01:58.719
+in email clients or in other text documents
+
+01:58.719 --> 02:01.040
+not interpreting the markup at all.
+
+02:01.040 --> 02:03.280
+And of course, if you want,
+
+02:03.280 --> 02:06.640
+you can have the perfect tool support within Emacs
+
+02:06.640 --> 02:13.760
+and other software tools.
+
+02:13.760 --> 02:15.440
+This naming issue,
+
+02:15.440 --> 02:18.560
+using one name for two different kind of things,
+
+02:18.560 --> 02:22.239
+arises in discussions about the markup's support
+
+02:22.239 --> 02:24.560
+in non-Emacs tools and services,
+
+02:24.560 --> 02:27.440
+in questions on levels of compatibility
+
+02:27.440 --> 02:30.080
+in comparison to the large and huge
+
+02:30.080 --> 02:32.959
+amount of functionality within Emacs,
+
+02:32.959 --> 02:36.319
+and so forth.
+
+02:36.319 --> 02:38.000
+In order to find a solution
+
+02:38.000 --> 02:40.160
+to some of those issues,
+
+02:40.160 --> 02:44.480
+I propose a different name. A new idea.
+
+02:44.480 --> 02:47.360
+A definition for the lightweight markup language,
+
+02:47.360 --> 02:51.200
+and the lightweight markup language alone.
+
+02:51.200 --> 02:54.000
+A new standard, which, by the way,
+
+02:54.000 --> 02:57.680
+reminds me on something here...
+
+02:57.680 --> 03:05.200
+Anyway...
+
+03:05.200 --> 03:06.640
+So we need a different name
+
+03:06.640 --> 03:08.159
+for this new thing,
+
+03:08.159 --> 03:09.840
+and its feature set needs to be
+
+03:09.840 --> 03:11.760
+something good enough
+
+03:11.760 --> 03:14.000
+to help adapting Org Mode syntax
+
+03:14.000 --> 03:16.560
+outside of the Emacs universe.
+
+03:16.560 --> 03:19.760
+It can't be the whole set of Org Mode features.
+
+03:19.760 --> 03:21.680
+This would kill the idea instantly,
+
+03:21.680 --> 03:23.519
+because everything that is going
+
+03:23.519 --> 03:24.720
+into that direction
+
+03:24.720 --> 03:26.959
+would be compared to our golden standards,
+
+03:26.959 --> 03:29.280
+the Emacs implementation of Org Mode,
+
+03:29.280 --> 03:31.120
+which cannot be compared
+
+03:31.120 --> 03:33.599
+to anything else at this time.
+
+03:33.599 --> 03:37.040
+So it needs to be somehow less than Org Mode.
+
+03:37.040 --> 03:41.040
+It needs to be recognizable in non-Emacs circles,
+
+03:41.040 --> 03:42.720
+and it should remind people
+
+03:42.720 --> 03:43.920
+on similar things
+
+03:43.920 --> 03:45.760
+in order to be something
+
+03:45.760 --> 03:49.760
+somewhat self-explanatory as a term.
+
+03:49.760 --> 03:54.000
+Hereby, I propose the name Orgdown
+
+03:54.000 --> 03:56.000
+for this thing, and it's launched
+
+03:56.000 --> 04:06.239
+with my Emacs Conference talk 2021.
+
+04:06.239 --> 04:09.360
+So what should Orgdown be?
+
+04:09.360 --> 04:11.439
+It should be a subset of Org Mode
+
+04:11.439 --> 04:14.400
+lightweight markup language syntax.
+
+04:14.400 --> 04:17.120
+It should be a definition of
+
+04:17.120 --> 04:18.880
+Org-Mode-based entities
+
+04:18.880 --> 04:20.880
+that do make sense on their own
+
+04:20.880 --> 04:22.720
+which is, in any case,
+
+04:22.720 --> 04:26.320
+always a compromise of some sort, of course.
+
+04:26.320 --> 04:29.919
+It needs to be extensible for different purposes
+
+04:29.919 --> 04:32.560
+to ensure future-proofness,
+
+04:32.560 --> 04:33.600
+and it needs to have
+
+04:33.600 --> 04:35.919
+a formal definition of Org Mode,
+
+04:35.919 --> 04:39.680
+which helps in becoming a new standard.
+
+04:39.680 --> 04:42.160
+it needs to be a self-sustaining community
+
+04:42.160 --> 04:45.040
+that supports the process by documentation
+
+04:45.040 --> 04:48.320
+and connecting people to other people,
+
+04:48.320 --> 04:52.080
+to the documentation, and to tools.
+
+04:52.080 --> 04:54.800
+What Orgdown should never be
+
+04:54.800 --> 04:57.280
+is something that's incompatible
+
+04:57.280 --> 04:59.759
+with Org Mode within Emacs,
+
+04:59.759 --> 05:08.560
+and some kind of Org Mode replacement, of course.
+
+05:08.560 --> 05:12.160
+The advantages of Orgdown for everybody
+
+05:12.160 --> 05:16.800
+includes better Org support in non-Emacs tools;
+
+05:16.800 --> 05:19.759
+to promote the beautifully crafted Org Mode syntax
+
+05:19.759 --> 05:21.520
+to a larger set of people,
+
+05:21.520 --> 05:23.759
+even outside of Emacs, of course;
+
+05:23.759 --> 05:26.560
+to push better support for the collaboration
+
+05:26.560 --> 05:28.800
+for Emacs and non-Emacs users
+
+05:28.800 --> 05:31.759
+for using text-based documents;
+
+05:31.759 --> 05:34.880
+finally, fix the irritating mix-up of
+
+05:35.919 --> 05:37.600
+markup language support
+
+05:37.600 --> 05:41.680
+and its Elisp implementation.
+
+05:41.680 --> 05:44.000
+I already mentioned briefly the need for
+
+05:44.000 --> 05:47.039
+a definition and extensibility.
+
+05:47.039 --> 05:48.960
+Therefore I came up with the idea
+
+05:48.960 --> 05:52.320
+of having different levels of Orgdown,
+
+05:52.320 --> 05:56.400
+and the first and most basic level of Orgdown
+
+05:56.400 --> 06:05.600
+is called Orgdown1.
+
+06:05.600 --> 06:09.759
+Orgdown1, or in short, OD1, consists of
+
+06:09.759 --> 06:11.759
+a small set of Org-Mode-based features
+
+06:11.759 --> 06:15.759
+such as simple text formatting, headings, lists,
+
+06:15.759 --> 06:19.520
+and checkboxes, example, quote, and source blocks,
+
+06:19.520 --> 06:22.479
+comments, external web links,
+
+06:22.479 --> 06:25.280
+tables without calculations.
+
+06:25.280 --> 06:27.120
+I tried to find a compromise
+
+06:27.120 --> 06:29.199
+that should work with most people
+
+06:29.199 --> 06:31.600
+starting with any lightweight markup
+
+06:31.600 --> 06:39.759
+that is based on Emacs Org Mode.
+
+06:39.759 --> 06:41.199
+In order to get a measure
+
+06:41.199 --> 06:43.759
+on how well Orgdown1 is supported
+
+06:43.759 --> 06:45.919
+by one specific tool,
+
+06:45.919 --> 06:47.759
+I came up with an OD1
+
+06:47.759 --> 06:51.199
+compatibility percentage index.
+
+06:51.199 --> 06:54.080
+43 easy-to-check features such as:
+
+06:54.080 --> 06:56.800
+does it support highlighting of bold text
+
+06:56.800 --> 06:59.039
+using single asterisks?
+
+06:59.039 --> 07:00.800
+Each feature can be supported
+
+07:00.800 --> 07:02.880
+in a basic way (one point)
+
+07:02.880 --> 07:06.319
+or in an advanced way (two points).
+
+07:06.319 --> 07:08.319
+One point means it basically
+
+07:08.319 --> 07:10.080
+doesn't interfere with the tool
+
+07:10.080 --> 07:12.000
+in any negative way.
+
+07:12.000 --> 07:14.479
+Two points means that it provides
+
+07:14.479 --> 07:16.720
+active syntax highlighting, for example,
+
+07:16.720 --> 07:18.479
+or even tool-supported features
+
+07:18.479 --> 07:22.960
+like shortcuts to insert elements and such.
+
+07:22.960 --> 07:24.880
+Summing up those two levels
+
+07:24.880 --> 07:27.280
+for all those 43 features
+
+07:27.280 --> 07:28.479
+result in a number
+
+07:28.479 --> 07:29.919
+that can be compared
+
+07:29.919 --> 07:32.319
+to the maximum level there is,
+
+07:32.319 --> 07:36.319
+which results in a given percentage.
+
+07:36.319 --> 07:37.919
+By definition,
+
+07:37.919 --> 07:40.479
+Emacs provides full support
+
+07:40.479 --> 07:43.360
+of all Orgdown levels,
+
+07:43.360 --> 07:45.360
+and most tools support
+
+07:45.360 --> 07:48.240
+at least fifty percent of Orgdown1
+
+07:48.240 --> 07:50.400
+as long as Orgdown1 syntax
+
+07:50.400 --> 07:52.720
+doesn't result in some markup conflict
+
+07:52.720 --> 07:57.039
+or tooling conflict or whatever.
+
+07:57.039 --> 07:58.560
+This emphasizes the idea
+
+07:58.560 --> 08:01.360
+that Orgdown can and should be used
+
+08:01.360 --> 08:04.879
+for personal notes anywhere and in general domains,
+
+08:04.879 --> 08:07.919
+just like writing emails, for example.
+
+08:07.919 --> 08:10.000
+I guess the majority of tools
+
+08:10.000 --> 08:12.720
+with a certain support for Orgdown1
+
+08:12.720 --> 08:18.080
+will be in the area of 80s and 90s, percentwise.
+
+08:18.080 --> 08:20.639
+If Orgdown1 is not enough,
+
+08:20.639 --> 08:22.400
+there will be future definitions
+
+08:22.400 --> 08:24.960
+of Orgdown2, 3, or higher
+
+08:24.960 --> 08:27.599
+which will take more and more syntax elements
+
+08:27.599 --> 08:29.039
+from the Org Mode syntax
+
+08:29.039 --> 08:30.479
+and integrate it into
+
+08:30.479 --> 08:39.519
+the domain of Orgdown.
+
+08:39.519 --> 08:42.000
+So far, Orgdown1 is described
+
+08:42.000 --> 08:43.599
+on a public GitLab page
+
+08:43.599 --> 08:45.920
+which has already documentation
+
+08:45.920 --> 08:48.399
+on how to learn Orgdown,
+
+08:48.399 --> 08:50.560
+some syntax examples,
+
+08:50.560 --> 08:51.839
+frequently asked questions,
+
+08:51.839 --> 08:54.240
+and of course, with their answers,
+
+08:54.240 --> 08:55.920
+a collection of tools
+
+08:55.920 --> 08:59.279
+that already do support Orgdown in some way,
+
+08:59.279 --> 09:01.040
+and a few of them did already
+
+09:01.040 --> 09:02.640
+get evaluated by me
+
+09:02.640 --> 09:05.920
+and got their OD1 compatibility percentage
+
+09:05.920 --> 09:07.279
+in a table.
+
+09:07.279 --> 09:09.839
+Some ideas on how people can contribute
+
+09:09.839 --> 09:11.040
+to this new standard
+
+09:11.040 --> 09:13.839
+is also part of this new site.
+
+09:13.839 --> 09:17.200
+And of course, now I need your help
+
+09:17.200 --> 09:19.519
+in order to make this a success story
+
+09:19.519 --> 09:28.880
+for Org Mode and of course Orgdown.
+
+09:28.880 --> 09:31.360
+So please do contribute
+
+09:31.360 --> 09:33.279
+to the GitLab project pages
+
+09:33.279 --> 09:38.000
+and add tools and their Orgdown1-compatible percentages.
+
+09:38.000 --> 09:40.800
+For example, a template file is provided,
+
+09:40.800 --> 09:41.839
+of course.
+
+09:41.839 --> 09:43.680
+Please do add more parsers.
+
+09:43.680 --> 09:46.320
+Please use the term Orgdown1
+
+09:46.320 --> 09:48.080
+to label tool properties
+
+09:48.080 --> 09:49.440
+for your own stuff
+
+09:49.440 --> 09:51.760
+and so that people do realize
+
+09:51.760 --> 09:53.839
+that your tools are already supporting
+
+09:53.839 --> 09:56.800
+this general use case of Org Mode.
+
+09:56.800 --> 09:58.640
+And there is no need to support
+
+09:58.640 --> 09:59.680
+all the Org Mode
+
+09:59.680 --> 10:02.160
+in order to profit from Org Mode syntax
+
+10:02.160 --> 10:04.320
+with Orgdown.
+
+10:04.320 --> 10:05.839
+You can spread the idea
+
+10:05.839 --> 10:07.279
+by promoting Orgdown
+
+10:07.279 --> 10:08.480
+as a separate term
+
+10:08.480 --> 10:09.680
+compared to Org Mode
+
+10:09.680 --> 10:11.279
+and its mixed up definition
+
+10:11.279 --> 10:21.279
+with the Org Mode Elisp implementation.
+
+10:21.279 --> 10:23.120
+And in case that Orgdown
+
+10:23.120 --> 10:24.880
+really resonates with you,
+
+10:24.880 --> 10:26.959
+you can add a formal specification
+
+10:26.959 --> 10:29.279
+to the GitLab project of Orgdown.
+
+10:29.279 --> 10:30.480
+I guess that some of the
+
+10:30.480 --> 10:33.040
+existing formal definitions of Org Mode
+
+10:33.040 --> 10:35.760
+already do qualify for Orgdown1
+
+10:35.760 --> 10:37.920
+by stripping down to the few things
+
+10:37.920 --> 10:41.279
+Orgdown1 is concentrating on.
+
+10:41.279 --> 10:42.720
+You can create, for example,
+
+10:42.720 --> 10:45.760
+a language server protocol for Orgdown1
+
+10:45.760 --> 10:48.000
+which would multiply the possibilities
+
+10:48.000 --> 10:50.000
+for adapting Orgdown1
+
+10:50.000 --> 10:51.760
+in all kinds of editors
+
+10:51.760 --> 11:00.880
+by giving syntax highlighting, for example.
+
+11:00.880 --> 11:03.200
+And you may find the idea intriguing
+
+11:03.200 --> 11:07.440
+that Orgdown1 is a perfect markup language candidate
+
+11:07.440 --> 11:09.920
+for the Gemini project,
+
+11:09.920 --> 11:11.200
+which would be, in short,
+
+11:11.200 --> 11:14.240
+a linked web of plain Orgdown1 files
+
+11:14.240 --> 11:16.160
+that form a parallel internet
+
+11:16.160 --> 11:17.839
+without advertisements,
+
+11:17.839 --> 11:20.880
+malware-bloated web pages, and so forth.
+
+11:20.880 --> 11:22.160
+It's concentrating
+
+11:22.160 --> 11:23.920
+on the essential value of information
+
+11:23.920 --> 11:26.399
+in form of simple text files
+
+11:26.399 --> 11:29.279
+and links to other simple text files.
+
+11:29.279 --> 11:39.760
+I would love to see this.
+happen someday
+
+11:39.760 --> 11:42.560
+In the meantime, let's kick-start Orgdown
+
+11:42.560 --> 11:45.120
+with Orgdown1 as the first level.
+
+11:45.120 --> 11:46.880
+Visit the GitLab page,
+
+11:46.880 --> 11:49.600
+hand in improvements for the linked tool sections,
+
+11:49.600 --> 11:52.240
+and spread the brilliant markup design
+
+11:52.240 --> 11:52.880
+of Org Mode,
+
+11:52.880 --> 11:56.000
+using Orgdown as a well-defined
+
+11:56.000 --> 11:57.839
+new standard.
+
+11:57.839 --> 12:01.079
+Thank you.
diff --git a/2021/captions/emacsconf-2021-pattern--edit--main.vtt b/2021/captions/emacsconf-2021-pattern--edit--main.vtt
new file mode 100644
index 00000000..ecff1823
--- /dev/null
+++ b/2021/captions/emacsconf-2021-pattern--edit--main.vtt
@@ -0,0 +1,13 @@
+WEBVTT
+
+00:00.000 --> 06:13.400
+#+START: 00:00:00.000
+#+END: 00:06:13.400
+#+VIDEO_SUBTITLES: 1
+[[file:emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.webm]]
+
+06:55.120 --> 23:43.480
+#+START: 00:06:55.120
+#+END: 00:23:43.480
+#+VIDEO_SUBTITLES: 1
+[[file:emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.webm]]
diff --git a/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--chapters.vtt b/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--chapters.vtt
new file mode 100644
index 00000000..33525c96
--- /dev/null
+++ b/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--chapters.vtt
@@ -0,0 +1,25 @@
+WEBVTT
+
+00:00.000 --> 01:16.239
+Introduction
+
+01:16.240 --> 05:18.799
+Definition of design patterns and relation to Emacs
+
+05:18.800 --> 09:12.239
+Why this approach matters
+
+09:12.240 --> 11:29.999
+Managing complexity: Emacs as mind map
+
+11:30.000 --> 12:31.679
+Emacs as design pattern framework
+
+12:31.680 --> 13:30.638
+Personal customization
+
+13:30.639 --> 16:41.998
+Implementing Emacs as a model for learning
+
+16:41.999 --> 23:00.920
+Emacs as accommodating complex social, community assemblages
diff --git a/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main--chapters.vtt b/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main--chapters.vtt
new file mode 100644
index 00000000..33525c96
--- /dev/null
+++ b/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main--chapters.vtt
@@ -0,0 +1,25 @@
+WEBVTT
+
+00:00.000 --> 01:16.239
+Introduction
+
+01:16.240 --> 05:18.799
+Definition of design patterns and relation to Emacs
+
+05:18.800 --> 09:12.239
+Why this approach matters
+
+09:12.240 --> 11:29.999
+Managing complexity: Emacs as mind map
+
+11:30.000 --> 12:31.679
+Emacs as design pattern framework
+
+12:31.680 --> 13:30.638
+Personal customization
+
+13:30.639 --> 16:41.998
+Implementing Emacs as a model for learning
+
+16:41.999 --> 23:00.920
+Emacs as accommodating complex social, community assemblages
diff --git a/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt b/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt
new file mode 100644
index 00000000..831895e5
--- /dev/null
+++ b/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt
@@ -0,0 +1,1876 @@
+WEBVTT
+
+00:01.040 --> 00:03.520
+Welcome to this EmacsConf 2021 talk
+
+00:03.520 --> 00:06.160
+on Emacs as Design Pattern Learning.
+
+00:06.160 --> 00:08.400
+I'm Greta Goetz, and this talk
+
+00:08.400 --> 00:10.080
+is for people who are interested
+
+00:10.080 --> 00:11.679
+in thinking about Emacs
+
+00:11.679 --> 00:13.840
+as a tool that's sophisticated enough
+
+00:13.840 --> 00:17.680
+not only to cope with activities and tasks,
+
+00:17.680 --> 00:19.760
+but also sophisticated enough
+
+00:19.760 --> 00:22.560
+to cater to a complex assemblage
+
+00:22.560 --> 00:24.000
+of [not just] tasks and activities,
+
+00:24.000 --> 00:26.160
+but also people, outcomes,
+
+00:26.160 --> 00:27.760
+as well as tools.
+
+00:27.760 --> 00:31.039
+This is a definition of epistemic fluency
+
+00:31.039 --> 00:33.440
+from a work by Markauskaite and Goodyear
+
+00:33.440 --> 00:35.040
+that is relevant to us
+
+00:35.040 --> 00:36.320
+if we're interested in
+
+00:36.320 --> 00:37.600
+learning how to learn [and]
+
+00:37.600 --> 00:39.840
+how to continuously iterate knowledge
+
+00:39.840 --> 00:44.480
+to fit changing complex specific contexts.
+
+00:44.480 --> 00:46.719
+Some software oversimplifies.
+
+00:46.719 --> 00:49.039
+Emacs both helps users
+
+00:49.039 --> 00:50.559
+implement design pattern learning
+
+00:50.559 --> 00:53.360
+that can cope with complexity,
+
+00:53.360 --> 00:57.360
+and it models complex design pattern learning.
+
+00:57.360 --> 00:59.920
+So, what do we mean by design patterns?
+
+00:59.920 --> 01:03.120
+The term comes from design theorist and
+
+01:03.120 --> 01:05.199
+architect Christopher Alexander,
+
+01:05.199 --> 01:06.400
+whose work influenced
+
+01:06.400 --> 01:08.479
+a broad variety of disciplines.
+
+01:08.479 --> 01:11.680
+I'll be drawing on a work in programming
+
+01:11.680 --> 01:14.240
+by Richard Gabriel, and in pedagogy,
+
+01:14.240 --> 01:16.239
+by Peter Goodyear.
+
+01:16.240 --> 01:17.920
+What are design patterns?
+
+01:17.920 --> 01:20.159
+They are patterns of micro solutions
+
+01:20.159 --> 01:22.560
+combining method and artifact,
+
+01:22.560 --> 01:24.080
+and macro solutions
+
+01:24.080 --> 01:25.680
+of these micro patterns
+
+01:25.680 --> 01:27.680
+when viewed together.
+
+01:27.680 --> 01:29.280
+This approach allows for the
+
+01:29.280 --> 01:31.840
+specialization, customization,
+
+01:31.840 --> 01:35.600
+extension, and reuse of patterns.
+
+01:35.600 --> 01:37.360
+This is useful if we're seeking to
+
+01:37.360 --> 01:40.079
+deal with complexity. It helps extend
+
+01:40.079 --> 01:42.560
+the assemblage of learning components
+
+01:42.560 --> 01:45.040
+that we have, without having to build
+
+01:45.040 --> 01:46.640
+from scratch.
+
+01:46.640 --> 01:48.320
+Another important feature
+
+01:48.320 --> 01:49.520
+of design patterns
+
+01:49.520 --> 01:51.759
+and their relevance to Emacs
+
+01:51.759 --> 01:54.799
+is the human-centeredness.
+
+01:54.799 --> 01:57.360
+Christopher Alexander critiqued
+
+01:57.360 --> 01:58.320
+the mechanical
+
+01:58.320 --> 02:00.880
+and championed the human place.
+
+02:00.880 --> 02:03.439
+Emacs, too, champions the human place.
+
+02:03.439 --> 02:06.079
+So why Emacs and design learning?
+
+02:06.079 --> 02:09.679
+One reason is indeed this extensibility
+
+02:09.679 --> 02:13.360
+through Emacs, which allows a person
+
+02:13.360 --> 02:16.720
+to extend their learning and use of Emacs
+
+02:16.720 --> 02:18.800
+as far as they wish to take it.
+
+02:18.800 --> 02:22.959
+This is thanks to its free software core,
+
+02:22.959 --> 02:24.720
+and this permits what we call
+
+02:24.720 --> 02:25.843
+in networked learning
+
+02:25.843 --> 02:27.040
+'e-quality' [cf. Beaty et al.],
+
+02:27.040 --> 02:28.160
+which is to say,
+
+02:28.160 --> 02:31.120
+the opportunity to co-create knowledge.
+
+02:31.120 --> 02:32.959
+So if one wishes to extend
+
+02:32.959 --> 02:35.120
+their learning trajectory with Emacs
+
+02:35.120 --> 02:37.120
+such that they're able to
+
+02:37.120 --> 02:38.560
+write packages for Emacs,
+
+02:38.560 --> 02:41.040
+if these packages become part of the core,
+
+02:41.040 --> 02:43.440
+they're really co-creating knowledge
+
+02:43.440 --> 02:44.879
+within the community
+
+02:44.879 --> 02:48.800
+and extending the capabilities of Emacs.
+
+02:48.800 --> 02:50.480
+Emacs can also be considered
+
+02:50.480 --> 02:52.319
+in terms of design pattern learning,
+
+02:52.319 --> 02:53.440
+because it can be used
+
+02:53.440 --> 02:54.800
+for different purposes.
+
+02:54.800 --> 02:57.280
+This is true even at the very basic level
+
+02:57.280 --> 02:58.959
+of Emacs functionalities,
+
+02:58.959 --> 02:59.920
+which is a point
+
+02:59.920 --> 03:01.280
+that should really be stressed.
+
+03:01.280 --> 03:03.680
+So even newcomers coming to Emacs
+
+03:03.680 --> 03:04.879
+who don't know programming
+
+03:04.879 --> 03:07.040
+can do a very broad variety
+
+03:07.040 --> 03:09.040
+of different things with their Emacs,
+
+03:09.040 --> 03:11.760
+using these basic functionalities:
+
+03:11.760 --> 03:14.800
+for example, simply by customizing
+
+03:14.800 --> 03:15.840
+the language variable
+
+03:15.840 --> 03:17.923
+in the initialization file.
+
+03:17.923 --> 03:20.879
+This, thanks to the powerful Emacs Lisp
+
+03:20.879 --> 03:22.640
+interpreter, makes it possible for one
+
+03:22.640 --> 03:24.640
+to do a wide variety of different things
+
+03:24.640 --> 03:26.560
+within Emacs: from making graphs
+
+03:26.560 --> 03:29.360
+to exporting in LaTeX.
+
+03:29.360 --> 03:32.000
+And also part of the Emacs basic
+
+03:32.000 --> 03:34.239
+functionalities are
+
+03:34.239 --> 03:36.159
+how we can cycle through
+
+03:36.159 --> 03:38.400
+different tasks and texts very easily
+
+03:38.400 --> 03:40.000
+through buffer cycling,
+
+03:40.000 --> 03:44.640
+or how within Org we can use tree outlines
+
+03:44.640 --> 03:48.159
+that can hierarchize the material
+
+03:48.159 --> 03:49.519
+that we're working with
+
+03:49.519 --> 03:52.080
+and even change a headline
+
+03:52.080 --> 03:54.799
+into a to-do. So we see this extensibility,
+
+03:54.799 --> 03:57.280
+this flexibility. Also, within Org,
+
+03:57.280 --> 03:58.799
+we can see how by writing
+
+03:58.799 --> 04:00.159
+just a few lines of code
+
+04:00.159 --> 04:02.239
+such as through header arguments
+
+04:02.239 --> 04:04.879
+or code blocks, we can change the way
+
+04:04.879 --> 04:06.159
+in which a file,
+
+04:06.159 --> 04:08.480
+or part of a file, is executed.
+
+04:08.480 --> 04:10.239
+An illustration of what this means
+
+04:10.239 --> 04:12.720
+to the beginner would be how easy it is
+
+04:12.720 --> 04:15.280
+to export a LaTeX file,
+
+04:15.280 --> 04:17.040
+so one doesn't even need to know
+
+04:17.040 --> 04:19.199
+all of LaTeX to be able to implement
+
+04:19.199 --> 04:23.360
+parts of LaTeX within Org. So this
+
+04:23.360 --> 04:25.280
+variety of different purposes, then,
+
+04:25.280 --> 04:27.600
+can be experienced by the beginner.
+
+04:27.600 --> 04:30.400
+Emacs is also an example
+
+04:30.400 --> 04:32.080
+of design pattern learning
+
+04:32.080 --> 04:34.320
+because it is a design pattern
+
+04:34.320 --> 04:35.919
+of learning itself.
+
+04:35.919 --> 04:39.040
+Here we're thinking about design patterns
+
+04:39.040 --> 04:41.919
+as a visual representation.
+
+04:41.919 --> 04:44.320
+We can think of how systems of systems,
+
+04:44.320 --> 04:47.680
+which Emacs is an example of,
+
+04:47.680 --> 04:50.560
+stem from a successful center,
+
+04:50.560 --> 04:53.280
+and 'this center is surrounded
+
+04:53.280 --> 04:55.440
+by a boundary which is itself
+
+04:55.440 --> 04:57.040
+made up of centers' [Gabriel].
+
+04:57.040 --> 04:59.440
+So, where we have Emacs at the center,
+
+04:59.440 --> 05:02.720
+we also have packages such as Magit.
+
+05:02.720 --> 05:04.800
+Magit can be viewed as a center
+
+05:04.800 --> 05:07.120
+unto itself. However, this center
+
+05:07.120 --> 05:09.520
+only exists thanks to the center
+
+05:09.520 --> 05:11.759
+of the center, which is Emacs.
+
+05:11.759 --> 05:14.320
+And thus we speak of Emacs
+
+05:14.320 --> 05:17.039
+as being a successful design pattern
+
+05:17.039 --> 00:05:18.799
+implementation [cf. Gabriel].
+
+00:05:18.800 --> 00:05:20.880
+And why do we care about
+
+05:20.880 --> 05:25.500
+design pattern approaches? Here, well,
+
+05:25.520 --> 05:28.560
+what I'm trying to say is that
+
+05:28.560 --> 05:30.080
+this is useful to the person
+
+05:30.080 --> 05:32.240
+who is interested in being able to
+
+05:32.240 --> 05:34.000
+more efficiently cope with
+
+05:34.000 --> 05:36.639
+complex and specific situations,
+
+05:36.639 --> 05:40.240
+and this design pattern allows for this
+
+05:40.240 --> 05:43.039
+because of its extensibility,
+
+05:43.039 --> 05:46.400
+because we can find these specializations
+
+05:46.400 --> 05:50.000
+or customizations that are able to reach
+
+05:50.000 --> 05:52.880
+these changing contexts [that we seek to interact with].
+
+05:52.880 --> 05:55.039
+This can be compared with
+
+05:55.039 --> 05:56.479
+other software applications
+
+05:56.479 --> 05:58.000
+that are prefabricated
+
+05:58.000 --> 05:59.680
+so they already decide
+
+05:59.680 --> 06:01.600
+what it is a person is going to do
+
+06:01.600 --> 06:02.800
+when they use them.
+
+06:02.800 --> 06:04.319
+This also means that what they're doing
+
+06:04.319 --> 06:05.520
+within these applications
+
+06:05.520 --> 06:06.639
+can get stranded there,
+
+06:06.639 --> 06:08.479
+that it's harder to integrate
+
+06:08.479 --> 06:10.319
+their knowledge or their texts
+
+06:10.319 --> 06:12.240
+or their activities
+
+06:12.240 --> 06:13.440
+with each other.
+
+06:13.440 --> 06:15.759
+A lot of software also makes assumptions
+
+06:15.759 --> 06:18.240
+on who their users are. We know that
+
+06:18.240 --> 06:20.160
+we speak in user experience design
+
+06:20.160 --> 06:23.120
+of the 'customer journey' or of 'personas',
+
+06:23.120 --> 06:24.720
+and very often, then,
+
+06:24.720 --> 06:27.840
+the customer journey is pre-designed.
+
+06:27.840 --> 06:29.680
+But within Emacs, we can be
+
+06:29.680 --> 06:32.079
+our own persona.
+
+06:32.079 --> 06:33.440
+Practical use of Emacs
+
+06:33.440 --> 06:35.680
+can also make non-programmers
+
+06:35.680 --> 06:36.720
+into programmers.
+
+06:36.720 --> 06:38.400
+So this is to say that
+
+06:38.400 --> 06:40.240
+as we are using Emacs,
+
+06:40.240 --> 06:41.840
+we can continue to develop
+
+06:41.840 --> 06:44.479
+as far as we wish.
+
+06:44.479 --> 06:46.240
+Therefore we are not only users
+
+06:46.240 --> 06:48.720
+within Emacs, but we are also
+
+06:48.720 --> 06:51.280
+creative persons and producers.
+
+06:51.280 --> 06:54.400
+So here I am citing work by ivan Illich.
+
+06:54.400 --> 06:56.079
+We can further contribute
+
+06:56.079 --> 06:58.880
+to the evolution of the rules of Emacs.
+
+06:58.880 --> 07:01.680
+To draw on Bernard Stiegler,
+
+07:01.680 --> 07:04.880
+if I may also make an analogy,
+
+07:04.880 --> 07:07.520
+within our inits, we contribute to
+
+07:07.520 --> 07:08.800
+the evolution of the rules
+
+07:08.800 --> 07:11.759
+according to which our Emacs works for us.
+
+07:11.759 --> 07:13.120
+But again, if we're extending
+
+07:13.120 --> 07:14.560
+our learning trajectory,
+
+07:14.560 --> 07:16.319
+and if we write a package,
+
+07:16.319 --> 07:18.400
+and the package becomes part of the core,
+
+07:18.400 --> 07:21.440
+we do indeed contribute to the evolution
+
+07:21.440 --> 07:23.840
+of the rules of Emacs.
+
+07:23.840 --> 07:25.359
+But because it stems
+
+07:25.359 --> 07:26.560
+from our personal use
+
+07:26.560 --> 07:28.479
+and our personal customizations,
+
+07:28.479 --> 07:30.000
+we can think of it as being
+
+07:30.000 --> 07:31.600
+a personal toolkit [cf. Stallman].
+
+07:31.600 --> 07:35.840
+So this design pattern iteration approach
+
+07:35.840 --> 07:39.680
+to Emacs is the very reason
+
+07:39.680 --> 07:41.840
+why it is that we can customize it
+
+07:41.840 --> 07:43.440
+to our own liking,
+
+07:43.440 --> 07:46.160
+and using Emacs to extend our freedom
+
+07:46.160 --> 07:48.720
+then helps us to develop heuristics.
+
+07:48.720 --> 07:51.919
+It helps us develop our decision-making,
+
+07:51.919 --> 07:54.719
+our problem-solving
+
+07:54.719 --> 07:57.839
+and responsibility for what it is
+
+07:57.839 --> 07:58.880
+that we're doing,
+
+07:58.880 --> 08:00.640
+and these skill sets
+
+08:00.640 --> 08:02.480
+are extensible beyond Emacs.
+
+08:02.480 --> 08:04.240
+These can be considered as life skills
+
+08:04.240 --> 08:05.839
+that have relevance beyond.
+
+08:05.839 --> 08:07.520
+This is a very good example
+
+08:07.520 --> 08:10.560
+of why it is that being exposed
+
+08:10.560 --> 08:12.480
+to complex assemblages
+
+08:12.480 --> 08:14.320
+matter to us as human beings.
+
+08:14.320 --> 08:17.120
+It's good training ground for life.
+
+08:17.120 --> 08:19.680
+But it's also important
+
+08:19.680 --> 08:22.719
+for a very basic pedagogical point.
+
+08:22.719 --> 08:24.160
+So now I'm going to draw on work
+
+08:24.160 --> 08:26.560
+by Hélène Trocmé-Fabre,
+
+08:26.560 --> 08:27.839
+who explains that
+
+08:27.839 --> 08:30.719
+reduced and poor contextualizations
+
+08:30.719 --> 08:32.800
+flatten communication.
+
+08:32.800 --> 08:33.760
+So, for example,
+
+08:33.760 --> 08:35.279
+within the field of software,
+
+08:35.279 --> 08:37.680
+if we are using an application
+
+08:37.680 --> 08:40.640
+that only asks us to swipe left or right,
+
+08:40.640 --> 08:42.880
+this deprives us of our ability
+
+08:42.880 --> 08:45.600
+to respond in a more sophisticated way.
+
+08:45.600 --> 08:48.640
+By contrast, by being exposed
+
+08:48.640 --> 08:51.600
+to a rich contextualization within Emacs,
+
+08:51.600 --> 08:53.839
+we are learning to contextualize,
+
+08:53.839 --> 08:57.040
+which Trocmé-Fabre says is the first step
+
+08:57.040 --> 08:58.719
+in learning how to learn.
+
+08:58.719 --> 08:59.920
+So we can understand
+
+08:59.920 --> 09:01.760
+just how important it is
+
+09:01.760 --> 09:03.520
+to be exposed to complexity.
+
+09:03.520 --> 09:05.440
+It's not just a mere
+
+09:05.440 --> 09:06.719
+intellectual exercise,
+
+09:06.719 --> 09:08.719
+but it is indeed how it is
+
+09:08.719 --> 09:12.239
+that we begin to learn.
+
+09:12.240 --> 09:13.760
+If this sounds too abstract,
+
+09:13.760 --> 09:15.520
+maybe we can step back for a moment
+
+09:15.520 --> 09:17.520
+and think about visualizing Emacs
+
+09:17.520 --> 09:19.600
+as a mental map. So here, too,
+
+09:19.600 --> 09:21.839
+I'm going to draw on Trocmé-Fabre,
+
+09:21.839 --> 09:24.560
+and she is building her ideas
+
+09:24.560 --> 09:26.240
+on those of Tony Buzan,
+
+09:26.240 --> 09:29.120
+who was the popularizer of the mind map.
+
+09:29.120 --> 09:31.519
+So mind maps begin with a core,
+
+09:31.519 --> 09:33.760
+which with Emacs is the Emacs core,
+
+09:33.760 --> 09:36.320
+which now includes Org.
+
+09:36.320 --> 09:38.719
+They extend outwards from the core
+
+09:38.719 --> 09:40.800
+through relational codes.
+
+09:40.800 --> 09:44.399
+And then through keywords and cycling,
+
+09:44.399 --> 09:46.240
+mind maps function to bring out
+
+09:46.240 --> 09:48.320
+further ideas, and this may be
+
+09:48.320 --> 09:49.760
+the experience you've already had
+
+09:49.760 --> 09:52.640
+with your Emacs. Then finally,
+
+09:52.640 --> 09:54.800
+these mind maps extend outwards
+
+09:54.800 --> 09:56.480
+at the periphery.
+
+09:56.480 --> 10:00.240
+In thinking about how this applies to Emacs,
+
+10:00.240 --> 10:02.320
+we can think about how yes, indeed,
+
+10:02.320 --> 10:04.240
+we all share the same core,
+
+10:04.240 --> 10:07.360
+but then we extend this core outwards
+
+10:07.360 --> 10:09.680
+into our personal configurations.
+
+10:09.680 --> 10:11.360
+So this is the social moment,
+
+10:11.360 --> 10:12.480
+but this social moment
+
+10:12.480 --> 10:13.839
+is integral to Emacs
+
+10:13.839 --> 10:16.800
+because Emacs fully achieves its meaning
+
+10:16.800 --> 10:18.959
+when it is being applied, extended,
+
+10:18.959 --> 10:20.880
+and customized in this way.
+
+10:20.880 --> 10:23.279
+Further, these social branches
+
+10:23.279 --> 10:25.839
+are relevant to the continuation
+
+10:25.839 --> 10:28.560
+of learning how to learn how to use Emacs.
+
+10:28.560 --> 10:30.800
+So for example, we may have
+
+10:30.800 --> 10:33.279
+our first configuration file,
+
+10:33.279 --> 10:35.040
+and then we might want to compare it
+
+10:35.040 --> 10:37.440
+with other people's configuration files,
+
+10:37.440 --> 10:40.240
+not only to see what code they're using,
+
+10:40.240 --> 10:42.480
+but also to see how it is that they are
+
+10:42.480 --> 10:44.240
+implementing certain functionalities
+
+10:44.240 --> 10:46.000
+within their workflow.
+
+10:46.000 --> 10:48.080
+So along these lines, then,
+
+10:48.080 --> 10:50.160
+descriptive configuration files
+
+10:50.160 --> 10:53.360
+are extremely helpful.
+
+10:53.360 --> 10:56.160
+This map, then, of Emacs
+
+10:56.160 --> 10:57.519
+can be considered as a
+
+10:57.519 --> 11:00.399
+frontierless heuristic schema,
+
+11:00.399 --> 11:02.000
+borrowing from Trocmé-Fabre.
+
+11:02.000 --> 11:04.080
+Frontierless, because we can extend
+
+11:04.080 --> 11:06.320
+our use of Emacs as far as we want.
+
+11:06.320 --> 11:08.399
+Heuristic, again, because we're using it
+
+11:08.399 --> 11:10.640
+to solve problems, etc.
+
+11:10.640 --> 11:13.360
+This is a free system that extends
+
+11:13.360 --> 11:15.920
+following our own 'paths of desire',
+
+11:15.920 --> 11:18.640
+if I can use that phrase from design.
+
+11:18.640 --> 11:20.640
+So it's following our own 'paths of desire',
+
+11:20.640 --> 11:22.480
+but yet it is a shared tool,
+
+11:22.480 --> 11:26.880
+so this is an idea of the convivial tool
+
+11:26.880 --> 11:29.999
+to draw on Ivan Illich.
+
+11:30.000 --> 11:31.760
+Emacs is itself
+
+11:31.760 --> 11:33.440
+a design pattern framework,
+
+11:33.440 --> 11:35.279
+so we can visualize this
+
+11:35.279 --> 11:36.640
+through the mind map,
+
+11:36.640 --> 11:40.160
+but we can also go back to thinking about
+
+11:40.160 --> 11:42.399
+how Christopher Alexander's work
+
+11:42.399 --> 11:44.240
+inspired Richard Gabriel
+
+11:44.240 --> 11:46.640
+to think about systems of systems
+
+11:46.640 --> 11:49.040
+within software. And he,
+
+11:49.040 --> 11:50.240
+drawing on Alexander,
+
+11:50.240 --> 11:52.240
+says, well, there is such a thing
+
+11:52.240 --> 11:55.600
+as a "being" of successful software,
+
+11:55.600 --> 11:59.519
+if it succeeds in being
+
+11:59.519 --> 12:00.640
+a center of centers,
+
+12:00.640 --> 12:02.240
+as we saw before.
+
+12:02.240 --> 12:04.480
+So in Emacs, then, we have a system
+
+12:04.480 --> 12:06.880
+that's made up of other systems
+
+12:06.880 --> 12:08.719
+of 'communicating components
+
+12:08.719 --> 12:09.839
+that work together
+
+12:09.839 --> 12:11.600
+to provide a comprehensive set
+
+12:11.600 --> 12:14.399
+of capabilities that can be customized,
+
+12:14.399 --> 12:16.000
+specialized, and extended
+
+12:16.000 --> 12:16.959
+to provide more
+
+12:16.959 --> 12:18.959
+or slightly different capabilities' [Gabriel].
+
+12:18.959 --> 12:21.200
+So if we're not finding what we need
+
+12:21.200 --> 12:25.120
+within the core, we can look for packages
+
+12:25.120 --> 12:27.519
+that allow us to extend in a certain way,
+
+12:27.519 --> 12:28.560
+or we write our own,
+
+12:28.560 --> 12:31.680
+or we begin to write in Emacs Lisp.
+
+12:31.680 --> 12:34.800
+And speaking of personal customizations,
+
+12:34.800 --> 12:37.839
+Emacs can be considered as an extension
+
+12:37.839 --> 12:40.079
+of the as yet unfulfilled promise of
+
+12:40.079 --> 12:41.600
+general computing.
+
+12:41.600 --> 12:44.000
+In the 1980s, Michael Crichton wrote
+
+12:44.000 --> 12:46.320
+that it's easy to use computers, which is
+
+12:46.320 --> 12:48.000
+fortunate because everyone's going to
+
+12:48.000 --> 12:49.040
+have to learn.
+
+12:49.040 --> 12:51.440
+It's not easy to use computers wisely,
+
+12:51.440 --> 12:52.880
+which is unfortunate because
+
+12:52.880 --> 12:54.719
+everyone's going to have to learn.
+
+12:54.719 --> 12:56.639
+Emacs is wise computing
+
+12:56.639 --> 12:59.600
+because everyone's Emacs is their own.
+
+12:59.600 --> 13:01.680
+We see that it is an exercise
+
+13:01.680 --> 13:05.760
+in heuristics, but while it is complex,
+
+13:05.760 --> 13:08.000
+at on some level, we want to remember
+
+13:08.000 --> 13:10.240
+that it can be used easily by anybody,
+
+13:10.240 --> 13:12.560
+as often or as seldom as they want,
+
+13:12.560 --> 13:15.200
+for the purpose that they are choosing,
+
+13:15.200 --> 13:17.519
+and shaped according to their own taste.
+
+13:17.519 --> 13:20.480
+So again I'm drawing on Ivan Illich here.
+
+13:20.480 --> 13:24.880
+Emacs then champions the human place
+
+13:24.880 --> 13:28.800
+and is a support in our learning
+
+13:28.800 --> 00:13:30.638
+how to learn.
+
+00:13:30.639 --> 00:13:32.000
+So now I want to think about
+
+13:32.000 --> 13:34.959
+being inspired by the Emacs design pattern
+
+13:34.959 --> 13:37.040
+and comparing what I think
+
+13:37.040 --> 13:40.480
+I've learned about how Emacs works
+
+13:40.480 --> 13:43.600
+with some research that has been done
+
+13:43.600 --> 13:46.240
+by Philip Guo and his colleagues
+
+13:46.240 --> 13:47.920
+about how technology is being used
+
+13:47.920 --> 13:51.120
+in certain online teaching contexts.
+
+13:51.120 --> 13:52.800
+Researchers continue to note
+
+13:52.800 --> 13:55.200
+how the modes of delivery of content
+
+13:55.200 --> 13:56.880
+continue to change in terms of
+
+13:56.880 --> 13:58.240
+what is considered effective
+
+13:58.240 --> 13:59.600
+and what is not.
+
+13:59.600 --> 14:02.000
+The talking head was considered effective,
+
+14:02.000 --> 14:05.360
+for example. Lectures needed to be
+
+14:05.360 --> 14:07.760
+broken down into shorter segments.
+
+14:07.760 --> 14:11.360
+But I would say that by using Emacs
+
+14:11.360 --> 14:14.320
+and by working within the Emacs ecosystem,
+
+14:14.320 --> 14:16.519
+one is already used to
+
+14:16.519 --> 14:18.959
+'re-presenting' one's knowledge
+
+14:18.959 --> 14:20.800
+in a variety of different ways.
+
+14:20.800 --> 14:22.320
+So if we are called tomorrow
+
+14:22.320 --> 14:24.240
+to deliver in a different way,
+
+14:24.240 --> 14:26.240
+we're already used to
+
+14:26.240 --> 14:28.399
+thinking about this within Emacs.
+
+14:28.399 --> 14:30.639
+So, for example,
+
+14:30.639 --> 14:32.399
+merely by changing a header argument,
+
+14:32.399 --> 14:34.880
+one can change the way in which
+
+14:34.880 --> 14:36.480
+text in a file is executed,
+
+14:36.480 --> 14:39.600
+so we see then this easy iteration
+
+14:39.600 --> 14:42.160
+within Emacs. We can also think about
+
+14:42.160 --> 14:45.760
+how Emacs can be considered in terms of
+
+14:45.760 --> 14:49.839
+a help for developing rhetorical 'topoi',
+
+14:49.839 --> 14:52.240
+'topoi' being places where we find things,
+
+14:52.240 --> 14:54.480
+places where we find ideas,
+
+14:54.480 --> 14:56.320
+because we can circulate
+
+14:56.320 --> 14:58.959
+among the different tasks and texts
+
+14:58.959 --> 14:59.920
+that we are working on
+
+14:59.920 --> 15:01.920
+within Emacs seamlessly.
+
+15:01.920 --> 15:04.000
+This increases the likelihood
+
+15:04.000 --> 15:07.519
+that we can gain inspiration
+
+15:07.519 --> 15:11.440
+from the collage of different ideas
+
+15:11.440 --> 15:14.079
+that bring out new ideas.
+
+15:14.079 --> 15:14.959
+At least this is how
+
+15:14.959 --> 15:16.160
+I've experienced Emacs,
+
+15:16.160 --> 15:19.279
+if I may add that anecdotal observation.
+
+15:19.279 --> 15:22.480
+And speaking of bringing out ideas,
+
+15:22.480 --> 15:26.079
+we see how changing Emacs functionalities
+
+15:26.079 --> 15:27.680
+can help us bring out ideas
+
+15:27.680 --> 15:30.079
+for example, through how we can
+
+15:30.079 --> 15:32.000
+use PlantUML easier today
+
+15:32.000 --> 15:35.519
+than ever before, so we can now include
+
+15:35.519 --> 15:38.880
+mental maps within our Emacs files
+
+15:38.880 --> 15:40.800
+if we want to, but also
+
+15:40.800 --> 15:45.120
+if we're thinking about Emacs helping us
+
+15:45.120 --> 15:47.600
+both remember the material
+
+15:47.600 --> 15:48.719
+that we're working with
+
+15:48.719 --> 15:50.000
+and 're-present' it,
+
+15:50.000 --> 15:51.040
+we can think of it
+
+15:51.040 --> 15:53.120
+in terms of its archival functions,
+
+15:53.120 --> 15:54.880
+So we can see an example of this
+
+15:54.880 --> 15:57.040
+in Sacha Chua's init,
+
+15:57.040 --> 15:59.120
+where she is using Emacs
+
+15:59.120 --> 16:02.399
+to manage her recent sketches.
+
+16:02.399 --> 16:03.839
+This would be really useful
+
+16:03.839 --> 16:06.000
+for implementation
+
+16:06.000 --> 16:08.160
+in terms of what the researchers
+
+16:08.160 --> 16:10.480
+(Philip Guo and his colleagues) discovered
+
+16:10.480 --> 16:12.656
+with regards to how today
+
+16:12.656 --> 16:14.880
+Khan-style slides are considered
+
+16:14.880 --> 16:17.920
+more effective than traditional slides,
+
+16:17.920 --> 16:20.160
+because if one is able to integrate
+
+16:20.160 --> 16:21.519
+the other kinds of sketches
+
+16:21.519 --> 16:23.680
+that one has been doing within Emacs -
+
+16:23.680 --> 16:25.999
+and therefore have them at hand
+
+16:25.999 --> 16:27.999
+more easily, it would be easier to
+
+16:27.999 --> 16:30.800
+'re-present' this material as needed
+
+16:30.800 --> 16:33.600
+in the ever-changing context of the classroom.
+
+16:33.600 --> 16:35.519
+We can see from this example
+
+16:35.519 --> 16:38.320
+of Sacha Chua's init that we learn
+
+16:38.320 --> 16:39.999
+by following the traces
+
+16:39.999 --> 16:41.998
+left by others in the community.
+
+16:41.999 --> 16:43.279
+So we were saying then that
+
+16:43.279 --> 16:45.040
+Emacs extends outwards
+
+16:45.040 --> 16:46.479
+through these social branches,
+
+16:46.479 --> 16:48.560
+and indeed we can speak
+
+16:48.560 --> 16:50.640
+of the grammar of interaction,
+
+16:50.640 --> 16:52.320
+that we benefit from by being
+
+16:52.320 --> 16:54.720
+a member of the Emacs community.
+
+16:54.720 --> 16:56.960
+And this wonderful phrase comes to us
+
+16:56.960 --> 16:58.880
+from a book that was co-edited
+
+16:58.880 --> 17:01.736
+by our very own former Org father,
+
+17:01.736 --> 17:03.680
+Bastien Guerry, in an interview
+
+17:03.680 --> 17:05.359
+that he led with Nicolas Gaume [Andler & Guerry].
+
+17:05.359 --> 17:07.040
+Nicolas Gaume was explaining
+
+17:07.040 --> 17:10.640
+how in video games, we see our character
+
+17:10.640 --> 17:12.160
+and compare our character
+
+17:12.160 --> 17:14.160
+to other characters,
+
+17:14.160 --> 17:16.080
+and we watch how other characters
+
+17:16.080 --> 17:17.040
+make decisions,
+
+17:17.040 --> 17:19.040
+and the outcomes of these decisions,
+
+17:19.040 --> 17:21.440
+and their trajectories in the game,
+
+17:21.440 --> 17:23.119
+and then we compare where we are
+
+17:23.119 --> 17:24.720
+with respect to this,
+
+17:24.720 --> 17:27.119
+and by having this comparison,
+
+17:27.119 --> 17:29.840
+it helps us chart out our own path.
+
+17:29.840 --> 17:31.280
+So we can experience
+
+17:31.280 --> 17:32.800
+this grammar of interaction
+
+17:32.800 --> 17:35.200
+within Emacs every time we compare
+
+17:35.200 --> 17:38.720
+our config with that of others.
+
+17:38.720 --> 17:41.760
+Emacs further champions the social element
+
+17:41.760 --> 17:43.920
+through co-individuation, which is
+
+17:43.920 --> 17:46.880
+a term coined by Bernard Stiegler.
+
+17:46.880 --> 17:48.720
+This means the meaning that is known
+
+17:48.720 --> 17:50.960
+and shared by other individuals.
+
+17:50.960 --> 17:52.560
+What is it that we know and share
+
+17:52.560 --> 17:54.560
+within Emacs? It is how to
+
+17:54.560 --> 17:55.600
+improve our lives
+
+17:55.600 --> 17:57.280
+through customizing Emacs
+
+17:57.280 --> 18:00.479
+in specific ways. So if one person
+
+18:00.479 --> 18:03.040
+reaches the apotheosis
+
+18:03.040 --> 18:04.239
+of individuation,
+
+18:04.239 --> 18:05.920
+and they're living the life
+
+18:05.920 --> 18:07.760
+they dreamed of
+
+18:07.760 --> 18:08.960
+through their Emacs use,
+
+18:08.960 --> 18:10.720
+they can share this information
+
+18:10.720 --> 18:11.680
+with somebody else
+
+18:11.680 --> 18:14.320
+who too can come to realize themselves
+
+18:14.320 --> 18:15.920
+in this way.
+
+18:15.920 --> 18:17.280
+Without the social milieu,
+
+18:17.280 --> 18:18.880
+without this attention
+
+18:18.880 --> 18:21.040
+to the human element,
+
+18:21.040 --> 18:23.600
+the technical milieu inevitably becomes
+
+18:23.600 --> 18:24.414
+a negative externality
+
+18:24.414 --> 18:25.760
+[which is a philosophical problem].
+
+18:25.760 --> 18:27.840
+Here I'm drawing on Bernard Stiegler.
+
+18:27.840 --> 18:29.680
+What does this mean? This means
+
+18:29.680 --> 18:32.400
+where knowledge becomes automaticized,
+
+18:32.400 --> 18:33.760
+it becomes a closed
+
+18:33.760 --> 18:36.560
+and self-referential system.
+
+18:36.560 --> 18:39.520
+Because it's self-referential and closed,
+
+18:39.520 --> 18:41.999
+there is no need for any human input,
+
+18:41.999 --> 18:43.600
+so the human within this system
+
+18:43.600 --> 18:46.080
+turns into a servant.
+
+18:46.080 --> 18:50.800
+By contrast, by using human-centered Emacs,
+
+18:50.800 --> 18:53.520
+we are able to take care of our neighbors.
+
+18:53.520 --> 18:55.840
+We can write extensions for them.
+
+18:55.840 --> 18:58.560
+We can help each other on the forums.
+
+18:58.560 --> 19:00.800
+We can even teach just one more person
+
+19:00.800 --> 19:02.640
+how to use Emacs.
+
+19:02.640 --> 19:04.880
+And this idea comes from Ivan Illich
+
+19:04.880 --> 19:06.800
+who extends it to say
+
+19:06.800 --> 19:08.880
+that by taking care of our neighbors
+
+19:08.880 --> 19:09.680
+in this way,
+
+19:09.680 --> 19:11.840
+this enables us to excel
+
+19:11.840 --> 19:13.999
+at using the best available tools.
+
+19:13.999 --> 19:16.239
+The tool here being Emacs.
+
+19:16.239 --> 19:19.200
+The community aspect of Emacs
+
+19:19.200 --> 19:20.320
+can also be seen
+
+19:20.320 --> 19:22.720
+in how the core of Emacs itself
+
+19:22.720 --> 19:25.040
+is evolving. So just like we are
+
+19:25.040 --> 19:27.119
+configuring and programming Emacs
+
+19:27.119 --> 19:28.720
+while we are using it,
+
+19:28.720 --> 19:32.239
+Emacs, too, continues to develop
+
+19:32.239 --> 19:34.560
+as the core expands.
+
+19:34.560 --> 19:36.880
+So in this, too, we see how Emacs
+
+19:36.880 --> 19:39.680
+is a model of design pattern learning
+
+19:39.680 --> 19:42.320
+that we can be inspired from,
+
+19:42.320 --> 19:44.960
+and the fact that people
+
+19:44.960 --> 19:46.320
+from the Emacs community
+
+19:46.320 --> 19:49.280
+are able to contribute to the core
+
+19:49.280 --> 19:52.720
+brings emphasis to the community role
+
+19:52.720 --> 19:53.999
+in this design pattern.
+
+19:53.999 --> 19:55.440
+So at the beginning, we were saying
+
+19:55.440 --> 19:56.239
+we're interested
+
+19:56.239 --> 19:57.680
+in the complex assemblage,
+
+19:57.680 --> 19:59.520
+not just of activities and tools,
+
+19:59.520 --> 20:00.960
+but also of people.
+
+20:00.960 --> 20:03.119
+So here we are talking about
+
+20:03.119 --> 20:04.720
+an 'Emacs community'.
+
+20:04.720 --> 20:06.880
+This is also thanks to
+
+20:06.880 --> 20:08.560
+the selfless work of people
+
+20:08.560 --> 20:11.999
+like Sacha Chua, or blog rings
+
+20:11.999 --> 20:13.760
+such as Planet Emacs Life
+
+20:13.760 --> 20:14.960
+that bring us together
+
+20:14.960 --> 20:16.880
+so that we truly can say
+
+20:16.880 --> 20:18.479
+that there is a community.
+
+20:18.479 --> 20:20.080
+This conference is an example of this:
+
+20:20.080 --> 20:23.440
+and thank you to the conference organizers.
+
+20:23.440 --> 20:24.880
+But this community,
+
+20:24.880 --> 20:28.640
+because of the free core,
+
+20:28.640 --> 20:30.160
+allows for there to be
+
+20:30.160 --> 20:31.119
+different viewpoints
+
+20:31.119 --> 20:32.320
+within the community.
+
+20:32.320 --> 20:33.440
+One thing that I've noticed
+
+20:33.440 --> 20:34.880
+about the Emacs community
+
+20:34.880 --> 20:36.320
+is that there are sometimes even
+
+20:36.320 --> 20:38.880
+competing views within the community.
+
+20:38.880 --> 20:40.160
+This can be considered
+
+20:40.160 --> 20:42.239
+proof of concept of systems thinker
+
+20:42.239 --> 20:44.479
+and philosopher Edgar Morin's idea
+
+20:44.479 --> 20:46.720
+of a 'cognitive democracy',
+
+20:46.720 --> 20:48.160
+which is to say,
+
+20:48.160 --> 20:50.880
+a community that is nourished
+
+20:50.880 --> 20:52.320
+by antagonisms
+
+20:52.320 --> 20:55.840
+while also regulating them.
+
+20:55.840 --> 20:57.280
+The "being" of this
+
+20:57.280 --> 20:58.560
+very special community,
+
+20:58.560 --> 21:01.119
+then, very importantly,
+
+21:01.119 --> 21:03.920
+stems from how at the center,
+
+21:03.920 --> 21:05.999
+we have free software
+
+21:05.999 --> 21:08.720
+that allows for this range of difference
+
+21:08.720 --> 21:11.440
+and range of extensibility to exist
+
+21:11.440 --> 21:13.599
+even within the community.
+
+21:13.599 --> 21:16.880
+So, by way of a conclusion,
+
+21:16.880 --> 21:18.080
+we can think of Emacs
+
+21:18.080 --> 21:21.359
+as the center of centers that expands,
+
+21:21.359 --> 21:24.160
+that is relational and free.
+
+21:24.160 --> 21:27.280
+Only in some systems, we should add,
+
+21:27.280 --> 21:28.720
+does this "being" emerge.
+
+21:28.720 --> 21:31.040
+So going back to Richard Gabriel,
+
+21:31.040 --> 21:32.960
+just to champion Emacs one more time
+
+21:32.960 --> 21:34.400
+before we say goodbye:
+
+21:34.400 --> 21:35.599
+only in some systems,
+
+21:35.599 --> 21:36.640
+some software systems,
+
+21:36.640 --> 21:38.960
+does a system succeed
+
+21:38.960 --> 21:40.080
+in becoming the center
+
+21:40.080 --> 21:41.680
+of all of the other centers
+
+21:41.680 --> 21:43.920
+and become a framework
+
+21:43.920 --> 21:45.520
+that can be used and reused,
+
+21:45.520 --> 21:47.840
+which gives systems and objects
+
+21:47.840 --> 21:48.720
+their spirit.
+
+21:48.720 --> 21:51.520
+So Emacs is being used and reused
+
+21:51.520 --> 21:53.599
+through these packages,
+
+21:53.599 --> 21:55.119
+and it gives to them their spirit.
+
+21:55.119 --> 21:56.320
+The spirit, I would argue,
+
+21:56.320 --> 21:59.040
+is in part this extensibility,
+
+21:59.040 --> 22:01.520
+and sometimes even difference.
+
+22:01.520 --> 22:03.120
+Emacs values the value [cf. Stiegler]
+
+22:03.120 --> 22:04.240
+of the freedom to create,
+
+22:04.240 --> 22:05.680
+use, and share [cf. Illich],
+
+22:05.680 --> 22:06.960
+so we can be inspired
+
+22:06.960 --> 22:09.119
+by this design pattern.
+
+22:09.119 --> 22:11.359
+It is... It rallies
+
+22:11.359 --> 22:14.320
+an autonomous designer mindset
+
+22:14.320 --> 22:16.800
+and encourages and supports us
+
+22:16.800 --> 22:18.400
+on our path towards
+
+22:18.400 --> 22:20.960
+design pattern iteration.
+
+22:20.960 --> 22:23.359
+It is not a 'flattened' contextualization.
+
+22:23.359 --> 22:25.359
+It permits ongoing learning,
+
+22:25.359 --> 22:27.040
+reassembling contexts,
+
+22:27.040 --> 22:29.520
+and an adaptable design pattern
+
+22:29.520 --> 22:31.520
+extensibility.
+
+22:31.520 --> 22:33.200
+Ultimately, it helps us create
+
+22:33.200 --> 22:35.520
+circumstances where learning is coherent
+
+22:35.520 --> 22:37.920
+with what is valued in the rest of life:
+
+22:37.920 --> 22:41.520
+pleasure, growth, and transformation.
+
+22:41.520 --> 22:43.200
+So thank you, on that note,
+
+22:43.200 --> 22:45.280
+to all of the developers, maintainers,
+
+22:45.280 --> 22:47.119
+contributors, and community
+
+22:47.119 --> 22:48.560
+for championing our freedom
+
+22:48.560 --> 22:51.760
+to co-individuate complex design patterns
+
+22:51.760 --> 22:54.320
+the way we want to, so we, too,
+
+22:54.320 --> 22:57.359
+can leave original traces, if we want to.
+
+22:57.359 --> 23:00.003
+Thank you very much.
+
+23:00.003 --> 23:00.920
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.vtt b/2021/captions/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.vtt
new file mode 100644
index 00000000..4b7765ef
--- /dev/null
+++ b/2021/captions/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.vtt
@@ -0,0 +1,871 @@
+WEBVTT
+
+00:02.879 --> 00:05.424
+Hello everyone! My name is Philip Beadling.
+
+00:05.424 --> 00:06.944
+Just to give you a bit of background,
+
+00:06.944 --> 00:08.400
+I'm the enterprise architect
+
+00:08.400 --> 00:10.384
+in a company called Quantile Technologies.
+
+00:10.384 --> 00:12.799
+I've been using Emacs
+
+00:12.799 --> 00:14.560
+certainly for the last four or five years
+
+00:14.560 --> 00:16.800
+as part of my day-to-day workflow,
+
+00:16.800 --> 00:18.080
+but I've used it on and off
+
+00:18.080 --> 00:19.000
+for the last 20 years
+
+00:19.000 --> 00:21.320
+depending on the jobs
+
+00:21.320 --> 00:22.423
+or the task at hand.
+
+00:22.423 --> 00:24.800
+Now, today I'm here in a personal capacity
+
+00:24.800 --> 00:27.360
+to talk about a use I had
+
+00:27.360 --> 00:28.440
+for Emacs last year
+
+00:28.440 --> 00:31.000
+where I had to record
+
+00:31.000 --> 00:32.800
+my continuous professional development,
+
+00:32.800 --> 00:35.320
+and I was required to be audited
+
+00:35.320 --> 00:37.280
+by my professional body on it.
+
+00:37.280 --> 00:40.240
+My CPD record is a bit of a mess,
+
+00:40.240 --> 00:42.640
+or certainly was. It was over
+
+00:42.640 --> 00:44.640
+various different services and systems
+
+00:44.640 --> 00:46.160
+that have been provided to me
+
+00:46.160 --> 00:47.920
+by previous employers.
+
+00:47.920 --> 00:51.824
+And, I had bits of it in Excel spreadsheets,
+
+00:51.824 --> 00:52.640
+and I was looking for like
+
+00:52.640 --> 00:54.200
+a one single golden source
+
+00:54.200 --> 00:55.320
+where I could store it all
+
+00:55.320 --> 00:56.719
+and use in the future.
+
+00:56.719 --> 00:59.024
+So, I had a look online.
+
+00:59.024 --> 00:59.824
+I didn't find anything I'd like,
+
+00:59.824 --> 01:01.885
+so I decided I would use Emacs,
+
+01:01.885 --> 01:03.840
+and I quickly came to the conclusion
+
+01:03.840 --> 01:05.480
+that using Org mode
+
+01:05.480 --> 01:07.040
+was a nice fit for this,
+
+01:07.040 --> 01:08.160
+you know, both the TODO lists
+
+01:08.160 --> 01:09.080
+and the properties
+
+01:09.080 --> 01:10.920
+seem to fit nicely
+
+01:10.920 --> 01:12.890
+with building a very basic database,
+
+01:12.890 --> 01:14.159
+which is what in effect this is,
+
+01:14.159 --> 01:16.159
+what this is.
+
+01:16.159 --> 01:18.000
+Without further ado,
+
+01:18.000 --> 01:22.640
+I will start by just downloading.
+
+01:22.640 --> 01:24.640
+This is available on my public Git,
+
+01:24.640 --> 01:26.160
+handle is falloutfill,
+
+01:26.160 --> 01:28.146
+and it's under a project called Misc.
+
+01:28.146 --> 01:33.200
+It's just a single file called cpd.org,
+
+01:33.200 --> 01:35.080
+I can stick that in the chat
+
+01:35.080 --> 01:36.280
+when we actually do this live,
+
+01:36.280 --> 01:38.532
+so that people will have a link to it.
+
+01:38.532 --> 01:41.119
+So, I'll start this up.
+
+01:41.119 --> 01:44.560
+Okay. To start with, I am just going to
+
+01:44.560 --> 01:46.826
+close down various Lisp stuff,
+
+01:46.826 --> 01:48.566
+and just give you a demo of
+
+01:48.566 --> 01:50.560
+how it actually works.
+
+01:50.560 --> 01:55.040
+Let's go up here.
+
+01:55.040 --> 01:57.205
+Okay, so, basically to make this work,
+
+01:57.205 --> 01:58.640
+the way I subdivide it
+
+01:58.640 --> 01:59.200
+is that I would have
+
+01:59.200 --> 02:00.200
+professional goals,
+
+02:00.200 --> 02:01.040
+and professional goals
+
+02:01.040 --> 02:02.703
+would be made up of activities,
+
+02:02.703 --> 02:03.741
+and each of those activities
+
+02:03.741 --> 02:05.917
+would contribute to the goal.
+
+02:05.917 --> 02:07.713
+So, in order to represent this,
+
+02:07.713 --> 02:10.000
+this is just a nested TODO list
+
+02:10.000 --> 02:12.800
+in Emacs Org mode.
+
+02:12.800 --> 02:16.068
+I sort of change things like the naming,
+
+02:16.068 --> 02:18.247
+Pending, In-Progress and Complete
+
+02:18.247 --> 02:19.440
+rather than TODO, DONE because
+
+02:19.440 --> 02:21.360
+that's more like what my professional
+
+02:21.360 --> 02:23.244
+body likes to categorize things,
+
+02:23.244 --> 02:25.315
+but essentially it's the same thing.
+
+02:25.315 --> 02:28.212
+So, I've got an Org capture template
+
+02:28.212 --> 02:29.499
+or two Org capture templates
+
+02:29.499 --> 02:31.843
+in order to grab this information,
+
+02:31.843 --> 02:33.645
+and then stick it in the TODO list,
+
+02:33.645 --> 02:36.540
+and also tabulate it using column view.
+
+02:36.540 --> 02:39.304
+I'll start off just by showing you
+
+02:39.304 --> 02:40.090
+an example here.
+
+02:40.090 --> 02:40.879
+So, what I'm going to do is
+
+02:40.879 --> 02:41.965
+create a new goal,
+
+02:41.965 --> 02:42.849
+and then under it,
+
+02:42.849 --> 02:44.959
+I will create a couple of activities
+
+02:44.959 --> 02:46.511
+relevant to that goal.
+
+02:46.511 --> 02:49.360
+For the goal I'm going to have, let's say,
+
+02:49.360 --> 02:50.342
+something relevant,
+
+02:50.342 --> 02:54.000
+so, 'Improve Public Speaking',
+
+02:54.000 --> 02:55.680
+and then I'm going to say, the type
+
+02:55.680 --> 02:58.000
+of that goal is, well, it's a 'Presentation'
+
+02:58.000 --> 03:01.200
+I suppose. The outcome of that goal is,
+
+03:01.200 --> 03:02.560
+well, I don't want to go into too much
+
+03:02.560 --> 03:06.069
+detail here, but it would be, you know,
+
+03:06.069 --> 03:09.140
+'Get feedback from colleagues', and so forth.
+
+03:09.140 --> 03:11.200
+I won't fully and completely [inaudible]
+
+03:11.200 --> 03:12.538
+about what the goal was.
+
+03:12.538 --> 03:14.067
+Now, the retrospective value,
+
+03:14.067 --> 03:15.318
+my understanding is that
+
+03:15.318 --> 03:17.028
+you fill that in afterwards,
+
+03:17.028 --> 03:18.800
+so you want to talk after completing the
+
+03:18.800 --> 03:21.213
+action, so this is not relevant for the day.
+
+03:21.213 --> 03:23.120
+I'm just going to leave it blank,
+
+03:23.120 --> 03:24.541
+although I'm sure you can imagine
+
+03:24.541 --> 03:26.428
+I could say: having completed this action
+
+03:26.428 --> 03:28.959
+I felt that, blah blah blah, and so forth.
+
+03:28.959 --> 03:31.360
+Okay, so I will add that, and then you
+
+03:31.360 --> 03:33.760
+will see that I now have a new goal,
+
+03:33.760 --> 03:36.048
+both in my column view and in my TODO list,
+
+03:36.048 --> 03:38.159
+and just to make it a little bit
+
+03:38.159 --> 03:39.920
+realistic, I'm going to then add two
+
+03:39.920 --> 03:41.332
+activities to that.
+
+03:41.332 --> 03:43.433
+When I come in to add an activity,
+
+03:43.433 --> 03:44.560
+I have to select a goal.
+
+03:44.560 --> 03:49.120
+I'm going to select 'Improve Public Speaking'.
+
+03:49.120 --> 03:52.963
+Yeah, so, the activity I'm going to say is,
+
+03:52.963 --> 03:57.427
+well, let's say, 'Speak at EmacsConf 2021',
+
+03:57.427 --> 04:01.200
+that we can use a type of 'Presentation',
+
+04:01.200 --> 04:04.352
+outcome of that is, stating the obvious,
+
+04:04.352 --> 04:08.080
+'Present on an Emacs idea'.
+
+04:08.080 --> 04:09.680
+Right, something along the lines of that.
+
+04:09.680 --> 04:11.519
+And, then retrospective, again I'm not
+
+04:11.519 --> 04:14.135
+going to fill that in at the moment.
+
+04:14.135 --> 04:19.060
+Then, last but not least,
+
+04:19.060 --> 04:20.799
+I will come up with a slightly different
+
+04:20.799 --> 04:23.215
+activity. So, again selecting
+
+04:23.215 --> 04:24.889
+'Improve Public Speaking',
+
+04:24.889 --> 04:27.440
+the activity would be
+
+04:27.440 --> 04:31.257
+'Watch lecture series on public speaking',
+
+04:31.257 --> 04:33.426
+you know, blah blah blah, so forth.
+
+04:33.426 --> 04:34.720
+Type value would be
+
+04:34.720 --> 04:37.600
+Lecture, for this outcome would maybe be
+
+04:37.600 --> 04:43.252
+'Use new knowledge in EmacsConf presentation'.
+
+04:43.252 --> 04:45.350
+Right, might be a good one there.
+
+04:45.350 --> 04:46.720
+Again, retrospective value,
+
+04:46.720 --> 04:48.518
+I'm just going to leave that blank,
+
+04:48.518 --> 04:51.440
+and I'm going to save that.
+
+04:51.440 --> 04:52.960
+Now, we're in a position where we've got
+
+04:52.960 --> 04:54.960
+a goal and two activities, which are
+
+04:54.960 --> 04:57.520
+represented here, you can see here that I
+
+04:57.520 --> 05:00.160
+can move an activity, cycle it forward to
+
+05:00.160 --> 05:02.322
+In-Progress. When I do that,
+
+05:02.322 --> 05:05.104
+I get a STARTED timestamp here.
+
+05:05.104 --> 05:06.737
+If I then cycle it again,
+
+05:06.737 --> 05:09.869
+I get the more familiar CLOSED timestamp here.
+
+05:09.869 --> 05:11.635
+The STARTED timestamp is a bit of
+
+05:11.635 --> 05:13.918
+custom code, I'll show you that in a moment.
+
+05:13.918 --> 05:17.120
+And then likewise, let's say that…,
+
+05:17.120 --> 05:20.166
+we'll move this one from PENDING to STARTED.
+
+05:20.166 --> 05:22.960
+Okay. Now, if I save the document,
+
+05:22.960 --> 05:24.560
+that will trigger the updating
+
+05:24.560 --> 05:27.520
+of the column view, you can see now
+
+05:27.520 --> 05:29.360
+that we have the various started and
+
+05:29.360 --> 05:31.600
+completed statuses, this is up to date.
+
+05:31.600 --> 05:32.937
+So, that's pretty much.
+
+05:32.937 --> 05:34.211
+You can imagine that we could add
+
+05:34.211 --> 05:35.469
+lots of goals and lots of activities,
+
+05:35.469 --> 05:37.474
+and this would grow into, you know,
+
+05:37.474 --> 05:41.704
+several sheets worth of a work,
+
+05:41.704 --> 05:43.748
+and then last but not least,
+
+05:43.748 --> 00:05:45.440
+is obviously the most important thing.
+
+00:05:45.440 --> 00:05:46.720
+How do you submit it?
+
+05:46.720 --> 05:48.479
+We could just use the standard
+
+05:48.479 --> 05:50.856
+export facility in Org mode for doing that.
+
+05:50.856 --> 05:55.039
+That's just Control c Control e l o (C-c C-e l o).
+
+05:55.039 --> 00:06:03.440
+And there you can see,
+
+00:06:03.440 --> 00:06:06.586
+there you've got the goals and activities.
+
+06:06.586 --> 06:08.319
+I spent a bit of time, I won't go too much
+
+06:08.319 --> 06:10.000
+in the LaTeX formatting, but coming up
+
+06:10.000 --> 06:12.319
+with something that I felt and got as
+
+06:12.319 --> 06:14.720
+much information compactly on a page
+
+06:14.720 --> 06:17.840
+without making it difficult to read,
+
+06:17.840 --> 00:06:19.039
+should we say, and it's always
+
+00:06:19.039 --> 00:06:20.080
+a find-the-balance thing.
+
+00:06:20.080 --> 00:06:22.560
+I'm not saying I'm an expert on it,
+
+00:06:22.560 --> 00:06:24.400
+but I thought what I came up with here
+
+00:06:24.400 --> 00:06:25.905
+was reasonably clear
+
+06:25.905 --> 06:28.960
+but allowed you to write enough information.
+
+06:28.960 --> 06:31.039
+The goals and activities were reasonably
+
+06:31.039 --> 06:32.419
+well explained.
+
+06:32.419 --> 06:35.039
+Okay, we can just kill that.
+
+06:35.039 --> 06:37.402
+So, how does all of that work?
+
+06:37.402 --> 06:40.180
+Well, underneath is config tab here,
+
+06:40.180 --> 06:41.210
+we have a bunch of Lisp
+
+06:41.210 --> 06:43.276
+that I'm going to sort of fly through here.
+
+06:43.276 --> 06:45.898
+You can ask me any questions afterwards.
+
+06:45.898 --> 06:46.639
+First thing is,
+
+06:46.639 --> 06:48.371
+we have the org-capture templates,
+
+06:48.371 --> 06:50.101
+which are here.
+
+06:50.101 --> 06:53.178
+The goal one is not doing anything special.
+
+06:53.178 --> 06:55.605
+It's just writing it back to this file,
+
+06:55.605 --> 06:57.125
+so there is a limitation there
+
+06:57.125 --> 06:58.718
+that you must have this file open
+
+06:58.718 --> 06:59.840
+when you add them, which is
+
+06:59.840 --> 07:02.000
+something I'd like to improve in future.
+
+07:02.000 --> 07:04.952
+For the activities, it specifies the file,
+
+07:04.952 --> 07:06.560
+but it also specifies this function
+
+07:06.560 --> 07:09.926
+set-activity-pos-from-goal, which (is) above here.
+
+07:09.926 --> 07:12.720
+What this does is, it iterates through the
+
+07:12.720 --> 07:17.360
+various Org entries looking for goals,
+
+07:17.360 --> 00:07:20.720
+and once it has a list of goals,
+
+00:07:20.720 --> 00:07:21.919
+it presents them to you
+
+00:07:21.919 --> 00:07:23.599
+using ido-completing-read,
+
+07:23.599 --> 00:07:25.120
+so that you can select the goal
+
+00:07:25.120 --> 00:07:27.610
+that you want the activity to live underneath,
+
+07:27.610 --> 07:29.520
+and it then searches forward, and it finds
+
+07:29.520 --> 00:07:31.599
+the appropriate spot in that goal
+
+00:07:31.599 --> 00:07:33.919
+that the Emacs can then dump
+
+00:07:33.919 --> 00:07:36.000
+the captured activity.
+
+07:36.000 --> 07:39.210
+Okay, the next one is pretty straightforward.
+
+07:39.210 --> 00:07:40.479
+Because I changed the names
+
+00:07:40.479 --> 00:07:42.240
+of the TODO, DONE,
+
+00:07:42.240 --> 00:07:44.720
+I now need a new way of aggregating
+
+00:07:44.720 --> 00:07:46.691
+the summary completion statuses.
+
+07:46.691 --> 00:07:48.400
+So, for this I'm just looking
+
+00:07:48.400 --> 00:07:51.440
+at the number of completed activities
+
+07:51.440 --> 07:53.627
+over the total number of activities,
+
+07:53.627 --> 07:57.665
+and I make that available on the C+ here,
+
+07:57.665 --> 08:00.859
+which we will see when I go and show you
+
+08:00.859 --> 08:03.960
+the top configuration in the Org document
+
+08:03.960 --> 08:05.199
+in two minutes.
+
+08:05.199 --> 08:08.080
+I mentioned that we needed to have our
+
+08:08.080 --> 00:08:10.400
+own start date. The way this works is
+
+00:08:10.400 --> 00:08:11.870
+we add a hook to
+
+00:08:11.870 --> 00:08:14.996
+org-after-todo-state-change-hook,
+
+08:14.996 --> 00:08:17.199
+which means that we test
+
+00:08:17.199 --> 00:08:19.680
+the state change results in
+
+00:08:19.680 --> 00:08:21.599
+one of the items being In-Progress,
+
+00:08:21.599 --> 00:08:23.199
+and if that's true
+
+00:08:23.199 --> 00:08:25.360
+and it already doesn't have a time stamp,
+
+08:25.360 --> 00:08:26.639
+then it creates a timestamp
+
+00:08:26.639 --> 00:08:29.049
+with the current time and date.
+
+08:29.049 --> 00:08:31.199
+The second hook here is just ensuring that
+
+00:08:31.199 --> 00:08:32.663
+when we save the document,
+
+08:32.663 --> 08:34.898
+that the column view is dynamically updated,
+
+08:34.898 --> 08:36.578
+so that everything is up to date.
+
+08:36.578 --> 08:39.444
+And then last but not least here,
+
+08:39.444 --> 08:43.590
+the tmp-f-timestamp, what this does is,
+
+08:43.590 --> 08:46.690
+on the export, it modifies the timestamps,
+
+08:46.690 --> 08:48.336
+so that it removes the angle brackets,
+
+08:48.336 --> 08:50.367
+and it removes the hours and minutes.
+
+08:50.367 --> 00:08:51.839
+That is a space-saving thing
+
+00:08:51.839 --> 00:08:54.080
+and a tidiness thing in the PDF.
+
+00:08:54.080 --> 00:08:56.187
+I'll show you in a second how that's used.
+
+08:56.187 --> 08:58.121
+We then allow bind-keywords.
+
+08:58.121 --> 08:59.839
+We use them above.
+
+08:59.839 --> 00:09:01.200
+Then we just have a simple key
+
+00:09:01.200 --> 00:09:05.258
+that allows us to hotkey for org-capture.
+
+09:05.258 --> 00:09:06.800
+And then at the start,
+
+00:09:06.800 --> 00:09:07.327
+when we evaluate the startup block
+
+00:09:07.327 --> 00:09:10.160
+that I have of Lisp,
+
+00:09:10.160 --> 00:09:11.360
+just so it's already there,
+
+00:09:11.360 --> 00:09:13.519
+and set the number of sublevels to one
+
+00:09:13.519 --> 00:09:16.080
+so only the top levels exist.
+
+09:16.080 --> 00:09:19.360
+Coming back over the top
+
+00:09:19.360 --> 00:09:21.576
+to put that all back together again.
+
+09:21.576 --> 00:09:22.720
+The startup just tells you
+
+00:09:22.720 --> 00:09:24.926
+that you want log times.
+
+09:24.926 --> 09:27.023
+The title, author, description, and…,
+
+09:27.023 --> 09:28.536
+they should be obvious, right,
+
+09:28.536 --> 09:29.920
+that's just text for the PDF.
+
+09:29.920 --> 09:33.049
+Options, we disable the table of contents,
+
+09:33.049 --> 09:34.320
+we do not want that.
+
+09:34.320 --> 00:09:35.680
+Now, the output config here,
+
+00:09:35.680 --> 00:09:37.519
+the first two are resulting
+
+00:09:37.519 --> 00:09:40.160
+in the timestamp formats, so, that was
+
+00:09:40.160 --> 00:09:41.920
+the tmp-f-timestamp function
+
+00:09:41.920 --> 00:09:43.468
+I showed you below.
+
+09:43.468 --> 09:45.310
+And, we got a better LaTeX stuff here,
+
+09:45.310 --> 09:47.134
+just saying that we want a landscape,
+
+09:47.134 --> 09:49.150
+and we want to use A4 paper size,
+
+09:49.150 --> 09:50.560
+and then the columns here.
+
+09:50.560 --> 00:09:51.839
+What we want is just to
+
+00:09:51.839 --> 00:09:52.880
+rename the properties
+
+00:09:52.880 --> 00:09:54.160
+to something which just looks
+
+09:54.160 --> 09:55.572
+a little bit nicer in the table.
+
+09:55.572 --> 09:58.320
+So you can see that: goals, activities,
+
+09:58.320 --> 10:00.979
+status, completed, and so forth.
+
+10:00.979 --> 00:10:03.760
+Then last but not least,
+
+00:10:03.760 --> 00:10:04.640
+on the actual thing,
+
+00:10:04.640 --> 00:10:06.487
+we use a longtable in LaTeX.
+
+10:06.487 --> 00:10:09.360
+We align, so we specify very exactly
+
+00:10:09.360 --> 00:10:11.040
+that we want five centimeters
+
+10:11.040 --> 10:13.364
+for the first and last two columns,
+
+10:13.364 --> 00:10:15.680
+and that we want all the other columns
+
+00:10:15.680 --> 00:10:17.196
+to use the remaining space.
+
+10:17.196 --> 10:19.040
+And that's it.
+
+10:19.040 --> 00:10:21.440
+Appreciate, I've absolutely whirlwinded
+
+00:10:21.440 --> 00:10:24.160
+through that, but please do feel free
+
+00:10:24.160 --> 00:10:26.144
+to ask me any questions,
+
+10:26.144 --> 10:28.786
+or speak to me offline.
+
+10:28.786 --> 10:32.839
+Thank you very much.
diff --git a/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--chapters.vtt b/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--chapters.vtt
new file mode 100644
index 00000000..1850cce5
--- /dev/null
+++ b/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--chapters.vtt
@@ -0,0 +1,31 @@
+WEBVTT
+
+00:00:01.040 --> 00:00:10.558
+Introduction
+
+00:00:10.559 --> 00:01:42.719
+How we build and budget project proposals
+
+00:01:42.720 --> 00:02:58.399
+Org mode template with embedded Emacs Lisp
+
+00:02:58.400 --> 00:03:37.279
+The project plan
+
+00:03:37.280 --> 00:04:40.719
+Effort
+
+00:04:40.720 --> 00:06:07.439
+Hourly rates
+
+00:06:07.440 --> 00:07:28.159
+Totals
+
+00:07:28.160 --> 00:08:21.038
+Payment structure
+
+00:08:21.039 --> 00:09:07.999
+Export
+
+00:09:08.000 --> 00:09:09.000
+Advantages
diff --git a/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main--chapters.vtt b/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main--chapters.vtt
new file mode 100644
index 00000000..1850cce5
--- /dev/null
+++ b/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main--chapters.vtt
@@ -0,0 +1,31 @@
+WEBVTT
+
+00:00:01.040 --> 00:00:10.558
+Introduction
+
+00:00:10.559 --> 00:01:42.719
+How we build and budget project proposals
+
+00:01:42.720 --> 00:02:58.399
+Org mode template with embedded Emacs Lisp
+
+00:02:58.400 --> 00:03:37.279
+The project plan
+
+00:03:37.280 --> 00:04:40.719
+Effort
+
+00:04:40.720 --> 00:06:07.439
+Hourly rates
+
+00:06:07.440 --> 00:07:28.159
+Totals
+
+00:07:28.160 --> 00:08:21.038
+Payment structure
+
+00:08:21.039 --> 00:09:07.999
+Export
+
+00:09:08.000 --> 00:09:09.000
+Advantages
diff --git a/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt b/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt
new file mode 100644
index 00000000..600577d8
--- /dev/null
+++ b/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt
@@ -0,0 +1,565 @@
+WEBVTT
+
+00:01.040 --> 00:00:02.800
+Hi, I am Adolfo Villafiorita.
+
+00:00:02.800 --> 00:00:04.799
+I am the co-founder of Shair.Tech,
+
+00:00:04.799 --> 00:00:07.200
+an innovative-- a socially-vocated
+
+00:00:07.200 --> 00:00:10.558
+innovative startup in Italy.
+
+00:00:10.559 --> 00:00:13.280
+Today I'm gonna talk about the way in which
+
+00:00:13.280 --> 00:00:17.680
+we use Org mode to budget our projects.
+
+00:00:17.680 --> 00:00:19.039
+First, I need to introduce the way
+
+00:00:19.039 --> 00:00:21.279
+in which we build our project budget.
+
+00:21.279 --> 00:00:22.480
+We start from the goals
+
+00:00:22.480 --> 00:00:24.720
+and the work to be performed,
+
+00:24.720 --> 00:00:29.840
+and we split it into different tasks
+
+00:29.840 --> 00:00:31.920
+which may be grouped in different ways,
+
+00:31.920 --> 00:00:33.440
+according to our needs.
+
+00:00:33.440 --> 00:00:36.800
+It could be user stories or functional groups
+
+00:00:36.800 --> 00:00:40.719
+or packages, and then for each task,
+
+00:00:40.719 --> 00:00:44.000
+we compute the effort.
+
+00:44.000 --> 00:00:45.440
+Then from the effort,
+
+00:00:45.440 --> 00:00:49.840
+we derive the project cost and price
+
+00:49.840 --> 00:00:52.239
+according to two different approaches.
+
+00:52.239 --> 00:00:53.280
+The first approach:
+
+00:00:53.280 --> 00:00:56.320
+we allocate the effort to each resource
+
+00:56.320 --> 00:00:59.680
+and we multiply the effort of the resource
+
+00:00:59.680 --> 00:01:01.359
+by the price of the results.
+
+00:01:01.359 --> 00:01:04.320
+We sum all the efforts together,
+
+00:01:04.320 --> 00:01:07.280
+and then we sum all the tasks together,
+
+00:01:07.280 --> 00:01:09.600
+the prices of all the tasks together.
+
+00:01:09.600 --> 00:01:11.200
+In the second approach,
+
+00:01:11.200 --> 00:01:16.400
+we use a generic effort estimation
+
+00:01:16.400 --> 00:01:20.799
+for each task, without allocating the effort
+
+00:01:20.799 --> 00:01:22.560
+to any specific person,
+
+00:01:22.560 --> 00:01:25.119
+and we multiply this effort
+
+00:01:25.119 --> 00:01:29.040
+by the average price of the resource.
+
+01:29.040 --> 00:01:34.720
+In both cases, the price is computed
+
+01:34.720 --> 00:01:40.079
+by summing cost to overheads and profit.
+
+00:01:40.079 --> 00:01:41.040
+We're a small company.
+
+00:01:41.040 --> 00:01:42.719
+We can choose our toolchain.
+
+00:01:42.720 --> 00:01:44.960
+So we decided to use Org mode
+
+00:01:44.960 --> 00:01:47.360
+for writing our proposals.
+
+01:47.360 --> 00:01:49.200
+We built a template.
+
+00:01:49.200 --> 00:01:54.159
+The template has got a fixed structure
+
+01:54.159 --> 00:01:56.880
+which allows us to do a lot of reuse,
+
+01:56.880 --> 00:01:59.600
+and some Emacs Lisp code
+
+00:01:59.600 --> 00:02:01.040
+and Org mode features
+
+00:02:01.040 --> 00:02:04.079
+to build the project tables.
+
+00:02:04.079 --> 00:02:07.600
+Let me show you, without further ado,
+
+00:02:07.600 --> 00:02:11.760
+the template which is shown here.
+
+02:11.760 --> 00:02:15.520
+Basically it is a fairly standard
+
+02:15.520 --> 00:02:17.750
+Org mode document.
+
+02:20.800 --> 00:02:23.760
+There are some sections here.
+
+02:23.760 --> 00:02:28.879
+Let me show you the structure here.
+
+02:28.879 --> 00:02:30.000
+There are some sections,
+
+00:02:30.000 --> 00:02:34.959
+some of which are not exported /
+
+00:02:34.959 --> 00:02:36.640
+shown to the client,
+
+02:36.640 --> 00:02:39.519
+because they are of no interest to them,
+
+02:39.519 --> 00:02:41.040
+such as, for instance,
+
+00:02:41.040 --> 00:02:43.280
+the plaintext of each
+
+00:02:43.280 --> 00:02:45.440
+ledger accounting entries
+
+02:45.440 --> 00:02:47.440
+we generate for the project
+
+02:47.440 --> 00:02:53.680
+or some info about the detailed budget data,
+
+00:02:53.680 --> 00:02:56.319
+while others are shared with the clients
+
+00:02:56.319 --> 00:02:58.399
+to form a project proposal.
+
+00:02:58.400 --> 00:03:00.400
+Now the structure is not really important
+
+00:03:00.400 --> 00:03:02.720
+in the sense that the only constraint
+
+00:03:02.720 --> 00:03:05.360
+and requirement we set
+
+00:03:05.360 --> 00:03:07.599
+is that there has to be a section
+
+03:07.599 --> 00:03:10.800
+with an ID named plan,
+
+03:10.800 --> 00:03:15.840
+which will contain the project plan.
+
+03:15.840 --> 00:03:21.040
+Here, for instance, we have a project plan
+
+00:03:21.040 --> 00:03:23.599
+made of a user story
+
+03:23.599 --> 00:03:25.360
+whose development is split into
+
+00:03:25.360 --> 00:03:27.360
+three different tasks.
+
+03:27.360 --> 00:03:30.080
+For each task, let me show you
+
+00:03:30.080 --> 00:03:33.200
+just the structure
+
+00:03:33.200 --> 00:03:37.279
+before the application of the template.
+
+03:37.280 --> 00:03:45.200
+For each task, you need to define the effort.
+
+00:03:45.200 --> 00:03:47.360
+Here, for instance, we have an effort,
+
+00:03:47.360 --> 00:03:50.480
+a generic effort not allocated to any person.
+
+03:50.480 --> 00:03:52.400
+We use Org mode duration,
+
+00:03:52.400 --> 00:03:54.799
+60 stands for 60 minutes,
+
+03:54.799 --> 00:03:57.680
+and here we have an effort profile.
+
+00:03:57.680 --> 00:04:02.000
+So in task 1.2, Adolfo will work 10 days
+
+00:04:02.000 --> 00:04:04.159
+and Michele 20 days.
+
+04:04.159 --> 00:04:06.000
+These are working days,
+
+00:04:06.000 --> 00:04:07.439
+so one working day
+
+00:04:07.439 --> 00:04:09.760
+corresponds to eight hours.
+
+04:09.760 --> 00:04:13.519
+This is standard. We might revise these
+
+04:13.519 --> 00:04:15.040
+to become more compliant
+
+00:04:15.040 --> 00:04:19.759
+with the definition given by Org mode.
+
+00:04:19.759 --> 00:04:23.040
+Notice that you can or cannot,
+
+00:04:23.040 --> 00:04:26.720
+you may or may not use TODO keywords here,
+
+00:04:26.720 --> 00:04:29.199
+if you want. We don't usually use them
+
+00:04:29.199 --> 00:04:31.360
+because the final document
+
+00:04:31.360 --> 00:04:34.720
+looks nice to the customer without TODO.
+
+00:04:34.720 --> 00:04:38.479
+We then add them when we move to
+
+00:04:38.479 --> 00:04:40.719
+a later stage.
+
+04:40.720 --> 00:04:43.040
+So once you define the plan
+
+00:04:43.040 --> 00:04:45.600
+with the effort allocation,
+
+04:45.600 --> 00:04:51.440
+you can go back to the Emacs Lisp part
+
+00:04:51.440 --> 00:04:55.680
+where you can set three different variables
+
+04:55.680 --> 00:04:59.680
+to define the hourly rates of your team.
+
+04:59.680 --> 00:05:02.880
+So for instance, here I am taking
+
+00:05:02.880 --> 00:05:06.160
+10 euros per hour
+
+00:05:06.160 --> 00:05:09.680
+(not real rate, actually), and Michele at 20.
+
+05:09.680 --> 00:05:11.360
+And then you can set the profit
+
+00:05:11.360 --> 00:05:14.560
+as a percentage on top of the hourly rate
+
+00:05:14.560 --> 00:05:16.160
+and profit as a percentage
+
+00:05:16.160 --> 00:05:19.360
+on top of hourly rates.
+
+05:19.360 --> 00:05:24.000
+The ballpark effort allocation here
+
+00:05:24.000 --> 00:05:28.880
+is used to compute the average tariff,
+
+05:28.880 --> 00:05:32.160
+our average hourly rate,
+
+05:32.160 --> 00:05:33.600
+as a weighted average.
+
+00:05:33.600 --> 00:05:36.320
+So here I'm saying that on average,
+
+00:05:36.320 --> 00:05:40.639
+I will work 30% of the effort of each task,
+
+00:05:40.639 --> 00:05:42.400
+while Michele will take care of
+
+00:05:42.400 --> 00:05:47.280
+the remaining 70%, and the hourly rate
+
+00:05:47.280 --> 00:05:48.720
+is computed by multiplying
+
+00:05:48.720 --> 00:05:57.120
+30% by 10 + 70% by 20.
+
+05:57.120 --> 00:06:00.880
+If I do a C-c C-c here, I execute
+
+00:06:00.880 --> 00:06:05.440
+the Emacs Lisp code
+
+00:06:05.440 --> 00:06:07.439
+in the source code block.
+
+00:06:07.440 --> 00:06:08.880
+As you can see,
+
+00:06:08.880 --> 00:06:15.759
+Emacs put back the properties
+
+06:15.759 --> 00:06:17.840
+that transform the effort
+
+00:06:17.840 --> 00:06:19.600
+into a total amount:
+
+00:06:19.600 --> 00:06:22.800
+namely, the effort is first transformed
+
+00:06:22.800 --> 00:06:24.479
+into working hours,
+
+06:24.479 --> 00:06:27.280
+the rates and costs are computed,
+
+06:27.280 --> 00:06:28.880
+overhead computed,
+
+00:06:28.880 --> 00:06:32.160
+and everything contributes
+
+00:06:32.160 --> 00:06:34.639
+to the total amount.
+
+06:34.639 --> 00:06:37.600
+Same thing here.
+
+00:06:37.600 --> 00:06:41.440
+The cost is slightly more complex
+
+00:06:41.440 --> 00:06:45.360
+because we use profiled effort,
+
+06:45.360 --> 00:06:47.199
+and so on and so forth.
+
+00:06:47.199 --> 00:06:49.680
+This information here
+
+00:06:49.680 --> 00:06:56.960
+can be then grouped up
+
+06:56.960 --> 00:06:59.759
+to form the project plan
+
+00:06:59.759 --> 00:07:01.599
+and project budget.
+
+00:07:01.599 --> 00:07:03.039
+As you can see,
+
+07:03.039 --> 00:07:06.880
+this is something we do not export
+
+07:06.880 --> 00:07:09.440
+in the project proposal to the client,
+
+07:09.440 --> 00:07:10.880
+because we prefer to do
+
+00:07:10.880 --> 00:07:13.199
+some rounding by hand
+
+07:13.199 --> 00:07:14.880
+in order to build a budget
+
+00:07:14.880 --> 00:07:20.880
+which is, let's say, more reasonable.
+
+07:20.880 --> 00:07:24.639
+This table here computes VAT
+
+00:07:24.639 --> 00:07:28.159
+on total amounts by C-c C-c once again.
+
+00:07:28.160 --> 00:07:31.120
+Then this table here, the payment structure
+
+00:07:31.120 --> 00:07:36.080
+is used to compute the amount to be paid
+
+00:07:36.080 --> 00:07:39.280
+according to the different payments
+
+00:07:39.280 --> 00:07:40.800
+we want to set in the project.
+
+00:07:40.800 --> 00:07:42.160
+Here, for instance, we are setting
+
+00:07:42.160 --> 00:07:45.919
+three payments with the following percentages,
+
+00:07:45.919 --> 00:07:49.199
+and the table, you set the dates and amounts,
+
+00:07:49.199 --> 00:07:53.440
+and the table keeps track of the rest
+
+00:07:53.440 --> 00:07:56.479
+by looking at the total amount
+
+07:56.479 --> 00:08:00.800
+it finds here in the budget table,
+
+00:08:00.800 --> 00:08:03.280
+so the payment structure and budget
+
+00:08:03.280 --> 00:08:07.280
+are then used by this piece of code here
+
+08:07.280 --> 00:08:12.000
+to build the entries
+
+00:08:12.000 --> 00:08:16.720
+used for our internal accounting,
+
+08:16.720 --> 00:08:21.038
+which is based on hledger.
+
+08:21.039 --> 00:08:23.759
+We did everything here by hand,
+
+08:23.759 --> 00:08:26.400
+but it is not necessary, of course,
+
+08:26.400 --> 00:08:31.280
+because if you export the document
+
+00:08:31.280 --> 00:08:34.880
+using C-c C-e and then, for instance,
+
+00:08:34.880 --> 00:08:39.760
+l for LaTeX and p for PDF,
+
+08:39.760 --> 00:08:43.279
+Org mode takes care of evaluating
+
+00:08:43.279 --> 00:08:46.480
+each piece of code in the document
+
+00:08:46.480 --> 00:08:50.720
+and generate the updated documents.
+
+00:08:50.720 --> 00:08:52.000
+Here, for instance, you can see
+
+00:08:52.000 --> 00:08:55.680
+that the PDF generated from the template
+
+00:08:55.680 --> 00:08:57.440
+which contains all the tables, budget,
+
+00:08:57.440 --> 00:08:59.920
+and payment schema, everything,
+
+00:08:59.920 --> 00:09:02.240
+which we use to make an offer
+
+00:09:02.240 --> 00:09:07.999
+to our clients.
+
+09:08.000 --> 00:09:10.000
+There are various advantages,
+
+00:09:10.000 --> 00:09:12.640
+the first, the main one being that
+
+00:09:12.640 --> 00:09:15.600
+we keep all the information in one place,
+
+09:15.600 --> 00:09:17.920
+and that we can version
+
+00:09:17.920 --> 00:09:20.399
+the different versions.
+
+00:09:20.399 --> 00:09:21.680
+You can use source control
+
+00:09:21.680 --> 00:09:24.640
+to version different iterations
+
+00:09:24.640 --> 00:09:26.080
+on the document.
+
+09:26.080 --> 00:09:28.000
+If you want, you can find the document here.
+
+00:09:28.000 --> 00:09:33.120
+Thank you for your attention,
+
+00:09:33.120 --> 00:09:34.120
+and I'm open to questions.
+
+00:09:34.120 --> 00:09:37.279
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--chapters.vtt b/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--chapters.vtt
new file mode 100644
index 00000000..107ae37a
--- /dev/null
+++ b/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--chapters.vtt
@@ -0,0 +1,16 @@
+WEBVTT
+
+00:00:00.480 --> 00:00:51.759
+Introduction
+
+00:00:51.760 --> 00:02:30.238
+Elfeed
+
+00:02:30.239 --> 00:03:50.559
+org-ref
+
+00:03:50.560 --> 00:05:48.719
+BibLaTeX
+
+00:05:48.720 --> 00:05:49.720
+Notes and org-roam
diff --git a/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main--chapters.vtt b/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main--chapters.vtt
new file mode 100644
index 00000000..107ae37a
--- /dev/null
+++ b/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main--chapters.vtt
@@ -0,0 +1,16 @@
+WEBVTT
+
+00:00:00.480 --> 00:00:51.759
+Introduction
+
+00:00:51.760 --> 00:02:30.238
+Elfeed
+
+00:02:30.239 --> 00:03:50.559
+org-ref
+
+00:03:50.560 --> 00:05:48.719
+BibLaTeX
+
+00:05:48.720 --> 00:05:49.720
+Notes and org-roam
diff --git a/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt b/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt
new file mode 100644
index 00000000..8686153d
--- /dev/null
+++ b/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt
@@ -0,0 +1,520 @@
+WEBVTT
+
+00:00.480 --> 00:00:02.639
+Hello, everyone. My name is Ahmed
+
+00:00:02.639 --> 00:00:05.279
+and I am very happy to be here.
+
+00:05.279 --> 00:00:07.359
+Today I'll talk about
+
+00:00:07.359 --> 00:00:12.160
+my academic workflow inside Emacs.
+
+00:12.160 --> 00:00:14.880
+So the main needs that I have
+
+00:00:14.880 --> 00:00:16.880
+is to keep up with the current research
+
+00:00:16.880 --> 00:00:19.760
+in my field, and to be able
+
+00:00:19.760 --> 00:00:23.920
+to take notes, and write,
+
+00:00:23.920 --> 00:00:25.359
+and use these notes later
+
+00:00:25.359 --> 00:00:29.439
+in writing my papers inside Emacs.
+
+00:00:29.439 --> 00:00:31.119
+Emacs is a great program for this
+
+00:00:31.119 --> 00:00:32.880
+because it is very extendable
+
+00:00:32.880 --> 00:00:36.960
+and we can basically write
+
+00:00:36.960 --> 00:00:39.440
+whatever we are missing.
+
+00:39.440 --> 00:00:41.360
+It replaced my earlier
+
+00:00:41.360 --> 00:00:42.559
+proprietary workflow
+
+00:00:42.559 --> 00:00:44.320
+that involved using Mendeley
+
+00:44.320 --> 00:00:46.320
+and Visual Studio Code
+
+00:00:46.320 --> 00:00:47.760
+and many other tools
+
+00:00:47.760 --> 00:00:49.760
+in order to do the things
+
+00:00:49.760 --> 00:00:51.759
+that I'll show today.
+
+00:51.760 --> 00:00:54.480
+So the first concern that I have
+
+00:00:54.480 --> 00:00:57.280
+is to keep up with new papers.
+
+00:00:57.280 --> 00:01:02.399
+To do that, I use this package called elfeed.
+
+01:02.399 --> 00:01:05.760
+Elfeed is basically just an RSS reader,
+
+01:05.760 --> 00:01:09.600
+and here I fetch all the papers that I need
+
+00:01:09.600 --> 00:01:12.159
+from arXiv, which is the main source
+
+00:01:12.159 --> 00:01:14.080
+of papers in my field
+
+00:01:14.080 --> 00:01:16.720
+and many other scientific fields.
+
+01:16.720 --> 00:01:22.640
+It allows me to view these papers
+
+00:01:22.640 --> 00:01:27.680
+with the abstracts and so on.
+
+01:27.680 --> 00:01:32.159
+In order to simplify viewing
+
+00:01:32.159 --> 00:01:34.799
+and searching for relevant papers,
+
+00:01:34.799 --> 00:01:36.400
+I used this other package called
+
+00:01:36.400 --> 00:01:41.600
+elfeed-score, and elfeed-score enables me
+
+00:01:41.600 --> 00:01:44.560
+to assign a numerical score like this
+
+00:01:44.560 --> 00:01:47.600
+to each of the arXiv entries.
+
+00:01:47.600 --> 00:01:49.200
+This numerical score is very simple.
+
+00:01:49.200 --> 00:01:52.560
+It's just based on matching things.
+
+00:01:52.560 --> 00:01:59.200
+So, for example, we can ask elfeed
+
+01:59.200 --> 00:02:05.040
+to explain this. So if we say = x,
+
+02:05.040 --> 00:02:08.720
+then this just says that
+
+00:02:08.720 --> 00:02:10.000
+this matches three rules
+
+00:02:10.000 --> 00:02:12.720
+for a score of 76. This paper.
+
+00:02:12.720 --> 00:02:14.959
+This is simply because I am searching
+
+00:02:14.959 --> 00:02:16.800
+for these keywords
+
+00:02:16.800 --> 00:02:19.040
+that are very interesting to me,
+
+00:02:19.040 --> 00:02:20.879
+such as neural networks
+
+00:02:20.879 --> 00:02:22.879
+or federated learning.
+
+00:02:22.879 --> 00:02:28.959
+And now, if I see a paper here
+
+00:02:28.959 --> 00:02:30.238
+that I am interested in...
+
+00:02:30.239 --> 00:02:32.720
+Let's say I'm interested in this paper
+
+00:02:32.720 --> 00:02:35.040
+about Gaussian Process Inference,
+
+02:35.040 --> 00:02:36.640
+then I want to store it
+
+00:02:36.640 --> 00:02:40.160
+in my local library. So I want the PDF
+
+00:02:40.160 --> 00:02:41.920
+and I want to be able to cite it
+
+00:02:41.920 --> 00:02:44.000
+in the future. To do that,
+
+00:02:44.000 --> 00:02:46.080
+I use a package called org-ref
+
+00:02:46.080 --> 00:02:54.640
+that allows me to fetch papers from arXiv.
+
+00:02:54.640 --> 00:02:56.720
+So here I wrote a helper function,
+
+00:02:56.720 --> 00:02:59.200
+this elfeed-entry-to-arxiv
+
+02:59.200 --> 00:03:02.480
+that automatically gets this paper.
+
+00:03:02.480 --> 00:03:03.840
+It asks me where to put it,
+
+00:03:03.840 --> 00:03:07.840
+it completes with my default libraries,
+
+03:07.840 --> 00:03:13.360
+and then it fetches the paper from arXiv
+
+03:13.360 --> 00:03:16.159
+and places it in this folder,
+
+00:03:16.159 --> 00:03:20.000
+and also places it in my bibliography file
+
+00:03:20.000 --> 00:03:23.280
+which is written in BibLaTex.
+
+03:23.280 --> 00:03:30.239
+So here, if we search for this paper now,
+
+03:30.239 --> 00:03:35.200
+we find that it is in our library.
+
+03:35.200 --> 00:03:38.000
+This library interface
+
+00:03:38.000 --> 00:03:41.280
+is from a package called citar,
+
+00:03:41.280 --> 00:03:44.000
+and I have customized it quite a bit
+
+00:03:44.000 --> 00:03:48.879
+to display all of the papers in my library
+
+03:48.879 --> 00:03:50.559
+in this format.
+
+03:50.560 --> 00:03:55.439
+This just reads from a BibLaTeX file.
+
+00:03:55.439 --> 00:03:59.519
+So if we open it like this,
+
+03:59.519 --> 00:04:02.879
+you'll see that this is the
+
+04:02.879 --> 00:04:06.640
+the entry that it placed.
+
+04:06.640 --> 00:04:10.959
+One of the interesting things here is that
+
+04:10.959 --> 00:04:13.519
+org-ref actually doesn't really fetch
+
+00:04:13.519 --> 00:04:16.079
+all of the entries in this format.
+
+00:04:16.079 --> 00:04:18.639
+Moreover, I want all the entries in my file
+
+00:04:18.639 --> 00:04:20.160
+to look quite similar,
+
+04:20.160 --> 00:04:23.520
+and to have this very similar look,
+
+04:23.520 --> 00:04:25.440
+and the way I accomplish that is by
+
+00:04:25.440 --> 00:04:28.960
+using several tools and chaining them.
+
+04:28.960 --> 00:04:37.280
+So in order to see this...
+
+04:37.280 --> 00:04:39.600
+So here, this is the function
+
+04:39.600 --> 00:04:41.680
+that I used to...
+
+04:41.680 --> 00:04:46.720
+This is basically run as a hook after each time
+
+04:46.720 --> 00:04:49.680
+Emacs modifies the bibliography file,
+
+04:49.680 --> 00:04:52.320
+and it runs rebiber
+
+00:04:52.320 --> 00:04:56.479
+which gets the conference versions
+
+00:04:56.479 --> 00:04:58.320
+of papers that I fetch from arXiv,
+
+00:04:58.320 --> 00:05:00.800
+because arXiv is a preprint directory,
+
+05:00.800 --> 00:05:05.360
+and then biber normalizes the arXiv file
+
+05:05.360 --> 00:05:07.919
+to have a consistent look,
+
+00:05:07.919 --> 00:05:10.320
+and then I apply just some substitutions
+
+00:05:10.320 --> 00:05:12.960
+which I like more.
+
+05:12.960 --> 00:05:14.560
+Finally, I have the whole thing
+
+00:05:14.560 --> 00:05:16.639
+under version control.
+
+05:16.639 --> 00:05:20.000
+This function, reformat-bib-library,
+
+00:05:20.000 --> 00:05:21.840
+I make it into a hook
+
+00:05:21.840 --> 00:05:24.720
+and I run it every time after I save.
+
+05:24.720 --> 00:05:27.039
+It just checks if the current buffer
+
+05:27.039 --> 00:05:29.039
+is the main bib library.
+
+00:05:29.039 --> 00:05:31.840
+We will just reformat the library.
+
+00:05:31.840 --> 00:05:33.680
+This allows me to keep the library
+
+00:05:33.680 --> 00:05:37.199
+looking all consistent like this.
+
+05:37.199 --> 00:05:39.120
+By the way, all of the code is available.
+
+05:39.120 --> 00:05:40.880
+You don't have to get it from the video.
+
+05:40.880 --> 00:05:44.479
+I will attach it as a GitHub gist.
+
+05:48.720 --> 00:05:49.919
+One of the things
+
+00:05:49.919 --> 00:05:51.520
+that are really important
+
+00:05:51.520 --> 00:05:54.080
+is that I want to be able to keep notes
+
+00:05:54.080 --> 00:05:56.160
+on papers that I read.
+
+05:56.160 --> 00:05:58.479
+For example, here are some of
+
+00:05:58.479 --> 00:06:00.319
+my existing notes.
+
+06:00.319 --> 00:06:04.720
+Now, let's add a note to the paper
+
+00:06:04.720 --> 00:06:06.080
+that we just got.
+
+00:06:06.080 --> 00:06:08.800
+So the the pipeline here is that
+
+00:06:08.800 --> 00:06:12.080
+I use citar with embark,
+
+06:12.080 --> 00:06:13.199
+which is another library,
+
+00:06:13.199 --> 00:06:15.600
+but you can use any other library
+
+00:06:15.600 --> 00:06:17.039
+just for completion
+
+00:06:17.039 --> 00:06:19.600
+and acting upon completion, like ivy,
+
+06:19.600 --> 00:06:21.360
+and I ask it to open notes
+
+00:06:21.360 --> 00:06:23.680
+and then it asks me how to capture it.
+
+00:06:23.680 --> 00:06:25.120
+So these capture templates
+
+00:06:25.120 --> 00:06:27.440
+are handled by the org-roam package,
+
+00:06:27.440 --> 00:06:30.400
+which is a very, very interesting package
+
+00:06:30.400 --> 00:06:32.560
+for note-taking.
+
+06:32.560 --> 00:06:36.160
+org-roam, among other things, allows us
+
+00:06:36.160 --> 00:06:38.800
+to write linkable notes in Org mode,
+
+06:38.800 --> 00:06:42.400
+and moreover, it is very extensible.
+
+06:42.400 --> 00:06:45.600
+There is another package called org-roam-bibtex
+
+00:06:45.600 --> 00:06:47.840
+that allows us to attach these nodes
+
+00:06:47.840 --> 00:06:50.000
+to bibliography files,
+
+00:06:50.000 --> 00:06:51.919
+which is what I'm doing right now.
+
+06:51.919 --> 00:06:54.800
+For example, I set up the capture template
+
+00:06:54.800 --> 00:06:57.680
+such that when I press s
+
+00:06:57.680 --> 00:07:01.440
+for short bibliography reference,
+
+07:01.440 --> 00:07:04.800
+it will make a new headline
+
+07:04.800 --> 00:07:08.479
+in my "Reference Notes" note,
+
+07:08.479 --> 00:07:10.479
+and I can write things here
+
+00:07:10.479 --> 00:07:14.960
+(so, for example, "seems interesting")
+
+07:14.960 --> 00:07:18.000
+and then note here that it added this paper
+
+00:07:18.000 --> 00:07:24.319
+to ROAM_REFS, so this means that
+
+07:24.319 --> 00:07:26.720
+when I look at these papers using citar,
+
+07:26.720 --> 00:07:30.319
+it will be able to find this note.
+
+07:30.319 --> 00:07:34.000
+Similarly, we can also add long-form notes.
+
+00:07:34.000 --> 00:07:37.199
+For example, if I do this and I add r,
+
+07:37.199 --> 00:07:39.840
+it will create an entirely new file
+
+00:07:39.840 --> 00:07:48.000
+that I can take detailed notes in.
+
+07:48.000 --> 00:07:50.639
+The strengths of org-roam is that
+
+00:07:50.639 --> 00:07:53.520
+I can do things like linking papers.
+
+07:53.520 --> 00:07:55.360
+For example, here are several books
+
+07:55.360 --> 00:08:00.000
+that I am reading. This file just collects
+
+00:08:00.000 --> 00:08:02.319
+these books so that I can find them
+
+00:08:02.319 --> 00:08:03.919
+for easy reference.
+
+08:03.919 --> 00:08:07.599
+Of course, I can link these files from inside.
+
+08:07.599 --> 00:08:13.759
+You can see here that I also use org-cite
+
+08:13.759 --> 00:08:18.720
+to cite other files, and I can act upon this
+
+08:18.720 --> 00:08:21.199
+and open the notes corresponding to
+
+00:08:21.199 --> 00:08:28.240
+this other book.
+
+08:28.240 --> 00:08:30.319
+So I'm a little short on time.
+
+00:08:30.319 --> 00:08:32.719
+I cannot go into detail on everything,
+
+00:08:32.719 --> 00:08:34.560
+but I will share my configuration,
+
+00:08:34.560 --> 00:08:37.919
+and I hope that this will inspire other people
+
+00:08:37.919 --> 00:08:43.919
+to also use Emacs for their academic workflows.
+
+08:43.919 --> 00:08:44.919
+Thank you so much.
+
+00:08:44.919 --> 00:08:47.279
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.vtt b/2021/captions/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.vtt
new file mode 100644
index 00000000..9bba8336
--- /dev/null
+++ b/2021/captions/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.vtt
@@ -0,0 +1,817 @@
+WEBVTT
+
+00:00.080 --> 00:01.360
+Hi. My name is Ethan,
+
+00:01.360 --> 00:02.320
+and today I'm going to be speaking
+
+00:02.320 --> 00:04.240
+about tree-edit, which is a package
+
+00:04.240 --> 00:06.160
+which aims to bring structural editing
+
+00:06.160 --> 00:08.320
+to everyday languages.
+
+00:08.320 --> 00:10.559
+So what is structural editing?
+
+00:10.559 --> 00:11.657
+The way that we typically
+
+00:11.657 --> 00:12.578
+write code today
+
+00:12.578 --> 00:14.480
+is working with characters, words,
+
+00:14.480 --> 00:16.206
+lines, paragraphs, and so on,
+
+00:16.206 --> 00:18.600
+and these objects have no real relation
+
+00:18.600 --> 00:21.520
+to the structure of programming languages.
+
+00:21.520 --> 00:24.667
+In contrast, tree-edit's editing operations
+
+00:24.667 --> 00:26.897
+map exactly to the structure
+
+00:26.897 --> 00:28.411
+of the programming language,
+
+00:28.411 --> 00:30.303
+which is typically in a tree form
+
+00:30.303 --> 00:32.053
+with different types of nodes
+
+00:32.053 --> 00:33.920
+such as identifiers, expressions,
+
+00:33.920 --> 00:35.957
+and statements. Using this structure
+
+00:35.957 --> 00:37.548
+can enable much more powerful
+
+00:37.548 --> 00:39.200
+editing operations,
+
+00:39.200 --> 00:40.769
+and crucially editing operations
+
+00:40.769 --> 00:42.081
+that map much more closely
+
+00:42.081 --> 00:44.960
+to the way that we think about code.
+
+00:44.960 --> 00:46.140
+tree-edit was inspired by
+
+00:46.140 --> 00:47.386
+paredit and lispy,
+
+00:47.386 --> 00:48.320
+which are two great
+
+00:48.320 --> 00:50.271
+Lisp structural editors.
+
+00:50.271 --> 00:52.383
+However, what makes tree-edit unique
+
+00:52.383 --> 00:54.480
+is that it can work with many languages,
+
+00:54.480 --> 00:55.759
+such as some of the
+
+00:55.759 --> 00:59.826
+more mainstream languages like C, Java,
+
+00:59.826 --> 01:01.600
+Python, and so on.
+
+01:01.600 --> 01:03.273
+So now I'm going to show off tree-edit
+
+01:03.273 --> 01:05.705
+in action, working with a Java program.
+
+01:05.705 --> 01:07.237
+So we can see on the left,
+
+01:07.237 --> 01:09.119
+we have a syntax tree,
+
+01:09.119 --> 01:11.560
+and the node in bold is what I call
+
+01:11.560 --> 01:13.780
+the current node. So instead of
+
+01:13.780 --> 01:15.100
+the concept of a cursor,
+
+01:15.100 --> 01:17.600
+where we have a point in 2D space,
+
+01:17.600 --> 01:20.285
+we instead work with a current node
+
+01:20.285 --> 01:22.729
+which all our editing operations
+
+01:22.729 --> 01:23.840
+take place upon.
+
+01:23.840 --> 01:26.479
+So we can move up and down,
+
+01:26.479 --> 01:28.720
+or rather side to side,
+
+01:28.720 --> 01:31.160
+move inwards down to the children
+
+01:31.160 --> 01:33.920
+of the tree, back up to the parents.
+
+01:33.920 --> 01:36.799
+We can also jump to a node by its type.
+
+01:36.799 --> 01:38.768
+So we're going to jump to
+
+01:38.768 --> 01:40.880
+a variable declaration.
+
+01:40.880 --> 01:44.399
+We can jump to an if statement.
+
+01:44.399 --> 01:46.880
+And as you might have noticed,
+
+01:46.880 --> 01:48.360
+tree-edit by default
+
+01:48.360 --> 01:51.337
+uses a vim-style mode of editing,
+
+01:51.337 --> 01:55.119
+so it's a verb, which would be jump,
+
+01:55.119 --> 01:56.874
+and then a type,
+
+01:56.874 --> 02:00.799
+which would be if statement.
+
+02:00.799 --> 02:03.346
+So now I'll show off
+
+02:03.346 --> 02:06.144
+the syntax tree modification in action.
+
+02:06.144 --> 02:08.000
+So if I delete this deleteme node,
+
+02:08.000 --> 02:10.112
+we can see the node is deleted,
+
+02:10.112 --> 02:12.049
+and also the comma is removed
+
+02:12.049 --> 02:13.920
+since it's no longer needed.
+
+02:13.920 --> 02:16.720
+We can add some nodes back in.
+
+02:16.720 --> 02:18.160
+Here we just have a placeholder node
+
+02:18.160 --> 02:20.391
+called tree, which we can swap out
+
+02:20.391 --> 02:21.875
+with whatever we like.
+
+02:21.875 --> 02:24.560
+So if we want to put in, for example,
+
+02:24.560 --> 02:29.280
+a plus or minus operator,
+
+02:29.280 --> 02:30.879
+it'll put these two TREE things here
+
+02:30.879 --> 02:32.634
+since there needs to be something there,
+
+02:32.634 --> 02:37.360
+but we can go fill them out as we like.
+
+02:37.360 --> 02:38.595
+So that's what that is.
+
+02:38.595 --> 02:41.920
+Then I'll delete these again.
+
+02:41.920 --> 02:43.709
+Next we can see raising.
+
+02:43.709 --> 02:45.280
+So if I raise reader,
+
+02:45.280 --> 02:46.160
+then it will replace
+
+02:46.160 --> 02:47.342
+the outer function call
+
+02:47.342 --> 02:48.583
+with the node itself.
+
+02:48.583 --> 02:50.948
+I could raise it again.
+
+02:50.948 --> 02:53.363
+The opposite operation to that
+
+02:53.363 --> 02:57.200
+is wrapping. So I can wrap reader
+
+02:57.200 --> 02:59.519
+back into function call,
+
+02:59.519 --> 03:03.009
+and I could wrap this again
+
+03:03.009 --> 03:08.480
+if I wanted to. So that is wrapping.
+
+03:08.480 --> 03:12.640
+We can also do it on a statement level,
+
+03:12.640 --> 03:13.760
+so if I want to wrap this
+
+03:13.760 --> 03:14.480
+in an if statement,
+
+03:14.480 --> 03:17.034
+I can wrap the statement,
+
+03:17.034 --> 03:18.400
+and there we go.
+
+03:18.400 --> 03:21.280
+And let's just raise it back up,
+
+03:21.280 --> 03:23.200
+raise it again.
+
+03:23.200 --> 03:25.760
+There we go. Finally, I'll show off
+
+03:26.959 --> 03:28.720
+slurping and barfing,
+
+03:28.720 --> 03:32.256
+which... a little bit gross words,
+
+03:32.256 --> 03:34.879
+but I think it accurately describes
+
+03:34.879 --> 03:37.519
+the action, so let me just add
+
+03:37.519 --> 03:41.120
+a couple breaks here.
+
+03:41.120 --> 03:44.748
+So let's say we want
+
+03:44.748 --> 03:46.779
+this if statement and a couple of breaks
+
+03:46.779 --> 03:48.319
+to be inside of the while,
+
+03:48.319 --> 03:50.959
+so we can just slurp this up,
+
+03:50.959 --> 03:52.433
+and if we don't actually want them,
+
+03:52.433 --> 03:54.528
+we can barf them back out.
+
+03:54.528 --> 03:56.736
+So that's where those words
+
+03:56.736 --> 03:57.840
+have come from.
+
+03:57.840 --> 04:01.120
+And we can just... delete as we please.
+
+04:01.120 --> 04:03.826
+So yeah, that's a quick overview
+
+04:03.826 --> 04:07.360
+of the tree editing plugin in action.
+
+04:07.360 --> 04:08.900
+So now I want to talk a little bit
+
+04:08.900 --> 04:12.080
+about the implementation of tree-edit.
+
+04:12.080 --> 04:14.400
+Tree-edit uses the tree-sitter parser
+
+04:14.400 --> 04:17.919
+to convert text into a syntax tree.
+
+04:17.919 --> 04:21.501
+Tree-sitter is used by GitHub
+
+04:21.501 --> 04:22.752
+for its syntax highlighting,
+
+04:22.752 --> 04:25.280
+and it's available in a bunch of editors,
+
+04:25.280 --> 04:27.120
+including Emacs, so it's
+
+04:27.120 --> 04:28.960
+a fairly standard tool.
+
+04:28.960 --> 04:30.960
+However, the unique part about tree-edit
+
+04:30.960 --> 04:32.479
+is how it performs
+
+04:32.479 --> 04:34.479
+correct editing operations
+
+04:34.479 --> 04:35.919
+on the syntax tree
+
+04:35.919 --> 04:38.320
+and then converts that back into text.
+
+04:38.320 --> 04:41.759
+So to do that, we use miniKanren,
+
+04:41.759 --> 04:43.759
+and miniKanren is an embedded
+
+04:43.759 --> 04:45.120
+domain-specific language
+
+04:45.120 --> 04:47.440
+for logic programming.
+
+04:47.440 --> 04:50.080
+So what exactly does that mean?
+
+04:50.080 --> 04:51.280
+In our case, it's just
+
+04:51.280 --> 04:54.240
+an Emacs Lisp library called reazon,
+
+04:54.240 --> 04:56.720
+which exposes a set of macros
+
+04:56.720 --> 04:58.320
+which enables us to program
+
+04:58.320 --> 05:01.360
+in this logic programming style.
+
+05:01.360 --> 05:03.280
+I'm not going to get into the details
+
+05:03.280 --> 05:05.520
+of how logic programming works.
+
+05:05.520 --> 05:07.520
+However, one of the most unique aspects
+
+05:07.520 --> 05:09.919
+about it is that we can define
+
+05:09.919 --> 05:13.600
+a predicate and then figure out
+
+05:13.600 --> 05:15.280
+all the inputs to the predicate
+
+05:15.280 --> 05:17.759
+that would hold to be true.
+
+05:17.759 --> 05:19.360
+So in this case,
+
+05:19.360 --> 05:21.520
+we have our query variable q,
+
+05:21.520 --> 05:24.479
+which will be what the output is,
+
+05:24.479 --> 05:29.120
+and we are asking for all the values of q
+
+05:29.120 --> 05:32.080
+that pass this predicate of
+
+05:32.080 --> 05:34.479
+being set-equal to 1 2 3 4.
+
+05:34.479 --> 05:36.880
+So if we execute this,
+
+05:36.880 --> 05:40.080
+it will take a little time...
+
+05:40.080 --> 05:41.520
+It shouldn't be taking this long.
+
+05:41.520 --> 05:43.280
+Oh, there it goes.
+
+05:43.280 --> 05:45.919
+We can see that it's generated
+
+05:45.919 --> 05:47.520
+a bunch of different answers
+
+05:47.520 --> 05:51.199
+that are all set-equal to 1 2 3 4.
+
+05:51.199 --> 05:52.880
+So it's just a bunch of
+
+05:52.880 --> 05:57.280
+different permutations of that.
+
+05:57.280 --> 05:59.120
+We can extend this notion
+
+05:59.120 --> 06:03.600
+to a parser. In tree-edit, we've defined
+
+06:03.600 --> 06:05.360
+a parser in reazon,
+
+06:05.360 --> 06:10.800
+and we can use that parser to figure out
+
+06:10.800 --> 06:15.919
+any tokens that match the type of node
+
+06:15.919 --> 06:16.880
+that we're trying to generate.
+
+06:16.880 --> 06:19.600
+If I execute this, we can see
+
+06:19.600 --> 06:21.199
+that reazon has generated
+
+06:21.199 --> 06:23.440
+these five answers that match
+
+06:23.440 --> 06:26.960
+what a try statement is in Java.
+
+06:26.960 --> 06:29.680
+Here we can see we can have
+
+06:29.680 --> 06:31.919
+an infinite amount of catches
+
+06:31.919 --> 06:34.720
+optionally ending with a finally,
+
+06:34.720 --> 06:36.160
+and we always have to start
+
+06:36.160 --> 06:39.039
+with a try and a block.
+
+06:39.039 --> 06:40.000
+We can see this again
+
+06:40.000 --> 06:42.400
+with an argument list.
+
+06:42.400 --> 06:43.520
+We have the opening and closing
+
+06:43.520 --> 06:45.759
+parentheses, and expressions
+
+06:45.759 --> 06:49.120
+which are comma delimited.
+
+06:49.120 --> 06:51.759
+Now, for a more complex example, and
+
+06:51.759 --> 06:53.680
+something that is along the lines
+
+06:53.680 --> 06:55.199
+of what's in tree-edit,
+
+06:55.199 --> 06:57.919
+is if we have this x here
+
+06:57.919 --> 07:01.599
+and we want to insert another expression,
+
+07:01.599 --> 07:05.759
+so x, y. We can assert
+
+07:05.759 --> 07:07.680
+that there's some new tokens,
+
+07:07.680 --> 07:10.160
+and we want an expression
+
+07:10.160 --> 07:11.840
+to be in those new tokens,
+
+07:11.840 --> 07:13.280
+and we can essentially state
+
+07:13.280 --> 07:15.039
+where we want these new tokens to go
+
+07:15.039 --> 07:19.759
+within the old list of tokens,
+
+07:19.759 --> 07:21.599
+so replacing it
+
+07:21.599 --> 07:23.360
+after the previous expression,
+
+07:23.360 --> 07:26.000
+before the closed parentheses,
+
+07:26.000 --> 07:26.880
+and then we can state
+
+07:26.880 --> 07:28.560
+that the whole thing parses.
+
+07:28.560 --> 07:30.080
+If we run that, we can see that
+
+07:30.080 --> 07:32.479
+as we wanted earlier,
+
+07:32.479 --> 07:37.120
+which was a comma and then expression,
+
+07:37.120 --> 07:39.120
+we have that here as well.
+
+07:39.120 --> 07:41.759
+We can see this again.
+
+07:41.759 --> 07:42.720
+Here, the only change is that
+
+07:42.720 --> 07:45.280
+we've moved the tokens to be
+
+07:45.280 --> 07:46.240
+before the expression.
+
+07:46.240 --> 07:48.800
+So we want to put an expression
+
+07:48.800 --> 07:50.560
+before this x, so we want something
+
+07:50.560 --> 07:52.560
+like y, x,
+
+07:52.560 --> 07:54.240
+and if we execute that,
+
+07:54.240 --> 07:57.919
+we can see that it is correctly asserted
+
+07:57.919 --> 07:59.039
+that it would be an expression
+
+07:59.039 --> 08:01.520
+and then a comma afterwards.
+
+08:01.520 --> 08:02.960
+One last example is
+
+08:02.960 --> 08:04.400
+if we have an if statement
+
+08:04.400 --> 08:07.759
+and we want to add an extra block,
+
+08:07.759 --> 08:11.599
+we can see that it correctly figures out
+
+08:11.599 --> 08:12.400
+that we need an else
+
+08:12.400 --> 08:13.840
+in order to have another statement
+
+08:13.840 --> 08:16.720
+in an if statement.
+
+08:16.720 --> 08:19.759
+So, next steps for tree-edit.
+
+08:19.759 --> 08:21.039
+The core of tree-edit is in place
+
+08:21.039 --> 08:23.120
+but there's a lot of usability features
+
+08:23.120 --> 08:25.360
+to add, and a lot of testing
+
+08:25.360 --> 08:26.400
+that needs to be done
+
+08:26.400 --> 08:29.599
+in order to iron out any bugs that exist.
+
+08:29.599 --> 08:30.960
+I'd like to add support
+
+08:30.960 --> 08:35.200
+for as many languages as is possible.
+
+08:35.200 --> 08:36.240
+I think my next step
+
+08:36.240 --> 08:38.490
+will probably be Python.
+
+08:38.490 --> 08:41.279
+There's some performance improvements
+
+08:41.279 --> 08:44.080
+that need to be made, since using this
+
+08:44.080 --> 08:45.519
+logic programming language
+
+08:45.519 --> 08:47.600
+is fairly intensive.
+
+08:47.600 --> 08:48.800
+There's some optimizations
+
+08:48.800 --> 08:50.560
+both on the library side
+
+08:50.560 --> 08:51.519
+and on tree-edit side
+
+08:51.519 --> 08:53.360
+that can be made.
+
+08:53.360 --> 08:55.519
+Contributors are of course welcome,
+
+08:55.519 --> 09:00.000
+as tree-edit is an open source project.
+
+09:00.000 --> 09:03.360
+For future work, I think the prospect
+
+09:03.360 --> 09:04.480
+of voice controlled development
+
+09:04.480 --> 09:06.240
+with tree-edit is actually something
+
+09:06.240 --> 09:07.920
+that's really exciting,
+
+09:07.920 --> 09:11.120
+since syntax can be very cumbersome
+
+09:11.120 --> 09:12.320
+when you're working with
+
+09:12.320 --> 09:14.240
+voice control software.
+
+09:14.240 --> 09:16.320
+I can envision something like
+
+09:16.320 --> 09:19.440
+saying, "Jump to identifier,
+
+09:19.440 --> 09:26.640
+add plus operator, jump to if statement,
+
+09:26.640 --> 09:30.480
+wrap if statement in while."
+
+09:30.480 --> 09:31.519
+So that's something
+
+09:31.519 --> 09:33.519
+I'd like to investigate.
+
+09:33.519 --> 09:35.040
+I also would just like to
+
+09:35.040 --> 09:37.279
+provide the core functionality
+
+09:37.279 --> 09:39.120
+of [tree-edit] as something
+
+09:39.120 --> 09:40.399
+that can be used as a library
+
+09:40.399 --> 09:41.920
+for other projects,
+
+09:41.920 --> 09:43.839
+such as refactoring packages,
+
+09:43.839 --> 09:46.240
+or other non-Vim-style approaches,
+
+09:46.240 --> 09:49.200
+and just making the syntax generation
+
+09:49.200 --> 09:52.080
+available for reuse.
+
+09:52.080 --> 09:53.760
+Finally, I'd like to thank
+
+09:53.760 --> 09:56.399
+the authors of reazon
+
+09:56.399 --> 09:58.399
+and elisp-tree-sitter,
+
+09:58.399 --> 10:00.185
+which in turn packages
+
+10:00.185 --> 10:02.079
+tree-sitter itself,
+
+10:02.079 --> 10:05.440
+since tree-edit relies very heavily
+
+10:05.440 --> 10:07.680
+on these two packages.
+
+10:07.680 --> 10:08.959
+I'd also like to thank
+
+10:08.959 --> 10:10.480
+the author of lispy,
+
+10:10.480 --> 10:12.720
+since a lot of the design decisions
+
+10:12.720 --> 10:14.800
+when it comes to the editing operations
+
+10:14.800 --> 10:18.560
+are based very heavily on lispy.
+
+10:18.560 --> 10:20.320
+So that's the end of my talk.
+
+10:20.320 --> 10:22.959
+Thank you for watching.
+
+10:22.959 --> 10:23.959
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt b/2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt
new file mode 100644
index 00000000..aee8f7ba
--- /dev/null
+++ b/2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt
@@ -0,0 +1,1663 @@
+WEBVTT
+
+00:01.040 --> 00:03.520
+Hello, everybody. My name is Daniel German.
+
+00:03.520 --> 00:00:04.799
+I'm a professor of computer science
+
+00:00:04.799 --> 00:00:06.080
+at the University of Victoria,
+
+00:00:06.080 --> 00:00:07.680
+and I have been teaching programming
+
+00:00:07.680 --> 00:00:12.080
+for more than 10 years.
+
+00:12.080 --> 00:00:14.639
+I want to tell you today
+
+00:00:14.639 --> 00:00:15.759
+about how I have been
+
+00:00:15.759 --> 00:00:17.680
+using Emacs effectively
+
+00:00:17.680 --> 00:00:20.000
+during the last 10 years,
+
+00:00:20.000 --> 00:00:22.880
+and to try to improve how I not only
+
+00:00:22.880 --> 00:00:24.720
+create content for my students,
+
+00:24.720 --> 00:00:26.480
+but also how I deliver it,
+
+00:00:26.480 --> 00:00:27.680
+and particularly how,
+
+00:00:27.680 --> 00:00:29.119
+within the last five years,
+
+00:00:29.119 --> 00:00:31.599
+I have been using Org mode
+
+00:00:31.599 --> 00:00:33.200
+in a very effective way
+
+00:33.200 --> 00:00:35.600
+that benefits both
+
+00:00:35.600 --> 00:00:38.239
+my students and myself
+
+00:38.239 --> 00:00:40.480
+in the creation and the delivery
+
+00:00:40.480 --> 00:00:42.399
+of content.
+
+00:42.399 --> 00:00:45.200
+Let me switch to my computer.
+
+00:00:45.200 --> 00:00:46.480
+I'm going to remove myself
+
+00:00:46.480 --> 00:00:47.840
+because I can use
+
+00:00:47.840 --> 00:00:50.800
+all the real-estate screen.
+
+00:51.840 --> 00:54.079
+The goal of my presentation today
+
+00:54.079 --> 00:00:55.600
+is really to give you
+
+00:00:55.600 --> 00:00:59.280
+a little bit of an overview
+
+00:00:59.280 --> 00:01:03.440
+of how I have been able to
+
+01:03.440 --> 00:01:06.240
+combine the use of Org mode
+
+00:01:06.240 --> 00:01:08.560
+and with some other tools.
+
+00:01:08.560 --> 00:01:10.880
+I'll talk about specifically about them
+
+00:01:10.880 --> 00:01:13.680
+and then also offer some suggestions
+
+00:01:13.680 --> 00:01:14.640
+and recommendations
+
+00:01:14.640 --> 00:01:16.240
+in how to get it started.
+
+01:16.240 --> 00:01:18.799
+I have created a configuration,
+
+00:01:18.799 --> 00:01:20.080
+a set of configuration files
+
+00:01:20.080 --> 00:01:20.799
+that you can use.
+
+00:01:20.799 --> 00:01:22.880
+I will describe them towards the end.
+
+01:22.880 --> 00:01:28.240
+Hopefully, it will make it easy
+
+00:01:28.240 --> 00:01:31.439
+for all of you to get started on using it.
+
+01:31.439 --> 01:33.200
+So we start talking a little bit
+
+01:33.200 --> 00:01:34.079
+about the challenges
+
+00:01:34.079 --> 00:01:35.119
+of teaching programming.
+
+00:01:35.119 --> 00:01:37.200
+I think that the fundamental one
+
+00:01:37.200 --> 00:01:41.680
+is that keeping the content
+
+00:01:41.680 --> 00:01:45.280
+and the slides up to date is hard,
+
+00:01:45.280 --> 00:01:46.960
+because the content is programs.
+
+00:01:46.960 --> 00:01:47.840
+There are programs
+
+00:01:47.840 --> 00:01:50.399
+that sometimes have errors,
+
+00:01:50.399 --> 00:01:53.759
+and sometimes the slides are
+
+00:01:53.759 --> 00:01:58.079
+incomplete snippets of code, and that
+
+00:01:58.079 --> 00:02:00.240
+once they go into the slides software,
+
+00:02:00.240 --> 00:02:01.840
+like Google Slides or PowerPoint,
+
+00:02:01.840 --> 00:02:04.159
+they're essentially static objects.
+
+02:05.520 --> 00:02:07.439
+If we need to update them,
+
+00:02:07.439 --> 00:02:09.920
+we basically don't know
+
+00:02:09.920 --> 00:02:12.160
+whether the update code actually works,
+
+00:02:12.160 --> 00:02:13.440
+or does it work?
+
+00:02:13.440 --> 00:02:16.000
+Also, we cannot insert automatically
+
+00:02:16.000 --> 00:02:16.400
+the output.
+
+00:02:16.400 --> 00:02:18.480
+We'll have to run the snippet outside,
+
+00:02:18.480 --> 00:02:20.560
+and run it, and then insert that code.
+
+00:02:20.560 --> 00:02:22.080
+So that's very cumbersome.
+
+00:02:22.080 --> 00:02:23.200
+It's really, really one of the
+
+00:02:23.200 --> 00:02:26.080
+major challenges of using a slide software
+
+00:02:26.080 --> 00:02:29.360
+to teach programming.
+
+02:29.360 --> 00:02:30.879
+The other thing is that
+
+00:02:30.879 --> 00:02:32.000
+during the presentation,
+
+00:02:32.000 --> 00:02:33.440
+there's nothing you can do with the code.
+
+00:02:33.440 --> 00:02:34.480
+You might be able to edit it,
+
+00:02:34.480 --> 00:02:35.440
+but you cannot run it.
+
+00:02:35.440 --> 00:02:37.360
+You have to move outside of the
+
+00:02:37.360 --> 00:02:38.640
+presentation software
+
+00:02:38.640 --> 00:02:41.200
+to be able to execute the code.
+
+02:42.800 --> 00:02:44.640
+The last one is kind of related to
+
+00:02:44.640 --> 00:02:46.959
+the previous two.
+
+02:46.959 --> 00:02:48.800
+You don't have a single file
+
+00:02:48.800 --> 00:02:51.121
+and your information is spread across
+
+00:02:51.121 --> 00:02:52.879
+many, many different files,
+
+00:02:52.879 --> 00:02:54.080
+especially if you have lots of
+
+00:02:54.080 --> 00:02:55.760
+different snippets in your slides.
+
+00:02:55.760 --> 00:02:56.959
+You probably have a lot of
+
+00:02:56.959 --> 00:02:59.440
+different small files, each of them
+
+02:59.440 --> 03:01.599
+contributing something to your slides,
+
+03:01.599 --> 03:06.239
+and so it becomes a pain to manage.
+
+03:07.280 --> 00:03:10.080
+All of this is where Org mode
+
+00:03:10.080 --> 00:03:12.640
+really excels. Org mode is capable of
+
+00:03:12.640 --> 00:03:15.840
+doing everything, and it needs
+
+00:03:15.840 --> 00:03:18.400
+a little bit of help from some friends.
+
+00:03:18.400 --> 00:03:22.159
+I will describe what I mean by that.
+
+00:03:22.159 --> 00:03:23.040
+But the other thing
+
+00:03:23.040 --> 00:03:24.480
+that is also very valuable
+
+03:24.480 --> 00:03:27.440
+is that it's within the magic of Emacs.
+
+00:03:27.440 --> 00:03:30.480
+I absolutely love to be able to
+
+03:30.480 --> 00:03:32.879
+work with text within Emacs.
+
+00:03:32.879 --> 00:03:34.799
+I enjoy actually creating my notes
+
+00:03:34.799 --> 00:03:36.640
+in Org mode way more than if I was
+
+00:03:36.640 --> 00:03:39.360
+making them in Google Slides.
+
+03:39.360 --> 00:03:42.400
+Let me start by giving you a short demo.
+
+00:03:42.400 --> 00:03:46.400
+I have been teaching programming in C++
+
+00:03:46.400 --> 00:03:47.519
+for around five years,
+
+00:03:47.519 --> 00:03:50.159
+and this was really the trigger towards
+
+03:50.159 --> 00:03:53.280
+trying to do everything within Org mode.
+
+00:03:53.280 --> 00:03:58.159
+So I have a repository in GitHub,
+
+00:03:58.159 --> 00:03:59.439
+and I think that GitHub
+
+00:03:59.439 --> 00:04:00.560
+is an excellent tool
+
+00:04:00.560 --> 00:04:04.480
+that works collaboration with Org mode.
+
+04:04.480 --> 00:04:05.439
+I'll describe actually
+
+00:04:05.439 --> 00:04:07.680
+what I mean by that.
+
+00:04:07.680 --> 00:04:09.680
+My lectures are essentially Org files.
+
+00:04:09.680 --> 00:04:12.480
+So, for example, let's go into
+
+00:04:12.480 --> 00:04:15.040
+one of these files.
+
+04:15.040 --> 00:04:16.799
+This is a an Org file.
+
+00:04:16.799 --> 00:04:21.199
+You can actually see it in the extension.
+
+04:21.199 --> 04:26.160
+I get a table of contents.
+
+04:26.160 --> 00:04:28.000
+GitHub creates or give us actually
+
+00:04:28.000 --> 00:04:31.280
+the ability to quickly jump, and it creates
+
+00:04:31.280 --> 00:04:32.880
+a dynamic table of contents,
+
+00:04:32.880 --> 00:04:33.759
+but I also can actually
+
+00:04:33.759 --> 00:04:35.280
+create it automatically,
+
+00:04:35.280 --> 00:04:36.800
+and then here it goes.
+
+00:04:36.800 --> 00:04:38.479
+This is the code that i have.
+
+00:04:38.479 --> 00:04:41.440
+This is a snippet
+
+00:04:41.440 --> 00:04:44.240
+that I present in the class.
+
+04:44.240 --> 00:04:45.680
+Let me actually show you
+
+00:04:45.680 --> 00:04:48.400
+how I do it within Emacs.
+
+04:48.400 --> 00:04:52.160
+So what I will do is the following.
+
+00:04:52.160 --> 00:04:55.440
+Let me try to open that file.
+
+04:57.919 --> 04:59.440
+Here's the file,
+
+04:59.440 --> 00:05:00.880
+and it's exactly the same
+
+00:05:00.880 --> 00:05:03.759
+that we were browsing in GitHub.
+
+00:05:03.759 --> 00:05:08.720
+What I do is I simply just scroll through
+
+05:08.720 --> 00:05:10.160
+the document. It's almost like
+
+00:05:10.160 --> 00:05:13.440
+movie credits at the end of the movie.
+
+00:05:13.440 --> 00:05:15.360
+I don't break them into chunks
+
+00:05:15.360 --> 00:05:16.639
+that I show in the screen.
+
+00:05:16.639 --> 00:05:18.320
+I see no point in doing that.
+
+00:05:18.320 --> 00:05:20.880
+What I do is I simply scroll through
+
+00:05:20.880 --> 00:05:24.160
+the text. The students are able to see
+
+00:05:24.160 --> 00:05:26.560
+the same information in GitHub
+
+00:05:26.560 --> 00:05:27.759
+on their computer,
+
+05:27.759 --> 00:05:29.680
+or they can print it if they want,
+
+00:05:29.680 --> 00:05:31.039
+and they are able to actually
+
+00:05:31.039 --> 00:05:32.560
+follow with me, and then having
+
+00:05:32.560 --> 00:05:33.759
+a much bigger picture
+
+05:33.759 --> 05:36.320
+than if i just show a very small snippet.
+
+05:36.320 --> 00:05:38.800
+In the case that the snippet is too big,
+
+00:05:38.800 --> 00:05:40.800
+for example, let's say this one
+
+00:05:40.800 --> 00:05:42.240
+actually doesn't cover the...
+
+00:05:42.240 --> 00:05:43.759
+covers more than full screen,
+
+00:05:43.759 --> 00:05:45.360
+I actually reduce the size
+
+00:05:45.360 --> 00:05:48.000
+and then give a little bit of
+
+00:05:48.000 --> 00:05:49.759
+an explanation of the whole thing,
+
+00:05:49.759 --> 00:05:51.600
+and then focus and say this is the line
+
+00:05:51.600 --> 00:05:53.600
+where we have to pay attention.
+
+05:53.600 --> 00:05:55.600
+Notice actually how I use color for that.
+
+00:05:55.600 --> 00:05:57.759
+I think that the ability to use color
+
+00:05:57.759 --> 00:05:59.759
+and typesetting is fundamental
+
+00:05:59.759 --> 00:06:01.520
+to be able to do this effectively,
+
+00:06:01.520 --> 00:06:02.720
+and the nice thing is that
+
+00:06:02.720 --> 00:06:04.160
+we can configure Org mode
+
+00:06:04.160 --> 00:06:05.840
+to be able to do most of this
+
+06:05.840 --> 06:08.160
+automatically.
+
+06:08.160 --> 00:06:09.360
+As I said before,
+
+00:06:09.360 --> 00:06:10.960
+one of the great advantages is that
+
+00:06:10.960 --> 00:06:13.600
+I can actually run the code dynamically.
+
+00:06:13.600 --> 00:06:15.360
+So let's say that the student says,
+
+00:06:15.360 --> 00:06:17.360
+"But what if I change that value to 10?"
+
+00:06:17.360 --> 00:06:18.560
+Well, let's try it.
+
+00:06:18.560 --> 00:06:20.560
+Let's change it, run it,
+
+06:20.560 --> 00:06:21.840
+and then you can see here
+
+00:06:21.840 --> 00:06:24.720
+that it has a 10.
+
+00:06:24.720 --> 00:06:26.960
+That's really powerful because
+
+00:06:26.960 --> 00:06:29.280
+you're not tied to
+
+00:06:29.280 --> 00:06:30.560
+what is the content you have
+
+00:06:30.560 --> 00:06:33.120
+on the slides. If you find an error
+
+00:06:33.120 --> 00:06:34.880
+or an omission, or you want to talk about
+
+06:34.880 --> 00:06:36.880
+something else, you can very quickly
+
+00:06:36.880 --> 00:06:40.720
+do it. You can add comments
+
+00:06:40.720 --> 00:06:42.080
+and then make some suggestions
+
+00:06:42.080 --> 00:06:43.840
+specifically to that,
+
+06:43.840 --> 00:06:45.680
+or worst-case scenario,
+
+00:06:45.680 --> 00:06:48.880
+if you really, really, need it,
+
+06:48.880 --> 00:06:55.440
+you can say, "Let's load it into..."
+
+00:06:55.440 --> 00:06:58.400
+Let's actually do some hand annotation.
+
+00:06:58.400 --> 00:07:00.319
+Let's actually say, "look at this thing,
+
+00:07:00.319 --> 00:07:01.840
+this is the value that I want you to
+
+07:01.840 --> 00:07:02.800
+concentrate on."
+
+00:07:02.800 --> 00:07:03.599
+It's not perfect.
+
+00:07:03.599 --> 00:07:04.960
+I'm not doing it with an Emacs.
+
+00:07:04.960 --> 00:07:06.960
+I wish there was a way to do it,
+
+00:07:06.960 --> 00:07:09.120
+but it is absolutely effective
+
+00:07:09.120 --> 00:07:10.720
+because I'm actually able to
+
+00:07:10.720 --> 00:07:12.800
+use the power. Notice that all that is
+
+07:12.800 --> 07:15.520
+exported is just the block, and also
+
+07:15.520 --> 07:22.400
+the color and typesetting,
+
+07:22.400 --> 00:07:24.560
+the typesetting of the content.
+
+00:07:24.560 --> 00:07:25.759
+So this is actually great.
+
+00:07:25.759 --> 00:07:30.639
+I have the colors red, purple, etc. etc.
+
+00:07:30.639 --> 00:07:34.160
+I love being able to do that.
+
+07:34.160 --> 00:07:35.919
+This is just a temporary file.
+
+00:07:35.919 --> 00:07:36.880
+I can actually discard it,
+
+00:07:36.880 --> 00:07:39.680
+and it doesn't really matter.
+
+07:39.680 --> 07:41.919
+Let me go back to the presentation.
+
+07:41.919 --> 00:07:43.360
+So that's the delivery.
+
+00:07:43.360 --> 00:07:44.639
+So the delivery is great,
+
+00:07:44.639 --> 00:07:46.400
+and I can tell the students
+
+00:07:46.400 --> 00:07:48.080
+now you're actually in GitHub,
+
+00:07:48.080 --> 00:07:50.160
+if you want to test the code,
+
+07:50.160 --> 00:07:51.360
+just cut and paste.
+
+00:07:51.360 --> 00:07:54.240
+Notice that I clicked on the little icon.
+
+00:07:54.240 --> 00:07:56.639
+Now it's copied. It's now part of
+
+00:07:56.639 --> 00:07:57.440
+the kill buffer ([kill-ring]),
+
+00:07:57.440 --> 00:07:59.520
+so if I want to actually create a file
+
+00:07:59.520 --> 00:08:00.560
+that has that content,
+
+00:08:00.560 --> 00:08:02.560
+I can very quickly do it.
+
+08:02.560 --> 00:08:05.840
+Try that with PowerPoint.
+
+00:08:05.840 --> 00:08:08.160
+You will have to have the text
+
+00:08:08.160 --> 00:08:10.000
+without any nice typesetting,
+
+00:08:10.000 --> 00:08:11.280
+or you will have to have a picture
+
+00:08:11.280 --> 00:08:13.120
+that is impossible to cut and paste.
+
+00:08:13.120 --> 00:08:14.400
+So that's something that the students
+
+00:08:14.400 --> 00:08:17.440
+really, really appreciate of this.
+
+00:08:17.440 --> 00:08:18.879
+They can try it on the computer.
+
+00:08:18.879 --> 00:08:19.919
+They can load it into
+
+00:08:19.919 --> 00:08:22.319
+their favorite editor.
+
+00:08:22.319 --> 00:08:24.720
+I don't force them to use Emacs,
+
+00:08:24.720 --> 00:08:26.879
+but I have to say that some of them
+
+00:08:26.879 --> 00:08:28.479
+really get intrigued by this power
+
+00:08:28.479 --> 00:08:30.000
+that they want to try Emacs
+
+08:30.000 --> 08:31.440
+because they see that they can do things,
+
+08:31.440 --> 08:33.760
+that I can do things that they cannot do
+
+08:33.760 --> 08:35.919
+with other tools.
+
+08:35.919 --> 08:39.039
+Okay, so let's go back to presentation.
+
+08:39.039 --> 00:08:40.080
+The other half of it is
+
+00:08:40.080 --> 00:08:41.039
+preparing the notes.
+
+00:08:41.039 --> 00:08:44.640
+I think the preparatory notes
+
+08:44.640 --> 00:08:46.320
+is something that I want to do
+
+00:08:46.320 --> 00:08:48.240
+as easy as possible.
+
+00:08:48.240 --> 00:08:52.560
+I want to be able to reduce the time
+
+00:08:52.560 --> 00:08:53.760
+that I waste on things,
+
+00:08:53.760 --> 00:08:55.120
+that they are done.
+
+08:55.120 --> 08:57.519
+They're not part of the actual thinking
+
+08:57.519 --> 00:09:01.760
+or the delivery of the presentation.
+
+00:09:01.760 --> 00:09:03.440
+So let me create a file.
+
+09:03.440 --> 00:09:05.720
+Let's call it rip2.org.
+
+00:09:05.720 --> 00:09:07.839
+Well, I have this one,
+
+00:09:07.839 --> 00:09:09.519
+so let's call it rip.org.
+
+00:09:09.519 --> 00:09:10.480
+Oh, I have this one too,
+
+00:09:10.480 --> 00:09:12.800
+so let's call it rip4.org.
+
+09:12.800 --> 09:15.040
+So it's empty.
+
+09:15.040 --> 00:09:17.200
+I use yasnippets. I think yasnippets
+
+00:09:17.200 --> 00:09:17.920
+are very important,
+
+00:09:17.920 --> 00:09:19.040
+and I'll go through this
+
+00:09:19.040 --> 00:09:19.760
+in a little bit later.
+
+00:09:19.760 --> 00:09:21.200
+It's important to set up
+
+00:09:21.200 --> 00:09:23.440
+the properties for each language
+
+00:09:23.440 --> 00:09:24.399
+that I use properly.
+
+09:24.399 --> 09:26.320
+I'll describe this a little bit later.
+
+09:26.320 --> 00:09:28.000
+Unfortunately, the properties
+
+00:09:28.000 --> 00:09:30.080
+have to be evaluated one at a time,
+
+00:09:30.080 --> 00:09:33.839
+and so I'm just going to
+
+00:09:33.839 --> 00:09:35.040
+kill the buffer and open it again.
+
+00:09:35.040 --> 00:09:36.480
+So now all of these properties
+
+00:09:36.480 --> 00:09:38.000
+are properly set.
+
+09:40.560 --> 00:09:43.760
+As I said before, I have some yasnippets,
+
+00:09:43.760 --> 00:09:46.560
+so I can actually do very quickly...
+
+00:09:46.560 --> 00:09:55.200
+This is C++, cout &lt;&lt; "hello world",
+
+09:55.200 --> 09:58.080
+std::endl.
+
+09:58.080 --> 00:10:00.080
+And then I run it,
+
+00:10:00.080 --> 00:10:02.720
+and then it's inserted down here,
+
+00:10:02.720 --> 00:10:04.000
+so nothing special.
+
+10:04.000 --> 10:06.160
+Let's assume that I make a mistake
+
+10:06.160 --> 00:10:08.480
+and I type a double l here.
+
+00:10:08.480 --> 00:10:10.720
+I will get an error.
+
+10:10.720 --> 00:10:12.399
+These line numbers unfortunately
+
+00:10:12.399 --> 00:10:13.600
+don't perfectly match
+
+00:10:13.600 --> 00:10:15.040
+with the line numbers
+
+10:15.040 --> 10:17.839
+in the little snippet
+
+10:17.839 --> 00:10:18.959
+because there's some code
+
+00:10:18.959 --> 00:10:22.160
+that org-babel inserts,
+
+00:10:22.160 --> 00:10:23.040
+so that shifts them.
+
+00:10:23.040 --> 00:10:25.440
+So that's something to be aware of.
+
+10:25.440 --> 00:10:27.680
+I can correct it, run it,
+
+00:10:27.680 --> 00:10:30.160
+and then it inserts the result.
+
+10:30.160 --> 00:10:36.079
+Let's do one in C.
+
+10:36.079 --> 00:10:37.680
+I'll explain the exports both
+
+00:10:37.680 --> 00:10:38.640
+a little bit.
+
+00:10:38.640 --> 00:10:40.079
+So let's assume that I don't want to
+
+10:40.079 --> 00:10:41.519
+have a full main program.
+
+00:10:41.519 --> 00:10:42.560
+Let's assume that i just want to
+
+00:10:42.560 --> 00:10:45.200
+demonstrate how to use a printf
+
+00:10:45.200 --> 00:10:54.959
+"hello world %s\n", "my friend".
+
+10:54.959 --> 10:56.800
+Let's run it.
+
+10:56.800 --> 00:10:58.800
+I get a bunch of errors. Why?
+
+00:10:58.800 --> 00:11:00.480
+Because I don't have a main program,
+
+00:11:00.480 --> 00:11:03.279
+so I have to actually tell org-babel
+
+00:11:03.279 --> 00:11:05.200
+that I want a main product,
+
+00:11:05.200 --> 00:11:07.360
+so yes put a main around it.
+
+00:11:07.360 --> 00:11:09.040
+So now I run it and it says, oh,
+
+11:09.040 --> 00:11:09.760
+in the function main,
+
+00:11:09.760 --> 00:11:10.959
+we have an implicit declaration
+
+00:11:10.959 --> 00:11:12.640
+for function printf.
+
+00:11:12.640 --> 00:11:14.000
+I'm very, very stringent
+
+00:11:14.000 --> 00:11:16.959
+on my compilation options,
+
+00:11:16.959 --> 00:11:18.959
+so I want to have every single
+
+11:18.959 --> 00:11:21.279
+potential error displayed ,
+
+00:11:21.279 --> 00:11:22.959
+so that's actually why.
+
+00:11:22.959 --> 00:11:24.640
+In this case, I actually need include,
+
+00:11:24.640 --> 00:11:29.040
+so I can say :includes &lt;stdio.h&gt;,
+
+11:29.040 --> 00:11:31.040
+and I'll run it and it runs perfectly.
+
+00:11:31.040 --> 00:11:32.480
+So why is this important?
+
+00:11:32.480 --> 00:11:35.440
+Well, it allows me to just have
+
+00:11:35.440 --> 00:11:37.600
+the snippet that I'm concerned about.
+
+00:11:37.600 --> 00:11:39.920
+I don't have to have all the overhead
+
+00:11:39.920 --> 00:11:43.279
+of having to have the include, main, etc.,
+
+00:11:43.279 --> 00:11:44.000
+if I want to show
+
+00:11:44.000 --> 00:11:45.440
+just one specific concept
+
+00:11:45.440 --> 00:11:46.560
+and I can do it
+
+00:11:46.560 --> 00:11:48.079
+in very few lines of code.
+
+00:11:48.079 --> 00:11:50.240
+I can do that immediately, of course.
+
+00:11:50.240 --> 00:11:51.279
+The students will not be able to
+
+00:11:51.279 --> 00:11:53.600
+cut and paste it without the main file,
+
+00:11:53.600 --> 00:11:54.320
+but that's something
+
+00:11:54.320 --> 00:11:56.800
+that we can explain to them.
+
+11:57.600 --> 00:11:59.440
+We can do all the languages.
+
+00:11:59.440 --> 00:12:02.079
+So I can say print,
+
+12:02.079 --> 12:07.680
+let's print just a list,
+
+12:07.680 --> 12:10.000
+or let's actually keep updating it,
+
+12:10.000 --> 00:12:16.000
+and let's do a map of a lambda x,
+
+00:12:16.000 --> 00:12:19.279
+x multiplied by x,
+
+12:19.279 --> 00:12:22.079
+and then we run it. Okay.
+
+00:12:22.079 --> 00:12:23.200
+The thing that is important
+
+00:12:23.200 --> 00:12:25.120
+is that if we also have
+
+00:12:25.120 --> 00:12:26.720
+the full power of the environment,
+
+00:12:26.720 --> 00:12:28.320
+right, so we can actually edit it
+
+00:12:28.320 --> 00:12:31.519
+in the native mode of the language,
+
+00:12:31.519 --> 00:12:34.560
+and wherever we actually want to use
+
+00:12:34.560 --> 00:12:36.720
+specific features, that they are available
+
+00:12:36.720 --> 00:12:38.800
+in the particular mode.
+
+12:38.800 --> 00:12:40.720
+But for most of the cases,
+
+00:12:40.720 --> 00:12:41.519
+I don't need that,
+
+00:12:41.519 --> 00:12:44.160
+because my examples are relatively simple.
+
+12:44.160 --> 12:46.720
+Let's do one more.
+
+12:46.720 --> 00:12:48.399
+This is a little bit different: SQLite.
+
+00:12:48.399 --> 00:12:49.760
+In the previous examples,
+
+00:12:49.760 --> 00:12:51.200
+the output that is inserted
+
+00:12:51.200 --> 00:12:52.720
+is a standard output.
+
+00:12:52.720 --> 00:12:54.320
+In SQLite, I want to actually see
+
+00:12:54.320 --> 00:12:55.279
+the tables. I want to see
+
+00:12:55.279 --> 00:12:56.720
+how the tables are,
+
+00:12:56.720 --> 00:12:58.880
+what the results are.
+
+00:12:58.880 --> 00:13:04.000
+So let's create table s.
+
+13:04.000 --> 00:13:08.399
+Let's call it r, a int, b int,
+
+13:08.399 --> 00:13:09.200
+and let's run it.
+
+00:13:09.200 --> 00:13:10.639
+This is-- oh, the table already exists.
+
+00:13:10.639 --> 00:13:16.240
+Okay. So drop table if exists r,
+
+13:16.240 --> 00:13:17.440
+and then we run it. Okay.
+
+00:13:17.440 --> 00:13:21.120
+So now it's created. sqlite...
+
+00:13:21.120 --> 00:13:25.920
+So we can say create a table,
+
+00:13:25.920 --> 00:13:27.760
+and let's actually add SQL,
+
+00:13:27.760 --> 00:13:32.079
+and here we're actually going to add...
+
+13:32.079 --> 00:13:34.240
+This is an example in C,
+
+00:13:34.240 --> 00:13:38.240
+and here we're going to have C++.
+
+00:13:38.240 --> 00:13:42.160
+Okay. So, SQL,
+
+00:13:42.160 --> 00:13:43.920
+and then we create a table,
+
+00:13:43.920 --> 00:13:47.839
+and then we populate
+
+00:13:47.839 --> 00:13:51.360
+and then insert into R
+
+00:13:51.360 --> 00:13:57.839
+values 1,2 2,3 3,4.
+
+13:57.839 --> 00:13:59.519
+Okay. So now I have a table,
+
+00:13:59.519 --> 00:14:01.600
+I have values,
+
+00:14:01.600 --> 00:14:04.560
+and I can do "select * from here,"
+
+14:04.560 --> 14:07.040
+and then I get the result. Okay.
+
+14:07.040 --> 00:14:07.920
+It's almost magic
+
+00:14:07.920 --> 00:14:10.399
+because I can actually get, formatted,
+
+00:14:10.399 --> 00:14:13.040
+the output in the way that I expected.
+
+14:13.040 --> 14:15.279
+Obviously, if my result is too big,
+
+14:15.279 --> 00:14:18.399
+then it will basically just create
+
+00:14:18.399 --> 00:14:20.880
+a huge, huge buffer, or Org will say
+
+00:14:20.880 --> 00:14:21.920
+the output is too big.
+
+00:14:21.920 --> 00:14:24.079
+So often with databases,
+
+00:14:24.079 --> 00:14:26.480
+I actually narrow my output, right,
+
+00:14:26.480 --> 00:14:28.639
+or I might do it with a clause,
+
+00:14:28.639 --> 00:14:32.800
+"where a > 1".
+
+14:34.959 --> 00:14:36.959
+If the language is supported by Org Babel,
+
+00:14:36.959 --> 00:14:39.920
+then you can do all of this.
+
+14:39.920 --> 00:14:42.079
+Let me go back to the presentation.
+
+00:14:42.079 --> 00:14:43.760
+I'm running out of time.
+
+00:14:43.760 --> 00:14:45.680
+Let me give you a short tour
+
+00:14:45.680 --> 00:14:47.279
+of how this is done.
+
+14:47.279 --> 00:14:53.279
+I have created a repository that has
+
+00:14:53.279 --> 00:14:54.800
+all the configuration that I have.
+
+00:14:54.800 --> 00:14:56.639
+Everything is self-contained.
+
+14:56.639 --> 14:59.600
+You can just download it and run it.
+
+14:59.600 --> 00:15:01.360
+You will have to replace
+
+00:15:01.360 --> 00:15:03.760
+your ~/.emacs.d directory,
+
+00:15:03.760 --> 00:15:07.440
+and then you can explore it, test it,
+
+00:15:07.440 --> 00:15:11.039
+and then pick things out of it,
+
+00:15:11.039 --> 00:15:14.639
+choose, etc.
+
+15:14.639 --> 00:15:16.800
+Let me go through the README.
+
+00:15:16.800 --> 00:15:17.920
+I think that the README
+
+00:15:17.920 --> 00:15:19.600
+is actually useful.
+
+00:15:19.600 --> 00:15:21.760
+I have a function called actually start.
+
+00:15:21.760 --> 00:15:22.480
+That is the one
+
+00:15:22.480 --> 00:15:24.000
+that creates indentation
+
+00:15:24.000 --> 00:15:28.399
+and sets up the mode, etc.
+
+15:28.399 --> 00:15:29.440
+Let me talk about GitHub.
+
+00:15:29.440 --> 00:15:31.839
+So GitHub is a great resource. Why?
+
+00:15:31.839 --> 00:15:32.880
+Well its publishing,
+
+00:15:32.880 --> 00:15:34.240
+as i mentioned before,
+
+00:15:34.240 --> 00:15:35.519
+is very simple.
+
+00:15:35.519 --> 00:15:37.120
+To publish, you basically just
+
+00:15:37.120 --> 00:15:37.920
+push your changes
+
+00:15:37.920 --> 00:15:43.199
+and it automatically renders the code.
+
+15:43.199 --> 00:15:46.800
+It's something that is quite useful.
+
+15:46.800 --> 00:15:48.720
+But it is not perfect,
+
+00:15:48.720 --> 00:15:50.399
+and it's not able to understand
+
+00:15:50.399 --> 00:15:52.880
+the full Org. But for most of the things
+
+00:15:52.880 --> 00:15:53.680
+that I use for teaching,
+
+00:15:53.680 --> 00:15:55.600
+it's sufficiently good.
+
+00:15:55.600 --> 00:15:57.360
+It would be better if it was full
+
+00:15:57.360 --> 00:16:00.720
+at compliance, but it's not bad as it is.
+
+16:00.720 --> 00:16:02.463
+Version control. I think
+
+00:16:02.463 --> 00:16:03.839
+it's extremely valuable
+
+00:16:03.839 --> 00:16:05.199
+to have version control.
+
+00:16:05.199 --> 00:16:08.079
+It allows to actually use
+
+00:16:08.079 --> 00:16:08.959
+different computers
+
+00:16:08.959 --> 00:16:10.560
+or keep track of my changes,
+
+00:16:10.560 --> 00:16:11.920
+collaborate with authors,
+
+00:16:11.920 --> 00:16:13.040
+even have pull requests
+
+00:16:13.040 --> 00:16:13.759
+from the students.
+
+16:13.759 --> 16:16.320
+Actually it's very empowering
+
+16:16.320 --> 16:18.800
+for the students.
+
+16:18.800 --> 00:16:20.480
+Navigation, links, cut and paste
+
+00:16:20.480 --> 00:16:21.920
+between code blocks,
+
+00:16:21.920 --> 00:16:23.199
+you can even edit in place
+
+16:23.199 --> 16:26.160
+if you want to.
+
+16:26.160 --> 16:27.920
+In a pinch, you can actually use GitHub
+
+16:27.920 --> 00:16:30.000
+to do the editing of your file.
+
+00:16:30.000 --> 00:16:33.199
+Of course, it will not update your buffers.
+
+16:33.199 --> 00:16:35.199
+:exports both. This is very important.
+
+00:16:35.199 --> 00:16:40.160
+If we have a block, by default,
+
+16:40.160 --> 16:43.199
+GitHub will not typeset
+
+16:43.199 --> 00:16:44.399
+the output of that block.
+
+00:16:44.399 --> 00:16:45.839
+It will only put the source code,
+
+00:16:45.839 --> 00:16:47.199
+but not its output.
+
+16:47.199 --> 00:16:50.079
+In this case, if I actually showed this
+
+00:16:50.079 --> 00:16:52.720
+in GitHub, "hello world" will not appear.
+
+00:16:52.720 --> 00:16:55.120
+So what we need to do is for every block,
+
+00:16:55.120 --> 00:16:57.040
+we have to do :exports both.
+
+16:57.040 --> 00:16:58.720
+okay that's unfortunate,
+
+00:16:58.720 --> 00:17:01.120
+but we can deal with that.
+
+17:01.120 --> 00:17:03.920
+Once it's done, then the output
+
+00:17:03.920 --> 00:17:06.079
+is actually typeset.
+
+17:06.079 --> 00:17:07.520
+I mentioned that header args
+
+00:17:07.520 --> 00:17:09.039
+are very important,
+
+00:17:09.039 --> 00:17:10.079
+because those are the ones
+
+00:17:10.079 --> 00:17:12.799
+that set the parameters
+
+00:17:12.799 --> 00:17:14.640
+for each one of the blocks that you have.
+
+17:14.640 --> 17:16.000
+You don't want to have to type every
+
+17:16.000 --> 00:17:19.120
+single one of them at once.
+
+00:17:19.120 --> 00:17:20.880
+For example, let me go back to
+
+00:17:20.880 --> 00:17:22.880
+my presentation.
+
+17:23.839 --> 17:26.160
+Here's actually the parameters for C.
+
+17:26.160 --> 00:17:28.880
+C, I say, I don't want you to
+
+00:17:28.880 --> 00:17:30.000
+automatically add a main.
+
+00:17:30.000 --> 00:17:31.120
+I want to provide my main,
+
+00:17:31.120 --> 00:17:34.160
+and these are the flags to the compiler.
+
+17:34.160 --> 00:17:37.280
+With C++, similar. With SQLite,
+
+00:17:37.280 --> 00:17:38.720
+I said this is my database,
+
+17:38.720 --> 00:17:39.600
+this is the data,
+
+00:17:39.600 --> 00:17:41.360
+the file where the database lives,
+
+00:17:41.360 --> 00:17:44.559
+and for the results, I want you to insert
+
+17:44.559 --> 00:17:46.160
+the column names. I want to see
+
+00:17:46.160 --> 00:17:48.400
+the names of the columns in the result.
+
+17:48.400 --> 17:50.960
+So those are actually why
+
+17:50.960 --> 17:53.840
+the headers are important.
+
+17:53.840 --> 00:17:55.520
+There's one in general.
+
+00:17:55.520 --> 00:17:56.880
+That's :results output.
+
+00:17:56.880 --> 00:17:59.039
+If you're interested on showing
+
+00:17:59.039 --> 00:18:01.760
+the standard output of your snippet,
+
+00:18:01.760 --> 00:18:03.600
+then you have to use :results output.
+
+00:18:03.600 --> 00:18:04.799
+Otherwise, it will insert
+
+00:18:04.799 --> 00:18:06.720
+the result of the last expression.
+
+00:18:06.720 --> 00:18:08.000
+It just depends on what you want to show,
+
+18:08.000 --> 00:18:08.720
+but it's important
+
+00:18:08.720 --> 00:18:11.200
+that you are aware of that.
+
+18:11.200 --> 18:13.440
+I'm almost running out of time.
+
+18:13.440 --> 00:18:15.919
+There are some things that are C-specific
+
+00:18:15.919 --> 00:18:18.400
+and that I sort of covered
+
+00:18:18.400 --> 00:18:23.919
+during the demo.
+
+18:23.919 --> 00:18:26.000
+You can use advanced Org features,
+
+00:18:26.000 --> 00:18:29.039
+and you can actually use noweb.
+
+00:18:29.039 --> 00:18:30.640
+Now that's confusing for students,
+
+00:18:30.640 --> 00:18:33.600
+so i will suggest that you actually do it
+
+18:33.600 --> 00:18:34.880
+but then inform the students
+
+00:18:34.880 --> 00:18:37.760
+very clearly of that.
+
+18:37.760 --> 00:18:39.280
+Some potential issues:
+
+00:18:39.280 --> 00:18:42.400
+_ (underscore). _ is used everywhere.
+
+00:18:42.400 --> 00:18:44.640
+By default, it will try to export it--
+
+00:18:44.640 --> 00:18:46.960
+Org will try to export it as circumflex,
+
+00:18:46.960 --> 00:18:48.400
+the same as with GitHub.
+
+00:18:48.400 --> 00:18:52.480
+So we want to inform Org and GitHub
+
+00:18:52.480 --> 00:18:53.840
+not to do anything with them,
+
+00:18:53.840 --> 00:18:55.520
+and this is via the circumflex.
+
+00:18:55.520 --> 00:18:57.440
+So we said in #+OPTIONS: ^:nil ,
+
+00:18:57.440 --> 00:18:58.720
+and that actually takes care
+
+00:18:58.720 --> 00:19:01.679
+of the circumflex and also the underscore.
+
+00:19:01.679 --> 00:19:02.720
+It's kind of confusing
+
+00:19:02.720 --> 00:19:04.080
+because it's both,
+
+00:19:04.080 --> 00:19:05.120
+but it's actually named
+
+00:19:05.120 --> 00:19:06.720
+after the circumflex.
+
+19:06.720 --> 00:19:07.840
+The pipe character
+
+00:19:07.840 --> 00:19:08.880
+is one of those characters
+
+00:19:08.880 --> 00:19:10.640
+that is actually very, very common
+
+00:19:10.640 --> 00:19:12.799
+in programming, but if you put in a table,
+
+00:19:12.799 --> 00:19:14.480
+there's no way to do it. Like, okay,
+
+00:19:14.480 --> 00:19:16.559
+I wish I had this table nicely
+
+19:16.559 --> 00:19:19.520
+where I can say || here,
+
+00:19:19.520 --> 00:19:21.280
+but if I put this ||,
+
+00:19:21.280 --> 00:19:22.799
+it will actually interpret it
+
+00:19:22.799 --> 00:19:23.919
+as the separator.
+
+00:19:23.919 --> 00:19:25.760
+So that's one of the few things
+
+00:19:25.760 --> 00:19:27.679
+that's kind of annoying.
+
+19:27.679 --> 00:19:31.679
+Final words. See my configuration file,
+
+19:31.679 --> 00:19:35.520
+and try to typeset the code,
+
+00:19:35.520 --> 00:19:37.520
+the buffer as close as possible
+
+00:19:37.520 --> 00:19:38.720
+to what you want to present.
+
+00:19:38.720 --> 00:19:40.000
+As you can see here,
+
+00:19:40.000 --> 00:19:42.240
+I'm actually using colors to highlight
+
+00:19:42.240 --> 00:19:44.320
+by using the current line.
+
+19:44.320 --> 19:46.960
+Use yasnippets.
+
+19:46.960 --> 19:48.480
+They're amazing, and they will actually
+
+19:48.480 --> 19:51.440
+make your life much more useful.
+
+19:51.440 --> 19:53.280
+Experiment.
+
+19:53.280 --> 19:56.720
+Just a conclusion.
+
+19:56.720 --> 00:19:58.400
+Org mode and Emacs really make
+
+00:19:58.400 --> 00:20:01.039
+a wonderful, amazing environment
+
+00:20:01.039 --> 00:20:03.360
+for teaching programming.
+
+20:03.360 --> 20:06.640
+I just want to end by saying that
+
+20:06.640 --> 00:20:10.320
+I'm very grateful to all the Emacs community
+
+20:10.320 --> 00:20:14.159
+because I have benefited tremendously
+
+00:20:14.159 --> 00:20:16.080
+over the years. I have been using Emacs
+
+00:20:16.080 --> 00:20:18.960
+since 1991, so this is essentially
+
+00:20:18.960 --> 00:20:22.240
+my 30th year that have been using Emacs.
+
+00:20:22.240 --> 00:20:24.640
+I think that is the most important,
+
+00:20:24.640 --> 00:20:26.980
+most fundamental tool that I use
+
+00:20:26.980 --> 00:20:29.760
+day-to-day, from reading email,
+
+00:20:29.760 --> 00:20:32.480
+to doing my teaching, doing my papers,
+
+00:20:32.480 --> 00:20:34.960
+my research... it's everything.
+
+00:20:34.960 --> 00:20:37.039
+So thank you all
+
+20:37.039 --> 20:40.799
+and I hope that you find this useful.
+
+20:40.799 --> 00:20:42.799
+Bye.
+
+00:20:42.799 --> 00:20:43.799
+[captions by sachac]
diff --git a/2021/captions/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.vtt b/2021/captions/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.vtt
new file mode 100644
index 00000000..8e5b49fb
--- /dev/null
+++ b/2021/captions/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.vtt
@@ -0,0 +1,829 @@
+WEBVTT
+
+00:02.560 --> 00:05.040
+Hi! My name is Jan, and I'll be talking
+
+00:05.040 --> 00:07.680
+about using Emacs for technical writing.
+
+00:07.680 --> 00:09.519
+Let's first define what we mean by
+
+00:09.519 --> 00:12.080
+technical writing.
+
+00:12.080 --> 00:13.679
+At least, I mean with that, any kind of
+
+00:13.679 --> 00:15.759
+writing that involves computer systems.
+
+00:15.759 --> 00:19.700
+So, maybe a developer guide for a system,
+
+00:19.700 --> 00:21.680
+or a library you've been creating,
+
+00:21.680 --> 00:23.433
+maybe reference documentation
+
+00:23.433 --> 00:25.833
+or a user guide for a REST API
+
+00:25.833 --> 00:27.934
+that you offer as a cloud service,
+
+00:27.934 --> 00:29.767
+or doing a technical presentation
+
+00:29.767 --> 00:30.700
+exactly like this one
+
+00:30.700 --> 00:32.239
+that may actually include some live
+
+00:32.239 --> 00:34.000
+coding as well that you may want to do
+
+00:34.000 --> 00:36.000
+while you're showing the presentation
+
+00:36.000 --> 00:39.040
+without too much context switching.
+
+00:39.040 --> 00:40.399
+I've been doing a variety of these
+
+00:40.399 --> 00:43.034
+things in my professional life for a while now,
+
+00:43.034 --> 00:43.840
+and I found Emacs to be a
+
+00:43.840 --> 00:46.879
+really nice tool to help out with that,
+
+00:46.879 --> 00:50.719
+since it actually pulls in different languages.
+
+00:50.719 --> 00:52.800
+The ones I work with is Scala, Java, C++,
+
+00:52.800 --> 00:54.480
+and things like that, and everything
+
+00:54.480 --> 00:56.160
+works in the same way within Emacs,
+
+00:56.160 --> 00:58.300
+so you don't have to learn different tools
+
+00:58.400 --> 00:59.840
+to do the same thing.
+
+00:59.840 --> 01:02.079
+Doing all of this against Java looks the
+
+01:02.079 --> 01:04.720
+same as it would but with C++ except
+
+01:04.720 --> 01:07.119
+the language is different.
+
+01:07.119 --> 01:08.640
+A little refresher for people that might
+
+01:08.640 --> 01:10.666
+be viewing this out of context.
+
+01:10.666 --> 01:13.280
+Emacs is a very customizable text editor
+
+01:13.280 --> 01:15.600
+environment, and Org mode is a
+
+01:15.600 --> 01:17.360
+part of Emacs that allows you to deal
+
+01:17.360 --> 01:18.734
+with structured text.
+
+01:18.734 --> 01:21.920
+So, a plain text file containing headings,
+
+01:21.920 --> 01:25.439
+lists, tables, and even code blocks
+
+01:25.439 --> 01:27.360
+formatted in a particular way, so Org
+
+01:27.360 --> 01:29.866
+mode can help out with that.
+
+01:29.866 --> 01:32.560
+And Org babel is the particular part of Org mode
+
+01:32.560 --> 01:34.400
+that deals with executing those code
+
+01:34.400 --> 01:37.000
+blocks and actually interacting with,
+
+01:37.000 --> 01:38.720
+say, a Java or a Python environment
+
+01:38.720 --> 01:40.720
+underneath, and showing the results of
+
+01:40.720 --> 01:43.840
+that right inside the same Org file.
+
+01:43.840 --> 01:44.966
+Let's look at
+
+01:44.966 --> 01:47.167
+what are a couple of scenarios
+
+01:47.167 --> 01:49.400
+using this might actually look like.
+
+01:49.400 --> 01:52.533
+Let's start with imagining that
+
+01:52.533 --> 01:55.000
+we are writing a developer guide
+
+01:55.000 --> 01:59.439
+for a service or a library,
+
+01:59.439 --> 02:02.560
+or a computer program that we might be writing.
+
+02:02.560 --> 02:04.560
+And, imagine that we have some
+
+02:04.560 --> 02:07.119
+dependencies that the program requires
+
+02:07.119 --> 02:09.520
+that are configured using docker-compose,
+
+02:09.520 --> 02:11.767
+for those who don't know Docker, docker-compose,
+
+02:11.767 --> 02:15.599
+it's a way to quickly describe some Linux
+
+02:15.599 --> 02:17.920
+programs that can be immediately run
+
+02:17.920 --> 02:21.280
+without installing too much dependencies.
+
+02:21.280 --> 02:23.040
+You define these using a YAML file
+
+02:23.040 --> 02:25.040
+called the docker-compose file.
+
+02:25.040 --> 02:26.959
+Now, here inside Emacs we have a block
+
+02:26.959 --> 02:29.280
+that defines a YAML file, and we're
+
+02:29.280 --> 02:30.900
+actually saying this is called
+
+02:30.900 --> 02:33.840
+docker-compose.yaml
+
+02:33.840 --> 02:36.400
+with some content here, and you can see
+
+02:36.400 --> 02:38.200
+that even though we are in Org mode,
+
+02:38.200 --> 02:40.959
+Org mode knows that it can highlight this
+
+02:40.959 --> 02:43.360
+according to YAML and Org mode doesn't
+
+02:43.360 --> 02:45.200
+directly know about YAML, we just said hey
+
+02:45.200 --> 02:47.360
+this block has to do with YAML.
+
+02:47.360 --> 02:51.467
+Because there's a yaml-mode in Emacs,
+
+02:51.467 --> 02:53.280
+it will borrow from that mode to actually
+
+02:53.280 --> 02:55.920
+highlight this block.
+
+02:55.920 --> 02:57.680
+Now, the fun thing is that there's a
+
+02:57.680 --> 03:00.080
+feature in Org called tangling that
+
+03:00.080 --> 03:02.159
+allows you to take these kinds of blocks
+
+03:02.159 --> 03:04.800
+and actually export them to separate files.
+
+03:04.800 --> 03:06.959
+So, if we look at the
+
+03:06.959 --> 03:08.720
+directory that we're in right now, we see
+
+03:08.720 --> 03:10.434
+that we just got the presentation,
+
+03:10.434 --> 03:12.239
+there is no docker-compose file yet.
+
+03:12.239 --> 03:16.000
+If I say Control c Control v t (C-c C-v t)
+
+03:16.000 --> 03:18.080
+and I go back and refresh this directory,
+
+03:18.080 --> 03:20.200
+now we have a docker-compose file as well,
+
+03:20.200 --> 03:22.000
+which has the content in it that we
+
+03:22.000 --> 03:23.334
+just created here.
+
+03:23.334 --> 03:25.200
+That's very nice because
+
+03:25.200 --> 03:26.560
+conceptually we don't actually need to
+
+03:26.560 --> 03:28.080
+leave Org mode, we can say something
+
+03:28.080 --> 03:29.760
+about this file and have the contents of
+
+03:29.760 --> 03:32.480
+the file in the same descriptive document
+
+03:32.480 --> 03:34.966
+while also having some actual side effect
+
+03:34.966 --> 03:36.159
+of the file existing on disk and
+
+03:36.159 --> 03:38.000
+us being able to interact with it.
+
+03:38.000 --> 03:40.000
+For example, we could…, now that the file is
+
+03:40.000 --> 03:42.319
+there, invoke docker-compose and actually
+
+03:42.319 --> 03:44.400
+create the nginx web server that we're
+
+03:44.400 --> 03:46.700
+defining here. Let's do that.
+
+03:46.700 --> 03:47.120
+We have a little block
+
+03:47.120 --> 03:49.599
+here that runs the shell script if I
+
+03:49.599 --> 03:51.920
+invoke that from Org mode, we get the
+
+03:51.920 --> 03:53.439
+results here, we see that now we have a
+
+03:53.439 --> 03:55.867
+web server running on port 8080.
+
+03:55.867 --> 03:56.767
+That's, by the way,
+
+03:56.767 --> 03:58.319
+serving up the contents of
+
+03:58.319 --> 04:00.799
+the directory that we're in here
+
+04:00.799 --> 04:02.799
+on port 8080.
+
+04:02.799 --> 04:06.000
+So, that's already quite nice.
+
+04:06.000 --> 04:08.959
+Let's look at another scenario where we
+
+04:08.959 --> 04:11.760
+may be documenting a REST API.
+
+04:11.760 --> 04:14.720
+REST APIs use a lot of HTTP interactions
+
+04:14.720 --> 04:17.199
+typically describing an XML or JSON
+
+04:17.199 --> 04:20.000
+structure and which HTTP verb GET or PUT
+
+04:20.000 --> 04:22.320
+to use with that and the URL.
+
+04:22.320 --> 04:25.919
+There's actually a nice extension to
+
+04:25.919 --> 04:28.240
+Org babel called rest client that you
+
+04:28.240 --> 04:30.000
+can install, that allows you to describe
+
+04:30.000 --> 04:33.360
+these kind of requests right inside Emacs.
+
+04:33.360 --> 04:35.360
+First, let's make sure that our HTTP
+
+04:35.360 --> 04:36.720
+server has something to respond with,
+
+04:36.720 --> 04:38.080
+that's a little interesting, for example,
+
+04:38.080 --> 04:40.433
+an XML file. We already know how to do that.
+
+04:40.433 --> 04:42.533
+So, let's create a code block type xml
+
+04:42.533 --> 04:43.600
+that we can tangle to file called
+
+04:43.600 --> 04:46.960
+test.xml, Control c Control v t (C-c C-v t).
+
+04:46.960 --> 04:52.067
+Now, if we look at the directory again,
+
+04:52.067 --> 04:55.120
+we have a test.xml file.
+
+04:55.120 --> 04:57.520
+And, now we can have a new type of block
+
+04:57.520 --> 04:59.600
+called the restclient, which will invoke
+
+04:59.600 --> 05:01.199
+REST client, and anything you type into
+
+05:01.199 --> 05:04.160
+here will be sent as an HTTP request to
+
+05:04.160 --> 05:05.600
+the server that you specify.
+
+05:05.600 --> 05:08.880
+Right now it goes to localhost on 8080 and
+
+05:08.880 --> 05:10.720
+let's see if we can get our test.xml
+
+05:10.720 --> 05:11.433
+file back.
+
+05:11.433 --> 05:13.600
+I've just invoked this, and you can see
+
+05:13.600 --> 05:16.479
+we got the spec and the content type of
+
+05:16.479 --> 05:17.680
+the server, if we scroll down a little
+
+05:17.680 --> 05:19.199
+bit I think we see the headers here, yeah,
+
+05:19.199 --> 05:22.080
+so the server said it's text/xml and
+
+05:22.080 --> 05:23.759
+restclient is smart enough to actually
+
+05:23.759 --> 05:27.966
+invoke Emacs's sgml-mode to highlight it.
+
+05:27.966 --> 05:28.639
+I'm not exactly sure
+
+05:28.639 --> 05:31.039
+what's the difference is between sxml
+
+05:31.039 --> 05:33.680
+and xml-mode and there's a nxml-mode,
+
+05:33.680 --> 05:35.600
+they all pretty much know how to deal
+
+05:35.600 --> 05:38.800
+with XML. In this case sgml was
+
+05:38.800 --> 05:41.600
+chosen, which is fine.
+
+05:41.600 --> 05:42.960
+But you can see we just served up that
+
+05:42.960 --> 05:45.680
+test.xml file, and
+
+05:45.680 --> 05:46.880
+we can have some actual text here
+
+05:46.880 --> 05:48.639
+describing "Hey, if you do this request
+
+05:48.639 --> 05:50.734
+you might get a response like that,"
+
+05:50.734 --> 05:53.199
+and the server will actually serve that up
+
+05:53.199 --> 05:56.233
+and insert it right into the Org mode document.
+
+05:56.233 --> 05:57.759
+By the way, we're looking at
+
+05:57.759 --> 06:00.720
+this now inside Emacs rendered somewhat
+
+06:00.720 --> 06:02.479
+interestingly, but obviously you can
+
+06:02.479 --> 06:05.280
+export this to a PDF, or HTML, or in all
+
+06:05.280 --> 06:06.880
+sorts of nice and different ways as well
+
+06:06.880 --> 06:09.759
+depending on what your particular needs are.
+
+06:09.759 --> 06:11.520
+Of course, we can't just send GET
+
+06:11.520 --> 06:14.080
+requests, we can send PUT requests as
+
+06:14.080 --> 06:16.400
+well, and just like in plain HTTP you
+
+06:16.400 --> 06:19.120
+have the PUT method on the first line then
+
+06:19.120 --> 06:20.600
+your headers, and a blank line,
+
+06:20.600 --> 06:22.000
+and then the body.
+
+06:22.000 --> 06:24.720
+If we try and invoke this then
+
+06:24.720 --> 06:27.440
+nginx will say "405 Not Allowed"
+
+06:27.440 --> 06:29.199
+because, obviously, just running a plain
+
+06:29.199 --> 06:30.319
+web server will not allow you to
+
+06:30.319 --> 06:32.080
+actually upload any files,
+
+06:32.080 --> 06:33.440
+but this of course could have been any
+
+06:33.440 --> 06:36.800
+other response as well.
+
+06:36.800 --> 06:39.759
+Now, let's look at doing
+
+06:39.759 --> 06:41.600
+presentations themselves, like the one
+
+06:41.600 --> 06:42.867
+you're looking at.
+
+06:42.867 --> 06:45.766
+There's a package that I like to use a lot,
+
+06:45.766 --> 06:47.520
+which is called org-tree-slide.
+
+06:47.520 --> 06:49.759
+That's the one that's active right now,
+
+06:49.759 --> 06:52.080
+which takes an Org document and allows
+
+06:52.080 --> 06:54.600
+you to show one heading at a time.
+
+06:54.600 --> 06:55.599
+It doesn't matter whether it's the first
+
+06:55.599 --> 06:57.280
+level, second level, third level heading,
+
+06:57.280 --> 07:00.319
+they sort of fold into nice
+
+07:00.319 --> 07:02.720
+things at the top,
+
+07:02.720 --> 07:03.919
+where you can
+
+07:03.919 --> 07:05.366
+sort of go through a document
+
+07:05.366 --> 07:07.680
+one piece at a time.
+
+07:07.680 --> 07:10.367
+I actually do like to use
+
+07:10.367 --> 07:12.319
+Org babel at the same time to
+
+07:12.319 --> 07:14.479
+do some live coding in it as well.
+
+07:14.479 --> 07:16.800
+Actually there are two ways to go to a PDF,
+
+07:16.800 --> 07:20.720
+you can just use the normal Org export
+
+07:20.720 --> 07:22.733
+option to go to a PDF, which is
+
+07:22.733 --> 07:25.120
+Control c Control e, and then l p (C-c C-e l p),
+
+07:25.120 --> 07:27.520
+but if you use restclient, the
+
+07:27.520 --> 07:30.960
+LaTeX file underneath sometimes gets
+
+07:30.960 --> 07:33.280
+a little wonky because those things
+
+07:33.280 --> 07:34.866
+don't directly work together.
+
+07:34.866 --> 07:36.166
+I wrote a little bit of Lisp
+
+07:36.166 --> 07:37.039
+to help out with that,
+
+07:37.039 --> 07:38.880
+which you can look at if you check
+
+07:38.880 --> 07:40.960
+out my presentation later.
+
+07:40.960 --> 07:45.919
+There's another package for Org babel called
+
+07:45.919 --> 07:48.800
+beamer, or ox-beamer it's called,
+
+07:48.800 --> 07:51.680
+which uses a LaTeX style called beamer
+
+07:51.680 --> 07:53.360
+to create a PDF,
+
+07:53.360 --> 07:57.400
+and that one looks sort of…,
+
+07:57.400 --> 07:58.000
+that one tries to actually
+
+07:58.000 --> 07:59.840
+create one page per slide which you
+
+07:59.840 --> 08:01.039
+would actually have a PDF with the
+
+08:01.039 --> 08:03.280
+slides, but that one is a lot more picky
+
+08:03.280 --> 08:06.160
+on what your Org file is
+
+08:06.160 --> 08:07.440
+structured like, so you need to have all
+
+08:07.440 --> 08:08.879
+your leaf headings at the same level,
+
+08:08.879 --> 08:11.360
+which I typically don't do.
+
+08:11.360 --> 08:12.800
+So, I can show you what this one
+
+08:12.800 --> 08:16.639
+looks like.
+
+08:16.639 --> 08:18.240
+For this presentation you get a nice
+
+08:18.240 --> 08:20.067
+title slide, and then you get…,
+
+08:20.067 --> 08:21.167
+it tries to make an outline,
+
+08:21.167 --> 08:23.360
+which is the one level above.
+
+08:23.360 --> 08:26.319
+The slides sort of look okay, but as
+
+08:26.319 --> 08:28.479
+you go further they sort of start
+
+08:28.479 --> 08:31.680
+to run into, you know,
+
+08:31.680 --> 08:34.633
+things not flowing as they should.
+
+08:34.633 --> 08:36.800
+I'm sure with a lot more LaTeX
+
+08:36.800 --> 08:37.919
+knowledge you could make this
+
+08:37.919 --> 08:40.640
+look a lot nicer, but personally I tend
+
+08:40.640 --> 08:44.080
+to just create a normal PDF document
+
+08:44.080 --> 08:46.399
+that's just, you know, text
+
+08:46.399 --> 08:48.560
+with all the actual content of the
+
+08:48.560 --> 08:50.560
+document. Inside the text you can see the
+
+08:50.560 --> 08:52.880
+highlighting of especially restclient
+
+08:52.880 --> 08:55.920
+stuff that works just fine, and
+
+08:55.920 --> 08:57.400
+it's enough for my needs,
+
+08:57.400 --> 09:00.959
+so I just tend to make plain PDFs.
+
+09:00.959 --> 09:02.959
+Since we only have 10 minutes, I will
+
+09:02.959 --> 09:05.200
+not go into the detailed configuration,
+
+09:05.200 --> 09:06.800
+you can check out the presentation
+
+09:06.800 --> 09:09.440
+online to see how all these packages are
+
+09:09.440 --> 09:13.440
+configured and how I use them,
+
+09:13.440 --> 09:18.000
+but for now that's all I have.
+
+09:18.000 --> 09:20.000
+I do recommend you try this out yourself.
+
+09:20.000 --> 09:22.240
+If you have any kind of documentation
+
+09:22.240 --> 09:24.399
+or textual things to do,
+
+09:24.399 --> 09:26.320
+just pick one of these packages at a
+
+09:26.320 --> 09:27.519
+time, integrate them into your
+
+09:27.519 --> 09:29.200
+configuration if you haven't already.
+
+09:29.200 --> 09:31.040
+That's really the best way to go
+
+09:31.040 --> 09:32.959
+about this, and you know, Google is your
+
+09:32.959 --> 09:34.240
+friend, if you think "Hey how I would do
+
+09:34.240 --> 09:35.467
+this with these packages,"
+
+09:35.567 --> 09:37.839
+definitely do that.
+
+09:37.839 --> 09:41.760
+More things I will be looking at is
+
+09:41.760 --> 09:44.000
+using this concept to write unit or
+
+09:44.000 --> 09:45.360
+integration tests, you can imagine if you
+
+09:45.360 --> 09:47.600
+have a documentation in Org mode that
+
+09:47.600 --> 09:50.800
+describes your service as a
+
+09:50.800 --> 09:53.360
+function of its REST API, you may want to
+
+09:53.360 --> 09:55.040
+actually run all those commands as part
+
+09:55.040 --> 09:56.480
+of your build and check if all the
+
+09:56.480 --> 09:58.399
+documentation is still in order.
+
+09:58.399 --> 09:59.680
+I'm not doing that yet, but I'm
+
+09:59.680 --> 10:01.033
+definitely looking into that.
+
+10:01.133 --> 10:03.667
+I'm also writing some extensions
+
+10:03.767 --> 10:06.000
+to use Java and Scala
+
+10:06.000 --> 10:08.720
+in a somewhat higher level with Org mode.
+
+10:08.720 --> 10:11.680
+But that's not entirely working yet,
+
+10:11.680 --> 10:12.959
+and we don't have time to go into that
+
+10:12.959 --> 10:14.240
+today.
+
+10:14.240 --> 10:16.666
+That's it. Thanks a lot for your attention,
+
+10:16.766 --> 10:21.880
+and I'll be there for questions later.
diff --git a/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt b/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt
new file mode 100644
index 00000000..0a977036
--- /dev/null
+++ b/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt
@@ -0,0 +1,768 @@
+WEBVTT
+
+00:00.000 --> 00:01.599
+Hello, my name is Gabriele,
+
+00:01.599 --> 00:03.439
+and today I'm going to tell you about Telega
+
+00:03.439 --> 00:05.600
+and the Emacs community on Telegram.
+
+00:05.600 --> 00:08.400
+I'm not affiliated with Telegram or Telega,
+
+00:08.400 --> 00:10.719
+and opinions are my own in general.
+
+00:10.719 --> 00:14.160
+I'm going to give you my personal spin about these topics.
+
+00:14.160 --> 00:16.160
+The plan for the talk is the following.
+
+00:16.160 --> 00:18.800
+First, I'm going to talk about what is Telegram.
+
+00:18.800 --> 00:19.840
+Next, I'm going to tell you
+
+00:19.840 --> 00:21.840
+about the Emacs community on Telegram.
+
+00:21.840 --> 00:24.720
+And finally, I'm going to discuss telega.el,
+
+00:24.720 --> 00:26.560
+an Emacs package for Telegram.
+
+00:26.560 --> 00:29.359
+In all of these, I'm now going to dive into details.
+
+00:29.359 --> 00:30.880
+My goal here is to give you
+
+00:30.880 --> 00:33.120
+some exposure about these topics.
+
+00:33.120 --> 00:35.840
+You can find out more online, if you want.
+
+00:35.840 --> 00:38.960
+Let's get started with what is
+Telegram.
+
+00:38.960 --> 00:41.100
+Telegram is a cloud-based
+
+00:41.100 --> 00:42.879
+instant messaging platform.
+
+00:42.879 --> 00:44.079
+It's a popular one.
+
+00:44.079 --> 00:46.559
+It has more than half a billion users.
+
+00:46.559 --> 00:47.840
+I think one of the reasons
+
+00:47.840 --> 00:49.600
+why it's so popular, it's because
+
+00:49.600 --> 00:51.360
+it's really rich in features
+
+00:51.360 --> 00:52.960
+while being user friendly.
+
+00:52.960 --> 00:54.640
+Hence, in some regions,
+
+00:54.640 --> 00:56.960
+Telegram has good market penetration.
+
+00:56.960 --> 00:59.039
+And of course, because of network effects,
+
+00:59.039 --> 01:01.120
+this brings even more users.
+
+01:01.120 --> 01:02.239
+The details of the features
+
+01:02.239 --> 01:03.680
+is not particularly important.
+
+01:03.680 --> 01:04.879
+What I want to emphasize, though,
+
+01:04.879 --> 01:08.400
+is that while Telegram is mostly text-based,
+
+01:08.400 --> 01:12.000
+there's also support for audio/video calls and notes,
+
+01:12.000 --> 01:13.600
+and there's also a lot of features
+
+01:13.600 --> 01:15.119
+which typically you find
+
+01:15.119 --> 01:17.360
+in other instant messaging platforms:
+
+01:17.360 --> 01:18.479
+you can chat with yourself,
+
+01:18.479 --> 01:19.360
+you can make polls,
+
+01:19.360 --> 01:20.159
+you can make quizzes,
+
+01:20.159 --> 01:21.280
+you can schedule messages,
+
+01:21.280 --> 01:23.280
+you can send attachments of any kind,
+
+01:23.280 --> 01:25.759
+even big ones, and you can send stickers.
+
+01:25.759 --> 01:27.759
+Telegram, overall, is quite customizable,
+
+01:27.759 --> 01:30.560
+and I would say that the platform is, overall, hackable.
+
+01:30.560 --> 01:32.799
+You can expand it with bots
+
+01:32.799 --> 01:35.280
+and the clients are open source.
+
+01:35.280 --> 01:37.280
+In all of this, we shouldn't forget, though,
+
+01:37.280 --> 01:38.448
+the Telegram is centralized
+
+01:38.448 --> 01:39.840
+and it is not free software.
+
+01:39.840 --> 01:42.720
+Nonetheless, it's still used by a number of people,
+
+01:42.720 --> 01:45.200
+and people use Telegram for different reasons.
+
+01:45.200 --> 01:47.200
+For example, some people use it to stay in touch
+
+01:47.200 --> 01:48.399
+with friends and families.
+
+01:48.399 --> 01:50.560
+For this, Telegram offers private chats
+
+01:50.560 --> 01:53.600
+or group chats with a restricted number of people.
+
+01:53.600 --> 01:55.040
+A lot of people use it
+
+01:55.040 --> 01:57.600
+for engaging in online communities.
+
+01:57.600 --> 01:59.439
+For this, Telegram has super groups,
+
+01:59.439 --> 02:00.719
+which are groups with up to
+
+02:00.719 --> 02:02.159
+hundreds of thousands of users,
+
+02:02.159 --> 02:03.360
+and has also channels,
+
+02:03.360 --> 02:07.119
+which are one-to-many ways of communicating,
+
+02:07.119 --> 02:09.280
+so these are ideally suited for,
+
+02:09.280 --> 02:10.959
+for example, following news,
+
+02:10.959 --> 02:12.167
+all sorts of news.
+
+02:12.167 --> 02:13.680
+Telegram also has bots
+
+02:13.680 --> 02:15.840
+which can be useful by themselves.
+
+02:15.840 --> 02:17.040
+They provide value.
+
+02:17.040 --> 02:18.400
+And the chat with oneself
+
+02:18.400 --> 02:20.400
+can be used for sending links,
+
+02:20.400 --> 02:23.440
+making notes, or sending reminders.
+
+02:23.440 --> 02:24.959
+So overall, there's multiple ways
+
+02:24.959 --> 02:26.560
+in which you can use Telegram.
+
+02:26.560 --> 02:28.239
+When it comes to instant messaging,
+
+02:28.239 --> 02:30.000
+many people call Telegram home.
+
+02:30.000 --> 02:31.840
+It shouldn't come as a surprise, then,
+
+02:31.840 --> 02:34.480
+that Emacs users want to meet
+
+02:34.480 --> 02:35.680
+on Telegram as well.
+
+02:35.680 --> 02:38.480
+And indeed, there's an Emacs community on Telegram.
+
+02:38.480 --> 02:41.519
+Here I'm listing a few super groups
+about Emacs.
+
+02:41.519 --> 02:43.040
+There are language groups,
+
+02:43.040 --> 02:45.599
+so there's Emacs English, Emacs Russian,
+
+02:45.599 --> 02:48.800
+Emacs Spanish, Emacs Mandarin, Portuguese...
+
+02:48.800 --> 02:51.440
+There are groups which are specific to starter packs.
+
+02:51.440 --> 02:53.040
+For example, there are Doom Emacs,
+
+02:53.040 --> 02:54.879
+Spacemacs, and there are groups
+
+02:54.879 --> 02:57.280
+which are specific to packages like telega
+
+02:57.280 --> 02:58.720
+which I'm going to discuss later.
+
+02:58.720 --> 03:00.159
+These are what you would expect
+
+03:00.159 --> 03:02.800
+from traditional internet chat rooms.
+
+03:02.800 --> 03:04.319
+So they're used for shared links,
+
+03:04.319 --> 03:06.959
+they're used for discussing, troubleshooting,
+
+03:06.959 --> 03:09.120
+giving each other recommendations...
+
+03:09.120 --> 03:10.879
+I think there are healthy communities
+
+03:10.879 --> 03:12.239
+with typically a hundred
+
+03:12.239 --> 03:13.519
+to a thousand members.
+
+03:13.519 --> 03:15.280
+An example of an initiative that's put forth
+
+03:15.280 --> 03:16.879
+by the Emacs community on Telegram
+
+03:16.879 --> 03:18.720
+is @emacs_stories. @emacs_stories
+
+03:18.720 --> 03:21.680
+collects links and messages and pictures
+
+03:21.680 --> 03:24.080
+that can showcase what Emacs can do.
+
+03:24.080 --> 03:25.680
+One of the goals here is
+
+03:25.680 --> 03:28.239
+to show people that are new to emacs
+
+03:28.239 --> 03:29.120
+what you can achieve
+
+03:29.120 --> 03:31.200
+if you spend time with your editor.
+
+03:31.200 --> 03:32.480
+And here, what I'm showing you
+
+03:32.480 --> 03:34.159
+is a screenshot from Telega.
+
+03:34.159 --> 03:36.080
+So let's move on to the final topic
+
+03:36.080 --> 03:37.040
+of this discussion,
+
+03:37.040 --> 03:39.200
+which is telega.el.
+
+03:39.200 --> 03:41.440
+Telega is a terrific piece of software.
+
+03:41.440 --> 03:45.280
+Telega is a interface to telegram within Emacs.
+
+03:45.280 --> 03:46.959
+It's developed by @zevlg,
+
+03:46.959 --> 03:49.680
+which is a long-time Emacs hacker,
+
+03:49.680 --> 03:51.280
+and it's very actively developed.
+
+03:51.280 --> 03:54.000
+Telegram itself is under active development,
+
+03:54.000 --> 03:55.840
+and telega has to implement
+
+03:55.840 --> 03:57.200
+all these new features
+
+03:57.200 --> 03:58.720
+that Telegram implements.
+
+03:58.720 --> 04:00.400
+Indeed, Telega implements
+
+04:00.400 --> 04:01.360
+almost all the features
+
+04:01.360 --> 04:02.319
+available in Telegram,
+
+04:02.319 --> 04:04.159
+even things like live location,
+
+04:04.159 --> 04:05.439
+except for audio/video calls
+
+04:05.439 --> 04:07.040
+but these are work in progress.
+
+04:07.040 --> 04:08.000
+Just to give you an idea
+
+04:08.000 --> 04:09.040
+of the size of this effort,
+
+04:09.040 --> 04:09.680
+we're talking about
+
+04:09.680 --> 04:11.280
+30,000 lines of code,
+
+04:11.280 --> 04:12.720
+which doesn't tell you much,
+
+04:12.720 --> 04:14.080
+but maybe you can get a sense
+
+04:14.080 --> 04:16.000
+that this is a significant project.
+
+04:16.000 --> 04:18.400
+In fact, I think Telega is a really remarkable
+
+04:18.400 --> 04:19.199
+piece of software.
+
+04:19.199 --> 04:20.639
+Not only it implements all the features
+
+04:20.639 --> 04:21.680
+available in Telegram,
+
+04:21.680 --> 04:22.960
+but implements new ones,
+
+04:22.960 --> 04:25.120
+which are only available to Emacs users.
+
+04:25.120 --> 04:26.800
+Here I'm blinking the documentation
+
+04:26.800 --> 04:28.560
+for you to read if you're interested.
+
+04:28.560 --> 04:29.759
+What I want to mention, though,
+
+04:29.759 --> 04:31.360
+is that Telega is available on MELPA,
+
+04:31.360 --> 04:34.160
+but it requires an external library, TDlib.
+
+04:34.160 --> 04:35.759
+Most distributions do not pack
+
+04:35.759 --> 04:37.360
+a recent version of TDlib.
+
+04:37.360 --> 04:39.600
+Such you have to compile yourself.
+
+04:39.600 --> 04:41.280
+if you don't want to compile TDlib,
+
+04:41.280 --> 04:43.120
+you can use the officially supported
+
+04:43.120 --> 04:44.560
+Dockerfile or guix file
+
+04:44.560 --> 04:46.080
+so that you can get everything
+
+04:46.080 --> 04:48.000
+without too much worry.
+
+04:48.000 --> 04:50.720
+Now let me tell you more about Telegram.
+
+04:50.720 --> 04:52.080
+Of course, the best way is to just
+
+04:52.080 --> 04:53.520
+experiment with it yourself.
+
+04:53.520 --> 04:54.800
+And here I just want to give you
+
+04:54.800 --> 04:56.720
+a glimpse of how Telega works.
+
+04:56.720 --> 04:57.840
+When you start Telega,
+
+04:57.840 --> 05:00.000
+what you see is a root buffer.
+
+05:00.000 --> 05:01.280
+The root buffer is essentially
+
+05:01.280 --> 05:02.960
+the list of all the chats that you have,
+
+05:02.960 --> 05:05.199
+and, by itself, is a really powerful tool.
+
+05:05.199 --> 05:06.639
+You can use it for sorting
+
+05:06.639 --> 05:07.680
+and filtering your chats,
+
+05:07.680 --> 05:10.639
+or you can create groups which are thematic.
+
+05:10.639 --> 05:12.720
+There's sophisticated search functions.
+
+05:12.720 --> 05:14.240
+For example, if you want to search only
+
+05:14.240 --> 05:16.800
+for specific type of media,
+
+05:16.800 --> 05:18.240
+you can start new chats,
+
+05:18.240 --> 05:19.680
+you can get info about the chats,
+
+05:19.680 --> 05:22.479
+and you can even change Telegram settings
+
+05:22.479 --> 05:24.720
+which are applied across the board.
+
+05:24.720 --> 05:26.479
+Here I'm showing you an example
+
+05:26.479 --> 05:27.520
+of what it looks like.
+
+05:27.520 --> 05:30.720
+As you see, we're enjoying the support for emoji
+
+05:30.720 --> 05:33.039
+that Emacs has been improving upon
+
+05:33.039 --> 05:34.320
+over the past years.
+
+05:34.320 --> 05:36.400
+Once you select one of these charts,
+
+05:36.400 --> 05:38.880
+you're brought to the chat buffer.
+
+05:38.880 --> 05:40.400
+Here I'm showing an example of
+
+05:40.400 --> 05:42.320
+what a chat buffer looks like.
+
+05:42.320 --> 05:43.360
+So this is a screenshot
+
+05:43.360 --> 05:45.520
+from the Emacs English group
+
+05:45.520 --> 05:47.840
+where people were discussing about
+
+05:47.840 --> 05:49.039
+compiling Emacs.
+
+05:49.039 --> 05:52.000
+As you can see, we see the conversation.
+
+05:52.000 --> 05:53.280
+We see the avatars.
+
+05:53.280 --> 05:54.639
+We see that there's a thread.
+
+05:54.639 --> 05:55.440
+We also see that
+
+05:55.440 --> 05:57.360
+I'm going to send a message,
+
+05:57.360 --> 05:58.240
+message with emoji,
+
+05:58.240 --> 05:59.440
+a message with formatting,
+
+05:59.440 --> 06:01.120
+and I'm attaching an object.
+
+06:01.120 --> 06:03.680
+I can format my messages
+
+06:03.680 --> 06:05.520
+using Markdown or Org Mode
+
+06:05.520 --> 06:06.720
+or whatever I prefer
+
+06:06.720 --> 06:09.199
+and I can attach any kind of attachment
+
+06:09.199 --> 06:10.560
+I like. For example...
+
+06:10.560 --> 06:11.520
+What I can also do is,
+
+06:11.520 --> 06:13.120
+if I'm editing a buffer,
+
+06:13.120 --> 06:15.680
+I can send that buffer through Telega,
+
+06:15.680 --> 06:17.199
+which I find quite useful
+
+06:17.199 --> 06:18.720
+especially when I'm sending code.
+
+06:18.720 --> 06:20.240
+And again, just to show you that
+
+06:20.240 --> 06:22.319
+Telegram is not just text messages
+
+06:22.319 --> 06:25.199
+and Telega supports all the features in Telegram,
+
+06:25.199 --> 06:27.199
+here at the bottom, I'm showing
+
+06:27.199 --> 06:29.759
+a voice note being played through Emacs,
+
+06:29.759 --> 06:31.919
+and as you see, there are some buttons
+
+06:31.919 --> 06:33.199
+which are functional.
+
+06:33.199 --> 06:36.240
+If I hit the two times button,
+
+06:36.240 --> 06:38.160
+the playback speed will be twice,
+
+06:38.160 --> 06:39.600
+which is really neat.
+
+06:39.600 --> 06:40.800
+Telega and Emacs can even
+
+06:40.800 --> 06:43.039
+reproduce videos or gifs,
+
+06:43.039 --> 06:45.280
+at least for a recent version of Emacs.
+
+06:45.280 --> 06:47.520
+Finally, I want to emphasize that Telega
+
+06:47.520 --> 06:49.280
+integrates really well with Emacs.
+
+06:49.280 --> 06:51.039
+For example, we are showing you
+
+06:51.039 --> 06:54.319
+how you can use a transient interface
+
+06:54.319 --> 06:56.720
+to Telega, or on the other side,
+
+06:56.720 --> 06:59.280
+I'm showing you how Telega integrates
+
+06:59.280 --> 07:00.080
+with dashboard,
+
+07:00.080 --> 07:01.440
+so that we have recent chats
+
+07:01.440 --> 07:03.120
+and we have the Emacs stories.
+
+07:03.120 --> 07:03.840
+Because, you know,
+
+07:03.840 --> 07:05.759
+who doesn't like Emacs with stories.
+
+07:05.759 --> 07:06.880
+On top, on the other hand,
+
+07:06.880 --> 07:08.880
+I'm showing you that we can have
+
+07:08.880 --> 07:09.919
+syntax highlighting,
+
+07:09.919 --> 07:11.759
+which is something that Telegram by itself
+
+07:11.759 --> 07:14.240
+doesn't have, this Emacs-only feature,
+
+07:14.240 --> 07:15.919
+and we can edit this
+
+07:15.919 --> 07:17.599
+in the same way we edit
+
+07:17.599 --> 07:19.759
+Org Mode source blocks,
+
+07:19.759 --> 07:20.880
+so we can edit this
+
+07:20.880 --> 07:22.800
+with the minor mode for,
+
+07:22.800 --> 07:24.080
+in this case, Emacs Lisp.
+
+07:24.080 --> 07:26.240
+So, to conclude, I wanted to show you
+
+07:26.240 --> 07:27.759
+that the Emacs community
+
+07:27.759 --> 07:29.120
+also meets on Telegram,
+
+07:29.120 --> 07:31.360
+and we're an active and healthy community,
+
+07:31.360 --> 07:32.880
+and I want to present Telega
+
+07:32.880 --> 07:35.759
+as a really amazing piece of software,
+
+07:35.759 --> 07:37.919
+one of the best clients available for
+
+07:37.919 --> 07:39.599
+Telegram with Emacs.
+
+07:39.599 --> 07:41.680
+Even if you don't use Telegram,
+
+07:41.680 --> 07:43.599
+I think you should have a look at Telega
+
+07:43.599 --> 07:46.080
+just to appreciate how amazing
+
+07:46.080 --> 07:47.280
+a piece of software it is.
+
+07:47.280 --> 07:49.680
+And with this, I thank you for your attention,
+
+07:49.680 --> 07:50.960
+and if you like Telega,
+
+07:50.960 --> 07:52.720
+please consider donating
+
+07:52.720 --> 07:54.800
+to support the development of the package.
+
+07:54.800 --> 07:57.599
+Thanks.
diff --git a/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla-and-evgeny-zajcev--main.vtt b/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla-and-evgeny-zajcev--main.vtt
new file mode 100644
index 00000000..87161e3d
--- /dev/null
+++ b/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla-and-evgeny-zajcev--main.vtt
@@ -0,0 +1,769 @@
+WEBVTT
+
+00:00.000 --> 00:01.599
+Hello, my name is Gabriele,
+
+00:01.599 --> 00:03.439
+and today I'm going to tell you about Telega
+
+00:03.439 --> 00:05.600
+and the Emacs community on Telegram.
+
+00:05.600 --> 00:08.400
+I'm not affiliated with Telegram or Telega,
+
+00:08.400 --> 00:10.719
+and opinions are my own in general.
+
+00:10.719 --> 00:14.160
+I'm going to give you my personal spin about these topics.
+
+00:14.160 --> 00:16.160
+The plan for the talk is the following.
+
+00:16.160 --> 00:18.800
+First, I'm going to talk about what is Telegram.
+
+00:18.800 --> 00:19.840
+Next, I'm going to tell you
+
+00:19.840 --> 00:21.840
+about the Emacs community on Telegram.
+
+00:21.840 --> 00:24.720
+And finally, I'm going to discuss telega.el,
+
+00:24.720 --> 00:26.560
+an Emacs package for Telegram.
+
+00:26.560 --> 00:29.359
+In all of these, I'm now going to dive into details.
+
+00:29.359 --> 00:30.880
+My goal here is to give you
+
+00:30.880 --> 00:33.120
+some exposure about these topics.
+
+00:33.120 --> 00:35.840
+You can find out more online, if you want.
+
+00:35.840 --> 00:38.960
+Let's get started with what is
+Telegram.
+
+00:38.960 --> 00:41.100
+Telegram is a cloud-based
+
+00:41.100 --> 00:42.879
+instant messaging platform.
+
+00:42.879 --> 00:44.079
+It's a popular one.
+
+00:44.079 --> 00:46.559
+It has more than half a billion users.
+
+00:46.559 --> 00:47.840
+I think one of the reasons
+
+00:47.840 --> 00:49.600
+why it's so popular, it's because
+
+00:49.600 --> 00:51.360
+it's really rich in features
+
+00:51.360 --> 00:52.960
+while being user friendly.
+
+00:52.960 --> 00:54.640
+Hence, in some regions,
+
+00:54.640 --> 00:56.960
+Telegram has good market penetration.
+
+00:56.960 --> 00:59.039
+And of course, because of network effects,
+
+00:59.039 --> 01:01.120
+this brings even more users.
+
+01:01.120 --> 01:02.239
+The details of the features
+
+01:02.239 --> 01:03.680
+is not particularly important.
+
+01:03.680 --> 01:04.879
+What i want to emphasize, though,
+
+01:04.879 --> 01:08.400
+is that while telegram is mostly text-based
+
+01:08.400 --> 01:12.000
+there's also support for audio/video calls and notes,
+
+01:12.000 --> 01:13.600
+and there's also a lot of features
+
+01:13.600 --> 01:15.119
+which typically you find
+
+01:15.119 --> 01:17.360
+in other instant messaging platforms:
+
+01:17.360 --> 01:18.479
+you can chat with yourself,
+
+01:18.479 --> 01:19.360
+you can make polls,
+
+01:19.360 --> 01:20.159
+you can make quizzes,
+
+01:20.159 --> 01:21.280
+you can schedule messages,
+
+01:21.280 --> 01:23.280
+you can send attachments of any kind,
+
+01:23.280 --> 01:25.759
+even big ones, and you can send stickers.
+
+01:25.759 --> 01:27.759
+Telegram, overall, is quite customizable,
+
+01:27.759 --> 01:30.560
+and I would say that the platform is, overall, hackable.
+
+01:30.560 --> 01:32.799
+You can expand it with bots
+
+01:32.799 --> 01:35.280
+and the clients are open source.
+
+01:35.280 --> 01:37.280
+In all of this, we shouldn't forget, though,
+
+01:37.280 --> 01:38.448
+the Telegram is centralized
+
+01:38.448 --> 01:39.840
+and it is not free software.
+
+01:39.840 --> 01:42.720
+Nonetheless, it's still used by a number of people,
+
+01:42.720 --> 01:45.200
+and people use telegram for different reasons.
+
+01:45.200 --> 01:47.200
+For example, some people use it to stay in touch
+
+01:47.200 --> 01:48.399
+with friends and families.
+
+01:48.399 --> 01:50.560
+For this, Telegram offers private chats
+
+01:50.560 --> 01:53.600
+or group chats with a restricted number of people.
+
+01:53.600 --> 01:55.040
+A lot of people use it
+
+01:55.040 --> 01:57.600
+for engaging in online communities.
+
+01:57.600 --> 01:59.439
+For this, Telegram has super groups,
+
+01:59.439 --> 02:00.719
+which are groups with up to
+
+02:00.719 --> 02:02.159
+hundreds of thousands of users,
+
+02:02.159 --> 02:03.360
+and has also channels,
+
+02:03.360 --> 02:07.119
+which are one-to-many ways of communicating,
+
+02:07.119 --> 02:09.280
+so these are ideally suited for,
+
+02:09.280 --> 02:10.959
+for example, following news,
+
+02:10.959 --> 02:12.167
+all sorts of news.
+
+02:12.167 --> 02:13.680
+Telegram also has bots
+
+02:13.680 --> 02:15.840
+which can be useful by themselves.
+
+02:15.840 --> 02:17.040
+They provide value.
+
+02:17.040 --> 02:18.400
+And the chat with oneself
+
+02:18.400 --> 02:20.400
+can be used for sending links,
+
+02:20.400 --> 02:23.440
+making notes, or sending reminders.
+
+02:23.440 --> 02:24.959
+So overall, there's multiple ways
+
+02:24.959 --> 02:26.560
+in which you can use telegram.
+
+02:26.560 --> 02:28.239
+When it comes to instant messaging,
+
+02:28.239 --> 02:30.000
+many people call Telegram home.
+
+02:30.000 --> 02:31.840
+It shouldn't come as a surprise, then,
+
+02:31.840 --> 02:34.480
+that Emacs users want to
+meet
+
+02:34.480 --> 02:35.680
+on Telegram as well.
+
+02:35.680 --> 02:38.480
+And indeed, there's an Emacs community on Telegram.
+
+02:38.480 --> 02:41.519
+Here I'm listing a few super groups
+about Emacs.
+
+02:41.519 --> 02:43.040
+There are language groups,
+
+02:43.040 --> 02:45.599
+so there's Emacs English, Emacs Russian,
+
+02:45.599 --> 02:48.800
+Emacs Spanish, Emacs Mandarin, Portuguese...
+
+02:48.800 --> 02:51.440
+There are groups which are specific to starter packs.
+
+02:51.440 --> 02:53.040
+For example, there are Doom Emacs,
+
+02:53.040 --> 02:54.879
+Spacemacs, and there are groups
+
+02:54.879 --> 02:57.280
+which are specific to packages like telega
+
+02:57.280 --> 02:58.720
+which I'm going to discuss later.
+
+02:58.720 --> 03:00.159
+These are what you would expect
+
+03:00.159 --> 03:02.800
+from traditional internet chat rooms.
+
+03:02.800 --> 03:04.319
+So they're used for shared links,
+
+03:04.319 --> 03:06.959
+they're used for discussing, troubleshooting,
+
+03:06.959 --> 03:09.120
+giving each other recommendations...
+
+03:09.120 --> 03:10.879
+I think there are healthy communities
+
+03:10.879 --> 03:12.239
+with typically a hundred
+
+03:12.239 --> 03:13.519
+to a thousand members.
+
+03:13.519 --> 03:15.280
+An example of an initiative that's put forth
+
+03:15.280 --> 03:16.879
+by the Emacs community on Telegram
+
+03:16.879 --> 03:18.720
+is @emacs_stories. @emacs_stories
+
+03:18.720 --> 03:21.680
+collects links and messages and pictures
+
+03:21.680 --> 03:24.080
+that can showcase what Emacs can do.
+
+03:24.080 --> 03:25.680
+One of the goals here is
+
+03:25.680 --> 03:28.239
+to show people that are new to emacs
+
+03:28.239 --> 03:29.120
+what you can achieve
+
+03:29.120 --> 03:31.200
+if you spend time with your editor.
+
+03:31.200 --> 03:32.480
+And here, what I'm showing you
+
+03:32.480 --> 03:34.159
+is a screenshot from Telega.
+
+03:34.159 --> 03:36.080
+So let's move on to the final topic
+
+03:36.080 --> 03:37.040
+of this discussion,
+
+03:37.040 --> 03:39.200
+which is telega.el.
+
+03:39.200 --> 03:41.440
+Telega is a terrific piece of software.
+
+03:41.440 --> 03:45.280
+Telega is a interface to telegram within Emacs.
+
+03:45.280 --> 03:46.959
+It's developed by @zevlg,
+
+03:46.959 --> 03:49.680
+which is a long-time Emacs hacker,
+
+03:49.680 --> 03:51.280
+and it's very actively developed.
+
+03:51.280 --> 03:54.000
+Telegram itself is under active development,
+
+03:54.000 --> 03:55.840
+and telega has to implement
+
+03:55.840 --> 03:57.200
+all these new features
+
+03:57.200 --> 03:58.720
+that Telegram implements.
+
+03:58.720 --> 04:00.400
+Indeed, Telega implements
+
+04:00.400 --> 04:01.360
+almost all the features
+
+04:01.360 --> 04:02.319
+available in Telegram,
+
+04:02.319 --> 04:04.159
+even things like live location,
+
+04:04.159 --> 04:05.439
+except for audio/video calls
+
+04:05.439 --> 04:07.040
+but these are work in progress.
+
+04:07.040 --> 04:08.000
+Just to give you an idea
+
+04:08.000 --> 04:09.040
+of the size of this effort,
+
+04:09.040 --> 04:09.680
+we're talking about
+
+04:09.680 --> 04:11.280
+30,000 lines of code,
+
+04:11.280 --> 04:12.720
+which doesn't tell you much,
+
+04:12.720 --> 04:14.080
+but maybe you can get a sense
+
+04:14.080 --> 04:16.000
+that this is a significant project.
+
+04:16.000 --> 04:18.400
+In fact, I think Telega is a really remarkable
+
+04:18.400 --> 04:19.199
+piece of software.
+
+04:19.199 --> 04:20.639
+Not only it implements all the features
+
+04:20.639 --> 04:21.680
+available in Telegram,
+
+04:21.680 --> 04:22.960
+but implements new ones,
+
+04:22.960 --> 04:25.120
+which are only available to Emacs users.
+
+04:25.120 --> 04:26.800
+Here I'm blinking the documentation
+
+04:26.800 --> 04:28.560
+for you to read if you're interested.
+
+04:28.560 --> 04:29.759
+What I want to mention, though,
+
+04:29.759 --> 04:31.360
+is that Telega is available on MELPA,
+
+04:31.360 --> 04:34.160
+but it requires an external library, TDlib.
+
+04:34.160 --> 04:35.759
+Most distributions do not pack
+
+04:35.759 --> 04:37.360
+a recent version of TDlib.
+
+04:37.360 --> 04:39.600
+Such you have to compile yourself.
+
+04:39.600 --> 04:41.280
+if you don't want to compile TDlib,
+
+04:41.280 --> 04:43.120
+you can use the officially supported
+
+04:43.120 --> 04:44.560
+Dockerfile or guix file
+
+04:44.560 --> 04:46.080
+so that you can get everything
+
+04:46.080 --> 04:48.000
+without too much worry.
+
+04:48.000 --> 04:50.720
+Now let me tell you more about Telegram.
+
+04:50.720 --> 04:52.080
+Of course, the best way is to just
+
+04:52.080 --> 04:53.520
+experiment with it yourself.
+
+04:53.520 --> 04:54.800
+And here I just want to give you
+
+04:54.800 --> 04:56.720
+a glimpse of how Telega works.
+
+04:56.720 --> 04:57.840
+When you start Telega,
+
+04:57.840 --> 05:00.000
+what you see is a root buffer.
+
+05:00.000 --> 05:01.280
+The root buffer is essentially
+
+05:01.280 --> 05:02.960
+the list of all the chats that you have,
+
+05:02.960 --> 05:05.199
+and, by itself, is a really powerful tool.
+
+05:05.199 --> 05:06.639
+You can use it for sorting
+
+05:06.639 --> 05:07.680
+and filtering your chats,
+
+05:07.680 --> 05:10.639
+or you can create groups which are thematic.
+
+05:10.639 --> 05:12.720
+There's sophisticated search functions.
+
+05:12.720 --> 05:14.240
+For example, if you want to search only
+
+05:14.240 --> 05:16.800
+for specific type of media,
+
+05:16.800 --> 05:18.240
+you can start new chats,
+
+05:18.240 --> 05:19.680
+you can get info about the chats,
+
+05:19.680 --> 05:22.479
+and you can even change Telegram settings
+
+05:22.479 --> 05:24.720
+which are applied across the board.
+
+05:24.720 --> 05:26.479
+Here I'm showing you an example
+
+05:26.479 --> 05:27.520
+of what it looks like.
+
+05:27.520 --> 05:30.720
+As you see, we're enjoying the support for emoji
+
+05:30.720 --> 05:33.039
+that Emacs has been improving upon
+
+05:33.039 --> 05:34.320
+over the past years.
+
+05:34.320 --> 05:36.400
+Once you select one of these charts,
+
+05:36.400 --> 05:38.880
+you're brought to the chat buffer.
+
+05:38.880 --> 05:40.400
+Here I'm showing an example of
+
+05:40.400 --> 05:42.320
+what a chat buffer looks like.
+
+05:42.320 --> 05:43.360
+So this is a screenshot
+
+05:43.360 --> 05:45.520
+from the Emacs English group
+
+05:45.520 --> 05:47.840
+where people were discussing about
+
+05:47.840 --> 05:49.039
+compiling Emacs.
+
+05:49.039 --> 05:52.000
+As you can see, we see the conversation.
+
+05:52.000 --> 05:53.280
+We see the avatars.
+
+05:53.280 --> 05:54.639
+We see that there's a thread.
+
+05:54.639 --> 05:55.440
+We also see that
+
+05:55.440 --> 05:57.360
+I'm going to send a message,
+
+05:57.360 --> 05:58.240
+message with emoji,
+
+05:58.240 --> 05:59.440
+a message with formatting,
+
+05:59.440 --> 06:01.120
+and I'm attaching an object.
+
+06:01.120 --> 06:03.680
+I can format my messages
+
+06:03.680 --> 06:05.520
+using Markdown or Org Mode
+
+06:05.520 --> 06:06.720
+or whatever I prefer
+
+06:06.720 --> 06:09.199
+and I can attach any kind of attachment
+
+06:09.199 --> 06:10.560
+I like. For example...
+
+06:10.560 --> 06:11.520
+What I can also do is,
+
+06:11.520 --> 06:13.120
+if I'm editing a buffer,
+
+06:13.120 --> 06:15.680
+I can send that buffer through Telega,
+
+06:15.680 --> 06:17.199
+which I find quite useful
+
+06:17.199 --> 06:18.720
+especially when I'm sending code.
+
+06:18.720 --> 06:20.240
+And again, just to show you that
+
+06:20.240 --> 06:22.319
+Telegram is not just text messages
+
+06:22.319 --> 06:25.199
+and Telega supports all the features in Telegram,
+
+06:25.199 --> 06:27.199
+here at the bottom, I'm showing
+
+06:27.199 --> 06:29.759
+a voice note being played through Emacs,
+
+06:29.759 --> 06:31.919
+and as you see, there are some buttons
+
+06:31.919 --> 06:33.199
+which are functional.
+
+06:33.199 --> 06:36.240
+If I hit the two times button,
+
+06:36.240 --> 06:38.160
+the playback speed will be twice,
+
+06:38.160 --> 06:39.600
+which is really neat.
+
+06:39.600 --> 06:40.800
+Telega and Emacs can even
+
+06:40.800 --> 06:43.039
+reproduce videos or gifs,
+
+06:43.039 --> 06:45.280
+at least for a recent version of Emacs.
+
+06:45.280 --> 06:47.520
+Finally, I want to emphasize that Telega
+
+06:47.520 --> 06:49.280
+integrates really well with Emacs.
+
+06:49.280 --> 06:51.039
+For example, we are showing you
+
+06:51.039 --> 06:54.319
+how you can use a transient interface
+
+06:54.319 --> 06:56.720
+to Telega, or on the other side,
+
+06:56.720 --> 06:59.280
+I'm showing you how Telega integrates
+
+06:59.280 --> 07:00.080
+with dashboard,
+
+07:00.080 --> 07:01.440
+so that we have recent chats
+
+07:01.440 --> 07:03.120
+and we have the Emacs stories.
+
+07:03.120 --> 07:03.840
+Because, you know,
+
+07:03.840 --> 07:05.759
+who doesn't like Emacs with stories.
+
+07:05.759 --> 07:06.880
+On top, on the other hand,
+
+07:06.880 --> 07:08.880
+I'm showing you that we can have
+
+07:08.880 --> 07:09.919
+syntax highlighting,
+
+07:09.919 --> 07:11.759
+which is something that Telegram by itself
+
+07:11.759 --> 07:14.240
+doesn't have, this Emacs-only feature,
+
+07:14.240 --> 07:15.919
+and we can edit this
+
+07:15.919 --> 07:17.599
+in the same way we edit
+
+07:17.599 --> 07:19.759
+Org Mode source blocks,
+
+07:19.759 --> 07:20.880
+so we can edit this
+
+07:20.880 --> 07:22.800
+with the minor mode for,
+
+07:22.800 --> 07:24.080
+in this case, Emacs Lisp.
+
+07:24.080 --> 07:26.240
+So, to conclude, I wanted to show you
+
+07:26.240 --> 07:27.759
+that the Emacs community
+
+07:27.759 --> 07:29.120
+also meets on Telegram,
+
+07:29.120 --> 07:31.360
+and we're an active and healthy community,
+
+07:31.360 --> 07:32.880
+and I want to present Telega
+
+07:32.880 --> 07:35.759
+as a really amazing piece of software,
+
+07:35.759 --> 07:37.919
+one of the best clients available for
+
+07:37.919 --> 07:39.599
+Telegram with Emacs.
+
+07:39.599 --> 07:41.680
+Even if you don't use Telegram,
+
+07:41.680 --> 07:43.599
+I think you should have a look at Telega
+
+07:43.599 --> 07:46.080
+just to appreciate how amazing
+
+07:46.080 --> 07:47.280
+a piece of software it is.
+
+07:47.280 --> 07:49.680
+And with this, I thank you for your attention,
+
+07:49.680 --> 07:50.960
+and if you like Telega,
+
+07:50.960 --> 07:52.720
+please consider donating
+
+07:52.720 --> 07:54.800
+to support the development of the package.
+
+07:54.800 --> 07:57.599
+Thanks.
diff --git a/2021/captions/emacsconf-2021-test--test-blocks--eduardo-ochs--main.vtt b/2021/captions/emacsconf-2021-test--test-blocks--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..f41f699b
--- /dev/null
+++ b/2021/captions/emacsconf-2021-test--test-blocks--eduardo-ochs--main.vtt
@@ -0,0 +1,493 @@
+WEBVTT
+
+00:00.240 --> 00:00:01.839
+Hi! My name is Eduardo Ochs.
+
+00:00:01.839 --> 00:00:02.639
+I'm the author of
+
+00:00:02.639 --> 00:00:04.319
+an Emacs package called eev,
+
+00:00:04.319 --> 00:00:05.279
+and this talk is about
+
+00:00:05.279 --> 00:00:06.480
+a new feature of eev
+
+00:00:06.480 --> 00:00:08.400
+called "test blocks".
+
+00:08.400 --> 00:00:10.320
+Let's start by a demo.
+
+00:10.320 --> 00:00:12.320
+This is a file in Lua that defines
+
+00:00:12.320 --> 00:00:14.160
+these two functions here,
+
+00:14.160 --> 00:00:18.000
+and if we type &lt;f8&gt; several times here,
+
+00:18.000 --> 00:00:20.720
+the &lt;f8&gt;s create a Lua REPL here
+
+00:00:20.720 --> 00:00:22.240
+and then they send these lines
+
+00:00:22.240 --> 00:00:25.840
+to the REPL, where this line here
+
+00:00:25.840 --> 00:00:27.840
+loads this file into the REPL,
+
+00:00:27.840 --> 00:00:29.679
+and these other lines here
+
+00:29.679 --> 00:00:33.200
+are tests for these lines.
+
+00:33.200 --> 00:00:34.719
+There's a lot of information here,
+
+00:00:34.719 --> 00:00:36.160
+so let me organize them
+
+00:00:36.160 --> 00:00:40.480
+in a more visual way.
+
+00:40.480 --> 00:00:42.960
+This is our file in Lua.
+
+00:42.960 --> 00:00:44.559
+Lua sees this thing
+
+00:00:44.559 --> 00:00:46.160
+as a multi-line comment,
+
+00:00:46.160 --> 00:00:47.520
+but we are going to see it
+
+00:00:47.520 --> 00:00:48.879
+as a test block.
+
+00:00:48.879 --> 00:00:50.879
+And eev mode is active,
+
+00:00:50.879 --> 00:00:54.480
+so &lt;f8&gt; does the right thing.
+
+00:54.480 --> 00:00:56.800
+These three lines here
+
+00:00:56.800 --> 00:00:58.320
+set up the target buffer
+
+00:00:58.320 --> 00:01:00.000
+running a Lua REPL.
+
+00:01:00.000 --> 00:01:02.079
+You can see the the prompt
+
+00:01:02.079 --> 00:01:03.520
+of the REPL here,
+
+01:03.520 --> 00:01:04.640
+and these lines here
+
+00:01:04.640 --> 00:01:07.200
+are sent to the REPL.
+
+01:07.200 --> 00:01:08.960
+When we type &lt;f8&gt;
+
+00:01:08.960 --> 00:01:10.720
+on a line that starts
+
+01:10.720 --> 00:01:11.680
+with a red star,
+
+00:01:11.680 --> 00:01:13.600
+like these lines here,
+
+01:13.600 --> 00:01:15.119
+what &lt;f8&gt; does is that
+
+00:01:15.119 --> 00:01:17.537
+it sends the rest of the line--
+
+00:01:17.537 --> 00:01:18.880
+sorry, it executes
+
+00:01:18.880 --> 00:01:21.119
+the rest of the line as Lisp.
+
+01:21.119 --> 00:01:23.920
+So the three &lt;f8&gt;s here
+
+01:23.920 --> 00:01:26.000
+executes these lines as Lisp,
+
+00:01:26.000 --> 00:01:29.520
+and they set up the target buffer here.
+
+01:29.520 --> 00:01:31.119
+When we type &lt;f8&gt;
+
+00:01:31.119 --> 00:01:32.720
+on a line that does not start
+
+00:01:32.720 --> 00:01:34.159
+with a red star,
+
+00:01:34.159 --> 00:01:35.680
+the &lt;f8&gt; sends the line
+
+00:01:35.680 --> 00:01:38.799
+to the target buffer and moves down.
+
+01:38.799 --> 00:01:40.619
+This line loads this file
+
+00:01:40.619 --> 00:01:45.200
+in the REPL, and these lines are tests.
+
+01:45.200 --> 00:01:46.799
+So we just saw how to use
+
+00:01:46.799 --> 00:01:48.240
+an existing test block;
+
+00:01:48.240 --> 00:01:49.840
+let's now see how to create
+
+00:01:49.840 --> 00:01:51.280
+a new test block.
+
+00:01:51.280 --> 00:01:52.640
+We just have to run this:
+
+01:52.640 --> 00:01:55.680
+M-x ee-insert-test-block -
+
+01:55.680 --> 00:01:58.079
+or M-x eeit.
+
+01:58.079 --> 00:02:01.439
+The result depends on the major mode.
+
+02:01.439 --> 00:02:03.920
+Let's understand that
+
+02:03.920 --> 00:02:06.079
+by looking at the source code.
+
+02:06.079 --> 00:02:08.720
+eeit is an alias to this function here,
+
+02:08.720 --> 00:02:09.920
+and this function is just
+
+00:02:09.920 --> 00:02:12.800
+five lines of code plus a docstring...
+
+02:12.800 --> 00:02:14.160
+and the docstring explains
+
+00:02:14.160 --> 00:02:15.920
+that if the major mode is foo-mode,
+
+00:02:15.920 --> 00:02:18.800
+then this function tries to call
+
+02:18.800 --> 00:02:21.360
+a function called ee-insert-test-foo-mode
+
+02:21.360 --> 00:02:24.800
+if that function exists,
+
+02:24.800 --> 00:02:27.280
+and that, if that function does not exist,
+
+02:27.280 --> 00:02:29.680
+then it yields an error.
+
+02:29.680 --> 00:02:31.120
+And here's an example
+
+00:02:31.120 --> 00:02:32.560
+of one such function.
+
+00:02:32.560 --> 00:02:34.800
+That's a function that inserts
+
+00:02:34.800 --> 00:02:37.280
+a test block in haskell-mode.
+
+02:37.280 --> 00:02:40.959
+Here we can see two functions like this:
+
+00:02:40.959 --> 00:02:46.080
+one for haskell-mode and one for js-mode.
+
+02:46.080 --> 00:02:48.560
+These functions look quite similar,
+
+00:02:48.560 --> 00:02:52.720
+but their effects look quite different.
+
+02:52.720 --> 00:02:54.800
+To make this comparison here,
+
+00:02:54.800 --> 00:02:57.280
+I started by writing--
+
+02:57.280 --> 00:02:59.040
+by creating seven files,
+
+00:02:59.040 --> 00:03:01.120
+each one in a different language.
+
+03:01.120 --> 00:03:03.040
+Initially, each one of these files
+
+03:03.040 --> 00:03:04.159
+only had a comment
+
+00:03:04.159 --> 00:03:06.403
+with the name of the language...
+
+00:03:06.403 --> 00:03:10.560
+so: C, Haskell, Javascript, Org Mode, etc.
+
+03:10.560 --> 00:03:12.560
+In each one of these files,
+
+00:03:12.560 --> 00:03:16.959
+I typed M-x eeit to insert a test block.
+
+03:16.959 --> 00:03:18.319
+So here we can see that
+
+00:03:18.319 --> 00:03:20.319
+these test blocks are different.
+
+03:20.319 --> 00:03:21.440
+For example, the syntax
+
+00:03:21.440 --> 00:03:22.560
+for multi-line comments
+
+00:03:22.560 --> 00:03:25.200
+is different depending on the language.
+
+03:25.200 --> 00:03:27.440
+This block here that selects
+
+00:03:27.440 --> 00:03:30.100
+which REPL to run is also different,
+
+00:03:30.100 --> 00:03:34.080
+and this line here that tells the REPL
+
+00:03:34.080 --> 00:03:36.000
+to load the current file
+
+00:03:36.000 --> 00:03:37.680
+is also different,
+
+03:37.680 --> 00:03:39.680
+depending on the language.
+
+03:39.680 --> 00:03:41.840
+In some cases, I had to improvise a bit.
+
+03:41.840 --> 00:03:45.360
+For example, to implement test blocks
+
+00:03:45.360 --> 00:03:48.560
+in shell mode, I had to use
+
+03:48.560 --> 00:03:52.560
+this weird syntax using a here-document.
+
+03:52.560 --> 00:03:55.040
+In Tcl, I also had to improvise a bit,
+
+00:03:55.040 --> 00:03:55.920
+and in some cases,
+
+00:03:55.920 --> 00:03:57.840
+I had to improvise a lot.
+
+03:57.840 --> 00:04:00.159
+For example, in Org Mode,
+
+00:04:00.159 --> 00:04:02.400
+there isn't an obvious REPL to run,
+
+00:04:02.400 --> 00:04:03.840
+and there isn't an obvious way
+
+00:04:03.840 --> 00:04:06.480
+to load the the current Org file
+
+00:04:06.480 --> 00:04:09.360
+into the REPL, so the default action
+
+00:04:09.360 --> 00:04:12.560
+of M-x eeit in Org Mode
+
+00:04:12.560 --> 00:04:15.439
+is just to insert this thing here,
+
+04:15.439 --> 00:04:22.320
+that we can use to run a shell in a REPL.
+
+04:22.320 --> 00:04:25.280
+So these functions are quite similar.
+
+00:04:25.280 --> 00:04:26.240
+In the beginning,
+
+00:04:26.240 --> 00:04:27.919
+I was writing all of them by hand...
+
+00:04:27.919 --> 00:04:29.120
+but then I got bored
+
+00:04:29.120 --> 00:04:30.160
+and I wrote a function
+
+00:04:30.160 --> 00:04:33.840
+to help me write functions like that.
+
+04:33.840 --> 00:04:37.280
+This function is called find-eeit-links,
+
+00:04:37.280 --> 00:04:39.919
+and it creates a temporary buffer,
+
+04:39.919 --> 00:04:42.080
+and the contents of this temporary buffer
+
+00:04:42.080 --> 00:04:44.320
+depends on the major mode. For example,
+
+00:04:44.320 --> 00:04:45.680
+if the current mode is python-mode,
+
+04:45.680 --> 00:04:48.880
+then running this function here
+
+04:48.880 --> 00:04:50.160
+creates a temporary buffer
+
+00:04:50.160 --> 00:04:53.120
+that lets me write the support
+
+00:04:53.120 --> 00:04:55.440
+for test blocks in python-mode,
+
+00:04:55.440 --> 00:04:57.440
+or rewrite the function
+
+00:04:57.440 --> 00:04:59.040
+that supports test blocks
+
+04:59.040 --> 00:05:00.880
+in python-mode.
+
+05:00.880 --> 00:05:03.600
+So if I'm in python-mode and I run this,
+
+05:03.600 --> 00:05:06.639
+I get a temporary buffer like this,
+
+05:06.639 --> 00:05:08.639
+in which this thing is my template
+
+00:05:08.639 --> 00:05:11.039
+for the function. Usually, this string
+
+00:05:11.039 --> 00:05:11.919
+is totally wrong,
+
+00:05:11.919 --> 00:05:13.919
+I have to rewrite this string,
+
+05:13.919 --> 00:05:14.960
+but the rest is right.
+
+00:05:14.960 --> 00:05:16.960
+You can see python-mode here
+
+00:05:16.960 --> 00:05:18.479
+in the name of the function.
+
+00:05:18.479 --> 00:05:20.080
+So we have to edit this
+
+00:05:20.080 --> 00:05:22.840
+and save that to our ~/.emacs.
+
+05:22.840 --> 00:05:26.080
+By the way, these things here
+
+00:05:26.080 --> 00:05:28.880
+hyperlinks to many different things...
+
+05:28.880 --> 00:05:31.600
+This Elisp hyperlink here
+
+05:31.600 --> 00:05:32.880
+points to the source code,
+
+00:05:32.880 --> 00:05:36.880
+to the section in which these functions
+
+00:05:36.880 --> 00:05:39.919
+are defined. So you can see this here,
+
+00:05:39.919 --> 00:05:41.759
+the function that supports C,
+
+05:41.759 --> 00:05:42.800
+the function for Haskell,
+
+00:05:42.800 --> 00:05:46.400
+the function for Javascript, etc...
+
+05:46.400 --> 00:05:47.520
+and that's it!
+
+00:05:47.520 --> 00:05:49.440
+This is a five-minute talk,
+
+00:05:49.440 --> 00:05:50.960
+so I can't say much...
+
+05:50.960 --> 00:05:52.320
+If you want more information,
+
+00:05:52.320 --> 00:05:54.800
+or if you want to see real-world examples,
+
+00:05:54.800 --> 00:05:57.280
+how I use test blocks, etc. etc.,
+
+00:05:57.280 --> 00:05:58.639
+see this page here...
+
+00:05:58.639 --> 00:06:01.253
+and I do not have time to explain this
+
+00:06:01.253 --> 00:06:02.560
+"By the way" here.
+
+06:02.560 --> 06:03.333
+So that's it! Thanks! =)
+
+06:03.333 --> 06:04.333
+[captions by Eduardo Ochs]
diff --git a/2021/captions/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.vtt b/2021/captions/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.vtt
new file mode 100644
index 00000000..7ee41c3a
--- /dev/null
+++ b/2021/captions/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.vtt
@@ -0,0 +1,634 @@
+WEBVTT
+
+00:07.600 --> 00:00:09.120
+Hi! I'm Erik Anderson,
+
+00:00:09.120 --> 00:00:10.559
+and I'll be talking about tui,
+
+00:00:10.559 --> 00:00:11.840
+a user interface framework
+
+00:11.840 --> 00:00:15.040
+that I've written in Emacs Lisp.
+
+00:15.040 --> 00:00:16.196
+First, I want to talk a bit about
+
+00:00:16.196 --> 00:00:17.296
+the problem space of
+
+00:00:17.296 --> 00:00:18.728
+user interface development,
+
+00:00:18.728 --> 00:00:20.880
+specifically, I want to quickly illustrate
+
+00:00:20.880 --> 00:00:22.320
+some of the complexities involved
+
+00:00:22.320 --> 00:00:26.480
+with UI implementation in Emacs.
+
+00:26.480 --> 00:00:27.920
+In Emacs, we have the ubiquitous
+
+00:00:27.920 --> 00:00:29.920
+buffer object type that forms the container
+
+00:00:29.920 --> 00:00:31.920
+for most content in Emacs.
+
+00:00:31.920 --> 00:00:34.079
+Most interfaces we interact with
+
+00:00:34.079 --> 00:00:36.239
+consist of character based content
+
+00:00:36.239 --> 00:00:38.239
+in a buffer that's presented
+
+00:00:38.239 --> 00:00:40.079
+in a window in frame.
+
+00:40.079 --> 00:00:41.520
+Although the underlying content
+
+00:00:41.520 --> 00:00:44.320
+may be textual, Emacs has capable APIs
+
+00:00:44.320 --> 00:00:47.680
+to present rich content.
+
+00:47.680 --> 00:00:49.200
+The pervasiveness of buffers
+
+00:00:49.200 --> 00:00:50.879
+affords us wonderful flexibility.
+
+00:00:50.879 --> 00:00:52.559
+This presentation, for instance,
+
+00:00:52.559 --> 00:00:55.520
+is running in an Emacs buffer.
+
+00:55.520 --> 00:00:57.420
+Using Emacs's built-in basic
+
+00:00:57.420 --> 00:00:59.199
+button library, we can insert
+
+00:00:59.199 --> 00:01:00.884
+an interactive button
+
+00:01:00.884 --> 00:01:01.760
+that shows a message
+
+00:01:01.760 --> 00:01:06.080
+in the minibuffer when clicked.
+
+01:06.080 --> 00:01:09.200
+What about UIs that express application state?
+
+01:09.200 --> 00:01:11.439
+Most applications don't have a static UI.
+
+01:11.439 --> 00:01:13.280
+As application state changes,
+
+00:01:13.280 --> 00:01:14.320
+the UI should change
+
+00:01:14.320 --> 00:01:18.479
+to display the desired content.
+
+01:18.479 --> 00:01:20.320
+One simplifying strategy is to simply
+
+01:20.320 --> 00:01:23.600
+re-render the entire UI upon any change.
+
+01:23.600 --> 00:01:25.680
+First erase the contents of the buffer,
+
+01:25.680 --> 00:01:27.600
+and then reinsert your UI again
+
+00:01:27.600 --> 00:01:29.040
+with desired changes,
+
+00:01:29.040 --> 00:01:33.040
+and restore things like point and region.
+
+01:33.040 --> 00:01:34.560
+Basic composition is possible
+
+00:01:34.560 --> 00:01:35.759
+with this approach.
+
+00:01:35.759 --> 00:01:37.200
+Simply insert the elements
+
+00:01:37.200 --> 00:01:39.280
+of the UI in sequence.
+
+01:39.280 --> 00:01:40.640
+Complex elements can be
+
+00:01:40.640 --> 00:01:44.320
+composed of multiple sub-elements.
+
+01:44.320 --> 00:01:45.840
+UIs can be made extensible,
+
+00:01:45.840 --> 00:01:47.040
+and expose this composition,
+
+00:01:47.040 --> 00:01:49.360
+for example, with insertion hooks
+
+00:01:49.360 --> 00:01:52.320
+like magit's status sections hook.
+
+01:52.320 --> 00:01:54.159
+This generally relies on elements
+
+00:01:54.159 --> 00:01:56.640
+being well-behaved inserting themselves,
+
+00:01:56.640 --> 00:02:00.399
+not affecting the rest of the buffer.
+
+02:00.399 --> 00:02:02.960
+If we find ourselves with complex UIs,
+
+02:02.960 --> 00:02:04.640
+large buffers, long lines,
+
+00:02:04.640 --> 00:02:06.320
+or poor rendering performance,
+
+00:02:06.320 --> 00:02:09.039
+we might consider partial UI updates
+
+00:02:09.039 --> 00:02:11.360
+rather than re-rendering completely.
+
+02:11.360 --> 00:02:12.800
+In that case, the complexity
+
+00:02:12.800 --> 00:02:15.840
+for maintaining the UI quickly increases.
+
+00:02:15.840 --> 00:02:17.360
+As accessible as buffers are,
+
+00:02:17.360 --> 00:02:19.120
+we don't have high level abstractions
+
+00:02:19.120 --> 00:02:20.879
+for managing portions of a UI
+
+00:02:20.879 --> 00:02:22.160
+rendered to a buffer.
+
+00:02:22.160 --> 00:02:23.520
+(It) is left up to the programmers
+
+00:02:23.520 --> 00:02:25.440
+to track and update UI state.
+
+00:02:25.440 --> 00:02:26.540
+This is generally done by
+
+00:02:26.540 --> 00:02:28.959
+one of two methods, reflection,
+
+00:02:28.959 --> 00:02:30.800
+searching for strings or text properties
+
+00:02:30.800 --> 00:02:34.239
+within the buffer, or tracking segments
+
+00:02:34.239 --> 00:02:36.080
+of a UI buffer manually
+
+00:02:36.080 --> 00:02:38.959
+using numeric offsets, or marker,
+
+00:02:38.959 --> 00:02:45.280
+or overlay objects.
+
+02:45.280 --> 00:02:47.280
+Here we have a basic timer component
+
+02:47.280 --> 00:02:48.720
+that shows elapsed time
+
+00:02:48.720 --> 00:02:50.319
+after it's inserted.
+
+00:02:50.319 --> 00:02:52.160
+It works, but has several problems.
+
+00:02:52.160 --> 00:02:55.519
+It doesn't restore the user's point or mark,
+
+02:55.519 --> 00:02:59.120
+so it snaps back after every render,
+
+02:59.120 --> 00:03:01.040
+after every update.
+
+03:01.040 --> 00:03:03.360
+It relies on singleton global state,
+
+00:03:03.360 --> 00:03:05.124
+so isn't designed to coexist
+
+00:03:05.124 --> 00:03:12.000
+with other instances of itself.
+
+03:12.000 --> 00:03:13.200
+It doesn't use a marker,
+
+00:03:13.200 --> 00:03:14.640
+so it's sensitive to content
+
+00:03:14.640 --> 00:03:16.239
+proceeding it, that's following it,
+
+00:03:16.239 --> 00:03:23.519
+changing in the buffer.
+
+03:23.519 --> 00:03:25.120
+The update logic doesn't even consider
+
+03:25.120 --> 00:03:26.799
+which buffer it's trying to update.
+
+00:03:26.799 --> 00:03:27.840
+If I switch buffers,
+
+00:03:27.840 --> 00:03:29.360
+it will insert into another buffer,
+
+00:03:29.360 --> 00:03:31.519
+or even the minibuffer.
+
+03:31.519 --> 00:03:33.360
+It can't remove itself, or re-render
+
+00:03:33.360 --> 00:03:34.879
+if it gets corrupted, as you see.
+
+00:03:34.879 --> 00:03:35.920
+All in all, it's not
+
+00:03:35.920 --> 00:03:38.400
+a readily composable component.
+
+03:38.400 --> 00:03:39.519
+Addressing these components
+
+00:03:39.519 --> 00:03:41.920
+within this logic further increases
+
+00:03:41.920 --> 00:03:43.936
+the implementation complexity
+
+00:03:43.936 --> 00:03:45.680
+of this component,
+
+00:03:45.680 --> 00:03:46.640
+and still this component
+
+00:03:46.640 --> 00:03:47.280
+would likely have
+
+00:03:47.280 --> 00:03:49.120
+various subtle differences
+
+03:49.120 --> 00:03:52.480
+with other components
+
+00:03:52.480 --> 00:03:58.959
+implemented by other authors.
+
+03:58.959 --> 00:04:00.319
+For those of you unfamiliar
+
+00:04:00.319 --> 00:04:02.159
+with this term Yak Shaving,
+
+00:04:02.159 --> 00:04:04.080
+that is a quite technical term
+
+00:04:04.080 --> 00:04:07.599
+for any seemingly pointless activity,
+
+00:04:07.599 --> 00:04:09.680
+which is actually necessary
+
+00:04:09.680 --> 00:04:10.879
+to solve a problem,
+
+04:10.879 --> 00:04:11.920
+which solves a problem,
+
+00:04:11.920 --> 00:04:14.799
+which, several levels of recursion later,
+
+04:14.799 --> 00:04:18.239
+solves the real problem you're working on.
+
+04:18.239 --> 00:04:19.943
+The itch that led to this project
+
+00:04:19.943 --> 00:04:21.840
+was the desire to display a dense summary
+
+00:04:21.840 --> 00:04:24.400
+of local Git repository statuses.
+
+04:24.400 --> 00:04:26.560
+Encountering various implementation
+
+04:26.560 --> 00:04:30.080
+complexity for building UI elements,
+
+04:30.080 --> 00:04:31.680
+it led to the yak shaving endeavor
+
+00:04:31.680 --> 00:04:33.680
+that produced tui.
+
+04:33.680 --> 00:04:35.440
+When I wrote the library,
+
+04:35.440 --> 00:04:36.479
+I had recently played with
+
+00:04:36.479 --> 00:04:39.360
+a popular UI framework called React,
+
+00:04:39.360 --> 00:04:41.840
+and had an interest in learning
+
+00:04:41.840 --> 00:04:44.080
+about the internal architecture of React.
+
+00:04:44.080 --> 00:04:45.680
+So, rather than implement
+
+00:04:45.680 --> 00:04:46.960
+a string caching layer
+
+00:04:46.960 --> 00:04:49.280
+on top of tabulated list mode,
+
+00:04:49.280 --> 00:04:50.360
+I was rather inclined
+
+00:04:50.360 --> 00:04:52.400
+to go down the path of implementing
+
+00:04:52.400 --> 00:04:58.960
+the React API for Emacs Lisp.
+
+04:58.960 --> 00:05:00.896
+I'll offer a brief view of
+
+00:05:00.896 --> 00:05:05.120
+the tui Emacs Lisp API.
+
+05:05.120 --> 00:05:07.360
+Inserting component content
+
+00:05:07.360 --> 00:05:08.320
+is pretty straightforward.
+
+00:05:08.320 --> 00:05:10.160
+You take a component tree
+
+00:05:10.160 --> 00:05:16.240
+and render it in an Emacs buffer.
+
+05:16.240 --> 00:05:18.639
+If any elements in that tree are updated,
+
+05:18.639 --> 00:05:21.039
+their respective content on the tree
+
+00:05:21.039 --> 00:05:26.320
+is updated automatically.
+
+05:26.320 --> 00:05:27.919
+Here's a basic re-implementation
+
+00:05:27.919 --> 00:05:29.919
+of the straw man timer from earlier,
+
+00:05:29.919 --> 00:05:32.400
+using a macro for syntactic trigger.
+
+05:32.400 --> 00:05:34.404
+You'll notice that
+
+00:05:34.404 --> 00:05:36.164
+the signature includes its own
+
+00:05:36.164 --> 00:05:44.560
+object reference, arguments, and state.
+
+05:44.560 --> 00:05:46.400
+Associating arguments in the state
+
+05:46.400 --> 00:05:51.360
+with a component instance out of the box,
+
+05:51.360 --> 00:05:54.400
+makes it easy to design reusable components,
+
+00:05:54.400 --> 00:06:06.080
+and forms the basis for partial UI updates.
+
+06:06.080 --> 00:06:07.840
+The component rendering anchors
+
+00:06:07.840 --> 00:06:09.199
+are durable, so content can be
+
+00:06:09.199 --> 00:06:11.360
+added and removed surrounding content,
+
+00:06:11.360 --> 00:06:12.479
+or even within the region
+
+00:06:12.479 --> 00:06:13.280
+of the component,
+
+00:06:13.280 --> 00:06:16.319
+and replaced when it re-renders.
+
+06:16.319 --> 00:06:17.600
+Components will also
+
+00:06:17.600 --> 00:06:20.880
+cleanly remove themselves from a buffer
+
+00:06:20.880 --> 00:06:28.400
+when instructed to.
+
+06:28.400 --> 00:06:30.160
+tui contains the core implementation
+
+00:06:30.160 --> 00:06:33.440
+of the React API, so components,
+
+06:33.440 --> 00:06:35.840
+their constituent props, state,
+
+00:06:35.840 --> 00:06:38.000
+and all of the lifecycle methods
+
+00:06:38.000 --> 00:06:39.440
+associated with them,
+
+06:39.440 --> 00:06:41.120
+as well as keys, refs,
+
+00:06:41.120 --> 00:06:43.228
+and the fundamental
+
+00:06:43.228 --> 00:06:47.520
+reconciliation algorithm of React.
+
+06:47.520 --> 00:06:52.188
+A variety of other React APIs
+
+00:06:52.188 --> 00:06:58.080
+that haven't been implemented yet.
+
+06:58.080 --> 00:07:00.080
+It contains some useful features so far,
+
+07:00.080 --> 00:07:02.639
+such as hot reloading, reflection,
+
+00:07:02.639 --> 00:07:06.164
+and various debugging tools,
+
+00:07:06.164 --> 00:07:12.639
+and some reconciliation logging.
+
+07:12.639 --> 00:07:14.880
+Lastly, I'd like to give you some quick
+
+07:14.880 --> 00:07:19.039
+visual taste of components built with tui.
+
+07:19.039 --> 00:07:20.240
+The grid view that motivated
+
+00:07:20.240 --> 00:07:21.520
+my development of this package
+
+00:07:21.520 --> 00:07:23.039
+is very similar to Magit's
+
+00:07:23.039 --> 00:07:30.720
+list repositories functionality.
+
+07:30.720 --> 00:07:36.080
+Essentially, tabulated list mode
+
+07:36.080 --> 00:07:39.440
+but portable and has a separated model
+
+00:07:39.440 --> 00:07:49.360
+and presentation layers.
+
+07:49.360 --> 00:07:51.840
+Here's a basic xkcd comic viewer
+
+00:07:51.840 --> 00:08:07.360
+showing a couple classics.
+
+08:07.360 --> 00:08:10.080
+A long-standing React tutorial is
+
+08:10.080 --> 00:08:13.280
+building a tic-tac-toe game
+
+08:13.280 --> 00:08:14.879
+as a bit of a gimmick,
+
+08:14.879 --> 00:08:17.039
+and I'm not quite satisfied with
+
+00:08:17.039 --> 00:08:25.599
+the buffering direction,
+
+00:08:25.599 --> 00:08:27.120
+but it got me thinking about
+
+00:08:27.120 --> 00:08:28.639
+layout engines with text,
+
+00:08:28.639 --> 00:08:35.120
+so it was interesting.
+
+08:35.120 --> 00:08:38.560
+And here's a small
+
+00:08:38.560 --> 00:08:46.080
+Unicode character viewer
+
+08:46.080 --> 00:08:55.279
+capable of showing a bunch of characters.
+
+08:55.279 --> 00:08:57.279
+If this piques your interest,
+
+00:08:57.279 --> 00:08:59.200
+I would encourage you to check it out.
+
+08:59.200 --> 00:09:01.440
+tui should be usable by anyone
+
+00:09:01.440 --> 00:09:04.640
+with some basic Elisp familiarity,
+
+09:04.640 --> 00:09:09.680
+no prior knowledge about JavaScript
+
+00:09:09.680 --> 00:09:12.080
+or React is necessary.
+
+09:12.080 --> 00:09:13.732
+I'd absolutely love to talk with people
+
+00:09:13.732 --> 00:09:14.880
+about the tui package,
+
+00:09:14.880 --> 00:09:17.440
+textual user interfaces in general,
+
+00:09:17.440 --> 00:09:19.040
+and really anything in Emacs.
+
+00:09:19.040 --> 00:09:20.693
+If you have any ideas, feedback,
+
+00:09:20.693 --> 00:09:21.680
+or want to contribute,
+
+00:09:21.680 --> 00:09:23.360
+please reach out.
+
+09:23.360 --> 00:09:24.360
+Thank you all for listening.
+
+00:09:24.360 --> 00:09:27.000
+[captions by bhavin192 (Bhavin Gandhi)]
diff --git a/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--chapters.vtt b/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--chapters.vtt
new file mode 100644
index 00000000..130e25e8
--- /dev/null
+++ b/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--chapters.vtt
@@ -0,0 +1,40 @@
+WEBVTT
+
+00:00:00.080 --> 00:00:31.598
+Introduction
+
+00:00:31.599 --> 00:00:57.599
+UNIX Philosophy?
+
+00:00:57.600 --> 00:01:25.438
+Enter Emacs
+
+00:01:25.439 --> 00:01:50.798
+Emacs versus the original ideas
+
+00:01:50.799 --> 00:02:17.439
+Why compare to UNIX?
+
+00:02:17.440 --> 00:02:59.649
+Emacs /does/ work with the UNIX philosophy
+
+00:02:59.650 --> 00:03:15.049
+Philosophies don't really matter in computing
+
+00:03:15.050 --> 00:04:14.382
+Android Studio
+
+00:04:14.383 --> 00:04:42.899
+Window Managers
+
+00:04:42.900 --> 00:05:09.299
+Browsers
+
+00:05:09.300 --> 00:05:34.638
+Vim
+
+00:05:34.639 --> 00:06:12.232
+Terminals
+
+00:06:12.233 --> 00:06:13.233
+Do what helps you most, not what a philosophy tells you
diff --git a/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main--chapters.vtt b/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main--chapters.vtt
new file mode 100644
index 00000000..130e25e8
--- /dev/null
+++ b/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main--chapters.vtt
@@ -0,0 +1,40 @@
+WEBVTT
+
+00:00:00.080 --> 00:00:31.598
+Introduction
+
+00:00:31.599 --> 00:00:57.599
+UNIX Philosophy?
+
+00:00:57.600 --> 00:01:25.438
+Enter Emacs
+
+00:01:25.439 --> 00:01:50.798
+Emacs versus the original ideas
+
+00:01:50.799 --> 00:02:17.439
+Why compare to UNIX?
+
+00:02:17.440 --> 00:02:59.649
+Emacs /does/ work with the UNIX philosophy
+
+00:02:59.650 --> 00:03:15.049
+Philosophies don't really matter in computing
+
+00:03:15.050 --> 00:04:14.382
+Android Studio
+
+00:04:14.383 --> 00:04:42.899
+Window Managers
+
+00:04:42.900 --> 00:05:09.299
+Browsers
+
+00:05:09.300 --> 00:05:34.638
+Vim
+
+00:05:34.639 --> 00:06:12.232
+Terminals
+
+00:06:12.233 --> 00:06:13.233
+Do what helps you most, not what a philosophy tells you
diff --git a/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt b/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt
new file mode 100644
index 00000000..7925cec4
--- /dev/null
+++ b/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt
@@ -0,0 +1,766 @@
+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.
diff --git a/2021/captions/erg.md b/2021/captions/erg.md
new file mode 100644
index 00000000..873078dd
--- /dev/null
+++ b/2021/captions/erg.md
@@ -0,0 +1,354 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Raymond Puzio: Hello, I'm Raymond Puzio." start="00:00:00.880" video="mainVideo" id=subtitle]]
+[[!template text="I first learned about Emacs and Lisp" start="00:00:02.720" video="mainVideo" id=subtitle]]
+[[!template text="at an enrichment program" start="00:00:04.799" video="mainVideo" id=subtitle]]
+[[!template text="for high school students." start="00:00:05.920" video="mainVideo" id=subtitle]]
+[[!template text="When I studied physics at the university," start="00:00:07.200" video="mainVideo" id=subtitle]]
+[[!template text="I used Emacs and Tex" start="00:00:09.120" video="mainVideo" id=subtitle]]
+[[!template text="to write mathematical documents." start="00:00:10.400" video="mainVideo" id=subtitle]]
+[[!template text="Later on, I became active" start="00:00:12.320" video="mainVideo" id=subtitle]]
+[[!template text="in Emacs and Lisp user groups where," start="00:00:13.920" video="mainVideo" id=subtitle]]
+[[!template text="among other things, I learned about" start="00:00:16.480" video="mainVideo" id=subtitle]]
+[[!template text="Org mode for reproducible research." start="00:00:18.160" video="mainVideo" id=subtitle]]
+[[!template text="Nowadays, I am working on" start="00:00:20.400" video="mainVideo" id=subtitle]]
+[[!template text="synthesizing Emacs and other programs" start="00:00:21.680" video="mainVideo" id=subtitle]]
+[[!template text="into an end-to-end platform" start="00:00:24.080" video="mainVideo" id=subtitle]]
+[[!template text="for scientific research and collaboration." start="00:00:25.599" video="mainVideo" id=subtitle]]
+[[!template text="Joe Corneli: I'm Joe Corneli." start="00:00:30.560" video="mainVideo" id=subtitle]]
+[[!template text="I also started using Emacs in high school" start="00:00:31.519" video="mainVideo" id=subtitle]]
+[[!template text="in a course on C programming," start="00:00:33.920" video="mainVideo" id=subtitle]]
+[[!template text="and now I'm technically" start="00:00:35.440" video="mainVideo" id=subtitle]]
+[[!template text="a computer scientist." start="00:00:36.800" video="mainVideo" id=subtitle]]
+[[!template text="My research background" start="00:00:38.239" video="mainVideo" id=subtitle]]
+[[!template text="is in mathematics and online communities." start="00:00:39.280" video="mainVideo" id=subtitle]]
+[[!template text="Noorah Alhasan: Hi, I'm Noorah Alhasan." start="00:00:43.120" video="mainVideo" id=subtitle]]
+[[!template text="I'm a member of the ERG group" start="00:00:45.039" video="mainVideo" id=subtitle]]
+[[!template text="and a PhD student at UT Austin" start="00:00:46.719" video="mainVideo" id=subtitle]]
+[[!template text="studying climate policy." start="00:00:49.600" video="mainVideo" id=subtitle]]
+[[!template text="So for this talk, the four of us" start="00:00:51.760" video="mainVideo" id=subtitle]]
+[[!template text="met at EmacsConf 2020 last year" start="00:00:54.239" video="mainVideo" id=subtitle]]
+[[!template text="with a common interest" start="00:00:56.640" video="mainVideo" id=subtitle]]
+[[!template text="in Emacs and research." start="00:00:57.760" video="mainVideo" id=subtitle]]
+[[!template text="we've met almost every week since then" start="00:00:59.520" video="mainVideo" id=subtitle]]
+[[!template text="because we wanted to" start="00:01:01.760" video="mainVideo" id=subtitle]]
+[[!template text="keep the conversation going." start="00:01:02.640" video="mainVideo" id=subtitle]]
+[[!template text="In this short talk," start="00:01:04.479" video="mainVideo" id=subtitle]]
+[[!template text="we share information" start="00:01:05.519" video="mainVideo" id=subtitle]]
+[[!template text="about the methods we use." start="00:01:06.560" video="mainVideo" id=subtitle]]
+[[!template text="Here's the outline of our talk." start="00:01:08.240" video="mainVideo" id=subtitle]]
+[[!template text="First, we'll tell you" start="00:01:09.680" video="mainVideo" id=subtitle]]
+[[!template text="about the technologies we use" start="00:01:10.560" video="mainVideo" id=subtitle]]
+[[!template text="and show a short demo video" start="00:01:12.320" video="mainVideo" id=subtitle]]
+[[!template text="from one of the meetings." start="00:01:13.840" video="mainVideo" id=subtitle]]
+[[!template text="We'll then focus on" start="00:01:15.360" video="mainVideo" id=subtitle]]
+[[!template text="the time and content structuring methods" start="00:01:16.320" video="mainVideo" id=subtitle]]
+[[!template text="we use in our live sessions." start="00:01:18.880" video="mainVideo" id=subtitle]]
+[[!template text="Finally, we'll talk about" start="00:01:21.040" video="mainVideo" id=subtitle]]
+[[!template text="what came out of all this work." start="00:01:22.240" video="mainVideo" id=subtitle]]
+[[!template text="For example, we wrote a paper for the" start="00:01:24.320" video="mainVideo" id=subtitle]]
+[[!template text="Pattern Languages of Programs conference," start="00:01:28.159" video="mainVideo" id=subtitle]]
+[[!template text="and we designed a workshop" start="00:01:30.400" video="mainVideo" id=subtitle]]
+[[!template text="using the knowledge we created together." start="00:01:31.759" video="mainVideo" id=subtitle]]
+[[!template text="Very practically," start="00:01:33.920" video="mainVideo" id=subtitle]]
+[[!template text="this has improved the quality" start="00:01:35.600" video="mainVideo" id=subtitle]]
+[[!template text="of our own collaboration" start="00:01:37.119" video="mainVideo" id=subtitle]]
+[[!template text="and we have some lessons" start="00:01:38.640" video="mainVideo" id=subtitle]]
+[[!template text="about how you can create" start="00:01:39.680" video="mainVideo" id=subtitle]]
+[[!template text="a research community similar to ours." start="00:01:41.360" video="mainVideo" id=subtitle]]
+[[!template text="Joe: You'll have noticed that we all have" start="00:01:46.000" video="mainVideo" id=subtitle]]
+[[!template text="different research backgrounds" start="00:01:48.399" video="mainVideo" id=subtitle]]
+[[!template text="and we do think that transdisciplinarity" start="00:01:50.159" video="mainVideo" id=subtitle]]
+[[!template text="is important for solving big problems." start="00:01:52.640" video="mainVideo" id=subtitle]]
+[[!template text="However, if you have people" start="00:01:54.960" video="mainVideo" id=subtitle]]
+[[!template text="from different research backgrounds" start="00:01:56.719" video="mainVideo" id=subtitle]]
+[[!template text="working together," start="00:01:58.000" video="mainVideo" id=subtitle]]
+[[!template text="they need some scaffolding," start="00:01:58.560" video="mainVideo" id=subtitle]]
+[[!template text="both in terms of tools and methods," start="00:01:59.680" video="mainVideo" id=subtitle]]
+[[!template text="to have good conversations." start="00:02:01.360" video="mainVideo" id=subtitle]]
+[[!template text="And of course, as Emacs users," start="00:02:02.880" video="mainVideo" id=subtitle]]
+[[!template text="we wanted to have Emacs" start="00:02:04.320" video="mainVideo" id=subtitle]]
+[[!template text="at the center of that." start="00:02:05.439" video="mainVideo" id=subtitle]]
+[[!template text="Being in a meeting," start="00:02:07.360" video="mainVideo" id=subtitle]]
+[[!template text="taking real-time notes" start="00:02:08.640" video="mainVideo" id=subtitle]]
+[[!template text="collaboratively with Emacs" start="00:02:10.720" video="mainVideo" id=subtitle]]
+[[!template text="realizes a dream that some of us" start="00:02:11.920" video="mainVideo" id=subtitle]]
+[[!template text="have been entertaining" start="00:02:13.440" video="mainVideo" id=subtitle]]
+[[!template text="(and experimenting with)" start="00:02:14.480" video="mainVideo" id=subtitle]]
+[[!template text="for a while. The package crdt.el" start="00:02:15.520" video="mainVideo" id=subtitle]]
+[[!template text="by Qiantan Hong makes this easy." start="00:02:18.800" video="mainVideo" id=subtitle]]
+[[!template text="We take notes in our meetings" start="00:02:21.440" video="mainVideo" id=subtitle]]
+[[!template text="using Org Mode." start="00:02:22.959" video="mainVideo" id=subtitle]]
+[[!template text="Since we've seen this before" start="00:02:24.239" video="mainVideo" id=subtitle]]
+[[!template text="in talks on reproducible research," start="00:02:25.520" video="mainVideo" id=subtitle]]
+[[!template text="and since Leo is the maintainer of org-roam," start="00:02:27.040" video="mainVideo" id=subtitle]]
+[[!template text="it was a natural choice for us." start="00:02:29.920" video="mainVideo" id=subtitle]]
+[[!template text="It allows us to" start="00:02:31.680" video="mainVideo" id=subtitle]]
+[[!template text="put our notes online using git" start="00:02:32.400" video="mainVideo" id=subtitle]]
+[[!template text="and the static state generator Firn." start="00:02:34.080" video="mainVideo" id=subtitle]]
+[[!template text="And lastly, of course, we need" start="00:02:36.080" video="mainVideo" id=subtitle]]
+[[!template text="a real-time meeting tool." start="00:02:37.599" video="mainVideo" id=subtitle]]
+[[!template text="For that purpose," start="00:02:38.720" video="mainVideo" id=subtitle]]
+[[!template text="we use BBB in our weekly sessions" start="00:02:39.519" video="mainVideo" id=subtitle]]
+[[!template text="(in fact, we use the same server" start="00:02:41.920" video="mainVideo" id=subtitle]]
+[[!template text="that's used by EmacsConf," start="00:02:43.519" video="mainVideo" id=subtitle]]
+[[!template text="thanks again to Leo)." start="00:02:44.879" video="mainVideo" id=subtitle]]
+[[!template text="All of these tools are" start="00:02:46.720" video="mainVideo" id=subtitle]]
+[[!template text="free/libre/open source." start="00:02:48.000" video="mainVideo" id=subtitle]]
+[[!template text="However, BBB does have" start="00:02:49.380" video="mainVideo" id=subtitle]]
+[[!template text="some intensive hardware requirements." start="00:02:50.720" video="mainVideo" id=subtitle]]
+[[!template text="Next up, here's a" start="00:02:53.680" video="mainVideo" id=subtitle]]
+[[!template text="short pre-recorded snippet" start="00:02:54.800" video="mainVideo" id=subtitle]]
+[[!template text="from one of our recent meetings" start="00:02:56.239" video="mainVideo" id=subtitle]]
+[[!template text="so you can get a sense of how they go." start="00:02:57.680" video="mainVideo" id=subtitle]]
+[[!template text="Demo - Leo Vivier: Are we okay" start="00:03:01.840" video="mainVideo" id=subtitle]]
+[[!template text="pushing the demo to the end?" start="00:03:02.640" video="mainVideo" id=subtitle]]
+[[!template text="That kind of presupposes" start="00:03:04.159" video="mainVideo" id=subtitle]]
+[[!template text="a different structure" start="00:03:05.440" video="mainVideo" id=subtitle]]
+[[!template text="that you would usually have" start="00:03:07.120" video="mainVideo" id=subtitle]]
+[[!template text="in a presentation." start="00:03:08.080" video="mainVideo" id=subtitle]]
+[[!template text="Generally you have..." start="00:03:08.800" video="mainVideo" id=subtitle]]
+[[!template text="You introduce the demo, you do the demo," start="00:03:09.760" video="mainVideo" id=subtitle]]
+[[!template text="and then you do the conclusions," start="00:03:12.800" video="mainVideo" id=subtitle]]
+[[!template text="or what was good about the demo." start="00:03:14.720" video="mainVideo" id=subtitle]]
+[[!template text="Does that make sense to everyone?" start="00:03:16.560" video="mainVideo" id=subtitle]]
+[[!template text="Ray: Let's see." start="00:03:18.159" video="mainVideo" id=subtitle]]
+[[!template text="When you usually do that," start="00:03:18.560" video="mainVideo" id=subtitle]]
+[[!template text="that's because whatever you're demonstrating" start="00:03:19.599" video="mainVideo" id=subtitle]]
+[[!template text="is the main point of your talk," start="00:03:21.760" video="mainVideo" id=subtitle]]
+[[!template text="so if this was a talk about action reviews," start="00:03:23.840" video="mainVideo" id=subtitle]]
+[[!template text="that would make sense, but isn't it not ERG?" start="00:03:25.840" video="mainVideo" id=subtitle]]
+[[!template text="Leo: But it's because we are telling..." start="00:03:29.760" video="mainVideo" id=subtitle]]
+[[!template text="For me, I think it's a compound element." start="00:03:32.319" video="mainVideo" id=subtitle]]
+[[!template text="Yes, we are demonstrating the power," start="00:03:34.400" video="mainVideo" id=subtitle]]
+[[!template text="but we are also demonstrating" start="00:03:36.640" video="mainVideo" id=subtitle]]
+[[!template text="how we're working together by..." start="00:03:37.840" video="mainVideo" id=subtitle]]
+[[!template text="Yes, we might have introduced CRDT before" start="00:03:39.680" video="mainVideo" id=subtitle]]
+[[!template text="in the presentation itself," start="00:03:42.000" video="mainVideo" id=subtitle]]
+[[!template text="but if we need to be doing the power," start="00:03:43.840" video="mainVideo" id=subtitle]]
+[[!template text="and also showing tools like CRDT," start="00:03:46.959" video="mainVideo" id=subtitle]]
+[[!template text="obviously, we're not... probably not going" start="00:03:49.360" video="mainVideo" id=subtitle]]
+[[!template text="to be talking about... oh by the way," start="00:03:50.879" video="mainVideo" id=subtitle]]
+[[!template text="here we are using CRDT" start="00:03:52.959" video="mainVideo" id=subtitle]]
+[[!template text="and stuff like this." start="00:03:54.239" video="mainVideo" id=subtitle]]
+[[!template text="It feels like cramming a lot of stuff" start="00:03:54.879" video="mainVideo" id=subtitle]]
+[[!template text="into this demo at the end." start="00:03:57.280" video="mainVideo" id=subtitle]]
+[[!template text="Joe: So I think demo to me" start="00:03:58.720" video="mainVideo" id=subtitle]]
+[[!template text="is less about demoing one of the methods," start="00:04:00.159" video="mainVideo" id=subtitle]]
+[[!template text="because then people will get" start="00:04:02.159" video="mainVideo" id=subtitle]]
+[[!template text="a bit hung up on that." start="00:04:02.879" video="mainVideo" id=subtitle]]
+[[!template text="I think the demo..." start="00:04:05.439" video="mainVideo" id=subtitle]]
+[[!template text="You know, to be honest," start="00:04:07.360" video="mainVideo" id=subtitle]]
+[[!template text="here's another thing." start="00:04:08.080" video="mainVideo" id=subtitle]]
+[[!template text="What we could do--" start="00:04:09.200" video="mainVideo" id=subtitle]]
+[[!template text="this would be very clever--" start="00:04:09.920" video="mainVideo" id=subtitle]]
+[[!template text="we could make this the demo," start="00:04:10.959" video="mainVideo" id=subtitle]]
+[[!template text="what we're doing right now," start="00:04:12.400" video="mainVideo" id=subtitle]]
+[[!template text="writing this talk is the demo," start="00:04:13.920" video="mainVideo" id=subtitle]]
+[[!template text="and just go back into the video" start="00:04:15.519" video="mainVideo" id=subtitle]]
+[[!template text="and just get out a two-minute section," start="00:04:18.560" video="mainVideo" id=subtitle]]
+[[!template text="so we say, look we tried to write this talk," start="00:04:20.160" video="mainVideo" id=subtitle]]
+[[!template text="we went around, had a discussion," start="00:04:22.479" video="mainVideo" id=subtitle]]
+[[!template text="we had these things and then we just take..." start="00:04:23.680" video="mainVideo" id=subtitle]]
+[[!template text="We're going to pick two minutes" start="00:04:25.040" video="mainVideo" id=subtitle]]
+[[!template text="out of this video" start="00:04:26.240" video="mainVideo" id=subtitle]]
+[[!template text="and show you that" start="00:04:26.880" video="mainVideo" id=subtitle]]
+[[!template text="as a demo of how we actually work" start="00:04:27.440" video="mainVideo" id=subtitle]]
+[[!template text="and then we'll go back to the talk." start="00:04:29.280" video="mainVideo" id=subtitle]]
+[[!template text="I mean, it'd be very funny," start="00:04:30.320" video="mainVideo" id=subtitle]]
+[[!template text="and then we've already done the demo." start="00:04:31.199" video="mainVideo" id=subtitle]]
+[[!template text="It's just, like... uh yeah," start="00:04:32.880" video="mainVideo" id=subtitle]]
+[[!template text="then we're good to go." start="00:04:34.560" video="mainVideo" id=subtitle]]
+[[!template text="And it's got neural lines on the floor." start="00:04:35.280" video="mainVideo" id=subtitle]]
+[[!template text="It's like a perfect writer's room." start="00:04:37.120" video="mainVideo" id=subtitle]]
+[[!template text="It's a total amazing writer's room scenario," start="00:04:39.199" video="mainVideo" id=subtitle]]
+[[!template text="specifically because she's lying on her back" start="00:04:41.199" video="mainVideo" id=subtitle]]
+[[!template text="on the floor. Anyway. I mean," start="00:04:43.120" video="mainVideo" id=subtitle]]
+[[!template text="I think this would be fine." start="00:04:45.360" video="mainVideo" id=subtitle]]
+[[!template text="Leo: I think I particularly like the idea" start="00:04:47.680" video="mainVideo" id=subtitle]]
+[[!template text="of taking the snippet," start="00:04:49.520" video="mainVideo" id=subtitle]]
+[[!template text="the two minutes before the realization" start="00:04:52.080" video="mainVideo" id=subtitle]]
+[[!template text="that we could be using this as the demo," start="00:04:54.000" video="mainVideo" id=subtitle]]
+[[!template text="and then seeing the... well my face light up" start="00:04:56.400" video="mainVideo" id=subtitle]]
+[[!template text="because it feels like a good idea," start="00:05:00.240" video="mainVideo" id=subtitle]]
+[[!template text="and Joe gets excited about this." start="00:05:01.680" video="mainVideo" id=subtitle]]
+[[!template text="I think this could be a good demo," start="00:05:03.360" video="mainVideo" id=subtitle]]
+[[!template text="and I think this would be" start="00:05:04.720" video="mainVideo" id=subtitle]]
+[[!template text="a very genuine demonstration" start="00:05:07.120" video="mainVideo" id=subtitle]]
+[[!template text="of how we work here" start="00:05:08.479" video="mainVideo" id=subtitle]]
+[[!template text="and how we get excited about" start="00:05:09.360" video="mainVideo" id=subtitle]]
+[[!template text="some of our ideas sometimes." start="00:05:10.400" video="mainVideo" id=subtitle]]
+[[!template text="Noorah: In the demo," start="00:05:13.600" video="mainVideo" id=subtitle]]
+[[!template text="you saw a very improvised" start="00:05:14.639" video="mainVideo" id=subtitle]]
+[[!template text="free-flowing conversation." start="00:05:16.240" video="mainVideo" id=subtitle]]
+[[!template text="In order to have this kind of conversation" start="00:05:18.000" video="mainVideo" id=subtitle]]
+[[!template text="and still get things done," start="00:05:19.840" video="mainVideo" id=subtitle]]
+[[!template text="we need a pretty rigorous structure in place" start="00:05:20.960" video="mainVideo" id=subtitle]]
+[[!template text="at the bigger scale of the meetings." start="00:05:23.520" video="mainVideo" id=subtitle]]
+[[!template text="This involves both" start="00:05:26.000" video="mainVideo" id=subtitle]]
+[[!template text="a timetable for the meetings" start="00:05:27.120" video="mainVideo" id=subtitle]]
+[[!template text="and some review and planning processes." start="00:05:31.280" video="mainVideo" id=subtitle]]
+[[!template text="Joe: Just to say a little bit more" start="00:05:35.120" video="mainVideo" id=subtitle]]
+[[!template text="about the timetable, if you could go back," start="00:05:36.320" video="mainVideo" id=subtitle]]
+[[!template text="the meetings are generally following" start="00:05:40.160" video="mainVideo" id=subtitle]]
+[[!template text="a structure as we have up on the screen" start="00:05:42.320" video="mainVideo" id=subtitle]]
+[[!template text="of informal check-ins" start="00:05:45.199" video="mainVideo" id=subtitle]]
+[[!template text="followed by any announcements," start="00:05:46.479" video="mainVideo" id=subtitle]]
+[[!template text="and then two topics, at most two topics," start="00:05:48.400" video="mainVideo" id=subtitle]]
+[[!template text="with a break in the middle." start="00:05:50.960" video="mainVideo" id=subtitle]]
+[[!template text="The whole thing takes about two hours," start="00:05:52.560" video="mainVideo" id=subtitle]]
+[[!template text="and we meet weekly." start="00:05:54.800" video="mainVideo" id=subtitle]]
+[[!template text="The consistency of these meetings" start="00:05:56.400" video="mainVideo" id=subtitle]]
+[[!template text="is really important" start="00:05:58.160" video="mainVideo" id=subtitle]]
+[[!template text="for how the group works." start="00:05:58.800" video="mainVideo" id=subtitle]]
+[[!template text="Ray: At at the end of every meeting," start="00:06:00.720" video="mainVideo" id=subtitle]]
+[[!template text="we ask and answer" start="00:06:02.560" video="mainVideo" id=subtitle]]
+[[!template text="a series of questions" start="00:06:03.600" video="mainVideo" id=subtitle]]
+[[!template text="adapted from the ‘After Action Review’" start="00:06:04.800" video="mainVideo" id=subtitle]]
+[[!template text="developed by the United States Army" start="00:06:07.120" video="mainVideo" id=subtitle]]
+[[!template text="in their training programs," start="00:06:08.880" video="mainVideo" id=subtitle]]
+[[!template text="and also used in some business contexts." start="00:06:10.800" video="mainVideo" id=subtitle]]
+[[!template text="The adaptation we use here" start="00:06:13.840" video="mainVideo" id=subtitle]]
+[[!template text="came out of the Peeragogy project," start="00:06:15.759" video="mainVideo" id=subtitle]]
+[[!template text="which some of us have been involved with" start="00:06:17.440" video="mainVideo" id=subtitle]]
+[[!template text="since 2012, and it's designed to be" start="00:06:19.600" video="mainVideo" id=subtitle]]
+[[!template text="less hierarchical than the army's review." start="00:06:22.160" video="mainVideo" id=subtitle]]
+[[!template text="By writing down and sharing these reviews," start="00:06:24.560" video="mainVideo" id=subtitle]]
+[[!template text="we create a resource" start="00:06:26.960" video="mainVideo" id=subtitle]]
+[[!template text="for further peer learning" start="00:06:28.240" video="mainVideo" id=subtitle]]
+[[!template text="later down the line." start="00:06:29.600" video="mainVideo" id=subtitle]]
+[[!template text="Joe: So, specifically," start="00:06:32.240" video="mainVideo" id=subtitle]]
+[[!template text="every six weeks or so," start="00:06:33.280" video="mainVideo" id=subtitle]]
+[[!template text="we look at the transcripts" start="00:06:34.560" video="mainVideo" id=subtitle]]
+[[!template text="from the previous action reviews" start="00:06:35.840" video="mainVideo" id=subtitle]]
+[[!template text="using a four-layered framework" start="00:06:37.360" video="mainVideo" id=subtitle]]
+[[!template text="that comes from future studies," start="00:06:39.120" video="mainVideo" id=subtitle]]
+[[!template text="and we use this to better understand" start="00:06:41.199" video="mainVideo" id=subtitle]]
+[[!template text="the underlying themes" start="00:06:42.560" video="mainVideo" id=subtitle]]
+[[!template text="that surface in the reviews" start="00:06:43.759" video="mainVideo" id=subtitle]]
+[[!template text="and to develop the deeper motivations" start="00:06:44.880" video="mainVideo" id=subtitle]]
+[[!template text="for ongoing work together." start="00:06:46.479" video="mainVideo" id=subtitle]]
+[[!template text="This helps us get a big-picture sense" start="00:06:48.160" video="mainVideo" id=subtitle]]
+[[!template text="of where we're going," start="00:06:49.680" video="mainVideo" id=subtitle]]
+[[!template text="and we can keep that up to date" start="00:06:50.720" video="mainVideo" id=subtitle]]
+[[!template text="at a slower pace" start="00:06:51.840" video="mainVideo" id=subtitle]]
+[[!template text="than we do in the weekly meetings." start="00:06:52.720" video="mainVideo" id=subtitle]]
+[[!template text="This also helps us tie our work" start="00:06:54.479" video="mainVideo" id=subtitle]]
+[[!template text="into a broader context" start="00:06:55.759" video="mainVideo" id=subtitle]]
+[[!template text="and gives us some hope" start="00:06:56.880" video="mainVideo" id=subtitle]]
+[[!template text="that over time we can contribute to" start="00:06:57.759" video="mainVideo" id=subtitle]]
+[[!template text="solving big problems." start="00:06:59.919" video="mainVideo" id=subtitle]]
+[[!template text="Ray: Going back" start="00:07:02.319" video="mainVideo" id=subtitle]]
+[[!template text="to solving larger problems." start="00:07:02.880" video="mainVideo" id=subtitle]]
+[[!template text="When we carry out the analysis," start="00:07:04.880" video="mainVideo" id=subtitle]]
+[[!template text="we don't just think about what happened" start="00:07:06.560" video="mainVideo" id=subtitle]]
+[[!template text="at previous meetings," start="00:07:08.400" video="mainVideo" id=subtitle]]
+[[!template text="but we also take a longer view," start="00:07:09.440" video="mainVideo" id=subtitle]]
+[[!template text="thinking about things such as" start="00:07:11.520" video="mainVideo" id=subtitle]]
+[[!template text="structuring a community of collaborators," start="00:07:12.960" video="mainVideo" id=subtitle]]
+[[!template text="or building platforms" start="00:07:15.680" video="mainVideo" id=subtitle]]
+[[!template text="for scientific research." start="00:07:16.960" video="mainVideo" id=subtitle]]
+[[!template text="We want to think about how" start="00:07:18.720" video="mainVideo" id=subtitle]]
+[[!template text="what we have been doing" start="00:07:20.080" video="mainVideo" id=subtitle]]
+[[!template text="fits into broader historical patterns" start="00:07:21.120" video="mainVideo" id=subtitle]]
+[[!template text="and trends." start="00:07:23.599" video="mainVideo" id=subtitle]]
+[[!template text="In the past, the pattern is a" start="00:07:24.720" video="mainVideo" id=subtitle]]
+[[!template text="historical pattern;" start="00:07:27.120" video="mainVideo" id=subtitle]]
+[[!template text="in the present, we contextualize" start="00:07:28.240" video="mainVideo" id=subtitle]]
+[[!template text="what we learned about designed futures;" start="00:07:30.000" video="mainVideo" id=subtitle]]
+[[!template text="towards the future, we use these patterns" start="00:07:32.400" video="mainVideo" id=subtitle]]
+[[!template text="to augment our big-picture analysis" start="00:07:34.639" video="mainVideo" id=subtitle]]
+[[!template text="with the next steps." start="00:07:37.440" video="mainVideo" id=subtitle]]
+[[!template text="This helps keep us on track." start="00:07:38.800" video="mainVideo" id=subtitle]]
+[[!template text="Noorah: Okay. So we have been working on" start="00:07:42.880" video="mainVideo" id=subtitle]]
+[[!template text="several projects: a paper" start="00:07:44.720" video="mainVideo" id=subtitle]]
+[[!template text="for the pattern conference" start="00:07:46.160" video="mainVideo" id=subtitle]]
+[[!template text="mentioned earlier," start="00:07:47.280" video="mainVideo" id=subtitle]]
+[[!template text="a workshop, and a user study," start="00:07:48.240" video="mainVideo" id=subtitle]]
+[[!template text="and we'll say a little bit more" start="00:07:50.080" video="mainVideo" id=subtitle]]
+[[!template text="about these." start="00:07:51.280" video="mainVideo" id=subtitle]]
+[[!template text="We co-authored a paper" start="00:07:53.599" video="mainVideo" id=subtitle]]
+[[!template text="that touches on all of the topics" start="00:07:56.319" video="mainVideo" id=subtitle]]
+[[!template text="we mentioned earlier" start="00:07:57.919" video="mainVideo" id=subtitle]]
+[[!template text="and presented it at the leading conference" start="00:07:58.960" video="mainVideo" id=subtitle]]
+[[!template text="on Design Patterns" start="00:08:01.120" video="mainVideo" id=subtitle]]
+[[!template text="for programs and programming." start="00:08:02.080" video="mainVideo" id=subtitle]]
+[[!template text="One of the case studies in the paper" start="00:08:04.000" video="mainVideo" id=subtitle]]
+[[!template text="sums up the way we work in ERG." start="00:08:09.520" video="mainVideo" id=subtitle]]
+[[!template text="The paper puts ERG in context" start="00:08:12.960" video="mainVideo" id=subtitle]]
+[[!template text="with other peer learning communities," start="00:08:16.000" video="mainVideo" id=subtitle]]
+[[!template text="and we aim to describe" start="00:08:17.520" video="mainVideo" id=subtitle]]
+[[!template text="our way of working" start="00:08:18.960" video="mainVideo" id=subtitle]]
+[[!template text="in a way that others would find accessible" start="00:08:20.160" video="mainVideo" id=subtitle]]
+[[!template text="and potentially useful." start="00:08:22.720" video="mainVideo" id=subtitle]]
+[[!template text="We are also developing" start="00:08:24.560" video="mainVideo" id=subtitle]]
+[[!template text="an interactive workshop" start="00:08:25.680" video="mainVideo" id=subtitle]]
+[[!template text="based on the ideas in the paper," start="00:08:27.039" video="mainVideo" id=subtitle]]
+[[!template text="which we piloted at the PLoP conference." start="00:08:28.800" video="mainVideo" id=subtitle]]
+[[!template text="Our intent with the workshop" start="00:08:31.039" video="mainVideo" id=subtitle]]
+[[!template text="was to build a method" start="00:08:32.479" video="mainVideo" id=subtitle]]
+[[!template text="for rapid problem solving," start="00:08:34.800" video="mainVideo" id=subtitle]]
+[[!template text="which could, at least in principle," start="00:08:36.240" video="mainVideo" id=subtitle]]
+[[!template text="expand beyond the workshop setting" start="00:08:37.839" video="mainVideo" id=subtitle]]
+[[!template text="to distributed networks." start="00:08:40.159" video="mainVideo" id=subtitle]]
+[[!template text="The workshop involves made-up roles," start="00:08:41.839" video="mainVideo" id=subtitle]]
+[[!template text="like a kaiju communicator" start="00:08:44.080" video="mainVideo" id=subtitle]]
+[[!template text="who helps understand problems" start="00:08:45.440" video="mainVideo" id=subtitle]]
+[[!template text="as they arise." start="00:08:46.800" video="mainVideo" id=subtitle]]
+[[!template text="We also realize that it has given us" start="00:08:47.839" video="mainVideo" id=subtitle]]
+[[!template text="a lot of wealth for thinking about" start="00:08:49.760" video="mainVideo" id=subtitle]]
+[[!template text="the roles we take on in our weekly meetings." start="00:08:51.279" video="mainVideo" id=subtitle]]
+[[!template text="Ray: Free software may be lacking" start="00:08:57.519" video="mainVideo" id=subtitle]]
+[[!template text="on ‘user’ aspects." start="00:08:59.920" video="mainVideo" id=subtitle]]
+[[!template text="People too often program" start="00:09:01.200" video="mainVideo" id=subtitle]]
+[[!template text="to scratch their own itches," start="00:09:02.720" video="mainVideo" id=subtitle]]
+[[!template text="and assume others will do the same." start="00:09:04.320" video="mainVideo" id=subtitle]]
+[[!template text="To deal with this, we did several things." start="00:09:06.720" video="mainVideo" id=subtitle]]
+[[!template text="We looked at user experience" start="00:09:09.360" video="mainVideo" id=subtitle]]
+[[!template text="and development together" start="00:09:11.040" video="mainVideo" id=subtitle]]
+[[!template text="to see how the process went" start="00:09:12.160" video="mainVideo" id=subtitle]]
+[[!template text="and where the gaps might be." start="00:09:13.760" video="mainVideo" id=subtitle]]
+[[!template text="We compared Emacs with other platforms," start="00:09:15.440" video="mainVideo" id=subtitle]]
+[[!template text="not just a technical level," start="00:09:17.600" video="mainVideo" id=subtitle]]
+[[!template text="but also at the user experience level." start="00:09:19.279" video="mainVideo" id=subtitle]]
+[[!template text="We had guest sessions," start="00:09:21.440" video="mainVideo" id=subtitle]]
+[[!template text="where we've started to gather user stories." start="00:09:22.640" video="mainVideo" id=subtitle]]
+[[!template text="Building on these conversations," start="00:09:25.440" video="mainVideo" id=subtitle]]
+[[!template text="we would like to do more research" start="00:09:26.880" video="mainVideo" id=subtitle]]
+[[!template text="in all these topics," start="00:09:28.480" video="mainVideo" id=subtitle]]
+[[!template text="and eventually be able to" start="00:09:29.839" video="mainVideo" id=subtitle]]
+[[!template text="say something like:" start="00:09:30.959" video="mainVideo" id=subtitle]]
+[[!template text="‘If you are someone who does X," start="00:09:32.160" video="mainVideo" id=subtitle]]
+[[!template text="these are the packages" start="00:09:34.160" video="mainVideo" id=subtitle]]
+[[!template text="that would work for you.’" start="00:09:35.279" video="mainVideo" id=subtitle]]
+[[!template text="Joe: Putting these ideas into practice," start="00:09:38.480" video="mainVideo" id=subtitle]]
+[[!template text="our PLoP paper and the plans it contains" start="00:09:40.640" video="mainVideo" id=subtitle]]
+[[!template text="become a /template/" start="00:09:42.880" video="mainVideo" id=subtitle]]
+[[!template text="for some of the other things" start="00:09:43.680" video="mainVideo" id=subtitle]]
+[[!template text="we want to work on" start="00:09:44.720" video="mainVideo" id=subtitle]]
+[[!template text="as we go forward." start="00:09:45.600" video="mainVideo" id=subtitle]]
+[[!template text="If we imagine things in 2-3 years," start="00:09:46.880" video="mainVideo" id=subtitle]]
+[[!template text="what would it actually take" start="00:09:49.120" video="mainVideo" id=subtitle]]
+[[!template text="to realize the vision from that paper?" start="00:09:49.920" video="mainVideo" id=subtitle]]
+[[!template text="Thinking about the future:" start="00:09:52.240" video="mainVideo" id=subtitle]]
+[[!template text="this is one of the main reasons why" start="00:09:53.200" video="mainVideo" id=subtitle]]
+[[!template text="we want to share these ideas" start="00:09:54.480" video="mainVideo" id=subtitle]]
+[[!template text="and invite other people" start="00:09:55.839" video="mainVideo" id=subtitle]]
+[[!template text="into this way of working." start="00:09:56.800" video="mainVideo" id=subtitle]]
+[[!template text="There's no way we can actually achieve" start="00:09:58.160" video="mainVideo" id=subtitle]]
+[[!template text="everything in our vision" start="00:09:59.600" video="mainVideo" id=subtitle]]
+[[!template text="if we work all by ourselves." start="00:10:00.560" video="mainVideo" id=subtitle]]
+[[!template text="What we've been focusing on" start="00:10:02.160" video="mainVideo" id=subtitle]]
+[[!template text="in Season Zero of the Emacs Research Group" start="00:10:03.200" video="mainVideo" id=subtitle]]
+[[!template text="is methods that people can use" start="00:10:05.120" video="mainVideo" id=subtitle]]
+[[!template text="to organize their own research groups." start="00:10:06.640" video="mainVideo" id=subtitle]]
+[[!template text="We decided to share this talk" start="00:10:08.560" video="mainVideo" id=subtitle]]
+[[!template text="so that folks can learn from our community." start="00:10:10.000" video="mainVideo" id=subtitle]]
+[[!template text="Our goal has been to share" start="00:10:12.079" video="mainVideo" id=subtitle]]
+[[!template text="how we've been doing things," start="00:10:13.040" video="mainVideo" id=subtitle]]
+[[!template text="and we hope this information" start="00:10:14.000" video="mainVideo" id=subtitle]]
+[[!template text="is useful for you" start="00:10:14.959" video="mainVideo" id=subtitle]]
+[[!template text="in your own communities and collaborations." start="00:10:16.079" video="mainVideo" id=subtitle]]
+[[!template text="Thank you." start="00:10:18.800" video="mainVideo" id=subtitle]]
+[[!template text="captions by speakers and sachac" start="00:10:19.262" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/exec.md b/2021/captions/exec.md
new file mode 100644
index 00000000..0363771c
--- /dev/null
+++ b/2021/captions/exec.md
@@ -0,0 +1,186 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello all! Welcome to EmacsConf 2021." start="00:00:00.320" video="mainVideo" id=subtitle]]
+[[!template text="I'm Tom Gillespie." start="00:00:03.679" video="mainVideo" id=subtitle]]
+[[!template text="Thank you to the organizers for" start="00:00:05.040" video="mainVideo" id=subtitle]]
+[[!template text="all your hard work," start="00:00:06.799" video="mainVideo" id=subtitle]]
+[[!template text="and for inviting me to" start="00:00:07.680" video="mainVideo" id=subtitle]]
+[[!template text="give this short talk on" start="00:00:08.639" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Org as an executable format&quot;." start="00:00:10.021" video="mainVideo" id=subtitle]]
+[[!template text="The links to the talk page," start="00:00:12.240" video="mainVideo" id=subtitle]]
+[[!template text="the GitHub page for the project," start="00:00:13.840" video="mainVideo" id=subtitle]]
+[[!template text="and the package on MELPA" start="00:00:16.000" video="mainVideo" id=subtitle]]
+[[!template text="are listed on the right." start="00:00:18.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's start with one of the motivating" start="00:00:20.160" video="mainVideo" id=subtitle]]
+[[!template text="use cases for executable Org files." start="00:00:21.760" video="mainVideo" id=subtitle]]
+[[!template text="Many users keep global configuration" start="00:00:25.920" video="mainVideo" id=subtitle]]
+[[!template text="for Org in an init.el file," start="00:00:29.339" video="mainVideo" id=subtitle]]
+[[!template text="which works for many workflows." start="00:00:31.840" video="mainVideo" id=subtitle]]
+[[!template text="However, for reproducible research," start="00:00:33.520" video="mainVideo" id=subtitle]]
+[[!template text="this is a challenge" start="00:00:36.239" video="mainVideo" id=subtitle]]
+[[!template text="because if an Org file is" start="00:00:37.600" video="mainVideo" id=subtitle]]
+[[!template text="dissociated from the init.el file," start="00:00:39.280" video="mainVideo" id=subtitle]]
+[[!template text="then often it will no longer" start="00:00:41.440" video="mainVideo" id=subtitle]]
+[[!template text="function as expected." start="00:00:43.040" video="mainVideo" id=subtitle]]
+[[!template new="1" text="One potential solution to this problem" start="00:00:44.640" video="mainVideo" id=subtitle]]
+[[!template text="is to be able to include all of the" start="00:00:46.719" video="mainVideo" id=subtitle]]
+[[!template text="global configuration for Emacs" start="00:00:48.160" video="mainVideo" id=subtitle]]
+[[!template text="and the environment in the Org file itself," start="00:00:50.239" video="mainVideo" id=subtitle]]
+[[!template text="in which case when you" start="00:00:52.960" video="mainVideo" id=subtitle]]
+[[!template text="go to reuse the Org file," start="00:00:53.840" video="mainVideo" id=subtitle]]
+[[!template text="it will work as expected." start="00:00:55.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="What does an executable Org file" start="00:00:58.640" video="mainVideo" id=subtitle]]
+[[!template text="look like in action?" start="00:01:00.480" video="mainVideo" id=subtitle]]
+[[!template text="Here's a demo of an executable Org file" start="00:01:02.559" video="mainVideo" id=subtitle]]
+[[!template text="running in Bash, Dash, Zsh, and PowerShell." start="00:01:05.280" video="mainVideo" id=subtitle]]
+[[!template text="So, we are currently in Bash," start="00:01:09.680" video="mainVideo" id=subtitle]]
+[[!template text="and we can run our demo," start="00:01:14.799" video="mainVideo" id=subtitle]]
+[[!template text="and it will print some stuff," start="00:01:19.360" video="mainVideo" id=subtitle]]
+[[!template text="and wait for input." start="00:01:21.119" video="mainVideo" id=subtitle]]
+[[!template text="We can also run it in Dash," start="00:01:22.640" video="mainVideo" id=subtitle]]
+[[!template text="which is the default for Debian" start="00:01:24.144" video="mainVideo" id=subtitle]]
+[[!template text="and derivatives." start="00:01:25.720" video="mainVideo" id=subtitle]]
+[[!template text="Same program works as expected." start="00:01:29.840" video="mainVideo" id=subtitle]]
+[[!template text="Zsh also. And lastly PowerShell," start="00:01:32.320" video="mainVideo" id=subtitle]]
+[[!template text="if we try to run demo.org itself," start="00:01:38.560" video="mainVideo" id=subtitle]]
+[[!template text="we see (that) we get an error" start="00:01:41.439" video="mainVideo" id=subtitle]]
+[[!template text="because PowerShell cares" start="00:01:42.640" video="mainVideo" id=subtitle]]
+[[!template text="about file extensions," start="00:01:43.764" video="mainVideo" id=subtitle]]
+[[!template text="so, if we symlink to ps1," start="00:01:45.439" video="mainVideo" id=subtitle]]
+[[!template text="then it works as expected," start="00:01:49.840" video="mainVideo" id=subtitle]]
+[[!template text="and there are ways to alias this," start="00:01:51.680" video="mainVideo" id=subtitle]]
+[[!template text="so that you can run it as a program" start="00:01:53.341" video="mainVideo" id=subtitle]]
+[[!template text="without the ps1 extension." start="00:01:55.044" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, how does this work?" start="00:01:58.640" video="mainVideo" id=subtitle]]
+[[!template text="There are three components" start="00:02:03.920" video="mainVideo" id=subtitle]]
+[[!template text="to an executable Org file" start="00:02:05.759" video="mainVideo" id=subtitle]]
+[[!template text="that all need to be present" start="00:02:07.352" video="mainVideo" id=subtitle]]
+[[!template text="in order for this to work." start="00:02:08.560" video="mainVideo" id=subtitle]]
+[[!template text="Starting from the top of the file," start="00:02:10.080" video="mainVideo" id=subtitle]]
+[[!template text="we have a shebang block." start="00:02:11.920" video="mainVideo" id=subtitle]]
+[[!template text="Next we have an Org Babel block" start="00:02:14.239" video="mainVideo" id=subtitle]]
+[[!template text="written in Emacs Lisp," start="00:02:16.640" video="mainVideo" id=subtitle]]
+[[!template text="which is what we actually saw executing," start="00:02:17.760" video="mainVideo" id=subtitle]]
+[[!template text="and then there are some" start="00:02:20.000" video="mainVideo" id=subtitle]]
+[[!template text="eval local variables or Elvs" start="00:02:20.959" video="mainVideo" id=subtitle]]
+[[!template text="that are involved in making this" start="00:02:23.520" video="mainVideo" id=subtitle]]
+[[!template text="actually executable." start="00:02:25.200" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's start with the shebang block." start="00:02:26.800" video="mainVideo" id=subtitle]]
+[[!template text="Org syntax does not have support" start="00:02:29.760" video="mainVideo" id=subtitle]]
+[[!template text="for shebang lines." start="00:02:33.280" video="mainVideo" id=subtitle]]
+[[!template text="However, it supports the shebang block." start="00:02:34.959" video="mainVideo" id=subtitle]]
+[[!template text="This is because Org comments, blocks," start="00:02:37.120" video="mainVideo" id=subtitle]]
+[[!template text="keywords, etc. that start with the" start="00:02:39.440" video="mainVideo" id=subtitle]]
+[[!template text="sharp sign have the same syntax as" start="00:02:41.760" video="mainVideo" id=subtitle]]
+[[!template text="comments in POSIX and PowerShell." start="00:02:43.920" video="mainVideo" id=subtitle]]
+[[!template text="This block is in fact valid" start="00:02:46.720" video="mainVideo" id=subtitle]]
+[[!template text="Bash, Dash, Zsh, PowerShell," start="00:02:53.280" video="mainVideo" id=subtitle]]
+[[!template text="and maybe some other shells as well." start="00:02:55.040" video="mainVideo" id=subtitle]]
+[[!template text="In essence what it does is," start="00:02:57.280" video="mainVideo" id=subtitle]]
+[[!template text="perform some setup" start="00:03:02.480" video="mainVideo" id=subtitle]]
+[[!template text="to avoid polluting standard output," start="00:03:03.440" video="mainVideo" id=subtitle]]
+[[!template text="and then it runs Emacs" start="00:03:06.080" video="mainVideo" id=subtitle]]
+[[!template text="to load the file itself." start="00:03:07.516" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The Elisp that is passed on the command line" start="00:03:08.959" video="mainVideo" id=subtitle]]
+[[!template text="is explicated over here on the right," start="00:03:12.640" video="mainVideo" id=subtitle]]
+[[!template text="and in essence what it does is," start="00:03:14.959" video="mainVideo" id=subtitle]]
+[[!template text="to keep the startup time minimal" start="00:03:17.920" video="mainVideo" id=subtitle]]
+[[!template text="and as low as possible," start="00:03:20.480" video="mainVideo" id=subtitle]]
+[[!template text="it loads the absolute bare minimum" start="00:03:21.760" video="mainVideo" id=subtitle]]
+[[!template text="needed for Babel," start="00:03:24.080" video="mainVideo" id=subtitle]]
+[[!template text="and then it calls hack-local-variables" start="00:03:25.120" video="mainVideo" id=subtitle]]
+[[!template text="triggering the eval-local-variables." start="00:03:27.519" video="mainVideo" id=subtitle]]
+[[!template text="What do the eval-local-variables do," start="00:03:31.680" video="mainVideo" id=subtitle]]
+[[!template text="and how those work?" start="00:03:33.614" video="mainVideo" id=subtitle]]
+[[!template text="The essence of the approach is to" start="00:03:34.799" video="mainVideo" id=subtitle]]
+[[!template text="use org-confirm-babel-evaluate" start="00:03:36.319" video="mainVideo" id=subtitle]]
+[[!template text="to allow Babel execution." start="00:03:38.720" video="mainVideo" id=subtitle]]
+[[!template text="We can't set it to nil because that is" start="00:03:40.480" video="mainVideo" id=subtitle]]
+[[!template text="an arbitrary code execution vector," start="00:03:43.360" video="mainVideo" id=subtitle]]
+[[!template text="which we don't want if we're sharing files." start="00:03:45.308" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Instead what we do is," start="00:03:48.000" video="mainVideo" id=subtitle]]
+[[!template text="we use the fact that it can be a function," start="00:03:49.555" video="mainVideo" id=subtitle]]
+[[!template text="and we normalize the block of code," start="00:03:52.000" video="mainVideo" id=subtitle]]
+[[!template text="we checksum it, and then we check" start="00:03:55.280" video="mainVideo" id=subtitle]]
+[[!template text="that it matches this checksum up here" start="00:03:57.320" video="mainVideo" id=subtitle]]
+[[!template text="at the top of the file," start="00:03:59.280" video="mainVideo" id=subtitle]]
+[[!template text="and then sort of inside there," start="00:04:00.400" video="mainVideo" id=subtitle]]
+[[!template text="inside of org-sbe," start="00:04:02.640" video="mainVideo" id=subtitle]]
+[[!template text="which is Org source block evaluate," start="00:04:04.159" video="mainVideo" id=subtitle]]
+[[!template text="we call the block." start="00:04:06.560" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The actual implementation of this" start="00:04:08.959" video="mainVideo" id=subtitle]]
+[[!template text="is somewhat more complicated." start="00:04:11.120" video="mainVideo" id=subtitle]]
+[[!template text="However, it's small enough to fit in" start="00:04:12.497" video="mainVideo" id=subtitle]]
+[[!template text="the local variables at the end of the file." start="00:04:14.799" video="mainVideo" id=subtitle]]
+[[!template text="One thing to note is that" start="00:04:17.519" video="mainVideo" id=subtitle]]
+[[!template text="if you are using PowerShell," start="00:04:19.040" video="mainVideo" id=subtitle]]
+[[!template text="PowerShell parses the whole file" start="00:04:20.799" video="mainVideo" id=subtitle]]
+[[!template text="which means that" start="00:04:23.919" video="mainVideo" id=subtitle]]
+[[!template text="for any normal Org content," start="00:04:25.040" video="mainVideo" id=subtitle]]
+[[!template text="you need to put it in" start="00:04:27.759" video="mainVideo" id=subtitle]]
+[[!template text="a multi-line PowerShell comment," start="00:04:28.639" video="mainVideo" id=subtitle]]
+[[!template text="and close it." start="00:04:30.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, once we hit" start="00:04:31.199" video="mainVideo" id=subtitle]]
+[[!template text="hack-local-variables at the end," start="00:04:32.371" video="mainVideo" id=subtitle]]
+[[!template text="we run the eval-local-variables block," start="00:04:34.160" video="mainVideo" id=subtitle]]
+[[!template text="then we enter this Elisp block," start="00:04:37.120" video="mainVideo" id=subtitle]]
+[[!template text="and you can write whatever you want." start="00:04:40.880" video="mainVideo" id=subtitle]]
+[[!template text="All the power of Org Babel is" start="00:04:42.720" video="mainVideo" id=subtitle]]
+[[!template text="now at your fingertips" start="00:04:44.160" video="mainVideo" id=subtitle]]
+[[!template text="in order to do what you need" start="00:04:45.360" video="mainVideo" id=subtitle]]
+[[!template text="for this file." start="00:04:47.199" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Finally, let's do a quick demo" start="00:04:48.800" video="mainVideo" id=subtitle]]
+[[!template text="of how to use this to make" start="00:04:50.320" video="mainVideo" id=subtitle]]
+[[!template text="your own Org files executable." start="00:04:52.453" video="mainVideo" id=subtitle]]
+[[!template text="Orgstrap is available on MELPA as mentioned," start="00:04:54.800" video="mainVideo" id=subtitle]]
+[[!template text="and it can be installed using package.el" start="00:05:01.840" video="mainVideo" id=subtitle]]
+[[!template text="by calling package-install orgstrap." start="00:05:06.080" video="mainVideo" id=subtitle]]
+[[!template text="It will download, and it will install." start="00:05:11.280" video="mainVideo" id=subtitle]]
+[[!template text="Then you can open an existing file" start="00:05:13.520" video="mainVideo" id=subtitle]]
+[[!template text="or a new file. In this case," start="00:05:18.720" video="mainVideo" id=subtitle]]
+[[!template text="let me open a file called example.org." start="00:05:21.919" video="mainVideo" id=subtitle]]
+[[!template text="And then orgstrap provides" start="00:05:25.199" video="mainVideo" id=subtitle]]
+[[!template text="command called orgstrap-init." start="00:05:26.996" video="mainVideo" id=subtitle]]
+[[!template text="What orgstrap-init does is," start="00:05:29.360" video="mainVideo" id=subtitle]]
+[[!template text="it populates a file with the machinery" start="00:05:30.953" video="mainVideo" id=subtitle]]
+[[!template text="needed to run an orgstrap block." start="00:05:33.759" video="mainVideo" id=subtitle]]
+[[!template text="We're just going to do a message" start="00:05:36.639" video="mainVideo" id=subtitle]]
+[[!template text="&quot;hello orgstrap!&quot;." start="00:05:38.560" video="mainVideo" id=subtitle]]
+[[!template text="If you look up at the top," start="00:05:43.440" video="mainVideo" id=subtitle]]
+[[!template text="you will see that the" start="00:05:46.160" video="mainVideo" id=subtitle]]
+[[!template text="orgstrap-block-checksum will change" start="00:05:47.386" video="mainVideo" id=subtitle]]
+[[!template text="when I save the file." start="00:05:50.320" video="mainVideo" id=subtitle]]
+[[!template text="This makes it much easier to author files" start="00:05:51.520" video="mainVideo" id=subtitle]]
+[[!template text="with orgstrap blocks." start="00:05:53.840" video="mainVideo" id=subtitle]]
+[[!template text="And then we need one last piece" start="00:05:55.120" video="mainVideo" id=subtitle]]
+[[!template text="of machinery," start="00:05:56.560" video="mainVideo" id=subtitle]]
+[[!template text="which is the shebang block." start="00:05:57.876" video="mainVideo" id=subtitle]]
+[[!template text="I am just going to steal" start="00:06:00.400" video="mainVideo" id=subtitle]]
+[[!template text="the shebang block from" start="00:06:01.520" video="mainVideo" id=subtitle]]
+[[!template text="this other file over here" start="00:06:02.560" video="mainVideo" id=subtitle]]
+[[!template text="since it is available." start="00:06:06.080" video="mainVideo" id=subtitle]]
+[[!template text="You can also get it from shebang.org," start="00:06:07.039" video="mainVideo" id=subtitle]]
+[[!template text="and I have plans to add a command" start="00:06:08.880" video="mainVideo" id=subtitle]]
+[[!template text="to insert this into the file directly," start="00:06:10.800" video="mainVideo" id=subtitle]]
+[[!template text="which may actually be done by the time" start="00:06:12.560" video="mainVideo" id=subtitle]]
+[[!template text="this video is actually posted and visible." start="00:06:15.600" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There's one last step," start="00:06:19.520" video="mainVideo" id=subtitle]]
+[[!template text="which is that we need to run dired" start="00:06:21.120" video="mainVideo" id=subtitle]]
+[[!template text="in order to… There we go." start="00:06:24.160" video="mainVideo" id=subtitle]]
+[[!template text="So, we use Shift m, capital m," start="00:06:27.520" video="mainVideo" id=subtitle]]
+[[!template text="in order to make our" start="00:06:31.039" video="mainVideo" id=subtitle]]
+[[!template text="example file executable," start="00:06:32.800" video="mainVideo" id=subtitle]]
+[[!template text="and then if we come back to here," start="00:06:35.520" video="mainVideo" id=subtitle]]
+[[!template text="we see that example.org is now executable," start="00:06:42.140" video="mainVideo" id=subtitle]]
+[[!template text="and we can run it." start="00:06:47.360" video="mainVideo" id=subtitle]]
+[[!template text="&quot;hello orgstrap!&quot;, and we're done." start="00:06:48.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, that's the basic workflow" start="00:06:50.560" video="mainVideo" id=subtitle]]
+[[!template text="for getting orgstrap files" start="00:06:52.639" video="mainVideo" id=subtitle]]
+[[!template text="to be executable." start="00:06:54.880" video="mainVideo" id=subtitle]]
+[[!template text="I will be around to answer questions live," start="00:06:56.240" video="mainVideo" id=subtitle]]
+[[!template text="and I will be also available in" start="00:06:58.960" video="mainVideo" id=subtitle]]
+[[!template text="the #emacsconf IRC channel all day." start="00:07:00.800" video="mainVideo" id=subtitle]]
+[[!template text="I hope you have found this useful," start="00:07:03.280" video="mainVideo" id=subtitle]]
+[[!template text="and thank you very much for watching." start="00:07:04.960" video="mainVideo" id=subtitle]]
+[[!template text="captions by bhavin192 (Bhavin Gandhi)" start="00:07:08.160" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/faster.md b/2021/captions/faster.md
new file mode 100644
index 00000000..be9b5083
--- /dev/null
+++ b/2021/captions/faster.md
@@ -0,0 +1,512 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hi. Greetings from the cloudy St. Petersburg." start="00:00:01.120" video="mainVideo" id=subtitle]]
+[[!template text="My name is Dmitry Gutov." start="00:00:04.640" video="mainVideo" id=subtitle]]
+[[!template text="I write Ruby by day, Emacs Lisp by night" start="00:00:06.080" video="mainVideo" id=subtitle]]
+[[!template text="when I don't do anything else." start="00:00:09.280" video="mainVideo" id=subtitle]]
+[[!template text="You might know my work" start="00:00:12.080" video="mainVideo" id=subtitle]]
+[[!template text="from a number of third-party packages" start="00:00:14.559" video="mainVideo" id=subtitle]]
+[[!template text="as well as built-in ones." start="00:00:18.160" video="mainVideo" id=subtitle]]
+[[!template text="The idea for this talk came out from" start="00:00:22.240" video="mainVideo" id=subtitle]]
+[[!template text="an improvement request" start="00:00:25.599" video="mainVideo" id=subtitle]]
+[[!template text="for the performance of grep-like commands" start="00:00:26.800" video="mainVideo" id=subtitle]]
+[[!template text="using the xref interface" start="00:00:32.960" video="mainVideo" id=subtitle]]
+[[!template text="and its storage types, container types" start="00:00:35.200" video="mainVideo" id=subtitle]]
+[[!template text="for the search results," start="00:00:43.280" video="mainVideo" id=subtitle]]
+[[!template text="complaining that it's not as fast" start="00:00:47.840" video="mainVideo" id=subtitle]]
+[[!template text="as it potentially could have been" start="00:00:51.440" video="mainVideo" id=subtitle]]
+[[!template text="when there are lots of search results" start="00:00:54.320" video="mainVideo" id=subtitle]]
+[[!template text="coming for a given search." start="00:00:58.239" video="mainVideo" id=subtitle]]
+[[!template text="I have noticed myself that" start="00:01:01.600" video="mainVideo" id=subtitle]]
+[[!template text="when working on it, and probably before." start="00:01:06.159" video="mainVideo" id=subtitle]]
+[[!template text="My approach to optimizing Lisp code" start="00:01:10.159" video="mainVideo" id=subtitle]]
+[[!template text="has changed recently-ish," start="00:01:16.560" video="mainVideo" id=subtitle]]
+[[!template text="and I'd like to talk about it here." start="00:01:21.680" video="mainVideo" id=subtitle]]
+[[!template text="This talk is for people who already" start="00:01:26.960" video="mainVideo" id=subtitle]]
+[[!template text="know how to write some Emacs Lisp" start="00:01:34.079" video="mainVideo" id=subtitle]]
+[[!template text="to solve their problems" start="00:01:37.040" video="mainVideo" id=subtitle]]
+[[!template text="and who have possibly encountered" start="00:01:38.880" video="mainVideo" id=subtitle]]
+[[!template text="some performance issues doing that." start="00:01:43.360" video="mainVideo" id=subtitle]]
+[[!template text="Also, if you want to contribute" start="00:01:49.200" video="mainVideo" id=subtitle]]
+[[!template text="some improvements to the code" start="00:01:51.600" video="mainVideo" id=subtitle]]
+[[!template text="that is already in Emacs" start="00:01:54.799" video="mainVideo" id=subtitle]]
+[[!template text="or to other packages" start="00:01:56.960" video="mainVideo" id=subtitle]]
+[[!template text="which are owned by somebody else," start="00:02:02.159" video="mainVideo" id=subtitle]]
+[[!template text="it should also be helpful. Let's start." start="00:02:04.479" video="mainVideo" id=subtitle]]
+[[!template text="First of all, about Emacs and Emacs Lisp." start="00:02:13.520" video="mainVideo" id=subtitle]]
+[[!template text="It's not the fastest language." start="00:02:18.640" video="mainVideo" id=subtitle]]
+[[!template text="Let's switch to the notes." start="00:02:21.360" video="mainVideo" id=subtitle]]
+[[!template text="I hope the font is big enough" start="00:02:26.560" video="mainVideo" id=subtitle]]
+[[!template text="to be readable on this video, really hope." start="00:02:31.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Emacs Lisp is not the fastest of the bunch." start="00:02:36.480" video="mainVideo" id=subtitle]]
+[[!template text="The garbage collector creates pauses" start="00:02:40.160" video="mainVideo" id=subtitle]]
+[[!template text="whenever it needs to sweep data." start="00:02:44.400" video="mainVideo" id=subtitle]]
+[[!template text="The interpreter is not the fastest one," start="00:02:48.800" video="mainVideo" id=subtitle]]
+[[!template text="even though the native compilation branch" start="00:02:51.760" video="mainVideo" id=subtitle]]
+[[!template text="is improving on that by twice" start="00:02:54.720" video="mainVideo" id=subtitle]]
+[[!template text="in certain scenarios, which is good." start="00:02:59.120" video="mainVideo" id=subtitle]]
+[[!template text="The standard library or functions" start="00:03:04.640" video="mainVideo" id=subtitle]]
+[[!template text="for working with collections, for example," start="00:03:10.560" video="mainVideo" id=subtitle]]
+[[!template text="are not so uniformly great." start="00:03:12.800" video="mainVideo" id=subtitle]]
+[[!template text="So there is some work to be done there." start="00:03:17.599" video="mainVideo" id=subtitle]]
+[[!template text="Maybe you can contribute" start="00:03:20.080" video="mainVideo" id=subtitle]]
+[[!template text="the next improvement in there." start="00:03:22.239" video="mainVideo" id=subtitle]]
+[[!template text="And also, if your package displays stuff," start="00:03:26.640" video="mainVideo" id=subtitle]]
+[[!template text="it has a visual component," start="00:03:33.200" video="mainVideo" id=subtitle]]
+[[!template text="then you might have to deal with" start="00:03:35.040" video="mainVideo" id=subtitle]]
+[[!template text="some drawbacks of the display engine" start="00:03:36.959" video="mainVideo" id=subtitle]]
+[[!template text="which might slow to a crawl" start="00:03:43.120" video="mainVideo" id=subtitle]]
+[[!template text="when your code has..." start="00:03:47.760" video="mainVideo" id=subtitle]]
+[[!template text="when you're trying to display lines" start="00:03:53.680" video="mainVideo" id=subtitle]]
+[[!template text="which are a little too long--" start="00:03:56.560" video="mainVideo" id=subtitle]]
+[[!template text="trying to print a long line, for example--" start="00:04:00.319" video="mainVideo" id=subtitle]]
+[[!template text="or you are using a lot of overlays," start="00:04:03.120" video="mainVideo" id=subtitle]]
+[[!template text="if you know what it is." start="00:04:07.120" video="mainVideo" id=subtitle]]
+[[!template text="With lots of overlays" start="00:04:09.120" video="mainVideo" id=subtitle]]
+[[!template text="on the same visual line, in particular." start="00:04:12.640" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But okay. The first thing to understand," start="00:04:19.840" video="mainVideo" id=subtitle]]
+[[!template text="and I hope everybody who's done" start="00:04:24.160" video="mainVideo" id=subtitle]]
+[[!template text="some programming in the past knows," start="00:04:27.680" video="mainVideo" id=subtitle]]
+[[!template text="it's: first you write correctly," start="00:04:29.520" video="mainVideo" id=subtitle]]
+[[!template text="and then you try to benchmark." start="00:04:35.120" video="mainVideo" id=subtitle]]
+[[!template text="and see where the problems are," start="00:04:37.360" video="mainVideo" id=subtitle]]
+[[!template text="if there are any." start="00:04:39.199" video="mainVideo" id=subtitle]]
+[[!template text="So first do it right, then do it fast." start="00:04:40.720" video="mainVideo" id=subtitle]]
+[[!template text="How do we find the hotspots," start="00:04:45.919" video="mainVideo" id=subtitle]]
+[[!template text="the bottlenecks on the second step?" start="00:04:50.720" video="mainVideo" id=subtitle]]
+[[!template text="We try to do some profiling" start="00:04:52.400" video="mainVideo" id=subtitle]]
+[[!template text="or measuring how long the code takes." start="00:04:54.720" video="mainVideo" id=subtitle]]
+[[!template text="Emacs has two different profilers." start="00:04:58.960" video="mainVideo" id=subtitle]]
+[[!template new="1" text="One is the native profiler," start="00:05:03.039" video="mainVideo" id=subtitle]]
+[[!template text="which as I recall was contributed by" start="00:05:05.440" video="mainVideo" id=subtitle]]
+[[!template text="Tomohiro Matsuyama, the author" start="00:05:10.639" video="mainVideo" id=subtitle]]
+[[!template text="of the autocomplete package" start="00:05:13.280" video="mainVideo" id=subtitle]]
+[[!template text="back in Emacs 24.3, apparently." start="00:05:16.240" video="mainVideo" id=subtitle]]
+[[!template text="It's a low overhead profiler." start="00:05:22.720" video="mainVideo" id=subtitle]]
+[[!template text="It's sampling, which is good on one hand" start="00:05:24.320" video="mainVideo" id=subtitle]]
+[[!template text="but might be less good on the other hand." start="00:05:31.520" video="mainVideo" id=subtitle]]
+[[!template text="Let's try using it." start="00:05:33.919" video="mainVideo" id=subtitle]]
+[[!template text="So we start with profiler-start." start="00:05:35.199" video="mainVideo" id=subtitle]]
+[[!template text="Let's just ask for CPU profiling here," start="00:05:40.960" video="mainVideo" id=subtitle]]
+[[!template text="but it also can profile memory locations." start="00:05:44.960" video="mainVideo" id=subtitle]]
+[[!template text="Let's try a search for some string" start="00:05:48.320" video="mainVideo" id=subtitle]]
+[[!template text="in the current project." start="00:05:56.400" video="mainVideo" id=subtitle]]
+[[!template text="Let's do it a few times, maybe three times," start="00:06:01.360" video="mainVideo" id=subtitle]]
+[[!template text="so the profiler has more data to work with." start="00:06:04.080" video="mainVideo" id=subtitle]]
+[[!template text="Let's call the report." start="00:06:09.360" video="mainVideo" id=subtitle]]
+[[!template text="Okay. So here we have the tree," start="00:06:13.680" video="mainVideo" id=subtitle]]
+[[!template text="the execution tree with percentages" start="00:06:16.960" video="mainVideo" id=subtitle]]
+[[!template text="of the time spent in each function." start="00:06:19.360" video="mainVideo" id=subtitle]]
+[[!template text="You can unwrap it by going up and down" start="00:06:22.960" video="mainVideo" id=subtitle]]
+[[!template text="and pressing TAB to unwrap every element." start="00:06:25.840" video="mainVideo" id=subtitle]]
+[[!template text="This is weird." start="00:06:35.039" video="mainVideo" id=subtitle]]
+[[!template text="Okay, here we see that the actual command" start="00:06:52.000" video="mainVideo" id=subtitle]]
+[[!template text="that was called only takes" start="00:06:55.199" video="mainVideo" id=subtitle]]
+[[!template text="8% of the whole runtime," start="00:06:56.639" video="mainVideo" id=subtitle]]
+[[!template text="meaning the input was..." start="00:06:59.599" video="mainVideo" id=subtitle]]
+[[!template text="The command took not enough time" start="00:07:07.759" video="mainVideo" id=subtitle]]
+[[!template text="for us to really dig into it." start="00:07:10.960" video="mainVideo" id=subtitle]]
+[[!template text="Let's try a shorter input with more matches." start="00:07:13.360" video="mainVideo" id=subtitle]]
+[[!template text="So profiler-start again, CPU." start="00:07:18.960" video="mainVideo" id=subtitle]]
+[[!template text="Let's search for list." start="00:07:25.680" video="mainVideo" id=subtitle]]
+[[!template text="Don't mind the minibuffer just yet." start="00:07:34.240" video="mainVideo" id=subtitle]]
+[[!template text="Okay. So let's look at the report." start="00:07:40.160" video="mainVideo" id=subtitle]]
+[[!template text="We can unwrap it here, and we see" start="00:07:47.680" video="mainVideo" id=subtitle]]
+[[!template text="52% of the time was spent doing this," start="00:07:52.000" video="mainVideo" id=subtitle]]
+[[!template text="at least according to the profile." start="00:07:55.759" video="mainVideo" id=subtitle]]
+[[!template text="We can unwrap it, see the description" start="00:07:58.240" video="mainVideo" id=subtitle]]
+[[!template text="of any function that was called" start="00:08:00.960" video="mainVideo" id=subtitle]]
+[[!template text="by hitting d, or even jump to it" start="00:08:02.800" video="mainVideo" id=subtitle]]
+[[!template text="by tapping f." start="00:08:08.479" video="mainVideo" id=subtitle]]
+[[!template text="By going down the stream," start="00:08:12.960" video="mainVideo" id=subtitle]]
+[[!template text="we unwrap it with TAB," start="00:08:16.160" video="mainVideo" id=subtitle]]
+[[!template text="you can see where time was spent." start="00:08:18.240" video="mainVideo" id=subtitle]]
+[[!template text="One of the bigger drawbacks" start="00:08:22.400" video="mainVideo" id=subtitle]]
+[[!template text="of this profiler is the arithmetics" start="00:08:25.199" video="mainVideo" id=subtitle]]
+[[!template text="don't always work out," start="00:08:30.639" video="mainVideo" id=subtitle]]
+[[!template text="like you might have..." start="00:08:39.200" video="mainVideo" id=subtitle]]
+[[!template text="This is not a good example," start="00:08:45.760" video="mainVideo" id=subtitle]]
+[[!template text="but okay, you have 14% spent in here," start="00:08:47.519" video="mainVideo" id=subtitle]]
+[[!template text="but when we expand this entry," start="00:08:52.640" video="mainVideo" id=subtitle]]
+[[!template text="we only see like 6%, 3%, and 0%." start="00:08:57.200" video="mainVideo" id=subtitle]]
+[[!template text="Different sum, sometimes even bigger than that." start="00:09:01.760" video="mainVideo" id=subtitle]]
+[[!template text="So the native profiler" start="00:09:06.640" video="mainVideo" id=subtitle]]
+[[!template text="can give an accurate picture" start="00:09:10.800" video="mainVideo" id=subtitle]]
+[[!template text="and it has little overhead," start="00:09:13.200" video="mainVideo" id=subtitle]]
+[[!template text="but the specific numbers" start="00:09:15.920" video="mainVideo" id=subtitle]]
+[[!template text="are not very precise" start="00:09:20.399" video="mainVideo" id=subtitle]]
+[[!template text="because the principle is probabilistic." start="00:09:22.959" video="mainVideo" id=subtitle]]
+[[!template text="Let's stop here." start="00:09:28.640" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There is another package called elp," start="00:09:31.200" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Lisp Profiler," start="00:09:36.959" video="mainVideo" id=subtitle]]
+[[!template text="which is much older than that." start="00:09:39.360" video="mainVideo" id=subtitle]]
+[[!template text="It allows us to instrument" start="00:09:43.440" video="mainVideo" id=subtitle]]
+[[!template text="just specific functions or a package." start="00:09:47.920" video="mainVideo" id=subtitle]]
+[[!template text="We're instrumenting the xref package here." start="00:09:53.600" video="mainVideo" id=subtitle]]
+[[!template text="It works through advice. You can see" start="00:09:57.680" video="mainVideo" id=subtitle]]
+[[!template text="the description of one of the functions" start="00:10:01.360" video="mainVideo" id=subtitle]]
+[[!template text="in the package, and we see" start="00:10:03.279" video="mainVideo" id=subtitle]]
+[[!template text="that it has had :around device added." start="00:10:04.320" video="mainVideo" id=subtitle]]
+[[!template text="If we run the same search," start="00:10:12.640" video="mainVideo" id=subtitle]]
+[[!template text="we can see that -- when it finishes --" start="00:10:18.000" video="mainVideo" id=subtitle]]
+[[!template text="the table of all the numbers," start="00:10:21.360" video="mainVideo" id=subtitle]]
+[[!template text="that every function in the package" start="00:10:30.399" video="mainVideo" id=subtitle]]
+[[!template text="has been called, and the times" start="00:10:32.640" video="mainVideo" id=subtitle]]
+[[!template text="which the runtime has spent inside of them." start="00:10:41.680" video="mainVideo" id=subtitle]]
+[[!template text="sorted by impact, as it understands that." start="00:10:48.000" video="mainVideo" id=subtitle]]
+[[!template text="The main problem with this profiler is" start="00:10:55.040" video="mainVideo" id=subtitle]]
+[[!template text="it is slower because it adds overhead" start="00:11:00.079" video="mainVideo" id=subtitle]]
+[[!template text="to every function call," start="00:11:04.160" video="mainVideo" id=subtitle]]
+[[!template text="so it, in the end, might give an impression" start="00:11:06.880" video="mainVideo" id=subtitle]]
+[[!template text="that functions with lots of calls," start="00:11:11.519" video="mainVideo" id=subtitle]]
+[[!template text="which have been called a lot of times," start="00:11:19.519" video="mainVideo" id=subtitle]]
+[[!template text="are more important," start="00:11:21.839" video="mainVideo" id=subtitle]]
+[[!template text="hotter than they actually are," start="00:11:26.880" video="mainVideo" id=subtitle]]
+[[!template text="because it slows down" start="00:11:29.279" video="mainVideo" id=subtitle]]
+[[!template text="every such function call," start="00:11:30.959" video="mainVideo" id=subtitle]]
+[[!template text="including the subsequent calls" start="00:11:32.640" video="mainVideo" id=subtitle]]
+[[!template text="that these functions do" start="00:11:35.279" video="mainVideo" id=subtitle]]
+[[!template text="inside the same package." start="00:11:38.160" video="mainVideo" id=subtitle]]
+[[!template text="So it's a good way to analyze and drill down" start="00:11:40.560" video="mainVideo" id=subtitle]]
+[[!template text="to see which functions here" start="00:11:48.240" video="mainVideo" id=subtitle]]
+[[!template text="take a lot of time," start="00:11:50.320" video="mainVideo" id=subtitle]]
+[[!template text="but just keep in mind" start="00:11:51.200" video="mainVideo" id=subtitle]]
+[[!template text="that sometimes you might end up" start="00:11:53.839" video="mainVideo" id=subtitle]]
+[[!template text="trying to optimize one of these" start="00:11:57.760" video="mainVideo" id=subtitle]]
+[[!template text="smaller functions called" start="00:12:00.079" video="mainVideo" id=subtitle]]
+[[!template text="or usually smaller, and that the result" start="00:12:01.600" video="mainVideo" id=subtitle]]
+[[!template text="might not actually affect" start="00:12:09.279" video="mainVideo" id=subtitle]]
+[[!template text="the production runtime at all." start="00:12:11.040" video="mainVideo" id=subtitle]]
+[[!template text="But it's still a good tool," start="00:12:18.720" video="mainVideo" id=subtitle]]
+[[!template text="especially when you already know" start="00:12:22.240" video="mainVideo" id=subtitle]]
+[[!template text="which set of actions you are interested in," start="00:12:25.440" video="mainVideo" id=subtitle]]
+[[!template text="and which functions might be slower." start="00:12:30.560" video="mainVideo" id=subtitle]]
+[[!template text="elp allows you to instrument a package" start="00:12:33.760" video="mainVideo" id=subtitle]]
+[[!template text="or a set of functions. Just don't forget" start="00:12:37.120" video="mainVideo" id=subtitle]]
+[[!template text="to un-instrument them all afterwards," start="00:12:42.720" video="mainVideo" id=subtitle]]
+[[!template text="or else your session," start="00:12:49.600" video="mainVideo" id=subtitle]]
+[[!template text="your subsequent optimization efforts" start="00:12:52.000" video="mainVideo" id=subtitle]]
+[[!template text="might not work as well as you might" start="00:12:55.920" video="mainVideo" id=subtitle]]
+[[!template text="want to work." start="00:12:59.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And there's also this very nice," start="00:13:01.360" video="mainVideo" id=subtitle]]
+[[!template text="very handy package called benchmark," start="00:13:04.560" video="mainVideo" id=subtitle]]
+[[!template text="which unfortunately" start="00:13:09.600" video="mainVideo" id=subtitle]]
+[[!template text="not everybody knows about." start="00:13:12.480" video="mainVideo" id=subtitle]]
+[[!template text="It turns out that a lot of" start="00:13:16.000" video="mainVideo" id=subtitle]]
+[[!template text="older Emacs Lisp developers," start="00:13:21.519" video="mainVideo" id=subtitle]]
+[[!template text="users, package developers usually have" start="00:13:30.079" video="mainVideo" id=subtitle]]
+[[!template text="some benchmarking macros of their own." start="00:13:34.160" video="mainVideo" id=subtitle]]
+[[!template text="But there is this package" start="00:13:38.000" video="mainVideo" id=subtitle]]
+[[!template text="with perfectly usable interface" start="00:13:42.880" video="mainVideo" id=subtitle]]
+[[!template text="which doesn't require you" start="00:13:46.160" video="mainVideo" id=subtitle]]
+[[!template text="to define something else," start="00:13:49.199" video="mainVideo" id=subtitle]]
+[[!template text="especially when you are in" start="00:13:51.120" video="mainVideo" id=subtitle]]
+[[!template text="an emacs -Q session" start="00:13:52.560" video="mainVideo" id=subtitle]]
+[[!template text="trying to benchmark your code" start="00:13:57.120" video="mainVideo" id=subtitle]]
+[[!template text="in a bare Emacs. So it has" start="00:14:00.480" video="mainVideo" id=subtitle]]
+[[!template text="two main endpoints, I would say." start="00:14:05.440" video="mainVideo" id=subtitle]]
+[[!template text="First one is the benchmark macro," start="00:14:09.680" video="mainVideo" id=subtitle]]
+[[!template text="and the second one is benchmark-progn." start="00:14:14.480" video="mainVideo" id=subtitle]]
+[[!template text="benchmark is a function," start="00:14:19.199" video="mainVideo" id=subtitle]]
+[[!template text="and benchmark-progn is a macro." start="00:14:20.399" video="mainVideo" id=subtitle]]
+[[!template text="The first one you can use by specifying" start="00:14:25.040" video="mainVideo" id=subtitle]]
+[[!template text="the number of iterations and the form." start="00:14:27.839" video="mainVideo" id=subtitle]]
+[[!template text="I hope the minibuffer is easy to read here." start="00:14:30.480" video="mainVideo" id=subtitle]]
+[[!template text="For instance, we can take this long list" start="00:14:36.800" video="mainVideo" id=subtitle]]
+[[!template text="and try nreverse-ing it," start="00:14:43.360" video="mainVideo" id=subtitle]]
+[[!template text="and we see how long that takes." start="00:14:44.800" video="mainVideo" id=subtitle]]
+[[!template text="Then you can do it," start="00:14:49.680" video="mainVideo" id=subtitle]]
+[[!template text="adjust the inner code," start="00:14:54.160" video="mainVideo" id=subtitle]]
+[[!template text="and then basically compare" start="00:14:55.600" video="mainVideo" id=subtitle]]
+[[!template text="to figure out how much" start="00:14:58.079" video="mainVideo" id=subtitle]]
+[[!template text="and how long nreverse takes" start="00:14:59.519" video="mainVideo" id=subtitle]]
+[[!template text="in this scenario." start="00:15:01.440" video="mainVideo" id=subtitle]]
+[[!template text="Or, we can take a function" start="00:15:03.839" video="mainVideo" id=subtitle]]
+[[!template text="which we have probably found" start="00:15:07.760" video="mainVideo" id=subtitle]]
+[[!template text="using one of the previous methods" start="00:15:10.880" video="mainVideo" id=subtitle]]
+[[!template text="which we anticipate that," start="00:15:12.880" video="mainVideo" id=subtitle]]
+[[!template text="as we understand, it takes a while," start="00:15:17.279" video="mainVideo" id=subtitle]]
+[[!template text="and annotate it with a benchmark-progn form," start="00:15:19.440" video="mainVideo" id=subtitle]]
+[[!template text="which... just execute the body" start="00:15:26.720" video="mainVideo" id=subtitle]]
+[[!template text="and report, each and every one of them," start="00:15:33.360" video="mainVideo" id=subtitle]]
+[[!template text="how long that body execution took." start="00:15:36.880" video="mainVideo" id=subtitle]]
+[[!template text="So for instance, here we added" start="00:15:41.360" video="mainVideo" id=subtitle]]
+[[!template text="a few message calls" start="00:15:45.360" video="mainVideo" id=subtitle]]
+[[!template text="inside those benchmark-progns," start="00:15:46.959" video="mainVideo" id=subtitle]]
+[[!template text="so we can see how long each part" start="00:15:49.040" video="mainVideo" id=subtitle]]
+[[!template text="of the function xref-matches-in-files" start="00:15:53.199" video="mainVideo" id=subtitle]]
+[[!template text="takes when it is run." start="00:16:03.600" video="mainVideo" id=subtitle]]
+[[!template text="Let's try it. Let's first call" start="00:16:06.320" video="mainVideo" id=subtitle]]
+[[!template text="emacs-lisp-byte-compile-and-load," start="00:16:11.839" video="mainVideo" id=subtitle]]
+[[!template text="so that we're sure that we are running" start="00:16:17.199" video="mainVideo" id=subtitle]]
+[[!template text="the fastest possible version of this code," start="00:16:20.720" video="mainVideo" id=subtitle]]
+[[!template text="so when we do find the bottlenecks," start="00:16:24.079" video="mainVideo" id=subtitle]]
+[[!template text="we are sure that they are real" start="00:16:29.519" video="mainVideo" id=subtitle]]
+[[!template text="and not because of the uncompiled code," start="00:16:31.279" video="mainVideo" id=subtitle]]
+[[!template text="macro expansion, or the lack of" start="00:16:36.240" video="mainVideo" id=subtitle]]
+[[!template text="some substitutions, other substitutions" start="00:16:43.519" video="mainVideo" id=subtitle]]
+[[!template text="that our code is relying on" start="00:16:46.160" video="mainVideo" id=subtitle]]
+[[!template text="but which might not be available" start="00:16:50.800" video="mainVideo" id=subtitle]]
+[[!template text="in the interpreter mode" start="00:17:01.279" video="mainVideo" id=subtitle]]
+[[!template text="just in the compiled code." start="00:17:03.279" video="mainVideo" id=subtitle]]
+[[!template text="Let's run." start="00:17:07.039" video="mainVideo" id=subtitle]]
+[[!template text="So we have this list," start="00:17:10.160" video="mainVideo" id=subtitle]]
+[[!template text="search for list," start="00:17:14.880" video="mainVideo" id=subtitle]]
+[[!template text="and the remaining time is spent during" start="00:17:26.160" video="mainVideo" id=subtitle]]
+[[!template text="printing of the results, which we didn't" start="00:17:29.760" video="mainVideo" id=subtitle]]
+[[!template text="annotate with the benchmarking macro," start="00:17:36.720" video="mainVideo" id=subtitle]]
+[[!template text="but it's still there." start="00:17:38.320" video="mainVideo" id=subtitle]]
+[[!template text="So we can see by switching to the" start="00:17:41.280" video="mainVideo" id=subtitle]]
+[[!template text="*Messages* buffer, C-h e," start="00:17:43.679" video="mainVideo" id=subtitle]]
+[[!template text="that unquoting was very fast." start="00:17:49.919" video="mainVideo" id=subtitle]]
+[[!template text="So the search took 400 milliseconds." start="00:17:52.080" video="mainVideo" id=subtitle]]
+[[!template text="It's slower than it would be" start="00:17:59.280" video="mainVideo" id=subtitle]]
+[[!template text="without the video being recorded, as well" start="00:18:02.480" video="mainVideo" id=subtitle]]
+[[!template text="as the rest of the measurements here." start="00:18:06.080" video="mainVideo" id=subtitle]]
+[[!template text="So the parsing of the results took more" start="00:18:09.039" video="mainVideo" id=subtitle]]
+[[!template text="than that, and the object allocation" start="00:18:12.160" video="mainVideo" id=subtitle]]
+[[!template text="took even more, which is unfortunate" start="00:18:16.559" video="mainVideo" id=subtitle]]
+[[!template text="but it's the reality" start="00:18:21.919" video="mainVideo" id=subtitle]]
+[[!template text="when we're dealing with a lot of" start="00:18:23.919" video="mainVideo" id=subtitle]]
+[[!template text="search results, because, well," start="00:18:26.400" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Lisp is slower than grep." start="00:18:29.840" video="mainVideo" id=subtitle]]
+[[!template text="That's just a given." start="00:18:34.559" video="mainVideo" id=subtitle]]
+[[!template text="What can be done and what had been done" start="00:18:49.200" video="mainVideo" id=subtitle]]
+[[!template text="to improve on this?" start="00:18:54.400" video="mainVideo" id=subtitle]]
+[[!template text="Well, first of all," start="00:18:57.120" video="mainVideo" id=subtitle]]
+[[!template text="let's change the question," start="00:19:04.240" video="mainVideo" id=subtitle]]
+[[!template text="because this is more of" start="00:19:06.000" video="mainVideo" id=subtitle]]
+[[!template text="a retrospective sort of talk" start="00:19:07.360" video="mainVideo" id=subtitle]]
+[[!template text="rather than talking about future plans." start="00:19:09.760" video="mainVideo" id=subtitle]]
+[[!template new="1" text="What can one do to improve performance?" start="00:19:13.440" video="mainVideo" id=subtitle]]
+[[!template text="Well, basically, two things:" start="00:19:19.679" video="mainVideo" id=subtitle]]
+[[!template text="first, you try to make sure" start="00:19:24.160" video="mainVideo" id=subtitle]]
+[[!template text="that you're writing less code," start="00:19:27.919" video="mainVideo" id=subtitle]]
+[[!template text="then your code does fewer things," start="00:19:30.559" video="mainVideo" id=subtitle]]
+[[!template text="Fewer iterations of your operations." start="00:19:37.200" video="mainVideo" id=subtitle]]
+[[!template text="Basically, it's the realm" start="00:19:40.400" video="mainVideo" id=subtitle]]
+[[!template text="of choosing your algorithm well." start="00:19:42.000" video="mainVideo" id=subtitle]]
+[[!template text="But make sure it's as little complexity" start="00:19:46.880" video="mainVideo" id=subtitle]]
+[[!template text="as you can manage reasonably." start="00:19:54.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Another is to try to reduce memory allocations." start="00:20:00.240" video="mainVideo" id=subtitle]]
+[[!template text="It's creating conses, the links of the list," start="00:20:05.760" video="mainVideo" id=subtitle]]
+[[!template text="of the lists. If you are mapping through" start="00:20:13.760" video="mainVideo" id=subtitle]]
+[[!template text="a list, creating a new one," start="00:20:17.919" video="mainVideo" id=subtitle]]
+[[!template text="you are creating conses." start="00:20:19.200" video="mainVideo" id=subtitle]]
+[[!template text="New objects in memory, anyway." start="00:20:22.640" video="mainVideo" id=subtitle]]
+[[!template text="And also, when you call string operations" start="00:20:26.159" video="mainVideo" id=subtitle]]
+[[!template text="like substring, when you create new strings," start="00:20:30.480" video="mainVideo" id=subtitle]]
+[[!template text="that's also what you do." start="00:20:33.679" video="mainVideo" id=subtitle]]
+[[!template text="When you allocate new memory," start="00:20:36.640" video="mainVideo" id=subtitle]]
+[[!template text="that triggers garbage collections later," start="00:20:39.200" video="mainVideo" id=subtitle]]
+[[!template text="which affect the performance of your code" start="00:20:43.600" video="mainVideo" id=subtitle]]
+[[!template text="quite severely. I have found that actually," start="00:20:49.200" video="mainVideo" id=subtitle]]
+[[!template text="contrary to my personal intuition," start="00:21:01.600" video="mainVideo" id=subtitle]]
+[[!template text="when you try to fine-tune the code" start="00:21:04.960" video="mainVideo" id=subtitle]]
+[[!template text="working on long lists of elements," start="00:21:08.240" video="mainVideo" id=subtitle]]
+[[!template text="long, long collection, large collections," start="00:21:13.120" video="mainVideo" id=subtitle]]
+[[!template text="it's even more important to try to avoid" start="00:21:15.520" video="mainVideo" id=subtitle]]
+[[!template text="or reduce memory allocations" start="00:21:20.159" video="mainVideo" id=subtitle]]
+[[!template text="rather than try to ensure" start="00:21:23.200" video="mainVideo" id=subtitle]]
+[[!template text="that less code is running," start="00:21:26.400" video="mainVideo" id=subtitle]]
+[[!template text="less operations are performed," start="00:21:32.240" video="mainVideo" id=subtitle]]
+[[!template text="because the garbage collector" start="00:21:34.960" video="mainVideo" id=subtitle]]
+[[!template text="can hit you in the posterior quite suddenly" start="00:21:38.080" video="mainVideo" id=subtitle]]
+[[!template text="that you will not always..." start="00:21:44.799" video="mainVideo" id=subtitle]]
+[[!template text="When you measure the input impact," start="00:21:49.520" video="mainVideo" id=subtitle]]
+[[!template text="you might not always measure the whole of it." start="00:21:51.760" video="mainVideo" id=subtitle]]
+[[!template text="And sometimes even when you have" start="00:21:56.799" video="mainVideo" id=subtitle]]
+[[!template text="a few operations, you can measure" start="00:22:02.640" video="mainVideo" id=subtitle]]
+[[!template text="all three of them, but at some point," start="00:22:06.559" video="mainVideo" id=subtitle]]
+[[!template text="if you just reduce a lot," start="00:22:09.520" video="mainVideo" id=subtitle]]
+[[!template text="remove most of the allocations," start="00:22:11.919" video="mainVideo" id=subtitle]]
+[[!template text="all three of them, the improvement" start="00:22:14.720" video="mainVideo" id=subtitle]]
+[[!template text="might be even bigger than the total" start="00:22:16.799" video="mainVideo" id=subtitle]]
+[[!template text="of three improvements" start="00:22:21.520" video="mainVideo" id=subtitle]]
+[[!template text="which you might have measured previously," start="00:22:23.440" video="mainVideo" id=subtitle]]
+[[!template text="like separately." start="00:22:27.200" video="mainVideo" id=subtitle]]
+[[!template text="So it's something to be on the lookout for," start="00:22:29.679" video="mainVideo" id=subtitle]]
+[[!template text="but of course, when you pick the algorithm," start="00:22:33.039" video="mainVideo" id=subtitle]]
+[[!template text="it's important not to do" start="00:22:39.520" video="mainVideo" id=subtitle]]
+[[!template text="more operations than you have to." start="00:22:45.200" video="mainVideo" id=subtitle]]
+[[!template new="1" text="We have examples of both" start="00:22:52.159" video="mainVideo" id=subtitle]]
+[[!template text="in the recent changes" start="00:22:56.000" video="mainVideo" id=subtitle]]
+[[!template text="to the xref and project packages," start="00:22:58.720" video="mainVideo" id=subtitle]]
+[[!template text="which we can examine here." start="00:23:02.559" video="mainVideo" id=subtitle]]
+[[!template text="Let's take a look at this one." start="00:23:06.960" video="mainVideo" id=subtitle]]
+[[!template text="This commit message lies a little bit" start="00:23:11.200" video="mainVideo" id=subtitle]]
+[[!template text="because it's referring to" start="00:23:14.880" video="mainVideo" id=subtitle]]
+[[!template text="the use of assoc instead of cl-assoc," start="00:23:19.039" video="mainVideo" id=subtitle]]
+[[!template text="and the actual change incorporates that," start="00:23:24.559" video="mainVideo" id=subtitle]]
+[[!template text="but it also incorporates" start="00:23:29.919" video="mainVideo" id=subtitle]]
+[[!template text="the second part of the sentence" start="00:23:33.440" video="mainVideo" id=subtitle]]
+[[!template text="which actually replaced" start="00:23:39.440" video="mainVideo" id=subtitle]]
+[[!template text="the use of assoc in there." start="00:23:41.360" video="mainVideo" id=subtitle]]
+[[!template text="Curiously, cl-assoc was pretty slow" start="00:23:46.960" video="mainVideo" id=subtitle]]
+[[!template text="because not only it created" start="00:23:50.480" video="mainVideo" id=subtitle]]
+[[!template text="quadratic complexity in the operation" start="00:23:52.559" video="mainVideo" id=subtitle]]
+[[!template text="and it was also calling" start="00:23:57.919" video="mainVideo" id=subtitle]]
+[[!template text="the Lisp function equal" start="00:23:59.919" video="mainVideo" id=subtitle]]
+[[!template text="for every iteration," start="00:24:02.880" video="mainVideo" id=subtitle]]
+[[!template text="whereas if we just use assoc there," start="00:24:04.400" video="mainVideo" id=subtitle]]
+[[!template text="which was the first version" start="00:24:08.880" video="mainVideo" id=subtitle]]
+[[!template text="of this change, of the improvement," start="00:24:10.080" video="mainVideo" id=subtitle]]
+[[!template text="it became already much faster," start="00:24:13.919" video="mainVideo" id=subtitle]]
+[[!template text="but then switching to a hash table" start="00:24:15.760" video="mainVideo" id=subtitle]]
+[[!template text="which turned this lookup" start="00:24:20.640" video="mainVideo" id=subtitle]]
+[[!template text="from O(n) complexity" start="00:24:28.080" video="mainVideo" id=subtitle]]
+[[!template text="into, well, amortized constant one," start="00:24:31.760" video="mainVideo" id=subtitle]]
+[[!template text="even better." start="00:24:35.600" video="mainVideo" id=subtitle]]
+[[!template text="So, use hash tables, kids." start="00:24:37.600" video="mainVideo" id=subtitle]]
+[[!template text="Another commit here is about using" start="00:24:45.679" video="mainVideo" id=subtitle]]
+[[!template text="the inhibit-modification-hooks." start="00:24:52.400" video="mainVideo" id=subtitle]]
+[[!template text="So, turns out when you're printing" start="00:24:55.520" video="mainVideo" id=subtitle]]
+[[!template text="into a buffer, even if you have already" start="00:24:58.000" video="mainVideo" id=subtitle]]
+[[!template text="disabled the undo history," start="00:25:01.679" video="mainVideo" id=subtitle]]
+[[!template text="binding this variable to" start="00:25:06.159" video="mainVideo" id=subtitle]]
+[[!template text="a non-null value is pretty good" start="00:25:08.480" video="mainVideo" id=subtitle]]
+[[!template text="because you are able to avoid running" start="00:25:10.880" video="mainVideo" id=subtitle]]
+[[!template text="a number of hooks, which improves performance." start="00:25:15.520" video="mainVideo" id=subtitle]]
+[[!template text="Next. This one was about moving the" start="00:25:21.120" video="mainVideo" id=subtitle]]
+[[!template text="file-remote-p call" start="00:25:28.640" video="mainVideo" id=subtitle]]
+[[!template text="from inside the loop." start="00:25:32.000" video="mainVideo" id=subtitle]]
+[[!template text="This function is actually" start="00:25:37.279" video="mainVideo" id=subtitle]]
+[[!template text="surprisingly slow-ish for the goal," start="00:25:42.039" video="mainVideo" id=subtitle]]
+[[!template text="for its purpose, so you don't really want" start="00:25:49.039" video="mainVideo" id=subtitle]]
+[[!template text="to call it on every file name in the list" start="00:25:52.000" video="mainVideo" id=subtitle]]
+[[!template text="when you have a lot of them," start="00:25:56.159" video="mainVideo" id=subtitle]]
+[[!template text="and especially if your code" start="00:25:59.520" video="mainVideo" id=subtitle]]
+[[!template text="is running in a buffer" start="00:26:02.000" video="mainVideo" id=subtitle]]
+[[!template text="visiting a remote file, like through TRAMP." start="00:26:04.640" video="mainVideo" id=subtitle]]
+[[!template text="You might end up trying to" start="00:26:10.640" video="mainVideo" id=subtitle]]
+[[!template text="devise different approaches" start="00:26:15.120" video="mainVideo" id=subtitle]]
+[[!template text="to avoid checking whether" start="00:26:16.880" video="mainVideo" id=subtitle]]
+[[!template text="every file name is remote" start="00:26:20.159" video="mainVideo" id=subtitle]]
+[[!template text="if you're dealing with a list of file names," start="00:26:23.279" video="mainVideo" id=subtitle]]
+[[!template text="so this one, take a look, be careful with it." start="00:26:25.360" video="mainVideo" id=subtitle]]
+[[!template text="A similar, slower function, with-current-buffer," start="00:26:34.640" video="mainVideo" id=subtitle]]
+[[!template text="but not so much. So it all depends on" start="00:26:43.120" video="mainVideo" id=subtitle]]
+[[!template text="really how often you call it." start="00:26:46.880" video="mainVideo" id=subtitle]]
+[[!template text="Sometimes you might want to" start="00:26:48.400" video="mainVideo" id=subtitle]]
+[[!template text="rewrite your code so that" start="00:26:51.279" video="mainVideo" id=subtitle]]
+[[!template text="it's called less often." start="00:26:52.720" video="mainVideo" id=subtitle]]
+[[!template text="And expand-file-name, which hits the disk." start="00:26:54.720" video="mainVideo" id=subtitle]]
+[[!template text="So if you're dealing with file names," start="00:26:59.760" video="mainVideo" id=subtitle]]
+[[!template text="you might want to replace it" start="00:27:01.200" video="mainVideo" id=subtitle]]
+[[!template text="with concatenation at certain points." start="00:27:02.960" video="mainVideo" id=subtitle]]
+[[!template text="Okay, back to these changes later." start="00:27:07.520" video="mainVideo" id=subtitle]]
+[[!template text="This one just removed a location of a cons" start="00:27:22.159" video="mainVideo" id=subtitle]]
+[[!template text="per match hit, and still it brought 5%" start="00:27:28.480" video="mainVideo" id=subtitle]]
+[[!template text="or something like that improvement" start="00:27:33.679" video="mainVideo" id=subtitle]]
+[[!template text="to the whole command." start="00:27:37.039" video="mainVideo" id=subtitle]]
+[[!template text="So that's a pretty significant improvement" start="00:27:41.120" video="mainVideo" id=subtitle]]
+[[!template text="for a small change like that." start="00:27:46.000" video="mainVideo" id=subtitle]]
+[[!template text="Similarly, here we just made sure" start="00:27:53.600" video="mainVideo" id=subtitle]]
+[[!template text="to avoid a splits... no, a substring call," start="00:28:01.679" video="mainVideo" id=subtitle]]
+[[!template text="and probably an allocation of the whole" start="00:28:09.520" video="mainVideo" id=subtitle]]
+[[!template text="buffer string, but in my testing," start="00:28:12.399" video="mainVideo" id=subtitle]]
+[[!template text="that doesn't actually matter much," start="00:28:16.320" video="mainVideo" id=subtitle]]
+[[!template text="at least so much, but a substring call" start="00:28:19.440" video="mainVideo" id=subtitle]]
+[[!template text="per result... If we see," start="00:28:22.399" video="mainVideo" id=subtitle]]
+[[!template text="since we changed to manual parsing" start="00:28:28.960" video="mainVideo" id=subtitle]]
+[[!template text="of the buffer, with the strings" start="00:28:33.039" video="mainVideo" id=subtitle]]
+[[!template text="delimited with zero bytes," start="00:28:37.440" video="mainVideo" id=subtitle]]
+[[!template text="it gave an overall improvement" start="00:28:41.440" video="mainVideo" id=subtitle]]
+[[!template text="of 20%, again on my machine" start="00:28:43.840" video="mainVideo" id=subtitle]]
+[[!template text="with a pretty fast SSD," start="00:28:47.440" video="mainVideo" id=subtitle]]
+[[!template text="and with a warm disk cache, of course." start="00:28:50.720" video="mainVideo" id=subtitle]]
+[[!template text="But still... Going back to this revision," start="00:28:53.679" video="mainVideo" id=subtitle]]
+[[!template text="it was actually quite surprising" start="00:29:05.360" video="mainVideo" id=subtitle]]
+[[!template text="that migration to a cl-defstruct" start="00:29:09.440" video="mainVideo" id=subtitle]]
+[[!template text="from eieio, the Common Lisp-inspired" start="00:29:15.200" video="mainVideo" id=subtitle]]
+[[!template text="object system first introduced" start="00:29:24.080" video="mainVideo" id=subtitle]]
+[[!template text="in the CEDET tools," start="00:29:26.480" video="mainVideo" id=subtitle]]
+[[!template text="that was a bit of a surprise," start="00:29:34.240" video="mainVideo" id=subtitle]]
+[[!template text="because not much of my" start="00:29:39.360" video="mainVideo" id=subtitle]]
+[[!template text="benchmark benchmarking" start="00:29:44.799" video="mainVideo" id=subtitle]]
+[[!template text="actually pointed at it being the problem." start="00:29:46.080" video="mainVideo" id=subtitle]]
+[[!template text="Probably because the accessors" start="00:29:50.960" video="mainVideo" id=subtitle]]
+[[!template text="were not the actual problem," start="00:29:55.760" video="mainVideo" id=subtitle]]
+[[!template text="like the oref macros" start="00:29:57.520" video="mainVideo" id=subtitle]]
+[[!template text="and the code accessing the slots," start="00:30:00.399" video="mainVideo" id=subtitle]]
+[[!template text="but the construction," start="00:30:06.960" video="mainVideo" id=subtitle]]
+[[!template text="the object construction code," start="00:30:10.720" video="mainVideo" id=subtitle]]
+[[!template text="that was where most of the time" start="00:30:14.320" video="mainVideo" id=subtitle]]
+[[!template text="was spent unnecessarily," start="00:30:16.559" video="mainVideo" id=subtitle]]
+[[!template text="maybe doing type-checking," start="00:30:21.200" video="mainVideo" id=subtitle]]
+[[!template text="maybe some other stuff." start="00:30:24.240" video="mainVideo" id=subtitle]]
+[[!template text="So if you have lots of values," start="00:30:28.880" video="mainVideo" id=subtitle]]
+[[!template text="you need to treat like objects in... and" start="00:30:36.080" video="mainVideo" id=subtitle]]
+[[!template text="virtual dispatch on them in your package," start="00:30:39.120" video="mainVideo" id=subtitle]]
+[[!template text="you might want to look into" start="00:30:42.000" video="mainVideo" id=subtitle]]
+[[!template text="cl-defstruct for them." start="00:30:45.200" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Going on to the next section," start="00:30:52.240" video="mainVideo" id=subtitle]]
+[[!template text="I have prepared the sort of comparison" start="00:30:54.080" video="mainVideo" id=subtitle]]
+[[!template text="between cl-lib, dash, and seq," start="00:31:01.200" video="mainVideo" id=subtitle]]
+[[!template text="the collection libraries we have" start="00:31:05.519" video="mainVideo" id=subtitle]]
+[[!template text="available for us in Emacs." start="00:31:09.360" video="mainVideo" id=subtitle]]
+[[!template text="That is the popular ones," start="00:31:11.279" video="mainVideo" id=subtitle]]
+[[!template text="but since I'm running behind on time," start="00:31:15.760" video="mainVideo" id=subtitle]]
+[[!template text="I'll probably just summarize the findings." start="00:31:21.440" video="mainVideo" id=subtitle]]
+[[!template text="First of all, seq is nice." start="00:31:27.760" video="mainVideo" id=subtitle]]
+[[!template text="Its generic approach is probably" start="00:31:31.919" video="mainVideo" id=subtitle]]
+[[!template text="quite decent for most of the situations," start="00:31:38.480" video="mainVideo" id=subtitle]]
+[[!template text="but there are places where it could be" start="00:31:41.919" video="mainVideo" id=subtitle]]
+[[!template text="optimized better, so instead of having" start="00:31:49.840" video="mainVideo" id=subtitle]]
+[[!template text="quadratic performance, it could use a" start="00:31:53.679" video="mainVideo" id=subtitle]]
+[[!template text="hash table, like for instance," start="00:31:56.399" video="mainVideo" id=subtitle]]
+[[!template text="dash does here--" start="00:31:59.200" video="mainVideo" id=subtitle]]
+[[!template text="in dash, union or delete-dups" start="00:32:02.000" video="mainVideo" id=subtitle]]
+[[!template text="does in its implementation." start="00:32:06.240" video="mainVideo" id=subtitle]]
+[[!template text="The dash itself is curiously fast," start="00:32:12.960" video="mainVideo" id=subtitle]]
+[[!template text="at least faster than I might have expected," start="00:32:16.640" video="mainVideo" id=subtitle]]
+[[!template text="possibly because of" start="00:32:20.000" video="mainVideo" id=subtitle]]
+[[!template text="the implementation approach" start="00:32:21.600" video="mainVideo" id=subtitle]]
+[[!template text="where it uses code generation" start="00:32:25.120" video="mainVideo" id=subtitle]]
+[[!template text="to avoid function calls," start="00:32:33.200" video="mainVideo" id=subtitle]]
+[[!template text="at least some of them," start="00:32:35.840" video="mainVideo" id=subtitle]]
+[[!template text="which is interesting." start="00:32:37.840" video="mainVideo" id=subtitle]]
+[[!template text="But since both seq and dash" start="00:32:41.120" video="mainVideo" id=subtitle]]
+[[!template text="avoid mutations--they don't really have" start="00:32:45.600" video="mainVideo" id=subtitle]]
+[[!template text="mutating counterparts to common functions" start="00:32:49.919" video="mainVideo" id=subtitle]]
+[[!template text="like you have with cl-remove-if, cl-delete-if," start="00:32:52.399" video="mainVideo" id=subtitle]]
+[[!template text="or just cl-remove, cl-delete," start="00:32:56.480" video="mainVideo" id=subtitle]]
+[[!template text="it still can be valuable to look into" start="00:33:02.000" video="mainVideo" id=subtitle]]
+[[!template text="destructive versions of those functions," start="00:33:08.000" video="mainVideo" id=subtitle]]
+[[!template text="something from the core library" start="00:33:12.240" video="mainVideo" id=subtitle]]
+[[!template text="like delete-dups or nreverse," start="00:33:16.880" video="mainVideo" id=subtitle]]
+[[!template text="for your code when you're really trying" start="00:33:22.559" video="mainVideo" id=subtitle]]
+[[!template text="to get as close to the metal" start="00:33:24.399" video="mainVideo" id=subtitle]]
+[[!template text="or whatever as you can," start="00:33:29.519" video="mainVideo" id=subtitle]]
+[[!template text="because avoiding extra allocations," start="00:33:34.320" video="mainVideo" id=subtitle]]
+[[!template text="it can really be useful." start="00:33:40.080" video="mainVideo" id=subtitle]]
+[[!template text="You can really improve their performance" start="00:33:43.200" video="mainVideo" id=subtitle]]
+[[!template text="if you don't do a lot of other stuff." start="00:33:46.159" video="mainVideo" id=subtitle]]
+[[!template text="delete-consecutive-dups is blazing faster." start="00:33:54.080" video="mainVideo" id=subtitle]]
+[[!template text="It only requires pre-sorted strings." start="00:34:00.080" video="mainVideo" id=subtitle]]
+[[!template text="What else to say..." start="00:34:03.919" video="mainVideo" id=subtitle]]
+[[!template text="If you are going to read these measurements," start="00:34:08.399" video="mainVideo" id=subtitle]]
+[[!template text="make sure to keep in mind" start="00:34:13.200" video="mainVideo" id=subtitle]]
+[[!template text="that reverse is not free," start="00:34:15.359" video="mainVideo" id=subtitle]]
+[[!template text="so for instance, if we're looking" start="00:34:18.000" video="mainVideo" id=subtitle]]
+[[!template text="at this comparison" start="00:34:20.240" video="mainVideo" id=subtitle]]
+[[!template text="between remove and delete, for instance," start="00:34:22.480" video="mainVideo" id=subtitle]]
+[[!template text="they're using reverse" start="00:34:26.399" video="mainVideo" id=subtitle]]
+[[!template text="to avoid modifying the data," start="00:34:27.919" video="mainVideo" id=subtitle]]
+[[!template text="the sample data, so we don't have to" start="00:34:32.159" video="mainVideo" id=subtitle]]
+[[!template text="create it every time." start="00:34:34.800" video="mainVideo" id=subtitle]]
+[[!template text="But to compare how much faster" start="00:34:36.720" video="mainVideo" id=subtitle]]
+[[!template text="delete is than remove," start="00:34:41.919" video="mainVideo" id=subtitle]]
+[[!template text="we need to subtract 787 milliseconds" start="00:34:43.760" video="mainVideo" id=subtitle]]
+[[!template text="from here and from here" start="00:34:50.800" video="mainVideo" id=subtitle]]
+[[!template text="so it comes out to like 230 milliseconds" start="00:34:52.320" video="mainVideo" id=subtitle]]
+[[!template text="in this example, the last example," start="00:34:58.480" video="mainVideo" id=subtitle]]
+[[!template text="and 100 to 1 second, 250 milliseconds here," start="00:35:02.560" video="mainVideo" id=subtitle]]
+[[!template text="so the difference is 5-fold here." start="00:35:12.000" video="mainVideo" id=subtitle]]
+[[!template text="Not 2-fold." start="00:35:17.599" video="mainVideo" id=subtitle]]
+[[!template text="All right. With this, I'm going to" start="00:35:20.160" video="mainVideo" id=subtitle]]
+[[!template text="thank you for listening, for watching" start="00:35:26.480" video="mainVideo" id=subtitle]]
+[[!template text="and I'll be taking questions." start="00:35:29.520" video="mainVideo" id=subtitle]]
+[[!template text="Thank you." start="00:35:31.920" video="mainVideo" id=subtitle]]
+[[!template text="captions by sachac" start="00:35:32.920" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/forever.md b/2021/captions/forever.md
new file mode 100644
index 00000000..c9a7f9f3
--- /dev/null
+++ b/2021/captions/forever.md
@@ -0,0 +1,894 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hi everyone! I'm very excited" start="00:00:01.280" video="mainVideo" id=subtitle]]
+[[!template text="to be here at EmacsConf 2021 today" start="00:00:02.800" video="mainVideo" id=subtitle]]
+[[!template text="to give my talk called" start="00:00:05.200" video="mainVideo" id=subtitle]]
+[[!template text="&quot;M-x Forever: How Emacs Will Outlast" start="00:00:06.640" video="mainVideo" id=subtitle]]
+[[!template text="Text Editor Trends.&quot;" start="00:00:09.360" video="mainVideo" id=subtitle]]
+[[!template text="So let's start with the conclusion first." start="00:00:11.519" video="mainVideo" id=subtitle]]
+[[!template text="I know, it's a little bit unorthodox," start="00:00:13.759" video="mainVideo" id=subtitle]]
+[[!template text="but let's just try and see what happens." start="00:00:15.040" video="mainVideo" id=subtitle]]
+[[!template text="So no matter what happens" start="00:00:16.960" video="mainVideo" id=subtitle]]
+[[!template text="in the wider software world," start="00:00:18.400" video="mainVideo" id=subtitle]]
+[[!template text="GNU Emacs will continue to be" start="00:00:19.760" video="mainVideo" id=subtitle]]
+[[!template text="a beloved program" start="00:00:21.520" video="mainVideo" id=subtitle]]
+[[!template text="with a dedicated community" start="00:00:22.640" video="mainVideo" id=subtitle]]
+[[!template text="and a healthy team" start="00:00:24.080" video="mainVideo" id=subtitle]]
+[[!template text="of maintainers and contributors." start="00:00:25.199" video="mainVideo" id=subtitle]]
+[[!template new="1" text="You're probably wondering" start="00:00:28.080" video="mainVideo" id=subtitle]]
+[[!template text="who am I to be making such a claim," start="00:00:29.439" video="mainVideo" id=subtitle]]
+[[!template text="so I'll tell you." start="00:00:31.141" video="mainVideo" id=subtitle]]
+[[!template text="I am David Wilson, the creator of the" start="00:00:32.640" video="mainVideo" id=subtitle]]
+[[!template text="System Crafters YouTube channel" start="00:00:34.640" video="mainVideo" id=subtitle]]
+[[!template text="and community. If you want to see" start="00:00:36.000" video="mainVideo" id=subtitle]]
+[[!template text="a lot of really great videos" start="00:00:38.079" video="mainVideo" id=subtitle]]
+[[!template text="about GNU Emacs, GNU Guix, etc.," start="00:00:39.040" video="mainVideo" id=subtitle]]
+[[!template text="come check out my YouTube channel." start="00:00:41.280" video="mainVideo" id=subtitle]]
+[[!template text="I'm also on LBRY and Odysee" start="00:00:42.719" video="mainVideo" id=subtitle]]
+[[!template text="if you don't want to go use YouTubea" start="00:00:44.480" video="mainVideo" id=subtitle]]
+[[!template text="And also, if you're the type of person" start="00:00:46.399" video="mainVideo" id=subtitle]]
+[[!template text="who doesn't want to use" start="00:00:47.360" video="mainVideo" id=subtitle]]
+[[!template text="any of these websites" start="00:00:48.399" video="mainVideo" id=subtitle]]
+[[!template text="and you want to see my videos anyway," start="00:00:49.680" video="mainVideo" id=subtitle]]
+[[!template text="please just send me an email" start="00:00:51.039" video="mainVideo" id=subtitle]]
+[[!template text="at the email address below" start="00:00:52.160" video="mainVideo" id=subtitle]]
+[[!template text="and I'll see if I can set you up" start="00:00:53.280" video="mainVideo" id=subtitle]]
+[[!template text="with that. You can also check out" start="00:00:54.079" video="mainVideo" id=subtitle]]
+[[!template text="my website and the places where we chat," start="00:00:55.520" video="mainVideo" id=subtitle]]
+[[!template text="especially on libera.chat" start="00:00:58.160" video="mainVideo" id=subtitle]]
+[[!template text="at the #systemcrafters channel." start="00:00:59.440" video="mainVideo" id=subtitle]]
+[[!template text="If you have any thoughts" start="00:01:01.440" video="mainVideo" id=subtitle]]
+[[!template text="after seeing this talk," start="00:01:02.719" video="mainVideo" id=subtitle]]
+[[!template text="please feel free to send me an email" start="00:01:03.600" video="mainVideo" id=subtitle]]
+[[!template text="or find me on chat." start="00:01:04.799" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So there is a recurring concern" start="00:01:07.200" video="mainVideo" id=subtitle]]
+[[!template text="in the Emacs community" start="00:01:09.920" video="mainVideo" id=subtitle]]
+[[!template text="about its popularity." start="00:01:11.119" video="mainVideo" id=subtitle]]
+[[!template text="This is something that keeps coming back" start="00:01:12.799" video="mainVideo" id=subtitle]]
+[[!template text="time and time again. You probably see it" start="00:01:14.320" video="mainVideo" id=subtitle]]
+[[!template text="every year or two where people on Reddit" start="00:01:16.479" video="mainVideo" id=subtitle]]
+[[!template text="or maybe on the emacs-devel" start="00:01:18.640" video="mainVideo" id=subtitle]]
+[[!template text="mailing list are talking about ways" start="00:01:19.840" video="mainVideo" id=subtitle]]
+[[!template text="to increase Emacs popularity." start="00:01:21.600" video="mainVideo" id=subtitle]]
+[[!template text="More recently, there was a discussion" start="00:01:24.000" video="mainVideo" id=subtitle]]
+[[!template text="on Hacker News where somebody posted" start="00:01:25.600" video="mainVideo" id=subtitle]]
+[[!template text="a link to this" start="00:01:27.600" video="mainVideo" id=subtitle]]
+[[!template text="Making Emacs Popular Again blog post" start="00:01:28.159" video="mainVideo" id=subtitle]]
+[[!template text="which does chronicle some of the" start="00:01:31.360" video="mainVideo" id=subtitle]]
+[[!template text="more recent discussions on emacs-devel" start="00:01:32.479" video="mainVideo" id=subtitle]]
+[[!template text="about things that could be done" start="00:01:34.479" video="mainVideo" id=subtitle]]
+[[!template text="to make Emacs a more popular editor." start="00:01:35.840" video="mainVideo" id=subtitle]]
+[[!template text="So the title of my talk claims" start="00:01:38.479" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs is going to" start="00:01:40.079" video="mainVideo" id=subtitle]]
+[[!template text="outlast text editor trends." start="00:01:41.280" video="mainVideo" id=subtitle]]
+[[!template text="So to elaborate on this claim," start="00:01:43.759" video="mainVideo" id=subtitle]]
+[[!template text="we're going to try to answer" start="00:01:45.840" video="mainVideo" id=subtitle]]
+[[!template text="a few specific questions." start="00:01:46.799" video="mainVideo" id=subtitle]]
+[[!template text="First of all, what is popularity" start="00:01:48.720" video="mainVideo" id=subtitle]]
+[[!template text="and how do you even measure it?" start="00:01:51.200" video="mainVideo" id=subtitle]]
+[[!template text="If people are saying" start="00:01:53.280" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs needs to be more popular," start="00:01:54.240" video="mainVideo" id=subtitle]]
+[[!template text="then what do we really mean" start="00:01:55.920" video="mainVideo" id=subtitle]]
+[[!template text="by popularity?" start="00:01:57.040" video="mainVideo" id=subtitle]]
+[[!template text="Also, what are the benefits" start="00:01:59.040" video="mainVideo" id=subtitle]]
+[[!template text="of popularity? If emacs did somehow" start="00:02:00.159" video="mainVideo" id=subtitle]]
+[[!template text="become more popular, what benefits" start="00:02:01.920" video="mainVideo" id=subtitle]]
+[[!template text="would it receive from that?" start="00:02:03.920" video="mainVideo" id=subtitle]]
+[[!template text="And also, how does an editor" start="00:02:05.680" video="mainVideo" id=subtitle]]
+[[!template text="lose popularity, and what are" start="00:02:07.439" video="mainVideo" id=subtitle]]
+[[!template text="the possible consequences to that?" start="00:02:08.720" video="mainVideo" id=subtitle]]
+[[!template text="And then what are the unique factors" start="00:02:11.120" video="mainVideo" id=subtitle]]
+[[!template text="about Emacs that will ensure" start="00:02:12.480" video="mainVideo" id=subtitle]]
+[[!template text="that it survives long term?" start="00:02:13.680" video="mainVideo" id=subtitle]]
+[[!template text="What is special about Emacs" start="00:02:16.000" video="mainVideo" id=subtitle]]
+[[!template text="that will help it to thrive" start="00:02:17.520" video="mainVideo" id=subtitle]]
+[[!template text="despite whatever happens in the" start="00:02:19.440" video="mainVideo" id=subtitle]]
+[[!template text="popular sphere of text editors and" start="00:02:21.920" video="mainVideo" id=subtitle]]
+[[!template text="programming languages, etc.?" start="00:02:24.560" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, first of all, what does popularity" start="00:02:26.959" video="mainVideo" id=subtitle]]
+[[!template text="really mean? When someone says" start="00:02:28.800" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs needs to become more popular," start="00:02:30.720" video="mainVideo" id=subtitle]]
+[[!template text="what are they really saying" start="00:02:32.400" video="mainVideo" id=subtitle]]
+[[!template text="is that there needs to be more users," start="00:02:33.680" video="mainVideo" id=subtitle]]
+[[!template text="and that they stick around." start="00:02:35.840" video="mainVideo" id=subtitle]]
+[[!template text="Like, they learn how to use Emacs" start="00:02:37.102" video="mainVideo" id=subtitle]]
+[[!template text="and they continue to be users." start="00:02:38.800" video="mainVideo" id=subtitle]]
+[[!template text="If we did get those new users," start="00:02:41.680" video="mainVideo" id=subtitle]]
+[[!template text="what would it actually do for Emacs?" start="00:02:42.800" video="mainVideo" id=subtitle]]
+[[!template text="Also, is it that there are" start="00:02:45.599" video="mainVideo" id=subtitle]]
+[[!template text="more community members that are" start="00:02:47.440" video="mainVideo" id=subtitle]]
+[[!template text="creating new packages?" start="00:02:48.959" video="mainVideo" id=subtitle]]
+[[!template text="You know, that sort of assumes" start="00:02:51.040" video="mainVideo" id=subtitle]]
+[[!template text="that the editor itself" start="00:02:52.480" video="mainVideo" id=subtitle]]
+[[!template text="doesn't have enough packages," start="00:02:53.519" video="mainVideo" id=subtitle]]
+[[!template text="or that the only way" start="00:02:54.720" video="mainVideo" id=subtitle]]
+[[!template text="that the an editor stays alive" start="00:02:55.519" video="mainVideo" id=subtitle]]
+[[!template text="is for there to be constant churn," start="00:02:57.120" video="mainVideo" id=subtitle]]
+[[!template text="with new packages coming around." start="00:02:58.800" video="mainVideo" id=subtitle]]
+[[!template text="Is it that there is more content" start="00:03:01.440" video="mainVideo" id=subtitle]]
+[[!template text="being created by users," start="00:03:03.120" video="mainVideo" id=subtitle]]
+[[!template text="like more blog posts being written," start="00:03:04.319" video="mainVideo" id=subtitle]]
+[[!template text="more YouTube videos being made," start="00:03:05.840" video="mainVideo" id=subtitle]]
+[[!template text="more other ways that people are" start="00:03:07.920" video="mainVideo" id=subtitle]]
+[[!template text="evangelizing the use of Emacs" start="00:03:09.360" video="mainVideo" id=subtitle]]
+[[!template text="and also teaching people how to use it?" start="00:03:11.599" video="mainVideo" id=subtitle]]
+[[!template text="Also, is it that" start="00:03:14.720" video="mainVideo" id=subtitle]]
+[[!template text="more long-term stability is had" start="00:03:16.080" video="mainVideo" id=subtitle]]
+[[!template text="in the editor, and more core" start="00:03:18.720" video="mainVideo" id=subtitle]]
+[[!template text="improvements that are being made" start="00:03:20.159" video="mainVideo" id=subtitle]]
+[[!template text="over time? I mean, I guess you could say" start="00:03:21.280" video="mainVideo" id=subtitle]]
+[[!template text="that it does make sense" start="00:03:22.879" video="mainVideo" id=subtitle]]
+[[!template text="that if the editor is more popular," start="00:03:23.760" video="mainVideo" id=subtitle]]
+[[!template text="then people will be more invested" start="00:03:25.680" video="mainVideo" id=subtitle]]
+[[!template text="in improving it, and there will be" start="00:03:26.959" video="mainVideo" id=subtitle]]
+[[!template text="more new contributors coming in," start="00:03:28.080" video="mainVideo" id=subtitle]]
+[[!template text="but is greater and greater popularity" start="00:03:30.000" video="mainVideo" id=subtitle]]
+[[!template text="really what's needed" start="00:03:32.480" video="mainVideo" id=subtitle]]
+[[!template text="to ensure that this happens?" start="00:03:33.280" video="mainVideo" id=subtitle]]
+[[!template text="Also, it could just be that" start="00:03:35.280" video="mainVideo" id=subtitle]]
+[[!template text="there's more validation" start="00:03:37.040" video="mainVideo" id=subtitle]]
+[[!template text="for someone's personal choices." start="00:03:38.080" video="mainVideo" id=subtitle]]
+[[!template text="You know, people tend to use" start="00:03:40.480" video="mainVideo" id=subtitle]]
+[[!template text="these software choices they use" start="00:03:42.159" video="mainVideo" id=subtitle]]
+[[!template text="as part of their identity." start="00:03:43.760" video="mainVideo" id=subtitle]]
+[[!template text="So is it that they want Emacs" start="00:03:44.799" video="mainVideo" id=subtitle]]
+[[!template text="to be more popular" start="00:03:46.000" video="mainVideo" id=subtitle]]
+[[!template text="so that they can finally say," start="00:03:46.799" video="mainVideo" id=subtitle]]
+[[!template text="&quot;I'm an Emacs user,&quot;" start="00:03:48.319" video="mainVideo" id=subtitle]]
+[[!template text="and have people think" start="00:03:49.440" video="mainVideo" id=subtitle]]
+[[!template text="that they're cool or &quot;hip&quot; or whatever?" start="00:03:50.080" video="mainVideo" id=subtitle]]
+[[!template text="I hope that... Hopefully," start="00:03:51.840" video="mainVideo" id=subtitle]]
+[[!template text="that's not the case." start="00:03:52.720" video="mainVideo" id=subtitle]]
+[[!template text="Hopefully, it's one of these" start="00:03:53.370" video="mainVideo" id=subtitle]]
+[[!template text="other points. But it could be something" start="00:03:54.239" video="mainVideo" id=subtitle]]
+[[!template text="because, as we see, you know," start="00:03:56.000" video="mainVideo" id=subtitle]]
+[[!template text="there's a lot of trends and fashion" start="00:03:57.120" video="mainVideo" id=subtitle]]
+[[!template text="when it comes to software development" start="00:03:59.439" video="mainVideo" id=subtitle]]
+[[!template text="and also free software" start="00:04:00.879" video="mainVideo" id=subtitle]]
+[[!template text="and open source tools." start="00:04:02.640" video="mainVideo" id=subtitle]]
+[[!template text="So as we go through this talk," start="00:04:04.159" video="mainVideo" id=subtitle]]
+[[!template text="keep these questions in mind" start="00:04:05.840" video="mainVideo" id=subtitle]]
+[[!template text="as we talk about" start="00:04:07.200" video="mainVideo" id=subtitle]]
+[[!template text="some of the finer points on all of this," start="00:04:07.760" video="mainVideo" id=subtitle]]
+[[!template text="and see whether you think" start="00:04:09.680" video="mainVideo" id=subtitle]]
+[[!template text="that popularity really correlates" start="00:04:11.280" video="mainVideo" id=subtitle]]
+[[!template text="with these things." start="00:04:13.680" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So first of all, how do we measure" start="00:04:15.680" video="mainVideo" id=subtitle]]
+[[!template text="popularity? What information do we have" start="00:04:17.919" video="mainVideo" id=subtitle]]
+[[!template text="to actually determine" start="00:04:20.720" video="mainVideo" id=subtitle]]
+[[!template text="which editors are popular," start="00:04:21.600" video="mainVideo" id=subtitle]]
+[[!template text="and whether they're gaining or losing" start="00:04:23.360" video="mainVideo" id=subtitle]]
+[[!template text="popularity? So I've got a few," start="00:04:25.199" video="mainVideo" id=subtitle]]
+[[!template text="or a couple places here" start="00:04:26.880" video="mainVideo" id=subtitle]]
+[[!template text="that we can look at" start="00:04:27.759" video="mainVideo" id=subtitle]]
+[[!template text="to judge the popularity" start="00:04:29.120" video="mainVideo" id=subtitle]]
+[[!template text="of various editors." start="00:04:30.560" video="mainVideo" id=subtitle]]
+[[!template new="1" text="First of all, Google Trends." start="00:04:32.400" video="mainVideo" id=subtitle]]
+[[!template text="Google actually gives us the ability" start="00:04:33.840" video="mainVideo" id=subtitle]]
+[[!template text="to track and compare search volume" start="00:04:35.199" video="mainVideo" id=subtitle]]
+[[!template text="for particular terms and topics" start="00:04:37.199" video="mainVideo" id=subtitle]]
+[[!template text="over time. So if you wanted to know" start="00:04:39.040" video="mainVideo" id=subtitle]]
+[[!template text="how often someone was searching" start="00:04:41.759" video="mainVideo" id=subtitle]]
+[[!template text="about Emacs, maybe to try to find help" start="00:04:43.040" video="mainVideo" id=subtitle]]
+[[!template text="for something, or look for documentation," start="00:04:44.800" video="mainVideo" id=subtitle]]
+[[!template text="or maybe look for blog posts, etc.," start="00:04:46.479" video="mainVideo" id=subtitle]]
+[[!template text="you can look at Google Trends" start="00:04:48.800" video="mainVideo" id=subtitle]]
+[[!template text="to see how often people are searching" start="00:04:49.919" video="mainVideo" id=subtitle]]
+[[!template text="for Emacs over time." start="00:04:51.600" video="mainVideo" id=subtitle]]
+[[!template text="One useful ability is that we can" start="00:04:53.440" video="mainVideo" id=subtitle]]
+[[!template text="compare how much people are searching" start="00:04:55.199" video="mainVideo" id=subtitle]]
+[[!template text="across various different topics" start="00:04:57.360" video="mainVideo" id=subtitle]]
+[[!template text="and see a graph, which is" start="00:04:58.720" video="mainVideo" id=subtitle]]
+[[!template text="what i'm going to show you right now." start="00:05:00.000" video="mainVideo" id=subtitle]]
+[[!template text="This graph shows you the search volume" start="00:05:01.680" video="mainVideo" id=subtitle]]
+[[!template text="for Emacs compared to Vim, Atom," start="00:05:04.000" video="mainVideo" id=subtitle]]
+[[!template text="Sublime Text, and Visual Studio Code" start="00:05:06.320" video="mainVideo" id=subtitle]]
+[[!template text="from 2004 to the present" start="00:05:08.800" video="mainVideo" id=subtitle]]
+[[!template text="worldwide, so all across the world" start="00:05:11.120" video="mainVideo" id=subtitle]]
+[[!template text="where searches are happening." start="00:05:12.880" video="mainVideo" id=subtitle]]
+[[!template text="You can see that in 2004," start="00:05:14.479" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is the reigning king supreme" start="00:05:16.240" video="mainVideo" id=subtitle]]
+[[!template text="where you have the most search terms" start="00:05:18.479" video="mainVideo" id=subtitle]]
+[[!template text="or searches happening on emacs" start="00:05:21.039" video="mainVideo" id=subtitle]]
+[[!template text="at that time. Also, Vim is quite high" start="00:05:22.720" video="mainVideo" id=subtitle]]
+[[!template text="on this list as well." start="00:05:25.199" video="mainVideo" id=subtitle]]
+[[!template text="Let's see. Sublime Text is a bit lower" start="00:05:26.960" video="mainVideo" id=subtitle]]
+[[!template text="in the list, but it's in third place." start="00:05:28.560" video="mainVideo" id=subtitle]]
+[[!template text="Nope. Yep. That's right." start="00:05:31.120" video="mainVideo" id=subtitle]]
+[[!template text="Then atom is quite low, but I think that" start="00:05:32.080" video="mainVideo" id=subtitle]]
+[[!template text="Atom didn't exist yet," start="00:05:34.880" video="mainVideo" id=subtitle]]
+[[!template text="so maybe at that point, you know," start="00:05:36.320" video="mainVideo" id=subtitle]]
+[[!template text="this is probably something else." start="00:05:37.759" video="mainVideo" id=subtitle]]
+[[!template text="Google is just getting random data." start="00:05:39.120" video="mainVideo" id=subtitle]]
+[[!template text="And then Visual Studio Code" start="00:05:41.360" video="mainVideo" id=subtitle]]
+[[!template text="also didn't exist," start="00:05:42.880" video="mainVideo" id=subtitle]]
+[[!template text="so probably this is like" start="00:05:43.919" video="mainVideo" id=subtitle]]
+[[!template text="Visual Studio searches," start="00:05:45.039" video="mainVideo" id=subtitle]]
+[[!template text="but then as you go across the years," start="00:05:46.479" video="mainVideo" id=subtitle]]
+[[!template text="you see that gradually," start="00:05:48.000" video="mainVideo" id=subtitle]]
+[[!template text="Emacs popularity appears to be declining." start="00:05:48.960" video="mainVideo" id=subtitle]]
+[[!template text="As does Vim, but not quite so much." start="00:05:52.160" video="mainVideo" id=subtitle]]
+[[!template text="And then over time, Sublime Text" start="00:05:54.639" video="mainVideo" id=subtitle]]
+[[!template text="becomes more popular," start="00:05:56.560" video="mainVideo" id=subtitle]]
+[[!template text="and then VS Code in more recent years" start="00:05:57.520" video="mainVideo" id=subtitle]]
+[[!template text="becomes very popular" start="00:05:59.280" video="mainVideo" id=subtitle]]
+[[!template text="compared to everything else." start="00:06:00.319" video="mainVideo" id=subtitle]]
+[[!template text="So it looks like Emacs" start="00:06:02.400" video="mainVideo" id=subtitle]]
+[[!template text="has declined significantly in popularity," start="00:06:04.479" video="mainVideo" id=subtitle]]
+[[!template text="while the other editors have taken over." start="00:06:06.960" video="mainVideo" id=subtitle]]
+[[!template text="But is the search volume really" start="00:06:09.600" video="mainVideo" id=subtitle]]
+[[!template text="the only important factor" start="00:06:11.360" video="mainVideo" id=subtitle]]
+[[!template text="that indicates popularity or health" start="00:06:12.800" video="mainVideo" id=subtitle]]
+[[!template text="of a given editor?" start="00:06:14.800" video="mainVideo" id=subtitle]]
+[[!template text="That still remains to be seen." start="00:06:16.080" video="mainVideo" id=subtitle]]
+[[!template new="1" text="We can also take a look" start="00:06:18.319" video="mainVideo" id=subtitle]]
+[[!template text="at the yearly survey" start="00:06:19.680" video="mainVideo" id=subtitle]]
+[[!template text="that the website Stack Overflow puts out" start="00:06:22.400" video="mainVideo" id=subtitle]]
+[[!template text="asking developers about the tools" start="00:06:24.602" video="mainVideo" id=subtitle]]
+[[!template text="that they use to find out" start="00:06:26.533" video="mainVideo" id=subtitle]]
+[[!template text="which ones are being used" start="00:06:27.360" video="mainVideo" id=subtitle]]
+[[!template text="most frequently and that are" start="00:06:28.720" video="mainVideo" id=subtitle]]
+[[!template text="gaining popularity over time." start="00:06:29.759" video="mainVideo" id=subtitle]]
+[[!template text="So there is a great blog post" start="00:06:31.919" video="mainVideo" id=subtitle]]
+[[!template text="by someone named Roben Kleene," start="00:06:33.680" video="mainVideo" id=subtitle]]
+[[!template text="who synthesizes some" start="00:06:35.039" video="mainVideo" id=subtitle]]
+[[!template text="of this data together," start="00:06:37.039" video="mainVideo" id=subtitle]]
+[[!template text="specifically about editors," start="00:06:37.840" video="mainVideo" id=subtitle]]
+[[!template text="and provides us with a graph" start="00:06:39.120" video="mainVideo" id=subtitle]]
+[[!template text="that we can take a look at" start="00:06:40.240" video="mainVideo" id=subtitle]]
+[[!template text="that compares the popularity" start="00:06:41.680" video="mainVideo" id=subtitle]]
+[[!template text="of particular editors" start="00:06:43.440" video="mainVideo" id=subtitle]]
+[[!template text="in the last maybe four or five years," start="00:06:44.639" video="mainVideo" id=subtitle]]
+[[!template text="at least 2015 to 2019," start="00:06:46.560" video="mainVideo" id=subtitle]]
+[[!template text="based on the responses" start="00:06:49.199" video="mainVideo" id=subtitle]]
+[[!template text="to the Stack Overflow survey." start="00:06:50.560" video="mainVideo" id=subtitle]]
+[[!template text="In this case we see that" start="00:06:52.560" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is the light blue line," start="00:06:54.479" video="mainVideo" id=subtitle]]
+[[!template text="and it sort of stays in maybe, let's see," start="00:06:56.560" video="mainVideo" id=subtitle]]
+[[!template text="maybe third place in the beginning," start="00:06:59.440" video="mainVideo" id=subtitle]]
+[[!template text="and then fifth place," start="00:07:00.960" video="mainVideo" id=subtitle]]
+[[!template text="and basically just stays in fifth place" start="00:07:02.000" video="mainVideo" id=subtitle]]
+[[!template text="the whole time, compared to things like" start="00:07:03.520" video="mainVideo" id=subtitle]]
+[[!template text="Atom, Sublime Text, and VS Code." start="00:07:05.039" video="mainVideo" id=subtitle]]
+[[!template text="As we saw before, the VS Code" start="00:07:07.120" video="mainVideo" id=subtitle]]
+[[!template text="just sort of ramps up at the end." start="00:07:08.560" video="mainVideo" id=subtitle]]
+[[!template text="Now, this is another thing" start="00:07:10.960" video="mainVideo" id=subtitle]]
+[[!template text="that basically is showing us" start="00:07:13.199" video="mainVideo" id=subtitle]]
+[[!template text="similarly to the Google Trends" start="00:07:14.560" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs's popularity is not quite" start="00:07:17.039" video="mainVideo" id=subtitle]]
+[[!template text="as much as other editors out there." start="00:07:19.280" video="mainVideo" id=subtitle]]
+[[!template text="You can also look at the 2021 results" start="00:07:21.840" video="mainVideo" id=subtitle]]
+[[!template text="of the Stack Overflow survey," start="00:07:23.840" video="mainVideo" id=subtitle]]
+[[!template text="which I'll show you now," start="00:07:26.160" video="mainVideo" id=subtitle]]
+[[!template text="which shows Emacs in 16th place." start="00:07:27.199" video="mainVideo" id=subtitle]]
+[[!template text="Let's see. If we look here," start="00:07:30.319" video="mainVideo" id=subtitle]]
+[[!template text="we see Visual Studio Code" start="00:07:31.680" video="mainVideo" id=subtitle]]
+[[!template text="is the most popular, then we have" start="00:07:32.960" video="mainVideo" id=subtitle]]
+[[!template text="a whole bunch of other well-known editors." start="00:07:34.400" video="mainVideo" id=subtitle]]
+[[!template text="Some are kind of surprising," start="00:07:36.800" video="mainVideo" id=subtitle]]
+[[!template text="like Notepad++ is quite high up there," start="00:07:37.840" video="mainVideo" id=subtitle]]
+[[!template text="but then we have Emacs here" start="00:07:40.400" video="mainVideo" id=subtitle]]
+[[!template text="coming right in behind" start="00:07:42.080" video="mainVideo" id=subtitle]]
+[[!template text="PhpStorm and NetBeans," start="00:07:43.199" video="mainVideo" id=subtitle]]
+[[!template text="which is pretty funny to me." start="00:07:44.879" video="mainVideo" id=subtitle]]
+[[!template text="But it just goes to show you" start="00:07:46.400" video="mainVideo" id=subtitle]]
+[[!template text="that the Emacs community is smaller" start="00:07:48.879" video="mainVideo" id=subtitle]]
+[[!template text="than what you might consider" start="00:07:54.000" video="mainVideo" id=subtitle]]
+[[!template text="for other editors, or at least" start="00:07:55.599" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs user base, maybe." start="00:07:56.960" video="mainVideo" id=subtitle]]
+[[!template text="Maybe it's just the people" start="00:07:58.800" video="mainVideo" id=subtitle]]
+[[!template text="who actually respond to the survey." start="00:07:59.440" video="mainVideo" id=subtitle]]
+[[!template text="You can't really tell for sure" start="00:08:00.800" video="mainVideo" id=subtitle]]
+[[!template text="because all this data is coming from" start="00:08:02.080" video="mainVideo" id=subtitle]]
+[[!template text="a self-selected group of people" start="00:08:03.759" video="mainVideo" id=subtitle]]
+[[!template text="who have responded to the survey." start="00:08:05.039" video="mainVideo" id=subtitle]]
+[[!template text="So I think what... Basically," start="00:08:06.720" video="mainVideo" id=subtitle]]
+[[!template text="what I'm trying to say is that" start="00:08:08.879" video="mainVideo" id=subtitle]]
+[[!template text="if you look at all these things," start="00:08:10.560" video="mainVideo" id=subtitle]]
+[[!template text="you would probably get the perception" start="00:08:12.080" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs is dead" start="00:08:14.080" video="mainVideo" id=subtitle]]
+[[!template text="and that maybe nobody really" start="00:08:15.919" video="mainVideo" id=subtitle]]
+[[!template text="uses the editor anymore," start="00:08:17.199" video="mainVideo" id=subtitle]]
+[[!template text="or that it's on its way out." start="00:08:18.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="However, I think there's another way" start="00:08:20.000" video="mainVideo" id=subtitle]]
+[[!template text="to look at the health or popularity" start="00:08:21.599" video="mainVideo" id=subtitle]]
+[[!template text="of Emacs (or any other editor, really)," start="00:08:24.879" video="mainVideo" id=subtitle]]
+[[!template text="and that is to judge" start="00:08:27.280" video="mainVideo" id=subtitle]]
+[[!template text="the popularity and health" start="00:08:28.240" video="mainVideo" id=subtitle]]
+[[!template text="by taking a look" start="00:08:29.520" video="mainVideo" id=subtitle]]
+[[!template text="at the community activity" start="00:08:30.240" video="mainVideo" id=subtitle]]
+[[!template text="in places such as Reddit," start="00:08:32.080" video="mainVideo" id=subtitle]]
+[[!template text="or maybe on Discord servers," start="00:08:33.680" video="mainVideo" id=subtitle]]
+[[!template text="Slack servers, IRC channels," start="00:08:35.760" video="mainVideo" id=subtitle]]
+[[!template text="mailing lists, particularly" start="00:08:38.880" video="mainVideo" id=subtitle]]
+[[!template text="on emacs-devel," start="00:08:40.000" video="mainVideo" id=subtitle]]
+[[!template text="where all of the conversation" start="00:08:41.120" video="mainVideo" id=subtitle]]
+[[!template text="about the development of Emacs happens." start="00:08:42.640" video="mainVideo" id=subtitle]]
+[[!template text="Blogs. There's quite a lot of people" start="00:08:45.120" video="mainVideo" id=subtitle]]
+[[!template text="in the Emacs community" start="00:08:46.640" video="mainVideo" id=subtitle]]
+[[!template text="writing blog posts." start="00:08:47.519" video="mainVideo" id=subtitle]]
+[[!template text="There's quite a few YouTube channels now" start="00:08:48.959" video="mainVideo" id=subtitle]]
+[[!template text="making content about Emacs" start="00:08:50.640" video="mainVideo" id=subtitle]]
+[[!template text="pretty frequently, and then" start="00:08:52.399" video="mainVideo" id=subtitle]]
+[[!template text="conferences like this one, EmacsConf." start="00:08:53.839" video="mainVideo" id=subtitle]]
+[[!template text="If you've spent any time" start="00:08:56.880" video="mainVideo" id=subtitle]]
+[[!template text="in any of these places recently," start="00:08:58.399" video="mainVideo" id=subtitle]]
+[[!template text="did you actually get the sense" start="00:08:59.600" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs community lacks activity?" start="00:09:00.640" video="mainVideo" id=subtitle]]
+[[!template text="I personally don't." start="00:09:03.440" video="mainVideo" id=subtitle]]
+[[!template text="I see quite a lot of activity on Reddit," start="00:09:04.800" video="mainVideo" id=subtitle]]
+[[!template text="I see a lot of activity" start="00:09:06.560" video="mainVideo" id=subtitle]]
+[[!template text="in various other places," start="00:09:07.360" video="mainVideo" id=subtitle]]
+[[!template text="even my own chats that I've created." start="00:09:08.320" video="mainVideo" id=subtitle]]
+[[!template text="Lots of people talking about Emacs" start="00:09:11.040" video="mainVideo" id=subtitle]]
+[[!template text="every day. But this is harder to measure," start="00:09:12.480" video="mainVideo" id=subtitle]]
+[[!template text="because you would have to go count" start="00:09:16.320" video="mainVideo" id=subtitle]]
+[[!template text="all of the mailing list emails" start="00:09:18.160" video="mainVideo" id=subtitle]]
+[[!template text="compared to other editors," start="00:09:21.279" video="mainVideo" id=subtitle]]
+[[!template text="or maybe like the Reddit posts" start="00:09:22.560" video="mainVideo" id=subtitle]]
+[[!template text="compared to other editors." start="00:09:23.760" video="mainVideo" id=subtitle]]
+[[!template text="We could do that, but really," start="00:09:24.959" video="mainVideo" id=subtitle]]
+[[!template text="the more important thing" start="00:09:26.880" video="mainVideo" id=subtitle]]
+[[!template text="is to just go experience the community" start="00:09:27.839" video="mainVideo" id=subtitle]]
+[[!template text="by going to one of these places" start="00:09:29.920" video="mainVideo" id=subtitle]]
+[[!template text="and take a look at what's going on." start="00:09:31.279" video="mainVideo" id=subtitle]]
+[[!template text="You can get a really good sense of that" start="00:09:33.360" video="mainVideo" id=subtitle]]
+[[!template text="by checking out Sacha Chua's Emacs News" start="00:09:34.560" video="mainVideo" id=subtitle]]
+[[!template text="roll-up blog posts" start="00:09:37.760" video="mainVideo" id=subtitle]]
+[[!template text="that come out every week." start="00:09:39.120" video="mainVideo" id=subtitle]]
+[[!template text="It's a very good distillation of things" start="00:09:40.399" video="mainVideo" id=subtitle]]
+[[!template text="that are happening" start="00:09:42.000" video="mainVideo" id=subtitle]]
+[[!template text="in the Emacs community." start="00:09:42.560" video="mainVideo" id=subtitle]]
+[[!template text="If you look at those things" start="00:09:43.920" video="mainVideo" id=subtitle]]
+[[!template text="and look at all that," start="00:09:48.080" video="mainVideo" id=subtitle]]
+[[!template text="you can tell that there is actually" start="00:09:49.040" video="mainVideo" id=subtitle]]
+[[!template text="something happening" start="00:09:50.640" video="mainVideo" id=subtitle]]
+[[!template text="in the Emacs community" start="00:09:51.360" video="mainVideo" id=subtitle]]
+[[!template text="that is more than what you see" start="00:09:52.240" video="mainVideo" id=subtitle]]
+[[!template text="in the numbers on Google Trends" start="00:09:54.000" video="mainVideo" id=subtitle]]
+[[!template text="and on Stack Overflow." start="00:09:55.680" video="mainVideo" id=subtitle]]
+[[!template text="Another interesting point" start="00:09:58.080" video="mainVideo" id=subtitle]]
+[[!template text="that doesn't really fit into all this," start="00:09:59.200" video="mainVideo" id=subtitle]]
+[[!template text="but if you want to look" start="00:10:00.480" video="mainVideo" id=subtitle]]
+[[!template text="at the actual data" start="00:10:01.440" video="mainVideo" id=subtitle]]
+[[!template text="from the Emacs community" start="00:10:02.640" video="mainVideo" id=subtitle]]
+[[!template text="about how the community uses Emacs," start="00:10:03.920" video="mainVideo" id=subtitle]]
+[[!template text="check out the results" start="00:10:06.160" video="mainVideo" id=subtitle]]
+[[!template text="of the 2020 Emacs survey." start="00:10:06.880" video="mainVideo" id=subtitle]]
+[[!template text="I'm sure there's going to be" start="00:10:08.480" video="mainVideo" id=subtitle]]
+[[!template text="another Emacs survey at some point soon," start="00:10:09.040" video="mainVideo" id=subtitle]]
+[[!template text="as well, but that will give you" start="00:10:11.760" video="mainVideo" id=subtitle]]
+[[!template text="some insight into what's happening" start="00:10:13.120" video="mainVideo" id=subtitle]]
+[[!template text="within the community itself." start="00:10:14.480" video="mainVideo" id=subtitle]]
+[[!template text="You can see that" start="00:10:16.000" video="mainVideo" id=subtitle]]
+[[!template text="there's quite a lot of activity" start="00:10:16.399" video="mainVideo" id=subtitle]]
+[[!template text="and a lot of different use cases for Emacs" start="00:10:17.600" video="mainVideo" id=subtitle]]
+[[!template text="and types of people who are using Emacs." start="00:10:19.839" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's talk about" start="00:10:23.200" video="mainVideo" id=subtitle]]
+[[!template text="how editors lose popularity." start="00:10:24.000" video="mainVideo" id=subtitle]]
+[[!template text="So people are worried" start="00:10:26.079" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs is going to lose popularity." start="00:10:26.880" video="mainVideo" id=subtitle]]
+[[!template text="What do they worry is going to happen" start="00:10:29.360" video="mainVideo" id=subtitle]]
+[[!template text="if that happens?" start="00:10:31.440" video="mainVideo" id=subtitle]]
+[[!template text="Or how actually could it happen?" start="00:10:37.040" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So maybe a new editor" start="00:10:38.320" video="mainVideo" id=subtitle]]
+[[!template text="with better features appears." start="00:10:39.680" video="mainVideo" id=subtitle]]
+[[!template text="So one theory for why users" start="00:10:41.839" video="mainVideo" id=subtitle]]
+[[!template text="left TextMate for Sublime Text..." start="00:10:43.440" video="mainVideo" id=subtitle]]
+[[!template text="If you don't know about TextMate," start="00:10:45.920" video="mainVideo" id=subtitle]]
+[[!template text="it was a very popular editor on macOS" start="00:10:46.880" video="mainVideo" id=subtitle]]
+[[!template text="back probably in the Ruby on Rails craze" start="00:10:49.600" video="mainVideo" id=subtitle]]
+[[!template text="time frame, maybe like the mid-2000s," start="00:10:52.160" video="mainVideo" id=subtitle]]
+[[!template text="2005 or so. Then eventually Sublime Text" start="00:10:54.079" video="mainVideo" id=subtitle]]
+[[!template text="came along, and it had" start="00:10:57.200" video="mainVideo" id=subtitle]]
+[[!template text="a better extensibility API" start="00:10:59.519" video="mainVideo" id=subtitle]]
+[[!template text="and really good performance." start="00:11:01.360" video="mainVideo" id=subtitle]]
+[[!template text="It also was able to use" start="00:11:03.200" video="mainVideo" id=subtitle]]
+[[!template text="some of the same stuff from TextMate," start="00:11:05.200" video="mainVideo" id=subtitle]]
+[[!template text="like these syntax highlighting grammars" start="00:11:07.040" video="mainVideo" id=subtitle]]
+[[!template text="and the snippet definitions, etc." start="00:11:08.720" video="mainVideo" id=subtitle]]
+[[!template text="So you had TextMate" start="00:11:11.040" video="mainVideo" id=subtitle]]
+[[!template text="which was a well-loved editor," start="00:11:12.240" video="mainVideo" id=subtitle]]
+[[!template text="but then a new editor called Sublime Text" start="00:11:13.519" video="mainVideo" id=subtitle]]
+[[!template text="came along with better functionality," start="00:11:15.200" video="mainVideo" id=subtitle]]
+[[!template text="and people started switching over to it" start="00:11:17.200" video="mainVideo" id=subtitle]]
+[[!template text="because it could do more things" start="00:11:18.880" video="mainVideo" id=subtitle]]
+[[!template text="and the user had more ability" start="00:11:20.160" video="mainVideo" id=subtitle]]
+[[!template text="to add functionality to it." start="00:11:21.680" video="mainVideo" id=subtitle]]
+[[!template text="Also, VS Code came along" start="00:11:24.399" video="mainVideo" id=subtitle]]
+[[!template text="and used a similar model" start="00:11:26.880" video="mainVideo" id=subtitle]]
+[[!template text="to the Atom editor," start="00:11:27.920" video="mainVideo" id=subtitle]]
+[[!template text="basically being a web-based editor" start="00:11:29.120" video="mainVideo" id=subtitle]]
+[[!template text="using Electron," start="00:11:31.360" video="mainVideo" id=subtitle]]
+[[!template text="but it greatly improved upon performance" start="00:11:32.480" video="mainVideo" id=subtitle]]
+[[!template text="and IDE tooling ecosystem." start="00:11:34.640" video="mainVideo" id=subtitle]]
+[[!template text="For people getting real work done" start="00:11:36.640" video="mainVideo" id=subtitle]]
+[[!template text="with large projects," start="00:11:38.640" video="mainVideo" id=subtitle]]
+[[!template text="you need to have things like IntelliSense," start="00:11:39.519" video="mainVideo" id=subtitle]]
+[[!template text="and being able to find definitions" start="00:11:41.120" video="mainVideo" id=subtitle]]
+[[!template text="of functions or classes that are defined." start="00:11:42.800" video="mainVideo" id=subtitle]]
+[[!template text="So you have a new editor" start="00:11:45.839" video="mainVideo" id=subtitle]]
+[[!template text="that comes along" start="00:11:47.040" video="mainVideo" id=subtitle]]
+[[!template text="that has basically better functionality" start="00:11:47.519" video="mainVideo" id=subtitle]]
+[[!template text="than the one that was there before." start="00:11:49.440" video="mainVideo" id=subtitle]]
+[[!template text="But the thing is," start="00:11:51.279" video="mainVideo" id=subtitle]]
+[[!template text="if you have a new editor that comes along" start="00:11:52.399" video="mainVideo" id=subtitle]]
+[[!template text="with better functionality," start="00:11:53.760" video="mainVideo" id=subtitle]]
+[[!template text="it still has to be at least as good as" start="00:11:54.720" video="mainVideo" id=subtitle]]
+[[!template text="or better than the previous editor" start="00:11:57.120" video="mainVideo" id=subtitle]]
+[[!template text="for people to stick with it." start="00:11:58.800" video="mainVideo" id=subtitle]]
+[[!template text="So it's a very tall order" start="00:12:00.000" video="mainVideo" id=subtitle]]
+[[!template text="for someone to say" start="00:12:02.480" video="mainVideo" id=subtitle]]
+[[!template text="there's going to be some editor" start="00:12:03.680" video="mainVideo" id=subtitle]]
+[[!template text="that will come along" start="00:12:05.200" video="mainVideo" id=subtitle]]
+[[!template text="that would be better than Emacs" start="00:12:05.839" video="mainVideo" id=subtitle]]
+[[!template text="on every dimension," start="00:12:07.040" video="mainVideo" id=subtitle]]
+[[!template text="because there are some unique dimensions" start="00:12:08.240" video="mainVideo" id=subtitle]]
+[[!template text="that are hard to beat" start="00:12:09.680" video="mainVideo" id=subtitle]]
+[[!template text="in an editor like Emacs." start="00:12:11.360" video="mainVideo" id=subtitle]]
+[[!template text="Lack of sufficient maintenance." start="00:12:14.160" video="mainVideo" id=subtitle]]
+[[!template text="That's one thing" start="00:12:15.920" video="mainVideo" id=subtitle]]
+[[!template text="that could possibly happen" start="00:12:16.560" video="mainVideo" id=subtitle]]
+[[!template text="if an editor loses popularity." start="00:12:17.600" video="mainVideo" id=subtitle]]
+[[!template text="So maybe sometimes..." start="00:12:19.279" video="mainVideo" id=subtitle]]
+[[!template text="Sorry, that's something" start="00:12:20.687" video="mainVideo" id=subtitle]]
+[[!template text="that can cause a lack," start="00:12:22.480" video="mainVideo" id=subtitle]]
+[[!template text="a loss of popularity." start="00:12:23.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Sometimes the development team" start="00:12:25.680" video="mainVideo" id=subtitle]]
+[[!template text="for an editor either moves on" start="00:12:26.959" video="mainVideo" id=subtitle]]
+[[!template text="or maybe switches focus" start="00:12:28.320" video="mainVideo" id=subtitle]]
+[[!template text="to a different project." start="00:12:29.279" video="mainVideo" id=subtitle]]
+[[!template text="When this happens, the development" start="00:12:30.720" video="mainVideo" id=subtitle]]
+[[!template text="of the editor can stagnate," start="00:12:32.079" video="mainVideo" id=subtitle]]
+[[!template text="giving the impression that it's dead." start="00:12:33.360" video="mainVideo" id=subtitle]]
+[[!template text="You can see this happening" start="00:12:37.279" video="mainVideo" id=subtitle]]
+[[!template text="a lot of times on repositories" start="00:12:38.160" video="mainVideo" id=subtitle]]
+[[!template text="for open source projects," start="00:12:40.720" video="mainVideo" id=subtitle]]
+[[!template text="where if someone doesn't make any commits" start="00:12:41.920" video="mainVideo" id=subtitle]]
+[[!template text="or adding new features for a while," start="00:12:43.440" video="mainVideo" id=subtitle]]
+[[!template text="people just automatically assume" start="00:12:44.639" video="mainVideo" id=subtitle]]
+[[!template text="that the thing is dead," start="00:12:45.839" video="mainVideo" id=subtitle]]
+[[!template text="even if it's in a very stable state" start="00:12:46.880" video="mainVideo" id=subtitle]]
+[[!template text="and doesn't really need any improvements" start="00:12:48.399" video="mainVideo" id=subtitle]]
+[[!template text="to be made. This is something" start="00:12:49.920" video="mainVideo" id=subtitle]]
+[[!template text="that can happen over time." start="00:12:53.680" video="mainVideo" id=subtitle]]
+[[!template text="The developers of Sublime Text" start="00:12:55.360" video="mainVideo" id=subtitle]]
+[[!template text="sometimes give the impression" start="00:12:56.720" video="mainVideo" id=subtitle]]
+[[!template text="that the editor isn't being maintained" start="00:12:57.920" video="mainVideo" id=subtitle]]
+[[!template text="because of long breaks between updates," start="00:12:59.519" video="mainVideo" id=subtitle]]
+[[!template text="and this gives people..." start="00:13:02.000" video="mainVideo" id=subtitle]]
+[[!template text="If you go search for" start="00:13:03.360" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Is Sublime Text dead?&quot;," start="00:13:04.560" video="mainVideo" id=subtitle]]
+[[!template text="you'll see posts about this" start="00:13:05.440" video="mainVideo" id=subtitle]]
+[[!template text="every couple years," start="00:13:07.519" video="mainVideo" id=subtitle]]
+[[!template text="where people are wondering" start="00:13:08.240" video="mainVideo" id=subtitle]]
+[[!template text="what's happening with Sublime Text," start="00:13:09.120" video="mainVideo" id=subtitle]]
+[[!template text="when in reality, there's actually" start="00:13:10.320" video="mainVideo" id=subtitle]]
+[[!template text="development happening on this project," start="00:13:12.320" video="mainVideo" id=subtitle]]
+[[!template text="and paid users are getting these updates" start="00:13:15.120" video="mainVideo" id=subtitle]]
+[[!template text="because they've paid," start="00:13:18.160" video="mainVideo" id=subtitle]]
+[[!template text="but the product is not open source." start="00:13:19.279" video="mainVideo" id=subtitle]]
+[[!template text="You have no visibility" start="00:13:20.639" video="mainVideo" id=subtitle]]
+[[!template text="into the development." start="00:13:21.600" video="mainVideo" id=subtitle]]
+[[!template text="So if people have the perception" start="00:13:22.399" video="mainVideo" id=subtitle]]
+[[!template text="that the editor is not being maintained," start="00:13:24.639" video="mainVideo" id=subtitle]]
+[[!template text="then there's going to be" start="00:13:26.160" video="mainVideo" id=subtitle]]
+[[!template text="rumors getting started," start="00:13:26.880" video="mainVideo" id=subtitle]]
+[[!template text="and that could cause" start="00:13:28.079" video="mainVideo" id=subtitle]]
+[[!template text="the mentality of people to shift" start="00:13:29.200" video="mainVideo" id=subtitle]]
+[[!template text="and try to move on to other editors" start="00:13:30.959" video="mainVideo" id=subtitle]]
+[[!template text="because they perceive them to be" start="00:13:32.639" video="mainVideo" id=subtitle]]
+[[!template text="more well-maintained or more active." start="00:13:34.240" video="mainVideo" id=subtitle]]
+[[!template text="Another problem can be that there are" start="00:13:36.399" video="mainVideo" id=subtitle]]
+[[!template text="major bugs that persist over a long time" start="00:13:37.920" video="mainVideo" id=subtitle]]
+[[!template text="that aren't being fixed" start="00:13:39.839" video="mainVideo" id=subtitle]]
+[[!template text="while the maintainers are focusing on" start="00:13:41.040" video="mainVideo" id=subtitle]]
+[[!template text="some other efforts in the project," start="00:13:42.560" video="mainVideo" id=subtitle]]
+[[!template text="and this could hurt sentiment" start="00:13:44.639" video="mainVideo" id=subtitle]]
+[[!template text="in the community and cause a backlash" start="00:13:46.000" video="mainVideo" id=subtitle]]
+[[!template text="leading to an exodus." start="00:13:48.160" video="mainVideo" id=subtitle]]
+[[!template text="So if you have really bad bugs" start="00:13:49.120" video="mainVideo" id=subtitle]]
+[[!template text="and people think" start="00:13:51.120" video="mainVideo" id=subtitle]]
+[[!template text="that you're not really concerned" start="00:13:51.600" video="mainVideo" id=subtitle]]
+[[!template text="about fixing them," start="00:13:52.560" video="mainVideo" id=subtitle]]
+[[!template text="then that could be something" start="00:13:53.519" video="mainVideo" id=subtitle]]
+[[!template text="that would cause an editor" start="00:13:54.399" video="mainVideo" id=subtitle]]
+[[!template text="to lose popularity" start="00:13:55.360" video="mainVideo" id=subtitle]]
+[[!template text="as people move on to find something else" start="00:13:56.399" video="mainVideo" id=subtitle]]
+[[!template text="that appears to be more stable." start="00:13:58.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Lastly, sometimes all it takes is" start="00:14:01.040" video="mainVideo" id=subtitle]]
+[[!template text="for a new programming language" start="00:14:03.199" video="mainVideo" id=subtitle]]
+[[!template text="to become popular" start="00:14:04.480" video="mainVideo" id=subtitle]]
+[[!template text="or for an influential person to say" start="00:14:05.279" video="mainVideo" id=subtitle]]
+[[!template text="that they switched to a different editor," start="00:14:06.880" video="mainVideo" id=subtitle]]
+[[!template text="because people are capable of being led" start="00:14:08.720" video="mainVideo" id=subtitle]]
+[[!template text="by someone else who is influential," start="00:14:14.560" video="mainVideo" id=subtitle]]
+[[!template text="so sometimes it's just..." start="00:14:16.720" video="mainVideo" id=subtitle]]
+[[!template text="All it takes is someone to say, you know," start="00:14:18.320" video="mainVideo" id=subtitle]]
+[[!template text="I'm not going to use this editor any more," start="00:14:20.240" video="mainVideo" id=subtitle]]
+[[!template text="and other people will follow." start="00:14:22.240" video="mainVideo" id=subtitle]]
+[[!template text="But oftentimes, it's not just about" start="00:14:24.000" video="mainVideo" id=subtitle]]
+[[!template text="the fashion changing," start="00:14:26.240" video="mainVideo" id=subtitle]]
+[[!template text="it's also there's other problems" start="00:14:27.199" video="mainVideo" id=subtitle]]
+[[!template text="that are happening." start="00:14:28.560" video="mainVideo" id=subtitle]]
+[[!template text="Some of these other things" start="00:14:29.040" video="mainVideo" id=subtitle]]
+[[!template text="that I mentioned before" start="00:14:29.680" video="mainVideo" id=subtitle]]
+[[!template text="that could be contributing" start="00:14:30.959" video="mainVideo" id=subtitle]]
+[[!template text="to this overall sentiment" start="00:14:32.160" video="mainVideo" id=subtitle]]
+[[!template text="that caused people to move on." start="00:14:33.839" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So then what happens" start="00:14:36.959" video="mainVideo" id=subtitle]]
+[[!template text="when an editor loses popularity?" start="00:14:38.000" video="mainVideo" id=subtitle]]
+[[!template text="If people are worried" start="00:14:40.000" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs is going to lose popularity," start="00:14:40.800" video="mainVideo" id=subtitle]]
+[[!template text="what happens if it doesn't gain more?" start="00:14:43.120" video="mainVideo" id=subtitle]]
+[[!template text="So what are the possible consequences?" start="00:14:44.880" video="mainVideo" id=subtitle]]
+[[!template text="Well, maybe core maintainers" start="00:14:47.839" video="mainVideo" id=subtitle]]
+[[!template text="will gradually leave the project" start="00:14:49.120" video="mainVideo" id=subtitle]]
+[[!template text="with nobody to replace them. I mean," start="00:14:50.399" video="mainVideo" id=subtitle]]
+[[!template text="if you have a project like Emacs" start="00:14:52.160" video="mainVideo" id=subtitle]]
+[[!template text="where there's a core" start="00:14:53.839" video="mainVideo" id=subtitle]]
+[[!template text="that's written in a language" start="00:14:57.199" video="mainVideo" id=subtitle]]
+[[!template text="that's different than the language" start="00:14:58.240" video="mainVideo" id=subtitle]]
+[[!template text="everybody uses to extend it," start="00:14:59.600" video="mainVideo" id=subtitle]]
+[[!template text="then maybe it's risky" start="00:15:01.040" video="mainVideo" id=subtitle]]
+[[!template text="to have people leave the project" start="00:15:02.240" video="mainVideo" id=subtitle]]
+[[!template text="because you don't have other people" start="00:15:03.440" video="mainVideo" id=subtitle]]
+[[!template text="to come along who can help maintain it" start="00:15:04.800" video="mainVideo" id=subtitle]]
+[[!template text="and to carry on the knowledge of the core." start="00:15:06.560" video="mainVideo" id=subtitle]]
+[[!template text="Also, maybe no new features" start="00:15:10.240" video="mainVideo" id=subtitle]]
+[[!template text="are being added to stay competitive" start="00:15:11.519" video="mainVideo" id=subtitle]]
+[[!template text="with other editors." start="00:15:13.279" video="mainVideo" id=subtitle]]
+[[!template text="So this is one of these things" start="00:15:14.800" video="mainVideo" id=subtitle]]
+[[!template text="where people kind of feel like" start="00:15:15.920" video="mainVideo" id=subtitle]]
+[[!template text="there's a feature mill, where you know" start="00:15:17.120" video="mainVideo" id=subtitle]]
+[[!template text="if new features are coming online" start="00:15:18.800" video="mainVideo" id=subtitle]]
+[[!template text="in other editors," start="00:15:20.880" video="mainVideo" id=subtitle]]
+[[!template text="maybe your editor needs to catch up." start="00:15:21.680" video="mainVideo" id=subtitle]]
+[[!template text="Well, I don't really think that" start="00:15:23.279" video="mainVideo" id=subtitle]]
+[[!template text="that's necessarily needed," start="00:15:24.160" video="mainVideo" id=subtitle]]
+[[!template text="but if there are new paradigms" start="00:15:25.279" video="mainVideo" id=subtitle]]
+[[!template text="or usage patterns or workflows" start="00:15:28.160" video="mainVideo" id=subtitle]]
+[[!template text="that are becoming..." start="00:15:29.839" video="mainVideo" id=subtitle]]
+[[!template text="I guess you could say mainstream," start="00:15:32.320" video="mainVideo" id=subtitle]]
+[[!template text="sometimes it does make sense" start="00:15:33.759" video="mainVideo" id=subtitle]]
+[[!template text="for an editor to be able to adopt these," start="00:15:34.800" video="mainVideo" id=subtitle]]
+[[!template text="but if you have" start="00:15:37.199" video="mainVideo" id=subtitle]]
+[[!template text="a sufficiently extendable editor," start="00:15:37.759" video="mainVideo" id=subtitle]]
+[[!template text="then oftentimes, you don't really need to" start="00:15:39.519" video="mainVideo" id=subtitle]]
+[[!template text="do anything other than" start="00:15:41.440" video="mainVideo" id=subtitle]]
+[[!template text="just write a new package." start="00:15:42.079" video="mainVideo" id=subtitle]]
+[[!template text="Critical bugs that never get fixed..." start="00:15:44.480" video="mainVideo" id=subtitle]]
+[[!template text="I mean, if people start to drift off" start="00:15:46.160" video="mainVideo" id=subtitle]]
+[[!template text="from the project, it is much more likely" start="00:15:48.240" video="mainVideo" id=subtitle]]
+[[!template text="that bad bugs won't get fixed over time." start="00:15:49.839" video="mainVideo" id=subtitle]]
+[[!template text="Less community interest in creating" start="00:15:52.720" video="mainVideo" id=subtitle]]
+[[!template text="and maintaining packages." start="00:15:54.079" video="mainVideo" id=subtitle]]
+[[!template text="There's another possibility" start="00:15:55.199" video="mainVideo" id=subtitle]]
+[[!template text="if people don't feel like" start="00:15:56.320" video="mainVideo" id=subtitle]]
+[[!template text="it's worth their time anymore" start="00:15:57.519" video="mainVideo" id=subtitle]]
+[[!template text="because not many people" start="00:15:58.880" video="mainVideo" id=subtitle]]
+[[!template text="are using an editor," start="00:16:00.079" video="mainVideo" id=subtitle]]
+[[!template text="maybe they'll have more users" start="00:16:00.880" video="mainVideo" id=subtitle]]
+[[!template text="or more interaction" start="00:16:02.480" video="mainVideo" id=subtitle]]
+[[!template text="if they go write a similar package" start="00:16:03.279" video="mainVideo" id=subtitle]]
+[[!template text="for a different editor." start="00:16:04.959" video="mainVideo" id=subtitle]]
+[[!template text="Less blog posts, videos, content." start="00:16:07.440" video="mainVideo" id=subtitle]]
+[[!template text="Basically, like, if people feel" start="00:16:10.079" video="mainVideo" id=subtitle]]
+[[!template text="that it's not worth their time" start="00:16:11.519" video="mainVideo" id=subtitle]]
+[[!template text="to make content about the editor either," start="00:16:12.480" video="mainVideo" id=subtitle]]
+[[!template text="or if you're just not interested any more," start="00:16:13.839" video="mainVideo" id=subtitle]]
+[[!template text="then those things will dry up." start="00:16:15.360" video="mainVideo" id=subtitle]]
+[[!template text="And also one thing that is possible," start="00:16:17.040" video="mainVideo" id=subtitle]]
+[[!template text="but probably not very likely," start="00:16:18.639" video="mainVideo" id=subtitle]]
+[[!template text="is that the program may not be" start="00:16:19.839" video="mainVideo" id=subtitle]]
+[[!template text="packaged any more in Linux distributions" start="00:16:21.839" video="mainVideo" id=subtitle]]
+[[!template text="or for other operating systems." start="00:16:24.000" video="mainVideo" id=subtitle]]
+[[!template text="So if it's not worth someone to package it," start="00:16:25.680" video="mainVideo" id=subtitle]]
+[[!template text="or they just sort of lose interest" start="00:16:27.519" video="mainVideo" id=subtitle]]
+[[!template text="in the editor, then maybe those things" start="00:16:29.040" video="mainVideo" id=subtitle]]
+[[!template text="sort of drift away" start="00:16:31.360" video="mainVideo" id=subtitle]]
+[[!template text="and you can't even install it any more" start="00:16:32.320" video="mainVideo" id=subtitle]]
+[[!template text="in many places." start="00:16:33.920" video="mainVideo" id=subtitle]]
+[[!template text="But I feel that these things" start="00:16:35.360" video="mainVideo" id=subtitle]]
+[[!template text="would only really happen" start="00:16:36.399" video="mainVideo" id=subtitle]]
+[[!template text="if there was already other major issues" start="00:16:37.279" video="mainVideo" id=subtitle]]
+[[!template text="in the dev team or in the community," start="00:16:39.279" video="mainVideo" id=subtitle]]
+[[!template text="like maybe a high profile schism" start="00:16:41.920" video="mainVideo" id=subtitle]]
+[[!template text="in the maintainer team," start="00:16:44.320" video="mainVideo" id=subtitle]]
+[[!template text="sort of like what we saw with GNU Emacs" start="00:16:45.199" video="mainVideo" id=subtitle]]
+[[!template text="versus XEmacs, because you have" start="00:16:47.519" video="mainVideo" id=subtitle]]
+[[!template text="two competing versions" start="00:16:49.759" video="mainVideo" id=subtitle]]
+[[!template text="of the same idea" start="00:16:50.959" video="mainVideo" id=subtitle]]
+[[!template text="with different implementations," start="00:16:52.160" video="mainVideo" id=subtitle]]
+[[!template text="and then over time," start="00:16:53.600" video="mainVideo" id=subtitle]]
+[[!template text="one of them may fade out" start="00:16:54.800" video="mainVideo" id=subtitle]]
+[[!template text="because people just lose interest" start="00:16:55.920" video="mainVideo" id=subtitle]]
+[[!template text="and maybe something like GNU Emacs" start="00:16:57.839" video="mainVideo" id=subtitle]]
+[[!template text="gradually catches up and surpasses it" start="00:17:00.800" video="mainVideo" id=subtitle]]
+[[!template text="in functionality. So these things" start="00:17:02.399" video="mainVideo" id=subtitle]]
+[[!template text="can happen, but it's not really" start="00:17:04.720" video="mainVideo" id=subtitle]]
+[[!template text="as likely as people would think, I think." start="00:17:07.520" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So how is Emacs going to survive" start="00:17:10.240" video="mainVideo" id=subtitle]]
+[[!template text="despite popularity? I feel that" start="00:17:12.959" video="mainVideo" id=subtitle]]
+[[!template text="there are a few important" start="00:17:15.280" video="mainVideo" id=subtitle]]
+[[!template text="and unique factors" start="00:17:16.640" video="mainVideo" id=subtitle]]
+[[!template text="that are going to contribute to this." start="00:17:17.679" video="mainVideo" id=subtitle]]
+[[!template new="1" text="First of all, Emacs is" start="00:17:20.160" video="mainVideo" id=subtitle]]
+[[!template text="more deeply hackable" start="00:17:21.520" video="mainVideo" id=subtitle]]
+[[!template text="than almost all other editors." start="00:17:22.720" video="mainVideo" id=subtitle]]
+[[!template text="I'm couching that a bit," start="00:17:24.959" video="mainVideo" id=subtitle]]
+[[!template text="but really it is" start="00:17:26.000" video="mainVideo" id=subtitle]]
+[[!template text="basically more extensible" start="00:17:26.880" video="mainVideo" id=subtitle]]
+[[!template text="than any other editor." start="00:17:28.000" video="mainVideo" id=subtitle]]
+[[!template text="I haven't seen one" start="00:17:28.960" video="mainVideo" id=subtitle]]
+[[!template text="that's more extensible than Emacs so far," start="00:17:29.679" video="mainVideo" id=subtitle]]
+[[!template text="and that's because" start="00:17:31.440" video="mainVideo" id=subtitle]]
+[[!template text="Emacs was designed for this." start="00:17:32.000" video="mainVideo" id=subtitle]]
+[[!template text="The whole point of Emacs" start="00:17:34.160" video="mainVideo" id=subtitle]]
+[[!template text="is that you should be able to go in" start="00:17:35.360" video="mainVideo" id=subtitle]]
+[[!template text="and customize your workflow," start="00:17:36.960" video="mainVideo" id=subtitle]]
+[[!template text="and customize the editor to do" start="00:17:38.320" video="mainVideo" id=subtitle]]
+[[!template text="exactly what you want it to do." start="00:17:39.600" video="mainVideo" id=subtitle]]
+[[!template text="It's this whole idea of user freedom." start="00:17:41.039" video="mainVideo" id=subtitle]]
+[[!template text="You're not letting the editor designer" start="00:17:44.080" video="mainVideo" id=subtitle]]
+[[!template text="tell you what to do," start="00:17:46.320" video="mainVideo" id=subtitle]]
+[[!template text="you're telling the editor what to do" start="00:17:47.120" video="mainVideo" id=subtitle]]
+[[!template text="at every step of the way." start="00:17:48.880" video="mainVideo" id=subtitle]]
+[[!template text="Also, an Emacs user can grow their skills" start="00:17:50.559" video="mainVideo" id=subtitle]]
+[[!template text="from small configuration tweaks," start="00:17:53.440" video="mainVideo" id=subtitle]]
+[[!template text="just basically setting variables" start="00:17:55.039" video="mainVideo" id=subtitle]]
+[[!template text="and whatnot, to writing" start="00:17:56.240" video="mainVideo" id=subtitle]]
+[[!template text="their own packages over time," start="00:17:57.280" video="mainVideo" id=subtitle]]
+[[!template text="and then eventually" start="00:17:58.960" video="mainVideo" id=subtitle]]
+[[!template text="to contributing to Emacs itself--" start="00:17:59.600" video="mainVideo" id=subtitle]]
+[[!template text="the same skill set," start="00:18:01.280" video="mainVideo" id=subtitle]]
+[[!template text="because the majority" start="00:18:02.320" video="mainVideo" id=subtitle]]
+[[!template text="of the functionality of the editor" start="00:18:03.360" video="mainVideo" id=subtitle]]
+[[!template text="is written with the same language" start="00:18:04.640" video="mainVideo" id=subtitle]]
+[[!template text="that you use to configure it." start="00:18:06.160" video="mainVideo" id=subtitle]]
+[[!template text="So unlike other editors," start="00:18:07.600" video="mainVideo" id=subtitle]]
+[[!template text="where you have..." start="00:18:09.280" video="mainVideo" id=subtitle]]
+[[!template text="the way that you write extensions" start="00:18:10.960" video="mainVideo" id=subtitle]]
+[[!template text="for the editor," start="00:18:12.960" video="mainVideo" id=subtitle]]
+[[!template text="that has a specific API," start="00:18:13.440" video="mainVideo" id=subtitle]]
+[[!template text="but if you go contribute to the core," start="00:18:14.960" video="mainVideo" id=subtitle]]
+[[!template text="the code base is completely different." start="00:18:16.400" video="mainVideo" id=subtitle]]
+[[!template text="It's different with Emacs" start="00:18:18.160" video="mainVideo" id=subtitle]]
+[[!template text="because you have basically the same APIs," start="00:18:19.280" video="mainVideo" id=subtitle]]
+[[!template text="the same code and same everything" start="00:18:22.640" video="mainVideo" id=subtitle]]
+[[!template text="that you use to write a package" start="00:18:24.320" video="mainVideo" id=subtitle]]
+[[!template text="versus writing actual code" start="00:18:26.080" video="mainVideo" id=subtitle]]
+[[!template text="for functionality for the editor." start="00:18:28.160" video="mainVideo" id=subtitle]]
+[[!template text="Now obviously, there's the C layer" start="00:18:29.600" video="mainVideo" id=subtitle]]
+[[!template text="that is different," start="00:18:30.960" video="mainVideo" id=subtitle]]
+[[!template text="but I think a lot of the actual packages" start="00:18:32.000" video="mainVideo" id=subtitle]]
+[[!template text="and functionality in Emacs" start="00:18:34.000" video="mainVideo" id=subtitle]]
+[[!template text="are at the Emacs Lisp layer." start="00:18:35.280" video="mainVideo" id=subtitle]]
+[[!template text="So what this means is that" start="00:18:36.640" video="mainVideo" id=subtitle]]
+[[!template text="Emacs configuration hackers" start="00:18:38.797" video="mainVideo" id=subtitle]]
+[[!template text="and package authors" start="00:18:41.120" video="mainVideo" id=subtitle]]
+[[!template text="are prime candidates" start="00:18:42.000" video="mainVideo" id=subtitle]]
+[[!template text="for eventually becoming contributors" start="00:18:43.200" video="mainVideo" id=subtitle]]
+[[!template text="to Emacs itself. You see this play out" start="00:18:44.880" video="mainVideo" id=subtitle]]
+[[!template text="a lot of times in Emacs community," start="00:18:46.960" video="mainVideo" id=subtitle]]
+[[!template text="where someone writes" start="00:18:48.559" video="mainVideo" id=subtitle]]
+[[!template text="some really good packages," start="00:18:49.760" video="mainVideo" id=subtitle]]
+[[!template text="and either parts of those" start="00:18:51.039" video="mainVideo" id=subtitle]]
+[[!template text="get merged into Emacs" start="00:18:52.240" video="mainVideo" id=subtitle]]
+[[!template text="or that person maybe makes contributions" start="00:18:53.440" video="mainVideo" id=subtitle]]
+[[!template text="to Emacs to add new functionality" start="00:18:55.520" video="mainVideo" id=subtitle]]
+[[!template text="that their own packages can use," start="00:18:57.280" video="mainVideo" id=subtitle]]
+[[!template text="or just to improve Emacs as a whole." start="00:18:59.360" video="mainVideo" id=subtitle]]
+[[!template text="So there's much more chance" start="00:19:01.679" video="mainVideo" id=subtitle]]
+[[!template text="that people who are involved" start="00:19:03.679" video="mainVideo" id=subtitle]]
+[[!template text="in the community of Emacs" start="00:19:04.880" video="mainVideo" id=subtitle]]
+[[!template text="can actually become contributors" start="00:19:06.160" video="mainVideo" id=subtitle]]
+[[!template text="to the project itself." start="00:19:07.440" video="mainVideo" id=subtitle]]
+[[!template text="I think that's going to be" start="00:19:08.480" video="mainVideo" id=subtitle]]
+[[!template text="very important for its health." start="00:19:09.200" video="mainVideo" id=subtitle]]
+[[!template text="Also, you don't need to add functionality" start="00:19:11.600" video="mainVideo" id=subtitle]]
+[[!template text="to Emacs core" start="00:19:13.200" video="mainVideo" id=subtitle]]
+[[!template text="to make the editor itself better." start="00:19:14.080" video="mainVideo" id=subtitle]]
+[[!template text="Package authors are on" start="00:19:16.160" video="mainVideo" id=subtitle]]
+[[!template text="an equal playing field" start="00:19:17.120" video="mainVideo" id=subtitle]]
+[[!template text="as the built-in functionality," start="00:19:18.480" video="mainVideo" id=subtitle]]
+[[!template text="for the same reason what I said before." start="00:19:19.679" video="mainVideo" id=subtitle]]
+[[!template text="Everything's written with Emacs Lisp," start="00:19:21.008" video="mainVideo" id=subtitle]]
+[[!template text="or I guess a lot of the functionality" start="00:19:22.640" video="mainVideo" id=subtitle]]
+[[!template text="is written with Emacs Lisp." start="00:19:24.160" video="mainVideo" id=subtitle]]
+[[!template text="Since there's a lot of ways to hook into" start="00:19:26.000" video="mainVideo" id=subtitle]]
+[[!template text="or replace functionality in Emacs," start="00:19:28.720" video="mainVideo" id=subtitle]]
+[[!template text="you can do a lot of deep customizations" start="00:19:30.720" video="mainVideo" id=subtitle]]
+[[!template text="to Emacs itself to make it better" start="00:19:33.280" video="mainVideo" id=subtitle]]
+[[!template text="in ways that aren't really..." start="00:19:35.360" video="mainVideo" id=subtitle]]
+[[!template text="The core developers don't need to" start="00:19:37.600" video="mainVideo" id=subtitle]]
+[[!template text="add new things for you to do that." start="00:19:39.760" video="mainVideo" id=subtitle]]
+[[!template text="You can just do it if you want to." start="00:19:40.960" video="mainVideo" id=subtitle]]
+[[!template text="So that gives Emacs more of" start="00:19:42.320" video="mainVideo" id=subtitle]]
+[[!template text="a platform feel" start="00:19:44.640" video="mainVideo" id=subtitle]]
+[[!template text="rather than just being an editor" start="00:19:45.840" video="mainVideo" id=subtitle]]
+[[!template text="that can't really be changed very much." start="00:19:47.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Also, Emacs has a strong community" start="00:19:51.440" video="mainVideo" id=subtitle]]
+[[!template text="of highly-skilled packaged authors" start="00:19:53.440" video="mainVideo" id=subtitle]]
+[[!template text="and the high-quality packages" start="00:19:56.080" video="mainVideo" id=subtitle]]
+[[!template text="that they create make it far better" start="00:19:58.000" video="mainVideo" id=subtitle]]
+[[!template text="and more uniquely valuable" start="00:19:59.919" video="mainVideo" id=subtitle]]
+[[!template text="than many other editors." start="00:20:01.679" video="mainVideo" id=subtitle]]
+[[!template text="Specifically, things like Org mode," start="00:20:02.960" video="mainVideo" id=subtitle]]
+[[!template text="Magit, Org-roam," start="00:20:04.960" video="mainVideo" id=subtitle]]
+[[!template text="and a lot of other things" start="00:20:06.240" video="mainVideo" id=subtitle]]
+[[!template text="that we've talked about" start="00:20:07.039" video="mainVideo" id=subtitle]]
+[[!template text="on the System Crafters channel over time," start="00:20:08.000" video="mainVideo" id=subtitle]]
+[[!template text="and the hundreds of other" start="00:20:10.000" video="mainVideo" id=subtitle]]
+[[!template text="workflow-improving packages" start="00:20:11.136" video="mainVideo" id=subtitle]]
+[[!template text="that have been created over the years." start="00:20:12.480" video="mainVideo" id=subtitle]]
+[[!template text="So all these things really make Emacs" start="00:20:14.720" video="mainVideo" id=subtitle]]
+[[!template text="a unique offering" start="00:20:18.559" video="mainVideo" id=subtitle]]
+[[!template text="in the space of text editors," start="00:20:20.159" video="mainVideo" id=subtitle]]
+[[!template text="or development tools," start="00:20:21.679" video="mainVideo" id=subtitle]]
+[[!template text="or even just general" start="00:20:22.640" video="mainVideo" id=subtitle]]
+[[!template text="information management tools," start="00:20:24.240" video="mainVideo" id=subtitle]]
+[[!template text="or desktop environments," start="00:20:25.440" video="mainVideo" id=subtitle]]
+[[!template text="if you want to call it that." start="00:20:27.120" video="mainVideo" id=subtitle]]
+[[!template text="So the people who are involved" start="00:20:28.960" video="mainVideo" id=subtitle]]
+[[!template text="in making these things" start="00:20:31.280" video="mainVideo" id=subtitle]]
+[[!template text="make Emacs far better than it could be" start="00:20:32.159" video="mainVideo" id=subtitle]]
+[[!template text="just by itself," start="00:20:33.600" video="mainVideo" id=subtitle]]
+[[!template text="and this thriving ecosystem helps Emacs" start="00:20:35.039" video="mainVideo" id=subtitle]]
+[[!template text="to continually feel fresh," start="00:20:37.360" video="mainVideo" id=subtitle]]
+[[!template text="regardless of what's happening" start="00:20:39.120" video="mainVideo" id=subtitle]]
+[[!template text="in core Emacs development," start="00:20:40.320" video="mainVideo" id=subtitle]]
+[[!template text="because packages can do so much" start="00:20:41.600" video="mainVideo" id=subtitle]]
+[[!template text="and because people can come along" start="00:20:43.840" video="mainVideo" id=subtitle]]
+[[!template text="and propose sort of" start="00:20:45.280" video="mainVideo" id=subtitle]]
+[[!template text="a new way of doing things" start="00:20:46.640" video="mainVideo" id=subtitle]]
+[[!template text="and other people can start using it." start="00:20:47.760" video="mainVideo" id=subtitle]]
+[[!template text="Emacs itself doesn't have to be" start="00:20:49.360" video="mainVideo" id=subtitle]]
+[[!template text="beholden to just what" start="00:20:51.120" video="mainVideo" id=subtitle]]
+[[!template text="the core developers do." start="00:20:52.400" video="mainVideo" id=subtitle]]
+[[!template text="The community can also play" start="00:20:53.840" video="mainVideo" id=subtitle]]
+[[!template text="a major role in making Emacs feel fresh" start="00:20:55.280" video="mainVideo" id=subtitle]]
+[[!template text="and be modernized over time." start="00:20:57.760" video="mainVideo" id=subtitle]]
+[[!template text="Just take a look at what Doom Emacs" start="00:20:59.919" video="mainVideo" id=subtitle]]
+[[!template text="is doing to give Emacs a better face," start="00:21:01.360" video="mainVideo" id=subtitle]]
+[[!template text="and Spacemacs as well." start="00:21:03.919" video="mainVideo" id=subtitle]]
+[[!template text="Those things are very good" start="00:21:04.960" video="mainVideo" id=subtitle]]
+[[!template text="for making Emacs more palatable" start="00:21:06.240" video="mainVideo" id=subtitle]]
+[[!template text="to the general public," start="00:21:08.000" video="mainVideo" id=subtitle]]
+[[!template text="because you have a much better experience" start="00:21:09.440" video="mainVideo" id=subtitle]]
+[[!template text="out of the box, and a lot of things" start="00:21:11.120" video="mainVideo" id=subtitle]]
+[[!template text="have been polished" start="00:21:12.240" video="mainVideo" id=subtitle]]
+[[!template text="for the user experience." start="00:21:12.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Emacs also has a very strong" start="00:21:15.280" video="mainVideo" id=subtitle]]
+[[!template text="user community. Lots of activity" start="00:21:17.200" video="mainVideo" id=subtitle]]
+[[!template text="and discussion about emacs" start="00:21:18.799" video="mainVideo" id=subtitle]]
+[[!template text="is taking place all the time" start="00:21:20.000" video="mainVideo" id=subtitle]]
+[[!template text="in various places," start="00:21:21.440" video="mainVideo" id=subtitle]]
+[[!template text="like we talked about before." start="00:21:22.559" video="mainVideo" id=subtitle]]
+[[!template text="Mailing lists, IRC, Reddit, etc." start="00:21:23.919" video="mainVideo" id=subtitle]]
+[[!template text="If you get into Emacs" start="00:21:26.559" video="mainVideo" id=subtitle]]
+[[!template text="and you go take part" start="00:21:28.159" video="mainVideo" id=subtitle]]
+[[!template text="in the Emacs community," start="00:21:28.880" video="mainVideo" id=subtitle]]
+[[!template text="there's always going to be" start="00:21:29.840" video="mainVideo" id=subtitle]]
+[[!template text="somebody around who's going to want to" start="00:21:30.640" video="mainVideo" id=subtitle]]
+[[!template text="talk about Emacs with you" start="00:21:32.000" video="mainVideo" id=subtitle]]
+[[!template text="and answer your questions." start="00:21:33.520" video="mainVideo" id=subtitle]]
+[[!template text="So it's a very good thing" start="00:21:34.960" video="mainVideo" id=subtitle]]
+[[!template text="for the health of the project" start="00:21:37.120" video="mainVideo" id=subtitle]]
+[[!template text="because there's a lot of people there" start="00:21:39.039" video="mainVideo" id=subtitle]]
+[[!template text="that are very invested in it every day" start="00:21:40.320" video="mainVideo" id=subtitle]]
+[[!template text="and want to see it succeed." start="00:21:42.640" video="mainVideo" id=subtitle]]
+[[!template text="Also, there's many community members" start="00:21:45.120" video="mainVideo" id=subtitle]]
+[[!template text="writing articles" start="00:21:47.039" video="mainVideo" id=subtitle]]
+[[!template text="and making videos about Emacs," start="00:21:47.840" video="mainVideo" id=subtitle]]
+[[!template text="many of which are actually moving forward" start="00:21:49.440" video="mainVideo" id=subtitle]]
+[[!template text="the state of the art" start="00:21:51.280" video="mainVideo" id=subtitle]]
+[[!template text="about how we use the editor," start="00:21:52.240" video="mainVideo" id=subtitle]]
+[[!template text="and how we use it... I mean," start="00:21:53.679" video="mainVideo" id=subtitle]]
+[[!template text="how many times have you seen" start="00:21:55.360" video="mainVideo" id=subtitle]]
+[[!template text="a really great blog post" start="00:21:56.480" video="mainVideo" id=subtitle]]
+[[!template text="that completely blew your mind" start="00:21:57.520" video="mainVideo" id=subtitle]]
+[[!template text="and showed you a new way" start="00:21:59.120" video="mainVideo" id=subtitle]]
+[[!template text="to use Emacs, or a new way to think about" start="00:22:00.880" video="mainVideo" id=subtitle]]
+[[!template text="how you use Emacs. I see stuff like that" start="00:22:02.720" video="mainVideo" id=subtitle]]
+[[!template text="all the time, like posts by Protesilaos," start="00:22:05.120" video="mainVideo" id=subtitle]]
+[[!template text="or by Karthik, or by many other people" start="00:22:08.480" video="mainVideo" id=subtitle]]
+[[!template text="who show you a new way" start="00:22:10.640" video="mainVideo" id=subtitle]]
+[[!template text="to look at things, and then you're, like," start="00:22:12.080" video="mainVideo" id=subtitle]]
+[[!template text="Wow. This... I could do things" start="00:22:13.360" video="mainVideo" id=subtitle]]
+[[!template text="completely different" start="00:22:14.720" video="mainVideo" id=subtitle]]
+[[!template text="than I was doing before." start="00:22:15.200" video="mainVideo" id=subtitle]]
+[[!template text="This kind of stuff" start="00:22:16.559" video="mainVideo" id=subtitle]]
+[[!template text="is extremely important" start="00:22:17.200" video="mainVideo" id=subtitle]]
+[[!template text="for the health of the editor" start="00:22:18.240" video="mainVideo" id=subtitle]]
+[[!template text="going forward, because people are able to" start="00:22:20.080" video="mainVideo" id=subtitle]]
+[[!template text="inspire others to use the editor." start="00:22:22.799" video="mainVideo" id=subtitle]]
+[[!template text="It's a great thing for evangelism as well." start="00:22:24.799" video="mainVideo" id=subtitle]]
+[[!template text="Like, if someone happens to" start="00:22:26.559" video="mainVideo" id=subtitle]]
+[[!template text="stumble across a video or a blog post," start="00:22:28.080" video="mainVideo" id=subtitle]]
+[[!template text="they may be really inspired to use Emacs." start="00:22:30.080" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And lastly, the Emacs maintainers" start="00:22:33.440" video="mainVideo" id=subtitle]]
+[[!template text="and contributors really care" start="00:22:35.280" video="mainVideo" id=subtitle]]
+[[!template text="about the users." start="00:22:36.720" video="mainVideo" id=subtitle]]
+[[!template text="There are many core maintainers" start="00:22:38.000" video="mainVideo" id=subtitle]]
+[[!template text="who have been with the project" start="00:22:39.280" video="mainVideo" id=subtitle]]
+[[!template text="for 10+ years, some way longer than that." start="00:22:40.080" video="mainVideo" id=subtitle]]
+[[!template text="So it shows you that" start="00:22:43.360" video="mainVideo" id=subtitle]]
+[[!template text="the people who work on this project" start="00:22:45.200" video="mainVideo" id=subtitle]]
+[[!template text="really care a lot," start="00:22:46.559" video="mainVideo" id=subtitle]]
+[[!template text="and they're very invested" start="00:22:47.600" video="mainVideo" id=subtitle]]
+[[!template text="in making sure that it remains healthy" start="00:22:48.640" video="mainVideo" id=subtitle]]
+[[!template text="for the long term." start="00:22:51.120" video="mainVideo" id=subtitle]]
+[[!template text="They also really care about ensuring" start="00:22:53.360" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs continues to work well" start="00:22:55.440" video="mainVideo" id=subtitle]]
+[[!template text="for long-time users," start="00:22:56.720" video="mainVideo" id=subtitle]]
+[[!template text="(and some people have been using it" start="00:22:58.159" video="mainVideo" id=subtitle]]
+[[!template text="for 30 to 40 years," start="00:23:00.080" video="mainVideo" id=subtitle]]
+[[!template text="which is kind of insane," start="00:23:01.280" video="mainVideo" id=subtitle]]
+[[!template text="if you think about it)," start="00:23:02.400" video="mainVideo" id=subtitle]]
+[[!template text="all while gradually and sensibly" start="00:23:03.760" video="mainVideo" id=subtitle]]
+[[!template text="enabling new scenarios" start="00:23:05.679" video="mainVideo" id=subtitle]]
+[[!template text="and core improvements" start="00:23:07.120" video="mainVideo" id=subtitle]]
+[[!template text="that benefit all of us," start="00:23:08.080" video="mainVideo" id=subtitle]]
+[[!template text="even the new and the old users." start="00:23:09.280" video="mainVideo" id=subtitle]]
+[[!template text="Keeping a piece of software" start="00:23:11.520" video="mainVideo" id=subtitle]]
+[[!template text="running and relevant" start="00:23:12.880" video="mainVideo" id=subtitle]]
+[[!template text="for this many years" start="00:23:13.600" video="mainVideo" id=subtitle]]
+[[!template text="is a huge effort," start="00:23:14.400" video="mainVideo" id=subtitle]]
+[[!template text="so I'm very thankful" start="00:23:15.440" video="mainVideo" id=subtitle]]
+[[!template text="to the maintainers of Emacs," start="00:23:16.799" video="mainVideo" id=subtitle]]
+[[!template text="and I hope all of you are as well," start="00:23:18.480" video="mainVideo" id=subtitle]]
+[[!template text="because this is kind of an anomaly" start="00:23:20.159" video="mainVideo" id=subtitle]]
+[[!template text="in the software field" start="00:23:22.799" video="mainVideo" id=subtitle]]
+[[!template text="to have a piece of software" start="00:23:23.600" video="mainVideo" id=subtitle]]
+[[!template text="that has existed for so long," start="00:23:24.960" video="mainVideo" id=subtitle]]
+[[!template text="who has managed to survive" start="00:23:26.640" video="mainVideo" id=subtitle]]
+[[!template text="despite various different types" start="00:23:30.000" video="mainVideo" id=subtitle]]
+[[!template text="of platform transitions," start="00:23:31.840" video="mainVideo" id=subtitle]]
+[[!template text="operating transitions over the years" start="00:23:33.280" video="mainVideo" id=subtitle]]
+[[!template text="and still thrive and be a very useful" start="00:23:35.280" video="mainVideo" id=subtitle]]
+[[!template text="and very key piece of software" start="00:23:37.360" video="mainVideo" id=subtitle]]
+[[!template text="for a lot of people." start="00:23:38.559" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So aren't all these things" start="00:23:40.960" video="mainVideo" id=subtitle]]
+[[!template text="that we just talked about" start="00:23:42.320" video="mainVideo" id=subtitle]]
+[[!template text="supposed to come" start="00:23:43.039" video="mainVideo" id=subtitle]]
+[[!template text="when an editor is popular?" start="00:23:43.840" video="mainVideo" id=subtitle]]
+[[!template text="We've been talking about" start="00:23:45.279" video="mainVideo" id=subtitle]]
+[[!template text="what is popularity," start="00:23:46.080" video="mainVideo" id=subtitle]]
+[[!template text="what benefits come with popularity." start="00:23:47.039" video="mainVideo" id=subtitle]]
+[[!template text="So all the things I just mentioned," start="00:23:48.720" video="mainVideo" id=subtitle]]
+[[!template text="shouldn't that be something" start="00:23:50.320" video="mainVideo" id=subtitle]]
+[[!template text="that would only be for editors" start="00:23:51.120" video="mainVideo" id=subtitle]]
+[[!template text="that are super popular? Well, I guess" start="00:23:52.720" video="mainVideo" id=subtitle]]
+[[!template text="the answer is maybe Emacs is actually" start="00:23:54.640" video="mainVideo" id=subtitle]]
+[[!template text="popular enough." start="00:23:56.720" video="mainVideo" id=subtitle]]
+[[!template text="That doesn't necessarily mean" start="00:23:57.840" video="mainVideo" id=subtitle]]
+[[!template text="that we should not try to" start="00:23:58.799" video="mainVideo" id=subtitle]]
+[[!template text="help other people find Emacs," start="00:24:00.640" video="mainVideo" id=subtitle]]
+[[!template text="but I think that we should not" start="00:24:03.600" video="mainVideo" id=subtitle]]
+[[!template text="worry so much about" start="00:24:04.960" video="mainVideo" id=subtitle]]
+[[!template text="the popularity of Emacs," start="00:24:05.760" video="mainVideo" id=subtitle]]
+[[!template text="because what we have is great," start="00:24:06.880" video="mainVideo" id=subtitle]]
+[[!template text="and we should just focus our time" start="00:24:08.480" video="mainVideo" id=subtitle]]
+[[!template text="on continuing to improve the health" start="00:24:11.120" video="mainVideo" id=subtitle]]
+[[!template text="of the community that we have" start="00:24:13.919" video="mainVideo" id=subtitle]]
+[[!template text="and the health of the editor itself," start="00:24:15.520" video="mainVideo" id=subtitle]]
+[[!template text="and not worry too much about chasing" start="00:24:17.360" video="mainVideo" id=subtitle]]
+[[!template text="whatever is happening out in the world" start="00:24:19.440" video="mainVideo" id=subtitle]]
+[[!template text="at any given point." start="00:24:20.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="To conclude, the next time someone says" start="00:24:22.880" video="mainVideo" id=subtitle]]
+[[!template text="we should do this thing" start="00:24:26.159" video="mainVideo" id=subtitle]]
+[[!template text="or this other thing" start="00:24:27.760" video="mainVideo" id=subtitle]]
+[[!template text="to make Emacs more popular," start="00:24:28.559" video="mainVideo" id=subtitle]]
+[[!template text="ask them these questions." start="00:24:30.400" video="mainVideo" id=subtitle]]
+[[!template text="1\. What does popularity mean to you?" start="00:24:32.240" video="mainVideo" id=subtitle]]
+[[!template text="2\. How do you measure it?" start="00:24:35.200" video="mainVideo" id=subtitle]]
+[[!template text="3\. What do you think Emacs is going to" start="00:24:37.279" video="mainVideo" id=subtitle]]
+[[!template text="gain from increased popularity?" start="00:24:39.440" video="mainVideo" id=subtitle]]
+[[!template text="So I hope that you found this talk" start="00:24:41.600" video="mainVideo" id=subtitle]]
+[[!template text="inspiring and maybe" start="00:24:43.279" video="mainVideo" id=subtitle]]
+[[!template text="a little bit reassuring. Thanks so much" start="00:24:44.159" video="mainVideo" id=subtitle]]
+[[!template text="for your time, and happy hacking." start="00:24:46.320" video="mainVideo" id=subtitle]]
+[[!template text="We'll see ya." start="00:24:48.240" video="mainVideo" id=subtitle]]
+[[!template text="captions by sachac" start="00:24:50.867" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/form.md b/2021/captions/form.md
new file mode 100644
index 00000000..76984b28
--- /dev/null
+++ b/2021/captions/form.md
@@ -0,0 +1,430 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="My name is Ian Eure," start="00:00:01.199" video="mainVideo" id=subtitle]]
+[[!template text="and welcome to my talk" start="00:00:02.320" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Old McCarthy Had a Form&quot;." start="00:00:03.199" video="mainVideo" id=subtitle]]
+[[!template text="In this talk," start="00:00:05.120" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to be discussing EIEIO," start="00:00:05.759" video="mainVideo" id=subtitle]]
+[[!template text="which is an Emacs Lisp implementation" start="00:00:07.759" video="mainVideo" id=subtitle]]
+[[!template text="of the Common Lisp object system." start="00:00:09.920" video="mainVideo" id=subtitle]]
+[[!template text="CLOS is a way of writing" start="00:00:12.320" video="mainVideo" id=subtitle]]
+[[!template text="object-oriented Common Lisp code," start="00:00:13.519" video="mainVideo" id=subtitle]]
+[[!template text="and with EIEIO you have much of that same" start="00:00:15.360" video="mainVideo" id=subtitle]]
+[[!template text="power but inside Emacs." start="00:00:17.920" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to be using those two names" start="00:00:19.920" video="mainVideo" id=subtitle]]
+[[!template text="interchangeably throughout this talk," start="00:00:21.359" video="mainVideo" id=subtitle]]
+[[!template text="since they're nearly equivalent." start="00:00:22.988" video="mainVideo" id=subtitle]]
+[[!template text="You might wonder," start="00:00:26.640" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Why would I want to write" start="00:00:27.534" video="mainVideo" id=subtitle]]
+[[!template text="object Emacs Lisp code?&quot;." start="00:00:28.880" video="mainVideo" id=subtitle]]
+[[!template text="I like it because I like writing" start="00:00:31.439" video="mainVideo" id=subtitle]]
+[[!template text="in a functional programming style," start="00:00:33.440" video="mainVideo" id=subtitle]]
+[[!template text="or I like to do an imperative style" start="00:00:34.960" video="mainVideo" id=subtitle]]
+[[!template text="that captures interactive key sequences" start="00:00:36.896" video="mainVideo" id=subtitle]]
+[[!template text="that I might enter manually." start="00:00:39.040" video="mainVideo" id=subtitle]]
+[[!template text="Well, I think, different kinds of programs" start="00:00:41.200" video="mainVideo" id=subtitle]]
+[[!template text="need different kind of programming paradigms," start="00:00:42.800" video="mainVideo" id=subtitle]]
+[[!template text="and sometimes OOP is the one that fits." start="00:00:45.120" video="mainVideo" id=subtitle]]
+[[!template text="Also, if you've done much OOP before," start="00:00:47.760" video="mainVideo" id=subtitle]]
+[[!template text="you might be surprised by" start="00:00:49.708" video="mainVideo" id=subtitle]]
+[[!template text="how EIEIO works and the sorts of power" start="00:00:50.655" video="mainVideo" id=subtitle]]
+[[!template text="that it brings to your programs." start="00:00:52.879" video="mainVideo" id=subtitle]]
+[[!template text="So, let's talk about that model now." start="00:00:55.039" video="mainVideo" id=subtitle]]
+[[!template text="Classes are pretty much what" start="00:00:58.480" video="mainVideo" id=subtitle]]
+[[!template text="you would expect if you've done" start="00:01:00.000" video="mainVideo" id=subtitle]]
+[[!template text="OOP programming before." start="00:01:01.120" video="mainVideo" id=subtitle]]
+[[!template text="In the CLOS model," start="00:01:02.879" video="mainVideo" id=subtitle]]
+[[!template text="they only have fields," start="00:01:04.400" video="mainVideo" id=subtitle]]
+[[!template text="they only encapsulate values," start="00:01:06.400" video="mainVideo" id=subtitle]]
+[[!template text="they don't have anything to do with methods." start="00:01:08.000" video="mainVideo" id=subtitle]]
+[[!template text="So, in this case, we have a base class for" start="00:01:10.720" video="mainVideo" id=subtitle]]
+[[!template text="an EMMS player backend," start="00:01:13.040" video="mainVideo" id=subtitle]]
+[[!template text="and it has one field (a slot is what" start="00:01:15.040" video="mainVideo" id=subtitle]]
+[[!template text="it's called in CLOS terminology)," start="00:01:18.159" video="mainVideo" id=subtitle]]
+[[!template text="which indicates whether it's playing or not," start="00:01:20.000" video="mainVideo" id=subtitle]]
+[[!template text="and it's declared abstract," start="00:01:22.720" video="mainVideo" id=subtitle]]
+[[!template text="so you can't create an instance" start="00:01:24.080" video="mainVideo" id=subtitle]]
+[[!template text="of an object based on this class," start="00:01:25.439" video="mainVideo" id=subtitle]]
+[[!template text="you can only extend it with another class," start="00:01:27.040" video="mainVideo" id=subtitle]]
+[[!template text="that's an EIEIO extension," start="00:01:29.280" video="mainVideo" id=subtitle]]
+[[!template text="but I think it's a pretty good one." start="00:01:31.119" video="mainVideo" id=subtitle]]
+[[!template text="You can also see there's a class" start="00:01:33.439" video="mainVideo" id=subtitle]]
+[[!template text="that implements an mpv player back-end," start="00:01:34.640" video="mainVideo" id=subtitle]]
+[[!template text="and it extends the base class," start="00:01:37.119" video="mainVideo" id=subtitle]]
+[[!template text="it doesn't add any slots," start="00:01:39.680" video="mainVideo" id=subtitle]]
+[[!template text="and those get inherited from the base class." start="00:01:40.960" video="mainVideo" id=subtitle]]
+[[!template text="If you want these to do much more" start="00:01:44.479" video="mainVideo" id=subtitle]]
+[[!template text="than encapsulate data," start="00:01:45.936" video="mainVideo" id=subtitle]]
+[[!template text="you need to start writing methods." start="00:01:46.960" video="mainVideo" id=subtitle]]
+[[!template text="The CLOS model is to have" start="00:01:48.880" video="mainVideo" id=subtitle]]
+[[!template text="a generic function." start="00:01:50.324" video="mainVideo" id=subtitle]]
+[[!template text="A generic function is" start="00:01:51.439" video="mainVideo" id=subtitle]]
+[[!template text="kind of like an interface," start="00:01:52.399" video="mainVideo" id=subtitle]]
+[[!template text="it's just a name and an argument list," start="00:01:53.680" video="mainVideo" id=subtitle]]
+[[!template text="and there's no implementation," start="00:01:55.600" video="mainVideo" id=subtitle]]
+[[!template text="you have to write a method" start="00:01:57.280" video="mainVideo" id=subtitle]]
+[[!template text="in order to have an actual implementation." start="00:01:58.560" video="mainVideo" id=subtitle]]
+[[!template text="When you call the generic function," start="00:02:00.960" video="mainVideo" id=subtitle]]
+[[!template text="the system will do a dynamic dispatch" start="00:02:02.880" video="mainVideo" id=subtitle]]
+[[!template text="to a method that matches based on" start="00:02:04.960" video="mainVideo" id=subtitle]]
+[[!template text="its argument types and how the method" start="00:02:06.560" video="mainVideo" id=subtitle]]
+[[!template text="has declared that it should be invoked." start="00:02:08.319" video="mainVideo" id=subtitle]]
+[[!template text="Here's an example of some methods" start="00:02:12.239" video="mainVideo" id=subtitle]]
+[[!template text="for our mpv player backend," start="00:02:14.239" video="mainVideo" id=subtitle]]
+[[!template text="you can see that it'll play anything" start="00:02:16.480" video="mainVideo" id=subtitle]]
+[[!template text="other than something" start="00:02:19.599" video="mainVideo" id=subtitle]]
+[[!template text="with a keyword of `unplayable`," start="00:02:21.200" video="mainVideo" id=subtitle]]
+[[!template text="and it just has dummy start and stop methods" start="00:02:23.200" video="mainVideo" id=subtitle]]
+[[!template text="that return &quot;Started&quot; and &quot;Stopped&quot; text." start="00:02:25.328" video="mainVideo" id=subtitle]]
+[[!template text="A method is just one implementation" start="00:02:27.680" video="mainVideo" id=subtitle]]
+[[!template text="of a generic function," start="00:02:29.599" video="mainVideo" id=subtitle]]
+[[!template text="and you can have as many as you need." start="00:02:30.552" video="mainVideo" id=subtitle]]
+[[!template text="In order to determine" start="00:02:32.640" video="mainVideo" id=subtitle]]
+[[!template text="which method gets dispatched" start="00:02:33.920" video="mainVideo" id=subtitle]]
+[[!template text="when you call a generic function," start="00:02:35.519" video="mainVideo" id=subtitle]]
+[[!template text="they're specialized based on" start="00:02:36.879" video="mainVideo" id=subtitle]]
+[[!template text="their argument type." start="00:02:38.080" video="mainVideo" id=subtitle]]
+[[!template text="In this case, you can see that" start="00:02:39.360" video="mainVideo" id=subtitle]]
+[[!template text="first argument says" start="00:02:40.640" video="mainVideo" id=subtitle]]
+[[!template text="`player talk/emms-player-mpv`," start="00:02:41.680" video="mainVideo" id=subtitle]]
+[[!template text="that means that if that first argument" start="00:02:44.480" video="mainVideo" id=subtitle]]
+[[!template text="is an instance of the mpv player" start="00:02:46.239" video="mainVideo" id=subtitle]]
+[[!template text="or a subclass of it," start="00:02:48.480" video="mainVideo" id=subtitle]]
+[[!template text="then those methods will be invoked," start="00:02:50.080" video="mainVideo" id=subtitle]]
+[[!template text="unless there's a more specific one" start="00:02:52.000" video="mainVideo" id=subtitle]]
+[[!template text="based on that argument type." start="00:02:53.560" video="mainVideo" id=subtitle]]
+[[!template text="You don't have to define" start="00:02:55.440" video="mainVideo" id=subtitle]]
+[[!template text="the generic functions." start="00:02:56.656" video="mainVideo" id=subtitle]]
+[[!template text="If you define a method," start="00:02:57.760" video="mainVideo" id=subtitle]]
+[[!template text="then it'll implicitly define" start="00:02:59.040" video="mainVideo" id=subtitle]]
+[[!template text="the generic function for you." start="00:03:00.451" video="mainVideo" id=subtitle]]
+[[!template text="Specialization is really powerful." start="00:03:03.599" video="mainVideo" id=subtitle]]
+[[!template text="It lets the methods define" start="00:03:05.440" video="mainVideo" id=subtitle]]
+[[!template text="how they get invoked" start="00:03:06.939" video="mainVideo" id=subtitle]]
+[[!template text="If you've done much programming in Clojure," start="00:03:08.400" video="mainVideo" id=subtitle]]
+[[!template text="this sounds a little bit like multi-methods," start="00:03:10.472" video="mainVideo" id=subtitle]]
+[[!template text="but with multi-methods, only the main method," start="00:03:12.959" video="mainVideo" id=subtitle]]
+[[!template text="the equivalent of the generic function," start="00:03:16.319" video="mainVideo" id=subtitle]]
+[[!template text="can determine how they're dispatched." start="00:03:18.000" video="mainVideo" id=subtitle]]
+[[!template text="So, as the writer of an interface," start="00:03:19.920" video="mainVideo" id=subtitle]]
+[[!template text="you might not be able to foresee" start="00:03:21.519" video="mainVideo" id=subtitle]]
+[[!template text="every way that someone who's implementing" start="00:03:23.120" video="mainVideo" id=subtitle]]
+[[!template text="a version of that interface" start="00:03:25.519" video="mainVideo" id=subtitle]]
+[[!template text="would like to dispatch." start="00:03:26.959" video="mainVideo" id=subtitle]]
+[[!template text="CLOS doesn't have that problem," start="00:03:28.400" video="mainVideo" id=subtitle]]
+[[!template text="you get to define your" start="00:03:29.920" video="mainVideo" id=subtitle]]
+[[!template text="own invocation semantics." start="00:03:31.200" video="mainVideo" id=subtitle]]
+[[!template text="You're also not limited to" start="00:03:34.080" video="mainVideo" id=subtitle]]
+[[!template text="dispatching based on the value" start="00:03:35.360" video="mainVideo" id=subtitle]]
+[[!template text="being a subclass of an EIEIO type." start="00:03:37.200" video="mainVideo" id=subtitle]]
+[[!template text="You can dispatch based on" start="00:03:39.920" video="mainVideo" id=subtitle]]
+[[!template text="a primitive type like integer," start="00:03:41.280" video="mainVideo" id=subtitle]]
+[[!template text="you can dispatch based on the value," start="00:03:42.879" video="mainVideo" id=subtitle]]
+[[!template text="you can dispatch on multiple arguments," start="00:03:45.360" video="mainVideo" id=subtitle]]
+[[!template text="and there's also a default dispatch" start="00:03:47.599" video="mainVideo" id=subtitle]]
+[[!template text="that will get applied" start="00:03:49.599" video="mainVideo" id=subtitle]]
+[[!template text="if there's no others that are defined." start="00:03:50.688" video="mainVideo" id=subtitle]]
+[[!template text="If you don't have a default," start="00:03:53.200" video="mainVideo" id=subtitle]]
+[[!template text="then you'll just get an error" start="00:03:54.319" video="mainVideo" id=subtitle]]
+[[!template text="from the system," start="00:03:55.439" video="mainVideo" id=subtitle]]
+[[!template text="and if that doesn't cover it," start="00:03:56.480" video="mainVideo" id=subtitle]]
+[[!template text="you can even define your own." start="00:03:57.439" video="mainVideo" id=subtitle]]
+[[!template text="Definition is with the" start="00:03:59.040" video="mainVideo" id=subtitle]]
+[[!template text="`cl-generic-generalizers`," start="00:04:00.239" video="mainVideo" id=subtitle]]
+[[!template text="which is itself a generic function." start="00:04:01.760" video="mainVideo" id=subtitle]]
+[[!template text="Much of CLOS is built in CLOS," start="00:04:03.680" video="mainVideo" id=subtitle]]
+[[!template text="which I think is really cool." start="00:04:05.680" video="mainVideo" id=subtitle]]
+[[!template text="In addition to all that," start="00:04:08.319" video="mainVideo" id=subtitle]]
+[[!template text="you have four different types of methods," start="00:04:09.599" video="mainVideo" id=subtitle]]
+[[!template text="and those are distinguished by" start="00:04:12.319" video="mainVideo" id=subtitle]]
+[[!template text="what's called a qualifier." start="00:04:13.680" video="mainVideo" id=subtitle]]
+[[!template text="Every function can have methods" start="00:04:16.000" video="mainVideo" id=subtitle]]
+[[!template text="that have all four different" start="00:04:18.400" video="mainVideo" id=subtitle]]
+[[!template text="types of qualifiers," start="00:04:20.239" video="mainVideo" id=subtitle]]
+[[!template text="and based on your class inheritance," start="00:04:21.280" video="mainVideo" id=subtitle]]
+[[!template text="you might have multiple of each type." start="00:04:22.960" video="mainVideo" id=subtitle]]
+[[!template text="There's the primary method," start="00:04:25.680" video="mainVideo" id=subtitle]]
+[[!template text="which is equivalent to the method" start="00:04:26.800" video="mainVideo" id=subtitle]]
+[[!template text="in any other OOP system," start="00:04:28.560" video="mainVideo" id=subtitle]]
+[[!template text="so we're not going to cover that too much." start="00:04:29.919" video="mainVideo" id=subtitle]]
+[[!template text="Then there's a `before` method." start="00:04:32.160" video="mainVideo" id=subtitle]]
+[[!template text="This is evaluated before" start="00:04:33.759" video="mainVideo" id=subtitle]]
+[[!template text="the primary method for side effects," start="00:04:35.600" video="mainVideo" id=subtitle]]
+[[!template text="and its return value is discarded." start="00:04:37.440" video="mainVideo" id=subtitle]]
+[[!template text="There's an `after` method," start="00:04:40.080" video="mainVideo" id=subtitle]]
+[[!template text="which is the same but happens after" start="00:04:41.120" video="mainVideo" id=subtitle]]
+[[!template text="the method has finished evaluating." start="00:04:42.560" video="mainVideo" id=subtitle]]
+[[!template text="And then there's an `around` method" start="00:04:44.479" video="mainVideo" id=subtitle]]
+[[!template text="that happens around all the other three." start="00:04:46.639" video="mainVideo" id=subtitle]]
+[[!template text="And by using these types of methods" start="00:04:49.199" video="mainVideo" id=subtitle]]
+[[!template text="and using class inheritance" start="00:04:51.120" video="mainVideo" id=subtitle]]
+[[!template text="to compose them into your classes," start="00:04:52.560" video="mainVideo" id=subtitle]]
+[[!template text="you can add some really powerful" start="00:04:54.560" video="mainVideo" id=subtitle]]
+[[!template text="mixin type functionality." start="00:04:56.479" video="mainVideo" id=subtitle]]
+[[!template text="You can use before and after" start="00:04:58.240" video="mainVideo" id=subtitle]]
+[[!template text="to build things like logging," start="00:04:59.764" video="mainVideo" id=subtitle]]
+[[!template text="and you can use around" start="00:05:01.280" video="mainVideo" id=subtitle]]
+[[!template text="to implement things like memoization." start="00:05:02.479" video="mainVideo" id=subtitle]]
+[[!template text="If you've done much Emacs Lisp programming," start="00:05:04.880" video="mainVideo" id=subtitle]]
+[[!template text="those before after and around" start="00:05:06.720" video="mainVideo" id=subtitle]]
+[[!template text="might jog your memory because" start="00:05:08.160" video="mainVideo" id=subtitle]]
+[[!template text="they're the same features you get" start="00:05:09.919" video="mainVideo" id=subtitle]]
+[[!template text="with Emacs's built-in function advice." start="00:05:11.440" video="mainVideo" id=subtitle]]
+[[!template text="The thing with function advice is that" start="00:05:14.160" video="mainVideo" id=subtitle]]
+[[!template text="it only works on functions" start="00:05:15.680" video="mainVideo" id=subtitle]]
+[[!template text="in the global namespace," start="00:05:17.199" video="mainVideo" id=subtitle]]
+[[!template text="and there's no kind of conditionality," start="00:05:18.240" video="mainVideo" id=subtitle]]
+[[!template text="they always get dispatched" start="00:05:20.360" video="mainVideo" id=subtitle]]
+[[!template text="when that function is invoked." start="00:05:21.840" video="mainVideo" id=subtitle]]
+[[!template text="The nice thing about the CLOS system is that" start="00:05:23.440" video="mainVideo" id=subtitle]]
+[[!template text="whether they get invoked or not" start="00:05:25.600" video="mainVideo" id=subtitle]]
+[[!template text="depends on whether they exist in" start="00:05:27.039" video="mainVideo" id=subtitle]]
+[[!template text="the class hierarchy," start="00:05:28.872" video="mainVideo" id=subtitle]]
+[[!template text="so you can add them to your" start="00:05:30.160" video="mainVideo" id=subtitle]]
+[[!template text="class hierarchy if you want" start="00:05:31.520" video="mainVideo" id=subtitle]]
+[[!template text="that extra functionality" start="00:05:32.880" video="mainVideo" id=subtitle]]
+[[!template text="like logging or memoization," start="00:05:34.000" video="mainVideo" id=subtitle]]
+[[!template text="and you can exclude it if you don't." start="00:05:35.440" video="mainVideo" id=subtitle]]
+[[!template text="I think that's really powerful" start="00:05:37.120" video="mainVideo" id=subtitle]]
+[[!template text="and a very interesting way of doing it." start="00:05:38.320" video="mainVideo" id=subtitle]]
+[[!template text="It also supports multiple inheritance," start="00:05:42.639" video="mainVideo" id=subtitle]]
+[[!template text="which is the mechanism that you can use" start="00:05:44.639" video="mainVideo" id=subtitle]]
+[[!template text="to compose all these different kinds of" start="00:05:46.639" video="mainVideo" id=subtitle]]
+[[!template text="behaviors into a single object that does" start="00:05:48.560" video="mainVideo" id=subtitle]]
+[[!template text="all the things that you want." start="00:05:50.479" video="mainVideo" id=subtitle]]
+[[!template text="Here's a quick example of a logger." start="00:05:52.240" video="mainVideo" id=subtitle]]
+[[!template text="So, you can see the class just has" start="00:05:54.720" video="mainVideo" id=subtitle]]
+[[!template text="a single slot called `messages`," start="00:05:56.240" video="mainVideo" id=subtitle]]
+[[!template text="it has a `log` method" start="00:05:58.319" video="mainVideo" id=subtitle]]
+[[!template text="that pushes a new message," start="00:05:59.840" video="mainVideo" id=subtitle]]
+[[!template text="which is a format string, into that," start="00:06:01.440" video="mainVideo" id=subtitle]]
+[[!template text="and then it will return them back out," start="00:06:03.840" video="mainVideo" id=subtitle]]
+[[!template text="or it'll just return the latest." start="00:06:05.520" video="mainVideo" id=subtitle]]
+[[!template text="And there's a simple example" start="00:06:07.280" video="mainVideo" id=subtitle]]
+[[!template text="that shows it logging," start="00:06:08.479" video="mainVideo" id=subtitle]]
+[[!template text="and then shows it coming back out," start="00:06:09.600" video="mainVideo" id=subtitle]]
+[[!template text="pretty much what you would expect." start="00:06:11.280" video="mainVideo" id=subtitle]]
+[[!template text="Here's another class that adapts" start="00:06:14.080" video="mainVideo" id=subtitle]]
+[[!template text="the `emms-player` to the `logger` class." start="00:06:16.400" video="mainVideo" id=subtitle]]
+[[!template text="It only extends the logger" start="00:06:19.039" video="mainVideo" id=subtitle]]
+[[!template text="because it doesn't need any features" start="00:06:20.560" video="mainVideo" id=subtitle]]
+[[!template text="of the `emms-player` class itself." start="00:06:22.400" video="mainVideo" id=subtitle]]
+[[!template text="It just implements methods that dispatch" start="00:06:25.039" video="mainVideo" id=subtitle]]
+[[!template text="based on it being that logging player class," start="00:06:27.440" video="mainVideo" id=subtitle]]
+[[!template text="and you can see it logs whenever" start="00:06:30.240" video="mainVideo" id=subtitle]]
+[[!template text="a track is started or stopped," start="00:06:31.759" video="mainVideo" id=subtitle]]
+[[!template text="and it also adds some track" start="00:06:34.240" video="mainVideo" id=subtitle]]
+[[!template text="to tell you whether or not" start="00:06:36.240" video="mainVideo" id=subtitle]]
+[[!template text="the track was playable," start="00:06:37.520" video="mainVideo" id=subtitle]]
+[[!template text="that is using the around method." start="00:06:38.560" video="mainVideo" id=subtitle]]
+[[!template text="So, you can see we have all three methods" start="00:06:41.199" video="mainVideo" id=subtitle]]
+[[!template text="before, after, and around in this class," start="00:06:43.199" video="mainVideo" id=subtitle]]
+[[!template text="so you can see how those work." start="00:06:45.280" video="mainVideo" id=subtitle]]
+[[!template text="Then you need one more," start="00:06:48.160" video="mainVideo" id=subtitle]]
+[[!template text="which is the class" start="00:06:49.440" video="mainVideo" id=subtitle]]
+[[!template text="that mixes it all together," start="00:06:50.184" video="mainVideo" id=subtitle]]
+[[!template text="So, that's the `logging-player-mpv`," start="00:06:51.759" video="mainVideo" id=subtitle]]
+[[!template text="and it extends both the `logging-player` class" start="00:06:54.080" video="mainVideo" id=subtitle]]
+[[!template text="and the `emms-player-mpv` class." start="00:06:56.639" video="mainVideo" id=subtitle]]
+[[!template text="What's really interesting about this is" start="00:06:59.680" video="mainVideo" id=subtitle]]
+[[!template text="that even though the logging player is" start="00:07:01.440" video="mainVideo" id=subtitle]]
+[[!template text="part of the `emms-player` hierarchy," start="00:07:03.360" video="mainVideo" id=subtitle]]
+[[!template text="it doesn't depend on" start="00:07:05.520" video="mainVideo" id=subtitle]]
+[[!template text="a specific implementation," start="00:07:06.472" video="mainVideo" id=subtitle]]
+[[!template text="so you can combine the two different" start="00:07:08.240" video="mainVideo" id=subtitle]]
+[[!template text="classes that lets the logging class" start="00:07:10.400" video="mainVideo" id=subtitle]]
+[[!template text="only care about logging," start="00:07:12.639" video="mainVideo" id=subtitle]]
+[[!template text="and the `emms-player` class" start="00:07:13.919" video="mainVideo" id=subtitle]]
+[[!template text="only care about playing," start="00:07:15.440" video="mainVideo" id=subtitle]]
+[[!template text="and that is a really nice" start="00:07:17.039" video="mainVideo" id=subtitle]]
+[[!template text="way of separating your concerns" start="00:07:18.240" video="mainVideo" id=subtitle]]
+[[!template text="that I think is very powerful." start="00:07:19.599" video="mainVideo" id=subtitle]]
+[[!template text="Here's a quick example of" start="00:07:21.440" video="mainVideo" id=subtitle]]
+[[!template text="just how that works," start="00:07:22.515" video="mainVideo" id=subtitle]]
+[[!template text="and you can see the `unplayable`" start="00:07:23.599" video="mainVideo" id=subtitle]]
+[[!template text="track is not playable," start="00:07:25.199" video="mainVideo" id=subtitle]]
+[[!template text="and it gets logged as such," start="00:07:26.160" video="mainVideo" id=subtitle]]
+[[!template text="`foo` is playable, and you can see" start="00:07:27.840" video="mainVideo" id=subtitle]]
+[[!template text="the logs in started and stopped." start="00:07:29.360" video="mainVideo" id=subtitle]]
+[[!template text="So, you can see it's having" start="00:07:31.120" video="mainVideo" id=subtitle]]
+[[!template text="the side effects from those methods," start="00:07:32.560" video="mainVideo" id=subtitle]]
+[[!template text="and it's also returning" start="00:07:34.000" video="mainVideo" id=subtitle]]
+[[!template text="the value off the player as well." start="00:07:36.960" video="mainVideo" id=subtitle]]
+[[!template text="I think this system has a bunch of" start="00:07:40.319" video="mainVideo" id=subtitle]]
+[[!template text="really nice properties." start="00:07:41.599" video="mainVideo" id=subtitle]]
+[[!template text="First and foremost," start="00:07:43.120" video="mainVideo" id=subtitle]]
+[[!template text="it feels like a normal Lisp," start="00:07:44.080" video="mainVideo" id=subtitle]]
+[[!template text="all you're doing is calling functions," start="00:07:45.840" video="mainVideo" id=subtitle]]
+[[!template text="there's no magic involved." start="00:07:47.360" video="mainVideo" id=subtitle]]
+[[!template text="Also, you can use either or both of the" start="00:07:49.840" video="mainVideo" id=subtitle]]
+[[!template text="classes or generic functions." start="00:07:51.919" video="mainVideo" id=subtitle]]
+[[!template text="If you only need to" start="00:07:53.840" video="mainVideo" id=subtitle]]
+[[!template text="encapsulate data into a structure," start="00:07:55.120" video="mainVideo" id=subtitle]]
+[[!template text="then you can only use classes," start="00:07:56.960" video="mainVideo" id=subtitle]]
+[[!template text="you don't have to use generic functions." start="00:07:58.479" video="mainVideo" id=subtitle]]
+[[!template text="And if you only need dynamic dispatch," start="00:08:00.400" video="mainVideo" id=subtitle]]
+[[!template text="you can only implement" start="00:08:02.080" video="mainVideo" id=subtitle]]
+[[!template text="a generic function and methods." start="00:08:03.068" video="mainVideo" id=subtitle]]
+[[!template text="You don't get forced into a model" start="00:08:04.720" video="mainVideo" id=subtitle]]
+[[!template text="where you have to use both." start="00:08:06.560" video="mainVideo" id=subtitle]]
+[[!template text="You can mix and match for" start="00:08:08.000" video="mainVideo" id=subtitle]]
+[[!template text="whatever needs your program has," start="00:08:09.247" video="mainVideo" id=subtitle]]
+[[!template text="which I think is really amazing." start="00:08:10.800" video="mainVideo" id=subtitle]]
+[[!template text="Any value can conform to an interface," start="00:08:13.039" video="mainVideo" id=subtitle]]
+[[!template text="meaning a generic function." start="00:08:15.440" video="mainVideo" id=subtitle]]
+[[!template text="So, you don't have to use those classes." start="00:08:17.039" video="mainVideo" id=subtitle]]
+[[!template text="You can even implement" start="00:08:19.520" video="mainVideo" id=subtitle]]
+[[!template text="a generic function over `nil`," start="00:08:20.479" video="mainVideo" id=subtitle]]
+[[!template text="which gives you those really nice" start="00:08:22.240" video="mainVideo" id=subtitle]]
+[[!template text="properties of Lisp," start="00:08:23.599" video="mainVideo" id=subtitle]]
+[[!template text="where you have nil-punning, you know," start="00:08:24.800" video="mainVideo" id=subtitle]]
+[[!template text="if you take the head of a nil list," start="00:08:26.460" video="mainVideo" id=subtitle]]
+[[!template text="then the output is `nil`," start="00:08:28.800" video="mainVideo" id=subtitle]]
+[[!template text="but you can do that" start="00:08:30.479" video="mainVideo" id=subtitle]]
+[[!template text="with your object system too." start="00:08:31.283" video="mainVideo" id=subtitle]]
+[[!template text="And a really nice feature of that is" start="00:08:32.880" video="mainVideo" id=subtitle]]
+[[!template text="that you have no possibility of" start="00:08:34.320" video="mainVideo" id=subtitle]]
+[[!template text="null pointer exceptions" start="00:08:35.919" video="mainVideo" id=subtitle]]
+[[!template text="like you do in other languages." start="00:08:36.959" video="mainVideo" id=subtitle]]
+[[!template text="They have a calling convention" start="00:08:38.719" video="mainVideo" id=subtitle]]
+[[!template text="where you call object dot method," start="00:08:39.919" video="mainVideo" id=subtitle]]
+[[!template text="but in CLOS, you call a generic function," start="00:08:42.880" video="mainVideo" id=subtitle]]
+[[!template text="and you just give it some arguments." start="00:08:45.600" video="mainVideo" id=subtitle]]
+[[!template text="Typically, the first one is going to be" start="00:08:47.279" video="mainVideo" id=subtitle]]
+[[!template text="an EIEIO class object," start="00:08:48.959" video="mainVideo" id=subtitle]]
+[[!template text="but it doesn't have to be," start="00:08:51.680" video="mainVideo" id=subtitle]]
+[[!template text="but because you're not calling that" start="00:08:53.200" video="mainVideo" id=subtitle]]
+[[!template text="instance of an object," start="00:08:54.640" video="mainVideo" id=subtitle]]
+[[!template text="there's nothing to be nil in the first place," start="00:08:55.519" video="mainVideo" id=subtitle]]
+[[!template text="so there's no possibility of" start="00:08:57.279" video="mainVideo" id=subtitle]]
+[[!template text="a nil pointer exception." start="00:08:58.320" video="mainVideo" id=subtitle]]
+[[!template text="And then the ability to" start="00:09:00.080" video="mainVideo" id=subtitle]]
+[[!template text="have multiple inheritance" start="00:09:01.376" video="mainVideo" id=subtitle]]
+[[!template text="and mix in all of these different" start="00:09:02.480" video="mainVideo" id=subtitle]]
+[[!template text="functionalities into your final object" start="00:09:04.000" video="mainVideo" id=subtitle]]
+[[!template text="is very powerful." start="00:09:05.760" video="mainVideo" id=subtitle]]
+[[!template text="Because you have multiple inheritance," start="00:09:07.279" video="mainVideo" id=subtitle]]
+[[!template text="your final object that" start="00:09:09.839" video="mainVideo" id=subtitle]]
+[[!template text="composes all of those things" start="00:09:11.120" video="mainVideo" id=subtitle]]
+[[!template text="is both a player and a logger," start="00:09:12.560" video="mainVideo" id=subtitle]]
+[[!template text="and it can be substituted into code" start="00:09:14.080" video="mainVideo" id=subtitle]]
+[[!template text="that expects either of them." start="00:09:15.600" video="mainVideo" id=subtitle]]
+[[!template text="It's not an adapter class" start="00:09:17.279" video="mainVideo" id=subtitle]]
+[[!template text="that only allows you to do one thing," start="00:09:19.040" video="mainVideo" id=subtitle]]
+[[!template text="it does both of them." start="00:09:21.360" video="mainVideo" id=subtitle]]
+[[!template text="I think that's amazing." start="00:09:22.560" video="mainVideo" id=subtitle]]
+[[!template text="So, here are some practical examples" start="00:09:24.800" video="mainVideo" id=subtitle]]
+[[!template text="where I think maybe this" start="00:09:26.320" video="mainVideo" id=subtitle]]
+[[!template text="could be a good idea." start="00:09:27.387" video="mainVideo" id=subtitle]]
+[[!template text="And I like to think about," start="00:09:28.720" video="mainVideo" id=subtitle]]
+[[!template text="&quot;What is OOP actually good for?&quot;." start="00:09:30.399" video="mainVideo" id=subtitle]]
+[[!template text="I think it has three really amazing powers," start="00:09:32.320" video="mainVideo" id=subtitle]]
+[[!template text="encapsulation, abstraction," start="00:09:34.640" video="mainVideo" id=subtitle]]
+[[!template text="and extensibility," start="00:09:36.399" video="mainVideo" id=subtitle]]
+[[!template text="so let's look at those." start="00:09:37.279" video="mainVideo" id=subtitle]]
+[[!template text="Encapsulation is just keeping" start="00:09:39.200" video="mainVideo" id=subtitle]]
+[[!template text="related data together." start="00:09:40.959" video="mainVideo" id=subtitle]]
+[[!template text="Here's an example from the" start="00:09:42.480" video="mainVideo" id=subtitle]]
+[[!template text="transmission Torrent client." start="00:09:43.680" video="mainVideo" id=subtitle]]
+[[!template text="In order for it to work," start="00:09:45.360" video="mainVideo" id=subtitle]]
+[[!template text="it needs to have all four of" start="00:09:46.399" video="mainVideo" id=subtitle]]
+[[!template text="these variables set consistently," start="00:09:47.600" video="mainVideo" id=subtitle]]
+[[!template text="but if you use the customization interface," start="00:09:49.920" video="mainVideo" id=subtitle]]
+[[!template text="they're kind of strewn all over the buffer" start="00:09:52.240" video="mainVideo" id=subtitle]]
+[[!template text="because that shows them alphabetically" start="00:09:53.920" video="mainVideo" id=subtitle]]
+[[!template text="by variable name instead of" start="00:09:55.760" video="mainVideo" id=subtitle]]
+[[!template text="grouping them logically by function." start="00:09:57.040" video="mainVideo" id=subtitle]]
+[[!template text="You also have all these" start="00:09:59.920" video="mainVideo" id=subtitle]]
+[[!template text="in the global namespace," start="00:10:01.327" video="mainVideo" id=subtitle]]
+[[!template text="so you need this disambiguation in front," start="00:10:02.480" video="mainVideo" id=subtitle]]
+[[!template text="you have to have a transmission prefix," start="00:10:04.720" video="mainVideo" id=subtitle]]
+[[!template text="so it's kind of ugly." start="00:10:06.800" video="mainVideo" id=subtitle]]
+[[!template text="An alternative example would be to" start="00:10:08.720" video="mainVideo" id=subtitle]]
+[[!template text="encapsulate all of that" start="00:10:10.240" video="mainVideo" id=subtitle]]
+[[!template text="in a single class." start="00:10:11.760" video="mainVideo" id=subtitle]]
+[[!template text="This has one slot for each of those values," start="00:10:13.360" video="mainVideo" id=subtitle]]
+[[!template text="except the username" start="00:10:16.160" video="mainVideo" id=subtitle]]
+[[!template text="and password is broken out," start="00:10:17.040" video="mainVideo" id=subtitle]]
+[[!template text="there was only one in the previous example," start="00:10:18.000" video="mainVideo" id=subtitle]]
+[[!template text="but it works pretty much the same." start="00:10:20.240" video="mainVideo" id=subtitle]]
+[[!template text="The really neat thing about this is that" start="00:10:23.120" video="mainVideo" id=subtitle]]
+[[!template text="the customization interface understands" start="00:10:25.200" video="mainVideo" id=subtitle]]
+[[!template text="how to customize EIEIO objects," start="00:10:27.279" video="mainVideo" id=subtitle]]
+[[!template text="so you can set your custom variable" start="00:10:29.920" video="mainVideo" id=subtitle]]
+[[!template text="to the value of an object," start="00:10:32.640" video="mainVideo" id=subtitle]]
+[[!template text="and in the customization interface," start="00:10:34.000" video="mainVideo" id=subtitle]]
+[[!template text="it shows you all of the fields," start="00:10:35.760" video="mainVideo" id=subtitle]]
+[[!template text="and it lets you edit the values" start="00:10:37.040" video="mainVideo" id=subtitle]]
+[[!template text="of those slots directly." start="00:10:38.399" video="mainVideo" id=subtitle]]
+[[!template text="So, that keeps that logical grouping" start="00:10:40.079" video="mainVideo" id=subtitle]]
+[[!template text="that I think makes things really easy to use." start="00:10:41.760" video="mainVideo" id=subtitle]]
+[[!template text="Another thing it's really good at is" start="00:10:44.800" video="mainVideo" id=subtitle]]
+[[!template text="abstraction, and this is really core to" start="00:10:46.160" video="mainVideo" id=subtitle]]
+[[!template text="a lot of what Emacs does" start="00:10:48.268" video="mainVideo" id=subtitle]]
+[[!template text="because it runs on so many different systems," start="00:10:49.408" video="mainVideo" id=subtitle]]
+[[!template text="and it works with so many different" start="00:10:51.200" video="mainVideo" id=subtitle]]
+[[!template text="kinds of similar tools." start="00:10:53.308" video="mainVideo" id=subtitle]]
+[[!template text="Here's an example from" start="00:10:55.120" video="mainVideo" id=subtitle]]
+[[!template text="the built-in SQL implementation." start="00:10:56.109" video="mainVideo" id=subtitle]]
+[[!template text="This is the definition of" start="00:10:58.079" video="mainVideo" id=subtitle]]
+[[!template text="the postgres backend," start="00:10:59.360" video="mainVideo" id=subtitle]]
+[[!template text="there's one of these for" start="00:11:01.040" video="mainVideo" id=subtitle]]
+[[!template text="every supported database backend." start="00:11:02.160" video="mainVideo" id=subtitle]]
+[[!template text="And you can see, this is a pretty" start="00:11:04.000" video="mainVideo" id=subtitle]]
+[[!template text="classic interface abstraction pattern." start="00:11:05.440" video="mainVideo" id=subtitle]]
+[[!template text="On the left-hand side," start="00:11:08.480" video="mainVideo" id=subtitle]]
+[[!template text="you have a symbol that's common" start="00:11:09.680" video="mainVideo" id=subtitle]]
+[[!template text="among all the database backends," start="00:11:10.880" video="mainVideo" id=subtitle]]
+[[!template text="and the code that doesn't" start="00:11:12.399" video="mainVideo" id=subtitle]]
+[[!template text="know about the implementation can use," start="00:11:14.160" video="mainVideo" id=subtitle]]
+[[!template text="no matter what implementation" start="00:11:16.240" video="mainVideo" id=subtitle]]
+[[!template text="is being specified." start="00:11:17.519" video="mainVideo" id=subtitle]]
+[[!template text="On the right-hand side," start="00:11:19.040" video="mainVideo" id=subtitle]]
+[[!template text="you have the implementation" start="00:11:20.000" video="mainVideo" id=subtitle]]
+[[!template text="specific values," start="00:11:21.120" video="mainVideo" id=subtitle]]
+[[!template text="in some cases these are just strings," start="00:11:22.560" video="mainVideo" id=subtitle]]
+[[!template text="or regexes, and in others" start="00:11:24.399" video="mainVideo" id=subtitle]]
+[[!template text="those are actual functions." start="00:11:25.760" video="mainVideo" id=subtitle]]
+[[!template text="So, really this already is" start="00:11:27.519" video="mainVideo" id=subtitle]]
+[[!template text="object orientation," start="00:11:29.440" video="mainVideo" id=subtitle]]
+[[!template text="it's just an ad-hoc system for it," start="00:11:30.720" video="mainVideo" id=subtitle]]
+[[!template text="but you don't have to use an ad-hoc system" start="00:11:32.959" video="mainVideo" id=subtitle]]
+[[!template text="because there's this" start="00:11:34.880" video="mainVideo" id=subtitle]]
+[[!template text="nice formal one instead." start="00:11:35.519" video="mainVideo" id=subtitle]]
+[[!template text="Another thing that it's" start="00:11:38.000" video="mainVideo" id=subtitle]]
+[[!template text="really good at is extensibility," start="00:11:38.880" video="mainVideo" id=subtitle]]
+[[!template text="we saw some of that with" start="00:11:40.959" video="mainVideo" id=subtitle]]
+[[!template text="the emms-player example earlier." start="00:11:42.160" video="mainVideo" id=subtitle]]
+[[!template text="But here's another thing I think" start="00:11:44.800" video="mainVideo" id=subtitle]]
+[[!template text="it would be interesting to explore." start="00:11:46.160" video="mainVideo" id=subtitle]]
+[[!template text="Emacs has this idea of derived modes" start="00:11:48.720" video="mainVideo" id=subtitle]]
+[[!template text="where you have a mode that's based on" start="00:11:51.279" video="mainVideo" id=subtitle]]
+[[!template text="another, and that's a pretty clear" start="00:11:52.639" video="mainVideo" id=subtitle]]
+[[!template text="inheritance pattern straight out of OOP" start="00:11:54.639" video="mainVideo" id=subtitle]]
+[[!template text="as far as I'm concerned." start="00:11:57.040" video="mainVideo" id=subtitle]]
+[[!template text="What would it look like" start="00:11:58.560" video="mainVideo" id=subtitle]]
+[[!template text="if major modes were EIEIO classes," start="00:12:00.079" video="mainVideo" id=subtitle]]
+[[!template text="and you could extend your mode" start="00:12:02.959" video="mainVideo" id=subtitle]]
+[[!template text="by extending the class." start="00:12:04.800" video="mainVideo" id=subtitle]]
+[[!template text="I think that's a really interesting idea," start="00:12:06.399" video="mainVideo" id=subtitle]]
+[[!template text="and I'd like to explore that more." start="00:12:08.240" video="mainVideo" id=subtitle]]
+[[!template text="In conclusion, I think EIEIO is amazing," start="00:12:10.880" video="mainVideo" id=subtitle]]
+[[!template text="and I had no idea that such a powerful" start="00:12:14.079" video="mainVideo" id=subtitle]]
+[[!template text="object orientation system" start="00:12:16.079" video="mainVideo" id=subtitle]]
+[[!template text="was available in the Emacs." start="00:12:18.079" video="mainVideo" id=subtitle]]
+[[!template text="My goal with this talk" start="00:12:20.160" video="mainVideo" id=subtitle]]
+[[!template text="is for anyone who writes Emacs Lisp," start="00:12:21.519" video="mainVideo" id=subtitle]]
+[[!template text="to look at these classes of problems," start="00:12:23.519" video="mainVideo" id=subtitle]]
+[[!template text="encapsulation, abstraction," start="00:12:25.360" video="mainVideo" id=subtitle]]
+[[!template text="and extensibility," start="00:12:27.360" video="mainVideo" id=subtitle]]
+[[!template text="and if you run into" start="00:12:28.639" video="mainVideo" id=subtitle]]
+[[!template text="those problems in your code," start="00:12:29.600" video="mainVideo" id=subtitle]]
+[[!template text="instead of immediately reaching" start="00:12:31.279" video="mainVideo" id=subtitle]]
+[[!template text="and building your own system," start="00:12:33.279" video="mainVideo" id=subtitle]]
+[[!template text="I want you to think:" start="00:12:34.959" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Oh there's a thing for that," start="00:12:35.760" video="mainVideo" id=subtitle]]
+[[!template text="and I can just use it.&quot;" start="00:12:37.279" video="mainVideo" id=subtitle]]
+[[!template text="That's my talk, thanks." start="00:12:39.040" video="mainVideo" id=subtitle]]
+[[!template text="Hack on!" start="00:12:40.560" video="mainVideo" id=subtitle]]
+[[!template text="captions by bhavin192 (Bhavin Gandhi)" start="00:12:41.560" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/freedom.md b/2021/captions/freedom.md
new file mode 100644
index 00000000..9244def4
--- /dev/null
+++ b/2021/captions/freedom.md
@@ -0,0 +1,840 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello EmacsConf! Hello world!" start="00:00:11.610" video="mainVideo" id=subtitle]]
+[[!template text="Today I will talk to you about" start="00:00:13.974" video="mainVideo" id=subtitle]]
+[[!template text="how Emacs made me appreciate" start="00:00:15.940" video="mainVideo" id=subtitle]]
+[[!template text="software freedom." start="00:00:19.040" video="mainVideo" id=subtitle]]
+[[!template text="My name is Protesilaos, also known as &quot;Prot&quot;." start="00:00:20.900" video="mainVideo" id=subtitle]]
+[[!template text="I am joining you from the mountains of Cyprus." start="00:00:24.180" video="mainVideo" id=subtitle]]
+[[!template text="Cyprus is an island" start="00:00:28.430" video="mainVideo" id=subtitle]]
+[[!template text="in the Eastern Mediterranean Sea." start="00:00:30.274" video="mainVideo" id=subtitle]]
+[[!template text="So let's remove this header" start="00:00:32.940" video="mainVideo" id=subtitle]]
+[[!template text="from the top of the presentation" start="00:00:35.107" video="mainVideo" id=subtitle]]
+[[!template text="and proceed with today's talk." start="00:00:37.174" video="mainVideo" id=subtitle]]
+[[!template text="In that header, you can find a link" start="00:00:40.307" video="mainVideo" id=subtitle]]
+[[!template text="to my website, protesilaos.com ." start="00:00:41.907" video="mainVideo" id=subtitle]]
+[[!template new="1" text="My presentation focuses on the intersection" start="00:00:45.974" video="mainVideo" id=subtitle]]
+[[!template text="between software freedom" start="00:00:50.207" video="mainVideo" id=subtitle]]
+[[!template text="and what we find in the Emacs milieu." start="00:00:52.210" video="mainVideo" id=subtitle]]
+[[!template text="Here &quot;the Emacs milieu&quot;" start="00:00:55.890" video="mainVideo" id=subtitle]]
+[[!template text="encompasses two magnitudes:" start="00:00:57.640" video="mainVideo" id=subtitle]]
+[[!template text="(i) the program we use and" start="00:01:00.507" video="mainVideo" id=subtitle]]
+[[!template text="(ii) the diverse, global community of people" start="00:01:03.320" video="mainVideo" id=subtitle]]
+[[!template text="that has grown organically around it." start="00:01:06.740" video="mainVideo" id=subtitle]]
+[[!template text="I will talk to you about" start="00:01:10.530" video="mainVideo" id=subtitle]]
+[[!template text="how Emacs made me appreciate" start="00:01:12.007" video="mainVideo" id=subtitle]]
+[[!template text="software freedom" start="00:01:13.707" video="mainVideo" id=subtitle]]
+[[!template text="and helped me exercise it" start="00:01:14.940" video="mainVideo" id=subtitle]]
+[[!template text="to its full potential." start="00:01:16.674" video="mainVideo" id=subtitle]]
+[[!template text="Personal anecdotes are not" start="00:01:19.830" video="mainVideo" id=subtitle]]
+[[!template text="the main focus of this talk." start="00:01:21.440" video="mainVideo" id=subtitle]]
+[[!template text="Rather, they serve the ancillary role" start="00:01:23.650" video="mainVideo" id=subtitle]]
+[[!template text="of making certain insights more relatable." start="00:01:26.740" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The presentation is theoretical in nature" start="00:01:31.470" video="mainVideo" id=subtitle]]
+[[!template text="and targeted at a general audience." start="00:01:34.574" video="mainVideo" id=subtitle]]
+[[!template text="No knowledge of programming is required." start="00:01:38.430" video="mainVideo" id=subtitle]]
+[[!template text="It is assumed, however," start="00:01:42.020" video="mainVideo" id=subtitle]]
+[[!template text="that you are familiar" start="00:01:43.840" video="mainVideo" id=subtitle]]
+[[!template text="with some basic concepts," start="00:01:45.374" video="mainVideo" id=subtitle]]
+[[!template text="such as the fact that Emacs is extended" start="00:01:47.074" video="mainVideo" id=subtitle]]
+[[!template text="with the Emacs Lisp programming language," start="00:01:50.707" video="mainVideo" id=subtitle]]
+[[!template text="or that Emacs is a GNU project" start="00:01:53.507" video="mainVideo" id=subtitle]]
+[[!template text="that champions end-user software freedom." start="00:01:56.807" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's start with a few words about me" start="00:02:02.450" video="mainVideo" id=subtitle]]
+[[!template text="before elaborating further." start="00:02:04.574" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I was born in Greece in 1988" start="00:02:07.280" video="mainVideo" id=subtitle]]
+[[!template text="and was raised there." start="00:02:11.540" video="mainVideo" id=subtitle]]
+[[!template text="As a kid I was not into" start="00:02:13.379" video="mainVideo" id=subtitle]]
+[[!template text="tech-related activities. Not at all." start="00:02:16.307" video="mainVideo" id=subtitle]]
+[[!template text="All I cared about was playing football" start="00:02:20.480" video="mainVideo" id=subtitle]]
+[[!template text="(association football, also known as soccer)" start="00:02:22.973" video="mainVideo" id=subtitle]]
+[[!template text="and staying outdoors." start="00:02:26.440" video="mainVideo" id=subtitle]]
+[[!template text="My formal education is in the humanities" start="00:02:29.840" video="mainVideo" id=subtitle]]
+[[!template text="(or else, the liberal arts)." start="00:02:33.074" video="mainVideo" id=subtitle]]
+[[!template text="I had a career in politics." start="00:02:35.690" video="mainVideo" id=subtitle]]
+[[!template text="I lived in Brussels, Belgium" start="00:02:38.040" video="mainVideo" id=subtitle]]
+[[!template text="where I worked at the" start="00:02:41.107" video="mainVideo" id=subtitle]]
+[[!template text="European Parliament, among others." start="00:02:42.840" video="mainVideo" id=subtitle]]
+[[!template new="1" text="After some intense soul-searching," start="00:02:46.050" video="mainVideo" id=subtitle]]
+[[!template text="I realised I did not want to be" start="00:02:49.774" video="mainVideo" id=subtitle]]
+[[!template text="a political operator any more" start="00:02:52.607" video="mainVideo" id=subtitle]]
+[[!template text="and made radical changes in my life." start="00:02:55.040" video="mainVideo" id=subtitle]]
+[[!template text="I have since come to terms with the fact" start="00:02:59.950" video="mainVideo" id=subtitle]]
+[[!template text="that I am a philosopher." start="00:03:02.207" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I am not a programmer." start="00:03:04.709" video="mainVideo" id=subtitle]]
+[[!template text="Neither by trade nor education." start="00:03:07.640" video="mainVideo" id=subtitle]]
+[[!template text="I code for leisure." start="00:03:10.709" video="mainVideo" id=subtitle]]
+[[!template text="I was not tech-savvy until my mid-20s." start="00:03:13.140" video="mainVideo" id=subtitle]]
+[[!template text="I have been using GNU/Linux distributions" start="00:03:17.370" video="mainVideo" id=subtitle]]
+[[!template text="since the summer of 2016." start="00:03:20.740" video="mainVideo" id=subtitle]]
+[[!template text="While I switched to Emacs full-time" start="00:03:24.180" video="mainVideo" id=subtitle]]
+[[!template text="in the summer of 2019." start="00:03:26.374" video="mainVideo" id=subtitle]]
+[[!template text="Before that switch, I was running" start="00:03:30.190" video="mainVideo" id=subtitle]]
+[[!template text="a bespoke environment" start="00:03:31.840" video="mainVideo" id=subtitle]]
+[[!template text="that involved several standalone programs" start="00:03:33.774" video="mainVideo" id=subtitle]]
+[[!template text="like Vim, Tmux, and a tiling window manager." start="00:03:36.907" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I am the creator and maintainer" start="00:03:41.360" video="mainVideo" id=subtitle]]
+[[!template text="of the modus-themes package." start="00:03:44.874" video="mainVideo" id=subtitle]]
+[[!template text="The themes are modus-operandi" start="00:03:47.340" video="mainVideo" id=subtitle]]
+[[!template text="and modus-vivendi," start="00:03:50.707" video="mainVideo" id=subtitle]]
+[[!template text="but they are grouped together" start="00:03:52.440" video="mainVideo" id=subtitle]]
+[[!template text="in the package called modus-themes." start="00:03:53.874" video="mainVideo" id=subtitle]]
+[[!template text="These are designed to conform" start="00:03:57.760" video="mainVideo" id=subtitle]]
+[[!template text="with the highest accessibility standard" start="00:03:59.274" video="mainVideo" id=subtitle]]
+[[!template text="for legibility, and optionally" start="00:04:01.840" video="mainVideo" id=subtitle]]
+[[!template text="support the needs of users" start="00:04:05.007" video="mainVideo" id=subtitle]]
+[[!template text="with red-green colour deficiency" start="00:04:07.007" video="mainVideo" id=subtitle]]
+[[!template text="(deuteranopia, as it is known)." start="00:04:09.269" video="mainVideo" id=subtitle]]
+[[!template text="The themes are built into" start="00:04:12.307" video="mainVideo" id=subtitle]]
+[[!template text="Emacs version 28 or higher." start="00:04:14.940" video="mainVideo" id=subtitle]]
+[[!template text="A section of my website" start="00:04:17.579" video="mainVideo" id=subtitle]]
+[[!template text="is dedicated to them" start="00:04:19.574" video="mainVideo" id=subtitle]]
+[[!template text="as well as to all my other" start="00:04:21.307" video="mainVideo" id=subtitle]]
+[[!template text="Emacs-related contributions." start="00:04:23.840" video="mainVideo" id=subtitle]]
+[[!template new="1" text="For the remainder of this 40-minute talk," start="00:04:27.620" video="mainVideo" id=subtitle]]
+[[!template text="I will explain how Emacs" start="00:04:30.274" video="mainVideo" id=subtitle]]
+[[!template text="made me appreciate software freedom," start="00:04:31.907" video="mainVideo" id=subtitle]]
+[[!template text="how it empowers me" start="00:04:34.240" video="mainVideo" id=subtitle]]
+[[!template text="in my day-to-day computing," start="00:04:36.374" video="mainVideo" id=subtitle]]
+[[!template text="and the lessons I have drawn" start="00:04:38.924" video="mainVideo" id=subtitle]]
+[[!template text="from that liberating experience." start="00:04:40.374" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's proceed to the body" start="00:04:44.207" video="mainVideo" id=subtitle]]
+[[!template text="of this presentation," start="00:04:47.174" video="mainVideo" id=subtitle]]
+[[!template text="and the first section is titled:" start="00:04:48.407" video="mainVideo" id=subtitle]]
+[[!template text="&quot;The inherent Emacs qualities" start="00:04:51.740" video="mainVideo" id=subtitle]]
+[[!template text="for an autodidact.&quot;" start="00:04:54.807" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Emacs has this reputation" start="00:04:56.860" video="mainVideo" id=subtitle]]
+[[!template text="of being extremely hard to learn" start="00:05:00.440" video="mainVideo" id=subtitle]]
+[[!template text="and difficult to get started with." start="00:05:02.774" video="mainVideo" id=subtitle]]
+[[!template text="So how does someone like me," start="00:05:06.469" video="mainVideo" id=subtitle]]
+[[!template text="who was not even tech-literate" start="00:05:08.140" video="mainVideo" id=subtitle]]
+[[!template text="a few years ago," start="00:05:10.607" video="mainVideo" id=subtitle]]
+[[!template text="go on to use Emacs effectively?" start="00:05:11.907" video="mainVideo" id=subtitle]]
+[[!template text="How do you start from zero," start="00:05:15.120" video="mainVideo" id=subtitle]]
+[[!template text="with no knowledge of ELisp" start="00:05:16.640" video="mainVideo" id=subtitle]]
+[[!template text="and with only a rudimentary understanding" start="00:05:19.140" video="mainVideo" id=subtitle]]
+[[!template text="of programming," start="00:05:22.174" video="mainVideo" id=subtitle]]
+[[!template text="to eventually maintain packages for Emacs," start="00:05:23.474" video="mainVideo" id=subtitle]]
+[[!template text="and even contribute directly to emacs.git" start="00:05:25.974" video="mainVideo" id=subtitle]]
+[[!template text="and other sources?" start="00:05:29.430" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The answer to these and related questions" start="00:05:32.710" video="mainVideo" id=subtitle]]
+[[!template text="lies in the very description of Emacs" start="00:05:35.207" video="mainVideo" id=subtitle]]
+[[!template text="as a &quot;self-documenting&quot; piece of software." start="00:05:37.974" video="mainVideo" id=subtitle]]
+[[!template text="It means that Emacs has a robust Help system" start="00:05:41.539" video="mainVideo" id=subtitle]]
+[[!template text="which informs you about the state" start="00:05:45.574" video="mainVideo" id=subtitle]]
+[[!template text="of a given construct." start="00:05:48.207" video="mainVideo" id=subtitle]]
+[[!template text="Such as what the original and current values" start="00:05:50.930" video="mainVideo" id=subtitle]]
+[[!template text="of a variable are." start="00:05:53.574" video="mainVideo" id=subtitle]]
+[[!template text="Or whether some function is being &quot;advised&quot;," start="00:05:56.430" video="mainVideo" id=subtitle]]
+[[!template text="as it is known," start="00:05:58.574" video="mainVideo" id=subtitle]]
+[[!template text="else, dynamically adjusted," start="00:05:59.640" video="mainVideo" id=subtitle]]
+[[!template text="by another function," start="00:06:02.440" video="mainVideo" id=subtitle]]
+[[!template text="and what that advice amounts to." start="00:06:04.074" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The self-documenting nature of Emacs" start="00:06:08.939" video="mainVideo" id=subtitle]]
+[[!template text="is combined with the fact" start="00:06:10.907" video="mainVideo" id=subtitle]]
+[[!template text="that it consists of free software." start="00:06:12.407" video="mainVideo" id=subtitle]]
+[[!template text="Not only do we get information" start="00:06:16.319" video="mainVideo" id=subtitle]]
+[[!template text="about what Emacs knows," start="00:06:18.040" video="mainVideo" id=subtitle]]
+[[!template text="but have the underlying code" start="00:06:19.540" video="mainVideo" id=subtitle]]
+[[!template text="readily available to us." start="00:06:22.009" video="mainVideo" id=subtitle]]
+[[!template text="For example, every Help buffer" start="00:06:24.099" video="mainVideo" id=subtitle]]
+[[!template text="provides a link to the source" start="00:06:26.840" video="mainVideo" id=subtitle]]
+[[!template text="of the item it references." start="00:06:29.107" video="mainVideo" id=subtitle]]
+[[!template text="We can study that and edit it as we wish." start="00:06:31.490" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Self-documentation and free software" start="00:06:37.960" video="mainVideo" id=subtitle]]
+[[!template text="are blended together" start="00:06:39.340" video="mainVideo" id=subtitle]]
+[[!template text="with a third quality of Emacs:" start="00:06:41.307" video="mainVideo" id=subtitle]]
+[[!template text="its implementation as a Lisp machine," start="00:06:45.007" video="mainVideo" id=subtitle]]
+[[!template text="or else, its ability to evaluate Lisp code" start="00:06:48.174" video="mainVideo" id=subtitle]]
+[[!template text="and make use of it directly." start="00:06:52.440" video="mainVideo" id=subtitle]]
+[[!template text="The ubiquity and uniformity" start="00:06:56.129" video="mainVideo" id=subtitle]]
+[[!template text="of the Lisp interpreter," start="00:06:58.774" video="mainVideo" id=subtitle]]
+[[!template text="together with the immediacy of its results" start="00:07:00.307" video="mainVideo" id=subtitle]]
+[[!template text="help one learn how to use Emacs" start="00:07:04.007" video="mainVideo" id=subtitle]]
+[[!template text="and how to write Emacs Lisp expressions." start="00:07:06.580" video="mainVideo" id=subtitle]]
+[[!template text="For someone who is self-taught like me" start="00:07:10.360" video="mainVideo" id=subtitle]]
+[[!template text="and who often learns through" start="00:07:13.474" video="mainVideo" id=subtitle]]
+[[!template text="a process of trial and error," start="00:07:15.307" video="mainVideo" id=subtitle]]
+[[!template text="this is of great value." start="00:07:17.507" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Learning how to use Emacs" start="00:07:20.589" video="mainVideo" id=subtitle]]
+[[!template text="and how to write in ELisp" start="00:07:23.074" video="mainVideo" id=subtitle]]
+[[!template text="is the basic skillset you need" start="00:07:25.007" video="mainVideo" id=subtitle]]
+[[!template text="to also start extending Emacs" start="00:07:27.707" video="mainVideo" id=subtitle]]
+[[!template text="for your own use," start="00:07:30.474" video="mainVideo" id=subtitle]]
+[[!template text="or even for publishing packages" start="00:07:32.140" video="mainVideo" id=subtitle]]
+[[!template text="and making contributions" start="00:07:34.807" video="mainVideo" id=subtitle]]
+[[!template text="to emacs.git directly." start="00:07:36.607" video="mainVideo" id=subtitle]]
+[[!template text="That is because the skills you acquire" start="00:07:40.490" video="mainVideo" id=subtitle]]
+[[!template text="by tinkering with your init.el as a beginner" start="00:07:42.840" video="mainVideo" id=subtitle]]
+[[!template text="will always stay with you" start="00:07:46.974" video="mainVideo" id=subtitle]]
+[[!template text="throughout your time as an Emacs user." start="00:07:49.207" video="mainVideo" id=subtitle]]
+[[!template text="That is empowering in itself." start="00:07:53.550" video="mainVideo" id=subtitle]]
+[[!template text="It rewards your investment" start="00:07:56.210" video="mainVideo" id=subtitle]]
+[[!template text="in time and effort." start="00:07:58.593" video="mainVideo" id=subtitle]]
+[[!template text="The more you learn," start="00:08:00.270" video="mainVideo" id=subtitle]]
+[[!template text="the more capable you become" start="00:08:01.374" video="mainVideo" id=subtitle]]
+[[!template text="to enact change," start="00:08:03.340" video="mainVideo" id=subtitle]]
+[[!template text="to configure things to your liking" start="00:08:06.007" video="mainVideo" id=subtitle]]
+[[!template text="and develop the exact workflow that you want" start="00:08:08.074" video="mainVideo" id=subtitle]]
+[[!template text="without making any compromises." start="00:08:11.974" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Compare that to, say," start="00:08:16.569" video="mainVideo" id=subtitle]]
+[[!template text="my tiling window manager." start="00:08:18.507" video="mainVideo" id=subtitle]]
+[[!template text="I can configure it with a shell script." start="00:08:21.449" video="mainVideo" id=subtitle]]
+[[!template text="So I learn POSIX shell or, let's say, Bash." start="00:08:24.479" video="mainVideo" id=subtitle]]
+[[!template text="But my knowledge of the shell" start="00:08:29.689" video="mainVideo" id=subtitle]]
+[[!template text="does not extend to modifying" start="00:08:31.804" video="mainVideo" id=subtitle]]
+[[!template text="the behaviour of the window manager as such," start="00:08:34.072" video="mainVideo" id=subtitle]]
+[[!template text="because that is not implemented" start="00:08:37.593" video="mainVideo" id=subtitle]]
+[[!template text="as a shell script," start="00:08:40.471" video="mainVideo" id=subtitle]]
+[[!template text="but in another language." start="00:08:42.140" video="mainVideo" id=subtitle]]
+[[!template text="So for an autodidact like me," start="00:08:44.250" video="mainVideo" id=subtitle]]
+[[!template text="it is more difficult to learn" start="00:08:46.942" video="mainVideo" id=subtitle]]
+[[!template text="yet another paradigm" start="00:08:49.634" video="mainVideo" id=subtitle]]
+[[!template text="before I can achieve what I want." start="00:08:51.430" video="mainVideo" id=subtitle]]
+[[!template text="How do you make that extra step" start="00:08:54.860" video="mainVideo" id=subtitle]]
+[[!template text="without self-documentation" start="00:08:57.342" video="mainVideo" id=subtitle]]
+[[!template text="and the immediacy as well as transparency" start="00:08:59.437" video="mainVideo" id=subtitle]]
+[[!template text="that you get from" start="00:09:02.605" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs Lisp interpreter?" start="00:09:04.307" video="mainVideo" id=subtitle]]
+[[!template text="It is more demanding," start="00:09:06.850" video="mainVideo" id=subtitle]]
+[[!template text="which makes Emacs comparatively easier" start="00:09:10.029" video="mainVideo" id=subtitle]]
+[[!template text="when we account for" start="00:09:12.843" video="mainVideo" id=subtitle]]
+[[!template text="the longer-term effort involved." start="00:09:14.274" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's move to the next section:" start="00:09:17.107" video="mainVideo" id=subtitle]]
+[[!template text="&quot;The interconnectedness of the Emacs space.&quot;" start="00:09:21.410" video="mainVideo" id=subtitle]]
+[[!template new="1" text="As I already mentioned," start="00:09:24.640" video="mainVideo" id=subtitle]]
+[[!template text="Emacs rewards you" start="00:09:27.607" video="mainVideo" id=subtitle]]
+[[!template text="for the investment in time and effort" start="00:09:28.874" video="mainVideo" id=subtitle]]
+[[!template text="you put into it." start="00:09:31.374" video="mainVideo" id=subtitle]]
+[[!template text="In my experience," start="00:09:33.649" video="mainVideo" id=subtitle]]
+[[!template text="this makes it easier to master" start="00:09:34.891" video="mainVideo" id=subtitle]]
+[[!template text="than a combination" start="00:09:36.707" video="mainVideo" id=subtitle]]
+[[!template text="of otherwise disparate tools," start="00:09:38.007" video="mainVideo" id=subtitle]]
+[[!template text="each with its own paradigm" start="00:09:40.434" video="mainVideo" id=subtitle]]
+[[!template text="of interaction and particularities" start="00:09:42.649" video="mainVideo" id=subtitle]]
+[[!template text="of implementation." start="00:09:45.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Before switching to Emacs," start="00:09:48.350" video="mainVideo" id=subtitle]]
+[[!template text="I was using a combination" start="00:09:50.035" video="mainVideo" id=subtitle]]
+[[!template text="of standalone programs" start="00:09:51.507" video="mainVideo" id=subtitle]]
+[[!template text="as part of a bespoke computing environment" start="00:09:53.640" video="mainVideo" id=subtitle]]
+[[!template text="that I had pieced together." start="00:09:56.274" video="mainVideo" id=subtitle]]
+[[!template text="The program called &quot;Mutt&quot;" start="00:09:58.860" video="mainVideo" id=subtitle]]
+[[!template text="would handle my emails," start="00:10:00.507" video="mainVideo" id=subtitle]]
+[[!template text="Newsboat dealt with my RSS feeds," start="00:10:02.140" video="mainVideo" id=subtitle]]
+[[!template text="the Music Player Daemon" start="00:10:06.440" video="mainVideo" id=subtitle]]
+[[!template text="took care of my music collection," start="00:10:08.407" video="mainVideo" id=subtitle]]
+[[!template text="while I was doing work" start="00:10:10.907" video="mainVideo" id=subtitle]]
+[[!template text="inside of a terminal emulator" start="00:10:12.207" video="mainVideo" id=subtitle]]
+[[!template text="which was running a multiplexer (tmux)" start="00:10:14.507" video="mainVideo" id=subtitle]]
+[[!template text="and Vim for on-the-fly text editing." start="00:10:17.707" video="mainVideo" id=subtitle]]
+[[!template text="Each of these, and others related to them," start="00:10:22.959" video="mainVideo" id=subtitle]]
+[[!template text="are fine in their own right." start="00:10:25.707" video="mainVideo" id=subtitle]]
+[[!template text="But their gestalt, their combined form," start="00:10:29.290" video="mainVideo" id=subtitle]]
+[[!template text="leaves something to be desired." start="00:10:32.507" video="mainVideo" id=subtitle]]
+[[!template text="Their lack of homogeneity" start="00:10:35.680" video="mainVideo" id=subtitle]]
+[[!template text="meant that I could not develop" start="00:10:38.174" video="mainVideo" id=subtitle]]
+[[!template text="portable skills between them." start="00:10:40.800" video="mainVideo" id=subtitle]]
+[[!template text="There is no inter-operability." start="00:10:43.240" video="mainVideo" id=subtitle]]
+[[!template text="What holds true in Vim" start="00:10:46.329" video="mainVideo" id=subtitle]]
+[[!template text="does not apply to the multiplexer." start="00:10:48.140" video="mainVideo" id=subtitle]]
+[[!template text="The prevalent methods in the email client" start="00:10:50.210" video="mainVideo" id=subtitle]]
+[[!template text="cannot be used in the RSS reader, and so on." start="00:10:53.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Whereas everything" start="00:10:59.140" video="mainVideo" id=subtitle]]
+[[!template text="that is implemented in ELisp" start="00:10:59.940" video="mainVideo" id=subtitle]]
+[[!template text="partakes in the same environment" start="00:11:02.207" video="mainVideo" id=subtitle]]
+[[!template text="automatically." start="00:11:04.440" video="mainVideo" id=subtitle]]
+[[!template text="If, say, you know how to" start="00:11:05.540" video="mainVideo" id=subtitle]]
+[[!template text="use keyboard macros to edit code," start="00:11:08.574" video="mainVideo" id=subtitle]]
+[[!template text="you already know how to" start="00:11:10.174" video="mainVideo" id=subtitle]]
+[[!template text="use the exact same skill to," start="00:11:12.274" video="mainVideo" id=subtitle]]
+[[!template text="for example, create and delete windows" start="00:11:13.507" video="mainVideo" id=subtitle]]
+[[!template text="in a process that involves text editing" start="00:11:19.221" video="mainVideo" id=subtitle]]
+[[!template text="and some elaborate" start="00:11:23.219" video="mainVideo" id=subtitle]]
+[[!template text="file management operations" start="00:11:25.107" video="mainVideo" id=subtitle]]
+[[!template text="with Emacs's directory editor program," start="00:11:27.340" video="mainVideo" id=subtitle]]
+[[!template text="or file manager, Dired." start="00:11:30.607" video="mainVideo" id=subtitle]]
+[[!template text="If you have a command" start="00:11:33.107" video="mainVideo" id=subtitle]]
+[[!template text="that scrolls down half a screen," start="00:11:35.307" video="mainVideo" id=subtitle]]
+[[!template text="it immediately works in all your buffers," start="00:11:38.374" video="mainVideo" id=subtitle]]
+[[!template text="regardless of whether their major mode" start="00:11:40.174" video="mainVideo" id=subtitle]]
+[[!template text="is about reading emails, editing text," start="00:11:44.140" video="mainVideo" id=subtitle]]
+[[!template text="enqueuing songs to a playlist, and so on." start="00:11:46.674" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Emacs provides a level of integration" start="00:11:51.269" video="mainVideo" id=subtitle]]
+[[!template text="that I consider peerless." start="00:11:55.582" video="mainVideo" id=subtitle]]
+[[!template text="Everything the user deals with" start="00:11:58.420" video="mainVideo" id=subtitle]]
+[[!template text="is implemented in ELisp." start="00:12:00.471" video="mainVideo" id=subtitle]]
+[[!template text="And all the user edits" start="00:12:02.060" video="mainVideo" id=subtitle]]
+[[!template text="is ultimately done with ELisp." start="00:12:04.402" video="mainVideo" id=subtitle]]
+[[!template text="As such, the environment itself" start="00:12:07.459" video="mainVideo" id=subtitle]]
+[[!template text="provides the conditions for drawing" start="00:12:10.463" video="mainVideo" id=subtitle]]
+[[!template text="linkages between different," start="00:12:13.749" video="mainVideo" id=subtitle]]
+[[!template text="yet consubstantial," start="00:12:15.774" video="mainVideo" id=subtitle]]
+[[!template text="modes of interaction." start="00:12:18.540" video="mainVideo" id=subtitle]]
+[[!template text="For example, I use bongo.el" start="00:12:21.339" video="mainVideo" id=subtitle]]
+[[!template text="to play back songs" start="00:12:25.040" video="mainVideo" id=subtitle]]
+[[!template text="from my music collection." start="00:12:26.406" video="mainVideo" id=subtitle]]
+[[!template text="My ~/Music directory" start="00:12:29.110" video="mainVideo" id=subtitle]]
+[[!template text="is configured to have a special minor mode," start="00:12:30.340" video="mainVideo" id=subtitle]]
+[[!template text="so when I access it with dired," start="00:12:33.440" video="mainVideo" id=subtitle]]
+[[!template text="it has commands that allow me" start="00:12:36.440" video="mainVideo" id=subtitle]]
+[[!template text="to enqueue albums/songs" start="00:12:38.407" video="mainVideo" id=subtitle]]
+[[!template text="to a playlist," start="00:12:41.140" video="mainVideo" id=subtitle]]
+[[!template text="create playlists, et cetera." start="00:12:42.074" video="mainVideo" id=subtitle]]
+[[!template text="Also, I have an org-capture template" start="00:12:44.999" video="mainVideo" id=subtitle]]
+[[!template text="which lets me store the details" start="00:12:48.307" video="mainVideo" id=subtitle]]
+[[!template text="of the currently playing track" start="00:12:51.174" video="mainVideo" id=subtitle]]
+[[!template text="and tag it accordingly." start="00:12:53.274" video="mainVideo" id=subtitle]]
+[[!template text="Continuing with the example of Bongo," start="00:12:57.189" video="mainVideo" id=subtitle]]
+[[!template text="I make it interface" start="00:12:59.603" video="mainVideo" id=subtitle]]
+[[!template text="with my RSS reader, elfeed.el," start="00:13:00.810" video="mainVideo" id=subtitle]]
+[[!template text="by having the latter add" start="00:13:04.210" video="mainVideo" id=subtitle]]
+[[!template text="podcast and video links" start="00:13:06.953" video="mainVideo" id=subtitle]]
+[[!template text="to the former's playback queue." start="00:13:09.469" video="mainVideo" id=subtitle]]
+[[!template text="All this is done" start="00:13:12.720" video="mainVideo" id=subtitle]]
+[[!template text="by simply re-using" start="00:13:14.131" video="mainVideo" id=subtitle]]
+[[!template text="the same Emacs Lisp skills I learnt" start="00:13:15.709" video="mainVideo" id=subtitle]]
+[[!template text="while configuring and extending Emacs." start="00:13:18.283" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The interconnectedness of the Emacs space" start="00:13:23.120" video="mainVideo" id=subtitle]]
+[[!template text="empowers the end-user." start="00:13:26.989" video="mainVideo" id=subtitle]]
+[[!template text="It makes such emergent workflows possible." start="00:13:29.160" video="mainVideo" id=subtitle]]
+[[!template text="And the best part is" start="00:13:33.149" video="mainVideo" id=subtitle]]
+[[!template text="there are no dirty hacks involved:" start="00:13:35.359" video="mainVideo" id=subtitle]]
+[[!template text="it is an innate feature of the system." start="00:13:38.334" video="mainVideo" id=subtitle]]
+[[!template text="You are leveraging the freedom" start="00:13:41.690" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs gives you" start="00:13:43.840" video="mainVideo" id=subtitle]]
+[[!template text="in a way that confers agency on you." start="00:13:45.107" video="mainVideo" id=subtitle]]
+[[!template text="You assume the initiative." start="00:13:49.240" video="mainVideo" id=subtitle]]
+[[!template text="It gives you confidence" start="00:13:50.970" video="mainVideo" id=subtitle]]
+[[!template text="to continue honing your skills" start="00:13:53.707" video="mainVideo" id=subtitle]]
+[[!template text="in anticipation of further optimising---" start="00:13:55.340" video="mainVideo" id=subtitle]]
+[[!template text="and controlling in full---" start="00:13:58.807" video="mainVideo" id=subtitle]]
+[[!template text="your own integrated computing environment." start="00:13:59.807" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Next section:" start="00:14:07.874" video="mainVideo" id=subtitle]]
+[[!template text="the documentation culture" start="00:14:09.600" video="mainVideo" id=subtitle]]
+[[!template text="of the Emacs community." start="00:14:12.629" video="mainVideo" id=subtitle]]
+[[!template new="1" text="If what I have mentioned thus far" start="00:14:15.309" video="mainVideo" id=subtitle]]
+[[!template text="was all there was" start="00:14:17.107" video="mainVideo" id=subtitle]]
+[[!template text="to the Emacs experience," start="00:14:19.140" video="mainVideo" id=subtitle]]
+[[!template text="there would still be" start="00:14:20.007" video="mainVideo" id=subtitle]]
+[[!template text="something to be desired." start="00:14:21.440" video="mainVideo" id=subtitle]]
+[[!template text="Because while self-documentation is great," start="00:14:24.209" video="mainVideo" id=subtitle]]
+[[!template text="it is meant to draw from---" start="00:14:26.721" video="mainVideo" id=subtitle]]
+[[!template text="and be a complement to---" start="00:14:28.808" video="mainVideo" id=subtitle]]
+[[!template text="some hand-written material." start="00:14:30.741" video="mainVideo" id=subtitle]]
+[[!template text="Both new and existing users" start="00:14:32.829" video="mainVideo" id=subtitle]]
+[[!template text="must be able to read" start="00:14:35.807" video="mainVideo" id=subtitle]]
+[[!template text="what something is supposed to do," start="00:14:37.380" video="mainVideo" id=subtitle]]
+[[!template text="what its main points of entry are," start="00:14:41.740" video="mainVideo" id=subtitle]]
+[[!template text="how it relates to other parts, and so on." start="00:14:42.774" video="mainVideo" id=subtitle]]
+[[!template text="This is about the human aspect of Emacs," start="00:14:47.279" video="mainVideo" id=subtitle]]
+[[!template text="the strong documentation culture" start="00:14:50.181" video="mainVideo" id=subtitle]]
+[[!template text="of its community," start="00:14:52.280" video="mainVideo" id=subtitle]]
+[[!template text="rather than an irreducible feature" start="00:14:53.425" video="mainVideo" id=subtitle]]
+[[!template text="of the program we use." start="00:14:55.589" video="mainVideo" id=subtitle]]
+[[!template new="1" text="As a matter of packaging etiquette," start="00:14:58.839" video="mainVideo" id=subtitle]]
+[[!template text="every non-trivial form in an Elisp library" start="00:15:02.393" video="mainVideo" id=subtitle]]
+[[!template text="must have a documentation string." start="00:15:06.552" video="mainVideo" id=subtitle]]
+[[!template text="What a variable or function does" start="00:15:09.920" video="mainVideo" id=subtitle]]
+[[!template text="needs to be spelt out in clear terms." start="00:15:12.785" video="mainVideo" id=subtitle]]
+[[!template text="Furthermore, the best" start="00:15:16.189" video="mainVideo" id=subtitle]]
+[[!template text="and most well-maintained packages," start="00:15:17.788" video="mainVideo" id=subtitle]]
+[[!template text="whether those are built into Emacs" start="00:15:20.333" video="mainVideo" id=subtitle]]
+[[!template text="or distributed via" start="00:15:22.507" video="mainVideo" id=subtitle]]
+[[!template text="an Emacs Lisp Package Archive," start="00:15:24.440" video="mainVideo" id=subtitle]]
+[[!template text="also known as ELPA," start="00:15:27.540" video="mainVideo" id=subtitle]]
+[[!template text="come with their own Info manual." start="00:15:28.674" video="mainVideo" id=subtitle]]
+[[!template text="Unlike a generic README," start="00:15:33.350" video="mainVideo" id=subtitle]]
+[[!template text="those manuals are more like" start="00:15:34.944" video="mainVideo" id=subtitle]]
+[[!template text="fully fledged books," start="00:15:37.112" video="mainVideo" id=subtitle]]
+[[!template text="with a table of contents, cross-references," start="00:15:38.738" video="mainVideo" id=subtitle]]
+[[!template text="and indices for concepts, functions," start="00:15:42.146" video="mainVideo" id=subtitle]]
+[[!template text="variables, key bindings..." start="00:15:45.107" video="mainVideo" id=subtitle]]
+[[!template text="In short, there is a tradition" start="00:15:47.189" video="mainVideo" id=subtitle]]
+[[!template text="around programming with Emacs Lisp" start="00:15:49.555" video="mainVideo" id=subtitle]]
+[[!template text="which values informative," start="00:15:52.262" video="mainVideo" id=subtitle]]
+[[!template text="high-quality guidelines" start="00:15:55.387" video="mainVideo" id=subtitle]]
+[[!template text="intended for end-users." start="00:15:58.451" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Apart from what" start="00:16:01.389" video="mainVideo" id=subtitle]]
+[[!template text="each individual package does," start="00:16:02.274" video="mainVideo" id=subtitle]]
+[[!template text="Emacs itself ships with" start="00:16:04.684" video="mainVideo" id=subtitle]]
+[[!template text="a helpful tutorial for newcomers," start="00:16:06.712" video="mainVideo" id=subtitle]]
+[[!template text="a comprehensive manual," start="00:16:10.174" video="mainVideo" id=subtitle]]
+[[!template text="a book targeted at non-programmers" start="00:16:11.374" video="mainVideo" id=subtitle]]
+[[!template text="titled &quot;An Introduction to" start="00:16:14.940" video="mainVideo" id=subtitle]]
+[[!template text="Programming in Emacs Lisp&quot;," start="00:16:17.474" video="mainVideo" id=subtitle]]
+[[!template text="as well as a reference manual" start="00:16:20.107" video="mainVideo" id=subtitle]]
+[[!template text="for Emacs Lisp itself." start="00:16:21.307" video="mainVideo" id=subtitle]]
+[[!template text="All this material," start="00:16:24.290" video="mainVideo" id=subtitle]]
+[[!template text="all that wealth of knowledge," start="00:16:25.999" video="mainVideo" id=subtitle]]
+[[!template text="is readily available to the end-user" start="00:16:28.699" video="mainVideo" id=subtitle]]
+[[!template text="through the built-in Info reader." start="00:16:31.605" video="mainVideo" id=subtitle]]
+[[!template text="The details on how to access the Info reader" start="00:16:34.350" video="mainVideo" id=subtitle]]
+[[!template text="are already explained" start="00:16:37.936" video="mainVideo" id=subtitle]]
+[[!template text="in the initial learn-by-doing tutorial." start="00:16:40.512" video="mainVideo" id=subtitle]]
+[[!template text="For people like me who are self-taught," start="00:16:45.080" video="mainVideo" id=subtitle]]
+[[!template text="the documentation culture of the community" start="00:16:47.440" video="mainVideo" id=subtitle]]
+[[!template text="ensures that we are not left behind." start="00:16:51.408" video="mainVideo" id=subtitle]]
+[[!template text="It gives us the chance" start="00:16:55.600" video="mainVideo" id=subtitle]]
+[[!template text="to learn from the experts" start="00:16:56.840" video="mainVideo" id=subtitle]]
+[[!template text="and to become better ourselves." start="00:16:59.011" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Writing concise and clear documentation" start="00:17:03.639" video="mainVideo" id=subtitle]]
+[[!template text="is also beneficial for those who do it:" start="00:17:06.340" video="mainVideo" id=subtitle]]
+[[!template text="it helps them clarify their ideas" start="00:17:09.474" video="mainVideo" id=subtitle]]
+[[!template text="and improve their communication skills." start="00:17:10.707" video="mainVideo" id=subtitle]]
+[[!template text="These contribute to fostering" start="00:17:17.250" video="mainVideo" id=subtitle]]
+[[!template text="a more humane social element." start="00:17:19.868" video="mainVideo" id=subtitle]]
+[[!template text="In my experience, the Emacs community" start="00:17:22.399" video="mainVideo" id=subtitle]]
+[[!template text="has a propensity against" start="00:17:25.774" video="mainVideo" id=subtitle]]
+[[!template text="becoming elitist." start="00:17:30.646" video="mainVideo" id=subtitle]]
+[[!template text="It helps integrate new members" start="00:17:32.149" video="mainVideo" id=subtitle]]
+[[!template text="by not hiding anything from them," start="00:17:34.907" video="mainVideo" id=subtitle]]
+[[!template text="on top of Emacs' inherent" start="00:17:37.732" video="mainVideo" id=subtitle]]
+[[!template text="emancipatory qualities, as described before" start="00:17:39.040" video="mainVideo" id=subtitle]]
+[[!template text="(self-documentation, Elisp interpreter," start="00:17:43.470" video="mainVideo" id=subtitle]]
+[[!template text="free software)." start="00:17:46.374" video="mainVideo" id=subtitle]]
+[[!template text="At the same time," start="00:17:47.960" video="mainVideo" id=subtitle]]
+[[!template text="the community strives for excellence," start="00:17:49.807" video="mainVideo" id=subtitle]]
+[[!template text="so it expects newcomers" start="00:17:52.899" video="mainVideo" id=subtitle]]
+[[!template text="to do their part in reading" start="00:17:54.840" video="mainVideo" id=subtitle]]
+[[!template text="what is generously offered to them." start="00:17:56.940" video="mainVideo" id=subtitle]]
+[[!template text="There is a difference between" start="00:18:00.680" video="mainVideo" id=subtitle]]
+[[!template text="sharing knowledge" start="00:18:01.940" video="mainVideo" id=subtitle]]
+[[!template text="and spoon-feeding it to users." start="00:18:03.240" video="mainVideo" id=subtitle]]
+[[!template text="The latter method, that of spoon-feeding," start="00:18:06.740" video="mainVideo" id=subtitle]]
+[[!template text="keeps users dependent on it" start="00:18:09.140" video="mainVideo" id=subtitle]]
+[[!template text="and is thus detrimental to them" start="00:18:11.499" video="mainVideo" id=subtitle]]
+[[!template text="in the long run." start="00:18:14.574" video="mainVideo" id=subtitle]]
+[[!template text="The Emacs community" start="00:18:15.940" video="mainVideo" id=subtitle]]
+[[!template text="disseminates what it knows" start="00:18:18.374" video="mainVideo" id=subtitle]]
+[[!template text="and wants newcomers to assume agency" start="00:18:20.507" video="mainVideo" id=subtitle]]
+[[!template text="and be responsible for doing their part" start="00:18:23.974" video="mainVideo" id=subtitle]]
+[[!template text="in learning how things work." start="00:18:26.907" video="mainVideo" id=subtitle]]
+[[!template text="The community's documentation culture" start="00:18:30.740" video="mainVideo" id=subtitle]]
+[[!template text="and uncompromising standards" start="00:18:33.307" video="mainVideo" id=subtitle]]
+[[!template text="ensure that even" start="00:18:36.074" video="mainVideo" id=subtitle]]
+[[!template text="once-unskilled users like me" start="00:18:37.674" video="mainVideo" id=subtitle]]
+[[!template text="can become productive with Emacs" start="00:18:41.174" video="mainVideo" id=subtitle]]
+[[!template text="and unleash its full potential." start="00:18:43.707" video="mainVideo" id=subtitle]]
+[[!template text="What newcomers need is commitment" start="00:18:46.574" video="mainVideo" id=subtitle]]
+[[!template text="and an open mind to study what they have." start="00:18:50.488" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Next section:" start="00:18:55.040" video="mainVideo" id=subtitle]]
+[[!template text="&quot;The Promethean Ideal" start="00:18:58.269" video="mainVideo" id=subtitle]]
+[[!template text="of freeing know-how and expertise.&quot;" start="00:18:59.707" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The documentation culture" start="00:19:05.230" video="mainVideo" id=subtitle]]
+[[!template text="of the Emacs community" start="00:19:06.807" video="mainVideo" id=subtitle]]
+[[!template text="springs from a consideration" start="00:19:08.074" video="mainVideo" id=subtitle]]
+[[!template text="of practicality." start="00:19:10.307" video="mainVideo" id=subtitle]]
+[[!template text="When you explain what your program does," start="00:19:12.840" video="mainVideo" id=subtitle]]
+[[!template text="it is more likely" start="00:19:15.351" video="mainVideo" id=subtitle]]
+[[!template text="that others will show interest in it" start="00:19:16.505" video="mainVideo" id=subtitle]]
+[[!template text="and incorporate it in their workflow," start="00:19:19.477" video="mainVideo" id=subtitle]]
+[[!template text="whereas freed source code" start="00:19:22.450" video="mainVideo" id=subtitle]]
+[[!template text="that is distributed" start="00:19:24.674" video="mainVideo" id=subtitle]]
+[[!template text="without any accompanying documentation" start="00:19:26.085" video="mainVideo" id=subtitle]]
+[[!template text="will most likely only attract" start="00:19:29.309" video="mainVideo" id=subtitle]]
+[[!template text="a handful of enthusiastic hackers." start="00:19:32.300" video="mainVideo" id=subtitle]]
+[[!template text="Still good, but could be better." start="00:19:35.690" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Apart from its practical use though," start="00:19:39.460" video="mainVideo" id=subtitle]]
+[[!template text="writing documentation for the end-user" start="00:19:41.640" video="mainVideo" id=subtitle]]
+[[!template text="shows a spirit of altruism," start="00:19:44.407" video="mainVideo" id=subtitle]]
+[[!template text="an ethos of caring for others" start="00:19:47.140" video="mainVideo" id=subtitle]]
+[[!template text="and wanting to empower them" start="00:19:50.274" video="mainVideo" id=subtitle]]
+[[!template text="in their endeavours." start="00:19:52.540" video="mainVideo" id=subtitle]]
+[[!template text="It essentially is the same" start="00:19:55.130" video="mainVideo" id=subtitle]]
+[[!template text="as helping someone;" start="00:19:57.774" video="mainVideo" id=subtitle]]
+[[!template text="helping them escape from the ignorance" start="00:19:58.674" video="mainVideo" id=subtitle]]
+[[!template text="that contributes" start="00:20:02.607" video="mainVideo" id=subtitle]]
+[[!template text="to their sense of powerlessness." start="00:20:03.907" video="mainVideo" id=subtitle]]
+[[!template text="I experienced this myself:" start="00:20:07.810" video="mainVideo" id=subtitle]]
+[[!template text="by reading the docs," start="00:20:09.974" video="mainVideo" id=subtitle]]
+[[!template text="I was able to go from" start="00:20:12.007" video="mainVideo" id=subtitle]]
+[[!template text="an unskilled rookie" start="00:20:13.450" video="mainVideo" id=subtitle]]
+[[!template text="to a competent Emacs user." start="00:20:15.274" video="mainVideo" id=subtitle]]
+[[!template text="Part of that competence consists in" start="00:20:17.909" video="mainVideo" id=subtitle]]
+[[!template text="maintaining Elisp packages" start="00:20:20.839" video="mainVideo" id=subtitle]]
+[[!template text="and contributing code directly" start="00:20:23.037" video="mainVideo" id=subtitle]]
+[[!template text="to emacs.git." start="00:20:25.480" video="mainVideo" id=subtitle]]
+[[!template text="Writing documentation" start="00:20:28.760" video="mainVideo" id=subtitle]]
+[[!template text="is about disseminating" start="00:20:29.740" video="mainVideo" id=subtitle]]
+[[!template text="knowledge and expertise," start="00:20:31.207" video="mainVideo" id=subtitle]]
+[[!template text="not keeping it an exclusive right" start="00:20:34.015" video="mainVideo" id=subtitle]]
+[[!template text="of some elite." start="00:20:36.707" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Allow me then to liken this" start="00:20:39.919" video="mainVideo" id=subtitle]]
+[[!template text="to the ancient Greek myth of Prometheas" start="00:20:42.928" video="mainVideo" id=subtitle]]
+[[!template text="(Prometheus)." start="00:20:47.120" video="mainVideo" id=subtitle]]
+[[!template text="Prometheas was a titan, or else a deity," start="00:20:48.559" video="mainVideo" id=subtitle]]
+[[!template text="who decided to teach" start="00:20:52.972" video="mainVideo" id=subtitle]]
+[[!template text="the know-how of handling fire" start="00:20:54.988" video="mainVideo" id=subtitle]]
+[[!template text="to humanity." start="00:20:57.772" video="mainVideo" id=subtitle]]
+[[!template text="The art of fire" start="00:20:59.020" video="mainVideo" id=subtitle]]
+[[!template text="is an allegory about know-how in general," start="00:21:00.447" video="mainVideo" id=subtitle]]
+[[!template text="not specifically pyrotechnics." start="00:21:04.192" video="mainVideo" id=subtitle]]
+[[!template text="So Prometheas liberated that key knowledge" start="00:21:06.840" video="mainVideo" id=subtitle]]
+[[!template text="by taking it away" start="00:21:11.571" video="mainVideo" id=subtitle]]
+[[!template text="from the exclusivity of the gods" start="00:21:13.215" video="mainVideo" id=subtitle]]
+[[!template text="and bringing it" start="00:21:16.231" video="mainVideo" id=subtitle]]
+[[!template text="into the domain of humankind" start="00:21:17.693" video="mainVideo" id=subtitle]]
+[[!template text="as a libre resource." start="00:21:21.512" video="mainVideo" id=subtitle]]
+[[!template text="This act of altruism" start="00:21:24.390" video="mainVideo" id=subtitle]]
+[[!template text="propelled humanity to new heights." start="00:21:26.507" video="mainVideo" id=subtitle]]
+[[!template text="Every field of expertise" start="00:21:30.029" video="mainVideo" id=subtitle]]
+[[!template text="is about handling &quot;fire&quot;," start="00:21:32.590" video="mainVideo" id=subtitle]]
+[[!template text="in the figurative sense" start="00:21:35.255" video="mainVideo" id=subtitle]]
+[[!template text="of implementing essential know-how." start="00:21:38.681" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Why would Prometheas, an exalted being," start="00:21:43.679" video="mainVideo" id=subtitle]]
+[[!template text="ever bother with" start="00:21:47.123" video="mainVideo" id=subtitle]]
+[[!template text="the fallible and frail humanity?" start="00:21:48.586" video="mainVideo" id=subtitle]]
+[[!template text="Why did a god want to empower humans" start="00:21:52.250" video="mainVideo" id=subtitle]]
+[[!template text="instead of, say, making them dependent" start="00:21:56.007" video="mainVideo" id=subtitle]]
+[[!template text="on the know-how of &quot;fire&quot;?" start="00:22:00.077" video="mainVideo" id=subtitle]]
+[[!template text="If we look at the world around us," start="00:22:02.970" video="mainVideo" id=subtitle]]
+[[!template text="we witness how its overlords" start="00:22:05.747" video="mainVideo" id=subtitle]]
+[[!template text="are unscrupulously trying" start="00:22:07.970" video="mainVideo" id=subtitle]]
+[[!template text="to enclose the commons" start="00:22:10.186" video="mainVideo" id=subtitle]]
+[[!template text="and take advantage of expertise" start="00:22:12.274" video="mainVideo" id=subtitle]]
+[[!template text="in order to exploit us." start="00:22:16.076" video="mainVideo" id=subtitle]]
+[[!template text="Why would Prometheas not do the same thing" start="00:22:18.809" video="mainVideo" id=subtitle]]
+[[!template text="and enslave us for the rest of eternity?" start="00:22:22.700" video="mainVideo" id=subtitle]]
+[[!template text="The answer is that" start="00:22:27.570" video="mainVideo" id=subtitle]]
+[[!template text="unlike this world's aspiring tyrants," start="00:22:29.343" video="mainVideo" id=subtitle]]
+[[!template text="Prometheas represents a higher conscience," start="00:22:32.891" video="mainVideo" id=subtitle]]
+[[!template text="one that is not corrupted by egocentrism" start="00:22:36.842" video="mainVideo" id=subtitle]]
+[[!template text="and the greed of short-term profiteering." start="00:22:40.640" video="mainVideo" id=subtitle]]
+[[!template text="This higher conscience" start="00:22:45.510" video="mainVideo" id=subtitle]]
+[[!template text="makes sense of the bigger picture" start="00:22:47.490" video="mainVideo" id=subtitle]]
+[[!template text="and can foresee" start="00:22:50.332" video="mainVideo" id=subtitle]]
+[[!template text="that the distribution of know-how" start="00:22:51.710" video="mainVideo" id=subtitle]]
+[[!template text="empowers those who access it freely" start="00:22:54.260" video="mainVideo" id=subtitle]]
+[[!template text="to reach their potential." start="00:22:56.960" video="mainVideo" id=subtitle]]
+[[!template text="It is no coincidence that the ancient sages" start="00:23:00.530" video="mainVideo" id=subtitle]]
+[[!template text="used the name &quot;Prometheas&quot;," start="00:23:04.650" video="mainVideo" id=subtitle]]
+[[!template text="meaning the &quot;prescient one&quot;, the &quot;foreseer&quot;." start="00:23:09.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="This is a lesson on the outlook" start="00:23:16.659" video="mainVideo" id=subtitle]]
+[[!template text="we ought to maintain," start="00:23:19.765" video="mainVideo" id=subtitle]]
+[[!template text="where we aspire to our highest." start="00:23:21.791" video="mainVideo" id=subtitle]]
+[[!template text="We want to be the best version of ourselves," start="00:23:25.330" video="mainVideo" id=subtitle]]
+[[!template text="by being more like Prometheas." start="00:23:28.501" video="mainVideo" id=subtitle]]
+[[!template text="We want our actions to be guided" start="00:23:31.710" video="mainVideo" id=subtitle]]
+[[!template text="by this Promethean Ideal" start="00:23:33.940" video="mainVideo" id=subtitle]]
+[[!template text="of liberating know-how," start="00:23:36.674" video="mainVideo" id=subtitle]]
+[[!template text="of making expertise readily available," start="00:23:39.097" video="mainVideo" id=subtitle]]
+[[!template text="and of providing others" start="00:23:42.307" video="mainVideo" id=subtitle]]
+[[!template text="with the chance to prosper." start="00:23:44.507" video="mainVideo" id=subtitle]]
+[[!template text="When we all do so," start="00:23:48.350" video="mainVideo" id=subtitle]]
+[[!template text="we are collectively better-off." start="00:23:49.927" video="mainVideo" id=subtitle]]
+[[!template text="Free software is a microcosm" start="00:23:52.500" video="mainVideo" id=subtitle]]
+[[!template text="of that principle." start="00:23:56.340" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's move on to the next section:" start="00:23:59.529" video="mainVideo" id=subtitle]]
+[[!template text="&quot;The 'killer apps' of Emacs.&quot;" start="00:24:02.940" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's be a bit more practical now." start="00:24:08.020" video="mainVideo" id=subtitle]]
+[[!template text="Many new users are attracted to Emacs" start="00:24:10.860" video="mainVideo" id=subtitle]]
+[[!template text="because it has one or a few" start="00:24:13.789" video="mainVideo" id=subtitle]]
+[[!template text="immensely useful applications" start="00:24:16.066" video="mainVideo" id=subtitle]]
+[[!template text="they would like to use." start="00:24:18.858" video="mainVideo" id=subtitle]]
+[[!template text="This typically covers Org" start="00:24:21.000" video="mainVideo" id=subtitle]]
+[[!template text="and/or one of its numerous accoutrements," start="00:24:23.019" video="mainVideo" id=subtitle]]
+[[!template text="though there are other excellent packages" start="00:24:27.090" video="mainVideo" id=subtitle]]
+[[!template text="like Magit." start="00:24:33.023" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The fact that Emacs has" start="00:24:34.760" video="mainVideo" id=subtitle]]
+[[!template text="such killer apps is good." start="00:24:36.107" video="mainVideo" id=subtitle]]
+[[!template text="It shows that its extensibility" start="00:24:38.870" video="mainVideo" id=subtitle]]
+[[!template text="is not some theoretical upside" start="00:24:41.535" video="mainVideo" id=subtitle]]
+[[!template text="of the Lisp interpreter." start="00:24:44.200" video="mainVideo" id=subtitle]]
+[[!template text="It has tangible utility to a wide user base," start="00:24:46.340" video="mainVideo" id=subtitle]]
+[[!template text="including those who do not" start="00:24:49.816" video="mainVideo" id=subtitle]]
+[[!template text="write Elisp themselves." start="00:24:51.940" video="mainVideo" id=subtitle]]
+[[!template text="Furthermore, those killer apps are good" start="00:24:54.850" video="mainVideo" id=subtitle]]
+[[!template text="as they help bring newcomers" start="00:24:57.927" video="mainVideo" id=subtitle]]
+[[!template text="and potential contributors to the fold," start="00:25:00.418" video="mainVideo" id=subtitle]]
+[[!template text="while they provide real value" start="00:25:04.370" video="mainVideo" id=subtitle]]
+[[!template text="to the existing members of the community." start="00:25:06.968" video="mainVideo" id=subtitle]]
+[[!template text="The more people we have" start="00:25:10.519" video="mainVideo" id=subtitle]]
+[[!template text="and the happier they are with Emacs," start="00:25:12.339" video="mainVideo" id=subtitle]]
+[[!template text="the higher the chances that we receive" start="00:25:15.330" video="mainVideo" id=subtitle]]
+[[!template text="some new ideas or code from them." start="00:25:18.726" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The notion of a killer app does, however," start="00:25:21.600" video="mainVideo" id=subtitle]]
+[[!template text="come with a latent downside" start="00:25:26.305" video="mainVideo" id=subtitle]]
+[[!template text="when targeted at outsiders" start="00:25:29.519" video="mainVideo" id=subtitle]]
+[[!template text="to the Emacs milieu." start="00:25:32.040" video="mainVideo" id=subtitle]]
+[[!template text="And that is because" start="00:25:34.470" video="mainVideo" id=subtitle]]
+[[!template text="packages like Org and Magit" start="00:25:36.307" video="mainVideo" id=subtitle]]
+[[!template text="do not have a standalone presence." start="00:25:39.362" video="mainVideo" id=subtitle]]
+[[!template text="They are always used in Emacs or, rather," start="00:25:42.000" video="mainVideo" id=subtitle]]
+[[!template text="together with the rest of Emacs," start="00:25:46.770" video="mainVideo" id=subtitle]]
+[[!template text="which means that the user has to know" start="00:25:50.840" video="mainVideo" id=subtitle]]
+[[!template text="what to expect from Emacs." start="00:25:54.470" video="mainVideo" id=subtitle]]
+[[!template new="1" text="You may be aware of the type of user" start="00:25:57.120" video="mainVideo" id=subtitle]]
+[[!template text="who proclaims that they want to" start="00:25:59.986" video="mainVideo" id=subtitle]]
+[[!template text="boost their productivity" start="00:26:02.680" video="mainVideo" id=subtitle]]
+[[!template text="but who also expects immediate results." start="00:26:04.785" video="mainVideo" id=subtitle]]
+[[!template text="When you bring the &quot;killer app&quot; rhetoric" start="00:26:08.070" video="mainVideo" id=subtitle]]
+[[!template text="to such a crowd," start="00:26:11.152" video="mainVideo" id=subtitle]]
+[[!template text="you run the risk of misleading them" start="00:26:12.581" video="mainVideo" id=subtitle]]
+[[!template text="into a false sense of self-confidence" start="00:26:15.608" video="mainVideo" id=subtitle]]
+[[!template text="and concomitant expectations of success." start="00:26:18.720" video="mainVideo" id=subtitle]]
+[[!template text="Such users may be tempted" start="00:26:24.330" video="mainVideo" id=subtitle]]
+[[!template text="to try Org, Magit, and others" start="00:26:26.655" video="mainVideo" id=subtitle]]
+[[!template text="but are most likely going to endure" start="00:26:29.249" video="mainVideo" id=subtitle]]
+[[!template text="a frustrating experience overall." start="00:26:32.470" video="mainVideo" id=subtitle]]
+[[!template text="The reason is that they are oblivious" start="00:26:36.179" video="mainVideo" id=subtitle]]
+[[!template text="to what Emacs is" start="00:26:39.834" video="mainVideo" id=subtitle]]
+[[!template text="and what is required" start="00:26:41.598" video="mainVideo" id=subtitle]]
+[[!template text="to get started with it" start="00:26:44.874" video="mainVideo" id=subtitle]]
+[[!template text="on a sustainable basis." start="00:26:46.540" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Org, Magit, and friends" start="00:26:47.820" video="mainVideo" id=subtitle]]
+[[!template text="are fantastic tools in their own right." start="00:26:50.874" video="mainVideo" id=subtitle]]
+[[!template text="But they still are part of Emacs." start="00:26:54.899" video="mainVideo" id=subtitle]]
+[[!template text="To use them effectively," start="00:26:57.399" video="mainVideo" id=subtitle]]
+[[!template text="you have to develop" start="00:26:59.406" video="mainVideo" id=subtitle]]
+[[!template text="at least a modicum of understanding" start="00:27:01.109" video="mainVideo" id=subtitle]]
+[[!template text="on what Emacs does." start="00:27:04.090" video="mainVideo" id=subtitle]]
+[[!template text="You must be patient" start="00:27:06.340" video="mainVideo" id=subtitle]]
+[[!template text="and approach this endeavour" start="00:27:07.692" video="mainVideo" id=subtitle]]
+[[!template text="with an open mind." start="00:27:09.519" video="mainVideo" id=subtitle]]
+[[!template text="Go through the tutorial," start="00:27:12.500" video="mainVideo" id=subtitle]]
+[[!template text="familiarise yourself with the Help system," start="00:27:14.372" video="mainVideo" id=subtitle]]
+[[!template text="make a habit out of reading Info manuals," start="00:27:18.939" video="mainVideo" id=subtitle]]
+[[!template text="and take things slowly." start="00:27:23.401" video="mainVideo" id=subtitle]]
+[[!template text="No killer app can ever be a substitute" start="00:27:26.820" video="mainVideo" id=subtitle]]
+[[!template text="for commitment to a cause;" start="00:27:30.358" video="mainVideo" id=subtitle]]
+[[!template text="no vaunted life hack" start="00:27:33.132" video="mainVideo" id=subtitle]]
+[[!template text="will ever provide a direct conduit" start="00:27:35.621" video="mainVideo" id=subtitle]]
+[[!template text="to some fountain of wisdom." start="00:27:39.771" video="mainVideo" id=subtitle]]
+[[!template new="1" text="With regard to software freedom" start="00:27:44.419" video="mainVideo" id=subtitle]]
+[[!template text="and user empowerment," start="00:27:46.597" video="mainVideo" id=subtitle]]
+[[!template text="what I have learnt is that" start="00:27:48.094" video="mainVideo" id=subtitle]]
+[[!template text="the impulse for the killer app" start="00:27:50.024" video="mainVideo" id=subtitle]]
+[[!template text="ought to emanate" start="00:27:52.240" video="mainVideo" id=subtitle]]
+[[!template text="from a position of knowledge." start="00:27:53.974" video="mainVideo" id=subtitle]]
+[[!template text="You need to know what you are searching for," start="00:27:56.707" video="mainVideo" id=subtitle]]
+[[!template text="and you need to know" start="00:27:58.974" video="mainVideo" id=subtitle]]
+[[!template text="where you will implement that." start="00:28:00.107" video="mainVideo" id=subtitle]]
+[[!template text="First, we need to temper our expectations" start="00:28:01.840" video="mainVideo" id=subtitle]]
+[[!template text="and prefer propitious growth in learning" start="00:28:06.571" video="mainVideo" id=subtitle]]
+[[!template text="over instant gratification." start="00:28:10.340" video="mainVideo" id=subtitle]]
+[[!template text="With Emacs, we have a strong foundation" start="00:28:14.159" video="mainVideo" id=subtitle]]
+[[!template text="for our computing freedom:" start="00:28:17.323" video="mainVideo" id=subtitle]]
+[[!template text="it consists of the inherent qualities" start="00:28:19.245" video="mainVideo" id=subtitle]]
+[[!template text="of the program" start="00:28:21.951" video="mainVideo" id=subtitle]]
+[[!template text="together with the documentation culture" start="00:28:23.367" video="mainVideo" id=subtitle]]
+[[!template text="and creativity of the community." start="00:28:27.051" video="mainVideo" id=subtitle]]
+[[!template text="Once we learn how to benefit from those," start="00:28:30.169" video="mainVideo" id=subtitle]]
+[[!template text="we have everything we need" start="00:28:32.670" video="mainVideo" id=subtitle]]
+[[!template text="to become proficient" start="00:28:34.174" video="mainVideo" id=subtitle]]
+[[!template text="in all the modes of interaction" start="00:28:35.893" video="mainVideo" id=subtitle]]
+[[!template text="that are available to us." start="00:28:38.592" video="mainVideo" id=subtitle]]
+[[!template text="Think of it as choosing Emacs and Org," start="00:28:42.330" video="mainVideo" id=subtitle]]
+[[!template text="Emacs and Magit," start="00:28:46.889" video="mainVideo" id=subtitle]]
+[[!template text="Emacs and Org and Magit, et cetera." start="00:28:48.876" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Next section:" start="00:28:53.140" video="mainVideo" id=subtitle]]
+[[!template text="&quot;You can't be an Emacs tourist.&quot;" start="00:28:56.889" video="mainVideo" id=subtitle]]
+[[!template new="1" text="What I just talked about implies that" start="00:29:01.899" video="mainVideo" id=subtitle]]
+[[!template text="you cannot simply switch to Emacs" start="00:29:04.521" video="mainVideo" id=subtitle]]
+[[!template text="over the weekend or on a whimsy." start="00:29:06.799" video="mainVideo" id=subtitle]]
+[[!template text="You can't use it opportunistically" start="00:29:09.960" video="mainVideo" id=subtitle]]
+[[!template text="to run a quick demo" start="00:29:12.915" video="mainVideo" id=subtitle]]
+[[!template text="with which to impress your peers" start="00:29:14.603" video="mainVideo" id=subtitle]]
+[[!template text="and win some inane &quot;nerd cred&quot;." start="00:29:18.901" video="mainVideo" id=subtitle]]
+[[!template text="Forget about such frivolous" start="00:29:22.940" video="mainVideo" id=subtitle]]
+[[!template text="superficialities." start="00:29:24.907" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is a sophisticated tool" start="00:29:26.170" video="mainVideo" id=subtitle]]
+[[!template text="intended for some serious work." start="00:29:29.000" video="mainVideo" id=subtitle]]
+[[!template text="It has been around for several decades" start="00:29:32.600" video="mainVideo" id=subtitle]]
+[[!template text="and it incorporates the knowledge" start="00:29:35.436" video="mainVideo" id=subtitle]]
+[[!template text="of a diverse group of contributors." start="00:29:38.116" video="mainVideo" id=subtitle]]
+[[!template text="Even if you want to use Emacs" start="00:29:41.639" video="mainVideo" id=subtitle]]
+[[!template text="just for Org mode or whatever killer app," start="00:29:43.616" video="mainVideo" id=subtitle]]
+[[!template text="you still have to try" start="00:29:46.766" video="mainVideo" id=subtitle]]
+[[!template text="to learn things in earnest." start="00:29:48.605" video="mainVideo" id=subtitle]]
+[[!template text="You still need to read" start="00:29:51.059" video="mainVideo" id=subtitle]]
+[[!template text="the relevant Info manual," start="00:29:52.140" video="mainVideo" id=subtitle]]
+[[!template text="understand how to make changes" start="00:29:54.196" video="mainVideo" id=subtitle]]
+[[!template text="to the plethora of user options on offer," start="00:29:56.663" video="mainVideo" id=subtitle]]
+[[!template text="and generally don't feel lost" start="00:30:00.006" video="mainVideo" id=subtitle]]
+[[!template text="while working with Emacs." start="00:30:03.117" video="mainVideo" id=subtitle]]
+[[!template text="This is more so if you use Emacs" start="00:30:05.710" video="mainVideo" id=subtitle]]
+[[!template text="to its full potential" start="00:30:08.264" video="mainVideo" id=subtitle]]
+[[!template text="as an integrated computing environment;" start="00:30:09.967" video="mainVideo" id=subtitle]]
+[[!template text="as your general purpose interface" start="00:30:13.297" video="mainVideo" id=subtitle]]
+[[!template text="to the computer," start="00:30:16.127" video="mainVideo" id=subtitle]]
+[[!template text="where you handle uniformly" start="00:30:17.460" video="mainVideo" id=subtitle]]
+[[!template text="coding and writing prose," start="00:30:19.633" video="mainVideo" id=subtitle]]
+[[!template text="your email correspondence," start="00:30:21.726" video="mainVideo" id=subtitle]]
+[[!template text="your RSS feeds," start="00:30:23.820" video="mainVideo" id=subtitle]]
+[[!template text="your music collection," start="00:30:25.022" video="mainVideo" id=subtitle]]
+[[!template text="your agenda and to-do lists," start="00:30:26.908" video="mainVideo" id=subtitle]]
+[[!template text="and so on." start="00:30:30.626" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The difficulty of Emacs" start="00:30:31.909" video="mainVideo" id=subtitle]]
+[[!template text="is much higher for those who approach it" start="00:30:33.872" video="mainVideo" id=subtitle]]
+[[!template text="without understanding" start="00:30:37.144" video="mainVideo" id=subtitle]]
+[[!template text="what they are getting themselves into," start="00:30:38.667" video="mainVideo" id=subtitle]]
+[[!template text="or for those who are naive enough" start="00:30:41.299" video="mainVideo" id=subtitle]]
+[[!template text="to believe that they can cheat their way" start="00:30:43.711" video="mainVideo" id=subtitle]]
+[[!template text="out of learning the fundamentals." start="00:30:47.294" video="mainVideo" id=subtitle]]
+[[!template text="The gist is that" start="00:30:50.340" video="mainVideo" id=subtitle]]
+[[!template text="you cannot be an Emacs tourist." start="00:30:51.574" video="mainVideo" id=subtitle]]
+[[!template text="You can't go into Emacsland" start="00:30:54.940" video="mainVideo" id=subtitle]]
+[[!template text="thinking that you will spend" start="00:30:57.165" video="mainVideo" id=subtitle]]
+[[!template text="a couple of memorable days there" start="00:30:59.469" video="mainVideo" id=subtitle]]
+[[!template text="and head back home" start="00:31:02.475" video="mainVideo" id=subtitle]]
+[[!template text="to regale others" start="00:31:04.206" video="mainVideo" id=subtitle]]
+[[!template text="with stories about your adventures." start="00:31:05.755" video="mainVideo" id=subtitle]]
+[[!template text="It does not work that way." start="00:31:08.580" video="mainVideo" id=subtitle]]
+[[!template text="You commit to Emacs for the long-term," start="00:31:11.850" video="mainVideo" id=subtitle]]
+[[!template text="for the freedom it offers you." start="00:31:15.250" video="mainVideo" id=subtitle]]
+[[!template text="Freedom in the moral sense" start="00:31:17.990" video="mainVideo" id=subtitle]]
+[[!template text="but also in the very practical ways" start="00:31:20.142" video="mainVideo" id=subtitle]]
+[[!template text="in which you can mould and extend" start="00:31:23.123" video="mainVideo" id=subtitle]]
+[[!template text="your personal workflows" start="00:31:25.851" video="mainVideo" id=subtitle]]
+[[!template text="with precision." start="00:31:27.907" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now you may wonder" start="00:31:31.160" video="mainVideo" id=subtitle]]
+[[!template text="why do I mention those things?" start="00:31:32.773" video="mainVideo" id=subtitle]]
+[[!template text="Shouldn't we make Emacs easier for everyone?" start="00:31:35.320" video="mainVideo" id=subtitle]]
+[[!template text="Yes, we should make everything" start="00:31:39.169" video="mainVideo" id=subtitle]]
+[[!template text="as simple as possible." start="00:31:42.333" video="mainVideo" id=subtitle]]
+[[!template text="Though that still does not refashion Emacs" start="00:31:44.760" video="mainVideo" id=subtitle]]
+[[!template text="into something entirely different." start="00:31:48.031" video="mainVideo" id=subtitle]]
+[[!template text="We continue to have" start="00:31:51.460" video="mainVideo" id=subtitle]]
+[[!template text="a potent tool at our disposal" start="00:31:52.740" video="mainVideo" id=subtitle]]
+[[!template text="that we must treat" start="00:31:55.829" video="mainVideo" id=subtitle]]
+[[!template text="with the requisite respect." start="00:31:57.040" video="mainVideo" id=subtitle]]
+[[!template text="Take, for instance, the various frameworks" start="00:32:00.020" video="mainVideo" id=subtitle]]
+[[!template text="that set up Emacs in an opinionated way" start="00:32:03.954" video="mainVideo" id=subtitle]]
+[[!template text="so that newcomers get everything" start="00:32:07.571" video="mainVideo" id=subtitle]]
+[[!template text="set up for them out-of-the-box." start="00:32:10.465" video="mainVideo" id=subtitle]]
+[[!template text="There is nothing wrong" start="00:32:13.360" video="mainVideo" id=subtitle]]
+[[!template text="with those frameworks." start="00:32:14.507" video="mainVideo" id=subtitle]]
+[[!template text="In fact, a large part of the community" start="00:32:16.220" video="mainVideo" id=subtitle]]
+[[!template text="uses them to great effect." start="00:32:19.417" video="mainVideo" id=subtitle]]
+[[!template text="However, the point stands:" start="00:32:21.690" video="mainVideo" id=subtitle]]
+[[!template text="even after every package" start="00:32:24.105" video="mainVideo" id=subtitle]]
+[[!template text="has been set up for you," start="00:32:26.342" video="mainVideo" id=subtitle]]
+[[!template text="you still have to put in the work" start="00:32:28.490" video="mainVideo" id=subtitle]]
+[[!template text="in making use" start="00:32:30.174" video="mainVideo" id=subtitle]]
+[[!template text="of your newfound computing freedom." start="00:32:31.507" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But, you may insist," start="00:32:35.360" video="mainVideo" id=subtitle]]
+[[!template text="is that not some sort of gate-keeping?" start="00:32:37.648" video="mainVideo" id=subtitle]]
+[[!template text="Are you not being an elitist" start="00:32:41.789" video="mainVideo" id=subtitle]]
+[[!template text="by telling people how they must" start="00:32:43.750" video="mainVideo" id=subtitle]]
+[[!template text="invest time and effort" start="00:32:45.972" video="mainVideo" id=subtitle]]
+[[!template text="in making the best" start="00:32:48.009" video="mainVideo" id=subtitle]]
+[[!template text="out of their Emacs experience?" start="00:32:49.804" video="mainVideo" id=subtitle]]
+[[!template text="No, I think this is not elitism." start="00:32:52.639" video="mainVideo" id=subtitle]]
+[[!template text="There are no secrets here," start="00:32:56.830" video="mainVideo" id=subtitle]]
+[[!template text="no artificial barriers to entry," start="00:32:59.358" video="mainVideo" id=subtitle]]
+[[!template text="no impediments to making progress," start="00:33:02.530" video="mainVideo" id=subtitle]]
+[[!template text="no tricks and gimmicks." start="00:33:06.562" video="mainVideo" id=subtitle]]
+[[!template text="It just is a statement of fact." start="00:33:09.409" video="mainVideo" id=subtitle]]
+[[!template text="Freedom entails responsibility." start="00:33:13.460" video="mainVideo" id=subtitle]]
+[[!template text="It requires people to take the initiative" start="00:33:16.309" video="mainVideo" id=subtitle]]
+[[!template text="and assert control over the factors" start="00:33:20.481" video="mainVideo" id=subtitle]]
+[[!template text="that are within their reach." start="00:33:23.728" video="mainVideo" id=subtitle]]
+[[!template text="Freedom ultimately means" start="00:33:26.420" video="mainVideo" id=subtitle]]
+[[!template text="that we no longer remain dependent" start="00:33:29.267" video="mainVideo" id=subtitle]]
+[[!template text="on being spoon-fed." start="00:33:33.254" video="mainVideo" id=subtitle]]
+[[!template text="We assume agency." start="00:33:35.419" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And with this, I want to come to" start="00:33:39.174" video="mainVideo" id=subtitle]]
+[[!template text="the final section of this presentation." start="00:33:41.540" video="mainVideo" id=subtitle]]
+[[!template text="The title is:" start="00:33:44.940" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Emacs as a champion of software freedom.&quot;" start="00:33:46.407" video="mainVideo" id=subtitle]]
+[[!template new="1" text="To my mind, Emacs is the embodiment" start="00:33:52.250" video="mainVideo" id=subtitle]]
+[[!template text="of the GNU project's ethos." start="00:33:56.272" video="mainVideo" id=subtitle]]
+[[!template text="Everything you expect from a program" start="00:33:59.289" video="mainVideo" id=subtitle]]
+[[!template text="that is underpinned by the values" start="00:34:01.245" video="mainVideo" id=subtitle]]
+[[!template text="of software freedom" start="00:34:02.990" video="mainVideo" id=subtitle]]
+[[!template text="is found in Emacs." start="00:34:05.342" video="mainVideo" id=subtitle]]
+[[!template text="What you get is not merely an ethical tool," start="00:34:07.460" video="mainVideo" id=subtitle]]
+[[!template text="important though that is," start="00:34:10.962" video="mainVideo" id=subtitle]]
+[[!template text="but also a gift that will keep on giving;" start="00:34:13.032" video="mainVideo" id=subtitle]]
+[[!template text="a gift for you to further empower yourself" start="00:34:17.405" video="mainVideo" id=subtitle]]
+[[!template text="as a computer user." start="00:34:20.840" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I understood that freedom of software" start="00:34:24.020" video="mainVideo" id=subtitle]]
+[[!template text="is not about liberating the code itself." start="00:34:27.457" video="mainVideo" id=subtitle]]
+[[!template text="It is about sharing libre code" start="00:34:31.600" video="mainVideo" id=subtitle]]
+[[!template text="in order to emancipate the user." start="00:34:34.950" video="mainVideo" id=subtitle]]
+[[!template text="The best way to achieve that" start="00:34:38.410" video="mainVideo" id=subtitle]]
+[[!template text="is by emulating Prometheas:" start="00:34:40.899" video="mainVideo" id=subtitle]]
+[[!template text="don't just give people the so-called &quot;fire&quot;;" start="00:34:43.302" video="mainVideo" id=subtitle]]
+[[!template text="offer them the underlying know-how." start="00:34:47.187" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Emacs taught me" start="00:34:50.907" video="mainVideo" id=subtitle]]
+[[!template text="the virtues of software freedom" start="00:34:52.940" video="mainVideo" id=subtitle]]
+[[!template text="in a way that nothing else" start="00:34:54.378" video="mainVideo" id=subtitle]]
+[[!template text="in the GNU/Linux space ever did." start="00:34:57.362" video="mainVideo" id=subtitle]]
+[[!template text="Here's an example from a few years ago." start="00:35:01.150" video="mainVideo" id=subtitle]]
+[[!template text="I needed a Markdown editor." start="00:35:04.210" video="mainVideo" id=subtitle]]
+[[!template text="I wanted it to centre" start="00:35:07.050" video="mainVideo" id=subtitle]]
+[[!template text="the body of the text on display." start="00:35:09.099" video="mainVideo" id=subtitle]]
+[[!template text="It should have configurable font families" start="00:35:12.080" video="mainVideo" id=subtitle]]
+[[!template text="and point sizes." start="00:35:15.384" video="mainVideo" id=subtitle]]
+[[!template text="Spell checking for Greek and English" start="00:35:17.030" video="mainVideo" id=subtitle]]
+[[!template text="should be included." start="00:35:19.646" video="mainVideo" id=subtitle]]
+[[!template text="The colours had to be editable as well," start="00:35:20.990" video="mainVideo" id=subtitle]]
+[[!template text="so I could adjust them" start="00:35:25.007" video="mainVideo" id=subtitle]]
+[[!template text="to a level of legibility" start="00:35:26.940" video="mainVideo" id=subtitle]]
+[[!template text="I was comfortable with." start="00:35:30.064" video="mainVideo" id=subtitle]]
+[[!template text="While there were plenty of libre programs," start="00:35:32.760" video="mainVideo" id=subtitle]]
+[[!template text="I did not find one" start="00:35:35.657" video="mainVideo" id=subtitle]]
+[[!template text="I could control and inspect" start="00:35:37.174" video="mainVideo" id=subtitle]]
+[[!template text="to the extent I can with Emacs." start="00:35:39.905" video="mainVideo" id=subtitle]]
+[[!template text="Which made me feel that I had stagnated:" start="00:35:43.190" video="mainVideo" id=subtitle]]
+[[!template text="there was an indelible line" start="00:35:46.982" video="mainVideo" id=subtitle]]
+[[!template text="dividing users from developers." start="00:35:49.572" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Whereas Emacs invites you" start="00:35:53.500" video="mainVideo" id=subtitle]]
+[[!template text="to blur the distinction" start="00:35:55.899" video="mainVideo" id=subtitle]]
+[[!template text="between user and the developer." start="00:35:58.106" video="mainVideo" id=subtitle]]
+[[!template text="It furnishes the means to become" start="00:36:00.590" video="mainVideo" id=subtitle]]
+[[!template text="proficient in it," start="00:36:03.837" video="mainVideo" id=subtitle]]
+[[!template text="while the community complements those" start="00:36:05.510" video="mainVideo" id=subtitle]]
+[[!template text="with its documentation culture" start="00:36:07.717" video="mainVideo" id=subtitle]]
+[[!template text="and overall creativity." start="00:36:10.744" video="mainVideo" id=subtitle]]
+[[!template text="You start off as a complete ignoramus," start="00:36:12.990" video="mainVideo" id=subtitle]]
+[[!template text="but soon pick up skills that remain useful" start="00:36:15.679" video="mainVideo" id=subtitle]]
+[[!template text="for as long as you work with Emacs." start="00:36:19.190" video="mainVideo" id=subtitle]]
+[[!template text="And if you really want to" start="00:36:22.200" video="mainVideo" id=subtitle]]
+[[!template text="take it a step further," start="00:36:23.574" video="mainVideo" id=subtitle]]
+[[!template text="you know where to look" start="00:36:25.150" video="mainVideo" id=subtitle]]
+[[!template text="for inspiration and guidance." start="00:36:27.569" video="mainVideo" id=subtitle]]
+[[!template text="Before you realise it," start="00:36:30.620" video="mainVideo" id=subtitle]]
+[[!template text="you start writing code in ELisp" start="00:36:32.722" video="mainVideo" id=subtitle]]
+[[!template text="and can one day share it with others." start="00:36:35.556" video="mainVideo" id=subtitle]]
+[[!template new="1" text="What I have learnt over the past 2.5 years" start="00:36:39.030" video="mainVideo" id=subtitle]]
+[[!template text="as an Emacs user" start="00:36:42.060" video="mainVideo" id=subtitle]]
+[[!template text="is that if you go from scratch" start="00:36:43.331" video="mainVideo" id=subtitle]]
+[[!template text="and are meticulous in your approach," start="00:36:45.661" video="mainVideo" id=subtitle]]
+[[!template text="you will need a few days or weeks" start="00:36:48.442" video="mainVideo" id=subtitle]]
+[[!template text="before everything starts to make sense." start="00:36:51.379" video="mainVideo" id=subtitle]]
+[[!template text="After that initial awkward phase" start="00:36:54.750" video="mainVideo" id=subtitle]]
+[[!template text="during which you familiarise yourself" start="00:36:57.477" video="mainVideo" id=subtitle]]
+[[!template text="with the basics," start="00:37:00.428" video="mainVideo" id=subtitle]]
+[[!template text="everything else will become easier to learn." start="00:37:01.748" video="mainVideo" id=subtitle]]
+[[!template text="It is a matter of gaining more experience," start="00:37:06.050" video="mainVideo" id=subtitle]]
+[[!template text="one step at a time." start="00:37:09.524" video="mainVideo" id=subtitle]]
+[[!template text="As with every field of expertise," start="00:37:11.060" video="mainVideo" id=subtitle]]
+[[!template text="Emacs expects you to work for it" start="00:37:13.537" video="mainVideo" id=subtitle]]
+[[!template text="and to earn it." start="00:37:15.870" video="mainVideo" id=subtitle]]
+[[!template text="For me, that is worth it." start="00:37:19.110" video="mainVideo" id=subtitle]]
+[[!template text="In terms of being malleable" start="00:37:21.240" video="mainVideo" id=subtitle]]
+[[!template text="in a consistent way" start="00:37:23.655" video="mainVideo" id=subtitle]]
+[[!template text="and transparent in what it does," start="00:37:25.294" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is in a league of its own." start="00:37:28.388" video="mainVideo" id=subtitle]]
+[[!template new="1" text="In conclusion, folks," start="00:37:31.390" video="mainVideo" id=subtitle]]
+[[!template text="Emacs allowed me to assert control" start="00:37:33.707" video="mainVideo" id=subtitle]]
+[[!template text="over a great portion" start="00:37:36.898" video="mainVideo" id=subtitle]]
+[[!template text="of my quotidian computing." start="00:37:39.260" video="mainVideo" id=subtitle]]
+[[!template text="It helped me grow out of" start="00:37:42.780" video="mainVideo" id=subtitle]]
+[[!template text="the state of ignorance I was in;" start="00:37:44.827" video="mainVideo" id=subtitle]]
+[[!template text="a state that rendered me" start="00:37:47.448" video="mainVideo" id=subtitle]]
+[[!template text="powerless to use the computer" start="00:37:49.811" video="mainVideo" id=subtitle]]
+[[!template text="exactly how I wanted." start="00:37:52.528" video="mainVideo" id=subtitle]]
+[[!template text="For that I am grateful." start="00:37:54.430" video="mainVideo" id=subtitle]]
+[[!template text="I now consider it my duty" start="00:37:57.910" video="mainVideo" id=subtitle]]
+[[!template text="to contribute back to" start="00:38:00.071" video="mainVideo" id=subtitle]]
+[[!template text="this wonderful project" start="00:38:02.025" video="mainVideo" id=subtitle]]
+[[!template text="and this awesome community." start="00:38:04.007" video="mainVideo" id=subtitle]]
+[[!template text="So thank you very much for your attention" start="00:38:06.390" video="mainVideo" id=subtitle]]
+[[!template text="in watching today's presentation." start="00:38:09.174" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Special thanks to" start="00:38:12.690" video="mainVideo" id=subtitle]]
+[[!template text="the EmacsConf organizers and volunteers." start="00:38:13.874" video="mainVideo" id=subtitle]]
+[[!template text="This is all from my side, folks." start="00:38:18.207" video="mainVideo" id=subtitle]]
+[[!template text="Thank you very much. Goodbye." start="00:38:20.574" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/frownies.md b/2021/captions/frownies.md
new file mode 100644
index 00000000..7ed28392
--- /dev/null
+++ b/2021/captions/frownies.md
@@ -0,0 +1,520 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hi everyone! My name is Case Duckworth" start="00:00:00.000" video="mainVideo" id=subtitle]]
+[[!template text="and I've been using Emacs" start="00:00:02.770" video="mainVideo" id=subtitle]]
+[[!template text="for about a year and a half." start="00:00:04.070" video="mainVideo" id=subtitle]]
+[[!template text="If you do the math," start="00:00:05.536" video="mainVideo" id=subtitle]]
+[[!template text="you'll see that was pretty soon" start="00:00:06.736" video="mainVideo" id=subtitle]]
+[[!template text="after the pandemic hit us in the U.S." start="00:00:08.403" video="mainVideo" id=subtitle]]
+[[!template text="While I was busy making bread" start="00:00:11.470" video="mainVideo" id=subtitle]]
+[[!template text="and walking my dogs," start="00:00:13.970" video="mainVideo" id=subtitle]]
+[[!template text="trying not to drive myself crazy" start="00:00:14.970" video="mainVideo" id=subtitle]]
+[[!template text="in the house," start="00:00:17.936" video="mainVideo" id=subtitle]]
+[[!template text="I tried Emacs again." start="00:00:18.970" video="mainVideo" id=subtitle]]
+[[!template text="I don't know if I was successful in that," start="00:00:20.603" video="mainVideo" id=subtitle]]
+[[!template text="going crazy... I mean, I still use Emacs." start="00:00:23.270" video="mainVideo" id=subtitle]]
+[[!template text="But I have been able to enjoy" start="00:00:26.936" video="mainVideo" id=subtitle]]
+[[!template text="the infinitely-malleable," start="00:00:30.436" video="mainVideo" id=subtitle]]
+[[!template text="immensely enjoyable," start="00:00:31.670" video="mainVideo" id=subtitle]]
+[[!template text="and sublimely parenthetical world" start="00:00:32.870" video="mainVideo" id=subtitle]]
+[[!template text="of Emacs the editor," start="00:00:34.936" video="mainVideo" id=subtitle]]
+[[!template text="the community," start="00:00:36.470" video="mainVideo" id=subtitle]]
+[[!template text="and of course, the Lisp language." start="00:00:37.570" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So. And in this I'm going to" start="00:00:39.470" video="mainVideo" id=subtitle]]
+[[!template text="explore just a little anecdote of that," start="00:00:42.270" video="mainVideo" id=subtitle]]
+[[!template text="a little nugget of what I think" start="00:00:46.103" video="mainVideo" id=subtitle]]
+[[!template text="makes Emacs so great," start="00:00:48.536" video="mainVideo" id=subtitle]]
+[[!template text="using the lens of a package that I wrote" start="00:00:50.870" video="mainVideo" id=subtitle]]
+[[!template text="about a month ago now" start="00:00:53.703" video="mainVideo" id=subtitle]]
+[[!template text="called frowny.el." start="00:00:57.370" video="mainVideo" id=subtitle]]
+[[!template text="So yeah, let's go ahead and jump in." start="00:00:59.536" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, before the beginning," start="00:01:01.570" video="mainVideo" id=subtitle]]
+[[!template text="I want to talk about" start="00:01:08.236" video="mainVideo" id=subtitle]]
+[[!template text="my very beginning with Linux." start="00:01:09.036" video="mainVideo" id=subtitle]]
+[[!template text="I first installed Linux" start="00:01:10.770" video="mainVideo" id=subtitle]]
+[[!template text="for the first time" start="00:01:12.136" video="mainVideo" id=subtitle]]
+[[!template text="as a freshman in college, way back in 2008." start="00:01:13.170" video="mainVideo" id=subtitle]]
+[[!template text="I don't know if you were around," start="00:01:15.703" video="mainVideo" id=subtitle]]
+[[!template text="but 2008 was not" start="00:01:17.703" video="mainVideo" id=subtitle]]
+[[!template text="the year of the Linux desktop." start="00:01:19.503" video="mainVideo" id=subtitle]]
+[[!template text="WiFi was weird. Sound was weird." start="00:01:21.570" video="mainVideo" id=subtitle]]
+[[!template text="Everything was odd and strange and weird." start="00:01:26.803" video="mainVideo" id=subtitle]]
+[[!template text="I mean, it wasn't good." start="00:01:30.136" video="mainVideo" id=subtitle]]
+[[!template text="So, at that time," start="00:01:31.670" video="mainVideo" id=subtitle]]
+[[!template text="I knew absolutely nothing about anything." start="00:01:33.603" video="mainVideo" id=subtitle]]
+[[!template text="I installed this terrible" start="00:01:36.203" video="mainVideo" id=subtitle]]
+[[!template text="distro called gOS." start="00:01:41.203" video="mainVideo" id=subtitle]]
+[[!template text="I always forget what it's called" start="00:01:43.470" video="mainVideo" id=subtitle]]
+[[!template text="and then I looked it up." start="00:01:44.803" video="mainVideo" id=subtitle]]
+[[!template text="And this is what I looked at" start="00:01:45.703" video="mainVideo" id=subtitle]]
+[[!template text="when I signed in." start="00:01:47.636" video="mainVideo" id=subtitle]]
+[[!template text="It wasn't good." start="00:01:49.836" video="mainVideo" id=subtitle]]
+[[!template text="I think it was trying to" start="00:01:51.903" video="mainVideo" id=subtitle]]
+[[!template text="integrate better with Google tools?" start="00:01:53.203" video="mainVideo" id=subtitle]]
+[[!template text="So I was, like, oh, yeah, you know," start="00:01:57.003" video="mainVideo" id=subtitle]]
+[[!template text="Gmail and Google Calendar," start="00:01:58.870" video="mainVideo" id=subtitle]]
+[[!template text="so this will have it all there." start="00:02:00.870" video="mainVideo" id=subtitle]]
+[[!template text="Anyway, the company's defunct now" start="00:02:02.436" video="mainVideo" id=subtitle]]
+[[!template text="and it's pretty obvious why." start="00:02:04.536" video="mainVideo" id=subtitle]]
+[[!template text="It was really bad." start="00:02:07.003" video="mainVideo" id=subtitle]]
+[[!template text="So I thought to myself," start="00:02:07.636" video="mainVideo" id=subtitle]]
+[[!template text="I'll delete the partition." start="00:02:08.903" video="mainVideo" id=subtitle]]
+[[!template text="Easy peasy. So I did," start="00:02:11.670" video="mainVideo" id=subtitle]]
+[[!template text="and I rebooted," start="00:02:12.903" video="mainVideo" id=subtitle]]
+[[!template text="and the Master Boot Record was gone," start="00:02:13.770" video="mainVideo" id=subtitle]]
+[[!template text="so I couldn't boot Windows," start="00:02:15.336" video="mainVideo" id=subtitle]]
+[[!template text="and it was all, bleah, and I was like," start="00:02:16.370" video="mainVideo" id=subtitle]]
+[[!template text="oh, shit, I have to do my schoolwork." start="00:02:17.936" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I thought I was terribly hosed" start="00:02:24.536" video="mainVideo" id=subtitle]]
+[[!template text="so I just installed Linux." start="00:02:26.203" video="mainVideo" id=subtitle]]
+[[!template text="I think I installed Crunchbang Linux first." start="00:02:28.870" video="mainVideo" id=subtitle]]
+[[!template text="It looked like this." start="00:02:31.970" video="mainVideo" id=subtitle]]
+[[!template text="It's not super exciting." start="00:02:33.270" video="mainVideo" id=subtitle]]
+[[!template text="It was an Openbox-based, Debian-based distro" start="00:02:35.203" video="mainVideo" id=subtitle]]
+[[!template text="run by this one guy out in England." start="00:02:41.303" video="mainVideo" id=subtitle]]
+[[!template text="It was great. I really enjoyed it." start="00:02:43.403" video="mainVideo" id=subtitle]]
+[[!template text="The forums were amazing." start="00:02:46.570" video="mainVideo" id=subtitle]]
+[[!template text="It still kind of lives on" start="00:02:47.970" video="mainVideo" id=subtitle]]
+[[!template text="through a project called BunsenLabs" start="00:02:50.603" video="mainVideo" id=subtitle]]
+[[!template text="so go check them out if you want." start="00:02:53.003" video="mainVideo" id=subtitle]]
+[[!template text="It was a good time. Anyway." start="00:02:54.936" video="mainVideo" id=subtitle]]
+[[!template text="I was using that for a long time," start="00:02:56.170" video="mainVideo" id=subtitle]]
+[[!template text="and, you know, probably familiar" start="00:02:58.803" video="mainVideo" id=subtitle]]
+[[!template text="to many of you," start="00:03:00.436" video="mainVideo" id=subtitle]]
+[[!template text="I hopped around" start="00:03:01.670" video="mainVideo" id=subtitle]]
+[[!template text="from distro to distro," start="00:03:02.903" video="mainVideo" id=subtitle]]
+[[!template text="from WM to DE, just on and on and on," start="00:03:03.836" video="mainVideo" id=subtitle]]
+[[!template text="trying different things." start="00:03:08.970" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I'm not a programmer." start="00:03:10.270" video="mainVideo" id=subtitle]]
+[[!template text="I actually went to school" start="00:03:12.003" video="mainVideo" id=subtitle]]
+[[!template text="for English writing," start="00:03:12.736" video="mainVideo" id=subtitle]]
+[[!template text="and so I learned programming" start="00:03:15.136" video="mainVideo" id=subtitle]]
+[[!template text="mostly from configuring" start="00:03:17.536" video="mainVideo" id=subtitle]]
+[[!template text="different window managers." start="00:03:19.636" video="mainVideo" id=subtitle]]
+[[!template text="I learned Lua with AwesomeWM." start="00:03:20.836" video="mainVideo" id=subtitle]]
+[[!template text="I learned Haskell with Xmonad." start="00:03:23.803" video="mainVideo" id=subtitle]]
+[[!template text="Sort of Haskell. I mean, I liked Haskell." start="00:03:25.836" video="mainVideo" id=subtitle]]
+[[!template text="I like Haskell a lot," start="00:03:28.070" video="mainVideo" id=subtitle]]
+[[!template text="at least the syntax." start="00:03:30.770" video="mainVideo" id=subtitle]]
+[[!template text="It looks like words." start="00:03:32.536" video="mainVideo" id=subtitle]]
+[[!template text="You can define functions multiple times" start="00:03:36.070" video="mainVideo" id=subtitle]]
+[[!template text="for different inputs." start="00:03:40.103" video="mainVideo" id=subtitle]]
+[[!template text="It has that really great pattern matching." start="00:03:41.670" video="mainVideo" id=subtitle]]
+[[!template text="The thing I really didn't get was monads." start="00:03:42.703" video="mainVideo" id=subtitle]]
+[[!template text="What is a monad?" start="00:03:45.270" video="mainVideo" id=subtitle]]
+[[!template text="Is it a burrito? Is it a box?" start="00:03:46.570" video="mainVideo" id=subtitle]]
+[[!template text="Is it a burrito inside of a box?" start="00:03:48.103" video="mainVideo" id=subtitle]]
+[[!template text="Is it a box inside of a burrito?" start="00:03:49.770" video="mainVideo" id=subtitle]]
+[[!template text="Is there a cat involved," start="00:03:51.370" video="mainVideo" id=subtitle]]
+[[!template text="or a superposition of such?" start="00:03:53.203" video="mainVideo" id=subtitle]]
+[[!template text="I don't know. Anyway, it got confusing." start="00:03:55.336" video="mainVideo" id=subtitle]]
+[[!template text="That's really where I lost me." start="00:03:58.936" video="mainVideo" id=subtitle]]
+[[!template text="Again, you know, if you like Haskell," start="00:04:01.436" video="mainVideo" id=subtitle]]
+[[!template text="if you write Haskell," start="00:04:05.170" video="mainVideo" id=subtitle]]
+[[!template text="more power to you." start="00:04:05.970" video="mainVideo" id=subtitle]]
+[[!template text="It didn't fit my brain right." start="00:04:08.136" video="mainVideo" id=subtitle]]
+[[!template text="So that was that," start="00:04:11.370" video="mainVideo" id=subtitle]]
+[[!template text="but it kinda ruined me" start="00:04:14.403" video="mainVideo" id=subtitle]]
+[[!template text="for a lot of other programming languages," start="00:04:15.436" video="mainVideo" id=subtitle]]
+[[!template text="because the functional style" start="00:04:17.003" video="mainVideo" id=subtitle]]
+[[!template text="I really get. That part I did get." start="00:04:19.970" video="mainVideo" id=subtitle]]
+[[!template text="And stuff like Python, really," start="00:04:22.403" video="mainVideo" id=subtitle]]
+[[!template text="object orientation..." start="00:04:25.703" video="mainVideo" id=subtitle]]
+[[!template text="I would always get way too into classes" start="00:04:27.070" video="mainVideo" id=subtitle]]
+[[!template text="and figuring out this and that." start="00:04:32.570" video="mainVideo" id=subtitle]]
+[[!template text="It just didn't work for me." start="00:04:34.703" video="mainVideo" id=subtitle]]
+[[!template text="I was kind of floating." start="00:04:35.870" video="mainVideo" id=subtitle]]
+[[!template text="Learned Bash, which is, you know, Bash." start="00:04:37.870" video="mainVideo" id=subtitle]]
+[[!template text="It's fine, but it's Bash." start="00:04:41.503" video="mainVideo" id=subtitle]]
+[[!template text="It wasn't great either." start="00:04:43.603" video="mainVideo" id=subtitle]]
+[[!template text="Anyway. That was six years or so," start="00:04:46.703" video="mainVideo" id=subtitle]]
+[[!template text="just kind of did that, right." start="00:04:51.470" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And yes, I was using Vim." start="00:04:52.936" video="mainVideo" id=subtitle]]
+[[!template text="I mean... Keeps you clean, right?" start="00:04:55.870" video="mainVideo" id=subtitle]]
+[[!template text="I'm just kidding." start="00:04:58.370" video="mainVideo" id=subtitle]]
+[[!template text="I was using Vim, the editor." start="00:04:59.636" video="mainVideo" id=subtitle]]
+[[!template text="It was fine." start="00:05:02.536" video="mainVideo" id=subtitle]]
+[[!template text="It was great. I mean..." start="00:05:03.470" video="mainVideo" id=subtitle]]
+[[!template text="Emacs and Vim, they go head to head" start="00:05:05.936" video="mainVideo" id=subtitle]]
+[[!template text="because they're both 40 years old." start="00:05:08.203" video="mainVideo" id=subtitle]]
+[[!template text="They both are super powerful." start="00:05:10.536" video="mainVideo" id=subtitle]]
+[[!template text="They both have their own paradigms." start="00:05:13.270" video="mainVideo" id=subtitle]]
+[[!template text="If you get into it, then it's like" start="00:05:15.336" video="mainVideo" id=subtitle]]
+[[!template text="powpowpow, you're doing all this stuff" start="00:05:16.836" video="mainVideo" id=subtitle]]
+[[!template text="it's great." start="00:05:19.236" video="mainVideo" id=subtitle]]
+[[!template text="I wrote some plugins with Vim," start="00:05:20.503" video="mainVideo" id=subtitle]]
+[[!template text="a couple of themes, this and that," start="00:05:22.036" video="mainVideo" id=subtitle]]
+[[!template text="but you know, VimScript is not great." start="00:05:25.536" video="mainVideo" id=subtitle]]
+[[!template text="I think one of the common" start="00:05:28.636" video="mainVideo" id=subtitle]]
+[[!template text="criticisms of Elisp" start="00:05:31.803" video="mainVideo" id=subtitle]]
+[[!template text="it's like, oh, it's this weird kind of..." start="00:05:34.936" video="mainVideo" id=subtitle]]
+[[!template text="It's written for (inaudible)..." start="00:05:37.170" video="mainVideo" id=subtitle]]
+[[!template text="Tell you, it's way less than" start="00:05:38.536" video="mainVideo" id=subtitle]]
+[[!template text="VimScript is. Oof." start="00:05:43.336" video="mainVideo" id=subtitle]]
+[[!template text="Anyway. That, also, really terminal-first," start="00:05:44.470" video="mainVideo" id=subtitle]]
+[[!template text="which I used for a long time and then" start="00:05:49.670" video="mainVideo" id=subtitle]]
+[[!template text="I only think I started noticing" start="00:05:52.570" video="mainVideo" id=subtitle]]
+[[!template text="now that I'm using Emacs more," start="00:05:54.436" video="mainVideo" id=subtitle]]
+[[!template text="like, that terminal-first workflow," start="00:05:56.236" video="mainVideo" id=subtitle]]
+[[!template text="again, for my brain," start="00:05:57.803" video="mainVideo" id=subtitle]]
+[[!template text="it doesn't super work for me." start="00:06:01.136" video="mainVideo" id=subtitle]]
+[[!template text="I always had this Platonic ideal" start="00:06:02.803" video="mainVideo" id=subtitle]]
+[[!template text="of what a workflow should look like," start="00:06:06.636" video="mainVideo" id=subtitle]]
+[[!template text="and I was always working towards it." start="00:06:08.470" video="mainVideo" id=subtitle]]
+[[!template text="I would run into this problem" start="00:06:10.836" video="mainVideo" id=subtitle]]
+[[!template text="and I wouldn't know how to solve it." start="00:06:12.803" video="mainVideo" id=subtitle]]
+[[!template text="so I kind of quit. Do something else." start="00:06:14.003" video="mainVideo" id=subtitle]]
+[[!template text="I think that's part of why" start="00:06:15.736" video="mainVideo" id=subtitle]]
+[[!template text="I had so much churn" start="00:06:17.003" video="mainVideo" id=subtitle]]
+[[!template text="for such a long time." start="00:06:17.836" video="mainVideo" id=subtitle]]
+[[!template text="Because at the end of the day," start="00:06:18.670" video="mainVideo" id=subtitle]]
+[[!template text="window managing, you're just" start="00:06:20.336" video="mainVideo" id=subtitle]]
+[[!template text="moving around little boxes on your screen." start="00:06:23.936" video="mainVideo" id=subtitle]]
+[[!template text="So I was spinning wheels" start="00:06:26.567" video="mainVideo" id=subtitle]]
+[[!template text="for a long time." start="00:06:30.536" video="mainVideo" id=subtitle]]
+[[!template text="But yes. And it wasn't like" start="00:06:31.203" video="mainVideo" id=subtitle]]
+[[!template text="it was all bad." start="00:06:36.203" video="mainVideo" id=subtitle]]
+[[!template text="Most of this stuff" start="00:06:36.803" video="mainVideo" id=subtitle]]
+[[!template text="just came out now that" start="00:06:38.036" video="mainVideo" id=subtitle]]
+[[!template text="I'm thinking about it," start="00:06:39.603" video="mainVideo" id=subtitle]]
+[[!template text="now that I'm kind of going through this" start="00:06:40.236" video="mainVideo" id=subtitle]]
+[[!template text="in my head, like, that part of it wasn't great." start="00:06:42.970" video="mainVideo" id=subtitle]]
+[[!template text="I was having a good time." start="00:06:45.736" video="mainVideo" id=subtitle]]
+[[!template text="I was still... Open source," start="00:06:46.703" video="mainVideo" id=subtitle]]
+[[!template text="I was getting in the community." start="00:06:48.670" video="mainVideo" id=subtitle]]
+[[!template text="I was doing all this stuff." start="00:06:49.936" video="mainVideo" id=subtitle]]
+[[!template text="It was all great." start="00:06:50.603" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But anyway, the pandemic hit, obviously," start="00:06:51.803" video="mainVideo" id=subtitle]]
+[[!template text="really hard, last spring, in the US." start="00:06:56.336" video="mainVideo" id=subtitle]]
+[[!template text="And here we are," start="00:06:58.736" video="mainVideo" id=subtitle]]
+[[!template text="talking about the pandemic in 2021." start="00:07:00.870" video="mainVideo" id=subtitle]]
+[[!template text="Can you imagine?" start="00:07:03.070" video="mainVideo" id=subtitle]]
+[[!template text="So, I didn't lose my job." start="00:07:04.370" video="mainVideo" id=subtitle]]
+[[!template text="Thank goodness." start="00:07:05.836" video="mainVideo" id=subtitle]]
+[[!template text="But I did... I work for the government," start="00:07:06.903" video="mainVideo" id=subtitle]]
+[[!template text="I was sent home for two months." start="00:07:09.236" video="mainVideo" id=subtitle]]
+[[!template text="I had all this free time on my hands." start="00:07:10.236" video="mainVideo" id=subtitle]]
+[[!template text="I got into baking," start="00:07:11.803" video="mainVideo" id=subtitle]]
+[[!template text="I bought a 50-pound bag of flour." start="00:07:13.903" video="mainVideo" id=subtitle]]
+[[!template text="I started a bread-themed tilde server," start="00:07:16.236" video="mainVideo" id=subtitle]]
+[[!template text="you know, those shared Unix servers" start="00:07:18.470" video="mainVideo" id=subtitle]]
+[[!template text="all the cool kids talk about?" start="00:07:20.436" video="mainVideo" id=subtitle]]
+[[!template text="Yeah, it's breadpunk.club, go check it out!" start="00:07:21.803" video="mainVideo" id=subtitle]]
+[[!template text="Join if you want. Anyway. Yeah." start="00:07:26.970" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I decided to try Emacs again." start="00:07:29.770" video="mainVideo" id=subtitle]]
+[[!template text="Kind of on a whim, I think." start="00:07:32.703" video="mainVideo" id=subtitle]]
+[[!template text="I don't super remember, but I think I did." start="00:07:33.803" video="mainVideo" id=subtitle]]
+[[!template text="I tried Spacemacs. It didn't stick." start="00:07:36.170" video="mainVideo" id=subtitle]]
+[[!template text="Spacemacs was trying to be Vim," start="00:07:42.103" video="mainVideo" id=subtitle]]
+[[!template text="but enough things didn't fit in" start="00:07:44.036" video="mainVideo" id=subtitle]]
+[[!template text="with what I was expecting" start="00:07:46.403" video="mainVideo" id=subtitle]]
+[[!template text="with my Vim workflow." start="00:07:48.636" video="mainVideo" id=subtitle]]
+[[!template text="All sorts of plugins that did certain things" start="00:07:50.603" video="mainVideo" id=subtitle]]
+[[!template text="and I didn't know to just get into Spacemacs." start="00:07:53.836" video="mainVideo" id=subtitle]]
+[[!template text="It just didn't work for me." start="00:07:57.270" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I tried Emacs. This time, it stuck." start="00:08:01.070" video="mainVideo" id=subtitle]]
+[[!template text="I started out just vanilla," start="00:08:05.436" video="mainVideo" id=subtitle]]
+[[!template text="basic no init.el," start="00:08:07.370" video="mainVideo" id=subtitle]]
+[[!template text="then I wrote an init.el," start="00:08:09.470" video="mainVideo" id=subtitle]]
+[[!template text="and then I rewrote my init.el," start="00:08:11.103" video="mainVideo" id=subtitle]]
+[[!template text="and then I took my init.el, crumpled it up," start="00:08:12.636" video="mainVideo" id=subtitle]]
+[[!template text="threw it in the trash can," start="00:08:16.570" video="mainVideo" id=subtitle]]
+[[!template text="wrote it again from scratch." start="00:08:17.736" video="mainVideo" id=subtitle]]
+[[!template text="I'm actually currently" start="00:08:19.603" video="mainVideo" id=subtitle]]
+[[!template text="in the middle of Bankruptcy #8," start="00:08:21.203" video="mainVideo" id=subtitle]]
+[[!template text="which I think I really got this time." start="00:08:23.036" video="mainVideo" id=subtitle]]
+[[!template text="It's either that or Number 9." start="00:08:25.136" video="mainVideo" id=subtitle]]
+[[!template text="So I have 1700-ish commits." start="00:08:29.036" video="mainVideo" id=subtitle]]
+[[!template text="I also have like, 3 or 4 .emacs repositories" start="00:08:32.936" video="mainVideo" id=subtitle]]
+[[!template text="around my various Git hosting platforms" start="00:08:37.536" video="mainVideo" id=subtitle]]
+[[!template text="that I use." start="00:08:41.500" video="mainVideo" id=subtitle]]
+[[!template text="I was on GitHub, GitLab, ~/git..." start="00:08:42.270" video="mainVideo" id=subtitle]]
+[[!template text="I don't use Git very well." start="00:08:44.103" video="mainVideo" id=subtitle]]
+[[!template text="I'm very much amateur in that entire thing." start="00:08:47.403" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Anyway, that is all to say" start="00:08:50.003" video="mainVideo" id=subtitle]]
+[[!template text="I got into it, right." start="00:08:52.970" video="mainVideo" id=subtitle]]
+[[!template text="Like, really into it." start="00:08:55.170" video="mainVideo" id=subtitle]]
+[[!template text="I was watching" start="00:08:57.470" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Conference videos. Live." start="00:08:59.000" video="mainVideo" id=subtitle]]
+[[!template text="I was reading /r/emacs." start="00:09:02.136" video="mainVideo" id=subtitle]]
+[[!template text="I was reading Planet Emacs." start="00:09:06.003" video="mainVideo" id=subtitle]]
+[[!template text="I subscribed to both." start="00:09:07.036" video="mainVideo" id=subtitle]]
+[[!template text="I have other blogs that I read." start="00:09:09.036" video="mainVideo" id=subtitle]]
+[[!template text="All the greats." start="00:09:11.603" video="mainVideo" id=subtitle]]
+[[!template text="Everyone who's presenting here, probably." start="00:09:13.570" video="mainVideo" id=subtitle]]
+[[!template text="I started watching people on YouTube" start="00:09:16.203" video="mainVideo" id=subtitle]]
+[[!template text="like Prot, like David Wilson" start="00:09:18.836" video="mainVideo" id=subtitle]]
+[[!template text="who does System Crafters." start="00:09:20.803" video="mainVideo" id=subtitle]]
+[[!template text="I was already on IRC" start="00:09:23.003" video="mainVideo" id=subtitle]]
+[[!template text="with the tildeverse," start="00:09:25.336" video="mainVideo" id=subtitle]]
+[[!template text="and so I hopped over to #emacs on Freenode" start="00:09:26.836" video="mainVideo" id=subtitle]]
+[[!template text="(remember Freenode?)." start="00:09:29.670" video="mainVideo" id=subtitle]]
+[[!template text="Anyway, it was a good time." start="00:09:30.936" video="mainVideo" id=subtitle]]
+[[!template text="So I was doing all this stuff." start="00:09:34.403" video="mainVideo" id=subtitle]]
+[[!template text="And... oh yeah. Right." start="00:09:36.003" video="mainVideo" id=subtitle]]
+[[!template text="Anyway, so that's all to say..." start="00:09:38.236" video="mainVideo" id=subtitle]]
+[[!template text="Frowns. I was on #systemcrafters channel" start="00:09:40.636" video="mainVideo" id=subtitle]]
+[[!template text="on libera.chat," start="00:09:46.736" video="mainVideo" id=subtitle]]
+[[!template text="the channel for the YouTube channel" start="00:09:47.970" video="mainVideo" id=subtitle]]
+[[!template text="System Crafters by David Wilson." start="00:09:51.203" video="mainVideo" id=subtitle]]
+[[!template text="I think he's on later." start="00:09:53.403" video="mainVideo" id=subtitle]]
+[[!template text="I'm sure he'll talk about it." start="00:09:55.436" video="mainVideo" id=subtitle]]
+[[!template text="I don't know what he's talking about." start="00:09:57.070" video="mainVideo" id=subtitle]]
+[[!template text="Anyway, one day we were chatting" start="00:09:58.370" video="mainVideo" id=subtitle]]
+[[!template text="and this guy alphapapa, who also" start="00:10:01.270" video="mainVideo" id=subtitle]]
+[[!template text="has written a lot of these packages, said" start="00:10:02.770" video="mainVideo" id=subtitle]]
+[[!template text="&quot;electric-pair-mode messes up" start="00:10:08.236" video="mainVideo" id=subtitle]]
+[[!template text="my frowny faces sometimes.&quot;" start="00:10:09.370" video="mainVideo" id=subtitle]]
+[[!template text="You can see here" start="00:10:10.733" video="mainVideo" id=subtitle]]
+[[!template text="this frowny, what is this..." start="00:10:14.036" video="mainVideo" id=subtitle]]
+[[!template text="You can see it there on the screen." start="00:10:15.170" video="mainVideo" id=subtitle]]
+[[!template text="What is that, right?" start="00:10:23.136" video="mainVideo" id=subtitle]]
+[[!template text="It's terrifying." start="00:10:24.303" video="mainVideo" id=subtitle]]
+[[!template text="What is this?" start="00:10:27.070" video="mainVideo" id=subtitle]]
+[[!template text="What is that?" start="00:10:28.203" video="mainVideo" id=subtitle]]
+[[!template text="I don't know." start="00:10:30.970" video="mainVideo" id=subtitle]]
+[[!template text="I don't know what that is." start="00:10:31.803" video="mainVideo" id=subtitle]]
+[[!template text="And then I said, you know," start="00:10:32.736" video="mainVideo" id=subtitle]]
+[[!template text="&quot;I have a hook" start="00:10:34.736" video="mainVideo" id=subtitle]]
+[[!template text="that disables electric-pair-mode" start="00:10:35.567" video="mainVideo" id=subtitle]]
+[[!template text="for chat buffers.&quot;" start="00:10:36.536" video="mainVideo" id=subtitle]]
+[[!template text="Which, actually, fun fact," start="00:10:37.970" video="mainVideo" id=subtitle]]
+[[!template text="I was lying." start="00:10:39.136" video="mainVideo" id=subtitle]]
+[[!template text="Not that that matters." start="00:10:40.167" video="mainVideo" id=subtitle]]
+[[!template text="I have a hook." start="00:10:41.836" video="mainVideo" id=subtitle]]
+[[!template text="You could have a hook" start="00:10:43.370" video="mainVideo" id=subtitle]]
+[[!template text="that just disables electric-pair-mode" start="00:10:44.436" video="mainVideo" id=subtitle]]
+[[!template text="in chat buffers." start="00:10:46.203" video="mainVideo" id=subtitle]]
+[[!template text="To which he replied," start="00:10:46.800" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Yeah, but I want electric-pair-mode" start="00:10:47.803" video="mainVideo" id=subtitle]]
+[[!template text="everywhere, except for" start="00:10:50.667" video="mainVideo" id=subtitle]]
+[[!template text="when I type a frowny face.&quot;" start="00:10:51.900" video="mainVideo" id=subtitle]]
+[[!template text="And this sandwich face. What is that?" start="00:10:53.670" video="mainVideo" id=subtitle]]
+[[!template text="He said, &quot;I could stop typing frowny faces.&quot;" start="00:10:56.503" video="mainVideo" id=subtitle]]
+[[!template text="And then I said, &quot;Hmm...&quot;" start="00:10:59.870" video="mainVideo" id=subtitle]]
+[[!template text="And then I said, &quot;I feel like" start="00:11:01.270" video="mainVideo" id=subtitle]]
+[[!template text="you're in the best position" start="00:11:02.533" video="mainVideo" id=subtitle]]
+[[!template text="to write a package, like frowny.el,&quot;" start="00:11:03.200" video="mainVideo" id=subtitle]]
+[[!template text="I said as a joke." start="00:11:05.336" video="mainVideo" id=subtitle]]
+[[!template text="And then conversation went on," start="00:11:07.270" video="mainVideo" id=subtitle]]
+[[!template text="we talked about... made some jokes" start="00:11:10.636" video="mainVideo" id=subtitle]]
+[[!template text="about Lisp and all that stuff" start="00:11:12.636" video="mainVideo" id=subtitle]]
+[[!template text="So anyway, went on, went on," start="00:11:14.670" video="mainVideo" id=subtitle]]
+[[!template text="and then apparently," start="00:11:18.370" video="mainVideo" id=subtitle]]
+[[!template text="23 minutes later," start="00:11:20.503" video="mainVideo" id=subtitle]]
+[[!template text="I had a frowny.el package" start="00:11:21.703" video="mainVideo" id=subtitle]]
+[[!template text="just wrote up real quick." start="00:11:24.603" video="mainVideo" id=subtitle]]
+[[!template text="And yeah. That was it." start="00:11:26.770" video="mainVideo" id=subtitle]]
+[[!template text="I said, you know, buddy," start="00:11:30.903" video="mainVideo" id=subtitle]]
+[[!template text="anyway..." start="00:11:31.803" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So now we're going to look at" start="00:11:33.070" video="mainVideo" id=subtitle]]
+[[!template text="the package that I wrote." start="00:11:34.270" video="mainVideo" id=subtitle]]
+[[!template text="frowny.el." start="00:11:35.803" video="mainVideo" id=subtitle]]
+[[!template text="It was actually pretty easy." start="00:11:36.970" video="mainVideo" id=subtitle]]
+[[!template text="Let's see here." start="00:11:40.070" video="mainVideo" id=subtitle]]
+[[!template text="This is it now." start="00:11:41.936" video="mainVideo" id=subtitle]]
+[[!template text="I kind of want to go back into..." start="00:11:44.170" video="mainVideo" id=subtitle]]
+[[!template text="Let's go back to the very beginning." start="00:11:50.203" video="mainVideo" id=subtitle]]
+[[!template text="We'll see what we have here." start="00:11:53.236" video="mainVideo" id=subtitle]]
+[[!template text="Here's our very first," start="00:11:56.536" video="mainVideo" id=subtitle]]
+[[!template text="my very first commit." start="00:11:57.303" video="mainVideo" id=subtitle]]
+[[!template text="I already had all of this crap." start="00:11:59.370" video="mainVideo" id=subtitle]]
+[[!template text="Oh, I already did have a..." start="00:12:03.370" video="mainVideo" id=subtitle]]
+[[!template text="I had a defgroup, I had frowny-eyes..." start="00:12:05.736" video="mainVideo" id=subtitle]]
+[[!template text="This is basically the way I thought it was." start="00:12:08.336" video="mainVideo" id=subtitle]]
+[[!template text="You want to insert a frowny face." start="00:12:11.236" video="mainVideo" id=subtitle]]
+[[!template text="You type in the colon," start="00:12:14.736" video="mainVideo" id=subtitle]]
+[[!template text="or the equal sign, or whatever." start="00:12:16.670" video="mainVideo" id=subtitle]]
+[[!template text="for the eyes," start="00:12:18.670" video="mainVideo" id=subtitle]]
+[[!template text="and then you type the open parenthesis" start="00:12:19.836" video="mainVideo" id=subtitle]]
+[[!template text="for the frown." start="00:12:21.436" video="mainVideo" id=subtitle]]
+[[!template text="And the problem is that" start="00:12:22.836" video="mainVideo" id=subtitle]]
+[[!template text="the parenthesis then triggers" start="00:12:25.703" video="mainVideo" id=subtitle]]
+[[!template text="electric-pair-mode." start="00:12:27.870" video="mainVideo" id=subtitle]]
+[[!template text="It's like, oh, no, I got" start="00:12:29.170" video="mainVideo" id=subtitle]]
+[[!template text="a close parenthesis." start="00:12:30.303" video="mainVideo" id=subtitle]]
+[[!template text="So we just short-circuit that" start="00:12:32.503" video="mainVideo" id=subtitle]]
+[[!template text="whenever there's a thing," start="00:12:33.836" video="mainVideo" id=subtitle]]
+[[!template text="a colon or equals sign before," start="00:12:36.270" video="mainVideo" id=subtitle]]
+[[!template text="and just insert the thing." start="00:12:38.636" video="mainVideo" id=subtitle]]
+[[!template text="Where did it go?" start="00:12:40.136" video="mainVideo" id=subtitle]]
+[[!template text="That's kind of what I did." start="00:12:41.736" video="mainVideo" id=subtitle]]
+[[!template text="So I wrote out... This is it." start="00:12:43.303" video="mainVideo" id=subtitle]]
+[[!template new="1" text="This is the whole package." start="00:12:45.370" video="mainVideo" id=subtitle]]
+[[!template text="It's one function, one minor mode," start="00:12:46.603" video="mainVideo" id=subtitle]]
+[[!template text="one defcustom, and one group. That's it." start="00:12:49.803" video="mainVideo" id=subtitle]]
+[[!template text="Super simple." start="00:12:52.536" video="mainVideo" id=subtitle]]
+[[!template text="Basically, all it does is" start="00:12:54.303" video="mainVideo" id=subtitle]]
+[[!template text="it inserts a frowny" start="00:12:56.970" video="mainVideo" id=subtitle]]
+[[!template text="if it looks back and sees frowny eyes" start="00:12:59.803" video="mainVideo" id=subtitle]]
+[[!template text="which are up here." start="00:13:04.603" video="mainVideo" id=subtitle]]
+[[!template text="The eyes are up here." start="00:13:07.536" video="mainVideo" id=subtitle]]
+[[!template text="Colon, equals sign..." start="00:13:08.136" video="mainVideo" id=subtitle]]
+[[!template text="and then it inserts it" start="00:13:11.536" video="mainVideo" id=subtitle]]
+[[!template text="or it does a self insert command." start="00:13:13.336" video="mainVideo" id=subtitle]]
+[[!template text="That simple." start="00:13:15.970" video="mainVideo" id=subtitle]]
+[[!template text="self-insert-command is what" start="00:13:17.636" video="mainVideo" id=subtitle]]
+[[!template text="electric-pair-mode hooks into." start="00:13:18.803" video="mainVideo" id=subtitle]]
+[[!template text="So that's it." start="00:13:22.770" video="mainVideo" id=subtitle]]
+[[!template text="And then the minor mode" start="00:13:24.370" video="mainVideo" id=subtitle]]
+[[!template text="just makes it a minor mode." start="00:13:25.503" video="mainVideo" id=subtitle]]
+[[!template text="So that was that." start="00:13:27.070" video="mainVideo" id=subtitle]]
+[[!template text="And you know, that worked just fine." start="00:13:28.503" video="mainVideo" id=subtitle]]
+[[!template text="That's the thing. It works just fine." start="00:13:32.436" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Of course, after that," start="00:13:35.670" video="mainVideo" id=subtitle]]
+[[!template text="I had it do a couple of different things." start="00:13:37.270" video="mainVideo" id=subtitle]]
+[[!template text="I added a mascot." start="00:13:39.103" video="mainVideo" id=subtitle]]
+[[!template text="I had to add a README." start="00:13:40.236" video="mainVideo" id=subtitle]]
+[[!template text="I added a global-frowny-mode" start="00:13:42.370" video="mainVideo" id=subtitle]]
+[[!template text="which was kind of interesting" start="00:13:45.070" video="mainVideo" id=subtitle]]
+[[!template text="because I had to figure out" start="00:13:49.036" video="mainVideo" id=subtitle]]
+[[!template text="turn on the frowny mode," start="00:13:49.870" video="mainVideo" id=subtitle]]
+[[!template text="I wrote this define-globalized-minor-mode" start="00:13:51.603" video="mainVideo" id=subtitle]]
+[[!template text="which... is that the one" start="00:13:56.336" video="mainVideo" id=subtitle]]
+[[!template text="No, that one's not super new." start="00:13:58.603" video="mainVideo" id=subtitle]]
+[[!template text="There was another one. Something else" start="00:14:00.870" video="mainVideo" id=subtitle]]
+[[!template text="that was actually for 28 or 27," start="00:14:04.203" video="mainVideo" id=subtitle]]
+[[!template text="and I tried using it at work," start="00:14:07.170" video="mainVideo" id=subtitle]]
+[[!template text="where I have Windows" start="00:14:09.036" video="mainVideo" id=subtitle]]
+[[!template text="and it was 27," start="00:14:10.970" video="mainVideo" id=subtitle]]
+[[!template text="so it must have been for 28." start="00:14:13.436" video="mainVideo" id=subtitle]]
+[[!template text="Anyway, something didn't work" start="00:14:14.670" video="mainVideo" id=subtitle]]
+[[!template text="and I had to do all this stuff." start="00:14:16.103" video="mainVideo" id=subtitle]]
+[[!template text="Oops, sorry." start="00:14:17.170" video="mainVideo" id=subtitle]]
+[[!template text="I added some customization options," start="00:14:20.870" video="mainVideo" id=subtitle]]
+[[!template text="made package-lint happy..." start="00:14:23.070" video="mainVideo" id=subtitle]]
+[[!template text="So yeah, let's see." start="00:14:25.370" video="mainVideo" id=subtitle]]
+[[!template text="That's 0.1." start="00:14:27.336" video="mainVideo" id=subtitle]]
+[[!template text="This version 0.1 was basically" start="00:14:30.170" video="mainVideo" id=subtitle]]
+[[!template text="basic information." start="00:14:33.370" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So then somebody... I put it on GitHub," start="00:14:36.770" video="mainVideo" id=subtitle]]
+[[!template text="good to go." start="00:14:39.670" video="mainVideo" id=subtitle]]
+[[!template text="It actually got some traction on Reddit." start="00:14:40.270" video="mainVideo" id=subtitle]]
+[[!template text="alphapapa, shout out to you" start="00:14:43.103" video="mainVideo" id=subtitle]]
+[[!template text="who posted it there." start="00:14:45.903" video="mainVideo" id=subtitle]]
+[[!template text="But then I got an issue." start="00:14:47.303" video="mainVideo" id=subtitle]]
+[[!template text="Somebody said, hey, could you add" start="00:14:50.636" video="mainVideo" id=subtitle]]
+[[!template text="smiley support?" start="00:14:51.770" video="mainVideo" id=subtitle]]
+[[!template text="I was, like, well," start="00:14:52.936" video="mainVideo" id=subtitle]]
+[[!template text="I don't really understand" start="00:14:54.403" video="mainVideo" id=subtitle]]
+[[!template text="why that's important." start="00:14:55.070" video="mainVideo" id=subtitle]]
+[[!template text="Well, you know, why not?" start="00:14:56.003" video="mainVideo" id=subtitle]]
+[[!template text="They had a use case for it, I forget," start="00:14:58.236" video="mainVideo" id=subtitle]]
+[[!template text="but they had a use case for it." start="00:15:01.270" video="mainVideo" id=subtitle]]
+[[!template text="So, okay, fine." start="00:15:02.270" video="mainVideo" id=subtitle]]
+[[!template text="So I added smiley support right here." start="00:15:03.770" video="mainVideo" id=subtitle]]
+[[!template text="Oh, and I added some more eyes" start="00:15:05.270" video="mainVideo" id=subtitle]]
+[[!template text="at some point." start="00:15:12.570" video="mainVideo" id=subtitle]]
+[[!template text="Now you have... you can do a tear." start="00:15:13.670" video="mainVideo" id=subtitle]]
+[[!template text="You can do a nose." start="00:15:16.736" video="mainVideo" id=subtitle]]
+[[!template text="Let's see..." start="00:15:18.103" video="mainVideo" id=subtitle]]
+[[!template text="I had to change frowny-self-insert" start="00:15:23.603" video="mainVideo" id=subtitle]]
+[[!template text="to frowny-insert-character," start="00:15:27.270" video="mainVideo" id=subtitle]]
+[[!template text="I added frowny-self-insert-frowny" start="00:15:28.803" video="mainVideo" id=subtitle]]
+[[!template text="right here." start="00:15:33.400" video="mainVideo" id=subtitle]]
+[[!template text="I added... I had an obsolete function alias." start="00:15:34.170" video="mainVideo" id=subtitle]]
+[[!template text="That was super fun." start="00:15:38.536" video="mainVideo" id=subtitle]]
+[[!template text="That was a cool thing to do." start="00:15:39.503" video="mainVideo" id=subtitle]]
+[[!template text="I have insert-smiley as well." start="00:15:40.870" video="mainVideo" id=subtitle]]
+[[!template text="They're both very similar." start="00:15:43.970" video="mainVideo" id=subtitle]]
+[[!template text="They're all still there." start="00:15:45.536" video="mainVideo" id=subtitle]]
+[[!template text="I added a keymap." start="00:15:47.336" video="mainVideo" id=subtitle]]
+[[!template text="That was pretty much it." start="00:15:49.403" video="mainVideo" id=subtitle]]
+[[!template text="And you know, again," start="00:15:50.833" video="mainVideo" id=subtitle]]
+[[!template text="super simple, very small." start="00:15:51.303" video="mainVideo" id=subtitle]]
+[[!template text="Let me try this again." start="00:15:54.203" video="mainVideo" id=subtitle]]
+[[!template text="I added comments and docstrings." start="00:15:56.270" video="mainVideo" id=subtitle]]
+[[!template new="1" text="At some point, I decided" start="00:15:58.336" video="mainVideo" id=subtitle]]
+[[!template text="let me try to make a frowny prog mode" start="00:15:59.170" video="mainVideo" id=subtitle]]
+[[!template text="that only works in programming modes," start="00:16:03.870" video="mainVideo" id=subtitle]]
+[[!template text="that only works in strings" start="00:16:06.236" video="mainVideo" id=subtitle]]
+[[!template text="and in comments, but..." start="00:16:07.536" video="mainVideo" id=subtitle]]
+[[!template text="There's still a branch for it," start="00:16:09.303" video="mainVideo" id=subtitle]]
+[[!template text="if you want to go check it out." start="00:16:11.803" video="mainVideo" id=subtitle]]
+[[!template text="It wasn't super useful," start="00:16:14.003" video="mainVideo" id=subtitle]]
+[[!template text="and I think, actually," start="00:16:15.303" video="mainVideo" id=subtitle]]
+[[!template text="electric-pair-mode already does that." start="00:16:16.336" video="mainVideo" id=subtitle]]
+[[!template text="I'm not a hundred percent sure." start="00:16:18.136" video="mainVideo" id=subtitle]]
+[[!template text="I got a pull request" start="00:16:19.070" video="mainVideo" id=subtitle]]
+[[!template text="from alphapapa, adding HISTORY.org." start="00:16:21.503" video="mainVideo" id=subtitle]]
+[[!template text="So you can go read the IRC logs about it." start="00:16:23.903" video="mainVideo" id=subtitle]]
+[[!template text="There's... Let's see..." start="00:16:26.170" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And then just recently," start="00:16:29.703" video="mainVideo" id=subtitle]]
+[[!template text="I actually had to add frowny-inhibit-modes" start="00:16:31.236" video="mainVideo" id=subtitle]]
+[[!template text="because with dired, I kept getting this..." start="00:16:33.636" video="mainVideo" id=subtitle]]
+[[!template text="I would try to hit open parenthesis" start="00:16:39.603" video="mainVideo" id=subtitle]]
+[[!template text="which is my dired-hide-details-mode," start="00:16:43.236" video="mainVideo" id=subtitle]]
+[[!template text="but it kept saying, hey," start="00:16:47.536" video="mainVideo" id=subtitle]]
+[[!template text="it's a read-only buffer. I'm, like, what?" start="00:16:50.536" video="mainVideo" id=subtitle]]
+[[!template text="Oh yeah! Right! It's Emacs. I can C-h k" start="00:16:51.903" video="mainVideo" id=subtitle]]
+[[!template text="and then (, and oh, frowny-self-insert." start="00:16:55.303" video="mainVideo" id=subtitle]]
+[[!template text="Oh, duh. So I had to add" start="00:16:59.703" video="mainVideo" id=subtitle]]
+[[!template text="this little frowny-inhibit-modes bit." start="00:17:01.636" video="mainVideo" id=subtitle]]
+[[!template text="So now there's a little custom in here." start="00:17:05.036" video="mainVideo" id=subtitle]]
+[[!template text="Right now, it just defaults to special-mode." start="00:17:06.836" video="mainVideo" id=subtitle]]
+[[!template text="I added dired myself on my config." start="00:17:09.136" video="mainVideo" id=subtitle]]
+[[!template text="I might add that as a default as well." start="00:17:12.170" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to think about it." start="00:17:14.236" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And then, yeah. So now we're at version 0.3," start="00:17:15.270" video="mainVideo" id=subtitle]]
+[[!template text="that's where we're at now." start="00:17:21.536" video="mainVideo" id=subtitle]]
+[[!template text="I just updated the README with the last one." start="00:17:23.470" video="mainVideo" id=subtitle]]
+[[!template text="Basically, lots of functionality," start="00:17:26.070" video="mainVideo" id=subtitle]]
+[[!template text="plus this frowny-inhibit-mode," start="00:17:28.603" video="mainVideo" id=subtitle]]
+[[!template text="and yeah, now it is just..." start="00:17:30.303" video="mainVideo" id=subtitle]]
+[[!template text="This is it. This is the whole thing" start="00:17:32.836" video="mainVideo" id=subtitle]]
+[[!template text="right here. It's pretty short." start="00:17:34.503" video="mainVideo" id=subtitle]]
+[[!template text="I think it's a total of 113 lines." start="00:17:36.736" video="mainVideo" id=subtitle]]
+[[!template text="But you know what, it's got..." start="00:17:39.103" video="mainVideo" id=subtitle]]
+[[!template text="It's useful for people," start="00:17:42.203" video="mainVideo" id=subtitle]]
+[[!template text="and it's something where" start="00:17:43.803" video="mainVideo" id=subtitle]]
+[[!template text="I never thought I would write" start="00:17:45.136" video="mainVideo" id=subtitle]]
+[[!template text="software that people would use." start="00:17:47.770" video="mainVideo" id=subtitle]]
+[[!template text="As I said, I'm not a programmer." start="00:17:49.470" video="mainVideo" id=subtitle]]
+[[!template text="I'm just this guy." start="00:17:51.136" video="mainVideo" id=subtitle]]
+[[!template text="I like using Emacs" start="00:17:54.003" video="mainVideo" id=subtitle]]
+[[!template text="because I'm kind of a nerd." start="00:17:55.070" video="mainVideo" id=subtitle]]
+[[!template text="I like tinkering around" start="00:17:56.103" video="mainVideo" id=subtitle]]
+[[!template text="and doing things the hard way." start="00:17:57.436" video="mainVideo" id=subtitle]]
+[[!template text="I don't... I could use Microsoft Word." start="00:17:58.436" video="mainVideo" id=subtitle]]
+[[!template text="I should. I was trying to" start="00:18:02.570" video="mainVideo" id=subtitle]]
+[[!template text="write this presentation up" start="00:18:04.136" video="mainVideo" id=subtitle]]
+[[!template text="and my wife said, &quot;Why don't you just" start="00:18:06.136" video="mainVideo" id=subtitle]]
+[[!template text="write it in Google Docs?&quot;" start="00:18:07.500" video="mainVideo" id=subtitle]]
+[[!template text="And I said, &quot;I don't want to.&quot;" start="00:18:08.903" video="mainVideo" id=subtitle]]
+[[!template text="I mean, that's really it." start="00:18:11.503" video="mainVideo" id=subtitle]]
+[[!template text="Isn't that why we're all here?" start="00:18:13.036" video="mainVideo" id=subtitle]]
+[[!template text="So yeah, you know," start="00:18:15.036" video="mainVideo" id=subtitle]]
+[[!template text="so anyway, that's the story about frowny" start="00:18:18.936" video="mainVideo" id=subtitle]]
+[[!template text="That's the story about me," start="00:18:21.003" video="mainVideo" id=subtitle]]
+[[!template text="my journey to Emacs," start="00:18:22.270" video="mainVideo" id=subtitle]]
+[[!template text="my journey to this conference," start="00:18:25.436" video="mainVideo" id=subtitle]]
+[[!template text="and the journey of this package." start="00:18:27.136" video="mainVideo" id=subtitle]]
+[[!template text="I think it's about done." start="00:18:30.636" video="mainVideo" id=subtitle]]
+[[!template text="I'm not sure what else needs to go in there." start="00:18:32.536" video="mainVideo" id=subtitle]]
+[[!template new="1" text="If you have any suggestions," start="00:18:36.136" video="mainVideo" id=subtitle]]
+[[!template text="pull requests, comments," start="00:18:38.103" video="mainVideo" id=subtitle]]
+[[!template text="there's a GitHub right here," start="00:18:39.803" video="mainVideo" id=subtitle]]
+[[!template text="frowny.el." start="00:18:43.370" video="mainVideo" id=subtitle]]
+[[!template text="Let's see if I can pull it up." start="00:18:45.436" video="mainVideo" id=subtitle]]
+[[!template text="frowny.el." start="00:18:49.236" video="mainVideo" id=subtitle]]
+[[!template text="I'll put it on (inaudible)." start="00:18:52.370" video="mainVideo" id=subtitle]]
+[[!template text="That's something I still don't understand." start="00:18:55.236" video="mainVideo" id=subtitle]]
+[[!template text="Packages, the whole keywords thing..." start="00:18:57.336" video="mainVideo" id=subtitle]]
+[[!template text="I'm still confused on that." start="00:18:59.203" video="mainVideo" id=subtitle]]
+[[!template text="But yeah. Just requires Emacs 24." start="00:19:00.236" video="mainVideo" id=subtitle]]
+[[!template text="That's it. So anyway," start="00:19:04.636" video="mainVideo" id=subtitle]]
+[[!template text="I'm not sure if I'm going to be" start="00:19:09.970" video="mainVideo" id=subtitle]]
+[[!template text="live for questions." start="00:19:12.470" video="mainVideo" id=subtitle]]
+[[!template text="I'm recording this, obviously," start="00:19:13.803" video="mainVideo" id=subtitle]]
+[[!template text="a bit before," start="00:19:14.736" video="mainVideo" id=subtitle]]
+[[!template text="and I will be travelling that weekend," start="00:19:15.903" video="mainVideo" id=subtitle]]
+[[!template text="this weekend, when you're watching this," start="00:19:18.636" video="mainVideo" id=subtitle]]
+[[!template text="so I'm going to... But right now," start="00:19:20.303" video="mainVideo" id=subtitle]]
+[[!template text="I'm recording it, I'm not 100% sure." start="00:19:25.236" video="mainVideo" id=subtitle]]
+[[!template text="I will know obviously by then." start="00:19:26.836" video="mainVideo" id=subtitle]]
+[[!template text="So maybe I'll talk to you" start="00:19:28.636" video="mainVideo" id=subtitle]]
+[[!template text="in a moment, maybe not." start="00:19:30.003" video="mainVideo" id=subtitle]]
+[[!template text="Otherwise, have a" start="00:19:31.070" video="mainVideo" id=subtitle]]
+[[!template text="great conference, everybody." start="00:19:33.300" video="mainVideo" id=subtitle]]
+[[!template text="I'm really excited to see everyone's talks." start="00:19:34.336" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/gregorian.md b/2021/captions/gregorian.md
new file mode 100644
index 00000000..9d382bc4
--- /dev/null
+++ b/2021/captions/gregorian.md
@@ -0,0 +1,277 @@
+<a name="transcript"></a>
+
+# Transcript
+
+[[!template text="Hello, everyone, my name is Spencer," start="00:00:00.240" video="mainVideo" id=subtitle]]
+[[!template text="and today I'm going to tell you all" start="00:00:02.320" video="mainVideo" id=subtitle]]
+[[!template text="a little bit about how to typeset" start="00:00:03.600" video="mainVideo" id=subtitle]]
+[[!template text="Gregorian chant sheet music" start="00:00:05.296" video="mainVideo" id=subtitle]]
+[[!template text="using Emacs and a tool called Gregorio." start="00:00:06.640" video="mainVideo" id=subtitle]]
+[[!template text="Now I expect many, if not all, of you" start="00:00:10.000" video="mainVideo" id=subtitle]]
+[[!template text="are unfamiliar with Gregorio," start="00:00:12.160" video="mainVideo" id=subtitle]]
+[[!template text="so we'll start off" start="00:00:14.000" video="mainVideo" id=subtitle]]
+[[!template text="with a brief overview of the tool" start="00:00:14.719" video="mainVideo" id=subtitle]]
+[[!template text="and the appropriate syntax." start="00:00:16.240" video="mainVideo" id=subtitle]]
+[[!template text="Next, I'll show you how I've automated" start="00:00:18.080" video="mainVideo" id=subtitle]]
+[[!template text="some of the workflow" start="00:00:19.760" video="mainVideo" id=subtitle]]
+[[!template text="using some Emacs Lisp functions" start="00:00:20.720" video="mainVideo" id=subtitle]]
+[[!template text="which I've slowly been turning into" start="00:00:22.480" video="mainVideo" id=subtitle]]
+[[!template text="a package called `gregorian-mode`." start="00:00:23.920" video="mainVideo" id=subtitle]]
+[[!template text="This will include" start="00:00:26.080" video="mainVideo" id=subtitle]]
+[[!template text="some live typesetting examples" start="00:00:26.720" video="mainVideo" id=subtitle]]
+[[!template text="to give you a better idea" start="00:00:28.320" video="mainVideo" id=subtitle]]
+[[!template text="of how this all works." start="00:00:29.359" video="mainVideo" id=subtitle]]
+[[!template text="Finally, I'll share" start="00:00:31.279" video="mainVideo" id=subtitle]]
+[[!template text="some information with you" start="00:00:32.079" video="mainVideo" id=subtitle]]
+[[!template text="about how you can contribute" start="00:00:33.120" video="mainVideo" id=subtitle]]
+[[!template text="to the package if you'd like," start="00:00:34.480" video="mainVideo" id=subtitle]]
+[[!template text="and how you can learn more about" start="00:00:35.680" video="mainVideo" id=subtitle]]
+[[!template text="both Gregorio and `gregorian-mode`." start="00:00:38.000" video="mainVideo" id=subtitle]]
+[[!template text="And of course, all of the examples" start="00:00:39.600" video="mainVideo" id=subtitle]]
+[[!template text="from this presentation today" start="00:00:41.120" video="mainVideo" id=subtitle]]
+[[!template text="have been available online" start="00:00:42.320" video="mainVideo" id=subtitle]]
+[[!template text="so you can review them" start="00:00:44.079" video="mainVideo" id=subtitle]]
+[[!template text="all at your own pace." start="00:00:44.879" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Gregorio is a tool that takes" start="00:00:46.800" video="mainVideo" id=subtitle]]
+[[!template text="a `gabc` text file and compiles it" start="00:00:49.440" video="mainVideo" id=subtitle]]
+[[!template text="into a LaTeX document." start="00:00:51.500" video="mainVideo" id=subtitle]]
+[[!template text="Gregorio is included by default" start="00:00:52.879" video="mainVideo" id=subtitle]]
+[[!template text="with many LaTeX distributions," start="00:00:54.719" video="mainVideo" id=subtitle]]
+[[!template text="so you may already have it installed" start="00:00:56.559" video="mainVideo" id=subtitle]]
+[[!template text="on your machine if you are a user of LaTeX." start="00:00:58.079" video="mainVideo" id=subtitle]]
+[[!template text="You can see here on the left an example" start="00:01:01.120" video="mainVideo" id=subtitle]]
+[[!template text="of some input `gabc` text," start="00:01:02.879" video="mainVideo" id=subtitle]]
+[[!template text="and on the right," start="00:01:04.960" video="mainVideo" id=subtitle]]
+[[!template text="what the compiled score will look like." start="00:01:05.600" video="mainVideo" id=subtitle]]
+[[!template text="Looking at the `gabc`, we can see that" start="00:01:08.080" video="mainVideo" id=subtitle]]
+[[!template text="it starts with the clef in parentheses," start="00:01:10.080" video="mainVideo" id=subtitle]]
+[[!template text="and then following this" start="00:01:12.640" video="mainVideo" id=subtitle]]
+[[!template text="are the syllables of the lyrics" start="00:01:13.600" video="mainVideo" id=subtitle]]
+[[!template text="and the corresponding notes in parentheses." start="00:01:15.119" video="mainVideo" id=subtitle]]
+[[!template text="For example, you can see that &quot;EX,&quot;" start="00:01:18.080" video="mainVideo" id=subtitle]]
+[[!template text="the first syllable," start="00:01:21.119" video="mainVideo" id=subtitle]]
+[[!template text="corresponds to a `d` note" start="00:01:22.240" video="mainVideo" id=subtitle]]
+[[!template text="in parentheses there," start="00:01:24.080" video="mainVideo" id=subtitle]]
+[[!template text="and if you look at the right," start="00:01:25.920" video="mainVideo" id=subtitle]]
+[[!template text="you can easily verify that" start="00:01:27.119" video="mainVideo" id=subtitle]]
+[[!template text="in the output." start="00:01:28.560" video="mainVideo" id=subtitle]]
+[[!template text="Now the last thing" start="00:01:30.320" video="mainVideo" id=subtitle]]
+[[!template text="that I want to note here" start="00:01:31.040" video="mainVideo" id=subtitle]]
+[[!template text="is that `gabc` files are all plain text," start="00:01:31.680" video="mainVideo" id=subtitle]]
+[[!template text="meaning they can easily be shared" start="00:01:34.079" video="mainVideo" id=subtitle]]
+[[!template text="and can easily be tracked using" start="00:01:36.320" video="mainVideo" id=subtitle]]
+[[!template text="your favorite version-control software." start="00:01:38.000" video="mainVideo" id=subtitle]]
+[[!template text="Since these are plain text," start="00:01:40.400" video="mainVideo" id=subtitle]]
+[[!template text="it's really pretty easy to integrate" start="00:01:41.920" video="mainVideo" id=subtitle]]
+[[!template text="them into your existing workflows." start="00:01:43.520" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The `gabc` format also supports" start="00:01:46.079" video="mainVideo" id=subtitle]]
+[[!template text="many optional header fields" start="00:01:48.079" video="mainVideo" id=subtitle]]
+[[!template text="for adding more information" start="00:01:49.439" video="mainVideo" id=subtitle]]
+[[!template text="about your score." start="00:01:50.560" video="mainVideo" id=subtitle]]
+[[!template text="You can see all the supported fields" start="00:01:51.920" video="mainVideo" id=subtitle]]
+[[!template text="listed below, along with" start="00:01:53.520" video="mainVideo" id=subtitle]]
+[[!template text="some placeholder text." start="00:01:54.799" video="mainVideo" id=subtitle]]
+[[!template text="These fields are placed" start="00:01:56.479" video="mainVideo" id=subtitle]]
+[[!template text="at the top of a file" start="00:01:57.360" video="mainVideo" id=subtitle]]
+[[!template text="and are separated from the actual score" start="00:01:58.399" video="mainVideo" id=subtitle]]
+[[!template text="by the two percent symbols" start="00:02:01.000" video="mainVideo" id=subtitle]]
+[[!template text="seen at the bottom." start="00:02:01.439" video="mainVideo" id=subtitle]]
+[[!template text="After these symbols, you would have the" start="00:02:03.000" video="mainVideo" id=subtitle]]
+[[!template text="lines of your score," start="00:02:04.399" video="mainVideo" id=subtitle]]
+[[!template text="similar to what you saw" start="00:02:05.600" video="mainVideo" id=subtitle]]
+[[!template text="on the previous slide." start="00:02:07.080" video="mainVideo" id=subtitle]]
+[[!template new="1" text="As I said earlier," start="00:02:08.560" video="mainVideo" id=subtitle]]
+[[!template text="I've automated some of" start="00:02:09.599" video="mainVideo" id=subtitle]]
+[[!template text="the score build steps using Emacs Lisp," start="00:02:10.560" video="mainVideo" id=subtitle]]
+[[!template text="and have started turning them" start="00:02:12.959" video="mainVideo" id=subtitle]]
+[[!template text="into a package called `gregorian-mode`." start="00:02:14.000" video="mainVideo" id=subtitle]]
+[[!template text="This is my first Emacs package," start="00:02:16.480" video="mainVideo" id=subtitle]]
+[[!template text="so the code is rather messy at the moment," start="00:02:18.160" video="mainVideo" id=subtitle]]
+[[!template text="and for the most part is just a wrapper" start="00:02:20.400" video="mainVideo" id=subtitle]]
+[[!template text="around the Gregorio build process." start="00:02:22.160" video="mainVideo" id=subtitle]]
+[[!template text="However, I have made some" start="00:02:24.319" video="mainVideo" id=subtitle]]
+[[!template text="quality-of-life improvements" start="00:02:25.536" video="mainVideo" id=subtitle]]
+[[!template text="to the score writing," start="00:02:26.720" video="mainVideo" id=subtitle]]
+[[!template text="and have some more planned for the future." start="00:02:27.920" video="mainVideo" id=subtitle]]
+[[!template text="You'll get to see some of that" start="00:02:30.239" video="mainVideo" id=subtitle]]
+[[!template text="in some live examples" start="00:02:31.360" video="mainVideo" id=subtitle]]
+[[!template text="in just a little bit." start="00:02:32.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="This package is not currently on MELPA" start="00:02:34.319" video="mainVideo" id=subtitle]]
+[[!template text="at the time of recording," start="00:02:36.000" video="mainVideo" id=subtitle]]
+[[!template text="so if you want it," start="00:02:37.760" video="mainVideo" id=subtitle]]
+[[!template text="you will have to clone it manually" start="00:02:38.640" video="mainVideo" id=subtitle]]
+[[!template text="from GitHub, but it is planned" start="00:02:40.000" video="mainVideo" id=subtitle]]
+[[!template text="to be on MELPA in the near future." start="00:02:41.920" video="mainVideo" id=subtitle]]
+[[!template text="It just needs to go through" start="00:02:44.080" video="mainVideo" id=subtitle]]
+[[!template text="a little more rigorous cleanup" start="00:02:44.959" video="mainVideo" id=subtitle]]
+[[!template text="and testing." start="00:02:46.400" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now that we've covered the basics," start="00:02:48.640" video="mainVideo" id=subtitle]]
+[[!template text="let's take a look at an actual example." start="00:02:50.400" video="mainVideo" id=subtitle]]
+[[!template text="In this example, I'm assuming that" start="00:02:52.560" video="mainVideo" id=subtitle]]
+[[!template text="my `gregorian-mode` package is installed." start="00:02:54.319" video="mainVideo" id=subtitle]]
+[[!template text="However, there is nothing in these steps" start="00:02:56.480" video="mainVideo" id=subtitle]]
+[[!template text="that cannot be done manually" start="00:02:57.920" video="mainVideo" id=subtitle]]
+[[!template text="by just following the official" start="00:02:59.200" video="mainVideo" id=subtitle]]
+[[!template text="Gregorio documentation." start="00:03:01.120" video="mainVideo" id=subtitle]]
+[[!template text="So if you don't want to use a package," start="00:03:02.480" video="mainVideo" id=subtitle]]
+[[!template text="you can do all of this pretty easily" start="00:03:04.000" video="mainVideo" id=subtitle]]
+[[!template text="on your own just by following" start="00:03:05.840" video="mainVideo" id=subtitle]]
+[[!template text="their documentation." start="00:03:07.280" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So first we'll open up Emacs," start="00:03:10.000" video="mainVideo" id=subtitle]]
+[[!template text="and in my case," start="00:03:11.680" video="mainVideo" id=subtitle]]
+[[!template text="I'm using the GUI version." start="00:03:12.480" video="mainVideo" id=subtitle]]
+[[!template text="So now that Emacs is open, we can call" start="00:03:14.560" video="mainVideo" id=subtitle]]
+[[!template text="the function `gregorian-create-new-gabc`," start="00:03:16.640" video="mainVideo" id=subtitle]]
+[[!template text="and this will prompt us for a file name." start="00:03:21.440" video="mainVideo" id=subtitle]]
+[[!template text="So we need to pick out a name" start="00:03:23.680" video="mainVideo" id=subtitle]]
+[[!template text="for our new score." start="00:03:25.599" video="mainVideo" id=subtitle]]
+[[!template text="So I think I'm going to go ahead" start="00:03:26.799" video="mainVideo" id=subtitle]]
+[[!template text="and name ours `emacsconf2021`." start="00:03:28.239" video="mainVideo" id=subtitle]]
+[[!template text="So you can see here that we now have" start="00:03:33.280" video="mainVideo" id=subtitle]]
+[[!template text="a new `gabc` file with all of the" start="00:03:34.959" video="mainVideo" id=subtitle]]
+[[!template text="optional header fields added," start="00:03:36.879" video="mainVideo" id=subtitle]]
+[[!template text="and we can keep whichever of these" start="00:03:38.720" video="mainVideo" id=subtitle]]
+[[!template text="that we would like," start="00:03:40.400" video="mainVideo" id=subtitle]]
+[[!template text="and we can modify them as needed." start="00:03:41.120" video="mainVideo" id=subtitle]]
+[[!template text="So for right now, all I'm going to change" start="00:03:43.200" video="mainVideo" id=subtitle]]
+[[!template text="is this commentary; I'm going to update" start="00:03:45.360" video="mainVideo" id=subtitle]]
+[[!template text="this source of words to `emacsconf`," start="00:03:47.360" video="mainVideo" id=subtitle]]
+[[!template text="and then at the bottom here," start="00:03:52.560" video="mainVideo" id=subtitle]]
+[[!template text="this is where we'd go ahead" start="00:03:53.760" video="mainVideo" id=subtitle]]
+[[!template text="and add our score." start="00:03:55.040" video="mainVideo" id=subtitle]]
+[[!template text="So I don't have time today to typeset" start="00:03:56.959" video="mainVideo" id=subtitle]]
+[[!template text="an entire score, and I think that would" start="00:03:58.799" video="mainVideo" id=subtitle]]
+[[!template text="probably be rather boring" start="00:04:01.040" video="mainVideo" id=subtitle]]
+[[!template text="for most of you to watch," start="00:04:02.239" video="mainVideo" id=subtitle]]
+[[!template text="so I'll just demonstrate very briefly" start="00:04:03.760" video="mainVideo" id=subtitle]]
+[[!template text="with a few syllables and notes here." start="00:04:05.680" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so now that we have our first few" start="00:04:15.840" video="mainVideo" id=subtitle]]
+[[!template text="syllables and notes down, let's take a" start="00:04:17.680" video="mainVideo" id=subtitle]]
+[[!template text="look at what our score actually looks" start="00:04:19.840" video="mainVideo" id=subtitle]]
+[[!template text="like so far." start="00:04:21.759" video="mainVideo" id=subtitle]]
+[[!template text="So in order to do this, we're going to" start="00:04:23.520" video="mainVideo" id=subtitle]]
+[[!template text="call the function `gregorian-build`," start="00:04:25.040" video="mainVideo" id=subtitle]]
+[[!template text="and what this function does is" start="00:04:29.600" video="mainVideo" id=subtitle]]
+[[!template text="it takes this score" start="00:04:31.199" video="mainVideo" id=subtitle]]
+[[!template text="and creates a LaTeX file for it" start="00:04:32.320" video="mainVideo" id=subtitle]]
+[[!template text="and then goes ahead and compiles it" start="00:04:33.680" video="mainVideo" id=subtitle]]
+[[!template text="into a PDF file that we can actually" start="00:04:36.080" video="mainVideo" id=subtitle]]
+[[!template text="take a look at." start="00:04:38.160" video="mainVideo" id=subtitle]]
+[[!template text="And this does take a few seconds to run..." start="00:04:39.840" video="mainVideo" id=subtitle]]
+[[!template text="and there it goes..." start="00:04:42.479" video="mainVideo" id=subtitle]]
+[[!template text="so we can see here we have a new buffer" start="00:04:44.320" video="mainVideo" id=subtitle]]
+[[!template text="with all of the output" start="00:04:47.040" video="mainVideo" id=subtitle]]
+[[!template text="from that build process," start="00:04:48.560" video="mainVideo" id=subtitle]]
+[[!template text="but what we really care about" start="00:04:50.320" video="mainVideo" id=subtitle]]
+[[!template text="is that PDF." start="00:04:51.840" video="mainVideo" id=subtitle]]
+[[!template text="So opening that up, you can see" start="00:04:56.080" video="mainVideo" id=subtitle]]
+[[!template text="we have a very short score." start="00:04:58.479" video="mainVideo" id=subtitle]]
+[[!template text="So far we haven't done a whole lot," start="00:05:00.560" video="mainVideo" id=subtitle]]
+[[!template text="but if you go ahead and compare the" start="00:05:02.320" video="mainVideo" id=subtitle]]
+[[!template text="score on the right" start="00:05:03.919" video="mainVideo" id=subtitle]]
+[[!template text="with the file on the left," start="00:05:05.000" video="mainVideo" id=subtitle]]
+[[!template text="you can really pretty clearly see that" start="00:05:06.479" video="mainVideo" id=subtitle]]
+[[!template text="those are, in fact, the lyrics" start="00:05:08.080" video="mainVideo" id=subtitle]]
+[[!template text="that we wrote." start="00:05:10.080" video="mainVideo" id=subtitle]]
+[[!template text="You can see at the top right there," start="00:05:11.199" video="mainVideo" id=subtitle]]
+[[!template text="the source has, in fact," start="00:05:13.280" video="mainVideo" id=subtitle]]
+[[!template text="changed to `emacsconf`" start="00:05:14.300" video="mainVideo" id=subtitle]]
+[[!template text="so at this point, we could go ahead" start="00:05:16.000" video="mainVideo" id=subtitle]]
+[[!template text="and just keep adding more lines," start="00:05:18.240" video="mainVideo" id=subtitle]]
+[[!template text="more notes, and so on," start="00:05:20.000" video="mainVideo" id=subtitle]]
+[[!template text="and we would end up with" start="00:05:22.240" video="mainVideo" id=subtitle]]
+[[!template text="a completed score." start="00:05:24.080" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now this process is great and all," start="00:05:25.919" video="mainVideo" id=subtitle]]
+[[!template text="but as you can imagine," start="00:05:27.919" video="mainVideo" id=subtitle]]
+[[!template text="more complex `gabc` files" start="00:05:29.120" video="mainVideo" id=subtitle]]
+[[!template text="can quickly become pretty difficult" start="00:05:30.880" video="mainVideo" id=subtitle]]
+[[!template text="to read with the notes and the syllables" start="00:05:32.720" video="mainVideo" id=subtitle]]
+[[!template text="all bunched together." start="00:05:34.479" video="mainVideo" id=subtitle]]
+[[!template text="So to get around this, I've been playing" start="00:05:36.080" video="mainVideo" id=subtitle]]
+[[!template text="around with an alternative format" start="00:05:37.840" video="mainVideo" id=subtitle]]
+[[!template text="called a `greg` file." start="00:05:39.840" video="mainVideo" id=subtitle]]
+[[!template text="I have an example of that" start="00:05:41.000" video="mainVideo" id=subtitle]]
+[[!template text="for you right here." start="00:05:42.160" video="mainVideo" id=subtitle]]
+[[!template text="So here we can see there are" start="00:05:43.919" video="mainVideo" id=subtitle]]
+[[!template text="two files side-by-side:" start="00:05:45.919" video="mainVideo" id=subtitle]]
+[[!template text="on the left, we have a `gabc` file," start="00:05:48.000" video="mainVideo" id=subtitle]]
+[[!template text="and then on the right," start="00:05:50.000" video="mainVideo" id=subtitle]]
+[[!template text="we have a `greg` file," start="00:05:51.022" video="mainVideo" id=subtitle]]
+[[!template text="both of them for the same score." start="00:05:52.000" video="mainVideo" id=subtitle]]
+[[!template text="Now in my opinion, the `gabc` on the left" start="00:05:53.360" video="mainVideo" id=subtitle]]
+[[!template text="is really rather difficult to read" start="00:05:55.600" video="mainVideo" id=subtitle]]
+[[!template text="at a glance." start="00:05:57.199" video="mainVideo" id=subtitle]]
+[[!template text="You can see there" start="00:05:58.319" video="mainVideo" id=subtitle]]
+[[!template text="the notes and the syllables" start="00:05:59.280" video="mainVideo" id=subtitle]]
+[[!template text="are really all grouped together" start="00:06:00.880" video="mainVideo" id=subtitle]]
+[[!template text="pretty tightly." start="00:06:02.160" video="mainVideo" id=subtitle]]
+[[!template text="Looking at the `greg` on the right," start="00:06:03.919" video="mainVideo" id=subtitle]]
+[[!template text="you can see that all of the" start="00:06:05.520" video="mainVideo" id=subtitle]]
+[[!template text="header information is the same," start="00:06:06.560" video="mainVideo" id=subtitle]]
+[[!template text="but the score itself" start="00:06:08.479" video="mainVideo" id=subtitle]]
+[[!template text="is split across several lines." start="00:06:09.680" video="mainVideo" id=subtitle]]
+[[!template text="The idea here is that" start="00:06:11.840" video="mainVideo" id=subtitle]]
+[[!template text="the notes and the corresponding syllables" start="00:06:13.039" video="mainVideo" id=subtitle]]
+[[!template text="will be on separate lines," start="00:06:15.039" video="mainVideo" id=subtitle]]
+[[!template text="one after the other," start="00:06:16.560" video="mainVideo" id=subtitle]]
+[[!template text="to help improve readability." start="00:06:17.600" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now the `greg` file format" start="00:06:20.639" video="mainVideo" id=subtitle]]
+[[!template text="is still a work-in-progress." start="00:06:21.906" video="mainVideo" id=subtitle]]
+[[!template text="It's really not" start="00:06:23.800" video="mainVideo" id=subtitle]]
+[[!template text="set in stone at all," start="00:06:24.960" video="mainVideo" id=subtitle]]
+[[!template text="but already I think this is a pretty" start="00:06:27.520" video="mainVideo" id=subtitle]]
+[[!template text="substantial quality-of-life improvement," start="00:06:29.840" video="mainVideo" id=subtitle]]
+[[!template text="and already `gregorian-mode` can, in fact," start="00:06:32.560" video="mainVideo" id=subtitle]]
+[[!template text="build scores from `greg` files" start="00:06:34.720" video="mainVideo" id=subtitle]]
+[[!template text="as long as they follow the conventions" start="00:06:36.720" video="mainVideo" id=subtitle]]
+[[!template text="that you see in this file here," start="00:06:38.300" video="mainVideo" id=subtitle]]
+[[!template text="and I'm planning to have that" start="00:06:40.400" video="mainVideo" id=subtitle]]
+[[!template text="quite a bit more well-defined" start="00:06:42.560" video="mainVideo" id=subtitle]]
+[[!template text="moving forward." start="00:06:44.240" video="mainVideo" id=subtitle]]
+[[!template text="Like I said, this is really still" start="00:06:45.360" video="mainVideo" id=subtitle]]
+[[!template text="a work-in-progress." start="00:06:47.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Finally, I want to end today" start="00:06:49.520" video="mainVideo" id=subtitle]]
+[[!template text="by sharing some resources" start="00:06:51.039" video="mainVideo" id=subtitle]]
+[[!template text="where you can learn more." start="00:06:52.319" video="mainVideo" id=subtitle]]
+[[!template text="First, you can learn more about" start="00:06:53.840" video="mainVideo" id=subtitle]]
+[[!template text="the Gregorio project" start="00:06:55.039" video="mainVideo" id=subtitle]]
+[[!template text="on their official website," start="00:06:56.319" video="mainVideo" id=subtitle]]
+[[!template text="and I have the link for that" start="00:06:57.500" video="mainVideo" id=subtitle]]
+[[!template text="on this slide here," start="00:06:58.960" video="mainVideo" id=subtitle]]
+[[!template text="and this site has several detailed examples" start="00:07:00.720" video="mainVideo" id=subtitle]]
+[[!template text="and a lot of additional information" start="00:07:02.319" video="mainVideo" id=subtitle]]
+[[!template text="about the project" start="00:07:04.080" video="mainVideo" id=subtitle]]
+[[!template text="and about chant notation in general." start="00:07:05.840" video="mainVideo" id=subtitle]]
+[[!template text="It goes into much more depth" start="00:07:07.500" video="mainVideo" id=subtitle]]
+[[!template text="than what we covered in this presentation," start="00:07:09.500" video="mainVideo" id=subtitle]]
+[[!template text="and overall, it's really" start="00:07:12.000" video="mainVideo" id=subtitle]]
+[[!template text="a fantastic resource" start="00:07:13.199" video="mainVideo" id=subtitle]]
+[[!template text="for learning more about how to use" start="00:07:14.960" video="mainVideo" id=subtitle]]
+[[!template text="the Gregorio software and more about" start="00:07:16.560" video="mainVideo" id=subtitle]]
+[[!template text="the specifics of chant notation." start="00:07:19.360" video="mainVideo" id=subtitle]]
+[[!template text="Second, if you're interested in using" start="00:07:21.840" video="mainVideo" id=subtitle]]
+[[!template text="or contributing to `gregorian-mode`," start="00:07:23.680" video="mainVideo" id=subtitle]]
+[[!template text="you can check out the project on GitHub" start="00:07:25.840" video="mainVideo" id=subtitle]]
+[[!template text="with the link here on this slide." start="00:07:28.240" video="mainVideo" id=subtitle]]
+[[!template text="And if you're interested in helping out" start="00:07:30.400" video="mainVideo" id=subtitle]]
+[[!template text="in any way, feel free to open an issue," start="00:07:31.919" video="mainVideo" id=subtitle]]
+[[!template text="and we can discuss further." start="00:07:34.080" video="mainVideo" id=subtitle]]
+[[!template text="And finally, all of the examples" start="00:07:36.560" video="mainVideo" id=subtitle]]
+[[!template text="from today are also available on GitHub," start="00:07:38.160" video="mainVideo" id=subtitle]]
+[[!template text="and that's the last link on this slide," start="00:07:40.400" video="mainVideo" id=subtitle]]
+[[!template text="and you can feel free to experiment" start="00:07:42.479" video="mainVideo" id=subtitle]]
+[[!template text="with these and really just use them" start="00:07:44.160" video="mainVideo" id=subtitle]]
+[[!template text="in any way that you'd like." start="00:07:45.919" video="mainVideo" id=subtitle]]
+[[!template text="Now that's all that I had for today," start="00:07:48.560" video="mainVideo" id=subtitle]]
+[[!template text="but I do want to take a moment" start="00:07:50.319" video="mainVideo" id=subtitle]]
+[[!template text="to thank you all" start="00:07:51.360" video="mainVideo" id=subtitle]]
+[[!template text="for checking out my presentation," start="00:07:52.000" video="mainVideo" id=subtitle]]
+[[!template text="and I want to thank the organizers" start="00:07:54.160" video="mainVideo" id=subtitle]]
+[[!template text="for giving me some time" start="00:07:55.680" video="mainVideo" id=subtitle]]
+[[!template text="to speak with you all." start="00:07:56.400" video="mainVideo" id=subtitle]]
+[[!template text="I hope that this was at least" start="00:07:57.759" video="mainVideo" id=subtitle]]
+[[!template text="a little bit interesting to some of you," start="00:07:59.120" video="mainVideo" id=subtitle]]
+[[!template text="and I hope that you all enjoy" start="00:08:01.120" video="mainVideo" id=subtitle]]
+[[!template text="the rest of the conference." start="00:08:02.319" video="mainVideo" id=subtitle]]
+[[!template text="Thank you for your time today." start="00:08:02.800" video="mainVideo" id=subtitle]]
+[[!template text="captions by Hannah Miller" start="00:08:06.520" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/imaginary.md b/2021/captions/imaginary.md
new file mode 100644
index 00000000..ede0901a
--- /dev/null
+++ b/2021/captions/imaginary.md
@@ -0,0 +1,235 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hi everyone!" start="00:00:01.920" video="mainVideo" id=subtitle]]
+[[!template text="My name is Shane," start="00:00:03.280" video="mainVideo" id=subtitle]]
+[[!template text="and it's truly a real honor to be" start="00:00:04.400" video="mainVideo" id=subtitle]]
+[[!template text="able to speak at EmacsConf." start="00:00:09.679" video="mainVideo" id=subtitle]]
+[[!template text="I love Emacs. I love Emacs Lisp," start="00:00:14.480" video="mainVideo" id=subtitle]]
+[[!template text="and this is also another topic" start="00:00:16.880" video="mainVideo" id=subtitle]]
+[[!template text="that really excites me ever since" start="00:00:19.279" video="mainVideo" id=subtitle]]
+[[!template text="I got my hands on OpenAI's GPT-3." start="00:00:22.233" video="mainVideo" id=subtitle]]
+[[!template text="Six months ago, I knew that it was" start="00:00:28.160" video="mainVideo" id=subtitle]]
+[[!template text="important to research this for Emacs," start="00:00:29.920" video="mainVideo" id=subtitle]]
+[[!template text="you know, asides from being somebody" start="00:00:33.920" video="mainVideo" id=subtitle]]
+[[!template text="who never wants to leave Emacs myself," start="00:00:35.980" video="mainVideo" id=subtitle]]
+[[!template text="and I hope that…." start="00:00:39.040" video="mainVideo" id=subtitle]]
+[[!template text="Being one of the few Emacs users," start="00:00:41.440" video="mainVideo" id=subtitle]]
+[[!template text="possibly the only one that had" start="00:00:43.120" video="mainVideo" id=subtitle]]
+[[!template text="access to GPT-3 for this long," start="00:00:45.360" video="mainVideo" id=subtitle]]
+[[!template text="I hope that I can contribute." start="00:00:48.160" video="mainVideo" id=subtitle]]
+[[!template text="So, Emacs, sorry." start="00:00:52.559" video="mainVideo" id=subtitle]]
+[[!template text="Imaginary programming is…," start="00:00:55.199" video="mainVideo" id=subtitle]]
+[[!template text="it's based on prompt engineering currently," start="00:00:58.960" video="mainVideo" id=subtitle]]
+[[!template text="but it's an abstraction over" start="00:01:01.280" video="mainVideo" id=subtitle]]
+[[!template text="prompt engineering." start="00:01:02.559" video="mainVideo" id=subtitle]]
+[[!template text="You can read about prompt engineering" start="00:01:03.359" video="mainVideo" id=subtitle]]
+[[!template text="and language models," start="00:01:06.479" video="mainVideo" id=subtitle]]
+[[!template text="that's quite easy to google for." start="00:01:08.560" video="mainVideo" id=subtitle]]
+[[!template text="And imaginary programming is a subfield" start="00:01:13.040" video="mainVideo" id=subtitle]]
+[[!template text="of imaginary computing," start="00:01:15.520" video="mainVideo" id=subtitle]]
+[[!template text="which is just the larger domain" start="00:01:17.360" video="mainVideo" id=subtitle]]
+[[!template text="of employing of computing" start="00:01:19.424" video="mainVideo" id=subtitle]]
+[[!template text="that's based on imagination," start="00:01:21.420" video="mainVideo" id=subtitle]]
+[[!template text="artificial imagination," start="00:01:24.240" video="mainVideo" id=subtitle]]
+[[!template text="so, basically, dreaming up user interfaces" start="00:01:25.600" video="mainVideo" id=subtitle]]
+[[!template text="instead of…, or at least partially" start="00:01:29.920" video="mainVideo" id=subtitle]]
+[[!template text="dreaming them up." start="00:01:32.159" video="mainVideo" id=subtitle]]
+[[!template text="I suppose that it's a fringe paradigm," start="00:01:34.079" video="mainVideo" id=subtitle]]
+[[!template text="but it's extremely useful." start="00:01:41.439" video="mainVideo" id=subtitle]]
+[[!template text="Imaginary computing," start="00:01:43.759" video="mainVideo" id=subtitle]]
+[[!template text="if you're willing to call it that," start="00:01:47.759" video="mainVideo" id=subtitle]]
+[[!template text="would be what's used to" start="00:01:49.200" video="mainVideo" id=subtitle]]
+[[!template text="imagine simulations" start="00:01:51.920" video="mainVideo" id=subtitle]]
+[[!template text="for self-driving cars," start="00:01:53.413" video="mainVideo" id=subtitle]]
+[[!template text="as they're trained for example." start="00:01:54.320" video="mainVideo" id=subtitle]]
+[[!template text="But this technology finds" start="00:01:57.840" video="mainVideo" id=subtitle]]
+[[!template text="its way to the public," start="00:01:58.984" video="mainVideo" id=subtitle]]
+[[!template text="and it should be in the public domain." start="00:02:00.960" video="mainVideo" id=subtitle]]
+[[!template text="So, Demis Hassabis" start="00:02:04.880" video="mainVideo" id=subtitle]]
+[[!template text="he's the founder of DeepMind," start="00:02:06.799" video="mainVideo" id=subtitle]]
+[[!template text="and he did his Ph.D. in human imagination," start="00:02:08.959" video="mainVideo" id=subtitle]]
+[[!template text="now he's working on artificial imagination." start="00:02:12.400" video="mainVideo" id=subtitle]]
+[[!template text="So, just a couple of days ago" start="00:02:16.900" video="mainVideo" id=subtitle]]
+[[!template text="I took AlephAlpha's world model API" start="00:02:20.239" video="mainVideo" id=subtitle]]
+[[!template text="and I plugged it into Emacs's eww browser," start="00:02:25.040" video="mainVideo" id=subtitle]]
+[[!template text="and now I have a way of generating" start="00:02:28.080" video="mainVideo" id=subtitle]]
+[[!template text="text for the images instead of actually…," start="00:02:30.800" video="mainVideo" id=subtitle]]
+[[!template text="so I can stay in my text only Emacs," start="00:02:33.840" video="mainVideo" id=subtitle]]
+[[!template text="which is the way it should be." start="00:02:38.072" video="mainVideo" id=subtitle]]
+[[!template text="Intelligent NFTs, I'll leave this" start="00:02:42.560" video="mainVideo" id=subtitle]]
+[[!template text="for you guys to look at." start="00:02:45.636" video="mainVideo" id=subtitle]]
+[[!template text="Information bubbles." start="00:02:47.360" video="mainVideo" id=subtitle]]
+[[!template text="So, there's some potential bad outcomes" start="00:02:49.280" video="mainVideo" id=subtitle]]
+[[!template text="from the runaway empowering of these" start="00:02:55.360" video="mainVideo" id=subtitle]]
+[[!template text="large language models and other models" start="00:03:05.680" video="mainVideo" id=subtitle]]
+[[!template text="in commercial hands." start="00:03:08.959" video="mainVideo" id=subtitle]]
+[[!template text="It's causing information bubbles and" start="00:03:10.000" video="mainVideo" id=subtitle]]
+[[!template text="ways of controlling people." start="00:03:13.680" video="mainVideo" id=subtitle]]
+[[!template text="So, for example," start="00:03:15.680" video="mainVideo" id=subtitle]]
+[[!template text="micro tasks and stuff that…," start="00:03:19.440" video="mainVideo" id=subtitle]]
+[[!template text="furthermore just automating away," start="00:03:21.680" video="mainVideo" id=subtitle]]
+[[!template text="or abstracting away the role" start="00:03:23.650" video="mainVideo" id=subtitle]]
+[[!template text="of a programmer," start="00:03:26.000" video="mainVideo" id=subtitle]]
+[[!template text="and the automating more and more" start="00:03:27.680" video="mainVideo" id=subtitle]]
+[[!template text="increasingly abstract tasks," start="00:03:29.360" video="mainVideo" id=subtitle]]
+[[!template text="and I think the solution is to" start="00:03:32.319" video="mainVideo" id=subtitle]]
+[[!template text="decentralize and break up these tasks." start="00:03:33.659" video="mainVideo" id=subtitle]]
+[[!template text="I have a potential way of doing that," start="00:03:36.319" video="mainVideo" id=subtitle]]
+[[!template text="but firstly I'll talk about" start="00:03:39.120" video="mainVideo" id=subtitle]]
+[[!template text="the imaginary web briefly" start="00:03:40.693" video="mainVideo" id=subtitle]]
+[[!template text="because the thing about these" start="00:03:42.400" video="mainVideo" id=subtitle]]
+[[!template text="language models is," start="00:03:44.720" video="mainVideo" id=subtitle]]
+[[!template text="they can replace basically" start="00:03:48.000" video="mainVideo" id=subtitle]]
+[[!template text="everything on the internet." start="00:03:49.280" video="mainVideo" id=subtitle]]
+[[!template text="So, like, replace your Wikipedia," start="00:03:52.159" video="mainVideo" id=subtitle]]
+[[!template text="or Stack Overflow," start="00:03:55.280" video="mainVideo" id=subtitle]]
+[[!template text="replace conversation if you want it with," start="00:03:57.680" video="mainVideo" id=subtitle]]
+[[!template text="from real people to chatbots instead," start="00:04:01.519" video="mainVideo" id=subtitle]]
+[[!template text="replace basically anything there's" start="00:04:05.920" video="mainVideo" id=subtitle]]
+[[!template text="a website for." start="00:04:13.120" video="mainVideo" id=subtitle]]
+[[!template text="And that means that rich media has gone" start="00:04:14.959" video="mainVideo" id=subtitle]]
+[[!template text="from becoming images and video" start="00:04:17.280" video="mainVideo" id=subtitle]]
+[[!template text="and even from paywalls" start="00:04:20.639" video="mainVideo" id=subtitle]]
+[[!template text="now into intelligent and truthful," start="00:04:22.560" video="mainVideo" id=subtitle]]
+[[!template text="because generating fictional websites" start="00:04:26.400" video="mainVideo" id=subtitle]]
+[[!template text="is going to become a very easy thing to do," start="00:04:29.520" video="mainVideo" id=subtitle]]
+[[!template text="and actually the best way to do it," start="00:04:31.919" video="mainVideo" id=subtitle]]
+[[!template text="and the most useful way to do it," start="00:04:35.120" video="mainVideo" id=subtitle]]
+[[!template text="so then you need a source of truth." start="00:04:37.440" video="mainVideo" id=subtitle]]
+[[!template text="The imaginary web is a thing," start="00:04:40.560" video="mainVideo" id=subtitle]]
+[[!template text="imaginary interpreters are a thing," start="00:04:43.759" video="mainVideo" id=subtitle]]
+[[!template text="so you imagine your interpreter," start="00:04:46.000" video="mainVideo" id=subtitle]]
+[[!template text="or you overlay prompting on top of" start="00:04:50.000" video="mainVideo" id=subtitle]]
+[[!template text="a real interpreter to see" start="00:04:53.759" video="mainVideo" id=subtitle]]
+[[!template text="what you might want to do" start="00:04:55.520" video="mainVideo" id=subtitle]]
+[[!template text="in an interpreter," start="00:04:57.440" video="mainVideo" id=subtitle]]
+[[!template text="and what you might want to say to somebody" start="00:04:58.800" video="mainVideo" id=subtitle]]
+[[!template text="if you're talking to them." start="00:05:01.039" video="mainVideo" id=subtitle]]
+[[!template text="If you're inside, say," start="00:05:01.919" video="mainVideo" id=subtitle]]
+[[!template text="ERC in Emacs, an IRC client," start="00:05:03.199" video="mainVideo" id=subtitle]]
+[[!template text="and you prompt after somebody" start="00:05:05.840" video="mainVideo" id=subtitle]]
+[[!template text="says something," start="00:05:07.440" video="mainVideo" id=subtitle]]
+[[!template text="then the prompt will probably suggest," start="00:05:08.479" video="mainVideo" id=subtitle]]
+[[!template text="what you might say in return," start="00:05:10.400" video="mainVideo" id=subtitle]]
+[[!template text="and then you can prompt like a multiverse," start="00:05:13.120" video="mainVideo" id=subtitle]]
+[[!template text="and you can pick from them." start="00:05:15.199" video="mainVideo" id=subtitle]]
+[[!template text="There's a bunch of crazy utilities" start="00:05:18.800" video="mainVideo" id=subtitle]]
+[[!template text="for these language models." start="00:05:23.912" video="mainVideo" id=subtitle]]
+[[!template text="Paracosm vs Metaverse." start="00:05:26.560" video="mainVideo" id=subtitle]]
+[[!template text="So, Mark Zuck wants you to live in" start="00:05:28.960" video="mainVideo" id=subtitle]]
+[[!template text="his virtual reality as defined by him," start="00:05:30.828" video="mainVideo" id=subtitle]]
+[[!template text="and he's going to do it" start="00:05:34.320" video="mainVideo" id=subtitle]]
+[[!template text="by using these models to make you" start="00:05:36.160" video="mainVideo" id=subtitle]]
+[[!template text="a fictional world that you can live in." start="00:05:40.539" video="mainVideo" id=subtitle]]
+[[!template text="You can do that," start="00:05:42.639" video="mainVideo" id=subtitle]]
+[[!template text="or you can use them yourself," start="00:05:43.280" video="mainVideo" id=subtitle]]
+[[!template text="and you build your own Paracosm." start="00:05:46.400" video="mainVideo" id=subtitle]]
+[[!template text="And I think that's an important" start="00:05:50.000" video="mainVideo" id=subtitle]]
+[[!template text="ability to be able to have," start="00:05:51.440" video="mainVideo" id=subtitle]]
+[[!template text="otherwise we will be like the borg," start="00:05:53.440" video="mainVideo" id=subtitle]]
+[[!template text="and we'll be connected to Mark Zuckerberg." start="00:05:56.880" video="mainVideo" id=subtitle]]
+[[!template text="Truth is a hot topic." start="00:06:01.520" video="mainVideo" id=subtitle]]
+[[!template text="So, the way that I think we should do this" start="00:06:06.400" video="mainVideo" id=subtitle]]
+[[!template text="to decentralize the language models is," start="00:06:08.880" video="mainVideo" id=subtitle]]
+[[!template text="to use Structuralism." start="00:06:10.720" video="mainVideo" id=subtitle]]
+[[!template text="Universal grammar," start="00:06:13.199" video="mainVideo" id=subtitle]]
+[[!template text="template metaprogramming, and GPT-3" start="00:06:19.600" video="mainVideo" id=subtitle]]
+[[!template text="what do they have in common?" start="00:06:21.680" video="mainVideo" id=subtitle]]
+[[!template text="Well, you have some kind of basis," start="00:06:23.919" video="mainVideo" id=subtitle]]
+[[!template text="like, you train your GPT-3," start="00:06:27.759" video="mainVideo" id=subtitle]]
+[[!template text="and then you do all your prompting" start="00:06:31.408" video="mainVideo" id=subtitle]]
+[[!template text="on top of it." start="00:06:32.663" video="mainVideo" id=subtitle]]
+[[!template text="Like a person is born with this grammar," start="00:06:33.360" video="mainVideo" id=subtitle]]
+[[!template text="and then they quickly learn language," start="00:06:35.840" video="mainVideo" id=subtitle]]
+[[!template text="and like with C++ templates," start="00:06:37.759" video="mainVideo" id=subtitle]]
+[[!template text="you pre-process and then" start="00:06:40.240" video="mainVideo" id=subtitle]]
+[[!template text="the run time runs on that." start="00:06:42.080" video="mainVideo" id=subtitle]]
+[[!template text="So, anyway, that was a slide." start="00:06:44.800" video="mainVideo" id=subtitle]]
+[[!template text="Structuralism." start="00:06:48.000" video="mainVideo" id=subtitle]]
+[[!template text="I think you can decompile…," start="00:06:50.479" video="mainVideo" id=subtitle]]
+[[!template text="think you can break," start="00:06:52.080" video="mainVideo" id=subtitle]]
+[[!template text="so you can decompose" start="00:06:52.880" video="mainVideo" id=subtitle]]
+[[!template text="the language models into units," start="00:06:53.840" video="mainVideo" id=subtitle]]
+[[!template text="but those units won't look like neurons," start="00:06:55.840" video="mainVideo" id=subtitle]]
+[[!template text="they would look like these," start="00:06:57.759" video="mainVideo" id=subtitle]]
+[[!template text="and you put them onto a blockchain." start="00:06:59.440" video="mainVideo" id=subtitle]]
+[[!template text="But you can look at that later" start="00:07:01.759" video="mainVideo" id=subtitle]]
+[[!template text="if you want anyway." start="00:07:02.744" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to skip straight to ilambda," start="00:07:03.840" video="mainVideo" id=subtitle]]
+[[!template text="running out of time." start="00:07:07.199" video="mainVideo" id=subtitle]]
+[[!template text="I'll just quickly show you" start="00:07:09.919" video="mainVideo" id=subtitle]]
+[[!template text="the ilambda primitive in ilambda." start="00:07:12.240" video="mainVideo" id=subtitle]]
+[[!template text="So, it evaluates instead of run," start="00:07:15.199" video="mainVideo" id=subtitle]]
+[[!template text="for example, here's the reduced function," start="00:07:19.199" video="mainVideo" id=subtitle]]
+[[!template text="and you've defined your" start="00:07:21.680" video="mainVideo" id=subtitle]]
+[[!template text="imaginary lambda here." start="00:07:22.632" video="mainVideo" id=subtitle]]
+[[!template text="And it doesn't have a body," start="00:07:25.520" video="mainVideo" id=subtitle]]
+[[!template text="it's just got the comment" start="00:07:26.560" video="mainVideo" id=subtitle]]
+[[!template text="and the parameters," start="00:07:31.599" video="mainVideo" id=subtitle]]
+[[!template text="and that's enough for…." start="00:07:33.120" video="mainVideo" id=subtitle]]
+[[!template text="Once you have that ilambda" start="00:07:36.560" video="mainVideo" id=subtitle]]
+[[!template text="that runs now as a function," start="00:07:38.720" video="mainVideo" id=subtitle]]
+[[!template text="you can stick it into" start="00:07:40.080" video="mainVideo" id=subtitle]]
+[[!template text="a reduced function, for example," start="00:07:40.800" video="mainVideo" id=subtitle]]
+[[!template text="and it'll reduce this list." start="00:07:42.720" video="mainVideo" id=subtitle]]
+[[!template text="You could even remove…, yeah," start="00:07:46.240" video="mainVideo" id=subtitle]]
+[[!template text="so you kind of need the comment" start="00:07:50.560" video="mainVideo" id=subtitle]]
+[[!template text="otherwise it's too hard to imagine" start="00:07:51.759" video="mainVideo" id=subtitle]]
+[[!template text="what would happen next," start="00:07:56.048" video="mainVideo" id=subtitle]]
+[[!template text="but for a function you can literally" start="00:07:57.360" video="mainVideo" id=subtitle]]
+[[!template text="have an idefun even without" start="00:08:01.520" video="mainVideo" id=subtitle]]
+[[!template text="the argument list." start="00:08:03.360" video="mainVideo" id=subtitle]]
+[[!template text="It was just like generate-fib-sequence," start="00:08:04.639" video="mainVideo" id=subtitle]]
+[[!template text="and most likely when you run that defun," start="00:08:06.319" video="mainVideo" id=subtitle]]
+[[!template text="it would work the way you want it." start="00:08:09.919" video="mainVideo" id=subtitle]]
+[[!template text="The more information you give the idefun," start="00:08:13.759" video="mainVideo" id=subtitle]]
+[[!template text="the imaginary defun," start="00:08:16.000" video="mainVideo" id=subtitle]]
+[[!template text="the better it would capture the task" start="00:08:17.840" video="mainVideo" id=subtitle]]
+[[!template text="which you're trying to do," start="00:08:20.879" video="mainVideo" id=subtitle]]
+[[!template text="in this case you want to generate" start="00:08:22.000" video="mainVideo" id=subtitle]]
+[[!template text="a Fibonacci sequence." start="00:08:23.039" video="mainVideo" id=subtitle]]
+[[!template text="And yeah, you can define functions" start="00:08:24.080" video="mainVideo" id=subtitle]]
+[[!template text="without having a body," start="00:08:28.319" video="mainVideo" id=subtitle]]
+[[!template text="and they run an inference instead." start="00:08:30.560" video="mainVideo" id=subtitle]]
+[[!template text="Here's a way of overriding" start="00:08:32.640" video="mainVideo" id=subtitle]]
+[[!template text="the language model that's used," start="00:08:34.159" video="mainVideo" id=subtitle]]
+[[!template text="for example, using dynamic scope." start="00:08:36.000" video="mainVideo" id=subtitle]]
+[[!template text="So, under the hood," start="00:08:40.640" video="mainVideo" id=subtitle]]
+[[!template text="idefun just uses an ilambda." start="00:08:41.863" video="mainVideo" id=subtitle]]
+[[!template text="This function here just doubles things." start="00:08:47.040" video="mainVideo" id=subtitle]]
+[[!template text="So, here's a function that gets you" start="00:08:50.959" video="mainVideo" id=subtitle]]
+[[!template text="a hexadecimal color just from the name." start="00:08:53.752" video="mainVideo" id=subtitle]]
+[[!template text="And you can create" start="00:08:59.279" video="mainVideo" id=subtitle]]
+[[!template text="arbitrary functions like this," start="00:09:00.160" video="mainVideo" id=subtitle]]
+[[!template text="so, what we need is like a library" start="00:09:02.160" video="mainVideo" id=subtitle]]
+[[!template text="of imaginary functions, I think," start="00:09:04.268" video="mainVideo" id=subtitle]]
+[[!template text="that match a language model." start="00:09:07.200" video="mainVideo" id=subtitle]]
+[[!template text="Macros on the other hand," start="00:09:12.800" video="mainVideo" id=subtitle]]
+[[!template text="as different from functions," start="00:09:15.760" video="mainVideo" id=subtitle]]
+[[!template text="they actually macro expand" start="00:09:18.160" video="mainVideo" id=subtitle]]
+[[!template text="and generate code." start="00:09:20.000" video="mainVideo" id=subtitle]]
+[[!template text="So, when you macro expand this," start="00:09:21.360" video="mainVideo" id=subtitle]]
+[[!template text="you'll get this," start="00:09:23.279" video="mainVideo" id=subtitle]]
+[[!template text="and that's because this has an arity of 3," start="00:09:26.320" video="mainVideo" id=subtitle]]
+[[!template text="and then when you macro expand" start="00:09:30.000" video="mainVideo" id=subtitle]]
+[[!template text="that underlying macro," start="00:09:31.839" video="mainVideo" id=subtitle]]
+[[!template text="it generates the actual source code." start="00:09:32.959" video="mainVideo" id=subtitle]]
+[[!template text="You can actually run these macros," start="00:09:35.120" video="mainVideo" id=subtitle]]
+[[!template text="and it will cache the output…," start="00:09:37.839" video="mainVideo" id=subtitle]]
+[[!template text="it will catch the source code," start="00:09:41.279" video="mainVideo" id=subtitle]]
+[[!template text="so the macro runs the same" start="00:09:42.480" video="mainVideo" id=subtitle]]
+[[!template text="every single time," start="00:09:44.240" video="mainVideo" id=subtitle]]
+[[!template text="or generates the same code," start="00:09:45.839" video="mainVideo" id=subtitle]]
+[[!template text="but you can just use it" start="00:09:47.519" video="mainVideo" id=subtitle]]
+[[!template text="to generate code really easily" start="00:09:48.560" video="mainVideo" id=subtitle]]
+[[!template text="while you're programming." start="00:09:49.920" video="mainVideo" id=subtitle]]
+[[!template text="I hope that this has been informative," start="00:09:52.000" video="mainVideo" id=subtitle]]
+[[!template text="it wasn't too much time," start="00:09:55.920" video="mainVideo" id=subtitle]]
+[[!template text="but there's plenty of material" start="00:09:57.600" video="mainVideo" id=subtitle]]
+[[!template text="for you to dig into it more" start="00:10:00.312" video="mainVideo" id=subtitle]]
+[[!template text="if you're interested." start="00:10:01.680" video="mainVideo" id=subtitle]]
+[[!template text="Thank you very much" start="00:10:04.000" video="mainVideo" id=subtitle]]
+[[!template text="for letting me talk today." start="00:10:04.959" video="mainVideo" id=subtitle]]
+[[!template text="Peace out!" start="00:10:09.519" video="mainVideo" id=subtitle]]
+[[!template text="captions by bhavin192 (Bhavin Gandhi)" start="00:10:15.680" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/invoice.md b/2021/captions/invoice.md
new file mode 100644
index 00000000..27b0bcc0
--- /dev/null
+++ b/2021/captions/invoice.md
@@ -0,0 +1,236 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="What is an invoice?" start="00:00:10.290" video="mainVideo" id=subtitle]]
+[[!template text="Invoice is a document" start="00:00:22.480" video="mainVideo" id=subtitle]]
+[[!template text="that you give it to your customer" start="00:00:25.630" video="mainVideo" id=subtitle]]
+[[!template text="so that they can pay you" start="00:00:28.660" video="mainVideo" id=subtitle]]
+[[!template text="for your service or your goods." start="00:00:30.416" video="mainVideo" id=subtitle]]
+[[!template text="But you are a professor and consultant." start="00:00:31.450" video="mainVideo" id=subtitle]]
+[[!template text="Why do you need to generate invoices?" start="00:00:35.720" video="mainVideo" id=subtitle]]
+[[!template text="Well..." start="00:00:38.730" video="mainVideo" id=subtitle]]
+[[!template text="I do a service for my clients" start="00:00:39.730" video="mainVideo" id=subtitle]]
+[[!template text="if I'm a consultant," start="00:00:46.640" video="mainVideo" id=subtitle]]
+[[!template text="and when I'm a professor," start="00:00:47.884" video="mainVideo" id=subtitle]]
+[[!template text="I'm teaching students," start="00:00:48.999" video="mainVideo" id=subtitle]]
+[[!template text="so I have to generate an invoice." start="00:00:51.530" video="mainVideo" id=subtitle]]
+[[!template text="Why not use Excel or something simple" start="00:00:54.910" video="mainVideo" id=subtitle]]
+[[!template text="to generate your invoices?" start="00:00:58.420" video="mainVideo" id=subtitle]]
+[[!template text="I've tried that." start="00:01:00.079" video="mainVideo" id=subtitle]]
+[[!template text="It's no good, when it... particularly," start="00:01:01.079" video="mainVideo" id=subtitle]]
+[[!template text="when there are many clients," start="00:01:04.609" video="mainVideo" id=subtitle]]
+[[!template text="managing Excels and templates" start="00:01:07.150" video="mainVideo" id=subtitle]]
+[[!template text="becomes very very tricky." start="00:01:09.035" video="mainVideo" id=subtitle]]
+[[!template text="Why don't you hire someone, you know, professional" start="00:01:10.799" video="mainVideo" id=subtitle]]
+[[!template text="to do these for you?" start="00:01:15.725" video="mainVideo" id=subtitle]]
+[[!template text="I've tried it." start="00:01:17.350" video="mainVideo" id=subtitle]]
+[[!template text="I have to give them lots of information." start="00:01:18.428" video="mainVideo" id=subtitle]]
+[[!template text="Not that there's anything wrong with them," start="00:01:22.381" video="mainVideo" id=subtitle]]
+[[!template text="just that I found it to be a bit too tricky." start="00:01:25.140" video="mainVideo" id=subtitle]]
+[[!template text="Professional software?" start="00:01:30.130" video="mainVideo" id=subtitle]]
+[[!template text="Good point. I've tried that too." start="00:01:31.250" video="mainVideo" id=subtitle]]
+[[!template text="But, what's the fun in that, right?" start="00:01:33.902" video="mainVideo" id=subtitle]]
+[[!template text="So what did you do?" start="00:01:36.900" video="mainVideo" id=subtitle]]
+[[!template text="Haa.. this is the interesting part!" start="00:01:38.850" video="mainVideo" id=subtitle]]
+[[!template text="I took a software called Emacs Org mode" start="00:01:40.869" video="mainVideo" id=subtitle]]
+[[!template text="and with that, I added Python code to it." start="00:01:45.600" video="mainVideo" id=subtitle]]
+[[!template text="I added so many other things to it," start="00:01:50.640" video="mainVideo" id=subtitle]]
+[[!template text="and then it became a really nice" start="00:01:52.418" video="mainVideo" id=subtitle]]
+[[!template text="customizable way to generate invoices." start="00:01:56.168" video="mainVideo" id=subtitle]]
+[[!template text="Whoa whoa whoa... Just slow it down, bro." start="00:01:59.640" video="mainVideo" id=subtitle]]
+[[!template text="Give me the story." start="00:02:04.549" video="mainVideo" id=subtitle]]
+[[!template text="Hey. Okay... Okay... I will." start="00:02:06.659" video="mainVideo" id=subtitle]]
+[[!template text="Story." start="00:02:10.170" video="mainVideo" id=subtitle]]
+[[!template text="Uh.. Story is simple." start="00:02:11.170" video="mainVideo" id=subtitle]]
+[[!template text="The client wanted an invoice." start="00:02:14.620" video="mainVideo" id=subtitle]]
+[[!template text="So, I generated an invoice." start="00:02:16.590" video="mainVideo" id=subtitle]]
+[[!template text="It wasn't good enough." start="00:02:19.900" video="mainVideo" id=subtitle]]
+[[!template text="So, I hacked some little bit of it." start="00:02:21.419" video="mainVideo" id=subtitle]]
+[[!template text="I changed every time a new client came." start="00:02:24.959" video="mainVideo" id=subtitle]]
+[[!template text="I had to do it all over again." start="00:02:28.480" video="mainVideo" id=subtitle]]
+[[!template text="I did that. I did it." start="00:02:29.848" video="mainVideo" id=subtitle]]
+[[!template text="Then I got really tired of it." start="00:02:30.989" video="mainVideo" id=subtitle]]
+[[!template text="And that's what led me to all these customizations." start="00:02:33.110" video="mainVideo" id=subtitle]]
+[[!template text="I want features." start="00:02:36.760" video="mainVideo" id=subtitle]]
+[[!template text="So, rapid fire questions. Ready? Yep." start="00:02:38.632" video="mainVideo" id=subtitle]]
+[[!template text="Project management? Yep." start="00:02:43.249" video="mainVideo" id=subtitle]]
+[[!template text="Format customization? Yes." start="00:02:46.079" video="mainVideo" id=subtitle]]
+[[!template text="PDF export? Yes." start="00:02:48.079" video="mainVideo" id=subtitle]]
+[[!template text="Multi-client support? Yes." start="00:02:50.079" video="mainVideo" id=subtitle]]
+[[!template text="Washing my clothes?" start="00:02:52.079" video="mainVideo" id=subtitle]]
+[[!template text="Yes... No." start="00:02:53.579" video="mainVideo" id=subtitle]]
+[[!template text="Haa. I was just testing you," start="00:02:54.959" video="mainVideo" id=subtitle]]
+[[!template text="if you're paying attention or not." start="00:02:57.013" video="mainVideo" id=subtitle]]
+[[!template text="Logo and signature customization? Yes." start="00:03:00.900" video="mainVideo" id=subtitle]]
+[[!template text="Multi-currency support? Yes." start="00:03:04.659" video="mainVideo" id=subtitle]]
+[[!template text="Okay, enough talky or it's just..." start="00:03:06.730" video="mainVideo" id=subtitle]]
+[[!template text="Can you show me a demo that you did?" start="00:03:08.930" video="mainVideo" id=subtitle]]
+[[!template text="Or is it just talky." start="00:03:10.930" video="mainVideo" id=subtitle]]
+[[!template text="Yes, of course. Demo." start="00:03:12.950" video="mainVideo" id=subtitle]]
+[[!template text="Okay, demo time." start="00:03:15.239" video="mainVideo" id=subtitle]]
+[[!template text="Some ingredients for invoicing." start="00:03:16.969" video="mainVideo" id=subtitle]]
+[[!template text="Org mode, of course." start="00:03:18.909" video="mainVideo" id=subtitle]]
+[[!template text="Python environment and libraries for Python:" start="00:03:21.069" video="mainVideo" id=subtitle]]
+[[!template text="pandas, tabulate, numbers." start="00:03:23.849" video="mainVideo" id=subtitle]]
+[[!template text="yasnippet package, very useful." start="00:03:25.930" video="mainVideo" id=subtitle]]
+[[!template text="And I use for LaTeX, MikTeX packages." start="00:03:28.260" video="mainVideo" id=subtitle]]
+[[!template text="So, I have a project already set up." start="00:03:30.969" video="mainVideo" id=subtitle]]
+[[!template text="This is what we have." start="00:03:34.090" video="mainVideo" id=subtitle]]
+[[!template text="The project is Teaching 2021" start="00:03:36.540" video="mainVideo" id=subtitle]]
+[[!template text="and you can set all this up." start="00:03:38.673" video="mainVideo" id=subtitle]]
+[[!template text="So let's start with the first and foremost." start="00:03:41.239" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so we're going to use" start="00:03:43.819" video="mainVideo" id=subtitle]]
+[[!template text="the yasnippet package." start="00:03:46.849" video="mainVideo" id=subtitle]]
+[[!template text="uh.. um.. sorry, the invoice, okay." start="00:03:49.209" video="mainVideo" id=subtitle]]
+[[!template text="This one introduced, it gives you this whole..." start="00:03:52.219" video="mainVideo" id=subtitle]]
+[[!template text="generates this whole bunch of code" start="00:03:54.550" video="mainVideo" id=subtitle]]
+[[!template text="based on a template." start="00:03:56.377" video="mainVideo" id=subtitle]]
+[[!template text="All you're going to do" start="00:03:57.150" video="mainVideo" id=subtitle]]
+[[!template text="is to type out the client's name." start="00:03:58.371" video="mainVideo" id=subtitle]]
+[[!template text="Okay and that's it." start="00:04:00.939" video="mainVideo" id=subtitle]]
+[[!template text="That's all there is to it." start="00:04:02.797" video="mainVideo" id=subtitle]]
+[[!template text="Okay there's a whole bunch of instructions" start="00:04:04.469" video="mainVideo" id=subtitle]]
+[[!template text="that you can follow." start="00:04:06.446" video="mainVideo" id=subtitle]]
+[[!template text="If it's for the first time," start="00:04:07.199" video="mainVideo" id=subtitle]]
+[[!template text="use bankinfo.org." start="00:04:09.284" video="mainVideo" id=subtitle]]
+[[!template text="Let's check out what bankinfo.org involves." start="00:04:10.549" video="mainVideo" id=subtitle]]
+[[!template text="Okay so you can copy this template" start="00:04:14.409" video="mainVideo" id=subtitle]]
+[[!template text="from my GitHub repository." start="00:04:16.819" video="mainVideo" id=subtitle]]
+[[!template text="It's basically setup of the LaTeX tags," start="00:04:19.269" video="mainVideo" id=subtitle]]
+[[!template text="and particularly this text file," start="00:04:24.300" video="mainVideo" id=subtitle]]
+[[!template text="which is a template." start="00:04:26.854" video="mainVideo" id=subtitle]]
+[[!template text="There's some personal info" start="00:04:28.620" video="mainVideo" id=subtitle]]
+[[!template text="for all the details that you want." start="00:04:30.469" video="mainVideo" id=subtitle]]
+[[!template text="Bank information." start="00:04:32.125" video="mainVideo" id=subtitle]]
+[[!template text="You can look at it in detail" start="00:04:33.814" video="mainVideo" id=subtitle]]
+[[!template text="from my repo. The tax invoice..." start="00:04:35.580" video="mainVideo" id=subtitle]]
+[[!template text="There are some basic constructs." start="00:04:40.330" video="mainVideo" id=subtitle]]
+[[!template text="You can totally change any of these" start="00:04:42.840" video="mainVideo" id=subtitle]]
+[[!template text="to your liking." start="00:04:45.809" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so that's bank info." start="00:04:47.620" video="mainVideo" id=subtitle]]
+[[!template text="Go back. That's the first part." start="00:04:50.320" video="mainVideo" id=subtitle]]
+[[!template text="The second part is creating a client name." start="00:04:52.200" video="mainVideo" id=subtitle]]
+[[!template text="So let's look at this setup," start="00:04:55.540" video="mainVideo" id=subtitle]]
+[[!template text="and I have one created already." start="00:04:58.420" video="mainVideo" id=subtitle]]
+[[!template text="So, in order to create this," start="00:05:00.710" video="mainVideo" id=subtitle]]
+[[!template text="all you need to do" start="00:05:02.804" video="mainVideo" id=subtitle]]
+[[!template text="is to use the inv-setup" start="00:05:03.880" video="mainVideo" id=subtitle]]
+[[!template text="invoice setup for your client," start="00:05:06.610" video="mainVideo" id=subtitle]]
+[[!template text="and it will give you all the information." start="00:05:10.300" video="mainVideo" id=subtitle]]
+[[!template text="All you need to do is type in here" start="00:05:12.230" video="mainVideo" id=subtitle]]
+[[!template text="and then type in the client's name," start="00:05:14.790" video="mainVideo" id=subtitle]]
+[[!template text="exactly the same that you see" start="00:05:16.410" video="mainVideo" id=subtitle]]
+[[!template text="as the file name." start="00:05:18.785" video="mainVideo" id=subtitle]]
+[[!template text="Okay, client one. And that's it." start="00:05:20.210" video="mainVideo" id=subtitle]]
+[[!template text="You're all set for you." start="00:05:22.620" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so that's what it looks like." start="00:05:24.250" video="mainVideo" id=subtitle]]
+[[!template text="All the address and stuff" start="00:05:26.218" video="mainVideo" id=subtitle]]
+[[!template text="filled out here." start="00:05:28.043" video="mainVideo" id=subtitle]]
+[[!template text="Okay. And then the next one" start="00:05:29.710" video="mainVideo" id=subtitle]]
+[[!template text="is to use the... One time," start="00:05:32.131" video="mainVideo" id=subtitle]]
+[[!template text="you're going to do the invoice item," start="00:05:37.010" video="mainVideo" id=subtitle]]
+[[!template text="which is the rate table." start="00:05:38.890" video="mainVideo" id=subtitle]]
+[[!template text="So let's do the invoice." start="00:05:40.590" video="mainVideo" id=subtitle]]
+[[!template text="Invoice item..." start="00:05:42.490" video="mainVideo" id=subtitle]]
+[[!template text="This is item master." start="00:05:44.400" video="mainVideo" id=subtitle]]
+[[!template text="So here again, another place" start="00:05:47.080" video="mainVideo" id=subtitle]]
+[[!template text="where you have to enter the client name," start="00:05:50.320" video="mainVideo" id=subtitle]]
+[[!template text="and your rate table is ready for use." start="00:05:53.060" video="mainVideo" id=subtitle]]
+[[!template text="Okay. So that was..." start="00:05:56.780" video="mainVideo" id=subtitle]]
+[[!template text="Now we go to step two," start="00:05:58.891" video="mainVideo" id=subtitle]]
+[[!template text="which is clock table for reference." start="00:06:00.749" video="mainVideo" id=subtitle]]
+[[!template text="Okay. Let's go to the clock table." start="00:06:02.510" video="mainVideo" id=subtitle]]
+[[!template text="I already set up this for ACMEClient1," start="00:06:04.150" video="mainVideo" id=subtitle]]
+[[!template text="and I give it a tag: billable." start="00:06:09.660" video="mainVideo" id=subtitle]]
+[[!template text="Okay. We will see that..." start="00:06:12.030" video="mainVideo" id=subtitle]]
+[[!template text="Where have I done that?" start="00:06:13.260" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so that's the client, you know," start="00:06:17.470" video="mainVideo" id=subtitle]]
+[[!template text="ACMEClient1 table teaching 2021." start="00:06:23.890" video="mainVideo" id=subtitle]]
+[[!template text="I've clocked it for the previous month." start="00:06:25.360" video="mainVideo" id=subtitle]]
+[[!template text="That's what you will see." start="00:06:29.090" video="mainVideo" id=subtitle]]
+[[!template text="Let's see it again." start="00:06:30.090" video="mainVideo" id=subtitle]]
+[[!template text="Okay. That's... Let's put the instructions." start="00:06:31.090" video="mainVideo" id=subtitle]]
+[[!template text="And then you go to clock table" start="00:06:34.840" video="mainVideo" id=subtitle]]
+[[!template text="to generate the clock table for the client." start="00:06:38.110" video="mainVideo" id=subtitle]]
+[[!template text="Okay. So clock table..." start="00:06:40.490" video="mainVideo" id=subtitle]]
+[[!template text="This is only for your reference," start="00:06:42.342" video="mainVideo" id=subtitle]]
+[[!template text="not going to be exported." start="00:06:44.335" video="mainVideo" id=subtitle]]
+[[!template text="Here we get a clock table. All right." start="00:06:45.484" video="mainVideo" id=subtitle]]
+[[!template text="So with this, you get the clock table." start="00:06:50.586" video="mainVideo" id=subtitle]]
+[[!template text="Okay. Now go into the items part." start="00:06:53.150" video="mainVideo" id=subtitle]]
+[[!template text="You will see two Python blocks," start="00:06:55.670" video="mainVideo" id=subtitle]]
+[[!template text="which is what the next instruction says." start="00:06:59.810" video="mainVideo" id=subtitle]]
+[[!template text="Go into the python block" start="00:07:01.500" video="mainVideo" id=subtitle]]
+[[!template text="and do Control-c c (C-c c)." start="00:07:03.526" video="mainVideo" id=subtitle]]
+[[!template text="Go to the control python source block," start="00:07:06.180" video="mainVideo" id=subtitle]]
+[[!template text="second one, and do Ctrl-c c..." start="00:07:09.860" video="mainVideo" id=subtitle]]
+[[!template text="Ctrl-c Ctrl-c (C-c C-c) rather." start="00:07:12.413" video="mainVideo" id=subtitle]]
+[[!template text="and then finally come back" start="00:07:14.490" video="mainVideo" id=subtitle]]
+[[!template text="to Raise Invoice and do dispatcher" start="00:07:16.028" video="mainVideo" id=subtitle]]
+[[!template text="which is exported into PDF." start="00:07:18.765" video="mainVideo" id=subtitle]]
+[[!template text="Okay, let's do that." start="00:07:21.270" video="mainVideo" id=subtitle]]
+[[!template text="First one is... I just run this code," start="00:07:22.718" video="mainVideo" id=subtitle]]
+[[!template text="and it generated this table for me." start="00:07:27.853" video="mainVideo" id=subtitle]]
+[[!template text="Okay. So it has all the details." start="00:07:30.950" video="mainVideo" id=subtitle]]
+[[!template text="Now we go in" start="00:07:34.160" video="mainVideo" id=subtitle]]
+[[!template text="the second source code block," start="00:07:35.253" video="mainVideo" id=subtitle]]
+[[!template text="and does all this..." start="00:07:39.560" video="mainVideo" id=subtitle]]
+[[!template text="And it has generated this stuff." start="00:07:41.700" video="mainVideo" id=subtitle]]
+[[!template text="Plus, you should note that for beancount," start="00:07:43.530" video="mainVideo" id=subtitle]]
+[[!template text="it has also generated the block for that." start="00:07:46.335" video="mainVideo" id=subtitle]]
+[[!template text="It's all in the code." start="00:07:50.795" video="mainVideo" id=subtitle]]
+[[!template text="You can customize it if you're on Ledger." start="00:07:51.775" video="mainVideo" id=subtitle]]
+[[!template text="You can customize it" start="00:07:53.820" video="mainVideo" id=subtitle]]
+[[!template text="to the way you want," start="00:07:54.782" video="mainVideo" id=subtitle]]
+[[!template text="any accounts that you want to change." start="00:07:55.390" video="mainVideo" id=subtitle]]
+[[!template text="It's all customizable." start="00:07:56.978" video="mainVideo" id=subtitle]]
+[[!template text="Here, even the currency symbols" start="00:07:58.870" video="mainVideo" id=subtitle]]
+[[!template text="can be changed from INR and Rupees" start="00:08:00.710" video="mainVideo" id=subtitle]]
+[[!template text="to whatever currency you have" start="00:08:02.840" video="mainVideo" id=subtitle]]
+[[!template text="can be changed accordingly." start="00:08:04.681" video="mainVideo" id=subtitle]]
+[[!template text="I have org-babel-tangle-append code" start="00:08:07.190" video="mainVideo" id=subtitle]]
+[[!template text="that I will share in the..." start="00:08:11.304" video="mainVideo" id=subtitle]]
+[[!template text="I've borrowed it" start="00:08:12.650" video="mainVideo" id=subtitle]]
+[[!template text="from somebody on the Internet," start="00:08:13.872" video="mainVideo" id=subtitle]]
+[[!template text="so I'll share that as well" start="00:08:14.889" video="mainVideo" id=subtitle]]
+[[!template text="in my GitHub repo." start="00:08:16.440" video="mainVideo" id=subtitle]]
+[[!template text="Lastly, I just want to share that" start="00:08:18.650" video="mainVideo" id=subtitle]]
+[[!template text="you can fill your GST website" start="00:08:20.830" video="mainVideo" id=subtitle]]
+[[!template text="with these info," start="00:08:23.730" video="mainVideo" id=subtitle]]
+[[!template text="so you can... You can even put in" start="00:08:24.988" video="mainVideo" id=subtitle]]
+[[!template text="as many entries as you want" start="00:08:26.171" video="mainVideo" id=subtitle]]
+[[!template text="in your yasnippet." start="00:08:27.590" video="mainVideo" id=subtitle]]
+[[!template text="Customize it the way you want." start="00:08:29.370" video="mainVideo" id=subtitle]]
+[[!template text="I also added a month later" start="00:08:30.560" video="mainVideo" id=subtitle]]
+[[!template text="due date reminder," start="00:08:32.590" video="mainVideo" id=subtitle]]
+[[!template text="saying if the invoice is paid or not." start="00:08:33.820" video="mainVideo" id=subtitle]]
+[[!template text="Okay." start="00:08:36.239" video="mainVideo" id=subtitle]]
+[[!template text="So, a few tips to end this demo." start="00:08:37.209" video="mainVideo" id=subtitle]]
+[[!template text="You can customize currency symbol" start="00:08:42.051" video="mainVideo" id=subtitle]]
+[[!template text="and currency words" start="00:08:44.990" video="mainVideo" id=subtitle]]
+[[!template text="according to your own currency." start="00:08:45.860" video="mainVideo" id=subtitle]]
+[[!template text="I use the European/Indian date format" start="00:08:47.540" video="mainVideo" id=subtitle]]
+[[!template text="which is %d-%m-%Y. You can also..." start="00:08:51.269" video="mainVideo" id=subtitle]]
+[[!template text="The language is Indian English," start="00:08:54.980" video="mainVideo" id=subtitle]]
+[[!template text="so it will change according--" start="00:08:56.816" video="mainVideo" id=subtitle]]
+[[!template text="the numerals change according to the" start="00:08:57.998" video="mainVideo" id=subtitle]]
+[[!template text="Indian format. Numbering format" start="00:08:59.860" video="mainVideo" id=subtitle]]
+[[!template text="for invoice number is today's date" start="00:09:02.180" video="mainVideo" id=subtitle]]
+[[!template text="followed by client name." start="00:09:04.959" video="mainVideo" id=subtitle]]
+[[!template text="That's my default." start="00:09:06.620" video="mainVideo" id=subtitle]]
+[[!template text="You can customize that as well." start="00:09:07.959" video="mainVideo" id=subtitle]]
+[[!template text="Let's try and export this" start="00:09:11.120" video="mainVideo" id=subtitle]]
+[[!template text="to the subtree. Ctrl-s." start="00:09:13.574" video="mainVideo" id=subtitle]]
+[[!template text="So that's step number seven." start="00:09:17.325" video="mainVideo" id=subtitle]]
+[[!template text="And there it is," start="00:09:20.579" video="mainVideo" id=subtitle]]
+[[!template text="the tax invoice" start="00:09:22.029" video="mainVideo" id=subtitle]]
+[[!template text="for Dr. Wile E. Coyote," start="00:09:23.339" video="mainVideo" id=subtitle]]
+[[!template text="and with a lovely signature as well." start="00:09:25.870" video="mainVideo" id=subtitle]]
+[[!template text="Interviewer: Well, that's great!" start="00:09:27.810" video="mainVideo" id=subtitle]]
+[[!template text="If I were to try this out, what do I do?" start="00:09:29.990" video="mainVideo" id=subtitle]]
+[[!template text="Go to github.com, into my repository." start="00:09:34.309" video="mainVideo" id=subtitle]]
+[[!template text="I'll leave my GitHub URL." start="00:09:36.779" video="mainVideo" id=subtitle]]
+[[!template text="You can download it use it," start="00:09:38.915" video="mainVideo" id=subtitle]]
+[[!template text="and let me know" start="00:09:42.790" video="mainVideo" id=subtitle]]
+[[!template text="how it pans out for you." start="00:09:43.848" video="mainVideo" id=subtitle]]
+[[!template text="Interviewer: I have spent" start="00:09:46.829" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/janitor.md b/2021/captions/janitor.md
new file mode 100644
index 00000000..3e7bdc3c
--- /dev/null
+++ b/2021/captions/janitor.md
@@ -0,0 +1,596 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello, my name is Stefan Monnier," start="00:00:01.520" video="mainVideo" id=subtitle]]
+[[!template text="and I'm going to talk to you about--" start="00:00:04.400" video="mainVideo" id=subtitle]]
+[[!template text="well, I'm going to present a bit" start="00:00:06.799" video="mainVideo" id=subtitle]]
+[[!template text="of the life of a janitor." start="00:00:08.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So by and large, there's just" start="00:00:11.840" video="mainVideo" id=subtitle]]
+[[!template text="nothing to see here," start="00:00:14.050" video="mainVideo" id=subtitle]]
+[[!template text="and that's probably" start="00:00:16.299" video="mainVideo" id=subtitle]]
+[[!template text="not super interesting," start="00:00:17.199" video="mainVideo" id=subtitle]]
+[[!template text="but some of you might actually like to" start="00:00:18.240" video="mainVideo" id=subtitle]]
+[[!template text="see how I work, so I figured why not." start="00:00:19.920" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Usually what I do just doesn't make any" start="00:00:25.359" video="mainVideo" id=subtitle]]
+[[!template text="any significant difference," start="00:00:27.279" video="mainVideo" id=subtitle]]
+[[!template text="and so I basically take existing code" start="00:00:29.920" video="mainVideo" id=subtitle]]
+[[!template text="that's working, and I try to change it" start="00:00:32.160" video="mainVideo" id=subtitle]]
+[[!template text="hopefully without breaking it too much" start="00:00:35.040" video="mainVideo" id=subtitle]]
+[[!template text="and make it slightly more..." start="00:00:37.680" video="mainVideo" id=subtitle]]
+[[!template text="you know, following some of the more" start="00:00:40.079" video="mainVideo" id=subtitle]]
+[[!template text="modern style, let's say," start="00:00:42.719" video="mainVideo" id=subtitle]]
+[[!template text="and sometimes along the way," start="00:00:44.640" video="mainVideo" id=subtitle]]
+[[!template text="it actually fixes some bugs." start="00:00:46.719" video="mainVideo" id=subtitle]]
+[[!template new="1" text="More concretely, the kind of things" start="00:00:50.399" video="mainVideo" id=subtitle]]
+[[!template text="that I do is basically activate" start="00:00:51.983" video="mainVideo" id=subtitle]]
+[[!template text="lexical scoping--" start="00:00:54.079" video="mainVideo" id=subtitle]]
+[[!template text="that's really my main goal usually--" start="00:00:54.480" video="mainVideo" id=subtitle]]
+[[!template text="but also do things like convert" start="00:00:56.239" video="mainVideo" id=subtitle]]
+[[!template text="from `cl` to `cl-lib`," start="00:00:58.960" video="mainVideo" id=subtitle]]
+[[!template text="sometimes I have to" start="00:01:00.719" video="mainVideo" id=subtitle]]
+[[!template text="fix some compilation dependencies," start="00:01:01.440" video="mainVideo" id=subtitle]]
+[[!template text="I might convert from `defadvice` to `advice-add`," start="00:01:03.760" video="mainVideo" id=subtitle]]
+[[!template text="and many of the things--" start="00:01:07.280" video="mainVideo" id=subtitle]]
+[[!template text="in terms of number of changes," start="00:01:11.439" video="mainVideo" id=subtitle]]
+[[!template text="most of them are actually" start="00:01:13.119" video="mainVideo" id=subtitle]]
+[[!template text="changing `quote fun` to `hash quote fun`" start="00:01:14.000" video="mainVideo" id=subtitle]]
+[[!template text="because I prefer it," start="00:01:16.560" video="mainVideo" id=subtitle]]
+[[!template text="but also it often helps me" start="00:01:17.360" video="mainVideo" id=subtitle]]
+[[!template text="have a better understanding" start="00:01:19.920" video="mainVideo" id=subtitle]]
+[[!template text="of which function is called where," start="00:01:21.439" video="mainVideo" id=subtitle]]
+[[!template text="and so the warnings I get from it" start="00:01:23.920" video="mainVideo" id=subtitle]]
+[[!template text="sometimes help me. You look concretely..." start="00:01:26.799" video="mainVideo" id=subtitle]]
+[[!template text="it's not nothing really clear;" start="00:01:28.799" video="mainVideo" id=subtitle]]
+[[!template text="it's more in terms of helping me" start="00:01:30.880" video="mainVideo" id=subtitle]]
+[[!template text="have a mental image" start="00:01:33.360" video="mainVideo" id=subtitle]]
+[[!template text="of how the package works." start="00:01:35.759" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's take a look." start="00:01:39.439" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to start with" start="00:01:42.880" video="mainVideo" id=subtitle]]
+[[!template text="the package `heap`," start="00:01:45.840" video="mainVideo" id=subtitle]]
+[[!template text="which I saw had a few weird things in it," start="00:01:46.799" video="mainVideo" id=subtitle]]
+[[!template text="so I'm going to compile it." start="00:01:50.560" video="mainVideo" id=subtitle]]
+[[!template text="That's basically the way the way I work," start="00:01:53.680" video="mainVideo" id=subtitle]]
+[[!template text="right. I take a package." start="00:01:55.600" video="mainVideo" id=subtitle]]
+[[!template text="I just pass it to the byte compiler." start="00:01:57.840" video="mainVideo" id=subtitle]]
+[[!template text="I do that by just having" start="00:02:00.479" video="mainVideo" id=subtitle]]
+[[!template text="a clone of the whole" start="00:02:02.159" video="mainVideo" id=subtitle]]
+[[!template text="GNU ELPA repository," start="00:02:04.560" video="mainVideo" id=subtitle]]
+[[!template text="and so that's why I built them." start="00:02:06.799" video="mainVideo" id=subtitle]]
+[[!template text="I use the build rules" start="00:02:10.000" video="mainVideo" id=subtitle]]
+[[!template text="from the GNU ELPA repository." start="00:02:11.520" video="mainVideo" id=subtitle]]
+[[!template new="1" text="These build rules enforce--" start="00:02:15.120" video="mainVideo" id=subtitle]]
+[[!template text="make sure that the files" start="00:02:16.720" video="mainVideo" id=subtitle]]
+[[!template text="are compiled in a clean environment" start="00:02:17.680" video="mainVideo" id=subtitle]]
+[[!template text="so you get fairly good warnings." start="00:02:19.680" video="mainVideo" id=subtitle]]
+[[!template text="If you look at the warnings you see here," start="00:02:21.920" video="mainVideo" id=subtitle]]
+[[!template text="there's a lot of things" start="00:02:23.680" video="mainVideo" id=subtitle]]
+[[!template text="which are completely irrelevant," start="00:02:24.720" video="mainVideo" id=subtitle]]
+[[!template text="which are due to details" start="00:02:26.480" video="mainVideo" id=subtitle]]
+[[!template text="of the way I have my Emacs set up" start="00:02:28.400" video="mainVideo" id=subtitle]]
+[[!template text="and some of the local changes" start="00:02:30.319" video="mainVideo" id=subtitle]]
+[[!template text="I had in it so, you know," start="00:02:31.599" video="mainVideo" id=subtitle]]
+[[!template text="there's no point" start="00:02:34.319" video="mainVideo" id=subtitle]]
+[[!template text="paying too much attention to it," start="00:02:35.280" video="mainVideo" id=subtitle]]
+[[!template text="but here we have a first warning." start="00:02:37.920" video="mainVideo" id=subtitle]]
+[[!template text="We see that this is using `cl`," start="00:02:40.400" video="mainVideo" id=subtitle]]
+[[!template text="so we want to change this to `cl-lib`," start="00:02:42.959" video="mainVideo" id=subtitle]]
+[[!template text="but that also means" start="00:02:45.040" video="mainVideo" id=subtitle]]
+[[!template text="that we may have a new dependency" start="00:02:46.879" video="mainVideo" id=subtitle]]
+[[!template text="on the `cl-lib` package," start="00:02:48.400" video="mainVideo" id=subtitle]]
+[[!template text="so we have to go check" start="00:02:49.920" video="mainVideo" id=subtitle]]
+[[!template text="the start of the file" start="00:02:51.120" video="mainVideo" id=subtitle]]
+[[!template text="to see if it already declares" start="00:02:52.000" video="mainVideo" id=subtitle]]
+[[!template text="some dependency, and we see it doesn't," start="00:02:54.080" video="mainVideo" id=subtitle]]
+[[!template text="not even on a on a recent-enough Emacs," start="00:02:56.800" video="mainVideo" id=subtitle]]
+[[!template text="so we have to add--" start="00:03:00.640" video="mainVideo" id=subtitle]]
+[[!template text="sorry, that's not going very well..." start="00:03:02.325" video="mainVideo" id=subtitle]]
+[[!template text="oh..." start="00:03:05.360" video="mainVideo" id=subtitle]]
+[[!template text="okay, we're going to get there somewhere..." start="00:03:06.480" video="mainVideo" id=subtitle]]
+[[!template text="somehow..." start="00:03:08.560" video="mainVideo" id=subtitle]]
+[[!template text="oh, that still wasn't it, wow, okay--" start="00:03:13.200" video="mainVideo" id=subtitle]]
+[[!template text="and along the way..." start="00:03:20.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Of course, since we converted to `cl-lib`," start="00:03:22.159" video="mainVideo" id=subtitle]]
+[[!template text="we have to update the uses" start="00:03:24.159" video="mainVideo" id=subtitle]]
+[[!template text="so `defstruct` shouldn't be used anymore." start="00:03:26.159" video="mainVideo" id=subtitle]]
+[[!template text="We may want to reindent this" start="00:03:29.840" video="mainVideo" id=subtitle]]
+[[!template text="to get something a bit cleaner." start="00:03:31.599" video="mainVideo" id=subtitle]]
+[[!template text="We have here a missing quote..." start="00:03:37.040" video="mainVideo" id=subtitle]]
+[[!template text="hash, sorry." start="00:03:40.589" video="mainVideo" id=subtitle]]
+[[!template text="We have `decf`, so `decf` is here," start="00:03:41.920" video="mainVideo" id=subtitle]]
+[[!template text="and that needs to be replaced" start="00:03:46.480" video="mainVideo" id=subtitle]]
+[[!template text="with `cl-decf`." start="00:03:48.000" video="mainVideo" id=subtitle]]
+[[!template text="Sometimes it's worth doing" start="00:03:49.920" video="mainVideo" id=subtitle]]
+[[!template text="a search-and-replace." start="00:03:51.120" video="mainVideo" id=subtitle]]
+[[!template text="Here I see there's only two," start="00:03:53.360" video="mainVideo" id=subtitle]]
+[[!template text="so it's not worth the trouble;" start="00:03:54.799" video="mainVideo" id=subtitle]]
+[[!template text="I just do it by hand, and that's it." start="00:03:57.760" video="mainVideo" id=subtitle]]
+[[!template text="Well, that was easy." start="00:04:00.711" video="mainVideo" id=subtitle]]
+[[!template text="So let's recompile, see what it says." start="00:04:02.000" video="mainVideo" id=subtitle]]
+[[!template text="Ah, this is clean. Perfect!" start="00:04:10.159" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's.. we can go see..." start="00:04:12.959" video="mainVideo" id=subtitle]]
+[[!template text="There is another one I had." start="00:04:15.000" video="mainVideo" id=subtitle]]
+[[!template text="Was it `counsel`, I think. Yes." start="00:04:17.280" video="mainVideo" id=subtitle]]
+[[!template text="So also I saw some funny things" start="00:04:20.239" video="mainVideo" id=subtitle]]
+[[!template text="going on here." start="00:04:24.160" video="mainVideo" id=subtitle]]
+[[!template text="So I'm going to do" start="00:04:24.320" video="mainVideo" id=subtitle]]
+[[!template text="the same procedure as before:" start="00:04:26.479" video="mainVideo" id=subtitle]]
+[[!template text="I just compile the file" start="00:04:31.040" video="mainVideo" id=subtitle]]
+[[!template text="and look at the warnings." start="00:04:32.800" video="mainVideo" id=subtitle]]
+[[!template text="Oh, we have many more here." start="00:04:38.000" video="mainVideo" id=subtitle]]
+[[!template text="So let's see..." start="00:04:40.479" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so we have missing quotes--" start="00:04:43.120" video="mainVideo" id=subtitle]]
+[[!template text="oh, hashes. They're not really missing;" start="00:04:46.504" video="mainVideo" id=subtitle]]
+[[!template text="it's just a personal preference." start="00:04:49.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Oh, here... here's an important one:" start="00:04:54.639" video="mainVideo" id=subtitle]]
+[[!template text="so as you know," start="00:04:57.440" video="mainVideo" id=subtitle]]
+[[!template text="if you look at the top of the file," start="00:04:59.280" video="mainVideo" id=subtitle]]
+[[!template text="you see that here" start="00:05:00.639" video="mainVideo" id=subtitle]]
+[[!template text="it says it's using lexical binding," start="00:05:02.240" video="mainVideo" id=subtitle]]
+[[!template text="yet it's not fully using lexical binding," start="00:05:04.960" video="mainVideo" id=subtitle]]
+[[!template text="because as we just saw," start="00:05:07.120" video="mainVideo" id=subtitle]]
+[[!template text="there's a call to the `eval` function" start="00:05:08.960" video="mainVideo" id=subtitle]]
+[[!template text="with only one argument," start="00:05:11.039" video="mainVideo" id=subtitle]]
+[[!template text="which means the second argument is nil," start="00:05:11.680" video="mainVideo" id=subtitle]]
+[[!template text="which means that the expression read" start="00:05:13.280" video="mainVideo" id=subtitle]]
+[[!template text="by `read` here is going to be evaluated" start="00:05:16.880" video="mainVideo" id=subtitle]]
+[[!template text="using the old dialects," start="00:05:19.520" video="mainVideo" id=subtitle]]
+[[!template text="which is only dynamic scoping." start="00:05:22.160" video="mainVideo" id=subtitle]]
+[[!template text="So here I like to just change this" start="00:05:24.240" video="mainVideo" id=subtitle]]
+[[!template text="to use lexical scoping," start="00:05:25.680" video="mainVideo" id=subtitle]]
+[[!template text="which in most cases" start="00:05:26.800" video="mainVideo" id=subtitle]]
+[[!template text="just doesn't make any difference." start="00:05:28.080" video="mainVideo" id=subtitle]]
+[[!template text="It just makes me feel better." start="00:05:29.680" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So there's lots of those hashes" start="00:05:35.919" video="mainVideo" id=subtitle]]
+[[!template text="all over the place." start="00:05:40.160" video="mainVideo" id=subtitle]]
+[[!template text="It's not strictly necessary, as you know," start="00:05:43.680" video="mainVideo" id=subtitle]]
+[[!template text="but I'm just going to add them anyway." start="00:05:45.680" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Here we see" start="00:05:52.479" video="mainVideo" id=subtitle]]
+[[!template text="it's not going to warn me here" start="00:05:53.199" video="mainVideo" id=subtitle]]
+[[!template text="because it doesn't know" start="00:05:54.800" video="mainVideo" id=subtitle]]
+[[!template text="that `ivy-make-magic-action`" start="00:05:55.759" video="mainVideo" id=subtitle]]
+[[!template text="takes a function," start="00:05:57.600" video="mainVideo" id=subtitle]]
+[[!template text="but it's a pretty good guess that it does." start="00:05:58.400" video="mainVideo" id=subtitle]]
+[[!template text="And here's some more." start="00:06:12.319" video="mainVideo" id=subtitle]]
+[[!template text="What else do we have?" start="00:06:14.479" video="mainVideo" id=subtitle]]
+[[!template text="Is that all we have here?" start="00:06:16.080" video="mainVideo" id=subtitle]]
+[[!template text="Well, looks like it. Oh, I see a few..." start="00:06:19.120" video="mainVideo" id=subtitle]]
+[[!template text="a few more here..." start="00:06:21.440" video="mainVideo" id=subtitle]]
+[[!template text="and one more." start="00:06:27.680" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And oh, this is more interesting." start="00:06:30.639" video="mainVideo" id=subtitle]]
+[[!template text="So here we have a use of `defadvice`," start="00:06:33.039" video="mainVideo" id=subtitle]]
+[[!template text="so if we go back" start="00:06:35.280" video="mainVideo" id=subtitle]]
+[[!template text="to the beginning of the file," start="00:06:37.440" video="mainVideo" id=subtitle]]
+[[!template text="we see that it actually depends" start="00:06:40.720" video="mainVideo" id=subtitle]]
+[[!template text="on Emacs 24.5, so it actually has" start="00:06:42.880" video="mainVideo" id=subtitle]]
+[[!template text="the new advice system available" start="00:06:47.360" video="mainVideo" id=subtitle]]
+[[!template text="without having to add any dependency," start="00:06:49.280" video="mainVideo" id=subtitle]]
+[[!template text="so there's really no good reason" start="00:06:51.520" video="mainVideo" id=subtitle]]
+[[!template text="to keep this." start="00:06:53.599" video="mainVideo" id=subtitle]]
+[[!template text="So we just convert this" start="00:06:54.880" video="mainVideo" id=subtitle]]
+[[!template text="to an `advice-add`," start="00:06:56.160" video="mainVideo" id=subtitle]]
+[[!template text="so it just says, you know," start="00:06:58.560" video="mainVideo" id=subtitle]]
+[[!template text="this is the function that's advised." start="00:06:59.840" video="mainVideo" id=subtitle]]
+[[!template text="This was a `before` advice." start="00:07:02.319" video="mainVideo" id=subtitle]]
+[[!template text="The `before` advice, sometimes," start="00:07:04.560" video="mainVideo" id=subtitle]]
+[[!template text="when we convert it to `advice-add`," start="00:07:05.500" video="mainVideo" id=subtitle]]
+[[!template text="need to be converted to `around` advice." start="00:07:08.479" video="mainVideo" id=subtitle]]
+[[!template text="This is when the function" start="00:07:11.199" video="mainVideo" id=subtitle]]
+[[!template text="looks or modifies the argument." start="00:07:13.280" video="mainVideo" id=subtitle]]
+[[!template text="In this case, if I look at it," start="00:07:15.840" video="mainVideo" id=subtitle]]
+[[!template text="I see it doesn't seem to be using" start="00:07:18.639" video="mainVideo" id=subtitle]]
+[[!template text="the arguments at all." start="00:07:20.319" video="mainVideo" id=subtitle]]
+[[!template text="So I'm just going to keep it" start="00:07:21.280" video="mainVideo" id=subtitle]]
+[[!template text="as a `before` advice." start="00:07:25.280" video="mainVideo" id=subtitle]]
+[[!template text="And we have to give it a name." start="00:07:27.520" video="mainVideo" id=subtitle]]
+[[!template text="Well, we don't really have to," start="00:07:28.672" video="mainVideo" id=subtitle]]
+[[!template text="but it's convenient to give it a name" start="00:07:30.880" video="mainVideo" id=subtitle]]
+[[!template text="to the new function." start="00:07:32.800" video="mainVideo" id=subtitle]]
+[[!template text="So here, they actually had" start="00:07:34.800" video="mainVideo" id=subtitle]]
+[[!template text="given a name to the advice," start="00:07:36.880" video="mainVideo" id=subtitle]]
+[[!template text="so we're going to keep it," start="00:07:38.080" video="mainVideo" id=subtitle]]
+[[!template text="and indeed it's the only function." start="00:07:39.599" video="mainVideo" id=subtitle]]
+[[!template text="This name is not used as a function," start="00:07:41.440" video="mainVideo" id=subtitle]]
+[[!template text="so we can use it" start="00:07:43.360" video="mainVideo" id=subtitle]]
+[[!template text="as the name of the function." start="00:07:44.160" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to add a dash here" start="00:07:46.960" video="mainVideo" id=subtitle]]
+[[!template text="because I think this function" start="00:07:49.039" video="mainVideo" id=subtitle]]
+[[!template text="is really fundamentally" start="00:07:51.120" video="mainVideo" id=subtitle]]
+[[!template text="an internal function." start="00:07:53.039" video="mainVideo" id=subtitle]]
+[[!template text="So here I just said I add the advice," start="00:07:54.639" video="mainVideo" id=subtitle]]
+[[!template text="but I still need to actually" start="00:07:56.720" video="mainVideo" id=subtitle]]
+[[!template text="define the function." start="00:07:58.000" video="mainVideo" id=subtitle]]
+[[!template text="So that's what I do here," start="00:08:02.879" video="mainVideo" id=subtitle]]
+[[!template text="and we need here to list the arguments" start="00:08:04.160" video="mainVideo" id=subtitle]]
+[[!template text="that are going to be taken." start="00:08:06.500" video="mainVideo" id=subtitle]]
+[[!template text="I don't know what these are," start="00:08:08.240" video="mainVideo" id=subtitle]]
+[[!template text="but I know we're not using them," start="00:08:09.199" video="mainVideo" id=subtitle]]
+[[!template text="so we'll just accept anything," start="00:08:10.960" video="mainVideo" id=subtitle]]
+[[!template text="and that will do the trick." start="00:08:13.759" video="mainVideo" id=subtitle]]
+[[!template text="It's a future-proof as well," start="00:08:16.560" video="mainVideo" id=subtitle]]
+[[!template text="so that should work." start="00:08:19.199" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Oh, here we have another, so it's" start="00:08:22.240" video="mainVideo" id=subtitle]]
+[[!template text="basically the same story, I think." start="00:08:24.160" video="mainVideo" id=subtitle]]
+[[!template text="It's a `before` advice as well." start="00:08:29.919" video="mainVideo" id=subtitle]]
+[[!template text="It doesn't seem to be using" start="00:08:31.599" video="mainVideo" id=subtitle]]
+[[!template text="the argument at all," start="00:08:32.959" video="mainVideo" id=subtitle]]
+[[!template text="and let's see if this name is not taken." start="00:08:35.599" video="mainVideo" id=subtitle]]
+[[!template text="Yeah, good, so we can just do the same:" start="00:08:38.596" video="mainVideo" id=subtitle]]
+[[!template text="turn this into an `advice-add`..." start="00:08:43.360" video="mainVideo" id=subtitle]]
+[[!template text="`before`..." start="00:08:46.880" video="mainVideo" id=subtitle]]
+[[!template text="I just add a dash here." start="00:08:53.040" video="mainVideo" id=subtitle]]
+[[!template text="And same thing--" start="00:09:02.480" video="mainVideo" id=subtitle]]
+[[!template text="a function that just takes..." start="00:09:05.440" video="mainVideo" id=subtitle]]
+[[!template text="because I don't know which arguments" start="00:09:06.959" video="mainVideo" id=subtitle]]
+[[!template text="these are so..." start="00:09:08.240" video="mainVideo" id=subtitle]]
+[[!template text="I think that should do the trick." start="00:09:10.480" video="mainVideo" id=subtitle]]
+[[!template text="Actually, we see that this function" start="00:09:14.640" video="mainVideo" id=subtitle]]
+[[!template text="is very similar to the other one." start="00:09:16.080" video="mainVideo" id=subtitle]]
+[[!template text="Let's look at the two side-by-side..." start="00:09:18.560" video="mainVideo" id=subtitle]]
+[[!template text="...it really is--" start="00:09:31.519" video="mainVideo" id=subtitle]]
+[[!template text="oh, it's not exactly identical..." start="00:09:33.055" video="mainVideo" id=subtitle]]
+[[!template text="it's, you know, we could try" start="00:09:36.097" video="mainVideo" id=subtitle]]
+[[!template text="to merge them into a single function," start="00:09:39.120" video="mainVideo" id=subtitle]]
+[[!template text="but it's probably not worth the trouble" start="00:09:41.680" video="mainVideo" id=subtitle]]
+[[!template text="so we can keep it this way." start="00:09:43.279" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay, next warning: an `eval` again," start="00:09:45.920" video="mainVideo" id=subtitle]]
+[[!template text="so I could just add `t` here," start="00:09:48.720" video="mainVideo" id=subtitle]]
+[[!template text="but if you look at it a bit more," start="00:09:50.640" video="mainVideo" id=subtitle]]
+[[!template text="you see that the code" start="00:09:55.120" video="mainVideo" id=subtitle]]
+[[!template text="we're going to evaluate" start="00:09:56.000" video="mainVideo" id=subtitle]]
+[[!template text="using either lexical scoping" start="00:09:57.760" video="mainVideo" id=subtitle]]
+[[!template text="or dynamic scoping" start="00:09:59.279" video="mainVideo" id=subtitle]]
+[[!template text="is actually just evaluating a symbol," start="00:10:00.560" video="mainVideo" id=subtitle]]
+[[!template text="since we just call an `intern` here." start="00:10:03.440" video="mainVideo" id=subtitle]]
+[[!template text="So instead of replacing this" start="00:10:06.240" video="mainVideo" id=subtitle]]
+[[!template text="by adding an argument," start="00:10:07.839" video="mainVideo" id=subtitle]]
+[[!template text="I'm just going to call `symbol-value`" start="00:10:09.279" video="mainVideo" id=subtitle]]
+[[!template text="because that's exactly" start="00:10:11.680" video="mainVideo" id=subtitle]]
+[[!template text="what we need to do here, right." start="00:10:12.640" video="mainVideo" id=subtitle]]
+[[!template text="I call this &quot;strength reduction,&quot;" start="00:10:14.480" video="mainVideo" id=subtitle]]
+[[!template text="and I'm using" start="00:10:16.320" video="mainVideo" id=subtitle]]
+[[!template text="a more primitive function instead," start="00:10:17.200" video="mainVideo" id=subtitle]]
+[[!template text="which does just what we need," start="00:10:19.680" video="mainVideo" id=subtitle]]
+[[!template text="and this one knows that it has to be" start="00:10:23.200" video="mainVideo" id=subtitle]]
+[[!template text="accessed by dynamic scoping, of course." start="00:10:25.680" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Here I have a `kmacro-ring`," start="00:10:30.640" video="mainVideo" id=subtitle]]
+[[!template text="so here I have a function that uses--" start="00:10:32.959" video="mainVideo" id=subtitle]]
+[[!template text="`kmacro-ring` comes from" start="00:10:35.600" video="mainVideo" id=subtitle]]
+[[!template text="the `kmacro` package, obviously," start="00:10:37.360" video="mainVideo" id=subtitle]]
+[[!template text="and we probably don't want to" start="00:10:39.760" video="mainVideo" id=subtitle]]
+[[!template text="`require` `kmacro` package" start="00:10:41.600" video="mainVideo" id=subtitle]]
+[[!template text="all over the place in `counsel` itself," start="00:10:42.959" video="mainVideo" id=subtitle]]
+[[!template text="because `counsel` can be used" start="00:10:48.560" video="mainVideo" id=subtitle]]
+[[!template text="without `kmacro`." start="00:10:50.240" video="mainVideo" id=subtitle]]
+[[!template text="So I think we're just going to add" start="00:10:53.279" video="mainVideo" id=subtitle]]
+[[!template text="a `defvar` to silence the warning." start="00:10:55.200" video="mainVideo" id=subtitle]]
+[[!template text="And we have several more. So we have" start="00:11:05.519" video="mainVideo" id=subtitle]]
+[[!template text="`initial-counter-value`. (Sorry.)" start="00:11:10.720" video="mainVideo" id=subtitle]]
+[[!template text="We have `kmacro-counter`." start="00:11:20.480" video="mainVideo" id=subtitle]]
+[[!template text="Do we have more?" start="00:11:23.360" video="mainVideo" id=subtitle]]
+[[!template text="Oh, yes, we do." start="00:11:25.760" video="mainVideo" id=subtitle]]
+[[!template text="We have `kmacro-counter-value-start`" start="00:11:28.560" video="mainVideo" id=subtitle]]
+[[!template text="and `kmacro-counter-format-start`." start="00:11:35.040" video="mainVideo" id=subtitle]]
+[[!template text="Okay." start="00:11:40.839" video="mainVideo" id=subtitle]]
+[[!template text="I hope this is it." start="00:11:45.040" video="mainVideo" id=subtitle]]
+[[!template text="`kmacro-ring`, `counter`, `ring`..." start="00:11:50.160" video="mainVideo" id=subtitle]]
+[[!template text="blah blah blah." start="00:11:52.880" video="mainVideo" id=subtitle]]
+[[!template text="Here we have another one, `quote`." start="00:11:54.959" video="mainVideo" id=subtitle]]
+[[!template text="Here we have another hash missing." start="00:12:00.240" video="mainVideo" id=subtitle]]
+[[!template text="It's not missing..." start="00:12:03.279" video="mainVideo" id=subtitle]]
+[[!template text="but same thing here." start="00:12:06.079" video="mainVideo" id=subtitle]]
+[[!template text="Okay, this is a function from `kmacro`." start="00:12:12.079" video="mainVideo" id=subtitle]]
+[[!template text="We could declare it" start="00:12:16.560" video="mainVideo" id=subtitle]]
+[[!template text="just to silence the warning" start="00:12:18.079" video="mainVideo" id=subtitle]]
+[[!template text="although we don't actually..." start="00:12:20.880" video="mainVideo" id=subtitle]]
+[[!template text="normally, when we declare such things--" start="00:12:22.320" video="mainVideo" id=subtitle]]
+[[!template text="same thing with variables--" start="00:12:24.480" video="mainVideo" id=subtitle]]
+[[!template text="we should try to make sure that indeed" start="00:12:25.279" video="mainVideo" id=subtitle]]
+[[!template text="by the time the code is executed," start="00:12:27.300" video="mainVideo" id=subtitle]]
+[[!template text="the function will be available," start="00:12:28.760" video="mainVideo" id=subtitle]]
+[[!template text="and then very often is" start="00:12:30.800" video="mainVideo" id=subtitle]]
+[[!template text="because there's a `require`" start="00:12:32.800" video="mainVideo" id=subtitle]]
+[[!template text="sometimes inside a function," start="00:12:34.320" video="mainVideo" id=subtitle]]
+[[!template text="and so we should put" start="00:12:35.680" video="mainVideo" id=subtitle]]
+[[!template text="the `declare` function" start="00:12:36.399" video="mainVideo" id=subtitle]]
+[[!template text="right after the `require`," start="00:12:37.680" video="mainVideo" id=subtitle]]
+[[!template text="but I don't think it's the case here." start="00:12:39.920" video="mainVideo" id=subtitle]]
+[[!template text="So I'm just going to to add this." start="00:12:41.839" video="mainVideo" id=subtitle]]
+[[!template text="I know this comes from `kmacro`," start="00:12:46.399" video="mainVideo" id=subtitle]]
+[[!template text="and I could actually check the arguments." start="00:12:49.040" video="mainVideo" id=subtitle]]
+[[!template text="It's just taking an optional argument" start="00:12:56.320" video="mainVideo" id=subtitle]]
+[[!template text="so I'm going to put it there," start="00:12:58.480" video="mainVideo" id=subtitle]]
+[[!template text="so we have it complete." start="00:13:00.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay, we can just recompile," start="00:13:06.720" video="mainVideo" id=subtitle]]
+[[!template text="see what is left" start="00:13:10.800" video="mainVideo" id=subtitle]]
+[[!template text="from those warnings we've fixed," start="00:13:14.800" video="mainVideo" id=subtitle]]
+[[!template text="and we may have new warnings, in any case," start="00:13:17.760" video="mainVideo" id=subtitle]]
+[[!template text="because especially when we add the hashes," start="00:13:21.360" video="mainVideo" id=subtitle]]
+[[!template text="it tends to give us more warnings." start="00:13:25.440" video="mainVideo" id=subtitle]]
+[[!template text="So we have two more functions" start="00:13:29.519" video="mainVideo" id=subtitle]]
+[[!template text="which are not known." start="00:13:31.200" video="mainVideo" id=subtitle]]
+[[!template text="You can just add them here..." start="00:13:34.560" video="mainVideo" id=subtitle]]
+[[!template text="`set-format &quot;kmacro&quot;`" start="00:13:39.440" video="mainVideo" id=subtitle]]
+[[!template text="and same thing for `set-counter`." start="00:13:44.720" video="mainVideo" id=subtitle]]
+[[!template text="Okay, whatever." start="00:13:48.160" video="mainVideo" id=subtitle]]
+[[!template text="This just takes a `format` argument," start="00:13:54.959" video="mainVideo" id=subtitle]]
+[[!template text="and this one just takes an `arg` argument." start="00:13:57.120" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so let's see what this says now." start="00:14:05.920" video="mainVideo" id=subtitle]]
+[[!template text="Hopefully, there's no warnings anymore." start="00:14:10.800" video="mainVideo" id=subtitle]]
+[[!template text="We're done. Okay!" start="00:14:15.519" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay, the last one we're going to see" start="00:14:17.839" video="mainVideo" id=subtitle]]
+[[!template text="is in `enwc`, I saw the other day..." start="00:14:20.079" video="mainVideo" id=subtitle]]
+[[!template text="I think I have it here..." start="00:14:23.440" video="mainVideo" id=subtitle]]
+[[!template text="here we go, yes..." start="00:14:27.760" video="mainVideo" id=subtitle]]
+[[!template text="so `enwc` is an interesting package here" start="00:14:29.680" video="mainVideo" id=subtitle]]
+[[!template text="because it has-- as you can see it has--" start="00:14:32.800" video="mainVideo" id=subtitle]]
+[[!template text="it's lexical binding," start="00:14:35.680" video="mainVideo" id=subtitle]]
+[[!template text="but actually some of the files in it" start="00:14:37.760" video="mainVideo" id=subtitle]]
+[[!template text="do not use lexical binding," start="00:14:39.760" video="mainVideo" id=subtitle]]
+[[!template text="so it has been partly converted" start="00:14:42.320" video="mainVideo" id=subtitle]]
+[[!template text="but not completely." start="00:14:44.320" video="mainVideo" id=subtitle]]
+[[!template text="So here I'm going to" start="00:14:46.160" video="mainVideo" id=subtitle]]
+[[!template text="enable lexical binding." start="00:14:49.920" video="mainVideo" id=subtitle]]
+[[!template text="I have also, I think, in `cm`..." start="00:14:54.160" video="mainVideo" id=subtitle]]
+[[!template text="yes..." start="00:14:58.880" video="mainVideo" id=subtitle]]
+[[!template text="so I enable it here," start="00:15:01.199" video="mainVideo" id=subtitle]]
+[[!template text="and also, I think, `test`." start="00:15:04.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The test files are often" start="00:15:07.360" video="mainVideo" id=subtitle]]
+[[!template text="somewhat problematic" start="00:15:09.360" video="mainVideo" id=subtitle]]
+[[!template text="because very often they're not quite" start="00:15:11.839" video="mainVideo" id=subtitle]]
+[[!template text="as heavily tested themselves, actually," start="00:15:15.199" video="mainVideo" id=subtitle]]
+[[!template text="or they only run" start="00:15:18.880" video="mainVideo" id=subtitle]]
+[[!template text="in very specific contexts," start="00:15:20.320" video="mainVideo" id=subtitle]]
+[[!template text="and so they may have problems" start="00:15:22.160" video="mainVideo" id=subtitle]]
+[[!template text="with missing `requires` or using packages" start="00:15:24.399" video="mainVideo" id=subtitle]]
+[[!template text="which are not explicitly in the dependencies" start="00:15:27.360" video="mainVideo" id=subtitle]]
+[[!template text="and those kinds of things." start="00:15:29.199" video="mainVideo" id=subtitle]]
+[[!template text="I think this is not the case here," start="00:15:31.279" video="mainVideo" id=subtitle]]
+[[!template text="but we'll see." start="00:15:33.360" video="mainVideo" id=subtitle]]
+[[!template text="`enwc`..." start="00:15:35.440" video="mainVideo" id=subtitle]]
+[[!template text="Yes, I want to save this one and that one." start="00:15:38.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's see what it says." start="00:15:42.320" video="mainVideo" id=subtitle]]
+[[!template text="Okay, unused lexical variable `x`..." start="00:15:47.199" video="mainVideo" id=subtitle]]
+[[!template text="`x`..." start="00:15:51.440" video="mainVideo" id=subtitle]]
+[[!template text="Yes, so here we have an unused variable," start="00:15:52.240" video="mainVideo" id=subtitle]]
+[[!template text="and indeed, it's not used." start="00:15:57.120" video="mainVideo" id=subtitle]]
+[[!template text="It probably had to be named before" start="00:15:58.320" video="mainVideo" id=subtitle]]
+[[!template text="because it was..." start="00:16:00.880" video="mainVideo" id=subtitle]]
+[[!template text="with dynamic scoping," start="00:16:04.079" video="mainVideo" id=subtitle]]
+[[!template text="the `dotimes` requires" start="00:16:05.120" video="mainVideo" id=subtitle]]
+[[!template text="the variable to be named, actually," start="00:16:06.399" video="mainVideo" id=subtitle]]
+[[!template text="because it's used internally somehow," start="00:16:08.160" video="mainVideo" id=subtitle]]
+[[!template text="but with lexical scoping," start="00:16:10.399" video="mainVideo" id=subtitle]]
+[[!template text="that's not the case," start="00:16:11.600" video="mainVideo" id=subtitle]]
+[[!template text="so we can just put an underscore." start="00:16:12.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I'm going to change this" start="00:16:14.079" video="mainVideo" id=subtitle]]
+[[!template text="because I really don't like" start="00:16:15.199" video="mainVideo" id=subtitle]]
+[[!template text="this three-part `dotimes`." start="00:16:16.880" video="mainVideo" id=subtitle]]
+[[!template text="I prefer to have" start="00:16:19.000" video="mainVideo" id=subtitle]]
+[[!template text="the return value at the end." start="00:16:21.360" video="mainVideo" id=subtitle]]
+[[!template text="It's sort of stashed hidden in the middle." start="00:16:23.040" video="mainVideo" id=subtitle]]
+[[!template text="That's just a personal preference." start="00:16:26.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay, what else... we have a `widget`." start="00:16:29.680" video="mainVideo" id=subtitle]]
+[[!template text="Okay, this argument here says that" start="00:16:31.920" video="mainVideo" id=subtitle]]
+[[!template text="it's not used, so if we look at..." start="00:16:34.000" video="mainVideo" id=subtitle]]
+[[!template text="We were here, right? Yes. Right here." start="00:16:44.320" video="mainVideo" id=subtitle]]
+[[!template text="Indeed, `widget` is really not used." start="00:16:47.040" video="mainVideo" id=subtitle]]
+[[!template text="(Sorry.)" start="00:16:50.480" video="mainVideo" id=subtitle]]
+[[!template text="Here's what I get for using" start="00:16:53.600" video="mainVideo" id=subtitle]]
+[[!template text="a somewhat vanilla configuration of Emacs," start="00:16:55.279" video="mainVideo" id=subtitle]]
+[[!template text="compared to the one I use..." start="00:16:58.320" video="mainVideo" id=subtitle]]
+[[!template text="the personally tricked one." start="00:17:01.279" video="mainVideo" id=subtitle]]
+[[!template text="Actually, I can..." start="00:17:04.000" video="mainVideo" id=subtitle]]
+[[!template text="so we can just mark this argument" start="00:17:05.439" video="mainVideo" id=subtitle]]
+[[!template text="as unused," start="00:17:07.919" video="mainVideo" id=subtitle]]
+[[!template text="and we don't want to remove the argument" start="00:17:09.360" video="mainVideo" id=subtitle]]
+[[!template text="probably, or maybe we could;" start="00:17:11.199" video="mainVideo" id=subtitle]]
+[[!template text="we could see where the function is used," start="00:17:12.480" video="mainVideo" id=subtitle]]
+[[!template text="and here we see that it's passed" start="00:17:15.679" video="mainVideo" id=subtitle]]
+[[!template text="to a higher-order function," start="00:17:18.542" video="mainVideo" id=subtitle]]
+[[!template text="basically, so it's going to be..." start="00:17:20.959" video="mainVideo" id=subtitle]]
+[[!template text="We can't really change" start="00:17:24.480" video="mainVideo" id=subtitle]]
+[[!template text="the calling convention" start="00:17:25.360" video="mainVideo" id=subtitle]]
+[[!template text="so we have to mark the argument" start="00:17:25.760" video="mainVideo" id=subtitle]]
+[[!template text="as being just an unused argument," start="00:17:27.120" video="mainVideo" id=subtitle]]
+[[!template text="but we're going to still receive it." start="00:17:29.600" video="mainVideo" id=subtitle]]
+[[!template text="And here it says same thing:" start="00:17:34.000" video="mainVideo" id=subtitle]]
+[[!template text="that `widget` is not used in this function." start="00:17:35.360" video="mainVideo" id=subtitle]]
+[[!template text="Let's take a look at the function." start="00:17:38.240" video="mainVideo" id=subtitle]]
+[[!template text="Indeed it seems it's not used," start="00:17:40.000" video="mainVideo" id=subtitle]]
+[[!template text="and so we're just going to mark it" start="00:17:42.400" video="mainVideo" id=subtitle]]
+[[!template text="as unused." start="00:17:44.000" video="mainVideo" id=subtitle]]
+[[!template text="This is the part of the conversion" start="00:17:46.480" video="mainVideo" id=subtitle]]
+[[!template text="to lexical scoping" start="00:17:48.320" video="mainVideo" id=subtitle]]
+[[!template text="that's somewhat tricky sometimes" start="00:17:49.200" video="mainVideo" id=subtitle]]
+[[!template text="because we don't really know" start="00:17:51.280" video="mainVideo" id=subtitle]]
+[[!template text="whether this variable should be using" start="00:17:53.760" video="mainVideo" id=subtitle]]
+[[!template text="lexical scoping or dynamic scoping." start="00:17:56.240" video="mainVideo" id=subtitle]]
+[[!template text="The fact that it's not used" start="00:17:58.559" video="mainVideo" id=subtitle]]
+[[!template text="is a hint that there's probably" start="00:18:00.480" video="mainVideo" id=subtitle]]
+[[!template text="something going on," start="00:18:02.320" video="mainVideo" id=subtitle]]
+[[!template text="so either it's not used" start="00:18:03.679" video="mainVideo" id=subtitle]]
+[[!template text="because it should be using" start="00:18:04.960" video="mainVideo" id=subtitle]]
+[[!template text="dynamic scoping--" start="00:18:06.400" video="mainVideo" id=subtitle]]
+[[!template text="it is going to be used" start="00:18:07.200" video="mainVideo" id=subtitle]]
+[[!template text="by some other code somewhere else--" start="00:18:08.080" video="mainVideo" id=subtitle]]
+[[!template text="or it's really not used" start="00:18:10.480" video="mainVideo" id=subtitle]]
+[[!template text="because it's just not used, right," start="00:18:11.840" video="mainVideo" id=subtitle]]
+[[!template text="and so we need to distinguish the two," start="00:18:14.000" video="mainVideo" id=subtitle]]
+[[!template text="and for that, I basically use" start="00:18:16.320" video="mainVideo" id=subtitle]]
+[[!template text="my own judgment." start="00:18:20.880" video="mainVideo" id=subtitle]]
+[[!template text="This is based typically on the fact that" start="00:18:22.240" video="mainVideo" id=subtitle]]
+[[!template text="this is just a very short name," start="00:18:24.880" video="mainVideo" id=subtitle]]
+[[!template text="and most local identifiers use short names," start="00:18:27.760" video="mainVideo" id=subtitle]]
+[[!template text="whereas item values used for dynamic scoping" start="00:18:32.000" video="mainVideo" id=subtitle]]
+[[!template text="typically have a package prefix" start="00:18:34.400" video="mainVideo" id=subtitle]]
+[[!template text="or something like this." start="00:18:36.720" video="mainVideo" id=subtitle]]
+[[!template text="So the fact that it's a short name" start="00:18:37.679" video="mainVideo" id=subtitle]]
+[[!template text="gives me a good idea." start="00:18:38.960" video="mainVideo" id=subtitle]]
+[[!template text="Here in this case," start="00:18:40.880" video="mainVideo" id=subtitle]]
+[[!template text="I actually look at the code," start="00:18:41.520" video="mainVideo" id=subtitle]]
+[[!template text="and we see that there's nothing in here" start="00:18:42.640" video="mainVideo" id=subtitle]]
+[[!template text="that may actually refer" start="00:18:45.600" video="mainVideo" id=subtitle]]
+[[!template text="to this variable `widget`," start="00:18:47.039" video="mainVideo" id=subtitle]]
+[[!template text="so I think it's safe," start="00:18:48.080" video="mainVideo" id=subtitle]]
+[[!template text="but in the general case," start="00:18:49.280" video="mainVideo" id=subtitle]]
+[[!template text="we may look here and be surprised," start="00:18:51.360" video="mainVideo" id=subtitle]]
+[[!template text="or, you know, you may call out" start="00:18:54.400" video="mainVideo" id=subtitle]]
+[[!template text="the functions which may themselves end up" start="00:18:55.760" video="mainVideo" id=subtitle]]
+[[!template text="referring to this variable." start="00:18:58.320" video="mainVideo" id=subtitle]]
+[[!template text="So sometimes we need to investigate a" start="00:19:00.080" video="mainVideo" id=subtitle]]
+[[!template text="little more." start="00:19:02.640" video="mainVideo" id=subtitle]]
+[[!template text="We are most of the time not completely sure" start="00:19:03.840" video="mainVideo" id=subtitle]]
+[[!template text="whether the result is correct or not," start="00:19:05.919" video="mainVideo" id=subtitle]]
+[[!template text="of course, so the other thing" start="00:19:07.520" video="mainVideo" id=subtitle]]
+[[!template text="you may want to check" start="00:19:09.520" video="mainVideo" id=subtitle]]
+[[!template text="is also uses of things" start="00:19:10.640" video="mainVideo" id=subtitle]]
+[[!template text="like `eval` or `symbol-value`." start="00:19:12.160" video="mainVideo" id=subtitle]]
+[[!template text="So it's often a good idea to search," start="00:19:14.400" video="mainVideo" id=subtitle]]
+[[!template text="and you do a search of `eval`," start="00:19:17.200" video="mainVideo" id=subtitle]]
+[[!template text="and you see here it's using `eval`." start="00:19:18.799" video="mainVideo" id=subtitle]]
+[[!template text="Hmmm... Okay, so what does this `eval` do?" start="00:19:21.490" video="mainVideo" id=subtitle]]
+[[!template text="It's evaluating expressions" start="00:19:24.160" video="mainVideo" id=subtitle]]
+[[!template text="that appear in `args` here" start="00:19:25.760" video="mainVideo" id=subtitle]]
+[[!template text="so you can see where those args come from," start="00:19:28.240" video="mainVideo" id=subtitle]]
+[[!template text="and we see here, these are expressions" start="00:19:31.840" video="mainVideo" id=subtitle]]
+[[!template text="that don't do anything very special." start="00:19:35.120" video="mainVideo" id=subtitle]]
+[[!template text="It's just using `make-supplicant-choice`," start="00:19:36.840" video="mainVideo" id=subtitle]]
+[[!template text="and `make-supplicant-choice` itself" start="00:19:41.520" video="mainVideo" id=subtitle]]
+[[!template text="just doesn't refer to `widget`, for example," start="00:19:44.960" video="mainVideo" id=subtitle]]
+[[!template text="so you know we should be safe," start="00:19:47.120" video="mainVideo" id=subtitle]]
+[[!template text="but while I'm here..." start="00:19:50.000" video="mainVideo" id=subtitle]]
+[[!template text="okay, well, then we can do that later." start="00:19:52.559" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Well, that's actually the next warning," start="00:19:53.840" video="mainVideo" id=subtitle]]
+[[!template text="exactly. So here we see that this is" start="00:19:55.679" video="mainVideo" id=subtitle]]
+[[!template text="using the dynamically-scoped dialect," start="00:19:58.080" video="mainVideo" id=subtitle]]
+[[!template text="so we convert it to lexical-scoped." start="00:20:00.000" video="mainVideo" id=subtitle]]
+[[!template text="Of course, this may introduce errors," start="00:20:02.799" video="mainVideo" id=subtitle]]
+[[!template text="but we hope it doesn't." start="00:20:04.559" video="mainVideo" id=subtitle]]
+[[!template text="And actually, it was a good change here," start="00:20:07.200" video="mainVideo" id=subtitle]]
+[[!template text="because if you see again," start="00:20:08.880" video="mainVideo" id=subtitle]]
+[[!template text="this actually evals expressions" start="00:20:12.080" video="mainVideo" id=subtitle]]
+[[!template text="that appear here in `args`," start="00:20:14.240" video="mainVideo" id=subtitle]]
+[[!template text="and so these are expressions" start="00:20:16.159" video="mainVideo" id=subtitle]]
+[[!template text="that are passed here." start="00:20:18.480" video="mainVideo" id=subtitle]]
+[[!template text="So this expression here used to be" start="00:20:21.039" video="mainVideo" id=subtitle]]
+[[!template text="evaluated with dynamic scoping," start="00:20:23.679" video="mainVideo" id=subtitle]]
+[[!template text="even though it appears to be normal code" start="00:20:24.480" video="mainVideo" id=subtitle]]
+[[!template text="within this file, which says" start="00:20:28.000" video="mainVideo" id=subtitle]]
+[[!template text="it's using lexical scoping," start="00:20:29.760" video="mainVideo" id=subtitle]]
+[[!template text="and so there are some remnants" start="00:20:32.559" video="mainVideo" id=subtitle]]
+[[!template text="of dynamic scoping all over the place" start="00:20:34.400" video="mainVideo" id=subtitle]]
+[[!template text="in Emacs still, because we have" start="00:20:36.640" video="mainVideo" id=subtitle]]
+[[!template text="those calls of `eval` with a nil argument." start="00:20:37.840" video="mainVideo" id=subtitle]]
+[[!template text="Here we have `cons`..." start="00:20:44.880" video="mainVideo" id=subtitle]]
+[[!template text="that needs to be `hash quoted`." start="00:20:47.039" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Oh, and we have a reference" start="00:20:52.400" video="mainVideo" id=subtitle]]
+[[!template text="to this variable `enwc-edit-id'." start="00:20:54.080" video="mainVideo" id=subtitle]]
+[[!template text="So this is clearly" start="00:20:56.720" video="mainVideo" id=subtitle]]
+[[!template text="a dynamic-scoped variable." start="00:20:57.520" video="mainVideo" id=subtitle]]
+[[!template text="We can either add a `defvar`" start="00:21:00.400" video="mainVideo" id=subtitle]]
+[[!template text="to silence the warning," start="00:21:02.000" video="mainVideo" id=subtitle]]
+[[!template text="or maybe we can `require` the package." start="00:21:03.440" video="mainVideo" id=subtitle]]
+[[!template text="The file that defines it..." start="00:21:06.799" video="mainVideo" id=subtitle]]
+[[!template text="So let's see where it's defined." start="00:21:14.080" video="mainVideo" id=subtitle]]
+[[!template text="Here it's defined in `enwc.el`," start="00:21:17.360" video="mainVideo" id=subtitle]]
+[[!template text="so I'm going to try just to add" start="00:21:21.200" video="mainVideo" id=subtitle]]
+[[!template text="the dependency." start="00:21:23.440" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to `require` here. This is risky." start="00:21:25.039" video="mainVideo" id=subtitle]]
+[[!template text="We'll see when we compile a file later," start="00:21:27.840" video="mainVideo" id=subtitle]]
+[[!template text="we may get a circular dependency" start="00:21:30.159" video="mainVideo" id=subtitle]]
+[[!template text="because of it." start="00:21:32.320" video="mainVideo" id=subtitle]]
+[[!template text="If that's the case, we're going to" start="00:21:34.720" video="mainVideo" id=subtitle]]
+[[!template text="have to remove this `require`" start="00:21:36.320" video="mainVideo" id=subtitle]]
+[[!template text="and instead put `defvar`s." start="00:21:38.320" video="mainVideo" id=subtitle]]
+[[!template text="Sometimes it's worth actually" start="00:21:42.000" video="mainVideo" id=subtitle]]
+[[!template text="looking further at the various files" start="00:21:42.559" video="mainVideo" id=subtitle]]
+[[!template text="to see how to redefine the dependencies" start="00:21:44.640" video="mainVideo" id=subtitle]]
+[[!template text="to break those circular dependencies," start="00:21:48.080" video="mainVideo" id=subtitle]]
+[[!template text="but it's often not really" start="00:21:49.840" video="mainVideo" id=subtitle]]
+[[!template text="worth the trouble." start="00:21:52.320" video="mainVideo" id=subtitle]]
+[[!template text="Oh, no, that's not what--" start="00:21:55.679" video="mainVideo" id=subtitle]]
+[[!template text="I'm not going to the right place..." start="00:21:58.400" video="mainVideo" id=subtitle]]
+[[!template text="Here I was. So here `edit-map`." start="00:22:01.440" video="mainVideo" id=subtitle]]
+[[!template text="Well, we can probably..." start="00:22:07.039" video="mainVideo" id=subtitle]]
+[[!template text="it may disappear or..." start="00:22:09.760" video="mainVideo" id=subtitle]]
+[[!template text="oh, I see." start="00:22:12.159" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so this `edit-map` actually is" start="00:22:13.760" video="mainVideo" id=subtitle]]
+[[!template text="defined in this very file." start="00:22:16.320" video="mainVideo" id=subtitle]]
+[[!template text="It's just that it's defined later." start="00:22:18.559" video="mainVideo" id=subtitle]]
+[[!template text="So all we need to do" start="00:22:20.240" video="mainVideo" id=subtitle]]
+[[!template text="is to move this definition" start="00:22:21.600" video="mainVideo" id=subtitle]]
+[[!template text="to before its first use," start="00:22:24.320" video="mainVideo" id=subtitle]]
+[[!template text="since otherwise it's going to be taken" start="00:22:27.200" video="mainVideo" id=subtitle]]
+[[!template text="as lexically-scoped, which we don't want." start="00:22:28.960" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And while I'm here, I see this `copy-keymap`." start="00:22:33.520" video="mainVideo" id=subtitle]]
+[[!template text="I don't like `copy-keymap`," start="00:22:35.360" video="mainVideo" id=subtitle]]
+[[!template text="so I'm going to change this" start="00:22:38.400" video="mainVideo" id=subtitle]]
+[[!template text="to a normal keymap," start="00:22:40.960" video="mainVideo" id=subtitle]]
+[[!template text="and then I'm just going to use" start="00:22:44.080" video="mainVideo" id=subtitle]]
+[[!template text="`set-keymap-parent` instead of `copy-keymap`" start="00:22:46.159" video="mainVideo" id=subtitle]]
+[[!template text="to get basically the same result," start="00:22:50.080" video="mainVideo" id=subtitle]]
+[[!template text="but without having copied anything." start="00:22:51.600" video="mainVideo" id=subtitle]]
+[[!template text="And this one will disappear..." start="00:22:55.280" video="mainVideo" id=subtitle]]
+[[!template text="this one as well-- or should hopefully," start="00:22:57.760" video="mainVideo" id=subtitle]]
+[[!template text="thanks to the `require`." start="00:23:00.240" video="mainVideo" id=subtitle]]
+[[!template text="Here we have a `hash` missing," start="00:23:03.360" video="mainVideo" id=subtitle]]
+[[!template text="and we have some functions" start="00:23:09.840" video="mainVideo" id=subtitle]]
+[[!template text="which are unknown," start="00:23:11.840" video="mainVideo" id=subtitle]]
+[[!template text="so let's see..." start="00:23:14.000" video="mainVideo" id=subtitle]]
+[[!template text="Where is this function defined?" start="00:23:14.666" video="mainVideo" id=subtitle]]
+[[!template text="Nowhere. Huh, wonderful, okay." start="00:23:18.240" video="mainVideo" id=subtitle]]
+[[!template text="So we'll just leave it like it is," start="00:23:21.679" video="mainVideo" id=subtitle]]
+[[!template text="and that's going to be" start="00:23:25.200" video="mainVideo" id=subtitle]]
+[[!template text="for the author of the package to fix." start="00:23:27.120" video="mainVideo" id=subtitle]]
+[[!template text="How about this one?" start="00:23:31.360" video="mainVideo" id=subtitle]]
+[[!template text="Oh, okay, so it's defined in `enwc.el`" start="00:23:37.120" video="mainVideo" id=subtitle]]
+[[!template text="so presumably," start="00:23:40.240" video="mainVideo" id=subtitle]]
+[[!template text="this is going to disappear as well." start="00:23:41.679" video="mainVideo" id=subtitle]]
+[[!template text="One more..." start="00:23:50.159" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so this one" start="00:23:56.159" video="mainVideo" id=subtitle]]
+[[!template text="is just like the previous one." start="00:23:58.640" video="mainVideo" id=subtitle]]
+[[!template text="We're going to leave it at that." start="00:23:59.919" video="mainVideo" id=subtitle]]
+[[!template text="And this is it! Huh, wonderful." start="00:24:04.000" video="mainVideo" id=subtitle]]
+[[!template text="So let's recompile." start="00:24:06.720" video="mainVideo" id=subtitle]]
+[[!template text="Oh, we have a warning for `fin`." start="00:24:16.080" video="mainVideo" id=subtitle]]
+[[!template text="This variable seems not to be used" start="00:24:25.679" video="mainVideo" id=subtitle]]
+[[!template text="anywhere in the file, so we're just" start="00:24:28.640" video="mainVideo" id=subtitle]]
+[[!template text="going to remove it." start="00:24:32.000" video="mainVideo" id=subtitle]]
+[[!template text="I leave it there just in case" start="00:24:33.440" video="mainVideo" id=subtitle]]
+[[!template text="someone needs later on" start="00:24:34.880" video="mainVideo" id=subtitle]]
+[[!template text="to look for a `fin` variable" start="00:24:36.000" video="mainVideo" id=subtitle]]
+[[!template text="to see where it used to be." start="00:24:37.679" video="mainVideo" id=subtitle]]
+[[!template text="Again, you know, maybe it's actually used..." start="00:24:39.760" video="mainVideo" id=subtitle]]
+[[!template text="yeah, dynamic scoping somehow," start="00:24:41.600" video="mainVideo" id=subtitle]]
+[[!template text="but given the short name," start="00:24:43.519" video="mainVideo" id=subtitle]]
+[[!template text="I presume this is not the case." start="00:24:46.159" video="mainVideo" id=subtitle]]
+[[!template text="Here, oh, that's the code removed" start="00:24:48.960" video="mainVideo" id=subtitle]]
+[[!template text="that had a hash missing." start="00:24:51.200" video="mainVideo" id=subtitle]]
+[[!template text="That's the one that's not defined." start="00:24:52.559" video="mainVideo" id=subtitle]]
+[[!template text="This one is not defined," start="00:24:54.159" video="mainVideo" id=subtitle]]
+[[!template text="and this is it." start="00:24:56.799" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's make a last recompilation" start="00:24:58.000" video="mainVideo" id=subtitle]]
+[[!template text="to see if we missed yet something else." start="00:25:03.039" video="mainVideo" id=subtitle]]
+[[!template text="Nope, and that's it, okay." start="00:25:06.080" video="mainVideo" id=subtitle]]
+[[!template text="Well, here we go; we're done." start="00:25:07.919" video="mainVideo" id=subtitle]]
+[[!template text="Okay so this was it." start="00:25:11.200" video="mainVideo" id=subtitle]]
+[[!template text="You've seen, I think," start="00:25:14.240" video="mainVideo" id=subtitle]]
+[[!template text="pretty much examples of all of those," start="00:25:15.440" video="mainVideo" id=subtitle]]
+[[!template text="and I hope you enjoyed it." start="00:25:18.000" video="mainVideo" id=subtitle]]
+[[!template text="Lessons to take home:" start="00:25:20.960" video="mainVideo" id=subtitle]]
+[[!template text="use the byte compiler." start="00:25:22.580" video="mainVideo" id=subtitle]]
+[[!template text="You can also use `flymake-mode` instead." start="00:25:23.919" video="mainVideo" id=subtitle]]
+[[!template text="I recommend enabling it as much as you can," start="00:25:26.000" video="mainVideo" id=subtitle]]
+[[!template text="and head the warnings." start="00:25:31.600" video="mainVideo" id=subtitle]]
+[[!template text="Follow the warnings. Try to fix them." start="00:25:33.520" video="mainVideo" id=subtitle]]
+[[!template text="If you can fix all of the warnings," start="00:25:35.440" video="mainVideo" id=subtitle]]
+[[!template text="it's always much better," start="00:25:37.200" video="mainVideo" id=subtitle]]
+[[!template text="because then the new warnings" start="00:25:38.080" video="mainVideo" id=subtitle]]
+[[!template text="really show up." start="00:25:39.200" video="mainVideo" id=subtitle]]
+[[!template text="And once you've done it, it's really" start="00:25:40.960" video="mainVideo" id=subtitle]]
+[[!template text="kind of-- because there's always" start="00:25:42.880" video="mainVideo" id=subtitle]]
+[[!template text="new things coming up." start="00:25:44.559" video="mainVideo" id=subtitle]]
+[[!template text="And I think this is it." start="00:25:46.799" video="mainVideo" id=subtitle]]
+[[!template text="I hope you liked it, and thank you" start="00:25:48.799" video="mainVideo" id=subtitle]]
+[[!template text="for attending this presentation. Bye." start="00:25:50.720" video="mainVideo" id=subtitle]]
+[[!template text="(captions by Hannah Miller)" start="00:25:56.000" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/maintainers.md b/2021/captions/maintainers.md
new file mode 100644
index 00000000..787165b5
--- /dev/null
+++ b/2021/captions/maintainers.md
@@ -0,0 +1,246 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hello, I'm Bastien Guerry," start="00:00:00.799" video="mainVideo" id=subtitle]]
+[[!template text="and I'm very happy to be here." start="00:00:02.734" video="mainVideo" id=subtitle]]
+[[!template text="I've been the Org-mode maintainer" start="00:00:04.701" video="mainVideo" id=subtitle]]
+[[!template text="for the last 10 years," start="00:00:07.734" video="mainVideo" id=subtitle]]
+[[!template text="and I would like to ask the question" start="00:00:09.501" video="mainVideo" id=subtitle]]
+[[!template text="how to help GNU Emacs maintainers in general." start="00:00:11.368" video="mainVideo" id=subtitle]]
+[[!template text="By GNU Emacs, I mean" start="00:00:14.400" video="mainVideo" id=subtitle]]
+[[!template text="the whole GNU Emacs ecosystem," start="00:00:15.519" video="mainVideo" id=subtitle]]
+[[!template text="including packages," start="00:00:18.080" video="mainVideo" id=subtitle]]
+[[!template text="not just the core GNU Emacs" start="00:00:19.520" video="mainVideo" id=subtitle]]
+[[!template text="that we all love." start="00:00:21.039" video="mainVideo" id=subtitle]]
+[[!template text="After a decade of dealing with" start="00:00:24.880" video="mainVideo" id=subtitle]]
+[[!template text="the Org community," start="00:00:28.268" video="mainVideo" id=subtitle]]
+[[!template text="my view of what a maintainer is changed." start="00:00:29.368" video="mainVideo" id=subtitle]]
+[[!template text="I'd like to share some ideas with you" start="00:00:32.934" video="mainVideo" id=subtitle]]
+[[!template text="as I think they could be useful" start="00:00:35.101" video="mainVideo" id=subtitle]]
+[[!template text="to help Emacs maintainers in general." start="00:00:37.234" video="mainVideo" id=subtitle]]
+[[!template text="And hopefully, these ideas also apply" start="00:00:39.201" video="mainVideo" id=subtitle]]
+[[!template text="to other free software projects," start="00:00:41.968" video="mainVideo" id=subtitle]]
+[[!template text="at least those where contributors" start="00:00:43.601" video="mainVideo" id=subtitle]]
+[[!template text="are all volunteers." start="00:00:45.901" video="mainVideo" id=subtitle]]
+[[!template new="1" text="First of all, what is a free software maintainer?<br />" start="00:00:47.568" video="mainVideo" id=subtitle]]
+[[!template text="\- Obviously this is some rich dude" start="00:00:51.368" video="mainVideo" id=subtitle]]
+[[!template text="with a lot of free time<br />" start="00:00:54.601" video="mainVideo" id=subtitle]]
+[[!template text="\- Acting both as a supersmart hacker" start="00:00:56.268" video="mainVideo" id=subtitle]]
+[[!template text="and a super-patient community manager<br />" start="00:00:58.968" video="mainVideo" id=subtitle]]
+[[!template text="\- Someone who acts as the central hotline" start="00:01:02.401" video="mainVideo" id=subtitle]]
+[[!template text="for users and contributors<br />" start="00:01:05.101" video="mainVideo" id=subtitle]]
+[[!template text="\- Who knows how to write many emails," start="00:01:06.901" video="mainVideo" id=subtitle]]
+[[!template text="probably at the same time<br />" start="00:01:09.568" video="mainVideo" id=subtitle]]
+[[!template text="\- Who does not hesitate" start="00:01:11.468" video="mainVideo" id=subtitle]]
+[[!template text="to publicly scold annoying users<br />" start="00:01:14.101" video="mainVideo" id=subtitle]]
+[[!template text="\- and someone narcissistic enough" start="00:01:16.934" video="mainVideo" id=subtitle]]
+[[!template text="to seek credits for community efforts<br />" start="00:01:19.801" video="mainVideo" id=subtitle]]
+[[!template text="\- But really looking for a job" start="00:01:22.668" video="mainVideo" id=subtitle]]
+[[!template text="in some big IT company<br />" start="00:01:26.034" video="mainVideo" id=subtitle]]
+[[!template text="Right? Well... no. That was a joke." start="00:01:27.768" video="mainVideo" id=subtitle]]
+[[!template text="But maybe you did smile" start="00:01:32.234" video="mainVideo" id=subtitle]]
+[[!template text="and that's probably" start="00:01:34.601" video="mainVideo" id=subtitle]]
+[[!template text="because there is some truth to it." start="00:01:36.634" video="mainVideo" id=subtitle]]
+[[!template text="Why? Because our culture encourages" start="00:01:39.401" video="mainVideo" id=subtitle]]
+[[!template text="free software users and casual contributors" start="00:01:43.834" video="mainVideo" id=subtitle]]
+[[!template text="to think about maintainers this way." start="00:01:45.634" video="mainVideo" id=subtitle]]
+[[!template text="Don't we continue to use the expression" start="00:01:47.868" video="mainVideo" id=subtitle]]
+[[!template text="“Benevolent Dictator For Life”?" start="00:01:51.568" video="mainVideo" id=subtitle]]
+[[!template text="This is what I'd call" start="00:01:54.001" video="mainVideo" id=subtitle]]
+[[!template text="the “Spiderman syndrome”:" start="00:01:56.434" video="mainVideo" id=subtitle]]
+[[!template text="maintenance is perceived in terms of" start="00:01:58.068" video="mainVideo" id=subtitle]]
+[[!template text="great power and great responsibility." start="00:02:01.268" video="mainVideo" id=subtitle]]
+[[!template text="But I believe our culture of superheroes" start="00:02:04.168" video="mainVideo" id=subtitle]]
+[[!template text="is not helpful here:" start="00:02:07.268" video="mainVideo" id=subtitle]]
+[[!template text="it does not reflect the truth," start="00:02:09.101" video="mainVideo" id=subtitle]]
+[[!template text="it does not set the right expectations," start="00:02:11.301" video="mainVideo" id=subtitle]]
+[[!template text="and it prevents contributors" start="00:02:14.134" video="mainVideo" id=subtitle]]
+[[!template text="to properly understand" start="00:02:16.334" video="mainVideo" id=subtitle]]
+[[!template text="how to help maintainers." start="00:02:17.601" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's start again." start="00:02:19.601" video="mainVideo" id=subtitle]]
+[[!template text="And instead of asking what a maintainer is," start="00:02:21.334" video="mainVideo" id=subtitle]]
+[[!template text="let me take the list of" start="00:02:24.968" video="mainVideo" id=subtitle]]
+[[!template text="what I do as the Org maintainer." start="00:02:27.068" video="mainVideo" id=subtitle]]
+[[!template text="Here is my TODO-list:<br />" start="00:02:30.001" video="mainVideo" id=subtitle]]
+[[!template text="\- First of all, I take care of" start="00:02:31.034" video="mainVideo" id=subtitle]]
+[[!template text="the orgmode.org website.<br />" start="00:02:33.934" video="mainVideo" id=subtitle]]
+[[!template text="\- I also take care of the" start="00:02:35.201" video="mainVideo" id=subtitle]]
+[[!template text="org-contrib NonGNU ELPA package.<br />" start="00:02:37.401" video="mainVideo" id=subtitle]]
+[[!template text="\- I do gardening on the" start="00:02:41.434" video="mainVideo" id=subtitle]]
+[[!template text="community-driven documentation, Worg.<br />" start="00:02:44.034" video="mainVideo" id=subtitle]]
+[[!template text="\- I do add contributors to Worg.<br />" start="00:02:46.168" video="mainVideo" id=subtitle]]
+[[!template text="\- I read emails on emacs-orgmode@," start="00:02:48.401" video="mainVideo" id=subtitle]]
+[[!template text="emacs-devel@ and bug-gnu-emacs@.<br />" start="00:02:51.134" video="mainVideo" id=subtitle]]
+[[!template text="\- I contribute to email moderation" start="00:02:54.134" video="mainVideo" id=subtitle]]
+[[!template text="of the emacs-orgmode@ list" start="00:02:56.868" video="mainVideo" id=subtitle]]
+[[!template text="with a bunch of other contributors.<br />" start="00:02:59.801" video="mainVideo" id=subtitle]]
+[[!template text="\- I reply to private emails" start="00:03:02.468" video="mainVideo" id=subtitle]]
+[[!template text="asking me for help about org-mode.<br />" start="00:03:05.134" video="mainVideo" id=subtitle]]
+[[!template text="\- I coordinate with GNU Emacs maintainers" start="00:03:06.834" video="mainVideo" id=subtitle]]
+[[!template text="and thanks to them for Emacs/Org integration.<br />" start="00:03:10.168" video="mainVideo" id=subtitle]]
+[[!template text="\- I contribute with public emails" start="00:03:12.934" video="mainVideo" id=subtitle]]
+[[!template text="on the Org mailing list.<br />" start="00:03:16.034" video="mainVideo" id=subtitle]]
+[[!template text="\- I release new versions of Org-mode.<br />" start="00:03:17.801" video="mainVideo" id=subtitle]]
+[[!template text="\- and sometimes, sometimes," start="00:03:20.501" video="mainVideo" id=subtitle]]
+[[!template text="I contribute with code.<br />" start="00:03:22.634" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Do you see a pattern here?" start="00:03:24.601" video="mainVideo" id=subtitle]]
+[[!template text="Yes. I bet the last three tasks" start="00:03:27.168" video="mainVideo" id=subtitle]]
+[[!template text="is what most people have in mind" start="00:03:30.468" video="mainVideo" id=subtitle]]
+[[!template text="when they think of a maintainer:" start="00:03:31.801" video="mainVideo" id=subtitle]]
+[[!template text="it's all about hacking" start="00:03:34.201" video="mainVideo" id=subtitle]]
+[[!template text="and being an efficient hotline." start="00:03:35.534" video="mainVideo" id=subtitle]]
+[[!template text="But in fact, these tasks" start="00:03:37.734" video="mainVideo" id=subtitle]]
+[[!template text="are only a superficial part" start="00:03:39.734" video="mainVideo" id=subtitle]]
+[[!template text="of what I do as a maintainer." start="00:03:41.601" video="mainVideo" id=subtitle]]
+[[!template text="Some would consider that these core tasks" start="00:03:43.201" video="mainVideo" id=subtitle]]
+[[!template text="are the interesting ones," start="00:03:47.001" video="mainVideo" id=subtitle]]
+[[!template text="while the others are the boring ones." start="00:03:48.501" video="mainVideo" id=subtitle]]
+[[!template text="I don't see it that way:" start="00:03:51.634" video="mainVideo" id=subtitle]]
+[[!template text="some tasks are about the product," start="00:03:53.901" video="mainVideo" id=subtitle]]
+[[!template text="others are about the project." start="00:03:56.534" video="mainVideo" id=subtitle]]
+[[!template text="Without a good product," start="00:03:58.801" video="mainVideo" id=subtitle]]
+[[!template text="there is little chance" start="00:04:00.834" video="mainVideo" id=subtitle]]
+[[!template text="you will have a good project," start="00:04:02.168" video="mainVideo" id=subtitle]]
+[[!template text="but maintaining a project requires thinking" start="00:04:03.401" video="mainVideo" id=subtitle]]
+[[!template text="in terms of infrastructure," start="00:04:07.534" video="mainVideo" id=subtitle]]
+[[!template text="not in terms of bugs," start="00:04:09.301" video="mainVideo" id=subtitle]]
+[[!template text="thinking in terms of resources" start="00:04:11.068" video="mainVideo" id=subtitle]]
+[[!template text="that enable both users and contributors," start="00:04:13.334" video="mainVideo" id=subtitle]]
+[[!template text="not in terms of commits." start="00:04:16.701" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let me try to define again" start="00:04:18.401" video="mainVideo" id=subtitle]]
+[[!template text="what a free software maintainer is" start="00:04:21.001" video="mainVideo" id=subtitle]]
+[[!template text="or should be." start="00:04:23.334" video="mainVideo" id=subtitle]]
+[[!template text="A free software maintainer" start="00:04:24.434" video="mainVideo" id=subtitle]]
+[[!template text="is someone who cares about" start="00:04:26.234" video="mainVideo" id=subtitle]]
+[[!template text="enabling users and contributors" start="00:04:28.368" video="mainVideo" id=subtitle]]
+[[!template text="so that they collectively" start="00:04:30.968" video="mainVideo" id=subtitle]]
+[[!template text="take care of the project." start="00:04:32.768" video="mainVideo" id=subtitle]]
+[[!template text="See another pattern here?" start="00:04:34.201" video="mainVideo" id=subtitle]]
+[[!template text="Yeah, that's all about the project," start="00:04:36.734" video="mainVideo" id=subtitle]]
+[[!template text="versus the product." start="00:04:40.301" video="mainVideo" id=subtitle]]
+[[!template text="It's about taking care of it," start="00:04:41.501" video="mainVideo" id=subtitle]]
+[[!template text="versus being a direct hotline for users," start="00:04:43.634" video="mainVideo" id=subtitle]]
+[[!template text="so, it's caring about the project infrastructure" start="00:04:46.934" video="mainVideo" id=subtitle]]
+[[!template text="and about empowering users" start="00:04:49.901" video="mainVideo" id=subtitle]]
+[[!template text="with tools and incentives" start="00:04:52.134" video="mainVideo" id=subtitle]]
+[[!template text="so that they care too." start="00:04:54.234" video="mainVideo" id=subtitle]]
+[[!template text="How can you help such a maintainer?" start="00:04:55.268" video="mainVideo" id=subtitle]]
+[[!template text="By focusing on the project" start="00:04:58.434" video="mainVideo" id=subtitle]]
+[[!template text="and becoming an enabler yourself." start="00:05:00.901" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, let's pause and summarize:" start="00:05:03.901" video="mainVideo" id=subtitle]]
+[[!template text="our culture wants heroes" start="00:05:06.934" video="mainVideo" id=subtitle]]
+[[!template text="and this leads us to expect maintainers" start="00:05:08.801" video="mainVideo" id=subtitle]]
+[[!template text="to be superhackers and superactive hotlines." start="00:05:12.434" video="mainVideo" id=subtitle]]
+[[!template text="This is the HOT mindset of maintenance," start="00:05:15.234" video="mainVideo" id=subtitle]]
+[[!template text="where the maintainers are Headmasters Of Tweaks" start="00:05:19.568" video="mainVideo" id=subtitle]]
+[[!template text="and soon becomes the Headmaster Of Troubles." start="00:05:23.368" video="mainVideo" id=subtitle]]
+[[!template new="1" text="To resist this HOT mindset," start="00:05:26.901" video="mainVideo" id=subtitle]]
+[[!template text="I suggest to redefine maintenance as ACDC:" start="00:05:29.501" video="mainVideo" id=subtitle]]
+[[!template text="“Asynchronous Collective Distributed Care”:" start="00:05:33.201" video="mainVideo" id=subtitle]]
+[[!template new="1" text="“Asynchronous” because time management" start="00:05:36.534" video="mainVideo" id=subtitle]]
+[[!template text="is a private matter" start="00:05:38.968" video="mainVideo" id=subtitle]]
+[[!template text="and we are all volunteers." start="00:05:40.168" video="mainVideo" id=subtitle]]
+[[!template new="1" text="“Collective” because, well," start="00:05:41.968" video="mainVideo" id=subtitle]]
+[[!template text="no man is an island." start="00:05:44.168" video="mainVideo" id=subtitle]]
+[[!template new="1" text="“Distributed”: because the more power" start="00:05:45.634" video="mainVideo" id=subtitle]]
+[[!template text="to the “edges”, the more resilient" start="00:05:49.201" video="mainVideo" id=subtitle]]
+[[!template text="the system and the project is." start="00:05:51.601" video="mainVideo" id=subtitle]]
+[[!template new="1" text="“Care” because this is all about care:" start="00:05:53.534" video="mainVideo" id=subtitle]]
+[[!template text="with each other as users" start="00:05:56.368" video="mainVideo" id=subtitle]]
+[[!template text="or as contributors," start="00:05:58.501" video="mainVideo" id=subtitle]]
+[[!template text="with the project's infrastructure" start="00:06:00.134" video="mainVideo" id=subtitle]]
+[[!template text="(servers, websites, bug trackers, etc.)" start="00:06:02.101" video="mainVideo" id=subtitle]]
+[[!template text="and care about having a useful product." start="00:06:05.301" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, “enabling” users and contributors means" start="00:06:08.701" video="mainVideo" id=subtitle]]
+[[!template text="encouraging them to take ownership," start="00:06:13.901" video="mainVideo" id=subtitle]]
+[[!template text="which is more than just delegating tasks." start="00:06:16.468" video="mainVideo" id=subtitle]]
+[[!template text="Let your users and contributors know" start="00:06:19.801" video="mainVideo" id=subtitle]]
+[[!template text="that they need to tap into" start="00:06:22.068" video="mainVideo" id=subtitle]]
+[[!template text="the collective attention pool with care:" start="00:06:23.901" video="mainVideo" id=subtitle]]
+[[!template text="the more autonomous they are, the better." start="00:06:26.434" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, with this ACDC definition in mind," start="00:06:28.801" video="mainVideo" id=subtitle]]
+[[!template text="how can <i>you</i> help Emacs maintainers?" start="00:06:33.801" video="mainVideo" id=subtitle]]
+[[!template new="1" text="First of all, by <i>becoming</i> a maintainer" start="00:06:37.534" video="mainVideo" id=subtitle]]
+[[!template text="for your own project, however small." start="00:06:41.268" video="mainVideo" id=subtitle]]
+[[!template text="Think in terms of project vs. product." start="00:06:44.334" video="mainVideo" id=subtitle]]
+[[!template text="Empower users and contributors." start="00:06:47.001" video="mainVideo" id=subtitle]]
+[[!template text="This will help you understand" start="00:06:49.034" video="mainVideo" id=subtitle]]
+[[!template text="how to help other maintainers." start="00:06:50.668" video="mainVideo" id=subtitle]]
+[[!template text="“More power to the edges!”" start="00:06:54.068" video="mainVideo" id=subtitle]]
+[[!template new="1" text="<i>Volunteer</i> as a contributor steward" start="00:06:56.501" video="mainVideo" id=subtitle]]
+[[!template text="for another project: you don't need to" start="00:07:00.001" video="mainVideo" id=subtitle]]
+[[!template text="be a supersmart hacker" start="00:07:02.201" video="mainVideo" id=subtitle]]
+[[!template text="to help others to contribute." start="00:07:03.868" video="mainVideo" id=subtitle]]
+[[!template text="For Org-mode, we are lucky to have" start="00:07:05.634" video="mainVideo" id=subtitle]]
+[[!template text="two great contributor stewards." start="00:07:07.701" video="mainVideo" id=subtitle]]
+[[!template new="1" text="<i>Learn</i> how to teach," start="00:07:10.901" video="mainVideo" id=subtitle]]
+[[!template text="because pedagogical skills are invaluable." start="00:07:12.868" video="mainVideo" id=subtitle]]
+[[!template text="Taking the time to explain" start="00:07:16.468" video="mainVideo" id=subtitle]]
+[[!template text="how to write a bug report or a patch" start="00:07:18.301" video="mainVideo" id=subtitle]]
+[[!template text="is invaluable and this is a core part" start="00:07:20.868" video="mainVideo" id=subtitle]]
+[[!template text="of the Org culture." start="00:07:23.834" video="mainVideo" id=subtitle]]
+[[!template new="1" text="<i>Test</i> and <i>enhance</i> the project's" start="00:07:25.401" video="mainVideo" id=subtitle]]
+[[!template text="contribution process. For Org-mode," start="00:07:27.801" video="mainVideo" id=subtitle]]
+[[!template text="you would read and suggest contributions to" start="00:07:30.001" video="mainVideo" id=subtitle]]
+[[!template text="the org-contribute pages on Worg." start="00:07:33.268" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Take care of the project's <i>calls for help</i>." start="00:07:35.634" video="mainVideo" id=subtitle]]
+[[!template text="For Org-mode, this would be this list" start="00:07:38.601" video="mainVideo" id=subtitle]]
+[[!template text="that we have on updates.orgmode.org" start="00:07:40.560" video="mainVideo" id=subtitle]]
+[[!template text="For Emacs, this would be <i>etc/TODO</i> file." start="00:07:43.599" video="mainVideo" id=subtitle]]
+[[!template text="If the calls for help are not explicit enough," start="00:07:47.234" video="mainVideo" id=subtitle]]
+[[!template text="try to contribute some." start="00:07:50.834" video="mainVideo" id=subtitle]]
+[[!template new="1" text="<i>Encourage</i> users from outside the project" start="00:07:52.834" video="mainVideo" id=subtitle]]
+[[!template text="to contribute to the core forum." start="00:07:56.701" video="mainVideo" id=subtitle]]
+[[!template text="For Org-mode, there are many hacks and fixes" start="00:07:58.434" video="mainVideo" id=subtitle]]
+[[!template text="being shared on Reddit and Stack Overflow," start="00:08:01.434" video="mainVideo" id=subtitle]]
+[[!template text="and that's fine, but we we should not" start="00:08:03.901" video="mainVideo" id=subtitle]]
+[[!template text="wait for months before having this" start="00:08:05.401" video="mainVideo" id=subtitle]]
+[[!template text="shared on the list." start="00:08:07.401" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let the core forum <i>know</i> about" start="00:08:08.801" video="mainVideo" id=subtitle]]
+[[!template text="what happens in this outside world" start="00:08:11.434" video="mainVideo" id=subtitle]]
+[[!template text="by sharing important information yourself." start="00:08:13.701" video="mainVideo" id=subtitle]]
+[[!template new="1" text="<i>Propose</i> your help for non-code tasks:" start="00:08:16.601" video="mainVideo" id=subtitle]]
+[[!template text="maintain a website," start="00:08:19.868" video="mainVideo" id=subtitle]]
+[[!template text="enhance the community-driven documentation," start="00:08:21.368" video="mainVideo" id=subtitle]]
+[[!template text="help with bug triage, etc." start="00:08:23.734" video="mainVideo" id=subtitle]]
+[[!template new="1" text="If you expect someone else to fix your bug," start="00:08:26.101" video="mainVideo" id=subtitle]]
+[[!template text="try fixing someone else's bug first, and too:" start="00:08:29.568" video="mainVideo" id=subtitle]]
+[[!template text="that's how you'll learn Emacs Lisp" start="00:08:33.234" video="mainVideo" id=subtitle]]
+[[!template text="and that's how you'll concretely" start="00:08:36.234" video="mainVideo" id=subtitle]]
+[[!template text="train your empathy, your sense of taking care." start="00:08:37.668" video="mainVideo" id=subtitle]]
+[[!template text="That is so critical." start="00:08:40.501" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Don't expect the maintainer" start="00:08:42.068" video="mainVideo" id=subtitle]]
+[[!template text="to be a <i>hotline</i>," start="00:08:44.101" video="mainVideo" id=subtitle]]
+[[!template text="especially a private one." start="00:08:45.168" video="mainVideo" id=subtitle]]
+[[!template text="Address yourself to the community." start="00:08:46.801" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And last but not least," start="00:08:49.234" video="mainVideo" id=subtitle]]
+[[!template text="<i>complete</i> this list." start="00:08:51.968" video="mainVideo" id=subtitle]]
+[[!template text="I'm trying to open a conversation here," start="00:08:53.120" video="mainVideo" id=subtitle]]
+[[!template text="so don't be shy." start="00:08:54.959" video="mainVideo" id=subtitle]]
+[[!template new="1" text="That's it. Uhm, is it hard? Yes, this is hard," start="00:08:57.168" video="mainVideo" id=subtitle]]
+[[!template text="and that's because helping maintainers" start="00:09:01.760" video="mainVideo" id=subtitle]]
+[[!template text="by becoming such a enabler" start="00:09:04.640" video="mainVideo" id=subtitle]]
+[[!template text="in this ACDC mindset" start="00:09:07.760" video="mainVideo" id=subtitle]]
+[[!template text="is not immediately rewarding," start="00:09:09.839" video="mainVideo" id=subtitle]]
+[[!template text="whereas fixing a bug clearly, clearly is." start="00:09:12.080" video="mainVideo" id=subtitle]]
+[[!template text="But if you start thinking of the project" start="00:09:15.168" video="mainVideo" id=subtitle]]
+[[!template text="as something that enables you" start="00:09:17.701" video="mainVideo" id=subtitle]]
+[[!template text="to do amazing things, and I believe" start="00:09:19.301" video="mainVideo" id=subtitle]]
+[[!template text="Org is this kind of project," start="00:09:21.440" video="mainVideo" id=subtitle]]
+[[!template text="and if you start thinking" start="00:09:23.434" video="mainVideo" id=subtitle]]
+[[!template text="of the maintenance as something" start="00:09:25.034" video="mainVideo" id=subtitle]]
+[[!template text="that enables more contributions," start="00:09:26.634" video="mainVideo" id=subtitle]]
+[[!template text="you will see how important and rewarding" start="00:09:28.934" video="mainVideo" id=subtitle]]
+[[!template text="it is to become such an enabler." start="00:09:31.734" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, definitely grateful to all the enablers" start="00:09:35.668" video="mainVideo" id=subtitle]]
+[[!template text="that we have in Org's community!" start="00:09:39.701" video="mainVideo" id=subtitle]]
+[[!template text="And to everyone who maintains" start="00:09:41.401" video="mainVideo" id=subtitle]]
+[[!template text="a culture of teaching and learning" start="00:09:43.734" video="mainVideo" id=subtitle]]
+[[!template text="through polite and respectful interactions" start="00:09:45.701" video="mainVideo" id=subtitle]]
+[[!template text="on the mailing list and elsewhere:" start="00:09:49.068" video="mainVideo" id=subtitle]]
+[[!template text="we always need more “power to the edges”." start="00:09:50.801" video="mainVideo" id=subtitle]]
+[[!template text="And I'm also very grateful" start="00:09:55.001" video="mainVideo" id=subtitle]]
+[[!template text="to the EmacsConf organizers," start="00:09:57.168" video="mainVideo" id=subtitle]]
+[[!template text="because that's really taking care" start="00:09:59.034" video="mainVideo" id=subtitle]]
+[[!template text="of the community! So, thanks very much!" start="00:10:02.568" video="mainVideo" id=subtitle]]
+[[!template text="captions by bzg, sachac, and zaeph" start="00:10:05.068" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/model.md b/2021/captions/model.md
new file mode 100644
index 00000000..eee55e06
--- /dev/null
+++ b/2021/captions/model.md
@@ -0,0 +1,228 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello, everyone. My name is" start="00:00:06.399" video="mainVideo" id=subtitle]]
+[[!template text="Laszlo Krajnikovszkij," start="00:00:07.670" video="mainVideo" id=subtitle]]
+[[!template text="and today I would like to share" start="00:00:08.800" video="mainVideo" id=subtitle]]
+[[!template text="some ideas about extending" start="00:00:10.559" video="mainVideo" id=subtitle]]
+[[!template text="the model of Emacs to other applications." start="00:00:12.000" video="mainVideo" id=subtitle]]
+[[!template text="Brief introduction of myself:" start="00:00:15.200" video="mainVideo" id=subtitle]]
+[[!template text="I am from Budapest, Hungary;" start="00:00:16.720" video="mainVideo" id=subtitle]]
+[[!template text="and I have a background" start="00:00:18.400" video="mainVideo" id=subtitle]]
+[[!template text="in Financial Economics," start="00:00:20.320" video="mainVideo" id=subtitle]]
+[[!template text="but by occupation I run" start="00:00:21.760" video="mainVideo" id=subtitle]]
+[[!template text="a software development company" start="00:00:24.480" video="mainVideo" id=subtitle]]
+[[!template text="where I mostly do product management." start="00:00:26.320" video="mainVideo" id=subtitle]]
+[[!template text="I try to do most of my work from Emacs." start="00:00:29.119" video="mainVideo" id=subtitle]]
+[[!template text="I've been using it for the past" start="00:00:34.399" video="mainVideo" id=subtitle]]
+[[!template text="two or three years" start="00:00:36.160" video="mainVideo" id=subtitle]]
+[[!template text="as a computer science hobby" start="00:00:37.200" video="mainVideo" id=subtitle]]
+[[!template text="and this fascinating piece of software" start="00:00:39.120" video="mainVideo" id=subtitle]]
+[[!template text="taught me a lot of different concepts" start="00:00:41.280" video="mainVideo" id=subtitle]]
+[[!template text="about software architecture" start="00:00:44.239" video="mainVideo" id=subtitle]]
+[[!template text="and programming languages," start="00:00:46.000" video="mainVideo" id=subtitle]]
+[[!template text="and also raised a lot of" start="00:00:48.800" video="mainVideo" id=subtitle]]
+[[!template text="philosophical questions" start="00:00:51.440" video="mainVideo" id=subtitle]]
+[[!template text="about human-computer interaction." start="00:00:52.719" video="mainVideo" id=subtitle]]
+[[!template text="I've been mostly using it" start="00:00:55.760" video="mainVideo" id=subtitle]]
+[[!template text="for organizing my personal information," start="00:00:57.039" video="mainVideo" id=subtitle]]
+[[!template text="writing notes and tracking my agenda," start="00:00:59.680" video="mainVideo" id=subtitle]]
+[[!template text="but occasionally, I've also used it" start="00:01:03.600" video="mainVideo" id=subtitle]]
+[[!template text="for reading and writing code" start="00:01:05.519" video="mainVideo" id=subtitle]]
+[[!template text="and for also reading news, email," start="00:01:07.119" video="mainVideo" id=subtitle]]
+[[!template text="and browsing the web." start="00:01:09.360" video="mainVideo" id=subtitle]]
+[[!template text="What do I mean by the 'model' of Emacs?" start="00:01:12.479" video="mainVideo" id=subtitle]]
+[[!template text="For me, the 'model' of Emacs is about" start="00:01:16.400" video="mainVideo" id=subtitle]]
+[[!template text="the interaction model." start="00:01:18.479" video="mainVideo" id=subtitle]]
+[[!template text="And it's not... Emacs is just a tool" start="00:01:21.920" video="mainVideo" id=subtitle]]
+[[!template text="for interacting with the computer." start="00:01:24.880" video="mainVideo" id=subtitle]]
+[[!template text="It's sort of a universal interface" start="00:01:26.560" video="mainVideo" id=subtitle]]
+[[!template text="that allows for consistency" start="00:01:28.640" video="mainVideo" id=subtitle]]
+[[!template text="across different apps," start="00:01:31.119" video="mainVideo" id=subtitle]]
+[[!template text="because everything is brought down to" start="00:01:33.280" video="mainVideo" id=subtitle]]
+[[!template text="an Emacs buffer, which is a" start="00:01:36.240" video="mainVideo" id=subtitle]]
+[[!template text="text-oriented interface," start="00:01:39.200" video="mainVideo" id=subtitle]]
+[[!template text="but that can have consistent" start="00:01:42.399" video="mainVideo" id=subtitle]]
+[[!template text="keybinding scheme," start="00:01:44.005" video="mainVideo" id=subtitle]]
+[[!template text="they have consistent color scheme," start="00:01:44.880" video="mainVideo" id=subtitle]]
+[[!template text="and consistent workflow in general." start="00:01:46.960" video="mainVideo" id=subtitle]]
+[[!template text="Also, Emacs has a lot of functionality" start="00:01:50.640" video="mainVideo" id=subtitle]]
+[[!template text="and utilizes mnemonic key bindings" start="00:01:53.200" video="mainVideo" id=subtitle]]
+[[!template text="for calling functions," start="00:01:55.920" video="mainVideo" id=subtitle]]
+[[!template text="which is much more powerful than" start="00:01:57.680" video="mainVideo" id=subtitle]]
+[[!template text="navigating contextual menus" start="00:01:59.920" video="mainVideo" id=subtitle]]
+[[!template text="with a pointer," start="00:02:02.000" video="mainVideo" id=subtitle]]
+[[!template text="because the functions that are" start="00:02:03.840" video="mainVideo" id=subtitle]]
+[[!template text="repeated the most" start="00:02:07.119" video="mainVideo" id=subtitle]]
+[[!template text="are then ingrained in the muscle memory," start="00:02:08.239" video="mainVideo" id=subtitle]]
+[[!template text="therefore reducing the lag" start="00:02:10.640" video="mainVideo" id=subtitle]]
+[[!template text="between the thought that is occurring" start="00:02:12.879" video="mainVideo" id=subtitle]]
+[[!template text="in your mind, and its reflection" start="00:02:15.680" video="mainVideo" id=subtitle]]
+[[!template text="on your computer screen." start="00:02:17.520" video="mainVideo" id=subtitle]]
+[[!template text="And also, Emacs provides" start="00:02:21.280" video="mainVideo" id=subtitle]]
+[[!template text="a huge number of packages" start="00:02:23.040" video="mainVideo" id=subtitle]]
+[[!template text="that can all be inspected and modified," start="00:02:25.360" video="mainVideo" id=subtitle]]
+[[!template text="and extended, and recombined," start="00:02:28.560" video="mainVideo" id=subtitle]]
+[[!template text="and just provides the best-possible" start="00:02:30.640" video="mainVideo" id=subtitle]]
+[[!template text="malleable system experience" start="00:02:35.599" video="mainVideo" id=subtitle]]
+[[!template text="that can potentially lead to" start="00:02:37.840" video="mainVideo" id=subtitle]]
+[[!template text="almost any desired setup" start="00:02:42.080" video="mainVideo" id=subtitle]]
+[[!template text="for the end-user." start="00:02:44.080" video="mainVideo" id=subtitle]]
+[[!template text="So, Emacs is great," start="00:02:47.599" video="mainVideo" id=subtitle]]
+[[!template text="but I need to use a lot of" start="00:02:49.440" video="mainVideo" id=subtitle]]
+[[!template text="different other tools" start="00:02:52.239" video="mainVideo" id=subtitle]]
+[[!template text="to collaborate with my coworkers," start="00:02:53.280" video="mainVideo" id=subtitle]]
+[[!template text="with my clients and vendors." start="00:02:55.200" video="mainVideo" id=subtitle]]
+[[!template text="On a normal day, I would need to be" start="00:02:57.519" video="mainVideo" id=subtitle]]
+[[!template text="switching between five to six" start="00:03:00.080" video="mainVideo" id=subtitle]]
+[[!template text="different web applications" start="00:03:02.640" video="mainVideo" id=subtitle]]
+[[!template text="and chat applications." start="00:03:04.319" video="mainVideo" id=subtitle]]
+[[!template text="They all have the same flaws." start="00:03:07.840" video="mainVideo" id=subtitle]]
+[[!template text="They all lack customizability," start="00:03:11.840" video="mainVideo" id=subtitle]]
+[[!template text="because it was never intended" start="00:03:14.879" video="mainVideo" id=subtitle]]
+[[!template text="by the original developers of the app" start="00:03:16.560" video="mainVideo" id=subtitle]]
+[[!template text="that the end user can tinker" start="00:03:19.280" video="mainVideo" id=subtitle]]
+[[!template text="with the product they're creating." start="00:03:21.120" video="mainVideo" id=subtitle]]
+[[!template text="But also, those apps are cloud-based," start="00:03:24.239" video="mainVideo" id=subtitle]]
+[[!template text="and usually not very good for privacy," start="00:03:29.120" video="mainVideo" id=subtitle]]
+[[!template text="and this also creates limitations" start="00:03:33.599" video="mainVideo" id=subtitle]]
+[[!template text="for offline-based workflows," start="00:03:36.480" video="mainVideo" id=subtitle]]
+[[!template text="or for in general not relying on" start="00:03:40.080" video="mainVideo" id=subtitle]]
+[[!template text="the internet connection" start="00:03:43.599" video="mainVideo" id=subtitle]]
+[[!template text="to use something." start="00:03:44.560" video="mainVideo" id=subtitle]]
+[[!template text="All these applications," start="00:03:46.959" video="mainVideo" id=subtitle]]
+[[!template text="they create a situation" start="00:03:49.440" video="mainVideo" id=subtitle]]
+[[!template text="when there's a lot of context-switching" start="00:03:50.720" video="mainVideo" id=subtitle]]
+[[!template text="between different apps," start="00:03:53.040" video="mainVideo" id=subtitle]]
+[[!template text="and this context-switching" start="00:03:55.360" video="mainVideo" id=subtitle]]
+[[!template text="comes from different color schemes," start="00:03:56.959" video="mainVideo" id=subtitle]]
+[[!template text="different workflows in general" start="00:03:59.920" video="mainVideo" id=subtitle]]
+[[!template text="for different apps." start="00:04:03.280" video="mainVideo" id=subtitle]]
+[[!template text="So, there is always" start="00:04:04.879" video="mainVideo" id=subtitle]]
+[[!template text="this little frame of time" start="00:04:06.400" video="mainVideo" id=subtitle]]
+[[!template text="where you need to orient yourself" start="00:04:10.400" video="mainVideo" id=subtitle]]
+[[!template text="in this other application." start="00:04:13.599" video="mainVideo" id=subtitle]]
+[[!template text="Of course, over time," start="00:04:15.280" video="mainVideo" id=subtitle]]
+[[!template text="it gets more automated," start="00:04:17.280" video="mainVideo" id=subtitle]]
+[[!template text="but still, this context switching" start="00:04:18.799" video="mainVideo" id=subtitle]]
+[[!template text="is very bad for productivity." start="00:04:20.560" video="mainVideo" id=subtitle]]
+[[!template text="These apps don't support very well" start="00:04:26.720" video="mainVideo" id=subtitle]]
+[[!template text="the keyboard-driven workflows," start="00:04:30.080" video="mainVideo" id=subtitle]]
+[[!template text="because the default set of keybindings" start="00:04:31.759" video="mainVideo" id=subtitle]]
+[[!template text="is always limited," start="00:04:33.520" video="mainVideo" id=subtitle]]
+[[!template text="and you always need to resort to" start="00:04:34.479" video="mainVideo" id=subtitle]]
+[[!template text="mouse-driven workflows." start="00:04:39.280" video="mainVideo" id=subtitle]]
+[[!template text="But Emacs has some issues" start="00:04:44.160" video="mainVideo" id=subtitle]]
+[[!template text="as a tool for work as well." start="00:04:46.400" video="mainVideo" id=subtitle]]
+[[!template text="First of all, it lacks integration" start="00:04:48.320" video="mainVideo" id=subtitle]]
+[[!template text="with all these tools," start="00:04:50.800" video="mainVideo" id=subtitle]]
+[[!template text="so I constantly need to be switching" start="00:04:51.759" video="mainVideo" id=subtitle]]
+[[!template text="between Emacs and these applications," start="00:04:54.560" video="mainVideo" id=subtitle]]
+[[!template text="or basically, my web browser." start="00:04:57.759" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is very good for text input" start="00:04:59.919" video="mainVideo" id=subtitle]]
+[[!template text="and for editing text," start="00:05:03.039" video="mainVideo" id=subtitle]]
+[[!template text="but it's not always perfect" start="00:05:04.720" video="mainVideo" id=subtitle]]
+[[!template text="for reading information" start="00:05:07.039" video="mainVideo" id=subtitle]]
+[[!template text="from an Emacs buffer," start="00:05:09.440" video="mainVideo" id=subtitle]]
+[[!template text="because it doesn't" start="00:05:11.199" video="mainVideo" id=subtitle]]
+[[!template text="render images and HTML properly." start="00:05:12.080" video="mainVideo" id=subtitle]]
+[[!template text="Also, Emacs lacks performance" start="00:05:16.560" video="mainVideo" id=subtitle]]
+[[!template text="under heavy load," start="00:05:18.800" video="mainVideo" id=subtitle]]
+[[!template text="so when you try to run" start="00:05:19.919" video="mainVideo" id=subtitle]]
+[[!template text="too many things in parallel," start="00:05:21.840" video="mainVideo" id=subtitle]]
+[[!template text="the single-threaded nature of Emacs" start="00:05:23.280" video="mainVideo" id=subtitle]]
+[[!template text="just makes it hang." start="00:05:26.560" video="mainVideo" id=subtitle]]
+[[!template text="For this reason," start="00:05:28.880" video="mainVideo" id=subtitle]]
+[[!template text="I wouldn't rely on Emacs" start="00:05:30.960" video="mainVideo" id=subtitle]]
+[[!template text="to take care of all my system processes." start="00:05:32.560" video="mainVideo" id=subtitle]]
+[[!template text="And of course, it has some" start="00:05:38.320" video="mainVideo" id=subtitle]]
+[[!template text="legacy UI limitations" start="00:05:40.400" video="mainVideo" id=subtitle]]
+[[!template text="being a software that was written" start="00:05:42.240" video="mainVideo" id=subtitle]]
+[[!template text="40 years ago." start="00:05:46.400" video="mainVideo" id=subtitle]]
+[[!template text="This results in a very limited usability" start="00:05:49.039" video="mainVideo" id=subtitle]]
+[[!template text="on mobile and other touch devices." start="00:05:53.759" video="mainVideo" id=subtitle]]
+[[!template text="I've been thinking" start="00:05:59.680" video="mainVideo" id=subtitle]]
+[[!template text="about a hybrid approach" start="00:06:01.759" video="mainVideo" id=subtitle]]
+[[!template text="that you could still use Emacs" start="00:06:03.840" video="mainVideo" id=subtitle]]
+[[!template text="as a core of your life," start="00:06:05.840" video="mainVideo" id=subtitle]]
+[[!template text="and then extend it" start="00:06:10.080" video="mainVideo" id=subtitle]]
+[[!template text="with adjacent web applications" start="00:06:11.840" video="mainVideo" id=subtitle]]
+[[!template text="where Emacs can be used" start="00:06:15.120" video="mainVideo" id=subtitle]]
+[[!template text="as a text processing backend" start="00:06:16.960" video="mainVideo" id=subtitle]]
+[[!template text="and use Org mode files" start="00:06:21.600" video="mainVideo" id=subtitle]]
+[[!template text="as a universal format" start="00:06:24.080" video="mainVideo" id=subtitle]]
+[[!template text="for converting textual data," start="00:06:25.600" video="mainVideo" id=subtitle]]
+[[!template text="and then If emacs can be" start="00:06:29.600" video="mainVideo" id=subtitle]]
+[[!template text="connected with those applications" start="00:06:33.199" video="mainVideo" id=subtitle]]
+[[!template text="that I mentioned" start="00:06:36.639" video="mainVideo" id=subtitle]]
+[[!template text="a couple of slides before" start="00:06:37.520" video="mainVideo" id=subtitle]]
+[[!template text="through their API, and you can have" start="00:06:39.520" video="mainVideo" id=subtitle]]
+[[!template text="a two-way communication between them," start="00:06:41.280" video="mainVideo" id=subtitle]]
+[[!template text="and just export in JSON, let's say," start="00:06:43.199" video="mainVideo" id=subtitle]]
+[[!template text="and then convert to Org mode," start="00:06:46.000" video="mainVideo" id=subtitle]]
+[[!template text="and then use the Org mode" start="00:06:47.440" video="mainVideo" id=subtitle]]
+[[!template text="for these local web apps." start="00:06:49.039" video="mainVideo" id=subtitle]]
+[[!template text="Then you can use Emacs for editing," start="00:06:52.960" video="mainVideo" id=subtitle]]
+[[!template text="and Org mode, but then you can use" start="00:06:57.599" video="mainVideo" id=subtitle]]
+[[!template text="this adjacent web application" start="00:07:00.800" video="mainVideo" id=subtitle]]
+[[!template text="for viewing information," start="00:07:03.360" video="mainVideo" id=subtitle]]
+[[!template text="making small edits, and in general," start="00:07:05.039" video="mainVideo" id=subtitle]]
+[[!template text="possibly have an enhanced" start="00:07:08.720" video="mainVideo" id=subtitle]]
+[[!template text="user-defined UI that is" start="00:07:11.692" video="mainVideo" id=subtitle]]
+[[!template text="directly connected to Emacs." start="00:07:14.639" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Application Framework" start="00:07:17.039" video="mainVideo" id=subtitle]]
+[[!template text="is a project that tries to achieve" start="00:07:19.759" video="mainVideo" id=subtitle]]
+[[!template text="a common goal, but it tries to" start="00:07:21.520" video="mainVideo" id=subtitle]]
+[[!template text="achieve that through" start="00:07:23.840" video="mainVideo" id=subtitle]]
+[[!template text="displaying everything" start="00:07:24.639" video="mainVideo" id=subtitle]]
+[[!template text="in the Emacs buffer," start="00:07:25.520" video="mainVideo" id=subtitle]]
+[[!template text="whereas I'm thinking" start="00:07:27.840" video="mainVideo" id=subtitle]]
+[[!template text="if it can be displayed" start="00:07:28.840" video="mainVideo" id=subtitle]]
+[[!template text="in any web browser, but utilize" start="00:07:30.800" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Application Framework API" start="00:07:33.759" video="mainVideo" id=subtitle]]
+[[!template text="as a bridge between Elisp" start="00:07:36.560" video="mainVideo" id=subtitle]]
+[[!template text="and Python and Javascript," start="00:07:38.639" video="mainVideo" id=subtitle]]
+[[!template text="so you can use" start="00:07:40.960" video="mainVideo" id=subtitle]]
+[[!template text="the modern front-end frameworks" start="00:07:41.759" video="mainVideo" id=subtitle]]
+[[!template text="to create those web interfaces easier" start="00:07:44.879" video="mainVideo" id=subtitle]]
+[[!template text="and connect them" start="00:07:48.560" video="mainVideo" id=subtitle]]
+[[!template text="with Emacs functionality." start="00:07:49.280" video="mainVideo" id=subtitle]]
+[[!template text="These user-controlled web apps" start="00:07:53.919" video="mainVideo" id=subtitle]]
+[[!template text="would basically result in" start="00:07:57.280" video="mainVideo" id=subtitle]]
+[[!template text="the user connecting" start="00:08:04.126" video="mainVideo" id=subtitle]]
+[[!template text="to this external cloud-based tool," start="00:08:05.680" video="mainVideo" id=subtitle]]
+[[!template text="let's say Asana, but then" start="00:08:10.319" video="mainVideo" id=subtitle]]
+[[!template text="process everything through Org mode" start="00:08:13.759" video="mainVideo" id=subtitle]]
+[[!template text="and then display in an Org mode file" start="00:08:16.400" video="mainVideo" id=subtitle]]
+[[!template text="or display in this enhanced way" start="00:08:19.840" video="mainVideo" id=subtitle]]
+[[!template text="through the adjacent local web app," start="00:08:24.720" video="mainVideo" id=subtitle]]
+[[!template text="a front-end for which" start="00:08:28.960" video="mainVideo" id=subtitle]]
+[[!template text="could be written in any .js framework" start="00:08:31.280" video="mainVideo" id=subtitle]]
+[[!template text="for front-end development." start="00:08:34.080" video="mainVideo" id=subtitle]]
+[[!template text="I encourage everyone in the community" start="00:08:37.440" video="mainVideo" id=subtitle]]
+[[!template text="who is interested in similar questions" start="00:08:42.159" video="mainVideo" id=subtitle]]
+[[!template text="to share their opinion" start="00:08:45.279" video="mainVideo" id=subtitle]]
+[[!template text="about the potential risks and drawbacks," start="00:08:48.160" video="mainVideo" id=subtitle]]
+[[!template text="about any other ways" start="00:08:50.959" video="mainVideo" id=subtitle]]
+[[!template text="to achieve a similar goal," start="00:08:53.120" video="mainVideo" id=subtitle]]
+[[!template text="if anyone else is doing this already" start="00:08:54.640" video="mainVideo" id=subtitle]]
+[[!template text="that i might not know about," start="00:08:57.519" video="mainVideo" id=subtitle]]
+[[!template text="and in general, just share ideas" start="00:08:59.920" video="mainVideo" id=subtitle]]
+[[!template text="about what else can be done" start="00:09:02.399" video="mainVideo" id=subtitle]]
+[[!template text="to integrate Emacs with more stuff" start="00:09:03.760" video="mainVideo" id=subtitle]]
+[[!template text="and how Emacs can become" start="00:09:07.519" video="mainVideo" id=subtitle]]
+[[!template text="more approachable by non-technical users" start="00:09:10.640" video="mainVideo" id=subtitle]]
+[[!template text="because I would love to see" start="00:09:14.080" video="mainVideo" id=subtitle]]
+[[!template text="more people using Emacs, to be honest." start="00:09:16.160" video="mainVideo" id=subtitle]]
+[[!template text="Yeah. Thank you very much" start="00:09:20.080" video="mainVideo" id=subtitle]]
+[[!template text="for listening to this talk." start="00:09:21.680" video="mainVideo" id=subtitle]]
+[[!template text="I will be taking questions" start="00:09:23.440" video="mainVideo" id=subtitle]]
+[[!template text="and feedback in the pad" start="00:09:26.080" video="mainVideo" id=subtitle]]
+[[!template text="after the conference." start="00:09:27.600" video="mainVideo" id=subtitle]]
+[[!template text="You can reach me through this email" start="00:09:31.920" video="mainVideo" id=subtitle]]
+[[!template text="laszlo@laszlo.is ." start="00:09:33.920" video="mainVideo" id=subtitle]]
+[[!template text="I'll be posting" start="00:09:36.720" video="mainVideo" id=subtitle]]
+[[!template text="some more detailed articles" start="00:09:39.600" video="mainVideo" id=subtitle]]
+[[!template text="and description of this idea" start="00:09:41.760" video="mainVideo" id=subtitle]]
+[[!template text="that I was trying to present today." start="00:09:44.959" video="mainVideo" id=subtitle]]
+[[!template text="captions by Laszlo" start="00:09:47.166" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/mold.md b/2021/captions/mold.md
new file mode 100644
index 00000000..747d8c0e
--- /dev/null
+++ b/2021/captions/mold.md
@@ -0,0 +1,268 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Welcome to my talk," start="00:00:00.000" video="mainVideo" id=subtitle]]
+[[!template text="Moldable Emacs: A Step Towards" start="00:00:01.200" video="mainVideo" id=subtitle]]
+[[!template text="Sustainable Software." start="00:00:02.680" video="mainVideo" id=subtitle]]
+[[!template text="Who am I?" start="00:00:03.800" video="mainVideo" id=subtitle]]
+[[!template text="I am Andrea." start="00:00:04.440" video="mainVideo" id=subtitle]]
+[[!template text="I work as a Clojure software engineer" start="00:00:05.280" video="mainVideo" id=subtitle]]
+[[!template text="somewhere in the middle of the UK." start="00:00:07.120" video="mainVideo" id=subtitle]]
+[[!template text="I inherited my passion for Emacs" start="00:00:09.280" video="mainVideo" id=subtitle]]
+[[!template text="from my Ph.D. supervisor," start="00:00:10.880" video="mainVideo" id=subtitle]]
+[[!template text="and from that moment on," start="00:00:12.480" video="mainVideo" id=subtitle]]
+[[!template text="I got in synergy with it." start="00:00:13.880" video="mainVideo" id=subtitle]]
+[[!template text="You can learn more about my interests" start="00:00:14.960" video="mainVideo" id=subtitle]]
+[[!template text="and my Emacs adventure" start="00:00:17.480" video="mainVideo" id=subtitle]]
+[[!template text="at ag91.github.io." start="00:00:19.200" video="mainVideo" id=subtitle]]
+[[!template text="So let's get in the talk." start="00:00:22.520" video="mainVideo" id=subtitle]]
+[[!template text="Why moldable development?" start="00:00:24.360" video="mainVideo" id=subtitle]]
+[[!template text="There is too much information to read it all." start="00:00:25.840" video="mainVideo" id=subtitle]]
+[[!template text="Reading is very difficult." start="00:00:28.400" video="mainVideo" id=subtitle]]
+[[!template text="It's a very slow activity." start="00:00:30.640" video="mainVideo" id=subtitle]]
+[[!template text="You need to go word by word" start="00:00:32.320" video="mainVideo" id=subtitle]]
+[[!template text="or paragraph by paragraph," start="00:00:33.960" video="mainVideo" id=subtitle]]
+[[!template text="if you speedread." start="00:00:35.520" video="mainVideo" id=subtitle]]
+[[!template text="But anyway, you take a lot of time" start="00:00:36.400" video="mainVideo" id=subtitle]]
+[[!template text="to absorb that information." start="00:00:39.320" video="mainVideo" id=subtitle]]
+[[!template text="And we urgently need" start="00:00:40.720" video="mainVideo" id=subtitle]]
+[[!template text="to stand on the shoulders of giants," start="00:00:43.160" video="mainVideo" id=subtitle]]
+[[!template text="so the idea is we should stop" start="00:00:44.960" video="mainVideo" id=subtitle]]
+[[!template text="doing always the same errors" start="00:00:46.880" video="mainVideo" id=subtitle]]
+[[!template text="and we should be able to" start="00:00:48.960" video="mainVideo" id=subtitle]]
+[[!template text="absorb as much of the good ideas" start="00:00:50.920" video="mainVideo" id=subtitle]]
+[[!template text="that the bright people around us generate." start="00:00:53.640" video="mainVideo" id=subtitle]]
+[[!template text="For example, if I create" start="00:00:56.600" video="mainVideo" id=subtitle]]
+[[!template text="a magnificent program in COBOL," start="00:00:59.840" video="mainVideo" id=subtitle]]
+[[!template text="and nobody knows any more" start="00:01:04.120" video="mainVideo" id=subtitle]]
+[[!template text="how to learn or read COBOL," start="00:01:06.000" video="mainVideo" id=subtitle]]
+[[!template text="(and in order to read," start="00:01:08.000" video="mainVideo" id=subtitle]]
+[[!template text="you take a lot of time)," start="00:01:09.120" video="mainVideo" id=subtitle]]
+[[!template text="well, that fantastic idea" start="00:01:10.960" video="mainVideo" id=subtitle]]
+[[!template text="should be easily translatable" start="00:01:13.040" video="mainVideo" id=subtitle]]
+[[!template text="to C, or to Clojure," start="00:01:15.360" video="mainVideo" id=subtitle]]
+[[!template text="or to Common Lisp," start="00:01:19.240" video="mainVideo" id=subtitle]]
+[[!template text="or to a language that will come after." start="00:01:20.280" video="mainVideo" id=subtitle]]
+[[!template text="The idea shouldn't be lost" start="00:01:22.240" video="mainVideo" id=subtitle]]
+[[!template text="in a codebase somewhere in an old mainframe." start="00:01:24.080" video="mainVideo" id=subtitle]]
+[[!template text="It should be still accessible." start="00:01:28.400" video="mainVideo" id=subtitle]]
+[[!template text="Let's get in practice. What does it mean?" start="00:01:31.080" video="mainVideo" id=subtitle]]
+[[!template text="It means that, for example," start="00:01:33.920" video="mainVideo" id=subtitle]]
+[[!template text="the proponents of moldable development" start="00:01:37.840" video="mainVideo" id=subtitle]]
+[[!template text="prepare this slide to give a sense." start="00:01:40.400" video="mainVideo" id=subtitle]]
+[[!template text="So the idea is... Look at this." start="00:01:42.440" video="mainVideo" id=subtitle]]
+[[!template text="What is here? You will see" start="00:01:45.080" video="mainVideo" id=subtitle]]
+[[!template text="that all these little things" start="00:01:46.640" video="mainVideo" id=subtitle]]
+[[!template text="look like the same." start="00:01:48.680" video="mainVideo" id=subtitle]]
+[[!template text="The first time I looked at it," start="00:01:49.680" video="mainVideo" id=subtitle]]
+[[!template text="this was looking like a class diagram." start="00:01:50.680" video="mainVideo" id=subtitle]]
+[[!template text="This is actually code" start="00:01:52.840" video="mainVideo" id=subtitle]]
+[[!template text="describing a little system." start="00:01:54.880" video="mainVideo" id=subtitle]]
+[[!template text="If you look and if you read," start="00:01:57.800" video="mainVideo" id=subtitle]]
+[[!template text="you can see that there is a numerator," start="00:01:59.520" video="mainVideo" id=subtitle]]
+[[!template text="a denominator... So this, you see," start="00:02:01.320" video="mainVideo" id=subtitle]]
+[[!template text="is interactive, because it's code." start="00:02:03.320" video="mainVideo" id=subtitle]]
+[[!template text="It's something that is running," start="00:02:05.720" video="mainVideo" id=subtitle]]
+[[!template text="and it's an object" start="00:02:06.520" video="mainVideo" id=subtitle]]
+[[!template text="because this is Smalltalk --" start="00:02:07.280" video="mainVideo" id=subtitle]]
+[[!template text="Pharo, a dialect of Smalltalk --" start="00:02:08.560" video="mainVideo" id=subtitle]]
+[[!template text="but in the next slide," start="00:02:11.440" video="mainVideo" id=subtitle]]
+[[!template text="since this is a moldable tool," start="00:02:13.040" video="mainVideo" id=subtitle]]
+[[!template text="you can see that you can..." start="00:02:15.160" video="mainVideo" id=subtitle]]
+[[!template text="there is a representation" start="00:02:16.760" video="mainVideo" id=subtitle]]
+[[!template text="of the same software" start="00:02:18.280" video="mainVideo" id=subtitle]]
+[[!template text="in a human way." start="00:02:20.000" video="mainVideo" id=subtitle]]
+[[!template text="So, for example," start="00:02:23.520" video="mainVideo" id=subtitle]]
+[[!template text="here you can see" start="00:02:24.640" video="mainVideo" id=subtitle]]
+[[!template text="there is a mathematical formula." start="00:02:25.880" video="mainVideo" id=subtitle]]
+[[!template text="The other object, the second one," start="00:02:27.280" video="mainVideo" id=subtitle]]
+[[!template text="was a file system kind of thing." start="00:02:29.080" video="mainVideo" id=subtitle]]
+[[!template text="The third one was an image." start="00:02:30.440" video="mainVideo" id=subtitle]]
+[[!template text="And the last one was sort of a graph." start="00:02:33.880" video="mainVideo" id=subtitle]]
+[[!template text="So you can see that" start="00:02:36.600" video="mainVideo" id=subtitle]]
+[[!template text="there is a better way to learn," start="00:02:37.640" video="mainVideo" id=subtitle]]
+[[!template text="to distinguish, to intuitively get a sense." start="00:02:40.840" video="mainVideo" id=subtitle]]
+[[!template text="And there is not only a single way." start="00:02:44.880" video="mainVideo" id=subtitle]]
+[[!template text="It's custom to what you need." start="00:02:47.200" video="mainVideo" id=subtitle]]
+[[!template text="For example, this is" start="00:02:49.480" video="mainVideo" id=subtitle]]
+[[!template text="a very general way" start="00:02:51.280" video="mainVideo" id=subtitle]]
+[[!template text="to understand what is this object about" start="00:02:52.680" video="mainVideo" id=subtitle]]
+[[!template text="and maybe you want to see" start="00:02:54.040" video="mainVideo" id=subtitle]]
+[[!template text="some other little things." start="00:02:55.560" video="mainVideo" id=subtitle]]
+[[!template text="For example, the documentation of the code," start="00:02:56.760" video="mainVideo" id=subtitle]]
+[[!template text="because you are interested" start="00:02:58.840" video="mainVideo" id=subtitle]]
+[[!template text="in developing with it." start="00:03:00.240" video="mainVideo" id=subtitle]]
+[[!template text="For example, an image," start="00:03:01.160" video="mainVideo" id=subtitle]]
+[[!template text="you can see there's a path" start="00:03:03.960" video="mainVideo" id=subtitle]]
+[[!template text="on the filesystem," start="00:03:05.240" video="mainVideo" id=subtitle]]
+[[!template text="or as a hexadecimal representation." start="00:03:06.840" video="mainVideo" id=subtitle]]
+[[!template text="In a sense, there is not only one view." start="00:03:10.520" video="mainVideo" id=subtitle]]
+[[!template text="You need to have the view" start="00:03:12.520" video="mainVideo" id=subtitle]]
+[[!template text="that you need at the moment," start="00:03:13.840" video="mainVideo" id=subtitle]]
+[[!template text="and your tool needs to" start="00:03:15.320" video="mainVideo" id=subtitle]]
+[[!template text="make this easy for you." start="00:03:16.840" video="mainVideo" id=subtitle]]
+[[!template text="So, why moldable Emacs?" start="00:03:19.680" video="mainVideo" id=subtitle]]
+[[!template text="I wanted to bring that idea" start="00:03:22.280" video="mainVideo" id=subtitle]]
+[[!template text="of having multiple view representations" start="00:03:24.680" video="mainVideo" id=subtitle]]
+[[!template text="of what you need" start="00:03:26.760" video="mainVideo" id=subtitle]]
+[[!template text="to understand better in Emacs." start="00:03:29.520" video="mainVideo" id=subtitle]]
+[[!template text="And so I want to create immediate story telling." start="00:03:33.280" video="mainVideo" id=subtitle]]
+[[!template text="Immediate, because it needs to be very quick," start="00:03:36.280" video="mainVideo" id=subtitle]]
+[[!template text="and story telling is" start="00:03:37.880" video="mainVideo" id=subtitle]]
+[[!template text="because you want to allow connection" start="00:03:38.840" video="mainVideo" id=subtitle]]
+[[!template text="from something that you needed" start="00:03:40.760" video="mainVideo" id=subtitle]]
+[[!template text="to develop it into something new." start="00:03:42.520" video="mainVideo" id=subtitle]]
+[[!template text="So you are really telling a story:" start="00:03:45.520" video="mainVideo" id=subtitle]]
+[[!template text="what is this mathematical formula" start="00:03:47.160" video="mainVideo" id=subtitle]]
+[[!template text="I created because I need this," start="00:03:49.040" video="mainVideo" id=subtitle]]
+[[!template text="or this numerator and denominator" start="00:03:51.120" video="mainVideo" id=subtitle]]
+[[!template text="produce this number." start="00:03:54.440" video="mainVideo" id=subtitle]]
+[[!template text="So this is a story that you are telling" start="00:03:55.520" video="mainVideo" id=subtitle]]
+[[!template text="in my mind." start="00:03:58.760" video="mainVideo" id=subtitle]]
+[[!template text="And I want multiple views for buffers." start="00:03:59.880" video="mainVideo" id=subtitle]]
+[[!template text="Buffers is the main concept in Emacs," start="00:04:04.000" video="mainVideo" id=subtitle]]
+[[!template text="and so buffers are what I want to" start="00:04:05.800" video="mainVideo" id=subtitle]]
+[[!template text="integrate in a story." start="00:04:09.160" video="mainVideo" id=subtitle]]
+[[!template text="I create a buffer" start="00:04:11.000" video="mainVideo" id=subtitle]]
+[[!template text="and I start manipulating it," start="00:04:12.280" video="mainVideo" id=subtitle]]
+[[!template text="creating a view and then another view" start="00:04:15.080" video="mainVideo" id=subtitle]]
+[[!template text="in order to tell something to myself," start="00:04:16.920" video="mainVideo" id=subtitle]]
+[[!template text="in order to learn," start="00:04:19.520" video="mainVideo" id=subtitle]]
+[[!template text="but also to tell something to others." start="00:04:20.720" video="mainVideo" id=subtitle]]
+[[!template text="So, for example, let's start" start="00:04:21.880" video="mainVideo" id=subtitle]]
+[[!template text="from a use case: learning better." start="00:04:23.960" video="mainVideo" id=subtitle]]
+[[!template text="I had, at work, a list of changes" start="00:04:25.840" video="mainVideo" id=subtitle]]
+[[!template text="for a pull request," start="00:04:29.640" video="mainVideo" id=subtitle]]
+[[!template text="so a code change," start="00:04:31.440" video="mainVideo" id=subtitle]]
+[[!template text="and I was very tired." start="00:04:32.040" video="mainVideo" id=subtitle]]
+[[!template text="I couldn't understand" start="00:04:33.920" video="mainVideo" id=subtitle]]
+[[!template text="what this much text was about." start="00:04:34.760" video="mainVideo" id=subtitle]]
+[[!template text="So what I generate," start="00:04:37.520" video="mainVideo" id=subtitle]]
+[[!template text="I create a value for myself" start="00:04:38.920" video="mainVideo" id=subtitle]]
+[[!template text="to understand it easily." start="00:04:41.120" video="mainVideo" id=subtitle]]
+[[!template text="And for me, understanding it easily," start="00:04:42.720" video="mainVideo" id=subtitle]]
+[[!template text="for example, was a little flow diagram." start="00:04:45.320" video="mainVideo" id=subtitle]]
+[[!template text="It showed me, okay, there is first" start="00:04:49.240" video="mainVideo" id=subtitle]]
+[[!template text="this, this, and this," start="00:04:50.963" video="mainVideo" id=subtitle]]
+[[!template text="and so I could follow." start="00:04:52.320" video="mainVideo" id=subtitle]]
+[[!template text="having it next to the change." start="00:04:54.960" video="mainVideo" id=subtitle]]
+[[!template text="Having this image next to the change." start="00:04:58.400" video="mainVideo" id=subtitle]]
+[[!template text="And this is describing" start="00:05:00.600" video="mainVideo" id=subtitle]]
+[[!template text="an Italian recipe for pasta with butter," start="00:05:02.360" video="mainVideo" id=subtitle]]
+[[!template text="so if you want to try, you're welcome." start="00:05:05.640" video="mainVideo" id=subtitle]]
+[[!template text="It's very tasty." start="00:05:07.840" video="mainVideo" id=subtitle]]
+[[!template text="Anyway, the other thing that we can do" start="00:05:11.720" video="mainVideo" id=subtitle]]
+[[!template text="is query text -- structured text." start="00:05:13.840" video="mainVideo" id=subtitle]]
+[[!template text="So for example, this presentation" start="00:05:17.280" video="mainVideo" id=subtitle]]
+[[!template text="is an Org Mode buffer." start="00:05:20.680" video="mainVideo" id=subtitle]]
+[[!template text="So when I call the Playground" start="00:05:21.960" video="mainVideo" id=subtitle]]
+[[!template text="(that is one of the molds" start="00:05:24.040" video="mainVideo" id=subtitle]]
+[[!template text="that lets me write some Elisp to query" start="00:05:24.960" video="mainVideo" id=subtitle]]
+[[!template text="the original buffer,)" start="00:05:27.640" video="mainVideo" id=subtitle]]
+[[!template text="if I evaluate this," start="00:05:29.680" video="mainVideo" id=subtitle]]
+[[!template text="you will see that" start="00:05:31.640" video="mainVideo" id=subtitle]]
+[[!template text="I have just asked" start="00:05:33.280" video="mainVideo" id=subtitle]]
+[[!template text="my Org Mode buffer" start="00:05:33.880" video="mainVideo" id=subtitle]]
+[[!template text="to tell me the content length" start="00:05:35.200" video="mainVideo" id=subtitle]]
+[[!template text="of the headings" start="00:05:37.400" video="mainVideo" id=subtitle]]
+[[!template text="with some interesting content." start="00:05:38.280" video="mainVideo" id=subtitle]]
+[[!template text="So all the headings at third-level." start="00:05:40.240" video="mainVideo" id=subtitle]]
+[[!template text="Do you understand? I've just asked a file" start="00:05:44.280" video="mainVideo" id=subtitle]]
+[[!template text="to tell me its contents" start="00:05:48.080" video="mainVideo" id=subtitle]]
+[[!template text="without reading it." start="00:05:50.240" video="mainVideo" id=subtitle]]
+[[!template text="Or we can do something similar for code." start="00:05:51.240" video="mainVideo" id=subtitle]]
+[[!template text="We can do... I don't know..." start="00:05:56.320" video="mainVideo" id=subtitle]]
+[[!template text="No idea what is written there," start="00:05:58.840" video="mainVideo" id=subtitle]]
+[[!template text="but I want to know" start="00:06:00.920" video="mainVideo" id=subtitle]]
+[[!template text="which function is the most complex" start="00:06:02.000" video="mainVideo" id=subtitle]]
+[[!template text="or is overcomplicated." start="00:06:03.840" video="mainVideo" id=subtitle]]
+[[!template text="I have defined in red," start="00:06:06.800" video="mainVideo" id=subtitle]]
+[[!template text="(so again, I don't need to read the number" start="00:06:09.560" video="mainVideo" id=subtitle]]
+[[!template text="to know either what it is about!)" start="00:06:11.600" video="mainVideo" id=subtitle]]
+[[!template text="So, I've written in red," start="00:06:13.800" video="mainVideo" id=subtitle]]
+[[!template text="I've shown in red" start="00:06:15.280" video="mainVideo" id=subtitle]]
+[[!template text="the function with more complexity," start="00:06:18.120" video="mainVideo" id=subtitle]]
+[[!template text="and I can jump to it." start="00:06:20.320" video="mainVideo" id=subtitle]]
+[[!template text="So everything is very accessible" start="00:06:22.560" video="mainVideo" id=subtitle]]
+[[!template text="to facilitate my operation" start="00:06:24.160" video="mainVideo" id=subtitle]]
+[[!template text="and my understanding." start="00:06:26.280" video="mainVideo" id=subtitle]]
+[[!template text="Or I can take notes." start="00:06:27.160" video="mainVideo" id=subtitle]]
+[[!template text="For example, I can annotate something," start="00:06:29.880" video="mainVideo" id=subtitle]]
+[[!template text="and you see the note" start="00:06:36.160" video="mainVideo" id=subtitle]]
+[[!template text="is again structured text," start="00:06:37.240" video="mainVideo" id=subtitle]]
+[[!template text="because you will know" start="00:06:38.920" video="mainVideo" id=subtitle]]
+[[!template text="that I'm going to query my notes" start="00:06:40.120" video="mainVideo" id=subtitle]]
+[[!template text="at some point." start="00:06:42.320" video="mainVideo" id=subtitle]]
+[[!template text="For example, I can show all my notes," start="00:06:43.480" video="mainVideo" id=subtitle]]
+[[!template text="for example, by mode, or I can show" start="00:06:46.680" video="mainVideo" id=subtitle]]
+[[!template text="all the notes by mode in Org Mode." start="00:06:51.480" video="mainVideo" id=subtitle]]
+[[!template text="Because it's structured text," start="00:06:53.600" video="mainVideo" id=subtitle]]
+[[!template text="I can manipulate it very easily." start="00:06:56.440" video="mainVideo" id=subtitle]]
+[[!template text="So these are all my notes." start="00:06:57.840" video="mainVideo" id=subtitle]]
+[[!template text="Finally, the superpower" start="00:07:00.160" video="mainVideo" id=subtitle]]
+[[!template text="of this moldable Emacs" start="00:07:05.400" video="mainVideo" id=subtitle]]
+[[!template text="is the fact that you can compose molds." start="00:07:08.320" video="mainVideo" id=subtitle]]
+[[!template text="So, for example, let's go in" start="00:07:10.400" video="mainVideo" id=subtitle]]
+[[!template text="showing all my notes." start="00:07:13.000" video="mainVideo" id=subtitle]]
+[[!template text="Let me show you all my notes." start="00:07:17.480" video="mainVideo" id=subtitle]]
+[[!template text="And then let's say that I want to know" start="00:07:19.040" video="mainVideo" id=subtitle]]
+[[!template text="how they are... how many lines" start="00:07:21.520" video="mainVideo" id=subtitle]]
+[[!template text="are these notes?" start="00:07:26.720" video="mainVideo" id=subtitle]]
+[[!template text="Look, this is the answer." start="00:07:27.400" video="mainVideo" id=subtitle]]
+[[!template text="So of all the notes I take," start="00:07:30.360" video="mainVideo" id=subtitle]]
+[[!template text="I can actually query it and say" start="00:07:31.800" video="mainVideo" id=subtitle]]
+[[!template text="&quot;What are the lengths?&quot;" start="00:07:34.200" video="mainVideo" id=subtitle]]
+[[!template text="But let me show something more." start="00:07:38.360" video="mainVideo" id=subtitle]]
+[[!template text="Which one is the longest note?" start="00:07:40.040" video="mainVideo" id=subtitle]]
+[[!template text="Now there are lots of notes in there" start="00:07:41.680" video="mainVideo" id=subtitle]]
+[[!template text="so it's difficult to know" start="00:07:44.000" video="mainVideo" id=subtitle]]
+[[!template text="but what if I can, in a click," start="00:07:45.080" video="mainVideo" id=subtitle]]
+[[!template text="generate a view that is very immediate?" start="00:07:47.200" video="mainVideo" id=subtitle]]
+[[!template text="Look, there is a note that is very long." start="00:07:50.440" video="mainVideo" id=subtitle]]
+[[!template text="It's about 35 lines." start="00:07:52.240" video="mainVideo" id=subtitle]]
+[[!template text="Do you understand?" start="00:07:54.040" video="mainVideo" id=subtitle]]
+[[!template text="I didn't read any note." start="00:07:55.160" video="mainVideo" id=subtitle]]
+[[!template text="This is all coming from" start="00:07:56.760" video="mainVideo" id=subtitle]]
+[[!template text="being able to query your text" start="00:07:58.400" video="mainVideo" id=subtitle]]
+[[!template text="and having multiple representations." start="00:08:02.520" video="mainVideo" id=subtitle]]
+[[!template text="My presentation is very short." start="00:08:06.240" video="mainVideo" id=subtitle]]
+[[!template text="What is next?" start="00:08:08.360" video="mainVideo" id=subtitle]]
+[[!template text="Next is to integrate molds with other software" start="00:08:09.720" video="mainVideo" id=subtitle]]
+[[!template text="like code-compass." start="00:08:14.360" video="mainVideo" id=subtitle]]
+[[!template text="I did a presentation last year" start="00:08:15.360" video="mainVideo" id=subtitle]]
+[[!template text="and I want to make those nice diagrams" start="00:08:16.720" video="mainVideo" id=subtitle]]
+[[!template text="available for small molds" start="00:08:18.640" video="mainVideo" id=subtitle]]
+[[!template text="so that you can use them," start="00:08:21.320" video="mainVideo" id=subtitle]]
+[[!template text="for example, for notes" start="00:08:22.880" video="mainVideo" id=subtitle]]
+[[!template text="or text that you have." start="00:08:24.760" video="mainVideo" id=subtitle]]
+[[!template text="To integrate better" start="00:08:26.360" video="mainVideo" id=subtitle]]
+[[!template text="with Nyxt, the Common Lisp browser," start="00:08:28.200" video="mainVideo" id=subtitle]]
+[[!template text="because there's a lot of opportunity there" start="00:08:30.360" video="mainVideo" id=subtitle]]
+[[!template text="to make funny things," start="00:08:32.200" video="mainVideo" id=subtitle]]
+[[!template text="a browser accessible for molding," start="00:08:35.320" video="mainVideo" id=subtitle]]
+[[!template text="and then having some interaction with Smalltalk" start="00:08:38.040" video="mainVideo" id=subtitle]]
+[[!template text="through Glamorous Toolkit," start="00:08:41.240" video="mainVideo" id=subtitle]]
+[[!template text="so that we can have the best tools," start="00:08:42.840" video="mainVideo" id=subtitle]]
+[[!template text="Emacs and Glamorous Toolkit and Nyxt" start="00:08:44.080" video="mainVideo" id=subtitle]]
+[[!template text="and others, to work together" start="00:08:46.800" video="mainVideo" id=subtitle]]
+[[!template text="to make our learning easy." start="00:08:49.000" video="mainVideo" id=subtitle]]
+[[!template text="Then... You've seen the tool;" start="00:08:50.520" video="mainVideo" id=subtitle]]
+[[!template text="my molds that I have shown" start="00:08:52.480" video="mainVideo" id=subtitle]]
+[[!template text="were basically by buffer." start="00:08:53.840" video="mainVideo" id=subtitle]]
+[[!template text="I want project statistics." start="00:08:56.200" video="mainVideo" id=subtitle]]
+[[!template text="What about... Give me the complexity" start="00:08:58.600" video="mainVideo" id=subtitle]]
+[[!template text="of all the functions" start="00:09:00.480" video="mainVideo" id=subtitle]]
+[[!template text="in a project," start="00:09:01.800" video="mainVideo" id=subtitle]]
+[[!template text="of all the paragraphs, whatever." start="00:09:03.480" video="mainVideo" id=subtitle]]
+[[!template text="And then there is a nice issue on" start="00:09:06.120" video="mainVideo" id=subtitle]]
+[[!template text="my issue-tracker for moldable Emacs" start="00:09:08.120" video="mainVideo" id=subtitle]]
+[[!template text="is about: &quot;Emacs: tell me how can I" start="00:09:10.880" video="mainVideo" id=subtitle]]
+[[!template text="compose the molds that I have" start="00:09:13.920" video="mainVideo" id=subtitle]]
+[[!template text="to make new things?&quot;" start="00:09:15.080" video="mainVideo" id=subtitle]]
+[[!template text="It is a sort of a research-y thing" start="00:09:17.480" video="mainVideo" id=subtitle]]
+[[!template text="that is pretty cool." start="00:09:19.400" video="mainVideo" id=subtitle]]
+[[!template text="So if you want to learn more," start="00:09:20.680" video="mainVideo" id=subtitle]]
+[[!template text="just check out at ag91.github.io," start="00:09:22.400" video="mainVideo" id=subtitle]]
+[[!template text="check out moldable Emacs on GitHub," start="00:09:25.520" video="mainVideo" id=subtitle]]
+[[!template text="and enjoy the rest of the conference." start="00:09:28.000" video="mainVideo" id=subtitle]]
+[[!template text="Bye." start="00:09:30.840" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/molecular.md b/2021/captions/molecular.md
new file mode 100644
index 00000000..739d561f
--- /dev/null
+++ b/2021/captions/molecular.md
@@ -0,0 +1,212 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hi, I'm Blaine Mooers." start="00:00:00.880" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to be talking about" start="00:00:02.446" video="mainVideo" id=subtitle]]
+[[!template text="the use of molecular graphics in Org" start="00:00:04.160" video="mainVideo" id=subtitle]]
+[[!template text="for the purpose of doing" start="00:00:07.919" video="mainVideo" id=subtitle]]
+[[!template text="reproducible research in structural biology." start="00:00:08.880" video="mainVideo" id=subtitle]]
+[[!template text="I'm an associate professor of biochemistry" start="00:00:11.840" video="mainVideo" id=subtitle]]
+[[!template text="and microbiology at the University of Oklahoma" start="00:00:13.722" video="mainVideo" id=subtitle]]
+[[!template text="Health Sciences Center in Oklahoma City." start="00:00:15.768" video="mainVideo" id=subtitle]]
+[[!template text="My laboratory uses X-ray crystallography" start="00:00:17.760" video="mainVideo" id=subtitle]]
+[[!template text="to determine the atomic structures" start="00:00:19.600" video="mainVideo" id=subtitle]]
+[[!template text="of proteins like this one" start="00:00:21.920" video="mainVideo" id=subtitle]]
+[[!template text="in the lower left, and of nucleic acids" start="00:00:23.439" video="mainVideo" id=subtitle]]
+[[!template text="important in human health." start="00:00:26.080" video="mainVideo" id=subtitle]]
+[[!template text="This is a crystal of an RNA," start="00:00:27.840" video="mainVideo" id=subtitle]]
+[[!template text="which we have placed in this" start="00:00:29.591" video="mainVideo" id=subtitle]]
+[[!template text="X-ray diffraction instrument." start="00:00:31.359" video="mainVideo" id=subtitle]]
+[[!template text="And after rotating the crystal" start="00:00:33.200" video="mainVideo" id=subtitle]]
+[[!template text="in the X-ray beam for two degrees," start="00:00:35.600" video="mainVideo" id=subtitle]]
+[[!template text="we obtain this following diffraction pattern," start="00:00:38.000" video="mainVideo" id=subtitle]]
+[[!template text="which has thousands of spots on it." start="00:00:40.480" video="mainVideo" id=subtitle]]
+[[!template text="We rotate the crystal for over 180 degrees," start="00:00:43.280" video="mainVideo" id=subtitle]]
+[[!template text="collecting 90 images to obtain all the data." start="00:00:47.840" video="mainVideo" id=subtitle]]
+[[!template text="We then process those images" start="00:00:51.760" video="mainVideo" id=subtitle]]
+[[!template text="and do an inverse Fourier transform" start="00:00:56.000" video="mainVideo" id=subtitle]]
+[[!template text="to obtain the electron density." start="00:00:57.752" video="mainVideo" id=subtitle]]
+[[!template text="This electron density map has been" start="00:00:59.920" video="mainVideo" id=subtitle]]
+[[!template text="contoured at the one-sigma level." start="00:01:01.888" video="mainVideo" id=subtitle]]
+[[!template text="That level's being shown by" start="00:01:04.344" video="mainVideo" id=subtitle]]
+[[!template text="this blue chicken wire mesh." start="00:01:06.116" video="mainVideo" id=subtitle]]
+[[!template text="Atomic models have been fitted" start="00:01:08.640" video="mainVideo" id=subtitle]]
+[[!template text="to this chicken wire." start="00:01:10.152" video="mainVideo" id=subtitle]]
+[[!template text="These lines represent bonds between atoms," start="00:01:11.119" video="mainVideo" id=subtitle]]
+[[!template text="atoms are being represented by points." start="00:01:14.240" video="mainVideo" id=subtitle]]
+[[!template text="And atoms are colored by atom type," start="00:01:16.240" video="mainVideo" id=subtitle]]
+[[!template text="red for oxygen, blue for nitrogen," start="00:01:18.640" video="mainVideo" id=subtitle]]
+[[!template text="and then in this case," start="00:01:21.280" video="mainVideo" id=subtitle]]
+[[!template text="carbon is colored cyan." start="00:01:23.040" video="mainVideo" id=subtitle]]
+[[!template text="We have fitted a drug molecule" start="00:01:24.720" video="mainVideo" id=subtitle]]
+[[!template text="to the central blob of electron density" start="00:01:27.203" video="mainVideo" id=subtitle]]
+[[!template text="which corresponds to that active site" start="00:01:29.360" video="mainVideo" id=subtitle]]
+[[!template text="of this protein, which is RET Kinase." start="00:01:32.400" video="mainVideo" id=subtitle]]
+[[!template text="It's important in lung cancer." start="00:01:35.759" video="mainVideo" id=subtitle]]
+[[!template text="When we're finished with model building," start="00:01:37.439" video="mainVideo" id=subtitle]]
+[[!template text="we will then examine" start="00:01:40.079" video="mainVideo" id=subtitle]]
+[[!template text="the result of the final structure" start="00:01:41.339" video="mainVideo" id=subtitle]]
+[[!template text="to prepare images for publication" start="00:01:43.006" video="mainVideo" id=subtitle]]
+[[!template text="using molecular graphics program." start="00:01:45.200" video="mainVideo" id=subtitle]]
+[[!template text="In this case," start="00:01:47.439" video="mainVideo" id=subtitle]]
+[[!template text="we've overlaid a number of structures," start="00:01:48.108" video="mainVideo" id=subtitle]]
+[[!template text="and we're examining the distance between" start="00:01:50.000" video="mainVideo" id=subtitle]]
+[[!template text="the side chain of an alanine" start="00:01:53.600" video="mainVideo" id=subtitle]]
+[[!template text="and one or two drug molecules." start="00:01:55.680" video="mainVideo" id=subtitle]]
+[[!template text="This alanine sidechain actually blocks" start="00:01:58.880" video="mainVideo" id=subtitle]]
+[[!template text="the binding of one of these drugs." start="00:02:00.719" video="mainVideo" id=subtitle]]
+[[!template text="The most popular program" start="00:02:02.159" video="mainVideo" id=subtitle]]
+[[!template text="for doing this kind of analysis" start="00:02:03.439" video="mainVideo" id=subtitle]]
+[[!template text="and for preparing images" start="00:02:06.320" video="mainVideo" id=subtitle]]
+[[!template text="for publication is PyMOL." start="00:02:07.280" video="mainVideo" id=subtitle]]
+[[!template text="PyMOL was used to prepare these images" start="00:02:09.520" video="mainVideo" id=subtitle]]
+[[!template text="on the covers of these featured journals." start="00:02:11.440" video="mainVideo" id=subtitle]]
+[[!template text="PyMOL is favored because" start="00:02:14.720" video="mainVideo" id=subtitle]]
+[[!template text="it has 500 commands" start="00:02:17.520" video="mainVideo" id=subtitle]]
+[[!template text="and 600 parameter settings" start="00:02:19.520" video="mainVideo" id=subtitle]]
+[[!template text="that provide exquisite control" start="00:02:22.128" video="mainVideo" id=subtitle]]
+[[!template text="over the appearance of the output." start="00:02:23.360" video="mainVideo" id=subtitle]]
+[[!template text="PyMOL has over 100,000 users," start="00:02:24.959" video="mainVideo" id=subtitle]]
+[[!template text="reflecting its popularity." start="00:02:28.480" video="mainVideo" id=subtitle]]
+[[!template text="This is the GUI for PyMOL." start="00:02:30.000" video="mainVideo" id=subtitle]]
+[[!template text="It shows in white the viewport area" start="00:02:31.599" video="mainVideo" id=subtitle]]
+[[!template text="where one interacts" start="00:02:35.120" video="mainVideo" id=subtitle]]
+[[!template text="with the loaded molecular object." start="00:02:36.080" video="mainVideo" id=subtitle]]
+[[!template text="We have rendered the same RET kinase" start="00:02:37.840" video="mainVideo" id=subtitle]]
+[[!template text="with a set of preset parameters" start="00:02:41.920" video="mainVideo" id=subtitle]]
+[[!template text="that have been named &quot;publication&quot;." start="00:02:49.788" video="mainVideo" id=subtitle]]
+[[!template text="The other way of applying" start="00:02:51.200" video="mainVideo" id=subtitle]]
+[[!template text="parameter settings and commands" start="00:02:52.720" video="mainVideo" id=subtitle]]
+[[!template text="is to enter them at the PyMOL prompt." start="00:02:54.319" video="mainVideo" id=subtitle]]
+[[!template text="Then the third way is to load and run scripts." start="00:02:56.720" video="mainVideo" id=subtitle]]
+[[!template text="PyMOL is actually written in C for speed," start="00:03:00.159" video="mainVideo" id=subtitle]]
+[[!template text="but it is wrapped in Python for extensibility." start="00:03:03.120" video="mainVideo" id=subtitle]]
+[[!template text="In fact, there are over 100 articles" start="00:03:06.159" video="mainVideo" id=subtitle]]
+[[!template text="about various plugins and scripts" start="00:03:09.680" video="mainVideo" id=subtitle]]
+[[!template text="that people have developed" start="00:03:11.599" video="mainVideo" id=subtitle]]
+[[!template text="to extend PyMOL for years." start="00:03:12.400" video="mainVideo" id=subtitle]]
+[[!template text="Here's some examples" start="00:03:15.120" video="mainVideo" id=subtitle]]
+[[!template text="from the snippet library that I developed." start="00:03:16.480" video="mainVideo" id=subtitle]]
+[[!template text="On the left is a default" start="00:03:18.959" video="mainVideo" id=subtitle]]
+[[!template text="cartoon representation of a RNA hairpin." start="00:03:21.280" video="mainVideo" id=subtitle]]
+[[!template text="I find this reduced representation" start="00:03:24.640" video="mainVideo" id=subtitle]]
+[[!template text="of the RNA hairpin to be too stark." start="00:03:27.040" video="mainVideo" id=subtitle]]
+[[!template text="I prefer these alternate ones" start="00:03:30.799" video="mainVideo" id=subtitle]]
+[[!template text="that I developed." start="00:03:32.319" video="mainVideo" id=subtitle]]
+[[!template text="So, these three to the right of this one" start="00:03:33.840" video="mainVideo" id=subtitle]]
+[[!template text="are not available through" start="00:03:37.519" video="mainVideo" id=subtitle]]
+[[!template text="pull downs in PyMOL." start="00:03:39.519" video="mainVideo" id=subtitle]]
+[[!template text="So why developed a PyMOL" start="00:03:40.720" video="mainVideo" id=subtitle]]
+[[!template text="snippet library for Org?" start="00:03:42.748" video="mainVideo" id=subtitle]]
+[[!template text="Well, Org provides great support" start="00:03:44.879" video="mainVideo" id=subtitle]]
+[[!template text="for literate programming," start="00:03:47.040" video="mainVideo" id=subtitle]]
+[[!template text="where you have code blocks" start="00:03:48.560" video="mainVideo" id=subtitle]]
+[[!template text="that contain code that's executable," start="00:03:49.840" video="mainVideo" id=subtitle]]
+[[!template text="and the output is shown" start="00:03:52.000" video="mainVideo" id=subtitle]]
+[[!template text="below that code block." start="00:03:53.040" video="mainVideo" id=subtitle]]
+[[!template text="And then you can fill" start="00:03:54.959" video="mainVideo" id=subtitle]]
+[[!template text="the surrounding area in the document" start="00:03:56.720" video="mainVideo" id=subtitle]]
+[[!template text="with the explanatory prose." start="00:03:58.959" video="mainVideo" id=subtitle]]
+[[!template text="Org has great support" start="00:04:00.799" video="mainVideo" id=subtitle]]
+[[!template text="for editing that explanatory prose." start="00:04:02.000" video="mainVideo" id=subtitle]]
+[[!template text="Org can run PyMOL through PyMOL's Python API." start="00:04:04.480" video="mainVideo" id=subtitle]]
+[[!template text="One of the uses of such an Org document" start="00:04:08.080" video="mainVideo" id=subtitle]]
+[[!template text="is to assemble a gallery of draft images." start="00:04:11.280" video="mainVideo" id=subtitle]]
+[[!template text="We often have to look at" start="00:04:14.487" video="mainVideo" id=subtitle]]
+[[!template text="dozens of candidate images" start="00:04:16.563" video="mainVideo" id=subtitle]]
+[[!template text="with the molecule in different orientations," start="00:04:19.840" video="mainVideo" id=subtitle]]
+[[!template text="different zoom settings," start="00:04:22.000" video="mainVideo" id=subtitle]]
+[[!template text="different representations," start="00:04:23.520" video="mainVideo" id=subtitle]]
+[[!template text="different colors, and so on." start="00:04:25.032" video="mainVideo" id=subtitle]]
+[[!template text="And to have those images along with…," start="00:04:27.280" video="mainVideo" id=subtitle]]
+[[!template text="adjacent to the code" start="00:04:30.639" video="mainVideo" id=subtitle]]
+[[!template text="that was used to generate them," start="00:04:31.840" video="mainVideo" id=subtitle]]
+[[!template text="can be very effective for" start="00:04:33.680" video="mainVideo" id=subtitle]]
+[[!template text="further editing the code" start="00:04:37.199" video="mainVideo" id=subtitle]]
+[[!template text="and improving the images." start="00:04:39.680" video="mainVideo" id=subtitle]]
+[[!template text="Once the final images have been selected," start="00:04:40.880" video="mainVideo" id=subtitle]]
+[[!template text="one can submit the code" start="00:04:44.080" video="mainVideo" id=subtitle]]
+[[!template text="as part of the supplemental material." start="00:04:46.320" video="mainVideo" id=subtitle]]
+[[!template text="Finally, one can use the journal package" start="00:04:48.479" video="mainVideo" id=subtitle]]
+[[!template text="to use the Org files as" start="00:04:52.400" video="mainVideo" id=subtitle]]
+[[!template text="an electronic laboratory notebook," start="00:04:54.608" video="mainVideo" id=subtitle]]
+[[!template text="which is illustrated with molecular images." start="00:04:57.120" video="mainVideo" id=subtitle]]
+[[!template text="This can be very useful" start="00:04:59.600" video="mainVideo" id=subtitle]]
+[[!template text="when assembling manuscripts" start="00:05:01.039" video="mainVideo" id=subtitle]]
+[[!template text="months or years later." start="00:05:04.080" video="mainVideo" id=subtitle]]
+[[!template text="This shows the YASnippet pull down" start="00:05:05.440" video="mainVideo" id=subtitle]]
+[[!template text="after my library has been installed." start="00:05:08.320" video="mainVideo" id=subtitle]]
+[[!template text="I have an Org file open," start="00:05:12.720" video="mainVideo" id=subtitle]]
+[[!template text="so I'm in Org mode." start="00:05:15.360" video="mainVideo" id=subtitle]]
+[[!template text="We have the Org mode submenu," start="00:05:17.120" video="mainVideo" id=subtitle]]
+[[!template text="and under it, all my snippets" start="00:05:20.880" video="mainVideo" id=subtitle]]
+[[!template text="are located in these sub-sub-menus" start="00:05:23.919" video="mainVideo" id=subtitle]]
+[[!template text="that are prepended with pymolpy." start="00:05:26.880" video="mainVideo" id=subtitle]]
+[[!template text="Under the molecular representations menu," start="00:05:30.880" video="mainVideo" id=subtitle]]
+[[!template text="there is a listing of snippets." start="00:05:33.840" video="mainVideo" id=subtitle]]
+[[!template text="The top one is for the ambient occlusion effect," start="00:05:36.479" video="mainVideo" id=subtitle]]
+[[!template text="which we're going to apply" start="00:05:38.563" video="mainVideo" id=subtitle]]
+[[!template text="in this Org file." start="00:05:39.840" video="mainVideo" id=subtitle]]
+[[!template text="So these lines of code were inserted after," start="00:05:41.039" video="mainVideo" id=subtitle]]
+[[!template text="as well as these flanking lines" start="00:05:44.240" video="mainVideo" id=subtitle]]
+[[!template text="that define the source block," start="00:05:48.479" video="mainVideo" id=subtitle]]
+[[!template text="were inserted by clicking on that line." start="00:05:50.240" video="mainVideo" id=subtitle]]
+[[!template text="Then I've added some additional code." start="00:05:53.280" video="mainVideo" id=subtitle]]
+[[!template text="So, the first line defines" start="00:05:55.120" video="mainVideo" id=subtitle]]
+[[!template text="the language that we're using." start="00:05:56.880" video="mainVideo" id=subtitle]]
+[[!template text="We're going to use" start="00:05:59.039" video="mainVideo" id=subtitle]]
+[[!template text="the jupyter-python language." start="00:05:59.768" video="mainVideo" id=subtitle]]
+[[!template text="Then you can define the session," start="00:06:02.639" video="mainVideo" id=subtitle]]
+[[!template text="and the name of this is arbitrary." start="00:06:04.560" video="mainVideo" id=subtitle]]
+[[!template text="Then the kernel is our means" start="00:06:06.400" video="mainVideo" id=subtitle]]
+[[!template text="by which we gain access" start="00:06:09.680" video="mainVideo" id=subtitle]]
+[[!template text="to the Python API of PyMOL." start="00:06:11.360" video="mainVideo" id=subtitle]]
+[[!template text="The remaining settings apply to the output." start="00:06:14.880" video="mainVideo" id=subtitle]]
+[[!template text="To execute this code" start="00:06:17.039" video="mainVideo" id=subtitle]]
+[[!template text="and to get the resulting image," start="00:06:18.319" video="mainVideo" id=subtitle]]
+[[!template text="you put the cursor inside this code block," start="00:06:21.199" video="mainVideo" id=subtitle]]
+[[!template text="or on the top line," start="00:06:25.120" video="mainVideo" id=subtitle]]
+[[!template text="and enter Control c Control c (C-c C-c)." start="00:06:26.560" video="mainVideo" id=subtitle]]
+[[!template text="This shows the resulting image" start="00:06:29.840" video="mainVideo" id=subtitle]]
+[[!template text="has been loaded up." start="00:06:32.240" video="mainVideo" id=subtitle]]
+[[!template text="It takes about 10 seconds for this to appear." start="00:06:33.600" video="mainVideo" id=subtitle]]
+[[!template text="So the downside of this is" start="00:06:37.280" video="mainVideo" id=subtitle]]
+[[!template text="if you have a large number of these," start="00:06:38.479" video="mainVideo" id=subtitle]]
+[[!template text="the Org file can lag quite a bit" start="00:06:40.729" video="mainVideo" id=subtitle]]
+[[!template text="when you try to scroll through it," start="00:06:43.919" video="mainVideo" id=subtitle]]
+[[!template text="so you need to close up these result drawers," start="00:06:45.120" video="mainVideo" id=subtitle]]
+[[!template text="and only open up the ones" start="00:06:48.319" video="mainVideo" id=subtitle]]
+[[!template text="that you're currently examining." start="00:06:50.960" video="mainVideo" id=subtitle]]
+[[!template text="These are features I think" start="00:06:53.199" video="mainVideo" id=subtitle]]
+[[!template text="are important in practical work." start="00:06:54.319" video="mainVideo" id=subtitle]]
+[[!template text="So, the plus is, a feature that's present," start="00:06:56.240" video="mainVideo" id=subtitle]]
+[[!template text="minus is absent." start="00:06:59.840" video="mainVideo" id=subtitle]]
+[[!template text="I think tab stops and tab triggers" start="00:07:01.120" video="mainVideo" id=subtitle]]
+[[!template text="are really important." start="00:07:03.199" video="mainVideo" id=subtitle]]
+[[!template text="Triggers are important for" start="00:07:04.800" video="mainVideo" id=subtitle]]
+[[!template text="the fast assertion code," start="00:07:05.680" video="mainVideo" id=subtitle]]
+[[!template text="tab stops are important for" start="00:07:06.720" video="mainVideo" id=subtitle]]
+[[!template text="complete, accurate editing of code." start="00:07:08.639" video="mainVideo" id=subtitle]]
+[[!template text="I already addressed the rendering speed" start="00:07:10.560" video="mainVideo" id=subtitle]]
+[[!template text="and scrolling issue." start="00:07:12.735" video="mainVideo" id=subtitle]]
+[[!template text="I think the way around this" start="00:07:14.560" video="mainVideo" id=subtitle]]
+[[!template text="is just to export the Org document to a PDF file" start="00:07:15.759" video="mainVideo" id=subtitle]]
+[[!template text="and do your evaluation of different images" start="00:07:19.199" video="mainVideo" id=subtitle]]
+[[!template text="by examining them in the PDF" start="00:07:23.360" video="mainVideo" id=subtitle]]
+[[!template text="rather than the Org file." start="00:07:25.199" video="mainVideo" id=subtitle]]
+[[!template text="The path to PDF is lightning fast in Emacs" start="00:07:26.560" video="mainVideo" id=subtitle]]
+[[!template text="compared to Jupyter," start="00:07:30.400" video="mainVideo" id=subtitle]]
+[[!template text="where it's cumbersome in comparison." start="00:07:32.240" video="mainVideo" id=subtitle]]
+[[!template text="This is a snapshot of my initialization file." start="00:07:35.280" video="mainVideo" id=subtitle]]
+[[!template text="These parts are relevant to doing this work." start="00:07:38.400" video="mainVideo" id=subtitle]]
+[[!template text="A full description of them" start="00:07:41.840" video="mainVideo" id=subtitle]]
+[[!template text="can be found in the README file" start="00:07:43.039" video="mainVideo" id=subtitle]]
+[[!template text="of this repository on GitHub." start="00:07:46.319" video="mainVideo" id=subtitle]]
+[[!template text="I'd like to thank the" start="00:07:48.639" video="mainVideo" id=subtitle]]
+[[!template text="Nathan Shock Data Science Workshop" start="00:07:49.456" video="mainVideo" id=subtitle]]
+[[!template text="for feedback during presentations" start="00:07:51.840" video="mainVideo" id=subtitle]]
+[[!template text="I've made about this work." start="00:07:54.319" video="mainVideo" id=subtitle]]
+[[!template text="And I would also like to thank" start="00:07:56.160" video="mainVideo" id=subtitle]]
+[[!template text="the following funding sources for support." start="00:07:57.628" video="mainVideo" id=subtitle]]
+[[!template text="I will now take questions. Thank you." start="00:08:00.240" video="mainVideo" id=subtitle]]
+[[!template text="captions by Blaine Mooers and Bhavin Gandhi" start="00:08:03.879" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/montessori.md b/2021/captions/montessori.md
new file mode 100644
index 00000000..3fc9564f
--- /dev/null
+++ b/2021/captions/montessori.md
@@ -0,0 +1,277 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hello everyone. My name is Grant Shangreaux," start="00:00:04.960" video="mainVideo" id=subtitle]]
+[[!template text="and I'm happy to be back here at EmacsConf." start="00:00:07.680" video="mainVideo" id=subtitle]]
+[[!template text="So before I was a programmer professionally," start="00:00:10.719" video="mainVideo" id=subtitle]]
+[[!template text="I was a Montessori guide with young children," start="00:00:13.840" video="mainVideo" id=subtitle]]
+[[!template text="and now I'm a parent of a child" start="00:00:16.800" video="mainVideo" id=subtitle]]
+[[!template text="in a Montessori classroom." start="00:00:18.960" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I was thinking Emacs" start="00:00:20.320" video="mainVideo" id=subtitle]]
+[[!template text="and Montessori philosophy" start="00:00:21.600" video="mainVideo" id=subtitle]]
+[[!template text="are both fundamentally about respect." start="00:00:22.960" video="mainVideo" id=subtitle]]
+[[!template text="Respect children, for the child" start="00:00:25.760" video="mainVideo" id=subtitle]]
+[[!template text="is the parent to the adult." start="00:00:27.840" video="mainVideo" id=subtitle]]
+[[!template text="And we should respect users." start="00:00:29.760" video="mainVideo" id=subtitle]]
+[[!template text="Maybe the user is the parent" start="00:00:32.079" video="mainVideo" id=subtitle]]
+[[!template text="to the hacker. That was certainly my case." start="00:00:33.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So this talk is about the similarities" start="00:00:35.840" video="mainVideo" id=subtitle]]
+[[!template text="between the Emacs environment" start="00:00:37.680" video="mainVideo" id=subtitle]]
+[[!template text="and the Montessori classroom," start="00:00:39.440" video="mainVideo" id=subtitle]]
+[[!template text="which is called a prepared environment," start="00:00:41.040" video="mainVideo" id=subtitle]]
+[[!template text="meaning that everything in the environment" start="00:00:43.760" video="mainVideo" id=subtitle]]
+[[!template text="has been prepared for the child to come" start="00:00:45.760" video="mainVideo" id=subtitle]]
+[[!template text="and interact with in a meaningful way." start="00:00:48.559" video="mainVideo" id=subtitle]]
+[[!template text="The child will be driven" start="00:00:51.120" video="mainVideo" id=subtitle]]
+[[!template text="by natural human tendencies" start="00:00:52.399" video="mainVideo" id=subtitle]]
+[[!template text="to interact with their environment" start="00:00:54.399" video="mainVideo" id=subtitle]]
+[[!template text="and to construct and refine" start="00:00:56.399" video="mainVideo" id=subtitle]]
+[[!template text="their understanding of the world" start="00:00:58.079" video="mainVideo" id=subtitle]]
+[[!template text="and the things in it." start="00:00:59.920" video="mainVideo" id=subtitle]]
+[[!template text="What I hope you come away from this talk with" start="00:01:01.359" video="mainVideo" id=subtitle]]
+[[!template text="is just a new perspective" start="00:01:03.600" video="mainVideo" id=subtitle]]
+[[!template text="on Emacs and software," start="00:01:06.080" video="mainVideo" id=subtitle]]
+[[!template text="and how users interact" start="00:01:08.479" video="mainVideo" id=subtitle]]
+[[!template text="in a prepared environment like Emacs" start="00:01:10.240" video="mainVideo" id=subtitle]]
+[[!template text="following their human tendencies" start="00:01:13.520" video="mainVideo" id=subtitle]]
+[[!template text="to gain understanding" start="00:01:15.280" video="mainVideo" id=subtitle]]
+[[!template text="and reach toward perfection." start="00:01:17.200" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay. So the human tendencies" start="00:01:19.119" video="mainVideo" id=subtitle]]
+[[!template text="are innate drives present in everybody." start="00:01:21.040" video="mainVideo" id=subtitle]]
+[[!template text="They're what enable us to explore" start="00:01:24.000" video="mainVideo" id=subtitle]]
+[[!template text="and make sense of our world." start="00:01:25.600" video="mainVideo" id=subtitle]]
+[[!template text="We use these human tendencies" start="00:01:27.520" video="mainVideo" id=subtitle]]
+[[!template text="to construct and refine the world itself." start="00:01:29.360" video="mainVideo" id=subtitle]]
+[[!template text="You know, if you're an Emacs user," start="00:01:32.960" video="mainVideo" id=subtitle]]
+[[!template text="I hope that's ringing some bells for you" start="00:01:34.240" video="mainVideo" id=subtitle]]
+[[!template text="right away, because what we do" start="00:01:35.920" video="mainVideo" id=subtitle]]
+[[!template text="when we interact with Emacs as individuals" start="00:01:38.320" video="mainVideo" id=subtitle]]
+[[!template text="is construct and refine our world in Emacs." start="00:01:40.960" video="mainVideo" id=subtitle]]
+[[!template text="So I'm going to go through" start="00:01:45.360" video="mainVideo" id=subtitle]]
+[[!template text="the human tendencies one by one" start="00:01:46.320" video="mainVideo" id=subtitle]]
+[[!template text="and bring up things" start="00:01:47.920" video="mainVideo" id=subtitle]]
+[[!template text="that I have observed or noticed in Emacs." start="00:01:48.960" video="mainVideo" id=subtitle]]
+[[!template text="I'm sure there's plenty more." start="00:01:52.079" video="mainVideo" id=subtitle]]
+[[!template text="Feel free to share it in chat." start="00:01:53.840" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So number one is orientation." start="00:01:56.560" video="mainVideo" id=subtitle]]
+[[!template text="Human beings want to know their relationship" start="00:02:00.000" video="mainVideo" id=subtitle]]
+[[!template text="to the environment around them." start="00:02:02.000" video="mainVideo" id=subtitle]]
+[[!template text="With children, when they come into" start="00:02:04.320" video="mainVideo" id=subtitle]]
+[[!template text="a new environment, they want to look at it," start="00:02:05.840" video="mainVideo" id=subtitle]]
+[[!template text="touch everything around them." start="00:02:07.520" video="mainVideo" id=subtitle]]
+[[!template text="They want to know where they fit in," start="00:02:09.360" video="mainVideo" id=subtitle]]
+[[!template text="things like that." start="00:02:11.520" video="mainVideo" id=subtitle]]
+[[!template text="In Emacs, the easiest thing to think of" start="00:02:12.800" video="mainVideo" id=subtitle]]
+[[!template text="is the initial new Emacs buffer." start="00:02:15.599" video="mainVideo" id=subtitle]]
+[[!template text="Right away, that is giving you" start="00:02:18.560" video="mainVideo" id=subtitle]]
+[[!template text="some guideposts to orient yourself." start="00:02:21.040" video="mainVideo" id=subtitle]]
+[[!template text="If you've used any of the other" start="00:02:23.440" video="mainVideo" id=subtitle]]
+[[!template text="Emacs starter packages, different packages" start="00:02:25.920" video="mainVideo" id=subtitle]]
+[[!template text="take different approaches to this." start="00:02:28.720" video="mainVideo" id=subtitle]]
+[[!template text="I think if you're trying to get people" start="00:02:30.239" video="mainVideo" id=subtitle]]
+[[!template text="to use Emacs for some reason," start="00:02:33.519" video="mainVideo" id=subtitle]]
+[[!template text="thinking about how individuals" start="00:02:36.080" video="mainVideo" id=subtitle]]
+[[!template text="might orient themselves" start="00:02:39.440" video="mainVideo" id=subtitle]]
+[[!template text="to this new software world is important." start="00:02:40.720" video="mainVideo" id=subtitle]]
+[[!template text="I think that there are friendly ways" start="00:02:43.680" video="mainVideo" id=subtitle]]
+[[!template text="to welcome people into the environment" start="00:02:46.000" video="mainVideo" id=subtitle]]
+[[!template text="and to make it easier for people" start="00:02:48.080" video="mainVideo" id=subtitle]]
+[[!template text="to orient themselves within Emacs." start="00:02:50.879" video="mainVideo" id=subtitle]]
+[[!template text="Of course we've also got the Info manuals," start="00:02:53.120" video="mainVideo" id=subtitle]]
+[[!template text="and one of my favorite examples" start="00:02:56.080" video="mainVideo" id=subtitle]]
+[[!template text="is the which-key package, which," start="00:02:57.760" video="mainVideo" id=subtitle]]
+[[!template text="when you press a key," start="00:03:00.080" video="mainVideo" id=subtitle]]
+[[!template text="it'll pop up with all of the following" start="00:03:01.519" video="mainVideo" id=subtitle]]
+[[!template text="key bindings that are available." start="00:03:04.000" video="mainVideo" id=subtitle]]
+[[!template text="That's a really important way for me" start="00:03:05.760" video="mainVideo" id=subtitle]]
+[[!template text="to explore, which is another human tendency," start="00:03:09.280" video="mainVideo" id=subtitle]]
+[[!template text="or to orient myself;" start="00:03:13.599" video="mainVideo" id=subtitle]]
+[[!template text="to think about when I press this key," start="00:03:15.280" video="mainVideo" id=subtitle]]
+[[!template text="now I've got these possibilities." start="00:03:17.599" video="mainVideo" id=subtitle]]
+[[!template text="You see that all over in Emacs" start="00:03:19.920" video="mainVideo" id=subtitle]]
+[[!template text="with hydras or the Magit transient buffers." start="00:03:21.760" video="mainVideo" id=subtitle]]
+[[!template text="There's all sorts of ways" start="00:03:25.920" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs is trying to help us" start="00:03:27.280" video="mainVideo" id=subtitle]]
+[[!template text="orient ourselves." start="00:03:29.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The second tendency is order, which" start="00:03:30.720" video="mainVideo" id=subtitle]]
+[[!template text="I probably should have talked about first," start="00:03:33.440" video="mainVideo" id=subtitle]]
+[[!template text="but here I am. I myself am not" start="00:03:35.120" video="mainVideo" id=subtitle]]
+[[!template text="particularly attuned to order," start="00:03:38.480" video="mainVideo" id=subtitle]]
+[[!template text="but when I was in the Montessori classroom," start="00:03:40.799" video="mainVideo" id=subtitle]]
+[[!template text="I found that it wasn't necessarily myself" start="00:03:43.120" video="mainVideo" id=subtitle]]
+[[!template text="imposing the order, it was..." start="00:03:45.920" video="mainVideo" id=subtitle]]
+[[!template text="The environment itself" start="00:03:47.360" video="mainVideo" id=subtitle]]
+[[!template text="has a certain order to it," start="00:03:48.480" video="mainVideo" id=subtitle]]
+[[!template text="and by creating an environment" start="00:03:50.239" video="mainVideo" id=subtitle]]
+[[!template text="where everything has its place," start="00:03:52.080" video="mainVideo" id=subtitle]]
+[[!template text="and everything has its time," start="00:03:54.239" video="mainVideo" id=subtitle]]
+[[!template text="and you have a way of doing things," start="00:03:56.480" video="mainVideo" id=subtitle]]
+[[!template text="it makes it easier for the child" start="00:03:59.840" video="mainVideo" id=subtitle]]
+[[!template text="to develop that internal sense of order" start="00:04:02.480" video="mainVideo" id=subtitle]]
+[[!template text="and succeed at imposing order" start="00:04:04.560" video="mainVideo" id=subtitle]]
+[[!template text="upon their work, which..." start="00:04:07.120" video="mainVideo" id=subtitle]]
+[[!template text="We do that as programmers." start="00:04:09.360" video="mainVideo" id=subtitle]]
+[[!template text="If we're contributing to Emacs," start="00:04:11.360" video="mainVideo" id=subtitle]]
+[[!template text="we try to do so in an orderly way," start="00:04:13.280" video="mainVideo" id=subtitle]]
+[[!template text="use prefixes for namespacing," start="00:04:16.079" video="mainVideo" id=subtitle]]
+[[!template text="since we don't have that ability" start="00:04:18.160" video="mainVideo" id=subtitle]]
+[[!template text="in Emacs Lisp," start="00:04:19.919" video="mainVideo" id=subtitle]]
+[[!template text="and by sharing well-ordered" start="00:04:20.959" video="mainVideo" id=subtitle]]
+[[!template text="self-documenting programs with our community." start="00:04:22.600" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Number three is exploration. I think" start="00:04:26.000" video="mainVideo" id=subtitle]]
+[[!template text="exploration is what drew me into Emacs," start="00:04:28.560" video="mainVideo" id=subtitle]]
+[[!template text="personally. In the beginning," start="00:04:30.720" video="mainVideo" id=subtitle]]
+[[!template text="it was just this wondrous" start="00:04:32.400" video="mainVideo" id=subtitle]]
+[[!template text="software environment" start="00:04:35.759" video="mainVideo" id=subtitle]]
+[[!template text="that offered so many opportunities." start="00:04:36.800" video="mainVideo" id=subtitle]]
+[[!template text="I was curious. Like, you've got" start="00:04:39.360" video="mainVideo" id=subtitle]]
+[[!template text="your scratch buffer." start="00:04:41.680" video="mainVideo" id=subtitle]]
+[[!template text="You can explore in there with expressions." start="00:04:42.880" video="mainVideo" id=subtitle]]
+[[!template text="You can start up IELM." start="00:04:45.040" video="mainVideo" id=subtitle]]
+[[!template text="You can explore your file system with Dired." start="00:04:46.880" video="mainVideo" id=subtitle]]
+[[!template text="You can explore different packages" start="00:04:49.440" video="mainVideo" id=subtitle]]
+[[!template text="with list-packages. There's so many ways" start="00:04:51.199" video="mainVideo" id=subtitle]]
+[[!template text="you can explore in Emacs." start="00:04:54.560" video="mainVideo" id=subtitle]]
+[[!template text="For me, that was very delightful." start="00:04:56.880" video="mainVideo" id=subtitle]]
+[[!template text="It really resonated with my bias" start="00:04:59.040" video="mainVideo" id=subtitle]]
+[[!template text="of exploration and human tendencies." start="00:05:01.919" video="mainVideo" id=subtitle]]
+[[!template text="Places to explore in Emacs are wonderful," start="00:05:04.960" video="mainVideo" id=subtitle]]
+[[!template text="and eventually you get down" start="00:05:07.280" video="mainVideo" id=subtitle]]
+[[!template text="into the source code, and it's great." start="00:05:08.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And then we've got communication." start="00:05:12.080" video="mainVideo" id=subtitle]]
+[[!template text="I think communication kind of" start="00:05:14.400" video="mainVideo" id=subtitle]]
+[[!template text="speaks for itself as well." start="00:05:16.639" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is software." start="00:05:17.919" video="mainVideo" id=subtitle]]
+[[!template text="Software is a form of communication." start="00:05:19.520" video="mainVideo" id=subtitle]]
+[[!template text="We're all driven to communicate." start="00:05:22.080" video="mainVideo" id=subtitle]]
+[[!template text="That's why we're here at this conference." start="00:05:23.360" video="mainVideo" id=subtitle]]
+[[!template text="Within Emacs, you've got lots of ways" start="00:05:26.240" video="mainVideo" id=subtitle]]
+[[!template text="to communicate. You've got IRC clients," start="00:05:28.320" video="mainVideo" id=subtitle]]
+[[!template text="mail, you've got news readers." start="00:05:30.960" video="mainVideo" id=subtitle]]
+[[!template text="You could use Org." start="00:05:32.960" video="mainVideo" id=subtitle]]
+[[!template text="I even started working on a magazine in Org" start="00:05:34.080" video="mainVideo" id=subtitle]]
+[[!template text="that I was going to distribute" start="00:05:37.600" video="mainVideo" id=subtitle]]
+[[!template text="via live Debian CDs back in the day." start="00:05:38.800" video="mainVideo" id=subtitle]]
+[[!template text="So I think Emacs for communication" start="00:05:42.479" video="mainVideo" id=subtitle]]
+[[!template text="is pretty clear." start="00:05:45.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Activity. So Activities is just" start="00:05:46.160" video="mainVideo" id=subtitle]]
+[[!template text="a natural thing when you're..." start="00:05:48.639" video="mainVideo" id=subtitle]]
+[[!template text="You see it in children. Right?" start="00:05:51.120" video="mainVideo" id=subtitle]]
+[[!template text="Children always find something to do" start="00:05:52.479" video="mainVideo" id=subtitle]]
+[[!template text="to keep busy, whether they're pretending," start="00:05:54.720" video="mainVideo" id=subtitle]]
+[[!template text="or running around, or moving." start="00:05:57.120" video="mainVideo" id=subtitle]]
+[[!template text="You don't have to have a goal" start="00:05:59.039" video="mainVideo" id=subtitle]]
+[[!template text="or end-product in mind." start="00:06:00.240" video="mainVideo" id=subtitle]]
+[[!template text="People are just active." start="00:06:01.759" video="mainVideo" id=subtitle]]
+[[!template text="You do things. I find that in Emacs," start="00:06:02.800" video="mainVideo" id=subtitle]]
+[[!template text="all the time, when I don't know" start="00:06:06.160" video="mainVideo" id=subtitle]]
+[[!template text="what to work on, sometimes I just go" start="00:06:08.000" video="mainVideo" id=subtitle]]
+[[!template text="into Emacs and hack around and, like," start="00:06:09.919" video="mainVideo" id=subtitle]]
+[[!template text="change things in my config." start="00:06:12.479" video="mainVideo" id=subtitle]]
+[[!template text="I'm sure we've all been there." start="00:06:14.000" video="mainVideo" id=subtitle]]
+[[!template text="So Emacs encourages and enables" start="00:06:16.000" video="mainVideo" id=subtitle]]
+[[!template text="that kind of activity as well." start="00:06:19.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Manipulation is the next one." start="00:06:21.199" video="mainVideo" id=subtitle]]
+[[!template text="So Lisp. Anyone? The fact that Emacs is" start="00:06:23.120" video="mainVideo" id=subtitle]]
+[[!template text="this live Lisp process that's running," start="00:06:27.120" video="mainVideo" id=subtitle]]
+[[!template text="that you can manipulate at your fingertips..." start="00:06:29.919" video="mainVideo" id=subtitle]]
+[[!template text="You couldn't ask for something better." start="00:06:33.360" video="mainVideo" id=subtitle]]
+[[!template text="I think the malleability of Emacs" start="00:06:35.120" video="mainVideo" id=subtitle]]
+[[!template text="is why people love it." start="00:06:37.360" video="mainVideo" id=subtitle]]
+[[!template text="Clearly, the environment of Emacs" start="00:06:39.600" video="mainVideo" id=subtitle]]
+[[!template text="was prepared with manipulation in mind" start="00:06:41.840" video="mainVideo" id=subtitle]]
+[[!template text="from the very start." start="00:06:44.240" video="mainVideo" id=subtitle]]
+[[!template text="We'll go through these next ones" start="00:06:45.280" video="mainVideo" id=subtitle]]
+[[!template text="pretty quickly." start="00:06:46.960" video="mainVideo" id=subtitle]]
+[[!template new="1" text="We've got work or purposeful activity." start="00:06:48.319" video="mainVideo" id=subtitle]]
+[[!template text="Emacs would not exist" start="00:06:51.759" video="mainVideo" id=subtitle]]
+[[!template text="without this human tendency." start="00:06:53.039" video="mainVideo" id=subtitle]]
+[[!template text="it's been worked on" start="00:06:55.120" video="mainVideo" id=subtitle]]
+[[!template text="by free software volunteers" start="00:06:56.319" video="mainVideo" id=subtitle]]
+[[!template text="for 40 years, and this is the kind of" start="00:06:58.240" video="mainVideo" id=subtitle]]
+[[!template text="self-motivated work that inspired me" start="00:07:03.360" video="mainVideo" id=subtitle]]
+[[!template text="to be a hacker." start="00:07:06.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Repetition is another human tendency." start="00:07:09.199" video="mainVideo" id=subtitle]]
+[[!template text="I think that one kind of speaks for itself." start="00:07:11.919" video="mainVideo" id=subtitle]]
+[[!template text="It's this tendency that gave me" start="00:07:14.960" video="mainVideo" id=subtitle]]
+[[!template text="Emacs pinky after learning all of those" start="00:07:17.120" video="mainVideo" id=subtitle]]
+[[!template text="key bindings, and then that same tendency" start="00:07:19.919" video="mainVideo" id=subtitle]]
+[[!template text="drove me to learn another modal key mapping" start="00:07:23.360" video="mainVideo" id=subtitle]]
+[[!template text=" to deal with that. I've repeated myself," start="00:07:26.639" video="mainVideo" id=subtitle]]
+[[!template text="starting over new Emacs configs" start="00:07:29.759" video="mainVideo" id=subtitle]]
+[[!template text="several times. I could give another example," start="00:07:32.400" video="mainVideo" id=subtitle]]
+[[!template text="but I'll just be repeating myself" start="00:07:35.120" video="mainVideo" id=subtitle]]
+[[!template text="at this point." start="00:07:36.960" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And then exactness. So we have a tendency," start="00:07:38.960" video="mainVideo" id=subtitle]]
+[[!template text="a human tendency toward exactness." start="00:07:42.880" video="mainVideo" id=subtitle]]
+[[!template text="That's not one that's very strong for me." start="00:07:45.840" video="mainVideo" id=subtitle]]
+[[!template text="I'm not a super exacting person." start="00:07:48.160" video="mainVideo" id=subtitle]]
+[[!template text="But I think you can see that in Emacs," start="00:07:50.879" video="mainVideo" id=subtitle]]
+[[!template text="like certain parts of it" start="00:07:53.520" video="mainVideo" id=subtitle]]
+[[!template text="have been refined down to exactness." start="00:07:55.520" video="mainVideo" id=subtitle]]
+[[!template text="I know when I'm working," start="00:07:59.599" video="mainVideo" id=subtitle]]
+[[!template text="sometimes it's just the theme that I choose" start="00:08:01.759" video="mainVideo" id=subtitle]]
+[[!template text="or making sure the mode line" start="00:08:04.560" video="mainVideo" id=subtitle]]
+[[!template text="is exactly the way I want it..." start="00:08:06.319" video="mainVideo" id=subtitle]]
+[[!template text="You know, getting that environment" start="00:08:07.840" video="mainVideo" id=subtitle]]
+[[!template text="to feel conducive to thought and work" start="00:08:10.160" video="mainVideo" id=subtitle]]
+[[!template text="is important to me." start="00:08:14.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And then we have abstraction, which..." start="00:08:16.319" video="mainVideo" id=subtitle]]
+[[!template text="That one goes pretty deep," start="00:08:18.560" video="mainVideo" id=subtitle]]
+[[!template text="but I think you can see" start="00:08:19.680" video="mainVideo" id=subtitle]]
+[[!template text="how abstraction works in Emacs." start="00:08:21.840" video="mainVideo" id=subtitle]]
+[[!template text="A buffer is an abstraction." start="00:08:24.080" video="mainVideo" id=subtitle]]
+[[!template text="One of the great things about Emacs" start="00:08:26.080" video="mainVideo" id=subtitle]]
+[[!template text="and about Montessori philosophy" start="00:08:27.840" video="mainVideo" id=subtitle]]
+[[!template text="is that these abstractions" start="00:08:29.199" video="mainVideo" id=subtitle]]
+[[!template text="might not be something" start="00:08:32.080" video="mainVideo" id=subtitle]]
+[[!template text="you need to think about right away," start="00:08:33.200" video="mainVideo" id=subtitle]]
+[[!template text="but they're there, right," start="00:08:34.640" video="mainVideo" id=subtitle]]
+[[!template text="like the fact that a buffer abstracts" start="00:08:35.919" video="mainVideo" id=subtitle]]
+[[!template text="over working with text." start="00:08:39.200" video="mainVideo" id=subtitle]]
+[[!template text="Once that becomes clear to you," start="00:08:41.279" video="mainVideo" id=subtitle]]
+[[!template text="once you have a reason to manipulate it," start="00:08:43.519" video="mainVideo" id=subtitle]]
+[[!template text="having the abstraction of the buffer there" start="00:08:45.760" video="mainVideo" id=subtitle]]
+[[!template text="to work with makes a huge difference." start="00:08:48.320" video="mainVideo" id=subtitle]]
+[[!template text="And then of course," start="00:08:51.440" video="mainVideo" id=subtitle]]
+[[!template text="we can create our own abstractions:" start="00:08:52.160" video="mainVideo" id=subtitle]]
+[[!template text="transients, pop-up buffers, hydras..." start="00:08:54.560" video="mainVideo" id=subtitle]]
+[[!template text="I'm sure there's plenty of examples" start="00:08:57.519" video="mainVideo" id=subtitle]]
+[[!template text="in chat that I can't come up with." start="00:08:59.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And finally, perfection." start="00:09:02.000" video="mainVideo" id=subtitle]]
+[[!template text="All of the human tendencies" start="00:09:03.519" video="mainVideo" id=subtitle]]
+[[!template text="culminate in this one." start="00:09:04.959" video="mainVideo" id=subtitle]]
+[[!template text="Perfection doesn't mean" start="00:09:07.279" video="mainVideo" id=subtitle]]
+[[!template text="like you just have to make" start="00:09:08.320" video="mainVideo" id=subtitle]]
+[[!template text="this perfect shining idealistic thing." start="00:09:10.240" video="mainVideo" id=subtitle]]
+[[!template text="It's about perfecting what we do." start="00:09:13.040" video="mainVideo" id=subtitle]]
+[[!template text="I think everybody who's worked with Emacs" start="00:09:15.680" video="mainVideo" id=subtitle]]
+[[!template text="for a long time," start="00:09:18.800" video="mainVideo" id=subtitle]]
+[[!template text="you perfect your configuration." start="00:09:19.680" video="mainVideo" id=subtitle]]
+[[!template text="Sometimes you tear it down and start over." start="00:09:22.240" video="mainVideo" id=subtitle]]
+[[!template text="If you're working on a package," start="00:09:25.120" video="mainVideo" id=subtitle]]
+[[!template text="you perfect that," start="00:09:26.399" video="mainVideo" id=subtitle]]
+[[!template text="and it's an ongoing process." start="00:09:27.760" video="mainVideo" id=subtitle]]
+[[!template text="An example I can think of are" start="00:09:29.760" video="mainVideo" id=subtitle]]
+[[!template text="like raxod502's packages." start="00:09:31.600" video="mainVideo" id=subtitle]]
+[[!template text="straight.el is an attempt at perfecting" start="00:09:33.680" video="mainVideo" id=subtitle]]
+[[!template text="the package management system in Emacs," start="00:09:36.720" video="mainVideo" id=subtitle]]
+[[!template text="and he's taken a stab at" start="00:09:40.480" video="mainVideo" id=subtitle]]
+[[!template text="several other common things," start="00:09:41.920" video="mainVideo" id=subtitle]]
+[[!template text="like incremental selection and so on." start="00:09:43.440" video="mainVideo" id=subtitle]]
+[[!template text="These aren't necessarily finished problems." start="00:09:46.320" video="mainVideo" id=subtitle]]
+[[!template text="There's room for perfection," start="00:09:50.959" video="mainVideo" id=subtitle]]
+[[!template text="and we have a human tendency to pursue that." start="00:09:52.480" video="mainVideo" id=subtitle]]
+[[!template text="I hope this talk" start="00:09:58.160" video="mainVideo" id=subtitle]]
+[[!template text="has gotten you thinking about" start="00:09:59.040" video="mainVideo" id=subtitle]]
+[[!template text="how Emacs and the Montessori classroom" start="00:10:00.080" video="mainVideo" id=subtitle]]
+[[!template text="are similar--they're both" start="00:10:02.880" video="mainVideo" id=subtitle]]
+[[!template text="prepared environments" start="00:10:04.480" video="mainVideo" id=subtitle]]
+[[!template text="that call upon our human tendencies" start="00:10:06.160" video="mainVideo" id=subtitle]]
+[[!template text="to construct and refine our world--" start="00:10:08.800" video="mainVideo" id=subtitle]]
+[[!template text="and how Emacs respects us as users" start="00:10:12.240" video="mainVideo" id=subtitle]]
+[[!template text="in the hopes that we will grow up into" start="00:10:15.519" video="mainVideo" id=subtitle]]
+[[!template text="creative hackers." start="00:10:18.480" video="mainVideo" id=subtitle]]
+[[!template text="Thank you for listening." start="00:10:21.200" video="mainVideo" id=subtitle]]
+[[!template text="I'm happy to answer any questions" start="00:10:22.240" video="mainVideo" id=subtitle]]
+[[!template text="(captions by sachac)" start="00:10:26.079" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/nangulator.md b/2021/captions/nangulator.md
new file mode 100644
index 00000000..2acc019f
--- /dev/null
+++ b/2021/captions/nangulator.md
@@ -0,0 +1,227 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello. This is Kevin Haddock" start="00:00:00.240" video="mainVideo" id=subtitle]]
+[[!template text="to announce the introduction of N-Angulator," start="00:00:02.800" video="mainVideo" id=subtitle]]
+[[!template text="hereafter called NA." start="00:00:05.839" video="mainVideo" id=subtitle]]
+[[!template text="NA allows you, the user, to supply" start="00:00:07.759" video="mainVideo" id=subtitle]]
+[[!template text="the meaning to your data" start="00:00:10.240" video="mainVideo" id=subtitle]]
+[[!template text="in a concise, efficient way." start="00:00:11.679" video="mainVideo" id=subtitle]]
+[[!template text="How does it work?" start="00:00:13.599" video="mainVideo" id=subtitle]]
+[[!template text="Your files are stored on your hard disk" start="00:00:14.880" video="mainVideo" id=subtitle]]
+[[!template text="in what technically is called" start="00:00:16.880" video="mainVideo" id=subtitle]]
+[[!template text="a hierarchical file system." start="00:00:18.160" video="mainVideo" id=subtitle]]
+[[!template text="What this means is that" start="00:00:20.640" video="mainVideo" id=subtitle]]
+[[!template text="the root of the directory tree can be" start="00:00:22.240" video="mainVideo" id=subtitle]]
+[[!template text="not only files, or what we call leaves," start="00:00:24.560" video="mainVideo" id=subtitle]]
+[[!template text="but also other folders/branches" start="00:00:27.760" video="mainVideo" id=subtitle]]
+[[!template text="that themselves contain other files, leaves," start="00:00:30.720" video="mainVideo" id=subtitle]]
+[[!template text="and/or branches." start="00:00:33.680" video="mainVideo" id=subtitle]]
+[[!template text="This structure is supposed to" start="00:00:36.000" video="mainVideo" id=subtitle]]
+[[!template text="make it easy to locate your data," start="00:00:37.680" video="mainVideo" id=subtitle]]
+[[!template text="but as anyone knows who has worked with this" start="00:00:40.079" video="mainVideo" id=subtitle]]
+[[!template text="single-dimensional file system" start="00:00:42.079" video="mainVideo" id=subtitle]]
+[[!template text="for any length of time," start="00:00:43.600" video="mainVideo" id=subtitle]]
+[[!template text="it can get quite frustrating" start="00:00:45.280" video="mainVideo" id=subtitle]]
+[[!template text="when your file would fit equally well" start="00:00:46.800" video="mainVideo" id=subtitle]]
+[[!template text="on more than one branch of the tree." start="00:00:48.960" video="mainVideo" id=subtitle]]
+[[!template text="What are you to do?" start="00:00:52.079" video="mainVideo" id=subtitle]]
+[[!template text="Create multiple copies everywhere" start="00:00:53.920" video="mainVideo" id=subtitle]]
+[[!template text="it might appropriately fit." start="00:00:55.920" video="mainVideo" id=subtitle]]
+[[!template text="What if the file was something" start="00:00:57.840" video="mainVideo" id=subtitle]]
+[[!template text="people would occasionally modify," start="00:00:59.039" video="mainVideo" id=subtitle]]
+[[!template text="like a spreadsheet or a computer source file?" start="00:01:01.120" video="mainVideo" id=subtitle]]
+[[!template text="You would have to hunt it down in every place" start="00:01:04.879" video="mainVideo" id=subtitle]]
+[[!template text="and apply those changes everywhere by hand." start="00:01:07.760" video="mainVideo" id=subtitle]]
+[[!template text="Also, let's say not only did you want" start="00:01:11.840" video="mainVideo" id=subtitle]]
+[[!template text="to put the file in multiple places," start="00:01:14.720" video="mainVideo" id=subtitle]]
+[[!template text="but it was also more appropriate" start="00:01:17.040" video="mainVideo" id=subtitle]]
+[[!template text="to give it different names?" start="00:01:18.799" video="mainVideo" id=subtitle]]
+[[!template text="Plus, let's say in different areas" start="00:01:21.280" video="mainVideo" id=subtitle]]
+[[!template text="of the tree, there were files" start="00:01:23.280" video="mainVideo" id=subtitle]]
+[[!template text="with the same name" start="00:01:25.119" video="mainVideo" id=subtitle]]
+[[!template text="that had totally different content?" start="00:01:26.560" video="mainVideo" id=subtitle]]
+[[!template text="Then updating all the different instances" start="00:01:29.280" video="mainVideo" id=subtitle]]
+[[!template text="of the file you need" start="00:01:31.280" video="mainVideo" id=subtitle]]
+[[!template text="would become more and more of a nightmare." start="00:01:32.640" video="mainVideo" id=subtitle]]
+[[!template text="In addition, wouldn't it be great" start="00:01:35.200" video="mainVideo" id=subtitle]]
+[[!template text="if we could all speed up" start="00:01:37.920" video="mainVideo" id=subtitle]]
+[[!template text="the actual searching for a particular file" start="00:01:39.520" video="mainVideo" id=subtitle]]
+[[!template text="by selecting multiple branches in the tree" start="00:01:42.479" video="mainVideo" id=subtitle]]
+[[!template text="and simply asking the computer" start="00:01:45.680" video="mainVideo" id=subtitle]]
+[[!template text="to tell us which branches under those" start="00:01:47.200" video="mainVideo" id=subtitle]]
+[[!template text="contain the same file and which do not?" start="00:01:49.680" video="mainVideo" id=subtitle]]
+[[!template text="This would be especially great" start="00:01:52.560" video="mainVideo" id=subtitle]]
+[[!template text="if it were instantaneous." start="00:01:54.000" video="mainVideo" id=subtitle]]
+[[!template text="Well, believe it or not, this is what NA" start="00:01:56.719" video="mainVideo" id=subtitle]]
+[[!template text="brings to the table." start="00:01:58.640" video="mainVideo" id=subtitle]]
+[[!template text="In fact, this is how NA got its name." start="00:02:00.079" video="mainVideo" id=subtitle]]
+[[!template text="Your data is located by a process" start="00:02:03.040" video="mainVideo" id=subtitle]]
+[[!template text="very similar to the triangulation" start="00:02:05.040" video="mainVideo" id=subtitle]]
+[[!template text="used to locate radio signals," start="00:02:06.960" video="mainVideo" id=subtitle]]
+[[!template text="only we are not limited" start="00:02:09.119" video="mainVideo" id=subtitle]]
+[[!template text="to just two or three angles," start="00:02:10.160" video="mainVideo" id=subtitle]]
+[[!template text="but instead, many dozens can be used," start="00:02:12.000" video="mainVideo" id=subtitle]]
+[[!template text="this makes NA appear to be" start="00:02:14.720" video="mainVideo" id=subtitle]]
+[[!template text="what is known in computer lingo" start="00:02:16.879" video="mainVideo" id=subtitle]]
+[[!template text="as an n-dimensional sparse array." start="00:02:18.640" video="mainVideo" id=subtitle]]
+[[!template text="If that sounds complex, don't worry." start="00:02:21.760" video="mainVideo" id=subtitle]]
+[[!template text="It will become clear when you see it" start="00:02:23.599" video="mainVideo" id=subtitle]]
+[[!template text="in operation in a couple of minutes." start="00:02:25.280" video="mainVideo" id=subtitle]]
+[[!template text="To start out, here we see the NA main screen." start="00:02:28.720" video="mainVideo" id=subtitle]]
+[[!template text="There are two vital aspects of mastering NA." start="00:02:32.560" video="mainVideo" id=subtitle]]
+[[!template text="First is the actual mechanics" start="00:02:36.080" video="mainVideo" id=subtitle]]
+[[!template text="of using the program," start="00:02:37.760" video="mainVideo" id=subtitle]]
+[[!template text="which should be second nature" start="00:02:39.120" video="mainVideo" id=subtitle]]
+[[!template text="for most anyone familiar with" start="00:02:40.480" video="mainVideo" id=subtitle]]
+[[!template text="either a Windows or Unix/apple file system." start="00:02:41.920" video="mainVideo" id=subtitle]]
+[[!template text="We have the same operations" start="00:02:46.160" video="mainVideo" id=subtitle]]
+[[!template text="as one might do with Windows Explorer" start="00:02:48.080" video="mainVideo" id=subtitle]]
+[[!template text="or any number of other file tools," start="00:02:50.400" video="mainVideo" id=subtitle]]
+[[!template text="but what we also do" start="00:02:52.560" video="mainVideo" id=subtitle]]
+[[!template text="that generally they do not" start="00:02:54.560" video="mainVideo" id=subtitle]]
+[[!template text="is place a leaf on a branch," start="00:02:56.080" video="mainVideo" id=subtitle]]
+[[!template text="then cruise around adding links to that leaf" start="00:02:58.000" video="mainVideo" id=subtitle]]
+[[!template text="on a multitude of other branches," start="00:03:00.560" video="mainVideo" id=subtitle]]
+[[!template text="which could include creating, renaming," start="00:03:02.720" video="mainVideo" id=subtitle]]
+[[!template text="or restructuring more branches on the fly" start="00:03:05.120" video="mainVideo" id=subtitle]]
+[[!template text="as needed. Plus, when we find ourselves" start="00:03:07.360" video="mainVideo" id=subtitle]]
+[[!template text="hunting for that file," start="00:03:10.480" video="mainVideo" id=subtitle]]
+[[!template text="we can incrementally select" start="00:03:12.319" video="mainVideo" id=subtitle]]
+[[!template text="a stack of branches" start="00:03:13.840" video="mainVideo" id=subtitle]]
+[[!template text="while seeking what the latter branches" start="00:03:15.120" video="mainVideo" id=subtitle]]
+[[!template text="have in common with the earlier ones," start="00:03:17.200" video="mainVideo" id=subtitle]]
+[[!template text="to make putting one's finger on exactly" start="00:03:19.920" video="mainVideo" id=subtitle]]
+[[!template text="the item they're looking for a snap." start="00:03:22.720" video="mainVideo" id=subtitle]]
+[[!template text="Secondly, you have the actual art" start="00:03:26.239" video="mainVideo" id=subtitle]]
+[[!template text="of organizing your data," start="00:03:28.319" video="mainVideo" id=subtitle]]
+[[!template text="and NA doesn't really put" start="00:03:29.680" video="mainVideo" id=subtitle]]
+[[!template text="any limitations on this," start="00:03:31.120" video="mainVideo" id=subtitle]]
+[[!template text="other than the underlying limitations" start="00:03:32.640" video="mainVideo" id=subtitle]]
+[[!template text="of the file system." start="00:03:34.799" video="mainVideo" id=subtitle]]
+[[!template text="Let's get started, shall we?" start="00:03:36.560" video="mainVideo" id=subtitle]]
+[[!template text="Right-clicking the mouse button here" start="00:03:39.760" video="mainVideo" id=subtitle]]
+[[!template text="will bring up what we call" start="00:03:41.920" video="mainVideo" id=subtitle]]
+[[!template text="a branch navigation menu," start="00:03:43.760" video="mainVideo" id=subtitle]]
+[[!template text="because it allows you" start="00:03:46.000" video="mainVideo" id=subtitle]]
+[[!template text="to move around the tree" start="00:03:46.959" video="mainVideo" id=subtitle]]
+[[!template text="or commence a new angle." start="00:03:48.239" video="mainVideo" id=subtitle]]
+[[!template text="We have chosen to organize our data" start="00:03:50.159" video="mainVideo" id=subtitle]]
+[[!template text="with a hopper to put new items in," start="00:03:52.480" video="mainVideo" id=subtitle]]
+[[!template text="and the initial branches representing" start="00:03:55.519" video="mainVideo" id=subtitle]]
+[[!template text="who, what, where, why, and how." start="00:03:57.360" video="mainVideo" id=subtitle]]
+[[!template text="We right-click on the root" start="00:03:59.519" video="mainVideo" id=subtitle]]
+[[!template text="and select 0hopper," start="00:04:01.280" video="mainVideo" id=subtitle]]
+[[!template text="and that branch is added to the display." start="00:04:03.439" video="mainVideo" id=subtitle]]
+[[!template text="If we middle-click on the branch," start="00:04:06.000" video="mainVideo" id=subtitle]]
+[[!template text="we get what is called" start="00:04:08.080" video="mainVideo" id=subtitle]]
+[[!template text="the branch command menu," start="00:04:09.360" video="mainVideo" id=subtitle]]
+[[!template text="which gives us many options," start="00:04:11.280" video="mainVideo" id=subtitle]]
+[[!template text="not the least of which" start="00:04:12.959" video="mainVideo" id=subtitle]]
+[[!template text="is to create a leaf here." start="00:04:13.920" video="mainVideo" id=subtitle]]
+[[!template text="Remember this item as we progress," start="00:04:15.920" video="mainVideo" id=subtitle]]
+[[!template text="because it will become important." start="00:04:18.000" video="mainVideo" id=subtitle]]
+[[!template text="Next we pick what we know is a leaf item," start="00:04:20.320" video="mainVideo" id=subtitle]]
+[[!template text="due to the fact that it does not have" start="00:04:22.960" video="mainVideo" id=subtitle]]
+[[!template text="a trailing slash." start="00:04:24.720" video="mainVideo" id=subtitle]]
+[[!template text="Now, when we right-click on it," start="00:04:30.960" video="mainVideo" id=subtitle]]
+[[!template text="notice the navigation menu is limited to" start="00:04:32.960" video="mainVideo" id=subtitle]]
+[[!template text="the two items: New Angle" start="00:04:35.040" video="mainVideo" id=subtitle]]
+[[!template text="and the leaf name itself." start="00:04:37.040" video="mainVideo" id=subtitle]]
+[[!template text="If we want to view or edit that leaf item," start="00:04:40.960" video="mainVideo" id=subtitle]]
+[[!template text="we can select that item." start="00:04:43.680" video="mainVideo" id=subtitle]]
+[[!template text="Now that we have selected a leaf," start="00:04:45.440" video="mainVideo" id=subtitle]]
+[[!template text="let's middle-click on it" start="00:04:47.280" video="mainVideo" id=subtitle]]
+[[!template text="to bring up what we call" start="00:04:48.560" video="mainVideo" id=subtitle]]
+[[!template text="the leaf command menu." start="00:04:49.520" video="mainVideo" id=subtitle]]
+[[!template text="This shows us a bunch of standard options" start="00:04:51.600" video="mainVideo" id=subtitle]]
+[[!template text="one might do in a typical file tool" start="00:04:54.080" video="mainVideo" id=subtitle]]
+[[!template text="like Microsoft Explorer." start="00:04:56.160" video="mainVideo" id=subtitle]]
+[[!template text="Since we want to do what they cannot do," start="00:04:58.320" video="mainVideo" id=subtitle]]
+[[!template text="let's right-click the leaf" start="00:05:00.479" video="mainVideo" id=subtitle]]
+[[!template text="and select New Angle." start="00:05:01.680" video="mainVideo" id=subtitle]]
+[[!template text="Notice that another slash has appeared" start="00:05:04.639" video="mainVideo" id=subtitle]]
+[[!template text="below the displayed path of the leaf." start="00:05:06.400" video="mainVideo" id=subtitle]]
+[[!template text="Right-click on it, and you will see" start="00:05:09.840" video="mainVideo" id=subtitle]]
+[[!template text="the root branch navigation menu appears again," start="00:05:11.520" video="mainVideo" id=subtitle]]
+[[!template text="but now 0hopper entry has a line" start="00:05:14.639" video="mainVideo" id=subtitle]]
+[[!template text="both above and below it." start="00:05:19.039" video="mainVideo" id=subtitle]]
+[[!template text="Items in between these two lines" start="00:05:20.960" video="mainVideo" id=subtitle]]
+[[!template text="are called members," start="00:05:23.199" video="mainVideo" id=subtitle]]
+[[!template text="and items below them are called others." start="00:05:24.560" video="mainVideo" id=subtitle]]
+[[!template text="What this is saying is that" start="00:05:27.520" video="mainVideo" id=subtitle]]
+[[!template text="the previously selected angle," start="00:05:29.680" video="mainVideo" id=subtitle]]
+[[!template text="which can be a single leaf" start="00:05:32.160" video="mainVideo" id=subtitle]]
+[[!template text="as in this instance," start="00:05:34.160" video="mainVideo" id=subtitle]]
+[[!template text="or can be all of the leaves" start="00:05:35.840" video="mainVideo" id=subtitle]]
+[[!template text="under a particular branch" start="00:05:37.360" video="mainVideo" id=subtitle]]
+[[!template text="chosen to navigate new angle from," start="00:05:38.960" video="mainVideo" id=subtitle]]
+[[!template text="shares content with the items" start="00:05:43.039" video="mainVideo" id=subtitle]]
+[[!template text="under the member area of the menu," start="00:05:44.880" video="mainVideo" id=subtitle]]
+[[!template text="but items in the others area do not." start="00:05:47.680" video="mainVideo" id=subtitle]]
+[[!template text="Since the first angle is 0hopper," start="00:05:50.880" video="mainVideo" id=subtitle]]
+[[!template text="of course it shares content with itself," start="00:05:53.600" video="mainVideo" id=subtitle]]
+[[!template text="and so it appears in members." start="00:05:56.800" video="mainVideo" id=subtitle]]
+[[!template text="Now let's click the middle button" start="00:05:59.199" video="mainVideo" id=subtitle]]
+[[!template text="on the root branch, and see what" start="00:06:01.199" video="mainVideo" id=subtitle]]
+[[!template text="the branch command menu has to say." start="00:06:02.960" video="mainVideo" id=subtitle]]
+[[!template text="Notice that the entry that used to say" start="00:06:07.360" video="mainVideo" id=subtitle]]
+[[!template text="Create a New Leaf now says Add a Link." start="00:06:09.280" video="mainVideo" id=subtitle]]
+[[!template text="This is because we have already selected" start="00:06:13.120" video="mainVideo" id=subtitle]]
+[[!template text="a leaf, and now we want to add links" start="00:06:15.039" video="mainVideo" id=subtitle]]
+[[!template text="to it rather than create a new one." start="00:06:17.360" video="mainVideo" id=subtitle]]
+[[!template text="If you go back to the root" start="00:06:20.479" video="mainVideo" id=subtitle]]
+[[!template text="and reselect 0hopper," start="00:06:21.840" video="mainVideo" id=subtitle]]
+[[!template text="that option will revert back again." start="00:06:24.319" video="mainVideo" id=subtitle]]
+[[!template text="So let's add a link under person." start="00:06:29.039" video="mainVideo" id=subtitle]]
+[[!template text="We right-click the root," start="00:06:40.880" video="mainVideo" id=subtitle]]
+[[!template text="select person, and let's add a link." start="00:06:42.720" video="mainVideo" id=subtitle]]
+[[!template text="Notice the bottom area (called the minibuffer)" start="00:06:46.720" video="mainVideo" id=subtitle]]
+[[!template text="gives us the proposed name of the link," start="00:06:50.560" video="mainVideo" id=subtitle]]
+[[!template text="and we choose to accept it by hitting enter," start="00:06:53.360" video="mainVideo" id=subtitle]]
+[[!template text="or edit it to taste first." start="00:06:55.680" video="mainVideo" id=subtitle]]
+[[!template text="Now let's go back up to" start="00:07:09.759" video="mainVideo" id=subtitle]]
+[[!template text="the end of the prior angle," start="00:07:10.960" video="mainVideo" id=subtitle]]
+[[!template text="select New Angle again," start="00:07:13.120" video="mainVideo" id=subtitle]]
+[[!template text="and then click the resultant /," start="00:07:15.360" video="mainVideo" id=subtitle]]
+[[!template text="and see what are members" start="00:07:18.319" video="mainVideo" id=subtitle]]
+[[!template text="and what are others." start="00:07:20.240" video="mainVideo" id=subtitle]]
+[[!template text="Notice that the 0hopper and person" start="00:07:21.840" video="mainVideo" id=subtitle]]
+[[!template text="are members." start="00:07:24.319" video="mainVideo" id=subtitle]]
+[[!template text="NA knows you added content to the person," start="00:07:25.759" video="mainVideo" id=subtitle]]
+[[!template text="so it moves to members." start="00:07:28.319" video="mainVideo" id=subtitle]]
+[[!template text="Now let's add some more links" start="00:07:32.160" video="mainVideo" id=subtitle]]
+[[!template text="and perhaps a few subdirectories" start="00:07:33.599" video="mainVideo" id=subtitle]]
+[[!template text="for this item." start="00:07:35.360" video="mainVideo" id=subtitle]]
+[[!template text="Notice how we can even eliminate" start="00:08:06.960" video="mainVideo" id=subtitle]]
+[[!template text="the file name extension." start="00:08:08.960" video="mainVideo" id=subtitle]]
+[[!template text="It will still know how to display the item" start="00:08:11.039" video="mainVideo" id=subtitle]]
+[[!template text="as it actually analyzes the file" start="00:08:13.680" video="mainVideo" id=subtitle]]
+[[!template text="to determine its type." start="00:08:15.440" video="mainVideo" id=subtitle]]
+[[!template text="This greatly cleans up your metadata" start="00:08:17.120" video="mainVideo" id=subtitle]]
+[[!template text="and makes it more human." start="00:08:19.120" video="mainVideo" id=subtitle]]
+[[!template text="Now let's pick a branch" start="00:08:40.719" video="mainVideo" id=subtitle]]
+[[!template text="from one of the menus." start="00:08:41.839" video="mainVideo" id=subtitle]]
+[[!template text="For instance, let's look and see" start="00:08:43.519" video="mainVideo" id=subtitle]]
+[[!template text="where any events broadcast were done from." start="00:08:44.880" video="mainVideo" id=subtitle]]
+[[!template text="We select event, broadcast, then New Angle," start="00:08:54.880" video="mainVideo" id=subtitle]]
+[[!template text="and we can see California is in members." start="00:09:06.640" video="mainVideo" id=subtitle]]
+[[!template text="Now we can also do New Angle" start="00:09:09.600" video="mainVideo" id=subtitle]]
+[[!template text="and select person," start="00:09:11.600" video="mainVideo" id=subtitle]]
+[[!template text="and we can see who did them." start="00:09:13.920" video="mainVideo" id=subtitle]]
+[[!template text="Another thing we can do is pick a leaf" start="00:09:16.160" video="mainVideo" id=subtitle]]
+[[!template text="and quickly display" start="00:09:18.720" video="mainVideo" id=subtitle]]
+[[!template text="all angles or links for it," start="00:09:19.920" video="mainVideo" id=subtitle]]
+[[!template text="or if we are willing to wait a little longer," start="00:09:21.920" video="mainVideo" id=subtitle]]
+[[!template text="have NA construct all the display items" start="00:09:24.160" video="mainVideo" id=subtitle]]
+[[!template text="with Edit All Angles," start="00:09:26.720" video="mainVideo" id=subtitle]]
+[[!template text="so we can manipulate them" start="00:09:28.320" video="mainVideo" id=subtitle]]
+[[!template text="just as if we had entered" start="00:09:30.160" video="mainVideo" id=subtitle]]
+[[!template text="or selected them by hand." start="00:09:31.440" video="mainVideo" id=subtitle]]
+[[!template text="There are many more tools in NA" start="00:09:44.320" video="mainVideo" id=subtitle]]
+[[!template text="to handle sets of leaves" start="00:09:46.080" video="mainVideo" id=subtitle]]
+[[!template text="such as scanned pages of a book," start="00:09:47.440" video="mainVideo" id=subtitle]]
+[[!template text="promoting /, demoting nodes," start="00:09:50.320" video="mainVideo" id=subtitle]]
+[[!template text="and so forth." start="00:09:53.040" video="mainVideo" id=subtitle]]
+[[!template text="Thanks for watching." start="00:09:54.560" video="mainVideo" id=subtitle]]
+[[!template text="captions by sachac" start="00:09:55.560" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/native.md b/2021/captions/native.md
new file mode 100644
index 00000000..83e30473
--- /dev/null
+++ b/2021/captions/native.md
@@ -0,0 +1,920 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hi everybody, my name is Andrea Corallo," start="00:00:00.200" video="mainVideo" id=subtitle]]
+[[!template text="and this presentation is about" start="00:00:02.440" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs Lisp Native Compiler --" start="00:00:03.382" video="mainVideo" id=subtitle]]
+[[!template text="having GNU Emacs able to" start="00:00:05.904" video="mainVideo" id=subtitle]]
+[[!template text="compile and run Emacs Lisp as native code." start="00:00:07.184" video="mainVideo" id=subtitle]]
+[[!template text="This project has been my hobby project" start="00:00:08.907" video="mainVideo" id=subtitle]]
+[[!template text="for the last about two years and a half" start="00:00:11.667" video="mainVideo" id=subtitle]]
+[[!template text="And we will see a little bit" start="00:00:14.111" video="mainVideo" id=subtitle]]
+[[!template text="where this project is coming from," start="00:00:15.509" video="mainVideo" id=subtitle]]
+[[!template text="where we are, and where we want to go." start="00:00:17.070" video="mainVideo" id=subtitle]]
+[[!template text="So essentially everything you need to know" start="00:00:19.015" video="mainVideo" id=subtitle]]
+[[!template text="about the Emacs Lisp Native Compiler," start="00:00:20.672" video="mainVideo" id=subtitle]]
+[[!template text="and probably a little more." start="00:00:22.232" video="mainVideo" id=subtitle]]
+[[!template text="Just a little bit of context on Emacs Lisp." start="00:00:23.521" video="mainVideo" id=subtitle]]
+[[!template text="Well, Emacs Lisp is a programming language," start="00:00:26.635" video="mainVideo" id=subtitle]]
+[[!template text="it's indeed a Lisp," start="00:00:30.278" video="mainVideo" id=subtitle]]
+[[!template text="and one year ago I looked for some statistics," start="00:00:33.647" video="mainVideo" id=subtitle]]
+[[!template text="and I was kind of pleased to see" start="00:00:36.722" video="mainVideo" id=subtitle]]
+[[!template text="-- surprised to see actually --" start="00:00:38.842" video="mainVideo" id=subtitle]]
+[[!template text="that it's still kind of popular" start="00:00:40.132" video="mainVideo" id=subtitle]]
+[[!template text="as a programming language." start="00:00:41.073" video="mainVideo" id=subtitle]]
+[[!template text="It doesn't rank that bad" start="00:00:42.944" video="mainVideo" id=subtitle]]
+[[!template text="against other programming languages." start="00:00:43.785" video="mainVideo" id=subtitle]]
+[[!template text="Also, the other important fact about Emacs Lisp" start="00:00:45.658" video="mainVideo" id=subtitle]]
+[[!template text="is that there is a lot of Emacs Lisp out there," start="00:00:48.487" video="mainVideo" id=subtitle]]
+[[!template text="and this will have an impact on this project." start="00:00:51.622" video="mainVideo" id=subtitle]]
+[[!template text="It's a programming language that is capable" start="00:00:56.025" video="mainVideo" id=subtitle]]
+[[!template text="of almost any task, so it's" start="00:00:57.734" video="mainVideo" id=subtitle]]
+[[!template text="almost a general-purpose programming language," start="00:00:59.420" video="mainVideo" id=subtitle]]
+[[!template text="and this reflects on Emacs itself," start="00:01:01.831" video="mainVideo" id=subtitle]]
+[[!template text="that it's capable of almost any task." start="00:01:04.217" video="mainVideo" id=subtitle]]
+[[!template text="Indeed this &quot ;almost&quot ; is something we want to fix," start="00:01:07.335" video="mainVideo" id=subtitle]]
+[[!template text="because we want to do everything," start="00:01:09.781" video="mainVideo" id=subtitle]]
+[[!template text="we want to do all of our computing with Emacs." start="00:01:10.820" video="mainVideo" id=subtitle]]
+[[!template text="Also, an interesting aspect for me" start="00:01:14.321" video="mainVideo" id=subtitle]]
+[[!template text="is that it's not specified by any standard." start="00:01:16.625" video="mainVideo" id=subtitle]]
+[[!template text="This implies it can evolve in a more agile way" start="00:01:19.005" video="mainVideo" id=subtitle]]
+[[!template text="without having to change the standard, etc." start="00:01:22.609" video="mainVideo" id=subtitle]]
+[[!template text="And, in fact, it's kind of improving," start="00:01:25.770" video="mainVideo" id=subtitle]]
+[[!template text="I believe relatively fast." start="00:01:27.970" video="mainVideo" id=subtitle]]
+[[!template text="A little bit about Lisp in general." start="00:01:30.473" video="mainVideo" id=subtitle]]
+[[!template text="First, it's the best programming language ever," start="00:01:32.892" video="mainVideo" id=subtitle]]
+[[!template text="we all know it." start="00:01:35.052" video="mainVideo" id=subtitle]]
+[[!template text="It has a lot of very nice properties," start="00:01:35.813" video="mainVideo" id=subtitle]]
+[[!template text="like it's dynamic, it's homoiconic, etc." start="00:01:37.934" video="mainVideo" id=subtitle]]
+[[!template text="But the interesting thing for implementors," start="00:01:40.462" video="mainVideo" id=subtitle]]
+[[!template text="is that, in theory," start="00:01:42.496" video="mainVideo" id=subtitle]]
+[[!template text="it can be implemented with very few primitives." start="00:01:43.576" video="mainVideo" id=subtitle]]
+[[!template text="You build very few primitives that are like magic," start="00:01:46.817" video="mainVideo" id=subtitle]]
+[[!template text="and on top of this," start="00:01:49.590" video="mainVideo" id=subtitle]]
+[[!template text="you can implement the whole language." start="00:01:51.938" video="mainVideo" id=subtitle]]
+[[!template text="This sounds very nice," start="00:01:53.873" video="mainVideo" id=subtitle]]
+[[!template text="and very appealing for implementors" start="00:01:55.860" video="mainVideo" id=subtitle]]
+[[!template text="meaning to implement a new Lisp implementation," start="00:01:57.381" video="mainVideo" id=subtitle]]
+[[!template text="or improving or modifying an existing one." start="00:02:00.279" video="mainVideo" id=subtitle]]
+[[!template text="So the question is:" start="00:02:02.641" video="mainVideo" id=subtitle]]
+[[!template text="how many primitives do we have to implement" start="00:02:04.263" video="mainVideo" id=subtitle]]
+[[!template text="if we want to change" start="00:02:07.764" video="mainVideo" id=subtitle]]
+[[!template text="the GNU Emacs Lisp implementation?" start="00:02:09.485" video="mainVideo" id=subtitle]]
+[[!template text="Unfortunately, not really as few as we would like." start="00:02:13.308" video="mainVideo" id=subtitle]]
+[[!template text="In GNU Emacs, we have about 1500 primitives," start="00:02:20.234" video="mainVideo" id=subtitle]]
+[[!template text="and the main reason for that is performance." start="00:02:25.400" video="mainVideo" id=subtitle]]
+[[!template text="Actually, GNU Emacs was written" start="00:02:28.071" video="mainVideo" id=subtitle]]
+[[!template text="when performance was a big issue," start="00:02:31.064" video="mainVideo" id=subtitle]]
+[[!template text="and nowadays certain parts" start="00:02:34.393" video="mainVideo" id=subtitle]]
+[[!template text="are still performance-critical." start="00:02:36.594" video="mainVideo" id=subtitle]]
+[[!template text="We have a lot of C code;" start="00:02:38.591" video="mainVideo" id=subtitle]]
+[[!template text="30% of the GNU Emacs codebase is C code," start="00:02:40.395" video="mainVideo" id=subtitle]]
+[[!template text="and we have to maintain this." start="00:02:46.435" video="mainVideo" id=subtitle]]
+[[!template text="But not only that, this is the main barrier" start="00:02:49.279" video="mainVideo" id=subtitle]]
+[[!template text="for people that tried in the past" start="00:02:52.959" video="mainVideo" id=subtitle]]
+[[!template text="to change the Emacs Lisp implementation." start="00:02:55.681" video="mainVideo" id=subtitle]]
+[[!template text="Because not only do you have to" start="00:02:57.765" video="mainVideo" id=subtitle]]
+[[!template text="replace these primitives," start="00:02:59.202" video="mainVideo" id=subtitle]]
+[[!template text="all of them or part of them," start="00:03:01.683" video="mainVideo" id=subtitle]]
+[[!template text="but sometimes they also share (these primitives)," start="00:03:04.012" video="mainVideo" id=subtitle]]
+[[!template text="internal data structures." start="00:03:06.484" video="mainVideo" id=subtitle]]
+[[!template text="For instance, it's very difficult to say:" start="00:03:08.055" video="mainVideo" id=subtitle]]
+[[!template text="Now I want to go from C" start="00:03:09.846" video="mainVideo" id=subtitle]]
+[[!template text="to a different programming language" start="00:03:12.926" video="mainVideo" id=subtitle]]
+[[!template text="for implementing these primitives." start="00:03:14.006" video="mainVideo" id=subtitle]]
+[[!template text="So this has been, effectively," start="00:03:15.740" video="mainVideo" id=subtitle]]
+[[!template text="the main barrier for doing this work." start="00:03:17.128" video="mainVideo" id=subtitle]]
+[[!template text="Another interesting aspect" start="00:03:20.486" video="mainVideo" id=subtitle]]
+[[!template text="about the GNU Emacs implementation" start="00:03:22.190" video="mainVideo" id=subtitle]]
+[[!template text="is that Lisp can run interpreted" start="00:03:23.970" video="mainVideo" id=subtitle]]
+[[!template text="or byte-compiled for performance," start="00:03:26.291" video="mainVideo" id=subtitle]]
+[[!template text="and the byte compiler itself" start="00:03:28.752" video="mainVideo" id=subtitle]]
+[[!template text="is written in Emacs Lisp." start="00:03:30.733" video="mainVideo" id=subtitle]]
+[[!template text="This implies that GNU Emacs has to go through" start="00:03:32.773" video="mainVideo" id=subtitle]]
+[[!template text="a bootstrap procedure in order to be built." start="00:03:35.134" video="mainVideo" id=subtitle]]
+[[!template text="But it's kind of interesting" start="00:03:37.319" video="mainVideo" id=subtitle]]
+[[!template text="for something that started as a text editor," start="00:03:38.815" video="mainVideo" id=subtitle]]
+[[!template text="or something like it." start="00:03:41.937" video="mainVideo" id=subtitle]]
+[[!template text="The byte-code that is Emacs Lisp" start="00:03:43.203" video="mainVideo" id=subtitle]]
+[[!template text="when it's been byte compiled," start="00:03:47.979" video="mainVideo" id=subtitle]]
+[[!template text="it's running on a stack-based virtual machine" start="00:03:50.379" video="mainVideo" id=subtitle]]
+[[!template text="that is implemented in C." start="00:03:53.180" video="mainVideo" id=subtitle]]
+[[!template text="OK, so I've listed a bunch of areas" start="00:03:55.253" video="mainVideo" id=subtitle]]
+[[!template text="where Emacs Lisp could improve:" start="00:03:59.842" video="mainVideo" id=subtitle]]
+[[!template text="Namespace, Extensibility, Performance," start="00:04:02.178" video="mainVideo" id=subtitle]]
+[[!template text="and Debuggability, and Diagnostic, we could say." start="00:04:07.025" video="mainVideo" id=subtitle]]
+[[!template text="This activity, this project in particular," start="00:04:11.346" video="mainVideo" id=subtitle]]
+[[!template text="is affecting primarily Performance" start="00:04:14.428" video="mainVideo" id=subtitle]]
+[[!template text="and the performance area the Execution Engine." start="00:04:17.189" video="mainVideo" id=subtitle]]
+[[!template text="That said," start="00:04:21.414" video="mainVideo" id=subtitle]]
+[[!template text="I think it has an impact also on Extensibility," start="00:04:22.671" video="mainVideo" id=subtitle]]
+[[!template text="and I hope it will have an impact also" start="00:04:25.957" video="mainVideo" id=subtitle]]
+[[!template text="on programming diagnostics," start="00:04:27.913" video="mainVideo" id=subtitle]]
+[[!template text="so giving better warnings, unknown." start="00:04:29.881" video="mainVideo" id=subtitle]]
+[[!template text="So which are the benefits" start="00:04:32.604" video="mainVideo" id=subtitle]]
+[[!template text="of increasing the Emacs Lisp performance?" start="00:04:36.795" video="mainVideo" id=subtitle]]
+[[!template text="Indeed, we will have, if we do that," start="00:04:39.316" video="mainVideo" id=subtitle]]
+[[!template text="programs that run faster." start="00:04:43.078" video="mainVideo" id=subtitle]]
+[[!template text="But the main implication of that" start="00:04:45.774" video="mainVideo" id=subtitle]]
+[[!template text="is that we could write less C;" start="00:04:48.840" video="mainVideo" id=subtitle]]
+[[!template text="we could maintain and debug less C." start="00:04:50.860" video="mainVideo" id=subtitle]]
+[[!template text="That is kind of a time-consuming task." start="00:04:53.041" video="mainVideo" id=subtitle]]
+[[!template text="And we could also allow for" start="00:04:56.542" video="mainVideo" id=subtitle]]
+[[!template text="writing performance-critical extensions" start="00:04:59.603" video="mainVideo" id=subtitle]]
+[[!template text="directly in Lisp" start="00:05:01.824" video="mainVideo" id=subtitle]]
+[[!template text="without having to use systems like" start="00:05:03.909" video="mainVideo" id=subtitle]]
+[[!template text="I think there's a bunch." start="00:05:06.406" video="mainVideo" id=subtitle]]
+[[!template text="These are very consistent benefits." start="00:05:09.927" video="mainVideo" id=subtitle]]
+[[!template text="OK, Project Goals," start="00:05:14.899" video="mainVideo" id=subtitle]]
+[[!template text="but I think the title of this slide" start="00:05:16.769" video="mainVideo" id=subtitle]]
+[[!template text="maybe should be Project Requirements." start="00:05:18.930" video="mainVideo" id=subtitle]]
+[[!template text="So when I started this activity," start="00:05:21.623" video="mainVideo" id=subtitle]]
+[[!template text="I set some requirements for the project," start="00:05:23.331" video="mainVideo" id=subtitle]]
+[[!template text="with the main goal in mind: to go upstream." start="00:05:27.049" video="mainVideo" id=subtitle]]
+[[!template text="So I wanted to create something," start="00:05:29.570" video="mainVideo" id=subtitle]]
+[[!template text="a modified implementation of GNU Emacs," start="00:05:31.594" video="mainVideo" id=subtitle]]
+[[!template text="that was compatible" start="00:05:34.353" video="mainVideo" id=subtitle]]
+[[!template text="as close to 100% as possible" start="00:05:36.776" video="mainVideo" id=subtitle]]
+[[!template text="to the current implementation." start="00:05:38.696" video="mainVideo" id=subtitle]]
+[[!template text="And when I say &quot ;current implementation,&quot ;" start="00:05:40.620" video="mainVideo" id=subtitle]]
+[[!template text="I don't refer to what" start="00:05:42.820" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs Lisp Programming Manual specifies" start="00:05:44.859" video="mainVideo" id=subtitle]]
+[[!template text="as expected behavior of the implementation," start="00:05:46.980" video="mainVideo" id=subtitle]]
+[[!template text="but really the implementation itself." start="00:05:49.907" video="mainVideo" id=subtitle]]
+[[!template text="This is because there are a lot of corner cases" start="00:05:52.309" video="mainVideo" id=subtitle]]
+[[!template text="that are not specified by the manual," start="00:05:53.942" video="mainVideo" id=subtitle]]
+[[!template text="but programs do rely on that," start="00:05:56.493" video="mainVideo" id=subtitle]]
+[[!template text="and given there is a ton of Emacs Lisp" start="00:05:58.193" video="mainVideo" id=subtitle]]
+[[!template text="already around," start="00:06:00.625" video="mainVideo" id=subtitle]]
+[[!template text="compatibility was definitely a major requirement." start="00:06:02.037" video="mainVideo" id=subtitle]]
+[[!template text="I wanted to produce something that had" start="00:06:05.541" video="mainVideo" id=subtitle]]
+[[!template text="reduced impact on the Emacs codebase," start="00:06:07.827" video="mainVideo" id=subtitle]]
+[[!template text="at least as much as possible." start="00:06:09.687" video="mainVideo" id=subtitle]]
+[[!template text="So I didn't want to rewrite all of GNU Emacs." start="00:06:11.644" video="mainVideo" id=subtitle]]
+[[!template text="Indeed, because it would have been" start="00:06:14.827" video="mainVideo" id=subtitle]]
+[[!template text="too much work for one single person," start="00:06:17.710" video="mainVideo" id=subtitle]]
+[[!template text="but also still thinking" start="00:06:21.171" video="mainVideo" id=subtitle]]
+[[!template text="to an upstream outcome all of this time." start="00:06:25.473" video="mainVideo" id=subtitle]]
+[[!template text="Another requirement was to have" start="00:06:29.258" video="mainVideo" id=subtitle]]
+[[!template text="no, or very reduced, impact on the user," start="00:06:32.076" video="mainVideo" id=subtitle]]
+[[!template text="so I didn't want to change" start="00:06:34.804" video="mainVideo" id=subtitle]]
+[[!template text="the way Emacs is used by you." start="00:06:36.556" video="mainVideo" id=subtitle]]
+[[!template text="And last but not least," start="00:06:38.708" video="mainVideo" id=subtitle]]
+[[!template text="introducing new dependencies," start="00:06:40.718" video="mainVideo" id=subtitle]]
+[[!template text="those dependencies had to be Free Software," start="00:06:42.951" video="mainVideo" id=subtitle]]
+[[!template text="possibly GPL," start="00:06:45.479" video="mainVideo" id=subtitle]]
+[[!template text="and also an important requirement" start="00:06:47.295" video="mainVideo" id=subtitle]]
+[[!template text="is that these dependencies had to be" start="00:06:50.097" video="mainVideo" id=subtitle]]
+[[!template text="some kind of trusted software that we know" start="00:06:53.043" video="mainVideo" id=subtitle]]
+[[!template text="is going to be maintained in the future." start="00:06:55.243" video="mainVideo" id=subtitle]]
+[[!template text="Given Emacs has been around since forever," start="00:06:56.781" video="mainVideo" id=subtitle]]
+[[!template text="and will be around forever and ever," start="00:06:59.363" video="mainVideo" id=subtitle]]
+[[!template text="this was another very important point." start="00:07:01.285" video="mainVideo" id=subtitle]]
+[[!template text="A little bit of history of this project/" start="00:07:05.367" video="mainVideo" id=subtitle]]
+[[!template text="a quick timeline." start="00:07:08.808" video="mainVideo" id=subtitle]]
+[[!template text="2019, in May, I did my first commit," start="00:07:10.748" video="mainVideo" id=subtitle]]
+[[!template text="I think it was when I tried to write" start="00:07:14.490" video="mainVideo" id=subtitle]]
+[[!template text="my first primitive function ever in C," start="00:07:17.210" video="mainVideo" id=subtitle]]
+[[!template text="in GNU Emacs." start="00:07:20.332" video="mainVideo" id=subtitle]]
+[[!template text="And this was an attempt to try to compile" start="00:07:21.852" video="mainVideo" id=subtitle]]
+[[!template text="a function that, once executed, returning ?" start="00:07:24.934" video="mainVideo" id=subtitle]]
+[[!template text="That was it. Six months after (about)," start="00:07:30.415" video="mainVideo" id=subtitle]]
+[[!template text="I had something that was kind of working," start="00:07:33.857" video="mainVideo" id=subtitle]]
+[[!template text="So I was able to start up a semi-standard Emacs" start="00:07:37.157" video="mainVideo" id=subtitle]]
+[[!template text="and then to compile and load," start="00:07:42.899" video="mainVideo" id=subtitle]]
+[[!template text="and replacing most of the functions" start="00:07:44.981" video="mainVideo" id=subtitle]]
+[[!template text="that I had defined floating in my Lisp universe." start="00:07:47.321" video="mainVideo" id=subtitle]]
+[[!template text="Those functions are the functions" start="00:07:51.022" video="mainVideo" id=subtitle]]
+[[!template text="that are essentially composing Emacs," start="00:07:54.304" video="mainVideo" id=subtitle]]
+[[!template text="at least the Lisp side of Emacs." start="00:07:56.044" video="mainVideo" id=subtitle]]
+[[!template text="A lot of features were missing," start="00:07:57.984" video="mainVideo" id=subtitle]]
+[[!template text="like I had no Garbage Collector support," start="00:08:01.186" video="mainVideo" id=subtitle]]
+[[!template text="no bootstrap, I was not optimizing these functions" start="00:08:03.526" video="mainVideo" id=subtitle]]
+[[!template text="Because optimization would be broken." start="00:08:07.108" video="mainVideo" id=subtitle]]
+[[!template text="No image dump support, etc." start="00:08:10.169" video="mainVideo" id=subtitle]]
+[[!template text="But I think this proved the design could work." start="00:08:12.850" video="mainVideo" id=subtitle]]
+[[!template text="So I sent to email to emacs-devel. I said" start="00:08:16.431" video="mainVideo" id=subtitle]]
+[[!template text="I have this stuff I'm working on," start="00:08:19.272" video="mainVideo" id=subtitle]]
+[[!template text="and I wanted some feedback from the upstream" start="00:08:20.953" video="mainVideo" id=subtitle]]
+[[!template text="to see if there was some interest." start="00:08:24.714" video="mainVideo" id=subtitle]]
+[[!template text="I believe the outcome of this was positive" start="00:08:27.635" video="mainVideo" id=subtitle]]
+[[!template text="because about one month after," start="00:08:30.557" video="mainVideo" id=subtitle]]
+[[!template text="I pushed my branch within the Emacs git" start="00:08:32.937" video="mainVideo" id=subtitle]]
+[[!template text="as a feature branch, and shortly after," start="00:08:35.798" video="mainVideo" id=subtitle]]
+[[!template text="we started to use the bug tracker to track bugs." start="00:08:38.539" video="mainVideo" id=subtitle]]
+[[!template text="So essentially we moved the development" start="00:08:42.779" video="mainVideo" id=subtitle]]
+[[!template text="on the upstream infrastructure." start="00:08:45.580" video="mainVideo" id=subtitle]]
+[[!template text="I believe two years after the first commit," start="00:08:50.140" video="mainVideo" id=subtitle]]
+[[!template text="the project was merged" start="00:08:55.721" video="mainVideo" id=subtitle]]
+[[!template text="after literally hundreds of bugs solved," start="00:08:57.882" video="mainVideo" id=subtitle]]
+[[!template text="and improvements, suggestions unknown" start="00:09:01.022" video="mainVideo" id=subtitle]]
+[[!template text="and this was about six months ago." start="00:09:03.943" video="mainVideo" id=subtitle]]
+[[!template text="Before discussing how the native compiler works," start="00:09:08.723" video="mainVideo" id=subtitle]]
+[[!template text="I think it's worth looking at" start="00:09:12.464" video="mainVideo" id=subtitle]]
+[[!template text="how Lisp is implemented in GNU Emacs." start="00:09:14.324" video="mainVideo" id=subtitle]]
+[[!template text="We have Lisp_Objects" start="00:09:17.745" video="mainVideo" id=subtitle]]
+[[!template text="floating around our Lisp universe," start="00:09:19.405" video="mainVideo" id=subtitle]]
+[[!template text="and they are internally represented in this way." start="00:09:22.045" video="mainVideo" id=subtitle]]
+[[!template text="We have what is called a tagged pointer," start="00:09:24.006" video="mainVideo" id=subtitle]]
+[[!template text="that is just a regular pointer" start="00:09:25.706" video="mainVideo" id=subtitle]]
+[[!template text="that is pointing to the area of memory" start="00:09:27.506" video="mainVideo" id=subtitle]]
+[[!template text="where we hold the real data of the object." start="00:09:29.386" video="mainVideo" id=subtitle]]
+[[!template text="But within this tagged pointer," start="00:09:32.027" video="mainVideo" id=subtitle]]
+[[!template text="we reserve a few bits" start="00:09:34.287" video="mainVideo" id=subtitle]]
+[[!template text="to indicate the type of object we are pointing to." start="00:09:36.848" video="mainVideo" id=subtitle]]
+[[!template text="This is important because" start="00:09:39.068" video="mainVideo" id=subtitle]]
+[[!template text="each time we access an object," start="00:09:40.628" video="mainVideo" id=subtitle]]
+[[!template text="we have to typically check those bits" start="00:09:42.388" video="mainVideo" id=subtitle]]
+[[!template text="to check that the object we are manipulating" start="00:09:46.269" video="mainVideo" id=subtitle]]
+[[!template text="is of the right kind," start="00:09:49.129" video="mainVideo" id=subtitle]]
+[[!template text="remove those bits, and, if we are happy," start="00:09:50.630" video="mainVideo" id=subtitle]]
+[[!template text="access the object, otherwise unknown." start="00:09:52.630" video="mainVideo" id=subtitle]]
+[[!template text="All the objects are like this," start="00:09:55.910" video="mainVideo" id=subtitle]]
+[[!template text="except for typically Fixnums," start="00:09:57.791" video="mainVideo" id=subtitle]]
+[[!template text="that are small integers" start="00:09:59.831" video="mainVideo" id=subtitle]]
+[[!template text="that we manage to fit directly within the pointer." start="00:10:01.131" video="mainVideo" id=subtitle]]
+[[!template text="Also for manipulating Fixnums," start="00:10:04.992" video="mainVideo" id=subtitle]]
+[[!template text="we have to check the tag bits each time." start="00:10:07.392" video="mainVideo" id=subtitle]]
+[[!template text="Whenever we are not sure of the type of object" start="00:10:09.513" video="mainVideo" id=subtitle]]
+[[!template text="we are manipulating (read: almost every time)," start="00:10:13.273" video="mainVideo" id=subtitle]]
+[[!template text="we have to check those bits and remove those bits" start="00:10:16.594" video="mainVideo" id=subtitle]]
+[[!template text="before doing any manipulation on the Fixnum." start="00:10:19.014" video="mainVideo" id=subtitle]]
+[[!template text="How Emacs Lisp is byte-compiled and executed" start="00:10:21.854" video="mainVideo" id=subtitle]]
+[[!template text="in, let's call it, &quot ;Vanilla&quot ;." start="00:10:26.115" video="mainVideo" id=subtitle]]
+[[!template text="If we have a Lisp expression of this kind:" start="00:10:27.875" video="mainVideo" id=subtitle]]
+[[!template text="We take the variable 'a' we do plus 2," start="00:10:30.156" video="mainVideo" id=subtitle]]
+[[!template text="and then we multiply the result by 3," start="00:10:32.876" video="mainVideo" id=subtitle]]
+[[!template text="the byte compiler will produce this LAP code." start="00:10:34.976" video="mainVideo" id=subtitle]]
+[[!template text="LAP code is essentially" start="00:10:37.477" video="mainVideo" id=subtitle]]
+[[!template text="the assembly for the byte-code," start="00:10:38.597" video="mainVideo" id=subtitle]]
+[[!template text="so it's the &quot ;intermediate representation&quot ;" start="00:10:40.117" video="mainVideo" id=subtitle]]
+[[!template text="that will assembled into byte-code. (.elc files)" start="00:10:43.798" video="mainVideo" id=subtitle]]
+[[!template text="How is this program executed?" start="00:10:48.558" video="mainVideo" id=subtitle]]
+[[!template text="As I mentioned, it's executed in a virtual machine" start="00:10:50.839" video="mainVideo" id=subtitle]]
+[[!template text="that is stack-based," start="00:10:53.739" video="mainVideo" id=subtitle]]
+[[!template text="but we start with an execution stack that's empty," start="00:10:55.800" video="mainVideo" id=subtitle]]
+[[!template text="and a stack pointer pointing to its bottom." start="00:10:58.640" video="mainVideo" id=subtitle]]
+[[!template text="And we execute the first instruction," start="00:11:01.780" video="mainVideo" id=subtitle]]
+[[!template text="that is pushing in the stack the value of 'a'," start="00:11:04.380" video="mainVideo" id=subtitle]]
+[[!template text="in this case, 100. Then we push the constant 2." start="00:11:07.220" video="mainVideo" id=subtitle]]
+[[!template text="Then we do the summation," start="00:11:10.460" video="mainVideo" id=subtitle]]
+[[!template text="and we have the result in the stack." start="00:11:12.500" video="mainVideo" id=subtitle]]
+[[!template text="Same: we push the constant 3," start="00:11:14.140" video="mainVideo" id=subtitle]]
+[[!template text="we do the multiplication," start="00:11:16.960" video="mainVideo" id=subtitle]]
+[[!template text="and we will be able to return." start="00:11:17.720" video="mainVideo" id=subtitle]]
+[[!template text="Now, what's good and what's bad about this?" start="00:11:19.360" video="mainVideo" id=subtitle]]
+[[!template text="A good thing is that it's very simple" start="00:11:22.800" video="mainVideo" id=subtitle]]
+[[!template text="to start from Lisp" start="00:11:25.900" video="mainVideo" id=subtitle]]
+[[!template text="and compile this kind of LAP output." start="00:11:27.560" video="mainVideo" id=subtitle]]
+[[!template text="At least it's reasonably simple." start="00:11:31.420" video="mainVideo" id=subtitle]]
+[[!template text="The compiler is not that complex." start="00:11:34.340" video="mainVideo" id=subtitle]]
+[[!template text="The bad thing is that all this machinery" start="00:11:36.340" video="mainVideo" id=subtitle]]
+[[!template text="-- push and pop, etc. --" start="00:11:39.100" video="mainVideo" id=subtitle]]
+[[!template text="it's very different from how a modern CPU works." start="00:11:40.760" video="mainVideo" id=subtitle]]
+[[!template text="Because modern CPUs," start="00:11:44.420" video="mainVideo" id=subtitle]]
+[[!template text="they are not stack-based anymore" start="00:11:45.820" video="mainVideo" id=subtitle]]
+[[!template text="but they have instead a fixed number of registers," start="00:11:47.760" video="mainVideo" id=subtitle]]
+[[!template text="and they work with assignment and operation" start="00:11:51.000" video="mainVideo" id=subtitle]]
+[[!template text="within these registers" start="00:11:54.120" video="mainVideo" id=subtitle]]
+[[!template text="that are generally called &quot ;general-purpose.&quot ;" start="00:11:55.140" video="mainVideo" id=subtitle]]
+[[!template text="So to execute this LAP program," start="00:11:57.140" video="mainVideo" id=subtitle]]
+[[!template text="there is another program," start="00:11:59.360" video="mainVideo" id=subtitle]]
+[[!template text="that is the implementation of the VM itself" start="00:12:00.860" video="mainVideo" id=subtitle]]
+[[!template text="that is doing conversion during runtime." start="00:12:02.700" video="mainVideo" id=subtitle]]
+[[!template text="So it's interpreting the LAP program" start="00:12:06.500" video="mainVideo" id=subtitle]]
+[[!template text="and it's converting it into instructions" start="00:12:08.420" video="mainVideo" id=subtitle]]
+[[!template text="that we can execute on the CPU." start="00:12:11.460" video="mainVideo" id=subtitle]]
+[[!template text="This conversion is done each time" start="00:12:13.280" video="mainVideo" id=subtitle]]
+[[!template text="we will run some byte-code." start="00:12:15.040" video="mainVideo" id=subtitle]]
+[[!template text="And it's something that we want to avoid." start="00:12:17.200" video="mainVideo" id=subtitle]]
+[[!template text="Instead of this live conversion," start="00:12:19.860" video="mainVideo" id=subtitle]]
+[[!template text="we want to convert once:" start="00:12:21.660" video="mainVideo" id=subtitle]]
+[[!template text="our Lisp program into native code," start="00:12:26.320" video="mainVideo" id=subtitle]]
+[[!template text="that is, a binary program that can be executed" start="00:12:29.020" video="mainVideo" id=subtitle]]
+[[!template text="directly by our CPU." start="00:12:32.480" video="mainVideo" id=subtitle]]
+[[!template text="We want to save all this unnecessary conversion" start="00:12:34.500" video="mainVideo" id=subtitle]]
+[[!template text="that we do each time we are running a program" start="00:12:36.780" video="mainVideo" id=subtitle]]
+[[!template text="while we are running it." start="00:12:39.100" video="mainVideo" id=subtitle]]
+[[!template text="And we want to do this process just once," start="00:12:39.860" video="mainVideo" id=subtitle]]
+[[!template text="when we are compiling." start="00:12:42.160" video="mainVideo" id=subtitle]]
+[[!template text="That's the main goal of this activity." start="00:12:43.840" video="mainVideo" id=subtitle]]
+[[!template text="How is the byte compiler implemented?" start="00:12:46.340" video="mainVideo" id=subtitle]]
+[[!template text="As any compiler it's a pipeline of transformations." start="00:12:50.300" video="mainVideo" id=subtitle]]
+[[!template text="We go through macro expansion, closure conversion," start="00:12:54.040" video="mainVideo" id=subtitle]]
+[[!template text="we have a bunch of source level optimization." start="00:12:58.660" video="mainVideo" id=subtitle]]
+[[!template text="Then we go into LAP," start="00:13:02.220" video="mainVideo" id=subtitle]]
+[[!template text="that's the transformation we are interested in," start="00:13:04.040" video="mainVideo" id=subtitle]]
+[[!template text="and after a few optimizations on LAP," start="00:13:06.900" video="mainVideo" id=subtitle]]
+[[!template text="LAP is assembled into byte-code." start="00:13:10.700" video="mainVideo" id=subtitle]]
+[[!template text="So if we list it" start="00:13:14.240" video="mainVideo" id=subtitle]]
+[[!template text="in terms of intermediate representations," start="00:13:16.980" video="mainVideo" id=subtitle]]
+[[!template text="we can simplify this pipeline like this." start="00:13:19.420" video="mainVideo" id=subtitle]]
+[[!template text="We start with Lisp, and at a certain point" start="00:13:23.700" video="mainVideo" id=subtitle]]
+[[!template text="we are manipulating the program in LAP form," start="00:13:26.200" video="mainVideo" id=subtitle]]
+[[!template text="and then at the end we produce the byte-code" start="00:13:29.620" video="mainVideo" id=subtitle]]
+[[!template text="that is the .elc file that you run" start="00:13:32.080" video="mainVideo" id=subtitle]]
+[[!template text="What I wanted to realize was something like this." start="00:13:34.660" video="mainVideo" id=subtitle]]
+[[!template text="I wanted to start from LAP, do something," start="00:13:37.760" video="mainVideo" id=subtitle]]
+[[!template text="and jump into GCC using libgccjit" start="00:13:41.300" video="mainVideo" id=subtitle]]
+[[!template text="and in particular" start="00:13:44.700" video="mainVideo" id=subtitle]]
+[[!template text="the libgccjit Intermediate Representation" start="00:13:45.660" video="mainVideo" id=subtitle]]
+[[!template text="that we will discuss." start="00:13:48.100" video="mainVideo" id=subtitle]]
+[[!template text="Now, why I wanted to do something like this?" start="00:13:50.440" video="mainVideo" id=subtitle]]
+[[!template text="Essentially, writing a compiler from scratch" start="00:13:53.220" video="mainVideo" id=subtitle]]
+[[!template text="for Emacs Lisp would have been a very big task." start="00:13:57.400" video="mainVideo" id=subtitle]]
+[[!template text="So I wanted to rely on, as much as I could," start="00:14:01.620" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs Lisp byte compiler," start="00:14:05.220" video="mainVideo" id=subtitle]]
+[[!template text="because I had to produce something" start="00:14:07.280" video="mainVideo" id=subtitle]]
+[[!template text="that was as compatible as possible" start="00:14:10.380" video="mainVideo" id=subtitle]]
+[[!template text="to the current implementation." start="00:14:13.020" video="mainVideo" id=subtitle]]
+[[!template text="So this was (I believe) a very good idea" start="00:14:14.340" video="mainVideo" id=subtitle]]
+[[!template text="to save an enormous quantity of work" start="00:14:18.440" video="mainVideo" id=subtitle]]
+[[!template text="and to produce something" start="00:14:20.620" video="mainVideo" id=subtitle]]
+[[!template text="that was compatible in terms of semantics" start="00:14:22.440" video="mainVideo" id=subtitle]]
+[[!template text="with the original implementation." start="00:14:25.040" video="mainVideo" id=subtitle]]
+[[!template text="Also, I didn't want to implement a code generator" start="00:14:26.920" video="mainVideo" id=subtitle]]
+[[!template text="for each architecture we were targeting," start="00:14:30.760" video="mainVideo" id=subtitle]]
+[[!template text="nor wanted to implement all these optimizations" start="00:14:32.960" video="mainVideo" id=subtitle]]
+[[!template text="that are already in GCC," start="00:14:36.000" video="mainVideo" id=subtitle]]
+[[!template text="so I thought it was a good idea" start="00:14:37.940" video="mainVideo" id=subtitle]]
+[[!template text="to rely on an existing compiler like GCC ?." start="00:14:40.220" video="mainVideo" id=subtitle]]
+[[!template text="Let's talk about libgccjit." start="00:14:44.820" video="mainVideo" id=subtitle]]
+[[!template text="It was added by David Malcolm in GCC 5" start="00:14:47.340" video="mainVideo" id=subtitle]]
+[[!template text="It allows you to describe a C-ish semantic to GCC" start="00:14:50.280" video="mainVideo" id=subtitle]]
+[[!template text="and have it compile." start="00:14:55.780" video="mainVideo" id=subtitle]]
+[[!template text="It's good for reading Jitters or AoT compilers." start="00:14:57.480" video="mainVideo" id=subtitle]]
+[[!template text="And if we talk about GCC:" start="00:15:01.500" video="mainVideo" id=subtitle]]
+[[!template text="it's a compiler, it's a very good one," start="00:15:04.500" video="mainVideo" id=subtitle]]
+[[!template text="it has support for a remarkable number" start="00:15:07.280" video="mainVideo" id=subtitle]]
+[[!template text="of target architectures." start="00:15:09.440" video="mainVideo" id=subtitle]]
+[[!template text="It's also very good at generating fast code," start="00:15:11.740" video="mainVideo" id=subtitle]]
+[[!template text="and it's been around for a long time;" start="00:15:15.180" video="mainVideo" id=subtitle]]
+[[!template text="I believe it's like 1 year younger than Emacs." start="00:15:18.080" video="mainVideo" id=subtitle]]
+[[!template text="It's still very well maintained," start="00:15:21.300" video="mainVideo" id=subtitle]]
+[[!template text="and we can assume it will be maintained" start="00:15:23.320" video="mainVideo" id=subtitle]]
+[[!template text="for quite a while. And, as I mentioned," start="00:15:25.940" video="mainVideo" id=subtitle]]
+[[!template text="this was a very important point." start="00:15:29.020" video="mainVideo" id=subtitle]]
+[[!template text="Also, it's GPL; it's Free Software," start="00:15:31.220" video="mainVideo" id=subtitle]]
+[[!template text="and it's developed under the GNU umbrella," start="00:15:33.960" video="mainVideo" id=subtitle]]
+[[!template text="so I thought it was a very good option." start="00:15:36.220" video="mainVideo" id=subtitle]]
+[[!template text="So we can imagine a simple translation" start="00:15:40.460" video="mainVideo" id=subtitle]]
+[[!template text="that goes from LAP to this subset of C" start="00:15:43.400" video="mainVideo" id=subtitle]]
+[[!template text="that we can describe to libgccjit." start="00:15:46.500" video="mainVideo" id=subtitle]]
+[[!template text="This simple translation we can see here," start="00:15:48.980" video="mainVideo" id=subtitle]]
+[[!template text="it's actually pretty trivial." start="00:15:52.980" video="mainVideo" id=subtitle]]
+[[!template text="Instead of doing operations" start="00:15:55.780" video="mainVideo" id=subtitle]]
+[[!template text="within the execution stack we have seen before," start="00:15:58.600" video="mainVideo" id=subtitle]]
+[[!template text="we have just an array that is replacing it," start="00:16:02.160" video="mainVideo" id=subtitle]]
+[[!template text="and it's called 'local' in this case," start="00:16:05.180" video="mainVideo" id=subtitle]]
+[[!template text="and we have assignments within this array," start="00:16:07.480" video="mainVideo" id=subtitle]]
+[[!template text="so that they are done in place of the original" start="00:16:12.460" video="mainVideo" id=subtitle]]
+[[!template text="push and pop activity of the stack." start="00:16:15.240" video="mainVideo" id=subtitle]]
+[[!template text="The nice thing is that," start="00:16:17.200" video="mainVideo" id=subtitle]]
+[[!template text="when you have done this translation," start="00:16:18.380" video="mainVideo" id=subtitle]]
+[[!template text="GCC will be able to optimize this," start="00:16:20.360" video="mainVideo" id=subtitle]]
+[[!template text="and remove all the unnecessary operations," start="00:16:23.260" video="mainVideo" id=subtitle]]
+[[!template text="and generate code" start="00:16:25.940" video="mainVideo" id=subtitle]]
+[[!template text="for the specific CPU you are targeting," start="00:16:27.280" video="mainVideo" id=subtitle]]
+[[!template text="which will be running your code." start="00:16:29.760" video="mainVideo" id=subtitle]]
+[[!template text="This sounds great; it sounds like" start="00:16:32.120" video="mainVideo" id=subtitle]]
+[[!template text="a very simple and effective translation," start="00:16:35.020" video="mainVideo" id=subtitle]]
+[[!template text="and in fact the first iteration of my compiler" start="00:16:37.540" video="mainVideo" id=subtitle]]
+[[!template text="was doing just this." start="00:16:40.020" video="mainVideo" id=subtitle]]
+[[!template text="It was essentially a big C function" start="00:16:41.220" video="mainVideo" id=subtitle]]
+[[!template text="that was taking LAP and doing this conversion" start="00:16:45.420" video="mainVideo" id=subtitle]]
+[[!template text="describing the output to libgccjit." start="00:16:48.340" video="mainVideo" id=subtitle]]
+[[!template text="Unfortunately, if you do this," start="00:16:50.220" video="mainVideo" id=subtitle]]
+[[!template text="you will discover that you have" start="00:16:53.820" video="mainVideo" id=subtitle]]
+[[!template text="a performance upper bound limit of about 3x." start="00:16:55.840" video="mainVideo" id=subtitle]]
+[[!template text="So it was an option," start="00:17:00.180" video="mainVideo" id=subtitle]]
+[[!template text="but I thought it was a good occasion" start="00:17:04.460" video="mainVideo" id=subtitle]]
+[[!template text="for trying to do something more." start="00:17:06.660" video="mainVideo" id=subtitle]]
+[[!template text="And doing something more means" start="00:17:09.080" video="mainVideo" id=subtitle]]
+[[!template text="implementing a smarter compiler" start="00:17:11.740" video="mainVideo" id=subtitle]]
+[[!template text="that is doing some advanced analysis on the code," start="00:17:13.780" video="mainVideo" id=subtitle]]
+[[!template text="and will be able to perform" start="00:17:17.280" video="mainVideo" id=subtitle]]
+[[!template text="Lisp-specific optimizations" start="00:17:18.740" video="mainVideo" id=subtitle]]
+[[!template text="-- optimizations that take advantage of" start="00:17:20.800" video="mainVideo" id=subtitle]]
+[[!template text="the specific Lisp semantics," start="00:17:22.580" video="mainVideo" id=subtitle]]
+[[!template text="something that GCC is not aware of." start="00:17:25.060" video="mainVideo" id=subtitle]]
+[[!template text="And while I was thinking about that," start="00:17:27.860" video="mainVideo" id=subtitle]]
+[[!template text="I thought that having a smarter compiler" start="00:17:31.340" video="mainVideo" id=subtitle]]
+[[!template text="had also other advantages, like a smarter compiler" start="00:17:34.100" video="mainVideo" id=subtitle]]
+[[!template text="that understands the semantics" start="00:17:38.220" video="mainVideo" id=subtitle]]
+[[!template text="of the programming language being compiled" start="00:17:40.220" video="mainVideo" id=subtitle]]
+[[!template text="would be also capable of" start="00:17:41.920" video="mainVideo" id=subtitle]]
+[[!template text="giving feedback to the programmers," start="00:17:43.780" video="mainVideo" id=subtitle]]
+[[!template text="like better warnings and errors." start="00:17:45.720" video="mainVideo" id=subtitle]]
+[[!template text="So I was really fascinated about this idea," start="00:17:48.020" video="mainVideo" id=subtitle]]
+[[!template text="and I wanted to change my implementation" start="00:17:51.460" video="mainVideo" id=subtitle]]
+[[!template text="because I was not really happy about it." start="00:17:53.340" video="mainVideo" id=subtitle]]
+[[!template text="I had a lot of C code in terms of" start="00:17:56.020" video="mainVideo" id=subtitle]]
+[[!template text="lines that were not doing any smart job." start="00:17:58.420" video="mainVideo" id=subtitle]]
+[[!template text="And I wanted to write all the interesting logic" start="00:18:02.200" video="mainVideo" id=subtitle]]
+[[!template text="in Lisp." start="00:18:07.480" video="mainVideo" id=subtitle]]
+[[!template text="So optimizing outside GCC" start="00:18:10.040" video="mainVideo" id=subtitle]]
+[[!template text="before jumping into GCC," start="00:18:12.660" video="mainVideo" id=subtitle]]
+[[!template text="as I mentioned, has two main targets:" start="00:18:15.940" video="mainVideo" id=subtitle]]
+[[!template text="Either optimize the code before going into GCC," start="00:18:20.600" video="mainVideo" id=subtitle]]
+[[!template text="or present to GCC some code" start="00:18:23.160" video="mainVideo" id=subtitle]]
+[[!template text="that we know GCC can optimize effectively." start="00:18:25.480" video="mainVideo" id=subtitle]]
+[[!template text="And also, this will give, as I mentioned," start="00:18:27.840" video="mainVideo" id=subtitle]]
+[[!template text="better options for the compiler" start="00:18:30.900" video="mainVideo" id=subtitle]]
+[[!template text="to provide warnings, errors" start="00:18:32.760" video="mainVideo" id=subtitle]]
+[[!template text="-- better diagnostics." start="00:18:34.520" video="mainVideo" id=subtitle]]
+[[!template text="So this is pretty much" start="00:18:36.440" video="mainVideo" id=subtitle]]
+[[!template text="what the native compiler looks like nowadays," start="00:18:38.300" video="mainVideo" id=subtitle]]
+[[!template text="in terms of passes." start="00:18:40.740" video="mainVideo" id=subtitle]]
+[[!template text="We have a list of passes," start="00:18:42.820" video="mainVideo" id=subtitle]]
+[[!template text="each of which is taking an input" start="00:18:44.660" video="mainVideo" id=subtitle]]
+[[!template text="and producing an output." start="00:18:46.720" video="mainVideo" id=subtitle]]
+[[!template text="So it's doing either analysis on the program" start="00:18:48.220" video="mainVideo" id=subtitle]]
+[[!template text="that's being passed," start="00:18:51.140" video="mainVideo" id=subtitle]]
+[[!template text="or it's performing a transformation." start="00:18:52.740" video="mainVideo" id=subtitle]]
+[[!template text="All of these passes are implemented in Lisp," start="00:18:54.860" video="mainVideo" id=subtitle]]
+[[!template text="and only the last pass is implemented in C." start="00:18:58.000" video="mainVideo" id=subtitle]]
+[[!template text="That is the one that is talking to libgccjit." start="00:19:00.540" video="mainVideo" id=subtitle]]
+[[!template text="To do that, I have introduced" start="00:19:05.160" video="mainVideo" id=subtitle]]
+[[!template text="a new intermediate representation" start="00:19:07.860" video="mainVideo" id=subtitle]]
+[[!template text="that I call LIMPLE, as a tribute to GCC GIMPLE," start="00:19:10.740" video="mainVideo" id=subtitle]]
+[[!template text="that is the main internal representation of GCC," start="00:19:14.060" video="mainVideo" id=subtitle]]
+[[!template text="at least one of the main ones." start="00:19:17.320" video="mainVideo" id=subtitle]]
+[[!template text="Introducing a new intermediate representation" start="00:19:20.700" video="mainVideo" id=subtitle]]
+[[!template text="-- a new way of representing my program --" start="00:19:25.180" video="mainVideo" id=subtitle]]
+[[!template text="solved a bunch of problems." start="00:19:27.820" video="mainVideo" id=subtitle]]
+[[!template text="First, it allowed me to implement" start="00:19:29.640" video="mainVideo" id=subtitle]]
+[[!template text="non-trivial analysis and transformations," start="00:19:33.300" video="mainVideo" id=subtitle]]
+[[!template text="the ones I needed in my compiler pipeline." start="00:19:37.380" video="mainVideo" id=subtitle]]
+[[!template text="But also, it solved the problem of" start="00:19:40.100" video="mainVideo" id=subtitle]]
+[[!template text="what was the boundary between" start="00:19:42.260" video="mainVideo" id=subtitle]]
+[[!template text="what I had to implement in Lisp," start="00:19:43.940" video="mainVideo" id=subtitle]]
+[[!template text="and what in C." start="00:19:46.220" video="mainVideo" id=subtitle]]
+[[!template text="Because once I had" start="00:19:48.140" video="mainVideo" id=subtitle]]
+[[!template text="my intermediate representation defined," start="00:19:49.140" video="mainVideo" id=subtitle]]
+[[!template text="essentially the boundary between Lisp and C" start="00:19:51.960" video="mainVideo" id=subtitle]]
+[[!template text="is just a function, that is," start="00:19:53.880" video="mainVideo" id=subtitle]]
+[[!template text="the one that is implementing the final pass." start="00:19:55.740" video="mainVideo" id=subtitle]]
+[[!template text="That is taking, as an input," start="00:19:57.880" video="mainVideo" id=subtitle]]
+[[!template text="all of my programs in LIMPLE representation" start="00:19:59.320" video="mainVideo" id=subtitle]]
+[[!template text="and it's doing his bit." start="00:20:01.720" video="mainVideo" id=subtitle]]
+[[!template text="So I was convinced this design at least had sense." start="00:20:03.980" video="mainVideo" id=subtitle]]
+[[!template text="When we go through some of these passes," start="00:20:08.080" video="mainVideo" id=subtitle]]
+[[!template text="just to give you an idea of what these are doing:" start="00:20:10.220" video="mainVideo" id=subtitle]]
+[[!template text="the first pass is just responsible for" start="00:20:12.700" video="mainVideo" id=subtitle]]
+[[!template text="spilling the LAP from the byte compiler" start="00:20:14.660" video="mainVideo" id=subtitle]]
+[[!template text="that effectively here we are using as a front end" start="00:20:18.200" video="mainVideo" id=subtitle]]
+[[!template text="for our compiler pipeline." start="00:20:20.260" video="mainVideo" id=subtitle]]
+[[!template text="The second pass, called 'limplify'," start="00:20:21.880" video="mainVideo" id=subtitle]]
+[[!template text="will be in charge of converting LAP into LIMPLE." start="00:20:24.140" video="mainVideo" id=subtitle]]
+[[!template text="LIMPLE is an intermediate representation" start="00:20:28.020" video="mainVideo" id=subtitle]]
+[[!template text="that is Control Flow Graph based," start="00:20:31.360" video="mainVideo" id=subtitle]]
+[[!template text="and it's capable of SSA." start="00:20:32.960" video="mainVideo" id=subtitle]]
+[[!template text="So we can have a look to what this means." start="00:20:34.800" video="mainVideo" id=subtitle]]
+[[!template text="Let's assume we have our LAP program," start="00:20:38.740" video="mainVideo" id=subtitle]]
+[[!template text="as any program," start="00:20:41.400" video="mainVideo" id=subtitle]]
+[[!template text="that's a simple list of instructions" start="00:20:42.620" video="mainVideo" id=subtitle]]
+[[!template text="that we will execute one after the other." start="00:20:44.060" video="mainVideo" id=subtitle]]
+[[!template text="Some of these instructions" start="00:20:45.740" video="mainVideo" id=subtitle]]
+[[!template text="are special instructions" start="00:20:47.460" video="mainVideo" id=subtitle]]
+[[!template text="that we call conditional branches," start="00:20:49.300" video="mainVideo" id=subtitle]]
+[[!template text="where we check for a condition," start="00:20:51.340" video="mainVideo" id=subtitle]]
+[[!template text="and if this is verified," start="00:20:52.900" video="mainVideo" id=subtitle]]
+[[!template text="we jump to a different address within the program." start="00:20:54.420" video="mainVideo" id=subtitle]]
+[[!template text="(Addresses that here we are calling 'labels'.)" start="00:20:57.040" video="mainVideo" id=subtitle]]
+[[!template text="So we can split our program in chunks," start="00:20:59.680" video="mainVideo" id=subtitle]]
+[[!template text="and those chunks we execute without interruption," start="00:21:03.540" video="mainVideo" id=subtitle]]
+[[!template text="so we always enter from the top of those," start="00:21:08.300" video="mainVideo" id=subtitle]]
+[[!template text="and we exit from the bottom." start="00:21:10.560" video="mainVideo" id=subtitle]]
+[[!template text="We can name those, and split them apart," start="00:21:12.700" video="mainVideo" id=subtitle]]
+[[!template text="and these are what we call basic blocks." start="00:21:16.080" video="mainVideo" id=subtitle]]
+[[!template text="And now we have a bunch of these basic blocks" start="00:21:19.080" video="mainVideo" id=subtitle]]
+[[!template text="that are floating," start="00:21:22.460" video="mainVideo" id=subtitle]]
+[[!template text="and they are not any more sorted." start="00:21:23.480" video="mainVideo" id=subtitle]]
+[[!template text="This is what is called" start="00:21:25.120" video="mainVideo" id=subtitle]]
+[[!template text="a Control Flow Graph based representation." start="00:21:26.020" video="mainVideo" id=subtitle]]
+[[!template text="Now we can get into the SSA topic." start="00:21:28.780" video="mainVideo" id=subtitle]]
+[[!template text="That stands for Static Single Assignment." start="00:21:31.500" video="mainVideo" id=subtitle]]
+[[!template text="I don't want to get into the details," start="00:21:34.000" video="mainVideo" id=subtitle]]
+[[!template text="but just give you a feeling." start="00:21:35.960" video="mainVideo" id=subtitle]]
+[[!template text="I added into our basic blocks" start="00:21:36.820" video="mainVideo" id=subtitle]]
+[[!template text="in our Control Flow Graph a few assignments." start="00:21:38.580" video="mainVideo" id=subtitle]]
+[[!template text="We will transform this into SSA" start="00:21:41.500" video="mainVideo" id=subtitle]]
+[[!template text="just for the variable 'x'," start="00:21:43.940" video="mainVideo" id=subtitle]]
+[[!template text="just for the sake of demonstrating it." start="00:21:45.140" video="mainVideo" id=subtitle]]
+[[!template text="This is done through a number of phases" start="00:21:47.460" video="mainVideo" id=subtitle]]
+[[!template text="that are essentially some analysis," start="00:21:49.860" video="mainVideo" id=subtitle]]
+[[!template text="mainly renaming." start="00:21:51.860" video="mainVideo" id=subtitle]]
+[[!template text="But the outcome, the one we see here," start="00:21:52.700" video="mainVideo" id=subtitle]]
+[[!template text="looks quite similar to the original one," start="00:21:55.660" video="mainVideo" id=subtitle]]
+[[!template text="but we can see that the variable 'x'" start="00:21:59.220" video="mainVideo" id=subtitle]]
+[[!template text="has been renamed." start="00:22:01.220" video="mainVideo" id=subtitle]]
+[[!template text="And now we don't have anymore just one," start="00:22:02.060" video="mainVideo" id=subtitle]]
+[[!template text="but a number of these variables." start="00:22:03.500" video="mainVideo" id=subtitle]]
+[[!template text="The interesting property is that" start="00:22:06.240" video="mainVideo" id=subtitle]]
+[[!template text="each of these variables is assigned just once." start="00:22:08.100" video="mainVideo" id=subtitle]]
+[[!template text="And this allows for the compiler" start="00:22:10.980" video="mainVideo" id=subtitle]]
+[[!template text="to do prediction of the value of that variable," start="00:22:13.340" video="mainVideo" id=subtitle]]
+[[!template text="depending on the position" start="00:22:16.860" video="mainVideo" id=subtitle]]
+[[!template text="within the Control Flow Graph." start="00:22:19.140" video="mainVideo" id=subtitle]]
+[[!template text="This is very important. For instance," start="00:22:19.940" video="mainVideo" id=subtitle]]
+[[!template text="a very simple case is 'x1'" start="00:22:22.080" video="mainVideo" id=subtitle]]
+[[!template text="that we see is assigned once by definition," start="00:22:23.540" video="mainVideo" id=subtitle]]
+[[!template text="in particular here at the beginning." start="00:22:27.540" video="mainVideo" id=subtitle]]
+[[!template text="Here it's very simple to understand" start="00:22:29.400" video="mainVideo" id=subtitle]]
+[[!template text="that x1 will have the value 3." start="00:22:31.140" video="mainVideo" id=subtitle]]
+[[!template text="While, for instance, it's more difficult to prove" start="00:22:33.180" video="mainVideo" id=subtitle]]
+[[!template text="what is going to be the value of x5," start="00:22:35.480" video="mainVideo" id=subtitle]]
+[[!template text="because it's calling a function," start="00:22:37.160" video="mainVideo" id=subtitle]]
+[[!template text="or we don't know at the moment what x4 is." start="00:22:38.720" video="mainVideo" id=subtitle]]
+[[!template text="So the compiler will gain the capability" start="00:22:42.040" video="mainVideo" id=subtitle]]
+[[!template text="to do prediction on all the variables," start="00:22:46.340" video="mainVideo" id=subtitle]]
+[[!template text="and the more we get information on one variable," start="00:22:48.560" video="mainVideo" id=subtitle]]
+[[!template text="the more we can prove about the others." start="00:22:50.720" video="mainVideo" id=subtitle]]
+[[!template text="Coming back to our passes, the next one" start="00:22:55.460" video="mainVideo" id=subtitle]]
+[[!template text="is forward propagation." start="00:22:57.380" video="mainVideo" id=subtitle]]
+[[!template text="This pass is responsible for" start="00:22:59.420" video="mainVideo" id=subtitle]]
+[[!template text="doing what I briefly mentioned just before:" start="00:23:00.700" video="mainVideo" id=subtitle]]
+[[!template text="doing proof over all the different variables" start="00:23:03.340" video="mainVideo" id=subtitle]]
+[[!template text="in different positions of the Control Flow Graph," start="00:23:07.260" video="mainVideo" id=subtitle]]
+[[!template text="about the values, types, or ranges." start="00:23:09.720" video="mainVideo" id=subtitle]]
+[[!template text="This pass is also responsible for" start="00:23:12.800" video="mainVideo" id=subtitle]]
+[[!template text="executing functions" start="00:23:15.180" video="mainVideo" id=subtitle]]
+[[!template text="when we know that the function has no side effect" start="00:23:17.020" video="mainVideo" id=subtitle]]
+[[!template text="and the pass managed to" start="00:23:18.740" video="mainVideo" id=subtitle]]
+[[!template text="prove all the values of its argument." start="00:23:20.620" video="mainVideo" id=subtitle]]
+[[!template text="So the function is then executed at compile time" start="00:23:22.540" video="mainVideo" id=subtitle]]
+[[!template text="and it doesn't even exist anymore" start="00:23:24.900" video="mainVideo" id=subtitle]]
+[[!template text="in the produced code." start="00:23:26.800" video="mainVideo" id=subtitle]]
+[[!template text="Then we have another pass, this is" start="00:23:27.980" video="mainVideo" id=subtitle]]
+[[!template text="an example of a pass that is very specific:" start="00:23:30.400" video="mainVideo" id=subtitle]]
+[[!template text="it's trying to remove the call to funcall" start="00:23:33.520" video="mainVideo" id=subtitle]]
+[[!template text="when those are not necessary." start="00:23:36.220" video="mainVideo" id=subtitle]]
+[[!template text="There are a couple situations" start="00:23:38.140" video="mainVideo" id=subtitle]]
+[[!template text="where this is very useful." start="00:23:39.860" video="mainVideo" id=subtitle]]
+[[!template text="And not only is this beneficial" start="00:23:42.300" video="mainVideo" id=subtitle]]
+[[!template text="because we are generating better code," start="00:23:45.340" video="mainVideo" id=subtitle]]
+[[!template text="but when we manage to do that," start="00:23:47.660" video="mainVideo" id=subtitle]]
+[[!template text="we allow GCC better analysis over the code," start="00:23:49.345" video="mainVideo" id=subtitle]]
+[[!template text="because GCC knows nothing about funcall." start="00:23:52.100" video="mainVideo" id=subtitle]]
+[[!template text="So if we are calling, from 'foo', directly, 'bar'," start="00:23:54.540" video="mainVideo" id=subtitle]]
+[[!template text="for GCC it's way easier to do its analysis" start="00:23:57.500" video="mainVideo" id=subtitle]]
+[[!template text="on top of this code." start="00:24:01.380" video="mainVideo" id=subtitle]]
+[[!template text="Another interesting pass we can mention is 'tco'." start="00:24:03.460" video="mainVideo" id=subtitle]]
+[[!template text="This is performing Tail Recursion Elimination." start="00:24:06.340" video="mainVideo" id=subtitle]]
+[[!template text="It allows a more functional programming style," start="00:24:08.900" video="mainVideo" id=subtitle]]
+[[!template text="if you want." start="00:24:11.980" video="mainVideo" id=subtitle]]
+[[!template text="We can jump to the last pass" start="00:24:13.320" video="mainVideo" id=subtitle]]
+[[!template text="that is called 'final', and as I mentioned," start="00:24:14.380" video="mainVideo" id=subtitle]]
+[[!template text="this one is responsible for" start="00:24:16.300" video="mainVideo" id=subtitle]]
+[[!template text="taking our program in LIMPLE representation" start="00:24:17.620" video="mainVideo" id=subtitle]]
+[[!template text="and describing it to libgccjit in the gccjit IR." start="00:24:19.980" video="mainVideo" id=subtitle]]
+[[!template text="That's the main task. It's also" start="00:24:25.000" video="mainVideo" id=subtitle]]
+[[!template text="defining inline functions" start="00:24:27.580" video="mainVideo" id=subtitle]]
+[[!template text="for accessing fundamental data types, and so on." start="00:24:29.620" video="mainVideo" id=subtitle]]
+[[!template text="This pass is also responsible for" start="00:24:32.500" video="mainVideo" id=subtitle]]
+[[!template text="using some of the predictions" start="00:24:34.560" video="mainVideo" id=subtitle]]
+[[!template text="done by previous passes to generate better code." start="00:24:36.380" video="mainVideo" id=subtitle]]
+[[!template text="Things we had to add" start="00:24:39.660" video="mainVideo" id=subtitle]]
+[[!template text="to have all of this machinery work" start="00:24:41.420" video="mainVideo" id=subtitle]]
+[[!template text="and to be controllable:" start="00:24:43.980" video="mainVideo" id=subtitle]]
+[[!template text="The first one is an opt called 'native-comp-speed'" start="00:24:45.340" video="mainVideo" id=subtitle]]
+[[!template text="and it's equivalent to Common Lisp's 'speed'." start="00:24:47.580" video="mainVideo" id=subtitle]]
+[[!template text="It represents the optimization level." start="00:24:50.020" video="mainVideo" id=subtitle]]
+[[!template text="The default is 2 and is" start="00:24:52.020" video="mainVideo" id=subtitle]]
+[[!template text="the maximum optimization level" start="00:24:53.500" video="mainVideo" id=subtitle]]
+[[!template text="that is meant to reflect" start="00:24:55.500" video="mainVideo" id=subtitle]]
+[[!template text="all the original semantics of Emacs Lisp." start="00:24:58.700" video="mainVideo" id=subtitle]]
+[[!template text="So it's the one that should be used by default." start="00:25:00.960" video="mainVideo" id=subtitle]]
+[[!template text="The second one is 'compilation unit'" start="00:25:02.580" video="mainVideo" id=subtitle]]
+[[!template text="and it's a kind of new object" start="00:25:04.740" video="mainVideo" id=subtitle]]
+[[!template text="that has been added to Emacs." start="00:25:06.060" video="mainVideo" id=subtitle]]
+[[!template text="Let's have a look to" start="00:25:11.180" video="mainVideo" id=subtitle]]
+[[!template text="how the Garbage Collector works in this case." start="00:25:13.060" video="mainVideo" id=subtitle]]
+[[!template text="The GNU Emacs Garbage Collector" start="00:25:14.460" video="mainVideo" id=subtitle]]
+[[!template text="is a simple mark-and-sweep garbage collector." start="00:25:15.940" video="mainVideo" id=subtitle]]
+[[!template text="It does a tree walk through all the objects" start="00:25:18.760" video="mainVideo" id=subtitle]]
+[[!template text="and follows references from one object to another." start="00:25:21.520" video="mainVideo" id=subtitle]]
+[[!template text="All the objects reachable during the mark phase" start="00:25:25.200" video="mainVideo" id=subtitle]]
+[[!template text="will be kept in our Lisp universe." start="00:25:28.060" video="mainVideo" id=subtitle]]
+[[!template text="All the other ones will be freed." start="00:25:31.340" video="mainVideo" id=subtitle]]
+[[!template text="In this case we have a bunch of functions," start="00:25:33.780" video="mainVideo" id=subtitle]]
+[[!template text="'foo1', 'foo2', 'bar1', etc., that are defined." start="00:25:35.180" video="mainVideo" id=subtitle]]
+[[!template text="When a function is defined," start="00:25:38.860" video="mainVideo" id=subtitle]]
+[[!template text="it's accessible through its symbol," start="00:25:40.420" video="mainVideo" id=subtitle]]
+[[!template text="so we have the symbol referring to the function." start="00:25:42.500" video="mainVideo" id=subtitle]]
+[[!template text="The function, in this case a native-compiled one," start="00:25:44.460" video="mainVideo" id=subtitle]]
+[[!template text="is referring to the compilation unit." start="00:25:47.820" video="mainVideo" id=subtitle]]
+[[!template text="The compilation unit is essentially" start="00:25:50.140" video="mainVideo" id=subtitle]]
+[[!template text="the ELF file that has been compiled," start="00:25:53.120" video="mainVideo" id=subtitle]]
+[[!template text="and contains all those functions" start="00:25:58.700" video="mainVideo" id=subtitle]]
+[[!template text="that came from the original .el file," start="00:26:01.260" video="mainVideo" id=subtitle]]
+[[!template text="and that we have loaded into memory." start="00:26:03.340" video="mainVideo" id=subtitle]]
+[[!template text="If, for instance, 'bar1 and 'bar2 are undefined," start="00:26:05.200" video="mainVideo" id=subtitle]]
+[[!template text="functions 3 and 4 will be no longer reachable," start="00:26:10.100" video="mainVideo" id=subtitle]]
+[[!template text="and we will be able to free them" start="00:26:14.300" video="mainVideo" id=subtitle]]
+[[!template text="and unload the compilation unit." start="00:26:16.140" video="mainVideo" id=subtitle]]
+[[!template text="We discussed quite a lot about Control Flow Graph," start="00:26:18.260" video="mainVideo" id=subtitle]]
+[[!template text="SSA, and a lot of boring stuff," start="00:26:21.300" video="mainVideo" id=subtitle]]
+[[!template text="and I promised you that we are doing" start="00:26:23.660" video="mainVideo" id=subtitle]]
+[[!template text="a lot of interesting proofs over variables," start="00:26:25.500" video="mainVideo" id=subtitle]]
+[[!template text="So let's have some examples of them." start="00:26:27.420" video="mainVideo" id=subtitle]]
+[[!template text="Let's jump into a quick demo" start="00:26:30.320" video="mainVideo" id=subtitle]]
+[[!template text="to see what all of this abstract theory" start="00:26:31.940" video="mainVideo" id=subtitle]]
+[[!template text="and this esoteric propagation engine can do for us" start="00:26:34.580" video="mainVideo" id=subtitle]]
+[[!template text="and how the user can interact with it." start="00:26:37.780" video="mainVideo" id=subtitle]]
+[[!template text="I've defined a bunch of functions," start="00:26:39.340" video="mainVideo" id=subtitle]]
+[[!template text="and I will native-compile and load it." start="00:26:42.200" video="mainVideo" id=subtitle]]
+[[!template text="Alright, Emacs Lisp native compiled and loaded." start="00:26:47.500" video="mainVideo" id=subtitle]]
+[[!template text="At this point, I can disassemble 'foo1'" start="00:26:48.940" video="mainVideo" id=subtitle]]
+[[!template text="to make sure it's native code and I'm not lying." start="00:26:52.420" video="mainVideo" id=subtitle]]
+[[!template text="These are the instructions" start="00:26:56.420" video="mainVideo" id=subtitle]]
+[[!template text="that will be executed directly by my CPU" start="00:26:58.600" video="mainVideo" id=subtitle]]
+[[!template text="when I call this function." start="00:27:01.420" video="mainVideo" id=subtitle]]
+[[!template text="Alright, very cool." start="00:27:03.720" video="mainVideo" id=subtitle]]
+[[!template text="Now, Lisp: (symbol-function #'foo1)" start="00:27:07.620" video="mainVideo" id=subtitle]]
+[[!template text="Interestingly, this is returning a subroutine," start="00:27:16.180" video="mainVideo" id=subtitle]]
+[[!template text="as it would be a primitive function." start="00:27:19.820" video="mainVideo" id=subtitle]]
+[[!template text="Because this is native code," start="00:27:21.920" video="mainVideo" id=subtitle]]
+[[!template text="even if it's written in Lisp," start="00:27:23.800" video="mainVideo" id=subtitle]]
+[[!template text="has been converted to native code" start="00:27:24.940" video="mainVideo" id=subtitle]]
+[[!template text="as if it's a primitive function." start="00:27:26.440" video="mainVideo" id=subtitle]]
+[[!template text="But we can do also a new thing:" start="00:27:29.300" video="mainVideo" id=subtitle]]
+[[!template text="asking for the type of the subroutine." start="00:27:31.660" video="mainVideo" id=subtitle]]
+[[!template text="Alright, very cool. It says this is a function," start="00:27:34.540" video="mainVideo" id=subtitle]]
+[[!template text="it's taking one argument of type 't'" start="00:27:38.460" video="mainVideo" id=subtitle]]
+[[!template text="(that means anything" start="00:27:40.380" video="mainVideo" id=subtitle]]
+[[!template text="because we don't have any information)," start="00:27:41.660" video="mainVideo" id=subtitle]]
+[[!template text="and is returning a type 't'," start="00:27:43.060" video="mainVideo" id=subtitle]]
+[[!template text="so also there we don't have much information." start="00:27:45.300" video="mainVideo" id=subtitle]]
+[[!template text="OK, very cool, but not very useful." start="00:27:47.480" video="mainVideo" id=subtitle]]
+[[!template text="Let's see #'foo2. #'foo2 is slightly different," start="00:27:49.800" video="mainVideo" id=subtitle]]
+[[!template text="it doesn't take any argument, but it's returning" start="00:27:53.780" video="mainVideo" id=subtitle]]
+[[!template text="an integer included between 3 and 3." start="00:27:55.940" video="mainVideo" id=subtitle]]
+[[!template text="Wow, amazing!" start="00:27:58.140" video="mainVideo" id=subtitle]]
+[[!template text="Let's get into something a little more complex:" start="00:28:01.460" video="mainVideo" id=subtitle]]
+[[!template text="#'foo3 takes one argument we know nothing about," start="00:28:04.140" video="mainVideo" id=subtitle]]
+[[!template text="but it's returning a number." start="00:28:09.540" video="mainVideo" id=subtitle]]
+[[!template text="And why it's returning a number?" start="00:28:11.840" video="mainVideo" id=subtitle]]
+[[!template text="Essentially because 1+ is returning a number," start="00:28:13.380" video="mainVideo" id=subtitle]]
+[[!template text="and in all the other cases," start="00:28:16.420" video="mainVideo" id=subtitle]]
+[[!template text="it would signal an error" start="00:28:18.980" video="mainVideo" id=subtitle]]
+[[!template text="if it's not happy about its input argument." start="00:28:20.740" video="mainVideo" id=subtitle]]
+[[!template text="Let's have a look to #'foo4." start="00:28:23.480" video="mainVideo" id=subtitle]]
+[[!template text="#'foo4 is a little bit more complex." start="00:28:27.860" video="mainVideo" id=subtitle]]
+[[!template text="It will return nil" start="00:28:33.020" video="mainVideo" id=subtitle]]
+[[!template text="if the 'when' condition is not satisfied," start="00:28:34.780" video="mainVideo" id=subtitle]]
+[[!template text="so it's type 'null' here." start="00:28:37.500" video="mainVideo" id=subtitle]]
+[[!template text="It can return a floating point;" start="00:28:39.820" video="mainVideo" id=subtitle]]
+[[!template text="we don't do propagation of floating point so far," start="00:28:41.300" video="mainVideo" id=subtitle]]
+[[!template text="or it can return any integer between 4 and 9." start="00:28:43.700" video="mainVideo" id=subtitle]]
+[[!template text="Wow. Let's go on with #'foo5." start="00:28:47.180" video="mainVideo" id=subtitle]]
+[[!template text="#'foo5 is even more complex" start="00:28:52.940" video="mainVideo" id=subtitle]]
+[[!template text="because other than" start="00:28:55.860" video="mainVideo" id=subtitle]]
+[[!template text="having to satisfy this condition," start="00:28:57.300" video="mainVideo" id=subtitle]]
+[[!template text="we can see that the result of the propagation" start="00:28:59.280" video="mainVideo" id=subtitle]]
+[[!template text="of this complex condition" start="00:29:02.380" video="mainVideo" id=subtitle]]
+[[!template text="is propagated also across the 'plus'." start="00:29:03.900" video="mainVideo" id=subtitle]]
+[[!template text="So this foo5 can return nil," start="00:29:05.560" video="mainVideo" id=subtitle]]
+[[!template text="a floating point we know nothing about," start="00:29:08.340" video="mainVideo" id=subtitle]]
+[[!template text="or an integer included between 12 and 24." start="00:29:09.820" video="mainVideo" id=subtitle]]
+[[!template text="Let's go on with #'foo6." start="00:29:13.660" video="mainVideo" id=subtitle]]
+[[!template text="#'foo6 is returning anything but an integer." start="00:29:18.180" video="mainVideo" id=subtitle]]
+[[!template text="I think it should be pretty obvious why," start="00:29:23.420" video="mainVideo" id=subtitle]]
+[[!template text="because if it's not an integer we return it," start="00:29:26.620" video="mainVideo" id=subtitle]]
+[[!template text="otherwise we signal an error." start="00:29:28.220" video="mainVideo" id=subtitle]]
+[[!template text="Let's finish with #'foo7 very quickly." start="00:29:30.100" video="mainVideo" id=subtitle]]
+[[!template text="#'foo7 has another very complex condition," start="00:29:32.980" video="mainVideo" id=subtitle]]
+[[!template text="at least for me, but it's also interesting to see" start="00:29:38.020" video="mainVideo" id=subtitle]]
+[[!template text="that we are also propagating values for symbols." start="00:29:40.420" video="mainVideo" id=subtitle]]
+[[!template text="So we can return the symbol 'big," start="00:29:42.300" video="mainVideo" id=subtitle]]
+[[!template text="the symbol 'small," start="00:29:45.260" video="mainVideo" id=subtitle]]
+[[!template text="or an integer included between -100 and 100." start="00:29:47.080" video="mainVideo" id=subtitle]]
+[[!template text="Now, the question is: why all of this is useful" start="00:29:51.300" video="mainVideo" id=subtitle]]
+[[!template text="other than having Andrea very happy" start="00:29:54.540" video="mainVideo" id=subtitle]]
+[[!template text="when he's playing with this all day?" start="00:29:56.900" video="mainVideo" id=subtitle]]
+[[!template text="Well, we have to come back one second" start="00:29:59.660" video="mainVideo" id=subtitle]]
+[[!template text="to how Lisp_Objects are represented within Emacs." start="00:30:01.540" video="mainVideo" id=subtitle]]
+[[!template text="Lisp_Objects are represented as machine words," start="00:30:05.020" video="mainVideo" id=subtitle]]
+[[!template text="where we reserve a few bits to indicate the type." start="00:30:09.580" video="mainVideo" id=subtitle]]
+[[!template text="And every time we access the object," start="00:30:12.680" video="mainVideo" id=subtitle]]
+[[!template text="when this is a Fixnum," start="00:30:15.660" video="mainVideo" id=subtitle]]
+[[!template text="or a regular object where this is a pointer," start="00:30:17.220" video="mainVideo" id=subtitle]]
+[[!template text="we always have to extract these bits," start="00:30:20.020" video="mainVideo" id=subtitle]]
+[[!template text="make sure that they satisfy a condition," start="00:30:21.700" video="mainVideo" id=subtitle]]
+[[!template text="so make sure that we are going to manipulate" start="00:30:24.620" video="mainVideo" id=subtitle]]
+[[!template text="the object of the type we expect," start="00:30:27.220" video="mainVideo" id=subtitle]]
+[[!template text="and then we can extract the object" start="00:30:28.680" video="mainVideo" id=subtitle]]
+[[!template text="and do the manipulation." start="00:30:31.140" video="mainVideo" id=subtitle]]
+[[!template text="If the compiler managed to prove" start="00:30:32.640" video="mainVideo" id=subtitle]]
+[[!template text="that the contained object is of the right type," start="00:30:34.620" video="mainVideo" id=subtitle]]
+[[!template text="it will be able to not emit the type check," start="00:30:37.500" video="mainVideo" id=subtitle]]
+[[!template text="and save a lot of instructions." start="00:30:42.540" video="mainVideo" id=subtitle]]
+[[!template text="This is a very powerful optimization." start="00:30:44.600" video="mainVideo" id=subtitle]]
+[[!template text="Let's discuss some potential future development" start="00:30:48.660" video="mainVideo" id=subtitle]]
+[[!template text="in this area." start="00:30:50.860" video="mainVideo" id=subtitle]]
+[[!template text="First I think it would be extremely nice" start="00:30:52.100" video="mainVideo" id=subtitle]]
+[[!template text="to extend the propagation" start="00:30:53.460" video="mainVideo" id=subtitle]]
+[[!template text="to types that are not built in." start="00:30:55.020" video="mainVideo" id=subtitle]]
+[[!template text="There are a lot of cases" start="00:30:57.020" video="mainVideo" id=subtitle]]
+[[!template text="where we could optimize effectively." start="00:30:58.260" video="mainVideo" id=subtitle]]
+[[!template text="For instance when we do" start="00:31:00.700" video="mainVideo" id=subtitle]]
+[[!template text="a lot of accesses to structures" start="00:31:02.620" video="mainVideo" id=subtitle]]
+[[!template text="-- lots of stuff like that --" start="00:31:05.820" video="mainVideo" id=subtitle]]
+[[!template text="where we keep on checking and checking" start="00:31:07.020" video="mainVideo" id=subtitle]]
+[[!template text="the same object for the type" start="00:31:08.980" video="mainVideo" id=subtitle]]
+[[!template text="where it's obvious, where it should be trivial" start="00:31:10.740" video="mainVideo" id=subtitle]]
+[[!template text="to prove that it's the right type" start="00:31:13.180" video="mainVideo" id=subtitle]]
+[[!template text="after the first access or things like that." start="00:31:14.820" video="mainVideo" id=subtitle]]
+[[!template text="So I believe this is a low-hanging fruit" start="00:31:16.460" video="mainVideo" id=subtitle]]
+[[!template text="in terms of performance." start="00:31:19.020" video="mainVideo" id=subtitle]]
+[[!template text="Also I think it would be really nice" start="00:31:21.280" video="mainVideo" id=subtitle]]
+[[!template text="to extend the declare mechanism" start="00:31:23.180" video="mainVideo" id=subtitle]]
+[[!template text="to allow the user to declare argument types." start="00:31:24.820" video="mainVideo" id=subtitle]]
+[[!template text="(Optionally. Indeed, optionally.)" start="00:31:27.700" video="mainVideo" id=subtitle]]
+[[!template text="Doing that would give the compiler" start="00:31:30.580" video="mainVideo" id=subtitle]]
+[[!template text="a lot of information to propagate value types" start="00:31:32.980" video="mainVideo" id=subtitle]]
+[[!template text="within the function." start="00:31:35.220" video="mainVideo" id=subtitle]]
+[[!template text="But those will allow the compiler" start="00:31:36.460" video="mainVideo" id=subtitle]]
+[[!template text="to give the user really good diagnostics" start="00:31:38.940" video="mainVideo" id=subtitle]]
+[[!template text="during compile time. Like the compiler could say:" start="00:31:43.140" video="mainVideo" id=subtitle]]
+[[!template text="Hey, here you are calling a function" start="00:31:45.500" video="mainVideo" id=subtitle]]
+[[!template text="that is expecting this argument of this type," start="00:31:47.100" video="mainVideo" id=subtitle]]
+[[!template text="but I'm proving that you are calling it" start="00:31:49.300" video="mainVideo" id=subtitle]]
+[[!template text="with an argument that is of THIS type," start="00:31:52.100" video="mainVideo" id=subtitle]]
+[[!template text="and is not a subtype of the expected one." start="00:31:55.300" video="mainVideo" id=subtitle]]
+[[!template text="So you are doing something not coherent." start="00:31:57.940" video="mainVideo" id=subtitle]]
+[[!template text="This kind of interprocedural logic." start="00:32:00.340" video="mainVideo" id=subtitle]]
+[[!template text="And I think the compiler should also take advantage" start="00:32:02.900" video="mainVideo" id=subtitle]]
+[[!template text="(under certain circumstances)" start="00:32:05.100" video="mainVideo" id=subtitle]]
+[[!template text="of this interprocedural analysis" start="00:32:06.740" video="mainVideo" id=subtitle]]
+[[!template text="in order to optimize even more, when possible." start="00:32:08.860" video="mainVideo" id=subtitle]]
+[[!template text="Also I think we should" start="00:32:12.620" video="mainVideo" id=subtitle]]
+[[!template text="work on our ? to improve the code generation" start="00:32:13.820" video="mainVideo" id=subtitle]]
+[[!template text="depending on the prediction" start="00:32:15.580" video="mainVideo" id=subtitle]]
+[[!template text="that the compiler is doing." start="00:32:17.200" video="mainVideo" id=subtitle]]
+[[!template text="We already take advantage of those predictions," start="00:32:18.260" video="mainVideo" id=subtitle]]
+[[!template text="but I think we could do better." start="00:32:20.220" video="mainVideo" id=subtitle]]
+[[!template text="A quick look at some performance results." start="00:32:22.400" video="mainVideo" id=subtitle]]
+[[!template text="These are from the elisp-benchmarks package" start="00:32:25.220" video="mainVideo" id=subtitle]]
+[[!template text="within GNU ELPA." start="00:32:28.820" video="mainVideo" id=subtitle]]
+[[!template text="This is the performance uplift," start="00:32:30.860" video="mainVideo" id=subtitle]]
+[[!template text="and we can identify about 4 &quot ;classes&quot ; of results." start="00:32:32.620" video="mainVideo" id=subtitle]]
+[[!template text="The first one there is no performance uplift," start="00:32:38.580" video="mainVideo" id=subtitle]]
+[[!template text="because there is not much we can do," start="00:32:41.540" video="mainVideo" id=subtitle]]
+[[!template text="and the time is probably not spent" start="00:32:42.980" video="mainVideo" id=subtitle]]
+[[!template text="within the execution engine." start="00:32:44.820" video="mainVideo" id=subtitle]]
+[[!template text="And the ones around 3x are the ones" start="00:32:46.380" video="mainVideo" id=subtitle]]
+[[!template text="Where probably we are not triggering" start="00:32:49.100" video="mainVideo" id=subtitle]]
+[[!template text="manually specific optimizations," start="00:32:50.780" video="mainVideo" id=subtitle]]
+[[!template text="but just the fact" start="00:32:52.740" video="mainVideo" id=subtitle]]
+[[!template text="that we are converting into native code" start="00:32:53.700" video="mainVideo" id=subtitle]]
+[[!template text="is giving us this performance uplift." start="00:32:57.200" video="mainVideo" id=subtitle]]
+[[!template text="Then there is a bunch of other benchmarks" start="00:33:00.600" video="mainVideo" id=subtitle]]
+[[!template text="where the Lisp optimizations are triggering," start="00:33:03.380" video="mainVideo" id=subtitle]]
+[[!template text="and the uplift is way bigger," start="00:33:05.780" video="mainVideo" id=subtitle]]
+[[!template text="and then we have 3 benchmarks that at the time" start="00:33:09.720" video="mainVideo" id=subtitle]]
+[[!template text="are completely optimized out." start="00:33:12.000" video="mainVideo" id=subtitle]]
+[[!template text="That means the compiler became &quot ;so smart&quot ;" start="00:33:13.520" video="mainVideo" id=subtitle]]
+[[!template text="that it was able to compute the result" start="00:33:15.680" video="mainVideo" id=subtitle]]
+[[!template text="in the compile time and just put the result" start="00:33:18.260" video="mainVideo" id=subtitle]]
+[[!template text="in the generated binary." start="00:33:20.260" video="mainVideo" id=subtitle]]
+[[!template text="Let's discuss a little bit the compilation model." start="00:33:21.500" video="mainVideo" id=subtitle]]
+[[!template text="This is an Hybrid one;" start="00:33:23.980" video="mainVideo" id=subtitle]]
+[[!template text="it's both JIT-like and Ahead-of-Time-like." start="00:33:26.180" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is composed of what we call an Emacs image," start="00:33:29.520" video="mainVideo" id=subtitle]]
+[[!template text="essentially the Emacs binary that we start." start="00:33:33.500" video="mainVideo" id=subtitle]]
+[[!template text="It's including all the C code," start="00:33:36.280" video="mainVideo" id=subtitle]]
+[[!template text="plus all the Lisp code that we preload." start="00:33:37.820" video="mainVideo" id=subtitle]]
+[[!template text="Then we have the rest of the Emacs Lisp codebase" start="00:33:41.860" video="mainVideo" id=subtitle]]
+[[!template text="that can be loaded just if it's required." start="00:33:46.580" video="mainVideo" id=subtitle]]
+[[!template text="Same for the external packages, if we have any." start="00:33:49.540" video="mainVideo" id=subtitle]]
+[[!template text="If we build an Emacs Lisp" start="00:33:52.860" video="mainVideo" id=subtitle]]
+[[!template text="with native compilation enabled, by default," start="00:33:55.220" video="mainVideo" id=subtitle]]
+[[!template text="only the Emacs image will be native compiled." start="00:33:58.040" video="mainVideo" id=subtitle]]
+[[!template text="All the other code will be compiled" start="00:34:01.300" video="mainVideo" id=subtitle]]
+[[!template text="on the fly when it's loaded and executed" start="00:34:04.020" video="mainVideo" id=subtitle]]
+[[!template text="the first time, if it's necessary." start="00:34:06.820" video="mainVideo" id=subtitle]]
+[[!template text="Same for the packages, in a transparent way" start="00:34:08.900" video="mainVideo" id=subtitle]]
+[[!template text="and asynchronous way." start="00:34:10.980" video="mainVideo" id=subtitle]]
+[[!template text="Also worth noting" start="00:34:12.740" video="mainVideo" id=subtitle]]
+[[!template text="that the result of this compilation" start="00:34:13.580" video="mainVideo" id=subtitle]]
+[[!template text="will be stored into a cache directory" start="00:34:15.500" video="mainVideo" id=subtitle]]
+[[!template text="within the home directory of the user." start="00:34:17.340" video="mainVideo" id=subtitle]]
+[[!template text="So it will be reused in the following sessions" start="00:34:20.000" video="mainVideo" id=subtitle]]
+[[!template text="if the same file is loaded," start="00:34:23.700" video="mainVideo" id=subtitle]]
+[[!template text="without having to recompile multiple times" start="00:34:25.540" video="mainVideo" id=subtitle]]
+[[!template text="the same file in different sessions." start="00:34:27.620" video="mainVideo" id=subtitle]]
+[[!template text="It works a little bit like this:" start="00:34:29.420" video="mainVideo" id=subtitle]]
+[[!template text="When we load the byte-code for the first time," start="00:34:31.620" video="mainVideo" id=subtitle]]
+[[!template text="we spawn a native compilation process." start="00:34:33.900" video="mainVideo" id=subtitle]]
+[[!template text="Meanwhile we keep using the byte-code available." start="00:34:36.000" video="mainVideo" id=subtitle]]
+[[!template text="When the native compilation is finished," start="00:34:39.420" video="mainVideo" id=subtitle]]
+[[!template text="we hot-swap the definition of the functions" start="00:34:41.280" video="mainVideo" id=subtitle]]
+[[!template text="that are contained in the file" start="00:34:44.060" video="mainVideo" id=subtitle]]
+[[!template text="and start using the native code transparently." start="00:34:46.140" video="mainVideo" id=subtitle]]
+[[!template text="We do this asynchronously," start="00:34:48.060" video="mainVideo" id=subtitle]]
+[[!template text="and for more compilation units at the same time," start="00:34:49.980" video="mainVideo" id=subtitle]]
+[[!template text="so it looks a little bit like this." start="00:34:53.240" video="mainVideo" id=subtitle]]
+[[!template text="Let's try a quick demo of all of this machinery." start="00:34:56.380" video="mainVideo" id=subtitle]]
+[[!template text="I've started a fresh Emacs" start="00:34:58.660" video="mainVideo" id=subtitle]]
+[[!template text="with native compilation support," start="00:35:00.980" video="mainVideo" id=subtitle]]
+[[!template text="and at this moment nothing is going on." start="00:35:03.380" video="mainVideo" id=subtitle]]
+[[!template text="We will test the machinery with Tetris," start="00:35:05.160" video="mainVideo" id=subtitle]]
+[[!template text="because I can't imagine anything better" start="00:35:07.540" video="mainVideo" id=subtitle]]
+[[!template text="to test this." start="00:35:10.560" video="mainVideo" id=subtitle]]
+[[!template text="What I do expect is that when I launch Tetris" start="00:35:12.940" video="mainVideo" id=subtitle]]
+[[!template text="it will be loaded, it will immediately" start="00:35:15.180" video="mainVideo" id=subtitle]]
+[[!template text="start execution of the byte-compiled version," start="00:35:18.020" video="mainVideo" id=subtitle]]
+[[!template text="so we won't see any delay in the user experience," start="00:35:20.560" video="mainVideo" id=subtitle]]
+[[!template text="and in the meanwhile, a parallel process" start="00:35:23.100" video="mainVideo" id=subtitle]]
+[[!template text="will start to native-compile Tetris itself." start="00:35:25.260" video="mainVideo" id=subtitle]]
+[[!template text="When the native compilation will be finished," start="00:35:28.260" video="mainVideo" id=subtitle]]
+[[!template text="the functions of all Tetris will be hot-swapped." start="00:35:30.300" video="mainVideo" id=subtitle]]
+[[!template text="So we will not see any interruption." start="00:35:33.340" video="mainVideo" id=subtitle]]
+[[!template text="So Tetris started, and it's running," start="00:35:36.380" video="mainVideo" id=subtitle]]
+[[!template text="we have seen no delay, and in the meanwhile," start="00:35:39.780" video="mainVideo" id=subtitle]]
+[[!template text="the native compilation probably already finished," start="00:35:41.700" video="mainVideo" id=subtitle]]
+[[!template text="we can have a look." start="00:35:43.620" video="mainVideo" id=subtitle]]
+[[!template text="In this I see the native compilation log buffer." start="00:35:45.060" video="mainVideo" id=subtitle]]
+[[!template text="So we see that Tetris has been native compiled," start="00:35:47.260" video="mainVideo" id=subtitle]]
+[[!template text="and all of its dependencies." start="00:35:49.820" video="mainVideo" id=subtitle]]
+[[!template text="Now Tetris is still running," start="00:35:51.860" video="mainVideo" id=subtitle]]
+[[!template text="but I can do &quot ;C-h f tetris&quot ;" start="00:35:53.940" video="mainVideo" id=subtitle]]
+[[!template text="and we can see that 'tetris'" start="00:36:00.580" video="mainVideo" id=subtitle]]
+[[!template text="is an interactive native compiled" start="00:36:02.640" video="mainVideo" id=subtitle]]
+[[!template text="Lisp function, so it has been native-compiled." start="00:36:04.980" video="mainVideo" id=subtitle]]
+[[!template text="I can even disassemble if I want." start="00:36:08.040" video="mainVideo" id=subtitle]]
+[[!template text="OK, so very cool." start="00:36:13.600" video="mainVideo" id=subtitle]]
+[[!template text="I guess we can say this mechanism is working." start="00:36:14.980" video="mainVideo" id=subtitle]]
+[[!template text="Also worth noting that if I go back" start="00:36:18.120" video="mainVideo" id=subtitle]]
+[[!template text="to the *Async-native-compile-log* buffer," start="00:36:20.760" video="mainVideo" id=subtitle]]
+[[!template text="we see we have compiled another bunch of files." start="00:36:24.220" video="mainVideo" id=subtitle]]
+[[!template text="I think these are because of my 'C-h f'," start="00:36:28.060" video="mainVideo" id=subtitle]]
+[[!template text="this help function command and disassemble," start="00:36:31.700" video="mainVideo" id=subtitle]]
+[[!template text="and so on." start="00:36:33.900" video="mainVideo" id=subtitle]]
+[[!template text="The first time you run Emacs, you will have," start="00:36:35.020" video="mainVideo" id=subtitle]]
+[[!template text="from time to time, these processes spawned." start="00:36:37.820" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is &quot ;compiling itself&quot ;," start="00:36:41.380" video="mainVideo" id=subtitle]]
+[[!template text="and it's replacing the byte-code definition" start="00:36:43.200" video="mainVideo" id=subtitle]]
+[[!template text="with the native one. But after a few sessions," start="00:36:45.620" video="mainVideo" id=subtitle]]
+[[!template text="you will not see this anymore," start="00:36:47.740" video="mainVideo" id=subtitle]]
+[[!template text="because the output of this compilation," start="00:36:49.860" video="mainVideo" id=subtitle]]
+[[!template text="as I mentioned, are stored in the user directory." start="00:36:51.460" video="mainVideo" id=subtitle]]
+[[!template text="To conclude: Emacs with native compilation support" start="00:36:55.000" video="mainVideo" id=subtitle]]
+[[!template text="is coming up in Emacs 28," start="00:36:57.660" video="mainVideo" id=subtitle]]
+[[!template text="that is gonna be the next major stable release" start="00:36:59.180" video="mainVideo" id=subtitle]]
+[[!template text="that will be released." start="00:37:01.140" video="mainVideo" id=subtitle]]
+[[!template text="So we ought to celebrate with a big party," start="00:37:02.180" video="mainVideo" id=subtitle]]
+[[!template text="I believe. But before going to the party," start="00:37:04.940" video="mainVideo" id=subtitle]]
+[[!template text="I'd like to list a few points" start="00:37:07.420" video="mainVideo" id=subtitle]]
+[[!template text="that I think have been success factors" start="00:37:09.180" video="mainVideo" id=subtitle]]
+[[!template text="in upstreaming this work." start="00:37:11.440" video="mainVideo" id=subtitle]]
+[[!template text="It has been extremely important" start="00:37:13.520" video="mainVideo" id=subtitle]]
+[[!template text="to get in touch with upstream as soon as possible," start="00:37:15.520" video="mainVideo" id=subtitle]]
+[[!template text="as soon as I had a proof of concept." start="00:37:18.240" video="mainVideo" id=subtitle]]
+[[!template text="It's been extremely important" start="00:37:20.780" video="mainVideo" id=subtitle]]
+[[!template text="to involve the community as much as possible," start="00:37:22.700" video="mainVideo" id=subtitle]]
+[[!template text="and this included keeping a development blog," start="00:37:24.760" video="mainVideo" id=subtitle]]
+[[!template text="and posts about that on emacs-devel," start="00:37:28.580" video="mainVideo" id=subtitle]]
+[[!template text="and also producing material," start="00:37:31.700" video="mainVideo" id=subtitle]]
+[[!template text="participating in conferences," start="00:37:33.820" video="mainVideo" id=subtitle]]
+[[!template text="and giving presentations like the one I'm doing," start="00:37:36.120" video="mainVideo" id=subtitle]]
+[[!template text="to explain what I was doing and how it works." start="00:37:38.420" video="mainVideo" id=subtitle]]
+[[!template text="It has been extremely important, also," start="00:37:40.780" video="mainVideo" id=subtitle]]
+[[!template text="to be able to rely on the upstream infrastructure." start="00:37:43.140" video="mainVideo" id=subtitle]]
+[[!template text="So, to develop the software" start="00:37:45.960" video="mainVideo" id=subtitle]]
+[[!template text="as a feature branch in the official git," start="00:37:47.640" video="mainVideo" id=subtitle]]
+[[!template text="but even more, I would say," start="00:37:49.180" video="mainVideo" id=subtitle]]
+[[!template text="to use the official bug tracker" start="00:37:50.060" video="mainVideo" id=subtitle]]
+[[!template text="for solving bugs of this branch." start="00:37:51.760" video="mainVideo" id=subtitle]]
+[[!template text="This gave the opportunity" start="00:37:52.980" video="mainVideo" id=subtitle]]
+[[!template text="to stay really in close touch with maintainers," start="00:37:54.780" video="mainVideo" id=subtitle]]
+[[!template text="and senior developers of Emacs." start="00:37:58.260" video="mainVideo" id=subtitle]]
+[[!template text="That helped me a lot. And at the same time" start="00:38:00.020" video="mainVideo" id=subtitle]]
+[[!template text="they were informed about what I was doing" start="00:38:03.080" video="mainVideo" id=subtitle]]
+[[!template text="and what was the status of this feature branch." start="00:38:04.920" video="mainVideo" id=subtitle]]
+[[!template text="Extremely important." start="00:38:07.460" video="mainVideo" id=subtitle]]
+[[!template text="And also I think it played a major role" start="00:38:08.900" video="mainVideo" id=subtitle]]
+[[!template text="to try to design this enormous patch" start="00:38:11.260" video="mainVideo" id=subtitle]]
+[[!template text="in a way that the impact on the current codebase" start="00:38:14.220" video="mainVideo" id=subtitle]]
+[[!template text="was minimized (at least as much as possible)." start="00:38:18.220" video="mainVideo" id=subtitle]]
+[[!template text="And also minimizing" start="00:38:21.220" video="mainVideo" id=subtitle]]
+[[!template text="the impact on the user operation of the software," start="00:38:23.760" video="mainVideo" id=subtitle]]
+[[!template text="in this case Emacs." start="00:38:26.340" video="mainVideo" id=subtitle]]
+[[!template text="So yes, mandatory Special Thanks:" start="00:38:28.140" video="mainVideo" id=subtitle]]
+[[!template text="Emacs developers, and especially maintainers" start="00:38:29.740" video="mainVideo" id=subtitle]]
+[[!template text="and senior developers like Stefan Monnier," start="00:38:33.460" video="mainVideo" id=subtitle]]
+[[!template text="that helped me a lot across this long journey." start="00:38:36.780" video="mainVideo" id=subtitle]]
+[[!template text="And, well, all the community" start="00:38:40.540" video="mainVideo" id=subtitle]]
+[[!template text="that really got so excited about this project" start="00:38:42.900" video="mainVideo" id=subtitle]]
+[[!template text="and gave me the energy" start="00:38:45.260" video="mainVideo" id=subtitle]]
+[[!template text="to go through all of this time and development" start="00:38:46.340" video="mainVideo" id=subtitle]]
+[[!template text="and bugs and solving, etc. etc." start="00:38:49.220" video="mainVideo" id=subtitle]]
+[[!template text="So yes, it was a really exciting time," start="00:38:52.080" video="mainVideo" id=subtitle]]
+[[!template text="and I think we have to look forward" start="00:38:55.020" video="mainVideo" id=subtitle]]
+[[!template text="and start thinking about how to improve all this" start="00:38:58.100" video="mainVideo" id=subtitle]]
+[[!template text="for the following years." start="00:39:01.500" video="mainVideo" id=subtitle]]
+[[!template text="And that's it." start="00:39:03.020" video="mainVideo" id=subtitle]]
+[[!template text="I think I should be online for questions." start="00:39:04.400" video="mainVideo" id=subtitle]]
+[[!template text="Thank you very much." start="00:39:06.140" video="mainVideo" id=subtitle]]
+[[!template text="captions by John Cummings" start="00:39:07.580" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/news.md b/2021/captions/news.md
new file mode 100644
index 00000000..1a301142
--- /dev/null
+++ b/2021/captions/news.md
@@ -0,0 +1,159 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="I'm Sacha Chua, and here are" start="00:00:00.003" video="mainVideo" id=subtitle]]
+[[!template text="ten Emacs News highlights for 2021." start="00:00:01.519" video="mainVideo" id=subtitle]]
+[[!template text="If you want to follow the links," start="00:00:03.754" video="mainVideo" id=subtitle]]
+[[!template text="check out the wiki page at" start="00:00:05.305" video="mainVideo" id=subtitle]]
+[[!template text="https://emacsconf.org/2021/talks/news/ ." start="00:00:06.846" video="mainVideo" id=subtitle]]
+[[!template new="1" text="1\. The Emacs developers are currently" start="00:00:11.024" video="mainVideo" id=subtitle]]
+[[!template text="working on Emacs 28.1," start="00:00:13.442" video="mainVideo" id=subtitle]]
+[[!template text="which will be the next major release." start="00:00:15.346" video="mainVideo" id=subtitle]]
+[[!template text="John Wiegley will share more Emacs 28 details" start="00:00:17.119" video="mainVideo" id=subtitle]]
+[[!template text="in his update, so check out his talk." start="00:00:19.703" video="mainVideo" id=subtitle]]
+[[!template text="Andrea Corallo's giving a talk" start="00:00:21.483" video="mainVideo" id=subtitle]]
+[[!template text="on native compilation too." start="00:00:23.353" video="mainVideo" id=subtitle]]
+[[!template new="1" text="2\." start="00:00:24.988" video="mainVideo" id=subtitle]]
+[[!template text="Org Mode is now at version 9.5." start="00:00:25.776" video="mainVideo" id=subtitle]]
+[[!template text="New features include" start="00:00:28.302" video="mainVideo" id=subtitle]]
+[[!template text="a library for managing citations," start="00:00:29.656" video="mainVideo" id=subtitle]]
+[[!template text="asynchronous session support" start="00:00:31.505" video="mainVideo" id=subtitle]]
+[[!template text="for code blocks," start="00:00:32.984" video="mainVideo" id=subtitle]]
+[[!template text="and better control" start="00:00:33.945" video="mainVideo" id=subtitle]]
+[[!template text="of your agenda's appearance." start="00:00:34.912" video="mainVideo" id=subtitle]]
+[[!template text="If you've been getting your Org packages" start="00:00:36.165" video="mainVideo" id=subtitle]]
+[[!template text="from Org ELPA," start="00:00:37.942" video="mainVideo" id=subtitle]]
+[[!template text="you can update your configuration" start="00:00:39.076" video="mainVideo" id=subtitle]]
+[[!template text="to get Org from GNU ELPA" start="00:00:40.698" video="mainVideo" id=subtitle]]
+[[!template text="and org-contrib from NonGNU ELPA." start="00:00:42.466" video="mainVideo" id=subtitle]]
+[[!template text="The new release of the Org Roam package" start="00:00:44.725" video="mainVideo" id=subtitle]]
+[[!template text="should be a faster and more consistent way" start="00:00:46.848" video="mainVideo" id=subtitle]]
+[[!template text="to use Org to manage a knowledgebase," start="00:00:48.755" video="mainVideo" id=subtitle]]
+[[!template text="and org-roam-ui looks pretty snazzy." start="00:00:50.630" video="mainVideo" id=subtitle]]
+[[!template text="The best way to keep up with Org changes" start="00:00:52.993" video="mainVideo" id=subtitle]]
+[[!template text="is to check out the blog This Month in Org." start="00:00:55.101" video="mainVideo" id=subtitle]]
+[[!template new="1" text="3\." start="00:00:57.126" video="mainVideo" id=subtitle]]
+[[!template text="New Magit major release!" start="00:00:58.009" video="mainVideo" id=subtitle]]
+[[!template text="Jonas Bernoulli has split some functionality" start="00:01:00.039" video="mainVideo" id=subtitle]]
+[[!template text="into other packages so that" start="00:01:02.351" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Lisp developers can use them, such as" start="00:01:04.127" video="mainVideo" id=subtitle]]
+[[!template text="magit-section, transient, and forge." start="00:01:06.289" video="mainVideo" id=subtitle]]
+[[!template text="Here's an example of using magit-section" start="00:01:08.619" video="mainVideo" id=subtitle]]
+[[!template text="to manage groups of buffers." start="00:01:11.072" video="mainVideo" id=subtitle]]
+[[!template text="You can learn more about Transient" start="00:01:12.343" video="mainVideo" id=subtitle]]
+[[!template text="in the talk on self-describing" start="00:01:13.903" video="mainVideo" id=subtitle]]
+[[!template text="smart domain-specific languages or DSLs." start="00:01:15.412" video="mainVideo" id=subtitle]]
+[[!template new="1" text="4\." start="00:01:18.108" video="mainVideo" id=subtitle]]
+[[!template text="In terms of smaller packages, there's been" start="00:01:18.890" video="mainVideo" id=subtitle]]
+[[!template text="a lot of activity around completion." start="00:01:21.115" video="mainVideo" id=subtitle]]
+[[!template text="Karthik has a great diagram," start="00:01:23.195" video="mainVideo" id=subtitle]]
+[[!template text="and Prot explains how things work together." start="00:01:24.862" video="mainVideo" id=subtitle]]
+[[!template text="I think the idea is that instead of having" start="00:01:27.029" video="mainVideo" id=subtitle]]
+[[!template text="one large completion system" start="00:01:28.984" video="mainVideo" id=subtitle]]
+[[!template text="like Helm or Icicles, you can choose" start="00:01:30.636" video="mainVideo" id=subtitle]]
+[[!template text="a few different, smaller packages" start="00:01:32.914" video="mainVideo" id=subtitle]]
+[[!template text="and configure them to work together." start="00:01:34.680" video="mainVideo" id=subtitle]]
+[[!template text="If you're curious about this," start="00:01:36.439" video="mainVideo" id=subtitle]]
+[[!template text="you might start with either selectrum" start="00:01:37.699" video="mainVideo" id=subtitle]]
+[[!template text="or vertico, which are both completion interfaces," start="00:01:39.729" video="mainVideo" id=subtitle]]
+[[!template text="add marginalia for more information," start="00:01:42.441" video="mainVideo" id=subtitle]]
+[[!template text="and try consult for many useful" start="00:01:45.013" video="mainVideo" id=subtitle]]
+[[!template text="completing commands." start="00:01:46.792" video="mainVideo" id=subtitle]]
+[[!template text="There are so many options," start="00:01:47.803" video="mainVideo" id=subtitle]]
+[[!template text="so it might be useful to check out" start="00:01:48.849" video="mainVideo" id=subtitle]]
+[[!template text="some discussions." start="00:01:50.437" video="mainVideo" id=subtitle]]
+[[!template new="1" text="5\." start="00:01:51.284" video="mainVideo" id=subtitle]]
+[[!template text="Embark is usually mentioned as part of" start="00:01:52.047" video="mainVideo" id=subtitle]]
+[[!template text="that group of packages," start="00:01:54.101" video="mainVideo" id=subtitle]]
+[[!template text="but it's well worth looking into" start="00:01:55.177" video="mainVideo" id=subtitle]]
+[[!template text="even if you use a different system." start="00:01:56.766" video="mainVideo" id=subtitle]]
+[[!template text="Embark lets you have context-sensitive shortcuts" start="00:01:58.465" video="mainVideo" id=subtitle]]
+[[!template text="that work on things in buffers, minibuffers," start="00:02:00.987" video="mainVideo" id=subtitle]]
+[[!template text="and even collections of things." start="00:02:03.366" video="mainVideo" id=subtitle]]
+[[!template text="You can also use it" start="00:02:05.338" video="mainVideo" id=subtitle]]
+[[!template text="when you start doing one command" start="00:02:06.307" video="mainVideo" id=subtitle]]
+[[!template text="and then decide to do a different one instead." start="00:02:07.482" video="mainVideo" id=subtitle]]
+[[!template text="For more ideas, check out" start="00:02:09.582" video="mainVideo" id=subtitle]]
+[[!template text="Fifteen Ways to Use Embark." start="00:02:10.841" video="mainVideo" id=subtitle]]
+[[!template new="1" text="6\." start="00:02:12.065" video="mainVideo" id=subtitle]]
+[[!template text="Now that there are Emacs Lisp bindings" start="00:02:12.855" video="mainVideo" id=subtitle]]
+[[!template text="for tree-sitter, we can work more easily" start="00:02:14.733" video="mainVideo" id=subtitle]]
+[[!template text="with the structure of code instead of" start="00:02:16.709" video="mainVideo" id=subtitle]]
+[[!template text="just using regular expressions." start="00:02:18.369" video="mainVideo" id=subtitle]]
+[[!template text="Check out the talk" start="00:02:20.031" video="mainVideo" id=subtitle]]
+[[!template text="on Tree-edit and structural editing" start="00:02:20.779" video="mainVideo" id=subtitle]]
+[[!template text="to learn more." start="00:02:22.374" video="mainVideo" id=subtitle]]
+[[!template text="You can use tree-sitter for" start="00:02:23.163" video="mainVideo" id=subtitle]]
+[[!template text="intelligent snippets that get information" start="00:02:24.626" video="mainVideo" id=subtitle]]
+[[!template text="from the code around them," start="00:02:26.521" video="mainVideo" id=subtitle]]
+[[!template text="editing Lisp expressions," start="00:02:27.739" video="mainVideo" id=subtitle]]
+[[!template text="and navigating text objects in Evil mode." start="00:02:29.634" video="mainVideo" id=subtitle]]
+[[!template text="(That's when Emacs is pretending to be Vi.)" start="00:02:31.971" video="mainVideo" id=subtitle]]
+[[!template text="Dynamic modules help us add more to Emacs" start="00:02:34.240" video="mainVideo" id=subtitle]]
+[[!template text="than Emacs Lisp easily offers," start="00:02:37.133" video="mainVideo" id=subtitle]]
+[[!template text="such as structural editing in OCaml" start="00:02:38.958" video="mainVideo" id=subtitle]]
+[[!template text="and using Rust to figure out parentheses" start="00:02:41.374" video="mainVideo" id=subtitle]]
+[[!template text="and indentation for Lisp." start="00:02:43.299" video="mainVideo" id=subtitle]]
+[[!template new="1" text="7\." start="00:02:44.656" video="mainVideo" id=subtitle]]
+[[!template text="Collaborative editing is now much easier" start="00:02:45.559" video="mainVideo" id=subtitle]]
+[[!template text="since the CRDT package is in GNU ELPA." start="00:02:47.614" video="mainVideo" id=subtitle]]
+[[!template text="It allows multiple people to edit" start="00:02:50.210" video="mainVideo" id=subtitle]]
+[[!template text="the same file over the network," start="00:02:51.952" video="mainVideo" id=subtitle]]
+[[!template text="using their own Emacs." start="00:02:53.605" video="mainVideo" id=subtitle]]
+[[!template text="This means you can keep your own config" start="00:02:55.345" video="mainVideo" id=subtitle]]
+[[!template text="and keybindings, yay!" start="00:02:57.170" video="mainVideo" id=subtitle]]
+[[!template text="Watch the Emacs Research Group talk" start="00:02:58.994" video="mainVideo" id=subtitle]]
+[[!template text="for an example of how several people" start="00:03:00.720" video="mainVideo" id=subtitle]]
+[[!template text="used it to work together." start="00:03:02.505" video="mainVideo" id=subtitle]]
+[[!template new="1" text="8\." start="00:03:03.657" video="mainVideo" id=subtitle]]
+[[!template text="In case you're still under the impression" start="00:03:04.158" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs is just a text editor," start="00:03:05.721" video="mainVideo" id=subtitle]]
+[[!template text="some folks have been working on" start="00:03:07.369" video="mainVideo" id=subtitle]]
+[[!template text="pretty neat graphical experiments." start="00:03:08.880" video="mainVideo" id=subtitle]]
+[[!template text="These OpenGL bindings for Emacs Lisp" start="00:03:10.574" video="mainVideo" id=subtitle]]
+[[!template text="use an embedded xwidget," start="00:03:12.752" video="mainVideo" id=subtitle]]
+[[!template text="while other prototypes use the SVG support" start="00:03:14.515" video="mainVideo" id=subtitle]]
+[[!template text="that's built into Emacs" start="00:03:16.927" video="mainVideo" id=subtitle]]
+[[!template text="for Gantt charts," start="00:03:18.020" video="mainVideo" id=subtitle]]
+[[!template text="scribbles," start="00:03:19.367" video="mainVideo" id=subtitle]]
+[[!template text="and even diagrams." start="00:03:20.139" video="mainVideo" id=subtitle]]
+[[!template text="The color-picker from that one" start="00:03:21.640" video="mainVideo" id=subtitle]]
+[[!template text="looks particularly useful for CSS." start="00:03:23.110" video="mainVideo" id=subtitle]]
+[[!template text="If you want to play around with adding SVGs" start="00:03:25.161" video="mainVideo" id=subtitle]]
+[[!template text="to your files and interfaces," start="00:03:27.363" video="mainVideo" id=subtitle]]
+[[!template text="svg-icon" start="00:03:29.042" video="mainVideo" id=subtitle]]
+[[!template text="and svg-lib" start="00:03:30.082" video="mainVideo" id=subtitle]]
+[[!template text="might be good places to start. (Reddit)" start="00:03:30.999" video="mainVideo" id=subtitle]]
+[[!template text="Of course, there's always a place" start="00:03:33.053" video="mainVideo" id=subtitle]]
+[[!template text="for ASCII art," start="00:03:34.527" video="mainVideo" id=subtitle]]
+[[!template text="especially with the new boxy package" start="00:03:35.529" video="mainVideo" id=subtitle]]
+[[!template text="that you can use for org files," start="00:03:37.253" video="mainVideo" id=subtitle]]
+[[!template text="imenu navigation," start="00:03:38.753" video="mainVideo" id=subtitle]]
+[[!template text="and even things in real life." start="00:03:40.073" video="mainVideo" id=subtitle]]
+[[!template new="1" text="9\." start="00:03:41.738" video="mainVideo" id=subtitle]]
+[[!template text="There have been a lot of great posts, videos," start="00:03:42.528" video="mainVideo" id=subtitle]]
+[[!template text="and livestreams about Emacs this year." start="00:03:44.731" video="mainVideo" id=subtitle]]
+[[!template text="In addition to the ones" start="00:03:46.632" video="mainVideo" id=subtitle]]
+[[!template text="from System Crafters," start="00:03:47.894" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Elements," start="00:03:49.293" video="mainVideo" id=subtitle]]
+[[!template text="and Protesilaos," start="00:03:50.473" video="mainVideo" id=subtitle]]
+[[!template text="John Kitchin" start="00:03:51.984" video="mainVideo" id=subtitle]]
+[[!template text="and Mike Zamansky" start="00:03:52.794" video="mainVideo" id=subtitle]]
+[[!template text="are back, hooray!" start="00:03:53.540" video="mainVideo" id=subtitle]]
+[[!template text="And Marcin Borkowski has just finished" start="00:03:54.575" video="mainVideo" id=subtitle]]
+[[!template text="writing an intermediate textbook" start="00:03:56.946" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Lisp, too!" start="00:03:58.836" video="mainVideo" id=subtitle]]
+[[!template new="1" text="10\." start="00:04:00.071" video="mainVideo" id=subtitle]]
+[[!template text="Lastly, if you want to chat" start="00:04:00.742" video="mainVideo" id=subtitle]]
+[[!template text="with other Emacs folks" start="00:04:02.249" video="mainVideo" id=subtitle]]
+[[!template text="and get help on Emacs, Org Mode," start="00:04:03.403" video="mainVideo" id=subtitle]]
+[[!template text="or other topics," start="00:04:05.604" video="mainVideo" id=subtitle]]
+[[!template text="the #emacs and #org-mode" start="00:04:06.531" video="mainVideo" id=subtitle]]
+[[!template text="Internet Relay Chat or IRC channels" start="00:04:07.756" video="mainVideo" id=subtitle]]
+[[!template text="are now on the libera.chat network" start="00:04:10.181" video="mainVideo" id=subtitle]]
+[[!template text="instead of Freenode." start="00:04:12.067" video="mainVideo" id=subtitle]]
+[[!template text="If you'd like to add something I've missed," start="00:04:13.333" video="mainVideo" id=subtitle]]
+[[!template text="please add them to the wiki page," start="00:04:15.208" video="mainVideo" id=subtitle]]
+[[!template text="or e-mail me at sacha@sachachua.com ." start="00:04:16.903" video="mainVideo" id=subtitle]]
+[[!template text="That's all for this quick review." start="00:04:19.354" video="mainVideo" id=subtitle]]
+[[!template text="Enjoy the rest of EmacsConf 2021!" start="00:04:20.874" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/nongnu.md b/2021/captions/nongnu.md
new file mode 100644
index 00000000..001c039a
--- /dev/null
+++ b/2021/captions/nongnu.md
@@ -0,0 +1,181 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello! My name is Philip," start="00:00:00.000" video="mainVideo" id=subtitle]]
+[[!template text="and I'll be giving a brief update on" start="00:00:02.283" video="mainVideo" id=subtitle]]
+[[!template text="NonGNU ELPA." start="00:00:04.363" video="mainVideo" id=subtitle]]
+[[!template text="Before we begin," start="00:00:05.963" video="mainVideo" id=subtitle]]
+[[!template text="let's first make sure" start="00:00:07.403" video="mainVideo" id=subtitle]]
+[[!template text="everyone's on the same page." start="00:00:08.283" video="mainVideo" id=subtitle]]
+[[!template text="What is NonGNU ELPA?" start="00:00:09.563" video="mainVideo" id=subtitle]]
+[[!template text="Put simply, NonGNU ELPA" start="00:00:11.203" video="mainVideo" id=subtitle]]
+[[!template text="is a new Emacs Lisp package archive." start="00:00:14.323" video="mainVideo" id=subtitle]]
+[[!template text="similar to its sister archive, GNU ELPA." start="00:00:16.723" video="mainVideo" id=subtitle]]
+[[!template text="The main difference is that" start="00:00:19.323" video="mainVideo" id=subtitle]]
+[[!template text="GNU ELPA regards each package in the archive" start="00:00:21.883" video="mainVideo" id=subtitle]]
+[[!template text="to be part of Emacs itself." start="00:00:24.723" video="mainVideo" id=subtitle]]
+[[!template text="This means each significant contributor" start="00:00:26.643" video="mainVideo" id=subtitle]]
+[[!template text="has to have signed their copyrights" start="00:00:30.083" video="mainVideo" id=subtitle]]
+[[!template text="to the Free Software Foundation." start="00:00:32.483" video="mainVideo" id=subtitle]]
+[[!template text="NonGNU ELPA is made for packages" start="00:00:34.803" video="mainVideo" id=subtitle]]
+[[!template text="that cannot ensure this condition." start="00:00:37.203" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The immediate consequence of all of this" start="00:00:39.363" video="mainVideo" id=subtitle]]
+[[!template text="is that more packages can be installed" start="00:00:42.483" video="mainVideo" id=subtitle]]
+[[!template text="out of the box." start="00:00:44.243" video="mainVideo" id=subtitle]]
+[[!template text="All you need to install," start="00:00:44.723" video="mainVideo" id=subtitle]]
+[[!template text="for example, magit, evil-mode, slime," start="00:00:46.803" video="mainVideo" id=subtitle]]
+[[!template text="is a simple M-x package-install." start="00:00:49.443" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The more subtle consequence" start="00:00:52.723" video="mainVideo" id=subtitle]]
+[[!template text="is that ELPA distributes" start="00:00:56.083" video="mainVideo" id=subtitle]]
+[[!template text="stable packages by default." start="00:00:58.083" video="mainVideo" id=subtitle]]
+[[!template text="This differs from, for example," start="00:00:59.763" video="mainVideo" id=subtitle]]
+[[!template text="the community-maintained package archive MELPA," start="00:01:01.563" video="mainVideo" id=subtitle]]
+[[!template text="where each change in the respective package repository" start="00:01:04.163" video="mainVideo" id=subtitle]]
+[[!template text="triggers a new package to be rebuilt." start="00:01:08.483" video="mainVideo" id=subtitle]]
+[[!template text="Of course, &quot;stable&quot; here has to be taken" start="00:01:12.803" video="mainVideo" id=subtitle]]
+[[!template text="with a grain of salt because," start="00:01:15.123" video="mainVideo" id=subtitle]]
+[[!template text="on the one hand," start="00:01:16.843" video="mainVideo" id=subtitle]]
+[[!template text="a package maintainer can be very careful" start="00:01:17.963" video="mainVideo" id=subtitle]]
+[[!template text="to avoid buggy code in their default branch," start="00:01:19.923" video="mainVideo" id=subtitle]]
+[[!template text="and on the other hand," start="00:01:22.403" video="mainVideo" id=subtitle]]
+[[!template text="a package maintainer can be too eager" start="00:01:23.923" video="mainVideo" id=subtitle]]
+[[!template text="to tag a new release" start="00:01:26.523" video="mainVideo" id=subtitle]]
+[[!template text="without properly checking" start="00:01:28.083" video="mainVideo" id=subtitle]]
+[[!template text="that the code works as intended." start="00:01:29.483" video="mainVideo" id=subtitle]]
+[[!template text="My personal hope is that" start="00:01:31.403" video="mainVideo" id=subtitle]]
+[[!template text="more people using NonGNU ELPA" start="00:01:33.483" video="mainVideo" id=subtitle]]
+[[!template text="be incentive for increase" start="00:01:35.603" video="mainVideo" id=subtitle]]
+[[!template text="for package development to shift away" start="00:01:37.683" video="mainVideo" id=subtitle]]
+[[!template text="from the currently predominant" start="00:01:39.603" video="mainVideo" id=subtitle]]
+[[!template text="rolling release model," start="00:01:41.083" video="mainVideo" id=subtitle]]
+[[!template text="improving the overall stability" start="00:01:42.323" video="mainVideo" id=subtitle]]
+[[!template text="of Emacs configurations." start="00:01:44.243" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Another side effect of the initiative" start="00:01:45.523" video="mainVideo" id=subtitle]]
+[[!template text="is a chance to clean up" start="00:01:48.843" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs package space." start="00:01:51.003" video="mainVideo" id=subtitle]]
+[[!template text="Over the last few years," start="00:01:52.803" video="mainVideo" id=subtitle]]
+[[!template text="a lot of packages have been abandoned," start="00:01:54.723" video="mainVideo" id=subtitle]]
+[[!template text="have been broken, duplicated," start="00:01:56.363" video="mainVideo" id=subtitle]]
+[[!template text="or even in some cases," start="00:01:59.043" video="mainVideo" id=subtitle]]
+[[!template text="replaced by functionality in Emacs itself." start="00:02:00.443" video="mainVideo" id=subtitle]]
+[[!template text="When reviewing packages for NonGNU ELPA," start="00:02:03.483" video="mainVideo" id=subtitle]]
+[[!template text="the opportunity to avoid these problems" start="00:02:07.403" video="mainVideo" id=subtitle]]
+[[!template text="will hopefully also improve the general quality" start="00:02:10.043" video="mainVideo" id=subtitle]]
+[[!template text="of Emacs packages." start="00:02:12.523" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, what is this update about?" start="00:02:13.923" video="mainVideo" id=subtitle]]
+[[!template text="I'm taking Richard Stallman's announcement" start="00:02:16.883" video="mainVideo" id=subtitle]]
+[[!template text="at EmacsConf 2020" start="00:02:20.443" video="mainVideo" id=subtitle]]
+[[!template text="as my reference point." start="00:02:22.363" video="mainVideo" id=subtitle]]
+[[!template text="There, the idea, the history," start="00:02:23.563" video="mainVideo" id=subtitle]]
+[[!template text="and the motivation was explained," start="00:02:26.283" video="mainVideo" id=subtitle]]
+[[!template text="and the call for contributions was made." start="00:02:28.283" video="mainVideo" id=subtitle]]
+[[!template text="I won't be going into these aspects" start="00:02:30.443" video="mainVideo" id=subtitle]]
+[[!template text="again this year." start="00:02:32.643" video="mainVideo" id=subtitle]]
+[[!template text="As this implies, there was nothing concrete" start="00:02:33.483" video="mainVideo" id=subtitle]]
+[[!template text="at that point." start="00:02:37.163" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The first practical steps towards NonGNU ELPA" start="00:02:38.683" video="mainVideo" id=subtitle]]
+[[!template text="were taken up by Stefan Monnier." start="00:02:41.883" video="mainVideo" id=subtitle]]
+[[!template text="This included updating GNU ELPA's build system" start="00:02:43.683" video="mainVideo" id=subtitle]]
+[[!template text="to support the requirements" start="00:02:47.963" video="mainVideo" id=subtitle]]
+[[!template text="of NonGNU ELPA as well." start="00:02:49.523" video="mainVideo" id=subtitle]]
+[[!template text="And so eventually," start="00:02:51.003" video="mainVideo" id=subtitle]]
+[[!template text="the idea became a Git repository," start="00:02:53.283" video="mainVideo" id=subtitle]]
+[[!template text="nongnu.git on savannah," start="00:02:55.323" video="mainVideo" id=subtitle]]
+[[!template text="then a website," start="00:02:57.203" video="mainVideo" id=subtitle]]
+[[!template text="elpa.nongnu.org," start="00:02:59.203" video="mainVideo" id=subtitle]]
+[[!template text="and then around late December of last year," start="00:03:02.523" video="mainVideo" id=subtitle]]
+[[!template text="NonGNU ELPA was also added" start="00:03:04.643" video="mainVideo" id=subtitle]]
+[[!template text="to the package-archives list." start="00:03:06.923" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Sadly, progress stalled from this point on," start="00:03:08.643" video="mainVideo" id=subtitle]]
+[[!template text="with the new archive consisting of only" start="00:03:11.963" video="mainVideo" id=subtitle]]
+[[!template text="five or six packages." start="00:03:14.123" video="mainVideo" id=subtitle]]
+[[!template text="It took until August" start="00:03:16.203" video="mainVideo" id=subtitle]]
+[[!template text="for more packages to be added," start="00:03:18.083" video="mainVideo" id=subtitle]]
+[[!template text="some by their respective authors," start="00:03:20.123" video="mainVideo" id=subtitle]]
+[[!template text="such as Magit and Projectile," start="00:03:22.003" video="mainVideo" id=subtitle]]
+[[!template text="but most by contributors such as myself." start="00:03:23.963" video="mainVideo" id=subtitle]]
+[[!template text="As of recording," start="00:03:26.163" video="mainVideo" id=subtitle]]
+[[!template text="the archive has around 70 packages," start="00:03:27.923" video="mainVideo" id=subtitle]]
+[[!template text="with more pending to be out soon." start="00:03:30.363" video="mainVideo" id=subtitle]]
+[[!template text="These include popular applications" start="00:03:32.803" video="mainVideo" id=subtitle]]
+[[!template text="such as the previously-mentioned Magit," start="00:03:34.803" video="mainVideo" id=subtitle]]
+[[!template text="SLIME, or wgrep," start="00:03:36.483" video="mainVideo" id=subtitle]]
+[[!template text="major modes like php-mode, rust-mode," start="00:03:38.083" video="mainVideo" id=subtitle]]
+[[!template text="go-mode, clojure-mode, lua-mode," start="00:03:41.523" video="mainVideo" id=subtitle]]
+[[!template text="markdown-mode... You get my point." start="00:03:43.723" video="mainVideo" id=subtitle]]
+[[!template text="And a number of visual themes," start="00:03:45.923" video="mainVideo" id=subtitle]]
+[[!template text="among other things." start="00:03:47.883" video="mainVideo" id=subtitle]]
+[[!template new="1" text="If you are interested in using NonGNU ELPA," start="00:03:49.443" video="mainVideo" id=subtitle]]
+[[!template text="but you are still bound" start="00:03:52.643" video="mainVideo" id=subtitle]]
+[[!template text="to an older version of Emacs," start="00:03:53.603" video="mainVideo" id=subtitle]]
+[[!template text="all you have to do is" start="00:03:55.203" video="mainVideo" id=subtitle]]
+[[!template text="to add the snippet" start="00:03:56.683" video="mainVideo" id=subtitle]]
+[[!template text="from the NonGNU ELPA home page" start="00:03:57.483" video="mainVideo" id=subtitle]]
+[[!template text="updating the package-archives variable." start="00:03:59.003" video="mainVideo" id=subtitle]]
+[[!template text="For Emacs 28 and newer," start="00:04:01.323" video="mainVideo" id=subtitle]]
+[[!template text="one might have to watch out" start="00:04:03.923" video="mainVideo" id=subtitle]]
+[[!template text="that you're not setting package-archives directly," start="00:04:05.123" video="mainVideo" id=subtitle]]
+[[!template text="and if you are doing so," start="00:04:07.563" video="mainVideo" id=subtitle]]
+[[!template text="to update the value." start="00:04:09.363" video="mainVideo" id=subtitle]]
+[[!template text="Emacs 28 only updates the default value" start="00:04:10.723" video="mainVideo" id=subtitle]]
+[[!template text="and will not manipulate the user's configuration." start="00:04:14.003" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Finally, a short note" start="00:04:17.043" video="mainVideo" id=subtitle]]
+[[!template text="for package developers." start="00:04:20.363" video="mainVideo" id=subtitle]]
+[[!template text="Most packages up until now" start="00:04:22.163" video="mainVideo" id=subtitle]]
+[[!template text="haven't been added by their maintainers." start="00:04:24.243" video="mainVideo" id=subtitle]]
+[[!template text="For the most part," start="00:04:26.243" video="mainVideo" id=subtitle]]
+[[!template text="I have been collecting and reviewing the packages" start="00:04:28.083" video="mainVideo" id=subtitle]]
+[[!template text="which have been added," start="00:04:31.083" video="mainVideo" id=subtitle]]
+[[!template text="which takes time" start="00:04:32.683" video="mainVideo" id=subtitle]]
+[[!template text="and is one of the main reasons" start="00:04:33.923" video="mainVideo" id=subtitle]]
+[[!template text="why we're still at only 70 packages." start="00:04:36.043" video="mainVideo" id=subtitle]]
+[[!template text="This is of course not a permanent solution." start="00:04:38.323" video="mainVideo" id=subtitle]]
+[[!template text="The intention here is" start="00:04:41.683" video="mainVideo" id=subtitle]]
+[[!template text="to bootstrap, so to say," start="00:04:42.243" video="mainVideo" id=subtitle]]
+[[!template text="the interest in NonGNU ELPA" start="00:04:44.803" video="mainVideo" id=subtitle]]
+[[!template text="by making it more interesting to you" start="00:04:46.243" video="mainVideo" id=subtitle]]
+[[!template text="and thus more interesting to contribute to." start="00:04:48.083" video="mainVideo" id=subtitle]]
+[[!template new="1" text="If you are interested in adding a package" start="00:04:50.563" video="mainVideo" id=subtitle]]
+[[!template text="that already exists, or a new package" start="00:04:53.563" video="mainVideo" id=subtitle]]
+[[!template text="to NonGNU ELPA, all you need to do is" start="00:04:56.643" video="mainVideo" id=subtitle]]
+[[!template text="send an e-mail to the" start="00:04:59.443" video="mainVideo" id=subtitle]]
+[[!template text="Emacs development mailing list," start="00:05:00.843" video="mainVideo" id=subtitle]]
+[[!template text="emacs-devel@gnu.org." start="00:05:02.483" video="mainVideo" id=subtitle]]
+[[!template text="This is an open mailing list" start="00:05:05.523" video="mainVideo" id=subtitle]]
+[[!template text="and requires no special registration." start="00:05:08.123" video="mainVideo" id=subtitle]]
+[[!template text="Your message should" start="00:05:10.563" video="mainVideo" id=subtitle]]
+[[!template text="mention NonGNU ELPA in the subject" start="00:05:12.283" video="mainVideo" id=subtitle]]
+[[!template text="and contain a link to a public Git repository" start="00:05:14.643" video="mainVideo" id=subtitle]]
+[[!template text="in the body. Ideally, a brief explanation" start="00:05:17.483" video="mainVideo" id=subtitle]]
+[[!template text="on what your package does" start="00:05:20.643" video="mainVideo" id=subtitle]]
+[[!template text="would be much appreciated." start="00:05:21.803" video="mainVideo" id=subtitle]]
+[[!template text="The proposal will be reviewed" start="00:05:23.243" video="mainVideo" id=subtitle]]
+[[!template text="by the readers of the mailing list," start="00:05:25.603" video="mainVideo" id=subtitle]]
+[[!template text="and after a bit of back-and-forth" start="00:05:28.043" video="mainVideo" id=subtitle]]
+[[!template text="on possible issues and improvements," start="00:05:29.443" video="mainVideo" id=subtitle]]
+[[!template text="the package will hopefully be added" start="00:05:31.123" video="mainVideo" id=subtitle]]
+[[!template text="to NonGNU ELPA itself." start="00:05:32.723" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The simplest mistake a lot of packages make" start="00:05:34.443" video="mainVideo" id=subtitle]]
+[[!template text="is to either not have" start="00:05:38.523" video="mainVideo" id=subtitle]]
+[[!template text="or maintain a version attribute" start="00:05:40.043" video="mainVideo" id=subtitle]]
+[[!template text="in the package header." start="00:05:41.843" video="mainVideo" id=subtitle]]
+[[!template text="This is done despite actually being necessary" start="00:05:42.803" video="mainVideo" id=subtitle]]
+[[!template text="for a well-formed Emacs package" start="00:05:46.323" video="mainVideo" id=subtitle]]
+[[!template text="according to the Elisp manual." start="00:05:48.163" video="mainVideo" id=subtitle]]
+[[!template text="ELPA relies on this tag" start="00:05:50.083" video="mainVideo" id=subtitle]]
+[[!template text="to detect new package versions" start="00:05:52.443" video="mainVideo" id=subtitle]]
+[[!template text="that will be built and distributed." start="00:05:54.323" video="mainVideo" id=subtitle]]
+[[!template text="If the version isn't updated," start="00:05:55.843" video="mainVideo" id=subtitle]]
+[[!template text="no new package will be released," start="00:05:58.483" video="mainVideo" id=subtitle]]
+[[!template text="and any changes won't be made public." start="00:06:00.323" video="mainVideo" id=subtitle]]
+[[!template text="So, that's that on NonGNU ELPA." start="00:06:03.043" video="mainVideo" id=subtitle]]
+[[!template new="1" text="To summarize, NonGNU ELPA is an" start="00:06:07.683" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Lisp Package Archive for Emacs," start="00:06:09.883" video="mainVideo" id=subtitle]]
+[[!template text="without a need for copyright assignments." start="00:06:11.683" video="mainVideo" id=subtitle]]
+[[!template text="It works, it exists, and it's been used already." start="00:06:13.363" video="mainVideo" id=subtitle]]
+[[!template text="I'm looking forward to" start="00:06:17.203" video="mainVideo" id=subtitle]]
+[[!template text="more packages being added to the archive" start="00:06:18.403" video="mainVideo" id=subtitle]]
+[[!template text="and improving the overall experience" start="00:06:20.403" video="mainVideo" id=subtitle]]
+[[!template text="of Emacs out of the box." start="00:06:22.803" video="mainVideo" id=subtitle]]
+[[!template text="Thank you for your interest, and goodbye." start="00:06:24.283" video="mainVideo" id=subtitle]]
+[[!template text="[captioned by sachac]" start="00:06:27.163" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/nyxt.md b/2021/captions/nyxt.md
new file mode 100644
index 00000000..98b5bc5b
--- /dev/null
+++ b/2021/captions/nyxt.md
@@ -0,0 +1,180 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Welcome to my talk &quot;Emacs with Nyxt:" start="00:00:00.000" video="mainVideo" id=subtitle]]
+[[!template text="extend your editor with" start="00:00:01.783" video="mainVideo" id=subtitle]]
+[[!template text="the power of a Lisp browser&quot;." start="00:00:02.823" video="mainVideo" id=subtitle]]
+[[!template text="Who am I? I'm Andrea. I work as" start="00:00:04.623" video="mainVideo" id=subtitle]]
+[[!template text="a Clojure software engineer somewhere" start="00:00:06.583" video="mainVideo" id=subtitle]]
+[[!template text="in the middle of the UK." start="00:00:08.303" video="mainVideo" id=subtitle]]
+[[!template text="And I inherited my passion for Emacs" start="00:00:09.743" video="mainVideo" id=subtitle]]
+[[!template text="from my Ph.D. supervisor, and from that" start="00:00:11.743" video="mainVideo" id=subtitle]]
+[[!template text="moment on Emacs became a core tool" start="00:00:13.703" video="mainVideo" id=subtitle]]
+[[!template text="of my daily routine." start="00:00:15.943" video="mainVideo" id=subtitle]]
+[[!template text="You can find more about me and my interests" start="00:00:17.863" video="mainVideo" id=subtitle]]
+[[!template text="at ag91.github.io, that is my blog." start="00:00:20.863" video="mainVideo" id=subtitle]]
+[[!template text="Let's get into the talk." start="00:00:23.983" video="mainVideo" id=subtitle]]
+[[!template text="So, why Nyxt? Nyxt is an extensible" start="00:00:25.183" video="mainVideo" id=subtitle]]
+[[!template text="Common Lisp browser." start="00:00:28.183" video="mainVideo" id=subtitle]]
+[[!template text="Fundamentally, it's Emacs for web browsing." start="00:00:29.543" video="mainVideo" id=subtitle]]
+[[!template text="And why do I say that? I say that" start="00:00:31.903" video="mainVideo" id=subtitle]]
+[[!template text="because is a…, this is Nyxt." start="00:00:34.063" video="mainVideo" id=subtitle]]
+[[!template text="You can see that is organized with buffers," start="00:00:36.063" video="mainVideo" id=subtitle]]
+[[!template text="and you can see that I can invoke command," start="00:00:40.223" video="mainVideo" id=subtitle]]
+[[!template text="like, I was in Emacs with this." start="00:00:44.063" video="mainVideo" id=subtitle]]
+[[!template text="So, I'm using even the same keybindings," start="00:00:47.183" video="mainVideo" id=subtitle]]
+[[!template text="so, for that I used M-x." start="00:00:48.983" video="mainVideo" id=subtitle]]
+[[!template text="And some of the features of Nyxt" start="00:00:52.783" video="mainVideo" id=subtitle]]
+[[!template text="are just amazing. For example, say that" start="00:00:55.983" video="mainVideo" id=subtitle]]
+[[!template text="you want to mark some text, this is the way," start="00:01:00.103" video="mainVideo" id=subtitle]]
+[[!template text="so, I just pressed Control space (C-SPC)," start="00:01:03.823" video="mainVideo" id=subtitle]]
+[[!template text="and now I will start the marker," start="00:01:08.703" video="mainVideo" id=subtitle]]
+[[!template text="and now I can copy the text, and when" start="00:01:10.423" video="mainVideo" id=subtitle]]
+[[!template text="I'm done, I can finish to use visual mode." start="00:01:13.223" video="mainVideo" id=subtitle]]
+[[!template text="Or, for example, what about…," start="00:01:15.663" video="mainVideo" id=subtitle]]
+[[!template text="I want to navigate without using my mouse." start="00:01:18.023" video="mainVideo" id=subtitle]]
+[[!template text="I can do something like follow-hint," start="00:01:21.183" video="mainVideo" id=subtitle]]
+[[!template text="and this opens the possibility to press" start="00:01:25.183" video="mainVideo" id=subtitle]]
+[[!template text="AC to jump on the Articles," start="00:01:28.023" video="mainVideo" id=subtitle]]
+[[!template text="and all of a sudden I'm on the page" start="00:01:29.903" video="mainVideo" id=subtitle]]
+[[!template text="with the blog posts of the Atlas team." start="00:01:33.063" video="mainVideo" id=subtitle]]
+[[!template text="Or, for example, I can extend my browser" start="00:01:36.023" video="mainVideo" id=subtitle]]
+[[!template text="from within the browser." start="00:01:39.383" video="mainVideo" id=subtitle]]
+[[!template text="So, you can see I can evaluate a command," start="00:01:40.783" video="mainVideo" id=subtitle]]
+[[!template text="a Common Lisp code," start="00:01:43.223" video="mainVideo" id=subtitle]]
+[[!template text="and it produces the result." start="00:01:48.663" video="mainVideo" id=subtitle]]
+[[!template text="And then, for example, I can also auto…." start="00:01:50.903" video="mainVideo" id=subtitle]]
+[[!template text="This browser comes by default with an" start="00:01:56.183" video="mainVideo" id=subtitle]]
+[[!template text="integration with your password manager," start="00:01:58.663" video="mainVideo" id=subtitle]]
+[[!template text="in my case it's pass, and I can copy" start="00:02:01.143" video="mainVideo" id=subtitle]]
+[[!template text="a password. This is just as easy as is," start="00:02:04.223" video="mainVideo" id=subtitle]]
+[[!template text="it comes by default." start="00:02:08.783" video="mainVideo" id=subtitle]]
+[[!template text="Another incredibly useful feature" start="00:02:10.543" video="mainVideo" id=subtitle]]
+[[!template text="that I didn't find in other browsers is" start="00:02:13.583" video="mainVideo" id=subtitle]]
+[[!template text="searching between multiple buffers." start="00:02:18.023" video="mainVideo" id=subtitle]]
+[[!template text="So, this function search-buffers," start="00:02:20.503" video="mainVideo" id=subtitle]]
+[[!template text="this command lets me select" start="00:02:23.503" video="mainVideo" id=subtitle]]
+[[!template text="some of my open buffers," start="00:02:25.823" video="mainVideo" id=subtitle]]
+[[!template text="and I can look for a string in there." start="00:02:29.503" video="mainVideo" id=subtitle]]
+[[!template text="And you would see that the hits are" start="00:02:32.503" video="mainVideo" id=subtitle]]
+[[!template text="from the buffers that I have open," start="00:02:34.623" video="mainVideo" id=subtitle]]
+[[!template text="for example, Clojure or" start="00:02:37.423" video="mainVideo" id=subtitle]]
+[[!template text="the YouTube video about Clojure." start="00:02:42.583" video="mainVideo" id=subtitle]]
+[[!template text="Let me get into something very interesting." start="00:02:46.103" video="mainVideo" id=subtitle]]
+[[!template text="How can I make Emacs speak to Nyxt." start="00:02:49.623" video="mainVideo" id=subtitle]]
+[[!template text="And for that, let me show you something" start="00:02:52.783" video="mainVideo" id=subtitle]]
+[[!template text="in the literate programming approach." start="00:02:55.103" video="mainVideo" id=subtitle]]
+[[!template text="So, this Org mode source block is" start="00:02:57.143" video="mainVideo" id=subtitle]]
+[[!template text="linked to this Nyxt REPL." start="00:03:00.183" video="mainVideo" id=subtitle]]
+[[!template text="I can define a new command," start="00:03:04.423" video="mainVideo" id=subtitle]]
+[[!template text="and when I go in Nyxt," start="00:03:06.983" video="mainVideo" id=subtitle]]
+[[!template text="I can find this new command," start="00:03:09.343" video="mainVideo" id=subtitle]]
+[[!template text="and I can invoke it, and you can see" start="00:03:10.863" video="mainVideo" id=subtitle]]
+[[!template text="there is something in the minibuffer." start="00:03:12.503" video="mainVideo" id=subtitle]]
+[[!template text="I can use it from Nyxt, but I can do it here." start="00:03:16.943" video="mainVideo" id=subtitle]]
+[[!template text="I can also use it directly from the REPL." start="00:03:21.543" video="mainVideo" id=subtitle]]
+[[!template text="You can see that the same thing is logged" start="00:03:24.703" video="mainVideo" id=subtitle]]
+[[!template text="in the REPL." start="00:03:27.743" video="mainVideo" id=subtitle]]
+[[!template text="And then with something that I would speak" start="00:03:30.423" video="mainVideo" id=subtitle]]
+[[!template text="about in another talk in the conference" start="00:03:32.663" video="mainVideo" id=subtitle]]
+[[!template text="— Moldable Emacs. I can also just" start="00:03:36.423" video="mainVideo" id=subtitle]]
+[[!template text="evaluate JavaScript outside. Let's create" start="00:03:39.143" video="mainVideo" id=subtitle]]
+[[!template text="a playground that allows me to write some" start="00:03:42.823" video="mainVideo" id=subtitle]]
+[[!template text="JavaScript code. And if I evaluate this code," start="00:03:46.703" video="mainVideo" id=subtitle]]
+[[!template text="I get the title of the webpage" start="00:03:49.903" video="mainVideo" id=subtitle]]
+[[!template text="that is currently open in Nyxt." start="00:03:52.023" video="mainVideo" id=subtitle]]
+[[!template text="The cool thing is that I can do it also" start="00:03:54.583" video="mainVideo" id=subtitle]]
+[[!template text="directly in Lisp, this is Parenscript" start="00:03:58.343" video="mainVideo" id=subtitle]]
+[[!template text="that evaluates to the same thing," start="00:04:02.263" video="mainVideo" id=subtitle]]
+[[!template text="(it) is just the same, just document.title," start="00:04:05.223" video="mainVideo" id=subtitle]]
+[[!template text="only that is in Common Lisp." start="00:04:07.823" video="mainVideo" id=subtitle]]
+[[!template text="You see that Emacs can speak to Nyxt," start="00:04:10.743" video="mainVideo" id=subtitle]]
+[[!template text="but also the reverse is true." start="00:04:14.343" video="mainVideo" id=subtitle]]
+[[!template text="Nyxt can speak to Emacs. So, for example," start="00:04:16.103" video="mainVideo" id=subtitle]]
+[[!template text="if I'm in Nyxt, and for example," start="00:04:19.023" video="mainVideo" id=subtitle]]
+[[!template text="let me go to my blog, if I press here," start="00:04:21.943" video="mainVideo" id=subtitle]]
+[[!template text="this is an email link, automatically in Emacs" start="00:04:26.623" video="mainVideo" id=subtitle]]
+[[!template text="it will let me compone a message" start="00:04:30.863" video="mainVideo" id=subtitle]]
+[[!template text="using my email manager." start="00:04:33.943" video="mainVideo" id=subtitle]]
+[[!template text="Or, say that always in my blog I want" start="00:04:35.943" video="mainVideo" id=subtitle]]
+[[!template text="to write something here in the searchbar," start="00:04:39.823" video="mainVideo" id=subtitle]]
+[[!template text="I think that I don't want to write it in" start="00:04:43.543" video="mainVideo" id=subtitle]]
+[[!template text="the browser but in my Emacs because" start="00:04:46.303" video="mainVideo" id=subtitle]]
+[[!template text="I have some template for search." start="00:04:50.623" video="mainVideo" id=subtitle]]
+[[!template text="If I do this, all of a sudden" start="00:04:52.903" video="mainVideo" id=subtitle]]
+[[!template text="the text is added." start="00:04:55.503" video="mainVideo" id=subtitle]]
+[[!template text="Or say I'm watching that Clojure video," start="00:04:59.103" video="mainVideo" id=subtitle]]
+[[!template text="and I get to this point, and then I say" start="00:05:03.423" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Yuu! This is a very interesting thing," start="00:05:06.343" video="mainVideo" id=subtitle]]
+[[!template text="let me take a note&quot;. So, I take some note" start="00:05:09.703" video="mainVideo" id=subtitle]]
+[[!template text="with some text, and if I go back in Emacs," start="00:05:12.783" video="mainVideo" id=subtitle]]
+[[!template text="tadam! I found the note," start="00:05:16.903" video="mainVideo" id=subtitle]]
+[[!template text="and I found it with the duration," start="00:05:19.023" video="mainVideo" id=subtitle]]
+[[!template text="so I can just jump to the same point." start="00:05:21.903" video="mainVideo" id=subtitle]]
+[[!template text="And what else?" start="00:05:25.063" video="mainVideo" id=subtitle]]
+[[!template text="There is something even bigger" start="00:05:28.743" video="mainVideo" id=subtitle]]
+[[!template text="that we can do," start="00:05:31.903" video="mainVideo" id=subtitle]]
+[[!template text="this is a bit more advanced," start="00:05:32.663" video="mainVideo" id=subtitle]]
+[[!template text="and this is something that I do" start="00:05:34.063" video="mainVideo" id=subtitle]]
+[[!template text="again with my Moldable Emacs." start="00:05:35.823" video="mainVideo" id=subtitle]]
+[[!template text="Say that you want to do some" start="00:05:39.023" video="mainVideo" id=subtitle]]
+[[!template text="data visualization." start="00:05:41.183" video="mainVideo" id=subtitle]]
+[[!template text="If we use Vega-Lite…, for example," start="00:05:43.223" video="mainVideo" id=subtitle]]
+[[!template text="we want to visualize a scatter plot." start="00:05:44.863" video="mainVideo" id=subtitle]]
+[[!template text="Let me take some example data" start="00:05:47.823" video="mainVideo" id=subtitle]]
+[[!template text="that could be interesting also to you." start="00:05:49.623" video="mainVideo" id=subtitle]]
+[[!template text="So, say that I have this playground" start="00:05:52.423" video="mainVideo" id=subtitle]]
+[[!template text="that lets me evaluate" start="00:05:55.063" video="mainVideo" id=subtitle]]
+[[!template text="some query on my Org-roam database." start="00:05:57.263" video="mainVideo" id=subtitle]]
+[[!template text="What I'm doing here is I'm gonna" start="00:06:01.703" video="mainVideo" id=subtitle]]
+[[!template text="go through my first 100 notes" start="00:06:03.663" video="mainVideo" id=subtitle]]
+[[!template text="and collect their backlinks," start="00:06:05.703" video="mainVideo" id=subtitle]]
+[[!template text="so some information that I find interesting." start="00:06:09.823" video="mainVideo" id=subtitle]]
+[[!template text="If I convert this to JSON," start="00:06:13.183" video="mainVideo" id=subtitle]]
+[[!template text="now, all of a sudden this is something" start="00:06:16.343" video="mainVideo" id=subtitle]]
+[[!template text="that I can put in that Vega-Lite template" start="00:06:18.903" video="mainVideo" id=subtitle]]
+[[!template text="that I showed you a moment ago." start="00:06:22.623" video="mainVideo" id=subtitle]]
+[[!template text="So, I'm gonna find out that file," start="00:06:26.183" video="mainVideo" id=subtitle]]
+[[!template text="you see that I left a question mark," start="00:06:28.343" video="mainVideo" id=subtitle]]
+[[!template text="(this is) something that I still" start="00:06:30.463" video="mainVideo" id=subtitle]]
+[[!template text="didn't automate completely." start="00:06:31.703" video="mainVideo" id=subtitle]]
+[[!template text="By saving this file and opening it with Nyxt," start="00:06:33.783" video="mainVideo" id=subtitle]]
+[[!template text="you can see that now I have a scatter plot." start="00:06:37.983" video="mainVideo" id=subtitle]]
+[[!template text="And these are my actual notes," start="00:06:41.183" video="mainVideo" id=subtitle]]
+[[!template text="so you can see that if I stay on it," start="00:06:43.943" video="mainVideo" id=subtitle]]
+[[!template text="these are actually my notes." start="00:06:48.343" video="mainVideo" id=subtitle]]
+[[!template text="When I'm in Emacs, what I can do is" start="00:06:53.063" video="mainVideo" id=subtitle]]
+[[!template text="I click here, and now in the background" start="00:06:55.343" video="mainVideo" id=subtitle]]
+[[!template text="it opened my note," start="00:06:58.303" video="mainVideo" id=subtitle]]
+[[!template text="and it opened with all my backlinks." start="00:07:00.903" video="mainVideo" id=subtitle]]
+[[!template text="You can see that I have embedded in my" start="00:07:04.303" video="mainVideo" id=subtitle]]
+[[!template text="browser some functionality of Emacs." start="00:07:07.703" video="mainVideo" id=subtitle]]
+[[!template text="You understand that this is the power of" start="00:07:11.303" video="mainVideo" id=subtitle]]
+[[!template text="unifying, integrating these two experiences," start="00:07:13.463" video="mainVideo" id=subtitle]]
+[[!template text="and it opens the doors for" start="00:07:16.983" video="mainVideo" id=subtitle]]
+[[!template text="a lot of interesting interactivity." start="00:07:18.943" video="mainVideo" id=subtitle]]
+[[!template text="Anyway, what is next?" start="00:07:22.223" video="mainVideo" id=subtitle]]
+[[!template text="This was my talk, what is next is" start="00:07:24.743" video="mainVideo" id=subtitle]]
+[[!template text="continue merging it with Moldable Emacs." start="00:07:29.023" video="mainVideo" id=subtitle]]
+[[!template text="(This) is something I will present in" start="00:07:32.143" video="mainVideo" id=subtitle]]
+[[!template text="another talk in this conference with web," start="00:07:34.023" video="mainVideo" id=subtitle]]
+[[!template text="so that we can extract meaning from" start="00:07:37.463" video="mainVideo" id=subtitle]]
+[[!template text="the web, and we can bring it in Emacs." start="00:07:39.263" video="mainVideo" id=subtitle]]
+[[!template text="And from Emacs bringing back stuff" start="00:07:41.103" video="mainVideo" id=subtitle]]
+[[!template text="like a picture into a web page," start="00:07:43.583" video="mainVideo" id=subtitle]]
+[[!template text="so that we can do fancy visualization." start="00:07:46.543" video="mainVideo" id=subtitle]]
+[[!template text="Another thing I want to do is to" start="00:07:48.903" video="mainVideo" id=subtitle]]
+[[!template text="automate the boring browser flows" start="00:07:51.063" video="mainVideo" id=subtitle]]
+[[!template text="that I do, like, for example," start="00:07:54.263" video="mainVideo" id=subtitle]]
+[[!template text="if I periodically buy something," start="00:07:55.543" video="mainVideo" id=subtitle]]
+[[!template text="I could do it from within Emacs" start="00:07:58.263" video="mainVideo" id=subtitle]]
+[[!template text="instead of always clicking around." start="00:08:00.863" video="mainVideo" id=subtitle]]
+[[!template text="And then I'm just gonna cross fingers," start="00:08:05.263" video="mainVideo" id=subtitle]]
+[[!template text="I hope that this browser will" start="00:08:08.383" video="mainVideo" id=subtitle]]
+[[!template text="become mainstream." start="00:08:10.023" video="mainVideo" id=subtitle]]
+[[!template text="So, this was my talk," start="00:08:11.783" video="mainVideo" id=subtitle]]
+[[!template text="thank you for listening," start="00:08:13.263" video="mainVideo" id=subtitle]]
+[[!template text="and you can find more about it at" start="00:08:14.663" video="mainVideo" id=subtitle]]
+[[!template text="ag91.github.io, my blog," start="00:08:17.343" video="mainVideo" id=subtitle]]
+[[!template text="and enjoy the rest of the conference, bye!" start="00:08:19.823" video="mainVideo" id=subtitle]]
+[[!template text="captions: bhavin192 (Bhavin Gandhi)" start="00:08:22.680" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/omegat.md b/2021/captions/omegat.md
new file mode 100644
index 00000000..e6f68e57
--- /dev/null
+++ b/2021/captions/omegat.md
@@ -0,0 +1,900 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello, everybody." start="00:00:01.280" video="mainVideo" id=subtitle]]
+[[!template text="My name is Jean-Christophe Helary," start="00:00:02.560" video="mainVideo" id=subtitle]]
+[[!template text="and today I'm going to talk about" start="00:00:04.400" video="mainVideo" id=subtitle]]
+[[!template text="Emacs manuals translation and OmegaT." start="00:00:05.680" video="mainVideo" id=subtitle]]
+[[!template text="Thank you for joining the session." start="00:00:08.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Translation in the free software world" start="00:00:10.960" video="mainVideo" id=subtitle]]
+[[!template text="is really a big thing. You already know" start="00:00:12.880" video="mainVideo" id=subtitle]]
+[[!template text="that most of the Linux distributions," start="00:00:15.040" video="mainVideo" id=subtitle]]
+[[!template text="most of the software packages," start="00:00:17.119" video="mainVideo" id=subtitle]]
+[[!template text="most of the websites" start="00:00:18.720" video="mainVideo" id=subtitle]]
+[[!template text="are translated by dozens of communities" start="00:00:19.920" video="mainVideo" id=subtitle]]
+[[!template text="using different processes" start="00:00:22.320" video="mainVideo" id=subtitle]]
+[[!template text="and file formats." start="00:00:23.439" video="mainVideo" id=subtitle]]
+[[!template text="Translation and localizations" start="00:00:24.880" video="mainVideo" id=subtitle]]
+[[!template text="are things we know very well." start="00:00:27.359" video="mainVideo" id=subtitle]]
+[[!template text="It's a tad different" start="00:00:29.599" video="mainVideo" id=subtitle]]
+[[!template text="for the Emacs community." start="00:00:30.400" video="mainVideo" id=subtitle]]
+[[!template text="We didn't have a localization process" start="00:00:32.160" video="mainVideo" id=subtitle]]
+[[!template text="because it's quite complex" start="00:00:34.079" video="mainVideo" id=subtitle]]
+[[!template text="and because we don't" start="00:00:35.200" video="mainVideo" id=subtitle]]
+[[!template text="have the resources yet." start="00:00:35.920" video="mainVideo" id=subtitle]]
+[[!template text="Still, we could translate the manuals," start="00:00:37.600" video="mainVideo" id=subtitle]]
+[[!template text="and translating the manuals" start="00:00:39.920" video="mainVideo" id=subtitle]]
+[[!template text="would probably bring a lot of good" start="00:00:41.200" video="mainVideo" id=subtitle]]
+[[!template text="to the Emacs community at large." start="00:00:42.399" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So what's the state of the manuals?" start="00:00:45.600" video="mainVideo" id=subtitle]]
+[[!template text="As of today, we have 182 files" start="00:00:47.920" video="mainVideo" id=subtitle]]
+[[!template text="coming in .texi and .org format." start="00:00:51.199" video="mainVideo" id=subtitle]]
+[[!template text="We've got more than 2 million words." start="00:00:54.160" video="mainVideo" id=subtitle]]
+[[!template text="We've got more than" start="00:00:56.559" video="mainVideo" id=subtitle]]
+[[!template text="50 million characters." start="00:00:57.360" video="mainVideo" id=subtitle]]
+[[!template text="So that's quite a lot of work," start="00:00:59.039" video="mainVideo" id=subtitle]]
+[[!template text="and obviously, it's not a one person job." start="00:01:00.559" video="mainVideo" id=subtitle]]
+[[!template new="1" text="When we open .texi files," start="00:01:04.559" video="mainVideo" id=subtitle]]
+[[!template text="what do we have?" start="00:01:06.159" video="mainVideo" id=subtitle]]
+[[!template text="Well, we actually have a lot of things" start="00:01:07.760" video="mainVideo" id=subtitle]]
+[[!template text="that the translators" start="00:01:09.439" video="mainVideo" id=subtitle]]
+[[!template text="shouldn't have to translate." start="00:01:10.560" video="mainVideo" id=subtitle]]
+[[!template text="Here we can see that only" start="00:01:12.400" video="mainVideo" id=subtitle]]
+[[!template text="the very last segment," start="00:01:13.680" video="mainVideo" id=subtitle]]
+[[!template text="the very last sentence" start="00:01:15.040" video="mainVideo" id=subtitle]]
+[[!template text="should be translated." start="00:01:16.400" video="mainVideo" id=subtitle]]
+[[!template text="All those meta things" start="00:01:18.080" video="mainVideo" id=subtitle]]
+[[!template text="should not be under" start="00:01:19.360" video="mainVideo" id=subtitle]]
+[[!template text="the translator's eyes." start="00:01:20.240" video="mainVideo" id=subtitle]]
+[[!template text="How do we deal with this situation?" start="00:01:24.479" video="mainVideo" id=subtitle]]
+[[!template text="For code files, we have" start="00:01:26.720" video="mainVideo" id=subtitle]]
+[[!template text="the gettext utility that converts" start="00:01:27.680" video="mainVideo" id=subtitle]]
+[[!template text="all the translatable strings" start="00:01:29.360" video="mainVideo" id=subtitle]]
+[[!template text="into a translable format," start="00:01:30.640" video="mainVideo" id=subtitle]]
+[[!template text="which is the .po format." start="00:01:32.079" video="mainVideo" id=subtitle]]
+[[!template text="And that .po format is ubiquitous," start="00:01:33.840" video="mainVideo" id=subtitle]]
+[[!template text="even in the non-free" start="00:01:35.520" video="mainVideo" id=subtitle]]
+[[!template text="software translation industry." start="00:01:36.400" video="mainVideo" id=subtitle]]
+[[!template text="For documentation," start="00:01:38.720" video="mainVideo" id=subtitle]]
+[[!template text="we have something different." start="00:01:39.520" video="mainVideo" id=subtitle]]
+[[!template text="It's called po4a," start="00:01:40.720" video="mainVideo" id=subtitle]]
+[[!template text="which is short for .po for all." start="00:01:42.000" video="mainVideo" id=subtitle]]
+[[!template text="When we use po4a" start="00:01:45.119" video="mainVideo" id=subtitle]]
+[[!template text="on those 182 .texi and .org files," start="00:01:46.399" video="mainVideo" id=subtitle]]
+[[!template text="what do we get?" start="00:01:49.200" video="mainVideo" id=subtitle]]
+[[!template text="We get something that's much better." start="00:01:50.479" video="mainVideo" id=subtitle]]
+[[!template text="Now we have three segments." start="00:01:52.640" video="mainVideo" id=subtitle]]
+[[!template text="It's not perfect because," start="00:01:54.799" video="mainVideo" id=subtitle]]
+[[!template text="as you can see," start="00:01:55.759" video="mainVideo" id=subtitle]]
+[[!template text="the two first segments" start="00:01:56.399" video="mainVideo" id=subtitle]]
+[[!template text="should not be translated." start="00:01:57.280" video="mainVideo" id=subtitle]]
+[[!template text="so there's still" start="00:01:58.880" video="mainVideo" id=subtitle]]
+[[!template text="room for improvement." start="00:01:59.520" video="mainVideo" id=subtitle]]
+[[!template text="Now, when we put that file set" start="00:02:02.479" video="mainVideo" id=subtitle]]
+[[!template text="into OmegaT, we considerably reduce" start="00:02:04.960" video="mainVideo" id=subtitle]]
+[[!template text="the words total." start="00:02:07.119" video="mainVideo" id=subtitle]]
+[[!template text="We have now 50% less words" start="00:02:08.800" video="mainVideo" id=subtitle]]
+[[!template text="and 23% less characters to type," start="00:02:11.360" video="mainVideo" id=subtitle]]
+[[!template text="but that's still a lot of work." start="00:02:14.239" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's talk about OmegaT now" start="00:02:15.680" video="mainVideo" id=subtitle]]
+[[!template text="and see where it can help." start="00:02:17.599" video="mainVideo" id=subtitle]]
+[[!template text="OmegaT is a GPL3+ Java8+" start="00:02:22.239" video="mainVideo" id=subtitle]]
+[[!template text="computer aided translation tool." start="00:02:25.440" video="mainVideo" id=subtitle]]
+[[!template text="We call them CATs." start="00:02:27.599" video="mainVideo" id=subtitle]]
+[[!template text="CATs are to translators" start="00:02:29.440" video="mainVideo" id=subtitle]]
+[[!template text="what ideas are to programmers." start="00:02:30.720" video="mainVideo" id=subtitle]]
+[[!template text="They leverage the power of computers" start="00:02:33.280" video="mainVideo" id=subtitle]]
+[[!template text="to automate our work," start="00:02:35.040" video="mainVideo" id=subtitle]]
+[[!template text="which is reference searches," start="00:02:36.480" video="mainVideo" id=subtitle]]
+[[!template text="fuzzy matching, automatic insertions," start="00:02:38.400" video="mainVideo" id=subtitle]]
+[[!template text="and things like that." start="00:02:40.800" video="mainVideo" id=subtitle]]
+[[!template new="1" text="OmegaT is not really recent." start="00:02:44.080" video="mainVideo" id=subtitle]]
+[[!template text="It will turn 20 next year," start="00:02:46.319" video="mainVideo" id=subtitle]]
+[[!template text="and at this point," start="00:02:48.319" video="mainVideo" id=subtitle]]
+[[!template text="we have about 1.5 million downloads" start="00:02:48.959" video="mainVideo" id=subtitle]]
+[[!template text="from the SourceForge site," start="00:02:51.440" video="mainVideo" id=subtitle]]
+[[!template text="which doesn't mean much" start="00:02:53.200" video="mainVideo" id=subtitle]]
+[[!template text="because that includes" start="00:02:54.080" video="mainVideo" id=subtitle]]
+[[!template text="files used for localization" start="00:02:55.040" video="mainVideo" id=subtitle]]
+[[!template text="and manuals, but still" start="00:02:56.480" video="mainVideo" id=subtitle]]
+[[!template text="it's a pretty big number." start="00:02:57.920" video="mainVideo" id=subtitle]]
+[[!template text="OmegaT is included in" start="00:02:59.599" video="mainVideo" id=subtitle]]
+[[!template text="a lot of Linux distributions," start="00:03:00.720" video="mainVideo" id=subtitle]]
+[[!template text="but as you can see here," start="00:03:02.400" video="mainVideo" id=subtitle]]
+[[!template text="it's mostly downloaded on Windows systems" start="00:03:03.680" video="mainVideo" id=subtitle]]
+[[!template text="because translators" start="00:03:05.920" video="mainVideo" id=subtitle]]
+[[!template text="mostly work on Windows." start="00:03:06.800" video="mainVideo" id=subtitle]]
+[[!template text="OmegaT comes with a cool logo" start="00:03:09.680" video="mainVideo" id=subtitle]]
+[[!template text="and a cool site too," start="00:03:11.120" video="mainVideo" id=subtitle]]
+[[!template text="and I really invite you to visit it." start="00:03:12.080" video="mainVideo" id=subtitle]]
+[[!template text="It's omegat.org , and you'll see" start="00:03:13.920" video="mainVideo" id=subtitle]]
+[[!template text="all the information you need," start="00:03:16.159" video="mainVideo" id=subtitle]]
+[[!template text="plus downloads to Linux versions," start="00:03:17.280" video="mainVideo" id=subtitle]]
+[[!template text="with or without Java included." start="00:03:19.040" video="mainVideo" id=subtitle]]
+[[!template text="So what does OmegaT bring to the game?" start="00:03:22.080" video="mainVideo" id=subtitle]]
+[[!template text="Professional translators have to deliver" start="00:03:24.799" video="mainVideo" id=subtitle]]
+[[!template text="fast, consistent," start="00:03:26.560" video="mainVideo" id=subtitle]]
+[[!template text="and quality translations," start="00:03:27.680" video="mainVideo" id=subtitle]]
+[[!template text="and we need to have proper tools" start="00:03:29.519" video="mainVideo" id=subtitle]]
+[[!template text="to achieve that." start="00:03:30.720" video="mainVideo" id=subtitle]]
+[[!template text="I wish po-mode was part of the toolbox," start="00:03:32.159" video="mainVideo" id=subtitle]]
+[[!template text="but that's not the case," start="00:03:34.239" video="mainVideo" id=subtitle]]
+[[!template text="and it's a pity." start="00:03:35.120" video="mainVideo" id=subtitle]]
+[[!template text="So we have to use those CAT tools." start="00:03:36.560" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let me show you what OmegaT looks like" start="00:03:39.760" video="mainVideo" id=subtitle]]
+[[!template text="when I open this project that I created" start="00:03:41.440" video="mainVideo" id=subtitle]]
+[[!template text="for this demonstration." start="00:03:43.120" video="mainVideo" id=subtitle]]
+[[!template text="The display is quite a mouthful," start="00:03:45.200" video="mainVideo" id=subtitle]]
+[[!template text="but you can actually modify" start="00:03:46.640" video="mainVideo" id=subtitle]]
+[[!template text="all windows as needed." start="00:03:47.760" video="mainVideo" id=subtitle]]
+[[!template text="I just want to show you" start="00:03:49.519" video="mainVideo" id=subtitle]]
+[[!template text="everything at once" start="00:03:50.400" video="mainVideo" id=subtitle]]
+[[!template text="to give you a quick idea of the thing." start="00:03:51.120" video="mainVideo" id=subtitle]]
+[[!template text="You have various colors, windows," start="00:03:53.680" video="mainVideo" id=subtitle]]
+[[!template text="and all those spaces" start="00:03:55.200" video="mainVideo" id=subtitle]]
+[[!template text="have different functions" start="00:03:55.920" video="mainVideo" id=subtitle]]
+[[!template text="that help the translator," start="00:03:57.120" video="mainVideo" id=subtitle]]
+[[!template text="and that you're probably" start="00:03:58.560" video="mainVideo" id=subtitle]]
+[[!template text="not familiar with." start="00:03:59.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I'm going to introduce you" start="00:04:02.879" video="mainVideo" id=subtitle]]
+[[!template text="to the interface now." start="00:04:04.080" video="mainVideo" id=subtitle]]
+[[!template text="So first, we have the editor." start="00:04:05.680" video="mainVideo" id=subtitle]]
+[[!template text="The editor comes in two parts:" start="00:04:07.519" video="mainVideo" id=subtitle]]
+[[!template text="the current segment," start="00:04:09.439" video="mainVideo" id=subtitle]]
+[[!template text="which is associated to a number," start="00:04:10.480" video="mainVideo" id=subtitle]]
+[[!template text="and all the other segments" start="00:04:12.319" video="mainVideo" id=subtitle]]
+[[!template text="above or below." start="00:04:13.519" video="mainVideo" id=subtitle]]
+[[!template text="At the top of the window," start="00:04:15.840" video="mainVideo" id=subtitle]]
+[[!template text="you can see the three first segments" start="00:04:16.720" video="mainVideo" id=subtitle]]
+[[!template text="that were in the .po file." start="00:04:18.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The last one here, the fourth one, comes" start="00:04:20.799" video="mainVideo" id=subtitle]]
+[[!template text="with an automatic fuzzy match insertion." start="00:04:22.880" video="mainVideo" id=subtitle]]
+[[!template text="Such legacy translations are what we" start="00:04:28.720" video="mainVideo" id=subtitle]]
+[[!template text="call &quot;translation memories&quot;." start="00:04:30.880" video="mainVideo" id=subtitle]]
+[[!template text="OmegaT has inserted this one automatically" start="00:04:32.720" video="mainVideo" id=subtitle]]
+[[!template text="because I told it to do so," start="00:04:35.280" video="mainVideo" id=subtitle]]
+[[!template text="and for my security, it comes with" start="00:04:37.120" video="mainVideo" id=subtitle]]
+[[!template text="the predefined fuzzy prefix" start="00:04:38.560" video="mainVideo" id=subtitle]]
+[[!template text="that i will have to remove" start="00:04:40.639" video="mainVideo" id=subtitle]]
+[[!template text="to validate the translation." start="00:04:41.919" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Our next feature is the glossary feature." start="00:04:44.880" video="mainVideo" id=subtitle]]
+[[!template text="In this project," start="00:04:47.919" video="mainVideo" id=subtitle]]
+[[!template text="we have a lot of glossary data." start="00:04:48.479" video="mainVideo" id=subtitle]]
+[[!template text="Some is relevant and some is not." start="00:04:50.160" video="mainVideo" id=subtitle]]
+[[!template text="In the segment that I'm translating" start="00:04:52.560" video="mainVideo" id=subtitle]]
+[[!template text="at the moment, you can see" start="00:04:53.919" video="mainVideo" id=subtitle]]
+[[!template text="underlying items." start="00:04:55.199" video="mainVideo" id=subtitle]]
+[[!template new="1" text="This pop-up menu on the right" start="00:04:57.520" video="mainVideo" id=subtitle]]
+[[!template text="allows me to enter the terms as I type." start="00:04:59.040" video="mainVideo" id=subtitle]]
+[[!template text="It's kind of an auto insertion system" start="00:05:02.240" video="mainVideo" id=subtitle]]
+[[!template text="that also supports history predictions," start="00:05:04.639" video="mainVideo" id=subtitle]]
+[[!template text="predefined strings, and things like that." start="00:05:07.039" video="mainVideo" id=subtitle]]
+[[!template new="1" text="In the part on the right," start="00:05:14.479" video="mainVideo" id=subtitle]]
+[[!template text="we have reference information" start="00:05:15.440" video="mainVideo" id=subtitle]]
+[[!template text="that comes directly from" start="00:05:17.120" video="mainVideo" id=subtitle]]
+[[!template text="the .po and the .texi files." start="00:05:18.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="We also have notes that I can share" start="00:05:21.440" video="mainVideo" id=subtitle]]
+[[!template text="with fellow translators," start="00:05:23.440" video="mainVideo" id=subtitle]]
+[[!template text="and we have numbers that tell me" start="00:05:25.759" video="mainVideo" id=subtitle]]
+[[!template text="that I still have 143 segments more to go" start="00:05:28.080" video="mainVideo" id=subtitle]]
+[[!template text="before I complete this translation." start="00:05:31.199" video="mainVideo" id=subtitle]]
+[[!template text="As we see, there are plenty of strings" start="00:05:35.280" video="mainVideo" id=subtitle]]
+[[!template text="that we really don't want to have to type." start="00:05:37.120" video="mainVideo" id=subtitle]]
+[[!template text="For example, those strings" start="00:05:40.000" video="mainVideo" id=subtitle]]
+[[!template text="are typical .texi strings" start="00:05:42.160" video="mainVideo" id=subtitle]]
+[[!template text="that the translator" start="00:05:43.840" video="mainVideo" id=subtitle]]
+[[!template text="should really not have to type." start="00:05:45.039" video="mainVideo" id=subtitle]]
+[[!template text="So we're going to have to" start="00:05:46.479" video="mainVideo" id=subtitle]]
+[[!template text="do something about that." start="00:05:47.360" video="mainVideo" id=subtitle]]
+[[!template text="we're going to have to create" start="00:05:50.400" video="mainVideo" id=subtitle]]
+[[!template text="protected strings" start="00:05:51.600" video="mainVideo" id=subtitle]]
+[[!template text="with regular expressions," start="00:05:52.479" video="mainVideo" id=subtitle]]
+[[!template text="so that the strings can be visualized" start="00:05:54.400" video="mainVideo" id=subtitle]]
+[[!template text="right away in the source segment," start="00:05:56.800" video="mainVideo" id=subtitle]]
+[[!template text="entered semi-automatically" start="00:05:59.120" video="mainVideo" id=subtitle]]
+[[!template text="in the target segment," start="00:06:00.479" video="mainVideo" id=subtitle]]
+[[!template text="and checked for integrity." start="00:06:01.680" video="mainVideo" id=subtitle]]
+[[!template text="The regular expression I came up with" start="00:06:04.479" video="mainVideo" id=subtitle]]
+[[!template text="for defining most of the strings" start="00:06:06.479" video="mainVideo" id=subtitle]]
+[[!template text="is this one," start="00:06:08.160" video="mainVideo" id=subtitle]]
+[[!template text="and I'm not a regular expression pro" start="00:06:09.600" video="mainVideo" id=subtitle]]
+[[!template text="so I'm sure some of you will correct me." start="00:06:11.120" video="mainVideo" id=subtitle]]
+[[!template text="But this expression gives me" start="00:06:13.360" video="mainVideo" id=subtitle]]
+[[!template text="a good enough definition" start="00:06:14.560" video="mainVideo" id=subtitle]]
+[[!template text="even though it does not yet include" start="00:06:15.919" video="mainVideo" id=subtitle]]
+[[!template text="Org mode syntax." start="00:06:17.919" video="mainVideo" id=subtitle]]
+[[!template text="So now we have all those" start="00:06:20.960" video="mainVideo" id=subtitle]]
+[[!template text=".texi-specific things" start="00:06:22.344" video="mainVideo" id=subtitle]]
+[[!template text="that we don't want to touch" start="00:06:23.440" video="mainVideo" id=subtitle]]
+[[!template text="displayed in gray." start="00:06:24.960" video="mainVideo" id=subtitle]]
+[[!template text="Actually, you may have noticed" start="00:06:26.100" video="mainVideo" id=subtitle]]
+[[!template text="that I cheated a bit," start="00:06:27.680" video="mainVideo" id=subtitle]]
+[[!template text="because here I added the years" start="00:06:28.479" video="mainVideo" id=subtitle]]
+[[!template text="and the Free Software Foundation name" start="00:06:30.319" video="mainVideo" id=subtitle]]
+[[!template text="to the previous regular expression" start="00:06:32.000" video="mainVideo" id=subtitle]]
+[[!template text="to show you that you can protect" start="00:06:34.000" video="mainVideo" id=subtitle]]
+[[!template text="any kind of string, really." start="00:06:35.520" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So what we have now" start="00:06:38.560" video="mainVideo" id=subtitle]]
+[[!template text="is a way to visualize the strings" start="00:06:39.520" video="mainVideo" id=subtitle]]
+[[!template text="that we do not want to touch," start="00:06:41.360" video="mainVideo" id=subtitle]]
+[[!template text="but we still have to enter all of them" start="00:06:43.440" video="mainVideo" id=subtitle]]
+[[!template text="in the translation." start="00:06:45.440" video="mainVideo" id=subtitle]]
+[[!template text="For that, we have the pop-up menu" start="00:06:46.880" video="mainVideo" id=subtitle]]
+[[!template text="that I used earlier with the glossary," start="00:06:48.319" video="mainVideo" id=subtitle]]
+[[!template text="and we also have items" start="00:06:50.400" video="mainVideo" id=subtitle]]
+[[!template text="in the edit menu" start="00:06:51.520" video="mainVideo" id=subtitle]]
+[[!template text="that come with shortcuts" start="00:06:52.400" video="mainVideo" id=subtitle]]
+[[!template text="for easy insertion of missing tags." start="00:06:53.919" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Last, but certainly not least," start="00:06:57.199" video="mainVideo" id=subtitle]]
+[[!template text="we can now validate our input." start="00:06:58.800" video="mainVideo" id=subtitle]]
+[[!template text="Here, OmegaT properly tells me" start="00:07:00.800" video="mainVideo" id=subtitle]]
+[[!template text="that I made 7 protected strings," start="00:07:02.479" video="mainVideo" id=subtitle]]
+[[!template text="I entered only 1998," start="00:07:05.759" video="mainVideo" id=subtitle]]
+[[!template text="but there were five different years," start="00:07:07.599" video="mainVideo" id=subtitle]]
+[[!template text="the copyright string," start="00:07:09.280" video="mainVideo" id=subtitle]]
+[[!template text="and the FSF name string." start="00:07:10.479" video="mainVideo" id=subtitle]]
+[[!template text="With all this almost-native" start="00:07:14.240" video="mainVideo" id=subtitle]]
+[[!template text="Texinfo support," start="00:07:15.970" video="mainVideo" id=subtitle]]
+[[!template text="we have much less things to type," start="00:07:16.960" video="mainVideo" id=subtitle]]
+[[!template text="and there is a much lower" start="00:07:18.880" video="mainVideo" id=subtitle]]
+[[!template text="potential for errors." start="00:07:19.919" video="mainVideo" id=subtitle]]
+[[!template text="But we agree, it's still a lot of work." start="00:07:21.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="What we'd like now" start="00:07:25.199" video="mainVideo" id=subtitle]]
+[[!template text="is to work with fellow translators," start="00:07:26.319" video="mainVideo" id=subtitle]]
+[[!template text="and here we need to know" start="00:07:27.840" video="mainVideo" id=subtitle]]
+[[!template text="that OmegaT is actually" start="00:07:28.720" video="mainVideo" id=subtitle]]
+[[!template text="a hidden svn/git client," start="00:07:29.840" video="mainVideo" id=subtitle]]
+[[!template text="and team projects can be hosted" start="00:07:32.080" video="mainVideo" id=subtitle]]
+[[!template text="on svn/git platforms." start="00:07:34.240" video="mainVideo" id=subtitle]]
+[[!template text="Translators don't need to" start="00:07:36.319" video="mainVideo" id=subtitle]]
+[[!template text="know anything about VCS." start="00:07:37.199" video="mainVideo" id=subtitle]]
+[[!template text="They just need access credentials," start="00:07:38.880" video="mainVideo" id=subtitle]]
+[[!template text="and OmegaT commits for them." start="00:07:40.720" video="mainVideo" id=subtitle]]
+[[!template text="This way we do not have to use" start="00:07:42.400" video="mainVideo" id=subtitle]]
+[[!template text="ugly and clumsy web-based" start="00:07:44.080" video="mainVideo" id=subtitle]]
+[[!template text="translation interfaces," start="00:07:45.759" video="mainVideo" id=subtitle]]
+[[!template text="and we can use a powerful" start="00:07:47.199" video="mainVideo" id=subtitle]]
+[[!template text="offline professional tool." start="00:07:48.800" video="mainVideo" id=subtitle]]
+[[!template text="So this is how it looks" start="00:07:51.440" video="mainVideo" id=subtitle]]
+[[!template text="when you look at the platform" start="00:07:52.479" video="mainVideo" id=subtitle]]
+[[!template text="where I hosted this project." start="00:07:54.160" video="mainVideo" id=subtitle]]
+[[!template text="The last updates are from" start="00:07:55.919" video="mainVideo" id=subtitle]]
+[[!template text="20 days and 30 seconds ago" start="00:07:57.199" video="mainVideo" id=subtitle]]
+[[!template text="when I created this slide," start="00:07:58.639" video="mainVideo" id=subtitle]]
+[[!template text="and you can see that I had a partner" start="00:08:00.720" video="mainVideo" id=subtitle]]
+[[!template text="who worked with me on the same file set." start="00:08:02.479" video="mainVideo" id=subtitle]]
+[[!template text="Although it looks like" start="00:08:04.639" video="mainVideo" id=subtitle]]
+[[!template text="we actually committed the translation" start="00:08:05.520" video="mainVideo" id=subtitle]]
+[[!template text="to the platform," start="00:08:06.879" video="mainVideo" id=subtitle]]
+[[!template text="it was not us, but OmegaT." start="00:08:07.680" video="mainVideo" id=subtitle]]
+[[!template text="OmegaT does all the heavy-duty work." start="00:08:11.039" video="mainVideo" id=subtitle]]
+[[!template text="It regularly saves to" start="00:08:13.599" video="mainVideo" id=subtitle]]
+[[!template text="and syncs from the servers." start="00:08:15.039" video="mainVideo" id=subtitle]]
+[[!template text="Translators are regularly kept updated" start="00:08:16.879" video="mainVideo" id=subtitle]]
+[[!template text="with work from fellow translators" start="00:08:18.720" video="mainVideo" id=subtitle]]
+[[!template text="and when necessary," start="00:08:20.479" video="mainVideo" id=subtitle]]
+[[!template text="OmegaT offers a simple" start="00:08:21.680" video="mainVideo" id=subtitle]]
+[[!template text="conflict-resolution dialogue." start="00:08:23.360" video="mainVideo" id=subtitle]]
+[[!template text="Translators never have to do anything" start="00:08:25.440" video="mainVideo" id=subtitle]]
+[[!template text="with svn or git ever." start="00:08:27.039" video="mainVideo" id=subtitle]]
+[[!template text="And now we can envision a future" start="00:08:29.360" video="mainVideo" id=subtitle]]
+[[!template text="not so far away" start="00:08:30.800" video="mainVideo" id=subtitle]]
+[[!template text="where the manuals will be translated" start="00:08:31.599" video="mainVideo" id=subtitle]]
+[[!template text="and eventually included" start="00:08:33.120" video="mainVideo" id=subtitle]]
+[[!template text="in the distribution," start="00:08:34.159" video="mainVideo" id=subtitle]]
+[[!template text="but that's a topic" start="00:08:35.279" video="mainVideo" id=subtitle]]
+[[!template text="for a different presentation." start="00:08:36.080" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So we've reached the end of this session." start="00:08:39.760" video="mainVideo" id=subtitle]]
+[[!template text="Thank you very much again for joining it." start="00:08:42.080" video="mainVideo" id=subtitle]]
+[[!template text="There are plenty of topics" start="00:08:44.240" video="mainVideo" id=subtitle]]
+[[!template text="I promised I would not address," start="00:08:45.600" video="mainVideo" id=subtitle]]
+[[!template text="and I think I kept my promise." start="00:08:46.880" video="mainVideo" id=subtitle]]
+[[!template text="There will be a Q&A now," start="00:08:50.000" video="mainVideo" id=subtitle]]
+[[!template text="and I also started" start="00:08:51.600" video="mainVideo" id=subtitle]]
+[[!template text="a thread about this talk" start="00:08:52.517" video="mainVideo" id=subtitle]]
+[[!template text="on Reddit last saturday." start="00:08:53.600" video="mainVideo" id=subtitle]]
+[[!template text="You can find me on emacs-help" start="00:08:55.519" video="mainVideo" id=subtitle]]
+[[!template text="and emacs-devel list as well," start="00:08:57.279" video="mainVideo" id=subtitle]]
+[[!template text="so don't hesitate to send me" start="00:08:59.200" video="mainVideo" id=subtitle]]
+[[!template text="questions and remarks." start="00:09:00.480" video="mainVideo" id=subtitle]]
+[[!template text="Thank you again, and see you around." start="00:09:02.080" video="mainVideo" id=subtitle]]
+
+# Transcript (Japanese)
+
+[[!template new="1" text="皆さん、こんにちは。" start="00:00:01.280" video="mainVideo" id="subtitle"]]
+[[!template text="エラリー ジャンクリストフといいます。" start="00:00:02.560" video="mainVideo" id="subtitle"]]
+[[!template text="今日はEmacsのマニュアルの翻訳と" start="00:00:04.400" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTについてお話しします。" start="00:00:05.680" video="mainVideo" id="subtitle"]]
+[[!template text="セッションに参加いただき、ありがとうございます。" start="00:00:08.320" video="mainVideo" id="subtitle"]]
+[[!template text="自由ソフトウェアの世界では" start="00:00:10.960" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳は本当に大きな意味を持ちます。" start="00:00:12.880" video="mainVideo" id="subtitle"]]
+[[!template text="ほとんどのLinuxディストリビューション、" start="00:00:15.040" video="mainVideo" id="subtitle"]]
+[[!template text="ソフトウェアパッケージ" start="00:00:17.119" video="mainVideo" id="subtitle"]]
+[[!template text="ウェブサイトが" start="00:00:18.720" video="mainVideo" id="subtitle"]]
+[[!template text="異なるプロセスやファイル形式を使い、" start="00:00:19.920" video="mainVideo" id="subtitle"]]
+[[!template text="多くのコミュニティによって" start="00:00:22.320" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳されていることをすでにご存知でしょう。" start="00:00:23.439" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳とローカライゼーションについては" start="00:00:24.880" video="mainVideo" id="subtitle"]]
+[[!template text="ノウハウと経験がかなり蓄積されています。" start="00:00:27.359" video="mainVideo" id="subtitle"]]
+[[!template text="しかし、Emacsコミュニティについては" start="00:00:29.599" video="mainVideo" id="subtitle"]]
+[[!template text="必ずしもそうではありません。" start="00:00:30.400" video="mainVideo" id="subtitle"]]
+[[!template text="色々と複雑で、" start="00:00:32.160" video="mainVideo" id="subtitle"]]
+[[!template text="またリソースがないため、" start="00:00:34.079" video="mainVideo" id="subtitle"]]
+[[!template text="ローカライゼーションプロセスが" start="00:00:35.200" video="mainVideo" id="subtitle"]]
+[[!template text="まだ確立していません。" start="00:00:35.920" video="mainVideo" id="subtitle"]]
+[[!template text="しかし、マニュアルの翻訳は可能ですし、" start="00:00:37.600" video="mainVideo" id="subtitle"]]
+[[!template text="マニュアルの翻訳によって、" start="00:00:39.920" video="mainVideo" id="subtitle"]]
+[[!template text="Emacsコミュニティ全体に" start="00:00:41.200" video="mainVideo" id="subtitle"]]
+[[!template text="多くの利益がもたらされるでしょう。" start="00:00:42.399" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="では、マニュアルはどうなっているのでしょうか?" start="00:00:45.600" video="mainVideo" id="subtitle"]]
+[[!template text="今日現在、182のファイルが" start="00:00:47.920" video="mainVideo" id="subtitle"]]
+[[!template text=".texi や.org 形式で作成されています。" start="00:00:51.199" video="mainVideo" id="subtitle"]]
+[[!template text="単語数は200万以上です。" start="00:00:54.160" video="mainVideo" id="subtitle"]]
+[[!template text="文字数は、" start="00:00:56.559" video="mainVideo" id="subtitle"]]
+[[!template text="5000万以上です。" start="00:00:57.360" video="mainVideo" id="subtitle"]]
+[[!template text="これはかなりの量ですし、" start="00:00:59.039" video="mainVideo" id="subtitle"]]
+[[!template text="当然ながら、一人でできる仕事ではありません。" start="00:01:00.559" video="mainVideo" id="subtitle"]]
+[[!template new="1" text=".texi ファイルを開くと、" start="00:01:04.559" video="mainVideo" id="subtitle"]]
+[[!template text="何が出てくるのでしょうか?" start="00:01:06.159" video="mainVideo" id="subtitle"]]
+[[!template text="実は、翻訳者が翻訳する必要が" start="00:01:07.760" video="mainVideo" id="subtitle"]]
+[[!template text="ないものが" start="00:01:09.439" video="mainVideo" id="subtitle"]]
+[[!template text="たくさんあるのです。" start="00:01:10.560" video="mainVideo" id="subtitle"]]
+[[!template text="ここでは、一番最後の" start="00:01:12.400" video="mainVideo" id="subtitle"]]
+[[!template text="セグメント、一番最後の" start="00:01:13.680" video="mainVideo" id="subtitle"]]
+[[!template text="文だけが翻訳する" start="00:01:15.040" video="mainVideo" id="subtitle"]]
+[[!template text="必要があります。" start="00:01:16.400" video="mainVideo" id="subtitle"]]
+[[!template text="このようなメタ的なものは" start="00:01:18.080" video="mainVideo" id="subtitle"]]
+[[!template text="すべて翻訳者の目に" start="00:01:19.360" video="mainVideo" id="subtitle"]]
+[[!template text="触れる必要はありません。" start="00:01:20.240" video="mainVideo" id="subtitle"]]
+[[!template text="このような場合はどう対処すればいいのでしょうか?" start="00:01:24.479" video="mainVideo" id="subtitle"]]
+[[!template text="ソースファイルの場合、" start="00:01:26.720" video="mainVideo" id="subtitle"]]
+[[!template text="gettext というユーティリティーがあり、" start="00:01:27.680" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳可能な文字列を" start="00:01:29.360" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳可能な形式に変換します。" start="00:01:30.640" video="mainVideo" id="subtitle"]]
+[[!template text="それが .po 形式になります。" start="00:01:32.079" video="mainVideo" id="subtitle"]]
+[[!template text="この .po 形式はどこにでもあり、" start="00:01:33.840" video="mainVideo" id="subtitle"]]
+[[!template text="自由ではないソフトウェア" start="00:01:35.520" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳業界でも広く使われています。" start="00:01:36.400" video="mainVideo" id="subtitle"]]
+[[!template text="ドキュメントについては" start="00:01:38.720" video="mainVideo" id="subtitle"]]
+[[!template text="別のツールがあります。" start="00:01:39.520" video="mainVideo" id="subtitle"]]
+[[!template text="po4a と呼ばれるもので、" start="00:01:40.720" video="mainVideo" id="subtitle"]]
+[[!template text="これは「po for all」の略です。" start="00:01:42.000" video="mainVideo" id="subtitle"]]
+[[!template text="po4aを182.texiと" start="00:01:45.119" video="mainVideo" id="subtitle"]]
+[[!template text=".org ファイルに用いると" start="00:01:46.399" video="mainVideo" id="subtitle"]]
+[[!template text="どうなるでしょうか?" start="00:01:49.200" video="mainVideo" id="subtitle"]]
+[[!template text="先ほどよりずっといいものができました。" start="00:01:50.479" video="mainVideo" id="subtitle"]]
+[[!template text="これで分節が3つができました。" start="00:01:52.640" video="mainVideo" id="subtitle"]]
+[[!template text="ご覧の通り、" start="00:01:54.799" video="mainVideo" id="subtitle"]]
+[[!template text="最初の2つの分節は" start="00:01:55.759" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳の必要がないので、" start="00:01:56.399" video="mainVideo" id="subtitle"]]
+[[!template text="完璧ではありません。" start="00:01:57.280" video="mainVideo" id="subtitle"]]
+[[!template text="ですから、まだ" start="00:01:58.880" video="mainVideo" id="subtitle"]]
+[[!template text="改善の余地があります。" start="00:01:59.520" video="mainVideo" id="subtitle"]]
+[[!template text="さて、このファイルセットを" start="00:02:02.479" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTに入れると翻訳対象単語数が" start="00:02:04.960" video="mainVideo" id="subtitle"]]
+[[!template text="かなり減ります。" start="00:02:07.119" video="mainVideo" id="subtitle"]]
+[[!template text="単語数が50%、" start="00:02:08.800" video="mainVideo" id="subtitle"]]
+[[!template text="文字数が23%減りましたが、" start="00:02:11.360" video="mainVideo" id="subtitle"]]
+[[!template text="まだかなりの仕事量です。" start="00:02:14.239" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="では、ここでOmegaTについて、" start="00:02:15.680" video="mainVideo" id="subtitle"]]
+[[!template text="そして、OmegaTがどこに役立つかを見てみましょう。" start="00:02:17.599" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTは、GPL3+ Java8+ のソフトで" start="00:02:22.239" video="mainVideo" id="subtitle"]]
+[[!template text="コンピューター支援翻訳ツールです。" start="00:02:25.440" video="mainVideo" id="subtitle"]]
+[[!template text="Computer Aided Translationと呼ばれます。" start="00:02:27.599" video="mainVideo" id="subtitle"]]
+[[!template text="CATは翻訳者にとって、" start="00:02:29.440" video="mainVideo" id="subtitle"]]
+[[!template text="プログラマーにとってのIDEのようなものです。" start="00:02:30.720" video="mainVideo" id="subtitle"]]
+[[!template text="CATは、コンピュータの力を利用して" start="00:02:33.280" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳者の仕事を自動化します。" start="00:02:35.040" video="mainVideo" id="subtitle"]]
+[[!template text="例えば、参考翻訳の検索や" start="00:02:36.480" video="mainVideo" id="subtitle"]]
+[[!template text="ファジーマッチ、自動入力" start="00:02:38.400" video="mainVideo" id="subtitle"]]
+[[!template text="などのようなものです。" start="00:02:40.800" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTは最近のものありません。" start="00:02:44.080" video="mainVideo" id="subtitle"]]
+[[!template text="来年で20年になり、" start="00:02:46.319" video="mainVideo" id="subtitle"]]
+[[!template text="現時点では" start="00:02:48.319" video="mainVideo" id="subtitle"]]
+[[!template text="SourceForgeのサイトから" start="00:02:48.959" video="mainVideo" id="subtitle"]]
+[[!template text="150万件前後のダウンロードがあります。" start="00:02:51.440" video="mainVideo" id="subtitle"]]
+[[!template text="これにはローカライズや" start="00:02:53.200" video="mainVideo" id="subtitle"]]
+[[!template text="マニュアルに使用されるファイルが" start="00:02:54.080" video="mainVideo" id="subtitle"]]
+[[!template text="多少含まれるので、" start="00:02:55.040" video="mainVideo" id="subtitle"]]
+[[!template text="それほど意味はありませんが、" start="00:02:56.480" video="mainVideo" id="subtitle"]]
+[[!template text="それでもかなり大きな数字です。" start="00:02:57.920" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTは、多くのLinux" start="00:02:59.599" video="mainVideo" id="subtitle"]]
+[[!template text="ディストリビューションに含まれますが、" start="00:03:00.720" video="mainVideo" id="subtitle"]]
+[[!template text="ここで見られるように" start="00:03:02.400" video="mainVideo" id="subtitle"]]
+[[!template text="ほとんどがWindowsでダウンロードされています。" start="00:03:03.680" video="mainVideo" id="subtitle"]]
+[[!template text="なぜなら、翻訳者は" start="00:03:05.920" video="mainVideo" id="subtitle"]]
+[[!template text="ほとんどWindows上で作業しているからです。" start="00:03:06.800" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTにもかっこいいロゴと" start="00:03:09.680" video="mainVideo" id="subtitle"]]
+[[!template text="かっこいいサイトがあります。" start="00:03:11.120" video="mainVideo" id="subtitle"]]
+[[!template text="ぜひ一度ご覧ください。" start="00:03:12.080" video="mainVideo" id="subtitle"]]
+[[!template text="サイトはomegat.orgで、" start="00:03:13.920" video="mainVideo" id="subtitle"]]
+[[!template text="すべての必要な情報が見られます。" start="00:03:16.159" video="mainVideo" id="subtitle"]]
+[[!template text="また、Javaの有無の関わらず、" start="00:03:17.280" video="mainVideo" id="subtitle"]]
+[[!template text="Linuxバージョンもダウンロードできます。" start="00:03:19.040" video="mainVideo" id="subtitle"]]
+[[!template text="では、OmegaTによって何が変わるのでしょうか?" start="00:03:22.080" video="mainVideo" id="subtitle"]]
+[[!template text="プロの翻訳者が提供しなければいけないのは、" start="00:03:24.799" video="mainVideo" id="subtitle"]]
+[[!template text="速く、一貫性があり" start="00:03:26.560" video="mainVideo" id="subtitle"]]
+[[!template text="品質の高い翻訳です。" start="00:03:27.680" video="mainVideo" id="subtitle"]]
+[[!template text="それを実現するためには、" start="00:03:29.519" video="mainVideo" id="subtitle"]]
+[[!template text="適切なツールが必要です。" start="00:03:30.720" video="mainVideo" id="subtitle"]]
+[[!template text="po-modeがツールボックスの一部であればいいのですが、" start="00:03:32.159" video="mainVideo" id="subtitle"]]
+[[!template text="そうはなっていません。" start="00:03:34.239" video="mainVideo" id="subtitle"]]
+[[!template text="残念ながら。" start="00:03:35.120" video="mainVideo" id="subtitle"]]
+[[!template text="ですから、そのようなCATツールを使わなければなりません。" start="00:03:36.560" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="このデモのために作成したプロジェクトを" start="00:03:39.760" video="mainVideo" id="subtitle"]]
+[[!template text="開くと、OmegaTがどのように表示されるか" start="00:03:41.440" video="mainVideo" id="subtitle"]]
+[[!template text="お見せしましょう。" start="00:03:43.120" video="mainVideo" id="subtitle"]]
+[[!template text="表示はかなりややこしいですが、" start="00:03:45.200" video="mainVideo" id="subtitle"]]
+[[!template text="実際には、必要に応じてすべての" start="00:03:46.640" video="mainVideo" id="subtitle"]]
+[[!template text="ウィンドウを変更できます。" start="00:03:47.760" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTがどんなものなのか" start="00:03:49.519" video="mainVideo" id="subtitle"]]
+[[!template text="理解していただくために" start="00:03:50.400" video="mainVideo" id="subtitle"]]
+[[!template text="一度にすべてをお見せしたいと思います。" start="00:03:51.120" video="mainVideo" id="subtitle"]]
+[[!template text="さまざまな色やウィンドウがあり、" start="00:03:53.680" video="mainVideo" id="subtitle"]]
+[[!template text="それらスペースには" start="00:03:55.200" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳者を支援する" start="00:03:55.920" video="mainVideo" id="subtitle"]]
+[[!template text="さまざまな機能がありますが、" start="00:03:57.120" video="mainVideo" id="subtitle"]]
+[[!template text="皆さんにはあまり" start="00:03:58.560" video="mainVideo" id="subtitle"]]
+[[!template text="馴染みがないかもしれません。" start="00:03:59.360" video="mainVideo" id="subtitle"]]
+[[!template text="今からそのインターフェースを" start="00:04:02.879" video="mainVideo" id="subtitle"]]
+[[!template text="ご紹介します。" start="00:04:04.080" video="mainVideo" id="subtitle"]]
+[[!template text="まずは、エディターですね。" start="00:04:05.680" video="mainVideo" id="subtitle"]]
+[[!template text="エディターは2つの部分から成ります。" start="00:04:07.519" video="mainVideo" id="subtitle"]]
+[[!template text="番号に関連づけられた" start="00:04:09.439" video="mainVideo" id="subtitle"]]
+[[!template text="現在の分節と、" start="00:04:10.480" video="mainVideo" id="subtitle"]]
+[[!template text="もうひとつは上下にあるすべての" start="00:04:12.319" video="mainVideo" id="subtitle"]]
+[[!template text="分節です。" start="00:04:13.519" video="mainVideo" id="subtitle"]]
+[[!template text="ウィンドウの一番上には" start="00:04:15.840" video="mainVideo" id="subtitle"]]
+[[!template text=".poファイルにあった最初の3つの分節が" start="00:04:16.720" video="mainVideo" id="subtitle"]]
+[[!template text="表示されています。" start="00:04:18.720" video="mainVideo" id="subtitle"]]
+[[!template text="ここの最後の4つ目の分節には" start="00:04:20.799" video="mainVideo" id="subtitle"]]
+[[!template text="ファジーマッチが自動挿入されています。" start="00:04:22.880" video="mainVideo" id="subtitle"]]
+[[!template text="このようなレガシー翻訳は" start="00:04:28.720" video="mainVideo" id="subtitle"]]
+[[!template text="「翻訳メモリ」と呼ばれます。" start="00:04:30.880" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTがこれを自動挿入したのは、" start="00:04:32.720" video="mainVideo" id="subtitle"]]
+[[!template text="私がそうするように設定したからです。" start="00:04:35.280" video="mainVideo" id="subtitle"]]
+[[!template text="また、私自身のセキュリティのために、" start="00:04:37.120" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳の検証のために" start="00:04:38.560" video="mainVideo" id="subtitle"]]
+[[!template text="削除しなければならない規定の" start="00:04:40.639" video="mainVideo" id="subtitle"]]
+[[!template text="[fuzzy] がついています。" start="00:04:41.919" video="mainVideo" id="subtitle"]]
+[[!template text="次の機能は、用語集機能です。" start="00:04:44.880" video="mainVideo" id="subtitle"]]
+[[!template text="今回のプロジェクトには" start="00:04:47.919" video="mainVideo" id="subtitle"]]
+[[!template text="たくさんの用語集データがあります。" start="00:04:48.479" video="mainVideo" id="subtitle"]]
+[[!template text="関連のあるものもあれば、そうでないものもあります。" start="00:04:50.160" video="mainVideo" id="subtitle"]]
+[[!template text="今翻訳している分節では" start="00:04:52.560" video="mainVideo" id="subtitle"]]
+[[!template text="下線が引かれた項目が" start="00:04:53.919" video="mainVideo" id="subtitle"]]
+[[!template text="あります。" start="00:04:55.199" video="mainVideo" id="subtitle"]]
+[[!template text="右側のポップアップメニューでは" start="00:04:57.520" video="mainVideo" id="subtitle"]]
+[[!template text="入力中に用語を入れることができます。" start="00:04:59.040" video="mainVideo" id="subtitle"]]
+[[!template text="これは自動挿入システムのようなもので、" start="00:05:02.240" video="mainVideo" id="subtitle"]]
+[[!template text="履歴予測や定型文などと" start="00:05:04.639" video="mainVideo" id="subtitle"]]
+[[!template text="いったような入力補完に対応しています。" start="00:05:07.039" video="mainVideo" id="subtitle"]]
+[[!template text="右側の部分には、" start="00:05:14.479" video="mainVideo" id="subtitle"]]
+[[!template text=".poと.texiのファイルから" start="00:05:15.440" video="mainVideo" id="subtitle"]]
+[[!template text="直接得られた" start="00:05:17.120" video="mainVideo" id="subtitle"]]
+[[!template text="参照情報があります。" start="00:05:18.240" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="また、パートナーの翻訳者と" start="00:05:21.440" video="mainVideo" id="subtitle"]]
+[[!template text="共有できるメモもあり、" start="00:05:23.440" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳完了までに" start="00:05:25.759" video="mainVideo" id="subtitle"]]
+[[!template text="あと143,000分節あることを示す" start="00:05:28.080" video="mainVideo" id="subtitle"]]
+[[!template text="数字も表示されています。" start="00:05:31.199" video="mainVideo" id="subtitle"]]
+[[!template text="しかし、どうしても" start="00:05:35.280" video="mainVideo" id="subtitle"]]
+[[!template text="入力したくない文字列がたくさんあります。" start="00:05:37.120" video="mainVideo" id="subtitle"]]
+[[!template text="例えば、これらの文字列は" start="00:05:40.000" video="mainVideo" id="subtitle"]]
+[[!template text="典型的な .texi の文字列で、" start="00:05:42.160" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳者が入力する" start="00:05:43.840" video="mainVideo" id="subtitle"]]
+[[!template text="必要はありません。" start="00:05:45.039" video="mainVideo" id="subtitle"]]
+[[!template text="これについて" start="00:05:46.479" video="mainVideo" id="subtitle"]]
+[[!template text="どうにかしなければなりません。" start="00:05:47.360" video="mainVideo" id="subtitle"]]
+[[!template text="そのためには、正規表現を使い" start="00:05:50.400" video="mainVideo" id="subtitle"]]
+[[!template text="保護された文字列を作成し、" start="00:05:51.600" video="mainVideo" id="subtitle"]]
+[[!template text="ソース分節では" start="00:05:52.479" video="mainVideo" id="subtitle"]]
+[[!template text="文字列をすぐに視覚化し、" start="00:05:54.400" video="mainVideo" id="subtitle"]]
+[[!template text="ターゲット分節で" start="00:05:56.800" video="mainVideo" id="subtitle"]]
+[[!template text="半自動的に入力し、" start="00:05:59.120" video="mainVideo" id="subtitle"]]
+[[!template text="整合性を" start="00:06:00.479" video="mainVideo" id="subtitle"]]
+[[!template text="チェックできるようにしましょう。" start="00:06:01.680" video="mainVideo" id="subtitle"]]
+[[!template text="処理したい文字列を定義するのに" start="00:06:04.479" video="mainVideo" id="subtitle"]]
+[[!template text="考えた正規表現は" start="00:06:06.479" video="mainVideo" id="subtitle"]]
+[[!template text="このようなものです。" start="00:06:08.160" video="mainVideo" id="subtitle"]]
+[[!template text="正規表現のプロではないので、" start="00:06:09.600" video="mainVideo" id="subtitle"]]
+[[!template text="皆さんからのご指摘もあると思います。" start="00:06:11.120" video="mainVideo" id="subtitle"]]
+[[!template text="しかし、この表現は" start="00:06:13.360" video="mainVideo" id="subtitle"]]
+[[!template text="Orgモードの構文を" start="00:06:14.560" video="mainVideo" id="subtitle"]]
+[[!template text="まだ含んでいないにもかかわらず" start="00:06:15.919" video="mainVideo" id="subtitle"]]
+[[!template text="十分な定義になっています。" start="00:06:17.919" video="mainVideo" id="subtitle"]]
+[[!template text="これで、触ってはいけない" start="00:06:20.960" video="mainVideo" id="subtitle"]]
+[[!template text=".texi 特有のものが" start="00:06:22.344" video="mainVideo" id="subtitle"]]
+[[!template text="すべてグレーで" start="00:06:23.440" video="mainVideo" id="subtitle"]]
+[[!template text="表示されるようになりました。" start="00:06:24.960" video="mainVideo" id="subtitle"]]
+[[!template text="実は、お気づきかもしれませんが" start="00:06:26.100" video="mainVideo" id="subtitle"]]
+[[!template text="少しズルをしました。" start="00:06:27.680" video="mainVideo" id="subtitle"]]
+[[!template text="先ほどの正規表現に「年」と" start="00:06:28.479" video="mainVideo" id="subtitle"]]
+[[!template text="「Free Software Foundation」の名前を追加しました。" start="00:06:30.319" video="mainVideo" id="subtitle"]]
+[[!template text="なぜなら、どんな種類の文字列でも" start="00:06:32.000" video="mainVideo" id="subtitle"]]
+[[!template text="保護できることを" start="00:06:34.000" video="mainVideo" id="subtitle"]]
+[[!template text="示したかったからです。" start="00:06:35.520" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="これで、" start="00:06:38.560" video="mainVideo" id="subtitle"]]
+[[!template text="触れたくない文字列を" start="00:06:39.520" video="mainVideo" id="subtitle"]]
+[[!template text="可視化することができましたが、" start="00:06:41.360" video="mainVideo" id="subtitle"]]
+[[!template text="それでもすべての文字列を翻訳に" start="00:06:43.440" video="mainVideo" id="subtitle"]]
+[[!template text="入力しなければなりません。" start="00:06:45.440" video="mainVideo" id="subtitle"]]
+[[!template text="そのために、先ほどの用語集で使った" start="00:06:46.880" video="mainVideo" id="subtitle"]]
+[[!template text="ポップアップメニューがあれば、" start="00:06:48.319" video="mainVideo" id="subtitle"]]
+[[!template text="編集メニューの中にも" start="00:06:50.400" video="mainVideo" id="subtitle"]]
+[[!template text="不足しているタグを" start="00:06:51.520" video="mainVideo" id="subtitle"]]
+[[!template text="簡単に挿入するための" start="00:06:52.400" video="mainVideo" id="subtitle"]]
+[[!template text="ショートカットも用意されています。" start="00:06:53.919" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="最後に忘れてはならないのが" start="00:06:57.199" video="mainVideo" id="subtitle"]]
+[[!template text="入力の検証が可能なことです。" start="00:06:58.800" video="mainVideo" id="subtitle"]]
+[[!template text="ここで、OmegaTは7つの保護された文字列を" start="00:07:00.800" video="mainVideo" id="subtitle"]]
+[[!template text="見逃したことをきちんと見せてくれます。" start="00:07:02.479" video="mainVideo" id="subtitle"]]
+[[!template text="私は1998年だけを入力しましたが、" start="00:07:05.759" video="mainVideo" id="subtitle"]]
+[[!template text="5つの異なる年があり、" start="00:07:07.599" video="mainVideo" id="subtitle"]]
+[[!template text="著作権の文字列と" start="00:07:09.280" video="mainVideo" id="subtitle"]]
+[[!template text="FSF名の文字列がありました。" start="00:07:10.479" video="mainVideo" id="subtitle"]]
+[[!template text="この極めてネイティブに近い" start="00:07:14.240" video="mainVideo" id="subtitle"]]
+[[!template text="Texinfo対応により、" start="00:07:15.970" video="mainVideo" id="subtitle"]]
+[[!template text="入力するものがずっと少なくなり、" start="00:07:16.960" video="mainVideo" id="subtitle"]]
+[[!template text="エラーの可能性も" start="00:07:18.880" video="mainVideo" id="subtitle"]]
+[[!template text="ずっと低くなりました。" start="00:07:19.919" video="mainVideo" id="subtitle"]]
+[[!template text="とはいえ、まだまだ大変な作業であることは間違いありません。" start="00:07:21.120" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="今、私たちが望んでいるのは、" start="00:07:25.199" video="mainVideo" id="subtitle"]]
+[[!template text="仲間の翻訳者と一緒に仕事をすることです。" start="00:07:26.319" video="mainVideo" id="subtitle"]]
+[[!template text="ここでわからないければならないのは、" start="00:07:27.840" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTが実際に隠れ" start="00:07:28.720" video="mainVideo" id="subtitle"]]
+[[!template text="svn/gitクライアントであり、" start="00:07:29.840" video="mainVideo" id="subtitle"]]
+[[!template text="チームプロジェクトがsvn/gitプラットフォームで" start="00:07:32.080" video="mainVideo" id="subtitle"]]
+[[!template text="ホスト可能であることです。" start="00:07:34.240" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳者は、VCSについて" start="00:07:36.319" video="mainVideo" id="subtitle"]]
+[[!template text="何も知る必要はありません。" start="00:07:37.199" video="mainVideo" id="subtitle"]]
+[[!template text="ただ、アクセス認証を必要とし、" start="00:07:38.880" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTは翻訳者の代わりにコミットします。" start="00:07:40.720" video="mainVideo" id="subtitle"]]
+[[!template text="このようにして、" start="00:07:42.400" video="mainVideo" id="subtitle"]]
+[[!template text="醜くて不十分なウェブベースの" start="00:07:44.080" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳システムを使う必要なく、" start="00:07:45.759" video="mainVideo" id="subtitle"]]
+[[!template text="強力なオフラインのプロフェッショナルツールを" start="00:07:47.199" video="mainVideo" id="subtitle"]]
+[[!template text="使うことができるのです。" start="00:07:48.800" video="mainVideo" id="subtitle"]]
+[[!template text="この翻訳プロジェクトを" start="00:07:51.440" video="mainVideo" id="subtitle"]]
+[[!template text="ホストしているプラットフォームを見ると、" start="00:07:52.479" video="mainVideo" id="subtitle"]]
+[[!template text="このように見えます。" start="00:07:54.160" video="mainVideo" id="subtitle"]]
+[[!template text="最後の更新は、このスライドを作成した" start="00:07:55.919" video="mainVideo" id="subtitle"]]
+[[!template text="20日と30秒前のもので、" start="00:07:57.199" video="mainVideo" id="subtitle"]]
+[[!template text="同じファイルセットで" start="00:07:58.639" video="mainVideo" id="subtitle"]]
+[[!template text="一緒に作業したパートナーが" start="00:08:00.720" video="mainVideo" id="subtitle"]]
+[[!template text="いたことがわかります。" start="00:08:02.479" video="mainVideo" id="subtitle"]]
+[[!template text="私たちは翻訳をプラットフォームに" start="00:08:04.639" video="mainVideo" id="subtitle"]]
+[[!template text="コミットしたように見えますが、" start="00:08:05.520" video="mainVideo" id="subtitle"]]
+[[!template text="それは私たちでなく、" start="00:08:06.879" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTでした。" start="00:08:07.680" video="mainVideo" id="subtitle"]]
+[[!template text="すべての面倒臭い仕事はOmegaTが行います。" start="00:08:11.039" video="mainVideo" id="subtitle"]]
+[[!template text="定期的にサーバーに保存し、" start="00:08:13.599" video="mainVideo" id="subtitle"]]
+[[!template text="サーバーから同期します。" start="00:08:15.039" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳者は、仲間の翻訳した内容を" start="00:08:16.879" video="mainVideo" id="subtitle"]]
+[[!template text="定期的に得られます。" start="00:08:18.720" video="mainVideo" id="subtitle"]]
+[[!template text="そして必要に応じて" start="00:08:20.479" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaTは、簡単な" start="00:08:21.680" video="mainVideo" id="subtitle"]]
+[[!template text="コンフリクト解決のためのウインドーを表示します。" start="00:08:23.360" video="mainVideo" id="subtitle"]]
+[[!template text="翻訳者は、svnやgitを使って" start="00:08:25.440" video="mainVideo" id="subtitle"]]
+[[!template text="何かをする必要はありません。" start="00:08:27.039" video="mainVideo" id="subtitle"]]
+[[!template text="そして今、私たちは、" start="00:08:29.360" video="mainVideo" id="subtitle"]]
+[[!template text="マニュアルが翻訳され、" start="00:08:30.800" video="mainVideo" id="subtitle"]]
+[[!template text="最終的にはEmacsに含まれるという" start="00:08:31.599" video="mainVideo" id="subtitle"]]
+[[!template text="そう遠くはない未来を" start="00:08:33.120" video="mainVideo" id="subtitle"]]
+[[!template text="思い描くことができますが、" start="00:08:34.159" video="mainVideo" id="subtitle"]]
+[[!template text="それはこのプレゼンテーションとは" start="00:08:35.279" video="mainVideo" id="subtitle"]]
+[[!template text="別の話になります。" start="00:08:36.080" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="というわけで、セッションの終わりになりました。" start="00:08:39.760" video="mainVideo" id="subtitle"]]
+[[!template text="ご参加いただいた皆様、本当にありがとうございました。" start="00:08:42.080" video="mainVideo" id="subtitle"]]
+[[!template text="たくさんのトピックについて" start="00:08:44.240" video="mainVideo" id="subtitle"]]
+[[!template text="触れないと約束しましたが、" start="00:08:45.600" video="mainVideo" id="subtitle"]]
+[[!template text="約束は守れたのではないでしょうか。" start="00:08:46.880" video="mainVideo" id="subtitle"]]
+[[!template text="Q&Aもありますが、" start="00:08:50.000" video="mainVideo" id="subtitle"]]
+[[!template text="実は、先週の土曜日に" start="00:08:51.600" video="mainVideo" id="subtitle"]]
+[[!template text="Redditでこのセッションに関するスレッドも" start="00:08:52.517" video="mainVideo" id="subtitle"]]
+[[!template text="立ち上げました。" start="00:08:53.600" video="mainVideo" id="subtitle"]]
+[[!template text="emacs-helpやemacs-develのメーリングリストでも" start="00:08:55.519" video="mainVideo" id="subtitle"]]
+[[!template text="私の名前を見つけることができますので、" start="00:08:57.279" video="mainVideo" id="subtitle"]]
+[[!template text="ご質問やご意見がありましたら、" start="00:08:59.200" video="mainVideo" id="subtitle"]]
+[[!template text="遠慮なくお寄せください。" start="00:09:00.480" video="mainVideo" id="subtitle"]]
+[[!template text="それでは、またお会いしましょう。" start="00:09:02.080" video="mainVideo" id="subtitle"]]
+
+# Transcript (French)
+
+[[!template new="1" text="Bonjour tout le monde." start="00:00:01.280" video="mainVideo" id="subtitle"]]
+[[!template text="Je m’appelle Jean-Christophe Helary," start="00:00:02.560" video="mainVideo" id="subtitle"]]
+[[!template text="et aujourd’hui je vais vous parler" start="00:00:04.400" video="mainVideo" id="subtitle"]]
+[[!template text="de la traduction des manuels Emacs avec OmegaT." start="00:00:05.680" video="mainVideo" id="subtitle"]]
+[[!template text="Merci de vous joindre à moi aujourd’hui." start="00:00:08.320" video="mainVideo" id="subtitle"]]
+[[!template text="La traduction dans le monde du logiciel libre" start="00:00:10.960" video="mainVideo" id="subtitle"]]
+[[!template text="est un phénomène très important. Vous savez déjà" start="00:00:12.880" video="mainVideo" id="subtitle"]]
+[[!template text="que la plupart des distributions Linux," start="00:00:15.040" video="mainVideo" id="subtitle"]]
+[[!template text="la plupart des logiciels," start="00:00:17.119" video="mainVideo" id="subtitle"]]
+[[!template text="la plupart des sites web" start="00:00:18.720" video="mainVideo" id="subtitle"]]
+[[!template text="sont traduits par des dizaines de communautés" start="00:00:19.920" video="mainVideo" id="subtitle"]]
+[[!template text="à l’aide de processus" start="00:00:22.320" video="mainVideo" id="subtitle"]]
+[[!template text="et de formats de fichiers tous différents." start="00:00:23.439" video="mainVideo" id="subtitle"]]
+[[!template text="La traduction et la localisation" start="00:00:24.880" video="mainVideo" id="subtitle"]]
+[[!template text="sont des choses que nous connaissons bien." start="00:00:27.359" video="mainVideo" id="subtitle"]]
+[[!template text="C’est un peu différent" start="00:00:29.599" video="mainVideo" id="subtitle"]]
+[[!template text="pour la communauté Emacs." start="00:00:30.400" video="mainVideo" id="subtitle"]]
+[[!template text="Nous n’avons pas de processus de localisation" start="00:00:32.160" video="mainVideo" id="subtitle"]]
+[[!template text="parce que c’est encore trop complexe" start="00:00:34.079" video="mainVideo" id="subtitle"]]
+[[!template text="et parce que nous n’avons pas" start="00:00:35.200" video="mainVideo" id="subtitle"]]
+[[!template text="encore les ressources nécessaires." start="00:00:35.920" video="mainVideo" id="subtitle"]]
+[[!template text="Néanmoins, nous pourrions traduire les manuels," start="00:00:37.600" video="mainVideo" id="subtitle"]]
+[[!template text="et traduire les manuels" start="00:00:39.920" video="mainVideo" id="subtitle"]]
+[[!template text="apporterait probablement beaucoup" start="00:00:41.200" video="mainVideo" id="subtitle"]]
+[[!template text="à la communauté Emacs dans son ensemble." start="00:00:42.399" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="Quel est donc l’état des manuels ?" start="00:00:45.600" video="mainVideo" id="subtitle"]]
+[[!template text="À ce jour, nous avons 182 fichiers" start="00:00:47.920" video="mainVideo" id="subtitle"]]
+[[!template text="aux formats .texi et .org." start="00:00:51.199" video="mainVideo" id="subtitle"]]
+[[!template text="Nous avons plus de 2 millions de mots." start="00:00:54.160" video="mainVideo" id="subtitle"]]
+[[!template text="Nous avons plus de" start="00:00:56.559" video="mainVideo" id="subtitle"]]
+[[!template text="50 millions de caractères." start="00:00:57.360" video="mainVideo" id="subtitle"]]
+[[!template text="C’est donc beaucoup de travail," start="00:00:59.039" video="mainVideo" id="subtitle"]]
+[[!template text="et il est clair qu’une personne ne suffira pas." start="00:01:00.559" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="Quand on ouvre un fichier .texi" start="00:01:04.559" video="mainVideo" id="subtitle"]]
+[[!template text="qu’est-ce qu’on y trouve ?" start="00:01:06.159" video="mainVideo" id="subtitle"]]
+[[!template text="Eh bien, beaucoup de choses en fait" start="00:01:07.760" video="mainVideo" id="subtitle"]]
+[[!template text="que les traducteurs" start="00:01:09.439" video="mainVideo" id="subtitle"]]
+[[!template text="ne devraient pas avoir à traduire." start="00:01:10.560" video="mainVideo" id="subtitle"]]
+[[!template text="Ici, on peut voir que seul" start="00:01:12.400" video="mainVideo" id="subtitle"]]
+[[!template text="le tout dernier segment," start="00:01:13.680" video="mainVideo" id="subtitle"]]
+[[!template text="la toute dernière phrase" start="00:01:15.040" video="mainVideo" id="subtitle"]]
+[[!template text="doit être traduite." start="00:01:16.400" video="mainVideo" id="subtitle"]]
+[[!template text="Toutes ces choses « méta »" start="00:01:18.080" video="mainVideo" id="subtitle"]]
+[[!template text="ne devraient pas être sous" start="00:01:19.360" video="mainVideo" id="subtitle"]]
+[[!template text="les yeux du traducteur." start="00:01:20.240" video="mainVideo" id="subtitle"]]
+[[!template text="Comment faire face à cette situation ?" start="00:01:24.479" video="mainVideo" id="subtitle"]]
+[[!template text="Pour les fichiers de code, nous avons" start="00:01:26.720" video="mainVideo" id="subtitle"]]
+[[!template text="l’utilitaire gettext qui convertit" start="00:01:27.680" video="mainVideo" id="subtitle"]]
+[[!template text="toutes les chaînes de traduisibles" start="00:01:29.360" video="mainVideo" id="subtitle"]]
+[[!template text="dans un format traduisible," start="00:01:30.640" video="mainVideo" id="subtitle"]]
+[[!template text="qui est le format .po." start="00:01:32.079" video="mainVideo" id="subtitle"]]
+[[!template text="Ce format .po est omniprésent," start="00:01:33.840" video="mainVideo" id="subtitle"]]
+[[!template text="même dans l’industrie de la traduction" start="00:01:35.520" video="mainVideo" id="subtitle"]]
+[[!template text="des logiciels non-libres." start="00:01:36.400" video="mainVideo" id="subtitle"]]
+[[!template text="Pour la documentation," start="00:01:38.720" video="mainVideo" id="subtitle"]]
+[[!template text="nous avons quelque chose de différent" start="00:01:39.520" video="mainVideo" id="subtitle"]]
+[[!template text="qui s’appelle po4a," start="00:01:40.720" video="mainVideo" id="subtitle"]]
+[[!template text="l’abréviation de « po for all » (po pour tous)." start="00:01:42.000" video="mainVideo" id="subtitle"]]
+[[!template text="Quand on utilise po4a" start="00:01:45.119" video="mainVideo" id="subtitle"]]
+[[!template text="sur ces 182 fichiers .texi et .org," start="00:01:46.399" video="mainVideo" id="subtitle"]]
+[[!template text="qu’est-ce qu’on obtient ?" start="00:01:49.200" video="mainVideo" id="subtitle"]]
+[[!template text="On obtient quelque chose de bien mieux." start="00:01:50.479" video="mainVideo" id="subtitle"]]
+[[!template text="Maintenant on a trois segments." start="00:01:52.640" video="mainVideo" id="subtitle"]]
+[[!template text="Ce n’est pas parfait, car," start="00:01:54.799" video="mainVideo" id="subtitle"]]
+[[!template text="comme vous pouvez le voir," start="00:01:55.759" video="mainVideo" id="subtitle"]]
+[[!template text="les deux premiers segments" start="00:01:56.399" video="mainVideo" id="subtitle"]]
+[[!template text="ne sont pas à traduire." start="00:01:57.280" video="mainVideo" id="subtitle"]]
+[[!template text="Donc on peut encore" start="00:01:58.880" video="mainVideo" id="subtitle"]]
+[[!template text="améliorer les choses." start="00:01:59.520" video="mainVideo" id="subtitle"]]
+[[!template text="Quand on met ces fichiers" start="00:02:02.479" video="mainVideo" id="subtitle"]]
+[[!template text="dans OmegaT, on réduit considérablement" start="00:02:04.960" video="mainVideo" id="subtitle"]]
+[[!template text="le nombre total de mots." start="00:02:07.119" video="mainVideo" id="subtitle"]]
+[[!template text="On a maintenant 50 % de mots en moins" start="00:02:08.800" video="mainVideo" id="subtitle"]]
+[[!template text="et 23 % de caractères en moins à taper," start="00:02:11.360" video="mainVideo" id="subtitle"]]
+[[!template text="mais c’est toujours encore beaucoup de travail." start="00:02:14.239" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="Je vais donc vous parler d’OmegaT maintenant" start="00:02:15.680" video="mainVideo" id="subtitle"]]
+[[!template text="pour voir où il peut nous être utile." start="00:02:17.599" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaT est un logiciel GPL3+, Java8+." start="00:02:22.239" video="mainVideo" id="subtitle"]]
+[[!template text="C’est un outil de Traduction Assistée par Ordinateur." start="00:02:25.440" video="mainVideo" id="subtitle"]]
+[[!template text="On abrège ça TAO." start="00:02:27.599" video="mainVideo" id="subtitle"]]
+[[!template text="La TAO est aux traducteurs" start="00:02:29.440" video="mainVideo" id="subtitle"]]
+[[!template text="ce que les EDI sont aux programmeurs." start="00:02:30.720" video="mainVideo" id="subtitle"]]
+[[!template text="Elle exploite la puissance de l’ordinateur" start="00:02:33.280" video="mainVideo" id="subtitle"]]
+[[!template text="pour automatiser notre travail," start="00:02:35.040" video="mainVideo" id="subtitle"]]
+[[!template text="qui consiste en recherche de références," start="00:02:36.480" video="mainVideo" id="subtitle"]]
+[[!template text="de correspondances, insertions automatiques," start="00:02:38.400" video="mainVideo" id="subtitle"]]
+[[!template text="et d’autres choses comme ça." start="00:02:40.800" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaT n’est plus si jeune." start="00:02:44.080" video="mainVideo" id="subtitle"]]
+[[!template text="Il aura 20 ans l’année prochaine," start="00:02:46.319" video="mainVideo" id="subtitle"]]
+[[!template text="et à ce stade" start="00:02:48.319" video="mainVideo" id="subtitle"]]
+[[!template text="nous avons environ 1,5 million de téléchargements" start="00:02:48.959" video="mainVideo" id="subtitle"]]
+[[!template text="sur le site SourceForge" start="00:02:51.440" video="mainVideo" id="subtitle"]]
+[[!template text="ce qui ne veut pas dire grand-chose" start="00:02:53.200" video="mainVideo" id="subtitle"]]
+[[!template text="parce que cela inclut" start="00:02:54.080" video="mainVideo" id="subtitle"]]
+[[!template text="les fichiers utilisés pour la localisation" start="00:02:55.040" video="mainVideo" id="subtitle"]]
+[[!template text="les manuels, mais quand même" start="00:02:56.480" video="mainVideo" id="subtitle"]]
+[[!template text="c’est un chiffre quand même important." start="00:02:57.920" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaT est inclus dans" start="00:02:59.599" video="mainVideo" id="subtitle"]]
+[[!template text="beaucoup de distributions Linux," start="00:03:00.720" video="mainVideo" id="subtitle"]]
+[[!template text="mais comme vous pouvez le voir ici," start="00:03:02.400" video="mainVideo" id="subtitle"]]
+[[!template text="il est surtout téléchargé sur Windows" start="00:03:03.680" video="mainVideo" id="subtitle"]]
+[[!template text="car les traducteurs" start="00:03:05.920" video="mainVideo" id="subtitle"]]
+[[!template text="travaillent principalement sous Windows." start="00:03:06.800" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaT a un logo sympa" start="00:03:09.680" video="mainVideo" id="subtitle"]]
+[[!template text="et un site sympa aussi," start="00:03:11.120" video="mainVideo" id="subtitle"]]
+[[!template text="et je vous invite vraiment à le visiter." start="00:03:12.080" video="mainVideo" id="subtitle"]]
+[[!template text="L’URL est omegat.org et vous y trouverez" start="00:03:13.920" video="mainVideo" id="subtitle"]]
+[[!template text="toutes les informations dont vous avez besoin" start="00:03:16.159" video="mainVideo" id="subtitle"]]
+[[!template text="ainsi que les téléchargements des versions Linux," start="00:03:17.280" video="mainVideo" id="subtitle"]]
+[[!template text="avec ou sans Java inclus." start="00:03:19.040" video="mainVideo" id="subtitle"]]
+[[!template text="Alors, qu’est-ce qu’OmegaT nous apporte ?" start="00:03:22.080" video="mainVideo" id="subtitle"]]
+[[!template text="Les traducteurs professionnels doivent fournir" start="00:03:24.799" video="mainVideo" id="subtitle"]]
+[[!template text="des traductions rapides, cohérentes," start="00:03:26.560" video="mainVideo" id="subtitle"]]
+[[!template text="et de qualité," start="00:03:27.680" video="mainVideo" id="subtitle"]]
+[[!template text="et nous devons disposer d’outils appropriés" start="00:03:29.519" video="mainVideo" id="subtitle"]]
+[[!template text="pour y parvenir." start="00:03:30.720" video="mainVideo" id="subtitle"]]
+[[!template text="J’aimerais que po-mode fasse partie de nos outils," start="00:03:32.159" video="mainVideo" id="subtitle"]]
+[[!template text="mais ce n’est pas le cas," start="00:03:34.239" video="mainVideo" id="subtitle"]]
+[[!template text="et c’est bien dommage." start="00:03:35.120" video="mainVideo" id="subtitle"]]
+[[!template text="Nous devons donc utiliser ces outils de TAO." start="00:03:36.560" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="Laissez-moi vous montrer à quoi ressemble OmegaT" start="00:03:39.760" video="mainVideo" id="subtitle"]]
+[[!template text="quand j’ouvre ce projet que j’ai créé" start="00:03:41.440" video="mainVideo" id="subtitle"]]
+[[!template text="pour cette présentation." start="00:03:43.120" video="mainVideo" id="subtitle"]]
+[[!template text="La fenêtre est assez impressionnante," start="00:03:45.200" video="mainVideo" id="subtitle"]]
+[[!template text="mais vous pouvez en fait modifier" start="00:03:46.640" video="mainVideo" id="subtitle"]]
+[[!template text="toutes les parties selon vos besoins." start="00:03:47.760" video="mainVideo" id="subtitle"]]
+[[!template text="Je veux juste vous montrer" start="00:03:49.519" video="mainVideo" id="subtitle"]]
+[[!template text="tout en même temps" start="00:03:50.400" video="mainVideo" id="subtitle"]]
+[[!template text="pour vous donner une idée rapide de l’ensemble." start="00:03:51.120" video="mainVideo" id="subtitle"]]
+[[!template text="Vous avez différentes couleurs, fenêtres," start="00:03:53.680" video="mainVideo" id="subtitle"]]
+[[!template text="et tous ces espaces" start="00:03:55.200" video="mainVideo" id="subtitle"]]
+[[!template text="ont des fonctions différentes" start="00:03:55.920" video="mainVideo" id="subtitle"]]
+[[!template text="qui aident le traducteur," start="00:03:57.120" video="mainVideo" id="subtitle"]]
+[[!template text="et qui probablement ne vous sont" start="00:03:58.560" video="mainVideo" id="subtitle"]]
+[[!template text="pas familières." start="00:03:59.360" video="mainVideo" id="subtitle"]]
+[[!template text="Je vais vous présenter" start="00:04:02.879" video="mainVideo" id="subtitle"]]
+[[!template text="l’interface maintenant." start="00:04:04.080" video="mainVideo" id="subtitle"]]
+[[!template text="Tout d’abord, nous avons l’éditeur." start="00:04:05.680" video="mainVideo" id="subtitle"]]
+[[!template text="L’éditeur est composé de deux parties :" start="00:04:07.519" video="mainVideo" id="subtitle"]]
+[[!template text="le segment courant," start="00:04:09.439" video="mainVideo" id="subtitle"]]
+[[!template text="qui est associé à un numéro," start="00:04:10.480" video="mainVideo" id="subtitle"]]
+[[!template text="et tous les autres segments," start="00:04:12.319" video="mainVideo" id="subtitle"]]
+[[!template text="au-dessus ou en dessous." start="00:04:13.519" video="mainVideo" id="subtitle"]]
+[[!template text="En haut de la fenêtre," start="00:04:15.840" video="mainVideo" id="subtitle"]]
+[[!template text="vous pouvez voir les trois premiers segments" start="00:04:16.720" video="mainVideo" id="subtitle"]]
+[[!template text="qui étaient dans le fichier .po." start="00:04:18.720" video="mainVideo" id="subtitle"]]
+[[!template text="Le dernier ici, le quatrième, inclut" start="00:04:20.799" video="mainVideo" id="subtitle"]]
+[[!template text="une insertion automatique de correspondance." start="00:04:22.880" video="mainVideo" id="subtitle"]]
+[[!template text="On appelle ce type de traductions" start="00:04:28.720" video="mainVideo" id="subtitle"]]
+[[!template text="des « mémoires de traduction »." start="00:04:30.880" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaT a inséré celle-ci automatiquement" start="00:04:32.720" video="mainVideo" id="subtitle"]]
+[[!template text="parce que j’ai paramétré comme ça," start="00:04:35.280" video="mainVideo" id="subtitle"]]
+[[!template text="et pour ma sécurité, elle est insérée avec" start="00:04:37.120" video="mainVideo" id="subtitle"]]
+[[!template text="le préfixe prédéfini « fuzzy »" start="00:04:38.560" video="mainVideo" id="subtitle"]]
+[[!template text="que je devrai retirer" start="00:04:40.639" video="mainVideo" id="subtitle"]]
+[[!template text="pour valider la traduction." start="00:04:41.919" video="mainVideo" id="subtitle"]]
+[[!template text="La fonctionnalité suivante est le glossaire." start="00:04:44.880" video="mainVideo" id="subtitle"]]
+[[!template text="Dans ce projet," start="00:04:47.919" video="mainVideo" id="subtitle"]]
+[[!template text="on a beaucoup de glossaires." start="00:04:48.479" video="mainVideo" id="subtitle"]]
+[[!template text="Certains sont pertinents, d’autres non." start="00:04:50.160" video="mainVideo" id="subtitle"]]
+[[!template text="Dans le segment que je suis en train de traduire" start="00:04:52.560" video="mainVideo" id="subtitle"]]
+[[!template text="en ce moment, vous pouvez voir" start="00:04:53.919" video="mainVideo" id="subtitle"]]
+[[!template text="des éléments soulignés." start="00:04:55.199" video="mainVideo" id="subtitle"]]
+[[!template text="Ce menu contextuel à droite" start="00:04:57.520" video="mainVideo" id="subtitle"]]
+[[!template text="me permet d’entrer les termes au fur et à mesure que j’écris." start="00:04:59.040" video="mainVideo" id="subtitle"]]
+[[!template text="C’est une sorte de système d’insertion automatique" start="00:05:02.240" video="mainVideo" id="subtitle"]]
+[[!template text="qui propose aussi des prédictions de l’historique," start="00:05:04.639" video="mainVideo" id="subtitle"]]
+[[!template text="des chaînes prédéfinies et d’autres choses comme ça." start="00:05:07.039" video="mainVideo" id="subtitle"]]
+[[!template text="Dans la partie à droite," start="00:05:14.479" video="mainVideo" id="subtitle"]]
+[[!template text="on a des informations de référence" start="00:05:15.440" video="mainVideo" id="subtitle"]]
+[[!template text="qui viennent directement" start="00:05:17.120" video="mainVideo" id="subtitle"]]
+[[!template text="des fichiers .po et .texi." start="00:05:18.240" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="On a également des notes à partager" start="00:05:21.440" video="mainVideo" id="subtitle"]]
+[[!template text="avec des collègues traducteurs," start="00:05:23.440" video="mainVideo" id="subtitle"]]
+[[!template text="et nous avons des chiffres qui me disent" start="00:05:25.759" video="mainVideo" id="subtitle"]]
+[[!template text="qu’il me reste encore 143 000 segments à traduire" start="00:05:28.080" video="mainVideo" id="subtitle"]]
+[[!template text="avant de terminer cette traduction." start="00:05:31.199" video="mainVideo" id="subtitle"]]
+[[!template text="Comme on le voit, il y a beaucoup de chaînes" start="00:05:35.280" video="mainVideo" id="subtitle"]]
+[[!template text="que nous ne voulons vraiment pas avoir à saisir." start="00:05:37.120" video="mainVideo" id="subtitle"]]
+[[!template text="Par exemple, ces chaînes" start="00:05:40.000" video="mainVideo" id="subtitle"]]
+[[!template text="sont des chaînes .texi typiques" start="00:05:42.160" video="mainVideo" id="subtitle"]]
+[[!template text="que le traducteur" start="00:05:43.840" video="mainVideo" id="subtitle"]]
+[[!template text="ne devrait vraiment pas avoir à saisir." start="00:05:45.039" video="mainVideo" id="subtitle"]]
+[[!template text="Nous allons donc devoir" start="00:05:46.479" video="mainVideo" id="subtitle"]]
+[[!template text="faire quelque chose pour gérer ça." start="00:05:47.360" video="mainVideo" id="subtitle"]]
+[[!template text="On va devoir créer des" start="00:05:50.400" video="mainVideo" id="subtitle"]]
+[[!template text="chaînes protégées" start="00:05:51.600" video="mainVideo" id="subtitle"]]
+[[!template text="à l’aide d’expressions régulières," start="00:05:52.479" video="mainVideo" id="subtitle"]]
+[[!template text="afin que les chaînes puissent être visualisées" start="00:05:54.400" video="mainVideo" id="subtitle"]]
+[[!template text="immédiatement dans le segment source," start="00:05:56.800" video="mainVideo" id="subtitle"]]
+[[!template text="saisies de manière semi-automatique" start="00:05:59.120" video="mainVideo" id="subtitle"]]
+[[!template text="dans le segment cible," start="00:06:00.479" video="mainVideo" id="subtitle"]]
+[[!template text="et validables." start="00:06:01.680" video="mainVideo" id="subtitle"]]
+[[!template text="L’expression régulière que j’ai trouvée" start="00:06:04.479" video="mainVideo" id="subtitle"]]
+[[!template text="pour définir la plupart des chaînes" start="00:06:06.479" video="mainVideo" id="subtitle"]]
+[[!template text="est celle-ci," start="00:06:08.160" video="mainVideo" id="subtitle"]]
+[[!template text="et je ne suis pas un pro des regex" start="00:06:09.600" video="mainVideo" id="subtitle"]]
+[[!template text="donc certains d’entre vous pourront me corriger." start="00:06:11.120" video="mainVideo" id="subtitle"]]
+[[!template text="Mais cette expression me donne" start="00:06:13.360" video="mainVideo" id="subtitle"]]
+[[!template text="une définition suffisante" start="00:06:14.560" video="mainVideo" id="subtitle"]]
+[[!template text="même si elle n’inclut pas encore" start="00:06:15.919" video="mainVideo" id="subtitle"]]
+[[!template text="la syntaxe org-mode." start="00:06:17.919" video="mainVideo" id="subtitle"]]
+[[!template text="Donc maintenant on a toutes ces" start="00:06:20.960" video="mainVideo" id="subtitle"]]
+[[!template text="chaînes spécifiques à .texi" start="00:06:22.344" video="mainVideo" id="subtitle"]]
+[[!template text="que nous ne voulons pas toucher" start="00:06:23.440" video="mainVideo" id="subtitle"]]
+[[!template text="affichées en gris." start="00:06:24.960" video="mainVideo" id="subtitle"]]
+[[!template text="En fait, vous avez peut-être remarqué" start="00:06:26.100" video="mainVideo" id="subtitle"]]
+[[!template text="que j’ai un peu triché," start="00:06:27.680" video="mainVideo" id="subtitle"]]
+[[!template text="car ici j’ai ajouté les années" start="00:06:28.479" video="mainVideo" id="subtitle"]]
+[[!template text="et le nom de la Free Software Foundation" start="00:06:30.319" video="mainVideo" id="subtitle"]]
+[[!template text="à la regex précédente" start="00:06:32.000" video="mainVideo" id="subtitle"]]
+[[!template text="pour vous montrer que vous pouvez protéger" start="00:06:34.000" video="mainVideo" id="subtitle"]]
+[[!template text="vraiment n’importe quel type de chaîne." start="00:06:35.520" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="On obtient maintenant" start="00:06:38.560" video="mainVideo" id="subtitle"]]
+[[!template text="une visualisation des chaînes de caractères" start="00:06:39.520" video="mainVideo" id="subtitle"]]
+[[!template text="que nous ne voulons pas toucher," start="00:06:41.360" video="mainVideo" id="subtitle"]]
+[[!template text="mais on doit encore les saisir toutes" start="00:06:43.440" video="mainVideo" id="subtitle"]]
+[[!template text="dans la traduction." start="00:06:45.440" video="mainVideo" id="subtitle"]]
+[[!template text="Pour ça, on a le menu contextuel" start="00:06:46.880" video="mainVideo" id="subtitle"]]
+[[!template text="que j’ai utilisé plus tôt avec le glossaire," start="00:06:48.319" video="mainVideo" id="subtitle"]]
+[[!template text="et on a également des rubriques" start="00:06:50.400" video="mainVideo" id="subtitle"]]
+[[!template text="dans le menu d’édition" start="00:06:51.520" video="mainVideo" id="subtitle"]]
+[[!template text="qui sont accompagnés de raccourcis" start="00:06:52.400" video="mainVideo" id="subtitle"]]
+[[!template text="pour faciliter l’insertion des balises manquantes." start="00:06:53.919" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="Enfin, et ce n’est pas le moins important," start="00:06:57.199" video="mainVideo" id="subtitle"]]
+[[!template text="nous pouvons maintenant valider nos entrées." start="00:06:58.800" video="mainVideo" id="subtitle"]]
+[[!template text="Ici, OmegaT me dit correctement" start="00:07:00.800" video="mainVideo" id="subtitle"]]
+[[!template text="que j’ai raté 7 chaînes protégées." start="00:07:02.479" video="mainVideo" id="subtitle"]]
+[[!template text="Je n’ai entré que 1998," start="00:07:05.759" video="mainVideo" id="subtitle"]]
+[[!template text="mais il y avait cinq autres années," start="00:07:07.599" video="mainVideo" id="subtitle"]]
+[[!template text="la chaîne de copyright," start="00:07:09.280" video="mainVideo" id="subtitle"]]
+[[!template text="et le nom de la FSF." start="00:07:10.479" video="mainVideo" id="subtitle"]]
+[[!template text="Avec ce support presque natif" start="00:07:14.240" video="mainVideo" id="subtitle"]]
+[[!template text="du format Texinfo," start="00:07:15.970" video="mainVideo" id="subtitle"]]
+[[!template text="on a beaucoup moins de choses à saisir," start="00:07:16.960" video="mainVideo" id="subtitle"]]
+[[!template text="et il y a beaucoup moins" start="00:07:18.880" video="mainVideo" id="subtitle"]]
+[[!template text="d’erreurs potentielles." start="00:07:19.919" video="mainVideo" id="subtitle"]]
+[[!template text="Mais on est d’accord, c’est encore beaucoup de travail." start="00:07:21.120" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="Ce qu’on aimerait maintenant" start="00:07:25.199" video="mainVideo" id="subtitle"]]
+[[!template text="c’est de collaborer avec des collègues traducteurs," start="00:07:26.319" video="mainVideo" id="subtitle"]]
+[[!template text="et là, on doit savoir" start="00:07:27.840" video="mainVideo" id="subtitle"]]
+[[!template text="qu’OmegaT est en fait" start="00:07:28.720" video="mainVideo" id="subtitle"]]
+[[!template text="un client svn/git dissimulé," start="00:07:29.840" video="mainVideo" id="subtitle"]]
+[[!template text="et que les projets en équipe peuvent être hébergés" start="00:07:32.080" video="mainVideo" id="subtitle"]]
+[[!template text="sur des plates-formes svn/git." start="00:07:34.240" video="mainVideo" id="subtitle"]]
+[[!template text="Les traducteurs n’ont pas besoin" start="00:07:36.319" video="mainVideo" id="subtitle"]]
+[[!template text="de connaître le contrôle de version." start="00:07:37.199" video="mainVideo" id="subtitle"]]
+[[!template text="Ils ont juste besoin d’identifiants d’accès," start="00:07:38.880" video="mainVideo" id="subtitle"]]
+[[!template text="et OmegaT va commiter pour eux." start="00:07:40.720" video="mainVideo" id="subtitle"]]
+[[!template text="De cette façon, nous n’avons pas besoin d’utiliser" start="00:07:42.400" video="mainVideo" id="subtitle"]]
+[[!template text="d’interfaces de traduction web laides" start="00:07:44.080" video="mainVideo" id="subtitle"]]
+[[!template text="et peu ergonomiques" start="00:07:45.759" video="mainVideo" id="subtitle"]]
+[[!template text="puisqu’on peut utiliser un outil" start="00:07:47.199" video="mainVideo" id="subtitle"]]
+[[!template text="hors ligne professionnel." start="00:07:48.800" video="mainVideo" id="subtitle"]]
+[[!template text="Voici donc à quoi ressemble" start="00:07:51.440" video="mainVideo" id="subtitle"]]
+[[!template text="la plateforme" start="00:07:52.479" video="mainVideo" id="subtitle"]]
+[[!template text="où j’héberge ce projet." start="00:07:54.160" video="mainVideo" id="subtitle"]]
+[[!template text="Les dernières mises à jour datent d’il y a" start="00:07:55.919" video="mainVideo" id="subtitle"]]
+[[!template text="20 jours et 30 secondes" start="00:07:57.199" video="mainVideo" id="subtitle"]]
+[[!template text="quand j’ai créé cette présentation," start="00:07:58.639" video="mainVideo" id="subtitle"]]
+[[!template text="et vous pouvez voir que j’ai un partenaire" start="00:08:00.720" video="mainVideo" id="subtitle"]]
+[[!template text="qui a travaillé avec moi sur le même ensemble de fichiers." start="00:08:02.479" video="mainVideo" id="subtitle"]]
+[[!template text="Bien qu’il semble que" start="00:08:04.639" video="mainVideo" id="subtitle"]]
+[[!template text="que nous avons effectivement commité la traduction" start="00:08:05.520" video="mainVideo" id="subtitle"]]
+[[!template text="sur la plateforme," start="00:08:06.879" video="mainVideo" id="subtitle"]]
+[[!template text="ce n’était pas nous, mais OmegaT." start="00:08:07.680" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaT fait le gros du travail." start="00:08:11.039" video="mainVideo" id="subtitle"]]
+[[!template text="Il effectue régulièrement des sauvegardes et" start="00:08:13.599" video="mainVideo" id="subtitle"]]
+[[!template text="se synchronise avec les serveurs." start="00:08:15.039" video="mainVideo" id="subtitle"]]
+[[!template text="Les traducteurs reçoivent régulièrement" start="00:08:16.879" video="mainVideo" id="subtitle"]]
+[[!template text="les mises à jour de leurs collègues," start="00:08:18.720" video="mainVideo" id="subtitle"]]
+[[!template text="et quand il le faut," start="00:08:20.479" video="mainVideo" id="subtitle"]]
+[[!template text="OmegaT affiche un simple" start="00:08:21.680" video="mainVideo" id="subtitle"]]
+[[!template text="dialogue de résolution des conflits." start="00:08:23.360" video="mainVideo" id="subtitle"]]
+[[!template text="Les traducteurs n’ont jamais à manipuler" start="00:08:25.440" video="mainVideo" id="subtitle"]]
+[[!template text="svn ou git, jamais." start="00:08:27.039" video="mainVideo" id="subtitle"]]
+[[!template text="Et maintenant, nous pouvons envisager un avenir" start="00:08:29.360" video="mainVideo" id="subtitle"]]
+[[!template text="pas si lointain" start="00:08:30.800" video="mainVideo" id="subtitle"]]
+[[!template text="où les manuels seraient traduits" start="00:08:31.599" video="mainVideo" id="subtitle"]]
+[[!template text="et éventuellement inclus" start="00:08:33.120" video="mainVideo" id="subtitle"]]
+[[!template text="dans la distribution," start="00:08:34.159" video="mainVideo" id="subtitle"]]
+[[!template text="mais c’est un sujet" start="00:08:35.279" video="mainVideo" id="subtitle"]]
+[[!template text="pour une autre présentation." start="00:08:36.080" video="mainVideo" id="subtitle"]]
+[[!template new="1" text="J’ai atteint la fin de cette session." start="00:08:39.760" video="mainVideo" id="subtitle"]]
+[[!template text="Merci encore d’y avoir participé." start="00:08:42.080" video="mainVideo" id="subtitle"]]
+[[!template text="Il y a beaucoup de sujets" start="00:08:44.240" video="mainVideo" id="subtitle"]]
+[[!template text="que j’avais promis de ne pas aborder," start="00:08:45.600" video="mainVideo" id="subtitle"]]
+[[!template text="et je pense avoir tenu ma promesse." start="00:08:46.880" video="mainVideo" id="subtitle"]]
+[[!template text="Il va y avoir des questions-réponses maintenant" start="00:08:50.000" video="mainVideo" id="subtitle"]]
+[[!template text="et j’ai aussi commencé" start="00:08:51.600" video="mainVideo" id="subtitle"]]
+[[!template text="un fil de discussion sur cette session" start="00:08:52.517" video="mainVideo" id="subtitle"]]
+[[!template text="samedi dernier, sur Reddit." start="00:08:53.600" video="mainVideo" id="subtitle"]]
+[[!template text="Vous pouvez me trouver sur les listes emacs-help" start="00:08:55.519" video="mainVideo" id="subtitle"]]
+[[!template text="et emacs-devel," start="00:08:57.279" video="mainVideo" id="subtitle"]]
+[[!template text="alors n’hésitez pas à m’envoyer" start="00:08:59.200" video="mainVideo" id="subtitle"]]
+[[!template text="vos questions et remarques." start="00:09:00.480" video="mainVideo" id="subtitle"]]
+[[!template text="Merci encore, et à bientôt !" start="00:09:02.080" video="mainVideo" id="subtitle"]]
diff --git a/2021/captions/org-outside.md b/2021/captions/org-outside.md
new file mode 100644
index 00000000..9a1cf57c
--- /dev/null
+++ b/2021/captions/org-outside.md
@@ -0,0 +1,259 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello. My name is Karl Voit," start="00:00:05.520" video="mainVideo" id=subtitle]]
+[[!template text="and I've spent the last decade" start="00:00:08.170" video="mainVideo" id=subtitle]]
+[[!template text="working with Emacs Org Mode" start="00:00:11.360" video="mainVideo" id=subtitle]]
+[[!template text="as my main organization system" start="00:00:13.040" video="mainVideo" id=subtitle]]
+[[!template text="for my use cases," start="00:00:15.280" video="mainVideo" id=subtitle]]
+[[!template text="and I would like to take this opportunity" start="00:00:16.880" video="mainVideo" id=subtitle]]
+[[!template text="and point out a subtle issue we've had" start="00:00:19.760" video="mainVideo" id=subtitle]]
+[[!template text="in many different discussions around Org Mode," start="00:00:22.480" video="mainVideo" id=subtitle]]
+[[!template text="which itself stands for" start="00:00:25.359" video="mainVideo" id=subtitle]]
+[[!template text="quite different kind of things." start="00:00:27.519" video="mainVideo" id=subtitle]]
+[[!template text="On the one hand side," start="00:00:29.679" video="mainVideo" id=subtitle]]
+[[!template text="Org Mode is an implementation in Elisp" start="00:00:31.760" video="mainVideo" id=subtitle]]
+[[!template text="on the Emacs platform," start="00:00:34.640" video="mainVideo" id=subtitle]]
+[[!template text="and on the other hand side," start="00:00:36.559" video="mainVideo" id=subtitle]]
+[[!template text="Org Mode is also a lightweight markup language" start="00:00:38.480" video="mainVideo" id=subtitle]]
+[[!template text="which we use to express things:" start="00:00:42.960" video="mainVideo" id=subtitle]]
+[[!template text="how headings are marked," start="00:00:45.760" video="mainVideo" id=subtitle]]
+[[!template text="how text is made boldface," start="00:00:47.440" video="mainVideo" id=subtitle]]
+[[!template text="how external links are written," start="00:00:49.840" video="mainVideo" id=subtitle]]
+[[!template text="and so forth, in text documents." start="00:00:51.680" video="mainVideo" id=subtitle]]
+[[!template new="1" text="From my own experience," start="00:01:01.920" video="mainVideo" id=subtitle]]
+[[!template text="from many different online discussions," start="00:01:03.920" video="mainVideo" id=subtitle]]
+[[!template text="I once wrote a blog article on my web page" start="00:01:05.920" video="mainVideo" id=subtitle]]
+[[!template text="that summarizes why I do think" start="00:01:09.600" video="mainVideo" id=subtitle]]
+[[!template text="that Org Mode is superior" start="00:01:11.760" video="mainVideo" id=subtitle]]
+[[!template text="to other well-known lightweight markup languages" start="00:01:13.200" video="mainVideo" id=subtitle]]
+[[!template text="such as Markdown, AsciiDoc, reStructuredText and more." start="00:01:16.000" video="mainVideo" id=subtitle]]
+[[!template text="My main points in this article were that" start="00:01:21.040" video="mainVideo" id=subtitle]]
+[[!template text="Org Mode is an intuitive" start="00:01:23.360" video="mainVideo" id=subtitle]]
+[[!template text="and easy to learn and remember markup." start="00:01:25.040" video="mainVideo" id=subtitle]]
+[[!template text="It is standardized," start="00:01:28.000" video="mainVideo" id=subtitle]]
+[[!template text="as in the Emacs implementation" start="00:01:29.360" video="mainVideo" id=subtitle]]
+[[!template text="defines the current standard," start="00:01:31.439" video="mainVideo" id=subtitle]]
+[[!template text="and there is no different Org mode version" start="00:01:32.799" video="mainVideo" id=subtitle]]
+[[!template text="out there which conflicts with that." start="00:01:35.360" video="mainVideo" id=subtitle]]
+[[!template text="Org Mode is consistent" start="00:01:38.159" video="mainVideo" id=subtitle]]
+[[!template text="within its markup language design." start="00:01:41.040" video="mainVideo" id=subtitle]]
+[[!template text="Org Mode can be easily typed in any text-based tool," start="00:01:44.159" video="mainVideo" id=subtitle]]
+[[!template text="and Org Mode makes much sense outside of Emacs," start="00:01:48.640" video="mainVideo" id=subtitle]]
+[[!template text="so that you can use it, for example," start="00:01:53.280" video="mainVideo" id=subtitle]]
+[[!template text="in email clients or in other text documents" start="00:01:55.360" video="mainVideo" id=subtitle]]
+[[!template text="not interpreting the markup at all." start="00:01:58.719" video="mainVideo" id=subtitle]]
+[[!template text="And of course, if you want," start="00:02:01.040" video="mainVideo" id=subtitle]]
+[[!template text="you can have the perfect tool support within Emacs" start="00:02:03.280" video="mainVideo" id=subtitle]]
+[[!template text="and other software tools." start="00:02:06.640" video="mainVideo" id=subtitle]]
+[[!template new="1" text="This naming issue," start="00:02:13.760" video="mainVideo" id=subtitle]]
+[[!template text="using one name for two different kind of things," start="00:02:15.440" video="mainVideo" id=subtitle]]
+[[!template text="arises in discussions about the markup's support" start="00:02:18.560" video="mainVideo" id=subtitle]]
+[[!template text="in non-Emacs tools and services," start="00:02:22.239" video="mainVideo" id=subtitle]]
+[[!template text="in questions on levels of compatibility" start="00:02:24.560" video="mainVideo" id=subtitle]]
+[[!template text="in comparison to the large and huge" start="00:02:27.440" video="mainVideo" id=subtitle]]
+[[!template text="amount of functionality within Emacs," start="00:02:30.080" video="mainVideo" id=subtitle]]
+[[!template text="and so forth." start="00:02:32.959" video="mainVideo" id=subtitle]]
+[[!template new="1" text="In order to find a solution" start="00:02:36.319" video="mainVideo" id=subtitle]]
+[[!template text="to some of those issues," start="00:02:38.000" video="mainVideo" id=subtitle]]
+[[!template text="I propose a different name. A new idea." start="00:02:40.160" video="mainVideo" id=subtitle]]
+[[!template text="A definition for the lightweight markup language," start="00:02:44.480" video="mainVideo" id=subtitle]]
+[[!template text="and the lightweight markup language alone." start="00:02:47.360" video="mainVideo" id=subtitle]]
+[[!template text="A new standard, which, by the way," start="00:02:51.200" video="mainVideo" id=subtitle]]
+[[!template text="reminds me on something here..." start="00:02:54.000" video="mainVideo" id=subtitle]]
+[[!template text="Anyway..." start="00:02:57.680" video="mainVideo" id=subtitle]]
+[[!template text="So we need a different name" start="00:03:05.200" video="mainVideo" id=subtitle]]
+[[!template text="for this new thing," start="00:03:06.640" video="mainVideo" id=subtitle]]
+[[!template text="and its feature set needs to be" start="00:03:08.159" video="mainVideo" id=subtitle]]
+[[!template text="something good enough" start="00:03:09.840" video="mainVideo" id=subtitle]]
+[[!template text="to help adapting Org Mode syntax" start="00:03:11.760" video="mainVideo" id=subtitle]]
+[[!template text="outside of the Emacs universe." start="00:03:14.000" video="mainVideo" id=subtitle]]
+[[!template text="It can't be the whole set of Org Mode features." start="00:03:16.560" video="mainVideo" id=subtitle]]
+[[!template text="This would kill the idea instantly," start="00:03:19.760" video="mainVideo" id=subtitle]]
+[[!template text="because everything that is going" start="00:03:21.680" video="mainVideo" id=subtitle]]
+[[!template text="into that direction" start="00:03:23.519" video="mainVideo" id=subtitle]]
+[[!template text="would be compared to our golden standards," start="00:03:24.720" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs implementation of Org Mode," start="00:03:26.959" video="mainVideo" id=subtitle]]
+[[!template text="which cannot be compared" start="00:03:29.280" video="mainVideo" id=subtitle]]
+[[!template text="to anything else at this time." start="00:03:31.120" video="mainVideo" id=subtitle]]
+[[!template text="So it needs to be somehow less than Org Mode." start="00:03:33.599" video="mainVideo" id=subtitle]]
+[[!template text="It needs to be recognizable in non-Emacs circles," start="00:03:37.040" video="mainVideo" id=subtitle]]
+[[!template text="and it should remind people" start="00:03:41.040" video="mainVideo" id=subtitle]]
+[[!template text="on similar things" start="00:03:42.720" video="mainVideo" id=subtitle]]
+[[!template text="in order to be something" start="00:03:43.920" video="mainVideo" id=subtitle]]
+[[!template text="somewhat self-explanatory as a term." start="00:03:45.760" video="mainVideo" id=subtitle]]
+[[!template text="Hereby, I propose the name Orgdown" start="00:03:49.760" video="mainVideo" id=subtitle]]
+[[!template text="for this thing, and it's launched" start="00:03:54.000" video="mainVideo" id=subtitle]]
+[[!template text="with my Emacs Conference talk 2021." start="00:03:56.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So what should Orgdown be?" start="00:04:06.239" video="mainVideo" id=subtitle]]
+[[!template text="It should be a subset of Org Mode" start="00:04:09.360" video="mainVideo" id=subtitle]]
+[[!template text="lightweight markup language syntax." start="00:04:11.439" video="mainVideo" id=subtitle]]
+[[!template text="It should be a definition of" start="00:04:14.400" video="mainVideo" id=subtitle]]
+[[!template text="Org-Mode-based entities" start="00:04:17.120" video="mainVideo" id=subtitle]]
+[[!template text="that do make sense on their own" start="00:04:18.880" video="mainVideo" id=subtitle]]
+[[!template text="which is, in any case," start="00:04:20.880" video="mainVideo" id=subtitle]]
+[[!template text="always a compromise of some sort, of course." start="00:04:22.720" video="mainVideo" id=subtitle]]
+[[!template text="It needs to be extensible for different purposes" start="00:04:26.320" video="mainVideo" id=subtitle]]
+[[!template text="to ensure future-proofness," start="00:04:29.919" video="mainVideo" id=subtitle]]
+[[!template text="and it needs to have" start="00:04:32.560" video="mainVideo" id=subtitle]]
+[[!template text="a formal definition of Org Mode," start="00:04:33.600" video="mainVideo" id=subtitle]]
+[[!template text="which helps in becoming a new standard." start="00:04:35.919" video="mainVideo" id=subtitle]]
+[[!template text="it needs to be a self-sustaining community" start="00:04:39.680" video="mainVideo" id=subtitle]]
+[[!template text="that supports the process by documentation" start="00:04:42.160" video="mainVideo" id=subtitle]]
+[[!template text="and connecting people to other people," start="00:04:45.040" video="mainVideo" id=subtitle]]
+[[!template text="to the documentation, and to tools." start="00:04:48.320" video="mainVideo" id=subtitle]]
+[[!template text="What Orgdown should never be" start="00:04:52.080" video="mainVideo" id=subtitle]]
+[[!template text="is something that's incompatible" start="00:04:54.800" video="mainVideo" id=subtitle]]
+[[!template text="with Org Mode within Emacs," start="00:04:57.280" video="mainVideo" id=subtitle]]
+[[!template text="and some kind of Org Mode replacement, of course." start="00:04:59.759" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The advantages of Orgdown for everybody" start="00:05:08.560" video="mainVideo" id=subtitle]]
+[[!template text="includes better Org support in non-Emacs tools;" start="00:05:12.160" video="mainVideo" id=subtitle]]
+[[!template text="to promote the beautifully crafted Org Mode syntax" start="00:05:16.800" video="mainVideo" id=subtitle]]
+[[!template text="to a larger set of people," start="00:05:19.759" video="mainVideo" id=subtitle]]
+[[!template text="even outside of Emacs, of course;" start="00:05:21.520" video="mainVideo" id=subtitle]]
+[[!template text="to push better support for the collaboration" start="00:05:23.759" video="mainVideo" id=subtitle]]
+[[!template text="for Emacs and non-Emacs users" start="00:05:26.560" video="mainVideo" id=subtitle]]
+[[!template text="for using text-based documents;" start="00:05:28.800" video="mainVideo" id=subtitle]]
+[[!template text="finally, fix the irritating mix-up of" start="00:05:31.759" video="mainVideo" id=subtitle]]
+[[!template text="markup language support" start="00:05:35.919" video="mainVideo" id=subtitle]]
+[[!template text="and its Elisp implementation." start="00:05:37.600" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I already mentioned briefly the need for" start="00:05:41.680" video="mainVideo" id=subtitle]]
+[[!template text="a definition and extensibility." start="00:05:44.000" video="mainVideo" id=subtitle]]
+[[!template text="Therefore I came up with the idea" start="00:05:47.039" video="mainVideo" id=subtitle]]
+[[!template text="of having different levels of Orgdown," start="00:05:48.960" video="mainVideo" id=subtitle]]
+[[!template text="and the first and most basic level of Orgdown" start="00:05:52.320" video="mainVideo" id=subtitle]]
+[[!template text="is called Orgdown1." start="00:05:56.400" video="mainVideo" id=subtitle]]
+[[!template text="Orgdown1, or in short, OD1, consists of" start="00:06:05.600" video="mainVideo" id=subtitle]]
+[[!template text="a small set of Org-Mode-based features" start="00:06:09.759" video="mainVideo" id=subtitle]]
+[[!template text="such as simple text formatting, headings, lists," start="00:06:11.759" video="mainVideo" id=subtitle]]
+[[!template text="and checkboxes, example, quote, and source blocks," start="00:06:15.759" video="mainVideo" id=subtitle]]
+[[!template text="comments, external web links," start="00:06:19.520" video="mainVideo" id=subtitle]]
+[[!template text="tables without calculations." start="00:06:22.479" video="mainVideo" id=subtitle]]
+[[!template text="I tried to find a compromise" start="00:06:25.280" video="mainVideo" id=subtitle]]
+[[!template text="that should work with most people" start="00:06:27.120" video="mainVideo" id=subtitle]]
+[[!template text="starting with any lightweight markup" start="00:06:29.199" video="mainVideo" id=subtitle]]
+[[!template text="that is based on Emacs Org Mode." start="00:06:31.600" video="mainVideo" id=subtitle]]
+[[!template text="In order to get a measure" start="00:06:39.759" video="mainVideo" id=subtitle]]
+[[!template text="on how well Orgdown1 is supported" start="00:06:41.199" video="mainVideo" id=subtitle]]
+[[!template text="by one specific tool," start="00:06:43.759" video="mainVideo" id=subtitle]]
+[[!template text="I came up with an OD1" start="00:06:45.919" video="mainVideo" id=subtitle]]
+[[!template text="compatibility percentage index." start="00:06:47.759" video="mainVideo" id=subtitle]]
+[[!template text="43 easy-to-check features such as:" start="00:06:51.199" video="mainVideo" id=subtitle]]
+[[!template text="does it support highlighting of bold text" start="00:06:54.080" video="mainVideo" id=subtitle]]
+[[!template text="using single asterisks?" start="00:06:56.800" video="mainVideo" id=subtitle]]
+[[!template text="Each feature can be supported" start="00:06:59.039" video="mainVideo" id=subtitle]]
+[[!template text="in a basic way (one point)" start="00:07:00.800" video="mainVideo" id=subtitle]]
+[[!template text="or in an advanced way (two points)." start="00:07:02.880" video="mainVideo" id=subtitle]]
+[[!template text="One point means it basically" start="00:07:06.319" video="mainVideo" id=subtitle]]
+[[!template text="doesn't interfere with the tool" start="00:07:08.319" video="mainVideo" id=subtitle]]
+[[!template text="in any negative way." start="00:07:10.080" video="mainVideo" id=subtitle]]
+[[!template text="Two points means that it provides" start="00:07:12.000" video="mainVideo" id=subtitle]]
+[[!template text="active syntax highlighting, for example," start="00:07:14.479" video="mainVideo" id=subtitle]]
+[[!template text="or even tool-supported features" start="00:07:16.720" video="mainVideo" id=subtitle]]
+[[!template text="like shortcuts to insert elements and such." start="00:07:18.479" video="mainVideo" id=subtitle]]
+[[!template text="Summing up those two levels" start="00:07:22.960" video="mainVideo" id=subtitle]]
+[[!template text="for all those 43 features" start="00:07:24.880" video="mainVideo" id=subtitle]]
+[[!template text="result in a number" start="00:07:27.280" video="mainVideo" id=subtitle]]
+[[!template text="that can be compared" start="00:07:28.479" video="mainVideo" id=subtitle]]
+[[!template text="to the maximum level there is," start="00:07:29.919" video="mainVideo" id=subtitle]]
+[[!template text="which results in a given percentage." start="00:07:32.319" video="mainVideo" id=subtitle]]
+[[!template new="1" text="By definition," start="00:07:36.319" video="mainVideo" id=subtitle]]
+[[!template text="Emacs provides full support" start="00:07:37.919" video="mainVideo" id=subtitle]]
+[[!template text="of all Orgdown levels," start="00:07:40.479" video="mainVideo" id=subtitle]]
+[[!template text="and most tools support" start="00:07:43.360" video="mainVideo" id=subtitle]]
+[[!template text="at least fifty percent of Orgdown1" start="00:07:45.360" video="mainVideo" id=subtitle]]
+[[!template text="as long as Orgdown1 syntax" start="00:07:48.240" video="mainVideo" id=subtitle]]
+[[!template text="doesn't result in some markup conflict" start="00:07:50.400" video="mainVideo" id=subtitle]]
+[[!template text="or tooling conflict or whatever." start="00:07:52.720" video="mainVideo" id=subtitle]]
+[[!template text="This emphasizes the idea" start="00:07:57.039" video="mainVideo" id=subtitle]]
+[[!template text="that Orgdown can and should be used" start="00:07:58.560" video="mainVideo" id=subtitle]]
+[[!template text="for personal notes anywhere and in general domains," start="00:08:01.360" video="mainVideo" id=subtitle]]
+[[!template text="just like writing emails, for example." start="00:08:04.879" video="mainVideo" id=subtitle]]
+[[!template text="I guess the majority of tools" start="00:08:07.919" video="mainVideo" id=subtitle]]
+[[!template text="with a certain support for Orgdown1" start="00:08:10.000" video="mainVideo" id=subtitle]]
+[[!template text="will be in the area of 80s and 90s, percentwise." start="00:08:12.720" video="mainVideo" id=subtitle]]
+[[!template text="If Orgdown1 is not enough," start="00:08:18.080" video="mainVideo" id=subtitle]]
+[[!template text="there will be future definitions" start="00:08:20.639" video="mainVideo" id=subtitle]]
+[[!template text="of Orgdown2, 3, or higher" start="00:08:22.400" video="mainVideo" id=subtitle]]
+[[!template text="which will take more and more syntax elements" start="00:08:24.960" video="mainVideo" id=subtitle]]
+[[!template text="from the Org Mode syntax" start="00:08:27.599" video="mainVideo" id=subtitle]]
+[[!template text="and integrate it into" start="00:08:29.039" video="mainVideo" id=subtitle]]
+[[!template text="the domain of Orgdown." start="00:08:30.479" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So far, Orgdown1 is described" start="00:08:39.519" video="mainVideo" id=subtitle]]
+[[!template text="on a public GitLab page" start="00:08:42.000" video="mainVideo" id=subtitle]]
+[[!template text="which has already documentation" start="00:08:43.599" video="mainVideo" id=subtitle]]
+[[!template text="on how to learn Orgdown," start="00:08:45.920" video="mainVideo" id=subtitle]]
+[[!template text="some syntax examples," start="00:08:48.399" video="mainVideo" id=subtitle]]
+[[!template text="frequently asked questions," start="00:08:50.560" video="mainVideo" id=subtitle]]
+[[!template text="and of course, with their answers," start="00:08:51.839" video="mainVideo" id=subtitle]]
+[[!template text="a collection of tools" start="00:08:54.240" video="mainVideo" id=subtitle]]
+[[!template text="that already do support Orgdown in some way," start="00:08:55.920" video="mainVideo" id=subtitle]]
+[[!template text="and a few of them did already" start="00:08:59.279" video="mainVideo" id=subtitle]]
+[[!template text="get evaluated by me" start="00:09:01.040" video="mainVideo" id=subtitle]]
+[[!template text="and got their OD1 compatibility percentage" start="00:09:02.640" video="mainVideo" id=subtitle]]
+[[!template text="in a table." start="00:09:05.920" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Some ideas on how people can contribute" start="00:09:07.279" video="mainVideo" id=subtitle]]
+[[!template text="to this new standard" start="00:09:09.839" video="mainVideo" id=subtitle]]
+[[!template text="is also part of this new site." start="00:09:11.040" video="mainVideo" id=subtitle]]
+[[!template text="And of course, now I need your help" start="00:09:13.839" video="mainVideo" id=subtitle]]
+[[!template text="in order to make this a success story" start="00:09:17.200" video="mainVideo" id=subtitle]]
+[[!template text="for Org Mode and of course Orgdown." start="00:09:19.519" video="mainVideo" id=subtitle]]
+[[!template text="So please do contribute" start="00:09:28.880" video="mainVideo" id=subtitle]]
+[[!template text="to the GitLab project pages" start="00:09:31.360" video="mainVideo" id=subtitle]]
+[[!template text="and add tools and their Orgdown1-compatible percentages." start="00:09:33.279" video="mainVideo" id=subtitle]]
+[[!template text="For example, a template file is provided," start="00:09:38.000" video="mainVideo" id=subtitle]]
+[[!template text="of course." start="00:09:40.800" video="mainVideo" id=subtitle]]
+[[!template text="Please do add more parsers." start="00:09:41.839" video="mainVideo" id=subtitle]]
+[[!template text="Please use the term Orgdown1" start="00:09:43.680" video="mainVideo" id=subtitle]]
+[[!template text="to label tool properties" start="00:09:46.320" video="mainVideo" id=subtitle]]
+[[!template text="for your own stuff" start="00:09:48.080" video="mainVideo" id=subtitle]]
+[[!template text="and so that people do realize" start="00:09:49.440" video="mainVideo" id=subtitle]]
+[[!template text="that your tools are already supporting" start="00:09:51.760" video="mainVideo" id=subtitle]]
+[[!template text="this general use case of Org Mode." start="00:09:53.839" video="mainVideo" id=subtitle]]
+[[!template text="And there is no need to support" start="00:09:56.800" video="mainVideo" id=subtitle]]
+[[!template text="all the Org Mode" start="00:09:58.640" video="mainVideo" id=subtitle]]
+[[!template text="in order to profit from Org Mode syntax" start="00:09:59.680" video="mainVideo" id=subtitle]]
+[[!template text="with Orgdown." start="00:10:02.160" video="mainVideo" id=subtitle]]
+[[!template text="You can spread the idea" start="00:10:04.320" video="mainVideo" id=subtitle]]
+[[!template text="by promoting Orgdown" start="00:10:05.839" video="mainVideo" id=subtitle]]
+[[!template text="as a separate term" start="00:10:07.279" video="mainVideo" id=subtitle]]
+[[!template text="compared to Org Mode" start="00:10:08.480" video="mainVideo" id=subtitle]]
+[[!template text="and its mixed up definition" start="00:10:09.680" video="mainVideo" id=subtitle]]
+[[!template text="with the Org Mode Elisp implementation." start="00:10:11.279" video="mainVideo" id=subtitle]]
+[[!template text="And in case that Orgdown" start="00:10:21.279" video="mainVideo" id=subtitle]]
+[[!template text="really resonates with you," start="00:10:23.120" video="mainVideo" id=subtitle]]
+[[!template text="you can add a formal specification" start="00:10:24.880" video="mainVideo" id=subtitle]]
+[[!template text="to the GitLab project of Orgdown." start="00:10:26.959" video="mainVideo" id=subtitle]]
+[[!template text="I guess that some of the" start="00:10:29.279" video="mainVideo" id=subtitle]]
+[[!template text="existing formal definitions of Org Mode" start="00:10:30.480" video="mainVideo" id=subtitle]]
+[[!template text="already do qualify for Orgdown1" start="00:10:33.040" video="mainVideo" id=subtitle]]
+[[!template text="by stripping down to the few things" start="00:10:35.760" video="mainVideo" id=subtitle]]
+[[!template text="Orgdown1 is concentrating on." start="00:10:37.920" video="mainVideo" id=subtitle]]
+[[!template new="1" text="You can create, for example," start="00:10:41.279" video="mainVideo" id=subtitle]]
+[[!template text="a language server protocol for Orgdown1" start="00:10:42.720" video="mainVideo" id=subtitle]]
+[[!template text="which would multiply the possibilities" start="00:10:45.760" video="mainVideo" id=subtitle]]
+[[!template text="for adapting Orgdown1" start="00:10:48.000" video="mainVideo" id=subtitle]]
+[[!template text="in all kinds of editors" start="00:10:50.000" video="mainVideo" id=subtitle]]
+[[!template text="by giving syntax highlighting, for example." start="00:10:51.760" video="mainVideo" id=subtitle]]
+[[!template text="And you may find the idea intriguing" start="00:11:00.880" video="mainVideo" id=subtitle]]
+[[!template text="that Orgdown1 is a perfect markup language candidate" start="00:11:03.200" video="mainVideo" id=subtitle]]
+[[!template text="for the Gemini project," start="00:11:07.440" video="mainVideo" id=subtitle]]
+[[!template text="which would be, in short," start="00:11:09.920" video="mainVideo" id=subtitle]]
+[[!template text="a linked web of plain Orgdown1 files" start="00:11:11.200" video="mainVideo" id=subtitle]]
+[[!template text="that form a parallel internet" start="00:11:14.240" video="mainVideo" id=subtitle]]
+[[!template text="without advertisements," start="00:11:16.160" video="mainVideo" id=subtitle]]
+[[!template text="malware-bloated web pages, and so forth." start="00:11:17.839" video="mainVideo" id=subtitle]]
+[[!template text="It's concentrating" start="00:11:20.880" video="mainVideo" id=subtitle]]
+[[!template text="on the essential value of information" start="00:11:22.160" video="mainVideo" id=subtitle]]
+[[!template text="in form of simple text files" start="00:11:23.920" video="mainVideo" id=subtitle]]
+[[!template text="and links to other simple text files." start="00:11:26.399" video="mainVideo" id=subtitle]]
+[[!template text="I would love to see this. happen someday" start="00:11:29.279" video="mainVideo" id=subtitle]]
+[[!template text="In the meantime, let's kick-start Orgdown" start="00:11:39.760" video="mainVideo" id=subtitle]]
+[[!template text="with Orgdown1 as the first level." start="00:11:42.560" video="mainVideo" id=subtitle]]
+[[!template text="Visit the GitLab page," start="00:11:45.120" video="mainVideo" id=subtitle]]
+[[!template text="hand in improvements for the linked tool sections," start="00:11:46.880" video="mainVideo" id=subtitle]]
+[[!template text="and spread the brilliant markup design" start="00:11:49.600" video="mainVideo" id=subtitle]]
+[[!template text="of Org Mode," start="00:11:52.240" video="mainVideo" id=subtitle]]
+[[!template text="using Orgdown as a well-defined" start="00:11:52.880" video="mainVideo" id=subtitle]]
+[[!template text="new standard." start="00:11:56.000" video="mainVideo" id=subtitle]]
+[[!template text="Thank you." start="00:11:57.839" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/pattern.md b/2021/captions/pattern.md
new file mode 100644
index 00000000..eb92e453
--- /dev/null
+++ b/2021/captions/pattern.md
@@ -0,0 +1,627 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Welcome to this EmacsConf 2021 talk" start="00:00:01.040" video="mainVideo" id=subtitle]]
+[[!template text="on Emacs as Design Pattern Learning." start="00:00:03.520" video="mainVideo" id=subtitle]]
+[[!template text="I'm Greta Goetz, and this talk" start="00:00:06.160" video="mainVideo" id=subtitle]]
+[[!template text="is for people who are interested" start="00:00:08.400" video="mainVideo" id=subtitle]]
+[[!template text="in thinking about Emacs" start="00:00:10.080" video="mainVideo" id=subtitle]]
+[[!template text="as a tool that's sophisticated enough" start="00:00:11.679" video="mainVideo" id=subtitle]]
+[[!template text="not only to cope with activities and tasks," start="00:00:13.840" video="mainVideo" id=subtitle]]
+[[!template text="but also sophisticated enough" start="00:00:17.680" video="mainVideo" id=subtitle]]
+[[!template text="to cater to a complex assemblage" start="00:00:19.760" video="mainVideo" id=subtitle]]
+[[!template text="of not just tasks and activities," start="00:00:22.560" video="mainVideo" id=subtitle]]
+[[!template text="but also people, outcomes," start="00:00:24.000" video="mainVideo" id=subtitle]]
+[[!template text="as well as tools." start="00:00:26.160" video="mainVideo" id=subtitle]]
+[[!template text="This is a definition of epistemic fluency" start="00:00:27.760" video="mainVideo" id=subtitle]]
+[[!template text="from a work by Markauskaite and Goodyear" start="00:00:31.039" video="mainVideo" id=subtitle]]
+[[!template text="that is relevant to us" start="00:00:33.440" video="mainVideo" id=subtitle]]
+[[!template text="if we're interested in" start="00:00:35.040" video="mainVideo" id=subtitle]]
+[[!template text="learning how to learn and" start="00:00:36.320" video="mainVideo" id=subtitle]]
+[[!template text="how to continuously iterate knowledge" start="00:00:37.600" video="mainVideo" id=subtitle]]
+[[!template text="to fit changing complex specific contexts." start="00:00:39.840" video="mainVideo" id=subtitle]]
+[[!template text="Some software oversimplifies." start="00:00:44.480" video="mainVideo" id=subtitle]]
+[[!template text="Emacs both helps users" start="00:00:46.719" video="mainVideo" id=subtitle]]
+[[!template text="implement design pattern learning" start="00:00:49.039" video="mainVideo" id=subtitle]]
+[[!template text="that can cope with complexity," start="00:00:50.559" video="mainVideo" id=subtitle]]
+[[!template text="and it models complex design pattern learning." start="00:00:53.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, what do we mean by design patterns?" start="00:00:57.360" video="mainVideo" id=subtitle]]
+[[!template text="The term comes from design theorist and" start="00:00:59.920" video="mainVideo" id=subtitle]]
+[[!template text="architect Christopher Alexander," start="00:01:03.120" video="mainVideo" id=subtitle]]
+[[!template text="whose work influenced" start="00:01:05.199" video="mainVideo" id=subtitle]]
+[[!template text="a broad variety of disciplines." start="00:01:06.400" video="mainVideo" id=subtitle]]
+[[!template text="I'll be drawing on a work in programming" start="00:01:08.479" video="mainVideo" id=subtitle]]
+[[!template text="by Richard Gabriel, and in pedagogy," start="00:01:11.680" video="mainVideo" id=subtitle]]
+[[!template text="by Peter Goodyear." start="00:01:14.240" video="mainVideo" id=subtitle]]
+[[!template text="What are design patterns?" start="00:01:16.240" video="mainVideo" id=subtitle]]
+[[!template text="They are patterns of micro solutions" start="00:01:17.920" video="mainVideo" id=subtitle]]
+[[!template text="combining method and artifact," start="00:01:20.159" video="mainVideo" id=subtitle]]
+[[!template text="and macro solutions" start="00:01:22.560" video="mainVideo" id=subtitle]]
+[[!template text="of these micro patterns" start="00:01:24.080" video="mainVideo" id=subtitle]]
+[[!template text="when viewed together." start="00:01:25.680" video="mainVideo" id=subtitle]]
+[[!template text="This approach allows for the" start="00:01:27.680" video="mainVideo" id=subtitle]]
+[[!template text="specialization, customization," start="00:01:29.280" video="mainVideo" id=subtitle]]
+[[!template text="extension, and reuse of patterns." start="00:01:31.840" video="mainVideo" id=subtitle]]
+[[!template text="This is useful if we're seeking to" start="00:01:35.600" video="mainVideo" id=subtitle]]
+[[!template text="deal with complexity. It helps extend" start="00:01:37.360" video="mainVideo" id=subtitle]]
+[[!template text="the assemblage of learning components" start="00:01:40.079" video="mainVideo" id=subtitle]]
+[[!template text="that we have, without having to build" start="00:01:42.560" video="mainVideo" id=subtitle]]
+[[!template text="from scratch." start="00:01:45.040" video="mainVideo" id=subtitle]]
+[[!template text="Another important feature" start="00:01:46.640" video="mainVideo" id=subtitle]]
+[[!template text="of design patterns" start="00:01:48.320" video="mainVideo" id=subtitle]]
+[[!template text="and their relevance to Emacs" start="00:01:49.520" video="mainVideo" id=subtitle]]
+[[!template text="is the human-centeredness." start="00:01:51.759" video="mainVideo" id=subtitle]]
+[[!template text="Christopher Alexander critiqued" start="00:01:54.799" video="mainVideo" id=subtitle]]
+[[!template text="the mechanical" start="00:01:57.360" video="mainVideo" id=subtitle]]
+[[!template text="and championed the human place." start="00:01:58.320" video="mainVideo" id=subtitle]]
+[[!template text="Emacs, too, champions the human place." start="00:02:00.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So why Emacs and design learning?" start="00:02:03.439" video="mainVideo" id=subtitle]]
+[[!template text="One reason is indeed this extensibility" start="00:02:06.079" video="mainVideo" id=subtitle]]
+[[!template text="through Emacs, which allows a person" start="00:02:09.679" video="mainVideo" id=subtitle]]
+[[!template text="to extend their learning and use of Emacs" start="00:02:13.360" video="mainVideo" id=subtitle]]
+[[!template text="as far as they wish to take it." start="00:02:16.720" video="mainVideo" id=subtitle]]
+[[!template text="This is thanks to its free software core," start="00:02:18.800" video="mainVideo" id=subtitle]]
+[[!template text="and this permits what we call" start="00:02:22.959" video="mainVideo" id=subtitle]]
+[[!template text="in networked learning" start="00:02:24.720" video="mainVideo" id=subtitle]]
+[[!template text="'e-quality' cf. Beaty et al.," start="00:02:25.843" video="mainVideo" id=subtitle]]
+[[!template text="which is to say," start="00:02:27.040" video="mainVideo" id=subtitle]]
+[[!template text="the opportunity to co-create knowledge." start="00:02:28.160" video="mainVideo" id=subtitle]]
+[[!template text="So if one wishes to extend" start="00:02:31.120" video="mainVideo" id=subtitle]]
+[[!template text="their learning trajectory with Emacs" start="00:02:32.959" video="mainVideo" id=subtitle]]
+[[!template text="such that they're able to" start="00:02:35.120" video="mainVideo" id=subtitle]]
+[[!template text="write packages for Emacs," start="00:02:37.120" video="mainVideo" id=subtitle]]
+[[!template text="if these packages become part of the core," start="00:02:38.560" video="mainVideo" id=subtitle]]
+[[!template text="they're really co-creating knowledge" start="00:02:41.040" video="mainVideo" id=subtitle]]
+[[!template text="within the community" start="00:02:43.440" video="mainVideo" id=subtitle]]
+[[!template text="and extending the capabilities of Emacs." start="00:02:44.879" video="mainVideo" id=subtitle]]
+[[!template text="Emacs can also be considered" start="00:02:48.800" video="mainVideo" id=subtitle]]
+[[!template text="in terms of design pattern learning," start="00:02:50.480" video="mainVideo" id=subtitle]]
+[[!template text="because it can be used" start="00:02:52.319" video="mainVideo" id=subtitle]]
+[[!template text="for different purposes." start="00:02:53.440" video="mainVideo" id=subtitle]]
+[[!template text="This is true even at the very basic level" start="00:02:54.800" video="mainVideo" id=subtitle]]
+[[!template text="of Emacs functionalities," start="00:02:57.280" video="mainVideo" id=subtitle]]
+[[!template text="which is a point" start="00:02:58.959" video="mainVideo" id=subtitle]]
+[[!template text="that should really be stressed." start="00:02:59.920" video="mainVideo" id=subtitle]]
+[[!template text="So even newcomers coming to Emacs" start="00:03:01.280" video="mainVideo" id=subtitle]]
+[[!template text="who don't know programming" start="00:03:03.680" video="mainVideo" id=subtitle]]
+[[!template text="can do a very broad variety" start="00:03:04.879" video="mainVideo" id=subtitle]]
+[[!template text="of different things with their Emacs," start="00:03:07.040" video="mainVideo" id=subtitle]]
+[[!template text="using these basic functionalities:" start="00:03:09.040" video="mainVideo" id=subtitle]]
+[[!template text="for example, simply by customizing" start="00:03:11.760" video="mainVideo" id=subtitle]]
+[[!template text="the language variable" start="00:03:14.800" video="mainVideo" id=subtitle]]
+[[!template text="in the initialization file." start="00:03:15.840" video="mainVideo" id=subtitle]]
+[[!template text="This, thanks to the powerful Emacs Lisp" start="00:03:17.923" video="mainVideo" id=subtitle]]
+[[!template text="interpreter, makes it possible for one" start="00:03:20.879" video="mainVideo" id=subtitle]]
+[[!template text="to do a wide variety of different things" start="00:03:22.640" video="mainVideo" id=subtitle]]
+[[!template text="within Emacs: from making graphs" start="00:03:24.640" video="mainVideo" id=subtitle]]
+[[!template text="to exporting in LaTeX." start="00:03:26.560" video="mainVideo" id=subtitle]]
+[[!template text="And also part of the Emacs basic" start="00:03:29.360" video="mainVideo" id=subtitle]]
+[[!template text="functionalities are" start="00:03:32.000" video="mainVideo" id=subtitle]]
+[[!template text="how we can cycle through" start="00:03:34.239" video="mainVideo" id=subtitle]]
+[[!template text="different tasks and texts very easily" start="00:03:36.159" video="mainVideo" id=subtitle]]
+[[!template text="through buffer cycling," start="00:03:38.400" video="mainVideo" id=subtitle]]
+[[!template text="or how within Org we can use tree outlines" start="00:03:40.000" video="mainVideo" id=subtitle]]
+[[!template text="that can hierarchize the material" start="00:03:44.640" video="mainVideo" id=subtitle]]
+[[!template text="that we're working with" start="00:03:48.159" video="mainVideo" id=subtitle]]
+[[!template text="and even change a headline" start="00:03:49.519" video="mainVideo" id=subtitle]]
+[[!template text="into a to-do. So we see this extensibility," start="00:03:52.080" video="mainVideo" id=subtitle]]
+[[!template text="this flexibility. Also, within Org," start="00:03:54.799" video="mainVideo" id=subtitle]]
+[[!template text="we can see how by writing" start="00:03:57.280" video="mainVideo" id=subtitle]]
+[[!template text="just a few lines of code" start="00:03:58.799" video="mainVideo" id=subtitle]]
+[[!template text="such as through header arguments" start="00:04:00.159" video="mainVideo" id=subtitle]]
+[[!template text="or code blocks, we can change the way" start="00:04:02.239" video="mainVideo" id=subtitle]]
+[[!template text="in which a file," start="00:04:04.879" video="mainVideo" id=subtitle]]
+[[!template text="or part of a file, is executed." start="00:04:06.159" video="mainVideo" id=subtitle]]
+[[!template text="An illustration of what this means" start="00:04:08.480" video="mainVideo" id=subtitle]]
+[[!template text="to the beginner would be how easy it is" start="00:04:10.239" video="mainVideo" id=subtitle]]
+[[!template text="to export a LaTeX file," start="00:04:12.720" video="mainVideo" id=subtitle]]
+[[!template text="so one doesn't even need to know" start="00:04:15.280" video="mainVideo" id=subtitle]]
+[[!template text="all of LaTeX to be able to implement" start="00:04:17.040" video="mainVideo" id=subtitle]]
+[[!template text="parts of LaTeX within Org. So this" start="00:04:19.199" video="mainVideo" id=subtitle]]
+[[!template text="variety of different purposes, then," start="00:04:23.360" video="mainVideo" id=subtitle]]
+[[!template text="can be experienced by the beginner." start="00:04:25.280" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Emacs is also an example" start="00:04:27.600" video="mainVideo" id=subtitle]]
+[[!template text="of design pattern learning" start="00:04:30.400" video="mainVideo" id=subtitle]]
+[[!template text="because it is a design pattern" start="00:04:32.080" video="mainVideo" id=subtitle]]
+[[!template text="of learning itself." start="00:04:34.320" video="mainVideo" id=subtitle]]
+[[!template text="Here we're thinking about design patterns" start="00:04:35.919" video="mainVideo" id=subtitle]]
+[[!template text="as a visual representation." start="00:04:39.040" video="mainVideo" id=subtitle]]
+[[!template text="We can think of how systems of systems," start="00:04:41.919" video="mainVideo" id=subtitle]]
+[[!template text="which Emacs is an example of," start="00:04:44.320" video="mainVideo" id=subtitle]]
+[[!template text="stem from a successful center," start="00:04:47.680" video="mainVideo" id=subtitle]]
+[[!template text="and 'this center is surrounded" start="00:04:50.560" video="mainVideo" id=subtitle]]
+[[!template text="by a boundary which is itself" start="00:04:53.280" video="mainVideo" id=subtitle]]
+[[!template text="made up of centers' Gabriel." start="00:04:55.440" video="mainVideo" id=subtitle]]
+[[!template text="So, where we have Emacs at the center," start="00:04:57.040" video="mainVideo" id=subtitle]]
+[[!template text="we also have packages such as Magit." start="00:04:59.440" video="mainVideo" id=subtitle]]
+[[!template text="Magit can be viewed as a center" start="00:05:02.720" video="mainVideo" id=subtitle]]
+[[!template text="unto itself. However, this center" start="00:05:04.800" video="mainVideo" id=subtitle]]
+[[!template text="only exists thanks to the center" start="00:05:07.120" video="mainVideo" id=subtitle]]
+[[!template text="of the center, which is Emacs." start="00:05:09.520" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And thus we speak of Emacs" start="00:05:11.759" video="mainVideo" id=subtitle]]
+[[!template text="as being a successful design pattern" start="00:05:14.320" video="mainVideo" id=subtitle]]
+[[!template text="implementation cf. Gabriel. And why do we care about" start="00:05:17.039" video="mainVideo" id=subtitle]]
+[[!template text="design pattern approaches? Here, well," start="00:05:20.880" video="mainVideo" id=subtitle]]
+[[!template text="what I'm trying to say is that" start="00:05:25.520" video="mainVideo" id=subtitle]]
+[[!template text="this is useful to the person" start="00:05:28.560" video="mainVideo" id=subtitle]]
+[[!template text="who is interested in being able to" start="00:05:30.080" video="mainVideo" id=subtitle]]
+[[!template text="more efficiently cope with" start="00:05:32.240" video="mainVideo" id=subtitle]]
+[[!template text="complex and specific situations," start="00:05:34.000" video="mainVideo" id=subtitle]]
+[[!template text="and this design pattern allows for this" start="00:05:36.639" video="mainVideo" id=subtitle]]
+[[!template text="because of its extensibility," start="00:05:40.240" video="mainVideo" id=subtitle]]
+[[!template text="because we can find these specializations" start="00:05:43.039" video="mainVideo" id=subtitle]]
+[[!template text="or customizations that are able to reach" start="00:05:46.400" video="mainVideo" id=subtitle]]
+[[!template text="these changing contexts that we seek to interact with." start="00:05:50.000" video="mainVideo" id=subtitle]]
+[[!template text="This can be compared with" start="00:05:52.880" video="mainVideo" id=subtitle]]
+[[!template text="other software applications" start="00:05:55.039" video="mainVideo" id=subtitle]]
+[[!template text="that are prefabricated" start="00:05:56.479" video="mainVideo" id=subtitle]]
+[[!template text="so they already decide" start="00:05:58.000" video="mainVideo" id=subtitle]]
+[[!template text="what it is a person is going to do" start="00:05:59.680" video="mainVideo" id=subtitle]]
+[[!template text="when they use them." start="00:06:01.600" video="mainVideo" id=subtitle]]
+[[!template text="This also means that what they're doing" start="00:06:02.800" video="mainVideo" id=subtitle]]
+[[!template text="within these applications" start="00:06:04.319" video="mainVideo" id=subtitle]]
+[[!template text="can get stranded there," start="00:06:05.520" video="mainVideo" id=subtitle]]
+[[!template text="that it's harder to integrate" start="00:06:06.639" video="mainVideo" id=subtitle]]
+[[!template text="their knowledge or their texts" start="00:06:08.479" video="mainVideo" id=subtitle]]
+[[!template text="or their activities" start="00:06:10.319" video="mainVideo" id=subtitle]]
+[[!template text="with each other." start="00:06:12.240" video="mainVideo" id=subtitle]]
+[[!template text="A lot of software also makes assumptions" start="00:06:13.440" video="mainVideo" id=subtitle]]
+[[!template text="on who their users are. We know that" start="00:06:15.759" video="mainVideo" id=subtitle]]
+[[!template text="we speak in user experience design" start="00:06:18.240" video="mainVideo" id=subtitle]]
+[[!template text="of the 'customer journey' or of 'personas'," start="00:06:20.160" video="mainVideo" id=subtitle]]
+[[!template text="and very often, then," start="00:06:23.120" video="mainVideo" id=subtitle]]
+[[!template text="the customer journey is pre-designed." start="00:06:24.720" video="mainVideo" id=subtitle]]
+[[!template text="But within Emacs, we can be" start="00:06:27.840" video="mainVideo" id=subtitle]]
+[[!template text="our own persona." start="00:06:29.680" video="mainVideo" id=subtitle]]
+[[!template text="Practical use of Emacs" start="00:06:32.079" video="mainVideo" id=subtitle]]
+[[!template text="can also make non-programmers" start="00:06:33.440" video="mainVideo" id=subtitle]]
+[[!template text="into programmers." start="00:06:35.680" video="mainVideo" id=subtitle]]
+[[!template text="So this is to say that" start="00:06:36.720" video="mainVideo" id=subtitle]]
+[[!template text="as we are using Emacs," start="00:06:38.400" video="mainVideo" id=subtitle]]
+[[!template text="we can continue to develop" start="00:06:40.240" video="mainVideo" id=subtitle]]
+[[!template text="as far as we wish." start="00:06:41.840" video="mainVideo" id=subtitle]]
+[[!template text="Therefore we are not only users" start="00:06:44.479" video="mainVideo" id=subtitle]]
+[[!template text="within Emacs, but we are also" start="00:06:46.240" video="mainVideo" id=subtitle]]
+[[!template text="creative persons and producers." start="00:06:48.720" video="mainVideo" id=subtitle]]
+[[!template text="So here I am citing work by ivan Illich." start="00:06:51.280" video="mainVideo" id=subtitle]]
+[[!template text="We can further contribute" start="00:06:54.400" video="mainVideo" id=subtitle]]
+[[!template text="to the evolution of the rules of Emacs." start="00:06:56.079" video="mainVideo" id=subtitle]]
+[[!template text="To draw on Bernard Stiegler," start="00:06:58.880" video="mainVideo" id=subtitle]]
+[[!template text="if I may also make an analogy," start="00:07:01.680" video="mainVideo" id=subtitle]]
+[[!template text="within our inits, we contribute to" start="00:07:04.880" video="mainVideo" id=subtitle]]
+[[!template text="the evolution of the rules" start="00:07:07.520" video="mainVideo" id=subtitle]]
+[[!template text="according to which our Emacs works for us." start="00:07:08.800" video="mainVideo" id=subtitle]]
+[[!template text="But again, if we're extending" start="00:07:11.759" video="mainVideo" id=subtitle]]
+[[!template text="our learning trajectory," start="00:07:13.120" video="mainVideo" id=subtitle]]
+[[!template text="and if we write a package," start="00:07:14.560" video="mainVideo" id=subtitle]]
+[[!template text="and the package becomes part of the core," start="00:07:16.319" video="mainVideo" id=subtitle]]
+[[!template text="we do indeed contribute to the evolution" start="00:07:18.400" video="mainVideo" id=subtitle]]
+[[!template text="of the rules of Emacs." start="00:07:21.440" video="mainVideo" id=subtitle]]
+[[!template text="But because it stems" start="00:07:23.840" video="mainVideo" id=subtitle]]
+[[!template text="from our personal use" start="00:07:25.359" video="mainVideo" id=subtitle]]
+[[!template text="and our personal customizations," start="00:07:26.560" video="mainVideo" id=subtitle]]
+[[!template text="we can think of it as being" start="00:07:28.479" video="mainVideo" id=subtitle]]
+[[!template text="a personal toolkit cf. Stallman." start="00:07:30.000" video="mainVideo" id=subtitle]]
+[[!template text="So this design pattern iteration approach" start="00:07:31.600" video="mainVideo" id=subtitle]]
+[[!template text="to Emacs is the very reason" start="00:07:35.840" video="mainVideo" id=subtitle]]
+[[!template text="why it is that we can customize it" start="00:07:39.680" video="mainVideo" id=subtitle]]
+[[!template text="to our own liking," start="00:07:41.840" video="mainVideo" id=subtitle]]
+[[!template text="and using Emacs to extend our freedom" start="00:07:43.440" video="mainVideo" id=subtitle]]
+[[!template text="then helps us to develop heuristics." start="00:07:46.160" video="mainVideo" id=subtitle]]
+[[!template text="It helps us develop our decision-making," start="00:07:48.720" video="mainVideo" id=subtitle]]
+[[!template text="our problem-solving" start="00:07:51.919" video="mainVideo" id=subtitle]]
+[[!template text="and responsibility for what it is" start="00:07:54.719" video="mainVideo" id=subtitle]]
+[[!template text="that we're doing," start="00:07:57.839" video="mainVideo" id=subtitle]]
+[[!template text="and these skill sets" start="00:07:58.880" video="mainVideo" id=subtitle]]
+[[!template text="are extensible beyond Emacs." start="00:08:00.640" video="mainVideo" id=subtitle]]
+[[!template text="These can be considered as life skills" start="00:08:02.480" video="mainVideo" id=subtitle]]
+[[!template text="that have relevance beyond." start="00:08:04.240" video="mainVideo" id=subtitle]]
+[[!template text="This is a very good example" start="00:08:05.839" video="mainVideo" id=subtitle]]
+[[!template text="of why it is that being exposed" start="00:08:07.520" video="mainVideo" id=subtitle]]
+[[!template text="to complex assemblages" start="00:08:10.560" video="mainVideo" id=subtitle]]
+[[!template text="matter to us as human beings." start="00:08:12.480" video="mainVideo" id=subtitle]]
+[[!template text="It's good training ground for life." start="00:08:14.320" video="mainVideo" id=subtitle]]
+[[!template text="But it's also important" start="00:08:17.120" video="mainVideo" id=subtitle]]
+[[!template text="for a very basic pedagogical point." start="00:08:19.680" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So now I'm going to draw on work" start="00:08:22.719" video="mainVideo" id=subtitle]]
+[[!template text="by Hélène Trocmé-Fabre," start="00:08:24.160" video="mainVideo" id=subtitle]]
+[[!template text="who explains that" start="00:08:26.560" video="mainVideo" id=subtitle]]
+[[!template text="reduced and poor contextualizations" start="00:08:27.839" video="mainVideo" id=subtitle]]
+[[!template text="flatten communication." start="00:08:30.719" video="mainVideo" id=subtitle]]
+[[!template text="So, for example," start="00:08:32.800" video="mainVideo" id=subtitle]]
+[[!template text="within the field of software," start="00:08:33.760" video="mainVideo" id=subtitle]]
+[[!template text="if we are using an application" start="00:08:35.279" video="mainVideo" id=subtitle]]
+[[!template text="that only asks us to swipe left or right," start="00:08:37.680" video="mainVideo" id=subtitle]]
+[[!template text="this deprives us of our ability" start="00:08:40.640" video="mainVideo" id=subtitle]]
+[[!template text="to respond in a more sophisticated way." start="00:08:42.880" video="mainVideo" id=subtitle]]
+[[!template text="By contrast, by being exposed" start="00:08:45.600" video="mainVideo" id=subtitle]]
+[[!template text="to a rich contextualization within Emacs," start="00:08:48.640" video="mainVideo" id=subtitle]]
+[[!template text="we are learning to contextualize," start="00:08:51.600" video="mainVideo" id=subtitle]]
+[[!template text="which Trocmé-Fabre says is the first step" start="00:08:53.839" video="mainVideo" id=subtitle]]
+[[!template text="in learning how to learn." start="00:08:57.040" video="mainVideo" id=subtitle]]
+[[!template text="So we can understand" start="00:08:58.719" video="mainVideo" id=subtitle]]
+[[!template text="just how important it is" start="00:08:59.920" video="mainVideo" id=subtitle]]
+[[!template text="to be exposed to complexity." start="00:09:01.760" video="mainVideo" id=subtitle]]
+[[!template text="It's not just a mere" start="00:09:03.520" video="mainVideo" id=subtitle]]
+[[!template text="intellectual exercise," start="00:09:05.440" video="mainVideo" id=subtitle]]
+[[!template text="but it is indeed how it is" start="00:09:06.719" video="mainVideo" id=subtitle]]
+[[!template text="that we begin to learn." start="00:09:08.719" video="mainVideo" id=subtitle]]
+[[!template new="1" text="If this sounds too abstract," start="00:09:12.240" video="mainVideo" id=subtitle]]
+[[!template text="maybe we can step back for a moment" start="00:09:13.760" video="mainVideo" id=subtitle]]
+[[!template text="and think about visualizing Emacs" start="00:09:15.520" video="mainVideo" id=subtitle]]
+[[!template text="as a mental map. So here, too," start="00:09:17.520" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to draw on Trocmé-Fabre," start="00:09:19.600" video="mainVideo" id=subtitle]]
+[[!template text="and she is building her ideas" start="00:09:21.839" video="mainVideo" id=subtitle]]
+[[!template text="on those of Tony Buzan," start="00:09:24.560" video="mainVideo" id=subtitle]]
+[[!template text="who was the popularizer of the mind map." start="00:09:26.240" video="mainVideo" id=subtitle]]
+[[!template text="So mind maps begin with a core," start="00:09:29.120" video="mainVideo" id=subtitle]]
+[[!template text="which with Emacs is the Emacs core," start="00:09:31.519" video="mainVideo" id=subtitle]]
+[[!template text="which now includes Org." start="00:09:33.760" video="mainVideo" id=subtitle]]
+[[!template text="They extend outwards from the core" start="00:09:36.320" video="mainVideo" id=subtitle]]
+[[!template text="through relational codes." start="00:09:38.719" video="mainVideo" id=subtitle]]
+[[!template text="And then through keywords and cycling," start="00:09:40.800" video="mainVideo" id=subtitle]]
+[[!template text="mind maps function to bring out" start="00:09:44.399" video="mainVideo" id=subtitle]]
+[[!template text="further ideas, and this may be" start="00:09:46.240" video="mainVideo" id=subtitle]]
+[[!template text="the experience you've already had" start="00:09:48.320" video="mainVideo" id=subtitle]]
+[[!template text="with your Emacs. Then finally," start="00:09:49.760" video="mainVideo" id=subtitle]]
+[[!template text="these mind maps extend outwards" start="00:09:52.640" video="mainVideo" id=subtitle]]
+[[!template text="at the periphery." start="00:09:54.800" video="mainVideo" id=subtitle]]
+[[!template text="In thinking about how this applies to Emacs," start="00:09:56.480" video="mainVideo" id=subtitle]]
+[[!template text="we can think about how yes, indeed," start="00:10:00.240" video="mainVideo" id=subtitle]]
+[[!template text="we all share the same core," start="00:10:02.320" video="mainVideo" id=subtitle]]
+[[!template text="but then we extend this core outwards" start="00:10:04.240" video="mainVideo" id=subtitle]]
+[[!template text="into our personal configurations." start="00:10:07.360" video="mainVideo" id=subtitle]]
+[[!template text="So this is the social moment," start="00:10:09.680" video="mainVideo" id=subtitle]]
+[[!template text="but this social moment" start="00:10:11.360" video="mainVideo" id=subtitle]]
+[[!template text="is integral to Emacs" start="00:10:12.480" video="mainVideo" id=subtitle]]
+[[!template text="because Emacs fully achieves its meaning" start="00:10:13.839" video="mainVideo" id=subtitle]]
+[[!template text="when it is being applied, extended," start="00:10:16.800" video="mainVideo" id=subtitle]]
+[[!template text="and customized in this way." start="00:10:18.959" video="mainVideo" id=subtitle]]
+[[!template text="Further, these social branches" start="00:10:20.880" video="mainVideo" id=subtitle]]
+[[!template text="are relevant to the continuation" start="00:10:23.279" video="mainVideo" id=subtitle]]
+[[!template text="of learning how to learn how to use Emacs." start="00:10:25.839" video="mainVideo" id=subtitle]]
+[[!template text="So for example, we may have" start="00:10:28.560" video="mainVideo" id=subtitle]]
+[[!template text="our first configuration file," start="00:10:30.800" video="mainVideo" id=subtitle]]
+[[!template text="and then we might want to compare it" start="00:10:33.279" video="mainVideo" id=subtitle]]
+[[!template text="with other people's configuration files," start="00:10:35.040" video="mainVideo" id=subtitle]]
+[[!template text="not only to see what code they're using," start="00:10:37.440" video="mainVideo" id=subtitle]]
+[[!template text="but also to see how it is that they are" start="00:10:40.240" video="mainVideo" id=subtitle]]
+[[!template text="implementing certain functionalities" start="00:10:42.480" video="mainVideo" id=subtitle]]
+[[!template text="within their workflow." start="00:10:44.240" video="mainVideo" id=subtitle]]
+[[!template text="So along these lines, then," start="00:10:46.000" video="mainVideo" id=subtitle]]
+[[!template text="descriptive configuration files" start="00:10:48.080" video="mainVideo" id=subtitle]]
+[[!template text="are extremely helpful." start="00:10:50.160" video="mainVideo" id=subtitle]]
+[[!template text="This map, then, of Emacs" start="00:10:53.360" video="mainVideo" id=subtitle]]
+[[!template text="can be considered as a" start="00:10:56.160" video="mainVideo" id=subtitle]]
+[[!template text="frontierless heuristic schema," start="00:10:57.519" video="mainVideo" id=subtitle]]
+[[!template text="borrowing from Trocmé-Fabre." start="00:11:00.399" video="mainVideo" id=subtitle]]
+[[!template text="Frontierless, because we can extend" start="00:11:02.000" video="mainVideo" id=subtitle]]
+[[!template text="our use of Emacs as far as we want." start="00:11:04.080" video="mainVideo" id=subtitle]]
+[[!template text="Heuristic, again, because we're using it" start="00:11:06.320" video="mainVideo" id=subtitle]]
+[[!template text="to solve problems, etc." start="00:11:08.399" video="mainVideo" id=subtitle]]
+[[!template text="This is a free system that extends" start="00:11:10.640" video="mainVideo" id=subtitle]]
+[[!template text="following our own 'paths of desire'," start="00:11:13.360" video="mainVideo" id=subtitle]]
+[[!template text="if I can use that phrase from design." start="00:11:15.920" video="mainVideo" id=subtitle]]
+[[!template text="So it's following our own 'paths of desire'," start="00:11:18.640" video="mainVideo" id=subtitle]]
+[[!template text="but yet it is a shared tool," start="00:11:20.640" video="mainVideo" id=subtitle]]
+[[!template text="so this is an idea of the convivial tool" start="00:11:22.480" video="mainVideo" id=subtitle]]
+[[!template text="to draw on Ivan Illich." start="00:11:26.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Emacs is itself" start="00:11:30.000" video="mainVideo" id=subtitle]]
+[[!template text="a design pattern framework," start="00:11:31.760" video="mainVideo" id=subtitle]]
+[[!template text="so we can visualize this" start="00:11:33.440" video="mainVideo" id=subtitle]]
+[[!template text="through the mind map," start="00:11:35.279" video="mainVideo" id=subtitle]]
+[[!template text="but we can also go back to thinking about" start="00:11:36.640" video="mainVideo" id=subtitle]]
+[[!template text="how Christopher Alexander's work" start="00:11:40.160" video="mainVideo" id=subtitle]]
+[[!template text="inspired Richard Gabriel" start="00:11:42.399" video="mainVideo" id=subtitle]]
+[[!template text="to think about systems of systems" start="00:11:44.240" video="mainVideo" id=subtitle]]
+[[!template text="within software. And he," start="00:11:46.640" video="mainVideo" id=subtitle]]
+[[!template text="drawing on Alexander," start="00:11:49.040" video="mainVideo" id=subtitle]]
+[[!template text="says, well, there is such a thing" start="00:11:50.240" video="mainVideo" id=subtitle]]
+[[!template text="as a &quot;being&quot; of successful software," start="00:11:52.240" video="mainVideo" id=subtitle]]
+[[!template text="if it succeeds in being" start="00:11:55.600" video="mainVideo" id=subtitle]]
+[[!template text="a center of centers," start="00:11:59.519" video="mainVideo" id=subtitle]]
+[[!template text="as we saw before." start="00:12:00.640" video="mainVideo" id=subtitle]]
+[[!template text="So in Emacs, then, we have a system" start="00:12:02.240" video="mainVideo" id=subtitle]]
+[[!template text="that's made up of other systems" start="00:12:04.480" video="mainVideo" id=subtitle]]
+[[!template text="of 'communicating components" start="00:12:06.880" video="mainVideo" id=subtitle]]
+[[!template text="that work together" start="00:12:08.719" video="mainVideo" id=subtitle]]
+[[!template text="to provide a comprehensive set" start="00:12:09.839" video="mainVideo" id=subtitle]]
+[[!template text="of capabilities that can be customized," start="00:12:11.600" video="mainVideo" id=subtitle]]
+[[!template text="specialized, and extended" start="00:12:14.399" video="mainVideo" id=subtitle]]
+[[!template text="to provide more" start="00:12:16.000" video="mainVideo" id=subtitle]]
+[[!template text="or slightly different capabilities' Gabriel." start="00:12:16.959" video="mainVideo" id=subtitle]]
+[[!template text="So if we're not finding what we need" start="00:12:18.959" video="mainVideo" id=subtitle]]
+[[!template text="within the core, we can look for packages" start="00:12:21.200" video="mainVideo" id=subtitle]]
+[[!template text="that allow us to extend in a certain way," start="00:12:25.120" video="mainVideo" id=subtitle]]
+[[!template text="or we write our own," start="00:12:27.519" video="mainVideo" id=subtitle]]
+[[!template text="or we begin to write in Emacs Lisp." start="00:12:28.560" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And speaking of personal customizations," start="00:12:31.680" video="mainVideo" id=subtitle]]
+[[!template text="Emacs can be considered as an extension" start="00:12:34.800" video="mainVideo" id=subtitle]]
+[[!template text="of the as yet unfulfilled promise of" start="00:12:37.839" video="mainVideo" id=subtitle]]
+[[!template text="general computing." start="00:12:40.079" video="mainVideo" id=subtitle]]
+[[!template text="In the 1980s, Michael Crichton wrote" start="00:12:41.600" video="mainVideo" id=subtitle]]
+[[!template text="that it's easy to use computers, which is" start="00:12:44.000" video="mainVideo" id=subtitle]]
+[[!template text="fortunate because everyone's going to" start="00:12:46.320" video="mainVideo" id=subtitle]]
+[[!template text="have to learn." start="00:12:48.000" video="mainVideo" id=subtitle]]
+[[!template text="It's not easy to use computers wisely," start="00:12:49.040" video="mainVideo" id=subtitle]]
+[[!template text="which is unfortunate because" start="00:12:51.440" video="mainVideo" id=subtitle]]
+[[!template text="everyone's going to have to learn." start="00:12:52.880" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is wise computing" start="00:12:54.719" video="mainVideo" id=subtitle]]
+[[!template text="because everyone's Emacs is their own." start="00:12:56.639" video="mainVideo" id=subtitle]]
+[[!template text="We see that it is an exercise" start="00:12:59.600" video="mainVideo" id=subtitle]]
+[[!template text="in heuristics, but while it is complex," start="00:13:01.680" video="mainVideo" id=subtitle]]
+[[!template text="at on some level, we want to remember" start="00:13:05.760" video="mainVideo" id=subtitle]]
+[[!template text="that it can be used easily by anybody," start="00:13:08.000" video="mainVideo" id=subtitle]]
+[[!template text="as often or as seldom as they want," start="00:13:10.240" video="mainVideo" id=subtitle]]
+[[!template text="for the purpose that they are choosing," start="00:13:12.560" video="mainVideo" id=subtitle]]
+[[!template text="and shaped according to their own taste." start="00:13:15.200" video="mainVideo" id=subtitle]]
+[[!template text="So again I'm drawing on Ivan Illich here." start="00:13:17.519" video="mainVideo" id=subtitle]]
+[[!template text="Emacs then champions the human place" start="00:13:20.480" video="mainVideo" id=subtitle]]
+[[!template text="and is a support in our learning" start="00:13:24.880" video="mainVideo" id=subtitle]]
+[[!template text="how to learn." start="00:13:28.800" video="mainVideo" id=subtitle]]
+[[!template text="So now I want to think about" start="00:13:30.639 video="mainVideo" id=subtitle]]
+[[!template text="being inspired by the Emacs design pattern" start="00:13:32.000" video="mainVideo" id=subtitle]]
+[[!template text="and comparing what I think" start="00:13:34.959" video="mainVideo" id=subtitle]]
+[[!template text="I've learned about how Emacs works" start="00:13:37.040" video="mainVideo" id=subtitle]]
+[[!template text="with some research that has been done" start="00:13:40.480" video="mainVideo" id=subtitle]]
+[[!template text="by Philip Guo and his colleagues" start="00:13:43.600" video="mainVideo" id=subtitle]]
+[[!template text="about how technology is being used" start="00:13:46.240" video="mainVideo" id=subtitle]]
+[[!template text="in certain online teaching contexts." start="00:13:47.920" video="mainVideo" id=subtitle]]
+[[!template text="Researchers continue to note" start="00:13:51.120" video="mainVideo" id=subtitle]]
+[[!template text="how the modes of delivery of content" start="00:13:52.800" video="mainVideo" id=subtitle]]
+[[!template text="continue to change in terms of" start="00:13:55.200" video="mainVideo" id=subtitle]]
+[[!template text="what is considered effective" start="00:13:56.880" video="mainVideo" id=subtitle]]
+[[!template text="and what is not." start="00:13:58.240" video="mainVideo" id=subtitle]]
+[[!template text="The talking head was considered effective," start="00:13:59.600" video="mainVideo" id=subtitle]]
+[[!template text="for example. Lectures needed to be" start="00:14:02.000" video="mainVideo" id=subtitle]]
+[[!template text="broken down into shorter segments." start="00:14:05.360" video="mainVideo" id=subtitle]]
+[[!template text="But I would say that by using Emacs" start="00:14:07.760" video="mainVideo" id=subtitle]]
+[[!template text="and by working within the Emacs ecosystem," start="00:14:11.360" video="mainVideo" id=subtitle]]
+[[!template text="one is already used to" start="00:14:14.320" video="mainVideo" id=subtitle]]
+[[!template text="'re-presenting' one's knowledge" start="00:14:16.519" video="mainVideo" id=subtitle]]
+[[!template text="in a variety of different ways." start="00:14:18.959" video="mainVideo" id=subtitle]]
+[[!template text="So if we are called tomorrow" start="00:14:20.800" video="mainVideo" id=subtitle]]
+[[!template text="to deliver in a different way," start="00:14:22.320" video="mainVideo" id=subtitle]]
+[[!template text="we're already used to" start="00:14:24.240" video="mainVideo" id=subtitle]]
+[[!template text="thinking about this within Emacs." start="00:14:26.240" video="mainVideo" id=subtitle]]
+[[!template text="So, for example," start="00:14:28.399" video="mainVideo" id=subtitle]]
+[[!template text="merely by changing a header argument," start="00:14:30.639" video="mainVideo" id=subtitle]]
+[[!template text="one can change the way in which" start="00:14:32.399" video="mainVideo" id=subtitle]]
+[[!template text="text in a file is executed," start="00:14:34.880" video="mainVideo" id=subtitle]]
+[[!template text="so we see then this easy iteration" start="00:14:36.480" video="mainVideo" id=subtitle]]
+[[!template text="within Emacs. We can also think about" start="00:14:39.600" video="mainVideo" id=subtitle]]
+[[!template text="how Emacs can be considered in terms of" start="00:14:42.160" video="mainVideo" id=subtitle]]
+[[!template text="a help for developing rhetorical 'topoi'," start="00:14:45.760" video="mainVideo" id=subtitle]]
+[[!template text="'topoi' being places where we find things," start="00:14:49.839" video="mainVideo" id=subtitle]]
+[[!template text="places where we find ideas," start="00:14:52.240" video="mainVideo" id=subtitle]]
+[[!template text="because we can circulate" start="00:14:54.480" video="mainVideo" id=subtitle]]
+[[!template text="among the different tasks and texts" start="00:14:56.320" video="mainVideo" id=subtitle]]
+[[!template text="that we are working on" start="00:14:58.959" video="mainVideo" id=subtitle]]
+[[!template text="within Emacs seamlessly." start="00:14:59.920" video="mainVideo" id=subtitle]]
+[[!template text="This increases the likelihood" start="00:15:01.920" video="mainVideo" id=subtitle]]
+[[!template text="that we can gain inspiration" start="00:15:04.000" video="mainVideo" id=subtitle]]
+[[!template text="from the collage of different ideas" start="00:15:07.519" video="mainVideo" id=subtitle]]
+[[!template text="that bring out new ideas." start="00:15:11.440" video="mainVideo" id=subtitle]]
+[[!template text="At least this is how" start="00:15:14.079" video="mainVideo" id=subtitle]]
+[[!template text="I've experienced Emacs," start="00:15:14.959" video="mainVideo" id=subtitle]]
+[[!template text="if I may add that anecdotal observation." start="00:15:16.160" video="mainVideo" id=subtitle]]
+[[!template text="And speaking of bringing out ideas," start="00:15:19.279" video="mainVideo" id=subtitle]]
+[[!template text="we see how changing Emacs functionalities" start="00:15:22.480" video="mainVideo" id=subtitle]]
+[[!template text="can help us bring out ideas" start="00:15:26.079" video="mainVideo" id=subtitle]]
+[[!template text="for example, through how we can" start="00:15:27.680" video="mainVideo" id=subtitle]]
+[[!template text="use PlantUML easier today" start="00:15:30.079" video="mainVideo" id=subtitle]]
+[[!template text="than ever before, so we can now include" start="00:15:32.000" video="mainVideo" id=subtitle]]
+[[!template text="mental maps within our Emacs files" start="00:15:35.519" video="mainVideo" id=subtitle]]
+[[!template text="if we want to, but also" start="00:15:38.880" video="mainVideo" id=subtitle]]
+[[!template text="if we're thinking about Emacs helping us" start="00:15:40.800" video="mainVideo" id=subtitle]]
+[[!template text="both remember the material" start="00:15:45.120" video="mainVideo" id=subtitle]]
+[[!template text="that we're working with" start="00:15:47.600" video="mainVideo" id=subtitle]]
+[[!template text="and 're-present' it," start="00:15:48.719" video="mainVideo" id=subtitle]]
+[[!template text="we can think of it" start="00:15:50.000" video="mainVideo" id=subtitle]]
+[[!template text="in terms of its archival functions," start="00:15:51.040" video="mainVideo" id=subtitle]]
+[[!template text="So we can see an example of this" start="00:15:53.120" video="mainVideo" id=subtitle]]
+[[!template text="in Sacha Chua's init," start="00:15:54.880" video="mainVideo" id=subtitle]]
+[[!template text="where she is using Emacs" start="00:15:57.040" video="mainVideo" id=subtitle]]
+[[!template text="to manage her recent sketches." start="00:15:59.120" video="mainVideo" id=subtitle]]
+[[!template text="This would be really useful" start="00:16:02.399" video="mainVideo" id=subtitle]]
+[[!template text="for implementation" start="00:16:03.839" video="mainVideo" id=subtitle]]
+[[!template text="in terms of what the researchers" start="00:16:06.000" video="mainVideo" id=subtitle]]
+[[!template text="(Philip Guo and his colleagues) discovered" start="00:16:08.160" video="mainVideo" id=subtitle]]
+[[!template text="with regards to how today" start="00:16:10.480" video="mainVideo" id=subtitle]]
+[[!template text="Khan-style slides are considered" start="00:16:12.656" video="mainVideo" id=subtitle]]
+[[!template text="more effective than traditional slides," start="00:16:14.880" video="mainVideo" id=subtitle]]
+[[!template text="because if one is able to integrate" start="00:16:17.920" video="mainVideo" id=subtitle]]
+[[!template text="the other kinds of sketches" start="00:16:20.160" video="mainVideo" id=subtitle]]
+[[!template text="that one has been doing within Emacs -" start="00:16:21.519" video="mainVideo" id=subtitle]]
+[[!template text="and therefore have them at hand" start="00:16:23.680" video="mainVideo" id=subtitle]]
+[[!template text="more easily, it would be easier to" start="00:16:25.999" video="mainVideo" id=subtitle]]
+[[!template text="'re-present' this material as needed" start="00:16:27.999" video="mainVideo" id=subtitle]]
+[[!template text="in the ever-changing context of the classroom." start="00:16:30.800" video="mainVideo" id=subtitle]]
+[[!template text="We can see from this example" start="00:16:33.600" video="mainVideo" id=subtitle]]
+[[!template text="of Sacha Chua's init that we learn" start="00:16:35.519" video="mainVideo" id=subtitle]]
+[[!template text="by following the traces" start="00:16:38.320" video="mainVideo" id=subtitle]]
+[[!template text="left by others in the community." start="00:16:39.999" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So we were saying then that" start="00:16:41.999" video="mainVideo" id=subtitle]]
+[[!template text="Emacs extends outwards" start="00:16:43.279" video="mainVideo" id=subtitle]]
+[[!template text="through these social branches," start="00:16:45.040" video="mainVideo" id=subtitle]]
+[[!template text="and indeed we can speak" start="00:16:46.479" video="mainVideo" id=subtitle]]
+[[!template text="of the grammar of interaction," start="00:16:48.560" video="mainVideo" id=subtitle]]
+[[!template text="that we benefit from by being" start="00:16:50.640" video="mainVideo" id=subtitle]]
+[[!template text="a member of the Emacs community." start="00:16:52.320" video="mainVideo" id=subtitle]]
+[[!template text="And this wonderful phrase comes to us" start="00:16:54.720" video="mainVideo" id=subtitle]]
+[[!template text="from a book that was co-edited" start="00:16:56.960" video="mainVideo" id=subtitle]]
+[[!template text="by our very own former Org father," start="00:16:58.880" video="mainVideo" id=subtitle]]
+[[!template text="Bastien Guerry, in an interview" start="00:17:01.736" video="mainVideo" id=subtitle]]
+[[!template text="that he led with Nicolas Gaume Andler & Guerry." start="00:17:03.680" video="mainVideo" id=subtitle]]
+[[!template text="Nicolas Gaume was explaining" start="00:17:05.359" video="mainVideo" id=subtitle]]
+[[!template text="how in video games, we see our character" start="00:17:07.040" video="mainVideo" id=subtitle]]
+[[!template text="and compare our character" start="00:17:10.640" video="mainVideo" id=subtitle]]
+[[!template text="to other characters," start="00:17:12.160" video="mainVideo" id=subtitle]]
+[[!template text="and we watch how other characters" start="00:17:14.160" video="mainVideo" id=subtitle]]
+[[!template text="make decisions," start="00:17:16.080" video="mainVideo" id=subtitle]]
+[[!template text="and the outcomes of these decisions," start="00:17:17.040" video="mainVideo" id=subtitle]]
+[[!template text="and their trajectories in the game," start="00:17:19.040" video="mainVideo" id=subtitle]]
+[[!template text="and then we compare where we are" start="00:17:21.440" video="mainVideo" id=subtitle]]
+[[!template text="with respect to this," start="00:17:23.119" video="mainVideo" id=subtitle]]
+[[!template text="and by having this comparison," start="00:17:24.720" video="mainVideo" id=subtitle]]
+[[!template text="it helps us chart out our own path." start="00:17:27.119" video="mainVideo" id=subtitle]]
+[[!template text="So we can experience" start="00:17:29.840" video="mainVideo" id=subtitle]]
+[[!template text="this grammar of interaction" start="00:17:31.280" video="mainVideo" id=subtitle]]
+[[!template text="within Emacs every time we compare" start="00:17:32.800" video="mainVideo" id=subtitle]]
+[[!template text="our config with that of others." start="00:17:35.200" video="mainVideo" id=subtitle]]
+[[!template text="Emacs further champions the social element" start="00:17:38.720" video="mainVideo" id=subtitle]]
+[[!template text="through co-individuation, which is" start="00:17:41.760" video="mainVideo" id=subtitle]]
+[[!template text="a term coined by Bernard Stiegler." start="00:17:43.920" video="mainVideo" id=subtitle]]
+[[!template text="This means the meaning that is known" start="00:17:46.880" video="mainVideo" id=subtitle]]
+[[!template text="and shared by other individuals." start="00:17:48.720" video="mainVideo" id=subtitle]]
+[[!template text="What is it that we know and share" start="00:17:50.960" video="mainVideo" id=subtitle]]
+[[!template text="within Emacs? It is how to" start="00:17:52.560" video="mainVideo" id=subtitle]]
+[[!template text="improve our lives" start="00:17:54.560" video="mainVideo" id=subtitle]]
+[[!template text="through customizing Emacs" start="00:17:55.600" video="mainVideo" id=subtitle]]
+[[!template text="in specific ways. So if one person" start="00:17:57.280" video="mainVideo" id=subtitle]]
+[[!template text="reaches the apotheosis" start="00:18:00.479" video="mainVideo" id=subtitle]]
+[[!template text="of individuation," start="00:18:03.040" video="mainVideo" id=subtitle]]
+[[!template text="and they're living the life" start="00:18:04.239" video="mainVideo" id=subtitle]]
+[[!template text="they dreamed of" start="00:18:05.920" video="mainVideo" id=subtitle]]
+[[!template text="through their Emacs use," start="00:18:07.760" video="mainVideo" id=subtitle]]
+[[!template text="they can share this information" start="00:18:08.960" video="mainVideo" id=subtitle]]
+[[!template text="with somebody else" start="00:18:10.720" video="mainVideo" id=subtitle]]
+[[!template text="who too can come to realize themselves" start="00:18:11.680" video="mainVideo" id=subtitle]]
+[[!template text="in this way." start="00:18:14.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Without the social milieu," start="00:18:15.920" video="mainVideo" id=subtitle]]
+[[!template text="without this attention" start="00:18:17.280" video="mainVideo" id=subtitle]]
+[[!template text="to the human element," start="00:18:18.880" video="mainVideo" id=subtitle]]
+[[!template text="the technical milieu inevitably becomes" start="00:18:21.040" video="mainVideo" id=subtitle]]
+[[!template text="a negative externality" start="00:18:23.600" video="mainVideo" id=subtitle]]
+[[!template text="which is a philosophical problem." start="00:18:24.414" video="mainVideo" id=subtitle]]
+[[!template text="Here I'm drawing on Bernard Stiegler." start="00:18:25.760" video="mainVideo" id=subtitle]]
+[[!template text="What does this mean? This means" start="00:18:27.840" video="mainVideo" id=subtitle]]
+[[!template text="where knowledge becomes automaticized," start="00:18:29.680" video="mainVideo" id=subtitle]]
+[[!template text="it becomes a closed" start="00:18:32.400" video="mainVideo" id=subtitle]]
+[[!template text="and self-referential system." start="00:18:33.760" video="mainVideo" id=subtitle]]
+[[!template text="Because it's self-referential and closed," start="00:18:36.560" video="mainVideo" id=subtitle]]
+[[!template text="there is no need for any human input," start="00:18:39.520" video="mainVideo" id=subtitle]]
+[[!template text="so the human within this system" start="00:18:41.999" video="mainVideo" id=subtitle]]
+[[!template text="turns into a servant." start="00:18:43.600" video="mainVideo" id=subtitle]]
+[[!template text="By contrast, by using human-centered Emacs," start="00:18:46.080" video="mainVideo" id=subtitle]]
+[[!template text="we are able to take care of our neighbors." start="00:18:50.800" video="mainVideo" id=subtitle]]
+[[!template text="We can write extensions for them." start="00:18:53.520" video="mainVideo" id=subtitle]]
+[[!template text="We can help each other on the forums." start="00:18:55.840" video="mainVideo" id=subtitle]]
+[[!template text="We can even teach just one more person" start="00:18:58.560" video="mainVideo" id=subtitle]]
+[[!template text="how to use Emacs." start="00:19:00.800" video="mainVideo" id=subtitle]]
+[[!template text="And this idea comes from Ivan Illich" start="00:19:02.640" video="mainVideo" id=subtitle]]
+[[!template text="who extends it to say" start="00:19:04.880" video="mainVideo" id=subtitle]]
+[[!template text="that by taking care of our neighbors" start="00:19:06.800" video="mainVideo" id=subtitle]]
+[[!template text="in this way," start="00:19:08.880" video="mainVideo" id=subtitle]]
+[[!template text="this enables us to excel" start="00:19:09.680" video="mainVideo" id=subtitle]]
+[[!template text="at using the best available tools." start="00:19:11.840" video="mainVideo" id=subtitle]]
+[[!template text="The tool here being Emacs." start="00:19:13.999" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The community aspect of Emacs" start="00:19:16.239" video="mainVideo" id=subtitle]]
+[[!template text="can also be seen" start="00:19:19.200" video="mainVideo" id=subtitle]]
+[[!template text="in how the core of Emacs itself" start="00:19:20.320" video="mainVideo" id=subtitle]]
+[[!template text="is evolving. So just like we are" start="00:19:22.720" video="mainVideo" id=subtitle]]
+[[!template text="configuring and programming Emacs" start="00:19:25.040" video="mainVideo" id=subtitle]]
+[[!template text="while we are using it," start="00:19:27.119" video="mainVideo" id=subtitle]]
+[[!template text="Emacs, too, continues to develop" start="00:19:28.720" video="mainVideo" id=subtitle]]
+[[!template text="as the core expands." start="00:19:32.239" video="mainVideo" id=subtitle]]
+[[!template text="So in this, too, we see how Emacs" start="00:19:34.560" video="mainVideo" id=subtitle]]
+[[!template text="is a model of design pattern learning" start="00:19:36.880" video="mainVideo" id=subtitle]]
+[[!template text="that we can be inspired from," start="00:19:39.680" video="mainVideo" id=subtitle]]
+[[!template text="and the fact that people" start="00:19:42.320" video="mainVideo" id=subtitle]]
+[[!template text="from the Emacs community" start="00:19:44.960" video="mainVideo" id=subtitle]]
+[[!template text="are able to contribute to the core" start="00:19:46.320" video="mainVideo" id=subtitle]]
+[[!template text="brings emphasis to the community role" start="00:19:49.280" video="mainVideo" id=subtitle]]
+[[!template text="in this design pattern." start="00:19:52.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So at the beginning, we were saying" start="00:19:53.999" video="mainVideo" id=subtitle]]
+[[!template text="we're interested" start="00:19:55.440" video="mainVideo" id=subtitle]]
+[[!template text="in the complex assemblage," start="00:19:56.239" video="mainVideo" id=subtitle]]
+[[!template text="not just of activities and tools," start="00:19:57.680" video="mainVideo" id=subtitle]]
+[[!template text="but also of people." start="00:19:59.520" video="mainVideo" id=subtitle]]
+[[!template text="So here we are talking about" start="00:20:00.960" video="mainVideo" id=subtitle]]
+[[!template text="an 'Emacs community'." start="00:20:03.119" video="mainVideo" id=subtitle]]
+[[!template text="This is also thanks to" start="00:20:04.720" video="mainVideo" id=subtitle]]
+[[!template text="the selfless work of people" start="00:20:06.880" video="mainVideo" id=subtitle]]
+[[!template text="like Sacha Chua, or blog rings" start="00:20:08.560" video="mainVideo" id=subtitle]]
+[[!template text="such as Planet Emacs Life" start="00:20:11.999" video="mainVideo" id=subtitle]]
+[[!template text="that bring us together" start="00:20:13.760" video="mainVideo" id=subtitle]]
+[[!template text="so that we truly can say" start="00:20:14.960" video="mainVideo" id=subtitle]]
+[[!template text="that there is a community." start="00:20:16.880" video="mainVideo" id=subtitle]]
+[[!template text="This conference is an example of this:" start="00:20:18.479" video="mainVideo" id=subtitle]]
+[[!template text="and thank you to the conference organizers." start="00:20:20.080" video="mainVideo" id=subtitle]]
+[[!template text="But this community," start="00:20:23.440" video="mainVideo" id=subtitle]]
+[[!template text="because of the free core," start="00:20:24.880" video="mainVideo" id=subtitle]]
+[[!template text="allows for there to be" start="00:20:28.640" video="mainVideo" id=subtitle]]
+[[!template text="different viewpoints" start="00:20:30.160" video="mainVideo" id=subtitle]]
+[[!template text="within the community." start="00:20:31.119" video="mainVideo" id=subtitle]]
+[[!template text="One thing that I've noticed" start="00:20:32.320" video="mainVideo" id=subtitle]]
+[[!template text="about the Emacs community" start="00:20:33.440" video="mainVideo" id=subtitle]]
+[[!template text="is that there are sometimes even" start="00:20:34.880" video="mainVideo" id=subtitle]]
+[[!template text="competing views within the community." start="00:20:36.320" video="mainVideo" id=subtitle]]
+[[!template text="This can be considered" start="00:20:38.880" video="mainVideo" id=subtitle]]
+[[!template text="proof of concept of systems thinker" start="00:20:40.160" video="mainVideo" id=subtitle]]
+[[!template text="and philosopher Edgar Morin's idea" start="00:20:42.239" video="mainVideo" id=subtitle]]
+[[!template text="of a 'cognitive democracy'," start="00:20:44.479" video="mainVideo" id=subtitle]]
+[[!template text="which is to say," start="00:20:46.720" video="mainVideo" id=subtitle]]
+[[!template text="a community that is nourished" start="00:20:48.160" video="mainVideo" id=subtitle]]
+[[!template text="by antagonisms" start="00:20:50.880" video="mainVideo" id=subtitle]]
+[[!template text="while also regulating them." start="00:20:52.320" video="mainVideo" id=subtitle]]
+[[!template text="The &quot;being&quot; of this" start="00:20:55.840" video="mainVideo" id=subtitle]]
+[[!template text="very special community," start="00:20:57.280" video="mainVideo" id=subtitle]]
+[[!template text="then, very importantly," start="00:20:58.560" video="mainVideo" id=subtitle]]
+[[!template text="stems from how at the center," start="00:21:01.119" video="mainVideo" id=subtitle]]
+[[!template text="we have free software" start="00:21:03.920" video="mainVideo" id=subtitle]]
+[[!template text="that allows for this range of difference" start="00:21:05.999" video="mainVideo" id=subtitle]]
+[[!template text="and range of extensibility to exist" start="00:21:08.720" video="mainVideo" id=subtitle]]
+[[!template text="even within the community." start="00:21:11.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, by way of a conclusion," start="00:21:13.599" video="mainVideo" id=subtitle]]
+[[!template text="we can think of Emacs" start="00:21:16.880" video="mainVideo" id=subtitle]]
+[[!template text="as the center of centers that expands," start="00:21:18.080" video="mainVideo" id=subtitle]]
+[[!template text="that is relational and free." start="00:21:21.359" video="mainVideo" id=subtitle]]
+[[!template text="Only in some systems, we should add," start="00:21:24.160" video="mainVideo" id=subtitle]]
+[[!template text="does this &quot;being&quot; emerge." start="00:21:27.280" video="mainVideo" id=subtitle]]
+[[!template text="So going back to Richard Gabriel," start="00:21:28.720" video="mainVideo" id=subtitle]]
+[[!template text="just to champion Emacs one more time" start="00:21:31.040" video="mainVideo" id=subtitle]]
+[[!template text="before we say goodbye:" start="00:21:32.960" video="mainVideo" id=subtitle]]
+[[!template text="only in some systems," start="00:21:34.400" video="mainVideo" id=subtitle]]
+[[!template text="some software systems," start="00:21:35.599" video="mainVideo" id=subtitle]]
+[[!template text="does a system succeed" start="00:21:36.640" video="mainVideo" id=subtitle]]
+[[!template text="in becoming the center" start="00:21:38.960" video="mainVideo" id=subtitle]]
+[[!template text="of all of the other centers" start="00:21:40.080" video="mainVideo" id=subtitle]]
+[[!template text="and become a framework" start="00:21:41.680" video="mainVideo" id=subtitle]]
+[[!template text="that can be used and reused," start="00:21:43.920" video="mainVideo" id=subtitle]]
+[[!template text="which gives systems and objects" start="00:21:45.520" video="mainVideo" id=subtitle]]
+[[!template text="their spirit." start="00:21:47.840" video="mainVideo" id=subtitle]]
+[[!template text="So Emacs is being used and reused" start="00:21:48.720" video="mainVideo" id=subtitle]]
+[[!template text="through these packages," start="00:21:51.520" video="mainVideo" id=subtitle]]
+[[!template text="and it gives to them their spirit." start="00:21:53.599" video="mainVideo" id=subtitle]]
+[[!template text="The spirit, I would argue," start="00:21:55.119" video="mainVideo" id=subtitle]]
+[[!template text="is in part this extensibility," start="00:21:56.320" video="mainVideo" id=subtitle]]
+[[!template text="and sometimes even difference." start="00:21:59.040" video="mainVideo" id=subtitle]]
+[[!template text="Emacs values the value cf. Stiegler" start="00:22:01.520" video="mainVideo" id=subtitle]]
+[[!template text="of the freedom to create," start="00:22:03.120" video="mainVideo" id=subtitle]]
+[[!template text="use, and share cf. Illich," start="00:22:04.240" video="mainVideo" id=subtitle]]
+[[!template text="so we can be inspired" start="00:22:05.680" video="mainVideo" id=subtitle]]
+[[!template text="by this design pattern." start="00:22:06.960" video="mainVideo" id=subtitle]]
+[[!template text="It is... It rallies" start="00:22:09.119" video="mainVideo" id=subtitle]]
+[[!template text="an autonomous designer mindset" start="00:22:11.359" video="mainVideo" id=subtitle]]
+[[!template text="and encourages and supports us" start="00:22:14.320" video="mainVideo" id=subtitle]]
+[[!template text="on our path towards" start="00:22:16.800" video="mainVideo" id=subtitle]]
+[[!template text="design pattern iteration." start="00:22:18.400" video="mainVideo" id=subtitle]]
+[[!template text="It is not a 'flattened' contextualization." start="00:22:20.960" video="mainVideo" id=subtitle]]
+[[!template text="It permits ongoing learning," start="00:22:23.359" video="mainVideo" id=subtitle]]
+[[!template text="reassembling contexts," start="00:22:25.359" video="mainVideo" id=subtitle]]
+[[!template text="and an adaptable design pattern" start="00:22:27.040" video="mainVideo" id=subtitle]]
+[[!template text="extensibility." start="00:22:29.520" video="mainVideo" id=subtitle]]
+[[!template text="Ultimately, it helps us create" start="00:22:31.520" video="mainVideo" id=subtitle]]
+[[!template text="circumstances where learning is coherent" start="00:22:33.200" video="mainVideo" id=subtitle]]
+[[!template text="with what is valued in the rest of life:" start="00:22:35.520" video="mainVideo" id=subtitle]]
+[[!template text="pleasure, growth, and transformation." start="00:22:37.920" video="mainVideo" id=subtitle]]
+[[!template text="So thank you, on that note," start="00:22:41.520" video="mainVideo" id=subtitle]]
+[[!template text="to all of the developers, maintainers," start="00:22:43.200" video="mainVideo" id=subtitle]]
+[[!template text="contributors, and community" start="00:22:45.280" video="mainVideo" id=subtitle]]
+[[!template text="for championing our freedom" start="00:22:47.119" video="mainVideo" id=subtitle]]
+[[!template text="to co-individuate complex design patterns" start="00:22:48.560" video="mainVideo" id=subtitle]]
+[[!template text="the way we want to, so we, too," start="00:22:51.760" video="mainVideo" id=subtitle]]
+[[!template text="can leave original traces, if we want to." start="00:22:54.320" video="mainVideo" id=subtitle]]
+[[!template text="Thank you very much." start="00:22:57.359" video="mainVideo" id=subtitle]]
+[[!template text="[captions by sachac]" start="00:23:00.003" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/professional.md b/2021/captions/professional.md
new file mode 100644
index 00000000..de4948ee
--- /dev/null
+++ b/2021/captions/professional.md
@@ -0,0 +1,293 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello everyone! My name is Philip Beadling." start="00:00:02.879" video="mainVideo" id=subtitle]]
+[[!template text="Just to give you a bit of background," start="00:00:05.424" video="mainVideo" id=subtitle]]
+[[!template text="I'm the enterprise architect" start="00:00:06.944" video="mainVideo" id=subtitle]]
+[[!template text="in a company called Quantile Technologies." start="00:00:08.400" video="mainVideo" id=subtitle]]
+[[!template text="I've been using Emacs" start="00:00:10.384" video="mainVideo" id=subtitle]]
+[[!template text="certainly for the last four or five years" start="00:00:12.799" video="mainVideo" id=subtitle]]
+[[!template text="as part of my day-to-day workflow," start="00:00:14.560" video="mainVideo" id=subtitle]]
+[[!template text="but I've used it on and off" start="00:00:16.800" video="mainVideo" id=subtitle]]
+[[!template text="for the last 20 years" start="00:00:18.080" video="mainVideo" id=subtitle]]
+[[!template text="depending on the jobs" start="00:00:19.000" video="mainVideo" id=subtitle]]
+[[!template text="or the task at hand." start="00:00:21.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now, today I'm here in a personal capacity" start="00:00:22.423" video="mainVideo" id=subtitle]]
+[[!template text="to talk about a use I had" start="00:00:24.800" video="mainVideo" id=subtitle]]
+[[!template text="for Emacs last year" start="00:00:27.360" video="mainVideo" id=subtitle]]
+[[!template text="where I had to record" start="00:00:28.440" video="mainVideo" id=subtitle]]
+[[!template text="my continuous professional development," start="00:00:31.000" video="mainVideo" id=subtitle]]
+[[!template text="and I was required to be audited" start="00:00:32.800" video="mainVideo" id=subtitle]]
+[[!template text="by my professional body on it." start="00:00:35.320" video="mainVideo" id=subtitle]]
+[[!template text="My CPD record is a bit of a mess," start="00:00:37.280" video="mainVideo" id=subtitle]]
+[[!template text="or certainly was. It was over" start="00:00:40.240" video="mainVideo" id=subtitle]]
+[[!template text="various different services and systems" start="00:00:42.640" video="mainVideo" id=subtitle]]
+[[!template text="that have been provided to me" start="00:00:44.640" video="mainVideo" id=subtitle]]
+[[!template text="by previous employers." start="00:00:46.160" video="mainVideo" id=subtitle]]
+[[!template text="And, I had bits of it in Excel spreadsheets," start="00:00:47.920" video="mainVideo" id=subtitle]]
+[[!template text="and I was looking for like" start="00:00:51.824" video="mainVideo" id=subtitle]]
+[[!template text="a one single golden source" start="00:00:52.640" video="mainVideo" id=subtitle]]
+[[!template text="where I could store it all" start="00:00:54.200" video="mainVideo" id=subtitle]]
+[[!template text="and use in the future." start="00:00:55.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, I had a look online." start="00:00:56.719" video="mainVideo" id=subtitle]]
+[[!template text="I didn't find anything I'd like," start="00:00:59.024" video="mainVideo" id=subtitle]]
+[[!template text="so I decided I would use Emacs," start="00:00:59.824" video="mainVideo" id=subtitle]]
+[[!template text="and I quickly came to the conclusion" start="00:01:01.885" video="mainVideo" id=subtitle]]
+[[!template text="that using Org mode" start="00:01:03.840" video="mainVideo" id=subtitle]]
+[[!template text="was a nice fit for this," start="00:01:05.480" video="mainVideo" id=subtitle]]
+[[!template text="you know, both the TODO lists" start="00:01:07.040" video="mainVideo" id=subtitle]]
+[[!template text="and the properties" start="00:01:08.160" video="mainVideo" id=subtitle]]
+[[!template text="seem to fit nicely" start="00:01:09.080" video="mainVideo" id=subtitle]]
+[[!template text="with building a very basic database," start="00:01:10.920" video="mainVideo" id=subtitle]]
+[[!template text="which is what in effect this is," start="00:01:12.890" video="mainVideo" id=subtitle]]
+[[!template text="what this is." start="00:01:14.159" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Without further ado," start="00:01:16.159" video="mainVideo" id=subtitle]]
+[[!template text="I will start by just downloading." start="00:01:18.000" video="mainVideo" id=subtitle]]
+[[!template text="This is available on my public Git," start="00:01:22.640" video="mainVideo" id=subtitle]]
+[[!template text="handle is falloutfill," start="00:01:24.640" video="mainVideo" id=subtitle]]
+[[!template text="and it's under a project called Misc." start="00:01:26.160" video="mainVideo" id=subtitle]]
+[[!template text="It's just a single file called cpd.org," start="00:01:28.146" video="mainVideo" id=subtitle]]
+[[!template text="I can stick that in the chat" start="00:01:33.200" video="mainVideo" id=subtitle]]
+[[!template text="when we actually do this live," start="00:01:35.080" video="mainVideo" id=subtitle]]
+[[!template text="so that people will have a link to it." start="00:01:36.280" video="mainVideo" id=subtitle]]
+[[!template text="So, I'll start this up." start="00:01:38.532" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay. To start with, I am just going to" start="00:01:41.119" video="mainVideo" id=subtitle]]
+[[!template text="close down various Lisp stuff," start="00:01:44.560" video="mainVideo" id=subtitle]]
+[[!template text="and just give you a demo of" start="00:01:46.826" video="mainVideo" id=subtitle]]
+[[!template text="how it actually works." start="00:01:48.566" video="mainVideo" id=subtitle]]
+[[!template text="Let's go up here." start="00:01:50.560" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so, basically to make this work," start="00:01:55.040" video="mainVideo" id=subtitle]]
+[[!template text="the way I subdivide it" start="00:01:57.205" video="mainVideo" id=subtitle]]
+[[!template text="is that I would have" start="00:01:58.640" video="mainVideo" id=subtitle]]
+[[!template text="professional goals," start="00:01:59.200" video="mainVideo" id=subtitle]]
+[[!template text="and professional goals" start="00:02:00.200" video="mainVideo" id=subtitle]]
+[[!template text="would be made up of activities," start="00:02:01.040" video="mainVideo" id=subtitle]]
+[[!template text="and each of those activities" start="00:02:02.703" video="mainVideo" id=subtitle]]
+[[!template text="would contribute to the goal." start="00:02:03.741" video="mainVideo" id=subtitle]]
+[[!template text="So, in order to represent this," start="00:02:05.917" video="mainVideo" id=subtitle]]
+[[!template text="this is just a nested TODO list" start="00:02:07.713" video="mainVideo" id=subtitle]]
+[[!template text="in Emacs Org mode." start="00:02:10.000" video="mainVideo" id=subtitle]]
+[[!template text="I sort of change things like the naming," start="00:02:12.800" video="mainVideo" id=subtitle]]
+[[!template text="Pending, In-Progress and Complete" start="00:02:16.068" video="mainVideo" id=subtitle]]
+[[!template text="rather than TODO, DONE because" start="00:02:18.247" video="mainVideo" id=subtitle]]
+[[!template text="that's more like what my professional" start="00:02:19.440" video="mainVideo" id=subtitle]]
+[[!template text="body likes to categorize things," start="00:02:21.360" video="mainVideo" id=subtitle]]
+[[!template text="but essentially it's the same thing." start="00:02:23.244" video="mainVideo" id=subtitle]]
+[[!template text="So, I've got an Org capture template" start="00:02:25.315" video="mainVideo" id=subtitle]]
+[[!template text="or two Org capture templates" start="00:02:28.212" video="mainVideo" id=subtitle]]
+[[!template text="in order to grab this information," start="00:02:29.499" video="mainVideo" id=subtitle]]
+[[!template text="and then stick it in the TODO list," start="00:02:31.843" video="mainVideo" id=subtitle]]
+[[!template text="and also tabulate it using column view." start="00:02:33.645" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I'll start off just by showing you" start="00:02:36.540" video="mainVideo" id=subtitle]]
+[[!template text="an example here." start="00:02:39.304" video="mainVideo" id=subtitle]]
+[[!template text="So, what I'm going to do is" start="00:02:40.090" video="mainVideo" id=subtitle]]
+[[!template text="create a new goal," start="00:02:40.879" video="mainVideo" id=subtitle]]
+[[!template text="and then under it," start="00:02:41.965" video="mainVideo" id=subtitle]]
+[[!template text="I will create a couple of activities" start="00:02:42.849" video="mainVideo" id=subtitle]]
+[[!template text="relevant to that goal." start="00:02:44.959" video="mainVideo" id=subtitle]]
+[[!template text="For the goal I'm going to have, let's say," start="00:02:46.511" video="mainVideo" id=subtitle]]
+[[!template text="something relevant," start="00:02:49.360" video="mainVideo" id=subtitle]]
+[[!template text="so, 'Improve Public Speaking'," start="00:02:50.342" video="mainVideo" id=subtitle]]
+[[!template text="and then I'm going to say, the type" start="00:02:54.000" video="mainVideo" id=subtitle]]
+[[!template text="of that goal is, well, it's a 'Presentation'" start="00:02:55.680" video="mainVideo" id=subtitle]]
+[[!template text="I suppose. The outcome of that goal is," start="00:02:58.000" video="mainVideo" id=subtitle]]
+[[!template text="well, I don't want to go into too much" start="00:03:01.200" video="mainVideo" id=subtitle]]
+[[!template text="detail here, but it would be, you know," start="00:03:02.560" video="mainVideo" id=subtitle]]
+[[!template text="'Get feedback from colleagues', and so forth." start="00:03:06.069" video="mainVideo" id=subtitle]]
+[[!template text="I won't fully and completely inaudible" start="00:03:09.140" video="mainVideo" id=subtitle]]
+[[!template text="about what the goal was." start="00:03:11.200" video="mainVideo" id=subtitle]]
+[[!template text="Now, the retrospective value," start="00:03:12.538" video="mainVideo" id=subtitle]]
+[[!template text="my understanding is that" start="00:03:14.067" video="mainVideo" id=subtitle]]
+[[!template text="you fill that in afterwards," start="00:03:15.318" video="mainVideo" id=subtitle]]
+[[!template text="so you want to talk after completing the" start="00:03:17.028" video="mainVideo" id=subtitle]]
+[[!template text="action, so this is not relevant for the day." start="00:03:18.800" video="mainVideo" id=subtitle]]
+[[!template text="I'm just going to leave it blank," start="00:03:21.213" video="mainVideo" id=subtitle]]
+[[!template text="although I'm sure you can imagine" start="00:03:23.120" video="mainVideo" id=subtitle]]
+[[!template text="I could say: having completed this action" start="00:03:24.541" video="mainVideo" id=subtitle]]
+[[!template text="I felt that, blah blah blah, and so forth." start="00:03:26.428" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so I will add that, and then you" start="00:03:28.959" video="mainVideo" id=subtitle]]
+[[!template text="will see that I now have a new goal," start="00:03:31.360" video="mainVideo" id=subtitle]]
+[[!template text="both in my column view and in my TODO list," start="00:03:33.760" video="mainVideo" id=subtitle]]
+[[!template text="and just to make it a little bit" start="00:03:36.048" video="mainVideo" id=subtitle]]
+[[!template text="realistic, I'm going to then add two" start="00:03:38.159" video="mainVideo" id=subtitle]]
+[[!template text="activities to that." start="00:03:39.920" video="mainVideo" id=subtitle]]
+[[!template text="When I come in to add an activity," start="00:03:41.332" video="mainVideo" id=subtitle]]
+[[!template text="I have to select a goal." start="00:03:43.433" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to select 'Improve Public Speaking'." start="00:03:44.560" video="mainVideo" id=subtitle]]
+[[!template text="Yeah, so, the activity I'm going to say is," start="00:03:49.120" video="mainVideo" id=subtitle]]
+[[!template text="well, let's say, 'Speak at EmacsConf 2021'," start="00:03:52.963" video="mainVideo" id=subtitle]]
+[[!template text="that we can use a type of 'Presentation'," start="00:03:57.427" video="mainVideo" id=subtitle]]
+[[!template text="outcome of that is, stating the obvious," start="00:04:01.200" video="mainVideo" id=subtitle]]
+[[!template text="'Present on an Emacs idea'." start="00:04:04.352" video="mainVideo" id=subtitle]]
+[[!template text="Right, something along the lines of that." start="00:04:08.080" video="mainVideo" id=subtitle]]
+[[!template text="And, then retrospective, again I'm not" start="00:04:09.680" video="mainVideo" id=subtitle]]
+[[!template text="going to fill that in at the moment." start="00:04:11.519" video="mainVideo" id=subtitle]]
+[[!template text="Then, last but not least," start="00:04:14.135" video="mainVideo" id=subtitle]]
+[[!template text="I will come up with a slightly different" start="00:04:19.060" video="mainVideo" id=subtitle]]
+[[!template text="activity. So, again selecting" start="00:04:20.799" video="mainVideo" id=subtitle]]
+[[!template text="'Improve Public Speaking'," start="00:04:23.215" video="mainVideo" id=subtitle]]
+[[!template text="the activity would be" start="00:04:24.889" video="mainVideo" id=subtitle]]
+[[!template text="'Watch lecture series on public speaking'," start="00:04:27.440" video="mainVideo" id=subtitle]]
+[[!template text="you know, blah blah blah, so forth." start="00:04:31.257" video="mainVideo" id=subtitle]]
+[[!template text="Type value would be" start="00:04:33.426" video="mainVideo" id=subtitle]]
+[[!template text="Lecture, for this outcome would maybe be" start="00:04:34.720" video="mainVideo" id=subtitle]]
+[[!template text="'Use new knowledge in EmacsConf presentation'." start="00:04:37.600" video="mainVideo" id=subtitle]]
+[[!template text="Right, might be a good one there." start="00:04:43.252" video="mainVideo" id=subtitle]]
+[[!template text="Again, retrospective value," start="00:04:45.350" video="mainVideo" id=subtitle]]
+[[!template text="I'm just going to leave that blank," start="00:04:46.720" video="mainVideo" id=subtitle]]
+[[!template text="and I'm going to save that." start="00:04:48.518" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now, we're in a position where we've got" start="00:04:51.440" video="mainVideo" id=subtitle]]
+[[!template text="a goal and two activities, which are" start="00:04:52.960" video="mainVideo" id=subtitle]]
+[[!template text="represented here, you can see here that I" start="00:04:54.960" video="mainVideo" id=subtitle]]
+[[!template text="can move an activity, cycle it forward to" start="00:04:57.520" video="mainVideo" id=subtitle]]
+[[!template text="In-Progress. When I do that," start="00:05:00.160" video="mainVideo" id=subtitle]]
+[[!template text="I get a STARTED timestamp here." start="00:05:02.322" video="mainVideo" id=subtitle]]
+[[!template text="If I then cycle it again," start="00:05:05.104" video="mainVideo" id=subtitle]]
+[[!template text="I get the more familiar CLOSED timestamp here." start="00:05:06.737" video="mainVideo" id=subtitle]]
+[[!template text="The STARTED timestamp is a bit of" start="00:05:09.869" video="mainVideo" id=subtitle]]
+[[!template text="custom code, I'll show you that in a moment." start="00:05:11.635" video="mainVideo" id=subtitle]]
+[[!template text="And then likewise, let's say that…," start="00:05:13.918" video="mainVideo" id=subtitle]]
+[[!template text="we'll move this one from PENDING to STARTED." start="00:05:17.120" video="mainVideo" id=subtitle]]
+[[!template text="Okay. Now, if I save the document," start="00:05:20.166" video="mainVideo" id=subtitle]]
+[[!template text="that will trigger the updating" start="00:05:22.960" video="mainVideo" id=subtitle]]
+[[!template text="of the column view, you can see now" start="00:05:24.560" video="mainVideo" id=subtitle]]
+[[!template text="that we have the various started and" start="00:05:27.520" video="mainVideo" id=subtitle]]
+[[!template text="completed statuses, this is up to date." start="00:05:29.360" video="mainVideo" id=subtitle]]
+[[!template text="So, that's pretty much." start="00:05:31.600" video="mainVideo" id=subtitle]]
+[[!template new="1" text="You can imagine that we could add" start="00:05:32.937" video="mainVideo" id=subtitle]]
+[[!template text="lots of goals and lots of activities," start="00:05:34.211" video="mainVideo" id=subtitle]]
+[[!template text="and this would grow into, you know," start="00:05:35.469" video="mainVideo" id=subtitle]]
+[[!template text="several sheets worth of a work," start="00:05:37.474" video="mainVideo" id=subtitle]]
+[[!template text="and then last but not least," start="00:05:41.704" video="mainVideo" id=subtitle]]
+[[!template text="is obviously the most important thing." start="00:05:43.748" video="mainVideo" id=subtitle]]
+[[!template text="How do you submit it?" start="00:05:45.440" video="mainVideo" id=subtitle]]
+[[!template text="We could just use the standard" start="00:05:46.720" video="mainVideo" id=subtitle]]
+[[!template text="export facility in Org mode for doing that." start="00:05:48.479" video="mainVideo" id=subtitle]]
+[[!template text="That's just Control c Control e l o (C-c C-e l o)." start="00:05:50.856" video="mainVideo" id=subtitle]]
+[[!template text="And there you can see," start="00:05:55.039" video="mainVideo" id=subtitle]]
+[[!template text="there you've got the goals and activities." start="00:06:03.440" video="mainVideo" id=subtitle]]
+[[!template text="I spent a bit of time, I won't go too much" start="00:06:06.586" video="mainVideo" id=subtitle]]
+[[!template text="in the LaTeX formatting, but coming up" start="00:06:08.319" video="mainVideo" id=subtitle]]
+[[!template text="with something that I felt and got as" start="00:06:10.000" video="mainVideo" id=subtitle]]
+[[!template text="much information compactly on a page" start="00:06:12.319" video="mainVideo" id=subtitle]]
+[[!template text="without making it difficult to read," start="00:06:14.720" video="mainVideo" id=subtitle]]
+[[!template text="should we say, and it's always" start="00:06:17.840" video="mainVideo" id=subtitle]]
+[[!template text="a find-the-balance thing." start="00:06:19.039" video="mainVideo" id=subtitle]]
+[[!template text="I'm not saying I'm an expert on it," start="00:06:20.080" video="mainVideo" id=subtitle]]
+[[!template text="but I thought what I came up with here" start="00:06:22.560" video="mainVideo" id=subtitle]]
+[[!template text="was reasonably clear" start="00:06:24.400" video="mainVideo" id=subtitle]]
+[[!template text="but allowed you to write enough information." start="00:06:25.905" video="mainVideo" id=subtitle]]
+[[!template text="The goals and activities were reasonably" start="00:06:28.960" video="mainVideo" id=subtitle]]
+[[!template text="well explained." start="00:06:31.039" video="mainVideo" id=subtitle]]
+[[!template text="Okay, we can just kill that." start="00:06:32.419" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, how does all of that work?" start="00:06:35.039" video="mainVideo" id=subtitle]]
+[[!template text="Well, underneath is config tab here," start="00:06:37.402" video="mainVideo" id=subtitle]]
+[[!template text="we have a bunch of Lisp" start="00:06:40.180" video="mainVideo" id=subtitle]]
+[[!template text="that I'm going to sort of fly through here." start="00:06:41.210" video="mainVideo" id=subtitle]]
+[[!template text="You can ask me any questions afterwards." start="00:06:43.276" video="mainVideo" id=subtitle]]
+[[!template text="First thing is," start="00:06:45.898" video="mainVideo" id=subtitle]]
+[[!template text="we have the org-capture templates," start="00:06:46.639" video="mainVideo" id=subtitle]]
+[[!template text="which are here." start="00:06:48.371" video="mainVideo" id=subtitle]]
+[[!template text="The goal one is not doing anything special." start="00:06:50.101" video="mainVideo" id=subtitle]]
+[[!template text="It's just writing it back to this file," start="00:06:53.178" video="mainVideo" id=subtitle]]
+[[!template text="so there is a limitation there" start="00:06:55.605" video="mainVideo" id=subtitle]]
+[[!template text="that you must have this file open" start="00:06:57.125" video="mainVideo" id=subtitle]]
+[[!template text="when you add them, which is" start="00:06:58.718" video="mainVideo" id=subtitle]]
+[[!template text="something I'd like to improve in future." start="00:06:59.840" video="mainVideo" id=subtitle]]
+[[!template new="1" text="For the activities, it specifies the file," start="00:07:02.000" video="mainVideo" id=subtitle]]
+[[!template text="but it also specifies this function" start="00:07:04.952" video="mainVideo" id=subtitle]]
+[[!template text="set-activity-pos-from-goal, which (is) above here." start="00:07:06.560" video="mainVideo" id=subtitle]]
+[[!template text="What this does is, it iterates through the" start="00:07:09.926" video="mainVideo" id=subtitle]]
+[[!template text="various Org entries looking for goals," start="00:07:12.720" video="mainVideo" id=subtitle]]
+[[!template text="and once it has a list of goals," start="00:07:17.360" video="mainVideo" id=subtitle]]
+[[!template text="it presents them to you" start="00:07:20.720" video="mainVideo" id=subtitle]]
+[[!template text="using ido-completing-read," start="00:07:21.919" video="mainVideo" id=subtitle]]
+[[!template text="so that you can select the goal" start="00:07:23.599" video="mainVideo" id=subtitle]]
+[[!template text="that you want the activity to live underneath," start="00:07:25.120" video="mainVideo" id=subtitle]]
+[[!template text="and it then searches forward, and it finds" start="00:07:27.610" video="mainVideo" id=subtitle]]
+[[!template text="the appropriate spot in that goal" start="00:07:29.520" video="mainVideo" id=subtitle]]
+[[!template text="that the Emacs can then dump" start="00:07:31.599" video="mainVideo" id=subtitle]]
+[[!template text="the captured activity." start="00:07:33.919" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay, the next one is pretty straightforward." start="00:07:36.000" video="mainVideo" id=subtitle]]
+[[!template text="Because I changed the names" start="00:07:39.210" video="mainVideo" id=subtitle]]
+[[!template text="of the TODO, DONE," start="00:07:40.479" video="mainVideo" id=subtitle]]
+[[!template text="I now need a new way of aggregating" start="00:07:42.240" video="mainVideo" id=subtitle]]
+[[!template text="the summary completion statuses." start="00:07:44.720" video="mainVideo" id=subtitle]]
+[[!template text="So, for this I'm just looking" start="00:07:46.691" video="mainVideo" id=subtitle]]
+[[!template text="at the number of completed activities" start="00:07:48.400" video="mainVideo" id=subtitle]]
+[[!template text="over the total number of activities," start="00:07:51.440" video="mainVideo" id=subtitle]]
+[[!template text="and I make that available on the C+ here," start="00:07:53.627" video="mainVideo" id=subtitle]]
+[[!template text="which we will see when I go and show you" start="00:07:57.665" video="mainVideo" id=subtitle]]
+[[!template text="the top configuration in the Org document" start="00:08:00.859" video="mainVideo" id=subtitle]]
+[[!template text="in two minutes." start="00:08:03.960" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I mentioned that we needed to have our" start="00:08:05.199" video="mainVideo" id=subtitle]]
+[[!template text="own start date. The way this works is" start="00:08:08.080" video="mainVideo" id=subtitle]]
+[[!template text="we add a hook to" start="00:08:10.400" video="mainVideo" id=subtitle]]
+[[!template text="org-after-todo-state-change-hook," start="00:08:11.870" video="mainVideo" id=subtitle]]
+[[!template text="which means that we test" start="00:08:14.996" video="mainVideo" id=subtitle]]
+[[!template text="the state change results in" start="00:08:17.199" video="mainVideo" id=subtitle]]
+[[!template text="one of the items being In-Progress," start="00:08:19.680" video="mainVideo" id=subtitle]]
+[[!template text="and if that's true" start="00:08:21.599" video="mainVideo" id=subtitle]]
+[[!template text="and it already doesn't have a time stamp," start="00:08:23.199" video="mainVideo" id=subtitle]]
+[[!template text="then it creates a timestamp" start="00:08:25.360" video="mainVideo" id=subtitle]]
+[[!template text="with the current time and date." start="00:08:26.639" video="mainVideo" id=subtitle]]
+[[!template text="The second hook here is just ensuring that" start="00:08:29.049" video="mainVideo" id=subtitle]]
+[[!template text="when we save the document," start="00:08:31.199" video="mainVideo" id=subtitle]]
+[[!template text="that the column view is dynamically updated," start="00:08:32.663" video="mainVideo" id=subtitle]]
+[[!template text="so that everything is up to date." start="00:08:34.898" video="mainVideo" id=subtitle]]
+[[!template text="And then last but not least here," start="00:08:36.578" video="mainVideo" id=subtitle]]
+[[!template text="the tmp-f-timestamp, what this does is," start="00:08:39.444" video="mainVideo" id=subtitle]]
+[[!template text="on the export, it modifies the timestamps," start="00:08:43.590" video="mainVideo" id=subtitle]]
+[[!template text="so that it removes the angle brackets," start="00:08:46.690" video="mainVideo" id=subtitle]]
+[[!template text="and it removes the hours and minutes." start="00:08:48.336" video="mainVideo" id=subtitle]]
+[[!template text="That is a space-saving thing" start="00:08:50.367" video="mainVideo" id=subtitle]]
+[[!template text="and a tidiness thing in the PDF." start="00:08:51.839" video="mainVideo" id=subtitle]]
+[[!template text="I'll show you in a second how that's used." start="00:08:54.080" video="mainVideo" id=subtitle]]
+[[!template text="We then allow bind-keywords." start="00:08:56.187" video="mainVideo" id=subtitle]]
+[[!template text="We use them above." start="00:08:58.121" video="mainVideo" id=subtitle]]
+[[!template text="Then we just have a simple key" start="00:08:59.839" video="mainVideo" id=subtitle]]
+[[!template text="that allows us to hotkey for org-capture." start="00:09:01.200" video="mainVideo" id=subtitle]]
+[[!template text="And then at the start," start="00:09:05.258" video="mainVideo" id=subtitle]]
+[[!template text="when we evaluate the startup block" start="00:09:06.800" video="mainVideo" id=subtitle]]
+[[!template text="that I have of Lisp," start="00:09:07.327" video="mainVideo" id=subtitle]]
+[[!template text="just so it's already there," start="00:09:10.160" video="mainVideo" id=subtitle]]
+[[!template text="and set the number of sublevels to one" start="00:09:11.360" video="mainVideo" id=subtitle]]
+[[!template text="so only the top levels exist." start="00:09:13.519" video="mainVideo" id=subtitle]]
+[[!template text="Coming back over the top" start="00:09:16.080" video="mainVideo" id=subtitle]]
+[[!template text="to put that all back together again." start="00:09:19.360" video="mainVideo" id=subtitle]]
+[[!template text="The startup just tells you" start="00:09:21.576" video="mainVideo" id=subtitle]]
+[[!template text="that you want log times." start="00:09:22.720" video="mainVideo" id=subtitle]]
+[[!template text="The title, author, description, and…," start="00:09:24.926" video="mainVideo" id=subtitle]]
+[[!template text="they should be obvious, right," start="00:09:27.023" video="mainVideo" id=subtitle]]
+[[!template text="that's just text for the PDF." start="00:09:28.536" video="mainVideo" id=subtitle]]
+[[!template text="Options, we disable the table of contents," start="00:09:29.920" video="mainVideo" id=subtitle]]
+[[!template text="we do not want that." start="00:09:33.049" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now, the output config here," start="00:09:34.320" video="mainVideo" id=subtitle]]
+[[!template text="the first two are resulting" start="00:09:35.680" video="mainVideo" id=subtitle]]
+[[!template text="in the timestamp formats, so, that was" start="00:09:37.519" video="mainVideo" id=subtitle]]
+[[!template text="the tmp-f-timestamp function" start="00:09:40.160" video="mainVideo" id=subtitle]]
+[[!template text="I showed you below." start="00:09:41.920" video="mainVideo" id=subtitle]]
+[[!template text="And, we got a better LaTeX stuff here," start="00:09:43.468" video="mainVideo" id=subtitle]]
+[[!template text="just saying that we want a landscape," start="00:09:45.310" video="mainVideo" id=subtitle]]
+[[!template text="and we want to use A4 paper size," start="00:09:47.134" video="mainVideo" id=subtitle]]
+[[!template text="and then the columns here." start="00:09:49.150" video="mainVideo" id=subtitle]]
+[[!template text="What we want is just to" start="00:09:50.560" video="mainVideo" id=subtitle]]
+[[!template text="rename the properties" start="00:09:51.839" video="mainVideo" id=subtitle]]
+[[!template text="to something which just looks" start="00:09:52.880" video="mainVideo" id=subtitle]]
+[[!template text="a little bit nicer in the table." start="00:09:54.160" video="mainVideo" id=subtitle]]
+[[!template text="So you can see that: goals, activities," start="00:09:55.572" video="mainVideo" id=subtitle]]
+[[!template text="status, completed, and so forth." start="00:09:58.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Then last but not least," start="00:10:00.979" video="mainVideo" id=subtitle]]
+[[!template text="on the actual thing," start="00:10:03.760" video="mainVideo" id=subtitle]]
+[[!template text="we use a longtable in LaTeX." start="00:10:04.640" video="mainVideo" id=subtitle]]
+[[!template text="We align, so we specify very exactly" start="00:10:06.487" video="mainVideo" id=subtitle]]
+[[!template text="that we want five centimeters" start="00:10:09.360" video="mainVideo" id=subtitle]]
+[[!template text="for the first and last two columns," start="00:10:11.040" video="mainVideo" id=subtitle]]
+[[!template text="and that we want all the other columns" start="00:10:13.364" video="mainVideo" id=subtitle]]
+[[!template text="to use the remaining space." start="00:10:15.680" video="mainVideo" id=subtitle]]
+[[!template text="And that's it." start="00:10:17.196" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Appreciate, I've absolutely whirlwinded" start="00:10:19.040" video="mainVideo" id=subtitle]]
+[[!template text="through that, but please do feel free" start="00:10:21.440" video="mainVideo" id=subtitle]]
+[[!template text="to ask me any questions," start="00:10:24.160" video="mainVideo" id=subtitle]]
+[[!template text="or speak to me offline." start="00:10:26.144" video="mainVideo" id=subtitle]]
+[[!template text="Thank you very much." start="00:10:28.786" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/project.md b/2021/captions/project.md
new file mode 100644
index 00000000..026e73ea
--- /dev/null
+++ b/2021/captions/project.md
@@ -0,0 +1,241 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="hi i am adolfo villafraid i am the" start="00:00:01.040" video="mainVideo" id=subtitle]]
+[[!template text="co-founder of chef tech an innovative" start="00:00:03.439" video="mainVideo" id=subtitle]]
+[[!template text="staff a socially vocated innovative" start="00:00:05.600" video="mainVideo" id=subtitle]]
+[[!template text="setup" start="00:00:08.240" video="mainVideo" id=subtitle]]
+[[!template text="in italy and today i'm gonna talk about" start="00:00:09.440" video="mainVideo" id=subtitle]]
+[[!template text="the way in which we use earth mode to" start="00:00:12.639" video="mainVideo" id=subtitle]]
+[[!template text="budget our" start="00:00:14.920" video="mainVideo" id=subtitle]]
+[[!template text="projects first i need to introduce the" start="00:00:16.960" video="mainVideo" id=subtitle]]
+[[!template text="way in which we build our project budget" start="00:00:18.880" video="mainVideo" id=subtitle]]
+[[!template text="we start from the goals and the work to" start="00:00:21.279" video="mainVideo" id=subtitle]]
+[[!template text="be performed" start="00:00:23.119" video="mainVideo" id=subtitle]]
+[[!template text="and" start="00:00:24.720" video="mainVideo" id=subtitle]]
+[[!template text="we" start="00:00:25.840" video="mainVideo" id=subtitle]]
+[[!template text="split it into different tasks" start="00:00:26.800" video="mainVideo" id=subtitle]]
+[[!template text="which may be grouped in different ways" start="00:00:29.840" video="mainVideo" id=subtitle]]
+[[!template text="according to our needs it could be user" start="00:00:31.920" video="mainVideo" id=subtitle]]
+[[!template text="stories or" start="00:00:34.320" video="mainVideo" id=subtitle]]
+[[!template text="functional groups or" start="00:00:35.840" video="mainVideo" id=subtitle]]
+[[!template text="or packages and then for each task we" start="00:00:38.320" video="mainVideo" id=subtitle]]
+[[!template text="compute the effort" start="00:00:40.879" video="mainVideo" id=subtitle]]
+[[!template text="then from the effort we derive the" start="00:00:44.000" video="mainVideo" id=subtitle]]
+[[!template text="project cost and" start="00:00:46.640" video="mainVideo" id=subtitle]]
+[[!template text="price" start="00:00:48.320" video="mainVideo" id=subtitle]]
+[[!template text="according to two different approaches" start="00:00:49.840" video="mainVideo" id=subtitle]]
+[[!template text="the first approach we allocate the" start="00:00:52.239" video="mainVideo" id=subtitle]]
+[[!template text="effort to each resource" start="00:00:54.160" video="mainVideo" id=subtitle]]
+[[!template text="and we multiply the effort" start="00:00:56.320" video="mainVideo" id=subtitle]]
+[[!template text="of the resource by the price of the" start="00:00:58.800" video="mainVideo" id=subtitle]]
+[[!template text="results we sum" start="00:01:00.719" video="mainVideo" id=subtitle]]
+[[!template text="all the efforts together and then we sum" start="00:01:02.800" video="mainVideo" id=subtitle]]
+[[!template text="all the tasks together the prices of all" start="00:01:05.040" video="mainVideo" id=subtitle]]
+[[!template text="the tasks together in the second" start="00:01:08.159" video="mainVideo" id=subtitle]]
+[[!template text="approach we use" start="00:01:10.240" video="mainVideo" id=subtitle]]
+[[!template text="a generic effort" start="00:01:12.640" video="mainVideo" id=subtitle]]
+[[!template text="estimation for each" start="00:01:15.439" video="mainVideo" id=subtitle]]
+[[!template text="task" start="00:01:18.000" video="mainVideo" id=subtitle]]
+[[!template text="without allocating the effort to any" start="00:01:19.200" video="mainVideo" id=subtitle]]
+[[!template text="specific person and we multiply this" start="00:01:21.200" video="mainVideo" id=subtitle]]
+[[!template text="effort by the average" start="00:01:24.560" video="mainVideo" id=subtitle]]
+[[!template text="price of the resource" start="00:01:26.960" video="mainVideo" id=subtitle]]
+[[!template text="in" start="00:01:29.040" video="mainVideo" id=subtitle]]
+[[!template text="both cases" start="00:01:30.159" video="mainVideo" id=subtitle]]
+[[!template text="the price is computed" start="00:01:32.000" video="mainVideo" id=subtitle]]
+[[!template text="by" start="00:01:34.720" video="mainVideo" id=subtitle]]
+[[!template text="summing cost to" start="00:01:35.600" video="mainVideo" id=subtitle]]
+[[!template text="overheads and and profit we're a small" start="00:01:38.079" video="mainVideo" id=subtitle]]
+[[!template text="company we can choose our two chain so" start="00:01:40.640" video="mainVideo" id=subtitle]]
+[[!template text="we decided to use our mode for writing" start="00:01:42.960" video="mainVideo" id=subtitle]]
+[[!template text="our proposals" start="00:01:45.840" video="mainVideo" id=subtitle]]
+[[!template text="so we built a template the template has" start="00:01:47.360" video="mainVideo" id=subtitle]]
+[[!template text="got uh some a fixed structure" start="00:01:50.000" video="mainVideo" id=subtitle]]
+[[!template text="which allows us to do a lot of reuse" start="00:01:54.159" video="mainVideo" id=subtitle]]
+[[!template text="and" start="00:01:56.880" video="mainVideo" id=subtitle]]
+[[!template text="some emacs list code and or promote the" start="00:01:57.759" video="mainVideo" id=subtitle]]
+[[!template text="features to build the" start="00:02:00.399" video="mainVideo" id=subtitle]]
+[[!template text="project tables let me show you" start="00:02:02.960" video="mainVideo" id=subtitle]]
+[[!template text="without further ado the template" start="00:02:06.079" video="mainVideo" id=subtitle]]
+[[!template text="which is shown here" start="00:02:09.759" video="mainVideo" id=subtitle]]
+[[!template text="and basically it is a fairly standard" start="00:02:11.760" video="mainVideo" id=subtitle]]
+[[!template text="old mod document" start="00:02:15.520" video="mainVideo" id=subtitle]]
+[[!template text="Music" start="00:02:17.750" video="mainVideo" id=subtitle]]
+[[!template text="there are some sections here to" start="00:02:20.800" video="mainVideo" id=subtitle]]
+[[!template text="let me show you" start="00:02:23.760" video="mainVideo" id=subtitle]]
+[[!template text="the structure here" start="00:02:26.239" video="mainVideo" id=subtitle]]
+[[!template text="there are some sections some of which" start="00:02:28.879" video="mainVideo" id=subtitle]]
+[[!template text="are not" start="00:02:31.519" video="mainVideo" id=subtitle]]
+[[!template text="exported shown to the client" start="00:02:34.000" video="mainVideo" id=subtitle]]
+[[!template text="because they are of no interest to them" start="00:02:36.640" video="mainVideo" id=subtitle]]
+[[!template text="such as for instance the" start="00:02:39.519" video="mainVideo" id=subtitle]]
+[[!template text="plaintext each ledger accounting entries" start="00:02:42.160" video="mainVideo" id=subtitle]]
+[[!template text="we generate for the project" start="00:02:45.440" video="mainVideo" id=subtitle]]
+[[!template text="and" start="00:02:47.440" video="mainVideo" id=subtitle]]
+[[!template text="or some info about the detailed uh" start="00:02:48.720" video="mainVideo" id=subtitle]]
+[[!template text="budget uh data uh while other are shared" start="00:02:51.599" video="mainVideo" id=subtitle]]
+[[!template text="with uh with the clients to form a" start="00:02:54.959" video="mainVideo" id=subtitle]]
+[[!template text="project proposal now the structure is" start="00:02:57.120" video="mainVideo" id=subtitle]]
+[[!template text="not really important in the sense that" start="00:02:59.360" video="mainVideo" id=subtitle]]
+[[!template text="the only constraint and requirement" start="00:03:01.120" video="mainVideo" id=subtitle]]
+[[!template text="we set is that there has to be a section" start="00:03:04.720" video="mainVideo" id=subtitle]]
+[[!template text="with an id" start="00:03:07.599" video="mainVideo" id=subtitle]]
+[[!template text="named plan" start="00:03:08.800" video="mainVideo" id=subtitle]]
+[[!template text="which will contain and contains the" start="00:03:10.800" video="mainVideo" id=subtitle]]
+[[!template text="plan the project plan" start="00:03:13.519" video="mainVideo" id=subtitle]]
+[[!template text="here for instance we have" start="00:03:15.840" video="mainVideo" id=subtitle]]
+[[!template text="we have a project plan made of a user" start="00:03:19.440" video="mainVideo" id=subtitle]]
+[[!template text="story" start="00:03:22.400" video="mainVideo" id=subtitle]]
+[[!template text="whose development is split into three" start="00:03:23.599" video="mainVideo" id=subtitle]]
+[[!template text="different tasks" start="00:03:25.599" video="mainVideo" id=subtitle]]
+[[!template text="for each task" start="00:03:27.360" video="mainVideo" id=subtitle]]
+[[!template text="let me show you just" start="00:03:29.200" video="mainVideo" id=subtitle]]
+[[!template text="the structure before" start="00:03:31.440" video="mainVideo" id=subtitle]]
+[[!template text="the application of the template" start="00:03:34.799" video="mainVideo" id=subtitle]]
+[[!template text="for each task" start="00:03:37.280" video="mainVideo" id=subtitle]]
+[[!template text="you need to define you need to define" start="00:03:39.680" video="mainVideo" id=subtitle]]
+[[!template text="the effort here for instance we have an" start="00:03:44.319" video="mainVideo" id=subtitle]]
+[[!template text="effort a generic effort not allocated to" start="00:03:46.879" video="mainVideo" id=subtitle]]
+[[!template text="any person" start="00:03:49.280" video="mainVideo" id=subtitle]]
+[[!template text="uh we use our mood duration 60 stands" start="00:03:50.480" video="mainVideo" id=subtitle]]
+[[!template text="for 60 minutes" start="00:03:53.280" video="mainVideo" id=subtitle]]
+[[!template text="and here we have an effort" start="00:03:54.799" video="mainVideo" id=subtitle]]
+[[!template text="profiled so" start="00:03:56.879" video="mainVideo" id=subtitle]]
+[[!template text="in task 1.2 and also we work 10 days and" start="00:03:58.480" video="mainVideo" id=subtitle]]
+[[!template text="we kill 20 days" start="00:04:02.080" video="mainVideo" id=subtitle]]
+[[!template text="these are working days so one working" start="00:04:04.159" video="mainVideo" id=subtitle]]
+[[!template text="day corresponds to eight hours" start="00:04:06.879" video="mainVideo" id=subtitle]]
+[[!template text="this is like you know stand that we" start="00:04:09.760" video="mainVideo" id=subtitle]]
+[[!template text="might revise these" start="00:04:11.760" video="mainVideo" id=subtitle]]
+[[!template text="to become more compliant with" start="00:04:13.519" video="mainVideo" id=subtitle]]
+[[!template text="the definition of the" start="00:04:16.400" video="mainVideo" id=subtitle]]
+[[!template text="given by word mode notice that" start="00:04:18.400" video="mainVideo" id=subtitle]]
+[[!template text="you can or cannot you may or may not use" start="00:04:21.120" video="mainVideo" id=subtitle]]
+[[!template text="to do keywords here if you want we don't" start="00:04:25.360" video="mainVideo" id=subtitle]]
+[[!template text="usually don't use them because the final" start="00:04:28.160" video="mainVideo" id=subtitle]]
+[[!template text="document looks nice to the customer" start="00:04:30.800" video="mainVideo" id=subtitle]]
+[[!template text="without to do we then add them when we" start="00:04:33.680" video="mainVideo" id=subtitle]]
+[[!template text="move to a later" start="00:04:38.000" video="mainVideo" id=subtitle]]
+[[!template text="stage" start="00:04:39.680" video="mainVideo" id=subtitle]]
+[[!template text="so" start="00:04:40.720" video="mainVideo" id=subtitle]]
+[[!template text="once you define the plan with the effort" start="00:04:41.520" video="mainVideo" id=subtitle]]
+[[!template text="allocation" start="00:04:44.320" video="mainVideo" id=subtitle]]
+[[!template text="you can" start="00:04:45.600" video="mainVideo" id=subtitle]]
+[[!template text="go back to the" start="00:04:47.440" video="mainVideo" id=subtitle]]
+[[!template text="emacs list part" start="00:04:49.440" video="mainVideo" id=subtitle]]
+[[!template text="where" start="00:04:51.440" video="mainVideo" id=subtitle]]
+[[!template text="you can set three different variables" start="00:04:53.040" video="mainVideo" id=subtitle]]
+[[!template text="to define the hourly rates of your team" start="00:04:55.680" video="mainVideo" id=subtitle]]
+[[!template text="so for instance here" start="00:04:59.680" video="mainVideo" id=subtitle]]
+[[!template text="i am taking 10 euros per hour" start="00:05:01.440" video="mainVideo" id=subtitle]]
+[[!template text="one" start="00:05:05.360" video="mainVideo" id=subtitle]]
+[[!template text="not real rate actually let me kill it 20" start="00:05:06.160" video="mainVideo" id=subtitle]]
+[[!template text="and then you can set the profit as a" start="00:05:09.680" video="mainVideo" id=subtitle]]
+[[!template text="percentage on top of the hourly rate and" start="00:05:11.600" video="mainVideo" id=subtitle]]
+[[!template text="profit as a percentage on top of uh" start="00:05:14.720" video="mainVideo" id=subtitle]]
+[[!template text="hourly rates" start="00:05:17.759" video="mainVideo" id=subtitle]]
+[[!template text="and" start="00:05:19.360" video="mainVideo" id=subtitle]]
+[[!template text="the" start="00:05:20.240" video="mainVideo" id=subtitle]]
+[[!template text="ballpark effort allocation here is used" start="00:05:21.360" video="mainVideo" id=subtitle]]
+[[!template text="to compute the average" start="00:05:24.880" video="mainVideo" id=subtitle]]
+[[!template text="type" start="00:05:27.919" video="mainVideo" id=subtitle]]
+[[!template text="uh our average hourly" start="00:05:28.880" video="mainVideo" id=subtitle]]
+[[!template text="rate" start="00:05:31.199" video="mainVideo" id=subtitle]]
+[[!template text="as a weighted average so here i'm saying" start="00:05:32.160" video="mainVideo" id=subtitle]]
+[[!template text="that" start="00:05:34.720" video="mainVideo" id=subtitle]]
+[[!template text="on average i will work 30 percent" start="00:05:35.680" video="mainVideo" id=subtitle]]
+[[!template text="of the effort of each task while mike" start="00:05:38.880" video="mainVideo" id=subtitle]]
+[[!template text="will take care of the" start="00:05:41.600" video="mainVideo" id=subtitle]]
+[[!template text="remaining 70" start="00:05:43.199" video="mainVideo" id=subtitle]]
+[[!template text="and the" start="00:05:45.280" video="mainVideo" id=subtitle]]
+[[!template text="hourly rate is computed by multiplying" start="00:05:46.479" video="mainVideo" id=subtitle]]
+[[!template text="30" start="00:05:48.720" video="mainVideo" id=subtitle]]
+[[!template text="percent by 10 plus 70" start="00:05:49.919" video="mainVideo" id=subtitle]]
+[[!template text="by 20. um" start="00:05:53.600" video="mainVideo" id=subtitle]]
+[[!template text="okay if i do a ctrl c ctrl c here i" start="00:05:57.120" video="mainVideo" id=subtitle]]
+[[!template text="execute the imax list code in the" start="00:06:00.479" video="mainVideo" id=subtitle]]
+[[!template text="uh in the source code block as you can" start="00:06:04.800" video="mainVideo" id=subtitle]]
+[[!template text="see" start="00:06:07.919" video="mainVideo" id=subtitle]]
+[[!template text="emacs put" start="00:06:08.880" video="mainVideo" id=subtitle]]
+[[!template text="back" start="00:06:10.639" video="mainVideo" id=subtitle]]
+[[!template text="the properties" start="00:06:11.520" video="mainVideo" id=subtitle]]
+[[!template text="Music" start="00:06:13.830" video="mainVideo" id=subtitle]]
+[[!template text="that transform the effort into a total" start="00:06:15.759" video="mainVideo" id=subtitle]]
+[[!template text="amount namely the the effort is first" start="00:06:18.720" video="mainVideo" id=subtitle]]
+[[!template text="transformed into working hours" start="00:06:22.080" video="mainVideo" id=subtitle]]
+[[!template text="the rates and costs are computed" start="00:06:24.479" video="mainVideo" id=subtitle]]
+[[!template text="overhead computed and everything" start="00:06:27.280" video="mainVideo" id=subtitle]]
+[[!template text="contributes to the total amount" start="00:06:31.440" video="mainVideo" id=subtitle]]
+[[!template text="same thing here" start="00:06:34.639" video="mainVideo" id=subtitle]]
+[[!template text="the count the the" start="00:06:36.560" video="mainVideo" id=subtitle]]
+[[!template text="cost is slightly more complex because we" start="00:06:39.280" video="mainVideo" id=subtitle]]
+[[!template text="use profile effort" start="00:06:42.160" video="mainVideo" id=subtitle]]
+[[!template text="and so on and so forth that this" start="00:06:45.360" video="mainVideo" id=subtitle]]
+[[!template text="information here" start="00:06:47.440" video="mainVideo" id=subtitle]]
+[[!template text="can be then" start="00:06:49.680" video="mainVideo" id=subtitle]]
+[[!template text="grouped up" start="00:06:52.160" video="mainVideo" id=subtitle]]
+[[!template text="in the" start="00:06:56.960" video="mainVideo" id=subtitle]]
+[[!template text="to form the the project plan and project" start="00:06:58.000" video="mainVideo" id=subtitle]]
+[[!template text="budget as you can see" start="00:07:00.639" video="mainVideo" id=subtitle]]
+[[!template text="this is something we do not" start="00:07:03.039" video="mainVideo" id=subtitle]]
+[[!template text="export" start="00:07:05.599" video="mainVideo" id=subtitle]]
+[[!template text="in the project proposal to the client" start="00:07:06.880" video="mainVideo" id=subtitle]]
+[[!template text="because we prefer to do some rounding by" start="00:07:09.440" video="mainVideo" id=subtitle]]
+[[!template text="hand" start="00:07:11.919" video="mainVideo" id=subtitle]]
+[[!template text="in order to build a budget which is" start="00:07:13.199" video="mainVideo" id=subtitle]]
+[[!template text="let's say" start="00:07:15.599" video="mainVideo" id=subtitle]]
+[[!template text="more" start="00:07:16.960" video="mainVideo" id=subtitle]]
+[[!template text="reasonable and" start="00:07:17.840" video="mainVideo" id=subtitle]]
+[[!template text="this table here" start="00:07:20.880" video="mainVideo" id=subtitle]]
+[[!template text="computes what" start="00:07:22.720" video="mainVideo" id=subtitle]]
+[[!template text="in total amounts by control c control c" start="00:07:24.639" video="mainVideo" id=subtitle]]
+[[!template text="once again and then this table here the" start="00:07:26.880" video="mainVideo" id=subtitle]]
+[[!template text="payment structure is used to um" start="00:07:30.000" video="mainVideo" id=subtitle]]
+[[!template text="compute" start="00:07:33.440" video="mainVideo" id=subtitle]]
+[[!template text="the amount to be paid according to" start="00:07:34.639" video="mainVideo" id=subtitle]]
+[[!template text="the different payments we want to set in" start="00:07:38.000" video="mainVideo" id=subtitle]]
+[[!template text="the project here for instance we are" start="00:07:40.240" video="mainVideo" id=subtitle]]
+[[!template text="setting three payments with the" start="00:07:41.840" video="mainVideo" id=subtitle]]
+[[!template text="following percentages and the table you" start="00:07:43.680" video="mainVideo" id=subtitle]]
+[[!template text="set the dates and amounts and the table" start="00:07:47.280" video="mainVideo" id=subtitle]]
+[[!template text="keeps" start="00:07:49.840" video="mainVideo" id=subtitle]]
+[[!template text="track of the rest by looking at the" start="00:07:52.240" video="mainVideo" id=subtitle]]
+[[!template text="total amount" start="00:07:55.039" video="mainVideo" id=subtitle]]
+[[!template text="it finds here" start="00:07:56.479" video="mainVideo" id=subtitle]]
+[[!template text="in the budget table so the payment" start="00:07:59.360" video="mainVideo" id=subtitle]]
+[[!template text="structure and budget are then used by" start="00:08:02.080" video="mainVideo" id=subtitle]]
+[[!template text="this piece of code here" start="00:08:05.199" video="mainVideo" id=subtitle]]
+[[!template text="to" start="00:08:07.280" video="mainVideo" id=subtitle]]
+[[!template text="build the entries" start="00:08:08.639" video="mainVideo" id=subtitle]]
+[[!template text="used" start="00:08:12.000" video="mainVideo" id=subtitle]]
+[[!template text="for our internal internal accounting" start="00:08:13.360" video="mainVideo" id=subtitle]]
+[[!template text="which is based on age ledge ledger" start="00:08:16.720" video="mainVideo" id=subtitle]]
+[[!template text="we did everything here by hand" start="00:08:21.039" video="mainVideo" id=subtitle]]
+[[!template text="but" start="00:08:23.759" video="mainVideo" id=subtitle]]
+[[!template text="it is not necessary of course" start="00:08:24.639" video="mainVideo" id=subtitle]]
+[[!template text="in the sense uh because if you" start="00:08:26.400" video="mainVideo" id=subtitle]]
+[[!template text="uh export the document using ctrl c ctrl" start="00:08:29.360" video="mainVideo" id=subtitle]]
+[[!template text="e and then for instance l for latex and" start="00:08:32.800" video="mainVideo" id=subtitle]]
+[[!template text="pip for pdf" start="00:08:36.240" video="mainVideo" id=subtitle]]
+[[!template text="or the mode takes care of doing" start="00:08:39.760" video="mainVideo" id=subtitle]]
+[[!template text="evaluating each piece of code" start="00:08:42.399" video="mainVideo" id=subtitle]]
+[[!template text="in the document and generate the" start="00:08:45.120" video="mainVideo" id=subtitle]]
+[[!template text="updated documents uh here for instance" start="00:08:49.040" video="mainVideo" id=subtitle]]
+[[!template text="you can see that the pdf generated from" start="00:08:51.600" video="mainVideo" id=subtitle]]
+[[!template text="the template which contains all the" start="00:08:54.800" video="mainVideo" id=subtitle]]
+[[!template text="tables budget and payment schema" start="00:08:56.560" video="mainVideo" id=subtitle]]
+[[!template text="everything which is you which we use to" start="00:08:58.560" video="mainVideo" id=subtitle]]
+[[!template text="make an offer to our clients um" start="00:09:01.440" video="mainVideo" id=subtitle]]
+[[!template text="there are various advantages uh the" start="00:09:08.000" video="mainVideo" id=subtitle]]
+[[!template text="first the main one being" start="00:09:10.160" video="mainVideo" id=subtitle]]
+[[!template text="that we keep all the information in one" start="00:09:12.399" video="mainVideo" id=subtitle]]
+[[!template text="place" start="00:09:14.480" video="mainVideo" id=subtitle]]
+[[!template text="um and that we can version the" start="00:09:15.600" video="mainVideo" id=subtitle]]
+[[!template text="different versions you can use source" start="00:09:19.040" video="mainVideo" id=subtitle]]
+[[!template text="control to version" start="00:09:21.279" video="mainVideo" id=subtitle]]
+[[!template text="uh different iterations on the document" start="00:09:22.800" video="mainVideo" id=subtitle]]
+[[!template text="if you want you can find the document" start="00:09:26.080" video="mainVideo" id=subtitle]]
+[[!template text="here and thank you for" start="00:09:27.519" video="mainVideo" id=subtitle]]
+[[!template text="your" start="00:09:30.959" video="mainVideo" id=subtitle]]
+[[!template text="attention and i'm open to questions" start="00:09:32.399" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/research.md b/2021/captions/research.md
new file mode 100644
index 00000000..0ee9aef1
--- /dev/null
+++ b/2021/captions/research.md
@@ -0,0 +1,176 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hello, everyone. My name is Ahmed" start="00:00:00.480" video="mainVideo" id=subtitle]]
+[[!template text="and I am very happy to be here." start="00:00:02.639" video="mainVideo" id=subtitle]]
+[[!template text="Today I'll talk about" start="00:00:05.279" video="mainVideo" id=subtitle]]
+[[!template text="my academic workflow inside Emacs." start="00:00:07.359" video="mainVideo" id=subtitle]]
+[[!template text="So the main needs that I have" start="00:00:12.160" video="mainVideo" id=subtitle]]
+[[!template text="is to keep up with the current research" start="00:00:14.880" video="mainVideo" id=subtitle]]
+[[!template text="in my field, and to be able" start="00:00:16.880" video="mainVideo" id=subtitle]]
+[[!template text="to take notes, and write," start="00:00:19.760" video="mainVideo" id=subtitle]]
+[[!template text="and use these notes later" start="00:00:23.920" video="mainVideo" id=subtitle]]
+[[!template text="in writing my papers inside Emacs." start="00:00:25.359" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is a great program for this" start="00:00:29.439" video="mainVideo" id=subtitle]]
+[[!template text="because it is very extendable" start="00:00:31.119" video="mainVideo" id=subtitle]]
+[[!template text="and we can basically write" start="00:00:32.880" video="mainVideo" id=subtitle]]
+[[!template text="whatever we are missing." start="00:00:36.960" video="mainVideo" id=subtitle]]
+[[!template text="It replaced my earlier" start="00:00:39.440" video="mainVideo" id=subtitle]]
+[[!template text="proprietary workflow" start="00:00:41.360" video="mainVideo" id=subtitle]]
+[[!template text="that involved using Mendeley" start="00:00:42.559" video="mainVideo" id=subtitle]]
+[[!template text="and Visual Studio Code" start="00:00:44.320" video="mainVideo" id=subtitle]]
+[[!template text="and many other tools" start="00:00:46.320" video="mainVideo" id=subtitle]]
+[[!template text="in order to do the things" start="00:00:47.760" video="mainVideo" id=subtitle]]
+[[!template text="that I'll show today." start="00:00:49.760" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So the first concern that I have" start="00:00:51.760" video="mainVideo" id=subtitle]]
+[[!template text="is to keep up with new papers." start="00:00:54.480" video="mainVideo" id=subtitle]]
+[[!template text="To do that, I use this package called elfeed." start="00:00:57.280" video="mainVideo" id=subtitle]]
+[[!template text="Elfeed is basically just an RSS reader," start="00:01:02.399" video="mainVideo" id=subtitle]]
+[[!template text="and here I fetch all the papers that I need" start="00:01:05.760" video="mainVideo" id=subtitle]]
+[[!template text="from arXiv, which is the main source" start="00:01:09.600" video="mainVideo" id=subtitle]]
+[[!template text="of papers in my field" start="00:01:12.159" video="mainVideo" id=subtitle]]
+[[!template text="and many other scientific fields." start="00:01:14.080" video="mainVideo" id=subtitle]]
+[[!template text="It allows me to view these papers" start="00:01:16.720" video="mainVideo" id=subtitle]]
+[[!template text="with the abstracts and so on." start="00:01:22.640" video="mainVideo" id=subtitle]]
+[[!template text="In order to simplify viewing" start="00:01:27.680" video="mainVideo" id=subtitle]]
+[[!template text="and searching for relevant papers," start="00:01:32.159" video="mainVideo" id=subtitle]]
+[[!template text="I used this other package called" start="00:01:34.799" video="mainVideo" id=subtitle]]
+[[!template text="elfeed-score, and elfeed-score enables me" start="00:01:36.400" video="mainVideo" id=subtitle]]
+[[!template text="to assign a numerical score like this" start="00:01:41.600" video="mainVideo" id=subtitle]]
+[[!template text="to each of the archive entries." start="00:01:44.560" video="mainVideo" id=subtitle]]
+[[!template text="This numerical score is very simple." start="00:01:47.600" video="mainVideo" id=subtitle]]
+[[!template text="It's just based on matching things." start="00:01:49.200" video="mainVideo" id=subtitle]]
+[[!template text="So, for example, we can ask elfeed" start="00:01:52.560" video="mainVideo" id=subtitle]]
+[[!template text="to explain this. So if we say = x," start="00:01:59.200" video="mainVideo" id=subtitle]]
+[[!template text="then this just says that" start="00:02:05.040" video="mainVideo" id=subtitle]]
+[[!template text="this matches three rules" start="00:02:08.720" video="mainVideo" id=subtitle]]
+[[!template text="for a score of 76. This paper." start="00:02:10.000" video="mainVideo" id=subtitle]]
+[[!template text="This is simply because I am searching" start="00:02:12.720" video="mainVideo" id=subtitle]]
+[[!template text="for these keywords" start="00:02:14.959" video="mainVideo" id=subtitle]]
+[[!template text="that are very interesting to me," start="00:02:16.800" video="mainVideo" id=subtitle]]
+[[!template text="such as neural networks" start="00:02:19.040" video="mainVideo" id=subtitle]]
+[[!template text="or federated learning." start="00:02:20.879" video="mainVideo" id=subtitle]]
+[[!template text="And now, if I see a paper here" start="00:02:22.879" video="mainVideo" id=subtitle]]
+[[!template text="that I am interested in..." start="00:02:28.959" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's say I'm interested in this paper" start="00:02:30.239" video="mainVideo" id=subtitle]]
+[[!template text="about Gaussian Process Inference," start="00:02:32.720" video="mainVideo" id=subtitle]]
+[[!template text="then I want to store it" start="00:02:35.040" video="mainVideo" id=subtitle]]
+[[!template text="in my local library. So I want the PDF" start="00:02:36.640" video="mainVideo" id=subtitle]]
+[[!template text="and I want to be able to cite it" start="00:02:40.160" video="mainVideo" id=subtitle]]
+[[!template text="in the future. To do that," start="00:02:41.920" video="mainVideo" id=subtitle]]
+[[!template text="I use a package called org-ref" start="00:02:44.000" video="mainVideo" id=subtitle]]
+[[!template text="that allows me to fetch papers from arXiv." start="00:02:46.080" video="mainVideo" id=subtitle]]
+[[!template text="So here I wrote a helper function," start="00:02:54.640" video="mainVideo" id=subtitle]]
+[[!template text="this elfeed-entry-to-arxiv" start="00:02:56.720" video="mainVideo" id=subtitle]]
+[[!template text="that automatically gets this paper." start="00:02:59.200" video="mainVideo" id=subtitle]]
+[[!template text="It asks me where to put it," start="00:03:02.480" video="mainVideo" id=subtitle]]
+[[!template text="it completes with my default libraries," start="00:03:03.840" video="mainVideo" id=subtitle]]
+[[!template text="and then it fetches the paper from arXiv" start="00:03:07.840" video="mainVideo" id=subtitle]]
+[[!template text="and places it in this folder," start="00:03:13.360" video="mainVideo" id=subtitle]]
+[[!template text="and also places it in my bibliography file" start="00:03:16.159" video="mainVideo" id=subtitle]]
+[[!template text="which is written in BibLaTex." start="00:03:20.000" video="mainVideo" id=subtitle]]
+[[!template text="So here, if we search for this paper now," start="00:03:23.280" video="mainVideo" id=subtitle]]
+[[!template text="we find that it is in our library." start="00:03:30.239" video="mainVideo" id=subtitle]]
+[[!template text="This library interface" start="00:03:35.200" video="mainVideo" id=subtitle]]
+[[!template text="is from a package called citar," start="00:03:38.000" video="mainVideo" id=subtitle]]
+[[!template text="and I have customized it quite a bit" start="00:03:41.280" video="mainVideo" id=subtitle]]
+[[!template text="to display all of the papers in my library" start="00:03:44.000" video="mainVideo" id=subtitle]]
+[[!template text="in this format." start="00:03:48.879" video="mainVideo" id=subtitle]]
+[[!template new="1" text="This just reads from a BibLaTeX file." start="00:03:50.560" video="mainVideo" id=subtitle]]
+[[!template text="So if we open it like this," start="00:03:55.439" video="mainVideo" id=subtitle]]
+[[!template text="you'll see that this is the" start="00:03:59.519" video="mainVideo" id=subtitle]]
+[[!template text="the entry that it placed." start="00:04:02.879" video="mainVideo" id=subtitle]]
+[[!template text="One of the interesting things here is that" start="00:04:06.640" video="mainVideo" id=subtitle]]
+[[!template text="org-ref actually doesn't really fetch" start="00:04:10.959" video="mainVideo" id=subtitle]]
+[[!template text="all of the entries in this format." start="00:04:13.519" video="mainVideo" id=subtitle]]
+[[!template text="Moreover, I want all the entries in my file" start="00:04:16.079" video="mainVideo" id=subtitle]]
+[[!template text="to look quite similar," start="00:04:18.639" video="mainVideo" id=subtitle]]
+[[!template text="and to have this very similar look," start="00:04:20.160" video="mainVideo" id=subtitle]]
+[[!template text="and the way I accomplish that is by" start="00:04:23.520" video="mainVideo" id=subtitle]]
+[[!template text="using several tools and chaining them." start="00:04:25.440" video="mainVideo" id=subtitle]]
+[[!template text="So in order to see this..." start="00:04:28.960" video="mainVideo" id=subtitle]]
+[[!template text="So here, this is the function" start="00:04:37.280" video="mainVideo" id=subtitle]]
+[[!template text="that I used to..." start="00:04:39.600" video="mainVideo" id=subtitle]]
+[[!template text="This is basically run as a hook after each time" start="00:04:41.680" video="mainVideo" id=subtitle]]
+[[!template text="Emacs modifies the bibliography file," start="00:04:46.720" video="mainVideo" id=subtitle]]
+[[!template text="and it runs rebiber" start="00:04:49.680" video="mainVideo" id=subtitle]]
+[[!template text="which gets the conference versions" start="00:04:52.320" video="mainVideo" id=subtitle]]
+[[!template text="of papers that I fetch from arXiv," start="00:04:56.479" video="mainVideo" id=subtitle]]
+[[!template text="because arXiv is a pre-print directory," start="00:04:58.320" video="mainVideo" id=subtitle]]
+[[!template text="and then biber normalizes the arXiv file" start="00:05:00.800" video="mainVideo" id=subtitle]]
+[[!template text="to have a consistent look," start="00:05:05.360" video="mainVideo" id=subtitle]]
+[[!template text="and then I apply just some substitutions" start="00:05:07.919" video="mainVideo" id=subtitle]]
+[[!template text="which I like more." start="00:05:10.320" video="mainVideo" id=subtitle]]
+[[!template text="Finally, I have the whole thing" start="00:05:12.960" video="mainVideo" id=subtitle]]
+[[!template text="under version control." start="00:05:14.560" video="mainVideo" id=subtitle]]
+[[!template text="This function, reformat-bib-library," start="00:05:16.639" video="mainVideo" id=subtitle]]
+[[!template text="I make it into a hook" start="00:05:20.000" video="mainVideo" id=subtitle]]
+[[!template text="and I run it every time after I save." start="00:05:21.840" video="mainVideo" id=subtitle]]
+[[!template text="It just checks if the current buffer" start="00:05:24.720" video="mainVideo" id=subtitle]]
+[[!template text="is the main bib library." start="00:05:27.039" video="mainVideo" id=subtitle]]
+[[!template text="We will just reformat the library." start="00:05:29.039" video="mainVideo" id=subtitle]]
+[[!template text="This allows me to keep the library" start="00:05:31.840" video="mainVideo" id=subtitle]]
+[[!template text="looking all consistent like this." start="00:05:33.680" video="mainVideo" id=subtitle]]
+[[!template text="By the way, all of the code is available." start="00:05:37.199" video="mainVideo" id=subtitle]]
+[[!template text="You don't have to get it from the video." start="00:05:39.120" video="mainVideo" id=subtitle]]
+[[!template text="I will attach it as a GitHub gist." start="00:05:40.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="One of the things" start="00:05:48.720" video="mainVideo" id=subtitle]]
+[[!template text="that are really important" start="00:05:49.919" video="mainVideo" id=subtitle]]
+[[!template text="is that I want to be able to keep notes" start="00:05:51.520" video="mainVideo" id=subtitle]]
+[[!template text="on papers that I read." start="00:05:54.080" video="mainVideo" id=subtitle]]
+[[!template text="For example, here are some of" start="00:05:56.160" video="mainVideo" id=subtitle]]
+[[!template text="my existing notes." start="00:05:58.479" video="mainVideo" id=subtitle]]
+[[!template text="Now, let's add a note to the paper" start="00:06:00.319" video="mainVideo" id=subtitle]]
+[[!template text="that we just got." start="00:06:04.720" video="mainVideo" id=subtitle]]
+[[!template text="So the the pipeline here is that" start="00:06:06.080" video="mainVideo" id=subtitle]]
+[[!template text="I use citar with embark," start="00:06:08.800" video="mainVideo" id=subtitle]]
+[[!template text="which is another library," start="00:06:12.080" video="mainVideo" id=subtitle]]
+[[!template text="but you can use any other library" start="00:06:13.199" video="mainVideo" id=subtitle]]
+[[!template text="just for completion" start="00:06:15.600" video="mainVideo" id=subtitle]]
+[[!template text="and acting upon completion, like ivy," start="00:06:17.039" video="mainVideo" id=subtitle]]
+[[!template text="and I ask it to open notes" start="00:06:19.600" video="mainVideo" id=subtitle]]
+[[!template text="and then it asks me how to capture it." start="00:06:21.360" video="mainVideo" id=subtitle]]
+[[!template text="So these capture templates" start="00:06:23.680" video="mainVideo" id=subtitle]]
+[[!template text="are handled by the org-roam package," start="00:06:25.120" video="mainVideo" id=subtitle]]
+[[!template text="which is a very, very interesting package" start="00:06:27.440" video="mainVideo" id=subtitle]]
+[[!template text="for note-taking." start="00:06:30.400" video="mainVideo" id=subtitle]]
+[[!template text="org-roam, among other things, allows us" start="00:06:32.560" video="mainVideo" id=subtitle]]
+[[!template text="to write linkable notes in Org mode," start="00:06:36.160" video="mainVideo" id=subtitle]]
+[[!template text="and moreover, it is very extensible." start="00:06:38.800" video="mainVideo" id=subtitle]]
+[[!template text="There is another package called org-roam-bibtex" start="00:06:42.400" video="mainVideo" id=subtitle]]
+[[!template text="that allows us to attach these nodes" start="00:06:45.600" video="mainVideo" id=subtitle]]
+[[!template text="to bibliography files," start="00:06:47.840" video="mainVideo" id=subtitle]]
+[[!template text="which is what I'm doing right now." start="00:06:50.000" video="mainVideo" id=subtitle]]
+[[!template text="For example, I set up the capture template" start="00:06:51.919" video="mainVideo" id=subtitle]]
+[[!template text="such that when I press s" start="00:06:54.800" video="mainVideo" id=subtitle]]
+[[!template text="for short bibliography reference," start="00:06:57.680" video="mainVideo" id=subtitle]]
+[[!template text="it will make a new headline" start="00:07:01.440" video="mainVideo" id=subtitle]]
+[[!template text="in my &quot;Reference Notes&quot; note," start="00:07:04.800" video="mainVideo" id=subtitle]]
+[[!template text="and I can write things here" start="00:07:08.479" video="mainVideo" id=subtitle]]
+[[!template text="(so, for example, &quot;seems interesting&quot;)" start="00:07:10.479" video="mainVideo" id=subtitle]]
+[[!template text="and then note here that it added this paper" start="00:07:14.960" video="mainVideo" id=subtitle]]
+[[!template text="to ROAM_REFS, so this means that" start="00:07:18.000" video="mainVideo" id=subtitle]]
+[[!template text="when I look at these papers using citar," start="00:07:24.319" video="mainVideo" id=subtitle]]
+[[!template text="it will be able to find this note." start="00:07:26.720" video="mainVideo" id=subtitle]]
+[[!template text="Similarly, we can also add long-form notes." start="00:07:30.319" video="mainVideo" id=subtitle]]
+[[!template text="For example, if I do this and I add r," start="00:07:34.000" video="mainVideo" id=subtitle]]
+[[!template text="it will create an entirely new file" start="00:07:37.199" video="mainVideo" id=subtitle]]
+[[!template text="that I can take detailed notes in." start="00:07:39.840" video="mainVideo" id=subtitle]]
+[[!template text="The strengths of org-roam is that" start="00:07:48.000" video="mainVideo" id=subtitle]]
+[[!template text="I can do things like linking papers." start="00:07:50.639" video="mainVideo" id=subtitle]]
+[[!template text="For example, here are several books" start="00:07:53.520" video="mainVideo" id=subtitle]]
+[[!template text="that I am reading. This file just collects" start="00:07:55.360" video="mainVideo" id=subtitle]]
+[[!template text="these books so that I can find them" start="00:08:00.000" video="mainVideo" id=subtitle]]
+[[!template text="for easy reference." start="00:08:02.319" video="mainVideo" id=subtitle]]
+[[!template text="Of course, I can link these files from inside." start="00:08:03.919" video="mainVideo" id=subtitle]]
+[[!template text="You can see here that I also use org-cite" start="00:08:07.599" video="mainVideo" id=subtitle]]
+[[!template text="to cite other files, and I can act upon this" start="00:08:13.759" video="mainVideo" id=subtitle]]
+[[!template text="and open the notes corresponding to" start="00:08:18.720" video="mainVideo" id=subtitle]]
+[[!template text="this other book." start="00:08:21.199" video="mainVideo" id=subtitle]]
+[[!template text="So I'm a little short on time." start="00:08:28.240" video="mainVideo" id=subtitle]]
+[[!template text="I cannot go into detail on everything," start="00:08:30.319" video="mainVideo" id=subtitle]]
+[[!template text="but I will share my configuration," start="00:08:32.719" video="mainVideo" id=subtitle]]
+[[!template text="and I hope that this will inspire other people" start="00:08:34.560" video="mainVideo" id=subtitle]]
+[[!template text="to also use Emacs for their academic workflows." start="00:08:37.919" video="mainVideo" id=subtitle]]
+[[!template text="Thank you so much." start="00:08:43.919" video="mainVideo" id=subtitle]]
+[[!template text="captions by sachac" start="00:08:44.919" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/structural.md b/2021/captions/structural.md
new file mode 100644
index 00000000..5ec3bf26
--- /dev/null
+++ b/2021/captions/structural.md
@@ -0,0 +1,275 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hi. My name is Ethan," start="00:00:00.080" video="mainVideo" id=subtitle]]
+[[!template text="and today I'm going to be speaking" start="00:00:01.360" video="mainVideo" id=subtitle]]
+[[!template text="about tree-edit, which is a package" start="00:00:02.320" video="mainVideo" id=subtitle]]
+[[!template text="which aims to bring structural editing" start="00:00:04.240" video="mainVideo" id=subtitle]]
+[[!template text="to everyday languages." start="00:00:06.160" video="mainVideo" id=subtitle]]
+[[!template text="So what is structural editing?" start="00:00:08.320" video="mainVideo" id=subtitle]]
+[[!template text="The way that we typically" start="00:00:10.559" video="mainVideo" id=subtitle]]
+[[!template text="write code today" start="00:00:11.657" video="mainVideo" id=subtitle]]
+[[!template text="is working with characters, words," start="00:00:12.578" video="mainVideo" id=subtitle]]
+[[!template text="lines, paragraphs, and so on," start="00:00:14.480" video="mainVideo" id=subtitle]]
+[[!template text="and these objects have no real relation" start="00:00:16.206" video="mainVideo" id=subtitle]]
+[[!template text="to the structure of programming languages." start="00:00:18.600" video="mainVideo" id=subtitle]]
+[[!template text="In contrast, tree-edit's editing operations" start="00:00:21.520" video="mainVideo" id=subtitle]]
+[[!template text="map exactly to the structure" start="00:00:24.667" video="mainVideo" id=subtitle]]
+[[!template text="of the programming language," start="00:00:26.897" video="mainVideo" id=subtitle]]
+[[!template text="which is typically in a tree form" start="00:00:28.411" video="mainVideo" id=subtitle]]
+[[!template text="with different types of nodes" start="00:00:30.303" video="mainVideo" id=subtitle]]
+[[!template text="such as identifiers, expressions," start="00:00:32.053" video="mainVideo" id=subtitle]]
+[[!template text="and statements. Using this structure" start="00:00:33.920" video="mainVideo" id=subtitle]]
+[[!template text="can enable much more powerful" start="00:00:35.957" video="mainVideo" id=subtitle]]
+[[!template text="editing operations," start="00:00:37.548" video="mainVideo" id=subtitle]]
+[[!template text="and crucially editing operations" start="00:00:39.200" video="mainVideo" id=subtitle]]
+[[!template text="that map much more closely" start="00:00:40.769" video="mainVideo" id=subtitle]]
+[[!template text="to the way that we think about code." start="00:00:42.081" video="mainVideo" id=subtitle]]
+[[!template text="tree-edit was inspired by" start="00:00:44.960" video="mainVideo" id=subtitle]]
+[[!template text="paredit and lispy," start="00:00:46.140" video="mainVideo" id=subtitle]]
+[[!template text="which are two great" start="00:00:47.386" video="mainVideo" id=subtitle]]
+[[!template text="Lisp structural editors." start="00:00:48.320" video="mainVideo" id=subtitle]]
+[[!template text="However, what makes tree-edit unique" start="00:00:50.271" video="mainVideo" id=subtitle]]
+[[!template text="is that it can work with many languages," start="00:00:52.383" video="mainVideo" id=subtitle]]
+[[!template text="such as some of the" start="00:00:54.480" video="mainVideo" id=subtitle]]
+[[!template text="more mainstream languages like C, Java," start="00:00:55.759" video="mainVideo" id=subtitle]]
+[[!template text="Python, and so on." start="00:00:59.826" video="mainVideo" id=subtitle]]
+[[!template text="So now I'm going to show off tree-edit" start="00:01:01.600" video="mainVideo" id=subtitle]]
+[[!template text="in action, working with a Java program." start="00:01:03.273" video="mainVideo" id=subtitle]]
+[[!template text="So we can see on the left," start="00:01:05.705" video="mainVideo" id=subtitle]]
+[[!template text="we have a syntax tree," start="00:01:07.237" video="mainVideo" id=subtitle]]
+[[!template text="and the node in bold is what I call" start="00:01:09.119" video="mainVideo" id=subtitle]]
+[[!template text="the current node. So instead of" start="00:01:11.560" video="mainVideo" id=subtitle]]
+[[!template text="the concept of a cursor," start="00:01:13.780" video="mainVideo" id=subtitle]]
+[[!template text="where we have a point in 2D space," start="00:01:15.100" video="mainVideo" id=subtitle]]
+[[!template text="we instead work with a current node" start="00:01:17.600" video="mainVideo" id=subtitle]]
+[[!template text="which all our editing operations" start="00:01:20.285" video="mainVideo" id=subtitle]]
+[[!template text="take place upon." start="00:01:22.729" video="mainVideo" id=subtitle]]
+[[!template text="So we can move up and down," start="00:01:23.840" video="mainVideo" id=subtitle]]
+[[!template text="or rather side to side," start="00:01:26.479" video="mainVideo" id=subtitle]]
+[[!template text="move inwards down to the children" start="00:01:28.720" video="mainVideo" id=subtitle]]
+[[!template text="of the tree, back up to the parents." start="00:01:31.160" video="mainVideo" id=subtitle]]
+[[!template text="We can also jump to a node by its type." start="00:01:33.920" video="mainVideo" id=subtitle]]
+[[!template text="So we're going to jump to" start="00:01:36.799" video="mainVideo" id=subtitle]]
+[[!template text="a variable declaration." start="00:01:38.768" video="mainVideo" id=subtitle]]
+[[!template text="We can jump to an if statement." start="00:01:40.880" video="mainVideo" id=subtitle]]
+[[!template text="And as you might have noticed," start="00:01:44.399" video="mainVideo" id=subtitle]]
+[[!template text="tree-edit by default" start="00:01:46.880" video="mainVideo" id=subtitle]]
+[[!template text="uses a vim-style mode of editing," start="00:01:48.360" video="mainVideo" id=subtitle]]
+[[!template text="so it's a verb, which would be jump," start="00:01:51.337" video="mainVideo" id=subtitle]]
+[[!template text="and then a type," start="00:01:55.119" video="mainVideo" id=subtitle]]
+[[!template text="which would be if statement." start="00:01:56.874" video="mainVideo" id=subtitle]]
+[[!template text="So now I'll show off" start="00:02:00.799" video="mainVideo" id=subtitle]]
+[[!template text="the syntax tree modification in action." start="00:02:03.346" video="mainVideo" id=subtitle]]
+[[!template text="So if I delete this deleteme node," start="00:02:06.144" video="mainVideo" id=subtitle]]
+[[!template text="we can see the node is deleted," start="00:02:08.000" video="mainVideo" id=subtitle]]
+[[!template text="and also the comma is removed" start="00:02:10.112" video="mainVideo" id=subtitle]]
+[[!template text="since it's no longer needed." start="00:02:12.049" video="mainVideo" id=subtitle]]
+[[!template text="We can add some nodes back in." start="00:02:13.920" video="mainVideo" id=subtitle]]
+[[!template text="Here we just have a placeholder node" start="00:02:16.720" video="mainVideo" id=subtitle]]
+[[!template text="called tree, which we can swap out" start="00:02:18.160" video="mainVideo" id=subtitle]]
+[[!template text="with whatever we like." start="00:02:20.391" video="mainVideo" id=subtitle]]
+[[!template text="So if we want to put in, for example," start="00:02:21.875" video="mainVideo" id=subtitle]]
+[[!template text="a plus or minus operator," start="00:02:24.560" video="mainVideo" id=subtitle]]
+[[!template text="it'll put these two TREE things here" start="00:02:29.280" video="mainVideo" id=subtitle]]
+[[!template text="since there needs to be something there," start="00:02:30.879" video="mainVideo" id=subtitle]]
+[[!template text="but we can go fill them out as we like." start="00:02:32.634" video="mainVideo" id=subtitle]]
+[[!template text="So that's what that is." start="00:02:37.360" video="mainVideo" id=subtitle]]
+[[!template text="Then I'll delete these again." start="00:02:38.595" video="mainVideo" id=subtitle]]
+[[!template text="Next we can see raising." start="00:02:41.920" video="mainVideo" id=subtitle]]
+[[!template text="So if I raise reader," start="00:02:43.709" video="mainVideo" id=subtitle]]
+[[!template text="then it will replace" start="00:02:45.280" video="mainVideo" id=subtitle]]
+[[!template text="the outer function call" start="00:02:46.160" video="mainVideo" id=subtitle]]
+[[!template text="with the node itself." start="00:02:47.342" video="mainVideo" id=subtitle]]
+[[!template text="I could raise it again." start="00:02:48.583" video="mainVideo" id=subtitle]]
+[[!template text="The opposite operation to that" start="00:02:50.948" video="mainVideo" id=subtitle]]
+[[!template text="is wrapping. So I can wrap reader" start="00:02:53.363" video="mainVideo" id=subtitle]]
+[[!template text="back into function call," start="00:02:57.200" video="mainVideo" id=subtitle]]
+[[!template text="and I could wrap this again" start="00:02:59.519" video="mainVideo" id=subtitle]]
+[[!template text="if I wanted to. So that is wrapping." start="00:03:03.009" video="mainVideo" id=subtitle]]
+[[!template text="We can also do it on a statement level," start="00:03:08.480" video="mainVideo" id=subtitle]]
+[[!template text="so if I want to wrap this" start="00:03:12.640" video="mainVideo" id=subtitle]]
+[[!template text="in an if statement," start="00:03:13.760" video="mainVideo" id=subtitle]]
+[[!template text="I can wrap the statement," start="00:03:14.480" video="mainVideo" id=subtitle]]
+[[!template text="and there we go." start="00:03:17.034" video="mainVideo" id=subtitle]]
+[[!template text="And let's just raise it back up," start="00:03:18.400" video="mainVideo" id=subtitle]]
+[[!template text="raise it again." start="00:03:21.280" video="mainVideo" id=subtitle]]
+[[!template text="There we go. Finally, I'll show off" start="00:03:23.200" video="mainVideo" id=subtitle]]
+[[!template text="slurping and barfing," start="00:03:26.959" video="mainVideo" id=subtitle]]
+[[!template text="which... a little bit gross words," start="00:03:28.720" video="mainVideo" id=subtitle]]
+[[!template text="but I think it accurately describes" start="00:03:32.256" video="mainVideo" id=subtitle]]
+[[!template text="the action, so let me just add" start="00:03:34.879" video="mainVideo" id=subtitle]]
+[[!template text="a couple breaks here." start="00:03:37.519" video="mainVideo" id=subtitle]]
+[[!template text="So let's say we want" start="00:03:41.120" video="mainVideo" id=subtitle]]
+[[!template text="this if statement and a couple of breaks" start="00:03:44.748" video="mainVideo" id=subtitle]]
+[[!template text="to be inside of the while," start="00:03:46.779" video="mainVideo" id=subtitle]]
+[[!template text="so we can just slurp this up," start="00:03:48.319" video="mainVideo" id=subtitle]]
+[[!template text="and if we don't actually want them," start="00:03:50.959" video="mainVideo" id=subtitle]]
+[[!template text="we can barf them back out." start="00:03:52.433" video="mainVideo" id=subtitle]]
+[[!template text="So that's where those words" start="00:03:54.528" video="mainVideo" id=subtitle]]
+[[!template text="have come from." start="00:03:56.736" video="mainVideo" id=subtitle]]
+[[!template text="And we can just... delete as we please." start="00:03:57.840" video="mainVideo" id=subtitle]]
+[[!template text="So yeah, that's a quick overview" start="00:04:01.120" video="mainVideo" id=subtitle]]
+[[!template text="of the tree editing plugin in action." start="00:04:03.826" video="mainVideo" id=subtitle]]
+[[!template text="So now I want to talk a little bit" start="00:04:07.360" video="mainVideo" id=subtitle]]
+[[!template text="about the implementation of tree-edit." start="00:04:08.900" video="mainVideo" id=subtitle]]
+[[!template text="Tree-edit uses the tree-sitter parser" start="00:04:12.080" video="mainVideo" id=subtitle]]
+[[!template text="to convert text into a syntax tree." start="00:04:14.400" video="mainVideo" id=subtitle]]
+[[!template text="Tree-sitter is used by GitHub" start="00:04:17.919" video="mainVideo" id=subtitle]]
+[[!template text="for its syntax highlighting," start="00:04:21.501" video="mainVideo" id=subtitle]]
+[[!template text="and it's available in a bunch of editors," start="00:04:22.752" video="mainVideo" id=subtitle]]
+[[!template text="including Emacs, so it's" start="00:04:25.280" video="mainVideo" id=subtitle]]
+[[!template text="a fairly standard tool." start="00:04:27.120" video="mainVideo" id=subtitle]]
+[[!template text="However, the unique part about tree-edit" start="00:04:28.960" video="mainVideo" id=subtitle]]
+[[!template text="is how it performs" start="00:04:30.960" video="mainVideo" id=subtitle]]
+[[!template text="correct editing operations" start="00:04:32.479" video="mainVideo" id=subtitle]]
+[[!template text="on the syntax tree" start="00:04:34.479" video="mainVideo" id=subtitle]]
+[[!template text="and then converts that back into text." start="00:04:35.919" video="mainVideo" id=subtitle]]
+[[!template text="So to do that, we use miniKanren," start="00:04:38.320" video="mainVideo" id=subtitle]]
+[[!template text="and miniKanren is an embedded" start="00:04:41.759" video="mainVideo" id=subtitle]]
+[[!template text="domain-specific language" start="00:04:43.759" video="mainVideo" id=subtitle]]
+[[!template text="for logic programming." start="00:04:45.120" video="mainVideo" id=subtitle]]
+[[!template text="So what exactly does that mean?" start="00:04:47.440" video="mainVideo" id=subtitle]]
+[[!template text="In our case, it's just" start="00:04:50.080" video="mainVideo" id=subtitle]]
+[[!template text="an Emacs Lisp library called reazon," start="00:04:51.280" video="mainVideo" id=subtitle]]
+[[!template text="which exposes a set of macros" start="00:04:54.240" video="mainVideo" id=subtitle]]
+[[!template text="which enables us to program" start="00:04:56.720" video="mainVideo" id=subtitle]]
+[[!template text="in this logic programming style." start="00:04:58.320" video="mainVideo" id=subtitle]]
+[[!template text="I'm not going to get into the details" start="00:05:01.360" video="mainVideo" id=subtitle]]
+[[!template text="of how logic programming works." start="00:05:03.280" video="mainVideo" id=subtitle]]
+[[!template text="However, one of the most unique aspects" start="00:05:05.520" video="mainVideo" id=subtitle]]
+[[!template text="about it is that we can define" start="00:05:07.520" video="mainVideo" id=subtitle]]
+[[!template text="a predicate and then figure out" start="00:05:09.919" video="mainVideo" id=subtitle]]
+[[!template text="all the inputs to the predicate" start="00:05:13.600" video="mainVideo" id=subtitle]]
+[[!template text="that would hold to be true." start="00:05:15.280" video="mainVideo" id=subtitle]]
+[[!template text="So in this case," start="00:05:17.759" video="mainVideo" id=subtitle]]
+[[!template text="we have our query variable q," start="00:05:19.360" video="mainVideo" id=subtitle]]
+[[!template text="which will be what the output is," start="00:05:21.520" video="mainVideo" id=subtitle]]
+[[!template text="and we are asking for all the values of q" start="00:05:24.479" video="mainVideo" id=subtitle]]
+[[!template text="that pass this predicate of" start="00:05:29.120" video="mainVideo" id=subtitle]]
+[[!template text="being set-equal to 1 2 3 4." start="00:05:32.080" video="mainVideo" id=subtitle]]
+[[!template text="So if we execute this," start="00:05:34.479" video="mainVideo" id=subtitle]]
+[[!template text="it will take a little time..." start="00:05:36.880" video="mainVideo" id=subtitle]]
+[[!template text="It shouldn't be taking this long." start="00:05:40.080" video="mainVideo" id=subtitle]]
+[[!template text="Oh, there it goes." start="00:05:41.520" video="mainVideo" id=subtitle]]
+[[!template text="We can see that it's generated" start="00:05:43.280" video="mainVideo" id=subtitle]]
+[[!template text="a bunch of different answers" start="00:05:45.919" video="mainVideo" id=subtitle]]
+[[!template text="that are all set-equal to 1 2 3 4." start="00:05:47.520" video="mainVideo" id=subtitle]]
+[[!template text="So it's just a bunch of" start="00:05:51.199" video="mainVideo" id=subtitle]]
+[[!template text="different permutations of that." start="00:05:52.880" video="mainVideo" id=subtitle]]
+[[!template text="We can extend this notion" start="00:05:57.280" video="mainVideo" id=subtitle]]
+[[!template text="to a parser. In tree-edit, we've defined" start="00:05:59.120" video="mainVideo" id=subtitle]]
+[[!template text="a parser in reazon," start="00:06:03.600" video="mainVideo" id=subtitle]]
+[[!template text="and we can use that parser to figure out" start="00:06:05.360" video="mainVideo" id=subtitle]]
+[[!template text="any tokens that match the type of node" start="00:06:10.800" video="mainVideo" id=subtitle]]
+[[!template text="that we're trying to generate." start="00:06:15.919" video="mainVideo" id=subtitle]]
+[[!template text="If I execute this, we can see" start="00:06:16.880" video="mainVideo" id=subtitle]]
+[[!template text="that reazon has generated" start="00:06:19.600" video="mainVideo" id=subtitle]]
+[[!template text="these five answers that match" start="00:06:21.199" video="mainVideo" id=subtitle]]
+[[!template text="what a try statement is in Java." start="00:06:23.440" video="mainVideo" id=subtitle]]
+[[!template text="Here we can see we can have" start="00:06:26.960" video="mainVideo" id=subtitle]]
+[[!template text="an infinite amount of catches" start="00:06:29.680" video="mainVideo" id=subtitle]]
+[[!template text="optionally ending with a finally," start="00:06:31.919" video="mainVideo" id=subtitle]]
+[[!template text="and we always have to start" start="00:06:34.720" video="mainVideo" id=subtitle]]
+[[!template text="with a try and a block." start="00:06:36.160" video="mainVideo" id=subtitle]]
+[[!template text="We can see this again" start="00:06:39.039" video="mainVideo" id=subtitle]]
+[[!template text="with an argument list." start="00:06:40.000" video="mainVideo" id=subtitle]]
+[[!template text="We have the opening and closing" start="00:06:42.400" video="mainVideo" id=subtitle]]
+[[!template text="parentheses, and expressions" start="00:06:43.520" video="mainVideo" id=subtitle]]
+[[!template text="which are comma delimited." start="00:06:45.759" video="mainVideo" id=subtitle]]
+[[!template text="Now, for a more complex example, and" start="00:06:49.120" video="mainVideo" id=subtitle]]
+[[!template text="something that is along the lines" start="00:06:51.759" video="mainVideo" id=subtitle]]
+[[!template text="of what's in tree-edit," start="00:06:53.680" video="mainVideo" id=subtitle]]
+[[!template text="is if we have this x here" start="00:06:55.199" video="mainVideo" id=subtitle]]
+[[!template text="and we want to insert another expression," start="00:06:57.919" video="mainVideo" id=subtitle]]
+[[!template text="so x, y. We can assert" start="00:07:01.599" video="mainVideo" id=subtitle]]
+[[!template text="that there's some new tokens," start="00:07:05.759" video="mainVideo" id=subtitle]]
+[[!template text="and we want an expression" start="00:07:07.680" video="mainVideo" id=subtitle]]
+[[!template text="to be in those new tokens," start="00:07:10.160" video="mainVideo" id=subtitle]]
+[[!template text="and we can essentially state" start="00:07:11.840" video="mainVideo" id=subtitle]]
+[[!template text="where we want these new tokens to go" start="00:07:13.280" video="mainVideo" id=subtitle]]
+[[!template text="within the old list of tokens," start="00:07:15.039" video="mainVideo" id=subtitle]]
+[[!template text="so replacing it" start="00:07:19.759" video="mainVideo" id=subtitle]]
+[[!template text="after the previous expression," start="00:07:21.599" video="mainVideo" id=subtitle]]
+[[!template text="before the closed parentheses," start="00:07:23.360" video="mainVideo" id=subtitle]]
+[[!template text="and then we can state" start="00:07:26.000" video="mainVideo" id=subtitle]]
+[[!template text="that the whole thing parses." start="00:07:26.880" video="mainVideo" id=subtitle]]
+[[!template text="If we run that, we can see that" start="00:07:28.560" video="mainVideo" id=subtitle]]
+[[!template text="as we wanted earlier," start="00:07:30.080" video="mainVideo" id=subtitle]]
+[[!template text="which was a comma and then expression," start="00:07:32.479" video="mainVideo" id=subtitle]]
+[[!template text="we have that here as well." start="00:07:37.120" video="mainVideo" id=subtitle]]
+[[!template text="We can see this again." start="00:07:39.120" video="mainVideo" id=subtitle]]
+[[!template text="Here, the only change is that" start="00:07:41.759" video="mainVideo" id=subtitle]]
+[[!template text="we've moved the tokens to be" start="00:07:42.720" video="mainVideo" id=subtitle]]
+[[!template text="before the expression." start="00:07:45.280" video="mainVideo" id=subtitle]]
+[[!template text="So we want to put an expression" start="00:07:46.240" video="mainVideo" id=subtitle]]
+[[!template text="before this x, so we want something" start="00:07:48.800" video="mainVideo" id=subtitle]]
+[[!template text="like y, x," start="00:07:50.560" video="mainVideo" id=subtitle]]
+[[!template text="and if we execute that," start="00:07:52.560" video="mainVideo" id=subtitle]]
+[[!template text="we can see that it is correctly asserted" start="00:07:54.240" video="mainVideo" id=subtitle]]
+[[!template text="that it would be an expression" start="00:07:57.919" video="mainVideo" id=subtitle]]
+[[!template text="and then a comma afterwards." start="00:07:59.039" video="mainVideo" id=subtitle]]
+[[!template text="One last example is" start="00:08:01.520" video="mainVideo" id=subtitle]]
+[[!template text="if we have an if statement" start="00:08:02.960" video="mainVideo" id=subtitle]]
+[[!template text="and we want to add an extra block," start="00:08:04.400" video="mainVideo" id=subtitle]]
+[[!template text="we can see that it correctly figures out" start="00:08:07.759" video="mainVideo" id=subtitle]]
+[[!template text="that we need an else" start="00:08:11.599" video="mainVideo" id=subtitle]]
+[[!template text="in order to have another statement" start="00:08:12.400" video="mainVideo" id=subtitle]]
+[[!template text="in an if statement." start="00:08:13.840" video="mainVideo" id=subtitle]]
+[[!template text="So, next steps for tree-edit." start="00:08:16.720" video="mainVideo" id=subtitle]]
+[[!template text="The core of tree-edit is in place" start="00:08:19.759" video="mainVideo" id=subtitle]]
+[[!template text="but there's a lot of usability features" start="00:08:21.039" video="mainVideo" id=subtitle]]
+[[!template text="to add, and a lot of testing" start="00:08:23.120" video="mainVideo" id=subtitle]]
+[[!template text="that needs to be done" start="00:08:25.360" video="mainVideo" id=subtitle]]
+[[!template text="in order to iron out any bugs that exist." start="00:08:26.400" video="mainVideo" id=subtitle]]
+[[!template text="I'd like to add support" start="00:08:29.599" video="mainVideo" id=subtitle]]
+[[!template text="for as many languages as is possible." start="00:08:30.960" video="mainVideo" id=subtitle]]
+[[!template text="I think my next step" start="00:08:35.200" video="mainVideo" id=subtitle]]
+[[!template text="will probably be Python." start="00:08:36.240" video="mainVideo" id=subtitle]]
+[[!template text="There's some performance improvements" start="00:08:38.490" video="mainVideo" id=subtitle]]
+[[!template text="that need to be made, since using this" start="00:08:41.279" video="mainVideo" id=subtitle]]
+[[!template text="logic programming language" start="00:08:44.080" video="mainVideo" id=subtitle]]
+[[!template text="is fairly intensive." start="00:08:45.519" video="mainVideo" id=subtitle]]
+[[!template text="There's some optimizations" start="00:08:47.600" video="mainVideo" id=subtitle]]
+[[!template text="both on the library side" start="00:08:48.800" video="mainVideo" id=subtitle]]
+[[!template text="and on tree-edit side" start="00:08:50.560" video="mainVideo" id=subtitle]]
+[[!template text="that can be made." start="00:08:51.519" video="mainVideo" id=subtitle]]
+[[!template text="Contributors are of course welcome," start="00:08:53.360" video="mainVideo" id=subtitle]]
+[[!template text="as tree-edit is an open source project." start="00:08:55.519" video="mainVideo" id=subtitle]]
+[[!template text="For future work, I think the prospect" start="00:09:00.000" video="mainVideo" id=subtitle]]
+[[!template text="of voice controlled development" start="00:09:03.360" video="mainVideo" id=subtitle]]
+[[!template text="with tree-edit is actually something" start="00:09:04.480" video="mainVideo" id=subtitle]]
+[[!template text="that's really exciting," start="00:09:06.240" video="mainVideo" id=subtitle]]
+[[!template text="since syntax can be very cumbersome" start="00:09:07.920" video="mainVideo" id=subtitle]]
+[[!template text="when you're working with" start="00:09:11.120" video="mainVideo" id=subtitle]]
+[[!template text="voice control software." start="00:09:12.320" video="mainVideo" id=subtitle]]
+[[!template text="I can envision something like" start="00:09:14.240" video="mainVideo" id=subtitle]]
+[[!template text="saying, &quot;Jump to identifier," start="00:09:16.320" video="mainVideo" id=subtitle]]
+[[!template text="add plus operator, jump to if statement," start="00:09:19.440" video="mainVideo" id=subtitle]]
+[[!template text="wrap if statement in while.&quot;" start="00:09:26.640" video="mainVideo" id=subtitle]]
+[[!template text="So that's something" start="00:09:30.480" video="mainVideo" id=subtitle]]
+[[!template text="I'd like to investigate." start="00:09:31.519" video="mainVideo" id=subtitle]]
+[[!template text="I also would just like to" start="00:09:33.519" video="mainVideo" id=subtitle]]
+[[!template text="provide the core functionality" start="00:09:35.040" video="mainVideo" id=subtitle]]
+[[!template text="of tree-edit as something" start="00:09:37.279" video="mainVideo" id=subtitle]]
+[[!template text="that can be used as a library" start="00:09:39.120" video="mainVideo" id=subtitle]]
+[[!template text="for other projects," start="00:09:40.399" video="mainVideo" id=subtitle]]
+[[!template text="such as refactoring packages," start="00:09:41.920" video="mainVideo" id=subtitle]]
+[[!template text="or other non-Vim-style approaches," start="00:09:43.839" video="mainVideo" id=subtitle]]
+[[!template text="and just making the syntax generation" start="00:09:46.240" video="mainVideo" id=subtitle]]
+[[!template text="available for reuse." start="00:09:49.200" video="mainVideo" id=subtitle]]
+[[!template text="Finally, I'd like to thank" start="00:09:52.080" video="mainVideo" id=subtitle]]
+[[!template text="the authors of reazon" start="00:09:53.760" video="mainVideo" id=subtitle]]
+[[!template text="and elisp-tree-sitter," start="00:09:56.399" video="mainVideo" id=subtitle]]
+[[!template text="which in turn packages" start="00:09:58.399" video="mainVideo" id=subtitle]]
+[[!template text="tree-sitter itself," start="00:10:00.185" video="mainVideo" id=subtitle]]
+[[!template text="since tree-edit relies very heavily" start="00:10:02.079" video="mainVideo" id=subtitle]]
+[[!template text="on these two packages." start="00:10:05.440" video="mainVideo" id=subtitle]]
+[[!template text="I'd also like to thank" start="00:10:07.680" video="mainVideo" id=subtitle]]
+[[!template text="the author of lispy," start="00:10:08.959" video="mainVideo" id=subtitle]]
+[[!template text="since a lot of the design decisions" start="00:10:10.480" video="mainVideo" id=subtitle]]
+[[!template text="when it comes to the editing operations" start="00:10:12.720" video="mainVideo" id=subtitle]]
+[[!template text="are based very heavily on lispy." start="00:10:14.800" video="mainVideo" id=subtitle]]
+[[!template text="So that's the end of my talk." start="00:10:18.560" video="mainVideo" id=subtitle]]
+[[!template text="Thank you for watching." start="00:10:20.320" video="mainVideo" id=subtitle]]
+[[!template text="captions by sachac" start="00:10:22.959" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/teach.md b/2021/captions/teach.md
new file mode 100644
index 00000000..dc9ec925
--- /dev/null
+++ b/2021/captions/teach.md
@@ -0,0 +1,557 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello, everybody. My name is Daniel German." start="00:00:01.040" video="mainVideo" id=subtitle]]
+[[!template text="I'm a professor of computer science" start="00:00:03.520" video="mainVideo" id=subtitle]]
+[[!template text="at the University of Victoria," start="00:00:04.799" video="mainVideo" id=subtitle]]
+[[!template text="and I have been teaching programming" start="00:00:06.080" video="mainVideo" id=subtitle]]
+[[!template text="for more than 10 years." start="00:00:07.680" video="mainVideo" id=subtitle]]
+[[!template text="I want to tell you today" start="00:00:12.080" video="mainVideo" id=subtitle]]
+[[!template text="about how I have been" start="00:00:14.639" video="mainVideo" id=subtitle]]
+[[!template text="using Emacs effectively" start="00:00:15.759" video="mainVideo" id=subtitle]]
+[[!template text="during the last 10 years," start="00:00:17.680" video="mainVideo" id=subtitle]]
+[[!template text="and to try to improve how I not only" start="00:00:20.000" video="mainVideo" id=subtitle]]
+[[!template text="create content for my students," start="00:00:22.880" video="mainVideo" id=subtitle]]
+[[!template text="but also how I deliver it," start="00:00:24.720" video="mainVideo" id=subtitle]]
+[[!template text="and particularly how," start="00:00:26.480" video="mainVideo" id=subtitle]]
+[[!template text="within the last five years," start="00:00:27.680" video="mainVideo" id=subtitle]]
+[[!template text="I have been using Org mode" start="00:00:29.119" video="mainVideo" id=subtitle]]
+[[!template text="in a very effective way" start="00:00:31.599" video="mainVideo" id=subtitle]]
+[[!template text="that benefits both" start="00:00:33.200" video="mainVideo" id=subtitle]]
+[[!template text="my students and myself" start="00:00:35.600" video="mainVideo" id=subtitle]]
+[[!template text="in the creation and the delivery" start="00:00:38.239" video="mainVideo" id=subtitle]]
+[[!template text="of content." start="00:00:40.480" video="mainVideo" id=subtitle]]
+[[!template text="Let me switch to my computer." start="00:00:42.399" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to remove myself" start="00:00:45.200" video="mainVideo" id=subtitle]]
+[[!template text="because I can use" start="00:00:46.480" video="mainVideo" id=subtitle]]
+[[!template text="all the real-estate screen." start="00:00:47.840" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The goal of my presentation today" start="00:00:51.840" video="mainVideo" id=subtitle]]
+[[!template text="is really to give you" start="00:00:54.079" video="mainVideo" id=subtitle]]
+[[!template text="a little bit of an overview" start="00:00:55.600" video="mainVideo" id=subtitle]]
+[[!template text="of how I have been able to" start="00:00:59.280" video="mainVideo" id=subtitle]]
+[[!template text="combine the use of Org mode" start="00:01:03.440" video="mainVideo" id=subtitle]]
+[[!template text="and with some other tools." start="00:01:06.240" video="mainVideo" id=subtitle]]
+[[!template text="I'll talk about specifically about them" start="00:01:08.560" video="mainVideo" id=subtitle]]
+[[!template text="and then also offer some suggestions" start="00:01:10.880" video="mainVideo" id=subtitle]]
+[[!template text="and recommendations" start="00:01:13.680" video="mainVideo" id=subtitle]]
+[[!template text="in how to get it started." start="00:01:14.640" video="mainVideo" id=subtitle]]
+[[!template text="I have created a configuration," start="00:01:16.240" video="mainVideo" id=subtitle]]
+[[!template text="a set of configuration files" start="00:01:18.799" video="mainVideo" id=subtitle]]
+[[!template text="that you can use." start="00:01:20.080" video="mainVideo" id=subtitle]]
+[[!template text="I will describe them towards the end." start="00:01:20.799" video="mainVideo" id=subtitle]]
+[[!template text="Hopefully, it will make it easy" start="00:01:22.880" video="mainVideo" id=subtitle]]
+[[!template text="for all of you to get started on using it." start="00:01:28.240" video="mainVideo" id=subtitle]]
+[[!template text="So we start talking a little bit" start="00:01:31.439" video="mainVideo" id=subtitle]]
+[[!template text="about the challenges" start="00:01:33.200" video="mainVideo" id=subtitle]]
+[[!template text="of teaching programming." start="00:01:34.079" video="mainVideo" id=subtitle]]
+[[!template text="I think that the fundamental one" start="00:01:35.119" video="mainVideo" id=subtitle]]
+[[!template text="is that keeping the content" start="00:01:37.200" video="mainVideo" id=subtitle]]
+[[!template text="and the slides up to date is hard," start="00:01:41.680" video="mainVideo" id=subtitle]]
+[[!template text="because the content is programs." start="00:01:45.280" video="mainVideo" id=subtitle]]
+[[!template text="There are programs" start="00:01:46.960" video="mainVideo" id=subtitle]]
+[[!template text="that sometimes have errors," start="00:01:47.840" video="mainVideo" id=subtitle]]
+[[!template text="and sometimes the slides are" start="00:01:50.399" video="mainVideo" id=subtitle]]
+[[!template text="incomplete snippets of code, and that" start="00:01:53.759" video="mainVideo" id=subtitle]]
+[[!template text="once they go into the slides software," start="00:01:58.079" video="mainVideo" id=subtitle]]
+[[!template text="like Google Slides or PowerPoint," start="00:02:00.240" video="mainVideo" id=subtitle]]
+[[!template text="they're essentially static objects." start="00:02:01.840" video="mainVideo" id=subtitle]]
+[[!template text="If we need to update them," start="00:02:05.520" video="mainVideo" id=subtitle]]
+[[!template text="we basically don't know" start="00:02:07.439" video="mainVideo" id=subtitle]]
+[[!template text="whether the update code actually works," start="00:02:09.920" video="mainVideo" id=subtitle]]
+[[!template text="or does it work?" start="00:02:12.160" video="mainVideo" id=subtitle]]
+[[!template text="Also, we cannot insert automatically" start="00:02:13.440" video="mainVideo" id=subtitle]]
+[[!template text="the output." start="00:02:16.000" video="mainVideo" id=subtitle]]
+[[!template text="We'll have to run the snippet outside," start="00:02:16.400" video="mainVideo" id=subtitle]]
+[[!template text="and run it, and then insert that code." start="00:02:18.480" video="mainVideo" id=subtitle]]
+[[!template text="So that's very cumbersome." start="00:02:20.560" video="mainVideo" id=subtitle]]
+[[!template text="It's really, really one of the" start="00:02:22.080" video="mainVideo" id=subtitle]]
+[[!template text="major challenges of using a slide software" start="00:02:23.200" video="mainVideo" id=subtitle]]
+[[!template text="to teach programming." start="00:02:26.080" video="mainVideo" id=subtitle]]
+[[!template text="The other thing is that" start="00:02:29.360" video="mainVideo" id=subtitle]]
+[[!template text="during the presentation," start="00:02:30.879" video="mainVideo" id=subtitle]]
+[[!template text="there's nothing you can do with the code." start="00:02:32.000" video="mainVideo" id=subtitle]]
+[[!template text="You might be able to edit it," start="00:02:33.440" video="mainVideo" id=subtitle]]
+[[!template text="but you cannot run it." start="00:02:34.480" video="mainVideo" id=subtitle]]
+[[!template text="You have to move outside of the" start="00:02:35.440" video="mainVideo" id=subtitle]]
+[[!template text="presentation software" start="00:02:37.360" video="mainVideo" id=subtitle]]
+[[!template text="to be able to execute the code." start="00:02:38.640" video="mainVideo" id=subtitle]]
+[[!template text="The last one is kind of related to" start="00:02:42.800" video="mainVideo" id=subtitle]]
+[[!template text="the previous two." start="00:02:44.640" video="mainVideo" id=subtitle]]
+[[!template text="You don't have a single file" start="00:02:46.959" video="mainVideo" id=subtitle]]
+[[!template text="and your information is spread across" start="00:02:48.800" video="mainVideo" id=subtitle]]
+[[!template text="many, many different files," start="00:02:51.121" video="mainVideo" id=subtitle]]
+[[!template text="especially if you have lots of" start="00:02:52.879" video="mainVideo" id=subtitle]]
+[[!template text="different snippets in your slides." start="00:02:54.080" video="mainVideo" id=subtitle]]
+[[!template text="You probably have a lot of" start="00:02:55.760" video="mainVideo" id=subtitle]]
+[[!template text="different small files, each of them" start="00:02:56.959" video="mainVideo" id=subtitle]]
+[[!template text="contributing something to your slides," start="00:02:59.440" video="mainVideo" id=subtitle]]
+[[!template text="and so it becomes a pain to manage." start="00:03:01.599" video="mainVideo" id=subtitle]]
+[[!template text="All of this is where Org mode" start="00:03:07.280" video="mainVideo" id=subtitle]]
+[[!template text="really excels. Org mode is capable of" start="00:03:10.080" video="mainVideo" id=subtitle]]
+[[!template text="doing everything, and it needs" start="00:03:12.640" video="mainVideo" id=subtitle]]
+[[!template text="a little bit of help from some friends." start="00:03:15.840" video="mainVideo" id=subtitle]]
+[[!template text="I will describe what I mean by that." start="00:03:18.400" video="mainVideo" id=subtitle]]
+[[!template text="But the other thing" start="00:03:22.159" video="mainVideo" id=subtitle]]
+[[!template text="that is also very valuable" start="00:03:23.040" video="mainVideo" id=subtitle]]
+[[!template text="is that it's within the magic of Emacs." start="00:03:24.480" video="mainVideo" id=subtitle]]
+[[!template text="I absolutely love to be able to" start="00:03:27.440" video="mainVideo" id=subtitle]]
+[[!template text="work with text within Emacs." start="00:03:30.480" video="mainVideo" id=subtitle]]
+[[!template text="I enjoy actually creating my notes" start="00:03:32.879" video="mainVideo" id=subtitle]]
+[[!template text="in Org mode way more than if I was" start="00:03:34.799" video="mainVideo" id=subtitle]]
+[[!template text="making them in Google Slides." start="00:03:36.640" video="mainVideo" id=subtitle]]
+[[!template text="Let me start by giving you a short demo." start="00:03:39.360" video="mainVideo" id=subtitle]]
+[[!template text="I have been teaching programming in C++" start="00:03:42.400" video="mainVideo" id=subtitle]]
+[[!template text="for around five years," start="00:03:46.400" video="mainVideo" id=subtitle]]
+[[!template text="and this was really the trigger towards" start="00:03:47.519" video="mainVideo" id=subtitle]]
+[[!template text="trying to do everything within Org mode." start="00:03:50.159" video="mainVideo" id=subtitle]]
+[[!template text="So I have a repository in GitHub," start="00:03:53.280" video="mainVideo" id=subtitle]]
+[[!template text="and I think that GitHub" start="00:03:58.159" video="mainVideo" id=subtitle]]
+[[!template text="is an excellent tool" start="00:03:59.439" video="mainVideo" id=subtitle]]
+[[!template text="that works collaboration with Org mode." start="00:04:00.560" video="mainVideo" id=subtitle]]
+[[!template text="I'll describe actually" start="00:04:04.480" video="mainVideo" id=subtitle]]
+[[!template text="what I mean by that." start="00:04:05.439" video="mainVideo" id=subtitle]]
+[[!template text="My lectures are essentially Org files." start="00:04:07.680" video="mainVideo" id=subtitle]]
+[[!template text="So, for example, let's go into" start="00:04:09.680" video="mainVideo" id=subtitle]]
+[[!template text="one of these files." start="00:04:12.480" video="mainVideo" id=subtitle]]
+[[!template text="This is a an Org file." start="00:04:15.040" video="mainVideo" id=subtitle]]
+[[!template text="You can actually see it in the extension." start="00:04:16.799" video="mainVideo" id=subtitle]]
+[[!template text="I get a table of contents." start="00:04:21.199" video="mainVideo" id=subtitle]]
+[[!template text="GitHub creates or give us actually" start="00:04:26.160" video="mainVideo" id=subtitle]]
+[[!template text="the ability to quickly jump, and it creates" start="00:04:28.000" video="mainVideo" id=subtitle]]
+[[!template text="a dynamic table of contents," start="00:04:31.280" video="mainVideo" id=subtitle]]
+[[!template text="but I also can actually" start="00:04:32.880" video="mainVideo" id=subtitle]]
+[[!template text="create it automatically," start="00:04:33.759" video="mainVideo" id=subtitle]]
+[[!template text="and then here it goes." start="00:04:35.280" video="mainVideo" id=subtitle]]
+[[!template text="This is the code that i have." start="00:04:36.800" video="mainVideo" id=subtitle]]
+[[!template text="This is a snippet" start="00:04:38.479" video="mainVideo" id=subtitle]]
+[[!template text="that I present in the class." start="00:04:41.440" video="mainVideo" id=subtitle]]
+[[!template text="Let me actually show you" start="00:04:44.240" video="mainVideo" id=subtitle]]
+[[!template text="how I do it within Emacs." start="00:04:45.680" video="mainVideo" id=subtitle]]
+[[!template text="So what I will do is the following." start="00:04:48.400" video="mainVideo" id=subtitle]]
+[[!template text="Let me try to open that file." start="00:04:52.160" video="mainVideo" id=subtitle]]
+[[!template text="Here's the file," start="00:04:57.919" video="mainVideo" id=subtitle]]
+[[!template text="and it's exactly the same" start="00:04:59.440" video="mainVideo" id=subtitle]]
+[[!template text="that we were browsing in GitHub." start="00:05:00.880" video="mainVideo" id=subtitle]]
+[[!template text="What I do is I simply just scroll through" start="00:05:03.759" video="mainVideo" id=subtitle]]
+[[!template text="the document. It's almost like" start="00:05:08.720" video="mainVideo" id=subtitle]]
+[[!template text="movie credits at the end of the movie." start="00:05:10.160" video="mainVideo" id=subtitle]]
+[[!template text="I don't break them into chunks" start="00:05:13.440" video="mainVideo" id=subtitle]]
+[[!template text="that I show in the screen." start="00:05:15.360" video="mainVideo" id=subtitle]]
+[[!template text="I see no point in doing that." start="00:05:16.639" video="mainVideo" id=subtitle]]
+[[!template text="What I do is I simply scroll through" start="00:05:18.320" video="mainVideo" id=subtitle]]
+[[!template text="the text. The students are able to see" start="00:05:20.880" video="mainVideo" id=subtitle]]
+[[!template text="the same information in GitHub" start="00:05:24.160" video="mainVideo" id=subtitle]]
+[[!template text="on their computer," start="00:05:26.560" video="mainVideo" id=subtitle]]
+[[!template text="or they can print it if they want," start="00:05:27.759" video="mainVideo" id=subtitle]]
+[[!template text="and they are able to actually" start="00:05:29.680" video="mainVideo" id=subtitle]]
+[[!template text="follow with me, and then having" start="00:05:31.039" video="mainVideo" id=subtitle]]
+[[!template text="a much bigger picture" start="00:05:32.560" video="mainVideo" id=subtitle]]
+[[!template text="than if i just show a very small snippet." start="00:05:33.759" video="mainVideo" id=subtitle]]
+[[!template text="In the case that the snippet is too big," start="00:05:36.320" video="mainVideo" id=subtitle]]
+[[!template text="for example, let's say this one" start="00:05:38.800" video="mainVideo" id=subtitle]]
+[[!template text="actually doesn't cover the..." start="00:05:40.800" video="mainVideo" id=subtitle]]
+[[!template text="covers more than full screen," start="00:05:42.240" video="mainVideo" id=subtitle]]
+[[!template text="I actually reduce the size" start="00:05:43.759" video="mainVideo" id=subtitle]]
+[[!template text="and then give a little bit of" start="00:05:45.360" video="mainVideo" id=subtitle]]
+[[!template text="an explanation of the whole thing," start="00:05:48.000" video="mainVideo" id=subtitle]]
+[[!template text="and then focus and say this is the line" start="00:05:49.759" video="mainVideo" id=subtitle]]
+[[!template text="where we have to pay attention." start="00:05:51.600" video="mainVideo" id=subtitle]]
+[[!template text="Notice actually how I use color for that." start="00:05:53.600" video="mainVideo" id=subtitle]]
+[[!template text="I think that the ability to use color" start="00:05:55.600" video="mainVideo" id=subtitle]]
+[[!template text="and typesetting is fundamental" start="00:05:57.759" video="mainVideo" id=subtitle]]
+[[!template text="to be able to do this effectively," start="00:05:59.759" video="mainVideo" id=subtitle]]
+[[!template text="and the nice thing is that" start="00:06:01.520" video="mainVideo" id=subtitle]]
+[[!template text="we can configure Org mode" start="00:06:02.720" video="mainVideo" id=subtitle]]
+[[!template text="to be able to do most of this" start="00:06:04.160" video="mainVideo" id=subtitle]]
+[[!template text="automatically." start="00:06:05.840" video="mainVideo" id=subtitle]]
+[[!template text="As I said before," start="00:06:08.160" video="mainVideo" id=subtitle]]
+[[!template text="one of the great advantages is that" start="00:06:09.360" video="mainVideo" id=subtitle]]
+[[!template text="I can actually run the code dynamically." start="00:06:10.960" video="mainVideo" id=subtitle]]
+[[!template text="So let's say that the student says," start="00:06:13.600" video="mainVideo" id=subtitle]]
+[[!template text="&quot;But what if I change that value to 10?&quot;" start="00:06:15.360" video="mainVideo" id=subtitle]]
+[[!template text="Well, let's try it." start="00:06:17.360" video="mainVideo" id=subtitle]]
+[[!template text="Let's change it, run it," start="00:06:18.560" video="mainVideo" id=subtitle]]
+[[!template text="and then you can see here" start="00:06:20.560" video="mainVideo" id=subtitle]]
+[[!template text="that it has a 10." start="00:06:21.840" video="mainVideo" id=subtitle]]
+[[!template text="That's really powerful because" start="00:06:24.720" video="mainVideo" id=subtitle]]
+[[!template text="you're not tied to" start="00:06:26.960" video="mainVideo" id=subtitle]]
+[[!template text="what is the content you have" start="00:06:29.280" video="mainVideo" id=subtitle]]
+[[!template text="on the slides. If you find an error" start="00:06:30.560" video="mainVideo" id=subtitle]]
+[[!template text="or an omission, or you want to talk about" start="00:06:33.120" video="mainVideo" id=subtitle]]
+[[!template text="something else, you can very quickly" start="00:06:34.880" video="mainVideo" id=subtitle]]
+[[!template text="do it. You can add comments" start="00:06:36.880" video="mainVideo" id=subtitle]]
+[[!template text="and then make some suggestions" start="00:06:40.720" video="mainVideo" id=subtitle]]
+[[!template text="specifically to that," start="00:06:42.080" video="mainVideo" id=subtitle]]
+[[!template text="or worst-case scenario," start="00:06:43.840" video="mainVideo" id=subtitle]]
+[[!template text="if you really, really, need it," start="00:06:45.680" video="mainVideo" id=subtitle]]
+[[!template text="you can say, &quot;Let's load it into...&quot;" start="00:06:48.880" video="mainVideo" id=subtitle]]
+[[!template text="Let's actually do some hand annotation." start="00:06:55.440" video="mainVideo" id=subtitle]]
+[[!template text="Let's actually say, &quot;look at this thing," start="00:06:58.400" video="mainVideo" id=subtitle]]
+[[!template text="this is the value that I want you to" start="00:07:00.319" video="mainVideo" id=subtitle]]
+[[!template text="concentrate on.&quot;" start="00:07:01.840" video="mainVideo" id=subtitle]]
+[[!template text="It's not perfect." start="00:07:02.800" video="mainVideo" id=subtitle]]
+[[!template text="I'm not doing it with an Emacs." start="00:07:03.599" video="mainVideo" id=subtitle]]
+[[!template text="I wish there was a way to do it," start="00:07:04.960" video="mainVideo" id=subtitle]]
+[[!template text="but it is absolutely effective" start="00:07:06.960" video="mainVideo" id=subtitle]]
+[[!template text="because I'm actually able to" start="00:07:09.120" video="mainVideo" id=subtitle]]
+[[!template text="use the power. Notice that all that is" start="00:07:10.720" video="mainVideo" id=subtitle]]
+[[!template text="exported is just the block, and also" start="00:07:12.800" video="mainVideo" id=subtitle]]
+[[!template text="the color and typesetting," start="00:07:15.520" video="mainVideo" id=subtitle]]
+[[!template text="the typesetting of the content." start="00:07:22.400" video="mainVideo" id=subtitle]]
+[[!template text="So this is actually great." start="00:07:24.560" video="mainVideo" id=subtitle]]
+[[!template text="I have the colors red, purple, etc. etc." start="00:07:25.759" video="mainVideo" id=subtitle]]
+[[!template text="I love being able to do that." start="00:07:30.639" video="mainVideo" id=subtitle]]
+[[!template text="This is just a temporary file." start="00:07:34.160" video="mainVideo" id=subtitle]]
+[[!template text="I can actually discard it," start="00:07:35.919" video="mainVideo" id=subtitle]]
+[[!template text="and it doesn't really matter." start="00:07:36.880" video="mainVideo" id=subtitle]]
+[[!template text="Let me go back to the presentation." start="00:07:39.680" video="mainVideo" id=subtitle]]
+[[!template text="So that's the delivery." start="00:07:41.919" video="mainVideo" id=subtitle]]
+[[!template text="So the delivery is great," start="00:07:43.360" video="mainVideo" id=subtitle]]
+[[!template text="and I can tell the students" start="00:07:44.639" video="mainVideo" id=subtitle]]
+[[!template text="now you're actually in GitHub," start="00:07:46.400" video="mainVideo" id=subtitle]]
+[[!template text="if you want to test the code," start="00:07:48.080" video="mainVideo" id=subtitle]]
+[[!template text="just cut and paste." start="00:07:50.160" video="mainVideo" id=subtitle]]
+[[!template text="Notice that I clicked on the little icon." start="00:07:51.360" video="mainVideo" id=subtitle]]
+[[!template text="Now it's copied. It's now part of" start="00:07:54.240" video="mainVideo" id=subtitle]]
+[[!template text="the kill buffer (kill-ring)," start="00:07:56.639" video="mainVideo" id=subtitle]]
+[[!template text="so if I want to actually create a file" start="00:07:57.440" video="mainVideo" id=subtitle]]
+[[!template text="that has that content," start="00:07:59.520" video="mainVideo" id=subtitle]]
+[[!template text="I can very quickly do it." start="00:08:00.560" video="mainVideo" id=subtitle]]
+[[!template text="Try that with PowerPoint." start="00:08:02.560" video="mainVideo" id=subtitle]]
+[[!template text="You will have to have the text" start="00:08:05.840" video="mainVideo" id=subtitle]]
+[[!template text="without any nice typesetting," start="00:08:08.160" video="mainVideo" id=subtitle]]
+[[!template text="or you will have to have a picture" start="00:08:10.000" video="mainVideo" id=subtitle]]
+[[!template text="that is impossible to cut and paste." start="00:08:11.280" video="mainVideo" id=subtitle]]
+[[!template text="So that's something that the students" start="00:08:13.120" video="mainVideo" id=subtitle]]
+[[!template text="really, really appreciate of this." start="00:08:14.400" video="mainVideo" id=subtitle]]
+[[!template text="They can try it on the computer." start="00:08:17.440" video="mainVideo" id=subtitle]]
+[[!template text="They can load it into" start="00:08:18.879" video="mainVideo" id=subtitle]]
+[[!template text="their favorite editor." start="00:08:19.919" video="mainVideo" id=subtitle]]
+[[!template text="I don't force them to use Emacs," start="00:08:22.319" video="mainVideo" id=subtitle]]
+[[!template text="but I have to say that some of them" start="00:08:24.720" video="mainVideo" id=subtitle]]
+[[!template text="really get intrigued by this power" start="00:08:26.879" video="mainVideo" id=subtitle]]
+[[!template text="that they want to try Emacs" start="00:08:28.479" video="mainVideo" id=subtitle]]
+[[!template text="because they see that they can do things," start="00:08:30.000" video="mainVideo" id=subtitle]]
+[[!template text="that I can do things that they cannot do" start="00:08:31.440" video="mainVideo" id=subtitle]]
+[[!template text="with other tools." start="00:08:33.760" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so let's go back to presentation." start="00:08:35.919" video="mainVideo" id=subtitle]]
+[[!template text="The other half of it is" start="00:08:39.039" video="mainVideo" id=subtitle]]
+[[!template text="preparing the notes." start="00:08:40.080" video="mainVideo" id=subtitle]]
+[[!template text="I think the preparatory notes" start="00:08:41.039" video="mainVideo" id=subtitle]]
+[[!template text="is something that I want to do" start="00:08:44.640" video="mainVideo" id=subtitle]]
+[[!template text="as easy as possible." start="00:08:46.320" video="mainVideo" id=subtitle]]
+[[!template text="I want to be able to reduce the time" start="00:08:48.240" video="mainVideo" id=subtitle]]
+[[!template text="that I waste on things," start="00:08:52.560" video="mainVideo" id=subtitle]]
+[[!template text="that they are done." start="00:08:53.760" video="mainVideo" id=subtitle]]
+[[!template text="They're not part of the actual thinking" start="00:08:55.120" video="mainVideo" id=subtitle]]
+[[!template text="or the delivery of the presentation." start="00:08:57.519" video="mainVideo" id=subtitle]]
+[[!template text="So let me create a file." start="00:09:01.760" video="mainVideo" id=subtitle]]
+[[!template text="Let's call it rip2.org." start="00:09:03.440" video="mainVideo" id=subtitle]]
+[[!template text="Well, I have this one," start="00:09:05.720" video="mainVideo" id=subtitle]]
+[[!template text="so let's call it rip.org." start="00:09:07.839" video="mainVideo" id=subtitle]]
+[[!template text="Oh, I have this one too," start="00:09:09.519" video="mainVideo" id=subtitle]]
+[[!template text="so let's call it rip4.org." start="00:09:10.480" video="mainVideo" id=subtitle]]
+[[!template text="So it's empty." start="00:09:12.800" video="mainVideo" id=subtitle]]
+[[!template text="I use yasnippets. I think yasnippets" start="00:09:15.040" video="mainVideo" id=subtitle]]
+[[!template text="are very important," start="00:09:17.200" video="mainVideo" id=subtitle]]
+[[!template text="and I'll go through this" start="00:09:17.920" video="mainVideo" id=subtitle]]
+[[!template text="in a little bit later." start="00:09:19.040" video="mainVideo" id=subtitle]]
+[[!template text="It's important to set up" start="00:09:19.760" video="mainVideo" id=subtitle]]
+[[!template text="the properties for each language" start="00:09:21.200" video="mainVideo" id=subtitle]]
+[[!template text="that I use properly." start="00:09:23.440" video="mainVideo" id=subtitle]]
+[[!template text="I'll describe this a little bit later." start="00:09:24.399" video="mainVideo" id=subtitle]]
+[[!template text="Unfortunately, the properties" start="00:09:26.320" video="mainVideo" id=subtitle]]
+[[!template text="have to be evaluated one at a time," start="00:09:28.000" video="mainVideo" id=subtitle]]
+[[!template text="and so I'm just going to" start="00:09:30.080" video="mainVideo" id=subtitle]]
+[[!template text="kill the buffer and open it again." start="00:09:33.839" video="mainVideo" id=subtitle]]
+[[!template text="So now all of these properties" start="00:09:35.040" video="mainVideo" id=subtitle]]
+[[!template text="are properly set." start="00:09:36.480" video="mainVideo" id=subtitle]]
+[[!template text="As I said before, I have some yasnippets," start="00:09:40.560" video="mainVideo" id=subtitle]]
+[[!template text="so I can actually do very quickly..." start="00:09:43.760" video="mainVideo" id=subtitle]]
+[[!template text="This is C++, cout &lt;&lt; &quot;hello world&quot;," start="00:09:46.560" video="mainVideo" id=subtitle]]
+[[!template text="std::endl." start="00:09:55.200" video="mainVideo" id=subtitle]]
+[[!template text="And then I run it," start="00:09:58.080" video="mainVideo" id=subtitle]]
+[[!template text="and then it's inserted down here," start="00:10:00.080" video="mainVideo" id=subtitle]]
+[[!template text="so nothing special." start="00:10:02.720" video="mainVideo" id=subtitle]]
+[[!template text="Let's assume that I make a mistake" start="00:10:04.000" video="mainVideo" id=subtitle]]
+[[!template text="and I type a double l here." start="00:10:06.160" video="mainVideo" id=subtitle]]
+[[!template text="I will get an error." start="00:10:08.480" video="mainVideo" id=subtitle]]
+[[!template text="These line numbers unfortunately" start="00:10:10.720" video="mainVideo" id=subtitle]]
+[[!template text="don't perfectly match" start="00:10:12.399" video="mainVideo" id=subtitle]]
+[[!template text="with the line numbers" start="00:10:13.600" video="mainVideo" id=subtitle]]
+[[!template text="in the little snippet" start="00:10:15.040" video="mainVideo" id=subtitle]]
+[[!template text="because there's some code" start="00:10:17.839" video="mainVideo" id=subtitle]]
+[[!template text="that org-babel inserts," start="00:10:18.959" video="mainVideo" id=subtitle]]
+[[!template text="so that shifts them." start="00:10:22.160" video="mainVideo" id=subtitle]]
+[[!template text="So that's something to be aware of." start="00:10:23.040" video="mainVideo" id=subtitle]]
+[[!template text="I can correct it, run it," start="00:10:25.440" video="mainVideo" id=subtitle]]
+[[!template text="and then it inserts the result." start="00:10:27.680" video="mainVideo" id=subtitle]]
+[[!template text="Let's do one in C." start="00:10:30.160" video="mainVideo" id=subtitle]]
+[[!template text="I'll explain the exports both" start="00:10:36.079" video="mainVideo" id=subtitle]]
+[[!template text="a little bit." start="00:10:37.680" video="mainVideo" id=subtitle]]
+[[!template text="So let's assume that I don't want to" start="00:10:38.640" video="mainVideo" id=subtitle]]
+[[!template text="have a full main program." start="00:10:40.079" video="mainVideo" id=subtitle]]
+[[!template text="Let's assume that i just want to" start="00:10:41.519" video="mainVideo" id=subtitle]]
+[[!template text="demonstrate how to use a printf" start="00:10:42.560" video="mainVideo" id=subtitle]]
+[[!template text="&quot;hello world %s\n&quot;, &quot;my friend&quot;." start="00:10:45.200" video="mainVideo" id=subtitle]]
+[[!template text="Let's run it." start="00:10:54.959" video="mainVideo" id=subtitle]]
+[[!template text="I get a bunch of errors. Why?" start="00:10:56.800" video="mainVideo" id=subtitle]]
+[[!template text="Because I don't have a main program," start="00:10:58.800" video="mainVideo" id=subtitle]]
+[[!template text="so I have to actually tell org-babel" start="00:11:00.480" video="mainVideo" id=subtitle]]
+[[!template text="that I want a main product," start="00:11:03.279" video="mainVideo" id=subtitle]]
+[[!template text="so yes put a main around it." start="00:11:05.200" video="mainVideo" id=subtitle]]
+[[!template text="So now I run it and it says, oh," start="00:11:07.360" video="mainVideo" id=subtitle]]
+[[!template text="in the function main," start="00:11:09.040" video="mainVideo" id=subtitle]]
+[[!template text="we have an implicit declaration" start="00:11:09.760" video="mainVideo" id=subtitle]]
+[[!template text="for function printf." start="00:11:10.959" video="mainVideo" id=subtitle]]
+[[!template text="I'm very, very stringent" start="00:11:12.640" video="mainVideo" id=subtitle]]
+[[!template text="on my compilation options," start="00:11:14.000" video="mainVideo" id=subtitle]]
+[[!template text="so I want to have every single" start="00:11:16.959" video="mainVideo" id=subtitle]]
+[[!template text="potential error displayed ," start="00:11:18.959" video="mainVideo" id=subtitle]]
+[[!template text="so that's actually why." start="00:11:21.279" video="mainVideo" id=subtitle]]
+[[!template text="In this case, I actually need include," start="00:11:22.959" video="mainVideo" id=subtitle]]
+[[!template text="so I can say :includes &lt;stdio.h&gt;," start="00:11:24.640" video="mainVideo" id=subtitle]]
+[[!template text="and I'll run it and it runs perfectly." start="00:11:29.040" video="mainVideo" id=subtitle]]
+[[!template text="So why is this important?" start="00:11:31.040" video="mainVideo" id=subtitle]]
+[[!template text="Well, it allows me to just have" start="00:11:32.480" video="mainVideo" id=subtitle]]
+[[!template text="the snippet that I'm concerned about." start="00:11:35.440" video="mainVideo" id=subtitle]]
+[[!template text="I don't have to have all the overhead" start="00:11:37.600" video="mainVideo" id=subtitle]]
+[[!template text="of having to have the include, main, etc.," start="00:11:39.920" video="mainVideo" id=subtitle]]
+[[!template text="if I want to show" start="00:11:43.279" video="mainVideo" id=subtitle]]
+[[!template text="just one specific concept" start="00:11:44.000" video="mainVideo" id=subtitle]]
+[[!template text="and I can do it" start="00:11:45.440" video="mainVideo" id=subtitle]]
+[[!template text="in very few lines of code." start="00:11:46.560" video="mainVideo" id=subtitle]]
+[[!template text="I can do that immediately, of course." start="00:11:48.079" video="mainVideo" id=subtitle]]
+[[!template text="The students will not be able to" start="00:11:50.240" video="mainVideo" id=subtitle]]
+[[!template text="cut and paste it without the main file," start="00:11:51.279" video="mainVideo" id=subtitle]]
+[[!template text="but that's something" start="00:11:53.600" video="mainVideo" id=subtitle]]
+[[!template text="that we can explain to them." start="00:11:54.320" video="mainVideo" id=subtitle]]
+[[!template text="We can do all the languages." start="00:11:57.600" video="mainVideo" id=subtitle]]
+[[!template text="So I can say print," start="00:11:59.440" video="mainVideo" id=subtitle]]
+[[!template text="let's print just a list," start="00:12:02.079" video="mainVideo" id=subtitle]]
+[[!template text="or let's actually keep updating it," start="00:12:07.680" video="mainVideo" id=subtitle]]
+[[!template text="and let's do a map of a lambda x," start="00:12:10.000" video="mainVideo" id=subtitle]]
+[[!template text="x multiplied by x," start="00:12:16.000" video="mainVideo" id=subtitle]]
+[[!template text="and then we run it. Okay." start="00:12:19.279" video="mainVideo" id=subtitle]]
+[[!template text="The thing that is important" start="00:12:22.079" video="mainVideo" id=subtitle]]
+[[!template text="is that if we also have" start="00:12:23.200" video="mainVideo" id=subtitle]]
+[[!template text="the full power of the environment," start="00:12:25.120" video="mainVideo" id=subtitle]]
+[[!template text="right, so we can actually edit it" start="00:12:26.720" video="mainVideo" id=subtitle]]
+[[!template text="in the native mode of the language," start="00:12:28.320" video="mainVideo" id=subtitle]]
+[[!template text="and wherever we actually want to use" start="00:12:31.519" video="mainVideo" id=subtitle]]
+[[!template text="specific features, that they are available" start="00:12:34.560" video="mainVideo" id=subtitle]]
+[[!template text="in the particular mode." start="00:12:36.720" video="mainVideo" id=subtitle]]
+[[!template text="But for most of the cases," start="00:12:38.800" video="mainVideo" id=subtitle]]
+[[!template text="I don't need that," start="00:12:40.720" video="mainVideo" id=subtitle]]
+[[!template text="because my examples are relatively simple." start="00:12:41.519" video="mainVideo" id=subtitle]]
+[[!template text="Let's do one more." start="00:12:44.160" video="mainVideo" id=subtitle]]
+[[!template text="This is a little bit different: SQLite." start="00:12:46.720" video="mainVideo" id=subtitle]]
+[[!template text="In the previous examples," start="00:12:48.399" video="mainVideo" id=subtitle]]
+[[!template text="the output that is inserted" start="00:12:49.760" video="mainVideo" id=subtitle]]
+[[!template text="is a standard output." start="00:12:51.200" video="mainVideo" id=subtitle]]
+[[!template text="In SQLite, I want to actually see" start="00:12:52.720" video="mainVideo" id=subtitle]]
+[[!template text="the tables. I want to see" start="00:12:54.320" video="mainVideo" id=subtitle]]
+[[!template text="how the tables are," start="00:12:55.279" video="mainVideo" id=subtitle]]
+[[!template text="what the results are." start="00:12:56.720" video="mainVideo" id=subtitle]]
+[[!template text="So let's create table s." start="00:12:58.880" video="mainVideo" id=subtitle]]
+[[!template text="Let's call it r, a int, b int," start="00:13:04.000" video="mainVideo" id=subtitle]]
+[[!template text="and let's run it." start="00:13:08.399" video="mainVideo" id=subtitle]]
+[[!template text="This is-- oh, the table already exists." start="00:13:09.200" video="mainVideo" id=subtitle]]
+[[!template text="Okay. So drop table if exists r," start="00:13:10.639" video="mainVideo" id=subtitle]]
+[[!template text="and then we run it. Okay." start="00:13:16.240" video="mainVideo" id=subtitle]]
+[[!template text="So now it's created. sqlite..." start="00:13:17.440" video="mainVideo" id=subtitle]]
+[[!template text="So we can say create a table," start="00:13:21.120" video="mainVideo" id=subtitle]]
+[[!template text="and let's actually add SQL," start="00:13:25.920" video="mainVideo" id=subtitle]]
+[[!template text="and here we're actually going to add..." start="00:13:27.760" video="mainVideo" id=subtitle]]
+[[!template text="This is an example in C," start="00:13:32.079" video="mainVideo" id=subtitle]]
+[[!template text="and here we're going to have C++." start="00:13:34.240" video="mainVideo" id=subtitle]]
+[[!template text="Okay. So, SQL," start="00:13:38.240" video="mainVideo" id=subtitle]]
+[[!template text="and then we create a table," start="00:13:42.160" video="mainVideo" id=subtitle]]
+[[!template text="and then we populate" start="00:13:43.920" video="mainVideo" id=subtitle]]
+[[!template text="and then insert into R" start="00:13:47.839" video="mainVideo" id=subtitle]]
+[[!template text="values 1,2 2,3 3,4." start="00:13:51.360" video="mainVideo" id=subtitle]]
+[[!template text="Okay. So now I have a table," start="00:13:57.839" video="mainVideo" id=subtitle]]
+[[!template text="I have values," start="00:13:59.519" video="mainVideo" id=subtitle]]
+[[!template text="and I can do &quot;select * from here,&quot;" start="00:14:01.600" video="mainVideo" id=subtitle]]
+[[!template text="and then I get the result. Okay." start="00:14:04.560" video="mainVideo" id=subtitle]]
+[[!template text="It's almost magic" start="00:14:07.040" video="mainVideo" id=subtitle]]
+[[!template text="because I can actually get, formatted," start="00:14:07.920" video="mainVideo" id=subtitle]]
+[[!template text="the output in the way that I expected." start="00:14:10.399" video="mainVideo" id=subtitle]]
+[[!template text="Obviously, if my result is too big," start="00:14:13.040" video="mainVideo" id=subtitle]]
+[[!template text="then it will basically just create" start="00:14:15.279" video="mainVideo" id=subtitle]]
+[[!template text="a huge, huge buffer, or Org will say" start="00:14:18.399" video="mainVideo" id=subtitle]]
+[[!template text="the output is too big." start="00:14:20.880" video="mainVideo" id=subtitle]]
+[[!template text="So often with databases," start="00:14:21.920" video="mainVideo" id=subtitle]]
+[[!template text="I actually narrow my output, right," start="00:14:24.079" video="mainVideo" id=subtitle]]
+[[!template text="or I might do it with a clause," start="00:14:26.480" video="mainVideo" id=subtitle]]
+[[!template text="&quot;where a > 1&quot;." start="00:14:28.639" video="mainVideo" id=subtitle]]
+[[!template text="If the language is supported by Org Babel," start="00:14:34.959" video="mainVideo" id=subtitle]]
+[[!template text="then you can do all of this." start="00:14:36.959" video="mainVideo" id=subtitle]]
+[[!template text="Let me go back to the presentation." start="00:14:39.920" video="mainVideo" id=subtitle]]
+[[!template text="I'm running out of time." start="00:14:42.079" video="mainVideo" id=subtitle]]
+[[!template text="Let me give you a short tour" start="00:14:43.760" video="mainVideo" id=subtitle]]
+[[!template text="of how this is done." start="00:14:45.680" video="mainVideo" id=subtitle]]
+[[!template text="I have created a repository that has" start="00:14:47.279" video="mainVideo" id=subtitle]]
+[[!template text="all the configuration that I have." start="00:14:53.279" video="mainVideo" id=subtitle]]
+[[!template text="Everything is self-contained." start="00:14:54.800" video="mainVideo" id=subtitle]]
+[[!template text="You can just download it and run it." start="00:14:56.639" video="mainVideo" id=subtitle]]
+[[!template text="You will have to replace" start="00:14:59.600" video="mainVideo" id=subtitle]]
+[[!template text="your ~/.emacs.d directory," start="00:15:01.360" video="mainVideo" id=subtitle]]
+[[!template text="and then you can explore it, test it," start="00:15:03.760" video="mainVideo" id=subtitle]]
+[[!template text="and then pick things out of it," start="00:15:07.440" video="mainVideo" id=subtitle]]
+[[!template text="choose, etc." start="00:15:11.039" video="mainVideo" id=subtitle]]
+[[!template text="Let me go through the README." start="00:15:14.639" video="mainVideo" id=subtitle]]
+[[!template text="I think that the README" start="00:15:16.800" video="mainVideo" id=subtitle]]
+[[!template text="is actually useful." start="00:15:17.920" video="mainVideo" id=subtitle]]
+[[!template text="I have a function called actually start." start="00:15:19.600" video="mainVideo" id=subtitle]]
+[[!template text="That is the one" start="00:15:21.760" video="mainVideo" id=subtitle]]
+[[!template text="that creates indentation" start="00:15:22.480" video="mainVideo" id=subtitle]]
+[[!template text="and sets up the mode, etc." start="00:15:24.000" video="mainVideo" id=subtitle]]
+[[!template text="Let me talk about GitHub." start="00:15:28.399" video="mainVideo" id=subtitle]]
+[[!template text="So GitHub is a great resource. Why?" start="00:15:29.440" video="mainVideo" id=subtitle]]
+[[!template text="Well its publishing," start="00:15:31.839" video="mainVideo" id=subtitle]]
+[[!template text="as i mentioned before," start="00:15:32.880" video="mainVideo" id=subtitle]]
+[[!template text="is very simple." start="00:15:34.240" video="mainVideo" id=subtitle]]
+[[!template text="To publish, you basically just" start="00:15:35.519" video="mainVideo" id=subtitle]]
+[[!template text="push your changes" start="00:15:37.120" video="mainVideo" id=subtitle]]
+[[!template text="and it automatically renders the code." start="00:15:37.920" video="mainVideo" id=subtitle]]
+[[!template text="It's something that is quite useful." start="00:15:43.199" video="mainVideo" id=subtitle]]
+[[!template text="But it is not perfect," start="00:15:46.800" video="mainVideo" id=subtitle]]
+[[!template text="and it's not able to understand" start="00:15:48.720" video="mainVideo" id=subtitle]]
+[[!template text="the full Org. But for most of the things" start="00:15:50.399" video="mainVideo" id=subtitle]]
+[[!template text="that I use for teaching," start="00:15:52.880" video="mainVideo" id=subtitle]]
+[[!template text="it's sufficiently good." start="00:15:53.680" video="mainVideo" id=subtitle]]
+[[!template text="It would be better if it was full" start="00:15:55.600" video="mainVideo" id=subtitle]]
+[[!template text="at compliance, but it's not bad as it is." start="00:15:57.360" video="mainVideo" id=subtitle]]
+[[!template text="Version control. I think" start="00:16:00.720" video="mainVideo" id=subtitle]]
+[[!template text="it's extremely valuable" start="00:16:02.463" video="mainVideo" id=subtitle]]
+[[!template text="to have version control." start="00:16:03.839" video="mainVideo" id=subtitle]]
+[[!template text="It allows to actually use" start="00:16:05.199" video="mainVideo" id=subtitle]]
+[[!template text="different computers" start="00:16:08.079" video="mainVideo" id=subtitle]]
+[[!template text="or keep track of my changes," start="00:16:08.959" video="mainVideo" id=subtitle]]
+[[!template text="collaborate with authors," start="00:16:10.560" video="mainVideo" id=subtitle]]
+[[!template text="even have pull requests" start="00:16:11.920" video="mainVideo" id=subtitle]]
+[[!template text="from the students." start="00:16:13.040" video="mainVideo" id=subtitle]]
+[[!template text="Actually it's very empowering" start="00:16:13.759" video="mainVideo" id=subtitle]]
+[[!template text="for the students." start="00:16:16.320" video="mainVideo" id=subtitle]]
+[[!template text="Navigation, links, cut and paste" start="00:16:18.800" video="mainVideo" id=subtitle]]
+[[!template text="between code blocks," start="00:16:20.480" video="mainVideo" id=subtitle]]
+[[!template text="you can even edit in place" start="00:16:21.920" video="mainVideo" id=subtitle]]
+[[!template text="if you want to." start="00:16:23.199" video="mainVideo" id=subtitle]]
+[[!template text="In a pinch, you can actually use GitHub" start="00:16:26.160" video="mainVideo" id=subtitle]]
+[[!template text="to do the editing of your file." start="00:16:27.920" video="mainVideo" id=subtitle]]
+[[!template text="Of course, it will not update your buffers." start="00:16:30.000" video="mainVideo" id=subtitle]]
+[[!template text=":exports both. This is very important." start="00:16:33.199" video="mainVideo" id=subtitle]]
+[[!template text="If we have a block, by default," start="00:16:35.199" video="mainVideo" id=subtitle]]
+[[!template text="GitHub will not typeset" start="00:16:40.160" video="mainVideo" id=subtitle]]
+[[!template text="the output of that block." start="00:16:43.199" video="mainVideo" id=subtitle]]
+[[!template text="It will only put the source code," start="00:16:44.399" video="mainVideo" id=subtitle]]
+[[!template text="but not its output." start="00:16:45.839" video="mainVideo" id=subtitle]]
+[[!template text="In this case, if I actually showed this" start="00:16:47.199" video="mainVideo" id=subtitle]]
+[[!template text="in GitHub, &quot;hello world&quot; will not appear." start="00:16:50.079" video="mainVideo" id=subtitle]]
+[[!template text="So what we need to do is for every block," start="00:16:52.720" video="mainVideo" id=subtitle]]
+[[!template text="we have to do :exports both." start="00:16:55.120" video="mainVideo" id=subtitle]]
+[[!template text="okay that's unfortunate," start="00:16:57.040" video="mainVideo" id=subtitle]]
+[[!template text="but we can deal with that." start="00:16:58.720" video="mainVideo" id=subtitle]]
+[[!template text="Once it's done, then the output" start="00:17:01.120" video="mainVideo" id=subtitle]]
+[[!template text="is actually typeset." start="00:17:03.920" video="mainVideo" id=subtitle]]
+[[!template text="I mentioned that header args" start="00:17:06.079" video="mainVideo" id=subtitle]]
+[[!template text="are very important," start="00:17:07.520" video="mainVideo" id=subtitle]]
+[[!template text="because those are the ones" start="00:17:09.039" video="mainVideo" id=subtitle]]
+[[!template text="that set the parameters" start="00:17:10.079" video="mainVideo" id=subtitle]]
+[[!template text="for each one of the blocks that you have." start="00:17:12.799" video="mainVideo" id=subtitle]]
+[[!template text="You don't want to have to type every" start="00:17:14.640" video="mainVideo" id=subtitle]]
+[[!template text="single one of them at once." start="00:17:16.000" video="mainVideo" id=subtitle]]
+[[!template text="For example, let me go back to" start="00:17:19.120" video="mainVideo" id=subtitle]]
+[[!template text="my presentation." start="00:17:20.880" video="mainVideo" id=subtitle]]
+[[!template text="Here's actually the parameters for C." start="00:17:23.839" video="mainVideo" id=subtitle]]
+[[!template text="C, I say, I don't want you to" start="00:17:26.160" video="mainVideo" id=subtitle]]
+[[!template text="automatically add a main." start="00:17:28.880" video="mainVideo" id=subtitle]]
+[[!template text="I want to provide my main," start="00:17:30.000" video="mainVideo" id=subtitle]]
+[[!template text="and these are the flags to the compiler." start="00:17:31.120" video="mainVideo" id=subtitle]]
+[[!template text="With C++, similar. With SQLite," start="00:17:34.160" video="mainVideo" id=subtitle]]
+[[!template text="I said this is my database," start="00:17:37.280" video="mainVideo" id=subtitle]]
+[[!template text="this is the data," start="00:17:38.720" video="mainVideo" id=subtitle]]
+[[!template text="the file where the database lives," start="00:17:39.600" video="mainVideo" id=subtitle]]
+[[!template text="and for the results, I want you to insert" start="00:17:41.360" video="mainVideo" id=subtitle]]
+[[!template text="the column names. I want to see" start="00:17:44.559" video="mainVideo" id=subtitle]]
+[[!template text="the names of the columns in the result." start="00:17:46.160" video="mainVideo" id=subtitle]]
+[[!template text="So those are actually why" start="00:17:48.400" video="mainVideo" id=subtitle]]
+[[!template text="the headers are important." start="00:17:50.960" video="mainVideo" id=subtitle]]
+[[!template text="There's one in general." start="00:17:53.840" video="mainVideo" id=subtitle]]
+[[!template text="That's :results output." start="00:17:55.520" video="mainVideo" id=subtitle]]
+[[!template text="If you're interested on showing" start="00:17:56.880" video="mainVideo" id=subtitle]]
+[[!template text="the standard output of your snippet," start="00:17:59.039" video="mainVideo" id=subtitle]]
+[[!template text="then you have to use :results output." start="00:18:01.760" video="mainVideo" id=subtitle]]
+[[!template text="Otherwise, it will insert" start="00:18:03.600" video="mainVideo" id=subtitle]]
+[[!template text="the result of the last expression." start="00:18:04.799" video="mainVideo" id=subtitle]]
+[[!template text="It just depends on what you want to show," start="00:18:06.720" video="mainVideo" id=subtitle]]
+[[!template text="but it's important" start="00:18:08.000" video="mainVideo" id=subtitle]]
+[[!template text="that you are aware of that." start="00:18:08.720" video="mainVideo" id=subtitle]]
+[[!template text="I'm almost running out of time." start="00:18:11.200" video="mainVideo" id=subtitle]]
+[[!template text="There are some things that are C-specific" start="00:18:13.440" video="mainVideo" id=subtitle]]
+[[!template text="and that I sort of covered" start="00:18:15.919" video="mainVideo" id=subtitle]]
+[[!template text="during the demo." start="00:18:18.400" video="mainVideo" id=subtitle]]
+[[!template text="You can use advanced Org features," start="00:18:23.919" video="mainVideo" id=subtitle]]
+[[!template text="and you can actually use noweb." start="00:18:26.000" video="mainVideo" id=subtitle]]
+[[!template text="Now that's confusing for students," start="00:18:29.039" video="mainVideo" id=subtitle]]
+[[!template text="so i will suggest that you actually do it" start="00:18:30.640" video="mainVideo" id=subtitle]]
+[[!template text="but then inform the students" start="00:18:33.600" video="mainVideo" id=subtitle]]
+[[!template text="very clearly of that." start="00:18:34.880" video="mainVideo" id=subtitle]]
+[[!template text="Some potential issues:" start="00:18:37.760" video="mainVideo" id=subtitle]]
+[[!template text="_ (underscore). _ is used everywhere." start="00:18:39.280" video="mainVideo" id=subtitle]]
+[[!template text="By default, it will try to export it--" start="00:18:42.400" video="mainVideo" id=subtitle]]
+[[!template text="Org will try to export it as circumflex," start="00:18:44.640" video="mainVideo" id=subtitle]]
+[[!template text="the same as with GitHub." start="00:18:46.960" video="mainVideo" id=subtitle]]
+[[!template text="So we want to inform Org and GitHub" start="00:18:48.400" video="mainVideo" id=subtitle]]
+[[!template text="not to do anything with them," start="00:18:52.480" video="mainVideo" id=subtitle]]
+[[!template text="and this is via the circumflex." start="00:18:53.840" video="mainVideo" id=subtitle]]
+[[!template text="So we said in #+OPTIONS: ^:nil ," start="00:18:55.520" video="mainVideo" id=subtitle]]
+[[!template text="and that actually takes care" start="00:18:57.440" video="mainVideo" id=subtitle]]
+[[!template text="of the circumflex and also the underscore." start="00:18:58.720" video="mainVideo" id=subtitle]]
+[[!template text="It's kind of confusing" start="00:19:01.679" video="mainVideo" id=subtitle]]
+[[!template text="because it's both," start="00:19:02.720" video="mainVideo" id=subtitle]]
+[[!template text="but it's actually named" start="00:19:04.080" video="mainVideo" id=subtitle]]
+[[!template text="after the circumflex." start="00:19:05.120" video="mainVideo" id=subtitle]]
+[[!template text="The pipe character" start="00:19:06.720" video="mainVideo" id=subtitle]]
+[[!template text="is one of those characters" start="00:19:07.840" video="mainVideo" id=subtitle]]
+[[!template text="that is actually very, very common" start="00:19:08.880" video="mainVideo" id=subtitle]]
+[[!template text="in programming, but if you put in a table," start="00:19:10.640" video="mainVideo" id=subtitle]]
+[[!template text="there's no way to do it. Like, okay," start="00:19:12.799" video="mainVideo" id=subtitle]]
+[[!template text="I wish I had this table nicely" start="00:19:14.480" video="mainVideo" id=subtitle]]
+[[!template text="where I can say || here," start="00:19:16.559" video="mainVideo" id=subtitle]]
+[[!template text="but if I put this ||," start="00:19:19.520" video="mainVideo" id=subtitle]]
+[[!template text="it will actually interpret it" start="00:19:21.280" video="mainVideo" id=subtitle]]
+[[!template text="as the separator." start="00:19:22.799" video="mainVideo" id=subtitle]]
+[[!template text="So that's one of the few things" start="00:19:23.919" video="mainVideo" id=subtitle]]
+[[!template text="that's kind of annoying." start="00:19:25.760" video="mainVideo" id=subtitle]]
+[[!template text="Final words. See my configuration file," start="00:19:27.679" video="mainVideo" id=subtitle]]
+[[!template text="and try to typeset the code," start="00:19:31.679" video="mainVideo" id=subtitle]]
+[[!template text="the buffer as close as possible" start="00:19:35.520" video="mainVideo" id=subtitle]]
+[[!template text="to what you want to present." start="00:19:37.520" video="mainVideo" id=subtitle]]
+[[!template text="As you can see here," start="00:19:38.720" video="mainVideo" id=subtitle]]
+[[!template text="I'm actually using colors to highlight" start="00:19:40.000" video="mainVideo" id=subtitle]]
+[[!template text="by using the current line." start="00:19:42.240" video="mainVideo" id=subtitle]]
+[[!template text="Use yasnippets." start="00:19:44.320" video="mainVideo" id=subtitle]]
+[[!template text="They're amazing, and they will actually" start="00:19:46.960" video="mainVideo" id=subtitle]]
+[[!template text="make your life much more useful." start="00:19:48.480" video="mainVideo" id=subtitle]]
+[[!template text="Experiment." start="00:19:51.440" video="mainVideo" id=subtitle]]
+[[!template text="Just a conclusion." start="00:19:53.280" video="mainVideo" id=subtitle]]
+[[!template text="Org mode and Emacs really make" start="00:19:56.720" video="mainVideo" id=subtitle]]
+[[!template text="a wonderful, amazing environment" start="00:19:58.400" video="mainVideo" id=subtitle]]
+[[!template text="for teaching programming." start="00:20:01.039" video="mainVideo" id=subtitle]]
+[[!template text="I just want to end by saying that" start="00:20:03.360" video="mainVideo" id=subtitle]]
+[[!template text="I'm very grateful to all the Emacs community" start="00:20:06.640" video="mainVideo" id=subtitle]]
+[[!template text="because I have benefited tremendously" start="00:20:10.320" video="mainVideo" id=subtitle]]
+[[!template text="over the years. I have been using Emacs" start="00:20:14.159" video="mainVideo" id=subtitle]]
+[[!template text="since 1991, so this is essentially" start="00:20:16.080" video="mainVideo" id=subtitle]]
+[[!template text="my 30th year that have been using Emacs." start="00:20:18.960" video="mainVideo" id=subtitle]]
+[[!template text="I think that is the most important," start="00:20:22.240" video="mainVideo" id=subtitle]]
+[[!template text="most fundamental tool that I use" start="00:20:24.640" video="mainVideo" id=subtitle]]
+[[!template text="day-to-day, from reading email," start="00:20:26.980" video="mainVideo" id=subtitle]]
+[[!template text="to doing my teaching, doing my papers," start="00:20:29.760" video="mainVideo" id=subtitle]]
+[[!template text="my research... it's everything." start="00:20:32.480" video="mainVideo" id=subtitle]]
+[[!template text="So thank you all" start="00:20:34.960" video="mainVideo" id=subtitle]]
+[[!template text="and I hope that you find this useful." start="00:20:37.039" video="mainVideo" id=subtitle]]
+[[!template text="Bye." start="00:20:40.799" video="mainVideo" id=subtitle]]
+[[!template text="captions by sachac" start="00:20:42.799" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/tech.md b/2021/captions/tech.md
new file mode 100644
index 00000000..5131d5b7
--- /dev/null
+++ b/2021/captions/tech.md
@@ -0,0 +1,279 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hi! My name is Jan, and I'll be talking" start="00:00:02.560" video="mainVideo" id=subtitle]]
+[[!template text="about using Emacs for technical writing." start="00:00:05.040" video="mainVideo" id=subtitle]]
+[[!template text="Let's first define what we mean by" start="00:00:07.680" video="mainVideo" id=subtitle]]
+[[!template text="technical writing." start="00:00:09.519" video="mainVideo" id=subtitle]]
+[[!template text="At least, I mean with that, any kind of" start="00:00:12.080" video="mainVideo" id=subtitle]]
+[[!template text="writing that involves computer systems." start="00:00:13.679" video="mainVideo" id=subtitle]]
+[[!template text="So, maybe a developer guide for a system," start="00:00:15.759" video="mainVideo" id=subtitle]]
+[[!template text="or a library you've been creating," start="00:00:19.700" video="mainVideo" id=subtitle]]
+[[!template text="maybe reference documentation" start="00:00:21.680" video="mainVideo" id=subtitle]]
+[[!template text="or a user guide for a REST API" start="00:00:23.433" video="mainVideo" id=subtitle]]
+[[!template text="that you offer as a cloud service," start="00:00:25.833" video="mainVideo" id=subtitle]]
+[[!template text="or doing a technical presentation" start="00:00:27.934" video="mainVideo" id=subtitle]]
+[[!template text="exactly like this one" start="00:00:29.767" video="mainVideo" id=subtitle]]
+[[!template text="that may actually include some live" start="00:00:30.700" video="mainVideo" id=subtitle]]
+[[!template text="coding as well that you may want to do" start="00:00:32.239" video="mainVideo" id=subtitle]]
+[[!template text="while you're showing the presentation" start="00:00:34.000" video="mainVideo" id=subtitle]]
+[[!template text="without too much context switching." start="00:00:36.000" video="mainVideo" id=subtitle]]
+[[!template text="I've been doing a variety of these" start="00:00:39.040" video="mainVideo" id=subtitle]]
+[[!template text="things in my professional life for a while now," start="00:00:40.399" video="mainVideo" id=subtitle]]
+[[!template text="and I found Emacs to be a" start="00:00:43.034" video="mainVideo" id=subtitle]]
+[[!template text="really nice tool to help out with that," start="00:00:43.840" video="mainVideo" id=subtitle]]
+[[!template text="since it actually pulls in different languages." start="00:00:46.879" video="mainVideo" id=subtitle]]
+[[!template text="The ones I work with is Scala, Java, C++," start="00:00:50.719" video="mainVideo" id=subtitle]]
+[[!template text="and things like that, and everything" start="00:00:52.800" video="mainVideo" id=subtitle]]
+[[!template text="works in the same way within Emacs," start="00:00:54.480" video="mainVideo" id=subtitle]]
+[[!template text="so you don't have to learn different tools" start="00:00:56.160" video="mainVideo" id=subtitle]]
+[[!template text="to do the same thing." start="00:00:58.400" video="mainVideo" id=subtitle]]
+[[!template text="Doing all of this against Java looks the" start="00:00:59.840" video="mainVideo" id=subtitle]]
+[[!template text="same as it would but with C++ except" start="00:01:02.079" video="mainVideo" id=subtitle]]
+[[!template text="the language is different." start="00:01:04.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="A little refresher for people that might" start="00:01:07.119" video="mainVideo" id=subtitle]]
+[[!template text="be viewing this out of context." start="00:01:08.640" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is a very customizable text editor" start="00:01:10.666" video="mainVideo" id=subtitle]]
+[[!template text="environment, and Org mode is a" start="00:01:13.280" video="mainVideo" id=subtitle]]
+[[!template text="part of Emacs that allows you to deal" start="00:01:15.600" video="mainVideo" id=subtitle]]
+[[!template text="with structured text." start="00:01:17.360" video="mainVideo" id=subtitle]]
+[[!template text="So, a plain text file containing headings," start="00:01:18.734" video="mainVideo" id=subtitle]]
+[[!template text="lists, tables, and even code blocks" start="00:01:21.920" video="mainVideo" id=subtitle]]
+[[!template text="formatted in a particular way, so Org" start="00:01:25.439" video="mainVideo" id=subtitle]]
+[[!template text="mode can help out with that." start="00:01:27.360" video="mainVideo" id=subtitle]]
+[[!template text="And Org babel is the particular part of Org mode" start="00:01:29.866" video="mainVideo" id=subtitle]]
+[[!template text="that deals with executing those code" start="00:01:32.560" video="mainVideo" id=subtitle]]
+[[!template text="blocks and actually interacting with," start="00:01:34.400" video="mainVideo" id=subtitle]]
+[[!template text="say, a Java or a Python environment" start="00:01:37.000" video="mainVideo" id=subtitle]]
+[[!template text="underneath, and showing the results of" start="00:01:38.720" video="mainVideo" id=subtitle]]
+[[!template text="that right inside the same Org file." start="00:01:40.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's look at" start="00:01:43.840" video="mainVideo" id=subtitle]]
+[[!template text="what are a couple of scenarios" start="00:01:44.966" video="mainVideo" id=subtitle]]
+[[!template text="using this might actually look like." start="00:01:47.167" video="mainVideo" id=subtitle]]
+[[!template text="Let's start with imagining that" start="00:01:49.400" video="mainVideo" id=subtitle]]
+[[!template text="we are writing a developer guide" start="00:01:52.533" video="mainVideo" id=subtitle]]
+[[!template text="for a service or a library," start="00:01:55.000" video="mainVideo" id=subtitle]]
+[[!template text="or a computer program that we might be writing." start="00:01:59.439" video="mainVideo" id=subtitle]]
+[[!template text="And, imagine that we have some" start="00:02:02.560" video="mainVideo" id=subtitle]]
+[[!template text="dependencies that the program requires" start="00:02:04.560" video="mainVideo" id=subtitle]]
+[[!template text="that are configured using docker-compose," start="00:02:07.119" video="mainVideo" id=subtitle]]
+[[!template text="for those who don't know Docker, docker-compose," start="00:02:09.520" video="mainVideo" id=subtitle]]
+[[!template text="it's a way to quickly describe some Linux" start="00:02:11.767" video="mainVideo" id=subtitle]]
+[[!template text="programs that can be immediately run" start="00:02:15.599" video="mainVideo" id=subtitle]]
+[[!template text="without installing too much dependencies." start="00:02:17.920" video="mainVideo" id=subtitle]]
+[[!template text="You define these using a YAML file" start="00:02:21.280" video="mainVideo" id=subtitle]]
+[[!template text="called the docker-compose file." start="00:02:23.040" video="mainVideo" id=subtitle]]
+[[!template text="Now, here inside Emacs we have a block" start="00:02:25.040" video="mainVideo" id=subtitle]]
+[[!template text="that defines a YAML file, and we're" start="00:02:26.959" video="mainVideo" id=subtitle]]
+[[!template text="actually saying this is called" start="00:02:29.280" video="mainVideo" id=subtitle]]
+[[!template text="docker-compose.yaml" start="00:02:30.900" video="mainVideo" id=subtitle]]
+[[!template text="with some content here, and you can see" start="00:02:33.840" video="mainVideo" id=subtitle]]
+[[!template text="that even though we are in Org mode," start="00:02:36.400" video="mainVideo" id=subtitle]]
+[[!template text="Org mode knows that it can highlight this" start="00:02:38.200" video="mainVideo" id=subtitle]]
+[[!template text="according to YAML and Org mode doesn't" start="00:02:40.959" video="mainVideo" id=subtitle]]
+[[!template text="directly know about YAML, we just said hey" start="00:02:43.360" video="mainVideo" id=subtitle]]
+[[!template text="this block has to do with YAML." start="00:02:45.200" video="mainVideo" id=subtitle]]
+[[!template text="Because there's a yaml-mode in Emacs," start="00:02:47.360" video="mainVideo" id=subtitle]]
+[[!template text="it will borrow from that mode to actually" start="00:02:51.467" video="mainVideo" id=subtitle]]
+[[!template text="highlight this block." start="00:02:53.280" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now, the fun thing is that there's a" start="00:02:55.920" video="mainVideo" id=subtitle]]
+[[!template text="feature in Org called tangling that" start="00:02:57.680" video="mainVideo" id=subtitle]]
+[[!template text="allows you to take these kinds of blocks" start="00:03:00.080" video="mainVideo" id=subtitle]]
+[[!template text="and actually export them to separate files." start="00:03:02.159" video="mainVideo" id=subtitle]]
+[[!template text="So, if we look at the" start="00:03:04.800" video="mainVideo" id=subtitle]]
+[[!template text="directory that we're in right now, we see" start="00:03:06.959" video="mainVideo" id=subtitle]]
+[[!template text="that we just got the presentation," start="00:03:08.720" video="mainVideo" id=subtitle]]
+[[!template text="there is no docker-compose file yet." start="00:03:10.434" video="mainVideo" id=subtitle]]
+[[!template text="If I say Control c Control v t (C-c C-v t)" start="00:03:12.239" video="mainVideo" id=subtitle]]
+[[!template text="and I go back and refresh this directory," start="00:03:16.000" video="mainVideo" id=subtitle]]
+[[!template text="now we have a docker-compose file as well," start="00:03:18.080" video="mainVideo" id=subtitle]]
+[[!template text="which has the content in it that we" start="00:03:20.200" video="mainVideo" id=subtitle]]
+[[!template text="just created here." start="00:03:22.000" video="mainVideo" id=subtitle]]
+[[!template text="That's very nice because" start="00:03:23.334" video="mainVideo" id=subtitle]]
+[[!template text="conceptually we don't actually need to" start="00:03:25.200" video="mainVideo" id=subtitle]]
+[[!template text="leave Org mode, we can say something" start="00:03:26.560" video="mainVideo" id=subtitle]]
+[[!template text="about this file and have the contents of" start="00:03:28.080" video="mainVideo" id=subtitle]]
+[[!template text="the file in the same descriptive document" start="00:03:29.760" video="mainVideo" id=subtitle]]
+[[!template text="while also having some actual side effect" start="00:03:32.480" video="mainVideo" id=subtitle]]
+[[!template text="of the file existing on disk and" start="00:03:34.966" video="mainVideo" id=subtitle]]
+[[!template text="us being able to interact with it." start="00:03:36.159" video="mainVideo" id=subtitle]]
+[[!template text="For example, we could…, now that the file is" start="00:03:38.000" video="mainVideo" id=subtitle]]
+[[!template text="there, invoke docker-compose and actually" start="00:03:40.000" video="mainVideo" id=subtitle]]
+[[!template text="create the nginx web server that we're" start="00:03:42.319" video="mainVideo" id=subtitle]]
+[[!template text="defining here. Let's do that." start="00:03:44.400" video="mainVideo" id=subtitle]]
+[[!template text="We have a little block" start="00:03:46.700" video="mainVideo" id=subtitle]]
+[[!template text="here that runs the shell script if I" start="00:03:47.120" video="mainVideo" id=subtitle]]
+[[!template text="invoke that from Org mode, we get the" start="00:03:49.599" video="mainVideo" id=subtitle]]
+[[!template text="results here, we see that now we have a" start="00:03:51.920" video="mainVideo" id=subtitle]]
+[[!template text="web server running on port 8080." start="00:03:53.439" video="mainVideo" id=subtitle]]
+[[!template text="That's, by the way," start="00:03:55.867" video="mainVideo" id=subtitle]]
+[[!template text="serving up the contents of" start="00:03:56.767" video="mainVideo" id=subtitle]]
+[[!template text="the directory that we're in here" start="00:03:58.319" video="mainVideo" id=subtitle]]
+[[!template text="on port 8080." start="00:04:00.799" video="mainVideo" id=subtitle]]
+[[!template text="So, that's already quite nice." start="00:04:02.799" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's look at another scenario where we" start="00:04:06.000" video="mainVideo" id=subtitle]]
+[[!template text="may be documenting a REST API." start="00:04:08.959" video="mainVideo" id=subtitle]]
+[[!template text="REST APIs use a lot of HTTP interactions" start="00:04:11.760" video="mainVideo" id=subtitle]]
+[[!template text="typically describing an XML or JSON" start="00:04:14.720" video="mainVideo" id=subtitle]]
+[[!template text="structure and which HTTP verb GET or PUT" start="00:04:17.199" video="mainVideo" id=subtitle]]
+[[!template text="to use with that and the URL." start="00:04:20.000" video="mainVideo" id=subtitle]]
+[[!template text="There's actually a nice extension to" start="00:04:22.320" video="mainVideo" id=subtitle]]
+[[!template text="Org babel called rest client that you" start="00:04:25.919" video="mainVideo" id=subtitle]]
+[[!template text="can install, that allows you to describe" start="00:04:28.240" video="mainVideo" id=subtitle]]
+[[!template text="these kind of requests right inside Emacs." start="00:04:30.000" video="mainVideo" id=subtitle]]
+[[!template text="First, let's make sure that our HTTP" start="00:04:33.360" video="mainVideo" id=subtitle]]
+[[!template text="server has something to respond with," start="00:04:35.360" video="mainVideo" id=subtitle]]
+[[!template text="that's a little interesting, for example," start="00:04:36.720" video="mainVideo" id=subtitle]]
+[[!template text="an XML file. We already know how to do that." start="00:04:38.080" video="mainVideo" id=subtitle]]
+[[!template text="So, let's create a code block type xml" start="00:04:40.433" video="mainVideo" id=subtitle]]
+[[!template text="that we can tangle to file called" start="00:04:42.533" video="mainVideo" id=subtitle]]
+[[!template text="test.xml, Control c Control v t (C-c C-v t)." start="00:04:43.600" video="mainVideo" id=subtitle]]
+[[!template text="Now, if we look at the directory again," start="00:04:46.960" video="mainVideo" id=subtitle]]
+[[!template text="we have a test.xml file." start="00:04:52.067" video="mainVideo" id=subtitle]]
+[[!template text="And, now we can have a new type of block" start="00:04:55.120" video="mainVideo" id=subtitle]]
+[[!template text="called the restclient, which will invoke" start="00:04:57.520" video="mainVideo" id=subtitle]]
+[[!template text="REST client, and anything you type into" start="00:04:59.600" video="mainVideo" id=subtitle]]
+[[!template text="here will be sent as an HTTP request to" start="00:05:01.199" video="mainVideo" id=subtitle]]
+[[!template text="the server that you specify." start="00:05:04.160" video="mainVideo" id=subtitle]]
+[[!template text="Right now it goes to localhost on 8080 and" start="00:05:05.600" video="mainVideo" id=subtitle]]
+[[!template text="let's see if we can get our test.xml" start="00:05:08.880" video="mainVideo" id=subtitle]]
+[[!template text="file back." start="00:05:10.720" video="mainVideo" id=subtitle]]
+[[!template text="I've just invoked this, and you can see" start="00:05:11.433" video="mainVideo" id=subtitle]]
+[[!template text="we got the spec and the content type of" start="00:05:13.600" video="mainVideo" id=subtitle]]
+[[!template text="the server, if we scroll down a little" start="00:05:16.479" video="mainVideo" id=subtitle]]
+[[!template text="bit I think we see the headers here, yeah," start="00:05:17.680" video="mainVideo" id=subtitle]]
+[[!template text="so the server said it's text/xml and" start="00:05:19.199" video="mainVideo" id=subtitle]]
+[[!template text="restclient is smart enough to actually" start="00:05:22.080" video="mainVideo" id=subtitle]]
+[[!template text="invoke Emacs's sgml-mode to highlight it." start="00:05:23.759" video="mainVideo" id=subtitle]]
+[[!template text="I'm not exactly sure" start="00:05:27.966" video="mainVideo" id=subtitle]]
+[[!template text="what's the difference is between sxml" start="00:05:28.639" video="mainVideo" id=subtitle]]
+[[!template text="and xml-mode and there's a nxml-mode," start="00:05:31.039" video="mainVideo" id=subtitle]]
+[[!template text="they all pretty much know how to deal" start="00:05:33.680" video="mainVideo" id=subtitle]]
+[[!template text="with XML. In this case sgml was" start="00:05:35.600" video="mainVideo" id=subtitle]]
+[[!template text="chosen, which is fine." start="00:05:38.800" video="mainVideo" id=subtitle]]
+[[!template text="But you can see we just served up that" start="00:05:41.600" video="mainVideo" id=subtitle]]
+[[!template text="test.xml file, and" start="00:05:42.960" video="mainVideo" id=subtitle]]
+[[!template text="we can have some actual text here" start="00:05:45.680" video="mainVideo" id=subtitle]]
+[[!template text="describing &quot;Hey, if you do this request" start="00:05:46.880" video="mainVideo" id=subtitle]]
+[[!template text="you might get a response like that,&quot;" start="00:05:48.639" video="mainVideo" id=subtitle]]
+[[!template text="and the server will actually serve that up" start="00:05:50.734" video="mainVideo" id=subtitle]]
+[[!template text="and insert it right into the Org mode document." start="00:05:53.199" video="mainVideo" id=subtitle]]
+[[!template new="1" text="By the way, we're looking at" start="00:05:56.233" video="mainVideo" id=subtitle]]
+[[!template text="this now inside Emacs rendered somewhat" start="00:05:57.759" video="mainVideo" id=subtitle]]
+[[!template text="interestingly, but obviously you can" start="00:06:00.720" video="mainVideo" id=subtitle]]
+[[!template text="export this to a PDF, or HTML, or in all" start="00:06:02.479" video="mainVideo" id=subtitle]]
+[[!template text="sorts of nice and different ways as well" start="00:06:05.280" video="mainVideo" id=subtitle]]
+[[!template text="depending on what your particular needs are." start="00:06:06.880" video="mainVideo" id=subtitle]]
+[[!template text="Of course, we can't just send GET" start="00:06:09.759" video="mainVideo" id=subtitle]]
+[[!template text="requests, we can send PUT requests as" start="00:06:11.520" video="mainVideo" id=subtitle]]
+[[!template text="well, and just like in plain HTTP you" start="00:06:14.080" video="mainVideo" id=subtitle]]
+[[!template text="have the PUT method on the first line then" start="00:06:16.400" video="mainVideo" id=subtitle]]
+[[!template text="your headers, and a blank line," start="00:06:19.120" video="mainVideo" id=subtitle]]
+[[!template text="and then the body." start="00:06:20.600" video="mainVideo" id=subtitle]]
+[[!template new="1" text="If we try and invoke this then" start="00:06:22.000" video="mainVideo" id=subtitle]]
+[[!template text="nginx will say &quot;405 Not Allowed&quot;" start="00:06:24.720" video="mainVideo" id=subtitle]]
+[[!template text="because, obviously, just running a plain" start="00:06:27.440" video="mainVideo" id=subtitle]]
+[[!template text="web server will not allow you to" start="00:06:29.199" video="mainVideo" id=subtitle]]
+[[!template text="actually upload any files," start="00:06:30.319" video="mainVideo" id=subtitle]]
+[[!template text="but this of course could have been any" start="00:06:32.080" video="mainVideo" id=subtitle]]
+[[!template text="other response as well." start="00:06:33.440" video="mainVideo" id=subtitle]]
+[[!template text="Now, let's look at doing" start="00:06:36.800" video="mainVideo" id=subtitle]]
+[[!template text="presentations themselves, like the one" start="00:06:39.759" video="mainVideo" id=subtitle]]
+[[!template text="you're looking at." start="00:06:41.600" video="mainVideo" id=subtitle]]
+[[!template text="There's a package that I like to use a lot," start="00:06:42.867" video="mainVideo" id=subtitle]]
+[[!template text="which is called org-tree-slide." start="00:06:45.766" video="mainVideo" id=subtitle]]
+[[!template text="That's the one that's active right now," start="00:06:47.520" video="mainVideo" id=subtitle]]
+[[!template text="which takes an Org document and allows" start="00:06:49.759" video="mainVideo" id=subtitle]]
+[[!template text="you to show one heading at a time." start="00:06:52.080" video="mainVideo" id=subtitle]]
+[[!template text="It doesn't matter whether it's the first" start="00:06:54.600" video="mainVideo" id=subtitle]]
+[[!template text="level, second level, third level heading," start="00:06:55.599" video="mainVideo" id=subtitle]]
+[[!template text="they sort of fold into nice" start="00:06:57.280" video="mainVideo" id=subtitle]]
+[[!template text="things at the top," start="00:07:00.319" video="mainVideo" id=subtitle]]
+[[!template text="where you can" start="00:07:02.720" video="mainVideo" id=subtitle]]
+[[!template text="sort of go through a document" start="00:07:03.919" video="mainVideo" id=subtitle]]
+[[!template text="one piece at a time." start="00:07:05.366" video="mainVideo" id=subtitle]]
+[[!template text="I actually do like to use" start="00:07:07.680" video="mainVideo" id=subtitle]]
+[[!template text="Org babel at the same time to" start="00:07:10.367" video="mainVideo" id=subtitle]]
+[[!template text="do some live coding in it as well." start="00:07:12.319" video="mainVideo" id=subtitle]]
+[[!template text="Actually there are two ways to go to a PDF," start="00:07:14.479" video="mainVideo" id=subtitle]]
+[[!template text="you can just use the normal Org export" start="00:07:16.800" video="mainVideo" id=subtitle]]
+[[!template text="option to go to a PDF, which is" start="00:07:20.720" video="mainVideo" id=subtitle]]
+[[!template text="Control c Control e, and then l p (C-c C-e l p)," start="00:07:22.733" video="mainVideo" id=subtitle]]
+[[!template text="but if you use restclient, the" start="00:07:25.120" video="mainVideo" id=subtitle]]
+[[!template text="LaTeX file underneath sometimes gets" start="00:07:27.520" video="mainVideo" id=subtitle]]
+[[!template text="a little wonky because those things" start="00:07:30.960" video="mainVideo" id=subtitle]]
+[[!template text="don't directly work together." start="00:07:33.280" video="mainVideo" id=subtitle]]
+[[!template text="I wrote a little bit of Lisp" start="00:07:34.866" video="mainVideo" id=subtitle]]
+[[!template text="to help out with that," start="00:07:36.166" video="mainVideo" id=subtitle]]
+[[!template text="which you can look at if you check" start="00:07:37.039" video="mainVideo" id=subtitle]]
+[[!template text="out my presentation later." start="00:07:38.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There's another package for Org babel called" start="00:07:40.960" video="mainVideo" id=subtitle]]
+[[!template text="beamer, or ox-beamer it's called," start="00:07:45.919" video="mainVideo" id=subtitle]]
+[[!template text="which uses a LaTeX style called beamer" start="00:07:48.800" video="mainVideo" id=subtitle]]
+[[!template text="to create a PDF," start="00:07:51.680" video="mainVideo" id=subtitle]]
+[[!template text="and that one looks sort of…," start="00:07:53.360" video="mainVideo" id=subtitle]]
+[[!template text="that one tries to actually" start="00:07:57.400" video="mainVideo" id=subtitle]]
+[[!template text="create one page per slide which you" start="00:07:58.000" video="mainVideo" id=subtitle]]
+[[!template text="would actually have a PDF with the" start="00:07:59.840" video="mainVideo" id=subtitle]]
+[[!template text="slides, but that one is a lot more picky" start="00:08:01.039" video="mainVideo" id=subtitle]]
+[[!template text="on what your Org file is" start="00:08:03.280" video="mainVideo" id=subtitle]]
+[[!template text="structured like, so you need to have all" start="00:08:06.160" video="mainVideo" id=subtitle]]
+[[!template text="your leaf headings at the same level," start="00:08:07.440" video="mainVideo" id=subtitle]]
+[[!template text="which I typically don't do." start="00:08:08.879" video="mainVideo" id=subtitle]]
+[[!template text="So, I can show you what this one" start="00:08:11.360" video="mainVideo" id=subtitle]]
+[[!template text="looks like." start="00:08:12.800" video="mainVideo" id=subtitle]]
+[[!template text="For this presentation you get a nice" start="00:08:16.639" video="mainVideo" id=subtitle]]
+[[!template text="title slide, and then you get…," start="00:08:18.240" video="mainVideo" id=subtitle]]
+[[!template text="it tries to make an outline," start="00:08:20.067" video="mainVideo" id=subtitle]]
+[[!template text="which is the one level above." start="00:08:21.167" video="mainVideo" id=subtitle]]
+[[!template text="The slides sort of look okay, but as" start="00:08:23.360" video="mainVideo" id=subtitle]]
+[[!template text="you go further they sort of start" start="00:08:26.319" video="mainVideo" id=subtitle]]
+[[!template text="to run into, you know," start="00:08:28.479" video="mainVideo" id=subtitle]]
+[[!template text="things not flowing as they should." start="00:08:31.680" video="mainVideo" id=subtitle]]
+[[!template text="I'm sure with a lot more LaTeX" start="00:08:34.633" video="mainVideo" id=subtitle]]
+[[!template text="knowledge you could make this" start="00:08:36.800" video="mainVideo" id=subtitle]]
+[[!template text="look a lot nicer, but personally I tend" start="00:08:37.919" video="mainVideo" id=subtitle]]
+[[!template text="to just create a normal PDF document" start="00:08:40.640" video="mainVideo" id=subtitle]]
+[[!template text="that's just, you know, text" start="00:08:44.080" video="mainVideo" id=subtitle]]
+[[!template text="with all the actual content of the" start="00:08:46.399" video="mainVideo" id=subtitle]]
+[[!template text="document. Inside the text you can see the" start="00:08:48.560" video="mainVideo" id=subtitle]]
+[[!template text="highlighting of especially restclient" start="00:08:50.560" video="mainVideo" id=subtitle]]
+[[!template text="stuff that works just fine, and" start="00:08:52.880" video="mainVideo" id=subtitle]]
+[[!template text="it's enough for my needs," start="00:08:55.920" video="mainVideo" id=subtitle]]
+[[!template text="so I just tend to make plain PDFs." start="00:08:57.400" video="mainVideo" id=subtitle]]
+[[!template text="Since we only have 10 minutes, I will" start="00:09:00.959" video="mainVideo" id=subtitle]]
+[[!template text="not go into the detailed configuration," start="00:09:02.959" video="mainVideo" id=subtitle]]
+[[!template text="you can check out the presentation" start="00:09:05.200" video="mainVideo" id=subtitle]]
+[[!template text="online to see how all these packages are" start="00:09:06.800" video="mainVideo" id=subtitle]]
+[[!template text="configured and how I use them," start="00:09:09.440" video="mainVideo" id=subtitle]]
+[[!template text="but for now that's all I have." start="00:09:13.440" video="mainVideo" id=subtitle]]
+[[!template text="I do recommend you try this out yourself." start="00:09:18.000" video="mainVideo" id=subtitle]]
+[[!template text="If you have any kind of documentation" start="00:09:20.000" video="mainVideo" id=subtitle]]
+[[!template text="or textual things to do," start="00:09:22.240" video="mainVideo" id=subtitle]]
+[[!template text="just pick one of these packages at a" start="00:09:24.399" video="mainVideo" id=subtitle]]
+[[!template text="time, integrate them into your" start="00:09:26.320" video="mainVideo" id=subtitle]]
+[[!template text="configuration if you haven't already." start="00:09:27.519" video="mainVideo" id=subtitle]]
+[[!template text="That's really the best way to go" start="00:09:29.200" video="mainVideo" id=subtitle]]
+[[!template text="about this, and you know, Google is your" start="00:09:31.040" video="mainVideo" id=subtitle]]
+[[!template text="friend, if you think &quot;Hey how I would do" start="00:09:32.959" video="mainVideo" id=subtitle]]
+[[!template text="this with these packages,&quot;" start="00:09:34.240" video="mainVideo" id=subtitle]]
+[[!template text="definitely do that." start="00:09:35.567" video="mainVideo" id=subtitle]]
+[[!template new="1" text="More things I will be looking at is" start="00:09:37.839" video="mainVideo" id=subtitle]]
+[[!template text="using this concept to write unit or" start="00:09:41.760" video="mainVideo" id=subtitle]]
+[[!template text="integration tests, you can imagine if you" start="00:09:44.000" video="mainVideo" id=subtitle]]
+[[!template text="have a documentation in Org mode that" start="00:09:45.360" video="mainVideo" id=subtitle]]
+[[!template text="describes your service as a" start="00:09:47.600" video="mainVideo" id=subtitle]]
+[[!template text="function of its REST API, you may want to" start="00:09:50.800" video="mainVideo" id=subtitle]]
+[[!template text="actually run all those commands as part" start="00:09:53.360" video="mainVideo" id=subtitle]]
+[[!template text="of your build and check if all the" start="00:09:55.040" video="mainVideo" id=subtitle]]
+[[!template text="documentation is still in order." start="00:09:56.480" video="mainVideo" id=subtitle]]
+[[!template text="I'm not doing that yet, but I'm" start="00:09:58.399" video="mainVideo" id=subtitle]]
+[[!template text="definitely looking into that." start="00:09:59.680" video="mainVideo" id=subtitle]]
+[[!template text="I'm also writing some extensions" start="00:10:01.133" video="mainVideo" id=subtitle]]
+[[!template text="to use Java and Scala" start="00:10:03.767" video="mainVideo" id=subtitle]]
+[[!template text="in a somewhat higher level with Org mode." start="00:10:06.000" video="mainVideo" id=subtitle]]
+[[!template text="But that's not entirely working yet," start="00:10:08.720" video="mainVideo" id=subtitle]]
+[[!template text="and we don't have time to go into that" start="00:10:11.680" video="mainVideo" id=subtitle]]
+[[!template text="today." start="00:10:12.959" video="mainVideo" id=subtitle]]
+[[!template text="That's it. Thanks a lot for your attention," start="00:10:14.240" video="mainVideo" id=subtitle]]
+[[!template text="and I'll be there for questions later." start="00:10:16.766" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/telega.md b/2021/captions/telega.md
new file mode 100644
index 00000000..54ea7a31
--- /dev/null
+++ b/2021/captions/telega.md
@@ -0,0 +1,259 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello, my name is Gabriele," start="00:00:00.000" video="mainVideo" id=subtitle]]
+[[!template text="and today I'm going to tell you about Telega" start="00:00:01.599" video="mainVideo" id=subtitle]]
+[[!template text="and the Emacs community on Telegram." start="00:00:03.439" video="mainVideo" id=subtitle]]
+[[!template text="I'm not affiliated with Telegram or Telega," start="00:00:05.600" video="mainVideo" id=subtitle]]
+[[!template text="and opinions are my own in general." start="00:00:08.400" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to give you my personal spin about these topics." start="00:00:10.719" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The plan for the talk is the following." start="00:00:14.160" video="mainVideo" id=subtitle]]
+[[!template text="First, I'm going to talk about what is Telegram." start="00:00:16.160" video="mainVideo" id=subtitle]]
+[[!template text="Next, I'm going to tell you" start="00:00:18.800" video="mainVideo" id=subtitle]]
+[[!template text="about the Emacs community on Telegram." start="00:00:19.840" video="mainVideo" id=subtitle]]
+[[!template text="And finally, I'm going to discuss telega.el," start="00:00:21.840" video="mainVideo" id=subtitle]]
+[[!template text="an Emacs package for Telegram." start="00:00:24.720" video="mainVideo" id=subtitle]]
+[[!template text="In all of these, I'm now going to dive into details." start="00:00:26.560" video="mainVideo" id=subtitle]]
+[[!template text="My goal here is to give you" start="00:00:29.359" video="mainVideo" id=subtitle]]
+[[!template text="some exposure about these topics." start="00:00:30.880" video="mainVideo" id=subtitle]]
+[[!template text="You can find out more online, if you want." start="00:00:33.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's get started with what is Telegram." start="00:00:35.840" video="mainVideo" id=subtitle]]
+[[!template text="Telegram is a cloud-based" start="00:00:38.960" video="mainVideo" id=subtitle]]
+[[!template text="instant messaging platform." start="00:00:41.100" video="mainVideo" id=subtitle]]
+[[!template text="It's a popular one." start="00:00:42.879" video="mainVideo" id=subtitle]]
+[[!template text="It has more than half a billion users." start="00:00:44.079" video="mainVideo" id=subtitle]]
+[[!template text="I think one of the reasons" start="00:00:46.559" video="mainVideo" id=subtitle]]
+[[!template text="why it's so popular, it's because" start="00:00:47.840" video="mainVideo" id=subtitle]]
+[[!template text="it's really rich in features" start="00:00:49.600" video="mainVideo" id=subtitle]]
+[[!template text="while being user friendly." start="00:00:51.360" video="mainVideo" id=subtitle]]
+[[!template text="Hence, in some regions," start="00:00:52.960" video="mainVideo" id=subtitle]]
+[[!template text="Telegram has good market penetration." start="00:00:54.640" video="mainVideo" id=subtitle]]
+[[!template text="And of course, because of network effects," start="00:00:56.960" video="mainVideo" id=subtitle]]
+[[!template text="this brings even more users." start="00:00:59.039" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The details of the features" start="00:01:01.120" video="mainVideo" id=subtitle]]
+[[!template text="is not particularly important." start="00:01:02.239" video="mainVideo" id=subtitle]]
+[[!template text="What I want to emphasize, though," start="00:01:03.680" video="mainVideo" id=subtitle]]
+[[!template text="is that while Telegram is mostly text-based," start="00:01:04.879" video="mainVideo" id=subtitle]]
+[[!template text="there's also support for audio/video calls and notes," start="00:01:08.400" video="mainVideo" id=subtitle]]
+[[!template text="and there's also a lot of features" start="00:01:12.000" video="mainVideo" id=subtitle]]
+[[!template text="which typically you find" start="00:01:13.600" video="mainVideo" id=subtitle]]
+[[!template text="in other instant messaging platforms:" start="00:01:15.119" video="mainVideo" id=subtitle]]
+[[!template text="you can chat with yourself," start="00:01:17.360" video="mainVideo" id=subtitle]]
+[[!template text="you can make polls," start="00:01:18.479" video="mainVideo" id=subtitle]]
+[[!template text="you can make quizzes," start="00:01:19.360" video="mainVideo" id=subtitle]]
+[[!template text="you can schedule messages," start="00:01:20.159" video="mainVideo" id=subtitle]]
+[[!template text="you can send attachments of any kind," start="00:01:21.280" video="mainVideo" id=subtitle]]
+[[!template text="even big ones, and you can send stickers." start="00:01:23.280" video="mainVideo" id=subtitle]]
+[[!template text="Telegram, overall, is quite customizable," start="00:01:25.759" video="mainVideo" id=subtitle]]
+[[!template text="and I would say that the platform is, overall, hackable." start="00:01:27.759" video="mainVideo" id=subtitle]]
+[[!template text="You can expand it with bots" start="00:01:30.560" video="mainVideo" id=subtitle]]
+[[!template text="and the clients are open source." start="00:01:32.799" video="mainVideo" id=subtitle]]
+[[!template text="In all of this, we shouldn't forget, though," start="00:01:35.280" video="mainVideo" id=subtitle]]
+[[!template text="the Telegram is centralized" start="00:01:37.280" video="mainVideo" id=subtitle]]
+[[!template text="and it is not free software." start="00:01:38.448" video="mainVideo" id=subtitle]]
+[[!template text="Nonetheless, it's still used by a number of people," start="00:01:39.840" video="mainVideo" id=subtitle]]
+[[!template text="and people use Telegram for different reasons." start="00:01:42.720" video="mainVideo" id=subtitle]]
+[[!template text="For example, some people use it to stay in touch" start="00:01:45.200" video="mainVideo" id=subtitle]]
+[[!template text="with friends and families." start="00:01:47.200" video="mainVideo" id=subtitle]]
+[[!template text="For this, Telegram offers private chats" start="00:01:48.399" video="mainVideo" id=subtitle]]
+[[!template text="or group chats with a restricted number of people." start="00:01:50.560" video="mainVideo" id=subtitle]]
+[[!template text="A lot of people use it" start="00:01:53.600" video="mainVideo" id=subtitle]]
+[[!template text="for engaging in online communities." start="00:01:55.040" video="mainVideo" id=subtitle]]
+[[!template text="For this, Telegram has super groups," start="00:01:57.600" video="mainVideo" id=subtitle]]
+[[!template text="which are groups with up to" start="00:01:59.439" video="mainVideo" id=subtitle]]
+[[!template text="hundreds of thousands of users," start="00:02:00.719" video="mainVideo" id=subtitle]]
+[[!template text="and has also channels," start="00:02:02.159" video="mainVideo" id=subtitle]]
+[[!template text="which are one-to-many ways of communicating," start="00:02:03.360" video="mainVideo" id=subtitle]]
+[[!template text="so these are ideally suited for," start="00:02:07.119" video="mainVideo" id=subtitle]]
+[[!template text="for example, following news," start="00:02:09.280" video="mainVideo" id=subtitle]]
+[[!template text="all sorts of news." start="00:02:10.959" video="mainVideo" id=subtitle]]
+[[!template text="Telegram also has bots" start="00:02:12.167" video="mainVideo" id=subtitle]]
+[[!template text="which can be useful by themselves." start="00:02:13.680" video="mainVideo" id=subtitle]]
+[[!template text="They provide value." start="00:02:15.840" video="mainVideo" id=subtitle]]
+[[!template text="And the chat with oneself" start="00:02:17.040" video="mainVideo" id=subtitle]]
+[[!template text="can be used for sending links," start="00:02:18.400" video="mainVideo" id=subtitle]]
+[[!template text="making notes, or sending reminders." start="00:02:20.400" video="mainVideo" id=subtitle]]
+[[!template text="So overall, there's multiple ways" start="00:02:23.440" video="mainVideo" id=subtitle]]
+[[!template text="in which you can use Telegram." start="00:02:24.959" video="mainVideo" id=subtitle]]
+[[!template text="When it comes to instant messaging," start="00:02:26.560" video="mainVideo" id=subtitle]]
+[[!template text="many people call Telegram home." start="00:02:28.239" video="mainVideo" id=subtitle]]
+[[!template new="1" text="It shouldn't come as a surprise, then," start="00:02:30.000" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs users want to meet" start="00:02:31.840" video="mainVideo" id=subtitle]]
+[[!template text="on Telegram as well." start="00:02:34.480" video="mainVideo" id=subtitle]]
+[[!template text="And indeed, there's an Emacs community on Telegram." start="00:02:35.680" video="mainVideo" id=subtitle]]
+[[!template text="Here I'm listing a few super groups about Emacs." start="00:02:38.480" video="mainVideo" id=subtitle]]
+[[!template text="There are language groups," start="00:02:41.519" video="mainVideo" id=subtitle]]
+[[!template text="so there's Emacs English, Emacs Russian," start="00:02:43.040" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Spanish, Emacs Mandarin, Portuguese..." start="00:02:45.599" video="mainVideo" id=subtitle]]
+[[!template text="There are groups which are specific to starter packs." start="00:02:48.800" video="mainVideo" id=subtitle]]
+[[!template text="For example, there are Doom Emacs," start="00:02:51.440" video="mainVideo" id=subtitle]]
+[[!template text="Spacemacs, and there are groups" start="00:02:53.040" video="mainVideo" id=subtitle]]
+[[!template text="which are specific to packages like telega" start="00:02:54.879" video="mainVideo" id=subtitle]]
+[[!template text="which I'm going to discuss later." start="00:02:57.280" video="mainVideo" id=subtitle]]
+[[!template text="These are what you would expect" start="00:02:58.720" video="mainVideo" id=subtitle]]
+[[!template text="from traditional internet chat rooms." start="00:03:00.159" video="mainVideo" id=subtitle]]
+[[!template text="So they're used for shared links," start="00:03:02.800" video="mainVideo" id=subtitle]]
+[[!template text="they're used for discussing, troubleshooting," start="00:03:04.319" video="mainVideo" id=subtitle]]
+[[!template text="giving each other recommendations..." start="00:03:06.959" video="mainVideo" id=subtitle]]
+[[!template text="I think there are healthy communities" start="00:03:09.120" video="mainVideo" id=subtitle]]
+[[!template text="with typically a hundred" start="00:03:10.879" video="mainVideo" id=subtitle]]
+[[!template text="to a thousand members." start="00:03:12.239" video="mainVideo" id=subtitle]]
+[[!template text="An example of an initiative that's put forth" start="00:03:13.519" video="mainVideo" id=subtitle]]
+[[!template text="by the Emacs community on Telegram" start="00:03:15.280" video="mainVideo" id=subtitle]]
+[[!template text="is @emacs\_stories. @emacs\_stories" start="00:03:16.879" video="mainVideo" id=subtitle]]
+[[!template text="collects links and messages and pictures" start="00:03:18.720" video="mainVideo" id=subtitle]]
+[[!template text="that can showcase what Emacs can do." start="00:03:21.680" video="mainVideo" id=subtitle]]
+[[!template text="One of the goals here is" start="00:03:24.080" video="mainVideo" id=subtitle]]
+[[!template text="to show people that are new to emacs" start="00:03:25.680" video="mainVideo" id=subtitle]]
+[[!template text="what you can achieve" start="00:03:28.239" video="mainVideo" id=subtitle]]
+[[!template text="if you spend time with your editor." start="00:03:29.120" video="mainVideo" id=subtitle]]
+[[!template text="And here, what I'm showing you" start="00:03:31.200" video="mainVideo" id=subtitle]]
+[[!template text="is a screenshot from Telega." start="00:03:32.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's move on to the final topic" start="00:03:34.159" video="mainVideo" id=subtitle]]
+[[!template text="of this discussion," start="00:03:36.080" video="mainVideo" id=subtitle]]
+[[!template text="which is telega.el." start="00:03:37.040" video="mainVideo" id=subtitle]]
+[[!template text="Telega is a terrific piece of software." start="00:03:39.200" video="mainVideo" id=subtitle]]
+[[!template text="Telega is a interface to telegram within Emacs." start="00:03:41.440" video="mainVideo" id=subtitle]]
+[[!template text="It's developed by @zevlg," start="00:03:45.280" video="mainVideo" id=subtitle]]
+[[!template text="which is a long-time Emacs hacker," start="00:03:46.959" video="mainVideo" id=subtitle]]
+[[!template text="and it's very actively developed." start="00:03:49.680" video="mainVideo" id=subtitle]]
+[[!template text="Telegram itself is under active development," start="00:03:51.280" video="mainVideo" id=subtitle]]
+[[!template text="and telega has to implement" start="00:03:54.000" video="mainVideo" id=subtitle]]
+[[!template text="all these new features" start="00:03:55.840" video="mainVideo" id=subtitle]]
+[[!template text="that Telegram implements." start="00:03:57.200" video="mainVideo" id=subtitle]]
+[[!template text="Indeed, Telega implements" start="00:03:58.720" video="mainVideo" id=subtitle]]
+[[!template text="almost all the features" start="00:04:00.400" video="mainVideo" id=subtitle]]
+[[!template text="available in Telegram," start="00:04:01.360" video="mainVideo" id=subtitle]]
+[[!template text="even things like live location," start="00:04:02.319" video="mainVideo" id=subtitle]]
+[[!template text="except for audio/video calls" start="00:04:04.159" video="mainVideo" id=subtitle]]
+[[!template text="but these are work in progress." start="00:04:05.439" video="mainVideo" id=subtitle]]
+[[!template text="Just to give you an idea" start="00:04:07.040" video="mainVideo" id=subtitle]]
+[[!template text="of the size of this effort," start="00:04:08.000" video="mainVideo" id=subtitle]]
+[[!template text="we're talking about" start="00:04:09.040" video="mainVideo" id=subtitle]]
+[[!template text="30,000 lines of code," start="00:04:09.680" video="mainVideo" id=subtitle]]
+[[!template text="which doesn't tell you much," start="00:04:11.280" video="mainVideo" id=subtitle]]
+[[!template text="but maybe you can get a sense" start="00:04:12.720" video="mainVideo" id=subtitle]]
+[[!template text="that this is a significant project." start="00:04:14.080" video="mainVideo" id=subtitle]]
+[[!template text="In fact, I think Telega is a really remarkable" start="00:04:16.000" video="mainVideo" id=subtitle]]
+[[!template text="piece of software." start="00:04:18.400" video="mainVideo" id=subtitle]]
+[[!template text="Not only it implements all the features" start="00:04:19.199" video="mainVideo" id=subtitle]]
+[[!template text="available in Telegram," start="00:04:20.639" video="mainVideo" id=subtitle]]
+[[!template text="but implements new ones," start="00:04:21.680" video="mainVideo" id=subtitle]]
+[[!template text="which are only available to Emacs users." start="00:04:22.960" video="mainVideo" id=subtitle]]
+[[!template text="Here I'm blinking the documentation" start="00:04:25.120" video="mainVideo" id=subtitle]]
+[[!template text="for you to read if you're interested." start="00:04:26.800" video="mainVideo" id=subtitle]]
+[[!template new="1" text="What I want to mention, though," start="00:04:28.560" video="mainVideo" id=subtitle]]
+[[!template text="is that Telega is available on MELPA," start="00:04:29.759" video="mainVideo" id=subtitle]]
+[[!template text="but it requires an external library, TDlib." start="00:04:31.360" video="mainVideo" id=subtitle]]
+[[!template text="Most distributions do not pack" start="00:04:34.160" video="mainVideo" id=subtitle]]
+[[!template text="a recent version of TDlib." start="00:04:35.759" video="mainVideo" id=subtitle]]
+[[!template text="Such you have to compile yourself." start="00:04:37.360" video="mainVideo" id=subtitle]]
+[[!template text="if you don't want to compile TDlib," start="00:04:39.600" video="mainVideo" id=subtitle]]
+[[!template text="you can use the officially supported" start="00:04:41.280" video="mainVideo" id=subtitle]]
+[[!template text="Dockerfile or guix file" start="00:04:43.120" video="mainVideo" id=subtitle]]
+[[!template text="so that you can get everything" start="00:04:44.560" video="mainVideo" id=subtitle]]
+[[!template text="without too much worry." start="00:04:46.080" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now let me tell you more about Telegram." start="00:04:48.000" video="mainVideo" id=subtitle]]
+[[!template text="Of course, the best way is to just" start="00:04:50.720" video="mainVideo" id=subtitle]]
+[[!template text="experiment with it yourself." start="00:04:52.080" video="mainVideo" id=subtitle]]
+[[!template text="And here I just want to give you" start="00:04:53.520" video="mainVideo" id=subtitle]]
+[[!template text="a glimpse of how Telega works." start="00:04:54.800" video="mainVideo" id=subtitle]]
+[[!template text="When you start Telega," start="00:04:56.720" video="mainVideo" id=subtitle]]
+[[!template text="what you see is a root buffer." start="00:04:57.840" video="mainVideo" id=subtitle]]
+[[!template text="The root buffer is essentially" start="00:05:00.000" video="mainVideo" id=subtitle]]
+[[!template text="the list of all the chats that you have," start="00:05:01.280" video="mainVideo" id=subtitle]]
+[[!template text="and, by itself, is a really powerful tool." start="00:05:02.960" video="mainVideo" id=subtitle]]
+[[!template text="You can use it for sorting" start="00:05:05.199" video="mainVideo" id=subtitle]]
+[[!template text="and filtering your chats," start="00:05:06.639" video="mainVideo" id=subtitle]]
+[[!template text="or you can create groups which are thematic." start="00:05:07.680" video="mainVideo" id=subtitle]]
+[[!template text="There's sophisticated search functions." start="00:05:10.639" video="mainVideo" id=subtitle]]
+[[!template text="For example, if you want to search only" start="00:05:12.720" video="mainVideo" id=subtitle]]
+[[!template text="for specific type of media," start="00:05:14.240" video="mainVideo" id=subtitle]]
+[[!template text="you can start new chats," start="00:05:16.800" video="mainVideo" id=subtitle]]
+[[!template text="you can get info about the chats," start="00:05:18.240" video="mainVideo" id=subtitle]]
+[[!template text="and you can even change Telegram settings" start="00:05:19.680" video="mainVideo" id=subtitle]]
+[[!template text="which are applied across the board." start="00:05:22.479" video="mainVideo" id=subtitle]]
+[[!template text="Here I'm showing you an example" start="00:05:24.720" video="mainVideo" id=subtitle]]
+[[!template text="of what it looks like." start="00:05:26.479" video="mainVideo" id=subtitle]]
+[[!template text="As you see, we're enjoying the support for emoji" start="00:05:27.520" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs has been improving upon" start="00:05:30.720" video="mainVideo" id=subtitle]]
+[[!template text="over the past years." start="00:05:33.039" video="mainVideo" id=subtitle]]
+[[!template text="Once you select one of these charts," start="00:05:34.320" video="mainVideo" id=subtitle]]
+[[!template text="you're brought to the chat buffer." start="00:05:36.400" video="mainVideo" id=subtitle]]
+[[!template text="Here I'm showing an example of" start="00:05:38.880" video="mainVideo" id=subtitle]]
+[[!template text="what a chat buffer looks like." start="00:05:40.400" video="mainVideo" id=subtitle]]
+[[!template text="So this is a screenshot" start="00:05:42.320" video="mainVideo" id=subtitle]]
+[[!template text="from the Emacs English group" start="00:05:43.360" video="mainVideo" id=subtitle]]
+[[!template text="where people were discussing about" start="00:05:45.520" video="mainVideo" id=subtitle]]
+[[!template text="compiling Emacs." start="00:05:47.840" video="mainVideo" id=subtitle]]
+[[!template text="As you can see, we see the conversation." start="00:05:49.039" video="mainVideo" id=subtitle]]
+[[!template text="We see the avatars." start="00:05:52.000" video="mainVideo" id=subtitle]]
+[[!template text="We see that there's a thread." start="00:05:53.280" video="mainVideo" id=subtitle]]
+[[!template text="We also see that" start="00:05:54.639" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to send a message," start="00:05:55.440" video="mainVideo" id=subtitle]]
+[[!template text="message with emoji," start="00:05:57.360" video="mainVideo" id=subtitle]]
+[[!template text="a message with formatting," start="00:05:58.240" video="mainVideo" id=subtitle]]
+[[!template text="and I'm attaching an object." start="00:05:59.440" video="mainVideo" id=subtitle]]
+[[!template text="I can format my messages" start="00:06:01.120" video="mainVideo" id=subtitle]]
+[[!template text="using Markdown or Org Mode" start="00:06:03.680" video="mainVideo" id=subtitle]]
+[[!template text="or whatever I prefer" start="00:06:05.520" video="mainVideo" id=subtitle]]
+[[!template text="and I can attach any kind of attachment" start="00:06:06.720" video="mainVideo" id=subtitle]]
+[[!template text="I like. For example..." start="00:06:09.199" video="mainVideo" id=subtitle]]
+[[!template text="What I can also do is," start="00:06:10.560" video="mainVideo" id=subtitle]]
+[[!template text="if I'm editing a buffer," start="00:06:11.520" video="mainVideo" id=subtitle]]
+[[!template text="I can send that buffer through Telega," start="00:06:13.120" video="mainVideo" id=subtitle]]
+[[!template text="which I find quite useful" start="00:06:15.680" video="mainVideo" id=subtitle]]
+[[!template text="especially when I'm sending code." start="00:06:17.199" video="mainVideo" id=subtitle]]
+[[!template text="And again, just to show you that" start="00:06:18.720" video="mainVideo" id=subtitle]]
+[[!template text="Telegram is not just text messages" start="00:06:20.240" video="mainVideo" id=subtitle]]
+[[!template text="and Telega supports all the features in Telegram," start="00:06:22.319" video="mainVideo" id=subtitle]]
+[[!template text="here at the bottom, I'm showing" start="00:06:25.199" video="mainVideo" id=subtitle]]
+[[!template text="a voice note being played through Emacs," start="00:06:27.199" video="mainVideo" id=subtitle]]
+[[!template text="and as you see, there are some buttons" start="00:06:29.759" video="mainVideo" id=subtitle]]
+[[!template text="which are functional." start="00:06:31.919" video="mainVideo" id=subtitle]]
+[[!template text="If I hit the two times button," start="00:06:33.199" video="mainVideo" id=subtitle]]
+[[!template text="the playback speed will be twice," start="00:06:36.240" video="mainVideo" id=subtitle]]
+[[!template text="which is really neat." start="00:06:38.160" video="mainVideo" id=subtitle]]
+[[!template text="Telega and Emacs can even" start="00:06:39.600" video="mainVideo" id=subtitle]]
+[[!template text="reproduce videos or gifs," start="00:06:40.800" video="mainVideo" id=subtitle]]
+[[!template text="at least for a recent version of Emacs." start="00:06:43.039" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Finally, I want to emphasize that Telega" start="00:06:45.280" video="mainVideo" id=subtitle]]
+[[!template text="integrates really well with Emacs." start="00:06:47.520" video="mainVideo" id=subtitle]]
+[[!template text="For example, we are showing you" start="00:06:49.280" video="mainVideo" id=subtitle]]
+[[!template text="how you can use a transient interface" start="00:06:51.039" video="mainVideo" id=subtitle]]
+[[!template text="to Telega, or on the other side," start="00:06:54.319" video="mainVideo" id=subtitle]]
+[[!template text="I'm showing you how Telega integrates" start="00:06:56.720" video="mainVideo" id=subtitle]]
+[[!template text="with dashboard," start="00:06:59.280" video="mainVideo" id=subtitle]]
+[[!template text="so that we have recent chats" start="00:07:00.080" video="mainVideo" id=subtitle]]
+[[!template text="and we have the Emacs stories." start="00:07:01.440" video="mainVideo" id=subtitle]]
+[[!template text="Because, you know," start="00:07:03.120" video="mainVideo" id=subtitle]]
+[[!template text="who doesn't like Emacs with stories." start="00:07:03.840" video="mainVideo" id=subtitle]]
+[[!template text="On top, on the other hand," start="00:07:05.759" video="mainVideo" id=subtitle]]
+[[!template text="I'm showing you that we can have" start="00:07:06.880" video="mainVideo" id=subtitle]]
+[[!template text="syntax highlighting," start="00:07:08.880" video="mainVideo" id=subtitle]]
+[[!template text="which is something that Telegram by itself" start="00:07:09.919" video="mainVideo" id=subtitle]]
+[[!template text="doesn't have, this Emacs-only feature," start="00:07:11.759" video="mainVideo" id=subtitle]]
+[[!template text="and we can edit this" start="00:07:14.240" video="mainVideo" id=subtitle]]
+[[!template text="in the same way we edit" start="00:07:15.919" video="mainVideo" id=subtitle]]
+[[!template text="Org Mode source blocks," start="00:07:17.599" video="mainVideo" id=subtitle]]
+[[!template text="so we can edit this" start="00:07:19.759" video="mainVideo" id=subtitle]]
+[[!template text="with the minor mode for," start="00:07:20.880" video="mainVideo" id=subtitle]]
+[[!template text="in this case, Emacs Lisp." start="00:07:22.800" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, to conclude, I wanted to show you" start="00:07:24.080" video="mainVideo" id=subtitle]]
+[[!template text="that the Emacs community" start="00:07:26.240" video="mainVideo" id=subtitle]]
+[[!template text="also meets on Telegram," start="00:07:27.759" video="mainVideo" id=subtitle]]
+[[!template text="and we're an active and healthy community," start="00:07:29.120" video="mainVideo" id=subtitle]]
+[[!template text="and I want to present Telega" start="00:07:31.360" video="mainVideo" id=subtitle]]
+[[!template text="as a really amazing piece of software," start="00:07:32.880" video="mainVideo" id=subtitle]]
+[[!template text="one of the best clients available for" start="00:07:35.759" video="mainVideo" id=subtitle]]
+[[!template text="Telegram with Emacs." start="00:07:37.919" video="mainVideo" id=subtitle]]
+[[!template text="Even if you don't use Telegram," start="00:07:39.599" video="mainVideo" id=subtitle]]
+[[!template text="I think you should have a look at Telega" start="00:07:41.680" video="mainVideo" id=subtitle]]
+[[!template text="just to appreciate how amazing" start="00:07:43.599" video="mainVideo" id=subtitle]]
+[[!template text="a piece of software it is." start="00:07:46.080" video="mainVideo" id=subtitle]]
+[[!template text="And with this, I thank you for your attention," start="00:07:47.280" video="mainVideo" id=subtitle]]
+[[!template text="and if you like Telega," start="00:07:49.680" video="mainVideo" id=subtitle]]
+[[!template text="please consider donating" start="00:07:50.960" video="mainVideo" id=subtitle]]
+[[!template text="to support the development of the package." start="00:07:52.720" video="mainVideo" id=subtitle]]
+[[!template text="Thanks." start="00:07:54.800" video="mainVideo" id=subtitle]]
+
diff --git a/2021/captions/test.md b/2021/captions/test.md
new file mode 100644
index 00000000..d6beb515
--- /dev/null
+++ b/2021/captions/test.md
@@ -0,0 +1,167 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hi! My name is Eduardo Ochs." start="00:00:00.240" video="mainVideo" id=subtitle]]
+[[!template text="I'm the author of" start="00:00:01.839" video="mainVideo" id=subtitle]]
+[[!template text="an Emacs package called eev," start="00:00:02.639" video="mainVideo" id=subtitle]]
+[[!template text="and this talk is about" start="00:00:04.319" video="mainVideo" id=subtitle]]
+[[!template text="a new feature of eev" start="00:00:05.279" video="mainVideo" id=subtitle]]
+[[!template text="called &quot;test blocks&quot;." start="00:00:06.480" video="mainVideo" id=subtitle]]
+[[!template text="Let's start by a demo." start="00:00:08.400" video="mainVideo" id=subtitle]]
+[[!template text="This is a file in Lua that defines" start="00:00:10.320" video="mainVideo" id=subtitle]]
+[[!template text="these two functions here," start="00:00:12.320" video="mainVideo" id=subtitle]]
+[[!template text="and if we type &lt;f8&gt; several times here," start="00:00:14.160" video="mainVideo" id=subtitle]]
+[[!template text="the &lt;f8&gt;s create a Lua REPL here" start="00:00:18.000" video="mainVideo" id=subtitle]]
+[[!template text="and then they send these lines" start="00:00:20.720" video="mainVideo" id=subtitle]]
+[[!template text="to the REPL, where this line here" start="00:00:22.240" video="mainVideo" id=subtitle]]
+[[!template text="loads this file into the REPL," start="00:00:25.840" video="mainVideo" id=subtitle]]
+[[!template text="and these other lines here" start="00:00:27.840" video="mainVideo" id=subtitle]]
+[[!template text="are tests for these lines." start="00:00:29.679" video="mainVideo" id=subtitle]]
+[[!template text="There's a lot of information here," start="00:00:33.200" video="mainVideo" id=subtitle]]
+[[!template text="so let me organize them" start="00:00:34.719" video="mainVideo" id=subtitle]]
+[[!template text="in a more visual way." start="00:00:36.160" video="mainVideo" id=subtitle]]
+[[!template text="This is our file in Lua." start="00:00:40.480" video="mainVideo" id=subtitle]]
+[[!template text="Lua sees this thing" start="00:00:42.960" video="mainVideo" id=subtitle]]
+[[!template text="as a multi-line comment," start="00:00:44.559" video="mainVideo" id=subtitle]]
+[[!template text="but we are going to see it" start="00:00:46.160" video="mainVideo" id=subtitle]]
+[[!template text="as a test block." start="00:00:47.520" video="mainVideo" id=subtitle]]
+[[!template text="And eev mode is active," start="00:00:48.879" video="mainVideo" id=subtitle]]
+[[!template text="so &lt;f8&gt; does the right thing." start="00:00:50.879" video="mainVideo" id=subtitle]]
+[[!template text="These three lines here" start="00:00:54.480" video="mainVideo" id=subtitle]]
+[[!template text="set up the target buffer" start="00:00:56.800" video="mainVideo" id=subtitle]]
+[[!template text="running a Lua REPL." start="00:00:58.320" video="mainVideo" id=subtitle]]
+[[!template text="You can see the the prompt" start="00:01:00.000" video="mainVideo" id=subtitle]]
+[[!template text="of the REPL here," start="00:01:02.079" video="mainVideo" id=subtitle]]
+[[!template text="and these lines here" start="00:01:03.520" video="mainVideo" id=subtitle]]
+[[!template text="are sent to the REPL." start="00:01:04.640" video="mainVideo" id=subtitle]]
+[[!template text="When we type &lt;f8&gt;" start="00:01:07.200" video="mainVideo" id=subtitle]]
+[[!template text="on a line that starts" start="00:01:08.960" video="mainVideo" id=subtitle]]
+[[!template text="with a red star," start="00:01:10.720" video="mainVideo" id=subtitle]]
+[[!template text="like these lines here," start="00:01:11.680" video="mainVideo" id=subtitle]]
+[[!template text="what &lt;f8&gt; does is that" start="00:01:13.600" video="mainVideo" id=subtitle]]
+[[!template text="it sends the rest of the line--" start="00:01:15.119" video="mainVideo" id=subtitle]]
+[[!template text="sorry, it executes" start="00:01:17.537" video="mainVideo" id=subtitle]]
+[[!template text="the rest of the line as Lisp." start="00:01:18.880" video="mainVideo" id=subtitle]]
+[[!template text="So the three &lt;f8&gt;s here" start="00:01:21.119" video="mainVideo" id=subtitle]]
+[[!template text="executes these lines as Lisp," start="00:01:23.920" video="mainVideo" id=subtitle]]
+[[!template text="and they set up the target buffer here." start="00:01:26.000" video="mainVideo" id=subtitle]]
+[[!template text="When we type &lt;f8&gt;" start="00:01:29.520" video="mainVideo" id=subtitle]]
+[[!template text="on a line that does not start" start="00:01:31.119" video="mainVideo" id=subtitle]]
+[[!template text="with a red star," start="00:01:32.720" video="mainVideo" id=subtitle]]
+[[!template text="the &lt;f8&gt; sends the line" start="00:01:34.159" video="mainVideo" id=subtitle]]
+[[!template text="to the target buffer and moves down." start="00:01:35.680" video="mainVideo" id=subtitle]]
+[[!template text="This line loads this file" start="00:01:38.799" video="mainVideo" id=subtitle]]
+[[!template text="in the REPL, and these lines are tests." start="00:01:40.619" video="mainVideo" id=subtitle]]
+[[!template text="So we just saw how to use" start="00:01:45.200" video="mainVideo" id=subtitle]]
+[[!template text="an existing test block;" start="00:01:46.799" video="mainVideo" id=subtitle]]
+[[!template text="let's now see how to create" start="00:01:48.240" video="mainVideo" id=subtitle]]
+[[!template text="a new test block." start="00:01:49.840" video="mainVideo" id=subtitle]]
+[[!template text="We just have to run this:" start="00:01:51.280" video="mainVideo" id=subtitle]]
+[[!template text="M-x ee-insert-test-block -" start="00:01:52.640" video="mainVideo" id=subtitle]]
+[[!template text="or M-x eeit." start="00:01:55.680" video="mainVideo" id=subtitle]]
+[[!template text="The result depends on the major mode." start="00:01:58.079" video="mainVideo" id=subtitle]]
+[[!template text="Let's understand that" start="00:02:01.439" video="mainVideo" id=subtitle]]
+[[!template text="by looking at the source code." start="00:02:03.920" video="mainVideo" id=subtitle]]
+[[!template text="eeit is an alias to this function here," start="00:02:06.079" video="mainVideo" id=subtitle]]
+[[!template text="and this function is just" start="00:02:08.720" video="mainVideo" id=subtitle]]
+[[!template text="five lines of code plus a docstring..." start="00:02:09.920" video="mainVideo" id=subtitle]]
+[[!template text="and the docstring explains" start="00:02:12.800" video="mainVideo" id=subtitle]]
+[[!template text="that if the major mode is foo-mode," start="00:02:14.160" video="mainVideo" id=subtitle]]
+[[!template text="then this function tries to call" start="00:02:15.920" video="mainVideo" id=subtitle]]
+[[!template text="a function called ee-insert-test-foo-mode" start="00:02:18.800" video="mainVideo" id=subtitle]]
+[[!template text="if that function exists," start="00:02:21.360" video="mainVideo" id=subtitle]]
+[[!template text="and that, if that function does not exist," start="00:02:24.800" video="mainVideo" id=subtitle]]
+[[!template text="then it yields an error." start="00:02:27.280" video="mainVideo" id=subtitle]]
+[[!template text="And here's an example" start="00:02:29.680" video="mainVideo" id=subtitle]]
+[[!template text="of one such function." start="00:02:31.120" video="mainVideo" id=subtitle]]
+[[!template text="That's a function that inserts" start="00:02:32.560" video="mainVideo" id=subtitle]]
+[[!template text="a test block in haskell-mode." start="00:02:34.800" video="mainVideo" id=subtitle]]
+[[!template text="Here we can see two functions like this:" start="00:02:37.280" video="mainVideo" id=subtitle]]
+[[!template text="one for haskell-mode and one for js-mode." start="00:02:40.959" video="mainVideo" id=subtitle]]
+[[!template text="These functions look quite similar," start="00:02:46.080" video="mainVideo" id=subtitle]]
+[[!template text="but their effects look quite different." start="00:02:48.560" video="mainVideo" id=subtitle]]
+[[!template text="To make this comparison here," start="00:02:52.720" video="mainVideo" id=subtitle]]
+[[!template text="I started by writing--" start="00:02:54.800" video="mainVideo" id=subtitle]]
+[[!template text="by creating seven files," start="00:02:57.280" video="mainVideo" id=subtitle]]
+[[!template text="each one in a different language." start="00:02:59.040" video="mainVideo" id=subtitle]]
+[[!template text="Initially, each one of these files" start="00:03:01.120" video="mainVideo" id=subtitle]]
+[[!template text="only had a comment" start="00:03:03.040" video="mainVideo" id=subtitle]]
+[[!template text="with the name of the language..." start="00:03:04.159" video="mainVideo" id=subtitle]]
+[[!template text="so: C, Haskell, Javascript, Org Mode, etc." start="00:03:06.403" video="mainVideo" id=subtitle]]
+[[!template text="In each one of these files," start="00:03:10.560" video="mainVideo" id=subtitle]]
+[[!template text="I typed M-x eeit to insert a test block." start="00:03:12.560" video="mainVideo" id=subtitle]]
+[[!template text="So here we can see that" start="00:03:16.959" video="mainVideo" id=subtitle]]
+[[!template text="these test blocks are different." start="00:03:18.319" video="mainVideo" id=subtitle]]
+[[!template text="For example, the syntax" start="00:03:20.319" video="mainVideo" id=subtitle]]
+[[!template text="for multi-line comments" start="00:03:21.440" video="mainVideo" id=subtitle]]
+[[!template text="is different depending on the language." start="00:03:22.560" video="mainVideo" id=subtitle]]
+[[!template text="This block here that selects" start="00:03:25.200" video="mainVideo" id=subtitle]]
+[[!template text="which REPL to run is also different," start="00:03:27.440" video="mainVideo" id=subtitle]]
+[[!template text="and this line here that tells the REPL" start="00:03:30.100" video="mainVideo" id=subtitle]]
+[[!template text="to load the current file" start="00:03:34.080" video="mainVideo" id=subtitle]]
+[[!template text="is also different," start="00:03:36.000" video="mainVideo" id=subtitle]]
+[[!template text="depending on the language." start="00:03:37.680" video="mainVideo" id=subtitle]]
+[[!template text="In some cases, I had to improvise a bit." start="00:03:39.680" video="mainVideo" id=subtitle]]
+[[!template text="For example, to implement test blocks" start="00:03:41.840" video="mainVideo" id=subtitle]]
+[[!template text="in shell mode, I had to use" start="00:03:45.360" video="mainVideo" id=subtitle]]
+[[!template text="this weird syntax using a here-document." start="00:03:48.560" video="mainVideo" id=subtitle]]
+[[!template text="In Tcl, I also had to improvise a bit," start="00:03:52.560" video="mainVideo" id=subtitle]]
+[[!template text="and in some cases," start="00:03:55.040" video="mainVideo" id=subtitle]]
+[[!template text="I had to improvise a lot." start="00:03:55.920" video="mainVideo" id=subtitle]]
+[[!template text="For example, in Org Mode," start="00:03:57.840" video="mainVideo" id=subtitle]]
+[[!template text="there isn't an obvious REPL to run," start="00:04:00.159" video="mainVideo" id=subtitle]]
+[[!template text="and there isn't an obvious way" start="00:04:02.400" video="mainVideo" id=subtitle]]
+[[!template text="to load the the current Org file" start="00:04:03.840" video="mainVideo" id=subtitle]]
+[[!template text="into the REPL, so the default action" start="00:04:06.480" video="mainVideo" id=subtitle]]
+[[!template text="of M-x eeit in Org Mode" start="00:04:09.360" video="mainVideo" id=subtitle]]
+[[!template text="is just to insert this thing here," start="00:04:12.560" video="mainVideo" id=subtitle]]
+[[!template text="that we can use to run a shell in a REPL." start="00:04:15.439" video="mainVideo" id=subtitle]]
+[[!template text="So these functions are quite similar." start="00:04:22.320" video="mainVideo" id=subtitle]]
+[[!template text="In the beginning," start="00:04:25.280" video="mainVideo" id=subtitle]]
+[[!template text="I was writing all of them by hand..." start="00:04:26.240" video="mainVideo" id=subtitle]]
+[[!template text="but then I got bored" start="00:04:27.919" video="mainVideo" id=subtitle]]
+[[!template text="and I wrote a function" start="00:04:29.120" video="mainVideo" id=subtitle]]
+[[!template text="to help me write functions like that." start="00:04:30.160" video="mainVideo" id=subtitle]]
+[[!template text="This function is called find-eeit-links," start="00:04:33.840" video="mainVideo" id=subtitle]]
+[[!template text="and it creates a temporary buffer," start="00:04:37.280" video="mainVideo" id=subtitle]]
+[[!template text="and the contents of this temporary buffer" start="00:04:39.919" video="mainVideo" id=subtitle]]
+[[!template text="depends on the major mode. For example," start="00:04:42.080" video="mainVideo" id=subtitle]]
+[[!template text="if the current mode is python-mode," start="00:04:44.320" video="mainVideo" id=subtitle]]
+[[!template text="then running this function here" start="00:04:45.680" video="mainVideo" id=subtitle]]
+[[!template text="creates a temporary buffer" start="00:04:48.880" video="mainVideo" id=subtitle]]
+[[!template text="that lets me write the support" start="00:04:50.160" video="mainVideo" id=subtitle]]
+[[!template text="for test blocks in python-mode," start="00:04:53.120" video="mainVideo" id=subtitle]]
+[[!template text="or rewrite the function" start="00:04:55.440" video="mainVideo" id=subtitle]]
+[[!template text="that supports test blocks" start="00:04:57.440" video="mainVideo" id=subtitle]]
+[[!template text="in python-mode." start="00:04:59.040" video="mainVideo" id=subtitle]]
+[[!template text="So if I'm in python-mode and I run this," start="00:05:00.880" video="mainVideo" id=subtitle]]
+[[!template text="I get a temporary buffer like this," start="00:05:03.600" video="mainVideo" id=subtitle]]
+[[!template text="in which this thing is my template" start="00:05:06.639" video="mainVideo" id=subtitle]]
+[[!template text="for the function. Usually, this string" start="00:05:08.639" video="mainVideo" id=subtitle]]
+[[!template text="is totally wrong," start="00:05:11.039" video="mainVideo" id=subtitle]]
+[[!template text="I have to rewrite this string," start="00:05:11.919" video="mainVideo" id=subtitle]]
+[[!template text="but the rest is right." start="00:05:13.919" video="mainVideo" id=subtitle]]
+[[!template text="You can see python-mode here" start="00:05:14.960" video="mainVideo" id=subtitle]]
+[[!template text="in the name of the function." start="00:05:16.960" video="mainVideo" id=subtitle]]
+[[!template text="So we have to edit this" start="00:05:18.479" video="mainVideo" id=subtitle]]
+[[!template text="and save that to our ~/.emacs." start="00:05:20.080" video="mainVideo" id=subtitle]]
+[[!template text="By the way, these things here" start="00:05:22.840" video="mainVideo" id=subtitle]]
+[[!template text="hyperlinks to many different things..." start="00:05:26.080" video="mainVideo" id=subtitle]]
+[[!template text="This Elisp hyperlink here" start="00:05:28.880" video="mainVideo" id=subtitle]]
+[[!template text="points to the source code," start="00:05:31.600" video="mainVideo" id=subtitle]]
+[[!template text="to the section in which these functions" start="00:05:32.880" video="mainVideo" id=subtitle]]
+[[!template text="are defined. So you can see this here," start="00:05:36.880" video="mainVideo" id=subtitle]]
+[[!template text="the function that supports C," start="00:05:39.919" video="mainVideo" id=subtitle]]
+[[!template text="the function for Haskell," start="00:05:41.759" video="mainVideo" id=subtitle]]
+[[!template text="the function for Javascript, etc..." start="00:05:42.800" video="mainVideo" id=subtitle]]
+[[!template text="and that's it!" start="00:05:46.400" video="mainVideo" id=subtitle]]
+[[!template text="This is a five-minute talk," start="00:05:47.520" video="mainVideo" id=subtitle]]
+[[!template text="so I can't say much..." start="00:05:49.440" video="mainVideo" id=subtitle]]
+[[!template text="If you want more information," start="00:05:50.960" video="mainVideo" id=subtitle]]
+[[!template text="or if you want to see real-world examples," start="00:05:52.320" video="mainVideo" id=subtitle]]
+[[!template text="how I use test blocks, etc. etc.," start="00:05:54.800" video="mainVideo" id=subtitle]]
+[[!template text="see this page here..." start="00:05:57.280" video="mainVideo" id=subtitle]]
+[[!template text="and I do not have time to explain this" start="00:05:58.639" video="mainVideo" id=subtitle]]
+[[!template text="&quot;By the way&quot; here." start="00:06:01.253" video="mainVideo" id=subtitle]]
+[[!template text="So that's it! Thanks! =)" start="00:06:02.560" video="mainVideo" id=subtitle]]
+[[!template text="captions by Eduardo Ochs" start="00:06:03.333" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/ui.md b/2021/captions/ui.md
new file mode 100644
index 00000000..c9991e91
--- /dev/null
+++ b/2021/captions/ui.md
@@ -0,0 +1,214 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hi! I'm Erik Anderson," start="00:00:07.600" video="mainVideo" id=subtitle]]
+[[!template text="and I'll be talking about tui," start="00:00:09.120" video="mainVideo" id=subtitle]]
+[[!template text="a user interface framework" start="00:00:10.559" video="mainVideo" id=subtitle]]
+[[!template text="that I've written in Emacs Lisp." start="00:00:11.840" video="mainVideo" id=subtitle]]
+[[!template text="First, I want to talk a bit about" start="00:00:15.040" video="mainVideo" id=subtitle]]
+[[!template text="the problem space of" start="00:00:16.196" video="mainVideo" id=subtitle]]
+[[!template text="user interface development," start="00:00:17.296" video="mainVideo" id=subtitle]]
+[[!template text="specifically, I want to quickly illustrate" start="00:00:18.728" video="mainVideo" id=subtitle]]
+[[!template text="some of the complexities involved" start="00:00:20.880" video="mainVideo" id=subtitle]]
+[[!template text="with UI implementation in Emacs." start="00:00:22.320" video="mainVideo" id=subtitle]]
+[[!template text="In Emacs, we have the ubiquitous" start="00:00:26.480" video="mainVideo" id=subtitle]]
+[[!template text="buffer object type that forms the container" start="00:00:27.920" video="mainVideo" id=subtitle]]
+[[!template text="for most content in Emacs." start="00:00:29.920" video="mainVideo" id=subtitle]]
+[[!template text="Most interfaces we interact with" start="00:00:31.920" video="mainVideo" id=subtitle]]
+[[!template text="consist of character based content" start="00:00:34.079" video="mainVideo" id=subtitle]]
+[[!template text="in a buffer that's presented" start="00:00:36.239" video="mainVideo" id=subtitle]]
+[[!template text="in a window in frame." start="00:00:38.239" video="mainVideo" id=subtitle]]
+[[!template text="Although the underlying content" start="00:00:40.079" video="mainVideo" id=subtitle]]
+[[!template text="may be textual, Emacs has capable APIs" start="00:00:41.520" video="mainVideo" id=subtitle]]
+[[!template text="to present rich content." start="00:00:44.320" video="mainVideo" id=subtitle]]
+[[!template text="The pervasiveness of buffers" start="00:00:47.680" video="mainVideo" id=subtitle]]
+[[!template text="affords us wonderful flexibility." start="00:00:49.200" video="mainVideo" id=subtitle]]
+[[!template text="This presentation, for instance," start="00:00:50.879" video="mainVideo" id=subtitle]]
+[[!template text="is running in an Emacs buffer." start="00:00:52.559" video="mainVideo" id=subtitle]]
+[[!template text="Using Emacs's built-in basic" start="00:00:55.520" video="mainVideo" id=subtitle]]
+[[!template text="button library, we can insert" start="00:00:57.420" video="mainVideo" id=subtitle]]
+[[!template text="an interactive button" start="00:00:59.199" video="mainVideo" id=subtitle]]
+[[!template text="that shows a message" start="00:01:00.884" video="mainVideo" id=subtitle]]
+[[!template text="in the minibuffer when clicked." start="00:01:01.760" video="mainVideo" id=subtitle]]
+[[!template text="What about UIs that express application state?" start="00:01:06.080" video="mainVideo" id=subtitle]]
+[[!template text="Most applications don't have a static UI." start="00:01:09.200" video="mainVideo" id=subtitle]]
+[[!template text="As application state changes," start="00:01:11.439" video="mainVideo" id=subtitle]]
+[[!template text="the UI should change" start="00:01:13.280" video="mainVideo" id=subtitle]]
+[[!template text="to display the desired content." start="00:01:14.320" video="mainVideo" id=subtitle]]
+[[!template text="One simplifying strategy is to simply" start="00:01:18.479" video="mainVideo" id=subtitle]]
+[[!template text="re-render the entire UI upon any change." start="00:01:20.320" video="mainVideo" id=subtitle]]
+[[!template text="First erase the contents of the buffer," start="00:01:23.600" video="mainVideo" id=subtitle]]
+[[!template text="and then reinsert your UI again" start="00:01:25.680" video="mainVideo" id=subtitle]]
+[[!template text="with desired changes," start="00:01:27.600" video="mainVideo" id=subtitle]]
+[[!template text="and restore things like point and region." start="00:01:29.040" video="mainVideo" id=subtitle]]
+[[!template text="Basic composition is possible" start="00:01:33.040" video="mainVideo" id=subtitle]]
+[[!template text="with this approach." start="00:01:34.560" video="mainVideo" id=subtitle]]
+[[!template text="Simply insert the elements" start="00:01:35.759" video="mainVideo" id=subtitle]]
+[[!template text="of the UI in sequence." start="00:01:37.200" video="mainVideo" id=subtitle]]
+[[!template text="Complex elements can be" start="00:01:39.280" video="mainVideo" id=subtitle]]
+[[!template text="composed of multiple sub-elements." start="00:01:40.640" video="mainVideo" id=subtitle]]
+[[!template text="UIs can be made extensible," start="00:01:44.320" video="mainVideo" id=subtitle]]
+[[!template text="and expose this composition," start="00:01:45.840" video="mainVideo" id=subtitle]]
+[[!template text="for example, with insertion hooks" start="00:01:47.040" video="mainVideo" id=subtitle]]
+[[!template text="like magit's status sections hook." start="00:01:49.360" video="mainVideo" id=subtitle]]
+[[!template text="This generally relies on elements" start="00:01:52.320" video="mainVideo" id=subtitle]]
+[[!template text="being well-behaved inserting themselves," start="00:01:54.159" video="mainVideo" id=subtitle]]
+[[!template text="not affecting the rest of the buffer." start="00:01:56.640" video="mainVideo" id=subtitle]]
+[[!template text="If we find ourselves with complex UIs," start="00:02:00.399" video="mainVideo" id=subtitle]]
+[[!template text="large buffers, long lines," start="00:02:02.960" video="mainVideo" id=subtitle]]
+[[!template text="or poor rendering performance," start="00:02:04.640" video="mainVideo" id=subtitle]]
+[[!template text="we might consider partial UI updates" start="00:02:06.320" video="mainVideo" id=subtitle]]
+[[!template text="rather than re-rendering completely." start="00:02:09.039" video="mainVideo" id=subtitle]]
+[[!template text="In that case, the complexity" start="00:02:11.360" video="mainVideo" id=subtitle]]
+[[!template text="for maintaining the UI quickly increases." start="00:02:12.800" video="mainVideo" id=subtitle]]
+[[!template text="As accessible as buffers are," start="00:02:15.840" video="mainVideo" id=subtitle]]
+[[!template text="we don't have high level abstractions" start="00:02:17.360" video="mainVideo" id=subtitle]]
+[[!template text="for managing portions of a UI" start="00:02:19.120" video="mainVideo" id=subtitle]]
+[[!template text="rendered to a buffer." start="00:02:20.879" video="mainVideo" id=subtitle]]
+[[!template text="(It) is left up to the programmers" start="00:02:22.160" video="mainVideo" id=subtitle]]
+[[!template text="to track and update UI state." start="00:02:23.520" video="mainVideo" id=subtitle]]
+[[!template text="This is generally done by" start="00:02:25.440" video="mainVideo" id=subtitle]]
+[[!template text="one of two methods, reflection," start="00:02:26.540" video="mainVideo" id=subtitle]]
+[[!template text="searching for strings or text properties" start="00:02:28.959" video="mainVideo" id=subtitle]]
+[[!template text="within the buffer, or tracking segments" start="00:02:30.800" video="mainVideo" id=subtitle]]
+[[!template text="of a UI buffer manually" start="00:02:34.239" video="mainVideo" id=subtitle]]
+[[!template text="using numeric offsets, or marker," start="00:02:36.080" video="mainVideo" id=subtitle]]
+[[!template text="or overlay objects." start="00:02:38.959" video="mainVideo" id=subtitle]]
+[[!template text="Here we have a basic timer component" start="00:02:45.280" video="mainVideo" id=subtitle]]
+[[!template text="that shows elapsed time" start="00:02:47.280" video="mainVideo" id=subtitle]]
+[[!template text="after it's inserted." start="00:02:48.720" video="mainVideo" id=subtitle]]
+[[!template text="It works, but has several problems." start="00:02:50.319" video="mainVideo" id=subtitle]]
+[[!template text="It doesn't restore the user's point or mark," start="00:02:52.160" video="mainVideo" id=subtitle]]
+[[!template text="so it snaps back after every render," start="00:02:55.519" video="mainVideo" id=subtitle]]
+[[!template text="after every update." start="00:02:59.120" video="mainVideo" id=subtitle]]
+[[!template text="It relies on singleton global state," start="00:03:01.040" video="mainVideo" id=subtitle]]
+[[!template text="so isn't designed to coexist" start="00:03:03.360" video="mainVideo" id=subtitle]]
+[[!template text="with other instances of itself." start="00:03:05.124" video="mainVideo" id=subtitle]]
+[[!template text="It doesn't use a marker," start="00:03:12.000" video="mainVideo" id=subtitle]]
+[[!template text="so it's sensitive to content" start="00:03:13.200" video="mainVideo" id=subtitle]]
+[[!template text="proceeding it, that's following it," start="00:03:14.640" video="mainVideo" id=subtitle]]
+[[!template text="changing in the buffer." start="00:03:16.239" video="mainVideo" id=subtitle]]
+[[!template text="The update logic doesn't even consider" start="00:03:23.519" video="mainVideo" id=subtitle]]
+[[!template text="which buffer it's trying to update." start="00:03:25.120" video="mainVideo" id=subtitle]]
+[[!template text="If I switch buffers," start="00:03:26.799" video="mainVideo" id=subtitle]]
+[[!template text="it will insert into another buffer," start="00:03:27.840" video="mainVideo" id=subtitle]]
+[[!template text="or even the minibuffer." start="00:03:29.360" video="mainVideo" id=subtitle]]
+[[!template text="It can't remove itself, or re-render" start="00:03:31.519" video="mainVideo" id=subtitle]]
+[[!template text="if it gets corrupted, as you see." start="00:03:33.360" video="mainVideo" id=subtitle]]
+[[!template text="All in all, it's not" start="00:03:34.879" video="mainVideo" id=subtitle]]
+[[!template text="a readily composable component." start="00:03:35.920" video="mainVideo" id=subtitle]]
+[[!template text="Addressing these components" start="00:03:38.400" video="mainVideo" id=subtitle]]
+[[!template text="within this logic further increases" start="00:03:39.519" video="mainVideo" id=subtitle]]
+[[!template text="the implementation complexity" start="00:03:41.920" video="mainVideo" id=subtitle]]
+[[!template text="of this component," start="00:03:43.936" video="mainVideo" id=subtitle]]
+[[!template text="and still this component" start="00:03:45.680" video="mainVideo" id=subtitle]]
+[[!template text="would likely have" start="00:03:46.640" video="mainVideo" id=subtitle]]
+[[!template text="various subtle differences" start="00:03:47.280" video="mainVideo" id=subtitle]]
+[[!template text="with other components" start="00:03:49.120" video="mainVideo" id=subtitle]]
+[[!template text="implemented by other authors." start="00:03:52.480" video="mainVideo" id=subtitle]]
+[[!template text="For those of you unfamiliar" start="00:03:58.959" video="mainVideo" id=subtitle]]
+[[!template text="with this term Yak Shaving," start="00:04:00.319" video="mainVideo" id=subtitle]]
+[[!template text="that is a quite technical term" start="00:04:02.159" video="mainVideo" id=subtitle]]
+[[!template text="for any seemingly pointless activity," start="00:04:04.080" video="mainVideo" id=subtitle]]
+[[!template text="which is actually necessary" start="00:04:07.599" video="mainVideo" id=subtitle]]
+[[!template text="to solve a problem," start="00:04:09.680" video="mainVideo" id=subtitle]]
+[[!template text="which solves a problem," start="00:04:10.879" video="mainVideo" id=subtitle]]
+[[!template text="which, several levels of recursion later," start="00:04:11.920" video="mainVideo" id=subtitle]]
+[[!template text="solves the real problem you're working on." start="00:04:14.799" video="mainVideo" id=subtitle]]
+[[!template text="The itch that led to this project" start="00:04:18.239" video="mainVideo" id=subtitle]]
+[[!template text="was the desire to display a dense summary" start="00:04:19.943" video="mainVideo" id=subtitle]]
+[[!template text="of local Git repository statuses." start="00:04:21.840" video="mainVideo" id=subtitle]]
+[[!template text="Encountering various implementation" start="00:04:24.400" video="mainVideo" id=subtitle]]
+[[!template text="complexity for building UI elements," start="00:04:26.560" video="mainVideo" id=subtitle]]
+[[!template text="it led to the yak shaving endeavor" start="00:04:30.080" video="mainVideo" id=subtitle]]
+[[!template text="that produced tui." start="00:04:31.680" video="mainVideo" id=subtitle]]
+[[!template text="When I wrote the library," start="00:04:33.680" video="mainVideo" id=subtitle]]
+[[!template text="I had recently played with" start="00:04:35.440" video="mainVideo" id=subtitle]]
+[[!template text="a popular UI framework called React," start="00:04:36.479" video="mainVideo" id=subtitle]]
+[[!template text="and had an interest in learning" start="00:04:39.360" video="mainVideo" id=subtitle]]
+[[!template text="about the internal architecture of React." start="00:04:41.840" video="mainVideo" id=subtitle]]
+[[!template text="So, rather than implement" start="00:04:44.080" video="mainVideo" id=subtitle]]
+[[!template text="a string caching layer" start="00:04:45.680" video="mainVideo" id=subtitle]]
+[[!template text="on top of tabulated list mode," start="00:04:46.960" video="mainVideo" id=subtitle]]
+[[!template text="I was rather inclined" start="00:04:49.280" video="mainVideo" id=subtitle]]
+[[!template text="to go down the path of implementing" start="00:04:50.360" video="mainVideo" id=subtitle]]
+[[!template text="the React API for Emacs Lisp." start="00:04:52.400" video="mainVideo" id=subtitle]]
+[[!template text="I'll offer a brief view of" start="00:04:58.960" video="mainVideo" id=subtitle]]
+[[!template text="the tui Emacs Lisp API." start="00:05:00.896" video="mainVideo" id=subtitle]]
+[[!template text="Inserting component content" start="00:05:05.120" video="mainVideo" id=subtitle]]
+[[!template text="is pretty straightforward." start="00:05:07.360" video="mainVideo" id=subtitle]]
+[[!template text="You take a component tree" start="00:05:08.320" video="mainVideo" id=subtitle]]
+[[!template text="and render it in an Emacs buffer." start="00:05:10.160" video="mainVideo" id=subtitle]]
+[[!template text="If any elements in that tree are updated," start="00:05:16.240" video="mainVideo" id=subtitle]]
+[[!template text="their respective content on the tree" start="00:05:18.639" video="mainVideo" id=subtitle]]
+[[!template text="is updated automatically." start="00:05:21.039" video="mainVideo" id=subtitle]]
+[[!template text="Here's a basic re-implementation" start="00:05:26.320" video="mainVideo" id=subtitle]]
+[[!template text="of the straw man timer from earlier," start="00:05:27.919" video="mainVideo" id=subtitle]]
+[[!template text="using a macro for syntactic trigger." start="00:05:29.919" video="mainVideo" id=subtitle]]
+[[!template text="You'll notice that" start="00:05:32.400" video="mainVideo" id=subtitle]]
+[[!template text="the signature includes its own" start="00:05:34.404" video="mainVideo" id=subtitle]]
+[[!template text="object reference, arguments, and state." start="00:05:36.164" video="mainVideo" id=subtitle]]
+[[!template text="Associating arguments in the state" start="00:05:44.560" video="mainVideo" id=subtitle]]
+[[!template text="with a component instance out of the box," start="00:05:46.400" video="mainVideo" id=subtitle]]
+[[!template text="makes it easy to design reusable components," start="00:05:51.360" video="mainVideo" id=subtitle]]
+[[!template text="and forms the basis for partial UI updates." start="00:05:54.400" video="mainVideo" id=subtitle]]
+[[!template text="The component rendering anchors" start="00:06:06.080" video="mainVideo" id=subtitle]]
+[[!template text="are durable, so content can be" start="00:06:07.840" video="mainVideo" id=subtitle]]
+[[!template text="added and removed surrounding content," start="00:06:09.199" video="mainVideo" id=subtitle]]
+[[!template text="or even within the region" start="00:06:11.360" video="mainVideo" id=subtitle]]
+[[!template text="of the component," start="00:06:12.479" video="mainVideo" id=subtitle]]
+[[!template text="and replaced when it re-renders." start="00:06:13.280" video="mainVideo" id=subtitle]]
+[[!template text="Components will also" start="00:06:16.319" video="mainVideo" id=subtitle]]
+[[!template text="cleanly remove themselves from a buffer" start="00:06:17.600" video="mainVideo" id=subtitle]]
+[[!template text="when instructed to." start="00:06:20.880" video="mainVideo" id=subtitle]]
+[[!template text="tui contains the core implementation" start="00:06:28.400" video="mainVideo" id=subtitle]]
+[[!template text="of the React API, so components," start="00:06:30.160" video="mainVideo" id=subtitle]]
+[[!template text="their constituent props, state," start="00:06:33.440" video="mainVideo" id=subtitle]]
+[[!template text="and all of the lifecycle methods" start="00:06:35.840" video="mainVideo" id=subtitle]]
+[[!template text="associated with them," start="00:06:38.000" video="mainVideo" id=subtitle]]
+[[!template text="as well as keys, refs," start="00:06:39.440" video="mainVideo" id=subtitle]]
+[[!template text="and the fundamental" start="00:06:41.120" video="mainVideo" id=subtitle]]
+[[!template text="reconciliation algorithm of React." start="00:06:43.228" video="mainVideo" id=subtitle]]
+[[!template text="A variety of other React APIs" start="00:06:47.520" video="mainVideo" id=subtitle]]
+[[!template text="that haven't been implemented yet." start="00:06:52.188" video="mainVideo" id=subtitle]]
+[[!template text="It contains some useful features so far," start="00:06:58.080" video="mainVideo" id=subtitle]]
+[[!template text="such as hot reloading, reflection," start="00:07:00.080" video="mainVideo" id=subtitle]]
+[[!template text="and various debugging tools," start="00:07:02.639" video="mainVideo" id=subtitle]]
+[[!template text="and some reconciliation logging." start="00:07:06.164" video="mainVideo" id=subtitle]]
+[[!template text="Lastly, I'd like to give you some quick" start="00:07:12.639" video="mainVideo" id=subtitle]]
+[[!template text="visual taste of components built with tui." start="00:07:14.880" video="mainVideo" id=subtitle]]
+[[!template text="The grid view that motivated" start="00:07:19.039" video="mainVideo" id=subtitle]]
+[[!template text="my development of this package" start="00:07:20.240" video="mainVideo" id=subtitle]]
+[[!template text="is very similar to Magit's" start="00:07:21.520" video="mainVideo" id=subtitle]]
+[[!template text="list repositories functionality." start="00:07:23.039" video="mainVideo" id=subtitle]]
+[[!template text="Essentially, tabulated list mode" start="00:07:30.720" video="mainVideo" id=subtitle]]
+[[!template text="but portable and has a separated model" start="00:07:36.080" video="mainVideo" id=subtitle]]
+[[!template text="and presentation layers." start="00:07:39.440" video="mainVideo" id=subtitle]]
+[[!template text="Here's a basic xkcd comic viewer" start="00:07:49.360" video="mainVideo" id=subtitle]]
+[[!template text="showing a couple classics." start="00:07:51.840" video="mainVideo" id=subtitle]]
+[[!template text="A long-standing React tutorial is" start="00:08:07.360" video="mainVideo" id=subtitle]]
+[[!template text="building a tic-tac-toe game" start="00:08:10.080" video="mainVideo" id=subtitle]]
+[[!template text="as a bit of a gimmick," start="00:08:13.280" video="mainVideo" id=subtitle]]
+[[!template text="and I'm not quite satisfied with" start="00:08:14.879" video="mainVideo" id=subtitle]]
+[[!template text="the buffering direction," start="00:08:17.039" video="mainVideo" id=subtitle]]
+[[!template text="but it got me thinking about" start="00:08:25.599" video="mainVideo" id=subtitle]]
+[[!template text="layout engines with text," start="00:08:27.120" video="mainVideo" id=subtitle]]
+[[!template text="so it was interesting." start="00:08:28.639" video="mainVideo" id=subtitle]]
+[[!template text="And here's a small" start="00:08:35.120" video="mainVideo" id=subtitle]]
+[[!template text="Unicode character viewer" start="00:08:38.560" video="mainVideo" id=subtitle]]
+[[!template text="capable of showing a bunch of characters." start="00:08:46.080" video="mainVideo" id=subtitle]]
+[[!template text="If this piques your interest," start="00:08:55.279" video="mainVideo" id=subtitle]]
+[[!template text="I would encourage you to check it out." start="00:08:57.279" video="mainVideo" id=subtitle]]
+[[!template text="tui should be usable by anyone" start="00:08:59.200" video="mainVideo" id=subtitle]]
+[[!template text="with some basic Elisp familiarity," start="00:09:01.440" video="mainVideo" id=subtitle]]
+[[!template text="no prior knowledge about JavaScript" start="00:09:04.640" video="mainVideo" id=subtitle]]
+[[!template text="or React is necessary." start="00:09:09.680" video="mainVideo" id=subtitle]]
+[[!template text="I'd absolutely love to talk with people" start="00:09:12.080" video="mainVideo" id=subtitle]]
+[[!template text="about the tui package," start="00:09:13.732" video="mainVideo" id=subtitle]]
+[[!template text="textual user interfaces in general," start="00:09:14.880" video="mainVideo" id=subtitle]]
+[[!template text="and really anything in Emacs." start="00:09:17.440" video="mainVideo" id=subtitle]]
+[[!template text="If you have any ideas, feedback," start="00:09:19.040" video="mainVideo" id=subtitle]]
+[[!template text="or want to contribute," start="00:09:20.693" video="mainVideo" id=subtitle]]
+[[!template text="please reach out." start="00:09:21.680" video="mainVideo" id=subtitle]]
+[[!template text="Thank you all for listening." start="00:09:23.360" video="mainVideo" id=subtitle]]
+[[!template text="captions by bhavin192 (Bhavin Gandhi)" start="00:09:24.360" video="mainVideo" id=subtitle]]
diff --git a/2021/captions/unix.md b/2021/captions/unix.md
new file mode 100644
index 00000000..834b2047
--- /dev/null
+++ b/2021/captions/unix.md
@@ -0,0 +1,258 @@
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hello!" start="00:00:00.080" video="mainVideo" id=subtitle]]
+[[!template text="My name is Daniel or Daniil Rose." start="00:00:01.199" video="mainVideo" id=subtitle]]
+[[!template text="I use Emacs in my everyday life," start="00:00:04.000" video="mainVideo" id=subtitle]]
+[[!template text="from programming in C or Rust for work," start="00:00:05.680" video="mainVideo" id=subtitle]]
+[[!template text="to writing reports for classes." start="00:00:08.320" video="mainVideo" id=subtitle]]
+[[!template text="I'd like to start by adding" start="00:00:11.120" video="mainVideo" id=subtitle]]
+[[!template text="an overarching theme to this talk." start="00:00:12.389" video="mainVideo" id=subtitle]]
+[[!template text="If there's only one thing" start="00:00:14.719" video="mainVideo" id=subtitle]]
+[[!template text="that you remember from today," start="00:00:15.603" video="mainVideo" id=subtitle]]
+[[!template text="I'd like you to walk away" start="00:00:16.670" video="mainVideo" id=subtitle]]
+[[!template text="with the understanding" start="00:00:17.886" video="mainVideo" id=subtitle]]
+[[!template text="that the philosophies or ideologies" start="00:00:18.550" video="mainVideo" id=subtitle]]
+[[!template text="are just that." start="00:00:20.720" video="mainVideo" id=subtitle]]
+[[!template text="By trying to box yourself in with a concept" start="00:00:21.280" video="mainVideo" id=subtitle]]
+[[!template text="you might be blind to other methods." start="00:00:24.400" video="mainVideo" id=subtitle]]
+[[!template text="We live in an ever-changing world," start="00:00:25.440" video="mainVideo" id=subtitle]]
+[[!template text="and I hope that you can appreciate" start="00:00:27.360" video="mainVideo" id=subtitle]]
+[[!template text="being flexible and adaptable." start="00:00:28.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="UNIX philosophy? As a quick intro" start="00:00:31.599" video="mainVideo" id=subtitle]]
+[[!template text="for those who don't know," start="00:00:33.280" video="mainVideo" id=subtitle]]
+[[!template text="the UNIX philosophy" start="00:00:34.720" video="mainVideo" id=subtitle]]
+[[!template text="was written by Doug McIlroy." start="00:00:35.680" video="mainVideo" id=subtitle]]
+[[!template text="It's wordy, so there is" start="00:00:37.920" video="mainVideo" id=subtitle]]
+[[!template text="a great summarization" start="00:00:39.136" video="mainVideo" id=subtitle]]
+[[!template text="by Peter H. Salus:" start="00:00:40.000" video="mainVideo" id=subtitle]]
+[[!template text="Write programs that do one thing" start="00:00:42.719" video="mainVideo" id=subtitle]]
+[[!template text="and do it well." start="00:00:43.920" video="mainVideo" id=subtitle]]
+[[!template text="Write programs to work together," start="00:00:46.879" video="mainVideo" id=subtitle]]
+[[!template text="and write programs to handle text streams," start="00:00:50.000" video="mainVideo" id=subtitle]]
+[[!template text="because they are the universal interface." start="00:00:52.750" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So enter Emacs." start="00:00:57.600" video="mainVideo" id=subtitle]]
+[[!template text="Emacs doesn't quite adhere" start="00:00:59.233" video="mainVideo" id=subtitle]]
+[[!template text="to those principles." start="00:01:01.020" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Do one thing and do it well&quot;" start="00:01:01.983" video="mainVideo" id=subtitle]]
+[[!template text="surely doesn't apply," start="00:01:03.680" video="mainVideo" id=subtitle]]
+[[!template text="since Emacs does /a lot/ of things" start="00:01:04.640" video="mainVideo" id=subtitle]]
+[[!template text="and does the majority of those things well." start="00:01:06.261" video="mainVideo" id=subtitle]]
+[[!template text="It might apply if you consider Emacs" start="00:01:08.640" video="mainVideo" id=subtitle]]
+[[!template text="purely as a Lisp environment, however." start="00:01:10.240" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Write programs to work together?&quot;" start="00:01:12.560" video="mainVideo" id=subtitle]]
+[[!template text="Arguably the thing Emacs is best" start="00:01:14.141" video="mainVideo" id=subtitle]]
+[[!template text="out of the three," start="00:01:15.767" video="mainVideo" id=subtitle]]
+[[!template text="proven especially" start="00:01:16.320" video="mainVideo" id=subtitle]]
+[[!template text="by all the various packages" start="00:01:17.370" video="mainVideo" id=subtitle]]
+[[!template text="that work with external programs," start="00:01:18.619" video="mainVideo" id=subtitle]]
+[[!template text="LSP, and whatever else." start="00:01:20.240" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Handle text streams?&quot;" start="00:01:22.560" video="mainVideo" id=subtitle]]
+[[!template text="Well, that one depends." start="00:01:23.703" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, Emacs versus the original ideas." start="00:01:25.439" video="mainVideo" id=subtitle]]
+[[!template text="The summarizations are good," start="00:01:27.583" video="mainVideo" id=subtitle]]
+[[!template text="but they aren't truly what was said." start="00:01:29.317" video="mainVideo" id=subtitle]]
+[[!template text="If we look back at the originals," start="00:01:31.067" video="mainVideo" id=subtitle]]
+[[!template text="we'll see that Emacs strongly adheres" start="00:01:32.800" video="mainVideo" id=subtitle]]
+[[!template text="to the second rule:" start="00:01:34.517" video="mainVideo" id=subtitle]]
+[[!template text="Design and build software," start="00:01:35.759" video="mainVideo" id=subtitle]]
+[[!template text="even operating systems," start="00:01:37.267" video="mainVideo" id=subtitle]]
+[[!template text="to be tried early," start="00:01:38.433" video="mainVideo" id=subtitle]]
+[[!template text="ideally within weeks." start="00:01:39.233" video="mainVideo" id=subtitle]]
+[[!template text="Don't hesitate to throw away" start="00:01:40.633" video="mainVideo" id=subtitle]]
+[[!template text="the clumsy parts" start="00:01:41.479" video="mainVideo" id=subtitle]]
+[[!template text="and rebuild them." start="00:01:42.367" video="mainVideo" id=subtitle]]
+[[!template text="The concept of LISP," start="00:01:43.600" video="mainVideo" id=subtitle]]
+[[!template text="self documentation of Emacs," start="00:01:45.003" video="mainVideo" id=subtitle]]
+[[!template text="and the &quot;REPL&quot; style all make it" start="00:01:46.933" video="mainVideo" id=subtitle]]
+[[!template text="a shining example of this rule." start="00:01:48.159" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But why compare to UNIX?" start="00:01:50.799" video="mainVideo" id=subtitle]]
+[[!template text="Truly, why compare to the UNIX philosophy?" start="00:01:52.880" video="mainVideo" id=subtitle]]
+[[!template text="Although the &quot;rules&quot; set down are good ones" start="00:01:55.520" video="mainVideo" id=subtitle]]
+[[!template text="for most programs," start="00:01:57.360" video="mainVideo" id=subtitle]]
+[[!template text="Emacs isn't most programs." start="00:01:58.467" video="mainVideo" id=subtitle]]
+[[!template text="The rules and summarizations" start="00:02:00.000" video="mainVideo" id=subtitle]]
+[[!template text="even were written decades ago," start="00:02:01.920" video="mainVideo" id=subtitle]]
+[[!template text="before we had REST APIs, JSON," start="00:02:03.532" video="mainVideo" id=subtitle]]
+[[!template text="or any other modern interface." start="00:02:05.717" video="mainVideo" id=subtitle]]
+[[!template text="If the world adapts," start="00:02:07.150" video="mainVideo" id=subtitle]]
+[[!template text="why too can't we adapt the past?" start="00:02:08.467" video="mainVideo" id=subtitle]]
+[[!template text="This concept of breaking the rules" start="00:02:10.640" video="mainVideo" id=subtitle]]
+[[!template text="and forging its own path" start="00:02:11.966" video="mainVideo" id=subtitle]]
+[[!template text="has allowed Emacs to continue" start="00:02:13.250" video="mainVideo" id=subtitle]]
+[[!template text="and be reworked for modern eras." start="00:02:14.467" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Emacs /does/ work with the UNIX philosophy." start="00:02:17.440" video="mainVideo" id=subtitle]]
+[[!template text="By looking at both of these ideologies," start="00:02:20.480" video="mainVideo" id=subtitle]]
+[[!template text="why must they be mutually exclusive?" start="00:02:22.239" video="mainVideo" id=subtitle]]
+[[!template text="Emacs does work with text:" start="00:02:24.319" video="mainVideo" id=subtitle]]
+[[!template text="Magit is a wrapper for the git CLI" start="00:02:26.239" video="mainVideo" id=subtitle]]
+[[!template text="Dired is a wrapper for ls," start="00:02:28.800" video="mainVideo" id=subtitle]]
+[[!template text="Consult grep for grep, and so on." start="00:02:30.733" video="mainVideo" id=subtitle]]
+[[!template text="Why rewrite poorly tools," start="00:02:32.450" video="mainVideo" id=subtitle]]
+[[!template text="when we can use the existing powerful ones?" start="00:02:34.867" video="mainVideo" id=subtitle]]
+[[!template text="Well, that in itself" start="00:02:37.200" video="mainVideo" id=subtitle]]
+[[!template text="is part of the UNIX philosophy." start="00:02:38.253" video="mainVideo" id=subtitle]]
+[[!template text="It seems that most strongly" start="00:02:39.242" video="mainVideo" id=subtitle]]
+[[!template text="the UNIX philosophy" start="00:02:40.567" video="mainVideo" id=subtitle]]
+[[!template text="applies to the command line." start="00:02:41.453" video="mainVideo" id=subtitle]]
+[[!template text="If we look at most graphical applications," start="00:02:42.319" video="mainVideo" id=subtitle]]
+[[!template text="these notions fall apart." start="00:02:44.183" video="mainVideo" id=subtitle]]
+[[!template text="But that isn't true for Emacs." start="00:02:45.550" video="mainVideo" id=subtitle]]
+[[!template text="It is a graphical application" start="00:02:47.133" video="mainVideo" id=subtitle]]
+[[!template text="(at least for me)" start="00:02:49.000" video="mainVideo" id=subtitle]]
+[[!template text="but it does use many other tools." start="00:02:49.817" video="mainVideo" id=subtitle]]
+[[!template text="Some have proposed" start="00:02:51.133" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs should be looked at" start="00:02:52.283" video="mainVideo" id=subtitle]]
+[[!template text="alongside UNIX, as its own OS." start="00:02:53.367" video="mainVideo" id=subtitle]]
+[[!template text="It has windowing capabilities" start="00:02:55.350" video="mainVideo" id=subtitle]]
+[[!template text="handles its own formats," start="00:02:56.567" video="mainVideo" id=subtitle]]
+[[!template text="and so on, but I disagree with this concept." start="00:02:57.567" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Philosophies don't really matter" start="00:02:59.650" video="mainVideo" id=subtitle]]
+[[!template text="in computing." start="00:03:02.103" video="mainVideo" id=subtitle]]
+[[!template text="It's true, they don't." start="00:03:03.050" video="mainVideo" id=subtitle]]
+[[!template text="As people, we like to group things." start="00:03:03.967" video="mainVideo" id=subtitle]]
+[[!template text="We like to have our set ways" start="00:03:05.683" video="mainVideo" id=subtitle]]
+[[!template text="to describe them," start="00:03:06.603" video="mainVideo" id=subtitle]]
+[[!template text="but that doesn't always work." start="00:03:07.267" video="mainVideo" id=subtitle]]
+[[!template text="By sticking with a common concept" start="00:03:08.300" video="mainVideo" id=subtitle]]
+[[!template text="in the Emacs community," start="00:03:10.017" video="mainVideo" id=subtitle]]
+[[!template text="do everything in Emacs," start="00:03:11.033" video="mainVideo" id=subtitle]]
+[[!template text="is it truly benefitting me and you?" start="00:03:13.117" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Android Studio. Here's an example." start="00:03:15.050" video="mainVideo" id=subtitle]]
+[[!template text="I work most often in Emacs." start="00:03:18.017" video="mainVideo" id=subtitle]]
+[[!template text="But I also have courses" start="00:03:20.083" video="mainVideo" id=subtitle]]
+[[!template text="in Android and iOS development." start="00:03:21.067" video="mainVideo" id=subtitle]]
+[[!template text="I can absolutely install" start="00:03:22.567" video="mainVideo" id=subtitle]]
+[[!template text="~android-mode~ and ~kotlin-mode~," start="00:03:24.367" video="mainVideo" id=subtitle]]
+[[!template text="and use ~adb~ in Emacs," start="00:03:25.317" video="mainVideo" id=subtitle]]
+[[!template text="but at that point," start="00:03:26.517" video="mainVideo" id=subtitle]]
+[[!template text="I am creating more work than it's worth." start="00:03:27.800" video="mainVideo" id=subtitle]]
+[[!template text="When unmaintained," start="00:03:29.050" video="mainVideo" id=subtitle]]
+[[!template text="things tend to fall apart," start="00:03:30.300" video="mainVideo" id=subtitle]]
+[[!template text="and many features of ~android-mode~" start="00:03:31.333" video="mainVideo" id=subtitle]]
+[[!template text="no longer work for me." start="00:03:33.100" video="mainVideo" id=subtitle]]
+[[!template text="So I have two main options:" start="00:03:33.967" video="mainVideo" id=subtitle]]
+[[!template text="fix the existing mode or write my own," start="00:03:35.817" video="mainVideo" id=subtitle]]
+[[!template text="or use the assumed tools for the job," start="00:03:37.500" video="mainVideo" id=subtitle]]
+[[!template text="like Android Studio and/or IntelliJ." start="00:03:39.683" video="mainVideo" id=subtitle]]
+[[!template text="Looking at Android Studio:" start="00:03:41.517" video="mainVideo" id=subtitle]]
+[[!template text="I have plenty of plugins for colour themes," start="00:03:43.017" video="mainVideo" id=subtitle]]
+[[!template text="just like Emacs." start="00:03:45.083" video="mainVideo" id=subtitle]]
+[[!template text="I have Emacs keybindings built in," start="00:03:45.733" video="mainVideo" id=subtitle]]
+[[!template text="and other quality-of-life features." start="00:03:47.300" video="mainVideo" id=subtitle]]
+[[!template text="According to the UNIX philosophy," start="00:03:48.800" video="mainVideo" id=subtitle]]
+[[!template text="in a round-about way," start="00:03:50.833" video="mainVideo" id=subtitle]]
+[[!template text="I should be using one tool" start="00:03:51.933" video="mainVideo" id=subtitle]]
+[[!template text="that does its job well." start="00:03:53.367" video="mainVideo" id=subtitle]]
+[[!template text="While not minimal," start="00:03:54.683" video="mainVideo" id=subtitle]]
+[[!template text="Android Studio accomplishes this job." start="00:03:55.500" video="mainVideo" id=subtitle]]
+[[!template text="Does that mean that I shouldn't use Emacs at all?" start="00:03:57.650" video="mainVideo" id=subtitle]]
+[[!template text="Of course not!" start="00:03:59.733" video="mainVideo" id=subtitle]]
+[[!template text="And while it may seem obvious," start="00:04:00.300" video="mainVideo" id=subtitle]]
+[[!template text="I feel we in this group" start="00:04:01.700" video="mainVideo" id=subtitle]]
+[[!template text="often get caught up" start="00:04:03.050" video="mainVideo" id=subtitle]]
+[[!template text="finding solutions" start="00:04:03.867" video="mainVideo" id=subtitle]]
+[[!template text="in the one particular way" start="00:04:04.533" video="mainVideo" id=subtitle]]
+[[!template text="we want it." start="00:04:05.983" video="mainVideo" id=subtitle]]
+[[!template text="This is where being adaptable" start="00:04:06.783" video="mainVideo" id=subtitle]]
+[[!template text="comes in again." start="00:04:08.467" video="mainVideo" id=subtitle]]
+[[!template text="I need to learn how to mold my tools" start="00:04:09.183" video="mainVideo" id=subtitle]]
+[[!template text="to my workflow," start="00:04:11.000" video="mainVideo" id=subtitle]]
+[[!template text="but also mold my workflow" start="00:04:11.800" video="mainVideo" id=subtitle]]
+[[!template text="to the tools available." start="00:04:13.133" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Window Managers." start="00:04:14.383" video="mainVideo" id=subtitle]]
+[[!template text="Another example of this is window managers." start="00:04:15.683" video="mainVideo" id=subtitle]]
+[[!template text="Although I've probably dabbled" start="00:04:18.050" video="mainVideo" id=subtitle]]
+[[!template text="in window managers or desktop environments" start="00:04:19.367" video="mainVideo" id=subtitle]]
+[[!template text="as much as the next person," start="00:04:21.083" video="mainVideo" id=subtitle]]
+[[!template text="I have usually stuck with DWM." start="00:04:22.583" video="mainVideo" id=subtitle]]
+[[!template text="But DWM doesn't follow" start="00:04:23.817" video="mainVideo" id=subtitle]]
+[[!template text="any of the Emacs concepts:" start="00:04:25.633" video="mainVideo" id=subtitle]]
+[[!template text="it has different keybindings--" start="00:04:26.833" video="mainVideo" id=subtitle]]
+[[!template text="you can sort of do Emacs ones," start="00:04:27.967" video="mainVideo" id=subtitle]]
+[[!template text="no REPL (it's a C program after all)." start="00:04:29.250" video="mainVideo" id=subtitle]]
+[[!template text="But I can still mold it to my workflow." start="00:04:31.283" video="mainVideo" id=subtitle]]
+[[!template text="If I run Emacs as a daemon and a client," start="00:04:33.617" video="mainVideo" id=subtitle]]
+[[!template text="what difference is it?" start="00:04:35.833" video="mainVideo" id=subtitle]]
+[[!template text="My WM is essentially a wrapper" start="00:04:36.700" video="mainVideo" id=subtitle]]
+[[!template text="for Emacs and my other vital programs." start="00:04:37.850" video="mainVideo" id=subtitle]]
+[[!template text="I don't need to make Emacs my WM," start="00:04:39.583" video="mainVideo" id=subtitle]]
+[[!template text="and bring along all the other issues." start="00:04:41.533" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Browsers are a similar conversation." start="00:04:42.900" video="mainVideo" id=subtitle]]
+[[!template text="Initially, I understand the value" start="00:04:45.383" video="mainVideo" id=subtitle]]
+[[!template text="of having my browser in Emacs, but why?" start="00:04:46.883" video="mainVideo" id=subtitle]]
+[[!template text="If a tool exists that works well," start="00:04:48.750" video="mainVideo" id=subtitle]]
+[[!template text="ignoring the UNIX philosophy for a moment," start="00:04:49.883" video="mainVideo" id=subtitle]]
+[[!template text="why should I take the effort to rewrite it?" start="00:04:51.233" video="mainVideo" id=subtitle]]
+[[!template text="Now, don't misinterpret what I'm saying." start="00:04:52.817" video="mainVideo" id=subtitle]]
+[[!template text="If you have a better way to do something:" start="00:04:54.617" video="mainVideo" id=subtitle]]
+[[!template text="you can make it faster, easier to use," start="00:04:56.083" video="mainVideo" id=subtitle]]
+[[!template text="that I understand." start="00:04:57.583" video="mainVideo" id=subtitle]]
+[[!template text="But if I have, say, Nyxt or Firefox?" start="00:04:58.717" video="mainVideo" id=subtitle]]
+[[!template text="Why would I take the effort" start="00:05:00.800" video="mainVideo" id=subtitle]]
+[[!template text="to try and rewrite that into Emacs?" start="00:05:01.517" video="mainVideo" id=subtitle]]
+[[!template text="Instead, this is a scenario" start="00:05:02.750" video="mainVideo" id=subtitle]]
+[[!template text="where using a different tool" start="00:05:04.267" video="mainVideo" id=subtitle]]
+[[!template text="alongside Emacs might be better." start="00:05:05.217" video="mainVideo" id=subtitle]]
+[[!template text="There's a talk later on in the conference" start="00:05:06.567" video="mainVideo" id=subtitle]]
+[[!template text="about that from someone else." start="00:05:08.350" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Vim. Even vim, jokingly," start="00:05:09.300" video="mainVideo" id=subtitle]]
+[[!template text="is the enemy of our community," start="00:05:12.017" video="mainVideo" id=subtitle]]
+[[!template text="but it's a good tool." start="00:05:13.500" video="mainVideo" id=subtitle]]
+[[!template text="Sometimes I just don't want to" start="00:05:15.383" video="mainVideo" id=subtitle]]
+[[!template text="run Emacs as a daemon with evil-mode" start="00:05:16.667" video="mainVideo" id=subtitle]]
+[[!template text="and I just want to quickly do something." start="00:05:17.983" video="mainVideo" id=subtitle]]
+[[!template text="And most people come from" start="00:05:19.883" video="mainVideo" id=subtitle]]
+[[!template text="a power user terminal background," start="00:05:21.267" video="mainVideo" id=subtitle]]
+[[!template text="or at least I would assume s,." start="00:05:22.733" video="mainVideo" id=subtitle]]
+[[!template text="and those I have spoken with." start="00:05:24.167" video="mainVideo" id=subtitle]]
+[[!template text="If I need to quickly edit something," start="00:05:25.900" video="mainVideo" id=subtitle]]
+[[!template text="it might benefit me to" start="00:05:27.150" video="mainVideo" id=subtitle]]
+[[!template text="just run a quick vim ./file" start="00:05:27.840" video="mainVideo" id=subtitle]]
+[[!template text="in the terminal." start="00:05:29.917" video="mainVideo" id=subtitle]]
+[[!template text="I often have terminals open anyway" start="00:05:30.333" video="mainVideo" id=subtitle]]
+[[!template text="due to the graphic acceleration" start="00:05:32.183" video="mainVideo" id=subtitle]]
+[[!template text="from things like Alacritty." start="00:05:33.417" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Speaking of terminals," start="00:05:34.639" video="mainVideo" id=subtitle]]
+[[!template text="this is the main tool I don't use in Emacs." start="00:05:36.167" video="mainVideo" id=subtitle]]
+[[!template text="While vterm might be nice," start="00:05:38.383" video="mainVideo" id=subtitle]]
+[[!template text="I often want to use a TUI tool." start="00:05:39.850" video="mainVideo" id=subtitle]]
+[[!template text="I most often write programs in C or Rust" start="00:05:41.433" video="mainVideo" id=subtitle]]
+[[!template text="due to those being my main languages" start="00:05:43.667" video="mainVideo" id=subtitle]]
+[[!template text="that I use professionally." start="00:05:45.200" video="mainVideo" id=subtitle]]
+[[!template text="If I can write a faster C or Rust program" start="00:05:46.050" video="mainVideo" id=subtitle]]
+[[!template text="in half the time it'll take for me" start="00:05:48.250" video="mainVideo" id=subtitle]]
+[[!template text="to write a slower Elisp one," start="00:05:49.400" video="mainVideo" id=subtitle]]
+[[!template text="I might prefer to do just that." start="00:05:50.483" video="mainVideo" id=subtitle]]
+[[!template text="Especially in the case of a TUI program," start="00:05:52.283" video="mainVideo" id=subtitle]]
+[[!template text="Alacritty helps me develop them faster" start="00:05:53.633" video="mainVideo" id=subtitle]]
+[[!template text="but also run them." start="00:05:55.517" video="mainVideo" id=subtitle]]
+[[!template text="So if you've been using systemd" start="00:05:56.639" video="mainVideo" id=subtitle]]
+[[!template text="or running commands in the terminal for years," start="00:05:58.850" video="mainVideo" id=subtitle]]
+[[!template text="it might take more effort to learn" start="00:06:00.500" video="mainVideo" id=subtitle]]
+[[!template text="the way to do it in an Emacs frontend" start="00:06:01.680" video="mainVideo" id=subtitle]]
+[[!template text="than in the terminal." start="00:06:03.680" video="mainVideo" id=subtitle]]
+[[!template text="And remember, most shells come with" start="00:06:04.933" video="mainVideo" id=subtitle]]
+[[!template text="Emacs key bindings by default" start="00:06:07.117" video="mainVideo" id=subtitle]]
+[[!template text="and macOS, for example," start="00:06:07.567" video="mainVideo" id=subtitle]]
+[[!template text="can use Emacs keybindings in most places" start="00:06:09.350" video="mainVideo" id=subtitle]]
+[[!template text="including browsers." start="00:06:11.200" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Do what helps you most," start="00:06:12.233" video="mainVideo" id=subtitle]]
+[[!template text="not what a philosophy or group tells you to do." start="00:06:13.567" video="mainVideo" id=subtitle]]
+[[!template text="I hope this illustrated some ways" start="00:06:16.000" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs is a tool in your belt," start="00:06:17.467" video="mainVideo" id=subtitle]]
+[[!template text="but not the belt itself." start="00:06:18.750" video="mainVideo" id=subtitle]]
+[[!template text="Do what works best for you," start="00:06:19.733" video="mainVideo" id=subtitle]]
+[[!template text="as being the most efficient" start="00:06:21.520" video="mainVideo" id=subtitle]]
+[[!template text="doesn't always grant the best results." start="00:06:22.717" video="mainVideo" id=subtitle]]
+[[!template text="If you're used to doing something one way," start="00:06:24.233" video="mainVideo" id=subtitle]]
+[[!template text="consider still doing it that way" start="00:06:25.983" video="mainVideo" id=subtitle]]
+[[!template text="while learning new skills" start="00:06:27.183" video="mainVideo" id=subtitle]]
+[[!template text="and being adaptable. And after all," start="00:06:28.117" video="mainVideo" id=subtitle]]
+[[!template text="this is an Emacs conference" start="00:06:29.250" video="mainVideo" id=subtitle]]
+[[!template text="so maybe consider learning a tool" start="00:06:30.683" video="mainVideo" id=subtitle]]
+[[!template text="for both Emacs and the terminal," start="00:06:32.150" video="mainVideo" id=subtitle]]
+[[!template text="and then you might be" start="00:06:33.517" video="mainVideo" id=subtitle]]
+[[!template text="just a little bit more flexible" start="00:06:34.367" video="mainVideo" id=subtitle]]
+[[!template text="in the future." start="00:06:35.440" video="mainVideo" id=subtitle]]
+[[!template text="Thank you for listening to my talk today." start="00:06:36.720" video="mainVideo" id=subtitle]]
diff --git a/2021/cfp.md b/2021/cfp.md
new file mode 100644
index 00000000..0b0a9acd
--- /dev/null
+++ b/2021/cfp.md
@@ -0,0 +1,229 @@
+[[!meta title="Call for Proposals"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua, David Bremner<br />Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier, Sebastian Crane"]]
+<!-- This file is exported from cfp.org, so don't modify it directly. --->
+
+
+# Call for Proposals
+
+[EmacsConf 2021](https://emacsconf.org/2021/) will be a virtual conference on **November 27 and 28,
+2021 (Sat-Sun)**. If you'd like to present at the conference, please
+[submit your proposal](https://emacsconf.org/2021/cfp/) by **September 30, 2021**.
+
+EmacsConf 2021 is about the joy of [Emacs](https://www.gnu.org/software/emacs/) and Emacs Lisp. Come share
+your experiments and adventures with the Emacs text editor / operating
+system / way of life! We welcome speakers of **all backgrounds** and
+**all levels of experience**, including newcomers giving their first
+talk. What have you found exciting about Emacs lately? What do you
+wish someone had told you when you were starting out? What part of
+your workflow might inspire someone to get into Emacs or go deeper?
+
+A great way to get started with writing a proposal is to start by
+exploring the programs from previous years: [2020](https://emacsconf.org/2020/schedule/), [2019](https://emacsconf.org/2019/schedule/), [2015](https://emacsconf.org/2015/schedule/), [2013](https://emacsconf.org/2013/#program).
+You might also find some neat ideas on the [ideas](https://emacsconf.org/2021/ideas/) page. Feel free to
+add yours there too! If you're still not sure, come by our IRC
+channel `#emacsconf` on `irc.libera.chat` and say hi. You can join
+the chat using [your favourite IRC client](ircs://irc.libera.chat:6697/emacsconf), or by visiting
+[chat.emacsconf.org](https://chat.emacsconf.org) in your web browser.
+
+All kinds of people use Emacs for all kinds of things. We'd love it
+if EmacsConf 2021 could highlight interesting perspectives and reflect
+the diversity of our community. If you know someone who might have a
+good idea for a talk, please reach out to them and encourage them to
+submit a proposal. Many people (especially from underrepresented
+groups such as women, people of colour, non-developers, etc.) might
+not consider themselves expert enough to share their thoughts. If you
+let them know that you value their knowledge and maybe even suggest
+something that you think others would like to hear more about, they
+may realize that they have something worth sharing and that we would
+love to hear from them.
+
+
+# Important dates
+
+For EmacsConf 2021, we are planning for 9am to 5pm Toronto/EST
+(2pm-10pm UTC) on November 27 and 28. Depending on people's
+availability, it might be two half-days.
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">CFP opens</td>
+<td class="org-left">August 5, 2021</td>
+</tr>
+
+
+<tr>
+<td class="org-left">CFP closes</td>
+<td class="org-left">September 30, 2021</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Speaker notifications</td>
+<td class="org-left">October 15, 2021</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Schedule published</td>
+<td class="org-left">October 31, 2021</td>
+</tr>
+
+
+<tr>
+<td class="org-left">EmacsConf 2021!</td>
+<td class="org-left">November 27 and 28, 2021</td>
+</tr>
+</tbody>
+</table>
+
+If you are not available during the conference itself but you have a
+neat idea that you'd like to share, please propose it anyway! You can
+always handle questions after the conference, and we might even be
+able to coordinate with other Emacs meetups for regional events (if
+you're an Emacs meetup organizer and would like to make this happen
+let's [get in touch](https://emacsconf.org/contact/)!).
+
+Please note that although we will try our best to stick to the above
+dates in the coming months, given the current state of the world, we
+may have to move things around a bit in case of unforeseen events.
+Thank you for your patience and understanding.
+
+<a name="formats"></a>
+
+
+# Talk formats
+
+We'd like EmacsConf 2021 to inspire lots of different people to
+explore lots of different things in Emacs. We hope to put together a
+stream of quick ideas followed by lots of conversation over IRC and/or
+Q&A sessions, with occasional deep dives into topics that many people
+might find interesting or useful.
+
+As you think about your talk, consider what you can share in:
+
+- **Up to 10 minutes total:** What is the core idea? What do you want
+ people to do or remember? You can show just enough to get people
+ interested and then point them to where they can learn more
+ afterwards. You can answer questions over IRC, the pad, or the
+ wiki, and there's no limit to how long that conversation can go.
+
+- **Up to 20 minutes total:** How would you flesh out some of the points
+ from your 5-10 minute presentation? How can you show the pieces
+ working together?
+
+- **Up to 40 minutes total:** What would benefit from a deep dive?
+ How do you keep it engaging?
+
+When writing your proposal, please write an outline of what you plan
+to talk about if you have 5-10 minutes. If you'd like to propose a
+longer talk, outline what you might include if you had more time to
+present (up to 40 minutes, including Q&A).
+
+Here's an example for a potentially 40-minute talk:
+
+- 5-10 minutes: quick demo of the abc package working together with
+ xyz package.
+- 20 minutes: same as above, with some customization options to
+ accommodate a different workflow.
+- 40 minutes: all of the above, including modifying the behaviour of
+ the package in order to add something new.
+
+This flexibility would help us in devising the conference schedule so
+that as many people as possible could get a chance to present their
+ideas, while still allowing for featuring longer deep dive talks.
+
+Other session formats such as tutorials, workshops, and hangouts are
+welcome as well, in case you would find those other formats preferable
+to a traditional talk format. If you're interested in these or other
+session types, please let us know [publicly](https://lists.gnu.org/mailman/listinfo/emacsconf-org) or [privately](https://lists.gnu.org/mailman/listinfo/emacsconf-org-private). We'll be
+happy to work something out with you.
+
+
+# Office hours
+
+We're aware that it can be intimidating to submit a proposal to a
+conference, so we thought we'd try to help! This year, we're opening
+up the doors of our virtual offices for you to come talk to us about
+your proposals with hopes of helping you with any hurdles you may be
+facing with preparing your proposal.
+
+We'd like to publish a schedule of availabilities of volunteers for
+holding office hours. Currently these volunteers consist of some of
+the EmacsConf organizers, but we'd love to have the help of other
+members of the Emacs community as well. If you are a more experienced
+Emacs user and would like to help with this, please [get in touch](https://emacsconf.org/contact/)!
+
+You can find the schedule for upcoming office hours (along with other
+Emacs events) at <https://www.emacswiki.org/emacs/Usergroups> . You can
+also get an iCal feed at
+<https://emacslife.com/calendar/emacs-calendar.ics> or get HTML/Org
+files in various timezones at <https://emacslife.com/calendar/> . When
+in session, the office hours will be held in this BigBlueButton room:
+<https://bbb.emacsverse.org/b/ban-qye-fd1-5kw>.
+
+
+# Submitting your proposal
+
+Once you're ready to submit your proposal, the [submit](https://emacsconf.org/2021/submit/) page has the
+instructions on how to submit your talk.
+
+We use an anonymized submission process to reduce bias and encourage
+contribution. Identifying information will be removed from
+submissions by a conference organizer who will not participate in
+talk selection. The anonymized submissions will then be reviewed by
+a selection committee.
+
+If your talk is approved, we'd love it if you could help us make sure
+the conference runs smoothly. After we email you with the time
+allotted for your talk, we'll ask you to
+
+- prepare a prerecording of your talk, or record it with our help if
+ that'd be easier for you; and
+- schedule a short tech-check if you'd like to be able to answer
+ questions in a live session.
+
+Don't forget to subscribe to our main mailing list, [emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss),
+for discussion and announcements about the EmacsConf conference.
+
+We look forward to your ideas and submissions!
+
+
+# Getting involved
+
+If you would like to help with the conference (planning the sessions,
+reviewing proposals, helping with infrastructure, making sessions more
+accessible, editing video transcripts, etc.), see our [planning](https://emacsconf.org/2021/planning/) page
+and come say hi to us at `#emacsconf` on `irc.libera.chat`.
+
+In addition to the [emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss) list, feel free to subscribe to
+[emacsconf-org](https://lists.gnu.org/mailman/listinfo/emacsconf-org) as well, for discussions related to organizing the
+conference by the EmacsConf organizers and volunteers.
+
+We'd really appreciate your help in making EmacsConf 2021 the best one
+so far!
+
+
+# Commitment to freedom
+
+We remain fully committed to freedom, and we will continue
+using our infrastructure and streaming setup consisting entirely
+of [free software](https://www.gnu.org/philosophy/free-sw.html), much like previous EmacsConf conferences.
+An article describing our infrastructure and tools is underway,
+and will be announced on the emacsconf-discuss list when published.
+
+[emacs]: https://www.gnu.org/software/emacs/
+[freesw]: https://www.gnu.org/philosophy/free-sw.html
+[libera-emacsconf]: ircs://irc.libera.chat:6697/emacsconf
+[chat]: https://chat.emacsconf.org
+[emacsconf-discuss]: https://lists.gnu.org/mailman/listinfo/emacsconf-discuss
+[emacsconf-org]: https://lists.gnu.org/mailman/listinfo/emacsconf-org
+[emacsconf-org-private]: https://lists.gnu.org/mailman/listinfo/emacsconf-org-private
+
diff --git a/2021/cfp.org b/2021/cfp.org
new file mode 100644
index 00000000..8ce99da2
--- /dev/null
+++ b/2021/cfp.org
@@ -0,0 +1,242 @@
+#+title: EmacsConf 2021
+#+subtitle: Online Conference
+#+date: November 27 and 28, 2021
+#+options: author:nil toc:nil
+
+#+begin_export md
+[[!meta title="Call for Proposals"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua, David Bremner<br />Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier, Sebastian Crane"]]
+<!-- This file is exported from cfp.org, so don't modify it directly. --->
+#+end_export
+
+* COMMENT How to export this file :noexport:
+
+As of the time of writing this document (Org mode version 9.3.7), the
+Org links library (=ol.el=) does not yet recognize =ircs= link types,
+and will throw an error if you try to export a file containing them,
+such as this file.
+
+To work around that, you can use something along the lines of the
+Emacs Lisp code below, by either adding it to your init file, or by
+putting the point in the code block and hitting =C-c C-v e= (that is,
+hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to
+evaluate the code, working around the issue only for the current
+session.
+
+#+begin_src emacs-lisp :results silent
+(org-link-set-parameters
+ "ircs"
+ :export
+ (lambda (link description format)
+ "Export an ircs link.
+See `org-link-parameters' for details about LINK, DESCRIPTION and
+FORMAT."
+ (let ((desc (or description link)))
+ (pcase format
+ (`html (format "<a href=\"ircs:%s\">%s</a>" link desc))
+ (`md (format "[%s](ircs:%s)" desc link))
+ (_ nil)))))
+#+end_src
+
+[[elisp:(org-md-export-to-markdown)][Export this file to Markdown]]
+
+* Call for Proposals
+
+[[https://emacsconf.org/2021/][EmacsConf 2021]] will be a virtual conference on *November 27 and 28,
+2021 (Sat-Sun)*. If you'd like to present at the conference, please
+[[https://emacsconf.org/2021/cfp/][submit your proposal]] by *September 30, 2021*.
+
+EmacsConf 2021 is about the joy of [[https://www.gnu.org/software/emacs/][Emacs]] and Emacs Lisp. Come share
+your experiments and adventures with the Emacs text editor / operating
+system / way of life! We welcome speakers of *all backgrounds* and
+*all levels of experience*, including newcomers giving their first
+talk. What have you found exciting about Emacs lately? What do you
+wish someone had told you when you were starting out? What part of
+your workflow might inspire someone to get into Emacs or go deeper?
+
+A great way to get started with writing a proposal is to start by
+exploring the programs from previous years: [[https://emacsconf.org/2020/schedule/][2020]], [[https://emacsconf.org/2019/schedule/][2019]], [[https://emacsconf.org/2015/schedule/][2015]], [[https://emacsconf.org/2013/#program][2013]].
+You might also find some neat ideas on the [[https://emacsconf.org/2021/ideas/][ideas]] page. Feel free to
+add yours there too! If you're still not sure, come by our IRC
+channel =#emacsconf= on =irc.libera.chat= and say hi. You can join
+the chat using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by visiting
+[[https://chat.emacsconf.org][chat.emacsconf.org]] in your web browser.
+
+All kinds of people use Emacs for all kinds of things. We'd love it
+if EmacsConf 2021 could highlight interesting perspectives and reflect
+the diversity of our community. If you know someone who might have a
+good idea for a talk, please reach out to them and encourage them to
+submit a proposal. Many people (especially from underrepresented
+groups such as women, people of colour, non-developers, etc.) might
+not consider themselves expert enough to share their thoughts. If you
+let them know that you value their knowledge and maybe even suggest
+something that you think others would like to hear more about, they
+may realize that they have something worth sharing and that we would
+love to hear from them.
+
+* Important dates
+
+For EmacsConf 2021, we are planning for 9am to 5pm Toronto/EST
+(2pm-10pm UTC) on November 27 and 28. Depending on people's
+availability, it might be two half-days.
+
+| CFP opens | August 5, 2021 |
+| CFP closes | September 30, 2021 |
+| Speaker notifications | October 15, 2021 |
+| Schedule published | October 31, 2021 |
+| EmacsConf 2021! | November 27 and 28, 2021 |
+
+If you are not available during the conference itself but you have a
+neat idea that you'd like to share, please propose it anyway! You can
+always handle questions after the conference, and we might even be
+able to coordinate with other Emacs meetups for regional events (if
+you're an Emacs meetup organizer and would like to make this happen
+let's [[https://emacsconf.org/contact/][get in touch]]!).
+
+Please note that although we will try our best to stick to the above
+dates in the coming months, given the current state of the world, we
+may have to move things around a bit in case of unforeseen events.
+Thank you for your patience and understanding.
+
+#+md: <a name="formats"></a>
+* Talk formats
+
+We'd like EmacsConf 2021 to inspire lots of different people to
+explore lots of different things in Emacs. We hope to put together a
+stream of quick ideas followed by lots of conversation over IRC and/or
+Q&A sessions, with occasional deep dives into topics that many people
+might find interesting or useful.
+
+As you think about your talk, consider what you can share in:
+
+- *Up to 10 minutes total:* What is the core idea? What do you want
+ people to do or remember? You can show just enough to get people
+ interested and then point them to where they can learn more
+ afterwards. You can answer questions over IRC, the pad, or the
+ wiki, and there's no limit to how long that conversation can go.
+
+- *Up to 20 minutes total:* How would you flesh out some of the points
+ from your 5-10 minute presentation? How can you show the pieces
+ working together?
+
+- *Up to 40 minutes total:* What would benefit from a deep dive?
+ How do you keep it engaging?
+
+When writing your proposal, please write an outline of what you plan
+to talk about if you have 5-10 minutes. If you'd like to propose a
+longer talk, outline what you might include if you had more time to
+present (up to 40 minutes, including Q&A).
+
+Here's an example for a potentially 40-minute talk:
+
+- 5-10 minutes: quick demo of the abc package working together with
+ xyz package.
+- 20 minutes: same as above, with some customization options to
+ accommodate a different workflow.
+- 40 minutes: all of the above, including modifying the behaviour of
+ the package in order to add something new.
+
+This flexibility would help us in devising the conference schedule so
+that as many people as possible could get a chance to present their
+ideas, while still allowing for featuring longer deep dive talks.
+
+Other session formats such as tutorials, workshops, and hangouts are
+welcome as well, in case you would find those other formats preferable
+to a traditional talk format. If you're interested in these or other
+session types, please let us know [[https://lists.gnu.org/mailman/listinfo/emacsconf-org][publicly]] or [[https://lists.gnu.org/mailman/listinfo/emacsconf-org-private][privately]]. We'll be
+happy to work something out with you.
+
+* Office hours
+
+We're aware that it can be intimidating to submit a proposal to a
+conference, so we thought we'd try to help! This year, we're opening
+up the doors of our virtual offices for you to come talk to us about
+your proposals with hopes of helping you with any hurdles you may be
+facing with preparing your proposal.
+
+We'd like to publish a schedule of availabilities of volunteers for
+holding office hours. Currently these volunteers consist of some of
+the EmacsConf organizers, but we'd love to have the help of other
+members of the Emacs community as well. If you are a more experienced
+Emacs user and would like to help with this, please [[https://emacsconf.org/contact/][get in touch]]!
+
+You can find the schedule for upcoming office hours (along with other
+Emacs events) at https://www.emacswiki.org/emacs/Usergroups . You can
+also get an iCal feed at
+https://emacslife.com/calendar/emacs-calendar.ics or get HTML/Org
+files in various timezones at https://emacslife.com/calendar/ . When
+in session, the office hours will be held in this BigBlueButton room:
+https://bbb.emacsverse.org/b/ban-qye-fd1-5kw.
+
+* Submitting your proposal
+
+Once you're ready to submit your proposal, the [[https://emacsconf.org/2021/submit/][submit]] page has the
+instructions on how to submit your talk.
+
+We use an anonymized submission process to reduce bias and encourage
+contribution. Identifying information will be removed from
+submissions by a conference organizer who will not participate in
+talk selection. The anonymized submissions will then be reviewed by
+a selection committee.
+
+If your talk is approved, we'd love it if you could help us make sure
+the conference runs smoothly. After we email you with the time
+allotted for your talk, we'll ask you to
+
+- prepare a prerecording of your talk, or record it with our help if
+ that'd be easier for you; and
+- schedule a short tech-check if you'd like to be able to answer
+ questions in a live session.
+
+Don't forget to subscribe to our main mailing list, [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]],
+for discussion and announcements about the EmacsConf conference.
+
+We look forward to your ideas and submissions!
+
+* Getting involved
+
+If you would like to help with the conference (planning the sessions,
+reviewing proposals, helping with infrastructure, making sessions more
+accessible, editing video transcripts, etc.), see our [[https://emacsconf.org/2021/planning/][planning]] page
+and come say hi to us at =#emacsconf= on =irc.libera.chat=.
+
+In addition to the [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]] list, feel free to subscribe to
+[[https://lists.gnu.org/mailman/listinfo/emacsconf-org][emacsconf-org]] as well, for discussions related to organizing the
+conference by the EmacsConf organizers and volunteers.
+
+We'd really appreciate your help in making EmacsConf 2021 the best one
+so far!
+
+* Commitment to freedom
+
+We remain fully committed to freedom, and we will continue
+using our infrastructure and streaming setup consisting entirely
+of [[https://www.gnu.org/philosophy/free-sw.html][free software]], much like previous EmacsConf conferences.
+An article describing our infrastructure and tools is underway,
+and will be announced on the emacsconf-discuss list when published.
+
+#+begin_export md
+[emacs]: https://www.gnu.org/software/emacs/
+[freesw]: https://www.gnu.org/philosophy/free-sw.html
+[libera-emacsconf]: ircs://irc.libera.chat:6697/emacsconf
+[chat]: https://chat.emacsconf.org
+[emacsconf-discuss]: https://lists.gnu.org/mailman/listinfo/emacsconf-discuss
+[emacsconf-org]: https://lists.gnu.org/mailman/listinfo/emacsconf-org
+[emacsconf-org-private]: https://lists.gnu.org/mailman/listinfo/emacsconf-org-private
+#+end_export
+
+* COMMENT Copyright & License
+
+Copyright (c) 2020 Amin Bandali, Sacha Chua, David Bremner
+Copyright (c) 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane
+
+The EmacsConf 2021 Call for Proposals is part of the EmacsConf wiki,
+and is dual-licensed under the terms of the Creative Commons
+Attribution-ShareAlike 4.0 International Public License; and the GNU
+General Public License as published by the Free Software Foundation,
+either version 3 of the License, or (at your option) any later
+version.
+
+A copy of these two licenses is available on the EmacsConf wiki, in
+the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
diff --git a/2021/contribute.md b/2021/contribute.md
new file mode 100644
index 00000000..b8d489fa
--- /dev/null
+++ b/2021/contribute.md
@@ -0,0 +1,117 @@
+[[!meta title="Contribute to EmacsConf 2021"]]
+[[!meta copyright="Copyright &copy; 2021 Sacha Chua, Leo Vivier"]]
+
+[[!toc]]
+
+Want to help with EmacsConf 2021? Here's how you can make it even better!
+
+# After the conference
+
+Excited about EmacsConf 2021? Want to give back? We could still use your help!
+Here are some things you can do to help out:
+
+- Learn how to edit this wiki and then add new="1" to the caption
+ directives in `2021/captions/*.md` in order to break them up into
+ paragraphs.
+- [[Add chapter markers|help_with_chapter_markers]]
+- [[Add or edit captions|help_with_main_captions]]
+- Improve the HTML, CSS, and JS used on the wiki pages
+- Think of ways to make things even better
+ - How can we have multiple streams?
+ - How can we improve the experience for speakers and participants?
+ - How can we experiment with other ways to chat?
+ - How can we get the tech stack to be more reliable?
+- ... and other things you can think of!
+
+To volunteer, please
+[e-mail us at emacsconf-submit@gnu.org a quick note to say hi](mailto:emacsconf-submit@gnu.org?subject=Volunteering&body=I+want+to+help!) or check out the [volunteer pad](https://etherpad.wikimedia.org/p/emacsconf-2021-volunteers). We'd love to hear from you!
+
+<a name="chapter-markers"></a>
+# Add chapter markers
+
+See [[Help_with_chapter_markers]] for instructions and a list of pages that need help.
+
+<a name="update-discussion"></a>
+# Update the discussion section with answers or timestamps
+
+You can add answers or references to the videos to the discussion
+section. That way, people with the same question can easily find the
+answer.
+
+<a name="edit-captions"></a>
+# Edit and review captions
+
+See [[Help_with_main_captions]] for instructions and a list of pages that need help.
+
+# Tech-check speakers
+
+Many sessions will have live question and answer sessions via BigBlueButton
+(BBB). Everything works more smoothly when the speakers are all set up and
+ready to go: their audio works, their screen can be shared properly, and so
+on. You can help by testing their setup beforehand.
+
+You can test your own connection at <https://test.bigbluebutton.org>. If that
+works for you, you can be a tech-check volunteer! You can add yourself to the
+table on our [Prepare](https://emacsconf.org/2021/prepare/) page and let us
+know what your availability is so that we may match you up with speakers who
+want to doublecheck their setup before the conference. All you'd need to do is
+to go through a checklist with them.
+
+Here are some notes on the process:
+
+- Can you hear me? Can I hear you?
+- Explain process
+- Test audio, webcam, screensharing
+ - Encourage webcam for Q&A, although make it clear that it's totally optional
+ - Audio: System audio will generally not be picked up by BBB unless
+ there's a virtual loopback device, so music demos and other things
+ that use system audio will need to be prerecorded
+ - Multi-monitor setups might not be handled well by BBB; share
+ window instead of desktop
+ - Difficult to show webcam and shared screen at the same time
+ because BBB makes the shared screen too small. If the speaker is
+ interested, consider using a webcam app (Windows: their webcam's
+ camera app, Linux: Cheese, set to Always on Top)
+- Check if comfortable checking into IRC: #emacsconf-org channel via
+ https://chat.emacsconf.org or their favorite IRC client (libera.chat
+ network)
+- Check if the speaker is comfortable finding their section in the
+ [test Etherpad](https://etherpad.wikimedia.org/p/emacsconf-2021-test),
+ typing in text, etc.
+- Write down IRC nick, preferred public contact info, name
+ pronunciation, and pronouns for inclusion in the public wiki if not
+ already on their talk page
+
+# Run alternate streams
+
+Do you have a pretty good network connection and a computer capable of
+livestreaming? Consider becoming an alternate streamer! You can pick
+one or more of your favorite sessions from the [[schedule]] and get
+set up for doing an extended stream, allowing more time for Q&A and
+live demonstrations.
+
+# Capture questions and answers
+
+During the conference, people will be sending questions via Etherpad
+and IRC, and speakers might answer live or via Etherpad or IRC. As a
+volunteer, you can help make sure those questions and answers don't
+get lost. It would be great to get as many questions as possible
+written down in the Etherpad, along with their answers. This means
+copying questions and answers from IRC, typing in answers given live,
+copying questions from the pad into IRC if that's where the speaker is
+paying attention, and so on. It's a bit of a scramble, but it keeps
+the conversation going even after the event.
+
+# Pages tagged `help`
+
+[[!inline pages="tagged(help) and !templates/*" archive="yes" limit="0" trail="yes"]]
+
+# Volunteer
+
+Thought of another way to help? Sure, suggest away.
+
+To volunteer, please
+[e-mail us at emacsconf-submit@gnu.org a quick note to say hi](mailto:emacsconf-submit@gnu.org?subject=Volunteering&body=I+want+to+help!).
+We'd love to hear from you!
+
+Thanks for contributing to EmacsConf 2021 or future EmacsConfs!
diff --git a/2021/emacsconf-2021-cfp-sacha.org b/2021/emacsconf-2021-cfp-sacha.org
new file mode 100644
index 00000000..80af0d80
--- /dev/null
+++ b/2021/emacsconf-2021-cfp-sacha.org
@@ -0,0 +1,187 @@
+#+title: EmacsConf 2021
+#+subtitle: Online Conference
+#+date: November 27 and 28, 2021
+#+options: author:nil
+
+- DRAFT: 2021-08-02:
+ - Reduced extended talk to 40 minutes
+ - Getting people to submit outlines of shorter talks if they want
+ to propose longer ones ;)
+
+# Copyright (C) 2021 Amin Bandali, Sacha Chua, David Bremner
+
+[[https://emacsconf.org/2021/][EmacsConf 2021]] will be a virtual conference on *November 27 and 28,
+2021 (Sat-Sun)*. If you'd like to present at the conference, please
+[[https://emacsconf.org/2021/cfp/][submit your proposal]] by *September 30, 2021*.
+
+EmacsConf 2021 is about the joy of [[https://www.gnu.org/software/emacs/][Emacs]] and Emacs Lisp. Come share
+your experiments and adventures with the Emacs text editor / way of
+life! We welcome speakers of *all backgrounds* and *all levels of
+experience*, including newcomers giving their first talk. What have
+you found exciting about Emacs lately? What do you wish someone had
+told you when you were starting out or learning more? What part of
+your workflow might inspire someone to get into Emacs or go deeper?
+
+A great way to get started with writing a proposal is to start by
+exploring the programs from previous years: [[https://emacsconf.org/2020/schedule/][2020]], [[https://emacsconf.org/2019/schedule/][2019]], [[https://emacsconf.org/2015/schedule/][2015]], [[https://emacsconf.org/2013/#program][2013]].
+You might also find some neat ideas on the [[https://emacsconf.org/2021/ideas/][ideas]] page. Feel free to
+add yours there too! If you're still not sure, come by our IRC
+channel =#emacsconf= on =irc.libera.chat= and say hi. You can join
+the chat using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by pointing your web
+browser to [[https://chat.emacsconf.org][chat.emacsconf.org]] which runs our self-hosted instance of
+[[https://thelounge.chat][The Lounge]] free software web IRC client.
+
+All kinds of people use Emacs for all kinds of things. We would love
+it if EmacsConf 2021 could highlight interesting perspectives and
+reflect the diversity of our community. If you know someone who might
+have a good idea for a talk, please reach out to them and encourage
+them to submit a proposal. Many people (especially from
+underrepresented groups such as women, people of colour, and
+non-developers) might not consider themselves expert enough to share
+their thoughts. If you let them know that you value their knowledge
+and maybe even suggest something that you think others would like to
+hear more about, they may realize that they have something worth
+sharing and that we would love to hear from them.
+
+* Important dates
+
+We're planning for 9am to 5pm Toronto/EST (2pm-10pm UTC). Depending
+on people's availability, it might be two half-days.
+
+| CFP opens | August 2, 2021 |
+| CFP closes | September 30, 2021 |
+| Speaker notifications | October 15, 2021 |
+| Schedule published | October 31, 2021 |
+| EmacsConf 2021! | November 27 and 28, 2021 |
+
+If you are not available during the conference itself but you have a
+neat idea that you'd like to share, please propose it anyway! You can
+always handle questions after the conference, and we might even be
+able to coordinate with other Emacs meetups for regional events.
+
+Please note that although we will try our best to stick to the above
+dates in the coming months, given the current state of the world, we
+may have to move things around a bit in case of unforeseen events.
+Thank you for your patience and understanding.
+
+* Talk formats
+
+We'd like EmacsConf 2021 to inspire lots of different people to
+explore lots of different things in Emacs. We hope to put together a
+stream of quick ideas followed by lots of conversation over IRC or a
+Q&A session, with occasional deep dives into something that many
+people might find interesting or useful.
+
+As you think about your talk, consider what you can share in:
+
+- *Up to 10 minutes total:* What's the core idea? What do you want people
+ to do or remember? You can show just enough to get people
+ interested and then point them to where they can learn more
+ afterwards. You can answer questions over IRC, the pad, or the wiki,
+ and there's no limit to how long that conversation can go.
+
+- *Up to 20 minutes total:* How would you flesh out some of the points from
+ your 5-10 minute presentation? How can you show the pieces working
+ together?
+
+- *Up to 40 minutes total:* What would benefit from a deep dive? How do you
+ keep it engaging?
+
+When you write your proposal, outline what you plan to talk about if
+you have 5-10 minutes. If you would like to propose a longer talk,
+outline what you might include for a 5-10 min talk, a 20-minute talk,
+and optionally a 40-minute talk.
+
+Example for a 40-minute talk:
+
+- 5-10 minutes: quick demo of the abc package working together with xyz package
+- 20 minutes: + some customization options to accommodate a different workflow
+- 40 minutes: + modifying the behavior of the package in order to add something new
+
+Other session formats such as tutorials, workshops, and hangouts are
+welcome as well, especially considering all that is going on around
+the world, in case you would find those other formats preferable to a
+traditional talk format. If you are interested in these or other
+session types, please get in touch with us publicly or privately. We
+will be happy to work something out with you.
+
+* Submitting your proposal
+
+Once you're ready to submit your proposal, the [[https://emacsconf.org/2021/submit/][submit]] page has the
+instructions on how to submit your talk.
+
+We use an anonymized submission process to reduce bias and encourage
+contribution. Identifying information will be removed from
+submissions by a conference organizer who will not participate in talk
+selection. The anonymized submissions will then be reviewed by a
+selection committee.
+
+If your talk is approved, we'd love it if you could help us make sure
+the conference runs smoothly. After we e-mail you with the time
+alloted for your talk, we'll ask you to:
+
+- prepare a prerecording of your talk, or record it with our help if
+ that's easier for you
+- schedule a short tech-check if you'd like to answer questions in a
+ live session.
+
+* Getting involved
+
+If you would like to help with the conference (planning the sessions,
+reviewing proposals, helping with infrastructure, making sessions more
+accessible, editing video transcripts, etc.), see our [[https://emacsconf.org/2021/planning/][planning]] page
+and come say hi to us at =#emacsconf= on =irc.libera.chat=.
+
+Subscribe to our mailing list, [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]], for discussions and
+announcements about the EmacsConf conference.
+
+We look forward to your ideas and submissions!
+
+* Commitment to freedom
+
+We remain fully committed to freedom, and we will continue
+using our infrastructure and streaming setup consisting entirely of
+[[https://www.gnu.org/philosophy/free-sw.html][free software]], much like previous EmacsConf conferences.
+
+* COMMENT Copyright & License
+
+Copyright (C) 2020, 2021 Amin Bandali, Sacha Chua, David Bremner
+
+The EmacsConf 2021 Call for Proposals is part of the EmacsConf wiki,
+and is dual-licensed under the terms of the Creative Commons
+Attribution-ShareAlike 4.0 International Public License; and the GNU
+General Public License as published by the Free Software Foundation,
+either version 3 of the License, or (at your option) any later
+version.
+
+A copy of these two licenses is available on the EmacsConf wiki, in
+the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
+
+* COMMENT How to export this file
+
+As of the time of writing this document (Org mode version 9.3.7), the
+Org links library (=ol.el=) does not yet recognize =ircs= link types,
+and will throw an error if you try to export a file containing them,
+such as this file.
+
+To work around that, you can use something along the lines of the
+Emacs Lisp code below, by either adding it to your init file, or by
+putting the point in the code block and hitting =C-c C-v e= (that is,
+hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to
+evaluate the code, working around the issue only for the current
+session.
+
+#+begin_src emacs-lisp :results silent
+(org-link-set-parameters
+ "ircs"
+ :export
+ (lambda (link description format)
+ "Export an ircs link.
+See `org-link-parameters' for details about LINK, DESCRIPTION and
+FORMAT."
+ (let ((desc (or description link)))
+ (pcase format
+ (`html (format "<a href=\"ircs:%s\">%s</a>" link desc))
+ (`md (format "[%s](ircs:%s)" desc link))
+ (_ nil)))))
+#+end_src
diff --git a/2021/emacsconf-pentabarf.xml b/2021/emacsconf-pentabarf.xml
new file mode 100644
index 00000000..726f667f
--- /dev/null
+++ b/2021/emacsconf-pentabarf.xml
@@ -0,0 +1,107 @@
+<schedule><generator name="EmacsConf" version="0.1"></generator><version>20211206205327</version><conference><acronym>emacsconf2021</acronym><title>EmacsConf 2021</title><start>2021-11-27</start><end>2021-11-28</end><time_zone_name>America/Toronto</time_zone_name><base_url>https://emacsconf.org/2021</base_url></conference><day date="2021-11-27" start="2021-11-27T14:00:00Z" end="2021-11-27T22:05:00Z" index="1"><room name="Main"><event id="01" guid="dc07efcd-6d79-cfd4-fed3-59c885fe2922"><date>2021-11-27T14:00:00Z</date><start>09:00</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-day1-open</slug><duration>0:18</duration><title>Opening remarks</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/day1-open</url><persons><person>EmacsConf</person></persons></event><event id="02" guid="393ba3c2-b2a6-6a84-44eb-872aa333d08d"><date>2021-11-27T14:19:00Z</date><start>09:19</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-news</slug><duration>0:05</duration><title>Emacs News Highlights</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/news</url><persons><person>Sacha Chua</person></persons></event><event id="03" guid="06df8309-bd04-eb24-d443-a780c56adc0a"><date>2021-11-27T14:25:00Z</date><start>09:25</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-frownies</slug><duration>0:20</duration><title>The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/frownies</url><persons><person>Case Duckworth</person></persons></event><event id="04" guid="db4ccb28-867f-df24-c073-eaca6edad438"><date>2021-11-27T14:59:00Z</date><start>09:59</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-omegat</slug><duration>0:10</duration><title>Emacs manuals translation and OmegaT</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/omegat</url><persons><person>Jean-Christophe Helary</person></persons></event><event id="11" guid="ea5bab3c-f31e-68a4-fa23-81ca67fa1990"><date>2021-11-27T15:13:00Z</date><start>10:13</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-unix</slug><duration>0:07</duration><title>GNU's Not UNIX: Why Emacs Demonstrates The UNIX Philosophy Isn't Always The Only Answer</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/unix</url><persons><person>Daniel Rose</person></persons></event><event id="29" guid="6fccae45-04b5-5524-662b-fdba87754d06"><date>2021-11-27T15:25:00Z</date><start>10:25</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-montessori</slug><duration>0:11</duration><title>Emacs and Montessori Philosophy</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/montessori</url><persons><person>Grant Shangreaux</person></persons></event><event id="51" guid="fe959e43-441b-ed34-854b-87f6f481f55a"><date>2021-11-27T15:40:00Z</date><start>10:40</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-pattern</slug><duration>0:24</duration><title>Emacs as Design Pattern Learning</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/pattern</url><persons><person>Greta Goetz</person></persons></event><event id="27" guid="48a8580f-52ce-cc84-6a23-1eddf720ae02"><date>2021-11-27T16:07:00Z</date><start>11:07</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-freedom</slug><duration>0:39</duration><title>How Emacs made me appreciate software freedom</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/freedom</url><persons><person>Protesilaos Stavrou</person></persons></event><event id="05" guid="525d972d-1e34-bcb4-e9c3-861942549357"><date>2021-11-27T16:46:00Z</date><start>11:46</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-nongnu</slug><duration>0:07</duration><title>NonGNU ELPA Update</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/nongnu</url><persons><person>Philip Kaludercic</person></persons></event><event id="06" guid="245a575a-965a-caa4-8d3b-75f8519c2f3e"><date>2021-11-27T16:55:00Z</date><start>11:55</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-borg</slug><duration>0:08</duration><title>Manual Package Management in The Era of Repositories - Why and How</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/borg</url><persons><person>Dhavan (codingquark)</person></persons></event><event id="08" guid="e4bdc2c1-e4b6-67e4-aafb-87ec9aaf846b"><date>2021-11-27T17:03:00Z</date><start>12:03</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-nangulator</slug><duration>0:10</duration><title>Introducing N-Angulator</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/nangulator</url><persons><person>Kevin Haddock</person></persons></event><event id="12" guid="716d913f-de8b-91a4-5f33-e04ba0905fa5"><date>2021-11-27T17:14:00Z</date><start>12:14</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-gregorian</slug><duration>0:09</duration><title>Typesetting Gregorian Chant with Emacs</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/gregorian</url><persons><person>Spencer King</person></persons></event><event id="07" guid="86158391-53a2-7cb4-d7d3-020afbf6d8d9"><date>2021-11-27T18:01:00Z</date><start>13:01</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-telega</slug><duration>0:08</duration><title>telega.el and the Emacs community on Telegram</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/telega</url><persons><person>Gabriele Bozzola</person></persons></event><event id="09" guid="14ab7a54-d75d-45e4-85ab-8fd2e391ea41"><date>2021-11-27T18:10:00Z</date><start>13:10</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-janitor</slug><duration>0:26</duration><title>A day in the life of a janitor</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/janitor</url><persons><person>Stefan Monnier</person></persons></event><event id="52" guid="9cee7e43-bcb1-7f64-c40b-5f9ea938d11a"><date>2021-11-27T18:51:00Z</date><start>13:51</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-erg</slug><duration>0:11</duration><title>Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/erg</url><persons><person>Noorah Alhasan</person><person>Joe Corneli</person><person>Raymond Puzio</person><person>Leo Vivier</person></persons></event><event id="13" guid="0f98a5bb-53ce-fb74-1003-0b1f320d414e"><date>2021-11-27T19:03:00Z</date><start>14:03</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-cs</slug><duration>0:10</duration><title>One effective CS grad student workflow</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/cs</url><persons><person>Greg Coladonato</person></persons></event><event id="16" guid="43cc5db4-e26f-fb44-9aeb-b16c38d8cef3"><date>2021-11-27T19:15:00Z</date><start>14:15</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-professional</slug><duration>0:11</duration><title>Using Org-Mode For Recording Continuous Professional Development</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/professional</url><persons><person>Philip Beadling</person></persons></event><event id="23" guid="a10ce62e-6454-d784-21bb-f6a0488e883c"><date>2021-11-27T19:26:00Z</date><start>14:26</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-tech</slug><duration>0:11</duration><title>Creating technical API documentation and presentations using org-babel, restclient, and org-treeslide</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/tech</url><persons><person>Jan Ypma</person></persons></event><event id="18" guid="b092bc88-e74c-a9c4-611b-d47c99ef578c"><date>2021-11-27T19:38:00Z</date><start>14:38</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-exec</slug><duration>0:08</duration><title>Org as an executable format</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/exec</url><persons><person>Tom Gillespie</person></persons></event><event id="17" guid="69763d57-be4e-7e74-509b-92e48a0e7ba6"><date>2021-11-27T19:46:00Z</date><start>14:46</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-org-outside</slug><duration>0:13</duration><title>The use of Org mode syntax outside of GNU/Emacs</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/org-outside</url><persons><person>Karl Voit</person></persons></event><event id="22" guid="aed5e190-66a0-3dd4-e5eb-be09be94e6c3"><date>2021-11-27T20:00:00Z</date><start>15:00</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-teach</slug><duration>0:21</duration><title>Using Org-mode to teach programming</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/teach</url><persons><person>Daniel German</person></persons></event><event id="19" guid="db5821ed-fef4-4934-8fb3-87a0282714de"><date>2021-11-27T20:21:00Z</date><start>15:21</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-babel</slug><duration>0:10</duration><title>Babel for academics</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/babel</url><persons><person>Asilata Bapat</person></persons></event><event id="20" guid="fd246cee-b5d6-7cc4-2b63-20e87bb7d750"><date>2021-11-27T20:33:00Z</date><start>15:33</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-research</slug><duration>0:09</duration><title>Managing a research workflow (bibliographies, note-taking, and arXiv)</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/research</url><persons><person>Ahmed Khaled</person></persons></event><event id="21" guid="1fc4917c-aab4-1924-2983-e78f8bca6af9"><date>2021-11-27T20:42:00Z</date><start>15:42</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-molecular</slug><duration>0:09</duration><title>Reproducible molecular graphics with Org-mode</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/molecular</url><persons><person>Blaine Mooers</person></persons></event><event id="15" guid="c9870e10-2600-85a4-24fb-793dfc51164e"><date>2021-11-27T20:53:00Z</date><start>15:53</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-invoice</slug><duration>0:10</duration><title>Finding Your (In)voice: Emacs for Invoicing</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/invoice</url><persons><person>Bala Ramadurai</person></persons></event><event id="14" guid="c54c7930-51cc-5184-9dfb-5033e577b95e"><date>2021-11-27T21:03:00Z</date><start>16:03</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-project</slug><duration>0:10</duration><title>Budgeting, Project Monitoring and Invoicing with Org Mode</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/project</url><persons><person>Adolfo Villafiorita</person></persons></event><event id="24" guid="e4e995c0-6e06-8544-a8c3-5f9a06c856fb"><date>2021-11-27T21:14:00Z</date><start>16:14</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-dashboard</slug><duration>0:09</duration><title>Productivity Dashboards with Emacs and Kindle</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/dashboard</url><persons><person>Mehmet Tekman</person></persons></event><event id="25" guid="33776e08-e815-db94-971b-a151236e11be"><date>2021-11-27T21:26:00Z</date><start>16:26</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-nyxt</slug><duration>0:09</duration><title>Emacs with Nyxt: extend your editor with the power of a Lisp browser</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/nyxt</url><persons><person>Andrea</person></persons></event><event id="53" guid="59e4daca-1e46-9054-9573-9c91966d6987"><date>2021-11-27T21:41:00Z</date><start>16:41</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-dev-update</slug><duration>0:08</duration><title>Emacs development updates</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/dev-update</url><persons><person>John Wiegley</person></persons></event><event id="26" guid="86d4470a-8d19-7bd4-0c53-6aba1b49baef"><date>2021-11-27T21:49:00Z</date><start>16:49</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-design</slug><duration>0:07</duration><title>On the design of text editors</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/design</url><persons><person>Nicolas P. Rougier</person></persons></event><event id="28" guid="5287b003-f368-36c4-4f9b-8135734cad39"><date>2021-11-27T22:00:00Z</date><start>17:00</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-day1-close</slug><duration>0:05</duration><title>Closing remarks day 1</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/day1-close</url><persons><person>EmacsConf</person></persons></event></room></day><day date="2021-11-28" start="2021-11-28T14:00:00Z" end="2021-11-28T22:17:00Z" index="2"><room name="Main"><event id="30" guid="d877a57a-14cf-a194-99c3-a344ecb24acc"><date>2021-11-28T14:00:00Z</date><start>09:00</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-day2-open</slug><duration>0:05</duration><title>Opening remarks day 2</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/day2-open</url><persons><person>EmacsConf</person></persons></event><event id="31" guid="35d1d9e4-dfdf-f254-6aab-7a466fbfaf09"><date>2021-11-28T14:07:00Z</date><start>09:07</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-faster</slug><duration>0:36</duration><title>Optimizing Emacs Lisp Code</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/faster</url><persons><person>Dmitry Gutov</person></persons></event><event id="33" guid="599ef3fa-4c73-6c94-4953-75bbc7830681"><date>2021-11-28T15:00:00Z</date><start>10:00</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-structural</slug><duration>0:11</duration><title>Tree-edit: Structural editing for Java, Python, C, and beyond!</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/structural</url><persons><person>Ethan Leba</person></persons></event><event id="32" guid="29d45a6f-9425-f5a4-bd23-297292e4ab7a"><date>2021-11-28T15:12:00Z</date><start>10:12</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-dsl</slug><duration>0:20</duration><title>Self-Describing Smart DSL's: The Next Magits</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/dsl</url><persons><person>Psionic</person></persons></event><event id="34" guid="8f62e571-91da-bd14-e7c3-b445c7b19d23"><date>2021-11-28T15:19:00Z</date><start>10:19</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-ui</slug><duration>0:10</duration><title>Yak-shaving to a UI framework</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/ui</url><persons><person>Erik Anderson</person></persons></event><event id="50" guid="4cd6de26-cf48-95c4-9d3b-28895a43ec53"><date>2021-11-28T15:41:00Z</date><start>10:41</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-devel</slug><duration>0:20</duration><title>Don't write that package! or: How I learned to stop worrying and love emacs-devel</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/devel</url><persons><person>Stefan Kangas</person></persons></event><event id="35" guid="b073d391-6c37-6bf4-7afb-47edc79631a9"><date>2021-11-28T15:19:00Z</date><start>10:19</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-rust</slug><duration>0:20</duration><title>Extending Emacs in Rust with Dynamic Modules</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/rust</url><persons><person>Tuấn-Anh Nguyễn</person></persons></event><event id="43" guid="3364aedb-a496-5c64-5383-b0080afa6d7b"><date>2021-11-28T15:38:00Z</date><start>10:38</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-mold</slug><duration>0:10</duration><title>Moldable Emacs, a step towards sustainable software</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/mold</url><persons><person>Andrea</person></persons></event><event id="47" guid="5e1baaaf-56a3-b5b4-31cb-5437cf465cf9"><date>2021-11-28T15:49:00Z</date><start>10:49</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-model</slug><duration>0:10</duration><title>Extending the "model" of Emacs to other applications</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/model</url><persons><person>Laszlo Krajnikovszkij</person></persons></event><event id="39" guid="1ddbe380-b4f3-2b84-3cc3-9e799536db8e"><date>2021-11-28T16:00:00Z</date><start>11:00</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-native</slug><duration>0:40</duration><title>Emacs Lisp native compiler, current status and future developments</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/native</url><persons><person>Andrea Corallo</person></persons></event><event id="40" guid="5947c3e9-93c1-1014-7ffb-aa0e0097e3e4"><date>2021-11-28T18:01:00Z</date><start>13:01</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-form</slug><duration>0:13</duration><title>Old McCarthy Had a Form</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/form</url><persons><person>Ian Eure</person></persons></event><event id="36" guid="49a35f05-b71f-1d14-2343-a6638bec0d08"><date>2021-11-28T18:19:00Z</date><start>13:19</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-bindat</slug><duration>0:30</duration><title>Turbo Bindat</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/bindat</url><persons><person>Stefan Monnier</person></persons></event><event id="37" guid="5e162d34-ea19-8544-b693-dd6da0e885cd"><date>2021-11-28T18:55:00Z</date><start>13:55</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-test</slug><duration>0:07</duration><title>Test blocks</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/test</url><persons><person>Eduardo Ochs</person></persons></event><event id="42" guid="1407591a-29fd-3f64-1beb-01dea6e9d7d2"><date>2021-11-28T19:03:00Z</date><start>14:03</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-bidi</slug><duration>0:20</duration><title>Perso-Arabic Input Methods And Making More Emacs Apps BIDI Aware</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/bidi</url><persons><person>Mohsen BANAN</person></persons></event><event id="38" guid="e7981936-6d72-93d4-8783-5ac64a0ae5bb"><date>2021-11-28T19:29:00Z</date><start>14:29</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-eaf</slug><duration>0:10</duration><title>Emacs Application Framework: A 2021 Update</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/eaf</url><persons><person>Matthew Zeng</person></persons></event><event id="45" guid="f03ae971-4d2b-ccc4-2643-4ae2391ce1ab"><date>2021-11-28T19:39:00Z</date><start>14:39</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-imaginary</slug><duration>0:11</duration><title>Imaginary Programming</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/imaginary</url><persons><person>Shane Mulligan</person></persons></event><event id="44" guid="daf3570b-3df3-9db4-a1f3-ce98d9863717"><date>2021-11-28T19:59:00Z</date><start>14:59</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-clede</slug><duration>0:19</duration><title>CLEDE: the Common Lisp Emacs Development Environment</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/clede</url><persons><person>Fermin MF</person></persons></event><event id="10" guid="51c360e6-188f-9a34-05bb-0a8d2eb09cdc"><date>2021-11-28T20:25:00Z</date><start>15:25</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-maintainers</slug><duration>0:11</duration><title>How to help Emacs maintainers?</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/maintainers</url><persons><person>Bastien Guerry</person></persons></event><event id="41" guid="51023225-018f-cf24-9d73-3c267907c13e"><date>2021-11-28T20:19:00Z</date><start>15:19</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-bug</slug><duration>0:20</duration><title>Let's talk about bug trackers</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/bug</url><persons><person>Bastien Guerry</person></persons></event><event id="46" guid="27595637-b6b9-f764-805b-ff1b7f009006"><date>2021-11-28T20:52:00Z</date><start>15:52</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-build</slug><duration>0:17</duration><title>How to build an Emacs</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/build</url><persons><person>Fermin MF</person></persons></event><event id="48" guid="80d1ad02-5fe4-03b4-c573-17ea6cdb61aa"><date>2021-11-28T21:15:00Z</date><start>16:15</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-forever</slug><duration>0:25</duration><title>M-x Forever: Why Emacs will outlast text editor trends</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/forever</url><persons><person>David Wilson (System Crafters)</person></persons></event><event id="49" guid="828e7c62-8430-f1a4-431b-63c308d58688"><date>2021-11-28T22:07:00Z</date><start>17:07</start><language>en</language><room>Main</room><subtitle></subtitle><type>Talk</type><track>Main</track><slug>emacsconf-2021-talk-day2-close</slug><duration>0:10</duration><title>Closing remarks day 2</title><abstract></abstract><description>Times are approximate and will probably change.
+
+</description><url>https://emacsconf.org/2021/talks/day2-close</url><persons><person>EmacsConf</person></persons></event></room></day></schedule> \ No newline at end of file
diff --git a/2021/emacsconf.ics b/2021/emacsconf.ics
new file mode 100644
index 00000000..6c971270
--- /dev/null
+++ b/2021/emacsconf.ics
@@ -0,0 +1,659 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:EmacsConf
+X-WR-CALNAME:EmacsConf 2021
+X-WR-CALNAME:EmacsConf
+CALSCALE:GREGORIAN
+METHOD:PUBLISH
+BEGIN:VEVENT
+SUMMARY:Opening remarks
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:dc07efcd-6d79-cfd4-fed3-59c885fe2922
+URL:https://emacsconf.org/2021/talks/day1-open
+DTSTART:20211127T140000Z
+DTEND:20211127T141800Z
+DTSTAMP:20211207T015326Z
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/day1-open\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Emacs News Highlights - Sacha Chua
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:393ba3c2-b2a6-6a84-44eb-872aa333d08d
+URL:https://emacsconf.org/2021/talks/news
+DTSTART:20211127T141900Z
+DTEND:20211127T142400Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Sacha Chua":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/news\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:The True Frownies are the Friends We Made Along the Way: An Anecdot
+ e of Emacs's Malleability - Case Duckworth
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:06df8309-bd04-eb24-d443-a780c56adc0a
+URL:https://emacsconf.org/2021/talks/frownies
+DTSTART:20211127T142500Z
+DTEND:20211127T144500Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Case Duckworth":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/frownies\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Emacs manuals translation and OmegaT - Jean-Christophe Helary
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:db4ccb28-867f-df24-c073-eaca6edad438
+URL:https://emacsconf.org/2021/talks/omegat
+DTSTART:20211127T145900Z
+DTEND:20211127T150900Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Jean-Christophe Helary":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/omegat\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:GNU's Not UNIX: Why Emacs Demonstrates The UNIX Philosophy Isn't Al
+ ways The Only Answer - Daniel Rose
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:ea5bab3c-f31e-68a4-fa23-81ca67fa1990
+URL:https://emacsconf.org/2021/talks/unix
+DTSTART:20211127T151300Z
+DTEND:20211127T152000Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Daniel Rose":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/unix\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Emacs and Montessori Philosophy - Grant Shangreaux
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:6fccae45-04b5-5524-662b-fdba87754d06
+URL:https://emacsconf.org/2021/talks/montessori
+DTSTART:20211127T152500Z
+DTEND:20211127T153600Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Grant Shangreaux":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/montessori\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Emacs as Design Pattern Learning - Greta Goetz
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:fe959e43-441b-ed34-854b-87f6f481f55a
+URL:https://emacsconf.org/2021/talks/pattern
+DTSTART:20211127T154000Z
+DTEND:20211127T160400Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Greta Goetz":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/pattern\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:How Emacs made me appreciate software freedom - Protesilaos Stavrou
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:48a8580f-52ce-cc84-6a23-1eddf720ae02
+URL:https://emacsconf.org/2021/talks/freedom
+DTSTART:20211127T160700Z
+DTEND:20211127T164600Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Protesilaos Stavrou":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/freedom\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:NonGNU ELPA Update - Philip Kaludercic
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:525d972d-1e34-bcb4-e9c3-861942549357
+URL:https://emacsconf.org/2021/talks/nongnu
+DTSTART:20211127T164600Z
+DTEND:20211127T165300Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Philip Kaludercic":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/nongnu\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Manual Package Management in The Era of Repositories - Why and How
+ - Dhavan (codingquark)
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:245a575a-965a-caa4-8d3b-75f8519c2f3e
+URL:https://emacsconf.org/2021/talks/borg
+DTSTART:20211127T165500Z
+DTEND:20211127T170300Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Dhavan (codingquark)":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/borg\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Introducing N-Angulator - Kevin Haddock
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:e4bdc2c1-e4b6-67e4-aafb-87ec9aaf846b
+URL:https://emacsconf.org/2021/talks/nangulator
+DTSTART:20211127T170300Z
+DTEND:20211127T171300Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Kevin Haddock":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/nangulator\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Typesetting Gregorian Chant with Emacs - Spencer King
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:716d913f-de8b-91a4-5f33-e04ba0905fa5
+URL:https://emacsconf.org/2021/talks/gregorian
+DTSTART:20211127T171400Z
+DTEND:20211127T172300Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Spencer King":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/gregorian\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:telega.el and the Emacs community on Telegram - Gabriele Bozzola
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:86158391-53a2-7cb4-d7d3-020afbf6d8d9
+URL:https://emacsconf.org/2021/talks/telega
+DTSTART:20211127T180100Z
+DTEND:20211127T180900Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Gabriele Bozzola":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/telega\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:A day in the life of a janitor - Stefan Monnier
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:14ab7a54-d75d-45e4-85ab-8fd2e391ea41
+URL:https://emacsconf.org/2021/talks/janitor
+DTSTART:20211127T181000Z
+DTEND:20211127T183600Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Stefan Monnier":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/janitor\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Emacs Research Group\, Season Zero: What we did together with Emacs
+ in 2 hours a week for a year - Noorah Alhasan\, Joe Corneli\, Raymond Puz
+ io\, Leo Vivier
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:9cee7e43-bcb1-7f64-c40b-5f9ea938d11a
+URL:https://emacsconf.org/2021/talks/erg
+DTSTART:20211127T185100Z
+DTEND:20211127T190200Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Noorah Alhasan":invalid:nomail
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Joe Corneli":invalid:nomail
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Raymond Puzio":invalid:nomail
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Leo Vivier":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/erg\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:One effective CS grad student workflow - Greg Coladonato
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:0f98a5bb-53ce-fb74-1003-0b1f320d414e
+URL:https://emacsconf.org/2021/talks/cs
+DTSTART:20211127T190300Z
+DTEND:20211127T191300Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Greg Coladonato":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/cs\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Using Org-Mode For Recording Continuous Professional Development -
+ Philip Beadling
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:43cc5db4-e26f-fb44-9aeb-b16c38d8cef3
+URL:https://emacsconf.org/2021/talks/professional
+DTSTART:20211127T191500Z
+DTEND:20211127T192600Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Philip Beadling":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/professional\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Creating technical API documentation and presentations using org-ba
+ bel\, restclient\, and org-treeslide - Jan Ypma
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:a10ce62e-6454-d784-21bb-f6a0488e883c
+URL:https://emacsconf.org/2021/talks/tech
+DTSTART:20211127T192600Z
+DTEND:20211127T193700Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Jan Ypma":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/tech\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Org as an executable format - Tom Gillespie
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:b092bc88-e74c-a9c4-611b-d47c99ef578c
+URL:https://emacsconf.org/2021/talks/exec
+DTSTART:20211127T193800Z
+DTEND:20211127T194600Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Tom Gillespie":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/exec\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:The use of Org mode syntax outside of GNU/Emacs - Karl Voit
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:69763d57-be4e-7e74-509b-92e48a0e7ba6
+URL:https://emacsconf.org/2021/talks/org-outside
+DTSTART:20211127T194600Z
+DTEND:20211127T195900Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Karl Voit":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/org-outside\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Using Org-mode to teach programming - Daniel German
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:aed5e190-66a0-3dd4-e5eb-be09be94e6c3
+URL:https://emacsconf.org/2021/talks/teach
+DTSTART:20211127T200000Z
+DTEND:20211127T202100Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Daniel German":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/teach\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Babel for academics - Asilata Bapat
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:db5821ed-fef4-4934-8fb3-87a0282714de
+URL:https://emacsconf.org/2021/talks/babel
+DTSTART:20211127T202100Z
+DTEND:20211127T203100Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Asilata Bapat":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/babel\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Managing a research workflow (bibliographies\, note-taking\, and ar
+ Xiv) - Ahmed Khaled
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:fd246cee-b5d6-7cc4-2b63-20e87bb7d750
+URL:https://emacsconf.org/2021/talks/research
+DTSTART:20211127T203300Z
+DTEND:20211127T204200Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Ahmed Khaled":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/research\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Reproducible molecular graphics with Org-mode - Blaine Mooers
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:1fc4917c-aab4-1924-2983-e78f8bca6af9
+URL:https://emacsconf.org/2021/talks/molecular
+DTSTART:20211127T204200Z
+DTEND:20211127T205100Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Blaine Mooers":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/molecular\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Finding Your (In)voice: Emacs for Invoicing - Bala Ramadurai
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:c9870e10-2600-85a4-24fb-793dfc51164e
+URL:https://emacsconf.org/2021/talks/invoice
+DTSTART:20211127T205300Z
+DTEND:20211127T210300Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Bala Ramadurai":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/invoice\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Budgeting\, Project Monitoring and Invoicing with Org Mode - Adolfo
+ Villafiorita
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:c54c7930-51cc-5184-9dfb-5033e577b95e
+URL:https://emacsconf.org/2021/talks/project
+DTSTART:20211127T210300Z
+DTEND:20211127T211300Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Adolfo Villafiorita":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/project\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Productivity Dashboards with Emacs and Kindle - Mehmet Tekman
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:e4e995c0-6e06-8544-a8c3-5f9a06c856fb
+URL:https://emacsconf.org/2021/talks/dashboard
+DTSTART:20211127T211400Z
+DTEND:20211127T212300Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Mehmet Tekman":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/dashboard\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Emacs with Nyxt: extend your editor with the power of a Lisp browse
+ r - Andrea
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:33776e08-e815-db94-971b-a151236e11be
+URL:https://emacsconf.org/2021/talks/nyxt
+DTSTART:20211127T212600Z
+DTEND:20211127T213500Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Andrea":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/nyxt\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Emacs development updates - John Wiegley
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:59e4daca-1e46-9054-9573-9c91966d6987
+URL:https://emacsconf.org/2021/talks/dev-update
+DTSTART:20211127T214100Z
+DTEND:20211127T214900Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="John Wiegley":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/dev-update\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:On the design of text editors - Nicolas P. Rougier
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:86d4470a-8d19-7bd4-0c53-6aba1b49baef
+URL:https://emacsconf.org/2021/talks/design
+DTSTART:20211127T214900Z
+DTEND:20211127T215600Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Nicolas P. Rougier":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/design\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Closing remarks day 1
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:5287b003-f368-36c4-4f9b-8135734cad39
+URL:https://emacsconf.org/2021/talks/day1-close
+DTSTART:20211127T220000Z
+DTEND:20211127T220500Z
+DTSTAMP:20211207T015326Z
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/day1-close\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Opening remarks day 2
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:d877a57a-14cf-a194-99c3-a344ecb24acc
+URL:https://emacsconf.org/2021/talks/day2-open
+DTSTART:20211128T140000Z
+DTEND:20211128T140500Z
+DTSTAMP:20211207T015326Z
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/day2-open\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Optimizing Emacs Lisp Code - Dmitry Gutov
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:35d1d9e4-dfdf-f254-6aab-7a466fbfaf09
+URL:https://emacsconf.org/2021/talks/faster
+DTSTART:20211128T140700Z
+DTEND:20211128T144300Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Dmitry Gutov":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/faster\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Tree-edit: Structural editing for Java\, Python\, C\, and beyond! -
+ Ethan Leba
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:599ef3fa-4c73-6c94-4953-75bbc7830681
+URL:https://emacsconf.org/2021/talks/structural
+DTSTART:20211128T150000Z
+DTEND:20211128T151100Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Ethan Leba":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/structural\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Yak-shaving to a UI framework - Erik Anderson
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:8f62e571-91da-bd14-e7c3-b445c7b19d23
+URL:https://emacsconf.org/2021/talks/ui
+DTSTART:20211128T151900Z
+DTEND:20211128T152900Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Erik Anderson":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/ui\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Moldable Emacs\, a step towards sustainable software - Andrea
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:3364aedb-a496-5c64-5383-b0080afa6d7b
+URL:https://emacsconf.org/2021/talks/mold
+DTSTART:20211128T153800Z
+DTEND:20211128T154800Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Andrea":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/mold\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Extending the "model" of Emacs to other applications - Laszlo Krajn
+ ikovszkij
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:5e1baaaf-56a3-b5b4-31cb-5437cf465cf9
+URL:https://emacsconf.org/2021/talks/model
+DTSTART:20211128T154900Z
+DTEND:20211128T155900Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Laszlo Krajnikovszkij":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/model\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Emacs Lisp native compiler\, current status and future developments
+ - Andrea Corallo
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:1ddbe380-b4f3-2b84-3cc3-9e799536db8e
+URL:https://emacsconf.org/2021/talks/native
+DTSTART:20211128T160000Z
+DTEND:20211128T164000Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Andrea Corallo":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/native\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Old McCarthy Had a Form - Ian Eure
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:5947c3e9-93c1-1014-7ffb-aa0e0097e3e4
+URL:https://emacsconf.org/2021/talks/form
+DTSTART:20211128T180100Z
+DTEND:20211128T181400Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Ian Eure":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/form\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Turbo Bindat - Stefan Monnier
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:49a35f05-b71f-1d14-2343-a6638bec0d08
+URL:https://emacsconf.org/2021/talks/bindat
+DTSTART:20211128T181900Z
+DTEND:20211128T184900Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Stefan Monnier":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/bindat\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Test blocks - Eduardo Ochs
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:5e162d34-ea19-8544-b693-dd6da0e885cd
+URL:https://emacsconf.org/2021/talks/test
+DTSTART:20211128T185500Z
+DTEND:20211128T190200Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Eduardo Ochs":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/test\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Perso-Arabic Input Methods And Making More Emacs Apps BIDI Aware -
+ Mohsen BANAN
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:1407591a-29fd-3f64-1beb-01dea6e9d7d2
+URL:https://emacsconf.org/2021/talks/bidi
+DTSTART:20211128T190300Z
+DTEND:20211128T192300Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Mohsen BANAN":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/bidi\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Emacs Application Framework: A 2021 Update - Matthew Zeng
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:e7981936-6d72-93d4-8783-5ac64a0ae5bb
+URL:https://emacsconf.org/2021/talks/eaf
+DTSTART:20211128T192900Z
+DTEND:20211128T193900Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Matthew Zeng":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/eaf\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Imaginary Programming - Shane Mulligan
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:f03ae971-4d2b-ccc4-2643-4ae2391ce1ab
+URL:https://emacsconf.org/2021/talks/imaginary
+DTSTART:20211128T193900Z
+DTEND:20211128T195000Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Shane Mulligan":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/imaginary\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:CLEDE: the Common Lisp Emacs Development Environment - Fermin MF
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:daf3570b-3df3-9db4-a1f3-ce98d9863717
+URL:https://emacsconf.org/2021/talks/clede
+DTSTART:20211128T195900Z
+DTEND:20211128T201800Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Fermin MF":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/clede\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:How to help Emacs maintainers? - Bastien Guerry
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:51c360e6-188f-9a34-05bb-0a8d2eb09cdc
+URL:https://emacsconf.org/2021/talks/maintainers
+DTSTART:20211128T202500Z
+DTEND:20211128T203600Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Bastien Guerry":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/maintainers\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:How to build an Emacs - Fermin MF
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:27595637-b6b9-f764-805b-ff1b7f009006
+URL:https://emacsconf.org/2021/talks/build
+DTSTART:20211128T205200Z
+DTEND:20211128T210900Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="Fermin MF":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/build\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:M-x Forever: Why Emacs will outlast text editor trends - David Wils
+ on (System Crafters)
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:80d1ad02-5fe4-03b4-c573-17ea6cdb61aa
+URL:https://emacsconf.org/2021/talks/forever
+DTSTART:20211128T211500Z
+DTEND:20211128T214000Z
+DTSTAMP:20211207T015326Z
+ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;CN="David Wilson (System Crafters)":invalid:nomail
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/forever\n
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:Closing remarks day 2
+ORGANIZER:EmacsConf
+LOCATION:https://emacsconf.org/
+UID:828e7c62-8430-f1a4-431b-63c308d58688
+URL:https://emacsconf.org/2021/talks/day2-close
+DTSTART:20211128T220700Z
+DTEND:20211128T221700Z
+DTSTAMP:20211207T015326Z
+DESCRIPTION: Times are approximate and will probably change.\nhttps://emacs
+ conf.org/2021/talks/day2-close\n
+END:VEVENT
+END:VCALENDAR \ No newline at end of file
diff --git a/2021/ideas.md b/2021/ideas.md
new file mode 100644
index 00000000..5b290787
--- /dev/null
+++ b/2021/ideas.md
@@ -0,0 +1,12 @@
+[[!meta title="Ideas"]]
+[[!meta copyright="Copyright &copy; 2020, 2021 Amin Bandali"]]
+
+This is _the_ place to collect ideas for talks and other sessions for
+EmacsConf 2021. :-)
+
+Be sure to check out the ideas from previous years as well:
+[[2020|2020/ideas]], [[2019|2019/ideas]], [[2015|2015/ideas]].
+
+## Ideas
+
+### _Add your idea here!_
diff --git a/2021/info/babel-nav.md b/2021/info/babel-nav.md
new file mode 100644
index 00000000..e3acd3aa
--- /dev/null
+++ b/2021/info/babel-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/teach">Using Org-mode to teach programming</a>
+Next: <a href="/2021/talks/research">Managing a research workflow (bibliographies, note-taking, and arXiv)</a>
diff --git a/2021/info/babel-schedule.md b/2021/info/babel-schedule.md
new file mode 100644
index 00000000..37ee874d
--- /dev/null
+++ b/2021/info/babel-schedule.md
@@ -0,0 +1,30 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: maybe live (early morning in Australia)
+Duration: 9:58
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.vtt" default />"""
+size="21.4M" duration="9:58" other_resources="""[Download .pdf](https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat.pdf)
+[Download --compressed56.webm (13.3MB)](https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.vtt)
+[View on Toobnix](https://toobnix.org/w/wPJWkEYqyGKxi9SQ82Hmn6)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--answers.png"
+size="11.1M" duration="5:19" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/bidi-nav.md b/2021/info/bidi-nav.md
new file mode 100644
index 00000000..8bbb65d0
--- /dev/null
+++ b/2021/info/bidi-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/test">Test blocks</a>
+Next: <a href="/2021/talks/eaf">Emacs Application Framework: A 2021 Update</a>
diff --git a/2021/info/bidi-schedule.md b/2021/info/bidi-schedule.md
new file mode 100644
index 00000000..931bd976
--- /dev/null
+++ b/2021/info/bidi-schedule.md
@@ -0,0 +1,31 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 19:52
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt" default />"""
+size="32.5M" duration="19:52" other_resources="""[Download .pdf](https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan.pdf)
+[Download --compressed56.webm (20.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/sBy9n22kgLMjXu9Cr1Ta44)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--answers.png"
+size="52.4M" duration="19:04" other_resources="""[Download --answers--compressed32.webm (42.8MB)](https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--answers--compressed32.webm)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/bindat-nav.md b/2021/info/bindat-nav.md
new file mode 100644
index 00000000..cb087c2c
--- /dev/null
+++ b/2021/info/bindat-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/form">Old McCarthy Had a Form</a>
+Next: <a href="/2021/talks/test">Test blocks</a>
diff --git a/2021/info/bindat-schedule.md b/2021/info/bindat-schedule.md
new file mode 100644
index 00000000..d30d1e0c
--- /dev/null
+++ b/2021/info/bindat-schedule.md
@@ -0,0 +1,69 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 29:48
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt" default />"""
+size="36.6M" duration="29:48" other_resources="""[Download --compressed56.webm (28.8MB)](https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/qQeuipEkbSJgZbDm6xRg9q)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:01 Introduction
+02:06 What is BinDat?
+05:27 Conversion to lexical scoping
+08:30 The BinDat specification
+15:35 New design
+17:47 Documentation
+19:30 Advantages
+21:51 New features
+23:08 Examples
+27:56 Conclusion
+28:28 Negatives
+"""]]
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--answers.png"
+size="89.8M" duration="47:23" other_resources=""""""]]
+[[!template id="chapters" vidid="qanda" data="""
+00:00 bindat seems very similar to GNU Poke.
+00:55 Is your dog's name something Lisp or PL related?
+01:15 Is it merged into mainline Emacs, a patch, an external library?
+01:35 Are there benchmarks of this vs. the older bindat?
+02:13 Do you know of any CL or Scheme libs similar to bindat.el?
+02:55 You are a hero of kittens everywhere. Do you have any feline pets as well?
+03:47 (Q&A logistics)
+05:35 I hope cl-loop is more efficient than intermediate lists...
+06:16 BBB chat: Curious: how is GNU Poke more flexible?
+07:55 How Stefan got involved with bindat
+08:33 BBB chat: What hobbies/interests do you have besides Emacs (and PL)?
+09:42 BBB chat: Thoughts on making Emacsconf better?
+11:40 BBB chat: Poke's from-scratch DSL vs. building on an existing language
+14:10 Winnie the dog interjects.
+15:15 BBB chat: Favorite talks so far?
+19:00 BBB chat: What kind of dog is Winnie?
+20:05 BBB chat: More control over types coming into Elisp?
+24:15 Andrea Corallo joins discussion about types and performance.
+38:19 BBB chat: Do you plan to add bit-level support?
+41:15 Is there an automated way to convert bindat C type specs to Lisp specs?
+43:00 BBB chat: That's a classic hard problem that essentially requires a C compiler.
+43:51 BBB chat: And there's a problem of object size being arch dependent.
+44:54 BBB chat: Parsing a generic .h file is way more difficult.
+46:05 BBB chat: Automatic translation is more for automatically writing C bindings.
+46:50 Thanks
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/borg-nav.md b/2021/info/borg-nav.md
new file mode 100644
index 00000000..2413f631
--- /dev/null
+++ b/2021/info/borg-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/nongnu">NonGNU ELPA Update</a>
+Next: <a href="/2021/talks/nangulator">Introducing N-Angulator</a>
diff --git a/2021/info/borg-schedule.md b/2021/info/borg-schedule.md
new file mode 100644
index 00000000..e9d2d264
--- /dev/null
+++ b/2021/info/borg-schedule.md
@@ -0,0 +1,20 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: IRC
+Duration: 7:49
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt" default />"""
+size="16.8M" duration="7:49" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark.org)
+[Download --compressed56.webm (7.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt)
+[View on Toobnix](https://toobnix.org/w/5oG4HmrCV5REgRHfA1rqa3)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/bug-nav.md b/2021/info/bug-nav.md
new file mode 100644
index 00000000..e126b09b
--- /dev/null
+++ b/2021/info/bug-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/maintainers">How to help Emacs maintainers?</a>
+Next: <a href="/2021/talks/build">How to build an Emacs</a>
diff --git a/2021/info/bug-schedule.md b/2021/info/bug-schedule.md
new file mode 100644
index 00000000..d02be932
--- /dev/null
+++ b/2021/info/bug-schedule.md
@@ -0,0 +1,10 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+Q&A: IRC
+Status: Cancelled
+Duration: 20 minutes
+
+
+# Description
+
+
diff --git a/2021/info/build-nav.md b/2021/info/build-nav.md
new file mode 100644
index 00000000..03be36e8
--- /dev/null
+++ b/2021/info/build-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/maintainers">How to help Emacs maintainers?</a>
+Next: <a href="/2021/talks/forever">M-x Forever: Why Emacs will outlast text editor trends</a>
diff --git a/2021/info/build-schedule.md b/2021/info/build-schedule.md
new file mode 100644
index 00000000..bc5ee716
--- /dev/null
+++ b/2021/info/build-schedule.md
@@ -0,0 +1,27 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 16:54
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.png"
+size="18.7M" duration="16:54" other_resources="""[Download --compressed56.webm (15.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--compressed56.webm)
+[View on Toobnix](https://toobnix.org/w/jJJwKDTmUVeRQhSj7bazhz)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--answers.png"
+size="32.1M" duration="15:19" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/clede-nav.md b/2021/info/clede-nav.md
new file mode 100644
index 00000000..1717f3f5
--- /dev/null
+++ b/2021/info/clede-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/imaginary">Imaginary Programming</a>
+Next: <a href="/2021/talks/maintainers">How to help Emacs maintainers?</a>
diff --git a/2021/info/clede-schedule.md b/2021/info/clede-schedule.md
new file mode 100644
index 00000000..702f0209
--- /dev/null
+++ b/2021/info/clede-schedule.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 18:55
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.png"
+size="39.8M" duration="18:55" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt" default />""" other_resources="""[Download --compressed56.webm (24.6MB)](https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt)
+[View on Toobnix](https://toobnix.org/w/1HuHMank52gcpHqf4M7Sa5)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--answers.png"
+size="10.1M" duration="4:52" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/cs-nav.md b/2021/info/cs-nav.md
new file mode 100644
index 00000000..77d287e2
--- /dev/null
+++ b/2021/info/cs-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/erg">Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year</a>
+Next: <a href="/2021/talks/professional">Using Org-Mode For Recording Continuous Professional Development</a>
diff --git a/2021/info/cs-schedule.md b/2021/info/cs-schedule.md
new file mode 100644
index 00000000..28b03909
--- /dev/null
+++ b/2021/info/cs-schedule.md
@@ -0,0 +1,40 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A
+Duration: 9:28
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt" default />"""
+size="23.4M" duration="9:28" other_resources="""[Download --compressed56.webm (43.2MB)](https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/mxFkFd9TiUsJ8goGWZNAcz)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 Self-intro and context of the talk
+00:27 Goals of the workflow
+00:43 Requirements of the workflow
+01:34 Package dependencies
+01:42 Demo: Class notes PDFs
+03:24 Pulling down arXiv papers
+08:12 Small customizations
+08:59 TODO
+"""]]
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--answers.png"
+size="65.6M" duration="15:25" other_resources="""[Download --answers--compressed32.webm (55.8MB)](https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--answers--compressed32.webm)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/dashboard-nav.md b/2021/info/dashboard-nav.md
new file mode 100644
index 00000000..9ffa190f
--- /dev/null
+++ b/2021/info/dashboard-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/project">Budgeting, Project Monitoring and Invoicing with Org Mode</a>
+Next: <a href="/2021/talks/nyxt">Emacs with Nyxt: extend your editor with the power of a Lisp browser</a>
diff --git a/2021/info/dashboard-schedule.md b/2021/info/dashboard-schedule.md
new file mode 100644
index 00000000..1ed954d2
--- /dev/null
+++ b/2021/info/dashboard-schedule.md
@@ -0,0 +1,27 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A and Matrix Chat (@mtekman:matrix.org)
+Duration: 8:31
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.vtt" default />"""
+size="10.4M" duration="8:31" other_resources="""[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.vtt)
+[View on Toobnix](https://toobnix.org/w/ojNW5UwYUzzRTsLhoHZMzG)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--answers.png" captions=""""""
+size="9M" duration="2:24" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/day1-close-nav.md b/2021/info/day1-close-nav.md
new file mode 100644
index 00000000..2887fd42
--- /dev/null
+++ b/2021/info/day1-close-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/design">On the design of text editors</a>
+Next: <a href="/2021/talks/day2-open">Opening remarks day 2</a>
diff --git a/2021/info/day1-close-schedule.md b/2021/info/day1-close-schedule.md
new file mode 100644
index 00000000..f80dc8e3
--- /dev/null
+++ b/2021/info/day1-close-schedule.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Duration: 5 minutes
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+
+# Description
+
+
diff --git a/2021/info/day1-open-nav.md b/2021/info/day1-open-nav.md
new file mode 100644
index 00000000..f462ab6a
--- /dev/null
+++ b/2021/info/day1-open-nav.md
@@ -0,0 +1,2 @@
+Back to the [[schedule]]
+Next: <a href="/2021/talks/news">Emacs News Highlights</a>
diff --git a/2021/info/day1-open-schedule.md b/2021/info/day1-open-schedule.md
new file mode 100644
index 00000000..05eaea7f
--- /dev/null
+++ b/2021/info/day1-open-schedule.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Duration: 18 minutes
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+
+# Description
+
+
diff --git a/2021/info/day2-close-nav.md b/2021/info/day2-close-nav.md
new file mode 100644
index 00000000..14e12fc6
--- /dev/null
+++ b/2021/info/day2-close-nav.md
@@ -0,0 +1,2 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/forever">M-x Forever: Why Emacs will outlast text editor trends</a>
diff --git a/2021/info/day2-close-schedule.md b/2021/info/day2-close-schedule.md
new file mode 100644
index 00000000..dd041cfe
--- /dev/null
+++ b/2021/info/day2-close-schedule.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Duration: 10 minutes
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+The video for "Closing remarks day 2" will be posted here when available. You can also subscribe to the <a href="https://lists.gnu.org/mailman/listinfo/emacsconf-discuss">emacsconf-discuss mailing list</a> for updates.
+# Description
+
+
diff --git a/2021/info/day2-open-nav.md b/2021/info/day2-open-nav.md
new file mode 100644
index 00000000..c53c11ee
--- /dev/null
+++ b/2021/info/day2-open-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/day1-close">Closing remarks day 1</a>
+Next: <a href="/2021/talks/faster">Optimizing Emacs Lisp Code</a>
diff --git a/2021/info/day2-open-schedule.md b/2021/info/day2-open-schedule.md
new file mode 100644
index 00000000..f80dc8e3
--- /dev/null
+++ b/2021/info/day2-open-schedule.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Duration: 5 minutes
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+
+# Description
+
+
diff --git a/2021/info/design-nav.md b/2021/info/design-nav.md
new file mode 100644
index 00000000..24c85886
--- /dev/null
+++ b/2021/info/design-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/dev-update">Emacs development updates</a>
+Next: <a href="/2021/talks/day1-close">Closing remarks day 1</a>
diff --git a/2021/info/design-schedule.md b/2021/info/design-schedule.md
new file mode 100644
index 00000000..582fe240
--- /dev/null
+++ b/2021/info/design-schedule.md
@@ -0,0 +1,29 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: maybe live
+Duration: 6:39
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.vtt" default />"""
+size="9.3M" duration="6:39" other_resources="""[Download --compressed56.webm (6.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.vtt)
+[View on Toobnix](https://toobnix.org/w/hmiKha234Q2FygiaspQEP4)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--answers.png"
+size="17.4M" duration="6:34" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/dev-update-nav.md b/2021/info/dev-update-nav.md
new file mode 100644
index 00000000..643aba61
--- /dev/null
+++ b/2021/info/dev-update-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/nyxt">Emacs with Nyxt: extend your editor with the power of a Lisp browser</a>
+Next: <a href="/2021/talks/design">On the design of text editors</a>
diff --git a/2021/info/dev-update-schedule.md b/2021/info/dev-update-schedule.md
new file mode 100644
index 00000000..de6b6940
--- /dev/null
+++ b/2021/info/dev-update-schedule.md
@@ -0,0 +1,38 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: maybe after the conference; will try to attend
+Duration: 7:17
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt" default />"""
+size="10.3M" duration="7:17" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley.org)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/aBGWhAhfgB4obi5c58qhFM)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 Introduction
+00:18 Emacs 28
+00:33 Native compilation
+02:36 Build with Cairo by default
+02:55 New mode, but off by default: context-menus
+03:22 Tab-bar and tab-line received many enhancements
+03:37 A command can marked as specific to a mode
+04:20 Transient input methods
+05:00 show-paren-mode is enabled by default
+05:14 We now have a Non-GNU ELPA
+05:39 repeat-mode
+06:18 project.el has dozens of new commands
+06:26 Shorthands for Lisp symbols
+06:54 Emacs 29 is just beginning
+
+"""]]
+
+# Description
+
+
diff --git a/2021/info/devel-nav.md b/2021/info/devel-nav.md
new file mode 100644
index 00000000..e8c82fd5
--- /dev/null
+++ b/2021/info/devel-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/ui">Yak-shaving to a UI framework</a>
+Next: <a href="/2021/talks/rust">Extending Emacs in Rust with Dynamic Modules</a>
diff --git a/2021/info/devel-schedule.md b/2021/info/devel-schedule.md
new file mode 100644
index 00000000..c10ffc4b
--- /dev/null
+++ b/2021/info/devel-schedule.md
@@ -0,0 +1,9 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+Status: Cancelled
+Duration: 20 minutes
+
+
+# Description
+
+
diff --git a/2021/info/dsl-nav.md b/2021/info/dsl-nav.md
new file mode 100644
index 00000000..ce9fede7
--- /dev/null
+++ b/2021/info/dsl-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/structural">Tree-edit: Structural editing for Java, Python, C, and beyond!</a>
+Next: <a href="/2021/talks/ui">Yak-shaving to a UI framework</a>
diff --git a/2021/info/dsl-schedule.md b/2021/info/dsl-schedule.md
new file mode 100644
index 00000000..3ae4bc6c
--- /dev/null
+++ b/2021/info/dsl-schedule.md
@@ -0,0 +1,10 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+Q&A: answering after the conference
+Status: Cancelled
+Duration: 20 minutes
+
+
+# Description
+
+
diff --git a/2021/info/eaf-nav.md b/2021/info/eaf-nav.md
new file mode 100644
index 00000000..326ea98b
--- /dev/null
+++ b/2021/info/eaf-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/bidi">Perso-Arabic Input Methods And Making More Emacs Apps BIDI Aware</a>
+Next: <a href="/2021/talks/imaginary">Imaginary Programming</a>
diff --git a/2021/info/eaf-schedule.md b/2021/info/eaf-schedule.md
new file mode 100644
index 00000000..04e92fbf
--- /dev/null
+++ b/2021/info/eaf-schedule.md
@@ -0,0 +1,30 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: IRC or Etherpad
+Duration: 9:15
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt" default />"""
+size="13.4M" duration="9:15" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng.org)
+[Download --compressed56.webm (10.7MB)](https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/9hMPmTLzAxx4bxHJnSbkMr)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:03 Introduction
+00:38 EAF Overview
+02:05 New logo
+02:23 EAF Supports Windows, macOS, and many Linux distros
+03:15 Multi-language scripting
+03:56 VueJS extension
+05:45 EAF core-app separation
+07:09 Other notable updates Popweb
+"""]]
+
+# Description
+
+
diff --git a/2021/info/erg-nav.md b/2021/info/erg-nav.md
new file mode 100644
index 00000000..91de3218
--- /dev/null
+++ b/2021/info/erg-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/janitor">A day in the life of a janitor</a>
+Next: <a href="/2021/talks/cs">One effective CS grad student workflow</a>
diff --git a/2021/info/erg-schedule.md b/2021/info/erg-schedule.md
new file mode 100644
index 00000000..fbe0c9ef
--- /dev/null
+++ b/2021/info/erg-schedule.md
@@ -0,0 +1,47 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Duration: 10:23
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt" default />"""
+size="33.7M" duration="10:23" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier.org)
+[Download --compressed56.webm (11MB)](https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/jXni2SVVquM8FLjMLuK4Fg)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 Introduction
+01:46 Background and technology: Emacs Research Group
+02:53 Prerecorded demo
+05:13 Organising metaphor
+05:35 Timetable
+06:00 Project Action Review
+06:32 Causal Layered Analysis
+07:02 Design Patterns and Next Steps
+07:42 Projects
+07:53 Patterns of Patterns (PLoP 2021)
+08:24 PLACARD Workshop roles
+08:57 Initial user studies
+09:38 Broader context
+10:08 Conclusion
+"""]]
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--answers.png"
+size="40.1M" duration="14:05" other_resources="""[Download --answers--compressed32.webm (35.7MB)](https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--answers--compressed32.webm)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/exec-nav.md b/2021/info/exec-nav.md
new file mode 100644
index 00000000..e916af17
--- /dev/null
+++ b/2021/info/exec-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/tech">Creating technical API documentation and presentations using org-babel, restclient, and org-treeslide</a>
+Next: <a href="/2021/talks/org-outside">The use of Org mode syntax outside of GNU/Emacs</a>
diff --git a/2021/info/exec-schedule.md b/2021/info/exec-schedule.md
new file mode 100644
index 00000000..34f1fa1f
--- /dev/null
+++ b/2021/info/exec-schedule.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A or IRC
+Duration: 7:09
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.vtt" default />"""
+size="13.8M" duration="7:09" other_resources="""[Download --compressed56.webm (10.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.vtt)
+[View on Toobnix](https://toobnix.org/w/6TaLDJ4goGaa2R7dsxMi9F)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--answers.png"
+size="38.7M" duration="16:26" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/faster-nav.md b/2021/info/faster-nav.md
new file mode 100644
index 00000000..460ebc9c
--- /dev/null
+++ b/2021/info/faster-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/day2-open">Opening remarks day 2</a>
+Next: <a href="/2021/talks/structural">Tree-edit: Structural editing for Java, Python, C, and beyond!</a>
diff --git a/2021/info/faster-schedule.md b/2021/info/faster-schedule.md
new file mode 100644
index 00000000..4ae1edb7
--- /dev/null
+++ b/2021/info/faster-schedule.md
@@ -0,0 +1,55 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 35:35
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt" default />"""
+size="97.5M" duration="35:35" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov.org)
+[Download .el](https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov.el)
+[Download --compressed56.webm (57.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/kJkKrSyfeuhL7Gttgxb572)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:01 Introduction
+02:36 Emacs Lisp is a little old
+04:19 Benchmark then optimize, not vice versa
+05:03 profiler-start
+09:31 elp - Emacs Lisp Profiler
+13:01 benchmark
+19:13 Write less code
+20:00 Reduce allocations
+22:52 Recent optimizations in Xref
+30:52 cl-lib, dash, and seq
+"""]]
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--answers.png"
+size="96.9M" duration="41:29" other_resources="""[Download --answers--compressed32.webm (85.8MB)](https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--answers--compressed32.webm)
+"""]]
+[[!template id="chapters" vidid="qanda" data="""
+00:00 Why are overlays slow compared to text properties?
+03:21 Would these optimizations be helpful in a personal init.el?
+04:28 What's a good approach for benchmarking destructive operations?
+06:06 Do you recommend avoiding cl-defstruct in favour of "pure" lists/vectors?
+08:20 Possible to optimize Emacs packages with code compiled from other languages?
+10:26 (Q&A logistics)
+12:25 What about text properties vs. buffer-local variables to store position cache?
+18:40 Followup on earlier cl-defstruct benchmark discussion RE: AVL trees
+30:48 Does cl-defstruct have memory overhead/general memory usage discussion
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/forever-nav.md b/2021/info/forever-nav.md
new file mode 100644
index 00000000..cb708f2a
--- /dev/null
+++ b/2021/info/forever-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/build">How to build an Emacs</a>
+Next: <a href="/2021/talks/day2-close">Closing remarks day 2</a>
diff --git a/2021/info/forever-schedule.md b/2021/info/forever-schedule.md
new file mode 100644
index 00000000..6131ff19
--- /dev/null
+++ b/2021/info/forever-schedule.md
@@ -0,0 +1,81 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 24:52
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt" default />"""
+size="51.4M" duration="24:52" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters.org)
+[Download --compressed56.webm (27.6MB)](https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/jSW4Gk3hsuv2ZfW8jXHz39)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:01 Introduction and conclusion
+00:28 Who am I?
+01:07 Is Emacs unpopular?
+02:26 What does popularity really mean?
+04:15 How do we measure popularity?
+04:32 Google Trends
+06:18 Stack Overflow Survey
+08:20 Community Activity
+10:23 How do editors lose popularity?
+10:38 A new editor with better features appears
+12:25 Lack of sufficient maintenance
+14:01 The "fashion" moves on
+14:36 What happens when an editor loses popularity?
+17:10 How will Emacs survive *despite* popularity?
+17:20 Emacs is more deeply hackable than almost all other editors
+19:51 Emacs has a strong community of highly skilled package authors
+21:15 Emacs has a very strong user community
+22:33 The Emacs maintainers and contributors care about the users
+23:40 Isn't all this supposed to come when an editor is popular?
+24:22 When someone talks about popularity...
+"""]]
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers.png"
+size="116M" duration="56:57" other_resources="""[Download --answers--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--answers--chapters.vtt)
+"""]]
+[[!template id="chapters" vidid="qanda" data="""
+00:00 Thanks
+00:26 In your opinion, what is Emacs' Achilles heel?
+03:09 What is your opinion about the documentation of Emacs in other languages?
+05:06 Do you think more effort should be made to popularize hacking on the C parts of Emacs?
+06:31 Can you name a few features from other programming languages that you miss in Emacs Lisp?
+07:12 What are your opinions on Emacs's commitments to free software?
+08:22 Do you think that packages like Magit or Org mode make people see Emacs as an obstacle to these applications that they want to use?
+11:42 Another way people can help inspire others to use Emacs
+12:57 Should Emacs continue to present itself as an esoteric program and culture, or should we try to dispel the myth?
+14:49 Do you think there could be changes made to the core of Emacs that would betray the ethos you and most people here appreciate?
+15:22 When will David Wilson and Protesilaos collaborate?
+15:38 If you had to choose between graphics or real browser support within Emacs, which would you choose?
+16:28 How do you feel being an Emacs-focused YouTuber?
+18:29 More typesetting capabilities versus better performance
+20:31 Sneak peek of what's coming in the YouTube channel soon?
+24:43 Principles and compromises
+25:07 Understanding the value of Emacs Lisp
+26:10 Will you do a video showing your personal workflow?
+26:44 What do you think about Guix or NixOS?
+28:12 Can you talk about your actual work?
+31:18 Do your colleagues use Emacs as well?
+35:23 Any thoughts on the idea that the best tool to use is the one that is easiest to leave?
+39:23 Do you think there should be an updated initial configuration for fresh Emacs installations with more modern UI features and cool shortcuts?
+42:29 How hard is it to get into the native code side of Emacs?
+43:50 Emacs Chats
+46:28 Livestreams
+53:34 Short-form videos
+"""]]
+
+# Description
+
+
diff --git a/2021/info/form-nav.md b/2021/info/form-nav.md
new file mode 100644
index 00000000..a4dbf4e7
--- /dev/null
+++ b/2021/info/form-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/native">Emacs Lisp native compiler, current status and future developments</a>
+Next: <a href="/2021/talks/bindat">Turbo Bindat</a>
diff --git a/2021/info/form-schedule.md b/2021/info/form-schedule.md
new file mode 100644
index 00000000..106dfef6
--- /dev/null
+++ b/2021/info/form-schedule.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: IRC
+Duration: 12:44
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt" default />"""
+size="24.9M" duration="12:44" other_resources="""[Download --compressed56.webm (13.8MB)](https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt)
+[View on Toobnix](https://toobnix.org/w/mcyaNMBE1QpjvQa2qDayvi)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--answers.png"
+size="5.5M" duration="2:41" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/freedom-nav.md b/2021/info/freedom-nav.md
new file mode 100644
index 00000000..c99816b0
--- /dev/null
+++ b/2021/info/freedom-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/pattern">Emacs as Design Pattern Learning</a>
+Next: <a href="/2021/talks/nongnu">NonGNU ELPA Update</a>
diff --git a/2021/info/freedom-schedule.md b/2021/info/freedom-schedule.md
new file mode 100644
index 00000000..c3871089
--- /dev/null
+++ b/2021/info/freedom-schedule.md
@@ -0,0 +1,32 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: IRC
+Duration: 38:24
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt" default />"""
+size="85.9M" duration="38:24" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou.org)
+[Download --compressed56.webm (54.9MB)](https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/ktxYMzsYPYguc3HwkDiKea)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 About me and this talk
+04:44 The inherent Emacs qualities for an autodidact
+09:17 The interconnectedness of the Emacs space
+14:07 The documentation culture of the Emacs community
+18:55 The Promethean Ideal of freeing know-how and expertise
+23:59 The 'killer apps' of Emacs
+28:53 You can't be an Emacs tourist
+33:39 Emacs as a champion of software freedom
+"""]]
+
+# Description
+
+
diff --git a/2021/info/frownies-nav.md b/2021/info/frownies-nav.md
new file mode 100644
index 00000000..124a2b2d
--- /dev/null
+++ b/2021/info/frownies-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/news">Emacs News Highlights</a>
+Next: <a href="/2021/talks/omegat">Emacs manuals translation and OmegaT</a>
diff --git a/2021/info/frownies-schedule.md b/2021/info/frownies-schedule.md
new file mode 100644
index 00000000..bdb26131
--- /dev/null
+++ b/2021/info/frownies-schedule.md
@@ -0,0 +1,44 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: maybe live
+Duration: 19:40
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt" default />"""
+size="65.3M" duration="19:40" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth.org)
+[Download --compressed56.webm (26.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/5s64FqtX3pqq4uYDwtTvrA)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 Introduction
+01:01 Before the beginning, the Beginning
+02:07 Oops
+02:56 Yada yada yada
+04:52 During all this time...
+06:51 Pandemic
+07:29 Anyway
+08:50 A growing obsession
+09:38 What is the point of all of this? I thought we were talking about frowing.
+10:32 Conversation
+11:14 Later...
+11:33 frowny.el
+"""]]
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--answers.png"
+size="9.6M" duration="4:34" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/gregorian-nav.md b/2021/info/gregorian-nav.md
new file mode 100644
index 00000000..d6f62377
--- /dev/null
+++ b/2021/info/gregorian-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/nangulator">Introducing N-Angulator</a>
+Next: <a href="/2021/talks/telega">telega.el and the Emacs community on Telegram</a>
diff --git a/2021/info/gregorian-schedule.md b/2021/info/gregorian-schedule.md
new file mode 100644
index 00000000..37defbee
--- /dev/null
+++ b/2021/info/gregorian-schedule.md
@@ -0,0 +1,30 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: IRC
+Duration: 8:08
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt" default />"""
+size="7.9M" duration="8:06" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king.org)
+[Download --compressed56.webm (7MB)](https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/ig7rS3VpJjLXCLeq5GYb5z)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 Title
+00:10 Roadmap
+00:46 Gregorio
+01:46 Metadata
+02:08 `gregorian-mode`
+02:48 Examples
+06:49 Useful links
+"""]]
+
+# Description
+
+
diff --git a/2021/info/imaginary-nav.md b/2021/info/imaginary-nav.md
new file mode 100644
index 00000000..30e50199
--- /dev/null
+++ b/2021/info/imaginary-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/eaf">Emacs Application Framework: A 2021 Update</a>
+Next: <a href="/2021/talks/clede">CLEDE: the Common Lisp Emacs Development Environment</a>
diff --git a/2021/info/imaginary-schedule.md b/2021/info/imaginary-schedule.md
new file mode 100644
index 00000000..21e9eda8
--- /dev/null
+++ b/2021/info/imaginary-schedule.md
@@ -0,0 +1,30 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A or IRC
+Duration: 10:17
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.vtt" default />"""
+size="32.2M" duration="10:17" other_resources="""[Download .pdf](https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan.pdf)
+[Download --compressed56.webm (19.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.vtt)
+[View on Toobnix](https://toobnix.org/w/3ydn2davFQZPoiwB78KZWm)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--answers.png"
+size="24.1M" duration="32:18" other_resources="""[Download --answers--compressed32.webm (20.9MB)](https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--answers--compressed32.webm)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/invoice-nav.md b/2021/info/invoice-nav.md
new file mode 100644
index 00000000..58d2665b
--- /dev/null
+++ b/2021/info/invoice-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/molecular">Reproducible molecular graphics with Org-mode</a>
+Next: <a href="/2021/talks/project">Budgeting, Project Monitoring and Invoicing with Org Mode</a>
diff --git a/2021/info/invoice-schedule.md b/2021/info/invoice-schedule.md
new file mode 100644
index 00000000..842c97f3
--- /dev/null
+++ b/2021/info/invoice-schedule.md
@@ -0,0 +1,21 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: answering after the conference
+Duration: 9:59
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.vtt" default />"""
+size="31.7M" duration="9:59" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai.org)
+[Download --compressed56.webm (14.9MB)](https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.vtt)
+[View on Toobnix](https://toobnix.org/w/kD6nFQsJFSQys8DCmR76gi)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/janitor-nav.md b/2021/info/janitor-nav.md
new file mode 100644
index 00000000..68f0060c
--- /dev/null
+++ b/2021/info/janitor-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/telega">telega.el and the Emacs community on Telegram</a>
+Next: <a href="/2021/talks/erg">Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year</a>
diff --git a/2021/info/janitor-schedule.md b/2021/info/janitor-schedule.md
new file mode 100644
index 00000000..f84df3e2
--- /dev/null
+++ b/2021/info/janitor-schedule.md
@@ -0,0 +1,65 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A or IRC
+Duration: 25:57
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt" default />"""
+size="53.4M" duration="25:57" other_resources="""[Download --compressed56.webm (36.3MB)](https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt)
+[View on Toobnix](https://toobnix.org/w/1h7QmFBDjBQZPBeWtARK9j)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--answers.png"
+size="76.8M" duration="41:05" other_resources=""""""]]
+[[!template id="chapters" vidid="qanda" data="""
+00:00 BBB: Tools like coccinelle might work with changes like this in Lisp...
+02:19 BBB: I thought lexical binding conversion would be more proof-based...
+05:01 BBB: Is the Emacs in the presentation your personal config?
+06:04 How often these changes break packages/maintainers complain about changes
+08:52 Which Emacs subsystem was the hardest to convert to lexical binding?
+10:10 BBB: Would you consider making more short informal videos to help others?
+10:32 BBB: I'm curious about your style of signing your mailing list messages.
+11:25 BBB: Older code being harder to convert
+12:40 BBB: Could metaobject protocol support come to Elisp?
+14:10 BBB: What features do you see as higher priority for future development?
+16:55 BBB: Would ELPA download counts be difficult to code?
+17:55 BBB: Do you install packages from MELPA?
+18:55 BBB: Are you using native-comp already?
+20:10 BBB: Do you use Org much?
+21:10 BBB: Do you use magit?
+22:05 BBB: Some future Emacs improvements you're looking forward to?
+23:10 BBB: Opinion about recent GStreamer patches?
+24:20 BBB: Have you ever met other Emacs maintainers/developers in person?
+25:25 BBB: What's Lars like in real life? He seems fun.
+25:58 BBB: How do you hack on installed packages?
+27:43 BBB: Is Lars tall?
+28:06 BBB: How Elisp should evolve, or is another language the long-term path?
+30:29 BBB: Do you use paredit?
+30:33 BBB: Do you lean toward Scheme-style macros rather than CL ones?
+32:04 BBB: What non-Lisp languages could we take inspiration from?
+32:43 BBB: I'd like to see something like a with-gensyms macro to make them easier.
+33:42 BBB: Can namespaces solve some macro issues?
+34:15 BBB: Difficulties preserving source code data for symbols and sexps?
+36:24 BBB: Doesn't adding code/data distinction break homoiconicity?
+36:40 BBB: Could a Clojure-like metadata approach to this be useful?
+37:14 Fat cons cells/symbols
+38:32 BBB: Could fat cons cells be used for CL-style VALUES too?
+38:57 Concurrent garbage collection
+39:52 BBB: GC work even more tedious than janitorial work?
+40:50 BBB: Are you Canadian/Quebecois, or do you just live and work there?
+"""]]
+
+# Description
+
+
diff --git a/2021/info/maintainers-nav.md b/2021/info/maintainers-nav.md
new file mode 100644
index 00000000..3e739681
--- /dev/null
+++ b/2021/info/maintainers-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/clede">CLEDE: the Common Lisp Emacs Development Environment</a>
+Next: <a href="/2021/talks/build">How to build an Emacs</a>
diff --git a/2021/info/maintainers-schedule.md b/2021/info/maintainers-schedule.md
new file mode 100644
index 00000000..44c78276
--- /dev/null
+++ b/2021/info/maintainers-schedule.md
@@ -0,0 +1,67 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 10:07
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt" default />"""
+size="14.7M" duration="10:07" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry.org)
+[Download --compressed56.webm (9.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/naNvWzM2jjj5ownu9zmbAf)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 Introduction
+00:47 What is a free software maintainer?
+02:19 What do I do as the Org maintainer?
+03:24 Do you see a pattern here?
+04:18 What a free software maintainer is or should be
+05:03 Summary
+05:26 ACDC: Asynchronous Collective Distributed Care
+06:28 How can you help Emacs maintainers?
+06:37 Become a maintainer for your own project, however small
+06:56 Volunteer as a contributor steward for another project
+07:10 Learn how to teach
+07:25 Test and enhance the project's contribution process
+07:35 Take care of the project's calls for help
+07:52 Encourage users from outside the project to contribute to the core forum
+08:08 Let the core forum know about what happens in this outside world
+08:16 Propose your help for non-code tasks
+08:26 If you expect someone else to fix your bug, try fixing someone else's bug first
+08:42 Don't expect the maintainer to be a hotline
+08:49 Complete this list
+08:57 Yes, this is hard
+09:35 Thanks
+"""]]
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--answers.png"
+size="153M" duration="58:55" other_resources="""[Download --answers--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--answers--chapters.vtt)
+"""]]
+[[!template id="chapters" vidid="qanda" data="""
+00:00 Thanks
+04:30 How did you come up with this knowledge? By doing or by experience or by reading books? Which?
+06:10 How did you come to start using Org?
+08:39 You have recently overseen a major transition for org mode maintenance. What would you advise for other teams that are preparing for transitions so that processes can be maintained with minimal disruption? How do we take processes that were originally maintained by a single person to one maintained by multiple people?
+10:55 Which place is the right place to request a dark mode in Org Mode website?
+11:27 More thanks
+15:09 Does this mean that you do not need to be technical to become a maintainer?
+17:24 What does the day of the Org Mode maintainer look like? Lots of hours of work every day?
+21:11 Do you think having centralized roles for people to carry out certain tasks such as documentation across multiple areas would be a constructive approach to inviting new maintainers (in contrast to "every person take an issue of their own choosing", which leaves parts of maintenance and documentation neglected)?
+24:21 I think Org has and may potentially greatly influence Emacs development. If you would tend to agree, do you have places where you feel Emacs need to "pull back" harder, to influence Org? Key areas where Org is clearly "leading the way"?
+27:52 Could you expand a little on what's happening on contrib?
+35:32 Orgdown
+54:54 What about backlinks?
+"""]]
+
+# Description
+
+
diff --git a/2021/info/model-nav.md b/2021/info/model-nav.md
new file mode 100644
index 00000000..9705309d
--- /dev/null
+++ b/2021/info/model-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/mold">Moldable Emacs, a step towards sustainable software</a>
+Next: <a href="/2021/talks/native">Emacs Lisp native compiler, current status and future developments</a>
diff --git a/2021/info/model-schedule.md b/2021/info/model-schedule.md
new file mode 100644
index 00000000..1c9dee62
--- /dev/null
+++ b/2021/info/model-schedule.md
@@ -0,0 +1,20 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: after the conference
+Duration: 9:49
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.vtt" default />"""
+size="9.6M" duration="9:49" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij.org)
+[Download --compressed56.webm (8.6MB)](https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.vtt)
+[View on Toobnix](https://toobnix.org/w/vsuuxy2SUsWpcLoeAtqJhG)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/mold-nav.md b/2021/info/mold-nav.md
new file mode 100644
index 00000000..82381b8a
--- /dev/null
+++ b/2021/info/mold-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/ui">Yak-shaving to a UI framework</a>
+Next: <a href="/2021/talks/model">Extending the "model" of Emacs to other applications</a>
diff --git a/2021/info/mold-schedule.md b/2021/info/mold-schedule.md
new file mode 100644
index 00000000..f277166a
--- /dev/null
+++ b/2021/info/mold-schedule.md
@@ -0,0 +1,20 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: IRC or Etherpad
+Duration: 9:34
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.vtt" default />"""
+size="22.7M" duration="9:34" other_resources="""[Download --compressed56.webm (14.2MB)](https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.vtt)
+[View on Toobnix](https://toobnix.org/w/4CfNuj8YPpB8HreQHqGXWf)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/molecular-nav.md b/2021/info/molecular-nav.md
new file mode 100644
index 00000000..b6a6ea4c
--- /dev/null
+++ b/2021/info/molecular-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/research">Managing a research workflow (bibliographies, note-taking, and arXiv)</a>
+Next: <a href="/2021/talks/invoice">Finding Your (In)voice: Emacs for Invoicing</a>
diff --git a/2021/info/molecular-schedule.md b/2021/info/molecular-schedule.md
new file mode 100644
index 00000000..e978279b
--- /dev/null
+++ b/2021/info/molecular-schedule.md
@@ -0,0 +1,21 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A or Etherpad
+Duration: 8:04
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.vtt" default />"""
+size="11.8M" duration="8:04" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers.org)
+[Download .pdf (3.3MB)](https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers.pdf)
+[Download --compressed56.webm (8.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.vtt)
+[View on Toobnix](https://toobnix.org/w/tKmTCVtngTLQfQzHpG4BgU)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/montessori-nav.md b/2021/info/montessori-nav.md
new file mode 100644
index 00000000..db08ce44
--- /dev/null
+++ b/2021/info/montessori-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/unix">GNU's Not UNIX: Why Emacs Demonstrates The UNIX Philosophy Isn't Always The Only Answer</a>
+Next: <a href="/2021/talks/pattern">Emacs as Design Pattern Learning</a>
diff --git a/2021/info/montessori-schedule.md b/2021/info/montessori-schedule.md
new file mode 100644
index 00000000..75891ba0
--- /dev/null
+++ b/2021/info/montessori-schedule.md
@@ -0,0 +1,48 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 10:27
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt" default />"""
+size="15.1M" duration="10:27" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux.org)
+[Download --compressed56.webm (11.4MB)](https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/c5sEmoZbK3ay1b9VGNmP1z)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:04 Introduction
+00:20 Respect
+00:35 The Prepared Environment
+01:19 Human tendencies
+01:56 Orientation
+03:30 Order
+04:26 Exploration
+05:12 Communication
+05:46 Activity
+06:21 Manipulation
+06:48 Work (or Purposeful Activity)
+07:09 Repetition
+07:38 Exactness
+08:16 Abstraction
+09:02 Perfection
+"""]]
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--answers.png"
+size="5.6M" duration="2:19" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/nangulator-nav.md b/2021/info/nangulator-nav.md
new file mode 100644
index 00000000..53d8f118
--- /dev/null
+++ b/2021/info/nangulator-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/borg">Manual Package Management in The Era of Repositories - Why and How</a>
+Next: <a href="/2021/talks/gregorian">Typesetting Gregorian Chant with Emacs</a>
diff --git a/2021/info/nangulator-schedule.md b/2021/info/nangulator-schedule.md
new file mode 100644
index 00000000..21604bb8
--- /dev/null
+++ b/2021/info/nangulator-schedule.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: IRC
+Duration: 9:58
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt" default />"""
+size="13.7M" duration="9:58" other_resources="""[Download --compressed56.webm (9.8MB)](https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt)
+[View on Toobnix](https://toobnix.org/w/pHrShaGAJwtXvsqKhNWZ56)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--answers.png"
+size="2.7M" duration="1:07" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/native-nav.md b/2021/info/native-nav.md
new file mode 100644
index 00000000..b69fa020
--- /dev/null
+++ b/2021/info/native-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/model">Extending the "model" of Emacs to other applications</a>
+Next: <a href="/2021/talks/form">Old McCarthy Had a Form</a>
diff --git a/2021/info/native-schedule.md b/2021/info/native-schedule.md
new file mode 100644
index 00000000..49712db5
--- /dev/null
+++ b/2021/info/native-schedule.md
@@ -0,0 +1,62 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 39:08
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.vtt" default />"""
+size="89M" duration="39:08" other_resources="""[Download .odp (3.6MB)](https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo.odp)
+[Download --compressed56.webm (40.8MB)](https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.vtt)
+[View on Toobnix](https://toobnix.org/w/aCnFuNEzX1kMKJp3q31YKx)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--answers.png"
+size="141.8M" duration="75:02" other_resources="""[Download --answers--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--answers--chapters.vtt)
+"""]]
+[[!template id="chapters" vidid="qanda" data="""
+00:00 Thanks
+01:16 Why is Elisp not a general-purpose programming language, at least not completely?
+02:05 Is this activity related to the garbage collector?
+02:37 Is the idea to eventually develop Emacs itself in Elisp?
+03:42 How did you work on this?
+04:27 Does this compilation pipeline introduce vulnerabilities?
+05:39 What code, if any, will still benefit significantly from being written in C?
+07:28 What's the risk of (setq native-comp-speed 3)?
+08:49 Are there any limits introduced by native comp with respect to runtime introspectability, changeability/redefinability, etc?
+09:15 Is there a benefit in setting native-comp-compiler-options to "-mtune=native -march="?
+10:11 You mentioned native-comp coming in emacs 28. Will this be the default at build time, or will distros have to set this themselves?
+11:54 Could we avoid libgccjit.so? Or consider using another jit lib (e.g. dynasm used by luajit) et al to gain better optimization?
+14:22 How much of Emacs's C code base could be translated to emacs-lisp? What is the minimum C code base necessary?
+16:23 Could we statically type elisp code (via macros?) to provide more optimization hints to compiler?
+17:27 Elisp and Python all are dynamically typed langauge, but benchmark shows that Elisp runs slower than Python. Could we learn some best practices from the Python community?
+18:55 Did you try to optimize with Rust too? What are your thoughts on Rust for this particular optimization and security?
+21:35 Does the native compilation interface with the Emacs profiling tools?
+22:59 Where did funding for your work come from?
+27:04 What kind of application do I envision native comp enabling to work well in Emacs in the next few years, and which one would not be possible?
+28:36 Is this the first real-world practical use of libgccjit?
+29:47 Is there any task you need help with?
+33:49 What's a good way to proceed?
+38:37 What kind of packages do you think could now be practical with native comp?
+40:46 Why not implement Emacs Lisp in Guile and use Guile's compiler?
+46:29 What are some other hobbies/interests of yours besides Emacs?
+48:27 Will you be presenting at ELS or anywhere else in the next year?
+51:04 How to make Emacs more popular?
+59:46 Do you have 'wish list' features, things you long for Emacs to be able to do?
+01:02:04 From BBB chat: dickmao has a patch that makes Gnus async....
+01:05:33 Advice for anyone who wants to bring something into Emacs core
+01:10:20 Do you have any advice on how to approach the upstream development community?
+"""]]
+
+# Description
+
+
diff --git a/2021/info/news-nav.md b/2021/info/news-nav.md
new file mode 100644
index 00000000..ddc9fc9d
--- /dev/null
+++ b/2021/info/news-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/day1-open">Opening remarks</a>
+Next: <a href="/2021/talks/frownies">The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability</a>
diff --git a/2021/info/news-schedule.md b/2021/info/news-schedule.md
new file mode 100644
index 00000000..17eabbb3
--- /dev/null
+++ b/2021/info/news-schedule.md
@@ -0,0 +1,35 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: answering after the conference
+Duration: 4:24
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt" default />"""
+size="13M" duration="4:23" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua.org)
+[Download --compressed56.webm (6.1MB)](https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/ueMACQQh39buYwf5K9Y5fh)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 Introduction
+00:11 Upcoming Emacs 28 release
+00:24 Org mode 9.5
+00:57 Magit major release
+01:18 Completion
+01:51 Embark
+02:12 tree-sitter
+02:44 Collaborative editing
+03:03 Graphical experiments
+03:41 Community
+04:00 libera.chat
+"""]]
+
+# Description
+
+
diff --git a/2021/info/nongnu-nav.md b/2021/info/nongnu-nav.md
new file mode 100644
index 00000000..4b054ec0
--- /dev/null
+++ b/2021/info/nongnu-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/freedom">How Emacs made me appreciate software freedom</a>
+Next: <a href="/2021/talks/borg">Manual Package Management in The Era of Repositories - Why and How</a>
diff --git a/2021/info/nongnu-schedule.md b/2021/info/nongnu-schedule.md
new file mode 100644
index 00000000..e0faeac9
--- /dev/null
+++ b/2021/info/nongnu-schedule.md
@@ -0,0 +1,20 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A or IRC
+Duration: 6:28
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.vtt" default />"""
+size="10.6M" duration="6:28" other_resources="""[Download --compressed56.webm (7.2MB)](https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.vtt)
+[View on Toobnix](https://toobnix.org/w/ovpi53peSt7aX8EtvKMFFy)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/nyxt-nav.md b/2021/info/nyxt-nav.md
new file mode 100644
index 00000000..5900f8ec
--- /dev/null
+++ b/2021/info/nyxt-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/dashboard">Productivity Dashboards with Emacs and Kindle</a>
+Next: <a href="/2021/talks/dev-update">Emacs development updates</a>
diff --git a/2021/info/nyxt-schedule.md b/2021/info/nyxt-schedule.md
new file mode 100644
index 00000000..0b4003b3
--- /dev/null
+++ b/2021/info/nyxt-schedule.md
@@ -0,0 +1,20 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: IRC or Etherpad
+Duration: 8:26
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.vtt" default />"""
+size="27.2M" duration="8:26" other_resources="""[Download --compressed56.webm (24.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.vtt)
+[View on Toobnix](https://toobnix.org/w/qBpVxaayFezJMgG9WVQsoy)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/omegat-nav.md b/2021/info/omegat-nav.md
new file mode 100644
index 00000000..13d1bf25
--- /dev/null
+++ b/2021/info/omegat-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/frownies">The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability</a>
+Next: <a href="/2021/talks/unix">GNU's Not UNIX: Why Emacs Demonstrates The UNIX Philosophy Isn't Always The Only Answer</a>
diff --git a/2021/info/omegat-schedule.md b/2021/info/omegat-schedule.md
new file mode 100644
index 00000000..5d2312d0
--- /dev/null
+++ b/2021/info/omegat-schedule.md
@@ -0,0 +1,23 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A / IRC / pad
+Duration: 9:07
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.vtt" default /><track label="French" kind="captions" srclang="fr" src="/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_fr.vtt" /><track label="Japanese" kind="captions" srclang="ja" src="/2021/captions/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_ja.vtt" />"""
+size="15.2M" duration="9:07" other_resources="""[Download .pdf (3.8MB)](https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary.pdf)
+[Download --compressed56.webm (9.3MB)](https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.vtt)
+[Download --main_fr.vtt](https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_fr.vtt)
+[Download --main_ja.vtt](https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_ja.vtt)
+[View on Toobnix](https://toobnix.org/w/cQbCi4a9E3YVSW9KdiyW2V)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/org-outside-nav.md b/2021/info/org-outside-nav.md
new file mode 100644
index 00000000..967665ae
--- /dev/null
+++ b/2021/info/org-outside-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/exec">Org as an executable format</a>
+Next: <a href="/2021/talks/teach">Using Org-mode to teach programming</a>
diff --git a/2021/info/org-outside-schedule.md b/2021/info/org-outside-schedule.md
new file mode 100644
index 00000000..eabc3e85
--- /dev/null
+++ b/2021/info/org-outside-schedule.md
@@ -0,0 +1,27 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A or IRC
+Duration: 12:09
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.vtt" default />"""
+size="27.1M" duration="12:09" other_resources="""[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.vtt)
+[View on Toobnix](https://toobnix.org/w/g35zpQfCCqDM39ZMEphNj7)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--answers.png" captions=""""""
+size="64.9M" duration="27:32" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/pattern-nav.md b/2021/info/pattern-nav.md
new file mode 100644
index 00000000..bcd8c1bc
--- /dev/null
+++ b/2021/info/pattern-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/montessori">Emacs and Montessori Philosophy</a>
+Next: <a href="/2021/talks/freedom">How Emacs made me appreciate software freedom</a>
diff --git a/2021/info/pattern-schedule.md b/2021/info/pattern-schedule.md
new file mode 100644
index 00000000..8ac855cc
--- /dev/null
+++ b/2021/info/pattern-schedule.md
@@ -0,0 +1,33 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: IRC
+Duration: 23:01
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt" default />"""
+size="131.8M" duration="23:01" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.org)
+[Download .pdf](https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.pdf)
+[Download --compressed56.webm (36.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/afvaVspSSR9YypjUqTypQz)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 Introduction
+01:16 Definition of design patterns and relation to Emacs
+05:18 Why this approach matters
+09:12 Managing complexity: Emacs as mind map
+11:30 Emacs as design pattern framework
+12:31 Personal customization
+13:30 Implementing Emacs as a model for learning
+16:41 Emacs as accommodating complex social, community assemblages
+"""]]
+
+# Description
+
+
diff --git a/2021/info/professional-nav.md b/2021/info/professional-nav.md
new file mode 100644
index 00000000..6410f415
--- /dev/null
+++ b/2021/info/professional-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/cs">One effective CS grad student workflow</a>
+Next: <a href="/2021/talks/tech">Creating technical API documentation and presentations using org-babel, restclient, and org-treeslide</a>
diff --git a/2021/info/professional-schedule.md b/2021/info/professional-schedule.md
new file mode 100644
index 00000000..c86ca03c
--- /dev/null
+++ b/2021/info/professional-schedule.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A or IRC
+Duration: 10:33
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.vtt" default />"""
+size="15.1M" duration="10:33" other_resources="""[Download --compressed56.webm (9.1MB)](https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.vtt)
+[View on Toobnix](https://toobnix.org/w/rXjPE7hdELfGJhFFUqFhF5)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/project-nav.md b/2021/info/project-nav.md
new file mode 100644
index 00000000..a7234abc
--- /dev/null
+++ b/2021/info/project-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/invoice">Finding Your (In)voice: Emacs for Invoicing</a>
+Next: <a href="/2021/talks/dashboard">Productivity Dashboards with Emacs and Kindle</a>
diff --git a/2021/info/project-schedule.md b/2021/info/project-schedule.md
new file mode 100644
index 00000000..bea8f069
--- /dev/null
+++ b/2021/info/project-schedule.md
@@ -0,0 +1,32 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Duration: 9:37
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt" default />"""
+size="37.5M" duration="9:37" other_resources="""[Download --compressed56.webm (15.3MB)](https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/71vGdiqdkaN1bAcoDd8VkT)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:01 Introduction
+00:10 How we build and budget project proposals
+01:42 Org mode template with embedded Emacs Lisp
+02:58 The project plan
+03:37 Effort
+04:40 Hourly rates
+06:07 Totals
+07:28 Payment structure
+08:21 Export
+09:08 Advantages
+"""]]
+
+# Description
+
+
diff --git a/2021/info/research-nav.md b/2021/info/research-nav.md
new file mode 100644
index 00000000..b33750bc
--- /dev/null
+++ b/2021/info/research-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/babel">Babel for academics</a>
+Next: <a href="/2021/talks/molecular">Reproducible molecular graphics with Org-mode</a>
diff --git a/2021/info/research-schedule.md b/2021/info/research-schedule.md
new file mode 100644
index 00000000..0513a189
--- /dev/null
+++ b/2021/info/research-schedule.md
@@ -0,0 +1,29 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: maybe live
+Duration: 8:47
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt" default />"""
+size="19.2M" duration="8:47" other_resources="""[Download .el](https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled.el)
+[Download --compressed56.webm (14.2MB)](https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/jTXAtCYNWFPRFR1pt94yi1)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 Introduction
+00:51 Elfeed
+02:30 org-ref
+03:50 BibLaTeX
+05:48 Notes and org-roam
+"""]]
+
+# Description
+
+
diff --git a/2021/info/rust-nav.md b/2021/info/rust-nav.md
new file mode 100644
index 00000000..5466829e
--- /dev/null
+++ b/2021/info/rust-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/devel">Don't write that package! or: How I learned to stop worrying and love emacs-devel</a>
+Next: <a href="/2021/talks/mold">Moldable Emacs, a step towards sustainable software</a>
diff --git a/2021/info/rust-schedule.md b/2021/info/rust-schedule.md
new file mode 100644
index 00000000..714d33ef
--- /dev/null
+++ b/2021/info/rust-schedule.md
@@ -0,0 +1,10 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+Q&A: talk cancelled
+Status: Cancelled
+Duration: 20 minutes
+
+
+# Description
+
+
diff --git a/2021/info/structural-nav.md b/2021/info/structural-nav.md
new file mode 100644
index 00000000..36d0ed3e
--- /dev/null
+++ b/2021/info/structural-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/faster">Optimizing Emacs Lisp Code</a>
+Next: <a href="/2021/talks/ui">Yak-shaving to a UI framework</a>
diff --git a/2021/info/structural-schedule.md b/2021/info/structural-schedule.md
new file mode 100644
index 00000000..1bd2d149
--- /dev/null
+++ b/2021/info/structural-schedule.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 10:24
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.vtt" default />"""
+size="15M" duration="10:24" other_resources="""[Download --compressed56.webm (13MB)](https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.vtt)
+[View on Toobnix](https://toobnix.org/w/8Smc22cLzi7UzosijPt7DP)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--answers.png"
+size="3.3M" duration="1:59" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/teach-nav.md b/2021/info/teach-nav.md
new file mode 100644
index 00000000..6f69846e
--- /dev/null
+++ b/2021/info/teach-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/org-outside">The use of Org mode syntax outside of GNU/Emacs</a>
+Next: <a href="/2021/talks/babel">Babel for academics</a>
diff --git a/2021/info/teach-schedule.md b/2021/info/teach-schedule.md
new file mode 100644
index 00000000..3159ab62
--- /dev/null
+++ b/2021/info/teach-schedule.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A or IRC
+Duration: 20:49
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt" default />"""
+size="42.7M" duration="20:49" other_resources="""[Download --compressed56.webm (26.5MB)](https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt)
+[View on Toobnix](https://toobnix.org/w/w6CowfCZotPnYkwhudU32V)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--answers.png"
+size="28.6M" duration="12:13" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/tech-nav.md b/2021/info/tech-nav.md
new file mode 100644
index 00000000..3d35606c
--- /dev/null
+++ b/2021/info/tech-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/professional">Using Org-Mode For Recording Continuous Professional Development</a>
+Next: <a href="/2021/talks/exec">Org as an executable format</a>
diff --git a/2021/info/tech-schedule.md b/2021/info/tech-schedule.md
new file mode 100644
index 00000000..397c0e10
--- /dev/null
+++ b/2021/info/tech-schedule.md
@@ -0,0 +1,29 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A or IRC
+Duration: 10:22
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.vtt" default />"""
+size="17.1M" duration="10:22" other_resources="""[Download --compressed56.webm (15.9MB)](https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.vtt)
+[View on Toobnix](https://toobnix.org/w/2pPvDFSAwr2zhGfHGHUbko)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--answers.png"
+size="1.7M" duration="0:48" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/info/telega-nav.md b/2021/info/telega-nav.md
new file mode 100644
index 00000000..5ae45d7b
--- /dev/null
+++ b/2021/info/telega-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/gregorian">Typesetting Gregorian Chant with Emacs</a>
+Next: <a href="/2021/talks/janitor">A day in the life of a janitor</a>
diff --git a/2021/info/telega-schedule.md b/2021/info/telega-schedule.md
new file mode 100644
index 00000000..633faf90
--- /dev/null
+++ b/2021/info/telega-schedule.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: after the conference
+Duration: 7:58
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt" default />"""
+size="10.5M" duration="7:58" other_resources="""[Download --compressed56.webm (8.1MB)](https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt)
+[View on Toobnix](https://toobnix.org/w/g1YBMdbNqMHMZu7wCHB5rH)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/test-nav.md b/2021/info/test-nav.md
new file mode 100644
index 00000000..387ab000
--- /dev/null
+++ b/2021/info/test-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/bindat">Turbo Bindat</a>
+Next: <a href="/2021/talks/bidi">Perso-Arabic Input Methods And Making More Emacs Apps BIDI Aware</a>
diff --git a/2021/info/test-schedule.md b/2021/info/test-schedule.md
new file mode 100644
index 00000000..e5c0b9b0
--- /dev/null
+++ b/2021/info/test-schedule.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: IRC
+Duration: 6:04
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-test--test-blocks--eduardo-ochs--main.vtt" default />"""
+size="10M" duration="6:04" other_resources="""[Download --compressed56.webm (7.7MB)](https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.vtt)
+[View on Toobnix](https://toobnix.org/w/qRKLj4VdBG8cFN1MEfcRho)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/ui-nav.md b/2021/info/ui-nav.md
new file mode 100644
index 00000000..a400cea8
--- /dev/null
+++ b/2021/info/ui-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/structural">Tree-edit: Structural editing for Java, Python, C, and beyond!</a>
+Next: <a href="/2021/talks/mold">Moldable Emacs, a step towards sustainable software</a>
diff --git a/2021/info/ui-schedule.md b/2021/info/ui-schedule.md
new file mode 100644
index 00000000..c01ea6e1
--- /dev/null
+++ b/2021/info/ui-schedule.md
@@ -0,0 +1,29 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live Q&A or Etherpad
+Duration: 9:28
+
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.vtt" default />"""
+size="13.5M" duration="9:28" other_resources="""[Download --compressed56.webm (10.6MB)](https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.vtt)
+[View on Toobnix](https://toobnix.org/w/cwoEZmDr3YDAkskSq8nYEf)
+"""]]
+
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--answers.png"
+size="31M" duration="20:54" other_resources="""[Download --answers--compressed32.webm (28MB)](https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--answers--compressed32.webm)
+"""]]
+
+
+# Description
+
+
diff --git a/2021/info/unix-nav.md b/2021/info/unix-nav.md
new file mode 100644
index 00000000..d6905af2
--- /dev/null
+++ b/2021/info/unix-nav.md
@@ -0,0 +1,3 @@
+Back to the [[schedule]]
+Previous: <a href="/2021/talks/omegat">Emacs manuals translation and OmegaT</a>
+Next: <a href="/2021/talks/montessori">Emacs and Montessori Philosophy</a>
diff --git a/2021/info/unix-schedule.md b/2021/info/unix-schedule.md
new file mode 100644
index 00000000..7c8e0715
--- /dev/null
+++ b/2021/info/unix-schedule.md
@@ -0,0 +1,46 @@
+<!-- Automatically generated by conf-create-info-pages -->
+
+[[!toc ]]
+Q&A: live
+Duration: 6:41
+
+[[!inline pages="internal(2021/inline-alternate)" raw="yes"]]
+
+If you have questions and the speaker has not indicated public contact information on this page, please feel free to e-mail us at <emacsconf-submit@gnu.org> and we'll forward your question to the speaker.
+
+# Talk
+
+[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.png" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt" default />"""
+size="10.4M" duration="6:41" other_resources="""[Download .org](https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose.org)
+[Download --compressed56.webm (6.1MB)](https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--compressed56.webm)
+[Download --main.vtt](https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt)
+[Download --chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--chapters.vtt)
+[Download --main--chapters.vtt](https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main--chapters.vtt)
+[View on Toobnix](https://toobnix.org/w/18qckj5KshdahW5AiUuMHB)
+"""]]
+[[!template id="chapters" vidid="mainVideo" data="""
+00:00 Introduction
+00:31 UNIX Philosophy?
+00:57 Enter Emacs
+01:25 Emacs versus the original ideas
+01:50 Why compare to UNIX?
+02:17 Emacs /does/ work with the UNIX philosophy
+02:59 Philosophies don't really matter in computing
+03:15 Android Studio
+04:14 Window Managers
+04:42 Browsers
+05:09 Vim
+05:34 Terminals
+06:12 Do what helps you most, not what a philosophy tells you
+"""]]
+
+
+# Q&A
+
+[[!template id="vid" vidid="qanda" src="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--answers.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--answers.png"
+size="9.7M" duration="3:39" other_resources=""""""]]
+
+
+# Description
+
+
diff --git a/2021/inline-alternate.md b/2021/inline-alternate.md
new file mode 100644
index 00000000..22257c05
--- /dev/null
+++ b/2021/inline-alternate.md
@@ -0,0 +1 @@
+This talk was also streamed at an alternate time for APAC hours: <https://libreau.org/past.html#emacsconf21>
diff --git a/2021/meetings.org b/2021/meetings.org
index f13ad338..0a29043f 100644
--- a/2021/meetings.org
+++ b/2021/meetings.org
@@ -18,7 +18,9 @@
- Tech
- Figuring out a better streaming workflow (speakers & OBS)
- CDN with Nate Sales: mplsCorwin, bandali
- - Stand-by until late-April
+ - maybe also FTP upload for speakers
+ - Stand-by for now
+ - Separate from Fosshost
- Documenting our infrastructure
- bandali and gopar's podcast: bandali, gopar
@@ -44,7 +46,7 @@
- Modernise the notes for our EmacsConf meetings
- Find a moment to talk with mplsCorwin about FH funding
-- EmacsConf
+- EmacsConf 2021
- Subtitles/transcripts: sachac, bhavin192
- Calendar, connecting with meetups: sachac, zaeph
- Guidebook for streaming: bandali, sachac, zaeph
@@ -52,23 +54,1150 @@
- Coming up with a way to coordinate meetings with *all* the organisers of the EmacsConf (rather than the core subset)
- Coming up with a calendar for the next edition
- Decide whether the live-version of the EmacsConf 2020 can be axed by [2021-06-12 Sat]
- - Coming up with different tracks
+ - Coming up with different tracks (TODO for [2021-08-21 Sat] )
- Meta track (for EmacsVerse stuff)
- - Gaming
+ - Community
- Org
+ - org-roam
- Multimedia & Fun
- Gaming
- Music
+ - Dev
+ - Emacs core
+ - Other emacs stuff
+ - Research
- Beginner’s track (dto & mplsCorwin?)
+ - We could also use sachac’s list of categories for Emacs news as input
+ - Live tasks during the conference
+ - zaeph:
+ - Doing volume checks when pre-recorded talks go live to do live normalisation
+ - Maybe bandali could look into easyeffects’s autogain?
+
+- EmacsConf 2022 and onwards
+ This entry is mostly for points we cannot address for EmacsConf 2021 (for lack of time), but that we’d still like to track for the future.
+ - We have plenty of lessons learned in conf.org. :)
+ - Improving the review process
+ - Involving the public (i.e. doing it publicly)
+ - Involving more communities
+ - Creating a new format for discussions/interviews
+ - e.g., talking with vimmers (the audacity, I know!)
+ - Think about funding
+ - Figuring out the financing of our infras
+ - bandali is taking care of a lot of our spendings right now; maybe we could dampen this amongst orgas?
+ - We all lament the fact that we can’t field longer 40-min talks anymore; maybe we could think about options?
+ - Multiple streams
+ - Different tracks on different days
+ - Split org from Emacs?
+ - Splitting is also a good incentive for both sides of the split to up their game (or to fill the void)
+ - Having a separate day for beginner- and developer-oriented talks?
+ - A week-long conference?
+ - It might be hard to jump from 2-day to full-week.
+ - It’s hard to have people available across the entire period.
+ - We should make it easier for other people to edit the conf.org for publishing the schedule; for 2021, sachac and zaeph were able to do it, but we should make it more our functions more robust.
+ - Add edit-in-place functionality to ikiwiki
+ - An alternative would be to enable push-via-https, but bandali isn’t enthused by it.
+ - Move the video-files to one of our FH server.
+ - We could have an alternate stream for captioned talks
+ - For 2021, we can just direct people to watching the talks from the talk-page.
+ - Working with BBB
+ - We could suggest some improvements to BBB based on our needs. Plenty of FLOSS projects rely on BBB, and I think it’d be fair to make some suggestions to them.
+ - Possible suggestions:
+ - Presentation layouts (based the CSS provided by bandali’s FSF colleague)
+ - Figuring out a better way to collate audio streams (normalisation, codecs)
- EmacsVerse
- Vet Mailman and exim instance for usergroups: bandali
+ - Figure out the interactions between (potential) emacsverse.org and emacs.org
+ - It’s about control domains and sources of truth
- Misc
- Writing about Emacs: zaeph
- mplsCorwin's livestreaming project, working on trimming
- Diversity outreach: gopar, sachac, zaeph, mplsCorwin
+* EmacsConf 2021: Long-running TODOs
+
+* December 11, 2021
+
+- Check-in:
+ - Time feels weird; it’s been both short and long since we last saw one another
+ - bandali
+
+- zaeph: We’ve talked about a lot of interesting stuff, but I couldn’t make significant points *and* take notes at the same time. The few haphazard notes I’ve written are in the next block.
+#+begin_quote
+- Async vs live meeting
+ - How do we keep all the organizers up to speed on what sachac and zaeph are working quasi-synchronously via IRC?
+ - bandali: Could we have a weekly email keeping everyone up to speed?
+ - corwin: It should be a 5-min read (not taking more than 15 min to write) allowing orgas who were busy elsewhere to be brought up to speed
+
+- Assessment of our organisation in the two weeks that followed EmacsConf
+ - Moving away from weekly minutes with TODOs to near-synchronous communication on IRC with a pad making it difficult to see the log resulted in a net loss of traceability of our projects
+ - corwin: Maybe it’s not an actual problem right now; yes, better communication would be better, but it can probably wait.
+ - Solutions:
+ - Splitting up #emacsconf-org into *thematic* topics like #emacsconf-infra, #emacsconf-post
+#+end_quote
+
+- Summary of changes, written hastily so as to not forget
+ - As a project grows, it becomes harder and harder for organisers to one-person-army everything; specialisation is a good solution.
+ - Core-organisers are in charge of the project and are the guarantor of its philosophy; we should keep an initial distinction between volunteers and core-organisers so as to maintain governance.
+ - Core-organisers should move away from the “I need to keep up with everything”, FOMO-like mentality; instead, they should specialise on *themes* that they enjoy working on and were they can satisfactorily handle the work-load.
+ - Volunteers are piped to relevant themes/projects relative to their interest; they become the soft-responsibility of the core-organiser in charge of the theme.
+ - Core-organisers manage their theme with as much flexibility as they want; the only important part is about keeping other core-organisers in the loop (potential solutions: weekly blurb for each theme written by the responsible core-organisers)
+ - If a core-organiser wants to participate in another theme than the one they’re responsible for, it’s completely fine.
+ - Weekly core-organisers meetings are phased out in favour of a new regular format where the core-organisers can hang out, check-in and discuss weekly blurbs if need be (≈ 20 min), and then have flexible sessions which can either be casual discussions or longer-term planning that would require brain-storming (like creating a new theme/project, e.g. “how to have another in-person EmacsConf?”).
+ - IRC has been instrumental to good communication for EmacsConf 2020 & 2021, and it’s only recently proved to be a bit of a burden with the line-backlogs. Splitting the channels according to themes might leverage that issue.
+ - Only the core-organisers in charge of a particular theme would be expected to keep track of the backlog; other core-organisers or volunteers are not expected to do that.
+ - We need to adapt our culture of note-taking an documentation to this new model to ensure that all core-organisers can contribute to the effort and benefit from it.
+
+* November 20, 2021
+
+- Check-in:
+ - sachac:
+ - Doing good!
+ - bandali:
+ - Doing better!
+ - zaeph:
+ - Doing good!
+
+- Dry run, see playbook.org
+ - DONE Working together via upcoming.org
+ - DONE Streaming [[https://live0.emacsconf.org/main.webm][main.webm]]
+ - DONE Streaming [[https://live0.emacsconf.org/main-480p.webm"][main-480p.webm]]
+ - CXLD Streaming [[https://live0.emacsconf.org/alt.webm"][alt.webm]]
+ - Doesn’t really work for corwin because of some weird setting problem
+ - STRT Streaming to YouTube
+- Next actions:
+ - streaming to alternate servers (youtube, toobnix)
+ - add 2021 link to all the schedule and talk pages so that people know how to watch/participate
+
+- media.emacsconf.org files will be moved to a mirror eventually
+
+(A lot of the work in this session was done in another file, which is why we have very little note here. What we’ve done will eventually end up in the wiki.)
+
+* November 13, 2021
+
+- TODOs/agenda: (two weeks to conference!)
+ - Status review of schedule, possibly follow up with day 2 (lots of missing talks)
+ - Lunch time is tight, want to end at 5:30 instead? (12:05-12:30 Sat, 12:06-12:40 Sat)
+ - Lunch time is tight, want to end at 5:30 instead?
+ - might be late for Leo, let's stick with the current schedule
+ - Sacha: Publish detailed schedule
+ - Get in touch with speakers regarding schedule, check-in 30 minutes before
+ - streaming process: Amin streams whatever room he's in, then switches to the next room? lots of sound checks for Amin, but it'll be fine
+ - OBS scenes for streaming prerec separately from whatever Amin is actually doing
+ - Hosting: zaeph to review the talks and think about the introductions
+ - Start working on list of speakers expected for live Q&A or live presentation? Actually, we'll want all the speakers to check in if available anyway, since we want to mention IRC/etherpad availability
+ - zaeph: Figured out MPV setup for open captions, yay! Will post the MPV profile so that we can all have fun with it.
+
+ - sachac: Figure out day-of publishing
+ - Will try to post prerecs on media.emacsconf.org, wiki pages, and YouTube during talk; ToobNix? bandali will send sachac the account information and then sachac can queue things up for publishing
+ - redirect to proper host if node is too small afterwards
+ - audio normalized
+ - Dry run next weekend?
+ - Rooms
+ - Streaming
+ - Script for low-res, YouTube
+ - Check-in
+ - Alternate stream?
+ - Alternate stream
+ - bandali will test things around with dragestil
+ - test Etherpad template: https://etherpad.wikimedia.org/p/emacsconf-2021-test
+ - conference schedule updater
+ - are we going to use honorifics like Dr.? zaeph - no
+- Tech-checks
+ - We’ve got two extra volunteers
+ - Considering that none of the speakers but one wanted to do tech-check so far
+- Other notes
+ - Sacha: checked IRC scripts, everything still seems fine
+ - https://github.com/emacsconf/emacsconf-el - zaeph to try
+ - TODO bandali: figure out how to deal with the back behaviour!
+ - xdg-open actually works in opening an URL without a preceding one
+ - MOSTLY-DONE :)
+ - Profiles for captions
+ - Figure out day-of publishing
+ - We should articulate the process on the pre-rec with updating the talk-pages on the wiki.
+ - On captions
+ - We’ve captioned most of the org talks on Saturday, yay!
+ - Considering how many recordings
+ - On talks we’ve already received
+ - Frownies might get re-submitted.
+ - Lunch time is tight, want to end at 5:30 instead? (12:05-12:30 Sat, 12:06-12:40 Sat)
+ - We’ll keep it to 5:30pm latest, since it gets quite late for.
+ - Handling check-ins for speakers
+ - sachac and zaeph
+ - 30 min before is less stressful for us
+ - 4-5 rooms need to be created on BBB
+
+- Summary of actions
+ - sachac:
+ - Publish schedule to the public wiki
+ - zaeph can take this information afterwards to figure out what to email to the speakers
+ - Figure out workflow for publishing prerecs on the day of the presentation
+ - It’ll be nice to have one command and have everything happen in the background
+ - Doublecheck ffmpeg commands for low-res, YouTube restreams
+ - Scrape pronunciations and pronouns from wiki pages / email, put them into conf.org (:PRONOUNS: and :PRONUNCIATIONS:)
+ - zaeph will take care of updating :PRONUNCIATIONS: when he receives email
+ - Modify scripts to msg bandali and zaeph with check-in info, include pronouns and pronunciation
+ - zaeph:
+ - Draft e-mail to ask speakers to check schedule, check again day of the conference if live, check in 30 minutes before their session, collect emergency contact information
+ - Re: ICE; figure out a workflow for storing/accessing the data (GPG, etc.)
+ - Draft general announcement e-mail for schedule, ICS
+ - Include MPV profile in conf.org so that bandali and dragestil can try it out
+ - Next week: Keep answering emails, Update talk pages/conf.org with extra info, Review talks, think about introductions
+ - Create BBBB rooms A, B, C, D for check-ins, and share rights with bandali and sachac
+ - bandali:
+ - send sachac Toobnix credentials which is tied to the one with EmacsConf
+ - look into BBB layout options from FSF colleague, and test how robust it is
+ - As long as it doesn’t do anything crazy (like covering the video), it’s fine
+ - coordinate with alternate streamers
+ - Figure out if chat.emacsconf.org can support URL-append to connect to #emacsconf-org for speakers
+ - corwin:
+ - OBS chores
+ - update graphics for 2021
+ - save out a "clean" set of scenes
+ - Create a 6 sec video
+ - Test Push to IceCast
+ - Dig logs from Bandali from bouncer
+ - If he had to do a talk for EmacsConf, a clever idea he had would be ‘Using org-mode to create an impromptu talk, and do a head-first recording approach’
+
+* November 6, 2021
+- Check-ins
+ - zaeph is dealing with TZ change
+
+- TODOs:
+ - Everyone:
+ - [X] Get working on contribute.md by Tue-Wed
+ - Non-exhaustive list of tasks to mention (relevant for this year):
+ 1. Editing captions or writing new ones
+ 2. Helping with tech-checks
+ 3. Looking at the schedule, and if there’s something they particularly like, they could run get ready for a prolonged Q&A session
+ - bandali:
+ - [X] ASAP: Give SSH access to sachac on ftp-upload@emacsconf.org
+ - Ping corwin to get another distro installed on vm02 (possibly Trisquel or Alpine)
+ - [X] Look into making TLS/SSL optional
+ - sachac: Right now, the configuration for the ftp server forces it.
+ - bandali is looking into FTP for resume, no worries about being able to see filenames (not allowed to download files)
+ - probably no risk from other people maliciously "resuming" other people's files
+ - ideas for the future:
+ - can have speaker accounts for FTP (... maybe if Amin gets the hang of automating e-mails =) )
+ - region servers to upload to, maybe as part of CDN project
+ - TODO enable continuation for FTP
+ - Fosshost: Drop an application for another storage-server for the prerecs
+ - zaeph:
+ - [X] ASAP: Email designated volunteers
+ - Create BBB accounts for new tech-checkers
+ - Publicise contribute.md on r/emacs when it’s published
+ - Make a pinned comment on the program announcement asking for volunteers, linking to contribute.md, and maybe keeping it up to date by editing it to reflect current needs
+ - corwin:
+ - Record a 6-second video ad
+ - Go through the script together
+- sachac: Status update: 9 prerecs received
+ - 7 talks captioned
+ - Emacs News Highlights
+ - NonGNU ELPA Update
+ - telega.el and the Emacs community on Telegram
+ - Creating technical API documentation and presentations using org-babel, restclient, and org-treeslide (thanks bhavin!)
+ - The use of Org mode syntax outside of GNU/Emacs - checked with speaker
+ - How Emacs made me appreciate software freedom
+ - Moldable Emacs, a step towards sustainable software - checked with speaker
+ - 2 more talks waiting for captions from bhavin:
+ - Using Org-Mode For Recording Continuous Professional Development
+ - Emacs with Nyxt: extend your editor with the power of a Lisp browser
+ - Compressed with q=56 script from last year, uploaded to front:/var/www/media.emacsconf.org/2021/protected , see private wiki for password
+ - Things to consider:
+ - Broadcast with open captions or direct people who need closed
+ captions to the wiki page? Spam #emacsconf-accessible with
+ caption text?
+ - Sample: https://emacsconf.org/2021/talks/news/
+ - Compression okay? Do we need to dial it back?
+ - Plan for handling compression for the talks coming in this weekend; can we run it on the VM?
+ - Audio normalization?
+ - Low-res version?
+ - More proof-reading welcome
+ - Start thinking about workflow for publishing talks, maybe even concurrently with the stream
+ - No reason not to make them public right away, so if we want them to be available on something else in addition to emacsconf.org and Youtube (Toobnix?), we can plan ahead
+- TODO bandali also, icecast fallback override possibility so that bandali might be
+ able to use ffmpeg to broadcast directly to icecast while handling
+ continuity? Does anyone want to experiment with that?
+- does anyone want to write an ICS to Org thing that can handle
+ schedule updates, maybe taking advantage of icalendar?
+- pronouns/website/sponsor info can probably be an e-mail to speakers
+- e-mail to send on the deadline (tomorrow)
+ - reminder to send it
+ - let's use a carrot approach, not stick (10 talks have already been submitted, yay, and most of them have been captioned!); we're actually okay with dealing with prerecs or live on the day of the event
+ - nudge script submission esp. close to the deadline to help with captions
+- publishing the schedule with the times, ICS; maybe Nov 14?
+ - probably can do even with the uncertainty
+- 10 minutes hard to do live (or record); 15 min next time?
+- maybe postpone letting people plan for live presentation until a little bit later
+- future: shorter CFP, longer prep period
+
+#+begin_example
+Hello, ____!
+
+,* TODO [#A] Send pre-recording to EmacsConf
+
+Lots of speakers have already submitted their talks for EmacsConf
+2021, and we've even be able to caption them. Yay! Here are some of
+the presentations that have already come in:
+
+ - Emacs News Highlights
+ - NonGNU ELPA Update
+ - telega.el and the Emacs community on Telegram
+ - Creating technical API documentation and presentations using org-babel, restclient, and org-treeslide
+ - The use of Org mode syntax outside of GNU/Emacs
+ - How Emacs made me appreciate software freedom
+ - Moldable Emacs, a step towards sustainable software
+
+We're looking forward to getting your presentation. If you send it in
+as soon as you can, we can add it to the queue for captioning. We'd
+like to stream as many talks with captions to make things more
+accessible, and the text makes it easier to search too. Also, sending
+the prerecorded video will make the conference day less stressful for
+everyone. =) If you need extra time to get your prerecorded video, no
+worries, we'll figure it out somehow. Please try to do it as soon as
+you can!
+
+,* TODO Send page information (name pronunciation, pronouns, homepage, contact, sponsor links)
+
+We'd also like to add some standard information to the talk
+information page to make it easier for people to talk about your talk,
+find more information, contact you, or support you.
+
+Name pronunciation:
+Pronouns:
+Homepage:
+Preferred contact info:
+Links for sponsoring/supporting (if any):
+
+For example, Sacha's is:
+
+Name pronunciation: SA-sha CHEW-ah
+Pronouns: she/her
+Homepage: https://sachachua.com
+Preferred contact info: sacha@sachachua.com
+Links for sponsoring/supporting (if any):
+
+,* TODO Plan tech check if you're doing live Q&A
+
+Also, if you are planning to do live Q&A and you've already done the
+tech check at test.bigbluebutton.org, we can set up a tech check call
+with an organizer or volunteer. Sometimes there are technical issues
+with sharing desktops or hearing audio, so it's good to get it sorted
+out as soon as possible. Please check _____ for some options for a
+live tech check and reach out to someone who's available when you are.
+We hope to get more volunteers for tech checks, so if you can't find
+someone whose availability matches yours, please e-mail us at _____
+and we'll try to find something that works.
+
+,* Also, sneak preview of talks =)
+
+As a thank-you for working on a talk for EmacsConf, here's a sneak
+preview of the talks that have been submitted so far. Please don't
+share it widely. If you want to refer to other people's talks in
+yours, it's a good time to check out related talks!
+
+(TODO - info not in here)
+
+Thank you so much!
+
+Amin
+#+end_example
+
+---
+TODO Sneak preview e-mail for people who have already submitted
+
+
+---
+- Also do we want to give speakers early access to each other's talks?
+ - OK, ask them not to share yet
+- ffmpeg installed on FTP upload
+- TODO bandali to check compressed video and see if we want to change the settings
+- TODO: Sacha - Make Etherpad template for speakers? Actually, e-mail might be easier to copy and paste from
+ - Name pronunciation
+ - Pronouns
+ - Links
+ - Homepage, socials
+ - Sponsor
+- TODO: Sacha - send bandali Bcc list for nudge e-mails
+- How many people did we do live tech checks last year?
+- zaeph will not be very available.
+- TODO maybe seabass? zaeph will e-mail.
+- publicize contribute page to the mailing list? and stress the need for tech checkers
+- TODO sachac: add current captioning results
+- Future: bake it into the submission process (when will be a good time over the next 1-2 months)
+- If we don't have enough people to do the tech checks, Leo will step up and maybe do some kind of office hours thing
+- Process:
+ 1. E-mail the volunteers
+ 2. Update the table on the page
+ 3. If anyone wants to get started now, you can e-mail us
+- BBB slide presentation feature broken, may be related to LetsEncrypt, can't leave messages on the screen; probably won't need it for EmacsConf
+- DECISION Yes, broadcast open captions; published videos can be CC
+- TODO zaeph will come up with the MPV settings for displaying open captions
+- EmacsConf: friendly and relaxed =)
+
+- Summary
+ - #A zaeph: Set up tech check information, e-mail volunteers
+ - #A zaeph: Finish draft of e-mail for tomorrow or the day after
+ - zaeph: Figure out mpv settings
+ - bandali: Check video settings, see if we need to tweak compression/audio
+ - sachac: Keep captioning
+
+* October 30, 2021 meeting
+
+- Check-ins
+ - sachac:
+ - Using Emacs itself to record her talk, and has even managed to get a spectrum analyser right into it!
+ - [[https://github.com/sachac/subed-waveform][sachac/subed-waveform: Minor mode for displaying the waveform for the current subtitle in an Emacs subed-mode buffer]]
+ - bandali:
+ - Busy with the emails and around GNU in general
+ - Almost finished with a paper building on parts of his MA dissertation
+ - Last week’s presentation went well despite some minor hiccups
+ - It was a *long* session, so a 5-min break can be glossed over
+ - zaeph:
+ - All is well! A lot of swimming and fun experimentations!
+ - corwin:
+ - Pretty rested!
+ - Lots of stuff brewing with Fosshost
+
+- FTP:
+ - sachac: Where can I find the recordings?
+ - If we get talks early, we might get started on the subtitling
+ - bandali: Tried to setup the 2nd upload server
+ - Couldn’t get it to work; the same configuration on front0 for testing was working, but not onl
+ - The FSF sysadmins gave us access to a session/server which we might use as replacement
+ - sachac: Where can we keep the talks on front0?
+ - Reasoning:
+ - Last year, one of the issue that th epeople who had missed a talk wished they could have watched it
+ - Whilst the prerec is playing on the stream, we could put in a public directory to be able to watch it
+ - It’d be amazing if we could get the recordings ASAP this year, since most of them will be prerecs
+ - People need to be uploading files to the very server that we will be storing them on.
+ - Discussion:
+ - bandali: The main VMs that we have (live0 and front0) are fairly small, 20-25GB each. What we’ve been doing for the past couple EmacsConf has been to upload to a server provided Computer Science of the University of Waterloo
+ - Options:
+ - Fosshost
+ - corwin: Disk-space comes super-cheap to Fosshost, which means that it might be a good option.
+ - Could become our primary source (vs. CS Club which we use currently)
+ - CS Club (University of Waterloo); we might not have it eternally
+ - At the moment, it is our primary source
+ - We can still use it as a mirror
+ - audio-video.gnu.org (FSF)
+ - yang’s 2 mirrors in Europe
+ - Other options that we might consider for other editions:
+ - Justification:
+ - corwin: The footprint of EmacsConf will always grow as long as we maintain older publications for posterity, even if the grow is fairly linear.
+ - Linode block storage
+ - 1$/month for 10 GB
+ - corwin’s favourite provider
+ - Meta:
+ - Having 3 ISP is better than having 2
+ - From a growth perspective, it’s good to have some cash outlay to help people understand that we have a need for money
+ - This also appeared with the android-app
+ - Other considerations
+ - Using emacsconf.org for redirections
+ - bandali: Someone set up two mirrors for us in Europe; it’d be nice to have mirror-resolve/-rotator that we could put in front to do the redirecting
+ - sachac: That would put more sysad work on bandali, though
+ - How do we handle the private→public publishing of the recording?
+ 1. Upload all the files to the public server
+ 2. chmod o-r on all the talks
+ 3. When a talk goes live: chmod o+r
+ - Handling redirections à la CDN
+ - bandali:
+ - We might want to add A records pointing to all the servers that we’re using as mirrors (in a round-robin fashion)
+ - GNU might have solutions
+
+- Asking new domains to the FSF sysadmins, especially on .emacs.org
+ - Have we considered having a .gnu.org domain linking to emacs.org?
+ - conf.emacs.org could be very nice for visibility.
+ - corwin: Could we do the same with orgmode.org?
+ - Imagine if the org-mode website had a featured talk from the EmacsConf!
+ - corwin: Once the relationship exists between emacs.org and orgmode.org, a lot of bridges can be built between the communities with mutual benefits
+
+- Alternate streams & Rebroadcasts
+ - APAC:
+ - sachac: As the prerecs come in, we can touch base with dragestil re: APAC event
+ - Other streamers:
+ - sachac: These next few weeks are also the best time to onboard alternate streamers
+ - corwin: Our must important work right now is bringing more talents/newcommers, and get them to the level where they feel technically-competent and empowered to help us further.
+
+- How to get new organisers involved as well they could be with the project?
+ - Doing tech-checks is a pretty good and easy to get started with volunteers.
+ - sachac: When we activate the other volunteers, what should we be asking them to consider? *Ordered by priority*, and which we should mention on the ~contribute.md~:
+ 1. Editing captions or writing new ones
+ 2. Helping with tech-checks
+ 3. Looking at the schedule, and if there’s something they particularly like, they could run get ready for a prolonged Q&A session
+ - sachac: We might have a ~contribute.md~ page similar to the prepare.md page
+ - We should link from /2021 to /2021/contribute.md.
+ - Also, other people who could come across it rather than just our current volunteers.
+ - corwin: ~contribute.md~ is the invitation, and the ~prepare.md~ is the directions to the party.
+ - How do we publicise this contribue.md?
+ - zaeph: Could we publicise contribute.md on r/emacs
+ - corwin: Yes! It’s a great piece of promotion to do.
+ - bandali: It might make sense to mention contribute.md to speakers
+ - Our next email to speakers should link to contribute.md
+
+- Tech-checks
+ - Getting organisers on board with tech-checks
+ - Which new volunteers could be bring along on this project?
+ - acdw (AM)
+ - dragestil (APAC)
+ - bhavin192 (APAC)
+ - seabass (EU)
+ - zleap (EU)
+ - ullbeking (?)
+ - zaeph (EU)
+ - corwin (AM)
+ - ???
+ - bandali (AM)
+ - Putting the finishing touches on the checklist
+ #+begin_quote
+ - Would you please share your pronouns?
+ - Can you tell us how to pronounce your name?
+ - Can you speak and be heard? Is there echo?
+ - Can you hear the organizer (me)?
+ - Can you share your screen? Is the screen readable?
+ - If you plan to show your keystrokes, is that display visible?
+ - If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background?
+ - Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you?
+ - Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes?
+ - Do you need help finding your way around IRC so that you can check into `#emacsconf-org`? What is your IRC nickname?
+ #+end_quote
+
+- What to mention in our closing remarks
+ - Acknowledging volunteers
+ - Inviting other volunteers
+ - Alternate streams / Multiple tracks
+
+
+* October 23, 2021 meeting
+
+- TODO
+ - bandali:
+ - Look into creating a Mastodon account
+ - Options: qoto.org, mastodon.sdf.org
+ - Keep working on the FTP deployment and setting up the VM
+ - zaeph:
+ - Pin post to r/emacs for the program
+ - Everyone:
+ - Add our social media to emacsconf.org/contact
+ - Think about the phrasing of some of our personal questions for the tech-checks
+
+* October 16, 2021 meeting
+
+- TODO from last time
+ - zaeph:
+ - Send email to the 12 people in the org block on day-1-afternoon
+ - Take charge of the TODOs (changing to WAITING_FOR_CONFIRMS)
+ - <2021-10-13 Wed>: Pin post to r/emacs
+ - bandali (& potentially seabass):
+ - Draft the email for submitting the schedule and send it out to -submit
+ - Publish the schedule
+ - SOFT DEADLINE: <2021-10-13 Wed>
+ - Setup FTP server
+ - Find a minimal web-based ftp server
+ - Might be a great use for vm01, actually!
+
+- Agenda
+ - /Glitter/ for EmacsConf
+ - Thinking about organisation principles like the bus-factor: how do we address it in a way that is not merely putting people on a pedestal?
+
+- Check-ins
+ - corwin
+ - Had a pretty rough work-week. :(
+ - sachac
+ - Taking care of kiddo!
+ - bandali
+ - Has already managed to <Backspace> in BBB. :o)
+ - zaeph
+ - Passed the first round of technical interviews
+
+- Considerations for EmacsConf 2021 and future editions
+ - sachac might not always be able to take care of the conf-days check-in
+
+- Coming up with a date for the publishing the schedule
+ - bandali: Has a draft, and would like to send it to us by tomorrow
+ - We don’t seem to have any blocker right now when it comes to publishing the schedule, except perhaps for the posters.
+ - We have
+ - We’ve elected to publish the schedule on [2021-10-20 Wed].
+ - Do we want to to only publish the program, or do we want to publish the program & the schedule at the same time?
+ - corwin: More publications is usually good if we have unique and exciting things to share in each one
+ - ‘Here’s all the talks we’ve accepted so far’
+ - sachac: Publishing the program early might get people curious about the topics, potentially leading to great questions
+
+- Glitter for EmacsConf
+ - We have three posters to review this year: one by zleap, one LaTeX-based, and one from alphapapa
+ - We don’t know what are the permissions on those posters, though.
+ - sachac: We could make social-media-friendly posters for publicising the conf.
+ - Where to publicise the conf?
+ - bandali: We could and should create a Mastodon
+ - zaeph: I can take care of r/emacs sticky-posts.
+ - We have Twitter: official account, and potentially sachac’s
+ - We can also [[https://nitter.net/emacsconf][EmacsConf (@emacsconf) | nitter]]
+ - Where to let things happen organically
+ - corwin can take care of Facebook; sachac has made the Emacs page public again
+ - lobste.rs… but we might let people do it themselves (or maybe ask zaeph’s contacts)
+ - HackerNews… But considering how unlucky bandali and zaeph are in getting visibility, we might as well let people take care of it (potentially with more karma)
+ - Since our program is fairly advanced (i.e. we don’t have a ‘What is an Emac?’ talk or anything along those lines), publicising on some broad-audience platforms might create expectations that won’t be met
+ - Main platforms for us:
+ - r/emacs
+ - Usergroups
+ - Emacs News
+ - IRC
+ - HackerNews
+ - Subsidiary platforms
+ - lobste.rs
+ - Twitter
+ - Facebook
+
+- On the legitimacy of adding our socials to emacsconf.org/contact
+ - We’re a little on the fence with publicising a Facebook page on this page, but we can probably label it accordingly (‘This page contains non-free JS’)
+ - We could also link to alternative platforms which are more respectful of people.
+ - …Or, we could say ‘go on this platform, and search for this page’ whilst raising awareness about non-free JS
+ - corwin: ‘The real reason why we’d want to put the links to social on the page is that people are aware of the energy that exist around the stuff that we’re doing. Demonstrating that energy is a way to get people excited about Emacs.
+
+- When to do tech-checks: after/before the soft-deadline for pre-recs
+ - sachac: We don’t have to wait for the soft deadline
+ - sachac: ‘[Speakers]
+ - We can redirect people to [[https://test.bigbluebutton.org/][BigBlueButton - Open Source Web Conferencing]] to test their system.
+ - Questions for the tech-checks (not published yet)
+ #+begin_quote
+ - $questions_about_pronouns
+ - We can track them in conf.org.
+ - Can you tell us how to pronounce your name?
+ # Questions after that point are copied from last year.
+ - Can you speak and be heard? Is there echo?
+ - Can you hear the organizer?
+ - Can you share your screen? Is the screen readable?
+ - If you plan to show your keystrokes, is that display visible?
+ - If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background?
+ - Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you?
+ - Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes?
+ - Do you need help finding your way around IRC so that you can check into `#emacsconf-org`? What is your IRC nickname?
+ #+end_quote
+
+- Public debrief for EmacsConf 2021: yay or nay?
+ - We already did this informally at the end of day-2 of EmacsConf 2020
+ - We also started this process of debrieffing and having weekly meetings to review our process last year, but we did it privately.
+ - corwin: ‘The debrief on what happened in 2021’ should be done with a fair amount of gap with ‘What should be done in 2022?’
+ - Is there a bit of a burnout going on with the weekly meetings?
+ - corwin: We’ve been meeting every week for a year
+ - …But it’s a lesson learnt, not a ‘oops’.
+ - Switching to a monthly meeting during the down-time (Dec-May) might alleviate this.
+
+- FTP server
+ - bandali: Been digging into various FTP servers implementations, and has been chatting with the FSF team; what they use is vsftpd; checked their local configuration, but bandali doesn’t know enough about it to deploy it right now.
+ - In short: did the learning, and will work towards setting up.
+
+- Process for editing the talks
+ - Changing the schedule should be done via conf.org
+ - Talk descriptions can be manually edited by the speakers via ikiwiki.
+
+- Generating XML programme
+ - seabass: Tried to implement this in ~schedule.org~; had got stuck with evaluating in the org-babel format
+ - sachac: you can define a new block without the results none arguments
+ - seabass can send a draft to the list
+ - sachac: Not neccessary to use many Emacs packages; ~(require 's)~ and ~(require 'cl-lib)~
+
+- Follow-up email to speakers
+ - When to send it
+ - We should probably delay sending the program until we’ve sent this follow-up, since we’ll need speakers to review their apges
+ - We can probably give them a week to do so
+ - Tentative calendar:
+ [2021-10-20 Wed] Send follow-up
+ [2021-10-27 Wed] Edits to talk pages should be finished
+ [2021-10-30 Sat] Publishing the program
+
+ - Content
+ - Announce tech-checks
+ - Ask people to try BBB via [[https://test.bigbluebutton.org/][BBB test page]]
+ - sachac: ‘If you would like to do live, please check your setup, and then email us to let us know that if tha passed, or if you need additional help; therefore, we should help from people who should go live, and if we don’t hear from the people who said they would do a live talk, we should follow-up with them’
+ - Ask speakers to review their talk page and edit them manually (with ikiwiki, info at [[https://emacsconf.org/edit/][EmacsConf - Editing the EmacsConf wiki]], directing people to #emacsconf (not -org) for peer-help) if they want to edit their talk-page before the conference
+ - ‘We’d like to publish the program as soon as possible, and your talk-pages will be featured on it, so please take care of this by $date’
+ - ‘We’re thinking of publishing by $date, so it’d be great if you could review it by then (no pressure!)’
+
+
+* October 9, 2021 meeting
+
+- TODO
+ - bandali:
+ - Send the follow-ups
+ - Special care for 40: Ask for doing their talk on Sunday rather than Saturday
+ - zaeph:
+ - Take care of the replies from the follow-ups bandali
+ - Remove sticky from r/emacs
+ - sachac:
+ - Going to wait for bandali to finish submitting the de-anonymised versions to front0
+
+- Check-ins:
+ - bandali:
+ - Doing pretty okay, and catching up on sleep
+ - Trying to get on top of things
+ - corwin:
+ - Doing good; been busy
+ - sachac:
+ - Doing okay! Taking care of kiddo.
+ - zaeph:
+ - Still prepping for interviews; made it through the first step.
+
+- TODO for the session
+ - DONE When do we publish the schedule?
+ - Do we need to wait for the org-research block to reply? We’ve only bumped them slightly, so it’s probably not necessary.
+ - …No.
+
+- Clarifying the streaming setup
+ - bandali is considering doing the streaming on his own again this year.
+ - The setup from 2020 was a little /crude/, which is why we’re revising the OBS model we had in 2019.
+ - The plan is to do like what was done in 2019, since bandali’s setup is now more powerful and shouldn’t have the same problems as last time.
+ - bandali: We can keep our use of OBS fairly minimal, and consider it as /glitter on top/
+ - We should specify what would constitute that /glitter/
+ - Maybe we could get alphapapa to help us on this?
+ - We could get one of the newer orgas working on this, since there is no playbook to be learnt on that one. :)
+ - We’re going to stick to Linode; bump it up right before the event, and bump it down right after
+
+- Task force for the /glitter/ (in order of interest/availability)
+ - alphapapa
+ - zleap
+ - seabass
+ - corwin
+ - zaeph
+
+- Could we be using the other FH server (vm01) for other stuff?
+ - We could have found a use for it, but it squeezed between our fingers; or we could have returned it to FH
+ - Based on the original request that we’d filed for FH, we were supposed to use it to process the talks.
+ - Maybe we could deploy it in time for this year?
+
+- Capacity update for bbb
+ - 42/200 GB taken
+ - Might be filled by ≈<2022-04-09 Sat>
+
+* October 2, 2021 meeting
+
+- TODO
+ - bandali:
+ - Decomission the private repo from last year
+ - Reaching out to jwiegley for new Emacs update
+ - Get in touch with corwin for the streaming setup
+
+- Scheduling with sachac
+ - Questions raised by sachac after studying the anonymised talks
+ - Do we want to publish it?
+ - If we publish it, how precise do we want it to be?
+ - Do we want to think about dropping talks?
+ - Time exceptions
+ - Those are the ones we’ve either bumped down
+
+ - Do we post this draft schedule, or do we say that all the people who help us with the scheduling?
+ - bandali does have an informal list of people involved
+ - bandali (but he’ll excuse himself since he anonymised
+ - zaeph
+ - dbremner
+ - sachac
+ - seabass
+ - acw (Chase)
+ - corwin
+ - We’ll probably need to think about which responsibilities we hand over to new orgas, since some of them might be tough (like asking candidates to reduce the size/scope of their talks, or shepherding some of the talks which we don’t think are ready yet)
+
+ - Talk-specific considerations for exceptions
+ - 21: Resolved
+ - We might want to ask the candidate to record two versions, since the topic is very interesting, but it’s going to be quite tough to fit in the whole 40-min presentation that the candidate intended to
+ - Since the candidate mentions that there were two-parts, it might make more sense to trim one of the parts
+ - We could also offer 30-min, but that’d need to reduce the duration of 04 (M-x forever)
+ - We’ve resolved it by cutting the opening remarks on that day
+ - 40:
+ - 34 & 13:
+ - We need to get the candidates talking
+ - That’s not a blocker for accepting them, but we still
+ - 01:
+ - Maybe we could get the candidate to mention the reMarkable tablet, since it’s more aligned with our FLOSS goals?
+ - We’re not enthused with
+ - 02:
+ - Maybe make it clearer that this is the son
+
+ - Potential talks we’re still waiting to hear from
+ - jwiegley’s dev update
+
+ - Broadcasting with subtitles?
+ - [[https://wiki.c3subtitles.de/en:styleguide][Guide for subtitling talks]]
+ - We will push for big talks to have subtitles
+ - We can speakers to provide scripts if they’ve used one; otherwise, we can use whichever technique fits best (YouTube captioning; hand-editing them)
+
+ - bandali has fired up emacsconf-private-2021 for sharing conf.org
+ - We’ll keep pre-recs info on it, for example.
+
+ - Report on anonymising the proposals
+ - bandali: It wasn’t *too* bad; removing the names, the GH links was easy, but it’s definitely not a process
+ - sachac: Maybe something we can automatise next year! *maniacal laugh*
+
+ - Content for the follow-up email:
+ - Talk is accepted
+ - Specify which time duration we are accepting (can be automatised?)
+ - Double-checking availability
+ - Pre-rec deadline: [2021-10-31 Sun] or [2021-11-07 Sun] latest
+ - Gentle incentive to submit early so that we can get them captioned
+ - Please start your talk with your name so that we can now how to pronounce it!
+ - ‘If you happen to have a script for your talk, please submit it as well!’
+ - After you’ve finished your pre-rec, feel free to record a longer one that we can direct people to
+ - Tell people that there will be a page for them on emacsconf.org
+ - We should ask them for their pronouns which we will include on that page
+ - …But let’s not aim for sending them the actual URL to the page, since they might be subject to change
+
+ - Content that we’ve consider for the follow-up email
+ - Nudge to write blog-posts about
+
+ - Extra stuff to do on tech-checks
+ - Re-asking how to pronounce their names
+
+ - How to introduce people
+ - Let zaeph do it
+ - Come up with Englishised IPA for the names of everyone (which zaeph would take care of)
+ - Actually, it could be zaeph’s entire role
+
+ - For EmacsConf’s 2022:
+ - We might want to track talks according to IDs
+ - Submission could be sub-01-$title.org
+
+Notes from Paul:
+#+BEGIN_QUOTE
+There is a free software camp coming up that could be useful to signpost people from there to emacs conf to learn about e-macs
+https://camp.fsci.in/
+p;us the free software foundation europe
+Youth Hacking For Freedom
+If you like coding, tinkering, and having fun with software and if you are up for a challenge, we have something exciting for you: "Youth Hacking 4 Freedom" (YH4F), the FSFE's hacking competition for young people from Europe!
+https://yh4f.org/
+Which again could be somewhere to promote emacs / emacs conf
+#+END_QUOTE
+
+
+* September 25, 2021 meeting
+- TODO
+ - bandali & corwin:
+ - Figure out the streaming setup
+ - Who should be streaming?
+ - Experiment with tooling?
+ - Jitsi?
+ - RTMP webcamps via BBB?
+ - corwin:
+ - Come up with a list of topics for the next EmacsConf 2021
+ - Based on sachac’s blog
+ - sachac: ‘There's some elisp in my emacs-news/index.org that has a list of the categories I usually use’
+ - Think about interesting topics to have in a talkshow format for the next EmacsConf
+ - Also make a list of highly-political topics and what could be problematic about them
+ - zaeph:
+ - Think about personal talks and meta-talks for EmacsConf 2021
+ - Everyone
+ - Think about adapting the format based on the number of talks we’ll be fielding
+ - Come up with a protocol / condition tree
+
+- Check-in
+ - zaeph:
+ - Didn’t do as well in the last checkpoint with his mock-interviews; but hopeful for the next one in 8 days!
+ - Did a quick presentation of what he’s been doing to prepare for his interviews
+ - bandali:
+ - Doing pretty okay! Busy week at work again with some not-too-interesting busyworkprevious names of JAMI
+ - Also been working on ERC patches
+ - seabass:
+ - Was here 3 weeks ago, and he’s back with us now!
+ - Has been working on: [[https://github.com/spdx/spdx-spec][spdx/spdx-spec: The SPDX specification in MarkDown and HTML formats.]]
+ - Suggested reconsidering the work that has been done last spring on getting text/org accepted as a valid mimetype
+ - We egged seabass on to make a short user-story talk, especially since he got involved in all this with the last EmacsConf
+ - corwin:
+ - Probably going to join us later
+ - sachac:
+ - Busy with kiddo today; might not be able to make it
+
+- News
+ - zaeph: Became co-maint for crdt.el with qhong
+- Office hour
+ - bandali had one on Tuesday
+ - …Nobody did show up, though. ¯\_(ツ)_/¯
+ - Wasn’t expecting much, but got time to answer emails
+ - bandali wil have the last one for this year next Tuesday
+- Technical aspects of the streaming setup for the conference
+ - bandali and corwin haven’t been able to meet to discuss
+ - bandali thought about this, and would rather do the streaming himself (sticking with what worked)
+ - rtmp server w/ jitsi might be finnicky, and we don’t probably don’t want to risk
+ - If the server doing the mirroring goes down, we might not be able to
+ - Should we change our policy with regards to backup streaming services (YouTube, peertube?)
+ - It’s technically possibly for us to bounce streams and use the servers of non-free platforms to do most of the leg-work, but we don’t think it’s enough to change our policy
+ - Should we ask FH to provide more facility for the live streaming?
+- Doing more with FH:
+ - sachac: Should we ask FH to handle the hosting of our conferences rather than the platforms we currently use?
+ - Currently, we use linode for streaming and uwaterloo (via bandali) for initial video upload
+- List of tracks or topics for EmacsConf 2021
+ - Considering our timing with the CFP closure, it’s not necessary for us to think about it right now
+- Figuring out what do to during down-times
+ - Panels
+ - zaeph is slightly more confident in the format after having thought about it
+ - We’re quite excited about this, but there are
+ - sachac: We’re okay for 10am-pm at 75% load
+- Intervention with emacs-devel?
+- How to deal with private info for emergency contact
+ - We’ve figured a good workflow that will allow us all to access the files and keep it encrypted
+- Closing the CFP
+ - Should we send an email to warn people?
+ - It might be a good idea to officially announce the closing of the CFP, but focussing on the thanking. It might also give some extra energy to those who were waiting to submit to hurry up.
+
+* September 18, 2021 meeting
+
+- Carry-over from last time:
+ - Next actions from last time
+ - zaeph:
+ - DONE Look into polling for views to turn into a cron
+ - bandali took care of it!
+ - Send email to Jeremy Friesen, and maybe schedule a meeting
+ - Also Cc: emacsconf-org-private@gnu.org
+ - Try to find a date that North-American folks can attend too
+ - CXLD Draft the email for publicising office hour
+ - DONE Make a PR for adding EmacsConf to [[https://confs.tech/?online=online#][Tech conferences in 2021 and 2022 | Confs.tech]]
+ - PR here: [[https://github.com/tech-conferences/confs.tech][tech-conferences/confs.tech: List of tech conferences: JavaScript / Design - CSS - UX / Ruby - iOS - Android - PHP - Data - Devops and more.]]
+ - Done by seabass: thanks!
+ - Everyone:
+ - CXLD <2021-09-01 Wed>: Review zaeph’s email proposal for publicising the office hour
+ - Come up with an exhaustive list of topics/tracks for the next edition
+ - Find the first TODO this document under [[#ongoing-projects][file:~/emacsconf.org::#ongoing-projects]]
+
+ - TODO
+ - Review the ongoing projects because some projects ought to be updated
+ - Review the schedule for office hours
+ - Would sachac want some help with the scheduling?
+ - Could we maybe document a little more how sachac does it so that other orgas could help (or someone new to recruit)?
+ - Reviewing office hours
+ - Do we give up for this year and focus on the next one?
+
+- Check-in
+ - bandali
+ - Had to deal with [[https://planet.gnu.org/][Planet GNU]] going down, which took a couple of days but was a lot of stress
+ - Has also been working on ERC, since emacs-28 is going to be cut soon
+ - zaeph
+ - Still working on his interview
+ - sachac
+ - Managed to make it!
+ - corwin
+ - Managed to make it!
+
+- On the office hours
+ - Discussion
+ - zaeph: Has problems keeping up with the commitment, and is feeling locked with regards to publicising them without due funnelling down
+ - bandali has been participating to some of corwin’s office hours and has been having fun with it, even though it was mostly people from #emacs@libera.chat
+ - sachac: We already have a healthy number of submissions, so it might not be necessary?
+ - bandali: It might still be worth it to publicise the office hours on r/emacs, but to present them more as a conversation between friends
+ - zaeph: This feel closer to workshops, though (i.e., not just 1-on-1)
+ - zaeph: So, do we consider the office hours format worth reforming, or should we explore workshops for next year?
+ - Proposals
+ - We could have weekly/bi-weekly workshops with one of us managing the room so that people could come talk to us about anything, and we’d nudge people towards writing proposals or contacting us for help (since they will know us a little more)
+ - Should we cancel the office hours
+ - Should we make a meta-presentation about office hours during EmacsConf 2021
+ - Why we were thinking they could be useful
+ - How we did the few of them?
+ - What plans do we have for the future (e.g. workshop)?
+
+- Handling the end of the CFP
+ - Extending the CFP by 1 week? <2021-10-07 Thu>
+ - Not necessarily a good idea because it ends up rushing us
+ - corwin: We should check stats from last year, and see how many submissions we get in the last week of the CFP (as it is currently shceduled)
+ - sachac: It’s also fine if it’s a one-day conference
+ - Come up with an exhaustive list of topics/tracks for the next edition
+
+- Hosting and handling responsibilities according to the number of talks we need to manage
+
+- EmacsConf 2022
+ - We should pro
+
+
+
+* September 4, 2021 meeting
+
+- Next actions from last time
+ - zaeph:
+ - Look into polling for views to turn into a cron
+ - Send email to Jeremy Friesen, and maybe schedule a meeting
+ - Also Cc: emacsconf-org-private@gnu.org
+ - Try to find a date that North-American folks can attend too
+ - Draft the email for publicising office hour
+ - DONE Make a PR for adding EmacsConf to [[https://confs.tech/?online=online#][Tech conferences in 2021 and 2022 | Confs.tech]]
+ - PR here: [[https://github.com/tech-conferences/confs.tech][tech-conferences/confs.tech: List of tech conferences: JavaScript / Design - CSS - UX / Ruby - iOS - Android - PHP - Data - Devops and more.]]
+ - Done by seabass: thanks!
+ - Everyone:
+ - <2021-09-01 Wed>: Review zaeph’s email proposal for publicising the office hour
+ - Come up with an exhaustive list of topics/tracks for the next edition
+ - Find the first TODO this document under [[#ongoing-projects][file:~/emacsconf.org::#ongoing-projects]]
+
+- TODO
+ - Review the ongoing projects because some projects ought to be updated
+ - Review the schedule for office hours
+ - Would sachac want some help with the scheduling?
+ - Could we maybe documenta little more how sachac does it so that other orgas could help (or someone new to recruit)?
+
+* August 28, 2021 meeting
+
+- Check-in
+ - bandali
+ - Had a lovely time at the cottage
+ - sacha
+ - Doing good, as usual and ever!
+ - zaeph
+ - Doing /swimmingly/ well (or, as sachac is pointing out, /mostly/ well considering the ear cloggage)
+ - corwin
+ - Sleepy, but joined us eventually! :)
+ - seabass
+ - We’ve decided to invite seabass to our closed-door session since he’s shown an interest in helping us with the organisation
+
+- Polling number of visits to the CFP page
+
+ - zaeph will take care of this
+ #+begin_src bash
+ cat /var/log/nginx/access.log{,.1} | awk '/0[56]\/Aug\/2021/ {print $1}' | sort | wc -l # total visits
+
+ cat /var/log/nginx/access.log{,.1} | awk '/0[56]\/Aug\/2021/ {print $1}' | sort | uniq | wc -l # unique visitors
+ #+end_src
+
+- zaeph joining the r/emacs moderation team
+ - zaeph summarised the situation that has happened in r/emacs with regards to alleged over-moderation, especially on dissension with social justice topics
+ - We might want to have a discussion on the validity of platforming such discussion; some people like to discuss those topics and use them to deploy their pedagogy; opposite to that, we might think that not platforming those discussions would be for the best.
+ - Regardless of what r/emacs elects to do in the future, we should consider it as an experimentation for what EmacsConf could do with regards to platforming controversial topics
+ - We especially encountered the topic when we had RMS’s talk in EmacsConf 2020
+ - sachac:
+ #+begin_quote
+ Last time, we were leaning towards moderating questions for potentially challenging talks
+ Hard to evaluate "arguing in bad faith"
+ Since the greatest conflicts are from opposing values, deeply held
+ #+end_quote
+ - Using off-topic tag to maybe not platform them immediately, or tag them accordingly?
+ - sachac:
+ #+begin_quote
+ It might be hard to get the behavior in, but maybe we can get some friendlies to model it.
+ And the tag can be added later
+ So by whoever's helping with the pad
+ And encouraging contact info for followup might also be doable with modeling
+ #+end_quote
+
+- Finding people to help us with
+ - zaeph found [[https://takeonrules.com/about/resume/][Jeremy Friesen]] who might be an interesting person to reach out to help us with gender diversity, considering their experience in inclusion of women in corporate software development circles.
+ - sachac: Diversity extra challenging this year due to disproportionate effect of COVID-related changes on women and minorities
+ - zaeph will reach out and see what can be done
+
+- Office hours
+ - corwin is having a stellar time with, but zaeph mostly has people showing up to listen in
+ - It’s a little bit against the spirit of the office hour
+ - We might still ask those people to bring over people we’re trying to help with this outreach program
+ - Publicising
+ - emacsconf-discuss & emacs-tangents@gnu.org
+ - r/emacs (and with zaeph as a mod, no need to bug anyone for pinning topics anymore! :) )
+ - Twitter account (via our account or via the FSF’s; see below)
+ - Asking the FSF to include it in their monthly newsletter, or just tweet it out
+ - [[https://confs.tech/?online=online#][Tech conferences in 2021 and 2022 | Confs.tech]]
+ - ----------------------------------------
+ - Fediverse presence
+ - seabass could put together a proposal for getting a Mastodon community
+ - It might not be a crucial thing to do now
+ - corwin’s feedback on his session
+ - The first sessions where mostly corwin sitting alone in the room.
+ - alphapapa joined and had a long, enthusiastic discussion.
+ - We need to have another look at the schedule for the ofice hours, especially now that bandali is back from his break
+
+- Podcast update
+ - bandali has to get in touch with gopar to see if they’re willing and able to take them up again
+ - bandali wants to get back to it, since a few episodes have already
+
+- Review process for the proposals
+ - Follow-up from last session: Should we find a time for processing the first batch of proposals that we already have?
+ - We’ve received 7 proposals so far
+ - seabass mentioned getting beginners involved in the review process, but zaeph voiced concern about how hard that crowd would be to find, and that it would take quite a bit of energy out of orgas to organise and structure this
+ - How could we best reach out to this crowd if you’re not much of an Emacs user to begin with?
+ - Approaching another Lisp community could be a good idea
+ - zaeph did a collective /mea culpa/ with regards to the 2nd improvement meeting that we were supposed to have
+ - There were two big topics that would have warranted more scrutiny for us
+ - Even though we were not able to implement some of the recommendations or to have some of the discussions that we wanted to have for EmacsConf 2021, we’ll still be able to cover those topics with as much time and focus as we want for EmacsConf 2022. In the meantime, however, and provided that we’ve got the people to do it, we can still look into pragmatic solution that wouldn’t require too much time and which would maximise the number of people from different communities coming to help us.
+ - seabass: You don’t need to be 100% unbiassed to get good viersity; what about going through the regular review process with 90% of the scheduled time, and taking the last 10% randomly.
+ - We had a long discussion about the benefits of open-door policies with regards to conferences, especially with seabass and corwin
+
+- We need to think about satellite sessions
+ - Possible locations
+ - Australia?
+ - From last year
+ - Boston
+
+- ERG resuming
+ - zaeph talked about what the session will be about: catching up
+
+* August 14, 2021 meeting
+
+- Important next actions from last time for today [2021-07-29 Thu 20:30] (UTC):
+ - CFP
+ - All done last week!
+ - Office hours
+ - Find other timeslots where we’d be available for office hours (tentative for now; no commitment, just feeling the water)
+
+- Check-in
+ - bandali
+ - Doing good! Atg a rainy time at the camping, but had a good time overall
+ - corwin (no longer mplsCorwin thanks to the Freenode exodus!)
+ - Has been putting a lot of work with FOSSHost
+ - Managed to get some work done on dungeon-mode
+ - Put some work on orgvm to update org via the web-browser (on corwin’s SourceHut)
+ - [[https://git.sr.ht/~mplscorwin/orgvm][~mplscorwin/orgvm - sourcehut git]] (do you want this published on the wiki, corwin?)
+ - This particular exploration was informed by corwin’s discovery of comic-chat which made him explore the NodeJS implementation
+ - sachac
+ - Managed to join us!
+
+- Quick thoughts on involving the public in the review process for the proposals
+ - sachac: Maybe put anonymized proposals on a wiki page, unless there's anything that's kinda iffy?
+
+- CFP
+ - Numbers for the CFP (via the nginx logs)
+ - Total visits: 100k
+ - Unique visitors 12k
+ - Pretty large numbers altogether!
+ - We should probably run this regularly (bi-weekly) to quantify /when/ people are participating
+ - Nudging people in directions that we want (sachac)
+ - In a couple of weeks?
+
+- Office hours
+ - Figuring out a schedule with every orgas (or users?) who want to get involved)
+ - Right now, we need to find a second slot that would be friendly to East Asia and Oceania
+ - Availabilities
+ - bandali will be away from <2021-08-21 Sat> to <2021-08-24 Tue>
+ - zaeph is available all summer
+ - Even if nobody shows up to the early office hours, there’s no rush: they’ll be running until the end of the CFP, and orgas can work on the office hours or on EmacsConf during them. :)
+
+- Alternative method for helping people: assisting during the recording
+ - Orgas could attend the recording of the presentations and ask questions to the presenter (which may or may not be included
+
+- TODO Next actions
+ - Everyone
+ - Come up with an exhaustive list of topics/tracks for the next edition
+ - Find the first TODO this document under [[#ongoing-projects][file:~/emacsconf.org::#ongoing-projects]]
+ - corwin
+ - Tue and Fri night (CST) TBC
+
+- Long running next actions:
+ - Project-based:
+ - bbb:
+ - BBB experimentations:
+ - See if increasing the RAM results in less CPU usage
+ - Gauge how much the number of present users affect the resources
+ - Working with the swap
+ - Decreasing the swapiness of the kernel might help
+ - Test RW speed (elsewhere than ~/tmp/~)
+ - Check if we can change the ffmpeg prioritisation for BBB (so as to get recordings out sooner, or to manage them ourselves)
+ - Does bbb spawn a ffmpeg process that we can investigate?
+ - Misc:
+ - Look into GLT21 to see if they have specifications/doc for their streaming
+ - We might want to discuss the podcast during the next session
+ - People-based:
+ - zaeph:
+ - Email Emacs NYC (and Cc sachac and bandali) to ask them if they’d be interested in hosting their sessions on our BBB instance (on FH)
+ - Organisers to content:
+ - admin@emacsnyc.org (goes to both Eric & Zach)
+ - Do the same with Emacs ATX?
+ - Do the same with M-x Research
+ - bandali:
+ - Prepare the announcement email for the Improvement Meeting™
+ - Wiki updates for references to freenode
+ - Check if there is anything important on live0 that would need archiving (besides the raw EmacsConf2020 ಠ_ಠ)
+ - Listing the specs for the non-FH servers (very quick)
+ - Wipe the private-repo
+
* July 24, 2021 meeting
- Check-in
@@ -357,7 +1486,7 @@
- Wipe the private-repo
* June 5, 2021 meeting
-
+
- Next actions from last time
- Project-based:
- bbb:
@@ -1048,7 +2177,8 @@
- mplsCorwin: Talk with Nate Sales
- We want to talk with Nate Sales about CDN stuff
- mplsCorwin will be asking Nate Sales to come again on [2021-05-01 Sat]
-
+ - Also to be used for FTP uploads
+
- mplsCorwin update on FH
- mplsCorwin is mentioning that we might get another server to handle
- Depending on the location
@@ -2225,3 +3355,415 @@ rganising the names on that page in a more relevant fashion?
pad, for e-mailing out?
- Braindumps welcome =)
- Week after: public meeting/recording
+* Some notes from the debrief after last year's conference
+Proceedings:
+
+** On tech
+*** Observations
+- BBB worked better than last year's Jitsi. It was nice to be able to set up several moderators and have consistent URLs. This year's Jitsi
+ seemed more polished than last year's Jitsi, so maybe they've resolved their technical issues, but it was still nice to have a reliable host.
+- amin generally happy. Leo ran into technical difficulties with BBB, also some speakers may have had Internet connectivity issues or BBB issues
+- gstreamer seemed to hold up fine; might want to figure out how to switch scenes or send only the BBB audio
+ - amin: Very nice, happy about that, gstreamer not as harsh on laptop.
+- low-res stream was handy, and running the ffmpeg command on live0 was fine
+ - amin: Super happy about that
+- Audio check with a decibel meter was great (sachac)
+- ffmpeg splitting had an i-frame issue when using -c:v copy:
+ https://superuser.com/a/704118 and
+ https://trac.ffmpeg.org/wiki/Seeking#Seekingwhiledoingacodeccopy
+ - https://etherpad.wikimedia.org/p/7XrMLmwLBQ0mp2RQ8S6l - technical
+ notes, looks like we can adjust -ss to the keyframes that happen
+ every 4 seconds in the captured stream
+- karl: BBB doesn't audio-level as well as other platforms. bandali
+ was loud, zaeph is not as loud, need to manually adjust. Other web
+ conference platforms handle it better.
+ - zaeph: BBB seems to aggressively add gain. Video fairly
+ low-quality when viewing both webcam and screensharing, probably
+ lost a lot of pixels. Recording quality is not that great, big
+ quality difference compared to prerecs.
+ - Might need to be more active shifting between webcam+screenshare and just screenshare.
+ - OBS can stream with picture-in-picture, maybe, but a burden for live presenters if there are too many technical hoops
+ - Cheese etc. can display their webcam while they're sharing their desktop
+ - BBB didn't handle multi-monitor sharing desktops well - one of the presenters couldn't share just one monitor's desktop
+ - Bit wasteful use of screen real estate. Jitsi might do it better.
+ - Focusing on speaker webcam during Q&A might help.
+*** Improving
+- Can test improvements throughout the year instead of waiting for next conference
+- System audio out isn't captured by BBB. Maybe presenters can set up a virtual audio loopback device and test during the tech check?
+- Play intermission audio from Emacs, naturally ;)
+- Normalize audio for prerecs?
+ - We could also use a compressor on all the ones which are 'voice-only' (i.e. not those with music/video in them)
+- Re: decibel meter, it might have been even better to use PulseEffects which would have allowed bandali to apply auto-gain and a limiter to the sound output of selected apps on his sytems (mpv & FF for BBB). ( https://github.com/wwmm/pulseeffects )
+ - In my experience, it very rarely misbehave.
+ - It could also save us the trouble of applying gain to the talks which happened live.
+- Make sure I've copied the right low res command line into my notes, and test it again
+- Start streaming even earlier if possible, so that there's plenty of room to stress out about mirroring, update the status page, etc.=)
+- Write a script to curl the total live viewers across streams.
+ - I prototyped something during the breaks, but gave up halfway because making it with scrapy would have been much faster than what I'd been doing.
+ - live0.emacsconf.org tracked peak viewers, so it was fine to not worry too much about it
+- Find a better solution for streamers to toggle mute/unmute for BBB and the stream
+ - As a temporary backup, I visualised the stream's audio spectrum to make sure that, when bandali was speaking, I could see speech waveforms on the stream.
+ - mpv --config=no --quiet --vo=tct --lavfi-complex='[aid1]asplit[ao][a1];[a1]showwaves=mode=cline:colors=white:rate=25[vo]' "https://live0.emacsconf.org/main.webm" --mute
+- Have an easy command to show local time.
+ - On GNU/Linux:
+ - watch TZ=America/New_York date
+ - http://www.tmzns.com/ looks nice but it doesn't understand "UTC" as a time-zone and you need to find a matching city
+- If we find a way to publicly serve the icecast dump, I wonder if we can make it quickly viewable with offsets on the day of, like with videojs-offset, so that people can access quick replays of talks they've missed
+- It might be interesting to have an overlay of time - talk title - speaker name - info page etc., maybe on the bottom of the stream. That way, people tuning in mid-stream can see what's playing. People would need to plan for that in their recording.
+** On emails
+*** Observations
+- bandali struggled a bit getting all the speakers in the Bcc, always seeming to forget some of them.
+*** Improving
+- Create lists.
+- Have one source of truth (in the private wiki), and use that to prepopulate the emails.
+ - TODO sacha: export uniquified list for copying, also do mail merge (maybe based on https://github.com/jkitchin/jmax/blob/master/mail-merge.el )
+ - index.org doesn't contain all the e-mail addresses at the moment. Maybe an org-capture for grabbing the initial submission from the e-mail might be nice in the future.
+** On time-keeping
+*** Observations
+- We managed to stay on schedule throughout the entire conference with minor adjustments.
+ - This was totally surprising because I expected the schedule to be
+ penciled in, given our experience last year with dropped talks and
+ technical issues.
+ - Come to think of it, automatically scheduling all the sessions
+ with some nifty Org code worked great for both planning (do we
+ have enough time for the talks?) and timing on the day of the
+ talk. In 2019, we relied on playing pre-recorded talks with no
+ live Q&A in order to manage our time, playing them ahead when we
+ needed to cover technical issues and sticking all the rest at the
+ end of the conference when we reached the end of the time. In
+ 2020, we actually followed a plan instead of adjusting on the fly,
+ and it was great!
+- Check-ins were done sufficiently in advance (we said 15 minutes, but
+ ~30 min before was nice).
+- Problems with check-in were minimal due to prior tech-checks with
+ the speakers. Thanks to all the people who helped with tech checks,
+ and to Amin's repeated nudges to do tech checks!
+- Small adjustments were pushed when needed.
+- The pre-recorded talks had set durations, which removed variables.
+- zaeph watched time like a hawk.
+- zaeph even called people thanks to the emergency contact information
+ we collected during the tech-checks.
+ - Karl is curious: how often did you call people via phone?
+ - 5 phonecalls total.
+- We allowed for 3 minutes of buffer between talks, which let us juuuuust squeeze in the talks with a little bit of overtime.
+*** Remarks
+- Time-keeping on D1 was good, but on D2, it was great.
+*** Improving
+- More buffer might have been nice for questions, but then we would
+ have had to say no to talks. Switching between talks was smoother
+ last year because bandali used OBS to stream prerecorded videos, so
+ he could join the other conference room while the prerecorded video
+ was playing. But OBS killed his laptop, so that's why he used
+ gstreamer. Maybe we can look into a way for gstreamer or another
+ tool to stream a file while bandali joins the next room? Then we
+ don't have the echo test showing up in the stream, and bandali can
+ more smoothly give the go-ahead off-camera.
+- People had strong fear-of-missing-out despite the heads-up about
+ prerecorded presentations. If we have the opportunity to do so, it
+ might be good to build in more breaks.
+- We can make a list of pre-recs and their durations to avoid bugging
+ Amin all the time. It was challenging for Amin to deal with late
+ pre-rec submissions, but maybe he can stash the submissions on the
+ shared server, or have a shell script that can list all the
+ filenames and times and copy them to a file on the server. He made
+ me a list of prerecs that I could use to quickly check which talks
+ were actually available, so it just needed duration to be perfect.
+- I wonder what an Org command for quickly adjusting timestamps could look like... What would that interface be?
+ - Don't we have a way to shift <...>--<...> timestamps by min ?
+ - Oh, we recalculate the timestamps for all talks based on
+ MIN_TIME properties, actually, so I'm thinking more along the
+ lines of an interactive command that lets me say that [talk]
+ actually started at [time] and then it adjusts all the talks and
+ republishes the schedule files and pushes them. I already have
+ something that goes off the FIXED_TIME property, so I think it's
+ more like a matter of kicking it off with fewer keystrokes and
+ making it part of the talk transition process. And maybe
+ something that sets a QA_START property for the timestamp of the
+ Q&A.
+** On starting early
+ Observations Starting early caused frustration for some people
+ who had written down the times. We had disclaimers, but of
+ course people skipped right over them. =) Explanation Our
+ opening remarks were designed to buffer technical problems, but
+ we didn't have any. Well, I was stressing over the 480p thing,
+ but that wasn't worth holding up the talks. Remarks It's better
+ to be early than late during those events. (Well, maybe...
+ People regret missing out on talks they were looking forward
+ to, but we also don't want to run way past our time.) Improving
+ The problem was addressed live by prepending all the times with
+ ~; we could do the same next year. Since we were great at
+ keeping time this year, we might do away with with the
+ buffering time at the onset. *knocks on wood*
+** On accessibility
+*** Observations
+- jcorneli and dto did an amazing job of describing the talks.
+- jcorneli and dto had to sign off at times, and despite calls for volunteers in #emacsconf, nobody took over.
+*** Improving
+- Get more volunteers on-board beforehand.
+- (possibly) ask volunteers to commit to various morning/afternoon
+ shifts ahead of time so that there is always at least one planned
+ volunteer, but preferably two "on duty". I.e. a simple schedule for
+ volunteers.
+ - I said I was probably mostly available for day 1, but day 2 might
+ be a bit tougher. I can make sure people are more comfortable with
+ checking in people in case kid stuff comes up
+- I recommend breaking things into two-hour shifts, the transcribing
+ is a bit brain-heavy and kind of burned me out.
+- Choosing particular time blocks would make it a bit easier to
+ coordinate "interruption free" times with family/housemates. (This
+ was a big factor for me on Sunday afternoon, multiple kids and dog
+ plus other people. Next time I'll probably commit to transcribing
+ more on Saturday and then Sunday morning, and see if we can find
+ someone besides me for Sunday afternoon)
+ - Hah, there are no real interruption-free times with a 4-year-old
+- Get OK from jcorneli, dto, and other volunteers to add the
+ timestamped logs as possible descriptive text for the videos as
+ temporary subtitles while there are no proper transcripts.
+ - (ok from dto)
+- have opportunities for different levels of time sensitivity of
+ commitments (e.g. stuff people who can just drop in sometimes can
+ usually learn to do pretty easily and that helps).
+- A green-room could be fun, inviting speakers a "quiet" place to
+ talk about things before they "happen", answering questions, even
+ FAQs for speakers on a priority then becomes both a thanks and an
+ easy starter voluntering opportunity with obvious perks built in.
+ - I thought about having speakers check into a green room so that
+ the audio alert from it could be always available, but I thought
+ that having them check in directly to their room would be less of
+ a hassle than two successive echo checks. It was nice to have
+ zaeph join me as I checked in some people.
+- Cuttings streams as point-in-time markers collectievly assembled
+ could provide a path to CI/CD flows toward speach-to-text during the
+ event, or at least faster and eventually less manually after.
+ - The pad had timestamps with some formatting differences, so I was
+ able to pull them out and set them as properties. I ended up
+ manually reviewing the stream to see where to set the timestamps
+ anyway, since that felt like it might be easier. It mostly worked
+ except for the part where I accidentally included the prerec that
+ followed one of zaeph's talks. =) Maybe if we displayed a clear
+ timestamp at the start of the stream and then had some code that
+ would take that timestamp and calculate the correct offset for any
+ timestamps from the file... Yeah, that could work.
+ - So, like, a step in the check-in process that tells Emacs "All
+ right, this talk has started" (or "Oops, this talk started at X
+ time and I was distracted"), and it announces it to IRC and
+ stores the timestamp, and maaaaabye even spits out the ffmpeg
+ command to extract the previous talk out of the Icecast dump
+** On the pad
+ Observations The pad was opened by many people. I believe we
+ peaked at 145. On top of being opened, many people used the
+ pad. People appreciated being able to immediately access links
+ and notes from previous talks publicvoit kept the pad up to
+ date and super clean. It probably was quite exhausting to do
+ all this by himself, even though he had some help from ??? (b-
+ something, I've closed the query in IRC. :( ) Karl was the only
+ person who contributed to the time-stamp logging. As long as
+ Karl is at the event, that's perfectly fine but I had to leave
+ earlier because of time-zone shift and exhaustion. Clearing pad
+ colours periodically helped speakers focus The Q4: Q3: Q2: Q1:
+ template that evolved by the end of the conference was really
+ handy, since experienced volunteers could keep adding slots and
+ people could add in the convenient blank spots. Might be handy
+ to keep a copy of the boilerplate ready for pasting in. The pad
+ got zapped once, and the Wikimedia Etherpad didn't have an easy
+ way to restore to a certain point aside from copying and
+ pasting. If there's another pad with good revision history
+ management, that might be worth checking. Winding back a few
+ minutes and cutting/pasting the contents back to the current
+ pad, worked okay in a pinch but probably isn't ideal. Karl
+ agrees: restoring content once for the whole event with ~140
+ people reading/contributing is actually much better than
+ anticipated. However, when there is a better alternative: let's
+ switch. Reverse-chronological order worked better than
+ chronological order for typing things in. I don't know if
+ chronological order might be manageable if we have a Q1: Q2:
+ Q3: Q4: template so that people aren't accidentally pressing
+ enter in the middle of someone else's question. Also,
+ chronological might require more scrolling on the presenter's
+ part, and the questions move when people type things above
+ them. Karl: I don't see any advantage with
+ reverse-chronological order but several disadvantages: People
+ had hard time to add a new itemize-item at the top: I had to
+ fix many questions that were normal paragraphs. This cancels
+ out the main reason we had for starting the reverse order IMHO.
+ Everybody had to learn not to use the "normal" order of things
+ people are doing all the time: from top to bottom. Most
+ speakers on day one started with the topmost question for
+ answering as well. Karl: If the majority thinks, this is worth
+ the effort, let's continue with that. Otherwise, my guess would
+ be that having a few Q1, Q2, Q3 (in order), people will be fine
+ adding questions. I think some IRC questions fell through the
+ cracks. For people only posting questions on IRC, we would need
+ to teach them to prepend them with something like "Q:" or
+ similar. Otherwise, IRC is hard to skim for questions among the
+ chitchat.
+** On the topic of the talks
+*** Observations
+- Plenty of topics.
+- Varied topics.
+- People enjoyed the more personal talks.
+ - shoshin's talks.
+ - Pierce Wang's talk.
+ - My user/developer story.
+ - People liked the face-to-face.
+ - I'm so happy about that! I think people's stories are an important part of humanizing Emacs, and I'm glad we made space for those talks.
+- People liked the sequence of talks, too, which meant the time that we spent fiddling around with the flow of the talks worked out.
+- Even though it was tough for speakers to squeeze their talks into even smaller timeframes than they asked for, I think it worked out well that people got a taste of lots of different topics + Q&A time afterwards. I'm glad we were able to accept all the talks. As Karl pointed out before, most conference committees have to make tough decisions about which talks to accept and which talks to reject. If we can figure out a way to make it happen time-wise, I'd like to make our role more of accepting as much as we can, and then sorting and shaping talks so that they flow well together.
+*** Questions
+- Should we develop the idea of tracks?
+ - This year, we had an org-mode track which allowed people interested in org-mode to tune in at a precise time, and have many topics that could interest them in quick succession.
+ - Parallel tracks split organizer attention and result in high fear-of-missing-out; not sure we could have pulled it off this year, but maybe with more practice? I think it would be super-cool to have workshops if volunteers wanted to do them, like an Emacs Lisp workshop or an Org workshop where people can just drop in and ask questions or show stuff. Gotta have people, though.
+ - dto: I like the workshop idea
+ - Karl would love to see a switcher-track since approx. 97% of all people I work with are using vim and still do think that it's just about editing. Furthermore, a switcher-track overlaps with the newbie-track - so it's probably a matter of track-name marketing ;-)
+*** Improving
+- Finding more use for the alt-stream.
+ - ~30 people, 10% of the stream, like I thought! =) Didn't have the brainspace to pull it off on the first day, and narrowly had enough brainspace to do it on the second day. Might be able to do it more easily next time, now that I've remembered my laptop has a mute shortcut. That was only an issue because wasamasa couldn't play a game full-screen while looking at the Etherpad. Other speakers would have been able to look at the Etherpad on their own, so I wouldn't need to read things out to them and can stay muted for the whole time. It also tied me up attention-wise, so it was great that zaeph could handle checkins too (and I appreciated how he could drop in and say stuff). If I get bbb-recorder or some other virtual framebuffer-based streamer working next time, I might be able to run the alternate stream with less attention.
+ - Wouldn't it be amazing if next year we nailed the implementation of alternate streams and were able to pack in tons of talks, maybe with 10 minute summaries on the main stream and then extended demo/Q&A on the alternate streams...
+** On coordination
+*** Observations
+Stellar coordination on #emacsconf-org.
+*** Improving
+- We lost contact with mplsCorwin during his talk because the rtmp stream was one-way.
+ - We should have told him to keep an IRC window opened.
+ - Phoning him did the trick, but it was definitely more stressful for the speaker than just casually looking at the IRC window.
+ - I had the wrong channel open and wasn't watching the right screen. Thanks so much for the call Leo! The personal touch, like a call from an organizer when things aren't going right, can be huge.
+** On tech-checks
+*** Observations
+- We had a check-list to make sure that we weren't forgetting anything.
+- Asking for emergency contact info was a great idea.
+ - It saved our butts many times this year. =) =)
+*** Improving
+- Filling a table with all the info we gather (pre-rec or live: Q&A: live or pad/IRC, contact information, IRCnick)
+ - Our private repo was a good start, but we didn't prepare enough for the format.
+ - I like formalized processes, even when their steps might seem a little pedantic. Often there are complexities that we have the opportunity to prepare better for "between the lines" given such orginization. Maybe tech check is an easy place to start? IDK. I'm going to be trying to take this approach to everthing now, having hit upon it over the course of the conference at. al. Can we have too much org? ¯\_(ツ)_/¯
+- It was nice being able to add things to the tech checklist, such as making sure speakers knew how to check in via IRC.
+- Karl would like to be able to use a BBB room for tech-check so that we could share the load on those checks.
+** On asking for pre-recs
+*** Observations
+- We pushed speakers to send us more pre-recs this year.
+- As a result, we received more pre-recs (% ? I'd eyeball it at 60%)
+- Speakers mentioned struggling with recording. Maybe we can provide more explicit help: here are the settings for recording with OBS, here's a tutorial for video editing, here's an ffmpeg example for stitching images/videos+audio together and converting them to the right encoding
+*** Questions
+- Pre-recs are nice for us, but aren't we losing a bit of interaction with the public?
+ - Especially if we're having more tracks in the future like org-mode, it's nice to have the ability to react to what was said before you (cf. the talks on org-roam)
+ - We encouraged interactions between talk topics by asking speakers to coordinate beforehand, and I think everyone took us up on our suggestions. Tech demonstrations are always a little nerve-wracking, so it's nice to have everything smoothly running. (And it's hard to properly focus on someone else's presentation when you're worrying about yours and whether it'll still work... =) )
+- If pre-recs have a negative impact on interaction with the public, do we feel capable of handling more live presentations?
+ - Some moments during the conference were particularly stressful: on the one hand, I couldn't take a pause for 3h straight on D2 because of the late check-ins. On the other hand, some other moments were particularly calm. I believe we've gained some valuable experience on this, and we might be better at this the next time.
+ - We can stress a little less about checkins knowing that we can either check people in during the playing of their prerec or say that the Q&A for them will be deferred, or by asking people to check in even earlier if they can. It would be nice to get their IRC nick during the tech check, so we can check if they're around.
+- Short prerecs worked better than expected. Short prerec + live Q&A. 40-minute prerec talks are a little harder to stay engaged with
+** On animation/hosting
+*** Observations
+- My style of animation seems to have gone well with the public
+ - Self-deprecating humour.
+ - Making fun of tech-problems.
+** On check-ins
+*** Observations
+- Check-ins were done efficiently.
+- Protocols helped us streamline the process so that 1) we didn't forget anything, and 2) we could get things done quickly. Final protocol:
+ - Say hello, thank them
+ - Check if people's mics/screensharing work
+ - Check screen readability
+ - Check live talk vs prerec preference, live Q&A vs IRC/pad, and whether they want to read the pad themselves or have Amin read questions to them
+ - Let them know that they can answer questions in any order and skip questions if they want
+ - Tell them Amin will join and then give them the go-ahead
+ - Remind people about personal information (especially Org)
+ - Coach people to start their segment by saying their name and a quick intro to their talk (so that Amin doesn't have to stress out about remembering pronunciations)
+ - Give them a brief heads-up shortly before Amin joins
+ - Start recording when Amin joins
+ - Track timestamp of start
+ - Announce topic in IRC
+ - Leave
+ - TODO: automate scheduling, announcement, publishing previous talk, etc.
+- I like the ERC commands I made for sending people URLs and telling Amin who's ready where. =) They're in emacsconf-2020-private/index.org.
+** On live Q&A
+*** Observations
+ Check-in involved asking speakers if they wanted to do a live Q&A.
+*** Improving
+- Our tech-check should include if speakers want to do a live Q&A
+- Letting speakers know that they're almost out of time
+ - bandali suggested warning them via BBB whilst keeping his mic muted to the stream
+ - Problem: Speaker are startled and look like they're hearing voices :o)
+ - A bell? A chime? Something instrumental? If BBB webcam video is visible, Amin can hold up a sign.
+ - fun video of time-boxing Ig Nobel talks you need to watch: https://www.youtube.com/watch?v=xAnVNXaa5oA
+- sachac had a great idea of writing it in the pad, so that the speakers may know that they only have one minute/one question left.
+ - Yup, especially since most people were able to watch the pad for their own questions, and the ones who didn't were getting questions from Amin.
+** On publishing the recordings
+*** Observations
+- Figuring out the timestamps and splitting up the bulk recording into individual talks/Q&A takes time
+- We can satisfy the initial "Aaaaah! I want more!" by posting the
+ prerecs. If Amin keeps all of the day 1 prerecs in one folder, he
+ can just mv them into a public folder, and add any last-minute ones
+ as they come in. If we want to be super-fancy, maybe we can even
+ move them one at a time after each talk. although I think Amin likes
+ keeping them on that uwaterloo server, so it would be one more thing
+ he has to do.
+- Slicing is actually pretty fast and can be done on a partial copy of
+ the stream, so we might be able to do it in the future. We can
+ quietly replace them with higher-quality versions if we want to. **
+ Improving
+** On publishing the Q&A logs (brought up by bhavin192)
+*** Observations
+- Some of the logs have lots of '+1' which are a tad useless now.
+- We've mostly plopped whatever was in the pad in the relevant section on emacsconf.org.
+*** Improving
+- Process the logs to remove the extra stuff.
+ - It's definitely not a hgih-priority item, and I'd much rather have us on publishing the recordings as we have this year. (zaeph)
+- Rethink the format.
+ - Go for a newspaper style.
+ - Questions in bold.
+ - Answer below with the name of the speaker prepended.
+** On live viewership
+ ** Observations
+- We peaked at ~400 viewers during RMS talks.
+ - dto: wow!
+ - Last year peak viewers = ~270
+- D1 averaged at ~340 viewers. (eyeballing)
+- D2 averaged at ~250 viewers. (eyeballing)
+** On asking feedback
+*** Observations
+- Viewers gave us quite a lot of feedback in the Other Pad™.
+*** Questions
+- How are we going to ask speakers for feedback? Etherpad/email
+ - Form to fill send via email?
+ - FOSS online form?
+ - (Off-topic: Do we have news from the Emacs Developer Survey?)
+ - I think the number-crunching from the Emacs Survey will take a while
+** On having talks which could be construed as 'commercial product pitches'
+*** Observations
+- gmj`` on #emacsconf brought up the fact that Rainer König's talk
+ could have been associated to his Udemy course on org-mode (which
+ requires a fee).
+ - His Org talks are actually also available on Youtube for free. I
+ would have had no problem with Mickey Petersen plugging Mastering
+ Emacs update, too.
+*** Remarks
+- There's a general aversion to 'paying for stuff' in FOSS because it's often conflated with non-FOSS practices.
+ - This sentiment is problematic because it makes it hard for developers and community-figures to sustain themselves financially.
+ - FOSS has always allowed people to get paid for it; F doesn't mean $, but freedom. Also, it looks like the sentiment is shifting - more people are looking for ways to support the people who work on the stuff they like
+ - The systems of donations and patronage are the most widely accepted, but they're also the poorest in terms of results.
+ - Donations disproportionally favour prominent members of the community.
+ - The 'buy me a coffee' attitude downplays the amount of effort that goes into writing and maintaining software.
+ - A better solution for developers is project- or milestone-based financial goals: 'To develop feature X, it's going to take Y amount of money.'
+ - The idea is developed in https://sustainoss.org/
+ - To quote François Élie, an influent FOSS advocate in France:
+ - Free/libre software is free once it has been paid for.
+ - Having a service industry around FOSS is what allows plenty of non-dev actors (educators, tech-writers, etc.) to sustain themselves.
+*** Improving
+- Develop arguments to use with people who conflate 'paid services' with 'non-FOSS practices'.
+- Anticipate those problems by asking speakers how they sustain themselves in the FOSS world during the CFP.
+ - What would we do with the information?
+** On the CFP
+*** Observations
+- People appreciated the nudge to talk to people who might be having imposter syndrome
+*** Questions
+- Do we want submissions to be anonymized next year? I think it adds quite a bit of load on the volunteer handling the incoming submissions.
+- Do we want to experiment with the accept-as-much-as-possible approach next year as well?
+** On BBB
+*** Observations
+- Audio quality was all over the place.
+ - BBB aggressively adds gain to participants, but it doesn't seem to be doing it in an intelligent way.
+*** Remarks
+*** Improving
+- Prefer pre-recs?
+ - Has problems, cf. previous point on pre-recs.
+- Find other tools?
diff --git a/2021/office-hours.md b/2021/office-hours.md
new file mode 100644
index 00000000..42c376ba
--- /dev/null
+++ b/2021/office-hours.md
@@ -0,0 +1,38 @@
+[[!meta title="Office hours"]]
+[[!meta copyright="Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier"]]
+<!-- This file is exported from office-hours.org, so don't modify it directly. --->
+
+
+# Upcoming office hours
+
+Room URL: <https://bbb.emacsverse.org/b/ban-qye-fd1-5kw>
+
+- Tue Sep 14 1800 Vancouver / 2000 Chicago / 2100 Toronto &#x2013; Wed Sep 15 0100 GMT / 0300 Berlin / 0630 Kolkata / 0900 Singapore
+- Fri Sep 17 2100 Vancouver / 2300 Chicago &#x2013; Sat Sep 18 0000 Toronto / 0400 GMT / 0600 Berlin / 0930 Kolkata / 1200 Singapore
+- Sat Sep 18 0800 Vancouver / 1000 Chicago / 1100 Toronto / 1500 GMT / 1700 Berlin / 2030 Kolkata / 2300 Singapore
+- Tue Sep 21 1800 Vancouver / 2000 Chicago / 2100 Toronto &#x2013; Wed Sep 22 0100 GMT / 0300 Berlin / 0630 Kolkata / 0900 Singapore
+- Tue Sep 28 1800 Vancouver / 2000 Chicago / 2100 Toronto &#x2013; Wed Sep 29 0100 GMT / 0300 Berlin / 0630 Kolkata / 0900 Singapore
+
+
+# About office hours
+
+We're aware that it can be intimidating to submit a proposal to a
+conference, so we thought we'd try to help! This year, we're opening
+up the doors of our virtual offices for you to come talk to us about
+your proposals with hopes of helping you with any hurdles you may be
+facing with preparing your proposal.
+
+We'd like to publish a schedule of availabilities of volunteers for
+holding office hours. Currently these volunteers consist of some of
+the EmacsConf organizers, but we'd love to have the help of other
+members of the Emacs community as well. If you are a more experienced
+Emacs user and would like to help with this, please [get in touch](https://emacsconf.org/contact/)!
+
+You can find the schedule for upcoming office hours (along with other
+Emacs events) at <https://emacsconf.org/2021/office-hours> . You can
+also get an iCal feed of Emacs-related events at
+<https://emacslife.com/calendar/emacs-calendar.ics> or get HTML/Org
+files in various timezones at <https://emacslife.com/calendar/> . When
+in session, the office hours will be held in this BigBlueButton room:
+<https://bbb.emacsverse.org/b/ban-qye-fd1-5kw>.
+
diff --git a/2021/office-hours.org b/2021/office-hours.org
new file mode 100644
index 00000000..ff8256eb
--- /dev/null
+++ b/2021/office-hours.org
@@ -0,0 +1,43 @@
+#+title: Office hours
+#+options: author:nil
+
+#+begin_export md
+[[!meta title="Office hours"]]
+[[!meta copyright="Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier"]]
+<!-- This file is exported from office-hours.org, so don't modify it directly. --->
+#+end_export
+#+begin_comment
+[[elisp:(org-md-export-to-markdown)][Export]]
+#+end_comment
+
+* Upcoming office hours
+
+Room URL: https://bbb.emacsverse.org/b/ban-qye-fd1-5kw
+
+- Tue Sep 14 1800 Vancouver / 2000 Chicago / 2100 Toronto -- Wed Sep 15 0100 GMT / 0300 Berlin / 0630 Kolkata / 0900 Singapore
+- Fri Sep 17 2100 Vancouver / 2300 Chicago -- Sat Sep 18 0000 Toronto / 0400 GMT / 0600 Berlin / 0930 Kolkata / 1200 Singapore
+- Sat Sep 18 0800 Vancouver / 1000 Chicago / 1100 Toronto / 1500 GMT / 1700 Berlin / 2030 Kolkata / 2300 Singapore
+- Tue Sep 21 1800 Vancouver / 2000 Chicago / 2100 Toronto -- Wed Sep 22 0100 GMT / 0300 Berlin / 0630 Kolkata / 0900 Singapore
+- Tue Sep 28 1800 Vancouver / 2000 Chicago / 2100 Toronto -- Wed Sep 29 0100 GMT / 0300 Berlin / 0630 Kolkata / 0900 Singapore
+
+* About office hours
+
+We're aware that it can be intimidating to submit a proposal to a
+conference, so we thought we'd try to help! This year, we're opening
+up the doors of our virtual offices for you to come talk to us about
+your proposals with hopes of helping you with any hurdles you may be
+facing with preparing your proposal.
+
+We'd like to publish a schedule of availabilities of volunteers for
+holding office hours. Currently these volunteers consist of some of
+the EmacsConf organizers, but we'd love to have the help of other
+members of the Emacs community as well. If you are a more experienced
+Emacs user and would like to help with this, please [[https://emacsconf.org/contact/][get in touch]]!
+
+You can find the schedule for upcoming office hours (along with other
+Emacs events) at https://emacsconf.org/2021/office-hours . You can
+also get an iCal feed of Emacs-related events at
+https://emacslife.com/calendar/emacs-calendar.ics or get HTML/Org
+files in various timezones at https://emacslife.com/calendar/ . When
+in session, the office hours will be held in this BigBlueButton room:
+https://bbb.emacsverse.org/b/ban-qye-fd1-5kw.
diff --git a/2021/organizers-notebook.md b/2021/organizers-notebook.md
new file mode 100644
index 00000000..1234cf00
--- /dev/null
+++ b/2021/organizers-notebook.md
@@ -0,0 +1,10 @@
+<!-- organizers-notebook.md is exported from organizers-notebook.org, please modify that instead. -->
+[[!toc levels=4]]
+
+
+# Notes for next time
+
+- sachac: It might be more inclusive to call it a "Call for
+ Participation" instead of a "Call for Proposals", since we're
+ inviting more than proposals.
+
diff --git a/2021/organizers-notebook.org b/2021/organizers-notebook.org
new file mode 100644
index 00000000..7cca07a0
--- /dev/null
+++ b/2021/organizers-notebook.org
@@ -0,0 +1,33 @@
+#+todo: TODO(t) INPROGRESS(i) | DONE(d) CANCELLED(c)
+#+OPTIONS: h:6 toc:nil
+#+PROPERTY: header-args :results silent :exports code :tangle yes
+
+#+begin_export md
+<!-- organizers-notebook.md is exported from organizers-notebook.org, please modify that instead. -->
+[[!toc levels=4]]
+#+end_export
+
+* COMMENT How to export this file :noexport:
+
+- [[elisp:(progn (org-md-export-to-markdown) (org-babel-tangle))][Export and tangle]]
+- [[elisp:(org-babel-execute-buffer)][Execute buffer]]
+
+* Notes for next time
+
+- sachac: It might be more inclusive to call it a "Call for
+ Participation" instead of a "Call for Proposals", since we're
+ inviting more than proposals.
+
+** COMMENT Copyright & License
+
+ Copyright (C) 2020, 2021 Sacha Chua
+
+ The EmacsConf 2021 organizers' notebook is part of the EmacsConf
+ wiki, and is dual-licensed under the terms of the Creative Commons
+ Attribution-ShareAlike 4.0 International Public License; and the GNU
+ General Public License as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later
+ version.
+
+ A copy of these two licenses is available on the EmacsConf wiki, in
+ the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
diff --git a/2021/planning.md b/2021/planning.md
new file mode 100644
index 00000000..af60368b
--- /dev/null
+++ b/2021/planning.md
@@ -0,0 +1,23 @@
+[[!meta title="Planning"]]
+[[!meta copyright="Copyright &copy; 2020, 2021 Amin Bandali"]]
+
+Most of the EmacsConf organizers and other volunteers hang out in the
+`#emacsconf` IRC channel on `irc.libera.chat`. If you would like to
+get involved, come by our `#emacsconf` channel and say hi!
+
+Besides IRC, the [emacsconf-org][emacsconf-org] public mailing list is
+the main medium of communication for the EmacsConf organizers.
+
+The organizers will use this page as a collection of various notes,
+ideas, and plans for organizing the conference, and may add excerpts
+from the channel logs for `#emacsconf` and `#emacsconf-org` to this
+page.
+
+You might find it useful to also look at the plans and notes from
+previous years, such as 2020's [[planning|2020/planning]] and
+[[organizers' notebook|2020/organizers-notebook]], and 2019's
+[[planning|2019/planning]] and [[organizers'
+notebook|2019/organizers-notebook]] pages.
+
+
+[emacsconf-org]: https://lists.gnu.org/mailman/listinfo/emacsconf-org
diff --git a/2021/playbook.md b/2021/playbook.md
new file mode 100644
index 00000000..cbee525a
--- /dev/null
+++ b/2021/playbook.md
@@ -0,0 +1,1411 @@
+
+# Table of Contents
+
+- [Roles/values](#roles)
+- [After the conference](#org9010597)
+ - [Update captions](#org1ede55a)
+ - [Update](#org9a1dcfd)
+ - [Send thanks](#thanks):email:
+- [Thursday or Friday before the conference](#days-before)
+- [On the day of the conference](#day-of)
+ - [Set up](#setup)
+ - [Arrange screens](#screens)
+ - [Start streaming](#start-streaming):stream:
+ - [Talk process](#talk)
+ - [Check in a speaker](#check-in)
+ - [Present talk](#present)
+ - [Publish information](#publish)
+ - [Handle Q&A](#questions)
+ - [Break time](#break)
+ - [End of stream](#end)
+ - [In case of&#x2026;](#exceptions)
+ - [Last-minute prerecording submission](#last-minute-prerec)
+ - [Last-minute caption update](#last-minute-captions)
+ - [Speaker has not checked in](#missing)
+ - [Speaker does not have a prerec and has not checked in](#really-missing)
+ - [Speaker whose talk was reallocated shows up and has a prerec](#reallocated-prerec)
+ - [Speaker whose talk was reallocated shows up and wants to do it live](#reallocated-live)
+ - [Alternate stream volunteer wants to stream (nice to have, at risk)](#alternate)
+ - [Pad malfunction or mess-up](#pad-broken)
+ - [CRDT malfunctions](#crdt-broken)
+ - [Conduct guidelines issue](#conduct)
+ - [CHECK is unavailable](#check-gone)
+ - [HOST is unavailable](#host-gone)
+ - [Technical issues during a live presentation](#live-issues)
+ - [Big technical issues with streaming](#stream-issues)
+ - [live0 can't handle the load or is close to network transfer limit](#network)
+- [Before the conference](#before)
+ - [Send calls for proposals](#cfp-mails)
+ - [[ANN] EmacsConf 2021 Call for Proposals](#first-cfp):email:
+ - [Second (and final) call for proposals (closing Sep 30)](#second-cfp):email:
+ - [Accept talks](#accept):email:
+ - [E-mail text](#orgb8732b7)
+ - [Thank speakers for submissions](#acknowledge-submission):email:
+ - [Captions prepared](#orge92309b)
+ - [Captions pending](#org6bed7ae)
+ - [Help speakers with tech checks](#tech-checks)
+ - [Follow up with speakers we haven't heard from](#follow-up-silence):email:
+ - [Send check-in instructions](#check-in-instructions):email:
+ - [Unknown Q&A preference](#org4fa4a70)
+ - [Speakers will handle Q&A live](#org55b075e)
+ - [Speakers will handle questions after the event](#org544baed)
+ - [Announce schedule and watching instructions](#announce-schedule):email:
+ - [E-mail text](#org41b2906)
+ - [Follow up regarding prerecorded videos](#follow-up-prerecs):email:
+ - [Offer speakers the opportunity to go live if they really really want to](#go-live-maybe):email:
+ - [Email text](#orgb88fbb1)
+ - [Compress video](#orgbe5dce0)
+ - [Experiment with setup to allow MPV / BBB sound isolation](#sound)
+ - [Check for video encoding issues](#orgde63d42)
+
+<!-- This file was automatically generated from playbook.org. Instead of editing the .md, please edit the .org and republish. Thanks! -->
+
+
+<a id="roles"></a>
+
+# Roles/values
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">B</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">bandali</td>
+</tr>
+
+
+<tr>
+<td class="org-left">CHECK</td>
+<td class="org-left">check-ins</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">HOST</td>
+<td class="org-left">hosting, streaming, intros, reading, moving questions/answers around</td>
+<td class="org-left">zaeph</td>
+</tr>
+</tbody>
+</table>
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">${protected}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/media.emacsconf.org/2021/protected/">file://ssh:front:/var/www/media.emacsconf.org/2021/protected/</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${stream-status}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/live.emacsconf.org/index.html">file://ssh:front:/var/www/live.emacsconf.org/index.html</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${upcoming}</td>
+<td class="org-left">upcoming.org shared over CRDT</td>
+</tr>
+
+
+<tr>
+<td class="org-left">${conf}</td>
+<td class="org-left">conf.org shared over CRDT</td>
+</tr>
+
+
+<tr>
+<td class="org-left">${playbook}</td>
+<td class="org-left">playbook.org shared over CRDT</td>
+</tr>
+
+
+<tr>
+<td class="org-left">${dump}</td>
+<td class="org-left"><a href="file://ssh:live:/data/">file://ssh:live:/data/</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${media}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/media.emacsconf.org/2021/">file://ssh:front:/var/www/media.emacsconf.org/2021/</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${live-main}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/live.emacsconf.org/main.html">file://ssh:front:/var/www/live.emacsconf.org/main.html</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${live-480p}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/live.emacsconf.org/main-480p.html">file://ssh:front:/var/www/live.emacsconf.org/main-480p.html</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${live-index}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/live.emacsconf.org/index.html">file://ssh:front:/var/www/live.emacsconf.org/index.html</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${live-alt}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/live.emacsconf.org/alt.html">file://ssh:front:/var/www/live.emacsconf.org/alt.html</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${profile}</td>
+<td class="org-left"><a href="file://ssh:live:~/.profile">file://ssh:live:~/.profile</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${emacsconf-el}</td>
+<td class="org-left"><a href="https://git.emacsconf.org/emacsconf-el/">https://git.emacsconf.org/emacsconf-el/</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="org9010597"></a>
+
+# After the conference
+
+
+<a id="org1ede55a"></a>
+
+## Update captions
+
+- Merge them into the video with `add-captions.sh`
+
+ #!/usr/bin/zsh
+ BASE="${1%.*}"
+ BASE="${BASE%--main}"
+ ffmpeg -y -i "$1" ${BASE}--main.vtt
+ if [ -f "${BASE}--normalized.webm" ]; then
+ ffmpeg -y -i "$1" -i "${BASE}--normalized.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ else
+ ffmpeg -y -i "$1" -i "${BASE}--compressed.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ fi
+ cp ${BASE}--main.vtt ${BASE}--chapters.vtt ~/vendor/emacsconf-wiki/2021/captions
+ scp "${BASE}--captioned.webm" "${BASE}--main.webm"
+ scp "${BASE}--main.webm" front:~/protected
+ scp "${BASE}--main.vtt" front:~/protected
+ scp "${BASE}--chapters.vtt" front:~/protected
+ ssh front 'cd protected; chmod ugo+r *'
+- Update Toobnix and Youtube captions with `conf-video-share`.
+- Update Toobnix and Youtube descriptions with chapters.
+- Update ${conf-year}/${captions}/${slug}.md in the wiki. To make this from scratch, use `M-x conf-prepare-transcript-directives` from the talk heading in the conference Org file.
+
+
+<a id="org9a1dcfd"></a>
+
+## Update
+
+
+<a id="thanks"></a>
+
+## Send thanks :email:
+
+Thank you so much for being part of EmacsConf ${conf-year}! Hundreds of people
+enjoyed it, and I'm sure even more will come across the videos in the
+days to follow.
+
+Your prerecorded video is available on the talk page at ${url} , and
+we've added the questions and comments that we've collected from
+IRC/BBB/Etherpad. The recording of your Q&A session is also on the
+talk page.
+
+We've also uploaded your talk video to ToobNix (a PeerTube instance)
+at ${toobnix-url} and YouTube at ${youtube-url} . If you
+want to reupload the video to your own channel, feel free to do
+so. You can add the subtitles by downloading them from the talk page
+and uploading them to your video. If you let me know where you've
+uploaded it, I can switch our playlist to include your version of the
+video instead. That way, it might be easier for you to respond to
+questions on videos. (Which some people have already been adding,
+yay!)
+
+If you would like to share more resources, you can add them to the
+talk page or e-mail them to us and we can add them for you.
+
+Thanks again for speaking at EmacsConf!
+
+
+<a id="days-before"></a>
+
+# Thursday or Friday before the conference
+
+- STREAM: Download prerecorded videos from ${protected}
+
+ rsync -avzue ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
+
+
+<a id="day-of"></a>
+
+# On the day of the conference
+
+
+<a id="setup"></a>
+
+## Set up
+
+
+<a id="screens"></a>
+
+### Arrange screens
+
+- CHECK:
+ - Share ${upcoming}, ${playbook}, and ${conf} via CRDT: `conf-crdt-connect-and-share`
+ - Current schedule, filenames/commands for playing, Q&A preference, IRC nick, pronunciation, intro notes, prerec duration, emergency contact information
+ - `conf-upcoming-add-subtree`
+ - Have #emacsconf-org, #emacsconf, #emacsconf-accessible, and #emacsconf-questions open
+ - Use `/opall` to get op privileges in all the channels
+ - Start backup process for pad
+
+ while true; do
+ curl https://etherpad.wikimedia.org/p/emacsconf-2021/export/html > emacsconf-$(date +"%Y%m%d-%H%M%S").html
+ sleep 15m
+ done
+ - Computer for alternate streaming:
+ - Open browser for joining BBB
+ - Open MPV for playing <http://live0.emacsconf.org:8000/main.webm>
+- HOST:
+ - rsync the newest &#x2013;main.webm from front: rsync -avze ssh front:/var/www/media.emacsconf.org/2021/protected/\*&#x2013;main.webm .
+ - Check OBS scenes for sharing windows/tabs as a virtual camera:
+ - chat.emacsconf.org with #emacsconf
+ - Etherpad
+ - Schedule
+ - next talk page
+ - Clock with current time on screen: `watch TZ=America/Toronto date`
+ - Set up backchannel for easy viewing
+ - ${upcoming}
+ - \#emacsconf-org and #emacsconf channels
+ - (?) Join organizer room S
+
+
+<a id="start-streaming"></a>
+
+### Start streaming :stream:
+
+- HOST: Display getting-ready message and start streaming to main.webm
+- HOST: Confirm that the stream is live at <https://live.emacsconf.org/main.webm>
+- B: Update ${status} to say that the stream is live
+- CHECK: Start low-resolution stream, confirm at <https://live.emacsconf.org/main-480p.webm>
+ Call this on live0 with $CONF480PASS as the first parameter. The Icecast configuration is on `live0` at <file:///ssh:live|sudo:/etc/icecast2/icecast.xml>=.
+
+ PASS=$1
+ while true; do ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx icecast://ec2020main480pmu:$PASS@localhost:8000/main-480p.webm; done
+- CHECK: Start Youtube and Toobnix streams. Call this with $YOUTUBE1PASS, $YOUTUBE2PASS, or $TOOBNIX as the parameter
+
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
+- CHECK: Verify YouTube and Toobnix streams and the CPU load on live0.
+- CHECK: Set the YouTube and Toobnix streams to public.
+- B: Verify with #emacsconf that the stream is active.
+- CHECK: Play main stream on alternate laptop. Start alternate stream and verify. Update ${status}.
+- CHECK: Announce on Twitter (@emacs, @emacsconf, @sachac) and in #emacs
+ EmacsConf 2021 starting now: <https://emacsconf.org/2021/>
+
+
+<a id="talk"></a>
+
+## Talk process
+
+
+<a id="check-in"></a>
+
+### Check in a speaker
+
+Exception: [CHECK is unavailable](#check-gone)
+
+- Speaker checks in on #emacsconf-org via IRC or via e-mail ~30m before
+- CHECK notes IRC nick for speaker.
+- CHECK confirms Q&A preference: live/IRC/Etherpad, preferred way of getting questions
+- [? unknown] Thanks for checking in! How would you like to handle Q&A
+ today - live video, the collaborative Etherpad at
+ <https://etherpad.wikimedia.org/p/emacsconf-2021> , or IRC (like
+ this)?
+- [? IRC] Thanks for checking in! Feel free to keep an eye on
+ \#emacsconf for questions and discussion, and we'll copy things from
+ the pad to there. If the volume gets overwhelming, let us know and
+ we can forward questions to #emacsconf-questions for you. If you'd
+ like to try Q&A over live video or the collaborative pad instead, or
+ if you need help, please let us know.
+- [? Etherpad] Thanks for checking in! The collaborative pad we'll be
+ using for questions is at
+ <https://etherpad.wikimedia.org/p/emacsconf-2021> . We'll collect
+ questions from #emacsconf and put them there. If you'd like to jump
+ to your part of the document, you might be able to keep an eye on
+ questions. Please let us know if you need help, or if you want to
+ switch to live Q&A.
+- [? live] Thanks for checking in! I'll send you some private messages
+ with instructions, so please check there. Let me know if you don't
+ get them.
+ - Private messages:
+ - (erc-message "PRIVMSG" (format "%s You can use this BBB room: %s . I'll join you there shortly to set up the room and do the last-minute tech check." nick room-url))
+ - (erc-message "PRIVMSG" (format "%s The collaborative pad we'll be using for questions is at %s . We'll collect questions from #emacsconf and put them there. If you'd like to jump to your part of the document, you might be able to keep an eye on questions. Alternatively, we can read questions to you." nick conf-collaborative-pad))
+ - (erc-message "PRIVMSG" (format "%s Leo Vivier will join when it's time, and he will give you the go-ahead when it's time to present. See you in the BBB room!" nick))
+ - CHECK directs speaker to available room with `/checkin <room> <nick>`
+ - Speaker joins talk room
+ - CHECK makes speaker presenter and moderator, does last-minute tech check
+ - Hello, thanks
+ - Speaker tries screen sharing and webcam (optional)
+ - check screen readability
+ - CHECK briefs speaker on process, including:
+ - live Q&A: reading questions themselves (can do in any order,
+ can skip; coach possible responses for awkward things) or asking HOST to read questions to them
+ - HOST can share the pad or IRC; speaker shares screen only if doing demo
+ - encouragement of webcam, although it's optional
+ - how HOST will join shortly before the prerec ends and then
+ give them the go-ahead
+ - closing any tabs watching the stream as their talk starts
+ (otherwise the audio is confusing)
+ - If the speaker will be giving a live presentation, CHECK
+ collects emergency contact information (in case of technical
+ issues) and shares it with HOST in the CRDT buffer
+ - Okay to do other things until the prerec ends
+ - CHECK updates ${upcoming} with link to the talk room and
+ preferences for Q&A-. CHECK will also /msg the relevant
+ information.
+
+
+<a id="present"></a>
+
+### Present talk
+
+- CHECK announces the next talk on IRC and marks the previous talk as done. (`conf-announce`)
+- PAD clears pad colours.
+- [? prerec]
+ - HOST switches to MPV scene in OBS and plays the video (with captions if available).
+ - Exception: [Last-minute prerecording submission](#last-minute-prerec)
+ - Exception: [Last-minute caption update](#last-minute-captions)
+ - [CHECK publishes information](#publish)
+ - [HOST gets a head start on handling Q&A](#questions)
+ - When prerec finishes, HOST switches the OBS scene to show BBB.
+- [? live]
+ - Exception: [Speaker does not have a prerec and has not checked in](#really-missing)
+ - HOST joins the BBB room and double-checks that recording is on.
+ - CHECK-alternate joins the BBB room and pauses main MPV.
+ - HOST switches to OBS scene for BBB.
+ - Speaker presents.
+ - Exception: [Technical issues during a live presentation](#live-issues)
+ - [? talk needs to be wrapped up]
+ - HOST nudges speaker verbally.
+
+
+<a id="publish"></a>
+
+### Publish information
+
+- CHECK updates the schedule in:
+ - ${conf}
+ - ${upcoming}
+ - wiki
+- CHECK publishes the video to media.emacsconf.org using `conf-publish-files`
+- CHECK commits the wiki page and the captions for the talk.
+- CHECK publishes the video on YouTube and ToobNix using `conf-video-share`.
+ - Update description:
+
+ This video is available under the terms of the
+ Creative Commons Attribution-ShareAlike 4.0 International (CC
+ BY-SA 4.0) license.
+
+ You can view it using free and open source software at
+ ${url}
+
+ ${description}
+ - Mark it as public.
+ - Add it to EmacsConf 2021 playlist.
+ - Update title and description.
+ - Mark it as public.
+ - Doublecheck subtitles
+ - Add it to the EmacsConf 2021 playlist.
+- [? live sections]
+ - CHECK does a rough-cut of the recording from ${dump} to get the last X minutes or by time range. There's about a 1-2 minute delay.
+ Ex: `(kill-new (conf-dump-get "alt" "10:24" "10:30" "qa_"))`
+ - When there's an opportunity to do so:
+ - CHECK finetunes the rough-cut recording (trim start and end) and posts it to:
+ - media.emacsconf.org/2021
+ - wiki page for talk
+
+
+<a id="questions"></a>
+
+### Handle Q&A
+
+Exceptions:
+
+- [Speaker has not checked in](#missing)
+
+- [? live]
+ - CHECK-alternate joins the BBB room and pauses MPV.
+ - HOST joins the BBB room
+ - HOST starts recording in BBB or confirms that it's already recording
+ - HOST switches to the BBB scene in OBS.
+ - HOST describes how to ask questions.
+ - [? No questions yet]
+ - HOST thanks speaker, says nice things about talk, and asks a couple of prepared questions
+ - [? Awkward question]
+ - HOST can try rephrasing the question.
+ - HOST adds note to IRC/Etherpad that speakers can answer in any order, skip questions, answer afterwards, etc.
+ - [? Q&A needs to be wrapped up]
+ - HOST writes in Etherpad/IRC or nudges speaker verbally.
+ - CHECK notes the time that the live Q&A finished and switches back to the main stream on CHECK-alternate.
+- [? IRC/pad]
+ - HOST switches to pad/chat OBS scene.
+ - HOST describes Q&A method and shows it on the screen.
+ - While there's buffer time before the next talk, HOST can read out
+ questions and answers, or transition to the next talk early
+ - HOST: It's time for the next talk, but if you want to keep
+ discussing the previous talk, please feel free to continue doing
+ so on IRC or the pad.
+- [? speaker will answer after the conference]
+ - HOST switches to pad/chat OBS scene.
+ - HOST says the speaker is not available right now, but we'll
+ forward the questions to the speaker and we'll post the speaker's
+ answers on the wiki page. Leave your contact information if you
+ want to be notified, or subscribe to the emacsconf-discuss mailing
+ list to get the announcement. Please feel free to continue
+ discussing the talk on IRC or the pad.
+- [Present next talk](#present)
+
+
+<a id="break"></a>
+
+## Break time
+
+- CHECK marks the last talk as done. `conf-end-current-talk`
+- CHECK stops and restarts the Toobnix restreaming process, and re-checks the stream
+- CHECK uses `conf-upcoming-add-subtree` to add the afternoon talks to upcoming.org
+- HOST doublechecks network transfer limit and server health
+
+
+<a id="end"></a>
+
+## End of stream
+
+- CHECK removes live Q&A links
+- CHECK stops ffmpeg process for Youtube
+- CHECK stops ffmpeg process for Toobnix
+- CHECK stops ffmpeg process for main-480p
+- STREAM stops streaming
+- B updates the status pages
+- bandali figures out the downstream
+
+
+<a id="exceptions"></a>
+
+## In case of&#x2026;
+
+
+<a id="last-minute-prerec"></a>
+
+### Last-minute prerecording submission
+
+- CHECK will copy it from the FTP upload server to ${protected} and name it appropriately.
+- CHECK will notify STREAM with the scp command and the mpv command so that STREAM can choose.
+
+
+<a id="last-minute-captions"></a>
+
+### Last-minute caption update
+
+- CHECK uploads the &#x2013;main.vtt file to ${protected}
+- CHECK notifies STREAM via ${upcoming}
+- STREAM uses the provided commands to download the VTT file and load it into MPV with `--sub-file`
+
+
+<a id="missing"></a>
+
+### Speaker has not checked in
+
+- Let the previous talk run a little longer for Q&A; end at least in time for the prerec
+- After the previous Q&A wraps up, play the prerec
+- [? still not around after prerec finishes]
+ - HOST: Speaker might be having some difficulty connecting, but we'll collect your questions on the pad and send them afterwards.
+ - Can play next prerec a few minutes early
+
+
+<a id="really-missing"></a>
+
+### Speaker does not have a prerec and has not checked in
+
+- Let the previous talk do live Q&A/demo if ready
+- Close to the time of the missing talk:
+ - See if any of the previous speakers want to be set up for an impromptu talk/extension in a BBB room, just in case
+ - HOST: The next speaker might be having some difficulty connecting. In the meantime, let's&#x2026;
+ - OR:
+ - highlight ongoing discussions
+ - invite another speaker for an impromptu extension; mplsCorwin will keep a list of possible speakers who are still active
+ - replay a short prerec
+ - let mplsCorwin or zaeph fill in
+
+
+<a id="reallocated-prerec"></a>
+
+### Speaker whose talk was reallocated shows up and has a prerec
+
+- CHECK copies it to ${protected}
+- Plan to play prerec at the end of the day, or in any gaps if a live talk falls through
+
+
+<a id="reallocated-live"></a>
+
+### Speaker whose talk was reallocated shows up and wants to do it live
+
+- See if there's enough time if buffers are shuffled back; if so, set up for a live presentation
+- Check for alternate stream volunteers
+- [? not enough time] Offer to set up a BBB room for recording or to
+ accept a prerecording afterwards, then include it on the site and in
+ post-conference communication
+
+
+<a id="alternate"></a>
+
+### Alternate stream volunteer wants to stream (nice to have, at risk)
+
+- CHECK gives ALTERNATE the BBB room URL for the talk they are interested in
+- ALTERNATE starts streaming to assigned end point
+- CHECK confirms stream
+- CHECK updates ${stream-status}
+- CHECK notifies STREAM and HOST
+ - After prerec plays:
+ - HOST: This talk has an extended demo/Q&A. You can go to ${alternate-url} to watch it, and we'll post a recording afterwards.
+ - HOST sends ${alternate-url} to IRC: Alternate stream for ${title}: ${alternate-url}
+- ALTERNATE notifies #emacsconf-org when the stream is done.
+- CHECK updates ${stream-status} to note that the alternate stream is finished.
+
+ FFMPEG process for sending the desktop and audio to the $CONFALT mountpoint on Linux with X11 and Alsa:
+
+ 1. Set the CONFALT environment variable to icecast://user:password@live0.emacsconf.org:8000/alt.webm
+ 2. Install pavucontrol if you don't have it already.
+ 3. Start the following command (<playbook/stream-desktop-and-audio.sh>:
+
+ while true; do ffmpeg -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done
+ 4. Use pavucontrol to set the recording source for the ffmpeg
+ command to be the audio monitor, so you get system output as
+ well.
+ - OR:
+ - [? splitting audio] [Set up sinks for sound](#sound)
+ - [? same audio]
+ - Set up audio monitor as the input for FFMPEG
+ - MPV goes to MPV sink, browser goes to recording sink, FFMPEG takes in recording monitor
+
+
+<a id="pad-broken"></a>
+
+### Pad malfunction or mess-up
+
+- PAD resets the pad using <https://etherpad.wikimedia.org/p/emacsconf-2021/timeslider>
+- [? still not recovered]
+ - PAD reimports the pad from backup
+
+
+<a id="crdt-broken"></a>
+
+### CRDT malfunctions
+
+- HOST notifies CHECK and tries reconnecting
+- [? still doesn't work]
+ - Switch to backup Etherpad
+
+
+<a id="conduct"></a>
+
+### Conduct guidelines issue
+
+- HOST addresses it (on-camera if needed) with a reminder and/or a kick or a ban
+
+
+<a id="check-gone"></a>
+
+### CHECK is unavailable
+
+- HOST does check-ins
+- HOST refers to conf.org for Q&A preference etc.
+- STREAM checks conf.org for prerec filenames etc.
+- Dropped goals:
+ - Publishing recordings ASAP
+ - Updating schedule/wiki on the fly
+
+
+<a id="host-gone"></a>
+
+### HOST is unavailable
+
+- STREAM joins the BBB room and streams directly from there (or streams the prerecs).
+- STREAM will do the hosting.
+
+
+<a id="live-issues"></a>
+
+### Technical issues during a live presentation
+
+- HOST tries to contact the speaker
+- [? back on track]
+ - [? can be squeezed into remaining time]: Continue
+ - [? need extra time]: CHECK fiddles with buffer of following talks in conf.org and updates schedule
+ - [? need too much extra time (ex: 10min)]: HOST acknowledges
+ technical issues and says we may be able to follow up after the
+ conference
+- [? can't resume]: HOST acknowledges technical issues and says we may
+ be able to follow up after the conference
+
+
+<a id="stream-issues"></a>
+
+### Big technical issues with streaming
+
+- HOST notifies #emacsconf and #emacsconf-org and adds a note at the top of the ${pad}.
+- HOST updates the 2021.md wiki page
+- CHECK publishes prerecordings
+ - media.emacsconf.org
+ - wiki
+ - Toobnix
+ - Peertube
+- STREAM e-mails the mailing list
+
+
+<a id="network"></a>
+
+### live0 can't handle the load or is close to network transfer limit
+
+- OR:
+ - Redirect some viewers via asking in #emacsconf:
+ - watch via main-480p
+ - watch via Toobnix (if we can get that working)
+ - Consider dropping the restream to Toobnix (lower audience?) or to Youtube
+ - Add additional node to Linode account for shared transfer pool (TODO: doublecheck)
+
+
+<a id="before"></a>
+
+# Before the conference
+
+
+<a id="cfp-mails"></a>
+
+## Send calls for proposals
+
+
+<a id="first-cfp"></a>
+
+### [ANN] EmacsConf 2021 Call for Proposals :email:
+
+Sent on August 5, 2021 to emacsconf-discuss, emacs-devel, emacs-orgmode, emacs-tangents, Cc: emacsconf-org.
+Included inline Markdown and attached Org version of the CFP
+
+- E-mail text
+
+ #+title: EmacsConf 2021
+ #+subtitle: Online Conference
+ #+date: November 27 and 28, 2021
+ #+options: author:nil
+
+ [[https://emacsconf.org/2021/][EmacsConf 2021]] will be a virtual conference on *November 27 and 28,
+ 2021 (Sat-Sun)*. If you'd like to present at the conference, please
+ [[https://emacsconf.org/2021/cfp/][submit your proposal]] by *September 30, 2021*.
+
+ EmacsConf 2021 is about the joy of [[https://www.gnu.org/software/emacs/][Emacs]] and Emacs Lisp. Come share
+ your experiments and adventures with the Emacs text editor / operating
+ system / way of life! We welcome speakers of *all backgrounds* and
+ *all levels of experience*, including newcomers giving their first
+ talk. What have you found exciting about Emacs lately? What do you
+ wish someone had told you when you were starting out? What part of
+ your workflow might inspire someone to get into Emacs or go deeper?
+
+ A great way to get started with writing a proposal is to start by
+ exploring the programs from previous years: [[https://emacsconf.org/2020/schedule/][2020]], [[https://emacsconf.org/2019/schedule/][2019]], [[https://emacsconf.org/2015/schedule/][2015]], [[https://emacsconf.org/2013/#program][2013]].
+ You might also find some neat ideas on the [[https://emacsconf.org/2021/ideas/][ideas]] page. Feel free to
+ add yours there too! If you're still not sure, come by our IRC
+ channel =#emacsconf= on =irc.libera.chat= and say hi. You can join
+ the chat using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by visiting
+ [[https://chat.emacsconf.org][chat.emacsconf.org]] in your web browser.
+
+ All kinds of people use Emacs for all kinds of things. We'd love it
+ if EmacsConf 2021 could highlight interesting perspectives and reflect
+ the diversity of our community. If you know someone who might have a
+ good idea for a talk, please reach out to them and encourage them to
+ submit a proposal. Many people (especially from underrepresented
+ groups such as women, people of colour, non-developers, etc.) might
+ not consider themselves expert enough to share their thoughts. If you
+ let them know that you value their knowledge and maybe even suggest
+ something that you think others would like to hear more about, they
+ may realize that they have something worth sharing and that we would
+ love to hear from them.
+
+ * Important dates
+
+ For EmacsConf 2021, we are planning for 9am to 5pm Toronto/EST
+ (2pm-10pm UTC) on November 27 and 28. Depending on people's
+ availability, it might be two half-days.
+
+ | CFP opens | August 5, 2021 |
+ | CFP closes | September 30, 2021 |
+ | Speaker notifications | October 15, 2021 |
+ | Schedule published | October 31, 2021 |
+ | EmacsConf 2021! | November 27 and 28, 2021 |
+
+ If you are not available during the conference itself but you have a
+ neat idea that you'd like to share, please propose it anyway! You can
+ always handle questions after the conference, and we might even be
+ able to coordinate with other Emacs meetups for regional events (if
+ you're an Emacs meetup organizer and would like to make this happen
+ let's [[https://emacsconf.org/contact/][get in touch]]!).
+
+ Please note that although we will try our best to stick to the above
+ dates in the coming months, given the current state of the world, we
+ may have to move things around a bit in case of unforeseen events.
+ Thank you for your patience and understanding.
+
+ * Talk formats
+
+ We'd like EmacsConf 2021 to inspire lots of different people to
+ explore lots of different things in Emacs. We hope to put together a
+ stream of quick ideas followed by lots of conversation over IRC and/or
+ Q&A sessions, with occasional deep dives into topics that many people
+ might find interesting or useful.
+
+ As you think about your talk, consider what you can share in:
+
+ - *Up to 10 minutes total:* What is the core idea? What do you want
+ people to do or remember? You can show just enough to get people
+ interested and then point them to where they can learn more
+ afterwards. You can answer questions over IRC, the pad, or the
+ wiki, and there's no limit to how long that conversation can go.
+
+ - *Up to 20 minutes total:* How would you flesh out some of the points
+ from your 5-10 minute presentation? How can you show the pieces
+ working together?
+
+ - *Up to 40 minutes total:* What would benefit from a deep dive?
+ How do you keep it engaging?
+
+ When writing your proposal, please write an outline of what you plan
+ to talk about if you have 5-10 minutes. If you'd like to propose a
+ longer talk, outline what you might include if you had more time to
+ present (up to 40 minutes, including Q&A).
+
+ Here's an example for a potentially 40-minute talk:
+
+ - 5-10 minutes: quick demo of the abc package working together with
+ xyz package.
+ - 20 minutes: same as above, with some customization options to
+ accommodate a different workflow.
+ - 40 minutes: all of the above, including modifying the behaviour of
+ the package in order to add something new.
+
+ This flexibility would help us in devising the conference schedule so
+ that as many people as possible could get a chance to present their
+ ideas, while still allowing for featuring longer deep dive talks.
+
+ Other session formats such as tutorials, workshops, and hangouts are
+ welcome as well, in case you would find those other formats preferable
+ to a traditional talk format. If you're interested in these or other
+ session types, please let us know [[https://lists.gnu.org/mailman/listinfo/emacsconf-org][publicly]] or [[https://lists.gnu.org/mailman/listinfo/emacsconf-org-private][privately]]. We'll be
+ happy to work something out with you.
+
+ * Office hours
+
+ We're aware that it can be intimidating to submit a proposal to a
+ conference, so we thought we'd try to help! This year, we're opening
+ up the doors of our virtual offices for you to come talk to us about
+ your proposals with hopes of helping you with any hurdles you may be
+ facing with preparing your proposal.
+
+ We'd like to publish a schedule of availabilities of volunteers for
+ holding office hours. Currently these volunteers consist of some of
+ the EmacsConf organizers, but we'd love to have the help of other
+ members of the Emacs community as well. If you are a more experienced
+ Emacs user and would like to help with this, please [[https://emacsconf.org/contact/][get in touch]]!
+
+ Our first office hour this year is planned for Saturday, August 14,
+ from 3pm to 4pm UTC with zaeph (Leo Vivier) at the following
+ BigBlueButton room: https://bbb.emacsverse.org/b/ban-qye-fd1-5kw.
+
+ * Submitting your proposal
+
+ Once you're ready to submit your proposal, the [[https://emacsconf.org/2021/submit/][submit]] page has the
+ instructions on how to submit your talk.
+
+ We use an anonymized submission process to reduce bias and encourage
+ contribution. Identifying information will be removed from
+ submissions by a conference organizer who will not participate in
+ talk selection. The anonymized submissions will then be reviewed by
+ a selection committee.
+
+ If your talk is approved, we'd love it if you could help us make sure
+ the conference runs smoothly. After we email you with the time
+ allotted for your talk, we'll ask you to
+
+ - prepare a prerecording of your talk, or record it with our help if
+ that'd be easier for you; and
+ - schedule a short tech-check if you'd like to be able to answer
+ questions in a live session.
+
+ Don't forget to subscribe to our main mailing list, [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]],
+ for discussion and announcements about the EmacsConf conference.
+
+ We look forward to your ideas and submissions!
+
+ * Getting involved
+
+ If you would like to help with the conference (planning the sessions,
+ reviewing proposals, helping with infrastructure, making sessions more
+ accessible, editing video transcripts, etc.), see our [[https://emacsconf.org/2021/planning/][planning]] page
+ and come say hi to us at =#emacsconf= on =irc.libera.chat=.
+
+ In addition to the [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]] list, feel free to subscribe to
+ [[https://lists.gnu.org/mailman/listinfo/emacsconf-org][emacsconf-org]] as well, for discussions related to organizing the
+ conference by the EmacsConf organizers and volunteers.
+
+ We'd really appreciate your help in making EmacsConf 2021 the best one
+ so far!
+
+ * Commitment to freedom
+
+ We remain fully committed to freedom, and we will continue
+ using our infrastructure and streaming setup consisting entirely
+ of [[https://www.gnu.org/philosophy/free-sw.html][free software]], much like previous EmacsConf conferences.
+ An article describing our infrastructure and tools is underway,
+ and will be announced on the emacsconf-discuss list when published.
+
+
+ * COMMENT Copyright & License
+
+ Copyright (c) 2020 Amin Bandali, Sacha Chua, David Bremner
+ Copyright (c) 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+ Sebastian Crane
+
+ The EmacsConf 2021 Call for Proposals is part of the EmacsConf wiki,
+ and is dual-licensed under the terms of the Creative Commons
+ Attribution-ShareAlike 4.0 International Public License; and the GNU
+ General Public License as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later
+ version.
+
+ A copy of these two licenses is available on the EmacsConf wiki, in
+ the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
+
+ * COMMENT How to export this file
+
+ As of the time of writing this document (Org mode version 9.3.7), the
+ Org links library (=ol.el=) does not yet recognize =ircs= link types,
+ and will throw an error if you try to export a file containing them,
+ such as this file.
+
+ To work around that, you can use something along the lines of the
+ Emacs Lisp code below, by either adding it to your init file, or by
+ putting the point in the code block and hitting =C-c C-v e= (that is,
+ hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to
+ evaluate the code, working around the issue only for the current
+ session.
+
+ #+begin_src emacs-lisp :results silent
+ (org-link-set-parameters
+ "ircs"
+ :export
+ (lambda (link description format)
+ "Export an ircs link.
+ See `org-link-parameters' for details about LINK, DESCRIPTION and
+ FORMAT."
+ (let ((desc (or description link)))
+ (pcase format
+ (`html (format "<a href=\"ircs:%s\">%s</a>" link desc))
+ (`md (format "[%s](ircs:%s)" desc link))
+ (_ nil)))))
+ #+end_src
+
+
+<a id="second-cfp"></a>
+
+### Second (and final) call for proposals (closing Sep 30) :email:
+
+Sent Sept 27, 2021 to the same lists as the CFP
+Included inline Markdown and attached Org version of the CFP
+
+- E-mail text
+
+ Dear fellow Emacsians,
+
+ This is the second and final Call for Proposals for EmacsConf 2021,
+ open until September 30. Please see below for details on how to send
+ in your proposal(s), or chat about them with us in the #emacsconf IRC
+ channel on Libera.Chat.
+
+ If you're considering submitting a proposal but think the remaining
+ time is not enough, please reach out to me off-list as soon as
+ possible and I'd be happy to try and work something out with you.
+
+ I'll close this portion of this email with a big thank you to all the
+ folks who have submitted their talk proposal(s) or will be doing so.
+ Myself and the other EmacsConf organizers look forward to reading over
+ them and getting back to you about them and about the next steps. :)
+
+ Best,
+ amin
+
+ P.S. please direct any replies to this post either to myself or to the
+ emacsconf-discuss list, so as to help avoid generating extra off-topic
+ chatter in the other lists cc'd in this message.
+
+ P.P.S. as a volunteer-run conference, we are always looking for new
+ fellow volunteers and/or organizers to help with various aspects of
+ organizing and running the conference, including reviewing proposal
+ submissions. If you're interested in getting involved, please come by
+ our IRC channel or one of our public mailing lists (info below), or
+ any of the current organizers directly and say hi. We look forward to
+ hearing from you!
+
+
+<a id="accept"></a>
+
+## Accept talks :email:
+
+
+<a id="orgb8732b7"></a>
+
+### E-mail text
+
+Dear ${name},
+
+We would love to have your talk "${title}" as part of EmacsConf
+${conf-year}, and we've allocated ${duration} minutes for
+it. ${time-note}
+
+Your talk is tentatively scheduled for ${schedule}. The times may
+move around a bit as we update the schedule, so we'll check in with
+you if things change a lot. We've scheduled a few minutes for live
+questions and answers via web conference. Will you be available
+around this time? If there are more questions, you can also continue
+over Etherpad/IRC.
+
+Please plan to prerecord your ${duration}-minute talk(s) by ${deadline}
+at the latest. If you can, please send it in as early as possible.
+Submitting your video early lets us ask volunteers to help caption the
+video, making your talk more accessible and searchable.
+
+Please see <https://emacsconf.org/${conf-year}/prepare/> for tips and
+instructions on preparing, recording, and sending in your talk. If
+you have any questions or concerns, please let us know.
+
+Thanks,
+
+Amin Bandali
+EmacsConf organization team
+
+P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.
+
+
+<a id="acknowledge-submission"></a>
+
+## Thank speakers for submissions :email:
+
+
+<a id="orge92309b"></a>
+
+### Captions prepared
+
+Because you sent in your video early, we were able to caption it so
+that more people can find and enjoy your talk. I've attached the
+caption text file in case you want to review it, suggest any
+corrections, or use the text in a blog post or elsewhere. Thanks again
+for your contribution!
+
+
+<a id="org6bed7ae"></a>
+
+### Captions pending
+
+Just a quick note to let you know that I've downloaded your submission for "${title}".
+
+Now we have the following files starting with ${video-slug}:
+${details}
+
+A quick check shows that it's about ${video-duration} minutes long.
+
+We'll be working on captioning it over the next few weeks. We'll e-mail
+again a little closer to the conference with schedule updates and other
+useful information. If you want to upload a new version, you can upload
+it the same way you did the previous one.
+
+Please feel free to e-mail us at emacsconf-submit@gnu.org if you need
+help updating the talk wiki page at
+${url} or if you have other questions.
+
+Thank you so much for all the work you put into preparing a talk for
+EmacsConf ${conf-year}, and thank you for submitting the prerecorded video
+before the conference!
+
+
+<a id="tech-checks"></a>
+
+## Help speakers with tech checks
+
+- Explain process
+- Test audio, webcam, screensharing, collaborative pad
+ - Music demos and other things that use system audio will need to be prerecorded (or done through virtual loopback device, maybe? Technical risk.)
+ - Multi-monitor setups might not be handled well by BBB; share window instead of desktop
+- Check if comfortable checking into IRC: chat.emacsconf.org/?join=emacsconf,emacsconf-org
+- Get IRC nick, phone number for emergency contact, store in private wiki
+- Try to record name pronunciation
+- Encourage webcam for Q&A, although make it clear that it's totally optional
+- Possible picture-in-picture approach to maximize screen real estate
+
+
+<a id="follow-up-silence"></a>
+
+## Follow up with speakers we haven't heard from :email:
+
+I think we haven't heard from you since we accepted your EmacsConf 2021
+proposal for "${title}" in early October.
+EmacsConf is in less than two weeks, so I wanted to check in with you to
+see how you're doing.
+
+Could you please e-mail us to let us know if you're still working on
+your prerecorded video, if you're planning to present live, or if you
+can't make it this year? I know it's a strange time for everyone, so
+no worries if other priorities have come up and you don't have the
+time for a presentation.
+
+If you've been having technical issues recording your presentation on
+your computer, one of our volunteers could set up a BigBlueButton web
+conference with you to record the presentation. You can find a list of
+volunteers and their availability at
+<https://emacsconf.org/2021/prepare/#tech-check> . It takes a little time
+to get the recording out of BBB, so please plan to record your
+presentation before Tuesday, November 23.
+
+If you plan to present live, please go through the self-check at
+<https://test.bigbluebutton.org/> . Some speakers have encountered
+technical issues with BigBlueButton that they didn't have with Zoom or
+Google Meet, so this is something we definitely want to look into
+earlier rather than later. If that works for you, please e-mail us
+back so that I can keep your timeslot. The tentative schedule for your
+talk is on the talk page at ${url} .
+
+**Please e-mail us your plans before ${deadline}.** I'm
+planning to shift the schedule around to give more time to confirmed
+speakers for Q&A and possibly live demos. If I don't hear from you by
+then (maybe an over-enthusiastic spam filter has been swallowing up
+all our mail?), I'll probably reallocate the 10 minutes that had
+been set aside for your talk. We might be able to squeeze it back in
+afterwards or play a video from you at the end of the conference day,
+but it would be nice to get the schedule sorted out instead of
+scrambling to fill gaps on the day of the conference.
+
+Hope to hear from you by ${deadline}!
+
+Sacha Chua
+
+(Please use Reply to All to keep emacsconf-submit@gnu.org in the loop. Thanks!)
+
+
+<a id="check-in-instructions"></a>
+
+## Send check-in instructions :email:
+
+
+<a id="org4fa4a70"></a>
+
+### Unknown Q&A preference
+
+We're looking forward to having you join us at EmacsConf if you can! I
+don't seem to have your Q&A preference in my notes, but if you can
+join us at EmacsConf for questions and answers over video, IRC, or
+Etherpad, that would be great. If not, that's cool, we can collect the
+questions and forward them to you after the conference.
+
+If you want to join us, you can get a rough idea of when your talk is
+scheduled at ${url} . We'll probably keep
+updating the schedule even on the day of the conference. You might want
+to check it some time next week to get a rough sense of where it is, and
+then check it again on the day of your talk.
+
+Please check in at least 30 minutes before the scheduled start of your
+prerecorded talk so that we can deal with small scheduling changes or
+technical issues. You can find the check-in process at
+<https://emacsconf.org/2021/speakers/> .
+
+If something comes up, please let us know as soon as you can. Here's
+our emergency contact information:
+
+${emergency-contact-info}
+
+Hope to see you soon if you can join us!
+
+Sacha
+
+
+<a id="org55b075e"></a>
+
+### Speakers will handle Q&A live
+
+We're looking forward to having you join us for questions and answers at
+EmacsConf!
+
+We'll probably keep updating the schedule even on the day of the
+conference. You can get a rough idea of when your talk is scheduled at
+${url} . You might want to check it some time next week to get a rough
+sense of where it is, and then check it again on the day of your talk.
+
+Please check in at least 30 minutes before the scheduled start of your
+prerecorded talk so that we can deal with small scheduling changes or
+technical issues. You can find the check-in process at
+<https://emacsconf.org/2021/speakers/> .
+
+If something comes up, please let us know as soon as you can. Here's
+our emergency contact information:
+
+${emergency-contact-info}
+
+Looking forward to seeing you soon!
+
+
+<a id="org544baed"></a>
+
+### Speakers will handle questions after the event
+
+Thank you so much for contributing a talk for EmacsConf 2021! We're
+looking forward to collecting questions and forwarding them to you by
+e-mail after the conference. We'll also post the prerecording at the
+time that it gets streamed, so people will be able to access it at
+${url} once it has gone live.
+
+If it turns out that you can make it to the conference after all, feel
+free to drop us a line at #emacsconf-org and we'll let people know
+you're around. You can find the check-in process at
+<https://emacsconf.org/2021/speakers/> .
+
+Thank you so much for being part of EmacsConf 2021!
+
+
+<a id="announce-schedule"></a>
+
+## Announce schedule and watching instructions :email:
+
+Sent Nov 20, 2021
+
+
+<a id="org41b2906"></a>
+
+### E-mail text
+
+Dear Emacsian friends,
+
+This is it, the final stretch until EmacsConf 2021, coming up on
+November 27 and 28 less than a week from now! A few weeks ago,
+we excitedly shared the EmacsConf 201 program with you. We're now
+happy to share the conference schedule with you, i.e. the program
+plus each talk's (approximate) scheduled time slot:
+
+<https://emacsconf.org/2021/schedule>
+
+All of the times listed on the schedule are in EST (UTC-5). You can
+click on each talk's title to open its page for more information,
+including its scheduled time in your local time (displaying local time
+requires running a tiny bit of AGPLv3+-licensed free/libre JavaScript
+code, included on the talk pages). For prerecorded talks, this time
+is also when the talk's video will be made available on the same page.
+Please note the '~' tildes near the times, indicating that they are
+approximations and not meant to be taken as exact times.
+
+On November 27 and 28 you will be able to watch the livestreams via
+<https://live.emacsconf.org>, which also has details on how to watch the
+streams using media players that support streaming (like mpv and VLC).
+Also, for Asia-Pacific folks, there will be an alternate stream by
+LibreAustralia, at 11:00-17:30 UTC+11 on Sunday, November 28. Please
+see the <https://libreau.org/upcoming.html#emacsconf21> page on their
+site for more details and how to tune into the alternate stream.
+
+Last but not least, please see the <https://emacsconf.org/2021> page
+of the EmacsConf wiki for more details on watching and participating
+in the conference.
+
+We hope to see you all around on November 27-28 for EmacsConf 2021!
+
+Amin Bandali, Leo Vivier, and Sacha Chua,
+On behalf of the EmacsConf 2021 organizers team
+
+
+<a id="follow-up-prerecs"></a>
+
+## Follow up regarding prerecorded videos :email:
+
+EmacsConf is in a few days and I don't think we have your prerecorded
+video yet, so I'm getting miiiildly stressed about the schedule. And
+you're probably stressing out about it too, so let's go figure out how
+we can make this work.
+
+Option A: If you happen to have the prerecording or can get it done by
+tomorrow, we can probably squeeze it in. Please upload it to
+ftp-upload.emacsconf.org by following the instructions in
+<https://emacsconf.org/2021/prepare#ftp-upload> , or send us a link using
+your favourite file-sharing service (especially if FTP is giving you
+problems).
+
+Option B: If you want to present live, it might be an option. I'm a little
+worried about the potential for technical issues, since we've had
+problems with that in previous EmacsConfs. The tight schedule means
+there's not a lot of time to figure things out, and it can be hard to
+make something as focused as a prerecorded video when you're doing it
+live. We will definitely want to make sure that:
+
+- your self-serve tech check works: <https://test.bigbluebutton.org>
+ at your convenience;
+- we have your emergency contact information in case of frozen
+ Internet connection, etc. Please e-mail us the phone number we can
+ use to call you. We promise to use it only for EmacsConf 2021
+ emergency coordination; and
+- you check in as early as possible (at least 1 hour before, so we
+ know if the speaker before you needs to extend) and let us know
+ that you want to do it live <https://emacsconf.org/2021/speakers> .
+ We keep adapting the schedule as things come up, so please check
+ <https://emacsconf.org/2021/schedule/> on the day of the conference.
+
+If there are technical issues or your talk runs a little over time, we
+might have to stop streaming it on the main stream when it's time for
+the next talk. We may be able to continue streaming it on the
+alternate stream. If so, people can continue watching it there if they
+wish to.
+
+Option C: If you can't make it, that's okay. Life gets crazy
+sometimes. Please let us know and we can update the wiki. If you
+happen to be able to make a prerecorded video afterwards, we can add
+that to the wiki, playlists, and announcements. We hope you can join
+us next year.
+
+Since EmacsConf is **this weekend** (aaaaaaah), please let us know by
+tomorrow noon EST (Friday; 9AM PST, 5PM GMT, 6PM CET) so that we can
+keep the time allocated for you in the schedule. If we don't hear from
+you, we'll probably reallocate the ${duration} minutes reserved for you so
+that other talks can have longer Q&A. If you can still make it, check
+in early and let us know so that we can try to work out an alternate
+stream for you. Hope to hear from you soon!
+
+Sacha
+
+
+<a id="go-live-maybe"></a>
+
+## Offer speakers the opportunity to go live if they really really want to :email:
+
+Sent November 25
+
+
+<a id="orgb88fbb1"></a>
+
+### Email text
+
+Thank you so much for sending in your prerecording. We were able to
+caption most of the talks, yay! That will help more people appreciate
+the talks, and it'll make it easier for people to look up technical
+terms too. The talks will be streamed with open captions, and the talk
+pages will have the videos with closed captions when they're streamed.
+
+We're still adapting the schedule as stuff comes up, so please check
+the schedule again on the day of the conference and check in as early
+as you can. (Check-in instructions: <https://emacsconf.org/2021/speakers>)
+
+&#x2014; Presenting live? &#x2014;
+
+If you really, really, really want to present live, we can keep the
+prerecorded talk as a backup plan. I'm a little worried about the
+potential for technical issues, since we've had problems with that in
+previous EmacsConfs. The tight schedule means there's not a lot of
+time to figure things out, and it can be hard to make something as
+focused as a prerecorded video when you're doing it live. If you want
+to present live, we will definitely want to make sure that:
+
+- your self-serve tech check works: <https://test.bigbluebutton.org>
+ at your convenience;
+- we have your emergency contact information in case of frozen
+ Internet connection, etc. Please e-mail us the phone number we can
+ use to call you. We promise to use it only for EmacsConf 2021
+ emergency coordination; and
+- you check in as early as possible (at least 30 minutes before) and
+ let us know that you want to do it live
+ <https://emacsconf.org/2021/speakers>
+
+Going with the prerecorded video is probably the least-stress option
+for everyone, but we wanted to offer you the option to go live just in case.
+
+Looking forward to seeing you soon!
+
+
+<a id="orgbe5dce0"></a>
+
+## Compress video
+
+Usage: `compress-video.sh original-file output-file`:
+
+ Q=32
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
+
+We tried using q56 before, but it was a little too aggressive. Q=32 is the default and is probably a reasonable space vs. quality compromise.
+
+
+<a id="sound"></a>
+
+## Experiment with setup to allow MPV / BBB sound isolation
+
+Set MIC and OUTPUT appropriately.
+
+ MIC=alsa_input.usb-046d_0819_A68D6BE0-02.mono-fallback
+ OUTPUT=alsa_output.pci-0000_00_1b.0.analog-stereo
+ if [ "$1" == "-u" ]; then
+ pactl unload-module module-loopback
+ pactl unload-module module-null-sink
+ else
+ pacmd load-module module-null-sink sink_name=recording sink_properties=device.description=recording channels=2
+ pacmd load-module module-null-sink sink_name=mpv sink_properties=device.description=mpv
+ pacmd load-module module-loopback source=$MIC sink=recording
+ pacmd load-module module-loopback source=mpv.monitor sink=recording
+ pacmd load-module module-loopback source=recording.monitor sink=$OUTPUT
+ fi
+
+You can probably then use `pavucontrol` (choose All Streams instead of
+Applications on the Playback tab) or something like the following to
+redirect the mpv output to the mpv sink.
+
+ pacmd list-sink-inputs # notice the ID for the process you want to redirect
+ pacmd move-sink-input 1 mpv
+
+
+<a id="orgde63d42"></a>
+
+## Check for video encoding issues
+
+Sometimes the compression may get cut off. You can use
+`compile-media-verify-video-frames` from
+<https://github.com/sachac/compile-media> to check that videos have
+enough frames for their expected duration
+
diff --git a/2021/playbook.org b/2021/playbook.org
new file mode 100644
index 00000000..fe9968d1
--- /dev/null
+++ b/2021/playbook.org
@@ -0,0 +1,1194 @@
+#+PROPERTY: header-args:emacs-lisp :tangle playbook/emacsconf-playbook.el :eval no
+#+OPTIONS: toc:4
+#+begin_export md
+<!-- This file was automatically generated from playbook.org. Instead of editing the .md, please edit the .org and republish. Thanks! -->
+#+end_export
+
+* Commands :noexport:
+
+- [[elisp:(progn (org-md-export-to-markdown) (org-babel-tangle))][Export and tangle]]
+
+* Roles/values
+:PROPERTIES:
+:CUSTOM_ID: roles
+:END:
+
+| B | | bandali |
+| CHECK | check-ins | sachac |
+| HOST | hosting, streaming, intros, reading, moving questions/answers around | zaeph |
+
+| ${protected} | [[/ssh:front:/var/www/media.emacsconf.org/2021/protected/]] |
+| ${stream-status} | [[/ssh:front:/var/www/live.emacsconf.org/index.html]] |
+| ${upcoming} | upcoming.org shared over CRDT |
+| ${conf} | conf.org shared over CRDT |
+| ${playbook} | playbook.org shared over CRDT |
+| ${dump} | [[/ssh:live:/data/]] |
+| ${media} | [[/ssh:front:/var/www/media.emacsconf.org/2021/]] |
+| ${live-main} | [[/ssh:front:/var/www/live.emacsconf.org/main.html]] |
+| ${live-480p} | [[/ssh:front:/var/www/live.emacsconf.org/main-480p.html]] |
+| ${live-index} | [[/ssh:front:/var/www/live.emacsconf.org/index.html]] |
+| ${live-alt} | [[/ssh:front:/var/www/live.emacsconf.org/alt.html]] |
+| ${profile} | [[/ssh:live:~/.profile]] |
+| ${emacsconf-el} | https://git.emacsconf.org/emacsconf-el/ |
+| | |
+* After the conference
+** Update captions
+
+- Merge them into the video with =add-captions.sh=
+ #+begin_src sh :eval no
+ #!/usr/bin/zsh
+ BASE="${1%.*}"
+ BASE="${BASE%--main}"
+ ffmpeg -y -i "$1" ${BASE}--main.vtt
+ if [ -f "${BASE}--normalized.webm" ]; then
+ ffmpeg -y -i "$1" -i "${BASE}--normalized.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ else
+ ffmpeg -y -i "$1" -i "${BASE}--compressed.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ fi
+ cp ${BASE}--main.vtt ${BASE}--chapters.vtt ~/vendor/emacsconf-wiki/2021/captions
+ scp "${BASE}--captioned.webm" "${BASE}--main.webm"
+ scp "${BASE}--main.webm" front:~/protected
+ scp "${BASE}--main.vtt" front:~/protected
+ scp "${BASE}--chapters.vtt" front:~/protected
+ ssh front 'cd protected; chmod ugo+r *'
+ #+end_src
+- Update Toobnix and Youtube captions with =conf-video-share=.
+- Update Toobnix and Youtube descriptions with chapters.
+- Update ${conf-year}/${captions}/${slug}.md in the wiki. To make this from scratch, use =M-x conf-prepare-transcript-directives= from the talk heading in the conference Org file.
+** Update
+** Send thanks :email:
+:PROPERTIES:
+:CUSTOM_ID: thanks
+:END:
+
+Thank you so much for being part of EmacsConf ${conf-year}! Hundreds of people
+enjoyed it, and I'm sure even more will come across the videos in the
+days to follow.
+
+Your prerecorded video is available on the talk page at ${url} , and
+we've added the questions and comments that we've collected from
+IRC/BBB/Etherpad. The recording of your Q&A session is also on the
+talk page.
+
+We've also uploaded your talk video to ToobNix (a PeerTube instance)
+at ${toobnix-url} and YouTube at ${youtube-url} . If you
+want to reupload the video to your own channel, feel free to do
+so. You can add the subtitles by downloading them from the talk page
+and uploading them to your video. If you let me know where you've
+uploaded it, I can switch our playlist to include your version of the
+video instead. That way, it might be easier for you to respond to
+questions on videos. (Which some people have already been adding,
+yay!)
+
+If you would like to share more resources, you can add them to the
+talk page or e-mail them to us and we can add them for you.
+
+Thanks again for speaking at EmacsConf!
+
+* Thursday or Friday before the conference
+:PROPERTIES:
+:CUSTOM_ID: days-before
+:END:
+
+- STREAM: Download prerecorded videos from ${protected}
+ #+begin_src sh :eval no
+ rsync -avzue ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
+ #+end_src
+* On the day of the conference
+:PROPERTIES:
+:CUSTOM_ID: day-of
+:END:
+** Set up
+:PROPERTIES:
+:CUSTOM_ID: setup
+:END:
+*** Arrange screens
+:PROPERTIES:
+:CUSTOM_ID: screens
+:END:
+
+- CHECK:
+ - Share ${upcoming}, ${playbook}, and ${conf} via CRDT: =conf-crdt-connect-and-share=
+ - Current schedule, filenames/commands for playing, Q&A preference, IRC nick, pronunciation, intro notes, prerec duration, emergency contact information
+ - =conf-upcoming-add-subtree=
+ - Have #emacsconf-org, #emacsconf, #emacsconf-accessible, and #emacsconf-questions open
+ - Use =/opall= to get op privileges in all the channels
+ - Start backup process for pad
+ #+begin_src sh :eval no :tangle playbook/backup-pad.sh
+ while true; do
+ curl https://etherpad.wikimedia.org/p/emacsconf-2021/export/html > emacsconf-$(date +"%Y%m%d-%H%M%S").html
+ sleep 15m
+ done
+ #+end_src
+ - Computer for alternate streaming:
+ - Open browser for joining BBB
+ - Open MPV for playing http://live0.emacsconf.org:8000/main.webm
+- HOST:
+ - rsync the newest --main.webm from front: rsync -avze ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
+ - Check OBS scenes for sharing windows/tabs as a virtual camera:
+ - chat.emacsconf.org with #emacsconf
+ - Etherpad
+ - Schedule
+ - next talk page
+ - Clock with current time on screen: =watch TZ=America/Toronto date=
+ - Set up backchannel for easy viewing
+ - ${upcoming}
+ - #emacsconf-org and #emacsconf channels
+ - (?) Join organizer room S
+
+*** Start streaming :stream:
+:PROPERTIES:
+:CUSTOM_ID: start-streaming
+:END:
+
+- HOST: Display getting-ready message and start streaming to main.webm
+- HOST: Confirm that the stream is live at https://live.emacsconf.org/main.webm
+- B: Update ${status} to say that the stream is live
+- CHECK: Start low-resolution stream, confirm at https://live.emacsconf.org/main-480p.webm
+ Call this on live0 with $CONF480PASS as the first parameter. The Icecast configuration is on =live0= at [[file:/ssh:live|sudo:/etc/icecast2/icecast.xml]]=.
+ #+begin_src sh :eval no :tangle "playbook/restream-lowres.sh"
+ PASS=$1
+ while true; do ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx icecast://ec2020main480pmu:$PASS@localhost:8000/main-480p.webm; done
+ #+end_src
+- CHECK: Start Youtube and Toobnix streams. Call this with $YOUTUBE1PASS, $YOUTUBE2PASS, or $TOOBNIX as the parameter
+ #+begin_src sh :eval no :tangle "playbook/restream-flv.sh"
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
+ #+end_src
+- CHECK: Verify YouTube and Toobnix streams and the CPU load on live0.
+- CHECK: Set the YouTube and Toobnix streams to public.
+- B: Verify with #emacsconf that the stream is active.
+- CHECK: Play main stream on alternate laptop. Start alternate stream and verify. Update ${status}.
+- CHECK: Announce on Twitter (@emacs, @emacsconf, @sachac) and in #emacs
+ EmacsConf 2021 starting now: https://emacsconf.org/2021/
+
+** Talk process
+:PROPERTIES:
+:CUSTOM_ID: talk
+:END:
+*** Check in a speaker
+:PROPERTIES:
+:CUSTOM_ID: check-in
+:END:
+
+Exception: [[*CHECK is unavailable][CHECK is unavailable]]
+
+- Speaker checks in on #emacsconf-org via IRC or via e-mail ~30m before
+- CHECK notes IRC nick for speaker.
+- CHECK confirms Q&A preference: live/IRC/Etherpad, preferred way of getting questions
+- [? unknown] Thanks for checking in! How would you like to handle Q&A
+ today - live video, the collaborative Etherpad at
+ https://etherpad.wikimedia.org/p/emacsconf-2021 , or IRC (like
+ this)?
+- [? IRC] Thanks for checking in! Feel free to keep an eye on
+ #emacsconf for questions and discussion, and we'll copy things from
+ the pad to there. If the volume gets overwhelming, let us know and
+ we can forward questions to #emacsconf-questions for you. If you'd
+ like to try Q&A over live video or the collaborative pad instead, or
+ if you need help, please let us know.
+- [? Etherpad] Thanks for checking in! The collaborative pad we'll be
+ using for questions is at
+ https://etherpad.wikimedia.org/p/emacsconf-2021 . We'll collect
+ questions from #emacsconf and put them there. If you'd like to jump
+ to your part of the document, you might be able to keep an eye on
+ questions. Please let us know if you need help, or if you want to
+ switch to live Q&A.
+- [? live] Thanks for checking in! I'll send you some private messages
+ with instructions, so please check there. Let me know if you don't
+ get them.
+ - Private messages:
+ - (erc-message "PRIVMSG" (format "%s You can use this BBB room: %s . I'll join you there shortly to set up the room and do the last-minute tech check." nick room-url))
+ - (erc-message "PRIVMSG" (format "%s The collaborative pad we'll be using for questions is at %s . We'll collect questions from #emacsconf and put them there. If you'd like to jump to your part of the document, you might be able to keep an eye on questions. Alternatively, we can read questions to you." nick conf-collaborative-pad))
+ - (erc-message "PRIVMSG" (format "%s Leo Vivier will join when it's time, and he will give you the go-ahead when it's time to present. See you in the BBB room!" nick))
+ - CHECK directs speaker to available room with =/checkin <room> <nick>=
+ - Speaker joins talk room
+ - CHECK makes speaker presenter and moderator, does last-minute tech check
+ - Hello, thanks
+ - Speaker tries screen sharing and webcam (optional)
+ - check screen readability
+ - CHECK briefs speaker on process, including:
+ - live Q&A: reading questions themselves (can do in any order,
+ can skip; coach possible responses for awkward things) or asking HOST to read questions to them
+ - HOST can share the pad or IRC; speaker shares screen only if doing demo
+ - encouragement of webcam, although it's optional
+ - how HOST will join shortly before the prerec ends and then
+ give them the go-ahead
+ - closing any tabs watching the stream as their talk starts
+ (otherwise the audio is confusing)
+ - If the speaker will be giving a live presentation, CHECK
+ collects emergency contact information (in case of technical
+ issues) and shares it with HOST in the CRDT buffer
+ - Okay to do other things until the prerec ends
+ - CHECK updates ${upcoming} with link to the talk room and
+ preferences for Q&A-. CHECK will also /msg the relevant
+ information.
+
+**** bandali's check-in steps
+
+- please leave webcam quality on 'medium'
+- please read each audience question out loud before responding
+- please mute stream on your machine if you're watching
+- would you like to stay around for a longer q&a?
+- would you like to share your webcam or screen? (quickly mention how)
+
+*** Present talk
+:PROPERTIES:
+:CUSTOM_ID: present
+:END:
+
+- CHECK announces the next talk on IRC and marks the previous talk as done. (=conf-announce=)
+- PAD clears pad colours.
+- [? prerec]
+ - HOST switches to MPV scene in OBS and plays the video (with captions if available).
+ - Exception: [[*Last-minute prerecording submission][Last-minute prerecording submission]]
+ - Exception: [[*Last-minute caption update][Last-minute caption update]]
+ - [[*Publish information][CHECK publishes information]]
+ - [[*Handle Q&A][HOST gets a head start on handling Q&A]]
+ - When prerec finishes, HOST switches the OBS scene to show BBB.
+- [? live]
+ - Exception: [[*Speaker does not have a prerec and has not checked in][Speaker does not have a prerec and has not checked in]]
+ - HOST joins the BBB room and double-checks that recording is on.
+ - CHECK-alternate joins the BBB room and pauses main MPV.
+ - HOST switches to OBS scene for BBB.
+ - Speaker presents.
+ - Exception: [[*Technical issues during a live presentation][Technical issues during a live presentation]]
+ - [? talk needs to be wrapped up]
+ - HOST nudges speaker verbally.
+
+*** Publish information
+:PROPERTIES:
+:CUSTOM_ID: publish
+:END:
+
+ - CHECK updates the schedule in:
+ - ${conf}
+ - ${upcoming}
+ - wiki
+ - CHECK publishes the video to media.emacsconf.org using =conf-publish-files=
+ - CHECK commits the wiki page and the captions for the talk.
+ - CHECK publishes the video on YouTube and ToobNix using =conf-video-share=.
+ - Update description:
+ #+begin_example
+This video is available under the terms of the
+Creative Commons Attribution-ShareAlike 4.0 International (CC
+BY-SA 4.0) license.
+
+You can view it using free and open source software at
+${url}
+
+${description}
+ #+end_example
+ - Mark it as public.
+ - Add it to EmacsConf 2021 playlist.
+ - Update title and description.
+ - Mark it as public.
+ - Doublecheck subtitles
+ - Add it to the EmacsConf 2021 playlist.
+ - [? live sections]
+ - CHECK does a rough-cut of the recording from ${dump} to get the last X minutes or by time range. There's about a 1-2 minute delay.
+ Ex: =(kill-new (conf-dump-get "alt" "10:24" "10:30" "qa_"))=
+ - When there's an opportunity to do so:
+ - CHECK finetunes the rough-cut recording (trim start and end) and posts it to:
+ - media.emacsconf.org/2021
+ - wiki page for talk
+
+*** Handle Q&A
+:PROPERTIES:
+:CUSTOM_ID: questions
+:END:
+
+Exceptions:
+- [[*Speaker has not checked in][Speaker has not checked in]]
+
+- [? live]
+ - CHECK-alternate joins the BBB room and pauses MPV.
+ - HOST joins the BBB room
+ - HOST starts recording in BBB or confirms that it's already recording
+ - HOST switches to the BBB scene in OBS.
+ - HOST describes how to ask questions.
+ - [? No questions yet]
+ - HOST thanks speaker, says nice things about talk, and asks a couple of prepared questions
+ - [? Awkward question]
+ - HOST can try rephrasing the question.
+ - HOST adds note to IRC/Etherpad that speakers can answer in any order, skip questions, answer afterwards, etc.
+ - [? Q&A needs to be wrapped up]
+ - HOST writes in Etherpad/IRC or nudges speaker verbally.
+ - CHECK notes the time that the live Q&A finished and switches back to the main stream on CHECK-alternate.
+- [? IRC/pad]
+ - HOST switches to pad/chat OBS scene.
+ - HOST describes Q&A method and shows it on the screen.
+ - While there's buffer time before the next talk, HOST can read out
+ questions and answers, or transition to the next talk early
+ - HOST: It's time for the next talk, but if you want to keep
+ discussing the previous talk, please feel free to continue doing
+ so on IRC or the pad.
+- [? speaker will answer after the conference]
+ - HOST switches to pad/chat OBS scene.
+ - HOST says the speaker is not available right now, but we'll
+ forward the questions to the speaker and we'll post the speaker's
+ answers on the wiki page. Leave your contact information if you
+ want to be notified, or subscribe to the emacsconf-discuss mailing
+ list to get the announcement. Please feel free to continue
+ discussing the talk on IRC or the pad.
+- [[*Present talk][Present next talk]]
+
+** Break time
+:PROPERTIES:
+:CUSTOM_ID: break
+:END:
+
+- CHECK marks the last talk as done. =conf-end-current-talk=
+- CHECK stops and restarts the Toobnix restreaming process, and re-checks the stream
+- CHECK uses =conf-upcoming-add-subtree= to add the afternoon talks to upcoming.org
+- HOST doublechecks network transfer limit and server health
+
+** End of stream
+:PROPERTIES:
+:CUSTOM_ID: end
+:END:
+
+- CHECK removes live Q&A links
+- CHECK stops ffmpeg process for Youtube
+- CHECK stops ffmpeg process for Toobnix
+- CHECK stops ffmpeg process for main-480p
+- STREAM stops streaming
+- B updates the status pages
+- bandali figures out the downstream
+
+** In case of...
+:PROPERTIES:
+:CUSTOM_ID: exceptions
+:END:
+*** Last-minute prerecording submission
+:PROPERTIES:
+:CUSTOM_ID: last-minute-prerec
+:END:
+
+- CHECK will copy it from the FTP upload server to ${protected} and name it appropriately.
+- CHECK will notify STREAM with the scp command and the mpv command so that STREAM can choose.
+
+*** Last-minute caption update
+:PROPERTIES:
+:CUSTOM_ID: last-minute-captions
+:END:
+
+- CHECK uploads the --main.vtt file to ${protected}
+- CHECK notifies STREAM via ${upcoming}
+- STREAM uses the provided commands to download the VTT file and load it into MPV with =--sub-file=
+
+*** Speaker has not checked in
+:PROPERTIES:
+:CUSTOM_ID: missing
+:END:
+- Let the previous talk run a little longer for Q&A; end at least in time for the prerec
+- After the previous Q&A wraps up, play the prerec
+- [? still not around after prerec finishes]
+ - HOST: Speaker might be having some difficulty connecting, but we'll collect your questions on the pad and send them afterwards.
+ - Can play next prerec a few minutes early
+*** Speaker does not have a prerec and has not checked in
+:PROPERTIES:
+:CUSTOM_ID: really-missing
+:END:
+- Let the previous talk do live Q&A/demo if ready
+- Close to the time of the missing talk:
+ - See if any of the previous speakers want to be set up for an impromptu talk/extension in a BBB room, just in case
+ - HOST: The next speaker might be having some difficulty connecting. In the meantime, let's...
+ - OR:
+ - highlight ongoing discussions
+ - invite another speaker for an impromptu extension; mplsCorwin will keep a list of possible speakers who are still active
+ - replay a short prerec
+ - let mplsCorwin or zaeph fill in
+*** Speaker whose talk was reallocated shows up and has a prerec
+:PROPERTIES:
+:CUSTOM_ID: reallocated-prerec
+:END:
+- CHECK copies it to ${protected}
+- Plan to play prerec at the end of the day, or in any gaps if a live talk falls through
+*** Speaker whose talk was reallocated shows up and wants to do it live
+:PROPERTIES:
+:CUSTOM_ID: reallocated-live
+:END:
+- See if there's enough time if buffers are shuffled back; if so, set up for a live presentation
+- Check for alternate stream volunteers
+- [? not enough time] Offer to set up a BBB room for recording or to
+ accept a prerecording afterwards, then include it on the site and in
+ post-conference communication
+*** Alternate stream volunteer wants to stream (nice to have, at risk)
+:PROPERTIES:
+:CUSTOM_ID: alternate
+:END:
+- CHECK gives ALTERNATE the BBB room URL for the talk they are interested in
+- ALTERNATE starts streaming to assigned end point
+- CHECK confirms stream
+- CHECK updates ${stream-status}
+- CHECK notifies STREAM and HOST
+ - After prerec plays:
+ - HOST: This talk has an extended demo/Q&A. You can go to ${alternate-url} to watch it, and we'll post a recording afterwards.
+ - HOST sends ${alternate-url} to IRC: Alternate stream for ${title}: ${alternate-url}
+- ALTERNATE notifies #emacsconf-org when the stream is done.
+- CHECK updates ${stream-status} to note that the alternate stream is finished.
+
+ FFMPEG process for sending the desktop and audio to the $CONFALT mountpoint on Linux with X11 and Alsa:
+
+ 1. Set the CONFALT environment variable to icecast://user:password@live0.emacsconf.org:8000/alt.webm
+ 2. Install pavucontrol if you don't have it already.
+ 3. Start the following command ([[file:playbook/stream-desktop-and-audio.sh]]:
+ #+begin_src sh :eval no :tangle playbook/stream-desktop-and-audio.sh
+ while true; do ffmpeg -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done
+ #+end_src
+ 4. Use pavucontrol to set the recording source for the ffmpeg
+ command to be the audio monitor, so you get system output as
+ well.
+ - OR:
+ - [? splitting audio] [[#sound][Set up sinks for sound]]
+ - [? same audio]
+ - Set up audio monitor as the input for FFMPEG
+ - MPV goes to MPV sink, browser goes to recording sink, FFMPEG takes in recording monitor
+
+*** Pad malfunction or mess-up
+:PROPERTIES:
+:CUSTOM_ID: pad-broken
+:END:
+
+- PAD resets the pad using https://etherpad.wikimedia.org/p/emacsconf-2021/timeslider
+- [? still not recovered]
+ - PAD reimports the pad from backup
+
+*** CRDT malfunctions
+:PROPERTIES:
+:CUSTOM_ID: crdt-broken
+:END:
+
+- HOST notifies CHECK and tries reconnecting
+- [? still doesn't work]
+ - Switch to backup Etherpad
+
+*** Conduct guidelines issue
+:PROPERTIES:
+:CUSTOM_ID: conduct
+:END:
+
+- HOST addresses it (on-camera if needed) with a reminder and/or a kick or a ban
+
+*** CHECK is unavailable
+:PROPERTIES:
+:CUSTOM_ID: check-gone
+:END:
+
+- HOST does check-ins
+- HOST refers to conf.org for Q&A preference etc.
+- STREAM checks conf.org for prerec filenames etc.
+- Dropped goals:
+ - Publishing recordings ASAP
+ - Updating schedule/wiki on the fly
+
+*** HOST is unavailable
+:PROPERTIES:
+:CUSTOM_ID: host-gone
+:END:
+
+- STREAM joins the BBB room and streams directly from there (or streams the prerecs).
+- STREAM will do the hosting.
+
+*** Technical issues during a live presentation
+:PROPERTIES:
+:CUSTOM_ID: live-issues
+:END:
+
+- HOST tries to contact the speaker
+- [? back on track]
+ - [? can be squeezed into remaining time]: Continue
+ - [? need extra time]: CHECK fiddles with buffer of following talks in conf.org and updates schedule
+ - [? need too much extra time (ex: 10min)]: HOST acknowledges
+ technical issues and says we may be able to follow up after the
+ conference
+- [? can't resume]: HOST acknowledges technical issues and says we may
+ be able to follow up after the conference
+
+*** Big technical issues with streaming
+:PROPERTIES:
+:CUSTOM_ID: stream-issues
+:END:
+
+- HOST notifies #emacsconf and #emacsconf-org and adds a note at the top of the ${pad}.
+- HOST updates the 2021.md wiki page
+- CHECK publishes prerecordings
+ - media.emacsconf.org
+ - wiki
+ - Toobnix
+ - Peertube
+- STREAM e-mails the mailing list
+
+*** live0 can't handle the load or is close to network transfer limit
+:PROPERTIES:
+:CUSTOM_ID: network
+:END:
+
+- OR:
+ - Redirect some viewers via asking in #emacsconf:
+ - watch via main-480p
+ - watch via Toobnix (if we can get that working)
+ - Consider dropping the restream to Toobnix (lower audience?) or to Youtube
+ - Add additional node to Linode account for shared transfer pool (TODO: doublecheck)
+
+* Before the conference
+:PROPERTIES:
+:CUSTOM_ID: before
+:END:
+** Send calls for proposals
+:PROPERTIES:
+:CUSTOM_ID: cfp-mails
+:END:
+*** [ANN] EmacsConf 2021 Call for Proposals :email:
+:PROPERTIES:
+:CUSTOM_ID: first-cfp
+:END:
+Sent on August 5, 2021 to emacsconf-discuss, emacs-devel, emacs-orgmode, emacs-tangents, Cc: emacsconf-org.
+Included inline Markdown and attached Org version of the CFP
+
+**** E-mail text
+:PROPERTIES:
+:SUBJECT: [ANN] EmacsConf 2021 Call for Proposals
+:END:
+
+#+begin_src org
+#+title: EmacsConf 2021
+#+subtitle: Online Conference
+#+date: November 27 and 28, 2021
+#+options: author:nil
+
+[[https://emacsconf.org/2021/][EmacsConf 2021]] will be a virtual conference on *November 27 and 28,
+2021 (Sat-Sun)*. If you'd like to present at the conference, please
+[[https://emacsconf.org/2021/cfp/][submit your proposal]] by *September 30, 2021*.
+
+EmacsConf 2021 is about the joy of [[https://www.gnu.org/software/emacs/][Emacs]] and Emacs Lisp. Come share
+your experiments and adventures with the Emacs text editor / operating
+system / way of life! We welcome speakers of *all backgrounds* and
+*all levels of experience*, including newcomers giving their first
+talk. What have you found exciting about Emacs lately? What do you
+wish someone had told you when you were starting out? What part of
+your workflow might inspire someone to get into Emacs or go deeper?
+
+A great way to get started with writing a proposal is to start by
+exploring the programs from previous years: [[https://emacsconf.org/2020/schedule/][2020]], [[https://emacsconf.org/2019/schedule/][2019]], [[https://emacsconf.org/2015/schedule/][2015]], [[https://emacsconf.org/2013/#program][2013]].
+You might also find some neat ideas on the [[https://emacsconf.org/2021/ideas/][ideas]] page. Feel free to
+add yours there too! If you're still not sure, come by our IRC
+channel =#emacsconf= on =irc.libera.chat= and say hi. You can join
+the chat using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by visiting
+[[https://chat.emacsconf.org][chat.emacsconf.org]] in your web browser.
+
+All kinds of people use Emacs for all kinds of things. We'd love it
+if EmacsConf 2021 could highlight interesting perspectives and reflect
+the diversity of our community. If you know someone who might have a
+good idea for a talk, please reach out to them and encourage them to
+submit a proposal. Many people (especially from underrepresented
+groups such as women, people of colour, non-developers, etc.) might
+not consider themselves expert enough to share their thoughts. If you
+let them know that you value their knowledge and maybe even suggest
+something that you think others would like to hear more about, they
+may realize that they have something worth sharing and that we would
+love to hear from them.
+
+,* Important dates
+
+For EmacsConf 2021, we are planning for 9am to 5pm Toronto/EST
+(2pm-10pm UTC) on November 27 and 28. Depending on people's
+availability, it might be two half-days.
+
+| CFP opens | August 5, 2021 |
+| CFP closes | September 30, 2021 |
+| Speaker notifications | October 15, 2021 |
+| Schedule published | October 31, 2021 |
+| EmacsConf 2021! | November 27 and 28, 2021 |
+
+If you are not available during the conference itself but you have a
+neat idea that you'd like to share, please propose it anyway! You can
+always handle questions after the conference, and we might even be
+able to coordinate with other Emacs meetups for regional events (if
+you're an Emacs meetup organizer and would like to make this happen
+let's [[https://emacsconf.org/contact/][get in touch]]!).
+
+Please note that although we will try our best to stick to the above
+dates in the coming months, given the current state of the world, we
+may have to move things around a bit in case of unforeseen events.
+Thank you for your patience and understanding.
+
+,* Talk formats
+
+We'd like EmacsConf 2021 to inspire lots of different people to
+explore lots of different things in Emacs. We hope to put together a
+stream of quick ideas followed by lots of conversation over IRC and/or
+Q&A sessions, with occasional deep dives into topics that many people
+might find interesting or useful.
+
+As you think about your talk, consider what you can share in:
+
+- *Up to 10 minutes total:* What is the core idea? What do you want
+ people to do or remember? You can show just enough to get people
+ interested and then point them to where they can learn more
+ afterwards. You can answer questions over IRC, the pad, or the
+ wiki, and there's no limit to how long that conversation can go.
+
+- *Up to 20 minutes total:* How would you flesh out some of the points
+ from your 5-10 minute presentation? How can you show the pieces
+ working together?
+
+- *Up to 40 minutes total:* What would benefit from a deep dive?
+ How do you keep it engaging?
+
+When writing your proposal, please write an outline of what you plan
+to talk about if you have 5-10 minutes. If you'd like to propose a
+longer talk, outline what you might include if you had more time to
+present (up to 40 minutes, including Q&A).
+
+Here's an example for a potentially 40-minute talk:
+
+- 5-10 minutes: quick demo of the abc package working together with
+ xyz package.
+- 20 minutes: same as above, with some customization options to
+ accommodate a different workflow.
+- 40 minutes: all of the above, including modifying the behaviour of
+ the package in order to add something new.
+
+This flexibility would help us in devising the conference schedule so
+that as many people as possible could get a chance to present their
+ideas, while still allowing for featuring longer deep dive talks.
+
+Other session formats such as tutorials, workshops, and hangouts are
+welcome as well, in case you would find those other formats preferable
+to a traditional talk format. If you're interested in these or other
+session types, please let us know [[https://lists.gnu.org/mailman/listinfo/emacsconf-org][publicly]] or [[https://lists.gnu.org/mailman/listinfo/emacsconf-org-private][privately]]. We'll be
+happy to work something out with you.
+
+,* Office hours
+
+We're aware that it can be intimidating to submit a proposal to a
+conference, so we thought we'd try to help! This year, we're opening
+up the doors of our virtual offices for you to come talk to us about
+your proposals with hopes of helping you with any hurdles you may be
+facing with preparing your proposal.
+
+We'd like to publish a schedule of availabilities of volunteers for
+holding office hours. Currently these volunteers consist of some of
+the EmacsConf organizers, but we'd love to have the help of other
+members of the Emacs community as well. If you are a more experienced
+Emacs user and would like to help with this, please [[https://emacsconf.org/contact/][get in touch]]!
+
+Our first office hour this year is planned for Saturday, August 14,
+from 3pm to 4pm UTC with zaeph (Leo Vivier) at the following
+BigBlueButton room: https://bbb.emacsverse.org/b/ban-qye-fd1-5kw.
+
+,* Submitting your proposal
+
+Once you're ready to submit your proposal, the [[https://emacsconf.org/2021/submit/][submit]] page has the
+instructions on how to submit your talk.
+
+We use an anonymized submission process to reduce bias and encourage
+contribution. Identifying information will be removed from
+submissions by a conference organizer who will not participate in
+talk selection. The anonymized submissions will then be reviewed by
+a selection committee.
+
+If your talk is approved, we'd love it if you could help us make sure
+the conference runs smoothly. After we email you with the time
+allotted for your talk, we'll ask you to
+
+- prepare a prerecording of your talk, or record it with our help if
+ that'd be easier for you; and
+- schedule a short tech-check if you'd like to be able to answer
+ questions in a live session.
+
+Don't forget to subscribe to our main mailing list, [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]],
+for discussion and announcements about the EmacsConf conference.
+
+We look forward to your ideas and submissions!
+
+,* Getting involved
+
+If you would like to help with the conference (planning the sessions,
+reviewing proposals, helping with infrastructure, making sessions more
+accessible, editing video transcripts, etc.), see our [[https://emacsconf.org/2021/planning/][planning]] page
+and come say hi to us at =#emacsconf= on =irc.libera.chat=.
+
+In addition to the [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]] list, feel free to subscribe to
+[[https://lists.gnu.org/mailman/listinfo/emacsconf-org][emacsconf-org]] as well, for discussions related to organizing the
+conference by the EmacsConf organizers and volunteers.
+
+We'd really appreciate your help in making EmacsConf 2021 the best one
+so far!
+
+,* Commitment to freedom
+
+We remain fully committed to freedom, and we will continue
+using our infrastructure and streaming setup consisting entirely
+of [[https://www.gnu.org/philosophy/free-sw.html][free software]], much like previous EmacsConf conferences.
+An article describing our infrastructure and tools is underway,
+and will be announced on the emacsconf-discuss list when published.
+
+
+,* COMMENT Copyright & License
+
+Copyright (c) 2020 Amin Bandali, Sacha Chua, David Bremner
+Copyright (c) 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane
+
+The EmacsConf 2021 Call for Proposals is part of the EmacsConf wiki,
+and is dual-licensed under the terms of the Creative Commons
+Attribution-ShareAlike 4.0 International Public License; and the GNU
+General Public License as published by the Free Software Foundation,
+either version 3 of the License, or (at your option) any later
+version.
+
+A copy of these two licenses is available on the EmacsConf wiki, in
+the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
+
+,* COMMENT How to export this file
+
+As of the time of writing this document (Org mode version 9.3.7), the
+Org links library (=ol.el=) does not yet recognize =ircs= link types,
+and will throw an error if you try to export a file containing them,
+such as this file.
+
+To work around that, you can use something along the lines of the
+Emacs Lisp code below, by either adding it to your init file, or by
+putting the point in the code block and hitting =C-c C-v e= (that is,
+hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to
+evaluate the code, working around the issue only for the current
+session.
+
+,#+begin_src emacs-lisp :results silent
+(org-link-set-parameters
+ "ircs"
+ :export
+ (lambda (link description format)
+ "Export an ircs link.
+See `org-link-parameters' for details about LINK, DESCRIPTION and
+FORMAT."
+ (let ((desc (or description link)))
+ (pcase format
+ (`html (format "<a href=\"ircs:%s\">%s</a>" link desc))
+ (`md (format "[%s](ircs:%s)" desc link))
+ (_ nil)))))
+,#+end_src
+
+#+end_src
+*** Second (and final) call for proposals (closing Sep 30) :email:
+:PROPERTIES:
+:CUSTOM_ID: second-cfp
+:END:
+Sent Sept 27, 2021 to the same lists as the CFP
+Included inline Markdown and attached Org version of the CFP
+
+**** E-mail text
+:PROPERTIES:
+:SUBJECT: [ANN] EmacsConf 2021 Second (and final) Call for Proposals (closing Sep 30)
+:END:
+
+Dear fellow Emacsians,
+
+This is the second and final Call for Proposals for EmacsConf 2021,
+open until September 30. Please see below for details on how to send
+in your proposal(s), or chat about them with us in the #emacsconf IRC
+channel on Libera.Chat.
+
+If you're considering submitting a proposal but think the remaining
+time is not enough, please reach out to me off-list as soon as
+possible and I'd be happy to try and work something out with you.
+
+I'll close this portion of this email with a big thank you to all the
+folks who have submitted their talk proposal(s) or will be doing so.
+Myself and the other EmacsConf organizers look forward to reading over
+them and getting back to you about them and about the next steps. :)
+
+Best,
+amin
+
+P.S. please direct any replies to this post either to myself or to the
+emacsconf-discuss list, so as to help avoid generating extra off-topic
+chatter in the other lists cc'd in this message.
+
+P.P.S. as a volunteer-run conference, we are always looking for new
+fellow volunteers and/or organizers to help with various aspects of
+organizing and running the conference, including reviewing proposal
+submissions. If you're interested in getting involved, please come by
+our IRC channel or one of our public mailing lists (info below), or
+any of the current organizers directly and say hi. We look forward to
+hearing from you!
+** Accept talks :email:
+:PROPERTIES:
+:CUSTOM_ID: accept
+:END:
+*** E-mail text
+Dear ${name},
+
+We would love to have your talk "${title}" as part of EmacsConf
+${conf-year}, and we've allocated ${duration} minutes for
+it. ${time-note}
+
+Your talk is tentatively scheduled for ${schedule}. The times may
+move around a bit as we update the schedule, so we'll check in with
+you if things change a lot. We've scheduled a few minutes for live
+questions and answers via web conference. Will you be available
+around this time? If there are more questions, you can also continue
+over Etherpad/IRC.
+
+Please plan to prerecord your ${duration}-minute talk(s) by ${deadline}
+at the latest. If you can, please send it in as early as possible.
+Submitting your video early lets us ask volunteers to help caption the
+video, making your talk more accessible and searchable.
+
+Please see https://emacsconf.org/${conf-year}/prepare/ for tips and
+instructions on preparing, recording, and sending in your talk. If
+you have any questions or concerns, please let us know.
+
+Thanks,
+
+Amin Bandali
+EmacsConf organization team
+
+P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.
+
+** Thank speakers for submissions :email:
+:PROPERTIES:
+:CUSTOM_ID: acknowledge-submission
+:END:
+*** Captions prepared
+Because you sent in your video early, we were able to caption it so
+that more people can find and enjoy your talk. I've attached the
+caption text file in case you want to review it, suggest any
+corrections, or use the text in a blog post or elsewhere. Thanks again
+for your contribution!
+*** Captions pending
+Just a quick note to let you know that I've downloaded your submission for "${title}".
+
+Now we have the following files starting with ${video-slug}:
+${details}
+
+A quick check shows that it's about ${video-duration} minutes long.
+
+We'll be working on captioning it over the next few weeks. We'll e-mail
+again a little closer to the conference with schedule updates and other
+useful information. If you want to upload a new version, you can upload
+it the same way you did the previous one.
+
+Please feel free to e-mail us at emacsconf-submit@gnu.org if you need
+help updating the talk wiki page at
+${url} or if you have other questions.
+
+Thank you so much for all the work you put into preparing a talk for
+EmacsConf ${conf-year}, and thank you for submitting the prerecorded video
+before the conference!
+** Help speakers with tech checks
+:PROPERTIES:
+:CUSTOM_ID: tech-checks
+:END:
+- Explain process
+- Test audio, webcam, screensharing, collaborative pad
+ - Music demos and other things that use system audio will need to be prerecorded (or done through virtual loopback device, maybe? Technical risk.)
+ - Multi-monitor setups might not be handled well by BBB; share window instead of desktop
+- Check if comfortable checking into IRC: chat.emacsconf.org/?join=emacsconf,emacsconf-org
+- Get IRC nick, phone number for emergency contact, store in private wiki
+- Try to record name pronunciation
+- Encourage webcam for Q&A, although make it clear that it's totally optional
+- Possible picture-in-picture approach to maximize screen real estate
+** Follow up with speakers we haven't heard from :email:
+:PROPERTIES:
+:CUSTOM_ID: follow-up-silence
+:END:
+
+I think we haven't heard from you since we accepted your EmacsConf 2021
+proposal for "${title}" in early October.
+EmacsConf is in less than two weeks, so I wanted to check in with you to
+see how you're doing.
+
+Could you please e-mail us to let us know if you're still working on
+your prerecorded video, if you're planning to present live, or if you
+can't make it this year? I know it's a strange time for everyone, so
+no worries if other priorities have come up and you don't have the
+time for a presentation.
+
+If you've been having technical issues recording your presentation on
+your computer, one of our volunteers could set up a BigBlueButton web
+conference with you to record the presentation. You can find a list of
+volunteers and their availability at
+https://emacsconf.org/2021/prepare/#tech-check . It takes a little time
+to get the recording out of BBB, so please plan to record your
+presentation before Tuesday, November 23.
+
+If you plan to present live, please go through the self-check at
+<https://test.bigbluebutton.org/> . Some speakers have encountered
+technical issues with BigBlueButton that they didn't have with Zoom or
+Google Meet, so this is something we definitely want to look into
+earlier rather than later. If that works for you, please e-mail us
+back so that I can keep your timeslot. The tentative schedule for your
+talk is on the talk page at ${url} .
+
+*Please e-mail us your plans before ${deadline}.* I'm
+planning to shift the schedule around to give more time to confirmed
+speakers for Q&A and possibly live demos. If I don't hear from you by
+then (maybe an over-enthusiastic spam filter has been swallowing up
+all our mail?), I'll probably reallocate the 10 minutes that had
+been set aside for your talk. We might be able to squeeze it back in
+afterwards or play a video from you at the end of the conference day,
+but it would be nice to get the schedule sorted out instead of
+scrambling to fill gaps on the day of the conference.
+
+Hope to hear from you by ${deadline}!
+
+Sacha Chua
+
+(Please use Reply to All to keep emacsconf-submit@gnu.org in the loop. Thanks!)
+** Send check-in instructions :email:
+:PROPERTIES:
+:CUSTOM_ID: check-in-instructions
+:END:
+*** Unknown Q&A preference
+We're looking forward to having you join us at EmacsConf if you can! I
+don't seem to have your Q&A preference in my notes, but if you can
+join us at EmacsConf for questions and answers over video, IRC, or
+Etherpad, that would be great. If not, that's cool, we can collect the
+questions and forward them to you after the conference.
+
+If you want to join us, you can get a rough idea of when your talk is
+scheduled at ${url} . We'll probably keep
+updating the schedule even on the day of the conference. You might want
+to check it some time next week to get a rough sense of where it is, and
+then check it again on the day of your talk.
+
+Please check in at least 30 minutes before the scheduled start of your
+prerecorded talk so that we can deal with small scheduling changes or
+technical issues. You can find the check-in process at
+https://emacsconf.org/2021/speakers/ .
+
+If something comes up, please let us know as soon as you can. Here's
+our emergency contact information:
+
+${emergency-contact-info}
+
+Hope to see you soon if you can join us!
+
+Sacha
+
+*** Speakers will handle Q&A live
+
+We're looking forward to having you join us for questions and answers at
+EmacsConf!
+
+We'll probably keep updating the schedule even on the day of the
+conference. You can get a rough idea of when your talk is scheduled at
+${url} . You might want to check it some time next week to get a rough
+sense of where it is, and then check it again on the day of your talk.
+
+Please check in at least 30 minutes before the scheduled start of your
+prerecorded talk so that we can deal with small scheduling changes or
+technical issues. You can find the check-in process at
+https://emacsconf.org/2021/speakers/ .
+
+If something comes up, please let us know as soon as you can. Here's
+our emergency contact information:
+
+${emergency-contact-info}
+
+Looking forward to seeing you soon!
+
+*** Speakers will handle questions after the event
+
+Thank you so much for contributing a talk for EmacsConf 2021! We're
+looking forward to collecting questions and forwarding them to you by
+e-mail after the conference. We'll also post the prerecording at the
+time that it gets streamed, so people will be able to access it at
+${url} once it has gone live.
+
+If it turns out that you can make it to the conference after all, feel
+free to drop us a line at #emacsconf-org and we'll let people know
+you're around. You can find the check-in process at
+https://emacsconf.org/2021/speakers/ .
+
+Thank you so much for being part of EmacsConf 2021!
+** Announce schedule and watching instructions :email:
+:PROPERTIES:
+:CUSTOM_ID: announce-schedule
+:END:
+Sent Nov 20, 2021
+
+*** E-mail text
+Dear Emacsian friends,
+
+This is it, the final stretch until EmacsConf 2021, coming up on
+November 27 and 28 less than a week from now! A few weeks ago,
+we excitedly shared the EmacsConf 201 program with you. We're now
+happy to share the conference schedule with you, i.e. the program
+plus each talk's (approximate) scheduled time slot:
+
+ https://emacsconf.org/2021/schedule
+
+All of the times listed on the schedule are in EST (UTC-5). You can
+click on each talk's title to open its page for more information,
+including its scheduled time in your local time (displaying local time
+requires running a tiny bit of AGPLv3+-licensed free/libre JavaScript
+code, included on the talk pages). For prerecorded talks, this time
+is also when the talk's video will be made available on the same page.
+Please note the '~' tildes near the times, indicating that they are
+approximations and not meant to be taken as exact times.
+
+On November 27 and 28 you will be able to watch the livestreams via
+https://live.emacsconf.org, which also has details on how to watch the
+streams using media players that support streaming (like mpv and VLC).
+Also, for Asia-Pacific folks, there will be an alternate stream by
+LibreAustralia, at 11:00-17:30 UTC+11 on Sunday, November 28. Please
+see the https://libreau.org/upcoming.html#emacsconf21 page on their
+site for more details and how to tune into the alternate stream.
+
+Last but not least, please see the https://emacsconf.org/2021 page
+of the EmacsConf wiki for more details on watching and participating
+in the conference.
+
+We hope to see you all around on November 27-28 for EmacsConf 2021!
+
+Amin Bandali, Leo Vivier, and Sacha Chua,
+On behalf of the EmacsConf 2021 organizers team
+** Follow up regarding prerecorded videos :email:
+:PROPERTIES:
+:SUBJECT: [need answer by Friday noon EST] EmacsConf 2021: Don't have a prerec from you yet, aaah!
+:CUSTOM_ID: follow-up-prerecs
+:END:
+
+EmacsConf is in a few days and I don't think we have your prerecorded
+video yet, so I'm getting miiiildly stressed about the schedule. And
+you're probably stressing out about it too, so let's go figure out how
+we can make this work.
+
+Option A: If you happen to have the prerecording or can get it done by
+tomorrow, we can probably squeeze it in. Please upload it to
+ftp-upload.emacsconf.org by following the instructions in
+https://emacsconf.org/2021/prepare#ftp-upload , or send us a link using
+your favourite file-sharing service (especially if FTP is giving you
+problems).
+
+Option B: If you want to present live, it might be an option. I'm a little
+worried about the potential for technical issues, since we've had
+problems with that in previous EmacsConfs. The tight schedule means
+there's not a lot of time to figure things out, and it can be hard to
+make something as focused as a prerecorded video when you're doing it
+live. We will definitely want to make sure that:
+ - your self-serve tech check works: https://test.bigbluebutton.org
+ at your convenience;
+ - we have your emergency contact information in case of frozen
+ Internet connection, etc. Please e-mail us the phone number we can
+ use to call you. We promise to use it only for EmacsConf 2021
+ emergency coordination; and
+ - you check in as early as possible (at least 1 hour before, so we
+ know if the speaker before you needs to extend) and let us know
+ that you want to do it live https://emacsconf.org/2021/speakers .
+ We keep adapting the schedule as things come up, so please check
+ https://emacsconf.org/2021/schedule/ on the day of the conference.
+
+If there are technical issues or your talk runs a little over time, we
+might have to stop streaming it on the main stream when it's time for
+the next talk. We may be able to continue streaming it on the
+alternate stream. If so, people can continue watching it there if they
+wish to.
+
+Option C: If you can't make it, that's okay. Life gets crazy
+sometimes. Please let us know and we can update the wiki. If you
+happen to be able to make a prerecorded video afterwards, we can add
+that to the wiki, playlists, and announcements. We hope you can join
+us next year.
+
+Since EmacsConf is *this weekend* (aaaaaaah), please let us know by
+tomorrow noon EST (Friday; 9AM PST, 5PM GMT, 6PM CET) so that we can
+keep the time allocated for you in the schedule. If we don't hear from
+you, we'll probably reallocate the ${duration} minutes reserved for you so
+that other talks can have longer Q&A. If you can still make it, check
+in early and let us know so that we can try to work out an alternate
+stream for you. Hope to hear from you soon!
+
+Sacha
+** Offer speakers the opportunity to go live if they really really want to :email:
+:PROPERTIES:
+:CUSTOM_ID: go-live-maybe
+:END:
+Sent November 25
+*** Email text
+Thank you so much for sending in your prerecording. We were able to
+caption most of the talks, yay! That will help more people appreciate
+the talks, and it'll make it easier for people to look up technical
+terms too. The talks will be streamed with open captions, and the talk
+pages will have the videos with closed captions when they're streamed.
+
+We're still adapting the schedule as stuff comes up, so please check
+the schedule again on the day of the conference and check in as early
+as you can. (Check-in instructions: https://emacsconf.org/2021/speakers)
+
+--- Presenting live? ---
+
+If you really, really, really want to present live, we can keep the
+prerecorded talk as a backup plan. I'm a little worried about the
+potential for technical issues, since we've had problems with that in
+previous EmacsConfs. The tight schedule means there's not a lot of
+time to figure things out, and it can be hard to make something as
+focused as a prerecorded video when you're doing it live. If you want
+to present live, we will definitely want to make sure that:
+ - your self-serve tech check works: https://test.bigbluebutton.org
+ at your convenience;
+ - we have your emergency contact information in case of frozen
+ Internet connection, etc. Please e-mail us the phone number we can
+ use to call you. We promise to use it only for EmacsConf 2021
+ emergency coordination; and
+ - you check in as early as possible (at least 30 minutes before) and
+ let us know that you want to do it live
+ https://emacsconf.org/2021/speakers
+Going with the prerecorded video is probably the least-stress option
+for everyone, but we wanted to offer you the option to go live just in case.
+
+Looking forward to seeing you soon!
+
+** Compress video
+
+Usage: =compress-video.sh original-file output-file=:
+
+#+begin_src sh :eval no :tangle compress-video.sh
+Q=32
+ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
+#+end_src
+
+We tried using q56 before, but it was a little too aggressive. Q=32 is the default and is probably a reasonable space vs. quality compromise.
+
+** Experiment with setup to allow MPV / BBB sound isolation
+:PROPERTIES:
+:CUSTOM_ID: sound
+:END:
+
+Set MIC and OUTPUT appropriately.
+
+#+begin_src sh :eval no
+MIC=alsa_input.usb-046d_0819_A68D6BE0-02.mono-fallback
+OUTPUT=alsa_output.pci-0000_00_1b.0.analog-stereo
+if [ "$1" == "-u" ]; then
+ pactl unload-module module-loopback
+ pactl unload-module module-null-sink
+else
+ pacmd load-module module-null-sink sink_name=recording sink_properties=device.description=recording channels=2
+ pacmd load-module module-null-sink sink_name=mpv sink_properties=device.description=mpv
+ pacmd load-module module-loopback source=$MIC sink=recording
+ pacmd load-module module-loopback source=mpv.monitor sink=recording
+ pacmd load-module module-loopback source=recording.monitor sink=$OUTPUT
+fi
+#+end_src
+
+You can probably then use =pavucontrol= (choose All Streams instead of
+Applications on the Playback tab) or something like the following to
+redirect the mpv output to the mpv sink.
+
+#+begin_src sh :eval no
+pacmd list-sink-inputs # notice the ID for the process you want to redirect
+pacmd move-sink-input 1 mpv
+#+end_src
+** Check for video encoding issues
+
+Sometimes the compression may get cut off. You can use
+=compile-media-verify-video-frames= from
+https://github.com/sachac/compile-media to check that videos have
+enough frames for their expected duration
+
diff --git a/2021/playbook/restream-flv.sh b/2021/playbook/restream-flv.sh
new file mode 100644
index 00000000..dc632762
--- /dev/null
+++ b/2021/playbook/restream-flv.sh
@@ -0,0 +1,2 @@
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
diff --git a/2021/playbook/restream-lowres.sh b/2021/playbook/restream-lowres.sh
new file mode 100644
index 00000000..bd6f5bfb
--- /dev/null
+++ b/2021/playbook/restream-lowres.sh
@@ -0,0 +1,2 @@
+ PASS=$1
+ while true; do ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx icecast://ec2020main480pmu:$PASS@localhost:8000/main-480p.webm; done
diff --git a/2021/playbook/restream-youtube.sh b/2021/playbook/restream-youtube.sh
new file mode 100644
index 00000000..1cc2994b
--- /dev/null
+++ b/2021/playbook/restream-youtube.sh
@@ -0,0 +1,2 @@
+ KEY=$1
+ while true; do ffmpeg -loglevel 8 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -f webm -c:a copy -c:v copy rtmp://a.rtmp.youtube.com/live2/$KEY; done
diff --git a/2021/playbook/stream-desktop-and-audio.sh b/2021/playbook/stream-desktop-and-audio.sh
new file mode 100644
index 00000000..d3a7e6f8
--- /dev/null
+++ b/2021/playbook/stream-desktop-and-audio.sh
@@ -0,0 +1 @@
+ while true; do ffmpeg -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done
diff --git a/2021/poster.md b/2021/poster.md
new file mode 100644
index 00000000..549e6f25
--- /dev/null
+++ b/2021/poster.md
@@ -0,0 +1,58 @@
+[[!meta title="EmacsConf 2021 posters"]]
+[[!meta copyright="Copyright &copy; 2020 Paul Sutton, Amin Bandali<br />Copyright &copy; 2021 Paul Sutton, Amin Bandali, Garulfo Azules, Adam Porter"]]
+
+[[Paul Sutton|poster#zleap]], [[Garulfo Azules|poster#garulfo]], and
+[[Adam Porter|poster#alphapapa]] have created beautiful posters for
+EmacsConf 2021 for folks to share with others to help spread the word
+about the conference! All three posters are licensed freely, under
+the same terms as the rest of the EmacsConf wiki (see [[COPYING]]).
+
+Please see below for previews and details about each of the posters.
+
+
+<a name="zleap"></a>
+## Paul Sutton
+
+The poster and its accompanying sources are available from Paul's
+repository on Debian Salsa, at
+<https://salsa.debian.org/zleap-guest/emacsconf>.
+
+The poster is available in the PDF and PNG formats, along with the
+original ODG source file for it. Direct download links:
+
+- <https://salsa.debian.org/zleap-guest/emacsconf/-/raw/master/emacsconf.pdf>
+- <https://salsa.debian.org/zleap-guest/emacsconf/-/raw/master/emacsconf.png>
+- <https://salsa.debian.org/zleap-guest/emacsconf/-/raw/master/emacsconf.odg>
+
+[[!img /i/emacsconf-2021-poster-zleap.png
+ size=600x
+ alt="EmacsConf 2021 poster by Paul Sutton" class="center"]]
+
+
+<a name="garulfo"></a>
+## Garulfo Azules
+
+The poster and its accompanying sources are available from the
+following repository on Debian Salsa:
+<https://salsa.debian.org/zleap-guest/emacsconfposter>
+
+The poster is available in the PDF format, along with the original ConTeXt
+source file. Direct download links:
+
+- <https://salsa.debian.org/zleap-guest/emacsconfposter/-/raw/master/ConTeXt_version/poster_emacs_v02.pdf>
+- <https://salsa.debian.org/zleap-guest/emacsconfposter/-/raw/master/ConTeXt_version/poster_emacs_v02.tex>
+
+[[!img /i/emacsconf-2021-poster-garulfo.png
+ size=600x
+ alt="EmacsConf 2021 poster by Garulfo Azules" class="center"]]
+
+
+<a name="alphapapa"></a>
+## Adam Porter
+
+Adam's poster is available
+[here](/i/emacsconf-2021-poster-alphapapa.svg) in SVG format.
+
+[[!img /i/emacsconf-2021-poster-alphapapa.png
+ size=600x
+ alt="EmacsConf 2021 poster by Adam Porter" class="center"]]
diff --git a/2021/prepare.md b/2021/prepare.md
new file mode 100644
index 00000000..115d8432
--- /dev/null
+++ b/2021/prepare.md
@@ -0,0 +1,289 @@
+[[!meta title="Notes and tips on preparing your talk"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali<br />Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier"]]
+
+This page contains notes and tips for our speakers on preparing their
+talks and presentations. Please read through the list and consider it
+while preparing your talk. If you have any questions, concerns, or
+suggestions please feel free to write to one of the organizers
+directly (e.g. <bandali@gnu.org>), or write to one our organizational
+mailing lists: the public <emacsconf-org@gnu.org> list, or the private
+<emacsconf-org-private@gnu.org> list, depending on the nature of the
+matter you would like to discuss.
+
+Note: being part of a wiki, this page is subject to change (including
+by you!); so please check back every now and again for any changes and
+updates.
+
+### Guidelines for conduct
+
+Please review our [[guidelines for conduct|conduct]] when preparing
+your talk, to make sure we're all on the same page and strive to make
+the event a great experience for all. If you're not sure whether your
+talk or presentation style meets the guidelines laid out in the
+guidelines for conduct, we'd be happy to help. You can email Sacha
+Chua at <sacha@sachachua.com> to chat more about this.
+
+### Recording your talk
+
+To help EmacsConf 2021 run smoothly, please prerecord your talk, and
+send us your video(s) by **November 7** at the latest (three weeks
+before the conference), to allow us enough time to do any needed
+processing (e.g. format or codec conversion) in preparation for the
+event. Please consider submitting a prerecording as early as possible
+so that we can see if volunteers can caption your video to make it
+more accessible and searchable.
+
+To make it easier for organizers and attendees to correctly pronounce
+your name, please start your video with something along the lines of:
+
+"Hi! I'm ${NAME} and I'll be talking about ${TOPIC}."
+
+<a name="ftp-upload"></a>
+Please **upload your prerecording(s) (and script/notes if any) via FTP** to the FTP server we have set up with the following details:
+
+- host: ftp-upload.emacsconf.org
+- username: anonymous
+- port: 21
+- folder: upload-here
+
+To upload your recording and any accompanying material to the above
+FTP server, you can use your FTP client of choice. For instance,
+FileZilla, a free/libre user-friendly application with a graphical
+user interface. On deb-based GNU/Linux distributions such as Trisquel
+you can install FileZilla by running `sudo apt install filezilla` in a
+terminal. Otherwise, you can download FileZilla from their [project
+website](https://filezilla-project.org/).
+
+You can also use a command-line interface with `ftp`:
+
+```
+$ ftp ftp-upload.emacsconf.org 21
+> anonymous
+> passive
+> cd upload-here
+> send /local/path/to/file.ext file.ext # Don't forget the 2nd arg!
+# Ctrl-D to exit
+```
+
+If you get a `500 Illegal PORT command.` command, try `passive` or
+`quote pasv` to switch to passive mode before sending your file.
+
+If connection fails on the first try, please check to make sure the
+details are exactly as described above; and if the issue persists,
+please email <emacsconf-submit@gnu.org> so we can look into it.
+
+If you have a script or notes for your talk, please include it as well
+so that we could use it to help us with the captioning of your talk.
+You can also send us additional information to include on the wiki
+page for your talk, such as a PDF or links to other pages or
+additional videos. If you need help, please email
+<emacsconf-submit@gnu.org>.
+
+To record your video, you could use any of the following pieces of
+free software, depending on your needs:
+
+- [OBS](//obsproject.com)
+- [SimpleScreenRecorder](//www.maartenbaert.be/simplescreenrecorder/)
+- [vokoscreenNG](//linuxecke.volkoh.de/vokoscreen/vokoscreen.html)
+- [peek](//github.com/phw/peek)
+- [ffmpeg](//trac.ffmpeg.org/wiki/Capture/Desktop)
+
+You might find the following free software programs useful for editing
+your video recordings:
+
+- [Kdenlive](//kdenlive.org/en/)
+- [Blender](//www.blender.org)
+- [Pitivi](http://www.pitivi.org)
+
+Per GNU Project's
+[Guide to Formats](//audio-video.gnu.org/docs/formatguide.html), we
+prefer to receive prerecorded videos in formats unencumbered by
+software patents, such as `video/webm` (WebM-encoded video files, with
+`.webm` file extension) and `video/ogg` (video files encoded with the
+Theora video codec, encapsulated in an Ogg transport layer, with
+`.ogg` or `.ogv` file extension). However, if for one reason or
+another you are unable to send us your prerecorded video in one of the
+above formats, you may submit them in other common formats, like
+MPEG-4 (`.mp4`), and we will try to convert them to our preferred
+formats on your behalf.
+
+*Prepare recorded video in 720p (1280px by 720px) or higher, in the
+WebM format if possible.*
+
+> The conference broadcast will most likely be in
+> [720p](https://en.wikipedia.org/wiki/720p) (1280px x 720px,
+> progressive) using the [WebM](https://www.webmproject.org/) video
+> format. The closer to this format submitted video files arrive in,
+> the easier it will be to process and upload them.
+
+# Compression
+
+If you would like to compress your video before uploading, the following shell script may be useful:
+
+ Q=32
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
+
+If you put it in a file called `compress-video.sh`, you can execute it
+from the command line with something like `sh compress-video.sh
+input-file.webm output-file.webm`. It will compress the file in two
+passes. During the first pass, the frame count will increase, but the
+speed will be 0. After the first pass, it will display proper progress
+information.
+
+<a name="tech-check"></a>
+# Tech-check
+
+We ask that speakers who plan to participate in live Q&A sessions schedule
+a short tech-check in the weeks leading to the conference; this is to ensure
+that you can perform all the common tasks you'd need such as sharing your
+screen or toggling your microphone.
+
+We use BigBlueButton for our video-conferencing needs, and a quick way to
+familiarize yourself with it is to run it in a test-room:
+<https://test.bigbluebutton.org/>
+
+If this is your first time at EmacsConf or if you run into any problems,
+please get in touch with us and we'll sort things out together! In those
+cases, since we'll need to schedule a 1-on-1 tech-check with you, we ask that
+you email the closest volunteer to your timezone in the list below (or zaeph
+if none of the timezones is a good fit). You can also visit us at
+[#emacsconf-org on Libera](irc://libera.chat/#emacsconf-org).
+
+We will likely schedule those 1-on-1 tech-checks with you on Saturdays or
+Sundays, but we would be happy to try and work out another time if that
+doesn't work for you.
+
+<table>
+<thead>
+<tr>
+<td>Volunteer</td>
+<td>Email</td>
+<td>IRC Nick</td>
+<td>Timezone</td>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Leo Vivier</td>
+<td>&lt;<a href="mailto:zaeph@zaeph.net">zaeph@zaeph.net</a>&gt;</td>
+<td>zaeph</td>
+<td>CET (UTC+1)</td>
+</tr>
+<tr>
+<td><strong>Wanna help out? You can add your name and contact-info here!</strong></td>
+<td>&lt;<a href="mailto:your@email">your@email</a>&gt;</td>
+<td>…</td>
+<td>…</td>
+</tr>
+<tr>
+<td>Corwin Brust</td>
+<td>&lt;<a href="mailto:corwin@bru.st">corwin@bru.st</a>&gt;</td>
+<td>corwin</td>
+<td>US/Central (UTC-6)</td>
+</tr>
+<tr>
+<td>Amin Bandali</td>
+<td>&lt;<a href="mailto:bandali@gnu.org">bandali@gnu.org</a>&gt;</td>
+<td>bandali</td>
+<td>US/Eastern (UTC-5)</td>
+</tr>
+<tr>
+<td>Yuchen Pei</td>
+<td>&lt;<a href="mailto:hi@ypei.me">hi@ypei.me</a>&gt;</td>
+<td></td>
+<td>Australia/Eastern (UTC+11)</td>
+</tr>
+<tr>
+<td>Case Duckworth</td>
+<td>&lt;<a href"mailto:acdw@acdw.net">acdw@acdw.net</a>&gt;</td>
+<td>acdw</td>
+<td>US/Central (UTC-6)</td>
+</tr>
+</tbody>
+</table>
+
+If you'd like to help out with the tech-checks, feel free to add your name and
+email to the above list and email &lt;<a
+href="mailto:zaeph@zaeph.net">zaeph@zaeph.net</a>&gt; to plan the logistics.
+
+Thank you so much for helping with EmacsConf 2021!
+
+# Frequently-asked questions
+
+## Can I present live?
+
+Tech issues kept happening during EmacsConf 2020, so we'd really
+prefer that all talks have prerecorded videos. There might be time
+for live questions and answers over a web conference, though, so if
+you can record a short video covering your main points, you might be
+able to go into more detail in live Q&A.
+
+## I have so much I want to share. Can I record a longer video?
+
+The conference program has so many interesting talks. We wish we
+could fit everything in at full length! (Maybe EmacsConf month?)
+Please think of your video as a short teaser that can get people
+interested and point them to where they can find out more. You can
+email <emacsconf-submit@gnu.org> links and other notes to add to the
+wiki page for your talk. If you'd like to record a longer video *in
+addition* to the short one for the main conference, please feel free
+to send us that too.
+
+## I can't figure out how to record the video. Can I just present the talk?
+
+We might be able to help you record your talk using the BigBlueButton
+web conferencing system before November 7. Please email
+<emacsconf-submit@gnu.org> with some times that might work for you and
+we'll see if a volunteer can meet up with you to record it.
+
+## How do I show my keystrokes on screen?
+
+In Emacs, you can use
+[interaction-log.el](https://github.com/michael-heerdegen/interaction-log.el)
+(in MELPA) to display the keystrokes and the commands they run in a separate
+buffer. For a system-wide solution, you can look into
+[screenkey](https://gitlab.com/screenkey/screenkey).
+
+## I'm not used to talking to myself. Can I present the talk to someone?
+
+We might be able to help you record your talk using the BigBlueButton
+web conferencing system before November 7. Please email
+<emacsconf-submit@gnu.org> with some times that might work for you and
+we'll see if a volunteer can meet up with you to record it.
+
+## Can I see the other proposed talks?
+
+Once we've emailed all the speakers about their acceptance, we'll put
+up the talk wiki pages. That way, you can see what else is going on
+in the conference and maybe coordinate with other speakers in order to
+minimize overlap and maximize awesomeness.
+
+## What if there are lots of great questions during Q&A and we run out of time?
+
+You can continue answering questions on the collaborative pad or IRC,
+and we'll copy questions and answers onto the wiki page
+afterwards. You can also answer questions on the wiki page even after the event.
+
+An extended live demo or Q&A session might be possible if someone
+volunteers to broadcast it on an alternative stream. If you or a
+volunteer is interested in helping with this, please feel free to
+contact us at <emacsconf-submit@gnu.org>.
+
+## More questions?
+
+Please email <emacsconf-submit@gnu.org>. We'd love to hear from you.
+
+Thanks for contributing to EmacsConf 2021!
+
+<!-- <a name="tech-checklist"></a> -->
+<!-- #### Tech checklist -->
+
+<!-- - Can you speak and be heard? Is there echo? -->
+<!-- - Can you hear the organizer? -->
+<!-- - Can you share your screen? Is the screen readable? -->
+<!-- - If you plan to show your keystrokes, is that display visible? -->
+<!-- - If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background? -->
+<!-- - Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you? -->
+<!-- - Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes? -->
+<!-- - Do you need help finding your way around IRC so that you can check into `#emacsconf-org`? What is your IRC nickname? -->
diff --git a/2021/schedule-details.md b/2021/schedule-details.md
new file mode 100644
index 00000000..17a516bc
--- /dev/null
+++ b/2021/schedule-details.md
@@ -0,0 +1,58 @@
+<div>45 talks total: 43 captioned (594 min), 2 waiting for captions (36 min)</div>
+<table width="100%"><tr><th>Title</th><th>Speaker(s)</th><th>Resources</th></tr><tr><td colspan="3"><strong>Saturday morning<strong></td></tr>
+<tr><td><a href="/2021/talks/day1-open">Opening remarks</a></td><td></td><td><ul></ul></td></tr>
+<tr><td><a href="/2021/talks/news">Emacs News Highlights</a></td><td>Sacha Chua</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--compressed56.webm">Download --compressed56.webm (6.1MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-news--emacs-news-highlights--sacha-chua--main.webm">Download --main.webm (13MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/frownies">The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability</a></td><td>Case Duckworth</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--compressed56.webm">Download --compressed56.webm (26.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-frownies--the-true-frownies-are-the-friends-we-made-along-the-way-an-anecdote-of-emacs-s-malleability--case-duckworth--main.webm">Download --main.webm (65.3MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/omegat">Emacs manuals translation and OmegaT</a></td><td>Jean-Christophe Helary</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary.pdf">Download .pdf (3.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--compressed56.webm">Download --compressed56.webm (9.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_fr.vtt">Download --main_fr.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main_ja.vtt">Download --main_ja.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-omegat--emacs-manuals-translation-and-omegat--jean-christophe-helary--main.webm">Download --main.webm (15.2MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/unix">GNU's Not UNIX: Why Emacs Demonstrates The UNIX Philosophy Isn't Always The Only Answer</a></td><td>Daniel Rose</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--compressed56.webm">Download --compressed56.webm (6.1MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-unix--gnus-not-unix-why-emacs-demonstrates-the-unix-philosophy-isnt-always-the-only-answer--daniel-rose--main.webm">Download --main.webm (10.4MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/montessori">Emacs and Montessori Philosophy</a></td><td>Grant Shangreaux</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--compressed56.webm">Download --compressed56.webm (11.4MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-montessori--emacs-and-montessori-philosophy--grant-shangreaux--main.webm">Download --main.webm (15.1MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/pattern">Emacs as Design Pattern Learning</a></td><td>Greta Goetz</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--compressed56.webm">Download --compressed56.webm (36.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-pattern--emacs-as-design-pattern-learning--greta-goetz--main.webm">Download --main.webm (131.8MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/freedom">How Emacs made me appreciate software freedom</a></td><td>Protesilaos Stavrou</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--compressed56.webm">Download --compressed56.webm (54.9MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-freedom--how-emacs-made-me-appreciate-software-freedom--protesilaos-stavrou--main.webm">Download --main.webm (85.9MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/nongnu">NonGNU ELPA Update</a></td><td>Philip Kaludercic</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--compressed56.webm">Download --compressed56.webm (7.2MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nongnu--nongnu-elpa-update--philip-kaludercic--main.webm">Download --main.webm (10.6MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/borg">Manual Package Management in The Era of Repositories - Why and How</a></td><td>Dhavan (codingquark)</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--compressed56.webm">Download --compressed56.webm (7.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-borg--manual-package-management-in-the-era-of-repositories-why-and-how--codingquark--main.webm">Download --main.webm (16.8MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/nangulator">Introducing N-Angulator</a></td><td>Kevin Haddock</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--compressed56.webm">Download --compressed56.webm (9.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nangulator--introducing-n-angulator--kevin-haddock--main.webm">Download --main.webm (13.7MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/gregorian">Typesetting Gregorian Chant with Emacs</a></td><td>Spencer King</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--compressed56.webm">Download --compressed56.webm (7MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-gregorian--typesetting-gregorian-chant-with-emacs--spencer-king--main.webm">Download --main.webm (7.9MB)</a></li></ul></td></tr>
+<tr><td colspan="3"><strong>Saturday afternoon<strong></td></tr>
+<tr><td><a href="/2021/talks/telega">telega.el and the Emacs community on Telegram</a></td><td>Gabriele Bozzola</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--compressed56.webm">Download --compressed56.webm (8.1MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-telega--telega-el-and-the-emacs-community-on-telegram--gabriele-bozolla--main.webm">Download --main.webm (10.5MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/janitor">A day in the life of a janitor</a></td><td>Stefan Monnier</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--compressed56.webm">Download --compressed56.webm (36.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-janitor--a-day-in-the-life-of-a-janitor--stefan-monnier--main.webm">Download --main.webm (53.4MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/erg">Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year</a></td><td>Noorah Alhasan, Joe Corneli, Raymond Puzio, Leo Vivier</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--compressed56.webm">Download --compressed56.webm (11MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-erg--emacs-research-group-season-zero-what-we-did-together-with-emacs-in-2-hours-a-week-for-a-year--noorah-alhasan-joe-corneli-raymond-puzio-leo-vivier--main.webm">Download --main.webm (33.7MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/cs">One effective CS grad student workflow</a></td><td>Greg Coladonato</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--compressed56.webm">Download --compressed56.webm (43.2MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-cs--one-effective-cs-grad-student-workflow--greg-coladonato--main.webm">Download --main.webm (23.4MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/professional">Using Org-Mode For Recording Continuous Professional Development</a></td><td>Philip Beadling</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--compressed56.webm">Download --compressed56.webm (9.1MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-professional--using-org-mode-for-recording-continuous-professional-development--philip-beadling--main.webm">Download --main.webm (15.1MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/tech">Creating technical API documentation and presentations using org-babel, restclient, and org-treeslide</a></td><td>Jan Ypma</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--compressed56.webm">Download --compressed56.webm (15.9MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-tech--creating-technical-documentation-and-presentations-using-org-babel-restclient-and-org-treeslide--jan-ypma--main.webm">Download --main.webm (17.1MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/exec">Org as an executable format</a></td><td>Tom Gillespie</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--compressed56.webm">Download --compressed56.webm (10.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-exec--org-as-an-executable-format--tom-gillespie--main.webm">Download --main.webm (13.8MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/org-outside">The use of Org mode syntax outside of GNU/Emacs</a></td><td>Karl Voit</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--compressed56.webm">Download --compressed56.webm (27.1MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-org-outside--the-use-of-org-mode-syntax-outside-of-gnu-emacs--karl-voit--main.webm">Download --main.webm (114MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/teach">Using Org-mode to teach programming</a></td><td>Daniel German</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--compressed56.webm">Download --compressed56.webm (26.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-teach--using-org-mode-to-teach-programming--daniel-german--main.webm">Download --main.webm (42.7MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/babel">Babel for academics</a></td><td>Asilata Bapat</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--compressed56.webm">Download --compressed56.webm (13.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-babel--babel-for-academics--asilata-bapat--main.webm">Download --main.webm (21.4MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/research">Managing a research workflow (bibliographies, note-taking, and arXiv)</a></td><td>Ahmed Khaled</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled.el">Download .el</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--compressed56.webm">Download --compressed56.webm (14.2MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-research--managing-a-research-workflow-bibliographies-note-taking-and-arxiv--ahmed-khaled--main.webm">Download --main.webm (19.2MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/molecular">Reproducible molecular graphics with Org-mode</a></td><td>Blaine Mooers</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers.pdf">Download .pdf (3.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--compressed56.webm">Download --compressed56.webm (8.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-molecular--reproducible-molecular-graphics-with-org-mode--blaine-mooers--main.webm">Download --main.webm (11.8MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/invoice">Finding Your (In)voice: Emacs for Invoicing</a></td><td>Bala Ramadurai</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--compressed56.webm">Download --compressed56.webm (14.9MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-invoice--find-your-invoice-emacs-for-invoicing--bala-ramadurai--main.webm">Download --main.webm (31.7MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/project">Budgeting, Project Monitoring and Invoicing with Org Mode</a></td><td>Adolfo Villafiorita</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--compressed56.webm">Download --compressed56.webm (15.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.webm">Download --main.webm (37.5MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/dashboard">Productivity Dashboards with Emacs and Kindle</a></td><td>Mehmet Tekman</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--compressed56.webm">Download --compressed56.webm (10.4MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dashboard--productivity-dashboards-with-emacs-and-kindle--mehmet-tekman--main.webm">Download --main.webm (11MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/nyxt">Emacs with Nyxt: extend your editor with the power of a Lisp browser</a></td><td>Andrea</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--compressed56.webm">Download --compressed56.webm (24.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-nyxt--emacs-with-nyxt-extend-your-editor-with-the-power-of-a-lisp-browser--andrea--main.webm">Download --main.webm (27.2MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/dev-update">Emacs development updates</a></td><td>John Wiegley</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--compressed56.webm">Download --compressed56.webm (10.3MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-dev-update--emacs-development-updates--john-wiegley--main.webm">Download --main.webm (30.4MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/design">On the design of text editors</a></td><td>Nicolas P. Rougier</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--compressed56.webm">Download --compressed56.webm (6.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-design--on-the-design-of-text-editors--nicolas-p-rougier--main.webm">Download --main.webm (9.3MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/day1-close">Closing remarks day 1</a></td><td></td><td><ul></ul></td></tr>
+<tr><td colspan="3"><strong>Sunday, Nov 28, 2021: Development talks<strong></td></tr>
+<tr><td colspan="3"><strong>Sunday morning<strong></td></tr>
+<tr><td><a href="/2021/talks/day2-open">Opening remarks day 2</a></td><td></td><td><ul></ul></td></tr>
+<tr><td><a href="/2021/talks/faster">Optimizing Emacs Lisp Code</a></td><td>Dmitry Gutov</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov.el">Download .el</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--compressed56.webm">Download --compressed56.webm (57.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov--main.webm">Download --main.webm (97.5MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/structural">Tree-edit: Structural editing for Java, Python, C, and beyond!</a></td><td>Ethan Leba</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--compressed56.webm">Download --compressed56.webm (13MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-structural--tree-edit-structural-editing-for-java-python-c-and-beyond--ethan-leba--main.webm">Download --main.webm (15MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/ui">Yak-shaving to a UI framework</a></td><td>Erik Anderson</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--compressed56.webm">Download --compressed56.webm (10.6MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-ui--yak-shaving-to-a-ui-framework-help-i-accidentally-yak-shaved-my-way-to-writing-a-ui-framework-because-overlays-were-slow--erik-anderson--main.webm">Download --main.webm (13.5MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/mold">Moldable Emacs, a step towards sustainable software</a></td><td>Andrea</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--compressed56.webm">Download --compressed56.webm (14.2MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-mold--moldable-emacs-a-step-towards-sustainable-software--andrea--main.webm">Download --main.webm (22.7MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/model">Extending the "model" of Emacs to other applications</a></td><td>Laszlo Krajnikovszkij</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--compressed56.webm">Download --compressed56.webm (8.6MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-model--extending-the-model-of-emacs-to-other-applications--laszlo-krajnikovszkij--main.webm">Download --main.webm (9.6MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/native">Emacs Lisp native compiler, current status and future developments</a></td><td>Andrea Corallo</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo.odp">Download .odp (3.6MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--compressed56.webm">Download --compressed56.webm (40.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-native--emacs-lisp-native-compiler-current-status-and-future-developments--andrea-corallo--main.webm">Download --main.webm (89MB)</a></li></ul></td></tr>
+<tr><td colspan="3"><strong>Sunday afternoon<strong></td></tr>
+<tr><td><a href="/2021/talks/form">Old McCarthy Had a Form</a></td><td>Ian Eure</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--compressed56.webm">Download --compressed56.webm (13.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-form--old-mccarthy-had-a-form--ian-eure--main.webm">Download --main.webm (24.9MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/bindat">Turbo Bindat</a></td><td>Stefan Monnier</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--compressed56.webm">Download --compressed56.webm (28.8MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bindat--turbo-bindat--stefan-monnier--main.webm">Download --main.webm (36.6MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/test">Test blocks</a></td><td>Eduardo Ochs</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--compressed56.webm">Download --compressed56.webm (7.7MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-test--test-blocks--eduardo-ochs--main.webm">Download --main.webm (10MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/bidi">Perso-Arabic Input Methods And Making More Emacs Apps BIDI Aware</a></td><td>Mohsen BANAN</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--compressed56.webm">Download --compressed56.webm (20.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-bidi--perso-arabic-input-methods-and-making-more-emacs-apps-bidi-aware--mohsen-banan--main.webm">Download --main.webm (32.5MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/eaf">Emacs Application Framework: A 2021 Update</a></td><td>Matthew Zeng</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--compressed56.webm">Download --compressed56.webm (10.7MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-eaf--emacs-application-framework-a-2021-update--matthew-zeng--main.webm">Download --main.webm (13.4MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/imaginary">Imaginary Programming</a></td><td>Shane Mulligan</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan.pdf">Download .pdf</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--compressed56.webm">Download --compressed56.webm (19.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-imaginary--imaginary-programming--shane-mulligan--main.webm">Download --main.webm (32.2MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/clede">CLEDE: the Common Lisp Emacs Development Environment</a></td><td>Fermin MF</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--compressed56.webm">Download --compressed56.webm (24.6MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.webm">Download --main.webm (39.8MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/maintainers">How to help Emacs maintainers?</a></td><td>Bastien Guerry</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--compressed56.webm">Download --compressed56.webm (9.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-maintainers--how-to-help-emacs-maintainers---bastien-guerry--main.webm">Download --main.webm (14.7MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/build">How to build an Emacs</a></td><td>Fermin MF</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--compressed56.webm">Download --compressed56.webm (15.5MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.webm">Download --main.webm (18.7MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/forever">M-x Forever: Why Emacs will outlast text editor trends</a></td><td>David Wilson (System Crafters)</td><td><ul><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--compressed56.webm">Download --compressed56.webm (27.6MB)</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--chapters.vtt">Download --chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2021/emacsconf-2021-forever--m-x-forever-why-emacs-will-outlast-text-editor-trends--david-wilson-system-crafters--main.webm">Download --main.webm (51.4MB)</a></li></ul></td></tr>
+<tr><td><a href="/2021/talks/day2-close">Closing remarks day 2</a></td><td></td><td><ul></ul></td></tr></table><div class="cancelled">Cancelled:<ul><li><a href="/2021/talks/dsl">Self-Describing Smart DSL's: The Next Magits</a> - Psionic</li>
+<li><a href="/2021/talks/devel">Don't write that package! or: How I learned to stop worrying and love emacs-devel</a> - Stefan Kangas</li>
+<li><a href="/2021/talks/rust">Extending Emacs in Rust with Dynamic Modules</a> - Tuấn-Anh Nguyễn</li>
+<li><a href="/2021/talks/bug">Let's talk about bug trackers</a> - Bastien Guerry</li></ul></div> \ No newline at end of file
diff --git a/2021/schedule.md b/2021/schedule.md
new file mode 100644
index 00000000..cbf61f19
--- /dev/null
+++ b/2021/schedule.md
@@ -0,0 +1 @@
+[[!meta redir=/2021/talks]]
diff --git a/2021/sidebar.md b/2021/sidebar.md
new file mode 100644
index 00000000..7257fdcf
--- /dev/null
+++ b/2021/sidebar.md
@@ -0,0 +1,13 @@
+<p>Welcome to...</p>
+<p class="center">[[!img /i/emacsconf-logo1-256.png alt="EmacsConf logo" size="72x" link=2021]]</p>
+<p class="center"><strong>[[EmacsConf 2021|2021]]</strong></p>
+
+---
+
+* [[**Schedule**|talks]]
+* [[**All resources**|all]]
+* [[Posters|poster]]
+* [[Prepare]]
+* [[Planning]]
+* [[Guidelines for Conduct|conduct]]
+* [[Contact information|contact]]
diff --git a/2021/speakers.md b/2021/speakers.md
new file mode 100644
index 00000000..253ccb2a
--- /dev/null
+++ b/2021/speakers.md
@@ -0,0 +1,52 @@
+[[!meta title="Conference-day instructions for speakers"]]
+[[!meta copyright="Copyright &copy; 2021 Sacha Chua"]]
+
+# How to check in
+
+You can check in on IRC by going to
+[https://chat.emacsconf.org](https://chat.emacsconf.org/?join=emacsconf,emacsconf-org).
+and joining the #emacsconf-org channel (and optionally the #emacsconf
+channel as well). You can also use your favourite IRC or Matrix client
+instead.
+
+Say something like "Hi, this is &lt;your name&gt; checking in"
+in the \#emacsconf-org channel and one of the organizers will check you in. If
+you are having a hard time with IRC, e-mail <emacsconf-submit@gnu.org>
+and we can give you the URL of a BigBlueButton room to join.
+
+# The process
+
+- When you check in, you can let us know where you prefer to look for
+ questions (live Q&A, IRC in #emacsconf-questions or on [Etherpad](https://etherpad.wikimedia.org/p/emacsconf-2021))
+- If you want to do live Q&A (ex: a quick demo if asked), we'll set
+ you up in a BigBlueButton room. You can keep watching the conference
+ or doing other things while waiting there. We'll let you know
+ shortly before your prerec ends.
+- While your prerec plays, people will add questions on IRC or Etherpad.
+- Volunteers will scramble madly to relay questions to your preferred
+ area.
+- You can start answering them if you want, or you can get things
+ ready for a quick demo if you're doing live Q&A.
+- After your prerec finishes:
+ - If you're doing IRC/Etherpad: we'll let people know where to ask
+ questions and we can read out some of the questions and answers
+ that are there.
+ - If you're doing live Q&A:
+ - We'll switch the stream to broadcast from the BBB room you're in.
+ - Depending on your preferences, one of the organizers can read
+ questions to you, or you can read questions off the pad/IRC
+ yourself.
+ - We'll let you know if there are additional questions or if we
+ need to wrap up.
+- After the conference, we'll collect questions and answers from IRC
+ and the pad. We'll put them on the talk page and e-mail them to you
+ in case you want to follow up or keep the conversation going.
+
+# Tips and backup plans
+
+- Doing a tech check can help if you want to do live Q&A.
+ https://test.bigbluebutton.org has a self-serve tech check.
+- Please let us know if you're running late or if it turns out you
+ can't make it. Drop by #emacsconf-org, e-mail us at
+ <emacsconf-submit@gnu.org> , or use the emergency contact
+ information from the check-in instructions email.
diff --git a/2021/submit.md b/2021/submit.md
new file mode 100644
index 00000000..6fe07f2f
--- /dev/null
+++ b/2021/submit.md
@@ -0,0 +1,100 @@
+[[!meta title="Submit"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali<br />
+Copyright 2021 Amin Bandali, Sacha Chua, Leo Vivier"]]
+
+When you're ready to submit your proposal, send your submission via
+email to <emacsconf-submit@gnu.org> by **September 30**, including at
+minimum these essential information:
+
+- Your (preferred) name;
+
+- the title of your talk/session;
+
+- an abstract of your talk (500 words or less);
+
+- brief descriptions/outlines for [[all talk formats|cfp#formats]] up
+ to your maximum planned length:
+ - 5-10 minutes:
+ - 20 minutes:
+ - 40 minutes:
+
+- your availability during the conference days (Nov 27 and 28) and how
+ you'd like to handle questions (live web conference, IRC, pad, wiki,
+ questions after the event); and
+
+- your agreement with the speaker release for EmacsConf (see below).
+
+
+Please use the following template for your submission email,
+filling it out with information about you and your proposal:
+
+```
+Name:
+
+
+Title:
+
+
+Abstract:
+
+
+
+
+
+
+
+
+- 5-10 minutes: (brief description/outline)
+- 20 minutes: (brief description/outline)
+- 40 minutes: (brief description/outline)
+
+Availability and preferred Q&A approach:
+
+Speaker release:
+
+ By submitting this proposal, I agree that my presentation at
+ EmacsConf 2021 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials")
+ under the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use
+ of the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+```
+
+
+All kinds of people use Emacs for all kinds of things. We would love
+it if EmacsConf 2021 could highlight interesting perspectives and
+reflect the diversity of our community. If you know someone who might
+have a good idea for a talk, please reach out to them and encourage
+them to submit a proposal. Many people (especially from
+underrepresented groups such as women, people of colour,
+non-developers, etc.) might not consider themselves expert enough to
+share their thoughts. If you let them know that you value their
+knowledge and maybe even suggest something that you think others would
+like to hear more about, they may realize that they have something
+worth sharing and that we would love to hear from them.
+
+We will continue using an anonymized submission process this year as
+well. Identifying information will be removed from the submissions by
+a conference organizer who will not participate in talk selection.
+The anonymized submissions will then be reviewed by a selection
+committee (if you would like to help review submissions as part of
+this committee, please [[let us know|contact]]. We hope this will
+help reduce bias and encourage contribution. We look forward to
+hearing from you (and the people you want to nudge to speak)!
diff --git a/2021/talks.md b/2021/talks.md
new file mode 100644
index 00000000..f36b0f86
--- /dev/null
+++ b/2021/talks.md
@@ -0,0 +1,18 @@
+[[!meta title="Schedule"]]
+[[!meta copyright="Copyright &copy; 2021 Amin Bandali and Sacha Chua"]]
+[[!sidebar content=""]]
+
+EmacsConf 2021 was on November 27 (Sat) and November 28 (Sun),
+2021 from 9am-~5:30pm Toronto/EST time; equivalently, 6am-2:30pm PST,
+2pm-10:30pm UTC, 3pm-11:30pm Zurich/CET, 7:30pm-4:00am(next-day) India/IST, 10pm-6:30am GMT+8. You
+can also get this in [iCalendar format](https://media.emacsconf.org/2021/emacsconf.ics), and there's
+some experimental code over at
+<https://git.emacsconf.org/emacsconf-el/> for downloading the
+schedule and updating an Org file with the data.
+
+You can also view all the videos and download resources from the index of [[all EmacsConf 2021 resources|all]].
+
+There was also an alternate stream for APAC hours, see
+<https://libreau.org/past.html#emacsconf21>.
+
+[[!inline pages="internal(2021/schedule-details)" raw="yes"]]
diff --git a/2021/talks/babel.md b/2021/talks/babel.md
new file mode 100644
index 00000000..cd28d54b
--- /dev/null
+++ b/2021/talks/babel.md
@@ -0,0 +1,114 @@
+[[!meta title="Babel for academics"]]
+[[!meta copyright="Copyright &copy; 2021 Asilata Bapat"]]
+[[!inline pages="internal(2021/info/babel-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# Babel for academics
+Asilata Bapat
+
+[[!taglink CategoryOrgMode]]
+
+[[!inline pages="internal(2021/info/babel-schedule)" raw="yes"]]
+
+Plain org-mode is already an extremely powerful and
+customisable tool for task and time management, note-taking, calendar
+and agenda management, and much more. Babel takes org a step further
+by letting you write, evaluate, and export code in different languages
+from within a single file. In this talk, I will highlight some
+features of babel that I find exciting and extremely useful,
+particularly for an academic workflow.
+
+Getting started with babel can be intimidating, but it's hard to stop
+using it once you start. As an academic, I typically don't manage
+large coding projects. My primary purpose is writing lecture notes,
+assignments, and papers, and managing related admin. Typically, I want
+to try and automate the boring portions of my workflow without extra
+overhead. I also tend to find various tasks easier in some programming
+languages and harder in others, and prefer to mix and match languages
+as the task dictates. Babel makes this process seamless.
+
+A basic use case is writing a document in org-mode and exporting it to
+LaTeX or HTML. Org-mode even lets you write multiple documents in a
+single org file, which can be convenient. Babel lets you add all sorts
+of enhancements to the same file. For example, suppose we have a
+single org document with all the problem sets for a course. Within
+this single file, we could now:
+
+- draw pictures in ditaa, graphviz, or python instead of LaTeX,
+- use python to do complex calculations and then output the result as LaTeX,
+- define skeletons to quickly draw up assignment templates,
+- toggle exporting of assignments with or without solutions based on tags,
+- locally change export settings or run a post-export hook,
+- automatically export to LaTeX after saving,
+- tangle code blocks from some or all of the languages to external files.
+
+I will try to showcase features of babel that academics could find
+helpful, by presenting some ways in which I have tried to use babel. I
+would also like to be inspired by other people's babel workflows!
+
+# Links
+- Course webpage: <https://asilata.github.io/ggm/2021/>
+- Code: <https://github.com/asilata/emacsconf2021>
+- Code (gitlab mirror): <https://gitlab.com/asilata/emacsconf2021>
+
+# Discussion
+
+IRC nick: asilata
+
+Pad:
+
+- Q1: The talk was amazing thanks! I show the img inline in the Org
+ file with org-toggle-inline-images, maybe useful to others too.
+ - A: Thanks! I do that if I want to look at previews, too, but
+ sometimes it slows down my document. Any tips for that?
+- Q2: I always tried to use Tikz for showing diagrams in Org Mode
+ documents, but dot code blocks definitively make drawing graphics
+ easier! Thanks for sharing!
+ - Remark by Karl: In my personal workflows, I love the abstraction
+ layer of <https://plantuml.com/>
+
+From BBB:
+
+- Don't have a question, just to say inspiring to see how you use org-mode + babel. Thx!
+- Ha, a question, is your setup online somewhere?
+- Asilata Bapat: <https://github.com/asilata/emacsconf2021>
+- thanks so much for the presentation and sharing the details of your workflow
+- I particularly appreciated your "causal use" of skel :D
+
+IRC:
+
+- the export-setup block is a great use case for orgstrap :)
+ - asilata: I was just thinking that after the orgstrap presentation :)
+- Man I was just wondering how to write LateX in Emacs this is incredible.
+- I really liked the resulting LaTeX output file -- looked gorgeous :)
+- Yeah seriously. I am pleasantly surprised. I think I'll have to switch over to using Emacs and LateX
+- Theme: zenburn
+- wait ... does elisp support unicode lambda like racket?
+ - I mean... you can make it, but not out of the box.
+ - asilata: I think it's just an org prettification
+ - prettify-symbols-mode
+- do you use latex preview in the org buffer too?
+ - asilata: no, I usually don't, I find it slows down my system a bit.
+- some very nice examples of wicked-cool org stuff there :)
+- I also use python to generate latex from babel so that I don't mess things up
+
+From [YouTube](https://www.youtube.com/watch?v=1Ooi4KAd2FM&feature=em-comments):
+
+- Cool talk! I suggest to export your diagrams to some vector format (PDF, SVG, etc.) if you (as you say) embed it in LaTeX/PDF later. Otherwise, you can see blur on a large enough scale.
+
+
+Links:
+
+- <https://asilata.github.io/ggm/2021/>
+- <https://github.com/asilata/emacsconf2021/>
+
+# Speaker information
+- Name pronunciation: /ˈəsɪʟət̪ɑ ˈbɑpəʈ/ UH-si-luh-tah BAH-putt
+- Pronouns: she/her
+- Homepage: <https://asilata.github.io>
+- Email: <mailto:asilata.bapat@anu.edu.au>
+
+[[!inline pages="internal(2021/captions/babel)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/babel-nav)" raw="yes"]]
diff --git a/2021/talks/bidi.md b/2021/talks/bidi.md
new file mode 100644
index 00000000..5669a817
--- /dev/null
+++ b/2021/talks/bidi.md
@@ -0,0 +1,195 @@
+[[!meta title="Perso-Arabic Input Methods And BIDI Aware Apps"]]
+[[!meta copyright="Copyright &copy; 2021 Mohsen BANAN"]]
+[[!inline pages="internal(2021/info/bidi-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Perso-Arabic Input Methods And BIDI Aware Apps
+Mohsen BANAN -- <mailto:emacs@mohsen.1.banan.byname.net> -- محسن بنان
+pronouns: he/him, pronunciation: MO-HH-SS-EN
+<http://mohsen.1.banan.byname.net>
+
+[[!inline pages="internal(2021/info/bidi-schedule)" raw="yes"]]
+
+## About The Video
+
+The video is a screen capture of a [reveal](https://revealjs.com) presentation
+prepared with Beamer XeLaTeX and [HaVeA](http://hevea.inria.fr). So, the
+[original reveal
+presentation](http://web.by-star.net/lcnt/PLPC/180063/current/pres/PLPC-180063-pres.html)
+allows you to click on links that you see in the video and also navigate through
+the slide. In html, it is also availble as a [Presenation-As-Article
+format](http://web.by-star.net/lcnt/PLPC/180063/current/presArt/PLPC-180063-presArt.html)
+which includes complete text of the audio. [The traditional beamer slides](
+http://web.by-star.net/lcnt/PLPC/180063/current/pres/PLPC-180063-pres.pdf) are
+also available. The Access Page for
+[PLPC-180063](http://www.by-star.net/PLPC/180063) points to all available forms
+and formats.
+
+## About This Presentation
+
+Emacs is a multilingual user environment. A true multilingual editor must
+support bidirectionality and shaping of characters. Perso-Arabic scripts require
+both of these features.
+
+Starting with Emacs 24, full native bidi
+(bidirectional) support became available. For
+many years prior to that Unicode support was
+available and by around year 2000, reasonable
+open-source shaping libraries were also available.
+
+With these in place at around 2012, I developed
+two Persian input methods for emacs. These input
+methods or variations of them can also be used for
+Arabic and other Perso-Arabic scripts.
+
+With all of these in place, Emacs has now become
+the ne plus ultra Libre-Halaal and Convivial usage
+environment for Perso-Arabic users.
+
+Since emacs comes loaded with everything (Gnus
+for email, Bbdb for address books, XeLaTeX modes
+for typesetting, org-mode for organization, spell
+checkers, completion systems, calendar, etc.), all basic
+computing and communication needs of Perso-Arabic
+users can be addressed in one place and
+cohesively.
+
+In this talk I will demonstrate what a wonderful
+environment that can be.
+
+My talk will be in two parts.
+
+In Part 1, I cover Persian input methods. With an emphasis on "Banan
+Multi-Character (Reverse) Transliteration Persian Input Method". The
+software is part of base emacs distribution. Full documentation is available
+at:
+
+
+ Persian Input Methods
+ For Emacs And More Broadly Speaking
+ شیوه‌هایِ درج به فارسی‌
+<http://mohsen.1.banan.byname.net/PLPC/120036>
+
+In Part 2, I'll demonstrate that Emacs is far more than an editor. Emacs can be
+a complete Perso-Arabic usage environment. I will also cover the ramifications
+of bidi on existing emacs applications, including:
+
+- Spell Checking, Dictionaries And Completion Frameworks:
+ - Existing emacs facilities can be extended to cover Perso-Arabic.
+
+- Gnus:
+ - Perso-Arabic rich email sending in HTML.
+ - Ramifications of bidi on from:, to: and subject: lines.
+
+- Bbdb: Ramifications of bidi on display and completion.
+
+- Calendar:
+ - Ramifications of bidi on display.
+ - Use of Persian text for Persian (solar) calendar.
+ - Use of Arabic text for Muslim (lunar) calendar.
+
+- AUCTeX: Persian typesetting with XeLaTeX
+ - Option of having right-to-left Perso-Arabic aliases for all latex commands.
+
+# References:
+
+## Persian Input Methods:
+<http://mohsen.1.banan.byname.net/PLPC/120036>
+<http://www.persoarabic.org/PLPC/120036> -- Persian Input Methods Access Page
+<http://www.persoarabic.org> -- Various Perso-Arabic resources
+<http://www.freeprotocols.org/Repub/fpf-isiri-6219> -- Re-Publication Of
+ Persian Information Interchange and Display Mechanism, using Unicode
+<https://github.com/bx-blee/persian-input-method> -- Git repo for
+ persian.el -- Quail package for inputting Persian/Farsi keyboards
+
+## BIDI:
+<http://www.unicode.org/reports/tr9/> -- Annex #9 of the Unicode standard
+<https://www.gnu.org/software/emacs/manual/html_node/elisp/Bidirectional-Display.html>
+ Emacs Bidirectional Display
+<http://www.persoarabic.org/answers>
+ Paragraph Directionality Results Into Serious Communication Problems
+
+## Blee and Persian-Blee:
+<https://github.com/bx-blee/env2> -- Very messy work-in-progress git repo for:
+ Blee: By* Libre-Halaal Emacs Environment
+<http://www.by-star.net> -- A Moral Alternative To The Proprietary American Digital Ecosystem
+<http://mohsen.1.banan.byname.net/PLPC/120033> --
+ Nature of Polyexistentials:
+ Basis for Abolishment of The Western Intellectual Property Rights Regime
+<http://mohsen.1.banan.byname.net/PLPC/120039> -- Defining The Libre-Halaal Label
+
+## Mohsen BANAN -- محسن بنان:
+<http://mohsen.1.banan.byname.net/> -- Globish
+<http://mohsen.1.banan.byname.net/persian> -- Farsi
+<http://mohsen.1.banan.byname.net/french> -- French
+
+# Discussion
+
+Pad:
+
+- Q1: is there any additions that you have to add to emacs for using
+ non-English/latin characters or does it work mostly out of the box? 
+ - A: [Prot] :  I only set the default-input-method to "greek".
+ Then switch to it with C- (toggle-input-method)
+- Q2: One stuggle I have with this input method option is, why not use
+ an IME that's installed on the host OS?
+ - A:I live inside Emacs, and that the host OS typically provides
+ an unintelligent keyboard, and Farsi and transliterate BANAN
+ provides multi-character input, which is a lot more powerful.
+- Q3: Do you write any lisp or other code/markup with these scripts?
+ (Sorry if I missed you mentioning this.)
+ - A:No, everything is in pure Elisp.
+- Q4: What alternatives have you looked into for solving the problem
+ related to your markup language idea? What isn't achieved by them?
+ - A:The way that Emacs has evovled about properties about string
+ and text. And I suggest we adopt the "web" model for Emacs
+ application development. If you step back and look at where we
+ are, there's no such thing as no 'emacs native markup language
+ mode' similar to HTML for web.  Emacs's display engine is
+ capable of doing everything, but we're not exposing ....
+ (sorry, missed this part)
+ - Makes sense to me, thanks!
+- Q5: bandali: genenrally curious about the state of writing/reading
+ Persian in the TTY
+- Q6: Does your input method also solves problems with exporting
+ doctuments ? usually when  you exporting a Persian-Enlight doc it
+ redirects the Persian scripts to LTR
+
+Questions/comments:
+
+- Thanks for giving such a nice presentation of the Emacs input method framework! I'm just curious about if you've made any plans for setting up your markup language? I know you said you hadn't written any code for it yet.
+- That makes sense. Do you think you could use org more exclusively, and just add portions to implement your idea? As-in, there's nothing within org mode that would need to be fundamentally changed, correct?
+- I wonder about that. Org doesn't quite support all the expressivness that you see in some buffers/modes.
+- I agree. Finding a way to reach a happy medium without having to go "full elisp" would be quite powerful.
+- Potentially the tui.el system mentioned earlier in the conference could mix will with your idea as well.
+- I have one last, quick question. If you've used a version of Emacs 28, how have you found the new feature of doing a quick switch into a different IME? I know John Wiegly mentioned it in his talk earlier.
+- Does OS-level stuff work when you have to change character direction on the same line, like LtR numbers in a RtL script?
+
+Feedback:
+
+- This is great. I've done a demo like this for a few friends in the past as well.
+- Whoever did the captions for this was spot on, the unicode characters would be challenging.
+- I just love the Emacs input method framework, and I don't think a lot of latin script users know about it.
+- This is really cool, it's something that I never think about from other users in other countries using Emacs.
+- The captions for this conference have has an impressive amount of work put into them.
+- omg! this is great. farsi 101 in emacs
+- ++ to all that stuff. Great job on the captions, and the demonstrated functionality is very impressive.
+- Yay for the captions!
+- This has been really slick. Kudos for the captions including the Farsi characters and latin text.
+- At first, I thought the captions would be unnecessary, but over time, understanding the accents for various individuals has been challenging, so the captions helped.
+- One struggle I have with this input method option is, why not use an IME that's installed on the host OS? I mean, I do that with Japanese, but that may no longer work easily with qubes, so maybe it's more of a thing that'd benefit me now.
+ - though, I'm thinking that certain input methods don't actually simulate key-presses on virtual keyboards ... ?
+ - Not a primary reason, but since I'm used to configuring Emacs, I've found it a lot easier to learn to configure the integrated IMF than to configure an external one.
+ - I used SCIM/uim for japanese input at one put, but that was before I used emacs, it was a nightmare to set up
+- I may have to try this, the IMEs I've used haven't been an issue too much in the past, but...maybe this would be better, at least I wouldn't have to worry about config on each qube.
+- Banan's work on BIDI support is an eye-opener...
+- yeah absolutely. it's a really great point that Emacs can always be expanded to be more inclusive to other languages in ways that are more than just Unicode related.
+- bidi destorying irssi, time to find a good emacs irc client ...
+- thanks for the talk...another example how Emacs is inclusive catering for all forms of text.
+- Lots to think about. Thanks for the talk and inspiration!
+- Awesome. Thanks again for such a great talk and a great q&amp;a!
+
+[[!inline pages="internal(2021/captions/bidi)" raw="yes"]]
+[[!inline pages="internal(2021/info/bidi-nav)" raw="yes"]]
diff --git a/2021/talks/bindat.md b/2021/talks/bindat.md
new file mode 100644
index 00000000..e9cfffaa
--- /dev/null
+++ b/2021/talks/bindat.md
@@ -0,0 +1,83 @@
+[[!meta title="Turbo Bindat"]]
+[[!meta copyright="Copyright &copy; 2021 Stefan Monnier"]]
+[[!inline pages="internal(2021/info/bindat-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Turbo Bindat
+Stefan Monnier
+
+[[!inline pages="internal(2021/info/bindat-schedule)" raw="yes"]]
+
+
+# Table of Contents
+
+
+
+Bindat is an ELisp library to help manipulate binary data. This is a
+niche library that is used by packages such as Websocket, EMMS, and
+cpio-mode. Its implementation was repeatedly caught harassing hapless
+kitten while at the same time providing poor service slowly. For
+Emacs-28, Bindat was rewritten so as to make it more efficient and
+flexible while respecting the kitten. In this presentation I intent to
+show how we saved those. Not recommended for birds.
+
+# Discussion
+
+- Q1: bindat seems very similar to GNU Poke (except that GNU Poke is a
+ superset, and then some, with a different syntax). I'm wondering if
+ it might be good to add a bindat variant that translates to/from
+ Poke if need be (using libpoke), for sheer insane blazing
+ native-code JITted speed. (And, later, maybe letting bindat gain
+ some of the insanely expressive capabilities GNU Poke has got). Its
+ use of eval blocked this in times past. but now...
+ - A:GNU Poke is indeed the natural evolution, and is much more
+ powerful.  Given the fairly little use of BinDat so far, I'm
+ not sure there will be enough motivation to give access to GNU
+ Poke from Emacs, tho.  One of the main benefits of using GNU
+ Poke would probably be that lots of formats are already
+ available for GNU Poke, so you could directly re-use them.
+- Q2: Is your dog's name something Lisp or PL related...? :)
+ - A:Winnie?  I don't think so, no (we didn't choose the name, in
+ any case)
+- Q3: This looks amazing!  Is it merged into mainline Emacs, a patch,
+ an external library?
+ - A: It's in Emacs-28
+- Q4: Are there benchmarks of this vs. the older bindat?
+ - A:There is a benchmark for it in the `elisp-benchmarks`
+- Q5: Do you know of any CL or Scheme libs similar to bindat.el?
+ - A: No, but I'd be interested to hear about it if someone else
+ does.
+- Q7:  You are a hero of kittens everywhere.  Do you have any feline
+ pets as well?  :)
+ - A: Not yet.  If you're near Montreal and you have a kitten for
+ me, I'm interested
+- I *hope* cl-loop is more efficient than building a bunch of intermediate lists when you chain map/filter/reduce operations.
+- Curious: how is gnu poke more flexible?
+- What hobbies/interests do you have besides Emacs (and PL)? :)
+- do you have any thoughts about how to make EmacsConf even better next year?
+- I was surprised to see that a whole new DSL was developed for poke from scratch. Do you think would have been better to develop/improve a library like bindat on top of an existing language instead?
+- What are some of your favorite talks from this conf so far?
+- what kind of dog is Winnie?
+ - comment: I hadn't heard of that breed before
+- How do you see more control over types (type hints/decl through type specifiers etc) (SBCL like programming model) coming into Elisp?
+- Do you plan to add bit-level support?
+
+Other comments:
+
+- I can imagine using bindat to improve Emacs's music player packages
+- yes last year the Q&A periods were much longer
+ - last year some of the presentations were live though
+- I've asked this question to them during LPC 2020 but infact haven't got a very satisfactory answer :)
+- If you ever write a library for window management in Emacs, you could call it winnie.el :)
+- hints in unoptimized code should be assertions
+- we probably need both ways of compiling: safe and less safe :)
+- I think this is classic problem that is almost impossible to accomplish. many libraries try to do that but in the end the only working ones are relaying on C compilers.
+- also you have the problem of size of objects. like how big is a long? this is not specified and is arch dependent
+- parsing a generic .h file is way more difficult but is another subject.
+- yep, the automatic translation is more for libraries trying to write automatically C bindings
+
+[[!inline pages="internal(2021/captions/bindat)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/bindat-nav)" raw="yes"]]
diff --git a/2021/talks/borg.md b/2021/talks/borg.md
new file mode 100644
index 00000000..159e93a0
--- /dev/null
+++ b/2021/talks/borg.md
@@ -0,0 +1,34 @@
+[[!meta title="Manual Package Management in The Era of Repositories - Why and How"]]
+[[!meta copyright="Copyright &copy; 2021 Dhavan (codingquark)"]]
+[[!inline pages="internal(2021/info/borg-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Manual Package Management in The Era of Repositories - Why and How
+Dhavan (codingquark)
+
+[[!inline pages="internal(2021/info/borg-schedule)" raw="yes"]]
+
+Emacs now has many package repositories - enought to have conflicts
+and arguments about. The packages are becoming big, they depend on many
+other packages and it is not easy to keep track of what all is being
+installed in our Emacsen. An aggressive way out of this is to use Yet
+Another Package and install all elisp code manually - with borg[1].
+
+[1]: <https://github.com/emacscollective/borg>
+
+
+
+# Outline
+
+- 5-10 minutes: (brief description/outline)
+ 1. What are we trying to solve?
+ 2. What is borg?
+ 3. How to use it?
+ 4. Assimilate a package for demo
+
+
+[[!inline pages="internal(2021/captions/borg)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/borg-nav)" raw="yes"]]
diff --git a/2021/talks/bug.md b/2021/talks/bug.md
new file mode 100644
index 00000000..7a2279dc
--- /dev/null
+++ b/2021/talks/bug.md
@@ -0,0 +1,23 @@
+[[!meta title="Let's talk about bug trackers"]]
+[[!meta copyright="Copyright &copy; 2021 Bastien Guerry"]]
+[[!inline pages="internal(2021/info/bug-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Let's talk about bug trackers
+Bastien Guerry
+
+[[!inline pages="internal(2021/info/bug-schedule)" raw="yes"]]
+
+For 17 years, the Org developers didn't use a bug tracker,
+shamelessly failing the Joel Spolsky test. Why was it "good enough"?
+Why was it wrong? Why did we move to Woof!? Why Woof! is not a bug
+tracker?
+
+- 20 minutes
+
+
+[[!inline pages="internal(2021/captions/bug)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/bug-nav)" raw="yes"]]
diff --git a/2021/talks/build.md b/2021/talks/build.md
new file mode 100644
index 00000000..c8edc0d8
--- /dev/null
+++ b/2021/talks/build.md
@@ -0,0 +1,72 @@
+[[!meta title="How to build an Emacs"]]
+[[!meta copyright="Copyright &copy; 2021 Fermin MF"]]
+[[!inline pages="internal(2021/info/build-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# How to build an Emacs
+Fermin MF
+
+[[!inline pages="internal(2021/info/build-schedule)" raw="yes"]]
+
+[[!template id="help"
+summary="main talk does not have captions"
+volunteer="João Pedro"
+tags="help_with_main_captions"
+message="""This talk does not have captions yet. Would you like to help [caption this talk](/2021/contribute/#edit-captions)? You may be able to start with these
+[autogenerated captions](https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.vtt)
+and [timing information](https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf.en.srv2)."""]]
+
+This is a deep dive in the Emacs philosophical and technical
+aspect on what makes our beloved GNU Emacs
+what it it. It's also a talk about the early LISP machines and
+fascinating were those days of experimentation and engineering.
+
+It will continue with the Emacs benefits/trade-offs from an
+user/developer stand points, what things can be improved and
+what can be an hypothetical path on how to build a software that
+can also be called Emacs.
+
+As a last part, I'll talk about CEDAR, an Emacs that I've been
+developing in Common Lisp, the project goals
+and the challenges.
+
+For more details about CEDAR: <https://gitlab.com/sasanidas/cedar>
+
+# Discussion
+
+Pad:
+
+- Q1: Which level of compatibility with GNU Emacs do you want to achieve?
+ - A: I want to achieve 100% compatibility (when possible)
+- Q2: Are you then planning to reimplment all Emacs C primitives?
+ - A:No, the underlayer would be different
+- Q3: Do you plan on doing something to ease interaction between redundant "components" in both Elisp and Common Lisp (like CLOS and EIEIO)? How about semantic differences between both?
+ - A: (Probably answered by voice.)
+- Q4: Have you used Nyxt, which is Emacs-like and written in Common Lisp? If so, what did you think about it?
+ - A: I think it's a great project and I would like to use it as a my main Browse (with the firefox extension layer)
+- Q5: "Emacs is a great operating system, just lacking a good editor." How do you feel about the push to use Emacs as a full computing interface, and do you think Cedar could thrive in some of the fully common lisp system ideas that might catch on (like Robert Strandh's proposed CLOSOS)?
+ - A: I think CEDAR can achieve more integration with the OS (the same as the CL implementations) but I think the goal of been a good Emacs is good enought
+
+IRC nick: akrl
+
+- I think the performance stuff is mostly orthogonal to elisp. ex. very large files or files with really long lines grind horribly.
+- agreed, it's typically the massive amount of code that needs to interact with eachother that causes the slowdown but Emacs Lisp itself seems fairly performant.
+- there is a WIP CL implementation written called SICL :)
+ - akrl: yes but is bootstrapped from SBCL, so... :)
+- I know of three or four other attempts to write CL Emacsen. All long dead...
+- fundamentally there are not very many CL developers: there are probably many more elisp developers by now. C (and C++, and Java, and heck probably F# and Rust) have way more developers, so will always be more likely to gain enough momentum to not just die
+- the fashionable languages have lots of users but tend to fade away, CL is undead for ages... I would help in a CL implementation
+- I think everyone should write their own editor at some point. It's a very good learning experience.
+ - Alan Kay says a similar thing about writing your own operating system
+ - With Emacs you get both! :-)
+- I would love to see '#_' reader macro in Elisp for comments. core.async port and maybe, immutable collection (but that one is too much to ask)
+- isn't that what Xi-editor tried to build on?
+ - it's definitely what xray tried to build on
+- akrl: I'm extremely skeptical on the feasibility of reaching 100% compatibility :) (with an approachable effort)
+
+
+[[!inline pages="internal(2021/captions/build)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/build-nav)" raw="yes"]]
diff --git a/2021/talks/clede.md b/2021/talks/clede.md
new file mode 100644
index 00000000..59bb10f6
--- /dev/null
+++ b/2021/talks/clede.md
@@ -0,0 +1,43 @@
+[[!meta title="CLEDE the Common Lisp Emacs Development Environment."]]
+[[!meta copyright="Copyright &copy; 2021 Fermin MF"]]
+[[!inline pages="internal(2021/info/clede-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# CLEDE the Common Lisp Emacs Development Environment
+Fermin MF
+
+[[!inline pages="internal(2021/info/clede-schedule)" raw="yes"]]
+
+I've been developing a package that helps with the development of
+Common Lisp's software,
+it's uses the internal semantic framework, it has a custom reader
+and integration for
+common Emacs packages (like Sly and the internal inferior-lisp-mode).
+
+The idea is to supply features that other language with and static
+analyzer have,
+like refactoring and code generation.
+
+For more details: <https://gitlab.com/sasanidas/clede>
+
+- 20 minutes:
+ It seems like not too much people knows about semantic, so I can
+ summarize some of it in 10 minutes
+ and then An explanation on how to use the package, how to extend it
+ and the future of it.
+
+# Discussion
+
+Pad:
+
+- Q1: You mentioned clede-start - is there also some kind of clede-stop? (I often get frustrated with functionality that I cannot disable / revert)
+ - A: There is no stop, you should never stop doing common lisp :)
+- Q2: Is writing common lisp a big context switch between elisp?
+ - A: In some regards, it is, Ithink even more when you work Common Lisp professionally.
+
+
+[[!inline pages="internal(2021/captions/clede)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/clede-nav)" raw="yes"]]
diff --git a/2021/talks/cs.md b/2021/talks/cs.md
new file mode 100644
index 00000000..0b1fb3ad
--- /dev/null
+++ b/2021/talks/cs.md
@@ -0,0 +1,84 @@
+[[!meta title="One effective CS grad student workflow"]]
+[[!meta copyright="Copyright &copy; 2021 Greg Coladonato"]]
+[[!inline pages="internal(2021/info/cs-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# One effective CS grad student workflow
+Greg Coladonato
+
+[[!taglink CategoryOrgMode]]
+
+[[!inline pages="internal(2021/info/cs-schedule)" raw="yes"]]
+
+When I was an undergrad, I learned many things, most of
+which I forgot. In the time since then, I've discovered Org Mode, Org
+Roam, Org Noter, Org Ref. PDF Tools, and Anki. I would like to share
+my approach for capturing all the information that comes my way as a
+MS CS student at Georgia Tech, in the hopes that I can both get
+feedback on ways to improve the system I use, as well as hopefully
+inspire others to build workflows that make them more productive.
+
+# Discussion
+
+IRC nick: gcoladon
+
+Pad:
+
+- Q1: Can org-roam also be used with EPUB files? It would be nice to
+ make notes for books as well.
+ - A: Interesting question -- I've never considered doing it that
+ way. When there is a textbook I want to take notes on, I find
+ the PDF for the textbook and split it into one PDF file per
+ section or chapter, and then use those PDFs just like any other
+ PDFs. What do you like about EPUB files?
+- Q2: How does pdf-tools not being maintained as it used to affect
+ you. Since emacs have replaced image magic library and pdf-tools is
+ dependent on it how are you going to transition your work flow?
+ - A: Hmm I have not considered this at all. Is there some time in
+ the near future at which pdf-tools will stop working on the
+ current version of Emacs? I was not aware of that if that's the
+ case. Thanks for bringing that to my attention!
+- Q3: Your workflow is very impressive.  Would it be possible that you
+ share your emacs configuration files? (via email)
+ - A: Yes, I will work on collecting up the bits of elisp that make
+ up that configuration and share it , probably via Github gist. 
+
+BBB:
+
+- I'm trying to develop one, but haven't spent enough time on it. (My interests are mostly related to programming language standards and history, and the PDFs are generally enormous and inscrutable.)
+- have you ever considered org-ref for references? I think you used org-capture on the talk. Sorry If I am mistaken.
+ - gcoladon: I honestly don't know how one should use org-ref for references -- my references go into a bib file. And I use the org-ref convenience functions, but don't really know if I'm doing it right
+ - It sounds like others do love it
+- I don't use org-roam; I'm using zetteldeft. Haven't made the leap to roam, as it seemed more of a real leap of faith that it would work and not change too much.
+- Yes IIRC the heading property points to the PDF
+- Thank you for you talk. So far, I've only used org-roam as a simple knowledge-base. I would love to replicate what you showcased. Organized notes associated with pdf docs that you then generate Anki cards with. Awesome stuff.
+- If you have further links or tips on how you arrived at your current setup. A link to your emacs config??
+- Semi-related: M-l can downcase the next word quickly.
+
+IRC:
+
+- gcoladon: Yes it was software called ThoughtManager which ran on my Palm Treo 680
+- a similar workflow for videos using timestamps would be quite interesting
+- this is a sweet script, surely it should be possible to write in elisp though...
+- i know there exists the anki-editor package that works pretty well
+ - gcoladon: Yeah I am going to explore anki-editor sometime. It would be much better than my sed script :)
+- how to get started? this is a great workflow
+ - gcoladon: not sure how to help people get started with this workflow, but I am happy to work on such a thing
+- This is a workflow I really do like. Well done!
+- interesting on the custom id approach, I stick a timestamp on nearly every heading that I create, but I never thought to make it a custom id
+- gcoladon: I haven't tried to make my config sharable yet
+
+# Outline
+
+- 5-10 minutes: Go through some typical workflows associated with being a grad student, using the packages mentioned in the abstract.
+
+# Personal information
+
+- Name pronunciation: the syllables of my last name should be easy enough to pronounce for English speakers; the accentuation is colado-NA-to
+- Preferred contact info: gmail account gcoladon
+
+[[!inline pages="internal(2021/captions/cs)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/cs-nav)" raw="yes"]]
diff --git a/2021/talks/dashboard.md b/2021/talks/dashboard.md
new file mode 100644
index 00000000..53572fff
--- /dev/null
+++ b/2021/talks/dashboard.md
@@ -0,0 +1,213 @@
+[[!meta title="Productivity Dashboards with Emacs and Kindle"]]
+[[!meta copyright="Copyright &copy; 2021 Mehmet Tekman"]]
+[[!inline pages="internal(2021/info/dashboard-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Productivity Dashboards with Emacs and Kindle
+Mehmet Tekman
+
+
+
+[[!inline pages="internal(2021/info/dashboard-schedule)" raw="yes"]]
+
+[[!table header="no" class="speaker-details" data="""
+Name pronunciation: | Meh-met Teck-man
+Pronouns: | He/him
+Preferred contact info: | @mtekman:matrix.org
+Support: | <https://liberapay.com/mtekman/donate>
+"""]]
+
+<https://gitlab.com/mtekman/kindle-sync>
+
+Since 2008, Amazon have released a new Kindle device every year,
+supplanting each generation with a newer model that boasts highly
+promoted incremental features which greatly devalues the price of
+their older models. These forgotten models are sold on Ebay and
+other secondhand websites at highly discount prices by owners who
+do not see the true potential of these devices: Kindles are
+excellent high contrast low-refresh display rate E-Ink devices,
+with Wifi capability, that run embedded Linux in the
+background. Depending on the model, an idle Kindle can last weeks
+before needing a recharge. This makes them ideal as passive image
+devices that can be configured easily using a few shell
+scripts. Indeed, efforts have been made in dedicated hacker forums
+to expose the Linux filesystem and to enable features such as
+custom screensavers, SSH networking, and more. By exploiting these
+features, and by carefully disabling the software/bloatware that
+comes with the device, these Kindles have found new life as online
+dashboard devices which can fetch and display information from the
+internet at timely intervals.
+
+Here we describe a tool to control multiple Kindle devices with a
+single org-mode/shell-based tool, built initially to periodically
+serve updated Emacs Org-Agenda views, but later expanded to produce
+online local weather reports and work calendar, Emacs calendars
+(calfw, org-gcal), daily dietary information (org-calories),
+Org-Mode sparse TODO trees, miscellaneous image and text content
+(via imagemagick), small messages, and much more.
+
+In this talk, we show how to configure multiple Kindles with any
+desired custom content, following any daily/weekly schedule, all
+easily managed from Emacs within a single Org-Mode file.
+
+# Discussion
+
+- Q1: I know almost nothing about this stuff so please forgive my
+ ignorance (Actually, I did I dip a toe into some basic jail
+ breakage a few years ago and was delighted/intimidated to find a
+ capable community on mobilereads, as you mentioned; I was living
+ cheaply at the time, and having KUAL and KO and kterm around
+ improved my QOL considerably.) As for your talk, I enjoyed it very
+ much.  I was wondering if you'd given any thought to possible
+ real-world applications for your dashboards. Just spitballing a
+ bit, a few possibilities came to mind, like perhaps disseminating
+ information on a work floor or lab setting where cable runs or
+ temperature increases from LCD monitors might be unwelcome; or
+ perhaps doing so in more a public setting like a refugee or
+ detention camp where power might be limited and where mounting TVs
+ behind protective glass or restraining them with cables might be
+ bad for morale.  Also, have you thought about putting together
+ and/or selling "kits" so folks with limited time could acquire a
+ basic setup as a turnkey solution (perhaps with some assembly
+ required)? Thanks.
+- Hi. Lovely idea to use an ebook reader as dashboard. Are all kindle devices supported or only older ones?
+- Mehmet Tekman: I recorded this in two parts: with caffeine, and without
+- As soon as i can get my hands on a kindle i will give this a try. Lovely Idea.
+- Are the images only pushed or can i request for an update from the kindel itself?
+ - Mehmet Tekman: images are usually only pushed, but it's done over ssh so pulling is also possible. the main idea is that the interaction is only Server → Client
+- Thanks for you talk I have just finished watching it on youtube.
+- I have some old kobo's rather than kindle's but thinking of nipping onto ebay to get some
+ - Mehmet Tekman: I think it would work well Kobo's, since that's likely also a linux system right?
+ - yes they are linux
+ - Mehmet Tekman: There are only a few kindle-specific commands, but you can comment them out and adapt them for the Kobo
+ - there was some work getting kde onto them
+ - Mehmet Tekman: Woah you have access to an X11 session?
+ - i think the developers helped, but we are talking 7 years ago for the one they helped with
+ - Mehmet Tekman: it's not mainline then?
+ - I don't think so I still use them both for reading books so not messed with them just in case they break
+ - Mehmet Tekman: That's the beauty of the kindle, it's from such a horrible company and it's so cheap that you have no qualms if you break it :P
+ - Mehmet Tekman: The kindle basically locks you out of X, which is frustrating since the Kindle Touch runs AwesomeWM. If I had money, I would definitely buy one :O
+- The use concept is really useful, so thanks for pointing me in the right direction.
+- as someone who easily gets distracted it will be usefull to check on what I am supposed to be doing lol
+ - Mehmet Tekman: Welcome! For a more stripped down version I can really heavily recommend the kindle-dashboard from Pascal Widdershoven
+ - Mehmet Tekman: And yep -- I can definitely relate!
+
+Links:
+
+- Main Repo : <https://gitlab.com/mtekman/kindle-sync>
+- Mobile Read Forum (Kindle) :
+ <https://www.mobileread.com/forums/showthread.php?t=180113>
+- Mentioned Repos :
+ - <https://gitlab.com/mtekman/org-calories.el>
+ - <https://github.com/takaxp/org-tree-slide>
+ - <https://github.com/pascalw/kindle-dash>
+
+# Outline
+
+- 5-10 minutes:
+
+ 1-3 mins
+ Talk about repurposing Kindles:
+
+ - Cheap second-hand wifi device, hackable
+ - Low-powered, long battery life, low refresh rate &#x2013; perfect
+ for a dashboard
+ - Timely updated Org-Mode Agendas anyone?
+ - Reference to inspired projects (kindle-dashboard)
+
+ 2-3 mins
+ Generate content
+
+ - A static text+picture image easily generated with imagemagick
+ wrapper
+ - An image of a sparse tree of org-mode TODO file
+ - An image of another emacs view (e.g. Calfw, or org-calories)
+ - Show post-processing for optimizing image for Kindles
+
+ 1-2 mins
+ Configuration in a single org-mode file
+
+ - Defining Machines
+ - Defining Commands to generate content
+ - Defining Schedules to run Commands on multiple Machines at
+ specific points in the day
+
+ 1-2 mins
+ Export and Run:
+
+ - Show exported shell configs and generated cronjobs
+ - Witness multiple Kindles producing desired content with wakeup
+ timers
+
+<!--
+- 20 minutes:
+
+ 4 mins
+ Repurposing Kindles
+
+ - Cheap second-hand wifi device, hackable
+ - Low-powered, long battery life, low refresh rate &#x2013; perfect
+ for a dashboard!
+ - Reference to inspired projects (kindle-dashboard)
+ - Discuss Use Cases:
+ - Dynamic content: Org-Mode Agendas, Weather Reports, Web
+ Calendars
+ - Static content: Gallery, Motivational Messages
+ - Untapped potential
+
+ 3 mins
+ Generate content
+
+ - A static text+picture image easily generated with imagemagick
+ wrapper
+ - An image of a sparse tree of org-mode TODO file
+ - An image of another emacs view (e.g. Calfw, or org-calories)
+ - Show post-processing for optimizing image for Kindles
+
+ 4 mins
+ Configuration in a single org-mode file
+
+ - Defining Machines
+ - Defining Commands to generate content
+ - Types of commands
+ - Extending the commands with custom
+ - Defining Schedules to run Commands on multiple Machines at
+ specific points in the day
+
+ 6 mins
+ Export and Run:
+
+ - Show exported shell configs and generated cronjobs
+ - Scripts and Design Considerations:
+ - Killing services (to keep amazon out)
+ - Iptables blocking (to keep amazon out)
+ - What SSH keys are shared and where (to keep amazon out)
+ - How the Sleep and Wakeup timers work
+ - Optimizing for longer battery life
+ - Eips and X
+ - Minimizing service checks
+ - Graph of number of screen updates per drop in battery life
+ - View many Kindles simultaneously in action
+
+ 3 mins
+ Final Thoughts
+
+ - Limitations:
+ - Cannot interrupt a device's sleep, it wakes up only when you
+ last told it to
+ - Hard to see at night, invest in some LEDs maybe?
+ - Take back your devices!
+ - Name suggestions? "kindle-sync", "kindle-cluster",
+ - Something that won't be forced to change at a later date if
+ it becomes too notorious.
+ - Planned features
+ - Acknowledgments and Resources
+
+- 40 minutes: N/A
+-->
+
+[[!inline pages="internal(2021/captions/dashboard)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/dashboard-nav)" raw="yes"]]
diff --git a/2021/talks/day1-close.md b/2021/talks/day1-close.md
new file mode 100644
index 00000000..0425d237
--- /dev/null
+++ b/2021/talks/day1-close.md
@@ -0,0 +1,50 @@
+[[!meta title="Closing remarks day 1"]]
+[[!meta copyright="Copyright &copy; 2021 "]]
+[[!inline pages="internal(2021/info/day1-close-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Closing remarks day 1
+
+- Thanks for your patience with the technical issues!
+- Hey look, we got captions! And prerecs! =)
+- Prerecorded videos, transcripts, and other resources provided by the
+ speakers are already available on the talk pages.
+- Tomorrow we'll have a bit more time for Q&A, so we might have more
+ of those on the main stream.
+- Remember, there's a general-audience talk at the end of tomorrow's
+ program, so come and join us for M-x Forever by David Wilson of
+ SystemCrafters.
+
+[[!inline pages="internal(2021/info/day1-close-schedule)" raw="yes"]]
+
+# Discussion
+
+- Q1: To anyone who can answer this, what is a good method to request
+ speakers for next EmacsConf?
+ - A: Encourage the speaker directly when you see the next call for proposals.
+- Q3: Is there a way to donate to the volunteers of EmacsConf?
+ - A: sachac: That's very thoughtful of you! We cover EmacsConf costs out of pocket. I think the speakers have some support links on their pages. So if you particularly liked a talk, please feel free to e-mail a speaker or see if they have a tip jar!
+ - sachac: also, if you want to contribute time by volunteering to help with EmacsConf this year or next year, that would be even better =) For example, it was super-helpful to have a couple of volunteers help me caption all the day 1 talks and most of the day 2 talks this year, _and_ they got early access to all the talks and could caption the talks they wanted. We did the captioning using subed.el in Emacs, using the speakers' Org files or autogenerated captions from Youtube as starting points.
+ - sachac: for example, if some people could help with streaming alternate tracks, we could have longer talks and longer Q&As, because I think we're just going to have more and more awesome Emacs talks, and I think we're reaching the limit of how much we can physically squeeze into two days ;) so our current strategy is lots of short talks/demos, and then people can learn more about the stuff that they find interesting. but it would be so nice to have more deep dives too.
+ - I think having alternate tracks is a great idea sachac, I think I noticed that speakers were very rushed because time was tight, and it'd be cool to that have that alleviated. And it would likely reduce stress for you guys so that technical issues aren't as dire.
+ - maybe if we can figure out some topics that would be good to dive deeper into (attendee feedback) that could be looked in to
+- Q4: How can we sign up to volunteer for next year if there is need?
+ - A: <https://emacsconf.org/2021/contribute/> has some ideas and
+ an e-mail address you can reach us at.
+
+- Is there any documentation anywhere how to give financial support to EmacsConf?
+- maybe each presentation should allocated five or ten minutes for a Q&A session afterwards before the next presentation starts.
+- the subtitles are really good! you can tell it was human-written :) even nasty names are right
+- Love the citations in subtitles.
+
+(from devel talk)
+
+- do you have any thoughts about how to make EmacsConf even better next year?
+ - yes last year the Q&A periods were much longer
+ - last year some of the presentations were live though
+
+[[!inline pages="internal(2021/captions/day1-close)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/day1-close-nav)" raw="yes"]]
diff --git a/2021/talks/day1-open.md b/2021/talks/day1-open.md
new file mode 100644
index 00000000..47bc4a0b
--- /dev/null
+++ b/2021/talks/day1-open.md
@@ -0,0 +1,60 @@
+[[!meta title="Opening remarks"]]
+[[!meta copyright="Copyright &copy; 2021 "]]
+[[!inline pages="internal(2021/info/day1-open-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Opening remarks
+
+[[!inline pages="internal(2021/info/day1-open-schedule)" raw="yes"]]
+
+- Welcome to EmacsConf 2021
+- How to participate:
+ - Collecting questions, answers, and shared notes on Etherpad (https://etherpad.wikimedia.org/p/emacsconf-2021)
+ - You can also post questions and discuss things on #emacsconf on chat.emacsconf.org (frontend for libera.chat if you want to use your favorite IRC client)
+- Conduct guidelines:
+ - One of the neat things about Emacs is that there are so many ways to do things. Please remember to be nice! =)
+- What's new in this EmacsConf 2021
+ - Lots of talks! Shorter time, Q&A might be live/pad/IRC, might have alternate stream if needed
+ - Streaming with open captions thanks to volunteers - all the day 1 talks have been captioned, and we might get day 2 sorted out too
+ - Prerecorded videos will be published as soon as we can (aiming for publishing them as the talks stream, so you can easily catch up with any talks you've missed)
+ - APAC-time-friendly alternate stream by LibreAustralia folks <https://libreau.org/past.html#emacsconf21>
+- Thanks
+ - Speakers, volunteers
+ - Karl Voit for managing the pad
+ - Bhavin Gandhi and Hannah Miller for help with the captions
+ - Free Software Foundation, especially the FSF tech team, for their continued help and support
+ - LibrePlanet 2022 Call for Sessions open for a few more days; consider giving a talk! See <https://libreplanet.org/2022/> and <https://my.fsf.org/lp-call-for-sessions/>
+ - FSF's Fall 2021 fundraiser happening now! See <https://fsf.org/appeal> if you'd like to give :)
+ - Fosshost, for BigBlueButton server and for ftp-upload server
+ - Computer Science Club of the University of Waterloo, for continuing hosting the videos/files on the CSC mirror server
+ - Jan Prunk (yang), for EU mirror of EmacsConf videos/files: <https://de1.mirror.si/emacsconf/>
+ - Grant Shangreaux, for beautiful music :) (under CC BY-SA 4.0) <https://churls.world/basement-days/basement-days.html>
+ - Qiantan Hong (qhong), author/maintainer of crdt.el which we used for sharing Emacs buffers between organizers
+ - Wojciech Siewierski (vifon), for assisting zaeph with his scripts last minute
+ - Organizers
+ - Everyone
+- 09:12 Schedule overview
+ - Day 1 (general talks), Day 2 (development) - but come back for some general-audience talks at the end of day 2, including the closing talk on M-x Forever by David Wilson (System Crafters)
+ - Day 1
+ - Morning
+ - User stories
+ - Philosophy (including a talk by Prot)
+ - Configuration
+ - Demos of Emacs's flexibility
+ - Afternoon
+ - A peek behind the curtain at Emacs Development (janitor talk)
+ - Org Mode
+ - Workflows
+ - Tech
+ - Research
+ - External things
+ - Dev update
+ - On the design of text editors - Nicolas P. Rougier
+ - Even if you're not a developer, consider coming back for tomorrow's closing
+- APAC stream
+
+[[!inline pages="internal(2021/captions/day1-open)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/day1-open-nav)" raw="yes"]]
diff --git a/2021/talks/day2-close.md b/2021/talks/day2-close.md
new file mode 100644
index 00000000..00d459b9
--- /dev/null
+++ b/2021/talks/day2-close.md
@@ -0,0 +1,61 @@
+[[!meta title="Closing remarks day 2"]]
+[[!meta copyright="Copyright &copy; 2021 "]]
+[[!inline pages="internal(2021/info/day2-close-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# Closing remarks day 2
+
+[[!inline pages="internal(2021/info/day2-close-schedule)" raw="yes"]]
+
+- Prerecs have already been posted, yay! You can find them on the talk pages and at <https://media.emacsconf.org/2021/> (We'll figure out how to get the Q&As.)
+- Thanks to everyone who submitted talks to EmacsConf, including those
+ whose talks didn't make it into this year. We'll be
+ sharing more resources as they come in, so subscribe to <emacsconf-submit@gnu.org>
+- Next steps
+ - We'd love to hear what you liked and what we can improve.
+ Please share your conference feedback and ideas at the end of the
+ Etherpad under the heading "General discussion about EmacsConf 2021" <https://etherpad.wikimedia.org/p/emacsconf-2021> or
+ e-mail them to us at <emacsconf-submit@gnu.org>. If you would like
+ to keep your feedback semi-anonymous, you can e-mail it to either
+ <bandali@gnu.org> or <sacha@sachachua.com> and we'll keep your
+ name private when sharing the feedback with the other organizers.
+ - Post your questions/thoughts to the
+ <https://etherpad.wikimedia.org/p/emacsconf-2021> Etherpad or
+ email it to us at <emacsconf-submit@gnu.org> by Dec 10, and we'll
+ e-mail your question to the speakers for following up
+ - Subscribe to emacsconf-discuss for announcements <https://lists.gnu.org/mailman/listinfo/emacsconf-discuss>, like when additional captions or videos become available
+ - There were lots of talks! Feel free to rewatch, follow links, and learn more.
+ - If you want to help caption talks (4 left! also, the archive) or Q&A, or help with other tasks, see [[/2021/contribute.md]]
+ - Keep in touch with Emacs News <https://sachachua.com/emacs-news> - weekly updates
+ - Check out <https://www.emacswiki.org/emacs/Usergroups> to find a user group near you or online
+- Thanks again
+ - Speakers, volunteers
+ - Karl Voit for managing the pad
+ - Bhavin Gandhi and Hannah Miller for help with the captions
+ - Free Software Foundation, especially the FSF tech team, for their continued help and support
+ - LibrePlanet 2022 Call for Sessions open for a few more days; consider giving a talk! See <https://libreplanet.org/2022/> and <https://my.fsf.org/lp-call-for-sessions/>
+ - FSF's Fall 2021 fundraiser happening now! See <https://fsf.org/appeal> if you'd like to give :)
+ - Fosshost, for BigBlueButton server and for ftp-upload server
+ - Computer Science Club of the University of Waterloo, for continuing hosting the videos/files on the CSC mirror server
+ - Jan Prunk (yang), for EU mirror of EmacsConf videos/files: <https://de1.mirror.si/emacsconf/>
+ - Wojciech Siewierski (vifon), for assisting zaeph with his scripts last minute
+ - Grant Shangreaux, for beautiful music :) (under CC BY-SA 4.0) <https://churls.world/basement-days/basement-days.html>
+ - the developers and maintainers of all the things that made this possible, with a special shout-out to:
+ - Random User (rndusr), whose subed.el made it easy to caption these talks inside Emacs
+ - And Qiantan Hong (qhong), author/maintainer of crdt.el which we used for sharing Emacs buffers between organizers
+ - Organizers
+ - Everyone
+
+# Discussion
+
+- I really appreciate the approach of doing things prerecorded and having captions.
+- (please add a contact form for the website to make it easier for volunteers to sign up, sending an initial email can be psychologically intimidating.)
+ - i am willing to volunteer to think about /work on the form
+ - thanks! not sure if adding something like formspree would be counterproductive, but coming up with a list of ways to help out in an email takes a lot more energy than just adding your name and email to a list of potential volunteers.
+- we'll recommend opening the .webm directly as the main option
+- i managed to get a few people to watch my talk afterwards. letting them know it was only 10 minutes helped. non-emacs folks even :)
+
+[[!inline pages="internal(2021/captions/day2-close)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/day2-close-nav)" raw="yes"]]
diff --git a/2021/talks/day2-open.md b/2021/talks/day2-open.md
new file mode 100644
index 00000000..ff737f95
--- /dev/null
+++ b/2021/talks/day2-open.md
@@ -0,0 +1,20 @@
+[[!meta title="Opening remarks day 2"]]
+[[!meta copyright="Copyright &copy; 2021 "]]
+[[!inline pages="internal(2021/info/day2-open-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Opening remarks day 2
+
+[[!inline pages="internal(2021/info/day2-open-schedule)" raw="yes"]]
+
+- Welcome back!
+- Prerecs available for day 1 on the talk pages
+- Some of the talks for today have not yet been captioned, but we may follow up on them; if you want to help out, please volunteer
+- Dev day has a bit more space for questions, so we'll have that on the main stream and use the alternate stream to keep going
+- BBB room links will be posted to the talk pages and IRC so that you can join
+
+[[!inline pages="internal(2021/captions/day2-open)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/day2-open-nav)" raw="yes"]]
diff --git a/2021/talks/design.md b/2021/talks/design.md
new file mode 100644
index 00000000..84a89de9
--- /dev/null
+++ b/2021/talks/design.md
@@ -0,0 +1,115 @@
+[[!meta title="On the design of text editors"]]
+[[!meta copyright="Copyright &copy; 2021 Nicolas P. Rougier"]]
+[[!inline pages="internal(2021/info/design-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# On the design of text editors
+Nicolas P. Rougier
+
+
+
+[[!inline pages="internal(2021/info/design-schedule)" raw="yes"]]
+
+Text editors are written by and for developers. They come
+with a large set of default and implicit choices in terms of layout,
+typography, colorization and interaction that hardly change from one
+editor to the other. It is not clear if these implicit choices derive
+from the ignorance of alternatives or if they derive from developers'
+habits, reproducing what they are used to. Durint this talk, I will
+characterize these implicit choices and illustrate what are some
+alternatives using GNU Emacs.
+
+# Outline
+
+1. Review of a "modern" code editor (5mn)
+2. Introduction of an alternative using Emacs (5mn)
+
+# Links from the slides:
+
+* [Elegant Emacs](https://github.com/rougier/elegant-emacs) (https://github.com/rougier/elegant-emacs)
+* [On the Design of Text Editors](https://arxiv.org/abs/2008.06030) (https://arxiv.org/abs/2008.06030)
+* [N Λ N O Emacs](https://github.com/rougier/nano-emacs) (https://github.com/rougier/nano-emacs)
+* [svg-lib (ELPA)](https://elpa.gnu.org/packages/svg-lib.html) (https://elpa.gnu.org/packages/svg-lib.html)
+* [nano-theme (ELPA)](https://elpa.gnu.org/packages/nano-theme.html) (https://elpa.gnu.org/packages/nano-theme.html)
+* [nano-modeline (ELPA)](https://elpa.gnu.org/packages/nano-modeline.html) (https://elpa.gnu.org/packages/nano-modeline.html)
+* [nano-agenda (ELPA)](https://elpa.gnu.org/packages/nano-agenda.html) (https://elpa.gnu.org/packages/nano-agenda.html)
+
+# Discussion
+
+- Q1: Do you have any plans for somewhat scientific testing of colors,
+ layout, etc?
+ - A: There are already some studies on the usefulness of
+ colorization but they're not consistent. I would love to make a
+ study with some students but it's a bit beyond my expertise.
+- Q2: I have really enjoyed looking at the development of NANO emacs.
+ The only thing I slightly disagree with are the colours: on my
+ system some of them are extremely low-contrast and faded. Otherwise
+ the design is fantastic! Do you have any comments on the colour
+ scheme?
+ - A: I think you're right and I might need to revise the color
+ scheme, taking inspiration (or copying) some of the colors from
+ modus themes since Prot designed proper colors backed by
+ scientific theory.
+- Q3: Are your examples hand-selected from design-perspective or does
+ "everything" look good automatically with your setup?
+ - A: Screenshots I've shown are available on GitHub and you
+ should obtain the same if you install them. Some parts come from
+ my personal configuration (org-agenda and mu4e mostly) but I can
+ post the code if you're interested.
+- Q4: Should we use monocromatic colour schemes over full-coloured
+ ones?
+ - A: I'm not sure I can answer this question, I would need to
+ search if there are any recommendation on that matter.
+- Q5: Are there ways that emacs could be improved to make these kinds
+ of usability experiments easier and more accessible to users? For
+ example making it easier to switch between such experiments?
+ - A: <https://github.com/plexus/chemacs> is a perfect answer. It
+ allows you to switch from one configuration to another without
+ messing up your own.
+- Q6: Would it be possible to integrate nano emacs design to default
+ emacs design? What would the pushback be for integrating "better"
+ UI changes?
+ - A: I think Emacs would benefit from better defaults and I would
+ vote for modus themes to be the new default theme. Next would be
+ to package Emacs with a decent font (e.g. Julia Mono, Iosevka,
+ Inconsolata, Victor Mono) that would really help changing the
+ first impression of new users. Last would be to tweak a the
+ mode-line a bit.
+- Q7:Spellchecking now highlights the whole word, to me this is a bit
+ too emphasized. Are there plans to make these less intrusive; i.e.
+ underline or similar? (And no, no bright red crinkles ;)
+ - A: Good point, can you open an issuer on GitHub?
+
+- What's this theme?
+- i'll be sharing this with my friends that praise on vscode
+- Wow, incredible analysis of that editor.
+- looks beautiful
+- how much of that is just bigger margins and roboto though?
+- I love nano Emacs. I use it too
+- i wonder if I can steal the splash screen and header line
+- I really think that the default emacs theme could use this kind of effort and scrutiny in order to improve it
+- A4: good idea, but few people have A4 *screens*...
+- holy crap it looks so good
+- yet again, though, the contrast is awful! black and white, please, not light grey and not-quite-so-light grey. it's almost unreadable, IMHO
+- How hard would it be to integrate nano emacs changes with the default emacs? Like, would there be a lot of pushback?
+ - of course! there was massive pushbac over using curly quotes, for goodness' sake
+- Are you aware of the modus-themes and what are your thoughts after contrast and accessibility?
+ - yeah, i just love modus themes by Prot because i'm colorblind and the fact that it has a strict contrast ratio is really really helpful, but even on modus themes i have to set success, error and warning to some really strong colors like pure red, green and blue
+ - I'm *not* colourblind and having high contrast is still good! there's a reason books are black on white, not grey on grey. or at least the background and body-text foreground must be highly distinct
+ - protesilaos: there are also options for deuteranopia, in case you need them (will need to refactor them for simplicity's sake)
+- What Nicolas Rougier does is most welcome. Emacs can benefit a lot from such work.
+- hmmm maybe Emacs needs to be able to handle WOFF! sounds like a job for fontconfig, I might look at it some day
+- Nano Emacs + modus-themes would be a perfect combination, as it were.
+
+- From [YouTube](www.youtube.com/watch?v=7OTe26RZH9A&feature=em-comments): Great efforts & I'm rooting for you! but you might consider rebranding, because of the GNU nano text editor (22 years of recognition)
+
+# Contact information
+* Contact [nicolas.rougier@inria.fr](mailto:nicolas.rougier@inria.fr)
+* Follow my work at [github.com/rougier](https://github.com/rougier)
+* Support my work at [github.com/sponsors/rougier](https://github.com/sponsors/rougier) or [en.liberapay.com/rougier/](https://en.liberapay.com/rougier/)
+
+[[!inline pages="internal(2021/captions/design)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/design-nav)" raw="yes"]]
diff --git a/2021/talks/dev-update.md b/2021/talks/dev-update.md
new file mode 100644
index 00000000..a3467171
--- /dev/null
+++ b/2021/talks/dev-update.md
@@ -0,0 +1,29 @@
+[[!meta title="Emacs development updates"]]
+[[!meta copyright="Copyright &copy; 2021 John Wiegley"]]
+[[!inline pages="internal(2021/info/dev-update-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs development updates
+John Wiegley
+
+[[!inline pages="internal(2021/info/dev-update-schedule)" raw="yes"]]
+
+# Discussion
+
+- the real question: do we still have time to get our patches in to the 28 branch ^_^
+- So I assume a lot of distros will make those native-comp related packages some sort of dependency, right?
+ - the conversations I have seen among the distro maintainers seems to suggest that at least some of them will bundle the .eln files
+ - What about ELPAs?
+ - if a distro packages elisp files they would, but for ELPA even the .elc files aren't stored (iirc?), so those would be compiled asynchrously
+- That's great so that I'm not using weird commands on incompatible modes
+- Yes yes yes, the input mode update sounds incredible. I already hack that in my init.el, but I guess it'll be native.
+- thank you so much for the great work on Emacs!
+- why would emoji support be important in any way.. for anybody? Especially.. in the larger scheme of things or more important problems? Am i missing something?
+ - Unicode compatibility's always a good thing
+- so you have to have a toolchain present even if you are only using precompiled .eln files
+
+[[!inline pages="internal(2021/captions/dev-update)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/dev-update-nav)" raw="yes"]]
diff --git a/2021/talks/devel.md b/2021/talks/devel.md
new file mode 100644
index 00000000..3cb9412a
--- /dev/null
+++ b/2021/talks/devel.md
@@ -0,0 +1,60 @@
+[[!meta title="Don't write that package! or: How I learned to stop worrying and love emacs-devel"]]
+[[!meta copyright="Copyright &copy; 2021 Stefan Kangas"]]
+[[!inline pages="internal(2021/info/devel-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Don't write that package! or: How I learned to stop worrying and love emacs-devel
+Stefan Kangas
+
+[[!inline pages="internal(2021/info/devel-schedule)" raw="yes"]]
+
+We need a successful Emacs on this planet. This means that we need an
+excellent out-of-the-box experience -- one that just works, but that you
+can still hack and customize. There is so much great experimentation
+and work going on out there in the wider Emacs community, but we would
+be even better off if more of that could go into Emacs itself.
+
+Emacs' greatest strength is unfortunately sometimes also its greatest
+weakness: it is *too* hackable.
+
+On occasion, people out there add stuff to their Init file to fix this
+or that annoyance, or even bug. The more ambitious might go on to
+package up such fixes: "Hey, 'foo-mode' doesn't have support for
+'bookmark-set', let's write a package!" I am here to suggest that you
+should not do that.
+
+You should submit a patch to Emacs! Maybe more people have that same
+problem or annoyance, and would benefit from your solution?
+
+It is sometimes perceived as hard to contribute to Emacs core. I want
+to encourage more people to get involved, and show that the barrier to
+entry is really not that high. If I can do it, you can do it too!
+
+So should you really write that package, or should you stop worrying and
+learn to love emacs-devel? Listen to my talk to find out more!
+
+# Discussion
+
+- I can imagine using bindat to improve Emacs's music player packages e.g. reading/writing metadata tags
+- I hadn't heard of Poke until today
+- Curious: how is gnu poke more flexible?
+- I was surprised to see that a whole new DSL was developed for poke from scratch.
+- I'll ask what I also asked Andrea earlier: What hobbies/interests do you have besides Emacs (and PL)? :)
+- Do you think would have been better to develop/improve a library like bindat on top of an existing language instead?
+- What are some of your favorite talks from this conf so far?
+- If you ever write a library for window management in Emacs, you could call it winnie.el :)
+- How do you see more control over types (type hints/decl through type specifiers etc) (SBCL like programming model) coming into Elisp?
+- Do you plan to add bit-level support?
+- I think this is classic problem that is almost impossible to accomplish
+ - many libraries try to do that but in the end the only working ones are relaying on C compilers
+- also you have the problem of size of objects
+- like how big is a long?
+- this is not specified and is arch dependent
+- parsing a generic .h file is way more difficult
+- yep, the automatic translation is more for libraries trying to write automatically C bindings
+
+[[!inline pages="internal(2021/captions/devel)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/devel-nav)" raw="yes"]]
diff --git a/2021/talks/dsl.md b/2021/talks/dsl.md
new file mode 100644
index 00000000..a2a952dd
--- /dev/null
+++ b/2021/talks/dsl.md
@@ -0,0 +1,49 @@
+[[!meta title="Self-Describing Smart DSL's: The Next Magits"]]
+[[!meta copyright="Copyright &copy; 2021 Psionic"]]
+[[!inline pages="internal(2021/info/dsl-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Self-Describing Smart DSL's: The Next Magits
+Psionic
+
+[[!inline pages="internal(2021/info/dsl-schedule)" raw="yes"]]
+
+When we begin programming, the promise is to automate away repetitive
+tasks in life. As those program's capability grows, we begin to need
+configuration UI's. We can start with a CLI, but as any CLI grows, we
+run into the following issues:
+
+- As options pile up, the intuition of simplicity is lost in helps and
+manpages
+
+- Stateless operation has no idea what to do next and loses terseness
+- Frequent dispatch of commands to interrogate state required for the
+operator to decide what action to perform
+
+- Composition compounds with all of these issues
+
+Magit has the UI trifecta of being terse, intuitive, and intelligent.
+Magit's UI input library, Transient, is a standalone package for
+developing more killer UI's, and not just for CLI applications, but
+also for server applications, Emacs applications, and Emacs itself.
+
+While Transient's potential is to create the most highly productive
+UI's short of thought control, going beyond simple command dispatchers
+requires a deeper dive. When we think like constructing a DSL for the
+task and using transient to input that DSL, we get an intelligent,
+self-describing modal programming system.
+
+
+# Outline
+
+- Updates to Transient documentation and demos of API examples
+- Wrapping a custom CLI tool in Transient
+
+<!--- 40 minutes: Wrapping a server in Transient to make a new Emacs application -->
+
+
+[[!inline pages="internal(2021/captions/dsl)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/dsl-nav)" raw="yes"]]
diff --git a/2021/talks/eaf.md b/2021/talks/eaf.md
new file mode 100644
index 00000000..3c8f9bf3
--- /dev/null
+++ b/2021/talks/eaf.md
@@ -0,0 +1,112 @@
+[[!meta title="Emacs Application Framework: A 2021 Update"]]
+[[!meta copyright="Copyright &copy; 2021 Matthew Zeng"]]
+[[!inline pages="internal(2021/info/eaf-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs Application Framework: A 2021 Update
+Matthew Zeng
+
+[[!inline pages="internal(2021/info/eaf-schedule)" raw="yes"]]
+
+Emacs Application Framework (EAF) is a customizable and extensible GUI
+application framework that extends Emacs graphical capabilities using
+PyQt5. There are many new but important updates since EmacsConf2020
+last year, this talk will briefly go over them.
+
+# Feedback
+
+Pad:
+
+- Q1: is there any additions that you have to add to emacs for using
+ non-English/latin characters or does it work mostly out of the box? 
+ - A: [Prot] :  I only set the default-input-method to "greek".
+ Then switch to it with C- (toggle-input-method)
+- Q1: Any plans for supporting other languages? It'd be great to use EAF to offload processing to Common Lisp, for example.
+ - A: You're able to use Python & JavaScrpt/Vue to extend on top of Elisp, it is so far enough (Python for Qt apps and JS for web apps). Currently I don't see a clear advantage of using Common Lisp as well, but there could definitely be a support in theory.
+- Q2: is there an eaf-app that's not a bootstrapping nightmare? (having Vue as a dependency, eg)
+ - A: I don't fully understand what you mean by "bootstrapping nightmare", all these dependencies are system dependencies that you install like any other system dependency, it doesn't slow the Emacs startup nor the system startup. But if you're asking for an app suggestion with lightweight dependencies without JS or Vue dependencies, the popular EAF Browser and EAF PDF Viewer are cool app options.
+- Q3: Are there security implications to having a browser in emacs?
+ - A [opalvaults]: With how Emacs deals with things like GPG/pass/etc. I feel like it's probably as secure as you make it?
+ - A: [matthewzmd] the browser application is independent from emacs itself, you're using a browser in emacs, but the browser is not actually *in* emacs. The browser is QtWebEngine, a modified Chromium without Google stuff, it is as safe as a Chromium can be.
+- Q4: maybe i misunderstood, but is every eaf app essentially embedded QT?
+ - A: yes, it's built upon qt-webengine
+ - A: Yes, it uses PyQt5 and it's essentially painting the Qt frame on top of emacs, simulating a buffer. EPC is used for Elisp <-> Python <-> JS communication so that you can extend Emacs in various langauges
+ - Q: I guess/hope this is using qtwebengine, not qtwebkit?
+ - A: right, qtwebengine. If you wanna dig more into the internals of EAF, I suggest you to read this part of the Wiki (https://github.com/emacs-eaf/emacs-application-framework/wiki/Hacking) or my talk from last year (https://emacsconf.org/2020/talks/34/)
+- Q5: Can the EAF dependencies be made into dynamically loadable modules for Emacs, so there will be no need to rebuilt Emacs?
+ - A: There is no need to rebuilt Emacs, they're simply dependencies that you can install using the system package managers (pacman, apt, etc), npm install and pip install
+
+IRC nick: matthewzmd
+
+- Q1: Any plans for supporting other languages?  It'd be great to use
+ EAF to offload processing to Common Lisp, for example.
+ - A: You're able to use Python & JavaScrpt/Vue to extend on top
+ of Elisp, it is so far enough (Python for Qt apps and JS for web
+ apps). Currently I don't see a clear advantage of using Common
+ Lisp as well, but there could definitely be a support in theory.
+- Q2: is there an eaf-app that's not a bootstrapping nightmare?
+ (having Vue as a dependency, eg)
+ - A: I don't fully understand what you mean by "bootstrapping
+ nightmare", all these dependencies are system dependencies that
+ you install like any other system dependency, it doesn't slow
+ the Emacs startup nor the system startup. But if you're asking
+ for an app suggestion with lightweight dependencies without JS
+ or Vue dependencies, the popular EAF Browser and EAF PDF Viewer
+ are cool app options.
+- Q3: Are there security implications to having a browser in emacs?
+ - A [opalvaults]: With how Emacs deals with things like
+ GPG/pass/etc. I feel like it's probably as secure as you make
+ it?
+ - A: [matthewzmd] the browser application is independent from
+ emacs itself, you're using a browser in emacs, but the browser
+ is not actually *in* emacs. The browser is QtWebEngine, a
+ modified Chromium without Google stuff, it is as safe as a
+ Chromium can be.
+- Q4: maybe i misunderstood, but is every eaf app essentially embedded
+ QT?
+ - A: yes, it's built upon qt-webengine 
+ - A: Yes, it uses PyQt5 and it's essentially painting the Qt
+ frame on top of emacs, simulating a buffer. EPC is used for
+ Elisp <-> Python <-> JS communication so that you can extend
+ Emacs in various langauges
+ - Q: I guess/hope this is using qtwebengine, not qtwebkit?
+ - A: right, qtwebengine.  If you wanna dig more into the
+ internals of EAF, I suggest you to read this part of the
+ Wiki
+ (<https://github.com/emacs-eaf/emacs-application-framework/wiki/Hacking)>
+ or my talk from last year
+ (<https://emacsconf.org/2020/talks/34/)>
+- Q5: Can the EAF dependencies be made into dynamically loadable
+ modules for Emacs, so there will be no need to rebuilt Emacs?
+ - A: There is no need to rebuilt Emacs, they're simply
+ dependencies that you can install using the system package
+ managers (pacman, apt, etc), npm install and pip install
+
+- One thing I never tried watching all this is viewing PDF files within emacs.
+- is there an eaf-app that's not a bootstrapping nightmare? I suppose having Vue as dependency makes that not so for a large number
+- This is pretty cool, from a security standpoint, I'm not sure I'd want a web browser in emacs all that much.
+ - With how Emacs deals with things like GPG/pass/etc. I feel like it's probably as secure as you make it?
+ - matthewzmd: TDT the browser application is independent from emacs itself, you're using a browser in emacs, but the browser is not actually in emacs
+ - If it can be secured under something like firejail, that may be better, as long as there's some segmenting with any communication between the two. Then again, I generally run any browser in dedicated VMs.
+- ok now this is something i need
+- maybe i misunderstood, but is every eaf app essentially embedded QT?
+ - matthewzmd: Yes, it uses PyQt5 and it's essentially painting the Qt frame on top of emacs, simulating a buffer. EPC is used for Elisp <-> Python <-> JS communication
+ - I guess/hope this is using qtwebengine, not qtwebkit? ('cos qtwebkit is unmaintained and by now massively insecure)
+ - matthewzmd: if you wanna dig more into the internals of EAF, I suggest you to read this part of the Wiki (<https://github.com/emacs-eaf/emacs-application-framework/wiki/Hacking>) or my talk from last year (<https://emacsconf.org/2020/talks/34/>)
+
+Links and other notes:
+
+- <https://github.com/emacs-eaf/emacs-application-framework>
+- <https://github.com/emacs-eaf/eaf-file-manager>
+- <https://github.com/emacs-eaf/eaf-rss-reader>
+- <https://github.com/manateelazycat/popweb>
+- if you wanna dig more into the internals of EAF, I suggest you to
+ read this part of the Wiki
+ (<https://github.com/emacs-eaf/emacs-application-framework/wiki/Hacking)>
+ or my talk from last year (<https://emacsconf.org/2020/talks/34/)> 
+
+[[!inline pages="internal(2021/captions/eaf)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/eaf-nav)" raw="yes"]]
diff --git a/2021/talks/erg.md b/2021/talks/erg.md
new file mode 100644
index 00000000..4d1ca6dd
--- /dev/null
+++ b/2021/talks/erg.md
@@ -0,0 +1,50 @@
+[[!meta title="Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year"]]
+[[!meta copyright="Copyright &copy; 2021 Noorah Alhasan, Joe Corneli, Raymond Puzio, Leo Vivier"]]
+[[!inline pages="internal(2021/info/erg-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs Research Group, Season Zero: What we did together with Emacs in 2 hours a week for a year
+Noorah Alhasan, Joe Corneli, Raymond Puzio, Leo Vivier
+
+
+
+[[!inline pages="internal(2021/info/erg-schedule)" raw="yes"]]
+
+The four of us met at EmacsConf 2020, and joined together around a
+common interest in Emacs and research. Since then, we have convened as
+the Emacs Research Group for weekly meetings. During these meetings, we
+took notes collaboratively, using a ‘conflict-free replicated data type’
+package (crdt.el); at the end of each session, we debriefed using a
+template that we call a Project Action Review (PAR). As as a
+meta-review of our sessions, every six weeks we prepared a Causal
+Layered Analysis (CLA), which gave us a different perspective on what we
+had done. We reflected further on our experiences and methods, linking
+our CLA to plans and design patterns. As a formal research output, we
+contributed a write-up of these matters to a joint paper which we
+presented at the Pattern Languages of Programs Conference (PLoP 2021).
+The paper included an interactive workshop, in which we explored roles
+in real-time problem solving and collaboration.
+
+In our short talk we share information about these methods, making a
+case for other people getting together and creating their own small
+research communities similar to ours.
+
+# Discussion
+
+- So this group really spawned out of last year's conf? You four were just met up and kept in touch?
+- Excellent -- I actually meant to post Citizen Science, but I got confused with another thing
+- I am definitely interested in incorporating your workflow. What resource would you recommend as a started - and is it one I could share with colleagues who do not yet use Emacs?
+- Btw, I loved the rapid problem solving approach you take. I am also using "rapid response collecting" with my students to promote a similar 'prescience of the present'!
+- would be willing to share the paper with me as well? i would also love to start an Emacs Research Group, i think Emacs has more to offer to science and people's day to day life than we realize currently
+- Do you have sample workflows on your website?
+- <http://metameso.org/~joe/docs/submission_candidate-25-Nov-2021.pdf>
+- <https://github.com/exp2exp/exp2exp.github.io/blob/master/src/erg-2021-11-20.org>
+- <https://github.com/exp2exp/exp2exp.github.io/blob/master/src/cla-16-october-2021.org>
+- <https://exp2exp.github.io/cla-16-october-2021>
+- also, a bit of a technical question: how do you get a public IP to share a session on crdt?
+
+[[!inline pages="internal(2021/captions/erg)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/erg-nav)" raw="yes"]]
diff --git a/2021/talks/exec.md b/2021/talks/exec.md
new file mode 100644
index 00000000..b25defb0
--- /dev/null
+++ b/2021/talks/exec.md
@@ -0,0 +1,103 @@
+[[!meta title="Org as an executable format"]]
+[[!meta copyright="Copyright &copy; 2021 Tom Gillespie"]]
+[[!inline pages="internal(2021/info/exec-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Org as an executable format
+Tom Gillespie
+
+
+
+[[!inline pages="internal(2021/info/exec-schedule)" raw="yes"]]
+
+Org mode is known for its flexibility, power, and staggeringly diverse
+number of workflows, users, and use cases.
+
+This talk explores just how far we can push the boundaries of the sane
+and sensible with regard to Org workflows.
+
+In particular it will discuss shebang blocks, and elvs: two parts of a
+complete system for creating executable Org files.
+
+Org syntax does not support shebang lines. However, it turns out that
+Org syntax enables something even better &#x2014; shebang blocks.
+
+Org is also (supposedly) not an executable file format. However, by
+combining a shebang block with a Org babel source block, and eval
+local variables (elvs) Org becomes a multi-language executable format.
+
+In this talk we introduce shebang blocks and elvs as a two part system
+that transforms Org files into executable documents that can run on any
+recent version of Emacs.
+
+These ideas are implemented in
+<https://github.com/tgbugs/orgstrap/blob/master/README.org> and
+<https://github.com/tgbugs/orgstrap/blob/master/shebang.org>, and
+orgstrap.el is available as a package on MELPA and can be installed
+via M-x install-package orgstrap.
+
+The talk will open with a demo of how to create an executable Org file
+using the orgstrap machinery.
+
+We then discuss security considerations, and show example use cases.
+
+Finally the talk will cover the details and development of the
+portable shebang block for Org mode that works on a wide variety of
+systems and shells, and on the development of a formal specification
+and a reference implementation for using Org source blocks to
+transform Org files from plain text documents with a bit of markup
+into self describing computational documents, or interactive
+applications.
+
+# Discussion
+
+IRC nick: tgbugs
+
+- what prompted you to create orgstrap?
+- Tom Gillespie: <https://github.com/tgbugs/orgstrap/blob/master/README.org#background-file-local-variables-and-checksums>
+- yeah, usually this kind of stuff starts out as a minor annoyance
+- is there a way to choose which blocks are going to be executed?
+- What are some practical specific use cases that you had in mind?
+- Tom Gillespie: <https://github.com/SciCrunch/sparc-curation/blob/master/docs/sckan/welcome.org>
+- Tom Gillespie: <https://github.com/tgbugs/orgstrap/blob/master/README.org#use-cases>
+- i'll for sure incorporate it in my company and research, so both corporate and academic environments will benefit from your work. i already use Org for documenting a lot of stuff so its just a natural next step
+- I have experimented with dblocks in an org-mode buffer to do the equivalent of javascript in a browser. Does that make sense?
+
+From IRC:
+
+- This is supercool !!
+- That is absolutely wild
+- is the hash not just security theater?
+ - tgbugs: you need it to enable non-theater workflows
+ - anyone who could write the org-file could update the hash as well, no?
+- I don't understand why he needs to talk about powershell, more than the other shell. :(
+ - tgbugs: very late response, but the reason I talked about powershell more than the others is because it is the most different and required some explainiation, I also was :/ about that
+ - that sounds that is a good reason to not include it xD . you can add fish in the talk and it will be bettter.
+
+# Outline
+
+- 5-10 minutes:
+
+A demo of adding the orgstrap block and elvs,
+adding a shebang block, and then running an org file.
+
+<!--
+- 20 minutes:
+
+Same as above, followed by a walkthrough of the approach orgstrap
+takes for preventing arbitrary code execution, followed by some
+examples uses of orgstrap.
+
+- 40 minutes:
+
+Depending on flow/interest, security overview and the examples
+bits could be swapped and overflow beyond 20 mins, followed by
+a deeper dive into the internals, and a discussion about interest
+in incorporating such functionality into org-mode directly.
+
+-->
+[[!inline pages="internal(2021/captions/exec)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/exec-nav)" raw="yes"]]
diff --git a/2021/talks/faster.md b/2021/talks/faster.md
new file mode 100644
index 00000000..0434db61
--- /dev/null
+++ b/2021/talks/faster.md
@@ -0,0 +1,133 @@
+[[!meta title="Optimizing Emacs Lisp Code"]]
+[[!meta copyright="Copyright &copy; 2021 Dmitry Gutov"]]
+[[!inline pages="internal(2021/info/faster-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# Optimizing Emacs Lisp Code
+Dmitry Gutov
+
+[[!inline pages="internal(2021/info/faster-schedule)" raw="yes"]]
+
+[[!table header="no" class="speaker-details" data="""
+Name pronunciation: | d-MEET-ri GOO-tov
+Pronouns: | he/his
+Homepage: | <https://github.com/dgutov/>
+Preferred contact info | <dgutov@yandex.ru>
+"""]]
+
+- Before optimizing, benchmark first.
+- Different benchmarking approaches.
+- Live evaluation, step-debugging, measuring from a debugger breakpoint.
+- How to determine if a function is expensive. How to pick one from
+ competing alternatives (cl-lib, seq, dash, lean core).
+- Print-benchmarking.
+- Byte-compiled code can give a very different picture, changing where
+ the bottleneck is. How to quickly load a byte-compiled version.
+- Steps taken to speed up the Xref package recently.
+
+# Discussion
+
+IRC nick: dgutov
+
+Pad:
+
+- Q1: Why are overlays slow compared to text-properties? I (believe
+ to) understand that it is (in part only?) due to "get element n in
+ vector vs list". If so, then why don't we change that? There could
+ be a text-property called "overlays", so that lookup would also be
+ like in a vector. What benefits does the datastructure currently
+ used for overlays have that make that undesirable? Would a mixed
+ approach make sense; i.e. allow non-modifiyng lookups to use the
+ "cached" overlays that are stored in the "overlay" text-property
+ and make text-inserting and overlay-moving actions store in the
+ currently used datastructure as well as in the indirect
+ text-property=>overlay cache?
+ - A: "There is a pending patch to represent the set of a
+ buffer's overlays as an AAtree or somesuch.."
+ - Sounds promising :)
+ - For more details, check out these threads:
+ - <https://lists.gnu.org/archive/html/emacs-devel/2014-09/msg00616.html>
+ - <https://lists.gnu.org/archive/html/emacs-devel/2016-11/msg00475.html>
+ - <https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00565.html>
+ - <https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00115.html>
+- Q2: As a non-programmer, would these sorts of optimizations be
+ helpful to do on a personal init.el file?
+ - A: Probably not
+ - Though too much mode-line customisation may slow things down.
+- Q3: What's a good approach for benchmarking destructive
+ operations?  If you delete elements from a list in-place, all
+ subsequent runs will be artificially fast.
+ - A: There is an example of a comparison between operations from
+ different libraries in the example file provided by the talk.
+ Particularly check the benchmarks for delete and remove
+ operations (destructive and non-destructive, respectively).
+- Q4:Cl-lib constructors, getters, and setters usually expand into
+ multiple levels of let-bindings. AFAIU, every let-binding is an
+ extra memory allocation. Do you recommend avoiding cl-defstruct in
+ favour of "pure" lists/vectors?
+ - A: basically no. if defstruct allows you to organise better, go
+ ahead.
+- Q5: Is it possible to optimize some emacs packages by making use of
+ code compiled from other languages (like C or Common Lisp) ((i.e. in
+ the same way python is able to import C code))?
+ - A: yes emacs modules allow you to run C or Rust, transitioning
+ between emacs proper and module (passing the data) might slow
+ things down? Because of copying that's necessary to avoid
+ issues with gc.
+- Q6:You mentioned that overlays are much slower compared to text
+ properties. What about text properties vs. buffer-local variables to
+ store position cache?
+ - A: I haven't measured it but offhand I'm going to guess that
+ buffer-local variables will be faster.
+ - Also depends on the structure you're going to use for the
+ cache - is it a single cons, or a list, or a tree, etc.
+
+BBB:
+
+- AVL tree
+- defstruct accessors should expand with compiler macros to aref calls, which are very fast
+- They have extra if though
+- oh you mean for testing whether the value is such a struct?
+- yes there is that test, but I wouldn't expect that to make it 3x slower, AFAIK
+
+IRC:
+
+- If somebody wants to do a remote session with me: I do have processes such as updating column view dynamic blocks that take maybe 40 minutes. So far, I avoid executing those functions when I'm around the computer myself. However, there may be room for improvement and I really can't tell wether it is in my personal setup or not because it's not always that easy to re-create a use-case with plain Emacs cnofig
+- Thanks for doing this talk. FYI you might find the this bench-multi-lexical macro useful: https://alphapapa.github.io/emacs-package-dev-handbook/#outline-container-Optimization
+ - dgutov: I can't seem to find the exact macro you are referring to. But if it covers a use case benchmark-progn does not, consider contributing it to benchmark.el in the core.
+ - Sorry, try this link directly to that macro: https://github.com/alphapapa/emacs-package-dev-handbook#bench-multi-lexical The purpose of the macro is to compare different forms and show how they perform relative to each other
+ - dgutov: Ah yeah, that looks pretty cool. Less sure about the org format, but it must be nice for presentations.
+ - The Org format is good for documentation too. But it just uses the output of benchmark-run, so it could easily be left in Lisp form. :)
+ - dgutov: These things are really handy to have available in 'emacs -Q', though. When you're working on shaving some extra handful of percents.
+ - Yes, a few lines of code could be added to run the compiled code in a separate Emacs process.
+- https://github.com/alphapapa/emacs-package-dev-handbook compares some common ways to do common things in Elisp so you can see which is generally faster, e.g. https://github.com/alphapapa/emacs-package-dev-handbook#inserting-strings
+- PSA: buffer-local-value is generally much faster than with-current-buffer if all you need to do is get the value of a variable in a buffer
+- For more info about the performance of overlays vs text properties data structure, there's an Emacs TODO about it. C-h C-t and search for "Move overlays to intervals.c".
+- cl-defstruct getters/setters have compiler macros that expand into simple aref calls on vectors, they are very efficient
+
+Links:
+
+- you might find the this bench-multi-lexical macro useful:
+ <https://alphapapa.github.io/emacs-package-dev-handbook/#outline-container-Optimization>
+ or
+ <https://github.com/alphapapa/emacs-package-dev-handbook#bench-multi-lexical> 
+- <https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/emacs-lisp/elp.el>
+- <https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/emacs-lisp/benchmark.el>
+- "Use hash tables kids!"
+- PSA: buffer-local-value is generally much faster than
+ with-current-buffer if all you need to do is get the value of a
+ variable in a buffer 
+- EIEIO's object construction is slow because it goes through
+ `make-instance` which is a generic function and it itself calls
+ various other generic functions, so there's a lot of cl-generic
+ dispatch overhead; and then there's the fact that the (keyword)
+ arguments are laboriously parsed at run-time so it itself is slow as
+ well.
+- There is a pending patch to represent the set of a buffer's
+ overlays as an AAtree or somesuch.
+- <https://media.emacsconf.org/2021/emacsconf-2021-faster--optimizing-emacs-lisp-code--dmitry-gutov.el>
+
+[[!inline pages="internal(2021/captions/faster)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/faster-nav)" raw="yes"]]
diff --git a/2021/talks/forever.md b/2021/talks/forever.md
new file mode 100644
index 00000000..f8c29489
--- /dev/null
+++ b/2021/talks/forever.md
@@ -0,0 +1,118 @@
+[[!meta title="M-x Forever: Why Emacs will outlast text editor trends"]]
+[[!meta copyright="Copyright &copy; 2021 David Wilson"]]
+[[!inline pages="internal(2021/info/forever-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# M-x Forever: Why Emacs will outlast text editor trends
+David Wilson
+
+
+
+[[!inline pages="internal(2021/info/forever-schedule)" raw="yes"]]
+
+The computer software industry has seen many "popular" text editors come
+and go, often due to the mercurial fashions of software development. In
+this talk, we'll take a look at why popular editors fade and the
+specific aspects of Emacs that will ensure it remains relevant
+regardless of mainstream popularity.
+
+# Discussion
+
+
+Pad:
+
+- Q1: In your opinion, what is Emacs achilles heel? It's obviously a powerful tool, but no tool is perfect. What would make your life easier in day to day use with Emacs (either a package you wish existed, or a core Emacs infrastructure change).
+ - A: (Probably answered by voice.)
+- Q2:Comparing Emacs just to *code* editors is not a good measure as Emacs is so much more; GTD, word processor, (reference) organizer, or recently expressed on reddit as being a text productivity platform.
+ - A: (Probably answered by voice.)
+- Q3: What is your opinion about the documentation of Emacs in another language in addition of english. There aren't too much non-english community. The people from another non-english countries should write documentation in own language or in english?
+ - A: (Probably answered by voice.)
+- Q4: Do you think more effort should be made to popularize hacking on the C-parts of Emacs? It seems that this is the achilles-heal for the the long-term maintainance of Emacs, if less and less people understand what is going on underneeth eval and apply.
+ - A: (Probably answered by voice.)
+- Q5: Can you name a couple or a few features from other programming languages that you miss in Emacs Lisp?
+ - A: (Probably answered by voice.)
+- Q6: A lot of people take issue with Emacs commitment to to Free Software. They claim it holds it back, and that it should be more "pragmatic". What are your oppinions on this?
+ - A: (Probably answered by voice.)
+- Q7: Do you think that packages like Magit or Org-Mode make people see Emacs as an obstacle to these applications they want to use? Is this an issue, or should it be seen as an opportunity to teach them about Emacs/Free Software?
+ - A: (Probably answered by voice.)
+- Q8: Should Emacs continue to present itself as a esotetic program and culture? Or should we try to dispell the myth, and make clear that anyone can use it, not just extreem entusiasts? Or is this needed to motiviate people to invest time into properly learning Emacs?
+ - A: (Probably answered by voice.)
+- Q9: Do you think there could be changes made to the core of Emacs that would betray the ethos you (and most people here) appriciate? I am thinking of points that some of Emacs' critics demand, to allegedly make Emacs more popular. Do you think this is a realistic threat, or could we save ourselves by forking?
+ - A: (Probably answered by voice.)
+- Q10: The kids want to know : when an ongoing joint video collaboration between @daviwil and @protesilaos?
+ - A: (Probably answered by voice.)
+- Q11: If you had to choose between graphics layer (2D & 3D), or "real" browser support inside Emacs, which would you choose?
+ - A: (Probably answered by voice.)
+- Q12: How'd you feel on being an Emacs focused Youtuber? Do you think Youtube generates a lot of new users?
+ - A: (Probably answered by voice.)
+- Q13: There might once have been a debate whether to add more typesetting capablities to emacs to make it more of a word processor or work on the core performance issues. The current work on native compilation and the community's response to that work show users are actually very interested in perfomance enhancements. What is your opinion on it?
+ - A: (Probably answered by voice.)
+- Q14: Can you give us a sneak peek of what's coming in the YouTube Channel soon?
+ - A: (Probably answered by voice.)
+- Q15: what about guix ? videos about emacs and guix
+ - A: (Probably answered by voice.)
+- Q16: Are you interested in making Youtube videos on the new cool things happening in Emacs, like EAF or Nyxt?
+ - A: (Probably answered by voice.)
+
+BBB:
+
+- Hey Daviwil, I'm curious if you'll do a video showing your personal workflow?
+- What do you think about Guix or Nixos + emacs videos ?
+- It's nice to watch your videos and grab ideas from your workflows, or your code.
+- That happens whenever I've used magit at work :D.
+- Any thoughts on the idea that the best tool to use is the one which is easiest to leave? Possibly this is now even more relevant now that there is a heavy push to cloud services.
+ - I guess it also depends on who owns said tool (given that most cloud services aren't owned by the user).
+- Do you think that there should an updated initial configuration for fresh Emacs installations with more "modern" (UI) features, or even CUA-like shortcuts?
+- I really appreciate the live-video format: non-edited, live, thinking aloud videos - compared to all the polished super-edited "artificial" videos are more a show-of (see me!) as opposed to actually want to share knowledge...
+- Hm. Will you do live pair-programming in the future? I believe you did that with JT some weeks ago.
+- I would be very interested in summaries!
+- Transcript remark: name mentioned by iLemming is written "John Lindquist".
+- I think (possibly) emacs content might have been statistically relevant enough for bots to generate videos and upload them. For the last few months there seemed to be a constant stream of videos with the same intro and outro, plus some text to video in the middle.
+ - Sound like Tony's videos, which are user generated, but seem very automatic generated.
+- 2 min videos will be *too* short - event for a short video. I think 5-10 min will allow for a good short intro to a specific functionality..
+
+IRC:
+
+- My anecdotal evidence, is introducing my coworkers to org mode, and the intracacies of doing more and more in Emacs. It becomes an overwhelming advantage.
+- lots of really popular editors are primarily maintained by companies and dies when the backing companies stop maintaining it
+- Popularity also adds to people breaking features that long time users like me use everyday but they don't see as popular and so they feel the need to break for something different.
+- I think a lot of popularity could be gotten from introducing more people in academic fields to Emacs. Org-Mode is such a game changer on that front.
+- Now, Emacs is based on another mind-blowing idea. The idea of practical notation for lambda calculus, what is known as Lisp. Lisp, probably can be crowned as the most important idea in computer science. It just hard to think of something more influential than Lisp. Emacs is just a practical implementation (and frankly, not the best one) of that idea.
+- Yes. Emacs is an editor for creating domain specific editors.
+- my only problem with the Emacs community is that the community in other language is non-existen
+- Would there be any way to have other Lisps like Guile be compatible with Emacs?
+ - Guile has an Elisp interpreter in its compiler tower, however it's afaik not up to snuff for actually running Emacs.
+ - the problem is the "big datatypes" like buffers and strings, which guile either doesn't do at all or which need expensive bidirectional transcoding across the boundary
+ - some like this? https://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/Using-Guile-in-Emacs.html
+- I think seeing power users do the things they do with Emacs and Org-mode and how prolific they are is a major selling point (thinking of *so* many people, but say John Kitchin comes to mind)
+ - To piggy back on a previous comment, I think if people kept seeing the top people in their fields (be in science/academic, software engineering, devops, etc.) use Emacs and Org-mode and especially their uniquely powerful features (literate style with org-babel, etc), Emacs would start taking over beyond it's historically low single digit % adoption
+ - luckily for me, John Kitchin shows a lot of engineering applications of emacs and org-mode and I love those videos, but I can understand that a lot of people won't find someone like that for their profession
+ - The concurrent pushes for reproducible science, literate programming, literate devops, and so on, also contribute to making the case for Emacs & Org-mode
+- the performance point is spot on. That is one of the main reason why the neovim community is thriving
+
+- From [YouTube](https://www.youtube.com/watch?v=9ahR5K_wkNQ&feature=em-comments):
+ - Emacs has changed the way I use my computer. It is absolutely
+ amazing. I use Emacs to: write latex files, write code, organize my life
+ (with the help of org mode), check my email, use git , use terminal etc.
+ Actually I have recently switched my desktop environment to exwm and it is
+ perfect for my workflow. I guess nothing can beat this tool.
+ - What I noticed from one graph you showed was that most people using stack overflow also use visual studio code, is there a correlation there I wonder.
+ - As for Google analytics ranking, some other factors to consider: - What percentage of emacs users search via Google? I may be wrong, but I think emacs users are more likely to use alternative search engines like Duck Duck Go. - There is so much help info built into emacs compared to other editors that is easy to look up right from inside our editor, I wonder what percentage of the searches on Google for the other editors are basic usage questions of the kind emacs users wouldn't need to search online for? I don't know how much weight these factors have in skewing results, but as you said, it doesn't really matter!
+ - This goes too show in 2004 less people where on the internet and most of then where hard core programmers, and now with more an more people coming into tech , new peeps just want to code and don't care about tools as much . So yeah , I am grateful to you david for introducing me to emacs even though I am too in this new wave
+
+# Outline
+
+- Discuss the core thesis, the features that make Emacs
+ desirable for long-term use (extensibility, day-to-day 'life' features)
+
+- Include more background on the text editor landscape and
+ how the scope of various editors is more narrow and doesn't compare to Emacs.
+
+- Talk about specific instances where editors were popular, fell out
+ of popularity, and why (due to changing fashions, not usually
+ better features).
+[[!inline pages="internal(2021/captions/forever)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/forever-nav)" raw="yes"]]
diff --git a/2021/talks/form.md b/2021/talks/form.md
new file mode 100644
index 00000000..41ef151c
--- /dev/null
+++ b/2021/talks/form.md
@@ -0,0 +1,113 @@
+[[!meta title="Old McCarthy Had a Form"]]
+[[!meta copyright="Copyright &copy; 2021 Ian Eure"]]
+[[!inline pages="internal(2021/info/form-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Old McCarthy Had a Form
+Ian Eure
+
+
+
+Name Pronunciation: (EE-un YOU-r)
+
+Pronouns: he/him/his
+
+Preferred contact info: ian@retrospec.tv / ieure on Libera
+
+[[!inline pages="internal(2021/info/form-schedule)" raw="yes"]]
+
+<http://atomized.org/blog/2021/11/28/old-mccarthy-had-a-form/>
+
+Most practical languages are multi-paradigm, offering several
+abstractions for the programmer. But did you know that Emacs Lisp
+comes with a powerful system for object-oriented programming? Join me
+for a discussion of EIEIO, and learn how it can help you write more
+modular, flexible Emacs Lisp.
+
+# Discussion
+
+IRC nick: ieure
+
+- Q2: AFAIK, EIEIO is generally slower than, e.g. cl-defstructs.  When
+ do you think EIEIO is not suitable for performance reasons?
+ - A: I agree with Dmitry: first make it work, then make it fast. 
+ I don't think there's a blanket reason not to use EIEIO, but
+ definitely profile if you're using it in a performance-critical
+ context.  EXWM is one project that uses EIEIO extensively and
+ seems to perform well, so I don't think it's off-limits for
+ performance-critical code.
+- Q3: Do you have any tips about introspection?  e.g. IIRC there's an
+ EIEIO introspection facility, though it may be somewhat primitive.
+ - A: It is somewhat primitive, but seems to work okay
+ (<https://www.gnu.org/software/emacs/manual/html_node/eieio/Introspection.html)>. 
+ I haven't found a need for anything fancier (yet).
+- Q4: Have you used any of the EIEIO-related serialization tools? 
+ IIRC there are some limitations with regard to printable/readable
+ values.
+ - A: I haven't had call for this, but
+ <https://www.gnu.org/software/emacs/manual/html_mono/eieio.html#eieio_002dpersistent>
+ is the mechanism (for anyone wondering)
+- Q5: I did not get how generic functions can work with non class
+ objects
+ - A: Dynamic dispatch is very powerful!
+- Q6:So with that Emacs is on pair with Smalltalk development
+ environments now (?)
+ - A: Not very familiar
+- Q7: Most of what you presented can be done without `defclass`. 
+ AFAICT, the only exception is *multiple* inheritance (since
+ `cl-defstruct` also supports single inheritance via `:include`).
+ - A: Yes, you can mix and match structs/objects or any other
+ type.  You need classes if you want the EIEIO customization
+ editing facility or MI.  I think also `initialize-instance` is
+ class-only, so you need classes if you have to do some kinds of
+ complex (cross-slot) initializtaion.
+
+- I didn't know that custom.el works with EIEIO that way, very nice
+- Dang Ian. What a talk, great demos.
+- Wow, that's a great talk.
+- Great talk. So with that Emacs is on pair with Smalltalk development environments now
+- For reference, transient.el, which we all know and love as the engine that drives the magit interface, is written via EIEIO afaik.
+- I reckon I should look more into it, I've always avoided it because I was afraid it wouldn't be /quite as nice/ as CLOS or GOOPS.
+ - ieure: It's missing a few things (most documented in the manual: https://www.gnu.org/software/emacs/manual/html_mono/eieio.html#CLOS-compatibility), but it's solid and worth using.
+ - Yeah when transient.el first came out I was impressed by how naturally it worked as part of that abstraction.
+- ieure: EIEIO all the things! I had to cut it, but you can use dynamic dispatch based on major-mode, like: (cl-defmethod whatever ((mode (derived-mode python-mode)))) and then (whatever major-mode).
+
+- Also really nice for things like 'window-system. I really like when callsites are clean and not cluttered with conditionals.
+- Can eieio do regexp dispatch?
+ - ieure: Not currently, but it's possible to add.
+ - okay, so I don't need to feel too bad about coding up my own vtable for those then
+ - ieure: This is the thing that implements (thing (eql :whatever)) specialization, should be a good starting point if you want (thing (string-match-p "^foo")): <https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/emacs-lisp/cl-generic.el#n1164>
+ - thanks for the pointer, but I think I have some more pressing cl-defgeneric reimplementations to make before I touch that
+ - ieure: Extremely fair. One thing I didn't get to touch on is that you can extend generic functions from anywhere. So you don't have to patch up cl-generic.el, you can define a new method for a generic function defined anywhere, in any file. Which rules.
+- This is not a question: Brilliant title for the presentation. :)
+
+Links:
+
+- <https://www.gnu.org/software/emacs/manual/html_mono/eieio.html>
+# Outline
+
+- What is EIEIO?
+- Why OOP?
+- The CLOS Model
+ - Classes
+ - Generic Functions
+ - Methods
+ - Specialization
+ - Method Qualifiers
+ - Multiple Inheritance
+ - Nice Properties
+- Practical Examples
+ - Encapsulation
+ - Example: `transmission.el`
+ - Abstraction
+ - Example: `sql.el`
+ - Extensibility
+ - Example: comint
+- Conclusion
+
+
+[[!inline pages="internal(2021/captions/form)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/form-nav)" raw="yes"]]
diff --git a/2021/talks/freedom.md b/2021/talks/freedom.md
new file mode 100644
index 00000000..0b2af117
--- /dev/null
+++ b/2021/talks/freedom.md
@@ -0,0 +1,84 @@
+[[!meta title="How Emacs made me appreciate software freedom"]]
+[[!meta copyright="Copyright &copy; 2021 Protesilaos Stavrou"]]
+[[!inline pages="internal(2021/info/freedom-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# How Emacs made me appreciate software freedom
+Protesilaos Stavrou
+
+[[!taglink CategoryPhilosophy]]
+
+[[!inline pages="internal(2021/info/freedom-schedule)" raw="yes"]]
+
+The theme will be "how Emacs empowered my software freedom".
+I will outline the key moments in my transition to a GNU/Linux operating
+system and mark those which eventually contributed towards me becoming
+an Emacs user, maintainer of a&#x2014;dare I say&#x2014;popular package, and
+contributor to upstream Emacs (among others). By alluding to personal
+experiences, I will draw generalisable insights and connect them to what
+I believe are irreducible qualities of Emacs qua software and Emacs as a
+community of like-minded people. The talk will be theoretical in
+nature: there won't be any code-related demonstration nor technical
+references that only people with a background in computer science would
+likely recognise. Personal anecdotes shall be tangential to the point
+and considered as ancillary to the thesis of what Emacs represents from
+the standpoint of software freedom and user empowerment. The
+presentation is intended for a general audience that is interested in
+GNU software in general and Emacs in particular. My formal educational
+background as a social scientist (i.e. not a programmer) and later as a
+philosopher informs my approach to this topic.
+
+The presentation shall be 40 minutes long. Its text will be in essay
+form and shall be supplied as complementary material to the video. The
+notation will be in Org mode. I cannot provide an outline in advance,
+as it will most likely not be consistent with the actual presentation.
+If, however, this is absolutely required for administrative purposes I
+shall furnish one regardless with the proviso that I am in no way bound
+by it and thus reserve the right to modify it ahead of the main event.
+
+# Discussion
+
+Questions:
+
+- Q1:  (Unrelated, feel free not to answer): Is there an Emacs or
+ GNU/FSF group in Cyprus? I know it's a politically motivated
+ country, with a strong student-base, so I'm interested whether the
+ Emacs circles and political circles have any overlap.
+- Q2: What do you think is the most effecitve way to demonstrate the
+ value of software freedom to non-techincal people? For a person who
+ can't program (or doesn't want to learn) the freedom seems less
+ immediate.
+- Q3: your quote "emacs makes emergent workflow's possible" reminds
+ me very much of the previous talk (Emacs as Design Pattern
+ Learning). Can you share/reflect how you go about making/designing
+ your personal workflows?
+- are "Prometheas" & "Prometheus" both forms acceptable? Is one "truer" than the other?
+ - protesilaos: Both are correct. The former is modern Greek.
+
+Other notes:
+
+- Emacs documentation is first class.
+- Emacs is inclusive to both new users and experienced users alike,
+ which empowers all users.
+- Knowledge is to be shared not hoarded..
+- Emacs is an ecosystem you have to spend a lot of time with to fully
+ appreciate.
+
+Feedback:
+
+- "I'll definitly use this talk to try to convert more colleagues :D (not joking)"
+- Wow, you phrased prometheus bit that excellently!
+- wow great point on new users being enticed by the "easy productivity" angle
+- I want to be productive, so give me this really complicated tool with countless high-level functions so I can get stuff done ASAP. bit of a paradox, really. very well said.
+- what a well thought-through and well prepared talk. really appreciating this!
+- you can't be an emacs tourist because IT SUCKS YOU IN AND DOESN'T LET GO
+- protesilaos is a gift to the community
+- i really appreciate prot's point right here: emacs is "free software" in the strongest sense of the word, from a practical point of a view since even if another program is libre, its usually so darn complicated that the freedom to modify the program is pretty useless since i'm not smart enough to do it
+- the nuance brought by protesilaos between ellitism and exigence is very good.
+
+[[!inline pages="internal(2021/captions/freedom)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/freedom-nav)" raw="yes"]]
+
diff --git a/2021/talks/frownies.md b/2021/talks/frownies.md
new file mode 100644
index 00000000..87320134
--- /dev/null
+++ b/2021/talks/frownies.md
@@ -0,0 +1,91 @@
+[[!meta title="The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability"]]
+[[!meta copyright="Copyright &copy; 2021 Case Duckworth"]]
+[[!inline pages="internal(2021/info/frownies-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# The True Frownies are the Friends We Made Along the Way: An Anecdote of Emacs's Malleability
+Case Duckworth
+
+[[!inline pages="internal(2021/info/frownies-schedule)" raw="yes"]]
+
+Emacs is well-known for being extremely flexible, programmable, and
+extensible; in fact, that's probably the biggest reason it's still
+being used after 40+ years of existence, and even has enough clout to
+generate an entire conference in its name. In this medium-length
+presentation, I will add another point to the data set proving Emacs's
+abilities, by narrating the latest package I made, `frowny.el`, from
+its conception to its current, nearly-completed state.
+
+I wrote frowny.el to scratch someone else's itch as a joke on IRC, but
+it has been called "pretty useful, for a joke package." I feel like
+that encapsulates the spirit of Emacs and that's why I want to present
+on this topic.
+
+Along the way, I'll discuss just a little of my own history of Emacs,
+and why I feel it's a great tool for non-technical users to sink their
+teeth into.
+
+## Speaker information
+
+- Name pronunciation: /keɪs ˈdʌkwə(ɹ)θ/ (CASE DUCK-worth)
+- Prounouns: he/him
+- Homepage: <https://www.acdw.net>
+- Preferred contact info: [email](mailto:acdw@acdw.net)
+- Links:
+ - <https://breadpunk.club>, a shared unix server about bread
+ - [my Mastodon account](https://writing.exchange/@acdw) (though I'm moving to
+[tiny.tilde.website](https://tiny.tilde.website/@acdw) ... soon™)
+
+# Discussion
+
+- How do we obtain frowny.el?
+ - A: Please check <https://github.com/duckwork/frowny.el>
+- What was the funniest time a frown emerged from unintended code?
+ Or any similar occurrence.
+ - A: I frown a lot when I'm problem solving ;)
+- What packages you used for writing?
+ - A: I just use org-mode for its markup. If you mean the
+ presentation, I think... org-present?
+- You wrote the package quite fast. Would you say you knew what
+ you were going to program before you did it? Or was it iterative
+ process? 
+ - A: pretty iterative, but very fast b/c it's a small project
+ space!
+- from chat (Cairn): do you have a personal site?
+ - A: <https://www.acdw.net>
+- not related to the talk, but on a different note: I like the
+ emacs background image used in the video stream. is it available
+ somewhere for download? :-)
+ - A: <https://emacsconf.org/i/emacsconf-logo1-256.png> (nervous
+ laugh)
+- Why host it on GitHub? or codeberg.org, or sr.ht, or (non-)GNU savannah, or your own server
+- Does frowny work with ;)
+
+- Compulsively C-q anything electric. Don't need a hook when you've got one in your brain.
+- TBH you should transform it into a patch for electric-pair-mode
+- So I want to contribute to Emacs, but I don't know enough elisp. Perhaps I could contribute some documentation? But I have no idea what that would be...
+- From the speaker: i'd love to hear more about licensing, basically i don't care how my stuff is used at all
+
+- From [YouTube](https://www.youtube.com/watch?v=CZn_H93wc5A&feature=em-comments): Hey Case! Thanks for the great talk. I feel like I have had a similar experience to yours by also learning from vanilla Emacs. I like how you're showcasing how easy it is to scratch your own itch in Emacs.
+
+Feedback:
+
+- These kinds of talks are real fun, great job!
+- For real though, I love the path you took to get to where you are. It's super relatable and I've loved hearing about it.
+- These ‘how I got suckered into programming emacs by [hilariously trivial thing]’ are always fun.
+- frowny.el shows how writing a package can help learn things---all sorts of things to consider and lots of "aha!" moments
+
+Links:
+
+- <https://breadpunk.club>
+- /r/emacs - <https://old.reddit.com/r/emacs>
+- Planet Emacs - <https://planet.emacslife.com>
+- HISTORY.org - <https://github.com/duckwork/frowny.el/blob/main/HISTORY.org>
+- <https://github.com/duckwork/frowny.el>
+
+
+[[!inline pages="internal(2021/captions/frownies)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/frownies-nav)" raw="yes"]]
diff --git a/2021/talks/gregorian.md b/2021/talks/gregorian.md
new file mode 100644
index 00000000..8c61e394
--- /dev/null
+++ b/2021/talks/gregorian.md
@@ -0,0 +1,40 @@
+[[!meta title="Typesetting Gregorian Chant with Emacs"]]
+[[!meta copyright="Copyright &copy; 2021 Spencer King"]]
+[[!inline pages="internal(2021/info/gregorian-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Typesetting Gregorian Chant with Emacs
+Spencer King
+
+[[!inline pages="internal(2021/info/gregorian-schedule)" raw="yes"]]
+
+There are a variety of methods for typesetting gregorian
+chant scores and outputting high-quality sheet music. One of these is
+a tool called Gregorio, which integrates with LaTeX allowing scores to
+be cleanly inserted into other documents. All Gregorio files are plain
+text, allowing them to easily be shared with other users and managed
+with a version control system. In this talk, I will give a brief
+overview of the Gregorio tool and then show how it can be used in
+Emacs by typesetting a simple score. All code and examples will be
+made available to help new users get started with typesetting their
+own scores.
+
+# Discussion
+
+- what are the advantages of this over lilypond?
+- do you know if there is something similar for byzantine notation?
+
+# Outline
+
+- 5-10 minutes: (brief description/outline)
+ 1. Introduction to chant music
+ 2. Introduction to Gregorio
+ 3. Example of typesetting a score in Emacs
+ 4. Code and example availability
+
+
+[[!inline pages="internal(2021/captions/gregorian)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/gregorian-nav)" raw="yes"]]
diff --git a/2021/talks/imaginary.md b/2021/talks/imaginary.md
new file mode 100644
index 00000000..01f1e7a7
--- /dev/null
+++ b/2021/talks/imaginary.md
@@ -0,0 +1,243 @@
+[[!meta title="Imaginary Programming"]]
+[[!meta copyright="Copyright &copy; 2021 Shane Mulligan"]]
+[[!inline pages="internal(2021/info/imaginary-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Imaginary Programming
+Shane Mulligan
+
+
+
+[[!inline pages="internal(2021/info/imaginary-schedule)" raw="yes"]]
+
+Imaginary Programming (IP) is both methodology and paradigm. It is an
+extension of literate programming and a way of creating software without
+the use of imperative, functional or even declarative code. Yet IP employs
+all disciplines to achieve the miraculous. The only contingency is on one
+or more language models, known as foundation models. The real value of IP
+is not found by abandoning sound logic altogether, but in weaving the real
+with the imaginary. The future of imaginary programming is one in which
+almost all of computing is inferred. I have built a suite of tools based on
+emacs for interfacing real programming languages with imaginary ones; all
+of this in order to demonstrate what I mean; a ‘complex’ terminal that lets
+you imagine what happens no matter how nested you are within interpreters,
+an example-oriented language, a file format that encodes the provenance of
+text and a library for imaginary functional programming primitives called
+iLambda. It is important to recognise IP because, for lack of a better
+term, it has far-reaching implications for intellectual property and the
+GPL. Please keep an open mind.
+
+# Discussion
+
+IRC nick: libertyprime
+
+Pad:
+
+- Q1: Do you have a site we can follow more of your writing on?
+ - A:Pen.el Tutorial: https://semiosis.github.io/posts/pen-el-tutorial/
+ - https://semiosis.github.io/posts/ilambda-tutorial/
+ - https://emacsconf.org/2021/talks/imaginary/
+- Q2: re slide 27, would it mean that 2 such "idefined" functions would be the "same", meaning do the same thing the same way, given that they are defined without a "body"? (i'm trying to get a better grasp on the objects that get so "imagined" under the hood)
+ - A: The first time a function is run with given parameters, the results are remembered. I use the memoize library. You can update the function every time by surrounding the call the the function with the (upd ...) macro. The body evaluation is completely short-circuited with idefun. The imacro works a bit differently. It will generate real code. You can use the normal macro-expand on an imacro.
+- Q3:Opalvaults :What are some underlying concepts/papers, that we could read to become more familiar with your overarching ideas? (i.e. for instance things that inspired your ideas)
+ - A: paper: pretrain, prompt and predict
+- Q4: Sorry, I just don't get it: How is a function that does something different each time it's called useful?
+ - A: Each time you run one of these functions, you are getting the computer to imagine for you. It's a bicycle for the imagination. You can automate the filtration of the results you want, say by doing many generations and applying grep, or other prompts such as the semantic search prompt to the results. The functions are memoised, so they technicaly do the same thing every time if you want them to. Also, if you use a temperature of 0 for the prompt functions (I demonstrate how to override that, somewhere in the slides), it will be deterministic too, even when bypassing the cache.
+- Q5: How on earth do you ensure that what ilambda gets back from GPT-3 is Lisp and not, say, Harry Potter fanfic? :)
+ - A: A combination of good prompt design, filtering the results, and validating the results. Also, you can fine-tune models to the task you want to eliminate the possibility of unwanted generations.
+- Q6: Your views on the pluses and minuses of GPT-3?
+ - A:It's something we have to live with because of its transformative nature on computing. These language models unfortunately are license-blind.
+- Q7: Any interesting ideas about potential applications of GPT-3 to Emacs itself (or Emacs-adjacent things)?
+ - A: Emacs is the ultimate text-centric operating system. It will become a kernel for AGI, I think. That's what I plan on making. The power-user's terminal of human-ai interaction. I'm trying to extend as many modes in emacs as possible. Org-brain, eww browser, org-mode, comint, emacs lisp primitives, etc.
+- Q8: Follow-up on Q2: how does infering functions in this manner differ from, say, how in the Haskell ecosystem functions are infered by specifying inputs and return type (such as when searching for a suitable function for a given purpose)?
+ - A: Where in haskell, type-declarative function search look through a discrete set of functions by type, the domain of possible functions that are search for using language models is qualatively and quantatively infinite.
+- Q9: Are you deriving functions from their names? What do you do when this is ambiguous - for example, when the name of the function is "get-element-from-pair"?
+ - A: idefun will infer computation and short-circuit the code. Given either 'function name', alone, function name + args, or function name, + args + docstring, or function nae + args + docstring + function body, it will make use of the context you have provided and imagine evaluation. It will create functions which infer rather than properly evaluate, based on merely the name of the function, for example.
+ - A (re: ambiguity): If you had an imaginary defun for this, you'd need to send the final list
+
+BBB:
+
+- libertyprime: What kinds of software is IP (imaginary programming) not suitable for?
+ - libertyprime: Good question. IP is great for things like mocking API calls, because you can imagine the API call output. It's great for code generation where you can then do a macro-expand to generate code as you are programming. It's great for coming up with functions that might be difficult to write (idefun color-of-watermelon), for example
+- Hey libertyprime, where do we follow up to find out more?
+ - libertyprime: it's not really good for scaffolding code. I consider emacs to be 45 years of scaffolding to build imaginary functions around
+ - libertyprime: Because IP needs a rigid complimentary code.
+- So how does an IP user verify that the imagined code does what is intended?
+- I like the word 'imaginary' to describe the paradigm
+- libertyprime: How does an IP user verify that the imagined code does what is intended? Through a combination of 'validator functions', imaginary validation functions and language model fine-tuning. So you may also choose an underlying language model to use when running code. That model may have been trained to do the task you are giving it. If you're trying out the docker container you can run `pen config` or do `M-x pen-customize` to force the language model, or chage it in the imagine-evaluating-emacs-lisp .prompt file
+- libertyprime: Haha. The brilliance of emacs, and the reason this stuff is so easy to do with emacs, is that emacs provides intelligible modes and abstractions with which to build prompts. Otherwise you have an amorphous blob of a language model.
+- libertyprime: So the value is absoltely not in replacing emacs entire, as I've come to understand it, but in combining real and imaginary.
+- (wish i could give you back just a fraction of the time you saved just this one person here!)
+- I would love to see the result of imaginary major modes and keymaps
+- libertyprime, is the idea for the first draft of the gpt output to be final, or do you expect to edit some?
+- There seems to be a lot of jargon in this context, like validators, prompts, language models, etc. It's really hard for someone who doesn't already use these things to understand what these pieces are and how they fit together.
+ - well prompts seem to be the input you give to the language model, which it then generates a follow up to
+ - validators sounds like tests? language models are neural language models like GPT-3/j etc.
+ - libertyprime: <http://github.com/semiosis/glossaries-gh/blob/master/pe-prompt-engineering.txt>
+<http://github.com/semiosis/glossaries-gh/blob/master/prompt-engineering.txt>
+<http://github.com/semiosis/glossaries-gh/blob/master/pen.el.txt>
+ - libertyprime: Here are some glossaries for the subjects
+ - So like, a prmpt would be "Marco!" and GPT-3 would of course say... "Polo"
+ - libertyprime: @alphapapa, I also have a much matured prompt format readme, here: <https://github.com/semiosis/prompts>
+ - libertyprime: which can explain 'validator'', etc.
+- aindilis: So uh... does GPT-3 know... everything? in every human and computer language? I don't understand its role exactly, or its limitations.
+ - GPT-3 knows a lot, but not all, from my experience. It's pretty scary, in a good way. I think libertyprime wants to keep it libre.
+ - libertyprime: the latest language models such as Codex are world language + codex, and they know everything at an abstract level, like a human does, in a way. So their depth may be superficial. They're pretty good knowledge aggregators.
+- so libertyprime can you just tab complete and it completes on like the previous sentence, region, buffer, etc?
+ - libertyprime: Yes, it has basic autocompletion functions, (word, line, lines). I'm also making more interesting autocompletion functions, which do beam-search on downstream generations, -- calling it desirable-search. <http://github.com/semiosis/pen.el/blob/master/src/pen-example-config.el>
+ - libertyprime: There are some key binding definitions here which will work for the docker container
+- Does GPT-3 "know" how to transliterate from say public code written in JS / Other-Lang to elisp if you were trying to imaginary code similar function names?
+ - libertyprime: yes, it absolutely can. transpilation is one thing it is very good at. But more bizarrely, you can also transpile intermediary languages, that are composed of multiple different language chimerically. For example, you can smash out your algorithm with a combination of elisp and bash and it will understand when it transpiles into a real language.
+- How well does it actually work to write a function in a mishmash of Bash and Elisp? I can't imagine that working well in practice. There are too many semantic differences in the languages and implementations
+ - libertyprime: it's a very new sort of thing, but feels natural as you are doing it, to generate code. the results of generating code should most probably be looked at before running. that beign said, you can also run 'ieval' around it to run it in inference. I think the takeawaay should be that these models are getting better and better and show no signs yet of reducing quality of results or ability -- no sign yet
+- how does lexical binding affect things, if at all?
+- How about going from a CLOS/EIEIO style of OO to Java / C++ style? Or Erlang style of parameter pattern matching?
+- so IIUC GPT-3 is a service run on a remote system, right? And it's proprietary? How big is it in terms of bytes?
+ - libertyprime: yes, aggregated language models are not good in my opinion. GPT-3 is around 170 GB, approximately 1GB per million parameters, IIUC
+ - libertyprime: There are libre models, and you can connect one to penel to run the inference etc. My goal is to decentralise them though
+ - libertyprime: Because I don't think that 170GB is accessible enough. The issue is actually running the models though. You need a very large computer indeed for that
+ - libertyprime: I can do a customized demo if anyone wants
+- can someone here provide some sample input, and you run it and paste the result, just to give an idea of the quality? or do you already have samples online?
+- here's an idea for a demo... something like (idefun (string target-language) "Translate STRING from its source language into TARGET-LANGUAGE and output it to the echo area.")
+ - oops I forgot to name the function, was thinking of ilambda
+ - I have a feeling that such a large scope for the function will exceed the max output size of the model. maybe we work on a more realistic example?
+ - I was hoping the model would solve all the messy problems for me :)
+ - libertyprime: Oh crud. I hope I havent broken Ilambda. Lol I added support for 0 arguments, it makes it variadic. This will work
+ - doesn't seem like it quite understood the purpose but I can see the connection
+- what happens if you change target lang to "Elisp" &gt;:)
+ - look at the echo area if you didn't notice it
+ - oh wait, I missed the echo area
+ - libertyprime: Yup, exactly, that will work too. One sec
+- can you run the function again or show "C-h e"? And can we see the resulting source code?
+ - libertyprime: translate python to elisp
+ - libertyprime: just with (idefun translate)
+ - libertyprime: No docstring, etc. or arguments.
+ - libertyprime: ccrud. It didnt work haha
+ - libertyprime: Sigh.
+- libertyprime: I need to fix the 2-ary argument thing. :S Really sorry I think I broke it
+- I'd like to see the generated (or "imagined") Elisp source code, assuming it does some HTTP API queries to do the translation and such
+- libertyprime: Yup, I can show that. It works much better when I use OpenAI Codex. Here are some generated functions
+- libertyprime: That's how it works under the hood. Then it cuts out the bit that you want
+- This reminds me of the classical AI paradigm of "generate and check."
+- libertyprime: Sigh. I really cry when demos break. Sorry. I demo'd the underlying prompt though. I broke ilambda, i think
+- I think I saw it generate a huge fibonacci function, is that still in your kill-ring?
+- okay, well thanks for demoing, the code is pretty stable though at this point right? this is just the norm with any demo.
+- I bet people would be glad to watch/read something later on if you want time to work on it.
+- libertyprime: <https://semiosis.github.io/cterm/> This is what I call the complex terminal. Essentially you prefix any terminal program with ct and you get autocompletion etc. for anything. it uses emac's term-mode
+- libertyprime: <https://semiosis.github.io/ii/> And this, ii, it's fully imaginary terminals, so you can import imaginary libraries, etc. and work with them.
+- libertyprime: <https://semiosis.github.io/apostrophe/> This one here, which imagines conversations with anyone that the model knows about. So I'm demoing having a 3way conversation with amber heard, tom cruise and chris nolan.
+ - so you used GPT to generate a compliment, and now GPT generates the convo from that prompt?
+ - libertyprime: Yeah, so the best way to interact with these types of chatbots is to imagine the situation you are in before hand. the initial phrases can be anything you can think of really. Why are you in the bath tub?, for example. But I tend to open with something like, may I interrupt? What were you just working on? so by choosing the prompt very carefully, you can tease out the information you require.
+- libertyprime: <https://semiosis.github.io/nlsh/> and this, which is a natural language shell
+- libertyprime: I also have a way to filter results semantically, with my semantic search prompt <http://github.com/semiosis/prompts/blob/master/prompts/textual-semantic-search-filter-2.prompt>
+- libertyprime: YOu can run all these prompts also from bash like so: pl "["It's cool. I used to dance zouk.","I don't know.","I'm not sure.","I can't stop dancing to it.","I think it's ok.","It's cool but I prefer rock and roll.","I don't know. It sounds good.","Nice but a bit too fast,"Oh, I know zouk, you can teach it to me.","Zouk is nice."]" | "penf" "-u" "pf-textual-semantic-search-filter/2" "positive response". That will pipe json results into Pen.el, and have it filtered. all prompting functions are also available as shell commands.
+- well I think this is the coolest thing I've seen in a long time. how do we follow up with you and get involved? run it etc?
+- libertyprime: hehe thanks aindilis: i'm on #emacs as libertyprime. Feel free to hit me up any time. Otherwise, the setup for pen.el is fairly straight forward. If you have any issues demoing, I'd be very interested, so I can make Pen.el more reliable. I have a discord server. I'll copy the link. One sec
+- Do you think you could run an IRC channel too?
+ - libertyprime: <https://discord.gg/sKR8h9NT>
+- Thanks a lot, very interesting and I am excited to learn more later!
+- yeah this talk was crazy good, ty!
+
+IRC:
+
+- What Shane is saying right now reminds me a lot of the SICP opening words, about how programming, and computing ideas in general are all about dreams and magic. Creating an idealized solution from abstractions and building blocks.
+- This also reminds me of the concept of Humane Tech. Technology, and frameworks that are inherently conducive to human curiosity, intelligent, and all the best traits. <https://github.com/humanetech-community/awesome-humane-tech>
+- I think this is like semantic auto-complete on steroids, like tab completion of whatever your typing, or translation of something you've written into code for instance.
+- If you're worried about these kind of advances in AI, just remind yourself of how easily technology breaks
+- oh my god, executing code derived directly from GPT-3?! that's *lunatic* curl | bash, eat your heart out
+- idefun definitely helped by a docstring
+ - yeah that's a use-case, gen from docstring
+- Man, I really think it would be awesome to have shane be able to explain some of these ideas more in depth as they are obviously very deep topics. I'd love to help contribute next year to possibly creating a way to have multiple talks going on at once so people have more time to speak. I believe it was sachac who mentioned it yesterday.
+- This vaguely reminds me of that one Python package that generates a CLI parser from the help string except that that python package actually made sense
+- re slide 27, would it mean that 2 such "idefined" function would be the "same", meaning do the same thing the same way, given that they are defined without a "body"?
+- the full abstraction would look something like an interactive proof program where you could repeatedly refine the results until it matched what the user wanted
+- it started incomprehensible and then moved straight to impossible magic.
+- wow...mind blown even though that went by a bit too quick.
+- Hmm, I do think we could do test-driven imaginary programming tho i.e. you only define the ERT testcases and then do the rest with idefun
+- So `(imacro with-clifford-algebra (p q r))` would just "work"... this does feel too magical
+- I am really happy that someone is trying Deep Learning stuff *with* emacs and not just for writing Python code :D
+- well I've had pretty good success with GPT-3, I think this also supports GPT-j which is I think free/libre.
+- most users of GPT-3 do it via calls to a web api
+- is it still invite only?
+ - no, it's been opened recently
+
+From [YouTube](https://www.youtube.com/watch?v=pJm4TaCyDnk&feature=em-comments):
+
+- Is this Emacs with smooth scrolling? How is that possible? I tired that really hard. Or is it just a PDF reader?
+- Lets go!!!!! Imaginary Programming all the way.
+
+# Outline
+
+- 5-10 minutes:
+- a 5 minute introduction to imaginary programming, followed by
+ - a demonstration of iLambda.
+ - iλ, a family of imaginary programming libraries
+ <https://mullikine.github.io/posts/designing-an-imaginary-programming-ip-library-for-emacs/>
+
+<!--20 minutes:
+
+- a 5 minute introduction to imaginary programming, followed by
+
+ - a 5 minute introduction and demonstration of Pen.el.
+ - <https://semiosis.github.io/pen/>
+ - a 5 minute org-babel and emacs lisp demonstration of iLambda.
+
+ - iλ, a family of imaginary programming libraries
+
+ <https://mullikine.github.io/posts/designing-an-imaginary-programming-ip-library-for-emacs/>
+ - a 5 minute demonstration of ‘cterm’ (complex term) and ‘ii’
+
+ (imaginary interpreter).
+
+ - <https://mullikine.github.io/posts/imaginary-real-codex-complex/>
+ - <https://semiosis.github.io/ii/>
+
+ -
+
+40 minutes:
+
+- a 10 minute introduction to language models, their capabilities and
+ imaginary programming.
+
+ - a 10 minute introduction to creating prompts with Pen.el.
+ - a 5 minute org-babel and emacs lisp demonstration of iLambda.
+
+ - iλ, a family of imaginary programming libraries
+
+ <https://mullikine.github.io/posts/designing-an-imaginary-programming-ip-library-for-emacs/>
+ - a 5 minute demonstration of ‘cterm’ (complex term) and ‘ii’
+
+ (imaginary interpreter).
+
+ - <https://mullikine.github.io/posts/imaginary-real-codex-complex/>
+ - <https://semiosis.github.io/ii/>
+
+ - A 5 minute brief on examplary and advanced prompt programming.
+ - <https://semiosis.github.io/examplary/>
+ - 5 minutes for Prompting Requests and Q&A
+
+Availability
+
+(during the conference days (Nov 27 and 28))
+
+All hours.
+
+How you’d like to handle questions
+
+Live web conference
+
+--->
+
+IRC libertyprime at #emacs on libera
+
+Shane Mulligan
+
+## Links
+
+- Pen.el Tutorial: <https://semiosis.github.io/posts/pen-el-tutorial/>
+
+[[!inline pages="internal(2021/captions/imaginary)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/imaginary-nav)" raw="yes"]]
diff --git a/2021/talks/invoice.md b/2021/talks/invoice.md
new file mode 100644
index 00000000..c3534656
--- /dev/null
+++ b/2021/talks/invoice.md
@@ -0,0 +1,60 @@
+[[!meta title="Find Your (In)voice: Emacs for Invoicing"]]
+[[!meta copyright="Copyright &copy; 2021 Bala Ramadurai"]]
+[[!inline pages="internal(2021/info/invoice-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Find Your (In)voice: Emacs for Invoicing
+Bala Ramadurai
+
+[[!taglink CategoryOrgMode]]
+
+[[!inline pages="internal(2021/info/invoice-schedule)" raw="yes"]]
+
+[[!table header="no" class="speaker-details" data="""
+Name pronunciation: | BA-lA
+Pronouns: | he/his
+Homepage: | <https://balaramadurai.net>
+Preferred contact info | <bala@balaramadurai.net>
+"""]]
+
+Ye Freelance warriors, please lend me your I/O devices for 5 minutes.
+
+Your time is your money! Do you find it a pain to generate an invoice,
+record the details into your accounting software and keep track of
+taxes and payments? You are not alone, I found the whole invoice
+thingy to be extremely painful.
+
+But worry not, Emacs comes to our rescue.
+
+My talk will give you a basic intro on how to use org mode, some embedded python code and file jugglery to generate stylistic and professional invoices.
+
+What you will learn during the session:
+
+- How to track your freelance time using orgmode
+- How to create the basic infrastructure for invoice generation
+- How to generate the invoice
+- How to manage multiple clients
+- How to enter the finance details into your accounting software
+- How to track invoice payments
+
+We will use the following packages:
+
+- Emacs+orgmode (duh?)
+- yasnippet
+- python layer (I use spacemacs, so whatever is the equivalent in your config)
+- Some unnecessary Shakespearean references
+
+# Discussion
+
+- okay, this is some next level invoicing automation!
+- The accounting system transactions are a nice touch
+- it's really hard to tell that came from org :)
+- European format would be DD.MM.YYYY and not with dashes which can be mixed up with ISO or other formats. in the UK it's often with slashes: DD/MM/YYYY
+- From [YouTube](https://www.youtube.com/watch?v=b__d04aHEbI&feature=em-comments): This looks great! Much better than my amateurish attempts. Thanks!!!
+
+
+[[!inline pages="internal(2021/captions/invoice)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/invoice-nav)" raw="yes"]]
diff --git a/2021/talks/janitor.md b/2021/talks/janitor.md
new file mode 100644
index 00000000..ab903616
--- /dev/null
+++ b/2021/talks/janitor.md
@@ -0,0 +1,158 @@
+[[!meta title="A day in the life of a janitor"]]
+[[!meta copyright="Copyright &copy; 2021 Stefan Monnier"]]
+[[!inline pages="internal(2021/info/janitor-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# A day in the life of a janitor
+Stefan Monnier
+
+
+
+[[!inline pages="internal(2021/info/janitor-schedule)" raw="yes"]]
+
+Because of a reckless former Emacs maintainer that shall
+ better stay unnamed, ELisp has seen a fair bit of churn in the last 10
+ years, making it necessary to clean up "old" code [in order to open up
+ the road for yet more recklessness? ].
+ In this documentary we will follow a famous janitor in his every day job
+ dealing with the aftermath of the cl-lib / lexical-binding party.
+
+# Discussion
+
+Pad:
+
+- Q1: How did you narrow to two specific areas in a single buffer when
+ compering the two functions. I can be handy 
+ - A:In this case I just split the window into 2.  In other cases I
+ use `M-x smerge-make-conflict`.  Oh wait, did you really mean
+ "narrow"?  I don't use narrowing, I only use
+ outline-minor-mode (with reveal-mode to un-hide as I move)
+ - I will look into both work flows they look very handy. Thanks.
+- Q2: Could you further elaborate on quoting functions with #'fun
+ (aka (function fun)) instead of 'fun (aka (quote fun))?
+ - A:Not sure what further elaboration you want (e.g. "why?" or
+ "when?")
+ - I would like why? Is it just style since Emacs understand both,
+ or not?
+ - The why is to be more explicit (i.e. a form of documentation, so
+ as a reader I can see that this refers to the function rather
+ than being just a use of a symbol for other purposes)).  The
+ compiler knows about it and will hence give you a warning if you
+ refer this way to a function it's not aware of.  There are also
+ corner cases where the two behave differently, mostly when
+ referring to a function defined via `cl-flet` or `cl-labels`
+ (or `named-let`, ...)
+ - Thanks!
+- Q3: Stefan, you mentioned a lot of conventions, I really like to
+ read more about them: Where can I find a list of these conventions
+ (like #'function for functions )? Is there a page or info about
+ ELisp conventions used nowadays? 
+ - A:Good question.  We have several of them documented in the
+ ELisp reference manual (searching for "convention" should get
+ you there), but that only covers those conventions with which
+ Emacs maintainers agree.  Others are much less clearly
+ formalized.  I seem to remember someone collecting such
+ information and making a webpage out of it, but I can't
+ remember where nor who it was.
+ - Probably,
+ <https://github.com/alphapapa/emacs-package-dev-handbook>
+ - Thanks! I'll take a look at the reference manual and search for
+ this information. 👍
+- Q4: Stefan, that was really amazing to watch. After the changes you
+ made, how confident are you that the package still works as
+ intended? It seems as though there might be some room for errors
+ that the byte compiler wouldn't necessarily catch.
+ - A: I think for those three packages I'm quite confident that
+ they should work as well as before.  Not because the compiler
+ did not complain but because the changes were sufficiently
+ simple.  Sadly in ELisp, I can't rely on the compiler to catch
+ errors.  I can only use it ask it to point me to suspicious
+ code, and I know that it will miss some.
+
+BBB:
+
+- I couldn't help but note that in the C world we are more and more making large-scale changes like this to the whole tree at once using tools like coccinelle. it feels like the regular structure of Lisp would lend itself to this very well... It feels like a better use of your time, is all :)
+- anyway, thanks for de-terrifying lexical-binding conversion in particular -- I think I might start pitching in there (I assumed it was a lot more paranoid and proof-based than this, which it seems like something I could do!)
+ - what do you mean you don't search the entire space dominated by every funcall for uses of each var :)
+ - God knows what crazy things users have done with either hooks or advice, and what vars they implicitly depend on :/
+- Curious, is the Emacs you showed also your personal config, or one just for the video?
+ - Understandable, I'd do the same. I was curious to see what your real config looked like though :)
+- oh that reminds me, thanks for pcase, it's amazing :)
+- Oh that's fast. Compare to Linux: 16 years and counting (!) for the -rt patches...
+- What's your opinion about tree-sitter? Is it possible to see something like paredit but for non-lisp language?
+- I suppose you can just ask "how old is this?" and it's the ancient stuff that is hardest to convert
+- Hi Stefan, thank you for this very insightful talk, full of tacit knowledge. I've learned much also from your HOPL talk (and paper). Is there a world in which you could consider doing other short informal videos just to show your thinking and pass on such tacit knowledge to those that would be interested in getting into emacs-devel per se.
+- May I ask a silly question? I'm curious about your style of signing your mailing list messages, i.e. "Stefan 'who foo bar baz'" Where did that originate? :)
+ - I enjoy it, the list needs levity like that :)
+- (Also, I for one liked that you didn't use specialized tools, for precisely those reasons that it makes it more accessible to those just starting.)
+- Would it be too off-topic to ask about ELPA? I was thinking that it would be helpful to have a way to list packages on the site by last-updated time
+- Is it possible to see metaobject protocol support in elisp?
+- What features of the language/platform do you see as higher priority for future development? i.e. I'm looking for package pages that use the HTML-formatted readme from the patches we worked on, but I don't know which pages have been updated recently, so it's hard to find them :)
+- could download counts be done? Would that require the Savannah folks to code?
+- Do you install packages from melpa?
+- Stefan: Are you using native-comp already?
+- Do you use Org much?
+- Do you use magit?
+- What are some of the improvements coming in future Emacs versions you're looking forward to?
+- What's your opinion about Po Lu's recent patchs about GStreamer?
+- Have you ever met any of the other Emacs maintainers or developers in person?
+- How do you hack on installed packages? I mean installed packages are not a git cloned repo. But I want to commit changes and to see an immediate effect in a running Emacs. What is suggested workflow for this?
+- What's Lars like in real life? He seems like a fun person :)
+ - oh is he tall?
+- From your academic/research work, are there things you would like the elisp language or platform to evolve towards, even if medium-long term? Or is the long term path a different language(s) altogether?
+- Do you personally use paredit?
+- Do you lean toward Scheme-style macros rather than CL ones?
+- What non-lisp languages are you looking at that we could possibly inspire from, if any?
+- I'd like to see something like a with-gensyms macro to make them easier to use. Dima Akater also has some ideas (and code) for enhancing defmacro in a similar way
+- (hehe, yes i meant mostly typed functional programming languages)
+- Can namespaces solve some macro issues?
+- are there technical difficulties in preserving that source code data associated with symbols and sexps? or could something like defstructs be used simply to do that in a primitive way?
+-so almost like a parallel macro/elisp implementation then?
+- doesn't adding code/data distinction break homoiconicity?
+- Could a Clojure-like metadata approach to extend the data be useful for this, and if so doable?
+- fat cons cells sounds useful, could maybe be used to do CL-style VALUES too?
+- even more tedious than janitorial work I suppose :)
+- BTW, Stefan, I forget, are you Canadian/Quebecois, or do you just happen to live and work there? :)
+ - ah, so you are French?
+- thought of another simple question to bombard you with :) Do you mostly run Emacs from master, or other versions?
+ - Stefan Monnier: I basically only use my own version, which tracks `master` with a bunch of local experimental & cosmetic changes
+- elisp looks very much like a procedural language. Do you like it this way or maybe you wish it moving towards more functional/Scheme style?
+ - Stefan Monnier: ELisp is halfway between imperative and functional, and I think it works rather well this way. The usual style has evolved towards a more functional style.
+ - Stefan Monnier: The ELisp implementation sadly isn't good enough to support a truly functional style, currently.
+- Stefan Monnier: I tend to edit code as I read it, so my local changes probably accumulate to 1MB or so of patch, but most of it is purely cosmetic changes which I "should" push to master but can't be bothered to.
+
+IRC:
+
+- Question: Is there a place where these conventions and compilers checks are listed? A web page, an info perhaps?
+- Wow, I think you are going to have to know a LOT on Emacs development, versions, Elisp details, ... to do that kind of work.
+ - One very helpful thing anyone can do is just confirm bug reports and add reproduction steps if they are missing.
+- The double-dash is a convention for an func intended to be called internally only?
+ - Yes. `pacakge-foo` is public, `package--foo` is internal.
+- mindless tree-wide transforms like this are what coccinelle is for. why are emacs maintainers still doing this by hand? you'd think lisp would be well-suited for expressing semantic patches to lisp... :/ this ceases to seem interesting when you've seen cocci do ten thousand transforms like this across a 500MiB tree in 20s or so
+ - Does cocci work on elisp?
+ - no, but the *idea* should work there, and Lisp is so regular in structure that something like coccinelle is the sort of thing lisp boosters say is really easy in lisp. but nooo, none exists that I know of :( (coccinelle itself is written in ocaml :) )
+ - https://coccinelle.gitlabpages.inria.fr/website/
+- There's a monstrous heap of regexps that match most reasonable compiler output. I wrapped an ancient MS-DOS compiler for an obsolete language in a script that invokes it inside DOSBox and echos the output‚ and it Just Worked with compilation mode.
+ - Wow, that's awesome! Yes, lots of the "historic" parts of emacs are amazing.
+- if folks are interested in the lexical dynamic transition: https://hopl4.sigplan.org/details/hopl-4-papers/13/Evolution-of-Emacs-Lisp
+
+Feedback:
+
+- OK, this blows my mind in a sense that I realize that I really don't have an idea of coding Elisp.
+- This talk is great. There should be more like that online, so more people learn to help with "janitorial" work
+
+# Outline
+
+- ~20 minutes
+ Here really, I'm not sure how much time this will take. I put 20
+ minutes because I think I might be able to fill that and I think more
+ than that could turn too boring. I intend to make it a "live coding"
+ kind of thing, without anything like an outline: it's basically "make"
+ followed by fixing the warnings.
+
+
+[[!inline pages="internal(2021/captions/janitor)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/janitor-nav)" raw="yes"]]
diff --git a/2021/talks/maintainers.md b/2021/talks/maintainers.md
new file mode 100644
index 00000000..8a39e41a
--- /dev/null
+++ b/2021/talks/maintainers.md
@@ -0,0 +1,104 @@
+[[!meta title="How to help Emacs maintainers?"]]
+[[!meta copyright="Copyright &copy; 2021 Bastien Guerry"]]
+[[!inline pages="internal(2021/info/maintainers-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# How to help Emacs maintainers?
+Bastien Guerry
+
+[[!inline pages="internal(2021/info/maintainers-schedule)" raw="yes"]]
+
+<https://bzg.fr/en/how-to-help-gnu-emacs-maintainers/>
+
+After 11 years of helping as the Org maintainer, I would
+like to share a few lessons learned. My goal is help everyone take
+care of Emacs maintainance by taking care of Emacs maintainers.
+
+# Discussion
+
+Pad:
+
+- [[!template text="Q1: How did you come up with this knowledge? By doing or by experience or by reading books (which?)?" start="00:04:30.840" video="qanda" time="1" id=subtitle]]
+ - A: All 3 of them.
+ - He was reading the book: Fred turner : counter culture to cyberculture
+ - The other one he mentioned appears to be Eghbal, Nadia [Stripe Press] (2020) Working in public: the making and maintenance of open source software
+- [[!template text="Q2: (Maybe answer this last, if time permits) How did you come to start using Org?" start="00:06:10.000" video="qanda" time="1" id=subtitle]]
+ - A: Bastien started with his own library BHL and was introduced/invited to contribute to Org by Carsten.
+- [[!template text="Q3: You have recently overseen a major transition for org mode maintenance, what would you advise for other teams that are preparing for transitions so that processes can be maintained with minimal disruption? How do we take processes that were originally maintained by a single person to one maintained by multiple people?" start="00:08:39.720" video="qanda" time="1" id=subtitle]]
+ - A: (Probably answered by voice.)
+- [[!template text="Q4: What do you think about the latest Orgdown thing? (Yes, it's me, Karl :-) )" start="00:35:32.840" video="qanda" time="1" id="subtitle"]]
+ - A: (Probably answered by voice.)
+- Q5: Could you settle this "Org" vs "Org-mode" vs "orgmode" vs ... once and for all (i.e. which one, capitalized how, and where)? :)
+ - A: (Probably answered by voice.)
+- [[!template text="Q6: Does this mean that you do not need to be technical to be(come) a maintainer? Would that really work?" start="00:15:09.880" video="qanda" time="1" id="subtitle"]]
+ - A: The co-maintainer could be a person with less technical background.
+- [[!template text="Q7: If time — what does the day of the orgmode maintainer look like? Lots of hours of work every day? Spread out?" start="00:17:24.520" video="qanda" time="1" id="subtitle"]]
+ - A: Not always. Last two months "MIA." Bastien wants to step down as maintainer but wants to prepare project/community for the next maintainer. "When I was working hard on this it was something like two hours a day. But usually it would be 2-4 hours per week." Most of time spent on mailing list (Bastien notes that he likes mailing list isn't split between users/developers).
+- [[!template text="Q8: Thanks for the hard work. Which place is the right place to request a dark mode for orgmode.org website ?" start="00:10:55.200" video="qanda" time="1" id="subtitle"]]
+ - A: write an email to the Org-mode team. This seems to be a reasonable request.
+- [[!template text="Q9: Do you think having centralized roles for people to carry out certain tasks such as documentation across multiple areas would be a constructive approach to inviting new maintainers" start="00:21:11.800" video="qanda" time="1" id="subtitle"]] (in contrast to "every person take an issue of their own choosing", which leaves parts of maintenance and documentation neglected)? From personal experience, sometimes it can be easier for those to be told "hey, we need this area maintanined, or a focus on contribution to this particular area". If we take a page from Catalonian Spain of the early 1900's, even the most decentralized organizations have to dedicate certain persons to specific tasks. Sorry for the long winded question.
+ - A: (Probably answered by voice.)
+- [[!template text="Q10: I think org has and may potentially greatly influence Emacs development. If you would tend to agree, do you have places where you feel Emacs need to "pull back" harder, to" start="00:24:21.440" video="qanda" time="1" id="subtitle"]] incluence org? Key areas where org is clearly "leading the way"?
+ - A: "Org is to Emacs was Emacs is to computer systems"
+- [[!template text="Q11: Could you expound a little on what's happening with contrib ... I'm a little confused. Mechanics/technical. " start="00:27:52.320" video="qanda" time="1" id="subtitle"]]
+ - (Karl: Do you mean technically "how to migrate" or the background why this happened? I personally did the conversion this week. I got the separate repository (or package) and had to do more local "use-packages" (the way of loading elisp files in my setup) and that's it. The hard thing was to find out which error refers to which org file to load separately.) Thanks. Seems like time for bankrupcy again :-/.
+ - A: contrib = stuff that didn't go to Emacs (copyright assignment not necessary). This was not a clean solution because it was mixed with copyright-transferred files in the same repository. New contrib goes now to "non-GNU" which is a clear separation according to copyright assignments. The way to install Org is via Org MELPA and contrib for Non-GNU MELPA. YES. THANKS.
+- Q12: (Maybe not a question, just an observation) I like the analogy to gardening. FOSS projects seem much like community gardens. Also, shepherding seems like an apt analogy; I could imagine files having "shepherds" :)
+ - A: (Probably answered by voice.)
+- [[!template text="Q13: Has splitting contrib actually reduced maintenance load? Is it too soon to tell? (I have found that splitting repos ultimately increases maintenance overhead due to multiplying" start="" video="qanda" time="1" id="subtitle"]] release overhead etc.)
+ - A: It is clearly easier now and less confusing for contributors. org-contrib is soon to die: packages will be moved to their own packages since contrib was founded when there was no packaging around.
+- Q14: So was BHL the basis for org-export?
+ - A: https://bzg.fr/en/theorgfather/
+
+BBB:
+
+- agreed, I appreciate that the list isn't split.
+ - vastly simplifies workflows.
+- (Missing context) Wouldn't they be missing the key part, Emacs?
+ - Questioner: (ah, i understood forking for a different toolset, vs markdown-based org-mode on Emacs, apologies)
+ - Bastien Guerry: <https://list.orgmode.org/87y2jvkeql.fsf@gnu.org/>
+- devil's advocate to Karl's point now though: is that from habit?
+- link syntax in markdown is impossible to remember for simplifying e.g. keyword syntax can be made regular. consistency across levels is extremely hard due to interactions between features, in part because you only encounter those much later in implementation. another part of the issue is that Org has more features than pandoc markdown so it is sometimes unrepresentable.
+- interestingly Timothy has solved most of the markdown &> org
+ - plain orgmode is easy to visualize. with markdown you need to export this if you have many md lines. org tables is a clear example of the visualization
+- I think the argument of the best syntax is a hard battle to fight, but where the bar is clear is the software (org-mode) and what it can do with it, as of today.
+- [[!template text="FYI org-sidebar provides a backlinks tool" start="00:54:54.080" video="qanda" time="1" id="subtitle"]]
+- Backlinks! Yes!
+- Backlinks for me: <https://karl-voit.at/2020/07/22/org-super-links/>
+- was going to say : many of the org-roam features should make their way into core org-mode eventually
+- how to manage and cache other types of data that are similar to backlinks
+- something like org-id caching, you mean?
+- alphapapa: not quite, more things that we don't want to put in the org file directly; e.g. babel caches for huge pieces of data
+- id caching for performance would be great, some of the vizualisation things are very interesting too
+ - it is a hard problem
+
+BBB feedback:
+
+- Thank you for taking the time to share your accumulated wisdom with us, Bastien :)
+- merci Bastien!
+
+IRC:
+
+- I love it when people just kick it old school and write things out.
+- the spiderman syndrome is evil. it causes imposter syndrome that god knows how many contributors it has cost us
+- excellent analysis on bdfl/spidysyndrome, you can see it play out in other communities as well
+- Very interesting, I suppose I get an idea that maintainers are put on a pedestal, and you see a lot of the good, and bad from both sides of the spectrum. It can be thankless, but also incredibly rewarding. It's easy to miss the forest for the trees, and keep in mind that most every piece of FLOSS software is a very decentralized and maintanance heavy vs. centralized and focused on LOC.
+- i don't get the project vs product
+ - project is the process of creating the product (usually)
+ - because "project" has been redefined over time to mean the product (such as the codebase), together with the project as in the endeavor to create/develop it
+ - Project is a greater scope than product, in my view. A project is not only the code, but the relationships with others who interact with it. The product can be the same, but doesn't usually include the support aspect since it's "free".
+- FLOSS software is a fascinating psychological study on that ACDC concept.
+- i feel that this doesnt apply only to maintainers. So many managers should listen to it too
+- It is really good advice to keep in mind as a manager
+- GUIX has a really great community, and has folk like 'jgart' mainly, that has package maintaince workshops where they invite newbies and experienced users alike to contribute packages to GUIX.
+- one of the things that hasn't been brought up yet is maintainer territoriality, I know for many of my projects I can be quite territorial, sometimes unintentionally
+- That kind of contribution is invaluable for being an inviting environment for congtributing to a project.
+- I think even if the maintainer doesn't intend this potential contributors can perceive it
+- Awesome talk! Not just in the context of Org-mode!
+- The hand written slides are so engaging!
+
+[[!inline pages="internal(2021/captions/maintainers)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/maintainers-nav)" raw="yes"]]
diff --git a/2021/talks/model.md b/2021/talks/model.md
new file mode 100644
index 00000000..ad33ff8f
--- /dev/null
+++ b/2021/talks/model.md
@@ -0,0 +1,124 @@
+[[!meta title="Extending the "model" of Emacs to other applications"]]
+[[!meta copyright="Copyright &copy; 2021 Laszlo Krajnikovszkij"]]
+[[!inline pages="internal(2021/info/model-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Extending the "model" of Emacs to other applications
+Laszlo Krajnikovszkij
+
+[[!inline pages="internal(2021/info/model-schedule)" raw="yes"]]
+
+Emacs is a great operating environment in a sense that it provides consistency
+across different tools and applications within the Emacs ecosystem, as well as
+external apps that can be integrated into it. It is also the most truly
+malleable environment, each element of which can be adjusted or extended,
+therefore providing the user with more power and freedom in personal computing.
+Emacs definitely can be considered one of greatest software products in
+existence.
+
+As a non-programmer, having had the chance to stumble upon Emacs a couple of
+years ago, the only regret to have is that it didn't happen earlier. The definite
+killer feature of Emacs - Org-mode, is what draws many of the less technical
+folks to join the party and gradually start to use Emacs for writing documents,
+whether personal or work related, manage tasks, emails and potentially everything
+else. The learning curve and difference in approach, however, leaves some
+potential users too scared of the arcane interface even with all it's quirks and
+features because it requires at least some technical skills to understand and
+use properly, and does not have an easy way to connect with external tools that
+most people are forced to use for work.
+
+This talk proposes some ideas about how the model of Emacs, it's focus on
+consistency, extensibility, as well as it's powerful interaction model can be
+carried over to make modern interfaces, whether desktop or web applications,
+that would be designed with a goal of reflecting the spirit of Emacs in terms of
+the aforementioned features it possesses, and therefore enhance the capabilities
+of the Emacs, while at the same time utilizing it as a backend for
+text-processing and editing to a large extent. It would be really great to have
+a personal web-interface for using modern task management tools, chats, emails
+and such, but from a UI defined by the user. The goal is to use it on a desktop
+or mobile, locally or self-hosted on a server, with support for touch and
+gesture-based workflows, while preserving the Emacs philosophy and allowing to
+seamlessly switch between Emacs and its web extension
+
+The proposed solution is to integrate more of the modern tools with Emacs,
+utilize Org-mode as a way to define application-specific parameters for these
+tools through Org properties, and then utilize these parameters for making a
+modern local frontend that would enhance Emacs UI while allowing to use external
+tools in a more personal and freedom respecting way (making the originals
+obsolete over time). The talk serves the purpose of inviting community members to
+a discussion about how Emacs can become more modern, more approachable by people
+who don't possess the neccessarry technical skills to adjust it themselves, but
+are keen to learn it, and potentially how to attract more users to greater
+productivity, computer literacy and the ideas of free software.
+
+# Discussion
+
+- Q1: What is the URL of your web page? I guess the URL on your slide
+ is currently not available (see links below).
+ - A: The URL written is correct, but unfortunately the website is
+ down due to some misconfiguration and will be back soon. You can
+ contact me at laszlo.lk@protonmail.com until it is resolved
+- Q2: It is important to note that for EAF to extend to the web apps
+ you mentioned (Asana, Jira) in a deeper way than just displaying the
+ web app using EAF Browser, the APIs of these web apps need to be
+ exposed too.
+ - A:Exactly, otherwise only a one way update would be possible. As
+ long as they have integration with other external tools, there
+ must be a closed API documentation for making it work.
+
+Links:
+
+- different form
+ <https://github.com/emacs-eaf/emacs-application-framework> in that
+ the goal here is not to do everything in emacs buffers.
+- <https://github.com/ag91/emacs-with-nyxt>
+
+# Outline
+
+- 5-10 minutes
+ - Introduction
+ - Issues with most modern tools for work
+ - Issues with Emacs as a tool for work
+ - In search for a hybrid approach
+ - User controlled web-apps
+ - Opinions encouraged
+ - Contacts
+
+<!--
+- 20 minutes:
+ - Introduction
+ - Why Emacs?
+ - Issues with most modern tools for work
+ - Issues with Emacs as a tool for work
+ - In search for a hybrid approach
+ - Emacs as the text-based "backend"
+ - Org as the universal format to convert data
+ - User controlled web-apps
+ - Potential use cases
+ - Potential difficulties with implementation
+ - Opinions encouraged
+ - Contacts
+
+- 40 minutes:
+ - Introduction
+ - Why Emacs?
+ - Issues with most modern tools for work
+ - Issues with Emacs as a tool for work
+ - Keyboard driven workflows and modal editing
+ - In search for a hybrid approach
+ - Emacs as the text-based "backend"
+ - Org as the universal format to convert data
+ - User controlled web-apps
+ - Releasing proprietary web-apps from the "cloud cage"
+ - Potential use cases
+ - Potential difficulties with implementation
+ - Extending the idea further by combination with Guix
+ - Opinions encouraged
+ - Contacts
+
+-->
+[[!inline pages="internal(2021/captions/model)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/model-nav)" raw="yes"]]
diff --git a/2021/talks/mold.md b/2021/talks/mold.md
new file mode 100644
index 00000000..7c5eb707
--- /dev/null
+++ b/2021/talks/mold.md
@@ -0,0 +1,113 @@
+[[!meta title="Moldable Emacs, a step towards sustainable software"]]
+[[!meta copyright="Copyright &copy; 2021 Andrea"]]
+[[!inline pages="internal(2021/info/mold-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Moldable Emacs, a step towards sustainable software
+Andrea mailto:andrea-dev@hotmail.com - pronouns: he/him -- https://ag91.github.io
+
+[[!inline pages="internal(2021/info/mold-schedule)" raw="yes"]]
+
+We could learn about things better. Mountains of knowledge hide in
+places we cannot access or use. The more we write down, the more it
+takes to find and understand things we find useful.
+
+Knowledge (web, software, books) keeps growing faster and faster! This
+is not sustainable: we cannot keep up with it! What if we repeat the
+error of somebody else, only because it would take too much reading to
+know? What if that knowledge is in some code we work with everyday?
+
+Moldable development is a paradigm shift that attempts to solve this
+problem. In a gist, the tool you use should let you create special tools
+to learn smartly from what you have already.
+
+Since we use Emacs, let's make our great editor moldable!
+
+This talk shows my progress in making Emacs closer to such a tool. We
+are going to see how we can mold structured (and maybe even natural)
+text to learn better, how we can inject notes in our projects and how
+self documenting this tool is!
+
+I aim to inspire you to find a quicker way to learn from our digital
+world!
+
+You can learn more about this at: <https://github.com/ag91/moldable-emacs>
+
+# Discussion
+
+IRC nick: `andrea
+
+Pad:
+
+- Q1: How to find a balance between «generic» molds that do not
+ provide specific enough info vs writing a new mold for every new
+ query/question?
+ - A: You can write molds that are private for your special
+ problem. I created molds for my work that I don't share: like
+ find the stories I am working on and how long time I spent on
+ tasks lately. Also, moldable-emacs is to make these tools easy
+ to write, so you should free to throw away tools when you need
+ them once only. If I believe a tool is a good start for many
+ other tools, I put them among the core molds, else if I use them
+ often I store them as contrib. If it is a one off, I throw it
+ away.
+- Q2: How would you evaluate this workflow for package managemnt in
+ large independent codebases. Can one integrate it with code sematic
+ analyzers to make for a better work flow?
+ - A: moldable-emacs is about creating custom tools you can apply
+ to your situation. I started experimenting with molding NPM json
+ packages + security data from OWASP to view/display security
+ issues in my packages to my colleagues in the past.
+ moldable-emacs gives me the infrastructure to answer my question
+ about security, and I now started asking myself about
+ architecture coherence, so I have scaled up tree-sitter over
+ projects to check that modules don't use packages from other
+ modules. By that I mean that as long as your code semantic
+ analyzers output data, you can mold that (context) data to tell
+ your story (answer the question you have). Does this answer your
+ question?
+ - You answered it very well. I am also a security auditor for
+ multiple development teams. And I am incharge of code analysis
+ in an understaffed security team. So your usecase example got my
+ usecase spot on. 
+ - Cool! For now you can define insecure patterns using tree-sitter
+ expressions (for example, I find a variable called "password"
+ in the code set to a string. For the package.json I linked to
+ OWASP API and looped through the packages using tree-sitter
+ tokens. I didn't get there, but I wanted to see an Org Mode
+ buffer with the list of the most vulnerable deps highlighted by
+ color + how to solve them: so I could pass them to developers to
+ resolve them (I am a dev, but sometimes others don't know about
+ security risks).
+ - Often molds are to tell stories to others.
+ - This is probably the most important thing for my personal
+ usecase. Thank you very much. Now it's my turn to learn it and
+ use it well. 
+ - Please open issues or email me, and I will try to help if you
+ like how it works :)
+ - I'll do so.
+
+IRC:
+
+- cool...so essentially you are developing a text based version of Glamorous Toolkit.
+ - `andrea: yup, but only because I don't have good imaging in Emacs yet (but with tui.el...)
+- your talk helped a lot with that though. I'd been seeing posts from you for a little while, but now I "get it"
+ - `andrea: yeah sorry, I am still building my vision: it may look I have been all over the place (image recognition, editing css, parse English lately), but the common thread is the easing of creation of micro tools that help me tell the stories I need
+- I love your approach of mining other 'nuggets' from other contexts and bringing them to Emacs. I really look forward to looking in to your work and see if I can implement some of it. Thank you so much for your talk.
+
+Links:
+
+- Telling a story about code using buffer views <https://moldabledevelopment.com/>
+
+# Outline
+
+- 5-10 minutes: quick demo of moldable-emacs
+<!--- 20 minutes: same as above but going more in depth for the vision of the package, how it fits with my code-compass talk of last year and some features
+- 40 minutes: same as above and explanation of how you can extend the features available
+-->
+
+[[!inline pages="internal(2021/captions/mold)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/mold-nav)" raw="yes"]]
diff --git a/2021/talks/molecular.md b/2021/talks/molecular.md
new file mode 100644
index 00000000..3cc7d829
--- /dev/null
+++ b/2021/talks/molecular.md
@@ -0,0 +1,158 @@
+[[!meta title="Reproducible molecular graphics with Org-mode"]]
+[[!meta copyright="Copyright &copy; 2021 Blaine Mooers"]]
+[[!inline pages="internal(2021/info/molecular-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Reproducible molecular graphics with Org-mode
+Blaine Mooers
+
+[[!taglink CategoryOrgMode]]
+
+[[!inline pages="internal(2021/info/molecular-schedule)" raw="yes"]]
+
+Research papers in structural biology should include the code used to make
+the images of molecules in the article in the supplemental materials.
+Some structural bioinformaticists have started to include
+their computer code in the supplemental materials to allow readers
+to reproduce their analyses. However, authors of papers reporting new
+molecular structures often overlook the inclusion of the code that makes
+the images of the molecules reported in their articles. Nonetheless,
+this aspect of reproducible research needs to become the standard practice
+to improve the rigor of the science.
+
+In a literate programming document, the author interleaves blocks
+of explanatory prose between code blocks that make the images of molecules.
+The document allows the reader to reproduce the images in the manuscript by running the code.
+The reader can also explore the effect of altering the parameters in the
+code. Org files are one alternative for making such literate programming
+documents.
+
+We developed a **yasnippet** snippet library called **orgpymolpysnips** for
+structural biologists (<https://github.com/MooersLab/orgpymolpysnips>).
+This library facilitates the assembly of literate programming documents
+with molecular images made by PyMOL. PyMOL is the most popular
+molecular graphics program for creating images for publication; it has
+over 100,000 users, which is a lot of users in molecular biology. PyMOL
+has been used to make many of the images of biological molecules found
+on the covers of many Cell, Nature, and Science issues.
+
+We used the **jupyter** language in **org-babel** to send commands from
+code blocks in Org files to PyMOL's Python API. PyMOL returns the
+molecular image to the output block below the code block. An Emacs
+user can convert the Org file into a PDF, `tangle' the code blocks
+into a script file, and submit these for non-Emacs users. We describe
+the content of the library and provide examples of the running PyMOL
+from Org-mode documents.
+
+# Discussion
+
+Pad:
+
+- Q1:  Do you also do any hydrogen-bond analysis in your workflows?
+ Also, could your snippet library be extended for other non-python
+ simulation programs like GROMAC?
+ - A: Yes, i have a snippet that generate publication qualtiy
+ hydrogen bonds. Yes, I have thought of making snippet library
+ molecular simulation like Gromacs and AMNER and drug design
+ software packages like autodock Vvna and rdkit. They can help
+ lower the barrier to entry. I made library for crystallographic
+ computing with CCTBX for use in Jupyter. I should make it
+ available for org-mode.
+- Q2: We've seen a few talks regarding managing academic papers and
+ citations in emacs/org, what does your workflow look like?
+ - A: I switched to Emacs as my primary editor 3 months ago. I have
+ yet to write a paper in Org. I am very comfortable with LaTeX
+ and I have been writing my papers on Overleaf in LaTeX for
+ several years. I used bibtex and JabRef to manage by refernces.
+ I have started playing by org-ref. It looks super promising.
+- Q3: Hi Blain, you mentioned that you have been able to come back to
+ a file years later, how do you manage the environment that the org
+ file executes in?
+ - A: Good question. The PyMOL code is good for years so the images
+ should be reproducible regardless of the version of org.
+ PyMOL's domain specific language is very stable. The Python
+ code largely just wraps around the DSL code.
+- Q4: Have you used Org Mode and pyMOL for publications? Could you
+ share a link to any of them?
+ - A: I have yet to use org in a publication. The first step will
+ be to use it for supplemental material.
+
+BBB discussion:
+
+- We've seen a few talks regarding managing academic papers and citations in emacs/org, what does your workflow look like?
+ - Blaine: My workflow involves a dozen different software packages and 20-200 GB of data. Complete literate programming is not possible at this time. The smallest possible step towards that goal is to make the molecular images reproducible because the files involved are on 1-100 MB in size.
+ - Questioner: I assume that's why there might be lag with several images rendered on an org buffer?
+- I was specifically interested in your workflow with managing citations and papers as I'm sure you have to do, is there anything in particular you use for citation management?
+ - Blaine: I switched to Emacs as my primary editor 3 months ago. I have yet to write a paper in Org. I am very comfortable with LaTeX and I have been writing my papers on Overleaf in LaTeX for several years. I used bibtex and JabRef to manage by references. I have started playing by org-ref. It looks super promising.
+ - Questioner: I still use zotero and biblatex, but the previous two talks about org-ref got me thinking about my workflow
+- Have you used Org Mode and pyMOL for publications? Could you share a link to any of them?
+ - Blaine: I have yet to use org in a publication. The first step will be to use it for supplemental material.
+ - thanks, makes sense, I'm off in a part of the python world where code base churn can be pretty severe; but it sounds like pymol is able to avoid those issues
+ - Blaine: PyMOL as a domain specific language that is very stable. The transition from Python2 to Python3 as bit disruptive.
+- Hi Blaine, you mentioned that you have been able to come back to a file years later, how do you manage the environment that the org file executes in?
+ - Blaine: Good question. The PyMOL code is good for years so the images should be reproducible regardless of the version of org.
+
+BBB feedback:
+
+- Blane, great job with the talk. Awesome presentation.
+ - I know people loved it in the IRC chat :D
+- I can share that I was excited to see how you made things so seamless and integrated feeling into Emacs. The results are really eyepopping.
+
+
+IRC discussion:
+
+- which is the package name for export org mode to pymol?
+- the async header argument can be helpful with the problem of the amount of time for generating the images
+- think of this is use case explication for being able to manage and render 3d models in org
+- It might be faster to keep sections folded by default
+- This is exactly the sort of thing my users love.
+
+# Outline
+
+- 5-10 minutes: (brief description/outline)
+ - Title slide
+ - Structural Biolog Workflow in the Mooers Lab
+ - Cover images made with PyMOL
+
+ - Why develop a snippet library for your field?
+ - PyMOL in Org: kernel specification
+ - Creating a conda env and installing PyMOL
+ - Example code block in Org to make DSSR block model of tRNA
+ - Resulting image
+ - Summary
+ - Acknowledgements
+
+<!--
+- 20 minutes: (brief description/outline)
+
+ I would prefer to give a 20-minute talk because this allows time to develop the context.
+
+- Title slide
+- Structural Biology Workflow in the Mooers Lab
+- Cover images made with PyMOL
+- Bar graph of PyMOL's popularity
+- Origin story of PyMOL
+- PyMOL's hybrid open-source model
+- PyMOL's GIU
+- Default molecular representations in PyMOL
+- Example of the PyMOL macro language
+- Same commands in Python
+- Corresponding code in yasnippet snippet
+- Extension of molecular representations with orgpymolpysnips
+- Hermann Ebbinghaus's Forgetting Curve
+- Why develop a snippet library for your field?
+- PyMOL in Org: kernel specification
+- Anatomy of kernel file
+- Creating a conda env and installing PyMOL
+- Example code block to make DSSR block model of tRNA
+- Resulting image
+- Org vs. JuptyerNotebook, Juptyer Lab, and RStudio
+- Summary
+- Acknowledgements
+
+-->
+[[!inline pages="internal(2021/captions/molecular)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/molecular-nav)" raw="yes"]]
diff --git a/2021/talks/montessori.md b/2021/talks/montessori.md
new file mode 100644
index 00000000..8c734ad9
--- /dev/null
+++ b/2021/talks/montessori.md
@@ -0,0 +1,234 @@
+[[!meta title="Emacs and Montessori Philosophy"]]
+[[!meta copyright="Copyright &copy; 2021 "]]
+[[!inline pages="internal(2021/info/montessori-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs and Montessori Philosophy
+
+[[!taglink CategoryPhilosophy]]
+
+[[!inline pages="internal(2021/info/montessori-schedule)" raw="yes"]]
+
+As a former Montessori guide and now parent, I often think about the
+relationship of this particular educational philosophy and how it manifests
+in my work with software, Emacs in particular. This talk introduces the
+concept of Emacs as an educational environment and how it expresses elements of
+Montessori psychology regarding "Human Tendencies". Human tendencies are innate
+drives present in everybody that allow us to explore and make sense of our world.
+
+# Discussion
+
+- Q1:  Would you say that the Montessori philosophy follows a "verb"
+ based methodology, where an abstract action is performed on an item,
+ without locking the action to what the item can support, like an
+ Object-oriented language would do? 
+ - e.g.  `throw(rock)` instead of `rock.throw()`, i.e. a
+ function in a global namespace, instead of a function belonging
+ to an object?
+ - A: i'd like to think about this some more, but honestly i think
+ its a bit of both? there's certainly some things I can think of
+ that are more like `rock.throw()`... Here are the things you
+ can do with these materials, and that is it. On the other hand,
+ I've certainly seen inventive uses of educational materials
+ that follow more of a `throw(pencil)` type of thing.
+ - The philosophy is highly observation based, so I'm thinking
+ about the difference of something like `Child::new.learn()` vs
+ `learn(some-child)`.  In this case I do feel like the "verb"
+ based methodology is more appropriate. We need to stop and
+ observe a child, to notice what is driving them, what they're
+ responding to, and where they are in their abilities. Depending
+ on our observations, we may offer different kinds of input. Its
+ certainly much less like "oh i have another Child object and I
+ need to have them do x, y, z" in order to get to point B.
+ - I hope this somewhat answers the question. I'll keep pondering
+ :)
+ - Thank you, I guess some children favour one method over
+ another, but it's not as black and white as I initially
+ thought. Thanks!
+- Q2: How old do you think childen need to be to start exploring with
+ Emacs?
+ - A: Children 0-6 are in a phase called the "absorbent mind". It
+ is this miraculous superpower that children have to absorb
+ everything around them. The ability to learn language is
+ probably the most obvious example. So, if children can interact
+ with Emacs, they can start exploring it. Of course, as a text
+ editor, basic literacy is pretty important.  I personally have
+ not tried teaching young children Emacs, but I believe with the
+ right kinds of interfaces, it could be possible.
+- Q3: How to let my kids exploring Emacs?(No need to answer this.
+ It's simillar to Q2)
+ - A: Great question! Much of the early childhood Montessori work
+ is highly tactile. Abstract concepts are embodied in physical
+ objects. One example is the "binomial cube" which is a set of
+ blocks that demonstrates (a + b)^3. Children know nothing about
+ the math behind it, but by interacting with it as a tactile
+ puzzle, something about the math concept behind it, the
+ abstraction, is available to the child and their absorbent mind.
+ - That is to say... perhaps there are ways to bring Emacs into
+ the physical world for the very young. I've been fantasizing
+ about some kind of "physical lisp" where young children can
+ interact with a sort of physical programming language. I don't
+ have a lot of concrete ideas on how to get young children
+ exploring Emacs, but I  do believe it is possible.
+ - For older, literate children, I believe simple things that give
+ instant feedback are a great way to encourage interaction. Being
+ able to do something like (set-cursor-color "orange") and see
+ it work at your finger tips is amazing. I believe that a well
+ prepared set up where M-x is easy to access and you get some
+ kind of completion to show you what you can do would go far. 
+ Even ielm could be useful. Children are not nearly as afraid of
+ a command prompt as some grown ups are. They come to it with
+ much less preconceptions on how it should be used.
+ - I would like to think more about this, as giving children the
+ opportunity to experience Emacs feels critical these days, when
+ they may be forced into using much non-free software just do do
+ their school work.
+- Q4: How big of an impact does the environment have on the children
+ that you teach?
+ - A: the environment is huge. giving children a prepared space
+ where everything is accessible to them, down at their level, the
+ correct size, etc, it can lead to amazing things. When I worked
+ with 1.5-3 year olds, I remember telling people it was like
+ managing a restaurant where my employees were toddlers. I could
+ work with a group of children to get food served into properly
+ sized dishes, beverages poured, ceramic plates and glass cups
+ set on the tables, napkins folded, and so on all finished in
+ time to get everyone down for lunch before we had major melt
+ downs.  This would not be possible in a normal grown-up
+ environment. 
+ - I'm not sure i said this in the talk, but the environment is an
+ active process on all of us, not just children. the 0-6 year
+ olds (and beyond) are absorbing so much from the environment
+ that we simply filter out. i think this is important to consider
+ for new emacs users. I tend to filter out a lot of things that a
+ new user may pick up and stumble over.
+ - To re-emphasize: the elements of education are The Learner, The
+ Guide(s), and The Environment. Montessori focuses on the
+ Prepared Environment, in order that it can be the most effective
+ for the child's ability to become an independent, self-realized
+ person.
+- Q5:Do you have a good reference for the Montessori principles
+ (actually any nice book ref)?
+ - A: I'd like to find a more modern resource, I'm sure they are
+ out there. Much of my experience was direct hands-on classroom
+ time.  I've read much of "The Absorbent Mind" which really
+ lays out a lot of the observations Maria Montessori made of the
+ young child, 0-6 years old.  The other book I've studied is
+ "The Secret of Childhood".  I would like to stress though, a
+ lot of the knowledge in Montessori is very very similar to
+ traditional knowledge. When I was learning more about Lakota
+ culture and parenting, I was finding that Montessori was
+ expressing much of the same thing. Any resource (book, human,
+ whatever) that respects children as whole human beings is worth
+ paying attention to. Another author I've enjoyed is Aletha
+ Solter, who writes about parenting.
+- Q6:How do you think Emacs could improve re: Montessori Principles
+ (if at all)?
+ - A: My main takeaway is that we should acknowledge the three
+ elements of learning: The Learner (user), The Guides
+ (contributors), and The (Prepared) Environment. Each user coming
+ to Emacs is an individual with their own mix of internal drives
+ (human tendencies) that compel them to learn and experience.
+ Everyone that is a contributor to Emacs (whether in code, on the
+ web, or in chat) acts as a Guide in the environment (whether
+ they know it or not).  The Prepared Environment could be
+ considered how the application is set up for users.  I think
+ there is room for a friendlier Prepared Environment, though I am
+ always amazed at what I can discover where the self-documenting
+ feature helps me out.  Interactive tutorials teaching one how to
+ learn how to learn Emacs would be tricky, but I think some
+ interesting work could happen there!
+ - Another principle is "control of error", meaning, when you
+ fail at something or make a mistake, it should be obvious, and
+ hopefully the correction of the error should be obvious as well.
+ This is hard to do in a huge software environment like Emacs,
+ but I think there could be some work done in this regard. I'm
+ reminded of Racket's beginning student languages, which make
+ error messages more human focused and less computery is a good
+ example.
+ - I think the community could also improve as Guides. I have
+ certainly had many pleasant interactions with Emacs users, but
+ sometimes you run into things like "RTFM" or "read the
+ source". While I don't disagree, it can come off as elitist
+ sometimes. Many new users are afraid to read source, or have
+ found a manual but still don't understand. We certainly want to
+ encourage independence, so offering techniques like "have you
+ tried M-x describe-function?"  is better than just answering
+ outright. Sometimes we need to take a moment and understand the
+ Learner we're working with. Maybe they aren't ready for "read
+ the source". I could keep writing, but I think I need to wrap
+ up. Anyone should feel free to email me to talk more! perhaps
+ i'll try doing some writing about it. 
+- Q8: What was the presentation mode you used?
+ - A: org-tree-slide - <https://github.com/takaxp/org-tree-slide> -
+ i love using this package because i can practice and edit my
+ presentation at the same time.
+
+Feedback:
+
+- having studied in a school which founded by following Montessori Philosophy, I can relate <3
+- Love the emphasis on creativity!
+- Such a cool talk
+- Great perspective in that talk.
+- the reference to Montessori made me think of Alan Kay's talks about Frenet and Papert.
+ - i was thinking the exact same thing regarding Alan Kay and his talks about education, and of his philosophies behind Smalltalk (the programming language).
+ - and Smalltalk as a platform shares a lot with Emacs, both are a world where a user lives and develops
+ - garjola: yeah...the whole thing about discovery, figuring things out for yourself, having an epiphany.
+
+Links and other notes:
+
+- <https://github.com/takaxp/org-tree-slide>
+- <grant@churls.world>
+- @kheya@mastodon.social
+- <http://blog.shoshin.digital/> (there's not really anything there
+ xD)
+
+# Outline
+
+- 5-10 minutes: (brief description/outline)
+ Quick overview of a Montessori classroom environment:
+
+ - the adults or guides primarily observe and present material
+ - the children are free to explore materials as they choose (within limits)
+ - the environment itself is prepared specifically to foster engagement
+
+ Enumerate the "Human Tendencies":
+
+ - Abstraction
+ - Activity
+ - Communication
+ - Exactness
+ - Exploration
+ - Manipulation (of the environment)
+ - Order
+ - Orientation
+ - Repetition
+ - Self-Perfection
+ - Work (also described as "purposeful activity")
+
+ How does Emacs express these things?
+
+ - in the short version, pose the question, and perhaps give one example.
+ - Emacs is an environment that provides facilities for individuals to
+ find their way to proficiency through their Human Tendencies.
+ - We are all both learners and guides, Emacs is our classroom
+
+<!--
+- 20 minutes: (brief description/outline)
+ This would follow the same outline as above, but go more deeply into how
+ Emacs fosters understanding and growth by allowing individuals to express
+ the various Human Tendencies.
+
+- 40 minutes: (brief description/outline)
+ I don't have in mind to do a 40 minute talk, though a friend and fellow Emacs
+ user is also a former Montessori guide and we had talked about sharing our
+ experience together in this presentation. This would include more anecdotal
+ evidence of what we experienced ourselves observing children as well as our
+ journey to competency as software developers through the classroom of Emacs.
+-->
+
+[[!inline pages="internal(2021/captions/montessori)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/montessori-nav)" raw="yes"]]
diff --git a/2021/talks/nangulator.md b/2021/talks/nangulator.md
new file mode 100644
index 00000000..bbf7bfed
--- /dev/null
+++ b/2021/talks/nangulator.md
@@ -0,0 +1,57 @@
+[[!meta title="Introducing N-Angulator"]]
+[[!meta copyright="Copyright &copy; 2021 Kevin Haddock"]]
+[[!inline pages="internal(2021/info/nangulator-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Introducing N-Angulator
+Kevin Haddock
+
+[[!inline pages="internal(2021/info/nangulator-schedule)" raw="yes"]]
+
+<https://github.com/vigilancetech-com/N-Angulator>
+
+The Unix file system is essentially an N-dimentional sparse array that
+currently lacks a decent editor and browser which
+can effectively leverage the logical tri-angulation (or, more properly
+"n-angulation") of atoms/blobs within it.
+
+N-Angulator is the genesis, to wit, the "Model-T," of such a program.
+
+# Discussion
+
+IRC nick: N-Angulator
+
+- Q1: Can this be considered as a UI to manage hardlinks with
+ additional functionality such as listing the hardlinks of a single
+ file?
+ - A: that is part of what it could be considered.   I see it more
+ as re-imagining the Unix/Linux file system as a data cloud
+- Q2: Remark: I did a PhD on that very same topic:
+ <https://karl-voit.at/tagstore/en/papers.shtml> - Your approach does
+ seeom to have similarities to the Semantic File System (Gifford et
+ al) or SemFS (Mohan at al) or TagFS (Bloehdorn et al).
+ - A: yes, I just started checking it out.   I was not aware of any
+ of those when I wrote it.   I just had a need for a much more
+ comprehensive filing/retrieval system to support my various
+ activities (law, programming, time management, etc...).   It
+ worked amazingly well at the time but "life happened" and I
+ was never really able to keep it up with the times like porting
+ it from the orphaned XEmacs into FSF and promote it at all.
+- <https://github.com/vigilancetech-com/N-Angulator>
+
+- N-Angulator: I wrote it 10 years ago and am no porting it to GNU emacs
+- is this a graph-as-filesystem
+- I'd much rather work with keybindings rather than clicking things. Is there support for that?
+ - N-Angulator: I think the menu system does automatically assign some unique keys but it's been a long time since I looked at it
+- I love these kind of advanced file systems
+- This is weirdware in the best sort of way.
+- Are you familiar with tagstore/TagTrees (by me) or Semantic File System (Gifford et al) or SemFS (Mohan at al) or TagFS (Blöhdorn et al)? my work: https://karl-voit.at/tagstore/en/papers.shtml -> preferably the PhD document that summarizes everything
+
+- From [YouTube](https://www.youtube.com/watch?v=ggmfWPmse_w&feature=em-comments): Any chance you can explain what this package can actually do? I don't want to be critical. It looks interesting but I just don't know what to do with this.
+
+
+[[!inline pages="internal(2021/captions/nangulator)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/nangulator-nav)" raw="yes"]]
diff --git a/2021/talks/native.md b/2021/talks/native.md
new file mode 100644
index 00000000..2916c9f5
--- /dev/null
+++ b/2021/talks/native.md
@@ -0,0 +1,193 @@
+[[!meta title="Emacs Lisp native compiler, current status and future developments"]]
+[[!meta copyright="Copyright &copy; 2021 Andrea Corallo"]]
+[[!inline pages="internal(2021/info/native-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs Lisp native compiler, current status and future developments
+Andrea Corallo
+
+
+[[!inline pages="internal(2021/info/native-schedule)" raw="yes"]]
+
+Emacs Lisp (Elisp) is the Lisp dialect used by the Emacs text editor
+family. GNU Emacs is traditionally capable of executing Elisp code
+either interpreted or byte-interpreted after it has been compiled to
+byte-code.
+
+In this talk I'll discuss the Emacs Lisp native compiler. This feature
+recently merged into the main Emacs development line allow for
+automatically compiling and executing Elisp as native code.
+
+During the presentation I'll touch on:
+
+- design goals
+- compiler and runtime design and implementation
+- performance implications
+- upstream process
+- area of improvements and future developments
+
+Format: 40 minutes
+
+# Discussion
+
+Pad:
+
+- Q1: Why do you say that Elisp is *nearly* a general purpose
+ programming lang? What's missing? (and btw, huge thanks for your
+ work!)
+ - A:
+- Q2: Is this the "rudiments" that the garbage collector talk was
+ discussing yesterday? Feel free to ignore this n00b question. 
+ - A:
+- Q3:Is the idea to enventually develop Emacs itself in ELisp (c.f. 
+ Smalltalk VM developed in Smalltalk)?
+ - A:
+- Q4: How did you work on this? Did you use Org Mode to keep track of
+ your progress? Did you use pictures to keep track of your compiler
+ transformations or you made only for the presentation? Asking
+ because it seems a complex project and I am not sure how you kept
+ that all in your mind! For example, make sure to pick stuff that FSF
+ was okay with while also deciding how to implement the optimization.
+ Great job anyway!
+ - A:
+- Q5:Is this pipeline a possible source of new security
+ vulnerabilities, or a new category of vulnerabilities? Is it
+ something you are worried about or have had to deal with?
+ - A:
+- Q6: What code, if any, would still benefit significantly from being
+ written in C? Could/should some of the existing C code be converted
+ without significant performance loss?
+ - A:
+- Q7: What's the risk of (setq native-comp-speed 3)?
+ - A: Not sigificant risks.  Some side effects might include:
+ needing to recompile a whole file or compilation unit when
+ redefining a function, otherwise the old function definition
+ could be used.
+- Q8: Are there any limits introduced by native comp with respect to
+ runtime introspectability, changeability/redefinability, etc?
+ - A:
+- Q9: Is there a benefit in setting native-comp-compiler-options to 
+ "-mtune=native -march=<cpu>"?
+ - A: Not at the moment.  Maybe in the future if, e.g. libgccjit is
+ enhanced further.
+- Q10: You mentioned native-comp coming in emacs 28, will this be the
+ default at build time, or will distros have to set this themselves?
+ - A: It will not be enabled by default.  Distros would need to
+ enable it themselves.(Thanks!)
+- Q11: Could we avoid libgccjit.so? Or consider using another jit lib
+ (e.g. dynasm used by luajit) et al to gain better optimization
+ - A: libgccjit is more for AoT compilation, more in-depth
+ optimization, which JITters don't typically do, so they aren't
+ really equivalent.
+- Q12: How much of emacs C code base could be translated to
+ emacs-lisp? What is the minimum C code base necessary?  (seems
+ duplicate of Q6)
+ - A: Very hard questions to answer.  :)  Not generally
+ feasible/worth to convert most of it.
+- Q13: could we statically type elisp code (via macros?) to provide
+ more optimization hints to compiler?
+ - A: Hope to extend existing Elisp variable-type annotations to
+ arguments and use that for optimization.
+- Q14: Elisp and Python all are dynamically typed langauge, but
+ benchmark shows that Elisp runs slower than Python. Could we learn
+ some best practices from the Python community? As you mentioned.
+ make parameter type annotated is a promising point.
+ - A: Not sure if Elisp is really generally slower than Python. 
+ The Elisp bytecode VM is similar in design to the Python VM. 
+ Some native-compiled Elisp may already be faster than Python,
+ e.g. for certain math code.
+- Q15: Did you try to optimize with Rust too? What are your thoughts
+ on Rust for this particular optimization and security?
+ - A: Optimize what?  There is no Rust here.  :)  Rust is
+ interesting, though.  There may be some possibilities, e.g. with
+ regard to some similarities between Rust and some CL
+ implementations.
+- Q16: Why not implement Emacs Lisp in Guile and use Guile's
+ compiler?
+ - A: (not Andrea answering) This has already been tried and done,
+ lookup Guilemacs, e.g. on EmacsWiki.
+ - A: I think they meant to implement Elisp in Guile, and not
+ to replace Elisp with Scheme
+ - Yes, that's already been done.  Guile can already run
+ some subset of Elisp.  Look it up.  :)
+
+BBB:
+
+- Where did funding for your work came from? Will you be able to maintain this in the foreseeable future?
+- akrk: What kinds of applications do you envision native-comp enabling to work well in Emacs in the next few years, that wouldn't otherwise be possible?
+- Is this the first real-world practical use of libgccjit?
+- Is there any easy tasks you need help with?
+- yes, your updates and communication with the community have been great
+- I believe, going by the aliases, there's at least a couple of GNU compiler hackers in this BBB room now :)
+- you mentioned that these improvements are orthogonal to the garbage collector. Do you know of any work on that area?
+- hmmm XEmacs got a new GC, much better -- and it turned out *slower* than the original. This stuff is hard...
+ - NullNix: Really? Yesterday Stefan mentioned XEmacs's GC and said that it could be used in GNU Emacs
+ - Alas, quite noticeably slower :( cache locality, probably. It may be possible to make it faster with more work, though, while the existing Emacs one is probably at its implementation limits.
+ - IIRC, the XEmacs one was a generational GC. It was a long time ago though, ICBW
+ - The JDK and Go both have interesting GC designs in this area...
+- some level of "naive" optimism is necessary to start working on these big projects :)
+- what kind of packages do you think could be now practical with native comp?
+- ok, but what are the limits, in your opinion? How fast can elisp go?
+- relevant link: <https://www.emacswiki.org/emacs/GuileEmacs> (with caveats. lots of caveats). note: guile has native support for elisp -- but the lack of buffers, the different rep with strings, etc, was *hard*. the guile compiler changed a *lot* in v3. v1.8 -&gt; 2.0 -&gt; 2.2 -&gt; 3.0 were all big changes in the guile comp world
+- indeed :)
+- What are some other hobbies/interests of yours besides Emacs?
+ - Questioner: cool, reminds me of Thierry Volpiatto who's a professional climber, and there are several Emacsers who do DJing; that would be fun; "Emacs Plumbers Conf";
+- will you be presenting there or anywhere else in the next year?
+- Emacs keeps creeping toward being the Lisp Machine of the 21st century :)
+ - not only that, but with LSP and things like Doom, there is an increasing appeal for Emacs as an editor for the general public; native compilation will help with that
+- (Probably a live question)
+ - yes, myths about emacs-devel are hard to dispel
+ - Eli is so patient with the people on Reddit :D
+ - agreed, we owe him a lot
+- I've always wanted to do Emacs trading cards; like features, devs, etc :P
+ - that's a great idea :D
+ - I designed some for an old gaming clan years ago, it was a lot of fun
+ - Not American?~; in the US we have a tradition of baseball, and other sport playing cards, each with a picture and some stats on the back
+ - we have that with football (real football) in Europe :)
+- (Probably live question
+ - there might be even more from RMS that weren't accounted for as separate commits when the repo was converted to git
+- Where is the pre-git repository?
+ - I thought it was from bzr.
+ - I don't remember the details, but ESR's written about it on his blog IIRC
+- do you have 'wish list' features, things you long for Emacs to be able to do?
+- look for posts about reposurgeon
+- dickmao has a patch that makes Gnus async.... 8k lines from what I've heard
+ - I recall that dickmao posted it to the Emacs tracker but it was somewhat monolithic and wasn't well accepted
+ - i think he was asked to break it down to more reviewable units
+- One thing I wondered if you wanted to talk more about andrea was, to the prior point about "myths" about what emacs-devel is "like", there's also "make the culture your own". do you have advice on how to approach the community you haven't gotten to yet?
+
+BBB feedback:
+
+- Extremely impressive work, Andrea. Also, very needed for the long term sustainability of the platform. Thanks a lot for the hard work!
+ - Yes, if there were an Emacs Hall of Fame, Andrea would deserve a prominent place in it. :)
+ - we really do need an Emacs Hall of Fame so we can remember those who laid the foundations
+- I think I can safely say that we are very grateful for your work, because there aren't many people in the world that could do it and who also have enough interest in Emacs to do so :)
+- I have to go, thanks for replying to our questions, for the chat and for the incredible work, Andrea
+- Thanks very much, and for your work on gccmacs :D
+- thanks for the presentation and answering all of the questions.
+thanks to you andrea for your awesome talk, and for the extended q&a!
+
+IRC nick: akrl
+- What's the risk of (setq native-comp-speed 3)? will it melt my cpu?
+ - The same as the risk of using -O3 with gcc. It gives itself the latitude to aggressively optimise away code elements which it believes are unnecessary, up to and including violating the language semantics of lisp (which gcc doesn't inherently care about). -O3 is something which is fine for specific cases where you test afterwards, but you would never, for example, set -O3 globally in Gentoo.
+- so we can get type annotations in Elisp?!
+- Is there a benefit in setting native-comp-compiler-options to "-mtune=native -march=<cpu>"?
+- Would Eli agree on replacing the C parts of Emacs with Elisp? ;)
+- Why not implement Emacs Lisp in Guile and use Guile's compiler?
+ - https://www.emacswiki.org/emacs/GuileEmacs
+ - guile elisp is a very-long-term project, but so far has never been good enough: the problem seems to be, alas, time overhead involved in bidirectional conversion of strings and things like that: and unfortunately Emacs is all about strings... guile can run elisp (or something very like it) but that's not anywhere near replacing the elisp interpreter...
+
+Feedback:
+
+- what a great talk. this will rise the hype for emacs 28
+- This work is really amazing. Congratulations on the effort and the deep insights that made this possible.
+- excellent presentation and work that will be greatly appreciate by all Emacs users.
+- It is very humbling to see this depth of knowledge and how it positively impacts my day to day computing experience.
+- this is a very interesting update on his talk at last year's GNU Tools Track at LPC :)
+- The worse thing about native comp is that you get used to it after a couple of days and you don't appreciate it anymore! ;) which is not fair...
+
+[[!inline pages="internal(2021/captions/native)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/native-nav)" raw="yes"]]
diff --git a/2021/talks/news.md b/2021/talks/news.md
new file mode 100644
index 00000000..79cc9bb0
--- /dev/null
+++ b/2021/talks/news.md
@@ -0,0 +1,31 @@
+[[!meta title="Emacs News Highlights"]]
+[[!meta copyright="Copyright &copy; 2021 Sacha Chua"]]
+[[!inline pages="internal(2021/info/news-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# Emacs News Highlights
+Sacha Chua <mailto:sacha@sachachua.com> - pronouns: she/her, pronunciation: SA-shah CHEW-ah - <https://sachachua.com>
+
+[[!inline pages="internal(2021/info/news-schedule)" raw="yes"]]
+
+Quick overview of Emacs community highlights since the last conference
+
+You can find the links and images at
+<https://github.com/sachac/emacsconf-2021-emacs-news-highlights>
+
+# Discussion
+
+- how do I "type" an emoji? I know how to copy them from ~/bigsrc/emacs28/admin/unidata/emoji-test.txt, but there must be better ways...
+ - you could use emojify-mode (there's M-x emojify-insert-emoji)
+- Other notes:
+ - Oh wow, I didn't actually know about embark
+ - Yeah, switch to "smaller" turned out to be quite nice
+ - but noticed projectile greps faster than consult/counsel in a lot of cases
+ - Oh wow, the color picker!!!
+ - a huge thank you for such an understandable yet detailed summary of what's happening in the Emacs world!
+ - From [YouTube](www.youtube.com/watch?v=270ljvW6UrA&feature=em-comments): Excellent summary!! Thanks for the timestamps as well.
+
+
+[[!inline pages="internal(2021/captions/news)" raw="yes"]]
+[[!inline pages="internal(2021/info/news-nav)" raw="yes"]]
diff --git a/2021/talks/nongnu.md b/2021/talks/nongnu.md
new file mode 100644
index 00000000..9bfa990a
--- /dev/null
+++ b/2021/talks/nongnu.md
@@ -0,0 +1,32 @@
+[[!meta title="NonGNU ELPA Update"]]
+[[!meta copyright="Copyright &copy; 2021 Philip Kaludercic"]]
+[[!inline pages="internal(2021/info/nongnu-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# NonGNU ELPA Update
+Philip Kaludercic
+
+
+
+[[!inline pages="internal(2021/info/nongnu-schedule)" raw="yes"]]
+
+NonGNU ELPA was announced last year, as a package repository
+that will be enabled by default in Emacs, but doesn't require
+any copyright assignment. This means that a lot of popular
+packages can now be installed easier, without any additional
+configuration.
+
+In this talk I would like the give a reminder of what NonGNU
+ELPA is and how it works, update the participants on what has
+happened since last year and what maintainers have to do if they
+want their packages to be added to the repository.
+
+# Discussion:
+
+- It was really pleasant to listen to.
+
+[[!inline pages="internal(2021/captions/nongnu)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/nongnu-nav)" raw="yes"]]
diff --git a/2021/talks/nyxt.md b/2021/talks/nyxt.md
new file mode 100644
index 00000000..371f9ea5
--- /dev/null
+++ b/2021/talks/nyxt.md
@@ -0,0 +1,52 @@
+[[!meta title="Emacs with Nyxt: extend your editor with the power of a Lisp browser"]]
+[[!meta copyright="Copyright &copy; 2021 Andrea"]]
+[[!inline pages="internal(2021/info/nyxt-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs with Nyxt: extend your editor with the power of a Lisp browser
+Andrea mailto:andrea-dev@hotmail.com - pronouns: he/him -- https://ag91.github.io
+
+[[!inline pages="internal(2021/info/nyxt-schedule)" raw="yes"]]
+
+In 2021 browsers are essential if you use a computer. Even if Emacs
+users love text as a format, they may need to shop and video call from
+time to time (even more so in a pandemic!). Some of us modified their
+browsers to at least have the same keybindings as our editor of
+choice. What if I told you there is an Emacsy browser in the making?
+What if you could "ace-jump" within a web page? What if you could run
+a REPL to extend your browser while browsing? What if you could record
+macros?! The browser exists: its name is Nyxt!
+
+In this talk I will share why it has great potential, how you can
+integrate it with Emacs, and how you can migrate your Emacs mastery to
+the web!
+
+If you were wishing for a Lispy and Emacsy browser, you should not
+miss this talk!
+
+You can learn more about this at: <https://github.com/ag91/emacs-with-nyxt>
+
+# Discussion
+
+IRC nick: `andrea
+
+- I thought I read somewhere that this browser was attempting to allow extensions in a similar manner to Chrome/Firefox extensions. It'd be nice to have a central location to grab those, install them etc.
+- does nyxt also have an inspector, to edit html and css?
+ - `andrea: yes, I am just sending my JS to the inspector via Common Lisp
+- loving the youtube note taking with the timestamp
+- If you've been following Nyxt for a while, one of the core design goals is to push web browsing back towards its original conception of intertwingling readership and authorship.
+- you have some amazing elisp skills and ideas
+- Back when I was using Nyxt I had it tied to stumpwm and I puppeteered them both from emacs with sly.
+- I wonder how hard it would be to integrate or compile JS extension to a form available to Nyxt
+- `andrea: I need to ask about LibreJS: they have a discourse https://discourse.atlas.engineer/
+
+# Outline
+
+- 5-10 minutes: quick demo of running Nyxt from Emacs and a little explanation of the code necessary for integration
+<!-- - 20 minutes: same as above plus some time to share Nyxt other capabilities and showing a workflow where you can go full circle: Emacs, Nyxt, Emacs -->
+
+[[!inline pages="internal(2021/captions/nyxt)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/nyxt-nav)" raw="yes"]]
diff --git a/2021/talks/omegat.md b/2021/talks/omegat.md
new file mode 100644
index 00000000..f1bb4a3b
--- /dev/null
+++ b/2021/talks/omegat.md
@@ -0,0 +1,84 @@
+[[!meta title="Emacs manuals translation and OmegaT"]]
+[[!meta copyright="Copyright &copy; 2021 Jean-Christophe Helary"]]
+[[!inline pages="internal(2021/info/omegat-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs manuals translation and OmegaT
+Jean-Christophe Helary
+
+[[!inline pages="internal(2021/info/omegat-schedule)" raw="yes"]]
+
+Even if it is generally agreed that software localization is a good thing, Emacs is lacking in that respect for a number of technical reasons. Nonetheless, the free software using public could greatly benefit from Emacs manuals translations, even if the interface were to remain in English.
+
+OmegaT is a multiplatform GPL3+ "computer aided translation" (CAT) tool running on OpenJDK 8. CATs are roughly equivalent for translators to what IDEs are for code writers. Casual translators can benefit from their features but professionals or committed amateurs are the most likely to make the most use of such tools.
+
+When OmegaT, free software based forges and Emacs meet, we have a free multi-user translation environment that can easily sustain the (close to) 2 million words load that comprise the manuals distributed with Emacs, along with powerful features like arbitrary string protection for easy typing and QA (quality assurance), automatic legacy translation handling, glossary management, history based or predictive autocompletion, etc.
+
+The current trial project for French is hosted on 2 different forges:
+
+1. sr.ht hosts the source files
+ <https://sr.ht/~brandelune/documentation_emacs/>
+2. chapril hosts the OmegaT team project architecture
+ <https://forge.chapril.org/brandelune/documentation_emacs>
+
+The sources are regularly updated with a po4a based shell script.
+
+# Discussion
+
+IRC nick: brandelune
+
+- Q: Does this project encompass Emacs packages? Is there anything we can do, as package authors, to make translation easier?
+- Q: Could this package be used to generate translated and well-formatted MOBI or EPUB ebooks? Or better yet, an interactive multi-language Emacs Manual "Bible" App for Android?
+- Q: I love OmegaT and use it always. But I would have liked to hear about the experience of working both with Emacs and OmegaT. Can you tell us something about it?
+
+- translation is nice but typing anything non latin or cyrillic is hard with keyboard
+ - Try out the Emacs IMF. One of the main reasons I use Emacs. Input Method Framework: https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html
+- Hi, thanks for the talk. I love OmegaT and use it always. But I would have liked to here about the experience of working both with Emacs and OmegaT. Can you tell us something about it?
+- brandelune: wondering if anyone is interested in working on translating the emacs manuals to a language different from French. I know there are ongoing attempts in a number of languages (Japanese for one). LibreOffice JA has worked with "machine translation post editing" (MTPE in the "industry") and they seem to have produced good results.
+ - i'd definitely be interested, tho not sure i'll have the time anytime soon. but if there's a mailing list i'd be interested in subscribing or joining an irc channel.
+
+Feedback:
+
+- OmegaT looks very powerful: it goes to show how much work goes into translations; work that we sometimes take for granted
+- I once had to translate a document the old-fashioned way: it was painful... Will check OmegaT afterwards. Thanks!
+
+# Outline
+
+- Duration: 10 minutes
+- Software introduced during the presentation
+ - [po4a](https://po4a.org) a tool to convert documentation formats to and from the commonly used `gettext` **PO** format.
+ po4a supports the `texinfo` format along with many others.
+ - [OmegaT](https://omegat.org) a "computer aided translation" tool used by professional (and amateur) translators to efficiently combine translation resources (legacy translations, glossaries, etc.) so as to produce more consistent translations.
+
+During this short presentation, I will address:
+
+- The specificities of the Emacs manuals and the difficulties they present to the translator
+- How to convert the texi and org files to a format that translators can handle
+- How to adapt OmegaT to the Emacs manual specificities
+- How to use OmegaT features such as arbitrary string protection, legacy translation handling, glossaries, autocompletion, QA, etc.
+- How to use OmegaT with a team of 2 (or more) translators working at the same time
+
+
+I will *not* discuss:
+
+- How to create an OmegaT project
+- How to set up an OmegaT team project
+- How to use OmegaT from the command line to work in localization pipelines
+- How to use machine translation and MT "post-edit"
+- How to convert back the translated files to texi format
+- How to install translated texi files for use in Emacs
+
+People who are interested in knowing more about OmegaT are invited to check the [online user manual](https://omegat.sourceforge.io/manual-latest/en/).
+
+# Personal information
+- Name pronunciation: [ʒɑ̃kRstɔf elaRi](https://doublet.jp/wp-content/uploads/2021/11/jch.ogg)
+- Pronouns: he
+- Mostly free software for translators Homepage: [https://mac4translators.blogspot.com](https://mac4translators.blogspot.com)
+- Preferred contact info: [jean.christophe.helary@traduction-libre.org](jean.christophe.helary@traduction-libre.org)
+- Links for sponsoring/supporting: [https://doublet.jp](https://doublet.jp)
+
+[[!inline pages="internal(2021/captions/omegat)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/omegat-nav)" raw="yes"]]
diff --git a/2021/talks/org-outside.md b/2021/talks/org-outside.md
new file mode 100644
index 00000000..e13948b0
--- /dev/null
+++ b/2021/talks/org-outside.md
@@ -0,0 +1,153 @@
+[[!meta title="The use of Org mode syntax outside of GNU/Emacs"]]
+[[!meta copyright="Copyright &copy; 2021 Karl Voit"]]
+[[!inline pages="internal(2021/info/org-outside-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# The use of Org mode syntax outside of GNU/Emacs
+Karl Voit
+
+[[!taglink CategoryOrgMode]]
+
+[[!inline pages="internal(2021/info/org-outside-schedule)" raw="yes"]]
+
+With the rising interest in Org mode, the GNU/Emacs community gained
+much momentum in the last decade. Being [a nicely designed lightweight
+markup
+language](https://karl-voit.at/2017/09/23/orgmode-as-markup-only/),
+Org mode does not only benefit users of GNU/Emacs. There are many
+tools and services supporting Org mode syntax documents that do have
+no direct connection to GNU/Emacs. I would like to elaborate on the
+advantages on using Org mode syntax for arbitrary text outside of
+GNU/Emacs for better typing usability and collaboration tasks.
+
+Unfortunately, we do face some issues with the current situation.
+First of all, we do already have a number of non-Emacs tools that do
+support Org mode syntax. Then, we also do have an unclear consensus of
+what it takes to "support Org mode" without re-implementing the whole
+feature-set of Org mode of GNU/Emacs.
+
+For that purpose, I came up with a new name for the syntax of the Org
+mode lightweight markup language: **Orgdown**.
+
+Please do visit the [Orgdown
+homepage](https://gitlab.com/publicvoit/orgdown) and read my
+motivation article [Orgdown - a New Lightweight Markup Standard for
+Text Documents](https://karl-voit.at/2021/11/27/orgdown/) for further
+information.
+
+# Discussion
+
+Pad:
+
+- Q1: Great talk. I have been following your work on PIM for a while
+ (incl. a sneak read of your dissertation:-). Just curious, what
+ would you personally use Orgdown for?
+ - A: Oh, this would be a very loooong answer. I think you want to
+ visit:
+ - <https://karl-voit.at/tags/emacs/> and go to other pages
+ like <https://karl-voit.at/2019/09/25/using-orgmode/>
+ - Basically, Orgdown is already part of my workflows since
+ years: <https://github.com/novoid/lazyblorg/> or
+ <https://github.com/novoid/appendorgheading/> and much more.
+
+BBB:
+
+- Hi Karl. I was wondering, does the specification make any restrictions with regard to indentation levels or hard vs. soft line breaks? Do you have any type of test suites that an implementation can use to be "certified" as orgdown(1)?
+- Are you worried about the different levels of orgdown leading to the same confusing situation we have with Markdown?
+- I think the ability to indicate that some tools are compatible with org is fantastic!
+- Less of a question and more of an idea: I feel like it might be clearer to have more "semantic" names for orgdown such as "basic" orgdown, "full" orgdown or something. Those names are not great, but I think that might make it easier to remember what is what. Thoughts? Was there a specific reason for choosing a numbering system?
+ - I like the Idea very much. There are some Mobile Markdown/Text Editors which shy away from support for org-mode. Maybe with orgdown support will be more widespread.
+ - Questioner: And we should really try to proliferate the orgdown compatibily
+- Was the syntax specification based on commonmark in any way?
+- I think my main concern when writing in org mode at the moment is that exporters aren't heavily test (I found the plain text export was accidentally mixing spaces and tabs in indentation). Do you have any thoughts on a specification of reference implementation for an export process? Or is that out-of-scope?
+- although usb 3.2 2x2 is also not much clearer
+- Oh, tags are not included in orgdown1 ... would this come in 2, or is there some workaround?
+- I like the Idea very much. There are some Mobile Markdown/Text Editors which shy away from support for org-mode. Maybe with orgdown support will be more widespread. I did actually plan on making an org-roam focused app, for which I will definitely include the orgdown compatibility! Very excited about this
+ - You already answered this (tags). Sounds good to keep it simple at first.
+- On the gitlab page it mentions that GH/GL have 95% support for orgdown: what is the 5 missing percent?
+- Are you hoping for most of this discussion to happen through GitLab?
+- Shame that gitlab does not have a github like discussion page yet
+- Did you get any feedback from the Org mode maintainers?
+- Just wanna preface this that I don't wanna complain about GitLab. Just also bringing up what a few folks on #emacsconf said as well. Sourcehut could be used, especially because of its mailing lists feature. The only other reason I could see that being interesting is that the head of Sourcehut is a large Gemini advocate as well. That could motivate more attention within the growing Gemini community for using Orgdown (outside of Emacs).
+- Yeah, honestly, I'm excited to see what the rest of the Org community would want. Whatever platform, I'm excited to start contributing when I can.
+- There seems to be a similar simplify-the-org-format approach in this recent neovim project: <https://github.com/nvim-neorg/neorg,> FYI. Might be worth looking to see if orgdown1 is compatible
+- neorg seems to be an expanded org-mode syntax and is not compatible with orgmode
+
+BBB feedback:
+
+- I think no tags is a good idea, very implementation specific
+- I think it's a fantastic idea, and the initial proposal is very good!
+- i need to go, but thanks for introducing the idea, excited to see where it goes!
+- Thanks for your proposal. I really hope it will work out.
+
+IRC: (nick: publicvoit)
+
+- is there a tree-sitter parser for orgdown already? :P
+- it seems to me that as org evolves, either orgdown eventually becomes incompatible with org or org is prevented from changing because it would break orgdown. I guess backcompat with existing org documents constrains org-mode this way already, though
+- what level would you call github's implementation is?
+- i'm not sure if we want a proliferation of org-syntaxes like markdown's
+- Disentangling "org" the markup language and "org"/"org-mode" the piece of software that runs inside Emacs is long overdue
+- I gotta say, why "Orgdown" and not just "Org"? That way we've got "Org" (the markup syntax) and "Org-Mode", the mode for that. Just delineate the mode from the thing the mode handles.
+ - there was a move in the opposite direction, using "Org" instead of "Org-mode" for the piece of software that runs inside Emacs, which to me is where the problem arises...
+- +1 for "org" aas the format name, and the (already present) derived handling of the format being org-mode! To be clear, +1000000% in favour of this generally.
+- Next year. Talk on presenting org as a mime-type. Who?
+ - it's officially being considered as a 'thing to be done or at least talked about', but I don't have a better status than that.
+- I think the org/orgdown split makes sense: orgdown stripped-down org
+- Why GitLab? GitLab.com requires reCAPTCHA to sign up, and nonfree cloudflare js to sign in
+ - publicvoit: I wanted to test an alternative to GitHub which I was using so far.
+ - I recommend codeberg.org, notabug.org, sr.ht, or savannah.nongnu.org
+- already uses the ".org.txt" file extension, so that tools that don't otherwise support the org file type will at the very least read them
+- sorry to have missed out on the discussion during your talk, but I'm extremely interested in getting org working outside elisp (re: https://github.com/tgbugs/laundry/tree/next). I started there long ago, at this point the issues that really need standardization is org-babel, but in order to do that we need the syntax settled, which has turned out to be a _lot_ of work
+- having orgdown as a way to talk about files that have org syntax seems like it is a critical piece for effective outreach
+- would it be worth considering a decoupling of the "orgdown" proposal into 1) just a proposal to rename "org" the markup as "orgdown" (vs "org-mode" for the piece of software running in Emacs), and 2) all the rest as in the levels/etc? Just to not put the first at risk of non-adoption because of the contents of the second? There seems to be a lot of positive sentiment towards solving #1 for sure.
+ - orgdown is not org, the markup
+ - orgdown is lightweight org, it does not have all the features
+ - In general I agree, there will be issues with how to approach the levels
+ - publicvoit: Valid approach but this train has left the station already by the decision of myself to provide OD1 to the public this weekend.
+- To be fair, I personally don't think adding tiers to org-mode makes much sense
+ - We should rather have a feature matrix for stuff like pandoc to check against
+ - developing the test suite will get us there, and then we can have the discussion about how to market the levels
+- I think we could adopt orgdown almost immediately without issue
+- I don't really see a big issue with org-mode vs. org vs. orgWHATEVER though
+ - there are major search and discovery issues with bare "org"
+ - I tend to use "org syntax" at the moment, but it isn't catchy enough
+
+
+From [YouTube](www.youtube.com/watch?v=JLuTYkhFDQY&feature=em-comments):
+
+- Great idea! I’m not sure about the name though. To me it implies it has something syntactically to do with Markdown (which it doesn’t). In my view OrgMode markup is far more expressive than Markdown. It’s almost a new markup language in and of itself. So, how about OrgMark or Org Mode Markup Language aka OMML.
+
+Links and other notes:
+
+- The article from 2017 that started the whole discussion: "Org Mode
+ Is One of the Most Reasonable Markup Languages to Use for Text"
+ <https://karl-voit.at/2017/09/23/orgmode-as-markup-only/>
+- Orgdown homepage: <https://gitlab.com/publicvoit/orgdown>
+- Orgdown motivation article:
+ <https://karl-voit.at/2021/11/27/orgdown/>
+
+# Outline
+
+- The term Org mode stands for different things
+- The Org syntax is better than much more dominant lightweight markup languages
+- We do have an unclear consensus of "Org mode support"
+- A new name for the syntax alone: Orgdown
+- What Orgdown should be and should not be
+- Advantages of Orgdown for everybody
+- Orgdown comes in different levels: Orgdown1
+- OD1 Compatibility Percentage
+- The future of Orgdown
+- Your contribution!
+
+# Personal information
+
+- Name pronunciation: sounds like "karl foit" ([IPA](https://en.wikipedia.org/wiki/International_Phonetic_Alphabet): [kaʁl](http://ipa-reader.xyz/?text=ka%CA%81l) [foɪt](http://ipa-reader.xyz/?text=fo%C9%AAt))
+- Pronouns: he/him
+- Homepage: [https://Karl-Voit.at](https://Karl-Voit.at "personal web page of Karl Voit")
+- Preferred contact info: EmacsConf21 (ɶt) Karl-Voit.at
+
+[[!inline pages="internal(2021/captions/org-outside)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/org-outside-nav)" raw="yes"]]
diff --git a/2021/talks/pattern.md b/2021/talks/pattern.md
new file mode 100644
index 00000000..9779161b
--- /dev/null
+++ b/2021/talks/pattern.md
@@ -0,0 +1,285 @@
+[[!meta title="Emacs as Design Pattern Learning"]]
+[[!meta copyright="Copyright &copy; 2021 Greta Goetz"]]
+[[!inline pages="internal(2021/info/pattern-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs as Design Pattern Learning
+Greta Goetz
+
+[[!taglink CategoryPhilosophy]]
+
+[[!inline pages="internal(2021/info/pattern-schedule)" raw="yes"]]
+
+How do we manage today? This presentation is for people interested in thinking about Emacs as a tool sophisticated enough to cater to the complex assemblage of tasks, people, activities/outcomes, tools (Markauskaite & Goodyear). Some software oversimplifies. Emacs both helps users implement design pattern learning that can cope with complexity while also modeling design pattern learning. By championing the opportunity for users to also be co-creators (cf. Beaty et al.), the free software design at the core and center of Emacs teaches us a way of "being" (Alexander, Gabriel) that can be extended to both the Emacs community and beyond, in a knowledge of how to live (Stiegler, Illich).
+
+1. Definition of design patterns and relation to Emacs
+2. Why this approach matters
+3. Managing complexity: Emacs as mind map
+4. Emacs as design pattern framework
+5. Personal customization
+6. Implementing Emacs as a model for learning
+7. Emacs as accommodating complex social, community assemblages
+
+# References
+
+- Andler, D. & Guerry, B. (Eds.). *Apprendre demain: Sciences cognitives et éducation à l’ère numérique*, 137-154. Paris: Hatier.
+- Alexander, C. (1977). *A pattern language*. New York: Oxford University Press.
+- Alexander, C. (1979). *The timeless way of building*. New York: Oxford University Press.
+- Alexander, C. (1993). *A foreshadowing of 21st century art: The color and geometry of very early Turkish carpets*. New York: Oxford University Press.
+- Beaty, L., Cousin, G., & Hodgson, V. (2010). Revisiting the e-quality in networked learning manifesto. In L. Dirckinck-Holmfeld, V. Hodgson, C. Jones, M. de Laat, D. McConnell, & T. Ryberg (Eds.), *Proceedings of the 7th International Conference on Networked Learning* (pp. 585–592). Aalborg: Lancaster University. http://www.lancs.ac.uk/fss/organisations/netlc/past/nlc2010/abstracts/PDFs/Beaty.pdf. Accessed 30 October 2021.
+- Chua, S. (2021). Completing sketches. https://sachachua.com/dotemacs/#org092e0d5. Accessed 29 October 2021.
+- Crichton, M. (1983). *Electronic life*. New York: Knopf.
+- Gabriel, R. (1996). *Patterns of software*. New York, Oxford: Oxford University Press.
+- Goodyear, P. & Retalis, S. (2010). Learning, technology and design. In Goodyear, P. & Retalis, S. (Eds.). *Technology-enhanced learning: Design patterns and pattern languages*, 1-27. Rotterdam, Boston: Sense Publishers.
+- Guo, P. (2018). Students, systems, and interactions: Synthesizing the first
+four years of Learning@Scale and charting the future. L@S 2018, June 26–28, 2018, London, United Kingdom. DOI: https://doi.org/10.1145/3231644.3231662. <https://pg.ucsd.edu/pubs.htm>. Accessed 25 October 2021.
+- Guo, P., Kim, J. & Rubin, R. (2014). How video production affects student engagement: An empirical study of MOOC videos. ACM Conference on Learning at Scale. <https://pg.ucsd.edu/pubs.htm>. Accessed 25 October 2021.
+- Illich, I. (1973). *Tools of conviviality*. New York: Harper & Row.
+- Kim, J., Guo, P., Seaton, D., Mitros, P., Gajos, K. & Miller, R. (2014). Understanding in-video dropouts and interaction peaks in online lecture videos. ACM Conference on Learning at Scale. <https://pg.ucsd.edu/pubs.htm>. Accessed 25 October 2021.
+- Markauskaite, L. & Goodyear, P. (2017). *Epistemic fluency and professional education: innovation, knowledgeable action and actionable knowledge*. Dordrecht: Springer.
+- Markel, J. & Guo, P. (2020). Designing the future of experiential learning environments for a post-COVID world: A preliminary case study. NFW ’20 (Symposium on the New Future of Work), August 3–5, 2020, Virtual Event. <https://pg.ucsd.edu/pubs.htm>. Accessed 25 October 2021.
+- Morin, E. ([2004] 2008). *La Méthode - tome 6: Éthique*. Éditions du Seuil: Paris.
+- Planet Emacs Life. <https://planet.emacslife.com/>. Accessed 25 October 2021
+- Stallman, R. (2002). My Lisp experiences and the development of GNU Emacs. https://www.gnu.org/gnu/rms-lisp.en.html. Accessed 29 October 2021.
+- Stiegler, B. (2018). *The neganthropocene*. Open Humanities Press.
+- Trocmé-Fabre, H. (1999). *Réinventer le métier d’apprendre*. Paris: Éditions d’organisation.
+
+# Discussion
+
+Pad:
+
+- Q1: Any reference to a Christopher Alexander book that you liked
+ most?
+ - (peer answer A:
+ - Alexander, C. (1977). A pattern language: towns, buildings,
+ construction. New York: Oxford University Press.
+ - Alexander, C. (1979). The timeless way of building. New
+ York: Oxford University Press. (thanks!!)
+ - also check out: Gabriel, R. (1996). Patterns of software:
+ tales from the software community. New York: Oxford
+ University Press.
+ (<https://dreamsongs.com/Files/PatternsOfSoftware.pdf>)
+ - Alexander, C. (1993). *A foreshadowing of 21st century art:
+ The color and geometry of very early Turkish carpets*. New
+ York: Oxford University Press.
+ - A: The peer answer is excellent. If you are looking for an 'entryway' into Alexander, there is also his essay A City Is Not A Tree, <https://raw.githubusercontent.com/dmvaldman/library/master/essays/Alexander%20-%20A%20City%20Is%20Not%20A%20Tree.pdf>.
+- Q2: You are making a great case for the ease-of-use, humanizing, and
+ empowering aspects of Emacs, but how does this align with the
+ initial difficulty for many users in learning Emacs? What is the
+ weakness of Emacs here, in relation to these design patterns?
+ - A: If we take a Vygotskyean approach to learning, we begin step
+ by step, gradually building on to what we know. What I found
+ fascinating as a non-programmer coming to Emacs was how this
+ approach works even in Emacs. Particularly if we are taking a
+ human-based approach to Emacs, it has no weakness here, because
+ humans can only move forwards from where they are, not where
+ they want to be. So Emacs becomes a good teacher in
+ process-based learning. We need to hierarchize what we know,
+ what we are ready/motivated to learn next, and also remember the
+ time required for growth.
+- Q3: How do you suggest emacs users should go about desinging their
+ work(flow) patterns?
+ - A: Strangely, I seem to have answered this above!
+- Q4: Emacs provides a lot of extensibility as mentioned in your talk.
+ This is a good thing, but such extensibility and possiblility can
+ sometimes inhibit creativity (for me at least). How could we
+ incorporate constraints in to how we use Emacs, in order to deal
+ with the possibilities that might make it's use more complex? A
+ great answer, thank you!
+ - A: I love this question. What about thinking about Emacs as
+ one's own path of desire? What do we want to do most with it?
+ But also, because Emacs is the ultimate blank canvas, in this
+ context I would recommend reading Cameron's "Blasting through
+ blocks" chapter in The Artist's Way to get through any related
+ anxiety and find one's 'creative purpose' with Emacs. And
+ building on an answer from above, taking things one
+ project/activity/outcome at a time. Trusting that over time
+ skills and proficiency grow.
+ - I like the idea about "Emacs as one's own path of
+ desire". It's all in my init.el.
+ - Emacs is seriously the best in this respect!  :) And it is
+ so great to be part of this conference to be among like
+ minds!:)
+- Q5:In your opinion, what approaches might be tried to introduce
+ individuals to these aspects of emacs's user experience? In my
+ experience, many of my co-workers are often impressed with what I am
+ able to do with emacs, but they remain reticent to attempt it
+ because I find it difficult to produce a suitably encapsulating
+ "elevator pitch" for it.
+ - A: Not everyone wants to think about the tools that they use.
+ Haha, that is why I am trying to get one convert at a time, and
+ let them convert others in their midst :)
+- Q6: Are there ways to reach out to you after the conference to dig
+ deeper here?
+ - A: I blog at <https://gretzuni.com>; my professional site is <https://gretagoetz.com>.
+- Q7:On the mention of emacs being 'frontierless': Doesn't this
+ result in a kind of 'characterless' or 'non-definied' space? For
+ example, if I learn a musical instrument, I am bound by various
+ frontiers/horizons (12 tone system, the tamber of the particular
+ instrument, etc). Surely there are similar limits on the
+ extensibility of emacs and the possibilities it offers for 'human
+ expansion'. If so, which limits/boundaries of emacs do you see as
+ most meaningful/impactful on growth and transformation?
+ - A: That is a really interesting question. Aren't the limits
+ here our knowledge? I am really stuck on the idea of Lisp and
+ its dialects as being particularly philosophical. Any time I
+ look at what people do with Lisp it seems to be profoundly
+ related to design on a deeper level. I will leave it here for
+ now - but thank you for the question, I will be sure to mull it
+ over and possibly blog about it at some point...
+ - Hi! Thank you for the answer, that was exactly what I was
+ thinking about (elisp being something particular/defining to the
+ emacs experienc/environment). I don't know lisp/programming
+ myself, so I was just interested in your perpsective! Really
+ loved the talk a lot! But the way, the question came from a
+ hermeneutic perspective, where boundaries/horizons are essential
+ for defining/demarcating the self (of course, within a boundary
+ there can be endless play, but the limits set the 'rules' for
+ play, and therefore create meaning).Thanks again!
+ - A: Wow - a fellow hermeneuticist?! 
+ - Haha, yes. In my past life I studied it ;) also studied a lot of
+ Stiegler too, so was interested to find him in the talk!
+ - A: That is quite uncanny! The combination of the three (plus Emacs)
+ have given me a whole new perspective on life - and I wonder why
+ Stiegler didn't pursue Free Software more, though he does nod
+ to it here and there. Do you have any work to share, would you
+ like to keep in touch?
+ - sure! would be great! :) My main area was Ricoeur, so I have
+ written some things on Ricoeur and technology (there was a
+ recent volume on his work, and I wrote something on
+ postphenomenology and ricoeur) I've since left academia though,
+ because it was quite difficult to find full-time work
+ (especially since hermeneutics is so
+ underappreciated/underreppresented! so, I always get excited to
+ hear others talking about it ;)
+ - A: Yes, I know what you are talking about and actually the whole
+ future - and present - of academe is an interesting question -
+ haha that I think is related to Emacs, I mean, we do live in the
+ knowledge age so we need tools to help with this. Ricoeur has a
+ great essay on ideology and science critique, which is so limber
+ (as opposed to so much calcified academic thinking) and I am so
+ interested in exploring approaches to academe that 'continue
+ the ongoing work of the hermeneuticist' (I am paraphrasing him
+ here) that make use of technology, possibly through something
+ like Ted Nelson had in mind, where we literally trace the traces
+ among ideas... wow, that's a mouthful of a comment. Ha! I am
+ overjoyed at the opportunity for this conversation, thank you so
+ much! :) 
+ - really interesting that you are referencing Ted Nelson in
+ this context. I think org-roam, in many ways, resembles what
+ he had in mind with Xandadu; well, with the limitation that
+ org-roam only serves Personal Information Management, not
+ our civilisations' as he intended with Xanadu.
+ - A: That's an interesting point - and related to how org-roam writer Leo is now extending org-roam to collaborative work as he explains in his talk <https://emacsconf.org/2021/talks/erg/>.
+ - Yes! the feeling is mutual :) I really love Ricoeur's general
+ style and approach to questions. Unfortunately he didn't write
+ much about technology itself, which made my job quite difficult!
+ But I did meet a friend of his once that told me that, in the
+ 70s, Ricouer had asked him "are we still writing when we use
+ computers?". So, he was thinking about the question at least. I
+ only discovered emacs after I finished all that word, but since
+ then I can finally say that 'yes!' we can 'write' using
+ computers (with writing being a core activity of the self for
+ Ricoeur). Also, I just wish I had emacs instead of just writing
+ so many academic papers in microsoft word! 
+ - A: Yes, the moment of being freed from that software box and
+ having all the LaTeX options in Emacs (here, I list my fave) is
+ like stepping into technicolor out of black and white - to this
+ day, I still feel that way! So much you wrote is interesting.
+ Stiegler's concern of whether technology - like the writing pad
+ in Plato earlier - would strip us of our intellectual capacity
+ (I can see that possibly happening with automaticizing tools
+ like - maybe Excel is a good example, because one does not
+ really have to think about what one is doing). But Emacs use
+ prompts us to ask questions and design *exactly* what we are
+ looking for.
+ - wow, yes, that is so interesting. I never considered the
+ question of desire and emacs until your talk, and it was
+ definitely one of the most interesting parts!
+ In my work I was also mostly interested in Freud (the role of
+ 'technique' in psychoanalysis) and also Foucault's later
+ lectures on hermeneutics of the self/technologies of the self.
+ The angle of 'desire' in relation to personal
+ configuration/design was so interesting to me and like an
+ 'aha' moment. I'll definitely be thinking about it more!
+ Thank you so much again for the talk and all the responses!
+ - A: Thank you too, and hope we'll be in touch!
+ - Yes :) enjoy the rest of the conference!
+ - A: Likewise :)
+- Q8: What was that Crichton quote? That was neat! (From the
+ references - Crichton, M. (1983). *Electronic life*. New York:
+ Knopf.)
+ - A: Thank you - I hope that general computing will have its day!
+- Q9: Greta, you seem to be an academic researcher. Any of your
+ publications or other good references on this topic that you can
+ share/link here?
+- Here are two:
+- <https://doi.org/10.1080/00131857.2021.1962706> A song of teaching
+ with free software in the Anthropocene
+- <https://10.1007/s42438-020-00188-3> The odyssey of pedagogies of
+ technoscientific literacies
+
+**Links and other notes:**
+
+- Design Pattern: macro solution; human-centered
+- Emacs is a design pattern for learning.
+- Why do we care about design patterns?
+- Emacs as a mental map.
+- Everyone's Emacs is their own.
+- The development of the Emacs communitiy is similar to the [free]
+ core of Emacs devlopment.
+
+IRC:
+
+- this paper is relevant to exploring the space of design patterns: https://www.aaai.org/Papers/Workshops/1998/WS-98-08/WS98-08-024.pdf it's old and a little cryptic, but a good paper. it's "Recommender Systems for Problem Solving Environments"
+ - greta: Thanks for that link!
+- if I may ask, what's the little toy figure in the background, looks nice :D
+ - A wooden (fake) Transformer :)
+- do you think emacs could have implemented with this design pattern, but in another programming language?
+ - Emacs Lisp as a dialect of Lisp shares its philosophical qualities. I often think about what Norvig wrote about Lisp back in the day, e.g. <https://www.norvig.com/lisp_talk_final.htm>, and while there are some people who feel strongly that Lisp's time is passed, I think that Emacs shows that it is the opposite: that we haven't fully taken advantage of Lisp's potential. Another example would be what Rick Hickey has done with Clojure, and recommend his talk Are We There Yet, <https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/AreWeThereYet.md>.
+
+Feedback:
+
+- That's a great point about the sketches, and why Emacs graphical improvements are important.
+- yes this talk is excellent. i'm very happy to find some of my thoughts echoed here in such a clear and well researched way
+- this is exactly my experience. using/learning emacs is THE way that i gained the skills, the learning to learn skills i needed to become a professional programmer (which is incidental to the growing up into a hacker :P)
+- a friend of mine (my original emacs mentor) has been telling me about Ivan Ilich and wondering about how his philosophy lines up with free software, so this is amazing synchronicity of thought for me.
+- cognitive democracy is a very useful phrase to describe emacs (and FOSS) culture
+- This is saying out loud in concrete language everything I've felt about emacs and the community since e.g. the package system became available and social git forges made it easy to explore others' configs
+- What a wonderfully diverse set of viewpoints so far. Not just viewpoints but concepts I would never have expected in an ‘Emacs conf’. I'm glad I dropped by. Thank you greta.
+- This quote of Richard Gabriel rings a bell in the emacs context: "If it is small, it was written by an extraordinary person, someone I would like as a friend; if it is large, it was not designed by one person, but over time in a slow, careful, incremental way" (Gabriel, R. (1996). Patterns of software: tales from the software community. New York: Oxford University Press. (https://dreamsongs.com/Files/PatternsOfSoftware.pdf)
+- I just finished listening to Greta Goetz's talk and I love it so much.
+- I listened to it after listening to acdw's talk on the frownies mode, a little mode to do something very simple, how he met people, wrote that mode, published it, got feedback. Your talk felt like an excellent background on the experience. The part about helping each other also really resonated with me. I would like to search for how many messages I must have posted to comp.emacs and gnu.emacs.help back in the days. I feel like it must have been about 2000 of them. :) Much of that long before I started writing any code.
+
+# Speaker release
+
+By submitting this proposal, I agree that my presentation at
+EmacsConf 2021 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials")
+under the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use
+of the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+
+[[!inline pages="internal(2021/captions/pattern)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/pattern-nav)" raw="yes"]]
diff --git a/2021/talks/professional.md b/2021/talks/professional.md
new file mode 100644
index 00000000..5a16d2c1
--- /dev/null
+++ b/2021/talks/professional.md
@@ -0,0 +1,83 @@
+[[!meta title="Using Org-Mode For Recording Continuous Professional Development"]]
+[[!meta copyright="Copyright &copy; 2021 Philip Beadling"]]
+[[!inline pages="internal(2021/info/professional-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Using Org-Mode For Recording Continuous Professional Development
+Philip Beadling
+
+[[!taglink CategoryOrgMode]]
+
+[[!inline pages="internal(2021/info/professional-schedule)" raw="yes"]]
+
+I recently had the pleasure of being audited for my CPD record with one
+of the large engineering professional bodies. I decided to harness
+org-mode's TODO lists to record CPD items and my progress against them
+completely within Emacs. I also wanted the ability to export the data
+in a well presented, compact format for auditing submission.
+
+The project was a success (I passed the audit) and the resulting system
+integrates really well into my wider daily Emacs workflow, making future
+CPD recording seamless.
+
+The talk will explain how I tweaked and extended org-mode to get it to
+record the data I wanted, followed by a demo.
+
+A basic demo org file with embedded elisp can be seen here:
+<https://raw.githubusercontent.com/falloutphil/Misc/master/cpd.org>
+
+A basic generated PDF from the basic demo is here:
+![img](https://preview.redd.it/nvdpmityhuw51.png?width=1169&format=png&auto=webp&s=e0c5080560c877aa02933a40c224e52b8a1fed3b)
+
+I have a much more involved example I could also use for the demo.
+
+The template contains a few examples. Examples are Goals that are split
+up into Activities. All Activities must have a Goal, and within a Goal
+all activities must be complete for the Goal to be automatically set to
+complete.
+
+It's basically leveraging Org Capture Templates to create custom Goals
+and Activities.
+
+On save or update these are then rendered into a table using Column View.
+
+Activities are sorted by date they were completed on.
+
+The Column View is pre-configured to be exported to PDF in a condensed
+but readable format for submission. It stays fairly readable even when
+the pages get busy.
+
+The elisp required is all under the "Config" bullet and Emacs will ask
+to execute it on opening the Org file. The elisp concerns itself with
+nice custom org capture functions and a few functions to ensure nice
+formatting on export, etc.
+
+# Discussion
+
+IRC nick: pbeadling
+
+- Very impressive use of capturing
+- This is madness, and I am a little ashamed of saying that I have wanted to do something similar for personal reasons. I feel it is an overkill I cannot justify to myself
+ - pbeadling: For me it largely motivated by trying to make the whole task more interesting
+ - i think of like lots of us falling in lots of rabbit holes, making for quite a cavernous attack surface, when we consider Emacs is including it's various package arcives.
+- hmm, hooking is a neat way to check in/ouut
+- the workflow looks good but why he isn't integrating this with org agenda ?
+ - pbeadling: Agree - merging with org-agenda is the next thing I want to do with this
+ - pbeadling: For the CPD thing the biggest limitation I think is that you have to have the org file in the current buffer to add items - really you want to be able to capture CPD items from anywhere in your workflow - when I get some time I'll update the script to integrate better with capture and agenda like this.
+- <https://www.reddit.com/r/emacs/comments/jmpsdl/continuous_professional_development_record_in/>
+
+# Outline
+
+- 5-10 minutes:
+
+A quick walkthrough of the setup and functions, followed by a demo of how
+to add CPD items, and update them. Finally show generation of a PDF
+containing all the items tabulated and ready for audit review. I
+estimate this at approx 10 minutes.
+
+
+[[!inline pages="internal(2021/captions/professional)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/professional-nav)" raw="yes"]]
diff --git a/2021/talks/project.md b/2021/talks/project.md
new file mode 100644
index 00000000..d7f93c01
--- /dev/null
+++ b/2021/talks/project.md
@@ -0,0 +1,36 @@
+[[!meta title="Budgeting, Project Monitoring and Invoicing with Org Mode"]]
+[[!meta copyright="Copyright &copy; 2021 Adolfo Villafiorita"]]
+[[!inline pages="internal(2021/info/project-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Budgeting, Project Monitoring and Invoicing with Org Mode
+Adolfo Villafiorita
+
+[[!taglink CategoryOrgMode]]
+
+[[!inline pages="internal(2021/info/project-schedule)" raw="yes"]]
+
+In this talk I will present how we use Org Mode at Shair.Tech for
+budgeting, project monitoring, and invoicing.
+
+We are a small company and we are still tuning and improving the
+process, but with a bit of Emacs Lisp, the functions Org Mode
+provides, and reading here and there what other users do, we
+implemented an effective workflow we have been using for nearly a
+year, now, and with which we are very happy.
+
+# Discussion
+
+IRC nick: adolfo
+
+- Why is Michele working more than Adolfo???
+ - adolfo: I can answer that :-) because he is better than I am ;-)
+- watching this talk I really want to get the OPENED: cookie added
+- what is the difference between hledger and ledger ?
+ - adolfo: implementation. hledger is in Haskell, ledger written in C++; there are also some differences in the format supported
+
+[[!inline pages="internal(2021/captions/project)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/project-nav)" raw="yes"]]
diff --git a/2021/talks/research.md b/2021/talks/research.md
new file mode 100644
index 00000000..a0468c64
--- /dev/null
+++ b/2021/talks/research.md
@@ -0,0 +1,60 @@
+[[!meta title="Managing a research workflow (bibliographies, note-taking, and arXiv)"]]
+[[!meta copyright="Copyright &copy; 2021 Ahmed Khaled"]]
+[[!inline pages="internal(2021/info/research-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Managing a research workflow (bibliographies, note-taking, and arXiv)
+Ahmed Khaled
+
+[[!taglink CategoryOrgMode]]
+[[!taglink CategoryOrgRoam]]
+
+[[!inline pages="internal(2021/info/research-schedule)" raw="yes"]]
+
+[Configuration I use in Doom Emacs as part of my academic reading/notetaking workflow](https://gist.github.com/rka97/57779810d3664f41b0ed68a855fcab54)
+
+Researchers and knowledge workers have to read and discover new papers,
+ask questions about what they read, write notes and scratchwork, and store
+much of this information for use in writing papers and/or code. Emacs allows
+us to do all of this (and more) using simple text interfaces that integrate
+well together. In this talk I will talk about the following:
+
+a. Using elfeed and elfeed-score to read new papers from arXiv.
+b. Using org-ref to import arXiv papers of interest into a local
+bibliography.
+c. Using Emacs hooks with biber and rebiber in order to keep the local
+ bibliography clean and up-to-date with conference versions of papers.
+d. Using org-roam and org-roam-bibtex to take linked, searchable notes in
+org on research papers.
+
+This text-based workflow allows for keeping everything accessible under
+version
+control and avoids the platform lock-in of binary formats (e.g. Mendeley). I
+will share my Doom Emacs configuration for this workflow, but it is not
+limited
+to Doom.
+
+# Discussion
+
+- Are there any good packages for emacs/Lisp libraries that are similar to Matplotlib/Pyplot/Numpy?
+ - use numpy with org-mode and babel
+ - plotting is a bleak spot in the lisp space, racket has a built in plot library that is probably the best on that front
+- are these helper functions public?
+- this talk just gave me an idea, I organize repos inside ~/code/{github.com,gitlab.com,gnu.org,etc}/author@repository-name.git - and I can instead use a single directory and use this strategy for projectile-switch-project where author is one column, repository name is another, git remote is another, etc
+
+# Outline
+
+- 5-10 minutes: I will demo the packages I use in 5 minutes.
+<!--
+- 20 minutes: I will describe the packages I use in some detail and give a
+demo of them.
+
+- 40 minutes: I will describe the packages I use, give a demo of them, and
+include a video segment on configuring the packages in Emacs.
+-->
+
+[[!inline pages="internal(2021/captions/research)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/research-nav)" raw="yes"]]
diff --git a/2021/talks/rust.md b/2021/talks/rust.md
new file mode 100644
index 00000000..00e3d4c7
--- /dev/null
+++ b/2021/talks/rust.md
@@ -0,0 +1,36 @@
+[[!meta title="Extending Emacs in Rust with Dynamic Modules"]]
+[[!meta copyright="Copyright &copy; 2021 Tuấn-Anh Nguyễn"]]
+[[!inline pages="internal(2021/info/rust-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Extending Emacs in Rust with Dynamic Modules
+Tuấn-Anh Nguyễn
+
+[[!inline pages="internal(2021/info/rust-schedule)" raw="yes"]]
+
+Dynamic module support has been available since Emacs 25. It can be
+used to extend Emacs with native libraries, for performance,
+OS-specific features, or other functionalities that would take a lot
+of time to re-implement in Lisp. The officially supported language is
+C, which is tedious and error-prone to use. This talk discusses a
+**safe** alternative that is also a lot **more convenient**: writing these
+dynamic modules in Rust.
+
+
+
+# Outline
+
+- Walking through creating **a simple dynamic module** in
+ Rust, including setting up CI.
+- Going through and explaining the **available APIs**.
+<!--- 40 minutes: All of the above, together with reporting the experience
+ of using it in real packages (e.g. tree-sitter), as well as
+ discussing **challenges and potential improvements** to dynamic modules
+ in general.-->
+
+
+[[!inline pages="internal(2021/captions/rust)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/rust-nav)" raw="yes"]]
diff --git a/2021/talks/structural.md b/2021/talks/structural.md
new file mode 100644
index 00000000..03089a2d
--- /dev/null
+++ b/2021/talks/structural.md
@@ -0,0 +1,124 @@
+[[!meta title="Tree-edit: Structural editing for Java, Python, C, and beyond"]]
+[[!meta copyright="Copyright &copy; 2021 Ethan Leba"]]
+[[!inline pages="internal(2021/info/structural-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Tree-edit: Structural editing for Java, Python, C, and beyond!
+Ethan Leba
+
+
+
+[[!inline pages="internal(2021/info/structural-schedule)" raw="yes"]]
+
+[[!table header="no" class="speaker-details" data="""
+Name pronunciation | E-than LEE-ba
+Pronouns | he/him
+Homepage | <https://ethan-leba.github.io/>
+Preferred contact info | <ethanleba5@gmail.com>
+"""]]
+
+In this talk, I'll discuss a vision for how writing code could be, where the
+editing operations map directly to the primitives of the language itself -- and
+my humble attempt of implementing this vision. _tree-edit_ seeks to provides a
+structural editing plugin supporting conceivably any language with a tree-sitter
+parser.
+
+**Structural editing does not have to be relegated to lisps or niche DSLs.**
+
+I liken the state of code editing today to writing assembly. The reason why
+people like Python more than assembly is that for most purposes, the building
+blocks of the language are mismatched with our thought process. We don't think
+in terms of registers and addresses, we think in terms of variables, functions,
+etc. So when we write and edit code, why do we edit in terms of deleting,
+inserting, replacing characters &#x2013; not wrapping, inserting, raising,
+deleting expressions and statements?
+
+I'll also discuss the implementation of tree-edit, which uses a novel
+combination of the fantastic
+[tree-sitter](https://github.com/emacs-tree-sitter/elisp-tree-sitter) parser
+with an embedded logic programming DSL ([miniKanren](http://minikanren.org/),
+using elisp port [reazon](https://github.com/nickdrozd/reazon)) to power it's
+syntax tree generation.
+
+Check out the GitHub repo [here](https://github.com/ethan-leba/tree-edit)!
+
+# Discussion
+
+IRC nick: ethan
+
+- Q1: so tree-edit is orthogonal to the LSP features? 
+ - A: only uses tree-sitter yeah 
+- Q2:any chance you tried this with Clojure as well? 
+ - A: haven't tried it yet, i don't think tree-sitter-langs has a
+ clojure grammar AFAIK 
+- Q3: Would we be able to do things like extract statement to a
+ variable? For example, extract a a math operation happening in a
+ fucntion call argument into a separate variable an then replace the
+ funtion call arg with the variable name.
+- Q4: How do tree-edit and combobulate compare?
+ - A: a lot of similarities, tree-edit replaces traditional text
+ editing style combobulate still implements
+- Q5: Are similar packages for structural editing common to other
+ editors or they are just popular in Emacs cause of the paredit
+ tradition?
+ - A: emacs seems to be a trend-setter
+- Q6: Great talk! How difficult do you imagine adding more languages
+ to Tree-edit will be?
+ - A: Trying to add python, not super simple, C-like should be drop
+ in replacements
+- Q7: @ethan Could tree-edit be made to work with Org (orgdown!)
+ itself, or maybe rather what would be needed to get such a unified
+ tree-editing framework to work also for complex Org trees? 
+- Q8: Any plans for an Evil mode integration? evil-textobj-tree-sitter
+ seems like it has a long way to go if it's to catch up to
+ tree-edit.
+
+- any chance you tried this with Clojure as well?
+ - ethan: haven't tried it yet, i don't think tree-sitter-langs has a clojure grammar AFAIK
+ - yeah I use sogaiu's (https://github.com/sogaiu/tree-sitter-clojure) but it does not have if else and the rest, only the main data types
+- so tree-edit is orthogonal to the LSP features?
+- did not know that miniKanren had an elisp port
+- Seems like a really cool use of logic programming. All the examples I've heard of are much simpler than this.
+- Wow, voice control is a good point
+- Could tree-edit be made to work with Org (orgdown!) itself, or maybe rather what would be needed to get such a unified tree-editing framework to work also for complex Org trees?
+- Awesome talk. I'm definetly going to try out tree-edit later :)
+- Amazing talk!! Such a cool project
+- `andrea: absolutely! Also for Orgdown - which is a good start since it is much easier.
+- Andrew Blinn's talk on Fructure and Ethan Leba's talk on Tree-edit are really insightful.
+- Agreed about the lack of formal grammar (only a proliferation of parsers) being a limiting factor. Maybe we could bridge directly to the available commands without going through a grammar though. A unified tree-editing framework across languages but definitely including Org would be awesome (ala lispy/etc).
+
+Links and other notes:
+
+- Github repo : <https://github.com/ethan-leba/tree-edit>
+- editing operations that map directly to the structure of the
+ language
+- inspired by paredit and lispy
+- Another similar project is <https://github.com/mickeynp/combobulate>
+ by Mickey Petersen, the writer of Mastering Emacs.
+- It's an open source project so contributers are welcome
+- Future implication for this kind of work could be voice controlled
+ code writing/editing
+
+# Outline
+
+- Discuss motivation (Why should I care?)
+- Demonstrate tree-edit (Live-coding with tree-edit)
+- Demonstrate tree-edit syntax tree generator (Elevator pitch on miniKanren)
+
+<!--
+- 20 minutes: (brief description/outline)
+ - discuss motivation
+ - discuss prior art (paredit, lispy)
+ - demonstrate tree-edit
+ - demonstrate and discuss tree-edit syntax tree generation engine
+
+- 40 minutes: (brief description/outline)
+
+same as 20 minutes, with more detailed discussion of the implementation.
+
+-->
+[[!inline pages="internal(2021/captions/structural)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/structural-nav)" raw="yes"]]
diff --git a/2021/talks/teach.md b/2021/talks/teach.md
new file mode 100644
index 00000000..16052178
--- /dev/null
+++ b/2021/talks/teach.md
@@ -0,0 +1,77 @@
+[[!meta title="Using Org-mode to teach programming"]]
+[[!meta copyright="Copyright &copy; 2021 Daniel German"]]
+[[!inline pages="internal(2021/info/teach-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Using Org-mode to teach programming
+Daniel German
+
+[[!taglink CategoryOrgMode]]
+
+[[!inline pages="internal(2021/info/teach-schedule)" raw="yes"]]
+
+In this presentation I will explain how to use org-mode effectively to
+prepare teaching materials, and how to present them.
+
+For the last 5 years I have been using org-mode to teach programming
+in different languages: C++, SQL, Ruby, Python, SML
+and Scheme. Org-mode has three key advantages:
+
+1. it supports most programming languages with a common interface,
+2. it is an interactive medium for delivering teaching materials; and
+3. it is an always-up-to-date format that does not need to be exported in order to be published.
+
+I explain how I use org-mode in my courses and how I combine org-mode
+notes other tools such as github org-mode to get
+always up-to-date teaching materials that one can use for both
+teaching and studying (see
+<https://github.com/dmgerman/csc116ModernCplusplus/blob/master/lectures/l-01-1-intro/01_1_intro.org>
+for an example).
+
+Finally, I will discuss some important aspects to consider when using
+org-mode for this purpose.
+
+# Discussion
+
+IRC:
+
+- how do you keep the discipline of working on your notes? that's probably my biggest problem
+- I like "Try that with PowerPoint!" as a new org-babel slogan
+- we just need krita and inkscape modes
+- i remember doing similar in Smalltalk using a presentation tool with in it but with a full on graphical display of the Smalltalk environment not just text based.
+- I liked the trick with annotating the code in xournal -- what is the elisp glue for that? Do you have a package for that?
+
+BBB:
+
+- Can you talk about how the students re0act to this org-mode approach?
+- What level are your students typically? what is the subject matter?
+- Why GitHub? GitHub is nonfree.
+ - Perhaps because gitlab is also there and that there is achoice?
+ - GitHub requires reCAPTCHA to signup and similar things that are free exist (various GitLab and Gitea servers, Savannah, sourcehut).
+ - GitLab.com is just as bad (and unlike GitHub, you can't sign in without nonfree JS), but GitLab CE is fine.
+- Do you think org-mode+git could be used for students' assignments?
+
+From [YouTube](https://www.youtube.com/watch?v=Bmi9AAaqegY&feature=em-comments):
+
+- this is by far one of the most motivating talk about Org. I feel sorry about all my teaching colleagues that still use WYSIWYG presentation tools. my life, as a trainer, literally changed with Org, even without literate programming.
+- Great presentation. New to Emacs and starting to find many uses for it. One thing which theme you are using
+
+# Outline
+
+20 minutes:
+
+- Introduction
+- Quick demonstration
+- Workflow
+- Some Important considerations
+- Emacs configuration and how to get started
+
+I have create a git repository with examples and config files that is ready to use:
+<https://github.com/dmgerman/teachingProgOrg>
+
+
+[[!inline pages="internal(2021/captions/teach)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/teach-nav)" raw="yes"]]
diff --git a/2021/talks/tech.md b/2021/talks/tech.md
new file mode 100644
index 00000000..c327181d
--- /dev/null
+++ b/2021/talks/tech.md
@@ -0,0 +1,84 @@
+[[!meta title="Creating technical API documentation and presentations using org-babel, restclient, and org-treeslide"]]
+[[!meta copyright="Copyright &copy; 2021 Jan Ypma"]]
+[[!inline pages="internal(2021/info/tech-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Creating technical API documentation and presentations using org-babel, restclient, and org-treeslide
+Jan Ypma
+
+[[!taglink CategoryOrgMode]]
+
+[[!inline pages="internal(2021/info/tech-schedule)" raw="yes"]]
+
+The emacs org-babel package is often mentioned in conjunction with
+literate programming. The ability to mix code segments with prose
+indeed offers an intuitive way to augment semantic code pieces with
+textual descriptions.
+
+In recent projects, I've started to turn to org-mode as the primary
+format to maintain technical documentation, as well as slides for a
+technical language course. By using org-babel to pull in "live" code
+for REST requests, language examples, and shell scripts, one can be
+sure that the documentation and slides are never out of date.
+
+The session will show how leverage org-babel, restclient and
+org-treeslide to write and present technical documentation with style.
+
+# Discussion
+
+Pad:
+
+- Q1: Sorry if you already answered this somewhere (but if not, can
+ someone with a reddit account copy this over? thx). Hi, I would love
+ to move my team over to using something org-based, but that'll
+ never happen because, well... (wait for it) Emacs! By the way, I'm
+ currently using heavily customized Sphinx setup, mostly internal,
+ sometimes shared with data partners; lots of schema-gen from message
+ protocols defined in code, etc. Anyhow: questions. Do you work with
+ non-Emacs users? If so, how did you get them to accept this
+ workflow? And if it's just you DJ'ing, how do they weigh in when
+ they want an update, open a formal ticket?
+- <https://github.com/jypma/emacsconf2021/blob/master/presentation.org>
+
+BBB:
+
+- Have you encountered any push-back from people requesting the documentation who are of the opinion that only a Word document will do?
+ - Jan: Not really, I tend to deliver the PDFs only. If more is needed, I expect I'd make a docker container with emacs in it, so people can export the org-file to PDF themselves.
+ - The main problem I have is that effectively they end up branching it in order to use Word's change tracking, and there is no reverse path.
+ - Jan: That sounds more like a team thing. Most people I interact with are developers, and are OK reading/interpreting change tracking as a git diff, e.g. on github or azure devops.
+ - OK, thanks. I think that is the root of my problem I just thought I would ask in-case you had encountered the same. Thank you for the talk.
+ - Jan: I think in your case I'd either introduce them to a nice web-based git interface (org-mode looks fine usually), so they see it can do similar things as word change tracking.
+ - Jan: Thanks for your feedback :) feel free to reach out if you want to chat more.
+ - Unfortunately in this case they refuse to use anything that isn't a WYSIWYG interface. So even a Markdown editor in a split screen with a preview window is not accepted.
+ - Thanks!
+ - Jan: Hold their hands, be kind, small baby steps :)
+
+IRC: (nick: jan-ypma)
+
+- I use restclient everyday, but never thought about using it from code blocks, duh! Very interesting talk!
+- This is a good demo, I've found org-babel to be a really amazing glue language for stuff that's sort of annoying to automate otherwise.
+- Thanks! :) So the fonts of the current talk are: Fixed pitch (serif): New Heterodox Mono, Variable pitch (serif): ETBembo
+- for live coding presentations, demo-it is also pretty cool
+- indeed, i have been trying to work out literate devops through org documents. Very cool and useful in specific contexts atleast I guess. like finding the status of a service quickly right within a structured org document.
+
+# Outline
+
+- Introduction
+- Demo: Developer guide
+- Demo: REST API guide
+- Demo: Presentations
+- Used packages and configuration
+[[!inline pages="internal(2021/captions/tech)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/tech-nav)" raw="yes"]]
+
+# Speaker profile
+
+Jan Ypma is an independent software architect and developer, specializing on the Java platform, functional
+programming and distributed systems.
+
+Name pronunciation: Jan EEP-mah
+Pronouns: he/his
+Preferred contact info: jan@ypmania.net
diff --git a/2021/talks/telega.md b/2021/talks/telega.md
new file mode 100644
index 00000000..54a151f4
--- /dev/null
+++ b/2021/talks/telega.md
@@ -0,0 +1,42 @@
+[[!meta title="telega.el and the Emacs community on Telegram"]]
+[[!meta copyright="Copyright &copy; 2021 Gabriele Bozzola and Evgeny Zajcev"]]
+[[!inline pages="internal(2021/info/telega-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# telega.el and the Emacs community on Telegram
+Gabriele Bozzola and Evgeny Zajcev
+
+[[!inline pages="internal(2021/info/telega-schedule)" raw="yes"]]
+
+Telegram is a cross-platform instant messaging system. The large number of
+features and the widespread adoption make it a good choice for both private
+conversations with friends and for large online communities. In this talk, I
+am going to present the Emacs community on Telegram and its initiatives. I
+am also going to discuss telega.el, the Emacs client for Telegram. telega.el
+is a high-quality package that perfectly integrates in Emacs. It supports
+the vast majority of the features supported by the official clients, while
+adding several unique ones. In the talk, I will present the package and
+highlight some of the most important features.
+
+# Discussion
+
+- Q1: Do any of these main emacs telegram groups bridge to matrix?
+ - A: [Speaker] We discussed adding a bridge to matrix for the
+ main channel @emacs_en. We never got around to doing it, but I
+ can bring this up again. 
+- Q2: Could telega.el auto install TDLib like lsp-mode auto installs
+ servers?
+- A: [Speaker] Possibly. The difference is that TDLib requires a
+ number of dependencies that might not be available.  Evgeny chose
+ another route to simplify setting up telega.el: the package can now
+ be installed with a Dockerfile that also ships with also the
+ optional dependencies. This ensures that everything works as
+ intended.
+- Does telega still require company for completion?
+- Telegram has become a real (and desired) option to WhatsApp, thanks to telega.el
+
+[[!inline pages="internal(2021/captions/telega)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/telega-nav)" raw="yes"]]
diff --git a/2021/talks/test.md b/2021/talks/test.md
new file mode 100644
index 00000000..9165e7b6
--- /dev/null
+++ b/2021/talks/test.md
@@ -0,0 +1,62 @@
+[[!meta title="Test blocks"]]
+[[!meta copyright="Copyright &copy; 2021 Eduardo Ochs"]]
+[[!inline pages="internal(2021/info/test-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Test blocks
+Eduardo Ochs
+
+[[!inline pages="internal(2021/info/test-schedule)" raw="yes"]]
+
+In this presentation I will show an idea that feels completely obvious
+once we see it, but that only occured to me after after using Emacs
+and eev as my main interface to the computer for more than 20 years.
+Take any interpreted language that supports multi-line comments, and
+whose interpreter can be run in an Emacs buffer - for example Lua,
+Haskell, Python, or Julia; let's say just "Lua" from here on for
+simplicity. So: suppose that we have a Lua script that we wrote, that
+is called "foo.lua" and that defines lots of functions and defines the
+classes Bar and Bletch. We can put after the definition of the class
+Bar a multi-line comment that contains an eepitch block that when
+executed starts a Lua interpreter, loads the script foo.lua (by
+running 'dofile "foo.lua"'), and then has several tests for that class
+and its methods; and we can put another block with tests like that
+after the class Bletch, and other blocks after some functions. Eepitch
+allows sending these tests line by line to the Lua interpreter by
+typing <f8> on each line that we want to send, and this lets us create
+tests that are very easy to understand even without writing comments;
+this gives us a very quick way to document code by executable tests,
+that is super-great for experimental code that is still going to
+change a lot before running the risk of being read by other people.
+
+These multi-line comments with eepitch blocks that run an interpreter
+and make it load the current file are called "test blocks". The
+command `M-x eeit' inserts a test block at point, using the major mode
+to decide the right syntax to use for the multi-line comments and for
+the "dofile". We can configure the syntax of the test blocks for the
+current major mode by running `M-x find-eeit-links'; this can also be
+used to add support for test blocks to more languages (or, more
+precisely: to more major modes).
+
+Eduardo Ochs <http://angg.twu.net/emacsconf2021.html>
+
+# Discussion
+
+IRC nick: edrx
+
+- I love the slide annotations! They are really nice. :-)
+- Love the Racket's (module+ ...) but this test blocks are interesting too...
+- looks like eev should be using eieio to me :)
+- am I the only person who never heard of eev before this talk and now has a million uses for it? I've wanted this thing for ages
+ - You're in luck! You can check EmacsConf 2019 and 2020 for more eev goodness.
+ - that happens every time edrx does a talk on eev!
+ - <https://emacsconf.org/2019/talks/27/>
+- does language support take a lot of work, or did I miss you relying on a different package that handles that?
+- Cool! So this is kind of like a generic version of Python's doctests? (https://docs.python.org/3/library/doctest.html)
+ - edrx: I don't think so... is it possible to run python's doctests line by line? Also, see this: https://www.youtube.com/watch?v=QUMo7vgkHJI#t=6m36s - we can change the tests on the fly...
+
+[[!inline pages="internal(2021/captions/test)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/test-nav)" raw="yes"]]
diff --git a/2021/talks/ui.md b/2021/talks/ui.md
new file mode 100644
index 00000000..0fbf9322
--- /dev/null
+++ b/2021/talks/ui.md
@@ -0,0 +1,121 @@
+[[!meta title="Yak-shaving to a UI framework"]]
+[[!meta copyright="Copyright &copy; 2021 Erik Anderson"]]
+[[!inline pages="internal(2021/info/ui-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Yak-shaving to a UI framework
+Erik Anderson
+
+
+
+[[!inline pages="internal(2021/info/ui-schedule)" raw="yes"]]
+
+[[!table header="no" class="speaker-details" data="""
+Name pronunciation: | ERR-ick ANN-dur-sun
+Pronouns: | he/him
+Homepage: | <https://github.com/ebpa/tui.el>
+Preferred contact info: | <erik@ebpa.link>
+"""]]
+
+Tui.el is a textual User Interface (UI) framework for Emacs Lisp
+modeled after the popular JavaScript 'React' framework. This package
+implements React Component API's with the goal of simplifying
+development of interactive UI's for all Emacs users- regardless of
+their prior experience with React or web programming. Components
+provide a useful functional unit for constructing complex interfaces
+declaratively and also eliminate much of the burden associated with
+updating textual content as application state changes. This talk will
+cover use of the tui.el API and its operation in a textual environment
+by implementing some basic UI's.
+
+# Discussion
+
+Pad:
+
+- Q1: A common issue I have with Magit status buffers is that focus
+ get lost easily when staging hunks since scroll gets lost during
+ re-render (Magit attempts at recovering). Are we getting magit-tui?
+ - A: It is certainly possible and compatible.
+ - I am interested in tui.el but haven't looked at it too closely
+ yet. Have been entertaining the idea of something like this for
+ a long time now. -- jonas (magit maintainer)
+- Q2:We can update images as well?! Like SVG, or the comics you shown.
+ This is awesome!
+ - A: Yes, that's possible.
+- Q3:Have you tried to display any diagram? Like UML sequence diagrams
+- Q4: So does tui implement some sort of DOM model?
+ - A: Yes.
+- Q5: How does performance compare with some other libraries, like
+ EWOC, magit-section, tabulated-list?  e.g. to render a view with
+ thousands of elements (and thank you for your work on this, it's
+ very exciting for Emacs's future)
+ - A: In general EWOC and tabulated-list should perform better, and
+ tui still needs some optimization. TUI has the potential to be
+ better, but it needs some work.
+- Q6: Are you planning to contribute tui.el to emacs core?
+ - A: Eventually, once its polished and more robust.
+- Q7: What is the memory overhead like, e.g. I guess values are hashed
+ to detect whether items need to be re-rendered?
+ - A: Haven't done any memory profiling, but memory overhead could
+ probably be an issue.
+- Q8: Awesome. Would lack of concurrency/multi-threading in Emacs be
+ an issue?
+
+BBB:
+
+- like in dogears.el readme
+- So I'm really interested in potentially using tui for Ement.el
+- 1. For the room buffers, showing events in the chat rooms. That sometimes has thousands of events, so that's why I asked about performance for that case.
+- It seems like it could be very helpful for re-rendering some events when their content changes, e.g. when messages are edited, when coalescing adjacent join/leave events...
+- EWOC does work for that to some extent, but I've been unable to get nested EWOCs to work correctly so far, so TUI is an interesting alternative
+- yeah, EWOC uses markers too AFAIK, and it seems to perform well enough even with 2000-3000 events in a buffer
+- oh yeah, your grid idea
+- yes, sorting and filtering, temporarily hiding elements!
+- like "show all messages from this user or mentioning that user in this room"
+- and then press a key and all the others are shown again
+- expanding larger images from thumbnails, captions for files, etc
+- like Element.io but in Emacs with TUI, that would be great
+- that's the official Matrix Web client
+- Sounds great! well thanks for the presentation, I really look forward to TUI's progress! maybe someday I can help with it, in the distant future... I have too many Emacs projects already :)
+- hmm, a TUI library for taxy.el... more ideas!
+- TUI would be like a natural frontend for taxy.el as a backend
+- are you on Matrix by any chance?
+- I'm bad with email, but when I have time to check out TUI in more detail, I look forward to it!
+
+IRC:
+
+- I'm trying the run your demos of tui... it seems that (add-to-list 'load-path "~/usrc/tui.el/") is not enough, I have to either add the subdirectories by hand or to run a standard function - whose name I don't know - to add the subdirs...
+- hey, I'm trying to run your demos of tui... I had to add the subdirectories to the load-path manually to make (require 'tui-tic-tac-toe) work. my notes are here: https://0x0.st/-7dV.txt
+- tui.el is very exciting, should open up a new era of more advanced UI in Emacs
+- seems like we can get some really cool emacs ui going in combination with svg.el
+- combine with the magit approach to menus (transient etc) and something very nice is coming!
+- I think anything you can show in a buffer should work with this, so images, text, whatever.
+- tui.el is just too cool: I am going to try it for sure :D
+
+IRC feedback:
+- I like the bird mascot on the repo readme :)
+- FYI if you would want it to show at the side of the readme, you can see the Org markup I use to accomplish that in some of my readmes
+
+
+# Outline
+
+- 5-10 minutes:
+ - Problem space: UI implementation complexity.
+ - API introduction: Displaying content, Components.
+ - Visual taste of dashboards and applications built with tui.
+<!--- 20 minutes:
+ - (same as the above- less some visual tour, plus:)
+ - Introducing **state** to your UI.
+ - Demonstration via development of a trivial web comic reader.
+- 40 minutes:
+ - (same as the above, plus:)
+ - Demonstration of developer helpers/utility functions for:
+ - Explanation of the reconciliation algorithm.
+ - More Emacsisms: Implementing a comic dashboard component.
+--->
+
+[[!inline pages="internal(2021/captions/ui)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/ui-nav)" raw="yes"]]
diff --git a/2021/talks/unix.md b/2021/talks/unix.md
new file mode 100644
index 00000000..c9a9263a
--- /dev/null
+++ b/2021/talks/unix.md
@@ -0,0 +1,79 @@
+[[!meta title="GNU's Not UNIX: Why Emacs Demonstrates The UNIX Philosophy Isn't Always The Only Answer"]]
+[[!meta copyright="Copyright &copy; 2021 Daniel Rose"]]
+[[!inline pages="internal(2021/info/unix-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# GNU's Not UNIX: Why Emacs Demonstrates The UNIX Philosophy Isn't Always The Only Answer
+Daniel Rose
+
+[[!taglink CategoryPhilosophy]]
+
+[[!inline pages="internal(2021/info/unix-schedule)" raw="yes"]]
+
+The talk targets users who are curious about computational philosophies,
+or those who might not know how to best utilise Emacs conceptually. The
+talk will cover what the UNIX philosophy is, the GNU Free Software
+principles, a typical (Neo)Vi(m) user's approach, and then how one might
+accomplish this in Emacs combining the aformentioned ideals. The
+listeners will learn how they can approach Emacs ideologically, and how
+blocking themselves into one philosophy or the other will limit their
+efficiency. Although you may be a veteran GNU/Linux and Emacs user,
+understanding how to use both philosophies together will still allow you
+to be more performant than without.
+
+# Discussion
+
+IRC nick: thecatster
+
+- Q: So, how do you decide when it's not "worth it" to use Emacs
+ for a certain thing?
+- Q: What's your opinion on EAF?
+- Q: What is your opinion on starter-kits and making emacs
+ accessible, practical for people who want to keep things simple?
+- Q: Do you integrate tools via Emacs or you just jump between those?
+ For example, did you need to integrate your C WM somehow with Emacs?
+ - A: mostly via keybindings. Thanks for the answer!
+- Q: Do you use Emacs for email?
+ - A: I do, and many more clients too.
+- Q: No personal website?
+ - A: <https://www.danielr.xyz>
+- Q:When will Emacs improve its GC and support truely multithreading?
+
+Feedback:
+
+- I really appreciate this talk's perspective! I'm very invested in living inside, Emacs, but this is also a great perspective!
+- yes, nice perspective. Saying that I am struggeling with that is overstating it, but sometimes it does make me think. thank you Daniel!
+- Nice talk, I feel like some Emacs purists could complain but let's be honest, this is a reasonable take on actually getting stuff done
+
+From [YouTube](www.youtube.com/watch?v=kXVjCRIqS4c&feature=em-comments):
+
+- Right on. For most of these reasons I’ve went back to Vim and just accepted it’s limitations rather than try and torture it into a Frankenstein IDE that half works. When I need to do $LANG work especially debugging, I use vs code or Xcode etc and most of the big IDEs have Vim keybinding emulation that is good enough to get to work.
+
+# Outline
+
+- How can one limit their usage of CLI tools while still maintaining
+ the ideals of both.
+- How using CLI tools can still perfectly flow into Emacs.
+- How having all programs in Emacs and unified keybindings is akin
+ to a terminal user.
+- Why thinking about computational philosophies might itself be an
+ impediment.
+
+<!--
+- 20 minutes:
+ Go more in-depth about both philosophies, and how the ideas can play
+ off each other. Follow the same outline of the 5-10 minute version but
+ in more detail and with more interactivity.
+
+- 40 minutes:
+ Based on the 20 minutes format, play more off the ideas of the
+ audience. Interact with them more, and ask for their input and
+ examples that they can contribute to the conversation. Use more
+ examples, demonstrate my workflow.
+-->
+
+[[!inline pages="internal(2021/captions/unix)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/unix-nav)" raw="yes"]]
diff --git a/2021/talks/world.md b/2021/talks/world.md
new file mode 100644
index 00000000..e329e536
--- /dev/null
+++ b/2021/talks/world.md
@@ -0,0 +1,74 @@
+[[!meta title="World Citizen"]]
+[[!meta copyright="Copyright &copy; 2021 Mohsen BANAN"]]
+[[!inline pages="internal(2021/info/world-nav)" raw="yes"]]
+
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# World Citizen
+Mohsen BANAN
+
+[[!inline pages="internal(2021/info/world-schedule)" raw="yes"]]
+
+Starting with Emacs 24, full native bidi
+(bidirectional) support became available. For
+many years prior to that Unicode support was
+available and by around year 2000, reasonable
+open-source shaping libraries were also available.
+
+With these in place at around 2012, I developed
+two Persian input methods for emacs. These input
+methods or variations of them can also be used
+Arabic and other persoarabic scripts.
+
+With all of these in place, Emacs has now become
+the ne plus ultra Halaal/Convivial usage
+environment for persoarabic users.
+
+Since emacs comes loaded with everything (Gnus
+for email, Bbdb for address books, XeLaTeX modes
+for typesetting, org-mode for organization, spell
+checkers, completions, calendar, etc.), all basic
+computing and communication needs of persoarabic
+users can be addressed in one place and
+cohesively.
+
+In this talk I will demonstrate what a wonderful
+environment that can be.
+
+- 40 minutes: (brief description/outline)
+
+ My talk will be in two parts.
+
+ In Part 1, I cover persian input methods. With an
+ emphasis on "Banan Multi-Character (Reverse)
+ Transliteration Persian Input Method". The
+ software is part of base emacs distribution.
+ Full documentation is available at:
+ Persian Input Methods
+ For Emacs And More Broadly Speaking
+ شیوه‌هایِ درج به فارسی‌
+ <http://mohsen.1.banan.byname.net/PLPC/120036>
+
+ In Part 2, I will cover the ramifications of bidi
+ on existing emacs applications, including:
+
+ - Gnus:
+ - Persoarabic rich email sending in HTML.
+ - Ramifications of bidi on from, to and
+ subject lines.
+
+ - Bbdb: Ramifications of bidi on display and
+ completion.
+
+ - Calendar:
+ - Ramifications of bidi on display.
+ - Use of persian text for Persian (solar) calendar.
+ - Use of arabic text for Muslem (lunar) calendar.
+
+ - AUCTeX: Persian typesetting with XeLaTeX
+
+
+[[!inline pages="internal(2021/captions/world)" raw="yes"]]
+
+[[!inline pages="internal(2021/info/world-nav)" raw="yes"]]
diff --git a/2021/watch.md b/2021/watch.md
new file mode 100644
index 00000000..174f4f74
--- /dev/null
+++ b/2021/watch.md
@@ -0,0 +1,24 @@
+[[!meta title="Watch EmacsConf 2021"]]
+[[!sidebar content=""]]
+
+# Main stream
+
+<video controls>
+<source src="https://live0.emacsconf.org/main.webm" type="video/webm" />
+</video>
+
+Alternatively, load <https://live0.emacsconf.org/main.webm> in a streaming media player.
+
+# Alternative stream
+
+<video controls>
+<source src="https://live0.emacsconf.org/alt.webm" type="video/webm" />
+</video>
+
+Alternatively, load <https://live0.emacsconf.org/main.webm> in a streaming media player.
+
+# Chat
+
+<https://chat.emacsconf.org>
+
+<div class="chat-iframe"></div>
diff --git a/2022.md b/2022.md
new file mode 100644
index 00000000..a5118bd8
--- /dev/null
+++ b/2022.md
@@ -0,0 +1,88 @@
+[[!meta copyright="Copyright &copy; 2021, 2022 Amin Bandali, Leo Vivier"]]
+
+<p class="center">EmacsConf 2022 | Online Conference<br />
+<b>December 3 and 4, 2022 (Sat-Sun)</b></p>
+
+<p class="center">[[!img /i/emacsconf-logo1-256.png
+alt="EmacsConf logo"]]</p>
+
+<p class="center">[[<b>Program</b>|talks]] | [[Planning]] | [[Guidelines for Conduct|conduct]]</p>
+
+<p class="center">EmacsConf is the conference about the joy of
+<a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> and
+Emacs Lisp.</p>
+
+You can watch the recorded videos and Q&A sessions by looking at the
+[[**program**|talks]] and following the links to each talk. Subscribe
+to the
+[emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss)
+list for updates as we post more resources.
+
+We are busy harvesting the rest of the talks and Q&A sessions from
+EmacsConf 2022, and we would love to have *your* help to make
+EmacsConf 2022 even more amazing, much like the previous EmacsConfs.
+
+We held EmacsConf 2022 as an online conference again this year. We
+remain fully committed to freedom, and we used our infrastructure and
+streaming setup consisting entirely of [free software][freesw], much
+like previous EmacsConf conferences.
+
+Come hang out with us in the `#emacsconf` channel on `irc.libera.chat`
+([Libera.Chat][libera] IRC network). You can join the chat using
+[your favourite IRC client][libera-emacsconf], or by visiting
+[chat.emacsconf.org][chat] in your web browser.
+
+Want to help us make the talks and Q&As from the conference easier to
+learn from? Check out our [[**Volunteer**|volunteer]] page to find a
+role that would fit your skills and your time. Thank you!
+
+[freesw]: https://www.gnu.org/philosophy/free-sw.html
+[libera]: https://libera.chat
+[libera-emacsconf]: ircs://irc.libera.chat:6697/emacsconf
+[chat]: https://chat.emacsconf.org
+
+Old pages: [[Ideas]] | [[Submit]] | [[Watch/participate|watch]]
+
+Updates:
+
+[[!inline pages="blog/* and !*/Discussion" limit="10" rootpage="blog" archive="yes"]]
+
+- Thanks
+ - Thank you to all the speakers, volunteers, and participants, and
+ to all the people in our lives who make this possible.
+ - This year's conference hosts are zaeph and bandali and our
+ streamer sachac (who did not go crazy managing two streams at
+ the same time, yay Org Mode and OBS in the cloud!)
+ - Thanks to our captioning volunteers: sachac, bhavin192, Tom
+ Purl, Hannah Miller, triko, and anush, and also to the speakers
+ who captioned their own talks. Thanks to quiliro for translating
+ the meetups talk into Spanish subtitles, which you can find on
+ the talk page. 
+ - Thanks to dto for describing things in #emacsconf-accessible.
+ - Thanks to everyone who added notes and questions to the pad, and
+ especially to publicvoit and jrootabega.
+ - Thanks to bhavin192 for last-minute reencoding and captioning,
+ and to his brother for lending us a beefy computer for
+ last-minute panicky reencodes.
+ - Thanks to Akshay Gaikwad for design contributions (notably the
+ next-talk slides)
+ - Thanks also to other volunteers: corwin, vetrivln, dto, jman,
+ FlowyCoder, and vetrivln who worked on all the other things that
+ are needed to make this happen.
+ - Thanks to Zen Monk Alain M. Lafon, Alex Mihov, Phil Hofmann, and
+ friends from 200ok.ch and Ardeo for organizing an in-person
+ EmacsConf satellite in Lucerne, Switzerland in their Coworking
+ Hub venue
+ - Thanks to shoshin whose music you heard today
+ - Thanks to the GNU Project and the Free Software Foundation for
+ Emacs and the mailing lists, and libera.chat for IRC community
+ support. 
+ - Thanks to Ry P for the server that we're using for OBS
+ streaming and for processing videos.
+ - Thanks so much to all the organizers and participants in
+ EmacsConf 2022! (All of you! =) You're all awesome.)
+
+
+Posts about EmacsConf 2022:
+
+- <https://christiantietze.de/posts/2022/12/dec-3---4-emacsconf-2022/>
diff --git a/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt
new file mode 100644
index 00000000..3bccf8fb
--- /dev/null
+++ b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt
@@ -0,0 +1,411 @@
+WEBVTT
+
+NOTE
+Introduction
+
+00:00:00.000 --> 00:00:05.799
+[Amin]: All right. Hey, everyone. Thanks, Zach, for the great talk. Here is a live Q&A.
+
+00:00:05.800 --> 00:00:12.399
+People can start putting the questions onto the pad, and Zach will answer them.
+
+00:00:12.400 --> 00:00:15.007
+Zach, take it away. Thanks, Zach. Here is a live Q&A.
+
+00:00:15.008 --> 00:01:12.599
+[Zach]: Okay. So, first question. Let's see.
+
+NOTE Why did you choose an internal state versus many 'state buffers'?
+
+00:01:12.600 --> 00:01:16.039
+Okay. So, the first question is why did you choose an internal state
+
+00:01:16.040 --> 00:01:22.959
+versus many state buffers? So, the main reason was more control
+
+00:01:22.960 --> 00:01:29.599
+from the game perspective. I mean, if this was to be a tool,
+
+00:01:29.600 --> 00:01:35.519
+if this was to be a tool that perhaps was used for more, like,
+
+00:01:35.520 --> 00:01:41.479
+real-world applications where maybe you'd want users to be able to, like,
+
+00:01:41.480 --> 00:01:43.399
+use any of their preexisting
+
+00:01:43.400 --> 00:01:48.559
+— like, if you wanted to really make a grid of cells that would —
+
+00:01:48.560 --> 00:01:53.639
+so, then I think maybe using real buffers in that case
+
+00:01:53.640 --> 00:01:56.199
+would probably be the better thing since you wouldn't have to, like,
+
+00:01:56.200 --> 00:02:04.239
+redo everything. But I found that just, like, centralizing the state
+
+00:02:04.240 --> 00:02:10.719
+into one place for the game at least made it the easiest to implement.
+
+NOTE Do you have plans to port shenzhen.io to Emacs?
+
+00:02:10.720 --> 00:02:14.079
+Next one. Do you have plans to port Shenzhen I.O. to Emacs?
+
+00:02:14.080 --> 00:02:19.559
+Well, I was actually thinking about exopunks, perhaps,
+
+00:02:19.560 --> 00:02:26.599
+but Shenzhen I.O. would be pretty cool to add as well.
+
+00:02:26.600 --> 00:02:29.959
+So, this doesn't use any Wasm at all.
+
+NOTE Did this use WASM?
+
+00:02:29.960 --> 00:02:33.799
+So, the next question is, did this use Wasm?
+
+00:02:33.800 --> 00:02:41.999
+So, it's asking about, like, using Wasm Emacs. So, this actually —
+
+00:02:42.000 --> 00:02:45.239
+this doesn't use any Wasm under the hood.
+
+00:02:45.240 --> 00:02:49.639
+It's pretty much analogous to the game TIS 100 is to real assembly
+
+00:02:49.640 --> 00:02:59.799
+as this game is to web assembly. Slight resemblance, but, yeah, just a game.
+
+NOTE Why wasm rather than a more traditional Assembly dialect? It wouldn't be harder to implement, right?
+
+00:02:59.800 --> 00:03:06.039
+So, okay, so the next question is why Wasm
+
+00:03:06.040 --> 00:03:09.359
+rather than a more traditional assembly dialect?
+
+00:03:09.360 --> 00:03:11.799
+It wouldn't be harder to implement, right?
+
+00:03:11.800 --> 00:03:16.919
+So, it would actually probably have been easier, in all honesty, just because,
+
+00:03:16.920 --> 00:03:20.679
+you know, more traditional — like, TIS 100, for example.
+
+00:03:20.680 --> 00:03:24.599
+You have each of the — you have each instruction on a line,
+
+00:03:24.600 --> 00:03:29.519
+and it's pretty easy to, you know, syntax hiding just one line.
+
+00:03:29.520 --> 00:03:32.599
+So, this with the weird S expressions across the line, deeply nested,
+
+00:03:32.600 --> 00:03:37.239
+and then, like, the step debugger thing and these weird cell things.
+
+00:03:37.240 --> 00:03:40.239
+They made things really complicated, but I definitely wanted to, like —
+
+00:03:40.240 --> 00:03:47.559
+the main reason is I didn't — I wanted it to not — to look as least as —
+
+00:03:47.560 --> 00:03:52.919
+to look — to resemble TIS 100 as little as possible,
+
+00:03:52.920 --> 00:03:54.399
+even though it's still pretty much the same game.
+
+00:03:54.400 --> 00:04:44.439
+[Amin]: Thanks, Zach. I think we still have about, like, eight minutes or so.
+
+00:04:44.440 --> 00:04:46.159
+Or eight and a half minutes of Q&A time.
+
+00:04:46.160 --> 00:04:47.919
+So, folks, if you do have any other questions,
+
+00:04:47.920 --> 00:04:50.119
+please do keep them coming in the pad, and, yeah,
+
+00:04:50.120 --> 00:04:53.079
+Zach will continue answering them.
+
+00:04:53.080 --> 00:05:08.959
+[Zach]: Sounds good. Thank you.
+
+NOTE Any next projects on your mind?
+
+00:05:08.960 --> 00:05:11.399
+So, next question. Any next projects on your mind?
+
+00:05:11.400 --> 00:05:15.679
+Yeah, actually, I have a couple ideas for projects,
+
+00:05:15.680 --> 00:05:21.639
+and these would all be, hopefully, maybe more useful.
+
+00:05:21.640 --> 00:05:24.119
+I think TreeSitter is pretty
+
+00:05:24.120 --> 00:05:28.639
+cool. I think there's a lot of directions that I could go, like,
+
+00:05:28.640 --> 00:05:34.639
+there's a plugin in NeoVim called NeoGen, which generates documentation.
+
+00:05:34.640 --> 00:05:41.359
+That would be cool. I've been playing with this. What else?
+
+00:05:41.360 --> 00:05:45.559
+Yeah, I mean, hopefully, next year, at next the Emacs conference,
+
+00:05:45.560 --> 00:05:52.679
+I could be presenting something more useful.
+
+NOTE Does this work with any other paren-based editing packages?
+
+00:05:52.680 --> 00:05:57.479
+Next question. Does this work with any other paren-based editing packages?
+
+00:05:57.480 --> 00:06:02.759
+Not at all. Not at all. In fact, just because of the way the buffer was set up,
+
+00:06:02.760 --> 00:06:07.999
+how it's just, like, the illusion of a buffer, like, not even, like,
+
+00:06:08.000 --> 00:06:17.119
+the syntax parsing works correctly, because just because everything's, like,
+
+00:06:17.120 --> 00:06:19.239
+the way the grids are set up, like, you have, like,
+
+00:06:19.240 --> 00:06:23.839
+the other cells kind of interfering with the way that parse is.
+
+00:06:23.840 --> 00:06:29.799
+But the way it was architected, it's actually a really simple macro.
+
+00:06:29.800 --> 00:06:33.159
+There's a little macro called, like, run in buffer.
+
+00:06:33.160 --> 00:06:37.279
+You have, like, run in buffer, and then you put your elist code,
+
+00:06:37.280 --> 00:06:42.439
+and then it tries to create the illusion that it's actually running
+
+00:06:42.440 --> 00:06:46.919
+in a real buffer. So this macro kind of does all the configuration setup.
+
+NOTE What kind of tool could use this idea?
+
+00:06:46.920 --> 00:06:55.839
+So, I mean, maybe with, like, more configuration settings,
+
+00:06:55.840 --> 00:06:58.399
+maybe something like that could have been done.
+
+00:06:58.400 --> 00:07:04.239
+So next question. What kind of tool could you use this idea?
+
+00:07:04.240 --> 00:07:09.479
+Oh, going back to the next project on your mind.
+
+00:07:09.480 --> 00:07:12.639
+This actually came up to my mind as, like, a graphical.
+
+00:07:12.640 --> 00:07:21.359
+So, in terms of, like, there's a lot of graphing tools, like ASCII.
+
+00:07:21.360 --> 00:07:25.679
+So, like, you type in some text representation, it generates an ASCII document.
+
+00:07:25.680 --> 00:07:28.599
+I think it would be really cool to have, like,
+
+00:07:28.600 --> 00:07:31.079
+an Emacs package that sort of works, like,
+
+00:07:31.080 --> 00:07:35.519
+those online really slick graph drawing tools.
+
+00:07:35.520 --> 00:07:40.919
+So, like, you can just press tab, and it draws a new box with an ASCII arrow,
+
+00:07:40.920 --> 00:07:43.759
+and then, like, it can create these diagrams really easy.
+
+00:07:43.760 --> 00:07:46.359
+I think that would be a really cool project.
+
+00:07:46.360 --> 00:07:52.039
+And so, something like that, obviously, like, you have different cells.
+
+00:07:52.040 --> 00:07:56.279
+And so, that's actually another thing I think would be cool to work on.
+
+NOTE How did you go about designing the puzzles?
+
+00:07:56.280 --> 00:08:04.039
+So, designing puzzles. So, it's funny.
+
+00:08:04.040 --> 00:08:07.879
+If you listen to Zach Barth's talk about TS100,
+
+00:08:07.880 --> 00:08:12.759
+he goes into, like, you pretty just, like, you pretty just,
+
+00:08:12.760 --> 00:08:16.159
+it's just like you make up a puzzle you think could work,
+
+00:08:16.160 --> 00:08:18.279
+and chances are it does end up working.
+
+00:08:18.280 --> 00:08:23.959
+And that's how I roll, at least my custom puzzles in the game, just, like,
+
+00:08:23.960 --> 00:08:28.599
+come up with some random idea, think it probably should work,
+
+00:08:28.600 --> 00:08:35.839
+and then try to go implementing it. And usually, it's implementable.
+
+00:08:35.840 --> 00:08:39.319
+I mean, four by three boxes, you can do quite a bit.
+
+NOTE What are your favorite changes in the upcoming Emacs 29?
+
+00:08:39.320 --> 00:08:44.119
+And I don't put any restrictions on the cells, like, TS100.
+
+00:08:44.120 --> 00:08:47.719
+What are your favorite changes in the upcoming Emacs 29?
+
+00:08:47.720 --> 00:08:50.479
+So, definitely TreeSitter is pretty cool.
+
+00:08:50.480 --> 00:08:55.679
+Just because, like, you have syntax, you have access to that.
+
+00:08:55.680 --> 00:08:59.719
+You can build syntax-aware extensions.
+
+00:08:59.720 --> 00:09:03.559
+So, like, I was just I was playing around with it, and it's pretty cool.
+
+00:09:03.560 --> 00:09:07.479
+You can just, like, get the syntax tree and search for syntax patterns.
+
+NOTE Are there tools to add more puzzles?
+
+00:09:07.480 --> 00:09:25.199
+So, it's exciting to see what might be done with that.
+
+00:09:25.200 --> 00:09:28.879
+Are there tools to add more puzzles? So, there's not tools,
+
+00:09:28.880 --> 00:09:35.959
+but in the code itself, there's a file called azimbox puzzles.
+
+00:09:35.960 --> 00:09:39.079
+And it's pretty much just, like, you have a generator function.
+
+00:09:39.080 --> 00:09:43.079
+You configure it's just, like, you're pretty much defining a struct.
+
+00:09:43.080 --> 00:09:45.679
+So, I mean, if you're familiar with the Emax list,
+
+00:09:45.680 --> 00:09:47.959
+you can kind of define puzzles pretty easily.
+
+00:09:47.960 --> 00:09:54.279
+Define where your inputs are, generate a function to generate these inputs,
+
+00:09:54.280 --> 00:09:57.799
+and then a generator function to generate which outputs you want.
+
+00:09:57.800 --> 00:10:02.159
+So, it's pretty, I mean, code-wise, it's pretty self-contained.
+
+00:10:02.160 --> 00:10:10.239
+But yeah, maybe I could have done, like, a more streamlined job with that.
+
+00:10:10.240 --> 00:10:17.159
+Like, a binding to graph is? Oh, yeah, with the graph thing I was mentioning.
+
+00:10:17.160 --> 00:10:23.479
+So, that would also actually be pretty cool, too. But I was thinking more just,
+
+00:10:23.480 --> 00:10:31.119
+like, plain ASCII graphs. Just, like, you already have just, like, so,
+
+00:10:31.120 --> 00:10:33.439
+a tool I've seen recently is called Diagon.
+
+00:10:33.440 --> 00:10:38.079
+So, you basically type in, like, some really, like,
+
+00:10:38.080 --> 00:10:41.759
+a textual representation of the graph, like, A arrow B, B arrow C,
+
+00:10:41.760 --> 00:10:44.079
+and it generates, like, an ASCII diagram.
+
+00:10:44.080 --> 00:10:52.799
+So, something like that would be cool, like, so, like, you have, like,
+
+00:10:52.800 --> 00:11:01.839
+a grid of, like, little nodes, and control F maybe brings you to the next one,
+
+00:11:01.840 --> 00:11:07.279
+and maybe tab, maybe would create a new node with a new ASCII
+
+00:11:07.280 --> 00:11:20.879
+arrow to it. That would be a cool, that would be a really cool extension.
+
+00:11:20.880 --> 00:11:25.319
+But, yeah, I mean, obviously, graph is an amazing tool.
+
+00:11:25.320 --> 00:11:28.079
+So, a lot could be done with that as well.
+
+00:11:28.080 --> 00:12:49.679
+[Amin]: I think we have about, like, a minute or a minute and a half of live questions.
+
+00:12:49.680 --> 00:12:50.719
+We are opening the Q&A, this BB room for people to join.
+
+00:12:50.720 --> 00:12:51.759
+So, folks who want to do that are welcome to do so.
+
+00:12:51.760 --> 00:12:52.199
+And, yeah, after that, the stream will move on.
+
+00:12:52.200 --> 00:12:52.359
+But you can still come in this BB room or keep asking questions on the web.
+
+00:12:52.360 --> 00:12:53.439
+Okay. I think that's about all the time that we have on the stream.
+
+00:12:53.440 --> 00:12:55.079
+Thanks again, Zach, so much, and both for the Q&A and for your great talk,
+
+00:12:55.080 --> 00:12:57.319
+and see you all around. Thank you.
+
+00:12:57.320 --> 00:12:58.239
+Cheers.
+
+00:12:58.240 --> 00:12:58.359
+[Zach]: Thank you.
+
+00:12:58.360 --> 00:14:19.200
+You are currently the only person in this conference.
diff --git a/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt
new file mode 100644
index 00000000..6124054e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt
@@ -0,0 +1,52 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:30.680
+Introduction
+
+00:00:30.680 --> 00:00:44.960
+TIS-100
+
+00:00:44.960 --> 00:01:08.040
+WebAssembly
+
+00:01:08.040 --> 00:02:07.640
+Basic stack operations
+
+00:02:07.640 --> 00:02:44.680
+Numeric commands
+
+00:02:44.680 --> 00:03:21.400
+Boolean operations
+
+00:03:21.400 --> 00:04:00.240
+Port operations
+
+00:04:00.240 --> 00:05:15.720
+Control flow
+
+00:05:15.720 --> 00:06:14.480
+Modules
+
+00:06:14.480 --> 00:08:33.040
+Puzzle
+
+00:08:33.040 --> 00:09:35.200
+The game loop
+
+00:09:35.200 --> 00:11:25.880
+Tic-tac-toe
+
+00:11:25.880 --> 00:12:07.800
+Text properties
+
+00:12:07.800 --> 00:14:00.920
+Code cells
+
+00:14:00.920 --> 00:14:37.560
+Undo
+
+00:14:37.560 --> 00:14:52.360
+Parentheses
+
+00:14:52.360 --> 00:16:07.440
+Assembly text to executable code
diff --git a/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt
new file mode 100644
index 00000000..ef640bf3
--- /dev/null
+++ b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt
@@ -0,0 +1,874 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:03.800
+Hi, I'm Zach and today I'll be giving
+
+00:00:03.800 --> 00:00:05.320
+a presentation on asm-blox,
+
+00:00:05.320 --> 00:00:08.960
+a programming game inspired by WebAssembly.
+
+00:00:08.960 --> 00:00:10.840
+So programming games came into prominence
+
+00:00:10.840 --> 00:00:13.160
+about a decade ago and are loved for providing
+
+00:00:13.160 --> 00:00:14.760
+interesting programming challenges
+
+00:00:14.760 --> 00:00:17.160
+without all the messiness of real world programming.
+
+00:00:17.160 --> 00:00:19.960
+I wanted to make a programming game
+
+00:00:19.960 --> 00:00:24.880
+and I decided to base it off of TIS-100,
+
+00:00:24.880 --> 00:00:28.240
+having a pretty basic UI.
+
+00:00:28.240 --> 00:00:30.680
+It seemed pretty doable in Emacs.
+
+00:00:30.680 --> 00:00:33.160
+TIS 100 is a programming game
+
+00:00:33.160 --> 00:00:35.760
+where you write a fictional assembly language
+
+00:00:35.760 --> 00:00:37.280
+into a grid of cells which can each
+
+00:00:37.280 --> 00:00:39.480
+communicate with one another,
+
+00:00:39.480 --> 00:00:41.200
+you're tasked with solving
+
+00:00:41.200 --> 00:00:44.960
+fairly simple CS 101 like problems.
+
+00:00:44.960 --> 00:00:48.440
+To mix things up a bit I decided to base
+
+00:00:48.440 --> 00:00:49.800
+the language of asm-blox off of
+
+00:00:49.800 --> 00:00:52.520
+WebAssembly, which is stack based,
+
+00:00:52.520 --> 00:00:55.360
+as opposed to TIS-100 which is registered based.
+
+00:00:55.360 --> 00:00:59.200
+Here you can see the same program
+
+00:00:59.200 --> 00:01:01.680
+written in the game TIS-100,
+
+00:01:01.680 --> 00:01:03.960
+what it looks like in asm-blox,
+
+00:01:03.960 --> 00:01:08.040
+and the original WebAssembly that it's based off of.
+
+00:01:08.040 --> 00:01:10.640
+With that said, let's get into a demo.
+
+00:01:10.640 --> 00:01:12.240
+This is the game board.
+
+00:01:12.240 --> 00:01:14.120
+It's a 4 by 3 grid.
+
+00:01:14.120 --> 00:01:16.840
+Each cell has a stack of size 4.
+
+00:01:16.840 --> 00:01:20.280
+First off, I'll show some of the stack editing commands.
+
+00:01:20.280 --> 00:01:23.760
+We can add a value with the const function.
+
+00:01:23.760 --> 00:01:27.480
+Here we're adding two values to this stack
+
+00:01:27.480 --> 00:01:33.400
+to get added, and eventually the stack gets overflowed.
+
+00:01:33.400 --> 00:01:37.360
+We can fix that as follows with the clear command,
+
+00:01:37.360 --> 00:01:40.720
+so that clears the stack.
+
+00:01:40.720 --> 00:01:43.200
+We can duplicate values on the stack.
+
+00:01:43.200 --> 00:01:45.600
+This duplicates the item at the bottom of the stack.
+
+00:01:45.600 --> 00:01:48.880
+10 gets put on, 20 gets put on,
+
+00:01:48.880 --> 00:01:50.200
+then 10 will get duplicated
+
+00:01:50.200 --> 00:01:52.680
+and put on the top of the stack.
+
+00:01:52.680 --> 00:01:55.920
+We can increment. For example, this increments
+
+00:01:55.920 --> 00:01:58.760
+the second to bottom, the second to bottom
+
+00:01:58.760 --> 00:01:59.920
+from the stack.
+
+00:01:59.920 --> 00:02:04.400
+So 10, 20, increment that, clear.
+
+00:02:04.400 --> 00:02:07.640
+That's basic stack operations.
+
+00:02:07.640 --> 00:02:11.000
+Next up, we have numeric commands.
+
+00:02:11.000 --> 00:02:12.560
+For example, here, if we add "add",
+
+00:02:12.560 --> 00:02:14.680
+it pops two values off the stack,
+
+00:02:14.680 --> 00:02:17.080
+adds them, and pushes the result on.
+
+00:02:17.080 --> 00:02:20.680
+Another way we can write this is as follows.
+
+00:02:20.680 --> 00:02:22.480
+We can have the add here
+
+00:02:22.480 --> 00:02:26.400
+and then nest the two constants,
+
+00:02:26.400 --> 00:02:28.520
+and then this does the same thing.
+
+00:02:28.520 --> 00:02:31.720
+First, the inner constant operations run,
+
+00:02:31.720 --> 00:02:35.520
+and then the outer add operation runs.
+
+00:02:35.520 --> 00:02:40.280
+We can nest as deeply as we want.
+
+00:02:40.280 --> 00:02:44.680
+There's also subtraction, multiplication, and whatnot.
+
+00:02:44.680 --> 00:02:46.480
+Next up are Boolean operations.
+
+00:02:46.480 --> 00:02:49.080
+Zero counts as true.
+
+00:02:49.080 --> 00:02:51.720
+Anything else--sorry, zero counts as false.
+
+00:02:51.720 --> 00:02:52.760
+Anything else is true.
+
+00:02:52.760 --> 00:03:01.840
+For example, this would give us false and true,
+
+00:03:01.840 --> 00:03:04.040
+so that result should be false.
+
+00:03:04.040 --> 00:03:06.120
+Zero gets put on the stack,
+
+00:03:06.120 --> 00:03:08.160
+one gets put on, and then the "and" operation.
+
+00:03:08.160 --> 00:03:12.840
+So there's also or, not,
+
+00:03:12.840 --> 00:03:17.760
+and various numerical comparison operations
+
+00:03:17.760 --> 00:03:21.400
+like greater than and less than.
+
+00:03:21.400 --> 00:03:22.880
+Next up are the port operations.
+
+00:03:22.880 --> 00:03:27.320
+We can send values to other cells as follows.
+
+00:03:27.320 --> 00:03:29.600
+Here we create a value
+
+00:03:29.600 --> 00:03:33.640
+and then send it right.
+
+00:03:33.640 --> 00:03:35.040
+Let's run this.
+
+00:03:35.040 --> 00:03:37.480
+The 10 goes on the stack,
+
+00:03:37.480 --> 00:03:38.480
+and then it gets sent to the right.
+
+00:03:38.480 --> 00:03:41.360
+Here it's waiting for this cell to pick it up.
+
+00:03:41.360 --> 00:03:44.360
+It can pick it up just as follows.
+
+00:03:44.360 --> 00:03:47.480
+So left... and then why don't we have it
+
+00:03:47.480 --> 00:03:49.520
+drop that value after it gets it.
+
+00:03:49.520 --> 00:03:53.920
+So the 10 gets sent to the right.
+
+00:03:53.920 --> 00:04:00.240
+This one picks it up and drops it.
+
+00:04:00.240 --> 00:04:03.200
+Lastly, we have control flow,
+
+00:04:03.200 --> 00:04:04.280
+which is a bit tricky,
+
+00:04:04.280 --> 00:04:06.880
+but with this visual,
+
+00:04:06.880 --> 00:04:08.440
+it helps explain it.
+
+00:04:08.440 --> 00:04:12.280
+There are two block constructs, "block" and "loop",
+
+00:04:12.280 --> 00:04:16.880
+and there's two jumping constructs, "br" and "brif".
+
+00:04:16.880 --> 00:04:23.120
+So if "loop" is jumped to,
+
+00:04:23.120 --> 00:04:25.360
+the control flow goes to the beginning,
+
+00:04:25.360 --> 00:04:26.520
+the top of the loop.
+
+00:04:26.520 --> 00:04:28.640
+If a block is jumped to,
+
+00:04:28.640 --> 00:04:31.520
+it goes to the end of the block,
+
+00:04:31.520 --> 00:04:33.640
+and these various blocks
+
+00:04:33.640 --> 00:04:36.520
+are identified by their level of nestedness.
+
+00:04:36.520 --> 00:04:40.640
+From the point of view of this jump statement,
+
+00:04:40.640 --> 00:04:45.160
+this "br" statement, this is block level 0,
+
+00:04:45.160 --> 00:04:46.440
+this is 1, this is 2.
+
+00:04:46.440 --> 00:04:49.560
+So here, "br 1" would be referring to this loop.
+
+00:04:49.560 --> 00:04:51.080
+What this [br 1] would do is,
+
+00:04:51.080 --> 00:04:54.000
+it would jump to this loop right here.
+
+00:04:54.000 --> 00:04:57.360
+If we were to do this [br 2], what this would do is,
+
+00:04:57.360 --> 00:05:02.680
+this would jump past this block right here.
+
+00:05:02.680 --> 00:05:09.880
+So as another example, this right here,
+
+00:05:09.880 --> 00:05:15.720
+this is a loop that generates increasing numbers.
+
+00:05:15.720 --> 00:05:22.640
+Let's see. Next up, we have modules.
+
+00:05:22.640 --> 00:05:26.280
+This is an example of a stack module.
+
+00:05:26.280 --> 00:05:28.760
+In addition to stack, there's also heaps.
+
+00:05:28.760 --> 00:05:34.560
+What this does is it allows us to create
+
+00:05:34.560 --> 00:05:38.080
+an extra stack that we can push and pop items onto.
+
+00:05:38.080 --> 00:05:41.240
+This one can have as large size as we need.
+
+00:05:41.240 --> 00:05:43.800
+Here it has a size of 20.
+
+00:05:43.800 --> 00:05:46.400
+It's taking values from up
+
+00:05:46.400 --> 00:05:51.080
+and exposing those values on the left.
+
+00:05:51.080 --> 00:05:57.080
+This loop right here, it generates numbers,
+
+00:05:57.080 --> 00:05:59.160
+and it's putting them onto the stack.
+
+00:05:59.160 --> 00:06:00.920
+We can see here that those numbers
+
+00:06:00.920 --> 00:06:03.200
+are being exposed to this cell right here.
+
+00:06:03.200 --> 00:06:07.040
+It's just taking values, and eventually,
+
+00:06:07.040 --> 00:06:11.200
+it's going to overflow and cause an error.
+
+00:06:11.200 --> 00:06:14.480
+That finishes the basic commands.
+
+00:06:14.480 --> 00:06:16.480
+Why don't we try solving this puzzle.
+
+00:06:16.480 --> 00:06:21.320
+The puzzle description is right here.
+
+00:06:21.320 --> 00:06:23.280
+We want to read a value from I.
+
+00:06:23.280 --> 00:06:28.480
+Send 1 to G if I is greater than 0.
+
+00:06:28.480 --> 00:06:30.800
+Send 1 to E if it's equal to 0.
+
+00:06:30.800 --> 00:06:32.440
+Send 1 to L if it's less than 0.
+
+00:06:32.440 --> 00:06:35.360
+And then all the other ones, we send 0 to.
+
+00:06:35.360 --> 00:06:40.920
+First things first, let's send the value we get
+
+00:06:40.920 --> 00:06:44.400
+from the input down as follows.
+
+00:06:44.400 --> 00:06:49.680
+Let's send that value right.
+
+00:06:49.680 --> 00:06:51.240
+You get from up.
+
+00:06:51.240 --> 00:06:54.320
+Okay. So next, we're getting a value on the left.
+
+00:06:54.320 --> 00:06:58.040
+Now we want to compare if this number is greater than 0.
+
+00:06:58.040 --> 00:06:59.800
+If it's greater than 0, we send 1 to G.
+
+00:06:59.800 --> 00:07:03.280
+Let's perform the greater than operation
+
+00:07:03.280 --> 00:07:08.080
+on that item we just got, and we're comparing it to 0.
+
+00:07:08.080 --> 00:07:11.680
+Now that result, we're going to send down,
+
+00:07:11.680 --> 00:07:13.880
+and we're going to send this original value
+
+00:07:13.880 --> 00:07:16.880
+we got from here to the right.
+
+00:07:16.880 --> 00:07:19.000
+Here, we do a similar step.
+
+00:07:19.000 --> 00:07:20.240
+We get the value from the left,
+
+00:07:20.240 --> 00:07:22.920
+but this time, we have to do an equal operation.
+
+00:07:22.920 --> 00:07:25.760
+Is that number we got equal to 0?
+
+00:07:25.760 --> 00:07:28.960
+We send that result down,
+
+00:07:28.960 --> 00:07:32.880
+and then send this number to the right.
+
+00:07:32.880 --> 00:07:38.040
+Lastly, we get this number from the left.
+
+00:07:38.040 --> 00:07:42.400
+Here, we need to compare if it's less than 0.
+
+00:07:42.400 --> 00:07:45.640
+We send that result down,
+
+00:07:45.640 --> 00:07:50.280
+and now lastly, we drop that remaining value.
+
+00:07:50.280 --> 00:07:53.080
+Okay, let's--oh, and then lastly,
+
+00:07:53.080 --> 00:07:56.040
+we need to send down the value we get up.
+
+00:07:56.040 --> 00:08:02.560
+Send down, up, send down, up.
+
+00:08:02.560 --> 00:08:04.760
+Okay, so let's try running this.
+
+00:08:04.760 --> 00:08:08.920
+Let's see. We notice that
+
+00:08:08.920 --> 00:08:10.360
+the numbers are coming in from I.
+
+00:08:10.360 --> 00:08:14.200
+They're going through our various conditions
+
+00:08:14.200 --> 00:08:18.160
+and should be sending all the correct values.
+
+00:08:18.160 --> 00:08:23.560
+It looks like we're not getting any errors so far.
+
+00:08:23.560 --> 00:08:26.680
+Let's speed this up.
+
+00:08:26.680 --> 00:08:33.040
+That completes the puzzle.
+
+00:08:33.040 --> 00:08:42.000
+Now let's get into some of the implementation details.
+
+00:08:42.000 --> 00:08:46.320
+The first thing is the game loop.
+
+00:08:46.320 --> 00:08:50.560
+The game loop is... So this is actually extremely simple.
+
+00:08:50.560 --> 00:08:52.320
+All the state for the entire game
+
+00:08:52.320 --> 00:08:54.400
+is stored in just a few variables.
+
+00:08:54.400 --> 00:08:56.480
+There's one variable storing
+
+00:08:56.480 --> 00:09:01.400
+the text of each cell as a vector of strings.
+
+00:09:01.400 --> 00:09:06.280
+There's a single function
+
+00:09:06.280 --> 00:09:09.080
+that renders the entire game, the entire board.
+
+00:09:09.080 --> 00:09:11.120
+There's a single function that would render
+
+00:09:11.120 --> 00:09:13.920
+this entire screen based off of the state,
+
+00:09:13.920 --> 00:09:19.240
+and then the game waits for you to press a key.
+
+00:09:19.240 --> 00:09:24.120
+The key usually, depending on what action you perform,
+
+00:09:24.120 --> 00:09:27.040
+updates the state and causes a re-render.
+
+00:09:27.040 --> 00:09:29.360
+It's an extremely simple game loop,
+
+00:09:29.360 --> 00:09:32.800
+but it makes implementing it pretty easy.
+
+00:09:32.800 --> 00:09:35.200
+To demonstrate how this game loop works,
+
+00:09:35.200 --> 00:09:38.400
+I have a simple demo prepared.
+
+00:09:38.400 --> 00:09:41.880
+This is a game of tic-tac-toe.
+
+00:09:41.880 --> 00:09:44.800
+Let me show this real fast.
+
+00:09:44.800 --> 00:09:49.200
+It's an extremely simple implementation,
+
+00:09:49.200 --> 00:09:51.465
+but it follows the same principles
+
+00:09:51.466 --> 00:09:53.600
+that I used in asm-blox.
+
+00:09:53.600 --> 00:09:57.680
+First, we have the state defined in variables.
+
+00:09:57.680 --> 00:09:59.560
+Here we have two pieces of state.
+
+00:09:59.560 --> 00:10:01.600
+We have which player's turn it is
+
+00:10:01.600 --> 00:10:03.120
+and the state of the game board.
+
+00:10:03.120 --> 00:10:06.640
+The player turn can be nil if it's empty,
+
+00:10:06.640 --> 00:10:08.760
+the string "x" or the string "o".
+
+00:10:08.760 --> 00:10:14.240
+Then the game board is a list of nine board elements.
+
+00:10:14.240 --> 00:10:16.960
+So that's the state.
+
+00:10:16.960 --> 00:10:18.120
+Then we have a helper function.
+
+00:10:18.120 --> 00:10:19.440
+You can go into the details,
+
+00:10:19.440 --> 00:10:21.000
+but it just returns true
+
+00:10:21.000 --> 00:10:25.600
+if the board has a winning player.
+
+00:10:25.600 --> 00:10:30.040
+Part two is the rendering function.
+
+00:10:30.040 --> 00:10:32.800
+Only based off of the game state,
+
+00:10:32.800 --> 00:10:36.720
+we have a function that erases the buffer
+
+00:10:36.720 --> 00:10:40.280
+and draws this from scratch.
+
+00:10:40.280 --> 00:10:45.320
+That's this part right here.
+
+00:10:45.320 --> 00:10:46.720
+Lastly, we have the action.
+
+00:10:46.720 --> 00:10:51.920
+We have one action which is bound to RET,
+
+00:10:51.920 --> 00:10:55.840
+and it places a player token.
+
+00:10:55.840 --> 00:10:59.920
+Once it places a player token,
+
+00:10:59.920 --> 00:11:03.120
+it rerenders the board,
+
+00:11:03.120 --> 00:11:06.880
+and all the rerendering is handled by this function.
+
+00:11:06.880 --> 00:11:12.480
+Then we have just creating of the mode
+
+00:11:12.480 --> 00:11:14.680
+and initialization function.
+
+00:11:14.680 --> 00:11:16.680
+With these three steps
+
+00:11:16.680 --> 00:11:20.640
+it clearly separates out all of the state,
+
+00:11:20.640 --> 00:11:22.960
+the rendering, and the actions,
+
+00:11:22.960 --> 00:11:25.880
+and it makes implementing it very simple.
+
+00:11:25.880 --> 00:11:29.640
+One trick that's used here and that I use
+
+00:11:29.640 --> 00:11:32.382
+in my asm-blox game is that
+
+00:11:32.383 --> 00:11:33.316
+when I render the board,
+
+00:11:33.317 --> 00:11:40.800
+I propertize the text to contain extra information.
+
+00:11:40.800 --> 00:11:45.080
+For example, here, each cell has
+
+00:11:45.080 --> 00:11:49.400
+a tic-tac-toe index to indicate which number cell it is.
+
+00:11:49.400 --> 00:11:53.640
+This has index 0, 1, 2, all the way up to 8.
+
+00:11:53.640 --> 00:11:58.640
+That way, for placing, the only thing it has to do
+
+00:11:58.640 --> 00:12:01.200
+is just look at its position
+
+00:12:01.200 --> 00:12:04.960
+based off of the text property.
+
+00:12:04.960 --> 00:12:07.800
+It makes implementation extremely simple.
+
+00:12:07.800 --> 00:12:14.360
+Next up, we have the implementation of the code cells.
+
+00:12:14.360 --> 00:12:16.960
+If you notice, here it's kind of weird
+
+00:12:16.960 --> 00:12:21.000
+how it's like a buffer, but each cell kind of acts
+
+00:12:21.000 --> 00:12:25.760
+like its own buffer, and it has its own limits.
+
+00:12:25.760 --> 00:12:27.600
+All of the Emacs editing--
+
+00:12:27.600 --> 00:12:30.760
+well, some of the Emacs editing commands kind of work,
+
+00:12:30.760 --> 00:12:35.360
+like beginning-of-line, end-of-line, end-of-buffer.
+
+00:12:35.360 --> 00:12:38.240
+How is that done?
+
+00:12:38.240 --> 00:12:41.760
+Well, it's all just a trick, actually.
+
+00:12:41.760 --> 00:12:47.280
+Each cell has text properties of which line it's at
+
+00:12:47.280 --> 00:12:48.800
+and its cell coordinates.
+
+00:12:48.800 --> 00:12:54.360
+Whenever a key is pressed for editing, moving lines--
+
+00:12:54.360 --> 00:12:58.360
+there's even kind of more complicated things
+
+00:12:58.360 --> 00:13:00.600
+like switching cells around--
+
+00:13:00.600 --> 00:13:03.360
+so all of that,
+
+00:13:03.360 --> 00:13:05.200
+it knows which position it's in,
+
+00:13:05.200 --> 00:13:08.080
+it knows what cell it's in,
+
+00:13:08.080 --> 00:13:12.880
+and then it copies the text of the cell,
+
+00:13:12.880 --> 00:13:16.320
+because remember, the contents of the cell
+
+00:13:16.320 --> 00:13:18.360
+are stored in internal state.
+
+00:13:18.360 --> 00:13:23.000
+It copies that cell contents into a temporary buffer.
+
+00:13:23.000 --> 00:13:27.960
+It then moves the point to whichever line it was
+
+00:13:27.960 --> 00:13:31.160
+in the game board.
+
+00:13:31.160 --> 00:13:33.000
+It performs the action.
+
+00:13:33.000 --> 00:13:36.200
+It makes sure that the resulting text isn't
+
+00:13:36.200 --> 00:13:40.160
+longer than the cell width or the cell height.
+
+00:13:40.160 --> 00:13:42.040
+If everything checks out,
+
+00:13:42.040 --> 00:13:45.120
+it updates the state and calls a re-render.
+
+00:13:45.120 --> 00:13:48.440
+So there's nothing going on in here
+
+00:13:48.440 --> 00:13:51.080
+that's, like, actually inserting a letter A.
+
+00:13:51.080 --> 00:14:00.920
+It's all updating the state and causing a re-render.
+
+00:14:00.920 --> 00:14:03.640
+So this makes things like certain
+
+00:14:03.640 --> 00:14:06.480
+internal Emacs editing constructs
+
+00:14:06.480 --> 00:14:09.120
+pretty hard to use, like undoing.
+
+00:14:09.120 --> 00:14:12.200
+Normally the undoing construct
+
+00:14:12.200 --> 00:14:15.120
+works off the contents of the buffer.
+
+00:14:15.120 --> 00:14:17.840
+But if your buffer is actually just
+
+00:14:17.840 --> 00:14:20.080
+a reflection of the internal state,
+
+00:14:20.080 --> 00:14:21.440
+then how does undoing work?
+
+00:14:21.440 --> 00:14:24.880
+Well, it pretty much is kind of a hack.
+
+00:14:24.880 --> 00:14:27.040
+I mean, undoing is here,
+
+00:14:27.040 --> 00:14:32.680
+but it's pretty much redone
+
+00:14:32.680 --> 00:14:37.560
+in a not so configurable, not so modifiable way.
+
+00:14:37.560 --> 00:14:40.080
+Pretty much everything is like that,
+
+00:14:40.080 --> 00:14:42.440
+from these parentheses highlighting...
+
+00:14:42.440 --> 00:14:46.320
+Normally, parentheses highlighting
+
+00:14:46.320 --> 00:14:47.243
+would be kind of weird,
+
+00:14:47.244 --> 00:14:49.840
+with cross-line parentheses and everything.
+
+00:14:49.840 --> 00:14:52.360
+All of that had to be redone.
+
+00:14:52.360 --> 00:14:58.160
+Another point about how this is implemented
+
+00:14:58.160 --> 00:15:02.360
+is the assembly text to executable code.
+
+00:15:02.360 --> 00:15:05.800
+If you're familiar with WebAssembly
+
+00:15:05.800 --> 00:15:10.720
+you might have encountered a tool wat-wasm.
+
+00:15:10.720 --> 00:15:16.440
+It basically converts the WebAssembly text format
+
+00:15:16.440 --> 00:15:18.280
+to byte code.
+
+00:15:18.280 --> 00:15:22.440
+And what I do here... It goes through a similar process.
+
+00:15:22.440 --> 00:15:28.000
+Normally, when you're writing this text format,
+
+00:15:28.000 --> 00:15:30.360
+you can nest things as deeply as you want.
+
+00:15:30.360 --> 00:15:33.800
+Basically, what happens is it flattens out everything.
+
+00:15:33.800 --> 00:15:35.920
+It kind of knows the order
+
+00:15:35.920 --> 00:15:38.160
+that all these things are going to get executed,
+
+00:15:38.160 --> 00:15:40.680
+and then it puts it into one single line
+
+00:15:40.680 --> 00:15:44.120
+that it can just run through and execute.
+
+00:15:44.120 --> 00:15:48.360
+The same thing for the loops and blocks.
+
+00:15:48.360 --> 00:15:52.240
+It internally generates labels and jump statements.
+
+00:15:52.240 --> 00:15:58.640
+So that concludes this presentation.
+
+00:15:58.640 --> 00:15:59.666
+Thank you for listening,
+
+00:15:59.667 --> 00:16:07.440
+and I hope you enjoy the rest of the conference.
diff --git a/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.vtt b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.vtt
new file mode 100644
index 00000000..b13e2c13
--- /dev/null
+++ b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.vtt
@@ -0,0 +1,970 @@
+WEBVTT
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:06.999
+[Amin]: Okay, so for folks, you can start asking your questions over IRC or the PAD,
+
+00:00:07.000 --> 00:00:10.839
+and after a minute or two, we'll also open up this big blue button room
+
+00:00:10.840 --> 00:00:14.799
+for those of you who would like to join here to ask these questions directly.
+
+00:00:14.800 --> 00:00:16.199
+Michael, take it away.
+
+00:00:16.200 --> 00:00:21.599
+[Michael]: Okay, cool. It looks like we've got two questions on the PAD.
+
+NOTE How does this approach compare to using tq.el, Emacs' built-in library for transaction queues?
+
+00:00:21.600 --> 00:00:26.039
+The first, how does this approach compare to using TQ.L,
+
+00:00:26.040 --> 00:00:29.279
+Emacs's built-in library for transaction queues?
+
+00:00:29.280 --> 00:00:31.759
+Yeah, that's actually a great question.
+
+00:00:31.760 --> 00:00:35.159
+I should have called out TQ in the talk
+
+00:00:35.160 --> 00:00:40.559
+because I actually took a hard look at it in terms of my implementation.
+
+00:00:40.560 --> 00:00:47.159
+You could absolutely build this using TQ.L. I chose not to because
+
+00:00:47.160 --> 00:00:51.199
+I didn't see any compelling benefits to pay the cost
+
+00:00:51.200 --> 00:00:58.199
+of adding another dependency and creating a buffer for each new connection.
+
+00:00:58.200 --> 00:01:04.679
+In the actual implementation, input is buffered into a variable connected
+
+00:01:04.680 --> 00:01:10.479
+to the connection object and just handled there.
+
+NOTE Have you considered using the aio.el library (written by Chris Wellons) that implements async/await for Emacs lisp using promises?
+
+00:01:10.480 --> 00:01:16.439
+Have you considered using the AIO.L library written by Chris Wellens,
+
+00:01:16.440 --> 00:01:22.239
+implements async await for Emacs Lisp using promises. Implemented
+
+00:01:22.240 --> 00:01:25.559
+using Elisp's record data structure turns the nested callbacks into
+
+00:01:25.560 --> 00:01:30.279
+regular-looking Elisp code without introducing new keywords. Cool. No,
+
+00:01:30.280 --> 00:01:34.959
+I didn't because I was not aware of the package. But the fact
+
+00:01:34.960 --> 00:01:40.519
+that it was written by Chris Wellens alone is enough to get me to take a look.
+
+00:01:40.520 --> 00:01:43.879
+So yeah, perhaps that could have been another implementation.
+
+00:01:43.880 --> 00:01:49.159
+But I don't know. This kind of code journey finally got me
+
+00:01:49.160 --> 00:02:03.919
+to understand Emacs Lisp. I don't regret anything else.
+
+00:02:03.920 --> 00:02:07.119
+[Amin]: I think your last sentence was a little cutting off, Michael.
+
+00:02:07.120 --> 00:02:09.199
+Maybe you were a little far from the mic.
+
+00:02:09.200 --> 00:02:13.199
+But yeah. Okay. All I was going to say is, yeah, I mean,
+
+00:02:13.200 --> 00:02:19.679
+leave it to Chris Wellens to solve the problem in all generality.
+
+00:02:19.680 --> 00:02:27.479
+All I noted at the end was given that this little project
+
+00:02:27.480 --> 00:02:34.079
+is what finally got me to understand Emacs macros or Lisp macros, you know,
+
+00:02:34.080 --> 00:02:42.719
+I kind of, I don't regret running down this implementation.
+
+00:02:42.720 --> 00:02:45.439
+We've got another question coming in.
+
+NOTE Are you aware that EMMS has an MPD client? There's also mpc.el built into Emacs.
+
+00:02:45.440 --> 00:02:49.399
+Am I aware that Ems has an MPD, I absolutely am.
+
+00:02:49.400 --> 00:02:54.399
+And there's actually another MPD client for Emacs called MPD-L.
+
+00:02:54.400 --> 00:03:05.399
+Yes, yes there is. So again, I probably should have talked about this in before,
+
+00:03:05.400 --> 00:03:10.759
+but I was pressed for time. I was not looking, yeah,
+
+00:03:10.760 --> 00:03:16.239
+I was not looking for a full-fledged MPD client. Sometimes MPD-L
+
+00:03:16.240 --> 00:03:22.839
+and MPC.L can give you a full UX within Emacs
+
+00:03:22.840 --> 00:03:27.599
+and I would absolutely recommend them if that's what you're looking for.
+
+00:03:27.600 --> 00:03:36.039
+I wanted to just add a few tweaks to my workflow.
+
+00:03:36.040 --> 00:03:41.039
+Now increase the volume while coding, put the track name and the mode line,
+
+00:03:41.040 --> 00:03:46.159
+things like that. So I felt like those were a little heavyweight.
+
+00:03:46.160 --> 00:03:53.439
+In fact, I ended up corresponding with the author of MPD-L.
+
+00:03:53.440 --> 00:04:00.679
+And kind of the analogy I came up with was if, you know, MPD-L is to MPD
+
+00:04:00.680 --> 00:04:03.959
+as good news is to email, I wanted to build mail utils.
+
+00:04:03.960 --> 00:04:07.039
+I just wanted a couple of very tight little utilities
+
+00:04:07.040 --> 00:04:12.879
+that would get me what I wanted. But yeah, actually
+
+00:04:12.880 --> 00:04:15.559
+that's also a great callout. Perhaps I should have included references
+
+00:04:15.560 --> 00:04:39.719
+to those clients. One thing I will mention is
+
+00:04:39.720 --> 00:04:42.559
+I think we've got plenty of time for questions.
+
+00:04:42.560 --> 00:04:47.879
+Maybe close to 25 minutes or half an hour, which is very interesting.
+
+00:04:47.880 --> 00:04:51.679
+I think in many cases it's been more than the actual length of the talks.
+
+00:04:51.680 --> 00:04:57.039
+And I think that's a side effect of sort of, I guess, going with two tracks,
+
+00:04:57.040 --> 00:05:01.879
+which is nicer. There's much more breathing room between the talks this year.
+
+00:05:01.880 --> 00:05:05.759
+So if there are questions, as long as there are questions coming in,
+
+00:05:05.760 --> 00:05:09.759
+or if you do also want to present anything extended, you know,
+
+00:05:09.760 --> 00:05:11.999
+more than what you covered in your talk, you're also welcome to do that
+
+00:05:12.000 --> 00:05:14.439
+and, like, stay here. So.
+
+00:05:14.440 --> 00:05:20.359
+Okay. Cool. Now I'm happy to hang out. This is an interesting question.
+
+NOTE Have you seen the Lonesome Pine Specials?
+
+00:05:20.360 --> 00:05:22.839
+Have I seen the Lonesome Pine specials?
+
+00:05:22.840 --> 00:05:28.079
+During the talk he saw my music library and figured I'd be interested.
+
+00:05:28.080 --> 00:05:32.279
+I have not. But oh, interesting. Bella Fleck. Cool.
+
+00:05:32.280 --> 00:06:10.359
+I will be checking out Lonesome Pine, thank you.
+
+00:06:10.360 --> 00:07:27.159
+Oh, that's an awesome, awesome tip. Cool.
+
+00:07:27.400 --> 00:07:29.999
+That's probably going to be it for the questions.
+
+00:07:30.000 --> 00:07:33.999
+Do we just, do we hang out for the balance of the time?
+
+00:07:34.000 --> 00:07:37.679
+Yeah, sure. I think there's actually one new question on the pad
+
+00:07:37.680 --> 00:07:40.999
+and I might have one to ask as well, but yeah, otherwise we can.
+
+00:07:41.000 --> 00:07:44.399
+Oh, apologies. Yeah, I needed to scroll down.
+
+NOTE Would using dynamic/special vars add anything interesting / easier to async elisp in your opinion?
+
+00:07:44.400 --> 00:07:49.679
+Would using dynamic special VARs add anything interesting,
+
+00:07:49.680 --> 00:07:55.239
+easier to async with? I'm not sure what you mean by
+
+00:07:55.240 --> 00:08:48.159
+dynamic or special variables. Can you say a little more?
+
+00:08:48.160 --> 00:08:54.999
+Okay, fair enough. I mean, certainly in the examples that I included,
+
+00:08:55.000 --> 00:09:21.919
+we could use variables at a larger scope. Yeah, yeah.
+
+00:09:21.920 --> 00:09:31.199
+Interesting. Good question. I would have to think on that one.
+
+00:09:31.200 --> 00:09:39.479
+To be honest, I went hard down the lexical binding path a few years ago
+
+00:09:39.480 --> 00:09:43.959
+when it was introduced to ELISP, precisely because I found dynamic binding
+
+00:09:43.960 --> 00:09:49.239
+so much more difficult to reason about. Possibly.
+
+00:09:49.240 --> 00:10:10.119
+[Amin]: So I guess one question I might have,
+
+00:10:10.120 --> 00:10:13.479
+prefixing it with the fact that I wasn't able to fully follow your talk
+
+00:10:13.480 --> 00:10:16.559
+because I've been basically behind the scenes.
+
+NOTE How does your project compare to some of the other MPD clients?
+
+00:10:16.560 --> 00:10:22.079
+But how would you say that your project compares to some of the other,
+
+00:10:22.080 --> 00:10:23.879
+I guess, MPD clients?
+
+00:10:23.880 --> 00:10:29.359
+[Michael]: Yeah, like a couple of years ago, I used to use ncmpcpp myself,
+
+00:10:29.360 --> 00:10:33.159
+and also I tried a bunch of different ones.
+
+00:10:33.160 --> 00:10:35.679
+I never quite got into using emms as one.
+
+00:10:35.680 --> 00:10:39.359
+[Amin]: I noticed that you mentioned that, for example, for some of the other ones,
+
+00:10:39.360 --> 00:10:43.079
+maybe like npc.l, yours may be much more lightweight.
+
+00:10:43.080 --> 00:10:47.279
+But yeah, I was wondering how you would compare them.
+
+00:10:47.280 --> 00:10:55.639
+[Michael]: Yeah, yeah. So those are what I would call full-fledged applications.
+
+00:10:55.640 --> 00:11:00.759
+You're familiar with ncmpcpp. You could swap that out as your daily driver
+
+00:11:00.760 --> 00:11:06.039
+for any of those. They show you the playlist. They let you browse.
+
+00:11:06.040 --> 00:11:15.079
+They let you set up saved playlists, et cetera, et cetera, et cetera.
+
+00:11:15.080 --> 00:11:19.479
+And this does none of that. This is basically a building block.
+
+00:11:19.480 --> 00:11:23.599
+These are building blocks for building up Emacs commands.
+
+00:11:23.600 --> 00:11:31.879
+So for instance, I actually have a little minor mode that holds the key cord.
+
+00:11:31.880 --> 00:11:36.079
+You can adjust the volume. You can skip to the next track.
+
+00:11:36.080 --> 00:11:44.439
+You can do a few things like that. But that's it.
+
+00:11:44.440 --> 00:11:48.839
+More of a tool kit than an application, I guess, is the way I would put it.
+
+00:11:48.840 --> 00:11:55.039
+[Amin]: Right, right. Makes a lot of sense.
+
+NOTE Can you share the code to the macro that creates the callback tree?
+
+00:11:55.040 --> 00:12:05.599
+Awesome. Another question. Can I share the code to the macro?
+
+00:12:05.600 --> 00:12:15.599
+Help a bit for folks.
+
+00:12:15.640 --> 00:12:22.519
+And it's on OPA. Let me share a link here. Or
+
+00:12:22.520 --> 00:12:26.879
+I guess maybe GitHub would be the better UX. I can do that right now.
+
+00:12:26.880 --> 00:12:27.599
+Let's see here.
+
+00:12:27.600 --> 00:12:32.559
+I'll put it in the pad.
+
+00:12:32.560 --> 00:12:34.199
+Don't judge me. It's my first list macro.
+
+00:12:34.240 --> 00:12:44.639
+OK. So I can do that. I can do that. I can do that. I can do that.
+
+00:12:44.640 --> 00:13:11.279
+I can do that. I can do that. I can do that. I can do that.
+
+00:13:11.280 --> 00:13:22.559
+[Amin]: I think we got all the questions. I think this is an interesting sort of,
+
+00:13:22.560 --> 00:13:26.399
+I guess, topic or thing that's come up today. I think multiple times,
+
+00:13:26.400 --> 00:13:30.919
+there was also partly mentioned in RMS's talk as part of the Q&A
+
+00:13:30.920 --> 00:13:33.679
+where he was sort of complaining a little bit or saying that
+
+00:13:33.680 --> 00:13:36.839
+how he would like to see some of org's features, I guess,
+
+00:13:36.840 --> 00:13:39.799
+be decoupled from org or org syntax
+
+00:13:39.800 --> 00:13:42.439
+and just be made available either as libraries
+
+00:13:42.440 --> 00:13:45.199
+or maybe as smaller minor modes that one could use then
+
+00:13:45.200 --> 00:13:49.279
+throughout anywhere else in Emacs. And I think I do agree,
+
+00:13:49.280 --> 00:13:53.559
+and especially now in the context of MPD and using it via Emacs,
+
+00:13:53.560 --> 00:13:57.639
+I think it's very important to also have libraries or toolkits,
+
+00:13:57.640 --> 00:14:02.519
+as you mentioned, to be able to build upon them however you wish. So kudos.
+
+00:14:02.520 --> 00:14:05.439
+Thanks so much for working on this. It's very kind of you.
+
+00:14:05.440 --> 00:14:09.359
+[Michael]: Yeah, I mean, there was a much remarked upon,
+
+00:14:09.360 --> 00:14:14.679
+perhaps even controversial talk at last year's EmacsConf by Carl Voigt,
+
+00:14:14.680 --> 00:14:20.879
+if memory serves, proposing that the org mode markup language be sort of
+
+00:14:20.880 --> 00:14:27.279
+hoisted out and given a specification, he wanted to call it org down.
+
+00:14:27.280 --> 00:14:30.599
+And I think some people, for reasons unclear to me,
+
+00:14:30.600 --> 00:14:32.039
+were highly resistant to this.
+
+00:14:32.040 --> 00:14:42.879
+But yeah, yeah, mm-hmm, yeah, interesting.
+
+NOTE There's another package (chuntaro?) in addition to wellon's aio that also implements a coroutine trampoline on the emacs event loop. any thoughts on the async/await paradigm generally red/blue functions, etc?
+
+00:14:42.880 --> 00:14:46.959
+There's another package, Taro, perhaps,
+
+00:14:46.960 --> 00:14:55.999
+pronouncing that phonetically, in addition to Welland's AIO
+
+00:14:56.000 --> 00:15:01.759
+that also implements a coroutine trampoline on the Emacs event loop.
+
+00:15:01.760 --> 00:15:03.439
+Interesting.
+
+NOTE Any thoughts on the async await paradigm generally, red-blue functions, etc.?
+
+00:15:03.440 --> 00:15:07.759
+Any thoughts on the async await paradigm generally, red-blue functions,
+
+00:15:07.760 --> 00:15:10.879
+et cetera? Oh, wow.
+
+00:15:10.880 --> 00:15:18.799
+What color are my functions could be the topic of another talk in and of itself.
+
+00:15:18.800 --> 00:15:24.239
+Yeah, that's sort of the problem with async, isn't it? It's like a virus
+
+00:15:24.240 --> 00:15:26.399
+that infects your code base once you start.
+
+00:15:26.400 --> 00:15:31.959
+And having spent a fair amount of time in the past year or two
+
+00:15:31.960 --> 00:15:36.959
+writing async rust, I guess I've kind of made my peace with it.
+
+00:15:36.960 --> 00:15:39.639
+I was highly resistant to it at first.
+
+00:15:39.640 --> 00:15:46.919
+But who is that venture capitalist that diagrammed
+
+00:15:46.920 --> 00:15:50.079
+the uptake of new technology? And at first,
+
+00:15:50.080 --> 00:15:53.919
+you sort of saw this exponential curve of enthusiasm,
+
+00:15:53.920 --> 00:15:57.079
+then a peak, and you called it the valley of despair,
+
+00:15:57.080 --> 00:16:00.439
+and then sort of a plateau of acceptance.
+
+00:16:00.440 --> 00:16:05.519
+I kind of feel like asynchronous programming is kind of the hot new topic,
+
+00:16:05.520 --> 00:16:12.239
+and everybody's diving in, including in scenarios
+
+00:16:12.240 --> 00:16:14.639
+where I'm not sure I see the benefit
+
+00:16:14.640 --> 00:16:16.919
+to the additional complexity to your program.
+
+00:16:16.920 --> 00:16:23.719
+So I did it here because, as I tried to demonstrate,
+
+00:16:23.720 --> 00:16:28.319
+response latency back to the MPD server
+
+00:16:28.320 --> 00:16:34.639
+can reach into the realm of human perception, depending on the query.
+
+00:16:34.640 --> 00:16:37.519
+And my use case was, I'm in a buffer coding.
+
+00:16:37.520 --> 00:16:42.279
+I just want to quick adjust the volume, and I didn't want any pauses.
+
+00:16:42.280 --> 00:16:48.279
+But in a lot of other scenarios, I just don't see the benefit to.
+
+00:16:48.280 --> 00:16:55.959
+So yeah, I mean, that's my two cents.
+
+00:16:55.960 --> 00:17:07.759
+Yeah, I think there's a lot of care to be taken, well,
+
+00:17:07.760 --> 00:17:12.599
+I guess in both in advance consideration, but also while implementation,
+
+00:17:12.600 --> 00:17:15.839
+if one is going to add asynchronicity to an existing code base
+
+00:17:15.840 --> 00:17:20.719
+and making sure to cover essentially as many as existing workflows
+
+00:17:20.720 --> 00:17:23.239
+and code paths as possible.
+
+00:17:23.240 --> 00:17:27.879
+Yeah, exactly, exactly.
+
+00:17:27.880 --> 00:17:31.799
+You know, I've certainly gotten myself into trouble writing asynchronous code
+
+00:17:31.800 --> 00:17:36.039
+and locked up the async runtime, and it's like, well, you know,
+
+00:17:36.040 --> 00:17:39.759
+is the benefit worth it? I mean, look, if you're building a socket server
+
+00:17:39.760 --> 00:17:51.399
+of some sort, like a web service, microservice type of thing, all
+
+00:17:51.400 --> 00:17:54.999
+of the famous 10k connection problem from the last decade,
+
+00:17:55.000 --> 00:18:01.319
+if you're writing a command line tool, you know, Klee,
+
+00:18:01.320 --> 00:19:17.759
+I'm not sure why you need to spin up anything to run time for that. Yeah,
+
+00:19:17.760 --> 00:19:44.399
+I mean, I'm not sure why you need to spin up anything to run time for that.
+
+00:19:44.400 --> 00:20:10.399
+Yeah. Yeah. Yeah. Yeah, I mean, I'm not sure why you need
+
+00:20:10.400 --> 00:20:14.239
+to spin up anything to run time for that. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah.
+
+00:20:14.240 --> 00:20:18.399
+Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah.
+
+00:20:18.400 --> 00:20:20.919
+We'll definitely be checking. It's. So, Centauro appears to be the author.
+
+00:20:20.920 --> 00:20:24.999
+The package name is called Emacs Promise. Interesting. Okay,
+
+00:20:25.000 --> 00:20:29.039
+I see you reacting, I just wanted to check out if my mic is working.
+
+00:20:29.040 --> 00:20:30.999
+The talk, thank you for your interesting talk.
+
+00:20:31.000 --> 00:20:33.599
+That's a yak. I already shaved myself
+
+00:20:33.600 --> 00:20:36.639
+how to do async programming in Emacs.
+
+00:20:36.640 --> 00:20:39.679
+I found about the TQQ and I improved on it, too,
+
+00:20:39.680 --> 00:20:42.919
+and then I was thinking, okay, async programming.
+
+00:20:42.920 --> 00:20:49.079
+It wasn't how to do macros, but it was my whole into, yes,
+
+00:20:49.080 --> 00:20:51.679
+how to do async programming without callback hell.
+
+00:20:51.680 --> 00:20:54.719
+And as you said in your title, you did async before it was cool,
+
+00:20:54.720 --> 00:20:58.679
+because you often hear the opinion that Emacs doesn't do multithreading,
+
+00:20:58.680 --> 00:21:02.639
+it's just single threaded and therefore old and useless.
+
+00:21:02.640 --> 00:21:06.319
+Not like that, maybe.
+
+NOTE Do you think it's a viable future for Emacs to get out of callback hell?
+
+00:21:06.320 --> 00:21:10.599
+The solution you found, do you think it's a viable future
+
+00:21:10.600 --> 00:21:13.399
+for Emacs to get out of callback hell?
+
+00:21:13.400 --> 00:21:22.279
+I think so, but I would certainly, in the pad,
+
+00:21:22.280 --> 00:21:25.119
+somebody pointed out that Christopher Wellens
+
+00:21:25.120 --> 00:21:28.959
+came up with a general purpose async await library
+
+00:21:28.960 --> 00:21:32.839
+that I will definitely be taking a look at,
+
+00:21:32.840 --> 00:21:36.359
+because I think he used the phrase yak shaving
+
+00:21:36.360 --> 00:21:38.839
+and that's absolutely what I was doing here.
+
+00:21:38.840 --> 00:21:45.559
+So this solution is purpose-built to my little personal problem.
+
+00:21:45.560 --> 00:21:53.999
+It sounds like Wellens may have solved the problem in greater generality.
+
+00:21:54.000 --> 00:21:56.439
+But yeah, absolutely. I mean, periodically
+
+00:21:56.440 --> 00:22:00.999
+in the Emacs IRC channel or an Emacs devil, somebody will say, oh my God,
+
+00:22:01.000 --> 00:22:07.639
+I can't believe Emacs is single threaded, this is hopeless, and yeah, I think
+
+00:22:07.640 --> 00:22:10.159
+that here's another use case for asynchronous problem.
+
+00:22:10.160 --> 00:22:22.319
+It's interesting that you mentioned like the AIO from Christopher Wellens,
+
+00:22:22.320 --> 00:22:24.159
+because I had a look at it too.
+
+00:22:24.160 --> 00:22:28.919
+And if I remember correctly, he uses Emacs generators.
+
+00:22:28.920 --> 00:22:37.799
+I'm not really sure, I'm not sure anymore if that's the case. But yeah,
+
+00:22:37.800 --> 00:22:48.199
+that's another cool macro use to get out of callback Emacs generators.
+
+00:22:48.200 --> 00:22:55.399
+Did you see it already? I'm looking at it right now for the first time,
+
+00:22:55.400 --> 00:23:02.279
+oh gosh, look at this. And if you want, I can spare you a lot of time,
+
+00:23:02.280 --> 00:23:07.439
+because if you go down this road and you get the same direction as me,
+
+00:23:07.440 --> 00:23:10.599
+you'll find out like, okay, that's a cool solution.
+
+00:23:10.600 --> 00:23:13.519
+You already mentioned Go, the solution Go uses
+
+00:23:13.520 --> 00:23:15.799
+with the coroutines or green threads
+
+00:23:15.800 --> 00:23:22.359
+or whatever you name it. And I think, in my opinion, the best solution
+
+00:23:22.360 --> 00:23:28.159
+or the neatest solution of this problem in this plant or in general is Futures,
+
+00:23:28.160 --> 00:23:33.319
+no, not Futures, wrong name, host called, no, I just forgot.
+
+00:23:33.320 --> 00:23:41.839
+It's a guy's scheme, and it's from Andy Wingo. And he does it with fibers,
+
+00:23:41.840 --> 00:23:49.439
+not Futures, fibers, this is a really good solution for the problem of how
+
+00:23:49.440 --> 00:23:55.119
+to do async, how to do multi-color functions
+
+00:23:55.120 --> 00:23:57.719
+and say they have all functions the same name.
+
+00:23:57.720 --> 00:24:05.599
+And it's fundamentally based on concurrent ML, and yeah, fibers on top, this
+
+00:24:05.600 --> 00:24:09.079
+is cool. I would like to see this in the mix. Interesting.
+
+00:24:09.080 --> 00:24:13.559
+So I found this talk, Channels, Concurrency, and Cores,
+
+00:24:13.560 --> 00:24:16.679
+a New Concurrent ML Implementation.
+
+00:24:16.680 --> 00:24:18.439
+This one, yes.
+
+00:24:18.440 --> 00:24:34.719
+Okay, I will be taking a look at this, thank you.
+
+00:24:34.720 --> 00:24:35.759
+You're welcome.
+
+00:24:35.760 --> 00:24:39.319
+Maybe to expand on this, if you don't mind. Please.
+
+NOTE Generators
+
+00:24:39.320 --> 00:24:44.919
+The idea behind it is like Chris Wellon uses generators,
+
+00:24:44.920 --> 00:24:47.399
+generators like in Python generators,
+
+00:24:47.400 --> 00:24:49.599
+like you have some function, and it can yield,
+
+00:24:49.600 --> 00:24:54.279
+and you can start it again at this point, and so on and so on.
+
+00:24:54.280 --> 00:25:00.559
+It's an Emacs, and it's a hack. It uses a macro for the code processing,
+
+00:25:00.560 --> 00:25:02.879
+and then it's bits of callbacks, more or less.
+
+00:25:02.880 --> 00:25:07.759
+And it's a solution for like how do I specify callbacks
+
+00:25:07.760 --> 00:25:15.039
+without writing actually callbacks with writing synchronous looking one color.
+
+00:25:15.040 --> 00:25:20.759
+And the general solution, and that's the reason Andy Wingo can do it in Guile,
+
+00:25:20.760 --> 00:25:27.519
+for them is the limited continuations. You have a delimited continuation,
+
+00:25:27.520 --> 00:25:30.639
+that means you have a point in your program where you can yield,
+
+00:25:30.640 --> 00:25:35.639
+and it yields until a prompt, like it yields a part of your code.
+
+00:25:35.640 --> 00:25:38.839
+What that means is your code can stop
+
+00:25:38.840 --> 00:25:43.239
+and pass the rest of the computation to something else,
+
+00:25:43.240 --> 00:25:46.319
+and this something else can invoke the computation.
+
+00:25:46.320 --> 00:25:48.079
+That means you can have a scheduler.
+
+00:25:48.080 --> 00:25:56.839
+And How do you arrange for your continuation to be restarted or all can again?
+
+00:25:56.840 --> 00:26:04.119
+Good question. That's exactly the thing the Fibers does, like the scheduler.
+
+00:26:04.120 --> 00:26:08.559
+You could put it like an Apollo interface, even in Linux,
+
+00:26:08.560 --> 00:26:14.239
+which Apollo network connection or a file creation, something like that,
+
+00:26:14.240 --> 00:26:15.079
+or a socket.
+
+00:26:15.080 --> 00:26:17.119
+Interesting.
+
+00:26:17.120 --> 00:26:21.799
+This sounds not dissimilar from what I understand goes coroutines to be.
+
+00:26:21.800 --> 00:26:25.319
+This is coroutines, more or less.
+
+00:26:25.320 --> 00:26:26.079
+Right.
+
+00:26:26.080 --> 00:26:31.839
+These are the things you can do when you have
+
+00:26:31.840 --> 00:26:34.799
+like Andy Wingo can do it in Guile
+
+00:26:34.800 --> 00:26:36.919
+because he's got his fingers into the interpreter.
+
+00:26:36.920 --> 00:26:43.119
+Yes, he does. He sort of got inside knowledge.
+
+00:26:43.120 --> 00:26:49.639
+I don't know.
+
+00:26:49.640 --> 00:26:51.919
+Yeah, I think so, too.
+
+00:26:51.920 --> 00:26:53.919
+He implemented the delimited continuations,
+
+00:26:53.920 --> 00:26:59.759
+but yes, it was maybe my point I wanted to make.
+
+00:26:59.760 --> 00:27:01.359
+Like there's a neat solution.
+
+00:27:01.360 --> 00:27:04.719
+Sometimes you need these delimited continuations
+
+00:27:04.720 --> 00:27:12.279
+and function-wise you need like some kind of callback.
+
+00:27:12.280 --> 00:27:16.999
+Actually, you always need some kind of callback. You just hide it, well,
+
+00:27:17.000 --> 00:27:20.439
+and you call the delimited continuation.
+
+00:27:20.440 --> 00:27:20.639
+Right.
+
+00:27:20.640 --> 00:27:25.919
+I mean, if you've ever tried to do asynchronous programming,
+
+00:27:25.920 --> 00:27:33.679
+say, in C using EpoL, sort of wind up structuring your entire program
+
+00:27:33.680 --> 00:27:40.759
+around this event loop and kind of you sort of have this state
+
+00:27:40.760 --> 00:27:45.039
+that you move through as various things get signaled,
+
+00:27:45.040 --> 00:27:49.159
+whether data shows up on a file descriptor or a timer goes off, whatever.
+
+00:27:49.160 --> 00:27:52.159
+And it's kind of mind-bending.
+
+00:27:52.160 --> 00:27:53.559
+It's definitely, you know,
+
+00:27:53.560 --> 00:27:57.639
+humans seem to be most comfortable writing imperatively.
+
+00:27:57.640 --> 00:28:04.159
+And so whether it's Ruster or Golang or JavaScript, it all seems to be like,
+
+00:28:04.160 --> 00:28:07.119
+how can we wrap that state machine more ergonomically?
+
+00:28:07.120 --> 00:28:12.999
+Yes, exactly. How much more time do we have for Q&A?
+
+00:28:13.000 --> 00:28:31.119
+I think we have about seven and a half, eight more minutes.
+
+00:28:31.120 --> 00:28:37.439
+Yeah. We don't have to use all of it if there are no questions,
+
+00:28:37.440 --> 00:28:39.439
+but you're also welcome to hang out if you want.
+
+00:28:39.440 --> 00:28:41.519
+I'm happy to wait.
+
+00:28:41.520 --> 00:28:42.839
+Cool.
+
+00:28:42.840 --> 00:28:52.519
+And also, if there are no questions, I mean,
+
+00:28:52.520 --> 00:28:55.119
+one thing we could maybe do is to, if you
+
+00:28:55.120 --> 00:28:58.079
+like to maybe give a quick demo, like walk through some of the parts of,
+
+00:28:58.080 --> 00:29:00.999
+you know, your package, your code that could also work whichever,
+
+00:29:01.000 --> 00:29:02.239
+whatever you're more comfortable with.
+
+00:29:02.240 --> 00:29:07.879
+Honestly, I wasn't prepared for a live demo, so.
+
+00:29:07.880 --> 00:29:12.839
+Oh, yeah, sure. No worries. Sorry. Don't mean to put you on the spot.
+
+00:29:12.840 --> 00:29:15.439
+I'm going to steer clear of that.
+
+00:29:15.440 --> 00:29:16.999
+That's fair enough.
+
+00:29:17.000 --> 00:29:17.599
+Thank you.
+
+00:29:17.600 --> 00:29:25.199
+Okay. you
+
+00:29:25.200 --> 00:29:25.239
+
+
+00:29:25.240 --> 00:31:11.719
+questions maybe we can wrap it up sounds good
+
+00:31:11.720 --> 00:31:20.999
+I actually think I need to check in for my next talk soon
+
+00:31:21.000 --> 00:31:26.519
+oh yeah sure all right any last question before we wrap up folks
+
+00:31:26.520 --> 00:32:05.959
+all right I think in that case we can go ahead and wrap up
+
+00:32:05.960 --> 00:32:07.919
+thanks so much Michael for the great talk
+
+00:32:07.920 --> 00:32:10.359
+I very much look forward to checking out your work
+
+00:32:10.360 --> 00:32:11.999
+and yeah seeing what what could be done with it
+
+00:32:12.000 --> 00:32:14.719
+and using it as a building block and toolkit all right well
+
+00:32:14.720 --> 00:32:17.079
+thank you so much
+
+00:32:17.080 --> 00:32:20.079
+I feel like I learned as much through the Q&A
+
+00:32:20.080 --> 00:32:22.239
+as other people probably did from the talk
+
+00:32:22.240 --> 00:32:22.519
+wonderful
+
+00:32:22.520 --> 00:32:24.279
+yeah it's great it's a great way to get to know each other
+
+00:32:24.280 --> 00:32:24.839
+and get to know each other
+
+00:32:24.840 --> 00:32:25.759
+wonderful yeah it's great
+
+00:32:25.760 --> 00:32:29.999
+and yeah we were very lucky to be able to do these sort of live Q&A's
+
+00:32:30.000 --> 00:32:33.359
+and awesome speakers like yourself just being able to join in
+
+00:32:33.360 --> 00:32:35.439
+and yeah just teach and learn
+
+00:32:35.440 --> 00:32:37.999
+all right see you in a bit
+
+00:32:38.000 --> 00:32:47.040
+awesome yep see you in a little bit bye
diff --git a/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt
new file mode 100644
index 00000000..c5528717
--- /dev/null
+++ b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt
@@ -0,0 +1,40 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:47.200
+Asynchronous programming
+
+00:00:47.200 --> 00:01:42.600
+Automating my music player
+
+00:01:42.600 --> 00:03:22.080
+Working with the API
+
+00:03:22.080 --> 00:05:05.200
+make-network-process
+
+00:05:05.200 --> 00:05:57.920
+The sequence of events
+
+00:05:57.920 --> 00:07:50.480
+Queues
+
+00:07:50.480 --> 00:09:24.240
+Callbacks
+
+00:09:24.240 --> 00:11:48.080
+Client-side code
+
+00:11:48.080 --> 00:12:27.760
+Demo
+
+00:12:27.760 --> 00:13:15.520
+Logic
+
+00:13:15.520 --> 00:14:53.520
+Callback hell
+
+00:14:53.520 --> 00:16:46.400
+Lisp macros
+
+00:16:46.400 --> 00:17:47.880
+Conclusion
diff --git a/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt
new file mode 100644
index 00000000..eb25844e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt
@@ -0,0 +1,1505 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:02.720
+Hey everyone, I'm Michael
+
+2
+00:00:02.720 --> 00:00:04.480
+and I'm going to be talking to you today
+
+3
+00:00:04.480 --> 00:00:07.640
+about asynchronous programming in Emacs Lisp.
+
+4
+00:00:07.640 --> 00:00:10.360
+I'm located in the San Francisco Bay Area
+
+5
+00:00:10.360 --> 00:00:12.040
+where I'm a developer as well as
+
+6
+00:00:12.040 --> 00:00:14.160
+a long time Emacs user.
+
+7
+00:00:14.160 --> 00:00:18.760
+You may have heard of async or asynchronous programming.
+
+8
+00:00:18.760 --> 00:00:21.360
+The idea has been around for decades
+
+9
+00:00:21.360 --> 00:00:24.400
+but it first gained widespread attention in JavaScript
+
+10
+00:00:24.400 --> 00:00:26.720
+back in the aughts.
+
+11
+00:00:26.720 --> 00:00:29.680
+Then in the teens it gained tremendous popularity
+
+12
+00:00:29.680 --> 00:00:31.720
+in the DevOps world with Golang.
+
+13
+00:00:31.720 --> 00:00:33.800
+And just in the last few years
+
+14
+00:00:33.800 --> 00:00:37.880
+support for async programming has landed in Rust.
+
+15
+00:00:37.880 --> 00:00:40.080
+Well it can be done in Emacs as well
+
+16
+00:00:40.080 --> 00:00:42.040
+and this talk will demonstrate that
+
+17
+00:00:42.040 --> 00:00:44.600
+by walking you through a little problem
+
+18
+00:00:44.600 --> 00:00:47.200
+that I actually solved for myself.
+
+19
+00:00:47.200 --> 00:00:49.040
+Like a lot of these stories
+
+20
+00:00:49.040 --> 00:00:51.920
+it begins with scratching a personal itch.
+
+21
+00:00:51.920 --> 00:00:55.320
+In my case automating my music server.
+
+22
+00:00:55.320 --> 00:00:58.240
+I use something called the music player daemon locally
+
+23
+00:00:58.240 --> 00:01:00.240
+and as the name suggests
+
+24
+00:01:00.240 --> 00:01:03.560
+it just kind of hangs out in the background.
+
+25
+00:01:03.560 --> 00:01:08.040
+Reads music files and talks to assorted sound drivers.
+
+26
+00:01:08.040 --> 00:01:09.640
+In fact it is so focused on
+
+27
+00:01:09.640 --> 00:01:12.440
+that mission that it doesn't even offer a user interface.
+
+28
+00:01:12.440 --> 00:01:14.400
+Instead it serves an API
+
+29
+00:01:14.400 --> 00:01:16.120
+and invites application developers
+
+30
+00:01:16.120 --> 00:01:19.360
+to build clients on top of that API.
+
+31
+00:01:19.360 --> 00:01:22.200
+Okay so let's hop into a vterm
+
+32
+00:01:22.200 --> 00:01:25.080
+and I'd like to show you the MPD client I use
+
+33
+00:01:25.080 --> 00:01:26.600
+for my daily driver.
+
+34
+00:01:26.600 --> 00:01:29.520
+Something called ncmpcpp.
+
+35
+00:01:29.520 --> 00:01:31.800
+Doesn't exactly roll off the tongue
+
+36
+00:01:31.800 --> 00:01:33.720
+but I've got a playlist.
+
+37
+00:01:33.720 --> 00:01:36.560
+I can browse the file system.
+
+38
+00:01:36.560 --> 00:01:39.240
+Looks like I can search my music library.
+
+39
+00:01:39.240 --> 00:01:40.000
+Yada yada yada.
+
+40
+00:01:40.000 --> 00:01:42.600
+It's got all the basic features.
+
+41
+00:01:42.600 --> 00:01:44.640
+The point that I want to make is that
+
+42
+00:01:44.640 --> 00:01:51.920
+ncmpcpp is a completely independent project of MPD.
+
+43
+00:01:51.920 --> 00:01:53.720
+Separate and distinct.
+
+44
+00:01:53.720 --> 00:01:55.680
+It does all of its work
+
+45
+00:01:55.680 --> 00:01:57.200
+by simply communicating with
+
+46
+00:01:57.200 --> 00:02:01.400
+the music player daemon over the API.
+
+47
+00:02:01.400 --> 00:02:03.440
+Well I wanted to program to that API
+
+48
+00:02:03.440 --> 00:02:05.840
+only from within Emacs.
+
+49
+00:02:05.840 --> 00:02:09.520
+Now there are already Emacs MPD clients out there
+
+50
+00:02:09.520 --> 00:02:11.560
+but I didn't really want a full blown client.
+
+51
+00:02:11.560 --> 00:02:14.320
+I just wanted a few small tweaks
+
+52
+00:02:14.320 --> 00:02:16.320
+over my current configuration.
+
+53
+00:02:16.320 --> 00:02:19.280
+A command to skip to the next song.
+
+54
+00:02:19.280 --> 00:02:22.360
+Maybe shove the current track into the mode line.
+
+55
+00:02:22.360 --> 00:02:24.160
+Things like this.
+
+56
+00:02:24.160 --> 00:02:28.560
+I needed an elisp API that would let me do this.
+
+57
+00:02:28.560 --> 00:02:32.000
+Okay well let's get out of ncmpcpp
+
+58
+00:02:32.000 --> 00:02:37.560
+and let's get into a netcat session
+
+59
+00:02:37.560 --> 00:02:39.400
+with my local MPD server.
+
+60
+00:02:39.400 --> 00:02:43.840
+As you can see we get a welcome string.
+
+61
+00:02:43.840 --> 00:02:46.800
+So it is a server goes first protocol.
+
+62
+00:02:46.800 --> 00:02:49.640
+But after that it's a very familiar
+
+63
+00:02:49.640 --> 00:02:53.960
+text based request response oriented protocol.
+
+64
+00:02:53.960 --> 00:02:56.240
+I can ask for the volume.
+
+65
+00:02:56.240 --> 00:02:58.160
+I can ask for the status.
+
+66
+00:02:58.160 --> 00:03:06.000
+But in particular I wanted an asynchronous API.
+
+67
+00:03:06.000 --> 00:03:07.800
+If I issue a command like
+
+68
+00:03:07.800 --> 00:03:11.840
+find every track in my library
+
+69
+00:03:11.840 --> 00:03:15.360
+that's going to produce a lot of data
+
+70
+00:03:15.360 --> 00:03:18.920
+that's a human perceptible pause
+
+71
+00:03:18.920 --> 00:03:22.080
+as Emacs processes all the input.
+
+72
+00:03:22.080 --> 00:03:25.560
+What I wanted was a style of programming
+
+73
+00:03:25.560 --> 00:03:28.080
+where I could fire off my command
+
+74
+00:03:28.080 --> 00:03:31.560
+have the Emacs command loop keep working
+
+75
+00:03:31.560 --> 00:03:33.440
+and only invoke some callback
+
+76
+00:03:33.440 --> 00:03:35.280
+when there was data available.
+
+77
+00:03:35.280 --> 00:03:39.560
+Well Emacs is famously single threaded
+
+78
+00:03:39.560 --> 00:03:41.840
+so it shouldn't come as a surprise
+
+79
+00:03:41.840 --> 00:03:44.080
+that it offers a rich set of primitives
+
+80
+00:03:44.080 --> 00:03:46.720
+that enable the sort of network programming
+
+81
+00:03:46.720 --> 00:03:49.320
+that I wanted to do.
+
+82
+00:03:49.320 --> 00:03:50.760
+In particular it offers
+
+83
+00:03:50.760 --> 00:03:53.280
+a function called make network process.
+
+84
+00:03:53.280 --> 00:03:57.800
+Now this method offers a bewildering variety of options.
+
+85
+00:03:57.800 --> 00:03:59.320
+But at the heart of the matter
+
+86
+00:03:59.320 --> 00:04:01.040
+it opens a network connection
+
+87
+00:04:01.040 --> 00:04:03.120
+to some endpoint out there
+
+88
+00:04:03.120 --> 00:04:06.640
+and we can configure it to be non blocking.
+
+89
+00:04:06.640 --> 00:04:09.840
+It returns a handle that you can use to refer to
+
+90
+00:04:09.840 --> 00:04:14.880
+this network connection with other methods.
+
+91
+00:04:14.880 --> 00:04:17.760
+Other methods such as process and string
+
+92
+00:04:17.760 --> 00:04:19.600
+which as the name suggests
+
+93
+00:04:19.600 --> 00:04:21.960
+allows you to send textual data
+
+94
+00:04:21.960 --> 00:04:26.320
+to the remote endpoint of your network connection.
+
+95
+00:04:26.320 --> 00:04:29.400
+You can also use it with set process filter
+
+96
+00:04:29.400 --> 00:04:32.160
+which allows you to associate a callback
+
+97
+00:04:32.160 --> 00:04:33.240
+with your network connection.
+
+98
+00:04:33.240 --> 00:04:35.920
+That callback will be invoked
+
+99
+00:04:35.920 --> 00:04:40.480
+when there is data available
+
+100
+00:04:40.480 --> 00:04:41.960
+in the processes read buffer.
+
+101
+00:04:41.960 --> 00:04:44.960
+In other words in a request response oriented protocol
+
+102
+00:04:44.960 --> 00:04:47.800
+like that of MPD you open your socket
+
+103
+00:04:47.800 --> 00:04:50.960
+with make network process
+
+104
+00:04:50.960 --> 00:04:53.760
+send your request via process send string
+
+105
+00:04:53.760 --> 00:04:56.360
+and life will just continue in emacs
+
+106
+00:04:56.360 --> 00:04:57.560
+until some data shows up
+
+107
+00:04:57.560 --> 00:05:00.720
+in the processes read buffer
+
+108
+00:05:00.720 --> 00:05:05.200
+at which point your callback will be invoked.
+
+109
+00:05:05.200 --> 00:05:07.560
+It turns out this was enough
+
+110
+00:05:07.560 --> 00:05:12.280
+for a purpose built async runtime.
+
+111
+00:05:12.280 --> 00:05:14.800
+Let's work through the sequence of events
+
+112
+00:05:14.800 --> 00:05:16.480
+when opening a connection
+
+113
+00:05:16.480 --> 00:05:18.720
+and firing off a few commands in this style.
+
+114
+00:05:18.720 --> 00:05:22.120
+So let's imagine a library
+
+115
+00:05:22.120 --> 00:05:25.520
+that offers a connection object of some sort
+
+116
+00:05:25.520 --> 00:05:28.720
+a caller and an MPD server out on the network.
+
+117
+00:05:28.720 --> 00:05:31.880
+The caller will presumably get themselves
+
+118
+00:05:31.880 --> 00:05:34.760
+a connection object by invoking some sort of
+
+119
+00:05:34.760 --> 00:05:38.080
+connect method on our library.
+
+120
+00:05:38.080 --> 00:05:41.160
+We can handle this through make network process
+
+121
+00:05:41.160 --> 00:05:45.360
+but we're going to invoke make network process
+
+122
+00:05:45.360 --> 00:05:47.200
+with no weight equal to true
+
+123
+00:05:47.200 --> 00:05:48.520
+in other words asynchronously.
+
+124
+00:05:48.520 --> 00:05:52.240
+That means the method is going to return immediately.
+
+125
+00:05:52.240 --> 00:05:56.320
+We won't even know if the connection is up
+
+126
+00:05:56.320 --> 00:05:57.920
+let alone what the response would be.
+
+127
+00:05:57.920 --> 00:06:01.560
+This has some implications.
+
+128
+00:06:01.560 --> 00:06:05.280
+At this point we've returned control to the caller
+
+129
+00:06:05.280 --> 00:06:09.400
+the emacs event loop is proceeding quite happily
+
+130
+00:06:09.400 --> 00:06:11.320
+and so the caller is free
+
+131
+00:06:11.320 --> 00:06:14.920
+to start using our connection object.
+
+132
+00:06:14.920 --> 00:06:17.640
+They might say issue a status command.
+
+133
+00:06:17.640 --> 00:06:20.600
+Okay well in our library
+
+134
+00:06:20.600 --> 00:06:22.680
+we don't have a connection yet.
+
+135
+00:06:22.680 --> 00:06:25.920
+How on earth are we going to service this?
+
+136
+00:06:25.920 --> 00:06:29.440
+Well we can simply give ourselves a queue
+
+137
+00:06:29.440 --> 00:06:33.360
+and note down the fact that we owe a status command.
+
+138
+00:06:33.360 --> 00:06:35.560
+That's pretty quick.
+
+139
+00:06:35.560 --> 00:06:38.120
+We've now returned control back to our caller
+
+140
+00:06:38.120 --> 00:06:40.640
+and they are again free to issue more commands.
+
+141
+00:06:40.640 --> 00:06:41.840
+Maybe they issue a play command.
+
+142
+00:06:41.840 --> 00:06:45.160
+Okay well we're going to go deeper into debt
+
+143
+00:06:45.160 --> 00:06:48.160
+and note that we also owe a play command.
+
+144
+00:06:48.160 --> 00:06:56.160
+At some point in the indeterminate future MPDU
+
+145
+00:06:56.160 --> 00:06:57.320
+is the connection will get up
+
+146
+00:06:57.320 --> 00:07:03.000
+MPDU will allocate resources to track a new client.
+
+147
+00:07:03.000 --> 00:07:06.160
+They will write the welcome string into the socket
+
+148
+00:07:06.160 --> 00:07:07.920
+and those bytes are going to show up
+
+149
+00:07:07.920 --> 00:07:10.360
+in the emacs process read buffer
+
+150
+00:07:10.360 --> 00:07:13.160
+at which point our callback will be invoked.
+
+151
+00:07:13.160 --> 00:07:17.440
+We can parse the welcome string maybe
+
+152
+00:07:17.440 --> 00:07:19.240
+note the version that connection object
+
+153
+00:07:19.240 --> 00:07:20.400
+that might come in handy
+
+154
+00:07:20.400 --> 00:07:21.720
+but the key point is
+
+155
+00:07:21.720 --> 00:07:24.080
+our callback needs to take a look at the queue
+
+156
+00:07:24.080 --> 00:07:25.240
+and notice
+
+157
+00:07:25.240 --> 00:07:27.200
+oh we owe a status command
+
+158
+00:07:27.200 --> 00:07:29.880
+and so we'll invoke process and string
+
+159
+00:07:29.880 --> 00:07:32.280
+and send the status command down the pipe.
+
+160
+00:07:32.280 --> 00:07:36.760
+Again at some indeterminate time in the future
+
+161
+00:07:36.760 --> 00:07:38.600
+some bytes are going to show up
+
+162
+00:07:38.600 --> 00:07:41.200
+in our processes read buffer
+
+163
+00:07:41.200 --> 00:07:43.160
+and our callback will again be invoked.
+
+164
+00:07:43.160 --> 00:07:48.560
+We've got volume is 75 plus a lot of other stuff
+
+165
+00:07:48.560 --> 00:07:50.480
+and here we come to the next problem.
+
+166
+00:07:50.480 --> 00:07:54.440
+If our caller invoked status
+
+167
+00:07:54.440 --> 00:07:56.960
+they probably wanted to know about the status
+
+168
+00:07:56.960 --> 00:07:59.880
+so how shall we get them to them?
+
+169
+00:07:59.880 --> 00:08:03.040
+Well there's really not a lot of options at this point
+
+170
+00:08:03.040 --> 00:08:04.280
+except the callback.
+
+171
+00:08:04.280 --> 00:08:09.000
+Okay so change of plan our queue
+
+172
+00:08:09.000 --> 00:08:11.720
+is no longer a queue of commands
+
+173
+00:08:11.720 --> 00:08:13.840
+it's going to be a queue of commands
+
+174
+00:08:13.840 --> 00:08:15.880
+with associated callbacks.
+
+175
+00:08:15.880 --> 00:08:20.280
+We read the response off the socket
+
+176
+00:08:20.280 --> 00:08:23.440
+invoke our caller supplied callback
+
+177
+00:08:23.440 --> 00:08:26.080
+and then pop the queue.
+
+178
+00:08:26.080 --> 00:08:28.920
+At this point our callback
+
+179
+00:08:28.920 --> 00:08:32.160
+the library callback needs to know
+
+180
+00:08:32.160 --> 00:08:34.040
+that we still have a pending command
+
+181
+00:08:34.040 --> 00:08:35.720
+we fire that off down the pipe
+
+182
+00:08:35.720 --> 00:08:38.520
+at some indeterminate time in the future
+
+183
+00:08:38.520 --> 00:08:40.360
+we get a call we get a response
+
+184
+00:08:40.360 --> 00:08:42.640
+our callback is invoked
+
+185
+00:08:42.640 --> 00:08:45.720
+we invoke the caller supplied callback
+
+186
+00:08:45.720 --> 00:08:47.240
+and we pop the queue.
+
+187
+00:08:47.240 --> 00:08:53.760
+The structure of such a program
+
+188
+00:08:53.760 --> 00:08:55.800
+is best viewed as a finite state machine
+
+189
+00:08:55.800 --> 00:08:57.640
+and this is typically where you end up
+
+190
+00:08:57.640 --> 00:08:59.200
+in asynchronous programming at least
+
+191
+00:08:59.200 --> 00:09:03.360
+when you don't have a runtime grafted onto your program
+
+192
+00:09:03.360 --> 00:09:04.960
+the way you do with Golang
+
+193
+00:09:04.960 --> 00:09:08.240
+or when you don't have sort of extensive library support
+
+194
+00:09:08.240 --> 00:09:09.680
+the way you do with Rust.
+
+195
+00:09:09.680 --> 00:09:14.480
+Your data structure exists in one of these states
+
+196
+00:09:14.480 --> 00:09:15.440
+at any given time
+
+197
+00:09:15.440 --> 00:09:18.960
+and when input shows up on your file descriptor
+
+198
+00:09:18.960 --> 00:09:24.240
+you transition along one of these edges to a new state.
+
+199
+00:09:24.240 --> 00:09:28.160
+Cool so let's take a look at some of the code
+
+200
+00:09:28.160 --> 00:09:29.480
+that flows from this.
+
+201
+00:09:29.480 --> 00:09:32.240
+Okay let's hop over to an Emacs
+
+202
+00:09:32.240 --> 00:09:33.920
+and take a look at how we might code this up.
+
+203
+00:09:33.920 --> 00:09:38.360
+If you recall the sequence diagrams I shared
+
+204
+00:09:38.360 --> 00:09:40.120
+we're going to be scribbling down the command
+
+205
+00:09:40.120 --> 00:09:42.160
+and the callback that will be invoking
+
+206
+00:09:42.160 --> 00:09:43.240
+upon its completion.
+
+207
+00:09:43.240 --> 00:09:45.440
+So the first thing I did was give myself
+
+208
+00:09:45.440 --> 00:09:47.400
+a little command struct
+
+209
+00:09:47.400 --> 00:09:52.280
+with that I was able to define the connection object.
+
+210
+00:09:52.280 --> 00:09:56.280
+We're going to be storing the handle to the connection.
+
+211
+00:09:56.280 --> 00:09:59.400
+We're going to write down the protocol version
+
+212
+00:09:59.400 --> 00:10:02.000
+that we harvest from the welcome message
+
+213
+00:10:02.000 --> 00:10:03.560
+and of course we'll be recording
+
+214
+00:10:03.560 --> 00:10:05.760
+the command queue as well.
+
+215
+00:10:05.760 --> 00:10:08.640
+And so I gave myself a little connection object
+
+216
+00:10:08.640 --> 00:10:10.960
+with a connection struct
+
+217
+00:10:10.960 --> 00:10:12.240
+with those three attributes.
+
+218
+00:10:12.240 --> 00:10:15.000
+With the data model squared away
+
+219
+00:10:15.000 --> 00:10:17.840
+it was really pretty easy to code up
+
+220
+00:10:17.840 --> 00:10:21.160
+the connect implementation.
+
+221
+00:10:21.160 --> 00:10:24.880
+I'm deleting some details for exposition purposes
+
+222
+00:10:24.880 --> 00:10:29.520
+but in the event it's really not that more complex
+
+223
+00:10:29.520 --> 00:10:30.520
+than what you see here.
+
+224
+00:10:30.520 --> 00:10:32.840
+We're going to unpack the arguments,
+
+225
+00:10:32.840 --> 00:10:35.040
+figure out where the MPD server is
+
+226
+00:10:35.040 --> 00:10:37.280
+to which you would like us to connect.
+
+227
+00:10:37.280 --> 00:10:39.920
+We'll connect via make network process.
+
+228
+00:10:39.920 --> 00:10:42.640
+We'll associate a library defined callback
+
+229
+00:10:42.640 --> 00:10:45.920
+with that connection via set process filter.
+
+230
+00:10:45.920 --> 00:10:48.440
+Then we'll instantiate the connection object
+
+231
+00:10:48.440 --> 00:10:50.120
+and return it to the caller.
+
+232
+00:10:50.120 --> 00:10:53.800
+Once the caller has a connection object
+
+233
+00:10:53.800 --> 00:10:56.880
+they're free to send commands down that connection.
+
+234
+00:10:56.880 --> 00:10:59.120
+So what we're doing here
+
+235
+00:10:59.120 --> 00:11:02.320
+is simply instantiating a command object
+
+236
+00:11:02.320 --> 00:11:05.200
+on the basis of the caller supplied arguments
+
+237
+00:11:05.200 --> 00:11:06.640
+and appending it to the queue.
+
+238
+00:11:06.640 --> 00:11:07.920
+And then the last thing we do
+
+239
+00:11:07.920 --> 00:11:11.040
+and I've just indicated this with a comment
+
+240
+00:11:11.040 --> 00:11:12.040
+is we kick the queue.
+
+241
+00:11:12.040 --> 00:11:14.560
+This kind of goes back to
+
+242
+00:11:14.560 --> 00:11:18.200
+the state transition diagram I laid out earlier.
+
+243
+00:11:18.200 --> 00:11:22.680
+What this means is the logic for saying well
+
+244
+00:11:22.680 --> 00:11:24.280
+if we're waiting the completion
+
+245
+00:11:24.280 --> 00:11:25.480
+of a previously sent command
+
+246
+00:11:25.480 --> 00:11:27.280
+there's really not much more to be done.
+
+247
+00:11:27.280 --> 00:11:31.000
+We're just going to push this command onto the queue
+
+248
+00:11:31.000 --> 00:11:31.600
+and return.
+
+249
+00:11:31.600 --> 00:11:33.120
+On the other hand
+
+250
+00:11:33.120 --> 00:11:37.120
+if the queue was empty on entry to LMPD send
+
+251
+00:11:37.120 --> 00:11:39.160
+there's no reason not to just
+
+252
+00:11:39.160 --> 00:11:43.400
+immediately send the command.
+
+253
+00:11:43.400 --> 00:11:44.680
+And this is an example of
+
+254
+00:11:44.680 --> 00:11:46.520
+the sort of client side code
+
+255
+00:11:46.520 --> 00:11:48.080
+that results from this API.
+
+256
+00:11:48.080 --> 00:11:51.360
+So you can see here we are giving ourselves
+
+257
+00:11:51.360 --> 00:11:54.240
+a connection to the MPD server on the local host
+
+258
+00:11:54.240 --> 00:11:56.600
+and we're going to send the get volume command
+
+259
+00:11:56.600 --> 00:11:58.160
+down that connection.
+
+260
+00:11:58.160 --> 00:12:02.840
+And if that command completes and all is well
+
+261
+00:12:02.840 --> 00:12:05.360
+we'll just send a message to Emacs.
+
+262
+00:12:05.360 --> 00:12:07.800
+Unfortunately you can't see my mini buffer
+
+263
+00:12:07.800 --> 00:12:10.960
+so I'll hop over to the messages buffer
+
+264
+00:12:10.960 --> 00:12:12.720
+and there's our result.
+
+265
+00:12:12.720 --> 00:12:15.160
+The volume is 43.
+
+266
+00:12:15.160 --> 00:12:17.960
+Great I thought.
+
+267
+00:12:17.960 --> 00:12:22.520
+Simple clean responsive easy to code to.
+
+268
+00:12:22.520 --> 00:12:27.760
+That is unfortunately not the end of the story.
+
+269
+00:12:27.760 --> 00:12:32.320
+Let's continue this example a little bit.
+
+270
+00:12:32.320 --> 00:12:33.560
+Let's imagine that
+
+271
+00:12:33.560 --> 00:12:35.920
+if the volume comes back from the server
+
+272
+00:12:35.920 --> 00:12:37.360
+and it is less than 50
+
+273
+00:12:37.360 --> 00:12:38.600
+we would like to set it to 50.
+
+274
+00:12:38.600 --> 00:12:41.560
+So this is interesting
+
+275
+00:12:41.560 --> 00:12:43.200
+because we have two commands
+
+276
+00:12:43.200 --> 00:12:45.840
+and whether or not we send the second command
+
+277
+00:12:45.840 --> 00:12:46.840
+is going to depend on
+
+278
+00:12:46.840 --> 00:12:48.560
+the response we get from the first.
+
+279
+00:12:48.560 --> 00:12:51.640
+Okay I thought well that's fine
+
+280
+00:12:51.640 --> 00:12:55.080
+I can simply put that logic in the callback
+
+281
+00:12:55.080 --> 00:12:57.920
+that I specified for the get volume command.
+
+282
+00:12:57.920 --> 00:13:01.560
+So here we are we check the return code
+
+283
+00:13:01.560 --> 00:13:04.400
+we parse the volume we compare it to 50
+
+284
+00:13:04.400 --> 00:13:08.360
+and if it's less we just invoke LMPD send again
+
+285
+00:13:08.360 --> 00:13:10.800
+from the first command's callback.
+
+286
+00:13:10.800 --> 00:13:13.440
+Okay I could live with that
+
+287
+00:13:13.440 --> 00:13:15.520
+it's not the worst thing I've ever seen.
+
+288
+00:13:15.520 --> 00:13:19.400
+Let's extend this example a little further
+
+289
+00:13:19.400 --> 00:13:21.480
+and this is contrived but bear with me.
+
+290
+00:13:21.480 --> 00:13:25.480
+Let us suppose that if we do set the volume to 50
+
+291
+00:13:25.480 --> 00:13:27.800
+we'd like to get the volume one more time
+
+292
+00:13:27.800 --> 00:13:30.640
+just to make sure that our change took on the server.
+
+293
+00:13:30.640 --> 00:13:33.560
+Okay we can play the same game.
+
+294
+00:13:33.560 --> 00:13:37.280
+We will put that logic in the callback
+
+295
+00:13:37.280 --> 00:13:39.520
+that we specified for the set volume command.
+
+296
+00:13:39.520 --> 00:13:43.480
+And here we are we check the return code
+
+297
+00:13:43.480 --> 00:13:45.480
+we send a message to Emacs
+
+298
+00:13:45.480 --> 00:13:49.200
+we send the get volume command again
+
+299
+00:13:49.200 --> 00:13:51.080
+along with its own callback
+
+300
+00:13:51.080 --> 00:13:55.280
+and at this point I think you know I hope it's clear
+
+301
+00:13:55.280 --> 00:13:57.520
+the problem that is emerging
+
+302
+00:13:57.520 --> 00:14:01.360
+and if it's not yet let's let me note that so far
+
+303
+00:14:01.360 --> 00:14:03.000
+we're only handling the happy path
+
+304
+00:14:03.000 --> 00:14:04.520
+in each of these callbacks.
+
+305
+00:14:04.520 --> 00:14:06.840
+We really ought to do something about the error path
+
+306
+00:14:06.840 --> 00:14:10.120
+for purposes of illustration let's just say
+
+307
+00:14:10.120 --> 00:14:12.120
+we send a message to Emacs
+
+308
+00:14:12.120 --> 00:14:14.320
+that means it would look like this
+
+309
+00:14:14.320 --> 00:14:16.560
+and it's at this point
+
+310
+00:14:16.560 --> 00:14:19.400
+that I really think it's impossible to deny
+
+311
+00:14:19.400 --> 00:14:23.280
+that this API is actually not that easy to program to
+
+312
+00:14:23.280 --> 00:14:27.160
+and if there are any JavaScript devs watching
+
+313
+00:14:27.160 --> 00:14:28.840
+you're probably chuckling right now
+
+314
+00:14:28.840 --> 00:14:30.720
+because I have discovered for myself
+
+315
+00:14:30.720 --> 00:14:33.880
+what they call callback hell.
+
+316
+00:14:33.880 --> 00:14:36.040
+If you are returning
+
+317
+00:14:36.040 --> 00:14:40.160
+the results of asynchronous function invocations
+
+318
+00:14:40.160 --> 00:14:42.200
+to their caller via callbacks
+
+319
+00:14:42.200 --> 00:14:45.640
+you pretty much inevitably end up in this sort of
+
+320
+00:14:45.640 --> 00:14:48.040
+deeply nested sequence of callbacks
+
+321
+00:14:48.040 --> 00:14:49.880
+that is difficult to write difficult to read
+
+322
+00:14:49.880 --> 00:14:53.520
+and difficult to reason about.
+
+323
+00:14:53.520 --> 00:14:57.480
+And yet when I was stuck in this situation
+
+324
+00:14:57.480 --> 00:15:00.080
+it just seemed like it really shouldn't be this bad.
+
+325
+00:15:00.080 --> 00:15:05.320
+If I give myself this sort of tabular data structure
+
+326
+00:15:05.320 --> 00:15:10.160
+I felt that this expressed precisely the same logic
+
+327
+00:15:10.160 --> 00:15:11.960
+just in a much easier to read manner.
+
+328
+00:15:11.960 --> 00:15:15.840
+I could in my mind's eye
+
+329
+00:15:15.840 --> 00:15:19.720
+see the code for transforming this data structure
+
+330
+00:15:19.720 --> 00:15:21.040
+which is really just a list
+
+331
+00:15:21.040 --> 00:15:25.600
+into the code that you just saw in the previous slide
+
+332
+00:15:25.600 --> 00:15:29.440
+and really if Lisp is good at anything
+
+333
+00:15:29.440 --> 00:15:31.080
+it is list processing right
+
+334
+00:15:31.080 --> 00:15:33.080
+and it was really at this point
+
+335
+00:15:33.080 --> 00:15:35.240
+that a little bit of enlightenment dawned.
+
+336
+00:15:35.240 --> 00:15:40.800
+I learned that Lisp is homo iconic
+
+337
+00:15:40.800 --> 00:15:46.040
+which is just means that the language itself
+
+338
+00:15:46.040 --> 00:15:49.360
+is a data structure in that language.
+
+339
+00:15:49.360 --> 00:15:53.160
+Lisp code is after all just a list
+
+340
+00:15:53.160 --> 00:15:57.160
+and the power of Lisp macros
+
+341
+00:15:57.160 --> 00:15:59.760
+is taking that data structure
+
+342
+00:15:59.760 --> 00:16:02.400
+some data structure that you've defined
+
+343
+00:16:02.400 --> 00:16:04.640
+and doing exactly what I wanted to do
+
+344
+00:16:04.640 --> 00:16:07.520
+transforming it from one list into another
+
+345
+00:16:07.520 --> 00:16:11.080
+the destination list being Lisp code.
+
+346
+00:16:11.080 --> 00:16:16.000
+So I got busy and I coded up my first Lisp macro
+
+347
+00:16:16.000 --> 00:16:19.160
+which I called LMPD chain
+
+348
+00:16:19.160 --> 00:16:21.600
+and that lengthy list of you know
+
+349
+00:16:21.600 --> 00:16:24.200
+three or four nested callbacks
+
+350
+00:16:24.200 --> 00:16:25.920
+gets turned into this
+
+351
+00:16:25.920 --> 00:16:29.520
+which I hope you'll agree is much simpler
+
+352
+00:16:29.520 --> 00:16:32.240
+much easier to read much easier to reason about.
+
+353
+00:16:32.240 --> 00:16:36.000
+And if you're morbidly curious
+
+354
+00:16:36.000 --> 00:16:40.160
+you can you can expand your macros
+
+355
+00:16:40.160 --> 00:16:44.200
+and this invocation of LMPD chain expands to this.
+
+356
+00:16:44.200 --> 00:16:46.400
+So that's my story.
+
+357
+00:16:46.400 --> 00:16:50.840
+In all fairness I should note that
+
+358
+00:16:50.840 --> 00:16:55.160
+the MPD protocol has some subtleties and complexities
+
+359
+00:16:55.160 --> 00:16:56.880
+that I didn't really get into
+
+360
+00:16:56.880 --> 00:16:58.360
+both due to time constraints
+
+361
+00:16:58.360 --> 00:17:00.520
+and because they're not terribly relevant
+
+362
+00:17:00.520 --> 00:17:02.000
+to the points I wanted to touch on
+
+363
+00:17:02.000 --> 00:17:05.360
+I should also note that there's
+
+364
+00:17:05.360 --> 00:17:07.720
+a fair amount of work in the library itself
+
+365
+00:17:07.720 --> 00:17:11.240
+around accumulating partial responses
+
+366
+00:17:11.240 --> 00:17:12.560
+as they show up in the buffer
+
+367
+00:17:12.560 --> 00:17:16.120
+and dispatching them piecemeal to the caller
+
+368
+00:17:16.120 --> 00:17:19.720
+that was really too complex to get into here.
+
+369
+00:17:19.720 --> 00:17:22.360
+If you would like to see the code
+
+370
+00:17:22.360 --> 00:17:25.080
+it's available on GitHub as well as Melpa.
+
+371
+00:17:25.080 --> 00:17:29.200
+I'll be putting a version of this talk
+
+372
+00:17:29.200 --> 00:17:30.480
+on my personal site
+
+373
+00:17:30.480 --> 00:17:33.720
+and you can always reach out to me personally
+
+374
+00:17:33.720 --> 00:17:36.960
+I hang out on IRC as SPIF
+
+375
+00:17:36.960 --> 00:17:41.920
+or you can just email me as SPIF at P.O.Box dot com.
+
+376
+00:17:41.920 --> 00:17:47.880
+Thank you very much.
diff --git a/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt b/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt
new file mode 100644
index 00000000..565d1168
--- /dev/null
+++ b/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt
@@ -0,0 +1,25 @@
+WEBVTT
+
+00:00.000 --> 00:00:27.899
+Introduction
+
+00:27.900 --> 00:01:32.719
+Why Emacs Buddy?
+
+01:32.720 --> 00:02:17.039
+What can you expect?
+
+02:17.040 --> 00:02:58.959
+Why not just mailing lists or Reddit?
+
+02:58.960 --> 00:03:47.959
+How do you get in touch with a buddy?
+
+03:47.960 --> 00:04:14.759
+How did it go?
+
+04:14.760 --> 00:05:48.359
+Example
+
+05:48.360 --> 00:07:59.520
+What if you want to be a buddy?
diff --git a/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt b/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt
new file mode 100644
index 00000000..8d4b023c
--- /dev/null
+++ b/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt
@@ -0,0 +1,424 @@
+WEBVTT captioned by andrea
+
+00:00.000 --> 00:03.919
+Hello, welcome to my talk, the Emacs Buddy Initiative.
+
+00:03.920 --> 00:04.759
+Who am I?
+
+00:04.760 --> 00:06.999
+I'm Andrea. I work as a Clojure Software Engineer
+
+00:07.000 --> 00:08.999
+somewhere in the middle of the UK.
+
+00:09.000 --> 00:12.519
+And I started with Emacs during my PhD,
+
+00:12.520 --> 00:14.119
+thanks to my PhD supervisor
+
+00:14.120 --> 00:15.759
+that introduced me to this tool.
+
+00:15.760 --> 00:17.279
+And from now and from then,
+
+00:17.280 --> 00:20.319
+I am basically using it for everything.
+
+00:20.320 --> 00:22.159
+You can find more about this everything
+
+00:22.160 --> 00:26.519
+at ag91.github.io, that is my blog.
+
+00:26.520 --> 00:27.899
+So let's get into the talk.
+
+00:27.900 --> 00:29.479
+Why Emacs Buddy?
+
+00:29.480 --> 00:32.919
+Emacs Buddy is an initiative to bring us together.
+
+00:32.920 --> 00:36.559
+And the reason is because Emacs is a limitless tool.
+
+00:36.560 --> 00:38.799
+So you can keep learning about it,
+
+00:38.800 --> 00:41.039
+you can keep expanding it,
+
+00:41.040 --> 00:44.799
+and also takes time to get up to speed.
+
+00:44.800 --> 00:48.679
+So you may actually extend Emacs
+
+00:48.680 --> 00:50.619
+or you may actually get introduced,
+
+00:50.620 --> 00:52.319
+start using Emacs,
+
+00:52.320 --> 00:56.359
+but you could fall into all the traps
+
+00:56.360 --> 01:00.879
+or all the wasted times that other users have already gone through.
+
+01:00.880 --> 01:04.599
+And so, since there are a lot of amazing people
+
+01:04.600 --> 01:07.359
+in the Emacs community,
+
+01:07.360 --> 01:10.119
+why do every time redo the same error?
+
+01:10.120 --> 01:12.159
+So let's bring us together.
+
+01:12.160 --> 01:17.479
+And it would be amazing to get a one-to-one relation.
+
+01:17.480 --> 01:21.559
+So I have somebody that actually knows what you want to do,
+
+01:21.560 --> 01:23.399
+what you want to achieve with Emacs,
+
+01:23.400 --> 01:27.439
+and supports you because they have done a similar path to yours.
+
+01:27.440 --> 01:32.719
+And so they can remove some of the obstacles for you.
+
+01:32.720 --> 01:34.479
+So what can you expect?
+
+01:34.480 --> 01:37.879
+The main thing is guidance on your Emacs journey,
+
+01:37.880 --> 01:41.279
+because the Emacs journey is infinite, it doesn't really end.
+
+01:41.280 --> 01:44.079
+But the farther you go,
+
+01:44.080 --> 01:46.799
+the more value you get from this amazing tool.
+
+01:46.800 --> 01:50.359
+And that helps you save time.
+
+01:50.360 --> 01:54.279
+And at the same time, you can meet like-minded people.
+
+01:54.280 --> 01:59.079
+And so you can learn about Emacs or about your context,
+
+01:59.080 --> 02:02.919
+if they are in, for example, if you are a physicist,
+
+02:02.920 --> 02:07.559
+they are physicists or they are interested in the field.
+
+02:07.560 --> 02:09.159
+You may not only learn about Emacs,
+
+02:09.160 --> 02:11.879
+but you can learn also something about the field.
+
+02:11.880 --> 02:17.039
+And anyway, the idea is that you can move forward together.
+
+02:17.040 --> 02:20.399
+Somebody asked, why not just mailing lists or Reddit?
+
+02:20.400 --> 02:24.639
+Well, the point is that mailing list is many people
+
+02:24.640 --> 02:28.519
+can help you solve one issue that you have.
+
+02:28.520 --> 02:31.559
+And that naturally doesn't become a discussion
+
+02:31.560 --> 02:35.279
+of where you are from, what are you trying to achieve,
+
+02:35.280 --> 02:39.999
+and where you want to move forward with using this editor
+
+02:40.000 --> 02:42.279
+or using this tool.
+
+02:42.280 --> 02:45.639
+Instead, here, we want something more personal,
+
+02:45.640 --> 02:48.639
+something more like you tell your story.
+
+02:48.640 --> 02:53.879
+And if I can help you achieve what you need,
+
+02:53.880 --> 02:58.959
+I am also interested in your story as a buddy.
+
+02:58.960 --> 03:03.359
+So given that, how do you get in touch with a buddy?
+
+03:03.360 --> 03:04.679
+Well, the thing is easy.
+
+03:04.680 --> 03:12.719
+Just ping me at this email, andrea-dev@hotmail.com.
+
+03:12.720 --> 03:15.399
+And I can put you in touch with one of the buddies
+
+03:15.400 --> 03:16.759
+that are available.
+
+03:16.760 --> 03:20.199
+Or you can contact them personally, directly,
+
+03:20.200 --> 03:26.279
+because on the web page, on the Emacs Buddy web page,
+
+03:26.280 --> 03:32.559
+there are links to their material or their websites.
+
+03:32.560 --> 03:35.599
+And sometimes you can find the contact yourself.
+
+03:35.600 --> 03:37.159
+Anyway, I am a facilitator.
+
+03:37.160 --> 03:41.919
+So if you contact me, I will find the contact for the person
+
+03:41.920 --> 03:43.079
+that you want to get in touch.
+
+03:43.080 --> 03:44.479
+You can also get in touch with me.
+
+03:44.480 --> 03:47.959
+I'm a buddy myself.
+
+03:47.960 --> 03:49.599
+How did it go so far?
+
+03:49.600 --> 03:52.479
+Well, from when I started the initiative,
+
+03:52.480 --> 03:55.039
+more or less we had 10 buddies.
+
+03:55.040 --> 03:58.719
+We had 10 buddies that are available to help you
+
+03:58.720 --> 04:01.519
+with your Emacs journey.
+
+04:01.520 --> 04:04.879
+And I buddyed myself, or I got in touch
+
+04:04.880 --> 04:10.679
+with people that wanted a buddy, about eight people.
+
+04:10.680 --> 04:14.759
+Each of these conversations was quite interesting.
+
+04:14.760 --> 04:19.639
+I decided to paraphrase one.
+
+04:19.640 --> 04:23.519
+I had this user that got in touch and said:
+
+04:23.520 --> 04:25.559
+"I used Emacs for 10 years.
+
+04:25.560 --> 04:27.279
+I'm curious about the initiative,
+
+04:27.280 --> 04:32.359
+and here is my GitHub that I started writing recently,
+
+04:32.360 --> 04:37.679
+Elisp projects", projects in Elisp to extend Emacs.
+
+04:37.680 --> 04:40.839
+I looked at their code.
+
+04:40.840 --> 04:43.879
+I suggested, "Oh, why don't you use dash?
+
+04:43.880 --> 04:45.299
+It's something that I'm familiar with.
+
+04:45.300 --> 04:49.439
+Maybe you may like it as well."
+
+04:49.440 --> 04:51.719
+And then I started asking, "Oh, what do you do with Emacs?
+
+04:51.720 --> 04:55.999
+Have you tried a note taking tool like Org Roam?"
+
+04:56.000 --> 04:58.039
+And then the conversation started.
+
+04:58.040 --> 05:00.199
+So "yeah, I tried Org Roam version one.
+
+05:00.200 --> 05:01.199
+I use my own thing.
+
+05:01.200 --> 05:02.879
+But what is it...
+
+05:02.880 --> 05:04.239
+I'm curious about version two.
+
+05:04.240 --> 05:05.839
+Did you use it?
+
+05:05.840 --> 05:07.079
+Do you know about Luhmann?"
+
+05:07.080 --> 00:05:09.861
+That is the inspiration of Org Roam
+
+00:05:09.862 --> 00:05:13.239
+and the backlinking and stuff.
+
+05:13.240 --> 05:15.479
+And then I started the conversation about that.
+
+05:15.480 --> 05:18.359
+And we discussed about functional programming.
+
+05:18.360 --> 05:23.279
+We discussed a bit about philosophy and went on.
+
+05:23.280 --> 05:29.159
+And then this conversation is not currently going.
+
+05:29.160 --> 05:32.759
+So we arrived to a point in which it sort of died out.
+
+05:32.760 --> 05:36.679
+But if I want or if they want, they can ping me back.
+
+05:36.680 --> 05:37.439
+I can ping them.
+
+05:37.440 --> 05:40.799
+So it's sort of a reference of this person exists
+
+05:40.800 --> 05:44.439
+and is an interesting person to chat with when I have something
+
+05:44.440 --> 05:48.359
+to say to them.
+
+05:48.360 --> 05:50.479
+And what if you want to be a buddy?
+
+05:50.480 --> 05:54.279
+Well, if you want to be a buddy, it's easy as well.
+
+05:54.280 --> 06:02.279
+So basically, just open a PR on the Emacs buddy repository.
+
+06:02.280 --> 06:05.279
+That is something that I am maintaining at the moment.
+
+06:05.280 --> 06:07.759
+Or simply send me the information.
+
+06:07.760 --> 06:09.999
+Somebody just sent me an email with the information.
+
+06:10.000 --> 06:14.719
+I have created the commit to make it public available.
+
+06:14.720 --> 06:18.559
+The information is just your name, a summary,
+
+06:18.560 --> 06:21.559
+what kind of user you are so that you can attract
+
+06:21.560 --> 06:28.039
+the right people to you, and a link to your material
+
+06:28.040 --> 06:31.959
+so that if they are curious about your summary or about you,
+
+06:31.960 --> 06:35.559
+they can actually go and check and even contact you directly.
+
+06:35.560 --> 06:40.559
+If they contact via me, I will know your email anyway
+
+06:40.560 --> 06:44.319
+from the PR you open.
+
+06:44.320 --> 06:45.759
+So that is all.
+
+06:45.760 --> 06:53.039
+There are ideas to maybe... if... this is basically
+
+06:53.040 --> 06:54.759
+an advertisement for this initiative
+
+06:54.760 --> 06:57.639
+so that we can get people that want to be helped
+
+06:57.640 --> 07:01.199
+or people that want to help.
+
+07:01.200 --> 07:03.599
+It's building up organically, so no rush
+
+07:03.600 --> 07:08.639
+to make this thing grow, escalate enormously.
+
+07:08.640 --> 07:12.479
+But for example, there are ideas to join this with the meetup
+
+07:12.480 --> 07:15.719
+talk that is being happening in the conference.
+
+07:15.720 --> 07:19.519
+So for example, if you find out something very interesting,
+
+07:19.520 --> 07:22.199
+you can bring the discussion that you have with your buddy
+
+07:22.200 --> 07:27.559
+into a meetup so that the group with which you speak is bigger.
+
+07:27.560 --> 07:28.919
+There are ideas like that.
+
+07:28.920 --> 07:33.119
+But first of all, just get in touch if you want to find
+
+07:33.120 --> 07:36.599
+like-minded people that want to help you with your Emacs
+
+07:36.600 --> 07:38.919
+journey or if you want to help others.
+
+07:38.920 --> 07:39.799
+Thank you very much.
+
+07:39.800 --> 07:59.520
+Enjoy the rest of the talks and chat to you soon.
diff --git a/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.vtt b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.vtt
new file mode 100644
index 00000000..5ade9186
--- /dev/null
+++ b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.vtt
@@ -0,0 +1,1004 @@
+WEBVTT
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:06.799
+Yes. Okay. Hi, everyone. We are back now, and I'm with Mats. Hi, Mats.
+
+00:00:06.800 --> 00:00:09.559
+Hi. How are you doing?
+
+00:00:09.560 --> 00:00:11.879
+I'm fine. How are you?
+
+00:00:11.880 --> 00:00:15.239
+I'm doing great as well. As the talk goes by,
+
+00:00:15.240 --> 00:00:20.119
+I keep warming up, and this is a very nice feeling. I look absolutely big
+
+00:00:20.120 --> 00:00:23.639
+with this down jacket, but it works, and I'm not going to question it.
+
+00:00:23.640 --> 00:00:27.039
+You do know, for the people coming every year to AMX Conf, that I do try
+
+00:00:27.040 --> 00:00:30.999
+to look dashing, but I also need to be warm, because this year,
+
+00:00:31.000 --> 00:00:33.359
+we are doing it in December and not in November.
+
+00:00:33.360 --> 00:00:36.639
+Okay. So, Mats,
+
+00:00:36.640 --> 00:00:40.599
+how about you start reading questions? I believe you've got one already.
+
+NOTE So with one line of code you can create custom hyperbutton types that are live in any Emacs buffer. Is that right?
+
+00:00:40.600 --> 00:00:45.719
+I got one question already. Yes. The question is, so with one line of code,
+
+00:00:45.720 --> 00:00:50.279
+you can create custom hyper button types that are live in an AMX buffer.
+
+00:00:50.280 --> 00:00:55.959
+Is that right? Yes. The short answer is yes.
+
+00:00:55.960 --> 00:01:01.599
+Maybe I should use the presentation and go into here.
+
+00:01:01.600 --> 00:01:09.759
+Let's see if I can find it.
+
+00:01:09.760 --> 00:01:17.839
+No. Read it wrong. So, here, the field macro allows you, in principle, to,
+
+00:01:17.840 --> 00:01:22.759
+in one line, define a hyper button, starting with the starting delimiter
+
+00:01:22.760 --> 00:01:25.519
+and an end delimiter, and then there's this mapping
+
+00:01:25.520 --> 00:01:36.319
+to whatever functionality should sort of come out of pressing that button.
+
+00:01:36.320 --> 00:01:39.199
+So, that was significantly more than just a yes. Thank you.
+
+00:01:39.200 --> 00:01:42.479
+I'll be glad we put your screen up so that you can answer this.
+
+00:01:42.480 --> 00:01:45.479
+So, people, just to remind you, so we do have the pad to answer the pad
+
+00:01:45.480 --> 00:01:49.039
+to ask you questions over there. We are, let me check
+
+00:01:49.040 --> 00:01:54.799
+how much time we have for this Q&A. We have until 15 of the next hour,
+
+00:01:54.800 --> 00:02:00.719
+which leaves about 20 minutes, but right now we only have one question.
+
+00:02:00.720 --> 00:02:07.519
+So, people on ISE, if you could place questions in the pad. Right.
+
+00:02:07.520 --> 00:02:10.679
+Sorry, I'm managing multiple things at the same time.
+
+00:02:10.680 --> 00:02:12.839
+Is there anything else you wanted to talk about? Anything else?
+
+00:02:12.840 --> 00:02:16.479
+Because, you know, to let people know,
+
+00:02:16.480 --> 00:02:19.719
+we do ask speakers to submit pre-recordings to us
+
+00:02:19.720 --> 00:02:21.639
+because it makes our life much easier on the day
+
+00:02:21.640 --> 00:02:25.519
+of the recording at EmacsConf, on the day of the conference at EmacsConf,
+
+00:02:25.520 --> 00:02:29.479
+because this way we can get away with not having
+
+00:02:29.480 --> 00:02:33.559
+to worry about live presentation catching fires and not, oh,
+
+00:02:33.560 --> 00:02:36.039
+I cannot share my screen, my microphone is not working.
+
+00:02:36.040 --> 00:02:40.439
+So, not only is everything working today inside the BBBO room,
+
+00:02:40.440 --> 00:02:44.159
+but Matt also sent a pre-recording. So, that's great.
+
+00:02:44.160 --> 00:02:50.079
+I got another question. Oh yes, go, but please, I'm down in the background.
+
+00:02:50.080 --> 00:02:53.319
+Let me jump over to the second question.
+
+NOTE Is there a good way to share common patterns for links other than the ones that you shared? shall those be PRs to your repository?
+
+00:02:53.320 --> 00:02:56.639
+The second question is, is there a good way to share common patterns
+
+00:02:56.640 --> 00:03:00.399
+for links other than the ones that you shared?
+
+00:03:00.400 --> 00:03:05.599
+Shall those be pull requests to your repository?
+
+00:03:05.600 --> 00:03:16.919
+Okay, let me think. Those should not be pull requests to our repository
+
+00:03:16.920 --> 00:03:19.999
+because these are your patterns, your links.
+
+00:03:20.000 --> 00:03:23.959
+That's something you would share like that I'm showing here.
+
+00:03:23.960 --> 00:03:27.239
+Could even be like you're sharing maybe the pattern, how this
+
+00:03:27.240 --> 00:03:31.599
+button looks, but maybe the implementation could in principle be different.
+
+00:03:31.600 --> 00:03:36.359
+So, the one you're sharing with might put their information
+
+00:03:36.360 --> 00:03:41.719
+in some other storage that might be accessed using the same information,
+
+00:03:41.720 --> 00:03:46.439
+or maybe just placed in some other part of the file system.
+
+00:03:46.440 --> 00:03:53.239
+So, the only good way to share it would be like to send it over email
+
+00:03:53.240 --> 00:03:57.519
+or some other message to someone else. Share it some way.
+
+00:03:57.520 --> 00:04:02.639
+First question. I like the link to evaluate calc expressions.
+
+00:04:02.640 --> 00:04:07.879
+Any way to get the outcome into the buffer and not just in the message window?
+
+00:04:07.880 --> 00:04:13.999
+I mean, that will be up to the sort of the implementation of the function
+
+00:04:14.000 --> 00:04:19.519
+that you would use in the bottom. I mean, the function that
+
+00:04:19.520 --> 00:04:25.999
+is evaluated could do anything really. So, that was just an example
+
+00:04:26.000 --> 00:04:30.519
+to show that you could, you don't have to be a link that you actually go
+
+00:04:30.520 --> 00:04:34.399
+to some new place. It can just be some computation or whatever. So,
+
+00:04:34.400 --> 00:04:39.519
+that's just trying to show that you shouldn't be limiting yourself
+
+00:04:39.520 --> 00:04:44.399
+to just thinking about links. It can be computing anything.
+
+00:04:44.400 --> 00:04:49.959
+It's really the thing about Elisp really. It's just when people ask you,
+
+00:04:49.960 --> 00:04:53.439
+you know, when they come from outside of Emacs and they ask you,
+
+00:04:53.440 --> 00:04:56.759
+can your function do this? The answer is more often than not, yes.
+
+00:04:56.760 --> 00:04:59.159
+Can you write it in Elisp? Yeah, I might need
+
+00:04:59.160 --> 00:05:01.839
+to look at the documentation a little bit, but I'll be able to do it.
+
+00:05:01.840 --> 00:05:06.239
+And, you know, calc does have the ability to paste the result
+
+00:05:06.240 --> 00:05:10.879
+when you're not calc used as a library, but calc the node.
+
+00:05:10.880 --> 00:05:13.319
+When you type something in it and you press Y,
+
+00:05:13.320 --> 00:05:17.119
+it will paste it into the buffer, which means that there is the ability
+
+00:05:17.120 --> 00:05:19.799
+to communicate between calc and the buffer you're currently in. So,
+
+00:05:19.800 --> 00:05:24.439
+it's probably just a matter of doing Ctrl-H-K-Y inside the calc mode,
+
+00:05:24.440 --> 00:05:27.719
+checking which function is running, and just putting this at the end
+
+00:05:27.720 --> 00:05:29.319
+of the button, and voila, there you go.
+
+00:05:29.320 --> 00:05:34.079
+So, Matt, I don't think you have any questions at the moment.
+
+00:05:34.080 --> 00:05:37.559
+We're going to leave some time for people to gather more questions,
+
+00:05:37.560 --> 00:05:41.839
+but I think, if I'm not mistaken, I might be wrong with the,
+
+00:05:41.840 --> 00:05:42.919
+we changed the schedule a little bit,
+
+00:05:42.920 --> 00:05:46.719
+but you're the first Hyperbole talk for today,
+
+00:05:46.720 --> 00:05:52.319
+and as such, you are introducing people to the concept of buttons,
+
+00:05:52.320 --> 00:05:56.719
+which is very instrumental to Hyperbole. Hyperbole?
+
+00:05:56.720 --> 00:06:00.639
+I'm going to go with Hyperbole, actually.
+
+00:06:00.680 --> 00:06:03.919
+So, could you maybe, I know it's a big task,
+
+00:06:03.920 --> 00:06:07.639
+and you've also touched upon what Hyperbole was, but a lot
+
+00:06:07.640 --> 00:06:10.599
+of people always ask, you know, Hyperbole, Org Mode,
+
+00:06:10.600 --> 00:06:13.559
+I see both of them sometimes crop up at the top of the subreddit,
+
+00:06:13.560 --> 00:06:16.519
+and I'm not exactly sure which one is doing which.
+
+00:06:16.520 --> 00:06:22.239
+You're using the term links, and this speaks to me as someone who works
+
+00:06:22.240 --> 00:06:24.359
+in Zettelkasten Methods, so maybe
+
+00:06:24.360 --> 00:06:27.479
+could you, I'm asking you with a very difficult question now,
+
+NOTE Could you differentiate Hyperbole and Org?
+
+00:06:27.480 --> 00:06:32.359
+could you differentiate maybe Hyperbole and Org, or try your best,
+
+00:06:32.360 --> 00:06:38.119
+knowing that we'll have more Hyperbole talks later in the conference?
+
+00:06:38.120 --> 00:06:45.959
+Well, I will not try to get into that sort of wormhole,
+
+00:06:45.960 --> 00:06:56.919
+because I don't think they should be compared, they're more companions, so yeah.
+
+00:06:56.920 --> 00:07:00.479
+It's the best way you could have answered this question, and you know,
+
+00:07:00.480 --> 00:07:04.799
+I'm going to remove you from this tricky situation in which I put you,
+
+00:07:04.800 --> 00:07:08.999
+so yes, they are complementary tool, they do some of the same thing,
+
+00:07:09.000 --> 00:07:11.639
+they do have different philosophy, and at the end,
+
+00:07:11.640 --> 00:07:13.079
+if they allow you to take notes,
+
+00:07:13.080 --> 00:07:15.999
+if they allow you to relate notes in different places,
+
+00:07:16.000 --> 00:07:19.239
+you know, it's a good note-taking system. Let's put it at this,
+
+00:07:19.240 --> 00:07:23.519
+let's not concern ourselves with comparison, at least Org, you know,
+
+00:07:23.520 --> 00:07:26.559
+the best thing about comparing is cross-pollination,
+
+00:07:26.560 --> 00:07:29.639
+which is made all the more easier with something like Emacs,
+
+00:07:29.640 --> 00:07:33.399
+because ideas from one mode can be taken and applied in another mode.
+
+00:07:33.400 --> 00:07:36.799
+Now, maybe not straightforwardly between Hyperbole and Org,
+
+00:07:36.800 --> 00:07:39.439
+but the idea can be translated at the very least.
+
+00:07:39.440 --> 00:07:42.959
+You did have a question, I'll answer this one very quick,
+
+00:07:42.960 --> 00:07:44.639
+because it's a quick one.
+
+00:07:44.640 --> 00:07:46.919
+Yeah, yes, you want to take it?
+
+00:07:46.920 --> 00:07:51.079
+I just want to quickly follow up on what you said there,
+
+00:07:51.080 --> 00:07:56.399
+that, ah, now I lost, I lost it, maybe come back,
+
+00:07:56.400 --> 00:07:59.039
+so let's jump into the question instead,
+
+00:07:59.040 --> 00:08:08.239
+because I got an answer, so thank you for everybody who wrote the answer,
+
+00:08:08.240 --> 00:08:13.359
+great, and the next question was, this talk is really straightforward,
+
+00:08:13.360 --> 00:08:16.119
+so that's probably why there aren't many questions,
+
+00:08:16.120 --> 00:08:19.959
+maybe Mats could talk about Hyperbole in general, while he was, aha, okay,
+
+00:08:19.960 --> 00:08:24.279
+that's maybe what you were trying to do here, so maybe I should,
+
+00:08:24.280 --> 00:08:27.719
+and the last one is, second question, last question is,
+
+NOTE How did you present the right buffer with shortcuts at the right of your buffer?
+
+00:08:27.720 --> 00:08:30.719
+how did you present the lossage bar at the right of your buffer?
+
+00:08:30.720 --> 00:08:36.639
+A lot of people are wondering, the lossage bar, oh, well, you have
+
+00:08:36.640 --> 00:08:41.399
+to elaborate on what the lossage bar is. I can, although
+
+00:08:41.400 --> 00:08:45.199
+I do have a slight problem, my daily backup is running,
+
+00:08:45.200 --> 00:08:48.639
+so if my voice is crackly, I'm sorry, I can't do anything about it,
+
+00:08:48.640 --> 00:08:49.279
+can you hear me?
+
+00:08:49.280 --> 00:08:51.719
+Yeah, you're shopping up,
+
+00:08:51.720 --> 00:08:57.319
+but I can understand what you're saying, so that's great.
+
+00:08:57.320 --> 00:09:01.719
+So lossage is the stuff that you have on the right side of your screen,
+
+00:09:01.720 --> 00:09:05.399
+it's the commands that you're running and the key binding that you're using
+
+00:09:05.400 --> 00:09:08.719
+to run them, and yes, this is a mode that we ask,
+
+00:09:08.720 --> 00:09:12.159
+or that we provide Emacs on speakers with,
+
+00:09:12.160 --> 00:09:16.599
+and it's called interactive log mode, which is available on GitHub,
+
+00:09:16.600 --> 00:09:21.079
+which will allow you to have this pretty print on the right side of your screen,
+
+00:09:21.080 --> 00:09:22.279
+or whatever really, it's just a buffer.
+
+00:09:22.280 --> 00:09:30.159
+Yeah, and I haven't used it before doing this presentation, so it was a news
+
+00:09:30.160 --> 00:09:38.559
+to me, so I'm very new to using it, but it works. Well, if you move around,
+
+00:09:38.560 --> 00:09:40.199
+you see that, yeah.
+
+00:09:40.200 --> 00:09:46.519
+So for the people, we did open up the BBB chat room now,
+
+00:09:46.520 --> 00:09:50.199
+which means that again, if you go to the talk page for Matz,
+
+00:09:50.200 --> 00:09:56.839
+where this was Button, you will be able to join the BBB by clicking on the link,
+
+00:09:56.840 --> 00:09:59.199
+and you'll be able to ask questions right away to Matz.
+
+00:09:59.200 --> 00:10:03.439
+We've started a nice question about org hyperbole and stuff like this,
+
+00:10:03.440 --> 00:10:06.559
+but maybe we should, yes, I'm trying to save you here,
+
+00:10:06.560 --> 00:10:09.679
+maybe we should re-center on the buttons and what they can do,
+
+00:10:09.680 --> 00:10:13.679
+especially what we talked about Elisp, allowing buttons to be whatever,
+
+00:10:13.680 --> 00:10:17.839
+and since Matz, you have your Emacs available,
+
+00:10:17.840 --> 00:10:21.279
+it might be a good opportunity for you to show some of the buttons
+
+00:10:21.280 --> 00:10:24.119
+that you're using as well, maybe some different ones that you've presented.
+
+00:10:24.120 --> 00:10:27.199
+So if people want to join, that would be a great opportunity
+
+00:10:27.200 --> 00:10:32.359
+to ask your questions. We have about 20 more minutes of Q&A,
+
+00:10:32.360 --> 00:10:36.199
+and if we don't have any more people showing up
+
+00:10:36.200 --> 00:10:40.319
+and no more questions on the pad, we can also go on a little break,
+
+00:10:40.320 --> 00:10:44.719
+and I would appreciate this, but I'm also happy to stay.
+
+00:10:44.720 --> 00:10:52.479
+Yeah, I understand the interest, but there are more talks coming up
+
+00:10:52.480 --> 00:10:58.199
+in related to hyperbole, and I haven't prepared any cool stuff.
+
+NOTE Working with different support systems
+
+00:10:58.200 --> 00:11:02.639
+What I could mention that I think is cool, I will not demo that,
+
+00:11:02.640 --> 00:11:09.919
+but I work as a programmer, and then I have different support systems,
+
+00:11:09.920 --> 00:11:16.719
+which have these strings, identifiers that may be linked
+
+00:11:16.720 --> 00:11:23.799
+to different information, like a ticketing system, for instance,
+
+00:11:23.800 --> 00:11:29.199
+that would do bugs. It could be like a novel text string
+
+00:11:29.200 --> 00:11:38.639
+that identify your bug or your ticket, and it's an internal tool,
+
+00:11:38.640 --> 00:11:42.799
+so no one else can support that, but by using hyperbole,
+
+00:11:42.800 --> 00:11:46.839
+I can write my own interpretation of that string
+
+00:11:46.840 --> 00:11:49.999
+and get that to work as a button, so I can easily
+
+00:11:50.000 --> 00:11:56.279
+from the code or from some notes link directly into that ticketing system.
+
+00:11:56.280 --> 00:12:03.919
+So that's the point I'm trying to make with this talk is
+
+00:12:03.920 --> 00:12:07.839
+that it's useful for setting up your own environment
+
+00:12:07.840 --> 00:12:11.719
+that only you really know about and how you want to navigate
+
+00:12:11.720 --> 00:12:20.599
+with your information, and it's not about trying to force some type
+
+00:12:20.600 --> 00:12:25.719
+of work stream upon anybody. It's more like giving you the opportunity
+
+00:12:25.720 --> 00:12:28.319
+to streamline your own workflow instead.
+
+00:12:28.320 --> 00:12:33.479
+I think the remaining talks about hyperbole will be more focused
+
+00:12:33.480 --> 00:12:38.199
+on all the features. It's a multi-functional package
+
+00:12:38.200 --> 00:12:40.119
+with a lot of different stuff in it,
+
+00:12:40.120 --> 00:12:46.999
+so I could not give justice to it in just doing some quick demos.
+
+00:12:47.000 --> 00:12:49.119
+It won't show all the things you can do.
+
+00:12:49.120 --> 00:12:52.639
+Yeah, but I'm going to say for someone saying
+
+00:12:52.640 --> 00:12:54.839
+that you couldn't do justice to the topic,
+
+00:12:54.840 --> 00:12:58.079
+you've done a very fine job, so do not worry about this.
+
+00:12:58.080 --> 00:13:01.759
+It's funny, I was listening to you describe this, the
+
+00:13:01.760 --> 00:13:03.759
+buttons really, but when
+
+00:13:03.760 --> 00:13:06.839
+you think about it, you could have forgotten about the buttons
+
+00:13:06.840 --> 00:13:11.239
+and really remembered about Emacs and would make as much sense as well,
+
+00:13:11.240 --> 00:13:14.799
+because Emacs as a whole, the Elisp stuff behind it allows you
+
+00:13:14.800 --> 00:13:17.039
+to do whatever interface you want very easily,
+
+00:13:17.040 --> 00:13:23.759
+and the buttons really enshrines the interface type of things really,
+
+00:13:23.760 --> 00:13:26.399
+because you just have a button that is running code.
+
+00:13:26.400 --> 00:13:27.799
+It's no longer, oh, you need to go to
+
+00:13:27.800 --> 00:13:30.079
+the end of the parenthesis, the end of the sex,
+
+00:13:30.080 --> 00:13:32.879
+and you need to evaluate it. There's something more interactive about it,
+
+00:13:32.880 --> 00:13:35.879
+which feels closer to your user interface as a result to this,
+
+00:13:35.880 --> 00:13:37.959
+but I've already blabbered enough.
+
+00:13:37.960 --> 00:13:40.639
+We do have someone with a microphone in the VBB chat,
+
+00:13:40.640 --> 00:13:43.399
+so does this person want to unmute themselves
+
+00:13:43.400 --> 00:13:44.279
+and ask a question, maybe?
+
+00:13:44.280 --> 00:13:52.879
+I think I have some very knowledgeable person about hyperbole in the chat.
+
+00:13:52.880 --> 00:13:57.639
+Yes, I didn't want to spoil it, but I'm not sure if they're going
+
+00:13:57.640 --> 00:14:00.759
+to unmute themselves, so I don't want to put too much pressure on them.
+
+00:14:00.760 --> 00:14:03.519
+Can you guys hear me? We can, yes.
+
+00:14:03.520 --> 00:14:09.879
+Hi, Bob. Hi, long time fan of hyperbole.
+
+00:14:09.880 --> 00:14:12.919
+You might want to cue people in on a joke here,
+
+00:14:12.920 --> 00:14:14.599
+because I'm not sure if anyone knows who you are.
+
+NOTE Bob Weiner
+
+00:14:14.600 --> 00:14:19.879
+I wrote hyperbole, and Matt's my co-maintainer on it,
+
+00:14:19.880 --> 00:14:23.159
+so really exciting to have the first talk here.
+
+00:14:23.160 --> 00:14:26.879
+I think I just wanted to mention two things.
+
+00:14:26.880 --> 00:14:28.879
+Maybe you could show a little key series,
+
+00:14:28.880 --> 00:14:33.879
+just type one out dynamically and show how simple that is,
+
+00:14:33.880 --> 00:14:39.639
+and then talk about the UKIPA daily journal,
+
+00:14:39.640 --> 00:14:45.479
+right? Time-stamped journal that was originally org mode,
+
+00:14:45.480 --> 00:14:49.479
+and I think you're now using Hyperbole's K-outliner,
+
+00:14:49.480 --> 00:14:56.319
+so maybe mention doing that. Okay.
+
+00:14:56.320 --> 00:14:59.959
+Something that's more than one key sequence, please.
+
+00:14:59.960 --> 00:15:09.199
+Do a couple operations that you do a lot of or that are interesting,
+
+00:15:09.200 --> 00:15:10.839
+all in one.
+
+00:15:10.840 --> 00:15:15.719
+So the key series is like a keyboard macro,
+
+00:15:15.720 --> 00:15:20.879
+so it's not limited to one key sequence,
+
+00:15:20.880 --> 00:15:27.199
+but any series of key sequences can be strung together
+
+00:15:27.200 --> 00:15:28.879
+just like that with nothing else,
+
+00:15:28.880 --> 00:15:35.399
+and then you activate it the same way as any other button, right?
+
+00:15:35.400 --> 00:15:38.079
+Yes, but you're putting me on the spot here,
+
+00:15:38.080 --> 00:15:41.199
+because now I have to remember, actually, how to write these things.
+
+00:15:41.200 --> 00:15:46.079
+You just write it the way you would type it.
+
+00:15:46.080 --> 00:15:49.479
+Yeah, I see it.
+
+00:15:49.480 --> 00:16:00.079
+Okay, so let's see. So the key series is between these braces and...
+
+00:16:00.080 --> 00:16:05.159
+And you could leave out the quote marks if you don't...
+
+00:16:05.160 --> 00:16:07.639
+Maybe I can skip that as well.
+
+00:16:07.640 --> 00:16:09.559
+So here's the key series.
+
+00:16:09.560 --> 00:16:10.919
+Let's see what's happening.
+
+00:16:10.920 --> 00:16:12.999
+Do I go to the 10th folder or not?
+
+00:16:13.000 --> 00:16:16.119
+Boom, I got there. Yeah, it worked.
+
+00:16:16.120 --> 00:16:23.159
+Bob, great. So you can name them and then reuse them,
+
+00:16:23.160 --> 00:16:29.119
+and so it's sort of like you've got this toolkit that you can embed
+
+00:16:29.120 --> 00:16:31.919
+in all these different modes that you have in Emacs,
+
+00:16:31.920 --> 00:16:34.639
+and you just carry it with you.
+
+00:16:34.640 --> 00:16:38.759
+It's not like a whole mode unto itself that you always have to use.
+
+00:16:38.760 --> 00:16:46.599
+Yeah, so in this example here with the field, you can,
+
+00:16:46.600 --> 00:16:52.119
+instead of having like this path string here,
+
+00:16:52.120 --> 00:16:54.359
+you can have a key series as well.
+
+00:16:54.360 --> 00:17:01.399
+But to the other point, also, Elisp is available,
+
+00:17:01.400 --> 00:17:02.959
+but this is even more available
+
+00:17:02.960 --> 00:17:05.959
+because you don't even have to code using Elisp.
+
+00:17:05.960 --> 00:17:09.079
+So that's the point also with this, the fill and the file macros.
+
+00:17:09.080 --> 00:17:11.879
+You should make it even simpler.
+
+00:17:11.880 --> 00:17:15.519
+And if you just know how to type some command,
+
+00:17:15.520 --> 00:17:18.679
+you can use the key series together with this
+
+00:17:18.680 --> 00:17:21.359
+to get some functionality out of this.
+
+00:17:21.360 --> 00:17:26.399
+I think one of the things we've taken to saying about Hyperbole
+
+00:17:26.400 --> 00:17:31.239
+is it's kind of the lightest hypertext markup
+
+00:17:31.240 --> 00:17:35.159
+that you can have, as you saw there, right?
+
+00:17:35.160 --> 00:17:37.519
+I mean, there were just braces, and all of a sudden,
+
+00:17:37.520 --> 00:17:40.999
+it's a live hyper button. So we've tried to strip away
+
+00:17:41.000 --> 00:17:44.879
+having to write stuff like HTML or even all the drawers
+
+00:17:44.880 --> 00:17:47.519
+and stuff like that, and we've tried to make it so that you know,
+
+00:17:47.520 --> 00:17:51.439
+even all the like drawers and the property markup in org mode,
+
+00:17:51.440 --> 00:17:57.679
+and just provide very, very simple sort of syntactical things similar
+
+00:17:57.680 --> 00:18:01.679
+to what Elisp does, so that you can get a lot of power
+
+00:18:01.680 --> 00:18:07.999
+and put buttons everywhere, but not have to recognize a lot of syntax
+
+00:18:08.000 --> 00:18:11.639
+or use a whole bunch of keys on your buttons.
+
+00:18:11.640 --> 00:18:16.039
+It's pretty interesting,
+
+00:18:16.040 --> 00:18:16.679
+by the way.
+
+00:18:16.680 --> 00:18:17.959
+I'm sorry I have to do this,
+
+00:18:17.960 --> 00:18:20.519
+but we only have about five more minutes in the Q&A before we need
+
+00:18:20.520 --> 00:18:24.039
+to move on to the next talk. But don't worry, you've had a little test
+
+00:18:24.040 --> 00:18:27.079
+of Hyperbole right there, and you'll have more over the weekend.
+
+00:18:27.080 --> 00:18:30.319
+We've had a lot of Hyperbole talk this year, which is amazing.
+
+00:18:30.320 --> 00:18:33.559
+You know, we usually have a lot of talk about org, but this year
+
+00:18:33.560 --> 00:18:37.479
+is truly the one where we also have a similar amount of Hyperbole talk,
+
+00:18:37.480 --> 00:18:42.399
+which is amazing to see. Obviously, I am more of an org guy,
+
+00:18:42.400 --> 00:18:45.679
+but I see so many parallels between the two, so many bridges
+
+00:18:45.680 --> 00:18:50.319
+that could be built as well, and it's amazing to see the amount of passion
+
+00:18:50.320 --> 00:18:53.439
+that goes into this. Usually I deal with people who are passionate about org,
+
+00:18:53.440 --> 00:18:56.719
+but to see that there's a similar amount of passion on the Hyperbole side
+
+00:18:56.720 --> 00:18:58.279
+of things is truly amazing to me.
+
+00:18:58.280 --> 00:19:04.799
+I think we had one more question in the pad, if you can take it, Matt.
+
+NOTE Do the links/buttons created in hyperbole (like that one with the url) get exported on org-mode files too? (like when exported to html)
+
+00:19:04.800 --> 00:19:10.639
+Yeah, the last here is, does the links buttons create in Hyperbole,
+
+00:19:10.640 --> 00:19:16.159
+like the one with the URL get exported on org mode files too,
+
+00:19:16.160 --> 00:19:18.999
+like when exported to HTML?
+
+00:19:19.000 --> 00:19:21.039
+Oh, tricky question.
+
+00:19:21.040 --> 00:19:31.519
+I mean, these implicit buttons, they are just like the patterns.
+
+00:19:31.520 --> 00:19:35.319
+So the pattern will of course be exported to HTML,
+
+00:19:35.320 --> 00:19:37.439
+but you will not be able maybe
+
+00:19:37.440 --> 00:19:43.519
+to do something there unless you're watching the HTML within Emacs,
+
+00:19:43.520 --> 00:19:50.199
+so the sort of Hyperbole machinery would be available, if that makes sense.
+
+00:19:50.200 --> 00:19:58.359
+I mean, yeah, it's possible. It depends what the encoding is,
+
+00:19:58.360 --> 00:20:03.999
+what the encoding is, but we do have an outliner mode, the K outliner
+
+00:20:04.000 --> 00:20:10.439
+in Hyperbole as well, and that has a single command export to HTML.
+
+00:20:10.440 --> 00:20:13.879
+So if you've embedded URLs in there,
+
+00:20:13.880 --> 00:20:19.519
+you would see them just like if you embedded them in org mode,
+
+00:20:19.520 --> 00:20:25.559
+and potentially the org exporter, if you just write a raw URL,
+
+00:20:25.560 --> 00:20:30.119
+will also encode it for you when you export it.
+
+00:20:30.120 --> 00:20:35.039
+There's other Hyperbole buttons in there. Yeah, but the functionality that
+
+00:20:35.040 --> 00:20:38.159
+is by clicking on that button will not be exported.
+
+00:20:38.160 --> 00:20:44.079
+Well, it's like you can try printing the button, I'm not sure. No amount
+
+00:20:44.080 --> 00:20:46.479
+of clicking on it is actually going to trigger an action.
+
+00:20:46.480 --> 00:20:51.639
+I might be wrong though. Sorry, I mean printing on paper,
+
+00:20:51.640 --> 00:20:55.799
+it's a very confusing terminology that we're using right there, not printing
+
+00:20:55.800 --> 00:20:56.759
+in a terminal.
+
+00:20:56.760 --> 00:21:02.359
+One cool thing if you use the Hyperbole export to HTML is
+
+00:21:02.360 --> 00:21:07.519
+that you can expand and collapse your trees in the HTML.
+
+00:21:07.520 --> 00:21:10.439
+I don't think you can do that with the org export right now.
+
+00:21:10.440 --> 00:21:15.999
+But Bob, you're going to show something about that tomorrow, right?
+
+00:21:16.000 --> 00:21:21.319
+I don't think it's in this presentation because I'm- Oh, it's not
+
+00:21:21.320 --> 00:21:25.079
+in the presentation, okay. On the org side of the house this time,
+
+00:21:25.080 --> 00:21:32.879
+but it'll be in a different one about Hyperbole some other time. All right,
+
+00:21:32.880 --> 00:21:36.199
+so we have about two minutes until we need to go to the next talk,
+
+00:21:36.200 --> 00:21:38.479
+but thank you so much, Matz, and thank you so much, Bob,
+
+00:21:38.480 --> 00:21:41.839
+also for showing up and giving us a taste of what is probably going
+
+00:21:41.840 --> 00:21:44.759
+to follow up tomorrow. I can't remember, I think your talk is
+
+00:21:44.760 --> 00:21:51.599
+in the afternoon, right, Bob? Correct, about 1 p.m. EST. Yeah, so
+
+00:21:51.600 --> 00:21:56.959
+in about 22 hours, 23 hours. I'm trying my best to give you times
+
+00:21:56.960 --> 00:21:59.119
+which are time zone independence,
+
+00:21:59.120 --> 00:22:01.839
+so I'm sorry if I'm missing the mark a little bit,
+
+00:22:01.840 --> 00:22:04.679
+but hopefully this would be useful for many people. But otherwise,
+
+00:22:04.680 --> 00:22:07.719
+just check the schedule and you'll be able to get everything. All right, well,
+
+00:22:07.720 --> 00:22:09.999
+thank you so much, Matz, for answering so many questions
+
+00:22:10.000 --> 00:22:12.839
+and for your presentation as well. I feel like it was good
+
+00:22:12.840 --> 00:22:16.599
+to have your presentation before Bob's one tomorrow,
+
+00:22:16.600 --> 00:22:22.039
+because focusing on the one aspect of Hyperbole, the buttons, and linking it
+
+00:22:22.040 --> 00:22:26.119
+to Elisp, linking it to interactivity, linking it to UI, I think is going
+
+00:22:26.120 --> 00:22:29.239
+to prime people to then understand fully what Hyperbole,
+
+00:22:29.240 --> 00:22:34.319
+or what are the capabilities of Hyperbole, beyond this, or inspired by this.
+
+00:22:34.320 --> 00:22:37.199
+So thank you so much. Thanks, Matz. Thank you.
+
+00:22:37.200 --> 00:22:38.599
+Great.
+
+00:22:38.600 --> 00:22:42.519
+All right, and we are going live with the next talk in about 30 seconds.
+
+00:22:42.520 --> 00:22:45.519
+I think we're going to close the BBB room,
+
+00:22:45.520 --> 00:22:49.759
+because nobody has showed up otherwise. So I will see you both later.
+
+00:22:49.760 --> 00:22:50.599
+Bye-bye.
+
+00:22:50.600 --> 00:22:54.000
+Bye-bye.
diff --git a/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt
new file mode 100644
index 00000000..53204574
--- /dev/null
+++ b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt
@@ -0,0 +1,49 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:01:01.760
+Introduction
+
+26
+00:01:01.760 --> 00:01:29.920
+Implicit buttons
+
+37
+00:01:29.920 --> 00:02:37.080
+Filenames
+
+57
+00:02:37.080 --> 00:03:10.120
+Other built-in implicit buttons
+
+68
+00:03:10.120 --> 00:04:13.400
+Creating new implicit button types with defib, defil, and defal
+
+94
+00:04:13.400 --> 00:04:44.480
+Personal data
+
+106
+00:04:44.480 --> 00:07:10.720
+Defining an implicit button with defil
+
+154
+00:07:10.720 --> 00:07:54.520
+Types of link expressions
+
+171
+00:07:54.520 --> 00:08:32.200
+Another button example
+
+184
+00:08:32.200 --> 00:08:57.160
+Action buttons
+
+191
+00:08:57.160 --> 00:09:29.760
+The defal macro
+
+202
+00:09:29.760 --> 00:10:32.000
+Conclusion
diff --git a/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt
new file mode 100644
index 00000000..e7e58879
--- /dev/null
+++ b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt
@@ -0,0 +1,890 @@
+WEBVTT captioned by sachac
+
+1
+00:00:00.000 --> 00:00:06.280
+Hi everyone! I'm Mats Liddell.
+
+2
+00:00:06.280 --> 00:00:07.320
+In this talk, I will show
+
+3
+00:00:07.320 --> 00:00:09.040
+how you can link to personal data
+
+4
+00:00:09.040 --> 00:00:13.960
+using Hyperbole's support for implicit button types.
+
+5
+00:00:13.960 --> 00:00:16.040
+Before starting, a few words about me.
+
+6
+00:00:16.040 --> 00:00:18.000
+I work as a software engineer,
+
+7
+00:00:18.000 --> 00:00:19.200
+and in my spare time
+
+8
+00:00:19.200 --> 00:00:21.280
+I'm co-maintaining the Hyperbole package
+
+9
+00:00:21.280 --> 00:00:24.360
+together with the package author Bob Weiner.
+
+10
+00:00:24.360 --> 00:00:27.240
+Hyperbole dates back to 1993,
+
+11
+00:00:27.240 --> 00:00:29.680
+and have had some inactive years in the past,
+
+12
+00:00:29.680 --> 00:00:31.680
+but work is now active again.
+
+13
+00:00:31.680 --> 00:00:33.080
+The package is available
+
+14
+00:00:33.080 --> 00:00:36.160
+through the GNU ELPA package archive.
+
+15
+00:00:36.160 --> 00:00:37.960
+The talk will focus on
+
+16
+00:00:37.960 --> 00:00:39.600
+creation of implicit button types.
+
+17
+00:00:39.600 --> 00:00:41.480
+For more info on Hyperbole,
+
+18
+00:00:41.480 --> 00:00:43.120
+listen to other presentations
+
+19
+00:00:43.120 --> 00:00:46.360
+and check out the package documentation.
+
+20
+00:00:46.360 --> 00:00:50.000
+What I want you to take with you from this talk is
+
+21
+00:00:50.000 --> 00:00:51.640
+that the implicit button types
+
+22
+00:00:51.640 --> 00:00:54.440
+can make patterns in your files into buttons;
+
+23
+00:00:54.440 --> 00:00:56.600
+and that new implicit button types
+
+24
+00:00:56.600 --> 00:00:58.480
+can quickly be created by using
+
+25
+00:00:58.480 --> 00:01:01.760
+the `defil` and the `defal` macros.
+
+26
+00:01:01.760 --> 00:01:05.160
+So what is an implicit button type?
+
+27
+00:01:05.160 --> 00:01:06.800
+I think of it as a text pattern
+
+28
+00:01:06.800 --> 00:01:08.920
+that has some extended meaning.
+
+29
+00:01:08.920 --> 00:01:10.760
+When you see the pattern in the text,
+
+30
+00:01:10.760 --> 00:01:12.800
+you can think of it as a button type.
+
+31
+00:01:12.800 --> 00:01:13.880
+When you press the button,
+
+32
+00:01:13.880 --> 00:01:16.880
+something related to that meaning happens.
+
+33
+00:01:16.880 --> 00:01:19.000
+It can be jumping to some place,
+
+34
+00:01:19.000 --> 00:01:22.440
+opening an external tool, doing some computation.
+
+35
+00:01:22.440 --> 00:01:24.160
+So there can be some action
+
+36
+00:01:24.160 --> 00:01:29.920
+associated with the pattern.
+
+37
+00:01:29.920 --> 00:01:33.320
+To make it clear, let's look at some examples.
+
+38
+00:01:33.320 --> 00:01:36.080
+Let's start with something that is maybe so obvious
+
+39
+00:01:36.080 --> 00:01:39.600
+that you don't even think of it as a pattern: a file name.
+
+40
+00:01:39.600 --> 00:01:41.360
+When you see such a string in text,
+
+41
+00:01:41.360 --> 00:01:45.360
+you will naturally associate it with a file on disk,
+
+42
+00:01:45.360 --> 00:01:46.720
+and if you would click on it,
+
+43
+00:01:46.720 --> 00:01:52.680
+you would probably expect that file to open.
+
+44
+00:01:52.680 --> 00:01:55.120
+In the first sentence on the slide,
+
+45
+00:01:55.120 --> 00:01:56.840
+you might recognize the file name
+
+46
+00:01:56.840 --> 00:02:01.760
+for the bash initialization file, ~/.bashrc.
+
+47
+00:02:01.760 --> 00:02:03.840
+Hyperbole comes with built-in support
+
+48
+00:02:03.840 --> 00:02:06.520
+for recognizing files and directory path names
+
+49
+00:02:06.520 --> 00:02:08.680
+as implicit button types in text.
+
+50
+00:02:08.680 --> 00:02:11.760
+For Hyperbole to take action on the button type,
+
+51
+00:02:11.760 --> 00:02:13.440
+you move the cursor within the button
+
+52
+00:02:13.440 --> 00:02:16.320
+and press M-RET or use a mouse click.
+
+53
+00:02:16.320 --> 00:02:22.360
+So let's try that.
+
+54
+00:02:22.360 --> 00:02:27.720
+Similar for the path, /usr/local in the next sentence.
+
+55
+00:02:27.720 --> 00:02:29.520
+That will open the corresponding
+
+56
+00:02:29.520 --> 00:02:37.080
+directory using dired-mode.
+
+57
+00:02:37.080 --> 00:02:39.760
+Other examples of built-in implicit button types
+
+58
+00:02:39.760 --> 00:02:43.720
+that Hyperbole recognizes are email addresses,
+
+59
+00:02:43.720 --> 00:02:47.320
+web addresses, requests for comment documents
+
+60
+00:02:47.320 --> 00:02:50.120
+in the form of RFC followed by a number,
+
+61
+00:02:50.120 --> 00:02:53.040
+GNU debbugs issues, plus many more.
+
+62
+00:02:53.040 --> 00:02:55.360
+These are some examples
+
+63
+00:02:55.360 --> 00:02:58.080
+of implicit button types with built-in support.
+
+64
+00:02:58.080 --> 00:02:59.920
+I list them here to give you an idea
+
+65
+00:02:59.920 --> 00:03:02.480
+how the text pattern in itself is enough
+
+66
+00:03:02.480 --> 00:03:03.960
+for the system to recognize it
+
+67
+00:03:03.960 --> 00:03:10.120
+as something actionable.
+
+68
+00:03:10.120 --> 00:03:12.480
+So as shown, Hyperbole has built-in support
+
+69
+00:03:12.480 --> 00:03:14.040
+for implicit buttons.
+
+70
+00:03:14.040 --> 00:03:16.120
+There's only one problem here.
+
+71
+00:03:16.120 --> 00:03:17.920
+The behavior is predefined.
+
+72
+00:03:17.920 --> 00:03:20.240
+There is of course a trade off.
+
+73
+00:03:20.240 --> 00:03:21.560
+It is convenient to get
+
+74
+00:03:21.560 --> 00:03:23.480
+many button types out of the box
+
+75
+00:03:23.480 --> 00:03:25.520
+with likely good standard behavior
+
+76
+00:03:25.520 --> 00:03:27.680
+and that works in many places.
+
+77
+00:03:27.680 --> 00:03:29.360
+But what if you would want to create
+
+78
+00:03:29.360 --> 00:03:31.160
+your own completely new mapping,
+
+79
+00:03:31.160 --> 00:03:32.880
+possibly to your own data?
+
+80
+00:03:32.880 --> 00:03:38.120
+It is here that Hyperbole's support for creating
+
+81
+00:03:38.120 --> 00:03:41.280
+new implicit button types comes in.
+
+82
+00:03:41.280 --> 00:03:43.360
+For the full pattern matching button type,
+
+83
+00:03:43.360 --> 00:03:46.720
+like for the filename and examples we just looked at,
+
+84
+00:03:46.720 --> 00:03:48.754
+you need to define the implicit button
+
+00:03:48.755 --> 00:03:50.920
+using the macro, `defib`.
+
+85
+00:03:50.920 --> 00:03:53.280
+The downside of that is
+
+86
+00:03:53.280 --> 00:03:54.920
+you need to code at the elisp level.
+
+87
+00:03:54.920 --> 00:03:57.240
+However, if you are creating a new pattern
+
+88
+00:03:57.240 --> 00:03:59.120
+that has well-defined delimiters,
+
+89
+00:03:59.120 --> 00:04:01.360
+there is support for that in an easier way.
+
+90
+00:04:01.360 --> 00:04:03.800
+These support functions, or rather macros,
+
+91
+00:04:03.800 --> 00:04:06.240
+are `defil` and `defal`.
+
+92
+00:04:06.240 --> 00:04:08.440
+We will look at those macros soon,
+
+93
+00:04:08.440 --> 00:04:13.400
+but first, my definition of personal data.
+
+94
+00:04:13.400 --> 00:04:18.200
+I think of personal data as something
+
+95
+00:04:18.200 --> 00:04:19.680
+that you would like to link to,
+
+96
+00:04:19.680 --> 00:04:21.440
+but it's not necessarily in a form
+
+97
+00:04:21.440 --> 00:04:23.360
+supported by any known tool.
+
+98
+00:04:23.360 --> 00:04:26.920
+It might be stored on a web server, local storage,
+
+99
+00:04:26.920 --> 00:04:28.680
+or could even be some computation
+
+100
+00:04:28.680 --> 00:04:29.400
+rather than a link.
+
+101
+00:04:29.400 --> 00:04:32.200
+What all these cases have in common is that
+
+102
+00:04:32.200 --> 00:04:34.240
+you want to be able to reference it
+
+103
+00:04:34.240 --> 00:04:36.640
+in a short, and for you, descriptive way.
+
+104
+00:04:36.640 --> 00:04:38.960
+So when you write text, you can use
+
+105
+00:04:38.960 --> 00:04:44.480
+a new implicit type to create the connection.
+
+106
+00:04:44.480 --> 00:04:46.600
+This might be a bit abstract,
+
+107
+00:04:46.600 --> 00:04:48.080
+so let's look at an example.
+
+108
+00:04:48.080 --> 00:04:51.000
+Suppose you have a flat file structure
+
+109
+00:04:51.000 --> 00:04:52.760
+with some notes in each file.
+
+110
+00:04:52.760 --> 00:04:54.520
+It can look like this.
+
+111
+00:04:54.520 --> 00:04:57.400
+In the data folder, we have two files
+
+112
+00:04:57.400 --> 00:05:00.200
+that represents the notes we have taken.
+
+113
+00:05:00.200 --> 00:05:02.840
+We now want to be able to link to these notes
+
+114
+00:05:02.840 --> 00:05:07.120
+from outside of the data folder.
+
+115
+00:05:07.120 --> 00:05:08.960
+Let's make an implicit button type
+
+116
+00:05:08.960 --> 00:05:10.920
+that opens a file in this structure.
+
+117
+00:05:10.920 --> 00:05:13.520
+To make the pattern stand out in text,
+
+118
+00:05:13.520 --> 00:05:16.640
+we use double braces as start and stop delimiters.
+
+119
+00:05:16.640 --> 00:05:20.080
+An implicit button instance
+
+120
+00:05:20.080 --> 00:05:22.760
+would then look like this.
+
+121
+00:05:22.760 --> 00:05:27.680
+We can create that using the `defil` macro like this.
+
+122
+00:05:27.680 --> 00:05:31.840
+This invocation of the field
+
+123
+00:05:31.840 --> 00:05:34.480
+creates a button type "demo-link-to-file"
+
+124
+00:05:34.480 --> 00:05:37.280
+with the start delimiter of "{{"
+
+125
+00:05:37.280 --> 00:05:40.560
+and then delimiters of "}}",
+
+126
+00:05:40.560 --> 00:05:43.320
+the regular expression ".*" pattern
+
+127
+00:05:43.320 --> 00:05:45.640
+to match everything between the delimiters,
+
+128
+00:05:45.640 --> 00:05:48.800
+and finally, the action defined by the link expression.
+
+129
+00:05:48.800 --> 00:05:52.160
+Pattern substitution is performed
+
+130
+00:05:52.160 --> 00:05:54.440
+on the link expression before evaluation
+
+131
+00:05:54.440 --> 00:05:57.920
+so that the text that is in between the delimiters
+
+132
+00:05:57.920 --> 00:06:02.360
+is inserted where the "\\&" is in the link expression.
+
+134
+00:06:02.360 --> 00:06:07.560
+So all in all, implicit type instance will result in
+
+135
+00:06:07.560 --> 00:06:11.760
+the link expression of "~/data/FileA",
+
+136
+00:06:11.760 --> 00:06:14.520
+which we recognize as a file path.
+
+137
+00:06:14.520 --> 00:06:18.040
+With a single-line expression,
+
+138
+00:06:18.040 --> 00:06:21.040
+we have created our own hyperbutton syntax
+
+139
+00:06:21.040 --> 00:06:23.080
+that we can use in any Emacs buffer
+
+140
+00:06:23.080 --> 00:06:25.560
+to link to this custom set of data.
+
+141
+00:06:25.560 --> 00:06:30.960
+So let's evaluate the defil and use it.
+
+142
+00:06:30.960 --> 00:06:33.760
+I have prepared the files so that they already
+
+143
+00:06:33.760 --> 00:06:36.400
+contain some text and implicit links.
+
+144
+00:06:36.400 --> 00:06:43.760
+So from the presentation, we can go to FileA,
+
+145
+00:06:43.760 --> 00:06:48.720
+and from there to fileB.
+
+146
+00:06:48.720 --> 00:06:51.040
+Since the Hyperbole path expression
+
+147
+00:06:51.040 --> 00:06:53.640
+supports outline structures, we can,
+
+148
+00:06:53.640 --> 00:06:55.960
+as an extra bonus, reference directly
+
+149
+00:06:55.960 --> 00:06:57.560
+the headers in the files,
+
+150
+00:06:57.560 --> 00:07:00.160
+so we can, for example, link directly
+
+151
+00:07:00.160 --> 00:07:02.600
+to "More Notes" in FileB.
+
+152
+00:07:02.600 --> 00:07:10.720
+We have now created a simple info system.
+
+154
+00:07:10.720 --> 00:07:16.440
+Looking deeper at the link expression,
+
+155
+00:07:16.440 --> 00:07:19.840
+it can be of four different types:
+
+156
+00:07:19.840 --> 00:07:22.040
+A file path expression,
+
+157
+00:07:22.040 --> 00:07:23.520
+as we have already looked at;
+
+158
+00:07:23.520 --> 00:07:25.960
+a brace-delimited key series,
+
+159
+00:07:25.960 --> 00:07:27.960
+that is, a series of command keys
+
+160
+00:07:27.960 --> 00:07:29.480
+for performing some action,
+
+161
+00:07:29.480 --> 00:07:30.960
+much like a keyboard macro;
+
+162
+00:07:30.960 --> 00:07:36.240
+An URL; or a function that takes one argument,
+
+163
+00:07:36.240 --> 00:07:38.640
+which will be given the button text as input.
+
+164
+00:07:38.640 --> 00:07:42.880
+The URL link expression allows you
+
+165
+00:07:42.880 --> 00:07:44.480
+to link to web pages.
+
+166
+00:07:44.480 --> 00:07:46.560
+So if the data you want to link to
+
+167
+00:07:46.560 --> 00:07:48.640
+is accessible through the Web
+
+168
+00:07:48.640 --> 00:07:50.880
+and the URL can be constructed
+
+169
+00:07:50.880 --> 00:07:53.000
+from the button text in a meaningful way,
+
+170
+00:07:53.000 --> 00:07:54.520
+it is possible to do that.
+
+171
+00:07:54.520 --> 00:07:56.160
+Let's create the button type
+
+172
+00:07:56.160 --> 00:07:57.720
+that links to GNU software.
+
+173
+00:07:57.720 --> 00:08:01.088
+The URL to the GNU software catalog
+
+00:08:01.089 --> 00:08:04.680
+is www.gnu.org/software,
+
+174
+00:08:04.680 --> 00:08:07.440
+and with what we know about the field,
+
+175
+00:08:07.440 --> 00:08:09.640
+it is easy to create the button type for that.
+
+176
+00:08:09.640 --> 00:08:11.000
+It can look like this.
+
+177
+00:08:11.000 --> 00:08:16.200
+And here are two possible buttons
+
+178
+00:08:16.200 --> 00:08:19.320
+linking to Emacs and Hyperbole.
+
+179
+00:08:19.320 --> 00:08:24.200
+So let's again evaluate the defil and use it.
+
+180
+00:08:24.200 --> 00:08:28.120
+Please note that not all GNU software
+
+181
+00:08:28.120 --> 00:08:29.000
+is under that URL,
+
+182
+00:08:29.000 --> 00:08:31.000
+so this simple definition will not work
+
+183
+00:08:31.000 --> 00:08:32.200
+to link to everything.
+
+184
+00:08:32.200 --> 00:08:37.280
+To highlight the fact that the button action
+
+185
+00:08:37.280 --> 00:08:39.080
+does not have to be a link,
+
+186
+00:08:39.080 --> 00:08:40.600
+but can be any action,
+
+187
+00:08:40.600 --> 00:08:42.200
+let's look at a math example.
+
+188
+00:08:42.200 --> 00:08:44.800
+Here is the button type that does some math
+
+189
+00:08:44.800 --> 00:08:47.480
+and writes the result in the message area.
+
+190
+00:08:47.480 --> 00:08:57.160
+Let's evaluate and use it.
+
+191
+00:08:57.160 --> 00:08:59.760
+Before ending, I would like to mention
+
+192
+00:08:59.760 --> 00:09:00.760
+the defal macro.
+
+193
+00:09:00.760 --> 00:09:02.920
+It is similar to the defil macro,
+
+194
+00:09:02.920 --> 00:09:04.880
+but simpler, since it uses a form
+
+195
+00:09:04.880 --> 00:09:07.880
+of the implicit button type with no delimiters.
+
+196
+00:09:07.880 --> 00:09:14.800
+It is simply <TYPE LINK-EXPR>.
+
+197
+00:09:14.800 --> 00:09:17.920
+So the implicit button type contains the link type
+
+198
+00:09:17.920 --> 00:09:18.960
+in clear text.
+
+199
+00:09:18.960 --> 00:09:23.120
+Our recent FSF software button
+
+200
+00:09:23.120 --> 00:09:24.854
+would be created like this.
+
+00:09:24.855 --> 00:09:29.760
+And it would be instantiated in text like this.
+
+202
+00:09:29.760 --> 00:09:34.960
+I have shown how you,
+
+203
+00:09:34.960 --> 00:09:37.840
+with the help of the defil macro in Hyperbole,
+
+204
+00:09:37.840 --> 00:09:40.240
+quickly can create implicit buttons.
+
+205
+00:09:40.240 --> 00:09:41.480
+With those buttons, you can link
+
+206
+00:09:41.480 --> 00:09:43.160
+to your personal information
+
+207
+00:09:43.160 --> 00:09:44.160
+in the form it may have.
+
+208
+00:09:44.160 --> 00:09:47.200
+By the nature of the implicit buttons,
+
+209
+00:09:47.200 --> 00:09:49.880
+those can be used from any file in Emacs.
+
+210
+00:09:49.880 --> 00:09:52.640
+The button types can be
+
+211
+00:09:52.640 --> 00:09:54.640
+created to be used long term,
+
+212
+00:09:54.640 --> 00:09:57.680
+but even short term use within the session is possible,
+
+213
+00:09:57.680 --> 00:09:59.880
+since the creation is simple and quick.
+
+214
+00:09:59.880 --> 00:10:03.400
+Inspired by this, I hope you will find ways
+
+215
+00:10:03.400 --> 00:10:04.760
+to create implicit buttons
+
+216
+00:10:04.760 --> 00:10:07.360
+that will support you getting to your information.
+
+217
+00:10:07.360 --> 00:10:09.240
+For the simplest cases,
+
+218
+00:10:09.240 --> 00:10:11.400
+the field and the file macros might be enough.
+
+219
+00:10:11.400 --> 00:10:13.360
+For more complicated cases,
+
+220
+00:10:13.360 --> 00:10:15.760
+using a tailor-made function can be an option.
+
+221
+00:10:15.760 --> 00:10:19.480
+If you know Elisp, use the defib macro
+
+222
+00:10:19.480 --> 00:10:22.240
+which gives you full control over the button type.
+
+223
+00:10:22.240 --> 00:10:32.000
+Thank you.
diff --git a/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt
new file mode 100644
index 00000000..75b624a9
--- /dev/null
+++ b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt
@@ -0,0 +1,1691 @@
+WEBVTT
+
+00:00.000 --> 00:02.600
+the recording button here.
+
+00:02.600 --> 00:03.600
+OK.
+
+00:03.600 --> 00:05.180
+Thank you again for the great talk,
+
+00:05.180 --> 00:06.680
+even though I haven't been able to catch most of it
+
+00:06.680 --> 00:08.560
+because I've been running around behind the scenes.
+
+00:08.560 --> 00:11.360
+But very much interested in DBUS and Emacs.
+
+00:11.360 --> 00:13.240
+I'm very much looking forward to watching it
+
+00:13.240 --> 00:14.080
+after the conference.
+
+00:14.080 --> 00:18.360
+But for folks who were able to and did catch the talk,
+
+00:18.360 --> 00:21.680
+please, now it's time to send in your questions.
+
+00:21.680 --> 00:24.820
+You can either ask away on IRC or put them on the pad.
+
+00:24.820 --> 00:28.300
+And we'll also open up this PBB room in a little bit
+
+00:28.300 --> 00:31.960
+if you'd like to join here directly on asking questions.
+
+00:31.960 --> 00:34.520
+So, Ian, please take it away.
+
+00:34.520 --> 00:35.280
+Hey, thanks.
+
+00:35.280 --> 00:38.580
+Yeah, going to wait for some questions to come in.
+
+00:38.580 --> 00:41.320
+But there's a couple of points I wanted to make.
+
+00:41.320 --> 00:46.840
+So I'm going to share my screen here for a minute.
+
+00:46.840 --> 00:50.880
+If you're interested in exploring more about DBUS,
+
+00:50.880 --> 00:54.080
+there is a graphical client called dfeat.
+
+00:54.080 --> 00:56.200
+That's d-feat.
+
+00:56.200 --> 00:59.960
+I guess puns are strong when it comes to DBUS software.
+
+00:59.960 --> 01:03.400
+And this just gives you a graphical overview
+
+01:03.400 --> 01:06.160
+of what's going on with your bus.
+
+01:06.160 --> 01:09.920
+So in the case that I was looking at in Emacs,
+
+01:09.920 --> 01:11.600
+you can look.
+
+01:11.600 --> 01:13.280
+Here's the hostname1 service.
+
+01:13.280 --> 01:18.360
+And here's you can change the chassis of it or read.
+
+01:18.360 --> 01:20.240
+I'm on a desktop here.
+
+01:20.240 --> 01:23.940
+So I think this is a really great tool
+
+01:23.940 --> 01:30.720
+for just understanding what is available and what DBUS can do.
+
+01:30.720 --> 01:33.720
+I think I didn't do a great job of setting out a vision.
+
+01:33.720 --> 01:37.000
+So I want to try to reiterate that here.
+
+01:37.000 --> 01:41.320
+Ever since I started using X1 several years ago,
+
+01:41.320 --> 01:46.480
+and before that even, once I was learning about LISP machines,
+
+01:46.480 --> 01:48.920
+one of the things that I really want out of my computing
+
+01:48.920 --> 01:52.720
+experience is a full LISP environment,
+
+01:52.720 --> 01:54.400
+like a modern LISP machine.
+
+01:54.400 --> 01:59.440
+And I think Emacs and X1 are the closest thing to that
+
+01:59.440 --> 02:01.800
+that you can get on a modern machine.
+
+02:01.800 --> 02:03.760
+But if you're thinking about what
+
+02:03.760 --> 02:07.680
+are the gaps between that and a full blown desktop environment,
+
+02:07.680 --> 02:10.800
+there is many of them that make it inconvenient
+
+02:10.800 --> 02:12.760
+in a variety of different ways.
+
+02:12.760 --> 02:17.600
+And my vision is really to have an Emacs desktop environment.
+
+02:17.600 --> 02:21.080
+And I think DBUS is really key to making that work.
+
+02:21.080 --> 02:24.760
+And I would love, on the one to two year horizon,
+
+02:24.760 --> 02:29.080
+I would really like to see common system tasks be
+
+02:29.080 --> 02:32.680
+able to get done seamlessly from inside of Emacs.
+
+02:32.680 --> 02:34.640
+And what I mean by that is things
+
+02:34.640 --> 02:37.440
+like pairing with a Bluetooth device,
+
+02:37.440 --> 02:41.440
+connecting to a Wi-Fi network, rebooting your computer
+
+02:41.440 --> 02:44.440
+or putting it into suspend, or any of those things
+
+02:44.440 --> 02:47.800
+that you might think of doing in a full blown desktop
+
+02:47.800 --> 02:51.320
+environment, whether it's Mac OS, or Windows, or GNOME, or KDE,
+
+02:51.320 --> 02:53.920
+or whatever, you should be able to do all that from Emacs.
+
+02:53.920 --> 02:56.840
+You should be able to manage everything
+
+02:56.840 --> 02:59.200
+without having to leave that environment.
+
+02:59.200 --> 03:02.160
+Because I really prefer the Emacs environment.
+
+03:02.160 --> 03:05.520
+I would like to do all of that from inside Emacs.
+
+03:05.520 --> 03:07.380
+And when it comes to integrating with all
+
+03:07.380 --> 03:11.960
+those different things, DBUS is really key to making it work.
+
+03:11.960 --> 03:20.560
+But I do think that offering the ability of integrating Emacs
+
+03:20.560 --> 03:23.160
+into the desktop for people who don't
+
+03:23.160 --> 03:26.720
+want to go that route of having a full blown Emacs desktop
+
+03:26.720 --> 03:30.880
+environment, I think that's also a path to some really
+
+03:30.880 --> 03:35.200
+interesting feature opportunity that
+
+03:35.200 --> 03:39.760
+has been difficult to explore in Emacs in years past.
+
+03:39.760 --> 03:44.160
+So I really think it's just a great space to be exploring.
+
+03:44.160 --> 03:46.280
+And I'm really excited to see what kind of stuff
+
+03:46.280 --> 03:48.520
+I can build in there, and what things other people
+
+03:48.520 --> 03:49.600
+start building in there.
+
+03:53.400 --> 03:54.160
+Sounds great.
+
+03:54.160 --> 03:57.640
+Yeah, and I think DBUS is kind of, I guess,
+
+03:57.640 --> 04:00.680
+one of those essential key pieces of software
+
+04:00.680 --> 04:03.120
+on GNU Linux where, I mean, if it's working,
+
+04:03.120 --> 04:05.240
+and when it's working, it's pretty much,
+
+04:05.240 --> 04:06.800
+I mean, you don't even notice it.
+
+04:06.800 --> 04:07.760
+It's behind the scenes.
+
+04:07.760 --> 04:09.600
+Everything seems to be working hand in hand.
+
+04:09.600 --> 04:11.880
+So yeah, I remember, for example,
+
+04:11.880 --> 04:14.600
+when I first switched to using a custom window manager,
+
+04:14.600 --> 04:16.760
+you pretty much lose all of that sort
+
+04:16.760 --> 04:20.200
+of integration and togetherness right away
+
+04:20.200 --> 04:22.440
+if there is no DBUS.
+
+04:22.440 --> 04:24.560
+And yeah, a lot of beginners, like myself at the time
+
+04:24.560 --> 04:27.480
+at least, don't even know what they're missing out on.
+
+04:27.480 --> 04:33.200
+So kudos for taking this on and having this vision of essentially
+
+04:33.200 --> 04:35.840
+moving towards that direction of being able to use Emacs
+
+04:35.840 --> 04:38.840
+as a potentially fully featured desktop environment.
+
+04:38.840 --> 04:40.680
+I think that's awesome.
+
+04:40.680 --> 04:42.560
+Yeah, thank you.
+
+04:42.560 --> 04:44.880
+Looks like I have some questions in the pad,
+
+04:44.880 --> 04:47.160
+so I will cover some of those.
+
+04:47.160 --> 04:48.720
+No, it's not Web3.
+
+04:48.720 --> 04:49.320
+Not funny.
+
+04:52.440 --> 04:54.840
+I'm sorry, the question was, so is this a Web3 approach?
+
+04:54.840 --> 04:56.840
+No, it isn't.
+
+04:56.840 --> 04:58.160
+I have another question.
+
+04:58.160 --> 04:59.960
+This is such a great overview of DBUS.
+
+04:59.960 --> 05:01.800
+I haven't been paying attention to this space
+
+05:01.800 --> 05:05.120
+because it seems to be in flux 10 or 15 years ago.
+
+05:05.120 --> 05:07.040
+How long has DBUS been around, and what
+
+05:07.040 --> 05:09.160
+was in place before that?
+
+05:09.160 --> 05:11.960
+So I covered this real briefly in the beginning of the talk,
+
+05:11.960 --> 05:15.400
+but DBUS dates from 2002-ish.
+
+05:15.400 --> 05:21.760
+And I would say since 2010, 2012, that time frame,
+
+05:21.760 --> 05:26.080
+it has been pretty stable and has seen wide adoption
+
+05:26.080 --> 05:28.600
+in multiple desktop environments.
+
+05:28.600 --> 05:30.800
+Before DBUS, there wasn't anything like it.
+
+05:30.800 --> 05:33.120
+It didn't replace a similar feature.
+
+05:33.120 --> 05:35.320
+And if you wanted to do the sorts of things
+
+05:35.320 --> 05:40.160
+that DBUS does, you were pretty limited.
+
+05:40.160 --> 05:42.600
+Those of you who have been around for a while
+
+05:42.600 --> 05:45.600
+might remember that a lot of GUI software for Linux
+
+05:45.600 --> 05:49.840
+in the 90s was some variant of a shell,
+
+05:49.840 --> 05:53.720
+like a graphical shell program that just called out
+
+05:53.720 --> 05:57.160
+to an existing binary on the system.
+
+05:57.160 --> 05:59.200
+Like you might have a disk formatter,
+
+05:59.200 --> 06:01.320
+and it lets you has a dropdown for the file
+
+06:01.320 --> 06:03.400
+and lists your devices and whatever.
+
+06:03.400 --> 06:04.960
+But it was doing all the work.
+
+06:04.960 --> 06:06.200
+All it was was the interface.
+
+06:06.200 --> 06:09.480
+All the work was happening by delegating it to a program.
+
+06:09.480 --> 06:12.000
+And essentially, what that's doing
+
+06:12.000 --> 06:16.480
+is that's turning the text user interface, the command line
+
+06:16.480 --> 06:19.880
+user interface, into an API because you're using a program
+
+06:19.880 --> 06:22.680
+to talk to it, but it's not really meant for that.
+
+06:22.680 --> 06:27.400
+And there's a lot of details in that interface that
+
+06:27.400 --> 06:29.240
+are not stable.
+
+06:29.240 --> 06:33.480
+Like anyone who's used a Mac after using a Linux machine
+
+06:33.480 --> 06:37.240
+has probably been surprised that the find command didn't
+
+06:37.240 --> 06:38.960
+work how they expected.
+
+06:38.960 --> 06:40.480
+And there's a lot of that.
+
+06:40.480 --> 06:43.000
+In order to make that stuff really reliable,
+
+06:43.000 --> 06:47.600
+you end up having to build a lot of special cases into it,
+
+06:47.600 --> 06:49.680
+but you're doing it at the wrong layer.
+
+06:49.680 --> 06:51.440
+And what DBUS does is it really lets
+
+06:51.440 --> 06:55.320
+you have a separate architecture where the service is what
+
+06:55.320 --> 06:59.200
+encapsulates all of the differences between kernels,
+
+06:59.200 --> 07:02.280
+distributions, flavors of tooling,
+
+07:02.280 --> 07:05.440
+and just abstracts all of that and gives you a proper API
+
+07:05.440 --> 07:06.400
+that you can use.
+
+07:06.400 --> 07:07.860
+And I think that's great because that
+
+07:07.860 --> 07:12.600
+lets you build these high-level interactive components
+
+07:12.600 --> 07:15.320
+at an abstract level where you don't necessarily
+
+07:15.320 --> 07:17.280
+need to care about the implementation details.
+
+07:17.280 --> 07:19.480
+I think that's really great.
+
+07:19.480 --> 07:21.400
+So that's really what was happening there.
+
+07:21.400 --> 07:23.680
+And when it comes to two-way stuff,
+
+07:23.680 --> 07:26.480
+it was like a fancy version of Unix pipes.
+
+07:26.480 --> 07:29.760
+You would run your program, and maybe if you were lucky,
+
+07:29.760 --> 07:32.360
+it had some sort of machine-readable output
+
+07:32.360 --> 07:33.960
+switch you could turn on so that you
+
+07:33.960 --> 07:37.480
+could have a progress bar or something like that.
+
+07:37.480 --> 07:38.600
+That was the sort of thing.
+
+07:38.600 --> 07:40.720
+But there wasn't really anything exactly like DBUS.
+
+07:45.240 --> 07:46.480
+I have another question.
+
+07:46.480 --> 07:48.360
+Forgive me if this question is silly.
+
+07:48.360 --> 07:53.320
+Why is everything DBUS prefixed with org dot?
+
+07:53.320 --> 07:57.800
+Not everything is, but most things are.
+
+07:57.800 --> 08:00.800
+Those identifiers are reverse FQDN.
+
+08:00.800 --> 08:03.560
+So if you think about the Java namespaces,
+
+08:03.560 --> 08:05.960
+that's what they're ripping off there.
+
+08:05.960 --> 08:09.680
+And it's org because most of it is written by nonprofits.
+
+08:09.680 --> 08:12.320
+So in particular, Free Desktop is
+
+08:12.320 --> 08:15.040
+what it sponsors development of DBUS.
+
+08:15.040 --> 08:17.320
+And so there is an inordinate number
+
+08:17.320 --> 08:22.480
+of org dot Free Desktop dot whatever services on DBUS
+
+08:22.480 --> 08:28.480
+just because they build so many of them.
+
+08:28.480 --> 08:32.680
+In your investigations, do most OS desktop environment window
+
+08:32.680 --> 08:35.360
+manager interop well over DBUS?
+
+08:35.360 --> 08:38.160
+Which ones have proven more challenging, if any?
+
+08:40.960 --> 08:45.280
+I'm not sure I quite understand this question.
+
+08:45.280 --> 08:49.720
+DBUS is fairly abstract, and those graphical programs
+
+08:49.720 --> 08:53.360
+can choose to use it or not.
+
+08:53.360 --> 08:58.440
+But you're not interacting with the desktop environment
+
+08:58.440 --> 08:59.040
+too much.
+
+08:59.040 --> 09:01.200
+You're interacting with a service.
+
+09:01.200 --> 09:03.720
+So what you're doing is you're taking any program
+
+09:03.720 --> 09:06.520
+and you're breaking it into a client server model.
+
+09:06.520 --> 09:09.680
+The DBUS service does all of the work,
+
+09:09.680 --> 09:12.360
+and then there's a graphical environment on top of it.
+
+09:12.360 --> 09:14.640
+So they're communicating back and forth.
+
+09:14.640 --> 09:16.320
+And if you want to do those same things,
+
+09:16.320 --> 09:18.080
+you want to communicate with the service,
+
+09:18.080 --> 09:22.400
+you don't need to communicate with the actual GUI program
+
+09:22.400 --> 09:25.000
+unless you want to control the program.
+
+09:25.000 --> 09:27.240
+If you want to do the same thing the program is doing,
+
+09:27.240 --> 09:28.680
+you can use a DBUS service.
+
+09:28.680 --> 09:30.960
+I guess in the case of something like a word processor,
+
+09:30.960 --> 09:32.720
+you might want to have a DBUS API that
+
+09:32.720 --> 09:35.720
+lets you add a heading or something like that.
+
+09:35.720 --> 09:39.160
+That's not an area I've explored too much.
+
+09:39.160 --> 09:40.760
+So I'm not sure how that works.
+
+09:40.760 --> 09:42.760
+Work done.
+
+09:46.120 --> 09:49.080
+Regarding using XWIM as a desktop environment,
+
+09:49.080 --> 09:55.040
+does XWIM provide a session manager daemon?
+
+09:55.040 --> 09:57.200
+Whoever wrote that, if you could add some more context,
+
+09:57.200 --> 09:58.080
+I would appreciate it.
+
+09:58.080 --> 10:01.000
+I'm not sure I can answer that as it is written.
+
+10:04.120 --> 10:07.560
+No, I don't know.
+
+10:07.560 --> 10:08.720
+Next question.
+
+10:08.720 --> 10:11.600
+There is a lot of criticism against DBUS out there.
+
+10:11.600 --> 10:13.280
+Why do you think that might be?
+
+10:13.280 --> 10:15.200
+Well, it's because it's not very good.
+
+10:18.600 --> 10:21.960
+I mean, I love what it unlocks feature wise,
+
+10:21.960 --> 10:25.240
+but I do think it is not the best implementation
+
+10:25.240 --> 10:28.240
+for doing what it does.
+
+10:28.240 --> 10:31.640
+But when in Rome, you want to do those things,
+
+10:31.640 --> 10:32.760
+I want to do those things, I don't
+
+10:32.760 --> 10:34.480
+want to rewrite everything in the way
+
+10:34.480 --> 10:36.960
+I think it should have been to get it done because I'll never
+
+10:36.960 --> 10:37.760
+get it done.
+
+10:37.760 --> 10:39.880
+The whole point is you just shove it in a corner,
+
+10:39.880 --> 10:41.600
+you don't have to care about it, and you
+
+10:41.600 --> 10:43.440
+use high level bindings.
+
+10:43.440 --> 10:46.040
+I would say the specific criticisms I've seen
+
+10:46.040 --> 10:54.720
+are using XML is something that is not popular these days.
+
+10:54.720 --> 10:58.260
+And if I had to criticize a thing about it,
+
+10:58.260 --> 11:02.240
+I would say it doesn't have strong guidelines
+
+11:02.240 --> 11:03.680
+for how to make a good API.
+
+11:03.680 --> 11:06.120
+And so the quality of one service to another
+
+11:06.120 --> 11:09.120
+can be extremely variable.
+
+11:09.120 --> 11:12.360
+And different services have different ways
+
+11:12.360 --> 11:14.440
+of doing very similar tasks.
+
+11:14.440 --> 11:16.960
+So I would love to see, if anything, a little more
+
+11:16.960 --> 11:19.960
+uniformity in those APIs.
+
+11:19.960 --> 11:22.840
+I generally could care less that it's sending XML around
+
+11:22.840 --> 11:23.760
+or whatever.
+
+11:23.760 --> 11:30.920
+I think people who are offended that XML is being used
+
+11:30.920 --> 11:37.560
+don't have their hearts in the right place, basically.
+
+11:37.560 --> 11:45.320
+Which system services come to mind
+
+11:45.320 --> 11:47.000
+when thinking about applications,
+
+11:47.000 --> 11:49.760
+be it at the OS desktop environment, window manager
+
+11:49.760 --> 11:50.440
+level?
+
+11:50.440 --> 11:53.520
+So the stuff that I am interested in using this for
+
+11:53.520 --> 11:56.600
+is, like I was saying, connecting to wireless networks,
+
+11:56.600 --> 11:59.360
+pairing with Bluetooth devices, that kind of stuff.
+
+11:59.360 --> 12:04.520
+Things that don't have a streamlined way of accomplishing
+
+12:04.520 --> 12:07.960
+it without using D-Bus and some graphical client.
+
+12:07.960 --> 12:09.360
+And I would just like to not have
+
+12:09.360 --> 12:11.360
+to deal with the client end of it.
+
+12:11.360 --> 12:14.160
+I would like the UI to be in Emacs.
+
+12:19.720 --> 12:21.160
+When it comes to managing devices,
+
+12:21.160 --> 12:23.760
+how are D-Bus and U-Dev related?
+
+12:23.760 --> 12:25.760
+U-Dev is a D-Bus service.
+
+12:25.760 --> 12:30.520
+So it is a daemon that is running at some point
+
+12:30.520 --> 12:31.760
+in the background.
+
+12:31.760 --> 12:33.520
+If it's not running, D-Bus will start it
+
+12:33.520 --> 12:35.040
+when you send it a message.
+
+12:35.040 --> 12:42.120
+And I'm sorry, I'm mistaking U-Dev for U-Disks.
+
+12:42.120 --> 12:46.640
+U-Dev is unrelated to D-Bus.
+
+12:46.640 --> 12:53.400
+U-Dev is a way of dynamically populating your devices
+
+12:53.400 --> 12:56.520
+and having triggers that run when they are plugged in
+
+12:56.520 --> 12:57.600
+or unplugged.
+
+12:57.600 --> 12:59.840
+They're orthogonal.
+
+12:59.840 --> 13:02.120
+D-Bus and U-Dev don't interact.
+
+13:02.120 --> 13:08.520
+But D-Bus, I suspect some of the D-Bus services, like U-Disks,
+
+13:08.520 --> 13:11.720
+too, probably need to talk to U-Dev in order
+
+13:11.720 --> 13:13.080
+to do their job.
+
+13:13.080 --> 13:16.200
+But this is a service by service thing,
+
+13:16.200 --> 13:27.400
+rather than D-Bus is integrated with U-Dev sort of thing.
+
+13:27.400 --> 13:29.320
+Skip one of these.
+
+13:29.320 --> 13:32.200
+If you want to do the kinds of things that D-Bus does,
+
+13:32.200 --> 13:33.280
+you're limited.
+
+13:33.280 --> 13:35.880
+What is something D-Bus does that you couldn't do before?
+
+13:35.880 --> 13:37.520
+What is a really cool use of D-Bus
+
+13:37.520 --> 13:39.880
+in a modern desktop environment?
+
+13:39.880 --> 13:43.680
+So again, I think that the hardware and dynamic refresh
+
+13:43.680 --> 13:47.520
+is the use case that I keep coming back to.
+
+13:47.520 --> 13:50.760
+You walk somewhere where there's a new Wi-Fi network
+
+13:50.760 --> 13:52.960
+or there's an open Wi-Fi network to connect to,
+
+13:52.960 --> 13:55.240
+and maybe you get a notification somewhere.
+
+13:55.240 --> 13:57.360
+You plug in some hardware and it shows up
+
+13:57.360 --> 13:59.880
+in some list or some user interface
+
+13:59.880 --> 14:01.880
+to make it easy to use.
+
+14:01.880 --> 14:03.600
+You unplug it, it goes away.
+
+14:03.600 --> 14:05.960
+Those are the things that I think are really interesting
+
+14:05.960 --> 14:10.600
+because when you use a full blown desktop environment,
+
+14:10.600 --> 14:14.240
+you have come to expect that kind of interactivity
+
+14:14.240 --> 14:17.760
+and that kind of integration from the low level
+
+14:17.760 --> 14:21.760
+of the hardware up to whatever graphical layer you're using.
+
+14:21.760 --> 14:26.440
+And Emacs doesn't have that, and I want it to have that.
+
+14:26.440 --> 14:32.000
+So I think that's the thing that D-Bus really gives me.
+
+14:32.000 --> 14:34.240
+I would say in particular, you plug in hardware
+
+14:34.240 --> 14:37.240
+and it shows up in a list, that's pretty damn cool.
+
+14:37.240 --> 14:40.640
+That's a thing that I don't remember seeing done
+
+14:40.640 --> 14:43.400
+without D-Bus, or the way it was done
+
+14:43.400 --> 14:47.240
+was not portable and very complicated.
+
+14:47.240 --> 14:50.320
+D-Bus allows you to build those types of interfaces
+
+14:50.320 --> 14:53.280
+with a lot less work, and I think that's pretty great.
+
+14:58.640 --> 14:59.680
+Let's see.
+
+14:59.680 --> 15:02.040
+As an average GNU slash Linux user,
+
+15:02.040 --> 15:05.320
+I've used signals and methods before but not properties.
+
+15:05.320 --> 15:07.600
+You gave an example involving properties,
+
+15:07.600 --> 15:08.880
+but it kind of flew by.
+
+15:08.880 --> 15:11.640
+Can you explain briefly what clients and services
+
+15:11.640 --> 15:13.960
+can do with properties?
+
+15:13.960 --> 15:20.880
+Sure, so let me share this screen real quick.
+
+15:20.880 --> 15:26.000
+So just looking at hostname1 because this
+
+15:26.000 --> 15:28.480
+is a pretty simple and straightforward.
+
+15:28.480 --> 15:32.920
+Actually, let me look at U disks.
+
+15:32.920 --> 15:36.720
+So here's a whole mess of disks that are connected,
+
+15:36.720 --> 15:39.360
+and you can see here's a block device
+
+15:39.360 --> 15:41.960
+and it has all of these different properties to it.
+
+15:41.960 --> 15:46.600
+So hit system will say, is this a system device?
+
+15:46.600 --> 15:48.680
+Is this a fixed device, something
+
+15:48.680 --> 15:50.400
+that the system is in control of mounting,
+
+15:50.400 --> 15:53.000
+or is this something that a user might want to interact with?
+
+15:53.000 --> 15:55.160
+That property is how you're going to know
+
+15:55.160 --> 15:56.600
+which one of those things are, and I
+
+15:56.600 --> 15:58.880
+think that's really important when you're building a UI.
+
+15:58.880 --> 16:00.480
+Maybe you want to hide the system disks
+
+16:00.480 --> 16:04.280
+because you can see them, but there's not much you can do.
+
+16:04.280 --> 16:07.440
+I can't unmount my root device without turning the computer
+
+16:07.440 --> 16:07.960
+off.
+
+16:07.960 --> 16:11.760
+So the things you might want to do
+
+16:11.760 --> 16:15.800
+at a graphical interactive level are pretty limited,
+
+16:15.800 --> 16:19.440
+and that property lets you figure that out.
+
+16:19.440 --> 16:22.400
+Here's a crypto vacuum device that read only
+
+16:22.400 --> 16:24.240
+what drives it's associated with.
+
+16:24.240 --> 16:28.280
+They really bundle up just a lot of metadata about the thing,
+
+16:28.280 --> 16:31.400
+and they have a lot of links in between the different objects.
+
+16:31.400 --> 16:36.480
+So looking at one thing, you can connect it up
+
+16:36.480 --> 16:39.560
+to other parts of it at different levels.
+
+16:39.560 --> 16:43.440
+There's the notion of a drive, which contains a block device,
+
+16:43.440 --> 16:45.560
+which can have some partition tables, which
+
+16:45.560 --> 16:49.200
+can have file systems, or maybe an encryption container that
+
+16:49.200 --> 16:50.800
+has more of those things.
+
+16:50.800 --> 16:57.160
+So it's really a tree, but it's a strangely modeled tree
+
+16:57.160 --> 17:00.880
+where you have to walk the different leaves.
+
+17:00.880 --> 17:03.200
+It's not a single tree that encapsulates everything.
+
+17:03.200 --> 17:07.360
+It is a tree of links into other bits of the tree,
+
+17:07.360 --> 17:07.960
+essentially.
+
+17:07.960 --> 17:11.920
+So they're important to use for that sort of thing.
+
+17:16.320 --> 17:17.680
+The other thing that properties do
+
+17:17.680 --> 17:24.440
+is the signals let you know when a property has been updated.
+
+17:24.440 --> 17:28.640
+So if your hostname changes, you can
+
+17:28.640 --> 17:30.600
+get a signal that says, hey, my hostname changed,
+
+17:30.600 --> 17:32.840
+and maybe give a notice.
+
+17:32.840 --> 17:35.440
+Or if your active network connection changes
+
+17:35.440 --> 17:39.320
+or disconnects, a signal is going to be what tells you that,
+
+17:39.320 --> 17:43.200
+and the change in property is what will drive the signal.
+
+17:43.200 --> 17:44.840
+So it's kind of related to that.
+
+17:49.920 --> 17:53.120
+Naive question, me not knowing much about D-Bus.
+
+17:53.120 --> 17:56.400
+Is there such a thing as a D-Bus reflection browser,
+
+17:56.400 --> 17:58.280
+maybe Emacs-based, that lets you discover
+
+17:58.280 --> 18:02.160
+all the behavior different D-Bus app participants provide?
+
+18:02.160 --> 18:04.160
+And actually, wait, I think you're showing it.
+
+18:04.160 --> 18:06.320
+Defeat is that.
+
+18:06.320 --> 18:11.440
+Definitely a to-do item is to build an Emacs Lisp interface
+
+18:11.440 --> 18:16.520
+that is akin to Defeat, but I have not done that.
+
+18:16.520 --> 18:17.760
+So pull requests, welcome.
+
+18:17.760 --> 18:25.920
+Next question, D-Bus seems great for extensibility,
+
+18:25.920 --> 18:28.240
+but then Emacs has no such mechanism
+
+18:28.240 --> 18:30.680
+and is fantastically more extensible.
+
+18:30.680 --> 18:31.960
+Why do you think this is so?
+
+18:34.680 --> 18:37.840
+I don't think I agree with the premise.
+
+18:37.840 --> 18:42.400
+D-Bus is not really that extensible in the way
+
+18:42.400 --> 18:46.560
+that you might think in the same context as Emacs.
+
+18:46.560 --> 18:49.360
+You can add new functionality by adding a new service,
+
+18:49.360 --> 18:51.080
+but you can't add new functionality
+
+18:51.080 --> 18:54.000
+to an existing service without changing it.
+
+18:54.000 --> 18:57.120
+So I'm not sure I would say that's
+
+18:57.120 --> 19:01.080
+extensible in the same way, whereas Emacs is very malleable
+
+19:01.080 --> 19:06.120
+and you can change how it works even while it's running.
+
+19:06.120 --> 19:12.120
+So I think it's a different kind of extensibility, really.
+
+19:12.120 --> 19:15.840
+And Emacs can participate on D-Bus,
+
+19:15.840 --> 19:21.080
+so Emacs has a superset of what D-Bus can do, really.
+
+19:25.200 --> 19:27.120
+Do you have any other cool D-Bus ideas?
+
+19:27.120 --> 19:29.480
+I think I have dropped them all.
+
+19:29.480 --> 19:32.600
+Definitely remote org capture is a thing
+
+19:32.600 --> 19:34.840
+that I have wanted a couple of times
+
+19:34.840 --> 19:38.160
+because if I'm browsing around somewhere,
+
+19:38.160 --> 19:40.520
+I'd really love to have a simple flow that
+
+19:40.520 --> 19:44.720
+allows me to turn a web page into an org capture.
+
+19:44.720 --> 19:47.640
+And I think D-Bus could be a good way of accomplishing that,
+
+19:47.640 --> 19:49.920
+although I haven't messed with the browser integration
+
+19:49.920 --> 19:50.400
+end of it.
+
+19:54.640 --> 19:57.920
+Are there buses besides system and session?
+
+19:57.920 --> 19:59.920
+Is there anything more to a bus besides a way
+
+19:59.920 --> 20:03.920
+to group objects?
+
+20:03.920 --> 20:09.920
+There are always at least a system bus and a session bus.
+
+20:09.920 --> 20:12.760
+And actually, that's maybe not completely true.
+
+20:12.760 --> 20:15.640
+There's always at least a system bus, session bus
+
+20:15.640 --> 20:19.800
+as long as there is at least one logged in session.
+
+20:19.800 --> 20:22.720
+And there's really more than one session bus.
+
+20:22.720 --> 20:26.800
+There's one bus per session so that you're not leaking stuff
+
+20:26.800 --> 20:28.880
+across sessions on the same computer
+
+20:28.880 --> 20:32.960
+because despite this being 2022, Unix
+
+20:32.960 --> 20:34.840
+is still a multi-user operating system
+
+20:34.840 --> 20:38.280
+and you have to think about that stuff.
+
+20:38.280 --> 20:43.640
+There are an unlimited number of D-Bus buses.
+
+20:43.640 --> 20:47.040
+You can create ones that have limited sets of services.
+
+20:47.040 --> 20:51.760
+You can connect to ones over a TCP socket.
+
+20:51.760 --> 20:55.320
+There are always generally at least system and session.
+
+20:55.320 --> 20:58.360
+There can additionally be other ones.
+
+20:58.360 --> 21:02.800
+But it is uncommon to have any other bus.
+
+21:02.800 --> 21:06.080
+Generally, well-behaved D-Bus services
+
+21:06.080 --> 21:10.000
+will attach to one or the other of those two buses.
+
+21:10.000 --> 21:13.760
+And in fact, PulseAudio is, it has D-Bus support
+
+21:13.760 --> 21:16.440
+but it is not a good D-Bus citizen
+
+21:16.440 --> 21:18.960
+because it does not use the session bus.
+
+21:18.960 --> 21:22.000
+It has, it's very weird actually.
+
+21:22.000 --> 21:25.240
+It has a D-Bus plug-in that hooks into the session bus
+
+21:25.240 --> 21:28.640
+but all it has is a method that returns the path to the Unix
+
+21:28.640 --> 21:31.560
+socket of the real D-Bus which you then
+
+21:31.560 --> 21:34.640
+have to connect to separately which strikes me
+
+21:34.640 --> 21:37.840
+as not the best way of doing that.
+
+21:41.800 --> 21:43.680
+Cool.
+
+21:43.680 --> 21:46.840
+All right, I think that is all of the questions.
+
+21:50.000 --> 21:52.520
+Cool, I think we still have about like six and a half
+
+21:52.520 --> 21:55.160
+or seven more minutes of Q&A on the stream.
+
+21:55.160 --> 21:57.920
+So if there are any more questions, folks,
+
+21:57.920 --> 21:59.480
+please feel free to post them on the pad
+
+21:59.480 --> 22:03.120
+or come up here, join us on BBB.
+
+22:03.120 --> 22:06.240
+Yeah, we can hang out here for a little bit longer.
+
+22:06.240 --> 22:07.960
+The stream will move on at some point
+
+22:07.960 --> 22:10.960
+but Ian, of course, and anyone else who is interested
+
+22:10.960 --> 22:14.280
+is welcome to hang out if Ian is around.
+
+22:14.280 --> 22:15.560
+Yeah.
+
+22:15.560 --> 22:16.960
+I will be around for a bit.
+
+22:16.960 --> 22:20.280
+I am on IRC all the time but I'm not always
+
+22:20.280 --> 22:21.280
+paying attention to it.
+
+22:21.280 --> 22:23.080
+You're welcome to reach out to me there.
+
+22:26.680 --> 22:32.160
+This is with almost all of my Emacs packages and stuff.
+
+22:32.160 --> 22:36.400
+This is in my Emacs Weirdware project on Codeburg.
+
+22:36.400 --> 22:40.360
+So codeburg.org slash Emacs dash weirdware
+
+22:40.360 --> 22:45.200
+has everything that I demoed and some other wonderful goodies
+
+22:45.200 --> 22:49.040
+that maybe you already know about and maybe you don't.
+
+22:49.040 --> 22:52.280
+I saw one other question from the chat, which
+
+22:52.280 --> 22:56.720
+is what do you use this for?
+
+22:56.720 --> 23:01.760
+Well, I mean, the main thing I use it for
+
+23:01.760 --> 23:07.600
+is discomfort for managing external devices.
+
+23:07.600 --> 23:13.040
+But this has been a really great research project
+
+23:13.040 --> 23:20.000
+just to understand D-Bus better, see what it can offer,
+
+23:20.000 --> 23:26.240
+and write some interesting code because what I really like
+
+23:26.240 --> 23:31.480
+is writing code that unlocks new possibilities
+
+23:31.480 --> 23:33.680
+to where people can look at it and say,
+
+23:33.680 --> 23:35.200
+oh, that gives me a great idea.
+
+23:35.200 --> 23:36.680
+I want to do this with it.
+
+23:36.680 --> 23:41.560
+And I see D-Base and this talk as really just pushing
+
+23:41.560 --> 23:43.360
+mindshare on this stuff.
+
+23:43.360 --> 23:47.160
+And really, the best result of this talk
+
+23:47.160 --> 23:50.960
+is for people to come out of it and say, wow, that was awesome.
+
+23:50.960 --> 23:55.120
+I can't wait to build something with it and go build new stuff.
+
+23:55.120 --> 23:57.120
+And just kind of building those platforms
+
+23:57.120 --> 24:00.600
+that other people can use and find helpful
+
+24:00.600 --> 24:03.120
+in whatever their programming journey is.
+
+24:03.120 --> 24:05.040
+That's the thing that I really like.
+
+24:05.040 --> 24:06.040
+That means a lot to me.
+
+24:06.040 --> 24:09.000
+So I hope that someone watches this
+
+24:09.000 --> 24:32.360
+and comes away with a good idea and goes and hacks on it.
+
+24:32.360 --> 24:34.360
+Looks like there's one more question.
+
+24:34.360 --> 24:38.520
+I'm not sure if we have time.
+
+24:38.520 --> 24:44.160
+I'll follow up in the pad if we end up over time on that.
+
+24:44.160 --> 24:45.840
+Yeah, we still have a couple more minutes,
+
+24:45.840 --> 25:12.480
+so it should be good.
+
+25:12.480 --> 25:15.040
+OK, so the last question is, it looks
+
+25:15.040 --> 25:19.400
+like D-Bus is mostly useful for Emacs to do IPC.
+
+25:19.400 --> 25:20.880
+If I understand correctly, this is
+
+25:20.880 --> 25:24.440
+how SIGTEX works when working with LaTeX docs.
+
+25:24.440 --> 25:26.960
+How does it compare with other ways of doing IPC,
+
+25:26.960 --> 25:29.360
+for example, communicating over a socket with MPD?
+
+25:32.960 --> 25:36.000
+So the main way that it's different
+
+25:36.000 --> 25:40.320
+is that MPD has its own protocol that you
+
+25:40.320 --> 25:46.280
+have to build support for in whatever your client is.
+
+25:46.280 --> 25:49.800
+D-Bus gives you a single, uniform way
+
+25:49.800 --> 25:52.520
+of talking to any service.
+
+25:52.520 --> 25:55.720
+So instead of having to reinvent that socket code
+
+25:55.720 --> 25:59.080
+and write the protocol support for MPD or whatever else,
+
+25:59.080 --> 26:02.280
+where you're taking the concrete, what
+
+26:02.280 --> 26:04.280
+are the bytes over the wire, and building
+
+26:04.280 --> 26:07.840
+an abstract programming interface that wraps that
+
+26:07.840 --> 26:12.360
+and drives those things, D-Bus already provides all of that.
+
+26:12.360 --> 26:15.240
+So you can say, here's a description of everything
+
+26:15.240 --> 26:18.760
+that I already do, and you can code gen stuff
+
+26:18.760 --> 26:20.800
+to do all of it.
+
+26:20.800 --> 26:24.840
+So I think that's the main difference between them.
+
+26:24.840 --> 26:26.840
+But it is over a socket.
+
+26:26.840 --> 26:31.040
+It's over a Unix socket for local stuff, TCP for remote.
+
+26:31.040 --> 26:33.000
+It is very similar.
+
+26:33.000 --> 26:34.480
+The main difference is that it is
+
+26:34.480 --> 26:37.080
+a framework for multiple applications
+
+26:37.080 --> 26:39.960
+rather than an application-specific mechanism,
+
+26:39.960 --> 26:42.200
+which makes it very easy to reuse
+
+26:42.200 --> 26:43.880
+in a variety of different contexts.
+
+26:43.880 --> 26:46.520
+And I think that's been key to its popularity
+
+26:46.520 --> 26:49.240
+over the last 10 years or so is the fact
+
+26:49.240 --> 26:52.880
+that it provides just enough opinion about how stuff should
+
+26:52.880 --> 26:56.400
+work that you don't have to think too hard about what
+
+26:56.400 --> 26:57.600
+should the protocol be.
+
+26:57.600 --> 26:58.640
+Should it be binary?
+
+26:58.640 --> 26:59.560
+Should it be text?
+
+26:59.560 --> 27:01.520
+Should it be S expressions?
+
+27:01.520 --> 27:02.640
+Should it be JSON?
+
+27:02.640 --> 27:05.080
+It's already done for you, and you can just think about,
+
+27:05.080 --> 27:06.880
+how do I connect it up?
+
+27:06.880 --> 27:08.840
+And I think that provides a lot of value.
+
+27:12.280 --> 27:14.440
+Yeah, and I can second that.
+
+27:14.440 --> 27:16.520
+It's been adopted by all sorts of different software
+
+27:16.520 --> 27:19.040
+projects, one of which I worked on.
+
+27:19.040 --> 27:21.560
+Jammy, people might know, GNU package
+
+27:21.560 --> 27:23.760
+for basically universal communication.
+
+27:23.760 --> 27:27.280
+It's basically a text messaging and also audio video calling
+
+27:27.280 --> 27:28.680
+and conferencing application.
+
+27:28.680 --> 27:31.400
+And it's Daemon, which runs in the background.
+
+27:31.400 --> 27:34.800
+It also supports D-Bus, so you can do all sorts of things,
+
+27:34.800 --> 27:38.280
+write little Python scripts or whatever,
+
+27:38.280 --> 27:40.480
+talk with it through D-Bus, give it commands
+
+27:40.480 --> 27:43.560
+to take calls from a particular point
+
+27:43.560 --> 27:46.920
+or just hang up calls or just do all sorts of things
+
+27:46.920 --> 27:48.080
+over D-Bus.
+
+27:48.080 --> 27:51.640
+And it is all, like you said, sort of application agnostic.
+
+27:51.640 --> 27:53.920
+It's not specific to, oh, how would I
+
+27:53.920 --> 27:58.520
+do this in a different way for each individual application?
+
+27:58.520 --> 27:59.200
+Yeah, exactly.
+
+27:59.200 --> 28:02.080
+It's the de facto way of doing that sort of stuff
+
+28:02.080 --> 28:04.680
+on Linux machines these days.
+
+28:04.680 --> 28:09.920
+And you can look back to some of the other message passing
+
+28:09.920 --> 28:13.920
+stuff in Windows and see it's drawn some inspiration
+
+28:13.920 --> 28:18.480
+from a variety of different places and different ways
+
+28:18.480 --> 28:21.560
+of doing that kind of interactivity.
+
+28:21.560 --> 28:24.080
+But it is, I mean, I don't think there was ever
+
+28:24.080 --> 28:26.240
+really a serious competitor to it,
+
+28:26.240 --> 28:28.080
+but it is the de facto standard if you
+
+28:28.080 --> 28:31.960
+want to do any kind of graphical program that
+
+28:31.960 --> 28:36.960
+manipulates your system or a batch program that
+
+28:36.960 --> 28:41.120
+drives an otherwise purely interactive graphical program.
+
+28:41.120 --> 28:42.720
+That's the tool.
+
+28:42.720 --> 28:47.880
+And there is not really any competitive landscape or reason
+
+28:47.880 --> 28:50.720
+to go reinventing it at this time.
+
+28:50.720 --> 28:51.480
+Sounds good.
+
+28:51.480 --> 28:52.760
+And I think that's all the time that we
+
+28:52.760 --> 28:53.720
+have on the live stream.
+
+28:53.720 --> 28:55.840
+Folks, you are welcome to stick around on IRC
+
+28:55.840 --> 28:58.160
+or come here on BBB and continue talking to Ian.
+
+28:58.160 --> 28:59.560
+Thank you, Ian.
+
+28:59.560 --> 29:00.080
+Wonderful.
+
+29:00.080 --> 29:01.240
+Thank you so much.
+
+29:01.240 --> 29:02.240
+Cheers.
+
+29:11.560 --> 29:12.040
+All right.
+
+29:12.040 --> 29:13.880
+I think the stream has moved on.
+
+29:13.880 --> 29:15.960
+Yeah, you're welcome to stay here, Ian, if you like,
+
+29:15.960 --> 29:18.080
+or just continue catching up with folks in IRC.
+
+29:20.840 --> 29:21.320
+Great.
+
+29:21.320 --> 29:22.960
+I will hang out here for a little bit
+
+29:22.960 --> 29:28.360
+in case someone wants to jump in and just write
+
+29:28.360 --> 29:30.560
+some stuff in the pad.
+
+29:30.560 --> 29:31.360
+Sounds good.
+
+29:31.360 --> 29:31.880
+Thank you.
+
+29:31.880 --> 29:34.680
+And I do see people are still writing or posting on the pad,
+
+29:34.680 --> 29:35.600
+so that's awesome.
+
+29:35.600 --> 29:36.720
+Yeah, sure thing.
+
+29:36.720 --> 29:37.240
+Awesome.
+
+29:37.240 --> 29:38.120
+Thank you so much.
+
+29:38.120 --> 29:38.600
+All right.
+
+29:38.600 --> 29:38.960
+Cheers.
+
+29:38.960 --> 29:39.480
+Welcome.
+
+29:39.480 --> 29:41.480
+And yeah, see you around on IRC.
+
+29:41.480 --> 29:42.880
+All right.
+
+29:42.880 --> 30:11.440
+All right.
+
diff --git a/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt
new file mode 100644
index 00000000..cc47a738
--- /dev/null
+++ b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt
@@ -0,0 +1,55 @@
+WEBVTT
+
+00:00:00.000 --> 00:01:07.879
+What is D-Bus?
+
+00:01:07.880 --> 00:01:45.359
+Why D-Bus?
+
+00:01:45.360 --> 00:02:55.359
+The D-Bus Model
+
+00:02:55.360 --> 00:03:19.999
+Well-known Busses
+
+00:03:20.000 --> 00:04:06.239
+Common interfaces
+
+00:04:06.240 --> 00:05:09.319
+Emacs Native D-Bus
+
+00:05:09.320 --> 00:05:23.879
+Debase
+
+00:05:23.880 --> 00:06:13.439
+Debase: Objects
+
+00:06:13.440 --> 00:06:51.079
+Debase: Retarget objects
+
+00:06:51.080 --> 00:07:12.479
+Debase: Object binding
+
+00:07:12.480 --> 00:07:29.399
+Debase: Raw binding
+
+00:07:29.400 --> 00:08:14.199
+Debase: Codegen
+
+00:08:14.200 --> 00:09:08.679
+Debase: Codegen example
+
+00:09:08.680 --> 00:09:44.479
+Debase: ObjectManager
+
+00:09:44.480 --> 00:11:01.479
+Demo: Discomfort
+
+00:11:01.480 --> 00:13:16.279
+Demo: Remote eval
+
+00:13:16.280 --> 00:14:11.879
+Demo: Remote Org capture
+
+00:14:11.880 --> 00:15:07.320
+Future directions
diff --git a/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt
new file mode 100644
index 00000000..c824d2db
--- /dev/null
+++ b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt
@@ -0,0 +1,1126 @@
+WEBVTT captioned by sachac
+
+NOTE What is D-Bus?
+
+00:00:00.000 --> 00:00:04.879
+Welcome to my EmacsConf 2022 talk, The Wheels on D-Bus.
+
+00:00:04.880 --> 00:00:07.439
+In this talk, we'll cover what D-Bus is,
+
+00:00:07.440 --> 00:00:10.759
+why you might want to use it, and how to use it with Emacs.
+
+00:00:10.760 --> 00:00:13.679
+D-Bus is fundamentally based on passing messages
+
+00:00:13.680 --> 00:00:16.999
+in between processes, using the bus as a mediator.
+
+00:00:17.000 --> 00:00:20.599
+On top of this is built an RPC system with method invocation
+
+00:00:20.600 --> 00:00:22.799
+that has argument lists and return values,
+
+00:00:22.800 --> 00:00:25.479
+like you might find in any programming language.
+
+00:00:25.480 --> 00:00:27.839
+These are commonly used for verb-type actions
+
+00:00:27.840 --> 00:00:29.999
+like "restart my computer."
+
+00:00:30.000 --> 00:00:32.639
+You can also associate a collection of attributes
+
+00:00:32.640 --> 00:00:35.839
+with objects on the bus, and these are called properties.
+
+00:00:35.840 --> 00:00:39.839
+The properties can be read-only, write-only, or read-write.
+
+00:00:39.840 --> 00:00:43.159
+Signals are a way of notifying participants on the bus
+
+00:00:43.160 --> 00:00:45.999
+of updated state, and are the basis
+
+00:00:46.000 --> 00:00:47.799
+for building dynamic user interfaces
+
+00:00:47.800 --> 00:00:50.479
+that react to changes in the system.
+
+00:00:50.480 --> 00:00:52.759
+It has a static and strong type system,
+
+00:00:52.760 --> 00:00:55.359
+so if you send a message with the wrong type signature,
+
+00:00:55.360 --> 00:00:57.839
+it simply gets rejected instead of going through
+
+00:00:57.840 --> 00:00:59.599
+to the remote service.
+
+00:00:59.600 --> 00:01:02.319
+It also manages service life cycles,
+
+00:01:02.320 --> 00:01:04.399
+so you're not running services at all times.
+
+00:01:04.400 --> 00:01:07.879
+They can be started and stopped by D-Bus on demand.
+
+NOTE Why D-Bus?
+
+00:01:07.880 --> 00:01:10.519
+D-Bus has two major use cases.
+
+00:01:10.520 --> 00:01:13.359
+The first is acting as a lower-level substrate
+
+00:01:13.360 --> 00:01:14.679
+for higher-level programs,
+
+00:01:14.680 --> 00:01:16.919
+like a graphical desktop environment.
+
+00:01:16.920 --> 00:01:19.599
+For example, if you want to manage your network connectivity
+
+00:01:19.600 --> 00:01:21.239
+from your graphical environment,
+
+00:01:21.240 --> 00:01:23.919
+instead of having to build all of that from the ground up,
+
+00:01:23.920 --> 00:01:26.239
+you can rely on the D-Bus service to do that
+
+00:01:26.240 --> 00:01:28.679
+and only build the graphical component of it.
+
+00:01:28.680 --> 00:01:31.319
+This gives you consistency between desktop environments
+
+00:01:31.320 --> 00:01:33.799
+and reduces code duplication.
+
+00:01:33.800 --> 00:01:37.319
+Another application is automating desktop programs.
+
+00:01:37.320 --> 00:01:39.279
+If your program offers a D-Bus service,
+
+00:01:39.280 --> 00:01:40.959
+then it can be remote-controlled,
+
+00:01:40.960 --> 00:01:42.759
+and if all of your programs offer D-Bus,
+
+00:01:42.760 --> 00:01:45.359
+you can control your entire desktop.
+
+NOTE The D-Bus Model
+
+00:01:45.360 --> 00:01:48.559
+Let's look at the abstractions that D-Bus provides.
+
+00:01:48.560 --> 00:01:51.239
+The top level object is called a bus,
+
+00:01:51.240 --> 00:01:52.359
+and it's like a partition
+
+00:01:52.360 --> 00:01:54.919
+that messages get exchanged inside of.
+
+00:01:54.920 --> 00:01:57.279
+Messages don't cross buses.
+
+00:01:57.280 --> 00:01:59.559
+Inside of a bus are services.
+
+00:01:59.560 --> 00:02:03.159
+Services are normally identified in reverse FQDN order,
+
+00:02:03.160 --> 00:02:06.159
+so org.foobar.FooService.
+
+00:02:06.160 --> 00:02:08.599
+Each service provides some set of features
+
+00:02:08.600 --> 00:02:11.759
+related to a particular area of functionality.
+
+00:02:11.760 --> 00:02:14.439
+Inside of each service are objects.
+
+00:02:14.440 --> 00:02:16.599
+Objects use a path notation,
+
+00:02:16.600 --> 00:02:19.759
+and usually follow the same reverse FQDN format
+
+00:02:19.760 --> 00:02:21.959
+as the service identifier.
+
+00:02:21.960 --> 00:02:24.879
+Each object has one or more interfaces.
+
+00:02:24.880 --> 00:02:27.279
+An interface is like a facet that you can use
+
+00:02:27.280 --> 00:02:29.479
+to interact with an object,
+
+00:02:29.480 --> 00:02:32.239
+and inside of the interface are properties, methods,
+
+00:02:32.240 --> 00:02:33.999
+and signals, which we covered before.
+
+00:02:34.000 --> 00:02:37.039
+Properties are attributes that can be read or written.
+
+00:02:37.040 --> 00:02:40.239
+Methods are verbs that you can call to invoke an action,
+
+00:02:40.240 --> 00:02:43.319
+and a signal is something that's used to move state
+
+00:02:43.320 --> 00:02:47.239
+in between a service and another participant on the bus.
+
+00:02:47.240 --> 00:02:49.599
+There can be any number of interfaces on an object,
+
+00:02:49.600 --> 00:02:51.479
+any number of objects in a service,
+
+00:02:51.480 --> 00:02:53.439
+and any number of services on a bus,
+
+00:02:53.440 --> 00:02:55.359
+and any number of buses on a system.
+
+NOTE Well-known Busses
+
+00:02:55.360 --> 00:03:00.039
+There are two well-known busses,
+
+00:03:00.040 --> 00:03:02.359
+and these roughly map to those two use cases
+
+00:03:02.360 --> 00:03:03.639
+I mentioned before.
+
+00:03:03.640 --> 00:03:06.479
+The system bus is for interfacing with hardware
+
+00:03:06.480 --> 00:03:08.439
+and operating-system-level concerns
+
+00:03:08.440 --> 00:03:11.679
+like disks, networks, and so forth.
+
+00:03:11.680 --> 00:03:14.319
+The session bus is tied to a user login,
+
+00:03:14.320 --> 00:03:19.999
+and is more in the desktop automation use case.
+
+NOTE Common interfaces
+
+00:03:20.000 --> 00:03:21.919
+There are some common interfaces you'll find
+
+00:03:21.920 --> 00:03:23.959
+if you go exploring D-Bus.
+
+00:03:23.960 --> 00:03:25.999
+The Introspectable interface is the basis
+
+00:03:26.000 --> 00:03:27.919
+of a lot of the reflection features.
+
+00:03:27.920 --> 00:03:30.119
+It has a single method called introspect
+
+00:03:30.120 --> 00:03:32.239
+that returns the XML interface description
+
+00:03:32.240 --> 00:03:33.399
+of whatever you call it on.
+
+00:03:33.400 --> 00:03:36.559
+Peer is used for lower level connectivity,
+
+00:03:36.560 --> 00:03:39.679
+for example, pinging a service to see if it's running.
+
+00:03:39.680 --> 00:03:41.759
+And the Properties interface is the basis
+
+00:03:41.760 --> 00:03:43.119
+of the read-write properties,
+
+00:03:43.120 --> 00:03:45.799
+which are secretly method calls under the cover.
+
+00:03:45.800 --> 00:03:48.519
+Just about every object you interact with on D-Bus
+
+00:03:48.520 --> 00:03:51.399
+will support all three of these interfaces.
+
+00:03:51.400 --> 00:03:54.759
+Additionally, ObjectManager is used for services
+
+00:03:54.760 --> 00:03:56.759
+that manage collections of objects.
+
+00:03:56.760 --> 00:03:59.839
+For example, the disk service has an object
+
+00:03:59.840 --> 00:04:01.279
+for each disk that's attached,
+
+00:04:01.280 --> 00:04:02.799
+and the object manager allows you
+
+00:04:02.800 --> 00:04:06.239
+to enumerate all of those.
+
+NOTE Emacs Native D-Bus
+
+00:04:06.240 --> 00:04:10.359
+Emacs supports D-Bus natively since version 23.1.
+
+00:04:10.360 --> 00:04:12.119
+It's a combination of native bindings
+
+00:04:12.120 --> 00:04:14.639
+with a C library and dbus.el.
+
+00:04:14.640 --> 00:04:17.559
+While there are some ports of D-Bus
+
+00:04:17.560 --> 00:04:19.479
+to non-Linux operating systems,
+
+00:04:19.480 --> 00:04:22.039
+it's probably only available on Linux
+
+00:04:22.040 --> 00:04:24.439
+and almost certainly only usable on Linux.
+
+00:04:24.440 --> 00:04:28.919
+If you want to interact with D-Bus from Emacs,
+
+00:04:28.920 --> 00:04:30.079
+it's fairly straightforward.
+
+00:04:30.080 --> 00:04:33.199
+There's a collection of functions like dbus-get-property
+
+00:04:33.200 --> 00:04:35.039
+or dbus-call-method, et cetera,
+
+00:04:35.040 --> 00:04:37.639
+and they almost all take this same set
+
+00:04:37.640 --> 00:04:39.319
+of four arguments at the beginning:
+
+00:04:39.320 --> 00:04:42.119
+bus, service, path, and interface.
+
+00:04:42.120 --> 00:04:45.439
+In this case, it takes a single additional property,
+
+00:04:45.440 --> 00:04:46.599
+which is the one to read.
+
+00:04:46.600 --> 00:04:49.679
+And what we're calling is the hostname1 service,
+
+00:04:49.680 --> 00:04:51.519
+which gives you just a little bit of information
+
+00:04:51.520 --> 00:04:54.759
+about the system, like its hostname or its chassis.
+
+00:04:54.760 --> 00:04:56.199
+And in this case, you can see I'm running
+
+00:04:56.200 --> 00:04:57.719
+this presentation off my laptop.
+
+00:04:57.720 --> 00:05:00.959
+The problem with this and what I don't like about it
+
+00:05:00.960 --> 00:05:04.599
+is that all of these identifiers are very verbose
+
+00:05:04.600 --> 00:05:05.719
+and very repetitive.
+
+00:05:05.720 --> 00:05:07.679
+And if you end up calling these a lot,
+
+00:05:07.680 --> 00:05:09.319
+it gets old really quickly.
+
+NOTE Debase
+
+00:05:09.320 --> 00:05:12.999
+So I wrote a wrapper called Debase,
+
+00:05:13.000 --> 00:05:15.839
+which is convenience on top of the built-in functions.
+
+00:05:15.840 --> 00:05:18.839
+Most of the stock functions have Debase versions
+
+00:05:18.840 --> 00:05:21.519
+just by replacing "dbus" with "debase".
+
+00:05:21.520 --> 00:05:23.879
+And let's look how that works.
+
+NOTE Debase: Objects
+
+00:05:23.880 --> 00:05:27.999
+The fundamental idea of Debase is that you can bind together
+
+00:05:28.000 --> 00:05:30.319
+all of those arguments into a single object
+
+00:05:30.320 --> 00:05:31.559
+that represents the endpoint.
+
+00:05:31.560 --> 00:05:35.599
+This is an EIEIO class, and it takes keyword arguments,
+
+00:05:35.600 --> 00:05:36.879
+so there's never any chance
+
+00:05:36.880 --> 00:05:38.559
+of mixing up which thing is what.
+
+00:05:38.560 --> 00:05:41.479
+So this sets the endpoint to that object,
+
+00:05:41.480 --> 00:05:43.119
+calls debase-get-property on it,
+
+00:05:43.120 --> 00:05:45.039
+and you can see it works exactly the same.
+
+00:05:45.040 --> 00:05:47.359
+The thing that's really nice about this, though,
+
+00:05:47.360 --> 00:05:50.199
+is it knows that so many of these arguments
+
+00:05:50.200 --> 00:05:52.919
+are very similar that it can compute most of them
+
+00:05:52.920 --> 00:05:54.279
+if you don't provide them all.
+
+00:05:54.280 --> 00:05:57.159
+So if you just say service, it will assume
+
+00:05:57.160 --> 00:05:59.159
+that you want the same object that matches
+
+00:05:59.160 --> 00:06:00.879
+and the same interface that matches,
+
+00:06:00.880 --> 00:06:02.319
+and it works just the same.
+
+00:06:02.320 --> 00:06:04.879
+I find this very, very convenient.
+
+00:06:04.880 --> 00:06:07.239
+You can also reuse the object
+
+00:06:07.240 --> 00:06:09.159
+instead of having to repeat every argument
+
+00:06:09.160 --> 00:06:10.399
+with every function call,
+
+00:06:10.400 --> 00:06:13.439
+which is a really great improvement in ergonomics.
+
+NOTE Debase: Retarget objects
+
+00:06:13.440 --> 00:06:18.119
+Because so many objects have multiple interfaces,
+
+00:06:18.120 --> 00:06:20.319
+you often find yourself needing to look
+
+00:06:20.320 --> 00:06:22.479
+at a different aspect of that object.
+
+00:06:22.480 --> 00:06:26.599
+This is supported with the built-in EIEIO clone method,
+
+00:06:26.600 --> 00:06:28.279
+which takes an object
+
+00:06:28.280 --> 00:06:30.439
+and a set of keyword arguments to replace.
+
+00:06:30.440 --> 00:06:32.599
+So in this case, we can see we're calling
+
+00:06:32.600 --> 00:06:33.479
+the Properties method,
+
+00:06:33.480 --> 00:06:35.799
+but everything else on that endpoint is the same.
+
+00:06:35.800 --> 00:06:38.079
+And then we're gonna call the method GetAll
+
+00:06:38.080 --> 00:06:39.359
+on that Properties interface,
+
+00:06:39.360 --> 00:06:41.119
+and it's going to return all the properties
+
+00:06:41.120 --> 00:06:43.919
+of the org.freedesktop.hostname1 interface
+
+00:06:43.920 --> 00:06:45.199
+inside of that object.
+
+00:06:45.200 --> 00:06:48.199
+And if we run that, we can see there's the hostname
+
+00:06:48.200 --> 00:06:50.159
+and some other information about the laptop
+
+00:06:50.160 --> 00:06:51.079
+that I'm running this on.
+
+NOTE Debase: Object binding
+
+00:06:51.080 --> 00:06:54.399
+Debase also supports object binding.
+
+00:06:54.400 --> 00:06:58.559
+This creates a lexical context in which the Debase object
+
+00:06:58.560 --> 00:07:01.119
+is the implicit target of any D-Bus function.
+
+00:07:01.120 --> 00:07:03.279
+This is really convenient if you need
+
+00:07:03.280 --> 00:07:06.479
+to fetch multiple properties or otherwise interact
+
+00:07:06.480 --> 00:07:09.319
+with the same endpoint in multiple different ways.
+
+00:07:09.320 --> 00:07:11.359
+And you can see I'm still on a laptop
+
+00:07:11.360 --> 00:07:12.479
+and it's still named meson.
+
+NOTE Debase: Raw binding
+
+00:07:12.480 --> 00:07:16.319
+You can also, if you don't want to use the object,
+
+00:07:16.320 --> 00:07:18.239
+you can provide the raw argument list.
+
+00:07:18.240 --> 00:07:20.919
+Under the covers, this is basically an flet
+
+00:07:20.920 --> 00:07:23.279
+where you're currying all of these functions
+
+00:07:23.280 --> 00:07:25.439
+so they start with those argument lists.
+
+00:07:25.440 --> 00:07:27.799
+And you can see I'm running on a Linux machine,
+
+00:07:27.800 --> 00:07:29.399
+which should not be surprising.
+
+NOTE Debase: Codegen
+
+00:07:29.400 --> 00:07:34.079
+Debase also has an experimental code generation feature.
+
+00:07:34.080 --> 00:07:38.359
+It outputs EIEIO code with one class per D-Bus interface.
+
+00:07:38.360 --> 00:07:41.079
+This includes accessors for all of its properties
+
+00:07:41.080 --> 00:07:44.159
+with an in-process cache, so if you read one property,
+
+00:07:44.160 --> 00:07:46.399
+you don't have to go back to the bus to read it again.
+
+00:07:46.400 --> 00:07:50.119
+It also outputs generic functions and method implementations
+
+00:07:50.120 --> 00:07:52.199
+for the D-Bus interface methods.
+
+00:07:52.200 --> 00:07:54.279
+It includes name-mangling options,
+
+00:07:54.280 --> 00:07:56.879
+so you can control how everything is named.
+
+00:07:56.880 --> 00:07:58.639
+And you can generate the code either
+
+00:07:58.640 --> 00:08:00.279
+via introspecting a live system
+
+00:08:00.280 --> 00:08:02.639
+or providing an XML interface description,
+
+00:08:02.640 --> 00:08:04.279
+which is handy if you want to use it
+
+00:08:04.280 --> 00:08:05.919
+as part of a non-interactive build.
+
+00:08:05.920 --> 00:08:08.159
+I think this has a lot of promise,
+
+00:08:08.160 --> 00:08:09.679
+but it doesn't feel quite right yet,
+
+00:08:09.680 --> 00:08:14.199
+so any feedback or contributions are very welcome.
+
+NOTE Debase: Codegen example
+
+00:08:14.200 --> 00:08:16.919
+Let's generate some Elisp code
+
+00:08:16.920 --> 00:08:19.639
+for that hostname1 service we were interacting with before.
+
+00:08:19.640 --> 00:08:23.119
+debase-gen-class is the generation class,
+
+00:08:23.120 --> 00:08:26.079
+and it says to create a class that matches this interface,
+
+00:08:26.080 --> 00:08:28.999
+named "hostname1", and then the rest of these arguments
+
+00:08:29.000 --> 00:08:30.999
+are the same ones to target the endpoint,
+
+00:08:31.000 --> 00:08:32.919
+just like with debase-object,
+
+00:08:32.920 --> 00:08:34.759
+because it extends debase-object.
+
+00:08:34.760 --> 00:08:37.679
+debase-gen-code is a generic function
+
+00:08:37.680 --> 00:08:40.119
+that takes any debase-gen class.
+
+00:08:40.120 --> 00:08:42.279
+There are different classes for functions,
+
+00:08:42.280 --> 00:08:43.359
+properties, et cetera,
+
+00:08:43.360 --> 00:08:45.479
+and it creates all of the code for it.
+
+00:08:45.480 --> 00:08:48.279
+If we evaluate it, we can see the results
+
+00:08:48.280 --> 00:08:49.959
+look about like we would expect:
+
+00:08:49.960 --> 00:08:52.159
+creates a defclass named "hostname1",
+
+00:08:52.160 --> 00:08:53.879
+which extends debase-object,
+
+00:08:53.880 --> 00:08:56.639
+has all of the slots and accessors defined,
+
+00:08:56.640 --> 00:08:59.319
+and then methods that define everything
+
+00:08:59.320 --> 00:09:01.839
+that you might want to do with it, including documentation.
+
+00:09:01.840 --> 00:09:04.759
+This is based on introspecting a running system,
+
+00:09:04.760 --> 00:09:05.479
+but as I mentioned,
+
+00:09:05.480 --> 00:09:08.039
+you can provide an XML interface description instead,
+
+00:09:08.040 --> 00:09:08.679
+if you like.
+
+NOTE Debase: ObjectManager
+
+00:09:08.680 --> 00:09:12.279
+Debase also comes with "debase-objectmanager",
+
+00:09:12.280 --> 00:09:15.399
+which is convenience for the D-Bus ObjectManager interface.
+
+00:09:15.400 --> 00:09:17.999
+This is used in a lot of places in D-Bus,
+
+00:09:18.000 --> 00:09:20.279
+where an object manages other objects.
+
+00:09:20.280 --> 00:09:22.719
+For example, the NetworkManager object
+
+00:09:22.720 --> 00:09:25.159
+manages network hardware objects,
+
+00:09:25.160 --> 00:09:26.879
+and using the ObjectManager interface,
+
+00:09:26.880 --> 00:09:28.879
+you can enumerate all of the network hardware,
+
+00:09:28.880 --> 00:09:31.039
+and by subscribing to the signals,
+
+00:09:31.040 --> 00:09:32.999
+you can be notified when they change.
+
+00:09:33.000 --> 00:09:35.999
+"debase-objectmanager" keeps a local cache,
+
+00:09:36.000 --> 00:09:38.119
+and will fire a callback on any change.
+
+00:09:38.120 --> 00:09:41.239
+So it's the building block for that dynamic user interface,
+
+00:09:41.240 --> 00:09:43.119
+like you would see in a desktop system,
+
+00:09:43.120 --> 00:09:44.479
+but inside of Emacs.
+
+NOTE Demo: Discomfort
+
+00:09:44.480 --> 00:09:47.759
+Let's do some demos.
+
+00:09:47.760 --> 00:09:51.039
+Discomfort is an interface I wrote for UDisks2,
+
+00:09:51.040 --> 00:09:53.719
+which is what manages all of the block device hardware.
+
+00:09:53.720 --> 00:09:57.679
+And again, it has that dynamic desktop-like interactivity,
+
+00:09:57.680 --> 00:10:00.279
+and mostly will just do what you mean.
+
+00:10:00.280 --> 00:10:03.519
+This is definitely alpha state.
+
+00:10:03.520 --> 00:10:04.839
+It doesn't have all the features,
+
+00:10:04.840 --> 00:10:06.559
+but it's good enough that I use it daily.
+
+00:10:06.560 --> 00:10:08.879
+So here's Discomfort,
+
+00:10:08.880 --> 00:10:11.679
+and you can see it has a list of all your hardware,
+
+00:10:11.680 --> 00:10:13.639
+what type it is, and where it's mounted.
+
+00:10:13.640 --> 00:10:16.199
+I have a little USB extension cable here,
+
+00:10:16.200 --> 00:10:17.679
+and I'm gonna plug in a disc,
+
+00:10:17.680 --> 00:10:19.319
+just to show you how this works.
+
+00:10:19.320 --> 00:10:21.079
+You can see when I plug it in,
+
+00:10:21.080 --> 00:10:22.399
+just a moment later,
+
+00:10:22.400 --> 00:10:24.439
+it shows up in that list, automatically.
+
+00:10:24.440 --> 00:10:25.719
+I don't have to press any key,
+
+00:10:25.720 --> 00:10:27.759
+I don't have to refresh it, it's just there.
+
+00:10:27.760 --> 00:10:29.519
+If I unplug it, it's gone.
+
+00:10:29.520 --> 00:10:30.719
+Plug it back in,
+
+00:10:30.720 --> 00:10:33.399
+and there it is.
+
+00:10:33.400 --> 00:10:35.239
+And you can see it's an encrypted volume.
+
+00:10:35.240 --> 00:10:37.279
+So in order to do anything with this,
+
+00:10:37.280 --> 00:10:38.679
+I'm going to have to supply a password.
+
+00:10:38.680 --> 00:10:41.759
+Just pressing Enter goes into the "do what I mean" mode,
+
+00:10:41.760 --> 00:10:43.519
+and it asks for the password.
+
+00:10:43.520 --> 00:10:46.599
+In this case, I've chosen the very secure password
+
+00:10:46.600 --> 00:10:47.559
+of "password".
+
+00:10:47.560 --> 00:10:51.199
+I hit Enter, and it unlocks it, and it mounts it,
+
+00:10:51.200 --> 00:10:53.319
+and it opens "dired" looking at it.
+
+00:10:53.320 --> 00:10:54.439
+And here's a little README.
+
+00:10:54.440 --> 00:10:55.559
+Let's see what it says.
+
+00:10:55.560 --> 00:10:58.559
+"Hello, EmacsConf."
+
+00:10:58.560 --> 00:11:01.479
+So that's my demo of discomfort.
+
+NOTE Demo: Remote eval
+
+00:11:01.480 --> 00:11:05.839
+In addition to acting as a client for D-Bus,
+
+00:11:05.840 --> 00:11:09.359
+Emacs can also offer services to other D-Bus clients.
+
+00:11:09.360 --> 00:11:11.959
+This is a really interesting opportunity
+
+00:11:11.960 --> 00:11:14.119
+because it allows many different programs
+
+00:11:14.120 --> 00:11:15.279
+to integrate with Emacs
+
+00:11:15.280 --> 00:11:17.679
+in ways that were previously very difficult.
+
+00:11:17.680 --> 00:11:20.239
+You can use this as an alternative to Emacs.
+
+00:11:20.240 --> 00:11:23.199
+The difference is D-Bus provides a full API,
+
+00:11:23.200 --> 00:11:24.999
+so instead of emacsclient being
+
+00:11:25.000 --> 00:11:26.679
+a sort of fire-and-forget system,
+
+00:11:26.680 --> 00:11:30.119
+you can actually get results back from the remote operation.
+
+00:11:30.120 --> 00:11:31.999
+So here's some code.
+
+00:11:32.000 --> 00:11:35.679
+Here's a dbus-eval function, which takes a string,
+
+00:11:35.680 --> 00:11:37.359
+reads it, and evaluates it,
+
+00:11:37.360 --> 00:11:39.359
+and returns whatever that value is.
+
+00:11:39.360 --> 00:11:41.839
+Then we have a debase-bind block
+
+00:11:41.840 --> 00:11:44.799
+that sets up an object on the session bus.
+
+00:11:44.800 --> 00:11:46.839
+Again, that's my user login bus.
+
+00:11:46.840 --> 00:11:49.559
+It offers this D-Bus service Emacs.
+
+00:11:49.560 --> 00:11:53.399
+This is a constant inside of the dbus.el package.
+
+00:11:53.400 --> 00:11:55.439
+And again, the path is a constant in there.
+
+00:11:55.440 --> 00:11:57.159
+And we're gonna create this interface,
+
+00:11:57.160 --> 00:12:02.519
+org.gnu.Emacs.Eval, and then register a method called Eval
+
+00:12:02.520 --> 00:12:04.759
+that calls that dbus-eval function.
+
+00:12:04.760 --> 00:12:08.119
+Pretty straightforward, only a handful of lines of code.
+
+00:12:08.120 --> 00:12:12.399
+To test this out, we're going to use the dbus-send utility.
+
+00:12:12.400 --> 00:12:15.399
+This is a command line program that interacts with D-Bus.
+
+00:12:15.400 --> 00:12:18.079
+We're going to tell it to wait for and print the reply,
+
+00:12:18.080 --> 00:12:20.999
+that the message should be sent to the session bus,
+
+00:12:21.000 --> 00:12:22.599
+that we're going to talk
+
+00:12:22.600 --> 00:12:25.639
+to the org.gnu.Emacs service on that bus,
+
+00:12:25.640 --> 00:12:30.879
+and the /org/gnu/Emacs object inside that service.
+
+00:12:30.880 --> 00:12:33.039
+On that object, we're gonna interact
+
+00:12:33.040 --> 00:12:35.999
+with the org.gnu.Emacs.Eval interface
+
+00:12:36.000 --> 00:12:37.639
+and call its Eval method.
+
+00:12:37.640 --> 00:12:40.639
+We're gonna call that method with a single string argument,
+
+00:12:40.640 --> 00:12:42.639
+which is indicated by the string prefix,
+
+00:12:42.640 --> 00:12:44.999
+and then a form to evaluate.
+
+00:12:45.000 --> 00:12:46.999
+I actually have to run this from a shell,
+
+00:12:47.000 --> 00:12:49.399
+because if I try using it in Org, it wedges.
+
+00:12:49.400 --> 00:12:51.959
+org-babel blocks waiting on completion,
+
+00:12:51.960 --> 00:12:54.519
+which blocks the D-Bus service from responding.
+
+00:12:54.520 --> 00:12:57.399
+I really wish Emacs was multi-threaded.
+
+00:12:57.400 --> 00:12:59.919
+But let's try it out.
+
+00:12:59.920 --> 00:13:02.719
+So if we run this, we can see that we get a return,
+
+00:13:02.720 --> 00:13:05.239
+and that's an unsigned integer of 32 bits
+
+00:13:05.240 --> 00:13:06.439
+with a value of 3.
+
+00:13:06.440 --> 00:13:09.959
+So like I was saying, this is really a two-way API
+
+00:13:09.960 --> 00:13:11.719
+where you can communicate back and forth
+
+00:13:11.720 --> 00:13:13.399
+between Emacs and another program.
+
+00:13:13.400 --> 00:13:14.959
+It's not just fire-and-forget.
+
+00:13:14.960 --> 00:13:16.279
+I think that's really cool.
+
+NOTE Demo: Remote Org capture
+
+00:13:16.280 --> 00:13:18.519
+Let's try another demo.
+
+00:13:18.520 --> 00:13:20.599
+What about a remote org-capture?
+
+00:13:20.600 --> 00:13:22.999
+What if you could trigger an org-capture
+
+00:13:23.000 --> 00:13:24.679
+from any program on your desktop?
+
+00:13:24.680 --> 00:13:26.239
+I think that would be pretty cool.
+
+00:13:26.240 --> 00:13:30.239
+And we can see, there it is.
+
+00:13:30.240 --> 00:13:38.919
+All right, I think I've got that one covered.
+
+00:13:38.920 --> 00:13:42.319
+So I do want to say that remote eval is probably a bad idea
+
+00:13:42.320 --> 00:13:43.479
+from a security perspective,
+
+00:13:43.480 --> 00:13:46.759
+but the point of this is some quick and dirty demonstrations
+
+00:13:46.760 --> 00:13:49.799
+of what can happen and to get people's imaginations flowing,
+
+00:13:49.800 --> 00:13:51.719
+because I think this is something
+
+00:13:51.720 --> 00:13:54.079
+that offers a lot of promise for Emacs.
+
+00:13:54.080 --> 00:13:57.799
+I think having a full-blown Emacs desktop environment
+
+00:13:57.800 --> 00:13:59.879
+where it can do all the things that a GNOME
+
+00:13:59.880 --> 00:14:02.759
+or a KDE environment can do is very exciting.
+
+00:14:02.760 --> 00:14:06.439
+And if you want to have a traditional GUI with Emacs
+
+00:14:06.440 --> 00:14:08.679
+as a more integrated participant of it,
+
+00:14:08.680 --> 00:14:11.879
+its service mechanism offers a lot of ability to do that.
+
+NOTE Future directions
+
+00:14:11.880 --> 00:14:15.999
+In the micro sense, I think there's a lot of improvements
+
+00:14:16.000 --> 00:14:19.279
+that can be made to either dbus.el or to dbase.
+
+00:14:19.280 --> 00:14:21.639
+The main one is handling of the type system.
+
+00:14:21.640 --> 00:14:25.839
+Lisp's dynamic type system doesn't mesh particularly well
+
+00:14:25.840 --> 00:14:28.799
+with the static strong type system that D-bus offers,
+
+00:14:28.800 --> 00:14:31.359
+and having some convenience to assist that
+
+00:14:31.360 --> 00:14:32.639
+would be very helpful.
+
+00:14:32.640 --> 00:14:35.319
+There's also some weird interfaces.
+
+00:14:35.320 --> 00:14:38.119
+For example, some things return identifiers
+
+00:14:38.120 --> 00:14:40.919
+as an array of integer code points instead of a string,
+
+00:14:40.920 --> 00:14:43.719
+and there should be a common way of handling that.
+
+00:14:43.720 --> 00:14:46.159
+I also think that the service support could be improved.
+
+00:14:46.160 --> 00:14:48.039
+Even though I gave the demo service,
+
+00:14:48.040 --> 00:14:50.479
+it's not really a great D-bus citizen
+
+00:14:50.480 --> 00:14:53.079
+because it doesn't offer that introspection mechanism,
+
+00:14:53.080 --> 00:14:55.919
+and so the actual methods are pretty much invisible
+
+00:14:55.920 --> 00:14:56.919
+to other participants,
+
+00:14:56.920 --> 00:15:00.079
+unless they already know that you're using Emacs.
+
+00:15:00.080 --> 00:15:01.799
+That's my talk.
+
+00:15:01.800 --> 00:15:02.559
+Thank you.
+
+00:15:02.560 --> 00:15:07.320
+You can find me on mastodon.social or on libera.chat.
diff --git a/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.vtt b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.vtt
new file mode 100644
index 00000000..7d9c7920
--- /dev/null
+++ b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.vtt
@@ -0,0 +1,1028 @@
+WEBVTT
+
+00:00.000 --> 00:02.360
+Thank you for the great talk, Niklas.
+
+00:02.360 --> 00:05.040
+And yes, the Q&A is now open.
+
+00:05.040 --> 00:09.320
+Folks, feel free to post your questions on the pattern IRC.
+
+00:09.320 --> 00:10.900
+And after a minute or two, we'll also
+
+00:10.900 --> 00:12.680
+open up this big blue button for people
+
+00:12.680 --> 00:15.820
+who might prefer to come join Niklas here directly
+
+00:15.820 --> 00:17.680
+and ask the questions here.
+
+00:17.680 --> 00:20.240
+Niklas, take it away.
+
+00:20.240 --> 00:21.000
+All right.
+
+00:21.000 --> 00:21.720
+Thank you.
+
+00:21.720 --> 00:25.040
+And thanks for having me.
+
+00:25.040 --> 00:28.720
+Yeah, maybe I'll go ahead and read some questions
+
+00:28.720 --> 00:32.880
+that have popped up in the formula here then.
+
+00:32.880 --> 00:37.440
+So the first question is, can it replace SSH plus TMAX
+
+00:37.440 --> 00:42.280
+for persistent sessions on remote hosts?
+
+00:42.280 --> 00:46.440
+So currently, I would say it does not
+
+00:46.440 --> 00:49.720
+support that because it is designed
+
+00:49.720 --> 00:53.440
+to only run a single command inside a session.
+
+00:53.440 --> 00:59.920
+And when that finishes, it reports back.
+
+00:59.920 --> 01:01.640
+But I have played with the idea.
+
+01:01.640 --> 01:04.480
+I think it should be possible to do.
+
+01:04.480 --> 01:08.640
+But I wanted to start off and polish the experience
+
+01:08.640 --> 01:12.720
+with a single command first.
+
+01:12.720 --> 01:16.880
+And secondly, there is a question.
+
+01:16.880 --> 01:20.880
+I see integration with projectile in the README.
+
+01:20.880 --> 01:23.960
+Does it also integrate with project.io?
+
+01:28.400 --> 01:30.200
+Yeah, good question.
+
+01:30.200 --> 01:31.840
+It doesn't.
+
+01:31.840 --> 01:37.920
+I haven't added any explicit support for it
+
+01:37.920 --> 01:43.880
+because I typically run detached compiling in the project
+
+01:43.880 --> 01:49.160
+root with my own command using project behind the scenes.
+
+01:49.160 --> 01:51.880
+But I guess project has a command for it now.
+
+01:51.880 --> 02:21.840
+So yeah, it should be very easy to add support for that.
+
+02:21.840 --> 02:28.000
+And I could also mention that could be one thing related
+
+02:28.000 --> 02:31.480
+to the first questionnaire of using kind of persistent
+
+02:31.480 --> 02:37.560
+sessions, that it would be interesting to see if,
+
+02:37.560 --> 02:44.000
+for example, I occasionally run Python REPL in Emacs.
+
+02:44.000 --> 02:48.000
+And if I could get that one to launch using detach,
+
+02:48.000 --> 02:52.960
+so I could restart Emacs and reattach to the REPL
+
+02:52.960 --> 02:57.920
+or also use it for situations where I have used the REPL
+
+02:57.920 --> 03:02.000
+to, let's say, experiment with, I don't know,
+
+03:02.000 --> 03:04.720
+some NumPy function, how that works.
+
+03:04.720 --> 03:10.400
+And if I use detach for that, it would automatically
+
+03:10.400 --> 03:12.920
+log then the whole session.
+
+03:12.920 --> 03:15.360
+And I would have it accessible.
+
+03:15.360 --> 03:19.560
+So I could search for it in retrospect
+
+03:19.560 --> 03:23.880
+and retrieve the log and see, OK, I ran this command.
+
+03:23.880 --> 03:26.760
+This happened, or basically.
+
+03:32.680 --> 03:35.320
+So then there is a question.
+
+03:35.320 --> 03:36.600
+Can you?
+
+03:36.600 --> 03:37.360
+Oh, OK.
+
+03:37.360 --> 03:38.800
+I'll read the other one.
+
+03:38.800 --> 03:43.400
+No, there is two in there.
+
+03:46.920 --> 03:48.040
+It's ongoing.
+
+03:48.040 --> 03:51.240
+I'll wait for them.
+
+03:51.240 --> 03:52.920
+So the first question is, can you
+
+03:52.920 --> 03:56.520
+detach a session from shell mode and reattach
+
+03:56.520 --> 04:01.920
+from eshell vterm mode or start a compile in a shell mode
+
+04:01.920 --> 04:09.120
+and attach it from compilation mode?
+
+04:09.120 --> 04:16.240
+Yeah, so you can attach at the moment
+
+04:16.240 --> 04:20.400
+or reattach in shell mode, eshell vterm.
+
+04:20.400 --> 04:25.680
+That is no problem.
+
+04:25.680 --> 04:33.880
+Currently, I don't have support for attaching in compilation
+
+04:33.880 --> 04:34.720
+mode.
+
+04:34.720 --> 04:39.040
+So the way the package is built is
+
+04:39.040 --> 04:44.280
+that when the session is started,
+
+04:44.280 --> 04:51.240
+there is a variable that gets inserted into the session.
+
+04:51.240 --> 04:56.280
+And it describes how the session would handle,
+
+04:56.280 --> 05:01.720
+for example, attaching to it or viewing the output, et cetera.
+
+05:04.480 --> 05:12.560
+But these are the things that I want to primarily focus
+
+05:12.560 --> 05:17.680
+in the near future, so making it easier to, for example,
+
+05:17.680 --> 05:21.040
+have a buffer up where you're attached to a session.
+
+05:21.040 --> 05:25.680
+You could run a key binding to switch
+
+05:25.680 --> 05:29.000
+to the view mode of that session.
+
+05:29.000 --> 05:32.800
+You get the full output, and then you could view it.
+
+05:32.800 --> 05:37.200
+You can switch back to the attached version, which
+
+05:37.200 --> 05:40.560
+just shows a brief context and then continues on
+
+05:40.560 --> 05:45.120
+with the current output from the session.
+
+05:45.120 --> 05:50.640
+Question number four here is, how do you talk to detach?
+
+05:50.640 --> 05:54.480
+Could it be feasible to run a child emacs instead
+
+05:54.480 --> 05:56.360
+of detach?
+
+05:56.360 --> 05:58.800
+Would it make sense?
+
+05:58.800 --> 06:02.520
+Better communication, maybe.
+
+06:02.520 --> 06:08.560
+So the way the talk with detach is done
+
+06:08.560 --> 06:11.680
+is, I would say, very simple.
+
+06:11.680 --> 06:19.480
+Detach the program supports basic instructions
+
+06:19.480 --> 06:25.320
+like detach dash a to attach, or yeah, that's basically it.
+
+06:28.080 --> 06:32.760
+And that is all that's being used under the hood.
+
+06:32.760 --> 06:37.280
+And of course, it uses its C flag
+
+06:37.280 --> 06:47.240
+to create and attach when a session is started, or the dash
+
+06:47.240 --> 06:52.440
+n to start the session in kind of detached mode.
+
+06:52.440 --> 06:55.440
+So it runs without emacs being attached to it.
+
+06:58.240 --> 07:05.720
+Currently, I don't think I've seen any need for a child emacs
+
+07:05.720 --> 07:08.920
+need for better communication.
+
+07:08.920 --> 07:15.400
+But if people have ideas about what could be done,
+
+07:15.400 --> 07:19.280
+if it was added, yeah, that would be great.
+
+07:19.280 --> 07:20.960
+So maybe that could be a follow up
+
+07:20.960 --> 07:24.640
+if you got ideas on how to improve it.
+
+07:24.640 --> 07:33.160
+Yeah, so I'm not sure if the emacs child, yeah,
+
+07:33.160 --> 07:36.360
+I think if I got a better idea about what
+
+07:36.360 --> 07:39.120
+the person would like to achieve with it,
+
+07:39.120 --> 07:43.000
+then maybe I could understand the question better there.
+
+07:45.880 --> 07:49.480
+So another question is, how does it handle processes
+
+07:49.480 --> 07:52.560
+that require you to do that?
+
+07:52.560 --> 07:55.440
+So processes that require user input,
+
+07:55.440 --> 07:59.080
+usually type yes, no, et cetera.
+
+07:59.080 --> 08:05.600
+MetaX compiles great, but can't handle user input.
+
+08:05.600 --> 08:16.600
+Yeah, so it's very simple behind the scenes.
+
+08:16.600 --> 08:21.320
+It depends on what interface you use for attaching emacs
+
+08:21.320 --> 08:23.160
+to that process.
+
+08:23.160 --> 08:27.680
+So as the person says, if it's MetaX compiled,
+
+08:27.680 --> 08:32.160
+then probably it doesn't handle it.
+
+08:32.160 --> 08:40.080
+So in that case, I guess I would have started it
+
+08:40.080 --> 08:42.680
+from the shell.
+
+08:42.680 --> 08:46.960
+If there is a question, you need to type yes or no,
+
+08:46.960 --> 08:53.000
+then you can just type it and maybe detach from it.
+
+08:53.000 --> 08:56.400
+Or if you end up in a situation where
+
+08:56.400 --> 09:00.080
+you started with MetaX compile, but then it has the question,
+
+09:00.080 --> 09:04.400
+I guess you could always pop up a shell attached
+
+09:04.400 --> 09:07.080
+to the session, and you will get the question there.
+
+09:07.080 --> 09:11.480
+You press whatever answer you'd like,
+
+09:11.480 --> 09:20.000
+and then detach from that user interface.
+
+09:20.000 --> 09:23.480
+So another question is, can you rerun a command session,
+
+09:23.480 --> 09:25.880
+but in another directory?
+
+09:28.560 --> 09:33.360
+Yeah, you can't do that at the moment.
+
+09:33.360 --> 09:38.120
+I haven't really found a need for it.
+
+09:38.120 --> 09:46.000
+So typically, as I have been using detach,
+
+09:46.000 --> 09:52.680
+now when it has a persistent storage of the sessions,
+
+09:52.680 --> 09:57.040
+it becomes rather natural that once I've run it once,
+
+09:57.040 --> 10:07.120
+I can just rerun it later in the same directory.
+
+10:07.120 --> 10:11.400
+But maybe this is a feature that should be added.
+
+10:11.400 --> 10:16.840
+It's maybe a common use case.
+
+10:16.840 --> 10:22.120
+One thing that I added on top of the rerun
+
+10:22.120 --> 10:25.280
+is like an edit and rerun for those situations
+
+10:25.280 --> 10:30.240
+where I maybe run some compilation,
+
+10:30.240 --> 10:34.960
+but with the compilation flag set to opt,
+
+10:34.960 --> 10:37.680
+and then I want to rerun the exact same command
+
+10:37.680 --> 10:43.600
+in the same directory, but with it set to dbg instead
+
+10:43.600 --> 10:44.520
+for debugging.
+
+10:44.520 --> 10:48.600
+And then instead of pressing R to rerun, I press E.
+
+10:48.600 --> 10:53.400
+Then I get a prompt with the current command,
+
+10:53.400 --> 10:57.640
+and then I can add it, and it will rerun that.
+
+10:57.640 --> 11:00.920
+So maybe something similar for another directory
+
+11:00.920 --> 11:05.320
+could be added.
+
+11:22.720 --> 11:23.200
+Cool.
+
+11:23.200 --> 11:27.200
+I think we still have about 13 or 14 more minutes of live Q&A
+
+11:27.200 --> 11:29.840
+time on stream, so if folks do have more questions
+
+11:29.840 --> 11:32.440
+about this talk from Nicolas, please
+
+11:32.440 --> 11:33.960
+feel free to put them on the pad,
+
+11:33.960 --> 11:36.560
+or come join here on the big blue button and ask here.
+
+11:40.400 --> 11:41.320
+Yeah.
+
+11:41.320 --> 11:47.600
+And I also want to mention that if you realize later
+
+11:47.600 --> 11:50.000
+you have a question or a suggestion,
+
+11:50.000 --> 11:57.200
+feel free to contact me or create a new post
+
+11:57.200 --> 12:00.960
+on the mailing list for the project.
+
+12:00.960 --> 12:02.720
+That's much appreciated.
+
+12:07.160 --> 12:09.720
+Sounds good.
+
+12:09.720 --> 12:10.240
+Yeah.
+
+12:10.240 --> 12:22.880
+So then there is a question incoming.
+
+12:22.880 --> 12:30.320
+So what are some other places where this might be useful?
+
+12:30.320 --> 12:32.760
+And you, for me, fetching that question
+
+12:32.760 --> 12:40.480
+is, what are some other places where this might be useful?
+
+12:40.480 --> 12:46.320
+And you, for me, fetching mail, get processes started by magic.
+
+12:46.320 --> 12:48.880
+What things would you like to see working
+
+12:48.880 --> 12:52.560
+in a one to two-year time frame?
+
+12:55.040 --> 12:58.520
+Yeah, that's a good question.
+
+12:58.520 --> 13:01.800
+I think there are these situations.
+
+13:01.800 --> 13:04.800
+One of the things that I ran into yesterday
+
+13:04.800 --> 13:11.320
+was that I was trying to use EMMS to connect
+
+13:11.320 --> 13:14.560
+to the stream for Emacs Conv.
+
+13:14.560 --> 13:17.640
+And that was working fine.
+
+13:17.640 --> 13:22.040
+It was using MPV in the background.
+
+13:22.040 --> 13:25.280
+But then I did some modifications to my Emacs
+
+13:25.280 --> 13:30.120
+and wanted to restart it, and then the stream died.
+
+13:30.120 --> 13:35.600
+Kind of those situations where I found it valuable,
+
+13:35.600 --> 13:41.800
+I added support for the D-RED R-Sync package,
+
+13:41.800 --> 13:44.440
+for example, that I use occasionally
+
+13:44.440 --> 13:51.480
+to copy things to a remote server
+
+13:51.480 --> 13:52.960
+or from a remote server.
+
+13:52.960 --> 13:56.280
+And yeah, that was always something
+
+13:56.280 --> 14:00.240
+that I thought could benefit from it.
+
+14:00.240 --> 14:08.000
+So I would ideally like to see if it
+
+14:08.000 --> 14:13.080
+can be used for more of these processes.
+
+14:15.680 --> 14:21.600
+I guess maybe I should get in contact
+
+14:21.600 --> 14:27.480
+with some of the devs to see if they have ideas on how this
+
+14:27.480 --> 14:33.360
+could be incorporated better with Emacs.
+
+14:33.360 --> 14:36.440
+Because so far, it was kind of straightforward
+
+14:36.440 --> 14:41.000
+to get it to work with Shell or Compile.
+
+14:41.000 --> 14:47.360
+But it hacks around the current implementation
+
+14:47.360 --> 14:48.760
+to make it use Detach.
+
+14:48.760 --> 14:55.360
+And if I wanted it to be used in many more places,
+
+14:55.360 --> 14:58.560
+it feels like it would be maybe not the best way
+
+14:58.560 --> 15:07.440
+to have a lot of advices being added to the various functions.
+
+15:07.440 --> 15:12.720
+But yeah, definitely, it would be really cool
+
+15:12.720 --> 15:17.760
+if that could be worked on properly
+
+15:17.760 --> 15:22.880
+so that once I've managed to get the workflow
+
+15:22.880 --> 15:27.080
+for its current implementation a little bit more polished,
+
+15:27.080 --> 15:38.600
+I will try to look into this and also see what is possible.
+
+15:38.600 --> 15:42.080
+I don't know if there are any limitations
+
+15:42.080 --> 15:49.360
+with my current approach that I need some more expertise on.
+
+16:12.080 --> 16:39.760
+Yeah, so if there is no other questions, I'll
+
+16:39.760 --> 16:53.960
+OK, there is another question.
+
+16:53.960 --> 16:59.720
+OK, a general topic here.
+
+16:59.720 --> 17:02.520
+What are you currently excited about in Emacs?
+
+17:02.520 --> 17:15.520
+Well, I'm really excited about the TreeSitter
+
+17:15.520 --> 17:21.120
+that was just added to Emacs 29.
+
+17:21.120 --> 17:27.240
+I haven't gotten around to use that yet.
+
+17:27.240 --> 17:29.640
+But I think it looks very promising.
+
+17:29.640 --> 17:37.440
+And I'm a big fan of structural editing
+
+17:37.440 --> 17:39.040
+that you can use in Lisp.
+
+17:39.040 --> 17:42.600
+So if this opens up the possibility
+
+17:42.600 --> 17:47.880
+to be able to use that more in other languages,
+
+17:47.880 --> 17:49.000
+that would be really cool.
+
+17:49.000 --> 17:56.880
+Otherwise, I'm generally excited about how
+
+17:56.880 --> 18:01.880
+the program is developing.
+
+18:01.880 --> 18:05.040
+I think there has been a lot of great additions
+
+18:05.040 --> 18:11.720
+in these last couple of versions of the program.
+
+18:11.720 --> 18:13.680
+So it's cool to see.
+
+18:13.680 --> 18:22.640
+And also how the Emacs Conf has been continuing
+
+18:22.640 --> 18:27.760
+and being an annual thing and also growing,
+
+18:27.760 --> 18:33.280
+adding this new layout with the general track
+
+18:33.280 --> 18:34.280
+and development track.
+
+18:34.280 --> 18:35.080
+I think it's great.
+
+18:39.080 --> 18:39.560
+Thanks.
+
+18:39.560 --> 18:41.040
+Yeah, it's been interesting.
+
+18:41.040 --> 18:46.800
+Emacs itself, I feel like the Emacs-Devel mailing list
+
+18:46.800 --> 18:50.520
+has been growing in traffic over the years.
+
+18:50.520 --> 18:52.280
+I've been subscribed for a couple of years.
+
+18:52.280 --> 18:56.200
+And more recently, I'm just seeing more and more
+
+18:56.200 --> 18:57.600
+incoming emails from Emacs-Devel,
+
+18:57.600 --> 19:00.000
+which is always cool.
+
+19:00.000 --> 19:02.680
+Yeah, and like you said with Emacs Conf,
+
+19:02.680 --> 19:05.800
+yeah, we've been growing, thankfully.
+
+19:05.800 --> 19:07.680
+And this year, we've experimented
+
+19:07.680 --> 19:09.280
+with having two tracks, which I think
+
+19:09.280 --> 19:12.280
+has turned out pretty well, pretty great.
+
+19:12.280 --> 19:15.600
+Because we don't have to try to squeeze in all the talks
+
+19:15.600 --> 19:19.080
+so tightly and be able to give proper Q&A time,
+
+19:19.080 --> 19:20.960
+like this one, I think, which is pretty great.
+
+19:20.960 --> 19:23.280
+So yeah, very glad to hear and see it.
+
+19:27.400 --> 19:33.400
+Yeah, and maybe I should mention now
+
+19:33.400 --> 19:41.320
+that I know that the E-Shell talk is coming up by Howard,
+
+19:41.320 --> 19:45.880
+that I discovered there is a kind of a bug
+
+19:45.880 --> 19:50.320
+in the detached implementation.
+
+19:50.320 --> 19:56.320
+So it doesn't handle properly the way E-Shell
+
+19:56.320 --> 20:07.040
+seems to communicate when you quote some text in a shell
+
+20:07.040 --> 20:07.920
+command.
+
+20:07.920 --> 20:11.480
+If you have been using quotes, it
+
+20:11.480 --> 20:14.840
+seems to be added as text properties that
+
+20:14.840 --> 20:16.240
+gets into detached.
+
+20:16.240 --> 20:20.040
+And I didn't know about that, but detached
+
+20:20.040 --> 20:22.080
+is not picking that up.
+
+20:22.080 --> 20:28.040
+So if you try to run something similar to Echo
+
+20:28.040 --> 20:33.960
+and quotation marks, Niklas, then yeah, it will not
+
+20:33.960 --> 20:35.360
+run it with quotation marks.
+
+20:35.360 --> 20:38.200
+So I guess for Echo, it might work,
+
+20:38.200 --> 20:42.280
+but other commands, it can fail.
+
+20:42.280 --> 20:45.760
+So just be aware about that.
+
+20:45.760 --> 20:49.360
+I guess that's on the priority list to fix.
+
+20:49.360 --> 20:50.280
+Interesting.
+
+20:50.280 --> 20:51.960
+Yeah, for sure.
+
+20:51.960 --> 20:54.720
+I guess folks can look forward to that getting hopefully fixed
+
+20:54.720 --> 20:59.080
+in the near future or at some point.
+
+20:59.080 --> 21:05.640
+Yeah, and I could add that maybe something
+
+21:05.640 --> 21:15.240
+that is in between this request for persistent sessions
+
+21:15.240 --> 21:20.040
+is that currently, you can use detached in a way
+
+21:20.040 --> 21:23.360
+so it creates like it runs the session.
+
+21:23.360 --> 21:28.400
+And once that finish, you use its callback
+
+21:28.400 --> 21:32.920
+to generate a new session, which runs some other command.
+
+21:32.920 --> 21:41.240
+So you can chain detached sessions that way.
+
+21:41.240 --> 21:47.680
+I wanted to improve on how that has been implemented
+
+21:47.680 --> 21:55.040
+so that you can more easily start these changed sessions
+
+21:55.040 --> 21:58.520
+and that they would show up in the user interface.
+
+21:58.520 --> 22:05.120
+And maybe if you rerun the top of the chain,
+
+22:05.120 --> 22:12.720
+it will actually start all these sessions that way.
+
+22:12.720 --> 22:16.680
+I have some use cases personally where
+
+22:16.680 --> 22:22.200
+for the time being, before running an executable,
+
+22:22.200 --> 22:24.920
+I actually need to run a different build command
+
+22:24.920 --> 22:27.160
+than I normally do.
+
+22:27.160 --> 22:32.880
+And I keep forgetting that, and then that fails.
+
+22:32.880 --> 22:35.960
+And it would be great to just be able to.
+
+22:35.960 --> 22:40.440
+I mean, you could always have that first command
+
+22:40.440 --> 22:48.240
+and then and and the other one, but it doesn't look as nice.
+
+22:48.240 --> 22:53.960
+And it would be nice to be able to see that, OK, this has been
+
+22:53.960 --> 22:57.720
+this is currently running, but in the next once that's
+
+22:57.720 --> 23:02.080
+finished, it will keep on running this one.
+
+23:02.080 --> 23:05.440
+So that's something I plan to add support for.
+
+23:05.440 --> 23:09.360
+It sounds good.
+
+23:09.360 --> 23:10.120
+That would be nice.
+
+23:14.080 --> 23:17.200
+Yeah, I would like that as well.
+
+23:17.200 --> 23:21.360
+So I have an incentive.
+
+23:21.360 --> 23:41.720
+Yeah, also not to completely derail this,
+
+23:41.720 --> 23:45.120
+but I mean, I don't think there are any questions as of now.
+
+23:45.120 --> 23:46.800
+So I can maybe mention this.
+
+23:46.800 --> 23:48.320
+Someone pinged me on IRC.
+
+23:48.320 --> 23:50.640
+Well, someone, Shoushin, good friend.
+
+23:50.640 --> 23:53.920
+And the creator, actually, of the musics
+
+23:53.920 --> 23:56.400
+that we've been using at Emacs Conf between for our lunch
+
+23:56.400 --> 23:58.880
+breaks and here and there, he mentioned
+
+23:58.880 --> 24:01.080
+that he likes this FSF shirt.
+
+24:03.960 --> 24:05.720
+Yeah, it's nice.
+
+24:05.720 --> 24:06.200
+Thanks.
+
+24:06.200 --> 24:10.120
+Yeah, it's I think from a year or so ago.
+
+24:10.120 --> 24:14.200
+It was put up for FSF's 35th birthday.
+
+24:14.200 --> 24:17.160
+And yeah, it's also what it says, FSF 35.
+
+24:17.160 --> 24:20.280
+Yeah, I'm not sure if it's still available on their shop,
+
+24:20.280 --> 24:22.360
+but yeah, you might be able to find it there.
+
+24:25.880 --> 24:27.160
+Nice.
+
+24:27.160 --> 24:31.080
+So they have their own shop?
+
+24:31.080 --> 24:32.000
+Yeah, so there is.
+
+24:32.000 --> 24:33.520
+You can buy merch or?
+
+24:33.520 --> 24:34.480
+Yeah, exactly.
+
+24:34.480 --> 24:37.080
+There is shop.fsf.org, and they have
+
+24:37.080 --> 24:41.880
+a bunch of different goodies and things, merchandise.
+
+24:41.880 --> 24:44.440
+They have shirts like this one, but they also
+
+24:44.440 --> 24:45.920
+have a lot of other stuff.
+
+24:45.920 --> 24:47.960
+They have this one, but they also
+
+24:47.960 --> 24:51.200
+sell things like printed versions of the Emacs user
+
+24:51.200 --> 24:54.840
+manual, which is particularly relevant for us.
+
+24:54.840 --> 24:57.680
+Yeah, and Emacs stickers.
+
+24:57.680 --> 24:59.280
+I think also sell pins and such.
+
+24:59.280 --> 25:02.280
+So yeah, I mean, if you are interested in Emacs
+
+25:02.280 --> 25:06.200
+or new on FSF, it might be worth checking out.
+
+25:06.200 --> 25:08.680
+Yeah, thanks for the tip.
+
+25:08.680 --> 25:11.360
+Yeah.
+
+25:11.360 --> 25:14.520
+Cool, and I think we have about one more minute of live Q&A
+
+25:14.520 --> 25:17.880
+time if folks have any questions,
+
+25:17.880 --> 25:23.520
+any last-minute ones, you're welcome to send it in.
+
+25:23.520 --> 25:26.880
+I guess there is, uh-huh.
+
+25:26.880 --> 25:32.240
+OK, yeah, this one got added from Karfik.
+
+25:32.240 --> 25:32.740
+Yeah.
+
+25:38.600 --> 25:41.560
+Yeah, otherwise, if there's no further questions,
+
+25:41.560 --> 25:44.200
+maybe we wrap it up.
+
+25:44.200 --> 25:45.320
+Sure, sounds good.
+
+25:45.320 --> 25:46.880
+Yeah, I don't see any new questions.
+
+25:46.880 --> 25:49.560
+So yeah, thanks again, Nicholas, for the great talk
+
+25:49.560 --> 25:52.640
+and for sticking around and doing the live Q&A.
+
+25:52.640 --> 25:54.360
+It's much appreciated, and look forward
+
+25:54.360 --> 26:01.080
+to seeing the upcoming developments in Detached.
+
+26:01.080 --> 26:03.400
+Thank you, and thanks for having me.
+
+26:03.400 --> 26:06.760
+Cheers, very glad to see you around.
+
+26:06.760 --> 26:15.840
+See ya.
+
diff --git a/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt
new file mode 100644
index 00000000..63f883ff
--- /dev/null
+++ b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt
@@ -0,0 +1,34 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:27.120
+Intro
+
+00:00:27.120 --> 00:01:15.800
+The problem
+
+00:01:15.800 --> 00:02:30.840
+My solution: detached
+
+00:02:30.840 --> 00:03:30.800
+Shell
+
+00:03:30.800 --> 00:04:27.754
+Compile
+
+00:04:27.854 --> 00:05:21.440
+Detached list sessions
+
+00:05:21.440 --> 00:06:07.080
+Narrow criteria
+
+00:06:07.080 --> 00:06:34.040
+Diff sessions
+
+00:06:34.040 --> 00:07:04.421
+Rich interface with properties
+
+00:07:04.521 --> 00:07:44.988
+Annotation
+
+00:07:45.088 --> 00:10:10.760
+Searching through sessions
diff --git a/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt
new file mode 100644
index 00000000..09c4a9df
--- /dev/null
+++ b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt
@@ -0,0 +1,502 @@
+WEBVTT captioned by anush
+
+00:00:00.000 --> 00:00:04.354
+Hello, everyone! Welcome to my talk,
+
+00:00:04.454 --> 00:00:07.221
+"Getting detached from Emacs".
+
+00:00:07.321 --> 00:00:09.720
+When I started to use Emacs,
+
+00:00:09.720 --> 00:00:12.920
+I quickly gravitated towards using it
+
+00:00:12.920 --> 00:00:15.000
+as much as I could.
+
+00:00:15.000 --> 00:00:17.880
+Magit, Org, Dired,
+
+00:00:17.880 --> 00:00:21.360
+a lot of new possibilities opened up.
+
+00:00:21.360 --> 00:00:23.280
+However, there was a workflow
+
+00:00:23.280 --> 00:00:27.120
+that was difficult for me to replace.
+
+00:00:27.120 --> 00:00:30.120
+The problem for me was running shell commands
+
+00:00:30.120 --> 00:00:32.560
+in sub-processes of Emacs,
+
+00:00:32.560 --> 00:00:34.880
+which in some situations led me to stick to
+
+00:00:34.880 --> 00:00:38.000
+using an external terminal.
+
+00:00:38.000 --> 00:00:39.588
+These situations,
+
+00:00:39.688 --> 00:00:43.254
+often revolved around long-running shell commands,
+
+00:00:43.354 --> 00:00:46.054
+either on my local machine
+
+00:00:46.154 --> 00:00:48.600
+or on a remote host.
+
+00:00:48.600 --> 00:00:50.240
+When I was on a remote host,
+
+00:00:50.240 --> 00:00:52.800
+I would also rely on using the program tmux
+
+00:00:52.800 --> 00:00:57.280
+to be able to detach from the remote process.
+
+00:00:57.280 --> 00:00:59.521
+My main concern at the time
+
+00:00:59.621 --> 00:01:01.854
+was that I didn't want to having to avoid
+
+00:01:01.954 --> 00:01:03.440
+restarting Emacs,
+
+00:01:03.440 --> 00:01:07.800
+because I needed to wait for a process to complete.
+
+00:01:07.800 --> 00:01:11.200
+However, there was of course a lot of things
+
+00:01:11.200 --> 00:01:15.800
+I was missing out on by not using Emacs.
+
+00:01:15.800 --> 00:01:19.760
+Therefore, my solution to resolving
+
+00:01:19.760 --> 00:01:22.840
+the issue of occasionally having to leave Emacs
+
+00:01:22.840 --> 00:01:26.188
+led me down the path of developing the package
+
+00:01:26.188 --> 00:01:28.221
+Detached.
+
+00:01:28.321 --> 00:01:31.160
+The package allows Emacs to delegate
+
+00:01:31.160 --> 00:01:33.640
+the responsibility of creating processes
+
+00:01:33.640 --> 00:01:36.840
+to the program dtach.
+
+00:01:36.840 --> 00:01:39.021
+It also makes sure to write
+
+00:01:39.121 --> 00:01:44.321
+the output of the process to a file,
+
+00:01:44.421 --> 00:01:48.154
+which we will see later on how that is being used.
+
+00:01:48.254 --> 00:01:50.800
+The package makes Emacs capable of
+
+00:01:50.800 --> 00:01:53.120
+attaching to these processes
+
+00:01:53.120 --> 00:01:55.280
+as well as managing them.
+
+00:01:55.280 --> 00:01:58.880
+In the package, each process is called a session,
+
+00:01:58.880 --> 00:02:01.040
+and inside of Emacs that is just
+
+00:02:01.040 --> 00:02:02.560
+an object with properties
+
+00:02:02.560 --> 00:02:04.588
+such as what command is being run,
+
+00:02:04.688 --> 00:02:06.720
+what working directory is used,
+
+00:02:06.720 --> 00:02:10.240
+where the output is stored, etc.
+
+00:02:10.240 --> 00:02:12.480
+The important aspect is also that
+
+00:02:12.480 --> 00:02:16.840
+these objects are being persistent,
+
+00:02:16.840 --> 00:02:20.121
+so they are stored over time.
+
+00:02:20.221 --> 00:02:22.920
+Today, I'm going to walk you through
+
+00:02:22.920 --> 00:02:26.054
+how I use the package and what advantages
+
+00:02:26.154 --> 00:02:30.840
+there are of treating processes like text.
+
+00:02:30.840 --> 00:02:35.720
+I'm going to start by opening up M-x shell,
+
+00:02:35.720 --> 00:02:40.288
+and I will run a command
+
+00:02:40.388 --> 00:02:46.920
+to update my package manager.
+
+00:02:46.920 --> 00:02:48.254
+Instead of pressing return,
+
+00:02:48.354 --> 00:02:50.240
+I'll simply press shift return
+
+00:02:50.240 --> 00:02:52.600
+to let Emacs delegate the execution
+
+00:02:52.600 --> 00:02:54.920
+to the dtach program.
+
+00:02:54.920 --> 00:02:57.600
+Emacs will immediately attach itself to the process,
+
+00:02:57.600 --> 00:03:00.960
+and we therefore don't perceive any difference
+
+00:03:00.960 --> 00:03:04.480
+from when running the command as a subprocess.
+
+00:03:04.480 --> 00:03:06.488
+We now have the option though
+
+00:03:06.588 --> 00:03:09.800
+to detach from the session,
+
+00:03:09.800 --> 00:03:12.080
+and later on we can of course
+
+00:03:12.080 --> 00:03:17.054
+reattach Emacs to the session.
+
+00:03:17.154 --> 00:03:20.421
+For me, this addresses the core
+
+00:03:20.521 --> 00:03:23.800
+of the problem that I had.
+
+00:03:23.800 --> 00:03:25.040
+But let’s see what’s more
+
+00:03:25.040 --> 00:03:30.800
+the new workflow inside of Emacs can bring.
+
+00:03:30.800 --> 00:03:35.720
+The package supports multiple user interfaces
+
+00:03:35.720 --> 00:03:39.840
+such as Eshell and Compile.
+
+00:03:39.840 --> 00:03:43.360
+I will therefore switch to the Detached project,
+
+00:03:43.360 --> 00:03:49.440
+and I will run the build command that I use.
+
+00:03:49.440 --> 00:03:54.040
+I will run it with detached-compile
+
+00:03:54.040 --> 00:03:55.800
+with the difference that
+
+00:03:55.800 --> 00:03:59.800
+I can detach from the compilation.
+
+00:03:59.800 --> 00:04:05.000
+One benefit of this new workflow is that
+
+00:04:05.000 --> 00:04:08.680
+I can get a system notification shown up here
+
+00:04:08.680 --> 00:04:10.760
+once a session has finished.
+
+00:04:10.760 --> 00:04:15.520
+Previously, I was either forced to have
+
+00:04:15.520 --> 00:04:19.040
+the terminal open so I could see it or hiding it,
+
+00:04:19.040 --> 00:04:27.754
+but then risking having forgotten it.
+
+00:04:27.854 --> 00:04:32.560
+How do we then see the output of a session?
+
+00:04:32.560 --> 00:04:36.788
+Get the detached-list-sessions command,
+
+00:04:36.888 --> 00:04:42.854
+and here we see
+
+00:04:42.954 --> 00:04:45.600
+the command that we just built,
+
+00:04:45.600 --> 00:04:48.440
+and we see the guix pull with an asterisk
+
+00:04:48.440 --> 00:04:54.480
+indicating that it is continuously running.
+
+00:04:54.480 --> 00:05:01.421
+If I press enter,
+
+00:05:01.521 --> 00:05:04.440
+we will get the output of the session here.
+
+00:05:04.440 --> 00:05:07.200
+And since it was run using compile,
+
+00:05:07.200 --> 00:05:11.720
+we also have compilation mode enabled here,
+
+00:05:11.720 --> 00:05:14.188
+so we could navigate between
+
+00:05:14.288 --> 00:05:17.160
+potential warnings or errors.
+
+00:05:17.160 --> 00:05:21.440
+And we see that there is a warning here.
+
+00:05:21.440 --> 00:05:26.621
+One thing that
+
+00:05:26.721 --> 00:05:28.920
+I have prepared here is that
+
+00:05:28.920 --> 00:05:32.240
+if I open up the user interface,
+
+00:05:32.240 --> 00:05:35.760
+we only see two sessions,
+
+00:05:35.760 --> 00:05:38.988
+but that is because we applied a filter here.
+
+00:05:39.088 --> 00:05:43.160
+So, we have actually the only sessions
+
+00:05:43.160 --> 00:05:46.000
+that are created within the last 12 hours
+
+00:05:46.000 --> 00:05:47.360
+and that are considered unique.
+
+00:05:47.360 --> 00:05:50.600
+So, if I remove the uniqueness,
+
+00:05:50.600 --> 00:05:57.040
+we also see that we have a previous build
+
+00:05:57.040 --> 00:05:59.280
+running on the main branch.
+
+00:05:59.280 --> 00:06:02.760
+So, I think that's typically normal
+
+00:06:02.760 --> 00:06:07.080
+that you might have that.
+
+00:06:07.080 --> 00:06:10.920
+And since the sessions can be considered text,
+
+00:06:10.920 --> 00:06:14.760
+we can just mark these two and check,
+
+00:06:14.760 --> 00:06:18.880
+does this warning exist on the main branch or not?
+
+00:06:18.880 --> 00:06:22.720
+So, we can just diff these ones
+
+00:06:22.720 --> 00:06:27.454
+and we see that the warning is only present
+
+00:06:27.554 --> 00:06:34.040
+on the emacsconf branch.
+
+00:06:34.040 --> 00:06:37.520
+Now, another benefit, in my opinion,
+
+00:06:37.520 --> 00:06:41.840
+of the new way of working is that
+
+00:06:41.840 --> 00:06:43.240
+I have these properties being displayed
+
+00:06:43.240 --> 00:06:45.321
+in the user interface.
+
+00:06:45.421 --> 00:06:48.960
+I can quickly see which commands are still running,
+
+00:06:48.960 --> 00:06:51.360
+what hosts they are running on,
+
+00:06:51.360 --> 00:06:53.388
+where they are running,
+
+00:06:53.488 --> 00:06:58.121
+and for how long they have been running.
+
+00:06:58.221 --> 00:07:00.321
+And if they have run,
+
+00:07:00.421 --> 00:07:04.421
+how long did it take?
+
+00:07:04.521 --> 00:07:06.880
+Occasionally, though, there might be
+
+00:07:06.880 --> 00:07:16.880
+even more input needed to distinguish sessions.
+
+00:07:16.880 --> 00:07:19.600
+So, what I typically do then is
+
+00:07:19.600 --> 00:07:22.200
+press A to annotate the session,
+
+00:07:22.200 --> 00:07:28.988
+I would add a "Warning found at emacsconf"
+
+00:07:29.088 --> 00:07:32.854
+And then it will show up this annotation
+
+00:07:32.954 --> 00:07:44.988
+in the echo area when I select the session.
+
+00:07:45.088 --> 00:07:48.080
+Another great improvement of using these sessions
+
+00:07:48.080 --> 00:07:52.640
+and consider them being text is,
+
+00:07:52.640 --> 00:07:57.321
+now we also see the guix pull completed here.
+
+00:07:57.421 --> 00:08:00.921
+Then we can also select and see that, okay,
+
+00:08:01.021 --> 00:08:08.600
+there is a lot of updates in this command,
+
+00:08:08.600 --> 00:08:10.160
+but let's not look at it now.
+
+00:08:10.160 --> 00:08:17.554
+Let's instead remember that
+
+00:08:17.654 --> 00:08:19.840
+previously last week
+
+00:08:19.840 --> 00:08:21.640
+when I ran a guix pull,
+
+00:08:21.640 --> 00:08:27.680
+I saw an Emacs package that looks interesting.
+
+00:08:27.680 --> 00:08:30.040
+I rather don't remember its full name,
+
+00:08:30.040 --> 00:08:32.720
+but it has something to do with collection.
+
+00:08:32.720 --> 00:08:38.840
+So, what I then can do is
+
+00:08:38.840 --> 00:08:42.280
+remove the 12 hour narrowing criteria,
+
+00:08:42.280 --> 00:08:47.680
+and we can see here I got sessions ranging back
+
+00:08:47.680 --> 00:08:51.040
+even to 28th of October.
+
+00:08:51.040 --> 00:08:55.600
+Since these are just to be considered text,
+
+00:08:55.600 --> 00:08:58.654
+I can--
+
+00:08:58.754 --> 00:09:00.320
+now let's first narrow the sessions
+
+00:09:00.320 --> 00:09:05.188
+to only show the ones that run guix pull.
+
+00:09:05.288 --> 00:09:08.440
+Then I would narrow based on the output
+
+00:09:08.440 --> 00:09:11.280
+containing a regular expression.
+
+00:09:11.280 --> 00:09:14.400
+So, I remember it was something with collection.
+
+00:09:14.400 --> 00:09:19.988
+And we got one hit.
+
+00:09:20.088 --> 00:09:24.088
+Here it should be something with collection.
+
+00:09:24.188 --> 00:09:29.521
+It was emacs-flymake-collection.
+
+00:09:29.621 --> 00:09:34.721
+This is something that is a
+
+00:09:34.821 --> 00:09:38.400
+very nice feature to have.
+
+00:09:38.400 --> 00:09:42.160
+It doesn't create any overhead
+
+00:09:42.160 --> 00:09:45.280
+of having these old sessions lying around
+
+00:09:45.280 --> 00:09:47.400
+and occasionally, it can be interesting
+
+00:09:47.400 --> 00:09:49.680
+to search through them as well.
+
+00:09:49.680 --> 00:09:55.000
+So, for me, this is another example of
+
+00:09:55.000 --> 00:09:59.954
+when bringing workflows into Emacs,
+
+00:10:00.054 --> 00:10:05.021
+it often opens up new exciting possibilities.
+
+00:10:05.121 --> 00:10:10.760
+Thanks a lot for listening.
diff --git a/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt b/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt
new file mode 100644
index 00000000..be063a36
--- /dev/null
+++ b/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt
@@ -0,0 +1,53 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:19.320
+Introduction
+
+8
+00:00:19.320 --> 00:00:42.400
+Emacs 29 release cycle
+
+16
+00:00:42.400 --> 00:01:29.080
+Overlays
+
+36
+00:01:29.080 --> 00:01:46.480
+Eglot
+
+42
+00:01:46.480 --> 00:02:30.840
+Tree-sitter
+
+61
+00:02:30.840 --> 00:03:35.240
+Very long lines
+
+85
+00:03:35.240 --> 00:03:50.080
+SQLite
+
+90
+00:03:50.080 --> 00:04:11.320
+XInput
+
+97
+00:04:11.320 --> 00:04:24.640
+Pure GTK build
+
+101
+00:04:24.640 --> 00:04:31.400
+Drag and drop
+
+103
+00:04:31.400 --> 00:04:35.240
+Double-buffering on Microsoft Windows
+
+104
+00:04:35.240 --> 00:05:00.080
+Emoji input
+
+113
+00:05:00.080 --> 00:05:15.280
+End
diff --git a/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt b/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt
new file mode 100644
index 00000000..a55331b2
--- /dev/null
+++ b/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt
@@ -0,0 +1,473 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:05.320
+Hello, it's time for another Emacs development update.
+
+2
+00:00:05.320 --> 00:00:07.800
+I want to thank the organizers of EmacsConf
+
+3
+00:00:07.800 --> 00:00:10.160
+for putting this together
+
+4
+00:00:10.160 --> 00:00:12.280
+and also the maintainers of Emacs
+
+5
+00:00:12.280 --> 00:00:14.240
+with a special thanks to Eli Zaretskii.
+
+6
+00:00:14.240 --> 00:00:16.560
+It's really he who gave me this information
+
+7
+00:00:16.560 --> 00:00:19.320
+so that I could pass it along to you.
+
+8
+00:00:19.320 --> 00:00:21.720
+The main thing to discuss this time
+
+9
+00:00:21.720 --> 00:00:25.880
+with regard to what's been going on with Emacs is Emacs 29.
+
+10
+00:00:25.880 --> 00:00:29.840
+The release cycle for Emacs 29 should begin in December
+
+11
+00:00:29.840 --> 00:00:32.720
+when a branch will be cut and the release work will start.
+
+12
+00:00:32.720 --> 00:00:36.640
+We should be seeing Emacs 29 coming out fairly soon.
+
+13
+00:00:36.640 --> 00:00:38.120
+Here's just a brief overview
+
+14
+00:00:38.120 --> 00:00:39.680
+of some of the things to look forward to
+
+15
+00:00:39.680 --> 00:00:42.400
+coming up in Emacs 29.
+
+16
+00:00:42.400 --> 00:00:45.680
+Overlays have been re-implemented.
+
+17
+00:00:45.680 --> 00:00:47.240
+If you haven't used them before,
+
+18
+00:00:47.240 --> 00:00:51.040
+overlays are a way to apply a set of properties
+
+19
+00:00:51.040 --> 00:00:53.680
+over a range of text so that
+
+20
+00:00:53.680 --> 00:00:55.840
+you can have things like mouse clicks
+
+21
+00:00:55.840 --> 00:00:57.920
+take on different behavior
+
+22
+00:00:57.920 --> 00:00:59.520
+depending on where it happens in the text.
+
+23
+00:00:59.520 --> 00:01:01.720
+This is different than text properties
+
+24
+00:01:01.720 --> 00:01:04.080
+which associate the properties with the text itself.
+
+25
+00:01:04.080 --> 00:01:07.200
+Overlays do not alter the text in any way
+
+26
+00:01:07.200 --> 00:01:09.320
+and they simply, as the name suggests,
+
+27
+00:01:09.320 --> 00:01:10.920
+overlay on the buffer.
+
+28
+00:01:10.920 --> 00:01:14.040
+Now previously, overlays were implemented as linear lists
+
+29
+00:01:14.040 --> 00:01:15.800
+which got very slow when there were
+
+30
+00:01:15.800 --> 00:01:17.840
+a lot of overlays in a buffer.
+
+31
+00:01:17.840 --> 00:01:19.880
+Now they're being re-implemented as trees,
+
+32
+00:01:19.880 --> 00:01:21.880
+so that searching should be very fast, and
+
+33
+00:01:21.880 --> 00:01:24.400
+in fact, comparable to text properties.
+
+34
+00:01:24.400 --> 00:01:26.520
+This is already on the master branch
+
+35
+00:01:26.520 --> 00:01:29.080
+and (more or less) is ready for release.
+
+36
+00:01:29.080 --> 00:01:32.200
+Eglot has been ported into Emacs.
+
+37
+00:01:32.200 --> 00:01:35.560
+Eglot is an LSP [Language Server Protocol] client for Emacs,
+
+38
+00:01:35.560 --> 00:01:38.480
+one of the two that are often used.
+
+39
+00:01:38.480 --> 00:01:40.840
+But now it's going to be included in core,
+
+40
+00:01:40.840 --> 00:01:42.800
+so it's considered official
+
+41
+00:01:42.800 --> 00:01:46.480
+and will be well integrated with other Emacs features.
+
+42
+00:01:46.480 --> 00:01:48.720
+There's going to be a Tree-sitter library.
+
+43
+00:01:48.720 --> 00:01:53.200
+Tree-sitter is a way of building fast incremental parsers.
+
+44
+00:01:53.200 --> 00:01:56.040
+There's a website on Tree-sitter if you Google for that.
+
+45
+00:01:56.040 --> 00:01:57.760
+This can be used for various features,
+
+46
+00:01:57.760 --> 00:01:59.760
+but first and foremost, it'll be used
+
+47
+00:01:59.760 --> 00:02:02.920
+for fontification and indentation in Emacs.
+
+48
+00:02:02.920 --> 00:02:05.600
+Instead of heuristics and regular expressions,
+
+49
+00:02:05.600 --> 00:02:07.400
+you can now build your fontifications
+
+50
+00:02:07.400 --> 00:02:08.720
+based on a parse tree.
+
+51
+00:02:08.720 --> 00:02:10.640
+There's a branch now that supports this
+
+52
+00:02:10.640 --> 00:02:13.600
+for several modes already, like Python, TypeScript,
+
+53
+00:02:13.600 --> 00:02:15.080
+and JavaScript.
+
+54
+00:02:15.080 --> 00:02:18.160
+We don't have anyone yet working on it for C mode
+
+55
+00:02:18.160 --> 00:02:20.480
+but Eli has challenged whether anyone
+
+56
+00:02:20.480 --> 00:02:21.960
+in the community is interested.
+
+57
+00:02:21.960 --> 00:02:25.960
+He would love to see Tree-sitter support added for C mode,
+
+58
+00:02:25.960 --> 00:02:27.880
+because this has been quite slow
+
+59
+00:02:27.880 --> 00:02:29.640
+when dealing with very, very large files
+
+60
+00:02:29.640 --> 00:02:30.840
+and Tree-sitter should help that.
+
+61
+00:02:30.840 --> 00:02:34.320
+There have been significant improvements
+
+62
+00:02:34.320 --> 00:02:36.560
+in dealing with very long lines.
+
+63
+00:02:36.560 --> 00:02:38.160
+This is something that has been
+
+64
+00:02:38.160 --> 00:02:40.480
+a long time frequent complaint.
+
+65
+00:02:40.480 --> 00:02:42.840
+Emacs becomes rather unusable
+
+66
+00:02:42.840 --> 00:02:45.560
+if you open a giant file that's a single long line.
+
+67
+00:02:45.560 --> 00:02:49.560
+Anyone who's ever tried to open a 30 megabyte JSON file
+
+68
+00:02:49.560 --> 00:02:52.200
+that's all on one line will know this pain.
+
+69
+00:02:52.200 --> 00:02:55.960
+Some modes, however, will have to adapt to this change,
+
+70
+00:02:55.960 --> 00:02:58.320
+because sometimes access to the whole buffer
+
+71
+00:02:58.320 --> 00:03:00.480
+is now forcefully restricted.
+
+72
+00:03:00.480 --> 00:03:04.400
+If the mode requires access to the entire buffer
+
+73
+00:03:04.400 --> 00:03:07.960
+at all times to work, then the developer of that mode
+
+74
+00:03:07.960 --> 00:03:10.240
+will need to devise some simplifications
+
+75
+00:03:10.240 --> 00:03:13.160
+so that they don't require that complete access.
+
+76
+00:03:13.160 --> 00:03:15.760
+For example, if a mode used to go way back
+
+77
+00:03:15.760 --> 00:03:16.880
+to the beginning of the buffer
+
+78
+00:03:16.880 --> 00:03:19.520
+in order to determine if there's an unbalanced parenthesis,
+
+79
+00:03:19.520 --> 00:03:23.160
+this won't work in the new long lines support mode,
+
+80
+00:03:23.160 --> 00:03:25.640
+because the entire buffer is not always available.
+
+81
+00:03:25.640 --> 00:03:27.680
+Emacs is sort of doing some
+
+82
+00:03:27.680 --> 00:03:29.920
+restricting of the buffer heuristically
+
+83
+00:03:29.920 --> 00:03:32.200
+in order to keep the visible range working
+
+84
+00:03:32.200 --> 00:03:35.240
+very, very quickly now.
+
+85
+00:03:35.240 --> 00:03:39.040
+Emacs can now build directly with SQLite.
+
+86
+00:03:39.040 --> 00:03:42.360
+This means that SQLite databases
+
+87
+00:03:42.360 --> 00:03:44.840
+can be directly accessible from Emacs.
+
+88
+00:03:44.840 --> 00:03:47.360
+Should be nice for anyone whose mode wants to
+
+89
+00:03:47.360 --> 00:03:50.080
+cache or store some queryable data.
+
+90
+00:03:50.080 --> 00:03:54.960
+The XInput extension is now up to version 2.
+
+91
+00:03:54.960 --> 00:03:58.160
+There are many extensions in this specification.
+
+92
+00:03:58.160 --> 00:03:59.600
+From the user's point of view,
+
+93
+00:03:59.600 --> 00:04:02.920
+it enables things like smooth scrolling and touch devices.
+
+94
+00:04:02.920 --> 00:04:06.320
+Emacs will now use this by default on all systems
+
+95
+00:04:06.320 --> 00:04:08.360
+where the library is installed.
+
+96
+00:04:08.360 --> 00:04:11.320
+It should be on every modern system that uses X.
+
+97
+00:04:11.320 --> 00:04:15.560
+There's also a pure GTK build in Emacs 29.
+
+98
+00:04:15.560 --> 00:04:17.560
+The purpose of this is to allow Emacs
+
+99
+00:04:17.560 --> 00:04:21.160
+on systems without X, such as Wayland or Broadway,
+
+100
+00:04:21.160 --> 00:04:24.640
+to be able to have a graphical build of Emacs.
+
+101
+00:04:24.640 --> 00:04:27.280
+There's also lots of improvements to drag and drop
+
+102
+00:04:27.280 --> 00:04:31.400
+on X systems, for people who like drag and drop.
+
+103
+00:04:31.400 --> 00:04:35.240
+And there's support for double buffering on Microsoft Windows.
+
+104
+00:04:35.240 --> 00:04:38.480
+The last of the headline features
+
+105
+00:04:38.480 --> 00:04:41.640
+coming for Emacs 29 is emoji input.
+
+106
+00:04:41.640 --> 00:04:43.520
+So there will now be a prefix key,
+
+107
+00:04:43.520 --> 00:04:47.320
+C-x 8 e for emoji input,
+
+108
+00:04:47.320 --> 00:04:50.240
+along with several new commands to insert emoji
+
+109
+00:04:50.240 --> 00:04:52.480
+by various forms of shorthand.
+
+110
+00:04:52.480 --> 00:04:54.360
+There will even be an input method
+
+111
+00:04:54.360 --> 00:04:57.600
+where you can write the plain English names of emojis
+
+112
+00:04:57.600 --> 00:05:00.080
+and have the symbol inserted.
+
+113
+00:05:00.080 --> 00:05:02.160
+So that rounds out some of the features
+
+114
+00:05:02.160 --> 00:05:03.680
+coming up for Emacs 29.
+
+115
+00:05:03.680 --> 00:05:05.680
+Sounds like an exciting release
+
+116
+00:05:05.680 --> 00:05:07.360
+and it should be headed your way soon.
+
+117
+00:05:07.360 --> 00:05:09.880
+I hope everybody has fun at the conference
+
+118
+00:05:09.880 --> 00:05:15.280
+and enjoy yourselves.
diff --git a/2022/captions/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt b/2022/captions/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..1e7ab934
--- /dev/null
+++ b/2022/captions/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt
@@ -0,0 +1,489 @@
+WEBVTT captioned by eduardo
+Kind: captions:
+Language: en-GB
+
+00:00:00.000 --> 00:00:04.000
+Hi! My name is Eduardo Ochs. I'm the author
+
+00:00:04.000 --> 00:00:06.000
+of an Emacs package called eev, and the name
+
+00:00:06.000 --> 00:00:09.000
+of this presentation is: "Bidirectional links
+
+00:00:09.000 --> 00:00:10.000
+in eev".
+
+00:00:10.000 --> 00:00:13.000
+Let me present things in a weird order,
+
+00:00:13.000 --> 00:00:16.000
+starting by the new feature, and then I'm
+
+00:00:16.000 --> 00:00:20.000
+going to explain the whole context.
+
+00:00:20.000 --> 00:00:22.000
+One of the main features that we are
+
+00:00:22.000 --> 00:00:24.000
+going to see here is this function here,
+
+00:00:24.000 --> 00:00:27.000
+M-x kla, and kla is a mnemonic for "kill
+
+00:00:27.000 --> 00:00:31.000
+Link to Anchor". Let me explain... let me
+
+00:00:31.000 --> 00:00:33.000
+demonstrate how it works. This thing here
+
+00:00:33.000 --> 00:00:36.000
+with the green angle brackets is an
+
+00:00:36.000 --> 00:00:40.000
+anchor, this thing between the green
+
+00:00:40.000 --> 00:00:42.000
+angle brackets is a tag of an
+
+00:00:42.000 --> 00:00:46.000
+anchor, and if I type M-x kla here
+
+00:00:46.000 --> 00:00:49.000
+it highlights this tag for a second and
+
+00:00:49.000 --> 00:00:52.000
+it says "Copied to the kill ring: blah
+
+00:00:52.000 --> 00:00:54.000
+blah blah..." and this thing here is a link.
+
+00:00:54.000 --> 00:00:57.000
+I can insert the link here, I
+
+00:00:57.000 --> 00:01:00.000
+can insert the link in my notes...
+
+00:01:00.000 --> 00:01:03.000
+and if I execute this thing this link
+
+00:01:03.000 --> 00:01:10.000
+here it goes to this anchor in this file.
+
+00:01:10.000 --> 00:01:12.000
+If you have a recent version of eev
+
+00:01:12.000 --> 00:01:13.000
+installed then trying this feature
+
+00:01:13.000 --> 00:01:15.000
+should be very easy...
+
+00:01:15.000 --> 00:01:18.000
+you just need to open the this file here,
+
+00:01:18.000 --> 00:01:21.000
+in which everything is defined, and then
+
+00:01:21.000 --> 00:01:23.000
+go to this section at the beginning of
+
+00:01:23.000 --> 00:01:26.000
+the file, and then run the three blocks
+
+00:01:26.000 --> 00:01:28.000
+of tests that are there.
+
+00:01:28.000 --> 00:01:31.000
+This block corresponds roughly to what
+
+00:01:31.000 --> 00:01:33.000
+we have just done...
+
+00:01:33.000 --> 00:01:36.000
+this other block
+
+00:01:36.000 --> 00:01:40.000
+is slightly different because it shows
+
+00:01:40.000 --> 00:01:44.000
+some variants of kla... one is with `f`
+
+00:01:44.000 --> 00:01:48.000
+instead of an `a` here, let me
+
+00:01:48.000 --> 00:01:51.000
+show how it works... if we type
+
+00:01:51.000 --> 00:01:57.000
+`M-x eeklf` or just `M-x klf`
+
+00:01:57.000 --> 00:02:00.000
+we get a link to this file that does not
+
+00:02:00.000 --> 00:02:03.000
+point to an anchor, and if we type
+
+00:02:03.000 --> 00:02:07.000
+`M-x klt` we get another kind of link that
+
+00:02:07.000 --> 00:02:09.000
+is a link to an anchor in the same
+
+00:02:09.000 --> 00:02:11.000
+file...
+
+00:02:11.000 --> 00:02:16.000
+and the third block
+
+00:02:16.000 --> 00:02:18.000
+is more interesting because it lets
+
+00:02:18.000 --> 00:02:20.000
+people create links to files that
+
+00:02:20.000 --> 00:02:23.000
+are elsewhere, and that do not have
+
+00:02:23.000 --> 00:02:25.000
+anchors in them...
+
+00:02:25.000 --> 00:02:29.000
+let me execute this... this will
+
+00:02:29.000 --> 00:02:32.000
+run this sexp here and display the
+
+00:02:32.000 --> 00:02:35.000
+target at the window at the right...
+
+00:02:35.000 --> 00:02:41.000
+this is one of the source files of Emacs.
+
+00:02:41.000 --> 00:02:43.000
+Let's imagine that I want to create a
+
+00:02:43.000 --> 00:02:46.000
+link to this string here... then I can
+
+00:02:46.000 --> 00:02:51.000
+type `M-x klfs`, and this will create a
+
+00:02:51.000 --> 00:02:53.000
+link to a file and to a string in that
+
+00:02:53.000 --> 00:02:56.000
+file. So if I type ENTER here
+
+00:02:56.000 --> 00:02:59.000
+it says: "Copied to the kill ring: ...\
+
+00:02:59.000 --> 00:03:02.000
+and this is a link to this file here,
+
+00:03:02.000 --> 00:03:04.000
+and to the first occurrence of this
+
+00:03:04.000 --> 00:03:10.000
+string in this file.
+
+00:03:10.000 --> 00:03:14.000
+So: how does this work (inside)?...
+
+00:03:14.000 --> 00:03:16.000
+when I was trying to write the documentation
+
+00:03:16.000 --> 00:03:19.000
+of this I tried to write a summary of
+
+00:03:19.000 --> 00:03:21.000
+how the algorithm works, and I failed and
+
+00:03:21.000 --> 00:03:23.000
+I tried again, and I failed again,
+
+00:03:23.000 --> 00:03:26.000
+several times... and then I gave up and I
+
+00:03:26.000 --> 00:03:29.000
+decided to write an intro - a tutorial,
+
+00:03:29.000 --> 00:03:31.000
+this one -
+
+00:03:31.000 --> 00:03:34.000
+that explains everything with lots of
+
+00:03:34.000 --> 00:03:35.000
+details, and with lots of sections
+
+00:03:35.000 --> 00:03:39.000
+with "Try it!"s, that
+
+00:03:39.000 --> 00:03:41.000
+have examples that you you can run to
+
+00:03:41.000 --> 00:03:44.000
+understand things, to examine how some
+
+00:03:44.000 --> 00:03:48.000
+functions work, how the data
+
+00:03:48.000 --> 00:03:51.000
+structures work, and so on...
+
+00:03:51.000 --> 00:03:54.000
+the problem is that sometimes we have
+
+00:03:54.000 --> 00:03:56.000
+several hyperlinks that point to the to
+
+00:03:56.000 --> 00:04:00.000
+the same file. Let me give an example.
+
+00:04:00.000 --> 00:04:04.000
+In the configuration in which I am now,
+
+00:04:04.000 --> 00:04:07.000
+in this file here... the old way of
+
+00:04:07.000 --> 00:04:08.000
+generating hyperlinks to this file
+
+00:04:08.000 --> 00:04:10.000
+with `find-here-links`
+
+00:04:10.000 --> 00:04:13.000
+will generate a temporary buffer
+
+00:04:13.000 --> 00:04:15.000
+like this, and then I would have to
+
+00:04:15.000 --> 00:04:18.000
+choose which one of these hyperlinks I
+
+00:04:18.000 --> 00:04:21.000
+find best, which one I prefer, and then
+
+00:04:21.000 --> 00:04:25.000
+copy it to my notes... so instead
+
+00:04:25.000 --> 00:04:27.000
+of choosing a hyperlink this thing here
+
+00:04:27.000 --> 00:04:30.000
+shows all the options.
+
+00:04:30.000 --> 00:04:34.000
+And in the new way, in `M-x kla`
+
+00:04:34.000 --> 00:04:37.000
+and friends, there's an algorithm that
+
+00:04:37.000 --> 00:04:39.000
+chooses the best short hyperlink by
+
+00:04:39.000 --> 00:04:43.000
+itself, and this algorithm is a bit hard
+
+00:04:43.000 --> 00:04:46.000
+to explain... let me demonstrate it here.
+
+00:04:46.000 --> 00:04:50.000
+Again, we have all these options here, of
+
+00:04:50.000 --> 00:04:51.000
+hyperlinks to this file...
+
+00:04:51.000 --> 00:04:56.000
+and if I type `M-x klf`
+
+00:04:56.000 --> 00:04:58.000
+it chooses one of them.
+
+00:04:58.000 --> 00:05:01.000
+And of course I can copy it to my notes,
+
+00:05:01.000 --> 00:05:02.000
+it's going to work, it's going to point
+
+00:05:02.000 --> 00:05:05.000
+to here... and so on.
+
+00:05:05.000 --> 00:05:08.000
+Well, the title of this presentation was
+
+00:05:08.000 --> 00:05:11.000
+"Bidirectional links with eev"... let me
+
+00:05:11.000 --> 00:05:13.000
+show what I mean by bi-directional
+
+00:05:13.000 --> 00:05:15.000
+hyperlinks, and how we can use this thing
+
+00:05:15.000 --> 00:05:17.000
+to create bidirectional hyperlinks
+
+00:05:17.000 --> 00:05:19.000
+very quickly.
+
+00:05:19.000 --> 00:05:22.000
+I will have to use a smaller font... let
+
+00:05:22.000 --> 00:05:25.000
+me open these two files here. This one at
+
+00:05:25.000 --> 00:05:27.000
+the left is a program in Haskell, and
+
+00:05:27.000 --> 00:05:30.000
+this one is a file with my notes on
+
+00:05:30.000 --> 00:05:31.000
+Haskell.
+
+00:05:31.000 --> 00:05:35.000
+How do I create a link from...
+
+00:05:35.000 --> 00:05:39.000
+to this file in Haskell
+
+00:05:39.000 --> 00:05:42.000
+to put it in this file here? I can put
+
+00:05:42.000 --> 00:05:45.000
+the cursor here, in any position
+
+00:05:45.000 --> 00:05:48.000
+after this anchor here, and type
+
+00:05:48.000 --> 00:05:49.000
+`M-x kla`...
+
+00:05:49.000 --> 00:05:51.000
+it copies this link here to the kill
+
+00:05:51.000 --> 00:05:54.000
+ring and then I can can go here and
+
+00:05:54.000 --> 00:05:59.000
+either insert it with C-y (yank), or
+
+00:05:59.000 --> 00:06:06.000
+insert it with `M-k kli`, that adds a
+
+00:06:06.000 --> 00:06:07.000
+comment prefix here.
+
+00:06:07.000 --> 00:06:11.000
+So this is a way to create a link from
+
+00:06:11.000 --> 00:06:15.000
+here to there in which every
+
+00:06:15.000 --> 00:06:18.000
+comment has to be given explicitly...
+
+00:06:18.000 --> 00:06:21.000
+but I also implemented a way to
+
+00:06:21.000 --> 00:06:23.000
+create the two links at the same time.
+
+00:06:23.000 --> 00:06:25.000
+I don't use it much, it's mostly for
+
+00:06:25.000 --> 00:06:27.000
+demos, because it's impressive, I wanted
+
+00:06:27.000 --> 00:06:29.000
+to show that in this presentation...
+
+00:06:29.000 --> 00:06:33.000
+Anyway, let me show it here. Note that
+
+00:06:33.000 --> 00:06:36.000
+that in this file here the point is
+
+00:06:36.000 --> 00:06:40.000
+here, in this file the point is here...
+
+00:06:40.000 --> 00:06:43.000
+My trick is going to create a link to
+
+00:06:43.000 --> 00:06:47.000
+this anchor and put it in this file, and
+
+00:06:47.000 --> 00:06:49.000
+it's going to create a link to this
+
+00:06:49.000 --> 00:06:52.000
+anchor and put it in this file...
+
+00:06:52.000 --> 00:06:57.000
+So, here it goes: `M-x kla2`... ta-da!
+
+00:06:57.000 --> 00:07:01.000
+it highlighted the true anchors for a
+
+00:07:01.000 --> 00:07:03.000
+second, and it created these things here
+
+00:07:03.000 --> 00:07:06.000
+and inserted them with the
+
+00:07:06.000 --> 00:07:09.000
+right prefixes, I mean, the right
+
+00:07:09.000 --> 00:07:10.000
+comment prefixes.
+
+00:07:10.000 --> 00:07:15.000
+And that's it!
+
+00:07:15.000 --> 00:07:18.000
+So... that's it. If you found this thing
+
+00:07:18.000 --> 00:07:22.000
+interesting just
+
+00:07:22.000 --> 00:07:25.000
+install a recent version of eev and run
+
+00:07:25.000 --> 00:07:28.000
+the tutorial, either with this thing here,
+
+00:07:28.000 --> 00:07:30.000
+`M-x find-kla-intro`, or by running
+
+00:07:30.000 --> 00:07:35.000
+this sexp, or open this file here in the
+
+00:07:35.000 --> 00:07:37.000
+eev directory, and follow the
+
+00:07:37.000 --> 00:07:39.000
+tutorials...
+
+00:07:39.000 --> 00:07:42.000
+most things that there are well
+
+00:07:42.000 --> 00:07:46.000
+documented, but the thing that I don't
+
+00:07:46.000 --> 00:07:47.000
+use much and that is mostly for demos,
+
+00:07:47.000 --> 00:07:50.000
+which is the the thing that creates
+
+00:07:50.000 --> 00:07:52.000
+bi-directional hyperlinks, is not yet
+
+00:07:52.000 --> 00:07:55.000
+well documented, but the rest is.
+
+00:07:55.000 --> 00:07:57.000
+So: that's it! Bye! Have fun! =)
diff --git a/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.vtt b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.vtt
new file mode 100644
index 00000000..ab7a4207
--- /dev/null
+++ b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.vtt
@@ -0,0 +1,1184 @@
+WEBVTT
+
+00:00.000 --> 00:03.580
+Thanks, Howard, for the great talk.
+
+00:03.580 --> 00:05.580
+We have the Q&A now open.
+
+00:05.580 --> 00:09.740
+Folks are welcome to put their questions on the pad on IRC, and we might also open up
+
+00:09.740 --> 00:14.500
+this room in a few minutes if you might prefer to join Big Blue Button directly and ask your
+
+00:14.500 --> 00:16.300
+questions to Howard that way.
+
+00:16.300 --> 00:19.960
+Yeah, so Howard, take it away.
+
+00:19.960 --> 00:20.960
+Thank you, thank you.
+
+00:20.960 --> 00:24.020
+Yeah, I wasn't expecting to have a Q&A.
+
+00:24.020 --> 00:28.180
+Tried to condense it so fast because this was supposed to be a lightning talk, but hey,
+
+00:28.180 --> 00:31.280
+it's good to talk to everybody.
+
+00:31.280 --> 00:37.080
+So question on the Etherpad here is, do I fall back to vterm only when needing terminal
+
+00:37.080 --> 00:39.120
+emulation?
+
+00:39.120 --> 00:46.160
+And yeah, I kind of know when I'm going to need that based on the use case.
+
+00:46.160 --> 00:50.000
+Like right now, I'm doing a lot of building with Docker, and Docker just makes a mess
+
+00:50.000 --> 00:51.060
+out of everything.
+
+00:51.060 --> 00:56.460
+And so I can sometimes will like start up a vterm for that.
+
+00:56.460 --> 00:59.920
+But I don't like actually typing a lot of stuff in there as much.
+
+00:59.920 --> 01:06.400
+So actually, I wrote a little program to, you know, the compile command, I just send
+
+01:06.400 --> 01:10.560
+the compile over into it that I could see the output and then I could just and it pops
+
+01:10.560 --> 01:12.080
+right back to where I'm at.
+
+01:12.080 --> 01:17.920
+So I don't know, I think you kind of need to use a little bit of both.
+
+01:17.920 --> 01:22.280
+But yeah, it would be nice to kind of flip a window back and forth because there's some
+
+01:22.280 --> 01:26.700
+things about Eshell that I actually do like a lot.
+
+01:26.700 --> 01:34.240
+Now my Tramp suggestion, okay, I'll admit Tramp is, it's kind of fickle.
+
+01:34.240 --> 01:39.920
+I think we all get sometimes better use cases out of it than others.
+
+01:39.920 --> 01:45.200
+Uh oh, my headphones are out of batteries here.
+
+01:45.200 --> 01:48.640
+So we might have to flip here.
+
+01:48.640 --> 01:51.280
+But yeah, so the Tramp, I don't know.
+
+01:51.280 --> 01:56.320
+I think we have to kind of play with it and see how it goes.
+
+01:56.320 --> 02:02.480
+See another question is, have we thought about adding the Eshell manual?
+
+02:02.480 --> 02:10.340
+You know, after doing this talk and I'm realizing a lot of the half baked or almost good stuff
+
+02:10.340 --> 02:15.120
+with Eshell that we could just kind of fix a little bit and some of the, especially some
+
+02:15.120 --> 02:21.520
+of the docs, yeah, I'm kind of thinking that maybe, maybe I should hook up with somebody
+
+02:21.520 --> 02:27.120
+and we could try to do a little bit of extensions there, you know, like fix up the manual a
+
+02:27.120 --> 02:31.840
+little bit more, make it more of a tutorial, I think would help as well as fixing some
+
+02:31.840 --> 02:34.560
+of the little problems like that.
+
+02:34.560 --> 02:43.200
+Trying to be able to cat a buffer into the shell, I think is pretty useful.
+
+02:43.200 --> 02:46.160
+Let's see, do I know if Eshell can be used from Elisp?
+
+02:46.160 --> 02:48.160
+Yeah, I use that quite a bit.
+
+02:48.160 --> 02:52.920
+I actually have functions that call an Eshell command.
+
+02:52.920 --> 02:59.440
+That way I get all of the, you know, the benefits that you can get from an Eshell, like with
+
+02:59.440 --> 03:02.000
+the predicates and all that kind of thing.
+
+03:02.000 --> 03:06.480
+I can't remember who's been doing it, but lately I've been seeing a lot of the do what
+
+03:06.480 --> 03:13.400
+I mean shell commands that they're, they're building up a bunch of functions that do very
+
+03:13.400 --> 03:16.360
+specific things, what they need.
+
+03:16.360 --> 03:23.120
+And it seems like there's a lot of like special commands they're adding into it to like get
+
+03:23.120 --> 03:24.960
+the file name and that sort of thing.
+
+03:24.960 --> 03:29.680
+And I was thinking, Hey, that's a great idea, but let's do it with Eshell.
+
+03:29.680 --> 03:33.880
+So I've been doing something similar, but just calling out to Eshell itself.
+
+03:33.880 --> 03:39.800
+Let's see, next question, how does that interplay with my literate dellop bop approach?
+
+03:39.800 --> 03:41.760
+Yeah, the two are different.
+
+03:41.760 --> 03:48.600
+You know, when I'm doing my literate work, you know, I'm in an org file and I'm just
+
+03:48.600 --> 03:56.720
+writing commands, but yeah, sometimes it's just a little bit, you know, I'm not planning
+
+03:56.720 --> 03:57.720
+on keeping it.
+
+03:57.720 --> 04:02.720
+I'm just kind of investigating things and that's what rebels are really good for.
+
+04:02.720 --> 04:06.840
+And in that case, yeah, I'll pop over into Eshell, write things.
+
+04:06.840 --> 04:11.640
+If I see something good, that's where I was talking about my little engineering notebook,
+
+04:11.640 --> 04:17.080
+sending it out to a capture and then, and capturing it out or writing it into a buffer
+
+04:17.080 --> 04:19.600
+where I can do more things to it.
+
+04:19.600 --> 04:23.960
+I guess it's the flexibility I think we all kind of need because you don't know exactly
+
+04:23.960 --> 04:25.920
+where you're going until you're halfway there.
+
+04:25.920 --> 04:29.100
+And it's like, Oh, I don't want to start up a new app.
+
+04:29.100 --> 04:32.200
+That's why we're an Emacs.
+
+04:32.200 --> 04:33.200
+So yeah.
+
+04:33.200 --> 04:34.200
+Oh yeah.
+
+04:34.200 --> 04:35.200
+Thank you.
+
+04:35.200 --> 04:36.200
+Yeah.
+
+04:36.200 --> 04:37.200
+Alvaro Ramineers.
+
+04:37.200 --> 04:38.200
+Yeah.
+
+04:38.200 --> 04:40.880
+That's the stuff I've been reading a lot about.
+
+04:40.880 --> 04:41.880
+Let's see.
+
+04:41.880 --> 04:42.880
+Another question.
+
+04:42.880 --> 04:47.340
+Do I have a strategy for getting around Eshell's lack of support for input redirection?
+
+04:47.340 --> 04:50.520
+You know, it is what it is.
+
+04:50.520 --> 04:54.900
+I don't have any ideas at the moment.
+
+04:54.900 --> 04:56.480
+It's a good idea.
+
+04:56.480 --> 05:03.160
+Whenever, you know, we're so used to doing pipes and whenever you start doing a pipe
+
+05:03.160 --> 05:08.040
+at all, Eshell just immediately throws it into the shell.
+
+05:08.040 --> 05:11.280
+But then pulling it back in is kind of difficult.
+
+05:11.280 --> 05:15.480
+So that's why I just started writing them out to buffers and then pulling them back
+
+05:15.480 --> 05:16.480
+in.
+
+05:16.480 --> 05:21.720
+And I find that just a little bit more useful situation for what I'm doing.
+
+05:21.720 --> 05:27.040
+I don't know if other people will find it as useful as I do.
+
+05:27.040 --> 05:31.440
+But yeah, I'm getting a little tired of trying to get just the right command of piping everything
+
+05:31.440 --> 05:32.440
+together.
+
+05:32.440 --> 05:38.200
+And two years ago when I was talking about my little piper idea, this is kind of what
+
+05:38.200 --> 05:44.040
+it's morphed into was just using Eshell, running the commands, editing the stuff and then pulling
+
+05:44.040 --> 05:47.400
+it back in to send it to some other app.
+
+05:47.400 --> 05:54.720
+Or not even pulling it back in, just using it at that point and sending it off into emails.
+
+05:54.720 --> 06:02.400
+Yes, you can call elist functions, the commands.
+
+06:02.400 --> 06:05.560
+I was hoping this could be kind of clarified a little bit.
+
+06:05.560 --> 06:12.520
+But if you have any function, any emacs list function that starts with Eshell slash, that
+
+06:12.520 --> 06:14.880
+gets called first before any command.
+
+06:14.880 --> 06:18.800
+So you can override just about every shell command.
+
+06:18.800 --> 06:20.240
+That many of them are.
+
+06:20.240 --> 06:22.400
+So there is an Eshell slash ls.
+
+06:22.400 --> 06:27.560
+So if you type ls into your Eshell, it's actually calling that function.
+
+06:27.560 --> 06:32.540
+Now most of those functions will, if it runs into too many options that it doesn't know
+
+06:32.540 --> 06:40.040
+about or something like that, call out to whatever ls program you've got installed.
+
+06:40.040 --> 06:44.600
+But that's how it goes.
+
+06:44.600 --> 06:48.120
+So yes, buffers are superior pipes.
+
+06:48.120 --> 06:50.880
+Whoever is typing that, I think that's a great idea.
+
+06:50.880 --> 06:55.840
+I think that's kind of the concept that I'm realizing this year.
+
+06:55.840 --> 07:06.320
+Hold on one second while I switch headphones here.
+
+07:06.320 --> 07:08.640
+I suppose you can still hear me, right?
+
+07:08.640 --> 07:11.960
+Yep, I can still hear you.
+
+07:11.960 --> 07:18.760
+Well, nobody's talking yet.
+
+07:18.760 --> 07:20.800
+I can still hear you.
+
+07:20.800 --> 07:22.720
+OK, perfect, perfect.
+
+07:22.720 --> 07:23.720
+And I can hear you too.
+
+07:23.720 --> 07:26.800
+So that works well.
+
+07:26.800 --> 07:28.260
+Let's see.
+
+07:28.260 --> 07:30.280
+Any other questions in the IRC?
+
+07:30.280 --> 07:35.040
+Not seeing them mostly in the etherpad here.
+
+07:35.040 --> 07:42.600
+Do I have a preferred method for getting argument completion for shell commands?
+
+07:42.600 --> 07:46.120
+OK, that's a really good question.
+
+07:46.120 --> 07:53.720
+There is a function that I found in Eshell for getting options.
+
+07:53.720 --> 07:57.620
+And it's like, great, that's what I was expecting, something like a get ops.
+
+07:57.620 --> 08:02.040
+So I start playing around with it, and it's like almost there.
+
+08:02.040 --> 08:05.160
+The problem is it's not really as flexible as I would think.
+
+08:05.160 --> 08:08.320
+It either takes command line arguments or it doesn't.
+
+08:08.320 --> 08:13.880
+And it's kind of made for very simple commands only.
+
+08:13.880 --> 08:18.200
+So well, I ended up writing my own.
+
+08:18.200 --> 08:22.480
+So I wrote kind of a get ops like function, kind of behaves like it, where you can give
+
+08:22.480 --> 08:28.240
+it a list of single commands, a list of those long commands, some that take options and
+
+08:28.240 --> 08:30.280
+some that don't.
+
+08:30.280 --> 08:36.920
+And you'll see that in my, where I've got it here in the etherpad up on the full code.
+
+08:36.920 --> 08:41.200
+I also posted it up on Mastodon as well earlier.
+
+08:41.200 --> 08:44.240
+But I have a link to my configuration file.
+
+08:44.240 --> 08:45.240
+It's all literate.
+
+08:45.240 --> 08:50.200
+So you can just scroll down, search for get ops, and you'll see my function.
+
+08:50.200 --> 08:53.720
+I haven't fully tested out everything yet.
+
+08:53.720 --> 08:57.720
+Most of the code was actually written for this talk, I found.
+
+08:57.720 --> 09:01.200
+And so there will be bugs.
+
+09:01.200 --> 09:07.340
+But you know, you might find it interesting to grab some of the stuff and play around
+
+09:07.340 --> 09:08.340
+with it.
+
+09:08.340 --> 09:10.440
+If you find some bugs, please send them back to me.
+
+09:10.440 --> 09:14.320
+I'll discover them soon enough.
+
+09:14.320 --> 09:19.720
+So is it possible to get L.base completion for elist calls and eshell?
+
+09:19.720 --> 09:20.720
+Good question.
+
+09:20.720 --> 09:23.920
+I don't know.
+
+09:23.920 --> 09:28.160
+I have been switching from company mode to Corfu.
+
+09:28.160 --> 09:30.120
+Just try it all out.
+
+09:30.120 --> 09:37.080
+I'm getting some pretty good completions, but the EL doc based would be, that would
+
+09:37.080 --> 09:43.120
+be very lovely.
+
+09:43.120 --> 09:45.040
+A plan nine smart shell.
+
+09:45.040 --> 09:46.400
+Sorry, sorry.
+
+09:46.400 --> 09:47.400
+Oh, yes.
+
+09:47.400 --> 09:58.160
+I do remember reading Mickey Peterson's article on eshell and his plan nine idea.
+
+09:58.160 --> 10:04.240
+I was playing around with it for a little bit, but I don't know.
+
+10:04.240 --> 10:05.240
+Yeah.
+
+10:05.240 --> 10:11.720
+I couldn't get it quite working the way I thought I would want it to, so I didn't follow
+
+10:11.720 --> 10:12.720
+through.
+
+10:12.720 --> 10:18.600
+But I just got some good ideas there.
+
+10:18.600 --> 10:21.080
+Any other questions?
+
+10:21.080 --> 10:27.680
+But yes, I should, yeah, I should revisit Mickey Peterson's ideas.
+
+10:27.680 --> 10:28.680
+Say it again.
+
+10:28.680 --> 10:29.680
+Cool.
+
+10:29.680 --> 10:30.680
+Yeah, sorry.
+
+10:30.680 --> 10:32.720
+I guess I was just going to ask a question on the fly here.
+
+10:32.720 --> 10:33.720
+Sure.
+
+10:33.720 --> 10:38.040
+Yeah, which is, so you mentioned this sort of get up function or get up like function
+
+10:38.040 --> 10:39.040
+that you implemented.
+
+10:39.040 --> 10:43.840
+Would you consider maybe having that integrated in Emacs core itself so that it's available
+
+10:43.840 --> 10:46.880
+to all other eshell users?
+
+10:46.880 --> 10:54.040
+I think that'd be a great idea and I'm kind of thinking I need to kind of see what should
+
+10:54.040 --> 11:00.760
+go into eshell and what should maybe be like a side package like eshell ext kind of thing
+
+11:00.760 --> 11:07.200
+for getting some extra stuff because I don't know if everybody wants all of it.
+
+11:07.200 --> 11:13.800
+So having a side package might be a really good idea and then seeing, yeah.
+
+11:13.800 --> 11:15.760
+So yes, if you want to work on it with me.
+
+11:15.760 --> 11:16.760
+Yeah, sure.
+
+11:16.760 --> 11:17.760
+Sounds good.
+
+11:17.760 --> 11:18.760
+Why not?
+
+11:18.760 --> 11:19.760
+Sure.
+
+11:19.760 --> 11:20.760
+Sure.
+
+11:20.760 --> 11:23.840
+All right.
+
+11:23.840 --> 11:30.200
+Any other questions or good?
+
+11:30.200 --> 11:32.360
+I think we still have about, sorry.
+
+11:32.360 --> 11:33.360
+Go ahead.
+
+11:33.360 --> 11:36.760
+Oh, I was going to say I think we're out of questions.
+
+11:36.760 --> 11:37.760
+Right?
+
+11:37.760 --> 11:38.760
+Yeah.
+
+11:38.760 --> 11:39.760
+But we still are not out of time yet.
+
+11:39.760 --> 11:49.400
+So I think I've got more time for Q&A than I thought I had for the actual talk.
+
+11:49.400 --> 11:52.280
+Yeah, it's been interesting.
+
+11:52.280 --> 11:57.360
+So we were kind of debating on switching to two tracks like we have done this year or
+
+11:57.360 --> 12:01.240
+keeping or maintaining the same setup as the previous years, which was one track.
+
+12:01.240 --> 12:06.280
+But sort of all the talks were very like squeezing together and it was a last minute decision
+
+12:06.280 --> 12:07.280
+kind of.
+
+12:07.280 --> 12:10.000
+And we almost did end up going back to one track.
+
+12:10.000 --> 12:11.000
+But we're here.
+
+12:11.000 --> 12:14.760
+And I think that's the reason why some of the Q&As are sometimes longer than the talks
+
+12:14.760 --> 12:15.760
+themselves.
+
+12:15.760 --> 12:18.080
+Well, okay.
+
+12:18.080 --> 12:22.340
+So personally, I love the two track idea and I love all the breaks.
+
+12:22.340 --> 12:27.200
+It's made it a lot easier because last year it's like, oh, I can't even get up.
+
+12:27.200 --> 12:29.860
+Yeah, I feel you.
+
+12:29.860 --> 12:30.860
+And I feel the same too.
+
+12:30.860 --> 12:34.940
+Both, I mean, as someone who's been a little bit watching, but also as organizers, I mean,
+
+12:34.940 --> 12:39.360
+you couldn't catch a breath with like that one track rapid fire of talks one after another.
+
+12:39.360 --> 12:41.760
+So this is much better, I feel like.
+
+12:41.760 --> 12:42.760
+Yeah.
+
+12:42.760 --> 12:43.760
+Yeah.
+
+12:43.760 --> 12:44.760
+So let's keep it.
+
+12:44.760 --> 12:45.760
+Let's keep it going.
+
+12:45.760 --> 12:46.760
+Yeah.
+
+12:46.760 --> 12:48.760
+And next year, maybe I can do 15 minutes.
+
+12:48.760 --> 12:49.760
+Yes.
+
+12:49.760 --> 12:50.760
+Mal?
+
+12:50.760 --> 12:51.760
+Yes.
+
+12:51.760 --> 12:54.560
+Are you the maintainer of Eshell now?
+
+12:54.560 --> 12:56.560
+No, I'm not.
+
+12:56.560 --> 12:59.680
+Just an interested bystander.
+
+12:59.680 --> 13:03.200
+I think Eshell is still just part of Core.
+
+13:03.200 --> 13:09.260
+John Wiggly wrote it originally, but I think it's just part of the core.
+
+13:09.260 --> 13:13.540
+So I don't think anyone is maintaining it per se.
+
+13:13.540 --> 13:18.160
+It certainly is getting a little long in the tooth and we probably need to do some updatings
+
+13:18.160 --> 13:19.160
+on it.
+
+13:19.160 --> 13:21.720
+So maybe that's what we should do for version 30.
+
+13:21.720 --> 13:27.400
+Yeah, I've started to use it a little bit more just because of all the chatter on the
+
+13:27.400 --> 13:29.100
+various blogs, right?
+
+13:29.100 --> 13:31.240
+There is a lot of chatter lately.
+
+13:31.240 --> 13:38.080
+But it burned me recently for like half an hour because I was trying to SSH into a machine
+
+13:38.080 --> 13:39.080
+from Eshell.
+
+13:39.080 --> 13:45.240
+And usually, I use just regular shell mode.
+
+13:45.240 --> 13:53.160
+And for some reason, it just didn't connect up to the SSH agent or whatever.
+
+13:53.160 --> 13:57.840
+So I was thinking that everything's broken and stuff.
+
+13:57.840 --> 13:59.800
+I'm like running around trying to do stuff.
+
+13:59.800 --> 14:03.600
+Oh, it's just because I'm in Eshell trying to do this.
+
+14:03.600 --> 14:04.600
+Yes, yes.
+
+14:04.600 --> 14:07.600
+And if I know I'm going to be SSHing into a box, I don't.
+
+14:07.600 --> 14:10.280
+I just start up vterm and go.
+
+14:10.280 --> 14:12.280
+Then I know it's going to be pretty good.
+
+14:12.280 --> 14:16.240
+I've had a lot of good success in that regard with vterm.
+
+14:16.240 --> 14:21.360
+However, the problem is it's hard to pull that kind of stuff back.
+
+14:21.360 --> 14:25.040
+Like I'll find something interesting and it's like, oh, crap.
+
+14:25.040 --> 14:31.400
+Now I have to control C, control T, and then go up and collect it as opposed to shooting
+
+14:31.400 --> 14:37.040
+it out over into an org file with a redirection.
+
+14:37.040 --> 14:41.480
+That's why I've been kind of playing around with just using Tramp in Eshell as opposed
+
+14:41.480 --> 14:44.040
+to SSHing in.
+
+14:44.040 --> 14:46.040
+My knowledge may vary.
+
+14:46.040 --> 14:51.400
+I thought in the command interpreter, there's some stuff like...
+
+14:51.400 --> 14:52.400
+There is.
+
+14:52.400 --> 14:57.760
+It's supposed to be the visual commands.
+
+14:57.760 --> 15:02.200
+I think there's a list of them, and SSH is one of those.
+
+15:02.200 --> 15:11.920
+It's supposed to then start off as a shell mode, detached little process and feed stuff,
+
+15:11.920 --> 15:13.560
+but I don't know.
+
+15:13.560 --> 15:16.680
+I haven't had as much luck with it, so I haven't really bothered.
+
+15:16.680 --> 15:18.320
+I just jump.
+
+15:18.320 --> 15:21.400
+If I know I'm going to SSH, I'll just start a vterm and go.
+
+15:21.400 --> 15:29.240
+Well, I mean, aside from doing SSH, just using...
+
+15:29.240 --> 15:31.320
+I think there are a couple commands for...
+
+15:31.320 --> 15:38.720
+There's one for taking the command on the command line and putting it into the kill
+
+15:38.720 --> 15:44.880
+ring, and there's another one for flushing the buffer, flushing the last output of your
+
+15:44.880 --> 15:55.080
+buffer, and it works in many different shell or repl-type environments inside Emacs, but
+
+15:55.080 --> 16:00.520
+it doesn't put it into the kill ring, which was sort of confusing to me, so I'll have
+
+16:00.520 --> 16:07.000
+to dive into the Elisp at some point and figure out how to get what I want.
+
+16:07.000 --> 16:09.680
+I think that's the problem with this Eshell.
+
+16:09.680 --> 16:19.860
+There's a lot of interesting ideas, but there's a lot that's not quite baked yet.
+
+16:19.860 --> 16:26.280
+It's a combination of what we expect, because it's not a terminal emulator shell.
+
+16:26.280 --> 16:32.760
+It's not like Bash, it's different, but it's got some cool stuff, so there's expectation,
+
+16:32.760 --> 16:38.560
+and then there are just bugs and things that haven't been finished.
+
+16:38.560 --> 16:41.080
+I can't remember who started...
+
+16:41.080 --> 16:48.400
+I've got a link in my configuration file, but somebody was writing on how to get the
+
+16:48.400 --> 16:55.320
+output from the last command in shell, shell mode, and I thought, that's a great idea.
+
+16:55.320 --> 17:01.640
+I want that in Eshell, and then I found the source code that there's a double dollar sign
+
+17:01.640 --> 17:02.640
+that's already there.
+
+17:02.640 --> 17:03.640
+Great.
+
+17:03.640 --> 17:04.640
+Wait a minute.
+
+17:04.640 --> 17:05.640
+It doesn't work all the time?
+
+17:05.640 --> 17:10.640
+What the hell?
+
+17:10.640 --> 17:15.720
+When I saw that in your talk, I was like, oh, that's one of the things I've been looking
+
+17:15.720 --> 17:16.720
+for.
+
+17:16.720 --> 17:17.720
+It is, exactly.
+
+17:17.720 --> 17:22.640
+Now, I'll admit, the underpinnings are really good.
+
+17:22.640 --> 17:28.520
+It didn't take long to actually make that and fix it, and then make it even better.
+
+17:28.520 --> 17:32.800
+Like putting in a kill ring, it's like, now that is nice, so that I could just grab it
+
+17:32.800 --> 17:34.120
+as an array and go.
+
+17:34.120 --> 17:35.120
+That's really good.
+
+17:35.120 --> 17:37.600
+So, I think there's a lot of good stuff there.
+
+17:37.600 --> 17:42.200
+I think, yeah, let's just make some features.
+
+17:42.200 --> 17:48.000
+Let's make an extension, and let's assign the copyright to the BFSS.
+
+17:48.000 --> 17:53.080
+Yeah, maybe I'll start looking at Eshell after.
+
+17:53.080 --> 17:58.440
+I'm playing around with org-node right now, trying to catch up to some of the forks, but
+
+17:58.440 --> 18:02.840
+maybe Eshell is another, the next thing to sort of poke at.
+
+18:02.840 --> 18:05.840
+Aren't there so many fun things to do?
+
+18:05.840 --> 18:08.840
+It's terrible.
+
+18:08.840 --> 18:13.880
+Great, great, great.
+
+18:13.880 --> 18:17.960
+I got another question over here in the IRC, do you ever fall back to terminals and shells
+
+18:17.960 --> 18:20.160
+outside of Emacs?
+
+18:20.160 --> 18:32.260
+Okay, that, all right, confession time, yes, I sometimes use iterm.
+
+18:32.260 --> 18:37.920
+So when I, so when I first boot up, I do have to use a terminal before I start up Emacs
+
+18:37.920 --> 18:39.840
+because it's got to mount everything.
+
+18:39.840 --> 18:46.040
+So I do use iterm, and yeah, sometimes if it happens to be there, I'll type the command
+
+18:46.040 --> 18:51.040
+in there instead of running into Emacs.
+
+18:51.040 --> 18:56.440
+But I just find running those terminals to be pretty frustrating because most of them,
+
+18:56.440 --> 19:04.480
+you have to use a mouse to copy and select stuff.
+
+19:04.480 --> 19:08.480
+Yeah and actually I could maybe chime in here and say that yeah, exactly, not only for terminals
+
+19:08.480 --> 19:15.960
+but also for IRC clients, I feel like I've tried using a bunch of different ones, yeah,
+
+19:15.960 --> 19:20.880
+but it ultimately comes down to I can't just put the cursor up, you know, quickly grab
+
+19:20.880 --> 19:23.920
+something, kill it and paste it somewhere else or just use it.
+
+19:23.920 --> 19:28.040
+And yeah, that's, I feel like one of the killer features of Emacs or anything that's built
+
+19:28.040 --> 19:29.040
+into Emacs.
+
+19:29.040 --> 19:30.040
+Mm-hmm.
+
+19:30.040 --> 19:31.040
+Mm-hmm.
+
+19:31.040 --> 19:32.040
+Agreed.
+
+19:32.040 --> 19:39.320
+Lounge679 says, what are the less well oiled parts of Eshell and the edge cases?
+
+19:39.320 --> 19:45.960
+Yeah, that's a great phrasing, less well oiled parts.
+
+19:45.960 --> 19:51.760
+There's just a little friction and I think we need to figure out how to fix those things
+
+19:51.760 --> 19:54.360
+when we encounter them.
+
+19:54.360 --> 20:01.440
+Yeah, I should make a list of the things I found and hey, Mal, you give me a list too.
+
+20:01.440 --> 20:02.440
+And yeah.
+
+20:02.440 --> 20:09.040
+I think one of the problems with Eshell is that it's not based on comment, like shell
+
+20:09.040 --> 20:10.040
+and- It isn't.
+
+20:10.040 --> 20:17.400
+Yeah, and as a result, the other shells have like a uniform interface and uniform key bindings
+
+20:17.400 --> 20:19.040
+for doing things.
+
+20:19.040 --> 20:25.360
+And Eshell does things slightly differently, different enough that-
+
+20:25.360 --> 20:26.360
+That's right.
+
+20:26.360 --> 20:27.360
+Yeah.
+
+20:27.360 --> 20:28.360
+Yeah, exactly.
+
+20:28.360 --> 20:29.360
+And that's good and bad.
+
+20:29.360 --> 20:30.480
+It's doing something totally different.
+
+20:30.480 --> 20:35.280
+And if you know that it's just gonna be different and you'll treat it differently, at least that's
+
+20:35.280 --> 20:36.280
+how I found.
+
+20:36.280 --> 20:42.280
+So that's why I'm jumping between the vterm and Eshell, depending on what I'm trying to
+
+20:42.280 --> 20:43.340
+do.
+
+20:43.340 --> 20:48.760
+But I'm just finding there's a lot of interesting stuff in Eshell, but it changes how we run
+
+20:48.760 --> 20:49.760
+things.
+
+20:49.760 --> 20:56.240
+I think it's very similar to, well, I mean, if, okay, I'm not blaming names, but if you're
+
+20:56.240 --> 21:01.080
+a VI user, you're starting with a terminal and you're running commands.
+
+21:01.080 --> 21:04.400
+And then when you need to edit a file, you edit, you come back, but the shell is kind
+
+21:04.400 --> 21:05.400
+of your main focus.
+
+21:05.400 --> 21:10.160
+Well, we're all over here in Emacs and we just run commands from Emacs, right?
+
+21:10.160 --> 21:12.280
+That's just how we behave.
+
+21:12.280 --> 21:19.680
+And using Eshell is this way where don't go all the way, don't try to, but you can kind
+
+21:19.680 --> 21:22.300
+of pretend and do different things.
+
+21:22.300 --> 21:30.320
+So yeah, so that's why I say it kind of changes our behavior because it's doing things differently.
+
+21:30.320 --> 21:34.560
+So you can't look at it as another common.
+
+21:34.560 --> 21:43.600
+Wait, so when you say you're using vterm, does that mean you're using, that's a separate
+
+21:43.600 --> 21:49.920
+application outside of Emacs or is there a, oh, oh, yeah.
+
+21:49.920 --> 21:55.960
+So vterm is, I don't know when it came out, a couple of years ago, I don't know the details
+
+21:55.960 --> 22:02.960
+of it, but it's using a module library to do all the heavy lifting.
+
+22:02.960 --> 22:07.720
+So it's just a little better comment and I've just found it to be a lot, very reliable and
+
+22:07.720 --> 22:08.840
+pretty fast.
+
+22:08.840 --> 22:16.480
+So especially when I'm SSHing into another machine in my data centers and especially
+
+22:16.480 --> 22:21.200
+building all the Docker and some of the weird terminal stuff that I need to do in those
+
+22:21.200 --> 22:28.280
+shell environments using SSH, I just find vterm to be really good for what that does.
+
+22:28.280 --> 22:29.280
+Oh, okay.
+
+22:29.280 --> 22:30.280
+I see it now.
+
+22:30.280 --> 22:31.280
+It's on an alpha.
+
+22:31.280 --> 22:32.280
+All right.
+
+22:32.280 --> 22:33.280
+Yeah.
+
+22:33.280 --> 22:39.880
+It is in the, you're still in Emacs, but the key bindings are pretty good, but you do,
+
+22:39.880 --> 22:47.280
+you know, it has two modes, one for selecting text and then one for being a terminal.
+
+22:47.280 --> 22:50.280
+Maybe I'll try that out instead of metax-gel.
+
+22:50.280 --> 22:54.240
+Yes, I would, if you can.
+
+22:54.240 --> 22:59.200
+The problem that I think most people have is building that vterm library.
+
+22:59.200 --> 23:02.960
+I haven't had any problems on my work Mac.
+
+23:02.960 --> 23:04.480
+So it's been pretty good for me.
+
+23:04.480 --> 23:05.480
+Okay.
+
+23:05.480 --> 23:06.480
+All right.
+
+23:06.480 --> 23:12.240
+That's good to know about too, but that'll keep me from you like adopting Eshell.
+
+23:12.240 --> 23:13.240
+Sure.
+
+23:13.240 --> 23:17.720
+You know, that's a nice thing about choices.
+
+23:17.720 --> 23:18.720
+Yeah.
+
+23:18.720 --> 23:29.160
+You'll just find that vterm, I think behaves exactly like you expect a terminal to act.
+
+23:29.160 --> 23:31.560
+And so you won't have, you won't have to do much.
+
+23:31.560 --> 23:35.060
+I don't have much in the way of customizations.
+
+23:35.060 --> 23:41.160
+It's mostly my customizations is just starting a vterm running SSH automatically.
+
+23:41.160 --> 23:44.600
+So it's mostly about working with my external hosts.
+
+23:44.600 --> 23:51.600
+And if I may quickly jump in here, I think we have about another minute or so of live
+
+23:51.600 --> 23:55.760
+Q&A on the stream at which point then the stream will move on, but you folks are welcome
+
+23:55.760 --> 24:01.440
+to stay here or like continue the Q&A on the pad or whatever works best.
+
+24:01.440 --> 24:02.440
+Just staying in this room.
+
+24:02.440 --> 24:03.440
+Yeah.
+
+24:03.440 --> 24:04.440
+And continue talking.
+
+24:04.440 --> 24:05.440
+Lovely.
+
+24:05.440 --> 24:06.440
+Yeah.
+
+24:06.440 --> 24:12.120
+As Karthik has said vterm isn't distracting.
+
+24:12.120 --> 24:18.600
+It doesn't, you know, it's, it's just exactly what you expect.
+
+24:18.600 --> 24:20.480
+So it's not interesting either.
+
+24:20.480 --> 24:34.320
+No, I'm just, yeah, and so there's some good comments on the IRC.
+
+24:34.320 --> 24:35.320
+So yeah.
+
+24:35.320 --> 24:36.320
+Thanks everybody.
+
+24:36.320 --> 24:37.320
+It's been fun.
+
+24:37.320 --> 24:38.320
+All right.
+
+24:38.320 --> 24:39.320
+I'm going to jump off now.
+
+24:39.320 --> 24:40.320
+Nice talking to you, Howard.
+
+24:40.320 --> 24:41.320
+You too.
+
+24:41.320 --> 24:42.320
+All right.
+
+24:42.320 --> 24:43.320
+Thank you all.
+
+24:43.320 --> 24:46.800
+I think I'll drop off as well.
+
+24:46.800 --> 24:48.800
+All right.
+
+24:48.800 --> 24:50.800
+Thank you.
+
diff --git a/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt
new file mode 100644
index 00000000..e2ead1cc
--- /dev/null
+++ b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:28.999
+Introduction
+
+00:00:29.000 --> 00:00:48.599
+1. It’s an Emacs REPL
+
+00:00:48.600 --> 00:01:10.119
+2. It’s also a shell
+
+00:01:10.120 --> 00:03:27.559
+3. You can mix these two modes
+
+00:03:27.560 --> 00:04:36.079
+4. Emacs is better than shell
+
+00:04:36.080 --> 00:06:13.479
+5. Better regular expressions
+
+00:06:13.480 --> 00:07:39.639
+6. Loops are better with predicates
+
+00:07:39.640 --> 00:09:08.519
+7. Output of last command
+
+00:09:08.520 --> 00:10:26.879
+8. Redirection back to Emacs
+
+00:10:26.880 --> 00:12:28.399
+9. Using Emacs buffers
+
+00:12:28.400 --> 00:12:59.359
+10. cd to remote systems
+
+00:12:59.360 --> 00:14:01.920
+Summary
diff --git a/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt
new file mode 100644
index 00000000..62b813f3
--- /dev/null
+++ b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt
@@ -0,0 +1,739 @@
+WEBVTT captioned by howard
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.999
+I have 10 minutes to talk you into
+
+00:00:05.000 --> 00:00:07.879
+giving Eshell a second chance.
+
+00:00:07.880 --> 00:00:10.119
+Have the right perspective and expectation,
+
+00:00:10.120 --> 00:00:12.919
+and I think you’ll really enjoy it.
+
+00:00:12.920 --> 00:00:15.679
+Just remember eshell is a shell,
+
+00:00:15.680 --> 00:00:17.839
+not a terminal emulator.
+
+00:00:17.840 --> 00:00:20.279
+I use both Eshell and vterm.
+
+00:00:20.280 --> 00:00:23.479
+I’m going to talk and type fast,
+
+00:00:23.480 --> 00:00:28.999
+as I have 10 reasons for you to try Eshell again.
+
+NOTE 1. It’s an Emacs REPL
+
+00:00:29.000 --> 00:00:32.599
+1. It’s an Emacs REPL.
+
+00:00:32.600 --> 00:00:33.999
+I mean, check this out.
+
+00:00:34.000 --> 00:00:36.999
+Let’s start up Eshell here.
+
+00:00:37.000 --> 00:00:41.399
+Let’s just type a Lisp expression.
+
+00:00:41.400 --> 00:00:43.919
+It works.
+
+00:00:43.920 --> 00:00:48.599
+As a shell, the parens are kinda optional.
+
+NOTE 2. It’s also a shell
+
+00:00:48.600 --> 00:00:52.519
+2. It’s also a shell.
+
+00:00:52.520 --> 00:00:56.479
+While eshell may look like a shell, like Bash
+
+00:00:56.480 --> 00:00:58.559
+you should view it as a REPL
+
+00:00:58.560 --> 00:01:02.399
+with parenthesis-less s-expressions.
+
+00:01:02.400 --> 00:01:05.559
+This makes sense, because a shell command with options,
+
+00:01:05.560 --> 00:01:07.999
+like this ls command,
+
+00:01:08.000 --> 00:01:10.119
+looks like an s-expression.
+
+NOTE 3. You can mix these two modes
+
+00:01:10.120 --> 00:01:12.879
+3. You can mix these two modes.
+
+00:01:12.880 --> 00:01:14.959
+Shells can call subshells
+
+00:01:14.960 --> 00:01:17.919
+which return their output like a function call,
+
+00:01:17.920 --> 00:01:20.799
+like this Bash command.
+
+00:01:20.800 --> 00:01:22.759
+In this Eshell example,
+
+00:01:22.760 --> 00:01:24.639
+I use the output of a text file
+
+00:01:24.640 --> 00:01:27.959
+as command line arguments to ripgrep.
+
+00:01:27.960 --> 00:01:29.639
+Notice how I use braces
+
+00:01:29.640 --> 00:01:34.759
+to state that it is a call to an eshell expression.
+
+00:01:34.760 --> 00:01:40.039
+We can mix Lisp-expressions and Shell-expressions.
+
+00:01:40.040 --> 00:01:45.599
+Allow me a contrived example.
+
+00:01:45.600 --> 00:01:50.079
+Notice I use good ol' setq to create a variable.
+
+00:01:50.080 --> 00:01:54.919
+Yes, those are global Emacs variables available everywhere.
+
+00:01:54.920 --> 00:01:59.599
+In Eshell, the wildcard actually creates a list.
+
+00:01:59.600 --> 00:02:04.479
+This variable assignment doesn’t work as you might expect,
+
+00:02:04.480 --> 00:02:07.559
+as setq in Eshell is still setq,
+
+00:02:07.560 --> 00:02:10.319
+and it assigns variables in pairs.
+
+00:02:10.320 --> 00:02:17.119
+To make a list in Eshell, we use listify:
+
+00:02:17.120 --> 00:02:21.239
+Without parens, Eshell is in “shell mode”,
+
+00:02:21.240 --> 00:02:23.799
+which means that words are strings,
+
+00:02:23.800 --> 00:02:26.879
+and variables need to be prefixed with dollar signs.
+
+00:02:26.880 --> 00:02:32.399
+A command can have both Eshell and Lisp expressions.
+
+00:02:32.400 --> 00:02:34.559
+As you can see here,
+
+00:02:34.560 --> 00:02:37.119
+I have a call to ripgrep,
+
+00:02:37.120 --> 00:02:40.319
+but part of it is an s-expression.
+
+00:02:40.320 --> 00:02:42.239
+Remember the differences:
+
+00:02:42.240 --> 00:02:46.159
+With parens, eshell treats it as Lisp,
+
+00:02:46.160 --> 00:02:49.199
+like the last line in my example.
+
+00:02:49.200 --> 00:02:53.919
+With braces, eshell follows these shell-like rules:
+
+00:02:53.920 --> 00:02:57.159
+First, if it looks like a number, it's a number.
+
+00:02:57.160 --> 00:02:59.439
+Otherwise, eshell converts it to a string
+
+00:02:59.440 --> 00:03:03.679
+(quotes, like a shell, groups words).
+
+00:03:03.680 --> 00:03:07.519
+What about this mix between functions and executables
+
+00:03:07.520 --> 00:03:10.839
+for the first word?
+
+00:03:10.840 --> 00:03:15.439
+Functions that begin with eshell are called first.
+
+00:03:15.440 --> 00:03:19.079
+Next in priority are executables on your $PATH,
+
+00:03:19.080 --> 00:03:22.159
+then matching Lisp functions.
+
+00:03:22.160 --> 00:03:23.940
+You can actually switch this order
+
+00:03:23.941 --> 00:03:27.559
+with the `eshell-prefer-lisp-functions` variable.
+
+NOTE 4. Emacs is better than shell
+
+00:03:27.560 --> 00:03:31.759
+4. Emacs is actually better than shell.
+
+00:03:31.760 --> 00:03:35.199
+If the following works, why would you call
+
+00:03:35.200 --> 00:03:40.039
+expr or bc or dc, or any of those other calculators?
+
+00:03:40.040 --> 00:03:43.639
+You can just call a Lisp expression.
+
+00:03:43.640 --> 00:03:47.999
+Why call less or more when you could call view-file?
+
+00:03:48.000 --> 00:03:52.839
+Here, I’ve aliased less to view-file.
+
+00:03:52.840 --> 00:03:57.559
+Load it up, and it shows up in an Emacs mode.
+
+00:03:57.560 --> 00:04:01.519
+Just like with less, if you hit q,
+
+00:04:01.520 --> 00:04:05.759
+you go back to your Eshell terminal.
+
+00:04:05.760 --> 00:04:08.439
+I do have an improvement, though.
+
+00:04:08.440 --> 00:04:10.479
+The problem with view-file is
+
+00:04:10.480 --> 00:04:13.399
+it takes a single file as an argument.
+
+00:04:13.400 --> 00:04:15.719
+In a shell, we might want to view more than one.
+
+00:04:15.720 --> 00:04:18.719
+So let’s make a solution to that.
+
+00:04:18.720 --> 00:04:20.999
+This function will call the first function
+
+00:04:21.000 --> 00:04:22.159
+with the first argument,
+
+00:04:22.160 --> 00:04:26.679
+and the second function with each of the rest.
+
+00:04:26.680 --> 00:04:29.559
+This allows me to make a version of less
+
+00:04:29.560 --> 00:04:33.159
+that calls view-file on the first [argument] given,
+
+00:04:33.160 --> 00:04:36.079
+but open in another window for each additional file.
+
+NOTE 5. Better regular expressions
+
+00:04:36.080 --> 00:04:41.239
+5. Better regular expressions.
+
+00:04:41.240 --> 00:04:44.799
+Can’t remember regular expressions when calling
+
+00:04:44.800 --> 00:04:48.639
+grep or some other search function? Use the rx macro.
+
+00:04:48.640 --> 00:04:55.919
+Here I call ripgrep again, but this time,
+
+00:04:55.920 --> 00:05:00.679
+I’m using a Lisp expression calling the rx macro
+
+00:05:00.680 --> 00:05:04.719
+to look for UUIDs in the files in my current directory.
+
+00:05:04.720 --> 00:05:08.159
+But I have another improvement for this.
+
+00:05:08.160 --> 00:05:13.479
+While the rx macro is freaking cool for Emacs Lisp,
+
+00:05:13.480 --> 00:05:15.919
+it doesn’t always translate to regular expressions
+
+00:05:15.920 --> 00:05:20.079
+accepted by most commands.
+
+00:05:20.080 --> 00:05:25.199
+The (I have no idea how to pronounce this) pcre2el project
+
+00:05:25.200 --> 00:05:28.519
+can convert from a Lisp regular expression
+
+00:05:28.520 --> 00:05:31.359
+to Perl-compatible regular expressions (PCRE)
+
+00:05:31.360 --> 00:05:33.519
+acceptable by most search commands.
+
+00:05:33.520 --> 00:05:37.879
+I’ve created a new macro here, prx,
+
+00:05:37.880 --> 00:05:41.319
+that translates the output of the rx macro.
+
+00:05:41.320 --> 00:05:46.519
+This allows me to type something much more readable,
+
+00:05:46.520 --> 00:05:48.519
+and probably easier to remember.
+
+00:05:48.520 --> 00:05:54.679
+Certainly easier than this freaking regular expression.
+
+00:05:54.680 --> 00:05:59.439
+I’ve got an even better improvement.
+
+00:05:59.440 --> 00:06:03.559
+The rx macro with regular expression snippets
+
+00:06:03.560 --> 00:06:05.759
+can be assigned to key words
+
+00:06:05.760 --> 00:06:08.679
+that I can then take advantage of.
+
+00:06:08.680 --> 00:06:13.479
+Now our command would be much simpler to type.
+
+NOTE 6. Loops are better with predicates
+
+00:06:13.480 --> 00:06:16.159
+6. Loops are better with predicates.
+
+00:06:16.160 --> 00:06:18.759
+Let’s say you want to remove the execute bit
+
+00:06:18.760 --> 00:06:20.479
+from files that have it.
+
+00:06:20.480 --> 00:06:24.399
+In a shell like bash, you need both a for loop and an if,
+
+00:06:24.400 --> 00:06:26.599
+as you can see in this example.
+
+00:06:26.600 --> 00:06:31.559
+With eshell, use a predicate to combine into a simple loop.
+
+00:06:31.560 --> 00:06:34.359
+The paren x after a file glob
+
+00:06:34.360 --> 00:06:36.879
+filters for only files marked as executable.
+
+00:06:36.880 --> 00:06:43.559
+Now here is another improvement.
+
+00:06:43.560 --> 00:06:47.959
+Since we often type loops to execute on one command,
+
+00:06:47.960 --> 00:06:49.519
+what about creating a function
+
+00:06:49.520 --> 00:06:50.999
+that can do this all in one go?
+
+00:06:51.000 --> 00:06:57.599
+This do function splits the arguments on that double colon,
+
+00:06:57.600 --> 00:07:00.079
+where the left side is a single statement to run,
+
+00:07:00.080 --> 00:07:02.599
+and the right side is a list of files.
+
+00:07:02.600 --> 00:07:05.839
+I have to append and flatten it
+
+00:07:05.840 --> 00:07:07.639
+in order for it to work.
+
+00:07:07.640 --> 00:07:09.399
+It loops through each file,
+
+00:07:09.400 --> 00:07:12.079
+creating an eshell command with the file appended.
+
+00:07:12.080 --> 00:07:15.759
+With this, I can remove the execute bit
+
+00:07:15.760 --> 00:07:20.759
+on all CSV files that have it.
+
+00:07:20.760 --> 00:07:24.319
+I see that my example wasn’t too good, as most commands
+
+00:07:24.320 --> 00:07:29.039
+like chmod accept multiple files, but you get the idea.
+
+00:07:29.040 --> 00:07:33.159
+In my final, larger form on my website,
+
+00:07:33.160 --> 00:07:35.279
+I don’t assume the command expression accepts
+
+00:07:35.280 --> 00:07:36.719
+a file as a final argument,
+
+00:07:36.720 --> 00:07:39.639
+as I can also replace underscores with the filename.
+
+NOTE 7. Output of last command
+
+00:07:39.640 --> 00:07:45.399
+7. Output of last command.
+
+00:07:45.400 --> 00:07:48.799
+Most shells have a special variable
+
+00:07:48.800 --> 00:07:52.839
+like $? for the exit code of the last command.
+
+00:07:52.840 --> 00:07:55.919
+While reading through the source code,
+
+00:07:55.920 --> 00:07:58.799
+I noticed that the $$ refers to
+
+00:07:58.800 --> 00:08:00.599
+the output of the last command.
+
+00:08:00.600 --> 00:08:05.799
+This seems pretty cool.
+
+00:08:05.800 --> 00:08:10.759
+However, Eshell returns true or nil
+
+00:08:10.760 --> 00:08:12.719
+when running external commands,
+
+00:08:12.720 --> 00:08:15.879
+so accessing the output from a call to ls
+
+00:08:15.880 --> 00:08:19.479
+doesn’t work as expected.
+
+00:08:19.480 --> 00:08:21.119
+But this is Emacs.
+
+00:08:21.120 --> 00:08:23.159
+We can fix that.
+
+00:08:23.160 --> 00:08:28.119
+After running any command, eshell sets these four variables.
+
+00:08:28.120 --> 00:08:33.519
+I can hook a function call after every Eshell command.
+
+00:08:33.520 --> 00:08:36.759
+Using buffer-substring,
+
+00:08:36.760 --> 00:08:39.279
+I store the output into a global variable,
+
+00:08:39.280 --> 00:08:43.599
+and extend Eshell’s special variables list.
+
+00:08:43.600 --> 00:08:46.519
+In my Emacs configuration,
+
+00:08:46.520 --> 00:08:48.479
+I turned this variable into a ring,
+
+00:08:48.480 --> 00:08:51.439
+so while $$ works,
+
+00:08:51.440 --> 00:08:54.399
+so does array sub-scripting on that variable.
+
+00:08:54.400 --> 00:08:58.399
+This allows me to run a command
+
+00:08:58.400 --> 00:09:02.279
+and use the output from that command more than once.
+
+00:09:02.280 --> 00:09:05.279
+The code for this is a bit longer,
+
+00:09:05.280 --> 00:09:08.519
+so you’ll need to see my Emacs configuration for details.
+
+NOTE 8. Redirection back to Emacs
+
+00:09:08.520 --> 00:09:13.439
+8. Redirection back to Emacs.
+
+00:09:13.440 --> 00:09:14.879
+Output of any command
+
+00:09:14.880 --> 00:09:18.519
+can go to kill-ring (or the clipboard).
+
+00:09:18.520 --> 00:09:21.079
+Think of the implications.
+
+00:09:21.080 --> 00:09:23.839
+You don’t have to go into text selection mode.
+
+00:09:23.840 --> 00:09:26.239
+Just grab the output.
+
+00:09:26.240 --> 00:09:30.279
+In fact, with our $$ improvement,
+
+00:09:30.280 --> 00:09:33.239
+we can always copy the output from the last command
+
+00:09:33.240 --> 00:09:34.079
+to the clipboard.
+
+00:09:34.080 --> 00:09:37.999
+Better yet, let’s write the output
+
+00:09:38.000 --> 00:09:39.399
+to our engineering notebook.
+
+00:09:39.400 --> 00:09:41.679
+Here’s my idea.
+
+00:09:41.680 --> 00:09:46.079
+First, create a capture template that takes a string,
+
+00:09:46.080 --> 00:09:48.199
+or if called interactively, the region,
+
+00:09:48.200 --> 00:09:51.879
+and that does an immediate-finish after inserting
+
+00:09:51.880 --> 00:09:53.879
+that string to the default notes file.
+
+00:09:53.880 --> 00:09:57.679
+Next, create a wrapper function
+
+00:09:57.680 --> 00:10:01.559
+to call org-capture-string to run that template.
+
+00:10:01.560 --> 00:10:07.639
+Finally, we add our new function to eshell-virtual-targets.
+
+00:10:07.640 --> 00:10:08.759
+Let’s see this in action.
+
+00:10:08.760 --> 00:10:15.707
+I have a CSV file of user information.
+
+00:10:15.708 --> 00:10:19.719
+I can use grep and cut to extract some of that
+
+00:10:19.720 --> 00:10:26.879
+and write it out to this month’s engineering notebook.
+
+NOTE 9. Using Emacs buffers
+
+00:10:26.880 --> 00:10:35.279
+9. Using Emacs buffers.
+
+00:10:35.280 --> 00:10:39.159
+Why leave the results of eshell commands
+
+00:10:39.160 --> 00:10:40.279
+in the *eshell* buffer?
+
+00:10:40.280 --> 00:10:44.119
+Send the output into a buffer where you can use it.
+
+00:10:44.120 --> 00:10:47.999
+Here’s a call to ripgrep
+
+00:10:48.000 --> 00:10:50.759
+that searches for lines with email addresses
+
+00:10:50.760 --> 00:10:53.519
+using a complicated regular expression
+
+00:10:53.520 --> 00:10:56.079
+that I added to my prx macro.
+
+00:10:56.080 --> 00:11:01.079
+When I switch to this almost-grep buffer,
+
+00:11:01.080 --> 00:11:03.319
+I can turn on grep-mode.
+
+00:11:03.320 --> 00:11:09.039
+Now I can jump around as if I just called grep directly.
+
+00:11:09.040 --> 00:11:14.759
+Perhaps I’m proficient with my prx macro
+
+00:11:14.760 --> 00:11:16.639
+to filter out entries,
+
+00:11:16.640 --> 00:11:19.279
+but not good with shell commands
+
+00:11:19.280 --> 00:11:23.999
+that I can use in pipes to extract just one…
+
+00:11:24.000 --> 00:11:26.039
+the address column, for instance?
+
+00:11:26.040 --> 00:11:28.959
+Let’s just extract it,
+
+00:11:28.960 --> 00:11:33.279
+send it to a buffer called email-list,
+
+00:11:33.280 --> 00:11:38.479
+and now I can use Emacs commands that I know and love
+
+00:11:38.480 --> 00:11:39.799
+to edit the data directly.
+
+00:11:39.800 --> 00:11:55.799
+We currently have an over-sight
+
+00:11:55.800 --> 00:11:58.839
+that the Eshell’s built-in cat command
+
+00:11:58.840 --> 00:12:02.719
+doesn’t pipe buffer contents as standard in.
+
+00:12:02.720 --> 00:12:07.919
+So I created a bcat, a buffer cat, function to do this.
+
+00:12:07.920 --> 00:12:09.879
+So this command works
+
+00:12:09.880 --> 00:12:14.599
+to grab my email addresses I just extracted
+
+00:12:14.600 --> 00:12:16.319
+and send them to another program.
+
+00:12:16.320 --> 00:12:20.959
+If you’re interested, I have a more elaborate
+
+00:12:20.960 --> 00:12:25.759
+and yet simpler workflow surrounding sending data
+
+00:12:25.760 --> 00:12:28.399
+back and forth from Eshell to Emacs buffers.
+
+NOTE 10. cd to remote systems
+
+00:12:28.400 --> 00:12:35.679
+10. Did I mention that you can cd to remote systems?
+
+00:12:35.680 --> 00:12:39.879
+This command uses SSH to jump to my host, goblin,
+
+00:12:39.880 --> 00:12:44.039
+start a root session, and jump to the etc directory.
+
+00:12:44.040 --> 00:12:47.719
+Remember that Tramp can be finicky
+
+00:12:47.720 --> 00:12:52.839
+if you start blinging your remote hosts with oh-my-zshell,
+
+00:12:52.840 --> 00:12:57.790
+and funky prompts and things like that,
+
+00:12:57.791 --> 00:12:59.359
+so your mileage may vary.
+
+NOTE Summary
+
+00:12:59.360 --> 00:13:03.959
+In summary: Use eshell if you want
+
+00:13:03.960 --> 00:13:07.319
+a quick way to run commands and Emacs functions as a REPL,
+
+00:13:07.320 --> 00:13:11.479
+or to run an OS program but process the output with Emacs.
+
+00:13:11.480 --> 00:13:15.919
+Keep in mind that Eshell has two types of subshells,
+
+00:13:15.920 --> 00:13:19.599
+and you can mix and match during a command call.
+
+00:13:19.600 --> 00:13:22.639
+The rx macro is really cool.
+
+00:13:22.640 --> 00:13:26.599
+Eshell loops are better with filters and predicates …
+
+00:13:26.600 --> 00:13:28.239
+if you can remember them.
+
+00:13:28.240 --> 00:13:30.959
+Take advantage of Emacs buffers
+
+00:13:30.960 --> 00:13:32.879
+to really enhance your shell experience.
+
+00:13:32.880 --> 00:13:36.039
+You’ve now seen that just like Emacs,
+
+00:13:36.040 --> 00:13:39.519
+I’ve crafted Eshell to be my own shell creation,
+
+00:13:39.520 --> 00:13:41.039
+tailored to my workflow.
+
+00:13:41.040 --> 00:13:44.799
+So, steal my spells, cast your own magic,
+
+00:13:44.800 --> 00:13:48.759
+but feel free to share your incantations back to me.
+
+00:13:48.760 --> 00:13:51.359
+I’ve gone over my time allotment, so we’ll have to
+
+00:13:51.360 --> 00:13:53.679
+continue this discussion on the intertubes.
+
+00:13:53.680 --> 00:13:57.159
+Why yes, I have joined the birdless diaspora,
+
+00:13:57.160 --> 00:13:59.199
+so toot me over there.
+
+00:13:59.200 --> 00:14:01.920
+Thanks.
diff --git a/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.vtt b/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.vtt
new file mode 100644
index 00000000..dbebe238
--- /dev/null
+++ b/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.vtt
@@ -0,0 +1,6638 @@
+WEBVTT
+
+00:00.000 --> 00:10.040
+Okay, hi, we seem to be back. Sorry for the little interruption. John, you might not have
+
+00:10.040 --> 00:14.640
+realized, but I was supposed to send a broadcast message to the dev track and I submitted it
+
+00:14.640 --> 00:20.840
+to the gen track instead, so I spoke over you for 20 seconds. I apologize humbly, deeply,
+
+00:20.840 --> 00:26.440
+and sincerely. But John, I have to apologize now. I will say hi to you. How are you doing?
+
+00:26.440 --> 00:30.120
+Hello, I'm doing good. I know I'm saying you harmonized with me. You didn't talk over me,
+
+00:30.120 --> 00:31.120
+you talked with me.
+
+00:31.120 --> 00:36.280
+You know, as much as I would like to say yes, that is possible, the fact that I did not
+
+00:36.280 --> 00:40.200
+have the sounds on your talk makes it very difficult for me to harmonize. You know, it's
+
+00:40.200 --> 00:48.200
+like try to have a barbershop quartet and they cannot hear one another. Try to tell
+
+00:48.200 --> 00:50.320
+them to harmonize. I'm not sure if it's going to work.
+
+00:50.320 --> 00:54.840
+I sang, actually sang in a barbershop chorus for a while and I know the pain that you're
+
+00:54.840 --> 00:59.400
+talking about. But anyway, it's water under the bridge.
+
+00:59.400 --> 01:04.640
+Yes, what a serendipitous discussion. I wasn't expecting this. Okay, you have the pad open
+
+01:04.640 --> 01:07.600
+in front of you. Do you want me to read the question or do you want to take them on your
+
+01:07.600 --> 01:08.600
+own?
+
+01:08.600 --> 01:09.600
+I'd be glad to do it.
+
+01:09.600 --> 01:10.600
+Right.
+
+01:10.600 --> 01:14.760
+All right, I'm just going to go start from the top here. I have not only one config,
+
+01:14.760 --> 01:20.200
+but multiple configs in different locations..emacs.init.el and.emacs.init.el and different
+
+01:20.200 --> 01:23.520
+Python installs in different places. This is something I should take care of earlier
+
+01:23.520 --> 01:27.880
+rather than later. I need to pay someone to consult on my config. Is this an existing
+
+01:27.880 --> 01:32.440
+business? Is there a place to barter a screen share for something else, a value in exchange?
+
+01:32.440 --> 01:36.720
+In any case, thank you for giving permission to have fun without the need for too much
+
+01:36.720 --> 01:37.720
+structure.
+
+01:37.720 --> 01:45.960
+That's, and that's, yeah, I feel humbled being asked this. I don't know how much insightful
+
+01:45.960 --> 01:51.240
+answers I can give here other than the fact that I did notice one of the talks that I
+
+01:51.240 --> 01:56.360
+really wanted to catch and resonate with was the Emacs buddy initiative. That was actually
+
+01:56.360 --> 02:00.680
+one of the points that I wanted to include in my talk, but it turns out that 10 minutes
+
+02:00.680 --> 02:07.260
+goes by incredibly fast when you, when the ideas are flowing. And I think that that's,
+
+02:07.260 --> 02:13.600
+that's probably one of the best advice that it, to sources is to find some kind of buddy
+
+02:13.600 --> 02:17.800
+who probably would be a great, especially someone who is, who is maybe at a similar
+
+02:17.800 --> 02:24.320
+or, or even a different experience or comfort level may be able to, you know, be a good
+
+02:24.320 --> 02:29.400
+exchange of value there. But yeah, I mean, that's, and again, it's something I'll think
+
+02:29.400 --> 02:33.760
+about more. I might not come up with the most interesting answers live.
+
+02:33.760 --> 02:38.120
+Oh, it's fine. Don't worry. You know, you don't have to worry about making the most
+
+02:38.120 --> 02:42.000
+exhaustive answer. You know, the whole point of, sorry, let me move myself to the left.
+
+02:42.000 --> 02:47.760
+Okay. Nevermind. I'm trying my best to composite the shot live. Yeah. You don't have to worry
+
+02:47.760 --> 02:52.680
+about making very exhaustive answer right now. Also, we have about 11 minutes. We might
+
+02:52.680 --> 02:56.040
+open up the chat. So you have a lot of questions. So I think a lot of people are very interested.
+
+02:56.040 --> 03:01.560
+I think, you know, when you have the arguments that you're trying to valorize the box standard
+
+03:01.560 --> 03:05.720
+user of Emacs, I think everyone is feeling very invested into the talk and might want
+
+03:05.720 --> 03:10.120
+to ask questions. So I'm giving you a heads up people. If you now is the last chance you
+
+03:10.120 --> 03:14.920
+have, we are the last talk of the day, barring the closing remarks. If you have questions
+
+03:14.920 --> 03:18.800
+to ask, now is the time to join DBB. We'll be opening it in two minutes. And in the meantime,
+
+03:18.800 --> 03:22.120
+John, feel free to go back to the question and answer as many as you can.
+
+03:22.120 --> 03:26.480
+Thank you. And I would love to talk about this with people in the community forever.
+
+03:26.480 --> 03:31.760
+So this is not the last chance to talk about it. All right. How would you suggest Emacs
+
+03:31.760 --> 03:35.400
+developers, including package developers, interface with non-developer users and get
+
+03:35.400 --> 03:43.680
+their insights to help in shaping future Emacs functionality?
+
+03:43.680 --> 03:50.680
+You know, I think I've seen a lot of discussion on the mailing lists where this kind of exchange
+
+03:50.680 --> 03:55.880
+is wanted. You know, I think this is one of those things that may, it may always be difficult
+
+03:55.880 --> 04:00.960
+because I've, you know, I have some participation on both sides of this, if there are sides
+
+04:00.960 --> 04:06.860
+to it. And I think that most people agree that there's maybe could be a more tighter
+
+04:06.860 --> 04:13.800
+communication. So I don't think there's anybody out there who thinks that there's work to
+
+04:13.800 --> 04:18.040
+be done here. There's definitely effort that should be dedicated here. It seems to me like
+
+04:18.040 --> 04:22.320
+it's happening. I mean, this, you know, the Emacs survey was developed pretty closely
+
+04:22.320 --> 04:28.800
+from what I could see with the core maintainers. So I think that it's out there. I mean, perhaps
+
+04:28.800 --> 04:33.280
+the mailing list is a good place to start, the several ones of them. I think that you'll
+
+04:33.280 --> 04:38.480
+certainly get an answer and hopefully it will start a dialogue that can continue.
+
+04:38.480 --> 04:44.600
+All right. Next one. My impression that many common Emacs users are migrating to other
+
+04:44.600 --> 04:49.080
+editors in past years. The reasons cited are configurations growing out of control, general
+
+04:49.080 --> 04:53.240
+rough around the edges feel of Emacs, they've been putting up with for a while and maybe
+
+04:53.240 --> 04:59.960
+this isn't new. As a result, Emacs is becoming a smaller set of people. More invested, do
+
+04:59.960 --> 05:04.520
+you share this observation? So what do I think of the trend? And I'm sorry that I was talking
+
+05:04.520 --> 05:09.360
+over your editing there. I hope I didn't pressure you into stopping. I mean, my, my impression
+
+05:09.360 --> 05:13.680
+has been that that that's a thing of the past that was happening. My impression, I've been
+
+05:13.680 --> 05:19.480
+using Emacs for something like 25 to 14 to 15 years, depending on exactly when you start
+
+05:19.480 --> 05:24.160
+counting the time. It's been a long time for me and I haven't been very aware of things
+
+05:24.160 --> 05:28.440
+that whole time and become more and more aware and conscientious of the scene over the years
+
+05:28.440 --> 05:37.160
+recently. But those impressions are that it was getting less, less usage in past years,
+
+05:37.160 --> 05:43.260
+but it's, it's got, I think it's been increasing pretty quickly in recent years and increasing
+
+05:43.260 --> 05:52.120
+at a pretty high rate. So I don't, I don't necessarily disagree that there are different
+
+05:52.120 --> 05:56.640
+sets of people within the Emacs community who may, whose usages may be changing and
+
+05:56.640 --> 06:01.160
+maybe certain sets of within the community are shrinking and their investment levels
+
+06:01.160 --> 06:06.360
+are changing. But my, my, up until now, if you had asked me, it would have, I would have
+
+06:06.360 --> 06:14.080
+said that the Emacs user base was growing, changing and the usage of what they were,
+
+06:14.080 --> 06:18.080
+what they were counting on was, would, would have becoming, you know, more towards the
+
+06:18.080 --> 06:25.820
+popular, maybe away from what the core user base would have, would have focused on previous
+
+06:25.820 --> 06:32.020
+to that. But yeah, overall it seems to me like it's growing. And I think that where
+
+06:32.020 --> 06:38.120
+we are here and everyone who's gathered here today is, is evidence of that.
+
+06:38.120 --> 06:47.480
+And what do I think of that trend? I mean, I, I'm happy about it. I think, I mean, I,
+
+06:47.480 --> 06:53.240
+one of the things that I didn't have a chance to focus too much on in the talk was, was
+
+06:53.240 --> 07:00.120
+the power of that vanilla out of the box experience. I am a Viper, happy Viper user. I don't think
+
+07:00.120 --> 07:04.200
+there really are many others that I, at least ones that I know about and they may, they
+
+07:04.200 --> 07:08.520
+just may be the people that I was describing in my talk. They may be out there using Viper
+
+07:08.520 --> 07:13.760
+happily and they're, and they're dark matter. They're there and they make up maybe a huge
+
+07:13.760 --> 07:21.120
+amount of the universe, but you just maybe can't, it can't feel their effect. But, you
+
+07:21.120 --> 07:27.280
+know, I think that the, I'm glad that that usage is growing, if it is. But I also would
+
+07:27.280 --> 07:32.960
+hope that people continue to value that out of the box vanilla experience. Because I think
+
+07:32.960 --> 07:38.640
+that it gets, it's easy to overlook and I think it probably does get overlooked. And
+
+07:38.640 --> 07:41.840
+that may just be a necessary consequence of the fact that when things become popular,
+
+07:41.840 --> 07:47.720
+when things grow in popularity, they are, what gets focus and what gets coverage is
+
+07:47.720 --> 07:55.040
+those things that are more receptive and lend themselves better to, to popularity. And that's
+
+07:55.040 --> 08:00.760
+not necessarily the same as the things that are the most, it's not everything is really
+
+08:00.760 --> 08:05.480
+all I can say. There's more, there's always more to it than that. So I hope that as popularity
+
+08:05.480 --> 08:14.000
+grows, people won't forget those things and those things will stay, stay useful for everyone.
+
+08:14.000 --> 08:19.200
+Should I do the last one or should I stop? Oh, yeah, I might have some comments on this
+
+08:19.200 --> 08:22.720
+if no one shows up afterwards, but for now, yes, feel free to answer the last question.
+
+08:22.720 --> 08:28.080
+Okay. Do you consider that using one of the starter packages, do me max, space max, etc.
+
+08:28.080 --> 08:31.820
+affect that learning process that you mentioned? Or is it a good thing from your perspective?
+
+08:31.820 --> 08:35.000
+You know, that was another thing I wanted to mention in a talk that I didn't, that my
+
+08:35.000 --> 08:39.240
+10 minutes didn't allow, or maybe just the way that I talk in those 10 minutes didn't
+
+08:39.240 --> 08:44.920
+allow. I wanted to just acknowledge the fact that I don't have experience with them. I've
+
+08:44.920 --> 08:52.560
+been using GNU Emacs since, since I started using Emacs. I think they solve a problem
+
+08:52.560 --> 08:59.480
+for people. I think they have a place. But, you know, I think, I think some of the thoughts
+
+08:59.480 --> 09:04.560
+that I had been forming that I wasn't able to put in there about these was that you need
+
+09:04.560 --> 09:10.220
+to start wherever gets comfortable for you. And I think that no matter what you use, whatever
+
+09:10.220 --> 09:17.900
+you start with, I think you, you always get to the point where you feel like you've entrenched
+
+09:17.900 --> 09:25.920
+yourself in mindset or a set of habits that you use and you think it's, you want to change,
+
+09:25.920 --> 09:29.960
+you know that you should be able to change and grow, but you've just become accustomed
+
+09:29.960 --> 09:41.520
+to what you do. And I think that if, if using a starter package, if using a starter package
+
+09:41.520 --> 09:46.680
+gets you over that initial, you know, gets you into the things, if you feel like it's,
+
+09:46.680 --> 09:49.720
+it's going to limit your growth later on, I don't think it's necessarily because of
+
+09:49.720 --> 09:53.000
+what you chose. It's just, that's, that's just the feeling that everybody's going to
+
+09:53.000 --> 10:01.080
+feel eventually. Yeah.
+
+10:01.080 --> 10:05.080
+So sorry, John, I was talking with production. Are we, are you finished with the questions?
+
+10:05.080 --> 10:07.080
+It seems that you are, yeah.
+
+10:07.080 --> 10:11.760
+Yes, I believe I am. And I will, again, I will add better thoughts to these later on
+
+10:11.760 --> 10:12.760
+the pad.
+
+10:12.760 --> 10:18.040
+Yeah, but that's fine. I think you did a bang up. I'm French. I don't know if a bang up
+
+10:18.040 --> 10:20.200
+job is a good job. Can you confirm it for me?
+
+10:20.200 --> 10:22.040
+Yes, thank you. I appreciate that.
+
+10:22.040 --> 10:27.000
+Cool. Thank you. So it seems like we have Bob on for a question. So Bob was the speaker
+
+10:27.000 --> 10:31.600
+for the HyperOrc talk earlier today. So Bob, can you hear us?
+
+10:31.600 --> 10:34.120
+Yes, I can hear you great.
+
+10:34.120 --> 10:36.520
+And we can hear you as well.
+
+10:36.520 --> 10:39.040
+Can you see me? Let's see if...
+
+10:39.040 --> 10:41.040
+We cannot see you yet though.
+
+10:41.040 --> 10:47.880
+Okay. Yeah. I just started, start sharing. So I wanted to ask you, I mean, one of the
+
+10:47.880 --> 10:58.960
+things we really suffer from hyperbole, we have this issue that we try to make things
+
+10:58.960 --> 11:06.560
+as easy to use as possible, right? Just point and click, press this button and the magic
+
+11:06.560 --> 11:12.700
+happens. But because we are dealing with a domain that has a lot of complexity to it,
+
+11:12.700 --> 11:20.480
+we find, like you're saying, people have always done something a certain way. They bring whatever
+
+11:20.480 --> 11:28.440
+processes with them that they've used before. So it feels like there's a much heavier barrier
+
+11:28.440 --> 11:34.440
+to get regular users on board than there really should be from what we think we're producing
+
+11:34.440 --> 11:41.920
+in the software. So I wanted to get your perspective about what you think that might be and, you
+
+11:41.920 --> 11:47.080
+know, ways we could pursue tackling that.
+
+11:47.080 --> 11:51.640
+And by regular users, you mean ones who have already had a lot of time and...
+
+11:51.640 --> 11:57.760
+Emacs users who are not developers, not just not Emacs developers, but maybe they're non-technical
+
+11:57.760 --> 12:06.280
+at all. But they have to manage everyday information. They do emails, they do memos and whatever
+
+12:06.280 --> 12:10.720
+else they're processing.
+
+12:10.720 --> 12:20.840
+I'm not sure if... I don't know. This might not answer things to your satisfaction, but
+
+12:20.840 --> 12:28.760
+I'll, you know, be glad to keep the conversation going. But I wonder if... One of the things
+
+12:28.760 --> 12:33.680
+I was thinking of is that it's very easy to generate, I think, a lot of psychic baggage
+
+12:33.680 --> 12:40.040
+with Emacs as you use it over time because you get... I think I mentioned this in the
+
+12:40.040 --> 12:46.600
+talk. It's very... It's hard to use it and not be aware of all the different cool functionalities
+
+12:46.600 --> 12:49.960
+that it's built on and the things that you can take advantage of. And part of that is
+
+12:49.960 --> 12:57.400
+that as you develop your own workflows, you are not only developing them, but you're,
+
+12:57.400 --> 13:02.000
+for pragmatic reasons, rejecting other things. But you don't, you know, you're still aware
+
+13:02.000 --> 13:05.280
+that you've done that and you're aware of all the different possibilities that you've
+
+13:05.280 --> 13:08.880
+kind of left behind, at least temporarily.
+
+13:08.880 --> 13:15.320
+I wonder... I think at some point that baggage can impede you. Definitely can. It can make
+
+13:15.320 --> 13:24.680
+you less open and feel less safe to try new things out. Especially if those things are...
+
+13:24.680 --> 13:30.320
+I think sometimes it scales with the more useful and exciting and maybe even... Oh,
+
+13:30.320 --> 13:34.920
+that's pretty... If it's going to be exciting and useful and significantly change things,
+
+13:34.920 --> 13:40.520
+you could maybe feel extra resistant to try them out because you're not sure that you
+
+13:40.520 --> 13:46.280
+want to deal with all that excitement. And sometimes, again, the more useful it is, maybe
+
+13:46.280 --> 13:49.200
+the more resistant you are.
+
+13:49.200 --> 13:55.000
+In the programming environment, you might consider the difference between Smalltalk
+
+13:55.000 --> 14:03.400
+and C. And Smalltalk has all this, like Lisp, all this great interactive capability, but
+
+14:03.400 --> 14:07.840
+you have the baggage of carrying this big image around that people didn't want many
+
+14:07.840 --> 14:14.280
+years ago when it was popular. And C had nothing and still largely has nothing, right? Except
+
+14:14.280 --> 14:22.040
+you've got Unix there. And so people stare at a blank screen. They have no dynamic support.
+
+14:22.040 --> 14:29.960
+Maybe they have tags, but very little tooling. And yet, C dominates over Smalltalk. So I
+
+14:29.960 --> 14:36.280
+think we're talking about a similar kind of problem that maybe the leap is so far for
+
+14:36.280 --> 14:42.400
+people that you need to give them a series in between to transition them from their very
+
+14:42.400 --> 14:48.480
+weak initial environment to something much, much stronger.
+
+14:48.480 --> 14:55.240
+Yeah, that's a good point. And that's actually something that I think of for myself and thus
+
+14:55.240 --> 15:01.480
+something I was thinking about in regards to my talk. When you know that you want to...
+
+15:01.480 --> 15:05.480
+Let's consider the kind of user that you're talking about and hyperbole. And by the way,
+
+15:05.480 --> 15:10.160
+I enjoyed your hyperbole talk, your hyper-org talk, but up until now I hadn't been familiar
+
+15:10.160 --> 15:14.720
+with it. So I may say things that don't make any sense. But let's say this user that you're
+
+15:14.720 --> 15:20.520
+talking about who you want to become more comfortable with hyperbole. I'll start from
+
+15:20.520 --> 15:26.280
+the perspective of let's say they know they want to become more comfortable with it, but
+
+15:26.280 --> 15:34.520
+they also are having trouble getting comfortable with that process. And so that's certainly
+
+15:34.520 --> 15:40.720
+something I thought about building for myself and suggesting in this talk of when you know
+
+15:40.720 --> 15:43.560
+that you want to accomplish something, when you know that you want to change some of your
+
+15:43.560 --> 15:54.400
+habits to call them out and really put your habits on display for yourself. And rather
+
+15:54.400 --> 15:58.680
+than trying to remember them and ingrain them into your finger muscle memory and all that
+
+15:58.680 --> 16:04.560
+is to make some space to have your habits be public, not public necessarily, but just
+
+16:04.560 --> 16:10.280
+explicit in your environment and allow yourself to be uncomfortable with new habits for a
+
+16:10.280 --> 16:18.760
+while and that break out of the habitual space, give yourself some kind of mnemonic structure
+
+16:18.760 --> 16:25.900
+that lets you do these things habitually that will eventually kind of become that mold into
+
+16:25.900 --> 16:30.760
+which the habits will grow on top of rather than just trying to go from one set of habits
+
+16:30.760 --> 16:37.080
+to a new set of habits. And I think Emacs is one of those things that is great for that
+
+16:37.080 --> 16:43.120
+because it's the text, and especially what you demonstrated in hyperbole in that it seems
+
+16:43.120 --> 16:50.040
+like it's very easy to just write some text up that can generate for you a cheat sheet
+
+16:50.040 --> 16:54.480
+and say I've been using this on the left side, instead I want to use this on the right side
+
+16:54.480 --> 16:59.120
+and maybe two buffers or something. And you don't have to worry about what it's called,
+
+16:59.120 --> 17:04.080
+you don't have to worry about how to execute it or the key sequence or the function. When
+
+17:04.080 --> 17:08.240
+you find one day you find yourself using something on the left side, I'd rather use this on the
+
+17:08.240 --> 17:19.000
+right. And maybe over time you can move away from that and try to make it be more automatic.
+
+17:19.000 --> 17:22.440
+But at least I think maybe the key there is just acknowledging that the things that are
+
+17:22.440 --> 17:34.520
+habitual or that you want to become habitual can start to give yourself training wheels.
+
+17:34.520 --> 17:40.880
+Right Jens, I'm very sorry I'm going to have to pause the conversation now. But don't leave
+
+17:40.880 --> 17:45.040
+quite yet, this was a very interesting discussion and I would love to participate a little more
+
+17:45.040 --> 17:48.440
+but we are actually preparing for the closing remarks in the background. But what I'm going
+
+17:48.440 --> 17:52.880
+to suggest, because I don't want you both to lose steam and the closing remarks, you
+
+17:52.880 --> 17:56.440
+can watch them in your own time, I'm just going to thank everyone really. So by all
+
+17:56.440 --> 18:00.400
+means if you want to continue the discussion, you can stay in the room, we are still going
+
+18:00.400 --> 18:04.360
+to be recording and if you want to continue the discussion for as long as you want, it's
+
+18:04.360 --> 18:08.800
+going to be all good for us. It just won't be streamed now but it will eventually be
+
+18:08.800 --> 18:29.760
+available. So if you want to join the discussion now,
+
+18:29.760 --> 18:34.640
+you only have to go to the talk page and you will be able to join there. I'm really sorry
+
+18:34.640 --> 18:38.720
+Bob, I'm going to have to end it off in 30 seconds because we need to move to the next
+
+18:38.720 --> 18:43.680
+room. So I'll leave you to say bye Bob if you want to.
+
+18:43.680 --> 18:48.680
+Okay, I will stay here and talk to whoever wants to talk.
+
+18:48.680 --> 18:54.120
+Great and Bob do you want to say bye? Bye, thanks John, I appreciate it.
+
+18:54.120 --> 19:01.120
+Okay see you in a bit, we'll be closing remarks in about one minute. Okay, really sorry for
+
+19:01.120 --> 19:04.720
+recording short, we are now off stream and you can keep talking and we are recording
+
+19:04.720 --> 19:07.960
+everything. Okay, see you in a bit, I have to rush.
+
+19:07.960 --> 19:10.720
+So yeah, again, I don't want to keep you from the closing remarks.
+
+19:10.720 --> 19:15.680
+No, I'm happy to talk to you. I think Leo just kept saying, well you can stay but I
+
+19:15.680 --> 19:21.360
+have to cut it off. So I guess he was just saying the recording. I don't care.
+
+19:21.360 --> 19:25.080
+Let me jump over to, there's another question that someone posted, I just want to make sure
+
+19:25.080 --> 19:28.240
+I don't ignore that and then I'll.
+
+19:28.240 --> 19:32.440
+The tip of the day package or some elaboration on that idea and Emacs help discovery for
+
+19:32.440 --> 19:36.160
+lay users, does that already exist?
+
+19:36.160 --> 19:40.960
+You know, I'm not, I can pretty, I don't know if the person who wrote this is, if it's
+
+19:40.960 --> 19:47.960
+plasma strike, but hopefully they'll see the recording later. I'm confident in saying that
+
+19:47.960 --> 19:52.840
+this does exist. I don't know what it is because I've never used it, I've never seen it, but
+
+19:52.840 --> 19:56.960
+I know that something like this must exist, so I'm confident in saying that it does.
+
+19:56.960 --> 20:01.280
+Yeah, I haven't seen it either.
+
+20:01.280 --> 20:07.000
+If not, I mean, it probably would be something that would be relatively easy to make. Not
+
+20:07.000 --> 20:12.480
+necessarily the person who wants this, but yeah, it's something that I could.
+
+20:12.480 --> 20:19.640
+That's kind of interesting. If you put an org or a high rollo file together of all these
+
+20:19.640 --> 20:27.440
+tips, it would be very easy to, yeah, have something on a timer that would just pop one
+
+20:27.440 --> 20:34.920
+up every so often or based on some action, but that's kind of an interesting learning
+
+20:34.920 --> 20:42.300
+technique. I certainly use that in some other packages where a lot of times you just X out
+
+20:42.300 --> 20:49.400
+of it right away, but for things that actually provide useful tips, you tend to read them
+
+20:49.400 --> 20:56.320
+and linger for a bit, right, before you move on, and that's a great way because, I mean,
+
+20:56.320 --> 21:04.000
+after decades of using Emacs, there's definitely packages in Emacs, libraries that I've never
+
+21:04.000 --> 21:11.040
+seen before, I didn't know were there, and that I sometimes find useful, so there's always
+
+21:11.040 --> 21:20.880
+a lot to discover, and that feature discovery is a difficult thing, because that's why we
+
+21:20.880 --> 21:26.220
+spend a lot of time documenting things, because like with the reference manual, hyperbole
+
+21:26.220 --> 21:34.080
+about 170 pages, I don't expect people to read the manual, but to use it in info and
+
+21:34.080 --> 21:39.380
+say I'm interested in the action button, okay, I'll just read that action button section,
+
+21:39.380 --> 21:47.020
+and that's really what it's intended for, and why we provide quick access. In fact,
+
+21:47.020 --> 21:55.800
+if you look at the menu structure, the pull-down menus for hyperbole, there's just one pull-down
+
+21:55.800 --> 22:05.660
+menu, but the submenus under there, each one has an about or a doc item, and when you click
+
+22:05.660 --> 22:10.600
+on that, it takes you exactly to the place in the manual, discussing the concept that's
+
+22:10.600 --> 22:18.120
+covered by that menu, so it makes it very easy for people, but I was wondering, you
+
+22:18.120 --> 22:26.200
+know, if you, I think you have a lot of good process-oriented thoughts, and I'll say, you
+
+22:26.200 --> 22:33.740
+know, if you know who Doug Engelbart is or was, I worked with him a bit, and he was always
+
+22:33.740 --> 22:40.560
+focused on you have to evolve your process while you evolve your technology, and clearly,
+
+22:40.560 --> 22:48.280
+a lot of the people in the Emacs developer community are sort of focused on the technology,
+
+22:48.280 --> 22:53.720
+which is common, right, even in corporations, and it's always sort of a struggle to get
+
+22:53.720 --> 23:00.160
+people to try to evolve both at the same time, so I'd be interested in sort of conversing
+
+23:00.160 --> 23:06.920
+along those lines about, you know, we've built, so we've built two levels, I think, in hyperbole,
+
+23:06.920 --> 23:12.280
+we've built the toolkit of primitives that you can build from, and customize to your
+
+23:12.280 --> 23:19.200
+own needs, but we haven't done a lot about, and people are always asking, well, what's
+
+23:19.200 --> 23:24.920
+the workflow that I should use to integrate it with, and we're like, you know, well, what's
+
+23:24.920 --> 23:30.280
+your knowledge workflow, you know, what sort of tasks do you have to do, and then we can
+
+23:30.280 --> 23:35.800
+tell you something, but it is one of those general kinds of things, you know, like I
+
+23:35.800 --> 23:43.240
+say, I use the K-outliner to capture requirements, because I want, when I share those requirements
+
+23:43.240 --> 23:49.360
+with people, I want them to say, you know, well, item 9a, let's edit this this way, because
+
+23:49.360 --> 23:53.760
+a lot of times, right, they can't interact with the document that directly, or they want
+
+23:53.760 --> 24:03.120
+me to maintain it, so I find that everything is numbered that way, in any sort of structured
+
+24:03.120 --> 24:14.560
+ideation process, to be extremely valuable, and so, but I think, you know, maybe, obviously,
+
+24:14.560 --> 24:19.180
+as you said, you haven't used that, but, and I've worked on a lot of other Emacs stuff,
+
+24:19.180 --> 24:27.480
+but I think it'd be valuable, you know, having some discussions with you, to talk about that,
+
+24:27.480 --> 24:34.720
+you know, perspective from somebody trying to grok something like this, or, you know,
+
+24:34.720 --> 24:45.680
+get deeper into Emacs, and I always feel like, like I'm developing some new software at work,
+
+24:45.680 --> 24:51.480
+and our company is kind of moving from being a more consulting company to a technology
+
+24:51.480 --> 24:58.720
+company, and I say, well, okay, we're doing this big, big set of applications, where's
+
+24:58.720 --> 25:03.860
+the market input? The business people kind of wave their hands and say, you know, we
+
+25:03.860 --> 25:11.900
+want something shiny, but we never get structured input from the actual clients that will be
+
+25:11.900 --> 25:17.120
+the users, until we build something and put it in their hands, and I'm like, that's too
+
+25:17.120 --> 25:25.760
+late, you know, and we need, so I think it's sort of true here, too, that it's very hard
+
+25:25.760 --> 25:32.400
+to just, you know, like if I said, let's just have 10 people who have never tried hyperbole,
+
+25:32.400 --> 25:37.360
+look at it, go through a process, and just write one page on their experience, you know,
+
+25:37.360 --> 25:42.320
+but I think that'd be very hard to get that set of people together in general, you know,
+
+25:42.320 --> 25:44.720
+without effort, significant effort.
+
+25:44.720 --> 25:50.520
+That's a good point, because the people that would be able to use it, i.e. people who are
+
+25:50.520 --> 25:56.920
+already Emacs users for the most part, they're probably either already familiar with it,
+
+25:56.920 --> 26:03.360
+or busy, too, or maybe they have their own ways that they don't, they might be competent
+
+26:03.360 --> 26:08.800
+enough to do it, but not comfortable enough to do it, or not interested enough to do it.
+
+26:08.800 --> 26:12.720
+Maybe you have the intersection of all the different properties, which might be pretty
+
+26:12.720 --> 26:13.720
+small.
+
+26:13.720 --> 26:22.360
+Yeah, but just having those ideas, I think it helps us, you know, to shape, and I feel
+
+26:22.360 --> 26:33.040
+like we can take what we have and meld it, like what, if you saw Carl Volt's talk on
+
+26:33.040 --> 26:39.200
+his bi-directional links, I think that's a super valuable thing that we, you know, we
+
+26:39.200 --> 26:44.960
+haven't really considered much, but people talk about a lot as a result of work, having
+
+26:44.960 --> 26:48.040
+given them that capability for a while.
+
+26:48.040 --> 26:52.080
+That was Eduardo Oakes, was that Eduardo Oakes, or?
+
+26:52.080 --> 26:54.640
+No, no, that was not Eduardo.
+
+26:54.640 --> 27:00.120
+He's an interesting fellow, you know, it's like clearly very bright, but he lives in
+
+27:00.120 --> 27:08.120
+this academic-like bubble that, like, he wants to understand everything from the atomic level
+
+27:08.120 --> 27:15.840
+up in order to use it, so, you know, imagine, like, personally, you're what?
+
+27:15.840 --> 27:21.000
+I identify with that mindset, so I, so yeah, if you wanted to use toilet paper, would you
+
+27:21.000 --> 27:24.400
+try to understand the atomic composition?
+
+27:24.400 --> 27:31.320
+I'm just saying, he takes an extreme view, which may be, for him, that's what he finds
+
+27:31.320 --> 27:37.760
+work, so, but some interesting things come out of that, which is his EEV kind of stuff,
+
+27:37.760 --> 27:40.920
+which is very, very explicit, right?
+
+27:40.920 --> 27:48.960
+Everything is laid out, so it's bulky in a sense, but it, but he's got some good ideas
+
+27:48.960 --> 27:55.240
+on, like, tutorials and stuff, and he seems like he's more a scientist than a developer,
+
+27:55.240 --> 28:01.920
+so, you know, when we were trying to, I said, you could, the things you want to do, Hyperbole
+
+28:01.920 --> 28:07.200
+has a toolkit for, so just use Hyperbole, and then we'll help you shape whatever you
+
+28:07.200 --> 28:14.480
+want to do, and that's where we were never able to do that, because he'd say, well, okay,
+
+28:14.480 --> 28:21.920
+you have a button type that does what I want it to do, but now explain to me all the activation
+
+28:21.920 --> 28:27.280
+process for that, and I'm like, well, then you'd have to understand the, you know, the
+
+28:27.280 --> 28:32.240
+key parts of the Hyperbole code base, and you don't really need to, to do what we're
+
+28:32.240 --> 28:37.400
+talking about, so we can't, you know, that would take a long time, so let's not do that,
+
+28:37.400 --> 28:43.960
+and that never worked for him, so he decided to just build his own stuff, but then you
+
+28:43.960 --> 28:49.520
+look into that stuff, and it's sort of what you described in your talk, is, you know,
+
+28:49.520 --> 28:56.440
+it's not structured, it's, it's messy, it's, it's just sort of, you know, cobbled together,
+
+28:56.440 --> 29:06.320
+so he's got the same, he's got the same issue that it's, he doesn't want to do it just for
+
+29:06.320 --> 29:12.360
+his personal need, he wants, he wants this to be somebody that, something that people
+
+29:12.360 --> 29:18.000
+use, and so he gives talks and things like that, and he, so he, he's got this way of
+
+29:18.000 --> 29:23.720
+thinking that's very different than other people, that keeps his stuff away from people,
+
+29:23.720 --> 29:30.640
+but that's not his intention, it's just, you know, sort of the operational mechanics of
+
+29:30.640 --> 29:35.920
+the way it is, and I'd love, you know, I'd love to help him with that, or do something,
+
+29:35.920 --> 29:41.840
+he's a very nice fellow, but I haven't gotten him past the, you know, there are other abstraction
+
+29:41.840 --> 29:49.200
+levels besides the atomic level, let's, let's work on some of those levels, for him, you
+
+29:49.200 --> 29:53.040
+know, there's some sort of barrier, I think, there, so you're saying you're a little like
+
+29:53.040 --> 29:59.760
+that too? You have to get your hands on everything? Yeah, and I think that's, and full disclosure,
+
+29:59.760 --> 30:04.680
+I don't, I didn't have a lot of time to write, or to get in, I didn't have a lot of, like,
+
+30:04.680 --> 30:09.120
+in those 10 minutes to say everything I wanted to say, like, I'm not, I don't want to give
+
+30:09.120 --> 30:14.000
+the impression that I'm not a technical person, I am, I am a programmer, and I've been, like
+
+30:14.000 --> 30:18.880
+I said, I've been using Emacs for a very long time, just that over time, I probably, you
+
+30:18.880 --> 30:24.600
+know, just kind of have stayed in my personal sphere, and kind of worked, carved out a little
+
+30:24.600 --> 30:31.360
+thing that works for me, so I, my perspective might be a little surprising, to come up,
+
+30:31.360 --> 30:35.040
+you know, to people who might think, well, a talk like that, you're, you know, you're
+
+30:35.040 --> 30:40.520
+still a beginner, or you're still on the fringes, I'm like, no, I don't think I'm, I'm neither,
+
+30:40.520 --> 30:43.840
+neither beginner, feel like I'm a beginner, nor am I on the fringes of anything, I've
+
+30:43.840 --> 30:50.680
+just, my path has taken me through a certain way that is, is personal, it just happens,
+
+30:50.680 --> 30:57.880
+you know, but I think what you're saying earlier, is that, to identify, is, is that, that is
+
+30:57.880 --> 31:02.760
+one tension, the tension you were just mentioning, of, want to do something, but the Emacs is
+
+31:02.760 --> 31:08.120
+just one of those platforms where, where it's so, can entice you to do things, it can be
+
+31:08.120 --> 31:12.200
+so interesting and enticing to do certain things that you, it can lead to a lot of pain,
+
+31:12.200 --> 31:17.520
+and that you can, and confusion, where you can really want to learn something, and think,
+
+31:17.520 --> 31:22.240
+in your head, I'm always, you know, I'm, you know, I'm always thinking of, it was a dialogue
+
+31:22.240 --> 31:26.700
+with, you know, a dozen people when I used Emacs, a dozen other people whose, whose work
+
+31:26.700 --> 31:33.800
+I've read about, and developers, I've, I've read their works and stuff, of, it's hard
+
+31:33.800 --> 31:37.600
+to be doing something, and not be thinking about making it available for somebody else
+
+31:37.600 --> 31:43.640
+to use, I think it's, it's both very personal, and it's also hard to have a personal barrier,
+
+31:43.640 --> 31:48.240
+because I'm always, you know, I'm always thinking about, how would I expose this functionality
+
+31:48.240 --> 31:53.000
+for general purposes, how would I, how would I publish this, and so I can identify with
+
+31:53.000 --> 31:58.760
+that, and also, also, I want, you, you want to know, both, maybe there's just certain
+
+31:58.760 --> 32:02.880
+personalities, and mine would be one of them, where you really want to know why things are
+
+32:02.880 --> 32:06.600
+happening the way that they're happening, and I think Emacs is one of those places where,
+
+32:06.600 --> 32:11.520
+when you come in, you come in on the ground floor, and you see, wow, I can go up so high,
+
+32:11.520 --> 32:15.360
+but also, you, you can look down and say, well, there's a hundred floors below me, and
+
+32:15.360 --> 32:18.040
+you get torn, you know.
+
+32:18.040 --> 32:25.280
+I would ask a question like, do you, do you tend to look at the way Lisp primitives are
+
+32:25.280 --> 32:32.880
+implemented in C, or do you just focus on the documentation of the Lisp function, and
+
+32:32.880 --> 32:38.160
+then work from there, in terms of your Emacs, how far down you go?
+
+32:38.160 --> 32:40.200
+Good question.
+
+32:40.200 --> 32:41.200
+It's changed recently.
+
+32:41.200 --> 32:47.040
+I'd say, up until a couple years ago, I was mostly focused on the, on inside, you know,
+
+32:47.040 --> 32:52.400
+inside the Lisp machine, and going up, but I've started getting a little more curious
+
+32:52.400 --> 32:55.160
+about the C layer below that.
+
+32:55.160 --> 32:59.000
+One of the things I started looking at was some of the way that the key maps have been
+
+32:59.000 --> 33:06.920
+handled, the key, the map lookups were handled at the C level, because of the, my Viper,
+
+33:06.920 --> 33:14.640
+sort of affinity, my affinity for Viper, because there's some, some functionality there that
+
+33:14.640 --> 33:20.680
+changed or was made a little bit, the implementation was made a little bit different.
+
+33:20.680 --> 33:24.800
+So I guess, I guess both, but I, but I could understand that, yeah, there's, I, I never
+
+33:24.800 --> 33:30.640
+felt like I had to understand anything below that level, but just, it's good that.
+
+33:30.640 --> 33:37.640
+And do you go up, do you spend a lot of time thinking about the user level and user experience,
+
+33:37.640 --> 33:43.920
+user interfaces in your other work even, or, you know, just to get an idea of the sort
+
+33:43.920 --> 33:49.880
+of problems you'd like to sink your teeth into, you know, how you might provide some
+
+33:49.880 --> 33:55.280
+feedback on the hyperbole side, if you were to?
+
+33:55.280 --> 34:01.960
+I think I'm, I, I, in terms of technical stuff, I do like to stay more, I get more satisfaction,
+
+34:01.960 --> 34:10.320
+I think, thinking about the, the problem solving, especially in Emacs, just how to build, how
+
+34:10.320 --> 34:18.440
+to solve a problem in general, just, you know, UI level stuff or user experience stuff, I
+
+34:18.440 --> 34:25.640
+think it's just, it's, it's harder, it can be harder to do it right, but I guess that's
+
+34:25.640 --> 34:31.840
+something that I don't, I just haven't, I guess I haven't put, I guess I put more of
+
+34:31.840 --> 34:38.560
+my energy towards the, the middle tier of things of kind of just building general solutions.
+
+34:38.560 --> 34:43.400
+But if, but if it comes, I mean, I, hyperbole is definitely high, if not on the top of my
+
+34:43.400 --> 34:49.480
+list now, coming out of today's presentation and hearing about it today, of things to look
+
+34:49.480 --> 34:50.480
+at no matter what.
+
+34:50.480 --> 34:57.120
+So, I mean, I'm, I'm eager to learn more about it and use it from, from wherever, wherever
+
+34:57.120 --> 35:00.440
+I end up kind of landing on, on that, that spectrum.
+
+35:00.440 --> 35:07.600
+Well, I'm wondering if you might have some time to, so we have, there's two other people
+
+35:07.600 --> 35:11.040
+who gave the two other talks who work with me.
+
+35:11.040 --> 35:18.360
+We do a Sunday meeting, Sunday morning, East coast time, you know, one guy's on the development
+
+35:18.360 --> 35:22.840
+and the other is Ramin, who is a writer.
+
+35:22.840 --> 35:28.200
+And I mean, he's an ML engineer too, but he's new to hyperbole.
+
+35:28.200 --> 35:33.120
+So he's kind of, you know, converting some of what he did in a word to hyperbole.
+
+35:33.120 --> 35:39.120
+So he's kind of a good feedback loop for us there too.
+
+35:39.120 --> 35:45.400
+Matt and I have been, you know, deep in it for many years, so we can't, we can't see
+
+35:45.400 --> 35:47.040
+it in an unbiased way.
+
+35:47.040 --> 35:52.960
+And I'm just thinking, you know, maybe if you have a bit of time, you may want to, you
+
+35:52.960 --> 35:58.680
+know, think about giving us some structured feedback or, you know, coming to one of those
+
+35:58.680 --> 36:01.320
+meetings chatting with us.
+
+36:01.320 --> 36:02.320
+Yeah.
+
+36:02.320 --> 36:08.040
+You know, so, and I'm happy to answer your questions too, because I think, I just feel
+
+36:08.040 --> 36:14.840
+like there's, I'll tell you, this is, so my background with Emacs, besides as a user,
+
+36:14.840 --> 36:22.240
+I built something called InfoDoc, which was an extensive IDE to try to bring out Emacs
+
+36:22.240 --> 36:24.240
+functionality.
+
+36:24.240 --> 36:30.000
+Many years ago, it was an extensive set of menus, popup menus, pull down menus, and fixing
+
+36:30.000 --> 36:36.280
+a lot of stuff like, like in our mail, the keys and the interface wasn't the same between
+
+36:36.280 --> 36:39.800
+the summary buffer and the main buffer.
+
+36:39.800 --> 36:42.920
+And I, I normalized all that fixed stuff in Dura.
+
+36:42.920 --> 36:50.400
+All of that was like all rolled into InfoDoc so that a lot of these warts that people talk
+
+36:50.400 --> 36:57.320
+about that still are there to this day, some of them I see got put together and that was
+
+36:57.320 --> 37:06.680
+just built to top Zmax, the fork, XZmax fork of, you know, when Jamie Zawinski was doing
+
+37:06.680 --> 37:07.680
+it.
+
+37:07.680 --> 37:12.480
+And so I, you know, I still use some of that with Gnuely Max, but I never took the time
+
+37:12.480 --> 37:14.280
+to repackage it and stuff like that.
+
+37:14.280 --> 37:15.800
+So that's sort of sitting out there.
+
+37:15.800 --> 37:21.880
+And then I built the OO browser, which was a small talk like a code browser for eight
+
+37:21.880 --> 37:24.680
+different object oriented languages.
+
+37:24.680 --> 37:30.320
+And that's sitting out there waiting for just a, I had it ready, largely ready except for
+
+37:30.320 --> 37:34.820
+some documentation and I have no time to work on it.
+
+37:34.820 --> 37:40.720
+So it's never been, the modern version hasn't been republished for people to use, but you
+
+37:40.720 --> 37:45.920
+know, it sort of tells you some of the areas that, that I've spent a lot of time in and
+
+37:45.920 --> 37:49.300
+I've built some pretty big things.
+
+37:49.300 --> 37:53.760
+So I've gotten to see, you know, what's absorbable and what's not.
+
+37:53.760 --> 37:59.640
+And, you know, there is a lot of people sort of staying down at that low level that I think
+
+37:59.640 --> 38:05.840
+you do tend to run into with Emacs users, but there was like people love people who
+
+38:05.840 --> 38:07.960
+use the OO browser.
+
+38:07.960 --> 38:13.400
+That was a very good user experience because it was just very smooth and it had multiple
+
+38:13.400 --> 38:16.320
+windows and, you know, did what people wanted.
+
+38:16.320 --> 38:21.360
+And it was very fast because I focused on the algorithms and there was nothing else
+
+38:21.360 --> 38:23.400
+that could do what it could do.
+
+38:23.400 --> 38:29.480
+Now, now that we have all these language server protocols, which I still think are not quite
+
+38:29.480 --> 38:34.640
+where they should be on the backend, but you know, it's nice that now they're integrating
+
+38:34.640 --> 38:35.640
+Eclot.
+
+38:35.640 --> 38:41.160
+So I'm not a big user of those yet, but I hope to get more leverage out of them if they,
+
+38:41.160 --> 38:47.120
+in fact, you know, can give them, satisfy the queries that I really need in my work.
+
+38:47.120 --> 38:51.440
+So yeah, I think you'll find, you'll definitely find some utility.
+
+38:51.440 --> 38:57.720
+I think, you know, once you grok a bit, and I don't think it'll take you that long to
+
+38:57.720 --> 39:04.360
+get enough of a sense of hyperbole to start building a couple types, button types yourself
+
+39:04.360 --> 39:08.360
+and tailoring it to whatever your needs are.
+
+39:08.360 --> 39:13.800
+But as you said, I'm kind of interested in your thoughts about what will make that easier
+
+39:13.800 --> 39:22.120
+for people maybe with, maybe with not as much technical knowledge as you have.
+
+39:22.120 --> 39:27.280
+And just, you know, that you're willing to put yourself in somebody else's shoes, I think
+
+39:27.280 --> 39:33.080
+is a very valuable kind of way to be and something I'd like to.
+
+39:33.080 --> 39:40.160
+Well, I certainly, I'm willing to, willing to try, can't promise what my mindset will
+
+39:40.160 --> 39:43.360
+end up producing, but I, you know, it's, let's put it this way.
+
+39:43.360 --> 39:47.240
+If I could, if I could benefit from what you've created, benefit from learning about it, and
+
+39:47.240 --> 39:53.200
+at the same time, potentially give some benefit back, you know, that seems like it's a win-win-win.
+
+39:53.200 --> 39:55.200
+So I'm happy.
+
+39:55.200 --> 40:02.440
+Well, I'd be very surprised if you can't, but we, we accept that kind of feedback too,
+
+40:02.440 --> 40:06.700
+is that, you know, there's too much of a barrier to entry for this reason here.
+
+40:06.700 --> 40:10.760
+I love to hear those things too, because, you know, there have been things that weren't
+
+40:10.760 --> 40:19.480
+there that we've built after, like there's a guy, Sean, Sean something, he's like a business
+
+40:19.480 --> 40:24.760
+user who runs his business on this custom database that he's built.
+
+40:24.760 --> 40:28.840
+And he uses hyperbole as a front end to that backend database.
+
+40:28.840 --> 40:33.200
+He calls it, I forget it's hyper or something.
+
+40:33.200 --> 40:38.200
+And he, he has a lot of deeper thoughts, you know, very specific, like he'll write it with
+
+40:38.200 --> 40:40.880
+just one issue that he's trying to do.
+
+40:40.880 --> 40:44.440
+And sometimes, you know, we'll implement things for him.
+
+40:44.440 --> 40:46.640
+And that seems to work pretty well.
+
+40:46.640 --> 40:51.360
+Sometimes he wants things that are further afield, you know, and we don't go there,
+
+40:51.360 --> 40:58.000
+but he's, he's a useful, one of the users on the very low traffic hyperbole mail list.
+
+40:58.000 --> 41:03.560
+So he's probably responsible for 80% of the traffic, right?
+
+41:03.560 --> 41:05.960
+He's the Pareto subscriber.
+
+41:05.960 --> 41:06.960
+Yeah.
+
+41:06.960 --> 41:07.960
+Yeah.
+
+41:07.960 --> 41:16.040
+So, but I look forward to it and I think you'd like Ramin and Matt, Matt is an engineer for
+
+41:16.040 --> 41:25.680
+Spotify and he has implemented 260 test cases for hyperbole that are run against the three
+
+41:25.680 --> 41:30.040
+major versions of Emacs every time we commit.
+
+41:30.040 --> 41:36.200
+And that's proven to be very successful because, you know, sometimes we're modifying things
+
+41:36.200 --> 41:43.080
+at the engine level and who knows what, what set of button types that affects.
+
+41:43.080 --> 41:50.520
+So it works really well when we're, and we've had very good success that we have very few,
+
+41:50.520 --> 41:58.480
+you know, bugs that we don't know about already being found by users once we make a release.
+
+41:58.480 --> 42:01.760
+It seems like PlasmaStrike wants to jump in.
+
+42:01.760 --> 42:02.760
+I'm sorry.
+
+42:02.760 --> 42:03.760
+I didn't, wasn't.
+
+42:03.760 --> 42:07.120
+I did see your link earlier possibly by the Emacs dashboard and I opened it, it looked
+
+42:07.120 --> 42:08.120
+pretty cool.
+
+42:08.120 --> 42:12.560
+Bob, you might, you might, yeah.
+
+42:12.560 --> 42:23.080
+I've been getting my partner into LogSec with org, which is kind of like org-roam for knowledge
+
+42:23.080 --> 42:24.080
+bases.
+
+42:24.080 --> 42:29.920
+And I've been using that, having my knowledge base on LogSec.
+
+42:29.920 --> 42:36.720
+He could look at it, it's getting synchronized with sync thing and he can see how I do the
+
+42:36.720 --> 42:37.720
+stuff.
+
+42:37.720 --> 42:39.480
+He can replicate it if he wants to.
+
+42:39.480 --> 42:45.640
+Then I'm thinking about putting CRDT with Emacs so that we could both edit the same
+
+42:45.640 --> 42:50.120
+document in real time.
+
+42:50.120 --> 42:55.920
+And that way I can get Emacs to work with the same data set as org-roam and that way
+
+42:55.920 --> 43:01.920
+he doesn't have to learn absolutely everything that Emacs has to offer.
+
+43:01.920 --> 43:07.800
+There's also, I can use all that stuff if I want to use it.
+
+43:07.800 --> 43:08.800
+That's cool.
+
+43:08.800 --> 43:16.120
+I, you know, I've heard of that, but not necessarily, didn't know anything about it.
+
+43:16.120 --> 43:21.080
+So that's, I'm looking, you know, all I guess all I can say at this point is that it looks
+
+43:21.080 --> 43:22.080
+really cool.
+
+43:22.080 --> 43:29.200
+It's, does it sounds like you're saying it's front, it's easy to, easy accessible, easily
+
+43:29.200 --> 43:30.200
+to get into.
+
+43:30.200 --> 43:32.360
+Well, you can also put it on your phone too.
+
+43:32.360 --> 43:39.360
+So it would probably be a really good way of doing that, even though it's harder to
+
+43:39.360 --> 43:48.160
+get Emacs on your phone and on iPhones as well.
+
+43:48.160 --> 43:52.400
+You got to figure out, that's what people were asking about, touchscreens.
+
+43:52.400 --> 43:55.640
+Have we thought about how to use touchscreens?
+
+43:55.640 --> 44:00.800
+I think it's an interesting challenge for Emacs, you know, you even talk about mouse
+
+44:00.800 --> 44:07.840
+buttons and people kind of freak out a lot of times because they're so keyboard driven.
+
+44:07.840 --> 44:14.200
+Well, one of the great things about Emacs is it's a keyboard is a first citizen and
+
+44:14.200 --> 44:19.200
+mouse can't be a first citizen because you're going to have to switch between it and all
+
+44:19.200 --> 44:21.200
+the time.
+
+44:21.200 --> 44:28.560
+If you go back to Engelbart's work, it was one hand on the mouse, one hand on the keyboard.
+
+44:28.560 --> 44:37.320
+And you know, we do miss some of that, that ability to point at things and make operations
+
+44:37.320 --> 44:38.320
+on them.
+
+44:38.320 --> 44:45.160
+We have things like Avi, I believe it is, right, for where you can move around across
+
+44:45.160 --> 44:47.720
+windows and buffers very rapidly.
+
+44:47.720 --> 44:53.400
+So you can get to like an exact point in a buffer much faster, and then you could act
+
+44:53.400 --> 44:55.120
+on it, you know, doing it that way.
+
+44:55.120 --> 44:57.720
+So it's kind of like a replacement for that.
+
+44:57.720 --> 45:03.300
+But it's amazing when you start to think a little differently like that.
+
+45:03.300 --> 45:07.720
+And certainly people have done that with split keyboards and they, some people only use half
+
+45:07.720 --> 45:09.600
+of the keyboard then.
+
+45:09.600 --> 45:12.920
+So and they have all the modifier keys, you know, that's what we're doing.
+
+45:12.920 --> 45:18.080
+In fact, Hyperbole has a module that isn't active, but it's sitting out there.
+
+45:18.080 --> 45:24.500
+And it turns the mouse keys into two modifier buttons.
+
+45:24.500 --> 45:28.720
+So it could be control and meta, or whatever have you.
+
+45:28.720 --> 45:34.400
+And so if you want to operate that way, you can emulate what Engelbart was doing with
+
+45:34.400 --> 45:38.440
+your regular keyboard and the mouse.
+
+45:38.440 --> 45:44.520
+Didn't that, didn't he have like a weird mouse where it had like more buttons on it?
+
+45:44.520 --> 45:47.520
+He was three buttons, actually, yeah.
+
+45:47.520 --> 45:50.080
+He had the chord keyboard you're thinking of.
+
+45:50.080 --> 45:56.840
+The keyboard was like five keys that you could press as chords.
+
+45:56.840 --> 46:02.120
+So you could press all five or three of them, and they would produce different character
+
+46:02.120 --> 46:03.120
+outputs.
+
+46:03.120 --> 46:05.880
+I mean, they had a lot of things that we don't have.
+
+46:05.880 --> 46:13.520
+You know, their file system was node based, and so everything could be hyperlinked to.
+
+46:13.520 --> 46:17.440
+And they had permanent IDs everywhere, and they had journals.
+
+46:17.440 --> 46:22.120
+And they had implemented almost all of this in assembly at first, and it was on a time
+
+46:22.120 --> 46:23.120
+shared machine.
+
+46:23.120 --> 46:26.800
+So everything was collaborative instead of individual.
+
+46:26.800 --> 46:30.680
+But you know, so we'll get there eventually.
+
+46:30.680 --> 46:36.320
+It's a lot of, a lot of things have changed that we've had to, you know, fight against
+
+46:36.320 --> 46:38.800
+separating people from collaborating.
+
+46:38.800 --> 46:44.760
+And now everybody's trying to get back to you and say, let's build collaborative software.
+
+46:44.760 --> 46:50.320
+Yeah, I noticed that's another, another one of those cycles that I noticed was the talk
+
+46:50.320 --> 46:57.080
+of, I forget who, it was the guy who did the SQLite thing and how he, how he was basically
+
+46:57.080 --> 47:03.720
+saying, hey, text is great, but these, these somewhat relational databases have a lot of
+
+47:03.720 --> 47:04.720
+things to offer.
+
+47:04.720 --> 47:07.200
+And I'm thinking, yeah, of course, I agree.
+
+47:07.200 --> 47:12.160
+But it's just funny how so much of the Emacs ethos has been, text can do so much, and they
+
+47:12.160 --> 47:13.160
+were right.
+
+47:13.160 --> 47:18.560
+And then now, like, this is, it's like a turning point to say, hey, text can't do all these
+
+47:18.560 --> 47:22.160
+things, but let's use Emacs to take advantage of all this non-text stuff too.
+
+47:22.160 --> 47:27.600
+That's just, that's just one of those, kind of those cyclical things of where we do what
+
+47:27.600 --> 47:31.360
+we can with text, and then someone notices that, hey, we, maybe we could do something
+
+47:31.360 --> 47:35.360
+without text, and then that, that balance might shift and just go back and forth.
+
+47:35.360 --> 47:39.560
+And it sounds like it's the same, like you're talking about with collaboration.
+
+47:39.560 --> 47:43.840
+Have you ever seen VisiData?
+
+47:43.840 --> 47:53.440
+It's a curses program that one guy has written that can manipulate any sort of tabular information.
+
+47:53.440 --> 48:00.360
+It's the, it's the Emacs of, like, you don't want to use a spreadsheet, and you want to
+
+48:00.360 --> 48:02.720
+do data analysis.
+
+48:02.720 --> 48:04.360
+It's pretty unbelievable what's in there.
+
+48:04.360 --> 48:06.560
+It's written in Python.
+
+48:06.560 --> 48:15.600
+But he has asynchronous slurping of super large CSVs that are compressed and encrypted.
+
+48:15.600 --> 48:17.600
+So it's basically like a Unix tool.
+
+48:17.600 --> 48:23.600
+You can use a command line wise, but then it gives you a curses interface, and you can
+
+48:23.600 --> 48:27.040
+slice and dice and get histograms.
+
+48:27.040 --> 48:28.040
+So it's kind of amazing.
+
+48:28.040 --> 48:30.680
+I tried, the key bindings were so different.
+
+48:30.680 --> 48:35.560
+I did some work to try to make it more Emacs-like in that.
+
+48:35.560 --> 48:40.600
+But he would have something that would be so valuable if it wasn't connected to the
+
+48:40.600 --> 48:41.600
+curses interface.
+
+48:41.600 --> 48:46.720
+You know, it was an API, and, but he likes it that way.
+
+48:46.720 --> 48:49.200
+And so he just keeps developing it.
+
+48:49.200 --> 48:55.440
+But it's really amazing if you have to process a lot of data and don't want to use Excel
+
+48:55.440 --> 48:56.440
+or something.
+
+48:56.440 --> 49:00.280
+That's with a Z, Visi or S, or?
+
+49:00.280 --> 49:02.280
+No, V-I-S-I-D-A-T-A.
+
+49:02.280 --> 49:05.160
+You'll find it.
+
+49:05.160 --> 49:12.000
+It's his name is Paul Swanson.
+
+49:12.000 --> 49:13.200
+It's not Swanson.
+
+49:13.200 --> 49:17.000
+It's something like that, though.
+
+49:17.000 --> 49:18.520
+I think it is.
+
+49:18.520 --> 49:22.640
+I think according to his website, according to the website, it says Saul Pwonson.
+
+49:22.640 --> 49:23.640
+So I'm guessing that.
+
+49:23.640 --> 49:24.640
+Yes, Saul Pwonson.
+
+49:24.640 --> 49:25.640
+I get it backwards.
+
+49:25.640 --> 49:26.640
+I was Paul Swanson.
+
+49:26.640 --> 49:31.640
+Yeah, he's a great guy.
+
+49:31.640 --> 49:32.640
+That's another thing on my list.
+
+49:32.640 --> 49:33.640
+It'll go.
+
+49:33.640 --> 49:34.640
+Yeah, check it out.
+
+49:34.640 --> 49:38.400
+Don't blow your mind what's in there.
+
+49:38.400 --> 49:43.960
+And again, it's like there's a small community, but it's like all these people that it's such
+
+49:43.960 --> 49:51.360
+a simple download, you know, it's a standalone executable, but largely, you know, people
+
+49:51.360 --> 49:52.440
+just don't know about it.
+
+49:52.440 --> 49:58.680
+I tripped over it and I'm like, my God, how do you get this far without me hearing about
+
+49:58.680 --> 49:59.680
+it?
+
+49:59.680 --> 50:01.240
+I think that's one of those.
+
+50:01.240 --> 50:06.840
+Maybe it's a case where if you don't get a lot of attention, you end up doing things
+
+50:06.840 --> 50:12.120
+in a way that you take things in the direction that you want to take them.
+
+50:12.120 --> 50:15.720
+And sometimes that leads to a bad place and sometimes it leads to a really interesting
+
+50:15.720 --> 50:16.720
+and good place.
+
+50:16.720 --> 50:23.120
+And it's probably somewhere in between that seems like he's taking this to a place.
+
+50:23.120 --> 50:28.360
+He had some usability issues and then he got like two other people on the team and they
+
+50:28.360 --> 50:34.360
+really helped him, I think with that, you know, he takes feedback pretty well and the
+
+50:34.360 --> 50:36.440
+team takes feedback well.
+
+50:36.440 --> 50:40.160
+So they've been evolving it, you know, from version one to like, I think they're on three
+
+50:40.160 --> 50:46.160
+now and you know, it's come a long way that way too.
+
+50:46.160 --> 50:52.120
+And now he's got a job, I believe, where he can work on it as well.
+
+50:52.120 --> 50:58.280
+So yeah, that should advance it a lot too.
+
+50:58.280 --> 51:03.960
+So yeah, there's so much good stuff going on, you know, and it's just what's not going
+
+51:03.960 --> 51:08.760
+on is sort of what we had long ago was the reusability.
+
+51:08.760 --> 51:13.560
+Nobody's really building libraries anymore, you know, that people can build on.
+
+51:13.560 --> 51:20.320
+It's all like, well, we got to wrap a web app around our API and that's it.
+
+51:20.320 --> 51:24.920
+And we're not going to make the code underlying the API shareable.
+
+51:24.920 --> 51:28.960
+You have to consume it, but that's all you can do.
+
+51:28.960 --> 51:35.160
+And so I think where everybody's rebuilding the same things again and again now, because
+
+51:35.160 --> 51:43.840
+sort of what Stallman talks about, that sharing culture has been snuffed out so broadly, you
+
+51:43.840 --> 51:49.520
+know, in terms of what people spend most of their waking hours on, right?
+
+51:49.520 --> 51:54.880
+As professional developers and, you know, you kind of miss it, right?
+
+51:54.880 --> 52:00.240
+From when you could, because having written that old browser, I mean, what I would do,
+
+52:00.240 --> 52:03.720
+what I remember doing is saying, okay, here's a thousand classes.
+
+52:03.720 --> 52:09.040
+I'll just run my browser over it and get to understand the interrelationships.
+
+52:09.040 --> 52:13.060
+And it's like, well, where are those like, you know, they're out there, there's still
+
+52:13.060 --> 52:18.540
+numerical libraries and things, but you just don't have the ecosystem because the energy
+
+52:18.540 --> 52:25.680
+is going somewhere else, you know, to the finished products, more than reusable building
+
+52:25.680 --> 52:26.680
+blocks.
+
+52:26.680 --> 52:27.680
+I think.
+
+52:27.680 --> 52:28.680
+Yeah.
+
+52:28.680 --> 52:30.480
+Have you heard of Glorious Toolkit?
+
+52:30.480 --> 52:35.680
+I think that's what it's called, but it's a continuation of Smalltalk and it has a lot
+
+52:35.680 --> 52:40.840
+of concepts like that where you have multiple representations of the same data.
+
+52:40.840 --> 52:46.480
+Like the, also that Mother of All Demos where Engelbarton was doing that.
+
+52:46.480 --> 52:47.480
+Yeah.
+
+52:47.480 --> 52:48.960
+I know, I've seen that many times.
+
+52:48.960 --> 52:53.560
+I got to work with Doug maybe for a year or so.
+
+52:53.560 --> 52:58.320
+By the way, Plasma Strike, I'm going to put that on my queue to watch because I've never
+
+52:58.320 --> 52:59.320
+actually watched.
+
+52:59.320 --> 53:00.320
+I know about it.
+
+53:00.320 --> 53:01.320
+Oh yeah.
+
+53:01.320 --> 53:02.320
+It's great.
+
+53:02.320 --> 53:03.320
+It's great.
+
+53:03.320 --> 53:05.040
+It's nice to see him as a young man too.
+
+53:05.040 --> 53:09.800
+Like that was 1968, he started like 1957 or something.
+
+53:09.800 --> 53:13.480
+The stuff they had before 1960 is incredible.
+
+53:13.480 --> 53:17.880
+There's also another spreadsheet, like what you're talking about, but an Emacs and that
+
+53:17.880 --> 53:23.240
+talk right there too, but yeah.
+
+53:23.240 --> 53:28.520
+All this, I mean, just those initial tips, you know, I was finding stuff that I need.
+
+53:28.520 --> 53:34.960
+So I like that idea, I think might do something with that if we can get a good database and
+
+53:34.960 --> 53:43.340
+link it into Hyperbole with some simple exposure that kind of gets people into some of this
+
+53:43.340 --> 53:48.880
+but I'll tell you what I really want that I can't find.
+
+53:48.880 --> 53:52.560
+There's so much effort at low code environments now.
+
+53:52.560 --> 54:01.120
+I want a low code environment for spinning up web apps inside a company where it's not
+
+54:01.120 --> 54:02.880
+your focus.
+
+54:02.880 --> 54:05.260
+It's just for an internal app, right?
+
+54:05.260 --> 54:11.520
+Like we want to do say time tracking for one small team and we want to build it ourselves.
+
+54:11.520 --> 54:16.380
+You know, that's not the real use case, but if you took something like that, so you don't
+
+54:16.380 --> 54:21.520
+have a lot of resources, you don't have a lot of time, you know how to program, but
+
+54:21.520 --> 54:28.040
+you want something that lets you operate like you're building a Python command line thing,
+
+54:28.040 --> 54:30.940
+but you want it to be a web app.
+
+54:30.940 --> 54:37.320
+There's a cool project I saw for that that would be, that was a peer-to-peer KISS web
+
+54:37.320 --> 54:42.560
+browser.
+
+54:42.560 --> 54:48.220
+Because I've looked at a lot of these, you know, there's no code DB.
+
+54:48.220 --> 54:57.640
+The best one that I came to but has been hard to set up internally was, it's like from a
+
+54:57.640 --> 55:04.940
+German company, it's like designed in Germany and implemented in China, a lot or pieces
+
+55:04.940 --> 55:09.260
+of it, and what is it called?
+
+55:09.260 --> 55:14.200
+I'll have to look at my database.
+
+55:14.200 --> 55:20.560
+There's like something like Seaborn or something like that.
+
+55:20.560 --> 55:33.720
+There's a couple of projects that are named that way, but let's see, Seaborn, low code.
+
+55:33.720 --> 56:01.320
+Let's see something, find it, but, oh, low code, so there's something, it's amazing to
+
+56:01.320 --> 56:11.560
+me, oh, C table, that's it, C table, SEA table, that's kind of one we've been trying to get
+
+56:11.560 --> 56:15.400
+to work, but there's still limits.
+
+56:15.400 --> 56:23.720
+There's an environment where like if Emacs could let you do the mock-up of your web app
+
+56:23.720 --> 56:33.480
+using Lisp and then could be fully deployable onto a web stack, that would be, I mean, we
+
+56:33.480 --> 56:41.200
+have a web server, it's just a question of, and we have like C-based fast web servers
+
+56:41.200 --> 56:49.480
+that you could interface to Lisp, so I don't think like the capacity is the problem, but
+
+56:49.480 --> 56:56.760
+nobody's gone from providing the web server to here's how you could program the front
+
+56:56.760 --> 57:00.840
+end and connect it to the back end all in Lisp.
+
+57:00.840 --> 57:08.960
+That's one of my biggest issues is like, and you see it in the hyperbole work, is I want
+
+57:08.960 --> 57:10.920
+simplicity and uniformity.
+
+57:10.920 --> 57:19.080
+I can't like program in three languages at the same time, so I can't use JavaScript on
+
+57:19.080 --> 57:25.840
+the front end and Python on the back end and then have to deal with CSS as well.
+
+57:25.840 --> 57:26.840
+And HTML.
+
+57:26.840 --> 57:27.840
+Yeah.
+
+57:27.840 --> 57:28.840
+And HTML.
+
+57:28.840 --> 57:34.840
+It's like my mind just cracks up and I'm like, why do, and even if you were brought up that
+
+57:34.840 --> 57:42.880
+way, like how can you be a 22-year-old and say, oh, this is so simple, because they do,
+
+57:42.880 --> 57:43.960
+they say that all the time.
+
+57:43.960 --> 57:47.240
+Well, this is a really simple thing to do.
+
+57:47.240 --> 57:54.560
+I mean, yeah, if you're copying and pasting all your code, which is apparently what has
+
+57:54.560 --> 58:01.040
+become common now, right, is I'll just use this template, then yeah, that's simple.
+
+58:01.040 --> 58:03.760
+But what about building it originally?
+
+58:03.760 --> 58:09.720
+It's like, there's just so much for your mind to process.
+
+58:09.720 --> 58:17.080
+And there was something called Meta HTML, which was really cool when HTML first came
+
+58:17.080 --> 58:21.800
+out, and you're not going to be able to find this or even a reference to it, probably.
+
+58:21.800 --> 58:30.600
+But this was two guys from MIT, and they said, okay, instead of programming at the HTML level,
+
+58:30.600 --> 58:39.720
+let's write a list-like interpreter that uses HTML syntax, but will give you all the higher
+
+58:39.720 --> 58:42.160
+level programming constructs you need.
+
+58:42.160 --> 58:47.840
+And so you could write stuff that looked like HTML, but you'd be processing lists of things
+
+58:47.840 --> 58:55.280
+and manipulating the DOM in these very abstract ways and very little code.
+
+58:55.280 --> 59:01.800
+And again, you didn't have to mix a different syntax in like you have to now.
+
+59:01.800 --> 59:09.940
+It was great, and it wasn't a lot of code, and it worked, and nobody cared.
+
+59:09.940 --> 59:11.280
+Nobody did anything with it.
+
+59:11.280 --> 59:12.880
+It died on the vine.
+
+59:12.880 --> 59:21.520
+Well, we didn't need to endlessly measure every little mouse movement and eyeball engagement
+
+59:21.520 --> 59:23.440
+and then monetize it and analyze it.
+
+59:23.440 --> 59:27.320
+So you could focus on just doing what you needed to do.
+
+59:27.320 --> 59:28.320
+Yeah.
+
+59:28.320 --> 59:29.320
+Well, that's right.
+
+59:29.320 --> 59:30.320
+Friction drives.
+
+59:30.320 --> 59:32.200
+That's what I love.
+
+59:32.200 --> 59:37.280
+I'm stuck in a Microsoft environment now where there's a little bit of Linux here and there,
+
+59:37.280 --> 59:40.480
+but I'm either a Mac user.
+
+59:40.480 --> 59:47.840
+I've always been a Unix user, so Windows is enormously painful despite the strides that
+
+59:47.840 --> 59:50.840
+they've made.
+
+59:50.840 --> 59:55.440
+I always look at it, and I say, well, it's a brilliant business perspective because they
+
+59:55.440 --> 01:00:02.280
+know they create so many problems for people, so much friction that it creates enormous
+
+01:00:02.280 --> 01:00:10.240
+economic opportunities for many, many people, and that's what they do.
+
+01:00:10.240 --> 01:00:11.640
+They have WSL.
+
+01:00:11.640 --> 01:00:13.720
+Do you know about that?
+
+01:00:13.720 --> 01:00:17.720
+The Windows System for Linux, yeah.
+
+01:00:17.720 --> 01:00:21.840
+They had a guy working on that who was leading it, and they were just making stride after
+
+01:00:21.840 --> 01:00:30.720
+stride, and apparently some high-level executive probably did not like seeing this, and so
+
+01:00:30.720 --> 01:00:35.740
+they moved this guy off, and now it's like Microsofty.
+
+01:00:35.740 --> 01:00:41.360
+So now all you see come out of there is like we've improved Windows Terminal, and the whole
+
+01:00:41.360 --> 01:00:47.000
+WSL thing moves at a snail's pace now, and you have to think that wasn't just like the
+
+01:00:47.000 --> 01:00:53.460
+guy got promoted, but that there was a strategic decision that this was helping people too
+
+01:00:53.460 --> 01:01:00.920
+much to live in a non-Windows environment in their mind, and we can't be supporting
+
+01:01:00.920 --> 01:01:01.920
+that.
+
+01:01:01.920 --> 01:01:13.440
+I was going to say, even though if you say, I want to use Kubernetes or in Azure, they
+
+01:01:13.440 --> 01:01:20.880
+say, okay, use Linux VMs, so they'll do that all day long and tell you not to use Windows,
+
+01:01:20.880 --> 01:01:26.800
+so there is still parts of the company that are like that and are open to it, but they
+
+01:01:26.800 --> 01:01:31.560
+have it pretty well locked down.
+
+01:01:31.560 --> 01:01:37.520
+I think it goes in line with the attention economy where they want to control the computing
+
+01:01:37.520 --> 01:01:43.520
+experience, and you want to use Microsoft apps, Microsoft Office.
+
+01:01:43.520 --> 01:01:49.240
+We don't want to make sure that you can reach out too easily into other ecosystems.
+
+01:01:49.240 --> 01:01:54.800
+Embrace, extend, extinguish, right?
+
+01:01:54.800 --> 01:01:55.800
+Is that the...
+
+01:01:55.800 --> 01:01:56.800
+Yep.
+
+01:01:56.800 --> 01:01:57.800
+That's it.
+
+01:01:57.800 --> 01:02:04.160
+An interesting Windows feature is you can update Windows, see that it's all the way
+
+01:02:04.160 --> 01:02:10.040
+up to date, reboot it, wait a day, or wait a day, and all of a sudden you have more updates
+
+01:02:10.040 --> 01:02:13.040
+for like a week or something along those lines.
+
+01:02:13.040 --> 01:02:17.600
+I don't know of any other operating system that does that.
+
+01:02:17.600 --> 01:02:24.900
+You only have two minutes until your reboot is done, and then it's like it comes back.
+
+01:02:24.900 --> 01:02:29.240
+Now it's an hour, and then another half an hour, right?
+
+01:02:29.240 --> 01:02:33.400
+They only give you a little snippet.
+
+01:02:33.400 --> 01:02:38.360
+Is PlasmaStrike, by the way, is that stack that you're describing with LogSec and syncing
+
+01:02:38.360 --> 01:02:39.360
+and everything?
+
+01:02:39.360 --> 01:02:41.400
+Is that something that you've published any examples?
+
+01:02:41.400 --> 01:02:46.080
+I saw you said something in the IRC, but I just lost track of what was going on in IRC,
+
+01:02:46.080 --> 01:02:49.080
+so I'm sorry if I missed that.
+
+01:02:49.080 --> 01:02:51.020
+No, I haven't.
+
+01:02:51.020 --> 01:02:58.880
+This is although now I'm thinking about just putting a whole bunch of some resources together
+
+01:02:58.880 --> 01:03:06.220
+of HyperBowl does a really good job of showing you a knowledge base, plus enough configuration
+
+01:03:06.220 --> 01:03:14.760
+to use an EEV does a really good job of showing you enough in-source documentation to play
+
+01:03:14.760 --> 01:03:19.840
+it out and see how it actually works in practice.
+
+01:03:19.840 --> 01:03:23.800
+Our Chrome needs something like that, so I don't know if I'll...
+
+01:03:23.800 --> 01:03:30.080
+But you need some minimal config to work with that, so you can look at the more philosophy
+
+01:03:30.080 --> 01:03:38.000
+plus packages combination.
+
+01:03:38.000 --> 01:03:44.560
+How do you guys like the HyperBorg term, if we use that?
+
+01:03:44.560 --> 01:03:48.200
+Does that strike you as a little...
+
+01:03:48.200 --> 01:03:50.080
+Was that what you were going for?
+
+01:03:50.080 --> 01:03:52.480
+Were you trying to conjure up the Borg?
+
+01:03:52.480 --> 01:03:53.480
+Well, yeah.
+
+01:03:53.480 --> 01:03:59.960
+Well, Sasha came up with HyperOrg for hyperbole and org, and then I thought, well, it'd be
+
+01:03:59.960 --> 01:04:09.160
+funnier if we called it HyperBorg, because it kind of is like Stalvan talks about org
+
+01:04:09.160 --> 01:04:16.580
+wants to take you into this environment, and hyperbole certainly does too, so if we put
+
+01:04:16.580 --> 01:04:21.240
+the two together, we would definitely have something like the Borg.
+
+01:04:21.240 --> 01:04:26.800
+My impression, and I said something to Kielaro, I don't know if I spoke wrong, but my impression
+
+01:04:26.800 --> 01:04:31.920
+was that this was not something that was going to be created, this was just a way, just like
+
+01:04:31.920 --> 01:04:32.920
+a...
+
+01:04:32.920 --> 01:04:33.920
+Oh, right.
+
+01:04:33.920 --> 01:04:34.920
+It's just a...
+
+01:04:34.920 --> 01:04:39.200
+Yeah, the music kind of term, but I do want to do more work.
+
+01:04:39.200 --> 01:04:45.080
+I've joined the org mail list, and I mean, just I did a lot of work for that presentation
+
+01:04:45.080 --> 01:04:53.840
+and that sort of struck me, and I said, there's a certain level of work we need to do.
+
+01:04:53.840 --> 01:05:00.760
+Years ago, we were thinking we'd put hyperbole into Emacs, now that org is...
+
+01:05:00.760 --> 01:05:07.600
+There's no reason not to, and were it to be there, there are things that there's namings
+
+01:05:07.600 --> 01:05:14.360
+that we would correct, and the interface points to org, we would want to do something about
+
+01:05:14.360 --> 01:05:17.920
+and work out with them, especially the made a return key.
+
+01:05:17.920 --> 01:05:23.080
+That's the main, if we could resolve that between the two packages better, and we've
+
+01:05:23.080 --> 01:05:28.180
+done a pretty good job just on hyperboles in, but we've never talked to the org people
+
+01:05:28.180 --> 01:05:29.180
+about it.
+
+01:05:29.180 --> 01:05:33.160
+It kind of seems like the term would work better the opposite way, because org wants
+
+01:05:33.160 --> 01:05:39.400
+to go around and doesn't have that modularity that your package has.
+
+01:05:39.400 --> 01:05:45.080
+So you're suggesting like, let them give the key over to us, and then we'll support some
+
+01:05:45.080 --> 01:05:46.080
+of their...
+
+01:05:46.080 --> 01:05:50.880
+Well, it's more reading the board taking over everything, because org mode comes and they
+
+01:05:50.880 --> 01:05:51.880
+take over...
+
+01:05:51.880 --> 01:06:02.040
+All their code works with org mode, not K outline or markdown mode or anything along
+
+01:06:02.040 --> 01:06:03.040
+those lines.
+
+01:06:03.040 --> 01:06:08.240
+Yeah, more, so the board part comes more from the hyperbole side, yeah.
+
+01:06:08.240 --> 01:06:12.520
+Well, but maybe it's fitting in the long run, because no matter...
+
+01:06:12.520 --> 01:06:18.600
+Perhaps if you provide a, or if hyperbole provides a very convenient enhancement on
+
+01:06:18.600 --> 01:06:23.320
+top of how people used to use org mode, it'll just become part of org mode eventually.
+
+01:06:23.320 --> 01:06:31.400
+Yeah, that's something I can see too, is that they just become one big thing that Stallman
+
+01:06:31.400 --> 01:06:36.880
+doesn't like, because we do have a bit of that in all of them.
+
+01:06:36.880 --> 01:06:42.280
+I mean, I totally get what he's saying and I buy it, I'm kind of like a functional programmer
+
+01:06:42.280 --> 01:06:49.800
+and I like bottom up development, but people ask us all the time, okay, if you have four
+
+01:06:49.800 --> 01:06:55.360
+or five things in hyperbole, why don't you separate them into separate packages?
+
+01:06:55.360 --> 01:06:57.200
+And it was the same thing for Engelbart.
+
+01:06:57.200 --> 01:07:02.840
+Well, one, it would be a lot more overhead just in separate manuals and dealing with
+
+01:07:02.840 --> 01:07:04.480
+separate communities.
+
+01:07:04.480 --> 01:07:09.840
+We want everyone who uses it to have the same baseline experience.
+
+01:07:09.840 --> 01:07:15.560
+And so even though, yes, you could separate out the button functionality from the K-outliner
+
+01:07:15.560 --> 01:07:23.880
+and the Rolodex, and the Rolodex originally was a separate thing by itself, we find putting
+
+01:07:23.880 --> 01:07:29.200
+them all together gives people the same thing that Emacs provides, it's sort of, you don't
+
+01:07:29.200 --> 01:07:34.680
+have to use all of the libraries, but having them there ensures you that when somebody
+
+01:07:34.680 --> 01:07:42.640
+references it, it works and you have a lot fewer of those kinds of, well, I only have
+
+01:07:42.640 --> 01:07:47.720
+the subsystem, so when I invoke your code, it breaks.
+
+01:07:47.720 --> 01:07:52.400
+Yeah, I think, and I think, I mean, I don't think there's any, I don't personally have
+
+01:07:52.400 --> 01:07:56.480
+like a preference as to what the right direction is, I just acknowledge that the downsides
+
+01:07:56.480 --> 01:08:00.880
+and upsides of each choice, but one thing I have noticed is I think something, I think
+
+01:08:00.880 --> 01:08:07.280
+it was McGit, that's how I say it, but, you know, initially it was one thing and now I
+
+01:08:07.280 --> 01:08:13.880
+think it's turned into a dozen or maybe even a couple dozen different packages.
+
+01:08:13.880 --> 01:08:19.320
+And I remember I went to update it once and they had to, you know, navigate a few different,
+
+01:08:19.320 --> 01:08:25.640
+like, what's the word, combinatorial, you know, they had to go two or three levels of
+
+01:08:25.640 --> 01:08:30.560
+dependencies deep in each level or introduce two dishes, yeah.
+
+01:08:30.560 --> 01:08:37.360
+So yeah, that can happen, there's situations where you can see those downsides, where the
+
+01:08:37.360 --> 01:08:42.000
+more, you know, splitting things apart is...
+
+01:08:42.000 --> 01:08:48.280
+We're fighting with that at work right now, it's like, do we create more repos so we can
+
+01:08:48.280 --> 01:08:54.880
+deliver microservices or, you know, how do we split things out on the containers and
+
+01:08:54.880 --> 01:09:00.500
+it's very, very complicated and even, you know, with years, we've got years of experience
+
+01:09:00.500 --> 01:09:08.640
+with our architects and we're all like going back and forth on how far to go because one
+
+01:09:08.640 --> 01:09:13.360
+of the people is very worried that we get into that dependency hell kind of thing with
+
+01:09:13.360 --> 01:09:16.120
+some of our new get packages.
+
+01:09:16.120 --> 01:09:23.920
+So yeah, I wish there were easier solutions and that's, again, for hyperbole, there's,
+
+01:09:23.920 --> 01:09:28.600
+you know, there's none of it, there's no external dependencies, it's just what version of Emacs
+
+01:09:28.600 --> 01:09:36.140
+you're using and people don't realize that, yeah, they say, oh, it's so big, like, it's
+
+01:09:36.140 --> 01:09:43.600
+dependent on all this other stuff, but it's not, it's just, you know, I mean, it will
+
+01:09:43.600 --> 01:09:48.640
+leverage stuff, again, that's in core Emacs, but it won't require you to load a third party
+
+01:09:48.640 --> 01:09:52.360
+package just because, you know, it's useful or interesting.
+
+01:09:52.360 --> 01:10:00.960
+I think Emacs does a really good job on this because unlike the normal GUI apps, if I want
+
+01:10:00.960 --> 01:10:07.520
+to change my theme in Emacs, I get to change everything to a dark theme or white theme
+
+01:10:07.520 --> 01:10:17.120
+or whatever and unlike, and you can't really do that very in any way that shares any of
+
+01:10:17.120 --> 01:10:24.200
+the code or the settings with all your GUI applications, but also with a terminal, you
+
+01:10:24.200 --> 01:10:34.960
+miss out on a whole bunch more stuff because, well, you don't get GUIs or unless you're
+
+01:10:34.960 --> 01:10:46.400
+talking about TUI apps, but they're not really CLI apps because they're like a half stepchild,
+
+01:10:46.400 --> 01:10:50.120
+they don't get near as good themes because they can't integrate into all the packages
+
+01:10:50.120 --> 01:10:59.000
+near as well, you know, mouse and all the various other things like that.
+
+01:10:59.000 --> 01:11:02.160
+Where are you guys located?
+
+01:11:02.160 --> 01:11:04.200
+I'm in, I'm in Virginia.
+
+01:11:04.200 --> 01:11:07.880
+Oh, I just had guests from West Virginia.
+
+01:11:07.880 --> 01:11:09.880
+I'm in Connecticut.
+
+01:11:09.880 --> 01:11:10.880
+Utah.
+
+01:11:10.880 --> 01:11:11.880
+Oh, wow.
+
+01:11:11.880 --> 01:11:12.880
+Utah.
+
+01:11:12.880 --> 01:11:17.160
+So we're almost spanning the entire continent, almost.
+
+01:11:17.160 --> 01:11:23.200
+If we round up, we can consider it to be the case.
+
+01:11:23.200 --> 01:11:29.400
+I work with a lot of people in India, so we've got like a 12 hour difference much of the
+
+01:11:29.400 --> 01:11:30.400
+year.
+
+01:11:30.400 --> 01:11:37.200
+That's fascinating to try to work through all the time, but on Hyperbole, we have one
+
+01:11:37.200 --> 01:11:44.240
+guy in Sweden and one guy in Japan, so we're all over the map too.
+
+01:11:44.240 --> 01:11:51.680
+Yeah, I was involved with a little hobby group for something unrelated and we were in various
+
+01:11:51.680 --> 01:11:56.400
+countries and it was always, the best thing that we could do was just find the time at
+
+01:11:56.400 --> 01:12:03.440
+which all of us would be the least miserable and the least tired and not, you know, there
+
+01:12:03.440 --> 01:12:07.720
+was no good time for a meeting, there was just the least bad time.
+
+01:12:07.720 --> 01:12:15.840
+Well, I was struggling to finish up my presentation and just, you know, I would like want to show
+
+01:12:15.840 --> 01:12:21.840
+an example and then I'm like, well, I need to change the code a little bit so I go and,
+
+01:12:21.840 --> 01:12:26.840
+you know, I'd add capability and Hyperbole and it was just a lot more work than I expected.
+
+01:12:26.840 --> 01:12:31.900
+So November 4th was the deadline to send in your video.
+
+01:12:31.900 --> 01:12:36.520
+That came and went and then I couldn't touch anything until the weekend and I get maybe
+
+01:12:36.520 --> 01:12:38.680
+half a day with the holidays and stuff.
+
+01:12:38.680 --> 01:12:43.720
+So comes to be last night, still haven't sent the video in.
+
+01:12:43.720 --> 01:12:49.240
+You know, I had told them though a week ago that I'll do it live if I can't get the video
+
+01:12:49.240 --> 01:12:53.360
+in, but I'm like, you know, it'd be nice to have it recorded and they do all this stuff
+
+01:12:53.360 --> 01:12:54.360
+to it.
+
+01:12:54.360 --> 01:13:04.600
+So I finished the video at 5.30 in the morning and I just, you know, no, I was dead so I
+
+01:13:04.600 --> 01:13:11.440
+just uploaded it and I figured, you know, I had tested snippets before of how I recorded.
+
+01:13:11.440 --> 01:13:17.560
+So I sent the two of them, I go to bed, I get up and I have a message waiting.
+
+01:13:17.560 --> 01:13:23.280
+The video cuts off at 18 minutes and it was 36 minutes long and I'm like, oh, come on,
+
+01:13:23.280 --> 01:13:28.560
+it must be the software, like just can't handle a file that size and it's stupid.
+
+01:13:28.560 --> 01:13:32.080
+But I play it back on my system and it plays perfectly fine.
+
+01:13:32.080 --> 01:13:36.560
+And they gave me the checksum of the file, the size of the file, those matched up.
+
+01:13:36.560 --> 01:13:38.360
+So we knew we had uploaded a good thing.
+
+01:13:38.360 --> 01:13:42.320
+So I just went back to them and said, no, it works here.
+
+01:13:42.320 --> 01:13:47.280
+And then they went and researched and found, you know, it was their software and they were
+
+01:13:47.280 --> 01:13:48.480
+able to make it work.
+
+01:13:48.480 --> 01:13:50.580
+So I was good.
+
+01:13:50.580 --> 01:13:53.760
+But you know, that's like right at the edge.
+
+01:13:53.760 --> 01:13:56.480
+It's like 5.30 this morning.
+
+01:13:56.480 --> 01:13:57.480
+Yeah.
+
+01:13:57.480 --> 01:14:00.440
+And you haven't, and then you got some sleep after that?
+
+01:14:00.440 --> 01:14:01.440
+Yeah.
+
+01:14:01.440 --> 01:14:07.080
+I got up at like 9.30 so I'm running on a little, not too much sleep, but no, I was
+
+01:14:07.080 --> 01:14:14.100
+very happy because I got to, I actually, like Rahman who did his and he sort of had his
+
+01:14:14.100 --> 01:14:23.200
+face behind an Emacs window, transparency through the Emacs window.
+
+01:14:23.200 --> 01:14:27.960
+He spent like at least 20 hours, like just on the video part or something.
+
+01:14:27.960 --> 01:14:30.680
+I literally did one recording.
+
+01:14:30.680 --> 01:14:35.120
+I mean, I had done samples a little bit, but I sat down, I said, I'm just going to try
+
+01:14:35.120 --> 01:14:37.800
+to run through the whole thing, no breaks.
+
+01:14:37.800 --> 01:14:44.680
+I did both my face, you know, they were separating their face video from their audio for some
+
+01:14:44.680 --> 01:14:45.680
+reason.
+
+01:14:45.680 --> 01:14:50.800
+And they did all these separate tracks, one recording and threw it over the wall.
+
+01:14:50.800 --> 01:14:53.800
+So it was pretty good.
+
+01:14:53.800 --> 01:14:58.800
+I think it's easier to do with a longer video because I was in much the same situation.
+
+01:14:58.800 --> 01:15:06.800
+And if any organizers are reviewing this recording, you know, I was a day ahead of you, Bob.
+
+01:15:06.800 --> 01:15:12.960
+I submitted it a day before you and I went to sleep, I think roughly 24 hours before
+
+01:15:12.960 --> 01:15:15.000
+you did.
+
+01:15:15.000 --> 01:15:21.120
+But you know, it's, so I was scrambling to do a lot of those things too, but you know,
+
+01:15:21.120 --> 01:15:22.120
+because of my own fault.
+
+01:15:22.120 --> 01:15:28.120
+And again, if any organizers are listening, I sincerely apologize and thank you and admire
+
+01:15:28.120 --> 01:15:32.920
+your saintly level of tolerance and patience there.
+
+01:15:32.920 --> 01:15:41.840
+And I hope that they spend a lot of time and energy just hitting things with baseball bats
+
+01:15:41.840 --> 01:15:47.880
+after this conference, because I think that they've probably suppressed a lot of negative
+
+01:15:47.880 --> 01:15:52.520
+energy from having to process things like that.
+
+01:15:52.520 --> 01:15:55.520
+They're incredible.
+
+01:15:55.520 --> 01:16:03.960
+I said thank you like an hour into the conference because it was so, I was looking at all the
+
+01:16:03.960 --> 01:16:09.240
+detail they had and you know, you see the way it's grown from year to year that you
+
+01:16:09.240 --> 01:16:13.840
+could just tell there was a tremendous amount of effort put in to have all these different
+
+01:16:13.840 --> 01:16:15.880
+formats and dealing with it.
+
+01:16:15.880 --> 01:16:21.480
+People have disabilities and you know, I mean, they're just very thoughtful all around and
+
+01:16:21.480 --> 01:16:23.480
+a great set of people.
+
+01:16:23.480 --> 01:16:26.760
+So I think every year they get better at it.
+
+01:16:26.760 --> 01:16:27.760
+Yeah.
+
+01:16:27.760 --> 01:16:33.400
+Yeah, they're clearly, I like they took a DevOps kind of approach to it, which you can
+
+01:16:33.400 --> 01:16:40.580
+also see, I guess they have some people, they're using Ansible to maintain some of their environments.
+
+01:16:40.580 --> 01:16:44.920
+So it's like, wow, that's a pretty advanced way to do it.
+
+01:16:44.920 --> 01:16:50.760
+And it shows they struggled in parts, you know, it's like, like this, they had trouble,
+
+01:16:50.760 --> 01:16:57.320
+you know, I was asking multiple times, it's like, is the video going to be playable?
+
+01:16:57.320 --> 01:16:59.360
+And there'd like be no answer.
+
+01:16:59.360 --> 01:17:03.440
+And then it's like, okay, don't worry, we're taking care of it.
+
+01:17:03.440 --> 01:17:08.080
+But they couldn't say because they hadn't converted it the way they wanted to yet.
+
+01:17:08.080 --> 01:17:12.720
+And then they finally got there and they like 20 minutes before the presentation is when
+
+01:17:12.720 --> 01:17:21.760
+I guess I got on with you, right, plasma strike, and we did prep before prep.
+
+01:17:21.760 --> 01:17:24.880
+So it was a good experience.
+
+01:17:24.880 --> 01:17:30.920
+But I have to know, yeah, I thought I would have it done, no problem, November 4.
+
+01:17:30.920 --> 01:17:37.480
+So I think that and I did get very busy at work, but you know, that tells you something
+
+01:17:37.480 --> 01:17:40.840
+just about and I'm not, I don't do videos much.
+
+01:17:40.840 --> 01:17:43.040
+So that was part of the problem.
+
+01:17:43.040 --> 01:17:45.600
+Yeah, it's Yeah.
+
+01:17:45.600 --> 01:17:50.360
+I mean, I'd say the most concrete lesson that I learned, maybe not even a lesson so much
+
+01:17:50.360 --> 01:17:57.940
+as a as a punishment is that if I dare to submit anything next year, I'll, I'll make
+
+01:17:57.940 --> 01:18:01.040
+sure that I'm done recording it before I even propose it.
+
+01:18:01.040 --> 01:18:07.880
+Because I wouldn't want to have them wonder, is he gonna wait until the very end?
+
+01:18:07.880 --> 01:18:11.660
+Like, I'm gonna, I'm sure I am.
+
+01:18:11.660 --> 01:18:15.600
+So I will, I will have it done in the summer of 2023.
+
+01:18:15.600 --> 01:18:19.080
+And I will include it, I will upload it before I even submit it to them.
+
+01:18:19.080 --> 01:18:21.480
+Did you not get that message?
+
+01:18:21.480 --> 01:18:23.000
+Sasha was so nice about it.
+
+01:18:23.000 --> 01:18:29.200
+She's like, you know, it's really not a problem if you don't have time, you know, we can just
+
+01:18:29.200 --> 01:18:30.200
+cancel.
+
+01:18:30.200 --> 01:18:36.320
+And I'm like, I've never canceled on a talk before, so I'm gonna get it done, even if
+
+01:18:36.320 --> 01:18:38.320
+I have to do it live.
+
+01:18:38.320 --> 01:18:43.680
+Yeah, you know, I got I got similar ones got go ahead.
+
+01:18:43.680 --> 01:18:44.680
+How would that work?
+
+01:18:44.680 --> 01:18:48.040
+If you didn't know exactly how much time that you'd have for the talk?
+
+01:18:48.040 --> 01:18:50.160
+If you're going to do it all in advance?
+
+01:18:50.160 --> 01:18:57.640
+Oh, oh, for you, because it Yeah, well, you can take a shot.
+
+01:18:57.640 --> 01:18:58.640
+Don't give me a slot.
+
+01:18:58.640 --> 01:19:01.360
+You say I have a 20 minute video ready to go.
+
+01:19:01.360 --> 01:19:02.360
+Yeah, yeah.
+
+01:19:02.360 --> 01:19:07.560
+Or, I mean, and plus, I think it's also it would be it doesn't necessarily indicate that
+
+01:19:07.560 --> 01:19:12.200
+it's the final product, but it could be the final product, you could say, Okay, here's,
+
+01:19:12.200 --> 01:19:14.720
+here's 10 minutes or 15 minutes.
+
+01:19:14.720 --> 01:19:16.680
+And I will try to iterate on this.
+
+01:19:16.680 --> 01:19:21.840
+But if I if I default on this loan, so to speak, it's it serves as collateral, maybe
+
+01:19:21.840 --> 01:19:24.280
+it's not, not necessarily the final product.
+
+01:19:24.280 --> 01:19:28.320
+But if it needs to be the final product, they could use it that way.
+
+01:19:28.320 --> 01:19:33.440
+I think the thing that they're most worried about was just having to having to process
+
+01:19:33.440 --> 01:19:39.880
+things at the last minute and having to run it live, if necessary.
+
+01:19:39.880 --> 01:19:49.000
+So I don't think they they, you know, care that much about changing, you know, changing
+
+01:19:49.000 --> 01:19:50.000
+the length or so.
+
+01:19:50.000 --> 01:19:51.000
+Well, maybe they would, I don't know.
+
+01:19:51.000 --> 01:19:53.000
+But I guess that that would mess up the schedule.
+
+01:19:53.000 --> 01:19:56.520
+Well, the the subtitles were really popular, I understand.
+
+01:19:56.520 --> 01:20:05.240
+So that's, that's a big thing that would have been nice to have, which I imagine you're
+
+01:20:05.240 --> 01:20:06.240
+gonna process.
+
+01:20:06.240 --> 01:20:13.640
+Yeah, yeah, I, I, hopefully, I can, I can help them with with subtitling some of the
+
+01:20:13.640 --> 01:20:16.160
+things that didn't have them yet.
+
+01:20:16.160 --> 01:20:20.960
+Because, yeah, there's still a lot of work that I think needs to be done even after after
+
+01:20:20.960 --> 01:20:21.960
+the fact.
+
+01:20:21.960 --> 01:20:26.800
+And, you know, with transcribing these sessions, even not all of them, but at least some of
+
+01:20:26.800 --> 01:20:28.800
+the questions and answers and things.
+
+01:20:28.800 --> 01:20:35.760
+PlasmaStrike, did you that I hear that I understand you say that you you were a volunteer for
+
+01:20:35.760 --> 01:20:37.320
+managing the this year?
+
+01:20:37.320 --> 01:20:42.320
+No, I just I was just asking the question.
+
+01:20:42.320 --> 01:20:43.320
+I got you.
+
+01:20:43.320 --> 01:20:44.320
+No, I thought I heard you.
+
+01:20:44.320 --> 01:20:45.320
+I might have misheard something you said earlier.
+
+01:20:45.320 --> 01:20:46.320
+Are you Corbin?
+
+01:20:46.320 --> 01:20:47.320
+Me?
+
+01:20:47.320 --> 01:20:48.320
+Yeah.
+
+01:20:48.320 --> 01:20:49.320
+No.
+
+01:20:49.320 --> 01:20:50.320
+No.
+
+01:20:50.320 --> 01:20:51.320
+No.
+
+01:20:51.320 --> 01:20:52.320
+No.
+
+01:20:52.320 --> 01:20:53.320
+Okay.
+
+01:20:53.320 --> 01:20:56.560
+I thought you sounded like Corbin.
+
+01:20:56.560 --> 01:20:57.680
+You know him?
+
+01:20:57.680 --> 01:20:58.680
+Maybe a little bit.
+
+01:20:58.680 --> 01:20:59.680
+I can hear it a little bit.
+
+01:20:59.680 --> 01:21:00.680
+Okay.
+
+01:21:00.680 --> 01:21:06.360
+But you use, PlasmaStrike, you were saying that you you do use a lot of theming and things
+
+01:21:06.360 --> 01:21:12.160
+like that in terms of like your like various applications, like color themes and things.
+
+01:21:12.160 --> 01:21:21.960
+I've used various, I've Solarize, Doom themes, I think there's a Tron theme that I use, but
+
+01:21:21.960 --> 01:21:26.800
+now I'm just using the Modus themes, just simple black and white that's done really
+
+01:21:26.800 --> 01:21:27.800
+well.
+
+01:21:27.800 --> 01:21:28.800
+Yeah.
+
+01:21:28.800 --> 01:21:29.800
+Yeah.
+
+01:21:29.800 --> 01:21:30.800
+Simplicity.
+
+01:21:30.800 --> 01:21:32.680
+That was actually going to be one of the things that I wanted to mention in my talk.
+
+01:21:32.680 --> 01:21:36.400
+But again, those 10 minutes were turned out to be brutal.
+
+01:21:36.400 --> 01:21:41.560
+I wanted to mention how how people like like us and when I say us, I just mean I don't
+
+01:21:41.560 --> 01:21:47.680
+mean necessarily you two, just people that I was speaking for, are maybe a little bit
+
+01:21:47.680 --> 01:21:48.680
+scared of themes.
+
+01:21:48.680 --> 01:21:52.400
+You know, like I was going to mention that we like I try to stay the heck away from fonts
+
+01:21:52.400 --> 01:21:58.600
+and colors and things because I just, it's, I don't know if I have the bandwidth to keep
+
+01:21:58.600 --> 01:21:59.600
+them.
+
+01:21:59.600 --> 01:22:02.840
+I kind of just declare advanced bankruptcy on those and say, you know what, whatever
+
+01:22:02.840 --> 01:22:06.320
+it looks like, I'm going to live with it.
+
+01:22:06.320 --> 01:22:13.040
+I just look at like 20 themes, pick one that suits my taste and then live with that.
+
+01:22:13.040 --> 01:22:21.600
+So I found one called Cream Soddy, like cream soda, but S-O-D-Y and that's what I use as
+
+01:22:21.600 --> 01:22:26.960
+a dark theme and I find it, you know, very appealing in general.
+
+01:22:26.960 --> 01:22:34.000
+So, but yeah, I was noticing like the org people have so much, tweaking the visuals,
+
+01:22:34.000 --> 01:22:36.200
+you know, it was kind of amazing.
+
+01:22:36.200 --> 01:22:42.080
+Some people's presentations, I'm like, I'm really not into that.
+
+01:22:42.080 --> 01:22:47.600
+But I do have a feature in hyperbole, which is kind of cool.
+
+01:22:47.600 --> 01:22:52.960
+So there's this subsystem called high control, which lets you control your windows and your
+
+01:22:52.960 --> 01:22:53.960
+frames interactively.
+
+01:22:53.960 --> 01:23:00.800
+So it's, it's kind of like you go into a mode and it stays live until you quit.
+
+01:23:00.800 --> 01:23:04.920
+And so you can use regular insertion keys to manipulate things.
+
+01:23:04.920 --> 01:23:12.800
+One of the things it has in conjunction with a package called Zoom Frame is you can change
+
+01:23:12.800 --> 01:23:20.560
+your default face across like all your frames with one key, grow it, shrink it.
+
+01:23:20.560 --> 01:23:25.960
+And I found that, and not just the default face, but all the related faces so that everything
+
+01:23:25.960 --> 01:23:28.840
+stays a consistent size.
+
+01:23:28.840 --> 01:23:34.560
+Every time I would try any of the built-in things, I would always end up changing a face
+
+01:23:34.560 --> 01:23:38.840
+or multiple and something else would stay tiny.
+
+01:23:38.840 --> 01:23:40.360
+And it just annoyed the hell out of me.
+
+01:23:40.360 --> 01:23:43.120
+So I implemented that.
+
+01:23:43.120 --> 01:23:44.880
+This was in high control or Zoom?
+
+01:23:44.880 --> 01:23:54.080
+Yeah, it's in high control, the Z keys, you use I guess capital Z for make it bigger and
+
+01:23:54.080 --> 01:23:56.320
+lowercase Z to make it smaller.
+
+01:23:56.320 --> 01:23:58.680
+So you're zooming both ways.
+
+01:23:58.680 --> 01:24:04.600
+And the neat thing is that what high control has is a persistent prefix argument.
+
+01:24:04.600 --> 01:24:10.920
+So say like you want to move a window, say you want to move a frame two pixels at a time.
+
+01:24:10.920 --> 01:24:14.920
+So you set the prefix argument to two, and then every time you hit your arrow key or
+
+01:24:14.920 --> 01:24:17.960
+whatever moves it, it moves by two pixels.
+
+01:24:17.960 --> 01:24:21.440
+You can change that to 20 and it'll move by 20 pixels.
+
+01:24:21.440 --> 01:24:26.840
+And the 20 will apply to every successive operation until you change it.
+
+01:24:26.840 --> 01:24:29.560
+And to change it, you just hit a decimal point.
+
+01:24:29.560 --> 01:24:34.280
+So you can say period one, zero, and then you get a 10.
+
+01:24:34.280 --> 01:24:38.920
+Or just set it to zero and then it's off.
+
+01:24:38.920 --> 01:24:40.240
+And so it's very rapid.
+
+01:24:40.240 --> 01:24:47.680
+So you're doing these single keys NPF dot one, zero.
+
+01:24:47.680 --> 01:24:51.960
+And so you can string these together in your key series too.
+
+01:24:51.960 --> 01:24:54.440
+And you get this incredible operation.
+
+01:24:54.440 --> 01:25:02.480
+It can place frames at any of the corners or the top center of the screen too.
+
+01:25:02.480 --> 01:25:10.680
+And on a Mac, it will account for the toolbar and only grow so it doesn't overlap that.
+
+01:25:10.680 --> 01:25:15.240
+All these kind of fit and finish things are just pre-programmed in there.
+
+01:25:15.240 --> 01:25:20.360
+So when you're actually doing it, I mean, don't you hate that?
+
+01:25:20.360 --> 01:25:26.520
+It's like you expand your window programmatically and then half of it's off screen, right?
+
+01:25:26.520 --> 01:25:27.520
+For no reason at all.
+
+01:25:27.520 --> 01:25:29.560
+And then you got to go manipulate it.
+
+01:25:29.560 --> 01:25:36.400
+So I don't know, there was one time when I decided to do this and I just thought of those
+
+01:25:36.400 --> 01:25:41.200
+pain points and I took care of them all in there.
+
+01:25:41.200 --> 01:25:45.360
+So that's kind of a useful thing.
+
+01:25:45.360 --> 01:25:54.640
+And one guy, his fingers, if you saw the presentation, he was losing carpal tunnel like problems
+
+01:25:54.640 --> 01:25:56.120
+but very severely.
+
+01:25:56.120 --> 01:26:03.520
+So he went to voice control and he was using Emacs and he discovered high control.
+
+01:26:03.520 --> 01:26:09.720
+And he said that was like a life changer because he always wanted to manipulate his windows,
+
+01:26:09.720 --> 01:26:10.720
+his frames.
+
+01:26:10.720 --> 01:26:14.800
+And now he didn't have a good way because he couldn't hit all these keystrokes.
+
+01:26:14.800 --> 01:26:25.880
+And now he can just say those key sequences and it does it all for him very rapidly.
+
+01:26:25.880 --> 01:26:33.360
+Another guy, years ago I was working with, there's this brilliant guy named, oh God,
+
+01:26:33.360 --> 01:26:35.320
+this is, what is his name?
+
+01:26:35.320 --> 01:26:40.160
+Works for Google now and it's an Indian name.
+
+01:26:40.160 --> 01:26:44.340
+I forget his name, but he's been blind since birth.
+
+01:26:44.340 --> 01:26:50.000
+And he got a PhD in computer science and he's worked before Google.
+
+01:26:50.000 --> 01:26:54.560
+He worked at like Sun and just all the major companies.
+
+01:26:54.560 --> 01:27:02.680
+And I guess a lot of his work is on making technology accessible to the blind or disabled.
+
+01:27:02.680 --> 01:27:13.080
+So he wrote a package called EmacsSpeed, yeah, Raman, Raman is his name, TV Raman.
+
+01:27:13.080 --> 01:27:22.920
+And so EmacsSpeak is another whole environment that lets a blind person utilize Emacs as
+
+01:27:22.920 --> 01:27:25.200
+an advanced screen reader.
+
+01:27:25.200 --> 01:27:31.000
+Instead of reading you the whole screen, it knows what your context is and it just reads
+
+01:27:31.000 --> 01:27:32.180
+you appropriate stuff.
+
+01:27:32.180 --> 01:27:35.360
+So like he can understand code very rapidly.
+
+01:27:35.360 --> 01:27:39.640
+Additionally, he can change the speed of the voice so he can listen to something at five
+
+01:27:39.640 --> 01:27:41.440
+times speed and absorb it.
+
+01:27:41.440 --> 01:27:44.700
+So he can actually get a picture of code and manipulate it.
+
+01:27:44.700 --> 01:27:54.740
+So he and I got together years ago and he integrated it with Hyperbole and he was using
+
+01:27:54.740 --> 01:27:59.320
+Hyperbole to give a macro kind of capability in a lot of stuff.
+
+01:27:59.320 --> 01:28:01.120
+So I thought that was very cool.
+
+01:28:01.120 --> 01:28:06.880
+And he was just a very cool guy out in Silicon Valley.
+
+01:28:06.880 --> 01:28:10.840
+So glad to see he's done so well all this time.
+
+01:28:10.840 --> 01:28:17.400
+He's got an example config in his package.
+
+01:28:17.400 --> 01:28:21.920
+I don't know if it has your package configured inside of it or...
+
+01:28:21.920 --> 01:28:22.920
+I don't know.
+
+01:28:22.920 --> 01:28:23.920
+I haven't.
+
+01:28:23.920 --> 01:28:27.600
+He's got some for using CSS.
+
+01:28:27.600 --> 01:28:34.120
+I think that he was talking, something I read is it would change how the tones and voices
+
+01:28:34.120 --> 01:28:37.320
+that the voice was using.
+
+01:28:37.320 --> 01:28:38.320
+Right.
+
+01:28:38.320 --> 01:28:45.080
+The funny thing is that he's so devoted to his seeing eye dogs, right?
+
+01:28:45.080 --> 01:28:48.060
+He's had to have a number of them through his life.
+
+01:28:48.060 --> 01:28:54.200
+So he writes these fake press releases every time he releases a version and they're all
+
+01:28:54.200 --> 01:28:59.240
+named after the dog and the dog is making the announcement.
+
+01:28:59.240 --> 01:29:07.860
+It's like so and so is proud to announce Emacs, the friendliest dog release in history.
+
+01:29:07.860 --> 01:29:10.520
+So they're kind of fun to read.
+
+01:29:10.520 --> 01:29:16.920
+I've seen his messages on the mailing lists, rather I've seen his subject lines on the
+
+01:29:16.920 --> 01:29:21.400
+mailing list because I usually don't have, I don't give myself the time to read a lot
+
+01:29:21.400 --> 01:29:22.400
+of those messages.
+
+01:29:22.400 --> 01:29:27.840
+But now that I have that context, I'll dig into his messages and see because it sounds
+
+01:29:27.840 --> 01:29:28.840
+very interesting.
+
+01:29:28.840 --> 01:29:29.840
+Yeah.
+
+01:29:29.840 --> 01:29:30.840
+I mean, it would be.
+
+01:29:30.840 --> 01:29:39.880
+And if you're like my son has no problem seeing, but he has a bit of trouble processing words
+
+01:29:39.880 --> 01:29:41.880
+when he's reading.
+
+01:29:41.880 --> 01:29:46.840
+So he uses audible while he reads and it's too slow for him.
+
+01:29:46.840 --> 01:29:53.720
+So he uses audible at like twice the speed and finds that that really helps him understand
+
+01:29:53.720 --> 01:29:54.720
+passages.
+
+01:29:54.720 --> 01:30:01.040
+So it may have utility for people without visual disabilities too.
+
+01:30:01.040 --> 01:30:02.520
+Good point.
+
+01:30:02.520 --> 01:30:03.520
+Yeah.
+
+01:30:03.520 --> 01:30:09.800
+That's probably so much there that doesn't really get thought about because just think
+
+01:30:09.800 --> 01:30:11.440
+this is what, how we have to do it.
+
+01:30:11.440 --> 01:30:15.880
+It's in front of you, consume it, consume it the same way everybody else consumes it.
+
+01:30:15.880 --> 01:30:18.600
+And if you have trouble, then it's on you.
+
+01:30:18.600 --> 01:30:24.680
+Well, here's an interesting usability to bit, Robin, a different Robin, the Robin who
+
+01:30:24.680 --> 01:30:32.040
+works on hyperbole was showing me his presentation and he had the text of the presentation there.
+
+01:30:32.040 --> 01:30:37.460
+And every time he would say something, the word that he was saying would be highlighted
+
+01:30:37.460 --> 01:30:38.460
+on the screen.
+
+01:30:38.460 --> 01:30:41.520
+And I'm like, wow, that's very impressive.
+
+01:30:41.520 --> 01:30:45.440
+And it followed his speaking perfectly.
+
+01:30:45.440 --> 01:30:48.520
+I'm like, how did you do that?
+
+01:30:48.520 --> 01:30:55.920
+And he said, Oh, I'm just highlighting each word manually.
+
+01:30:55.920 --> 01:30:56.920
+Wow.
+
+01:30:56.920 --> 01:31:01.760
+Now that it's, it's like being a drummer, you know, he had such perfect cadence that
+
+01:31:01.760 --> 01:31:07.200
+I couldn't tell that this wasn't automated, that he did it so beautifully while he was
+
+01:31:07.200 --> 01:31:14.520
+speaking or, or watching him self speak, played back.
+
+01:31:14.520 --> 01:31:20.040
+It would have been nice if it was an automated thing, but apparently it takes the human to
+
+01:31:20.040 --> 01:31:21.040
+do it.
+
+01:31:21.040 --> 01:31:25.460
+I had to rig something up when I was recording my video, cause I, I wrote, I did it, I scripted
+
+01:31:25.460 --> 01:31:26.460
+it all.
+
+01:31:26.460 --> 01:31:31.240
+Um, and I, I just couldn't, I wasn't, I didn't have the mental bandwidth to try to memorize
+
+01:31:31.240 --> 01:31:32.440
+it at that point.
+
+01:31:32.440 --> 01:31:37.840
+So I just split everything up into, into half paragraphs basically, and tried to get it
+
+01:31:37.840 --> 01:31:43.720
+up as close to my camera as I could, um, scroll my mouse wheel.
+
+01:31:43.720 --> 01:31:48.040
+Every time I came to the end of a paragraph, I had to scroll the script with one hand and
+
+01:31:48.040 --> 01:31:52.200
+my other hand was controlling the slot, the so-called slide show, which was just paging
+
+01:31:52.200 --> 01:31:54.400
+through my org, my org outline.
+
+01:31:54.400 --> 01:32:01.240
+Um, and I think about five to 10 times I had to stop recording it because I, I scrolled,
+
+01:32:01.240 --> 01:32:05.320
+I got off sync with, with either my script or my outline or both.
+
+01:32:05.320 --> 01:32:10.200
+And just, you know, with 10 minutes, like, Oh, I can't go back and I lost, I lost like
+
+01:32:10.200 --> 01:32:11.440
+5% of my time.
+
+01:32:11.440 --> 01:32:13.360
+I have to start over.
+
+01:32:13.360 --> 01:32:16.680
+So I can't imagine doing it on a word by word basis.
+
+01:32:16.680 --> 01:32:22.640
+It's strange we're still recording this, but we're getting into just the, you know, interesting
+
+01:32:22.640 --> 01:32:23.640
+story.
+
+01:32:23.640 --> 01:32:24.640
+Oh, it's the last thing.
+
+01:32:24.640 --> 01:32:29.880
+So, you know, this is just kind of like, I feel like this is the, the after party, right?
+
+01:32:29.880 --> 01:32:31.640
+Maybe they'll cut it off.
+
+01:32:31.640 --> 01:32:36.720
+So I work with a British guy, brilliant, uh, mathematician kind of guy.
+
+01:32:36.720 --> 01:32:44.520
+He's a financial guy and, uh, he, he has that, you know, often British kind of capability.
+
+01:32:44.520 --> 01:32:52.760
+He, he speaks beautifully, but he can speak off the cuff about anything he's working on,
+
+01:32:52.760 --> 01:32:56.500
+just like he has spent a week, uh, working on it.
+
+01:32:56.500 --> 01:33:02.040
+So he gets called on like, you know, the bigger bosses will say, we got to show this, do this
+
+01:33:02.040 --> 01:33:08.600
+demo for this client, literally like five minutes ahead of time, and he'll just go into
+
+01:33:08.600 --> 01:33:12.240
+it and there won't be an um, there won't be a pause.
+
+01:33:12.240 --> 01:33:14.840
+It'll just be this fluid sort of thing.
+
+01:33:14.840 --> 01:33:20.960
+And I'm like, man, if you could bottle that, uh, you know, because do it, what you're saying,
+
+01:33:20.960 --> 01:33:27.640
+doing, uh, you're on camera, doing a video thing, speaking, managing your thoughts, you
+
+01:33:27.640 --> 01:33:32.120
+know, keeping your context, it's, uh, super hard, I think.
+
+01:33:32.120 --> 01:33:37.120
+And, uh, when you see somebody who has that, like Steve Jobs, you know, he would practice
+
+01:33:37.120 --> 01:33:46.240
+I guess, but he had that ability that he could communicate anything, uh, beautifully.
+
+01:33:46.240 --> 01:33:47.820
+That's an art.
+
+01:33:47.820 --> 01:33:48.820
+Maybe not.
+
+01:33:48.820 --> 01:33:51.240
+Maybe it's just a personality trait.
+
+01:33:51.240 --> 01:33:56.360
+It's a, yeah, I don't, I don't think you can train, you can definitely improve, but I don't
+
+01:33:56.360 --> 01:34:02.360
+think you can train people if you're not born with that kind of silver tongue.
+
+01:34:02.360 --> 01:34:03.360
+Yeah.
+
+01:34:03.360 --> 01:34:04.360
+Right.
+
+01:34:04.360 --> 01:34:07.480
+And maybe it has to do with not being conscious of things.
+
+01:34:07.480 --> 01:34:13.520
+I think a lot of times it has, it's, you've never really thought about what, about what
+
+01:34:13.520 --> 01:34:19.000
+happens if you mess up or something just hasn't, you're blessed to not be able to worry about
+
+01:34:19.000 --> 01:34:20.000
+certain things.
+
+01:34:20.000 --> 01:34:21.000
+Yeah, that's true.
+
+01:34:21.000 --> 01:34:27.800
+That's why you see all the technical people that struggle, right, is, uh, but he's, you
+
+01:34:27.800 --> 01:34:29.800
+know, he has that too.
+
+01:34:29.800 --> 01:34:32.220
+He'll be very self-critical at times and stuff.
+
+01:34:32.220 --> 01:34:37.320
+But I think when, you know, like all of us, I mean, if I start out, I may be thinking
+
+01:34:37.320 --> 01:34:43.760
+about a bunch of things, but once I'm into it, you can see, you know, you sort of relax
+
+01:34:43.760 --> 01:34:50.040
+and you're just focused on that and all those other things kind of fade away, right?
+
+01:34:50.040 --> 01:34:51.320
+You can get into that zone.
+
+01:34:51.320 --> 01:34:52.600
+It's there for all of us.
+
+01:34:52.600 --> 01:34:59.640
+Well, as you become competent in things, the technology more and more disappears because
+
+01:34:59.640 --> 01:35:05.800
+I don't, as Emacs users, we don't think about what keyboards we, our touch typing is generally
+
+01:35:05.800 --> 01:35:11.200
+at another level because we split the windows without ever thinking about it.
+
+01:35:11.200 --> 01:35:12.200
+Muscle memory.
+
+01:35:12.200 --> 01:35:13.200
+Yeah.
+
+01:35:13.200 --> 01:35:14.600
+And that's what I'm saying.
+
+01:35:14.600 --> 01:35:19.680
+It's like, use that for like the value add and then, you know, literally have your muscles
+
+01:35:19.680 --> 01:35:26.280
+almost take care of the stuff that's silly, like, you know, opening a directory when it's
+
+01:35:26.280 --> 01:35:29.840
+part of a path, colon, separated, set of things.
+
+01:35:29.840 --> 01:35:31.080
+I don't want to think about that.
+
+01:35:31.080 --> 01:35:33.320
+I just want to point and go.
+
+01:35:33.320 --> 01:35:38.760
+And I don't want to know what the key binding is or any of that kind of stuff, so that we're
+
+01:35:38.760 --> 01:35:44.800
+definitely trying to like push it down to your unconscious and then see how far we can
+
+01:35:44.800 --> 01:35:49.120
+take that, you know, like what, how can you fly?
+
+01:35:49.120 --> 01:35:55.960
+Uh, I, you know, people sometimes have said there's some magic or that's why I mentioned
+
+01:35:55.960 --> 01:35:59.200
+that term today, but I think that's an important concept.
+
+01:35:59.200 --> 01:36:06.360
+You know, if it, if it seems like magic, then you've probably got it down to the right level
+
+01:36:06.360 --> 01:36:12.640
+that people don't have to think about it anymore and they're just, it's in their subconscious
+
+01:36:12.640 --> 01:36:18.120
+and they can move on to more interesting things, which is sort of why we build software in
+
+01:36:18.120 --> 01:36:19.120
+the first place.
+
+01:36:19.120 --> 01:36:20.120
+I think, right.
+
+01:36:20.120 --> 01:36:26.680
+It's to automate the mundane and let us keep adding value at another level.
+
+01:36:26.680 --> 01:36:27.680
+Yeah.
+
+01:36:27.680 --> 01:36:30.640
+Although it's very hard to remember that sometimes.
+
+01:36:30.640 --> 01:36:31.640
+Right.
+
+01:36:31.640 --> 01:36:36.560
+When you're, when you're saying, Oh, move this pixel over here.
+
+01:36:36.560 --> 01:36:37.560
+Right?
+
+01:36:37.560 --> 01:36:38.560
+Yeah.
+
+01:36:38.560 --> 01:36:43.840
+Like you were saying about front end development and how hard it can be sometimes that all
+
+01:36:43.840 --> 01:36:50.040
+the business people want to put their two cents in, it has to be, it has to be making
+
+01:36:50.040 --> 01:36:52.040
+somebody money at some point.
+
+01:36:52.040 --> 01:36:53.040
+Yeah.
+
+01:36:53.040 --> 01:36:59.160
+It's helpful, helpful when it does, but you know, not all you can build.
+
+01:36:59.160 --> 01:37:03.780
+You can spend a lot of money on things and they, I mean, look at, uh, look at what's
+
+01:37:03.780 --> 01:37:09.680
+happening to the tech companies now after billions of dollars invested and they're just
+
+01:37:09.680 --> 01:37:18.120
+throwing away thousands of people and all their knowledge bases and yeah, it's, it's
+
+01:37:18.120 --> 01:37:19.120
+competitive.
+
+01:37:19.120 --> 01:37:25.280
+I mean, you know, it's like, we don't need a thousand task management, commercial tools,
+
+01:37:25.280 --> 01:37:26.280
+right?
+
+01:37:26.280 --> 01:37:27.640
+Project management tools.
+
+01:37:27.640 --> 01:37:29.920
+So the market will shake out.
+
+01:37:29.920 --> 01:37:32.220
+There'll be three big ones maybe.
+
+01:37:32.220 --> 01:37:36.380
+And then everybody else is, if they exist, they're losing money.
+
+01:37:36.380 --> 01:37:40.980
+So what, you know, so are you going to be one of those three?
+
+01:37:40.980 --> 01:37:47.200
+That's that's the problem is that there's not enough room left for a lot of the things
+
+01:37:47.200 --> 01:37:49.200
+that people are trying to do.
+
+01:37:49.200 --> 01:37:51.680
+You talked about advancing things.
+
+01:37:51.680 --> 01:37:55.000
+It's like stuff like hyperbole or this mother of all demos.
+
+01:37:55.000 --> 01:38:01.800
+It's like sometimes we don't always have to move forward because all this mother of all
+
+01:38:01.800 --> 01:38:08.680
+demos is in a lot of ways, way ahead of anything we have now.
+
+01:38:08.680 --> 01:38:16.180
+And seems like it's ahead of hyperbole in a lot of ways and well, I've talked to a lot
+
+01:38:16.180 --> 01:38:20.520
+of non-technical people and they always say, you know, the problem I have is technology
+
+01:38:20.520 --> 01:38:21.520
+moves so fast.
+
+01:38:21.520 --> 01:38:22.520
+I can't keep up.
+
+01:38:22.520 --> 01:38:31.120
+And I say, well, actually in thinking about it over decades now that I've aged, uh, I
+
+01:38:31.120 --> 01:38:33.980
+see it as cycles much more, right?
+
+01:38:33.980 --> 01:38:40.000
+And like a sine wave that, uh, first of all, we, we do lose knowledge.
+
+01:38:40.000 --> 01:38:42.280
+We don't have a good way of capturing it.
+
+01:38:42.280 --> 01:38:47.180
+And I mean, I literally knew something about Engelbart's work and it was over a decade
+
+01:38:47.180 --> 01:38:53.140
+later that I rediscovered it and, and then got in touch and interacted with him.
+
+01:38:53.140 --> 01:38:58.480
+So, so we're definitely like forgetting about the past and get a new generation in.
+
+01:38:58.480 --> 01:39:00.380
+They don't know the lessons.
+
+01:39:00.380 --> 01:39:01.900
+They screwed things up.
+
+01:39:01.900 --> 01:39:06.720
+And eventually we rediscover that somebody already solved this and we can go and use
+
+01:39:06.720 --> 01:39:07.720
+it again.
+
+01:39:07.720 --> 01:39:11.800
+And then we start building on that and then the war happens and it gets destroyed.
+
+01:39:11.800 --> 01:39:15.080
+And then we got, so, so you actually get a lot of time, right?
+
+01:39:15.080 --> 01:39:16.680
+Like ethernet, right?
+
+01:39:16.680 --> 01:39:23.340
+To the masses from when it was invented to when it got deployed, uh, you know, hypertext.
+
+01:39:23.340 --> 01:39:30.880
+So let's say if Engelbart was showing it in 1968 and before that Ted Nelson was opining
+
+01:39:30.880 --> 01:39:37.640
+about it a ton, uh, so 1991 or two is when we got the web.
+
+01:39:37.640 --> 01:39:40.840
+So 25 years at least.
+
+01:39:40.840 --> 01:39:42.440
+And I think that's sort of cycles.
+
+01:39:42.440 --> 01:39:47.680
+I don't think there's a lot of technology cycles that are less than 10 years, uh, but
+
+01:39:47.680 --> 01:39:56.600
+you often see that the 10 to 15 to 20 year cycles from research to, you know, broad consumer
+
+01:39:56.600 --> 01:40:01.760
+adoption, uh, you've got about that amount of time to deal with it.
+
+01:40:01.760 --> 01:40:09.320
+So if you can have a research team that stays 10 years ahead of like what's out in the marketplace,
+
+01:40:09.320 --> 01:40:11.960
+you have lots of time to develop your product.
+
+01:40:11.960 --> 01:40:14.400
+It's not this, it's gotta be out yesterday.
+
+01:40:14.400 --> 01:40:17.480
+You only have two months or the market's going to close up.
+
+01:40:17.480 --> 01:40:23.580
+But it's very difficult to convince business people of that because there's so much chatter
+
+01:40:23.580 --> 01:40:29.420
+on the business side and people will show their, their mockups and their demos very
+
+01:40:29.420 --> 01:40:30.420
+broadly.
+
+01:40:30.420 --> 01:40:34.120
+And then they're like, they've got it, you know, it's like, what have they got?
+
+01:40:34.120 --> 01:40:36.000
+Well that I saw it, I saw it.
+
+01:40:36.000 --> 01:40:37.000
+Yeah.
+
+01:40:37.000 --> 01:40:41.120
+And what's behind that thing that you saw, you know, they just whipped it up right over
+
+01:40:41.120 --> 01:40:46.400
+a weekend and there's nothing, there's no database, there's no, uh, there's no user
+
+01:40:46.400 --> 01:40:47.400
+validation.
+
+01:40:47.400 --> 01:40:53.880
+So you kind of have to contend with that, which is probably why a lot of Emacs users
+
+01:40:53.880 --> 01:40:59.400
+are in academia and they don't want to deal with those issues.
+
+01:40:59.400 --> 01:41:00.400
+Yeah.
+
+01:41:00.400 --> 01:41:07.000
+It's kind of like also advanced by doing the, uh, doubling down on the stuff that works
+
+01:41:07.000 --> 01:41:12.160
+like for instance, uh, cars like, Oh look, the car's better.
+
+01:41:12.160 --> 01:41:14.440
+It's got a higher Bluetooth version.
+
+01:41:14.440 --> 01:41:15.540
+See it's better.
+
+01:41:15.540 --> 01:41:17.640
+But what about the gas mileage?
+
+01:41:17.640 --> 01:41:19.200
+How long does the motor last?
+
+01:41:19.200 --> 01:41:22.520
+But it's got a higher Bluetooth version.
+
+01:41:22.520 --> 01:41:28.580
+See it's, it's more technology and then, then the job is to create the need and the desire
+
+01:41:28.580 --> 01:41:30.600
+for that higher Bluetooth version.
+
+01:41:30.600 --> 01:41:31.600
+Right.
+
+01:41:31.600 --> 01:41:32.600
+Yeah.
+
+01:41:32.600 --> 01:41:38.480
+Well, haven't you bought like the same brand of car, even the same model, like a couple
+
+01:41:38.480 --> 01:41:41.760
+of years later and you're like, what did I just buy?
+
+01:41:41.760 --> 01:41:45.320
+I really loved the one from five years before.
+
+01:41:45.320 --> 01:41:51.440
+My, my first job out of school was in Motorola, which had a great engineering culture.
+
+01:41:51.440 --> 01:41:59.560
+But there came a time when, uh, they, they brought in automotive designers to shape,
+
+01:41:59.560 --> 01:42:02.720
+uh, the shape, the physical shape of the products.
+
+01:42:02.720 --> 01:42:08.600
+And we had some very sexy, beautiful looking things that those guys left the company and
+
+01:42:08.600 --> 01:42:13.560
+they hired a bunch of people pretty much out of college, you know, who had studied the
+
+01:42:13.560 --> 01:42:14.680
+field.
+
+01:42:14.680 --> 01:42:21.080
+And all of a sudden we had like these blocky kinds of things that like, nobody would want
+
+01:42:21.080 --> 01:42:26.440
+to hold in their hand and, uh, and I'm like, what, wait, what just happened?
+
+01:42:26.440 --> 01:42:29.080
+Didn't they document any of their work or anything?
+
+01:42:29.080 --> 01:42:35.220
+But that's, you know, we really do need the knowledge base inside people's head because
+
+01:42:35.220 --> 01:42:38.600
+we're nowhere near documenting it well enough.
+
+01:42:38.600 --> 01:42:44.320
+Uh, the design principles that people use, you know, you look at, you can see it in Apple
+
+01:42:44.320 --> 01:42:46.220
+a little bit too, right?
+
+01:42:46.220 --> 01:42:51.640
+Since Johnny Ive left, it's like, yeah, where's, where's the next design language?
+
+01:42:51.640 --> 01:42:58.320
+I just got an update to my iPhone and I noticed they changed some of the icons, but they just
+
+01:42:58.320 --> 01:43:06.600
+made like the time on my home screen, like three times as thick, the font width, you
+
+01:43:06.600 --> 01:43:12.400
+know, it's like ultra bold and I'm like, yeah, that it doesn't really look right.
+
+01:43:12.400 --> 01:43:18.440
+It just looks like it's in my face and I'm like, well, somebody, you know, got that through
+
+01:43:18.440 --> 01:43:24.760
+whatever they're running there now, but I've would have tossed that on the, you know, the
+
+01:43:24.760 --> 01:43:25.760
+bad idea pile.
+
+01:43:25.760 --> 01:43:26.760
+I think.
+
+01:43:26.760 --> 01:43:27.760
+Huh?
+
+01:43:27.760 --> 01:43:34.000
+It seems like a bit of an obnoxious change to make it for something that is so supposed
+
+01:43:34.000 --> 01:43:37.520
+to be, it's when you want it, you really want it and when you don't want it, it's supposed
+
+01:43:37.520 --> 01:43:38.520
+to be unobtrusive.
+
+01:43:38.520 --> 01:43:42.800
+I don't know that way.
+
+01:43:42.800 --> 01:43:43.800
+Yeah.
+
+01:43:43.800 --> 01:43:44.800
+Oh.
+
+01:43:44.800 --> 01:43:45.800
+Yeah.
+
+01:43:45.800 --> 01:43:54.480
+I wonder if that uses more power since it's, if it's white using all your, all your pixels
+
+01:43:54.480 --> 01:43:55.480
+there.
+
+01:43:55.480 --> 01:43:57.080
+Oh yeah.
+
+01:43:57.080 --> 01:43:59.280
+So I guess we have time in the end.
+
+01:43:59.280 --> 01:44:05.080
+I mean that like, you know, we all have these crazy deadlines, but in the end to actually
+
+01:44:05.080 --> 01:44:10.480
+move the needle forward, it's going to take a while and there's going to be certain steps
+
+01:44:10.480 --> 01:44:11.480
+backwards.
+
+01:44:11.480 --> 01:44:16.800
+And I think Emacs is sort of our shared community knowledge base, right?
+
+01:44:16.800 --> 01:44:21.140
+As long as we have these libraries, even if they get a little out of date, we can update
+
+01:44:21.140 --> 01:44:24.320
+them to the next generation when we're ready.
+
+01:44:24.320 --> 01:44:27.440
+And that's something that a lot of people don't have, right?
+
+01:44:27.440 --> 01:44:33.140
+They're just going from application to applications and they're losing all the core capabilities
+
+01:44:33.140 --> 01:44:36.760
+every time they transition.
+
+01:44:36.760 --> 01:44:41.080
+Well I think that's the, like when I was talking about the themes and the modularity and just
+
+01:44:41.080 --> 01:44:46.840
+using all that stuff is, if you can use all that stuff and especially if you can use a
+
+01:44:46.840 --> 01:44:53.380
+whole bunch of really old code, that's, that's the tricky question of how do you use as many
+
+01:44:53.380 --> 01:45:00.600
+things as you, as possible at once without everything clobbering each other?
+
+01:45:00.600 --> 01:45:13.060
+Well, I learned this lesson, don't, don't add a date created entry to your code files
+
+01:45:13.060 --> 01:45:21.440
+if you don't also include a last modified date, because we had 1991 entries in hyperbole
+
+01:45:21.440 --> 01:45:26.640
+files and people would download it and they look and they're like, this thing is ancient.
+
+01:45:26.640 --> 01:45:33.360
+I'm not going to use this because we had pulled out the modified because you need certain
+
+01:45:33.360 --> 01:45:37.400
+code to update the modified automatically when you save it.
+
+01:45:37.400 --> 01:45:41.240
+And you know, not every developer would necessarily have that.
+
+01:45:41.240 --> 01:45:46.680
+So, but when that started happening, I said, we'll put this back because they didn't want
+
+01:45:46.680 --> 01:45:54.560
+to get rid of the create date and lose that, that you sort of know how far back it goes.
+
+01:45:54.560 --> 01:46:02.520
+Yeah, yeah, I've, I've always gotten a little, I always find it interesting when I see working
+
+01:46:02.520 --> 01:46:06.400
+with something and I, and I realized that it hasn't been touched for, or it appears
+
+01:46:06.400 --> 01:46:12.040
+not to have been touched for a couple of decades and I think, oh my gosh, either I, if I found
+
+01:46:12.040 --> 01:46:15.080
+a problem, I'm thinking, oh, I, this can't be right.
+
+01:46:15.080 --> 01:46:18.080
+I must be missing something here because there's no way that this problem could have existed
+
+01:46:18.080 --> 01:46:22.680
+for 20 years and no one ever noticed it or cared about it.
+
+01:46:22.680 --> 01:46:24.120
+And sometimes I'm wrong.
+
+01:46:24.120 --> 01:46:25.120
+Sometimes I'm right.
+
+01:46:25.120 --> 01:46:26.120
+It's not a problem.
+
+01:46:26.120 --> 01:46:32.200
+Well, you have this quote for Emacs, it's like Emacs is you want editors, like you want
+
+01:46:32.200 --> 01:46:33.200
+wine.
+
+01:46:33.200 --> 01:46:34.200
+I think it's wine.
+
+01:46:34.200 --> 01:46:41.040
+It's like, the older it is, the better it gets because you get that composite of all
+
+01:46:41.040 --> 01:46:50.080
+these philosophies, workflows, workflows and forming packages and if you're going to be
+
+01:46:50.080 --> 01:46:57.600
+on the cutting edge, 95% of the ideas will probably not be good, 5% of the ideas will
+
+01:46:57.600 --> 01:47:05.280
+be good, but versus looking at the older stuff where a lot more of the ideas will be good
+
+01:47:05.280 --> 01:47:08.460
+and you'll get all like matured packages.
+
+01:47:08.460 --> 01:47:13.160
+Like you were talking about how you have all the window control with the Mac stuff.
+
+01:47:13.160 --> 01:47:19.000
+You just get the stuff, uh, Streamlint.
+
+01:47:19.000 --> 01:47:25.760
+And maybe like, you know, if we look at Richard Stallman's Emacs environment and maybe yours,
+
+01:47:25.760 --> 01:47:30.200
+John, you'd like to keep it simple, like you said, not beaming it because you've gotten,
+
+01:47:30.200 --> 01:47:32.920
+you know, to a steady state that works well for you.
+
+01:47:32.920 --> 01:47:40.440
+I visited Xerox park years ago and when I went around looking at all of the workstations,
+
+01:47:40.440 --> 01:47:48.300
+they were all using like 10 year old window managers, just like the oldest look and feel.
+
+01:47:48.300 --> 01:47:50.940
+Nobody was touching anything, right?
+
+01:47:50.940 --> 01:47:59.280
+Because they were creating the future, they thought, and they really didn't care about
+
+01:47:59.280 --> 01:48:02.760
+keeping up to date on, on their packages.
+
+01:48:02.760 --> 01:48:04.840
+They had to write their own stuff.
+
+01:48:04.840 --> 01:48:10.840
+So I thought that was kind of fascinating to learn that a lot of, you know, high level
+
+01:48:10.840 --> 01:48:18.120
+thinkers don't necessarily treat their tooling environments the same way.
+
+01:48:18.120 --> 01:48:21.240
+At least not, not every day.
+
+01:48:21.240 --> 01:48:30.520
+They probably say finish whatever they're doing or, you know, reach five years or something.
+
+01:48:30.520 --> 01:48:35.120
+That's what I'm sticking with this one Subaru car and I've had a bunch of other things,
+
+01:48:35.120 --> 01:48:39.840
+but this one has an engine that they don't make anymore, a V6.
+
+01:48:39.840 --> 01:48:45.920
+Now they're sort of like turboizing things to get the equivalent power and it doesn't
+
+01:48:45.920 --> 01:48:47.120
+perform the same way.
+
+01:48:47.120 --> 01:48:52.880
+So I'm like, well, I got to wait until the bottom of this car rusts out before I replace
+
+01:48:52.880 --> 01:48:56.600
+it because I like so much about it.
+
+01:48:56.600 --> 01:49:04.440
+Even though I'm missing some of the new technology, I just don't want to change it out.
+
+01:49:04.440 --> 01:49:12.040
+One of the things I like a lot about how Emacs looks as it looks to me, really nice in a
+
+01:49:12.040 --> 01:49:20.120
+real bullshit, ultra functional way where it's like, I like that it doesn't do the smooth
+
+01:49:20.120 --> 01:49:25.880
+scrolling that it scrolls line by line by line, even though that's not as modern and
+
+01:49:25.880 --> 01:49:34.960
+hip because it's more down or down to earth functional, I don't know, like a more engineering
+
+01:49:34.960 --> 01:49:40.160
+or something that's just not as flashy normal way.
+
+01:49:40.160 --> 01:49:44.920
+Yeah, no, I agree.
+
+01:49:44.920 --> 01:49:52.240
+And it affects, it really affects how it feels like you're somewhere in your brain, you're
+
+01:49:52.240 --> 01:49:55.480
+some kind of object that your brain thinks that you're dealing with, even if it's not
+
+01:49:55.480 --> 01:49:59.840
+really an object, you know, part of your brain just has to really to the world that way.
+
+01:49:59.840 --> 01:50:04.200
+And I think that's just one of those things is that if you can, your brain can actually
+
+01:50:04.200 --> 01:50:09.640
+feel like you're, you can almost feel each line like passing past, you're going past
+
+01:50:09.640 --> 01:50:12.640
+your scrolling action.
+
+01:50:12.640 --> 01:50:18.840
+Your brain is like, you keep helps keep you oriented, like you can, it's like, it's your
+
+01:50:18.840 --> 01:50:24.200
+visual experience creates a tactile experience for you.
+
+01:50:24.200 --> 01:50:31.200
+I think that's one of the the VR problems that the industry is suffering from is that
+
+01:50:31.200 --> 01:50:40.160
+it's so easy to program things that will entirely screw up somebody's, what do you call this
+
+01:50:40.160 --> 01:50:45.760
+subconscious parts of our, our nerve nervous systems.
+
+01:50:45.760 --> 01:50:50.800
+So right, I mean, they can scare the hell out of people, they can make them sense something
+
+01:50:50.800 --> 01:50:52.720
+that's not there.
+
+01:50:52.720 --> 01:50:58.680
+And it's like, you know, it's just, we're not ready for that in so many ways, and it's
+
+01:50:58.680 --> 01:51:00.280
+just too easy.
+
+01:51:00.280 --> 01:51:09.060
+And so if you can't depend that like physics will keep you from like flying off the earth,
+
+01:51:09.060 --> 01:51:12.400
+you know, anything can happen.
+
+01:51:12.400 --> 01:51:18.120
+I don't know how many people will want to really, you know, experience that for any
+
+01:51:18.120 --> 01:51:20.400
+continual amount of time.
+
+01:51:20.400 --> 01:51:24.280
+The other thing you don't get is like, you don't have to worry about how much time it
+
+01:51:24.280 --> 01:51:25.280
+does a scroll.
+
+01:51:25.280 --> 01:51:27.760
+So it's going to be a lot more performant, faster.
+
+01:51:27.760 --> 01:51:32.720
+I love turn, as a counter example, I love turning off the animations on my phone because
+
+01:51:32.720 --> 01:51:38.640
+it makes it snappier, faster, and I don't want to just insert animations on my phone
+
+01:51:38.640 --> 01:51:43.920
+just to slow it down and you open up your contacts, it's like, I want to make, I turn
+
+01:51:43.920 --> 01:51:51.240
+the DPI on my Android phone down, down, so that I can see more contacts at once.
+
+01:51:51.240 --> 01:51:59.600
+So I don't have to scroll as many times and I want, I make the home screen have more icons
+
+01:51:59.600 --> 01:52:01.680
+on it because I'm accurate with my thumbs.
+
+01:52:01.680 --> 01:52:09.520
+So I want to see as many icons as I can so I don't, so I can much faster see and click
+
+01:52:09.520 --> 01:52:12.960
+the right one I want to, I scroll less pages.
+
+01:52:12.960 --> 01:52:19.920
+Yeah, and you probably have a hard time making it do what you want, I'm guessing too, because
+
+01:52:19.920 --> 01:52:29.780
+it's just the one area where, for phones especially, it's just one area where you are not respected.
+
+01:52:29.780 --> 01:52:34.920
+You're going to take whatever experience they figured was the right one that week and force
+
+01:52:34.920 --> 01:52:39.160
+you to eat it, like a head of cattle.
+
+01:52:39.160 --> 01:52:44.480
+You're eating that experience like it's feed and it'll change whenever you want, whenever
+
+01:52:44.480 --> 01:52:49.880
+they want, and it's going to, I don't know if you feel the same way.
+
+01:52:49.880 --> 01:52:55.040
+My first phone was a Windows mobile phone that the person was selling because they wanted
+
+01:52:55.040 --> 01:53:05.240
+an Android phone and I've always been on custom ROMs, although lately I've been getting annoyed
+
+01:53:05.240 --> 01:53:11.760
+about it because they've been losing all the, let's see, I remember reading this blog post
+
+01:53:11.760 --> 01:53:16.320
+about somebody liking custom ROMs and they were saying that Android was becoming more
+
+01:53:16.320 --> 01:53:22.280
+restrictive because they would be putting an image through the USB port so you could
+
+01:53:22.280 --> 01:53:29.320
+have a Linux ISO connected to your computer through your phone and they wanted SE Linux
+
+01:53:29.320 --> 01:53:34.600
+but they'd have to compile the kernel in a different way and have the patch and all that
+
+01:53:34.600 --> 01:53:42.680
+type of stuff is just becoming more and more of a nightmare and you're not able to do that.
+
+01:53:42.680 --> 01:53:46.560
+Right now I'm messing with a Linux phone.
+
+01:53:46.560 --> 01:53:59.440
+Do you guys agree with Stallman and GNU thinking for FFF philosophy in general or sort of like
+
+01:53:59.440 --> 01:54:03.600
+you're more middle of the road about it?
+
+01:54:03.600 --> 01:54:11.880
+I mean I personally, I think there's a need for that philosophy.
+
+01:54:11.880 --> 01:54:22.440
+I don't, at least now, I don't personally 100% dedicate my beliefs and actions to it.
+
+01:54:22.440 --> 01:54:32.720
+I'm not certain about anything to be honest but I'm not ready to say that everything outside
+
+01:54:32.720 --> 01:54:41.280
+of it has no place for me or has no place at all but I think about the commonalities.
+
+01:54:41.280 --> 01:54:47.600
+I think that there's good that will come, there's a truth to it and there's a good that
+
+01:54:47.600 --> 01:54:56.360
+it will do and there's certainly no reason to not offer.
+
+01:54:56.360 --> 01:54:59.720
+You don't have to agree that it's the only way to agree that there's something good about
+
+01:54:59.720 --> 01:55:00.720
+it.
+
+01:55:00.720 --> 01:55:04.760
+That's my point of view.
+
+01:55:04.760 --> 01:55:11.760
+I think that you have the philosophy, like the Emacs is a great example of an ecosystem
+
+01:55:11.760 --> 01:55:17.080
+informed by that philosophy and it's an artifact of that philosophy because you look at an
+
+01:55:17.080 --> 01:55:22.840
+Emacs package, chances are if you look at any of the Zettelkasten systems, they're not
+
+01:55:22.840 --> 01:55:29.520
+going to be trying to, it's not going to be, let's see, you have org.roam.
+
+01:55:29.520 --> 01:55:36.240
+It's not Roam because Roam requires you to pay for a Sass subscription and it's only
+
+01:55:36.240 --> 01:55:40.520
+accessible online and it's like any Emacs package you use, generally you're going to
+
+01:55:40.520 --> 01:55:46.120
+have all the data on your local machine and it's...
+
+01:55:46.120 --> 01:55:50.560
+Is that, I think there was something called Roam, is that Roam research, is that what
+
+01:55:50.560 --> 01:55:51.560
+you're talking about?
+
+01:55:51.560 --> 01:55:52.560
+Yes.
+
+01:55:52.560 --> 01:55:53.560
+That's right.
+
+01:55:53.560 --> 01:55:55.560
+I thought Roam was just a verb.
+
+01:55:55.560 --> 01:55:56.560
+Sorry.
+
+01:55:56.560 --> 01:56:03.480
+They built the interface to be like that, yeah.
+
+01:56:03.480 --> 01:56:05.000
+It's interesting, right?
+
+01:56:05.000 --> 01:56:10.080
+Because yeah, you hear all these terms and you don't always know.
+
+01:56:10.080 --> 01:56:18.400
+Like a lot of people are like, hyperbole has adopted this org thing because they don't
+
+01:56:18.400 --> 01:56:27.920
+know it existed before org because the org obviously has a much broader reach right now.
+
+01:56:27.920 --> 01:56:35.400
+So yeah, understanding that history and that Emacs is tied into the FSF philosophy, there's
+
+01:56:35.400 --> 01:56:42.280
+probably a fraction of the Emacs users that even are very aware of that.
+
+01:56:42.280 --> 01:56:51.840
+But I think, yeah, Stallman, he's seen a lot and he's somebody who does think a lot from
+
+01:56:51.840 --> 01:56:55.720
+first principles and is very logical.
+
+01:56:55.720 --> 01:57:02.000
+He doesn't necessarily want to deal with parts of the world that exist.
+
+01:57:02.000 --> 01:57:09.440
+But if he makes a statement, it's usually fairly true.
+
+01:57:09.440 --> 01:57:17.520
+So the fact that he's concluded this and been very definitive about it for decades tells
+
+01:57:17.520 --> 01:57:22.200
+you that there's some truth in there that you should look into.
+
+01:57:22.200 --> 01:57:23.200
+Yeah.
+
+01:57:23.200 --> 01:57:30.120
+I think if I think of like today's earlier session where some of the questions were exposed
+
+01:57:30.120 --> 01:57:35.920
+some tension there and I think one of the reasons why we see that tension is because
+
+01:57:35.920 --> 01:57:43.040
+of the success and the kind of the more broad appeal of that org mode has brought Emacs
+
+01:57:43.040 --> 01:57:46.040
+and it's a healthy sign.
+
+01:57:46.040 --> 01:57:52.120
+It's a sign that there's people coming into the community who may not be familiar with
+
+01:57:52.120 --> 01:57:57.000
+the origins, the philosophical origins of the tools that they're using.
+
+01:57:57.000 --> 01:58:01.640
+I also think that you have a lot of the people who are interested in Emacs are probably interested
+
+01:58:01.640 --> 01:58:04.640
+in the Free Software Foundation.
+
+01:58:04.640 --> 01:58:09.080
+So it's something like the philosophy.
+
+01:58:09.080 --> 01:58:15.800
+I mean, maybe, but right, they could just be interested in what, which is what Stallman
+
+01:58:15.800 --> 01:58:17.240
+talks about too a lot.
+
+01:58:17.240 --> 01:58:22.080
+It's like you may just want the functionality that some software has and you may not care
+
+01:58:22.080 --> 01:58:26.240
+about free licensing, but you should.
+
+01:58:26.240 --> 01:58:32.080
+And here's why, you know, so yeah, but you start using all the, you start using all the
+
+01:58:32.080 --> 01:58:37.520
+packages and then the philosophy, then it kicks you into the philosophy from the reverse
+
+01:58:37.520 --> 01:58:39.800
+direction.
+
+01:58:39.800 --> 01:58:45.160
+And so I think as if you, if you start resonating with that philosophy, Emacs is the place to
+
+01:58:45.160 --> 01:58:46.160
+be.
+
+01:58:46.160 --> 01:58:55.760
+So we'll all be slanted towards wanting the GPL license or at least the BSD license because
+
+01:58:55.760 --> 01:59:05.920
+it's the place that it's the place in philosophy that exploits all those advantages practically.
+
+01:59:05.920 --> 01:59:12.600
+It's interesting because maybe, I don't know how many years ago, 10, 15 years ago, there
+
+01:59:12.600 --> 01:59:18.040
+was that big debate about open source and versus free software.
+
+01:59:18.040 --> 01:59:24.840
+And you know, it was just raging and it doesn't even seem like it's a topic anymore.
+
+01:59:24.840 --> 01:59:29.680
+It's like the GPL has done very well.
+
+01:59:29.680 --> 01:59:38.680
+Other licenses have too, but the model of software being free and open is established
+
+01:59:38.680 --> 01:59:45.780
+at all levels in the economy and in the technical world.
+
+01:59:45.780 --> 01:59:54.920
+So you know, Stallman is sort of playing the long game and what did they say, like the
+
+01:59:54.920 --> 02:00:03.120
+justice system bends towards right, but it's over a really long period of time or something.
+
+02:00:03.120 --> 02:00:04.760
+Eventually it gets to the right answer.
+
+02:00:04.760 --> 02:00:08.480
+I think it's sort of like that, you know, it's that we're going to have all these ups
+
+02:00:08.480 --> 02:00:15.760
+and downs, but eventually you'll have dictators and such, but eventually freedom will win.
+
+02:00:15.760 --> 02:00:22.440
+People win out over, you know, being crushed under the boot like the Russians are today.
+
+02:00:22.440 --> 02:00:28.120
+You know, what comes out of their society after they get crushed by the Ukrainians,
+
+02:00:28.120 --> 02:00:36.920
+I think will be hopefully for them, you know, because they had such great intellectual capacity,
+
+02:00:36.920 --> 02:00:41.260
+but they've had this broken culture for over a hundred years.
+
+02:00:41.260 --> 02:00:46.460
+And so if you don't, going back to Engelbart again, if you just evolve your technology
+
+02:00:46.460 --> 02:00:52.920
+without your process, your culture, you're left with something that may not work well
+
+02:00:52.920 --> 02:00:54.600
+at all for you.
+
+02:00:54.600 --> 02:00:57.640
+You have to take stock every now and then you need that time.
+
+02:00:57.640 --> 02:01:00.960
+And that's another point that I wanted to make in my talk, but I just couldn't find
+
+02:01:00.960 --> 02:01:10.600
+room for it is that if you know that you're going to make that time in the future, then
+
+02:01:10.600 --> 02:01:14.480
+you can focus on the present.
+
+02:01:14.480 --> 02:01:19.040
+But if you never make that time, and I don't mean, you know, it could apply to anything,
+
+02:01:19.040 --> 02:01:27.880
+but whether it's societal or technical, but don't stop and really think about what you
+
+02:01:27.880 --> 02:01:36.160
+are, you know, am I doing what I represent or are my actions representing myself and
+
+02:01:36.160 --> 02:01:40.440
+my needs and my goals?
+
+02:01:40.440 --> 02:01:47.240
+Every person, every organization of people, every society should really think about that.
+
+02:01:47.240 --> 02:01:54.500
+And it seems like it just, there's certain ways that society can grow where it becomes,
+
+02:01:54.500 --> 02:01:58.560
+you can't think about that because when you start to think about that is when you become
+
+02:01:58.560 --> 02:02:07.080
+vulnerable or you, I don't know, I'm not a philosopher, I'm not an international scholar.
+
+02:02:07.080 --> 02:02:14.800
+Does ZMAX rank up there on your hierarchy of needs, it's like number two or take that
+
+02:02:14.800 --> 02:02:19.960
+away from me and my survival will be jeopardized.
+
+02:02:19.960 --> 02:02:25.840
+And as much as my digital self is, absolutely, it's probably very close to, I mean, it really
+
+02:02:25.840 --> 02:02:33.320
+did, I think, save me from destruction in terms of organization personally.
+
+02:02:33.320 --> 02:02:38.680
+I think it was, what was it, it must have been 2008 or so, I was just so disorganized
+
+02:02:38.680 --> 02:02:46.000
+and I was, you know, missing bills and things like that, just because I had a pile of papers
+
+02:02:46.000 --> 02:02:50.760
+and I said, you know what, I need to be able to take notes, and I was taking notes, but
+
+02:02:50.760 --> 02:02:56.080
+I had just a bunch of flat text files and I said, I need to be able to collapse my text
+
+02:02:56.080 --> 02:03:03.000
+and I want to be able to take outline notes and I ended up, sorry, go ahead, I just ended
+
+02:03:03.000 --> 02:03:08.880
+up finding, I think it was work mode at the time, I think it was still a separate package
+
+02:03:08.880 --> 02:03:15.880
+and I was like, okay, finally, just this ability to collapse my notes into hierarchical structure
+
+02:03:15.880 --> 02:03:19.680
+so that I could have one thing, that I could think about multiple, one file, think about
+
+02:03:19.680 --> 02:03:24.560
+multiple things and collapse them when I didn't need to think about them anymore, and I was
+
+02:03:24.560 --> 02:03:30.640
+just like, okay, finally, this is the thing that's going to help me stay organized and
+
+02:03:30.640 --> 02:03:38.800
+from there on out, it worked, so in terms of whatever I am today, you know, I couldn't
+
+02:03:38.800 --> 02:03:45.920
+undo that anymore, like that's committed to my identity at this point, so yeah, yeah.
+
+02:03:45.920 --> 02:03:49.800
+That's a great explanation of it, you know.
+
+02:03:49.800 --> 02:03:56.080
+Have you looked at the ARG narrowing at all, or Emacs narrowing stuff?
+
+02:03:56.080 --> 02:04:03.720
+Yeah, I do that a lot, it helps me, it helped me focus on writing some of my notes for the
+
+02:04:03.720 --> 02:04:04.720
+talk.
+
+02:04:04.720 --> 02:04:12.560
+Yeah, that's very important because you can end up capturing so much, it makes it so easy
+
+02:04:12.560 --> 02:04:18.360
+to capture and then you one day said, okay, I captured too much, I need to, you know,
+
+02:04:18.360 --> 02:04:24.000
+that outline, having all those stars and whatever in your outline can be very distracting and
+
+02:04:24.000 --> 02:04:30.200
+I use very old stuff, so I still have, you know, just regular, a series of asterisks
+
+02:04:30.200 --> 02:04:39.120
+aligned to my left side, so I have a lot of visual noise in there, but yeah, yeah, I mean,
+
+02:04:39.120 --> 02:04:46.960
+do you have any special ways that you use it, like in terms of the narrowing or anything?
+
+02:04:46.960 --> 02:04:56.240
+I like using the VertiCo package because it allows you to set up different commands to
+
+02:04:56.240 --> 02:05:01.800
+either like be in a buffer or mini buffer or various things like that, so I can choose
+
+02:05:01.800 --> 02:05:07.920
+how to do that or change that over time.
+
+02:05:07.920 --> 02:05:14.720
+For me with Emacs, I think that is the most useful about it is I generally like trying
+
+02:05:14.720 --> 02:05:22.560
+out new things and Emacs is a program that got onto my computer, never left because anytime
+
+02:05:22.560 --> 02:05:28.220
+I want to try something new, I can just try out the packages or parts of the configs or
+
+02:05:28.220 --> 02:05:34.220
+variables and I get to try that stuff out, some stuff has stayed, a lot of stuff doesn't
+
+02:05:34.220 --> 02:05:40.800
+necessarily stay, draw up my files and...
+
+02:05:40.800 --> 02:05:47.240
+The first time when I'm bringing up a new system is I always like get some micro Emacs
+
+02:05:47.240 --> 02:05:53.960
+version just so I can edit my config files and then I get the OS stable enough and then
+
+02:05:53.960 --> 02:06:02.400
+I install a new Emacs and it's like I never used VI, I never learned VI, I was lucky,
+
+02:06:02.400 --> 02:06:10.640
+I guess, you know, they taught us first year of college we used Emacs, so all these people
+
+02:06:10.640 --> 02:06:16.640
+I bet they've gone through 7 to 10 editors and I'm like, well, I've gone through versions
+
+02:06:16.640 --> 02:06:19.800
+of Emacs and that's it.
+
+02:06:19.800 --> 02:06:26.080
+So it's been a little different and it is, it's crept into my subconscious, you know,
+
+02:06:26.080 --> 02:06:34.480
+so much so that the talk about getting Emacs, using Emacs to fill in your web form fields
+
+02:06:34.480 --> 02:06:42.080
+was very interesting to me because years ago I did that, when Sun was popular there was
+
+02:06:42.080 --> 02:06:49.600
+also Apollo which had a better networking and a better OS and so we were using some
+
+02:06:49.600 --> 02:06:58.560
+of their workstations and they had every shell and every window had an editing capability,
+
+02:06:58.560 --> 02:07:05.400
+was essentially an editor field but it was their own editor so I modified it so it was
+
+02:07:05.400 --> 02:07:12.040
+Emacs and you know everywhere on Apollo and it was a really beautiful environment and
+
+02:07:12.040 --> 02:07:20.240
+like then HP bought them and killed the OS in favor of HP UX so that went away and I
+
+02:07:20.240 --> 02:07:25.160
+couldn't use it anymore but we had built a really cool environment on there but that
+
+02:07:25.160 --> 02:07:31.360
+again, I wouldn't hand over the workstations, I was setting them up for a research team
+
+02:07:31.360 --> 02:07:36.120
+and I wouldn't hand them over until I had built this environment so that they all had
+
+02:07:36.120 --> 02:07:40.800
+the consistent editing experience and they wouldn't go off and just do something random
+
+02:07:40.800 --> 02:07:43.800
+with it.
+
+02:07:43.800 --> 02:07:48.760
+It's funny how you describe that bootstrap process because the way that I think about
+
+02:07:48.760 --> 02:07:54.920
+it is that a lot of times you end up, what's the path they talk about is that you need
+
+02:07:54.920 --> 02:08:02.240
+to learn enough bash to install Python or something like that and that's the joke is
+
+02:08:02.240 --> 02:08:10.280
+that that's the only amount of bash that you need to know but if you go to the Emacs path,
+
+02:08:10.280 --> 02:08:12.160
+you might not even need Python.
+
+02:08:12.160 --> 02:08:15.840
+You mentioned having it installed to edit configs and things like that and edit what
+
+02:08:15.840 --> 02:08:20.880
+you need to do to get another version of Emacs installed but I could see, I would love, maybe
+
+02:08:20.880 --> 02:08:27.840
+that'll be my inspiration for next year's talk is to find a way to, yeah, everything,
+
+02:08:27.840 --> 02:08:31.520
+just use Emacs as a substitute for Python and Ansible.
+
+02:08:31.520 --> 02:08:37.760
+I could probably use some of the packages that were out there like, what was it, Anthony
+
+02:08:37.760 --> 02:08:44.320
+or Tropin, Andrew Tropin, he had the RD, the reproducible Emacs, I could look at that and
+
+02:08:44.320 --> 02:08:45.320
+use that.
+
+02:08:45.320 --> 02:08:51.880
+It tells me about living through, we're always manipulating JSON now and I'm like, why does
+
+02:08:51.880 --> 02:08:59.680
+JavaScript have such a crappy format, it could just be S expressions and then we get rid
+
+02:08:59.680 --> 02:09:08.460
+of all this noise that we have to keep dealing with and it represents the same things but
+
+02:09:08.460 --> 02:09:13.420
+instead we settled on this crappier thing that's a little closer to the way we would
+
+02:09:13.420 --> 02:09:21.920
+have done it in C probably and because it is JavaScript's object format and it's like
+
+02:09:21.920 --> 02:09:28.120
+it's annoying to know and of course you could write a processor so it converts bi-directionally
+
+02:09:28.120 --> 02:09:30.140
+but nobody will do it.
+
+02:09:30.140 --> 02:09:37.740
+If you've ever used Lisp to replace your HTML, same sort of thing, you don't have to deal
+
+02:09:37.740 --> 02:09:43.840
+with your closing tags and you get all the auto editing and it's just like even without
+
+02:09:43.840 --> 02:09:50.680
+abstracting above any of the tags, just replacing them one for one, it's so much better but
+
+02:09:50.680 --> 02:09:53.380
+can you get anybody to do it?
+
+02:09:53.380 --> 02:10:00.040
+You look at Gix and you have the init system, that's written in Guile or scheme and then
+
+02:10:00.040 --> 02:10:07.680
+you got the cron program, it's mcron, that's written in Guile and you can use the normal
+
+02:10:07.680 --> 02:10:12.360
+cron syntax for that or a different one where you can do that and you can start labeling
+
+02:10:12.360 --> 02:10:15.700
+it with like say how many hours I want to do.
+
+02:10:15.700 --> 02:10:21.320
+I think the example they give in their documentation is like I want it to do the first Wednesday
+
+02:10:21.320 --> 02:10:28.160
+of every month or you could put if statements in there or a whole bunch of interesting things
+
+02:10:28.160 --> 02:10:35.400
+like that and it's like their package definitions are in Guile so it's like the whole operating
+
+02:10:35.400 --> 02:10:37.200
+system is in Guile.
+
+02:10:37.200 --> 02:10:39.000
+That's what we're trying to do, right?
+
+02:10:39.000 --> 02:10:46.120
+That was going to be the scripting language for Canoe, was going to be Guile and they
+
+02:10:46.120 --> 02:10:50.760
+were doing that which again, this is all like from MIT, right?
+
+02:10:50.760 --> 02:10:57.600
+Stallman's from the MIT AI lab, all this stuff, scheme, it's all evolved from that environment
+
+02:10:57.600 --> 02:11:03.600
+and they were right, this stuff is pretty good but it's like it's interesting to listen
+
+02:11:03.600 --> 02:11:11.600
+to him say if we were to update Emacs and allow another language to be the programming
+
+02:11:11.600 --> 02:11:16.360
+language, it would be scheme.
+
+02:11:16.360 --> 02:11:24.760
+It's not even on the radar of anybody in the industry to do that but he doesn't care.
+
+02:11:24.760 --> 02:11:32.880
+He's like he's the Mekana class, he sees the value, he sees what's technically good.
+
+02:11:32.880 --> 02:11:39.000
+Have you ever read any of his compiler code or something, I mean read his Emacs code,
+
+02:11:39.000 --> 02:11:48.120
+it's so clean, it's so beautiful, it's not like super abstract but it's like even the
+
+02:11:48.120 --> 02:11:52.580
+C code to implement the list of primitives, I mean now you don't know what he wrote versus
+
+02:11:52.580 --> 02:11:58.160
+somebody else and you can see in Emacs that it's gone away from the sort of stuff you
+
+02:11:58.160 --> 02:12:06.360
+used to write but his mind is just like so clear when doing things like that, that like
+
+02:12:06.360 --> 02:12:12.440
+you can learn an infinite number of things from kind of looking at the way he structures
+
+02:12:12.440 --> 02:12:13.440
+stuff.
+
+02:12:13.440 --> 02:12:17.920
+I'm going to have to, I'm making a note for myself to go seek that out specifically because
+
+02:12:17.920 --> 02:12:22.360
+I don't think I've ever, I've seen some of the code that he's written, I've just never
+
+02:12:22.360 --> 02:12:30.880
+seen it in that context of specifically going in to try to get a sense of what it is.
+
+02:12:30.880 --> 02:12:37.340
+I mean when you read, like read the Emacs manual, right, I mean at least through version
+
+02:12:37.340 --> 02:12:48.120
+19 he wrote that, right, and it's like step by step he takes you from what a point is
+
+02:12:48.120 --> 02:12:55.800
+to marks to windows and it's just, it's very thoughtful and you're like well he's been
+
+02:12:55.800 --> 02:13:00.120
+embedded in this for years and like this is second nature to him, he doesn't even think
+
+02:13:00.120 --> 02:13:07.640
+about it but when he talks about it, it all comes out from first principle and I think
+
+02:13:07.640 --> 02:13:14.120
+that's what made him a master programmer and some of the stuff that they tried to do, build
+
+02:13:14.120 --> 02:13:18.320
+an operating system from scratch even though they didn't have all the success they wanted
+
+02:13:18.320 --> 02:13:26.220
+but you look at how good they made the Unix tools compared to what they were in Berkeley
+
+02:13:26.220 --> 02:13:33.400
+and elsewhere and you know it's fabulous programming as well, I think very impressive.
+
+02:13:33.400 --> 02:13:39.960
+Cool, I know that he got, at least I saw some people praising that C manual that he recently
+
+02:13:39.960 --> 02:13:48.720
+published, I think it was in the last, somewhere in the last year, probably more like six months
+
+02:13:48.720 --> 02:13:57.120
+he released some kind of C documentation so I would wonder if he would ever consider doing
+
+02:13:57.120 --> 02:14:01.640
+something for Elisp or for Emacs or anything like that.
+
+02:14:01.640 --> 02:14:07.360
+Yeah he did talk about, that was one of the things he wanted, to update the Emacs list
+
+02:14:07.360 --> 02:14:16.080
+but I mean I think the intro of it if I remember, right, Chiselle's book right, I wanted to
+
+02:14:16.080 --> 02:14:24.880
+read it, I think the manual is pretty good but yeah, I mean there's so much to keep up
+
+02:14:24.880 --> 02:14:32.360
+with, I mean Ellie is so productive and I mean the rate at which they're adding stuff
+
+02:14:32.360 --> 02:14:39.480
+to Emacs is pretty, and that I mean if you ever look at the developer list it's a massive
+
+02:14:39.480 --> 02:14:44.720
+number, it's the same with the org, I don't know how people get anything done, they have
+
+02:14:44.720 --> 02:14:53.400
+so many, and Ehor processes like every message on there, this must be his job to some extent
+
+02:14:53.400 --> 02:15:01.360
+because it just, it would be so much time and like the hyperbole list, there's nothing,
+
+02:15:01.360 --> 02:15:06.800
+I mean it's no problem at all, it doesn't take any time but they have so many topics
+
+02:15:06.800 --> 02:15:11.160
+that people are talking about, it's very impressive.
+
+02:15:11.160 --> 02:15:18.000
+I don't understand how they get by without a better tracking system, I mean DevBugs is
+
+02:15:18.000 --> 02:15:28.000
+certainly good but it's not as, trying to find the right words here, I don't think I'm
+
+02:15:28.000 --> 02:15:35.600
+not trying to insult it but it's like a backlog, like a more kind of elaborate tracking system
+
+02:15:35.600 --> 02:15:40.520
+that kind of like separates, all right let's put this in our backlog, let's prioritize
+
+02:15:40.520 --> 02:15:48.520
+it, let's analyze it, but no, it just comes in and gets immediately handled and gets resolved,
+
+02:15:48.520 --> 02:15:54.880
+whether it's a no or a yes, things tend to be addressed and finished very quickly.
+
+02:15:54.880 --> 02:15:58.920
+So you're saying it's topics that concern me, I should bring up with them and they'll
+
+02:15:58.920 --> 02:16:04.120
+actually get dealt with pretty quickly?
+
+02:16:04.120 --> 02:16:11.680
+Whether to your satisfaction or not, I think so, my sense is in general that things don't
+
+02:16:11.680 --> 02:16:18.520
+come in and then get planned, they come in and they get done or they don't get done ever.
+
+02:16:18.520 --> 02:16:25.440
+My issues with the org, I think they've done a lot of great stuff from a user perspective,
+
+02:16:25.440 --> 02:16:32.960
+my issues have been with the way it was written, was very sloppy code for a long time, now
+
+02:16:32.960 --> 02:16:39.020
+they've spent a lot of time rewriting stuff so I think it's a lot better but I was looking
+
+02:16:39.020 --> 02:16:45.080
+at something the other day and it was clear that this should be at least a separate function
+
+02:16:45.080 --> 02:16:49.960
+or abstracted out and it was all hard coded in the function, so I think they sort of do
+
+02:16:49.960 --> 02:16:57.680
+that on a piecemeal basis because they've got a lot of legacy code from the way it started
+
+02:16:57.680 --> 02:17:03.280
+and they knew that it wasn't written the way they wanted, like having to write a totally
+
+02:17:03.280 --> 02:17:08.600
+new parser is a good example and yeah, we all go through that refactoring and stuff
+
+02:17:08.600 --> 02:17:16.160
+but I think it's because it was a quick and dirty solution for Karsten to solve, the same
+
+02:17:16.160 --> 02:17:24.960
+way the web was, right, I mean they just wanted a publishing platform for physicists, so now
+
+02:17:24.960 --> 02:17:36.300
+the guy who wrote that is a true genius, what's his name, the web inventor, so he took a broader
+
+02:17:36.300 --> 02:17:41.480
+approach to it but basically they had to get something up fast and running and that just
+
+02:17:41.480 --> 02:17:49.120
+sort of proved the concept and then you had to have the whole engineering team at Mosaic
+
+02:17:49.120 --> 02:17:56.800
+come in and actually do a lot more with it but they lost, the original web had full editing
+
+02:17:56.800 --> 02:18:03.740
+capabilities like in wikis and they lost that almost immediately when they went to the graphical
+
+02:18:03.740 --> 02:18:11.060
+web and so we've been hurting, you know, like every time I used to go when I was, early
+
+02:18:11.060 --> 02:18:18.000
+days of the web, I'd look and I'd look at this form and I'd say okay, so this is like
+
+02:18:18.000 --> 02:18:22.800
+you enter this data and then it runs this program and it does this thing, so how do
+
+02:18:22.800 --> 02:18:31.920
+I see what the program does, how does it process the form, it was never connected, the code
+
+02:18:31.920 --> 02:18:39.520
+was never connected to the form of like why would you want this set of inputs that is
+
+02:18:39.520 --> 02:18:46.920
+totally disconnected from the way it's processed, right, it was hidden in the back end, right,
+
+02:18:46.920 --> 02:18:52.680
+which you had no access to, it's like I guess good for proprietary vendors but it's like
+
+02:18:52.680 --> 02:18:58.400
+so for engineers to understand the system, it was very, very difficult, what if I have
+
+02:18:58.400 --> 02:19:05.480
+a hundred forms, so I see, yeah, that there's like one function that's referred to in the
+
+02:19:05.480 --> 02:19:11.440
+form but I don't know anything about that, I can't even see it's calling invocation
+
+02:19:11.440 --> 02:19:18.960
+a lot of times, right, so it's like that's just broken architecture and nobody cared,
+
+02:19:18.960 --> 02:19:24.240
+they just like let it go on and now you have all these, what, I mean was there an alternative
+
+02:19:24.240 --> 02:19:31.720
+to that, did it start somewhere else and then, well you encapsulate it as like the processing
+
+02:19:31.720 --> 02:19:39.800
+is part of the form abstraction, that it's an active entity and they can be separated
+
+02:19:39.800 --> 02:19:45.480
+if they live, right, like you have the front end and the back end piece of the form behavior
+
+02:19:45.480 --> 02:19:51.320
+but maybe you want that abstraction to be able to migrate front end to back end across
+
+02:19:51.320 --> 02:19:59.120
+time and so you need to have these two parts and we see this in building things now, right,
+
+02:19:59.120 --> 02:20:04.680
+what are we using, we're using TypeScript on the front end and we're using C sharp on
+
+02:20:04.680 --> 02:20:12.080
+the back end, so I imagine there's some impedance mismatches going on around there but we actually
+
+02:20:12.080 --> 02:20:17.580
+introduced a Python validation framework, I don't want to get into this too much but
+
+02:20:17.580 --> 02:20:23.960
+we are using those technologies and we can share those now across the front end and back
+
+02:20:23.960 --> 02:20:34.520
+end and so, you know, a lot of languages that you need to understand and I just think, so
+
+02:20:34.520 --> 02:20:40.140
+like closures, right, you're familiar with closures, right, so I mean that's what you're
+
+02:20:40.140 --> 02:20:49.080
+doing is you're passing around the environment so that you can interpret the data properly
+
+02:20:49.080 --> 02:20:57.400
+because you have the closure which wraps around it and so many things get, when you want to
+
+02:20:57.400 --> 02:21:05.380
+deal with unwinding state, you know, through many levels, having the closures allows you
+
+02:21:05.380 --> 02:21:12.200
+to do that easily, sort of the lexical binding versus the dynamic binding and so, you know,
+
+02:21:12.200 --> 02:21:20.920
+the callback hell that they talk about in Node.js is reflective of not having a good
+
+02:21:20.920 --> 02:21:29.880
+closure-based environment, when you look at most of the list-based web environments are
+
+02:21:29.880 --> 02:21:36.920
+closure-based and they can do much more interesting application building without dealing with
+
+02:21:36.920 --> 02:21:41.000
+a lot of the plumbing than if they didn't have that.
+
+02:21:41.000 --> 02:21:49.480
+Interesting and when you refer to closures, are you saying that there's a certain paradigm
+
+02:21:49.480 --> 02:21:56.760
+of form processing on the web that's more like a closure-based solution?
+
+02:21:56.760 --> 02:22:04.480
+That's right, yeah, look at the common Lisp, like Hutchin2 and frameworks built on top
+
+02:22:04.480 --> 02:22:07.400
+of that and you'll see.
+
+02:22:07.400 --> 02:22:12.480
+I definitely will do that but I meant more like when you're talking about the early days
+
+02:22:12.480 --> 02:22:20.600
+and how they separated the form from the actions, are you saying that that's a situation where
+
+02:22:20.600 --> 02:22:26.960
+like something that would be like a closure is more or are you just strictly talking about
+
+02:22:26.960 --> 02:22:27.960
+that?
+
+02:22:27.960 --> 02:22:32.640
+That would help solve that problem, I would say, because it gives you, you know, sort
+
+02:22:32.640 --> 02:22:38.040
+of you're seeing some of it in React now, they're like, oh, we've discovered components
+
+02:22:38.040 --> 02:22:46.040
+and so, you know, we only have to do partial updates now because we can like walk our tree
+
+02:22:46.040 --> 02:22:54.080
+and know that only this subcomponent, you know, and it's like, yeah, by building all
+
+02:22:54.080 --> 02:23:02.400
+these abstractions, you simplify your state management a lot and you simplify that and
+
+02:23:02.400 --> 02:23:06.720
+you localize where any of your issues can be.
+
+02:23:06.720 --> 02:23:15.140
+And so, if I have my processing engine totally disconnected from my input state, you know,
+
+02:23:15.140 --> 02:23:19.600
+it's going to cause a lot of problems and you saw it in the early days of the web where
+
+02:23:19.600 --> 02:23:26.200
+everything was, what was it, CGI, is that what it was, right?
+
+02:23:26.200 --> 02:23:32.240
+You just sort of, you had a totally separate back end and there was just this very thin
+
+02:23:32.240 --> 02:23:39.480
+kind of connection to the front end and everybody's rediscovered, they rediscovered sockets, okay,
+
+02:23:39.480 --> 02:23:45.160
+we need sockets and then everybody's fighting, well, I have to replicate the data on the
+
+02:23:45.160 --> 02:23:53.120
+front end and the back end, you know, just handling tables is such a bear on the web
+
+02:23:53.120 --> 02:23:54.920
+for similar reasons, right?
+
+02:23:54.920 --> 02:24:02.360
+So you had, what was that company Apollo or that was one of their frameworks who was trying
+
+02:24:02.360 --> 02:24:11.360
+to do real time front end, back end framework so that you can do all these pushes to a million
+
+02:24:11.360 --> 02:24:18.160
+clients, right, of any change and you could get like real time updates.
+
+02:24:18.160 --> 02:24:23.320
+You know, that seems fundamental to me if you're going to have a Facebook like kind
+
+02:24:23.320 --> 02:24:29.820
+of environment and you look at how much money Facebook had to spend to just build their
+
+02:24:29.820 --> 02:24:33.560
+basic application that scales at the level that they needed it.
+
+02:24:33.560 --> 02:24:35.540
+I mean, it's just nymph.
+
+02:24:35.540 --> 02:24:38.760
+You're talking about hot reloading, right, of data?
+
+02:24:38.760 --> 02:24:46.560
+Yeah, yeah, but I'm talking about like how it flows and where it's maintained and, you
+
+02:24:46.560 --> 02:24:50.040
+know, is there a single source of truth, right?
+
+02:24:50.040 --> 02:24:51.360
+That's what we really want.
+
+02:24:51.360 --> 02:24:57.000
+So people try to push stuff to the back end, but then you get all of this problem of the
+
+02:24:57.000 --> 02:24:58.960
+front ends out of date.
+
+02:24:58.960 --> 02:25:00.640
+So what's your method?
+
+02:25:00.640 --> 02:25:07.440
+You keep web sockets open, you know, it's like, well, then I have too many of those.
+
+02:25:07.440 --> 02:25:17.360
+So yeah, and what's your programming model for pushing all that data around anyway, right?
+
+02:25:17.360 --> 02:25:25.000
+Pushing, pulling, it's complex stuff, but if you solve it, there's a guy who wrote a
+
+02:25:25.000 --> 02:25:32.120
+web server, like tiny, tiny WB or something.
+
+02:25:32.120 --> 02:25:38.720
+I could look it up, but it's like, and he shows benchmarks of what he can process from
+
+02:25:38.720 --> 02:25:41.100
+this one like C-based program.
+
+02:25:41.100 --> 02:25:48.860
+And it's like five times the speed of other things just based on the algorithms that he
+
+02:25:48.860 --> 02:25:55.840
+implemented and so, you know, so you get your scale right like that and then you keep adding
+
+02:25:55.840 --> 02:26:00.600
+on some abstraction layers because now you can afford it.
+
+02:26:00.600 --> 02:26:06.200
+And then you simplify your programming model and like, we could be building the kinds of
+
+02:26:06.200 --> 02:26:12.240
+web applications that we want, you know, with menus even without, have you ever figured
+
+02:26:12.240 --> 02:26:16.640
+out how to do a good menu on a web app, you know?
+
+02:26:16.640 --> 02:26:22.920
+It's so much energy, right, when like in Emacs it would be just, here's my menu item and
+
+02:26:22.920 --> 02:26:23.920
+I'm done.
+
+02:26:23.920 --> 02:26:32.220
+So I think the baseline of what your programming model is matters so much from the syntax down
+
+02:26:32.220 --> 02:26:40.320
+to like the lexical scoping and, you know, and we're just lucky that Lisp got a lot of
+
+02:26:40.320 --> 02:26:45.780
+things right, that we have that as sort of like the thinking man's programming environment
+
+02:26:45.780 --> 02:26:52.460
+while all these other people were stuffed into Java, you know, in the 80s and they built
+
+02:26:52.460 --> 02:27:01.560
+Java beans and if you've ever looked at J2EE, I mean, that was such a monstrosity that it
+
+02:27:01.560 --> 02:27:04.880
+just collapsed literally of its own weight sort of.
+
+02:27:04.880 --> 02:27:11.440
+I mean, people are still using Java but it's like nobody wants to field a new web app,
+
+02:27:11.440 --> 02:27:16.760
+you know, in J2EE, it's just not done.
+
+02:27:16.760 --> 02:27:23.340
+So unless you have, you know, a ton of legacy investment that you have to keep up.
+
+02:27:23.340 --> 02:27:30.480
+So I think these design choices matter a lot and I think Apple's renaissance has been based
+
+02:27:30.480 --> 02:27:36.860
+on, you know, really saying, well, we'll iterate through our designs before we subject the
+
+02:27:36.860 --> 02:27:38.360
+users to them.
+
+02:27:38.360 --> 02:27:45.840
+We're not going to just make everybody one big beta test like Facebook or Microsoft and,
+
+02:27:45.840 --> 02:27:52.280
+you know, you see that like people have, you know, certainly in the consumer space have,
+
+02:27:52.280 --> 02:27:58.760
+you know, the shops are always full, I mean, wherever Apple store you go to and, you know,
+
+02:27:58.760 --> 02:28:04.480
+Microsoft is trying, Sony tries to have stores and stuff but you don't, they're not filled
+
+02:28:04.480 --> 02:28:10.480
+with this traffic, you know, because people aren't attached to the design aesthetic the
+
+02:28:10.480 --> 02:28:11.480
+same way.
+
+02:28:11.480 --> 02:28:12.480
+True, yeah.
+
+02:28:12.480 --> 02:28:17.120
+Yeah, they got something, they certainly have something that people want.
+
+02:28:17.120 --> 02:28:24.760
+Every program grows until it's a half a common list implementation or it's got a mail server
+
+02:28:24.760 --> 02:28:31.120
+in it, like you got those two sayings, oh, have you seen this at all?
+
+02:28:31.120 --> 02:28:36.240
+It's kind of lets you make desktop like apps with Common Lisp.
+
+02:28:36.240 --> 02:28:44.160
+I like the name though, Omnificent GUI Builder, you're giving us a lot of great links today,
+
+02:28:44.160 --> 02:28:45.160
+it's making me happy.
+
+02:28:45.160 --> 02:28:53.880
+It's for a YouTube video but they also have a GitHub page somewhere.
+
+02:28:53.880 --> 02:29:02.560
+I wish I did more Common Lisp but this is, and this is pretty new too, this is about
+
+02:29:02.560 --> 02:29:04.440
+a half a year old only.
+
+02:29:04.440 --> 02:29:09.320
+Well, does it look decent?
+
+02:29:09.320 --> 02:29:10.880
+Is it real or is it like?
+
+02:29:10.880 --> 02:29:18.160
+Well, it seems kind of like React.js where you're not writing, where you're, it's not
+
+02:29:18.160 --> 02:29:26.320
+the pure HTML post Git model where it's more like an application and like if you look at
+
+02:29:26.320 --> 02:29:30.240
+the screen, like you have the applications, you can move them around like it is in this
+
+02:29:30.240 --> 02:29:31.240
+up.
+
+02:29:31.240 --> 02:29:40.440
+It certainly looks functional, that would be my way to say it.
+
+02:29:40.440 --> 02:29:45.920
+And then you just write it in all one language.
+
+02:29:45.920 --> 02:29:50.040
+Just like Smalltalk, like what their environment used to look like.
+
+02:29:50.040 --> 02:29:57.640
+Oh yeah, and that, the glorious toolkits is the thing I was...
+
+02:29:57.640 --> 02:30:03.840
+Well there was a time when we had single UI builder environments and then you would just
+
+02:30:03.840 --> 02:30:11.160
+say what theme you wanted, Windows, Mac OS, and instantly it would look like the other
+
+02:30:11.160 --> 02:30:14.600
+environment and you had to do no work to get that.
+
+02:30:14.600 --> 02:30:22.560
+It's like, wow, that would be nice these days.
+
+02:30:22.560 --> 02:30:27.720
+Another thing with that philosophy of the copying the programs, you had Keanu Reeves
+
+02:30:27.720 --> 02:30:34.200
+talking about NFTs and it's like, what do you think about these NFTs with the matrix?
+
+02:30:34.200 --> 02:30:40.000
+You mean we're gonna have a computer, let's see, you mean we're gonna spend all this,
+
+02:30:40.000 --> 02:30:47.080
+you mean we're gonna have, you want me to be on board with charging people for these
+
+02:30:47.080 --> 02:30:55.320
+digital things on a computer that's designed to make copies?
+
+02:30:55.320 --> 02:31:01.520
+The whole person just like completely stopped because they're trying to, yeah, showed you
+
+02:31:01.520 --> 02:31:04.720
+how the idea was fundamentally wrong.
+
+02:31:04.720 --> 02:31:09.360
+Yeah, get your baseline, right?
+
+02:31:09.360 --> 02:31:18.880
+I mean, I've had to, I'm very pro-Ukraine and so I've learned a lot more about Russian
+
+02:31:18.880 --> 02:31:19.880
+history.
+
+02:31:19.880 --> 02:31:27.520
+I also have a number of Russian workmates who are very nice people, but they left Russia
+
+02:31:27.520 --> 02:31:38.560
+as well and a lot of what's going on seems to be from decisions that were made eons ago
+
+02:31:38.560 --> 02:31:44.280
+in the back to the Mongols and the way they ran their systems.
+
+02:31:44.280 --> 02:31:49.760
+So it's like when everybody says we've got to run so fast and we don't have time to really
+
+02:31:49.760 --> 02:31:57.520
+think through the design, they can't see the impact that that's gonna have on their enterprise
+
+02:31:57.520 --> 02:31:58.520
+or anything else.
+
+02:31:58.520 --> 02:32:05.520
+And if you're a long-term person, you obviously have to do things fast enough so the company
+
+02:32:05.520 --> 02:32:11.560
+can survive, but you have to think about that strategic level as well.
+
+02:32:11.560 --> 02:32:14.960
+Those who don't know history are doomed to repeat it.
+
+02:32:14.960 --> 02:32:17.520
+Yeah, exactly.
+
+02:32:17.520 --> 02:32:19.120
+Sometimes very badly.
+
+02:32:19.120 --> 02:32:27.080
+So how do we get Lisp to be something again?
+
+02:32:27.080 --> 02:32:28.760
+People are worried about Emacs dying out.
+
+02:32:28.760 --> 02:32:35.680
+I don't think that's happening so much, but certainly Lisp missed its position in web
+
+02:32:35.680 --> 02:32:42.680
+development, it seems, even though it can be quite capable there, but because of its
+
+02:32:42.680 --> 02:32:53.640
+image model and lack of focus on threading, it seems like you can't get anybody to even
+
+02:32:53.640 --> 02:32:58.400
+look at it now, right?
+
+02:32:58.400 --> 02:33:04.360
+I mean, unless you're talking about Clojure, like you talked about.
+
+02:33:04.360 --> 02:33:09.280
+You're talking about how Scheme would have been a lot better for JavaScript when JavaScript
+
+02:33:09.280 --> 02:33:15.560
+was first released, or like Emacs, because Emacs is good for a platform for distributing
+
+02:33:15.560 --> 02:33:25.280
+apps versus HTML as a document reader that they shoved applications into.
+
+02:33:25.280 --> 02:33:28.800
+I like the way you describe things.
+
+02:33:28.800 --> 02:33:34.080
+Yeah, I can't argue with that.
+
+02:33:34.080 --> 02:33:37.520
+But it is interesting to me.
+
+02:33:37.520 --> 02:33:45.120
+A lot of people don't know certain systems that are Lisp based that have been super successful,
+
+02:33:45.120 --> 02:33:55.240
+like Orbitz was based on the technology of a Cambridge company that implemented the bulk
+
+02:33:55.240 --> 02:34:05.000
+of their flight scheduling software in Lisp, and they had a very active kind of Lisp community.
+
+02:34:05.000 --> 02:34:07.280
+So you know, it's still-
+
+02:34:07.280 --> 02:34:10.040
+Hacker News is another one.
+
+02:34:10.040 --> 02:34:14.080
+Hacker News, yeah, that's built in Lisp?
+
+02:34:14.080 --> 02:34:21.040
+Yeah, the person who founded it was using Lisp and Paul Graham.
+
+02:34:21.040 --> 02:34:23.880
+Sam Altman?
+
+02:34:23.880 --> 02:34:25.440
+Paul Graham?
+
+02:34:25.440 --> 02:34:27.440
+Paul Graham.
+
+02:34:27.440 --> 02:34:28.440
+He founded it.
+
+02:34:28.440 --> 02:34:29.440
+Oh, I didn't know he was-
+
+02:34:29.440 --> 02:34:31.440
+Or at least he was involved in it anyway.
+
+02:34:31.440 --> 02:34:32.440
+Yeah, yeah, yeah.
+
+02:34:32.440 --> 02:34:33.440
+It was either that or Reddit.
+
+02:34:33.440 --> 02:34:34.440
+It was one or the other.
+
+02:34:34.440 --> 02:34:44.400
+He had an interesting Yahoo shopping experience where he wrote about that, how he leveraged
+
+02:34:44.400 --> 02:34:46.840
+Lisp to his advantage.
+
+02:34:46.840 --> 02:34:51.840
+So yeah, I think Python was that way until it got discovered.
+
+02:34:51.840 --> 02:35:02.640
+I worked with those guys back in Silicon Valley for a little while, and when we were trying
+
+02:35:02.640 --> 02:35:09.680
+to show the world that Python was something good, but it hadn't been noticed yet.
+
+02:35:09.680 --> 02:35:17.000
+So there's a lot of leverage that you can get if you're careful about it.
+
+02:35:17.000 --> 02:35:23.920
+One thing that I thought was interesting is you look at the- Google did some survey of
+
+02:35:23.920 --> 02:35:32.160
+the most efficient programming languages to run, and I think C was number one, and you
+
+02:35:32.160 --> 02:35:39.280
+look at the list, and the only one that even looks remotely high level is Common Lisp,
+
+02:35:39.280 --> 02:35:51.200
+where it's sent per the TDP or whatever that would be called, sent per execution or whatever.
+
+02:35:51.200 --> 02:35:53.760
+Everything else is more like C.
+
+02:35:53.760 --> 02:35:59.200
+Have you heard of Pico Lisp?
+
+02:35:59.200 --> 02:36:01.160
+A little bit.
+
+02:36:01.160 --> 02:36:09.840
+On RosettaCode, where they write the different implementations of algorithms in different
+
+02:36:09.840 --> 02:36:16.720
+languages, look at any sort of algorithm and the Pico Lisp implementation next to all the
+
+02:36:16.720 --> 02:36:25.600
+others, and it's always super tiny, and you've got just a ton more code and everything else.
+
+02:36:25.600 --> 02:36:32.920
+And then Pico Lisp is like Lisp with a database, maybe a triplet database built in, and it's
+
+02:36:32.920 --> 02:36:35.880
+pretty small and efficient.
+
+02:36:35.880 --> 02:36:39.160
+But I don't think anybody uses it.
+
+02:36:39.160 --> 02:36:46.200
+But it's an interesting example of a special case Lisp that you could embed in other things
+
+02:36:46.200 --> 02:36:48.200
+or use.
+
+02:36:48.200 --> 02:36:53.720
+One guy in Germany has been doing it for many years.
+
+02:36:53.720 --> 02:36:57.480
+Is that like an internet rule or a computing rule that we could come up with?
+
+02:36:57.480 --> 02:37:01.720
+No matter what you could think of, no matter what you find, there's one guy in Germany
+
+02:37:01.720 --> 02:37:07.440
+who's already done it.
+
+02:37:07.440 --> 02:37:09.760
+Well, I knew some Dutch people.
+
+02:37:09.760 --> 02:37:12.080
+I was in embedded systems at Motorola.
+
+02:37:12.080 --> 02:37:16.560
+We were working with very small microcontrollers with no memory.
+
+02:37:16.560 --> 02:37:21.960
+So we needed these super efficient cross compilers to build anything for us.
+
+02:37:21.960 --> 02:37:27.520
+And this company in Amsterdam seemed to have some skills.
+
+02:37:27.520 --> 02:37:31.600
+And so we started talking to them, and then we flew over there to do due diligence and
+
+02:37:31.600 --> 02:37:32.600
+check them out.
+
+02:37:32.600 --> 02:37:38.040
+And God, if they did not have one of the most advanced software development operations I'd
+
+02:37:38.040 --> 02:37:42.620
+ever seen, total quality assurance, great people.
+
+02:37:42.620 --> 02:37:46.860
+But everything was like to the T. This is how we do it, boom, boom, boom.
+
+02:37:46.860 --> 02:37:54.600
+So that's the only way you could get the efficiency out of compilers at the time.
+
+02:37:54.600 --> 02:37:56.920
+And so we worked with them.
+
+02:37:56.920 --> 02:38:06.680
+But they had that German kind of culture of the fit and finish has to be just so.
+
+02:38:06.680 --> 02:38:14.800
+So we used to have to do things like there was 256 bytes of memory.
+
+02:38:14.800 --> 02:38:18.360
+There's no K in there, of RAM.
+
+02:38:18.360 --> 02:38:28.400
+And so you would like to use overlays where you're repeating what you store in each word
+
+02:38:28.400 --> 02:38:33.840
+at different times in the program, and you had to manually keep track of the lifetime
+
+02:38:33.840 --> 02:38:34.840
+of objects.
+
+02:38:34.840 --> 02:38:36.720
+And it was a nightmare.
+
+02:38:36.720 --> 02:38:41.280
+But it was the only way to kind of squeeze some of the stuff in there.
+
+02:38:41.280 --> 02:38:47.560
+And we started in assembler, and then we went to C. And then we had this one time that was
+
+02:38:47.560 --> 02:38:55.040
+really fun that we had, God, I'm really dating myself now, but some of the people in product
+
+02:38:55.040 --> 02:39:02.980
+had these terminals, like 12 inch terminals with eight inch floppy disks on the terminal.
+
+02:39:02.980 --> 02:39:11.800
+And they were using those to interface to the microcontroller boards for emulator boards,
+
+02:39:11.800 --> 02:39:17.080
+where we would test out new software for a board that hadn't been released to production
+
+02:39:17.080 --> 02:39:18.080
+yet.
+
+02:39:18.080 --> 02:39:20.600
+And we would be able to iterate on that.
+
+02:39:20.600 --> 02:39:26.960
+And right next to these things were sun workstations that the engineers used for their normal development.
+
+02:39:26.960 --> 02:39:30.400
+So I was moved from research to product.
+
+02:39:30.400 --> 02:39:34.960
+And they said, so this is how you're going to have to do your code on this monochrome
+
+02:39:34.960 --> 02:39:35.960
+terminal.
+
+02:39:35.960 --> 02:39:40.200
+And I'm like, well, what about using the sun workstation?
+
+02:39:40.200 --> 02:39:43.880
+And it's just a serial port, so we'll just interface it.
+
+02:39:43.880 --> 02:39:45.760
+No, we tried that two years ago.
+
+02:39:45.760 --> 02:39:46.760
+It didn't work.
+
+02:39:46.760 --> 02:39:48.760
+We can't do it.
+
+02:39:48.760 --> 02:39:55.080
+I'm like, I am not going to sit here and use this dumpy thing for a week.
+
+02:39:55.080 --> 02:40:01.200
+So that afternoon, I figured out the protocol and got the thing, the sun workstation, talking
+
+02:40:01.200 --> 02:40:02.200
+to it.
+
+02:40:02.200 --> 02:40:09.760
+And then I wrote a disassembler tool so I could work the assembly, the math, behind
+
+02:40:09.760 --> 02:40:11.320
+it at a higher level.
+
+02:40:11.320 --> 02:40:13.920
+And I had all that going the first week.
+
+02:40:13.920 --> 02:40:18.440
+But people came over, and they're like, what are you doing?
+
+02:40:18.440 --> 02:40:21.600
+How is this possible?
+
+02:40:21.600 --> 02:40:26.600
+They just had started from the vantage point that they really had to live here, and they
+
+02:40:26.600 --> 02:40:29.600
+hadn't done enough of an assessment.
+
+02:40:29.600 --> 02:40:36.760
+So I would just look back at that when people say, this is the only way to do something.
+
+02:40:36.760 --> 02:40:42.660
+That's one of the great things about computers is it can speak too many languages.
+
+02:40:42.660 --> 02:40:48.280
+So if you want to just speak Lisp, you can just speak Lisp, relatively, anyway.
+
+02:40:48.280 --> 02:40:56.520
+Or if everybody else wants to speak that worst language that you don't like as much, you
+
+02:40:56.520 --> 02:41:03.800
+don't necessarily have to speak that, I guess, except for the www, but anyway.
+
+02:41:03.800 --> 02:41:11.720
+Omnificent web development language, and tell everybody that this is the be all and all.
+
+02:41:11.720 --> 02:41:15.320
+I think what I like the most about that is that I don't believe that omnificent is actually
+
+02:41:15.320 --> 02:41:23.680
+a word, so that can be accused of being incorrect, because there is no definition of omnificent
+
+02:41:23.680 --> 02:41:26.040
+that they can be shown not to conform to.
+
+02:41:26.040 --> 02:41:29.720
+I could be talking about that, but that's...
+
+02:41:29.720 --> 02:41:30.800
+There's a Latin word.
+
+02:41:30.800 --> 02:41:36.720
+That's why you know what it means, is because omni is everything, efficient is something
+
+02:41:36.720 --> 02:41:44.440
+about knowing, or everywhere, like the all-knowing GUI builder.
+
+02:41:44.440 --> 02:41:46.440
+Isn't that kind of how you read the omni-efficient?
+
+02:41:46.440 --> 02:41:49.080
+I think that's actually omniscient.
+
+02:41:49.080 --> 02:41:50.080
+I think...
+
+02:41:50.080 --> 02:41:51.080
+Omniscient, yeah.
+
+02:41:51.080 --> 02:41:52.080
+Oh, omniscient.
+
+02:41:52.080 --> 02:41:53.080
+Yeah, that's right.
+
+02:41:53.080 --> 02:41:54.080
+You're close.
+
+02:41:54.080 --> 02:41:55.080
+I think, yeah.
+
+02:41:55.080 --> 02:42:00.520
+C-L-O-G, so it's the clog builder.
+
+02:42:00.520 --> 02:42:02.960
+That sounds like a Lisp-y kind of thing, you know?
+
+02:42:02.960 --> 02:42:09.680
+It doesn't have any sexiness to it, but we've invented the clog builder.
+
+02:42:09.680 --> 02:42:10.680
+You know, that's funny.
+
+02:42:10.680 --> 02:42:12.480
+That was another thing I wanted to mention when I was writing this.
+
+02:42:12.480 --> 02:42:15.120
+It's just to clog how everybody else does things.
+
+02:42:15.120 --> 02:42:16.120
+Just clog it up.
+
+02:42:16.120 --> 02:42:19.120
+No, you don't have to do it that way.
+
+02:42:19.120 --> 02:42:24.800
+Is that something that is real?
+
+02:42:24.800 --> 02:42:32.140
+I feel like a lot of Emacs users are maybe just that type of person in general.
+
+02:42:32.140 --> 02:42:38.400
+We want things that look, not look, but sound, like clog.
+
+02:42:38.400 --> 02:42:47.360
+We prefer things that are awkward and are stupid acronyms, and if it seems like effort
+
+02:42:47.360 --> 02:42:53.720
+has been put into something to make it sound sick or market or anything, it's like, I don't
+
+02:42:53.720 --> 02:42:54.720
+know.
+
+02:42:54.720 --> 02:42:55.720
+I'm not sure.
+
+02:42:55.720 --> 02:43:00.480
+I think that goes back to what I was talking about with the scrolling down.
+
+02:43:00.480 --> 02:43:03.600
+I want it to not have animations.
+
+02:43:03.600 --> 02:43:10.600
+It's just spending CPU cycles to make my experience worse.
+
+02:43:10.600 --> 02:43:15.520
+Why would I want to scroll down half a line so I can read half of a text?
+
+02:43:15.520 --> 02:43:21.120
+Well, if you scroll half of a finger, that's what it would be, if you just do this.
+
+02:43:21.120 --> 02:43:22.400
+Oh, is this the guy?
+
+02:43:22.400 --> 02:43:26.960
+I think this is the guy, the one, the G toolkit, yeah, the glamorous toolkit.
+
+02:43:26.960 --> 02:43:28.920
+I read about this a while ago.
+
+02:43:28.920 --> 02:43:31.560
+This was one Google guy.
+
+02:43:31.560 --> 02:43:40.700
+We had a team, and then I think he left Google, and he's trying to do it, implemented in Faro,
+
+02:43:40.700 --> 02:43:43.000
+the pure object-oriented language.
+
+02:43:43.000 --> 02:43:45.760
+Yeah, this sounds like one of those things.
+
+02:43:45.760 --> 02:43:47.760
+Yeah, that's what it is.
+
+02:43:47.760 --> 02:43:52.200
+You know, there's, yeah, it's like, just get the base right, right?
+
+02:43:52.200 --> 02:43:53.240
+That's what Lisp did.
+
+02:43:53.240 --> 02:44:00.480
+Just give me Kar and Kutter and Lambda Calculus and go for it.
+
+02:44:00.480 --> 02:44:01.480
+What?
+
+02:44:01.480 --> 02:44:03.040
+And I will move the world.
+
+02:44:03.040 --> 02:44:04.040
+Yeah.
+
+02:44:04.040 --> 02:44:09.080
+Well, when you think, you know, I mean, look at the opportunity that was lost with Lisp
+
+02:44:09.080 --> 02:44:10.080
+machines.
+
+02:44:10.080 --> 02:44:11.920
+I was around for those too.
+
+02:44:11.920 --> 02:44:14.520
+I'm near dead, I guess.
+
+02:44:14.520 --> 02:44:24.520
+But I was young, at least then, and they microcoded Lisp, right?
+
+02:44:24.520 --> 02:44:29.480
+So everything atop that was Lisp.
+
+02:44:29.480 --> 02:44:33.800
+The Windows system was Lisp, you know, sort of like what Jobs was trying to do.
+
+02:44:33.800 --> 02:44:39.240
+He was trying to do, I don't know, well, when he did display PostScript, or he was trying
+
+02:44:39.240 --> 02:44:42.920
+to get common experience at different levels.
+
+02:44:42.920 --> 02:44:48.320
+But like, if you really have a consistent programming model across your whole damn system,
+
+02:44:48.320 --> 02:44:58.120
+you know, it's probably thousands of man years of work that you just eliminate right there
+
+02:44:58.120 --> 02:45:02.920
+if you have a decent language, right, and then a debugging environment.
+
+02:45:02.920 --> 02:45:09.520
+I mean, we still use stuff that there is no debugging environment for, right?
+
+02:45:09.520 --> 02:45:15.240
+Because it solves some problem that exists in the industry, and we haven't gotten rid
+
+02:45:15.240 --> 02:45:17.440
+of it yet.
+
+02:45:17.440 --> 02:45:22.320
+I want to set up some Raspberry Pi lights.
+
+02:45:22.320 --> 02:45:27.380
+If you have like that with an embedded controller, if you run that with Lisp, you're probably
+
+02:45:27.380 --> 02:45:33.720
+going to get a REPL for free that is going to allow you to remotely control your lights.
+
+02:45:33.720 --> 02:45:42.280
+You know, they have MicroPython for that, if you're into Python at all.
+
+02:45:42.280 --> 02:45:48.500
+That was a physicist, I don't know if he was German, but a physicist who implemented that
+
+02:45:48.500 --> 02:45:52.840
+to do controller hardware, and it's pretty good.
+
+02:45:52.840 --> 02:45:59.320
+He's moved a lot of, I think they actually got money behind it, and then started moving
+
+02:45:59.320 --> 02:46:01.680
+all the libraries into that too.
+
+02:46:01.680 --> 02:46:02.680
+So that runs pretty well.
+
+02:46:02.680 --> 02:46:08.340
+And you got stuff like CPython too, but I think part of the thing that makes Python
+
+02:46:08.340 --> 02:46:14.120
+appealing to people is you got all these libraries that people can use to build their apps with,
+
+02:46:14.120 --> 02:46:18.360
+and if you're running MicroPython or CPython, do you have access to those?
+
+02:46:18.360 --> 02:46:19.360
+Right.
+
+02:46:19.360 --> 02:46:24.120
+Well, that's what I'm saying, they like have been moving on that to get a lot more of the
+
+02:46:24.120 --> 02:46:31.200
+libraries available, because at first, that's right, that was part of what they were lacking.
+
+02:46:31.200 --> 02:46:36.720
+But just, you know, being able to put your language at the hardware level without a separate
+
+02:46:36.720 --> 02:46:41.760
+operating system is kind of an interesting concept too.
+
+02:46:41.760 --> 02:46:47.280
+And at that time with the Lisp machines, they were making the CPUs in line with, you had
+
+02:46:47.280 --> 02:46:53.800
+somebody making CPUs specifically for the Lisp machines, and ever since then, we've
+
+02:46:53.800 --> 02:46:59.960
+always been making CPUs to specifically target C, and I wonder how much that kind of like
+
+02:46:59.960 --> 02:47:07.800
+the philosophy and artifacts that you design, I wonder if like CPUs would look different
+
+02:47:07.800 --> 02:47:13.880
+and stuff like that, because we'd be optimizing them for Lambda calculus or something, and
+
+02:47:13.880 --> 02:47:17.760
+Reples, and if that would result in anything different.
+
+02:47:17.760 --> 02:47:25.120
+Well, I always ask my friend in London who knows everything, or he knows something about
+
+02:47:25.120 --> 02:47:38.720
+everything, why I remember the fastest computer I ever used was a DEC Alpha in the 80s, and
+
+02:47:38.720 --> 02:47:45.720
+it was, or maybe the beginning of the 90s, so it was a 64-bit machine at the time, and
+
+02:47:45.720 --> 02:47:52.760
+it used SCSI disks, and I would, you know, compilation took a while of programs, but
+
+02:47:52.760 --> 02:47:57.640
+I would go to compile, and I would just see these messages fly by me, and it would be
+
+02:47:57.640 --> 02:48:04.400
+like Go is today, right, be done in an instant, and like, how is that possible, I go over
+
+02:48:04.400 --> 02:48:11.520
+to this other machine, and they were emulating, I thought it had 128-bit data paths, but we
+
+02:48:11.520 --> 02:48:17.080
+looked it up, it was 64-bit, but they did have 128-bit words.
+
+02:48:17.080 --> 02:48:22.480
+You're talking about like boot up speed, and like how fast when you press a letter G on
+
+02:48:22.480 --> 02:48:26.680
+a keyboard, how fast it appears on your screen, and stuff like that, right?
+
+02:48:26.680 --> 02:48:32.840
+No, compilation of a complex application, how long that would take, and how long I would
+
+02:48:32.840 --> 02:48:38.560
+have to wait, and it was near instantaneous in many cases, and I had never experienced
+
+02:48:38.560 --> 02:48:39.600
+that before.
+
+02:48:39.600 --> 02:48:48.680
+So their disks were super fast, the throughput on the data buses was super fast, and I mean,
+
+02:48:48.680 --> 02:48:56.120
+it just worked like if you wanted a fast computer, it felt right, and I've not, you know, despite
+
+02:48:56.120 --> 02:49:02.700
+all the hardware I've had access to, I haven't had that same experience on any other machine
+
+02:49:02.700 --> 02:49:03.700
+to do.
+
+02:49:03.700 --> 02:49:11.240
+I know the Zig programming language has recently gotten an incremental compiler for it.
+
+02:49:11.240 --> 02:49:12.240
+Nice.
+
+02:49:12.240 --> 02:49:13.240
+So it would.
+
+02:49:13.240 --> 02:49:15.640
+Yeah, they're doing good work, they're doing good.
+
+02:49:15.640 --> 02:49:17.640
+Have you seen Vlang too?
+
+02:49:17.640 --> 02:49:19.760
+That's sort of interesting.
+
+02:49:19.760 --> 02:49:24.160
+I've seen that a little bit, but I haven't looked too much into it.
+
+02:49:24.160 --> 02:49:33.720
+There's this one Russian guy, and he's building his own Go-like replacement for C, because
+
+02:49:33.720 --> 02:49:40.000
+he likes Go a lot, but he wants to solve some other problems that he didn't like in Go,
+
+02:49:40.000 --> 02:49:43.280
+and the things he says about it are incredible.
+
+02:49:43.280 --> 02:49:47.640
+It doesn't, well, it didn't have garbage collection at first, right, because he wants to do all
+
+02:49:47.640 --> 02:49:54.760
+those machine-level things, but they seem to be able to build things that they promote
+
+02:49:54.760 --> 02:49:59.160
+as doing a lot, like an entire web framework they have already.
+
+02:49:59.160 --> 02:50:06.760
+They have their own graphics system and, you know, should be able to do very fast compositing.
+
+02:50:06.760 --> 02:50:13.040
+Who knows, you know, and so a lot of people say that he's over-promising, but he keeps
+
+02:50:13.040 --> 02:50:21.080
+delivering these snippets about, well, V, originally he had to translate V to C to get it to compile.
+
+02:50:21.080 --> 02:50:29.800
+Now it's self-hosting, and he can compile the whole language in 1.8 seconds from start,
+
+02:50:29.800 --> 02:50:39.120
+right, things like that, and so he's bootstrapping these super-efficient things to get to a very
+
+02:50:39.120 --> 02:50:45.680
+Rust-like systems programming language, but potentially cleaner.
+
+02:50:45.680 --> 02:50:51.640
+But it doesn't have, you know, people behind it like Rust, and you don't know if what he's
+
+02:50:51.640 --> 02:50:56.640
+saying is actually true, but if it is, you know, it might be like Zig and be something
+
+02:50:56.640 --> 02:50:58.640
+really interesting.
+
+02:50:58.640 --> 02:51:04.560
+Zig did cached compilations, so if you compiled something and then you changed a little bit
+
+02:51:04.560 --> 02:51:07.800
+and you compile it again, you're not going to compile very much.
+
+02:51:07.800 --> 02:51:11.680
+Right, so it'll be super-fast that way too.
+
+02:51:11.680 --> 02:51:20.000
+Yeah, I mean, memoization, that's caching if you can do it right, I'll save your ass
+
+02:51:20.000 --> 02:51:22.960
+every time, right, that's sort of.
+
+02:51:22.960 --> 02:51:27.240
+Then they have a self-hosted compiler, so I think that's one that will do the incremental
+
+02:51:27.240 --> 02:51:34.680
+compilations, so like that one will just be much faster and give you more debug stuff.
+
+02:51:34.680 --> 02:51:38.720
+But it is interesting, it's like, yeah, start with the REPL, right?
+
+02:51:38.720 --> 02:51:41.280
+Can you do a REPL in your language or not?
+
+02:51:41.280 --> 02:51:46.360
+Can you give me an interactive environment, even if everything has to be compiled?
+
+02:51:46.360 --> 02:51:50.280
+Like Julia, I guess, is going for some of this, right?
+
+02:51:50.280 --> 02:51:56.040
+They're taking some from LIST, they're taking all these efficient scientific libraries,
+
+02:51:56.040 --> 02:52:02.600
+and they're trying to meld them into a functional environment that gives you the most efficient
+
+02:52:02.600 --> 02:52:06.000
+code for any line that you write, right?
+
+02:52:06.000 --> 02:52:15.440
+Because it compiles it based on the dynamic types or something that it experiences, so
+
+02:52:15.440 --> 02:52:17.600
+it's very interesting.
+
+02:52:17.600 --> 02:52:19.920
+Have you seen the JANET Lisp language?
+
+02:52:19.920 --> 02:52:25.920
+It's kind of like V, where it's a very small language that has a web framework for it as
+
+02:52:25.920 --> 02:52:26.920
+well.
+
+02:52:26.920 --> 02:52:29.640
+No, I haven't seen that.
+
+02:52:29.640 --> 02:52:31.160
+I got a link on it right there.
+
+02:52:31.160 --> 02:52:34.840
+Yeah, I see it here, JANET Lisp, not too hard to find.
+
+02:52:34.840 --> 02:52:40.440
+I like their logo, 1950s JANET.
+
+02:52:40.440 --> 02:52:45.600
+Functional and imperative programming language runs on Windows, Linux, Mac OS, and Steam.
+
+02:52:45.600 --> 02:52:47.920
+Entire language is less than one megabyte.
+
+02:52:47.920 --> 02:52:58.000
+This sounds like REBOL, called Sasslerath, it did a lot of FORTH, and then he wrote REBOL,
+
+02:52:58.000 --> 02:53:02.560
+which has now evolved into REDLANG.
+
+02:53:02.560 --> 02:53:08.800
+It doesn't seem like a great language, but it's got that FORTH efficiency, and it's super
+
+02:53:08.800 --> 02:53:15.040
+small with its super small graphics, but it's not that easy to write, I think.
+
+02:53:15.040 --> 02:53:16.040
+This is cool.
+
+02:53:16.040 --> 02:53:17.660
+This sounds really interesting.
+
+02:53:17.660 --> 02:53:22.500
+So who's doing this, JANET?
+
+02:53:22.500 --> 02:53:27.360
+You know where it comes from?
+
+02:53:27.360 --> 02:53:28.360
+What source?
+
+02:53:28.360 --> 02:53:30.760
+They don't have about.
+
+02:53:30.760 --> 02:53:32.560
+Tell us about JANET.
+
+02:53:32.560 --> 02:53:37.240
+Oh, Calvin Rose and contributors.
+
+02:53:37.240 --> 02:53:41.920
+So again, we have one guy and contributor.
+
+02:53:41.920 --> 02:53:43.960
+That's well, you know, that's modern.
+
+02:53:43.960 --> 02:53:45.080
+That's how it is.
+
+02:53:45.080 --> 02:53:51.160
+You know, we talk about repeating the cycles of and how old problems are going to manifest
+
+02:53:51.160 --> 02:53:57.040
+with new technologies, maybe that's the problem that we're doing is that now everyone will
+
+02:53:57.040 --> 02:54:02.120
+have their own language and their own system and has become so satisfying and easy to do
+
+02:54:02.120 --> 02:54:08.240
+that that every single person will write their own programming language, their own architecture,
+
+02:54:08.240 --> 02:54:11.820
+and everyone will become it's like a it's like a monkey's paw or the genie granting
+
+02:54:11.820 --> 02:54:13.400
+you a curse.
+
+02:54:13.400 --> 02:54:18.120
+Everyone will become perfectly competent at this stuff, but not be able to communicate
+
+02:54:18.120 --> 02:54:20.920
+with each other because everyone's has their personal language.
+
+02:54:20.920 --> 02:54:23.960
+It's like the new Tower of Babel.
+
+02:54:23.960 --> 02:54:29.380
+You know, that's the claim that like my my guy in London makes about Lisp, that it's
+
+02:54:29.380 --> 02:54:35.040
+so efficient in making DSLs that nobody can communicate with each other.
+
+02:54:35.040 --> 02:54:43.720
+And I've heard that said about groups working in Lisp together, but I've never seen it.
+
+02:54:43.720 --> 02:54:52.560
+And it doesn't make a lot of sense to me because if you build your DSL for the domain, well,
+
+02:54:52.560 --> 02:54:58.920
+then it's like if people have any concept of the domain, it's going to be quite understandable.
+
+02:54:58.920 --> 02:55:04.720
+And because it's representative, you know, they're not going to struggle with it.
+
+02:55:04.720 --> 02:55:10.680
+It's only if you like, you know, make up terms that don't relate to anything and use that
+
+02:55:10.680 --> 02:55:11.680
+all over.
+
+02:55:11.680 --> 02:55:16.100
+Or if you take the scientists and they use their single character variable names, that's
+
+02:55:16.100 --> 02:55:21.440
+going to be a lot less understandable than something tailored for the domain that you're
+
+02:55:21.440 --> 02:55:22.440
+working in.
+
+02:55:22.440 --> 02:55:23.440
+Right?
+
+02:55:23.440 --> 02:55:24.440
+Good point.
+
+02:55:24.440 --> 02:55:25.440
+Yeah.
+
+02:55:25.440 --> 02:55:28.200
+I wonder how much of it has to do with going back and forth.
+
+02:55:28.200 --> 02:55:32.920
+You know, like if you can't spend all of your time or dedicate a long enough time, if you
+
+02:55:32.920 --> 02:55:38.760
+just go in and look at whatever this DSL is, switch back to idiomatic stuff.
+
+02:55:38.760 --> 02:55:44.520
+It's like, oh, you know, my brain is, you have to context switch all the time, maybe.
+
+02:55:44.520 --> 02:55:54.200
+One of the RACQ talk that was like the best talk for free software, and one of the observations
+
+02:55:54.200 --> 02:55:59.640
+they made was that most of everything was made by one person.
+
+02:55:59.640 --> 02:56:05.440
+And even if you look at a lot of the projects that have more than two people, you have one
+
+02:56:05.440 --> 02:56:07.960
+person and then a maintainer takes over.
+
+02:56:07.960 --> 02:56:10.760
+So it's still really one person working on it.
+
+02:56:10.760 --> 02:56:19.520
+It's like, that's going to be like 95% of everything out there, and everybody chooses
+
+02:56:19.520 --> 02:56:22.760
+a language that's not for that purpose.
+
+02:56:22.760 --> 02:56:25.460
+This was kind of the law of what they were.
+
+02:56:25.460 --> 02:56:28.700
+So if you're going to be doing that, you want to, if you're going to be working on a project
+
+02:56:28.700 --> 02:56:33.640
+over a long period of time, you want a language that has more features that you can master
+
+02:56:33.640 --> 02:56:39.200
+over a long period of time rather than how fast you can write hello world that can keep
+
+02:56:39.200 --> 02:56:44.760
+you interested in over a long period of, like Emacs for instance, Emacs can keep you interested
+
+02:56:44.760 --> 02:56:50.280
+in it for decades.
+
+02:56:50.280 --> 02:56:53.000
+And I think it's a cognitive mismatch.
+
+02:56:53.000 --> 02:56:54.000
+Go ahead.
+
+02:56:54.000 --> 02:57:02.440
+It's good to know that when given the freedom, like in software being such a new technology,
+
+02:57:02.440 --> 02:57:13.400
+to do whatever you want that humans will still recreate the Tower of Babel every single time.
+
+02:57:13.400 --> 02:57:20.840
+We'll never be able to agree on what's a good or right looking language.
+
+02:57:20.840 --> 02:57:25.280
+But I think the reality is that there are better ones.
+
+02:57:25.280 --> 02:57:35.320
+I think languages, written languages without accent marks are fundamentally better than
+
+02:57:35.320 --> 02:57:38.120
+those with accent marks.
+
+02:57:38.120 --> 02:57:44.200
+And so if you're stuck on one with there, you're probably going to get left behind even
+
+02:57:44.200 --> 02:57:47.120
+though you can produce the same meanings.
+
+02:57:47.120 --> 02:57:58.480
+And I think languages without Lisp type macros are never going to be able to solve the problems
+
+02:57:58.480 --> 02:58:07.640
+even though they're computationally equivalent that Lisp people attack because they just
+
+02:58:07.640 --> 02:58:10.840
+can't wrap the complexity in their mind enough.
+
+02:58:10.840 --> 02:58:19.680
+You'd have to have somebody who's 100 times better with a weaker language to do what the
+
+02:58:19.680 --> 02:58:29.600
+essentially average Lisp guy leveraging the macro capability could do.
+
+02:58:29.600 --> 02:58:36.840
+Like in hyperbole, one of the things that we solve that you can't do, I think very well
+
+02:58:36.840 --> 02:58:38.880
+in other languages.
+
+02:58:38.880 --> 02:58:47.880
+So we have our implicit button definitions look like regular defunds, but they have two
+
+02:58:47.880 --> 02:58:50.080
+parts in them.
+
+02:58:50.080 --> 02:58:54.640
+One which is the pattern match, am I in the right context?
+
+02:58:54.640 --> 02:58:59.600
+And then the one that calls the action.
+
+02:58:59.600 --> 02:59:07.400
+But you need, so to make it look the same, like there's only one path that you're running
+
+02:59:07.400 --> 02:59:13.480
+through this code, even though you have to do the pattern matching when you're called
+
+02:59:13.480 --> 02:59:18.040
+one time and you have to do the action invocation when you called another.
+
+02:59:18.040 --> 02:59:29.440
+There's a macro that we created called the hacked, H-A-C-T, and the macro actually takes
+
+02:59:29.440 --> 02:59:40.240
+a, there's a function that it uses that's implicit, that is set to different values
+
+02:59:40.240 --> 02:59:43.840
+at different states in the program.
+
+02:59:43.840 --> 02:59:50.800
+So when you're just looking for the pattern matching, that's all it does.
+
+02:59:50.800 --> 02:59:53.360
+And it sort of drops through the other behavior.
+
+02:59:53.360 --> 03:00:01.600
+And then when it comes back around and you're not doing pattern matching anymore, it executes
+
+03:00:01.600 --> 03:00:02.800
+the action.
+
+03:00:02.800 --> 03:00:09.320
+But looking at the code, you only see that one defund straight kind of path through it.
+
+03:00:09.320 --> 03:00:14.680
+So the engine handles all that, and I don't think you could write anything quite like
+
+03:00:14.680 --> 03:00:19.280
+that without the macro.
+
+03:00:19.280 --> 03:00:26.560
+It's magical, it's probably the closest thing to magic that we have, I guess.
+
+03:00:26.560 --> 03:00:35.360
+Well, you guys have filled up my brain, so I'm going to get some sleep, too.
+
+03:00:35.360 --> 03:00:36.360
+You deserve it.
+
+03:00:36.360 --> 03:00:42.720
+I'm a day ahead of you in that respect, so I'm amazed you've made it this long, to be
+
+03:00:42.720 --> 03:00:43.720
+honest.
+
+03:00:43.720 --> 03:00:51.040
+I don't know if I, did I, was there any, like, is there anything that you guys had, that
+
+03:00:51.040 --> 03:00:53.840
+I had neglected or anything that I should focus on?
+
+03:00:53.840 --> 03:00:57.320
+Well, I don't know, but I'm going to sign off.
+
+03:00:57.320 --> 03:01:04.500
+It's been a real pleasure talking to you guys, and John, I'll get in touch about, you know,
+
+03:01:04.500 --> 03:01:10.200
+give you a chance to take a look at Hyperbole a little bit, and then we could talk about,
+
+03:01:10.200 --> 03:01:15.160
+you know, how you could feedback some stuff, or if you want to interact with, meet some
+
+03:01:15.160 --> 03:01:19.040
+of the other guys in the team sometime, and just talk.
+
+03:01:19.040 --> 03:01:24.160
+Yeah, any of that, yeah, and you've got, I think, I mean, I'll email you if I, or you
+
+03:01:24.160 --> 03:01:26.360
+email me, email me either way.
+
+03:01:26.360 --> 03:01:33.280
+Okay, and on PlasmaStrike, if you're interested, it's open, too, I mean, we need smart people
+
+03:01:33.280 --> 03:01:42.080
+like yourself with lots of ideas and understanding of where things come from to just help out
+
+03:01:42.080 --> 03:01:43.080
+on that.
+
+03:01:43.080 --> 03:01:48.600
+If you have any cycles and you want to get involved, let me know.
+
+03:01:48.600 --> 03:01:56.840
+My email address is all over the Hyperbole code, so easy to find, just rsw.cadu.org will
+
+03:01:56.840 --> 03:01:57.840
+work as well.
+
+03:01:57.840 --> 03:02:03.640
+Yeah, if, yeah, and either of you guys feel free to, if you have any interesting ideas
+
+03:02:03.640 --> 03:02:10.840
+or anything, reach out and email me, I'm on the, I'm on the chatroom, thanks so much,
+
+03:02:10.840 --> 03:02:16.280
+I can't wait till they get this session, and they're like, wait, it's 180,000, it's the
+
+03:02:16.280 --> 03:02:27.600
+easiest thing I've got out of control, I guess, but, you know, they'll want to keep this because
+
+03:02:27.600 --> 03:02:31.800
+it's a great wide-ranging conversation, posterity.
+
+03:02:31.800 --> 03:02:36.520
+I have a feeling they won't run all of it through voice recognition.
+
+03:02:36.520 --> 03:02:39.280
+It definitely belongs with a 10-minute talk.
+
+03:02:39.280 --> 03:02:47.160
+Well, I'll tell you this, and I, not to prolong things, but this is, this is very representative
+
+03:02:47.160 --> 03:02:51.680
+of the amount of time that I, the proportional amount of effort and time that I spent preparing
+
+03:02:51.680 --> 03:02:57.000
+for this 10-minute talk, because for, I'll tell you something that, first, is when you
+
+03:02:57.000 --> 03:03:00.640
+realize that you have a 10-minute talk and you say, how am I going to get 10 minutes?
+
+03:03:00.640 --> 03:03:05.600
+Then you start preparing, and you start, and somehow you wind up with 100 minutes, and
+
+03:03:05.600 --> 03:03:11.640
+then it takes you 10 times as long to cut out, to choose which 90 minutes to cut out.
+
+03:03:11.640 --> 03:03:16.360
+So this is appropriate, it's appropriate for me, this is like my bookend, that I can talk
+
+03:03:16.360 --> 03:03:21.400
+for three hours about that, or at least starting with that time.
+
+03:03:21.400 --> 03:03:26.440
+You should give a talk about that, sort of like how Michelangelo went from the piece
+
+03:03:26.440 --> 03:03:32.000
+of marble to the David, and it's like, you know, I had this infinite amount of material
+
+03:03:32.000 --> 03:03:37.080
+coalescing it to 10 minutes is a 100-hour effort, because it's really true.
+
+03:03:37.080 --> 03:03:41.240
+I like it, because that's, that's a lot of what these tools do, is they allow you to
+
+03:03:41.240 --> 03:03:43.160
+capture your stuff.
+
+03:03:43.160 --> 03:03:47.200
+They allow you to organize it, and they allow you to formalize it, and that organizing part
+
+03:03:47.200 --> 03:03:52.840
+is what, is what gave me, well, isn't, isn't that what they say, that a professional programmer
+
+03:03:52.840 --> 03:03:59.880
+is somebody who will spend an hour automate, spend 100 hours automating something that
+
+03:03:59.880 --> 03:04:02.920
+only takes an hour, one time.
+
+03:04:02.920 --> 03:04:07.280
+I think that's what, I think maybe some professional programmers may say that.
+
+03:04:07.280 --> 03:04:11.160
+I don't know if their bosses would agree.
+
+03:04:11.160 --> 03:04:13.480
+There's some truth to it though, right?
+
+03:04:13.480 --> 03:04:18.520
+So have a great night guys, appreciate it.
+
+03:04:18.520 --> 03:04:22.120
+And yeah, and PlasmaStrike, I don't know if you, if you do end up posting anything of
+
+03:04:22.120 --> 03:04:27.700
+your, of your setup or anything, if you feel like it, just hit me up if you're interested
+
+03:04:27.700 --> 03:04:31.600
+in any of my shit, looking at it, because if you do, I'd, I'd be interested.
+
+03:04:31.600 --> 03:04:32.600
+That's all.
+
+03:04:32.600 --> 03:04:33.600
+No pressure.
+
+03:04:33.600 --> 03:04:34.600
+Yep.
+
+03:04:34.600 --> 03:04:35.600
+All right.
+
+03:04:35.600 --> 03:04:36.600
+Take it easy.
+
+03:04:36.600 --> 03:04:37.600
+Great, great meeting you.
+
+03:04:37.600 --> 03:04:38.600
+Great talking to you.
+
+03:04:38.600 --> 03:04:39.600
+Yep.
+
+03:04:39.600 --> 03:04:40.600
+You too.
+
+03:04:40.600 --> 03:04:41.600
+See ya.
+
+03:04:41.600 --> 03:04:42.600
+See ya.
+
+03:04:42.600 --> 03:04:58.280
+You're currently the only person in...
+
+03:04:58.280 --> 03:05:00.340
+you
+
+03:05:28.280 --> 03:05:30.340
+you
+
+03:05:58.280 --> 03:06:00.340
+you
+
diff --git a/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt b/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt
new file mode 100644
index 00000000..c50aa2bd
--- /dev/null
+++ b/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt
@@ -0,0 +1,787 @@
+WEBVTT captioned by John Cummings
+
+00:00:00.000 --> 00:00:02.203
+Hello, my name is John Cummings, and I'm here today
+
+00:00:02.206 --> 00:00:04.849
+to play a Fanfare for the Common Emacs User.
+
+00:00:04.852 --> 00:00:07.263
+By "common", I mean the types of Emacs usage
+
+00:00:07.266 --> 00:00:09.685
+and comfort that are simpler, more mundane,
+
+00:00:09.689 --> 00:00:11.074
+and yes, even imperfect,
+
+00:00:11.075 --> 00:00:13.035
+that some may identify with more than others,
+
+00:00:13.037 --> 00:00:14.648
+or more at certain times.
+
+00:00:14.651 --> 00:00:16.911
+It's hard to use Emacs and not be aware of
+
+00:00:16.914 --> 00:00:18.700
+the impressive and interesting accomplishments
+
+00:00:18.703 --> 00:00:20.754
+of its community. And here at emacsconf
+
+00:00:20.756 --> 00:00:22.424
+we also get pumped up about those things,
+
+00:00:22.426 --> 00:00:25.563
+amplified by the energy of the other attendees.
+
+00:00:25.567 --> 00:00:27.727
+But this energy fades as we return focus
+
+00:00:27.730 --> 00:00:30.567
+to our day-to-day work. And in these circumstances,
+
+00:00:30.571 --> 00:00:32.990
+we may unfairly judge our own Emacs usage
+
+00:00:32.993 --> 00:00:34.995
+against the community highlights.
+
+00:00:34.997 --> 00:00:37.708
+So I want to identify and celebrate the ways
+
+00:00:37.712 --> 00:00:39.930
+that we common Emacs users use it,
+
+00:00:39.932 --> 00:00:42.285
+the reasons why it's a good fit for those ways,
+
+00:00:42.290 --> 00:00:45.427
+and some ways we could take advantage of that.
+
+00:00:45.430 --> 00:00:48.524
+What is Emacs to us common users? Well, we're consumers.
+
+00:00:48.528 --> 00:00:51.489
+We use whatever was available - whatever our OS gave us,
+
+00:00:51.493 --> 00:00:53.987
+or whatever we found when we searched the web.
+
+00:00:53.990 --> 00:00:55.709
+We're not even necessarily aware
+
+00:00:55.711 --> 00:00:58.088
+of what the latest version is, or what changes it has.
+
+00:00:58.091 --> 00:01:00.135
+We may not ever think about upgrading.
+
+00:01:00.138 --> 00:01:02.740
+We have what we have, and we use what we have.
+
+00:01:02.742 --> 00:01:05.145
+But I think, with this simple act, many of us
+
+00:01:05.149 --> 00:01:07.993
+achieve a very significant Emacs milestone:
+
+00:01:07.997 --> 00:01:10.275
+we've committed to having it in our toolkit
+
+00:01:10.278 --> 00:01:12.622
+and our skillset. We'll probably install it
+
+00:01:12.625 --> 00:01:14.802
+on every system that we can, eventually.
+
+00:01:14.804 --> 00:01:16.827
+We know it has a use for us today,
+
+00:01:16.827 --> 00:01:18.120
+and that it will solve some problems
+
+00:01:18.120 --> 00:01:19.588
+that we don't even know about yet.
+
+00:01:19.588 --> 00:01:22.215
+It will not just be one tool; it will be many.
+
+00:01:22.215 --> 00:01:24.368
+And we know that it will be more than just useful;
+
+00:01:24.368 --> 00:01:27.345
+it will also be challenging, puzzling, and frustrating.
+
+00:01:27.345 --> 00:01:28.630
+But we still keep it
+
+00:01:28.630 --> 00:01:29.873
+as a permanent part of our toolkit,
+
+00:01:29.873 --> 00:01:31.800
+and we should be proud of that.
+
+00:01:31.800 --> 00:01:34.136
+And regardless of what exactly we've installed,
+
+00:01:34.136 --> 00:01:35.337
+it was a good choice.
+
+00:01:35.337 --> 00:01:37.556
+It will almost certainly do what we need it to do.
+
+00:01:37.556 --> 00:01:39.766
+Old versions are not inert dead-ends;
+
+00:01:39.766 --> 00:01:41.134
+they're still functional tools.
+
+00:01:41.134 --> 00:01:43.979
+And that's a key aspect of Emacs - it's a tool
+
+00:01:43.979 --> 00:01:46.398
+to get our work done. That sounds obvious,
+
+00:01:46.398 --> 00:01:48.483
+but it's easy to get distracted by the great things
+
+00:01:48.483 --> 00:01:49.985
+that it can accomplish, and think
+
+00:01:49.985 --> 00:01:52.571
+that it requires the same accomplishments from us.
+
+00:01:52.571 --> 00:01:54.656
+But it requires no advanced state of mind,
+
+00:01:54.656 --> 00:01:56.867
+no level of expertise to start using it,
+
+00:01:56.867 --> 00:01:58.043
+or use it correctly.
+
+00:01:58.043 --> 00:02:00.754
+It just requires that we have it, and use it.
+
+00:02:00.754 --> 00:02:03.665
+And with a little effort, we can get results early on,
+
+00:02:03.665 --> 00:02:06.084
+and those results are not just preparations
+
+00:02:06.084 --> 00:02:07.586
+for better things to come later;
+
+00:02:07.586 --> 00:02:08.712
+they have value for us today,
+
+00:02:08.712 --> 00:02:12.049
+and we're already using it right.
+
+00:02:12.049 --> 00:02:14.551
+And when we do need to tweak whatever we installed,
+
+00:02:14.551 --> 00:02:16.803
+we might again be consumers, finding some snippets
+
+00:02:16.803 --> 00:02:19.581
+out on the web, pasting them in, and moving on.
+
+00:02:19.581 --> 00:02:21.933
+We don't necessarily understand what we did,
+
+00:02:21.933 --> 00:02:24.102
+but we got some value out of it. Over time,
+
+00:02:24.102 --> 00:02:26.114
+we may participate more, take it day by day,
+
+00:02:26.114 --> 00:02:28.357
+and one day we may find that our config
+
+00:02:28.357 --> 00:02:30.902
+has become a disorganized pile.
+
+00:02:30.902 --> 00:02:32.027
+Maybe it's mixed haphazardly
+
+00:02:32.027 --> 00:02:34.029
+with some output from the "customize" feature,
+
+00:02:34.029 --> 00:02:35.697
+and eventually we start to feel
+
+00:02:35.697 --> 00:02:37.991
+like it's a shameful mess. It's hard to manage;
+
+00:02:37.991 --> 00:02:40.960
+we may think of it as append-only or read-only.
+
+00:02:40.960 --> 00:02:42.829
+We can't deny there are problems here,
+
+00:02:42.829 --> 00:02:45.582
+but it happened for a good reason. It was quick,
+
+00:02:45.582 --> 00:02:47.250
+easy, and effective for us
+
+00:02:47.250 --> 00:02:50.062
+to enhance our experience this way, and then move on.
+
+00:02:50.062 --> 00:02:52.172
+We were using Emacs as it was designed here.
+
+00:02:52.172 --> 00:02:54.775
+It just wasn't sustainable indefinitely.
+
+00:02:54.775 --> 00:02:56.627
+We may continue doing things this way
+
+00:02:56.627 --> 00:02:59.596
+even though we realize it's not a good idea.
+
+00:02:59.596 --> 00:03:00.472
+But I think there are some ways
+
+00:03:00.472 --> 00:03:01.682
+to mitigate the downsides,
+
+00:03:01.682 --> 00:03:03.150
+that let us embrace our tendencies,
+
+00:03:03.150 --> 00:03:05.444
+and continue to benefit from them.
+
+00:03:05.444 --> 00:03:06.971
+If we allow and encourage ourselves
+
+00:03:06.971 --> 00:03:10.065
+to capture our thoughts and circumstances
+
+00:03:10.065 --> 00:03:11.700
+along with the work that we do on our config,
+
+00:03:11.700 --> 00:03:14.386
+and do so without judgment, or the responsibility
+
+00:03:14.386 --> 00:03:17.047
+to "do it right", we give ourselves the context
+
+00:03:17.047 --> 00:03:19.549
+to understand and manage it later.
+
+00:03:19.549 --> 00:03:21.618
+This should be done however works for us,
+
+00:03:21.618 --> 00:03:23.286
+whether it's rambling inline comments,
+
+00:03:23.286 --> 00:03:25.247
+keeping a separate journal or notes,
+
+00:03:25.247 --> 00:03:27.975
+or even a more advanced literate programming technique,
+
+00:03:27.975 --> 00:03:30.485
+if we want to make an investment like that.
+
+00:03:30.485 --> 00:03:32.629
+Or putting our config into source control,
+
+00:03:32.629 --> 00:03:34.214
+even if it's nothing more than a simple,
+
+00:03:34.214 --> 00:03:37.050
+daily record of changes along with our contextual notes,
+
+00:03:37.050 --> 00:03:41.221
+will make things a lot easier for our future selves.
+
+00:03:41.221 --> 00:03:43.974
+But regardless of how well, or sloppy, we manage it,
+
+00:03:43.974 --> 00:03:46.184
+we should also realize that our messy config
+
+00:03:46.184 --> 00:03:48.129
+is a personal artifact with inherent value,
+
+00:03:48.129 --> 00:03:51.565
+even if it's amusement value, or sentimental value.
+
+00:03:51.565 --> 00:03:54.401
+Emacs is not only a tool to get our work done,
+
+00:03:54.401 --> 00:03:56.978
+it can also be a very personalized experience.
+
+00:03:56.978 --> 00:03:59.366
+And if so, then our Emacs config
+
+00:03:59.366 --> 00:04:02.110
+is our experience in written form.
+
+00:04:02.110 --> 00:04:04.303
+You can see it as a log of your journey through Emacs,
+
+00:04:04.303 --> 00:04:06.663
+and the mark that you made on it along the way,
+
+00:04:06.663 --> 00:04:08.506
+mistakes and all.
+
+00:04:08.506 --> 00:04:10.676
+We may see our config as a record of failure,
+
+00:04:10.676 --> 00:04:12.886
+of things that we did wrong, the things that we repeated,
+
+00:04:12.886 --> 00:04:15.672
+or never finished. But it's important to realize
+
+00:04:15.672 --> 00:04:18.592
+that a record of failure is a record of persistence.
+
+00:04:18.592 --> 00:04:20.761
+In that sense, it's kind of like our genome:
+
+00:04:20.761 --> 00:04:23.197
+a set of unique, disorganized,
+
+00:04:23.197 --> 00:04:26.308
+somewhat accidental properties, that, on the whole,
+
+00:04:26.308 --> 00:04:29.394
+makes us fit to survive in our Emacs usage.
+
+00:04:29.394 --> 00:04:31.021
+It's also interesting to think of it
+
+00:04:31.021 --> 00:04:33.482
+as an archaeological record. Where we can sometimes
+
+00:04:33.482 --> 00:04:35.942
+get some insight into our "ancient times".
+
+00:04:35.942 --> 00:04:38.570
+Just being able to see what we were doing years ago
+
+00:04:38.570 --> 00:04:40.906
+is interesting -- to see how things changed,
+
+00:04:40.906 --> 00:04:43.158
+and hopefully grew over time. And sometimes
+
+00:04:43.158 --> 00:04:45.845
+we find some buried treasures that we forgot were there.
+
+00:04:45.845 --> 00:04:48.172
+And of course it's interesting to realize
+
+00:04:48.172 --> 00:04:50.874
+that when we start Emacs, this pile of config
+
+00:04:50.874 --> 00:04:52.959
+also executes in roughly the same order
+
+00:04:52.959 --> 00:04:56.438
+that we created it in. Our journey through Emacs
+
+00:04:56.438 --> 00:04:59.482
+happens again and again every time we start it up.
+
+00:04:59.482 --> 00:05:04.095
+And it's ready for us to keep working on it.
+
+00:05:04.095 --> 00:05:05.305
+And when it comes to packages,
+
+00:05:05.305 --> 00:05:09.050
+we may not make extensive use of them, if any at all.
+
+00:05:09.050 --> 00:05:10.602
+We probably have different reasons for this.
+
+00:05:10.602 --> 00:05:12.437
+We may feel like we need to reach
+
+00:05:12.437 --> 00:05:14.815
+some level of mastery before we start using them.
+
+00:05:14.815 --> 00:05:17.943
+We may not have the mental room to think about packages,
+
+00:05:17.943 --> 00:05:20.362
+or may not want to take on the administrative burden
+
+00:05:20.362 --> 00:05:22.989
+required to keep track of which packages we have,
+
+00:05:22.989 --> 00:05:25.834
+the dependencies and versions, and their compatibility.
+
+00:05:25.834 --> 00:05:27.694
+Some of us may just be uncomfortable
+
+00:05:27.694 --> 00:05:30.664
+letting new third-party code run in our environments.
+
+00:05:30.664 --> 00:05:31.832
+It could also just be the case
+
+00:05:31.832 --> 00:05:35.377
+that our needs haven't driven us to need a package yet.
+
+00:05:35.377 --> 00:05:36.871
+We're already doing what we need,
+
+00:05:36.871 --> 00:05:39.089
+and doing it efficiently enough.
+
+00:05:39.089 --> 00:05:40.215
+And here we find more alignment
+
+00:05:40.215 --> 00:05:42.592
+between Emacs the tool, and our common mindset:
+
+00:05:42.592 --> 00:05:44.977
+They work well when they stay needs-driven.
+
+00:05:44.977 --> 00:05:46.646
+We're not obligated to use
+
+00:05:46.646 --> 00:05:48.949
+as much of Emacs' functionality as we can,
+
+00:05:48.949 --> 00:05:51.159
+or every package that we're aware of
+
+00:05:51.159 --> 00:05:52.510
+if we don't have a need to.
+
+00:05:52.510 --> 00:05:54.971
+And in fact, that's a great way to stay overwhelmed.
+
+00:05:54.971 --> 00:05:57.700
+But if we stay aware of our needs, and then find
+
+00:05:57.700 --> 00:05:59.902
+that there is a package that might address them,
+
+00:05:59.902 --> 00:06:02.655
+then we can deal with it. And a need to explore,
+
+00:06:02.655 --> 00:06:05.823
+and a need to be curious, is a valid need.
+
+00:06:05.823 --> 00:06:09.327
+And if we do need extra confidence for that exploration,
+
+00:06:09.327 --> 00:06:10.912
+then the things we talked about before,
+
+00:06:10.912 --> 00:06:13.633
+like keeping good notes of our experiences and needs,
+
+00:06:13.633 --> 00:06:15.541
+or version controlling our config,
+
+00:06:15.541 --> 00:06:18.586
+will help us keep that connection to our needs,
+
+00:06:18.586 --> 00:06:20.922
+that gives us the freedom to experiment
+
+00:06:20.922 --> 00:06:23.008
+in the wide world of packages.
+
+00:06:23.008 --> 00:06:27.262
+And if we really do just need what's built in to Emacs,
+
+00:06:27.262 --> 00:06:29.514
+the vanilla out-of-the-box experience,
+
+00:06:29.514 --> 00:06:32.183
+then we can also be proud that we're making use
+
+00:06:32.183 --> 00:06:33.560
+of all the work that went into that experience,
+
+00:06:33.560 --> 00:06:35.021
+because a lot did.
+
+00:06:35.021 --> 00:06:37.256
+And when we report any problems that we find,
+
+00:06:37.256 --> 00:06:39.190
+we're also working to keep that experience
+
+00:06:39.190 --> 00:06:41.192
+smooth for future users.
+
+00:06:41.192 --> 00:06:43.987
+Of course, some of us may find this intimidating,
+
+00:06:43.987 --> 00:06:46.531
+and if so, feel free to reach out to me,
+
+00:06:46.531 --> 00:06:48.767
+and probably anyone in the community,
+
+00:06:48.767 --> 00:06:56.249
+that can help you navigate that process.
+
+00:06:56.249 --> 00:06:59.461
+So how do we use our Emacs installation?
+
+00:06:59.461 --> 00:07:01.838
+We often use it very simply: we get simple results
+
+00:07:01.838 --> 00:07:06.068
+in simple ways. Often we do things the same simple way
+
+00:07:06.068 --> 00:07:08.720
+for a very long time, and this is of course great,
+
+00:07:08.720 --> 00:07:10.513
+since we're getting done what we need to get done.
+
+00:07:10.513 --> 00:07:14.392
+There's no result or method too simple for Emacs.
+
+00:07:14.392 --> 00:07:16.853
+And we're not oblivious to the alternative.
+
+00:07:16.853 --> 00:07:19.356
+Many of us are at least aware that there are ways
+
+00:07:19.356 --> 00:07:20.649
+we could iterate on what we do,
+
+00:07:20.649 --> 00:07:22.734
+or some polish that we could apply,
+
+00:07:22.734 --> 00:07:24.569
+and we may even quite enjoy
+
+00:07:24.569 --> 00:07:27.113
+reading about more advanced Emacs possibilities,
+
+00:07:27.113 --> 00:07:28.215
+and thinking about how they could apply
+
+00:07:28.215 --> 00:07:30.951
+to our own workflow, but at the end of the day,
+
+00:07:30.951 --> 00:07:33.703
+we still keep our own usage the same, and basic.
+
+00:07:33.703 --> 00:07:36.998
+And this is another fundamental aspect of using Emacs.
+
+00:07:36.998 --> 00:07:38.959
+You can work simply and successfully,
+
+00:07:38.959 --> 00:07:40.502
+but you'll always be conscious of the possibility
+
+00:07:40.502 --> 00:07:43.213
+for far more complexity. And many of us
+
+00:07:43.213 --> 00:07:46.424
+do try to iterate on our ways, and sometimes succeed,
+
+00:07:46.424 --> 00:07:49.177
+but often we run into trouble and we stop or defer.
+
+00:07:49.177 --> 00:07:51.304
+A lot of times we're intimidated by the scope of things -
+
+00:07:51.304 --> 00:07:53.848
+we're not sure how to make measurable progress.
+
+00:07:53.848 --> 00:07:56.101
+We may find that the first ways we learned
+
+00:07:56.101 --> 00:07:59.312
+are so ingrained in us, that learning even a second way
+
+00:07:59.312 --> 00:08:01.147
+is many times harder.
+
+00:08:01.147 --> 00:08:03.191
+And sometimes we do make sudden progress
+
+00:08:03.191 --> 00:08:04.275
+after years of sameness,
+
+00:08:04.275 --> 00:08:06.260
+and wonder why we waited so long.
+
+00:08:06.260 --> 00:08:07.737
+And these are universal pains
+
+00:08:07.737 --> 00:08:11.324
+that everyone has to feel who wants to improve.
+
+00:08:11.324 --> 00:08:13.451
+But this is again where we can benefit
+
+00:08:13.451 --> 00:08:14.661
+from letting our needs drive us.
+
+00:08:14.661 --> 00:08:16.538
+Sometimes they'll tell us that it's OK
+
+00:08:16.538 --> 00:08:18.806
+keeping things the way they are, and sometimes
+
+00:08:18.806 --> 00:08:20.491
+they'll tell us that it's good to keep pushing,
+
+00:08:20.491 --> 00:08:21.767
+because there's a reason for it,
+
+00:08:21.767 --> 00:08:25.077
+and we'll be glad that we did.
+
+00:08:25.077 --> 00:08:27.507
+And what are the ways that we do learn,
+
+00:08:27.507 --> 00:08:30.635
+and grow, and create within Emacs? One constant
+
+00:08:30.635 --> 00:08:33.596
+is that we forget a lot. We learn something
+
+00:08:33.596 --> 00:08:35.682
+and then remember that we already learned
+
+00:08:35.682 --> 00:08:38.309
+and forgot it once before. Sometimes we just hope
+
+00:08:38.309 --> 00:08:39.769
+to learn more than we forget.
+
+00:08:39.769 --> 00:08:41.772
+And staying driven by our needs can also help here,
+
+00:08:41.772 --> 00:08:43.499
+because it's easier to learn something
+
+00:08:43.499 --> 00:08:46.317
+when we have a reason to, and an application for it.
+
+00:08:46.317 --> 00:08:49.071
+In Emacs, it can be tempting to do this backwards,
+
+00:08:49.071 --> 00:08:51.782
+and want to learn all there is about Emacs first,
+
+00:08:51.782 --> 00:08:53.992
+and then apply it. But again that's a surefire way
+
+00:08:53.992 --> 00:08:55.935
+to stay overwhelmed.
+
+00:08:55.935 --> 00:08:59.640
+And when we code and build things, we tend to create many small, quick things,
+
+00:08:59.640 --> 00:09:01.600
+but never really integrate them deeply
+
+00:09:01.600 --> 00:09:03.661
+into our environment or workflow.
+
+00:09:03.661 --> 00:09:05.462
+We leave things half-finished once we get bored,
+
+00:09:05.462 --> 00:09:07.088
+or find ourselves in over our head.
+
+00:09:07.088 --> 00:09:09.883
+And this is natural, because we're curious and creative,
+
+00:09:09.883 --> 00:09:12.677
+and Emacs makes it relatively easy, and actually fun,
+
+00:09:12.677 --> 00:09:14.845
+to experiment and get these quick results.
+
+00:09:14.845 --> 00:09:17.065
+But it's less clear how to see them through,
+
+00:09:17.065 --> 00:09:20.310
+and inherently less fun to do the follow-up gruntwork.
+
+00:09:20.310 --> 00:09:21.970
+But if we embrace our ways here,
+
+00:09:21.970 --> 00:09:23.897
+and structure our workflow to support them,
+
+00:09:23.897 --> 00:09:26.215
+we might find ourselves more satisfied.
+
+00:09:26.215 --> 00:09:28.926
+So let's give ourselves permission, and a logical place
+
+00:09:28.926 --> 00:09:31.571
+to put all our fun little quick experiments,
+
+00:09:31.571 --> 00:09:33.423
+without having to worry about integrating
+
+00:09:33.423 --> 00:09:35.700
+or polishing them, unless we find a need to later.
+
+00:09:35.700 --> 00:09:38.505
+Let's use source control wisely to give ourselves
+
+00:09:38.505 --> 00:09:41.447
+a place to experiment, and a place for stability.
+
+00:09:41.447 --> 00:09:42.968
+Let's stay needs-driven so that we know
+
+00:09:42.968 --> 00:09:46.186
+what we really do need to follow up on,
+
+00:09:46.186 --> 00:09:48.963
+and what's OK to drop. And let's remember
+
+00:09:48.963 --> 00:09:50.965
+that there is someone who will always appreciate
+
+00:09:50.965 --> 00:09:53.635
+any notes about our thought process we can take,
+
+00:09:53.635 --> 00:09:55.845
+no matter how rough or rambling they are:
+
+00:09:55.845 --> 00:09:58.788
+our future selves.
+
+00:09:58.788 --> 00:10:01.376
+And so I hope that some people can identify with
+
+00:10:01.376 --> 00:10:02.927
+at least some of what I've shared today.
+
+00:10:02.927 --> 00:10:05.021
+And I hope that we realize that,
+
+00:10:05.021 --> 00:10:06.964
+no matter how we see ourselves as Emacs users,
+
+00:10:06.964 --> 00:10:09.233
+and no matter what we see other people building,
+
+00:10:09.233 --> 00:10:11.569
+we're proud of the fact that we have built
+
+00:10:11.569 --> 00:10:15.865
+an experience that fits us. Thank you to everyone.
diff --git a/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.vtt b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.vtt
new file mode 100644
index 00000000..7157036e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.vtt
@@ -0,0 +1,791 @@
+WEBVTT
+
+00:00.000 --> 00:02.060
+you
+
+01:00.000 --> 01:02.000
+You
+
+01:09.080 --> 01:13.280
+Wait, so there's a little something though. How are we gonna get the audio?
+
+01:16.240 --> 01:18.240
+Give me just a second
+
+01:18.240 --> 01:30.520
+Ah, so can we just get a confirmation? Can you start playing the talk now Samir, please?
+
+01:43.280 --> 01:47.080
+So for everyone on the stream bear with us just a little bit we're trying to get it working right now
+
+01:47.080 --> 01:49.180
+I'm not getting any audio from you Samir
+
+01:53.880 --> 01:59.600
+Samir you might want to unmute yourself onto BBB. So if you could pause the video go to BBB and unmute yourself
+
+02:09.320 --> 02:14.080
+Okay, Samir, can you hear me now? Yeah, okay, so
+
+02:14.080 --> 02:17.640
+Oh, let me start. Where is it? Okay. There we go
+
+02:23.320 --> 02:29.400
+That sounds great, okay, we'll give you just a second to get squared away here and thanks everybody on the stream for bearing with us
+
+02:30.780 --> 02:34.600
+Okay, sure Samir. Can you now start playing your talk? Yeah
+
+02:34.600 --> 02:42.440
+I'm Samir Pradhan from the Linguistic Data Consortium at the University of Pennsylvania. Can you pause the talk for a second?
+
+02:44.760 --> 02:46.760
+What happened?
+
+02:48.760 --> 02:52.600
+Oh, you don't have audio. The thing was no audio is
+
+02:54.760 --> 02:56.760
+Oh
+
+02:56.760 --> 03:02.760
+Okay, Samir, sorry, we were just doing some last-minute checks. So yes do exactly the same thing as you did will be fine and we'll manage on our end
+
+03:05.760 --> 03:08.760
+Sorry everyone on the stream. We're just trying to do some last-minute shuffling
+
+03:10.760 --> 03:14.760
+And you are muted on BBB right now, so you will probably need to pause the talk for a second
+
+03:14.760 --> 03:24.760
+And you are muted on BBB right now, so you will probably need to unmute yourself on BBB and then start the talk
+
+03:30.760 --> 03:35.760
+So Samir, right now, sorry, could you, no, it's not working. You need to unmute yourself on BBB
+
+03:35.760 --> 03:37.760
+So right now you need to click the button, the microphone
+
+03:37.760 --> 03:42.760
+Yes, you toggled it off again. Toggle it on again, please
+
+03:46.760 --> 03:48.760
+What am I doing wrong?
+
+03:49.760 --> 03:55.760
+So do not unmute yourself now. Leave your microphone on and press, go back to the beginning of your video and press play
+
+03:55.760 --> 03:57.760
+Yes, from various signals
+
+03:58.760 --> 04:01.760
+The work we present is limited to a limited number of people
+
+04:01.760 --> 04:06.760
+So do not unmute yourself now. Leave your microphone on and press, go back to the beginning of your video and press play
+
+04:06.760 --> 04:08.760
+Yes, from various signals
+
+04:09.760 --> 04:12.760
+The work we present is limited to text and speech
+
+04:12.760 --> 04:13.760
+Good approaching
+
+04:13.760 --> 04:14.760
+But it can be extended
+
+04:15.760 --> 04:22.760
+Thank you for joining me today. I am Samir Pradhan from the Linguistic Data Consortium at the University of Pennsylvania
+
+04:23.760 --> 04:26.760
+And founder of osmantics.org
+
+04:26.760 --> 04:33.760
+We research in computational linguistics, also known as natural language processing, a sub-area of artificial intelligence
+
+04:34.760 --> 04:40.760
+With a focus on modeling and predicting complex linguistic structures from various signals
+
+04:41.760 --> 04:47.760
+The work we present is limited to text and speech, but it can be extended to other signals
+
+04:47.760 --> 04:57.760
+We propose an architecture, and we call it GRAIL, which allows the representation and aggregation of such rich structures in a systematic fashion
+
+04:59.760 --> 05:11.760
+I'll demonstrate a proof of concept for representing and manipulating data and annotations for the specific purpose of building machine learning models that simulate understanding
+
+05:11.760 --> 05:20.760
+These technologies have the potential for impact in almost any conceivable field that generates and uses data
+
+05:22.760 --> 05:32.760
+We process human language when our brains receive and assimilate various signals, which are then manipulated and interpreted within a syntactic structure
+
+05:33.760 --> 05:39.760
+It's a complex process that I have simplified here for the purpose of comparison to machine learning
+
+05:39.760 --> 05:51.760
+Recent machine learning models tend to require a large amount of raw, naturally occurring data, and a varying amount of manually enriched data, commonly known as annotations
+
+05:52.760 --> 06:01.760
+Owing to the complex and numerous nature of linguistic phenomena, we have most often used a divide-and-conquer approach
+
+06:01.760 --> 06:09.760
+The strength of this approach is that it allows us to focus on a single or perhaps a few related linguistic phenomena
+
+06:10.760 --> 06:17.760
+The weaknesses are the universe of these phenomena keep expanding as language itself evolves and changes over time
+
+06:18.760 --> 06:26.760
+And second, this approach requires an additional task of aggregating annotations, creating more opportunities for computer error
+
+06:26.760 --> 06:40.760
+Our challenge then is to find the sweet spot that allows us to encode complex information without the use of manual annotation or without the additional task of aggregation by computers
+
+06:42.760 --> 06:45.760
+So what do I mean by annotation?
+
+06:45.760 --> 06:59.760
+In this talk, the word annotation refers to the manual assignment of certain attributes to portions of a signal which is necessary to perform the end task
+
+07:00.760 --> 07:11.760
+For example, in order for the algorithm to accurately interpret a pronoun, it needs to know what that pronoun refers back to
+
+07:11.760 --> 07:19.760
+We may find this task trivial, however, current algorithms repeatedly fail in this task
+
+07:20.760 --> 07:26.760
+So the complexities of understanding in computational linguistics require annotation
+
+07:27.760 --> 07:36.760
+The word annotation itself is a useful example because it also reminds us that words have multiple meanings, as annotation itself does
+
+07:36.760 --> 07:51.760
+Just as I needed to define it in this context so that my message won't be misinterpreted, so too must annotators do at least for algorithms through manual intervention
+
+07:52.760 --> 07:58.760
+Learning from raw data, commonly known as unsupervised learning, poses limitations for machine learning
+
+07:59.760 --> 08:04.760
+As I described, modeling complex phenomena need manual annotations
+
+08:04.760 --> 08:10.760
+The learning algorithm uses these annotations as examples to build statistical models
+
+08:11.760 --> 08:13.760
+This is called supervised learning
+
+08:13.760 --> 08:37.760
+Without going into too much detail, I'll simply note that the recent popularity of the concept of deep learning is an evolutionary step where we have learned to train models using trillions of parameters in ways that they can learn richer hierarchical structures from very large amounts of annotated data
+
+08:37.760 --> 08:49.760
+These models can then be fine-tuned using varying amounts of annotated examples, depending on the complexity of the task, to generate better predictions
+
+08:50.760 --> 09:01.760
+As you might imagine, manually annotating complex linguistic phenomena can be a very specific, labor-intensive task
+
+09:01.760 --> 09:09.760
+For example, imagine if we were to go back through this presentation and connect all the pronouns with the nouns to which they refer
+
+09:10.760 --> 09:14.760
+Even for a short, 18-minute presentation, this would require hundreds of annotations
+
+09:15.760 --> 09:20.760
+The models we build are only as good as the quality of the annotations we make
+
+09:20.760 --> 09:31.760
+We need guidelines that ensure that the annotations are done by at least two humans who have substantial agreement with each other in their interpretations
+
+09:32.760 --> 09:40.760
+We know that if we try to train a model using annotations that are very subjective or have more noise, we will receive poor predictions
+
+09:41.760 --> 09:47.760
+Additionally, there is the concern of introducing various unexpected biases into one's models
+
+09:47.760 --> 09:54.760
+So, annotation is really both an art and a science
+
+09:55.760 --> 09:59.760
+In the remaining time, we will turn to two fundamental questions
+
+10:00.760 --> 10:09.760
+First, how can we develop a unified representation of data and annotations that encompasses arbitrary levels of linguistic information?
+
+10:10.760 --> 10:14.760
+There is a long history of attempting to answer this first question
+
+10:14.760 --> 10:18.760
+This history is documented in our recent article
+
+10:19.760 --> 10:26.760
+It is as if we as a community have been searching for our own holy grail
+
+10:27.760 --> 10:35.760
+The second question we will pose on is what role might Emacs, along with Org Mode, play in this process?
+
+10:35.760 --> 10:46.760
+While the solution itself may not be tied to Emacs, Emacs has built-in capabilities that could be useful for evaluating potential solutions
+
+10:47.760 --> 10:55.760
+It is also one of the most extensively documented pieces of software and the most customizable piece of software that I have ever come across
+
+10:56.760 --> 11:00.760
+Many would agree with that
+
+11:00.760 --> 11:08.760
+In order to approach this second question, we turn to the complex structure of language itself
+
+11:09.760 --> 11:13.760
+At first glance, language appears to us as a series of words
+
+11:14.760 --> 11:20.760
+Words form sentences, sentences form paragraphs, and paragraphs form completed texts
+
+11:20.760 --> 11:30.760
+If this was a sufficient description of the complexity of language, all of us would be able to read at least 10 different languages
+
+11:31.760 --> 11:33.760
+We know it is much more complex than this
+
+11:34.760 --> 11:37.760
+There is a rich, underlying, recursive tree structure
+
+11:38.760 --> 11:45.760
+In fact, many possible tree structures, which makes a particular sequence, and many others
+
+11:45.760 --> 11:50.760
+One of the better understood tree structures is the syntactic structure
+
+11:51.760 --> 12:00.760
+While a natural language has rich ambiguities and complexities, programming languages are designed to be parsed and imprinted deterministically
+
+12:01.760 --> 12:10.760
+Emacs has been used for programming very effectively, so there is a potential for using Emacs as a tool for annotation
+
+12:10.760 --> 12:14.760
+This would significantly improve our current set of tools
+
+12:15.760 --> 12:26.760
+It is important to note that most of the annotation tools that have been developed over the past few decades have relied on graphical indices
+
+12:27.760 --> 12:30.760
+Even those used for enumerated textual indices
+
+12:30.760 --> 12:42.760
+Most of the tools in use are designed for a user to add very specific, very restricted information
+
+12:43.760 --> 12:51.760
+It has not really made use of the potential that an editor, rich editing environment like Emacs, can add to the mix
+
+12:51.760 --> 12:59.760
+Emacs has long been able to edit and manipulate complex, embedded tree structures dependent in source code
+
+13:00.760 --> 13:05.760
+It is difficult to imagine the capabilities that we represent naturally
+
+13:06.760 --> 13:13.760
+In fact, it always does that, with features that allow us to quickly navigate sentences and graphs with a few keystrokes
+
+13:13.760 --> 13:20.760
+Add various text studies, create overlays to name, etc.
+
+13:21.760 --> 13:33.760
+Emacs has built up way too many control units, so we don't have to worry about the complexity of managing more languages
+
+13:34.760 --> 13:41.760
+In fact, this is not the first time Emacs has used control linguistic sequences
+
+13:41.760 --> 13:56.760
+One of the true moments in language natural language processing was the creation of a newly created syntactic tree for a million word collection of Wall Street articles
+
+13:57.760 --> 14:03.760
+This was about 1990, before Java or Oracle interfaces were common
+
+14:03.760 --> 14:13.760
+The tool that was used to create that corpus was Emacs, and it was created by Penn, known as the Penn Treebank
+
+14:14.760 --> 14:26.760
+And in 1992, about when the Linguistic Consortium was established, it's been about 30 years that it has been creating various language related resources
+
+14:26.760 --> 14:36.760
+The first outlining mode, in particular the outlining mode, rather enhanced the outlining mode
+
+14:37.760 --> 14:49.760
+Allows us to create red outlines, attaching properties to nodes, and why this command is really customizing some of the various pieces of information as per one's requirement
+
+14:49.760 --> 14:56.760
+This is also a very useful tool
+
+14:57.760 --> 15:03.760
+This enhanced outlining mode provides more power to Emacs
+
+15:04.760 --> 15:13.760
+It provides command for easily customizing, entering information, and at the same time hiding unnecessary context
+
+15:13.760 --> 15:25.760
+It allows control editing, this could be a very useful tool when we are focused on a limited amount of data
+
+15:26.760 --> 15:37.760
+The tool together allows us to create a rich representation that can simultaneously capture multiple possible sequences
+
+15:37.760 --> 15:42.760
+Capture details necessary to read the original sources
+
+15:43.760 --> 15:52.760
+Allows us to create hierarchical representation, wide structural capabilities that can take advantage of the concept of editance within the tree structure
+
+15:53.760 --> 16:00.760
+Together allow local manipulance structure, thereby minimizing data coupling
+
+16:00.760 --> 16:06.760
+The concept of tag outlining mode complements the hierarchy pattern
+
+16:07.760 --> 16:12.760
+Hierarchies can be very rigid, but through tags on hierarchies we can have multi-faceted representations
+
+16:13.760 --> 16:19.760
+As a matter of fact, outlining mode has the ability for tags to do their own hierarchical structure
+
+16:20.760 --> 16:23.760
+Further enhances the representational power
+
+16:23.760 --> 16:29.760
+All of this can be done as sequence, mostly for functional transformation
+
+16:30.760 --> 16:36.760
+Because most capabilities can be configured and customized, it is not necessary to do everything at once
+
+16:37.760 --> 16:41.760
+It allows us to intervene in the complexity of the representation
+
+16:42.760 --> 16:46.760
+Finally, all of this can be done in plain tag representation
+
+16:47.760 --> 16:50.760
+It has its own advantages
+
+16:50.760 --> 16:55.760
+Now let's look at a simple example
+
+16:56.760 --> 17:02.760
+The sentence is the thought of the moon with a telescope
+
+17:03.760 --> 17:07.760
+Let's just make a view of the sentence
+
+17:07.760 --> 17:19.760
+What is interesting is that it has a noun phrase i followed by an arrow to star
+
+17:20.760 --> 17:27.760
+Then the moon is another phrase and the telescope is a positional phrase
+
+17:27.760 --> 17:42.760
+Now, one thing you might remember from grammar school syntax is that there is a syntactical structure
+
+17:42.760 --> 17:57.760
+And in this particular case
+
+18:12.760 --> 18:23.760
+Because we know that the moon is not something that can hold the telescope
+
+18:24.760 --> 18:37.760
+That seeing must be by me, or by eye, and the telescope must be in my hand, or I am viewing the moon with a telescope
+
+18:37.760 --> 18:48.760
+However, it is possible that in a different context, the moon could be referred to an animated picture
+
+18:48.760 --> 19:07.760
+And could hold the telescope, in that case, the situation might be that I am actually seeing a moon holding a telescope
+
+19:07.760 --> 19:24.760
+And this is one of the most complex linguistic phenomena that requires world knowledge
+
+19:24.760 --> 19:38.760
+And it is called the P-attachment problem, where the positional phrases can be ambiguous and various different cues have to be used to reduce the ambiguity
+
+19:39.760 --> 19:45.760
+So in this case, as you saw, both the readings are technically true depending on the context
+
+19:45.760 --> 19:55.760
+So one thing we could do is cut the tree and duplicate it, and then create another node and call it another node
+
+19:56.760 --> 20:02.760
+And because this is one of the two interpreters, let's call one division A
+
+20:02.760 --> 20:15.760
+And that division essentially is a tile of zone A, and it says that the moon is holding the telescope
+
+20:15.760 --> 20:31.760
+Now we create another representation, where we capture the other interpretation, where the moon, or I am holding the telescope
+
+20:32.760 --> 20:38.760
+Sorry everyone to interrupt the audio here. Sameer, can you move your mouse a little bit? Just move it to the corner of your screen, thank you
+
+20:38.760 --> 20:49.760
+Now we have two separate interpreters in the same structure, and all we have to do is very quickly add a few keystrokes
+
+20:49.760 --> 21:08.760
+Now let's add another interesting thing. This is two different interpreters. It can be A, it can be B, it can be C, it can be D, or it can be D
+
+21:08.760 --> 21:23.760
+Basically, any entity that has the ability to see can be substituted in this particular node
+
+21:23.760 --> 21:37.760
+And let's see what we have here. Now we are just getting a zoom view of the entire structure we have created
+
+21:37.760 --> 21:52.760
+Essentially, you can see that by just using a few keystrokes, we are able to capture two different interpretations of a simple sentence
+
+21:52.760 --> 22:06.760
+And we are also able to add various alternate pieces of information that could help machine algorithms generalize better
+
+22:06.760 --> 22:25.760
+Now let's go to the next thing. In a sense, we can use the power of functional constructors to represent very potentially conflicting and structured readings
+
+22:25.760 --> 22:38.760
+In addition to this, we can also create a text with different structure and have them in the same place. This allows us to address the interpretation of certain sentences that may be occurring in the world
+
+22:38.760 --> 23:03.760
+While simultaneously giving information that can be more valuable. This makes the enrichment process all very efficient. Additionally, we can enrich the power of users of the feature or button who can not only expand, but also add information into it
+
+23:03.760 --> 23:19.760
+In a way, that could help machine algorithms generalize better by making efficient use of their functions. Together, UX and Ardmo can speed the enrichment of nodes in a way that allows us to focus on certain aspects and ignore others
+
+23:20.760 --> 23:28.760
+Extremely complex landscape structures can be captured consistently in a function that allows computers to understand the language
+
+23:28.760 --> 23:35.760
+We can then use tools to enhance the tests that we do in our everyday life
+
+23:36.760 --> 23:49.760
+However, this is the acronym or the type of specification that we are creating to capture this new and present virtual adaptation
+
+23:49.760 --> 24:06.760
+We will now look at an example of spontaneous speech that occurs in spoken conversations. Conversations consistently contain interest in speech, interrupts, disfluency, verbal nouns such as talk or laugh, and other noises
+
+24:06.760 --> 24:22.760
+Since spontaneous speech is simply a functional stream, we cannot take back words that come out of our mouths. We tend to make mistakes and correct ourselves as soon as we realize that we have spoken
+
+24:22.760 --> 24:35.760
+This process manifests through a combination of a handful of mechanisms, including immediate action after an error, and we do this unconsciously
+
+24:35.760 --> 24:51.760
+What we've taught here is an example of a language that has various aspects of the representation
+
+24:51.760 --> 25:14.760
+We don't have time to go through many of the details. I would highly encourage you to play. I'm making some videos for ASCII cinemas that I'll be posting and if you're interested you can go through those
+
+25:14.760 --> 25:33.760
+The idea here is to try a slightly more complex use case, but given the time consumption and the amount of information that can fit in the screen, this should be very informative
+
+25:33.760 --> 25:46.760
+But at least you'll see some idea of what can be followed. In this particular case, you're saying that there's a sense which is what I am telling now
+
+25:47.760 --> 25:59.760
+Essentially, there is a repetition of the I am, then there is a proper word, nobody can try to say the same thing but start by saying true, and then correct themselves by telling now
+
+25:59.760 --> 26:13.760
+So in this case, we can capture a sequence of words
+
+26:13.760 --> 26:30.760
+The interesting thing is that in NLB, sometimes we have to typically use words that have this interpretation of the context of I am
+
+26:30.760 --> 26:55.760
+You can see that here, this view shows that with each of the words in the sentence or in the representation, you can have a lot of different properties that can attach to them
+
+26:55.760 --> 27:07.760
+And these properties are typical then, like in the earlier slide, but you can use the cues of all these properties to various kind of searches and filtering
+
+27:07.760 --> 27:27.760
+And the slide here is actually not a legitimate text, on the right are descriptions of what each of these present. This information is also available in the article and you can see there
+
+27:27.760 --> 27:38.760
+But it shows how rich a context you can capture, it's just a closer snapshot of the properties on the word
+
+27:39.760 --> 27:50.760
+And you can see we can have like whether the word is broken or not, it's incomplete, whether some words want to be filtered for parsing, and say this is ignored
+
+27:50.760 --> 28:00.760
+Or some words are restart marks, we can add a restart marker, sometimes some of these migrations
+
+28:01.760 --> 28:10.760
+The other fascinating thing about this presentation is that you can edit properties in the content view
+
+28:10.760 --> 28:20.760
+So you have this pillar data structure and combining hierarchical data structure, as you can see, you may not be able to see here
+
+28:20.760 --> 28:48.760
+What has also happened here is that some of the tags have been inherited from earlier groups, and so you get a much better picture of things, and essentially you can filter out things that you want to access, access them, and then integrate it into the model
+
+28:48.760 --> 29:04.760
+So in conclusion today we have posed and implemented the use of the architecture layout, which allows representation, manipulation, and recognition of rich linguistic structure in systematic fashion
+
+29:05.760 --> 29:15.760
+We've shown how Google advances tools available for building machine learning models to simulate understanding
+
+29:15.760 --> 29:22.760
+Thank you Verj for your attention and contact information on this slide
+
+29:23.760 --> 29:41.760
+If you are interested in an additional sample to demonstrate the representation of speech and retext together, continue, otherwise we'll stop here
+
+29:41.760 --> 29:46.760
+Is it okay to stop?
+
+29:47.760 --> 29:53.760
+Yes Amir, it's okay to stop now. Thank you so much for your talk. Are you able to see the pad on your end?
+
+29:54.760 --> 29:58.760
+In the etherpad?
+
+29:59.760 --> 30:01.760
+Yes, in the etherpad, do you have the link?
+
+30:02.760 --> 30:06.760
+I'm there, nothing has happened so far
+
+30:06.760 --> 30:16.760
+I'm going to put a link to the pad, give me just a second right now. Colwyn, feel free to interrupt me whenever you're here
+
+30:17.760 --> 30:23.760
+I'm actually looking at the pad, I don't think anything is added in
+
+30:23.760 --> 30:37.760
+There don't seem to be questions yet, yes. It's probably because of the audio problem people might have a little bit of trouble hearing you talk
+
+30:38.760 --> 30:46.760
+Do you have anything else you'd like to add on your talk maybe? Because I think it was an excruciating process to get it out to us
+
+30:47.760 --> 30:51.760
+You had to get a lot of darlings in the process didn't you?
+
+30:51.760 --> 30:59.760
+Yeah, in the process of preparing this talk you had to select a lot of stuff that you wanted to include in your talk
+
+31:00.760 --> 31:07.760
+Can I ask you to put on your webcam or something? Are you able to do this?
+
+31:07.760 --> 31:25.760
+I'm starting to see a few questions come in. Just let us know when you're ready
+
+31:26.760 --> 31:31.760
+Colwyn, I'll let you take over. Can you hear me?
+
+31:31.760 --> 31:39.760
+Yeah, I hear you, the audio is just a little bit choppy, but we'll just talk slowly and hopefully that will work fine
+
+31:40.760 --> 31:51.760
+Well thanks for the great talk, that was just kind of mind blowing actually, I'm looking forward to re-watching it probably two or three times
+
+31:52.760 --> 31:54.760
+Who is this?
+
+31:55.760 --> 31:57.760
+This is Colwyn again
+
+31:57.760 --> 32:04.760
+Okay, so we do have a few questions coming in
+
+32:05.760 --> 32:08.760
+I'm going to answer them
+
+32:09.760 --> 32:14.760
+Okay, well I can read them to you and then we'll transcribe your answers if you'd like to answer them live
+
+32:14.760 --> 32:29.760
+Oh, I see, let me do that. The identity you've come up as the pantry, that has been to depth and people are putting out perfect scores on that
+
+32:30.760 --> 32:35.760
+But that's not quite the point, I mean sometimes
+
+32:36.760 --> 32:39.760
+Oh, I should also speak slowly
+
+32:39.760 --> 32:54.760
+Sometimes the research community goes too far and reuses the evaluations and doesn't really transfer to domains
+
+32:54.760 --> 33:14.760
+But our richer and newer data that are available is always, we're in the process, I am currently and a couple of my colleagues, we're getting new data so that we can actually make sure the learning model is better
+
+33:14.760 --> 33:35.760
+Oh shoot, and then I failed to unmute myself on the stream here
+
+33:35.760 --> 33:43.760
+And I think you're answering in text right now one of these, so I'll just let you drive
+
+33:44.760 --> 33:51.760
+So one thing I'll add is, please read the question that you're answering when you read out your answers
+
+33:52.760 --> 33:55.760
+Oh, I see, yes
+
+33:55.760 --> 34:06.760
+And we're showing the pad on the stream so people are seeing the text and that's probably a good approach considering we're having a little shakiness with the audio
+
+34:25.760 --> 34:35.760
+In fact, I think my audio may be pretty stable, so I'll just start reading out both the questions and the answers
+
+34:36.760 --> 34:42.760
+But Samir, if you want to, you're welcome to interrupt me if you want to expand on your remarks at all
+
+34:43.760 --> 34:52.760
+So the first question was, has the 92U pin corpus of articles feat been reproduced over and over again using these tools
+
+34:52.760 --> 35:01.760
+The answer was not quite, that was sort of a first wave, the particular corpus was the first one that started a revolution, kind of
+
+35:02.760 --> 35:13.760
+But there are more corpus being made available, in fact I spent about 8 years, a decade ago, building a much larger corpus with more layers of information
+
+35:13.760 --> 35:27.760
+And it is called the Onto Notes, it covers Chinese and Arabic, DARPA funded, this is freely available for research to anyone, anywhere
+
+35:28.760 --> 35:32.760
+That was quite a feature, quite a feat
+
+35:32.760 --> 35:45.760
+The next question, is this only for natural languages like English or more general, would this be used for programming languages
+
+35:46.760 --> 35:54.760
+Samir said, I am using English as a use case, but the idea is to have it completely multilingual
+
+35:54.760 --> 36:12.760
+I cannot think why you would want to use it for programming languages, in fact the AST in programming languages is sort of what we are trying to build upon
+
+36:12.760 --> 36:29.760
+So that one can capture the abstract representation and help the models learn better
+
+36:29.760 --> 36:49.760
+These days the models are trained on a boatload of data, and so they tend to be overfitted to the data
+
+36:49.760 --> 37:13.760
+So if you have a smaller data set, which is not quite the same as the one that you had the training data for, then the models really do poorly
+
+37:13.760 --> 37:29.760
+It is sometimes compared to learning the sine function, using the points on the sine wave, as opposed to deriving the function itself
+
+37:29.760 --> 37:46.760
+You can get close, but then you cannot really do a lot better with that model
+
+37:47.760 --> 37:56.760
+This is sort of what is happening with the deep learning hype
+
+37:56.760 --> 38:13.760
+It is not to say that there hasn't been a significant advancement in the tech, in the technologies
+
+38:13.760 --> 38:28.760
+But to say that the models can learn is an extreme overstatement
+
+38:28.760 --> 38:46.760
+Awesome answer. I'm going to scroll my copy of the pad down just a little bit, and we'll just take a moment to start looking at the next question
+
+38:46.760 --> 38:57.760
+So I'll read that out. Reminds me of the advantages of pre-computer copy and paste, cut up paper and rearrange, but having more stuff with your pieces
+
+38:58.760 --> 39:11.760
+Right. Kind of like that, but more intelligent than copy-paste, because you could have various local constraints that would ensure the information is consistent with the whole
+
+39:11.760 --> 39:30.760
+I am also envisioning this as a use case of hooks
+
+39:30.760 --> 39:57.760
+And if you can have rich local dependencies, then you can be sure, as much as you can, that the information signal is not too corrupted
+
+39:57.760 --> 40:22.760
+Have you used it on real life situations? No. I am probably the only person who is doing this crazy thing
+
+40:22.760 --> 40:47.760
+It would be nice, or rather, I have a feeling that something like this, if worked upon for a while, by many people, by many, might lead to a really really potent tool for the masses
+
+40:47.760 --> 41:00.760
+I feel strongly about using, sorry, I feel strongly about giving such power to the users
+
+41:00.760 --> 41:17.760
+And be able to edit and share the data openly, so that they are not stuck in some corporate vault somewhere
+
+41:17.760 --> 41:31.760
+Amen. One thing at a time. Plus one for that as well.
+
+41:31.760 --> 41:47.760
+Alright, and I will read out the next question. Do you see this as a format for this type of annotation specifically, or something more general that can be used for interlinear glosses, lexicons, etc?
+
+41:47.760 --> 42:12.760
+Absolutely. In fact, the project I mentioned, One Notes, has multiple layers of annotation, one of them being the propositional structure, which it uses for a large lexicon that covers about 15k verbs, so 15,000 verbs, and nouns
+
+42:12.760 --> 42:25.760
+and all their argument structures that we have been seeing so far in the corpora
+
+42:26.760 --> 42:35.760
+This is about a million propositions that have been released recently
+
+42:35.760 --> 42:57.760
+We just recently celebrated a 20th birthday of the Corpus. It is called the Prop Bank.
+
+42:57.760 --> 43:19.760
+There is an interesting history of the banks. It started with Tree Bank, and then there was Prop Bank, with a capital B
+
+43:19.760 --> 43:47.760
+But then, when we were developing Onto Notes, which contains syntax, named entities, conference resolution, propositions, word sense, all in the same hole
+
+43:47.760 --> 43:57.760
+Sorry for the interruption. We have about 5 minutes and 15 seconds.
+
+43:58.760 --> 44:09.760
+That sounds good. If you want to just read it out, then. I think that would be the most important thing, that people can hear your answers, and I and the other volunteers will be going through and trying to transcribe this.
+
+44:09.760 --> 44:19.760
+So go for it.
+
+44:20.760 --> 44:25.760
+So, Samuel, just to make sure, did you have something to say right now?
+
+44:25.760 --> 44:39.760
+Oh, okay. I think these are all good questions, and there is a lot of it, and clearly the amount of time is not enough.
+
+44:39.760 --> 44:54.760
+But I am trying to figure out how to have a community that can help such a person.
+
+44:54.760 --> 45:12.760
+One of the things that I am thinking that this could make possible is to take all the disparate resources that have inconsistent or not quite compatible additions on them,
+
+45:12.760 --> 45:34.760
+and which are right now just iso of data, small island of data floating in the sea. But representation could really bring them all together, and then they could be much richer, full, and consistent.
+
+45:34.760 --> 45:46.760
+Like you said, one of you was asking about the islands and the subcorporas that have sentiment and information.
+
+45:46.760 --> 46:09.760
+I am, yeah, there's a lot of various. Common people, the way it could be used for common people is to potentially make them available that currently doesn't recognize the current models on dual land,
+
+46:09.760 --> 46:19.760
+so that more people can use the data and not be biased towards one or the other.
+
+46:19.760 --> 46:42.760
+And there are some things, when people train these models using huge amounts of data, no matter how big the data is, it is a small cross-section of the universe of data, and depending on what drop select will be your model, those will be the seconds for those.
+
+46:42.760 --> 46:56.760
+And some people will be interested in using them on purpose X, but somebody else might want to use them on purpose Y, and if the data is not in, then it's harder to do that.
+
+47:00.760 --> 47:09.760
+Okay, so I think we've got just about 100 seconds left, so if you have any closing remarks you want to share, and then we'll start transitioning.
+
+47:09.760 --> 47:17.760
+Thank you so much, I really appreciate, this was a great experience, frankly.
+
+47:17.760 --> 47:46.760
+I've never had a complete pre-related level of talk before, I guess, in a way it was for a different audience. It was extremely helpful, and I learned that planning sort of tried to create a community.
+
+47:47.760 --> 47:52.760
+Thank you so much.
+
+47:53.760 --> 47:58.760
+I'll take it over, we are going to move to the next talk. Thank you so much, Samir, and sorry for the technical difficulty.
+
+47:58.760 --> 48:23.760
+As Corbin said, we will try to manage as much of the information that was shared during this Q&A, we will file everything away where we can use it, and make captions and all this, so don't worry about the difficulty.
+
+48:28.760 --> 48:29.760
+Thank you.
+
diff --git a/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt
new file mode 100644
index 00000000..e907d8ec
--- /dev/null
+++ b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt
@@ -0,0 +1,65 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:13.399
+Introduction
+
+00:01:13.400 --> 00:02:34.559
+Processing language
+
+00:02:34.560 --> 00:03:43.239
+Annotation
+
+00:03:43.240 --> 00:04:39.679
+Learning from data
+
+00:04:39.680 --> 00:05:44.399
+Manual annotation
+
+00:05:44.400 --> 00:06:22.519
+How can we develop a unified representation?
+
+00:06:22.520 --> 00:06:55.279
+What role might Emacs and Org mode play?
+
+00:06:55.280 --> 00:08:10.799
+The complex structure of language
+
+00:08:10.800 --> 00:10:22.359
+Annotation tools
+
+00:10:22.360 --> 00:12:45.479
+Org mode
+
+00:12:45.480 --> 00:17:36.239
+Example
+
+00:17:36.240 --> 00:19:17.679
+Different readings
+
+00:19:17.680 --> 00:23:31.999
+Spontaneous speech
+
+00:23:32.000 --> 00:24:20.279
+Editing properties in column view
+
+00:24:20.280 --> 00:25:15.279
+Conclusion
+
+00:25:15.280 --> 00:27:20.479
+Bonus material
+
+00:27:20.480 --> 00:28:39.279
+Syntactic analysis
+
+00:28:39.280 --> 00:30:12.599
+Forced alignment
+
+00:30:12.600 --> 00:31:42.879
+Alignment before tokenization
+
+00:31:42.880 --> 00:34:31.319
+Layers
+
+00:34:31.320 --> 00:36:17.000
+Variations
diff --git a/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt
new file mode 100644
index 00000000..a642f94a
--- /dev/null
+++ b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt
@@ -0,0 +1,1945 @@
+WEBVTT captioned by sameer
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:05.839
+Thank you for joining me today. I'm Sameer Pradhan
+
+00:00:05.840 --> 00:00:07.799
+from the Linguistic Data Consortium
+
+00:00:07.800 --> 00:00:10.079
+at the University of Pennsylvania
+
+00:00:10.080 --> 00:00:14.519
+and founder of cemantix.org .
+
+00:00:14.520 --> 00:00:16.879
+Today we'll be addressing research
+
+00:00:16.880 --> 00:00:18.719
+in computational linguistics,
+
+00:00:18.720 --> 00:00:22.039
+also known as natural language processing
+
+00:00:22.040 --> 00:00:24.719
+a sub area of artificial intelligence
+
+00:00:24.720 --> 00:00:27.759
+with a focus on modeling and predicting
+
+00:00:27.760 --> 00:00:31.919
+complex linguistic structures from various signals.
+
+00:00:31.920 --> 00:00:35.799
+The work we present is limited to text and speech signals.
+
+00:00:35.800 --> 00:00:38.639
+but it can be extended to other signals.
+
+00:00:38.640 --> 00:00:40.799
+We propose an architecture,
+
+00:00:40.800 --> 00:00:42.959
+and we call it GRAIL, which allows
+
+00:00:42.960 --> 00:00:44.639
+the representation and aggregation
+
+00:00:44.640 --> 00:00:50.199
+of such rich structures in a systematic fashion.
+
+00:00:50.200 --> 00:00:52.679
+I'll demonstrate a proof of concept
+
+00:00:52.680 --> 00:00:56.559
+for representing and manipulating data and annotations
+
+00:00:56.560 --> 00:00:58.519
+for the specific purpose of building
+
+00:00:58.520 --> 00:01:02.879
+machine learning models that simulate understanding.
+
+00:01:02.880 --> 00:01:05.679
+These technologies have the potential for impact
+
+00:01:05.680 --> 00:01:09.119
+in almost every conceivable field
+
+00:01:09.120 --> 00:01:13.399
+that generates and uses data.
+
+NOTE Processing language
+
+00:01:13.400 --> 00:01:15.039
+We process human language
+
+00:01:15.040 --> 00:01:16.719
+when our brains receive and assimilate
+
+00:01:16.720 --> 00:01:20.079
+various signals which are then manipulated
+
+00:01:20.080 --> 00:01:23.879
+and interpreted within a syntactic structure.
+
+00:01:23.880 --> 00:01:27.319
+it's a complex process that I have simplified here
+
+00:01:27.320 --> 00:01:30.759
+for the purpose of comparison to machine learning.
+
+00:01:30.760 --> 00:01:33.959
+Recent machine learning models tend to require
+
+00:01:33.960 --> 00:01:37.039
+a large amount of raw, naturally occurring data
+
+00:01:37.040 --> 00:01:40.199
+and a varying amount of manually enriched data,
+
+00:01:40.200 --> 00:01:43.199
+commonly known as "annotations".
+
+00:01:43.200 --> 00:01:45.959
+Owing to the complex and numerous nature
+
+00:01:45.960 --> 00:01:49.959
+of linguistic phenomena, we have most often used
+
+00:01:49.960 --> 00:01:52.999
+a divide and conquer approach.
+
+00:01:53.000 --> 00:01:55.399
+The strength of this approach is that it allows us
+
+00:01:55.400 --> 00:01:58.159
+to focus on a single, or perhaps a few related
+
+00:01:58.160 --> 00:02:00.439
+linguistic phenomena.
+
+00:02:00.440 --> 00:02:03.879
+The weaknesses are the universe of these phenomena
+
+00:02:03.880 --> 00:02:07.239
+keep expanding, as language itself
+
+00:02:07.240 --> 00:02:09.359
+evolves and changes over time,
+
+00:02:09.360 --> 00:02:13.119
+and second, this approach requires an additional task
+
+00:02:13.120 --> 00:02:14.839
+of aggregating the interpretations,
+
+00:02:14.840 --> 00:02:18.359
+creating more opportunities for computer error.
+
+00:02:18.360 --> 00:02:21.519
+Our challenge, then, is to find the sweet spot
+
+00:02:21.520 --> 00:02:25.239
+that allows us to encode complex information
+
+00:02:25.240 --> 00:02:27.719
+without the use of manual annotation,
+
+00:02:27.720 --> 00:02:34.559
+or without the additional task of aggregation by computers.
+
+NOTE Annotation
+
+00:02:34.560 --> 00:02:37.119
+So what do I mean by "annotation"?
+
+00:02:37.120 --> 00:02:39.759
+In this talk the word annotation refers to
+
+00:02:39.760 --> 00:02:43.519
+the manual assignment of certain attributes
+
+00:02:43.520 --> 00:02:48.639
+to portions of a signal which is necessary
+
+00:02:48.640 --> 00:02:51.639
+to perform the end task.
+
+00:02:51.640 --> 00:02:54.439
+For example, in order for the algorithm
+
+00:02:54.440 --> 00:02:57.439
+to accurately interpret a pronoun,
+
+00:02:57.440 --> 00:03:00.279
+it needs to know that pronoun,
+
+00:03:00.280 --> 00:03:03.799
+what that pronoun refers back to.
+
+00:03:03.800 --> 00:03:06.719
+We may find this task trivial, however,
+
+00:03:06.720 --> 00:03:10.599
+current algorithms repeatedly fail in this task.
+
+00:03:10.600 --> 00:03:13.319
+So the complexities of understanding
+
+00:03:13.320 --> 00:03:16.639
+in computational linguistics require annotation.
+
+00:03:16.640 --> 00:03:20.799
+The world annotation itself is a useful example,
+
+00:03:20.800 --> 00:03:22.679
+because it also reminds us
+
+00:03:22.680 --> 00:03:25.119
+that words have multiple meetings
+
+00:03:25.120 --> 00:03:27.519
+as annotation itself does—
+
+00:03:27.520 --> 00:03:30.559
+just as I needed to define it in this context,
+
+00:03:30.560 --> 00:03:33.799
+so that my message won't be misinterpreted.
+
+00:03:33.800 --> 00:03:39.039
+So, too, must annotators do this for algorithms
+
+00:03:39.040 --> 00:03:43.239
+through the manual intervention.
+
+NOTE Learning from data
+
+00:03:43.240 --> 00:03:44.759
+Learning from raw data
+
+00:03:44.760 --> 00:03:47.039
+(commonly known as unsupervised learning)
+
+00:03:47.040 --> 00:03:50.079
+poses limitations for machine learning.
+
+00:03:50.080 --> 00:03:53.039
+As I described, modeling complex phenomena
+
+00:03:53.040 --> 00:03:55.559
+need manual annotations.
+
+00:03:55.560 --> 00:03:58.559
+The learning algorithm uses these annotations
+
+00:03:58.560 --> 00:04:01.319
+as examples to build statistical models.
+
+00:04:01.320 --> 00:04:04.879
+This is called supervised learning.
+
+00:04:04.880 --> 00:04:06.319
+Without going into too much detail,
+
+00:04:06.320 --> 00:04:10.039
+I'll simply note that the recent popularity
+
+00:04:10.040 --> 00:04:12.519
+of the concept of deep learning
+
+00:04:12.520 --> 00:04:14.679
+is that evolutionary step
+
+00:04:14.680 --> 00:04:17.319
+where we have learned to train models
+
+00:04:17.320 --> 00:04:20.799
+using trillions of parameters in ways that they can
+
+00:04:20.800 --> 00:04:25.079
+learn richer hierarchical structures
+
+00:04:25.080 --> 00:04:29.399
+from very large amounts of annotate, unannotated data.
+
+00:04:29.400 --> 00:04:32.319
+These models can then be fine-tuned,
+
+00:04:32.320 --> 00:04:35.599
+using varying amounts of annotated examples
+
+00:04:35.600 --> 00:04:37.639
+depending on the complexity of the task
+
+00:04:37.640 --> 00:04:39.679
+to generate better predictions.
+
+NOTE Manual annotation
+
+00:04:39.680 --> 00:04:44.919
+As you might imagine, manually annotating
+
+00:04:44.920 --> 00:04:47.359
+complex, linguistic phenomena
+
+00:04:47.360 --> 00:04:51.719
+can be very specific, labor-intensive task.
+
+00:04:51.720 --> 00:04:54.279
+For example, imagine if we were
+
+00:04:54.280 --> 00:04:56.399
+to go back through this presentation
+
+00:04:56.400 --> 00:04:58.399
+and connect all the pronouns
+
+00:04:58.400 --> 00:04:59.919
+with the nouns to which they refer.
+
+00:04:59.920 --> 00:05:03.239
+Even for a short 18 min presentation,
+
+00:05:03.240 --> 00:05:05.239
+this would require hundreds of annotations.
+
+00:05:05.240 --> 00:05:08.519
+The models we build are only as good
+
+00:05:08.520 --> 00:05:11.119
+as the quality of the annotations we make.
+
+00:05:11.120 --> 00:05:12.679
+We need guidelines
+
+00:05:12.680 --> 00:05:15.759
+that ensure that the annotations are done
+
+00:05:15.760 --> 00:05:19.719
+by at least two humans who have substantial agreement
+
+00:05:19.720 --> 00:05:22.119
+with each other in their interpretations.
+
+00:05:22.120 --> 00:05:25.599
+We know that if we try to trade a model using annotations
+
+00:05:25.600 --> 00:05:28.519
+that are very subjective, or have more noise,
+
+00:05:28.520 --> 00:05:30.919
+we will receive poor predictions.
+
+00:05:30.920 --> 00:05:33.679
+Additionally, there is the concern of introducing
+
+00:05:33.680 --> 00:05:37.079
+various unexpected biases into one's models.
+
+00:05:37.080 --> 00:05:44.399
+So annotation is really both an art and a science.
+
+NOTE How can we develop a unified representation?
+
+00:05:44.400 --> 00:05:47.439
+In the remaining time,
+
+00:05:47.440 --> 00:05:49.999
+we will turn to two fundamental questions.
+
+00:05:50.000 --> 00:05:54.239
+First, how can we develop a unified representation
+
+00:05:54.240 --> 00:05:55.599
+of data and annotations
+
+00:05:55.600 --> 00:05:59.759
+that encompasses arbitrary levels of linguistic information?
+
+00:05:59.760 --> 00:06:03.839
+There is a long history of attempting to answer
+
+00:06:03.840 --> 00:06:04.839
+this first question.
+
+00:06:04.840 --> 00:06:08.839
+This history is documented in our recent article,
+
+00:06:08.840 --> 00:06:11.519
+and you can refer to that article.
+
+00:06:11.520 --> 00:06:16.719
+It will be on the website.
+
+00:06:16.720 --> 00:06:18.999
+It is as if we, as a community,
+
+00:06:19.000 --> 00:06:22.519
+have been searching for our own Holy Grail.
+
+NOTE What role might Emacs and Org mode play?
+
+00:06:22.520 --> 00:06:26.519
+The second question we will pose is
+
+00:06:26.520 --> 00:06:30.159
+what role might Emacs, along with Org mode,
+
+00:06:30.160 --> 00:06:31.919
+play in this process?
+
+00:06:31.920 --> 00:06:35.359
+Well, the solution itself may not be tied to Emacs.
+
+00:06:35.360 --> 00:06:38.359
+Emacs has built in capabilities
+
+00:06:38.360 --> 00:06:42.599
+that could be useful for evaluating potential solutions.
+
+00:06:42.600 --> 00:06:45.759
+It's also one of the most extensively documented
+
+00:06:45.760 --> 00:06:48.519
+pieces of software and the most customizable
+
+00:06:48.520 --> 00:06:51.599
+piece of software that I have ever come across,
+
+00:06:51.600 --> 00:06:55.279
+and many would agree with that.
+
+NOTE The complex structure of language
+
+00:06:55.280 --> 00:07:00.639
+In order to approach this second question,
+
+00:07:00.640 --> 00:07:03.919
+we turn to the complex structure of language itself.
+
+00:07:03.920 --> 00:07:07.679
+At first glance, language appears to us
+
+00:07:07.680 --> 00:07:09.879
+as a series of words.
+
+00:07:09.880 --> 00:07:13.439
+Words form sentences, sentences form paragraphs,
+
+00:07:13.440 --> 00:07:16.239
+and paragraphs form completed text.
+
+00:07:16.240 --> 00:07:19.039
+If this was a sufficient description
+
+00:07:19.040 --> 00:07:21.159
+of the complexity of language,
+
+00:07:21.160 --> 00:07:24.199
+all of us would be able to speak and read
+
+00:07:24.200 --> 00:07:26.559
+at least ten different languages.
+
+00:07:26.560 --> 00:07:29.279
+We know it is much more complex than this.
+
+00:07:29.280 --> 00:07:33.199
+There is a rich, underlying recursive tree structure--
+
+00:07:33.200 --> 00:07:36.439
+in fact, many possible tree structures
+
+00:07:36.440 --> 00:07:39.439
+which makes a particular sequence meaningful
+
+00:07:39.440 --> 00:07:42.079
+and many others meaningless.
+
+00:07:42.080 --> 00:07:45.239
+One of the better understood tree structures
+
+00:07:45.240 --> 00:07:47.119
+is the syntactic structure.
+
+00:07:47.120 --> 00:07:49.439
+While natural language
+
+00:07:49.440 --> 00:07:51.679
+has rich ambiguities and complexities,
+
+00:07:51.680 --> 00:07:55.119
+programming languages are designed to be parsed
+
+00:07:55.120 --> 00:07:56.999
+and interpreted deterministically.
+
+00:07:57.000 --> 00:08:02.159
+Emacs has been used for programming very effectively.
+
+00:08:02.160 --> 00:08:05.359
+So there is a potential for using Emacs
+
+00:08:05.360 --> 00:08:06.559
+as a tool for annotation.
+
+00:08:06.560 --> 00:08:10.799
+This would significantly improve our current set of tools.
+
+NOTE Annotation tools
+
+00:08:10.800 --> 00:08:16.559
+It is important to note that most of the annotation tools
+
+00:08:16.560 --> 00:08:19.639
+that have been developed over the past few decades
+
+00:08:19.640 --> 00:08:22.879
+have relied on graphical interfaces,
+
+00:08:22.880 --> 00:08:26.919
+even those used for enriching textual information.
+
+00:08:26.920 --> 00:08:30.399
+Most of the tools in current use
+
+00:08:30.400 --> 00:08:36.159
+are designed for a end user to add very specific,
+
+00:08:36.160 --> 00:08:38.639
+very restricted information.
+
+00:08:38.640 --> 00:08:42.799
+We have not really made use of the potential
+
+00:08:42.800 --> 00:08:45.639
+that an editor or a rich editing environment like Emacs
+
+00:08:45.640 --> 00:08:47.239
+can add to the mix.
+
+00:08:47.240 --> 00:08:52.479
+Emacs has long enabled the editing of, the manipulation of
+
+00:08:52.480 --> 00:08:56.359
+complex embedded tree structures abundant in source code.
+
+00:08:56.360 --> 00:08:58.599
+So it's not difficult to imagine that it would have
+
+00:08:58.600 --> 00:09:00.359
+many capabilities that we we need
+
+00:09:00.360 --> 00:09:02.599
+to represent actual language.
+
+00:09:02.600 --> 00:09:04.759
+In fact, it already does that with features
+
+00:09:04.760 --> 00:09:06.399
+that allow us to quickly navigate
+
+00:09:06.400 --> 00:09:07.919
+through sentences and paragraphs,
+
+00:09:07.920 --> 00:09:09.799
+and we don't need a few key strokes.
+
+00:09:09.800 --> 00:09:13.599
+Or to add various text properties to text spans
+
+00:09:13.600 --> 00:09:17.039
+to create overlays, to name but a few.
+
+00:09:17.040 --> 00:09:22.719
+Emacs figured out this way to handle Unicode,
+
+00:09:22.720 --> 00:09:26.799
+so you don't even have to worry about the complexity
+
+00:09:26.800 --> 00:09:29.439
+of managing multiple languages.
+
+00:09:29.440 --> 00:09:34.039
+It's built into Emacs. In fact, this is not the first time
+
+00:09:34.040 --> 00:09:37.399
+Emacs has been used for linguistic analysis.
+
+00:09:37.400 --> 00:09:41.159
+One of the breakthrough moments in language,
+
+00:09:41.160 --> 00:09:44.439
+natural language processing was the creation
+
+00:09:44.440 --> 00:09:48.639
+of manually created syntactic trees
+
+00:09:48.640 --> 00:09:50.439
+for a 1 million word collection
+
+00:09:50.440 --> 00:09:52.399
+of Wall Street Journal articles.
+
+00:09:52.400 --> 00:09:54.879
+This was else around 1992
+
+00:09:54.880 --> 00:09:59.279
+before Java or graphical interfaces were common.
+
+00:09:59.280 --> 00:10:03.279
+The tool that was used to create that corpus was Emacs.
+
+00:10:03.280 --> 00:10:08.959
+It was created at UPenn, and is famously known as
+
+00:10:08.960 --> 00:10:12.719
+the Penn Treebank. '92 was about when
+
+00:10:12.720 --> 00:10:16.439
+the Linguistic Data Consortium was also established,
+
+00:10:16.440 --> 00:10:18.039
+and it's been about 30 years
+
+00:10:18.040 --> 00:10:20.719
+that it has been creating various
+
+00:10:20.720 --> 00:10:22.359
+language-related resources.
+
+NOTE Org mode
+
+00:10:22.360 --> 00:10:28.519
+Org mode--in particular, the outlining mode,
+
+00:10:28.520 --> 00:10:32.399
+or rather the enhanced form of outlining mode--
+
+00:10:32.400 --> 00:10:35.599
+allows us to create rich outlines,
+
+00:10:35.600 --> 00:10:37.799
+attaching properties to nodes,
+
+00:10:37.800 --> 00:10:41.119
+and provides commands for easily customizing
+
+00:10:41.120 --> 00:10:43.879
+sorting of various pieces of information
+
+00:10:43.880 --> 00:10:45.639
+as per one's requirement.
+
+00:10:45.640 --> 00:10:50.239
+This can also be a very useful tool.
+
+00:10:50.240 --> 00:10:59.159
+This enhanced form of outline-mode adds more power to Emacs.
+
+00:10:59.160 --> 00:11:03.359
+It provides commands for easily customizing
+
+00:11:03.360 --> 00:11:05.159
+and filtering information,
+
+00:11:05.160 --> 00:11:08.999
+while at the same time hiding unnecessary context.
+
+00:11:09.000 --> 00:11:11.919
+It also allows structural editing.
+
+00:11:11.920 --> 00:11:16.039
+This can be a very useful tool to enrich corpora
+
+00:11:16.040 --> 00:11:20.919
+where we are focusing on limited amount of phenomena.
+
+00:11:20.920 --> 00:11:24.519
+The two together allow us to create
+
+00:11:24.520 --> 00:11:27.199
+a rich representation
+
+00:11:27.200 --> 00:11:32.999
+that can simultaneously capture multiple possible sequences,
+
+00:11:33.000 --> 00:11:38.759
+capture details necessary to recreate the original source,
+
+00:11:38.760 --> 00:11:42.079
+allow the creation of hierarchical representation,
+
+00:11:42.080 --> 00:11:44.679
+provide structural editing capabilities
+
+00:11:44.680 --> 00:11:47.439
+that can take advantage of the concept of inheritance
+
+00:11:47.440 --> 00:11:48.999
+within the tree structure.
+
+00:11:49.000 --> 00:11:54.279
+Together they allow local manipulations of structures,
+
+00:11:54.280 --> 00:11:56.199
+thereby minimizing data coupling.
+
+00:11:56.200 --> 00:11:59.119
+The concept of tags in Org mode
+
+00:11:59.120 --> 00:12:01.599
+complement the hierarchy part.
+
+00:12:01.600 --> 00:12:03.839
+Hierarchies can be very rigid,
+
+00:12:03.840 --> 00:12:06.039
+but to tags on hierarchies,
+
+00:12:06.040 --> 00:12:08.839
+we can have a multifaceted representations.
+
+00:12:08.840 --> 00:12:12.759
+As a matter of fact, Org mode has the ability for the tags
+
+00:12:12.760 --> 00:12:15.039
+to have their own hierarchical structure
+
+00:12:15.040 --> 00:12:18.639
+which further enhances the representational power.
+
+00:12:18.640 --> 00:12:22.639
+All of this can be done as a sequence
+
+00:12:22.640 --> 00:12:25.679
+of mostly functional data transformations,
+
+00:12:25.680 --> 00:12:27.439
+because most of the capabilities
+
+00:12:27.440 --> 00:12:29.759
+can be configured and customized.
+
+00:12:29.760 --> 00:12:32.799
+It is not necessary to do everything at once.
+
+00:12:32.800 --> 00:12:36.199
+Instead, it allows us to incrementally increase
+
+00:12:36.200 --> 00:12:37.919
+the complexity of the representation.
+
+00:12:37.920 --> 00:12:39.799
+Finally, all of this can be done
+
+00:12:39.800 --> 00:12:42.359
+in plain-text representation
+
+00:12:42.360 --> 00:12:45.479
+which comes with its own advantages.
+
+NOTE Example
+
+00:12:45.480 --> 00:12:50.679
+Now let's take a simple example.
+
+00:12:50.680 --> 00:12:55.999
+This is a a short video that I'll play.
+
+00:12:56.000 --> 00:12:59.679
+The sentence is "I saw the moon with a telescope,"
+
+00:12:59.680 --> 00:13:03.999
+and let's just make a copy of the sentence.
+
+00:13:04.000 --> 00:13:09.199
+What we can do now is to see:
+
+00:13:09.200 --> 00:13:11.879
+what does this sentence comprise?
+
+00:13:11.880 --> 00:13:13.679
+It has a noun phrase "I,"
+
+00:13:13.680 --> 00:13:17.479
+followed by a word "saw."
+
+00:13:17.480 --> 00:13:21.359
+Then "the moon" is another noun phrase,
+
+00:13:21.360 --> 00:13:24.839
+and "with the telescope" is a prepositional phrase.
+
+00:13:24.840 --> 00:13:30.759
+Now one thing that you might remember,
+
+00:13:30.760 --> 00:13:36.119
+from grammar school or syntax is that
+
+00:13:36.120 --> 00:13:41.279
+there is a syntactic structure.
+
+00:13:41.280 --> 00:13:44.359
+And if you in this particular case--
+
+00:13:44.360 --> 00:13:47.919
+because we know that the moon is not typically
+
+00:13:47.920 --> 00:13:51.679
+something that can hold the telescope,
+
+00:13:51.680 --> 00:13:56.239
+that the seeing must be done by me or "I,"
+
+00:13:56.240 --> 00:14:01.039
+and the telescope must be in my hand,
+
+00:14:01.040 --> 00:14:04.479
+or "I" am viewing the moon with a telescope.
+
+00:14:04.480 --> 00:14:13.519
+However, it is possible that in a different context
+
+00:14:13.520 --> 00:14:17.159
+the moon could be referring to an animated character
+
+00:14:17.160 --> 00:14:22.319
+in a animated series, and could actually hold the telescope.
+
+00:14:22.320 --> 00:14:23.479
+And this is one of the most--
+
+00:14:23.480 --> 00:14:24.839
+the oldest and one of the most--
+
+00:14:24.840 --> 00:14:26.319
+and in that case the situation might be
+
+00:14:26.320 --> 00:14:30.959
+that I'm actually seeing the moon holding a telescope...
+
+00:14:30.960 --> 00:14:36.079
+I mean. The moon is holding the telescope,
+
+00:14:36.080 --> 00:14:40.959
+and I'm just seeing the moon holding the telescope.
+
+00:14:40.960 --> 00:14:47.999
+Complex linguistic ambiguity or linguistic
+
+00:14:48.000 --> 00:14:53.599
+phenomena that requires world knowledge,
+
+00:14:53.600 --> 00:14:55.719
+and it's called the PP attachment problem
+
+00:14:55.720 --> 00:14:59.239
+where the propositional phrase attachment
+
+00:14:59.240 --> 00:15:04.599
+can be ambiguous, and various different contextual cues
+
+00:15:04.600 --> 00:15:06.879
+have to be used to resolve the ambiguity.
+
+00:15:06.880 --> 00:15:09.079
+So in this case, as you saw,
+
+00:15:09.080 --> 00:15:11.199
+both the readings are technically true,
+
+00:15:11.200 --> 00:15:13.959
+depending on different contexts.
+
+00:15:13.960 --> 00:15:16.599
+So one thing we could do is just
+
+00:15:16.600 --> 00:15:19.919
+to cut the tree and duplicate it,
+
+00:15:19.920 --> 00:15:21.599
+and then let's create another node
+
+00:15:21.600 --> 00:15:24.479
+and call it an "OR" node.
+
+00:15:24.480 --> 00:15:26.119
+And because we are saying,
+
+00:15:26.120 --> 00:15:28.359
+this is one of the two interpretations.
+
+00:15:28.360 --> 00:15:32.159
+Now let's call one interpretation "a",
+
+00:15:32.160 --> 00:15:36.159
+and that interpretation essentially
+
+00:15:36.160 --> 00:15:39.319
+is this child of that node "a"
+
+00:15:39.320 --> 00:15:41.799
+and that says that the moon
+
+00:15:41.800 --> 00:15:43.999
+is holding the telescope.
+
+00:15:44.000 --> 00:15:46.359
+Now we can create another representation "b"
+
+00:15:46.360 --> 00:15:53.919
+where we capture the other interpretation,
+
+00:15:53.920 --> 00:15:59.959
+where this, the act, the moon or--I am actually
+
+00:15:59.960 --> 00:16:00.519
+holding the telescope,
+
+00:16:00.520 --> 00:16:06.799
+and watching the moon using it.
+
+00:16:06.800 --> 00:16:09.199
+So now we have two separate interpretations
+
+00:16:09.200 --> 00:16:11.679
+in the same structure,
+
+00:16:11.680 --> 00:16:15.519
+and all we do--we're able to do is with this,
+
+00:16:15.520 --> 00:16:18.159
+with very quick key strokes now...
+
+00:16:18.160 --> 00:16:22.439
+While we are at it, let's add another interesting thing,
+
+00:16:22.440 --> 00:16:25.159
+this node that represents "I":
+
+00:16:25.160 --> 00:16:28.919
+"He." It can be "She".
+
+00:16:28.920 --> 00:16:35.759
+It can be "the children," or it can be "The people".
+
+00:16:35.760 --> 00:16:45.039
+Basically, any entity that has the capability to "see"
+
+00:16:45.040 --> 00:16:53.359
+can be substituted in this particular node.
+
+00:16:53.360 --> 00:16:57.399
+Let's see what we have here now.
+
+00:16:57.400 --> 00:17:01.239
+We just are getting sort of a zoom view
+
+00:17:01.240 --> 00:17:04.599
+of the entire structure, what we created,
+
+00:17:04.600 --> 00:17:08.039
+and essentially you can see that
+
+00:17:08.040 --> 00:17:11.879
+by just, you know, using a few keystrokes,
+
+00:17:11.880 --> 00:17:17.839
+we were able to capture two different interpretations
+
+00:17:17.840 --> 00:17:20.879
+of a a simple sentence,
+
+00:17:20.880 --> 00:17:23.759
+and they are also able to add
+
+00:17:23.760 --> 00:17:27.799
+these alternate pieces of information
+
+00:17:27.800 --> 00:17:30.559
+that could help machine learning algorithms
+
+00:17:30.560 --> 00:17:32.439
+generalize better.
+
+00:17:32.440 --> 00:17:36.239
+All right.
+
+NOTE Different readings
+
+00:17:36.240 --> 00:17:40.359
+Now, let's look at the next thing. So in a sense,
+
+00:17:40.360 --> 00:17:46.679
+we can use this power of functional data structures
+
+00:17:46.680 --> 00:17:50.239
+to represent various potentially conflicting
+
+00:17:50.240 --> 00:17:55.559
+and structural readings of that piece of text.
+
+00:17:55.560 --> 00:17:58.079
+In addition to that, we can also create more texts,
+
+00:17:58.080 --> 00:17:59.799
+each with different structure,
+
+00:17:59.800 --> 00:18:01.559
+and have them all in the same place.
+
+00:18:01.560 --> 00:18:04.239
+This allows us to address the interpretation
+
+00:18:04.240 --> 00:18:06.879
+of a static sentence that might be occurring in the world,
+
+00:18:06.880 --> 00:18:09.639
+while simultaneously inserting information
+
+00:18:09.640 --> 00:18:11.519
+that would add more value to it.
+
+00:18:11.520 --> 00:18:14.999
+This makes the enrichment process also very efficient.
+
+00:18:15.000 --> 00:18:19.519
+Additionally, we can envision
+
+00:18:19.520 --> 00:18:23.999
+a power user of the future, or present,
+
+00:18:24.000 --> 00:18:27.479
+who can not only annotate a span,
+
+00:18:27.480 --> 00:18:31.279
+but also edit the information in situ
+
+00:18:31.280 --> 00:18:34.639
+in a way that would help machine algorithms
+
+00:18:34.640 --> 00:18:36.879
+generalize better by making more efficient use
+
+00:18:36.880 --> 00:18:37.719
+of the annotations.
+
+00:18:37.720 --> 00:18:41.519
+So together, Emacs and Org mode can speed up
+
+00:18:41.520 --> 00:18:42.959
+the enrichment of the signals
+
+00:18:42.960 --> 00:18:44.519
+in a way that allows us
+
+00:18:44.520 --> 00:18:47.719
+to focus on certain aspects and ignore others.
+
+00:18:47.720 --> 00:18:50.839
+Extremely complex landscape of rich structures
+
+00:18:50.840 --> 00:18:53.039
+can be captured consistently,
+
+00:18:53.040 --> 00:18:55.639
+in a fashion that allows computers
+
+00:18:55.640 --> 00:18:56.759
+to understand language.
+
+00:18:56.760 --> 00:19:00.879
+We can then build tools to enhance the tasks
+
+00:19:00.880 --> 00:19:03.319
+that we do in our everyday life.
+
+00:19:03.320 --> 00:19:10.759
+YAMR is acronym, or the file's type or specification
+
+00:19:10.760 --> 00:19:15.239
+that we are creating to capture this new
+
+00:19:15.240 --> 00:19:17.679
+rich representation.
+
+NOTE Spontaneous speech
+
+00:19:17.680 --> 00:19:21.959
+We'll now look at an example of spontaneous speech
+
+00:19:21.960 --> 00:19:24.799
+that occurs in spoken conversations.
+
+00:19:24.800 --> 00:19:28.599
+Conversations frequently contain errors in speech:
+
+00:19:28.600 --> 00:19:30.799
+interruptions, disfluencies,
+
+00:19:30.800 --> 00:19:33.959
+verbal sounds such as cough or laugh,
+
+00:19:33.960 --> 00:19:35.039
+and other noises.
+
+00:19:35.040 --> 00:19:38.199
+In this sense, spontaneous speech is similar
+
+00:19:38.200 --> 00:19:39.799
+to a functional data stream.
+
+00:19:39.800 --> 00:19:42.759
+We cannot take back words that come out of our mouth,
+
+00:19:42.760 --> 00:19:47.239
+but we tend to make mistakes, and we correct ourselves
+
+00:19:47.240 --> 00:19:49.039
+as soon as we realize that we have made--
+
+00:19:49.040 --> 00:19:50.679
+we have misspoken.
+
+00:19:50.680 --> 00:19:53.159
+This process manifests through a combination
+
+00:19:53.160 --> 00:19:56.279
+of a handful of mechanisms, including immediate correction
+
+00:19:56.280 --> 00:20:00.959
+after an error, and we do this unconsciously.
+
+00:20:00.960 --> 00:20:02.719
+Computers, on the other hand,
+
+00:20:02.720 --> 00:20:06.639
+must be taught to understand these cases.
+
+00:20:06.640 --> 00:20:12.799
+What we see here is a example document or outline,
+
+00:20:12.800 --> 00:20:18.119
+or part of a document that illustrates
+
+00:20:18.120 --> 00:20:22.919
+various different aspects of the representation.
+
+00:20:22.920 --> 00:20:25.919
+We don't have a lot of time to go through
+
+00:20:25.920 --> 00:20:28.239
+many of the details.
+
+00:20:28.240 --> 00:20:31.759
+I would highly encourage you to play a...
+
+00:20:31.760 --> 00:20:39.159
+I'm planning on making some videos, or ascii cinemas,
+
+00:20:39.160 --> 00:20:42.559
+that I'll be posting, and you can,
+
+00:20:42.560 --> 00:20:46.759
+if you're interested, you can go through those.
+
+00:20:46.760 --> 00:20:50.359
+The idea here is to try to do
+
+00:20:50.360 --> 00:20:54.599
+a slightly more complex use case.
+
+00:20:54.600 --> 00:20:57.639
+But again, given the time constraint
+
+00:20:57.640 --> 00:21:00.279
+and the amount of information
+
+00:21:00.280 --> 00:21:01.519
+that needs to fit in the screen,
+
+00:21:01.520 --> 00:21:05.559
+this may not be very informative,
+
+00:21:05.560 --> 00:21:08.399
+but at least it will give you some idea
+
+00:21:08.400 --> 00:21:10.439
+of what can be possible.
+
+00:21:10.440 --> 00:21:13.279
+And in this particular case, what you're seeing is that
+
+00:21:13.280 --> 00:21:18.319
+there is a sentence which is "What I'm I'm tr- telling now."
+
+00:21:18.320 --> 00:21:21.159
+Essentially, there is a repetition of the word "I'm",
+
+00:21:21.160 --> 00:21:23.279
+and then there is a partial word
+
+00:21:23.280 --> 00:21:25.159
+that somebody tried to say "telling",
+
+00:21:25.160 --> 00:21:29.599
+but started saying "tr-", and then corrected themselves
+
+00:21:29.600 --> 00:21:30.959
+and said, "telling now."
+
+00:21:30.960 --> 00:21:39.239
+So in this case, you see, we can capture words
+
+00:21:39.240 --> 00:21:44.919
+or a sequence of words, or a sequence of tokens.
+
+00:21:44.920 --> 00:21:52.279
+One thing to... An interesting thing to note is that in NLP,
+
+00:21:52.280 --> 00:21:55.319
+sometimes we have to break typically
+
+00:21:55.320 --> 00:22:01.199
+words that don't have spaces into two separate words,
+
+00:22:01.200 --> 00:22:04.119
+especially contractions like "I'm",
+
+00:22:04.120 --> 00:22:08.199
+so the syntactic parser needs needs two separate nodes.
+
+00:22:08.200 --> 00:22:11.199
+But anyway, so I'll... You can see that here.
+
+00:22:11.200 --> 00:22:15.759
+The other... This view. What this view shows is that
+
+00:22:15.760 --> 00:22:19.759
+with each of the nodes in the sentence
+
+00:22:19.760 --> 00:22:23.079
+or in the representation,
+
+00:22:23.080 --> 00:22:26.079
+you can have a lot of different properties
+
+00:22:26.080 --> 00:22:27.559
+that you can attach to them,
+
+00:22:27.560 --> 00:22:30.119
+and these properties are typically hidden,
+
+00:22:30.120 --> 00:22:32.719
+like you saw in the earlier slide.
+
+00:22:32.720 --> 00:22:35.599
+But you can make use of all these properties
+
+00:22:35.600 --> 00:22:39.439
+to do various kind of searches and filtering.
+
+00:22:39.440 --> 00:22:43.519
+And on the right hand side here--
+
+00:22:43.520 --> 00:22:48.799
+this is actually not a legitimate syntax--
+
+00:22:48.800 --> 00:22:51.279
+but on the right are descriptions
+
+00:22:51.280 --> 00:22:53.479
+of what each of these represent.
+
+00:22:53.480 --> 00:22:57.319
+All the information is also available in the article.
+
+00:22:57.320 --> 00:23:04.279
+You can see there... It shows how much rich context
+
+00:23:04.280 --> 00:23:05.879
+you can capture.
+
+00:23:05.880 --> 00:23:08.799
+This is just a closer snapshot
+
+00:23:08.800 --> 00:23:10.159
+of the properties on the node,
+
+00:23:10.160 --> 00:23:13.119
+and you can see we can have things like,
+
+00:23:13.120 --> 00:23:14.799
+whether the word is a token or not,
+
+00:23:14.800 --> 00:23:17.359
+or that it's incomplete, whether some words
+
+00:23:17.360 --> 00:23:19.959
+might want to be filtered out for parsing,
+
+00:23:19.960 --> 00:23:23.039
+and we can say this: PARSE_IGNORE,
+
+00:23:23.040 --> 00:23:25.519
+or some words or restart markers...
+
+00:23:25.520 --> 00:23:29.239
+We can mark, add a RESTART_MARKER, or sometimes,
+
+00:23:29.240 --> 00:23:31.999
+some of these might have durations. Things like that.
+
+NOTE Editing properties in column view
+
+00:23:32.000 --> 00:23:38.799
+The other fascinating thing of this representation
+
+00:23:38.800 --> 00:23:42.599
+is that you can edit properties in the column view.
+
+00:23:42.600 --> 00:23:45.399
+And suddenly, you have this tabular data structure
+
+00:23:45.400 --> 00:23:48.879
+combined with the hierarchical data structure.
+
+00:23:48.880 --> 00:23:53.119
+And as you can--you may not be able to see it here,
+
+00:23:53.120 --> 00:23:56.879
+but what has also happened here is that
+
+00:23:56.880 --> 00:24:01.159
+some of the tags have been inherited
+
+00:24:01.160 --> 00:24:02.479
+from the earlier nodes.
+
+00:24:02.480 --> 00:24:07.919
+And so you get a much fuller picture of things.
+
+00:24:07.920 --> 00:24:13.919
+Essentially you, can filter out things
+
+00:24:13.920 --> 00:24:15.319
+that you want to process,
+
+00:24:15.320 --> 00:24:20.279
+process them, and then reintegrate it into the whole.
+
+NOTE Conclusion
+
+00:24:20.280 --> 00:24:25.479
+So, in conclusion, today we have proposed and demonstrated
+
+00:24:25.480 --> 00:24:27.559
+the use of an architecture (GRAIL),
+
+00:24:27.560 --> 00:24:31.319
+which allows the representation, manipulation,
+
+00:24:31.320 --> 00:24:34.759
+and aggregation of rich linguistic structures
+
+00:24:34.760 --> 00:24:36.519
+in a systematic fashion.
+
+00:24:36.520 --> 00:24:41.359
+We have shown how GRAIL advances the tools
+
+00:24:41.360 --> 00:24:44.599
+available for building machine learning models
+
+00:24:44.600 --> 00:24:46.879
+that simulate understanding.
+
+00:24:46.880 --> 00:24:51.679
+Thank you very much for your time and attention today.
+
+00:24:51.680 --> 00:24:54.639
+My contact information is on this slide.
+
+00:24:54.640 --> 00:25:02.599
+If you are interested in an additional example
+
+00:25:02.600 --> 00:25:05.439
+that demonstrates the representation
+
+00:25:05.440 --> 00:25:08.039
+of speech and written text together,
+
+00:25:08.040 --> 00:25:10.719
+please continue watching.
+
+00:25:10.720 --> 00:25:12.199
+Otherwise, you can stop here
+
+00:25:12.200 --> 00:25:15.279
+and enjoy the rest of the conference.
+
+NOTE Bonus material
+
+00:25:15.280 --> 00:25:39.079
+Welcome to the bonus material.
+
+00:25:39.080 --> 00:25:43.959
+I'm glad for those of you who are stuck around.
+
+00:25:43.960 --> 00:25:46.559
+We are now going to examine an instance
+
+00:25:46.560 --> 00:25:49.159
+of speech and text signals together
+
+00:25:49.160 --> 00:25:51.479
+that produce multiple layers.
+
+00:25:51.480 --> 00:25:54.839
+When we have--when we take a spoken conversation
+
+00:25:54.840 --> 00:25:58.719
+and use the best language processing models available,
+
+00:25:58.720 --> 00:26:00.679
+we suddenly hit a hard spot
+
+00:26:00.680 --> 00:26:03.239
+because the tools are typically not trained
+
+00:26:03.240 --> 00:26:05.359
+to filter out the unnecessary cruft
+
+00:26:05.360 --> 00:26:07.559
+in order to automatically interpret
+
+00:26:07.560 --> 00:26:09.559
+the part of what is being said
+
+00:26:09.560 --> 00:26:11.799
+that is actually relevant.
+
+00:26:11.800 --> 00:26:14.639
+Over time, language researchers
+
+00:26:14.640 --> 00:26:17.719
+have created many interdependent layers of annotations,
+
+00:26:17.720 --> 00:26:21.039
+yet the assumptions underlying them are seldom the same.
+
+00:26:21.040 --> 00:26:25.039
+Piecing together such related but disjointed annotations
+
+00:26:25.040 --> 00:26:28.039
+on their predictions poses a huge challenge.
+
+00:26:28.040 --> 00:26:30.719
+This is another place where we can leverage
+
+00:26:30.720 --> 00:26:33.119
+the data model underlying the Emacs editor,
+
+00:26:33.120 --> 00:26:35.359
+along with the structural editing capabilities
+
+00:26:35.360 --> 00:26:38.519
+of Org mode to improve current tools.
+
+00:26:38.520 --> 00:26:42.839
+Let's take this very simple looking utterance.
+
+00:26:42.840 --> 00:26:48.039
+"Um \{lipsmack\} and that's it. (\{laugh\})"
+
+00:26:48.040 --> 00:26:50.319
+Looks like the person-- so this is--
+
+00:26:50.320 --> 00:26:54.519
+what you are seeing here is a transcript of an audio signal
+
+00:26:54.520 --> 00:27:00.759
+that has a lip smack and a laugh as part of it,
+
+00:27:00.760 --> 00:27:04.199
+and there is also a "Um" like interjection.
+
+00:27:04.200 --> 00:27:08.199
+So this has a few interesting noises
+
+00:27:08.200 --> 00:27:13.999
+and specific things that would be illustrative
+
+00:27:14.000 --> 00:27:20.479
+of what we are going to, how we are going to represent it.
+
+NOTE Syntactic analysis
+
+00:27:20.480 --> 00:27:25.839
+Okay. So let's say you want to have
+
+00:27:25.840 --> 00:27:28.879
+a syntactic analysis of this sentence or utterance.
+
+00:27:28.880 --> 00:27:30.959
+One common technique people use
+
+00:27:30.960 --> 00:27:32.879
+is just to remove the cruft, and, you know,
+
+00:27:32.880 --> 00:27:35.079
+write some rules, clean up the utterance,
+
+00:27:35.080 --> 00:27:36.719
+make it look like it's proper English,
+
+00:27:36.720 --> 00:27:40.239
+and then, you know, tokenize it,
+
+00:27:40.240 --> 00:27:43.079
+and basically just use standard tools to process it.
+
+00:27:43.080 --> 00:27:47.279
+But in that process, they end up eliminating
+
+00:27:47.280 --> 00:27:51.119
+valid pieces of signal that have meaning to others
+
+00:27:51.120 --> 00:27:52.799
+studying different phenomena of language.
+
+00:27:52.800 --> 00:27:56.479
+Here you have the rich transcript,
+
+00:27:56.480 --> 00:28:00.119
+the input to the syntactic parser.
+
+00:28:00.120 --> 00:28:05.919
+As you can see, there is a little tokenization happening
+
+00:28:05.920 --> 00:28:07.199
+where you'll be inserting space
+
+00:28:07.200 --> 00:28:12.119
+between "that" and the contracted is ('s),
+
+00:28:12.120 --> 00:28:15.599
+and between the period and the "it,"
+
+00:28:15.600 --> 00:28:18.199
+and the output of the syntactic parser is shown below.
+
+00:28:18.200 --> 00:28:21.639
+which (surprise) is a S-expression.
+
+00:28:21.640 --> 00:28:24.919
+Like I said, the parse trees, when they were created,
+
+00:28:24.920 --> 00:28:29.799
+and still largely when they are used, are S-expressions,
+
+00:28:29.800 --> 00:28:32.999
+and most of the viewers here
+
+00:28:33.000 --> 00:28:35.119
+should not have much problem reading it.
+
+00:28:35.120 --> 00:28:37.279
+You can see this tree structure
+
+00:28:37.280 --> 00:28:39.279
+of this syntactic parser here.
+
+NOTE Forced alignment
+
+00:28:39.280 --> 00:28:40.919
+Now let's say you want to integrate
+
+00:28:40.920 --> 00:28:44.479
+phonetic information or phonetic layer
+
+00:28:44.480 --> 00:28:49.119
+that's in the audio signal, and do some analysis.
+
+00:28:49.120 --> 00:28:57.519
+Now, it would need you to do a few-- take a few steps.
+
+00:28:57.520 --> 00:29:01.679
+First, you would need to align the transcript
+
+00:29:01.680 --> 00:29:06.479
+with the audio. This process is called forced alignment,
+
+00:29:06.480 --> 00:29:10.399
+where you already know what the transcript is,
+
+00:29:10.400 --> 00:29:14.599
+and you have the audio, and you can get a good alignment
+
+00:29:14.600 --> 00:29:17.599
+using both pieces of information.
+
+00:29:17.600 --> 00:29:20.119
+And this is typically a technique that is used to
+
+00:29:20.120 --> 00:29:23.079
+create training data for training
+
+00:29:23.080 --> 00:29:25.839
+automatic speech recognizers.
+
+00:29:25.840 --> 00:29:29.639
+One interesting thing is that in order to do
+
+00:29:29.640 --> 00:29:32.879
+this forced alignment, you have to keep
+
+00:29:32.880 --> 00:29:35.799
+the non-speech events in transcript,
+
+00:29:35.800 --> 00:29:39.079
+because they consume some audio signal,
+
+00:29:39.080 --> 00:29:41.399
+and if you don't have that signal,
+
+00:29:41.400 --> 00:29:44.399
+the alignment process doesn't know exactly...
+
+00:29:44.400 --> 00:29:45.759
+you know, it doesn't do a good job,
+
+00:29:45.760 --> 00:29:50.039
+because it needs to align all parts of the signal
+
+00:29:50.040 --> 00:29:54.999
+with something, either pause or silence or noise or words.
+
+00:29:55.000 --> 00:29:59.719
+Interestingly, punctuations really don't factor in,
+
+00:29:59.720 --> 00:30:01.559
+because we don't speak in punctuations.
+
+00:30:01.560 --> 00:30:04.239
+So one of the things that you need to do
+
+00:30:04.240 --> 00:30:05.679
+is remove most of the punctuations,
+
+00:30:05.680 --> 00:30:08.039
+although you'll see there are some punctuations
+
+00:30:08.040 --> 00:30:12.599
+that can be kept, or that are to be kept.
+
+NOTE Alignment before tokenization
+
+00:30:12.600 --> 00:30:15.319
+And the other thing is that the alignment has to be done
+
+00:30:15.320 --> 00:30:20.159
+before tokenization, as it impacts pronunciation.
+
+00:30:20.160 --> 00:30:24.399
+To show an example: Here you see "that's".
+
+00:30:24.400 --> 00:30:26.919
+When it's one word,
+
+00:30:26.920 --> 00:30:31.959
+it has a slightly different pronunciation
+
+00:30:31.960 --> 00:30:35.679
+than when it is two words, which is "that is",
+
+00:30:35.680 --> 00:30:38.399
+like you can see "is." And so,
+
+00:30:38.400 --> 00:30:44.279
+if you split the tokens or split the words
+
+00:30:44.280 --> 00:30:48.119
+in order for syntactic parser to process it,
+
+00:30:48.120 --> 00:30:51.599
+you would end up getting the wrong phonetic analysis.
+
+00:30:51.600 --> 00:30:54.239
+And if you have--if you process it
+
+00:30:54.240 --> 00:30:55.319
+through the phonetic analysis,
+
+00:30:55.320 --> 00:30:59.159
+and you don't know how to integrate it
+
+00:30:59.160 --> 00:31:02.719
+with the tokenized syntax, you can, you know,
+
+00:31:02.720 --> 00:31:07.519
+that can be pretty tricky. And a lot of time,
+
+00:31:07.520 --> 00:31:10.759
+people write one-off pieces of code that handle these,
+
+00:31:10.760 --> 00:31:14.279
+but the idea here is to try to have a general architecture
+
+00:31:14.280 --> 00:31:17.239
+that seamlessly integrates all these pieces.
+
+00:31:17.240 --> 00:31:21.319
+Then you do the syntactic parsing of the remaining tokens.
+
+00:31:21.320 --> 00:31:24.799
+Then you align the data and the two annotations,
+
+00:31:24.800 --> 00:31:27.959
+and then integrate the two layers.
+
+00:31:27.960 --> 00:31:31.359
+Once that is done, then you can do all kinds of
+
+00:31:31.360 --> 00:31:33.919
+interesting analysis, and test various hypotheses
+
+00:31:33.920 --> 00:31:35.279
+and generate the statistics,
+
+00:31:35.280 --> 00:31:39.359
+but without that you only are dealing
+
+00:31:39.360 --> 00:31:42.879
+with one or the other part.
+
+NOTE Layers
+
+00:31:42.880 --> 00:31:48.319
+Let's just take a quick look at how each of the layers
+
+00:31:48.320 --> 00:31:51.159
+that are involved look like.
+
+00:31:51.160 --> 00:31:56.719
+So this is "Um \{lipsmack\}, and that's it. \{laugh\}"
+
+00:31:56.720 --> 00:32:00.159
+This is the transcript, and on the right hand side,
+
+00:32:00.160 --> 00:32:04.199
+you see the same thing as a transcript
+
+00:32:04.200 --> 00:32:06.239
+listed in a vertical in a column.
+
+00:32:06.240 --> 00:32:08.199
+You'll see why, in just a second.
+
+00:32:08.200 --> 00:32:09.879
+And there are some place--
+
+00:32:09.880 --> 00:32:11.279
+there are some rows that are empty,
+
+00:32:11.280 --> 00:32:15.079
+some rows that are wider than the others, and we'll see why.
+
+00:32:15.080 --> 00:32:19.319
+The next is the tokenized sentence
+
+00:32:19.320 --> 00:32:20.959
+where you have space added,
+
+00:32:20.960 --> 00:32:23.599
+you know space between these two tokens:
+
+00:32:23.600 --> 00:32:26.599
+"that" and the apostrophe "s" ('s),
+
+00:32:26.600 --> 00:32:28.079
+and the "it" and the "period".
+
+00:32:28.080 --> 00:32:30.679
+And you see on the right hand side
+
+00:32:30.680 --> 00:32:33.559
+that the tokens have attributes.
+
+00:32:33.560 --> 00:32:36.439
+So there is a token index, and there are 1, 2,
+
+00:32:36.440 --> 00:32:38.839
+you know 0, 1, 2, 3, 4, 5 tokens,
+
+00:32:38.840 --> 00:32:41.479
+and each token has a start and end character,
+
+00:32:41.480 --> 00:32:45.799
+and space (sp) also has a start and end character,
+
+00:32:45.800 --> 00:32:50.399
+and space is represented by a "sp". And there are
+
+00:32:50.400 --> 00:32:54.319
+these other things that we removed,
+
+00:32:54.320 --> 00:32:56.239
+like the "\{LS\}" which is for "\{lipsmack\}"
+
+00:32:56.240 --> 00:32:59.399
+and "\{LG\}" which is "\{laugh\}" are showing grayed out,
+
+00:32:59.400 --> 00:33:02.439
+and you'll see why some of these things are grayed out
+
+00:33:02.440 --> 00:33:03.399
+in a little bit.
+
+00:33:03.400 --> 00:33:11.919
+This is what the forced alignment tool produces.
+
+00:33:11.920 --> 00:33:17.159
+Basically, it takes the transcript,
+
+00:33:17.160 --> 00:33:19.159
+and this is the transcript
+
+00:33:19.160 --> 00:33:24.119
+that has slightly different symbols,
+
+00:33:24.120 --> 00:33:26.239
+because different tools use different symbols
+
+00:33:26.240 --> 00:33:28.159
+and their various configurational things.
+
+00:33:28.160 --> 00:33:33.679
+But this is what is used to get an alignment
+
+00:33:33.680 --> 00:33:36.039
+or time alignment with phones.
+
+00:33:36.040 --> 00:33:40.079
+So this column shows the phones, and so each word...
+
+00:33:40.080 --> 00:33:43.879
+So, for example, "and" has been aligned with these phones,
+
+00:33:43.880 --> 00:33:46.879
+and these on the start and end
+
+00:33:46.880 --> 00:33:52.959
+are essentially temporal or time stamps that it aligned--
+
+00:33:52.960 --> 00:33:54.279
+that has been aligned to it.
+
+00:33:54.280 --> 00:34:00.759
+Interestingly, sometimes we don't really have any pause
+
+00:34:00.760 --> 00:34:05.159
+or any time duration between some words
+
+00:34:05.160 --> 00:34:08.199
+and those are highlighted as gray here.
+
+00:34:08.200 --> 00:34:12.759
+See, there's this space... Actually
+
+00:34:12.760 --> 00:34:17.799
+it does not have any temporal content,
+
+00:34:17.800 --> 00:34:21.319
+whereas this other space has some duration.
+
+00:34:21.320 --> 00:34:24.839
+So the ones that have some duration are captured,
+
+00:34:24.840 --> 00:34:29.519
+while the others are the ones that in the earlier diagram
+
+00:34:29.520 --> 00:34:31.319
+we saw were left out.
+
+NOTE Variations
+
+00:34:31.320 --> 00:34:37.639
+And the aligner actually produces multiple files.
+
+00:34:37.640 --> 00:34:44.399
+One of the files has a different, slightly different
+
+00:34:44.400 --> 00:34:46.679
+variation on the same information,
+
+00:34:46.680 --> 00:34:49.999
+and in this case, you can see
+
+00:34:50.000 --> 00:34:52.399
+that the punctuation is missing,
+
+00:34:52.400 --> 00:34:57.599
+and the punctuation is, you know, deliberately missing,
+
+00:34:57.600 --> 00:35:02.279
+because there is no time associated with it,
+
+00:35:02.280 --> 00:35:06.439
+and you see that it's not the tokenized sentence--
+
+00:35:06.440 --> 00:35:17.119
+a tokenized word. This... Now it gives you a full table,
+
+00:35:17.120 --> 00:35:21.239
+and you can't really look into it very carefully.
+
+00:35:21.240 --> 00:35:25.879
+But we can focus on the part that seems legible,
+
+00:35:25.880 --> 00:35:28.559
+or, you know, properly written sentence,
+
+00:35:28.560 --> 00:35:32.879
+process it and reincorporate it back into the whole.
+
+00:35:32.880 --> 00:35:35.879
+So if somebody wants to look at, for example,
+
+00:35:35.880 --> 00:35:39.679
+how many pauses the person made while they were talking,
+
+00:35:39.680 --> 00:35:42.919
+And they can actually measure the pause, the number,
+
+00:35:42.920 --> 00:35:46.279
+the duration, and make connections between that
+
+00:35:46.280 --> 00:35:49.639
+and the rich syntactic structure that is being produced.
+
+00:35:49.640 --> 00:35:57.279
+And in order to do that, you have to get these layers
+
+00:35:57.280 --> 00:35:59.039
+to align with each other,
+
+00:35:59.040 --> 00:36:04.359
+and this table is just a tabular representation
+
+00:36:04.360 --> 00:36:08.679
+of the information that we'll be storing in the YAMR file.
+
+00:36:08.680 --> 00:36:11.719
+Congratulations! You have reached
+
+00:36:11.720 --> 00:36:13.479
+the end of this demonstration.
+
+00:36:13.480 --> 00:36:17.000
+Thank you for your time and attention.
diff --git a/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.vtt b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.vtt
new file mode 100644
index 00000000..b100ee27
--- /dev/null
+++ b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.vtt
@@ -0,0 +1,815 @@
+WEBVTT
+
+00:00.000 --> 00:04.800
+say everyone can say hi to Sasha. Oh, we are recording now. Okay, great. But do say thanks
+
+00:04.800 --> 00:10.160
+to Sasha for being everywhere at once trying to make sure that the stream is working properly.
+
+00:10.160 --> 00:12.560
+She has the magic touch, yes, definitely.
+
+00:13.920 --> 00:18.640
+All right, Vala, sorry to do that. But now the floor is yours. You can take as many questions
+
+00:18.640 --> 00:22.720
+as you want. And I'll be making humorous comments when I'm not busy putting out fires in the
+
+00:22.720 --> 00:30.160
+background. Okay. All right. Thanks, folks. So thank you for the questions. I'll take one by one.
+
+00:30.160 --> 00:35.600
+How do you link the notes together so you could search through them in the future? Okay, this
+
+00:36.320 --> 00:44.560
+video I made before, or rather the experience that I shared with you was before I got into
+
+00:44.560 --> 00:51.600
+linking of notes and how to make sense of it. I'm still I mean, I'm thankful for guys like Leo for
+
+00:51.600 --> 00:59.120
+putting our room together. However, yes, you can take a bow. However, I'm still in the infancy of
+
+00:59.120 --> 01:07.200
+trying to link these topics. So the suggestion I have is once you convert your handwritten text
+
+01:07.200 --> 01:15.520
+into text, so handwritten stuff from your notebook into text, or if you write it, if you have a
+
+01:15.520 --> 01:24.640
+writing device, and you can convert it into text, input it into org rom and link it the way you
+
+01:24.640 --> 01:34.000
+would do it. So I have not yet gone into it. But having said that, I've started doing it like a
+
+01:34.000 --> 01:39.840
+week ago, I started linking these handwritten notes, which are converted into text, and then
+
+01:39.840 --> 01:47.760
+can be linked to any other note that you want. So that's that would be my response to the linking
+
+01:47.760 --> 01:54.640
+part. So which actually leads to the next question, is it necessary to OCR your handwriting?
+
+01:55.760 --> 02:00.720
+This is a necessary step, you have to do optical character recognition, as in convert all the
+
+02:00.720 --> 02:10.640
+handwritten stuff into text, because otherwise, indexing and linking becomes a problem later on.
+
+02:10.640 --> 02:16.240
+If it's only you going through the handwritten notes, so that you browse it and read it when
+
+02:16.240 --> 02:23.760
+you want it, that's okay. So you don't have to worry about OCR, just input the JPEG, the PNG,
+
+02:23.760 --> 02:31.600
+or whatever file you use, format you use, input it into under the org mode headline, or the org
+
+02:31.600 --> 02:40.720
+rom file, and you should be good to go. However, if you want the other stuff, then OCR becomes a
+
+02:40.720 --> 02:50.960
+necessity. So I'm unfamiliar with any package that does the OCR conversion inside of the Emacs
+
+02:50.960 --> 03:02.880
+ecosystem. So I use tools like OneNote, or I think Google Keep does that. I don't know of any other
+
+03:02.880 --> 03:10.240
+free slash open source tools which do that. I'm not familiar, but I use an external tool to convert
+
+03:10.240 --> 03:16.800
+handwritten text into notes, if you want the link again, read rating, if you want the linking and
+
+03:16.800 --> 03:24.560
+the indexing. If not, for me, sometimes screenshots and handwritten notes have to go together,
+
+03:24.560 --> 03:31.360
+so that I can find out, okay, this team or this student was talking about his project,
+
+03:31.360 --> 03:36.880
+or her project, and this is the screenshot of their presentation, and I write down my notes,
+
+03:36.880 --> 03:44.560
+and it goes along with that. That was for me a key to have that together, and not just hand
+
+03:44.560 --> 03:49.600
+typewritten notes, because I have no recollection later on, but handwritten notes I seem to recall
+
+03:49.600 --> 03:54.160
+better, and that's the whole idea of how to integrate. I was breaking my head over it.
+
+03:55.200 --> 04:01.840
+So those are the two responses to those two questions. What about searching notes? Notes
+
+04:01.840 --> 04:09.360
+to text while being offline? Oh my god, this is a related one as well. So yes, it is going to be
+
+04:09.360 --> 04:15.520
+searching has to be linked. If you want the searching facility, it has to be converted text.
+
+04:15.520 --> 04:22.320
+There are no two ways to that right now. Proprietary software like Google Keep seems to
+
+04:22.320 --> 04:31.120
+manage it. I think others, OneNote also, Dropbox also says that they can do it. I haven't tried it
+
+04:31.120 --> 04:37.600
+there, searching it inside these systems to look for handwritten text, because I don't use that for
+
+04:37.600 --> 04:44.160
+managing my projects or making sense of what I've written down. So when it comes to
+
+04:44.160 --> 04:53.200
+doing all those tasks, I use Org Mode. So I would say you absolutely mandatory for us to convert
+
+04:53.200 --> 05:00.160
+this, unless I've made that appeal at the end of my talk, saying if Org Mode, Emacs, Org Mode
+
+05:00.160 --> 05:06.080
+community can put their brains together. I don't know if I can help, but if you want me for
+
+05:06.080 --> 05:12.640
+testing your package, I certainly put my hands up for this for sure. I can do that. I'm keen on
+
+05:12.640 --> 05:21.680
+trying that out. I hope that answered the third question. These articles on, those articles are
+
+05:21.680 --> 05:28.960
+not taking seems interesting. Could you get a link for them? I'll definitely drop it in the Etherpad
+
+05:28.960 --> 05:38.800
+after this recording is done for sure. I will leave it there. It is my good friend in France
+
+05:38.800 --> 05:44.320
+who shared that with me saying when he saw the title of my talk, he sent me a whole bunch of
+
+05:44.320 --> 05:50.000
+articles saying, hey, this seems to support what you told me. And I have sort of shown you the
+
+05:50.000 --> 06:00.080
+screenshots in the video, but I'll definitely leave some of these links in the Etherpad after this.
+
+06:00.080 --> 06:05.360
+Oh yeah, I've used, the next question is, have you looked at taking handwritten notes on a tablet
+
+06:05.360 --> 06:13.920
+like, I don't know how to say that, journal with an X plus plus? So yes, I have started using it
+
+06:13.920 --> 06:22.560
+again. The only tools I used were OneNote and Google Keep because those were the only ones
+
+06:22.560 --> 06:30.080
+which would allow for writing using my stylus. I'm sure there are other apps which can do it,
+
+06:30.080 --> 06:35.600
+but do they convert it into text and how easy is it to input it into org mode is something that,
+
+06:35.600 --> 06:44.000
+so for now, the Dropbox method for me was I write notes, I take a mobile camera, take a picture,
+
+06:44.000 --> 06:51.440
+upload it to Dropbox. Why Dropbox? Because it allows JPEG to be uploaded. Whereas PDF,
+
+06:51.440 --> 07:00.080
+I find it very cumbersome from handwriting to get it in here. So JPEG, I can input it into
+
+07:00.080 --> 07:06.320
+org mode, I'm sorry, OneNote and that converts it into text and then I take it and put it into,
+
+07:07.200 --> 07:15.840
+the inbox has the image as well as the converted text. So I put it into my system,
+
+07:15.840 --> 07:22.240
+the org mode system. So that's how my workflow really is. I don't know if I answered that
+
+07:22.240 --> 07:30.720
+question very well. I've used X journal, but not a whole lot to give you intelligent advice.
+
+07:32.160 --> 07:36.560
+Have you tried out remarkable device to take handwritten notes as well? I haven't figured out
+
+07:36.560 --> 07:43.280
+how to link the files back into org mode in a constructive way yet. Okay, so yes, I've heard
+
+07:43.280 --> 07:50.160
+of remarkable devices. There's another one called Books, if I'm not wrong, and Amazon has also come
+
+07:50.160 --> 07:58.240
+up with a writing, I call it the writing Kindle. I don't know what it's called, a smarter name for
+
+07:58.240 --> 08:08.720
+that. So these devices do exist, but I'm not sure if they convert it into text and if they can put
+
+08:08.720 --> 08:15.760
+it in a repository, which is accessible on your computer, where you can import it into org mode.
+
+08:15.760 --> 08:24.560
+I'm not so sure about those things. So linking that would be nice if you can have access to
+
+08:24.560 --> 08:31.600
+where your Emacs org mode ecosystem is. For me, Dropbox works very well because it's on my mobile
+
+08:31.600 --> 08:38.480
+phone, smartphone, as well as on my computer. So the linking happens and I can just push it all
+
+08:38.480 --> 08:46.160
+into my org mode inbox and process them and refile the notes or do all the good stuff linking. If I
+
+08:46.160 --> 08:52.000
+have the text, I can link them, do all that I can. I can certainly do that. So that's my answer to
+
+08:52.880 --> 09:00.000
+the... where did it go? Remarkable stuff. That question is gone. I don't know. Okay, anyway,
+
+09:00.000 --> 09:03.200
+so that was... Yeah, I don't see it either anymore. It's disappeared, but thank you for
+
+09:03.200 --> 09:12.080
+taking the time to answer it. Okay. So next one. How are we on time, Leo? I can talk all day.
+
+09:13.360 --> 09:17.360
+You are completely good on time. Don't worry. We have until 45 at the current hour
+
+09:17.920 --> 09:22.480
+until we need to move on to the next box. It's very roomy. Take your time answering as many
+
+09:22.480 --> 09:27.520
+questions as you want. Okay. All right. So I won't have either. All right. Something to think about
+
+09:27.520 --> 09:33.440
+is handwritten and org transcribed notes, deduplication for searching. Do you want one or
+
+09:33.440 --> 09:39.360
+the other? Oh, okay. So this is wishlist. Oh, thank you so much for asking this question. Transcription
+
+09:39.360 --> 09:45.840
+for me has become important, not only handwritten, but also voice notes. So this is another thing
+
+09:45.840 --> 09:53.440
+that I've been... I have a couple of podcasts where I want a summary of my important points
+
+09:53.440 --> 10:01.760
+and I can grab the voice clips, but transcribing it, in spite of so many tools out there,
+
+10:01.760 --> 10:06.880
+I find it very difficult to transcribe them automatically. I can make the error corrections
+
+10:06.880 --> 10:13.680
+later on, but I find it extremely cumbersome to transcribe voice notes. So it would be nice
+
+10:13.680 --> 10:21.760
+if we can have voice transcription, one. Handwritten transcription also helps for sure.
+
+10:21.760 --> 10:29.360
+If it can be done, then it makes it... Actually, that's a great idea. Transcription. I wasn't
+
+10:29.360 --> 10:36.400
+thinking of inside. I was thinking of basically taking the notes and somehow linking it within
+
+10:36.400 --> 10:43.600
+the handwritten stuff itself. Maybe my limitation imagination, but transcription is definitely
+
+10:43.600 --> 10:51.200
+something that I would be very interested in. Voice as well as handwriting. I've seen it in
+
+10:51.200 --> 10:57.200
+some other software. I think it was OneNote where I saw that you can record yourself vocally and
+
+10:58.000 --> 11:03.360
+also there is a transcribe for paid packages. They have transcription as well. And then you
+
+11:03.360 --> 11:10.880
+could link text from there on. So if we can do it in our R mode system, nothing like that. I keep
+
+11:10.880 --> 11:21.920
+seeing it and notes keep coming up there. I keep writing it on my Wacom device or my remarkable
+
+11:21.920 --> 11:28.880
+device and it goes into my R mode as I write and as I speak. Unbelievable. This is important. This
+
+11:28.880 --> 11:35.120
+is really important. Thanks for the great idea. I hope this... Again, I volunteer myself to test
+
+11:35.120 --> 11:43.120
+this out as well. I have tons of... At least this year, I have produced 300 minutes of podcast
+
+11:43.120 --> 11:52.720
+content and I find it extremely cumbersome to transcribe it easily. So if this can do it for us,
+
+11:52.720 --> 12:01.280
+at least even a minute or two of the text, nothing like it. That's amazing. The last question I see
+
+12:01.280 --> 12:08.080
+is how often do you instead type in and summarize your notes? Would you consider that a suitable
+
+12:08.080 --> 12:17.120
+approach for yourself at the end of the day? That's a good idea of typing notes. When I'm in
+
+12:17.120 --> 12:26.400
+a hurry, I type. So when I'm in a tearing hurry or my notes is just lying somewhere and there's
+
+12:26.400 --> 12:32.400
+a meeting going on, I don't want to get up and go get my notes, I immediately go to my R mode and
+
+12:32.400 --> 12:39.680
+start typing there. So that's what I do. At the end of the day, I don't have that habit at all.
+
+12:39.680 --> 12:44.480
+I promised myself that I should do daily journaling and all that because it's... Everybody
+
+12:44.480 --> 12:50.240
+says it's a good habit. I've done it a few times and I found it to be good, but it's not a habit
+
+12:50.240 --> 13:00.400
+I'm yet on. So I mean, I also have a shortcut, a keyboard shortcut for the org-grown dailies.
+
+13:01.360 --> 13:05.440
+I do have that and it shows up on the calendar, the blue color. I love those features,
+
+13:05.440 --> 13:11.520
+but I'm not on it. I should make it a habit. As much as I look at my org agenda,
+
+13:11.520 --> 13:21.280
+you should have dailies as well. I type out when I'm in a hurry. Perhaps even writing
+
+13:22.240 --> 13:30.720
+your daily journal could be helpful. Particularly, I find that I'm comfortable typing English
+
+13:30.720 --> 13:40.080
+letters. If non-English, for example, my mother tongue has a different script, which I can't
+
+13:40.080 --> 13:46.560
+easily type using English. So perhaps writing is easier there for me rather than typing it out.
+
+13:46.560 --> 13:56.000
+It feels very weird. So perhaps that could help for non-English, non-Roman script. Perhaps
+
+13:56.000 --> 13:59.840
+writing is better for journaling as well. I guess that could help.
+
+14:02.320 --> 14:07.040
+Okay, Bala, if I can interrupt you for a second because don't worry, I'm not stopping you with
+
+14:07.040 --> 14:12.000
+the questions. I told you you have until 45 and I will honor what I said before. But I just wanted
+
+14:12.000 --> 14:17.440
+to let people know that we have opened up the BBB chat room. So if people want to join the room now
+
+14:17.440 --> 14:21.440
+and ask questions directly to Bala, who has already answered many of your questions on the
+
+14:21.440 --> 14:27.520
+pad, but if you have more questions or if you'd just like to chat with Bala, well, do feel free to
+
+14:28.320 --> 14:34.240
+join the room. The link has been pasted on the ISE channels. It's also available on the talk page at
+
+14:34.240 --> 14:39.040
+the top. So you should be able to find the link pretty easily. And even if we move to the next
+
+14:39.040 --> 14:42.960
+talk, if you're still there and still want to chat with Bala, provided Bala is available and does not
+
+14:42.960 --> 14:48.400
+need to sleep, by the way, with respect to the fact that it's really late over there, do feel free to
+
+14:48.400 --> 14:53.200
+hang around a little more and ask more questions and we'll be posting all of this on the website
+
+14:53.200 --> 14:58.000
+afterwards. So Bala, I think, do you have one more question on the pad or was it the last one?
+
+14:58.000 --> 15:04.080
+Let me check. I think that was the last one. Oh, there is a new question coming up just before that.
+
+15:04.800 --> 15:11.280
+Do take it then. Sure. I was going to say something of an experience I wanted to share,
+
+15:11.280 --> 15:18.720
+but anyway, I can answer this. How fancy has your handwritten notes import been?
+
+15:18.720 --> 15:28.800
+Okay, I'm going to wait for this. I'm not sure if we're talking about importing the notes into,
+
+15:28.800 --> 15:34.080
+like, is it merely importing the files or is it about importing it to your note-taking system,
+
+15:34.080 --> 15:42.720
+like, or whatnot? Okay, okay, okay. I get it. I get it. So I have a simple system for, yes,
+
+15:42.720 --> 15:50.240
+I absolutely agree with you. I mean, the birth of org-mode was that you wanted notes and you wanted
+
+15:50.240 --> 15:57.120
+tasks inside it, right? So that was the origin of that. So I think the same philosophy applies for
+
+15:57.120 --> 16:03.440
+handwritten notes as well because you're writing down notes and somebody says, hey Bala, can you
+
+16:03.440 --> 16:10.560
+send me this document by next Wednesday? And I write that down in my notes and then I send it
+
+16:10.560 --> 16:18.000
+and I write that down in my notes and that's a task. So I just put a star next to it. So I know
+
+16:18.000 --> 16:25.600
+when I am scanning, I don't think that shows up as a, I don't think star shows up as anything in my
+
+16:26.240 --> 16:34.320
+import, but I know when I'm scanning it that I need to keep track of that as a task. So in the
+
+16:34.320 --> 16:44.880
+talk about it is in OneNote, control-1 is the shortcut for ToDo and if it is converted into
+
+16:44.880 --> 16:54.720
+text, yes, of course, alt-enter in org-mode will work as well. So yes, so I think that is important
+
+16:54.720 --> 17:01.040
+even, so that's the only thing that I do is an asterisk or a star just before the note so that
+
+17:01.040 --> 17:09.360
+it tells me that it is a task that I have to keep track of. I even put a date so that the
+
+17:09.360 --> 17:18.160
+numbers also get imported into org-mode. But my wish list, this has gotten me into me wishing is
+
+17:18.880 --> 17:25.600
+if the handwriting notes, I mean the gadget, the device, the remarkable or the Amazon
+
+17:25.600 --> 17:34.160
+writing pads of the world, if we can actually write down notes with a star, an asterisk,
+
+17:34.160 --> 17:40.320
+and the headline and scheduled and all that and import it directly into org-mode, I think
+
+17:40.320 --> 17:47.840
+that's doing away with a whole bunch of in-between scanning, uploading, processing, and all that. This
+
+17:47.840 --> 17:54.000
+can go directly, you can start refiling into your system. So that would be nice. So somebody
+
+17:54.000 --> 18:01.520
+is asking me for a wish list, here's one more too, if we can do that. So that makes basically
+
+18:01.520 --> 18:08.960
+a writing org-mode rather than like as if it's a language, like a human language, rather than it
+
+18:08.960 --> 18:14.080
+being something restricted to a computer. So that's interesting. That's an interesting thought.
+
+18:15.440 --> 18:22.480
+Just to glorify handwriting, I don't know if it has anything to do with the questions. A few days
+
+18:22.480 --> 18:30.400
+ago, a client of mine asked me for a talk and I was going to give them the plain vanilla talk,
+
+18:31.280 --> 18:38.880
+but I decided to pause myself and write down what I was going to talk about. Actually that gave
+
+18:38.880 --> 18:48.080
+rise to a completely different idea and the whole thing was far more effective compared to what was
+
+18:48.080 --> 18:57.280
+my plain vanilla. According to me, that handwritten ideation that I did with a white space really
+
+18:57.280 --> 19:05.600
+helped me think beyond what was my plain vanilla talk. Of course, the talk went well, I think,
+
+19:06.160 --> 19:12.640
+and the audience did have fun because I even jotted down a few things that I wanted to crack
+
+19:12.640 --> 19:19.120
+jokes on. All that went into my notes. So I think handwriting is sort of under-marketed,
+
+19:19.120 --> 19:25.680
+underplayed so much with the advent of typing and these things becoming so efficient and easy
+
+19:25.680 --> 19:32.000
+that I think that all your ideas, if they come together, I think handwritten notes will become
+
+19:33.200 --> 19:40.160
+part and parcel of the org-mode system itself and an effective and efficient way of capturing our
+
+19:40.160 --> 19:49.280
+thoughts. All right, Bala. So I think you don't have any more questions currently. I don't see
+
+19:49.280 --> 19:53.040
+anyone with a microphone on. So by the way, if you're joining us on BBB and if you want to ask
+
+19:53.040 --> 19:57.120
+your questions, you do have to join with a microphone. It is interesting for you to join
+
+19:57.120 --> 20:02.960
+listening only, but if everyone does this and nobody turns on the microphone, it's going to be
+
+20:02.960 --> 20:07.200
+very lonely for Bala and myself. I can ask questions for you. I have plenty of questions
+
+20:07.200 --> 20:11.680
+that I'd love to ask. I did get my own tablet. Oh, actually, let me show the stream. Let me...
+
+20:11.680 --> 20:17.200
+Oops. Can I un-full screen this? Yes. Okay. Let me try to make the screen a little bigger so that
+
+20:17.200 --> 20:21.680
+you can see me. Okay. I was going to talk to you about, if we have a little more time, because I do
+
+20:21.680 --> 20:26.800
+have a tablet like this, which allows me to do handwritten notes. This is... Don't worry too much.
+
+20:26.800 --> 20:32.720
+This is a lead code exit slide that I was solving. And this is Yink, which allows me to type my
+
+20:32.720 --> 20:38.640
+stuff. And I bought this about two years ago. And I've really been struggling to find ways to...
+
+20:40.080 --> 20:44.720
+How do I work both in the Emacs and how do I work with my NVDA notes, which is why I was really
+
+20:44.720 --> 20:49.840
+interested with your talk, because honestly, right now, those are two completely separate
+
+20:49.840 --> 20:54.800
+collections of notes. What is in my machine, this device right there, is its own thing.
+
+20:56.080 --> 21:01.760
+It has its own quality. Do I do my journaling in it? I do my journaling, maybe. I also do my lead
+
+21:01.760 --> 21:09.040
+code exercise. But that's about it. And I wish it were easy for me to connect the dots between
+
+21:09.040 --> 21:14.400
+what I've got on this device and what I've got on my computer right in front of me. So I can talk
+
+21:14.400 --> 21:20.800
+some more about this, but people could also join and ask their own questions. I can talk to Bala
+
+21:20.800 --> 21:27.840
+whenever I want. I've been in touch with Bala for quite a while. And I'll be able to do this
+
+21:27.840 --> 21:32.640
+whenever. But this is your chance for you to do this, to have your question answered,
+
+21:32.640 --> 21:38.640
+and for the question to leave on EmacsConf forever and ever. All the talks for EmacsConf,
+
+21:38.640 --> 21:44.080
+all the questions since three years ago have been published. So it is your chance to,
+
+21:45.440 --> 21:50.160
+if you're not making a talk of your own, at least you have the questions of your own leaving on
+
+21:50.160 --> 21:59.920
+a website. So Bala, I believe you were a little interested with my little device. Do you actually
+
+21:59.920 --> 22:04.640
+have a device of your own that allows you to take notes like this? Or is it just written on paper?
+
+22:06.240 --> 22:14.800
+My computer is a touchscreen, so I can write. I have a stylus that I can use to write anywhere
+
+22:14.800 --> 22:22.080
+on the screen. So I take the laptop and actually fold it, and I can use it like a notebook. So this
+
+22:22.080 --> 22:29.840
+is my use case these days. So when I'm learning, I'm learning Japanese, by the way. And I tell you,
+
+22:30.480 --> 22:35.840
+there's no way I could have retained so much if I had not written Japanese out, the characters. So
+
+22:37.200 --> 22:44.400
+this is critical. Writing is critical. And their ideas, when they're externalized,
+
+22:44.400 --> 22:50.160
+you see it while you're writing it, there's a physical action, you feel the proximity to your
+
+22:50.800 --> 23:00.800
+ideas, what you're doing. So typing, yes, it is also physical. But for me, it's one step away from
+
+23:02.160 --> 23:07.760
+writing down. For me, that's going to make you laugh. I was also studying Japanese and I do have
+
+23:07.760 --> 23:14.800
+my own kanji that allows me to do my practice. So please don't look at it. If you're going to pause
+
+23:14.800 --> 23:18.640
+this video and check what I've written, you will be sorely disappointed because those are just
+
+23:18.640 --> 23:24.160
+collection of verbs. But this is how I practice my kanji as well. And it's been amazing. This is,
+
+23:25.040 --> 23:28.800
+you know, it is such a wonderful usage, because if you try learning kanji,
+
+23:28.800 --> 23:32.480
+just by seeing them and not putting them in your hand or embedding them in your hands,
+
+23:32.480 --> 23:38.400
+it's so complicated to do so. Oh, we have more things in common than I imagined. Okay.
+
+23:40.400 --> 23:45.760
+Yeah. So we happen to have someone in the room currently. Jack, I believe, is their nickname.
+
+23:46.480 --> 23:50.000
+Do you have a question? And do you want to maybe unmute yourself to ask the question?
+
+23:50.000 --> 23:53.520
+You are more than welcome to do so now. I might actually need to unmute you. Actually,
+
+23:53.520 --> 23:56.640
+I can't. Can you unmute yourself and ask the question if you want to?
+
+23:56.640 --> 24:06.640
+I'm just trying to get my headset set up. I'm having the similar struggle with this issue of
+
+24:06.640 --> 24:12.880
+handwriting my notes because that's the easiest way for me to write them quickly. It's also very,
+
+24:12.880 --> 24:20.880
+it does help me retain the information better. But then getting them back into org mode. I'm
+
+24:20.880 --> 24:26.480
+about to start experimenting with some of the iPad apps like Notability and GoodNotes to see
+
+24:26.480 --> 24:36.320
+if that can work or if I can use Apple Notes for that as well. My interests are probably similar
+
+24:36.320 --> 24:46.960
+to yours. I'm studying computer science, and I have two kinds of notes that are very difficult to
+
+24:46.960 --> 24:54.000
+transcribe. Mind maps, which is often the way I take class notes because it's a good outlining
+
+24:54.000 --> 25:04.960
+form. But the handwriting recognition blows if you're part of the expression. And equations,
+
+25:04.960 --> 25:16.000
+particularly involving proof steps for formal semantics. And I'm wondering if you have any ideas
+
+25:16.000 --> 25:22.720
+about mind mapping in particular and getting those incorporated from handwritten notes. I hate using
+
+25:22.720 --> 25:31.840
+the mind mapping tools that are available. I find that that replaces the bad methods that
+
+25:31.840 --> 25:42.240
+I use. It replaces the bad memory generation from typing with a bad memory generation for mind
+
+25:42.240 --> 25:53.440
+mapping. But if you have any thoughts, I'd love to hear them. Actually, I have used mind mapping
+
+25:53.440 --> 26:08.240
+tools. I use something called function maps, where you not only have interlinking relationships,
+
+26:08.240 --> 26:13.360
+this also has what is the relationship, what is the nature of relationships. All that I've been
+
+26:13.360 --> 26:23.760
+drawing it on my laptop screen. So that helps me internalize that. So I do not convert it into
+
+26:23.760 --> 26:31.920
+any other digital format. I leave it as a picture because every time I read it, but in the digital
+
+26:31.920 --> 26:40.160
+format itself, when you have new understanding, you can actually add another object and interlink
+
+26:40.160 --> 26:45.680
+them and add the relationship. So it's a lot easier if it's on this. But on a piece of paper,
+
+26:46.960 --> 26:55.040
+drawing a mind map and or function map and editing it and moving things around becomes a problem.
+
+26:55.040 --> 27:04.320
+So I find that doing it on a device and retaining it as such, not converting it into a free mind or
+
+27:04.320 --> 27:12.240
+any of those kind of XML or anything like that, doesn't help me at all, or a plan TML even. But
+
+27:12.240 --> 27:20.720
+I find that I leave it as such in the digital format. You can select it, like a lasso select,
+
+27:20.720 --> 27:27.440
+move it around and add new objects or remove it or shade it. You can do all those good stuff,
+
+27:27.440 --> 27:34.640
+if it is remaining in the same way. So I like it to be that way. Yeah, I've done that as well
+
+27:34.640 --> 27:44.560
+on the iPad. I'll use Nebo or something like that to give me a good way of rearranging the mind map
+
+27:45.600 --> 27:53.840
+directly in the iPad, exporting it as a JPEG and linking it to other notes documents that I have.
+
+27:53.840 --> 28:03.040
+But I do wish I had a better way of extracting the keywords that come out of it and having
+
+28:03.040 --> 28:09.840
+those searchable. But I get it. Okay, the answer is no, I don't have any. I usually link the live
+
+28:09.840 --> 28:17.840
+document itself into org mode. So for example, OneNote. OneNote colon and the entire... I just
+
+28:17.840 --> 28:22.640
+click on that and it goes, opens the exact document that I want and I can add more to it.
+
+28:22.640 --> 28:28.000
+I do something very simple.
+
+28:28.000 --> 28:33.200
+All right, folks, I'm really sorry for interrupting you, but we are getting close to time.
+
+28:33.200 --> 28:38.560
+Thank you so much for joining. We have four people on the scene right now, which is amazing.
+
+28:38.560 --> 28:45.440
+You can continue talking about this and people can still tune in. The link to the BBB room
+
+28:45.440 --> 28:50.640
+is still available on Bala's talk. You go to EmacsConf 2022, you go to the talk of Bala and
+
+28:50.640 --> 28:55.200
+you'll find the link at the top of the page. You can come in the room and chat with Bala some more.
+
+28:55.200 --> 28:58.960
+But for us on the stream, we're going to move on to the next talk in about 40 seconds.
+
+28:58.960 --> 29:02.400
+So Bala, thank you so much for taking all the time answering all the questions. And thank you,
+
+29:02.400 --> 29:08.240
+Gag, also for coming and asking also lovely questions. I suppose it was really good.
+
+29:08.960 --> 29:14.720
+Yeah, thank you. It was great seeing you. Sorry, I'm rushing because I'm being pressed for time.
+
+29:14.720 --> 29:21.360
+And I will see you both whenever I see you. OK, bye bye everyone.
+
+29:21.360 --> 29:23.280
+See you. Bye bye, Leo. Take care.
+
+29:28.000 --> 29:32.080
+Actually, I'm not sure. We are probably getting the next talk started currently,
+
+29:32.080 --> 29:36.000
+so you can probably still hear me on the stream, but it's going to take about
+
+29:36.000 --> 29:37.760
+three seconds. I'll see you after.
+
+29:37.760 --> 29:47.200
+OK, we are now off air. Thank you so much, Bala, for taking the time to answer all the questions.
+
+29:48.160 --> 29:49.120
+Thank you. Ciao.
+
+29:50.320 --> 29:54.800
+Yeah, I think no one is left in a BBB room, so I think people are probably not going to show up.
+
+29:54.800 --> 29:58.480
+So you've earned your well, your rest for tonight.
+
+29:59.920 --> 30:00.720
+OK, thanks.
+
+30:01.840 --> 30:05.040
+Mine will not come before a long time. I still have about seven hours to stream.
+
+30:05.040 --> 30:07.120
+Oh, my God. OK.
+
+30:09.360 --> 30:11.440
+All right. Well, thank you so much, Bala. See you next time.
+
+30:11.440 --> 30:14.400
+Thanks. Have a good day and I'll catch you soon. OK.
+
+30:14.960 --> 30:16.160
+Sure. Bye bye.
+
+30:16.160 --> 30:35.440
+Bye bye.
+
+30:46.960 --> 30:55.440
+Bye.
+
+30:55.440 --> 31:05.520
+Bye.
+
+31:05.520 --> 31:25.520
+Bye.
+
+31:35.520 --> 31:36.580
+Bye.
+
+32:05.520 --> 32:06.580
+Bye.
+
+32:35.520 --> 32:36.980
+Bye.
+
+33:05.520 --> 33:06.020
+Bye.
+
diff --git a/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt
new file mode 100644
index 00000000..aead066a
--- /dev/null
+++ b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt
@@ -0,0 +1,31 @@
+WEBVTT
+
+00:00:02.200 --> 00:01:41.080
+Introduction
+
+01:41.080 --> 00:02:29.520
+Org Mode
+
+02:29.520 --> 00:03:40.033
+Handwriting
+
+00:03:42.167 --> 00:03:59.720
+Combining Org Mode and handwriting
+
+03:59.720 --> 00:04:14.420
+Step 1: Write the notes by hand
+
+04:14.420 --> 00:04:23.640
+Step 2: Scan them
+
+04:23.640 --> 00:04:42.300
+Step 3: Store the document
+
+04:42.300 --> 00:05:02.280
+(Optional) Step 4: Convert the notes
+
+05:02.280 --> 00:06:30.920
+Using touch devices
+
+06:30.920 --> 00:07:12.900
+Options
diff --git a/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt
new file mode 100644
index 00000000..c07421ef
--- /dev/null
+++ b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt
@@ -0,0 +1,323 @@
+WEBVTT captioned by jai
+
+00:00:00.000 --> 00:00:08.079
+Can you recognize this building?
+
+00:00:08.080 --> 00:00:09.799
+Some of you may have recognized this.
+
+00:00:09.800 --> 00:00:11.439
+This building is called
+
+00:00:11.440 --> 00:00:14.479
+the John Hancock building.
+
+00:00:14.480 --> 00:00:17.359
+This is in Chicago.
+
+00:00:17.360 --> 00:00:19.479
+I recently bought this building.
+
+00:00:19.480 --> 00:00:21.319
+Isn't it nice?
+
+00:00:21.320 --> 00:00:23.239
+Heavens no!
+
+00:00:23.240 --> 00:00:27.639
+I am in my home in Pune in India.
+
+00:00:27.640 --> 00:00:29.159
+I am Bala Ramadurai,
+
+00:00:29.160 --> 00:00:33.559
+an author, professor, and an innovation coach.
+
+00:00:33.560 --> 00:00:35.999
+Hello and welcome to my talk on
+
+00:00:36.000 --> 00:00:39.559
+“How to incorporate handwritten notes
+
+00:00:39.560 --> 00:00:42.279
+into Emacs Org Mode”
+
+00:00:42.280 --> 00:00:45.919
+Now, why did I show you this building?
+
+00:00:45.920 --> 00:00:49.399
+The name is of interest for this talk.
+
+00:00:49.400 --> 00:00:52.359
+In the US, someone's signature is
+
+00:00:52.360 --> 00:00:55.199
+also referred to as their Hancock.
+
+00:00:55.200 --> 00:00:59.679
+Your handwriting is pretty much part of your identity.
+
+00:00:59.680 --> 00:01:03.119
+It is as fundamental as that.
+
+00:01:03.120 --> 00:01:07.599
+Of course, there is a movie by that name too, Hancock.
+
+00:01:07.600 --> 00:01:11.999
+I could have started with a clip from that movie,
+
+00:01:12.000 --> 00:01:15.879
+but in spite of Will Smith and Charlize Theron,
+
+00:01:15.880 --> 00:01:24.159
+both my favorite movie stars in the movie, I hated it.
+
+00:01:24.160 --> 00:01:35.159
+[Clip from Hancock (2008)]
+
+00:01:35.160 --> 00:01:40.479
+But I digress.
+
+00:01:40.480 --> 00:01:44.199
+Handwriting has been a fascinating topic for me.
+
+00:01:44.200 --> 00:01:49.719
+However, note-taking has always been on my computer,
+
+00:01:49.720 --> 00:01:54.119
+in particular, in the Emacs Org Mode system.
+
+00:01:54.120 --> 00:01:57.359
+It is so easy to note down anything,
+
+00:01:57.360 --> 00:01:59.839
+add a schedule, add a deadline,
+
+00:01:59.840 --> 00:02:04.279
+search anything you want, link anything you want,
+
+00:02:04.280 --> 00:02:07.919
+export it to any format, track what you've been doing,
+
+00:02:07.920 --> 00:02:12.559
+clock your tasks, and on and on and on.
+
+00:02:12.560 --> 00:02:15.519
+It's such a squeaky-clean system to
+
+00:02:15.520 --> 00:02:17.559
+track everything and link it to
+
+00:02:17.560 --> 00:02:20.799
+anything from the digital world.
+
+00:02:20.800 --> 00:02:24.639
+Sharing the original notes is still a pain in the rear,
+
+00:02:24.640 --> 00:02:29.359
+but for personal stuff, it's awesome.
+
+00:02:29.360 --> 00:02:32.639
+But then what about handwriting?
+
+00:02:32.640 --> 00:02:35.639
+Research seems to suggest that handwritten notes
+
+00:02:35.640 --> 00:02:40.199
+can enhance clarity of thought, retention,
+
+00:02:40.200 --> 00:02:50.559
+sometimes even getting rid of your worries.
+
+00:02:50.560 --> 00:03:06.399
+[Fried, C. B. (2008). In-class laptop use and
+its effects on student learning]
+
+00:03:06.400 --> 00:03:13.639
+[Speaker displays articles on Note-taking]
+
+00:03:13.640 --> 00:03:17.839
+My experience seems to agree with that too.
+
+00:03:17.840 --> 00:03:21.199
+As a professor, my fear has always been
+
+00:03:21.200 --> 00:03:25.199
+this quote, “Lecturing is that mysterious process
+
+00:03:25.200 --> 00:03:29.239
+by means of which the contents of the notebook
+
+00:03:29.240 --> 00:03:31.879
+of the professor are transferred
+
+00:03:31.880 --> 00:03:34.919
+through the instrument of the fountain pen
+
+00:03:34.920 --> 00:03:37.279
+to the notebook of the student
+
+00:03:37.280 --> 00:03:40.639
+without passing through the mind of either.”
+
+00:03:40.640 --> 00:03:45.679
+Hmmm... So, question — How do we combine
+
+00:03:45.680 --> 00:03:48.159
+the efficient Org Mode system
+
+00:03:48.160 --> 00:03:53.719
+with the effective handwritten note-taking system?
+
+00:03:53.720 --> 00:03:56.799
+Merge the systems together. Absolutely.
+
+00:03:56.800 --> 00:03:59.359
+How do you do that?
+
+00:03:59.360 --> 00:04:03.679
+Step 1: Write the notes by hand
+
+00:04:03.680 --> 00:04:06.079
+on a notebook. Pen, pencil.
+
+00:04:06.080 --> 00:04:08.999
+Keep some convention for yourselves
+
+00:04:09.000 --> 00:04:13.039
+for tracking tasks like a star or an asterisk.
+
+00:04:13.040 --> 00:04:16.399
+Step 2: Scan them using
+
+00:04:16.400 --> 00:04:18.559
+your favourite mobile app.
+
+00:04:18.560 --> 00:04:23.439
+I recommend Adobe Scan or Dropbox.
+
+00:04:23.440 --> 00:04:29.999
+Step 3: store the document as a JPG file
+
+00:04:30.000 --> 00:04:32.679
+into a folder called Inbox.
+
+00:04:32.680 --> 00:04:37.759
+Make sure this syncs into a cloud storage folder
+
+00:04:37.760 --> 00:04:39.479
+and your Org Mode system
+
+00:04:39.480 --> 00:04:41.119
+has access to this folder.
+
+00:04:41.120 --> 00:04:45.919
+(Optional) Step 4: convert the notes into text
+
+00:04:45.920 --> 00:04:49.319
+using Google Keep or just type
+
+00:04:49.320 --> 00:04:51.519
+the damn thing one more time.
+
+00:04:51.520 --> 00:04:54.919
+Then you can process that
+
+00:04:54.920 --> 00:04:56.239
+in your Org Mode system
+
+00:04:56.240 --> 00:04:59.639
+as you always do in whatever
+
+00:04:59.640 --> 00:05:02.119
+is there in your inbox.
+
+00:05:02.120 --> 00:05:06.119
+But, three steps or four before I get access
+
+00:05:06.120 --> 00:05:09.399
+to my notes and into my Org Mode?
+
+00:05:09.400 --> 00:05:11.639
+What a precious waste of time.
+
+00:05:11.640 --> 00:05:14.119
+I'd rather be tinkering with my
+
+00:05:14.120 --> 00:05:18.799
+config file in that time, correct?
+
+00:05:18.800 --> 00:05:19.359
+Boy...
+
+00:05:19.360 --> 00:05:24.919
+Get or buy or gift or convince your partner,
+
+00:05:24.920 --> 00:05:29.719
+parent, or anybody else to gift yourself
+
+00:05:29.720 --> 00:05:31.959
+a touch-enabled large device.
+
+00:05:31.960 --> 00:05:37.879
+Then use an app like OneNote to write notes
+
+00:05:37.880 --> 00:05:41.439
+on the device and link the handwritten note
+
+00:05:41.440 --> 00:05:46.239
+directly into Org Mode by copying the link.
+
+00:05:46.240 --> 00:05:54.079
+You can use a shortcut like Ctrl-1
+
+00:05:54.080 --> 00:05:59.479
+to mark the todos, but that means it remains
+
+00:05:59.480 --> 00:06:05.159
+only on OneNote ecosystem, the todos.
+
+00:06:05.160 --> 00:06:14.919
+You can use the same app to also convert
+
+00:06:14.920 --> 00:06:18.319
+the handwritten note into text
+
+00:06:18.320 --> 00:06:23.559
+just by the click of a button.
+
+00:06:23.560 --> 00:06:27.359
+As a bonus, you can even include screenshots
+
+00:06:27.360 --> 00:06:30.919
+from your online meetings.
+
+00:06:30.920 --> 00:06:33.439
+I like both my options.
+
+00:06:33.440 --> 00:06:36.439
+Option 1: use a regular notebook,
+
+00:06:36.440 --> 00:06:40.839
+scan and process them into my inbox.
+
+00:06:40.840 --> 00:06:44.559
+Option 2: write the notes in a digital device
+
+00:06:44.560 --> 00:06:46.479
+and convert them into text.
+
+00:06:46.480 --> 00:06:52.479
+Or, third option, I appeal to thee,
+
+00:06:52.480 --> 00:06:56.999
+oh great community, can you please build a package
+
+00:06:57.000 --> 00:07:00.959
+inside Org Mode that recognises handwriting
+
+00:07:00.960 --> 00:07:10.039
+to export it into our Org Mode, Emacs Org Mode.
+
+00:07:10.040 --> 00:07:38.640
+Thank you so much for your attention. Bye.
diff --git a/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt
new file mode 100644
index 00000000..7f4c42b6
--- /dev/null
+++ b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt
@@ -0,0 +1,554 @@
+WEBVTT
+
+00:01.000 --> 00:01.840
+Okay, excellent.
+
+00:01.840 --> 00:04.000
+I think we are live on stream.
+
+00:05.320 --> 00:06.360
+Yuchen is here with us.
+
+00:06.360 --> 00:08.560
+Thanks for the great talk, Yuchen.
+
+00:08.560 --> 00:11.840
+For the questions, people are welcome to post them on IRC
+
+00:11.840 --> 00:12.680
+or on the pad.
+
+00:13.560 --> 00:17.000
+And we will also open this big blue button room up
+
+00:17.000 --> 00:19.560
+in a few minutes if people want to join here
+
+00:19.560 --> 00:22.680
+and ask Yuchen the questions directly.
+
+00:22.680 --> 00:30.680
+So yeah, thanks again and take it away.
+
+00:30.680 --> 00:53.680
+Yeah, thanks.
+
+01:00.680 --> 01:29.680
+Okay.
+
+01:29.680 --> 01:33.000
+Well, I guess while we wait for some other audience questions
+
+01:33.000 --> 01:36.200
+to start trickling in, I wonder,
+
+01:37.280 --> 01:39.800
+not having yet watched your talk, obviously,
+
+01:39.800 --> 01:42.120
+because it's been behind the scenes,
+
+01:42.120 --> 01:44.320
+I wonder if your system works
+
+01:44.320 --> 01:46.040
+with offline documentation as well,
+
+01:46.040 --> 01:49.200
+because I remember seeing earlier
+
+01:49.200 --> 01:52.520
+some other Haskell-related workflows
+
+01:52.520 --> 01:56.000
+where people would have downloaded the entirety
+
+01:56.000 --> 02:00.280
+of the Hackage documentations
+
+02:00.280 --> 02:03.280
+and yeah, be able to browse them locally when offline.
+
+02:06.120 --> 02:06.960
+Yeah, for sure.
+
+02:06.960 --> 02:17.960
+I mean, that's one of the points of writing these packages.
+
+02:17.960 --> 02:26.520
+So the Hadock org documentation is meant for generation
+
+02:26.520 --> 02:30.120
+of org files of these Haskell packages
+
+02:30.120 --> 02:33.160
+so that you can have them locally on your computer
+
+02:33.160 --> 02:35.240
+rather than having to rely on Hackage,
+
+02:36.400 --> 02:40.440
+which is online, which is on the web.
+
+02:40.440 --> 02:48.720
+The other one, HCL, the code explorer, it's self-hosted.
+
+02:48.720 --> 02:54.920
+So all you need to do is to download the packages
+
+02:54.920 --> 02:58.840
+you want to index and then index them on the server
+
+02:58.840 --> 03:02.120
+or on the local host and then, yeah,
+
+03:02.120 --> 03:05.520
+then you can unplug your Ethernet cable
+
+03:05.520 --> 03:10.880
+and explore Haskell code on your computer.
+
+03:10.880 --> 03:35.880
+Nice, thanks, that makes sense.
+
+03:41.880 --> 03:45.640
+Maybe another question while we wait for other questions
+
+03:45.640 --> 03:48.800
+from the audience and again, not having had a chance
+
+03:48.800 --> 03:50.720
+to watch your talk yet.
+
+03:50.720 --> 03:53.280
+What do you think is the state of, I guess,
+
+03:53.280 --> 03:56.760
+integration of Haskell, both, I guess,
+
+03:56.760 --> 04:01.080
+the language, the packages, the tooling, all that stuff,
+
+04:01.080 --> 04:05.160
+integration with Emacs today in like 2022?
+
+04:05.160 --> 04:07.480
+Because I'm also, I do have a Haskell background,
+
+04:07.480 --> 04:10.120
+but I haven't done much of it in a few years.
+
+04:10.120 --> 04:13.200
+And back when I do remember some pain points,
+
+04:13.200 --> 04:16.360
+including when trying to integrate it into Emacs.
+
+04:16.360 --> 04:19.520
+So I do wonder what the general state of things
+
+04:19.520 --> 04:25.040
+are, if you could maybe answer quickly, I guess.
+
+04:25.040 --> 04:26.520
+Not in great detail necessarily.
+
+04:29.640 --> 04:33.480
+OK, yeah, I mean, I haven't tried all the packages,
+
+04:33.480 --> 04:34.880
+Haskell-related packages.
+
+04:34.880 --> 04:40.680
+And I think the most prominent ones are Haskell mode
+
+04:40.680 --> 04:45.080
+and Haskell language servers through language server
+
+04:45.080 --> 04:49.880
+packages like eglots or LSP mode.
+
+04:49.880 --> 04:56.280
+Yeah, I mean, Haskell mode is like,
+
+04:56.280 --> 05:03.160
+it feels to me like a standard language mode where
+
+05:03.160 --> 05:09.280
+it offers font locking, syntax highlighting, I mean,
+
+05:09.280 --> 05:18.520
+and REPL, like Python mode, and limited documentation
+
+05:18.520 --> 05:25.400
+and cross-references, which is, I mean, as I mentioned,
+
+05:25.400 --> 05:30.360
+that's why I did this HCL package.
+
+05:30.360 --> 05:38.280
+And the language server is like, it is also pretty standard
+
+05:38.280 --> 05:42.440
+and offering all the language server things, most of them,
+
+05:42.440 --> 05:43.200
+I think.
+
+05:43.200 --> 05:46.320
+But it's very slow.
+
+05:46.320 --> 05:49.520
+It's slower than any other language server I've used.
+
+05:49.520 --> 05:55.440
+And yeah, and it doesn't really work
+
+05:55.440 --> 06:03.360
+with cross-reference, which I also mentioned in the talk.
+
+06:03.360 --> 06:11.120
+So yeah, that's the two main packages
+
+06:11.120 --> 06:12.720
+I think people use most.
+
+06:12.720 --> 06:23.520
+And yeah, I can't think of anything else that's very
+
+06:23.520 --> 06:24.600
+prominent.
+
+06:28.280 --> 06:29.120
+Great, thanks.
+
+06:33.040 --> 06:34.400
+Oh, OK, I just remembered.
+
+06:34.400 --> 06:39.200
+There's also the Haskell TNG package.
+
+06:39.200 --> 06:41.120
+But I haven't looked into it yet.
+
+06:41.120 --> 06:47.960
+It's, if I remember correctly, it's like in the GNU ELP,
+
+06:47.960 --> 06:50.080
+is it in GNU ELP or non-GNU?
+
+06:50.080 --> 06:50.840
+Let me have a look.
+
+06:58.280 --> 07:00.200
+Right, it's also in non-GNU.
+
+07:00.200 --> 07:02.680
+Never mind.
+
+07:02.680 --> 07:07.200
+Yeah, I think it's a new, up-and-coming Haskell media
+
+07:07.200 --> 07:10.480
+mode, an experimental rewrite of Haskell mode.
+
+07:10.480 --> 07:12.040
+That's the description.
+
+07:19.080 --> 07:21.800
+Cool, and have you had a chance to maybe play around
+
+07:21.800 --> 07:24.640
+with that a little bit and see how
+
+07:24.640 --> 07:27.440
+it compares with the traditional, the older,
+
+07:27.440 --> 07:28.520
+the existing Haskell mode?
+
+07:32.960 --> 07:34.120
+No, I haven't yet.
+
+07:34.120 --> 07:35.680
+OK.
+
+08:05.000 --> 08:07.160
+Yeah, I can't think of anything else that's very prominent.
+
+08:07.160 --> 08:09.160
+I haven't looked into it yet.
+
+08:09.160 --> 08:12.120
+It's, if I remember correctly, it's like in the GNU ELP.
+
+08:12.120 --> 08:15.440
+Yeah, I think it's a new, up-and-coming Haskell
+
+08:15.440 --> 08:19.400
+media mode, an experimental rewrite of Haskell mode.
+
+08:19.400 --> 08:20.280
+That's the description.
+
+08:20.280 --> 08:22.520
+I haven't yet, I haven't looked into it,
+
+08:22.520 --> 08:25.480
+and I think it's a new, up-and-coming Haskell
+
+08:25.480 --> 08:28.920
+media mode, an experimental rewrite of Haskell mode.
+
+08:28.920 --> 08:31.680
+Yeah, I haven't yet, I haven't looked into it,
+
+08:31.680 --> 08:33.740
+you
+
+09:01.680 --> 09:17.280
+One question that just occurred to me, I guess, about the state of like literate Haskell and
+
+09:17.280 --> 09:22.960
+potential integration with org mode. I've actually never, I haven't put too much thought into this,
+
+09:22.960 --> 09:28.000
+but it just occurred to me that Haskell, as you likely know, already has a literate Haskell mode
+
+09:28.000 --> 09:36.000
+with like.LHS files. And I was wondering, I guess, if you've tried maintaining or writing
+
+09:36.000 --> 09:41.200
+any projects in literate Haskell, at least not, if not entirely, then with a considerable amount
+
+09:41.200 --> 09:50.400
+of source code in that approach and how it might compare, for example, to something like Babel,
+
+09:50.400 --> 09:58.160
+I guess, which is very much more documentation oriented with like code blocks intermingled.
+
+10:01.280 --> 10:10.880
+Okay. Yeah, I'm afraid I haven't really used the literate Haskell. I heard of it. And if I want
+
+10:11.600 --> 10:17.680
+to like write literate programming, I would, I mean, I would go for org mode and org Babel,
+
+10:17.680 --> 10:24.720
+indeed, first before, yeah, before the more language specific mode.
+
+10:28.240 --> 10:34.080
+Right. That makes sense. I just thought it's interesting because Haskell is, I guess,
+
+10:34.080 --> 10:39.200
+one of the fewer languages where it actually does have its own literate mode, if you will,
+
+10:39.200 --> 10:43.600
+and yeah, there might be something interesting there to think about or try exploring at some
+
+10:43.600 --> 10:55.040
+point. Yeah, yeah, definitely. Yeah. Yeah, I will look into it.
+
+10:55.040 --> 11:10.960
+Poo.
+
+11:25.040 --> 11:53.740
+Yeah, so I'm reading about this Haskell TNG mode.
+
+11:53.740 --> 11:57.400
+It looks like it can also jump to definition
+
+11:57.400 --> 12:03.440
+outside of the project using a thing uses
+
+12:03.440 --> 12:09.560
+a tool called HS Inspect, which is also
+
+12:09.560 --> 12:15.000
+a tool using the GHC API.
+
+12:15.000 --> 12:17.480
+Yeah, not sure how it is achieved, though.
+
+12:17.480 --> 12:21.520
+Bren.
+
+12:48.480 --> 12:51.360
+I think I have a question on IRC.
+
+12:51.360 --> 12:53.320
+Is the indexing faster?
+
+12:53.320 --> 12:55.400
+And when re-indexing, would it be too slow
+
+12:55.400 --> 12:56.480
+to re-index on demand?
+
+13:01.560 --> 13:05.120
+Sorry, what's the question again?
+
+13:05.120 --> 13:09.240
+The question is, is the indexing faster when re-indexing?
+
+13:09.240 --> 13:11.560
+Would it be too slow to re-index on demand?
+
+13:11.560 --> 13:14.960
+I think this might be for the other talk stream.
+
+13:14.960 --> 13:15.920
+I'm not entirely sure.
+
+13:15.920 --> 13:21.640
+So yeah, I mean, it sounds relevant to this talk, though.
+
+13:21.640 --> 13:23.600
+Oh, OK, then, yeah, OK, sorry.
+
+13:23.600 --> 13:26.600
+I'm a little scatterbrained.
+
+13:26.600 --> 13:28.320
+No, it's OK.
+
+13:28.320 --> 13:36.760
+Oh, yeah, yeah, re-indexing, I mean, I don't know, actually,
+
+13:36.760 --> 13:41.680
+because I haven't started implementing
+
+13:41.680 --> 13:44.400
+on-demand re-indexing yet.
+
+13:44.400 --> 13:49.320
+And I'm still a bit hazy about whether it strictly
+
+13:49.320 --> 13:53.520
+requires recompiling when re-indexing.
+
+13:53.520 --> 14:03.440
+And I mean, but I do think it's like the main workhorse
+
+14:03.440 --> 14:09.400
+of this process would be the GHC API compiling process,
+
+14:09.400 --> 14:15.760
+whether it can avoid recompilation efficiency.
+
+14:15.760 --> 14:23.680
+When, yeah, and I think it can.
+
+14:23.680 --> 14:28.720
+It has some optimization with recompilation.
+
+14:28.720 --> 14:35.480
+And also, ideally, you should start
+
+14:35.480 --> 14:39.800
+using a bit less heavy compilation,
+
+14:39.800 --> 14:45.640
+like this HIE,.hie files, instead of compiling
+
+14:45.640 --> 14:49.280
+the whole thing, instead of requiring
+
+14:49.280 --> 14:55.120
+the compilation of the whole project from using
+
+14:55.120 --> 14:56.000
+the whole pipeline.
+
+14:56.000 --> 15:01.760
+So HIE, I think, is more or less the only front-end part.
+
+15:01.760 --> 15:05.800
+Yeah, and if, I mean, that's one of the things,
+
+15:05.800 --> 15:10.520
+like, main to-dos for this project, for the HCL project,
+
+15:10.520 --> 15:16.920
+to replace the cabal helper with using.hie
+
+15:16.920 --> 15:18.920
+that I haven't looked into yet.
+
+15:22.920 --> 15:23.440
+Awesome.
+
+15:26.480 --> 15:29.000
+Yeah, sounds interesting and looking forward to it.
+
+15:29.000 --> 15:32.240
+I think we have about, like, less than a minute or so
+
+15:32.240 --> 15:34.640
+for the live Q&A. Of course, people
+
+15:34.640 --> 15:37.520
+are welcome to keep asking questions,
+
+15:37.520 --> 15:40.240
+whether on the pad or on IRC.
+
+15:40.240 --> 15:43.520
+And yeah, so after this, Q&A concludes.
+
+15:43.520 --> 15:44.920
+This is our last talk of today.
+
+15:44.920 --> 15:49.080
+So we would appreciate it if people would join us
+
+15:49.080 --> 15:54.120
+on the general stream for the closing remarks of today.
+
+15:54.120 --> 15:55.720
+And yeah, we'll still have tomorrow
+
+15:55.720 --> 15:57.440
+to look forward to the next one.
+
+15:57.440 --> 15:59.640
+We'll still have tomorrow to look forward to, of course.
+
+15:59.640 --> 16:01.160
+OK.
+
+16:25.960 --> 16:28.040
+I see that EmacsConf just left.
+
+16:28.040 --> 16:30.400
+Does that mean the Q&A is over?
+
+16:30.400 --> 16:31.680
+Yep, I believe so.
+
+16:31.680 --> 16:35.760
+So I think we should head on over to the GenStream.
+
+16:35.760 --> 16:36.800
+OK, cool.
+
+16:36.800 --> 16:39.280
+Yeah, I'll go there as well.
+
+16:39.280 --> 16:41.400
+All right, thanks a lot for your questions.
+
+16:41.400 --> 16:43.480
+Yep, and thank you, Yuchun, for your great talk.
+
+16:43.480 --> 16:45.000
+Thank you.
+
+16:45.000 --> 16:46.440
+Thanks, bye-bye.
+
+16:46.440 --> 16:47.200
+Bye.
+
+16:47.200 --> 17:03.240
+You are currently the only person in this conference.
+
diff --git a/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt
new file mode 100644
index 00000000..7f9272e6
--- /dev/null
+++ b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt
@@ -0,0 +1,117 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:30.520
+What is Haskell?
+
+12
+00:00:30.520 --> 00:01:33.640
+Parts of a Haskell program
+
+34
+00:01:33.640 --> 00:02:13.400
+Example of Haskell source code
+
+44
+00:02:13.400 --> 00:02:37.160
+Writing Haskell like Lisp
+
+52
+00:02:37.160 --> 00:03:53.760
+What is a code explorer?
+
+79
+00:03:53.760 --> 00:04:56.240
+Prior art
+
+97
+00:04:56.240 --> 00:05:46.080
+Haskell mode
+
+111
+00:05:46.080 --> 00:06:43.560
+Jumping to declarations
+
+128
+00:06:43.560 --> 00:07:24.840
+Finding references
+
+135
+00:07:24.840 --> 00:08:20.520
+The Haskell language server
+
+150
+00:08:20.520 --> 00:08:54.960
+Hoogle and Hackage
+
+162
+00:08:54.960 --> 00:09:34.600
+Haskell Code Explorer
+
+176
+00:09:34.600 --> 00:10:42.080
+Demo of Haskell Code Explorer
+
+189
+00:10:42.080 --> 00:12:35.480
+Learning about monads
+
+214
+00:12:35.480 --> 00:13:39.920
+Web client
+
+230
+00:13:39.920 --> 00:14:47.800
+User freedom
+
+246
+00:14:47.800 --> 00:15:38.560
+hc.el
+
+259
+00:15:38.560 --> 00:16:46.520
+Demo
+
+282
+00:16:46.520 --> 00:17:38.920
+Declarations
+
+293
+00:17:38.920 --> 00:18:19.160
+Finding definitions and references
+
+302
+00:18:19.160 --> 00:19:22.360
+Eldoc
+
+317
+00:19:22.360 --> 00:20:32.560
+Searching for identifiers
+
+330
+00:20:32.560 --> 00:22:01.440
+Help buffer integration
+
+350
+00:22:01.440 --> 00:23:28.840
+Haddock
+
+371
+00:23:28.840 --> 00:24:30.480
+Servant
+
+388
+00:24:30.480 --> 00:25:50.320
+Org
+
+408
+00:25:50.320 --> 00:26:19.280
+Links
+
+415
+00:26:19.280 --> 00:28:41.160
+Navigation
+
+449
+00:28:41.160 --> 00:29:39.520
+Going the other direction
diff --git a/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt
new file mode 100644
index 00000000..e2bd489c
--- /dev/null
+++ b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt
@@ -0,0 +1,1354 @@
+WEBVTT captioned by anush
+
+00:00.000 --> 00:03.499
+Today, I will talk about Haskell code exploration for Emacs.
+
+00:03.500 --> 00:06.499
+What is Haskell? It is a purely functional language.
+
+00:06.500 --> 00:09.499
+For example, every value in Haskell is immutable.
+
+00:09.500 --> 00:12.999
+And it is the main compiler of Haskell, GHC.
+
+00:13.000 --> 00:15.999
+It provides API for the whole compilation pipeline.
+
+00:16.000 --> 00:00:18.324
+For example, the tools mentioned in this talk,
+
+00:00:18.424 --> 00:00:19.999
+including hcel and haddorg,
+
+00:20.000 --> 00:24.499
+they use, they heavily utilize the GHC front-end API
+
+00:24.500 --> 00:00:26.644
+for parsing and understanding
+
+00:00:26.744 --> 00:00:29.499
+the identifiers in Haskell source files.
+
+00:29.500 --> 00:00:31.444
+Roughly speaking,
+
+00:00:31.544 --> 00:00:34.564
+a Haskell program consists of several parts.
+
+00:00:34.664 --> 00:00:36.964
+it begins with some front matters, including,
+
+00:00:37.064 --> 00:00:39.924
+for example, language extensions,
+
+00:00:40.024 --> 00:00:43.964
+which are optional language features one might want to use
+
+00:00:44.064 --> 00:00:48.364
+for convenience.
+
+00:00:48.464 --> 00:00:52.499
+The front matters also contain module exports.
+
+00:52.500 --> 00:00:55.684
+So for example, here we define,
+
+00:00:55.784 --> 00:00:57.999
+we declare module F2Md.Config
+
+00:58.000 --> 00:01:00.884
+for this Haskell source file,
+
+00:01:00.984 --> 00:01:02.999
+which exports these four identifiers
+
+01:03.000 --> 01:07.499
+that other source files can use when importing F2Md.Config.
+
+01:07.500 --> 00:01:10.684
+And the next will be
+
+00:01:10.784 --> 00:01:13.999
+a block of imports so that we can use libraries
+
+01:14.000 --> 01:16.999
+and identifiers in these libraries.
+
+01:17.000 --> 00:01:21.644
+The bulk of a Haskell source file normally is
+
+00:01:21.744 --> 00:01:22.999
+a list of declarations,
+
+01:23.000 --> 01:25.999
+including values, types, and instances, and so on.
+
+01:26.000 --> 00:01:29.084
+The difference between a value and a type is that
+
+00:01:29.184 --> 00:01:30.499
+the type of a value is a type,
+
+01:30.500 --> 00:01:33.964
+and the type of a type is a kind.
+
+00:01:34.064 --> 00:01:38.484
+For example, here's a small block of Haskell source code.
+
+00:01:38.584 --> 00:01:41.404
+We define Range type
+
+00:01:41.504 --> 00:01:44.999
+from a lower-end integer to a higher-end integer.
+
+01:45.000 --> 00:01:51.364
+We also declare a value r of the type Range,
+
+00:01:51.464 --> 00:01:53.999
+which is Range from 2 to 7,
+
+01:54.000 --> 00:02:01.004
+because in Haskell, we like to--
+
+00:02:01.104 --> 00:02:03.999
+by default, functions can be curried,
+
+02:04.000 --> 00:02:09.804
+which basically means, by default, we want to utilize
+
+00:02:09.904 --> 00:02:11.999
+the partial application of functions.
+
+00:02:12.000 --> 00:02:17.284
+We don't require parens surrounding arguments
+
+00:02:17.384 --> 00:02:19.364
+when invoking a function.
+
+00:02:19.464 --> 00:02:22.724
+That makes it possible, if you want,
+
+00:02:22.725 --> 00:02:24.999
+to write Haskell like Lisp
+
+02:25.000 --> 02:27.999
+by adding a bit of redundant parens.
+
+02:28.000 --> 00:02:30.044
+So for example,
+
+00:02:30.144 --> 00:02:33.684
+here are two blocks of code, one Lisp, one Haskell,
+
+00:02:33.784 --> 00:02:35.999
+and they look quite similar to each other.
+
+02:36.000 --> 02:37.999
+What is a code explorer?
+
+02:38.000 --> 00:02:39.444
+A code explorer is a tool
+
+00:02:39.544 --> 00:02:42.624
+to browse its code base to its code comprehension.
+
+00:02:42.724 --> 00:02:45.324
+Code explorer commonly comes with
+
+00:02:45.424 --> 00:02:46.999
+several functionalities or features,
+
+02:47.000 --> 00:02:49.244
+including a cross-referencer,
+
+00:02:49.344 --> 00:02:52.999
+which allows going to definitions of an identifier at points
+
+02:53.000 --> 00:02:56.444
+or looking up references of an identifier,
+
+00:02:56.544 --> 00:02:57.999
+like where it is used.
+
+02:58.000 --> 03:03.999
+So the example in Emacs would be xref.
+
+03:04.000 --> 00:03:07.604
+Code explorer also would be able to show you
+
+00:03:07.704 --> 00:03:09.999
+documentation and signatures of identifiers at points.
+
+03:10.000 --> 00:03:13.884
+In Emacs, that would be eldoc.
+
+00:03:13.984 --> 00:03:16.999
+It also commonly allows you to search for identifiers.
+
+03:17.000 --> 00:03:19.884
+Something like that in Emacs
+
+00:03:19.984 --> 00:03:21.999
+could be describe-function and find-function.
+
+03:22.000 --> 00:03:24.684
+Code explorer is normally
+
+00:03:24.784 --> 00:03:27.364
+quite often implemented in two parts,
+
+00:03:27.464 --> 00:03:27.999
+the indexer and the server,
+
+03:28.000 --> 00:03:32.484
+where the indexer parses the source code files,
+
+00:03:32.584 --> 00:03:33.999
+indexes the identifiers,
+
+03:34.000 --> 00:03:36.284
+and stores the information of identifiers
+
+00:03:36.384 --> 00:03:37.999
+like the definition, size, and the currencies,
+
+03:38.000 --> 03:41.999
+either in databases or in files.
+
+03:42.000 --> 00:03:44.444
+The other part is the server,
+
+00:03:44.544 --> 00:03:48.999
+which uses the database created by the indexer
+
+03:49.000 --> 00:03:53.004
+to serve the information of the identifier.
+
+00:03:53.104 --> 00:03:57.004
+Before I present my solution to code exploring,
+
+00:03:57.104 --> 00:04:00.999
+some description of prior art is in order.
+
+04:01.000 --> 00:04:05.284
+There are several tools that you can use
+
+00:04:05.384 --> 00:04:07.999
+to aid code exploration,
+
+04:08.000 --> 00:04:13.444
+including tech-based tools like hasktags and hs-tags.
+
+00:04:13.544 --> 00:04:15.484
+The limitation with these tools
+
+00:04:15.584 --> 00:04:17.999
+is they are focused on the current projects only
+
+04:18.000 --> 00:04:19.604
+and do not work
+
+00:04:19.704 --> 00:04:25.999
+for cross-packaging reference and definition.
+
+04:26.000 --> 00:04:31.044
+Another problem with the tag-based tools is
+
+00:04:31.045 --> 00:04:34.684
+they might not handle symbols with the same name properly.
+
+00:04:34.784 --> 00:04:35.999
+Sometimes they get confused,
+
+04:36.000 --> 00:04:43.324
+and they ask you to choose which definition,
+
+00:04:43.424 --> 00:04:45.924
+what is the correct definition site,
+
+00:04:46.024 --> 00:04:49.244
+even though the occurrence of the symbol
+
+00:04:49.344 --> 00:04:54.999
+or the symbol at point has only one definition ambiguously.
+
+04:55.000 --> 04:57.999
+Another tool is the haskell-mode.
+
+04:58.000 --> 00:05:02.684
+It has some limited support for eldoc
+
+00:05:02.784 --> 00:05:06.604
+by displaying the signature of an identifier at points,
+
+00:05:06.704 --> 00:05:11.764
+but the identifier has to be something
+
+00:05:11.864 --> 00:05:14.999
+that is commonly known or sort of built-in
+
+05:15.000 --> 05:17.999
+or come from the base library of Haskell.
+
+05:18.000 --> 00:05:20.244
+So for example,
+
+00:05:20.344 --> 00:05:24.244
+it works for common functions like head and tail.
+
+00:05:24.344 --> 00:05:26.999
+And you can see that the signature is displayed here.
+
+05:27.000 --> 00:05:29.564
+However, it does not work for,
+
+00:05:29.664 --> 00:05:31.804
+let's say, IO. IO is a type.
+
+00:05:31.904 --> 00:05:32.999
+Maybe that's the reason.
+
+05:33.000 --> 00:05:37.324
+Let's find another function
+
+00:05:37.424 --> 00:05:39.999
+that's not from the base library.
+
+05:40.000 --> 05:41.999
+toJSON is from the Aeson library,
+
+05:42.000 --> 05:46.999
+so no signature is displayed here.
+
+05:47.000 --> 00:05:51.164
+It also provides
+
+00:05:51.264 --> 00:05:53.324
+some sort of goto-declaration functionality
+
+00:05:53.424 --> 00:05:56.324
+to jump to any declaration in a file.
+
+00:05:56.424 --> 00:06:00.564
+To do that, one has to first run haskell-decl-scan-mode
+
+00:06:00.664 --> 00:06:02.999
+to enter this minor mode.
+
+06:03.000 --> 00:06:08.044
+Then we can run imenu to go to any definition,
+
+00:06:08.144 --> 00:06:10.999
+to go to any declaration, like getHomeR.
+
+06:11.000 --> 00:06:13.724
+Apparently, after running that,
+
+00:06:13.824 --> 00:06:15.999
+we are able to go to definition.
+
+06:16.000 --> 06:18.999
+So for example, let's see,
+
+06:19.000 --> 06:21.999
+we want to find definition of getCityJR.
+
+06:22.000 --> 00:06:25.524
+And indeed, it works
+
+00:06:25.624 --> 00:06:28.524
+if it's within the same source file, of course.
+
+00:06:28.624 --> 00:06:31.999
+It still does not work for cross-packaging identifiers.
+
+06:32.000 --> 00:06:36.924
+So HandlerFor is probably an identifier from servant.
+
+00:06:37.024 --> 00:06:39.999
+Or no, not necessarily servant. Maybe WAI.
+
+06:40.000 --> 00:06:43.404
+Anyway, it's another library.
+
+00:06:43.504 --> 00:06:50.404
+And how about find-references?
+
+00:06:50.504 --> 00:07:01.124
+find-references also works somehow for this file.
+
+00:07:01.224 --> 00:07:06.684
+How about WidgetFor?
+
+00:07:06.784 --> 00:07:13.644
+It works for WidgetFor too.
+
+00:07:13.744 --> 00:07:17.999
+It has some support for goto-definition and find-references.
+
+07:18.000 --> 07:25.999
+But as usual, it does not support such things cross-package.
+
+07:26.000 --> 00:07:27.364
+And finally, we have
+
+00:07:27.365 --> 00:07:30.999
+the Sledgehammer HLS Haskell language server.
+
+07:31.000 --> 07:32.999
+It can be used with EGLOT.
+
+07:33.000 --> 00:07:40.804
+But the problem with HLS, HLS has many many features
+
+00:07:40.904 --> 00:07:42.844
+because it is a language server,
+
+00:07:42.944 --> 00:07:50.999
+like renaming, like eldoc for standard libraries, and so on.
+
+07:51.000 --> 07:56.999
+But the problem with HLS is, one, that it is very, very slow.
+
+07:57.000 --> 07:59.999
+And I wouldn't use it with my laptop.
+
+08:00.000 --> 08:04.999
+And two, it also does not support cross-package referencing.
+
+08:05.000 --> 08:07.999
+In fact, there's an outstanding GitHub issue about this.
+
+08:08.000 --> 00:08:12.964
+So cross-package referencing and goto-definition
+
+00:08:13.064 --> 00:08:17.164
+is sort of a common shortfall,
+
+00:08:17.264 --> 00:08:20.999
+a common problem for these existing Haskell code explorers.
+
+08:21.000 --> 08:22.999
+Then finally, we also have hoogle and hackage.
+
+08:23.000 --> 00:08:28.284
+Hoogle is a search engine for Haskell identifiers,
+
+00:08:28.384 --> 00:08:30.644
+and the results link to Hackage,
+
+00:08:30.744 --> 00:08:33.604
+which is the Haskell documentation website
+
+00:08:33.704 --> 00:08:34.999
+for all Haskell libraries.
+
+08:35.000 --> 00:08:40.004
+Haskell Hackage has functionality
+
+00:08:40.104 --> 00:08:44.999
+where you can jump to the source code file rendered in HTML,
+
+08:45.000 --> 00:08:49.444
+and you can click on the identifiers there
+
+00:08:49.544 --> 00:08:51.524
+to jump to definitions,
+
+00:08:51.624 --> 00:08:54.044
+but it does not support find references,
+
+00:08:54.144 --> 00:08:58.999
+and it is rather basic.
+
+08:59.000 --> 00:09:01.644
+Then I learned about haskell-code-explorer,
+
+00:09:01.744 --> 00:09:04.999
+which is a fully-fledged Haskell code explorer.
+
+09:05.000 --> 00:09:07.724
+It is written by someone else.
+
+00:09:07.824 --> 00:09:09.164
+It is a web application
+
+00:09:09.264 --> 00:09:11.999
+for exploring Haskell package codebases.
+
+09:12.000 --> 00:09:16.244
+The official reference instance for haskell-code-explorer
+
+00:09:16.344 --> 00:09:18.999
+is available at this URL, which I will demo soon.
+
+09:19.000 --> 09:24.999
+What I did with these packages... I ported it to GHC 9.2.
+
+09:25.000 --> 00:09:29.044
+I renamed it to hcel because I want to focus on Emacs clients
+
+00:09:29.144 --> 00:09:30.999
+rather than JavaScript clients, which I will explain later.
+
+09:31.000 --> 09:36.999
+And I also wrote an Emacs client package, of course.
+
+09:37.000 --> 00:09:41.404
+This is what haskell-code-explorer looks like.
+
+00:09:41.504 --> 00:09:46.924
+On the homepage, it is a list of indexed packages
+
+00:09:47.024 --> 00:09:50.044
+indexed by the indexer.
+
+00:09:50.144 --> 00:09:53.844
+One can filter it by the package name
+
+00:09:53.944 --> 00:10:04.999
+or look for identifiers directly across all packages.
+
+10:05.000 --> 00:10:09.884
+Let's have a look at base. There are three versions.
+
+00:10:09.984 --> 00:10:14.999
+Let's have a look at the latest version, 4.12.0.0.
+
+10:15.000 --> 00:10:18.964
+Once entering the package view,
+
+00:10:19.064 --> 00:10:24.444
+you are shown a list of all modules by their path,
+
+00:10:24.544 --> 00:10:28.999
+as well as a tree of these module files.
+
+10:29.000 --> 00:10:32.524
+You can filter by module name or file name,
+
+00:10:32.624 --> 00:10:34.324
+or you can search for identifier within the same package
+
+00:10:34.424 --> 00:10:35.999
+or in all packages.
+
+10:36.000 --> 00:10:43.204
+Let's say we want to learn about Control.Monad.
+
+00:10:43.304 --> 00:10:46.884
+Now we are in the module view.
+
+00:10:46.984 --> 00:10:49.804
+The source file is presented to you,
+
+00:10:49.904 --> 00:10:54.999
+and it has links to identifiers.
+
+10:55.000 --> 00:11:01.804
+When you hover over them, the documentation shows up,
+
+00:11:01.904 --> 00:11:04.999
+including the signature where it is defined.
+
+11:05.000 --> 00:11:10.244
+You can go to its definition or find references.
+
+00:11:10.344 --> 00:11:20.164
+Let's say we want to go to the definition of Monad.
+
+00:11:20.264 --> 00:11:25.484
+It jumps to the definition site of the monad type class.
+
+00:11:25.584 --> 00:11:28.004
+If we click at the definition site,
+
+00:11:28.104 --> 00:11:32.124
+it brings up a list of references.
+
+00:11:32.224 --> 00:11:33.644
+On the left, you can choose
+
+00:11:33.744 --> 00:11:38.999
+which package you want to find references of monad in.
+
+11:39.000 --> 11:46.999
+Let's look at the random one, avwx.
+
+11:47.000 --> 00:11:54.044
+Here is a list of results where Monad is used in avwx.
+
+00:11:54.144 --> 00:11:57.764
+This is a module path.
+
+00:11:57.864 --> 00:12:06.324
+One can go to any of these results.
+
+00:12:06.424 --> 00:12:07.844
+We can search for things in all packages
+
+00:12:07.944 --> 00:12:09.484
+or in the current package.
+
+00:12:09.584 --> 00:12:12.999
+Let’s say I want to search for "Read"
+
+12:13.000 --> 00:12:19.244
+I think this is the "Read" that is commonly used in Haskell,
+
+00:12:19.344 --> 00:12:24.999
+the read type class for parsing strings into values.
+
+12:25.000 --> 00:12:31.004
+I think that is more or less it.
+
+00:12:31.104 --> 00:12:34.524
+That is the Haskell Code Explorer web application
+
+00:12:34.624 --> 00:12:38.204
+in all its glory.
+
+00:12:38.304 --> 00:12:40.884
+Let's go back to the slides.
+
+00:12:40.984 --> 00:12:43.364
+That was the web application,
+
+00:12:43.464 --> 00:12:46.444
+which is basically a JavaScript client
+
+00:12:46.544 --> 00:12:48.644
+that talks to the server
+
+00:12:48.744 --> 00:12:50.964
+by sending requests and receiving
+
+00:12:51.064 --> 00:12:54.999
+and parsing the JSON results or JSON responses.
+
+12:55.000 --> 00:13:02.404
+Initially, I was interested in hacking the web client.
+
+00:13:02.504 --> 00:13:04.999
+It uses the ember.js web framework.
+
+13:05.000 --> 00:13:09.844
+The first thing to do was to npm install ember-cli.
+
+00:13:09.944 --> 00:13:16.124
+It gives me 12 vulnerabilities,
+
+00:13:16.224 --> 00:13:18.999
+4 low, 2 moderate, 3 high, 3 critical.
+
+13:19.000 --> 00:13:26.084
+I don't know how often it is the case
+
+00:13:26.184 --> 00:13:32.964
+when we don't really care about these nasty vulnerabilities
+
+00:13:33.064 --> 00:13:35.999
+from Node.js or npm because they are so common.
+
+13:36.000 --> 00:13:41.044
+I don't quite like that.
+
+00:13:41.144 --> 00:13:45.364
+Another reason for favoring Emacs clients
+
+00:13:45.464 --> 00:13:48.999
+over JavaScript clients is user freedom.
+
+13:49.000 --> 00:13:53.284
+Emacs is geared towards user freedom.
+
+00:13:53.384 --> 00:14:01.564
+It allows users maximum freedom to customize or mod Emacs.
+
+00:14:01.664 --> 00:14:07.164
+I think Emacs clients can be a way to fix JavaScript traps,
+
+00:14:07.264 --> 00:14:14.244
+like using user scripts to replace non-free JavaScript.
+
+00:14:14.344 --> 00:14:19.484
+There are tools to do that, for example, like Haketilo.
+
+00:14:19.584 --> 00:14:21.404
+Why write JavaScript replacement
+
+00:14:21.504 --> 00:14:25.164
+if we can write Elisp replacement?
+
+00:14:25.264 --> 00:14:31.684
+If we overwrite all kinds of front-ends in Emacs
+
+00:14:31.784 --> 00:14:34.404
+for commonly-used web applications
+
+00:14:34.504 --> 00:14:36.999
+like Reddit, Hacker News, what have you,
+
+14:37.000 --> 00:14:40.804
+then we have an Emacs app store
+
+00:14:40.904 --> 00:14:43.604
+where we can just install these applications
+
+00:14:43.704 --> 00:14:51.084
+and browse the web more freely.
+
+00:14:51.184 --> 00:14:56.044
+Back to hcel, which is the Emacs client I wrote.
+
+00:14:56.144 --> 00:14:59.084
+I tried to reuse as much of Emacs built-ins as possible,
+
+00:14:59.184 --> 00:15:03.044
+including eldoc, for showing documentation,
+
+00:15:03.144 --> 00:15:04.764
+xref for cross-referencer,
+
+00:15:04.864 --> 00:15:06.999
+compilation-mode for showing search results of identifiers,
+
+15:07.000 --> 00:15:11.604
+outline-mode for a hierarchical view
+
+00:15:11.704 --> 00:15:14.284
+of package module identifiers,
+
+00:15:14.384 --> 00:15:17.999
+sort of a cursor-mode for highlighting identifiers,
+
+15:18.000 --> 00:15:26.044
+help-mode for displaying quick help for Haskell identifiers,
+
+00:15:26.144 --> 00:15:27.604
+integration with haddorg,
+
+00:15:27.704 --> 00:15:31.204
+which I will mention later, etc.
+
+00:15:31.304 --> 00:15:37.999
+It is available as hcel without the dot on GNU ELPA.
+
+15:38.000 --> 00:15:40.084
+Time for a demo.
+
+00:15:40.184 --> 00:15:42.484
+To start using hc.el, surprise surprise,
+
+00:15:42.584 --> 00:15:45.084
+we run the hcel command.
+
+00:15:45.184 --> 00:15:46.884
+We are presented with a list of packages
+
+00:15:46.984 --> 00:15:51.999
+indexed by the hcel indexer.
+
+15:52.000 --> 00:15:53.964
+This is an outline mode,
+
+00:15:54.064 --> 00:15:58.724
+so we can tab to list all the modules
+
+00:15:58.824 --> 00:16:00.999
+represented by the module path.
+
+16:01.000 --> 00:16:03.404
+We can further tab into the list of identifiers
+
+00:16:03.504 --> 00:16:04.999
+declared in this module.
+
+16:05.000 --> 00:16:09.084
+Now it asks whether you want to open module source.
+
+00:16:09.184 --> 00:16:11.884
+This is because some module source code
+
+00:16:11.984 --> 00:16:13.999
+can be quite large and it can take a bit of time.
+
+16:14.000 --> 00:16:17.684
+In this case, the control monad is quite small,
+
+00:16:17.784 --> 00:16:19.844
+so let's say yes.
+
+00:16:19.944 --> 00:16:24.004
+We see the list of identifiers.
+
+00:16:24.104 --> 00:16:27.999
+One can jump to an identifier forever.
+
+16:28.000 --> 16:32.999
+As you can see, the identifiers at points are highlighted.
+
+16:33.000 --> 00:16:36.124
+This can be particularly useful
+
+00:16:36.224 --> 00:16:38.604
+in a large function declaration
+
+00:16:38.704 --> 00:16:39.999
+where you come to see, for example,
+
+16:40.000 --> 00:16:44.204
+all the occurrences of an identifier
+
+00:16:44.304 --> 00:16:47.999
+inside the body of the declaration.
+
+16:48.000 --> 00:16:50.724
+These are declarations
+
+00:16:50.824 --> 00:16:52.999
+which in Haskell mode are listed in imenu.
+
+16:53.000 --> 16:59.999
+We can do the same here in hcel source mode.
+
+17:00.000 --> 17:05.999
+It lists all the declarations with their signature.
+
+17:06.000 --> 17:12.999
+Let's say we want to jump to this funny operator.
+
+17:13.000 --> 00:17:20.324
+It worked and you can also go back and forth
+
+00:17:20.424 --> 00:17:25.999
+within the declarations by pressing "n" and "p".
+
+17:26.000 --> 00:17:30.804
+Similarly, you can do something similar in the outline mode
+
+00:17:30.904 --> 00:17:37.999
+by toggling the follow mode, just like in org-agenda.
+
+17:38.000 --> 00:17:40.124
+Let's turn it off.
+
+00:17:40.224 --> 00:17:45.999
+Now, how about find definition references?
+
+17:46.000 --> 00:17:48.964
+Using xref,
+
+00:17:49.064 --> 00:17:52.999
+we can jump to the definition of Int and jump back.
+
+17:53.000 --> 17:55.999
+Jump to Maybe, jump back.
+
+17:56.000 --> 00:18:00.924
+Let's have a look at references of replicateM.
+
+00:18:01.024 --> 00:18:03.364
+There are plenty of them.
+
+00:18:03.464 --> 00:18:08.999
+Maybe we want to check out ghc-lib.
+
+18:09.000 --> 00:18:11.244
+Here are all the references
+
+00:18:11.344 --> 00:18:15.999
+and you can of course jump to any of them in the results.
+
+18:16.000 --> 18:18.999
+Cool.
+
+18:19.000 --> 00:18:21.764
+You may have already noticed
+
+00:18:21.864 --> 00:18:27.084
+the eldoc displaying the documentation
+
+00:18:27.184 --> 00:18:34.804
+and signature of identifiers.
+
+00:18:34.904 --> 00:18:44.004
+For example, here it shows the signature of replicateM,
+
+00:18:44.104 --> 00:18:46.999
+where it is defined, and its documentation.
+
+18:47.000 --> 18:55.999
+We can bring up the eldoc buffer.
+
+18:56.000 --> 00:18:58.164
+In the eldoc buffer,
+
+00:18:58.264 --> 00:19:00.084
+there are also links to other identifiers,
+
+00:19:00.184 --> 00:19:04.444
+which takes you to the definition of these identifiers,
+
+00:19:04.544 --> 00:19:07.524
+like minBound.
+
+00:19:07.624 --> 00:19:10.764
+Apparently, this is not working.
+
+00:19:10.864 --> 00:19:13.004
+I'm pretty sure it maybe works.
+
+00:19:13.104 --> 00:19:16.999
+Let's go to nothing or just...
+
+19:17.000 --> 00:19:19.764
+I think those didn't work because
+
+00:19:19.864 --> 00:19:24.044
+the module source for those identifiers is not open.
+
+00:19:24.144 --> 00:19:30.204
+Of course, you can search
+
+00:19:30.304 --> 00:19:32.924
+for any identifiers across all indexed packages
+
+00:19:33.024 --> 00:19:37.999
+by invoking hcel-global-ids.
+
+19:38.000 --> 19:41.999
+Let's say we want to search for Read.
+
+19:42.000 --> 00:19:47.364
+We are presented with a list of results,
+
+00:19:47.464 --> 00:19:53.999
+which are identifiers starting with Read with capital R.
+
+19:54.000 --> 00:19:57.204
+They also show where they are defined
+
+00:19:57.304 --> 00:20:06.999
+and the documentation, just like in eldoc.
+
+20:07.000 --> 00:20:13.844
+One can also directly jump to the identifier
+
+00:20:13.944 --> 00:20:19.999
+in the mini-buffer results.
+
+20:20.000 --> 00:20:21.924
+For example, we want to check out this Read2
+
+00:20:22.024 --> 00:20:27.999
+defined in base-4.12.0.0 Data.Functor.Classes
+
+20:28.000 --> 20:33.999
+There we go.
+
+20:34.000 --> 00:20:37.764
+Another functionality of hcel
+
+00:20:37.864 --> 00:20:40.999
+is the help buffer integration.
+
+20:41.000 --> 00:20:46.564
+We can do hcel-help and then let's say
+
+00:20:46.565 --> 00:20:52.644
+we want to learn about the read type class.
+
+00:20:52.744 --> 00:20:55.084
+This is a help buffer
+
+00:20:55.184 --> 00:21:00.804
+and you can jump to other definitions
+
+00:21:00.904 --> 00:21:02.364
+within the help buffer
+
+00:21:02.464 --> 00:21:06.999
+to read the documentation like readsPrec.
+
+21:07.000 --> 21:10.999
+It says Server version cannot be satistifed. Actual version.
+
+21:11.000 --> 00:21:14.684
+This means we need to tell hecl
+
+00:21:14.784 --> 00:21:16.999
+that the server has the correct version.
+
+21:17.000 --> 00:21:21.644
+hecl-fetch-server-version.
+
+00:21:21.744 --> 00:21:25.604
+Wait a bit for it to update
+
+00:21:25.704 --> 00:21:26.999
+the knowledge of the server version.
+
+21:27.000 --> 21:32.999
+Now you can follow the links, Read, readsPrec.
+
+21:33.000 --> 21:37.999
+You can do the "l" and "r" to navigate within the history.
+
+21:38.000 --> 21:42.999
+ReadS, ReadP.
+
+21:43.000 --> 00:21:45.924
+Just like in the help buffer for elisp code,
+
+00:21:46.024 --> 00:21:52.999
+you can jump to the definition.
+
+21:53.000 --> 21:59.999
+I believe that is everything, more or less.
+
+22:00.000 --> 22:04.999
+That concludes the demo.
+
+22:05.000 --> 00:22:07.044
+Now let's turn to haddorg,
+
+00:22:07.144 --> 00:22:08.999
+which is an Org backend for Haddock.
+
+22:09.000 --> 22:12.999
+Haddock is the documentation generator for Haskell packages.
+
+22:13.000 --> 00:22:15.044
+For example,
+
+00:22:15.144 --> 00:22:21.999
+the official Haskell package documentation website Hackage,
+
+22:22.000 --> 00:22:25.804
+all the documentation there is generated by Haddock
+
+00:22:25.904 --> 00:22:27.999
+into the HTML format.
+
+22:28.000 --> 00:22:31.324
+Haddock has several backends
+
+00:22:31.424 --> 00:22:34.284
+that convert the intermediate representation
+
+00:22:34.384 --> 00:22:36.964
+called interface to various output formats,
+
+00:22:37.064 --> 00:22:41.764
+including HTML, LaTeX, and Hugo.
+
+00:22:41.864 --> 00:22:44.804
+HTML is the main format with a lot of features.
+
+00:22:44.904 --> 00:22:48.999
+LaTeX is less so, and I don't think it is widely used.
+
+22:49.000 --> 22:52.999
+Let's have a look at an HTML example.
+
+22:53.000 --> 00:23:01.084
+This is a PDF because these HTML files can be rather large
+
+00:23:01.184 --> 00:23:06.999
+and slow down EWW significantly.
+
+23:07.000 --> 00:23:10.164
+It's faster to convert it to PDF
+
+00:23:10.264 --> 00:23:16.999
+and read it from pdf-tools.
+
+23:17.000 --> 00:23:20.764
+Looks like this is as big as it goes.
+
+00:23:20.864 --> 00:23:26.044
+I hope you can still see it.
+
+00:23:26.144 --> 00:23:30.044
+Can I still enlarge it a bit more? Maybe.
+
+00:23:30.144 --> 00:23:32.964
+This is Servant.Server.
+
+00:23:33.064 --> 00:23:35.999
+It is a module in the servant-server package.
+
+23:36.000 --> 23:41.999
+It is a widely used package for writing servers.
+
+23:42.000 --> 00:23:49.804
+It starts with a heading, which is the name of the module,
+
+00:23:49.904 --> 00:23:52.684
+and the table of contents.
+
+00:23:52.784 --> 00:23:55.999
+Then a heading: Run an wai application from an API.
+
+23:56.000 --> 00:24:00.804
+Under this heading, there are all the relevant identifiers
+
+00:24:00.904 --> 00:24:08.524
+that is concerned with running a WAI application from API,
+
+00:24:08.624 --> 00:24:13.204
+including serve, which is one of the main entry points
+
+00:24:13.304 --> 00:24:15.524
+for a Servant.Server.
+
+00:24:15.624 --> 00:24:21.604
+It has a signature linkable to the other identifiers,
+
+00:24:21.704 --> 00:24:23.004
+the documentation,
+
+00:24:23.104 --> 00:24:26.644
+an example with a Haskell source code block.
+
+00:24:26.744 --> 00:24:30.999
+That's what HTML output looks like.
+
+24:31.000 --> 00:24:33.924
+As I mentioned,
+
+00:24:34.024 --> 00:24:35.804
+there are several downsides or drawbacks with that,
+
+00:24:35.904 --> 00:24:40.999
+like the HTML files can be huge and slow down EWW.
+
+24:41.000 --> 00:24:46.124
+Also, every module is an HTML of itself,
+
+00:24:46.224 --> 00:24:48.284
+and there's also an HTML for the package
+
+00:24:48.384 --> 00:24:49.999
+with a list of all the modules.
+
+24:50.000 --> 00:24:54.644
+Whereas the Org backend
+
+00:24:54.744 --> 00:25:04.164
+is better in that it is much more compact.
+
+00:25:04.264 --> 00:25:07.404
+All the modules under the same package
+
+00:25:07.504 --> 00:25:10.684
+are included in one Org file
+
+00:25:10.784 --> 00:25:12.999
+as sub-headings, level 2 headings.
+
+25:13.000 --> 00:25:19.404
+So, servant-server, Servant.Server, that is the module.
+
+00:25:19.504 --> 00:25:21.844
+So basically, this level 2 heading
+
+00:25:21.944 --> 00:25:24.999
+contains all the information in this PDF.
+
+25:25.000 --> 25:28.999
+Run the WAI application from API, serve.
+
+25:29.000 --> 00:25:39.124
+It has a signature that links to other identifiers
+
+00:25:39.224 --> 00:25:41.999
+and the documentation that's also linkable.
+
+25:42.000 --> 00:25:47.124
+The Haskell source block is now an Org source block,
+
+00:25:47.224 --> 00:25:49.404
+and you can do all sorts of interesting things
+
+00:25:49.504 --> 00:25:52.644
+with it using org-babel.
+
+00:25:52.744 --> 00:25:55.999
+Let's check the links as server.
+
+25:56.000 --> 25:59.999
+Right, so the link works.
+
+26:00.000 --> 00:26:05.284
+Application, right, Request.
+
+00:26:05.384 --> 00:26:08.284
+It also supports cross-packaging package linking,
+
+00:26:08.384 --> 00:26:12.204
+so following the link to request
+
+00:26:12.304 --> 00:26:17.524
+takes us from servant-server package Org documentation
+
+00:26:17.624 --> 00:26:24.684
+to the WAI Org documentation.
+
+00:26:24.784 --> 00:26:27.444
+Another nice thing with Org documentation
+
+00:26:27.544 --> 00:26:32.644
+is that you can use Org functions
+
+00:26:32.744 --> 00:26:40.444
+like org-goto to jump to any identifiers.
+
+00:26:40.544 --> 00:26:45.804
+Let's say we want to jump to application.
+
+00:26:45.904 --> 00:26:49.999
+We have toApplication. So it jumpts to toApplication.
+
+26:50.000 --> 00:26:53.924
+I guess application is not an identifier,
+
+00:26:54.024 --> 00:26:55.724
+yes, it is more like a type alias,
+
+00:26:55.824 --> 00:26:58.564
+that's why we couldn't find it.
+
+00:26:58.664 --> 00:27:00.999
+So that is haddorg.
+
+27:01.000 --> 00:27:06.004
+And of course, I implemented a bit of integration
+
+00:27:06.104 --> 00:27:08.444
+between haddorg and hcel
+
+00:27:08.544 --> 00:27:11.204
+so that we can jump from one to the other.
+
+00:27:11.304 --> 00:27:14.999
+Let's go back to servant.
+
+27:15.000 --> 27:23.999
+Let's see, ServerT.
+
+27:24.000 --> 00:27:27.004
+Maybe we want to check out
+
+00:27:27.104 --> 00:27:31.844
+the source code definition of ServerT.
+
+00:27:31.944 --> 00:27:36.164
+To find out exactly what sort of type alias it is,
+
+00:27:36.264 --> 00:27:43.084
+like what is the alias (or type synonym)
+
+00:27:43.184 --> 00:27:49.404
+We run hcel-identifier-at-point--
+
+00:27:49.504 --> 00:27:52.244
+sorry, hcel-haddorg-to-hcel-definition...
+
+00:27:52.344 --> 00:27:54.999
+Oh, we have an HTTP error.
+
+27:55.000 --> 27:58.999
+Typ ServerT not found in module src/Servant/Server.hs
+
+27:59.000 --> 00:28:01.124
+Why? Well, this is because
+
+00:28:01.125 --> 00:28:04.844
+the HCEL server only understands,
+
+00:28:04.944 --> 00:28:07.724
+it only has knowledge of identifiers
+
+00:28:07.824 --> 00:28:11.999
+that is defined in the original source file.
+
+28:12.000 --> 00:28:17.084
+So, it is not aware of, say,
+
+00:28:17.184 --> 00:28:20.999
+identifiers that are re-exported in the module.
+
+28:21.000 --> 00:28:25.724
+Most likely, Servant.Server module re-exports ServerT
+
+00:28:25.824 --> 00:28:28.604
+from another module.
+
+00:28:28.704 --> 00:28:29.644
+We will probably have better luck
+
+00:28:29.744 --> 00:28:34.999
+looking into some internal modules like this one.
+
+28:35.000 --> 28:38.999
+Let's try this type class HasContextEntry.
+
+28:39.000 --> 28:41.999
+So this time it worked.
+
+28:42.000 --> 00:28:44.244
+And, of course, we can go the other direction
+
+00:28:44.344 --> 00:28:47.999
+from hecl to haddorg.
+
+28:48.000 --> 00:28:51.484
+Let's say if we want to display named context
+
+00:28:51.584 --> 00:28:53.999
+in the haddorg documentation
+
+28:54.000 --> 00:29:01.524
+so that we can read about, other identifiers documentation
+
+00:29:01.624 --> 00:29:03.999
+that is related to named context.
+
+29:04.000 --> 29:07.999
+We do hecl-identifier-at-point-to-haddorg
+
+29:08.000 --> 29:13.999
+And it does take us to the server-server old file.
+
+29:14.000 --> 29:17.999
+Okay.
+
+29:18.000 --> 29:20.999
+And that concludes my presentation.
+
+29:21.000 --> 00:29:23.484
+You can find hecl in GNU Elpa,
+
+00:29:23.584 --> 00:29:24.999
+and you can also find the source code,
+
+29:25.000 --> 00:29:27.364
+as well as the source of haddorg
+
+00:29:27.464 --> 00:29:29.764
+and instructions on how to generate org documentation
+
+00:29:29.864 --> 00:29:32.999
+using haddorg in my cgit instance.
+
+29:33.000 --> 00:29:36.684
+Thank you for your attention.
+
+00:29:36.784 --> 00:29:37.999
+I hope you enjoy the rest of the conference.
+
+29:38.000 --> 29:51.000
+Thank you.
diff --git a/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.vtt b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.vtt
new file mode 100644
index 00000000..85fd117d
--- /dev/null
+++ b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.vtt
@@ -0,0 +1,653 @@
+WEBVTT
+
+00:00.000 --> 00:13.920
+And we are live. Hello again, everyone. It's been a while. I've been on break for the last
+
+00:13.920 --> 00:19.000
+one hour. It feels like I've been really far. I'm with David. Hi, David. How are you doing?
+
+00:19.000 --> 00:23.360
+Hi, Leo. I'm good. Thank you for having me on.
+
+00:23.360 --> 00:26.480
+So David, you do have the pad open in front of you.
+
+00:26.480 --> 00:27.480
+That's right.
+
+00:27.480 --> 00:32.800
+Yes. I think Sasha is putting up the pad for us so that they don't have to look at my very
+
+00:32.800 --> 00:38.520
+tiny face on BBB. I'm very small. I'm trying to push the boundaries. David, if you want
+
+00:38.520 --> 00:44.320
+to take some questions, I'm sorry, I've got hells whispering in my ears at the same time.
+
+00:44.320 --> 00:49.800
+Give me just a second. David, can you maybe read the first question and try to answer
+
+00:49.800 --> 00:50.800
+them?
+
+00:50.800 --> 00:58.640
+Sure. Question one. Excuse me. Do you use this just for yourself or do you use this
+
+00:58.640 --> 01:04.160
+to discuss or show with doctors or health professionals? The answer is it is useful
+
+01:04.160 --> 01:10.880
+for me and it's useful for health care providers. So it's not I'm not just able to see connections
+
+01:10.880 --> 01:15.440
+myself, even if we're not seeing a connection. If I'm talking to someone, if I'm talking
+
+01:15.440 --> 01:20.640
+to a clinician, I have brought this in on a tablet. If it's an in-person thing or on
+
+01:20.640 --> 01:26.040
+the phone, if it's a video appointment with someone, just send it in an email. It's very
+
+01:26.040 --> 01:33.160
+convenient to just send the graph around as a screenshot. So it's definitely been really
+
+01:33.160 --> 01:40.920
+useful to because one thing that I touch on in the talk is that let's say that we're talking
+
+01:40.920 --> 01:45.880
+about depression, for example. Let's say, oh, well, how have you been sleeping this
+
+01:45.880 --> 01:49.440
+week? Well, if you had objective information, that's perfect. Go ahead.
+
+01:49.440 --> 01:53.840
+Oh, sorry. I was mispressing my button for production. You're good.
+
+01:53.840 --> 01:59.960
+Oh, it just caught a little clip of sound. I see. Okay. Sorry. Yes. So where was I? I
+
+01:59.960 --> 02:05.960
+would say, okay, so on the one hand, having objective information is good not only for
+
+02:05.960 --> 02:09.360
+you, but when it's time to speak to someone and give them a picture of what's going on,
+
+02:09.360 --> 02:14.800
+you don't have to generalize. Even if you're having a good day, generalizing can be really
+
+02:14.800 --> 02:19.300
+like, oh, well, how are you sleeping? Oh, well, this day I woke up that, but which way
+
+02:19.300 --> 02:22.720
+was that Wednesday or Thursday? And then I remember this friend came over, so it must
+
+02:22.720 --> 02:29.000
+have been Friday. That's not I've discovered that actually just first thing in the morning
+
+02:29.000 --> 02:33.720
+waking up recording. How many pieces of gum did I have yesterday? How much did I sleep?
+
+02:33.720 --> 02:40.000
+Okay. So someone else, this segues right into the next question. How do you input the health
+
+02:40.000 --> 02:46.120
+data? Semi-automated with Org Mode capture templates, copy paste, automated with a smart
+
+02:46.120 --> 02:51.080
+watch, and if this, then that. Tasker, Org Mode document to automatically add stuff like
+
+02:51.080 --> 02:57.040
+sleeping data. Which parts are and are not automated? Okay. So it turns out I'm using
+
+02:57.040 --> 03:03.320
+an Org Mode capture template to automate the insertion of all the little category tags
+
+03:03.320 --> 03:10.600
+in the property drawer, but not the values. I'm not using a smart watch or anything whatsoever.
+
+03:10.600 --> 03:17.560
+I am just, I look at the clock when I go to bed and I look at the bed when I wake, look
+
+03:17.560 --> 03:21.480
+at the clock when I wake up. The very first thing I do is turn on my computer and turn
+
+03:21.480 --> 03:30.160
+on Emacs and enter that data. So, you know, it would be really cool if we could get some
+
+03:30.160 --> 03:35.120
+kind of data, you know, because if it's all, you know, if it's be able to be massaged into
+
+03:35.120 --> 03:40.760
+Org Mode format, it can then go into Org GNU plot. Or maybe you could cut Org Mode out
+
+03:40.760 --> 03:45.600
+of the equation if you find a way to go directly from that data to either CSV, which Org Mode,
+
+03:45.600 --> 03:50.760
+I'm sorry, which GNU plot can read, or, you know, whether you have to wear a little script
+
+03:50.760 --> 03:56.560
+in between. And the next question, how do you track the various health statistics that
+
+03:56.560 --> 04:02.720
+you're gathering? The ones, you know, for example, nicotine is an estimate. I'm pretty
+
+04:02.720 --> 04:08.460
+sure it was six. It was pretty sure it was seven. You know what I mean? It's pretty close
+
+04:08.460 --> 04:12.820
+because I do count and I think I could at most be off by one or two. So it's not fatal
+
+04:12.820 --> 04:16.980
+to the enterprise of collecting data. The same thing with sleep. I look at the clock,
+
+04:16.980 --> 04:23.240
+but I only count half hours. I say, oh, I slept seven hours, you know, seven and a half.
+
+04:23.240 --> 04:28.280
+It's very much a back of the napkin thing, but it's precise enough overall that as you
+
+04:28.280 --> 04:33.240
+can see from the data in the talk, you can see that my sleep declined pretty steadily
+
+04:33.240 --> 04:38.160
+over the course of that. So even if some of the values are off a little bit, you're still
+
+04:38.160 --> 04:44.060
+seeing trends and you can still see connections. So it's not perfect. I would love to have
+
+04:44.060 --> 04:49.680
+some type of more automated data, but all right. So I'm going to move on to the next
+
+04:49.680 --> 04:56.280
+question. It's possible to download data from Apple Watch's health app. Is it easy enough
+
+04:56.280 --> 05:07.000
+to incorporate those.csv files into your implementation of gnuplot? Okay. So I think
+
+05:07.000 --> 05:10.680
+what it would involve if you wanted to use my template generator, it would involve making
+
+05:10.680 --> 05:17.880
+your template, but then modifying the gnuplot script to read from that file instead of from
+
+05:17.880 --> 05:27.200
+an org mode table. So I think that what you would want to do is select the, yeah, I mean,
+
+05:27.200 --> 05:33.680
+and if you want, you know, I'll be around in the IRC after and I might even be able
+
+05:33.680 --> 05:38.200
+to look at their documentation or something, just even just give a peek at it to give a
+
+05:38.200 --> 05:39.640
+better answer to this question.
+
+05:39.640 --> 05:45.640
+Cool. And just to remind everyone, so, sorry, let me try to put up, okay. I did crush Dev
+
+05:45.640 --> 05:49.400
+earlier when trying to switch window. Oh, okay. I managed to do it. Yes, I still have
+
+05:49.400 --> 05:58.240
+it in me. So let me, slightly later, we will also be opening the discussion. So this BBB
+
+05:58.240 --> 06:01.520
+instance in which we are currently, we will be opening it so that people can come in with
+
+06:01.520 --> 06:06.160
+questions and maybe you're considering the personal nature of this talk, you know, maybe
+
+06:06.160 --> 06:11.520
+try to be a little wary of sharing personal information, especially if the stream is live,
+
+06:11.520 --> 06:17.000
+but otherwise you can have a chat with David, provide to David you're still available in,
+
+06:17.000 --> 06:21.880
+you know, 10, 20 minutes and feel free to come in and ask questions because really that's
+
+06:21.880 --> 06:26.480
+what Emacs Conf is about. It's about getting in touch with the speakers and this is the
+
+06:26.480 --> 06:30.200
+opportunity that you have to have a one-on-one with them rather than an asynchronous one
+
+06:30.200 --> 06:34.120
+with a pad. Sorry for the interruption. I just felt I remember. We're probably going
+
+06:34.120 --> 06:38.080
+to open the chat in about five to 10 minutes. We still have a lot of questions and I know
+
+06:38.080 --> 06:42.280
+I'd prefer if David focused on those questions. So please go ahead, David.
+
+06:42.280 --> 06:48.800
+Thank you so much, Leo. And yes, I am available for after, so I'll stick around. Okay. So
+
+06:48.800 --> 06:54.120
+regarding the medication tracking, you only have the option to record missed or not. If
+
+06:54.120 --> 06:58.280
+one needs to take multiple medications throughout the day, how would you propose to track that
+
+06:58.280 --> 07:05.240
+within GNU plot or separate? Okay. Yeah, as it is, I don't record which medication because
+
+07:05.240 --> 07:12.600
+it's the one I miss is typically just the same one. So the deal is, is that you would
+
+07:12.600 --> 07:19.660
+probably want to, you could count it as either doses or milligrams. The problem with tracking
+
+07:19.660 --> 07:27.660
+as milligrams, and yes, you would want to use separate variables for those. And probably
+
+07:27.660 --> 07:36.080
+what would make sense is either to record some lines as doses, meaning that one, whatever
+
+07:36.080 --> 07:43.040
+that ends up being, if it's a tablet or if it's the proper dose. And then that way, if
+
+07:43.040 --> 07:47.100
+one medication is late and another is not, or whatever you need to record, they're on
+
+07:47.100 --> 07:54.440
+separate lines, separate columns of the CSV file or I'm sorry, not CSV file of your org
+
+07:54.440 --> 08:04.540
+mode, separate property drawer entries in your capture template. I'm trying to think.
+
+08:04.540 --> 08:08.520
+It would be a little bit more work, but you could track that. The problem with tracking
+
+08:08.520 --> 08:13.760
+milligrams is that some medications, you would have a large range on the chart because some
+
+08:13.760 --> 08:18.320
+medications are a few milligrams and some medications are lots and lots for a dose.
+
+08:18.320 --> 08:27.720
+So tracking it as single doses might make sense. All right. So how's the workflow? This
+
+08:27.720 --> 08:32.120
+is the next question here. How's the workflow when working on the canoe plot code? Can you
+
+08:32.120 --> 08:38.560
+control C, control C and the SVG output on the right is updated automatically? The answer
+
+08:38.560 --> 08:46.200
+is yes. You can use something called auto revert tail mode. So you hit meta X to get
+
+08:46.200 --> 08:53.040
+the command and then auto revert tail mode. And that will cause the SVG file to automatically
+
+08:53.040 --> 08:58.840
+update every time you hit control C, control C on the canoe plot file, provided that you're
+
+08:58.840 --> 09:07.680
+viewing the same file that the canoe plot is going to overwrite. Let's see. Question.
+
+09:07.680 --> 09:13.000
+How much time does it take to process the amount of data that you add inside canoe Emacs?
+
+09:13.000 --> 09:21.360
+So at this point I have three or four months of data and it takes to update the whole thing,
+
+09:21.360 --> 09:27.360
+like, you know, get capture all the entries. It takes like a second or two. And this is
+
+09:27.360 --> 09:31.200
+a pretty decent PC. So we're not talking about something that takes a long time each day
+
+09:31.200 --> 09:39.840
+I updated. It's just, it's done pretty quick. All right. Next question. Will indent guide
+
+09:39.840 --> 09:45.120
+behave well with YAML files for Helm? I don't know the answer to that. Indent guide is really
+
+09:45.120 --> 09:52.720
+nice and it seems to behave pretty reasonably, but I wouldn't be able to speak to that.
+
+09:52.720 --> 09:59.280
+Okay. Just a quick interruption. So we have opened the chats now for people to join us
+
+09:59.280 --> 10:04.360
+on BBB. So you can go to the talk page on Emacs. You go to David's talk, which is called
+
+10:04.360 --> 10:08.760
+health and you should be able to join the BBB. So if you have questions that you'd like
+
+10:08.760 --> 10:13.800
+to ask with your voice to David, feel free to join us. And David, in the meantime, you
+
+10:13.800 --> 10:16.960
+can reply to the last question you have.
+
+10:16.960 --> 10:22.880
+Okay. Thank you. Great. The last question is, have you noticed your behavior changing
+
+10:22.880 --> 10:29.000
+as a result of tracking your data? And the answer is yes. The accountability has given,
+
+10:29.000 --> 10:36.160
+it draws habits, good or bad habits. It illustrates them in sharp relief. All of a sudden it's
+
+10:36.160 --> 10:44.440
+very clear what's going on, what's not going on. And it illuminates a sense of fog because
+
+10:44.440 --> 10:49.080
+it's hard to generalize when your awareness is changing over time. It's hard to generalize
+
+10:49.080 --> 10:53.560
+about what's going on each day and having the objective information. Yes, I'd say it
+
+10:53.560 --> 10:57.080
+has changed my behavior in a good way.
+
+10:57.080 --> 11:04.240
+I mean, that's a very good thing, I suppose. The whole point of tracking so much stuff,
+
+11:04.240 --> 11:07.680
+tracking people, it's an interesting angle that you have because you're creating data
+
+11:07.680 --> 11:12.320
+on a lot of health aspects. And people usually when they talk about using Emacs to better
+
+11:12.320 --> 11:16.000
+their life, they talk about all, they talk about getting things done. They talk about
+
+11:16.000 --> 11:22.560
+all the usual suspects when it comes to task organization. But plotting over time is something
+
+11:22.560 --> 11:27.120
+that is technically possible and that people talk about, but I feel like you've gone way
+
+11:27.120 --> 11:32.720
+far into this particular topic. So well done you. And you feel as a result you have a particular
+
+11:32.720 --> 11:40.800
+insight into seeing the curves evolve basically over time. And I think it provides very interesting
+
+11:40.800 --> 11:46.760
+data, something that is more easily understandable than just a list of to-dos in an agenda over
+
+11:46.760 --> 11:47.760
+time.
+
+11:47.760 --> 11:54.320
+Yeah. And what's nice is that I still can have to-dos and notes in that same file that
+
+11:54.320 --> 12:00.600
+produces my chart and that has all the data in it. And I keep that in version control,
+
+12:00.600 --> 12:05.040
+which stays in a private repo. And what's nice about that is everything's backed up.
+
+12:05.040 --> 12:11.920
+You know what I mean? Pardon me. I'm going to have a sip of water here.
+
+12:11.920 --> 12:19.680
+Please do. I mean, I'm actually down to termite. It's the good floral for thermos. And I've
+
+12:19.680 --> 12:23.120
+down two since we started EmacsCon today.
+
+12:23.120 --> 12:30.680
+Oh, wow. Yeah. And so I lost my train of thought.
+
+12:30.680 --> 12:36.840
+Take your time to find it. We still have about eight minutes of Q&A. By the way, I'll remind
+
+12:36.840 --> 12:41.200
+people we have opened the BBB room. So if you want to join us and ask live questions
+
+12:41.200 --> 12:56.120
+to David, feel free to do so. I'm sorry. Could you repeat that? I was asking you if you found
+
+12:56.120 --> 12:59.000
+the train of thought again.
+
+12:59.000 --> 13:08.480
+Hold on. Hold on. The last question, have I noticed behavior changing? Yeah. Then we
+
+13:08.480 --> 13:12.400
+talked about, oh, I talked about the fact that you can have to do the notes and appointments
+
+13:12.400 --> 13:18.080
+and all that kind of stuff. Like, for example, one of my next. Well, oh, now I remember the
+
+13:18.080 --> 13:22.560
+point that I was going to get into. The point is that once I have this routine of getting
+
+13:22.560 --> 13:28.600
+up every single morning and first thing, putting in my information. That habit, I feel like
+
+13:28.600 --> 13:33.200
+build on. For example, I added a new variable the other day. You know, I can add I thought
+
+13:33.200 --> 13:37.920
+of something. I'm like, hey, I should track that in my data. It reminds me I say, hey,
+
+13:37.920 --> 13:41.080
+there's not enough green triangles. I need to get some exercise this week. You know,
+
+13:41.080 --> 13:48.520
+the weather, I haven't wanted to get outside because the weather's been so dismal. So it's
+
+13:48.520 --> 13:58.240
+absolutely been a game changer. It really has been. And it doesn't have to be. Oh, go
+
+13:58.240 --> 14:04.880
+ahead. Go ahead. No, no, no. I was going to say that it's really good to hear that software
+
+14:04.880 --> 14:10.080
+can have such a potent impact, just the ability to track your data over time. Because the
+
+14:10.080 --> 14:14.480
+thing is, I think whatever you're feeling, you know, whenever you have mental ailments
+
+14:14.480 --> 14:20.320
+or whatnot, it's really hard to to have a healthy relationship to the chronology of
+
+14:20.320 --> 14:26.360
+feeling better. And it's easy to get lost into the immediate sensation. But I feel like
+
+14:26.360 --> 14:30.120
+being able to track over time that, you know, this daily checking in that you do in the
+
+14:30.120 --> 14:34.760
+morning of keeping track of your health data. I think it's the first step that shows you
+
+14:34.760 --> 14:42.800
+over time that, oh, yes, I am actually feeling better. And so as a result, being able to
+
+14:42.800 --> 14:50.440
+visually see, oh, yes, I am actually doing better. It must be reassuring, I assume.
+
+14:50.440 --> 14:55.060
+It is. I think that's a really interesting turn of phrase you had there earlier when
+
+14:55.060 --> 15:02.840
+you said it's harder to have a healthy relationship to the chronology of getting better. I think
+
+15:02.840 --> 15:10.160
+those were your exact words there. You know, the idea that, you know, if you've got to
+
+15:10.160 --> 15:16.080
+manage something, if you've got to roll with the punches, then seeing what you've accomplished,
+
+15:16.080 --> 15:21.440
+seeing yourself bounce back, you know, and then being able to see a trend, you might
+
+15:21.440 --> 15:26.920
+not notice unless you're tracking per the clock that sleep has started to decline and
+
+15:26.920 --> 15:33.880
+that it's time to start keeping your eye out. And it is reassuring, and you're right about
+
+15:33.880 --> 15:37.920
+that, you know. It's not always easy to be in the mindset of saying, hey, these lines
+
+15:37.920 --> 15:39.960
+move and they'll move again.
+
+15:39.960 --> 15:46.560
+Yeah, and I feel also it's kind of like having a scientific take on your well-being because
+
+15:46.560 --> 15:53.960
+you are parameter, okay, really tough word to say for the Frenchman that I am, but parameterizing
+
+15:53.960 --> 15:58.720
+the elements of your life, such as sleep, and we already have sleep is already more
+
+15:58.720 --> 16:03.960
+or less of a parameter in our lives. You know, we know, oh, you should sleep at least eight
+
+16:03.960 --> 16:08.820
+hours. You should have one hour, 30 blocks of sleep all the time. So this is a well parameterized
+
+16:08.820 --> 16:13.960
+element of our lives. But other elements that you're doing or the conflation of different
+
+16:13.960 --> 16:19.360
+curves feels like it's pointing out, it's providing more data and being able to see
+
+16:19.360 --> 16:23.920
+the trend, which is a key word in your presentation in what you do. I think that's really good.
+
+16:23.920 --> 16:28.800
+Chronology and trends and being able to see what works. I just have this example crossing
+
+16:28.800 --> 16:33.360
+my mind. Some people are plagued with canker sores, which are really nasty stuff that you
+
+16:33.360 --> 16:38.040
+get in mouth. But more often than not, it's really hard to track why you're getting them.
+
+16:38.040 --> 16:42.600
+A lot of people say it's due to stress or to poor sleep or to deficiency in iron or
+
+16:42.600 --> 16:47.780
+whatnot, or you're toothpaste. You might have understood that I actually suffer from them.
+
+16:47.780 --> 16:52.240
+So I actually know a lot of the reasons. But being able to track health data like this
+
+16:52.240 --> 16:57.560
+feels like it would be able to correlate the appearance of canker sores with maybe poor
+
+16:57.560 --> 17:03.240
+sleep or maybe changing medication or maybe stress at work or stuff like this. I really
+
+17:03.240 --> 17:06.240
+like this stance and I think you're really onto something here.
+
+17:06.240 --> 17:12.960
+Yeah. And if people wanted to chat about that more in terms of putting people's heads together,
+
+17:12.960 --> 17:19.120
+because let's say someone who has a more sophisticated medication tracking need, maybe they come
+
+17:19.120 --> 17:23.760
+up with a solution and they share their config. There's one thing I didn't talk about in the
+
+17:23.760 --> 17:31.580
+talk, which is I had one line where I have a formula instead, because Canoe can plot
+
+17:31.580 --> 17:36.760
+all kinds of formulas. So I have it plot an overall trouble score, which I did not show
+
+17:36.760 --> 17:45.520
+in the video, but I had it assigned three points for every hour above or below the goal
+
+17:45.520 --> 17:49.360
+of eight hours. So too much would give me lots of points on the trouble and too little
+
+17:49.360 --> 17:54.880
+will give me lots of points. So the relation to the goal or whatever, if stress is high,
+
+17:54.880 --> 18:00.920
+then the overall, if the anxiety line is high, then the overall trouble line should get high.
+
+18:00.920 --> 18:06.800
+And what I found is that that trouble line really did track with my recollection of
+
+18:06.800 --> 18:12.560
+how the last few weeks had gone. And so that trouble line is, you can see when it's trending
+
+18:12.560 --> 18:21.600
+even if it's not super obvious from the other lines. And maybe I'll share that too.
+
+18:21.600 --> 18:28.400
+All right, David, we are about at the end of time for the Q&A. Thank you so much for
+
+18:28.400 --> 18:33.000
+answering all the questions. I think it was very valuable to not only have your long presentation,
+
+18:33.000 --> 18:37.080
+which was very detailed, but also have this Q&A where you got the chance to answer one,
+
+18:37.080 --> 18:41.240
+two, three, four, five, more than seven questions, which is great.
+
+18:41.240 --> 18:46.960
+That's fantastic. And thank you so much for joining in and for being here. And thank you
+
+18:46.960 --> 18:51.720
+for having me at the conference. It's really amazing to be part of the community. And I'm
+
+18:51.720 --> 18:56.720
+happy to stick around. Do you want me to drop to IRC or just keep answering questions in
+
+18:56.720 --> 19:01.500
+voice? I don't think they're going to go on the pad, are they?
+
+19:01.500 --> 19:05.760
+So actually what we can do, we can leave the BBB room standing for now. If people want
+
+19:05.760 --> 19:10.240
+to join, they can do so. Maybe Corwin will come back to close the room afterwards. But
+
+19:10.240 --> 19:13.140
+for now, you can stay in the room. And if people want to unmute themselves after we
+
+19:13.140 --> 19:15.800
+go off stream, that would be good.
+
+19:15.800 --> 19:18.720
+So we are about to go into the next talk in about 30 seconds. Let me just talk to production
+
+19:18.720 --> 19:28.360
+real quick. So, yes, we are going to go into the next talk pretty soon. You should still
+
+19:28.360 --> 19:35.000
+be able to hear me, I think. Nope, they cannot. Okay. Well, David, I leave you in the room.
+
+19:35.000 --> 19:41.360
+I'll be in touch within five minutes to see if people are not showing up.
+
+19:41.360 --> 19:42.360
+Thank you, Leo.
+
+19:42.360 --> 19:48.160
+Yes, sorry. I'm dealing with many things at the same time. So I'm going to stop the recording.
+
+19:48.160 --> 19:52.680
+No, I'm going to leave the recording on. Is there anyone in the room that want to unmute?
+
+19:52.680 --> 19:56.760
+We are not on the stream anymore now. Does anyone want to say something or talk with
+
+19:56.760 --> 20:04.260
+David? Or do we want to close the room?
+
+20:04.260 --> 20:09.440
+Even if it's just by line. Okay, cool. So what are we going to do then? David, thank
+
+20:09.440 --> 20:14.080
+you so much for your time. We're actually going to close the room right now. I'm going
+
+20:14.080 --> 20:35.200
+to stop the recording.
+
diff --git a/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt
new file mode 100644
index 00000000..6a8625f8
--- /dev/null
+++ b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:33.639
+Introduction
+
+00:00:33.640 --> 00:01:59.439
+How to take daily health journal items
+
+00:01:59.440 --> 00:03:37.199
+How to set up your org templates
+
+00:03:38.320 --> 00:04:16.839
+How to do it in GNU Emacs
+
+00:04:16.840 --> 00:04:51.959
+Overview of the presentation
+
+00:04:51.960 --> 00:05:52.799
+The journal
+
+00:05:52.800 --> 00:06:51.319
+The capture buffer
+
+00:06:51.320 --> 00:08:03.479
+The columnview table
+
+00:08:03.480 --> 00:09:03.319
+Gnuplot
+
+00:09:03.320 --> 00:10:15.479
+Output parameters
+
+00:10:15.480 --> 00:13:05.919
+Time series data
+
+00:13:05.920 --> 00:14:22.679
+Health variables
+
+00:14:22.680 --> 00:15:11.999
+Goal lines
+
+00:15:12.000 --> 00:17:35.559
+The Gnuplot command
+
+00:17:35.560 --> 00:19:11.479
+The template generator
+
+00:19:11.480 --> 00:21:40.999
+The code that creates a template
+
+00:21:41.000 --> 00:24:09.919
+The power of the chart
+
+00:24:09.920 --> 00:24:29.240
+Thanks
diff --git a/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt
new file mode 100644
index 00000000..9cfd3030
--- /dev/null
+++ b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt
@@ -0,0 +1,1261 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:03.999
+Hi, this is Dave O'Toole, and today
+
+00:00:04.000 --> 00:00:07.799
+I'll be giving a presentation on tracking health data
+
+00:00:07.800 --> 00:00:12.759
+with Emacs, Org Mode, and Gnuplot.
+
+00:00:12.760 --> 00:00:16.079
+So Gnuplot is the well-known scientific
+
+00:00:16.080 --> 00:00:19.039
+and mathematical plotting application.
+
+00:00:19.040 --> 00:00:24.639
+You feed it text files full of names, dates, numbers,
+
+00:00:24.640 --> 00:00:27.199
+data points, and you get out a nice graph.
+
+00:00:27.200 --> 00:00:31.119
+You can spit out SVG. You can spit out PNG graphics.
+
+00:00:31.120 --> 00:00:33.639
+In this case, we're using an SVG.
+
+NOTE How to take daily health journal items
+
+00:00:33.640 --> 00:00:36.839
+What I'm going to show you today
+
+00:00:36.840 --> 00:00:39.839
+is how to take daily health journal items:
+
+00:00:39.840 --> 00:00:42.119
+in other words, things like I exercised
+
+00:00:42.120 --> 00:00:44.319
+such and such number of minutes today,
+
+00:00:44.320 --> 00:00:47.399
+I got X hours of sleep last night,
+
+00:00:47.400 --> 00:00:51.479
+I used such and such number of pieces of nicotine gum,
+
+00:00:51.480 --> 00:00:54.559
+say five pieces. So let's see,
+
+00:00:54.560 --> 00:00:58.439
+we've got this whole picture here, all right,
+
+00:00:58.440 --> 00:00:59.359
+and I've tracked here...
+
+00:00:59.360 --> 00:01:02.319
+This is a month of data from my life.
+
+00:01:02.320 --> 00:01:05.159
+This is... I'm not showing all the variables,
+
+00:01:05.160 --> 00:01:08.519
+but this is what I felt comfortable sharing
+
+00:01:08.520 --> 00:01:14.239
+in order to help people who might have a need to track,
+
+00:01:14.240 --> 00:01:15.919
+either because of a chronic condition,
+
+00:01:15.920 --> 00:01:18.599
+or just because of a health improvement goal
+
+00:01:18.600 --> 00:01:20.959
+or what have you, people who might need to
+
+00:01:20.960 --> 00:01:23.319
+track health data in a way
+
+00:01:23.320 --> 00:01:24.959
+that's a little bit more robust
+
+00:01:24.960 --> 00:01:26.599
+than just one or two variables
+
+00:01:26.600 --> 00:01:29.839
+and just weight or just blood pressure.
+
+00:01:29.840 --> 00:01:33.079
+So in this case, I've got exercise,
+
+00:01:33.080 --> 00:01:36.399
+I've got the number of hours of sleep,
+
+00:01:36.400 --> 00:01:38.559
+the number of doses of nicotine,
+
+00:01:38.560 --> 00:01:40.799
+(that's the yellow line here),
+
+00:01:40.800 --> 00:01:44.199
+and this is referring to nicotine gum.
+
+00:01:44.240 --> 00:01:45.559
+What we're going to be talking about
+
+00:01:45.560 --> 00:01:47.839
+is looking at connections, the idea
+
+00:01:47.840 --> 00:01:49.879
+that plotting your data can actually
+
+00:01:49.880 --> 00:01:52.119
+help you figure out what's going on.
+
+00:01:52.120 --> 00:01:53.079
+This is just one month.
+
+00:01:53.080 --> 00:01:55.439
+I've been doing this for a couple of months now,
+
+00:01:55.440 --> 00:01:57.559
+but I felt comfortable showing one month
+
+00:01:57.560 --> 00:01:59.439
+with a limited subset of the variables.
+
+NOTE How to set up your org templates
+
+00:01:59.440 --> 00:02:02.239
+What I'm going to be doing in this presentation
+
+00:02:02.240 --> 00:02:05.279
+is showing you how to set up your org templates
+
+00:02:05.280 --> 00:02:08.799
+so that you can, you know, hit a hotkey
+
+00:02:08.800 --> 00:02:11.839
+to capture today's data with an org template--
+
+00:02:11.840 --> 00:02:14.199
+or in this case yesterday's. Usually I'm saying, okay,
+
+00:02:14.200 --> 00:02:15.639
+yesterday this happened,
+
+00:02:15.640 --> 00:02:17.479
+because you don't know until the day's over
+
+00:02:17.480 --> 00:02:19.719
+how many pieces of nicotine gum you ate
+
+00:02:19.720 --> 00:02:21.439
+or how many hours you slept.
+
+00:02:21.440 --> 00:02:25.959
+So usually we're recording data for the previous day.
+
+00:02:25.960 --> 00:02:28.079
+We can set up a capture template
+
+00:02:28.080 --> 00:02:30.919
+so that it fills a little org entry. One for exercise,
+
+00:02:30.920 --> 00:02:34.279
+one for sleep, one for nicotine, one for distress.
+
+00:02:34.280 --> 00:02:36.919
+Here distress is just 1 to 10:
+
+00:02:36.920 --> 00:02:38.559
+how bad do you feel today?
+
+00:02:38.560 --> 00:02:41.639
+It's not a scientific measure, but you know,
+
+00:02:41.640 --> 00:02:43.359
+many, many things ask you to rate
+
+00:02:43.360 --> 00:02:47.119
+on a scale of 1 to 10, how bad is the anxiety,
+
+00:02:47.120 --> 00:02:49.639
+how bad is the general level of stress,
+
+00:02:49.640 --> 00:02:51.679
+and so without a lot of complication,
+
+00:02:51.680 --> 00:02:53.159
+I just rate that one to ten.
+
+00:02:53.160 --> 00:02:58.799
+Pain, okay, we won't have to get into any details,
+
+00:02:58.800 --> 00:03:00.959
+but if there is a level of chronic pain, well,
+
+00:03:00.960 --> 00:03:04.239
+I put that between 1 and 10. As we can see here,
+
+00:03:04.240 --> 00:03:07.319
+during the period that I've shown you, it's pretty low.
+
+00:03:07.320 --> 00:03:11.919
+There's some. If you miss a dose of medication,
+
+00:03:11.920 --> 00:03:13.599
+you can track that, in this case
+
+00:03:13.600 --> 00:03:17.639
+with a big ugly red triangle, you know.
+
+00:03:17.640 --> 00:03:24.279
+You can see, I can see here that in mid-, in late September,
+
+00:03:24.280 --> 00:03:29.199
+sorry, in early to mid-October,
+
+00:03:29.200 --> 00:03:30.999
+I stopped using the nicotine gum
+
+00:03:31.000 --> 00:03:32.959
+and probably should have cut down more gradually
+
+00:03:32.960 --> 00:03:34.759
+because my sleep suffered. Look at this.
+
+00:03:34.760 --> 00:03:37.199
+The sleep line is down here, okay?
+
+NOTE How to do it in GNU Emacs
+
+00:03:38.320 --> 00:03:39.519
+What I'm going to do now,
+
+00:03:39.520 --> 00:03:40.879
+now that I've shown you the graph
+
+00:03:40.880 --> 00:03:44.799
+and some of the things that are useful about it,
+
+00:03:44.800 --> 00:03:46.639
+I'm going to actually take a step back
+
+00:03:46.640 --> 00:03:50.319
+and show you from start to finish how you can do this
+
+00:03:50.320 --> 00:03:53.319
+in GNU Emacs, and I have a little template generator
+
+00:03:53.320 --> 00:03:56.279
+that you can use if you'd like.
+
+00:03:56.280 --> 00:03:59.919
+All right, so let's go back.
+
+00:03:59.920 --> 00:04:01.479
+Let's step back from this file.
+
+00:04:01.480 --> 00:04:07.599
+We're going to split the screen, and on the left side,
+
+00:04:07.600 --> 00:04:09.839
+I'm going to put the underlying Org file
+
+00:04:09.840 --> 00:04:10.919
+that generates this graph.
+
+00:04:10.920 --> 00:04:16.839
+Let me shrink that a little bit.
+
+NOTE Overview of the presentation
+
+00:04:16.840 --> 00:04:22.759
+All right, I'm going to work my way backwards
+
+00:04:22.760 --> 00:04:26.519
+from the template to the template generator,
+
+00:04:26.520 --> 00:04:28.439
+meaning that you'll be able to spit out,
+
+00:04:28.440 --> 00:04:31.839
+given your own specification of health variables,
+
+00:04:31.840 --> 00:04:33.519
+you'll be able to have it spit out
+
+00:04:33.520 --> 00:04:38.159
+a custom Gnuplot script like this
+
+00:04:38.160 --> 00:04:41.319
+that's preset up with the definitions
+
+00:04:41.320 --> 00:04:43.159
+for the column view in Org mode.
+
+00:04:43.160 --> 00:04:45.399
+I'm assuming a little bit of familiarity
+
+00:04:45.400 --> 00:04:47.199
+with Org mode and Gnuplotting,
+
+00:04:47.200 --> 00:04:51.959
+but I'll try to explain as much as I can as I go along.
+
+NOTE The journal
+
+00:04:51.960 --> 00:04:59.039
+The journal here is where... okay, okay, one moment.
+
+00:04:59.040 --> 00:05:03.519
+So as you can see, there's a sub-entry here
+
+00:05:03.520 --> 00:05:06.279
+for each day that I've included from my data set
+
+00:05:06.280 --> 00:05:08.559
+starting on September 13th of this year
+
+00:05:08.560 --> 00:05:10.399
+and ending on October 17th.
+
+00:05:10.400 --> 00:05:16.959
+And there's an Org property drawer with
+
+00:05:16.960 --> 00:05:22.999
+the corresponding names of each field and the value.
+
+00:05:29.800 --> 00:05:36.759
+Now the idea here is that the columns specify...
+
+00:05:36.760 --> 00:05:40.639
+if you know a little bit about Org mode,
+
+00:05:40.640 --> 00:05:43.479
+what happens is that you...
+
+00:05:43.480 --> 00:05:50.919
+let's say that I hit the key for my journal template,
+
+00:05:50.920 --> 00:05:52.799
+which... Mine is very similar.
+
+NOTE The capture buffer
+
+00:05:52.800 --> 00:06:00.879
+This is the capture buffer for today's date,
+
+00:06:00.880 --> 00:06:02.679
+and if you're recording yesterday's date,
+
+00:06:02.680 --> 00:06:04.519
+you can just flip it like that if you need to.
+
+00:06:04.520 --> 00:06:08.639
+Then I say, yesterday, I remember
+
+00:06:08.640 --> 00:06:11.159
+I went for about a one-mile walk,
+
+00:06:11.160 --> 00:06:14.119
+so that's probably about 20 minutes,
+
+00:06:14.120 --> 00:06:16.519
+and that I had such and such,
+
+00:06:16.520 --> 00:06:19.079
+I had eight and a half hours of sleep, let's say.
+
+00:06:19.080 --> 00:06:22.479
+I estimate how many pieces of nicotine gum I have.
+
+00:06:22.480 --> 00:06:25.799
+I try to count as closely as I can, how much distress,
+
+00:06:25.800 --> 00:06:26.359
+you know what I mean,
+
+00:06:26.360 --> 00:06:28.279
+whether or not I missed a dose of medication.
+
+00:06:28.280 --> 00:06:32.399
+Then when you hit C-c C-c,
+
+00:06:32.400 --> 00:06:39.799
+it captures that to the end of your Org file.
+
+00:06:39.800 --> 00:06:46.679
+Now what this shows is that... I cut and paste it in.
+
+00:06:46.680 --> 00:06:48.159
+I've been keeping these entries every day for months,
+
+00:06:48.160 --> 00:06:51.319
+and that I cut and pasted in a month of data.
+
+NOTE The columnview table
+
+00:06:51.320 --> 00:07:00.799
+Now I'm going to dig in a little bit to the Gnuplot script.
+
+00:07:00.800 --> 00:07:07.759
+This here, all this stuff, is one component of the graph,
+
+00:07:07.760 --> 00:07:11.359
+and I'll go over how it works.
+
+00:07:11.360 --> 00:07:19.319
+First, the items through this column declaration here,
+
+00:07:19.320 --> 00:07:30.199
+and the id:myid, this columnview table here,
+
+00:07:30.200 --> 00:07:34.919
+#+BEGIN: columnview, this whole bit here,
+
+00:07:34.920 --> 00:07:39.879
+is going to get filled in with the corresponding columns,
+
+00:07:39.880 --> 00:07:43.039
+exercise minutes, sleep hours, nicotine doses.
+
+00:07:43.040 --> 00:07:53.559
+And then it gets pumped out by Org mode into a file
+
+00:07:53.560 --> 00:07:59.840
+that looks like this: tab-separated values
+
+00:07:59.841 --> 00:08:03.479
+with an ISO-style date at the beginning.
+
+NOTE Gnuplot
+
+00:08:03.480 --> 00:08:10.359
+So what we're going to do is we're going to go through
+
+00:08:10.360 --> 00:08:14.479
+the Gnuplot portion of this,
+
+00:08:14.480 --> 00:08:16.359
+and I'm going to enlarge the font a little.
+
+00:08:21.280 --> 00:08:23.719
+I'm going to go line by line through the Gnuplot portion.
+
+00:08:23.720 --> 00:08:30.639
+Now, my template generator will give you one like this.
+
+00:08:30.640 --> 00:08:33.119
+You don't have to write this from scratch.
+
+00:08:33.120 --> 00:08:35.679
+But I'm going to go through it line by line
+
+00:08:35.680 --> 00:08:37.479
+because if you do use the template,
+
+00:08:37.480 --> 00:08:42.199
+then it'll help to have gone through it line by line,
+
+00:08:42.200 --> 00:08:46.679
+because you're probably going to have to modify it.
+
+00:08:46.680 --> 00:08:49.119
+So first, we're going to clear the graphics
+
+00:08:49.120 --> 00:08:50.199
+from any previous runs
+
+00:08:50.200 --> 00:08:53.799
+so that if we reuse the same Gnuplot process,
+
+00:08:53.800 --> 00:08:57.759
+we're not overwriting the old--
+
+00:08:57.760 --> 00:09:00.719
+that we are completely overwriting the old image.
+
+00:09:00.720 --> 00:09:03.319
+So that's the purpose of this line here.
+
+NOTE Output parameters
+
+00:09:03.320 --> 00:09:08.559
+The output parameters: we want to put out an SVG file.
+
+00:09:08.560 --> 00:09:13.639
+Font Arial, that's funny,
+
+00:09:13.640 --> 00:09:16.119
+but I don't know what font it's actually ending up choosing,
+
+00:09:16.120 --> 00:09:16.879
+but it looks fine.
+
+00:09:16.880 --> 00:09:19.639
+Then we want it to be square,
+
+00:09:19.640 --> 00:09:21.919
+so I'm giving it 900 by 900 pixels,
+
+00:09:21.920 --> 00:09:23.719
+even though it is a scalable vector graphic.
+
+00:09:23.720 --> 00:09:29.159
+We're putting it in the same folder as the org file,
+
+00:09:29.160 --> 00:09:30.799
+example.svg.
+
+00:09:30.800 --> 00:09:39.519
+These lines here set it up to use the Org mode format
+
+00:09:39.520 --> 00:09:42.679
+that we showed in the other file over here.
+
+00:09:42.680 --> 00:09:48.359
+The time format is four-digit year, two-digit month,
+
+00:09:48.360 --> 00:09:50.359
+two-digit day.
+
+00:09:50.360 --> 00:09:56.479
+The time format doesn't specify here the time,
+
+00:09:56.480 --> 00:09:59.599
+but that doesn't seem to mess it up.
+
+00:09:59.600 --> 00:10:02.439
+This line "set datafile separator" means that
+
+00:10:02.440 --> 00:10:04.239
+the separators between that
+
+00:10:04.240 --> 00:10:06.959
+and between all the other fields are tabs,
+
+00:10:06.960 --> 00:10:08.919
+which is what Org mode does
+
+00:10:08.920 --> 00:10:10.999
+when it spits out a table by default.
+
+00:10:11.000 --> 00:10:15.479
+Okay, along to the next lines.
+
+NOTE Time series data
+
+00:10:15.480 --> 00:10:18.119
+We're going to set up for time series data,
+
+00:10:18.120 --> 00:10:22.807
+meaning that the x-axis is going to be time,
+
+00:10:22.808 --> 00:10:26.119
+x2tics 1 format.
+
+00:10:26.120 --> 00:10:30.399
+I believe this means that every day has one tick
+
+00:10:30.400 --> 00:10:32.879
+and that this tells it that the first--
+
+00:10:32.880 --> 00:10:39.359
+unfortunately, I forget the exact meaning of this one line.
+
+00:10:39.360 --> 00:10:44.959
+I'm just going to move on. We want one X tick per day,
+
+00:10:44.960 --> 00:10:46.519
+and because X is in seconds,
+
+00:10:46.520 --> 00:10:50.319
+it's 24 hours times 60 minutes times 60 seconds.
+
+00:10:50.320 --> 00:10:55.639
+This line "set grid xtics" gives us
+
+00:10:55.640 --> 00:10:57.279
+a vertical line on each day of the graph.
+
+00:10:57.280 --> 00:10:58.319
+I'll pull up the graph
+
+00:10:58.320 --> 00:11:00.039
+just so that it's a little easier to see.
+
+00:11:00.040 --> 00:11:03.919
+All these vertical lines, one on each day,
+
+00:11:03.920 --> 00:11:06.199
+that's given to you by "set grid xtics".
+
+00:11:06.200 --> 00:11:10.159
+One Y tick every five points.
+
+00:11:10.160 --> 00:11:13.719
+So here at five pieces of nicotine,
+
+00:11:13.720 --> 00:11:15.959
+we've got a five, at ten pieces – well,
+
+00:11:15.960 --> 00:11:19.679
+we don't want to eat ten pieces, but ten, fifteen, twenty.
+
+00:11:19.680 --> 00:11:25.479
+Rotating the labels to make them fit a little bit better,
+
+00:11:25.480 --> 00:11:28.039
+that's this part here where the labels are sideways,
+
+00:11:28.040 --> 00:11:30.639
+and even with just one month of data,
+
+00:11:30.640 --> 00:11:35.159
+they're getting a little crowded.
+
+00:11:35.160 --> 00:11:41.399
+This "set key box lc" just makes the line around the key,
+
+00:11:41.400 --> 00:11:44.039
+the legend here, a little bit less severe.
+
+00:11:44.040 --> 00:11:51.079
+set xtics format: this makes it so that, for example,
+
+00:11:51.080 --> 00:11:53.479
+I've done a United-States-style date here
+
+00:11:53.480 --> 00:11:55.279
+with the month and then the day.
+
+00:11:55.280 --> 00:11:58.839
+You don't necessarily have to do that.
+
+00:11:58.840 --> 00:12:01.959
+You can have whatever you want.
+
+00:12:01.960 --> 00:12:03.079
+This xtics format,
+
+00:12:03.080 --> 00:12:06.319
+that relates to how the dates are printed.
+
+00:12:06.320 --> 00:12:12.519
+Remember that over here, this set timefmt,
+
+00:12:12.520 --> 00:12:15.159
+that relates to how the dates are formatted
+
+00:12:15.160 --> 00:12:16.999
+in the Org mode output.
+
+00:12:17.000 --> 00:12:18.319
+So remember, those are two...
+
+00:12:18.320 --> 00:12:19.519
+You don't want to mix those up.
+
+00:12:19.520 --> 00:12:23.799
+All right, "yrange [0:40]".
+
+00:12:23.800 --> 00:12:28.719
+Thus far, my exercise sessions have all been
+
+00:12:28.720 --> 00:12:31.479
+less than 30 minutes, and nothing's gone over 30.
+
+00:12:31.480 --> 00:12:35.839
+If you have a health variable
+
+00:12:35.840 --> 00:12:38.119
+that is in a significantly different range,
+
+00:12:38.120 --> 00:12:41.639
+you may need to get a slightly more complicated
+
+00:12:41.640 --> 00:12:43.719
+Gnuplot script because it is possible to plot
+
+00:12:43.720 --> 00:12:46.479
+multiple yranges in one plot
+
+00:12:46.480 --> 00:12:48.719
+if you have a variable that uses a different range.
+
+00:12:48.720 --> 00:12:49.759
+It's just a little trickier.
+
+00:12:49.760 --> 00:12:55.919
+These parts here, aside from the fact
+
+00:12:55.920 --> 00:12:59.079
+that you might make some changes that relate to
+
+00:12:59.080 --> 00:13:01.319
+the date and your country format,
+
+00:13:01.320 --> 00:13:03.239
+are going to be the same.
+
+00:13:03.240 --> 00:13:05.919
+This is like boilerplate for almost anything.
+
+NOTE Health variables
+
+00:13:05.920 --> 00:13:09.799
+Now here are the parts that are going to vary
+
+00:13:09.800 --> 00:13:13.399
+depending on what health variables you want to store.
+
+00:13:13.400 --> 00:13:18.039
+There are three main sections here.
+
+00:13:18.040 --> 00:13:28.719
+One is setting the different line types that are used.
+
+00:13:28.720 --> 00:13:32.479
+Setting linetype 1 with line width 2, line color RGB.
+
+00:13:32.480 --> 00:13:34.959
+Unfortunately, Gnuplot is a little bit cryptic,
+
+00:13:34.960 --> 00:13:36.879
+which is why I've made this template generator
+
+00:13:36.880 --> 00:13:37.999
+that I'll show you in a moment.
+
+00:13:38.000 --> 00:13:43.039
+I pick a color. So this is exercise, forest green.
+
+00:13:43.040 --> 00:13:49.279
+Point size 1, meaning you get
+
+00:13:49.280 --> 00:13:51.599
+these little green triangles about that size.
+
+00:13:51.600 --> 00:13:54.719
+But the point type 9 is the pointing up triangle.
+
+00:13:54.720 --> 00:13:59.519
+Line type 2, purple. So that's the sleep line.
+
+00:13:59.520 --> 00:14:02.999
+So we're just establishing these different line types
+
+00:14:03.000 --> 00:14:04.719
+that we've given arbitrary numbers.
+
+00:14:04.720 --> 00:14:08.959
+Now onto the next section.
+
+00:14:08.960 --> 00:14:12.919
+Oh, before I move on here,
+
+00:14:12.920 --> 00:14:16.119
+you can see point type 11 for line 5, which is red.
+
+00:14:16.120 --> 00:14:18.079
+And that's the missed medications line,
+
+00:14:18.080 --> 00:14:20.639
+so you get a triangle that's upside down
+
+00:14:20.640 --> 00:14:22.679
+because that's point shape 11.
+
+NOTE Goal lines
+
+00:14:22.680 --> 00:14:27.879
+All right. The next section here is the goal lines.
+
+00:14:27.880 --> 00:14:33.440
+There are horizontal dashed lines here
+
+00:14:33.441 --> 00:14:37.359
+at 8 purple hours of sleep, because 8 hours is the goal.
+
+00:14:37.360 --> 00:14:41.519
+So there's a horizontal line at Y = 8.
+
+00:14:41.520 --> 00:14:43.879
+For pieces of nicotine gum,
+
+00:14:43.880 --> 00:14:46.959
+I'm trying to keep it to around 5 right now.
+
+00:14:46.960 --> 00:14:52.519
+So my goal line is at 5. So these...
+
+00:14:52.520 --> 00:14:56.759
+Here, a goal of at least 20 minutes of exercise.
+
+00:14:56.760 --> 00:14:59.079
+Sometimes I get more, sometimes I get less.
+
+00:14:59.080 --> 00:15:02.199
+There's a green line and a 20, showing that that's the goal.
+
+00:15:02.200 --> 00:15:06.479
+These lines here are actually the goal lines.
+
+00:15:06.480 --> 00:15:09.119
+You can specify the goal for each one
+
+00:15:09.120 --> 00:15:11.999
+in the template generator that I'll show you.
+
+NOTE The Gnuplot command
+
+00:15:12.000 --> 00:15:28.079
+The last part is the actual plot command.
+
+00:15:28.080 --> 00:15:30.199
+So the dependent... So okay,
+
+00:15:30.200 --> 00:15:34.919
+these all start with 1, "using 1" against this variable.
+
+00:15:34.920 --> 00:15:41.599
+So $2... This is a ternary operator here
+
+00:15:41.600 --> 00:15:49.199
+that says if the value of the second column is zero,
+
+00:15:49.200 --> 00:15:52.359
+then don't plot a point. In other words,
+
+00:15:52.360 --> 00:15:56.079
+not a number means it won't plot a point.
+
+00:15:56.080 --> 00:15:58.919
+The template generator lets you skip over
+
+00:15:58.920 --> 00:16:02.119
+the details of that. It sticks this in there.
+
+00:16:02.120 --> 00:16:02.759
+I'll show you.
+
+00:16:02.760 --> 00:16:09.399
+So we only want to plot a point when the value is non-zero.
+
+00:16:09.400 --> 00:16:12.479
+If there was no exercise, we're not plotting a point.
+
+00:16:12.480 --> 00:16:15.759
+The with construct means we'll plot data
+
+00:16:15.760 --> 00:16:21.340
+using date against exercise with points,
+
+00:16:21.341 --> 00:16:25.519
+the title is "exercise (minutes)", line type 1.
+
+00:16:25.520 --> 00:16:29.839
+Remember, we established line type 1 up here
+
+00:16:29.840 --> 00:16:35.079
+as being forest green, point style 1,
+
+00:16:35.080 --> 00:16:37.599
+point type 9, green triangles.
+
+00:16:37.600 --> 00:16:42.399
+Now I'm going to show 1 against column 3,
+
+00:16:42.400 --> 00:16:43.919
+which is "hours of sleep".
+
+00:16:43.920 --> 00:16:46.039
+This one is plotted with lines,
+
+00:16:46.040 --> 00:16:48.599
+so we don't specify a point type or point size,
+
+00:16:48.600 --> 00:16:51.719
+just a line type 2. And remember, you can see
+
+00:16:51.720 --> 00:16:55.240
+that line type 2 is defined as purple
+
+00:16:55.241 --> 00:16:57.359
+with point type 1, point size 1.
+
+00:16:57.360 --> 00:16:59.959
+Okay, so I did specify point size and point type,
+
+00:16:59.960 --> 00:17:01.479
+but because I'm not plotting with points,
+
+00:17:01.480 --> 00:17:02.279
+those are ignored.
+
+00:17:02.280 --> 00:17:08.799
+Here we come to the line with nicotine.
+
+00:17:08.800 --> 00:17:11.559
+The fourth column is the nicotine number,
+
+00:17:11.560 --> 00:17:13.199
+the fourth column from the Org mode file.
+
+00:17:13.200 --> 00:17:16.007
+So here you can see how we're telling Gnuplot
+
+00:17:16.008 --> 00:17:19.799
+to take each column of the tab-separated Org mode file
+
+00:17:19.800 --> 00:17:21.119
+and put it into the graph.
+
+00:17:21.120 --> 00:17:25.959
+The line types are set up here.
+
+00:17:25.960 --> 00:17:30.799
+The goal lines are set up here.
+
+00:17:30.800 --> 00:17:35.559
+And then the actual plot command is set up here.
+
+NOTE The template generator
+
+00:17:35.560 --> 00:17:41.319
+So now we're going to work further backwards
+
+00:17:41.320 --> 00:17:42.959
+from this Gnuplot template
+
+00:17:42.960 --> 00:17:46.559
+to the template generator that I used to make it.
+
+00:17:46.560 --> 00:18:01.959
+Now I'm not going to go into
+
+00:18:01.960 --> 00:18:03.759
+all of the details of the code,
+
+00:18:03.760 --> 00:18:06.159
+but what I am going to show you is that
+
+00:18:06.160 --> 00:18:10.679
+there's a variable called `health-factors`.
+
+00:18:10.680 --> 00:18:15.839
+And what this does, this `health-factors-from-list`
+
+00:18:15.840 --> 00:18:20.919
+lets you specify, with a property list
+
+00:18:20.920 --> 00:18:22.679
+of keyword and value pairs
+
+00:18:22.680 --> 00:18:24.799
+(here's the keyword name and the value is exercise),
+
+00:18:24.800 --> 00:18:28.199
+the goal that I want 20 minutes of exercise,
+
+00:18:28.200 --> 00:18:30.199
+that the unit is minutes,
+
+00:18:30.200 --> 00:18:36.159
+that the color is forest green, and so on.
+
+00:18:36.160 --> 00:18:39.439
+The aspects of the Gnuplot setup
+
+00:18:39.440 --> 00:18:43.559
+have been abstracted here.
+
+00:18:43.560 --> 00:18:49.279
+Eight hours of sleep is the goal here.
+
+00:18:49.280 --> 00:18:54.039
+The hours are units. What color,
+
+00:18:54.040 --> 00:18:55.119
+what thickness of the line.
+
+00:18:55.120 --> 00:19:00.079
+Here we specify the number of points.
+
+00:19:00.080 --> 00:19:01.279
+There's references online
+
+00:19:01.280 --> 00:19:05.199
+that show you what point types are what shapes in Gnuplot,
+
+00:19:05.200 --> 00:19:11.479
+and so on and so forth.
+
+NOTE The code that creates a template
+
+00:19:11.480 --> 00:19:17.399
+I'll walk through the code a little bit that does this,
+
+00:19:17.400 --> 00:19:20.439
+that actually takes these pieces,
+
+00:19:20.440 --> 00:19:24.399
+that takes this specification of what your variables are
+
+00:19:24.400 --> 00:19:30.439
+and turns it into a template.
+
+00:19:30.440 --> 00:19:37.959
+First, I'm using EIEIO,
+
+00:19:37.960 --> 00:19:41.719
+the object system that's included with GNU Emacs.
+
+00:19:41.720 --> 00:19:45.119
+It's a reasonable facsimile
+
+00:19:45.120 --> 00:19:47.319
+of the Common Lisp Object System.
+
+00:19:47.320 --> 00:19:51.239
+What I'm going to be doing here
+
+00:19:51.240 --> 00:19:56.199
+is defining a class with each of those items,
+
+00:19:56.200 --> 00:19:58.479
+those properties that we talked about in that list
+
+00:19:58.480 --> 00:20:01.319
+that lets you specify name, what the goal is,
+
+00:20:01.320 --> 00:20:04.239
+what the units are, and the Gnuplot things
+
+00:20:04.240 --> 00:20:06.559
+(the Gnuplot parameters like thickness,
+
+00:20:06.560 --> 00:20:13.239
+plot type, and all that) into a class that will then
+
+00:20:13.240 --> 00:20:16.519
+spit out the template once you feed it
+
+00:20:16.520 --> 00:20:27.759
+some of these health factor objects. So just a moment.
+
+00:20:27.760 --> 00:20:34.479
+For example, you can see that this template
+
+00:20:34.480 --> 00:20:46.319
+originally came from being generated by this code here.
+
+00:20:46.320 --> 00:20:52.959
+To use the template,
+
+00:20:52.960 --> 00:20:55.399
+to use this little template generator...
+
+00:20:55.400 --> 00:21:06.279
+See, here's where it spits out the line type
+
+00:21:06.280 --> 00:21:07.439
+given the pieces.
+
+00:21:07.440 --> 00:21:09.679
+This is all just text formatting.
+
+00:21:09.680 --> 00:21:11.319
+This is one of the things that Emacs Lisp
+
+00:21:11.320 --> 00:21:13.159
+just really excels at.
+
+00:21:13.160 --> 00:21:19.519
+I need to take a piece of data
+
+00:21:19.520 --> 00:21:22.639
+like a list of health information,
+
+00:21:22.640 --> 00:21:25.679
+a list of health variables, what their units are,
+
+00:21:25.680 --> 00:21:28.119
+and how they're supposed to be formatted in Gnuplot,
+
+00:21:28.120 --> 00:21:30.199
+and go from that to the nice template.
+
+00:21:30.200 --> 00:21:31.719
+So that's pretty much the whole thing.
+
+00:21:31.720 --> 00:21:40.999
+I want to see if there's anything I missed.
+
+NOTE The power of the chart
+
+00:21:41.000 --> 00:21:51.519
+Bring up the chart.
+
+00:21:51.520 --> 00:21:54.279
+This has been really useful
+
+00:21:54.280 --> 00:21:59.599
+for communicating with healthcare professionals
+
+00:21:59.600 --> 00:22:04.399
+because you are both on the same page
+
+00:22:04.400 --> 00:22:05.879
+about exactly what is happening,
+
+00:22:05.880 --> 00:22:10.679
+what's been happening because if... Let's say
+
+00:22:10.680 --> 00:22:15.239
+that you're tired when you talk to your care provider.
+
+00:22:15.240 --> 00:22:17.559
+Well, if you have objective information
+
+00:22:17.560 --> 00:22:18.839
+that you've been recording every day,
+
+00:22:18.840 --> 00:22:22.399
+that you're ahead of the game, really,
+
+00:22:22.400 --> 00:22:25.119
+because you don't need, necessarily, the presence of mind
+
+00:22:25.120 --> 00:22:27.679
+to be able to give your care provider
+
+00:22:27.680 --> 00:22:30.039
+a complete picture of what's going on in your world.
+
+00:22:30.040 --> 00:22:33.039
+If you can find those few minutes a day to enter--
+
+00:22:33.040 --> 00:22:34.399
+not even a few minutes,
+
+00:22:34.400 --> 00:22:37.759
+really just a minute to enter the data
+
+00:22:37.760 --> 00:22:39.839
+and say what happened yesterday...
+
+00:22:39.840 --> 00:22:42.759
+I'm finding over these months
+
+00:22:42.760 --> 00:22:45.039
+that I've been more in touch with my health when I can--
+
+00:22:45.040 --> 00:22:49.919
+not forced, but when I have the habit,
+
+00:22:49.920 --> 00:22:52.159
+the consistent habit every single day
+
+00:22:52.160 --> 00:22:55.839
+of recording that data--I'm accountable to myself.
+
+00:22:55.840 --> 00:22:57.359
+It's interesting.
+
+00:22:57.360 --> 00:23:01.039
+I guess it gets into a little bit of ideas
+
+00:23:01.040 --> 00:23:02.439
+about the Quantified Self
+
+00:23:02.440 --> 00:23:05.239
+and how holding yourself accountable
+
+00:23:05.240 --> 00:23:09.919
+can change what you do and what the outcomes are.
+
+00:23:09.920 --> 00:23:14.159
+Just look at this here.
+
+00:23:14.160 --> 00:23:17.279
+Without getting into too much detail,
+
+00:23:17.280 --> 00:23:19.679
+one of the reasons I track my sleep is because,
+
+00:23:19.680 --> 00:23:22.039
+as you can see, my sleep
+
+00:23:22.040 --> 00:23:26.759
+is not as well-regulated as most people,
+
+00:23:26.760 --> 00:23:31.439
+and that's why I need to do that.
+
+00:23:31.440 --> 00:23:34.440
+This was a time... 10, 12,
+
+00:23:34.441 --> 00:23:36.639
+here's 14 hours of sleep, that's depression.
+
+00:23:36.640 --> 00:23:43.519
+It oscillates a little bit. But then below the goal line,
+
+00:23:43.520 --> 00:23:45.639
+the things are a little more normal here.
+
+00:23:45.640 --> 00:23:46.919
+This is a little more normal.
+
+00:23:46.920 --> 00:23:52.079
+But then, really, without thinking about it too much,
+
+00:23:52.080 --> 00:23:56.239
+I cut out the nicotine, and my sleep suffered.
+
+00:23:56.240 --> 00:24:00.199
+Just the fact that I'm able to look and see that connection
+
+00:24:00.200 --> 00:24:01.359
+is really amazing to me.
+
+00:24:01.360 --> 00:24:02.759
+Maybe I would have anyway,
+
+00:24:02.760 --> 00:24:05.239
+but looking at the whole months of data,
+
+00:24:05.240 --> 00:24:07.399
+there have been many things to discuss
+
+00:24:07.400 --> 00:24:09.919
+and many things to think about.
+
+NOTE Thanks
+
+00:24:09.920 --> 00:24:12.159
+Because this is a short presentation,
+
+00:24:12.160 --> 00:24:13.839
+I probably should wrap up.
+
+00:24:13.840 --> 00:24:18.239
+I just want to thank the whole Emacs community
+
+00:24:18.240 --> 00:24:23.319
+for being there and for including me in the conference
+
+00:24:23.320 --> 00:24:27.079
+and I hope to participate next year as well.
+
+00:24:27.080 --> 00:24:29.240
+Thank you so much.
diff --git a/2022/captions/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt b/2022/captions/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt
new file mode 100644
index 00000000..4ababba9
--- /dev/null
+++ b/2022/captions/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt
@@ -0,0 +1,1184 @@
+WEBVTT
+
+00:00.000 --> 00:03.880
+Sorry, it's a little tight. I'm doing a lot of stuff behind the scene and now we're ready
+
+00:03.880 --> 00:23.320
+to go live in about five seconds. Sorry, five more seconds. Five. And we are live. Hello
+
+00:23.320 --> 00:27.920
+again, everyone. Hopefully you can hear me just fine. And we just had a talk with Bob
+
+00:27.920 --> 00:32.800
+and Bob is now here in the room. Hi Bob, how are you doing? Hi, doing well. Good to see
+
+00:32.800 --> 00:39.120
+you, Leo. You're doing a great job. Well, thank you. I must say, I am back to asking
+
+00:39.120 --> 00:44.160
+questions, but for the last two hours, I have been running after pre-recordings. I have
+
+00:44.160 --> 00:48.800
+been doing the re-encoding and stuff like this, which means it doesn't look like this,
+
+00:48.800 --> 00:53.220
+but this was very much of a marathon. And I'm glad to be here to be in a room with you
+
+00:53.220 --> 00:57.000
+because I'm actually going to be able to rest a little bit.
+
+00:57.000 --> 01:04.400
+Did you see the presentation? Not yet. Okay, can I lie? If I were able to lie, I would
+
+01:04.400 --> 01:08.960
+say yes, I've been very attentively watching everything in a presentation, but sadly, no,
+
+01:08.960 --> 01:13.160
+I've been quite busy elsewhere. And because, well, no, we don't need to tell them about
+
+01:13.160 --> 01:20.120
+this. But Bob, do you have the pad open in front of you? Yes. Well, I can't look at both
+
+01:20.120 --> 01:26.280
+at the same time, but... It's fine. You don't need to see my face. You've seen it. Okay.
+
+01:26.280 --> 01:31.120
+I see it here. Can you have multiple implicit button files? If so, how would you know which
+
+01:31.120 --> 01:39.780
+link came from what files? I guess they're one-way links, so you embed buttons in any
+
+01:39.780 --> 01:46.600
+number of files that you want and you traverse them, or they perform actions for you. There
+
+01:46.600 --> 01:52.900
+are three categories of buttons. We were showing you implicit buttons, which is one category.
+
+01:52.900 --> 01:59.800
+Then there's explicit buttons, which can also perform arbitrary actions, but those you embed
+
+01:59.800 --> 02:05.860
+one at a time in a file and you say, okay, I want this to be a link to an org file section
+
+02:05.860 --> 02:12.560
+or something. And then... Sorry for the interruption. Can we keep going? The third kind are global
+
+02:12.560 --> 02:18.500
+buttons, which we demonstrated there when you put those in your personal button file,
+
+02:18.500 --> 02:23.920
+and then you can access them by name anywhere in Emacs without even having a buffer up on
+
+02:23.920 --> 02:30.560
+screen. The next question... So I should just go down the questions? You don't have any
+
+02:30.560 --> 02:36.960
+Leo? No, no, feel free. I'm mostly here to be the pretty face that when a problem happens,
+
+02:36.960 --> 02:41.400
+I'm here to help. But since you have questions already in the pad, I'm more than happy to
+
+02:41.400 --> 02:45.420
+have you answer the question from the pad. And if we have a little more time, I'll come
+
+02:45.420 --> 02:49.560
+up with my own questions, so don't worry about it. Yeah, and encourage people to come into
+
+02:49.560 --> 02:57.020
+the chat. We can do something live and then go back to the Etherpad and deal with these
+
+02:57.020 --> 03:03.800
+later as well if people want to talk. So just to specify this, we might first have you answer
+
+03:03.800 --> 03:07.960
+the questions on the pad first and we'll open up the BBT a little later. For now, just you
+
+03:07.960 --> 03:17.340
+on the pad. I'll keep you posted. So are we showing the pad so people see it or I need
+
+03:17.340 --> 03:24.480
+to share that? So I'm sharing the pad right now, I'm managing what people are seeing on
+
+03:24.480 --> 03:27.840
+the stream. You might want to have the pad in front of you and read the question anyway
+
+03:27.840 --> 03:33.480
+to know which question you're actually answering. Okay, I do have the pad separately. Okay.
+
+03:33.480 --> 03:40.920
+What about using implicit buttons with multiple people with different configs? Not quite sure
+
+03:40.920 --> 03:49.820
+what the question is, but hyperbole is always thinking about people working collaboratively,
+
+03:49.820 --> 03:56.880
+though it is also somewhat focused on your personal information. So as you saw when we
+
+03:56.880 --> 04:03.940
+embedded a variable, either an Emacs list variable or an environment variable in a path,
+
+04:03.940 --> 04:08.620
+you can share those with people. You can embed hyperbole buttons in your email messages and
+
+04:08.620 --> 04:13.720
+they'll adapt based on the environment that the person activates them in. So there's a
+
+04:13.720 --> 04:22.200
+lot of useful kind of capability like that built in for collaboration as well. Coming
+
+04:22.200 --> 04:27.260
+in from org mode, would it be a fair assessment that hyperbole is in some way a generalization
+
+04:27.260 --> 04:33.240
+of what most people think of the great features of org to work across formats with the hyperbole
+
+04:33.240 --> 04:38.600
+links buttons being the recurring example and that it then further adds some capabilities
+
+04:38.600 --> 04:45.500
+again across formats being the global miner mode is interesting. I think it goes to RMS's
+
+04:45.500 --> 04:51.280
+talk that org's features could be more generalized modularized. How is hyperbole in that respect?
+
+04:51.280 --> 04:56.800
+Yes, it hyperbole is meant to give you all of these capabilities across your entire Emacs
+
+04:56.800 --> 05:05.000
+experience. So everything you saw in org mode works and all sorts of other buffer types
+
+05:05.000 --> 05:13.560
+to accept the pieces that were activating org's specific features. Internal radio targets,
+
+05:13.560 --> 05:22.560
+are they able to link to other org mode files that are part of my agenda? Certainly you
+
+05:22.560 --> 05:33.960
+can have, you can make a link type that crosses similar to what you saw in the K outliner
+
+05:33.960 --> 05:41.040
+links where you specified a file and then it just would have the sub part of the link
+
+05:41.040 --> 05:48.640
+that you wanted that would reference the target as well. Your package advances how useful
+
+05:48.640 --> 05:53.880
+a mouse can be with creating links. That we didn't show but you can just drag between
+
+05:53.880 --> 05:59.240
+windows and create an explicit link between things as well. Do you have any experience
+
+05:59.240 --> 06:03.640
+or thoughts about how touchscreens or mice could be used or improved with Emacs? Yes
+
+06:03.640 --> 06:13.080
+I do. In fact, when hyperbole was conceived originally it was part of a broader research
+
+06:13.080 --> 06:19.640
+project called personalized information environments. At the dawn of the web is when this started
+
+06:19.640 --> 06:25.800
+and we kind of figured people would be deluged with maybe 5,000 email messages a day or just
+
+06:25.800 --> 06:33.240
+all sorts of things like we are deluged with today. So we were thinking about sort of like
+
+06:33.240 --> 06:41.160
+org brain and the graphical sort of navigation that you could do in hyper versus and came
+
+06:41.160 --> 06:51.920
+up with some prototypes that were kind of very iPad like in the node sort of views but
+
+06:51.920 --> 06:58.760
+with much greater navigation capability. So a lot of that isn't implemented but we are
+
+06:58.760 --> 07:04.400
+always thinking about how to make things more useful and you see the smart context handling
+
+07:04.400 --> 07:10.360
+that the mouse keys do because there's drags associated with the action and the assist
+
+07:10.360 --> 07:16.800
+keys when put onto mice and those do a great many things that sort of replicate what a
+
+07:16.800 --> 07:22.960
+touchscreen might do as well. Would you consider hyperbole to be more of a format spec that
+
+07:22.960 --> 07:28.240
+can then be handled however we want or the engine itself along with that format i.e.
+
+07:28.240 --> 07:33.620
+can the simple link formats be used for other extensible purposes. Yes again hyperbole was
+
+07:33.620 --> 07:39.560
+conceived as a hypertext engine that would be part of the personalized information environments
+
+07:39.560 --> 07:47.600
+or pies and it would link that engine would then be available to multiple applications.
+
+07:47.600 --> 07:57.560
+So we sort of built an API not a web API but just a programming API that you can use and
+
+07:57.560 --> 08:03.960
+that's documented in the manual to build other applications atop hyperbole. It turned out
+
+08:03.960 --> 08:09.280
+that a lot of people didn't have that capability to program it so we just kept programming
+
+08:09.280 --> 08:14.640
+a lot of these default features that you see today with all the button types to show people
+
+08:14.640 --> 08:20.760
+what was possible. How is the integration with org roam? We're just starting to look
+
+08:20.760 --> 08:29.240
+at that you know again I just find with hyperbole there are no external required packages you
+
+08:29.240 --> 08:34.640
+just load hyperbole and whatever Emacs has that's all that it needs so that's kind of
+
+08:34.640 --> 08:40.080
+unique for such a big package like this. There are optional things like ace window that you
+
+08:40.080 --> 08:45.200
+can add on and then hyperbole will work with them but they're not required. So similarly
+
+08:45.200 --> 08:55.760
+we try to never have any separate C compiled programs like SQLite or org roam which uses
+
+08:55.760 --> 09:03.600
+SQLite that's required. However we interface to external systems like that so basically
+
+09:03.600 --> 09:12.400
+you know we'll do some interesting things with org roam nodes in the near future. When
+
+09:12.400 --> 09:19.200
+does something when doing something where do you determine where to put it k-o-t-l rollo
+
+09:19.200 --> 09:28.080
+org? I like k-o-t-l k-outline for journaling and org mode for getting things done. Sure
+
+09:28.080 --> 09:37.820
+I mean you know org and k-outliner are both outline formats so I like k-outliner for like
+
+09:37.820 --> 09:44.480
+requirements gathering anytime I need things numbered quickly I'm making lists or hierarchies
+
+09:44.480 --> 09:52.040
+I want those IDs there. Org does some of that but not nearly to the level that the k-outliner
+
+09:52.040 --> 09:58.600
+does. The rollo again I just stuff all sorts of information in there and then we have very
+
+09:58.600 --> 10:04.440
+simple search and retrieval operations that we can use on there so I don't need to worry
+
+10:04.440 --> 10:10.880
+about all of these like drawers and all the complexity that org allows because you want
+
+10:10.880 --> 10:16.760
+to publish something. I tend to use everything as a live hypertext and don't worry about
+
+10:16.760 --> 10:22.320
+printing it out or displaying it in some other format too much. So it depends on your taste
+
+10:22.320 --> 10:28.320
+I would say. Would you recommend a specific resource for getting into hyperbole or should
+
+10:28.320 --> 10:33.080
+I just start with the manual? Definitely interested in getting into this. Thank you for asking
+
+10:33.080 --> 10:39.600
+that. Definitely don't start with manual. The manual is almost 170 pages it's a reference
+
+10:39.600 --> 10:45.760
+manual for specific things that you want to know. For learning once you install hyperbole
+
+10:45.760 --> 10:55.080
+part of the menu system is control H HDD for documentation and then demo and that puts
+
+10:55.080 --> 10:59.080
+you into an interactive demo that you just walk through so it's sort of like the Emacs
+
+10:59.080 --> 11:06.980
+tutorial and that'll get you started much better than any other way and the second thing
+
+11:06.980 --> 11:13.960
+to do after that I would say is watch some of the videos. One of the videos is a talk
+
+11:13.960 --> 11:19.800
+I gave earlier that's about an hour-long talk introducing you to hyperbole and its concepts
+
+11:19.800 --> 11:25.280
+so I think those are the two best ways to get started and then you can move on to the
+
+11:25.280 --> 11:32.240
+reference manual if you're really good at reading. What is hyperorg? That's a name that
+
+11:32.240 --> 11:41.360
+Sasha made up I believe for the talk here. I thought it should be hyperborg. It would
+
+11:41.360 --> 11:48.200
+be a little funnier that right we're trying to be like a borg and get people to use hyperbole
+
+11:48.200 --> 11:55.440
+and org together and then you'll never you'll never want to be anything else except users
+
+11:55.440 --> 12:05.920
+of those packages. Anybody want to talk live on the big blue button?
+
+12:05.920 --> 12:11.960
+Again so the thing is I didn't give you the time when we were supposed to finish with
+
+12:11.960 --> 12:22.720
+the Q&A and give me just a second. I've confirmed with the people behind me that we actually
+
+12:22.720 --> 12:26.080
+need to get moving to the next talk at the top of this minute so Bob thank you so much
+
+12:26.080 --> 12:29.320
+for answering so many questions. I'm sorry we don't have more time for questions because
+
+12:29.320 --> 12:33.200
+your talk I think was a little longer than we anticipated at first but I still believe
+
+12:33.200 --> 12:35.840
+you've done a great job at first covering a lot of stuff.
+
+12:35.840 --> 12:40.080
+I'll be on the etherbed for a little while if people want to push anything else there.
+
+12:40.080 --> 12:44.040
+Also if you want to stay here we are going to open the BBB if people want to ask you
+
+12:44.040 --> 12:51.360
+questions we're going to publish the link. Bob we're going to need to get going with
+
+12:51.360 --> 12:54.560
+the stream we're starting the next talk in 20 seconds thank you so much and I'll see
+
+12:54.560 --> 13:14.640
+you later. Take care Leo thank you. Bye bye.
+
+13:24.560 --> 13:36.400
+Gosh yeah pretty much I mean I'm still on this thing if it shows up for a minute but
+
+13:36.400 --> 13:56.480
+nobody's there.
+
+13:56.480 --> 14:13.060
+Take care.
+
+14:26.480 --> 14:28.540
+you
+
+14:56.480 --> 14:58.540
+you
+
+15:26.480 --> 15:28.540
+you
+
+15:56.480 --> 15:58.540
+you
+
+16:26.480 --> 16:28.540
+you
+
+16:56.480 --> 16:58.540
+you
+
+17:26.480 --> 17:28.540
+you
+
+17:56.480 --> 17:58.540
+you
+
+18:26.480 --> 18:28.540
+you
+
+18:56.480 --> 18:58.540
+you
+
+19:26.480 --> 19:28.540
+you
+
+19:56.480 --> 19:58.540
+you
+
+20:26.480 --> 20:28.540
+you
+
+20:56.480 --> 20:58.540
+you
+
+21:26.480 --> 21:28.540
+you
+
+21:56.480 --> 21:58.540
+you
+
+22:26.480 --> 22:28.540
+you
+
+22:56.480 --> 22:58.540
+you
+
+23:26.640 --> 23:28.340
+you
+
+23:37.680 --> 23:41.040
+Would you still be up to talking?
+
+23:41.040 --> 23:56.400
+Hi, are you talking to me?
+
+23:56.400 --> 23:57.400
+Yeah.
+
+23:57.400 --> 24:12.720
+For a minute, I'm going to just go take a walk in a little bit, but I can quickly pause.
+
+24:12.720 --> 24:14.920
+Just go ahead.
+
+24:14.920 --> 24:20.780
+One thing whenever I've tried setting up any knowledge bases, I've generally thrown them
+
+24:20.780 --> 24:24.500
+away after a while, slowly picking up more and more.
+
+24:24.500 --> 24:31.680
+Right now, I'm using org room and LogSec.
+
+24:31.680 --> 24:38.340
+And one of the features I found in LogSec that I like is you're able to have the link
+
+24:38.340 --> 24:44.520
+in such a way where I can make an outline of everything I want to do on a week in one
+
+24:44.520 --> 24:49.640
+file and then in the journal view that it will dynamically generate, it will show you
+
+24:49.640 --> 24:55.240
+the tasks individually on that day just for that day.
+
+24:55.240 --> 24:57.160
+So is there any way?
+
+24:57.160 --> 25:04.720
+So it creates kind of a journal based on dated items that it's extracting from multiple other
+
+25:04.720 --> 25:06.320
+sources, right?
+
+25:06.320 --> 25:07.320
+Yeah.
+
+25:07.320 --> 25:16.840
+So it's got a section below it that's from different sources and you can go and do that
+
+25:16.840 --> 25:24.160
+and it will just dynamically put it at the bottom, but just for those specific links.
+
+25:24.160 --> 25:32.800
+You know, sort of like the idea of transclusion, right, is something that they've addressed
+
+25:32.800 --> 25:37.960
+in org mode and we haven't really dealt with that in hyperbole.
+
+25:37.960 --> 25:43.320
+So those are areas that we want to get into.
+
+25:43.320 --> 25:51.760
+I think there's a lot of work going on in LogSec and Obsidian that I look at when I
+
+25:51.760 --> 25:53.900
+have time.
+
+25:53.900 --> 25:58.720
+So there's definitely ideas to draw around that.
+
+25:58.720 --> 26:03.920
+One of the things we find is there's just covering all across Emacs, there's so much
+
+26:03.920 --> 26:12.880
+to do all the time and this being a part-time project, we have to think like RMS does across
+
+26:12.880 --> 26:17.640
+years rather than weeks just because of the energy around it.
+
+26:17.640 --> 26:25.280
+But you know, the more people can kind of like write a paragraph and say if hyperbole
+
+26:25.280 --> 26:32.040
+or some tool could do this, you know, the more likely it is that we'll approach it and
+
+26:32.040 --> 26:33.920
+turn it into reality.
+
+26:33.920 --> 26:34.920
+Yeah.
+
+26:34.920 --> 26:40.440
+Well, like you could probably write some functions that will just dynamically grab information
+
+26:40.440 --> 26:41.440
+like that out.
+
+26:41.440 --> 26:49.000
+Yeah, well, I mean like you have that with the high roller so you can just make arbitrary
+
+26:49.000 --> 26:56.080
+documents and just put stars at the front of each node and the high roller will pull
+
+26:56.080 --> 27:00.000
+out anything that you want to match on.
+
+27:00.000 --> 27:05.400
+You know, it can be regular expressions, logic expressions with and or not.
+
+27:05.400 --> 27:11.400
+So that's already there and it's very simple with the other capabilities to just turn
+
+27:11.400 --> 27:15.600
+a search into a button somewhere in your file.
+
+27:15.600 --> 27:23.200
+So you basically create your own dynamic views then without any additional mechanism.
+
+27:23.200 --> 27:27.400
+But when you want to deal with like the dates and you want to see it, you know, that's a
+
+27:27.400 --> 27:33.840
+specific view that we would program for you and provide.
+
+27:33.840 --> 27:40.880
+With Not Much and MU4E, the thing I like about Not Much More is you're able to in your search
+
+27:40.880 --> 27:48.640
+queries you can use the ands and ors with subject headers or stuff that's only in the
+
+27:48.640 --> 27:56.520
+body of the paragraph of the email or who it's to and from and I don't think MU4E has
+
+27:56.520 --> 27:59.120
+near that support.
+
+27:59.120 --> 28:07.360
+You could use something with org mode and you could do that type of stuff searching
+
+28:07.360 --> 28:12.520
+like based off of keywords with, there's a package by Alpha Papa, I can't remember the
+
+28:12.520 --> 28:13.520
+name of it.
+
+28:13.520 --> 28:14.520
+Org Rifle.
+
+28:14.520 --> 28:15.520
+OrgQL.
+
+28:15.520 --> 28:17.960
+OrgQL, yeah.
+
+28:17.960 --> 28:23.440
+And does like you have anything?
+
+28:23.440 --> 28:31.280
+I mean, yeah, it's like, I'm not sure you combine say subject, colon, whatever, your
+
+28:31.280 --> 28:38.520
+regular expression and you map that with a logic expression.
+
+28:38.520 --> 28:44.600
+So in hyperbole, in high roll though, to do a logic expression, you just do it like a
+
+28:44.600 --> 28:46.080
+Lisp expression.
+
+28:46.080 --> 28:49.040
+So but you use and or, ex or not.
+
+28:49.040 --> 28:56.920
+So you say, you know, open paren, not, and then what you want to not match to, right?
+
+28:56.920 --> 29:02.480
+This node doesn't have that in it and you know, a broader expression with an and around
+
+29:02.480 --> 29:07.000
+it would say, so it's not this and it's this.
+
+29:07.000 --> 29:11.960
+So that all exists the moment you pull up the interface to say, I want to do a string
+
+29:11.960 --> 29:12.960
+search.
+
+29:12.960 --> 29:18.080
+You can actually embed those logic expressions right in your search there and it'll do them
+
+29:18.080 --> 29:21.820
+for you.
+
+29:21.820 --> 29:28.820
+That would mostly be regex, right, or is it a different syntax?
+
+29:28.820 --> 29:34.600
+It's a different, so you can have regexes embedded in the logic expression, but the
+
+29:34.600 --> 29:44.000
+logic itself is done with like the equivalent of, you know, S expressions with and or not
+
+29:44.000 --> 29:45.200
+an ex or.
+
+29:45.200 --> 29:57.320
+So I could say and bird watch and it would only find outline items that contain the words
+
+29:57.320 --> 29:59.280
+bird and watch.
+
+29:59.280 --> 30:06.000
+So it's very simple, you know, textual like that, but then bird could be a regex if I,
+
+30:06.000 --> 30:08.500
+you know, as well.
+
+30:08.500 --> 30:15.600
+So things like that, you have to try it out, I think, you know, to really get a feel for
+
+30:15.600 --> 30:16.600
+it.
+
+30:16.600 --> 30:25.080
+I've tried it some, I just, it's just a lot harder to, they have so many of these knowledge
+
+30:25.080 --> 30:30.120
+base programs that it's hard to make a knowledge base with each one of them and then compare
+
+30:30.120 --> 30:31.120
+them.
+
+30:31.120 --> 30:32.120
+Oh, I agree.
+
+30:32.120 --> 30:33.120
+I mean, that's part of why we built it, right?
+
+30:33.120 --> 30:39.560
+I mean, we built this before org existed, so.
+
+30:39.560 --> 30:46.600
+You know, I really do want to tie them together, but I agree with Stallman that org, you know,
+
+30:46.600 --> 30:54.540
+for scientific research purposes has embedded so many things that people outside that community
+
+30:54.540 --> 30:59.240
+don't really need and, you know, it's gotten to a level of complexity, I mean, you look
+
+30:59.240 --> 31:06.080
+at the code base that I still kind of, you know, happy to interface with it and use it
+
+31:06.080 --> 31:12.560
+and I see a lot of great stuff in there, but I want to be able to have a much simpler format
+
+31:12.560 --> 31:18.160
+for when I just have all this unstructured data that I want to deal with.
+
+31:18.160 --> 31:26.760
+Yeah, there's definitely a part of org mode that, that unmodularity and all the features
+
+31:26.760 --> 31:39.080
+that doesn't feel like Unix-y and the rest of Emacs and I think like org, yeah, just
+
+31:39.080 --> 31:41.800
+some of the features, org-id, I can't remember what they are.
+
+31:41.800 --> 31:42.800
+It's really the opposite.
+
+31:42.800 --> 31:49.180
+It's like, it's coming at it from, you know, that structure process, okay, we're going
+
+31:49.180 --> 31:54.960
+to tag everything with, you know, what property it is.
+
+31:54.960 --> 31:59.800
+And hyperbole is sort of the opposite to say, well, we have relational databases for when
+
+31:59.800 --> 32:01.520
+we're doing that kind of thing.
+
+32:01.520 --> 32:07.360
+So this is for your everyday information where, you know, oh, I just grabbed all this off
+
+32:07.360 --> 32:14.440
+the web or, you know, I just added in 200 files and now I want to deal with it and kind
+
+32:14.440 --> 32:17.760
+of mix it into my Hyperverse.
+
+32:17.760 --> 32:20.640
+What kind of capabilities can you give me to do that?
+
+32:20.640 --> 32:25.480
+So say like there were 200 documents that somebody handed you and they all have this
+
+32:25.480 --> 32:31.520
+cross-reference pattern embedded in it, right, which is a version of hyperlinks, but they're
+
+32:31.520 --> 32:33.100
+not actually hyperlinks.
+
+32:33.100 --> 32:40.800
+So you just create a couple line button type in hyperbole because all the mechanisms there
+
+32:40.800 --> 32:41.800
+already.
+
+32:41.800 --> 32:48.060
+And then once you activate that type, all of those documents now have those cross-references
+
+32:48.060 --> 32:50.380
+as hyperlinks.
+
+32:50.380 --> 32:56.360
+And you solve the problem could be for millions of cross-references with three lines of code.
+
+32:56.360 --> 33:02.040
+So that's the kind of leverage that we're looking to get without people having to, you
+
+33:02.040 --> 33:09.440
+know, touch the original source format.
+
+33:09.440 --> 33:15.760
+That's one of the things your package has tackled was links in the wild, email addresses,
+
+33:15.760 --> 33:22.440
+websites that people use and identify with.
+
+33:22.440 --> 33:27.600
+And then you got all that behavior without having to learn key bindings like you do in
+
+33:27.600 --> 33:28.600
+the org, right?
+
+33:28.600 --> 33:32.360
+I mean, you got to know at least like 10 in the org, I think.
+
+33:32.360 --> 33:37.200
+And you know, it's really too largely in hyperbole.
+
+33:37.200 --> 33:42.560
+So for me, when I'm going along, you know, I just want to mark things, operate on them
+
+33:42.560 --> 33:46.680
+and not really think about the command a lot.
+
+33:46.680 --> 33:52.760
+And so, of course, we all know many commands in Emacs, but, you know, so I have that the
+
+33:52.760 --> 33:59.760
+editing commands, but the knowledge base commands, I don't really need to add on that much more
+
+33:59.760 --> 34:02.080
+and I can still be very effective.
+
+34:02.080 --> 34:10.440
+Yeah, you dealt with links in the wild while simultaneously advancing the state of the
+
+34:10.440 --> 34:13.520
+art with the implicit links.
+
+34:13.520 --> 34:20.160
+So like what can you do if you stay within your own system and you control everything?
+
+34:20.160 --> 34:28.960
+Yeah, I think that's the, you know, people love implicit buttons, but it sort of takes
+
+34:28.960 --> 34:33.520
+a while for it to sink in what you can do with it, right?
+
+34:33.520 --> 34:40.200
+Because it is a little difficult to figure out how you create your own type.
+
+34:40.200 --> 34:48.120
+But like we have a GitHub, I don't know if you use GitHub, but type built in and, you
+
+34:48.120 --> 34:57.720
+know, with very short cross references, it can access issues, commits, projects, linked
+
+34:57.720 --> 35:04.800
+to all of their things with just, you know, a few characters in your document.
+
+35:04.800 --> 35:11.720
+And so, you know, there's an interface to an entire web ecosystem that's done in one
+
+35:11.720 --> 35:19.560
+module and I verbally and, you know, you don't, all you have to do is use it.
+
+35:19.560 --> 35:24.920
+Something that could be interesting there is if you had it with next common list web
+
+35:24.920 --> 35:33.000
+browser, you click a GitHub issue on the website and it either downloads the source code or
+
+35:33.000 --> 35:39.680
+just goes and then the uses maggot or forge to download the issues and then just automatically
+
+35:39.680 --> 35:42.520
+opens it up in Emacs for you to look at it there.
+
+35:42.520 --> 35:43.520
+That'd be an interesting.
+
+35:43.520 --> 35:44.520
+Yeah.
+
+35:44.520 --> 35:52.160
+Well, we have that for, so if you just type in any buffer, you put a bug pound sign and
+
+35:52.160 --> 36:00.080
+the number and you press your action key on that, that will display that bug number for
+
+36:00.080 --> 36:05.640
+Emacs in good news and the dialogue associated with it.
+
+36:05.640 --> 36:15.440
+So, you know, we have that similar kind of thing for GitHub, GitLab and so it's, you
+
+36:15.440 --> 36:19.240
+know, a lot of people are interested in that because they have Jira or something and they
+
+36:19.240 --> 36:24.840
+just want a simple way, you know, to get at their issues in whatever web browser they
+
+36:24.840 --> 36:25.840
+use.
+
+36:25.840 --> 36:32.480
+And that's very easy to do and one of the most common things programmers do.
+
+36:32.480 --> 36:38.320
+You still there?
+
+36:38.320 --> 36:40.320
+Yeah.
+
+36:40.320 --> 36:42.320
+Okay.
+
+36:42.320 --> 36:45.560
+It's just funny.
+
+36:45.560 --> 36:53.760
+So yeah, I hope, I guess you've obviously explored hyperbole a little bit, you know,
+
+36:53.760 --> 36:59.760
+let us know what the barriers are to, you know, becoming a regular user and we'll work
+
+36:59.760 --> 37:01.480
+on this.
+
+37:01.480 --> 37:11.080
+One thing I found that I like about the K outline is if you, long form journaling is
+
+37:11.080 --> 37:18.880
+if I do that with centering the buffer, making it a little bit bigger, the text a little
+
+37:18.880 --> 37:24.200
+bit bigger, I find that I like that more than org mode.
+
+37:24.200 --> 37:28.360
+If it's short enough, it doesn't matter, but if it's long enough or my thoughts are complex
+
+37:28.360 --> 37:38.160
+enough, not worrying about buffer headings or body paragraph content or anything along
+
+37:38.160 --> 37:43.800
+those lines, less presentation helps a lot in that.
+
+37:43.800 --> 37:50.960
+The automatic paragraph formatting just makes it work, I type, I'm good to go, it automatically
+
+37:50.960 --> 37:52.360
+does everything like that.
+
+37:52.360 --> 37:53.360
+Right.
+
+37:53.360 --> 37:58.400
+You can just write and you get all, you get all this stuff for free.
+
+37:58.400 --> 38:02.840
+That's kind of a lot, you know, that's like I talked about the cognitive overhead.
+
+38:02.840 --> 38:08.640
+You know, I think Emacs, people have a lot of trouble understanding why people stick
+
+38:08.640 --> 38:18.120
+with Emacs now, but I think it does, the common editing capabilities are very similar to hyperbole,
+
+38:18.120 --> 38:19.120
+right?
+
+38:19.120 --> 38:24.560
+So you go across all these modes, different applications, but the editing stays the same.
+
+38:24.560 --> 38:32.520
+That takes so much off your plate compared to learning new hotkeys for every application.
+
+38:32.520 --> 38:41.560
+And so, you know, we're sold and now you want that kind of thing for your writing, for your
+
+38:41.560 --> 38:43.560
+knowledge management.
+
+38:43.560 --> 38:50.840
+And yeah, I think org is, you know, really, it was built for the scientists, the researchers,
+
+38:50.840 --> 38:51.840
+right?
+
+38:51.840 --> 38:54.120
+They have to do all that stuff with citations.
+
+38:54.120 --> 38:57.040
+I'm never going to use the citation capability, right?
+
+38:57.040 --> 38:59.720
+I don't publish much anymore.
+
+38:59.720 --> 39:06.020
+So you know, all that work is kind of lost on me, whereas like, you know, better structured
+
+39:06.020 --> 39:12.840
+outlining is going to be a win for, you know, a very broad cross section of people.
+
+39:12.840 --> 39:19.400
+So I think it's, you know, I wish more people would give it a try, but I think now we're
+
+39:19.400 --> 39:25.760
+doing a lot more things that are making hyperbole more accessible to people.
+
+39:25.760 --> 39:31.240
+A lot of people, I don't know if we can, like people have asked for a doom interface or
+
+39:31.240 --> 39:32.880
+space max interface.
+
+39:32.880 --> 39:40.640
+I do notice on Reddit that tons of people seem to use one of those two and they've never
+
+39:40.640 --> 39:45.720
+learned Emacs in its core form, right?
+
+39:45.720 --> 39:49.160
+They're coming from VI, so they're Vim users or something.
+
+39:49.160 --> 39:55.500
+And they, I guess they like all this layering kind of capability, exposing the features.
+
+39:55.500 --> 40:00.560
+So I haven't really looked at that, but maybe, you know, if we did that and we don't have
+
+40:00.560 --> 40:08.480
+hyperbole on Melpa, so although, you know, some people, they replace Elpa mistakenly
+
+40:08.480 --> 40:12.160
+with Melpa, you know, in their config.
+
+40:12.160 --> 40:16.600
+And so they never see hyperbole because it's not in their packages.
+
+40:16.600 --> 40:22.920
+Like, I didn't know this existed, like, well, don't do that.
+
+40:22.920 --> 40:30.600
+One thing that would be nice for stuff like this is having Emacs in it for hyperbole with
+
+40:30.600 --> 40:35.780
+a knowledge base and then one with Orgrom and a knowledge base and one with the ZK package
+
+40:35.780 --> 40:39.300
+and a knowledge base, et cetera, et cetera.
+
+40:39.300 --> 40:45.740
+Is that something you might look at doing a little, you know, sort of like proof of
+
+40:45.740 --> 40:55.240
+concept of, and share with us, you know, give us some idea of your thoughts?
+
+40:55.240 --> 41:02.640
+I just thought of it while watching this talk, and I might put together some resources of,
+
+41:02.640 --> 41:10.360
+there's some other packages that, or ZK, or there's another one of these packages that
+
+41:10.360 --> 41:11.360
+has a knowledge base.
+
+41:11.360 --> 41:14.760
+I might put together resources like that, see if I see anybody else's.
+
+41:14.760 --> 41:16.880
+Yeah, that'd be great.
+
+41:16.880 --> 41:25.400
+And do you try to note, do you use a prods denote package?
+
+41:25.400 --> 41:29.600
+I haven't messed with that one yet.
+
+41:29.600 --> 41:32.520
+I've looked at it.
+
+41:32.520 --> 41:38.900
+One contention I see between using all these right here is, like, you have the org FC package
+
+41:38.900 --> 41:44.520
+for flashcards, and that would sound really nice for learning new English words that I
+
+41:44.520 --> 41:45.520
+ever come across.
+
+41:45.520 --> 41:50.520
+I could make that, put the description.
+
+41:50.520 --> 41:54.960
+But if I, it seems like you can either use org rom and you're completely tied into the
+
+41:54.960 --> 42:01.240
+org rom org system, or you don't do that, then you can't use any of those features where
+
+42:01.240 --> 42:05.800
+they treat each of the nodes as a individual system.
+
+42:05.800 --> 42:09.880
+I've dabbled with multiple of the systems, so maybe there's a way.
+
+42:09.880 --> 42:10.880
+Are you good with org rom?
+
+42:10.880 --> 42:13.920
+I've been having this one problem.
+
+42:13.920 --> 42:14.920
+It's weird.
+
+42:14.920 --> 42:21.280
+I get in this mode where I pointed it somewhere and it worked at one time, and now I repoint
+
+42:21.280 --> 42:26.040
+it somewhere, and then I point it back and it won't work anymore.
+
+42:26.040 --> 42:33.620
+So I can't get it to sometimes index my set of org files, and it seems like it should
+
+42:33.620 --> 42:43.460
+be so basic, but there's something in the sequence of how it caches, I guess, the directory
+
+42:43.460 --> 42:49.520
+of org files that maybe I've solved it already, I don't recall, but I was just wondering if
+
+42:49.520 --> 42:53.080
+anybody else had that experience.
+
+42:53.080 --> 43:00.000
+I've mostly just dabbled in a couple of these systems and then haven't really chosen one
+
+43:00.000 --> 43:02.120
+to just use.
+
+43:02.120 --> 43:03.120
+Do you program?
+
+43:03.120 --> 43:10.040
+Are you by nature a programmer or is it like a hobby?
+
+43:10.040 --> 43:11.040
+Hobby.
+
+43:11.040 --> 43:20.440
+I haven't done too much on writing my own functions, but Emacs is by far the biggest
+
+43:20.440 --> 43:28.720
+or longest program I've ever...longest program, config, whatever, that I've ever used.
+
+43:28.720 --> 43:34.200
+And you started on Emacs how long ago?
+
+43:34.200 --> 43:41.760
+Five or ten years ago, somewhere along those lines.
+
+43:41.760 --> 43:43.240
+Good one.
+
+43:43.240 --> 43:48.160
+Yeah, it was nice having Stelman there today, right?
+
+43:48.160 --> 43:56.520
+It's like, well, if you want an actual answer, there's something that only he could answer.
+
+43:56.520 --> 44:03.400
+I'm surprised how many questions there were on that talk.
+
+44:03.400 --> 44:06.240
+What about them?
+
+44:06.240 --> 44:09.840
+I was surprised just about how many questions there were on...
+
+44:09.840 --> 44:16.320
+Yeah, you hear all this negative stuff about him, but people are very interested in where
+
+44:16.320 --> 44:25.500
+stuff came from, why have you never used this package that everybody else uses and things
+
+44:25.500 --> 44:35.640
+like that, what his world view is, since it is so different than so many other people's.
+
+44:35.640 --> 44:47.200
+All right, well, great talking to you and good luck with your knowledge space research
+
+44:47.200 --> 44:51.200
+and yeah, let me know if there's something.
+
+44:51.200 --> 44:57.880
+Try out the development version of Hyperbole like I should, that'll get you all the newest
+
+44:57.880 --> 45:02.000
+features and we'll get 9.0 out as soon as we can.
+
+45:02.000 --> 45:06.640
+Yeah, I use the Borg, so I actually do try out the development already.
+
+45:06.640 --> 45:08.640
+Oh, great, super.
+
+45:08.640 --> 45:15.040
+Also because sometimes since I'm using the development version of Emacs, it doesn't always...
+
+45:15.040 --> 45:18.560
+I've had issues compiling in the past because I needed the newer code.
+
+45:18.560 --> 45:26.760
+I think, I can't entirely remember, but thanks for the package and good talking, nice ideas
+
+45:26.760 --> 45:27.760
+and talk.
+
+45:27.760 --> 45:28.760
+Yeah.
+
+45:28.760 --> 45:29.760
+Take care.
+
+45:29.760 --> 45:30.760
+Bye.
+
+45:30.760 --> 45:50.120
+Bye.
+
diff --git a/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.vtt b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.vtt
new file mode 100644
index 00000000..8845b9fd
--- /dev/null
+++ b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.vtt
@@ -0,0 +1,467 @@
+WEBVTT
+
+00:00.000 --> 00:13.360
+and we are live hello again everyone and hi Michael how you doing very well thank you
+
+00:13.360 --> 00:20.360
+how are you I am doing well I am running out of energy steadily but surely but it's it's
+
+00:20.360 --> 00:24.920
+it's always a confusing feeling you know because I feel the energy going away the excitement
+
+00:24.920 --> 00:30.360
+going up because not only because we are close to an end which means my turmoil and my plight
+
+00:30.360 --> 00:37.560
+will come to an end but also because it's nice to have finished any Max Kant and I've
+
+00:37.560 --> 00:42.400
+put so many great talk in the wild for people to to be able to consume so and that's no
+
+00:42.400 --> 00:46.760
+little thanks to all our speakers including you Michael so thank you so much oh no you're
+
+00:46.760 --> 00:52.160
+very welcome I'm just happy to be a part of it yeah and we're glad you are so Michael
+
+00:52.160 --> 00:57.760
+do you have the pad open in front of you I do indeed looks like you've got a few questions
+
+00:57.760 --> 01:04.680
+coming in here yes meeting the question and then answering them sure sure let's start
+
+01:04.680 --> 01:10.520
+off with the one one I've already answered how did you create the drill down representation
+
+01:10.520 --> 01:19.320
+of the make call wondered if I sketched it out by hand and scanned it so I should every
+
+01:19.320 --> 01:26.480
+talk I give both at work and elsewhere people ask this question I should like get a finder's
+
+01:26.480 --> 01:35.120
+fee from Excalidraw but there's a website on the web called Excalidraw.com very nice
+
+01:35.120 --> 01:42.000
+diagramming solution it makes these awesome sort of hand written looking diagrams so that's
+
+01:42.000 --> 01:50.880
+what I used first question have you seen Reclaim ID this allows you to make a login that you
+
+01:50.880 --> 01:57.160
+own or at least is more open source and ownable seems to fit with the indie web so this is
+
+01:57.160 --> 02:02.320
+one of the things I've come to like about speaking at EmacsConf I feel like I learn
+
+02:02.320 --> 02:08.040
+you know as much or more than I teach no I am not familiar with this so I will definitely
+
+02:08.040 --> 02:18.160
+be taking a look there is an indie web protocol for identity it's called indie auth but yeah
+
+02:18.160 --> 02:24.520
+thanks for the tip I will definitely check out Reclaim ID what happens when you republish
+
+02:24.520 --> 02:31.360
+or re-export the same post will the web mentions be sent out repeatedly they will not not you
+
+02:31.360 --> 02:40.880
+could do that I suppose you might annoy some of your recipients but my solution on successful
+
+02:40.880 --> 02:47.600
+send of the initial web mention notes that down and is smart enough to not re-send it
+
+02:47.600 --> 02:56.600
+a second yeah so and actually I want to follow up on something on IRC I think Carl Voight
+
+02:56.600 --> 03:03.440
+said oh I don't have to have a database you don't have to have a database but I do use
+
+03:03.440 --> 03:14.520
+a plain text file full of just just printed list forms to maintain state let's see an
+
+03:14.520 --> 03:19.720
+advantage I see to using org mode for the indie web is you can use it for your notes
+
+03:19.720 --> 03:26.800
+org room for example no export for private yes yes the web mentions could be org file
+
+03:26.800 --> 03:36.200
+yes absolutely so yeah I mean so many people have found org mode so handy as a writing
+
+03:36.200 --> 03:44.040
+tool that you know and I just felt like you were right there right you just need a little
+
+03:44.040 --> 03:50.200
+bit of code to get you to transcode the HTML and get it on the web and then it was like
+
+03:50.200 --> 03:55.560
+well gosh I'm right there just a little bit more code and I can start sending web mentions
+
+03:55.560 --> 04:10.560
+I could start posseing etc etc etc any thoughts on using with ox Hugo so no not because I
+
+04:10.560 --> 04:18.200
+have anything against ox Hugo simply because I'm unfamiliar with it there's a couple of
+
+04:18.200 --> 04:25.760
+static site generators out there that you can use with org mode my design philosophy
+
+04:25.760 --> 04:33.120
+for this was I was going to start with emacs and org mode out of the box and see how far
+
+04:33.120 --> 04:43.400
+I could get with just adding a little bit of a list around it this a web 3 approach p.s.
+
+04:43.400 --> 05:00.280
+former not former military just losing my hair not I don't know what web 3 means some
+
+05:00.280 --> 05:06.960
+people it seems to be a decentralized approach and indie web is all about reclaiming your
+
+05:06.960 --> 05:14.160
+identity and your data from a few they call them silos right we're talking about the big
+
+05:14.160 --> 05:28.160
+social media oh cool great help me the web one with static sites yep yep everybody go
+
+05:28.160 --> 05:35.160
+out and blog on your own server and web rings were kind of like the communication mechanism
+
+05:35.160 --> 05:50.560
+web 2 is more interactive yeah I mean web 2 certainly was more interactive I guess I
+
+05:50.560 --> 06:02.080
+see it as we're gonna Michael just interrupting a little quickly we are going to open up the
+
+06:02.080 --> 06:06.520
+Q&A to people so if you want to join us the same dude as usual you go to the talk page
+
+06:06.520 --> 06:15.720
+we've also posted the sorry to give you just a second just a second I'm verifying something
+
+06:15.720 --> 06:21.080
+with audio level okay cool apparently my audio is perfect we were trying to do some live adjustments
+
+06:21.080 --> 06:25.640
+so we're saying we've opened up the BBB room so that people we want to join the last five
+
+06:25.640 --> 06:32.080
+questions are able to do so so either on the talk page or you can do this also on IRC
+
+06:32.080 --> 06:36.320
+we've posted the link over there so Michael you feel free to keep taking questions on
+
+06:36.320 --> 06:39.600
+the pad we still have many of them but I just wanted to let people know in case they wanted
+
+06:39.600 --> 06:45.200
+to join and also one last information we will need to move on with the next talk in 16 minutes
+
+06:45.200 --> 06:57.560
+so you still have plenty of time yeah wow I'm excited there's so much time left to answer
+
+06:57.560 --> 07:04.320
+question or oh wow I'm not sure what I'm gonna do for 60 minutes oh no the former oh wow
+
+07:04.320 --> 07:09.240
+I'm not sure I'm gonna get to all these all these right well you'll be able to answer later
+
+07:09.240 --> 07:14.280
+try to do as many as you can okay so I'm on IRC right now somebody's telling me I'm super
+
+07:14.280 --> 07:19.480
+quiet I'm gonna adjust the mic no don't worry about OJ levels it's on us you don't worry
+
+07:19.480 --> 07:27.080
+about it let's see Sasha's gonna try and fix is there a workflow to use emacs to publish
+
+07:27.080 --> 07:38.360
+and connect directly to target websites so that's an interesting question can you what
+
+07:38.360 --> 07:46.080
+do you mean by workflow in that question so you want to cut telegraph out of the equation
+
+07:46.080 --> 08:00.880
+get that that means oh I'm sorry I thought somebody had joined the chat room don't worry
+
+08:00.880 --> 08:04.800
+I will I will let them know if you have people joining and asking questions if you hear another
+
+08:04.800 --> 08:08.560
+voice than mine it's someone joining and I will try to be polite and say yeah can you
+
+08:08.560 --> 08:13.320
+please wait let's Michael finish the question don't worry I don't know everything so if
+
+08:13.320 --> 08:20.560
+you want to cut telegraph out of equation that means you're going to need to take on
+
+08:20.560 --> 08:28.720
+more work client side in terms of first discovering the web mention endpoint which is gonna involve
+
+08:28.720 --> 08:37.840
+parsing HTML which we all hate then you're going to need to send the request to that
+
+08:37.840 --> 08:43.960
+web your web mention to that endpoint which introduces you know the standard question
+
+08:43.960 --> 08:48.120
+with web hooks is what if they're down what if you can't reach them what if you're not
+
+08:48.120 --> 08:53.560
+on the networks and now you got to build yourself a queuing system but sure sure absolutely
+
+08:53.560 --> 09:02.640
+indie web is just a protocol and I think the community would actually welcome fewer points
+
+09:02.640 --> 09:10.520
+of failure like telegraph we got the BBB audio better okay great so questions we were discussing
+
+09:10.520 --> 09:22.520
+web three Carl says some people started to term web zero for similar decentralized approaches
+
+09:22.520 --> 09:30.000
+yeah I don't think that by no means does indie web imply static site there are actually
+
+09:30.000 --> 09:38.440
+CMS systems that talk to that speak the indie web protocols I think even WordPress does
+
+09:38.440 --> 09:44.560
+it as does Drupal yeah so I don't know if you want to we can discuss further if you
+
+09:44.560 --> 09:56.080
+want to hop in the room but yeah I guess I see it more as a decentralized web than three
+
+09:56.080 --> 10:01.320
+do I have a process nope I had sorry the question is do you have a process running on the web
+
+10:01.320 --> 10:09.040
+server to receive requests no so those are cashed for me and I literally have a cron
+
+10:09.040 --> 10:16.080
+job on my personal desktop and once an hour I just reach out and say you got any more
+
+10:16.080 --> 10:23.920
+web mentions for me and process them back here that does mean given that I have a statically
+
+10:23.920 --> 10:32.280
+generated website I need to republish every time I receive a web mention Michael if you
+
+10:32.280 --> 10:35.240
+don't mind interrupting we have someone in the room who would like to ask a question
+
+10:35.240 --> 10:41.520
+Max if you want to unmute yourself if you could ask the question I'm not sure if you're just
+
+10:41.520 --> 10:47.600
+showing your webcam yes you do have a question go on hi Michael no I actually didn't have
+
+10:47.600 --> 10:55.160
+a question I asked a question about the web 3.0 and I have a little concern about you
+
+10:55.160 --> 11:01.160
+know you use you describe kind of how dead it was to have just a static site and not
+
+11:01.160 --> 11:08.800
+be able to interact with people and so I was you know just thinking along those lines is
+
+11:08.800 --> 11:16.360
+anywhere is it a better way how satisfied are you with this with this with web mentions
+
+11:16.360 --> 11:23.120
+and you know sort of thumbs up down and did you actually get a demo running I mean are
+
+11:23.120 --> 11:39.960
+we able to see it somewhere well you can see it on my site which is just but I have can
+
+11:39.960 --> 11:43.480
+actually can you put it in the back can you put it in the back so that other people can
+
+11:43.480 --> 11:53.880
+actually access it including Max okay yes Max I know you're still there but I just want
+
+11:53.880 --> 11:57.280
+everyone to be able to click on it as well I'll do it don't worry about it I'll take
+
+11:57.280 --> 12:08.720
+care of it here we go Carl says web 3 is supposed to be something really strange with blockchains
+
+12:08.720 --> 12:22.240
+and this is definitely nothing like that yeah Carl put it much better than I could and well
+
+12:22.240 --> 12:26.320
+I'll just kind of okay cool Max is still here I'll just finish answering the question how
+
+12:26.320 --> 12:37.400
+satisfied am I it's work in progress I'm initially happy I was limited by time for this talk
+
+12:37.400 --> 12:43.040
+and as you can see maybe I got too far into the weeds but it was fairly involved just
+
+12:43.040 --> 12:50.360
+describing how to send and receive web mentions there's a second indie web protocol called
+
+12:50.360 --> 13:00.320
+posse publish on your own site syndicate elsewhere in which you can say okay I want to publish
+
+13:00.320 --> 13:09.240
+this post to my site oh and at the same time fire off a tweet referencing it and fire off
+
+13:09.240 --> 13:18.120
+a mastodon to referencing it and there are protocols for like pulling likes and boosts
+
+13:18.120 --> 13:27.480
+of that back to your own site as feedback and I've been playing with that a little bit
+
+13:27.480 --> 13:36.880
+and actually feeling pretty good about it yeah so happy to talk more other questions
+
+13:36.880 --> 13:42.200
+okay right so do I have a process running on the web server to receive requests nope
+
+13:42.200 --> 13:49.960
+just a cron job I think perhaps you're doing too much inside emacs yeah yeah great question
+
+13:49.960 --> 13:56.400
+I can't remember if I alluded to this at the end of the talk but as I said when I started
+
+13:56.400 --> 14:05.080
+down this path felt that was so close with just plain vanilla emacs in org mode it couldn't
+
+14:05.080 --> 14:12.160
+be that hard right and of course this is famous last words initially it was just a little
+
+14:12.160 --> 14:20.000
+bit of code around that to get the static site generator up sending web mentions are
+
+14:20.000 --> 14:28.480
+yeah it's a lot of code and so I'm definitely kind of at this point of you know is it time
+
+14:28.480 --> 14:37.040
+to turn to a proper CMS I start out using web mentions of service web mention telegraph
+
+14:37.040 --> 14:44.200
+then you want to change endpoint whether to a different service or I want to take them
+
+14:44.200 --> 14:53.480
+I see I see it didn't be the way the web mention oh I'm sorry let me finish the question I
+
+14:53.480 --> 14:59.960
+keep to make this clear so the question is let's suppose you start your site using web
+
+14:59.960 --> 15:06.800
+mentions of service and then later on you decide I want to change services or I'm just
+
+15:06.800 --> 15:12.080
+going to handle this myself is there sort of a dead letter problem will web mentions
+
+15:12.080 --> 15:21.600
+show up at the at the old address and it shouldn't be so when somebody wants to reach you that
+
+15:21.600 --> 15:28.560
+is when they do endpoint discovery so they if you would get request for your page and
+
+15:28.560 --> 15:36.560
+parse the HTML and they discover where to send web mentions there pose it for some reason
+
+15:36.560 --> 15:45.160
+they did that and sat on that information for some period of time of course then they
+
+15:45.160 --> 15:51.320
+might that you know they might send it to an old address but that would be that would
+
+15:51.320 --> 15:59.680
+be a non-standard use of the protocol you should be good have I seen a Gregor browser
+
+15:59.680 --> 16:05.480
+is a decentralized kiss browser using some of the peer-to-peer protocols interesting
+
+16:05.480 --> 16:14.920
+I have not I'm going there right now thank you
+
+16:14.920 --> 16:18.720
+somebody points out some things are better done outside of e-max I have built something
+
+16:18.720 --> 16:33.760
+similar at by star dot net you see www dot by hyphen star dot net okay let's go see it
+
+16:33.760 --> 16:38.200
+this is interesting thank you I will definitely take a look yeah so I can say I'm kind of
+
+16:38.200 --> 16:42.840
+on the cusp of saying okay this has been a fun experiment now I need to go code it up
+
+16:42.840 --> 16:51.040
+outside of e-max I like the fact that you know the discussion we were having the question
+
+16:51.040 --> 16:56.600
+about you know am I doing too much in e-max is literally a question that could be asked
+
+16:56.600 --> 17:01.960
+to every single presenter at all the e-max conference other ads because you know the
+
+17:01.960 --> 17:05.400
+whole point of e-max golf is showing what type of stuff you can do in e-max and naturally
+
+17:05.400 --> 17:09.440
+the question is going to follow that is are you just doing too much with e-max and that's
+
+17:09.440 --> 17:15.080
+always great question to take and I think you did spend it late yeah it's the old joke
+
+17:15.080 --> 17:22.640
+right it's a good editor in an awesome operating system yes I will allow you to do the usual
+
+17:22.640 --> 17:30.680
+jokes about e-max I will not allow you to refer to our core enemy that's they who may
+
+17:30.680 --> 17:37.320
+not be named okay fair okay so Michael we do have about five minutes of questions left
+
+17:37.320 --> 17:42.000
+I think you've answered all the questions and I don't see anyone else with a microphone
+
+17:42.000 --> 17:52.520
+on in BBB so we might we might leave it at that if you're okay with this okay well thank
+
+17:52.520 --> 17:56.200
+you so much Michael for taking the time to not only do a presentation for us but also
+
+17:56.200 --> 18:03.560
+for answering the questions in here no thank you all like I say I always learn as much
+
+18:03.560 --> 18:09.560
+as I teach here so great thank you okay amazing all right and for the others I'll hold you
+
+18:09.560 --> 18:13.600
+hostage a little while longer Michael we will be adding into the next talk in about four
+
+18:13.600 --> 18:18.800
+minutes and 30 seconds so we'll put up some music and I'll you'll hear my voice again
+
+18:18.800 --> 18:27.640
+when we are supposed to go live again so see you in a bit everyone and see you Michael
+
+18:27.640 --> 18:38.680
+and we are all fair okay I have to dash see you Michael you are calling music on Jen
+
+18:38.680 --> 18:59.040
+can we put yes thank you
+
+18:59.040 --> 19:16.440
+we volume again now to the original level
+
+19:16.440 --> 19:41.840
+very good
+
+19:41.840 --> 19:56.440
+you know what
+
+19:56.440 --> 20:21.880
+what
+
+20:21.880 --> 20:38.120
+Alright, I'm talking now. Okay, the audio is good. See you guys, see you in about 2 minutes.
+
diff --git a/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt
new file mode 100644
index 00000000..7446a15d
--- /dev/null
+++ b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt
@@ -0,0 +1,43 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:14.080
+Introduction
+
+00:00:14.080 --> 00:01:13.880
+Maintaining a personal website using Org mode
+
+00:01:13.880 --> 00:02:32.040
+Problems with comments and isolation
+
+00:02:32.040 --> 00:03:17.800
+The Indieweb
+
+00:03:17.800 --> 00:05:00.600
+Webmentions
+
+00:05:00.600 --> 00:07:04.160
+Decentralized commenting
+
+00:07:04.160 --> 00:08:48.080
+The publication framework
+
+00:08:48.080 --> 00:09:54.000
+Sending Webmentions
+
+00:09:54.000 --> 00:11:36.840
+The process of publication
+
+00:11:36.840 --> 00:12:31.920
+Defining new link types
+
+00:12:31.920 --> 00:14:07.349
+org-publish-to
+
+00:14:07.349 --> 00:14:46.520
+Sending Webmentions with request.el
+
+00:14:46.520 --> 00:15:51.400
+Summary
+
+00:15:51.400 --> 00:16:34.920
+The future
diff --git a/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt
new file mode 100644
index 00000000..f41a3981
--- /dev/null
+++ b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt
@@ -0,0 +1,1048 @@
+WEBVTT captioned by bhavin192
+
+00:00:00.000 --> 00:00:02.280
+Hey everyone, I'm Michael,
+
+00:00:02.280 --> 00:00:03.640
+and I'm going to be talking about
+
+00:00:03.640 --> 00:00:06.000
+Org mode and the IndieWeb.
+
+00:00:06.000 --> 00:00:08.840
+I am located in the San Francisco Bay Area,
+
+00:00:08.840 --> 00:00:10.321
+where I'm a developer as well as
+
+00:00:10.321 --> 00:00:14.080
+a longtime Emacs user.
+
+00:00:14.080 --> 00:00:17.560
+So, I maintain a personal website using Org mode.
+
+00:00:17.560 --> 00:00:19.080
+If you're watching this talk,
+
+00:00:19.080 --> 00:00:21.560
+I'm going to guess that you probably are too.
+
+00:00:21.560 --> 00:00:24.880
+For anybody who isn't,
+
+00:00:24.880 --> 00:00:28.680
+let me explain exactly what I mean by that.
+
+00:00:28.680 --> 00:00:32.280
+I have a static website. I author the pages
+
+00:00:32.280 --> 00:00:34.000
+in Org mode's markup language,
+
+00:00:34.000 --> 00:00:36.280
+otherwise known as Orgdown.
+
+00:00:36.280 --> 00:00:38.440
+I use the Org export facility
+
+00:00:38.440 --> 00:00:43.760
+to transcode that markup to HTML.
+
+00:00:43.760 --> 00:00:47.000
+And then I just use rsync to push
+
+00:00:47.000 --> 00:00:51.760
+the resulting HTML pages up to a VPS.
+
+00:00:51.760 --> 00:00:52.854
+I like the workflow.
+
+00:00:52.854 --> 00:00:57.840
+It's familiar to me as a coder.
+
+00:00:57.840 --> 00:01:03.960
+I get to use familiar tools like Git and Make.
+
+00:01:03.960 --> 00:01:06.120
+Publishing and then pushing the site
+
+00:01:06.120 --> 00:01:09.800
+to a local test server is just `make`.
+
+00:01:09.800 --> 00:01:13.880
+Pushing it to the live site is just `make prod`.
+
+00:01:13.880 --> 00:01:18.680
+That said, certain problems made themselves apparent
+
+00:01:18.680 --> 00:01:22.080
+with this arrangement pretty quickly.
+
+00:01:22.080 --> 00:01:25.840
+Commenting was one. It's very difficult
+
+00:01:25.840 --> 00:01:28.200
+to support commenting on a static website.
+
+00:01:28.200 --> 00:01:29.501
+I've got no database.
+
+00:01:29.501 --> 00:01:34.120
+I have no real server, and so on.
+
+00:01:34.120 --> 00:01:35.960
+Yes, of course, there is Disqus
+
+00:01:35.960 --> 00:01:37.868
+and other third party services
+
+00:01:37.868 --> 00:01:38.800
+that will do this for you,
+
+00:01:38.800 --> 00:01:43.880
+but I was uncomfortable outsourcing that job.
+
+00:01:43.880 --> 00:01:45.320
+And it was more than just comments.
+
+00:01:45.320 --> 00:01:48.360
+There was a general sense of isolation.
+
+00:01:48.360 --> 00:01:50.680
+There's no connection to places
+
+00:01:50.680 --> 00:01:53.360
+like Reddit, or Mastodon, or Twitter,
+
+00:01:53.360 --> 00:01:56.560
+you know, where all the people are.
+
+00:01:56.560 --> 00:01:59.520
+I guess you can post, then Tweet a link to it.
+
+00:01:59.520 --> 00:02:01.960
+But suppose somebody responds to your Tweet.
+
+00:02:01.960 --> 00:02:05.520
+Now you've got a conversation going on on Twitter
+
+00:02:05.520 --> 00:02:07.640
+that you're a visitor, and
+
+00:02:07.640 --> 00:02:09.960
+that a non-Twitter-using visitor to your site
+
+00:02:09.960 --> 00:02:15.400
+would be completely disconnected from.
+
+00:02:15.400 --> 00:02:19.000
+I am seeing people using Reddit effectively
+
+00:02:19.000 --> 00:02:22.640
+as the comment section for their sites.
+
+00:02:22.640 --> 00:02:24.760
+But unless you've got an audience, you know,
+
+00:02:24.760 --> 00:02:27.720
+the size of Derek's or Amos's,
+
+00:02:27.720 --> 00:02:32.040
+I don't think that's really feasible either.
+
+00:02:32.040 --> 00:02:34.200
+Now, after casting about for some time,
+
+00:02:34.200 --> 00:02:37.680
+I stumbled upon something called the IndieWeb.
+
+00:02:37.680 --> 00:02:39.280
+In their own words, the IndieWeb is
+
+00:02:39.280 --> 00:02:41.960
+a community of independent and personal websites
+
+00:02:41.960 --> 00:02:44.401
+connected by simple standards based on
+
+00:02:44.401 --> 00:02:46.720
+the principles of owning your domain
+
+00:02:46.720 --> 00:02:48.480
+and using it as your primary identity,
+
+00:02:48.480 --> 00:02:50.360
+publishing on your own site,
+
+00:02:50.360 --> 00:02:52.418
+and optionally syndicating elsewhere,
+
+00:02:52.418 --> 00:02:54.320
+and owning your data.
+
+00:02:54.320 --> 00:02:57.680
+I would describe it as a collection of individuals
+
+00:02:57.680 --> 00:03:01.360
+who've chosen to own their own platforms,
+
+00:03:01.360 --> 00:03:05.520
+alongside a loosely specked set of standards
+
+00:03:05.520 --> 00:03:07.480
+that tie those sites together.
+
+00:03:07.480 --> 00:03:09.218
+And it's really those standards
+
+00:03:09.218 --> 00:03:10.640
+that make the IndieWeb
+
+00:03:10.640 --> 00:03:13.120
+more than just a call for everybody
+
+00:03:13.120 --> 00:03:14.735
+to go back to the arts
+
+00:03:14.735 --> 00:03:17.800
+and blog on on their own sites.
+
+00:03:17.800 --> 00:03:19.640
+Now, this presentation isn't going to
+
+00:03:19.640 --> 00:03:21.480
+focus on the IndieWeb as such.
+
+00:03:21.480 --> 00:03:23.360
+It's more about using Org mode
+
+00:03:23.360 --> 00:03:24.640
+to put your site on the IndieWeb.
+
+00:03:24.640 --> 00:03:28.040
+I'm a little limited by time here,
+
+00:03:28.040 --> 00:03:30.351
+so I'm going to focus on
+
+00:03:30.351 --> 00:03:32.080
+just one of those protocols,
+
+00:03:32.080 --> 00:03:33.400
+and that's Webmentions.
+
+00:03:33.400 --> 00:03:35.720
+So, what's a Webmention?
+
+00:03:35.720 --> 00:03:38.520
+Let's begin with the inveterate Alice,
+
+00:03:38.520 --> 00:03:39.468
+who has a website
+
+00:03:39.468 --> 00:03:42.680
+and has posted content to that site.
+
+00:03:42.680 --> 00:03:46.080
+Her old friend Bob comes along,
+
+00:03:46.080 --> 00:03:47.440
+notices that content
+
+00:03:47.440 --> 00:03:49.360
+and wishes to say something about it.
+
+00:03:49.360 --> 00:03:51.468
+He posts to his site
+
+00:03:51.468 --> 00:03:54.920
+and his publication software will,
+
+00:03:54.920 --> 00:03:57.080
+if it supports Webmentions,
+
+00:03:57.080 --> 00:04:00.160
+will notice that he's mentioned Alice's post.
+
+00:04:00.160 --> 00:04:04.320
+At that point, his publication software
+
+00:04:04.320 --> 00:04:07.240
+reaches out to Alice's site,
+
+00:04:07.240 --> 00:04:11.040
+asks for the mentioned document,
+
+00:04:11.040 --> 00:04:12.560
+and will examine it to see
+
+00:04:12.560 --> 00:04:15.600
+if Alice advertises an endpoint at her site
+
+00:04:15.600 --> 00:04:18.160
+capable of receiving Webmentions.
+
+00:04:18.160 --> 00:04:19.600
+In this case, it does.
+
+00:04:19.600 --> 00:04:23.480
+So, Bob's publishing software does it.
+
+00:04:23.480 --> 00:04:24.468
+At the end of the day,
+
+00:04:24.468 --> 00:04:26.000
+a Webmention is really just
+
+00:04:26.000 --> 00:04:30.360
+an HTTP post request with two parameters,
+
+00:04:30.360 --> 00:04:33.000
+a source and a target.
+
+00:04:33.000 --> 00:04:36.818
+On receipt, Alice's server will
+
+00:04:36.818 --> 00:04:39.400
+reach out to Bob's site,
+
+00:04:39.400 --> 00:04:43.280
+request the document that contains the mention,
+
+00:04:43.280 --> 00:04:45.920
+and validate it, decide whether or not
+
+00:04:45.920 --> 00:04:48.120
+she wants to accept the Webmention.
+
+00:04:48.120 --> 00:04:50.960
+In this case, it's legit, it's accepted,
+
+00:04:50.960 --> 00:04:54.000
+and Alice chooses to make a note,
+
+00:04:54.000 --> 00:04:56.760
+to update her content,
+
+00:04:56.760 --> 00:04:58.720
+to make a note of the fact
+
+00:04:58.720 --> 00:05:00.600
+that it was mentioned by Bob.
+
+00:05:00.600 --> 00:05:01.960
+Now a couple of things to note here.
+
+00:05:01.960 --> 00:05:03.480
+The first is that this is effectively
+
+00:05:03.480 --> 00:05:04.960
+decentralized commenting.
+
+00:05:04.960 --> 00:05:07.440
+Both parties own their content,
+
+00:05:07.440 --> 00:05:09.080
+and there's no third party involved,
+
+00:05:09.080 --> 00:05:13.640
+trusted or otherwise.
+
+00:05:13.640 --> 00:05:16.080
+Now at this point, you might object that, well,
+
+00:05:16.080 --> 00:05:18.720
+as the owner of a statically generated site,
+
+00:05:18.720 --> 00:05:21.600
+I have essentially none of the infrastructure
+
+00:05:21.600 --> 00:05:22.920
+I need to implement this.
+
+00:05:22.920 --> 00:05:27.120
+I have no server above and beyond Apache.
+
+00:05:27.120 --> 00:05:30.600
+I can't really…, I have no database.
+
+00:05:30.600 --> 00:05:33.680
+I guess you could send Webmentions with curl,
+
+00:05:33.680 --> 00:05:37.040
+but now to do Webmention endpoint discovery,
+
+00:05:37.040 --> 00:05:39.640
+you're going to be parsing arbitrary HTML.
+
+00:05:39.640 --> 00:05:41.120
+It's a lot of work.
+
+00:05:41.120 --> 00:05:45.080
+That's okay. There are sites out there
+
+00:05:45.080 --> 00:05:48.840
+that offer Webmentions as a service.
+
+00:05:48.840 --> 00:05:51.000
+So, let's take a look at how that goes.
+
+00:05:51.000 --> 00:05:54.920
+We return to our original example.
+
+00:05:54.920 --> 00:05:57.840
+Alice continues to advertise an endpoint
+
+00:05:57.840 --> 00:06:00.320
+capable of receiving Webmentions,
+
+00:06:00.320 --> 00:06:01.840
+but it's no longer on her site.
+
+00:06:01.840 --> 00:06:03.840
+It's at webmention.io.
+
+00:06:03.840 --> 00:06:08.000
+Bob is essentially in the same position,
+
+00:06:08.000 --> 00:06:09.920
+but he now has in his world
+
+00:06:09.920 --> 00:06:13.920
+a third party site called Telegraph.
+
+00:06:13.920 --> 00:06:16.040
+When Bob wants to publish,
+
+00:06:16.040 --> 00:06:19.760
+he no longer needs to go through all the work
+
+00:06:19.760 --> 00:06:21.760
+of sending Webmention,
+
+00:06:21.760 --> 00:06:25.280
+and of carrying out Webmention endpoint discovery.
+
+00:06:25.280 --> 00:06:27.880
+He sends one API request to Telegraph,
+
+00:06:27.880 --> 00:06:31.120
+effectively saying, please send a Webmention for me.
+
+00:06:31.120 --> 00:06:36.640
+Asynchronously, telegraph.io is going to
+
+00:06:36.640 --> 00:06:38.718
+retrieve Alice's post,
+
+00:06:38.718 --> 00:06:41.320
+do Webmention endpoint discovery,
+
+00:06:41.320 --> 00:06:45.400
+and send the Webmention on Bob's behalf.
+
+00:06:45.400 --> 00:06:48.280
+Except this time he's sending it to webmention.io.
+
+00:06:48.280 --> 00:06:53.080
+Now, at some arbitrary point in the future,
+
+00:06:53.080 --> 00:06:55.800
+Alice can ask webmention.io,
+
+00:06:55.800 --> 00:06:57.720
+"Hey, do I have any new Webmentions?"
+
+00:06:57.720 --> 00:07:00.480
+And if she does, she may choose
+
+00:07:00.480 --> 00:07:04.160
+to update her content and publish.
+
+00:07:04.160 --> 00:07:07.240
+Okay, so let's code this up.
+
+00:07:07.240 --> 00:07:09.120
+Now, I'm recording this talk
+
+00:07:09.120 --> 00:07:10.960
+about a month ahead of time
+
+00:07:10.960 --> 00:07:12.520
+and I haven't been able to put together
+
+00:07:12.520 --> 00:07:13.920
+a little demo project.
+
+00:07:13.920 --> 00:07:16.600
+Hopefully, I can hack something together
+
+00:07:16.600 --> 00:07:18.920
+before this video streams.
+
+00:07:18.920 --> 00:07:20.920
+But in the meantime,
+
+00:07:20.920 --> 00:07:22.960
+I'd like to imagine a little test site.
+
+00:07:22.960 --> 00:07:25.218
+It has a single page,
+
+00:07:25.218 --> 00:07:28.880
+maybe we'll call it index.org,
+
+00:07:28.880 --> 00:07:30.520
+and we're going to publish it.
+
+00:07:30.520 --> 00:07:32.600
+We're going to export it to
+
+00:07:32.600 --> 00:07:35.840
+a subdirectory of our project directory,
+
+00:07:35.840 --> 00:07:39.080
+simply called www.
+
+00:07:39.080 --> 00:07:44.800
+So, the entry point to the Org export system
+
+00:07:44.800 --> 00:07:46.640
+is the function org-publish,
+
+00:07:46.640 --> 00:07:49.960
+whose docstring helpfully says,
+
+00:07:49.960 --> 00:07:52.240
+it publishes all projects.
+
+00:07:52.240 --> 00:07:56.760
+The set of all projects is defined by
+
+00:07:56.760 --> 00:07:59.520
+the variable `org-publish-project-alist`,
+
+00:07:59.520 --> 00:08:02.320
+which is a very flexible association list
+
+00:08:02.320 --> 00:08:03.868
+that lets you define
+
+00:08:03.868 --> 00:08:05.520
+what files are in your project,
+
+00:08:05.520 --> 00:08:07.000
+how you wish to export them,
+
+00:08:07.000 --> 00:08:10.320
+where they're going to go, etc, etc, etc.
+
+00:08:10.320 --> 00:08:13.840
+So great. This is actually pretty straightforward.
+
+00:08:13.840 --> 00:08:15.880
+We just give ourselves a little Elisp file
+
+00:08:15.880 --> 00:08:17.040
+and a single function.
+
+00:08:17.040 --> 00:08:18.640
+I'll call it publish,
+
+00:08:18.640 --> 00:08:22.360
+and all it will do is define
+
+00:08:22.360 --> 00:08:25.000
+`org-publish-project-alist`
+
+00:08:25.000 --> 00:08:26.840
+and invoke `org-publish-all`.
+
+00:08:26.840 --> 00:08:31.880
+At that point, exporting is a one-liner.
+
+00:08:31.880 --> 00:08:35.560
+We just invoke Emacs, load up our site.el file,
+
+00:08:35.560 --> 00:08:37.280
+and invoke the publish function.
+
+00:08:37.280 --> 00:08:43.668
+And if we want to publish to the live server,
+
+00:08:43.668 --> 00:08:45.520
+that's just another one-liner of ours.
+
+00:08:45.520 --> 00:08:48.080
+So, that's the publication framework.
+
+00:08:48.080 --> 00:08:51.280
+Now, let's take a look at sending Webmentions.
+
+00:08:51.280 --> 00:08:54.400
+The idea is that we're going to
+
+00:08:54.400 --> 00:08:57.240
+get our fingers into the publication process.
+
+00:08:57.240 --> 00:09:01.000
+Note when we see a Webmention in
+
+00:09:01.000 --> 00:09:04.000
+the process of exporting our Orgdown,
+
+00:09:04.000 --> 00:09:07.840
+and write it out to disk for sending later on.
+
+00:09:07.840 --> 00:09:11.520
+Now, I didn't want to send a Webmention
+
+00:09:11.520 --> 00:09:13.040
+for every single link in the post.
+
+00:09:13.040 --> 00:09:14.960
+I wanted this to be an intentional choice.
+
+00:09:14.960 --> 00:09:16.960
+And it turns out there are
+
+00:09:16.960 --> 00:09:19.120
+different sorts of Webmentions
+
+00:09:19.120 --> 00:09:20.160
+you can make on a page.
+
+00:09:20.160 --> 00:09:22.520
+For instance, if you add
+
+00:09:22.520 --> 00:09:26.800
+the CSS class u-in-reply-to to your link,
+
+00:09:26.800 --> 00:09:28.635
+the recipient will
+
+00:09:28.635 --> 00:09:30.920
+interpret this Webmention as a reply.
+
+00:09:30.920 --> 00:09:33.440
+There are similar CSS classes
+
+00:09:33.440 --> 00:09:37.240
+for likes, reposts, and generalized mentions.
+
+00:09:37.240 --> 00:09:42.800
+When the recipient gets your Webmention,
+
+00:09:42.800 --> 00:09:45.640
+if they want to know who's talking to them,
+
+00:09:45.640 --> 00:09:47.960
+they need to parse your page
+
+00:09:47.960 --> 00:09:51.800
+and look for DOM elements with certain CSS classes
+
+00:09:51.800 --> 00:09:54.000
+defined by the protocol as well.
+
+00:09:54.000 --> 00:09:57.520
+I'm a visual thinker,
+
+00:09:57.520 --> 00:10:00.680
+so I kind of drew out the process of publication,
+
+00:10:00.680 --> 00:10:03.320
+and exactly where we're going to
+
+00:10:03.320 --> 00:10:05.160
+get our fingers into this.
+
+00:10:05.160 --> 00:10:07.320
+So, this is me invoking make,
+
+00:10:07.320 --> 00:10:09.800
+which of course fires up Emacs.
+
+00:10:09.800 --> 00:10:14.440
+Just as before, my publish function will define
+
+00:10:14.440 --> 00:10:17.920
+`org-publish-project-alist` with one difference.
+
+00:10:17.920 --> 00:10:21.040
+There is an attribute,
+
+00:10:21.040 --> 00:10:23.520
+a property in the list called `publishing-function`.
+
+00:10:23.520 --> 00:10:26.280
+We're going to need to customize that.
+
+00:10:26.280 --> 00:10:28.960
+As usual, we then call…,
+
+00:10:28.960 --> 00:10:31.960
+we kick off the process by calling `org-publish-all`.
+
+00:10:31.960 --> 00:10:36.468
+org-publish-all will invoke
+
+00:10:36.468 --> 00:10:37.320
+your publishing function
+
+00:10:37.320 --> 00:10:40.560
+for each page, and it will hand to
+
+00:10:40.560 --> 00:10:42.520
+your publishing function for each page.
+
+00:10:42.520 --> 00:10:45.080
+The name of the file you're publishing,
+
+00:10:45.080 --> 00:10:50.680
+where it's going, and a parameter entitled plist.
+
+00:10:50.680 --> 00:10:53.200
+This is not super well documented.
+
+00:10:53.200 --> 00:10:55.280
+There are points in the docs
+
+00:10:55.280 --> 00:10:57.440
+that refer to this as a communication channel.
+
+00:10:57.440 --> 00:11:01.800
+What I discovered by simply reading the code was that
+
+00:11:01.800 --> 00:11:04.560
+it's a property list that is initialized
+
+00:11:04.560 --> 00:11:09.680
+for each invocation of your publication function.
+
+00:11:09.680 --> 00:11:13.560
+The initial properties are
+
+00:11:13.560 --> 00:11:16.200
+inherited from your project,
+
+00:11:16.200 --> 00:11:20.801
+but you are free to add properties as you go
+
+00:11:20.801 --> 00:11:23.880
+to communicate between different portions
+
+00:11:23.880 --> 00:11:25.520
+of the publication process.
+
+00:11:25.520 --> 00:11:30.400
+My publication function really does one thing,
+
+00:11:30.400 --> 00:11:34.080
+and that's simply swap out the HTML template
+
+00:11:34.080 --> 00:11:36.840
+that's passed to `org-publish-to`.
+
+00:11:36.840 --> 00:11:43.696
+Now, in order to take note of
+
+00:11:43.696 --> 00:11:45.680
+each Webmention that I send,
+
+00:11:45.680 --> 00:11:47.585
+I took advantage of another
+
+00:11:47.585 --> 00:11:49.880
+Org mode extension point
+
+00:11:49.880 --> 00:11:52.720
+called defining new link types.
+
+00:11:52.720 --> 00:11:54.851
+Here you can see
+
+00:11:54.851 --> 00:11:58.560
+I've created a new link type called reply.
+
+00:11:58.560 --> 00:12:01.960
+One of the attributes that you can attach to this
+
+00:12:01.960 --> 00:12:06.160
+is the function that is used to export your link.
+
+00:12:06.160 --> 00:12:08.562
+I've elided the code for
+
+00:12:08.562 --> 00:12:10.720
+mentions, likes, and reposts.
+
+00:12:10.720 --> 00:12:13.520
+If you look at my export function,
+
+00:12:13.520 --> 00:12:16.280
+you can see that it ultimately yields
+
+00:12:16.280 --> 00:12:19.440
+the appropriate HTML for this link.
+
+00:12:19.440 --> 00:12:22.320
+Before that, it calls a little helper function
+
+00:12:22.320 --> 00:12:24.518
+that will pull out the actual
+
+00:12:24.518 --> 00:12:26.160
+target URL of the link
+
+00:12:26.160 --> 00:12:28.680
+and shove it into this communication channel
+
+00:12:28.680 --> 00:12:31.920
+under the property name `sp1ff/mentions`.
+
+00:12:31.920 --> 00:12:37.360
+So, `org-publish-to` is really the workhorse
+
+00:12:37.360 --> 00:12:40.240
+of the publication process.
+
+00:12:40.240 --> 00:12:42.120
+The first thing it's going to do is
+
+00:12:42.120 --> 00:12:47.400
+transcode from the parsed Orgdown,
+
+00:12:47.400 --> 00:12:50.320
+which is an intermediate representation
+
+00:12:50.320 --> 00:12:53.200
+known as Org elements, to HTML.
+
+00:12:53.200 --> 00:12:57.680
+In particular, for every one of my new links
+
+00:12:57.680 --> 00:13:00.440
+that I'm using to mark Webmentions,
+
+00:13:00.440 --> 00:13:04.040
+it's going to invoke my little export function.
+
+00:13:04.040 --> 00:13:06.600
+And so as we work our way through the post,
+
+00:13:06.600 --> 00:13:09.040
+I'm going to accumulate all the Webmentions
+
+00:13:09.040 --> 00:13:10.920
+that I've made in the property list.
+
+00:13:10.920 --> 00:13:14.360
+The second step is to actually render
+
+00:13:14.360 --> 00:13:16.560
+the final HTML document,
+
+00:13:16.560 --> 00:13:18.800
+and that's where my specialized template comes in.
+
+00:13:18.800 --> 00:13:21.480
+All I do there is, use it to get
+
+00:13:21.480 --> 00:13:24.920
+my authorship information into the page.
+
+00:13:24.920 --> 00:13:29.000
+And then the last step is called finalization.
+
+00:13:29.000 --> 00:13:32.320
+At this point, we have the rendered HTML document,
+
+00:13:32.320 --> 00:13:35.720
+and Org mode gives you an extension point here,
+
+00:13:35.720 --> 00:13:38.080
+where you can do arbitrary post-processing
+
+00:13:38.080 --> 00:13:39.200
+on that document.
+
+00:13:39.200 --> 00:13:42.160
+I arguably abuse it to retrieve
+
+00:13:42.160 --> 00:13:44.440
+all the Webmentions I've made
+
+00:13:44.440 --> 00:13:46.280
+out of the communication channel
+
+00:13:46.280 --> 00:13:47.920
+and write them to disk.
+
+00:13:47.920 --> 00:13:54.840
+At this point, when we type make,
+
+00:13:54.840 --> 00:13:59.160
+we wind up with the rendered HTML
+
+00:13:59.160 --> 00:14:01.080
+for our Orgdown document,
+
+00:14:01.080 --> 00:14:03.880
+along with a little text file
+
+00:14:03.880 --> 00:14:06.040
+in which we've recorded all the Webmentions
+
+00:14:06.040 --> 00:14:07.349
+that need to be sent.
+
+00:14:07.349 --> 00:14:11.800
+The next step is to send said Webmentions.
+
+00:14:11.800 --> 00:14:15.560
+This is surprisingly easy in Emacs Lisp.
+
+00:14:15.560 --> 00:14:17.360
+This is my actual implementation.
+
+00:14:17.360 --> 00:14:22.360
+I use the request.el package to talk to Telegraph.
+
+00:14:22.360 --> 00:14:26.920
+And at this point, we really don't need to
+
+00:14:26.920 --> 00:14:30.640
+add a lot to our little site Elisp file.
+
+00:14:30.640 --> 00:14:34.320
+I sketched out a `send-webmentions` implementation
+
+00:14:34.320 --> 00:14:36.160
+that just goes through in a loop
+
+00:14:36.160 --> 00:14:39.000
+and calls my send-webmention function.
+
+00:14:39.000 --> 00:14:42.640
+And now publication becomes a two-step process.
+
+00:14:42.640 --> 00:14:46.520
+First, the org-publish, then sending Webmentions.
+
+00:14:46.520 --> 00:14:51.418
+Okay, so I realize this has been
+
+00:14:51.418 --> 00:14:52.800
+a bit of a whirlwind.
+
+00:14:52.800 --> 00:14:55.240
+So, where are we now?
+
+00:14:55.240 --> 00:15:00.600
+We have a sample site that we can publish
+
+00:15:00.600 --> 00:15:02.400
+and have sent Webmentions.
+
+00:15:02.400 --> 00:15:05.480
+And we've done it with just Emacs, Org mode,
+
+00:15:05.480 --> 00:15:07.080
+a little Lisp, and a make file.
+
+00:15:07.080 --> 00:15:09.080
+If you'd like to see more,
+
+00:15:09.080 --> 00:15:11.680
+I've put my library up on GitHub.
+
+00:15:11.680 --> 00:15:13.754
+It has logic for both
+
+00:15:13.754 --> 00:15:15.560
+sending and receiving Webmentions
+
+00:15:15.560 --> 00:15:16.960
+as well as something
+
+00:15:16.960 --> 00:15:19.120
+that on the IndieWeb is called POSSE,
+
+00:15:19.120 --> 00:15:22.400
+which is an acronym standing for
+
+00:15:22.400 --> 00:15:25.400
+Publish (on your) Own Site, Syndicate Elsewhere.
+
+00:15:25.400 --> 00:15:27.818
+What that means is that
+
+00:15:27.818 --> 00:15:31.400
+you turn the publication step
+
+00:15:31.400 --> 00:15:35.400
+from merely publishing new content to your site
+
+00:15:35.400 --> 00:15:36.920
+to also replicating it to places
+
+00:15:36.920 --> 00:15:39.160
+like Twitter and Facebook and so forth.
+
+00:15:39.160 --> 00:15:44.120
+And also when people like, comment,
+
+00:15:44.120 --> 00:15:45.960
+and retweet your content,
+
+00:15:45.960 --> 00:15:47.680
+that gets fed back to your site,
+
+00:15:47.680 --> 00:15:51.400
+where you can display it as comments.
+
+00:15:51.400 --> 00:15:52.600
+In terms of the future,
+
+00:15:52.600 --> 00:15:54.520
+I feel like I'm at a decision point.
+
+00:15:54.520 --> 00:15:58.000
+Org mode is admirably flexible,
+
+00:15:58.000 --> 00:16:00.320
+and I'm confident that I can continue to
+
+00:16:00.320 --> 00:16:02.560
+add support for IndieWeb protocols.
+
+00:16:02.560 --> 00:16:05.440
+On the other hand, it is so flexible
+
+00:16:05.440 --> 00:16:07.880
+that the process of figuring out
+
+00:16:07.880 --> 00:16:10.680
+which extension points to use in any situation
+
+00:16:10.680 --> 00:16:12.000
+is very challenging.
+
+00:16:12.000 --> 00:16:14.800
+When I started down this path,
+
+00:16:14.800 --> 00:16:17.840
+my mindset was keep it simple
+
+00:16:17.840 --> 00:16:20.400
+and let's just see how far I could get with Org mode.
+
+00:16:20.400 --> 00:16:23.160
+And I feel like I might be bumping up
+
+00:16:23.160 --> 00:16:25.800
+against the limitations of that approach now.
+
+00:16:25.800 --> 00:16:34.920
+Thank you very much.
diff --git a/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.vtt b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.vtt
new file mode 100644
index 00000000..dd1a46d4
--- /dev/null
+++ b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.vtt
@@ -0,0 +1,1019 @@
+WEBVTT
+
+00:00.000 --> 00:01.800
+Oh, it's already being recorded.
+
+00:01.800 --> 00:02.800
+Great.
+
+00:02.800 --> 00:03.800
+So, hi, Alfred.
+
+00:03.800 --> 00:04.800
+How are you doing?
+
+00:04.800 --> 00:05.800
+I'm doing great.
+
+00:05.800 --> 00:06.800
+Thank you.
+
+00:06.800 --> 00:07.800
+It's a bit dark outside.
+
+00:07.800 --> 00:09.840
+I understand it's morning for most of you.
+
+00:09.840 --> 00:12.000
+Yes, well, not for me.
+
+00:12.000 --> 00:16.280
+I'm also in Europe, and I can tell you it's going to get dark pretty damn quickly.
+
+00:16.280 --> 00:19.000
+So, thank you so much for your talk.
+
+00:19.000 --> 00:22.440
+I didn't get to ask you the question before, but do you have access to the pads and the
+
+00:22.440 --> 00:25.000
+questions?
+
+00:25.000 --> 00:26.520
+I do have access to it.
+
+00:26.520 --> 00:30.520
+I'll just open it up.
+
+00:30.520 --> 00:33.520
+I'm not sure Sasha had given it to me, no.
+
+00:33.520 --> 00:35.520
+Sorry, what was the question?
+
+00:35.520 --> 00:38.520
+Could you post a link to it in the chat?
+
+00:38.520 --> 00:39.520
+I can give you a link.
+
+00:39.520 --> 00:40.520
+You can press.
+
+00:40.520 --> 00:45.480
+I'm pretty much getting the chat, so it should appear on the left, but in the meantime, if
+
+00:45.480 --> 00:49.480
+you want, I can just ask you the question, and you can maybe, whilst you do the little
+
+00:49.480 --> 00:54.520
+thing to open the pad, we can actually start answering one of the questions.
+
+00:54.520 --> 00:56.520
+Do you mind if I read you one?
+
+00:56.520 --> 00:58.520
+Yeah, go ahead.
+
+00:58.520 --> 00:59.520
+Sure.
+
+00:59.520 --> 01:02.720
+So the first question that we had was, it'd be interesting if you explained why WeChat
+
+01:02.720 --> 01:04.440
+is a necessity for you.
+
+01:04.440 --> 01:07.760
+Outside China, most people have no reason to use it at all.
+
+01:07.760 --> 01:11.520
+So can you actually give up on this?
+
+01:11.520 --> 01:19.520
+My utility for WeChat is basically, I've got to have calls every morning, so my manager
+
+01:19.520 --> 01:20.520
+has to use the tool.
+
+01:20.520 --> 01:23.520
+He's not a huge fan of it either.
+
+01:23.520 --> 01:28.520
+It's company policy, and there's plenty of sharing that has to go through that.
+
+01:28.520 --> 01:37.520
+So it's kind of all, since it's the tool that's used by most companies in China, it's kind
+
+01:37.520 --> 01:39.520
+of a tool that you have to work around.
+
+01:39.520 --> 01:42.520
+Now, most people know this.
+
+01:42.520 --> 01:49.520
+WeChat is a privacy nightmare, and as I touched on during my talk, it's also just a nightmare
+
+01:49.520 --> 01:51.520
+in general to work around.
+
+01:51.520 --> 01:57.520
+It's interesting to try and find ways to work around it or to minimize its impact on my
+
+01:57.520 --> 01:59.520
+life as much as possible.
+
+01:59.520 --> 02:02.520
+So strictly speaking, I don't need to use it, obviously.
+
+02:02.520 --> 02:14.520
+Functions that it has can be used by other software, but yeah, that's most of it.
+
+02:14.520 --> 02:15.520
+Okay, great.
+
+02:15.520 --> 02:16.520
+Also, I'm really sorry.
+
+02:16.520 --> 02:19.520
+Apparently, my audio seems to be crackling a little bit.
+
+02:19.520 --> 02:23.520
+I will address this as soon as we're finished with this talk, but there isn't all that much
+
+02:23.520 --> 02:24.520
+I can do right now.
+
+02:24.520 --> 02:25.520
+So sorry, people.
+
+02:25.520 --> 02:28.520
+You'll have to deal with it for a little while.
+
+02:28.520 --> 02:30.520
+Okay, so next question.
+
+02:30.520 --> 02:33.520
+There's a question that is actually dear to my heart.
+
+02:33.520 --> 02:36.520
+I've looked at CRD.er for collaborative real-time editing.
+
+02:36.520 --> 02:39.520
+Do you actually know what it is?
+
+02:39.520 --> 02:42.520
+I hadn't looked at it, no.
+
+02:42.520 --> 02:51.520
+For me, collaborative is less important because most of my work is just like versions.
+
+02:51.520 --> 02:57.520
+So I have a version of a script that I send off to my editor, and we don't work on it
+
+02:57.520 --> 02:58.520
+together.
+
+02:58.520 --> 03:08.520
+So that's kind of been less of an important part for my workflow, but it is interesting.
+
+03:08.520 --> 03:10.520
+I'll have to take a look at it.
+
+03:10.520 --> 03:16.520
+It used to be a bigger part of my workflow when I was a student.
+
+03:16.520 --> 03:20.520
+So it's definitely interesting to look into, but unfortunately, I don't have much to say
+
+03:20.520 --> 03:23.520
+about it.
+
+03:23.520 --> 03:25.520
+Yeah, but you're fine.
+
+03:25.520 --> 03:28.520
+The reason is that I hope I don't have too much now.
+
+03:28.520 --> 03:31.520
+Alfred, can you tell me, am I cutting off a lot when I'm talking?
+
+03:31.520 --> 03:32.520
+Yeah, it's pretty bad.
+
+03:32.520 --> 03:38.520
+I thought it was my internet connection, but it's not great.
+
+03:38.520 --> 03:40.520
+You know what?
+
+03:40.520 --> 03:44.520
+What we'll do for the moment is that we'll stick to the audio simply.
+
+03:44.520 --> 03:48.520
+Can you still hear me right now?
+
+03:48.520 --> 03:51.520
+Yeah, I can hear you a little bit better.
+
+03:51.520 --> 03:52.520
+Okay, sure.
+
+03:52.520 --> 03:54.520
+I'll put up my webcam like this.
+
+03:54.520 --> 03:55.520
+You know what?
+
+03:55.520 --> 03:57.520
+We just care about you, so you'll have to be solid on the scene.
+
+03:57.520 --> 04:01.520
+The reason I was asking you about CRDT, is it better now?
+
+04:01.520 --> 04:03.520
+Can you just confirm the audio is better?
+
+04:03.520 --> 04:05.520
+Yeah, the audio is much better.
+
+04:05.520 --> 04:06.520
+Cool, thank you.
+
+04:06.520 --> 04:08.520
+I'm so happy to hear this.
+
+04:08.520 --> 04:13.520
+The reason we're mentioning CRDT is that it's actually pretty great.
+
+04:13.520 --> 04:19.520
+A lot of people think about collaborative editing, and they tend to think about Google Doc
+
+04:19.520 --> 04:25.520
+or any kind of proprietary solution, but CRDT is kind of broaching the gap
+
+04:25.520 --> 04:29.520
+to what you can do with multiple people using Emacs.
+
+04:29.520 --> 04:33.520
+Now, I'm talking about this because I've worked with Shantan Hong,
+
+04:33.520 --> 04:37.520
+who is the mentor of CRDT, and we've worked a little bit on it,
+
+04:37.520 --> 04:42.520
+and they are still infuriating problems with it, especially making it secure
+
+04:42.520 --> 04:45.520
+and all this jazzy nonsense.
+
+04:45.520 --> 04:51.520
+But I do recommend looking into it because it would make it much easier to work with other people.
+
+04:51.520 --> 04:58.520
+All right, now that I am not lagging anymore, do you have the pad in front of you?
+
+04:58.520 --> 04:59.520
+I do.
+
+04:59.520 --> 05:01.520
+Do you want me to answer questions directly?
+
+05:01.520 --> 05:04.520
+Yes, that might be best.
+
+05:04.520 --> 05:09.520
+I kind of like to work with the little hells in the background to make sure that I can...
+
+05:09.520 --> 05:11.520
+All right, I'll leave you to it.
+
+05:11.520 --> 05:17.520
+I'll answer the question about org-mode files and sharing, which I've encountered.
+
+05:17.520 --> 05:24.520
+I've kind of had a whole issue starting out with, well, I've started working with org-mode files,
+
+05:24.520 --> 05:27.520
+and now I've got to figure out what do I do with them.
+
+05:27.520 --> 05:32.520
+So my first instinct was I'll just share the org-mode file directly,
+
+05:32.520 --> 05:41.520
+which as some people might have figured out, if they've tried, is not very successful with normal people.
+
+05:41.520 --> 05:48.520
+I've also tried exporting it to docx or to ODT, but that's problematic because you have, well,
+
+05:48.520 --> 05:51.520
+plenty of standards in ODT which don't transfer well.
+
+05:51.520 --> 05:59.520
+So for example, by default, the ODT kind of adopts, what's it called, a latex-like structure.
+
+05:59.520 --> 06:08.520
+So it's like 1.1.1, which isn't optimal for writing and sharing documents, at least in the way that I write them.
+
+06:08.520 --> 06:15.520
+So what I've settled for is for now just not sharing the org directly.
+
+06:15.520 --> 06:25.520
+I wanted to be able to do that through GitHub or GitLab, but it's a bit too much of a hassle to ask people to create an account there.
+
+06:25.520 --> 06:34.520
+And I've just created some export profiles for my ODT documents, which sorts out that problem
+
+06:34.520 --> 06:40.520
+and allows me to just share that through that and kind of bypass org-mode files for now.
+
+06:40.520 --> 06:45.520
+So unfortunately, I kind of am not able to stay 100% org.
+
+06:45.520 --> 06:53.520
+My plan on the long term is to have it go up on a website, so kind of make a work wiki,
+
+06:53.520 --> 06:59.520
+which will allow me to link back to some research documents in the script.
+
+06:59.520 --> 07:12.520
+So that's the long term plan, and that'll be built with org-mode documents, so with OX Hugo and all that kind of thing.
+
+07:12.520 --> 07:15.520
+But yeah, that's most of it.
+
+07:15.520 --> 07:21.520
+Pandoc for incoming and outgoing docs, repeating conversions.
+
+07:21.520 --> 07:28.520
+So I do use Pandoc for outgoing docs, as I just said.
+
+07:28.520 --> 07:32.520
+I found some issues with document quality.
+
+07:32.520 --> 07:43.520
+So as I said, layouts are kind of wonky, but that's possible to work through if you go into the settings
+
+07:43.520 --> 07:49.520
+and adjust basically to how you want it to look like.
+
+07:49.520 --> 07:54.520
+And for incoming docs, so that's a bit more of a hassle.
+
+07:54.520 --> 08:02.520
+My plan for this talk was to have it a bit more ready, but I've got this integration for org-ic,
+
+08:02.520 --> 08:10.520
+org-apple-pages documents, that kind of thing.
+
+08:10.520 --> 08:22.520
+So that's often the documents that I get from my colleagues, and I found a way to transfer them into org documents.
+
+08:22.520 --> 08:29.520
+I did that kind of quickly, so I don't think I'm quite ready to share exactly how it went,
+
+08:29.520 --> 08:34.520
+but I'm planning on doing some documentation around that.
+
+08:34.520 --> 08:40.520
+But yeah, basically the gist of it is, I don't find it a huge issue.
+
+08:40.520 --> 08:52.520
+I do use other tools other than just Pandoc to complement that, because otherwise, yes, I wouldn't be able to use that for incoming and outgoing docs,
+
+08:52.520 --> 08:56.520
+and I'd have to copy and paste that. Yes?
+
+08:56.520 --> 09:00.520
+Sorry, I mispress my talking to production button. Don't mind me.
+
+09:00.520 --> 09:02.520
+No worries.
+
+09:02.520 --> 09:13.520
+Begin on Emacs again. Welcome. Yeah, that's an issue I've got as well.
+
+09:13.520 --> 09:14.520
+Let's take your time.
+
+09:14.520 --> 09:24.520
+So Alfred, what we're probably going to do soon is that, as we've probably told you in the opening remarks, we will be letting people in.
+
+09:24.520 --> 09:37.520
+So right now we are in the room with Alfred on BBB, BigBlueButton, and we have now opened the session so that people can join and ask questions with their voice rather than having to type them out.
+
+09:37.520 --> 09:40.520
+And we have about 10 more minutes until we need to move on to the next talk.
+
+09:40.520 --> 09:51.520
+So normally, if you go to the talk page or all the areas that Sasha pointed out earlier, you should be able to find the link to the room and join us to ask questions directly to Alfred.
+
+09:51.520 --> 09:56.520
+And Alfred, in the meantime, I don't think we have any more questions for now.
+
+09:56.520 --> 10:01.520
+You have the questions about beginning on Emacs that is now finished, if you want to take this one in the meantime.
+
+10:01.520 --> 10:08.520
+Yeah. And so the comments and all that, I'll go through the notes again once I've got a bit more time.
+
+10:08.520 --> 10:16.520
+It's been a bit of a hectic day and put some more references in.
+
+10:16.520 --> 10:21.520
+So what was your moment when you started to work in Emacs instead of config editing?
+
+10:21.520 --> 10:33.520
+Interesting. So basically, as I hinted at in my talk, I did spend a lot of time this summer just editing my configs.
+
+10:33.520 --> 10:50.520
+And I kind of had the click, the moment where, oh, I really need to stop doing just that after I had editing, well, text editing workflow that I was happy with.
+
+10:50.520 --> 10:56.520
+So I think it's possible to just jump into doing Emacs without editing the config at all.
+
+10:56.520 --> 10:58.520
+That's not the way that I work.
+
+10:58.520 --> 11:09.520
+But I think that, yeah, being able to not be too frustrated in like figuring out how to take notes, like the Space NMT in Doom Emacs,
+
+11:09.520 --> 11:18.520
+just creating an org capture templates or using an org capture templates and realizing, all right, I can just, any config idea that I have,
+
+11:18.520 --> 11:28.520
+I can put off to later and continue focusing on this work that I have right in front of me.
+
+11:28.520 --> 11:34.520
+I think that was kind of a moment where I realized, all right, I don't need to edit this config all day.
+
+11:34.520 --> 11:42.520
+And I like to edit my config for like a whole month, but obviously that's not quite feasible.
+
+11:42.520 --> 11:51.520
+I mean, working on a month on your config, you know, some of us have been working on our config for the better part of the last 30 years or 10 years or 20 years, depending on your age.
+
+11:51.520 --> 11:54.520
+So do not worry, you will find the time to work on your config.
+
+11:54.520 --> 11:57.520
+Emacs is just about editing your config.
+
+11:57.520 --> 11:59.520
+So before you continue, I just want to let people know.
+
+11:59.520 --> 12:05.520
+So we have opened up the question and answer room and now people can join and ask questions.
+
+12:05.520 --> 12:13.520
+But I see for now, we mostly have people wanting to listen in, but that's also because as soon as we'll need to move the stream to the next talk,
+
+12:13.520 --> 12:17.520
+you'll still be able to join the BBB room and it will still be open.
+
+12:17.520 --> 12:25.520
+So that if you want to ask questions to Alfred off stream, be careful, it will still be recorded and still be posted on the website afterwards.
+
+12:25.520 --> 12:26.520
+Well, you can do so.
+
+12:26.520 --> 12:30.520
+And as long as Alfred is available, he can answer your questions.
+
+12:30.520 --> 12:41.520
+And otherwise, if you don't want to join, you can still type your questions in a pad and I'm sure we'll find the time maybe after Christmas or whenever we are all a little more available to answer all the questions that we have.
+
+12:41.520 --> 12:45.520
+All right. So sorry, Alfred, you can go now again.
+
+12:45.520 --> 12:53.520
+OK, so I've seen I've seen the latest question from Vidianos.
+
+12:53.520 --> 12:55.520
+So why is Emacs recommended for journalism?
+
+12:55.520 --> 13:02.520
+It's actually an interesting question because that's that's what I had asked myself when I just started.
+
+13:02.520 --> 13:15.520
+And I wouldn't say it's recommended. Obviously, it's it's like just as Emacs isn't recommended to anyone in particular because you have you have to really figure out, oh, this is for me.
+
+13:15.520 --> 13:18.520
+But I think it's yeah.
+
+13:18.520 --> 13:25.520
+Sorry, sorry, sorry. Is my button not working again? I will, I will chastise myself.
+
+13:25.520 --> 13:29.520
+So I think it's.
+
+13:29.520 --> 13:40.520
+Gotta get back into it. And it's valuable for journalism in the sense that there are plenty of tools that are used for scientific research, which are also used for journalism research.
+
+13:40.520 --> 13:48.520
+And in the sense that Emacs is kind of tailored through big tags, through big latex, through like Orgrom and Orgrom Noter, that kind of thing.
+
+13:48.520 --> 13:56.520
+And it's it's very easy to transfer these skills into journalism.
+
+13:56.520 --> 14:05.520
+And because you're just researching topics and you're transcribing interviews, you're like going through data and trying to figure out, all right, this is the part that's that's valuable.
+
+14:05.520 --> 14:13.520
+This is like something that I'm going to research. And for me, Orgrom is kind of a game changer because it allows me to just.
+
+14:13.520 --> 14:22.520
+Set my set my thoughts aside, just create a create a Rome link and know that I'm going to I'm going to get back to it.
+
+14:22.520 --> 14:30.520
+And so I think it's recommended in that sense, because otherwise I'd just be writing in in a Google Drive document.
+
+14:30.520 --> 14:36.520
+And just be spending all my days working on stuff that's not exactly related.
+
+14:36.520 --> 14:45.520
+But obviously, for people who have a bit more self-control than I do, it's probably a bit easier and less less necessary.
+
+14:45.520 --> 14:51.520
+But it's so good to hear this. Sorry for the interruption, but it's so good to hear that Orgrom actually manages to.
+
+14:51.520 --> 14:55.520
+People manage to use Orgrom to, you know, give some more life to their notes.
+
+14:55.520 --> 15:00.520
+It's just not a scribbled notes in one of your book that you never open again.
+
+15:00.520 --> 15:06.520
+It's the fact that it's just a file and that you can link it very easily to the rest of your files.
+
+15:06.520 --> 15:14.520
+It makes it really easily accessible to not forget about it and to try to refine it later on into something more valuable.
+
+15:14.520 --> 15:17.520
+Be it an article, be it a research paper or stuff like this.
+
+15:17.520 --> 15:21.520
+So, yeah, I'm very pleased to hear that Orgrom is being put to such use.
+
+15:21.520 --> 15:29.520
+And we'll hear plenty more about Orgrom and Zettelkasten as usual ever since there was the boom in 2020 about Orgrom stuff and Zettelkasten stuff.
+
+15:29.520 --> 15:36.520
+So don't worry about it. And if you're tired about it, well, sorry, you can go watch that or something.
+
+15:36.520 --> 15:44.520
+Yeah, no, I think that when I realized how to use Orgrom was also kind of a moment that made me want to stay to stay there.
+
+15:44.520 --> 16:01.520
+Like I had shown it on the on the talk, but my my documentary ideas page is basically just like chock full of ideas of stuff that I have thought about for five minutes and just stuff there.
+
+16:01.520 --> 16:05.520
+And no, but I can I can create like stumble on the link at some point and work on it.
+
+16:05.520 --> 16:22.520
+So it's yeah, it's very valuable. I think it's something that we even outside of Emacs, we should probably be a bit more conscious of of using these kinds of tools and promoting promoting that kind of association and kind of linking.
+
+16:22.520 --> 16:29.520
+Even outside of the confines of Orgrom as much as as there are confines, I suppose.
+
+16:29.520 --> 16:44.520
+I think people are already complaining that there's too much Orgrom being talked about. So before we start, well, going outside of Emacs, you know, there are plenty of tools as well outside of Emacs tools, which are also floss, which allow you to have similar workflows.
+
+16:44.520 --> 16:57.520
+But I believe really that tools within Emacs are within the entire stack of Emacs with the philosophy of Emacs that allows so much different modes to be developed on top of it, which is amazing.
+
+16:57.520 --> 17:03.520
+Before we continue, I kind of want to check the clock because we will need to get started on the next talk eventually.
+
+17:03.520 --> 17:11.520
+We do have a lot of people joining on BBB and thank you. Hi, everyone. You are probably hearing me twice, once in BBB and once on the stream.
+
+17:11.520 --> 17:17.520
+So don't forget to pause the stream if you are hearing my voice in doubles.
+
+17:17.520 --> 17:27.520
+We will need to move at 45, so in five minutes, to the next talk. And until then, until then, it is very French of me to say then and not then.
+
+17:27.520 --> 17:31.520
+We can take a couple more questions then, Alfred, if you want.
+
+17:31.520 --> 17:34.520
+Absolutely.
+
+17:34.520 --> 17:47.520
+So yeah, open the questions to people joining in on the mic. And if there's nothing, I'm happy to chat around or to wait.
+
+17:47.520 --> 17:53.520
+Sure. Do we have any other questions on the panel? I think you've been pretty thorough and thank you so much for taking the time to answer this.
+
+17:53.520 --> 18:04.520
+One of the reasons that we wanted to have two tracks this year is to be able to spend a little more time with Spukers because it was really heart wrenching last year to have so many talks going one after the other.
+
+18:04.520 --> 18:10.520
+We barely had the time to talk. And this year, it's a more of a leisurely paced stream.
+
+18:10.520 --> 18:16.520
+And yeah, it feels like I can take my time. I'm not running constantly out of breath.
+
+18:16.520 --> 18:26.520
+It's still the beginning. OK, I still was extremely stressed whenever we need to press the start stream button, you know, all kinds of fire starts spawning left and right.
+
+18:26.520 --> 18:39.520
+But if we don't have any more questions, well, maybe we can just go on a little break and reconvene in four minutes because I don't see people on BBB having their mic open.
+
+18:39.520 --> 18:42.520
+So, Alfred, you're more than welcome to stay in the room.
+
+18:42.520 --> 18:48.520
+What we are probably going to do now is go on a little bit of a break. So we're going to try to put something on the screen.
+
+18:48.520 --> 18:55.520
+There's just been a question from Corwin. So are you closing out the room?
+
+18:55.520 --> 19:01.520
+Oh, no, no, no. We probably will. Well, OK, let me just read Corwin's question.
+
+19:01.520 --> 19:04.520
+Yes, you do have a question for Corwin, but we're not going to close the room.
+
+19:04.520 --> 19:12.520
+We're going to leave it open as long as you want to stay. You can stay five to ten minutes. Maybe people might show up. But otherwise.
+
+19:12.520 --> 19:17.520
+So just reading Corwin's questions because it's not in a pad yet, I think.
+
+19:17.520 --> 19:25.520
+So do you use any fancy solutions for annotating text onto particular video timestamps?
+
+19:25.520 --> 19:30.520
+Well, I don't use it yet, but it's planned.
+
+19:30.520 --> 19:38.520
+So I've started a Reddit thread and Sasha has been helpful with answering that one.
+
+19:38.520 --> 19:50.520
+But my plan is to work with subtitle editing at some points and to introduce.
+
+19:50.520 --> 20:00.520
+Wait, annotate. I might have misunderstood the question. Oh, sorry.
+
+20:00.520 --> 20:04.520
+I'm looking for the question as well. So don't worry if you're lost, I'm also lost.
+
+20:04.520 --> 20:18.520
+Annotation text. If it's possible to get a clarification for what you mean by annotation text, is that like text effects or is that subtitles?
+
+20:18.520 --> 20:28.520
+I think it was mostly about you were talking about notes taking. I think annotation in that sense on the videos would be you have a video and you're trying to take note on this video.
+
+20:28.520 --> 20:35.520
+Like either you have the timestamp on the side or you overlay something. But I think it's mostly about taking notes on videos.
+
+20:35.520 --> 20:43.520
+OK, yeah. So for now, I'm creating a new link between every video or podcast that I listen to,
+
+20:43.520 --> 20:56.520
+but I but I remember to do so and creating just an org room, an org room documents for every for every for every new episode or every new video.
+
+20:56.520 --> 21:12.520
+But I am definitely going to have to take some time and figure out a process in which I can link together RSS feeds or L feed as well to to be able to annotate that and link it up with my other text notes.
+
+21:12.520 --> 21:20.520
+So nothing fancy yet, but that is planned. So stick around till next year and I might have something for you.
+
+21:20.520 --> 21:23.520
+And we will love to have you back.
+
+21:23.520 --> 21:31.520
+Yeah, it's thanks. Thanks so much for organizing this. It's it's great to have to have these questions.
+
+21:31.520 --> 21:43.520
+Yeah, well, thank you so much, Alfred. It was you know, you had nothing to do with it, but you were the first speaker to come. And even though, you know, having a prereq makes it that much less stressful to be facing the crowd,
+
+21:43.520 --> 21:50.520
+you still had to take the first questions from the crowd. And thank you so much because you did it brilliantly and you answered so many questions considering.
+
+21:50.520 --> 21:55.520
+So, Alfred, you're going to probably stay in a room a little while. I don't see a lot of people joining quite yet.
+
+21:55.520 --> 22:05.520
+I don't think people are, I think most of the questions have already been addressed on the pad, but you can stick around in two minutes and we'll be with you shortly to help you close the room.
+
+22:05.520 --> 22:10.520
+But right now, what we're going to do is we're going to take, well, we're not going to take any break.
+
+22:10.520 --> 22:16.520
+We're just going to move straight into the next talk. Do bear with us because it's a it's a fine machinery.
+
+22:16.520 --> 22:22.520
+And if something flashes on the screen, bear with us. It will be live pretty soon.
+
+22:22.520 --> 22:31.520
+OK, it's apparently live. Bye bye. Take care.
+
+22:31.520 --> 22:39.520
+OK, so we are now off the stream. We are playing the next prereq. Thank you so much, Alfred, and sorry for the intermittent microphone tuning in.
+
+22:39.520 --> 22:43.520
+It was basically my push to talk button with production that is misbehaving a little bit.
+
+22:43.520 --> 22:52.520
+It's working so well that I'm actually if I keep talking whilst I'm releasing the button, I'm talking to you, which is really weird and really confusing.
+
+22:52.520 --> 23:00.520
+OK, you know, it's always it's always rough with new audio setups going live with them at the same time as you're discovering them.
+
+23:00.520 --> 23:05.520
+It's always an interesting, interesting, especially since it's only one aspect of the stuff we're doing.
+
+23:05.520 --> 23:08.520
+You know, we're doing so much stuff on the side as well. OK, I'm going to have to get going.
+
+23:08.520 --> 23:13.520
+I don't see I don't see any people joining on BBB, so you can stick around a little while.
+
+23:13.520 --> 23:16.520
+Corwin might be back in about two to three minutes to help you close the room.
+
+23:16.520 --> 23:20.520
+But otherwise, you can just leave if no one shows up in two minutes. OK. All right.
+
+23:20.520 --> 23:25.520
+Thanks so much. And thank you so much.
+
+23:25.520 --> 23:54.520
+Merci and see you next time. All right, guys, if you have any questions, this is the last the last the last moment.
+
+23:54.520 --> 24:04.520
+To launch launch a question, if you're if you don't want to be recorded, I'm happy to I'm happy to take a question off off air or something.
+
+24:04.520 --> 24:08.520
+I don't know. I don't know if the chats. Oh, Max. Yes.
+
+24:08.520 --> 24:17.520
+When I get stuck with the next problem.
+
+24:17.520 --> 24:26.520
+For non-tech people, do you mean non-technical minded like I'm.
+
+24:26.520 --> 24:30.520
+I'm trying to figure out. Oh, great.
+
+24:30.520 --> 24:37.520
+Well, typically, typically, I try and just research on on.
+
+24:37.520 --> 24:49.520
+On Stack Overflow or other platforms where you can share code and share problems, but I typically don't go into too much like non-tech places for EMAX problems.
+
+24:49.520 --> 24:54.520
+I have other problems. So, for example, research problems and that kind of thing.
+
+24:54.520 --> 25:00.520
+And I'm not sure I answered the core of your question.
+
+25:00.520 --> 25:03.520
+The.
+
+25:03.520 --> 25:15.520
+Oh, all right. Yes.
+
+25:15.520 --> 25:27.520
+Yeah, I mean, I do, I do have other other communities that I joined in, but I try to talk talk about these issues with that aren't that aren't EMAX.
+
+25:27.520 --> 25:33.520
+But obviously, it's difficult to talk about EMAX problems with non EMAX users.
+
+25:33.520 --> 25:43.520
+So, yeah, that's that's the whole the whole issue with it being so complicated to get started is that you can you can say you can say all you want about how great it is.
+
+25:43.520 --> 25:52.520
+But people people aren't always keen to spend three months of their life trying to learn it, which fair enough.
+
+25:52.520 --> 26:04.520
+All right. Well, I hope I answered the I answered your questions to the as much as I could, I'll get back to the to the note documents.
+
+26:04.520 --> 26:13.520
+And at some point in the coming week and putting in some more notes about about the stuff you guys were interested in.
+
+26:13.520 --> 26:23.520
+And, yeah, well thanks for thanks for asking questions thanks for being here and hopefully, hopefully see you next time in the EMAX Conf.
+
+26:23.520 --> 26:45.520
+You are currently the only person in this conference.
+
+26:53.520 --> 27:18.520
+Okay.
+
+27:23.520 --> 27:25.520
+You
+
+27:53.520 --> 27:55.520
+You
+
+28:23.520 --> 28:25.520
+You
+
+28:53.520 --> 28:55.520
+You
+
+29:23.520 --> 29:25.520
+You
+
+29:53.520 --> 29:55.520
+You
+
+30:23.520 --> 30:25.520
+You
+
+30:53.520 --> 30:55.520
+You
+
+31:23.520 --> 31:25.520
+You
+
+31:53.520 --> 31:55.520
+You
+
+32:23.520 --> 32:25.520
+You
+
+32:53.520 --> 32:55.520
+You
+
+33:23.520 --> 33:25.520
+You
+
+33:53.520 --> 33:55.520
+You
+
+34:23.520 --> 34:25.520
+You
+
+34:53.520 --> 34:55.520
+You
+
+35:23.520 --> 35:25.520
+You
+
+35:53.520 --> 35:55.520
+You
+
+36:23.520 --> 36:25.520
+You
+
+36:53.520 --> 36:55.520
+You
+
+37:23.520 --> 37:25.520
+You
+
+37:53.520 --> 37:55.520
+You
+
+38:23.520 --> 38:25.520
+You
+
+38:53.520 --> 38:55.520
+You
+
+39:23.520 --> 39:25.520
+You
+
+39:53.520 --> 39:55.520
+You
+
+40:23.520 --> 40:25.520
+You
+
+40:53.520 --> 40:55.520
+You
+
+41:23.520 --> 41:25.520
+You
+
+41:53.520 --> 41:55.520
+You
+
+42:23.520 --> 42:25.520
+You
+
+42:53.520 --> 42:55.520
+You
+
+43:23.520 --> 43:25.520
+You
+
+43:53.520 --> 43:55.520
+You
+
+44:23.520 --> 44:25.520
+You
+
+44:53.520 --> 44:55.520
+You
+
+45:23.520 --> 45:25.520
+You
+
+45:53.520 --> 45:55.520
+You
+
+46:23.520 --> 46:25.520
+You
+
+46:53.520 --> 46:55.520
+You
+
+47:23.520 --> 47:25.520
+You
+
+47:53.520 --> 47:55.520
+You
+
+48:23.520 --> 48:25.520
+You
+
+48:53.520 --> 48:55.520
+You
+
+49:23.520 --> 49:25.520
+You
+
+49:53.520 --> 49:55.520
+You
+
+50:23.520 --> 50:25.520
+You
+
+50:53.520 --> 50:55.520
+You
+
+51:23.520 --> 51:25.520
+You
+
+51:53.520 --> 51:55.520
+You
+
+52:23.520 --> 52:25.520
+You
+
+52:53.520 --> 52:55.520
+You
+
+53:23.520 --> 53:25.520
+You
+
+53:53.520 --> 53:55.520
+You
+
+54:23.520 --> 54:25.520
+You
+
+54:53.520 --> 54:55.520
+You
+
+55:23.520 --> 55:25.520
+You
+
+55:53.520 --> 55:55.520
+You
+
+56:23.520 --> 56:25.520
+You
+
+56:53.520 --> 56:55.520
+You
+
+57:23.520 --> 57:25.520
+You
+
+57:53.520 --> 57:55.520
+You
+
+58:23.520 --> 58:25.520
+You
+
+58:53.520 --> 58:55.520
+You
+
+59:23.520 --> 59:25.520
+You
+
+59:53.520 --> 59:55.520
+You
+
+01:00:23.520 --> 01:00:25.520
+You
+
+01:00:53.520 --> 01:00:55.520
+You
+
+01:01:23.520 --> 01:01:25.520
+You
+
+01:01:53.520 --> 01:01:55.520
+You
+
+01:02:23.520 --> 01:02:25.520
+You
+
diff --git a/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt
new file mode 100644
index 00000000..682d1920
--- /dev/null
+++ b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt
@@ -0,0 +1,29 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:36.119
+Introduction
+
+00:00:36.120 --> 00:01:52.159
+Why this talk
+
+00:01:52.160 --> 00:02:39.119
+Thinking about workflows
+
+00:02:39.120 --> 00:04:05.279
+My old workflow
+
+00:04:05.280 --> 00:06:56.799
+Finding my workflow
+
+00:06:56.800 --> 00:09:37.639
+Literate configuration
+
+00:09:37.640 --> 00:11:52.959
+Org Mode
+
+00:11:52.960 --> 00:14:26.959
+Collaborating with Pandoc
+
+00:14:26.960 --> 00:16:44.400
+You don't have to get lost in the weeds
diff --git a/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt
new file mode 100644
index 00000000..54cf0992
--- /dev/null
+++ b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt
@@ -0,0 +1,818 @@
+WEBVTT captioned by alfred
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:06.959
+All right. Hello, everyone. Welcome to my talk.
+
+00:00:06.960 --> 00:00:10.119
+We'll be talking today about Emacs journalism
+
+00:00:10.120 --> 00:00:12.279
+and what that means.
+
+00:00:12.280 --> 00:00:14.999
+First of all, I'd like to thank the EmacsConf organizers.
+
+00:00:15.000 --> 00:00:20.039
+Thank you very much, Sacha, for being very patient with me.
+
+00:00:20.040 --> 00:00:22.679
+Let's get right into it. So who's this talk for?
+
+00:00:22.680 --> 00:00:24.799
+First of all, it's for anyone
+
+00:00:24.800 --> 00:00:26.359
+who wants to learn about workflows
+
+00:00:26.360 --> 00:00:28.519
+and how you can work with Emacs
+
+00:00:28.520 --> 00:00:31.279
+to basically do anything you want.
+
+00:00:31.280 --> 00:00:33.679
+And it's for all levels of Emacs lovers.
+
+00:00:33.680 --> 00:00:36.119
+So I'll keep it accessible.
+
+NOTE Why this talk
+
+00:00:36.120 --> 00:00:37.479
+Why this talk? So first of all,
+
+00:00:37.480 --> 00:00:40.519
+I want to share a lot of Emacs.
+
+00:00:40.520 --> 00:00:42.519
+I also wanted to learn about workflows myself.
+
+00:00:42.520 --> 00:00:46.319
+So what better way than to talk about them
+
+00:00:46.320 --> 00:00:49.519
+to be able to learn? And we could maybe learn a thing
+
+00:00:49.520 --> 00:00:56.799
+or two about collaboration and using Emacs to that motive.
+
+00:00:56.800 --> 00:01:00.479
+I think it's useful to try and figure out who am I?
+
+00:01:00.480 --> 00:01:03.159
+Why am I having this talk? I'm a journalist based
+
+00:01:03.160 --> 00:01:06.799
+in Hong Kong and a documentary filmmaker. So that means
+
+00:01:06.800 --> 00:01:08.959
+that I have interviews quite often.
+
+00:01:08.960 --> 00:01:11.519
+I'm dealing with texts and subtitles,
+
+00:01:11.520 --> 00:01:14.039
+which I have to transcribe.
+
+00:01:14.040 --> 00:01:16.879
+And I'm also dealing with a lot of research.
+
+00:01:16.880 --> 00:01:22.159
+So that means going through a lot of documents and a lot of,
+
+00:01:22.160 --> 00:01:26.759
+well, skimming through documents
+
+00:01:26.760 --> 00:01:30.279
+to be able to have something to write.
+
+00:01:30.280 --> 00:01:34.119
+And I also use Emacs since basically one year ago,
+
+00:01:34.120 --> 00:01:35.399
+I started using it full time
+
+00:01:35.400 --> 00:01:39.639
+to have a great detriment of my productivity.
+
+00:01:39.640 --> 00:01:45.599
+So we'll be talking about, we'll be talking about, well,
+
+00:01:45.600 --> 00:01:48.439
+basically, my workflow for Emacs
+
+00:01:48.440 --> 00:01:52.159
+and how I went about having an Emacs workflow.
+
+NOTE Thinking about workflows
+
+00:01:52.160 --> 00:01:56.799
+So what is best when you're thinking about your own workflow
+
+00:01:56.800 --> 00:01:59.199
+and some things to think about journalism
+
+00:01:59.200 --> 00:02:03.199
+and about using these kinds of tools
+
+00:02:03.200 --> 00:02:09.479
+in combination for this? So where do we all start?
+
+00:02:09.480 --> 00:02:11.559
+Let's start with a simple-ish definition
+
+00:02:11.560 --> 00:02:14.959
+of what is a workflow. A workflow is
+
+00:02:14.960 --> 00:02:18.359
+any sequence of actions or tools you use to accomplish that.
+
+00:02:18.360 --> 00:02:23.199
+So it doesn't have to be through text processing,
+
+00:02:23.200 --> 00:02:27.759
+though obviously being a text-oriented community,
+
+00:02:27.760 --> 00:02:31.439
+it will most likely be partially text.
+
+00:02:31.440 --> 00:02:34.999
+But it's just about how we accomplish a task
+
+00:02:35.000 --> 00:02:39.119
+and which tools and mindsets we go into it with.
+
+NOTE My old workflow
+
+00:02:39.120 --> 00:02:42.759
+For example, let's talk about my old workflow.
+
+00:02:42.760 --> 00:02:46.879
+That workflow was basically just Google Drive
+
+00:02:46.880 --> 00:02:50.759
+using proprietary tools like Notion, Google Drive, Office,
+
+00:02:50.760 --> 00:02:55.839
+Storyboarder, and for communication, WeChat.
+
+00:02:55.840 --> 00:02:59.559
+If I could forgive all the privacy concerns of WeChat,
+
+00:02:59.560 --> 00:03:03.279
+I wouldn't, but I still wouldn't forgive
+
+00:03:03.280 --> 00:03:06.759
+the terribly buggy interface, and I hate it.
+
+00:03:06.760 --> 00:03:09.119
+So there are certain tools that you have to use
+
+00:03:09.120 --> 00:03:11.359
+and you have to modify your workflow
+
+00:03:11.360 --> 00:03:13.839
+or just adapt your workflow to the tools
+
+00:03:13.840 --> 00:03:17.119
+that you have to use. So for me, unfortunately,
+
+00:03:17.120 --> 00:03:23.399
+that means having to use WeChat. You compartmentalize it
+
+00:03:23.400 --> 00:03:27.479
+and set it aside, try not to think about it too hard.
+
+00:03:27.480 --> 00:03:29.319
+And this is the part that hurts the most, right?
+
+00:03:29.320 --> 00:03:31.039
+You're thinking about your workflow,
+
+00:03:31.040 --> 00:03:32.239
+you're thinking about, all right,
+
+00:03:32.240 --> 00:03:37.199
+I have this thing that works, I don't think about it.
+
+00:03:37.200 --> 00:03:40.039
+And all of a sudden, oh, I'm not happy
+
+00:03:40.040 --> 00:03:44.239
+with what I have right now. So let's get into,
+
+00:03:44.240 --> 00:03:50.079
+let's get into how, oops. So let's get into how and why
+
+00:03:50.080 --> 00:03:51.479
+we're not happy with our workflows.
+
+00:03:51.480 --> 00:03:55.679
+Because obviously, it's quite nice
+
+00:03:55.680 --> 00:03:57.159
+to not have to think about things.
+
+00:03:57.160 --> 00:03:58.719
+But once you've thought about it,
+
+00:03:58.720 --> 00:04:01.399
+and once you're not happy with how it works,
+
+00:04:01.400 --> 00:04:03.559
+I think it's quite useful to think about
+
+00:04:03.560 --> 00:04:05.279
+why we're not happy about it.
+
+NOTE Finding my workflow
+
+00:04:05.280 --> 00:04:10.199
+A huge part of what Emacs is being conscious of, well,
+
+00:04:10.200 --> 00:04:11.679
+how do we find our workflows?
+
+00:04:11.680 --> 00:04:17.839
+How do we find what we want to do? And for me, obviously,
+
+00:04:17.840 --> 00:04:19.839
+the best way to find that is to write it down
+
+00:04:19.840 --> 00:04:24.239
+and to try and tailor my tools to it.
+
+00:04:24.240 --> 00:04:26.239
+This is what I came up with.
+
+00:04:26.240 --> 00:04:28.039
+I want to be able to manage my accounting,
+
+00:04:28.040 --> 00:04:30.719
+to manage collaboration. So: working on files
+
+00:04:30.720 --> 00:04:33.439
+alongside my colleagues, communication,
+
+00:04:33.440 --> 00:04:38.839
+so that's planning out and managing meetings,
+
+00:04:38.840 --> 00:04:43.999
+managing teammates, managing tasks, information gathering.
+
+00:04:44.000 --> 00:04:45.959
+So that's what I was saying, going through documents,
+
+00:04:45.960 --> 00:04:49.999
+going through all these lists of tasks and all of these,
+
+00:04:50.000 --> 00:04:54.079
+not lists of tasks, all of these, well, basically,
+
+00:04:54.080 --> 00:04:59.799
+scientific papers, notes, references and wikis, media.
+
+00:04:59.800 --> 00:05:02.319
+So I want to be able to have a music player,
+
+00:05:02.320 --> 00:05:06.159
+a podcast player, a movie player. That's outside of work,
+
+00:05:06.160 --> 00:05:09.999
+but it's still one of the tasks that I do. Media processing,
+
+00:05:10.000 --> 00:05:13.559
+so this is where my job kind of gets into it a bit more.
+
+00:05:13.560 --> 00:05:15.159
+So I want to be able to take notes
+
+00:05:15.160 --> 00:05:16.479
+on the media that I watch,
+
+00:05:16.480 --> 00:05:19.559
+to transcribe the interviews
+
+00:05:19.560 --> 00:05:21.559
+and even the conversations that I have,
+
+00:05:21.560 --> 00:05:26.439
+to be able to later on have an easier time.
+
+00:05:26.440 --> 00:05:32.119
+Photo editing, video editing, so unfortunately,
+
+00:05:32.120 --> 00:05:35.959
+Emacs isn't quite quite oriented to that.
+
+00:05:35.960 --> 00:05:40.519
+Graphic design, color grading, storyboarding.
+
+00:05:40.520 --> 00:05:43.479
+And so obviously, you go into it a bit more.
+
+00:05:43.480 --> 00:05:46.519
+So managing to do scheduling tasks, interviews,
+
+00:05:46.520 --> 00:05:49.159
+preparing shot lists, tracking time,
+
+00:05:49.160 --> 00:05:53.319
+setting daily work goals, setting priorities,
+
+00:05:53.320 --> 00:05:55.479
+independent tasks, publishing,
+
+00:05:55.480 --> 00:05:59.079
+so publishing stuff for my work on my work CMS,
+
+00:05:59.080 --> 00:06:01.519
+publishing stuff on my personal CMS,
+
+00:06:01.520 --> 00:06:06.079
+although that's not happened yet. I've been kind of busy.
+
+00:06:06.080 --> 00:06:08.639
+Security and privacy, so making sure
+
+00:06:08.640 --> 00:06:13.279
+that everything that I use respects my data and respects me.
+
+00:06:13.280 --> 00:06:18.399
+Unfortunately, not the case, but you take what you can.
+
+00:06:18.400 --> 00:06:20.599
+Text processing. So that's journaling,
+
+00:06:20.600 --> 00:06:26.039
+writing down articles, my personal wiki, my work wiki,
+
+00:06:26.040 --> 00:06:34.679
+which I use to document, well, for example,
+
+00:06:34.680 --> 00:06:37.159
+several projects that I have currently.
+
+00:06:37.160 --> 00:06:43.319
+So I basically have my work wiki that I'm trying
+
+00:06:43.320 --> 00:06:45.159
+to fill out where I'll be able
+
+00:06:45.160 --> 00:06:47.199
+to basically go into it later on
+
+00:06:47.200 --> 00:06:50.399
+and have my thoughts written down.
+
+00:06:50.400 --> 00:06:56.799
+And programming, which I'm not very good at.
+
+NOTE Literate configuration
+
+00:06:56.800 --> 00:06:59.399
+Some people might have noticed
+
+00:06:59.400 --> 00:07:17.159
+that this looks a lot like [literate] programming.
+
+00:07:17.160 --> 00:07:18.639
+If you go into my config file,
+
+00:07:18.640 --> 00:07:20.159
+I have something kind of similar.
+
+00:07:20.160 --> 00:07:22.439
+I was planning on having a bit more time
+
+00:07:22.440 --> 00:07:26.359
+for this presentation and making it stick to that.
+
+00:07:26.360 --> 00:07:30.999
+But you'll see basically the mess that is my Emacs config.
+
+00:07:31.000 --> 00:07:33.319
+But it kind of sticks to the same thoughts, right?
+
+00:07:33.320 --> 00:07:37.399
+Text processing, web browsing, finances,
+
+00:07:37.400 --> 00:07:39.879
+that's my accounting, media and research.
+
+00:07:39.880 --> 00:07:43.879
+So my BibTeX... Here be dragons.
+
+00:07:43.880 --> 00:07:45.119
+Terrible, terrible config
+
+00:07:45.120 --> 00:07:47.719
+that I've stolen from plenty of people.
+
+00:07:47.720 --> 00:07:52.479
+So basically, that's how Emacs fits into this.
+
+00:07:52.480 --> 00:07:57.399
+So this is where I talk about literate configs
+
+00:07:57.400 --> 00:08:01.919
+and how that's helped me. Obviously, I've extolled
+
+00:08:01.920 --> 00:08:04.199
+the virtue of literate configs
+
+00:08:04.200 --> 00:08:09.359
+to quite an extent right here. It's basically...
+
+00:08:09.360 --> 00:08:15.239
+The concept is to have documents, living documents
+
+00:08:15.240 --> 00:08:18.239
+and documentation as code.
+
+00:08:18.240 --> 00:08:22.239
+So basically, let's go back into my config.
+
+00:08:22.240 --> 00:08:31.279
+I talk about what the config file does, have code blocks.
+
+00:08:31.280 --> 00:08:33.599
+So this is something that Emacs does. I'm pretty sure
+
+00:08:33.600 --> 00:08:36.639
+that there are some resources about that accessible online,
+
+00:08:36.640 --> 00:08:46.439
+which are even accessible in the Emacs Gulf. And so, yeah,
+
+00:08:46.440 --> 00:08:50.199
+basically just having everything accessible
+
+00:08:50.200 --> 00:08:52.479
+in one single source, one single file,
+
+00:08:52.480 --> 00:08:54.879
+which allows you to basically put everything down
+
+00:08:54.880 --> 00:09:00.639
+and integrate things from your config much much more easily.
+
+00:09:00.640 --> 00:09:05.239
+That's something that I found very useful in Emacs
+
+00:09:05.240 --> 00:09:07.599
+and which I think everyone can benefit from
+
+00:09:07.600 --> 00:09:11.279
+or the idea of it, like having everything stored centrally.
+
+00:09:11.280 --> 00:09:14.999
+It doesn't have to be used just for Emacs.
+
+00:09:15.000 --> 00:09:21.999
+It can be used also, it can be used also for, for example,
+
+00:09:22.000 --> 00:09:26.679
+a Qt browser or for other window manager configs.
+
+00:09:26.680 --> 00:09:28.239
+That kind of thing.
+
+00:09:28.240 --> 00:09:32.919
+And it's not been very easy to set a place.
+
+00:09:32.920 --> 00:09:37.639
+So I haven't done that just yet, but that's the plan.
+
+NOTE Org Mode
+
+00:09:37.640 --> 00:09:41.479
+Basically, this is all thanks to Org mode.
+
+00:09:41.480 --> 00:09:45.639
+So, small presentation of what Org mode is. Org mode
+
+00:09:45.640 --> 00:09:49.599
+is basically a project / task management,
+
+00:09:49.600 --> 00:09:52.479
+past management and task management,
+
+00:09:52.480 --> 00:09:54.319
+and writing mode for Emacs.
+
+00:09:54.320 --> 00:10:00.039
+So I can just put in a heading to do Hello World,
+
+00:10:00.040 --> 00:10:10.319
+send a message to Rosie tomorrow about the shoot space MDS--
+
+00:10:10.320 --> 00:10:15.399
+that's thanks to wonderful Doom Emacs--and schedule it.
+
+00:10:15.400 --> 00:10:21.799
+I don't know. It's tomorrow. Let's go and set it to 9am.
+
+00:10:21.800 --> 00:10:28.759
+And say, maybe it's it's tomorrow already. I've done it.
+
+00:10:28.760 --> 00:10:31.439
+I've sent a message. Perfect. It's done.
+
+00:10:31.440 --> 00:10:33.679
+And it also allows you to have an agenda view.
+
+00:10:33.680 --> 00:10:37.719
+So I hope there's nothing too compromising right here.
+
+00:10:37.720 --> 00:10:41.879
+Whatever. It's fine. So it allows you
+
+00:10:41.880 --> 00:10:45.199
+to basically manage your agenda from there.
+
+00:10:45.200 --> 00:10:54.439
+And you might have seen me doing my little space nrf
+
+00:10:54.440 --> 00:10:58.359
+and wonderful key binding by Org Roam. So this
+
+00:10:58.360 --> 00:11:01.039
+is also another thing which is quite quite nice
+
+00:11:01.040 --> 00:11:06.079
+with Emacs is that you can you can have Org Roam, which
+
+00:11:06.080 --> 00:11:09.079
+is basically a database management program.
+
+00:11:09.080 --> 00:11:12.959
+So I can have documentary ideas
+
+00:11:12.960 --> 00:11:21.799
+and have basically my ideas which link up to another file.
+
+00:11:21.800 --> 00:11:25.839
+So for example, this one, which I have nothing for,
+
+00:11:25.840 --> 00:11:29.239
+but you get the idea. So it allows you to apps
+
+00:11:29.240 --> 00:11:33.719
+to link up with different files and to manage your thoughts.
+
+00:11:33.720 --> 00:11:37.959
+And this gets back into the workflow part of my talk,
+
+00:11:37.960 --> 00:11:41.879
+which is, well, this, this is a way
+
+00:11:41.880 --> 00:11:44.319
+to control what your workflow
+
+00:11:44.320 --> 00:11:49.759
+is control what the tools you're using are and to control,
+
+00:11:49.760 --> 00:11:52.079
+basically the way in which you interact
+
+00:11:52.080 --> 00:11:52.959
+with your technology.
+
+NOTE Collaborating with Pandoc
+
+00:11:52.960 --> 00:11:59.799
+So I am getting back into the way that I collaborate.
+
+00:11:59.800 --> 00:12:02.799
+Because obviously it's no good having just
+
+00:12:02.800 --> 00:12:07.919
+one Emacs user who's trying to share to share things
+
+00:12:07.920 --> 00:12:11.159
+with his editor. So I use pandoc.
+
+00:12:11.160 --> 00:12:17.479
+For example, let's go back into my file right here.
+
+00:12:17.480 --> 00:12:24.359
+Obviously, I don't spend much time inside of tables.
+
+00:12:24.360 --> 00:12:29.199
+But if I select this one, that's "SPC m e".
+
+00:12:29.200 --> 00:12:32.079
+Thank you, Doom Emacs for the for the keybindings.
+
+00:12:32.080 --> 00:12:38.239
+And I can just export it via pandoc right here, So "p".
+
+00:12:38.240 --> 00:12:50.719
+And I can just export it to doc, docx, or export it to ODT.
+
+00:12:50.720 --> 00:12:55.119
+So as an ODT file, which is typically what I do.
+
+00:12:55.120 --> 00:12:57.119
+And then I just send it through WeChat,
+
+00:12:57.120 --> 00:13:00.359
+which is not optimal, but I'm not allowed
+
+00:13:00.360 --> 00:13:04.079
+to do anything else. So it is what it is.
+
+00:13:04.080 --> 00:13:12.759
+Basically, this is how I export my files. And I re-import,
+
+00:13:12.760 --> 00:13:15.519
+I re-import them with pandoc as well.
+
+00:13:15.520 --> 00:13:19.799
+So I convert my Pages files, which I receive
+
+00:13:19.800 --> 00:13:22.879
+through an ICS plugin. It's not quite finalized,
+
+00:13:22.880 --> 00:13:24.119
+so I'm not ready to show it,
+
+00:13:24.120 --> 00:13:26.359
+but there's a link that I'll be putting
+
+00:13:26.360 --> 00:13:29.479
+in the description which talks about this.
+
+00:13:29.480 --> 00:13:32.959
+So this is my sharing part.
+
+00:13:32.960 --> 00:13:35.439
+It's nothing very special, honestly.
+
+00:13:35.440 --> 00:13:38.319
+It's just making sure that your documents
+
+00:13:38.320 --> 00:13:41.479
+are able to be shared.
+
+NOTE My own
+00:13:41.480 --> 00:13:44.079
+I have certain things. So for example,
+
+00:13:44.080 --> 00:13:47.839
+if I go into retro gaming in Hong Kong,
+
+00:13:47.840 --> 00:13:53.919
+if I go into my scripts, there are certain headings
+
+00:13:53.920 --> 00:13:55.519
+which I have. So for example, they ignore...
+
+00:13:55.520 --> 00:13:58.759
+My editor doesn't like to have some headings.
+
+00:13:58.760 --> 00:14:02.599
+But when I have a video script that I'm preparing,
+
+00:14:02.600 --> 00:14:05.519
+I like to have them for my own organization
+
+00:14:05.520 --> 00:14:09.399
+and for my thinking. So I keep them in right there
+
+00:14:09.400 --> 00:14:11.760
+and put in ignore. This is the advantage
+
+00:14:11.761 --> 00:14:17.280
+of the Emacs because you can just SPC m e o o,
+
+00:14:17.281 --> 00:14:20.479
+and this is ready to send, basically.
+
+00:14:20.480 --> 00:14:24.039
+There are ways to have export presets,
+
+00:14:24.040 --> 00:14:26.959
+but I'm not quite there yet. It's a lot of work.
+
+NOTE You don't have to get lost in the weeds
+
+00:14:26.960 --> 00:14:30.119
+So, getting back to my presentation.
+
+00:14:30.120 --> 00:14:36.719
+This all goes into basically other packages,
+
+00:14:36.720 --> 00:14:39.319
+which I want to implement, but I haven't been able to.
+
+00:14:39.320 --> 00:14:43.839
+My main conclusion: you don't have to get lost in the weeds.
+
+00:14:43.840 --> 00:14:48.279
+I kind of did that while preparing this talk.
+
+00:14:48.280 --> 00:14:51.719
+So basically, you don't have to do it all at once.
+
+00:14:51.720 --> 00:14:55.639
+Don't let it consume your life.
+
+00:14:55.640 --> 00:14:57.319
+I probably should have done this earlier.
+
+00:14:57.320 --> 00:15:02.119
+But Emacs configs are forever work in progress.
+
+00:15:02.120 --> 00:15:04.919
+So there are lots of features which you can add,
+
+00:15:04.920 --> 00:15:08.119
+a lot of things which you can implement if you only had,
+
+00:15:08.120 --> 00:15:11.639
+I don't know, five weeks to be able to implement them.
+
+00:15:11.640 --> 00:15:12.959
+But you're working right now.
+
+00:15:12.960 --> 00:15:16.319
+And this is a message to me five months ago.
+
+00:15:16.320 --> 00:15:19.639
+Don't do it. Just keep working
+
+00:15:19.640 --> 00:15:23.639
+and don't get lost in configuration all day.
+
+00:15:23.640 --> 00:15:27.559
+So yeah, basically the aim is to use software that you love,
+
+00:15:27.560 --> 00:15:29.439
+but not die in the process.
+
+00:15:29.440 --> 00:15:34.719
+And yeah, basically just using it as much as you can
+
+00:15:34.720 --> 00:15:36.519
+using fast software as much as you can.
+
+00:15:36.520 --> 00:15:39.839
+I'm doing that as well for...
+
+00:15:39.840 --> 00:15:46.679
+I have certain software such as storyboarder or bit tags,
+
+00:15:46.680 --> 00:15:50.159
+that kind of thing, which I try to use as much as possible,
+
+00:15:50.160 --> 00:15:51.839
+even outside of Emacs.
+
+00:15:51.840 --> 00:15:56.279
+And the aim is to get the work done in the end.
+
+00:15:56.280 --> 00:16:00.679
+I'm not an absolutist on this. So yeah, basically,
+
+00:16:00.680 --> 00:16:03.919
+let's keep modding our configs and having fun.
+
+00:16:03.920 --> 00:16:06.479
+If you've got any questions about the talk,
+
+00:16:06.480 --> 00:16:10.439
+I'm happy to answer. I am a novice at this,
+
+00:16:10.440 --> 00:16:12.959
+both presenting in front of camera
+
+00:16:12.960 --> 00:16:15.719
+and at talking about Emacs.
+
+00:16:15.720 --> 00:16:18.679
+I'm sure I've gotten a few things wrong,
+
+00:16:18.680 --> 00:16:23.719
+and it's not been the smoothest talk, but it's 10pm, almost.
+
+00:16:23.720 --> 00:16:28.759
+I need to get back home. Yeah, take care, everyone.
+
+00:16:28.760 --> 00:16:32.719
+Thanks again to the organizers. Here's my contact info.
+
+00:16:32.720 --> 00:16:36.199
+And I'll be in touch with the questions.
+
+00:16:36.200 --> 00:16:38.319
+I don't think I'll be able to do the live answers,
+
+00:16:38.320 --> 00:16:41.879
+but that's more or less it. Thanks so much for listening,
+
+00:16:41.880 --> 00:16:44.400
+if you've been listening, and take care.
diff --git a/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.vtt b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.vtt
new file mode 100644
index 00000000..38b57dc8
--- /dev/null
+++ b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.vtt
@@ -0,0 +1,464 @@
+WEBVTT
+
+00:00.000 --> 00:07.200
+Okay, so we are live now. So hi, everyone. Sorry, we were doing some last minute verification
+
+00:07.200 --> 00:12.720
+with Blaine. We wanted to share screens, but somehow the Firefox gods are not in our favor
+
+00:12.720 --> 00:15.640
+today. So hi, Blaine. How are you doing?
+
+00:15.640 --> 00:21.480
+I'm doing great, Will. This has been a great conference. I've seen some talks this morning
+
+00:21.480 --> 00:27.100
+that are going to change my life. I just can't wait to start applying some of the packages
+
+00:27.100 --> 00:28.100
+I've learned about.
+
+00:28.100 --> 00:33.240
+That's amazing. And it's only day one. We've got more of this coming today, too.
+
+00:33.240 --> 00:34.240
+Exactly.
+
+00:34.240 --> 00:38.000
+So, Blaine, we haven't had the chance to tell you, but do you have the pad open on
+
+00:38.000 --> 00:39.000
+your end?
+
+00:39.000 --> 00:40.000
+Let's see.
+
+00:40.000 --> 00:45.040
+Oh, yes, because I asked you to close Firefox, so you don't have it. Do you need the URL,
+
+00:45.040 --> 00:46.040
+maybe?
+
+00:46.040 --> 00:48.080
+Yeah, that would be great.
+
+00:48.080 --> 00:52.280
+I will put it into BBB, the chat right on your left.
+
+00:52.280 --> 00:58.200
+Okay. I see it. So if I click on this and open a new window?
+
+00:58.200 --> 01:00.520
+Yes, don't worry about it.
+
+01:00.520 --> 01:05.600
+Okay. So I have some questions. Oh, that's fantastic. This is kind of a silly question,
+
+01:05.600 --> 01:10.560
+but I'm curious. Do you have a favorite color theme?
+
+01:10.560 --> 01:21.120
+So I do. I've been using a color theme that is sort of light green. It's from a set of
+
+01:21.120 --> 01:29.760
+themes that Prot put together and made available this fall on Melpa, and in some of the slides
+
+01:29.760 --> 01:36.880
+you'll see that I have this, like, white background, but I'm currently using a sort of a mint green
+
+01:36.880 --> 01:45.240
+color, which I find actually has great contrast, and I had to install some fonts for the Mac
+
+01:45.240 --> 01:52.360
+to be able to use that theme, but Prot provides detailed instructions, and it was pretty easy
+
+01:52.360 --> 01:54.360
+to do.
+
+01:54.360 --> 02:03.960
+Okay. Let's see. To your knowledge, so the second question is, to your knowledge, are
+
+02:03.960 --> 02:09.000
+recent coming security changes in Chrome going to impact browser extension?
+
+02:09.000 --> 02:16.560
+Oh, that's a great question. I, to be honest, I don't know. I'm not aware of that issue
+
+02:16.560 --> 02:23.400
+because I ran and I installed some extension I probably shouldn't have installed in Chrome
+
+02:23.400 --> 02:30.120
+a couple weeks ago, and I've been getting pop-up ads, and so I switched to Firefox,
+
+02:30.120 --> 02:39.960
+but so far I have used GhostText in a number of browsers. I can vouch that it works in
+
+02:39.960 --> 02:50.120
+Safari, Chrome, obviously Firefox, Brave, and then amongst the Firefox family of browsers
+
+02:50.120 --> 02:56.240
+there's WaterFox and IceCat. It works in those two.
+
+02:56.240 --> 03:02.400
+So if Chrome's security issues become a problem, then there are other browsers for which maybe
+
+03:02.400 --> 03:07.960
+that problem won't be an issue.
+
+03:07.960 --> 03:14.580
+Is this, a third question is, is this browser, is this browser agnostic, or do you have to
+
+03:14.580 --> 03:17.760
+use Chrome?
+
+03:17.760 --> 03:25.460
+That's a good question. So obviously, as you've seen that, or just heard, it works in a number
+
+03:25.460 --> 03:30.480
+of other browsers. There's probably at least ten other browsers in which it will work.
+
+03:30.480 --> 03:35.840
+So there's sort of three families of extensions, one for Safari, one for Firefox, and one for
+
+03:35.840 --> 03:47.580
+Chrome, and often one of those extensions will work in a different browser.
+
+03:47.580 --> 03:53.060
+You mentioned, fourth question is, you mentioned a couple other solutions to allow Emacs editing
+
+03:53.060 --> 04:02.600
+of text areas, pointers. Well, unfortunately, I didn't do my due diligence in researching
+
+04:02.600 --> 04:07.000
+those other solutions. I'm aware that there's something called Emacs Everywhere that's supposed
+
+04:07.000 --> 04:13.840
+to have a similar capability, but I haven't dug into using it, so I can't say anything
+
+04:13.840 --> 04:14.840
+about it.
+
+04:14.840 --> 04:27.040
+I'll have to say that. So because you're setting up a server from an editor, and you have this
+
+04:27.040 --> 04:35.520
+extension in a browser, things don't always mesh. You may have port 4001 occupied by some
+
+04:35.520 --> 04:43.720
+other server from Emacs or another application, and so you have to sort that out. That can
+
+04:43.720 --> 04:49.360
+happen from time to time. I've had trouble with the Emacs server sometimes using that
+
+04:49.360 --> 04:57.800
+port, but I think you can redirect that Emacs server to another port to avoid that issue.
+
+04:57.800 --> 05:02.240
+That would be the greatest difficulty is just getting the two sides talking to each other
+
+05:02.240 --> 05:10.160
+through the web socket, but once that's going, I use it every day, and I'll go for weeks
+
+05:10.160 --> 05:16.560
+without any issue, and then, of course, I'll be changing something about Emacs configuration
+
+05:16.560 --> 05:22.520
+where I'm turning on some new server that fires up when I start Emacs, and then I break
+
+05:22.520 --> 05:28.760
+it there, or something along those lines, but the great hazard of fiddling with your
+
+05:28.760 --> 05:49.520
+Emacs configuration, just a hazard of being an Emacs user. Let's see. Why not save text?
+
+05:49.520 --> 05:56.120
+So I have a fifth question, which is why not save text from Emacs? I would like to hear
+
+05:56.120 --> 06:04.560
+some solution to the issue I ran into. So if I am editing a document in a web browser
+
+06:04.560 --> 06:13.200
+and then via Emacs, and I save that to a document on disk, then I, okay, that's great if I'm
+
+06:13.200 --> 06:19.020
+not going to make any more changes, everything's fine, that works great, but if I then decide
+
+06:19.020 --> 06:27.200
+to make more changes in the browser, and then I try to save those changes, the copy on disk
+
+06:27.200 --> 06:32.280
+is out of sync with the copy in the browser, and I've had the connection break when I do
+
+06:32.280 --> 06:42.080
+that. So I heard that there might be a way of solving that problem. I'm not, but I have
+
+06:42.080 --> 06:48.040
+not implemented the solution. I forget what the suggestion was. Maybe somebody in the
+
+06:48.040 --> 06:51.840
+audience has an idea.
+
+06:51.840 --> 06:56.760
+Speaking of the audience, we have opened up the chat now, so if you want to join the current
+
+06:56.760 --> 07:02.200
+BBB Discord room in which we are and ask questions directly to Blaine, feel free to do so, otherwise
+
+07:02.200 --> 07:05.840
+we're still taking questions on the pad as long as we have them, although right now I
+
+07:05.840 --> 07:10.120
+think we have answered all of them. Am I wrong, Blaine, or did we answer all of them already?
+
+07:10.120 --> 07:13.200
+You're correct, we've answered all of them.
+
+07:13.200 --> 07:18.120
+So we're going to still discuss for about 2-3 minutes. If people want to add last questions
+
+07:18.120 --> 07:23.360
+to the pad, feel free to do so. If you want to join us in BBB, the link is at the top
+
+07:23.360 --> 07:28.140
+of the talk of Blaine, Euclid Maxco 2022. You know everything now. We are at the end
+
+07:28.140 --> 07:33.640
+of the day, and you can tell it's the end of the day because my accent is getting significantly
+
+07:33.640 --> 07:40.840
+Frencher as a result. It's not getting any better since last year, I think. I wish I
+
+07:40.840 --> 07:44.760
+could contribute, Blaine, more to your talk, but I feel like I'm way out of my league.
+
+07:44.760 --> 07:50.280
+I'm the guy who plays with Org on the side, and I tune into your talks every year, and
+
+07:50.280 --> 07:54.840
+I see molecules, and I see stuff that I can barely comprehend, and I feel very humbled
+
+07:54.840 --> 07:56.840
+as a result.
+
+07:56.840 --> 08:03.320
+Well, I'm just trying to make my talks kind of unique.
+
+08:03.320 --> 08:07.960
+You are succeeding amazingly well. It reminds me, have you been talking with John Kinchin
+
+08:07.960 --> 08:15.680
+or something? Because you seem to be evolving in seminal fields, in a way, with Emacs.
+
+08:15.680 --> 08:26.160
+I have been. I'm a fan of his. I have installed CyMax and his configuration for Emacs, but
+
+08:26.160 --> 08:33.960
+I haven't. I've just started poking around with it, and I've used his configuration.
+
+08:33.960 --> 08:43.280
+I've got it up and running, and I've used GhostText with it, and I was trying to tap
+
+08:43.280 --> 08:49.880
+into his OrgRef package, which is super powerful for managing bibliographies.
+
+08:49.880 --> 08:50.880
+Yeah.
+
+08:50.880 --> 08:53.880
+Yeah, he's very inspiring.
+
+08:53.880 --> 08:59.880
+I'm glad to hear you're very much inspired. Go on, please.
+
+08:59.880 --> 09:05.280
+He's very amazing. He's very accomplished in Emacs and a very accomplished teacher,
+
+09:05.280 --> 09:11.160
+and he has now, as you probably know, a series of videos on YouTube that he's been putting
+
+09:11.160 --> 09:18.920
+together about programming. So he's teaching students at Carnegie Mellon University how
+
+09:18.920 --> 09:26.200
+to program in Python via Emacs, and he has been sharing these videos on YouTube, and
+
+09:26.200 --> 09:30.720
+they're like just 20-minute videos, kind of short snippets, but you can learn a lot from
+
+09:30.720 --> 09:33.480
+them. It's really fantastic.
+
+09:33.480 --> 09:39.240
+It's an amazing journey, isn't it? You start from a field that has nothing to do whatsoever
+
+09:39.240 --> 09:43.800
+with Emacs, and yet you find yourself so attracted to the idea of programming and making your
+
+09:43.800 --> 09:49.620
+workflow easier that you end up actually transitioning into a little bit of a programming role or
+
+09:49.620 --> 09:54.900
+teaching programming role. I mean, I was studying literature. I was all well and good in my
+
+09:54.900 --> 10:00.040
+English faculty, and then I decided to say, oh yeah, let's try Emacs, and 10 years later
+
+10:00.040 --> 10:06.160
+I find myself spending more time working on Emacs than working on my literature papers.
+
+10:06.160 --> 10:12.920
+My history is that I developed a dozen years ago, started teaching students how to do molecular
+
+10:12.920 --> 10:17.960
+graphics, and then I got into Python programming to develop tools to make it easier for them
+
+10:17.960 --> 10:22.680
+to use molecular graphics, and then evolved into making these snippets available for a
+
+10:22.680 --> 10:29.680
+wide range of text editors that meant learning about – so I prepared these snippets for
+
+10:29.680 --> 10:35.440
+about 20 different text editors, leading ones, and of course I saved for the end Emacs. First
+
+10:35.440 --> 10:42.800
+I went through Vim and the month of hell of rewiring your brain to do the Vim key bindings
+
+10:42.800 --> 10:51.920
+and then on to Emacs, which I call the ultimate text editor, because there is no other text
+
+10:51.920 --> 10:56.040
+editor beyond Emacs. It's the end of the line.
+
+10:56.040 --> 11:01.360
+I absolve you for your herrings with Vim as a result of the last comment you just made.
+
+11:01.360 --> 11:05.680
+Actually, no, I have new write of that solution. I can agree to your solution. You'll have
+
+11:05.680 --> 11:09.200
+to ask RMS tomorrow.
+
+11:09.200 --> 11:16.800
+Well, I spent a year in evil mode, but I switched about half a year ago to just Emacs key bindings
+
+11:16.800 --> 11:24.840
+and bye-bye Vim. I use Vim when I log into remote servers and have to edit something
+
+11:24.840 --> 11:30.720
+really quick, but I've probably forgotten most of the key bindings. There's only about
+
+11:30.720 --> 11:36.560
+a dozen you really need to know to get the essential work done. But yeah, it's been
+
+11:36.560 --> 11:37.560
+quite a journey.
+
+11:37.560 --> 11:45.160
+Sorry for the interruption. We do have one question, a very simple question about what
+
+11:45.160 --> 11:51.200
+was the key binding for Linux Firefox. Do you have it on top of your mind?
+
+11:51.200 --> 11:52.200
+So Linux Firefox.
+
+11:52.200 --> 11:57.240
+I'm not sure what they're referring to as well, which is why I threw you this purple,
+
+11:57.240 --> 11:59.240
+hoping that it would make sense for you.
+
+11:59.240 --> 12:00.240
+It's Control-Shift-H.
+
+12:00.240 --> 12:14.120
+I hope this answers your questions. So I think Control-Shift-H, yes. Well Blaine, I see some
+
+12:14.120 --> 12:18.120
+people have joined on BBB, but no one with a microphone still. I will tide you at the
+
+12:18.120 --> 12:21.560
+end. We are reaching the end of the day. We are reaching closing remarks and I will be
+
+12:21.560 --> 12:26.720
+making a plea for more people to join with a microphone. Last year we had pretty much
+
+12:26.720 --> 12:30.440
+the same setting. We were opening the room afterwards and people were showing up with
+
+12:30.440 --> 12:33.760
+the microphones and we had lovely discussions. So in this year, it feels like everyone's
+
+12:33.760 --> 12:38.940
+a little shy, shouldn't you know? That's the whole point is for you to talk and for
+
+12:38.940 --> 12:43.160
+us all to listen. Well Blaine, that was very insightful. Thank you so much for both the
+
+12:43.160 --> 12:44.960
+presentation and the questions. Go on.
+
+12:44.960 --> 12:51.200
+We have a question in the panel on the left and blue button. So how long have I been using
+
+12:51.200 --> 13:03.520
+Emacs? I made a commitment to use it full-time about 18 months ago, maybe 20 months ago.
+
+13:03.520 --> 13:09.240
+So I'm a newbie. I'm still in the steep part of the learning curve.
+
+13:09.240 --> 13:13.640
+You just have to provide context for the people. Blaine presented something at the last year's
+
+13:13.640 --> 13:19.440
+EmacsConf and it was as impressive as this year's presentation. And afterwards he told
+
+13:19.440 --> 13:23.760
+us, oh yeah, I've been using Emacs for six months or so. And that's where everyone's
+
+13:23.760 --> 13:28.920
+jewels dropped to the floor because some people have been using Emacs for 10 years and we
+
+13:28.920 --> 13:31.960
+couldn't even imagine doing some of the stuff you're doing with it.
+
+13:31.960 --> 13:33.960
+Thank you.
+
+13:33.960 --> 13:40.880
+Do we have any other questions? I think that's pretty much it. I'm not seeing anything appear
+
+13:40.880 --> 13:48.520
+on the other screen. I think we're pretty much good. So Blaine, I'm not going to keep
+
+13:48.520 --> 13:52.880
+you any longer. We are probably going to bring this Q&A to a close. Thank you so much for
+
+13:52.880 --> 13:59.880
+all the answers. What are we going to do for the stream? We still have a talk going on
+
+13:59.880 --> 14:05.960
+on the dev channel currently. And then we'll be going to the closing remarks for the day
+
+14:05.960 --> 14:10.680
+at about 55 of the current hour. So we are going on a break for 20 to 25 minutes. So
+
+14:10.680 --> 14:14.040
+Blaine, sorry for keeping you off stage as I'm making the announcement, but it's the
+
+14:14.040 --> 14:16.520
+best way for people to see my face as I do it.
+
+14:16.520 --> 14:20.800
+Thank you very much, Leo. I appreciate it.
+
+14:20.800 --> 14:26.720
+And thank you so much for all your time and all your answers. I will be closing BBB now
+
+14:26.720 --> 14:31.600
+and we will put some music on and some announcements and see you at the top of the hour for the
+
+14:31.600 --> 14:57.720
+others or 55 rather than top of the hour. All right. Bye bye everyone. Bye bye Blaine.
+
diff --git a/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt
new file mode 100644
index 00000000..a00d9c58
--- /dev/null
+++ b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:51.519
+Introduction
+
+00:00:51.520 --> 00:01:26.919
+GhostText and Atomic Chrome
+
+00:01:26.920 --> 00:03:13.119
+GhostText
+
+00:03:13.120 --> 00:05:57.039
+Live coding demo
+
+00:05:57.040 --> 00:07:57.159
+Editing code cells
+
+00:07:57.160 --> 00:11:11.039
+Python
+
+00:11:11.040 --> 00:11:59.599
+Julia
+
+00:11:59.600 --> 00:12:44.319
+How does GhostText work?
+
+00:12:44.320 --> 00:13:32.999
+Supported web browsers
+
+00:13:33.000 --> 00:14:21.559
+Atomic Chrome configuration
+
+00:14:21.560 --> 00:15:21.479
+Precautions
+
+00:15:21.480 --> 00:15:48.559
+Conclusions
+
+00:15:48.560 --> 00:17:07.760
+Thanks
diff --git a/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt
new file mode 100644
index 00000000..e51ef23b
--- /dev/null
+++ b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt
@@ -0,0 +1,792 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:03.839
+Hi, my name is Blaine Mooers.
+
+00:00:03.840 --> 00:00:05.399
+I'm an associate professor of biochemistry
+
+00:00:05.400 --> 00:00:08.199
+at the University of Oklahoma Health Sciences Center
+
+00:00:08.200 --> 00:00:09.759
+in Oklahoma City.
+
+00:00:09.760 --> 00:00:11.999
+I'm going to talk about the use of Emacs
+
+00:00:12.000 --> 00:00:16.239
+to edit live Jupyter notebook cells
+
+00:00:16.240 --> 00:00:20.519
+as well as text areas on web pages.
+
+00:00:20.520 --> 00:00:22.519
+So like a lot of technical workers,
+
+00:00:22.520 --> 00:00:24.879
+I find myself having to write prose
+
+00:00:24.880 --> 00:00:28.679
+in text areas on web pages,
+
+00:00:28.680 --> 00:00:31.719
+as well as working with code
+
+00:00:31.720 --> 00:00:36.999
+in Jupyter notebooks and Colab notebooks,
+
+00:00:37.000 --> 00:00:39.319
+and often I have wished for
+
+00:00:39.320 --> 00:00:43.479
+the full power of Emacs while doing so.
+
+NOTE GhostText and Atomic Chrome
+
+00:00:43.480 --> 00:00:45.319
+Well, now that is possible.
+
+00:00:45.320 --> 00:00:46.799
+Actually, there are several solutions
+
+00:00:46.800 --> 00:00:49.039
+that have been available for some time.
+
+00:00:49.040 --> 00:00:50.399
+I'm going to talk about one solution
+
+00:00:50.400 --> 00:00:55.319
+that I'm familiar with and has worked out for me.
+
+00:00:55.320 --> 00:00:58.119
+So this requires the use of two software packages,
+
+00:00:58.120 --> 00:01:01.599
+GhostText and Atomic Chrome.
+
+00:01:01.600 --> 00:01:04.239
+GhostText is an extension for the web browser,
+
+00:01:04.240 --> 00:01:07.279
+whereas Atomic Chrome is a package for Emacs.
+
+00:01:07.280 --> 00:01:10.879
+You have to have both of these.
+
+00:01:10.880 --> 00:01:13.399
+So Chrome is for the editor side
+
+00:01:13.400 --> 00:01:18.919
+and GhostText handles the browser side.
+
+NOTE GhostText
+
+00:01:18.920 --> 00:01:22.479
+The GhostText extension is available
+
+00:01:22.480 --> 00:01:26.799
+in the Chrome web store.
+
+00:01:26.800 --> 00:01:29.519
+And GhostText is represented by this icon,
+
+00:01:29.520 --> 00:01:31.519
+which has a ghost in front of the capital letter T.
+
+00:01:31.520 --> 00:01:36.399
+It is being developed by Federico Brigante.
+
+00:01:36.400 --> 00:01:41.239
+He is a very prolific JavaScript developer.
+
+00:01:41.240 --> 00:01:44.279
+He has a web page committed to GhostText,
+
+00:01:44.280 --> 00:01:47.199
+as well as a GitHub site.
+
+00:01:47.200 --> 00:01:50.159
+So here's an example of GhostText.
+
+00:01:50.160 --> 00:01:54.839
+This is a snapshot from a session
+
+00:01:54.840 --> 00:02:01.279
+that I had while editing LaTeX on the Overleaf website.
+
+00:02:01.280 --> 00:02:03.759
+Overleaf is this web service
+
+00:02:03.760 --> 00:02:09.719
+that empowers the editing of LaTeX documents on the web.
+
+00:02:09.720 --> 00:02:14.039
+So I have clicked on this GhostText icon in the toolbar.
+
+00:02:14.040 --> 00:02:17.039
+I had already opened up Emacs,
+
+00:02:17.040 --> 00:02:19.879
+and I had the Atomic Chrome server running.
+
+00:02:19.880 --> 00:02:21.799
+So a connection was established,
+
+00:02:21.800 --> 00:02:28.599
+as indicated by this blue border around this text area.
+
+00:02:28.600 --> 00:02:30.519
+And as soon as that appeared,
+
+00:02:30.520 --> 00:02:35.319
+the text appeared in a buffer inside of Emacs.
+
+00:02:35.320 --> 00:02:40.159
+So I have overlaid the area where normally the compiled PDF
+
+00:02:40.160 --> 00:02:43.919
+would appear in an Overleaf session.
+
+00:02:43.920 --> 00:02:47.679
+So I'm using a configuration for LaTeX that I developed,
+
+00:02:47.680 --> 00:02:52.159
+which is available through the MooersLab GitHub site.
+
+00:02:52.160 --> 00:02:55.919
+I also gave a talk about how I use LaTeX in Emacs
+
+00:02:55.920 --> 00:02:58.839
+at the Berlin Emacs meetup in August.
+
+00:02:58.840 --> 00:03:00.039
+This talk was not recorded,
+
+00:03:00.040 --> 00:03:05.119
+but the slides are available on this website.
+
+NOTE Live coding demo
+
+00:03:05.120 --> 00:03:09.519
+So I would like to now switch to a little live coding
+
+00:03:09.520 --> 00:03:12.359
+to make this a little more interesting.
+
+00:03:12.360 --> 00:03:22.439
+So I start my day at this other website called 750Words.
+
+00:03:22.440 --> 00:03:25.279
+This site just takes plain text,
+
+00:03:25.280 --> 00:03:28.559
+but I like to write in LaTeX.
+
+00:03:28.560 --> 00:03:31.519
+So GhostText came to my rescue
+
+00:03:31.520 --> 00:03:34.479
+when I started using this everyday last May.
+
+00:03:34.480 --> 00:03:37.239
+So I clicked on the GhostText icon.
+
+00:03:37.240 --> 00:03:39.759
+It highlighted that area in blue.
+
+00:03:39.760 --> 00:03:41.839
+There's some boilerplate
+
+00:03:41.840 --> 00:03:45.919
+that I like to start my day with.
+
+00:03:45.920 --> 00:03:50.599
+I like to get a list of my deadlines
+
+00:03:50.600 --> 00:03:54.239
+that are coming up, as shown here,
+
+00:03:54.240 --> 00:03:55.839
+for the next several months.
+
+00:03:55.840 --> 00:03:59.399
+And then I have landed at this tab stop.
+
+00:03:59.400 --> 00:04:04.239
+And so I had issued a tab trigger
+
+00:04:04.240 --> 00:04:09.519
+which inserted this almost 50 lines of text
+
+00:04:09.520 --> 00:04:13.639
+from a snippet through Yasnippet.
+
+00:04:13.640 --> 00:04:17.479
+And then I'll change this text to whatever.
+
+00:04:17.480 --> 00:04:29.279
+And then I can hit TAB to move to the next site.
+
+00:04:29.280 --> 00:04:38.439
+I was dead tired last night, so I fell asleep at my desk,
+
+00:04:38.440 --> 00:04:42.439
+and whatever. So I just keep on going
+
+00:04:42.440 --> 00:04:47.319
+and then hit TAB again and enter my "To Be Done" items.
+
+00:04:47.320 --> 00:04:50.239
+And then what I love about Emacs is that
+
+00:04:50.240 --> 00:04:56.119
+you can hit C-c C-j to insert a new item and so forth,
+
+00:04:56.120 --> 00:05:03.239
+so you can extend the list.
+
+00:05:03.240 --> 00:05:05.079
+Initially, I just have 10 items.
+
+00:05:05.080 --> 00:05:08.839
+I'm going to have more. And on I go,
+
+00:05:08.840 --> 00:05:12.359
+using the full power of LaTeX.
+
+00:05:12.360 --> 00:05:16.119
+So I have configured Atomic Chrome
+
+00:05:16.120 --> 00:05:19.999
+so it will recognize this website as a –
+
+00:05:20.000 --> 00:05:21.399
+it will open up this website –
+
+00:05:21.400 --> 00:05:26.159
+the connection to this website with this buffer
+
+00:05:26.160 --> 00:05:36.559
+in the LaTeX major mode. To turn this off,
+
+00:05:36.560 --> 00:05:40.319
+we can close – simply just close the buffer
+
+00:05:40.320 --> 00:05:42.959
+and that will shut things down.
+
+00:05:42.960 --> 00:05:46.399
+On the browser side, you can right-click on the icon
+
+00:05:46.400 --> 00:05:49.039
+and disconnect GhostText on this page.
+
+NOTE Editing code cells
+
+00:05:49.040 --> 00:05:53.639
+Okay, let's go to a different situation.
+
+00:05:53.640 --> 00:05:57.359
+This is not a feature that's advertised by the developer,
+
+00:05:57.360 --> 00:06:00.119
+but I discovered that you can edit code cells
+
+00:06:00.120 --> 00:06:02.799
+(or any kind of cell for that matter)
+
+00:06:02.800 --> 00:06:04.439
+in a Jupyter Notebook.
+
+00:06:04.440 --> 00:06:05.719
+However, we have a challenge here.
+
+00:06:05.720 --> 00:06:09.319
+We have three text areas open – three code cells.
+
+00:06:09.320 --> 00:06:14.759
+So if we click on the GhostText icon,
+
+00:06:14.760 --> 00:06:17.479
+these three areas will show up in green
+
+00:06:17.480 --> 00:06:19.119
+and we'll be prompted to select the one
+
+00:06:19.120 --> 00:06:20.279
+that we want to activate.
+
+00:06:20.280 --> 00:06:22.359
+We want to activate the one with text.
+
+00:06:22.360 --> 00:06:31.399
+So then we can go in here and make edits, of course,
+
+00:06:31.400 --> 00:06:33.359
+and you can do this in Emacs
+
+00:06:33.360 --> 00:06:35.639
+or we can do it in the browser. It doesn't matter.
+
+00:06:35.640 --> 00:06:38.359
+You saw me editing in Emacs,
+
+00:06:38.360 --> 00:06:40.359
+but we can also make the edits
+
+00:06:40.360 --> 00:06:44.879
+in the text area of the browser
+
+00:06:44.880 --> 00:06:47.519
+and they will show up immediately in Emacs.
+
+00:06:47.520 --> 00:06:54.439
+So we could change the case of that M and that's going to –
+
+00:06:54.440 --> 00:06:59.279
+shows up over here. Okay, we can run this code.
+
+00:06:59.280 --> 00:07:03.439
+So this is R, one of the three major
+
+00:07:03.440 --> 00:07:05.159
+programming languages for data science.
+
+00:07:05.160 --> 00:07:07.319
+At least, Jupyter is supposed to be
+
+00:07:07.320 --> 00:07:13.479
+a combination of Julia, Python, and R.
+
+00:07:13.480 --> 00:07:17.559
+So we're running mcmc to get the posterior distribution
+
+00:07:17.560 --> 00:07:21.119
+and we're going to plot those out with this pyplots package,
+
+00:07:21.120 --> 00:07:24.079
+and we have these beautiful plots showing the median
+
+00:07:24.080 --> 00:07:27.039
+of the posterior distribution for four variables in –
+
+00:07:27.040 --> 00:07:31.559
+four parameters in the CARS data set,
+
+00:07:31.560 --> 00:07:38.039
+which is available – built into the R package.
+
+00:07:38.040 --> 00:07:45.559
+And then these shaded areas are the 80% interval.
+
+00:07:45.560 --> 00:07:49.159
+Okay. Oops.
+
+NOTE Python
+
+00:07:49.160 --> 00:08:07.639
+So now for the Python side,
+
+00:08:07.640 --> 00:08:13.359
+here's an example in which I'm going to actually
+
+00:08:13.360 --> 00:08:18.679
+insert a snippet of that cell
+
+00:08:18.680 --> 00:08:27.279
+and then I'm going to enter nvlig for nglview ligand,
+
+00:08:27.280 --> 00:08:43.319
+and just hit enter. Oops. Hit TAB, excuse me,
+
+00:08:43.320 --> 00:08:47.999
+and we don't need this line of code, so delete that.
+
+00:08:48.000 --> 00:08:52.199
+Yep, we want to load up this pdb file
+
+00:08:52.200 --> 00:08:54.279
+that's in this subdirectory.
+
+00:08:54.280 --> 00:08:56.919
+So the pdb file is a plain text file
+
+00:08:56.920 --> 00:08:58.839
+that contains atomic coordinates
+
+00:08:58.840 --> 00:09:00.159
+of protein crystal structure.
+
+00:09:00.160 --> 00:09:02.999
+This protein happens to be important in cancer
+
+00:09:03.000 --> 00:09:09.079
+and we have – we screened by docking 55,000 compounds
+
+00:09:09.080 --> 00:09:10.679
+on a supercomputer
+
+00:09:10.680 --> 00:09:12.743
+and then we did MD [molecular dynamics] simulations
+
+00:09:12.744 --> 00:09:14.159
+of the top 10 [actually 20] leads.
+
+00:09:14.160 --> 00:09:18.319
+Twelve of them had the compound remain bound
+
+00:09:18.320 --> 00:09:19.679
+during the period of the simulation,
+
+00:09:19.680 --> 00:09:22.559
+so those have some potential for –
+
+00:09:22.560 --> 00:09:25.159
+and require experimental validation.
+
+00:09:25.160 --> 00:09:28.639
+So we'll run this chunk of code,
+
+00:09:28.640 --> 00:09:30.839
+and this will give a view of the molecule
+
+00:09:30.840 --> 00:09:36.479
+that we can interact with by using the mouse.
+
+00:09:36.480 --> 00:09:39.879
+But I want to share this with my colleague.
+
+00:09:39.880 --> 00:09:42.919
+My colleague is not set up to use Jupyter,
+
+00:09:42.920 --> 00:09:46.959
+but instead we can write this out to a HTML file,
+
+00:09:46.960 --> 00:09:48.319
+which I have loaded up already.
+
+00:09:48.320 --> 00:09:55.319
+And so we can actually – perhaps.
+
+00:09:55.320 --> 00:10:01.679
+We click on these two arrows pointing at each other,
+
+00:10:01.680 --> 00:10:05.159
+and we can get a full screen view of this molecule
+
+00:10:05.160 --> 00:10:10.439
+and he can identify each atom in this structure.
+
+00:10:10.440 --> 00:10:12.719
+Over a thousand atoms present.
+
+00:10:12.720 --> 00:10:14.959
+We're just hovering over a specific atom.
+
+00:10:14.960 --> 00:10:27.759
+So shown in gray is the ligand that is bound. Okay.
+
+00:10:27.760 --> 00:10:32.079
+So we still have this box selected
+
+00:10:32.080 --> 00:10:36.559
+and we still have these two different –
+
+00:10:36.560 --> 00:10:40.519
+so for each of the – our selected text areas
+
+00:10:40.520 --> 00:11:03.839
+we have a separate – we have a separate buffer open. Okay.
+
+NOTE Julia
+
+00:11:03.840 --> 00:11:06.839
+To wrap things up here, here's an example of using –
+
+00:11:06.840 --> 00:11:08.919
+with evolving Julia code.
+
+00:11:08.920 --> 00:11:12.919
+And so this Julia code in this cell is in a Emacs buffer.
+
+00:11:12.920 --> 00:11:19.279
+So you've got an idea now, I think.
+
+00:11:19.280 --> 00:11:23.759
+So in terms of plain text areas like in Overleaf
+
+00:11:23.760 --> 00:11:27.519
+and then these cells in Jupyter Notebooks,
+
+00:11:27.520 --> 00:11:30.959
+these are other areas that can be edited
+
+00:11:30.960 --> 00:11:37.919
+like in the text areas within Outlook Webmail and Gmail.
+
+00:11:37.920 --> 00:11:42.639
+Instead of having to point with the mouse
+
+00:11:42.640 --> 00:11:43.519
+or click with the mouse,
+
+00:11:43.520 --> 00:11:48.079
+one can also use keybindings or keyboard shortcuts.
+
+00:11:48.080 --> 00:11:51.599
+So here are the ones for three major operating systems.
+
+NOTE How does GhostText work?
+
+00:11:51.600 --> 00:11:54.639
+So how does GhostText work?
+
+00:11:54.640 --> 00:11:57.199
+Main thing is you have to open up Emacs
+
+00:11:57.200 --> 00:11:59.679
+and get this Atomic Chrome server running.
+
+00:11:59.680 --> 00:12:03.119
+And then with it up and going,
+
+00:12:03.120 --> 00:12:06.679
+GhostText will be able to – has to be activated
+
+00:12:06.680 --> 00:12:09.639
+and it will find the GhostText server
+
+00:12:09.640 --> 00:12:15.079
+through the localhost port 4001.
+
+00:12:15.080 --> 00:12:19.039
+Put that into the web browser.
+
+00:12:19.040 --> 00:12:21.639
+If you navigate to that port,
+
+00:12:21.640 --> 00:12:23.719
+you'll get output that looks like this
+
+00:12:23.720 --> 00:12:25.639
+if everything's working well.
+
+00:12:25.640 --> 00:12:27.919
+Otherwise, you'll get a error message
+
+00:12:27.920 --> 00:12:30.519
+and it should have a port socket –
+
+00:12:30.520 --> 00:12:34.319
+a web socket port number.
+
+00:12:34.320 --> 00:12:36.319
+It will not be the same every time.
+
+NOTE Supported web browsers
+
+00:12:36.320 --> 00:12:42.319
+So these are the supported web browsers
+
+00:12:42.320 --> 00:12:45.359
+in addition to Chrome. These are supported
+
+00:12:45.360 --> 00:12:47.279
+and likewise anything in these –
+
+00:12:47.280 --> 00:12:49.879
+any browser related to these
+
+00:12:49.880 --> 00:12:53.079
+can probably use these extensions.
+
+00:12:53.080 --> 00:12:56.359
+For example, the Brave browser will use Chrome extension
+
+00:12:56.360 --> 00:13:01.679
+and the Firefox browser extension works with WaterFox.
+
+00:13:01.680 --> 00:13:05.239
+These are the supported editors.
+
+00:13:05.240 --> 00:13:10.199
+Each editor has its own extension
+
+00:13:10.200 --> 00:13:15.719
+and this GhostText was initially developed for SublimeText.
+
+00:13:15.720 --> 00:13:17.919
+So if you have SublimeText,
+
+00:13:17.920 --> 00:13:21.959
+then you can use its smooth operation as positive control
+
+00:13:21.960 --> 00:13:24.999
+when things go wrong with Emacs.
+
+NOTE Atomic Chrome configuration
+
+00:13:25.000 --> 00:13:29.479
+This is Atomic. This is a GitHub site for Atomic Chrome.
+
+00:13:29.480 --> 00:13:33.159
+Atomic Chrome is available for installation through Melpa.
+
+00:13:33.160 --> 00:13:40.319
+This is my configuration for Atomic Chrome.
+
+00:13:40.320 --> 00:13:45.519
+So I have this setup so the server starts whenever I log in,
+
+00:13:45.520 --> 00:13:50.319
+and I have it set up so that default major mode is Python
+
+00:13:50.320 --> 00:13:55.559
+to deal with the Jupyter notebooks and Colab notebooks.
+
+00:13:55.560 --> 00:13:57.719
+And then I have major modes
+
+00:13:57.720 --> 00:13:59.839
+for these other websites defined below.
+
+00:13:59.840 --> 00:14:06.079
+This is a testing site so the developer has made
+
+00:14:06.080 --> 00:14:08.119
+to help with troubleshooting.
+
+00:14:08.120 --> 00:14:11.159
+He also has a protocol on his website
+
+00:14:11.160 --> 00:14:13.559
+to follow during troubleshooting.
+
+NOTE Precautions
+
+00:14:13.560 --> 00:14:16.639
+So here are some precautions.
+
+00:14:16.640 --> 00:14:19.079
+You'll find that GhostText doesn't work with Pluto.
+
+00:14:19.080 --> 00:14:21.239
+Pluto is a new computational notebook
+
+00:14:21.240 --> 00:14:23.479
+for working with Julia.
+
+00:14:23.480 --> 00:14:27.039
+My suggestion would be just to run IJulia in Jupyter.
+
+00:14:27.040 --> 00:14:31.999
+It also doesn't work, of course, with RStudio.
+
+00:14:32.000 --> 00:14:35.199
+Even though RStudio sort of resembles
+
+00:14:35.200 --> 00:14:38.999
+a web page, web browser, it's not.
+
+00:14:39.000 --> 00:14:41.359
+Of course, you can always run R,
+
+00:14:41.360 --> 00:14:48.239
+as you've just seen, using the IPy kernel.
+
+00:14:48.240 --> 00:14:52.239
+I will also caution you that if you use the Emacs server,
+
+00:14:52.240 --> 00:14:53.519
+you may run into issues
+
+00:14:53.520 --> 00:14:57.999
+with the server competing with the port 4001.
+
+00:14:58.000 --> 00:15:01.919
+So instead, you should probably configure the Emacs server
+
+00:15:01.920 --> 00:15:04.999
+to use a specific port.
+
+00:15:05.000 --> 00:15:07.639
+So far – although I haven't done that myself –
+
+00:15:07.640 --> 00:15:10.999
+so far, I haven't found any conflicts
+
+00:15:11.000 --> 00:15:13.479
+with the Org Roam user interface.
+
+NOTE Conclusions
+
+00:15:13.480 --> 00:15:20.919
+So my conclusions are: GhostText allows you to edit prose
+
+00:15:20.920 --> 00:15:24.439
+with your favorite major mode
+
+00:15:24.440 --> 00:15:28.119
+in the text areas of web pages
+
+00:15:28.120 --> 00:15:31.079
+and in the cells of Jupyter notebooks.
+
+00:15:31.080 --> 00:15:34.359
+This allows you to tap into snippets
+
+00:15:34.360 --> 00:15:37.519
+and thereby save time as you have – probably have –
+
+00:15:37.520 --> 00:15:39.719
+hopefully got an idea of.
+
+NOTE Thanks
+
+00:15:39.720 --> 00:15:44.039
+I'd like to thank my friends and mentors
+
+00:15:44.040 --> 00:15:46.599
+who've helped me out during my second year
+
+00:15:46.600 --> 00:15:49.359
+in my Emacs learning spiral.
+
+00:15:49.360 --> 00:15:55.839
+These include my local colleagues.
+
+00:15:55.840 --> 00:15:58.679
+We meet once a month in the Oklahoma Data Science Workshop.
+
+00:15:58.680 --> 00:16:01.719
+Last July, I gave a presentation about GhostText.
+
+00:16:01.720 --> 00:16:08.359
+And then also my friends at Berlin and Austin Emacs meetups
+
+00:16:08.360 --> 00:16:12.959
+and in the UK research software engineer
+
+00:16:12.960 --> 00:16:17.599
+Emacs research Slack channel.
+
+00:16:17.600 --> 00:16:18.919
+So I don't attend these every month,
+
+00:16:18.920 --> 00:16:21.439
+but I try to make the meetings as often as I can.
+
+00:16:21.440 --> 00:16:25.399
+Then I'm supported by the following grants,
+
+00:16:25.400 --> 00:16:28.359
+which allow me to spend
+
+00:16:28.360 --> 00:16:30.679
+at least some time each day in Emacs.
+
+00:16:30.680 --> 00:16:34.960
+I'll be happy to take any questions.
diff --git a/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt b/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt
new file mode 100644
index 00000000..836e8d54
--- /dev/null
+++ b/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt
@@ -0,0 +1,43 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:39.320
+Introduction
+
+00:00:39.320 --> 00:01:48.520
+Justfiles
+
+00:01:48.520 --> 00:02:27.680
+Executing recipes
+
+00:02:27.680 --> 00:02:56.440
+Other features
+
+00:02:56.440 --> 00:04:19.280
+Comparison with Makefiles
+
+00:04:19.280 --> 00:04:52.400
+justl.el
+
+00:04:52.400 --> 00:06:17.280
+Executing recipes in Emacs
+
+00:06:17.280 --> 00:06:36.600
+Options
+
+00:06:36.600 --> 00:06:57.320
+Eshell
+
+00:06:57.320 --> 00:07:15.520
+Going to the recipe line
+
+00:07:15.520 --> 00:07:39.560
+Re-executing recipes
+
+00:07:39.560 --> 00:08:56.600
+Example
+
+00:08:56.600 --> 00:09:34.680
+justl-exec-recipe-in-dir
+
+00:09:34.680 --> 00:10:02.040
+End
diff --git a/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt b/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt
new file mode 100644
index 00000000..cd239aa8
--- /dev/null
+++ b/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt
@@ -0,0 +1,826 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:04.240
+Hi everyone, I am Sibi Prabakaran
+
+00:00:04.240 --> 00:00:09.560
+and welcome to my session on Justl Emacs Mode.
+
+00:00:09.560 --> 00:00:11.640
+A bit about me, I have been working
+
+00:00:11.640 --> 00:00:12.880
+as a Haskell Engineer
+
+00:00:12.880 --> 00:00:15.600
+at FPComplete for the last 4 years.
+
+00:00:15.600 --> 00:00:17.400
+I am based out of India.
+
+00:00:17.400 --> 00:00:20.680
+I occasionally blog at my website psibi.in
+
+00:00:20.680 --> 00:00:23.560
+where you can find more information about me.
+
+00:00:23.560 --> 00:00:25.000
+I have been using Emacs
+
+00:00:25.000 --> 00:00:26.920
+for more than a decade now.
+
+00:00:26.920 --> 00:00:28.160
+I help in the maintenance
+
+00:00:28.160 --> 00:00:31.080
+of the Terraform client for LSP mode.
+
+00:00:31.080 --> 00:00:33.960
+I have also authored dhall-mode and rego-mode
+
+00:00:33.960 --> 00:00:35.000
+which are the major modes
+
+00:00:35.000 --> 00:00:39.320
+for the respective languages.
+
+00:00:39.320 --> 00:00:40.680
+Before jumping into the demo
+
+00:00:40.680 --> 00:00:42.040
+of the Emacs package,
+
+00:00:42.040 --> 00:00:44.160
+I would like to give a brief introduction
+
+00:00:44.160 --> 00:00:46.280
+about justfiles and what it is.
+
+00:00:46.280 --> 00:00:49.000
+I will also try to compare it with Makefiles
+
+00:00:49.000 --> 00:00:53.640
+as it takes a lot of inspiration from it.
+
+00:00:53.640 --> 00:00:55.640
+What you see currently in the buffer
+
+00:00:55.640 --> 00:00:57.320
+is a sample justfile.
+
+00:00:57.320 --> 00:00:59.480
+If you have previously used Makefiles,
+
+00:00:59.480 --> 00:01:00.480
+you would be able to see
+
+00:01:00.480 --> 00:01:02.280
+that there is quite a bit of similarity
+
+00:01:02.280 --> 00:01:03.560
+between them.
+
+00:01:03.560 --> 00:01:05.080
+Anything that starts with hash
+
+00:01:05.080 --> 00:01:07.120
+is a documentation comment.
+
+00:01:07.120 --> 00:01:09.160
+You can see that I have the first recipe
+
+00:01:09.160 --> 00:01:10.920
+which is named as default.
+
+00:01:10.920 --> 00:01:12.520
+So if you run the just executable
+
+00:01:12.520 --> 00:01:14.120
+without any arguments,
+
+00:01:14.120 --> 00:01:15.400
+by default it is going to run
+
+00:01:15.400 --> 00:01:17.200
+the first recipe.
+
+00:01:17.200 --> 00:01:18.440
+This recipe's definition
+
+00:01:18.440 --> 00:01:20.080
+calls the just command
+
+00:01:20.080 --> 00:01:21.920
+in turn, with the two arguments,
+
+00:01:21.920 --> 00:01:24.080
+namely --list and --unsorted,
+
+00:01:24.080 --> 00:01:25.680
+which basically asks just
+
+00:01:25.680 --> 00:01:27.800
+to list down all the recipes
+
+00:01:27.800 --> 00:01:29.680
+in an unsorted order.
+
+00:01:29.680 --> 00:01:32.400
+Each line of each recipe is executed
+
+00:01:32.400 --> 00:01:33.920
+by a fresh shell.
+
+00:01:33.920 --> 00:01:35.120
+That pretty much
+
+00:01:35.120 --> 00:01:36.360
+is the high level overview
+
+00:01:36.360 --> 00:01:38.520
+of getting started to use this tool.
+
+00:01:38.520 --> 00:01:40.760
+This tool assumes the presence of a shell
+
+00:01:40.760 --> 00:01:43.480
+which is bash in most GNU/Linux systems,
+
+00:01:43.480 --> 00:01:44.840
+but you can configure it
+
+00:01:44.840 --> 00:01:47.160
+to explicitly use any specific shell
+
+00:01:47.160 --> 00:01:48.520
+you have in mind.
+
+00:01:48.520 --> 00:01:50.480
+Let me in fact go and try executing
+
+00:01:50.480 --> 00:01:52.600
+the first recipe.
+
+00:01:52.600 --> 00:01:53.760
+I will first execute it
+
+00:01:53.760 --> 00:01:55.160
+without any arguments,
+
+00:01:55.160 --> 00:01:59.000
+which will force it to run the first recipe.
+
+00:01:59.000 --> 00:02:01.800
+As you can see, it listed all the recipes.
+
+00:02:01.800 --> 00:02:03.200
+Now I can actually execute
+
+00:02:03.200 --> 00:02:04.200
+a particular recipe
+
+00:02:04.200 --> 00:02:06.640
+by passing an explicit recipe name.
+
+00:02:06.640 --> 00:02:08.400
+Let me execute the hello recipe now
+
+00:02:08.400 --> 00:02:11.920
+which will basically print "hello world".
+
+00:02:11.920 --> 00:02:15.320
+It works as expected.
+
+00:02:15.320 --> 00:02:17.040
+As you can see, that's all that's required
+
+00:02:17.040 --> 00:02:18.600
+to get started with this tool.
+
+00:02:18.600 --> 00:02:20.348
+You create a file named justfile
+
+00:02:20.349 --> 00:02:22.800
+in a directory, define some recipes
+
+00:02:22.800 --> 00:02:23.640
+and then run them
+
+00:02:23.640 --> 00:02:27.680
+via the just executable.
+
+00:02:27.680 --> 00:02:28.440
+Note that there are
+
+00:02:28.440 --> 00:02:30.680
+various other features in justfile.
+
+00:02:30.680 --> 00:02:32.240
+You can define variables,
+
+00:02:32.240 --> 00:02:33.280
+mark some variables
+
+00:02:33.280 --> 00:02:35.520
+to be exported as environment variables,
+
+00:02:35.520 --> 00:02:37.280
+have optional parameters
+
+00:02:37.280 --> 00:02:38.800
+that can be passed to a recipe.
+
+00:02:38.800 --> 00:02:40.960
+You can also set up dependency
+
+00:02:40.960 --> 00:02:42.480
+between recipes
+
+00:02:42.480 --> 00:02:44.920
+and also write scripts within a recipe
+
+00:02:44.920 --> 00:02:46.800
+in a language of your choice.
+
+00:02:46.800 --> 00:02:48.560
+I won't be going into the details,
+
+00:02:48.560 --> 00:02:50.120
+but I encourage you to go through
+
+00:02:50.120 --> 00:02:51.640
+the very helpful manual page
+
+00:02:51.640 --> 00:02:56.440
+to learn more about it.
+
+00:02:56.440 --> 00:02:59.200
+Also, let me compare it with Makefiles.
+
+00:02:59.200 --> 00:03:00.800
+I do think it's kind of unfair
+
+00:03:00.800 --> 00:03:02.160
+to compare both the tools
+
+00:03:02.160 --> 00:03:04.760
+since make is a build automation tool
+
+00:03:04.760 --> 00:03:07.520
+whereas just's goal is a task runner,
+
+00:03:07.520 --> 00:03:09.320
+and since just doesn't try to be
+
+00:03:09.320 --> 00:03:10.440
+a build system,
+
+00:03:10.440 --> 00:03:12.480
+it can avoid the associated complexity
+
+00:03:12.480 --> 00:03:15.080
+that comes with the tool like make.
+
+00:03:15.080 --> 00:03:17.040
+There is one nice historical fact
+
+00:03:17.040 --> 00:03:18.200
+about just.
+
+00:03:18.200 --> 00:03:19.560
+The initial version of just
+
+00:03:19.560 --> 00:03:21.640
+relied on make command being available,
+
+00:03:21.640 --> 00:03:23.360
+so it was basically
+
+00:03:23.360 --> 00:03:25.440
+a glorified wrapper around it.
+
+00:03:25.440 --> 00:03:26.440
+But it was removed,
+
+00:03:26.440 --> 00:03:27.760
+and justfile doesn't have
+
+00:03:27.760 --> 00:03:29.680
+that dependency anymore.
+
+00:03:29.680 --> 00:03:31.680
+If you are using make as a task runner
+
+00:03:31.680 --> 00:03:33.400
+then you would have to use
+
+00:03:33.400 --> 00:03:35.400
+something called phony targets.
+
+00:03:35.400 --> 00:03:37.240
+I don't want to go into the details,
+
+00:03:37.240 --> 00:03:39.240
+but makefiles have good reason
+
+00:03:39.240 --> 00:03:41.040
+for why they need something like that.
+
+00:03:41.040 --> 00:03:44.080
+Since justfile is not a build system,
+
+00:03:44.080 --> 00:03:45.200
+it doesn't have to deal with them.
+
+00:03:45.200 --> 00:03:47.400
+The error message
+
+00:03:47.400 --> 00:03:48.680
+and user experience of this tool,
+
+00:03:48.680 --> 00:03:50.480
+in my opinion, is better.
+
+00:03:50.480 --> 00:03:52.760
+To show you a concrete example,
+
+00:03:52.760 --> 00:03:54.920
+justfile errors out by default
+
+00:03:54.920 --> 00:03:56.400
+if you have duplicate recipes.
+
+00:03:56.400 --> 00:03:58.840
+This is in contrast with make
+
+00:03:58.840 --> 00:04:00.720
+where I believe it prints out
+
+00:04:00.720 --> 00:04:01.760
+a warning about it,
+
+00:04:01.760 --> 00:04:03.840
+but still executes the target action.
+
+00:04:03.840 --> 00:04:06.600
+Justfile also gives you the ability
+
+00:04:06.600 --> 00:04:08.200
+to easily create scripts
+
+00:04:08.200 --> 00:04:10.680
+written in any language within a recipe.
+
+00:04:10.680 --> 00:04:12.680
+My personal opinion is that
+
+00:04:12.680 --> 00:04:14.200
+if you are using makefile
+
+00:04:14.200 --> 00:04:15.200
+as a task runner,
+
+00:04:15.200 --> 00:04:17.440
+you might want to check out justfile
+
+00:04:17.440 --> 00:04:19.280
+to see if it will suit your workflow.
+
+00:04:19.280 --> 00:04:25.000
+With that, I'll move on to justl.el,
+
+00:04:25.000 --> 00:04:26.800
+which is basically an Emacs package
+
+00:04:26.800 --> 00:04:28.120
+for driving justfiles.
+
+00:04:28.120 --> 00:04:29.920
+I started writing this tool
+
+00:04:29.920 --> 00:04:31.200
+around a year ago
+
+00:04:31.200 --> 00:04:33.720
+when my usage of justfile increased.
+
+00:04:33.720 --> 00:04:35.440
+The objective of the tool
+
+00:04:35.440 --> 00:04:37.480
+is to reduce the usage of the CLI
+
+00:04:37.480 --> 00:04:40.040
+and drive the execution of the recipes
+
+00:04:40.040 --> 00:04:41.480
+natively within the editor.
+
+00:04:41.480 --> 00:04:44.000
+Let me take you back to the justfile
+
+00:04:44.000 --> 00:04:45.240
+which we saw previously.
+
+00:04:45.240 --> 00:04:47.320
+This time we will drive it
+
+00:04:47.320 --> 00:04:48.840
+within the editor itself,
+
+00:04:48.840 --> 00:04:51.400
+instead of executing commands via vterm
+
+00:04:51.400 --> 00:04:52.400
+as done previously.
+
+00:04:52.400 --> 00:04:54.640
+So the idea is you either
+
+00:04:54.640 --> 00:04:56.000
+open the justfile,
+
+00:04:56.000 --> 00:04:57.840
+or any other file in the directory.
+
+00:04:57.840 --> 00:04:59.160
+That doesn't matter, actually.
+
+00:04:59.160 --> 00:05:00.720
+Once you do that,
+
+00:05:00.720 --> 00:05:02.360
+you call the justl command.
+
+00:05:02.360 --> 00:05:06.640
+Now as you can see, it lists down
+
+00:05:06.640 --> 00:05:07.520
+all the recipes,
+
+00:05:07.520 --> 00:05:09.280
+along with the description if present.
+
+00:05:09.280 --> 00:05:11.520
+You can move on to different recipes
+
+00:05:11.520 --> 00:05:13.080
+by your usual keybinding.
+
+00:05:13.080 --> 00:05:15.680
+And for executing a specific recipe,
+
+00:05:15.680 --> 00:05:18.240
+you have to press the e keybinding,
+
+00:05:18.240 --> 00:05:19.720
+and that will run the recipe
+
+00:05:19.720 --> 00:05:21.600
+and show its output
+
+00:05:21.600 --> 00:05:23.400
+on a special buffer named *just*
+
+00:05:23.400 --> 00:05:25.000
+which is built on top of
+
+00:05:25.000 --> 00:05:27.040
+the compilation mode available in Emacs.
+
+00:05:27.040 --> 00:05:28.760
+Let me actually try
+
+00:05:28.760 --> 00:05:30.240
+executing the hello recipe
+
+00:05:30.240 --> 00:05:32.440
+which we previously executed in vterm.
+
+00:05:32.440 --> 00:05:38.160
+As you can see,
+
+00:05:38.160 --> 00:05:39.680
+it executed the recipe
+
+00:05:39.680 --> 00:05:41.120
+and the "hello world" output
+
+00:05:41.120 --> 00:05:42.400
+is visible in the just buffer.
+
+00:05:42.400 --> 00:05:44.400
+You can also see that there is
+
+00:05:44.400 --> 00:05:45.880
+other metadata like
+
+00:05:45.880 --> 00:05:47.480
+when it started executing
+
+00:05:47.480 --> 00:05:49.520
+and when did it finish executing.
+
+00:05:49.520 --> 00:05:51.520
+If a recipe execution fails,
+
+00:05:51.520 --> 00:05:53.160
+it will also change the color
+
+00:05:53.160 --> 00:05:55.760
+and print the corresponding exit code.
+
+00:05:55.760 --> 00:05:57.320
+Let me actually show you
+
+00:05:57.320 --> 00:05:59.080
+by modifying the hello recipe
+
+00:05:59.080 --> 00:06:03.600
+and making it exit.
+
+00:06:03.600 --> 00:06:08.400
+As you can see,
+
+00:06:08.400 --> 00:06:10.480
+it clearly indicates the error message now.
+
+00:06:10.480 --> 00:06:12.720
+That is a pretty much
+
+00:06:12.720 --> 00:06:14.240
+a good high level overview
+
+00:06:14.240 --> 00:06:15.680
+of how to execute recipes
+
+00:06:15.680 --> 00:06:17.280
+using this Emacs extension.
+
+00:06:17.280 --> 00:06:21.720
+If I press the h or the ? key,
+
+00:06:21.720 --> 00:06:23.520
+it will display the various ways
+
+00:06:23.520 --> 00:06:24.160
+to drive it.
+
+00:06:24.160 --> 00:06:27.480
+Now as you can see,
+
+00:06:27.480 --> 00:06:29.320
+you can pass various options to it.
+
+00:06:29.320 --> 00:06:31.600
+I find the dry run option effective
+
+00:06:31.600 --> 00:06:34.560
+whenever I have to print the recipe contents
+
+00:06:34.560 --> 00:06:36.600
+without actually executing the recipe.
+
+00:06:36.600 --> 00:06:39.720
+There are also various ways to execute it.
+
+00:06:39.720 --> 00:06:42.960
+You can use Emacs's eshell to execute it
+
+00:06:42.960 --> 00:06:45.040
+by pressing the E keybinding.
+
+00:06:45.040 --> 00:06:48.400
+Let me try executing the hello recipe again,
+
+00:06:48.400 --> 00:06:50.760
+but this time via Emacs's eshell.
+
+00:06:50.760 --> 00:06:54.840
+As you can see now I have an eshell instance
+
+00:06:54.840 --> 00:06:57.320
+where it executed the just hello recipe.
+
+00:06:57.320 --> 00:07:02.440
+You can also directly
+
+00:07:02.440 --> 00:07:03.680
+go to the recipe line
+
+00:07:03.680 --> 00:07:05.000
+by pressing the return key.
+
+00:07:05.000 --> 00:07:08.040
+So let's say if I want to
+
+00:07:08.040 --> 00:07:09.360
+go to the recipe build app
+
+00:07:09.360 --> 00:07:12.160
+all I have to do is press the return key
+
+00:07:12.160 --> 00:07:14.400
+and it will go to the just file
+
+00:07:14.400 --> 00:07:15.520
+with the proper line.
+
+00:07:15.520 --> 00:07:19.800
+You can also re-execute the same recipe
+
+00:07:19.800 --> 00:07:21.320
+from the output just buffer.
+
+00:07:21.320 --> 00:07:23.320
+I find this very helpful
+
+00:07:23.320 --> 00:07:25.080
+when iterating on certain things.
+
+00:07:25.080 --> 00:07:26.720
+In my day job,
+
+00:07:26.720 --> 00:07:29.240
+I often have to work with a Kubernetes cluster,
+
+00:07:29.240 --> 00:07:30.480
+and I would have to write
+
+00:07:30.480 --> 00:07:33.360
+resource manifest files for applications.
+
+00:07:33.360 --> 00:07:36.376
+Having the ability to run the recipes
+
+00:07:36.377 --> 00:07:37.942
+while iterating on the project
+
+00:07:37.943 --> 00:07:39.560
+is very useful, in my opinion.
+
+00:07:39.560 --> 00:07:42.000
+Let me actually show you
+
+00:07:42.000 --> 00:07:43.680
+an example of what I am talking about.
+
+00:07:43.680 --> 00:07:46.680
+Let me run the build app recipe now,
+
+00:07:46.680 --> 00:07:48.400
+which will basically build the manifest
+
+00:07:48.400 --> 00:07:49.600
+and print it out.
+
+00:07:49.600 --> 00:07:58.160
+Now let me open one of the application files.
+
+00:07:58.160 --> 00:07:59.960
+I will open the ingress.yaml file.
+
+00:07:59.960 --> 00:08:06.120
+So I have this YAML file which I am working on,
+
+00:08:06.120 --> 00:08:08.600
+and I also have this output buffer
+
+00:08:08.600 --> 00:08:10.160
+which is basically the output
+
+00:08:10.160 --> 00:08:11.840
+of the build app recipe.
+
+00:08:11.840 --> 00:08:14.200
+Now I can basically go through this buffer
+
+00:08:14.200 --> 00:08:18.320
+and see if everything is alright,
+
+00:08:18.320 --> 00:08:21.760
+but I find out that I didn't want
+
+00:08:21.760 --> 00:08:23.920
+the hostname to be emacs2022.
+
+00:08:23.920 --> 00:08:25.840
+I wanted it to be just emacs.
+
+00:08:25.840 --> 00:08:29.000
+I can go and fix it in my YAML file,
+
+00:08:29.000 --> 00:08:34.160
+and then I can go on
+
+00:08:34.160 --> 00:08:36.160
+to the output buffer
+
+00:08:36.160 --> 00:08:38.520
+and basically just re-run the command
+
+00:08:38.520 --> 00:08:40.080
+by pressing the g key binding.
+
+00:08:40.080 --> 00:08:42.800
+As you can see,
+
+00:08:42.800 --> 00:08:48.160
+it executed the same recipe again,
+
+00:08:48.160 --> 00:08:49.440
+and I can see that
+
+00:08:49.440 --> 00:08:51.280
+the hostname is indeed emacs.
+
+00:08:51.280 --> 00:08:55.000
+I find this kind of workflow very convenient
+
+00:08:55.000 --> 00:08:56.600
+while I am working on a project.
+
+00:08:56.600 --> 00:08:59.320
+Another way of interacting
+
+00:08:59.320 --> 00:09:00.440
+with the justl extension
+
+00:09:00.440 --> 00:09:02.400
+is by using the interactive function
+
+00:09:02.400 --> 00:09:04.280
+justl-exec-recipe-in-dir.
+
+00:09:04.280 --> 00:09:06.040
+The use case of this function
+
+00:09:06.040 --> 00:09:07.840
+is executing a one-off recipe
+
+00:09:07.840 --> 00:09:09.920
+while you are working on something else.
+
+00:09:09.920 --> 00:09:11.960
+Let me show you an example of it.
+
+00:09:11.960 --> 00:09:19.800
+As you can see, it shows me
+
+00:09:19.800 --> 00:09:21.320
+a drop down of various recipes
+
+00:09:21.320 --> 00:09:22.640
+available in the justfile.
+
+00:09:22.640 --> 00:09:24.880
+You can choose any particular one
+
+00:09:24.880 --> 00:09:26.800
+and execute the corresponding recipe.
+
+00:09:26.800 --> 00:09:28.360
+In this case, I will choose
+
+00:09:28.360 --> 00:09:29.640
+the build-app recipe,
+
+00:09:29.640 --> 00:09:31.320
+and we will get the output
+
+00:09:31.320 --> 00:09:32.280
+in the *just* buffer
+
+00:09:32.280 --> 00:09:33.200
+which should be similar
+
+00:09:33.200 --> 00:09:34.680
+to what we saw previously.
+
+00:09:34.680 --> 00:09:43.920
+So this was a quick introduction
+
+00:09:43.920 --> 00:09:45.120
+to what justfile is
+
+00:09:45.120 --> 00:09:46.800
+and how to drive them within Emacs.
+
+00:09:46.800 --> 00:09:48.600
+Hopefully it was helpful
+
+00:09:48.600 --> 00:09:50.160
+and it would encourage you
+
+00:09:50.160 --> 00:09:51.480
+to use justfiles in your workflow.
+
+00:09:51.480 --> 00:09:53.800
+Thank you for allowing me to present.
+
+00:09:53.800 --> 00:09:55.480
+I am available in IRC
+
+00:09:55.480 --> 00:10:02.040
+if you have any questions.
diff --git a/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.vtt b/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.vtt
new file mode 100644
index 00000000..a6a4ba40
--- /dev/null
+++ b/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.vtt
@@ -0,0 +1,497 @@
+WEBVTT
+
+00:00.000 --> 00:09.260
+Excellent. Thank you for the great talk. As someone whose first language wasn't English
+
+00:09.260 --> 00:14.960
+and speaks other languages, I think localization and internationalization is a very important
+
+00:14.960 --> 00:20.920
+topic that's near and dear to my heart, and especially when it comes to Emacs. I think
+
+00:20.920 --> 00:26.700
+there's a lot that we could do better. So, yeah, thanks so much. Folks, if you have questions,
+
+00:26.700 --> 00:32.880
+you can post them on IRC on the pad, and Jon-Karstof will answer them, and we will also open up
+
+00:32.880 --> 00:37.600
+this big blue button for people who would like to join here and ask their questions
+
+00:37.600 --> 00:45.760
+directly. Jon-Karstof, please take it away. Okay, thank you. I'm not seeing much activity
+
+00:45.760 --> 00:55.920
+on IRC or the pad, so let me add a few things. First, that patch was really interesting in
+
+00:55.920 --> 01:03.680
+terms of actually getting into the code and understanding how really can a beginner join
+
+01:03.680 --> 01:11.080
+development, even if it's just a few lines. I mentioned in the first part of the presentation
+
+01:11.080 --> 01:17.600
+that there was this small integration bug with Mac, and that's the thing that actually
+
+01:17.600 --> 01:22.400
+got me started, and that was interesting because at the time I was trying to use Aquamax because
+
+01:22.400 --> 01:28.280
+it looked simpler, and I thought, okay, if I need to fix that, rather than fixing it
+
+01:28.280 --> 01:34.400
+in Aquamax, maybe I should just go to Emacs and fix it there. So, that was the first attempt
+
+01:34.400 --> 01:40.440
+for me to actually contribute something serious, and it was really nice to – I mean, this
+
+01:40.440 --> 01:47.160
+Emacs development list is really amazing. 99% of the discussion is just way above your
+
+01:47.160 --> 01:54.120
+head, but sometimes you grasp something, and the more you grasp it, the more you understand
+
+01:54.120 --> 02:00.600
+and the more you feel like you can actually do something, especially since – I mean,
+
+02:00.600 --> 02:06.640
+as for all the free software development projects, most of them, I guess, it's really just do
+
+02:06.640 --> 02:13.920
+it kind of thing. And if you try to do something, somebody's going to help you, and what I
+
+02:13.920 --> 02:21.200
+really enjoy when being there is that the people are always very nice. Sometimes you
+
+02:21.200 --> 02:28.080
+feel some tension when there are discussions about a specific topic, but it's – everybody
+
+02:28.080 --> 02:37.520
+is really polite, I mean, 99% of the time. And what I like the most is all the people
+
+02:37.520 --> 02:42.680
+are very strong opinionated, so they have a very good idea of what Emacs should be or
+
+02:42.680 --> 02:47.640
+should not be, and so it gives you a very good idea of in what direction you should
+
+02:47.640 --> 02:57.400
+go. So that experience – I mean, pretty much those 2017, 2018 years were until now
+
+02:57.400 --> 03:02.040
+the peak of my Emacs activity. I've had to craddle with that because I was busy with
+
+03:02.040 --> 03:07.160
+other things, but I'm really planning to go back to working on maybe not localization
+
+03:07.160 --> 03:13.480
+because it's really – it's too big for me right now. And what I was told is that
+
+03:13.480 --> 03:20.520
+it involved a bit of C programming and things like this, so I'm not really into that right
+
+03:20.520 --> 03:30.840
+now. But I think eventually one day – I just turned 53, so I guess in a few years
+
+03:30.840 --> 03:36.800
+from now when I have more time, I guess I'll just dive in and just work on those localization
+
+03:36.800 --> 03:43.800
+issues and really to bring Emacs to a different world because I think it's – if we were
+
+03:43.800 --> 03:49.920
+able to have – it's a big job. I mean, it's really – if you check the threads
+
+03:49.920 --> 03:55.400
+on dev, check my name, you will see that I mostly post on translation or localization
+
+03:55.400 --> 04:01.360
+issues at least at the time. And I did an estimate of the sheer volume of strings to
+
+04:01.360 --> 04:10.360
+translate. For example, the manuals were about 2 million words. That's big. That's big.
+
+04:10.360 --> 04:14.040
+But it's okay. I mean, it's not something that's impossible. And if you check the strings
+
+04:14.040 --> 04:20.160
+– that was a really rough estimate. If you check the strings for Emacs proper, not even
+
+04:20.160 --> 04:29.120
+talking about the packages and things, I think that would add probably like 500,000 words.
+
+04:29.120 --> 04:34.360
+I mean, I have no idea, but my very rough estimate would be that. So it's not something
+
+04:34.360 --> 04:41.120
+that's impossible to do. And we'd have to ensure that we have a good process for people
+
+04:41.120 --> 04:46.200
+who review the strings and contribute new strings and things like this and also best
+
+04:46.200 --> 04:53.560
+practices like what I tried to show in this video. And I was really not trying to be dismissive
+
+04:53.560 --> 04:58.680
+about the people who worked on Package L because they did a wonderful job at actually helping
+
+04:58.680 --> 05:02.840
+people like me access all those packages. So it's – I mean, the point of the video
+
+05:02.840 --> 05:10.840
+is naturally to dismiss the code. But I was kind of scared because I was like, if they
+
+05:10.840 --> 05:18.720
+write code like this for strings, then what about the rest of the code? Is it – so it
+
+05:18.720 --> 05:25.560
+was kind of – I mean, something that I really can't evaluate. But I'm like – I mean,
+
+05:25.560 --> 05:30.600
+those guys obviously are really smart and they're trying to make intelligent things
+
+05:30.600 --> 05:37.400
+about how they want to factor their code, et cetera. But if they do that for strings,
+
+05:37.400 --> 05:44.400
+which is quite simple actually – I mean, it's simple to mess up strings. So I was
+
+05:44.400 --> 05:50.320
+like, what about the rest of the code? Is it that complex or that difficult to understand?
+
+05:50.320 --> 05:56.000
+So that's kind of a put off for me. I'm like, I really don't want to try to envisage
+
+05:56.000 --> 06:01.760
+that more because – plus it's not – it's really not my area at all. So anyway, that's
+
+06:01.760 --> 06:04.400
+what I wanted to add. Yeah.
+
+06:04.400 --> 06:11.680
+Awesome. Yeah, I think I pretty much agree with all of what you said.
+
+06:11.680 --> 06:17.360
+Yeah, yeah, yeah. I have a question – I see a question on the pad. I use Emacs on
+
+06:17.360 --> 06:23.520
+English, but my mother language is – no, no, no. Okay. So the answer is that Emacs
+
+06:23.520 --> 06:33.760
+is not localized. And my understanding is that right now it's not localizable. And
+
+06:33.760 --> 06:40.840
+those discussions took place about four or five years ago. So check on the dev list and
+
+06:40.840 --> 06:46.280
+you'll see the state of the discussion because there is only a discussion at the moment.
+
+06:46.280 --> 06:57.480
+What I did for package L, I think it was really just a one-time attempt at fixing one package.
+
+06:57.480 --> 07:05.640
+And I did check the other – a number of other packages in core Emacs. And not a lot
+
+07:05.640 --> 07:12.280
+of them had – I mean, as far as I checked. And I really did not check everything. But
+
+07:12.280 --> 07:20.840
+basically what you have to do is check all the functions that impact strings. And some
+
+07:20.840 --> 07:28.600
+are really not user-facing strings, so they're not really interesting for us. And actually,
+
+07:28.600 --> 07:34.640
+that's really interesting to do that. So if you just take one list package, list code
+
+07:34.640 --> 07:40.480
+and just go through the thing and just check all of print1, printc, message, format, concat
+
+07:40.480 --> 07:43.520
+and stuff and just see how it goes.
+
+07:43.520 --> 07:50.240
+So basically right now there is no infrastructure to localize the thing. There is no process
+
+07:50.240 --> 07:56.720
+to extract the strings. And there is no way to actually import them back into the code.
+
+07:56.720 --> 08:02.800
+So what we can do right now is really just what I did, make sure that it's eventually
+
+08:02.800 --> 08:10.760
+possible one day. And as I just shown, it's really not such a big deal. If you're very
+
+08:10.760 --> 08:19.800
+careful about understanding the way that the strings are handled, it's just a few rewrites
+
+08:19.800 --> 08:24.560
+away. I mean, it's really not much. So there's – I mean, there's not a lot to be proud
+
+08:24.560 --> 08:31.140
+about in my patch. But it was really fun. And I think it's a very good entry point
+
+08:31.140 --> 08:39.480
+for people like us. I suppose – I mean, I suppose the first person question. I mean,
+
+08:39.480 --> 08:44.240
+I don't know. Maybe I'm just – I should not suppose that. But people who really enjoy
+
+08:44.240 --> 08:51.320
+working in Emacs and just sometimes would like to contribute something and are not programmers
+
+08:51.320 --> 08:56.320
+or anything or maybe even programmers. I mean, I'm not excluding them. But that's really
+
+08:56.320 --> 09:02.280
+a good way to just start doing something. And eventually from there, you can – I mean,
+
+09:02.280 --> 09:07.020
+you just use a package that you like and that you think is important and just check the
+
+09:07.020 --> 09:10.200
+strings and do things like this. And then eventually, you'll find other parts of the
+
+09:10.200 --> 09:18.840
+code that you want to improve or add functions. So yeah, actually, the patch that I did, this
+
+09:18.840 --> 09:26.840
+patch is actually in the process of the thing that I started with Equimax. So I did one
+
+09:26.840 --> 09:35.600
+little thing regarding those that were not fully integrated in macOS. And then I did
+
+09:35.600 --> 09:41.880
+something about a small function. I think I added the possibility to add an option.
+
+09:41.880 --> 09:48.960
+I did documentation improvement as well. So really just little things. And then the deeper
+
+09:48.960 --> 09:53.000
+you dive, the more interesting it gets. And then you find something that you really want
+
+09:53.000 --> 10:07.160
+to do. So just use that entry point as a way to have fun in Emacs.
+
+10:07.160 --> 10:15.240
+Well, so I mentioned Regex on strings. Well, it's not really a red flag for localization.
+
+10:15.240 --> 10:28.080
+But the way it's used, I mean, I guess there are ways to properly use it. But I think really
+
+10:28.080 --> 10:38.400
+the basically using that means that you're making assumptions on the way language is
+
+10:38.400 --> 10:45.800
+structured. And I did exactly the same mistake on a different project that I'm working on.
+
+10:45.800 --> 10:51.280
+Actually, I'm in charge of rewriting a manual. And we were using Docbook. And I just thought
+
+10:51.280 --> 10:57.240
+it would be smart to have automated links to parts of the chapters, et cetera. And the
+
+10:57.240 --> 11:01.240
+thing is that depending on the language, you've got different ways to introduce chapters.
+
+11:01.240 --> 11:10.540
+So I should know that. I should know that. You should not automatically insert strings
+
+11:10.540 --> 11:20.720
+in code because it's going to produce something that can't be handled by the translator. So
+
+11:20.720 --> 11:28.840
+basically Regex on strings is something that probably you might use. But if you see, I
+
+11:28.840 --> 11:33.320
+mean, you can see the way it was used in the original code. So if you see something like
+
+11:33.320 --> 11:39.360
+that, I mean, just don't run and just fix the thing because there is no way these can
+
+11:39.360 --> 11:44.920
+be localized, I mean, extracted properly and then localized. And that's the reason too
+
+11:44.920 --> 11:50.480
+why numbers are a big problem because, for example, in English but in French too, we
+
+11:50.480 --> 11:56.920
+have only singular forms and plural forms. But some languages have zero forms. Some languages
+
+11:56.920 --> 12:03.720
+have two forms like pair forms. Some languages don't have a different form for anything.
+
+12:03.720 --> 12:09.920
+For example, I live in Japan. I work in Japanese. And in Japanese, you don't have a form. You
+
+12:09.920 --> 12:16.640
+don't have different inflections for words based on their number. So saying one whatever
+
+12:16.640 --> 12:23.400
+or two whatevers or an infinity of whatevers or even zero whatever, it's just the same
+
+12:23.400 --> 12:28.480
+form. So making assumption on the number of things and the way it's expressed in the language
+
+12:28.480 --> 12:34.640
+is usually, and that's something that we already know in free software. I mean, if you check
+
+12:34.640 --> 12:40.060
+the getex library, they've got everything sorted out. And that's something that was
+
+12:40.060 --> 12:46.880
+created in the 90s at Sun Microsystem. And then it was freed, et cetera. But when you
+
+12:46.880 --> 12:52.560
+see the work that it did at the time, you would kind of expect that people understand
+
+12:52.560 --> 12:58.920
+that. But no. And that's OK because developers develop and localizers localize. So we kind
+
+12:58.920 --> 13:04.820
+of split. But everything has been done already. So we just have to be aware of what's being
+
+13:04.820 --> 13:11.720
+done. And we have to be aware of the rules. And I think of one very good set of rules
+
+13:11.720 --> 13:19.880
+that's been online for a while. It's the Worldwide Consortium. They have a really good internationalization
+
+13:19.880 --> 13:26.640
+page where everything is pretty much black on white on paper, on the web at least. And
+
+13:26.640 --> 13:31.960
+if you read that, you can see exactly what should be done for localization, what should
+
+13:31.960 --> 13:35.880
+not be done, what should be avoided at all costs, et cetera, et cetera.
+
+13:35.880 --> 13:44.440
+So there are plenty of references here and there. And in terms of software localization,
+
+13:44.440 --> 13:49.980
+it's the same. If you check the getex page, you should be able to get an idea of what
+
+13:49.980 --> 13:59.240
+should be good. So is my project to localize all of Emacs? I wish it were. Eventually I'll
+
+13:59.240 --> 14:05.160
+be rich. Hopefully. I don't know. I'm working on that. It's not working well. But the day
+
+14:05.160 --> 14:11.540
+I can take just one year off totally and focus on that, I think that's something I would
+
+14:11.540 --> 14:18.760
+love to work on and just get up to speed with the process of programming all the things,
+
+14:18.760 --> 14:23.080
+checking all the things, and organizing the infrastructure. But seriously, I don't think
+
+14:23.080 --> 14:31.240
+that will ever happen because I'm a poor translator. And I still have, what, like 20 years to go
+
+14:31.240 --> 14:40.560
+before I can't work anymore. And we don't have savings or anything with the corona shit.
+
+14:40.560 --> 14:47.560
+So I don't think that's ever going to happen. But I would love to help. And yes, yes. How
+
+14:47.560 --> 14:53.480
+deep would useful localization go? Because the core of Emacs are duck strings and localization.
+
+14:53.480 --> 15:00.280
+Yes, yes, yes. I mean, all those discussions have been made. I mean, no conclusion reached.
+
+15:00.280 --> 15:07.880
+But we have addressed those things on the discussions. And so just, I mean, it's really
+
+15:07.880 --> 15:13.560
+pretentious to say, check my name on the Emacs table list because I've talked about that.
+
+15:13.560 --> 15:18.680
+It's really pretentious. But that's not what I'm saying. I mean, there has been a lot of
+
+15:18.680 --> 15:24.400
+discussion on the development list. So if you check for localization, translation, stuff
+
+15:24.400 --> 15:30.800
+like that, you'll see keywords, and you'll see the discussion. And people are aware of
+
+15:30.800 --> 15:36.440
+the issues. So I mean, we just need to have a framework for that.
+
+15:36.440 --> 15:40.120
+Thank you. Just to quickly chime in to say, I think we have about two more minutes of
+
+15:40.120 --> 15:45.800
+on stream Q&A. And then you're welcome to either stay here, Jean-Christophe, or continue
+
+15:45.800 --> 15:48.800
+taking questions on the pad on IRC.
+
+15:48.800 --> 15:57.120
+I think, well, I got to go to work. So I need to get ready. But I think, unless we have
+
+15:57.120 --> 16:08.760
+something on IRC, I think we're good. If you find something else that I've not addressed,
+
+16:08.760 --> 16:19.840
+I'm good. Otherwise, yes, yes, yeah, we need to take all the C code. But I mean, you can
+
+16:19.840 --> 16:29.160
+decide the level down to which you want to work. So you can go all the way to the C code.
+
+16:29.160 --> 16:32.920
+But actually, the C code is actually easier to extract because there is all these get
+
+16:32.920 --> 16:40.280
+text things that works on the C code already. So the issue is pretty much the Emacs Lisp
+
+16:40.280 --> 16:47.760
+code, as far as I can understand. So that would be the process that we need to address.
+
+16:47.760 --> 16:56.800
+Doc strings, indeed. But then the doc strings and the manual, they are very close. And actually,
+
+16:56.800 --> 17:03.560
+yeah, my estimate of the 500,000 word, I think it was based on doc strings. So yeah, we need
+
+17:03.560 --> 17:09.760
+to take all that. And that's an ongoing project that's not going to go away anyway. So we'll
+
+17:09.760 --> 17:12.760
+be here 10 years from now, I'm sure.
+
+17:12.760 --> 17:17.680
+OK, cool. And yeah, I think that's about all the time that we have on the stream. I guess
+
+17:17.680 --> 17:21.720
+if folks have further questions, they could maybe reach out to you later on IRC or via
+
+17:21.720 --> 17:22.720
+email.
+
+17:22.720 --> 17:29.640
+And I'll be back on the development list shortly, maybe six months from now. So yeah, I can
+
+17:29.640 --> 17:30.640
+take it from there.
+
+17:30.640 --> 17:31.640
+Sounds great.
+
+17:31.640 --> 17:32.640
+Thank you very much.
+
+17:32.640 --> 17:33.640
+Thank you very much.
+
+17:33.640 --> 17:34.640
+Yeah, thanks again for your great talk. Cheers.
+
+17:34.640 --> 17:35.640
+Cheers.
+
+17:35.640 --> 17:56.640
+OK, bye.
+
diff --git a/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt b/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt
new file mode 100644
index 00000000..a86af897
--- /dev/null
+++ b/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt
@@ -0,0 +1,726 @@
+WEBVTT captioned by brandelune and bhavin192
+
+NOTE Introduction
+
+00:00.000 --> 00:00:05.400
+Hello everyone, I am Jean-Christophe Helary,
+
+00:00:05.400 --> 00:00:09.680
+I live in Japan, and I'm a translator.
+
+00:09.680 --> 00:00:12.633
+Here is my second presentation on this very
+
+00:00:12.633 --> 00:00:15.300
+prestigious stage that is the Emacs conference.
+
+00:00:15.300 --> 00:00:18.367
+Following my "Let's Translate the 2 million words
+
+00:00:18.367 --> 00:00:21.767
+in the Emacs manual" in 2021, my topic this year,
+
+00:00:21.767 --> 00:00:25.167
+always related to translation, is
+
+00:00:25.167 --> 00:00:28.400
+pre-localizing Emacs or much less pretentiously,
+
+00:00:28.400 --> 00:00:31.933
+"Just make sure that your strings don't mix up plurals".
+
+NOTE Usage of package.el
+
+00:00:31.933 --> 00:00:36.133
+So, for some reason I resumed Emacs use
+
+00:00:36.133 --> 00:00:39.940
+around 2016, and as I was rediscovering the thing
+
+00:00:39.940 --> 00:00:42.800
+I found really old outline-mode files here
+
+00:00:42.800 --> 00:00:44.033
+and there on my machine.
+
+00:00:44.033 --> 00:00:45.140
+And I started to experiment
+
+00:00:45.140 --> 00:00:47.167
+again and write again with Emacs.
+
+00:00:47.167 --> 00:00:48.564
+I think that at the time,
+
+00:00:48.564 --> 00:00:50.433
+I was coming from Aquamacs and because of
+
+00:00:50.433 --> 00:00:53.400
+an integration bug with macOS, I decided
+
+00:00:53.400 --> 00:00:55.440
+to check what was going on in the code.
+
+00:55.440 --> 00:00:59.040
+That was my first official contribution.
+
+NOTE The bug in strings
+
+00:59.040 --> 00:01:02.233
+So as I was happily installing and uninstalling
+
+00:01:02.233 --> 00:01:05.267
+things, I noticed something weird one day.
+
+00:01:05.267 --> 00:01:09.080
+Let me enlarge that picture.
+
+01:09.080 --> 00:01:12.400
+See? And even if I were not a translator,
+
+00:01:12.400 --> 00:01:14.960
+I would not like that string, and obviously
+
+01:14.960 --> 00:01:16.833
+the same bug bites you when the string
+
+00:01:16.833 --> 00:01:20.520
+tells you to erase the package.
+
+01:20.520 --> 00:01:26.720
+Boom, so we agree that we have a problem here.
+
+NOTE Natural language engineering
+
+01:26.720 --> 00:01:29.067
+So, I started to do some spelunking into the code,
+
+00:01:29.067 --> 00:01:31.067
+and at least that was my feeling
+
+00:01:31.067 --> 00:01:33.100
+because I really am not a programmer
+
+00:01:33.100 --> 00:01:37.240
+by any stretch of the imagination.
+
+01:37.240 --> 00:01:39.467
+And what I found was an amazing piece of
+
+00:01:39.467 --> 00:01:41.840
+natural language engineering that was mixing code
+
+01:41.840 --> 00:01:44.267
+with English suffixes and all that,
+
+00:01:44.267 --> 00:01:46.267
+and I could see that the people who had
+
+00:01:46.267 --> 00:01:47.767
+written that code were pretty smart,
+
+00:01:47.767 --> 00:01:49.533
+but had missed a number of edge cases
+
+00:01:49.533 --> 00:01:51.280
+that produced the above bugs.
+
+01:51.280 --> 00:01:53.500
+That was my first experience with
+
+00:01:53.500 --> 00:01:55.033
+all the message related functions,
+
+00:01:55.033 --> 00:01:58.360
+"format", "concat", "message", etc.
+
+01:58.360 --> 00:02:00.433
+But even with my beginner's eyes I could see that
+
+00:02:00.433 --> 00:02:03.040
+something was off because when you want
+
+02:03.040 --> 00:02:06.000
+to produce natural language strings you never ever
+
+00:02:06.000 --> 00:02:08.600
+should use "replace-regex-in-string" to
+
+02:08.600 --> 00:02:11.067
+add an "ing" or an "ed" suffix
+
+00:02:11.067 --> 00:02:12.980
+to change the mode of a sentence.
+
+02:12.980 --> 00:02:16.840
+But that's what I was seeing was happening.
+
+NOTE More than a missed plural
+
+02:16.840 --> 00:02:20.333
+So, what we had to deal with here
+
+00:02:20.333 --> 00:02:22.220
+was way more than just a missed plural.
+
+02:22.220 --> 00:02:24.000
+It was an attempt at engineering all
+
+00:02:24.000 --> 00:02:26.400
+the message strings destined to the user
+
+00:02:26.400 --> 00:02:28.567
+with the smart code that was making assumptions
+
+00:02:28.567 --> 00:02:30.067
+on the structure of words,
+
+00:02:30.067 --> 00:02:33.220
+and in the localization world that's a big no-no.
+
+02:33.220 --> 00:02:36.667
+I'm a translator, and such UI strings issues
+
+00:02:36.667 --> 00:02:38.433
+have been sorted out decades ago.
+
+00:02:38.433 --> 00:02:41.320
+So I was a bit shocked.
+
+NOTE The final patch
+
+02:41.320 --> 00:02:43.533
+The final patch took me about a year to write,
+
+00:02:43.533 --> 00:02:45.380
+because I'm slow, because I needed to verify
+
+02:45.380 --> 00:02:47.167
+and understand a lot, because there are
+
+00:02:47.167 --> 00:02:49.100
+plenty of rules and plenty of people who are
+
+00:02:49.100 --> 00:02:51.433
+explaining you very nicely what the rules are,
+
+00:02:51.433 --> 00:02:53.733
+because I have kids, and because the
+
+00:02:53.733 --> 00:02:55.600
+Emacs development list is such a cool place to be
+
+00:02:55.600 --> 00:02:58.560
+that you often forget why you're there sometimes.
+
+02:58.560 --> 00:03:01.800
+Anyway, for people who can't click on a video,
+
+00:03:01.800 --> 00:03:03.640
+and I can't either, here are the relevant
+
+03:03.640 --> 00:03:05.840
+parts with some short comments.
+
+03:05.840 --> 00:03:07.800
+I'll be talking with localization in mind,
+
+00:03:07.800 --> 00:03:09.640
+knowing full well that Emacs localization
+
+03:09.640 --> 00:03:12.800
+is not on the map at the moment.
+
+03:12.800 --> 00:03:14.167
+So first, there is this thing
+
+00:03:14.167 --> 00:03:15.520
+about "format" and "concat".
+
+03:15.520 --> 00:03:17.800
+And if I remember correctly,
+
+00:03:17.800 --> 00:03:20.300
+"format" is better for user-facing things,
+
+00:03:20.300 --> 00:03:25.160
+and "concat" is better for internal things.
+
+03:25.160 --> 00:03:26.800
+Here, there are two things.
+
+03:26.800 --> 00:03:28.800
+First, a rule that we have when we prepare
+
+00:03:28.800 --> 00:03:30.700
+strings that need to be localized is
+
+00:03:30.700 --> 00:03:33.333
+never ever make assumptions on the way
+
+00:03:33.333 --> 00:03:35.780
+numbers are expressed in the language.
+
+03:35.780 --> 00:03:37.067
+Here, the assumption is that
+
+00:03:37.067 --> 00:03:40.000
+we have either a singular or plural form,
+
+00:03:40.000 --> 00:03:42.040
+and that's not always the case.
+
+03:42.040 --> 00:03:44.067
+That usually means that you should externalize
+
+00:03:44.067 --> 00:03:48.280
+numbers and find a generic way to express them.
+
+03:48.280 --> 00:03:50.833
+So it makes for slightly less natural
+
+00:03:50.833 --> 00:03:54.400
+language strings, but it's better anyway.
+
+03:54.400 --> 00:03:56.667
+Then we have that comma there that's trying
+
+00:03:56.667 --> 00:03:58.167
+to be externalized and that's weird,
+
+00:03:58.167 --> 00:04:02.620
+so I put it back into the sentence.
+
+04:02.620 --> 00:04:04.967
+Here we have another construct, or two rather,
+
+00:04:04.967 --> 00:04:06.960
+that really should not be used like this.
+
+04:06.960 --> 00:04:10.033
+It's "prin1" that uses quoting characters,
+
+00:04:10.033 --> 00:04:12.480
+just like "print", and "princ" that does not.
+
+04:12.480 --> 00:04:15.400
+And you see why they were combined together.
+
+04:15.400 --> 00:04:17.133
+And they were both trying to be really smart
+
+00:04:17.133 --> 00:04:19.780
+about which article to put in front of a vowel.
+
+04:19.780 --> 00:04:20.960
+And you just don't do that.
+
+04:20.960 --> 00:04:25.000
+You just keep things simple.
+
+04:25.000 --> 00:04:26.633
+Here again, the code is trying to be smart,
+
+00:04:26.633 --> 00:04:28.480
+but it's really not much more efficient than
+
+04:28.480 --> 00:04:34.940
+plainly stating what you want.
+
+04:34.940 --> 00:04:36.500
+And here again, we have "concat" things
+
+00:04:36.500 --> 00:04:40.367
+that we could just use to plainly state
+
+00:04:40.367 --> 00:04:41.980
+what we want to state.
+
+04:41.980 --> 00:04:49.880
+So, instead of "concat" I just put a "message".
+
+04:49.880 --> 00:04:52.260
+And here we have something that's very cute.
+
+04:52.260 --> 00:04:54.540
+It's a computerized plural.
+
+04:54.540 --> 00:04:55.700
+Here again, assuming that
+
+00:04:55.700 --> 00:04:58.640
+there are only plural or singular forms.
+
+04:58.640 --> 00:05:00.867
+But the end string is not that much more natural
+
+00:05:00.867 --> 00:05:02.700
+than the fix, the code is less efficient
+
+00:05:02.700 --> 00:05:07.760
+and is harder to understand.
+
+05:07.760 --> 00:05:09.433
+Here again, the code is trying to make
+
+00:05:09.433 --> 00:05:13.520
+smart things where it could be much simpler.
+
+05:13.520 --> 00:05:14.667
+That is the part where you get the
+
+00:05:14.667 --> 00:05:19.480
+number of packages and their names.
+
+05:19.480 --> 00:05:22.067
+Here the whole sentence with the semicolons
+
+00:05:22.067 --> 00:05:26.333
+and the question mark is split in parts,
+
+00:05:26.333 --> 00:05:29.180
+between which something will be inserted.
+
+05:29.180 --> 00:05:34.240
+That's really ugly and difficult to read.
+
+05:34.240 --> 00:05:37.700
+Here again, another "ing" waiting to be
+
+00:05:37.700 --> 00:05:44.840
+regex-inserted into the code.
+
+05:44.840 --> 00:05:46.633
+And here at last, we get to the point
+
+00:05:46.633 --> 00:05:48.760
+where everything started.
+
+05:48.760 --> 00:05:50.833
+And you can see that unlike in the other spots,
+
+00:05:50.833 --> 00:05:52.400
+there is no possibility for the expression
+
+05:52.400 --> 00:05:54.680
+to be singular.
+
+05:54.680 --> 00:05:57.600
+So, I guess that if it hadn't been for that bug,
+
+00:05:57.600 --> 00:05:59.320
+I would not have found the other items,
+
+05:59.320 --> 00:06:01.033
+and we would be left with code that works,
+
+00:06:01.033 --> 00:06:02.033
+of course, but that is
+
+00:06:02.033 --> 00:06:06.020
+harder to understand, and maintain.
+
+06:06.020 --> 00:06:08.333
+Last but not least, a last version of
+
+00:06:08.333 --> 00:06:10.920
+"just plainly state what you mean to state".
+
+06:10.920 --> 00:06:14.880
+Keep it simple.
+
+NOTE "What did I learn, and how did I learn it?"
+
+06:14.880 --> 00:06:19.267
+So first, we have this wonderful CONTRIBUTE file
+
+00:06:19.267 --> 00:06:21.267
+that is very explicit about
+
+00:06:21.267 --> 00:06:23.520
+how we must proceed when contributing code.
+
+06:23.520 --> 00:06:25.233
+So, that's really the first place
+
+00:06:25.233 --> 00:06:27.760
+that we should all read.
+
+06:27.760 --> 00:06:29.333
+The README file is pretty cool too,
+
+00:06:29.333 --> 00:06:30.967
+especially at the beginning of the process,
+
+00:06:30.967 --> 00:06:31.867
+when you're not sure whether
+
+00:06:31.867 --> 00:06:36.240
+you want to fix that bug or just report it.
+
+NOTE Useful packages
+
+06:36.240 --> 00:06:37.920
+And then we've got packages.
+
+06:37.920 --> 00:06:39.900
+We've got a number of packages that are really
+
+00:06:39.900 --> 00:06:42.600
+helpful when it comes to reading
+
+00:06:42.600 --> 00:06:45.880
+the information and the manuals.
+
+06:45.880 --> 00:06:48.000
+I'm mentioning three of them here,
+
+00:06:48.000 --> 00:06:53.720
+and I think they are the most important for us.
+
+NOTE Package: helpful
+
+06:53.720 --> 00:06:55.600
+So "helpful" is on the right,
+
+00:06:55.600 --> 00:06:58.667
+and it's overflowing the window with
+
+00:06:58.667 --> 00:07:01.900
+all the contextualized information it provides,
+
+00:07:01.900 --> 00:07:05.280
+and the standard "help" is on the left.
+
+07:05.280 --> 00:07:07.933
+I mean, really there are like two or three
+
+00:07:07.933 --> 00:07:11.567
+screen-full of information in the "helpful" output,
+
+00:07:11.567 --> 00:07:13.233
+so you really only see a part,
+
+00:07:13.233 --> 00:07:16.320
+but I guess if you use it, you know what I'm saying.
+
+07:16.320 --> 00:07:18.867
+What I like the most here is the "view in manual"
+
+00:07:18.867 --> 00:07:21.800
+part, where you can actually click and even get
+
+00:07:21.800 --> 00:07:23.667
+more information that's sometimes
+
+00:07:23.667 --> 00:07:28.400
+easier to read and understand.
+
+NOTE Package: inform
+
+07:28.400 --> 00:07:33.640
+And then you've got the "info" versus "inform" formats.
+
+07:33.640 --> 00:07:34.567
+When you're in the manual,
+
+00:07:34.567 --> 00:07:37.140
+"inform" makes a huge difference.
+
+07:37.140 --> 00:07:39.367
+You can see here that you've got colorized items,
+
+00:07:39.367 --> 00:07:42.000
+and also in the middle you've got that
+
+07:42.000 --> 00:07:45.000
+'read' part that's green and bold.
+
+07:45.000 --> 00:07:49.333
+In "info" it's not a specific object,
+
+00:07:49.333 --> 00:07:52.200
+it's just a string. In 'inform' it's actually
+
+00:07:52.200 --> 00:07:53.800
+a link that you can click,
+
+00:07:53.800 --> 00:07:58.320
+and actually go to that 'read' manual page.
+
+NOTE Package: which-key
+
+07:58.320 --> 00:08:01.300
+Now, we've got "which-key".
+
+08:01.300 --> 00:08:03.400
+"which-key" is a savior for beginners too.
+
+08:03.400 --> 00:08:04.867
+Just wait half a second or something,
+
+00:08:04.867 --> 00:08:06.500
+and Emacs will show you all the keys
+
+00:08:06.500 --> 00:08:08.433
+that you can access from the prefix combination
+
+00:08:08.433 --> 00:08:09.920
+that you just typed.
+
+08:09.920 --> 00:08:13.200
+So, it's really helpful for discovering functions
+
+00:08:13.200 --> 00:08:19.160
+and learning new functions, getting used to them.
+
+NOTE It all started with this message…
+
+08:19.160 --> 00:08:21.500
+And so that whole process started…,
+
+00:08:21.500 --> 00:08:26.533
+it was May 23, 2017,
+
+00:08:26.533 --> 00:08:30.440
+with that thread when I found the bug.
+
+08:30.440 --> 00:08:32.800
+I just bumped into an English/code bug
+
+00:08:32.800 --> 00:08:36.920
+this morning. In package.el, when one package
+
+08:36.920 --> 00:08:39.033
+is not needed anymore, the message is:
+
+00:08:39.033 --> 00:08:41.300
+"Package menu: Operation finished.
+
+00:08:41.300 --> 00:08:44.880
+1 packages are no longer needed", etc.
+
+08:44.880 --> 00:08:49.633
+So, I was asking whether we had best practices
+
+00:08:49.633 --> 00:08:53.800
+for using messages, and we had a whole thread
+
+08:53.800 --> 00:08:57.867
+about that. And while I was discussing on that
+
+00:08:57.867 --> 00:09:01.240
+thread, I started that new thread, which is:
+
+09:01.240 --> 00:09:02.867
+"package.el strings".
+
+00:09:02.867 --> 00:09:09.900
+The whole thing actually ended on June 27, 2018.
+
+00:09:09.900 --> 00:09:15.400
+So, a year after, with that message from Noam
+
+00:09:15.400 --> 00:09:18.567
+telling me that "Yes I can close the bug,"
+
+00:09:18.567 --> 00:09:22.040
+and that was it.
+
+09:22.040 --> 00:09:24.000
+So, it took about a year to finish that.
+
+00:09:24.000 --> 00:09:28.133
+What I did learn basically is that
+
+00:09:28.133 --> 00:09:32.160
+helping with Emacs is not that difficult.
+
+09:32.160 --> 00:09:36.100
+It takes time when you're not fluent with the code,
+
+00:09:36.100 --> 00:09:37.100
+but that's okay because the reference
+
+09:37.100 --> 00:09:39.300
+is excellent, and there are lots of people
+
+00:09:39.300 --> 00:09:41.520
+who are here to help.
+
+NOTE Conclusion
+
+09:41.520 --> 00:09:45.700
+Basically, the solution to all our problems is
+
+00:09:45.700 --> 00:09:47.733
+"Keep It Simple and Straightforward".
+
+00:09:47.733 --> 00:09:51.033
+As you can see in that patch,
+
+00:09:51.033 --> 00:09:53.233
+even if it's a beginner's patch,
+
+00:09:53.233 --> 00:09:57.733
+what I did shows what can be done by Emacs Lisp
+
+00:09:57.733 --> 00:09:59.533
+beginners to help with "straightening" the strings
+
+00:09:59.533 --> 00:10:02.267
+to reduce the number of potential English bugs.
+
+00:10:02.267 --> 00:10:04.533
+And then to make Emacs strings easier
+
+00:10:04.533 --> 00:10:07.233
+to be handled by real localization processes one day.
+
+00:10:07.233 --> 00:10:09.067
+But it doesn't have to be about strings
+
+00:10:09.067 --> 00:10:12.767
+because strings can be an easy entry point to Emacs,
+
+00:10:12.767 --> 00:10:16.720
+but it can be any itch that you want to scratch.
+
+10:16.720 --> 00:10:18.267
+And my real conclusion is that
+
+00:10:18.267 --> 00:10:22.160
+Emacs is free software, and what that means is mostly
+
+10:22.160 --> 00:10:24.067
+that it allows you to do things that you would
+
+00:10:24.067 --> 00:10:27.920
+never have thought of being able to do before.
+
+10:27.920 --> 00:10:32.000
+That's really the biggest lesson to be learned here.
+
+10:32.000 --> 00:10:33.400
+So, I want to thank all the people
+
+00:10:33.400 --> 00:10:37.920
+who allowed this to be happening, allowed me to
+
+10:37.920 --> 00:10:41.267
+learn a bit and contribute a bit to that wonderful
+
+00:10:41.267 --> 00:10:42.800
+piece of software that Emacs is.
+
+00:10:42.800 --> 00:10:44.533
+And thank you everyone for listening,
+
+00:10:44.533 --> 00:10:46.700
+and hopefully I'll see you next year
+
+00:10:46.700 --> 00:10:51.520
+with a different translation related presentation.
+
+10:51.520 --> 11:13.640
+Thank you very much.
diff --git a/2022/captions/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt b/2022/captions/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt
new file mode 100644
index 00000000..622d0b40
--- /dev/null
+++ b/2022/captions/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt
@@ -0,0 +1,1002 @@
+WEBVTT captioned by matthew
+
+NOTE Opening
+
+00:00:00.000 --> 00:00:04.639
+Good morning folks, I'm Matthew.
+
+00:00:04.640 --> 00:00:07.399
+Welcome to another year of EmacsConf.
+
+00:00:07.400 --> 00:00:10.319
+It's looking fantastic this year.
+
+00:00:10.320 --> 00:00:13.559
+Firstly, I have to apologize for my voice
+
+00:00:13.560 --> 00:00:15.879
+and occasional cough today.
+
+00:00:15.880 --> 00:00:18.039
+I am currently recovering from a cold,
+
+00:00:18.040 --> 00:00:21.159
+hopefully it's not Covid or flu,
+
+00:00:21.160 --> 00:00:24.719
+so please bear with me today.
+
+00:00:24.720 --> 00:00:27.919
+Actually, this talk was supposed to be brought to you
+
+00:00:27.920 --> 00:00:31.559
+by Manatee Lazycat, the author of lsp-bridge.
+
+00:00:31.560 --> 00:00:36.079
+But verbal English isn't Lazycat's strongest skill,
+
+00:00:36.080 --> 00:00:38.599
+and we are good friends as we maintain
+
+00:00:38.600 --> 00:00:40.999
+the Emacs Application Framework together,
+
+00:00:41.000 --> 00:00:45.999
+so here I am today presenting to you this package.
+
+00:00:46.000 --> 00:00:48.479
+Welcome to my talk on lsp-bridge:
+
+00:00:48.480 --> 00:00:50.320
+a smooth-as-butter asynchronous LSP client.
+
+NOTE What is LSP?
+
+00:00:50.321 --> 00:00:57.200
+What is LSP?
+
+00:00:57.201 --> 00:01:01.159
+The first question is, what is LSP?
+
+00:01:01.160 --> 00:01:03.199
+For anyone who doesn't know here,
+
+00:01:03.200 --> 00:01:06.799
+LSP stands for Language Server Protocol,
+
+00:01:06.800 --> 00:01:09.719
+it is a set of protocols defined by Microsoft
+
+00:01:09.720 --> 00:01:13.399
+that provides smart features like autocomplete,
+
+00:01:13.400 --> 00:01:17.599
+go to definition, documentation, etc.,
+
+00:01:17.600 --> 00:01:23.439
+that can be implemented across different editors and IDEs.
+
+00:01:23.440 --> 00:01:25.559
+It was initially created
+
+00:01:25.560 --> 00:01:28.399
+for their Visual Studio Code product,
+
+00:01:28.400 --> 00:01:33.919
+then publically shared with everyone.
+
+00:01:33.920 --> 00:01:35.999
+So there are language servers out there
+
+00:01:36.000 --> 00:01:38.119
+that implemented this procotol,
+
+00:01:38.120 --> 00:01:41.239
+and editors need to implement the same procotols
+
+00:01:41.240 --> 00:01:43.119
+to talk to the language servers
+
+00:01:43.120 --> 00:01:46.799
+in order to retrieve necessary information.
+
+00:01:46.800 --> 00:01:53.159
+Emacs has 2 LSP clients already, the lsp-mode and eglot,
+
+00:01:53.160 --> 00:01:57.319
+both implemented the protocols and both are very good.
+
+NOTE Why another LSP client?
+
+00:02:00.440 --> 00:02:03.199
+Now comes to the second question, of course,
+
+00:02:03.200 --> 00:02:09.519
+given lsp-mode and eglot, why another LSP client?
+
+00:02:09.520 --> 00:02:12.359
+I used to use lsp-mode all the time,
+
+00:02:12.360 --> 00:02:15.999
+I have to say I really appreciate Ivan Yonchovski
+
+00:02:16.000 --> 00:02:20.159
+and the team's efforts. Also, I'd like to congratuate eglot
+
+00:02:20.160 --> 00:02:27.439
+for making into Emacs 29! These are fantastic packages,
+
+00:02:27.440 --> 00:02:30.999
+they are very mature and robust.
+
+NOTE
+
+00:02:31.000 --> 00:02:31.000
+However, with all due respect, both of the implementation
+
+00:02:35.120 --> 00:02:36.719
+are fundamentally limited
+
+00:02:36.720 --> 00:02:39.639
+by the single-threaded nature of Emacs,
+
+00:02:39.640 --> 00:02:43.639
+it is neither the fault of lsp-mode nor eglot.
+
+NOTE
+
+00:02:46.000 --> 00:02:47.959
+Although in recent years there have been
+
+00:02:47.960 --> 00:02:51.799
+improvements to Emacs core such as native JSON support,
+
+00:02:51.800 --> 00:02:55.319
+there are still scenarios where Emacs clog
+
+00:02:55.320 --> 00:02:59.359
+for a brief second when processing large amounts of data,
+
+00:02:59.360 --> 00:03:03.399
+as Emacs is processing everything in the single thread.
+
+00:03:03.400 --> 00:03:08.439
+This problem is especially apparent in some LSP servers
+
+00:03:08.440 --> 00:03:11.839
+that feeds in tens of thousands of JSON data
+
+00:03:11.840 --> 00:03:15.199
+with every single key press.
+
+NOTE
+
+00:03:15.200 --> 00:03:17.559
+Additionally, the large amount of data
+
+00:03:17.560 --> 00:03:21.279
+sent by the LSP server, such as the completion candidates,
+
+00:03:21.280 --> 00:03:23.959
+the diagnostics and documentation,
+
+00:03:23.960 --> 00:03:27.359
+they are temporarily stored in the Emacs memory,
+
+00:03:27.360 --> 00:03:31.159
+which will trigger garbage collection very frequently,
+
+00:03:31.160 --> 00:03:34.159
+this also causes stuttering user experience.
+
+00:03:34.160 --> 00:03:37.279
+Increasing the gc-cons-threshold helps,
+
+00:03:37.280 --> 00:03:43.759
+but doesn't eliminate the problem.
+
+NOTE
+
+00:03:43.760 --> 00:03:45.559
+For something like the LSP,
+
+00:03:45.560 --> 00:03:48.319
+the language servers need time to compute,
+
+00:03:48.320 --> 00:03:52.359
+and Emacs needs capacity to process and filter
+
+00:03:52.360 --> 00:03:55.799
+all the data coming from the language servers.
+
+00:03:55.800 --> 00:03:59.399
+A large codebase project with a slow language server
+
+00:03:59.400 --> 00:04:02.439
+that sends tens of thousands of JSON
+
+00:04:02.440 --> 00:04:06.519
+will significantly increase the time needed to process it,
+
+00:04:06.520 --> 00:04:08.079
+when we don't have a multi-thread,
+
+00:04:08.080 --> 00:04:12.719
+the single thread originally allocated for perhaps,
+
+00:04:12.720 --> 00:04:17.279
+handling user input will be used to process all the data,
+
+00:04:17.280 --> 00:04:22.719
+and don't even talk about the garbage collection along the way.
+
+NOTE
+
+00:04:22.720 --> 00:04:26.239
+The unfortunate truth is that the size of the codebase
+
+00:04:26.240 --> 00:04:28.919
+and the efficiency of the language server
+
+00:04:28.920 --> 00:04:31.759
+is completely out of Emacs' control,
+
+00:04:31.760 --> 00:04:38.519
+it is also out of both the lsp-mode and eglot's control.
+
+NOTE
+
+00:04:38.520 --> 00:04:40.279
+If there's an LSP client
+
+00:04:40.280 --> 00:04:42.279
+that can completely eliminate stuttering
+
+00:04:42.280 --> 00:04:44.999
+and provide a seamless feedback,
+
+00:04:45.000 --> 00:04:50.279
+that would be great, isn't it?
+
+NOTE What is seamless input feedback?
+
+00:04:50.280 --> 00:04:53.839
+However, we're vaguely talking about speed right now,
+
+00:04:53.840 --> 00:04:56.399
+what is considered fast?
+
+00:04:56.400 --> 00:04:58.359
+What is considered seamless?
+
+00:04:58.360 --> 00:05:01.479
+What we really mean when we say
+
+00:05:01.480 --> 00:05:05.239
+the current LSP implementation is slow?
+
+00:05:05.240 --> 00:05:12.559
+Let's first look at the problem fundamentally.
+
+NOTE
+
+00:05:12.560 --> 00:05:17.679
+We interact with Emacs through a keyboard,
+
+00:05:17.680 --> 00:05:22.719
+so what we perceive as a fast and smooth feedback
+
+00:05:22.720 --> 00:05:25.999
+completely depends on how long it takes
+
+00:05:26.000 --> 00:05:29.359
+for a keyboard input to display on the Emacs buffer.
+
+00:05:29.360 --> 00:05:32.919
+From a pure graphical perspective,
+
+00:05:32.920 --> 00:05:36.519
+we need a minimum of 24 frames per second,
+
+00:05:36.520 --> 00:05:39.079
+the standard in the media industry,
+
+00:05:39.080 --> 00:05:42.359
+for us humans to perceive something as seamless.
+
+00:05:42.360 --> 00:05:46.999
+Say we need 25 frames per second, this means,
+
+00:05:47.000 --> 00:05:50.399
+if we divide 1000 milliseconds by 25,
+
+00:05:50.400 --> 00:05:54.759
+we only have approximately 40 millisecond window
+
+00:05:54.760 --> 00:05:57.919
+for the response time to spare.
+
+00:05:57.920 --> 00:06:01.679
+Even if we relax the constraint a bit more,
+
+00:06:01.680 --> 00:06:06.679
+on average a typist takes about 100 to 200 milliseconds
+
+00:06:06.680 --> 00:06:09.159
+between typing each character,
+
+00:06:09.160 --> 00:06:12.599
+so as long as we see a response within this timeframe,
+
+00:06:12.600 --> 00:06:19.559
+it is tolerable. However, using a slow language server
+
+00:06:19.560 --> 00:06:22.279
+on a large codebase easily exceeds
+
+00:06:22.280 --> 00:06:24.679
+the hundred millisecond mark,
+
+00:06:24.680 --> 00:06:27.479
+and sometimes takes more than 200 milliseconds,
+
+00:06:27.480 --> 00:06:32.039
+and inevitably will cause an inconsistent delay
+
+00:06:32.040 --> 00:06:33.199
+for the end user.
+
+NOTE
+
+00:06:33.200 --> 00:06:37.959
+At this point, someone might want to point out
+
+00:06:37.960 --> 00:06:41.079
+that nobody is gonna type at the maximum pace all the time.
+
+00:06:41.080 --> 00:06:45.039
+That's right, frankly speaking most of my time
+
+00:06:45.040 --> 00:06:47.639
+spent at programming is not writing code,
+
+00:06:47.640 --> 00:06:49.039
+but staring at the screen
+
+00:06:49.040 --> 00:06:51.279
+thinking about how to write the code.
+
+00:06:51.280 --> 00:06:55.599
+However, when we do actually type,
+
+00:06:55.600 --> 00:07:00.359
+maybe only a sentence, a variable name, a keyword,
+
+00:07:00.360 --> 00:07:03.039
+or just performing keybinding shortcuts,
+
+00:07:03.040 --> 00:07:08.479
+that's when we want to see our input feedback immediately.
+
+00:07:08.480 --> 00:07:10.479
+We've already spend so much time
+
+00:07:10.480 --> 00:07:12.159
+thinking about how to write,
+
+00:07:12.160 --> 00:07:16.479
+we don't want to waste any more time waiting for Emacs
+
+00:07:16.480 --> 00:07:19.559
+to process and show us what we've written
+
+00:07:19.560 --> 00:07:27.679
+half a second ago. Otherwise the frustration will build up.
+
+NOTE EAF showed a possibility
+
+00:07:28.400 --> 00:07:31.999
+In the past two years of EmacsConf, I've talked about
+
+00:07:32.000 --> 00:07:35.399
+the Emacs Application Framework, a project that extended
+
+00:07:35.400 --> 00:07:39.839
+Emacs Lisp to Python, Qt and JavaScript ecosystems.
+
+00:07:39.840 --> 00:07:43.759
+The EAF project specializes in improving
+
+00:07:43.760 --> 00:07:47.439
+the graphical and multimedia capabilities of Emacs
+
+00:07:47.440 --> 00:07:51.759
+through other languages, it was a great success.
+
+00:07:51.760 --> 00:07:55.759
+It demonstrated the endless possibilities of Emacs
+
+00:07:55.760 --> 00:08:00.159
+by embracing the strengths in other ecosystems.
+
+00:08:00.160 --> 00:08:04.239
+If anyone is interested for more information on EAF,
+
+00:08:04.240 --> 00:08:08.519
+please see the EAF repo and refer to my talks
+
+00:08:08.520 --> 00:08:12.959
+from EmacsConf2020 and 2021.
+
+00:08:12.960 --> 00:08:12.960
+
+
+00:08:12.960 --> 00:08:16.239
+The EAF project was created by Manatee Lazycat as well,
+
+00:08:16.240 --> 00:08:19.999
+so he thought if there is a way to design
+
+00:08:20.000 --> 00:08:22.759
+an LSP client similar to EAF
+
+00:08:22.760 --> 00:08:25.759
+that takes the advantage of Python's multi-threading,
+
+00:08:25.760 --> 00:08:27.839
+it will be able to solve our problem.
+
+00:08:27.840 --> 00:08:32.399
+Conveniently EAF had already done most of the ground work
+
+00:08:32.400 --> 00:08:34.359
+and demonstrated the possibility
+
+00:08:34.360 --> 00:08:42.159
+of cooperating Elisp and Python using the Emacs RPC effectively.
+
+NOTE LSP Bridge Objectives
+
+00:08:42.160 --> 00:08:45.039
+LSP Bridge has several goals in mind.
+
+00:08:45.040 --> 00:08:50.159
+Firstly, performance is the number one priority.
+
+00:08:50.160 --> 00:08:55.839
+Secondly, use Python multi-threading to bypass
+
+00:08:55.840 --> 00:08:59.239
+the aforementioned bottlenecks of a single-threaded Emacs.
+
+00:08:59.240 --> 00:09:04.519
+Thirdly, provide a simple solution that requires
+
+00:09:04.520 --> 00:09:07.519
+minimal setup for someone who just wants to have
+
+00:09:07.520 --> 00:09:10.079
+a fast autocomplete system in Emacs.
+
+00:09:10.080 --> 00:09:15.999
+This means, LSP Bridge does not intend
+
+00:09:16.000 --> 00:09:21.439
+and will not implement the entire LSP protocol,
+
+00:09:21.440 --> 00:09:23.639
+which is a vastly different approach
+
+00:09:23.640 --> 00:09:25.759
+than a solution like lsp-mode,
+
+00:09:25.760 --> 00:09:28.479
+we do not want to compete this way.
+
+00:09:28.480 --> 00:09:33.559
+We also believe some of the LSP Protocol features
+
+00:09:33.560 --> 00:09:37.759
+are unnecessary, or we already have better solutions
+
+00:09:37.760 --> 00:09:38.959
+in the Emacs ecosystem,
+
+00:09:38.960 --> 00:09:42.679
+such as tree-sitter for syntax highlighting.
+
+00:09:42.680 --> 00:09:44.959
+So we will not reinvent the wheel.
+
+00:09:44.960 --> 00:09:50.279
+Ultimately, we want to provide the fastest, butter-smooth
+
+00:09:50.280 --> 00:09:53.679
+and performant LSP client out of the box.
+
+NOTE Design.
+
+00:09:53.680 --> 00:09:54.560
+Design.
+
+00:09:54.561 --> 00:10:01.239
+Now let's look at the design architecture diagram.
+
+00:10:01.240 --> 00:10:04.639
+As you can see, it is split into
+
+00:10:04.640 --> 00:10:07.079
+the top half and bottom half.
+
+00:10:07.080 --> 00:10:10.559
+The top is the design for a single file model,
+
+00:10:10.560 --> 00:10:13.359
+and the bottom half is for project model.
+
+00:10:13.360 --> 00:10:18.159
+We make this distinction because we don't want a new user
+
+00:10:18.160 --> 00:10:22.599
+to be troubled on choosing a project root directory
+
+00:10:22.600 --> 00:10:25.199
+as the first impression to LSP
+
+00:10:25.200 --> 00:10:27.279
+before even start writing code.
+
+00:10:27.280 --> 00:10:27.280
+
+
+00:10:27.280 --> 00:10:30.479
+From a new user's perspective,
+
+00:10:30.480 --> 00:10:32.959
+they've just installed this package,
+
+00:10:32.960 --> 00:10:35.159
+and all they are expecting
+
+00:10:35.160 --> 00:10:37.679
+is using a smart autocomplete system,
+
+00:10:37.680 --> 00:10:41.519
+what does root directory even mean in this context?
+
+00:10:41.520 --> 00:10:44.119
+So we make the decision for them
+
+00:10:44.120 --> 00:10:48.199
+based on whether this file is part of a git repository.
+
+00:10:48.200 --> 00:10:56.719
+Often times we write code in its own standalone file,
+
+00:10:56.720 --> 00:10:59.919
+this is extremely common for scripting languages
+
+00:10:59.920 --> 00:11:03.319
+like bash or python. So in the single file model,
+
+00:11:03.320 --> 00:11:07.159
+LSP Bridge will start a dedicated LSP server
+
+00:11:07.160 --> 00:11:10.319
+for this particular file based on file type,
+
+00:11:10.320 --> 00:11:13.479
+and every file corresponds to a LSP server,
+
+00:11:13.480 --> 00:11:17.839
+so each server doesn't interfere with one another.
+
+00:11:17.840 --> 00:11:23.719
+The project model will have every file of the same type
+
+00:11:23.720 --> 00:11:25.919
+under the same project share one server.
+
+00:11:25.920 --> 00:11:30.439
+We believe this is a positive trade-off for user experience.
+
+00:11:30.440 --> 00:11:30.440
+
+
+00:11:30.440 --> 00:11:36.599
+LSP Bridge internally implemented two main threads,
+
+00:11:36.600 --> 00:11:40.399
+one is the Request Thread, the other is Response Thread.
+
+00:11:40.400 --> 00:11:45.279
+The Request Thread is used to handle all the requests
+
+00:11:45.280 --> 00:11:48.679
+coming from Emacs, it does not answer immediately,
+
+00:11:48.680 --> 00:11:52.839
+this is important because Emacs doesn't need to wait
+
+00:11:52.840 --> 00:11:54.679
+for any response under any reason,
+
+00:11:54.680 --> 00:11:58.159
+even if the server is buggy or died out,
+
+00:11:58.160 --> 00:12:01.159
+it shouldn't matter to the performance of Emacs.
+
+00:12:01.160 --> 00:12:04.039
+The Response Thread is used to handle
+
+00:12:04.040 --> 00:12:06.559
+the response coming from LSP servers.
+
+00:12:06.560 --> 00:12:11.239
+After retrieving a response, regardless of the JSON size,
+
+00:12:11.240 --> 00:12:14.439
+it sends to its own thread for computation,
+
+00:12:14.440 --> 00:12:17.079
+such as candidate filtering and renaming.
+
+00:12:17.080 --> 00:12:19.999
+Once the computation is finished,
+
+00:12:20.000 --> 00:12:23.639
+it will determine if this information is expired,
+
+00:12:23.640 --> 00:12:26.399
+if not, then push it to Emacs.
+
+00:12:26.400 --> 00:12:26.400
+
+
+00:12:26.400 --> 00:12:31.559
+From the Emacs side, when it receives the LSP information,
+
+00:12:31.560 --> 00:12:34.639
+it only needs to determine the course of action,
+
+00:12:34.640 --> 00:12:39.159
+either popup completion, jump to definition,
+
+00:12:39.160 --> 00:12:44.799
+renaming action, or show references and show documentions.
+
+00:12:44.800 --> 00:12:49.119
+You see, from a user, all LSP Bridge doing
+
+00:12:49.120 --> 00:12:52.279
+is these 5 things, the user doesn't need to care about
+
+00:12:52.280 --> 00:12:54.559
+anything else like the complicated
+
+00:12:54.560 --> 00:12:56.479
+Language Server Protocols.
+
+00:12:56.480 --> 00:12:56.480
+
+
+00:12:56.480 --> 00:13:02.439
+Python side caches heavy data
+
+00:13:02.440 --> 00:13:06.279
+such as candidate documentation and diagnostics.
+
+00:13:06.280 --> 00:13:11.079
+We process as much server data as possible in Python,
+
+00:13:11.080 --> 00:13:15.759
+and only pass to Emacs as little data as possible
+
+00:13:15.760 --> 00:13:18.159
+so it doesn't clog the Emacs thread
+
+00:13:18.160 --> 00:13:19.799
+and triggers garbage collection.
+
+00:13:19.800 --> 00:13:19.800
+
+
+00:13:19.800 --> 00:13:24.319
+This design is critical, because all Emacs needs to do
+
+00:13:24.320 --> 00:13:27.039
+is sending LSP requests to LSP Bridge,
+
+00:13:27.040 --> 00:13:29.439
+it doesn't wait for a response,
+
+00:13:29.440 --> 00:13:32.999
+it simply knows what to do *when* there is a response.
+
+00:13:33.000 --> 00:13:37.159
+So the user's input immediately displays on the buffer
+
+00:13:37.160 --> 00:13:39.559
+well within the 40 millisecond window,
+
+00:13:39.560 --> 00:13:45.199
+and in the mean time, the user can continue to type
+
+00:13:45.200 --> 00:13:48.199
+if he doesn't need the help from LSP right away,
+
+00:13:48.200 --> 00:13:51.279
+it fundamentally resolves the stuttering problem.
+
+NOTE ACM - Asynchronous Completion Menu
+
+00:13:51.280 --> 00:13:59.079
+Now I want to talk about acm-mode,
+
+00:13:59.080 --> 00:14:09.599
+which stands for asynchronous completion menu,
+
+00:14:09.600 --> 00:14:12.479
+it is a completion framework
+
+00:14:12.480 --> 00:14:15.039
+that currently bundled with LSP Bridge
+
+00:14:15.040 --> 00:14:17.279
+designed to accomodate for
+
+00:14:17.280 --> 00:14:20.399
+the asynchronous nature of LSP servers.
+
+00:14:20.400 --> 00:14:26.919
+It is a replacement for the built-in capf,
+
+00:14:26.920 --> 00:14:30.359
+short for completion-at-point-functions,
+
+00:14:30.360 --> 00:14:32.519
+used in almost everywhere
+
+00:14:32.520 --> 00:14:35.759
+including company-mode and corfu-mode.
+
+00:14:35.760 --> 00:14:40.839
+Yes, we unfortunately reinvented a very fundamental wheel.
+
+00:14:40.840 --> 00:14:44.279
+No, it wasn't an easy decision.
+
+00:14:44.280 --> 00:14:47.879
+However we still believe it's worth it.
+
+00:14:47.880 --> 00:14:53.359
+LSP Bridge initially used company-mode,
+
+00:14:53.360 --> 00:14:56.119
+then moved on to corfu-mode for a while,
+
+00:14:56.120 --> 00:14:58.999
+but eventually Lazycat determined
+
+00:14:59.000 --> 00:15:00.719
+that it is much more painful to write
+
+00:15:00.720 --> 00:15:05.679
+a lot of workaround code to force LSP Bridge
+
+00:15:05.680 --> 00:15:09.959
+to handle capf nicely than to just fork Corfu,
+
+00:15:09.960 --> 00:15:11.999
+remove all the capf code,
+
+00:15:12.000 --> 00:15:15.239
+and write a new completion framework from the remainings.
+
+00:15:15.240 --> 00:15:15.240
+
+
+00:15:15.240 --> 00:15:20.719
+Performance wise, capf requires Emacs to store
+
+00:15:20.720 --> 00:15:23.119
+the entire candidate list
+
+00:15:23.120 --> 00:15:27.159
+when looking up candidate annotations.
+
+00:15:27.160 --> 00:15:30.639
+It needs to search through the entire candidate list first,
+
+00:15:30.640 --> 00:15:32.599
+then use the candidate as a key
+
+00:15:32.600 --> 00:15:34.799
+to search for the actual information.
+
+00:15:34.800 --> 00:15:38.919
+This entire process will be repeated every time
+
+00:15:38.920 --> 00:15:40.679
+when drawing the completion menu.
+
+00:15:40.680 --> 00:15:45.199
+This is truly intensive computing task for Emacs to handle.
+
+00:15:45.200 --> 00:15:50.519
+On top of that, the existing capf frameworks assume
+
+00:15:50.520 --> 00:15:54.279
+the candidate list, which is retrieved from the LSP server,
+
+00:15:54.280 --> 00:15:56.839
+to be ready and finalized in place
+
+00:15:56.840 --> 00:15:58.719
+when the completion popup occurred.
+
+00:15:58.720 --> 00:16:02.119
+However given the design of LSP Bridge,
+
+00:16:02.120 --> 00:16:05.919
+Emacs will not sit there and wait for the server response,
+
+00:16:05.920 --> 00:16:10.439
+instead the Response Thread may feed Emacs data
+
+00:16:10.440 --> 00:16:14.919
+whenever it's ready. This makes capf almost impossible
+
+00:16:14.920 --> 00:16:21.919
+to form a finalized candidate list during popup.
+
+00:16:21.920 --> 00:16:21.920
+
+
+00:16:21.920 --> 00:16:26.079
+The complete reasons regarding why capf is incompatible
+
+00:16:26.080 --> 00:16:28.679
+with the asynchronous nature of LSP servers
+
+00:16:28.680 --> 00:16:32.479
+are very complicated and deserves its own talk.
+
+00:16:32.480 --> 00:16:37.079
+Lazycat wrote an entire blog post detailing his reasonings,
+
+00:16:37.080 --> 00:16:40.999
+while Corfu's author Daniel Mendler a.k.a minad
+
+00:16:41.000 --> 00:16:44.239
+also done his own investigations and experiments,
+
+00:16:44.240 --> 00:16:47.239
+and reached a common conclusion.
+
+00:16:47.240 --> 00:16:50.919
+For anyone interested, I've pasted the links
+
+00:16:50.920 --> 00:16:52.759
+to the corresponding posts here.
+
+00:16:52.760 --> 00:16:57.399
+Therefore, keep in mind that LSP Bridge
+
+00:16:57.400 --> 00:16:59.919
+can only use acm-mode to work nicely,
+
+00:16:59.920 --> 00:17:03.359
+so please disable other completion frameworks
+
+00:17:03.360 --> 00:17:07.159
+like company and corfu before trying LSP Bridge.
+
+NOTE LSP Bridge + ACM -> Multi-Backend Completion Framework
+
+00:17:07.160 --> 00:17:14.919
+By designing ACM with asynchronous server response in mind,
+
+00:17:14.920 --> 00:17:18.759
+this unlocks LSP Bridge project's potential
+
+00:17:18.760 --> 00:17:22.199
+to provide completions from almost any backends.
+
+00:17:22.200 --> 00:17:25.679
+ACM has blended all the backends together,
+
+00:17:25.680 --> 00:17:28.799
+and configured a priority to display
+
+00:17:28.800 --> 00:17:32.839
+important completion results like LSP before other backends.
+
+00:17:32.840 --> 00:17:38.559
+It can autocomplete LSP, TabNine, Elisp symbols, yasnippets,
+
+00:17:38.560 --> 00:17:41.039
+even English dictionaries and much more.
+
+00:17:41.040 --> 00:17:43.959
+As long as you have the backends installed,
+
+00:17:43.960 --> 00:17:46.319
+they all work out-of-the-box!
+
+NOTE Today and future. Join us!
+
+00:17:46.320 --> 00:17:55.239
+Although LSP Bridge is a relatively new package
+
+00:17:55.240 --> 00:18:00.039
+with just over 7 months old, it is already a success!
+
+00:18:00.040 --> 00:18:06.599
+As of December of 2022, we have 67 contributors
+
+00:18:06.600 --> 00:18:08.439
+making more than 1000 commits,
+
+00:18:08.440 --> 00:18:12.679
+and we reached more than 600 stars on Github!
+
+00:18:12.680 --> 00:18:16.359
+LSP Bridge is easily extensible,
+
+00:18:16.360 --> 00:18:18.879
+developing a new language backend is very simple too,
+
+00:18:18.880 --> 00:18:20.639
+feel free to join us!
+
+00:18:20.640 --> 00:18:25.599
+LSP Bridge is another successful example
+
+00:18:25.600 --> 00:18:29.919
+of extending Emacs Lisp with Python, and just like EAF,
+
+00:18:29.920 --> 00:18:33.639
+it demonstrated the potential Emacs can achieve
+
+00:18:33.640 --> 00:18:37.039
+when we jump out of the Lisp-only world
+
+00:18:37.040 --> 00:18:39.199
+and embrace other ecosystems.
+
+00:18:39.200 --> 00:18:43.479
+Recently Lazycat created a package called blink-search
+
+00:18:43.480 --> 00:18:45.679
+that leveraged similar ideas
+
+00:18:45.680 --> 00:18:48.919
+but an asynchronous search framework,
+
+00:18:48.920 --> 00:18:51.239
+as well as a package called deno-bridge
+
+00:18:51.240 --> 00:18:53.119
+that extended Emacs Lisp
+
+00:18:53.120 --> 00:18:56.439
+with Deno JavaScript TypeScript runtimes.
+
+00:18:56.440 --> 00:18:57.559
+Please check it out,
+
+00:18:57.560 --> 00:19:05.199
+if consider joining the development too!
+
+NOTE Thanks
+
+00:19:05.200 --> 00:19:08.599
+This is the entirety of my presentation, thanks for joining!
+
+00:19:08.600 --> 00:19:11.319
+Me and Lazycat will be available
+
+00:19:11.320 --> 00:19:20.240
+to answer questions on IRC and Etherpad.
diff --git a/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.vtt b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.vtt
new file mode 100644
index 00000000..2c0a2ac5
--- /dev/null
+++ b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.vtt
@@ -0,0 +1,1046 @@
+WEBVTT
+
+00:00.000 --> 00:04.000
+Thank you, Mohsen, very much for the great talk.
+
+00:04.000 --> 00:08.000
+People, if you have questions, please put them on the pad,
+
+00:08.000 --> 00:12.000
+or IRC, but preferably the pad, and then we'll also open this room
+
+00:12.000 --> 00:16.000
+in a minute or two so that if anyone who wants to join here and ask the questions
+
+00:16.000 --> 00:19.000
+directly to Mohsen, they could do that as well.
+
+00:19.000 --> 00:22.000
+Dear Mohsen, please take it away.
+
+00:22.000 --> 00:25.000
+Hello, greetings.
+
+00:25.000 --> 00:29.000
+Yeah, I don't see any questions yet,
+
+00:29.000 --> 00:35.000
+so let me add a few additional notes
+
+00:35.000 --> 00:39.000
+to what was in the presentation.
+
+00:39.000 --> 00:43.000
+In there, I make several points.
+
+00:43.000 --> 00:49.000
+Some of them are tactical, some are more strategic.
+
+00:49.000 --> 00:56.000
+Let me delve into the strategic message a bit.
+
+00:56.000 --> 01:02.000
+On the messaging capabilities of Emacs
+
+01:02.000 --> 01:08.000
+and the broader office environment capabilities of Emacs,
+
+01:08.000 --> 01:14.000
+we have a huge, incredibly powerful asset,
+
+01:14.000 --> 01:18.000
+but the amount of complexity
+
+01:18.000 --> 01:27.000
+and the surrounding configuration capabilities
+
+01:27.000 --> 01:32.000
+and hurdles and difficulties that are involved
+
+01:32.000 --> 01:41.000
+into making a really powerful environment for ourselves,
+
+01:41.000 --> 01:44.000
+we have a big obstacle,
+
+01:44.000 --> 01:49.000
+and that obstacle is that of integration.
+
+01:49.000 --> 01:58.000
+Over the past 40 years, the general model has been that of producing components
+
+01:58.000 --> 02:03.000
+where we do great stuff.
+
+02:03.000 --> 02:13.000
+We put various email MTAs and support them through Emacs.
+
+02:13.000 --> 02:21.000
+Additionally, we say that we want Emacs to be used on all platforms.
+
+02:21.000 --> 02:25.000
+If you're on Windows, there is Emacs support for it.
+
+02:25.000 --> 02:30.000
+If there is Mac OS, there is support for that.
+
+02:30.000 --> 02:35.000
+And of course, all of the GNU Linux stuff,
+
+02:35.000 --> 02:39.000
+capabilities and platforms.
+
+02:39.000 --> 02:46.000
+So all of this results into tremendous amounts of energy
+
+02:46.000 --> 02:54.000
+to go both on the developer side and on the user side to support everything.
+
+02:54.000 --> 02:59.000
+And that's what we have been doing over the past 40 years.
+
+02:59.000 --> 03:07.000
+What I am saying is that perhaps we should revisit this approach
+
+03:07.000 --> 03:16.000
+and consider moving towards creating a complete
+
+03:16.000 --> 03:23.000
+Libre Halal free software digital ecosystem for ourselves
+
+03:23.000 --> 03:28.000
+and consider Emacs as the usage environment
+
+03:28.000 --> 03:33.000
+of that totality of the digital ecosystem.
+
+03:33.000 --> 03:42.000
+This will solve many problems if we were to buy into such an approach.
+
+03:42.000 --> 03:47.000
+If we were to say that as the platform de facto
+
+03:47.000 --> 03:54.000
+and because of everything that is happening,
+
+03:54.000 --> 03:57.000
+Debian is a reasonable good choice.
+
+03:57.000 --> 04:06.000
+And then we would tie in all Emacs capabilities
+
+04:06.000 --> 04:13.000
+primarily and firstly to our own platform
+
+04:13.000 --> 04:17.000
+and start building on it.
+
+04:17.000 --> 04:28.000
+So let's take the situation with email in such a scenario.
+
+04:28.000 --> 04:34.000
+The main obstacles that we have right now is that
+
+04:34.000 --> 04:41.000
+GNU comes out with support for pretty much everything.
+
+04:41.000 --> 04:50.000
+But as the user, someone trying to buy into doing email on Emacs,
+
+04:50.000 --> 04:55.000
+which of these facilities, which of these features
+
+04:55.000 --> 04:58.000
+would be the right way to go?
+
+04:58.000 --> 05:07.000
+So what I am saying, having chosen our platform as Debian,
+
+05:07.000 --> 05:14.000
+what if we were to say that we would buy into something like Q-mail
+
+05:14.000 --> 05:24.000
+as the outgoing message model and just fully bring it in
+
+05:24.000 --> 05:30.000
+and consider it as the only and the default MTA
+
+05:30.000 --> 05:33.000
+for everything that we do?
+
+05:33.000 --> 05:39.000
+Suddenly a whole lot of complexity goes away.
+
+05:39.000 --> 05:45.000
+And similarly for bringing in email,
+
+05:45.000 --> 05:50.000
+what if we were to say that we have bought into offline IMAP
+
+05:50.000 --> 05:55.000
+and then the next really interesting piece is
+
+05:55.000 --> 05:59.000
+what should be our mailboxes?
+
+05:59.000 --> 06:08.000
+This notion that today de facto Gmail is the universal place
+
+06:08.000 --> 06:11.000
+where you get your mailboxes.
+
+06:11.000 --> 06:15.000
+And very easily we can, not very easily,
+
+06:15.000 --> 06:20.000
+but we certainly can support Gmail.
+
+06:20.000 --> 06:27.000
+But what if we were to get in the business of actually providing
+
+06:27.000 --> 06:32.000
+mailboxes for everyone and combine that with the platform
+
+06:32.000 --> 06:35.000
+and the main user agent?
+
+06:35.000 --> 06:43.000
+So that's really the strategic message that I want to,
+
+06:43.000 --> 06:48.000
+that I'm sending.
+
+06:48.000 --> 06:49.000
+Excellent, thank you.
+
+06:49.000 --> 06:52.000
+And I think in the meantime we have four questions
+
+06:52.000 --> 06:54.000
+on the panel already.
+
+06:54.000 --> 07:00.000
+Okay, I don't see them here.
+
+07:00.000 --> 07:03.000
+Oh, are you looking in the public chat here on the big blue button?
+
+07:03.000 --> 07:04.000
+Yes.
+
+07:04.000 --> 07:06.000
+Okay, let me put a link.
+
+07:06.000 --> 07:10.000
+So there's a separate pad where people are posting their questions.
+
+07:10.000 --> 07:13.000
+Okay, now I am seeing.
+
+07:13.000 --> 07:17.000
+Yeah, if it might be easier I could probably copy the questions over here.
+
+07:17.000 --> 07:20.000
+No, no, I am actually seeing them.
+
+07:20.000 --> 07:21.000
+Okay.
+
+07:21.000 --> 07:25.000
+Perfectly, perfectly okay.
+
+07:25.000 --> 07:31.000
+So the first question is something I have liked about Not Much
+
+07:31.000 --> 07:35.000
+is using Maildear makes searching fast
+
+07:35.000 --> 07:40.000
+and the knowledge that you have all your email period.
+
+07:40.000 --> 07:45.000
+Why GNU's over Not Much?
+
+07:45.000 --> 07:53.000
+As a side note, you have also Much Think for Not Much client
+
+07:53.000 --> 07:59.000
+and Jmap for more exotic normal clients.
+
+07:59.000 --> 08:04.000
+So I think there are two things going on here.
+
+08:04.000 --> 08:07.000
+Not Much is more than one thing.
+
+08:07.000 --> 08:13.000
+Not Much is a search, a mail search engine
+
+08:13.000 --> 08:20.000
+and also Not Much is a MUA.
+
+08:20.000 --> 08:30.000
+So in terms of choosing, certainly for search, for mail search capabilities,
+
+08:30.000 --> 08:33.000
+we should go with Not Much
+
+08:33.000 --> 08:40.000
+and there is GNU's search capabilities for Not Much in there.
+
+08:40.000 --> 08:48.000
+So what I am suggesting is that we stick to GNU's as an MUA,
+
+08:48.000 --> 08:52.000
+but the search capabilities that you are talking about
+
+08:52.000 --> 08:59.000
+or that the question mentions are certainly available.
+
+08:59.000 --> 09:05.000
+A second question is, so the idea is more about Emacs
+
+09:05.000 --> 09:10.000
+as a holistic computing experience with other packages and services
+
+09:10.000 --> 09:14.000
+rather than about email specifically
+
+09:14.000 --> 09:19.000
+as an alternative to something like Microsoft Office Suite.
+
+09:19.000 --> 09:23.000
+Yes, this is right on the point.
+
+09:23.000 --> 09:28.000
+What I am saying is that email by itself
+
+09:28.000 --> 09:33.000
+is not really all that meaningful or interesting
+
+09:33.000 --> 09:38.000
+and everywhere that you look in the proprietary model,
+
+09:38.000 --> 09:43.000
+you would see that the likes of Google and the likes of Microsoft
+
+09:43.000 --> 09:49.000
+do not view email as standalone capabilities.
+
+09:49.000 --> 09:52.000
+They see it as integrated with address book.
+
+09:52.000 --> 09:55.000
+They see it as integrated with calendar.
+
+09:55.000 --> 09:59.000
+They see it integrated with search.
+
+09:59.000 --> 10:06.000
+They see it as integrated with your to-do list and time management.
+
+10:06.000 --> 10:09.000
+So you are very right.
+
+10:09.000 --> 10:13.000
+The question is right on point.
+
+10:13.000 --> 10:18.000
+Email by itself is not significant
+
+10:18.000 --> 10:26.000
+and the reason why Emacs is the right place to do email
+
+10:26.000 --> 10:29.000
+is because Emacs is the kitchen sink.
+
+10:29.000 --> 10:35.000
+It does absolutely everything and that is what you want.
+
+10:35.000 --> 10:38.000
+The third question is,
+
+10:38.000 --> 10:43.000
+early on you express misgivings about the Western copyright regime
+
+10:43.000 --> 10:46.000
+but you are using a GPL license.
+
+10:46.000 --> 10:49.000
+Is that a conflict?
+
+10:49.000 --> 10:52.000
+Great work by the way.
+
+10:52.000 --> 10:55.000
+No, I don't think it is a conflict.
+
+10:55.000 --> 11:04.000
+My position is that the Western intellectual property right regime
+
+11:04.000 --> 11:08.000
+is a colossal ownership mistake.
+
+11:08.000 --> 11:15.000
+Having said that, and I do call for its abolishment,
+
+11:15.000 --> 11:21.000
+having said that, it is unrealistic to assume or recognize
+
+11:21.000 --> 11:26.000
+that just because I say it and just because I believe it,
+
+11:26.000 --> 11:34.000
+in fact it will be abolished or that a significant change would happen,
+
+11:34.000 --> 11:38.000
+particularly in the Western world.
+
+11:38.000 --> 11:44.000
+So in the Western context, what can we do?
+
+11:44.000 --> 11:46.000
+What should we do?
+
+11:46.000 --> 11:52.000
+What I am saying there is that particularly in the context of services,
+
+11:52.000 --> 12:00.000
+all licenses should be the strictest ones possible
+
+12:00.000 --> 12:07.000
+and the one that is codified is the Afero GPL license.
+
+12:07.000 --> 12:12.000
+So I have subjected all my work to the Afero GPL license.
+
+12:12.000 --> 12:27.000
+I know of GNU, how do you think about using it for packaging,
+
+12:27.000 --> 12:31.000
+configuring Emacs, your various packages,
+
+12:31.000 --> 12:37.000
+else you might look it up or NixOS.
+
+12:37.000 --> 12:46.000
+So the idea here is that when we go back to this full integration
+
+12:46.000 --> 12:49.000
+in the context of a digital ecosystem,
+
+12:49.000 --> 12:59.000
+a major challenge is that of bringing in all the necessary packages
+
+12:59.000 --> 13:01.000
+from different sources.
+
+13:01.000 --> 13:08.000
+So for example, in the context of male user agents,
+
+13:08.000 --> 13:13.000
+to put things together you need a set of apt packages
+
+13:13.000 --> 13:17.000
+coming from the DBN world.
+
+13:17.000 --> 13:25.000
+You need a set of pypi packages coming from the Python world
+
+13:25.000 --> 13:32.000
+and you need a set of list packages coming from Elisp archives.
+
+13:32.000 --> 13:38.000
+And likely you need a whole lot of others.
+
+13:38.000 --> 13:47.000
+You need possibly Node.js stuff and you also possibly need Ruby stuff.
+
+13:47.000 --> 13:54.000
+And this integration is going to be complex.
+
+13:54.000 --> 14:01.000
+The approach that I have taken is that of going best of breed
+
+14:01.000 --> 14:06.000
+in the context of each of the domains.
+
+14:06.000 --> 14:13.000
+So in Python, while there may be other packaging models,
+
+14:13.000 --> 14:16.000
+we go with pypi.
+
+14:16.000 --> 14:19.000
+On the platform, it's clear that it's apt.
+
+14:19.000 --> 14:25.000
+On the Linux, over the past five years, we have solved mostly
+
+14:25.000 --> 14:29.000
+that archiving machinery.
+
+14:29.000 --> 14:39.000
+If the question is, and I'm not familiar with the specifics
+
+14:39.000 --> 14:44.000
+of what was mentioned in terms of a unified packaging model,
+
+14:44.000 --> 14:54.000
+but if the question is that of a unified packaging integration model,
+
+14:54.000 --> 14:58.000
+I'd love to do it when it's mature and ready.
+
+14:58.000 --> 15:05.000
+At this point, I am going the route of best of breed selections
+
+15:05.000 --> 15:09.000
+within each domain.
+
+15:09.000 --> 15:15.000
+And if I chime in briefly, Mohsen, I think there was a typo in the question.
+
+15:15.000 --> 15:19.000
+They are asking about GNU Geeks or mentioning GNU Geeks
+
+15:19.000 --> 15:21.000
+and also potentially NixOS.
+
+15:21.000 --> 15:24.000
+And I think these two also very much go with your idea
+
+15:24.000 --> 15:28.000
+of tying everything together, these different package management systems.
+
+15:28.000 --> 15:33.000
+So GNU Geeks is a GNU Linux distribution like Debian is,
+
+15:33.000 --> 15:37.000
+but it's written in GNU Guile Lisp or Guile Scheme.
+
+15:37.000 --> 15:41.000
+And it's a very interesting concept where all of the packaging code
+
+15:41.000 --> 15:46.000
+and everything is done in GNU Guile Scheme and ties everything together
+
+15:46.000 --> 15:48.000
+and integrates great with Emacs.
+
+15:48.000 --> 15:51.000
+So that might be something worth checking out later on.
+
+15:51.000 --> 15:52.000
+Right.
+
+15:52.000 --> 16:01.000
+I had taken a very cursory look at that, and I'll keep my eyes open on it.
+
+16:01.000 --> 16:07.000
+I think in due course, maybe that's the way to go.
+
+16:07.000 --> 16:13.000
+There's one more question coming in.
+
+16:13.000 --> 16:21.000
+I let the person who is asking the question to complete it.
+
+16:21.000 --> 16:22.000
+Okay.
+
+16:22.000 --> 16:26.000
+Yeah, in the meantime, I'll also mention that I think we have about
+
+16:26.000 --> 16:32.000
+four more minutes of on-stream live Q&A time, at which point after that,
+
+16:32.000 --> 16:33.000
+the stream will move on.
+
+16:33.000 --> 16:38.000
+But you Mohsen and, of course, people watching are welcome to come here,
+
+16:38.000 --> 16:41.000
+join this Big Blue Button Room directly and ask the questions here
+
+16:41.000 --> 16:42.000
+or on the pad.
+
+16:42.000 --> 16:43.000
+Great.
+
+16:43.000 --> 16:44.000
+Great.
+
+16:44.000 --> 16:47.000
+So let me read the question.
+
+16:47.000 --> 16:54.000
+Is this being split up in a heavily configured server for email hosting
+
+16:54.000 --> 17:00.000
+and the thin client package for you locally client to integrate with your
+
+17:00.000 --> 17:02.000
+Emacs package?
+
+17:02.000 --> 17:11.000
+Maybe with a client thin Docker container for other packages,
+
+17:11.000 --> 17:15.000
+like not much locally?
+
+17:15.000 --> 17:23.000
+Actually, that is not really exactly what I am speaking of.
+
+17:23.000 --> 17:32.000
+The concept of a thin client is difficult to characterize.
+
+17:32.000 --> 17:41.000
+So if you have Emacs and everything else that you want to use as a usage
+
+17:41.000 --> 17:49.000
+environment along with your email system, if we want to call that a thin
+
+17:49.000 --> 17:59.000
+client, certainly that is what I call the usage environment.
+
+17:59.000 --> 18:10.000
+On the services side, I am not speaking of just one.
+
+18:10.000 --> 18:15.000
+I am speaking of support for multiple, of course, obviously,
+
+18:15.000 --> 18:22.000
+but having one that in my own case, for example, by name.net,
+
+18:22.000 --> 18:27.000
+is the primary support.
+
+18:27.000 --> 18:36.000
+And in terms of packaging that as a thin client instead of inside of a
+
+18:36.000 --> 18:45.000
+Docker, that is certainly possible, but it is not, I don't consider it as
+
+18:45.000 --> 18:47.000
+the only way to go.
+
+18:47.000 --> 18:56.000
+You can do your packaging any way you want and, well, you can do your
+
+18:56.000 --> 19:04.000
+packaging and then deliver it however you want.
+
+19:04.000 --> 19:11.000
+On these questions, if I was not on the point in understanding the
+
+19:11.000 --> 19:16.000
+questions and answering them correctly, if there are any follow-ups,
+
+19:16.000 --> 19:42.000
+I would be happy to take them.
+
+19:42.000 --> 19:51.000
+Yeah, if there are no other questions, I can perhaps bring up the
+
+19:51.000 --> 20:04.000
+presentation and maybe make a few additional points.
+
+20:04.000 --> 20:23.000
+So, I think one key slide in here is this one, where what I am saying
+
+20:23.000 --> 20:32.000
+is that we have been very good at producing components and that we
+
+20:32.000 --> 20:42.000
+really need to get into systems development or environments
+
+20:42.000 --> 20:46.000
+development as opposed to components development.
+
+20:46.000 --> 20:55.000
+And to raise that a bit more so that we can move towards having
+
+20:55.000 --> 21:01.000
+something that we can call a non-procreatory digital ecosystem,
+
+21:01.000 --> 21:10.000
+I think we need to work towards having frameworks for services.
+
+21:10.000 --> 21:17.000
+And while we have defined free software or what I call Libre
+
+21:17.000 --> 21:25.000
+Halal software, we don't have precise definitions for Libre services,
+
+21:25.000 --> 21:27.000
+free services.
+
+21:27.000 --> 21:32.000
+Free services is going to be a very bad name, because we want it to
+
+21:32.000 --> 21:34.000
+be commercial.
+
+21:34.000 --> 21:39.000
+We want people to pay for it as they use it.
+
+21:39.000 --> 21:45.000
+And so the natural name would be something like Libre services.
+
+21:45.000 --> 21:52.000
+And in that context, if you go to Libre services.org, you will see
+
+21:52.000 --> 22:00.000
+my definition of what that would mean, what non-proprietary
+
+22:00.000 --> 22:05.000
+codification of services would mean.
+
+22:05.000 --> 22:20.000
+Another slide perhaps to take a look at is this one, where I am
+
+22:20.000 --> 22:35.000
+making the case for not considering Emacs by itself as core of
+
+22:35.000 --> 22:43.000
+anything, but viewing and cultivating and introducing this
+
+22:43.000 --> 22:48.000
+concept of common agent and building on it.
+
+22:48.000 --> 22:58.000
+Let me go see if there are any other questions.
+
+22:58.000 --> 23:08.000
+Yeah, I didn't see any more.
+
+23:08.000 --> 23:12.000
+May I drop in and ask a question directly?
+
+23:12.000 --> 23:14.000
+Of course.
+
+23:14.000 --> 23:21.000
+Okay, so I have a question regarding combining GNU and NotMuch.
+
+23:21.000 --> 23:23.000
+Yes.
+
+23:23.000 --> 23:30.000
+So do you combine tagging facilities of NotMuch into GNU as well?
+
+23:30.000 --> 23:32.000
+Sorry, can you repeat that?
+
+23:32.000 --> 23:37.000
+Do you also integrate tagging facilities of NotMuch into GNU?
+
+23:37.000 --> 23:41.000
+Tagging? I have not done that.
+
+23:41.000 --> 23:46.000
+Okay, because I was looking into combining GNU and NotMuch at some point,
+
+23:46.000 --> 23:53.000
+but what stopped me from continuing is that NotMuch is mostly about tags,
+
+23:53.000 --> 24:00.000
+and then GNU has a search option for NotMuch, using NotMuch.
+
+24:00.000 --> 24:05.000
+But how do you add tags from GNU?
+
+24:05.000 --> 24:11.000
+Right, in terms of continuous use, it's only recently that I'm doing that,
+
+24:11.000 --> 24:16.000
+and I don't think it means that it is not doable.
+
+24:16.000 --> 24:22.000
+It's just that in my own case, I haven't done it.
+
+24:22.000 --> 24:24.000
+Yeah, it's certainly doable.
+
+24:24.000 --> 24:30.000
+You present this unified system that brings everything together.
+
+24:30.000 --> 24:33.000
+So I was wondering if it's already implemented.
+
+24:33.000 --> 24:44.000
+Yeah, I must say all that I do is I want to say that that is the direction that I want to go.
+
+24:44.000 --> 24:45.000
+Okay.
+
+24:45.000 --> 24:47.000
+We have a long way to go.
+
+24:47.000 --> 24:58.000
+It's mostly a question of, and that is not the general direction and formalization that has been happening.
+
+24:58.000 --> 25:06.000
+So more or less, a lot of what I mentioned in there is not fully baked.
+
+25:06.000 --> 25:17.000
+Okay, thanks.
+
+25:17.000 --> 25:20.000
+I think we also have a question here in chat, Mohsen.
+
+25:20.000 --> 25:22.000
+I wasn't sure if you already saw or answered it or not.
+
+25:22.000 --> 25:24.000
+Sorry.
+
+25:24.000 --> 25:28.000
+No, let me, is it on the chat?
+
+25:28.000 --> 25:30.000
+Yes, public chat here on big blue button.
+
+25:30.000 --> 25:31.000
+Question by Thuna.
+
+25:31.000 --> 25:34.000
+Oh, public chat on the big blue button.
+
+25:34.000 --> 25:38.000
+Yeah.
+
+25:38.000 --> 25:41.000
+Can you expand on definition of Libre Halal?
+
+25:41.000 --> 25:42.000
+I'm a bit lost.
+
+25:42.000 --> 25:44.000
+Yes.
+
+25:44.000 --> 25:46.000
+Yes, yes, yes, yes.
+
+25:46.000 --> 26:05.000
+So, you see, we have labels of free software that are well established, and we have definitions of open source that are well established.
+
+26:05.000 --> 26:20.000
+And both of these are in the Western context and from the perspective of Western folks.
+
+26:20.000 --> 26:29.000
+What I am saying is that neither free software nor open source are the right labels.
+
+26:29.000 --> 26:37.000
+What we are looking for is actually ethical software, not free software.
+
+26:37.000 --> 26:49.000
+Freedom is something that is wonderful and great, but it may not be the right thing to be free.
+
+26:49.000 --> 27:01.000
+What I am saying here is that a manner of existence of software is the key concept.
+
+27:01.000 --> 27:06.000
+Allow me to share the screen.
+
+27:06.000 --> 27:09.000
+Just one moment.
+
+27:09.000 --> 27:18.000
+And maybe point you to a place where I could answer it in depth.
+
+27:18.000 --> 27:27.000
+It is certainly not a topic that I could do justice to in just a moment.
+
+27:27.000 --> 27:51.000
+So, if you were to look for nature of polyexistentials and Googling that would take you there, there is a 250-page document there that says why I believe the Western intellectual property rights is wrong.
+
+27:51.000 --> 28:10.000
+And it goes through and says, well, if polyexistentials are not to be governed by the intellectual property rights regime, then what is the right manner of governing them?
+
+28:10.000 --> 28:21.000
+So, what is the right manner of existence of software? And what label should we use for that?
+
+28:21.000 --> 28:41.000
+And in here, there is a whole section that about 10 pages or so that describes what Halal means and why the Libre Halal label is the right label.
+
+28:41.000 --> 29:01.000
+So, let me perhaps point you to that section.
+
+29:01.000 --> 29:11.000
+Yeah, this is on the Cure section.
+
+29:11.000 --> 29:32.000
+I think if you were to go to chapter 12, that would be a good place.
+
+29:32.000 --> 29:37.000
+Do you happen to have the link to this page handy, Mohsan?
+
+29:37.000 --> 29:46.000
+Yeah, it is included in the presentation. Let me go there very quickly.
+
+29:46.000 --> 29:48.000
+Oops, sorry.
+
+29:48.000 --> 29:52.000
+Just one moment.
+
+29:52.000 --> 30:05.000
+Yeah, it's in the presentation with a QR code. So, let me look it up and bring it back up again.
+
+30:05.000 --> 30:13.000
+Thank you.
+
+30:13.000 --> 30:25.000
+So, the link for that document is on slide 13.
+
+30:25.000 --> 30:29.000
+Can you see it?
+
+30:29.000 --> 30:38.000
+I'm not seeing your slides, but okay, it is getting shared again. Yep. Thanks.
+
+30:38.000 --> 30:39.000
+Yeah, sorry. Go ahead.
+
+30:39.000 --> 30:42.000
+Yeah, that is the...
+
+30:42.000 --> 30:47.000
+Oh, very good. Somebody else also threw it up on there.
+
+30:47.000 --> 30:49.000
+But it's a little bit different.
+
+30:49.000 --> 31:01.000
+Yes, yes.
+
+31:01.000 --> 31:18.000
+Yeah, it's PLPC 120.0.33.
+
+31:18.000 --> 31:24.000
+I mean, any other questions? Yes, thank you.
+
+31:24.000 --> 31:27.000
+Thanks. Yeah, I don't see any other questions on the panel.
+
+31:27.000 --> 31:30.000
+Oh, there's one new question here from Thuna again.
+
+31:30.000 --> 31:35.000
+What is the scope of what you are imagining? Just software?
+
+31:35.000 --> 31:42.000
+No, certainly not just software. It is software and services.
+
+31:42.000 --> 31:49.000
+So, that is, I think, the next challenge and the next step for us.
+
+31:49.000 --> 32:03.000
+We have to think of ways of competing with Gmail and Outlook.com.
+
+32:03.000 --> 32:07.000
+So, services are certainly within the scope.
+
+32:07.000 --> 32:14.000
+In the abstract sense of what polyexistentials are.
+
+32:14.000 --> 32:18.000
+So, polyexistentials are things that exist in multiples.
+
+32:18.000 --> 32:24.000
+So, any form of knowledge is within the scope.
+
+32:24.000 --> 32:48.000
+And that goes to medications, goes to anything that is patentable and art and anything that is copyable.
+
+32:48.000 --> 33:03.000
+Yes, NFTs are a form of creating mono-existentials out of polyexistentials.
+
+33:03.000 --> 33:13.000
+So, by the time that you create an NFT, it is no longer the subject of what I am talking about.
+
+33:13.000 --> 33:23.000
+But the process of creating mono-existentials off of polyexistentials is what we should be discussing.
+
+33:23.000 --> 33:36.000
+There is a section in that book on that topic as well with the same subject of how one goes about creating that.
+
+33:36.000 --> 33:44.000
+You see, any sort of a name could be thought of as an NFT.
+
+33:44.000 --> 33:54.000
+So, if you think of our domain name system, although it is in the realm of software and services,
+
+33:54.000 --> 34:17.000
+what you have emacsconf.org that has become unique and it's a mono-existential.
+
+34:17.000 --> 34:30.000
+I think my key message here is this vocabulary of polyexistence and mono-existence and mixed existence,
+
+34:30.000 --> 34:38.000
+which is the novelty in the stuff that I have written.
+
+34:38.000 --> 34:43.000
+We all have understood these for a long time.
+
+34:43.000 --> 35:07.000
+It's a question of coming up with the right vocabulary to express them with precision that remains and then acting on them.
+
+35:07.000 --> 35:08.000
+Excellent.
+
+35:08.000 --> 35:15.000
+As a lot of people have said, I think both here and also in IRC, there is a lot of information and material to digest from this talk
+
+35:15.000 --> 35:21.000
+and to try to think really deeply about for the coming weeks and months.
+
+35:21.000 --> 35:24.000
+So, that's great.
+
+35:24.000 --> 35:28.000
+Thank you.
+
+35:28.000 --> 35:30.000
+We can keep this session going as long as you want.
+
+35:30.000 --> 35:33.000
+The stream has already moved on, but here it is open.
+
+35:33.000 --> 35:40.000
+If folks have any more questions, feel free to post them here or on the separate pad page.
+
+35:40.000 --> 35:46.000
+Yeah, or if not, then we can all drop off at some point.
+
+35:46.000 --> 35:48.000
+Sure.
+
+35:48.000 --> 35:52.000
+If there are any questions, I'll be happy to answer them.
+
+35:52.000 --> 36:07.000
+Otherwise, perhaps we could go and watch the rest.
+
+36:23.000 --> 36:31.000
+Yeah, I mean, I think perhaps it's a good thing to consider the session complete.
+
+36:31.000 --> 36:33.000
+Sure, sounds good to me.
+
+36:33.000 --> 36:36.000
+Thank you again very much Mohsen, really appreciate it.
+
+36:36.000 --> 36:38.000
+Thank you.
+
+36:38.000 --> 36:39.000
+Cheers, take care.
+
+36:39.000 --> 36:57.000
+Take care.
+
diff --git a/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt
new file mode 100644
index 00000000..5a0a3ee0
--- /dev/null
+++ b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt
@@ -0,0 +1,80 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:41.079
+Introduction
+
+00:01:41.080 --> 00:03:33.599
+Mail and the digital ecosystem
+
+00:03:33.600 --> 00:05:32.399
+Platformization and Mail
+
+00:05:32.400 --> 00:06:19.799
+Contours of this presentation
+
+00:06:19.800 --> 00:06:42.839
+Anatomy of monolithic MUAs
+
+00:06:42.840 --> 00:07:22.959
+Existing Elisp mail libraries and modes
+
+00:07:22.960 --> 00:08:22.319
+Concept of a split-MUA
+
+00:08:22.320 --> 00:09:42.399
+Emacs and the culture of DIY split-MUAs
+
+00:09:42.400 --> 00:13:10.879
+A glimpse of the bigger picture
+
+00:13:10.880 --> 00:17:31.319
+The full ByStar story
+
+00:17:31.320 --> 00:19:20.119
+ByStar DE context, assets, and terminology
+
+00:19:20.120 --> 00:20:21.759
+MARMEE parts list
+
+00:20:21.760 --> 00:20:47.679
+Blee-Gnus parts list
+
+00:20:47.680 --> 00:22:08.839
+Deep integration of BISOS-MARMEE and Blee-Gnus
+
+00:22:08.840 --> 00:23:56.559
+qmail and bystar-qmail
+
+00:23:56.560 --> 00:25:10.759
+MARMEE: common-agent for split-MUA implementations
+
+00:25:10.760 --> 00:26:17.199
+Obtaining, installing, and configuring MARMEE
+
+00:26:17.200 --> 00:27:20.479
+Installing MARMEE
+
+00:27:20.480 --> 00:29:47.759
+Emacs inside of ByStar
+
+00:29:47.760 --> 00:31:36.959
+Emacs common-agent models and interfaces
+
+00:31:36.960 --> 00:32:35.279
+Evolution of Gnus with MARMEE
+
+00:32:35.280 --> 00:33:11.319
+X-Message-SMTP-Method: qmail
+
+00:33:11.320 --> 00:33:39.319
+X-Message-Send-Method
+
+00:33:39.320 --> 00:34:39.599
+Shared common-agents configuration and secrets management
+
+00:34:39.600 --> 00:35:34.079
+Evolution of message-mode into message-polymode
+
+00:35:34.080 --> 00:37:30.960
+Two vertical-slice mail use cases
diff --git a/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt
new file mode 100644
index 00000000..e39711df
--- /dev/null
+++ b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt
@@ -0,0 +1,1757 @@
+WEBVTT captioned by mohsen
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:09.719
+Greetings. Salaam. This is Mohsen Banan. محسن بنان.
+
+00:00:09.720 --> 00:00:12.559
+I am a software and internet engineer.
+
+00:00:12.560 --> 00:00:14.519
+I have been interested in email and
+
+00:00:14.520 --> 00:00:17.199
+Emacs for a very long time.
+
+00:00:17.200 --> 00:00:21.159
+My interest in email started with X.400
+
+00:00:21.160 --> 00:00:27.599
+and the Red and Blue CCITT books -- circa 1988.
+
+00:00:27.600 --> 00:00:31.999
+Early on, in the very early 1990s, I jumped ship
+
+00:00:32.000 --> 00:00:35.279
+and joined the Internet email movement.
+
+00:00:35.280 --> 00:00:38.399
+I am the primary author of two mobile email
+
+00:00:38.400 --> 00:00:45.839
+related Internet RFCs, RFC-2188 and RFC-2524.
+
+00:00:45.840 --> 00:00:49.919
+My interest in Emacs started in 1986 --
+
+00:00:49.920 --> 00:00:54.959
+It was Emacs version 17 then. By around 1988
+
+00:00:54.960 --> 00:00:58.479
+when Emacs version 18 was well in place,
+
+00:00:58.480 --> 00:01:01.799
+I started living inside of Emacs.
+
+00:01:01.800 --> 00:01:06.479
+My primary digital environment has been Emacs ever since.
+
+00:01:06.480 --> 00:01:11.319
+It has been a good life.
+
+00:01:11.320 --> 00:01:16.999
+It turns out that Emacs and email mix up really well.
+
+00:01:17.000 --> 00:01:21.519
+Here, in this presentation and in the context of
+
+00:01:21.520 --> 00:01:26.799
+Revisiting The Anatomy of Emacs Mail User Agents,
+
+00:01:26.800 --> 00:01:30.319
+With MARMEE (Multi-Account Resident
+
+00:01:30.320 --> 00:01:33.399
+Message Exchange Environment)
+
+00:01:33.400 --> 00:01:35.559
+I am offering my thoughts on this topic
+
+00:01:35.560 --> 00:01:41.079
+in this Emacs Conference 2022.
+
+NOTE Mail and the digital ecosystem
+
+00:01:41.080 --> 00:01:43.359
+Long ago, I asked myself:
+
+00:01:43.360 --> 00:01:49.119
+"What should my ultimate mail environment be?"
+
+00:01:49.120 --> 00:01:52.140
+Over the past 20+ years, I have been exploring
+
+00:01:52.141 --> 00:01:58.519
+the concept of the "Ultimate Mail User Agent (MUA)".
+
+00:01:58.520 --> 00:02:01.439
+We do care about privacy, autonomy,
+
+00:02:01.440 --> 00:02:05.039
+morality, ethics, society and philosophy,
+
+00:02:05.040 --> 00:02:10.679
+so from the get go, proprietary (Haraam) environments
+
+00:02:10.680 --> 00:02:14.199
+such as Microsoft Office's Outlook
+
+00:02:14.200 --> 00:02:20.159
+and Google Office's Gmail were non-starters for me.
+
+00:02:20.160 --> 00:02:23.159
+But these are significant realities
+
+00:02:23.160 --> 00:02:27.879
+and we need to deal with these realities.
+
+00:02:27.880 --> 00:02:30.199
+Notice how Microsoft and Google
+
+00:02:30.200 --> 00:02:36.079
+have both framed their MUAs in the context of "office".
+
+00:02:36.080 --> 00:02:38.719
+That type of framing is correct.
+
+00:02:38.720 --> 00:02:41.719
+an MUA must be fully integrated
+
+00:02:41.720 --> 00:02:46.559
+in the totality of one's digital ecosystem.
+
+00:02:46.560 --> 00:02:49.759
+So, the Ultimate Mail User Agent
+
+00:02:49.760 --> 00:02:53.399
+must be part of the Ultimate Usage Environment
+
+00:02:53.400 --> 00:02:57.599
+of the Ultimate Digital Ecosystem.
+
+00:02:57.600 --> 00:03:02.799
+In the non-proprietary (Halaal) universe, clearly
+
+00:03:02.800 --> 00:03:07.199
+the ultimate usage environment is Emacs.
+
+00:03:07.200 --> 00:03:10.879
+Emacs is today's most potent and convivial
+
+00:03:10.880 --> 00:03:15.159
+non-proprietary usage environment.
+
+00:03:15.160 --> 00:03:19.399
+So, clearly, the ultimate Mail User Agent
+
+00:03:19.400 --> 00:03:22.879
+must be an integral part of Emacs.
+
+NOTE Emacs and mail
+
+00:03:22.880 --> 00:03:24.157
+Having reached that conclusion,
+
+00:03:24.158 --> 00:03:28.124
+we then need to determine the specifics
+
+00:03:28.125 --> 00:03:33.599
+of the shape and the anatomy of Emacs' MUAs.
+
+00:03:33.600 --> 00:03:36.039
+We could have arrived at this conclusion
+
+00:03:36.040 --> 00:03:38.239
+from the reverse direction as well.
+
+00:03:38.240 --> 00:03:41.599
+Zawinski's Law states:
+
+00:03:41.600 --> 00:03:46.479
+Every program attempts to expand until it can read mail.
+
+00:03:46.480 --> 00:03:49.119
+Those programs which cannot so expand
+
+00:03:49.120 --> 00:03:52.679
+are replaced by ones which can.
+
+00:03:52.680 --> 00:03:56.719
+Jamie's point is very simple and obvious.
+
+00:03:56.720 --> 00:03:59.759
+The "App" that you "live in" all day
+
+00:03:59.760 --> 00:04:05.439
+should be your MUA and mail environment.
+
+00:04:05.440 --> 00:04:09.559
+I ask those who jumped ship, who abandoned Emacs
+
+00:04:09.560 --> 00:04:15.879
+in favor of VS Code: What about mail?
+
+00:04:15.880 --> 00:04:21.279
+Long ago, Emacs expanded to including MUAs.
+
+00:04:21.280 --> 00:04:27.039
+In fact there are many Emacs MUAs that you can choose from.
+
+00:04:27.040 --> 00:04:30.599
+If you are already hip with Emacs And Linux,
+
+00:04:30.600 --> 00:04:34.639
+you should definitely consider doing email in Emacs.
+
+00:04:34.640 --> 00:04:39.079
+But if you are not already hip with Emacs,
+
+00:04:39.080 --> 00:04:43.359
+I mean for new Emacs users, unfortunately,
+
+00:04:43.360 --> 00:04:48.599
+setting up and using email is not straight forward.
+
+00:04:48.600 --> 00:04:54.519
+We (I mean, Emacs developers) should work on that!
+
+00:04:54.520 --> 00:04:57.359
+Emacs offers a good number of MUAs with
+
+00:04:57.360 --> 00:05:01.959
+different characteristics to suit differing tastes.
+
+00:05:01.960 --> 00:05:06.119
+As of 2022, you can choose from the following MUAs:
+
+00:05:06.120 --> 00:05:15.079
+Gnus, VM, WanderLust, Mew, mu4e, notmuch.el, mh-e and Rmail.
+
+00:05:15.080 --> 00:05:17.719
+Over the years I have tried several of these
+
+00:05:17.720 --> 00:05:20.119
+and eventually landed on Gnus.
+
+00:05:20.120 --> 00:05:25.519
+The relevance column in this table simply and only
+
+00:05:25.520 --> 00:05:28.079
+reflects my taste.
+
+00:05:28.080 --> 00:05:32.399
+Throughout the rest of this presentation, I focus on Gnus.
+
+NOTE The audience for this presentation
+
+00:05:32.400 --> 00:05:36.199
+I have 3 types of audiences in mind for this presentation.
+
+00:05:36.200 --> 00:05:39.959
+First, if you are already using Emacs
+
+00:05:39.960 --> 00:05:42.439
+as more than an editor,
+
+00:05:42.440 --> 00:05:47.399
+it makes good sense for you to also use Emacs as your MUA.
+
+00:05:47.400 --> 00:05:50.759
+There may well be some relevant information here for you
+
+00:05:50.760 --> 00:05:52.319
+in that situation.
+
+00:05:52.320 --> 00:05:57.599
+Second, for those interested in philosophy of Emacs,
+
+00:05:57.600 --> 00:06:00.759
+I go on some bigger picture tangents
+
+00:06:00.760 --> 00:06:02.839
+that may be of value to you.
+
+00:06:02.840 --> 00:06:08.839
+Third, I address some Emacs developers with some feedback,
+
+00:06:08.840 --> 00:06:11.319
+some suggestions, and some requests.
+
+00:06:11.320 --> 00:06:14.599
+The general model here is that
+
+00:06:14.600 --> 00:06:17.079
+we would collectively work towards
+
+00:06:17.080 --> 00:06:19.799
+improving what is on the table.
+
+NOTE Monolithic mail user agents
+
+00:06:19.800 --> 00:06:22.719
+When a Mail User Agent is self-contained
+
+00:06:22.720 --> 00:06:26.519
+and includes implementation of mail protocols,
+
+00:06:26.520 --> 00:06:29.079
+we call it a Monolithic-MUA.
+
+00:06:29.080 --> 00:06:33.879
+Just as it is with the physical mail postal service,
+
+00:06:33.880 --> 00:06:36.919
+sending mail and receiving mail
+
+00:06:36.920 --> 00:06:40.639
+are fundamentally separate activities.
+
+00:06:40.640 --> 00:06:42.839
+And then there is mail processing.
+
+00:06:42.840 --> 00:06:45.959
+Based on these categorizations,
+
+00:06:45.960 --> 00:06:49.679
+Emacs has a set of mature libraries
+
+00:06:49.680 --> 00:06:53.359
+for composing mail, sending mail, and receiving mail.
+
+00:06:53.360 --> 00:06:58.119
+These are all independently well-documented
+
+00:06:58.120 --> 00:07:02.479
+and are part of the basic emacs Distribution.
+
+00:07:02.480 --> 00:07:06.239
+Emacs MUAs then use these common libraries
+
+00:07:06.240 --> 00:07:09.519
+to process mail (each somewhat differently).
+
+00:07:09.520 --> 00:07:15.399
+The primary benefit of the Monolithic-MUA approach
+
+00:07:15.400 --> 00:07:19.599
+is that Emacs MUAs then become self-contained
+
+00:07:19.600 --> 00:07:22.959
+and therefore multi-platform.
+
+NOTE Split mail user agents
+
+00:07:22.960 --> 00:07:25.559
+But, when it comes to the question of merits of
+
+00:07:25.560 --> 00:07:30.559
+implementation of mail protocols in Elisp inside of Emacs,
+
+00:07:30.560 --> 00:07:33.959
+there is also another approach:
+
+00:07:33.960 --> 00:07:36.159
+that of a Split-MUA.
+
+00:07:36.160 --> 00:07:40.559
+Concept of a split-MUA is that of
+
+00:07:40.560 --> 00:07:44.959
+splitting the MUA into two different parts:
+
+00:07:44.960 --> 00:07:47.159
+One being the usage environment,
+
+00:07:47.160 --> 00:07:50.319
+and the other being mail protocols processing.
+
+00:07:50.320 --> 00:07:54.719
+The interface between these can be either
+
+00:07:54.720 --> 00:07:57.839
+direct (the upper box)
+
+00:07:57.840 --> 00:08:00.279
+or through protocols (the lower box).
+
+00:08:00.280 --> 00:08:05.159
+With Gnus, we primarily use the direct interface.
+
+00:08:05.160 --> 00:08:09.639
+The split-MUA model has many advantages
+
+00:08:09.640 --> 00:08:12.599
+over the monolithic-MUA model.
+
+00:08:12.600 --> 00:08:17.279
+With Split-MUAs, your messages are local,
+
+00:08:17.280 --> 00:08:19.839
+you can search them privately
+
+00:08:19.840 --> 00:08:22.319
+and access to your email is faster.
+
+NOTE Gnus can be both
+
+00:08:22.320 --> 00:08:28.119
+Gnus can be used as both a Monolithic-MUA
+
+00:08:28.120 --> 00:08:30.599
+and also as a Split-MUA.
+
+00:08:30.600 --> 00:08:35.399
+Gnus and other Emacs MUAs are flexible enough
+
+00:08:35.400 --> 00:08:39.119
+to allow you to create your own split-MUA.
+
+00:08:39.120 --> 00:08:42.519
+For outgoing mail, Gnus can
+
+00:08:42.520 --> 00:08:45.119
+invoke a sendmail-like interface program.
+
+00:08:45.120 --> 00:08:50.007
+For incoming mail, Gnus can access Maildirs directly
+
+00:08:50.008 --> 00:08:53.724
+and let other programs imap-retrieve
+
+00:08:53.725 --> 00:08:56.439
+and update into maildirs.
+
+00:08:56.440 --> 00:08:59.719
+You can then search through your maildirs
+
+00:08:59.720 --> 00:09:01.374
+locally and privately
+
+00:09:01.375 --> 00:09:04.559
+with various mail-oriented search engines,
+
+00:09:04.560 --> 00:09:07.319
+and many have done so.
+
+00:09:07.320 --> 00:09:11.399
+For example, what we are seeing on this slide
+
+00:09:11.400 --> 00:09:15.879
+is from a 2014 Do It Yourself (DIY) recipe
+
+00:09:15.880 --> 00:09:20.319
+that one of our fellow Emacs conference participants,
+
+00:09:20.320 --> 00:09:24.879
+Adolfo, had published at the mentioned URL.
+
+00:09:24.880 --> 00:09:29.719
+The recipe in that slide is based on the following tools:
+
+00:09:29.720 --> 00:09:35.079
+mbsync, mu, mu4e, and msmtp.
+
+00:09:35.080 --> 00:09:38.279
+All our choices are different.
+
+00:09:38.280 --> 00:09:42.399
+There are many such recipes out there on the web.
+
+NOTE Proprietary universes
+
+00:09:42.400 --> 00:09:46.199
+So, here, I don't want to provide
+
+00:09:46.200 --> 00:09:50.439
+yet another Emacs Split-MUA recipe.
+
+00:09:50.440 --> 00:09:51.559
+I want to do more.
+
+00:09:51.560 --> 00:09:56.679
+Instead, I want to target the contours of the ultimate MUA
+
+00:09:56.680 --> 00:10:01.319
+in the non-proprietary universe of digital ecosystems.
+
+00:10:01.320 --> 00:10:05.439
+But, first, let's take a look at what is
+
+00:10:05.440 --> 00:10:07.479
+happening in the proprietary universe.
+
+00:10:07.480 --> 00:10:11.439
+The 5 big American proprietary tech companies
+
+00:10:11.440 --> 00:10:14.399
+(Google, Microsoft, Apple, Facebook and Amazon)
+
+00:10:14.400 --> 00:10:20.439
+have created 5 competing enclaves as mostly separate
+
+00:10:20.440 --> 00:10:22.999
+and isolated digital ecosystem.
+
+00:10:23.000 --> 00:10:27.839
+In this slide, I am focusing on the first 3
+
+00:10:27.840 --> 00:10:31.439
+and each of their office and email environments.
+
+00:10:31.440 --> 00:10:36.319
+Let's clearly recognize that the economic model
+
+00:10:36.320 --> 00:10:40.159
+of these proprietary digital ecosystems is:
+
+00:10:40.160 --> 00:10:42.159
+"Surveillance Capitalism".
+
+00:10:42.160 --> 00:10:45.799
+So, when any of us goes there to get
+
+00:10:45.800 --> 00:10:47.959
+a free-of-charge email account,
+
+00:10:47.960 --> 00:10:53.039
+he has chosen to voluntarily forgo much of his privacy.
+
+00:10:53.040 --> 00:10:55.799
+And many have done so.
+
+00:10:55.800 --> 00:10:59.919
+Sadly, the rest of the world is becoming
+
+00:10:59.920 --> 00:11:02.719
+Americanized through the American Internet.
+
+00:11:02.720 --> 00:11:08.439
+As of 2022, almost %90 of Facebook's
+
+00:11:08.440 --> 00:11:11.959
+daily active users come from outside of the US.
+
+00:11:11.960 --> 00:11:17.159
+Also, with respect to email, each of the enclaves
+
+00:11:17.160 --> 00:11:20.039
+have MUAs that are fully integrated
+
+00:11:20.040 --> 00:11:22.439
+in their digital ecosystems
+
+00:11:22.440 --> 00:11:24.599
+in the form of an office environment
+
+00:11:24.600 --> 00:11:29.839
+comprising of address book, calendar, time management
+
+00:11:29.840 --> 00:11:33.199
+and planning tools and multi-lingual authoring
+
+00:11:33.200 --> 00:11:36.239
+and various other integrated tools.
+
+NOTE Non-proprietary universes
+
+00:11:36.240 --> 00:11:40.839
+Now, let's focus on the right side of this picture.
+
+00:11:40.840 --> 00:11:43.519
+On the non-proprietary side,
+
+00:11:43.520 --> 00:11:46.239
+based on the Western FLOSS model,
+
+00:11:46.240 --> 00:11:49.479
+we have ended up with lots of components.
+
+00:11:49.480 --> 00:11:52.239
+We have Debian as a platform,
+
+00:11:52.240 --> 00:11:58.919
+we have Emacs as an editor-centered office environment
+
+00:11:58.920 --> 00:12:03.439
+and we have Gnus as an incredibly powerful MUA.
+
+00:12:03.440 --> 00:12:07.839
+But on the non-proprietary side we don't have anything
+
+00:12:07.840 --> 00:12:12.079
+that can reasonably be considered a digital ecosystem.
+
+00:12:12.080 --> 00:12:16.439
+I mean, the services aspect is missing.
+
+NOTE By*
+
+00:12:16.440 --> 00:12:20.799
+Over the past two decades I have created
+
+00:12:20.800 --> 00:12:24.399
+quite an elaborate digital ecosystem for myself.
+
+00:12:24.400 --> 00:12:26.759
+It is called: By*.
+
+00:12:26.760 --> 00:12:30.839
+The Libre-Halaal ByStar Digital Ecosystem
+
+00:12:30.840 --> 00:12:35.439
+is being built to provide autonomy-oriented services
+
+00:12:35.440 --> 00:12:37.359
+on internet scale.
+
+00:12:37.360 --> 00:12:42.919
+The * in ByStar stands for Unix's globbing symbol,
+
+00:12:42.920 --> 00:12:46.919
+signifying that our scope is everything.
+
+00:12:46.920 --> 00:12:52.039
+Notice in this bigger picture that in the red box,
+
+00:12:52.040 --> 00:12:58.439
+our focus remains to be Emacs, Gnus and the ultimate MUA.
+
+00:12:58.440 --> 00:13:03.439
+I am not here to sell you ByStar, but perhaps
+
+00:13:03.440 --> 00:13:06.239
+you should be in the market for something like that.
+
+00:13:06.240 --> 00:13:10.879
+We need non-proprietary digital ecosystems.
+
+00:13:10.880 --> 00:13:13.359
+Very briefly, I'll give you
+
+00:13:13.360 --> 00:13:16.319
+some pointers to the full ByStar story.
+
+00:13:16.320 --> 00:13:23.239
+The full ByStar story is a 250 plus pages book titled:
+
+00:13:23.240 --> 00:13:26.079
+Nature Of Polyexistentials,
+
+00:13:26.080 --> 00:13:28.399
+Basis For Abolishment Of
+
+00:13:28.400 --> 00:13:31.319
+The Western Intellectual Property Rights Regime,
+
+00:13:31.320 --> 00:13:33.479
+And Introduction Of
+
+00:13:33.480 --> 00:13:36.359
+The Libre-Halaal ByStar Digital Ecosystem.
+
+00:13:36.360 --> 00:13:42.039
+I have it self-published on my own ByName public web page.
+
+00:13:42.040 --> 00:13:46.639
+The ByStar story starts with understanding of the
+
+00:13:46.640 --> 00:13:48.959
+Nature Of Polyexistentials.
+
+00:13:48.960 --> 00:13:53.839
+Polyexistentials inherently exist in multiples.
+
+00:13:53.840 --> 00:13:56.959
+Software is a polyexistential.
+
+00:13:56.960 --> 00:14:01.919
+Polyexistentials are naturally non-scarce,
+
+00:14:01.920 --> 00:14:06.279
+and making polyexistential artificially scarce,
+
+00:14:06.280 --> 00:14:08.599
+which is what the Western
+
+00:14:08.600 --> 00:14:11.119
+intellectual property rights regime does,
+
+00:14:11.120 --> 00:14:13.599
+is counter to nature.
+
+00:14:13.600 --> 00:14:17.639
+Polyexistentials are unownable
+
+00:14:17.640 --> 00:14:20.039
+and should not be considered property.
+
+00:14:20.040 --> 00:14:25.079
+The Western IPR regime is in conflict with nature.
+
+00:14:25.080 --> 00:14:29.039
+But, the book is more than just philosophy.
+
+00:14:29.040 --> 00:14:32.359
+In that book I also cover
+
+00:14:32.360 --> 00:14:35.799
+the bigger picture of healthy digital ecosystems
+
+00:14:35.800 --> 00:14:39.359
+which also includes the topic of this presentation.
+
+00:14:39.360 --> 00:14:43.399
+I'd be interested in your thoughts and your feedback,
+
+00:14:43.400 --> 00:14:45.679
+if you choose to dig deeper.
+
+00:14:45.680 --> 00:14:50.999
+And if you want to dig deeper, here are some links.
+
+00:14:51.000 --> 00:14:55.079
+By* is about re-decentralization
+
+00:14:55.080 --> 00:14:57.159
+of Internet application services.
+
+00:14:57.160 --> 00:15:00.759
+Among other things, ByStar provides
+
+00:15:00.760 --> 00:15:05.159
+complete own-your-email services. I mean,
+
+00:15:05.160 --> 00:15:10.319
+private Hillary-Clinton-Style mail servers for everyone.
+
+00:15:10.320 --> 00:15:16.519
+There is an overview of ByStar at by-star.net.
+
+NOTE Libre-Halaal
+
+00:15:16.520 --> 00:15:21.199
+You may have noticed that I consistently use
+
+00:15:21.200 --> 00:15:25.479
+the "Libre-Halaal" label with ByStar.
+
+00:15:25.480 --> 00:15:28.919
+Halaal is a very sensitive word.
+
+00:15:28.920 --> 00:15:30.719
+I am a Moslem.
+
+00:15:30.720 --> 00:15:35.919
+But my use of Halaal is not in a religious context.
+
+00:15:35.920 --> 00:15:39.079
+It is in a philosphical context.
+
+00:15:39.080 --> 00:15:42.759
+And the scope of the "Libre-Halaal" label
+
+00:15:42.760 --> 00:15:46.439
+is manner-of-existence of Software and Services.
+
+00:15:46.440 --> 00:15:50.599
+It is not about Halaal-ness with respect to
+
+00:15:50.600 --> 00:15:54.959
+function and use of Software and Services.
+
+00:15:54.960 --> 00:15:58.239
+Unfortunately, the word Halaal
+
+00:15:58.240 --> 00:16:02.319
+and the concept of Halaal does not exist in English.
+
+00:16:02.320 --> 00:16:06.759
+So, first I introduce it into Globish.
+
+00:16:06.760 --> 00:16:12.799
+I have done so in PLPC-120039.
+
+00:16:12.800 --> 00:16:18.199
+Further, I explain as to why labels
+
+00:16:18.200 --> 00:16:22.639
+of Open Source and Free Software are both ill-directed.
+
+00:16:22.640 --> 00:16:25.839
+We then carefully define
+
+00:16:25.840 --> 00:16:29.999
+"Libre-Halaal Software" and "Libre-Halaal Services".
+
+00:16:30.000 --> 00:16:33.919
+Notice that last link.
+
+00:16:33.920 --> 00:16:36.199
+I bet, this is the first time
+
+00:16:36.200 --> 00:16:40.679
+that anyone includes a link to his "Open Business Plan"
+
+00:16:40.680 --> 00:16:43.159
+in an Emacs Conference.
+
+00:16:43.160 --> 00:16:46.559
+I hope others would do this as well.
+
+00:16:46.560 --> 00:16:49.679
+There is appetite out there
+
+00:16:49.680 --> 00:16:53.639
+for privacy- and autonomy-oriented digital ecosystems,
+
+00:16:53.640 --> 00:16:57.759
+and there is no conflict between honest business,
+
+00:16:57.760 --> 00:17:01.039
+honest profit, and Libre-Halaal Software
+
+00:17:01.040 --> 00:17:02.919
+and Libre-Halaal Services.
+
+00:17:02.920 --> 00:17:08.039
+The sub-title of our open business plan is:
+
+00:17:08.040 --> 00:17:12.879
+"An Inversion to the Proprietary Internet Services Model".
+
+00:17:12.880 --> 00:17:20.879
+And here are the same links as a native Reveal slide.
+
+00:17:20.880 --> 00:17:24.679
+If instead of a video, you are viewing
+
+00:17:24.680 --> 00:17:27.399
+this presentation as a Reveal web page,
+
+00:17:27.400 --> 00:17:31.319
+you can just click on the pointers and URLs.
+
+NOTE The BISOS integration framework
+
+00:17:31.320 --> 00:17:36.879
+So, what was the point of bringing ByStar
+
+00:17:36.880 --> 00:17:38.119
+into this presentation?
+
+00:17:38.120 --> 00:17:42.319
+In tangible terms, what have we gotten out of
+
+00:17:42.320 --> 00:17:45.639
+the tangent we took on the ByStar bigger picture?
+
+00:17:45.640 --> 00:17:50.839
+Of course we have the ByStar Digital Ecosystem itself.
+
+00:17:50.840 --> 00:17:54.879
+But that is not immediately relevant to this presentation.
+
+00:17:54.880 --> 00:17:59.959
+Here, through BISOS we now have
+
+00:17:59.960 --> 00:18:04.359
+an integration framework, which we definitely needed.
+
+00:18:04.360 --> 00:18:07.879
+We now have BISOS-MARMEE,
+
+00:18:07.880 --> 00:18:11.519
+Multi-Account Resident Mail Exchange Environment,
+
+00:18:11.520 --> 00:18:13.679
+which is a consistent set
+
+00:18:13.680 --> 00:18:17.639
+of MUA-related software components --- which we need.
+
+00:18:17.640 --> 00:18:23.159
+We also needed to augment Emacs in our own terms,
+
+00:18:23.160 --> 00:18:25.919
+so we have Blee for that,
+
+00:18:25.920 --> 00:18:29.959
+ByStar Libre-Halaal Emacs Environment,
+
+00:18:29.960 --> 00:18:32.919
+is ByStar ecosystemized Emacs.
+
+00:18:32.920 --> 00:18:37.679
+And finally Blee-Gnus, which is
+
+00:18:37.680 --> 00:18:40.639
+Gnus and MARMEE integrated with Blee.
+
+00:18:40.640 --> 00:18:46.479
+With these in place, we can now dive deeper into MARMEE.
+
+00:18:46.480 --> 00:18:53.119
+The idea of MARMEE, is that of packaging together
+
+00:18:53.120 --> 00:18:56.079
+the mail protocols parts of the Split-MUA.
+
+00:18:56.080 --> 00:19:00.799
+MARMEE (which is of course in the context of BISOS)
+
+00:19:00.800 --> 00:19:03.679
+is the green box in this slide.
+
+00:19:03.680 --> 00:19:08.519
+For outgoing mail, we use an altered qmail.
+
+00:19:08.520 --> 00:19:12.679
+We will be looking deeper into qmail a bit later.
+
+00:19:12.680 --> 00:19:17.559
+For incoming mail, we are using offlineimap
+
+00:19:17.560 --> 00:19:20.119
+which is oauth2 aware.
+
+NOTE BISOS-MARMEE
+
+00:19:20.120 --> 00:19:23.439
+Before going into more details,
+
+00:19:23.440 --> 00:19:26.519
+let's take a look at the parts lists for
+
+00:19:26.520 --> 00:19:29.359
+BISOS-MARMEE and Blee-Gnus.
+
+00:19:29.360 --> 00:19:33.719
+MARMEE is a collection of Python-based libraries
+
+00:19:33.720 --> 00:19:37.479
+and Debian packages that provide for rich sending
+
+00:19:37.480 --> 00:19:40.279
+and receiving of email outside of Emacs.
+
+00:19:40.280 --> 00:19:44.239
+Here is our BISOS-MARMEE parts list.
+
+00:19:44.240 --> 00:19:48.599
+MARMEE features include tracked mail Sending
+
+00:19:48.600 --> 00:19:51.919
+for confirmed mail communications
+
+00:19:51.920 --> 00:19:54.599
+and email distribution facilities
+
+00:19:54.600 --> 00:19:57.559
+(say, similar to Constant Contact).
+
+00:19:57.560 --> 00:20:02.079
+For Delivery Status Notification (DSN),
+
+00:20:02.080 --> 00:20:06.039
+we have adopted flufl.bounce.
+
+00:20:06.040 --> 00:20:10.879
+I'll be touching on everything that is qmail-related,
+
+00:20:10.880 --> 00:20:17.319
+namely qmail-remote.cs and mailfront, in a separate slide.
+
+00:20:17.320 --> 00:20:21.759
+notmuch is our choice of mail search engine.
+
+NOTE Blee-Gnus
+
+00:20:21.760 --> 00:20:27.319
+Similarly, here is our Blee-Gnus Parts List.
+
+00:20:27.320 --> 00:20:33.439
+Blee-Gnus is Gnus and MARMEE integrated with BISOS and Blee.
+
+00:20:33.440 --> 00:20:38.599
+Notice mentions of org-msg and polymode here.
+
+00:20:38.600 --> 00:20:42.879
+Later, I'll expand on these in the context of
+
+00:20:42.880 --> 00:20:47.679
+transitioning from Message-Mode to Message-Polymode.
+
+NOTE In combination
+
+00:20:47.680 --> 00:20:52.199
+With these parts in place,
+
+00:20:52.200 --> 00:20:55.279
+now let's see how they will all come together.
+
+00:20:55.280 --> 00:20:59.999
+Gnus is very flexible, and in combination with MARMEE,
+
+00:21:00.000 --> 00:21:03.639
+it can create an incredibly powerful MUA.
+
+00:21:03.640 --> 00:21:07.279
+On this slide, note the boxes
+
+00:21:07.280 --> 00:21:10.319
+that include the FPs label.
+
+00:21:10.320 --> 00:21:14.839
+FP stand for File Parameters.
+
+00:21:14.840 --> 00:21:18.519
+It is the basis of BISOS's configuration
+
+00:21:18.520 --> 00:21:20.039
+and secrets management.
+
+00:21:20.040 --> 00:21:24.319
+Notice that it has consistent agents
+
+00:21:24.320 --> 00:21:27.839
+inside of Emacs and on the OS.
+
+00:21:27.840 --> 00:21:29.919
+This is a big deal
+
+00:21:29.920 --> 00:21:34.719
+in that it can reduce user visible configuration complexity.
+
+NOTE X822-Bus
+
+00:21:34.720 --> 00:21:39.759
+Also, notice the X822-Bus here.
+
+00:21:39.760 --> 00:21:43.999
+The idea of X822-Bus is that of
+
+00:21:44.000 --> 00:21:49.839
+allowing for communication among user's preferences, Gnus
+
+00:21:49.840 --> 00:21:53.599
+and MARMEE-qmail through addition of X- fields
+
+00:21:53.600 --> 00:21:57.959
+in RFC-822 message headers.
+
+00:21:57.960 --> 00:22:03.599
+X822-Bus is used for selection of mail sending agents
+
+00:22:03.600 --> 00:22:08.839
+and specification of delivery status parameters.
+
+NOTE bystar-qmail
+
+00:22:08.840 --> 00:22:12.279
+Of key significance in this picture
+
+00:22:12.280 --> 00:22:15.479
+is our choice of qmail for outgoing mail.
+
+00:22:15.480 --> 00:22:22.519
+Compared to sendmail, postfix, exim,
+
+00:22:22.520 --> 00:22:25.399
+and other conventional MTAs;
+
+00:22:25.400 --> 00:22:31.719
+the qmail ecosystem is far more flexible and potent.
+
+00:22:31.720 --> 00:22:34.599
+We are not using qmail as is.
+
+00:22:34.600 --> 00:22:37.999
+Ours is called bystar-qmail.
+
+00:22:38.000 --> 00:22:41.799
+When we use it as a traditional MTA,
+
+00:22:41.800 --> 00:22:45.439
+we refer to it as PALS-qmail.
+
+00:22:45.440 --> 00:22:52.599
+And when we use it on the MUA side, we call it MARMEE-qmail.
+
+00:22:52.600 --> 00:22:56.599
+Just like Emacs, qmail has
+
+00:22:56.600 --> 00:22:59.959
+a solid core and a flexible periphery.
+
+00:22:59.960 --> 00:23:04.479
+All our alterations have been on the periphery.
+
+00:23:04.480 --> 00:23:07.890
+We have replaced qmail-remote
+
+00:23:07.891 --> 00:23:14.479
+with our own Python implementation called qmail-remote.cs.
+
+00:23:14.480 --> 00:23:20.919
+By being in Python, it can do a lot more a lot more easily.
+
+00:23:20.920 --> 00:23:26.540
+For example, qmail-remote.cs interacts with
+
+00:23:26.541 --> 00:23:33.079
+Google Oauth2 APIs and allows you to send through Gmail.
+
+00:23:33.080 --> 00:23:36.399
+This is shown with the red circle.
+
+00:23:36.400 --> 00:23:43.639
+We have also replaced qmail-smtpd with mailfront,
+
+00:23:43.640 --> 00:23:46.159
+shown with a blue circle.
+
+00:23:46.160 --> 00:23:51.359
+This allows us to use MARMEE Split-MUA
+
+00:23:51.360 --> 00:23:53.999
+through protocol interfaces.
+
+00:23:54.000 --> 00:23:56.559
+Let's take a look at that.
+
+NOTE Using MARMEE with other MUAs outside Emacs
+
+00:23:56.560 --> 00:24:02.719
+Previously we looked at the "Direct Interface" of MARMEE,
+
+00:24:02.720 --> 00:24:08.479
+specifically, qmail-inject and Maildir for Gnus.
+
+00:24:08.480 --> 00:24:11.479
+But what if we wanted to use
+
+00:24:11.480 --> 00:24:15.159
+MARMEE with other MUAs outside of Emacs?
+
+00:24:15.160 --> 00:24:18.799
+That can be done through the "Protocol Interface".
+
+00:24:18.800 --> 00:24:22.039
+MARMEE also includes "mailfront"
+
+00:24:22.040 --> 00:24:27.439
+which can function as an SMTP submit server for localhost.
+
+00:24:27.440 --> 00:24:30.599
+This way, we can configure
+
+00:24:30.600 --> 00:24:36.239
+the outgoing mail part of any MUA to point to the localhost
+
+00:24:36.240 --> 00:24:41.399
+and have MARMEE-qmail function as an outgoing proxy.
+
+NOTE Incoming mail
+
+00:24:41.400 --> 00:24:47.919
+For incoming mail, MARMEE-Split-MUA-Protocol-Interface
+
+00:24:47.920 --> 00:24:51.359
+includes "Courier", which can function
+
+00:24:51.360 --> 00:24:54.079
+as an IMAP server for localhost.
+
+00:24:54.080 --> 00:24:58.519
+This way, we can configure the incoming mail part
+
+00:24:58.520 --> 00:25:02.319
+of any MUA to point to the localhost
+
+00:25:02.320 --> 00:25:06.519
+and have MARMEE function as an incoming proxy
+
+00:25:06.520 --> 00:25:10.759
+by serving the local Maildir to the MUA.
+
+NOTE Licensing and project status
+
+00:25:10.760 --> 00:25:18.079
+All sources for all of ByStar, BISOS,
+
+00:25:18.080 --> 00:25:23.439
+Blee and MARMEE are subject to Affero GPL.
+
+00:25:23.440 --> 00:25:28.319
+The sources and documentation are all republished
+
+00:25:28.320 --> 00:25:30.559
+under various "Organizations"
+
+00:25:30.560 --> 00:25:35.439
+under github.com/mohsenBanan
+
+00:25:35.440 --> 00:25:40.679
+All of ByStar, BISOS, Blee and MARMEE
+
+00:25:40.680 --> 00:25:42.839
+reflect work in progress,
+
+00:25:42.840 --> 00:25:46.319
+and we are NOT recruiting users at this time.
+
+00:25:46.320 --> 00:25:49.279
+For more than two decades,
+
+00:25:49.280 --> 00:25:53.159
+I have been using these all in that bigger context.
+
+00:25:53.160 --> 00:25:56.239
+They are mostly real,
+
+00:25:56.240 --> 00:26:01.399
+but so far, just for myself and a few other engineers.
+
+00:26:01.400 --> 00:26:06.519
+Our model is similar to God's early days.
+
+00:26:06.520 --> 00:26:08.319
+You may ask:
+
+00:26:08.320 --> 00:26:12.119
+"How did God create all of this in just 7 days?"
+
+00:26:12.120 --> 00:26:17.199
+Well, easy, He did not have an installed base to deal with.
+
+NOTE Installing MARMEE
+
+00:26:17.200 --> 00:26:24.519
+You can obtain and install MARMEE in two ways. As is:
+
+00:26:24.520 --> 00:26:29.439
+as standalone-MARMEE, you can just
+
+00:26:29.440 --> 00:26:31.919
+pip install bisos.marmee.
+
+00:26:31.920 --> 00:26:35.879
+For the Gnus part you are completely on your own.
+
+00:26:35.880 --> 00:26:40.279
+Or on a Debian-11, you can just run
+
+00:26:40.280 --> 00:26:43.399
+the bisos bootstrap script.
+
+00:26:43.400 --> 00:26:48.359
+That way you will have all of BISOS, which includes MARMEE
+
+00:26:48.360 --> 00:26:52.159
+and you will have Blee, which includes Blee-Gnus.
+
+00:26:52.160 --> 00:26:54.719
+If you plan to do so,
+
+00:26:54.720 --> 00:26:58.839
+I suggest that you first try it in a disposable VM.
+
+00:26:58.840 --> 00:27:02.159
+BISOS and Blee are large.
+
+00:27:02.160 --> 00:27:06.359
+Many apt and pip packages will be installed!
+
+00:27:06.360 --> 00:27:11.839
+And here are the same links as a native Reveal slide.
+
+00:27:11.840 --> 00:27:17.519
+If you are viewing this presentation as Reveal.js web page,
+
+00:27:17.520 --> 00:27:20.479
+you can just click on the pointers and URLs.
+
+NOTE MARMEE as an Emacs "Common Agent"
+
+00:27:20.480 --> 00:27:25.359
+Let's consider MARMEE as an Emacs "Common Agent".
+
+00:27:25.360 --> 00:27:28.919
+By "Common-Agent" I mean a capability
+
+00:27:28.920 --> 00:27:30.959
+which Emacs builds on
+
+00:27:30.960 --> 00:27:33.759
+and which other Apps can also use.
+
+00:27:33.760 --> 00:27:38.479
+Emacs has a very rich applications development framework
+
+00:27:38.480 --> 00:27:41.119
+for absorbing common-agents.
+
+00:27:41.120 --> 00:27:45.474
+Consider how magit has absorbed git,
+
+00:27:45.475 --> 00:27:49.774
+or how flycheck has absorbed mypy
+
+00:27:49.775 --> 00:27:54.199
+or how EAF does its work outside of Emacs ---
+
+00:27:54.200 --> 00:27:57.919
+that too can be considered a common-agent.
+
+00:27:57.920 --> 00:28:02.039
+The common-agent model permits us
+
+00:28:02.040 --> 00:28:04.599
+to do more outside of Emacs.
+
+00:28:04.600 --> 00:28:08.639
+Common-agents maximize social benefits
+
+00:28:08.640 --> 00:28:10.559
+and are more convivial.
+
+00:28:10.560 --> 00:28:15.479
+For example, any MUA can profit from MARMEE.
+
+00:28:15.480 --> 00:28:18.439
+But we don't have good ways of
+
+00:28:18.440 --> 00:28:21.399
+packaging Emacs and its packages
+
+00:28:21.400 --> 00:28:23.639
+with their common-agents.
+
+00:28:23.640 --> 00:28:28.359
+Instead, we usually end up with DIY recipes.
+
+00:28:28.360 --> 00:28:32.479
+This is why I am contextualizing
+
+00:28:32.480 --> 00:28:35.439
+Emacs inside of Blee and BISOS.
+
+00:28:35.440 --> 00:28:37.999
+That is what they are for.
+
+00:28:38.000 --> 00:28:40.424
+And that is why I consider them
+
+00:28:40.425 --> 00:28:43.199
+immediately relevant to this presentation.
+
+00:28:43.200 --> 00:28:47.719
+With an incredibly powerful Display Engine,
+
+00:28:47.720 --> 00:28:51.279
+and an incredibly powerful Elisp Engine,
+
+00:28:51.280 --> 00:28:55.039
+and an incredibly powerful Input Methods Engine,
+
+00:28:55.040 --> 00:28:59.559
+and an incredibly powerful Common-Agents paradigm,
+
+00:28:59.560 --> 00:29:02.707
+Emacs has the potential of being
+
+00:29:02.708 --> 00:29:06.407
+any non-proprietary digital ecosystem's
+
+00:29:06.408 --> 00:29:08.879
+preferred usage environment.
+
+00:29:08.880 --> 00:29:14.090
+I am in favor of putting more around Emacs
+
+00:29:14.091 --> 00:29:17.440
+and strengthening integration of Emacs
+
+00:29:17.441 --> 00:29:19.719
+with Debian, explicitly,
+
+00:29:19.720 --> 00:29:22.839
+perhaps even at the cost of
+
+00:29:22.840 --> 00:29:26.599
+de-emphasizing its multi-platform attribute.
+
+00:29:26.600 --> 00:29:30.319
+A smaller Emacs is a better Emacs.
+
+00:29:30.320 --> 00:29:33.719
+Notice that in this slide,
+
+00:29:33.720 --> 00:29:37.279
+I have used many arrows in many colors.
+
+00:29:37.280 --> 00:29:45.599
+Much of Emacs's power comes from its ability
+
+00:29:45.600 --> 00:29:47.759
+to absorb and to integrate.
+
+00:29:47.760 --> 00:29:51.919
+Tomohiro is right on the mark when he says,
+
+00:29:51.920 --> 00:29:55.359
+"The reason why Emacs platform is good
+
+00:29:55.360 --> 00:29:58.119
+is that it cooperates with OS,
+
+00:29:58.120 --> 00:30:00.919
+not because it is good by itself."
+
+00:30:00.920 --> 00:30:03.999
+I am suggesting that we should
+
+00:30:04.000 --> 00:30:06.519
+raise the bar from the OS
+
+00:30:06.520 --> 00:30:09.839
+to the entirety of our digital ecosystem.
+
+00:30:09.840 --> 00:30:13.039
+There are many models
+
+00:30:13.040 --> 00:30:15.839
+for Emacs to cooperate with the OS
+
+00:30:15.840 --> 00:30:19.319
+and with applications and with services.
+
+00:30:19.320 --> 00:30:25.439
+The colors of arrows in the previous slide correspond to
+
+00:30:25.440 --> 00:30:28.879
+the model of interface of the common-agent:
+
+00:30:28.880 --> 00:30:33.999
+for example, sub-process invocation, pipe-based
+
+00:30:34.000 --> 00:30:39.359
+asynchronous interface, or file-based interactions.
+
+NOTE Consistent configuration
+
+00:30:39.360 --> 00:30:44.759
+One important aspect of common-agent paradigm is that
+
+00:30:44.760 --> 00:30:50.399
+both the common-agent and its Emacs App
+
+00:30:50.400 --> 00:30:53.039
+need to be configured consistently.
+
+00:30:53.040 --> 00:30:57.959
+In MARMEE and Blee-Gnus,
+
+00:30:57.960 --> 00:31:01.919
+we use File-Params to accomplish this.
+
+00:31:01.920 --> 00:31:06.959
+In BISOS, there is a Python interface to File-Params,
+
+00:31:06.960 --> 00:31:10.239
+there is a Bash interface to File-Params,
+
+00:31:10.240 --> 00:31:15.719
+and in Blee, there is an Elisp interface to File-Params.
+
+00:31:15.720 --> 00:31:18.919
+So, configurations are extended.
+
+00:31:18.920 --> 00:31:23.279
+Furthermore, File-Params can be encrypted,
+
+00:31:23.280 --> 00:31:26.959
+and credentials can be protected and shared.
+
+00:31:26.960 --> 00:31:33.919
+This is a significant improvement over .authinfo
+
+00:31:33.920 --> 00:31:36.959
+and its more recent incarnations.
+
+NOTE Feedback and requests
+
+00:31:36.960 --> 00:31:41.199
+EmacsConf could be a great place
+
+00:31:41.200 --> 00:31:44.374
+for users to provide feedback to developers
+
+00:31:44.375 --> 00:31:47.879
+and for developers to suggest to developers.
+
+00:31:47.880 --> 00:31:52.759
+In that spirit, my primary audience in this part
+
+00:31:52.760 --> 00:31:54.839
+are fellow Emacs developers.
+
+00:31:54.840 --> 00:32:00.039
+BISOS-MARMEE and Blee-Gnus are starting points.
+
+00:32:00.040 --> 00:32:02.439
+We can collectively work
+
+00:32:02.440 --> 00:32:04.679
+towards improving what is in place.
+
+00:32:04.680 --> 00:32:07.919
+Some such improvements involve
+
+00:32:07.920 --> 00:32:11.919
+collaboration among various Emacs developers.
+
+00:32:11.920 --> 00:32:16.599
+Here, I am making some explicit requests
+
+00:32:16.600 --> 00:32:19.559
+from some of the relevant emacs developers.
+
+00:32:19.560 --> 00:32:24.159
+At most, these are requests and invitations.
+
+00:32:24.160 --> 00:32:28.519
+For each of these requests, I am providing links
+
+00:32:28.520 --> 00:32:30.119
+for additional details.
+
+00:32:30.120 --> 00:32:33.039
+In due course, I'll follow up
+
+00:32:33.040 --> 00:32:35.279
+in the Emacs developers mailing list.
+
+NOTE X-Message-SMTP-Method: qmail
+
+00:32:35.280 --> 00:32:41.879
+Gnus uses X-Message-SMTP-Method
+
+00:32:41.880 --> 00:32:45.119
+for selection of Mail-Sending-Agent.
+
+00:32:45.120 --> 00:32:50.519
+Even though all the qmail injection code is still in Gnus,
+
+00:32:50.520 --> 00:32:58.279
+support for "X-Message-SMTP-Method: qmail" is missing.
+
+00:32:58.280 --> 00:33:02.759
+It takes 2 lines of code to revive it.
+
+00:33:02.760 --> 00:33:07.399
+With regards to (1), qmail was previously supported in Gnus.
+
+00:33:07.400 --> 00:33:11.319
+Lars, can you please reactivate it? Thanks.
+
+NOTE X-Message-Send-Method
+
+00:33:11.320 --> 00:33:16.439
+(2) is a terminology suggestion.
+
+00:33:16.440 --> 00:33:21.559
+The term X-Message-SMTP-Method violates conceptual layering.
+
+00:33:21.560 --> 00:33:27.079
+Please consider changing it to X-Message-Send-Method.
+
+00:33:27.080 --> 00:33:33.719
+In a Split-MUA setup, Gnus need not know about SMTP at all.
+
+00:33:33.720 --> 00:33:36.599
+We just need to pass information
+
+00:33:36.600 --> 00:33:39.319
+to a Mail-Sending-Agent selector.
+
+NOTE Sharing config info and secrets with common agents
+
+00:33:39.320 --> 00:33:44.439
+(3) is simply a design suggestion for
+
+00:33:44.440 --> 00:33:46.759
+which I prepared the context.
+
+00:33:46.760 --> 00:33:51.839
+.authinfo and Emacs auth-source library
+
+00:33:51.840 --> 00:33:54.199
+are too Emacs-centric.
+
+00:33:54.200 --> 00:33:57.839
+We need to share config info and secrets
+
+00:33:57.840 --> 00:34:00.799
+between common-agents and Emacs.
+
+00:34:00.800 --> 00:34:03.639
+The File Parameters approach
+
+00:34:03.640 --> 00:34:05.799
+can be a general-purpose solution.
+
+00:34:05.800 --> 00:34:10.839
+Is it reasonable to extend auth-source library to
+
+00:34:10.840 --> 00:34:12.719
+support File Params?
+
+00:34:12.720 --> 00:34:16.519
+I'll cover (4) in the next slide.
+
+00:34:16.520 --> 00:34:21.159
+(5) is a philosophical common suggestion
+
+00:34:21.160 --> 00:34:26.439
+to all Emacs developers. We need to better cultivate
+
+00:34:26.440 --> 00:34:30.879
+the model of Common-Agents integration with Emacs.
+
+00:34:30.880 --> 00:34:39.599
+And here are the same links as a native Reveal slide.
+
+NOTE message-polymode
+
+00:34:39.600 --> 00:34:42.799
+A mail message comprises of
+
+00:34:42.800 --> 00:34:45.599
+Envelope, Header and BodyParts.
+
+00:34:45.600 --> 00:34:49.439
+Each of these have their own syntax (their own mode).
+
+00:34:49.440 --> 00:34:53.639
+Conceivably Each BodyPart has its own mode.
+
+00:34:53.640 --> 00:34:59.439
+So, we need to evolve Message-Mode into Message-Polymode.
+
+00:34:59.440 --> 00:35:03.719
+More or less by default, org-mode has become
+
+00:35:03.720 --> 00:35:08.999
+the beginnings of "Emacs Native Markup Language -- ENML".
+
+00:35:09.000 --> 00:35:14.399
+With org-msg you can write your emails in org-mode ---
+
+00:35:14.400 --> 00:35:16.559
+destined as html.
+
+00:35:16.560 --> 00:35:19.559
+org-msg needs to become
+
+00:35:19.560 --> 00:35:22.239
+an integral part of Message-Polymode.
+
+00:35:22.240 --> 00:35:25.119
+It would be heavenly
+
+00:35:25.120 --> 00:35:29.959
+if Lars, Jérémy and Vitalie could collaborate
+
+00:35:29.960 --> 00:35:34.079
+and give us the needed Message-Polymode. Thank you.
+
+NOTE Vertical slice use cases
+
+00:35:34.080 --> 00:35:38.119
+One way to verify that we have not gone astray
+
+00:35:38.120 --> 00:35:42.759
+in our horizontal bigger pictures is to verify them
+
+00:35:42.760 --> 00:35:46.919
+through the concept of "Vertical Slice Use Cases".
+
+00:35:46.920 --> 00:35:50.799
+Let one use case be reading and writing
+
+00:35:50.800 --> 00:35:54.639
+of mail on multiple gmail accounts with Gnus.
+
+00:35:54.640 --> 00:35:59.319
+Google now requires use of oauth2 tokens
+
+00:35:59.320 --> 00:36:02.439
+which MARMEE can do outside of emacs.
+
+00:36:02.440 --> 00:36:05.679
+There is a recent email thread
+
+00:36:05.680 --> 00:36:09.119
+on that in the emacs-devel mailing list.
+
+00:36:09.120 --> 00:36:14.279
+Let another use case be that of tracking delivery
+
+00:36:14.280 --> 00:36:18.679
+and non-delivery reports for custom envelope addresses
+
+00:36:18.680 --> 00:36:26.039
+of byname.net (part of ByStar) autonomous mail services.
+
+00:36:26.040 --> 00:36:30.319
+I would have loved to walk you through these
+
+00:36:30.320 --> 00:36:32.959
+vertical slice use cases
+
+00:36:32.960 --> 00:36:36.439
+as screen captures of my Blee environment.
+
+00:36:36.440 --> 00:36:40.639
+For that, I need at least another 20 minutes.
+
+00:36:40.640 --> 00:36:43.079
+But my time is up.
+
+00:36:43.080 --> 00:36:46.719
+So, let's consider this as the first
+
+00:36:46.720 --> 00:36:48.919
+in a series of presentations
+
+00:36:48.920 --> 00:36:51.799
+where next in this series could be
+
+00:36:51.800 --> 00:36:55.479
+the mentioned two vertical slice use cases.
+
+00:36:55.480 --> 00:36:59.279
+Perhaps there could be another presentation
+
+00:36:59.280 --> 00:37:02.879
+on this topic in EmacsConf 2023.
+
+00:37:02.880 --> 00:37:06.759
+This document was produced entirely with
+
+00:37:06.760 --> 00:37:10.799
+Libre-Halaal Software, and is published using
+
+00:37:10.800 --> 00:37:13.079
+Libre-Halaal Internet Services.
+
+00:37:13.080 --> 00:37:17.959
+I want to thank all the EmacsConf Organizers
+
+00:37:17.960 --> 00:37:19.519
+for their great work,
+
+00:37:19.520 --> 00:37:30.960
+and Sacha, Leo, and Amin in particular.
diff --git a/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt
new file mode 100644
index 00000000..14147527
--- /dev/null
+++ b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt
@@ -0,0 +1,44 @@
+WEBVTT
+
+
+00:00:18.720 --> 00:02:07.680
+Short recap of what the talk was about?
+
+00:02:09.280 --> 00:04:03.914
+What's the incentive to pay?
+
+00:04:04.014 --> 00:04:23.205
+What do you think of projects like OpenQ?
+
+00:04:23.305 --> 00:07:39.789
+Are you aware of SourceCred?
+
+00:07:39.889 --> 00:08:58.080
+How is this different from money?
+
+00:08:58.080 --> 00:10:33.899
+How would you approach a viable experiment for ABE?
+
+00:10:33.999 --> 00:13:28.080
+How do you constrain the cognitive and time burdens of deciding the values of attributed contributions?
+
+00:13:29.360 --> 00:16:29.720
+How are the attribution amounts calculated?
+
+00:16:29.820 --> 00:17:27.360
+Synchronicity with Bastien's talk last year
+
+00:17:28.960 --> 00:21:15.920
+What are your assumptions about human nature?
+
+00:21:17.680 --> 00:21:44.902
+What is the URL of the project?
+
+00:21:45.002 --> 00:22:29.420
+Check out the prototype, "Old Abe"
+
+00:22:29.520 --> 00:23:50.320
+Closing Remarks
+
+00:23:50.320 --> 00:25:09.280
+A flicker of light and following your curiosity
diff --git a/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.vtt b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.vtt
new file mode 100644
index 00000000..80a659b8
--- /dev/null
+++ b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.vtt
@@ -0,0 +1,806 @@
+WEBVTT
+
+00:00.000 --> 00:08.160
+Okay, so we seem to be back. Sorry for the little shuffling chairs around. We are now live with
+
+00:08.160 --> 00:16.400
+Sid. Hi, Sid. Let me contextualize a little bit for the people because we are on Gen right now
+
+00:16.400 --> 00:00:18.620
+and the talk was happening on Dev.
+
+NOTE Short recap of what the talk was about?
+
+00:00:18.720 --> 00:00:22.800
+Sid, can I ask you explaining what your talk was about in about
+
+00:22.800 --> 00:28.560
+one to two minutes? Yes, sure. The talk was called Maintaining the Maintainer's Attribution
+
+00:28.560 --> 00:35.200
+as a Model for Open Source Projects, and the idea is that instead of having an economic system based
+
+00:35.200 --> 00:40.160
+on supply and demand, which is capitalism, we have an economic system based on attribution
+
+00:40.160 --> 00:47.120
+and agreement, the power of our words, taking on incentives in the world, and that this can work
+
+00:47.120 --> 00:52.240
+for open source projects as a proving ground, and I think it can scale beyond that, and I hope it
+
+00:52.240 --> 00:59.920
+will scale beyond that in general. Okay, well I think you did, I'm not sure if you rehearsed
+
+00:59.920 --> 01:05.040
+this before, but that was such a perfect elevator speech for your talk. I am beyond amazed.
+
+01:06.720 --> 01:10.960
+Thank you, thank you. It's the adrenaline from being late and all the time zone shifting.
+
+01:12.080 --> 01:19.920
+You're not supposed to mention this, you know. You know, the things we keep telling people,
+
+01:19.920 --> 01:24.560
+you know, is that EmacsConf, yes, you see us rustling and being really grumpy when we don't
+
+01:24.560 --> 01:30.640
+get prereq, but really the live event is one part of EmacsConf, but really the better part of it is
+
+01:30.640 --> 01:37.600
+just having all the talks out of the head of people online, easily viewable, easily accessible
+
+01:37.600 --> 01:42.000
+with subtitles and stuff like this. So don't worry, it's fine if you're all right for submitting a
+
+01:42.000 --> 01:46.720
+prereq, it's fine if you don't show up to the Q&A, eventually we will find you, we will ask you the
+
+01:46.720 --> 01:51.840
+questions and all the data will be out there, so don't worry about it. Yeah, the magic of editing
+
+01:51.840 --> 01:57.360
+and stuff like that, you know. Yes, but we don't have it now, so we'll have to stick, you know,
+
+01:57.360 --> 02:02.800
+time is going to dilute, we'll have to stick with strict adherence to chronology right now. So
+
+02:02.800 --> 02:07.680
+starting with Sid, do you want to take the first question on the pad? Okay, let's look at them.
+
+NOTE What's the incentive to pay?
+
+02:09.280 --> 02:14.960
+So the first question is, this seems to assume that there will be money contributions commensured
+
+02:14.960 --> 02:20.400
+with the value of the project versus everyone freeloading because there's no incentive to pay.
+
+02:21.840 --> 02:26.400
+Right, so actually there is an incentive to pay, so I think what the question is referring to
+
+02:26.400 --> 02:32.720
+is that everyone is going to pay to other projects, or no one is going to pay to projects because
+
+02:32.720 --> 02:38.080
+they're free anyway and you can use them and you don't have to pay, but one of the new things
+
+02:38.080 --> 02:43.920
+with attribution-based economics is the idea that in open source projects we agree, we all
+
+02:43.920 --> 02:50.400
+collectively agree on a fair market price for a project, and this isn't a price in the sense that
+
+02:50.400 --> 02:55.200
+you are prohibited from using the product until you pay the price, but rather it's for an accounting
+
+02:55.200 --> 02:59.920
+purpose, which is that if you pay more than that price, then that means you are now an investor,
+
+03:00.480 --> 03:06.080
+and so you can sort of, that means you are now attributable in future revenues that come to the
+
+03:06.080 --> 03:11.520
+project. So if you think there's a project that's going to do some nice things, you can essentially
+
+03:11.520 --> 03:16.160
+buy shares in it, except these are not ownership shares, they're shares and attribution because
+
+03:16.160 --> 03:22.240
+you contribute value by contributing money and that's attributable, so there is an incentive
+
+03:22.240 --> 03:30.720
+to pay, and I think, but also beyond this, the financial model is incredibly complex,
+
+03:30.720 --> 03:36.160
+it is much simpler than what we have today in a capitalist world, but still finance is a very
+
+03:36.160 --> 03:43.040
+complex thing, and I think we're in the very very early stages of figuring out the financial model,
+
+03:43.040 --> 03:48.480
+and I think there's a number, there's tons of open questions, needs a lot of help from people
+
+03:49.520 --> 03:56.480
+to figure these out, so there's promising angles here, but I think we have a lot to work out as
+
+03:56.480 --> 04:03.360
+well. Should I go to the second question? Yeah, feel free to do so, you are the master, you're
+
+04:03.360 --> 00:04:03.914
+in Q&A.
+
+NOTE What do you think of projects like OpenQ?
+
+00:04:04.014 --> 00:04:11.040
+Okay, so the second question is, are you aware of projects like OpenQ, would that fit the
+
+04:11.040 --> 04:18.960
+model in your opinion? I'm actually not familiar with OpenQ, so maybe I should just move on to the
+
+04:18.960 --> 00:04:23.205
+next question and come back to that if we have time. Sure.
+
+NOTE Are you aware of SourceCred?
+
+00:04:23.305 --> 00:04:25.840
+The next one says, I see incredible
+
+04:25.840 --> 04:30.800
+amounts of overlap with the source cred system, where attribution of antecedents, graph of
+
+04:30.800 --> 04:36.640
+contributions, fair in hindsight, backpropagation. Oh, backpropagation, interesting. I'm sensing a
+
+04:36.640 --> 04:40.560
+pattern though, so you are being exposed to stuff that you do not know, which is amazing, that
+
+04:40.560 --> 04:45.760
+brings an opportunity to do research later on, but feel free to delay those questions until,
+
+04:45.760 --> 04:49.920
+perhaps, I would invite the people who ask those questions in the pad maybe to describe in a little
+
+04:49.920 --> 04:55.520
+blurb that Sid can read, what is the meaning of those particular platforms, and in the meantime,
+
+04:55.520 --> 05:00.000
+Sid, you can move on to the next questions. Sure, but I will say one thing on the subject of both
+
+05:00.000 --> 05:07.200
+of these things, which is that I think it's significantly underappreciated the extent to which
+
+05:07.200 --> 05:13.040
+value is created in the world that is both independently created of other value that happens
+
+05:13.040 --> 05:20.720
+to be very similar, as well as dependently related and that may be unknown, and this is something
+
+05:20.720 --> 05:26.720
+that I call subliminal transmission, which is like if you think about a turbulent flow,
+
+05:26.720 --> 05:30.800
+you know, and that's what our world is, you know, we like to have all these linear narratives and
+
+05:30.800 --> 05:37.840
+simple stories where I think if you take all of Wikipedia, right, even a single person's life
+
+05:37.840 --> 05:42.240
+has more information and richness than all of Wikipedia, so when you think about it in those
+
+05:42.240 --> 05:47.920
+terms, you realize just how small our stories are in expressing what really happens and what has
+
+05:47.920 --> 05:53.040
+really happened in the world, so from that perspective, I think there's this thing called
+
+05:53.040 --> 05:58.720
+subliminal transmission, which is like a turbulent flow where you have little vortices that appear
+
+05:58.720 --> 06:02.480
+here and then they disappear, they're gone, but then you see them again here and they're like
+
+06:02.480 --> 06:05.600
+bigger, but they're the same, and then you see them in a different place and they're not the
+
+06:05.600 --> 06:11.440
+same, they're different, yet somehow the same, and I think our world is like that, and if we have
+
+06:11.440 --> 06:16.960
+an economic system that's capable of not saying that, oh, it should be this other way, which it
+
+06:16.960 --> 06:22.480
+isn't, but in fact we see this is how it is, let's make sure that we recognize this and empower the
+
+06:22.480 --> 06:29.440
+right voices, given that this is how the world is, and from that perspective, I think projects like
+
+06:29.440 --> 06:34.320
+OpenQ and SourceCred and any number of others might exist which are creating value in the world,
+
+06:34.320 --> 06:39.360
+and I think that we all deserve to be empowered, you know, if we're creating similar kinds of
+
+06:39.360 --> 06:44.320
+value, then these are voices that have something useful to say for us moving forward, and they
+
+06:44.320 --> 06:50.640
+deserve to be empowered, so yeah, it doesn't have to be causally related, you know, you can have
+
+06:50.640 --> 06:56.080
+empowerment of all of these different projects because they work together, so yeah, very long
+
+06:56.080 --> 07:00.720
+-winded answer to a short question, or non-question, meta-question.
+
+07:00.720 --> 07:04.480
+You're fine, you can be as long-winded as you want, because honestly you have been so
+
+07:04.480 --> 07:10.080
+eloquent in your answer, and the little ingestors that accompany these little vertices
+
+07:11.440 --> 07:15.520
+do carry on with as much velocity as you want. We will be going until about
+
+07:15.520 --> 07:20.880
+52-53 of the current hours, which means we have about 20 more minutes. Also, we have a lot of
+
+07:20.880 --> 07:25.600
+questions in the pad, so I would prefer if Sid started answering the questions over the pad first,
+
+07:25.600 --> 07:30.400
+but we are going to be opening the pad in about six to seven minutes if you want to join and ask
+
+07:30.400 --> 07:35.520
+questions live to Sid, but in the meantime, Sid, sorry, I'm getting tired, it's late, in the meantime,
+
+07:35.520 --> 00:07:39.789
+Sid, feel free to answer more questions. Sure, okay, thank you.
+
+NOTE How is this different from money?
+
+00:07:39.889 --> 00:07:41.280
+The next question is,
+
+07:41.280 --> 07:46.480
+how is this different from money? Not in some abstract ownership versus attribution way.
+
+07:46.480 --> 07:52.000
+Open-source funding is an incentive problem, which this does not change as far as I can see.
+
+07:54.000 --> 08:00.960
+So, on the one hand, it does add new incentives, as we talked about. I'm not sure about the question
+
+08:00.960 --> 08:06.800
+of how this is different from money. This isn't proposing to replace money in any way.
+
+08:06.800 --> 08:13.920
+Rather, it employs money as, you know, the mechanism by which we recognize value. I think
+
+08:13.920 --> 08:23.440
+money is perhaps something that can be revisited and, you know, reflected upon in the future,
+
+08:23.440 --> 08:28.960
+but I don't think we need to do that at this stage. At this stage, I'm content to rest on the
+
+08:28.960 --> 08:33.520
+black box abstractions of certain things that we've already developed, like money,
+
+08:33.520 --> 08:37.600
+as a means of exchange and as a means of recognizing value, and I think we can use that,
+
+08:37.600 --> 08:43.440
+so I'm not trying to replace money. Open-source funding is an incentive program. This doesn't
+
+08:43.440 --> 08:47.680
+change incentives, so I think we already covered how it does add incentives in the sense that you
+
+08:47.680 --> 08:53.520
+can invest in open-source projects, which is a new incentive, and, you know, we also talked about
+
+08:53.520 --> 08:58.080
+how there are some unopened questions. I'm not sure if this is one of them.
+
+NOTE How would you approach a viable experiment for ABE?
+
+08:58.080 --> 09:07.680
+How would you approach a viable experiment? So, the prototype that we have, that we talked about
+
+09:07.680 --> 09:13.760
+in the talk, so there's a prototype, for those who didn't watch the talk. We have an open-source
+
+09:14.560 --> 09:19.520
+project, you know, it's a GitHub action, and, you know, I love to support other platforms. I'm not
+
+09:19.520 --> 09:24.960
+married to GitHub in any way. I don't have any special affection for GitHub. I don't have any
+
+09:24.960 --> 09:31.520
+special affection for GitHub. But it's a GitHub action at the moment, and what it will do is,
+
+09:31.520 --> 09:37.120
+when you follow all of the processes in the Constitution, which says, you know,
+
+09:37.120 --> 09:43.360
+open-source repository, create an issue that solicits related work reports from members of
+
+09:43.360 --> 09:49.600
+the public, and then create this folder structure which has a report of the contributors and this
+
+09:49.600 --> 09:55.440
+and that, once you do all of that, like initial logistical work, this GitHub action will process
+
+09:55.440 --> 10:00.720
+fresh payments that come in, which you report as single line item files, text files. Everything is
+
+10:00.720 --> 10:07.360
+text input and output, and then, you know, you can basically get all the accounting done for you by
+
+10:07.360 --> 10:14.960
+this system. So, that's what the nature of the experiment is, and I think we're starting with
+
+10:14.960 --> 10:19.840
+just one or two repos, because there's tremendous number of unresolved questions, and it's all going
+
+10:19.840 --> 10:27.360
+to be resolved through dialogue, agreement. We all decide how this thing works, and I think,
+
+10:27.360 --> 00:10:33.899
+you know, there's, yeah, so we'll see about how the experiment goes.
+
+NOTE How do you constrain the cognitive and time burdens of deciding the values of attributed contributions?
+
+00:10:33.999 --> 00:10:36.400
+Next question, given that
+
+10:36.400 --> 10:45.040
+oversight is a social process, how do you constrain the cognitive and time burdens of deciding the
+
+10:45.040 --> 10:54.080
+values of attributed contributions? Okay, this is a great question. So, first of all, you know,
+
+10:54.080 --> 11:00.080
+let's talk about long-term vision, right? Long-term vision, I don't imagine that any of us, that is,
+
+11:00.080 --> 11:04.160
+the actual contributors to the projects, are going to have to worry about this at all.
+
+11:04.160 --> 11:08.240
+We're not going to have to engage in this process of what is called dialectical inheritance
+
+11:08.240 --> 11:13.440
+attribution, which is, you know, it's a lot of work. There's all these standards and precedents,
+
+11:13.440 --> 11:18.800
+and how do you compare ideas versus works versus the materials that went into the project? It's a
+
+11:18.800 --> 11:24.400
+very hard problem, and I think it's something we'll be improving upon for possibly even decades.
+
+11:25.200 --> 11:30.000
+But at that stage, I believe there will be experts, much like today's investment bankers
+
+11:30.000 --> 11:36.400
+and lawyers, investment IP lawyers. These are the people who are going to specialize in it,
+
+11:36.400 --> 11:40.880
+going to be professionals, and that's the kind of work that they're going to do, and we can leave it
+
+11:40.880 --> 11:48.000
+to them. But at this stage, yes, we have to do it. We have to set these principles and standards in
+
+11:48.000 --> 11:55.840
+place. And how do we constrain that? We start with simple heuristics. So, initially, we want to have,
+
+11:55.840 --> 11:59.680
+you know, if you can imagine, this is, I don't know, this is probably a bad metaphor, but if you have,
+
+11:59.680 --> 12:07.040
+like, a big hole and you're trying to patch it, you know, if you put, like, little tiny things on
+
+12:07.040 --> 12:12.240
+it and try to focus on little tiny things, okay, what I'm trying to say is order of magnitude,
+
+12:12.240 --> 12:19.280
+right? Let's solve the problem at the first order of magnitude and then get the little harmonics
+
+12:19.280 --> 12:27.520
+and, like, solve those over time. So, basically, we want to have usable, workable heuristics that
+
+12:27.520 --> 12:33.760
+are low maintenance that solve the majority of the problem for our immediate purposes and then
+
+12:33.760 --> 12:40.960
+iterate on those over time and develop proper models, which I think we will start to do in the
+
+12:40.960 --> 12:47.040
+next phase. The initial phase is heuristics that are easy and low maintenance and useful.
+
+12:47.040 --> 12:53.600
+Right, Sid, I just want to barge in a little bit. I just want to let people know that we have opened
+
+12:53.600 --> 13:00.000
+up the Q&A BBB window right now, so the same spiel as usual. If you want to join Sid and ask questions
+
+13:00.000 --> 13:04.160
+directly, we still have some questions in the pad. Don't worry, Sid will get to them first.
+
+13:04.160 --> 13:09.040
+But if you want to join and have a discussion with Sid, we have until about, we've got about
+
+13:09.040 --> 13:14.240
+20, 18 minutes left of discussion there. So, please do not hesitate. This is a very interesting talk.
+
+13:14.240 --> 13:19.840
+We have a very interesting speaker as well. So, use this opportunity, please. In the meantime,
+
+13:19.840 --> 13:24.720
+Sid, you can answer more questions. Sure. Should we take one from the field?
+
+13:25.360 --> 13:28.080
+I guess while people are thinking about it, I'll take one more question, maybe.
+
+NOTE How are the attribution amounts calculated?
+
+13:29.360 --> 13:37.440
+Okay. So, the next question is, how are the attribution amounts calculated?
+
+13:37.440 --> 13:42.960
+Okay, how are the attribution amounts calculated? This is going to be done through standards.
+
+13:42.960 --> 13:49.040
+So, there is a, there's a repo, you know, if you go to the github.org account, dream-org,
+
+13:49.040 --> 13:57.760
+d-r-y-m-dash-org-slash-foundation. This contains the founding documents of how we will manage this
+
+13:57.760 --> 14:04.080
+process. And it can, it is, it will contain more standards. It has a few at the moment, very high
+
+14:04.080 --> 14:10.240
+level ones, but we will keep adding more standards there that are general enough to be universally
+
+14:10.240 --> 14:16.880
+applicable, and that can be specialized to the individual projects. And the attribution is going
+
+14:16.880 --> 14:22.400
+to be decided by these standards, by the members of the public, members of the community.
+
+14:22.400 --> 14:28.240
+Yeah. And they calculate, they must add up to 100%. So, it's, you know, and that's okay, actually,
+
+14:28.240 --> 14:36.080
+I should say. One of the mechanisms by which attribution will be done initially is this heuristic
+
+14:36.080 --> 14:45.040
+procedure called the Analyze, Appraise, Anonymize Attribute Loop. What that means is we first
+
+14:45.040 --> 14:49.600
+analyze the project, decompose it into its components, and we can do any number of such
+
+14:49.600 --> 14:53.280
+analyses, any number of people can do these analyses, and there can be a decision procedure
+
+14:53.280 --> 14:58.320
+for combining them. But that, I digress. We'll keep it simple first. We analyze the project into its
+
+14:58.320 --> 15:05.520
+components, then we agree on the proportion of value contributed by each of those components,
+
+15:05.520 --> 15:10.480
+then we analyze the activities done by the contributors, and then we analyze the
+
+15:10.480 --> 15:15.120
+activities done by the contributors and anonymize them. And we say, this was done, this was done,
+
+15:15.120 --> 15:20.240
+this was done, this was done. This is how much proportion of value these activities contribute
+
+15:20.240 --> 15:24.720
+to each of these components. And then once you have this chart, this graph of all of these
+
+15:24.720 --> 15:32.880
+connections and proportions of value, then you anonymize and you aggregate the sum of proportions
+
+15:32.880 --> 15:38.480
+of value by contributor. And contributor is not necessarily a person, a contributor is a
+
+15:38.480 --> 15:45.040
+project, it can be an antecedent, it doesn't have to be a direct contributor to the project,
+
+15:45.040 --> 15:50.160
+it doesn't have to be someone who wrote code, it can be a person who created a bug report,
+
+15:50.160 --> 15:57.200
+or a person who had a good idea for the design. And anyway, so once you do this, you aggregate
+
+15:57.200 --> 16:02.800
+by contributor, you have a set of proportions that total up to one, or a set of percentages
+
+16:02.800 --> 16:09.920
+that total up to 100, that dictate how the revenues that come into the project are to
+
+16:09.920 --> 16:21.760
+be divided amongst all of these antecedents and contributors. Let's see, what's the next question?
+
+16:22.800 --> 16:26.240
+Okay, the next question is being written down as we speak.
+
+16:26.240 --> 00:16:29.720
+It's fine, we can wait a little bit.
+
+NOTE Synchronicity with Bastien's talk last year
+
+00:16:29.820 --> 00:16:33.200
+In the meantime, I'll just mention,
+
+16:35.360 --> 16:41.360
+so actually, when we keep track of presentation for Emacs, we do have slugs for them. And this
+
+16:41.360 --> 16:47.440
+year, the slug for your talk, Sid, was made. And it was not an anodyne choice, because last year,
+
+16:47.440 --> 16:53.360
+we also had another talk by a maintainer, or well, the org maintainer, or one of the org maintainers,
+
+16:53.360 --> 16:59.520
+Bastien Guerri. And it feels like Bastien's talk was mostly geared towards sustaining
+
+16:59.520 --> 17:05.360
+maintenance, and your is more about maintaining the software effort in general. And it feels like
+
+17:05.360 --> 17:13.280
+the two talks are related, but yours seems to be more, I wouldn't say visionary, I think they are
+
+17:13.280 --> 17:17.120
+very complimentary in nature. I'm not sure, have you been able to watch Bastien's talk from last
+
+17:17.120 --> 17:22.080
+year? I have not, but that sounds very interesting. I'll definitely check it out after this.
+
+17:22.080 --> 17:27.360
+Right. And I will now stop my blabbering, and you can answer the last question.
+
+NOTE What are your assumptions about human nature?
+
+17:28.960 --> 17:32.640
+The last question is, what are your assumptions about human nature,
+
+17:33.280 --> 17:42.000
+vis-a-vis self-interest versus altruism? The funny thing is, I don't actually feel like
+
+17:42.000 --> 17:50.000
+we need to opine on that, from the perspective of an economic system. I mean, yes, we have to
+
+17:50.000 --> 17:55.360
+recognize that, you know, some people will say, oh, human nature is fundamentally selfish, or,
+
+17:55.360 --> 18:00.320
+you know, we have to be good, and we have to help each other. And I think both of these perspectives
+
+18:00.320 --> 18:07.360
+are not necessarily, you know, I don't know if they're necessarily the right way to think about
+
+18:07.360 --> 18:13.040
+it, because you have the idea about, well, capitalism assumes people are fundamentally
+
+18:13.040 --> 18:17.840
+selfish, or they have to act that way in order to be rational in the system. That's one side of it.
+
+18:17.840 --> 18:22.800
+The other side of it is this notion of altruism, right, that somehow you have to help others,
+
+18:22.800 --> 18:28.320
+and that, you know, there's like a charitable component, and you have all these people who
+
+18:28.960 --> 18:33.520
+make billions and billions of dollars, and then, you know, start giving that away. Which,
+
+18:33.520 --> 18:36.880
+you know, if you're going to make billions and billions of dollars, and you give it away,
+
+18:36.880 --> 18:41.600
+and like help the world, that's better than not giving it away and not helping the world.
+
+18:41.600 --> 18:46.560
+On the other hand, the fact that you got those billions and billions of dollars in a capitalist
+
+18:46.560 --> 18:54.160
+economic system, which fundamentally skews the value recognition in ways that, you know, is very,
+
+18:54.160 --> 18:59.840
+very subversive and very, very minimizing of the source, the true sources of value,
+
+18:59.840 --> 19:06.160
+means that you've led yourself to go down this path and essentially unwittingly and inevitably
+
+19:06.160 --> 19:09.920
+ended up causing a lot of problems, too. Like, it's not necessarily the case that if you're
+
+19:09.920 --> 19:14.560
+wealthy in a capitalist economy, that you've created a lot of value, because yes, you have,
+
+19:14.560 --> 19:19.040
+but at the same time, the net value is not guaranteed to be above zero, really,
+
+19:20.320 --> 19:27.040
+because capitalism can't express all forms of value. So I don't think thinking about self-interest
+
+19:27.040 --> 19:35.680
+versus altruism is the right way to think about things from the perspective of economic systems.
+
+19:35.680 --> 19:42.480
+In an economic system where the incentives are so set up that the maximum value to all
+
+19:42.480 --> 19:47.840
+is recognized the most, then it's inevitable that people want to do that. And it doesn't mean that
+
+19:47.840 --> 19:51.280
+you're a naturalistic person or a selfish person. You're just going to do it because there are
+
+19:51.280 --> 20:00.240
+incentives that are set up that way that everybody agreed on. And I think in such a system, your own
+
+20:00.240 --> 20:07.040
+sort of spiritual inclinations towards this are secondary. Not secondary. I don't want to say
+
+20:07.040 --> 20:14.800
+secondary. I want to say that they are up to you. And your actions in the world will be rewarded to
+
+20:14.800 --> 20:20.320
+the extent that you help others. The more you give, the more you will be empowered. So from
+
+20:20.320 --> 20:25.280
+that perspective, you could say that the system rewards altruism. But at the same time, if you're
+
+20:25.280 --> 20:32.320
+just giving and you're not in a position where... I mean, the system ensures that if you give,
+
+20:32.320 --> 20:36.560
+you're also taken care of, so that you don't have to choose between altruism and selfishness.
+
+20:36.560 --> 20:44.160
+Altruism is empowering yourself. So that's kind of the beauty of this system, really. That's the
+
+20:44.160 --> 20:50.240
+beauty of an attribution-based system is that you become more empowered by giving more. But we don't
+
+20:50.240 --> 20:54.880
+have to get into the spirituality stuff of it, really. It's beside the point as far as the
+
+20:54.880 --> 21:02.400
+mechanisms of the economic system go. All right. I think that was the last question, unless I'm
+
+21:02.400 --> 21:09.920
+mistaken. That's the last one I see. Yes. Well, you did a fine job answering, however, many
+
+21:09.920 --> 21:15.920
+questions before. Again, very lengthy, as you said, but very eloquent, as I will say to you.
+
+NOTE What is the URL of the project?
+
+21:17.680 --> 21:22.080
+There is one question that appeared on ISE, which was the URL of the project. You mentioned
+
+21:22.080 --> 21:27.520
+dream.org. Would you be able to maybe type it out in the chat so that people can
+
+21:27.520 --> 21:32.640
+check it, and I'll place it on ISE for the person that was asking? Or on BBB, it's fine, too.
+
+21:34.000 --> 21:41.520
+It's actually dream-org. Oh, that's why I did dream.org, which was the problem.
+
+21:43.840 --> 00:21:44.902
+It's the GitHub repo.
+
+NOTE Check out the prototype, "Old Abe"
+
+00:21:45.002 --> 00:21:47.280
+And actually, sorry, you should also check out
+
+21:48.480 --> 21:55.840
+dream-org.old-abe. That is the billing prototype, which is the GitHub action,
+
+21:55.840 --> 22:01.520
+which you can add to your repo. And it's got all the startup instructions for how you can
+
+22:01.520 --> 22:08.720
+set up attribution-based economics. So I'll let you type it out. github.com slash dream
+
+22:10.480 --> 22:18.080
+dash org slash old-abe.
+
+22:18.080 --> 22:25.280
+It's good for you for remembering it. I will place this in BBB right now. Sorry,
+
+22:25.280 --> 00:22:29.420
+not in BBB, in the pad so that people can click on it.
+
+NOTE Closing Remarks
+
+00:22:29.520 --> 00:22:32.640
+Sid, is there anything else you'd like to
+
+22:32.640 --> 22:41.200
+say? We are about at the end of the Q&A right now. I guess attribution-based economics is open for
+
+22:41.200 --> 22:50.560
+business, as it were. So if you can go to some of the repos at the dream-org GitHub org account,
+
+22:51.280 --> 22:56.240
+many of those repos are starting attribution-based economics. And simx.el in particular is one for
+
+22:56.240 --> 23:00.560
+the Emacs community. So I encourage you guys. And of course, old-abe, that's another one that
+
+23:00.560 --> 23:04.560
+started. And that's the only one that's actually ready to accept payments and distribute payments,
+
+23:04.560 --> 23:09.120
+because we have done the attributions already, given that it was written in the last few days.
+
+23:09.120 --> 23:16.480
+But the other ones, we might start payments out, I think, on January 1. So between now and January
+
+23:16.480 --> 23:24.480
+1, we'll start doing the attribution process and deciding the antecedents, who's owed what,
+
+23:24.480 --> 23:28.080
+what proportion of value came from whom, and all that stuff between now and then. And then we're
+
+23:28.080 --> 23:36.880
+going to start paying out from the repositories January 1 is the plan. If you can contribute to
+
+23:36.880 --> 23:41.280
+these projects, then that would help prove the model out, and that would create incentives for
+
+23:41.280 --> 23:45.920
+people to join. So I encourage you to do so. Thank you. Well, thank you. You've definitely
+
+23:45.920 --> 23:50.320
+made a very nice case for it, and people can make their own minds now by checking the link.
+
+NOTE A flicker of light and following your curiosity
+
+23:50.320 --> 23:55.280
+We really encourage you to follow up on a lot of the talks. It's one thing. One thing that we always
+
+23:55.280 --> 24:02.080
+say with Sasha to the people, be they speakers, be they user group members, is that Emacs can't,
+
+24:02.080 --> 24:08.000
+and user groups, any kind of community activity for Emacs is about curiosity. And it's one thing
+
+24:08.000 --> 24:14.960
+to ignite the flame of curiosity in some peoples. It's actually much better to actually follow the
+
+24:14.960 --> 24:19.120
+fuse and see where it leads you. Because, you know, it's a little fuse, a little tiny flame,
+
+24:19.120 --> 24:24.000
+a flicker of a flame, a flicker of light going in a direction that might explode so much curiosity
+
+24:24.000 --> 24:32.960
+later down the line. I was talking earlier with Blaine about, you know, oh, last year he was
+
+24:32.960 --> 24:39.280
+presenting, it had only been six, it had only been, I can't speak English, it's 10.45 a.m. in
+
+24:39.280 --> 24:46.000
+my time zone. I'm starting to tire. But he had only started using Emacs six months prior to
+
+24:46.000 --> 24:51.040
+presenting, and he was already so proficient in it. And it feels like, it's kind of like in Lost,
+
+24:51.040 --> 24:55.280
+you know, when you have the rope and you pull on the rope and it brings you so far away. Well,
+
+24:55.280 --> 25:01.200
+do follow this curiosity, be it for what Sid has presented to you today, but for any of the topics
+
+25:01.200 --> 25:04.960
+that we've presented to you today. So thank you so much, Sid, for all your time, all your
+
+25:04.960 --> 25:09.280
+presentation, and your answers. Thank you so much, Leo. Appreciate it. Thanks for having me.
diff --git a/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt
new file mode 100644
index 00000000..195fdb36
--- /dev/null
+++ b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:18.839
+Problems
+
+00:00:18.840 --> 00:00:30.839
+Solution?
+
+00:00:30.840 --> 00:00:55.839
+A common underlying problem
+
+00:00:55.840 --> 00:02:05.759
+Capitalism
+
+00:02:05.760 --> 00:03:49.839
+Copyright
+
+00:03:49.840 --> 00:05:01.759
+An attribution-based economic system is efficient
+
+00:05:01.760 --> 00:07:45.199
+Gyroscopes
+
+00:07:45.200 --> 00:09:05.919
+Prototypes
+
+00:09:05.920 --> 00:10:05.919
+Founding documents
+
+00:10:05.920 --> 00:10:24.319
+Declaration of non-ownership
+
+00:10:24.320 --> 00:11:23.239
+The financial model
+
+00:11:23.240 --> 00:12:49.119
+The attribution model
+
+00:12:49.120 --> 00:13:59.919
+The accounting system
+
+00:13:59.920 --> 00:15:17.599
+drym.org Github account
+
+00:15:17.600 --> 00:17:11.559
+Expanding the boundary
+
+00:17:11.560 --> 00:18:39.159
+Adopting this idea
+
+00:18:39.160 --> 00:19:04.079
+Closing thoughts
+
+00:19:04.080 --> 00:19:56.240
+Taking care of one another
diff --git a/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt
new file mode 100644
index 00000000..3a907943
--- /dev/null
+++ b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt
@@ -0,0 +1,1192 @@
+WEBVTT captioned by sid
+
+NOTE Problems
+
+00:00:00.000 --> 00:00:06.319
+When we think about the problems of the world
+
+00:00:06.320 --> 00:00:12.119
+we see global warming, war, appropriation, poverty,
+
+00:00:12.120 --> 00:00:13.879
+and among numerous other problems,
+
+00:00:13.880 --> 00:00:16.199
+also the inability to make a living
+
+00:00:16.200 --> 00:00:18.839
+as an open source developer.
+
+NOTE Solution?
+
+00:00:18.840 --> 00:00:21.999
+Now this last problem may seem a lot less consequential
+
+00:00:22.000 --> 00:00:23.479
+compared to the other ones,
+
+00:00:23.480 --> 00:00:26.759
+but what if I told you that the solution to this problem
+
+00:00:26.760 --> 00:00:30.839
+and the solutions to the others are one and the same?
+
+NOTE A common underlying problem
+
+00:00:30.840 --> 00:00:33.479
+And it's because there's a common underlying problem
+
+00:00:33.480 --> 00:00:36.119
+at the heart of all of these problems.
+
+00:00:36.120 --> 00:00:39.279
+I'm going to tell you what that problem is in one sentence.
+
+00:00:39.280 --> 00:00:42.519
+You ready for it? It is ...
+
+00:00:42.520 --> 00:00:48.559
+the deviation of market value from _true_ value.
+
+00:00:48.560 --> 00:00:50.439
+Let's think about this in the context of
+
+00:00:50.440 --> 00:00:55.839
+existing economic systems such as capitalism and communism.
+
+NOTE Capitalism
+
+00:00:55.840 --> 00:00:58.679
+And of these, I want to focus on capitalism
+
+00:00:58.680 --> 00:01:01.999
+because it is the only nontrivial economic system, really.
+
+00:01:02.000 --> 00:01:04.799
+Communism is more sort of a political means
+
+00:01:04.800 --> 00:01:06.999
+to achieve economic ends.
+
+00:01:07.000 --> 00:01:09.079
+And the other economic systems exist
+
+00:01:09.080 --> 00:01:11.679
+sort of on a spectrum between these two.
+
+00:01:11.680 --> 00:01:14.319
+So let's focus on capitalism.
+
+00:01:14.320 --> 00:01:19.919
+Capitalism has as its basis of value supply and demand.
+
+00:01:19.920 --> 00:01:21.959
+And consequently, there is a great emphasis
+
+00:01:21.960 --> 00:01:25.199
+on this idea of ownership.
+
+00:01:25.200 --> 00:01:28.719
+Now ownership is an idea that made some kind of sense
+
+00:01:28.720 --> 00:01:31.559
+when you have goods and services
+
+00:01:31.560 --> 00:01:33.119
+that are constrained in some way,
+
+00:01:33.120 --> 00:01:36.119
+that are essentially finite in supply.
+
+00:01:36.120 --> 00:01:37.839
+But when you have things like
+
+00:01:37.840 --> 00:01:41.079
+works of software, art, and music,
+
+00:01:41.080 --> 00:01:43.879
+which are essentially infinite in supply,
+
+00:01:43.880 --> 00:01:46.359
+the idea of ownership and supply and demand
+
+00:01:46.360 --> 00:01:48.319
+don't make sense anymore.
+
+00:01:48.320 --> 00:01:51.679
+And yet we employ the institution of property
+
+00:01:51.680 --> 00:01:56.079
+to constrain supply and introduce the idea of supply
+
+00:01:56.080 --> 00:01:58.399
+just so that we can induce a market value
+
+00:01:58.400 --> 00:02:00.319
+in terms of supply and demand
+
+00:02:00.320 --> 00:02:05.759
+in a capitalist economic system. And it's wrongheaded.
+
+NOTE Copyright
+
+00:02:05.760 --> 00:02:10.319
+How many of us have written copyright declarations
+
+00:02:10.320 --> 00:02:12.919
+like these on our work.
+
+00:02:12.920 --> 00:02:14.719
+It's a lot of work!
+
+00:02:14.720 --> 00:02:18.159
+Especially when we have version control.
+
+00:02:18.160 --> 00:02:19.879
+Now in this example,
+
+00:02:19.880 --> 00:02:23.119
+almost every line is written by a different person,
+
+00:02:23.120 --> 00:02:25.519
+so who owns the code in this case?
+
+00:02:25.520 --> 00:02:27.839
+Who owns the copyright here?
+
+00:02:27.840 --> 00:02:30.039
+Is it some of them, is it all of them,
+
+00:02:30.040 --> 00:02:32.879
+do they share it in some way?
+
+00:02:32.880 --> 00:02:34.879
+It doesn't really make sense,
+
+00:02:34.880 --> 00:02:37.759
+especially when the reason we're employing
+
+00:02:37.760 --> 00:02:40.079
+copyright and ownership in this case
+
+00:02:40.080 --> 00:02:44.079
+is to approximate the idea of attribution,
+
+00:02:44.080 --> 00:02:46.559
+which is what we really care about here.
+
+00:02:46.560 --> 00:02:50.999
+And that brings us to the nature of the solution,
+
+00:02:51.000 --> 00:02:53.159
+which is to move away from an economic system
+
+00:02:53.160 --> 00:02:55.879
+based on ownership and supply and demand,
+
+00:02:55.880 --> 00:02:59.399
+to an economic system based on attribution, instead.
+
+00:02:59.400 --> 00:03:02.479
+That is, moving away from who _owns_ what
+
+00:03:02.480 --> 00:03:07.319
+to who _did_ what and how important was it.
+
+00:03:07.320 --> 00:03:09.719
+And we can do this by the process of
+
+00:03:09.720 --> 00:03:12.959
+Dialectical Inheritance Attribution,
+
+00:03:12.960 --> 00:03:16.639
+which just means that we do it in a collective way
+
+00:03:16.640 --> 00:03:20.639
+using common collectively agreed upon standards
+
+00:03:20.640 --> 00:03:24.239
+that are applied transparently to all.
+
+00:03:24.240 --> 00:03:25.599
+And when we have an economic system
+
+00:03:25.600 --> 00:03:26.919
+that is based on attribution
+
+00:03:26.920 --> 00:03:28.799
+as the source of value in this way,
+
+00:03:28.800 --> 00:03:34.719
+we call it attribution based economics.
+
+00:03:34.720 --> 00:03:39.279
+Now, once we have that, it gives us fairness,
+
+00:03:39.280 --> 00:03:43.639
+effective empowerment of expertise,
+
+00:03:43.640 --> 00:03:46.359
+freedom through incentives rather than through coercion.
+
+00:03:46.360 --> 00:03:49.839
+And privacy as well.
+
+NOTE An attribution-based economic system is efficient
+
+00:03:49.840 --> 00:03:52.359
+But I could tell you all of those things
+
+00:03:52.360 --> 00:03:57.079
+and some may still say, "Why should I care about this?"
+
+00:03:57.080 --> 00:03:58.279
+There are those who would say
+
+00:03:58.280 --> 00:04:00.679
+that fairness is not a good goal,
+
+00:04:00.680 --> 00:04:02.999
+and that might makes right,
+
+00:04:03.000 --> 00:04:04.599
+and that as Darwin showed us,
+
+00:04:04.600 --> 00:04:08.999
+the nature of nature is violence.
+
+00:04:09.000 --> 00:04:12.439
+Now I know that many of us reject this ideology,
+
+00:04:12.440 --> 00:04:16.359
+and we feel in our bones that it is wrong.
+
+00:04:16.360 --> 00:04:19.279
+But luckily we don't have to resort to high philosophy
+
+00:04:19.280 --> 00:04:21.759
+and gut feeling in order to convince ourselves
+
+00:04:21.760 --> 00:04:24.719
+that an attribution-based system is truly better.
+
+00:04:24.720 --> 00:04:26.679
+Because in addition to all of
+
+00:04:26.680 --> 00:04:28.159
+those other properties we talked about,
+
+00:04:28.160 --> 00:04:33.399
+an attribution-based economic system is also efficient.
+
+00:04:33.400 --> 00:04:36.959
+And I say this from the perspective of having
+
+00:04:36.960 --> 00:04:39.799
+an admiration for the efficiency of capitalism.
+
+00:04:39.800 --> 00:04:43.399
+So understand that that is my perspective
+
+00:04:43.400 --> 00:04:45.079
+when I say that this system --
+
+00:04:45.080 --> 00:04:47.479
+an attribution-based economic system --
+
+00:04:47.480 --> 00:04:51.159
+is significantly more efficient than capitalism.
+
+00:04:51.160 --> 00:04:55.839
+And it achieves that by virtue of eliminating the waste
+
+00:04:55.840 --> 00:04:58.479
+that is inherent in adversarial competition,
+
+00:04:58.480 --> 00:05:01.759
+while still preserving market forces!
+
+NOTE Gyroscopes
+
+00:05:01.760 --> 00:05:05.159
+In addition to this property
+
+00:05:05.160 --> 00:05:07.159
+there is also this other property
+
+00:05:07.160 --> 00:05:10.599
+that I think is truly profound,
+
+00:05:10.600 --> 00:05:15.879
+and I want to motivate it by this example of a gyroscope.
+
+00:05:15.880 --> 00:05:19.399
+Now many of us have had the opportunity to play with
+
+00:05:19.400 --> 00:05:21.239
+a gyroscope at some point in our lives.
+
+00:05:21.240 --> 00:05:23.479
+If you haven't, I encourage you to go out and get one
+
+00:05:23.480 --> 00:05:25.799
+and try it out. It also makes a good gift
+
+00:05:25.800 --> 00:05:26.999
+if you're thinking about giving it
+
+00:05:27.000 --> 00:05:28.479
+to somebody else this year.
+
+00:05:28.480 --> 00:05:32.559
+But if you've played with a gyroscope
+
+00:05:32.560 --> 00:05:35.239
+then you've had the experience, perhaps,
+
+00:05:35.240 --> 00:05:37.919
+of putting it on your hand and moving it around.
+
+00:05:37.920 --> 00:05:42.799
+And no matter what you do, it will always maintain its axis.
+
+00:05:42.800 --> 00:05:45.519
+Even if you try to push it
+
+00:05:45.520 --> 00:05:48.239
+and try to make it deviate from that axis,
+
+00:05:48.240 --> 00:05:50.399
+it will fight you. It will resist you,
+
+00:05:50.400 --> 00:05:53.039
+and keep to that axis no matter what.
+
+00:05:53.040 --> 00:05:56.639
+And if you've had this experience,
+
+00:05:56.640 --> 00:05:58.039
+then believe it or not,
+
+00:05:58.040 --> 00:06:02.079
+you have some insight into the nature of economic systems.
+
+00:06:02.080 --> 00:06:07.039
+Because if we try to get an economic system to do something
+
+00:06:07.040 --> 00:06:09.279
+other than what it wants to do,
+
+00:06:09.280 --> 00:06:11.079
+other than what is its nature,
+
+00:06:11.080 --> 00:06:14.839
+then it will resist us and it will fight that change.
+
+00:06:14.840 --> 00:06:17.759
+Now, I don't know about you,
+
+00:06:17.760 --> 00:06:22.719
+but I'd prefer to avoid fighting these gyroscopic forces.
+
+00:06:22.720 --> 00:06:25.039
+I'd rather have these forces work with me
+
+00:06:25.040 --> 00:06:29.479
+rather than against me. Now in a capitalist system,
+
+00:06:29.480 --> 00:06:32.599
+there is another problem, which is that
+
+00:06:32.600 --> 00:06:35.959
+not only do you have these gyroscopic forces at work,
+
+00:06:35.960 --> 00:06:39.159
+but these forces aren't even all working together.
+
+00:06:39.160 --> 00:06:42.119
+They're working against each other, in many cases.
+
+00:06:42.120 --> 00:06:46.439
+They represent misaligned interests.
+
+00:06:46.440 --> 00:06:50.079
+And indeed, these misaligned interests
+
+00:06:50.080 --> 00:06:53.639
+are the very means by which these forces operate at all.
+
+00:06:53.640 --> 00:06:57.559
+So in a way, war is not just
+
+00:06:57.560 --> 00:06:59.679
+an inevitable consequence in this system
+
+00:06:59.680 --> 00:07:05.279
+but is rather the very nature of such a system.
+
+00:07:05.280 --> 00:07:08.359
+In an attribution-based system, on the other hand,
+
+00:07:08.360 --> 00:07:11.399
+by virtue of the source of value
+
+00:07:11.400 --> 00:07:13.079
+being collective attribution,
+
+00:07:13.080 --> 00:07:17.239
+we are able to achieve alignment
+
+00:07:17.240 --> 00:07:19.679
+of all of these interests at every scale,
+
+00:07:19.680 --> 00:07:22.719
+so that at every scale of society,
+
+00:07:22.720 --> 00:07:24.759
+from the smallest to the largest scales,
+
+00:07:24.760 --> 00:07:26.479
+the interests will be aligned,
+
+00:07:26.480 --> 00:07:28.559
+will be consonant and harmonious.
+
+00:07:28.560 --> 00:07:33.799
+I think this is a very important, profound quality
+
+00:07:33.800 --> 00:07:38.119
+that I think is the fundamental problem of economics -
+
+00:07:38.120 --> 00:07:40.479
+the fundamental goal of economics to solve.
+
+00:07:40.480 --> 00:07:43.839
+And I believe that an attribution-based economic system
+
+00:07:43.840 --> 00:07:45.199
+addresses it and solves it.
+
+NOTE Prototypes
+
+00:07:45.200 --> 00:07:50.279
+So without further ado, I want to bring it home
+
+00:07:50.280 --> 00:07:52.479
+to the prototype that we have in mind
+
+00:07:52.480 --> 00:07:53.839
+for the Emacs community.
+
+00:07:53.840 --> 00:07:56.279
+Now we want to start in the Emacs community
+
+00:07:56.280 --> 00:07:58.239
+because Emacs has a long tradition
+
+00:07:58.240 --> 00:08:02.159
+of exploring better ways of doing things
+
+00:08:02.160 --> 00:08:05.279
+and pursuing better alternatives to the status quo.
+
+00:08:05.280 --> 00:08:09.399
+Now, to give you an overview of the prototype
+
+00:08:09.400 --> 00:08:12.639
+that we've implemented for open source projects.
+
+00:08:12.640 --> 00:08:15.439
+The prototype is composed of two broad phases,
+
+00:08:15.440 --> 00:08:18.959
+that is, the appraisal phase and the accounting phase.
+
+00:08:18.960 --> 00:08:21.959
+Any project is composed of ideas, capital and labor.
+
+00:08:21.960 --> 00:08:26.279
+The appraisal phase is involved in assessing the work done
+
+00:08:26.280 --> 00:08:29.119
+in terms of how much value was created
+
+00:08:29.120 --> 00:08:31.959
+and who created the value and how important that value is.
+
+00:08:31.960 --> 00:08:35.199
+The output of this stage is an attributions file.
+
+00:08:35.200 --> 00:08:42.039
+And the second phase, of accounting, is about, you know,
+
+00:08:42.040 --> 00:08:43.679
+how do you handle payments that come in
+
+00:08:43.680 --> 00:08:45.119
+and how do you pay people out.
+
+00:08:45.120 --> 00:08:48.879
+Now the first part has more of a social component to it
+
+00:08:48.880 --> 00:08:50.239
+and the second part has more of
+
+00:08:50.240 --> 00:08:53.839
+a technological component to it that can be automated.
+
+00:08:53.840 --> 00:08:56.239
+So in order to implement this prototype,
+
+00:08:56.240 --> 00:08:57.839
+we have two things.
+
+00:08:57.840 --> 00:09:01.679
+We have founding documents that describe the social aspects,
+
+00:09:01.680 --> 00:09:04.039
+and an accounting system that automates
+
+00:09:04.040 --> 00:09:05.919
+some of the technological aspects.
+
+NOTE Founding documents
+
+00:09:05.920 --> 00:09:10.799
+The founding documents, in the noble tradition
+
+00:09:10.800 --> 00:09:14.559
+of the Gayaneshagowa and the US constitution,
+
+00:09:14.560 --> 00:09:17.799
+include a constitution which describes
+
+00:09:17.800 --> 00:09:20.679
+the guiding principles of ABE,
+
+00:09:20.680 --> 00:09:25.399
+and the two main prongs are forward-looking empowerment
+
+00:09:25.400 --> 00:09:26.639
+and backward-looking fairness.
+
+00:09:26.640 --> 00:09:28.839
+This means that we want to empower
+
+00:09:28.840 --> 00:09:31.599
+those individuals and groups
+
+00:09:31.600 --> 00:09:33.599
+that are most likely to create value in the future,
+
+00:09:33.600 --> 00:09:36.959
+while also recognizing and fairly compensating
+
+00:09:36.960 --> 00:09:38.839
+those who've created value in the past,
+
+00:09:38.840 --> 00:09:41.919
+to set a good example and incentivize others
+
+00:09:41.920 --> 00:09:45.559
+to take chances in creating value.
+
+00:09:45.560 --> 00:09:50.079
+And it describes high level principles of
+
+00:09:50.080 --> 00:09:52.119
+dialectical inheritance attribution
+
+00:09:52.120 --> 00:09:53.879
+as proceeding by means of
+
+00:09:53.880 --> 00:09:55.999
+common, collectively agreed-upon standards
+
+00:09:56.000 --> 00:09:56.919
+that are applied to all.
+
+00:09:56.920 --> 00:09:59.759
+And the key thing here is these improvements feed back
+
+00:09:59.760 --> 00:10:01.919
+to the whole and apply to everyone.
+
+00:10:01.920 --> 00:10:03.639
+And this is an important quality
+
+00:10:03.640 --> 00:10:05.919
+to ensuring fairness and accuracy.
+
+NOTE Declaration of non-ownership
+
+00:10:05.920 --> 00:10:09.839
+There's also a declaration of non-ownership.
+
+00:10:09.840 --> 00:10:13.959
+We saw already that ownership is an overused institution.
+
+00:10:13.960 --> 00:10:20.079
+This just codifies that and allows us to shed
+
+00:10:20.080 --> 00:10:22.439
+the baggage of this idea of ownership
+
+00:10:22.440 --> 00:10:24.319
+where it doesn't make any sense.
+
+NOTE The financial model
+
+00:10:24.320 --> 00:10:28.159
+A third document is the financial model
+
+00:10:28.160 --> 00:10:31.319
+which describes how payments are to be treated,
+
+00:10:31.320 --> 00:10:34.159
+and a key idea here is that when you pay money
+
+00:10:34.160 --> 00:10:37.359
+to an open source project, you know,
+
+00:10:37.360 --> 00:10:40.239
+today you don't really have an incentive to do so,
+
+00:10:40.240 --> 00:10:42.439
+and it essentially is kind of like a donation.
+
+00:10:42.440 --> 00:10:45.999
+But in this model, in an attribution-based model,
+
+00:10:46.000 --> 00:10:48.119
+when you pay money to a project,
+
+00:10:48.120 --> 00:10:49.999
+you're creating value in a way.
+
+00:10:50.000 --> 00:10:51.599
+You're contributing value to the project
+
+00:10:51.600 --> 00:10:53.279
+and that itself is attributable.
+
+00:10:53.280 --> 00:10:56.239
+And the manner in which we'll treat this
+
+00:10:56.240 --> 00:10:58.839
+is in terms of the fair market price that, again,
+
+00:10:58.840 --> 00:11:00.199
+we agree upon collectively.
+
+00:11:00.200 --> 00:11:04.959
+And any payment that exceeds the fair market price
+
+00:11:04.960 --> 00:11:06.399
+is going to be treated as investment.
+
+00:11:06.400 --> 00:11:10.199
+And the goal here for this financial model
+
+00:11:10.200 --> 00:11:11.879
+is for the system to be self-sustaining,
+
+00:11:11.880 --> 00:11:15.439
+so I think there are many open problems here
+
+00:11:15.440 --> 00:11:18.439
+and any finance experts or any other experts
+
+00:11:18.440 --> 00:11:21.479
+who are interested in contributing here,
+
+00:11:21.480 --> 00:11:23.239
+your help is needed, certainly.
+
+NOTE The attribution model
+
+00:11:23.240 --> 00:11:26.759
+There's also an attribution model document,
+
+00:11:26.760 --> 00:11:28.999
+which describes some of the theoretical ideas
+
+00:11:29.000 --> 00:11:33.479
+that would guide dialectical inheritance attribution,
+
+00:11:33.480 --> 00:11:36.919
+and there are many interesting ideas here.
+
+00:11:36.920 --> 00:11:40.359
+One that I'd like to mention is "backpropagation,"
+
+00:11:40.360 --> 00:11:42.559
+which is the idea that
+
+00:11:42.560 --> 00:11:45.199
+as we're improving the standards over time
+
+00:11:45.200 --> 00:11:48.279
+and they're likely to get more accurate and fair over time,
+
+00:11:48.280 --> 00:11:51.559
+we'd like these more accurate and fair standards
+
+00:11:51.560 --> 00:11:56.519
+to "backpropagate" and calibrate the value assignments
+
+00:11:56.520 --> 00:11:57.799
+that were done in the past.
+
+00:11:57.800 --> 00:12:01.079
+And this means that some people might have been
+
+00:12:01.080 --> 00:12:02.839
+underpaid in the past
+
+00:12:02.840 --> 00:12:05.199
+and we would pay them what they were underpaid,
+
+00:12:05.200 --> 00:12:06.479
+or the balance,
+
+00:12:06.480 --> 00:12:08.839
+and some people may have been overpaid.
+
+00:12:08.840 --> 00:12:11.839
+Now in that case we're not going to go and say,
+
+00:12:11.840 --> 00:12:14.439
+"hey we overpaid you, give us the money back."
+
+00:12:14.440 --> 00:12:18.199
+Instead the system as a whole is going to bear
+
+00:12:18.200 --> 00:12:19.519
+the cost of being wrong,
+
+00:12:19.520 --> 00:12:22.159
+and so it's kind of an insurance policy.
+
+00:12:22.160 --> 00:12:25.599
+But I think another more interesting quality here is that
+
+00:12:25.600 --> 00:12:29.959
+the system in practice wouldn't really
+
+00:12:29.960 --> 00:12:32.999
+absorb any negative impact here
+
+00:12:33.000 --> 00:12:34.319
+because there is an incentive
+
+00:12:34.320 --> 00:12:37.599
+for these people who've been overpaid
+
+00:12:37.600 --> 00:12:38.799
+to reinvest that money.
+
+00:12:38.800 --> 00:12:42.839
+So I think they would want to invest the money
+
+00:12:42.840 --> 00:12:45.519
+in other places that the system has valued
+
+00:12:45.520 --> 00:12:49.119
+as being valuable and showing potential.
+
+NOTE The accounting system
+
+00:12:49.120 --> 00:12:54.239
+The second component of the implementation
+
+00:12:54.240 --> 00:12:58.599
+is the accounting system. All accounting is public.
+
+00:12:58.600 --> 00:13:00.879
+All payments into the repo are public
+
+00:13:00.880 --> 00:13:03.399
+and all payments out of the project are also public.
+
+00:13:03.400 --> 00:13:05.479
+We can do some things for privacy,
+
+00:13:05.480 --> 00:13:08.519
+and again, the basis of this system is dialogue.
+
+00:13:08.520 --> 00:13:10.759
+It's not a fundamentally technologically system.
+
+00:13:10.760 --> 00:13:12.799
+It's a fundamentally dialogue-based system,
+
+00:13:12.800 --> 00:13:14.759
+and that, to be honest with you, is everything.
+
+00:13:14.760 --> 00:13:16.999
+It's all systems that we have in place.
+
+00:13:17.000 --> 00:13:21.119
+But by embracing that, it means that
+
+00:13:21.120 --> 00:13:25.039
+we can do whatever we want to do by discussion,
+
+00:13:25.040 --> 00:13:26.039
+and if there's something
+
+00:13:26.040 --> 00:13:27.959
+that we cannot achieve in a technological way,
+
+00:13:27.960 --> 00:13:30.079
+we'll achieve it in a non-technological way.
+
+00:13:30.080 --> 00:13:35.999
+But anyway, the point is, all accounting is public,
+
+00:13:36.000 --> 00:13:40.399
+and text files in the repository
+
+00:13:40.400 --> 00:13:43.919
+form the inputs and outputs of the accounting system
+
+00:13:43.920 --> 00:13:48.879
+which is implemented as a GitHub action.
+
+00:13:48.880 --> 00:13:51.239
+So typically a source repository will have
+
+00:13:51.240 --> 00:13:54.119
+an ABE folder containing these three inputs:
+
+00:13:54.120 --> 00:13:55.599
+attributions, payments,
+
+00:13:55.600 --> 00:13:59.919
+and payouts. And we'll see how that works.
+
+NOTE drym.org Github account
+
+00:13:59.920 --> 00:14:04.839
+This is the drym.org Github organization account.
+
+00:14:04.840 --> 00:14:09.599
+This is an example of a repository that uses
+
+00:14:09.600 --> 00:14:12.439
+the GitHub action accounting system.
+
+00:14:12.440 --> 00:14:16.239
+So there will be a payments folder, a payouts folder,
+
+00:14:16.240 --> 00:14:18.639
+as well as an attributions file.
+
+00:14:18.640 --> 00:14:23.959
+The payments: essentially each file
+
+00:14:23.960 --> 00:14:26.759
+just represents a payment that's made to the repository.
+
+00:14:26.760 --> 00:14:29.079
+Payouts is the same except it's payments
+
+00:14:29.080 --> 00:14:32.359
+made by the admins of the repository to contributors.
+
+00:14:32.360 --> 00:14:37.159
+And the attributions file breaks down
+
+00:14:37.160 --> 00:14:40.679
+the attribution of the value in the repository
+
+00:14:40.680 --> 00:14:47.559
+by contributor. And then the billing system runs
+
+00:14:47.560 --> 00:14:50.359
+on every relevant commit,
+
+00:14:50.360 --> 00:14:53.679
+which is typically changes to the ABE folder,
+
+00:14:53.680 --> 00:14:57.239
+generates a set of transactions
+
+00:14:57.240 --> 00:15:00.519
+that are owed to various people from various payments,
+
+00:15:00.520 --> 00:15:05.079
+and then creates an issue with the outstanding balances
+
+00:15:05.080 --> 00:15:07.279
+that need to be paid out to contributors,
+
+00:15:07.280 --> 00:15:09.519
+and tells you what those balances are.
+
+00:15:09.520 --> 00:15:11.799
+So for repository or project maintainers,
+
+00:15:11.800 --> 00:15:14.879
+it automates all these accounting details
+
+00:15:14.880 --> 00:15:17.599
+and you just have to worry about fulfilling the payments.
+
+NOTE Expanding the boundary
+
+00:15:17.600 --> 00:15:23.519
+An interesting property of the prototype
+
+00:15:23.520 --> 00:15:28.399
+is that boundary incentives expand the boundary,
+
+00:15:28.400 --> 00:15:33.959
+and that is that the incentives in the system
+
+00:15:33.960 --> 00:15:38.439
+are so constructed that those on the periphery
+
+00:15:38.440 --> 00:15:40.439
+of the attribution-based economic system
+
+00:15:40.440 --> 00:15:42.079
+have an incentive to join in.
+
+00:15:42.080 --> 00:15:45.519
+And we'll see how that works.
+
+00:15:45.520 --> 00:15:51.359
+Well, as I mentioned, we're starting this prototype
+
+00:15:51.360 --> 00:15:52.919
+in the Emacs community with the
+
+00:15:52.920 --> 00:15:59.599
+Symex repo. Symex is a structural editing package,
+
+00:15:59.600 --> 00:16:05.319
+and this prototype will recognize direct contributors
+
+00:16:05.320 --> 00:16:08.159
+as well as antecedents and related projects
+
+00:16:08.160 --> 00:16:09.799
+through the process of collective attribution.
+
+00:16:09.800 --> 00:16:14.839
+We all decide how financial contributions to the Symex repo
+
+00:16:14.840 --> 00:16:18.759
+are going to be distributed to the direct contributors
+
+00:16:18.760 --> 00:16:21.039
+as well as to antecedents and related projects.
+
+00:16:21.040 --> 00:16:23.679
+So the power is yours!
+
+00:16:23.680 --> 00:16:27.159
+And that's what I meant when I said
+
+00:16:27.160 --> 00:16:29.519
+that the boundary incentives expand the boundary,
+
+00:16:29.520 --> 00:16:32.359
+because projects that we agree are owed money
+
+00:16:32.360 --> 00:16:37.959
+from the Symex repo now would have an incentive to join,
+
+00:16:37.960 --> 00:16:39.959
+because once they join they would get that money.
+
+00:16:39.960 --> 00:16:43.199
+And we'll also be implementing this in the
+
+00:16:43.200 --> 00:16:47.199
+Racket community. Racket is a Scheme dialect,
+
+00:16:47.200 --> 00:16:50.959
+and Emacs has great support for Racket in Racket Mode
+
+00:16:50.960 --> 00:16:52.159
+so I encourage you to try it.
+
+00:16:52.160 --> 00:16:55.999
+And we'll be prototyping it in the Qi repository.
+
+00:16:56.000 --> 00:16:59.599
+Qi is a language written in Racket which is, you know,
+
+00:16:59.600 --> 00:17:02.719
+it's for functional programming and things like that.
+
+00:17:02.720 --> 00:17:06.239
+And once again, we'll recognize direct contributors
+
+00:17:06.240 --> 00:17:09.239
+as well as antecedents and we all decide
+
+00:17:09.240 --> 00:17:11.559
+and agree on how those are done.
+
+NOTE Adopting this idea
+
+00:17:11.560 --> 00:17:14.119
+So how do you adopt this?
+
+00:17:14.120 --> 00:17:18.559
+You can add the github action to a repo
+
+00:17:18.560 --> 00:17:20.239
+that you are a maintainer of.
+
+00:17:20.240 --> 00:17:23.319
+You can financially support an ABE project.
+
+00:17:23.320 --> 00:17:25.199
+This is important to do
+
+00:17:25.200 --> 00:17:26.919
+because the system won't get started
+
+00:17:26.920 --> 00:17:28.119
+without money as an input.
+
+00:17:28.120 --> 00:17:31.119
+And it also has network effects, as we saw -
+
+00:17:31.120 --> 00:17:33.479
+the more money you contribute,
+
+00:17:33.480 --> 00:17:35.239
+the more incentive there is
+
+00:17:35.240 --> 00:17:36.799
+for other people to join the system.
+
+00:17:36.800 --> 00:17:39.879
+And contributions are also attributable,
+
+00:17:39.880 --> 00:17:41.079
+as we said earlier.
+
+00:17:41.080 --> 00:17:43.719
+Some of them can be treated as investments.
+
+00:17:43.720 --> 00:17:47.999
+Any help you can provide with funding
+
+00:17:48.000 --> 00:17:50.519
+would be attributable and very helpful, of course.
+
+00:17:50.520 --> 00:17:54.079
+And yeah, if you can help us achieve
+
+00:17:54.080 --> 00:17:55.839
+the goal of self-sufficiency
+
+00:17:55.840 --> 00:17:59.039
+without relying on capitalist entry points,
+
+00:17:59.040 --> 00:18:01.759
+that would be very helpful as well.
+
+00:18:01.760 --> 00:18:06.319
+I'd like to acknowledge the help of many individuals
+
+00:18:06.320 --> 00:18:09.399
+for this presentation
+
+00:18:09.400 --> 00:18:12.759
+as well as many of the supporting things
+
+00:18:12.760 --> 00:18:14.919
+that have gone on behind the scenes for years.
+
+00:18:14.920 --> 00:18:19.679
+And in particular for now I want to mention
+
+00:18:19.680 --> 00:18:25.559
+Jair and Ariana who wrote the accounting system
+
+00:18:25.560 --> 00:18:28.319
+that we saw earlier, and Salim who encouraged me
+
+00:18:28.320 --> 00:18:32.799
+to take this social approach to the prototype.
+
+00:18:32.800 --> 00:18:36.559
+And so many more people who have believed and invested
+
+00:18:36.560 --> 00:18:39.159
+in the cause of "attribution, not ownership!"
+
+NOTE Closing thoughts
+
+00:18:39.160 --> 00:18:42.759
+I want to leave you with this closing thought.
+
+00:18:42.760 --> 00:18:46.159
+The electromagnetic attraction between two objects
+
+00:18:46.160 --> 00:18:49.919
+is 10^42 stronger (!) than the gravitational attraction
+
+00:18:49.920 --> 00:18:51.079
+between these same objects.
+
+00:18:51.080 --> 00:18:53.879
+And yet, a stone falls to the Earth
+
+00:18:53.880 --> 00:18:56.679
+under the influence of gravity, not magnetism.
+
+00:18:56.680 --> 00:19:00.879
+The reason is that the e/m forces are polarized,
+
+00:19:00.880 --> 00:19:04.079
+much like our world, and cancel each other out.
+
+NOTE Taking care of one another
+
+00:19:04.080 --> 00:19:07.719
+Now in this world, we are told
+
+00:19:07.720 --> 00:19:09.559
+that we should look out for ourselves
+
+00:19:09.560 --> 00:19:11.879
+because no one is going to look out for us.
+
+00:19:11.880 --> 00:19:14.039
+That we should take care of our own
+
+00:19:14.040 --> 00:19:17.359
+because we can't rely on others to care.
+
+00:19:17.360 --> 00:19:22.479
+An attribution-based economy is nothing like that.
+
+00:19:22.480 --> 00:19:23.959
+We care about each other,
+
+00:19:23.960 --> 00:19:25.439
+we take care of each other,
+
+00:19:25.440 --> 00:19:29.879
+because taking care of one another is valuable,
+
+00:19:29.880 --> 00:19:32.559
+and an attribution-based economic system
+
+00:19:32.560 --> 00:19:39.079
+is capable of recognizing that value, in financial terms.
+
+00:19:39.080 --> 00:19:43.879
+And as a result, we are safe in the embrace of the world.
+
+00:19:43.880 --> 00:19:56.240
+So, um, yeah. Let's go!
diff --git a/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.vtt b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.vtt
new file mode 100644
index 00000000..2918301d
--- /dev/null
+++ b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.vtt
@@ -0,0 +1,563 @@
+WEBVTT
+
+00:00.000 --> 00:14.120
+All right. Hi, again, everyone. So, we are back. And I am with Vavin. Hi, Vavin. How
+
+00:14.120 --> 00:15.120
+are you doing?
+
+00:15.120 --> 00:18.120
+I'm good. How about you?
+
+00:18.120 --> 00:24.040
+I'm doing well. You will note that I now have an extra layer because I was absolutely frozen
+
+00:24.040 --> 00:28.960
+in the first half of this year's EmacsConf. But now, hopefully, I should start getting
+
+00:28.960 --> 00:33.080
+a little warmer. Usually, I'm more stressed, you know, when we only have one track and
+
+00:33.080 --> 00:36.640
+we only have about two minutes between every talk. I need to run all the time. And even
+
+00:36.640 --> 00:40.840
+though we are in the dead of winter in Europe, usually, I'm pretty warm. But today, I am
+
+00:40.840 --> 00:45.920
+so relaxed that I have the mental availability to be cold. Anyway, this is not about me.
+
+00:45.920 --> 00:47.920
+This is about you, Vavin.
+
+00:47.920 --> 00:54.740
+So, for the new joiners, newcomers to the chat, we do have a pad where you can ask questions.
+
+00:54.740 --> 00:59.400
+And we are primarily looking at this pad for the questions. What we'll do afterwards is
+
+00:59.400 --> 01:06.720
+that we'll open up this current room in which we are. And we will allow you to ask questions
+
+01:06.720 --> 01:12.360
+directly to Vavin. And it's a subject, you know, user group that is very close to Sasha
+
+01:12.360 --> 01:17.720
+and my heart because we've done a lot of work towards it. And we might have some knowledge
+
+01:17.720 --> 01:23.440
+to contribute afterwards. But for now, I prefer if we heard about Vavin. So, Vavin, take it
+
+01:23.440 --> 01:24.440
+away.
+
+01:24.440 --> 01:25.440
+Yep.
+
+01:25.440 --> 01:36.640
+I see one question. What about using on multiple computers? I think that's not related or I'm
+
+01:36.640 --> 01:38.440
+not sure what it is about.
+
+01:38.440 --> 01:40.440
+I'm not sure either.
+
+01:40.440 --> 01:46.840
+Yeah, I'll just do the next one. What about collaborative editing with this multiple computers
+
+01:46.840 --> 01:50.920
+with Macs like CRDT or with R2D2?
+
+01:50.920 --> 01:57.920
+I think there's something weird going on. I'll give you just a second.
+
+01:57.920 --> 02:04.120
+I'll just pick up the relevant one in that case.
+
+02:04.120 --> 02:05.680
+Sure, thank you.
+
+02:05.680 --> 02:07.840
+Thoughts on physical meetups.
+
+02:07.840 --> 02:19.560
+Yeah, so this year, I think a few months back, I had thought of doing it. But the way right
+
+02:19.560 --> 02:28.040
+now it is, at least in my region, the community is comparatively small. So usually right now
+
+02:28.040 --> 02:33.480
+the model is working is basically the remote one. And we get people from some people from
+
+02:33.480 --> 02:39.080
+I think China, some people from Australia. So we get to have a couple of people and good
+
+02:39.080 --> 02:46.680
+discussions usually. Whereas for physical meetups, what I've been thinking is maybe
+
+02:46.680 --> 02:52.960
+one off meetup can be physical. Let's say you come together similar to people have been
+
+02:52.960 --> 03:00.680
+watching Emacs on this year. So something like you come together, do the online meetup
+
+03:00.680 --> 03:05.520
+first and then networking and discussions can happen offline. So that was one of my
+
+03:05.520 --> 03:12.880
+idea. Maybe I'll try it with Emacs APAC sooner or later and we'll see how it goes. So that's
+
+03:12.880 --> 03:18.880
+the current plan about physical meetups. And in terms of if you ask me thoughts, they are
+
+03:18.880 --> 03:25.340
+good too. So you get to talk with people face to face, you got to make more connections.
+
+03:25.340 --> 03:30.840
+So yeah, I might experiment some mixed way of doing it right once in a while you meet
+
+03:30.840 --> 03:36.720
+or otherwise you do it online so that people who are not able to join in or travel to that
+
+03:36.720 --> 03:40.160
+particular area or region, they can just join online.
+
+03:40.160 --> 03:48.240
+Yeah, it's a very interesting topic of physical meetups because we, so I participate in one
+
+03:48.240 --> 03:56.880
+of the workshop Emacs Paris and we used to have in-person meetups in Paris and usually
+
+03:56.880 --> 04:02.040
+there were about five to 10 people showing up, which was a good number. But when COVID
+
+04:02.040 --> 04:07.820
+happened and we moved to virtual meetings, we started having a lot more people. Now we
+
+04:07.820 --> 04:12.680
+are averaging about 15 to 20 people at every session and it's amazing. But the problem
+
+04:12.680 --> 04:20.000
+is, I'm knocking on wood really hard, but now that COVID is a little easier to manage
+
+04:20.000 --> 04:25.720
+and that's a lot of people are returning to in-person meetings, it's a little more complicated
+
+04:25.720 --> 04:32.040
+really to say, do we go back to physical meetings even though we have more people on a virtual
+
+04:32.040 --> 04:36.640
+meeting? It causes us to ask many questions about why do we want those meetings to be
+
+04:36.640 --> 04:44.320
+held? And we need to think about this in 2023 with the organizers of Emacs Paris and I think
+
+04:44.320 --> 04:53.840
+Emacs SF also was in the process of thinking about how to go back to physical venues. And
+
+04:53.840 --> 05:01.680
+I think right now the consensus amongst a lot of workshop user group organizers is that
+
+05:01.680 --> 05:06.920
+they would like to have both. So if it was a monthly meeting before, why not have a physical
+
+05:06.920 --> 05:14.960
+meeting every month and a virtual meeting every month as well on a two-week cycle. So
+
+05:14.960 --> 05:25.240
+that's a lot more work, obviously. It's not choosing, it's choosing. I'm not sure how
+
+05:25.240 --> 05:30.400
+big the pool of people you have in Emacs APAC actually is but it feels like it's a much
+
+05:30.400 --> 05:39.720
+larger area than say Emacs Paris for France. So you try it even though. Yeah, exactly.
+
+05:39.720 --> 05:48.320
+So in India, there is the region with this Maharashtra Pune, it is like one end and across
+
+05:48.320 --> 05:54.880
+maybe you can say 500-600 kilometers radius, you have many other cities where more people
+
+05:54.880 --> 06:02.960
+are there. So having all of them at one place is basically event like conference or something.
+
+06:02.960 --> 06:08.400
+Monthly meetup, probably not. So there is one more meetup group I managed, not related
+
+06:08.400 --> 06:14.280
+to Emacs, but we had same question, what to do now? We have many people joining us throughout
+
+06:14.280 --> 06:20.920
+the state and should we have a meetup in one city only? So yeah, I think we'll have to
+
+06:20.920 --> 06:25.400
+experiment and see. Yeah, but it's fun to experiment, it's fun
+
+06:25.400 --> 06:30.160
+to have. We know that we have interested people all around the world, like that it showed
+
+06:30.160 --> 06:34.840
+you the type of workshop that we can have and how to run your own, but we already have
+
+06:34.840 --> 06:39.120
+many workshops around the world. It wasn't the case if you go back three years ago. I
+
+06:39.120 --> 06:44.720
+think if I'm completely speedboarding now, but I think we had about five user groups
+
+06:44.720 --> 06:52.520
+worldwide three years ago, and now we must have something like 12, 13, 14 even, which
+
+06:52.520 --> 06:56.680
+is a massive increase when you think about it. Now that Babin has provided you with the
+
+06:56.680 --> 07:01.440
+tools to do just the same and start your own workshop, and also you have the buddy system
+
+07:01.440 --> 07:07.880
+of Andrea that you saw earlier today, you have more options than ever to be able to
+
+07:07.880 --> 07:13.240
+meet people talking about Emacs. Now, there's obviously EmacsConf as well, which is helping
+
+07:13.240 --> 07:18.800
+and we have a lot of lovely tools to share with you, but I think it's better or it's
+
+07:18.800 --> 07:24.120
+a good compliment to have a monthly checkup with people who might feel a little closer
+
+07:24.120 --> 07:28.920
+to you, either, and closer can have multiple definitions, you know, it can be closer in
+
+07:28.920 --> 07:34.840
+terms of proficiency with Emacs, or it can be closer geographically, which makes it easier
+
+07:34.840 --> 07:39.960
+or culturally, which will make it easier to converse with people. We do have a question
+
+07:39.960 --> 07:44.440
+about hybrid meetings. Do you want to take this one, Babin? It's so related to what we
+
+07:44.440 --> 07:45.440
+were talking about.
+
+07:45.440 --> 07:53.800
+Yep, yep, yep, yeah. So I tried it, not with Emacs one, but with the other one I organized.
+
+07:53.800 --> 07:59.800
+And even I had some thoughts. The only problem is what happens, the people who are joining
+
+07:59.800 --> 08:07.960
+virtually, they usually end up feeling left out. Because people who are in the room, they
+
+08:07.960 --> 08:13.640
+might be discussing something face to face, they might have some discussions. The only
+
+08:13.640 --> 08:21.200
+way I think would work is everyone joins the online link from their own machines. You do
+
+08:21.200 --> 08:27.680
+your regular meetup discussions. And after that, you have some discussions. Because otherwise,
+
+08:27.680 --> 08:33.560
+one side or other side will end up feeling left out. Rather than doing it, I'll just
+
+08:33.560 --> 08:39.160
+keep it one or other, either completely virtual or completely in person.
+
+08:39.160 --> 08:47.240
+Yeah, I think it is really complicated to do a hybrid stream well. I told you the figures
+
+08:47.240 --> 08:52.960
+of the people we had, which was roughly between five to 15 people at most in physical venues.
+
+08:52.960 --> 08:55.800
+Right now, by the way, we should probably say hi to the people in Switzerland who are
+
+08:55.800 --> 09:03.880
+currently watching Emacs in a very nice, warm room. I'm thinking warm because I'm cold.
+
+09:03.880 --> 09:07.320
+It's not only warm in terms of the weather inside the room, but also warm in terms of
+
+09:07.320 --> 09:13.320
+the people around it. Hi, everyone. Hybrid meetings pretty much take the attention
+
+09:13.320 --> 09:18.880
+of two people entirely. One to manage the physical venue, and one to manage the virtual
+
+09:18.880 --> 09:24.480
+interactions. And generally, those two people would be core organizers of the events. And
+
+09:24.480 --> 09:30.520
+that takes a lot of energy. And I think people are a little scared to do such events because
+
+09:30.520 --> 09:34.360
+you also need to manage webcams, you need to manage presentation, how to take questions,
+
+09:34.360 --> 09:41.000
+how to relay audio. And frankly, as someone who organizes or helps organize EmacsConf
+
+09:41.000 --> 09:45.080
+every year, I can tell you that it can be plenty of wrong going on with audio setup,
+
+09:45.080 --> 09:49.880
+video setup, and making sure that everyone is being listened to. But ultimately, we are
+
+09:49.880 --> 09:55.560
+sharing these tools. So maybe we could share the tools for EmacsConf for people to actually
+
+09:55.560 --> 10:00.280
+start running their own workshop. That would be interesting. But please don't send me an
+
+10:00.280 --> 10:03.680
+email asking for this. I need to rest.
+
+10:03.680 --> 10:13.760
+So there is one, I think, thought. Yeah, one thought in the IRC. It is about the time it
+
+10:13.760 --> 10:22.280
+takes for me to organize the meetup. So what I have done is creating the announcement,
+
+10:22.280 --> 10:29.360
+posting it at least on the website, I have automated it. So at times, even I forget that
+
+10:29.360 --> 10:36.120
+when is the meetup and all. But my automation takes care of creating the online website
+
+10:36.120 --> 10:42.760
+entries, announcements and all. So that saves me a lot of time and a lot of cognitive load
+
+10:42.760 --> 10:53.440
+I should say. I don't have to remember I have to announce it. And what happens is, I do
+
+10:53.440 --> 11:00.480
+plan to automate more things like announcements on IRC, announcements on Mastodon and stuff.
+
+11:00.480 --> 11:07.420
+So that will save a lot more time. But usually, that basically means I don't have to do much
+
+11:07.420 --> 11:12.920
+stuff before the meetup. It's like 15 to 20 minutes. And during the meetup, obviously
+
+11:12.920 --> 11:19.040
+I attend along with everyone else. And post meetup, it might take more time. But I haven't
+
+11:19.040 --> 11:26.080
+worked on processing or collecting the video and publishing those. So maybe add more, let's
+
+11:26.080 --> 11:29.280
+say, 30 minutes or so. So yep.
+
+11:29.280 --> 11:36.000
+Yeah, there is definitely something to be said about how do we use the workshops to
+
+11:36.000 --> 11:41.040
+make content that lasts after the workshop. It's a discussion we've been having with some
+
+11:41.040 --> 11:47.520
+of the workshop organizers. I remember mostly Emacs SF again, and also Emacs Paris. We were
+
+11:47.520 --> 11:52.760
+talking about, yes, we record the sessions, but we share the sessions only with members
+
+11:52.760 --> 11:59.440
+of the event. What if we have a really great presentation? It would be such a shame to
+
+11:59.440 --> 12:05.440
+leave it live merely on the BBB record server where only users can see it. No, it's actually
+
+12:05.440 --> 12:09.840
+much better if we could find a way to share it on YouTube, for instance, or any other
+
+12:09.840 --> 12:15.120
+distribution platform where people would be able to share this. With EmacsConf, we share
+
+12:15.120 --> 12:19.960
+all the talks that happen in prior years. What if we could have user groups and workshops
+
+12:19.960 --> 12:23.840
+do the same? That would be amazing. But I think people are feeling a little iffy and
+
+12:23.840 --> 12:28.880
+rightfully so. This is a lot of energy to first make presentations like this for the
+
+12:28.880 --> 12:36.080
+speakers, but then to package them, to caption them for accessibility. We are able to broadcast
+
+12:36.080 --> 12:42.000
+talk this year with captions with no little thanks to Bavin, who is actually helping us
+
+12:42.000 --> 12:47.840
+a lot behind the scenes working on the subtitles. Thank you again so much, Bavin, for all this.
+
+12:47.840 --> 12:52.020
+You will be the first to tell, this is a lot of work, actually. I'm not sure how much time
+
+12:52.020 --> 12:58.400
+you've spent in the last two months working on subtitles, but it's been a long time.
+
+12:58.400 --> 13:03.720
+It does take time. That's why I'm still not sure how much time it will take for me to
+
+13:03.720 --> 13:09.400
+get those talks or recordings out, right? But as a first step, like I mentioned in the
+
+13:09.400 --> 13:17.160
+talk as well, just get it out first and then work towards refining it.
+
+13:17.160 --> 13:24.440
+Yeah, that's the usual saying that good is better than perfect or here and there is better
+
+13:24.440 --> 13:30.760
+than later and never. I think that's a very good plan here. Bavin, we have about five
+
+13:30.760 --> 13:35.200
+more minutes until we need to head into the next store. We have opened the chat room,
+
+13:35.200 --> 13:39.320
+so if people wanted to join and ask questions with Bavin, mostly if you're interested in
+
+13:39.320 --> 13:43.480
+running your own workshop, this would be a golden opportunity to converse with Bavin
+
+13:43.480 --> 13:48.160
+and see how you could get started on this. Or maybe if you want to find people interested
+
+13:48.160 --> 13:53.560
+in starting a workshop, maybe not in BBB today, but it'd be interesting for you to connect
+
+13:53.560 --> 14:00.440
+on the pad or whatever else really to be able to say, oh yeah, I want to start an Emacs
+
+14:00.440 --> 14:04.560
+Michigan meeting or whatever. I'm not sure why I defaulted to Michigan, don't ask me.
+
+14:04.560 --> 14:08.480
+But you would be able to find maybe other people willing to do so and that'd be great.
+
+14:08.480 --> 14:12.080
+Why don't you stop moving my hands like this? This is the one gesture I'm doing today and
+
+14:12.080 --> 14:17.760
+I need to pluralize it a little bit. Do we have any more questions on the pad? I think
+
+14:17.760 --> 14:18.760
+no.
+
+14:18.760 --> 14:25.800
+Not on pad. I think there are two questions in IRC. I'll just quickly answer them. One
+
+14:25.800 --> 14:33.320
+is about automation. So I have my repository, the website repository on GitLab and they
+
+14:33.320 --> 14:40.160
+provide something called pipelines. So you can just schedule things and I have a cronjob
+
+14:40.160 --> 14:47.880
+you can say sort of on their platform itself, which goes and gets triggered on certain days
+
+14:47.880 --> 14:57.920
+and my script basically takes care of publishing a new blog entry basically. And there was
+
+14:57.920 --> 15:08.280
+one question, what is iLuxy? So it is a new Linux user group from Chennai, India. So yeah,
+
+15:08.280 --> 15:15.080
+I think I've been using their mailing list and there have been a couple of people from
+
+15:15.080 --> 15:23.160
+that part of the country who joined the meetup as well.
+
+15:23.160 --> 15:28.240
+And we're definitely trying to make Emacs user group a thing. Like Lug, Linux user group
+
+15:28.240 --> 15:33.520
+has been a thing for decades at this point. And if only we could manage to make, I mean,
+
+15:33.520 --> 15:41.760
+the thing it doesn't sound as well, a huge, probably the worst argument in its favor really,
+
+15:41.760 --> 15:47.000
+but Emacs user group feels like it should be something that is widely adopted as much
+
+15:47.000 --> 15:51.240
+as Linux user groups. Because when you think about it, whether it be Linux or whether it
+
+15:51.240 --> 15:57.080
+be Emacs, those groups are where a lot of people get to experiment with those tools
+
+15:57.080 --> 16:02.600
+and learn, especially a lot of beginners who make it to those meetings. They get propelled
+
+16:02.600 --> 16:07.200
+in the future in terms of how much they learn and it's so much better. You probably heard
+
+16:07.200 --> 16:13.000
+more about this in the Android talk we had earlier today. Right, I'm blabbering on about,
+
+16:13.000 --> 16:18.960
+but it's a topic very dear to my heart and I'm so glad that you managed to feel sorry
+
+16:18.960 --> 16:26.080
+a topic and a presentation. Sorry, I'm mixing up everything there.
+
+16:26.080 --> 16:33.140
+We will soon be moving on to the next stream. So I see that we have a couple of people still
+
+16:33.140 --> 16:38.120
+on BBB, but no one with a microphone. So again, when we open the BBB chat room, if you want
+
+16:38.120 --> 16:42.800
+to join and ask questions, it's all the better. It's good if you want to join and listen,
+
+16:42.800 --> 16:47.520
+but we need people to actually be asking questions because that's when we have the speaker in
+
+16:47.520 --> 16:52.400
+one room and you can gather all the questions. I'm going to give you a little secret. If
+
+16:52.400 --> 16:56.360
+sometimes it doesn't sound like I'm making any sense, it's because on one here, I am
+
+16:56.360 --> 17:00.520
+listening to Bavin. That's the left here. On the right here, I'm listening to production
+
+17:00.520 --> 17:07.640
+and sometimes stuff is burning in the background and I have to take a deep breath and focus
+
+17:07.640 --> 17:12.120
+on, for instance, everyone is talking in my ear. It's really complicated. So what I'll
+
+17:12.120 --> 17:16.880
+be doing is that in about 1 minute and 20 seconds, we'll be moving into the next talk.
+
+17:16.880 --> 17:21.480
+Bavin, thank you so much for taking the time to answer all the questions. You'll probably
+
+17:21.480 --> 17:24.960
+be sleeping fairly soon, right?
+
+17:24.960 --> 17:31.880
+Yeah, please help us in the backstage. But yes, thank you so much for all your help.
+
+17:31.880 --> 17:36.000
+Thank you for your presentation. As for the others, we are about to move to the next talk
+
+17:36.000 --> 17:40.840
+in about 1 minute. So it's going to be a bit of an awkward pause again. Sorry for this,
+
+17:40.840 --> 17:46.800
+but at the top of the next minute, we'll be starting the next talk. See you in a bit,
+
+17:46.800 --> 17:49.400
+I suppose. Thank you again, Bavin.
+
+17:49.400 --> 17:53.760
+Thank you. Thank you for organizing the event. It has been fun.
+
+17:53.760 --> 17:54.880
+Thank you for participating in it.
+
diff --git a/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt
new file mode 100644
index 00000000..b2f37314
--- /dev/null
+++ b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt
@@ -0,0 +1,82 @@
+WEBVTT
+
+00:00.000 --> 00:01:10.120
+Introduction
+
+01:10.120 --> 00:02:08.320
+Example from Emacs APAC
+
+02:08.320 --> 00:02:27.400
+"Why should I attend meetups?"
+
+02:27.400 --> 00:02:56.800
+"I am a beginner"
+
+02:56.800 --> 00:03:16.160
+"I am an experienced user"
+
+03:16.160 --> 00:04:10.000
+Finding meetups
+
+04:10.000 --> 00:04:36.840
+How to join
+
+04:36.840 --> 00:05:33.200
+Emacs Calendar
+
+05:33.200 --> 00:06:45.560
+Making the most of a meetup
+
+06:45.560 --> 00:07:19.680
+"What if I want to start my own meetup group?"
+
+07:19.680 --> 00:07:37.880
+"How much effort do I need to put?"
+
+07:37.880 --> 00:07:58.480
+"What if I'm new to Emacs?"
+
+07:58.480 --> 00:08:52.600
+"How do I do it now?"
+
+08:52.600 --> 00:09:49.440
+Why I prefer discussions
+
+09:49.440 --> 00:10:18.240
+What about talks?
+
+10:18.240 --> 00:10:58.480
+Frequency of the meetup
+
+10:58.480 --> 00:11:39.960
+"Should I schedule and just wait?"
+
+11:39.960 --> 00:11:58.920
+Adding your event to the Emacs Calendar
+
+11:58.920 --> 00:13:00.280
+What to do during the meetup
+
+13:00.280 --> 00:14:44.240
+After the meetup
+
+14:44.240 --> 00:14:59.800
+Checklist
+
+14:59.800 --> 00:15:57.240
+Co-organizers
+
+15:57.240 --> 00:17:14.200
+Website
+
+17:14.200 --> 00:17:42.280
+Video conferencing
+
+17:42.280 --> 00:18:01.720
+Communication
+
+18:01.720 --> 00:18:50.080
+Other resources
+
+18:50.080 --> 00:19:35.280
+Connecting with other organizers
diff --git a/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt
new file mode 100644
index 00000000..8830e71e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt
@@ -0,0 +1,1321 @@
+WEBVTT captioned by bhavin192
+
+00:00.000 --> 00:09.880
+Hello everyone, welcome to my talk.
+
+00:09.880 --> 00:11.160
+I hope you all have been
+
+00:11.160 --> 00:14.680
+enjoying EmacsConf so far, like I am.
+
+00:14.680 --> 00:15.960
+But you might be wondering,
+
+00:15.960 --> 00:18.480
+"How do I meet fellow Emacs users
+
+00:18.480 --> 00:21.560
+after the conference?"
+
+00:21.560 --> 00:23.760
+What if I tell you there is a way?
+
+00:23.760 --> 00:26.680
+The answer is local meetups.
+
+00:26.680 --> 00:29.840
+These are user groups who arrange events
+
+00:29.840 --> 00:34.800
+at some frequency, they meet at some frequency.
+
+00:34.800 --> 00:36.840
+That's what we are going to talk about today:
+
+00:36.840 --> 00:39.480
+attending and organizing Emacs meetups.
+
+00:39.480 --> 00:41.600
+In other words, enjoying your Emacs journey
+
+00:41.600 --> 00:43.880
+with more folks!
+
+00:43.880 --> 00:45.880
+I am Bhavin, I am from India,
+
+00:45.880 --> 00:47.280
+and I have been organizing
+
+00:47.280 --> 00:49.200
+Emacs Asia Pacific meetup
+
+00:49.200 --> 00:52.280
+since last few months [almost 2 years].
+
+00:52.280 --> 00:54.600
+We will be talking about online meetups
+
+00:54.600 --> 00:57.440
+most of the time.
+
+00:57.440 --> 00:00:59.251
+The beauty of online meetups is,
+
+00:00:59.251 --> 00:01:01.480
+you can join any meetups
+
+01:01.480 --> 01:03.360
+if the time permits,
+
+01:03.360 --> 01:05.080
+if the time zone is same.
+
+01:05.080 --> 01:07.080
+And there is no barrier.
+
+01:07.080 --> 01:10.120
+So let's get started.
+
+01:10.120 --> 01:14.120
+Let's see how a meetup looks like.
+
+01:14.120 --> 01:18.040
+We will see one of the Emacs APAC meetup's
+
+01:18.040 --> 01:25.640
+snippet, basically.
+
+01:25.640 --> 01:29.200
+[Ihor]: There is something called org-indent-mode.
+
+01:29.200 --> 01:33.040
+So, it's like this org-adapt-indentation
+
+01:33.040 --> 01:34.720
+which is like electric indent.
+
+01:34.720 --> 01:37.480
+Like when you press enter, it will indent.
+
+01:37.480 --> 01:41.520
+There is org-indent-mode, which does not require you
+
+01:41.520 --> 01:44.560
+to actually make the indents physically
+
+01:44.560 --> 01:45.600
+in the file.
+
+01:45.600 --> 01:54.320
+It will make things appear indented.
+
+01:54.320 --> 01:55.880
+This one?
+
+01:55.880 --> 01:56.400
+Yeah.
+
+01:56.400 --> 01:57.200
+[Bhavin]: org-adapt-indentation.
+
+01:57.200 --> 02:03.120
+Okay.
+
+02:03.120 --> 02:04.800
+Looks interesting, right?
+
+02:04.800 --> 02:08.320
+So, let's get into more details.
+
+02:08.320 --> 02:09.520
+You might have a question:
+
+02:09.520 --> 02:11.400
+"Why I should attend meetups?"
+
+02:11.400 --> 02:12.240
+That's a good question.
+
+02:12.240 --> 02:14.640
+You should always ask "why".
+
+02:14.640 --> 02:19.160
+It's an opportunity to learn together.
+
+02:19.160 --> 02:21.640
+You basically meet like-minded people,
+
+02:21.640 --> 02:23.560
+like-minded Emacs users,
+
+02:23.560 --> 02:27.400
+and you can always have fun, right?
+
+02:27.400 --> 02:29.160
+You still might have a question:
+
+02:29.160 --> 02:31.040
+"I am a beginner."
+
+02:31.040 --> 02:34.080
+I would say that's a great avenue for you.
+
+02:34.080 --> 02:36.640
+You get to discover more things.
+
+02:36.640 --> 02:38.800
+You can get help if you are facing
+
+02:38.800 --> 02:41.120
+any issues, any errors.
+
+02:41.120 --> 02:42.920
+And always keep in mind that it's okay
+
+02:42.920 --> 02:44.280
+if you don't understand everything
+
+02:44.280 --> 02:45.160
+from the discussions.
+
+02:45.160 --> 02:49.800
+There are going to be times where everything is…,
+
+02:49.800 --> 02:51.960
+all the topics you are not able to understand,
+
+02:51.960 --> 02:56.800
+which is totally fine.
+
+02:56.800 --> 02:58.760
+"I am an experienced user."
+
+02:58.760 --> 03:00.240
+I would say that's even better
+
+03:00.240 --> 03:01.720
+because you can help others
+
+03:01.720 --> 03:03.680
+during the meetup.
+
+03:03.680 --> 03:06.440
+And usually, in Emacs or in general,
+
+03:06.440 --> 03:08.200
+there is always something new to learn.
+
+03:08.200 --> 03:10.160
+There are plenty of packages.
+
+03:10.160 --> 03:11.080
+There might be something
+
+03:11.080 --> 03:12.440
+you have never tried.
+
+03:12.440 --> 03:13.760
+And there are always going to be
+
+03:13.760 --> 03:16.160
+different workflows of using something.
+
+03:16.160 --> 03:23.520
+So now, how do I become part of a meetup, right?
+
+03:23.520 --> 03:26.920
+"How do I become part of a meetup group?"
+
+03:26.920 --> 03:29.000
+The first step you might be doing is
+
+03:29.000 --> 03:30.920
+finding a meetup.
+
+03:30.920 --> 03:32.200
+There is this page,
+
+03:32.200 --> 03:35.120
+EmacsWiki page called Usergroups,
+
+03:35.120 --> 03:37.000
+currently maintained
+
+03:37.000 --> 03:38.680
+by Leo and Sacha.
+
+03:38.680 --> 03:46.600
+So, let's see how that page looks like.
+
+03:46.600 --> 03:48.040
+As you can see, this page tells you
+
+03:48.040 --> 03:51.160
+about all the upcoming events.
+
+03:51.160 --> 00:04:05.485
+And it also has a list of all the meetup groups.
+
+00:04:05.485 --> 00:04:10.000
+So, you can find all the groups there.
+
+04:10.000 --> 04:11.760
+Once you find one,
+
+04:11.760 --> 04:13.480
+you need to join them, right?
+
+04:13.480 --> 04:17.880
+How to join differs from group to group
+
+04:17.880 --> 04:20.520
+but usually you will find a way to subscribe
+
+04:20.520 --> 04:23.160
+to their mailing list or RSS feed,
+
+04:23.160 --> 04:24.520
+join their IRC channels.
+
+04:24.520 --> 04:27.200
+They might have accounts on some platforms
+
+04:27.200 --> 04:29.960
+like Mobilizon or meetup.com.
+
+04:29.960 --> 04:31.400
+You can just go there and join,
+
+04:31.400 --> 04:32.320
+so that you get notified
+
+04:32.320 --> 04:36.840
+whenever there is a new event.
+
+04:36.840 --> 04:39.120
+Now, seeing that list,
+
+04:39.120 --> 04:42.080
+you might say, "There are too many events
+
+04:42.080 --> 04:42.920
+of my interest."
+
+04:42.920 --> 04:47.000
+Don't worry, there is a solution.
+
+04:47.000 --> 04:49.280
+There is an Emacs calendar,
+
+04:49.280 --> 04:51.960
+you can subscribe to this calendar.
+
+04:51.960 --> 04:55.120
+Let's see what all events
+
+04:55.120 --> 04:56.800
+are there in this particular calendar.
+
+04:56.800 --> 05:00.120
+This month there is Emacs Berlin to start with
+
+05:00.120 --> 05:02.840
+and then there is EmacsConf,
+
+05:02.840 --> 05:06.360
+then Emacs APAC is also there.
+
+05:06.360 --> 05:15.520
+Let's see…, there is a companion website
+
+05:15.520 --> 05:17.840
+for this calendar as well.
+
+05:17.840 --> 05:19.240
+Let's go to the website also.
+
+05:19.240 --> 05:24.600
+You will see all the options, how to import it.
+
+05:24.600 --> 05:26.240
+There is ICS file,
+
+05:26.240 --> 05:28.120
+there are different time zones,
+
+05:28.120 --> 05:29.200
+Org mode files.
+
+05:29.200 --> 05:33.200
+You can just go there and subscribe.
+
+05:33.200 --> 05:38.520
+"How do I make most of it?
+
+05:38.520 --> 05:40.640
+If I am attending a meetup,
+
+05:40.640 --> 05:42.120
+how do I make most of it?"
+
+05:42.120 --> 05:44.480
+I would say never hesitate
+
+05:44.480 --> 05:45.520
+from asking questions.
+
+05:45.520 --> 05:46.600
+If there is something new,
+
+05:46.600 --> 05:47.840
+something you don't understand,
+
+05:47.840 --> 05:49.240
+just go ahead and ask questions.
+
+05:49.240 --> 05:51.320
+Ask for help if you are stuck somewhere.
+
+05:51.320 --> 05:54.040
+There are going to be new things,
+
+05:54.040 --> 05:56.120
+so make sure you note them down,
+
+05:56.120 --> 05:58.400
+and you can try those later.
+
+05:58.400 --> 06:04.600
+If possible, have a microphone or webcam on,
+
+06:04.600 --> 06:07.120
+so that you can connect with others very easily.
+
+06:07.120 --> 06:10.560
+If that's not an option for some reason,
+
+06:10.560 --> 06:12.520
+it's fine, you can always use chat
+
+06:12.520 --> 06:13.720
+and interact with everyone.
+
+06:13.720 --> 06:18.560
+So, don't make that a reason for not attending.
+
+06:18.560 --> 06:20.360
+Go ahead and attend,
+
+06:20.360 --> 06:22.640
+even if you just have chat as an option
+
+06:22.640 --> 06:23.720
+to interact with others.
+
+06:23.720 --> 06:27.480
+"Wait, I still have questions."
+
+06:27.480 --> 06:28.520
+Definitely.
+
+06:28.520 --> 06:30.360
+If you have more questions,
+
+06:30.360 --> 06:31.640
+go ahead and post those.
+
+06:31.640 --> 06:34.440
+I will come to them at the end.
+
+06:34.440 --> 06:42.840
+Now we know how to attend,
+
+06:42.840 --> 00:06:44.651
+what are the things you need to do
+
+00:06:44.651 --> 00:06:45.560
+if you want to attend.
+
+06:45.560 --> 00:06:48.418
+"What if I want to start my own meetup group?"
+
+00:06:48.418 --> 00:06:51.520
+Because there is no regional group,
+
+06:51.520 --> 06:53.560
+or there is something very specific
+
+06:53.560 --> 06:55.560
+which you want to start a group about.
+
+06:55.560 --> 07:01.800
+Again, "Why should I start a meetup group?"
+
+07:01.800 --> 07:05.080
+It is a way, I would say, to give back
+
+07:05.080 --> 07:08.880
+to the community by creating a platform
+
+07:08.880 --> 07:10.560
+for people to interact.
+
+07:10.560 --> 00:07:15.440
+You give speakers a platform,
+
+07:15.440 --> 07:17.520
+you also give a platform to the attendees.
+
+07:17.520 --> 07:19.680
+And obviously to have fun with others.
+
+07:19.680 --> 07:25.640
+There are some common questions
+
+07:25.640 --> 07:26.880
+which might come up,
+
+07:26.880 --> 00:07:28.051
+something like,
+
+00:07:28.051 --> 00:07:29.720
+"How much effort do I need to put?"
+
+07:29.720 --> 07:32.600
+Personally, I don't have to put
+
+07:32.600 --> 07:34.520
+more than two hours a month,
+
+07:34.520 --> 07:36.760
+that's including the time
+
+07:36.760 --> 07:37.880
+I attend the meetup.
+
+07:37.880 --> 07:42.600
+"What if I'm new to Emacs?"
+
+07:42.600 --> 07:43.600
+That's totally fine.
+
+07:43.600 --> 07:45.920
+You don't have to know Emacs,
+
+07:45.920 --> 07:47.200
+you don't have to be an expert
+
+07:47.200 --> 07:48.400
+to start a meetup group.
+
+07:48.400 --> 07:49.600
+That's totally fine.
+
+07:49.600 --> 07:51.480
+You will have more folks joining in
+
+07:51.480 --> 07:54.120
+with different experiences.
+
+07:54.120 --> 07:57.160
+That's totally fine to be a beginner
+
+07:57.160 --> 07:58.480
+in Emacs to start a meetup.
+
+07:58.480 --> 08:02.440
+"How do I do it now?"
+
+08:02.440 --> 08:05.680
+So, let's look at some specifics,
+
+08:05.680 --> 08:08.280
+some questions you might need to answer
+
+08:08.280 --> 08:10.520
+in order to start your meetup group.
+
+08:10.520 --> 08:13.640
+Format of the meetup.
+
+08:13.640 --> 08:17.120
+What participants will do during the meetup?
+
+08:17.120 --> 08:20.920
+Let's see one of the options,
+
+08:20.920 --> 08:23.680
+this is one of my favorites.
+
+08:23.680 --> 08:26.640
+Keep it simple, a bit unstructured
+
+08:26.640 --> 08:28.320
+and have free flowing discussions.
+
+08:28.320 --> 08:30.640
+What does that mean?
+
+08:30.640 --> 08:32.720
+That basically means letting people
+
+08:32.720 --> 08:35.480
+ask questions, share new things they have found,
+
+08:35.480 --> 08:39.840
+let them ask doubts, let them ask for help.
+
+08:39.840 --> 08:44.200
+During this free flowing discussions,
+
+08:44.200 --> 08:46.920
+you can go through Emacs News as well,
+
+08:46.920 --> 08:49.760
+go through the topics, and you might find
+
+08:49.760 --> 08:52.600
+something interesting which you can talk about.
+
+08:52.600 --> 08:57.280
+Why I prefer discussions?
+
+08:57.280 --> 09:00.840
+Discussions basically give an opportunity
+
+09:00.840 --> 09:03.880
+to all the participants to participate.
+
+09:03.880 --> 09:06.640
+They get to talk about what they know
+
+09:06.640 --> 09:09.000
+rather than just having one way talk.
+
+09:09.000 --> 09:12.120
+They can basically participate
+
+09:12.120 --> 09:13.600
+by putting up their thoughts.
+
+09:13.600 --> 09:17.200
+Everyone gets to learn more
+
+09:17.200 --> 09:18.480
+as topics change.
+
+09:18.480 --> 09:21.120
+Usually during these free flowing discussions,
+
+09:21.120 --> 09:22.800
+topics keep changing
+
+09:22.800 --> 09:25.120
+and that's how you get to learn more.
+
+09:25.120 --> 09:29.000
+This also has less friction for the speakers.
+
+09:29.000 --> 00:09:31.651
+They won't have a burden that,
+
+00:09:31.651 --> 00:09:34.485
+"Okay, I have a talk in the meetup
+
+00:09:34.485 --> 00:09:35.600
+I need to prepare."
+
+09:35.600 --> 09:38.320
+That just increases friction for them
+
+09:38.320 --> 09:39.040
+to participate.
+
+09:39.040 --> 09:42.080
+If you are having a free flowing discussion,
+
+09:42.080 --> 00:09:44.685
+it's basically just a matter of saying,
+
+00:09:44.685 --> 00:09:47.200
+"Hey, maybe I would like to share my screen,
+
+09:47.200 --> 09:49.440
+and I'll talk about this particular thing."
+
+09:49.440 --> 09:53.560
+What about talks?
+
+09:53.560 --> 09:55.240
+Everyone loves talks, even I do.
+
+09:55.240 --> 09:58.880
+So, make sure you are also accommodating talks,
+
+09:58.880 --> 10:00.800
+allow people to submit talks,
+
+10:00.800 --> 10:03.960
+and have talks plus discussions.
+
+10:03.960 --> 10:07.560
+You can also host watch parties.
+
+10:07.560 --> 10:09.320
+You can pick up
+
+10:09.320 --> 10:11.160
+any of the talks from EmacsConf
+
+10:11.160 --> 10:14.240
+for anything which is out there,
+
+10:14.240 --> 10:15.840
+and you can watch it together,
+
+10:15.840 --> 10:17.240
+and you can have discussion
+
+10:17.240 --> 10:18.240
+about that particular talk.
+
+10:18.240 --> 10:23.000
+The next question
+
+10:23.000 --> 10:24.400
+you might need to answer
+
+10:24.400 --> 10:25.640
+is frequency of the meetup.
+
+10:25.640 --> 10:28.800
+How often the group is going to meet?
+
+10:28.800 --> 10:32.880
+One option is recurring meetups.
+
+10:32.880 --> 10:37.080
+So something like, you meet every month
+
+10:37.080 --> 10:39.000
+on a specific day time.
+
+10:39.000 --> 10:43.640
+Another option is one-off meetups.
+
+10:43.640 --> 10:46.240
+You can meet whenever you have
+
+10:46.240 --> 10:47.520
+some specific talk,
+
+10:47.520 --> 10:49.600
+some specific discussion topic.
+
+10:49.600 --> 10:52.680
+What you can do about the timing is,
+
+10:52.680 --> 10:54.680
+if you are targeting a specific region,
+
+10:54.680 --> 10:56.840
+make sure [people from] all the time zones
+
+10:56.840 --> 10:58.480
+from that region are able to attend.
+
+10:58.480 --> 11:04.480
+Now you have figured out everything
+
+11:04.480 --> 11:06.200
+and you are going to schedule the meetup.
+
+11:06.200 --> 11:08.280
+So, "Should I schedule and just wait?"
+
+11:08.280 --> 11:08.760
+No.
+
+11:08.760 --> 11:10.960
+Go ahead and spread the word about it.
+
+11:10.960 --> 11:12.560
+Let's see what we can do.
+
+11:12.560 --> 11:16.480
+You can post on social media about your event.
+
+11:16.480 --> 11:19.840
+Usually do it a week or two before,
+
+11:19.840 --> 11:24.200
+so that people can plan their other things.
+
+11:24.200 --> 11:27.640
+Share it on local GNU/Linux user groups.
+
+11:27.640 --> 11:30.360
+They might have IRC channels, mailing lists,
+
+11:30.360 --> 11:32.240
+so you should share your event there.
+
+11:32.240 --> 11:35.120
+Reddit seems to be a popular place as well.
+
+11:35.120 --> 11:37.520
+Many people follow and are there,
+
+11:37.520 --> 11:39.960
+so you can post about your event there as well.
+
+11:39.960 --> 11:43.640
+The next option is adding your event
+
+11:43.640 --> 11:45.000
+to Emacs calendar.
+
+11:45.000 --> 11:47.760
+You should get your event added
+
+11:47.760 --> 11:49.680
+to the EmacsWiki and the calendar,
+
+11:49.680 --> 11:51.080
+which we saw in the first part.
+
+11:51.080 --> 11:53.680
+And the instructions are given there.
+
+11:53.680 --> 11:55.640
+So, whenever you schedule a meetup,
+
+11:55.640 --> 11:58.000
+you should definitely add your event
+
+11:58.000 --> 11:58.920
+to those places.
+
+11:58.920 --> 12:02.800
+Next thing you should do is…,
+
+12:02.800 --> 12:04.240
+these are few points
+
+12:04.240 --> 12:07.720
+which you should do during the meetup.
+
+12:07.720 --> 12:10.760
+You should start with the introductions.
+
+12:10.760 --> 12:14.560
+Introductions serve as an icebreaker, usually.
+
+12:14.560 --> 12:18.240
+They make everyone speak about themselves,
+
+12:18.240 --> 12:20.200
+so that everyone knows each other
+
+12:20.200 --> 12:21.120
+a bit at least.
+
+12:21.120 --> 12:24.880
+Make sure it is possible for others
+
+12:24.880 --> 12:27.520
+to participate via chat.
+
+12:27.520 --> 12:30.920
+So, if there are some messages in the chat,
+
+12:30.920 --> 12:32.840
+make sure you relay those to others
+
+12:32.840 --> 12:35.680
+who are talking via audio/video.
+
+12:35.680 --> 12:39.440
+Share your website at the end,
+
+12:39.440 --> 12:41.720
+so that people know and they can follow it,
+
+12:41.720 --> 12:44.360
+and they can join the next event.
+
+12:44.360 --> 12:48.280
+The next is keeping track of time.
+
+12:48.280 --> 12:50.560
+Make sure you keep track of time.
+
+12:50.560 --> 12:52.720
+Have some time, let's say, 1 hour
+
+12:52.720 --> 12:54.760
+or slightly more than that
+
+12:54.760 --> 12:56.600
+and time-bound your event,
+
+12:56.600 --> 12:58.760
+so that we respect everyone's time
+
+12:58.760 --> 13:00.280
+and we conclude in time.
+
+13:00.280 --> 13:05.000
+Now your meetup was done,
+
+13:05.000 --> 13:06.960
+it was good, people attended.
+
+13:06.960 --> 13:07.800
+What's next?
+
+13:07.800 --> 13:10.600
+Publishing the recordings, I would say.
+
+13:10.600 --> 13:14.800
+You should consider publishing the talks
+
+13:14.800 --> 13:15.760
+or discussions both.
+
+13:15.760 --> 13:20.240
+The reason being people can revisit the things.
+
+13:20.240 --> 13:21.960
+Usually people go back
+
+13:21.960 --> 13:23.640
+and watch the recordings again.
+
+13:23.640 --> 13:26.200
+And those who were not able to attend,
+
+13:26.200 --> 13:27.640
+they can also participate
+
+13:27.640 --> 13:28.880
+by watching the recording.
+
+13:28.880 --> 13:32.040
+You can do even more.
+
+13:32.040 --> 13:34.640
+You can have captions for the videos,
+
+13:34.640 --> 13:37.280
+so that people can enjoy the talks
+
+13:37.280 --> 13:40.600
+way better than just audio video.
+
+13:40.600 --> 13:43.400
+And you can even have written summaries
+
+13:43.400 --> 00:13:44.451
+of the discussions,
+
+00:13:44.451 --> 00:13:45.960
+something like with links.
+
+13:45.960 --> 13:48.560
+Let's see some of the examples of summaries.
+
+13:48.560 --> 13:55.080
+This is one of the summaries
+
+13:55.080 --> 13:56.880
+for Austin meetup
+
+13:56.880 --> 13:59.200
+and this is written by someone
+
+13:59.200 --> 14:01.400
+who is participating during that meetup.
+
+14:01.400 --> 14:04.000
+You can see they have put up their thoughts,
+
+14:04.000 --> 14:05.520
+what they think about something
+
+14:05.520 --> 14:08.160
+they got to know in the event.
+
+14:08.160 --> 14:14.280
+Another example we can see is M-x Research.
+
+14:14.280 --> 14:16.800
+You can see they have put up
+
+14:16.800 --> 14:18.960
+all the discussion points.
+
+14:18.960 --> 14:21.320
+They even have action items from the meetup.
+
+14:21.320 --> 14:25.240
+One more example we can see is Emacs APAC.
+
+14:25.240 --> 14:28.280
+What I have done here is,
+
+14:28.280 --> 14:30.360
+I have mentioned the topic and links,
+
+14:30.360 --> 14:32.840
+who shared what.
+
+14:32.840 --> 14:36.720
+And that's about post meetup stuff.
+
+14:36.720 --> 14:38.280
+You can keep it simple.
+
+14:38.280 --> 14:40.960
+Just start with hosting your video recordings,
+
+14:40.960 --> 14:44.240
+and just start with basic links and details.
+
+14:44.240 --> 14:50.480
+So, are we ready to start a meetup?
+
+14:50.480 --> 14:52.880
+Definitely.
+
+14:52.880 --> 14:54.640
+Let's see some of the points
+
+14:54.640 --> 14:56.120
+or checklist, I would say,
+
+14:56.120 --> 14:57.640
+you should do before you start
+
+14:57.640 --> 14:58.200
+a meetup group.
+
+14:58.200 --> 14:59.800
+What are the next steps?
+
+14:59.800 --> 15:04.440
+Have a co-organizer.
+
+15:04.440 --> 15:07.960
+So, have at least one co-organizer or person
+
+15:07.960 --> 15:09.640
+to talk to during the meetup,
+
+15:09.640 --> 15:12.600
+so that even if no one shows up
+
+15:12.600 --> 15:14.320
+you will have someone to talk to
+
+15:14.320 --> 15:16.240
+and you both can discuss
+
+15:16.240 --> 15:20.160
+about the topic you decided to.
+
+15:20.160 --> 15:22.200
+If your friend or the person
+
+15:22.200 --> 15:23.760
+you have reached out to
+
+15:23.760 --> 15:26.760
+are hesitant to become a "co-organizer",
+
+15:26.760 --> 15:28.960
+because that feels like responsibility,
+
+15:28.960 --> 15:29.720
+it's fine.
+
+15:29.720 --> 15:32.360
+You can ask them to just come with you
+
+15:32.360 --> 15:36.480
+and have the discussion during the event.
+
+15:36.480 --> 15:38.720
+And like Andrea explained
+
+15:38.720 --> 15:40.200
+in his talk about 'buddy',
+
+15:40.200 --> 15:43.520
+buddy is someone who is helping you
+
+15:43.520 --> 15:45.000
+with your Emacs journey.
+
+15:45.000 --> 15:48.800
+Buddies and their mentees
+
+15:48.800 --> 15:52.280
+can make their meeting public,
+
+15:52.280 --> 15:56.040
+and that can be a good way to start
+
+15:56.040 --> 15:57.240
+or spin-off a meetup.
+
+15:57.240 --> 16:01.920
+Have a website for your meetup.
+
+16:01.920 --> 16:04.440
+You should definitely have a website
+
+16:04.440 --> 16:05.920
+where people can go and read
+
+16:05.920 --> 16:08.640
+about your event or the group.
+
+16:08.640 --> 16:10.280
+Keep it simple.
+
+16:10.280 --> 16:13.440
+Have RSS feed, so that people can subscribe.
+
+16:13.440 --> 16:15.520
+And whenever you have new talks,
+
+16:15.520 --> 16:17.680
+make sure you add those talks
+
+16:17.680 --> 16:18.880
+to the announcement pages.
+
+16:18.880 --> 16:23.960
+Let's quickly see some of the example websites.
+
+16:23.960 --> 16:32.480
+The first one here is again
+
+16:32.480 --> 16:34.160
+Emacs Asia-Pacific event.
+
+16:34.160 --> 16:36.880
+You can see we have details,
+
+16:36.880 --> 16:41.080
+what is the timing, how to submit a talk,
+
+16:41.080 --> 16:42.000
+how to attend.
+
+16:42.000 --> 16:45.720
+Next example is Emacs Berlin.
+
+16:45.720 --> 16:47.480
+So, you can see they have mentioned
+
+16:47.480 --> 16:48.680
+what is the next event,
+
+16:48.680 --> 16:51.440
+which were the previous events,
+
+16:51.440 --> 16:53.840
+how to participate, how to stay updated.
+
+16:53.840 --> 16:57.040
+And similarly, there is M-x Research as well.
+
+16:57.040 --> 16:59.080
+They have mentioned what are the events,
+
+16:59.080 --> 17:00.600
+what are the upcoming events and all.
+
+17:00.600 --> 17:09.280
+You can just get started
+
+17:09.280 --> 17:11.160
+by taking any of the websites,
+
+17:11.160 --> 17:13.040
+and just modify it to your liking.
+
+17:13.040 --> 17:14.200
+That's totally fine.
+
+17:14.200 --> 17:17.640
+The next thing you will need
+
+17:17.640 --> 17:19.080
+is a video conferencing tool.
+
+17:19.080 --> 17:23.360
+It should support video, screen share, chat.
+
+17:23.360 --> 17:25.120
+These are the few of
+
+17:25.120 --> 17:27.680
+the free software options.
+
+17:27.680 --> 17:29.240
+One is BigBlueButton
+
+17:29.240 --> 17:31.000
+and another is Jitsi Meet.
+
+17:31.000 --> 17:33.040
+You can request for an account
+
+17:33.040 --> 17:36.840
+on the given instance to EmacsConf organizers
+
+17:36.840 --> 17:38.280
+on this mailing list,
+
+17:38.280 --> 17:40.400
+or you can stick to any
+
+17:40.400 --> 17:42.280
+of the Jitsi Meet instances.
+
+17:42.280 --> 17:45.960
+Communication media.
+
+17:45.960 --> 17:47.280
+You should have at least some way
+
+17:47.280 --> 17:51.120
+for people to interact post meetup
+
+17:51.120 --> 17:53.000
+or before the meetup.
+
+17:53.000 --> 00:17:57.385
+You can use any of the existing IRC channels, #emacsconf,
+
+00:17:57.386 --> 00:17:59.880
+or maybe you can use the existing
+
+17:59.880 --> 18:01.720
+GNU/Linux user groups lists.
+
+18:01.720 --> 18:07.600
+I would recommend you to read or watch
+
+18:07.600 --> 18:11.000
+"Starting an Emacs meetup" by Harry Schwartz.
+
+18:11.000 --> 18:13.080
+They have mentioned details
+
+18:13.080 --> 18:14.840
+about in-person meetups,
+
+18:14.840 --> 18:17.720
+but there are many important points
+
+18:17.720 --> 18:20.080
+to consider in that post
+
+18:20.080 --> 18:21.320
+as well as in the recording.
+
+18:21.320 --> 18:23.200
+So, go ahead and definitely watch
+
+18:23.200 --> 18:24.840
+before you start your meetup.
+
+18:24.840 --> 18:29.560
+If you need any help with
+
+18:29.560 --> 18:32.520
+BigBlueButton account, hosting,
+
+18:32.520 --> 18:35.280
+or captioning the talk recordings
+
+18:35.280 --> 18:37.160
+for very specific or good talks,
+
+18:37.160 --> 18:38.880
+don't hesitate to reach out to
+
+18:38.880 --> 18:40.480
+EmacsConf organizers.
+
+18:40.480 --> 18:42.320
+There are many volunteers
+
+18:42.320 --> 18:43.560
+subscribed to that list,
+
+18:43.560 --> 18:45.920
+so you will definitely find
+
+18:45.920 --> 18:50.080
+someone to help you.
+
+18:50.080 --> 18:50.760
+I had one idea.
+
+18:50.760 --> 18:53.240
+If you are one of the organizers,
+
+18:53.240 --> 18:55.400
+or if you plan to start a meetup,
+
+18:55.400 --> 18:57.360
+I was thinking if
+
+18:57.360 --> 18:59.280
+we can have a common platform
+
+18:59.280 --> 19:00.400
+for all the organizers
+
+19:00.400 --> 19:01.240
+to discuss what they are doing,
+
+19:01.240 --> 19:04.000
+what they are experimenting.
+
+19:04.000 --> 19:06.920
+If you are interested,
+
+19:06.920 --> 19:10.400
+drop me an email at this email address.
+
+19:10.400 --> 19:13.200
+If I get somewhere with this idea,
+
+19:13.200 --> 19:15.440
+I will definitely involve everyone
+
+19:15.440 --> 19:16.280
+who is interested.
+
+19:16.280 --> 19:21.240
+With that, we come to the end of my talk.
+
+19:21.240 --> 19:23.440
+I would like to thank Sacha and Leo
+
+19:23.440 --> 19:26.560
+for their inputs while I was creating this talk,
+
+19:26.560 --> 19:30.040
+and thank you for joining.
+
+19:30.040 --> 19:35.280
+Now it is time for the questions.
diff --git a/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt
new file mode 100644
index 00000000..8f23ceb4
--- /dev/null
+++ b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt
@@ -0,0 +1,1322 @@
+WEBVTT Kind: captions; Language: es; Captioned by quiliro
+
+00:00.000 --> 00:09.880
+Hola a todos y todas. Bienvenidos y bienvenidas a mi conferencia.
+
+00:09.880 --> 00:11.160
+Espero que todos y todas hayan disfrutado hasta ahora
+
+00:11.160 --> 00:14.680
+de EmacsConf, como lo hago yo.
+
+00:14.680 --> 00:15.960
+Pero podrían preguntarse,
+
+00:15.960 --> 00:18.480
+"¿Cómo me encuentro con usuarios y usuarias de Emacs
+
+00:18.480 --> 00:21.560
+luego de la conferencia?"
+
+00:21.560 --> 00:23.760
+¿Qué pasaría si les digo que hay una manera?
+
+00:23.760 --> 00:26.680
+La respuesta son los encuentros locales.
+
+00:26.680 --> 00:29.840
+Estos son grupos locales que organizan eventos
+
+00:29.840 --> 00:34.800
+Se encuentran con cierta frecuencia.
+
+00:34.800 --> 00:36.840
+Eso es de lo que vamos a hablar hoy:
+
+00:36.840 --> 00:39.480
+asistir a encuentros de Emacs y también organizarlos.
+
+00:39.480 --> 00:41.600
+En otras palabras,
+
+00:41.600 --> 00:43.880
+disfrutar de tu peregrinaje por Emacs con más gente!
+
+00:43.880 --> 00:45.880
+Soy Bhavin. Vengo de India,
+
+00:45.880 --> 00:47.280
+y he organizado
+
+00:47.280 --> 00:49.200
+el encuentro Emacs Asia Pacific
+
+00:49.200 --> 00:52.280
+desde hace casi 2 años.
+
+00:52.280 --> 00:54.600
+Hablaré acerca de los encuentros en línea
+
+00:54.600 --> 00:57.440
+la mayoría del tiempo.
+
+00:57.440 --> 00:00:59.251
+La belleza de los encuentros en línea es
+
+00:00:59.251 --> 00:01:01.480
+que puedes unirte a cualquier encuentro,
+
+01:01.480 --> 01:03.360
+si tu tiempo lo permite,
+
+01:03.360 --> 01:05.080
+sin importar la zona horaria.
+
+01:05.080 --> 01:07.080
+... y no existen barreras.
+
+01:07.080 --> 01:10.120
+Así que comencemos.
+
+01:10.120 --> 01:14.120
+Veamos qué aspecto tienen los encuentros.
+
+01:14.120 --> 01:18.040
+Básicalmente, veremos una parte
+
+01:18.040 --> 01:25.640
+de un encuentro Emacs APAC.
+
+01:25.640 --> 01:29.200
+[Ihor]: Existe algo llamado org-indent-mode.
+
+01:29.200 --> 01:33.040
+[Ihor]: Es como org-adapt-indentation
+
+01:33.040 --> 01:34.720
+[Ihor]: que es como la indentación eléctrica.
+
+01:34.720 --> 01:37.480
+[Ihor]: Cuando presionas enter, [el texto] será indentado.
+
+01:37.480 --> 01:41.520
+[Ihor]: Existe org-indent-mode, que no requiere
+
+01:41.520 --> 01:44.560
+[Ihor]: que insertes las indentaciones físicamente
+
+01:44.560 --> 01:45.600
+[Ihor]: en el archivo.
+
+01:45.600 --> 01:54.320
+[Ihor]: Hará que las cosas parezcan indentadas.
+
+01:54.320 --> 01:55.880
+¿Este?
+
+01:55.880 --> 01:56.400
+
+[Ihor]: Sí.
+
+01:56.400 --> 01:57.200
+org-adapt-indentation
+
+01:57.200 --> 02:03.120
+De acuerdo.
+
+02:03.120 --> 02:04.800
+Parece interesante, ¿verdad?
+
+02:04.800 --> 02:08.320
+Así que entremos en detalles.
+
+02:08.320 --> 02:09.520
+Podrías tener una pregunta:
+
+02:09.520 --> 02:11.400
+"¿Por qué debo asistir a encuentros?"
+
+02:11.400 --> 02:12.240
+Esa es una buena pregunta.
+
+02:12.240 --> 02:14.640
+Siempre debieras preguntar "¿por qué".
+
+02:14.640 --> 02:19.160
+Es una oportunidad de aprender juntos y juntas.
+
+02:19.160 --> 02:21.640
+Tú basicamente te encuentras con gente que piensa igual,
+
+02:21.640 --> 02:23.560
+usuarios y usuarias de Emacs que piensan igual.
+
+02:23.560 --> 02:27.400
+... y siempre puedes divertirte, ¿verdad?
+
+02:27.400 --> 02:29.160
+Podrías tener una preocupación:
+
+02:29.160 --> 02:31.040
+"Soy un novato o una novata."
+
+02:31.040 --> 02:34.080
+Yo diría que hay una gran oportunidad para tí.
+
+02:34.080 --> 02:36.640
+Puedes descubrir más cosas.
+
+02:36.640 --> 02:38.800
+Puedes conseguir ayuda, si encuentras
+
+02:38.800 --> 02:41.120
+dificultades, errores.
+
+02:41.120 --> 02:42.920
+Y siempre recuerda que estará bien
+
+02:42.920 --> 02:44.280
+si no entiendes todo
+
+02:44.280 --> 02:45.160
+en las conversaciones.
+
+02:45.160 --> 02:49.800
+Habrá momentos cuando todo sea...
+
+02:49.800 --> 02:51.960
+que otros temas no sean comprensibles;
+
+02:51.960 --> 02:56.800
+lo cual es totalmente comprensible.
+
+02:56.800 --> 02:58.760
+"Soy un usuario experimentado o una usuaria experimentada."
+
+02:58.760 --> 03:00.240
+Diría que esta situación es aún mejor
+
+03:00.240 --> 03:01.720
+porque puedes ayudar a otros y otras
+
+03:01.720 --> 03:03.680
+durante un encuentro.
+
+03:03.680 --> 03:06.440
+Y usualmente, en Emacs o en general,
+
+03:06.440 --> 03:08.200
+siempre hay algo nuevo que aprender.
+
+03:08.200 --> 03:10.160
+Hay abundancia de paquetes.
+
+03:10.160 --> 03:11.080
+Podría haber algo
+
+03:11.080 --> 03:12.440
+que nunca haz probado.
+
+03:12.440 --> 03:13.760
+Y siempre habrá
+
+03:13.760 --> 03:16.160
+diferentes flujos de trabajo para usar [un paquete].
+
+03:16.160 --> 03:23.520
+Así que ahora te preguntarás: ¿cómo me vuelvo parte de un encuentro? ¿Verdad?
+
+03:23.520 --> 03:26.920
+"¿Cómo me vuelvo parte del grupo de un encuentro?"
+
+03:26.920 --> 03:29.000
+El primer paso que podrías emprender
+
+03:29.000 --> 03:30.920
+es buscar un encuentro.
+
+03:30.920 --> 03:32.200
+Existe una página
+
+03:32.200 --> 03:35.120
+del EmacsWiki https://www.emacswiki.org/emacs/Usergroups
+
+03:35.120 --> 03:37.000
+mantenida actualmente
+
+03:37.000 --> 03:38.680
+por Leo y por Sacha.
+
+03:38.680 --> 03:46.600
+Así que, veamos cómo se ve esa página.
+
+03:46.600 --> 03:48.040
+Como puedes ver, esta página se refiere
+
+03:48.040 --> 03:51.160
+a todos los eventos que vendrán.
+
+03:51.160 --> 00:04:05.485
+Además, tiene una lista de todos los grupos de encuentros.
+
+00:04:05.485 --> 00:04:10.000
+Así que, puedes encontrar todos los grupos ahí.
+
+04:10.000 --> 04:11.760
+En cuanto encuentres uno,
+
+04:11.760 --> 04:13.480
+debes unirte a ellos, ¿verdad?
+
+04:13.480 --> 04:17.880
+Cómo unirte difiere de grupo a grupo
+
+04:17.880 --> 04:20.520
+pero usualmente encontrarás una forma de suscribirte
+
+04:20.520 --> 04:23.160
+a su lista de correo o a sus noticias RSS,
+
+04:23.160 --> 04:24.520
+únete a su canal de IRC.
+
+04:24.520 --> 04:27.200
+Podrían tener cuentas en diferentes plataformas
+
+04:27.200 --> 04:29.960
+como Mobilizon o meetup.com [cuidado de que contengan Javascript privativo].
+
+04:29.960 --> 04:31.400
+Puedes ir allá y unirte,
+
+04:31.400 --> 04:32.320
+para que te notifiquen
+
+04:32.320 --> 04:36.840
+cuando hay un evento nuevo.
+
+04:36.840 --> 04:39.120
+Ahora, al ver esa lista
+
+04:39.120 --> 04:42.080
+puedes decir, "Hay demasiados eventos
+
+04:42.080 --> 04:42.920
+de mi interés."
+
+04:42.920 --> 04:47.000
+No te preocupes. Hay una solución.
+
+04:47.000 --> 04:49.280
+Existe un calendario Emacs.
+
+04:49.280 --> 04:51.960
+Puedes suscribirte a este calendario.
+
+04:51.960 --> 04:55.120
+Veamos qué eventos
+
+04:55.120 --> 04:56.800
+hay en este calendario en particular.
+
+04:56.800 --> 05:00.120
+Este mes hay Emacs Berlin para comenzar
+
+05:00.120 --> 05:02.840
+y luego hay EmacsConf.
+
+05:02.840 --> 05:06.360
+Luego hay Emacs APAC, que también está ahí.
+
+05:06.360 --> 05:15.520
+Veamos ... existe un sitio web acompañante
+
+05:15.520 --> 05:17.840
+para este calendario también.
+
+05:17.840 --> 05:19.240
+Vayamos a ese sitio web.
+
+05:19.240 --> 05:24.600
+Verás todas las opciones, como importarlo a tu software.
+
+05:24.600 --> 05:26.240
+Hay un archivo ICS.
+
+05:26.240 --> 05:28.120
+Hay diferentes zonas horarias,
+
+05:28.120 --> 05:29.200
+archivos Org mode.
+
+05:29.200 --> 05:33.200
+Puedes simplemente ir allá y suscribirte.
+
+05:33.200 --> 05:38.520
+"¿Cómo lo aprovecho al máximo?
+
+05:38.520 --> 05:40.640
+Si asisto a un encuentro,
+
+05:40.640 --> 05:42.120
+¿cómo aprovecho al máximo?"
+
+05:42.120 --> 05:44.480
+Yo diría que nunca dudes
+
+05:44.480 --> 05:45.520
+en hacer preguntas.
+
+05:45.520 --> 05:46.600
+Si hay algo nuevo,
+
+05:46.600 --> 05:47.840
+algo que no entiendas,
+
+05:47.840 --> 05:49.240
+solamente haz las preguntas.
+
+05:49.240 --> 05:51.320
+Pide ayuda, si te encuentras atascado con algún problema.
+
+05:51.320 --> 05:54.040
+También existirán asuntos nuevos.
+
+05:54.040 --> 05:56.120
+Así que asegúrate de tomar nota
+
+05:56.120 --> 05:58.400
+y podrás intentar probarlos luego.
+
+05:58.400 --> 06:04.600
+Si es posible, ten listo un micrófono o cámara web encendidas.
+
+06:04.600 --> 06:07.120
+De esa manera podrás conectarte con otres de manera rápida.
+
+06:07.120 --> 06:10.560
+Si esa no es una opción por alguna razón,
+
+06:10.560 --> 06:12.520
+está bien. Siempre puedes usar el chat
+
+06:12.520 --> 06:13.720
+e interactuar con todas y con todos.
+
+06:13.720 --> 06:18.560
+Así que esa no es una razón para no asistir.
+
+06:18.560 --> 06:20.360
+Anímate y asiste,
+
+06:20.360 --> 06:22.640
+aunque solamente tengas el chat como única opción
+
+06:22.640 --> 06:23.720
+para interactuar con otras y otros.
+
+06:23.720 --> 06:27.480
+"Espera. Aún tengo preguntas."
+
+06:27.480 --> 06:28.520
+Seguro.
+
+06:28.520 --> 06:30.360
+Si tienes más preguntas,
+
+06:30.360 --> 06:31.640
+plantéalas.
+
+06:31.640 --> 06:34.440
+Llegaré a ellas al final.
+
+06:34.440 --> 06:42.840
+Ahora sabemos cómo asistir,
+
+06:42.840 --> 00:06:44.651
+cuáles son las cosas que debes hacer
+
+00:06:44.651 --> 00:06:45.560
+si deseas asistir.
+
+06:45.560 --> 00:06:48.418
+"¿Qué pasa si deseo iniciar mi propio grupo de encuentro?"
+
+00:06:48.418 --> 00:06:51.520
+porque no hay un grupo regional
+
+06:51.520 --> 06:53.560
+o existe un tema muy específico
+
+06:53.560 --> 06:55.560
+del que quieres tener un grupo particular.
+
+06:55.560 --> 07:01.800
+De nuevo, "¿Por qué debería iniciar un grupo de encuentro?"
+
+07:01.800 --> 07:05.080
+Es una manera, diría yo, para tener reciprocidad
+
+07:05.080 --> 07:08.880
+con la comunidad, mediante la creación de una plataforma
+
+07:08.880 --> 07:10.560
+para que la gente interactúe.
+
+07:10.560 --> 00:07:15.440
+Ofreces a los conferencistas una plataforma.
+
+07:15.440 --> 07:17.520
+También le ofreces una platforma a los asistentes.
+
+07:17.520 --> 07:19.680
+Y, obviamente, para divertirse junto con otros.
+
+07:19.680 --> 07:25.640
+Hay preguntas comunes
+
+07:25.640 --> 07:26.880
+que pueden presentarse.
+
+07:26.880 --> 00:07:28.051
+Algo como:
+
+00:07:28.051 --> 00:07:29.720
+"¿Cuánto esfuerzo se requiere?"
+
+07:29.720 --> 07:32.600
+Personalmente, yo no debo poner
+
+07:32.600 --> 07:34.520
+más de dos horas por mes.
+
+07:34.520 --> 07:36.760
+Eso incluye el tiempo
+
+07:36.760 --> 07:37.880
+para atender al encuentro.
+
+07:37.880 --> 07:42.600
+"¿Qué pasa si soy novato en Emacs?"
+
+07:42.600 --> 07:43.600
+Eso no importa.
+
+07:43.600 --> 07:45.920
+No necesitas saber Emacs.
+
+07:45.920 --> 07:47.200
+No necesitas ser un experto
+
+07:47.200 --> 07:48.400
+par iniciar un groupo de encuentro.
+
+07:48.400 --> 07:49.600
+Está muy bien.
+
+07:49.600 --> 07:51.480
+Tendrás más gente que se una
+
+07:51.480 --> 07:54.120
+con diferente experiencia.
+
+07:54.120 --> 07:57.160
+Es totalmente aceptable ser un novato
+
+07:57.160 --> 07:58.480
+en Emacs para iniciar un encuentro.
+
+07:58.480 --> 08:02.440
+"Ahora, ¿cómo lo hago?"
+
+08:02.440 --> 08:05.680
+Así que, veamos algunos detalles,
+
+08:05.680 --> 08:08.280
+algunas preguntas que podrías necesitar contestar
+
+08:08.280 --> 08:10.520
+para iniciar tu grupo de encuentro.
+
+08:10.520 --> 08:13.640
+Formato del encuentro.
+
+08:13.640 --> 08:17.120
+¿Qué harán los participantes durante el encuentro?
+
+08:17.120 --> 08:20.920
+Veamos una de las opciones.
+
+08:20.920 --> 08:23.680
+Esta es una de mis favoritas.
+
+08:23.680 --> 08:26.640
+Mantenlo sencillo, un poco desestructurado
+
+08:26.640 --> 08:28.320
+y asegúrate de que las conversaciones fluyan libremente.
+
+08:28.320 --> 08:30.640
+¿Qué sígnifica eso?
+
+08:30.640 --> 08:32.720
+Basicamente significa dejar a las personas
+
+08:32.720 --> 08:35.480
+preguntar, compartir nuevas cosas que han encontrado.
+
+08:35.480 --> 08:39.840
+Permíteles preguntar sobre sus dudas. Premíteles pedir ayuda.
+
+08:39.840 --> 08:44.200
+Durante estas conversaciones de libre flujo,
+
+08:44.200 --> 08:46.920
+puedes también cubrir Noticas de Emacs.
+
+08:46.920 --> 08:49.760
+Revisa los temas y podrías encontrar
+
+08:49.760 --> 08:52.600
+algo interesante de lo que puedas hablar.
+
+08:52.600 --> 08:57.280
+¿Por qué prefiero las conversaciones?
+
+08:57.280 --> 09:00.840
+Básicamente, las conversaciones brindan una oportunidad
+
+09:00.840 --> 09:03.880
+para todos los asistentes a participar.
+
+09:03.880 --> 09:06.640
+Logran hablar de lo que conocen,
+
+09:06.640 --> 09:09.000
+en lugar de solamente tener un monólogo.
+
+09:09.000 --> 09:12.120
+Pueden participar, básicamente
+
+09:12.120 --> 09:13.600
+al exponer sus pensamientos.
+
+09:13.600 --> 09:17.200
+Todos consiguen aprender más
+
+09:17.200 --> 09:18.480
+mientras cambian los temas.
+
+09:18.480 --> 09:21.120
+Usualmente durante estas conversaciones de libre flujo,
+
+09:21.120 --> 09:22.800
+los temas siguen cambiando
+
+09:22.800 --> 09:25.120
+y esa es la manera en que consigues aprender más.
+
+09:25.120 --> 09:29.000
+Esto también ofrece menos fricción para les conferencistas.
+
+09:29.000 --> 00:09:31.651
+No sentirán el peso de:
+
+00:09:31.651 --> 00:09:34.485
+"De acuerdo, tengo que dar una conferencia en este encuentro
+
+00:09:34.485 --> 00:09:35.600
+que requiero preparar."
+
+09:35.600 --> 09:38.320
+Eso solamente incrementa la fricción para que ellos
+
+09:38.320 --> 09:39.040
+participen.
+
+09:39.040 --> 09:42.080
+Si logras una conversación de libre flujo,
+
+09:42.080 --> 00:09:44.685
+solamente es asunto de decir:
+
+00:09:44.685 --> 00:09:47.200
+"Hey, Quizá quiera compartir mi pantalla
+
+09:47.200 --> 09:49.440
+y hablaré de este tema en particular."
+
+09:49.440 --> 09:53.560
+¿Qué hay sobre las conferencias?
+
+09:53.560 --> 09:55.240
+Todos adoran las conferencias, incluso yo.
+
+09:55.240 --> 09:58.880
+Así que asegúrate de acomodar las conferencias también.
+
+09:58.880 --> 10:00.800
+Permite a la gente presentar sus conferencias
+
+10:00.800 --> 10:03.960
+y sostén conferencias y conversaciones.
+
+10:03.960 --> 10:07.560
+También puedes sostener proyecciones.
+
+10:07.560 --> 10:09.320
+Puedes tomar
+
+10:09.320 --> 10:11.160
+cualquiera de las conferencias de EmacsConf,
+
+10:11.160 --> 10:14.240
+de lo que quiera que se encuentre ahí,
+
+10:14.240 --> 10:15.840
+y puedes mirarla juntos.
+
+10:15.840 --> 10:17.240
+Luego pueden tener una conversación
+
+10:17.240 --> 10:18.240
+acerca de esa conferencia en particular.
+
+10:18.240 --> 10:23.000
+La siguiente pregunta
+
+10:23.000 --> 10:24.400
+que podrías necesitar contestar
+
+10:24.400 --> 10:25.640
+es acerca de la frecuencia de los encuentros.
+
+10:25.640 --> 10:28.800
+¿Qué tan a menudo se reunirá el grupo?
+
+10:28.800 --> 10:32.880
+Una opción son los encuentros recurrentes.
+
+10:32.880 --> 10:37.080
+Así que algo como, reunirse cada mes
+
+10:37.080 --> 10:39.000
+un día específico a cierta hora.
+
+10:39.000 --> 10:43.640
+Otra opción son los encuentros de una sola ocasión.
+
+10:43.640 --> 10:46.240
+Puedes reunirte cuando sea
+
+10:46.240 --> 10:47.520
+que ofrezcas una conferencia en particular,
+
+10:47.520 --> 10:49.600
+algún tema específico de conversación.
+
+10:49.600 --> 10:52.680
+Lo que harías sobre los usos horarios es,
+
+10:52.680 --> 10:54.680
+si apuntas a una región específica,
+
+10:54.680 --> 10:56.840
+asegúrate que todos puedan asistir
+
+10:56.840 --> 10:58.480
+desde los distintos usos horarios de esa región.
+
+10:58.480 --> 11:04.480
+Ahora haz descifrado todo
+
+11:04.480 --> 11:06.200
+y que vas a agendar el encuentro.
+
+11:06.200 --> 11:08.280
+Así que "¿Debiría agendar y solamente esperar?"
+
+11:08.280 --> 11:08.760
+No.
+
+11:08.760 --> 11:10.960
+Difunde la noticia.
+
+11:10.960 --> 11:12.560
+Veamos qué podemos hacer.
+
+11:12.560 --> 11:16.480
+Puedes publicar en redes sociales el evento.
+
+11:16.480 --> 11:19.840
+Usualmente se debe hacer con una o dos semanas de antelación
+
+11:19.840 --> 11:24.200
+para que la gente pueda planificar sus otros asuntos.
+
+11:24.200 --> 11:27.640
+Compártelo en los grupos locales de usuarios de GNU con linux.
+
+11:27.640 --> 11:30.360
+Podrían tener canales de IRC, listas de correo.
+
+11:30.360 --> 11:32.240
+Así que debes compartir [la convocatoria] a tu evento ahí.
+
+11:32.240 --> 11:35.120
+Reddit también parece ser un lugar popular para anunciar.
+
+11:35.120 --> 11:37.520
+Hay mucha gente y seguidores que están ahí.
+
+11:37.520 --> 11:39.960
+Así que puedes anunciar sobre tu evento ahí tambien.
+
+11:39.960 --> 11:43.640
+La siguiente opción es agregar tu evento
+
+11:43.640 --> 11:45.000
+al calendario Emacs.
+
+11:45.000 --> 11:47.760
+Debes conseguir que tu evento se añada
+
+11:47.760 --> 11:49.680
+a EmacsWiki y al calendario,
+
+11:49.680 --> 11:51.080
+que vimos en la primera parte [de esta conferencia].
+
+11:51.080 --> 11:53.680
+Y las instrucciones se encuentran ahí.
+
+11:53.680 --> 11:55.640
+Así que, cuando sea que agendes un encuentro,
+
+11:55.640 --> 11:58.000
+debes definitivamente añadir tu evento
+
+11:58.000 --> 11:58.920
+a aquellos lugares.
+
+11:58.920 --> 12:02.800
+Lo siguiente que debes hacer es ...
+
+12:02.800 --> 12:04.240
+estos son algunos puntos
+
+12:04.240 --> 12:07.720
+que debes realizar durante el encuentro.
+
+12:07.720 --> 12:10.760
+Debes iniciar con las introducciones.
+
+12:10.760 --> 12:14.560
+Las introducciones sirven para romper el hielo, usualmente.
+
+12:14.560 --> 12:18.240
+Hacen que todos hablen acerca de sí mismos
+
+12:18.240 --> 12:20.200
+para que todos se conozcan
+
+12:20.200 --> 12:21.120
+al menos un poco.
+
+12:21.120 --> 12:24.880
+Haz posible que otros
+
+12:24.880 --> 12:27.520
+participen via chat.
+
+12:27.520 --> 12:30.920
+De tal manera que, si hay mensajes en el chat,
+
+12:30.920 --> 12:32.840
+asegúrate de relegarlos
+
+12:32.840 --> 12:35.680
+a quienes están hablando via audio/video.
+
+12:35.680 --> 12:39.440
+Comparte tu sitio web al final
+
+12:39.440 --> 12:41.720
+para que las personas lo sepan y lo sigan
+
+12:41.720 --> 12:44.360
+y para que puedan venir al siguiente evento.
+
+12:44.360 --> 12:48.280
+Lo siguiente es controlar el tiempo.
+
+12:48.280 --> 12:50.560
+Asegúrate de controlar el tiempo.
+
+12:50.560 --> 12:52.720
+Reserva un tiempo, puede ser una hora,
+
+12:52.720 --> 12:54.760
+o algo más que eso,
+
+12:54.760 --> 12:56.600
+y fija ese horario para tu evento
+
+12:56.600 --> 12:58.760
+con el fin de respetar el tiempo de todos
+
+12:58.760 --> 13:00.280
+y que se termine a tiempo.
+
+13:00.280 --> 13:05.000
+Ahora tu encuentro termina,
+
+13:05.000 --> 13:06.960
+fue bueno y la gente vino.
+
+13:06.960 --> 13:07.800
+¿Qué sigue?
+
+13:07.800 --> 13:10.600
+Publicar las grabaciones, diría yo.
+
+13:10.600 --> 13:14.800
+Deberías considerar publicar las conferencias
+
+13:14.800 --> 13:15.760
+o las conversaciones, o ambas.
+
+13:15.760 --> 13:20.240
+La razón es que las personas pueden revisitarlas.
+
+13:20.240 --> 13:21.960
+Usualmente, la gente vuelve
+
+13:21.960 --> 13:23.640
+y mira las grabaciones nuevamente.
+
+13:23.640 --> 13:26.200
+Y aquellos que no pudieron asistir,
+
+13:26.200 --> 13:27.640
+ellos también pueden participar
+
+13:27.640 --> 13:28.880
+al observar la grabación.
+
+13:28.880 --> 13:32.040
+Puedes hacer aún más.
+
+13:32.040 --> 13:34.640
+Puedes tener subtítulos para los vídeos
+
+13:34.640 --> 13:37.280
+para que la gente pueda disfrutar de las conferencias
+
+13:37.280 --> 13:40.600
+de mejor manera que solamente el audio y el vídeo.
+
+13:40.600 --> 13:43.400
+E inclusive tú puedes tener resúmenes escritos
+
+13:43.400 --> 00:13:44.451
+de las conversaciones,
+
+00:13:44.451 --> 00:13:45.960
+o algo parecido con los hipervínculos.
+
+13:45.960 --> 13:48.560
+Veamos algunos de los ejemplos con los resúmenes.
+
+13:48.560 --> 13:55.080
+Este es uno de los resúmenes
+
+13:55.080 --> 13:56.880
+del encuentro en Austin [Texas, EEUUA]
+
+13:56.880 --> 13:59.200
+y fue escrito por alguien
+
+13:59.200 --> 14:01.400
+quien participó durante el encuentro.
+
+14:01.400 --> 14:04.000
+Puedes ver que publicó sus pensamientos,
+
+14:04.000 --> 14:05.520
+lo que pensaban sobre un asunto
+
+14:05.520 --> 14:08.160
+que aprendieron en el evento.
+
+14:08.160 --> 14:14.280
+Otro ejemplo que podemos ver es M-x investigar.
+
+14:14.280 --> 14:16.800
+Puedes ver lo que han publicado ...
+
+14:16.800 --> 14:18.960
+todos los puntos de la conversación.
+
+14:18.960 --> 14:21.320
+Incluso han recopilado puntos de acción mediante el encuentro.
+
+14:21.320 --> 14:25.240
+Un ejemplo más que podemos ver es Emacs APAC.
+
+14:25.240 --> 14:28.280
+Lo que he hecho es,
+
+14:28.280 --> 14:30.360
+yo he mencionado el tema y los hipervínculos ...
+
+14:30.360 --> 14:32.840
+quién compartió qué.
+
+14:32.840 --> 14:36.720
+Y eso es lo que hay sobre asuntos para después del evento.
+
+14:36.720 --> 14:38.280
+Puedes mantenerlo sencillo.
+
+14:38.280 --> 14:40.960
+Solamente inicia con alojar las grabaciones de vídeo
+
+14:40.960 --> 14:44.240
+y solamente inicia con los hipervínculos básicas y con los detalles.
+
+14:44.240 --> 14:50.480
+Así que, ¿estamos listos para iniciar un encuentro?
+
+14:50.480 --> 14:52.880
+¡Definitivamente!
+
+14:52.880 --> 14:54.640
+Repasemos algunos de los puntos
+
+14:54.640 --> 14:56.120
+o hagamos una lista, yo diría,
+
+14:56.120 --> 14:57.640
+sobre lo que debes hacer antes de iniciar
+
+14:57.640 --> 14:58.200
+un grupo de encuentro.
+
+14:58.200 --> 14:59.800
+¿Cuáles son los siguientes pasos?
+
+14:59.800 --> 15:04.440
+Consigue un co-organizador.
+
+15:04.440 --> 15:07.960
+Entonces, ten al menos un co-organizador
+
+15:07.960 --> 15:09.640
+o persona con quien hablar durante el encuentro
+
+15:09.640 --> 15:12.600
+para que, aunque nadie más venga,
+
+15:12.600 --> 15:14.320
+tengas con quien hablar
+
+15:14.320 --> 15:16.240
+y ambos pueden conversar
+
+15:16.240 --> 15:20.160
+sobre el tema que pretendían.
+
+15:20.160 --> 15:22.200
+Si tu amigo o la persona
+
+15:22.200 --> 15:23.760
+que conseguiste
+
+15:23.760 --> 15:26.760
+duda en convertirse en co-organizadora
+
+15:26.760 --> 15:28.960
+porque siente que es una responsabilidad,
+
+15:28.960 --> 15:29.720
+está bien.
+
+15:29.720 --> 15:32.360
+Puedes pedirle que solamente te acompañe
+
+15:32.360 --> 15:36.480
+y sostén la conversación durante el evento.
+
+15:36.480 --> 15:38.720
+Y, como Andrea explicó
+
+15:38.720 --> 15:40.200
+en su conferencia sobre los 'compañeros',
+
+15:40.200 --> 15:43.520
+'compañero' es quien te ayuda
+
+15:43.520 --> 15:45.000
+en tu travesía de Emacs.
+
+15:45.000 --> 15:48.800
+Compañeros y pupilos
+
+15:48.800 --> 15:52.280
+pueden hacer de su encuentro uno que sea público
+
+15:52.280 --> 15:56.040
+y esa puede ser una buena manera de comenzar
+
+15:56.040 --> 15:57.240
+a poner a rodar un encuentro.
+
+15:57.240 --> 16:01.920
+Ten un sitio web para tu encuentro.
+
+16:01.920 --> 16:04.440
+Definitivamente debes tener un sitio web
+
+16:04.440 --> 16:05.920
+donde la gente pueda leer
+
+16:05.920 --> 16:08.640
+sobre tu evento o sobre el grupo.
+
+16:08.640 --> 16:10.280
+Mantenlo simple.
+
+16:10.280 --> 16:13.440
+Levanta noticias de RSS para que las personas puedan suscribirse.
+
+16:13.440 --> 16:15.520
+Y cuando tengas nuevas conferencias,
+
+16:15.520 --> 16:17.680
+asegúrate de añadir esas conferencias
+
+16:17.680 --> 16:18.880
+a las páginas de anuncios.
+
+16:18.880 --> 16:23.960
+Rápidamente, veamos algunos sitios web de ejemplo.
+
+16:23.960 --> 16:32.480
+El primero es nuevamente
+
+16:32.480 --> 16:34.160
+el del evento de Emacs Asia-Pacific.
+
+16:34.160 --> 16:36.880
+Puedes ver que mostramos detalles,
+
+16:36.880 --> 16:41.080
+el horario, cómo proponer una conferencia,
+
+16:41.080 --> 16:42.000
+cómo asistir.
+
+16:42.000 --> 16:45.720
+El siguiente ejemplo es Emacs Berlin.
+
+16:45.720 --> 16:47.480
+Ahí puedes ver que han mencionado
+
+16:47.480 --> 16:48.680
+cuál es el siguiente evento,
+
+16:48.680 --> 16:51.440
+cuáles fueron los eventos previos,
+
+16:51.440 --> 16:53.840
+cómo participar, cómo mantenerse actualizado.
+
+16:53.840 --> 16:57.040
+Y de igual manera, existe M-x investigar.
+
+16:57.040 --> 16:59.080
+Han mencionado cuáles son los eventos,
+
+16:59.080 --> 17:00.600
+cuáles son los eventos venideros y todo lo demás.
+
+17:00.600 --> 17:09.280
+Puedes iniciar,
+
+17:09.280 --> 17:11.160
+simplemente tomando cualquiera de estos sitios web
+
+17:11.160 --> 17:13.040
+y solamente modifícalos a tu gusto.
+
+17:13.040 --> 17:14.200
+Es totalmente aceptable.
+
+17:14.200 --> 17:17.640
+Lo siguiente que requerirás
+
+17:17.640 --> 17:19.080
+es de una herramienta para videoconferencia.
+
+17:19.080 --> 17:23.360
+Debería soportar vídeo, compartir escritorio, chat.
+
+17:23.360 --> 17:25.120
+Estas son algunas
+
+17:25.120 --> 17:27.680
+de las opciones en software libre.
+
+17:27.680 --> 17:29.240
+Una es BigBlueButton
+
+17:29.240 --> 17:31.000
+y otra es Jitsi Meet.
+
+17:31.000 --> 17:33.040
+Puedes solicitar una cuenta en la instancia apropiada
+
+17:33.040 --> 17:36.840
+a los organizadores de EmacsConf
+
+17:36.840 --> 17:38.280
+que están en esta lista de correo,
+
+17:38.280 --> 17:40.400
+o puedes mantenerte en cualquiera
+
+17:40.400 --> 17:42.280
+de las instancias de Jitsi Meet.
+
+17:42.280 --> 17:45.960
+Medios de comunicación.
+
+17:45.960 --> 17:47.280
+Deberías tener al menos una manera
+
+17:47.280 --> 17:51.120
+para que la gente interactúe después del encuentro
+
+17:51.120 --> 17:53.000
+y antes del encuentro.
+
+17:53.000 --> 17:55.760
+Puedes utilizar cualquiera de los canales existentes en IRC,
+
+17:55.760 --> 17:59.880
+#emacsconf, o quizá desees
+
+17:59.880 --> 18:01.720
+usar las listas de grupos de usuarios de GNU con Linux.
+
+18:01.720 --> 18:07.600
+Recomendaría que leas o mires
+
+18:07.600 --> 18:11.000
+"Starting an Emacs meetup" por Harry Schwartz.
+
+18:11.000 --> 18:13.080
+Ha mencionado los detalles
+
+18:13.080 --> 18:14.840
+sobre encuentros personales
+
+18:14.840 --> 18:17.720
+pero hay mucho puntos importantes
+
+18:17.720 --> 18:20.080
+a considerar en esa publicación
+
+18:20.080 --> 18:21.320
+tanto como en la grabación.
+
+18:21.320 --> 18:23.200
+Así que, ve y definitivamente mira [ese vídeo]
+
+18:23.200 --> 18:24.840
+antes de iniciar tu encuentro.
+
+18:24.840 --> 18:29.560
+Si necesitas ayuda
+
+18:29.560 --> 18:32.520
+con la cuenta, el alojamiento
+
+18:32.520 --> 18:35.280
+o para poner subtítulos a las grabaciones de BigBlueButton
+
+18:35.280 --> 18:37.160
+para conferencias muy específicas o buenas,
+
+18:37.160 --> 18:38.880
+no dudes en buscar
+
+18:38.880 --> 18:40.480
+a los organizadores de EmacsConf.
+
+18:40.480 --> 18:42.320
+Hay muchos voluntarios
+
+18:42.320 --> 18:43.560
+suscritos a esa lista [de correo].
+
+18:43.560 --> 18:45.920
+Así que definitivamente encontrarás
+
+18:45.920 --> 18:50.080
+alguien quien te ayude.
+
+18:50.080 --> 18:50.760
+Tuve una idea.
+
+18:50.760 --> 18:53.240
+Si tu eres uno de les organizadores
+
+18:53.240 --> 18:55.400
+o si planeas iniciar un encuentro,
+
+18:55.400 --> 18:57.360
+pensaba en que si tendríamos
+
+18:57.360 --> 18:59.280
+una plataforma común
+
+18:59.280 --> 19:00.400
+para que todos les organizadores
+
+19:00.400 --> 19:01.240
+conversen sobre lo que están haciendo,
+
+19:01.240 --> 19:04.000
+lo que están expermentando.
+
+19:04.000 --> 19:06.920
+Si estás interesado, envíame un correo a este correo electrónico
+
+19:06.920 --> 19:10.400
+bhavin192 [arroba] geeksocket [punto] in.
+
+19:10.400 --> 19:13.200
+Si logro llegar a algún lado con esta idea,
+
+19:13.200 --> 19:15.440
+definitivamente involucraré a todos
+
+19:15.440 --> 19:16.280
+quienes estén interesados.
+
+19:16.280 --> 19:21.240
+Con eso, llegamos al final de mi conferencia.
+
+19:21.240 --> 19:23.440
+Me gustaría agradecer a Sacha y a Leo
+
+19:23.440 --> 19:26.560
+por sus recomendaciones mientras creaba esta conferencia
+
+19:26.560 --> 19:30.040
+y a ustedes por unirse.
+
+19:30.040 --> 19:35.280
+Ahora es el momento para las preguntas.
diff --git a/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.vtt b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.vtt
new file mode 100644
index 00000000..f9ec7319
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.vtt
@@ -0,0 +1,611 @@
+WEBVTT
+
+00:00.000 --> 00:09.660
+About five seconds until we go live.
+
+00:09.660 --> 00:10.660
+And we are live!
+
+00:10.660 --> 00:11.660
+Hello again!
+
+00:11.660 --> 00:15.580
+It's the first time you're seeing me today, and hopefully you're still laughing from
+
+00:15.580 --> 00:18.940
+the little joke Carl had at the end of his talk.
+
+00:18.940 --> 00:20.940
+Hi Carl, how are you doing?
+
+00:20.940 --> 00:26.260
+I'm fine thanks, how are you doing?
+
+00:26.260 --> 00:29.700
+I'm doing pretty fine, but I am currently struggling to make my windows slightly larger
+
+00:29.700 --> 00:31.240
+because what am I doing?
+
+00:31.240 --> 00:34.920
+Okay, okay, I think people can see me relatively well right now.
+
+00:34.920 --> 00:38.120
+Yeah, I am doing well, and thank you for the joke.
+
+00:38.120 --> 00:42.960
+It feels like when I see people wearing suits during a BBB presentation, or sorry, not a
+
+00:42.960 --> 00:47.880
+BBB presentation, an EmacsConc presentation, I feel like it's a reply to my own style and
+
+00:47.880 --> 00:48.880
+I feel attacked.
+
+00:48.880 --> 00:53.200
+But I will just confirm, how do I do this without making too much of a fool, I will
+
+00:53.200 --> 01:00.260
+lower my standing desk, and you can see that I am actually wearing trousers.
+
+01:00.260 --> 01:04.000
+So yes, I am wearing socks and sandals because it's really cold right now and it's very comfortable
+
+01:04.000 --> 01:05.000
+as well.
+
+01:05.000 --> 01:11.580
+Don't ask me on this, but I am technically more dressed than you are.
+
+01:11.580 --> 01:17.580
+Well this was a lederhose, actually a quite nice lederhose, which you wear for specific
+
+01:17.580 --> 01:18.580
+occasions.
+
+01:18.580 --> 01:23.440
+It's not considered as something special.
+
+01:23.440 --> 01:28.320
+No, definitely, but it is looking a little bit odd to my French style.
+
+01:28.320 --> 01:32.400
+Yeah, especially the combination, yes, you're right.
+
+01:32.400 --> 01:36.680
+Right, we could be talking about hours for this, but I suppose people are not actually
+
+01:36.680 --> 01:39.720
+here to hear us talk about this, but about you talk.
+
+01:39.720 --> 01:44.720
+I'm not going to make the affront of asking if you've got the pad open, considering that
+
+01:44.720 --> 01:48.520
+you have been managing the pad and helping us manage the pad for what, three years now,
+
+01:48.520 --> 01:49.520
+or something?
+
+01:49.520 --> 01:57.240
+Yeah, but this year, actually, it's doing great without my help, so yeah.
+
+01:57.240 --> 02:00.100
+Actually there are already two answers.
+
+02:00.100 --> 02:04.360
+Somebody was nice enough to copy my answers from the IRC to here.
+
+02:04.360 --> 02:10.440
+Can you filter out blocked tasks on stuff like your agenda, on specific agenda view,
+
+02:10.440 --> 02:14.920
+when you want to know what you can do next?
+
+02:14.920 --> 02:20.120
+That's a tricky question.
+
+02:20.120 --> 02:25.280
+The blocked tasks are never shown on the agenda by default.
+
+02:25.280 --> 02:36.200
+Whenever there is no scheduled timestamp attached to a heading, it's not visible on my agenda.
+
+02:36.200 --> 02:43.400
+If you use the dependencies, as I described it in the demo, you will see that the scheduled
+
+02:43.400 --> 02:51.520
+timestamp, or date stamp, is only added when the previous one is marked as done, or canceled.
+
+02:51.520 --> 02:57.480
+So therefore, blocked tasks are never shown on the agenda by default, if you use it in
+
+02:57.480 --> 03:01.520
+this, in that way.
+
+03:01.520 --> 03:06.720
+The functionality seems quite nice, but the markup seems pretty heavy in the property
+
+03:06.720 --> 03:07.720
+drawers.
+
+03:07.720 --> 03:17.320
+Do you ever have any issues having so much meta-level information?
+
+03:17.320 --> 03:27.960
+No, as long as I don't have to type it manually, I don't see any issue at all, so far.
+
+03:27.960 --> 03:35.000
+Because I tend to have very, rather large org-mode files in any way.
+
+03:35.000 --> 03:41.840
+So far, I haven't thought of, oh my gosh, this is so bloated, I need to simplify it.
+
+03:41.840 --> 03:45.320
+Not yet.
+
+03:45.320 --> 03:52.360
+Looking for the IRC, if there is something going on.
+
+03:52.360 --> 03:56.120
+If not, we'll be able to, because this is the showdown people were waiting.
+
+03:56.120 --> 04:02.720
+Two years ago, you wrote an article about Algrom not being good, and I'm being polite.
+
+04:02.720 --> 04:05.160
+We need to fight this out right now.
+
+04:05.160 --> 04:07.000
+Yeah, sure.
+
+04:07.000 --> 04:18.120
+Actually, I do think that Zettelkasten methods are interesting, but so far, I haven't seen
+
+04:18.120 --> 04:21.400
+much use in my personal use.
+
+04:21.400 --> 04:26.960
+But I can imagine that, for example, if you're working on a PhD thesis, or you're studying
+
+04:26.960 --> 04:31.780
+in some research field and so forth, it's quite handy.
+
+04:31.780 --> 04:40.800
+The only thing my concept so far doesn't have what the usual Zettelkasten methods do provide
+
+04:40.800 --> 04:46.960
+is this visual navigation method, which I would not use anyway.
+
+04:46.960 --> 04:53.960
+So I don't see any purpose at all for Zettelkasten methods for my personal use cases, as long
+
+04:53.960 --> 05:01.160
+as I don't think that this visual navigation would be very handy in my case.
+
+05:01.160 --> 05:07.880
+I'm very happy with the bidirectional links, because they get me from A to B, and I can
+
+05:07.880 --> 05:12.700
+connect ideas and headings and tasks and whatnot.
+
+05:12.700 --> 05:20.440
+So this is basically the most important part of Zettelkasten method from my perspective.
+
+05:20.440 --> 05:26.880
+And this is what these bidirectional links and dependencies provide for me in my personal
+
+05:26.880 --> 05:27.880
+setup.
+
+05:27.880 --> 05:34.080
+Yeah, and I was taking a jab at it, because even you, with your own article, you were
+
+05:34.080 --> 05:41.080
+saying how, you know, it's a title to grab attention, but actually you had a lot of things
+
+05:41.080 --> 05:42.080
+Yeah, it was trick-based.
+
+05:42.080 --> 05:48.200
+Yeah, I didn't want to say the word, you know, I'm trying to be, like, I didn't read the
+
+05:48.200 --> 05:51.960
+actual title that should title the article.
+
+05:51.960 --> 05:55.760
+But yeah, I think you were also interested in what we were discussing yesterday.
+
+05:55.760 --> 06:00.240
+I can't remember which talk, because we had a number of org talks, but when I was discussing
+
+06:00.240 --> 06:05.680
+in one of the Q&A the concept of a slip box for multiple peoples, you seemed to be interested
+
+06:05.680 --> 06:07.800
+in this topic as well.
+
+06:07.800 --> 06:08.800
+Yes.
+
+06:08.800 --> 06:15.440
+Yeah, my personal interest is in personal information management, but collaborative
+
+06:15.440 --> 06:20.540
+information management is of course a very related and important part, and I have some
+
+06:20.540 --> 06:27.240
+background by writing a PhD thesis on organizing information and files and whatnot, and therefore
+
+06:27.240 --> 06:37.460
+I'm interested in the ideas how to make a collaborative, let's say, something that might
+
+06:37.460 --> 06:42.200
+actually work within a work group or even larger.
+
+06:42.200 --> 06:49.960
+There are some things that overlap between personal information management and collaborative,
+
+06:49.960 --> 07:01.680
+for example, I'm sure you know the vocabulary problem, where people do have different mental
+
+07:01.680 --> 07:08.520
+models of the same stuff, so therefore finding one common phrase or one common word is a
+
+07:08.520 --> 07:15.200
+difficult task to do, and you get these kind of troubles all over the place if you go into
+
+07:15.200 --> 07:16.680
+that direction.
+
+07:16.680 --> 07:23.560
+Yeah, this is why I think just like a lot of software solutions, they need to be backed
+
+07:23.560 --> 07:25.720
+up by strong methodology on the side.
+
+07:25.720 --> 07:30.080
+It feels like it's always a balance when you have the tools that are helping you enable
+
+07:30.080 --> 07:39.160
+something like Emacs, like Org, like Zorcast, EL, Orgrom, or any kind of the, I don't want
+
+07:39.160 --> 07:44.040
+to say Orgrom clone, it's like Dark Souls, when everything becomes a Dark Souls clone,
+
+07:44.040 --> 07:50.840
+that's not the point, we have Zorcast and modes in Emacs that allow you to do this no-taking,
+
+07:50.840 --> 07:51.840
+so that's the tools.
+
+07:51.840 --> 07:55.960
+And then you have the methods on the other end, which are about how do you use those
+
+07:55.960 --> 08:00.800
+tools to work with multiple people, we're only talking about collective sandbox here.
+
+08:00.800 --> 08:06.760
+And yeah, there is obviously the vocabulary discussion, the point that Carl just mentioned,
+
+08:06.760 --> 08:11.200
+there are some solutions methodologically, like you can have a taxonomy of all the words
+
+08:11.200 --> 08:16.760
+you're using, if you have a list of patterns, for instance, it's good to fix the language
+
+08:16.760 --> 08:21.600
+within a file, so that you can have something that people can read.
+
+08:21.600 --> 08:27.840
+It's kind of like, you have dictionaries, obviously, but it reminds me of some very
+
+08:27.840 --> 08:32.720
+specific dictionaries, like the hacker dictionary, when you have a lot of entries, where people
+
+08:32.720 --> 08:38.200
+can learn the lingua, how to use the internet, how to chat on IOC, stuff like this, it feels
+
+08:38.200 --> 08:45.320
+like a group sandbox is always going to be oriented towards solving a particular project,
+
+08:45.320 --> 08:49.600
+I think, and I think taxonomy and vocabulary would be very important to have.
+
+08:49.600 --> 08:54.280
+Anyway, I don't want to take too much, this is a very interesting topic, obviously, you
+
+08:54.280 --> 09:00.080
+wrote a PhD on it, and I wrote software on it, and you've wrote software on it as well,
+
+09:00.080 --> 09:06.640
+but we should probably talk about this later, at least, but maybe come up with something
+
+09:06.640 --> 09:08.640
+to present in a year or so.
+
+09:08.640 --> 09:09.640
+Okay.
+
+09:09.640 --> 09:17.480
+So, somebody wrote the BBB is not open yet, I don't know if it's on purpose or not.
+
+09:17.480 --> 09:18.480
+I'll do this now.
+
+09:18.480 --> 09:21.640
+You'll see me whisper, you'll see something very fancy, look at me, I'm going to press
+
+09:21.640 --> 09:24.600
+the button, you're going to see something appear at the bottom to talk to production,
+
+09:24.600 --> 09:30.440
+this is the thing that I've developed since yesterday, it's amazing, wasn't it?
+
+09:30.440 --> 09:32.840
+This was technology, right there.
+
+09:32.840 --> 09:37.320
+So yes, the BBB will be open in about 30 seconds to one minute.
+
+09:37.320 --> 09:42.080
+And people, it's the first one of the day, so I'll do the reminder.
+
+09:42.080 --> 09:48.440
+In order to join us in a room right now, where I'm talking with Carl, you will need to go
+
+09:48.440 --> 09:56.280
+to the talk page, so you can find all the talks on emaskov.org-2022.
+
+09:56.280 --> 10:02.000
+Then you find the talk by Carl Voigt, you can look for his name, you click on the link
+
+10:02.000 --> 10:06.800
+over there and at the top you will have a link to the BBB room in which we are currently. Also
+
+10:06.800 --> 10:13.840
+if you're on IRC you will just have gotten a notification about joining the room. So in the
+
+10:13.840 --> 10:18.400
+meantime Carl, how about we answer some of the new questions that you have on the pad whilst people
+
+10:18.400 --> 10:29.680
+get warmed up. Sure. So the next one, does this change how you use to-do keywords next to do
+
+10:29.680 --> 10:40.880
+blocked? Avoiding some or starting to use others? No. I don't see any connection. And my keywords
+
+10:40.880 --> 10:56.160
+are next, oops, next, started, waiting, done, cancelled. That's basically it if you're interested.
+
+10:56.160 --> 11:02.800
+But my configuration is online anyway. I can paste the link later. And yes, I can paste the link to
+
+11:02.800 --> 11:12.880
+my thesis as well as ask on the IRC. Carl, if you don't mind, I do have a quick question because
+
+11:12.880 --> 11:19.360
+I'm going to forget otherwise. We have someone in IRC asking you, is your PhD published? I'm not a
+
+11:19.360 --> 11:26.560
+PhD but your thesis is published. Yes, of course. Everything of my PhD is public including the actual
+
+11:26.560 --> 11:33.760
+research work, the hard figures of the user experiments and the derived functions, everything
+
+11:33.760 --> 11:41.920
+of course. The later one actually should be also in org mode so 100% reproducible which was very
+
+11:41.920 --> 11:47.200
+important to me. Would you have a link, so maybe not right now but in the pad, could you include a
+
+11:47.200 --> 11:53.760
+link later on? I've already wrote down a question for that on my own so that I don't forget to
+
+11:53.760 --> 11:58.240
+answer it afterwards. Okay, amazing. Thank you. You can continue with the questions. We also have
+
+11:58.240 --> 12:02.400
+people joining on. I see microphones now and some of the people joining on BBB so I'm excited. I'm
+
+12:02.400 --> 12:07.680
+getting ready for your questions. But in the meantime, Carl, feel free to go. I'm answering
+
+12:07.680 --> 12:15.200
+all the questions in the pad anyway so if somebody is asking something in the BBB, I'm open to it.
+
+12:15.200 --> 12:21.360
+Right, there is just one other thing I need to say. We need to move with the next talk in about
+
+12:21.360 --> 12:27.440
+eight minutes. So, Carl, if you could maybe not rush but answer fairly quickly the last questions
+
+12:27.440 --> 12:35.680
+on the pad, then we can move on to live Q&A inside BBB. Sure. OrgBrain has stuff like parent links
+
+12:35.680 --> 12:40.560
+and directional links, sibling links, and if org.roam.else had nothing else interesting,
+
+12:40.560 --> 12:48.560
+what about, like, the previous stuff? I'm going to be honest, I'm not sure what the previous stuff
+
+12:48.560 --> 12:59.360
+was either. So, referring to side window, where it's not only the linked heading, so not only the
+
+12:59.360 --> 13:08.240
+link is shown but actually some heading title and short contents below it. So, that's very handy
+
+13:08.240 --> 13:13.520
+when you are looking, like, or is it relevant, or it's not relevant.
+
+13:16.720 --> 13:25.040
+To me, it's not relevant at the moment. I don't have the requirement for specific link types
+
+13:25.760 --> 13:32.080
+or directions. I like how, Carl, you feel obligated to write and speak at the same time.
+
+13:32.080 --> 13:36.240
+Like, you can let go of your responsibility as the pad. We have another volunteer helping you
+
+13:36.240 --> 13:42.000
+with the pad right now, so don't worry about it. Perfect. So, do you find that the links are fragile,
+
+13:42.000 --> 13:50.080
+hard to maintain? No, not at all. The only thing that I have to remark here is probably that
+
+13:50.080 --> 13:58.640
+sometimes I rename the links when the heading actually was renamed afterward and the link name
+
+13:58.640 --> 14:06.640
+isn't reflecting the actual heading. Then I do a quick search and replace all of my Org Mode files,
+
+14:06.640 --> 14:13.840
+but that's basically it. So, no, I really love the bi-directional and uni-directional links,
+
+14:14.640 --> 14:23.440
+and it doesn't give me any burden to maintain them. Would it be of interest to, like, make auto
+
+14:23.440 --> 14:35.840
+description for links in Org? You have an ID, you don't have any description, but then
+
+14:35.840 --> 14:44.240
+description is generated automatically. My IDs are auto-generated and they are generated from
+
+14:44.240 --> 14:50.880
+the heading title, so usually my links are pretty much self-explanatory.
+
+14:50.880 --> 14:58.640
+Oh, so what you're referring to is that you have a link, then you rename the linked heading,
+
+14:58.640 --> 15:05.440
+and then you change the link ID. Oh yeah, that's true. Links are not synchronized with their
+
+15:05.440 --> 15:15.120
+headings once they are generated, but usually a heading title is not changed that often by me,
+
+15:15.120 --> 15:24.960
+so this is not a really important problem in my use cases. PhD thesis unlinked later.
+
+15:24.960 --> 15:33.440
+Why not Org UUIDs for IDs and the Preferences human-readable ones? Yeah, I hate UUIDs because
+
+15:33.440 --> 15:42.640
+they tell me nothing at all, so I want to get an idea to what I'm linking to. Therefore, I've got
+
+15:42.640 --> 15:52.800
+rid of all UUIDs in my setup and I prefer something that gives me as a user an idea of
+
+15:52.800 --> 16:04.000
+what's happening when I open up this link. Sorry, have you been able to hear me? Is it
+
+16:04.000 --> 16:10.000
+the first OTS mic of the conference? Wow, this is amazing. I was mispressing the button, I think.
+
+16:10.000 --> 16:14.320
+I apologize humbly, deeply, and sincerely about the hot mic. No problem.
+
+16:19.360 --> 16:26.640
+Do you have or use anything for what links here to this heading in a more occurred grep style
+
+16:26.640 --> 16:36.560
+buffer and auto? No, not yet. I'm not using that, but I may be able to what links to here
+
+16:36.560 --> 16:42.480
+by looking for the ID. All the heading IDs start with a date stamp and then a
+
+16:43.440 --> 16:52.160
+string which is made up from the heading title. If I want to see what links to this specific heading
+
+16:52.160 --> 17:01.200
+without having backlinks, I usually use org occur within the buffer and get the result right away.
+
+17:01.200 --> 17:08.640
+All right, I'm just going to give you, I have the bad role here, I have to be the man with
+
+17:08.640 --> 17:14.320
+the watch telling you that we have about three minutes left in this talk and afterwards we'll
+
+17:14.320 --> 17:18.240
+need to move on to the next one. So you have about two minutes. Carla, I didn't ask you if
+
+17:18.240 --> 17:22.640
+you had anything else to add over your talk. I wish we had more time to discuss because it's
+
+17:22.640 --> 17:26.400
+a very interesting topic, but sadly we will have to get going with the next talk in two minutes.
+
+17:26.400 --> 17:33.280
+So the next two minutes are yours. I continue answering questions on the
+
+17:33.280 --> 17:46.720
+pad of course and you'll see me around on the IRC. I'm still around in IRC. I will answer all
+
+17:46.720 --> 17:54.400
+the questions on the pad even after we continue and everybody who wants to get in touch and talk
+
+17:54.400 --> 18:01.920
+about this stuff may find me on the internet. Sure, there is still the nebulous concept.
+
+18:01.920 --> 18:07.520
+Every Microsoft says we should have a meeting room for maintainers or for people well invested
+
+18:07.520 --> 18:14.000
+into org and melpa stuff and package writing because it feels like if we have so many ideas
+
+18:14.640 --> 18:18.640
+and so far the only person who's been able to implement every single idea they have is
+
+18:18.640 --> 18:25.600
+Alfa Papa because I have no idea how they do it. That's actually a group of people I think.
+
+18:26.640 --> 18:33.440
+Yes, we need to check if Alfa Papa appeared in two different rooms at the same time. I need to
+
+18:33.440 --> 18:42.000
+confirm this for my own sanity. But yeah, barring Adam from being able to do this, we have so many
+
+18:42.000 --> 18:46.400
+ideas and it feels like if we were talking about them with other people we might be able to implement.
+
+18:46.400 --> 18:49.760
+I've been asking about the cloning machine so maybe Alfa Papa got one.
+
+18:51.200 --> 18:56.560
+Yeah, well anyway I'm sorry for cutting the conversation a little short but we will have
+
+18:56.560 --> 19:02.480
+to get started with the next talk. So thank you so much Karl for taking the time first to send a
+
+19:02.480 --> 19:07.440
+recording to us for answering questions now and also for being a volunteer for eMaximum. Thank
+
+19:07.440 --> 19:14.000
+you so much for all of those three things. Oh, you're welcome. We will probably see you next
+
+19:14.000 --> 19:20.160
+year. I am now definitely set on expecting a Cardboard talk every year and you will have to
+
+19:20.160 --> 19:25.600
+top it next year. I'm not sure what you will find to make the end funny but you have set the bar
+
+19:25.600 --> 19:31.840
+quite high and you need to go even higher this time. Next time without the Leda Jose oil.
+
+19:33.280 --> 19:38.240
+As long as you don't show up, put more clothes, not fewer garments, please.
+
+19:38.240 --> 19:45.520
+We will have to get started with the next talk. Thank you so much Karl. No, I'm sorry. We need to
+
+19:45.520 --> 19:49.760
+get moving to the next talk. I'll be closing the BBB room and we'll start with the next talk at
+
+19:49.760 --> 19:58.160
+the top of the minute in 30 seconds. Bye-bye everyone. Bye. All right, we are not live anymore.
+
+19:58.160 --> 20:01.920
+Thank you so much Karl. I have to get going. We need to make sure everything works now.
+
+20:01.920 --> 20:07.840
+Sure. Bye. Bye-bye.
+
diff --git a/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt
new file mode 100644
index 00000000..a5b85095
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt
@@ -0,0 +1,34 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:18.680
+Introduction
+
+00:00:18.680 --> 00:01:42.680
+Setting up the demo
+
+00:01:42.680 --> 00:03:03.920
+Linking between headings
+
+00:03:03.920 --> 00:03:51.640
+Link drawers
+
+00:03:51.640 --> 00:04:09.960
+Bi-directional links
+
+00:04:09.960 --> 00:05:07.680
+Projects
+
+00:05:07.680 --> 00:05:51.600
+Dependencies
+
+00:05:51.600 --> 00:06:39.320
+Jumping between dependencies
+
+00:06:39.320 --> 00:07:49.120
+Closing the project
+
+00:07:49.120 --> 00:08:15.640
+Task dependencies between files
+
+00:08:15.640 --> 00:08:56.000
+Conclusion
diff --git a/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt
new file mode 100644
index 00000000..d67d0a64
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt
@@ -0,0 +1,508 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:05.600
+Hello, my name is Karl Voit
+
+00:00:05.600 --> 00:00:08.720
+and I'm going to show you a little demo
+
+00:00:08.720 --> 00:00:10.920
+on how I'm working with links
+
+00:00:10.920 --> 00:00:12.760
+between arbitrary headings
+
+00:00:12.760 --> 00:00:16.240
+and how I define dependencies between tasks
+
+00:00:16.240 --> 00:00:18.680
+when I'm working with projects and so forth.
+
+00:00:18.680 --> 00:00:22.680
+For that purpose, I've created a repository
+
+00:00:22.680 --> 00:00:27.680
+that contains the files we are going to work with,
+
+00:00:27.680 --> 00:00:30.000
+with the overall setup and so forth.
+
+00:00:30.000 --> 00:00:32.840
+So you just have to download this repository
+
+00:00:32.840 --> 00:00:36.400
+and you're able to replay everything
+
+00:00:36.400 --> 00:00:38.120
+which you are going to see here.
+
+00:00:38.120 --> 00:00:44.360
+If you've downloaded the configuration of the demo,
+
+00:00:44.360 --> 00:00:49.160
+you see those files, and you start the Emacs
+
+00:00:49.160 --> 00:00:52.800
+with an empty configuration
+
+00:00:52.800 --> 00:00:59.480
+and link demo file, like that.
+
+00:00:59.480 --> 00:01:03.800
+So let me just briefly increase the font size.
+
+00:01:03.800 --> 00:01:05.760
+Setting up the demo is easy.
+
+00:01:05.760 --> 00:01:08.600
+I've done the key visualization,
+
+00:01:08.600 --> 00:01:11.840
+the webcam part, and I've started the Emacs
+
+00:01:11.840 --> 00:01:13.920
+and increased the font size.
+
+00:01:13.920 --> 00:01:17.720
+And the last thing and the most important thing
+
+00:01:17.720 --> 00:01:18.680
+you need to do here
+
+00:01:18.680 --> 00:01:20.360
+is executing the babel block,
+
+00:01:20.360 --> 00:01:23.800
+which consists of more or less dirty Elisp code
+
+00:01:23.800 --> 00:01:27.040
+that installs the necessary packages, functions,
+
+00:01:27.040 --> 00:01:29.800
+and bindings required in this demo.
+
+00:01:29.800 --> 00:01:32.400
+You need to acknowledge the execution
+
+00:01:32.400 --> 00:01:36.160
+with yes and return, and after a couple of seconds,
+
+00:01:36.160 --> 00:01:37.920
+everything is downloaded
+
+00:01:37.920 --> 00:01:42.680
+and set up nicely for your demo.
+
+00:01:42.680 --> 00:01:45.040
+The first demo is the demo
+
+00:01:45.040 --> 00:01:46.960
+where I'm going to show you
+
+00:01:46.960 --> 00:01:48.480
+how I'm working with links
+
+00:01:48.480 --> 00:01:50.120
+between arbitrary headings.
+
+00:01:50.120 --> 00:01:52.440
+It consists of two commands,
+
+00:01:52.440 --> 00:01:55.480
+org-super-links-quick-insert-inline-link,
+
+00:01:55.480 --> 00:01:56.640
+and the second one is
+
+00:01:56.640 --> 00:01:59.160
+org-super-links-quick-insert-drawer-link.
+
+00:01:59.160 --> 00:02:01.040
+So the difference is,
+
+00:02:01.040 --> 00:02:03.720
+the first one is an inline link,
+
+00:02:03.720 --> 00:02:07.640
+and the second one only depends
+
+00:02:07.640 --> 00:02:09.960
+on the drawers of the headings.
+
+00:02:09.960 --> 00:02:12.800
+So let's show you what I mean.
+
+00:02:12.800 --> 00:02:15.240
+If I'm inserting here the inline link
+
+00:02:15.240 --> 00:02:18.680
+to the second one, which I have to choose
+
+00:02:18.680 --> 00:02:21.200
+from the result set here,
+
+00:02:21.200 --> 00:02:26.440
+you see that there is this second heading link
+
+00:02:26.440 --> 00:02:29.480
+included here in the first heading.
+
+00:02:29.480 --> 00:02:34.920
+Let's open up the first and second heading.
+
+00:02:34.920 --> 00:02:37.120
+You see that I can jump this link
+
+00:02:37.120 --> 00:02:40.520
+to the second heading. The first heading
+
+00:02:40.520 --> 00:02:42.000
+as well as the second heading
+
+00:02:42.000 --> 00:02:43.880
+get human readable IDs,
+
+00:02:43.880 --> 00:02:46.040
+which I personally prefer.
+
+00:02:46.040 --> 00:02:49.320
+The second one gets
+
+00:02:49.320 --> 00:02:51.600
+a backheading in a link drawer,
+
+00:02:51.600 --> 00:02:53.680
+which was created automatically.
+
+00:02:53.680 --> 00:02:57.440
+So this is a method where I link arbitrary headings,
+
+00:02:57.440 --> 00:02:59.167
+and that's the main reason
+
+00:02:59.168 --> 00:03:01.214
+why I personally don't need any
+
+00:03:01.215 --> 00:03:03.920
+Zettelkasten-based method like Org Roam.
+
+00:03:03.920 --> 00:03:08.600
+The next command which I want to show you
+
+00:03:08.600 --> 00:03:13.480
+is the link between those drawers.
+
+00:03:13.480 --> 00:03:17.720
+So in order to link the third to the fourth,
+
+00:03:17.720 --> 00:03:20.320
+I need to look for the fourth.
+
+00:03:20.320 --> 00:03:24.200
+In this case, you do not see
+
+00:03:24.200 --> 00:03:27.400
+any inline link like here above,
+
+00:03:27.400 --> 00:03:31.520
+but you see the :PROPERTIES: drawers
+
+00:03:31.520 --> 00:03:35.400
+and the :LINKS: drawers in both headings.
+
+00:03:35.400 --> 00:03:38.480
+So there is a forward- and a back-link
+
+00:03:38.480 --> 00:03:40.200
+between those two headings,
+
+00:03:40.200 --> 00:03:42.920
+and if you see a links drawer
+
+00:03:42.920 --> 00:03:45.440
+you know that there are
+
+00:03:45.440 --> 00:03:47.560
+linked headings you can follow.
+
+00:03:47.560 --> 00:03:51.640
+I do find this method very very handy.
+
+00:03:51.640 --> 00:03:53.600
+Of course, this doesn't only work
+
+00:03:53.600 --> 00:03:57.120
+within one single Org mode file.
+
+00:03:57.120 --> 00:04:01.440
+It works between arbitrary Org mode files
+
+00:04:01.440 --> 00:04:02.633
+as long as they are
+
+00:04:02.634 --> 00:04:05.760
+part of your Org Mode agenda list.
+
+00:04:05.760 --> 00:04:08.280
+So that was the first heading
+
+00:04:08.280 --> 00:04:09.960
+with the bi-directional links.
+
+00:04:09.960 --> 00:04:11.640
+The second one is a little bit
+
+00:04:11.640 --> 00:04:13.080
+more complicated than that
+
+00:04:13.080 --> 00:04:17.280
+because I show you how I'm working with projects.
+
+00:04:17.280 --> 00:04:19.533
+Usually, I start the project
+
+00:04:19.534 --> 00:04:22.080
+by adding a "Why?" statement
+
+00:04:22.080 --> 00:04:25.200
+so that I remember why this project
+
+00:04:25.200 --> 00:04:27.440
+needs to be done in the first place.
+
+00:04:27.440 --> 00:04:32.280
+I do a brainstorming on the tasks
+
+00:04:32.280 --> 00:04:33.933
+that need to be done in the project
+
+00:04:33.934 --> 00:04:36.280
+as a simple list.
+
+00:04:36.280 --> 00:04:39.360
+With this handy command (C-c *),
+
+00:04:39.360 --> 00:04:43.840
+I'm converting it to a list of Org mode headings.
+
+00:04:43.840 --> 00:04:47.040
+Now let's add the NEXT keyword,
+
+00:04:47.040 --> 00:04:49.000
+which is my default to-do keyword,
+
+00:04:49.001 --> 00:04:49.760
+to the first heading.
+
+00:04:49.760 --> 00:04:53.320
+You notice that there is a CREATED property
+
+00:04:53.320 --> 00:04:56.480
+which is not relevant to the demo itself,
+
+00:04:56.480 --> 00:04:57.840
+but it's part of my setup.
+
+00:04:57.840 --> 00:05:00.840
+I really like those created headings
+
+00:05:00.840 --> 00:05:03.640
+because when I add arbitrary headings,
+
+00:05:03.640 --> 00:05:07.680
+this CREATED property is added automatically.
+
+00:05:07.680 --> 00:05:11.480
+So now I want to define a dependency
+
+00:05:11.480 --> 00:05:12.967
+between "Empty garage"
+
+00:05:12.968 --> 00:05:14.800
+and "Paint walls and floor."
+
+00:05:14.800 --> 00:05:18.480
+I do that by invoking my command here,
+
+00:05:18.480 --> 00:05:22.520
+and look for the "Paint walls" heading.
+
+00:05:22.520 --> 00:05:28.600
+In this dialogue, you may add a scheduled date
+
+00:05:28.600 --> 00:05:30.233
+and/or a deadline date
+
+00:05:30.234 --> 00:05:34.240
+and/or a to-do statement. For this demo
+
+00:05:34.240 --> 00:05:37.640
+I only choose the to-do keyword.
+
+00:05:37.640 --> 00:05:39.400
+You notice that there is
+
+00:05:39.400 --> 00:05:41.000
+this TRIGGER property added.
+
+00:05:41.000 --> 00:05:43.280
+That's default behavior of org-edna
+
+00:05:43.280 --> 00:05:47.200
+which is managing the dependencies, in my case.
+
+00:05:47.200 --> 00:05:51.600
+In the other one, there is this BLOCKER property.
+
+00:05:51.600 --> 00:05:55.360
+It's very handy to know that those IDs
+
+00:05:55.360 --> 00:05:57.880
+might be used for jumping
+
+00:05:57.880 --> 00:06:00.640
+between those dependencies again.
+
+00:06:00.640 --> 00:06:03.600
+Those two headings don't have to be necessarily
+
+00:06:03.600 --> 00:06:05.560
+in the very same Org Mode file.
+
+00:06:05.560 --> 00:06:07.920
+They may be scattered around
+
+00:06:07.920 --> 00:06:11.000
+your Org Mode agenda files all over the place.
+
+00:06:11.000 --> 00:06:16.160
+So continuing this definition of dependency
+
+00:06:16.160 --> 00:06:19.040
+between the second and the third one...
+
+00:06:19.040 --> 00:06:23.000
+I'm using the search "Bring back stuff"...
+
+00:06:23.000 --> 00:06:24.800
+the search functionality...
+
+00:06:24.800 --> 00:06:28.800
+I choose the NEXT keyword here, its dependency.
+
+00:06:28.800 --> 00:06:32.480
+The same holds true for the last two.
+
+00:06:32.480 --> 00:06:37.400
+"Is painted", for example. I'm going to use
+
+00:06:37.400 --> 00:06:39.320
+the NEXT keyword again.
+
+00:06:39.320 --> 00:06:44.520
+I tend to use the last task of any project
+
+00:06:44.520 --> 00:06:47.120
+to close the overall project.
+
+00:06:47.120 --> 00:06:49.880
+So if I show you this one,
+
+00:06:49.880 --> 00:06:57.040
+I'm using the dependency to "Garage" project,
+
+00:06:57.040 --> 00:07:02.200
+and this time I'm using the DONE keyword.
+
+00:07:02.200 --> 00:07:04.920
+Of course, the properties
+
+00:07:04.920 --> 00:07:07.920
+look like that all the time,
+
+00:07:07.920 --> 00:07:11.640
+so there is a trigger from the first task
+
+00:07:11.640 --> 00:07:13.920
+to the second one, and there is a blocker
+
+00:07:13.920 --> 00:07:17.120
+from the second one back to the first one,
+
+00:07:17.120 --> 00:07:21.640
+and when I'm actually doing the project,
+
+00:07:21.640 --> 00:07:25.520
+I may now mark the first task as DONE,
+
+00:07:25.520 --> 00:07:28.360
+and you notice that the second one
+
+00:07:28.360 --> 00:07:31.440
+automatically gets a next keyword.
+
+00:07:31.440 --> 00:07:34.600
+This happened, of course, for all those tasks.
+
+00:07:34.600 --> 00:07:38.920
+The neat thing is when I close the last one,
+
+00:07:38.920 --> 00:07:42.760
+the overall project gets its DONE keyword as well.
+
+00:07:42.760 --> 00:07:46.360
+So this is how I'm working with
+
+00:07:46.360 --> 00:07:49.120
+projects and dependencies.
+
+00:07:49.120 --> 00:07:53.720
+Most of the time, task dependencies
+
+00:07:53.720 --> 00:07:58.160
+are not even within the same Org Mode subheading,
+
+00:07:58.160 --> 00:08:01.600
+let's say. Also, I'm using dependencies
+
+00:08:01.600 --> 00:08:03.720
+between different Org Mode files.
+
+00:08:03.720 --> 00:08:07.160
+This is a very, very cool way of defining
+
+00:08:07.160 --> 00:08:10.040
+what to do next in a project,
+
+00:08:10.040 --> 00:08:12.667
+without looking for tasks
+
+00:08:12.668 --> 00:08:15.640
+that can't be done at that stage.
+
+00:08:15.640 --> 00:08:20.240
+You can have a look at the details of the demo
+
+00:08:20.240 --> 00:08:23.800
+by checking out the files in the repository.
+
+00:08:23.800 --> 00:08:27.080
+That's it for the demo,
+
+00:08:27.080 --> 00:08:30.720
+and therefore I thank you for your patience.
+
+00:08:30.720 --> 00:08:32.160
+I wish you good luck,
+
+00:08:32.160 --> 00:08:39.520
+and I hope that I could show you one or two tricks
+
+00:08:39.520 --> 00:08:42.080
+that you can add to your Org Mode setup
+
+00:08:42.080 --> 00:08:47.040
+in order to help you with your daily work.
+
+00:08:47.040 --> 00:08:56.000
+So bye from me, till next time.
diff --git a/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--answers.vtt b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--answers.vtt
new file mode 100644
index 00000000..7f9550b2
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--answers.vtt
@@ -0,0 +1,2348 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:26.000
+ [MUSIC PLAYING]
+
+00:00:26.000 --> 00:00:36.000
+ [MUSIC PLAYING]
+
+00:00:36.000 --> 00:00:42.480
+ And so this little application--
+
+00:00:42.480 --> 00:00:46.480
+ well, I'll skip that and just kind of jump right
+
+00:00:46.480 --> 00:00:49.760
+ into my thesis for those of you that
+
+00:00:49.760 --> 00:00:53.360
+ might be planning to duck out for the RMS talk,
+
+00:00:53.360 --> 00:00:55.520
+ starting in a little bit.
+
+00:00:55.520 --> 00:00:59.360
+ So essentially, my thesis here is really
+
+00:00:59.360 --> 00:01:04.800
+ that the Emacs toolchain can easily
+
+00:01:04.800 --> 00:01:10.280
+ be combined with other skills and used in kind of a Unix
+
+00:01:10.280 --> 00:01:13.280
+ paradigm of having sort of different tools
+
+00:01:13.280 --> 00:01:14.960
+ to do different steps.
+
+00:01:14.960 --> 00:01:17.760
+ We might actually use the same tool
+
+00:01:17.760 --> 00:01:19.240
+ to implement a couple of steps.
+
+00:01:19.240 --> 00:01:22.080
+ But with that paradigm, each step
+
+00:01:22.080 --> 00:01:24.960
+ is an individual item that can be sort of dropped in
+
+00:01:24.960 --> 00:01:26.400
+ and replaced.
+
+00:01:26.400 --> 00:01:29.560
+ So over the course of the talk, hopefully I'll
+
+00:01:29.560 --> 00:01:31.080
+ come back to that thesis.
+
+00:01:31.080 --> 00:01:35.800
+ But I'll now jump back and start walking through what is
+
+00:01:35.800 --> 00:01:37.040
+ orgvm?
+
+00:01:37.040 --> 00:01:39.560
+ So this is a very simple proof of concept program.
+
+00:01:39.560 --> 00:01:44.200
+ We'll just jump over to perhaps a prettier view of the
+
+00:01:44.200 --> 00:01:44.880
+ source
+
+00:01:44.880 --> 00:01:45.520
+ code for it.
+
+00:01:45.520 --> 00:01:49.200
+ This is implemented-- oops.
+
+00:01:49.200 --> 00:01:53.160
+ There's some cruft, I think, in my local.
+
+00:01:53.160 --> 00:01:56.560
+ All right, so there's config block at the top.
+
+00:01:56.560 --> 00:01:58.120
+ And we'll be jumping back and forth
+
+00:01:58.120 --> 00:02:01.880
+ between the code and the documentation.
+
+00:02:01.880 --> 00:02:04.080
+ So the first thing I want to point out
+
+00:02:04.080 --> 00:02:05.960
+ is that this is written in Node.js.
+
+00:02:05.960 --> 00:02:08.600
+ But I think you'll find it'd be pretty trivial to implement
+
+00:02:08.600 --> 00:02:10.840
+ in any language.
+
+00:02:10.840 --> 00:02:13.960
+ Certainly, you're more than welcome to use this.
+
+00:02:13.960 --> 00:02:17.920
+ I'd be happy to accept your patches or feature requests
+
+00:02:17.920 --> 00:02:20.080
+ and things like that.
+
+00:02:20.080 --> 00:02:21.680
+ Of course, bug reports.
+
+00:02:21.680 --> 00:02:25.760
+ But I'd also encourage others to roll their own.
+
+00:02:25.760 --> 00:02:28.760
+ You might well come up with a different version of this
+
+00:02:28.760 --> 00:02:29.600
+ that's even cooler.
+
+00:02:29.600 --> 00:02:32.160
+ And we can learn from each other.
+
+00:02:32.160 --> 00:02:34.200
+ If you heard one of my talks before,
+
+00:02:34.200 --> 00:02:36.200
+ you probably recognize a common theme.
+
+00:02:36.200 --> 00:02:40.320
+ I'm a big fan of head-first development
+
+00:02:40.320 --> 00:02:43.540
+ as a way to get invested in both the tool chain and a
+
+00:02:43.540 --> 00:02:44.120
+ culture.
+
+00:02:44.120 --> 00:02:49.560
+ All right, so let's come back to orgvm.
+
+00:02:49.560 --> 00:02:52.280
+ First of all, we'll start with the itch I was trying to
+
+00:02:52.280 --> 00:02:52.840
+ scratch.
+
+00:02:52.840 --> 00:02:58.240
+ I wanted to be able to quickly use a web browser
+
+00:02:58.240 --> 00:03:00.680
+ to browse my org documents.
+
+00:03:00.680 --> 00:03:03.530
+ It's particularly handy when the documents are full of
+
+00:03:03.530 --> 00:03:03.960
+ cross
+
+00:03:03.960 --> 00:03:05.640
+ links to each other.
+
+00:03:05.640 --> 00:03:10.080
+ That meant I wanted to automatically export,
+
+00:03:10.080 --> 00:03:12.280
+ particularly to HTML.
+
+00:03:12.280 --> 00:03:17.280
+ But it made sense for me to include Markdown, PDF,
+
+00:03:17.280 --> 00:03:18.880
+ or whatever format I want.
+
+00:03:18.880 --> 00:03:22.760
+ Because many times, I'm going to look at that file
+
+00:03:22.760 --> 00:03:29.480
+ and then pop it into an email or upload it somewhere.
+
+00:03:29.480 --> 00:03:33.240
+ And then finally, it should be, therefore,
+
+00:03:33.240 --> 00:03:36.840
+ pretty easy to download the document rather than view it
+
+00:03:36.840 --> 00:03:38.320
+ once I'm done.
+
+00:03:38.320 --> 00:03:42.200
+ So let's just run a quick demo.
+
+00:03:42.200 --> 00:03:44.760
+ You'll see I'm still a Windows user.
+
+00:03:44.760 --> 00:03:45.960
+ Yeah, I'm working on it.
+
+00:03:45.960 --> 00:03:52.320
+ So all right, first thing that we're going to do
+
+00:03:52.320 --> 00:03:53.320
+ is fire up the program.
+
+00:03:53.320 --> 00:04:00.200
+ Actually, for simplicity, let's just
+
+00:04:00.200 --> 00:04:01.760
+ admit we live in a DOS world.
+
+00:04:01.760 --> 00:04:19.760
+ And as you can see, there's not much to it
+
+00:04:19.760 --> 00:04:21.520
+ to get the application running.
+
+00:04:22.680 --> 00:04:22.680
+
+
+00:04:22.680 --> 00:04:25.960
+ So with that done, then, I can run out to my local host.
+
+00:04:25.960 --> 00:04:36.780
+ And we'll just start by plugging in the name of an org file
+
+00:04:36.780 --> 00:04:37.560
+.
+
+00:04:37.560 --> 00:04:45.820
+ So I've got a little org file that I prepared that just
+
+00:04:45.820 --> 00:04:46.640
+ kind
+
+00:04:46.640 --> 00:04:49.040
+ of provides a proof of concept to this.
+
+00:04:49.040 --> 00:04:53.560
+ And you can see, as imagined, we're automatically
+
+00:04:53.560 --> 00:04:54.640
+ turning that org file.
+
+00:04:54.640 --> 00:04:56.320
+ Let's just take a quick look at it.
+
+00:04:56.320 --> 00:05:10.280
+ And here's that file now.
+
+00:05:10.280 --> 00:05:11.960
+ But you can see nothing up my sleeve.
+
+00:05:11.960 --> 00:05:14.000
+ This is a very basic org file that I
+
+00:05:14.000 --> 00:05:16.560
+ use for testing this program.
+
+00:05:16.560 --> 00:05:17.640
+ Images work.
+
+00:05:17.640 --> 00:05:21.800
+ We've got some nicely syntax highlighted code
+
+00:05:21.800 --> 00:05:25.560
+ blocks in a couple different languages.
+
+00:05:25.560 --> 00:05:29.760
+ And not really that much going on there.
+
+00:05:29.760 --> 00:05:33.760
+ All right, let's come back to the documentation.
+
+00:05:33.760 --> 00:05:36.680
+ I pretty well covered this, I think.
+
+00:05:36.680 --> 00:05:39.720
+ But you'll need a relatively recent version of Emacs.
+
+00:05:39.720 --> 00:05:43.640
+ I haven't taken any pains to make this backward compatible.
+
+00:05:43.640 --> 00:05:46.000
+ To be fair, I haven't tested it extensively.
+
+00:05:46.000 --> 00:05:50.320
+ It may well work on Emacs 26 or older versions.
+
+00:05:50.320 --> 00:05:55.120
+ I'm personally running 27.1 and 28,
+
+00:05:55.120 --> 00:05:57.080
+ as well as recent builds of 29.
+
+00:05:57.080 --> 00:06:02.560
+ There's some quick start instructions here,
+
+00:06:02.560 --> 00:06:03.900
+ which I'm going to take as read.
+
+00:06:03.900 --> 00:06:09.160
+ You probably saw the key element of this, which
+
+00:06:09.160 --> 00:06:11.920
+ involves starting the program.
+
+00:06:11.920 --> 00:06:13.520
+ You do-- I will call out Yale.
+
+00:06:13.520 --> 00:06:15.320
+ If you're trying to play with this yourself,
+
+00:06:15.320 --> 00:06:20.080
+ don't forget to run the npm install command.
+
+00:06:20.080 --> 00:06:23.240
+ That'll bring in express.js, which the JavaScript we're
+
+00:06:23.240 --> 00:06:24.920
+ about to look at is built on.
+
+00:06:24.920 --> 00:06:33.480
+ So let's just take a look at the usage patterns real quick.
+
+00:06:33.480 --> 00:06:35.920
+ To use this, we're simply giving the document name
+
+00:06:35.920 --> 00:06:42.760
+ without the org extension in whatever file path--
+
+00:06:42.760 --> 00:06:46.960
+ or I'm sorry, whatever we've configured the server
+
+00:06:46.960 --> 00:06:50.800
+ to run on, in this case, port 3000.
+
+00:06:50.800 --> 00:06:52.960
+ I also want to call attention to the fact
+
+00:06:52.960 --> 00:06:55.880
+ that nothing in this program protects you
+
+00:06:55.880 --> 00:06:57.240
+ from damaging yourself.
+
+00:06:57.240 --> 00:07:00.560
+ This isn't meant as a production capability.
+
+00:07:00.560 --> 00:07:03.290
+ This is something that's used to publish your own note
+
+00:07:03.290 --> 00:07:04.840
+ files
+
+00:07:04.840 --> 00:07:06.520
+ and roll them up to yourself.
+
+00:07:06.520 --> 00:07:08.680
+ That's something I'll definitely look at adding,
+
+00:07:08.680 --> 00:07:12.240
+ but I want people to be careful of it
+
+00:07:12.240 --> 00:07:14.720
+ while this is in an alpha state.
+
+00:07:14.720 --> 00:07:22.960
+ So the default response is HTML, and we saw that here.
+
+00:07:22.960 --> 00:07:26.240
+ But we also can modify the response format.
+
+00:07:26.240 --> 00:07:29.800
+ We're currently supporting HTML, Markdown, and PDF.
+
+00:07:29.800 --> 00:07:34.280
+ And that's really enough to select a different format.
+
+00:07:34.280 --> 00:07:36.640
+ That's really nothing more than adding--
+
+00:07:36.640 --> 00:07:45.040
+ [AUDIO OUT]
+
+00:07:45.040 --> 00:07:48.040
+ --type, OK.
+
+00:07:48.040 --> 00:07:50.680
+ Not sure what's going on there.
+
+00:07:50.680 --> 00:07:57.080
+ OK, well, there goes my demo.
+
+00:07:57.080 --> 00:07:59.440
+ Shows me for doing my talk live.
+
+00:08:03.920 --> 00:08:06.960
+ But this, fortunately, this error message
+
+00:08:06.960 --> 00:08:08.840
+ is a nice segue to the part of the talk
+
+00:08:08.840 --> 00:08:10.240
+ that I'd really like to focus on,
+
+00:08:10.240 --> 00:08:13.520
+ hopefully bringing me back to that thesis.
+
+00:08:13.520 --> 00:08:17.760
+ So as we start to look at code, what we're looking for
+
+00:08:17.760 --> 00:08:21.640
+ is really this Emacs Lisp that's getting generated here.
+
+00:08:21.640 --> 00:08:24.000
+ And you'll notice that's the stuff
+
+00:08:24.000 --> 00:08:27.600
+ I thought was important to produce as diagnostics
+
+00:08:27.600 --> 00:08:29.840
+ for the programs running as well.
+
+00:08:29.840 --> 00:08:34.000
+ So spoiler, this e-lisp is dynamically
+
+00:08:34.000 --> 00:08:35.400
+ generated by the program.
+
+00:08:35.400 --> 00:08:38.160
+ And that's really the core of the way
+
+00:08:38.160 --> 00:08:42.680
+ org VM or my org VM works.
+
+00:08:42.680 --> 00:08:47.360
+ So this should look pretty similar to the view of the code
+
+00:08:47.360 --> 00:08:48.880
+ we had a moment ago.
+
+00:08:48.880 --> 00:08:51.840
+ You can see I've got some bases.
+
+00:08:51.840 --> 00:08:53.680
+ This is all hard-coded into the program,
+
+00:08:53.680 --> 00:08:56.720
+ nothing fancy going on here.
+
+00:08:56.720 --> 00:09:00.280
+ The debug is simply controlling that diagnostic output
+
+00:09:00.280 --> 00:09:01.560
+ that we looked at.
+
+00:09:01.560 --> 00:09:04.240
+ There's some other, hopefully fairly self-explanatory
+
+00:09:04.240 --> 00:09:09.160
+ programs or properties, where to find Emacs and so forth.
+
+00:09:09.160 --> 00:09:16.320
+ And then finally, we come in to the meat of it,
+
+00:09:16.320 --> 00:09:21.840
+ the variables that are used to control what e-lisp we
+
+00:09:21.840 --> 00:09:24.280
+ can generate dynamically.
+
+00:09:24.280 --> 00:09:27.400
+ So here, we're controlling the extension
+
+00:09:27.400 --> 00:09:29.360
+ that it should look for org files.
+
+00:09:29.360 --> 00:09:31.560
+ Hopefully not too many people out there
+
+00:09:31.560 --> 00:09:34.080
+ with a weird extension for the org files,
+
+00:09:34.080 --> 00:09:37.920
+ but this should support that.
+
+00:09:37.920 --> 00:09:40.120
+ I'm afraid that is something I've been known to do.
+
+00:09:40.120 --> 00:09:49.520
+ Then we define a list of additional export types.
+
+00:09:49.520 --> 00:09:50.760
+ Here's one that ought to work.
+
+00:09:50.760 --> 00:09:53.200
+ Let's take a look at type equals org.
+
+00:09:54.720 --> 00:09:54.720
+
+
+00:09:54.720 --> 00:09:59.320
+ And, aha, it's giving us the file.
+
+00:09:59.320 --> 00:10:00.680
+ So I'm not going to open that up,
+
+00:10:00.680 --> 00:10:02.400
+ but now we can see that that's definitely
+
+00:10:02.400 --> 00:10:09.200
+ working for certain versions of working.
+
+00:10:09.200 --> 00:10:14.280
+ So this list of type parameters is
+
+00:10:14.280 --> 00:10:15.720
+ controlling the supported types.
+
+00:10:15.720 --> 00:10:18.550
+ Hopefully it should be fairly easy to add in different ones
+
+00:10:18.550 --> 00:10:18.800
+.
+
+00:10:18.800 --> 00:10:21.480
+ The fancy footwork here is just a list
+
+00:10:21.480 --> 00:10:23.480
+ of the types that we're going to be using.
+
+00:10:23.480 --> 00:10:29.320
+ The fancy footwork here involves, first of all,
+
+00:10:29.320 --> 00:10:32.240
+ there's the extension and the MIME type.
+
+00:10:32.240 --> 00:10:36.520
+ That's, as you might guess, used to control the response
+
+00:10:36.520 --> 00:10:37.040
+ content
+
+00:10:37.040 --> 00:10:38.720
+ type.
+
+00:10:38.720 --> 00:10:40.920
+ We also have this replace variable.
+
+00:10:40.920 --> 00:10:44.000
+ This prevents-- there's an optimization
+
+00:10:44.000 --> 00:10:48.840
+ to send an existing PDF or HTML file if that's already
+
+00:10:48.840 --> 00:10:53.520
+ there, but only if the original source org file hasn't
+
+00:10:53.520 --> 00:10:56.240
+ been modified since.
+
+00:10:56.240 --> 00:10:59.920
+ This replace effectively can turn that off.
+
+00:10:59.920 --> 00:11:03.040
+ If I remove the replace equals true attribute,
+
+00:11:03.040 --> 00:11:07.600
+ then I'll be prevented from overwriting that.
+
+00:11:07.600 --> 00:11:10.320
+ In other words, I'll always send a cached version.
+
+00:11:10.320 --> 00:11:13.880
+ That might be helpful if, for example, you've
+
+00:11:13.880 --> 00:11:16.560
+ got hand-tuned PDFs and you don't want to accidentally
+
+00:11:16.560 --> 00:11:17.200
+ overwrite them.
+
+00:11:19.120 --> 00:11:19.120
+
+
+00:11:19.120 --> 00:11:23.480
+ All right, let's get into the code a little bit more.
+
+00:11:23.480 --> 00:11:28.280
+ I'm going to skip past the really good stuff
+
+00:11:28.280 --> 00:11:32.520
+ and jump into the boring parts so that we have them
+
+00:11:32.520 --> 00:11:34.240
+ as context.
+
+00:11:34.240 --> 00:11:37.160
+ Here's the default path.
+
+00:11:37.160 --> 00:11:41.880
+ And it is going to send me the readme from the project--
+
+00:11:41.880 --> 00:11:47.120
+ from the project repo if I don't specify a path.
+
+00:11:47.120 --> 00:11:51.240
+ And then we have a couple of different endpoints
+
+00:11:51.240 --> 00:11:52.480
+ that we support.
+
+00:11:52.480 --> 00:11:55.560
+ We'll come back to this first one.
+
+00:11:55.560 --> 00:11:59.600
+ For now, let's start with the more normal one, which
+
+00:11:59.600 --> 00:12:01.760
+ is just giving us a file name.
+
+00:12:01.760 --> 00:12:04.160
+ So we can see we start by figuring out
+
+00:12:04.160 --> 00:12:08.520
+ what the physical file name should be called.
+
+00:12:08.520 --> 00:12:10.280
+ And assuming that that exists--
+
+00:12:15.600 --> 00:12:17.080
+ sorry, I've confused myself.
+
+00:12:17.080 --> 00:12:23.000
+ So this is the caching or the optimization
+
+00:12:23.000 --> 00:12:25.640
+ that I mentioned, sending the existing file.
+
+00:12:25.640 --> 00:12:31.360
+ This file exists is where the optimization is
+
+00:12:31.360 --> 00:12:38.680
+ that regenerates the file if the source
+
+00:12:38.680 --> 00:12:41.840
+ or document for the HTML generator has changed.
+
+00:12:45.080 --> 00:12:46.760
+ Again, this is a short talk, so I'm not
+
+00:12:46.760 --> 00:12:49.320
+ going to go into all the nuances of this JavaScript code.
+
+00:12:49.320 --> 00:12:52.800
+ It's pretty far from an Emacs-related thing.
+
+00:12:52.800 --> 00:12:56.040
+ So with that said, then, the rest of this program
+
+00:12:56.040 --> 00:12:59.360
+ is really mostly just handling the different error.
+
+00:12:59.360 --> 00:13:01.000
+ I didn't understand that type.
+
+00:13:01.000 --> 00:13:02.080
+ I don't know the document.
+
+00:13:02.080 --> 00:13:03.040
+ I failed.
+
+00:13:03.040 --> 00:13:06.480
+ Otherwise, there's the caching.
+
+00:13:06.480 --> 00:13:14.520
+ And here's really where things get interesting,
+
+00:13:14.520 --> 00:13:19.200
+ where we've generated some ELISP,
+
+00:13:19.200 --> 00:13:22.280
+ and then we're calling Emacs with that ELISP.
+
+00:13:22.280 --> 00:13:24.760
+ If everything works, we'll send the file.
+
+00:13:24.760 --> 00:13:27.800
+ If it doesn't, we'll send the 500.
+
+00:13:27.800 --> 00:13:30.920
+ And we've already seen the 500, so we know that works.
+
+00:13:30.920 --> 00:13:33.760
+ All right, let's get to the interesting part.
+
+00:13:33.760 --> 00:13:37.320
+ Sorry, one more footnote.
+
+00:13:37.320 --> 00:13:39.320
+ There is a capability built in that will
+
+00:13:39.320 --> 00:13:41.040
+ allow us to execute an org block.
+
+00:13:41.040 --> 00:13:42.840
+ Let's see if that's working in our local.
+
+00:13:44.800 --> 00:13:44.800
+
+
+00:13:44.800 --> 00:13:47.200
+ I'll remind myself how to do it.
+
+00:13:47.200 --> 00:13:49.560
+ It's run.
+
+00:13:49.560 --> 00:13:53.320
+ I think it's called test.
+
+00:13:53.320 --> 00:13:56.360
+ And that's returning a 500.
+
+00:13:56.360 --> 00:13:58.400
+ I'm suspecting that's running because I'm running
+
+00:13:58.400 --> 00:13:59.760
+ in command instead of bash.
+
+00:13:59.760 --> 00:14:06.040
+ Oh, yeah, so the failure is happening
+
+00:14:06.040 --> 00:14:07.720
+ after I generate the ELISP.
+
+00:14:07.720 --> 00:14:10.280
+ I'm pretty confident that is what the actual problem is.
+
+00:14:10.280 --> 00:14:12.760
+ If we have time, I'll jump back over there
+
+00:14:12.760 --> 00:14:19.280
+ and relaunch it in mingity-bash.
+
+00:14:19.280 --> 00:14:21.440
+ And we can see it actually work.
+
+00:14:21.440 --> 00:14:24.200
+ But this works pretty well for me on my work laptop.
+
+00:14:24.200 --> 00:14:25.860
+ I didn't have to make any changes to it.
+
+00:14:25.860 --> 00:14:28.120
+ So I have a fairly high amount of confidence,
+
+00:14:28.120 --> 00:14:32.400
+ at least in trivial cases, this works pretty well.
+
+00:14:32.400 --> 00:14:37.800
+ All right, so what I actually wanted to talk about today--
+
+00:14:37.800 --> 00:14:42.400
+ and I'm going to be kind of hand-waving around this ES5
+
+00:14:42.400 --> 00:14:46.480
+ class that I've got and kind of the way that works.
+
+00:14:46.480 --> 00:14:49.840
+ Hopefully, this will be pretty familiar to you
+
+00:14:49.840 --> 00:14:53.440
+ if you are a JavaScript programmer.
+
+00:14:53.440 --> 00:14:58.660
+ The interesting stuff comes when we want to build some LISP
+
+00:14:58.660 --> 00:14:59.000
+.
+
+00:15:01.960 --> 00:15:09.410
+ Here, you can see that I really don't have a whole lot of
+
+00:15:09.410 --> 00:15:09.720
+ code
+
+00:15:09.720 --> 00:15:11.280
+ around formatting LISP.
+
+00:15:11.280 --> 00:15:14.360
+ You can see that I've special-cased
+
+00:15:14.360 --> 00:15:19.840
+ whether the arguments that were passed
+
+00:15:19.840 --> 00:15:20.880
+ happen to be a function.
+
+00:15:20.880 --> 00:15:25.480
+ If they are, I'm going to call that function.
+
+00:15:25.480 --> 00:15:31.720
+ And then the result will be formatted as LISP.
+
+00:15:31.720 --> 00:15:35.040
+ So this would be a recursive call here.
+
+00:15:35.040 --> 00:15:40.960
+ Otherwise, I'm just going to return the arguments.
+
+00:15:40.960 --> 00:15:48.440
+ Sorry, otherwise, I will slap a pair of parentheses
+
+00:15:48.440 --> 00:15:53.440
+ around the result of walking that list
+
+00:15:53.440 --> 00:15:57.880
+ if I get formatting each element of the list of arguments
+
+00:15:57.880 --> 00:16:02.600
+ that this format LISP process calls
+
+00:16:02.600 --> 00:16:04.920
+ and separating them with spaces.
+
+00:16:04.920 --> 00:16:10.880
+ So in short form, this program walks through a list.
+
+00:16:10.880 --> 00:16:14.000
+ If the list it receives is a function,
+
+00:16:14.000 --> 00:16:16.080
+ it calls that function.
+
+00:16:16.080 --> 00:16:19.320
+ Once that's handled or otherwise,
+
+00:16:19.320 --> 00:16:22.720
+ we simply walk the list, taking the arguments,
+
+00:16:22.720 --> 00:16:26.000
+ concatenating them on strings, and finally,
+
+00:16:26.000 --> 00:16:28.560
+ wrap the results in parentheses.
+
+00:16:28.560 --> 00:16:31.760
+ So what I didn't mention there but might be obvious
+
+00:16:31.760 --> 00:16:36.120
+ is if I have a nested list, the inner list
+
+00:16:36.120 --> 00:16:38.600
+ will be subjected to the same treatment.
+
+00:16:38.600 --> 00:16:43.000
+ So this is a recursive sort of algorithm.
+
+00:16:43.000 --> 00:16:51.520
+ All right, so now when I go to export,
+
+00:16:51.520 --> 00:16:53.520
+ actually, in the interest of time,
+
+00:16:53.520 --> 00:16:55.800
+ I'm going to avoid walking through that piece of code
+
+00:16:55.800 --> 00:16:58.840
+ and let's focus instead on the more interesting part
+
+00:16:58.840 --> 00:17:02.360
+ of how that LISP gets encoded.
+
+00:17:02.360 --> 00:17:07.520
+ So coming back to the PDF is a good example here
+
+00:17:07.520 --> 00:17:10.320
+ because it's got a special case.
+
+00:17:10.320 --> 00:17:14.280
+ You can see I've specified this export fun or export
+
+00:17:14.280 --> 00:17:15.320
+ function.
+
+00:17:15.320 --> 00:17:19.560
+ That's a property none of these other types have.
+
+00:17:22.400 --> 00:17:27.280
+ And you can see it contains a meat LISP telling us
+
+00:17:27.280 --> 00:17:29.760
+ how to call the export for it.
+
+00:17:29.760 --> 00:17:32.680
+ Let's go see how that's used.
+
+00:17:32.680 --> 00:17:35.720
+ At the very end of what I just skipped over,
+
+00:17:35.720 --> 00:17:40.600
+ the detailed how the org export process works,
+
+00:17:40.600 --> 00:17:45.040
+ you'll see that I am ending with a step
+
+00:17:45.040 --> 00:17:48.000
+ to call the export function.
+
+00:17:48.000 --> 00:17:54.520
+ Here, I look to see whether I have an export function
+
+00:17:54.520 --> 00:17:55.400
+ property.
+
+00:17:55.400 --> 00:18:00.920
+ If I do, I call that function.
+
+00:18:00.920 --> 00:18:06.760
+ And if I don't, I build this list with the default org
+
+00:18:06.760 --> 00:18:14.320
+ export to file function using the file name and an output
+
+00:18:14.320 --> 00:18:15.640
+ file name.
+
+00:18:15.640 --> 00:18:18.480
+ So this, hopefully, is pretty familiar to anybody
+
+00:18:18.480 --> 00:18:22.950
+ that's manually messed around with calling org export to
+
+00:18:22.950 --> 00:18:23.560
+ file.
+
+00:18:23.560 --> 00:18:25.800
+ If it isn't, you can pretty well trust me for it.
+
+00:18:25.800 --> 00:18:28.280
+ There's nothing very special going on.
+
+00:18:28.280 --> 00:18:30.760
+ This looks rather like--
+
+00:18:30.760 --> 00:18:37.240
+ poor example there.
+
+00:18:37.240 --> 00:18:38.960
+ Let's go back to our markdown.
+
+00:18:38.960 --> 00:18:46.320
+ [AUDIO OUT]
+
+00:18:46.320 --> 00:18:47.720
+ And there, we can see--
+
+00:18:47.720 --> 00:18:49.840
+ - I'm going to make a quick announcement.
+
+00:18:49.840 --> 00:18:50.760
+ Can you hear me?
+
+00:18:50.760 --> 00:18:52.480
+ - Yes, go for it.
+
+00:18:52.480 --> 00:18:54.280
+ - OK, let me just show my face.
+
+00:18:54.280 --> 00:18:55.400
+ Oh, I'm not showing my face.
+
+00:18:55.400 --> 00:18:55.640
+ Damn it.
+
+00:18:55.640 --> 00:18:57.000
+ OK, I'll make the announcement.
+
+00:18:57.000 --> 00:18:58.600
+ You won't see my face quite yet.
+
+00:18:58.600 --> 00:19:00.360
+ We are about to get started.
+
+00:19:00.360 --> 00:19:02.440
+ Well, we actually just got started on dev
+
+00:19:02.440 --> 00:19:06.040
+ with the talk by RMS.
+
+00:19:06.040 --> 00:19:08.920
+ So if you want to hop over to watch the talk by RMS,
+
+00:19:08.920 --> 00:19:09.760
+ feel free to do so.
+
+00:19:09.760 --> 00:19:12.240
+ Otherwise, we will be continuing on Gen with Corwin
+
+00:19:12.240 --> 00:19:14.520
+ to finish his talk and have a Q&A. Corwin,
+
+00:19:14.520 --> 00:19:16.080
+ you can feel free to go now.
+
+00:19:16.080 --> 00:19:18.560
+ - OK, bye, everybody.
+
+00:19:18.560 --> 00:19:22.800
+ And for those sticking around, I'm
+
+00:19:22.800 --> 00:19:25.040
+ just going to keep pressing on with this.
+
+00:19:25.040 --> 00:19:30.240
+ In fact, I'm going to dive back into the part
+
+00:19:30.240 --> 00:19:35.400
+ that I skipped here, which is the rest of how
+
+00:19:35.400 --> 00:19:37.400
+ this export functionality works.
+
+00:19:37.400 --> 00:19:41.400
+ So just to make sure the dot is tied together,
+
+00:19:41.400 --> 00:19:44.440
+ the core of how this program works
+
+00:19:44.440 --> 00:19:49.320
+ is generating some ELISP and then passing it
+
+00:19:49.320 --> 00:19:51.680
+ to Emacs in batch mode.
+
+00:19:51.680 --> 00:19:53.280
+ So if that wasn't perfectly clear,
+
+00:19:53.280 --> 00:19:57.240
+ that's really what's going on with this program.
+
+00:19:57.240 --> 00:19:59.240
+ The rest of the implementation is just
+
+00:19:59.240 --> 00:20:01.840
+ a way to do that or certain features that
+
+00:20:01.840 --> 00:20:08.440
+ are supported in that generated ELISP, if you will.
+
+00:20:08.440 --> 00:20:11.720
+ So this is, you could say, the minimum implementation
+
+00:20:11.720 --> 00:20:16.220
+ I could come up with to create a web server for my local
+
+00:20:16.220 --> 00:20:16.560
+ org
+
+00:20:16.560 --> 00:20:17.320
+ documents.
+
+00:20:17.320 --> 00:20:24.440
+ And I will also interrupt myself to just pull up
+
+00:20:24.440 --> 00:20:28.040
+ the etherpad real quick.
+
+00:20:28.040 --> 00:20:29.600
+ Actually, if somebody is listening
+
+00:20:29.600 --> 00:20:34.720
+ and can share a link to that, I closed my browser window
+
+00:20:34.720 --> 00:20:36.400
+ with my links in it.
+
+00:20:36.400 --> 00:20:44.520
+ But sure, I'm happy to take questions at any point, Leo,
+
+00:20:44.520 --> 00:20:48.480
+ if there are any questions for me.
+
+00:20:48.480 --> 00:20:49.720
+ Are you hanging out with me?
+
+00:20:49.720 --> 00:20:53.360
+ Instead of watching RMS, you can go.
+
+00:20:53.360 --> 00:20:54.600
+ I'm teasing.
+
+00:20:54.600 --> 00:20:58.840
+ No, I mean, we know that some people can
+
+00:20:58.840 --> 00:21:00.000
+ have both streams open.
+
+00:21:00.000 --> 00:21:01.560
+ It's fine.
+
+00:21:01.560 --> 00:21:03.320
+ And right now, it's not the Q&A with RMS.
+
+00:21:03.320 --> 00:21:04.640
+ It's just the presentation.
+
+00:21:04.640 --> 00:21:07.040
+ So feel free to hang out a little longer
+
+00:21:07.040 --> 00:21:09.080
+ if you just want the live stuff.
+
+00:21:09.080 --> 00:21:09.960
+ Don't worry about it.
+
+00:21:09.960 --> 00:21:10.760
+ You're fine.
+
+00:21:10.760 --> 00:21:13.720
+ Yeah, and forgive me, everybody.
+
+00:21:13.720 --> 00:21:16.280
+ If you were hoping for a quick, succinct talk,
+
+00:21:16.280 --> 00:21:18.960
+ I happen to know I was going to be opposite RMS.
+
+00:21:18.960 --> 00:21:23.240
+ So I awarded myself the liberty of rambling.
+
+00:21:23.240 --> 00:21:26.840
+ So if you do have a question, something that I alluded to
+
+00:21:26.840 --> 00:21:29.800
+ and haven't come back to yet, you should, by all means,
+
+00:21:29.800 --> 00:21:30.320
+ prompt me.
+
+00:21:30.320 --> 00:21:33.800
+ A comment I might do--
+
+00:21:33.800 --> 00:21:35.400
+ I'm just giving you a little heads up.
+
+00:21:35.400 --> 00:21:38.640
+ I might need to go help at some point of a dev.
+
+00:21:38.640 --> 00:21:43.120
+ So if I need to do so, I will let you know right now
+
+00:21:43.120 --> 00:21:44.280
+ inside the BBB room.
+
+00:21:44.280 --> 00:21:46.160
+ And you'll be on your own to manage the chat.
+
+00:21:46.160 --> 00:21:47.960
+ And you can just talk backstage to us
+
+00:21:47.960 --> 00:21:50.240
+ to manage what we do with the stream, OK?
+
+00:21:50.240 --> 00:21:52.160
+ Yep, that should be no problem at all.
+
+00:21:52.160 --> 00:21:53.760
+ I've got my pad up now.
+
+00:21:53.760 --> 00:21:55.160
+ Thank you, Chancellor.
+
+00:21:55.160 --> 00:21:58.040
+ And I'm sorry about butchering your name there.
+
+00:21:58.040 --> 00:22:03.360
+ And yep, I've got my chat open.
+
+00:22:03.360 --> 00:22:06.400
+ And I think I'm pretty well set to self-manage.
+
+00:22:06.400 --> 00:22:07.640
+ Oh, I don't have a camera on.
+
+00:22:07.640 --> 00:22:09.360
+ So you can't see me giving you the thumbs up.
+
+00:22:09.360 --> 00:22:09.860
+ OK, good.
+
+00:22:09.860 --> 00:22:16.000
+ All right, so let's just walk through,
+
+00:22:16.000 --> 00:22:18.400
+ because it's sort of an interesting code.
+
+00:22:18.400 --> 00:22:20.560
+ Let's just take a look real quick
+
+00:22:20.560 --> 00:22:24.720
+ at how we generated our e-list here,
+
+00:22:24.720 --> 00:22:26.520
+ because it is--
+
+00:22:26.520 --> 00:22:27.640
+ there we go.
+
+00:22:27.640 --> 00:22:29.240
+ It is a little bit interesting.
+
+00:22:29.240 --> 00:22:32.040
+ So here is the method.
+
+00:22:32.040 --> 00:22:34.080
+ So I didn't get into detail on this.
+
+00:22:34.080 --> 00:22:37.680
+ But there's an ES5 class that represents an org mode
+
+00:22:37.680 --> 00:22:38.920
+ document.
+
+00:22:38.920 --> 00:22:42.260
+ It has the static debug property that, as you might imagine
+
+00:22:42.260 --> 00:22:42.400
+,
+
+00:22:42.400 --> 00:22:45.480
+ can be overridden by that debug setting
+
+00:22:45.480 --> 00:22:48.440
+ we looked at in the defaults.
+
+00:22:48.440 --> 00:22:51.440
+ We also have a static variable that--
+
+00:22:51.440 --> 00:22:57.440
+ a static property that does nothing more than getting
+
+00:22:57.440 --> 00:23:00.360
+ the path to emacs out of those defaults.
+
+00:23:00.360 --> 00:23:02.120
+ Similarly, we have a class method
+
+00:23:02.120 --> 00:23:09.520
+ to spawn out an emacs, as I mentioned, in batch mode,
+
+00:23:09.520 --> 00:23:12.720
+ eval-ing some arbitrary list that's passed in.
+
+00:23:12.720 --> 00:23:20.480
+ All right, so the type--
+
+00:23:20.480 --> 00:23:23.080
+ this is where things start to get interesting.
+
+00:23:23.080 --> 00:23:26.480
+ So this is an implementation detail,
+
+00:23:26.480 --> 00:23:30.040
+ but-- that it's written as a static method.
+
+00:23:30.040 --> 00:23:32.160
+ But essentially, what's going on here
+
+00:23:32.160 --> 00:23:34.840
+ is looking up from that type list
+
+00:23:34.840 --> 00:23:37.480
+ to try to find a type that's passed in,
+
+00:23:37.480 --> 00:23:41.240
+ and that's returning one of these blocks.
+
+00:23:41.240 --> 00:23:44.800
+ Let's say I requested HTML, which would be the default.
+
+00:23:44.800 --> 00:23:48.760
+ Then I'm going to get this set of properties back.
+
+00:23:50.760 --> 00:23:50.760
+
+
+00:23:50.760 --> 00:23:51.260
+ All right.
+
+00:23:51.260 --> 00:24:04.200
+ Essentially, this program generates a program
+
+00:24:04.200 --> 00:24:10.840
+ or a little block of executable elisp.
+
+00:24:10.840 --> 00:24:15.920
+ However, in some cases, where if the load path has
+
+00:24:15.920 --> 00:24:20.920
+ been customized in that type block,
+
+00:24:20.920 --> 00:24:25.000
+ or I think that's the only case I supported.
+
+00:24:25.000 --> 00:24:28.960
+ There was another complexity I removed.
+
+00:24:28.960 --> 00:24:32.000
+ So in that case, then I can simply
+
+00:24:32.000 --> 00:24:33.560
+ replace that program with a let.
+
+00:24:33.560 --> 00:24:41.680
+ Either way, I'm going to have everything I generate
+
+00:24:41.680 --> 00:24:45.840
+ be encapsulated in a single block.
+
+00:24:45.840 --> 00:24:49.240
+ The-- then I'm calling that format list process
+
+00:24:49.240 --> 00:24:52.760
+ that we talked about, appending to that--
+
+00:24:52.760 --> 00:25:01.680
+ or inserting into, you could say, the outer scope.
+
+00:25:01.680 --> 00:25:05.000
+ And we start by finding the file.
+
+00:25:05.000 --> 00:25:11.400
+ We then load any libraries that might be needed.
+
+00:25:11.400 --> 00:25:13.520
+ In some cases, the type might not
+
+00:25:13.520 --> 00:25:15.160
+ have any external libraries.
+
+00:25:15.160 --> 00:25:18.440
+ So we just-- so that's a no op.
+
+00:25:18.440 --> 00:25:24.120
+ And then finally, we're going to execute
+
+00:25:24.120 --> 00:25:27.160
+ that logic I mentioned before about selecting
+
+00:25:27.160 --> 00:25:30.160
+ either the default or export to file,
+
+00:25:30.160 --> 00:25:36.200
+ or else whatever elisp we've staged for exporting
+
+00:25:36.200 --> 00:25:38.160
+ that particular file type.
+
+00:25:38.160 --> 00:25:41.480
+ And again, in the case of PDF, there's
+
+00:25:41.480 --> 00:25:46.240
+ a special function that's used to trigger that export.
+
+00:25:46.240 --> 00:25:49.160
+ Or you may be aware that that's a little more complicated.
+
+00:25:49.160 --> 00:25:50.840
+ There's intermediate forms there.
+
+00:25:50.840 --> 00:25:56.760
+ All right.
+
+00:25:56.760 --> 00:26:01.320
+ So just reminding myself if there's anything else
+
+00:26:01.320 --> 00:26:03.760
+ I have to cover on background.
+
+00:26:03.760 --> 00:26:07.440
+ And I think that pretty well covers the basics.
+
+00:26:07.440 --> 00:26:09.880
+ All right, let's look at that source block execute.
+
+00:26:09.880 --> 00:26:14.600
+ This is the other use of the format list function.
+
+00:26:14.600 --> 00:26:16.800
+ So here, rather than looking at the type
+
+00:26:16.800 --> 00:26:24.720
+ and passing that through our org export method,
+
+00:26:24.720 --> 00:26:29.080
+ and then that type is used to get the list
+
+00:26:29.080 --> 00:26:30.840
+ that we want to create.
+
+00:26:30.840 --> 00:26:37.600
+ In the case of source block execute,
+
+00:26:37.600 --> 00:26:40.520
+ we're kind of rolling it a lot more by hand.
+
+00:26:40.520 --> 00:26:43.920
+ So this gives us a good chance to sort of unwind
+
+00:26:43.920 --> 00:26:49.600
+ how that list looks when it's staged as JavaScript data.
+
+00:26:49.600 --> 00:26:52.760
+ So here again, I wrap everything in a progon.
+
+00:26:52.760 --> 00:26:58.480
+ I start by preventing an interactive prompt
+
+00:26:58.480 --> 00:27:01.240
+ for the Babel execution.
+
+00:27:01.240 --> 00:27:04.960
+ And then we load languages.
+
+00:27:04.960 --> 00:27:12.240
+ This relates to another piece of our configuration
+
+00:27:12.240 --> 00:27:17.600
+ where we've specified a set of languages
+
+00:27:17.600 --> 00:27:19.920
+ that it's OK to execute.
+
+00:27:19.920 --> 00:27:24.120
+ So if that type isn't in this list,
+
+00:27:24.120 --> 00:27:28.800
+ then we won't be able to execute it in line
+
+00:27:28.800 --> 00:27:32.720
+ through our trivial little web server.
+
+00:27:32.720 --> 00:27:33.640
+ All right.
+
+00:27:33.640 --> 00:27:40.600
+ With that done, then, loading the selected language,
+
+00:27:40.600 --> 00:27:43.960
+ we then once again open the file.
+
+00:27:43.960 --> 00:27:46.360
+ And we're-- whoops.
+
+00:27:46.360 --> 00:27:51.800
+ Let bind a return value, which is
+
+00:27:51.800 --> 00:27:55.840
+ calculated by using org source block execute on the name
+
+00:27:55.840 --> 00:27:58.040
+ of the block that's given.
+
+00:27:58.040 --> 00:28:05.160
+ And then we use a temp buffer to write that out
+
+00:28:05.160 --> 00:28:06.640
+ to a temporary file.
+
+00:28:06.640 --> 00:28:08.440
+ This is actually a little clumsy,
+
+00:28:08.440 --> 00:28:12.720
+ but I haven't put the effort in to have this written out
+
+00:28:12.720 --> 00:28:17.480
+ to the standard output cleanly instead of using a temp file
+
+00:28:17.480 --> 00:28:17.840
+.
+
+00:28:17.840 --> 00:28:20.480
+ So under-- this is another example of where it may not
+
+00:28:20.480 --> 00:28:22.520
+ be production-- well, it definitely
+
+00:28:22.520 --> 00:28:27.680
+ is not production-worthy code in that under heavy load,
+
+00:28:27.680 --> 00:28:30.860
+ this would certainly break with collisions on the Babel
+
+00:28:30.860 --> 00:28:32.040
+ file,
+
+00:28:32.040 --> 00:28:34.120
+ the name of the Babel file.
+
+00:28:34.120 --> 00:28:37.480
+ In any case, once we've staged up our ELISP, which is--
+
+00:28:37.480 --> 00:28:42.560
+ this is basically variable interpolation,
+
+00:28:42.560 --> 00:28:47.680
+ then we just call emacs on that.
+
+00:28:47.680 --> 00:28:49.720
+ And if we look down to where that's called,
+
+00:28:49.720 --> 00:28:54.640
+ you can see that the org Babel file name calculated here.
+
+00:28:54.640 --> 00:28:58.040
+ [AUDIO OUT]
+
+00:28:58.040 --> 00:29:15.000
+ Is there a problem?
+
+00:29:15.000 --> 00:29:15.760
+ No, I'm fine.
+
+00:29:15.760 --> 00:29:18.000
+ I'm just lost in my code.
+
+00:29:18.000 --> 00:29:19.040
+ OK, cool.
+
+00:29:19.040 --> 00:29:21.160
+ Oh, means, oh, I need to intervene.
+
+00:29:21.160 --> 00:29:22.240
+ What is going on?
+
+00:29:22.240 --> 00:29:23.200
+ Carry on, please.
+
+00:29:23.200 --> 00:29:24.120
+ No, I'm fine, Leo.
+
+00:29:24.120 --> 00:29:25.480
+ Thank you.
+
+00:29:25.480 --> 00:29:27.280
+ All right, so then--
+
+00:29:27.280 --> 00:29:28.680
+ so you can see we get--
+
+00:29:28.680 --> 00:29:36.720
+ we send the Babel file here, which
+
+00:29:36.720 --> 00:29:41.640
+ is calculated manually.
+
+00:29:41.640 --> 00:29:45.440
+ A bit sloppy there, since I have essentially the same--
+
+00:29:45.440 --> 00:29:47.000
+ I have two different places where
+
+00:29:47.000 --> 00:29:52.480
+ I'm calculating the org doc file in two different ways.
+
+00:29:52.480 --> 00:29:54.720
+ Have I encouraged you to write your own yet?
+
+00:29:54.720 --> 00:29:56.440
+ Or send patches.
+
+00:29:56.440 --> 00:30:01.240
+ All right, so that's pretty much the nuts and bolts
+
+00:30:01.240 --> 00:30:02.400
+ of this program.
+
+00:30:02.400 --> 00:30:06.720
+ Let's go back to just seeing if we can't make it run.
+
+00:30:22.120 --> 00:30:22.620
+ All right.
+
+00:30:22.620 --> 00:30:45.880
+ All right, well, I apologize for not
+
+00:30:45.880 --> 00:30:49.560
+ having taken the time to stage my demo this morning.
+
+00:30:49.560 --> 00:30:52.680
+ I'm going to try to make it better for you.
+
+00:30:52.680 --> 00:30:59.920
+ But apparently, it's going to be non-trivial
+
+00:30:59.920 --> 00:31:04.520
+ to make the program work.
+
+00:31:04.520 --> 00:31:07.160
+ Let's just-- before I completely give up,
+
+00:31:07.160 --> 00:31:13.320
+ let's go ahead and try our Babel execute.
+
+00:31:13.320 --> 00:31:14.800
+ And that, too, is failing.
+
+00:31:14.800 --> 00:31:18.040
+ So there's something unhappy in my local world.
+
+00:31:18.040 --> 00:31:19.040
+ There it goes.
+
+00:31:19.040 --> 00:31:26.600
+ But in any case, let's go ahead and just take a look at
+
+00:31:26.600 --> 00:31:28.000
+ that.
+
+00:31:28.000 --> 00:31:30.640
+ Let's see.
+
+00:31:30.640 --> 00:31:31.600
+ Control Enter.
+
+00:31:31.600 --> 00:31:40.200
+ Let's take a look at that generated ELS
+
+00:31:40.200 --> 00:31:42.840
+ and compare it to-- whoa--
+
+00:31:42.840 --> 00:31:44.000
+ and compare it to--
+
+00:31:44.000 --> 00:31:52.400
+ I'm just going to format this manually,
+
+00:31:52.400 --> 00:31:56.000
+ because I've forgotten my key bindings to auto-format it.
+
+00:31:56.000 --> 00:32:02.240
+ There we go.
+
+00:32:02.240 --> 00:32:07.960
+ All right.
+
+00:32:07.960 --> 00:32:13.120
+ So now we can see, as promised, there's really
+
+00:32:13.120 --> 00:32:16.200
+ nothing going on here other than the interpolation
+
+00:32:16.200 --> 00:32:18.640
+ of the variables in.
+
+00:32:18.640 --> 00:32:24.360
+ We're inserting-- we're using an insert and write file
+
+00:32:24.360 --> 00:32:27.800
+ method, which is, again, rather sloppy,
+
+00:32:27.800 --> 00:32:32.040
+ to generate the text file.
+
+00:32:32.040 --> 00:32:32.880
+ All right.
+
+00:32:32.880 --> 00:32:34.760
+ Let's come back to our documentation
+
+00:32:34.760 --> 00:32:39.760
+ and see if we can put a bow on the project.
+
+00:32:39.760 --> 00:32:43.760
+ So I hope I've convinced you that this was actually
+
+00:32:43.760 --> 00:32:45.480
+ rather easy to do.
+
+00:32:45.480 --> 00:32:52.440
+ The entirety of my index.js file is 262 lines,
+
+00:32:52.440 --> 00:32:59.810
+ and that includes a good 40 of whitespace and configuration
+
+00:32:59.810 --> 00:33:00.280
+.
+
+00:33:03.760 --> 00:33:06.840
+ It has only one dependency, the Express, which
+
+00:33:06.840 --> 00:33:08.240
+ really builds the web server.
+
+00:33:08.240 --> 00:33:11.520
+ Any language you'd rather implement this in
+
+00:33:11.520 --> 00:33:14.120
+ will have a similar capability for building
+
+00:33:14.120 --> 00:33:16.280
+ some type of trivial web server.
+
+00:33:16.280 --> 00:33:18.400
+ And I think you may find--
+
+00:33:18.400 --> 00:33:22.640
+ I certainly found that a large portion of the code base
+
+00:33:22.640 --> 00:33:28.080
+ is really making the errors meaningful,
+
+00:33:28.080 --> 00:33:32.420
+ in that, in some cases, sending an appropriate HTTP status
+
+00:33:32.420 --> 00:33:34.360
+ based on what happened.
+
+00:33:34.360 --> 00:33:41.160
+ In other cases-- let's see if I've got an explicit throw
+
+00:33:41.160 --> 00:33:41.520
+ left
+
+00:33:41.520 --> 00:33:42.640
+ in here--
+
+00:33:42.640 --> 00:33:45.840
+ in other cases, just trapping different types
+
+00:33:45.840 --> 00:33:47.440
+ of failure conditions.
+
+00:33:47.440 --> 00:33:54.000
+ I'm going to look at my pad, and I do see a question here.
+
+00:33:54.000 --> 00:33:55.120
+ So let me jump in here.
+
+00:33:55.120 --> 00:33:58.880
+ [VIDEO PLAYBACK]
+
+00:33:58.880 --> 00:34:00.640
+ - Cohen, just to make sure, are you switching to Q&A?
+
+00:34:00.640 --> 00:34:02.380
+ Are you finished with your presentation?
+
+00:34:02.380 --> 00:34:05.260
+ - Well, as I said, I'm happy to take Q&A throughout.
+
+00:34:05.260 --> 00:34:08.420
+ But yes, let's say yes to that.
+
+00:34:08.420 --> 00:34:10.900
+ - OK, so Cohen, what I'm going to need to do now--
+
+00:34:10.900 --> 00:34:12.140
+ you are in charge of the room.
+
+00:34:12.140 --> 00:34:14.060
+ We are going to open up the room so
+
+00:34:14.060 --> 00:34:17.220
+ that if people have questions watching right now on Gen,
+
+00:34:17.220 --> 00:34:18.700
+ feel free to come in.
+
+00:34:18.700 --> 00:34:22.780
+ And there was something else I needed to say.
+
+00:34:22.780 --> 00:34:24.620
+ Yes, Cohen, if there's any problem,
+
+00:34:24.620 --> 00:34:25.700
+ whisper to us on Mumble.
+
+00:34:25.700 --> 00:34:27.500
+ So you might want to unmute Mumble
+
+00:34:27.500 --> 00:34:29.620
+ and be able to listen to us over there.
+
+00:34:29.620 --> 00:34:32.480
+ - I can't do that, Leo.
+
+00:34:32.480 --> 00:34:36.440
+ If I unmute, Mumble is going to bleed through.
+
+00:34:36.440 --> 00:34:36.960
+ - OK, sure.
+
+00:34:36.960 --> 00:34:41.160
+ Well, if you have any problem, type in emacsconf-org.ch
+
+00:34:41.160 --> 00:34:41.160
+annel,
+
+00:34:41.160 --> 00:34:42.520
+ and we'll be with you, OK?
+
+00:34:42.520 --> 00:34:43.520
+ - Or I'll PM somebody.
+
+00:34:43.520 --> 00:34:45.760
+ But I don't anticipate having any problems.
+
+00:34:45.760 --> 00:34:49.040
+ I'll put something in org when I run out of steam here.
+
+00:34:49.040 --> 00:34:50.400
+ How's that?
+
+00:34:50.400 --> 00:34:51.160
+ - Amazing, cool.
+
+00:34:51.160 --> 00:34:53.320
+ So I will have to leave the room, though.
+
+00:34:53.320 --> 00:34:56.800
+ I'm leaving the recording going so that we have your Q&A.
+
+00:34:56.800 --> 00:34:58.080
+ And whenever you're available--
+
+00:34:58.080 --> 00:35:02.180
+ - I'll shut off the recording when I close the room.
+
+00:35:02.180 --> 00:35:02.980
+ - OK, great.
+
+00:35:02.980 --> 00:35:04.460
+ Good luck, Cohen.
+
+00:35:04.460 --> 00:35:06.500
+ - Thank you.
+
+00:35:06.500 --> 00:35:09.780
+ All right, and if you're still with me, well, thanks.
+
+00:35:09.780 --> 00:35:13.620
+ I appreciate that.
+
+00:35:13.620 --> 00:35:16.740
+ I did offer to be opposite RMS.
+
+00:35:16.740 --> 00:35:20.060
+ And I'm in no way offended if people do want to jump over,
+
+00:35:20.060 --> 00:35:23.540
+ especially as that starts to shift over to Q&A.
+
+00:35:23.540 --> 00:35:26.980
+ I'm taking Leo's leaving as a pretty good indication
+
+00:35:26.980 --> 00:35:28.780
+ that that's happening now-ish.
+
+00:35:28.780 --> 00:35:34.750
+ So I totally understand if folks are more excited to do
+
+00:35:34.750 --> 00:35:35.020
+ that.
+
+00:35:35.020 --> 00:35:37.940
+ Meanwhile, let me just jump over to the question
+
+00:35:37.940 --> 00:35:38.660
+ that I received.
+
+00:35:38.660 --> 00:35:46.460
+ I'll show the pad here so that I save myself
+
+00:35:46.460 --> 00:35:47.860
+ reading the question out.
+
+00:35:47.860 --> 00:35:48.940
+ But I'll paraphrase it.
+
+00:35:48.940 --> 00:35:52.660
+ Why am I not running the web server in emacs?
+
+00:35:52.660 --> 00:35:54.380
+ That would be a great way to do it.
+
+00:35:54.380 --> 00:35:57.100
+ I chose to build it in Node.js because that
+
+00:35:57.100 --> 00:35:58.460
+ was trivially easy for me.
+
+00:36:22.140 --> 00:36:24.780
+ And then finally, am I using org info.js?
+
+00:36:24.780 --> 00:36:27.540
+ No, I learned about this essentially at this conference.
+
+00:36:27.540 --> 00:36:30.660
+ So that's something I'll be learning more about.
+
+00:36:30.660 --> 00:36:32.460
+ And it could well influence this project.
+
+00:36:32.460 --> 00:36:34.900
+ [TYPING]
+
+00:36:34.900 --> 00:36:56.180
+ All right, and thanks for the questions.
+
+00:36:59.020 --> 00:37:02.820
+ All right, I'm going to slow my roll just a little bit here
+
+00:37:02.820 --> 00:37:06.980
+ because I think I kind of have all the time in the world.
+
+00:37:06.980 --> 00:37:11.540
+ I will be wrapping up within about 15 or 20 minutes
+
+00:37:11.540 --> 00:37:15.620
+ at the latest just to avoid stressing out
+
+00:37:15.620 --> 00:37:19.100
+ my fellow organizers, especially Leo and Sasha that
+
+00:37:19.100 --> 00:37:22.260
+ have the bulk of the heavy lifting this year.
+
+00:37:22.260 --> 00:37:26.820
+ And amen, and really, thanks all to everybody.
+
+00:37:26.820 --> 00:37:29.540
+ God, the nicest part of doing my own talk
+
+00:37:29.540 --> 00:37:31.980
+ is that I get to say that.
+
+00:37:31.980 --> 00:37:35.460
+ It's just so much fun to contribute to emacsConf.
+
+00:37:35.460 --> 00:37:38.740
+ And if you're at all interested, there's
+
+00:37:38.740 --> 00:37:43.100
+ plenty of completely backstage, behind the curtain role.
+
+00:37:43.100 --> 00:37:45.340
+ Behind the curtain roles doesn't mean
+
+00:37:45.340 --> 00:37:49.020
+ you have to be somebody that likes talking or being
+
+00:37:49.020 --> 00:37:50.060
+ on webcam.
+
+00:37:50.060 --> 00:37:52.300
+ Sorry that my camera isn't working this year.
+
+00:37:52.300 --> 00:37:53.980
+ I spent quite a while fussing with that
+
+00:37:53.980 --> 00:37:56.740
+ and lost all my time to get my prereq working.
+
+00:37:56.740 --> 00:38:10.140
+ All right, so trying to think where I can take us
+
+00:38:10.140 --> 00:38:11.540
+ without my demo working.
+
+00:38:11.540 --> 00:38:14.540
+ I was really hoping to show the org Babel piece.
+
+00:38:14.540 --> 00:38:15.580
+ That's really fun.
+
+00:38:15.580 --> 00:38:20.420
+ So let me just mention briefly how I'm using this at work.
+
+00:38:20.420 --> 00:38:25.980
+ So at work, I'll have some type of org document.
+
+00:38:25.980 --> 00:38:27.700
+ And usually, it's a project.
+
+00:38:27.700 --> 00:38:32.900
+ So the title of the document is My Project.
+
+00:38:32.900 --> 00:38:37.820
+ And then I'll have a requirements section.
+
+00:38:37.820 --> 00:38:43.540
+ And I'll have a meeting notes section.
+
+00:38:43.540 --> 00:38:44.980
+ That's probably the key thing.
+
+00:38:44.980 --> 00:38:49.540
+ And then as the project goes on, I'll start having--
+
+00:38:49.540 --> 00:38:50.740
+ I'm a solutions architect.
+
+00:38:50.740 --> 00:38:55.420
+ So my job is formalizing design in large part.
+
+00:38:55.420 --> 00:39:01.740
+ So then I'll have a design documents section.
+
+00:39:01.740 --> 00:39:05.020
+ And this is where I'll be doing a lot of my work.
+
+00:39:05.020 --> 00:39:07.220
+ So I'll start out saying--
+
+00:39:07.220 --> 00:39:26.620
+ [AUDIO OUT]
+
+00:39:26.620 --> 00:39:29.340
+ And maybe Bob is a subject matter expert
+
+00:39:29.340 --> 00:39:32.460
+ whose buy-in I need to have on how we're going
+
+00:39:32.460 --> 00:39:34.820
+ to do the high-level design.
+
+00:39:34.820 --> 00:39:38.470
+ Maybe a lead engineer or a dev manager or something like
+
+00:39:38.470 --> 00:39:39.460
+ that.
+
+00:39:39.460 --> 00:39:43.580
+ All right, as my work goes on, then this
+
+00:39:43.580 --> 00:39:47.620
+ will start getting into more detail.
+
+00:39:47.620 --> 00:40:16.620
+ [AUDIO OUT]
+
+00:40:16.620 --> 00:40:18.660
+ And things of this nature.
+
+00:40:18.660 --> 00:40:20.180
+ As things get further and further,
+
+00:40:20.180 --> 00:40:21.740
+ I'll actually have documentation
+
+00:40:21.740 --> 00:40:22.820
+ that I'm adding in here.
+
+00:40:22.820 --> 00:40:28.900
+ Oh, I see.
+
+00:40:28.900 --> 00:40:29.740
+ It's a big mess.
+
+00:40:29.740 --> 00:40:32.140
+ All right, well, we'll just reuse this.
+
+00:40:32.140 --> 00:40:40.380
+ So I can insert those all in line.
+
+00:40:40.380 --> 00:40:44.140
+ And now for the fun part, let's see if the most trivial
+
+00:40:44.140 --> 00:40:44.460
+ case
+
+00:40:44.460 --> 00:40:45.460
+ is working here.
+
+00:40:47.460 --> 00:40:47.460
+
+
+00:40:47.460 --> 00:40:49.940
+ [CLICK]
+
+00:40:49.940 --> 00:40:51.180
+ No.
+
+00:40:51.180 --> 00:40:52.900
+ All right, completely broken.
+
+00:40:52.900 --> 00:40:57.260
+ Let me drag.
+
+00:40:57.260 --> 00:41:05.180
+ All right, well, apologies again for the poor quality
+
+00:41:05.180 --> 00:41:06.260
+ of my demo today.
+
+00:41:06.260 --> 00:41:13.900
+ And let me just look real quick at my Etherpad once more.
+
+00:41:13.900 --> 00:41:16.820
+ And I'll glance at BBB to see if there's anybody
+
+00:41:16.820 --> 00:41:18.140
+ jumping in with questions.
+
+00:41:18.140 --> 00:41:23.740
+ And then I'll go back to IRC and look for questions there.
+
+00:41:23.740 --> 00:41:33.180
+ OK, and I don't see any additional questions on the pad.
+
+00:41:33.180 --> 00:41:35.780
+ I'm just going to scan IRC real quick.
+
+00:41:35.780 --> 00:41:42.460
+ I suspect that the TreeSitter comment isn't for me.
+
+00:41:42.460 --> 00:41:44.900
+ [CHUCKLES]
+
+00:41:44.900 --> 00:41:56.620
+ All right, and I'm not seeing a lot of questions there.
+
+00:41:56.620 --> 00:42:04.340
+ So I'm just going to vamp for just a minute or two.
+
+00:42:04.340 --> 00:42:07.980
+ As I mentioned, I'm a conference volunteer.
+
+00:42:07.980 --> 00:42:09.700
+ This is my third year volunteering
+
+00:42:09.700 --> 00:42:11.940
+ with the conference.
+
+00:42:11.940 --> 00:42:15.140
+ And probably if you take one thing away from my talk,
+
+00:42:15.140 --> 00:42:17.740
+ it should be I really like volunteering
+
+00:42:17.740 --> 00:42:18.500
+ for the conference.
+
+00:42:18.500 --> 00:42:19.900
+ It's fun.
+
+00:42:19.900 --> 00:42:23.500
+ It makes me feel sort of close to the pulse.
+
+00:42:23.500 --> 00:42:26.660
+ And it gives me a chance to just interact
+
+00:42:26.660 --> 00:42:29.260
+ with people that have very different perspectives
+
+00:42:29.260 --> 00:42:32.740
+ on Emacs, which is something that I really value a lot.
+
+00:42:32.740 --> 00:42:40.220
+ Emacs, like anything else sort of in the internet world,
+
+00:42:40.220 --> 00:42:42.940
+ has a real echo chamber factor.
+
+00:42:42.940 --> 00:42:47.660
+ If you do or don't use Package, you probably
+
+00:42:47.660 --> 00:42:49.380
+ interact with a lot of people that
+
+00:42:49.380 --> 00:42:53.500
+ feel the same way about that.
+
+00:42:53.500 --> 00:42:57.420
+ And so I really recommend volunteering for EmacsConf
+
+00:42:57.420 --> 00:43:01.340
+ as a way to sort of mix it up and get
+
+00:43:01.340 --> 00:43:05.250
+ to know people that may not use Emacs the same way that you
+
+00:43:05.250 --> 00:43:05.540
+ do.
+
+00:43:08.380 --> 00:43:10.420
+ Or perhaps more on topic, though,
+
+00:43:10.420 --> 00:43:14.300
+ the log line for this talk is it's really quite easy
+
+00:43:14.300 --> 00:43:20.760
+ to build a program that uses Emacs in a pipeline capability
+
+00:43:20.760 --> 00:43:20.980
+.
+
+00:43:20.980 --> 00:43:23.780
+ I think there's a ton of opportunity in this space.
+
+00:43:23.780 --> 00:43:27.700
+ This particular example is just a trivial web server
+
+00:43:27.700 --> 00:43:29.540
+ written
+
+00:43:29.540 --> 00:43:30.780
+ using Node.js.
+
+00:43:30.780 --> 00:43:39.660
+ But as was pointed out, we could have used LNode as a web
+
+00:43:39.660 --> 00:43:40.060
+ server
+
+00:43:40.060 --> 00:43:44.060
+ and done the entire thing within Emacs Lisp.
+
+00:43:44.060 --> 00:43:49.980
+ Or really, almost any technology would get us this
+
+00:43:49.980 --> 00:43:52.900
+ capability.
+
+00:43:52.900 --> 00:43:54.660
+ From an implementation standpoint,
+
+00:43:54.660 --> 00:43:59.270
+ I had a lot of fun building this trivial little e-lisp pars
+
+00:43:59.270 --> 00:43:59.580
+er.
+
+00:43:59.580 --> 00:44:03.220
+ And I'm rather pleased with the fact
+
+00:44:03.220 --> 00:44:07.340
+ that the entirety of that--
+
+00:44:07.340 --> 00:44:14.180
+ the entire algorithm for turning JavaScript or JSON data,
+
+00:44:14.180 --> 00:44:20.420
+ we could say, into e-lisp is really a one-liner.
+
+00:44:20.420 --> 00:44:25.820
+ Albeit a nasty one-liner, that was pretty cool
+
+00:44:25.820 --> 00:44:28.180
+ to discover how simple that was.
+
+00:44:28.180 --> 00:44:31.220
+ So in my mind, that opens up a lot of possibility.
+
+00:44:31.220 --> 00:44:32.940
+ If it's this easy in JavaScript, I
+
+00:44:32.940 --> 00:44:35.700
+ wouldn't expect it to be hard, any more difficult
+
+00:44:35.700 --> 00:44:36.860
+ in your favorite language.
+
+00:44:36.860 --> 00:44:41.140
+ Glance one more time to see if there
+
+00:44:41.140 --> 00:44:42.940
+ happen to be any other questions.
+
+00:44:42.940 --> 00:44:47.300
+ And not seeing any, I'm going to go ahead and start
+
+00:44:47.300 --> 00:44:49.500
+ wrapping up my chat now.
+
+00:44:49.500 --> 00:44:51.620
+ It will take me a couple of minutes to do that.
+
+00:44:51.620 --> 00:44:54.580
+ So if you do have any other questions that you
+
+00:44:54.580 --> 00:44:56.460
+ want to drop into the pad or any comments,
+
+00:44:56.460 --> 00:44:59.740
+ you're more than welcome to hit me with those
+
+00:44:59.740 --> 00:45:03.820
+ as I coordinate closing this chat, this talk,
+
+00:45:03.820 --> 00:45:06.100
+ with the organizer team.
+
+00:45:06.100 --> 00:45:09.580
+ [AUDIO OUT]
+
+00:45:09.580 --> 00:45:12.580
+ [AUDIO OUT]
+
+00:45:14.580 --> 00:45:14.580
+
+
+00:45:14.580 --> 00:45:17.580
+ [AUDIO OUT]
+
+00:45:17.580 --> 00:45:20.580
+ [AUDIO OUT]
+
+00:45:22.580 --> 00:45:22.580
+
+
+00:45:22.580 --> 00:45:25.580
+ [AUDIO OUT]
+
+00:45:25.580 --> 00:45:33.580
+ [AUDIO OUT]
+
+00:45:33.580 --> 00:45:44.580
+ [AUDIO OUT]
+
+00:45:44.580 --> 00:45:47.620
+ [AUDIO OUT]
+
+00:45:47.620 --> 00:45:50.620
+ [AUDIO OUT]
+
+00:45:50.620 --> 00:45:53.620
+ [AUDIO OUT]
+
+00:45:53.620 --> 00:45:56.620
+ [AUDIO OUT]
+
+00:45:56.620 --> 00:45:59.620
+ [AUDIO OUT]
+
+00:46:01.620 --> 00:46:01.620
+
+
+00:46:01.620 --> 00:46:04.620
+ [AUDIO OUT]
+
diff --git a/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt
new file mode 100644
index 00000000..b1835675
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt
@@ -0,0 +1,80 @@
+WEBVTT
+
+
+00:00:36.000 --> 00:01:31.080
+Introduction
+
+00:01:31.080 --> 00:02:01.880
+What is orgvm?
+
+00:02:01.880 --> 00:02:49.560
+Nodejs
+
+00:02:49.560 --> 00:03:38.320
+The itch I was trying to scratch
+
+00:03:38.320 --> 00:05:29.760
+Demo
+
+00:05:29.760 --> 00:06:24.920
+Needs a relatively recent version of Emacs
+
+00:06:24.920 --> 00:08:13.520
+Usage patterns
+
+00:08:13.520 --> 00:09:09.160
+Emacs Lisp
+
+00:09:09.160 --> 00:10:38.720
+Variables
+
+00:10:38.720 --> 00:11:17.200
+Replace
+
+00:11:19.120 --> 00:13:06.480
+Getting into the code some more
+
+00:13:06.480 --> 00:13:37.320
+Generating Elisp
+
+00:13:37.320 --> 00:14:32.400
+Org blocks
+
+00:14:32.400 --> 00:16:43.000
+Building some Lisp
+
+00:16:43.000 --> 00:19:25.040
+How Elisp gets encoded
+
+00:19:25.040 --> 00:22:09.860
+How the export works
+
+00:22:09.860 --> 00:26:07.440
+Walking through the code
+
+00:26:07.440 --> 00:32:39.760
+Executing the source block
+
+00:32:39.760 --> 00:33:55.120
+Conclusion
+
+00:33:58.880 --> 00:35:48.940
+Questions and answers
+
+00:35:48.940 --> 00:35:58.460
+Why am I not running the web server in Emacs?
+
+00:36:22.140 --> 00:37:35.460
+Is this using org-info-js?
+
+00:37:35.460 --> 00:38:15.580
+EmacsConf
+
+00:38:15.580 --> 00:42:04.340
+How I'm using this at work
+
+00:42:04.340 --> 00:43:05.540
+Volunteering for EmacsConf
+
+00:43:08.380 --> 00:45:06.100
+It's easy to build a program that uses Emacs in the pipeline
diff --git a/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt
new file mode 100644
index 00000000..7ee7fca6
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt
@@ -0,0 +1,2258 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:36.000 --> 00:00:42.480
+And so this little application--
+
+00:00:42.480 --> 00:00:42.503
+well, I'll skip that and just kind of
+
+00:00:42.504 --> 00:00:49.142
+jump right into my thesis for those of you
+
+00:00:49.143 --> 00:00:53.360
+that might be planning to duck out for the RMS talk,
+
+00:00:53.360 --> 00:00:55.520
+starting in a little bit.
+
+00:00:55.520 --> 00:00:55.545
+So essentially, my thesis here is really that
+
+00:00:55.546 --> 00:00:59.378
+the Emacs toolchain can easily be combined
+
+00:00:59.379 --> 00:01:08.793
+with other skills and used in kind of
+
+00:01:08.794 --> 00:01:13.280
+a Unix paradigm of having sort of different tools
+
+00:01:13.280 --> 00:01:14.960
+to do different steps.
+
+00:01:14.960 --> 00:01:17.760
+We might actually use the same tool
+
+00:01:17.760 --> 00:01:19.240
+to implement a couple of steps.
+
+00:01:19.240 --> 00:01:22.080
+But with that paradigm, each step
+
+00:01:22.080 --> 00:01:22.086
+is an individual item that can be sort of
+
+00:01:22.087 --> 00:01:26.400
+dropped in and replaced.
+
+00:01:26.400 --> 00:01:26.420
+So over the course of the talk,
+
+00:01:26.421 --> 00:01:31.080
+hopefully I'll come back to that thesis.
+
+NOTE What is orgvm?
+
+00:01:31.080 --> 00:01:31.086
+But I'll now jump back and start walking through
+
+00:01:31.087 --> 00:01:37.040
+what is orgvm?
+
+00:01:37.040 --> 00:01:39.560
+So this is a very simple proof of concept program.
+
+00:01:39.560 --> 00:01:39.586
+We'll just jump over to perhaps
+
+00:01:39.587 --> 00:01:45.520
+a prettier view of the source code for it.
+
+00:01:45.520 --> 00:01:49.200
+This is implemented-- oops.
+
+00:01:49.200 --> 00:01:53.160
+There's some cruft, I think, in my local.
+
+00:01:53.160 --> 00:01:56.560
+All right, so this config block at the top...
+
+00:01:56.560 --> 00:01:58.120
+And we'll be jumping back and forth
+
+00:01:58.120 --> 00:02:01.880
+between the code and the documentation.
+
+NOTE Nodejs
+
+00:02:01.880 --> 00:02:04.080
+So the first thing I want to point out
+
+00:02:04.080 --> 00:02:05.960
+is that this is written in Node.js,
+
+00:02:05.960 --> 00:02:08.600
+but I think you'll find it'd be pretty trivial to implement
+
+00:02:08.600 --> 00:02:10.840
+in any language.
+
+00:02:10.840 --> 00:02:13.960
+Certainly, you're more than welcome to use this.
+
+00:02:13.960 --> 00:02:17.920
+I'd be happy to accept your patches or feature requests
+
+00:02:17.920 --> 00:02:20.080
+and things like that.
+
+00:02:20.080 --> 00:02:21.680
+Of course, bug reports.
+
+00:02:21.680 --> 00:02:25.760
+But I'd also encourage others to roll their own.
+
+00:02:25.760 --> 00:02:28.760
+You might well come up with a different version of this
+
+00:02:28.760 --> 00:02:29.600
+that's even cooler.
+
+00:02:29.600 --> 00:02:32.160
+And we can learn from each other.
+
+00:02:32.160 --> 00:02:34.200
+If you heard one of my talks before,
+
+00:02:34.200 --> 00:02:36.200
+you probably recognize a common theme.
+
+00:02:36.200 --> 00:02:40.320
+I'm a big fan of head-first development
+
+00:02:40.320 --> 00:02:40.336
+as a way to get invested in both
+
+00:02:40.337 --> 00:02:44.120
+the tool chain and a culture.
+
+00:02:44.120 --> 00:02:49.560
+All right, so let's come back to orgvm.
+
+NOTE The itch I was trying to scratch
+
+00:02:49.560 --> 00:02:49.586
+First of all, we'll start with
+
+00:02:49.587 --> 00:02:52.840
+the itch I was trying to scratch.
+
+00:02:52.840 --> 00:02:58.240
+I wanted to be able to quickly use a web browser
+
+00:02:58.240 --> 00:03:00.680
+to browse my Org documents.
+
+00:03:00.680 --> 00:03:01.420
+It's particularly handy when the documents
+
+00:03:01.421 --> 00:03:05.640
+are full of cross links to each other.
+
+00:03:05.640 --> 00:03:10.080
+That meant I wanted to automatically export,
+
+00:03:10.080 --> 00:03:12.280
+particularly to HTML.
+
+00:03:12.280 --> 00:03:17.280
+But it made sense for me to include Markdown, PDF,
+
+00:03:17.280 --> 00:03:18.880
+or whatever format I want.
+
+00:03:18.880 --> 00:03:22.760
+Because many times, I'm going to look at that file
+
+00:03:22.760 --> 00:03:29.480
+and then pop it into an email or upload it somewhere.
+
+00:03:29.480 --> 00:03:33.240
+And then finally, it should be, therefore,
+
+00:03:33.240 --> 00:03:33.753
+pretty easy to download the document
+
+00:03:33.754 --> 00:03:38.320
+rather than view it, once I'm done.
+
+NOTE Demo
+
+00:03:38.320 --> 00:03:42.200
+So let's just run a quick demo.
+
+00:03:42.200 --> 00:03:44.760
+You'll see I'm still a Windows user.
+
+00:03:44.760 --> 00:03:45.960
+Yeah, I'm working on it.
+
+00:03:45.960 --> 00:03:52.320
+So all right, first thing that we're going to do
+
+00:03:52.320 --> 00:03:53.320
+is fire up the program.
+
+00:03:53.320 --> 00:04:00.200
+Actually, for simplicity, let's just
+
+00:04:00.200 --> 00:04:01.760
+admit we live in a DOS world.
+
+00:04:01.760 --> 00:04:19.760
+And as you can see, there's not much to it
+
+00:04:19.760 --> 00:04:21.520
+to get the application running.
+
+00:04:22.680 --> 00:04:25.960
+So with that done, then, I can run out to my localhost.
+
+00:04:25.960 --> 00:04:36.780
+And we'll just start by plugging in the name of an Org file.
+
+00:04:37.560 --> 00:04:37.586
+So I've got a little Org file that I prepared
+
+00:04:37.587 --> 00:04:49.040
+that just kind of provides a proof of concept to this.
+
+00:04:49.040 --> 00:04:53.560
+And you can see, as imagined, we're automatically
+
+00:04:53.560 --> 00:04:54.640
+turning that Org file...
+
+00:04:54.640 --> 00:04:56.320
+Let's just take a quick look at it.
+
+00:04:56.320 --> 00:05:10.280
+And here's that file now.
+
+00:05:10.280 --> 00:05:11.960
+You can see, nothing up my sleeve.
+
+00:05:11.960 --> 00:05:11.961
+This is a very basic Org file
+
+00:05:11.962 --> 00:05:16.560
+that I use for testing this program.
+
+00:05:16.560 --> 00:05:17.640
+Images work.
+
+00:05:17.640 --> 00:05:21.836
+We've got some nicely syntax-highlighted code blocks
+
+00:05:21.837 --> 00:05:25.560
+in a couple different languages,
+
+00:05:25.560 --> 00:05:29.760
+and not really that much going on there.
+
+NOTE Needs a relatively recent version of Emacs
+
+00:05:29.760 --> 00:05:33.760
+All right, let's come back to the documentation.
+
+00:05:33.760 --> 00:05:36.680
+I pretty well covered this, I think.
+
+00:05:36.680 --> 00:05:39.720
+But you'll need a relatively recent version of Emacs.
+
+00:05:39.720 --> 00:05:43.640
+I haven't taken any pains to make this backward compatible.
+
+00:05:43.640 --> 00:05:46.000
+To be fair, I haven't tested it extensively.
+
+00:05:46.000 --> 00:05:50.320
+It may well work on Emacs 26 or older versions.
+
+00:05:50.320 --> 00:05:55.120
+I'm personally running 27.1 and 28,
+
+00:05:55.120 --> 00:05:57.080
+as well as recent builds of 29.
+
+00:05:57.080 --> 00:06:02.560
+There's some quick start instructions here,
+
+00:06:02.560 --> 00:06:03.900
+which I'm going to take as read.
+
+00:06:03.900 --> 00:06:08.600
+You probably saw the key element of this,
+
+00:06:08.601 --> 00:06:11.920
+which involves starting the program.
+
+00:06:11.920 --> 00:06:13.520
+You do-- I will call out Yale.
+
+00:06:13.520 --> 00:06:15.320
+If you're trying to play with this yourself,
+
+00:06:15.320 --> 00:06:20.080
+don't forget to run the npm install command.
+
+00:06:20.080 --> 00:06:20.086
+That'll bring in express.js,
+
+00:06:20.087 --> 00:06:24.920
+which the JavaScript we're about to look at is built on.
+
+NOTE Usage patterns
+
+00:06:24.920 --> 00:06:33.480
+So let's just take a look at the usage patterns real quick.
+
+00:06:33.480 --> 00:06:35.920
+To use this, we're simply giving the document name
+
+00:06:35.920 --> 00:06:42.760
+without the .org extension in whatever file path--
+
+00:06:42.760 --> 00:06:46.960
+or I'm sorry, whatever we've configured the server
+
+00:06:46.960 --> 00:06:50.800
+to run on, in this case, port 3000.
+
+00:06:50.800 --> 00:06:52.960
+I also want to call attention to the fact
+
+00:06:52.960 --> 00:06:55.880
+that nothing in this program protects you
+
+00:06:55.880 --> 00:06:57.240
+from damaging yourself.
+
+00:06:57.240 --> 00:07:00.560
+This isn't meant as a production capability.
+
+00:07:00.560 --> 00:07:00.586
+This is something that's used to publish
+
+00:07:00.587 --> 00:07:04.840
+your own note files
+
+00:07:04.840 --> 00:07:06.520
+and roll them out to yourself.
+
+00:07:06.520 --> 00:07:08.680
+That's something I'll definitely look at adding,
+
+00:07:08.680 --> 00:07:12.240
+but I want people to be careful of it
+
+00:07:12.240 --> 00:07:14.720
+while this is in an alpha state.
+
+00:07:14.720 --> 00:07:22.960
+So the default response is HTML, and we saw that here.
+
+00:07:22.960 --> 00:07:26.240
+But we also can modify the response format.
+
+00:07:26.240 --> 00:07:29.800
+We're currently supporting HTML, Markdown, and PDF.
+
+00:07:29.800 --> 00:07:34.280
+And that's really enough to select a different format.
+
+00:07:34.280 --> 00:07:48.040
+That's really nothing more than adding type. Okay.
+
+00:07:48.040 --> 00:07:50.680
+Not sure what's going on there.
+
+00:07:50.680 --> 00:07:57.080
+Okay, well, there goes my demo.
+
+00:07:57.080 --> 00:07:59.440
+Shows me for doing my talk live.
+
+00:08:03.920 --> 00:08:06.960
+But this, fortunately, this error message
+
+00:08:06.960 --> 00:08:08.840
+is a nice segue to the part of the talk
+
+00:08:08.840 --> 00:08:10.240
+that I'd really like to focus on,
+
+00:08:10.240 --> 00:08:13.520
+hopefully bringing me back to that thesis.
+
+NOTE Emacs Lisp
+
+00:08:13.520 --> 00:08:17.760
+So as we start to look at code, what we're looking for
+
+00:08:17.760 --> 00:08:21.640
+is really this Emacs Lisp that's getting generated here.
+
+00:08:21.640 --> 00:08:24.000
+And you'll notice that's the stuff
+
+00:08:24.000 --> 00:08:27.600
+I thought was important to produce as diagnostics
+
+00:08:27.600 --> 00:08:29.840
+for the programs running as well.
+
+00:08:29.840 --> 00:08:34.000
+So, spoiler, this Elisp is dynamically
+
+00:08:34.000 --> 00:08:35.400
+generated by the program.
+
+00:08:35.400 --> 00:08:38.160
+And that's really the core of the way
+
+00:08:38.160 --> 00:08:42.680
+orgvm or my orgvm works.
+
+00:08:42.680 --> 00:08:47.360
+So this should look pretty similar to the view of the code
+
+00:08:47.360 --> 00:08:48.880
+we had a moment ago.
+
+00:08:48.880 --> 00:08:51.840
+You can see I've got some bases.
+
+00:08:51.840 --> 00:08:53.680
+This is all hard-coded into the program,
+
+00:08:53.680 --> 00:08:56.720
+nothing fancy going on here.
+
+00:08:56.720 --> 00:09:00.280
+The debug is simply controlling that diagnostic output
+
+00:09:00.280 --> 00:09:01.560
+that we looked at.
+
+00:09:01.560 --> 00:09:04.240
+There's some other, hopefully fairly self-explanatory
+
+00:09:04.240 --> 00:09:09.160
+programs or properties, where to find Emacs and so forth.
+
+NOTE Variables
+
+00:09:09.160 --> 00:09:16.320
+And then finally, we come in to the meat of it,
+
+00:09:16.320 --> 00:09:16.336
+the variables that are used to control what Elisp
+
+00:09:16.337 --> 00:09:24.280
+we can generate dynamically.
+
+00:09:24.280 --> 00:09:27.400
+So here, we're controlling the extension
+
+00:09:27.400 --> 00:09:29.360
+that it should look for Org files.
+
+00:09:29.360 --> 00:09:31.560
+Hopefully not too many people out there
+
+00:09:31.560 --> 00:09:34.080
+with a weird extension for the Org files,
+
+00:09:34.080 --> 00:09:37.920
+but this should support that.
+
+00:09:37.920 --> 00:09:40.120
+I'm afraid that is something I've been known to do.
+
+00:09:40.120 --> 00:09:49.520
+Then we define a list of additional export types.
+
+00:09:49.520 --> 00:09:50.760
+Here's one that ought to work.
+
+00:09:50.760 --> 00:09:53.200
+Let's take a look at type=org.
+
+00:09:54.720 --> 00:09:59.320
+And, aha, it's giving us the file.
+
+00:09:59.320 --> 00:10:00.680
+So I'm not going to open that up,
+
+00:10:00.680 --> 00:10:02.420
+but now we can see that that's definitely working,
+
+00:10:02.421 --> 00:10:09.200
+for certain versions of working.
+
+00:10:09.200 --> 00:10:14.280
+So this list of type parameters is
+
+00:10:14.280 --> 00:10:15.720
+controlling the supported types.
+
+00:10:15.720 --> 00:10:18.550
+Hopefully it should be fairly easy to add in different ones.
+
+00:10:18.800 --> 00:10:21.480
+The fancy footwork here is just a list
+
+00:10:21.480 --> 00:10:23.480
+of the types that we're going to be using.
+
+00:10:23.480 --> 00:10:29.320
+The fancy footwork here involves, first of all,
+
+00:10:29.320 --> 00:10:32.240
+there's the extension and the MIME type.
+
+00:10:32.240 --> 00:10:32.253
+That's, as you might guess, used to control
+
+00:10:32.254 --> 00:10:38.720
+the response content type.
+
+NOTE Replace
+
+00:10:38.720 --> 00:10:40.920
+We also have this replace variable.
+
+00:10:40.920 --> 00:10:44.000
+This prevents-- there's an optimization
+
+00:10:44.000 --> 00:10:48.836
+to send an existing PDF or HTML file
+
+00:10:48.837 --> 00:10:50.463
+if that's already there,
+
+00:10:50.464 --> 00:10:51.003
+but only if the original source Org file
+
+00:10:51.004 --> 00:10:56.240
+hasn't been modified since.
+
+00:10:56.240 --> 00:10:59.920
+This `replace` effectively can turn that off.
+
+00:10:59.920 --> 00:11:03.040
+If I remove the `replace: true` attribute,
+
+00:11:03.040 --> 00:11:07.600
+then I'll be prevented from overwriting that.
+
+00:11:07.600 --> 00:11:10.320
+In other words, I'll always send a cached version.
+
+00:11:10.320 --> 00:11:13.878
+That might be helpful if, for example,
+
+00:11:13.879 --> 00:11:15.065
+you've got hand-tuned PDFs
+
+00:11:15.066 --> 00:11:17.200
+and you don't want to accidentally overwrite them.
+
+NOTE Getting into the code some more
+
+00:11:19.120 --> 00:11:23.480
+All right, let's get into the code a little bit more.
+
+00:11:23.480 --> 00:11:28.280
+I'm going to skip past the really good stuff
+
+00:11:28.280 --> 00:11:28.295
+and jump into the boring parts
+
+00:11:28.296 --> 00:11:34.240
+so that we have them as context.
+
+00:11:34.240 --> 00:11:37.160
+Here's the default path.
+
+00:11:37.160 --> 00:11:41.880
+And it is going to send me the readme from the project--
+
+00:11:41.880 --> 00:11:47.120
+from the project repo if I don't specify a path.
+
+00:11:47.120 --> 00:11:51.240
+And then we have a couple of different endpoints
+
+00:11:51.240 --> 00:11:52.480
+that we support.
+
+00:11:52.480 --> 00:11:55.560
+We'll come back to this first one.
+
+00:11:55.560 --> 00:11:55.586
+For now, let's start with the more normal one,
+
+00:11:55.587 --> 00:12:01.760
+which is just giving us a file name.
+
+00:12:01.760 --> 00:12:04.160
+So we can see we start by figuring out
+
+00:12:04.160 --> 00:12:08.520
+what the physical file name should be called.
+
+00:12:08.520 --> 00:12:10.280
+And assuming that that exists--
+
+00:12:15.600 --> 00:12:17.080
+sorry, I've confused myself.
+
+00:12:17.080 --> 00:12:23.000
+So this is the caching or the optimization
+
+00:12:23.000 --> 00:12:25.640
+that I mentioned, sending the existing file.
+
+00:12:25.640 --> 00:12:31.360
+This file exists is where the optimization is
+
+00:12:31.360 --> 00:12:38.680
+that regenerates the file if the source
+
+00:12:38.680 --> 00:12:41.840
+or document for the HTML generator has changed.
+
+00:12:45.080 --> 00:12:46.760
+Again, this is a short talk, so I'm not
+
+00:12:46.760 --> 00:12:49.320
+going to go into all the nuances of this JavaScript code.
+
+00:12:49.320 --> 00:12:52.800
+It's pretty far from an Emacs-related thing.
+
+00:12:52.800 --> 00:12:56.040
+So with that said, then, the rest of this program
+
+00:12:56.040 --> 00:12:59.360
+is really mostly just handling the different errors:
+
+00:12:59.360 --> 00:13:01.000
+"I didn't understand that type."
+
+00:13:01.000 --> 00:13:02.080
+"I don't know the document."
+
+00:13:02.080 --> 00:13:03.040
+"I failed."
+
+00:13:03.040 --> 00:13:06.480
+Otherwise, there's the caching.
+
+NOTE Generating Elisp
+
+00:13:06.480 --> 00:13:14.520
+And here's really where things get interesting,
+
+00:13:14.520 --> 00:13:19.200
+where we've generated some Elisp,
+
+00:13:19.200 --> 00:13:22.280
+and then we're calling Emacs with that Elisp.
+
+00:13:22.280 --> 00:13:24.760
+If everything works, we'll send the file.
+
+00:13:24.760 --> 00:13:27.800
+If it doesn't, we'll send the 500.
+
+00:13:27.800 --> 00:13:30.920
+And we've already seen the 500, so we know that works.
+
+00:13:30.920 --> 00:13:33.760
+All right, let's get to the interesting part.
+
+00:13:33.760 --> 00:13:37.320
+Sorry, one more footnote.
+
+NOTE Org blocks
+
+00:13:37.320 --> 00:13:39.320
+There is a capability built in that will
+
+00:13:39.320 --> 00:13:41.040
+allow us to execute an Org block.
+
+00:13:41.040 --> 00:13:42.840
+Let's see if that's working in our local.
+
+00:13:44.800 --> 00:13:47.200
+I'll remind myself how to do it.
+
+00:13:47.200 --> 00:13:49.560
+It's run.
+
+00:13:49.560 --> 00:13:53.320
+I think it's called test.
+
+00:13:53.320 --> 00:13:56.360
+And that's returning a 500.
+
+00:13:56.360 --> 00:13:58.400
+I'm suspecting that's running because I'm running
+
+00:13:58.400 --> 00:13:59.760
+in command instead of bash.
+
+00:13:59.760 --> 00:14:06.040
+Oh, yeah, so the failure is happening
+
+00:14:06.040 --> 00:14:07.720
+after I generate the Elisp.
+
+00:14:07.720 --> 00:14:10.280
+I'm pretty confident that is what the actual problem is.
+
+00:14:10.280 --> 00:14:12.760
+If we have time, I'll jump back over there
+
+00:14:12.760 --> 00:14:19.280
+and relaunch it in mingw bash.
+
+00:14:19.280 --> 00:14:21.440
+And we can see it actually work.
+
+00:14:21.440 --> 00:14:24.200
+But this works pretty well for me on my work laptop.
+
+00:14:24.200 --> 00:14:25.860
+I didn't have to make any changes to it.
+
+00:14:25.860 --> 00:14:28.120
+So I have a fairly high amount of confidence,
+
+00:14:28.120 --> 00:14:32.400
+at least in trivial cases, this works pretty well.
+
+NOTE Building some Lisp
+
+00:14:32.400 --> 00:14:37.800
+All right, so what I actually wanted to talk about today--
+
+00:14:37.800 --> 00:14:41.730
+and I'm going to be kind of hand-waving around
+
+00:14:41.731 --> 00:14:46.480
+this ES5 class that I've got and kind of the way that works.
+
+00:14:46.480 --> 00:14:49.840
+Hopefully, this will be pretty familiar to you
+
+00:14:49.840 --> 00:14:53.440
+if you are a JavaScript programmer.
+
+00:14:53.440 --> 00:14:58.660
+The interesting stuff comes when we want to build some Lisp.
+
+00:15:01.960 --> 00:15:01.961
+Here, you can see that I really don't have
+
+00:15:01.962 --> 00:15:11.280
+a whole lot of code around formatting LISP.
+
+00:15:11.280 --> 00:15:14.360
+You can see that I've special-cased
+
+00:15:14.360 --> 00:15:19.840
+whether the arguments that were passed
+
+00:15:19.840 --> 00:15:20.880
+happen to be a function.
+
+00:15:20.880 --> 00:15:25.480
+If they are, I'm going to call that function.
+
+00:15:25.480 --> 00:15:31.720
+And then the result will be formatted as Lisp.
+
+00:15:31.720 --> 00:15:35.040
+So this would be a recursive call here.
+
+00:15:35.040 --> 00:15:40.960
+Otherwise, I'm just going to return the arguments.
+
+00:15:40.960 --> 00:15:48.440
+Sorry, otherwise, I will slap a pair of parentheses
+
+00:15:48.440 --> 00:15:57.878
+around the result of walking that list if I get...
+
+00:15:57.879 --> 00:15:57.880
+formatting each element of the list of arguments
+
+00:15:57.880 --> 00:16:02.600
+that this `formatLisp` process calls
+
+00:16:02.600 --> 00:16:04.920
+and separating them with spaces.
+
+00:16:04.920 --> 00:16:10.880
+So in short form, this program walks through a list.
+
+00:16:10.880 --> 00:16:14.000
+If the list it receives is a function,
+
+00:16:14.000 --> 00:16:16.080
+it calls that function.
+
+00:16:16.080 --> 00:16:19.320
+Once that's handled or otherwise,
+
+00:16:19.320 --> 00:16:22.720
+we simply walk the list, taking the arguments,
+
+00:16:22.720 --> 00:16:26.000
+concatenating them on strings, and finally,
+
+00:16:26.000 --> 00:16:28.560
+wrap the results in parentheses.
+
+00:16:28.560 --> 00:16:31.760
+So what I didn't mention there but might be obvious
+
+00:16:31.760 --> 00:16:36.120
+is if I have a nested list, the inner list
+
+00:16:36.120 --> 00:16:38.600
+will be subjected to the same treatment.
+
+00:16:38.600 --> 00:16:43.000
+So this is a recursive sort of algorithm.
+
+NOTE How Elisp gets encoded
+
+00:16:43.000 --> 00:16:51.520
+All right, so now when I go to export,
+
+00:16:51.520 --> 00:16:53.520
+actually, in the interest of time,
+
+00:16:53.520 --> 00:16:55.800
+I'm going to avoid walking through that piece of code
+
+00:16:55.800 --> 00:16:58.840
+and let's focus instead on the more interesting part
+
+00:16:58.840 --> 00:17:02.360
+of how that Lisp gets encoded.
+
+00:17:02.360 --> 00:17:07.520
+So coming back to the PDF is a good example here,
+
+00:17:07.520 --> 00:17:10.320
+because it's got a special case.
+
+00:17:10.320 --> 00:17:10.336
+You can see I've specified this `exportFun`
+
+00:17:10.337 --> 00:17:15.320
+or export function.
+
+00:17:15.320 --> 00:17:19.560
+That's a property none of these other types have.
+
+00:17:22.400 --> 00:17:27.280
+And you can see it contains some Elisp telling us
+
+00:17:27.280 --> 00:17:29.760
+how to call the export for it.
+
+00:17:29.760 --> 00:17:32.680
+Let's go see how that's used.
+
+00:17:32.680 --> 00:17:35.720
+At the very end of what I just skipped over,
+
+00:17:35.720 --> 00:17:40.600
+the detailed "how the Org export process works,"
+
+00:17:40.600 --> 00:17:45.040
+you'll see that I am ending with a step
+
+00:17:45.040 --> 00:17:48.000
+to call the export function.
+
+00:17:48.000 --> 00:17:48.003
+Here, I look to see whether I have
+
+00:17:48.004 --> 00:17:55.400
+an export function property.
+
+00:17:55.400 --> 00:18:00.920
+If I do, I call that function.
+
+00:18:00.920 --> 00:18:00.920
+And if I don't, I build this list with the default
+
+00:18:00.921 --> 00:18:07.071
+`org-export-to-file` function
+
+00:18:07.072 --> 00:18:15.640
+using the filename and an output filename.
+
+00:18:15.640 --> 00:18:18.480
+So this, hopefully, is pretty familiar to anybody
+
+00:18:18.480 --> 00:18:18.503
+that's manually messed around
+
+00:18:18.504 --> 00:18:23.560
+with calling `org-export-to-file`.
+
+00:18:23.560 --> 00:18:25.800
+If it isn't, you can pretty well trust me for it.
+
+00:18:25.800 --> 00:18:28.280
+There's nothing very special going on.
+
+00:18:28.280 --> 00:18:30.760
+This looks rather like...
+
+00:18:30.760 --> 00:18:37.240
+Poor example there.
+
+00:18:37.240 --> 00:18:38.960
+Let's go back to our markdown.
+
+00:18:46.320 --> 00:18:47.720
+And there, we can see--
+
+00:18:47.720 --> 00:18:49.840
+[Leo]: I'm going to make a quick announcement.
+
+00:18:49.840 --> 00:18:50.760
+Can you hear me?
+
+00:18:50.760 --> 00:18:52.480
+[Corwin]: Yes, go for it.
+
+00:18:52.480 --> 00:18:54.280
+[Leo]: OK, let me just show my face.
+
+00:18:54.280 --> 00:18:55.400
+Oh, I'm not showing my face.
+
+00:18:55.400 --> 00:18:55.640
+Damn it.
+
+00:18:55.640 --> 00:18:57.000
+OK, I'll make the announcement.
+
+00:18:57.000 --> 00:18:58.600
+You won't see my face quite yet.
+
+00:18:58.600 --> 00:19:00.360
+We are about to get started.
+
+00:19:00.360 --> 00:19:02.440
+Well, we actually just got started on dev
+
+00:19:02.440 --> 00:19:06.040
+with the talk by RMS.
+
+00:19:06.040 --> 00:19:08.920
+So if you want to hop over to watch the talk by RMS,
+
+00:19:08.920 --> 00:19:09.760
+feel free to do so.
+
+00:19:09.760 --> 00:19:12.240
+Otherwise, we will be continuing on Gen with Corwin
+
+00:19:12.240 --> 00:19:12.253
+to finish his talk and have a Q&A.
+
+00:19:12.254 --> 00:19:16.080
+Corwin, you can feel free to go now.
+
+00:19:16.080 --> 00:19:18.560
+[Corwin]: Okay, bye, everybody.
+
+00:19:18.560 --> 00:19:22.795
+And for those sticking around,
+
+00:19:22.796 --> 00:19:25.040
+I'm just going to keep pressing on with this.
+
+NOTE How the export works
+
+00:19:25.040 --> 00:19:30.240
+In fact, I'm going to dive back into the part
+
+00:19:30.240 --> 00:19:35.400
+that I skipped here, which is the rest of how
+
+00:19:35.400 --> 00:19:37.400
+this export functionality works.
+
+00:19:37.400 --> 00:19:41.400
+So just to make sure the dot is tied together,
+
+00:19:41.400 --> 00:19:44.440
+the core of how this program works
+
+00:19:44.440 --> 00:19:49.320
+is generating some Elisp and then passing it
+
+00:19:49.320 --> 00:19:51.680
+to Emacs in batch mode.
+
+00:19:51.680 --> 00:19:53.280
+So if that wasn't perfectly clear,
+
+00:19:53.280 --> 00:19:57.240
+that's really what's going on with this program.
+
+00:19:57.240 --> 00:19:59.240
+The rest of the implementation is just
+
+00:19:59.240 --> 00:20:01.840
+a way to do that or certain features that
+
+00:20:01.840 --> 00:20:08.440
+are supported in that generated Elisp, if you will.
+
+00:20:08.440 --> 00:20:11.720
+So this is, you could say, the minimum implementation
+
+00:20:11.720 --> 00:20:11.753
+I could come up with to create a web server
+
+00:20:11.754 --> 00:20:17.320
+for my local Org documents.
+
+00:20:17.320 --> 00:20:24.440
+And I will also interrupt myself to just pull up
+
+00:20:24.440 --> 00:20:28.040
+the Etherpad real quick.
+
+00:20:28.040 --> 00:20:29.600
+Actually, if somebody is listening
+
+00:20:29.600 --> 00:20:34.720
+and can share a link to that, I closed my browser window
+
+00:20:34.720 --> 00:20:36.400
+with my links in it.
+
+00:20:36.400 --> 00:20:44.520
+But sure, I'm happy to take questions at any point, Leo,
+
+00:20:44.520 --> 00:20:48.480
+if there are any questions for me.
+
+00:20:48.480 --> 00:20:49.720
+Are you hanging out with me,
+
+00:20:49.720 --> 00:20:53.360
+instead of watching RMS? You can go.
+
+00:20:53.360 --> 00:20:54.600
+I'm teasing.
+
+00:20:54.600 --> 00:20:58.840
+[Leo]: No, I mean, we know that some people can
+
+00:20:58.840 --> 00:21:00.000
+have both streams open.
+
+00:21:00.000 --> 00:21:01.560
+It's fine.
+
+00:21:01.560 --> 00:21:03.320
+And right now, it's not the Q&A with RMS.
+
+00:21:03.320 --> 00:21:04.640
+It's just the presentation.
+
+00:21:04.640 --> 00:21:07.040
+So feel free to hang out a little longer
+
+00:21:07.040 --> 00:21:09.080
+if you just want the live stuff.
+
+00:21:09.080 --> 00:21:09.960
+Don't worry about it.
+
+00:21:09.960 --> 00:21:10.760
+You're fine.
+
+00:21:10.760 --> 00:21:13.720
+[Corwin]: Yeah, and forgive me, everybody,
+
+00:21:13.720 --> 00:21:16.280
+if you were hoping for a quick, succinct talk.
+
+00:21:16.280 --> 00:21:18.960
+I happen to know I was going to be opposite RMS,
+
+00:21:18.960 --> 00:21:23.240
+so I awarded myself the liberty of rambling.
+
+00:21:23.240 --> 00:21:26.840
+So if you do have a question, something that I alluded to
+
+00:21:26.840 --> 00:21:29.800
+and haven't come back to yet, you should, by all means,
+
+00:21:29.800 --> 00:21:30.320
+prompt me.
+
+00:21:30.320 --> 00:21:33.800
+[Leo]: Corwin, I might do--
+
+00:21:33.800 --> 00:21:35.400
+I'm just giving you a little heads up.
+
+00:21:35.400 --> 00:21:38.640
+I might need to go help at some point of dev.
+
+00:21:38.640 --> 00:21:43.120
+So if I need to do so, I will let you know right now
+
+00:21:43.120 --> 00:21:44.280
+inside the BBB room,
+
+00:21:44.280 --> 00:21:46.160
+and you'll be on your own to manage the chat.
+
+00:21:46.160 --> 00:21:47.960
+And you can just talk backstage to us
+
+00:21:47.960 --> 00:21:50.240
+to manage what we do with the stream, OK?
+
+00:21:50.240 --> 00:21:52.160
+[Corwin]: Yep, that should be no problem at all.
+
+00:21:52.160 --> 00:21:53.760
+I've got my pad up now.
+
+00:21:53.760 --> 00:21:55.160
+Thank you, ??.
+
+00:21:55.160 --> 00:21:58.040
+And I'm sorry about butchering your name there.
+
+00:21:58.040 --> 00:22:03.360
+And yep, I've got my chat open.
+
+00:22:03.360 --> 00:22:06.400
+And I think I'm pretty well set to self-manage.
+
+00:22:06.400 --> 00:22:07.640
+Oh, I don't have a camera on.
+
+00:22:07.640 --> 00:22:09.360
+So you can't see me giving you the thumbs up.
+
+00:22:09.360 --> 00:22:09.860
+[Leo]: Okay, good.
+
+NOTE Walking through the code
+
+00:22:09.860 --> 00:22:16.000
+All right, so let's just walk through,
+
+00:22:16.000 --> 00:22:18.400
+because it's sort of an interesting code.
+
+00:22:18.400 --> 00:22:20.560
+Let's just take a look real quick
+
+00:22:20.560 --> 00:22:24.720
+at how we generated our Elisp here,
+
+00:22:24.720 --> 00:22:26.520
+because it is--
+
+00:22:26.520 --> 00:22:27.640
+there we go.
+
+00:22:27.640 --> 00:22:29.240
+It is a little bit interesting.
+
+00:22:29.240 --> 00:22:32.040
+So here is the method.
+
+00:22:32.040 --> 00:22:34.080
+So I didn't get into detail on this.
+
+00:22:34.080 --> 00:22:34.086
+But there's an ES5 class that represents
+
+00:22:34.087 --> 00:22:38.920
+an Org mode document.
+
+00:22:38.920 --> 00:22:38.920
+It has the static debug property that,
+
+00:22:38.921 --> 00:22:42.400
+as you might imagine,
+
+00:22:42.400 --> 00:22:45.480
+can be overridden by that debug setting
+
+00:22:45.480 --> 00:22:48.440
+we looked at in the defaults.
+
+00:22:48.440 --> 00:22:51.440
+We also have a static variable that--
+
+00:22:51.440 --> 00:22:57.440
+a static property that does nothing more than getting
+
+00:22:57.440 --> 00:23:00.360
+the path to Emacs out of those defaults.
+
+00:23:00.360 --> 00:23:02.120
+Similarly, we have a class method
+
+00:23:02.120 --> 00:23:09.520
+to spawn out an Emacs, as I mentioned, in batch mode,
+
+00:23:09.520 --> 00:23:12.720
+eval-ing some arbitrary Lisp that's passed in.
+
+00:23:12.720 --> 00:23:20.480
+All right, so the type--
+
+00:23:20.480 --> 00:23:23.080
+this is where things start to get interesting.
+
+00:23:23.080 --> 00:23:26.480
+So this is an implementation detail,
+
+00:23:26.480 --> 00:23:30.040
+but-- that it's written as a static method.
+
+00:23:30.040 --> 00:23:32.160
+But essentially, what's going on here
+
+00:23:32.160 --> 00:23:34.840
+is looking up from that type list
+
+00:23:34.840 --> 00:23:37.480
+to try to find a type that's passed in,
+
+00:23:37.480 --> 00:23:41.240
+and that's returning one of these blocks.
+
+00:23:41.240 --> 00:23:44.800
+Let's say I requested HTML, which would be the default.
+
+00:23:44.800 --> 00:23:48.760
+Then I'm going to get this set of properties back.
+
+00:23:50.760 --> 00:23:51.260
+All right.
+
+00:23:51.260 --> 00:24:04.200
+Essentially, this program generates a program
+
+00:24:04.200 --> 00:24:10.840
+or a little block of executable elisp.
+
+00:24:10.840 --> 00:24:15.920
+However, in some cases, where if the `load-path` has
+
+00:24:15.920 --> 00:24:20.920
+been customized in that type block,
+
+00:24:20.920 --> 00:24:25.000
+or I think that's the only case I supported.
+
+00:24:25.000 --> 00:24:28.960
+There was another complexity I removed.
+
+00:24:28.960 --> 00:24:32.000
+So in that case, then I can simply
+
+00:24:32.000 --> 00:24:33.560
+replace that program with a let.
+
+00:24:33.560 --> 00:24:41.680
+Either way, I'm going to have everything I generate
+
+00:24:41.680 --> 00:24:45.840
+be encapsulated in a single block.
+
+00:24:45.840 --> 00:24:49.240
+The-- then I'm calling that formatLisp process
+
+00:24:49.240 --> 00:24:52.760
+that we talked about, appending to that--
+
+00:24:52.760 --> 00:25:01.680
+or inserting into, you could say, the outer scope.
+
+00:25:01.680 --> 00:25:05.000
+And we start by finding the file.
+
+00:25:05.000 --> 00:25:11.400
+We then load any libraries that might be needed.
+
+00:25:11.400 --> 00:25:13.520
+In some cases, the type might not
+
+00:25:13.520 --> 00:25:15.160
+have any external libraries.
+
+00:25:15.160 --> 00:25:18.440
+So we just-- so that's a no-op.
+
+00:25:18.440 --> 00:25:24.120
+And then finally, we're going to execute
+
+00:25:24.120 --> 00:25:27.160
+that logic I mentioned before about selecting
+
+00:25:27.160 --> 00:25:30.160
+either the default org-export-to-file,
+
+00:25:30.160 --> 00:25:36.200
+or else whatever Elisp we've staged for exporting
+
+00:25:36.200 --> 00:25:38.160
+that particular file type.
+
+00:25:38.160 --> 00:25:43.112
+And again, in the case of PDF, there's a special function
+
+00:25:43.113 --> 00:25:46.240
+that's used to trigger that export.
+
+00:25:46.240 --> 00:25:49.160
+Or you may be aware that that's a little more complicated.
+
+00:25:49.160 --> 00:25:50.840
+There's intermediate forms there.
+
+00:25:50.840 --> 00:25:56.760
+All right.
+
+00:25:56.760 --> 00:26:01.320
+So just reminding myself if there's anything else
+
+00:26:01.320 --> 00:26:03.760
+I have to cover on background.
+
+00:26:03.760 --> 00:26:07.440
+And I think that pretty well covers the basics.
+
+NOTE Executing the source block
+
+00:26:07.440 --> 00:26:09.880
+All right, let's look at that source block execute.
+
+00:26:09.880 --> 00:26:14.600
+This is the other use of the format list function.
+
+00:26:14.600 --> 00:26:16.800
+So here, rather than looking at the type
+
+00:26:16.800 --> 00:26:24.720
+and passing that through our Org export method,
+
+00:26:24.720 --> 00:26:29.080
+and then that type is used to get the list
+
+00:26:29.080 --> 00:26:30.840
+that we want to create.
+
+00:26:30.840 --> 00:26:37.600
+In the case of source block execute,
+
+00:26:37.600 --> 00:26:40.520
+we're kind of rolling it a lot more by hand.
+
+00:26:40.520 --> 00:26:43.920
+So this gives us a good chance to sort of unwind
+
+00:26:43.920 --> 00:26:49.600
+how that list looks when it's staged as JavaScript data.
+
+00:26:49.600 --> 00:26:52.760
+So here again, I wrap everything in a `progn`.
+
+00:26:52.760 --> 00:26:58.480
+I start by preventing an interactive prompt
+
+00:26:58.480 --> 00:27:01.240
+for the Babel execution.
+
+00:27:01.240 --> 00:27:04.960
+And then we load languages.
+
+00:27:04.960 --> 00:27:12.240
+This relates to another piece of our configuration
+
+00:27:12.240 --> 00:27:17.600
+where we've specified a set of languages
+
+00:27:17.600 --> 00:27:19.920
+that it's OK to execute.
+
+00:27:19.920 --> 00:27:24.120
+So if that type isn't in this list,
+
+00:27:24.120 --> 00:27:28.800
+then we won't be able to execute it in line
+
+00:27:28.800 --> 00:27:32.720
+through our trivial little web server.
+
+00:27:32.720 --> 00:27:33.640
+All right.
+
+00:27:33.640 --> 00:27:40.600
+With that done, then, loading the selected language,
+
+00:27:40.600 --> 00:27:43.960
+we then once again open the file.
+
+00:27:43.960 --> 00:27:46.360
+And we're-- whoops.
+
+00:27:46.360 --> 00:27:51.800
+Let-bind a return value, which is
+
+00:27:51.800 --> 00:27:55.166
+calculated by using Org source block execute [`org-sbe`]
+
+00:27:55.167 --> 00:27:58.040
+on the name of the block that's given.
+
+00:27:58.040 --> 00:28:05.160
+And then we use a temp buffer to write that out
+
+00:28:05.160 --> 00:28:06.640
+to a temporary file.
+
+00:28:06.640 --> 00:28:08.440
+This is actually a little clumsy,
+
+00:28:08.440 --> 00:28:12.720
+but I haven't put the effort in to have this written out
+
+00:28:12.720 --> 00:28:17.480
+to the standard output cleanly instead of using a temp file.
+
+00:28:17.840 --> 00:28:20.480
+So under-- this is another example of where it may not
+
+00:28:20.480 --> 00:28:22.520
+be production-- well, it definitely
+
+00:28:22.520 --> 00:28:27.680
+is not production-worthy code in that under heavy load,
+
+00:28:27.680 --> 00:28:30.166
+this would certainly break with collisions
+
+00:28:30.167 --> 00:28:32.040
+on the Babel file,
+
+00:28:32.040 --> 00:28:34.120
+the name of the Babel file.
+
+00:28:34.120 --> 00:28:37.480
+In any case, once we've staged up our Elisp, which is--
+
+00:28:37.480 --> 00:28:42.560
+this is basically variable interpolation,
+
+00:28:42.560 --> 00:28:47.680
+then we just call Emacs on that.
+
+00:28:47.680 --> 00:28:49.720
+And if we look down to where that's called,
+
+00:28:49.720 --> 00:28:54.640
+you can see that the Org Babel filename calculated here.
+
+00:29:12.795 --> 00:29:15.000
+[Leo]: Is there a problem?
+
+00:29:15.000 --> 00:29:15.760
+[Corwin]: No, I'm fine.
+
+00:29:15.760 --> 00:29:18.000
+I'm just lost in my code.
+
+00:29:18.000 --> 00:29:19.040
+[Leo]: OK, cool.
+
+00:29:19.040 --> 00:29:21.160
+Uh-oh means, oh, I need to intervene.
+
+00:29:21.160 --> 00:29:22.240
+What is going on?
+
+00:29:22.240 --> 00:29:23.200
+Carry on, please.
+
+00:29:23.200 --> 00:29:24.120
+[Corwin]: No, I'm fine, Leo.
+
+00:29:24.120 --> 00:29:25.480
+Thank you.
+
+00:29:25.480 --> 00:29:27.280
+All right, so then--
+
+00:29:27.280 --> 00:29:28.680
+so you can see we get--
+
+00:29:28.680 --> 00:29:35.537
+we send the Babel file here,
+
+00:29:35.538 --> 00:29:41.640
+which is calculated manually.
+
+00:29:41.640 --> 00:29:45.440
+A bit sloppy there, since I have essentially the same--
+
+00:29:45.440 --> 00:29:47.000
+I have two different places where
+
+00:29:47.000 --> 00:29:52.480
+I'm calculating the Org doc file in two different ways.
+
+00:29:52.480 --> 00:29:54.720
+Have I encouraged you to write your own yet?
+
+00:29:54.720 --> 00:29:56.440
+Or send patches.
+
+00:29:56.440 --> 00:30:01.240
+All right, so that's pretty much the nuts and bolts
+
+00:30:01.240 --> 00:30:02.400
+of this program.
+
+00:30:02.400 --> 00:30:06.720
+Let's go back to just seeing if we can't make it run.
+
+00:30:22.120 --> 00:30:22.620
+All right.
+
+00:30:22.620 --> 00:30:45.880
+All right, well, I apologize for not
+
+00:30:45.880 --> 00:30:49.560
+having taken the time to stage my demo this morning.
+
+00:30:49.560 --> 00:30:52.680
+I'm going to try to make it better for you.
+
+00:30:52.680 --> 00:30:59.920
+But apparently, it's going to be non-trivial
+
+00:30:59.920 --> 00:31:04.520
+to make the program work.
+
+00:31:04.520 --> 00:31:07.160
+Let's just-- before I completely give up,
+
+00:31:07.160 --> 00:31:13.320
+let's go ahead and try our Babel execute.
+
+00:31:13.320 --> 00:31:14.800
+And that, too, is failing.
+
+00:31:14.800 --> 00:31:18.040
+So there's something unhappy in my local world.
+
+00:31:18.040 --> 00:31:19.040
+There it goes.
+
+00:31:19.040 --> 00:31:26.600
+But in any case, let's go ahead and just take a look at
+
+00:31:26.600 --> 00:31:28.000
+that.
+
+00:31:28.000 --> 00:31:30.640
+Let's see.
+
+00:31:30.640 --> 00:31:31.600
+Control Enter.
+
+00:31:36.628 --> 00:31:40.200
+Let's take a look at that generated .el
+
+00:31:40.200 --> 00:31:42.840
+and compare it to-- whoa--
+
+00:31:42.840 --> 00:31:44.000
+and compare it to--
+
+00:31:44.000 --> 00:31:52.400
+I'm just going to format this manually,
+
+00:31:52.400 --> 00:31:56.000
+because I've forgotten my key bindings to auto-format it.
+
+00:31:56.000 --> 00:32:02.240
+There we go.
+
+00:32:02.240 --> 00:32:07.960
+All right.
+
+00:32:07.960 --> 00:32:13.120
+So now we can see, as promised, there's really
+
+00:32:13.120 --> 00:32:16.200
+nothing going on here other than the interpolation
+
+00:32:16.200 --> 00:32:18.640
+of the variables in.
+
+00:32:18.640 --> 00:32:24.360
+We're inserting-- we're using an insert and write file
+
+00:32:24.360 --> 00:32:27.800
+method, which is, again, rather sloppy,
+
+00:32:27.800 --> 00:32:32.040
+to generate the text file.
+
+00:32:32.040 --> 00:32:32.880
+All right.
+
+00:32:32.880 --> 00:32:34.760
+Let's come back to our documentation
+
+00:32:34.760 --> 00:32:39.760
+and see if we can put a bow on the project.
+
+NOTE Conclusion
+
+00:32:39.760 --> 00:32:43.760
+So I hope I've convinced you that this was actually
+
+00:32:43.760 --> 00:32:45.480
+rather easy to do.
+
+00:32:45.480 --> 00:32:52.440
+The entirety of my index.js file is 262 lines,
+
+00:32:52.440 --> 00:32:59.810
+and that includes a good 40 of whitespace and configuration.
+
+00:33:03.760 --> 00:33:06.505
+It has only one dependency, the Express,
+
+00:33:06.506 --> 00:33:08.240
+which really builds the web server.
+
+00:33:08.240 --> 00:33:11.520
+Any language you'd rather implement this in
+
+00:33:11.520 --> 00:33:14.120
+will have a similar capability for building
+
+00:33:14.120 --> 00:33:16.280
+some type of trivial web server.
+
+00:33:16.280 --> 00:33:18.400
+And I think you may find--
+
+00:33:18.400 --> 00:33:22.640
+I certainly found that a large portion of the code base
+
+00:33:22.640 --> 00:33:28.080
+is really making the errors meaningful,
+
+00:33:28.080 --> 00:33:32.420
+in that, in some cases, sending an appropriate HTTP status
+
+00:33:32.420 --> 00:33:34.360
+based on what happened.
+
+00:33:34.360 --> 00:33:38.002
+In other cases-- let's see if
+
+00:33:38.003 --> 00:33:42.640
+I've got an explicit `throw` left in here--
+
+00:33:42.640 --> 00:33:45.840
+in other cases, just trapping different types
+
+00:33:45.840 --> 00:33:47.440
+of failure conditions.
+
+00:33:47.440 --> 00:33:54.000
+I'm going to look at my pad, and I do see a question here.
+
+00:33:54.000 --> 00:33:55.120
+So let me jump in here.
+
+NOTE Questions and answers
+
+00:33:58.880 --> 00:34:00.640
+[Leo]: Corwin, just to make sure, are you switching to Q&A?
+
+00:34:00.640 --> 00:34:02.380
+Are you finished with your presentation?
+
+00:34:02.380 --> 00:34:05.260
+[Corwin]: Well, as I said, I'm happy to take Q&A throughout.
+
+00:34:05.260 --> 00:34:08.420
+But yes, let's say yes to that.
+
+00:34:08.420 --> 00:34:10.900
+[Leo]: Okay, so Corwin, what I'm going to need to do now--
+
+00:34:10.900 --> 00:34:12.140
+you are in charge of the room.
+
+00:34:12.140 --> 00:34:14.060
+We are going to open up the room so
+
+00:34:14.060 --> 00:34:17.220
+that if people have questions watching right now on Gen,
+
+00:34:17.220 --> 00:34:18.700
+feel free to come in.
+
+00:34:18.700 --> 00:34:22.780
+And there was something else I needed to say.
+
+00:34:22.780 --> 00:34:24.620
+Yes, Corwin, if there's any problem,
+
+00:34:24.620 --> 00:34:25.700
+whisper to us on Mumble.
+
+00:34:25.700 --> 00:34:27.500
+So you might want to unmute Mumble
+
+00:34:27.500 --> 00:34:29.620
+and be able to listen to us over there.
+
+00:34:29.620 --> 00:34:32.480
+[Corwin]: I can't do that, Leo.
+
+00:34:32.480 --> 00:34:36.440
+If I unmute, Mumble is going to bleed through.
+
+00:34:36.440 --> 00:34:36.960
+[Leo]: Okay, sure.
+
+00:34:36.960 --> 00:34:39.416
+Well, if you have any problem,
+
+00:34:39.417 --> 00:34:41.160
+type in #emacsconf-org channel,
+
+00:34:41.160 --> 00:34:42.520
+and we'll be with you, OK?
+
+00:34:42.520 --> 00:34:43.520
+[Corwin]: Or I'll PM somebody.
+
+00:34:43.520 --> 00:34:45.760
+But I don't anticipate having any problems.
+
+00:34:45.760 --> 00:34:49.040
+I'll put something in -org when I run out of steam here.
+
+00:34:49.040 --> 00:34:50.400
+How's that?
+
+00:34:50.400 --> 00:34:51.160
+[Leo]: Amazing, cool.
+
+00:34:51.160 --> 00:34:53.320
+So I will have to leave the room, though.
+
+00:34:53.320 --> 00:34:56.800
+I'm leaving the recording going so that we have your Q&A.
+
+00:34:56.800 --> 00:34:58.080
+And whenever you're available--
+
+00:34:58.080 --> 00:35:02.180
+[Corwin]: I'll shut off the recording when I close the room.
+
+00:35:02.180 --> 00:35:02.980
+[Leo]: Okay, great.
+
+00:35:02.980 --> 00:35:04.460
+Good luck, Corwin.
+
+00:35:04.460 --> 00:35:06.500
+[Corwin]: Thank you.
+
+00:35:06.500 --> 00:35:09.780
+All right, and if you're still with me, well, thanks.
+
+00:35:09.780 --> 00:35:13.620
+I appreciate that.
+
+00:35:13.620 --> 00:35:16.740
+I did offer to be opposite RMS.
+
+00:35:16.740 --> 00:35:20.060
+And I'm in no way offended if people do want to jump over,
+
+00:35:20.060 --> 00:35:23.540
+especially as that starts to shift over to Q&A.
+
+00:35:23.540 --> 00:35:26.980
+I'm taking Leo's leaving as a pretty good indication
+
+00:35:26.980 --> 00:35:28.780
+that that's happening now-ish.
+
+00:35:28.780 --> 00:35:31.385
+So I totally understand
+
+00:35:31.386 --> 00:35:35.020
+if folks are more excited to do that.
+
+00:35:35.020 --> 00:35:37.940
+Meanwhile, let me just jump over to the question
+
+00:35:37.940 --> 00:35:38.660
+that I received.
+
+00:35:38.660 --> 00:35:46.460
+I'll show the pad here so that I save myself
+
+00:35:46.460 --> 00:35:47.860
+reading the question out.
+
+00:35:47.860 --> 00:35:48.940
+But I'll paraphrase it.
+
+NOTE Why am I not running the web server in Emacs?
+
+00:35:48.940 --> 00:35:52.660
+Why am I not running the web server in Emacs?
+
+00:35:52.660 --> 00:35:54.380
+That would be a great way to do it.
+
+00:35:54.380 --> 00:35:56.340
+I chose to build it in Node.js
+
+00:35:56.341 --> 00:35:58.460
+because that was trivially easy for me.
+
+NOTE Is this using org-info-js?
+
+00:36:22.140 --> 00:36:24.780
+And then finally, am I using org-info-js?
+
+00:36:24.780 --> 00:36:27.540
+No, I learned about this essentially at this conference.
+
+00:36:27.540 --> 00:36:30.660
+So that's something I'll be learning more about.
+
+00:36:30.660 --> 00:36:32.460
+And it could well influence this project.
+
+00:36:34.900 --> 00:36:56.180
+All right, and thanks for the questions.
+
+00:36:59.020 --> 00:37:02.820
+All right, I'm going to slow my roll just a little bit here
+
+00:37:02.820 --> 00:37:06.980
+because I think I kind of have all the time in the world.
+
+00:37:06.980 --> 00:37:11.540
+I will be wrapping up within about 15 or 20 minutes
+
+00:37:11.540 --> 00:37:15.620
+at the latest just to avoid stressing out
+
+00:37:15.620 --> 00:37:18.827
+my fellow organizers, especially Leo and Sacha
+
+00:37:18.828 --> 00:37:22.260
+that have the bulk of the heavy lifting this year,
+
+00:37:22.260 --> 00:37:26.820
+and Amin, and really, thanks all to everybody.
+
+00:37:26.820 --> 00:37:29.540
+God, the nicest part of doing my own talk
+
+00:37:29.540 --> 00:37:31.980
+is that I get to say that.
+
+00:37:31.980 --> 00:37:35.460
+It's just so much fun to contribute to EmacsConf.
+
+NOTE EmacsConf
+
+00:37:35.460 --> 00:37:38.740
+And if you're at all interested, there's
+
+00:37:38.740 --> 00:37:43.100
+plenty of completely backstage, behind the curtain role.
+
+00:37:43.100 --> 00:37:45.340
+Behind the curtain roles doesn't mean
+
+00:37:45.340 --> 00:37:47.865
+you have to be somebody that likes
+
+00:37:47.866 --> 00:37:50.060
+talking or being on webcam.
+
+00:37:50.060 --> 00:37:52.300
+Sorry that my camera isn't working this year.
+
+00:37:52.300 --> 00:37:53.980
+I spent quite a while fussing with that
+
+00:37:53.980 --> 00:37:56.740
+and lost all my time to get my prerec working.
+
+00:37:56.740 --> 00:38:10.140
+All right, so trying to think where I can take us
+
+00:38:10.140 --> 00:38:11.540
+without my demo working.
+
+00:38:11.540 --> 00:38:14.540
+I was really hoping to show the Org Babel piece.
+
+00:38:14.540 --> 00:38:15.580
+That's really fun.
+
+NOTE How I'm using this at work
+
+00:38:15.580 --> 00:38:20.420
+So let me just mention briefly how I'm using this at work.
+
+00:38:20.420 --> 00:38:25.980
+So at work, I'll have some type of Org document.
+
+00:38:25.980 --> 00:38:27.700
+And usually, it's a project.
+
+00:38:27.700 --> 00:38:32.900
+So the title of the document is My Project.
+
+00:38:32.900 --> 00:38:37.820
+And then I'll have a requirements section.
+
+00:38:37.820 --> 00:38:43.540
+And I'll have a meeting notes section.
+
+00:38:43.540 --> 00:38:44.980
+That's probably the key thing.
+
+00:38:44.980 --> 00:38:49.540
+And then as the project goes on, I'll start having--
+
+00:38:49.540 --> 00:38:50.740
+I'm a solutions architect.
+
+00:38:50.740 --> 00:38:55.420
+So my job is formalizing design in large part.
+
+00:38:55.420 --> 00:39:01.740
+So then I'll have a design documents section.
+
+00:39:01.740 --> 00:39:05.020
+And this is where I'll be doing a lot of my work.
+
+00:39:05.020 --> 00:39:07.220
+So I'll start out saying--
+
+00:39:26.620 --> 00:39:29.340
+And maybe Bob is a subject matter expert
+
+00:39:29.340 --> 00:39:32.460
+whose buy-in I need to have on how we're going
+
+00:39:32.460 --> 00:39:34.820
+to do the high-level design.
+
+00:39:34.820 --> 00:39:37.296
+Maybe a lead engineer or a dev manager
+
+00:39:37.297 --> 00:39:39.460
+or something like that.
+
+00:39:39.460 --> 00:39:42.653
+All right, as my work goes on,
+
+00:39:42.654 --> 00:39:47.620
+then this will start getting into more detail.
+
+00:40:16.620 --> 00:40:18.660
+And things of this nature.
+
+00:40:18.660 --> 00:40:20.180
+As things get further and further,
+
+00:40:20.180 --> 00:40:21.740
+I'll actually have documentation
+
+00:40:21.740 --> 00:40:22.820
+that I'm adding in here.
+
+00:40:22.820 --> 00:40:28.900
+Oh, I see.
+
+00:40:28.900 --> 00:40:29.740
+It's a big mess.
+
+00:40:29.740 --> 00:40:32.140
+All right, well, we'll just reuse this.
+
+00:40:32.140 --> 00:40:40.380
+So I can insert those all in line.
+
+00:40:40.380 --> 00:40:42.157
+And now for the fun part,
+
+00:40:42.158 --> 00:40:44.460
+let's see if the most trivial case
+
+00:40:44.460 --> 00:40:45.460
+is working here.
+
+00:40:49.940 --> 00:40:51.180
+No.
+
+00:40:51.180 --> 00:40:52.900
+All right, completely broken.
+
+00:40:52.900 --> 00:40:57.260
+Let me drag.
+
+00:40:57.260 --> 00:41:05.180
+All right, well, apologies again for the poor quality
+
+00:41:05.180 --> 00:41:06.260
+of my demo today.
+
+00:41:06.260 --> 00:41:13.900
+And let me just look real quick at my Etherpad once more.
+
+00:41:13.900 --> 00:41:16.820
+And I'll glance at BBB to see if there's anybody
+
+00:41:16.820 --> 00:41:18.140
+jumping in with questions.
+
+00:41:18.140 --> 00:41:23.740
+And then I'll go back to IRC and look for questions there.
+
+00:41:23.740 --> 00:41:33.180
+OK, and I don't see any additional questions on the pad.
+
+00:41:33.180 --> 00:41:35.780
+I'm just going to scan IRC real quick.
+
+00:41:35.780 --> 00:41:42.460
+I suspect that the TreeSitter comment isn't for me.
+
+00:41:44.900 --> 00:41:56.620
+All right, and I'm not seeing a lot of questions there.
+
+00:41:56.620 --> 00:42:04.340
+So I'm just going to vamp for just a minute or two.
+
+NOTE Volunteering for EmacsConf
+
+00:42:04.340 --> 00:42:07.980
+As I mentioned, I'm a conference volunteer.
+
+00:42:07.980 --> 00:42:09.700
+This is my third year volunteering
+
+00:42:09.700 --> 00:42:11.940
+with the conference.
+
+00:42:11.940 --> 00:42:15.140
+And probably if you take one thing away from my talk,
+
+00:42:15.140 --> 00:42:17.740
+it should be I really like volunteering
+
+00:42:17.740 --> 00:42:18.500
+for the conference.
+
+00:42:18.500 --> 00:42:19.900
+It's fun.
+
+00:42:19.900 --> 00:42:23.500
+It makes me feel sort of close to the pulse.
+
+00:42:23.500 --> 00:42:27.296
+And it gives me a chance to just interact with people
+
+00:42:27.297 --> 00:42:30.106
+that have very different perspectives on Emacs,
+
+00:42:30.107 --> 00:42:32.740
+which is something that I really value a lot.
+
+00:42:32.740 --> 00:42:40.220
+Emacs, like anything else sort of in the internet world,
+
+00:42:40.220 --> 00:42:42.940
+has a real echo chamber factor.
+
+00:42:42.940 --> 00:42:46.504
+If you do or don't like use-package,
+
+00:42:46.505 --> 00:42:49.135
+you probably interact with a lot of people
+
+00:42:49.136 --> 00:42:53.500
+that feel the same way about that.
+
+00:42:53.500 --> 00:42:57.420
+And so I really recommend volunteering for EmacsConf
+
+00:42:57.420 --> 00:43:01.340
+as a way to sort of mix it up and get
+
+00:43:01.340 --> 00:43:03.858
+to know people that may not use Emacs
+
+00:43:03.859 --> 00:43:05.540
+the same way that you do.
+
+NOTE It's easy to build a program that uses Emacs in the pipeline
+
+00:43:08.380 --> 00:43:10.420
+Or perhaps more on topic, though,
+
+00:43:10.420 --> 00:43:14.300
+the log line for this talk is it's really quite easy
+
+00:43:14.300 --> 00:43:20.760
+to build a program that uses Emacs in a pipeline capability.
+
+00:43:20.980 --> 00:43:23.780
+I think there's a ton of opportunity in this space.
+
+00:43:23.780 --> 00:43:27.700
+This particular example is just a trivial web server
+
+00:43:27.700 --> 00:43:30.780
+written using Node.js.
+
+00:43:30.780 --> 00:43:31.545
+But as was pointed out, we could have used elnode
+
+00:43:31.546 --> 00:43:40.060
+as a web server
+
+00:43:40.060 --> 00:43:44.060
+and done the entire thing within Emacs Lisp.
+
+00:43:44.060 --> 00:43:48.765
+Or really, almost any technology
+
+00:43:48.766 --> 00:43:52.900
+would get us this capability.
+
+00:43:52.900 --> 00:43:54.660
+From an implementation standpoint,
+
+00:43:54.660 --> 00:43:56.847
+I had a lot of fun building
+
+00:43:56.848 --> 00:43:59.580
+this trivial little Elisp parser,
+
+00:43:59.580 --> 00:44:03.220
+and I'm rather pleased with the fact
+
+00:44:03.220 --> 00:44:07.340
+that the entirety of that--
+
+00:44:07.340 --> 00:44:14.180
+the entire algorithm for turning JavaScript or JSON data,
+
+00:44:14.180 --> 00:44:20.420
+we could say, into Elisp is really a one-liner,
+
+00:44:20.420 --> 00:44:25.820
+albeit a nasty one-liner. That was pretty cool
+
+00:44:25.820 --> 00:44:28.180
+to discover how simple that was.
+
+00:44:28.180 --> 00:44:31.220
+So in my mind, that opens up a lot of possibility.
+
+00:44:31.220 --> 00:44:32.889
+If it's this easy in JavaScript,
+
+00:44:32.890 --> 00:44:34.708
+I wouldn't expect it to be hard,
+
+00:44:34.709 --> 00:44:36.860
+any more difficult in your favorite language.
+
+00:44:36.860 --> 00:44:41.140
+Glance one more time to see if there
+
+00:44:41.140 --> 00:44:42.940
+happen to be any other questions.
+
+00:44:42.940 --> 00:44:47.300
+And not seeing any, I'm going to go ahead and start
+
+00:44:47.300 --> 00:44:49.500
+wrapping up my chat now.
+
+00:44:49.500 --> 00:44:51.620
+It will take me a couple of minutes to do that.
+
+00:44:51.620 --> 00:44:54.580
+So if you do have any other questions that you
+
+00:44:54.580 --> 00:44:56.460
+want to drop into the pad or any comments,
+
+00:44:56.460 --> 00:44:59.740
+you're more than welcome to hit me with those
+
+00:44:59.740 --> 00:45:03.820
+as I coordinate closing this chat, this talk,
+
+00:45:03.820 --> 00:45:06.100
+with the organizer team.
diff --git a/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt b/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt
new file mode 100644
index 00000000..6a5b2f48
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt
@@ -0,0 +1,71 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:32.079
+Introduction
+
+00:00:32.080 --> 00:01:08.799
+Project housekeeping
+
+00:01:08.800 --> 00:02:04.679
+Continuous integration
+
+00:02:04.680 --> 00:03:32.559
+Funding contributors
+
+00:03:32.560 --> 00:03:58.639
+New features
+
+00:03:58.640 --> 00:04:36.519
+An assortment of export improvements
+
+00:04:36.520 --> 00:05:12.279
+A collection of babel improvements
+
+00:05:12.280 --> 00:06:04.159
+A multitude of general org-mode improvements
+
+00:06:04.160 --> 00:07:31.599
+Citations
+
+00:07:31.600 --> 00:07:48.319
+Quality of life improvements
+
+00:07:48.320 --> 00:09:02.479
+Org fold
+
+00:09:02.480 --> 00:10:07.359
+Org element cache
+
+00:10:07.360 --> 00:11:02.719
+Org persist
+
+00:11:02.720 --> 00:11:40.199
+More careful resource downloading
+
+00:11:40.200 --> 00:12:15.799
+Bug fixes
+
+00:12:15.800 --> 00:12:42.799
+Asynchronous session evaluation
+
+00:12:42.800 --> 00:13:18.279
+Nicer tangle mode syntax
+
+00:13:18.280 --> 00:13:52.599
+A flourishing ecosystem
+
+00:13:52.600 --> 00:14:10.119
+Org-modern
+
+00:14:10.120 --> 00:15:44.039
+citeproc-org
+
+00:15:44.040 --> 00:17:06.319
+Continuing work on the Org format
+
+00:17:06.320 --> 00:17:41.919
+Mailing list management
+
+00:17:41.920 --> 00:19:51.880
+Further engraving
diff --git a/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt b/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt
new file mode 100644
index 00000000..32e3022e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt
@@ -0,0 +1,1220 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.679
+Hello. If you're listening to this talk,
+
+00:00:04.680 --> 00:00:06.239
+then you should be at least a bit interested
+
+00:00:06.240 --> 00:00:09.199
+in Org mode, which is fantastic
+
+00:00:09.200 --> 00:00:11.252
+because there have been quite a few
+
+00:00:11.253 --> 00:00:14.599
+interesting developments over the past year or so.
+
+00:00:14.600 --> 00:00:19.399
+I'm Timothy, as you may have gathered from the last talk,
+
+00:00:19.400 --> 00:00:21.799
+and I'm also quite involved with the Org project,
+
+00:00:21.800 --> 00:00:23.999
+so I'd like to go through a few of those developments
+
+00:00:24.000 --> 00:00:27.439
+over the past year or so and give you a few hints as well
+
+00:00:27.440 --> 00:00:32.079
+as to what potentially lies around the corner with Org mode.
+
+NOTE Project housekeeping
+
+00:00:32.080 --> 00:00:35.879
+The starters, slightly on the more boring side
+
+00:00:35.880 --> 00:00:37.679
+but rather significant change to the project,
+
+00:00:37.680 --> 00:00:40.799
+occurred with the housekeeping or organisation.
+
+00:00:40.800 --> 00:00:43.519
+The codebase for the Org project has actually shifted over
+
+00:00:43.520 --> 00:00:46.799
+from a self-hosted Gogs instance over to Savannah,
+
+00:00:46.800 --> 00:00:49.719
+which means it's now living right alongside
+
+00:00:49.720 --> 00:00:51.519
+the Emacs codebase.
+
+00:00:51.520 --> 00:00:53.279
+This has been accompanied by the creation
+
+00:00:53.280 --> 00:00:58.219
+of a whole bunch of Org-related repos under
+
+00:00:58.220 --> 00:01:03.359
+Bastien's (Org's maintainer) personal sourceHut account.
+
+00:01:03.360 --> 00:01:06.759
+We've got the source of the website, the Org wiki Worg,
+
+00:01:06.760 --> 00:01:08.799
+as well as Org contrib.
+
+NOTE Continuous integration
+
+00:01:08.800 --> 00:01:13.119
+Another recent addition to this list of Org-related repos
+
+00:01:13.120 --> 00:01:17.799
+is the new Org mode tests--continuous integration.
+
+00:01:17.800 --> 00:01:22.039
+Now, this is rather important, because while we do recommend
+
+00:01:22.040 --> 00:01:25.879
+that all contributors actually run make tests
+
+00:01:25.880 --> 00:01:29.799
+before submitting patches to the Org project,
+
+00:01:29.800 --> 00:01:31.279
+this doesn't always happen.
+
+00:01:31.280 --> 00:01:34.559
+It can also actually be a bit harder than you expect
+
+00:01:34.560 --> 00:01:35.719
+to run the tests because there are a lot
+
+00:01:35.720 --> 00:01:37.759
+of trans-dependencies you get with Org;
+
+00:01:37.760 --> 00:01:40.199
+for instance, with all of the various Babel libraries
+
+00:01:40.200 --> 00:01:42.599
+which actually require other packages
+
+00:01:42.600 --> 00:01:46.079
+or programming language to be installed on the system.
+
+00:01:46.080 --> 00:01:50.079
+Having a single self-contained test system
+
+00:01:50.080 --> 00:01:53.319
+to actually make sure that Org can be regularly
+
+00:01:53.320 --> 00:01:57.519
+and thoroughly tested should be a great help for actually
+
+00:01:57.520 --> 00:02:04.679
+ensuring the quality of the contributions.
+
+NOTE Funding contributors
+
+00:02:04.680 --> 00:02:07.079
+The funding structure for Org has also undergone a bit
+
+00:02:07.080 --> 00:02:10.559
+of a shift. Historically, we've just directed everybody
+
+00:02:10.560 --> 00:02:14.199
+who's interested in financially supporting the Org project
+
+00:02:14.200 --> 00:02:18.639
+to the maintainer Bastien's personal GitHub sponsors
+
+00:02:18.640 --> 00:02:22.399
+and LibrePay accounts. Now, early this year,
+
+00:02:22.400 --> 00:02:27.519
+Bastion has created the Librepay Org mode team account,
+
+00:02:27.520 --> 00:02:29.039
+which means that you can actually now
+
+00:02:29.040 --> 00:02:33.159
+support the Org project as opposed to
+
+00:02:33.160 --> 00:02:34.479
+the person leading the Org project.
+
+00:02:34.480 --> 00:02:39.159
+Currently, this just distributes donations between Bastien,
+
+00:02:39.160 --> 00:02:42.079
+Ihor, and myself. However, the idea is that
+
+00:02:42.080 --> 00:02:45.039
+as the active contributors for the Org project
+
+00:02:45.040 --> 00:02:50.839
+come and go over time, the list of people on this team
+
+00:02:50.840 --> 00:02:56.999
+can be changed as seems sensible. The hope here is that
+
+00:02:57.000 --> 00:03:00.159
+it will simplify both how easy it is
+
+00:03:00.160 --> 00:03:02.559
+to actually financially support the Org project
+
+00:03:02.560 --> 00:03:04.359
+as well as how easily people contributing
+
+00:03:04.360 --> 00:03:09.599
+to the Org project can be supported.
+
+00:03:09.600 --> 00:03:13.479
+If you're interested in supporting the Org project,
+
+00:03:13.480 --> 00:03:15.439
+there's never been a better time than now
+
+00:03:15.440 --> 00:03:16.919
+to have a look at this
+
+00:03:16.920 --> 00:03:23.159
+and let anybody who might also might be interested know.
+
+00:03:23.160 --> 00:03:25.279
+Hopefully, this leads to a healthier funding structure
+
+00:03:25.280 --> 00:03:28.199
+that will scale better into the long term
+
+00:03:28.200 --> 00:03:32.559
+and thus better support the work that happens with Org.
+
+NOTE New features
+
+00:03:32.560 --> 00:03:37.079
+Now, the project itself has of course also seen quite a bit
+
+00:03:37.080 --> 00:03:38.519
+of development over the past year.
+
+00:03:38.520 --> 00:03:44.159
+We've had about 800 comments from 80 contributors.
+
+00:03:44.160 --> 00:03:46.519
+Within these comments, there's been a lot of polishing
+
+00:03:46.520 --> 00:03:48.759
+quality-of-life improvements,
+
+00:03:48.760 --> 00:03:50.519
+and also quite a few new features.
+
+00:03:50.520 --> 00:03:52.799
+Now, I haven't got nearly enough time
+
+00:03:52.800 --> 00:03:54.159
+to go through this exhaustively,
+
+00:03:54.160 --> 00:03:58.639
+so we're just going to go through a quick highlight reel.
+
+NOTE An assortment of export improvements
+
+00:03:58.640 --> 00:04:00.239
+There's a collection of export improvements
+
+00:04:00.240 --> 00:04:04.319
+from things which affect all export backends,
+
+00:04:04.320 --> 00:04:07.319
+like including remote content
+
+00:04:07.320 --> 00:04:09.599
+and adding new things like DOI links
+
+00:04:09.600 --> 00:04:11.519
+and support for encrypted Org files,
+
+00:04:11.520 --> 00:04:14.679
+as well as a whole lot of export-backend-specific changes.
+
+00:04:14.680 --> 00:04:17.159
+For example, quite a few backends--
+
+00:04:17.160 --> 00:04:18.519
+I've mentioned the LaTeX one here,
+
+00:04:18.520 --> 00:04:23.119
+but also others such as Texinfo--have now got
+
+00:04:23.120 --> 00:04:26.799
+rich support for various types of attributes and objects.
+
+00:04:26.800 --> 00:04:31.919
+The HTML backend has had a few things boosted up and well,
+
+00:04:31.920 --> 00:04:33.519
+if you want to see the full list,
+
+00:04:33.520 --> 00:04:36.519
+just take a look at the release notes.
+
+NOTE A collection of babel improvements
+
+00:04:36.520 --> 00:04:39.319
+We've also seen a similar collection of improvements
+
+00:04:39.320 --> 00:04:43.519
+with the Babel backends. Once again, this is scattered--
+
+00:04:43.520 --> 00:04:46.519
+or well, it can be split into two sets of changes.
+
+00:04:46.520 --> 00:04:49.599
+There's some which affect all of Babel, essentially.
+
+00:04:49.600 --> 00:04:52.599
+For instance, the new syntax of parsing
+
+00:04:52.600 --> 00:04:56.479
+the raw content of code blocks, or the changes with Noweb.
+
+00:04:56.480 --> 00:05:01.919
+For example, :noweb-prefix is a new option that can be used.
+
+00:05:01.920 --> 00:05:03.239
+And then there's also a collection
+
+00:05:03.240 --> 00:05:07.439
+of backend-specific changes. So ASCII graphics with PlantUML
+
+00:05:07.440 --> 00:05:12.279
+or enhanced return capabilities with the ob-python library.
+
+NOTE A multitude of general org-mode improvements
+
+00:05:12.280 --> 00:05:17.479
+And then of course, as before, a whole collection
+
+00:05:17.480 --> 00:05:19.839
+of more changes which you can find in the release notes.
+
+00:05:19.840 --> 00:05:22.839
+Last but by no means least,
+
+00:05:22.840 --> 00:05:26.239
+there have been quite a few changes within the rest of Org.
+
+00:05:26.240 --> 00:05:30.839
+So this is, once again, far too many things to list,
+
+00:05:30.840 --> 00:05:33.759
+but it's things like improved refiling,
+
+00:05:33.760 --> 00:05:36.639
+capture templates, image preview sizing,
+
+00:05:36.640 --> 00:05:38.159
+clocktable settings, agenda tweaks,
+
+00:05:38.160 --> 00:05:41.159
+and well, a whole lot more.
+
+00:05:41.160 --> 00:05:45.039
+Yes, basically, the essence of what's here
+
+00:05:45.040 --> 00:05:47.999
+is a lot of little changes
+
+00:05:48.000 --> 00:05:50.799
+which just address particular use cases in ways
+
+00:05:50.800 --> 00:05:55.052
+that I don't think anybody's going to be seeing
+
+00:05:55.053 --> 00:05:55.786
+the impact of all of them,
+
+00:05:55.787 --> 00:05:57.559
+but I think most people should at least
+
+00:05:57.560 --> 00:06:00.119
+find one or two things
+
+00:06:00.120 --> 00:06:04.159
+which actually improve their own usage.
+
+NOTE Citations
+
+00:06:04.160 --> 00:06:06.079
+Now these are the sort of assorted
+
+00:06:06.080 --> 00:06:07.399
+relatively minor improvements,
+
+00:06:07.400 --> 00:06:09.959
+but there are also some major ones.
+
+00:06:09.960 --> 00:06:12.159
+And one in particular, citations.
+
+00:06:12.160 --> 00:06:15.879
+So I think this has been, at this point,
+
+00:06:15.880 --> 00:06:17.079
+over a decade in the making,
+
+00:06:17.080 --> 00:06:21.919
+but Org finally has first-class support for citations.
+
+00:06:21.920 --> 00:06:23.759
+And I have to say, it is marvellous.
+
+00:06:23.760 --> 00:06:27.239
+You'd hope so, after the labour. I think it is.
+
+00:06:27.240 --> 00:06:30.119
+It can be said that it's actually worth the wait.
+
+00:06:30.120 --> 00:06:31.679
+I think out of the various options you've got now,
+
+00:06:31.680 --> 00:06:34.279
+(for example, the way that Pandoc
+
+00:06:34.280 --> 00:06:35.599
+and Markdown otherwise[??] do it)
+
+00:06:35.600 --> 00:06:40.519
+Org has a fantastically succinct and flexible
+
+00:06:40.520 --> 00:06:45.959
+syntax for citations, which scales really well for all sorts
+
+00:06:45.960 --> 00:06:47.199
+of different use cases.
+
+00:06:47.200 --> 00:06:51.159
+Additionally, on the backend side of things,
+
+00:06:51.160 --> 00:06:55.359
+we've now got a generalised way for handling citations
+
+00:06:55.360 --> 00:06:57.839
+which has been quite helpful for the--I think
+
+00:06:57.840 --> 00:07:00.359
+I could say rather rapid development
+
+00:07:00.360 --> 00:07:03.279
+of multiple citation backends for Org.
+
+00:07:03.280 --> 00:07:07.639
+And I think it's just fantastic, really, seeing
+
+00:07:07.640 --> 00:07:09.839
+how quickly Org has gone
+
+00:07:09.840 --> 00:07:12.239
+from having no support for citations
+
+00:07:12.240 --> 00:07:13.239
+at the start of this year
+
+00:07:13.240 --> 00:07:17.559
+to what can be described as
+
+00:07:17.560 --> 00:07:20.199
+a wonderfully rich and flexible support
+
+00:07:20.200 --> 00:07:23.559
+with, well, multiple backends for citations.
+
+00:07:23.560 --> 00:07:27.519
+I think that's something that we can really be proud of.
+
+00:07:27.520 --> 00:07:30.039
+And it's been a fantastic contribution
+
+00:07:30.040 --> 00:07:31.599
+for everybody involved in this process.
+
+NOTE Quality of life improvements
+
+00:07:31.600 --> 00:07:36.119
+Okay, so we've had features.
+
+00:07:36.120 --> 00:07:38.039
+There have also been a whole lot of
+
+00:07:38.040 --> 00:07:39.559
+quality of life improvements.
+
+00:07:39.560 --> 00:07:43.479
+Once again, many more than I can reasonably mention here.
+
+00:07:43.480 --> 00:07:46.079
+So I'm just going to flick it through
+
+00:07:46.080 --> 00:07:48.319
+a few of them. A few big ones though,
+
+NOTE Org fold
+
+00:07:48.320 --> 00:07:52.519
+Ihor is responsible for three lovely developments with Org,
+
+00:07:52.520 --> 00:07:55.119
+one of which is Org fold. So this is a generalisation
+
+00:07:55.120 --> 00:07:57.239
+of the way that content is folded in Org.
+
+00:07:57.240 --> 00:08:00.679
+And I think quite a few of you will actually underestimate
+
+00:08:00.680 --> 00:08:01.679
+how much can be folded in Org.
+
+00:08:01.680 --> 00:08:03.039
+It's not just a matter of headlines.
+
+00:08:03.040 --> 00:08:07.919
+It's headlines, code blocks, lists, environments,
+
+00:08:07.920 --> 00:08:10.519
+all sorts of things can actually be folded in Org.
+
+00:08:10.520 --> 00:08:14.679
+And the introduction of Org fold is important
+
+00:08:14.680 --> 00:08:18.919
+for two reasons. One is that it has allowed for
+
+00:08:18.920 --> 00:08:21.479
+text-property-based folding,
+
+00:08:21.480 --> 00:08:24.479
+which in Emacs versions less than 29
+
+00:08:24.480 --> 00:08:27.719
+has a huge difference in performance,
+
+00:08:27.720 --> 00:08:29.959
+which is particularly apparent with larger files.
+
+00:08:29.960 --> 00:08:32.639
+The second significant thing about this is that
+
+00:08:32.640 --> 00:08:36.479
+it now actually provides a more general way
+
+00:08:36.480 --> 00:08:39.879
+to actually describe changes to the folding structure.
+
+00:08:39.880 --> 00:08:42.559
+So before there was direct modification of
+
+00:08:42.560 --> 00:08:45.959
+messing with overlays scattered around the Org code base.
+
+00:08:45.960 --> 00:08:49.399
+Now we have a much more well organised system
+
+00:08:49.400 --> 00:08:53.319
+where we use Org fold to say what is and isn't folded
+
+00:08:53.320 --> 00:08:54.799
+and to manage the state of all of that,
+
+00:08:54.800 --> 00:08:59.239
+which is, I think, just from a sort of design,
+
+00:08:59.240 --> 00:09:02.479
+sort of project design approach, a much better system.
+
+NOTE Org element cache
+
+00:09:02.480 --> 00:09:06.599
+We've also got the Org element cache by Ihor.
+
+00:09:06.600 --> 00:09:09.239
+This is actually something which was discussed
+
+00:09:09.240 --> 00:09:12.039
+quite a while ago, but has somewhat stalled
+
+00:09:12.040 --> 00:09:14.679
+due to the difficulty of cache invalidation.
+
+00:09:14.680 --> 00:09:17.279
+Ihor has sunk a tremendous amount of effort into this
+
+00:09:17.280 --> 00:09:19.759
+and has improved it to the point
+
+00:09:19.760 --> 00:09:21.799
+where we've now actually been able to
+
+00:09:21.800 --> 00:09:25.639
+enable this by default. So what this basically does is
+
+00:09:25.640 --> 00:09:27.999
+it records lots of information
+
+00:09:28.000 --> 00:09:30.159
+about the structure of the Org document
+
+00:09:30.160 --> 00:09:34.119
+and allows for, well, with the appropriate modifications
+
+00:09:34.120 --> 00:09:37.359
+that Ihor has also made throughout the Org element library
+
+00:09:37.360 --> 00:09:41.559
+to use this information to speed up various operations
+
+00:09:41.560 --> 00:09:44.879
+based on the Org document syntax tree.
+
+00:09:44.880 --> 00:09:48.279
+And so this has been quite--
+
+00:09:48.280 --> 00:09:49.839
+the improvements have been scattered all over the place,
+
+00:09:49.840 --> 00:09:52.719
+but for a good example for libraries
+
+00:09:52.720 --> 00:09:57.719
+or anybody who's wanting to quickly map over Org elements
+
+00:09:57.720 --> 00:10:00.639
+is `org-element-cache-map', which now provides
+
+00:10:00.640 --> 00:10:04.559
+a much, much faster way to map over
+
+00:10:04.560 --> 00:10:07.359
+all of the Org elements in a document.
+
+NOTE Org persist
+
+00:10:07.360 --> 00:10:10.799
+This also ties into the third major feature from Ihor
+
+00:10:10.800 --> 00:10:13.919
+which I'd like to mention, which is Org persist.
+
+00:10:13.920 --> 00:10:17.959
+So this provides a method of persisting values
+
+00:10:17.960 --> 00:10:20.279
+across Emacs sessions, basically saving them
+
+00:10:20.280 --> 00:10:21.799
+to a file somewhere and loading them.
+
+00:10:21.800 --> 00:10:25.719
+Now this works for Elisp values and it also works for files,
+
+00:10:25.720 --> 00:10:29.679
+which we made use of with the improved capabilities
+
+00:10:29.680 --> 00:10:32.479
+for remote files and exports.
+
+00:10:32.480 --> 00:10:35.799
+This has also been used with the `org-element-cache' data.
+
+00:10:35.800 --> 00:10:37.479
+So now, if you've got a massive Org file
+
+00:10:37.480 --> 00:10:41.159
+and you open it once, that data can be saved to
+
+00:10:41.160 --> 00:10:44.319
+with the Org element cache to Org persist,
+
+00:10:44.320 --> 00:10:46.679
+and the next time you load this file
+
+00:10:46.680 --> 00:10:47.919
+in another Emacs session,
+
+00:10:47.920 --> 00:10:50.959
+we can just start with the cached data
+
+00:10:50.960 --> 00:10:53.119
+instead of having to construct everything from scratch,
+
+00:10:53.120 --> 00:10:56.439
+which is quite nice. Once again, a change which
+
+00:10:56.440 --> 00:10:57.719
+much like the other ones,
+
+00:10:57.720 --> 00:11:00.359
+we will see more of an impact in larger files,
+
+00:11:00.360 --> 00:11:02.719
+but a very welcome one everywhere.
+
+NOTE More careful resource downloading
+
+00:11:02.720 --> 00:11:06.799
+Now with remote files, there's also been the beginnings
+
+00:11:06.800 --> 00:11:09.239
+of a bit of an effort with Org
+
+00:11:09.240 --> 00:11:13.119
+to improve the approach we have to safety.
+
+00:11:13.120 --> 00:11:14.999
+So in this case previously,
+
+00:11:15.000 --> 00:11:17.639
+Org would unconditionally download
+
+00:11:17.640 --> 00:11:19.559
+all the remotes of files that's all referenced.
+
+00:11:19.560 --> 00:11:23.759
+And now, it's actually going to maintain a list of
+
+00:11:23.760 --> 00:11:25.519
+sort of safe resources and prompt you
+
+00:11:25.520 --> 00:11:26.639
+when it's surprised by something,
+
+00:11:26.640 --> 00:11:29.886
+to work out whether it should
+
+00:11:29.887 --> 00:11:31.839
+just download this one resource,
+
+00:11:31.840 --> 00:11:35.279
+mark the whole domain as safe, and a few other options.
+
+00:11:35.280 --> 00:11:36.759
+We're also going to probably see
+
+00:11:36.760 --> 00:11:39.079
+a similar approach extend to, for instance,
+
+00:11:39.080 --> 00:11:40.199
+bits of Babel execution in the future.
+
+NOTE Bug fixes
+
+00:11:40.200 --> 00:11:45.359
+Okay bug fixes. It will be remiss of me not to mention that
+
+00:11:45.360 --> 00:11:46.919
+along with all of the features
+
+00:11:46.920 --> 00:11:49.359
+and quality of life improvements,
+
+00:11:49.360 --> 00:11:51.879
+there has been a huge pile of bug fixes.
+
+00:11:51.880 --> 00:11:57.319
+I think the best way to actually get a look at this
+
+00:11:57.320 --> 00:11:59.039
+would be to look at the release notes
+
+00:11:59.040 --> 00:12:00.599
+or maybe even the actual commit log,
+
+00:12:00.600 --> 00:12:04.119
+but you could also just take my word and say that
+
+00:12:04.120 --> 00:12:05.639
+there have been a whole load of them
+
+00:12:05.640 --> 00:12:11.599
+over the past year. So just yes, the code base, I think,
+
+00:12:11.600 --> 00:12:15.799
+is just gradually getting into better and better shape.
+
+NOTE Asynchronous session evaluation
+
+00:12:15.800 --> 00:12:18.199
+Asynchronous session evaluation is I think possibly
+
+00:12:18.200 --> 00:12:19.679
+the final quality-of-life improvement
+
+00:12:19.680 --> 00:12:22.119
+I want to mention. This came early in the year,
+
+00:12:22.120 --> 00:12:24.639
+just with ob-python, and it's been delayed
+
+00:12:24.640 --> 00:12:26.479
+because in order to actually make it work,
+
+00:12:26.480 --> 00:12:29.399
+they've required some fundamental changes to the way
+
+00:12:29.400 --> 00:12:31.079
+that ob-comint works.
+
+00:12:31.080 --> 00:12:33.599
+Now that's been implemented,
+
+00:12:33.600 --> 00:12:36.679
+we've since seen support extended to ob-R,
+
+00:12:36.680 --> 00:12:38.719
+and hopefully, we'll see more languages join this list
+
+00:12:38.720 --> 00:12:42.799
+in the not-too-distant future.
+
+NOTE Nicer tangle mode syntax
+
+00:12:42.800 --> 00:12:45.799
+Now I guess one bonus which I tacked on just for fun is
+
+00:12:45.800 --> 00:12:47.639
+it's now more convenient than ever
+
+00:12:47.640 --> 00:12:52.039
+to actually specify the permissions for tangled files.
+
+00:12:52.040 --> 00:12:54.999
+Previously you had to give a list expression
+
+00:12:55.000 --> 00:12:55.839
+which should be evaluated.
+
+00:12:55.840 --> 00:12:58.319
+Now you can give it directly in octal form
+
+00:12:58.320 --> 00:12:59.719
+instead of being a list expression
+
+00:12:59.720 --> 00:13:01.959
+that produces an integer representation
+
+00:13:01.960 --> 00:13:03.639
+of the octal permissions.
+
+00:13:03.640 --> 00:13:08.439
+Or you can use ls style: rwx and dashes.
+
+00:13:08.440 --> 00:13:13.079
+Or even just chmod. I want to be able to execute this
+
+00:13:13.080 --> 00:13:16.386
+as a user, which will basically modify
+
+00:13:16.387 --> 00:13:18.279
+the default permission to add that capability.
+
+NOTE A flourishing ecosystem
+
+00:13:18.280 --> 00:13:22.679
+Alrighty. So that's the Org project itself,
+
+00:13:22.680 --> 00:13:24.799
+but there's also a whole ecosystem.
+
+00:13:24.800 --> 00:13:27.439
+So what have we got here?
+
+00:13:27.440 --> 00:13:30.319
+Well a whole bunch of Zettelkasten
+
+00:13:30.320 --> 00:13:32.599
+or personal-knowledge-base-type projects.
+
+00:13:32.600 --> 00:13:36.239
+One of which is logseq, so that's an online open source
+
+00:13:36.240 --> 00:13:39.639
+Zettelkasten which supports both Markdown
+
+00:13:39.640 --> 00:13:41.799
+and also Org mode as a first-class format.
+
+00:13:41.800 --> 00:13:45.599
+Then of course we have Org Roam, which provides
+
+00:13:45.600 --> 00:13:48.879
+a Zettelkasten built directly on top of Org within Emacs.
+
+00:13:48.880 --> 00:13:51.639
+Both of these are seen considerably interesting
+
+00:13:51.640 --> 00:13:52.599
+over the past year.
+
+NOTE Org-modern
+
+00:13:52.600 --> 00:13:56.799
+Moving on to visuals, minad has produced
+
+00:13:56.800 --> 00:14:00.439
+another lovely minad package in the form of org-modern
+
+00:14:00.440 --> 00:14:04.559
+which just spruces up the visuals of all documents
+
+00:14:04.560 --> 00:14:09.519
+and seems to have been quite well received recently
+
+00:14:09.520 --> 00:14:10.119
+since its release.
+
+NOTE citeproc-org
+
+00:14:10.120 --> 00:14:13.159
+Building on top of the citations from earlier,
+
+00:14:13.160 --> 00:14:14.559
+Andras Simonyi has produced
+
+00:14:14.560 --> 00:14:16.559
+the wonderful citeproc-org library,
+
+00:14:16.560 --> 00:14:20.799
+which, if you're not familiar,
+
+00:14:20.800 --> 00:14:24.999
+allows the capabilities of the citation style language
+
+00:14:25.000 --> 00:14:26.639
+which has now become something
+
+00:14:26.640 --> 00:14:27.999
+which is quite widely supported
+
+00:14:28.000 --> 00:14:31.079
+to be used for Org citation exports.
+
+00:14:31.080 --> 00:14:33.799
+This means that you've got access to I think at this point
+
+00:14:33.800 --> 00:14:35.799
+is it thousands or tens of thousands
+
+00:14:35.800 --> 00:14:39.879
+of different bibliography and citation formats
+
+00:14:39.880 --> 00:14:42.919
+which is obviously a huge boon to org citations.
+
+00:14:42.920 --> 00:14:46.559
+Lastly, just to be slightly critical,
+
+00:14:46.560 --> 00:14:49.519
+I'm actually going to mention the Neovim Org mode project,
+
+00:14:49.520 --> 00:14:52.079
+because I think this really shows the interest
+
+00:14:52.080 --> 00:14:55.359
+in Org as the format, beyond just Emacs.
+
+00:14:55.360 --> 00:14:58.239
+I think I haven't gone into it much here,
+
+00:14:58.240 --> 00:15:00.919
+but there's been quite a lot of development
+
+00:15:00.920 --> 00:15:04.559
+with external tools making use of the Org format.
+
+00:15:04.560 --> 00:15:07.519
+Clearly, we've done quite a few things right,
+
+00:15:07.520 --> 00:15:11.599
+and so I think it's interesting to see the interest
+
+00:15:11.600 --> 00:15:13.319
+that exists outside of Emacs,
+
+00:15:13.320 --> 00:15:15.239
+even without all the lovely tooling we've built,
+
+00:15:15.240 --> 00:15:18.599
+just out of appreciation of the formatting, its potential.
+
+00:15:18.600 --> 00:15:21.079
+Speaking of the format, though,
+
+00:15:21.080 --> 00:15:24.159
+we've also seen three new parsers on the scene this year.
+
+00:15:24.160 --> 00:15:27.359
+We've got one in Julia, Haskell
+
+00:15:27.360 --> 00:15:28.599
+and another one for Tree sitter.
+
+00:15:28.600 --> 00:15:30.999
+The last one, I think, is currently the least capable,
+
+00:15:31.000 --> 00:15:32.479
+but also potentially the most interesting
+
+00:15:32.480 --> 00:15:36.959
+in terms of what possibilities it allows for.
+
+00:15:36.960 --> 00:15:42.079
+Okay. So that's a quick speed run through
+
+00:15:42.080 --> 00:15:44.039
+some of the developments over the past year.
+
+NOTE Continuing work on the Org format
+
+00:15:44.040 --> 00:15:47.959
+What's coming next? So there's been
+
+00:15:47.960 --> 00:15:50.999
+quite a lot of work done with the Org syntax document.
+
+00:15:51.000 --> 00:15:54.199
+In fact, I've completely written it,
+
+00:15:54.200 --> 00:15:57.239
+and we've now taken it up to spec
+
+00:15:57.240 --> 00:15:59.799
+to actually accurately describe the way
+
+00:15:59.800 --> 00:16:03.199
+that the Org format is, as of Org 9.6.
+
+00:16:03.200 --> 00:16:08.079
+Now, I think this is quite an important document
+
+00:16:08.080 --> 00:16:09.799
+for the growth in parsing tools
+
+00:16:09.800 --> 00:16:11.279
+to help actually ensure
+
+00:16:11.280 --> 00:16:16.439
+that the way that external tools process Org
+
+00:16:16.440 --> 00:16:20.079
+is actually in sync with the way that Org mode does.
+
+00:16:20.080 --> 00:16:22.559
+I think it's worth doing everything we can, really,
+
+00:16:22.560 --> 00:16:24.839
+to avoid the sort of implementation drift
+
+00:16:24.840 --> 00:16:27.719
+that we've seen with Markdown.
+
+00:16:27.720 --> 00:16:29.839
+I don't want anything near that.
+
+00:16:29.840 --> 00:16:32.486
+This is also quite good for the Org format itself because,
+
+00:16:32.487 --> 00:16:34.479
+in the process of going through this sort of effort,
+
+00:16:34.480 --> 00:16:38.199
+it brings attention to irregularities in the syntax
+
+00:16:38.200 --> 00:16:41.519
+which you might want to resolve, and as well as
+
+00:16:41.520 --> 00:16:43.919
+helping the robustness of org mode itself.
+
+00:16:43.920 --> 00:16:46.279
+So ultimately, this is to everybody's benefit, really.
+
+00:16:46.280 --> 00:16:51.799
+It's also my personal hope that this might actually
+
+00:16:51.800 --> 00:16:54.879
+get to the point where we consider submitting this
+
+00:16:54.880 --> 00:16:59.039
+as a text format to the Internet Engineering Task Force
+
+00:16:59.040 --> 00:17:06.319
+as a new text format. So that would be quite nice.
+
+NOTE Mailing list management
+
+00:17:06.320 --> 00:17:09.639
+The Org project itself has a layer on top
+
+00:17:09.640 --> 00:17:13.679
+of the mailing list called Woof developed by Bastien,
+
+00:17:13.680 --> 00:17:16.119
+and that's about to have another major release.
+
+00:17:16.120 --> 00:17:21.359
+So what this is going to do is improve the ease of which
+
+00:17:21.360 --> 00:17:23.319
+we can actually monitor what's going on
+
+00:17:23.320 --> 00:17:27.079
+with the mailing list. So this is when people have patches,
+
+00:17:27.080 --> 00:17:29.599
+bug reports, or other types of things
+
+00:17:29.600 --> 00:17:30.519
+raised on the mailing list.
+
+00:17:30.520 --> 00:17:34.039
+It's a nice way to collect the status of those
+
+00:17:34.040 --> 00:17:35.039
+and put them all in one place.
+
+00:17:35.040 --> 00:17:37.879
+So improvements to this improve the ease of which
+
+00:17:37.880 --> 00:17:40.399
+the Org mode project can be managed,
+
+00:17:40.400 --> 00:17:41.919
+which is always quite nice to see.
+
+NOTE Further engraving
+
+00:17:41.920 --> 00:17:46.319
+There's also been--jumping back to the export
+
+00:17:46.320 --> 00:17:48.359
+which is mentioned right at the start of this presentation--
+
+00:17:48.360 --> 00:17:51.839
+we've got the introduction of engraved faces
+
+00:17:51.840 --> 00:17:54.479
+to LaTeX export. Now what's quite interesting about this
+
+00:17:54.480 --> 00:17:57.599
+is that it's actually used as Emacs' native font lock
+
+00:17:57.600 --> 00:18:01.239
+and allows for processing that in a generalized way
+
+00:18:01.240 --> 00:18:03.839
+to different output formats. So at the moment,
+
+00:18:03.840 --> 00:18:06.919
+this is just integrated with ox-latex,
+
+00:18:06.920 --> 00:18:11.199
+but it contains the functionality needed for HTML and ASCII,
+
+00:18:11.200 --> 00:18:13.719
+and it could also be extended to other formats like ODT.
+
+00:18:13.720 --> 00:18:18.279
+So we could potentially have full syntax highlighting
+
+00:18:18.280 --> 00:18:20.959
+based on Emacs exported to, well,
+
+00:18:20.960 --> 00:18:24.199
+really all of the Org mode backends,
+
+00:18:24.200 --> 00:18:27.359
+except, I suppose, the plain text ones like Markdown.
+
+00:18:27.360 --> 00:18:29.759
+And I think from both the capabilities perspective--
+
+00:18:29.760 --> 00:18:33.039
+because I think, really, font lock in Emacs
+
+00:18:33.040 --> 00:18:34.199
+from Emacs major modes
+
+00:18:34.200 --> 00:18:37.159
+tends to blow basically everything else vaguely used
+
+00:18:37.160 --> 00:18:39.239
+out of the water, whether it be listings, minted
+
+00:18:39.240 --> 00:18:44.999
+or other efforts--and also from a consistency point of view,
+
+00:18:45.000 --> 00:18:49.719
+this could be quite a nice development.
+
+00:18:49.720 --> 00:18:51.119
+Alrighty. Now this talk is "This Year in Org,"
+
+00:18:51.120 --> 00:18:52.599
+and I think you all may have guessed
+
+00:18:52.600 --> 00:18:57.759
+this is very much tied into my work with This Month in Org
+
+00:18:57.760 --> 00:19:00.119
+which started, I think, a bit over a year ago.
+
+00:19:00.120 --> 00:19:04.919
+And so, as you're all avid readers,
+
+00:19:04.920 --> 00:19:05.919
+I'm sure you've noticed
+
+00:19:05.920 --> 00:19:08.519
+that there haven't been as many posts as of late.
+
+00:19:08.520 --> 00:19:11.879
+Now this isn't because my interest in This Month in Org
+
+00:19:11.880 --> 00:19:15.879
+has been diminishing. Simply, it's the consequence
+
+00:19:15.880 --> 00:19:18.759
+of an evaporation of my free time.
+
+00:19:18.760 --> 00:19:22.359
+However, This Month in Org is still going to stick around.
+
+00:19:22.360 --> 00:19:26.159
+The only change really is that the title is going to be--
+
+00:19:26.160 --> 00:19:27.999
+probably continue to be
+
+00:19:28.000 --> 00:19:30.039
+a bit more aspirational than descriptive
+
+00:19:30.040 --> 00:19:32.959
+in the near future. We'll see how this goes.
+
+00:19:32.960 --> 00:19:36.719
+Well, thanks for listening to this overview
+
+00:19:36.720 --> 00:19:38.599
+of the state of Org at the moment,
+
+00:19:38.600 --> 00:19:51.880
+and hopefully, I'll see you next year.
diff --git a/2022/captions/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt b/2022/captions/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..21f8c560
--- /dev/null
+++ b/2022/captions/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt
@@ -0,0 +1,852 @@
+WEBVTT captioned by eduardo
+Kind: captions:
+Language: en-GB
+
+00:00:00.000 --> 00:00:04.000
+Hi! My name is Eduardo Ochs. I'm the author
+
+00:00:04.000 --> 00:00:06.000
+of an Emacs package called eev...
+
+00:00:06.000 --> 00:00:10.000
+and eev is about taking executable notes
+
+00:00:10.000 --> 00:00:13.000
+of everything that you do, and this
+
+00:00:13.000 --> 00:00:16.000
+presentation is about how I use this...
+
+00:00:16.000 --> 00:00:18.000
+how I finally found a way to take
+
+00:00:18.000 --> 00:00:22.000
+executable notes of what the python docs
+
+00:00:22.000 --> 00:00:23.000
+say.
+
+00:00:23.000 --> 00:00:28.000
+Let me explain that in another way. I've
+
+00:00:28.000 --> 00:00:31.000
+try to Learn Python many times, but
+
+00:00:31.000 --> 00:00:34.000
+hm, my brain is wired in a weird way, so
+
+00:00:34.000 --> 00:00:37.000
+it didn't work... and finally a few
+
+00:00:37.000 --> 00:00:40.000
+months ago I found a way of studying
+
+00:00:40.000 --> 00:00:44.000
+Python that finally clicked for me.
+
+00:00:44.000 --> 00:00:47.000
+The idea is that... well, it's here in
+
+00:00:47.000 --> 00:00:50.000
+the title - is a way to create short
+
+00:00:50.000 --> 00:00:52.000
+hyperlinks to the
+
+00:00:52.000 --> 00:00:54.000
+documentation of python.
+
+00:00:54.000 --> 00:00:56.000
+Here's an example.
+
+00:00:56.000 --> 00:01:00.000
+This file contains some some chunks
+
+00:01:00.000 --> 00:01:03.000
+of code from the Python tutorial and
+
+00:01:03.000 --> 00:01:05.000
+some links to the places in which
+
+00:01:05.000 --> 00:01:07.000
+I found these chunks of code.
+
+00:01:07.000 --> 00:01:12.000
+for example, if I run this link here
+
+00:01:12.000 --> 00:01:14.000
+it opens a certain page of the Python
+
+00:01:14.000 --> 00:01:18.000
+tutorial in my browser - note that it
+
+00:01:18.000 --> 00:01:19.000
+opens the local copy of the
+
+00:01:19.000 --> 00:01:22.000
+documentation -
+
+00:01:22.000 --> 00:01:25.000
+and if I
+
+00:01:25.000 --> 00:01:29.000
+run this link here it opens the source
+
+00:01:29.000 --> 00:01:30.000
+in .rst
+
+00:01:30.000 --> 00:01:34.000
+of the same page. So the first link opens
+
+00:01:34.000 --> 00:01:37.000
+the HTML and this one opens the
+
+00:01:37.000 --> 00:01:39.000
+RST. This is useful because in the
+
+00:01:39.000 --> 00:01:40.000
+beginning
+
+00:01:40.000 --> 00:01:44.000
+I was copying these chunks of code in
+
+00:01:44.000 --> 00:01:46.000
+the obvious way - I would simply
+
+00:01:46.000 --> 00:01:50.000
+visit the the documentation in HTML and
+
+00:01:50.000 --> 00:01:51.000
+I would mark
+
+00:01:51.000 --> 00:01:54.000
+a chunk... a snippet of code here and I
+
+00:01:54.000 --> 00:01:58.000
+would copy it to my notes.
+
+00:01:58.000 --> 00:02:01.000
+And then after a while I
+
+00:02:01.000 --> 00:02:03.000
+realized that it was much easier to
+
+00:02:03.000 --> 00:02:07.000
+simply go to the RST sources and to copy
+
+00:02:07.000 --> 00:02:10.000
+the chunks of code from there... and
+
+00:02:10.000 --> 00:02:14.000
+note that these links look quite similar.
+
+00:02:14.000 --> 00:02:17.000
+There's one difference here, that is
+
+00:02:17.000 --> 00:02:20.000
+this `r` that is prepended to the name
+
+00:02:20.000 --> 00:02:23.000
+of the function... the `r` means
+
+00:02:23.000 --> 00:02:26.000
+"open the RST"...
+
+00:02:26.000 --> 00:02:30.000
+and if I use the suffix `w` it means
+
+00:02:30.000 --> 00:02:32.000
+use the documentation on the web instead
+
+00:02:32.000 --> 00:02:34.000
+of using the local copy.
+
+00:02:34.000 --> 00:02:36.000
+So this one
+
+00:02:36.000 --> 00:02:38.000
+opens a local copy
+
+00:02:38.000 --> 00:02:42.000
+and this one
+
+00:02:42.000 --> 00:02:46.000
+takes a while
+
+00:02:46.000 --> 00:02:49.000
+and opens the
+
+00:02:49.000 --> 00:02:52.000
+the page of the documentation in the
+
+00:02:52.000 --> 00:02:56.000
+site of Python blah blah...
+
+00:02:56.000 --> 00:02:58.000
+and this thing here is
+
+00:02:58.000 --> 00:03:02.000
+executable in the usual eev sense, that
+
+00:03:02.000 --> 00:03:05.000
+we ca... if we type f8 several times here
+
+00:03:05.000 --> 00:03:08.000
+the f8s on the lines that start
+
+00:03:08.000 --> 00:03:12.000
+with red stars create a target buffer
+
+00:03:12.000 --> 00:03:14.000
+here... and in this case it creates a
+
+00:03:14.000 --> 00:03:17.000
+target buffer running Python, and if I
+
+00:03:17.000 --> 00:03:20.000
+type f8 on these other lines these are
+
+00:03:20.000 --> 00:03:23.000
+the lines are sent
+
+00:03:23.000 --> 00:03:25.000
+to that REPL.
+
+00:03:25.000 --> 00:03:30.000
+But anyway, let me go back.
+
+00:03:30.000 --> 00:03:32.000
+Most of the things that I'm going to
+
+00:03:32.000 --> 00:03:35.000
+present here are in the tutorial of this...
+
+00:03:35.000 --> 00:03:37.000
+package...
+
+00:03:37.000 --> 00:03:41.000
+we can go to the source code
+
+00:03:41.000 --> 00:03:44.000
+here in the eev directory - it's a file
+
+00:03:44.000 --> 00:03:50.000
+called eev-rstdoc.el but the best
+
+00:03:50.000 --> 00:03:53.000
+docs are in the tutorial, here...
+
+00:03:53.000 --> 00:03:56.000
+and the tutorial also has some
+
+00:03:56.000 --> 00:03:58.000
+executable
+
+00:03:58.000 --> 00:04:02.000
+chunks... some snippets of python
+
+00:04:02.000 --> 00:04:05.000
+code that are executable, but they
+
+00:04:05.000 --> 00:04:07.000
+don't have those nice colors... so
+
+00:04:07.000 --> 00:04:11.000
+apologies for that.
+
+00:04:11.000 --> 00:04:13.000
+We need to run this thing here to make
+
+00:04:13.000 --> 00:04:15.000
+everything work.
+
+00:04:15.000 --> 00:04:17.000
+This thing will define some functions
+
+00:04:17.000 --> 00:04:19.000
+with funny names that I will
+
+00:04:19.000 --> 00:04:26.000
+explain later.
+
+00:04:26.000 --> 00:04:30.000
+Let me explain something new.
+
+00:04:30.000 --> 00:04:35.000
+let's compare all these
+
+00:04:35.000 --> 00:04:38.000
+links here. They take this argument
+
+00:04:38.000 --> 00:04:41.000
+here and they expand the the argument in
+
+00:04:41.000 --> 00:04:44.000
+a certain way. For example this string is
+
+00:04:44.000 --> 00:04:49.000
+expanded to this long URL here... note that
+
+00:04:49.000 --> 00:04:52.000
+it got a prefix here,
+
+00:04:52.000 --> 00:04:56.000
+that's quite long... it got the .html here,
+
+00:04:56.000 --> 00:04:59.000
+and then the hash and the anchor here...
+
+00:04:59.000 --> 00:05:03.000
+and each one of the functions in the
+
+00:05:03.000 --> 00:05:06.000
+pydoc family expands this
+
+00:05:06.000 --> 00:05:09.000
+argument in a different way.
+
+00:05:09.000 --> 00:05:12.000
+The one that that opens the doc in the
+
+00:05:12.000 --> 00:05:16.000
+web uses another prefix -
+
+00:05:16.000 --> 00:05:20.000
+this one - and the one that opens the rst
+
+00:05:20.000 --> 00:05:24.000
+file ignores the part after the hash
+
+00:05:24.000 --> 00:05:28.000
+for technical reasons... I was never
+
+00:05:28.000 --> 00:05:30.000
+able to to find a good way to convert
+
+00:05:30.000 --> 00:05:33.000
+this hash into a string to search for,
+
+00:05:33.000 --> 00:05:35.000
+so to make something that goes to
+
+00:05:35.000 --> 00:05:38.000
+the right section in the link to the rst
+
+00:05:38.000 --> 00:05:42.000
+doc I have to convert by hand, and by
+
+00:05:42.000 --> 00:05:46.000
+trial and error, this thing here into a
+
+00:05:46.000 --> 00:05:48.000
+pointer to that section, like
+
+00:05:48.000 --> 00:05:50.000
+this one...
+
+00:05:50.000 --> 00:05:55.000
+in which the "_numeric-types:"
+
+00:05:55.000 --> 00:05:58.000
+is here.
+
+00:05:58.000 --> 00:06:02.000
+So all these links here are based on
+
+00:06:02.000 --> 00:06:04.000
+expansion, and this is easy to
+
+00:06:04.000 --> 00:06:05.000
+understand...
+
+00:06:05.000 --> 00:06:08.000
+but suppose that I want to
+
+00:06:08.000 --> 00:06:11.000
+create a link like this, or suppose that
+
+00:06:11.000 --> 00:06:16.000
+I'm browsing the docs here
+
+00:06:16.000 --> 00:06:21.000
+and I just I follow some some links...
+
+00:06:21.000 --> 00:06:31.000
+let me do something random here...
+
+00:06:31.000 --> 00:06:34.000
+suppose that I decide that this
+
+00:06:34.000 --> 00:06:35.000
+section is very interesting. How can I
+
+00:06:35.000 --> 00:06:39.000
+create a link to that? I can
+
+00:06:39.000 --> 00:06:44.000
+use this pilcrow symbol and the
+
+00:06:44.000 --> 00:06:45.000
+"Copy link address",
+
+00:06:45.000 --> 00:06:49.000
+and copy the link to
+
+00:06:49.000 --> 00:06:51.000
+my notes...
+
+00:06:51.000 --> 00:06:55.000
+and then the Python family...
+
+00:06:55.000 --> 00:06:58.000
+well, we saw the the functions in the
+
+00:06:58.000 --> 00:07:00.000
+Python family have a certain way - have
+
+00:07:00.000 --> 00:07:03.000
+several ways of expanding these
+
+00:07:03.000 --> 00:07:06.000
+short arguments... and they also have a
+
+00:07:06.000 --> 00:07:07.000
+certain way of
+
+00:07:07.000 --> 00:07:11.000
+shortening URLs like this one. If I type
+
+00:07:11.000 --> 00:07:12.000
+`M-x pdk` the message is this one.
+
+00:07:12.000 --> 00:07:17.000
+`pdk` is a mnemonic for
+
+00:07:17.000 --> 00:07:20.000
+"Python doc kill", and this
+
+00:07:20.000 --> 00:07:23.000
+"kill" means "copy to the kill ring"
+
+00:07:23.000 --> 00:07:27.000
+so if I type `M-x pdk` here it
+
+00:07:27.000 --> 00:07:31.000
+considers that this thing is a link
+
+00:07:31.000 --> 00:07:34.000
+to the python Docs, and it
+
+00:07:34.000 --> 00:07:36.000
+shortens this link in a certain way, and
+
+00:07:36.000 --> 00:07:42.000
+it kills a short link.
+
+00:07:42.000 --> 00:07:45.000
+I can insert the short link with C-y
+
+00:07:45.000 --> 00:07:46.000
+(yank)
+
+00:07:46.000 --> 00:07:49.000
+and then I can test this link to be sure
+
+00:07:49.000 --> 00:07:52.000
+that it points to where I want, and
+
+00:07:52.000 --> 00:07:55.000
+then I can delete this thing, and ta-da,
+
+00:07:55.000 --> 00:07:57.000
+now I have a short link, and of course I
+
+00:07:57.000 --> 00:08:00.000
+can modify this link by adding a suffix
+
+00:08:00.000 --> 00:08:02.000
+here...
+
+00:08:02.000 --> 00:08:06.000
+and in this case here
+
+00:08:06.000 --> 00:08:09.000
+I will have to change the identifier
+
+00:08:09.000 --> 00:08:12.000
+to something else...
+
+00:08:12.000 --> 00:08:18.000
+but I'm not going to do that now.
+
+00:08:18.000 --> 00:08:20.000
+This module of eev comes with three
+
+00:08:20.000 --> 00:08:24.000
+families predefined. One is a family that
+
+00:08:24.000 --> 00:08:26.000
+points to the the documentation of
+
+00:08:26.000 --> 00:08:28.000
+Python itself, another one points the
+
+00:08:28.000 --> 00:08:30.000
+documentation of SymPy, that is a program
+
+00:08:30.000 --> 00:08:34.000
+for symbolic computation, like for doing
+
+00:08:34.000 --> 00:08:37.000
+mathematics equations...
+
+00:08:37.000 --> 00:08:40.000
+and the other one points to the
+
+00:08:40.000 --> 00:08:43.000
+documentation of MatPlotLib.
+
+00:08:43.000 --> 00:08:47.000
+How do these families work?
+
+00:08:47.000 --> 00:08:51.000
+Each family has to be defined in two
+
+00:08:51.000 --> 00:08:53.000
+parts.
+
+00:08:53.000 --> 00:08:55.000
+Remember that
+
+00:08:55.000 --> 00:08:58.000
+eev has lots of functions
+
+00:08:58.000 --> 00:09:03.000
+like this one... this one
+
+00:09:03.000 --> 00:09:06.000
+is the most basic, and it is explained
+
+00:09:06.000 --> 00:09:08.000
+here, in this section of the main
+
+00:09:08.000 --> 00:09:13.000
+tutorial. This section explains that
+
+00:09:13.000 --> 00:09:16.000
+a sexp like this one produces lots of
+
+00:09:16.000 --> 00:09:19.000
+functions - produces a family of
+
+00:09:19.000 --> 00:09:23.000
+functions - and it does that by producing
+
+00:09:23.000 --> 00:09:25.000
+a certain chunk of code and then
+
+00:09:25.000 --> 00:09:28.000
+executing this chunk of code... and if we
+
+00:09:28.000 --> 00:09:31.000
+add a certain prefix here... `find-` and we
+
+00:09:31.000 --> 00:09:35.000
+execute this we can... instead of executing
+
+00:09:35.000 --> 00:09:37.000
+that chunk of code we can see what is
+
+00:09:37.000 --> 00:09:39.000
+that chunk of code. In the case of `code-c-d`
+
+00:09:39.000 --> 00:09:43.000
+it is this. It is a `setq`, several
+
+00:09:43.000 --> 00:09:47.000
+`defun`s, and some comments here, with
+
+00:09:47.000 --> 00:09:49.000
+links to the documentation.
+
+00:09:49.000 --> 00:09:52.000
+In the case of rstdoc it's the same.
+
+00:09:52.000 --> 00:09:54.000
+We have this function here that defines
+
+00:09:54.000 --> 00:09:56.000
+the function in the python family...
+
+00:09:56.000 --> 00:09:59.000
+and we can run this to understand what
+
+00:09:59.000 --> 00:10:03.000
+this `code-rstdoc` does.
+
+00:10:03.000 --> 00:10:05.000
+It creates this temporary buffer here...
+
+00:10:05.000 --> 00:10:09.000
+with lots of `defun`s, a `code-c-d` here,
+
+00:10:09.000 --> 00:10:10.000
+and lots of comments here... and the
+
+00:10:10.000 --> 00:10:13.000
+comments include some tests. For example
+
+00:10:13.000 --> 00:10:16.000
+we can use these functions here to test
+
+00:10:16.000 --> 00:10:21.000
+how the expansion works.
+
+00:10:21.000 --> 00:10:23.000
+And
+
+00:10:23.000 --> 00:10:26.000
+note that in this buffer here we don't
+
+00:10:26.000 --> 00:10:28.000
+have the paths that that this family
+
+00:10:28.000 --> 00:10:31.000
+uses. We don't have for example
+
+00:10:31.000 --> 00:10:33.000
+the URL that points to the site of
+
+00:10:33.000 --> 00:10:36.000
+Python, to the directory that contains
+
+00:10:36.000 --> 00:10:40.000
+the reference manual, or whatever... all
+
+00:10:40.000 --> 00:10:42.000
+these things are in another part of the
+
+00:10:42.000 --> 00:10:44.000
+definition of that family - that is a
+
+00:10:44.000 --> 00:10:45.000
+variable.
+
+00:10:45.000 --> 00:10:48.000
+If we execute this we go to the
+
+00:10:48.000 --> 00:10:50.000
+source code of eev-rstdoc,
+
+00:10:50.000 --> 00:10:54.000
+to the parts in which
+
+00:10:54.000 --> 00:10:57.000
+this variable is defined...
+
+00:10:57.000 --> 00:10:59.000
+and
+
+00:10:59.000 --> 00:11:01.000
+for each family we have a variable like
+
+00:11:01.000 --> 00:11:02.000
+this,
+
+00:11:02.000 --> 00:11:05.000
+whose value is a property
+
+00:11:05.000 --> 00:11:07.000
+list with several fields...
+
+00:11:07.000 --> 00:11:09.000
+these first fields are very easy to
+
+00:11:09.000 --> 00:11:10.000
+understand - they are used in the
+
+00:11:10.000 --> 00:11:16.000
+expansion... this one too. And these
+
+00:11:16.000 --> 00:11:19.000
+two fields are used in the shrinking -
+
+00:11:19.000 --> 00:11:21.000
+in the shortening - and
+
+00:11:21.000 --> 00:11:25.000
+this field here
+
+00:11:25.000 --> 00:11:28.000
+tells what is the name of the
+
+00:11:28.000 --> 00:11:30.000
+killing function
+
+00:11:30.000 --> 00:11:33.000
+so the fields of this thing here are
+
+00:11:33.000 --> 00:11:34.000
+used
+
+00:11:34.000 --> 00:11:36.000
+to generate...
+
+00:11:36.000 --> 00:11:39.000
+some fields are used to generate the
+
+00:11:39.000 --> 00:11:41.000
+code that appears here, and some fields
+
+00:11:41.000 --> 00:11:44.000
+are simply
+
+00:11:44.000 --> 00:11:47.000
+read by functions like this one, that
+
+00:11:47.000 --> 00:11:51.000
+consults the variable.
+
+00:11:51.000 --> 00:11:53.000
+Now the natural question is: how can we
+
+00:11:53.000 --> 00:11:57.000
+define new families? Or: how can we change
+
+00:11:57.000 --> 00:11:59.000
+a family like this one to point to
+
+00:11:59.000 --> 00:12:03.000
+another version of Python?
+
+00:12:03.000 --> 00:12:06.000
+There are some template-based functions
+
+00:12:06.000 --> 00:12:09.000
+for doing that. They are explained in
+
+00:12:09.000 --> 00:12:10.000
+this section of the tutorial...
+
+00:12:10.000 --> 00:12:14.000
+where is that?...
+
+00:12:14.000 --> 00:12:17.000
+oh God, it's far away...
+
+00:12:17.000 --> 00:12:20.000
+here.
+
+00:12:20.000 --> 00:12:23.000
+Suppose that we have a package foo, that
+
+00:12:23.000 --> 00:12:25.000
+we want to create a family that points
+
+00:12:25.000 --> 00:12:27.000
+to the docs
+
+00:12:27.000 --> 00:12:31.000
+of that package foo... so, we
+
+00:12:31.000 --> 00:12:32.000
+can execute this thing here, and it
+
+00:12:32.000 --> 00:12:34.000
+generates this
+
+00:12:34.000 --> 00:12:37.000
+this thing from a template.
+
+00:12:37.000 --> 00:12:40.000
+If we just want to modify a current
+
+00:12:40.000 --> 00:12:42.000
+definition we can run something like
+
+00:12:42.000 --> 00:12:44.000
+this - note that the family `:py`
+
+00:12:44.000 --> 00:12:47.000
+already exists, and instead of using
+
+00:12:47.000 --> 00:12:51.000
+placeholders in some of these
+
+00:12:51.000 --> 00:12:53.000
+URLs it will use the current values of
+
+00:12:53.000 --> 00:12:55.000
+the fields...
+
+00:12:55.000 --> 00:12:59.000
+so we can also use this modify
+
+00:12:59.000 --> 00:13:01.000
+existing families.
+
+00:13:01.000 --> 00:13:05.000
+Well these are the technical details.
+
+00:13:05.000 --> 00:13:08.000
+Now the natural question is: why do I
+
+00:13:08.000 --> 00:13:12.000
+want this? This doesn't
+
+00:13:12.000 --> 00:13:14.000
+any sense to me! Why should I
+
+00:13:14.000 --> 00:13:15.000
+try this?
+
+00:13:15.000 --> 00:13:18.000
+And the best answer: is for most people
+
+00:13:18.000 --> 00:13:21.000
+this way of using
+
+00:13:21.000 --> 00:13:24.000
+executable notes do not make any sense
+
+00:13:24.000 --> 00:13:27.000
+at all at first sight...
+
+00:13:27.000 --> 00:13:30.000
+so what I'm trying to do is: I'm trying
+
+00:13:30.000 --> 00:13:33.000
+to write to these tutorials with
+
+00:13:33.000 --> 00:13:35.000
+many examples that are very easy to run,
+
+00:13:35.000 --> 00:13:38.000
+and that examine data structures,
+
+00:13:38.000 --> 00:13:40.000
+and functions, and test things,
+
+00:13:40.000 --> 00:13:46.000
+and so on... so my main argument
+
+00:13:46.000 --> 00:13:48.000
+for convincing people to
+
+00:13:48.000 --> 00:13:52.000
+test this is: this is trivial to test -
+
+00:13:52.000 --> 00:13:54.000
+simply install eev and run this thing
+
+00:13:54.000 --> 00:13:56.000
+here, and run the examples, and probably
+
+00:13:56.000 --> 00:13:58.000
+you're going to find that this
+
+00:13:58.000 --> 00:14:01.000
+tutorial is fun to follow.
+
+00:14:01.000 --> 00:14:03.000
+So that's it! =)
diff --git a/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.vtt b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.vtt
new file mode 100644
index 00000000..7365f8e9
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.vtt
@@ -0,0 +1,1133 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.160
+ We'll hit start recording.
+
+00:00:02.160 --> 00:00:03.400
+ All right, everyone.
+
+00:00:03.400 --> 00:00:05.840
+ Thanks, Andrew, for the great talk.
+
+00:00:05.840 --> 00:00:06.840
+ Super cool.
+
+00:00:06.840 --> 00:00:09.240
+ So now we have the live Q&A with Andrew.
+
+00:00:09.240 --> 00:00:12.440
+ Folks, you can start by asking your questions on the pad.
+
+00:00:12.440 --> 00:00:14.680
+ And we will also open up this big blue button
+
+00:00:14.680 --> 00:00:17.160
+ room in a few minutes for folks who
+
+00:00:17.160 --> 00:00:19.920
+ want to join here and ask questions here directly
+
+00:00:19.920 --> 00:00:21.320
+ to Andrew.
+
+00:00:21.320 --> 00:00:24.080
+ Thanks again, and take it away, Andrew.
+
+00:00:24.080 --> 00:00:26.400
+ OK, thank you.
+
+00:00:26.400 --> 00:00:29.720
+ Let's start from pod questions.
+
+00:00:29.720 --> 00:00:35.560
+ The first one, do I use this to have multiple configs
+
+00:00:35.560 --> 00:00:35.880
+ running
+
+00:00:35.880 --> 00:00:39.560
+ side by side for deep comparison?
+
+00:00:39.560 --> 00:00:43.920
+ Actually, I have two configurations primary here.
+
+00:00:43.920 --> 00:00:46.640
+ The first one is my main configuration
+
+00:00:46.640 --> 00:00:51.600
+ for the whole environment, which manages all the dot files.
+
+00:00:51.600 --> 00:00:55.080
+ And the second one is virtualenv-like.
+
+00:00:55.080 --> 00:00:59.600
+ It creates a new shell with some environment variables.
+
+00:00:59.600 --> 00:01:01.000
+ It's set inside it.
+
+00:01:01.000 --> 00:01:05.920
+ And it includes Emacs load path and other things
+
+00:01:05.920 --> 00:01:10.240
+ to make Emacs able to explore packages
+
+00:01:10.240 --> 00:01:13.040
+ inside this small environment.
+
+00:01:13.040 --> 00:01:18.120
+ And it removes all unnecessary environment variables,
+
+00:01:18.120 --> 00:01:20.160
+ which pollutes the environment.
+
+00:01:20.160 --> 00:01:25.800
+ So we have quite a small scope on which only Emacs
+
+00:01:25.800 --> 00:01:28.480
+ and a few other packages are available.
+
+00:01:28.480 --> 00:01:31.280
+ And as you saw at the end of the talk,
+
+00:01:31.280 --> 00:01:33.880
+ it was the example of such small environment
+
+00:01:33.880 --> 00:01:38.500
+ where I set up Emacs and all the dependencies from ground
+
+00:01:38.500 --> 00:01:38.920
+ up.
+
+00:01:38.920 --> 00:01:40.760
+ And actually, the similar thing I
+
+00:01:40.760 --> 00:01:43.760
+ use for development of my projects,
+
+00:01:43.760 --> 00:01:45.440
+ I have their project environments
+
+00:01:45.440 --> 00:01:47.640
+ made in the same way.
+
+00:01:47.640 --> 00:01:52.400
+ But usually, I use my primary Emacs instance.
+
+00:01:52.400 --> 00:01:55.880
+ But sometimes, it can be kind of mixed.
+
+00:01:55.880 --> 00:01:59.080
+ I have a few talks on my YouTube channel.
+
+00:01:59.080 --> 00:02:03.630
+ And you can check them out to get more information about it
+
+00:02:03.630 --> 00:02:04.000
+.
+
+00:02:04.000 --> 00:02:04.560
+ The second--
+
+00:02:04.560 --> 00:02:05.060
+ Sorry.
+
+00:02:05.060 --> 00:02:06.320
+ One quick request, Andrew.
+
+00:02:06.320 --> 00:02:08.780
+ People are saying if you could maybe speak up a little bit
+
+00:02:08.780 --> 00:02:11.170
+ more so that they could hear you better, that would be
+
+00:02:11.170 --> 00:02:11.760
+ great.
+
+00:02:11.760 --> 00:02:12.840
+ OK, sure.
+
+00:02:12.840 --> 00:02:14.560
+ Thank you.
+
+00:02:14.560 --> 00:02:16.760
+ The second question.
+
+00:02:16.760 --> 00:02:20.080
+ Are you using Gix system or Gix on top of another distro?
+
+00:02:20.080 --> 00:02:22.480
+ If system, any tips?
+
+00:02:22.480 --> 00:02:24.920
+ I tried Gix system, but found getting started
+
+00:02:24.920 --> 00:02:27.760
+ was very difficult due to lack of Wi-Fi firmware
+
+00:02:27.760 --> 00:02:31.640
+ and incomplete documentation.
+
+00:02:31.640 --> 00:02:35.280
+ Personally, I use Gix system, Gix home,
+
+00:02:35.280 --> 00:02:38.200
+ Gix as a package manager, and also as a deployment tool
+
+00:02:38.200 --> 00:02:40.880
+ for a few services.
+
+00:02:40.880 --> 00:02:44.700
+ I started from very basic setup where I didn't have
+
+00:02:44.700 --> 00:02:45.360
+ anything
+
+00:02:45.360 --> 00:02:49.080
+ and build it piece by piece, including
+
+00:02:49.080 --> 00:02:52.400
+ building Gix home project.
+
+00:02:52.400 --> 00:02:56.680
+ So yeah, I use Gix system and all the things.
+
+00:02:56.680 --> 00:03:02.040
+ And talking about Wi-Fi, first option
+
+00:03:02.040 --> 00:03:04.680
+ is to buy a Wi-Fi adapter, which doesn't
+
+00:03:04.680 --> 00:03:07.080
+ require proprietary firmware.
+
+00:03:07.080 --> 00:03:11.040
+ And another option is finding the firmware and installing
+
+00:03:11.040 --> 00:03:12.000
+ it.
+
+00:03:12.000 --> 00:03:13.760
+ So it's up to you.
+
+00:03:13.760 --> 00:03:17.840
+ Everything actually is relatively easy,
+
+00:03:17.840 --> 00:03:23.600
+ and you can relatively easy find the way to do it.
+
+00:03:23.600 --> 00:03:25.560
+ The third question.
+
+00:03:25.560 --> 00:03:29.360
+ One of the issues I have had managing Emacs packages
+
+00:03:29.360 --> 00:03:32.360
+ with Gix is a conflict between Gix package
+
+00:03:32.360 --> 00:03:35.160
+ attest read-only and the Emacs package
+
+00:03:35.160 --> 00:03:37.840
+ attest hackable in real time.
+
+00:03:37.840 --> 00:03:40.680
+ Any suggestions to resolve this?
+
+00:03:40.680 --> 00:03:45.600
+ Yes, I have suggestions to resolve this.
+
+00:03:45.600 --> 00:03:46.600
+ Actually, it's true.
+
+00:03:46.600 --> 00:03:50.560
+ Everything which is in GNU store is read-only.
+
+00:03:50.560 --> 00:03:55.680
+ Everything which is built with Gix is almost set in stone,
+
+00:03:55.680 --> 00:04:00.720
+ and you can't edit it in real time.
+
+00:04:00.720 --> 00:04:02.720
+ But what I do--
+
+00:04:02.720 --> 00:04:03.760
+ can I share my screen?
+
+00:04:03.760 --> 00:04:09.160
+ One second.
+
+00:04:09.160 --> 00:04:14.140
+ I will press a few buttons, and I hope you will see it soon
+
+00:04:14.140 --> 00:04:14.360
+.
+
+00:04:16.360 --> 00:04:16.360
+
+
+00:04:16.360 --> 00:04:18.080
+ Or maybe not so soon.
+
+00:04:18.080 --> 00:04:26.600
+ What I basically do, I take parts of the ELISP,
+
+00:04:26.600 --> 00:04:30.240
+ and I have them inside my scheme file
+
+00:04:30.240 --> 00:04:36.640
+ that I use to define my home environment and other things.
+
+00:04:36.640 --> 00:04:38.560
+ I don't know-- oh, OK.
+
+00:04:38.560 --> 00:04:39.640
+ That's it.
+
+00:04:39.640 --> 00:04:43.560
+ For example, here, this part is a scheme code.
+
+00:04:43.560 --> 00:04:46.640
+ But this part is pure ELISP code.
+
+00:04:46.640 --> 00:04:56.400
+ And I can use a direct region and use Emacs ELISP mode here
+
+00:04:56.400 --> 00:04:56.440
+.
+
+00:04:56.440 --> 00:05:01.160
+ I will need parts, edit those parts, and select.
+
+00:05:01.160 --> 00:05:05.520
+ And when I'm fine with all the edits I did here--
+
+00:05:05.520 --> 00:05:08.400
+ for example, I can evaluate this form using
+
+00:05:08.400 --> 00:05:10.760
+ Control-X, Control-E, and so on.
+
+00:05:10.760 --> 00:05:13.300
+ And when I'm good with the results,
+
+00:05:13.300 --> 00:05:16.920
+ I can just save it and rebuild my whole home environment
+
+00:05:16.920 --> 00:05:21.360
+ and see it on a fresh Emacs instance load
+
+00:05:21.360 --> 00:05:26.760
+ from the new configuration and see if everything
+
+00:05:26.760 --> 00:05:28.880
+ works here as well.
+
+00:05:28.880 --> 00:05:32.760
+ So it's a little less interactive
+
+00:05:32.760 --> 00:05:35.000
+ than the usual Emacs configuration,
+
+00:05:35.000 --> 00:05:36.480
+ but still works quite well.
+
+00:05:40.800 --> 00:05:43.540
+ A question-- what is next for RD?
+
+00:05:43.540 --> 00:05:48.420
+ Actually, I have short-term plans and a little more
+
+00:05:48.420 --> 00:05:49.660
+ long-term plans.
+
+00:05:49.660 --> 00:05:52.580
+ Short-term plan is to make a first release
+
+00:05:52.580 --> 00:05:54.740
+ by the end of this year.
+
+00:05:54.740 --> 00:05:58.860
+ And this release-- actually, RD is quite usable currently,
+
+00:05:58.860 --> 00:06:02.220
+ but there is not much documentation and not
+
+00:06:02.220 --> 00:06:04.620
+ so many examples.
+
+00:06:04.620 --> 00:06:09.060
+ So I would like to prepare a documentation
+
+00:06:09.060 --> 00:06:15.500
+ getting started guide, live CD that you can use
+
+00:06:15.500 --> 00:06:23.020
+ for exploration purpose and for installation.
+
+00:06:23.020 --> 00:06:31.380
+ And also, I would like to find one or two maintainers which
+
+00:06:31.380 --> 00:06:37.260
+ will help with upcoming patches, because it's already
+
+00:06:37.260 --> 00:06:40.300
+ at least a few people who use it on a daily basis,
+
+00:06:40.300 --> 00:06:42.860
+ and they send a lot of patches.
+
+00:06:42.860 --> 00:06:46.860
+ And sometimes I have a hard time keeping up
+
+00:06:46.860 --> 00:06:49.660
+ with the speed of creating patches.
+
+00:06:49.660 --> 00:06:53.540
+ So the short-term plans is to make a first release
+
+00:06:53.540 --> 00:06:54.860
+ by the end of the year.
+
+00:06:54.860 --> 00:07:00.140
+ The long-term plans we can discuss later, I think.
+
+00:07:00.140 --> 00:07:03.580
+ And I will share them in RD announced mailing list.
+
+00:07:06.220 --> 00:07:12.980
+ OK, I think that's it for patterns.
+
+00:07:12.980 --> 00:07:14.580
+ Let me check RC.
+
+00:07:14.580 --> 00:07:30.060
+ I have-- OK, it seems that I answered all questions
+
+00:07:30.060 --> 00:07:31.540
+ that I found.
+
+00:07:31.540 --> 00:07:33.180
+ Let me know if something appears.
+
+00:07:33.180 --> 00:07:39.580
+ [AUDIO OUT]
+
+00:07:39.580 --> 00:07:40.580
+ Cool, thanks, Andrew.
+
+00:07:40.580 --> 00:07:44.820
+ And yeah, I think we still have over 10 minutes, maybe
+
+00:07:44.820 --> 00:07:49.460
+ 12 minutes or so of live Q&A time on the stream.
+
+00:07:49.460 --> 00:07:51.180
+ So if people still have more questions,
+
+00:07:51.180 --> 00:07:53.180
+ please feel free to either add them on the pad,
+
+00:07:53.180 --> 00:07:54.540
+ or I think you should now also be
+
+00:07:54.540 --> 00:08:00.020
+ able to join this big blue button room to ask directly.
+
+00:08:00.020 --> 00:08:04.100
+ OK, I see one more question.
+
+00:08:04.100 --> 00:08:08.100
+ But I'm not sure what does it mean.
+
+00:08:08.100 --> 00:08:10.380
+ Do you use Emacs without this?
+
+00:08:10.380 --> 00:08:13.940
+ If so, for what purpose?
+
+00:08:13.940 --> 00:08:17.780
+ And how does it feel compared to RD?
+
+00:08:17.780 --> 00:08:20.980
+ OK, it's a question in general.
+
+00:08:20.980 --> 00:08:24.020
+ No, I don't use Emacs without RD.
+
+00:08:24.020 --> 00:08:28.700
+ Actually, all the Emacs configurations I use
+
+00:08:28.700 --> 00:08:33.340
+ is based on RD and built from that.
+
+00:08:33.340 --> 00:08:43.580
+ There is a way to add almost everything
+
+00:08:43.580 --> 00:08:45.940
+ you have in your basic Emacs configuration
+
+00:08:45.940 --> 00:08:52.540
+ to your RD Emacs configuration by creating a file
+
+00:08:52.540 --> 00:08:56.780
+ in your usual .config/emacsd directory
+
+00:08:56.780 --> 00:09:01.740
+ and loading it from your .init/el directory.
+
+00:09:01.740 --> 00:09:07.940
+ So you actually can have a very usual Emacs configuration
+
+00:09:07.940 --> 00:09:12.420
+ workflow in addition to RD.
+
+00:09:12.420 --> 00:09:16.500
+ But I don't use it because it's not a reproducible way
+
+00:09:16.500 --> 00:09:20.940
+ to do things because such workflow means
+
+00:09:20.940 --> 00:09:25.220
+ that I need to install packages separately somehow,
+
+00:09:25.220 --> 00:09:31.740
+ either with gix install or maybe some other package manager
+
+00:09:31.740 --> 00:09:31.740
+,
+
+00:09:31.740 --> 00:09:37.610
+ or maybe this package manager, like package.al or straight.
+
+00:09:37.610 --> 00:09:37.860
+al.
+
+00:09:37.860 --> 00:09:44.060
+ And it doesn't work well in the long term
+
+00:09:44.060 --> 00:09:46.620
+ because if I move such configuration, which
+
+00:09:46.620 --> 00:09:52.700
+ partially RD and partially usual Emacs configuration,
+
+00:09:52.700 --> 00:09:58.980
+ it will break on the new machine or maybe somewhere else
+
+00:09:58.980 --> 00:10:03.700
+ where I would like to move this configuration later.
+
+00:10:03.700 --> 00:10:23.700
+ OK.
+
+00:10:23.700 --> 00:10:27.700
+ We have a last slot for Q and A in the pad.
+
+00:10:27.700 --> 00:10:39.380
+ [LAUGHS]
+
+00:10:39.380 --> 00:10:43.940
+ Thank you, everyone, for joining this talk.
+
+00:10:43.940 --> 00:10:46.820
+ It was a pleasure to interview you.
+
+00:10:46.820 --> 00:10:52.780
+ I will be here for at least an hour or so
+
+00:10:52.780 --> 00:10:56.340
+ before I will go preparing to sleep.
+
+00:10:56.340 --> 00:11:02.740
+ So you can reach me by email, RC, here in big blue button
+
+00:11:02.740 --> 00:11:07.220
+ or some other way, probably.
+
+00:11:07.220 --> 00:11:09.660
+ Are there any plans to push things
+
+00:11:09.660 --> 00:11:12.660
+ from RD to gix main channel?
+
+00:11:12.660 --> 00:11:16.420
+ Actually, I have a commit access to gix,
+
+00:11:16.420 --> 00:11:20.300
+ and I try to upstream everything that
+
+00:11:20.300 --> 00:11:25.060
+ can be beneficial for both RD and gix to gix
+
+00:11:25.060 --> 00:11:30.740
+ and use it from the upstream.
+
+00:11:30.740 --> 00:11:35.320
+ But sometimes on some question, we didn't reach an
+
+00:11:35.320 --> 00:11:35.900
+ agreement,
+
+00:11:35.900 --> 00:11:40.660
+ or sometimes it's much easier to implement it
+
+00:11:40.660 --> 00:11:46.500
+ in a more rapid way, which probably I
+
+00:11:46.500 --> 00:11:52.380
+ wouldn't like to add to gix because it will require
+
+00:11:52.380 --> 00:11:56.340
+ too much time trying to fit to some gix.
+
+00:11:56.340 --> 00:11:59.140
+ So I keep it only in RD.
+
+00:11:59.140 --> 00:12:04.020
+ But the things that I see beneficial for both projects,
+
+00:12:04.020 --> 00:12:07.460
+ I try to share and to move them to gix.
+
+00:12:21.500 --> 00:12:22.220
+ Sounds great.
+
+00:12:22.220 --> 00:12:23.780
+ And another reminder for the folks
+
+00:12:23.780 --> 00:12:26.460
+ that you can join big blue button also directly.
+
+00:12:26.460 --> 00:12:29.340
+ If you want to type your questions into chat here
+
+00:12:29.340 --> 00:12:32.580
+ or just ask them over mic or with a microphone,
+
+00:12:32.580 --> 00:12:33.540
+ you can do that as well.
+
+00:12:33.540 --> 00:12:46.260
+ I think we still have about actually 10 or 12 more minutes.
+
+00:12:46.260 --> 00:12:48.100
+ I think I underestimated what we had.
+
+00:12:48.100 --> 00:12:50.100
+ So we still have plenty of time for questions.
+
+00:12:50.100 --> 00:12:56.500
+ [AUDIO OUT]
+
+00:12:56.500 --> 00:13:01.540
+ Added one more slot for Gondi in case someone
+
+00:13:01.540 --> 00:13:05.180
+ would like to fill it.
+
+00:13:05.180 --> 00:13:06.740
+ Thanks.
+
+00:13:06.740 --> 00:13:34.220
+ [AUDIO OUT]
+
+00:13:34.220 --> 00:13:39.260
+ How difficult is to add support for new packages to gix?
+
+00:13:39.260 --> 00:13:44.020
+ Have you found that's burdensome versus package L
+
+00:13:44.020 --> 00:13:48.540
+ or other in Emacs package management approach?
+
+00:13:48.540 --> 00:13:53.940
+ Actually, I find it quite easy to create packages for gix.
+
+00:13:53.940 --> 00:13:59.460
+ Maybe because I'm quite familiar with gix source code.
+
+00:13:59.460 --> 00:14:03.580
+ But maybe because it's not that difficult,
+
+00:14:03.580 --> 00:14:11.660
+ you just open a respective model like rd packages or gnu
+
+00:14:11.660 --> 00:14:13.540
+ packages in gix repository.
+
+00:14:13.540 --> 00:14:15.660
+ And you define the package you want.
+
+00:14:15.660 --> 00:14:19.100
+ And you define the dependencies you want.
+
+00:14:19.100 --> 00:14:25.540
+ Actually, a lot of packages already here in gix.
+
+00:14:25.540 --> 00:14:29.580
+ And some of the packages I package in rd
+
+00:14:29.580 --> 00:14:31.660
+ and later move to the gix.
+
+00:14:31.660 --> 00:14:37.300
+ So it's not hard to reference the dependencies
+
+00:14:37.300 --> 00:14:40.780
+ and find the dependencies already declared for you.
+
+00:14:40.780 --> 00:14:46.420
+ But what's more important, you can use dependencies not
+
+00:14:46.420 --> 00:14:46.780
+ only
+
+00:14:46.780 --> 00:14:49.660
+ on Emacs packages, but also on system packages.
+
+00:14:49.660 --> 00:14:53.300
+ For example, in my git package, you
+
+00:14:53.300 --> 00:14:55.700
+ can use a reference to git binary
+
+00:14:55.700 --> 00:14:58.820
+ and predefine the path to the git binary
+
+00:14:58.820 --> 00:15:03.540
+ inside a package configuration by fetching the source code
+
+00:15:03.540 --> 00:15:04.860
+ or something like that.
+
+00:15:04.860 --> 00:15:11.220
+ So any package that requires some system package to work
+
+00:15:11.220 --> 00:15:14.180
+ can use the system package as a dependency.
+
+00:15:14.180 --> 00:15:18.780
+ And it is a big benefit comparing
+
+00:15:18.780 --> 00:15:21.500
+ to other packaging solutions, which
+
+00:15:21.500 --> 00:15:25.460
+ can depend only on Elisp packages.
+
+00:15:25.460 --> 00:15:36.340
+ [AUDIO OUT]
+
+00:15:36.340 --> 00:15:40.060
+ Do you reckon rd is currently opinionated,
+
+00:15:40.060 --> 00:15:44.180
+ or is it a one-size-fits-all framework?
+
+00:15:44.180 --> 00:15:49.020
+ I would say it's quite opinionated.
+
+00:15:49.020 --> 00:15:52.620
+ I started from really bare-bone Emacs.
+
+00:15:52.620 --> 00:15:55.100
+ And I suffered for a while.
+
+00:15:55.100 --> 00:15:58.620
+ And I did features one by one very carefully,
+
+00:15:58.620 --> 00:16:02.500
+ crafting the current state of rd-emacs.
+
+00:16:02.500 --> 00:16:08.180
+ And it's, as I already said, vanilla flavored.
+
+00:16:08.180 --> 00:16:12.180
+ I try to stick with Emacs key bindings
+
+00:16:12.180 --> 00:16:15.700
+ to use built-in packages over external packages,
+
+00:16:15.700 --> 00:16:21.460
+ or use packages which are in the same way,
+
+00:16:21.460 --> 00:16:26.100
+ work in a similar manner to built-in packages.
+
+00:16:26.100 --> 00:16:29.740
+ So it's not usual.
+
+00:16:29.740 --> 00:16:37.060
+ It's not that user-friendly as Doom Emacs or Space Emacs.
+
+00:16:37.060 --> 00:16:45.580
+ It's more like a Prelude, or even more vanilla flavored
+
+00:16:45.580 --> 00:16:47.380
+ than Prelude.
+
+00:16:47.380 --> 00:16:50.420
+ But the good thing is that you can declare a feature
+
+00:16:50.420 --> 00:16:51.340
+ yourself.
+
+00:16:51.340 --> 00:16:55.260
+ And if you don't like something about rd-emacs provided
+
+00:16:55.260 --> 00:16:59.860
+ by features created by me or other contributors,
+
+00:16:59.860 --> 00:17:03.500
+ you can use the features declared by yourself
+
+00:17:03.500 --> 00:17:06.060
+ or by other people.
+
+00:17:06.060 --> 00:17:11.140
+ And one of the plans that I have according to rd,
+
+00:17:11.140 --> 00:17:13.940
+ which we are discussing on mailing list right now,
+
+00:17:13.940 --> 00:17:20.140
+ is contrib directory, which can include features provided
+
+00:17:20.140 --> 00:17:21.660
+ by different people.
+
+00:17:21.660 --> 00:17:28.500
+ For example, it's quite often asked to add evils support.
+
+00:17:28.500 --> 00:17:31.540
+ But I don't use evils.
+
+00:17:31.540 --> 00:17:35.460
+ And I don't want to maintain this package.
+
+00:17:35.460 --> 00:17:38.140
+ But I understand that many people
+
+00:17:38.140 --> 00:17:43.140
+ use such a way of interacting with text editor.
+
+00:17:43.140 --> 00:17:45.660
+ So it would be cool if someone who actually
+
+00:17:45.660 --> 00:17:48.420
+ using this feature will be maintaining it
+
+00:17:48.420 --> 00:17:51.020
+ in contrib directory.
+
+00:17:51.020 --> 00:17:55.180
+ And this feature will be sound with all other features
+
+00:17:55.180 --> 00:17:55.460
+ which
+
+00:17:55.460 --> 00:17:58.340
+ provided by rd itself.
+
+00:17:58.340 --> 00:18:05.100
+ And I think this way, it can cover more people needs
+
+00:18:05.100 --> 00:18:07.940
+ that it can cover right now.
+
+00:18:07.940 --> 00:18:11.260
+ So it will fit more people.
+
+00:18:11.260 --> 00:18:17.820
+ But the core rd won't be expanding its scope.
+
+00:18:17.820 --> 00:18:19.020
+ It will be quite focused.
+
+00:18:19.020 --> 00:18:27.940
+ How to get into rd is already documentation
+
+00:18:27.940 --> 00:18:31.060
+ and getting started guide.
+
+00:18:31.060 --> 00:18:34.740
+ There is a repository on source hut,
+
+00:18:34.740 --> 00:18:42.700
+ github.com/github/sourcehut/abcdw/rd.
+
+00:18:42.700 --> 00:18:47.620
+ And here you can see a very small readme,
+
+00:18:47.620 --> 00:18:52.540
+ which probably doesn't give you too much understanding of
+
+00:18:52.540 --> 00:18:52.780
+ what
+
+00:18:52.780 --> 00:18:53.580
+ is going on.
+
+00:18:53.580 --> 00:18:56.860
+ But it has all the necessary links.
+
+00:18:56.860 --> 00:18:58.740
+ It has a link to manual.
+
+00:18:58.740 --> 00:19:02.860
+ It has information of mailing lists,
+
+00:19:02.860 --> 00:19:05.940
+ which you can use to get help.
+
+00:19:05.940 --> 00:19:14.620
+ It has information about IRC channel in manual.
+
+00:19:14.620 --> 00:19:18.540
+ And you can join this channel and ask questions here.
+
+00:19:18.540 --> 00:19:22.060
+ And of course, you can take the source code
+
+00:19:22.060 --> 00:19:23.860
+ and take a look at it.
+
+00:19:23.860 --> 00:19:29.500
+ And currently, we have examples.
+
+00:19:29.500 --> 00:19:37.380
+ And here in examples, my whole configuration of my team
+
+00:19:37.380 --> 00:19:38.340
+ is present.
+
+00:19:38.340 --> 00:19:43.580
+ It's a little bit drafty.
+
+00:19:43.580 --> 00:19:47.380
+ I would like to reorganize this a little
+
+00:19:47.380 --> 00:19:50.340
+ to make it easier to follow.
+
+00:19:50.340 --> 00:19:55.140
+ And before first release, I hope I will do so.
+
+00:19:55.140 --> 00:20:04.140
+ But you can use it as an example, build on [INAUDIBLE]
+
+00:20:04.140 --> 00:20:09.700
+ Unfortunately, the documentation
+
+00:20:09.700 --> 00:20:12.180
+ is not very extensive.
+
+00:20:12.180 --> 00:20:17.740
+ So you can find it a little hard to follow.
+
+00:20:17.740 --> 00:20:24.140
+ Or maybe you can find it missing some important things.
+
+00:20:24.140 --> 00:20:29.140
+ But before first release, I hope the situation
+
+00:20:29.140 --> 00:20:30.900
+ will become a little better.
+
+00:20:30.900 --> 00:20:33.860
+ But anyway, you can always ask questions
+
+00:20:33.860 --> 00:20:35.420
+ until the documentation is ready.
+
+00:20:35.420 --> 00:20:44.060
+ Can you mix RD with custom Emacs init file?
+
+00:20:44.060 --> 00:20:45.220
+ Yes, you can.
+
+00:20:45.220 --> 00:20:47.780
+ I already mentioned it.
+
+00:20:47.780 --> 00:20:53.220
+ You can just define in your init.el
+
+00:20:53.220 --> 00:20:57.100
+ the statement that you load some other file
+
+00:20:57.100 --> 00:21:02.860
+ and use this file as your usual init.el file.
+
+00:21:02.860 --> 00:21:06.460
+ It will work completely OK.
+
+00:21:06.460 --> 00:21:13.780
+ And you can partially migrate to RD by using such approach.
+
+00:21:13.780 --> 00:21:17.540
+ But I don't recommend this approach in long term.
+
+00:21:17.540 --> 00:21:19.020
+ I already mentioned it.
+
+00:21:19.020 --> 00:21:24.140
+ But having usual init.el file and managing your
+
+00:21:24.140 --> 00:21:25.340
+ dependencies
+
+00:21:25.340 --> 00:21:29.580
+ using package.el or straight.el doesn't
+
+00:21:29.580 --> 00:21:33.140
+ cover system dependencies and other stuff, which
+
+00:21:33.140 --> 00:21:38.900
+ will lead to maybe irreproducible configurations.
+
+00:21:38.900 --> 00:21:49.780
+ [AUDIO OUT]
+
+00:21:49.780 --> 00:21:51.700
+ It's the heads up that we have about two more
+
+00:21:51.700 --> 00:21:53.180
+ minutes of live Q&A time.
+
+00:21:53.180 --> 00:21:55.100
+ And then after that, the stream will move on.
+
+00:21:55.100 --> 00:21:58.300
+ But people are welcome to continue asking questions,
+
+00:21:58.300 --> 00:22:01.460
+ either on the pad or IRC or by joining the Speakable button
+
+00:22:01.460 --> 00:22:02.380
+ room directly.
+
+00:22:02.380 --> 00:22:04.380
+ Thanks again, Andrew.
+
+00:22:04.380 --> 00:22:23.700
+ [AUDIO OUT]
+
+00:22:23.700 --> 00:22:27.660
+ Actually, I didn't expect so much questions.
+
+00:22:27.660 --> 00:22:33.340
+ And when I first took a look at the pad
+
+00:22:33.340 --> 00:22:38.700
+ and thought, OK, those six slots for Q&A will be enough.
+
+00:22:38.700 --> 00:22:45.100
+ Yeah, it's always a nice surprise, I guess.
+
+00:22:45.100 --> 00:23:04.140
+ [AUDIO OUT]
+
+00:23:04.140 --> 00:23:07.780
+ I hope everyone will be OK with jumping windows around,
+
+00:23:07.780 --> 00:23:10.420
+ because I switch between workspaces.
+
+00:23:10.420 --> 00:23:12.660
+ And it may be a little too noisy.
+
+00:23:12.660 --> 00:23:16.780
+ [AUDIO OUT]
+
+00:23:16.780 --> 00:23:18.660
+ Yeah, I think it's fine for the most part.
+
+00:23:18.660 --> 00:23:20.380
+ It was a bit of an interesting thing
+
+00:23:20.380 --> 00:23:23.500
+ trying to keep up the stream with it, because by default,
+
+00:23:23.500 --> 00:23:26.020
+ we maximize the speaker's webcam.
+
+00:23:26.020 --> 00:23:27.900
+ But then you're also sharing your screen
+
+00:23:27.900 --> 00:23:29.180
+ and sharing important details.
+
+00:23:29.180 --> 00:23:32.780
+ So we were also trying to get that on the stream as well.
+
+00:23:32.780 --> 00:23:33.660
+ But yeah, it was fine.
+
+00:23:33.660 --> 00:23:41.260
+ [AUDIO OUT]
+
+00:23:41.260 --> 00:23:46.780
+ OK, I think that there's no more questions.
+
+00:23:46.780 --> 00:23:53.980
+ And we can finish in this section.
+
+00:23:53.980 --> 00:23:55.580
+ All right, sounds good.
+
+00:23:55.580 --> 00:23:58.020
+ Thanks again, Andrew, for the great talk.
+
+00:23:58.020 --> 00:24:02.780
+ As a fellow Tiling Window Manager user and GNU gigs--
+
+00:24:02.780 --> 00:24:06.180
+ well, former committer, but still very much enthusiast,
+
+00:24:06.180 --> 00:24:07.540
+ I'm very much interested in this.
+
+00:24:07.540 --> 00:24:09.820
+ So I know I'll definitely be checking your work out.
+
+00:24:09.820 --> 00:24:11.660
+ So thanks again.
+
+00:24:11.660 --> 00:24:13.860
+ Thank you very much for organization
+
+00:24:13.860 --> 00:24:15.820
+ and all your contributions.
+
+00:24:15.820 --> 00:24:17.540
+ Very much appreciated.
+
+00:24:17.540 --> 00:24:18.100
+ Thank you.
+
+00:24:18.100 --> 00:24:18.600
+ Thank you.
+
+00:24:18.600 --> 00:24:19.340
+ Appreciate it.
+
+00:24:19.340 --> 00:24:20.140
+ All right, take care.
+
+00:24:20.140 --> 00:24:22.580
+ And we'll see you around.
+
+00:24:22.580 --> 00:24:23.580
+ Bye-bye.
+
+00:24:23.580 --> 00:24:25.140
+ Bye.
+
+00:24:25.140 --> 00:24:28.500
+ [AUDIO OUT]
+
+00:24:30.500 --> 00:24:30.500
+
+
diff --git a/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt
new file mode 100644
index 00000000..dc0c9307
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:52.040
+Introduction
+
+00:00:52.040 --> 00:03:34.840
+The challenge
+
+00:03:34.840 --> 00:05:04.920
+Functional package managers
+
+00:05:04.920 --> 00:07:20.360
+Guix Home
+
+00:07:20.360 --> 00:08:15.520
+rde
+
+00:08:15.520 --> 00:11:37.440
+Vanilla-flavoured
+
+00:11:37.440 --> 00:13:52.520
+Removing features
+
+00:13:52.520 --> 00:15:14.080
+Another example
+
+00:15:14.080 --> 00:16:54.400
+Multiple steps
+
+00:16:54.400 --> 00:18:07.480
+A small Emacs configuration
+
+00:18:07.480 --> 00:22:19.000
+Enabling features
+
+00:22:19.000 --> 00:23:33.760
+Summary
diff --git a/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt
new file mode 100644
index 00000000..99a9e201
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt
@@ -0,0 +1,1129 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:11.480
+Hello and welcome everyone at EmacsConf 2022.
+
+00:00:11.480 --> 00:00:13.400
+I'm Andrew Tropin, and today
+
+00:00:13.400 --> 00:00:16.280
+we will talk about my Emacs setup.
+
+00:00:16.280 --> 00:00:19.360
+I will tell you the story behind it.
+
+00:00:19.360 --> 00:00:23.960
+We will discuss what rde and rde Emacs are,
+
+00:00:23.960 --> 00:00:28.760
+and we'll make a small Emacs configuration.
+
+00:00:28.760 --> 00:00:30.920
+My original motivation was to have
+
+00:00:30.920 --> 00:00:34.000
+a ready for work development environment
+
+00:00:34.000 --> 00:00:36.640
+which is reliable and guaranteed to work
+
+00:00:36.640 --> 00:00:37.840
+every time I need it,
+
+00:00:37.840 --> 00:00:42.680
+preferably performant and consistent.
+
+00:00:42.680 --> 00:00:44.160
+I say development environment,
+
+00:00:44.160 --> 00:00:45.720
+but it actually applies to
+
+00:00:45.720 --> 00:00:47.600
+many other working environment,
+
+00:00:47.600 --> 00:00:52.040
+especially text-heavy.
+
+00:00:52.040 --> 00:00:54.040
+An easy and obvious solution is to
+
+00:00:54.040 --> 00:00:57.640
+pick one of existing configuration frameworks
+
+00:00:57.640 --> 00:01:00.760
+like Spacemacs, Doom Emacs, Prelude,
+
+00:01:00.760 --> 00:01:02.520
+or something else,
+
+00:01:02.520 --> 00:01:05.040
+and to get a pre-configured Emacs
+
+00:01:05.040 --> 00:01:09.040
+in a minute with all bells and whistles.
+
+00:01:09.040 --> 00:01:12.480
+But the problem is: only Emacs.
+
+00:01:12.480 --> 00:01:16.400
+In reality, your working environment consists
+
+00:01:16.400 --> 00:01:18.680
+not only from elisp packages,
+
+00:01:18.680 --> 00:01:21.360
+but also from system packages
+
+00:01:21.360 --> 00:01:23.320
+and their configurations, project libraries,
+
+00:01:23.320 --> 00:01:27.080
+compilers, building tools, etc.,
+
+00:01:27.080 --> 00:01:31.600
+and thus you already have at least
+
+00:01:31.600 --> 00:01:34.880
+three, or more likely, five things
+
+00:01:34.880 --> 00:01:37.120
+for managing your environment:
+
+00:01:37.120 --> 00:01:39.640
+configuration, Emacs configuration framework,
+
+00:01:39.640 --> 00:01:42.880
+Emacs package manager, system package manager,
+
+00:01:42.880 --> 00:01:46.600
+system/dot files configuration manager,
+
+00:01:46.600 --> 00:01:49.080
+project/language package manager
+
+00:01:49.080 --> 00:01:51.800
+and maybe something else.
+
+00:01:51.800 --> 00:01:56.360
+Even having our Emacs configuration
+
+00:01:56.360 --> 00:01:59.800
+and package manager covered by framework
+
+00:01:59.800 --> 00:02:02.080
+we still have a lot of things
+
+00:02:02.080 --> 00:02:04.240
+which we have to interact with,
+
+00:02:04.240 --> 00:02:08.640
+keep in sync, and more importantly,
+
+00:02:08.640 --> 00:02:12.480
+each of them can break.
+
+00:02:12.480 --> 00:02:17.320
+But by "works every time," I mean
+
+00:02:17.320 --> 00:02:19.560
+even if I updated my system packages,
+
+00:02:19.560 --> 00:02:23.880
+configurations, I migrated to a different machine,
+
+00:02:23.880 --> 00:02:29.120
+someone on my team updated project dependencies,
+
+00:02:29.120 --> 00:02:31.960
+I can get back to work in a matter of seconds,
+
+00:02:31.960 --> 00:02:39.040
+or maybe in some cases, minutes.
+
+00:02:39.040 --> 00:02:40.400
+If I have multiple tools
+
+00:02:40.400 --> 00:02:43.720
+for managing my environment
+
+00:02:43.720 --> 00:02:45.720
+and even one of them is broken,
+
+00:02:45.720 --> 00:02:48.360
+the whole setup is broken.
+
+00:02:48.360 --> 00:02:51.080
+Also, if one of them doesn't support
+
+00:02:51.080 --> 00:02:53.560
+deterministic rollback,
+
+00:02:53.560 --> 00:02:58.200
+I can't guarantee the reliability
+
+00:02:58.200 --> 00:02:59.200
+of my working environment.
+
+00:02:59.200 --> 00:03:01.360
+I can't be sure that I will be able to
+
+00:03:01.360 --> 00:03:02.800
+rescue or revive it.
+
+00:03:02.800 --> 00:03:06.760
+The less points of failure we have,
+
+00:03:06.760 --> 00:03:09.720
+the easier to stay sane.
+
+00:03:09.720 --> 00:03:13.080
+Imagine some late breakage notice
+
+00:03:13.080 --> 00:03:17.880
+when you did update a few hours or days ago
+
+00:03:17.880 --> 00:03:20.920
+and found it later, and you have
+
+00:03:20.920 --> 00:03:25.320
+a few different tools involved.
+
+00:03:25.320 --> 00:03:28.280
+It will be really hard to find the cause
+
+00:03:28.280 --> 00:03:34.840
+and to make everything work again.
+
+00:03:34.840 --> 00:03:37.880
+Is it possible to have one tool
+
+00:03:37.880 --> 00:03:44.360
+to cover all the needs I described above?
+
+00:03:44.360 --> 00:03:48.520
+Yes, almost. With this tool,
+
+00:03:48.520 --> 00:03:50.320
+you can get a reliable setup.
+
+00:03:50.320 --> 00:03:57.400
+Now, I talk about functional package managers.
+
+00:03:57.400 --> 00:04:00.680
+Functional package managers allow us to
+
+00:04:00.680 --> 00:04:03.720
+manage systems, users, Emacs, project/
+
+00:04:03.720 --> 00:04:07.560
+language packages, and their configurations.
+
+00:04:07.560 --> 00:04:10.880
+But more importantly, it allows to do it
+
+00:04:10.880 --> 00:04:13.200
+in a declarative and reproducible manner.
+
+00:04:13.200 --> 00:04:16.840
+That means you just define what you need,
+
+00:04:16.840 --> 00:04:19.680
+and those tools build it for you.
+
+00:04:19.680 --> 00:04:24.320
+No matter what was before, you get what you asked for.
+
+00:04:24.320 --> 00:04:26.200
+It doesn't matter what time of day,
+
+00:04:26.200 --> 00:04:29.640
+what you did before, what other packages
+
+00:04:29.640 --> 00:04:31.680
+you have installed previously.
+
+00:04:31.680 --> 00:04:34.440
+You just ask for something, and you get it.
+
+00:04:34.440 --> 00:04:41.440
+Two years ago, I did a talk at EmacsConf 2020
+
+00:04:41.440 --> 00:04:43.840
+where I demonstrated a prototype of
+
+00:04:43.840 --> 00:04:47.480
+Emacs configuration managed by Nix.
+
+00:04:47.480 --> 00:04:50.480
+Originally, I wanted to base my work on
+
+00:04:50.480 --> 00:04:56.160
+an already existing Emacs configuration framework.
+
+00:04:56.160 --> 00:05:01.360
+But later, I decided that it will be easier
+
+00:05:01.360 --> 00:05:02.440
+and a little more flexible
+
+00:05:02.440 --> 00:05:04.920
+to start from ground up.
+
+00:05:04.920 --> 00:05:06.960
+After the first prototype in Nix,
+
+00:05:06.960 --> 00:05:12.120
+I decided to switch to Guix. To make it short,
+
+00:05:12.120 --> 00:05:14.600
+Guix is another functional package manager,
+
+00:05:14.600 --> 00:05:21.840
+but more freedom- and reproducibility-oriented,
+
+00:05:21.840 --> 00:05:24.200
+and written in only one language (Guile Scheme)
+
+00:05:24.200 --> 00:05:29.880
+instead of few custom-made Nix DSL, Bash, and C++.
+
+00:05:29.880 --> 00:05:34.240
+So now I can write Lisp code, while this code
+
+00:05:34.240 --> 00:05:37.040
+writes another Lisp code. Very neat indeed.
+
+00:05:37.040 --> 00:05:42.760
+Unfortunately, at the moment, there was no tool
+
+00:05:42.760 --> 00:05:45.400
+to manage user configurations,
+
+00:05:45.400 --> 00:05:48.400
+also known as dotfiles, with Guix.
+
+00:05:48.400 --> 00:05:52.680
+So I wrote one. And now it's a part of GNU Guix
+
+00:05:52.680 --> 00:05:54.160
+and called Guix Home.
+
+00:05:54.160 --> 00:05:58.840
+What do we get from this one tool?
+
+00:05:58.840 --> 00:06:05.240
+We can use one language to describe the whole system,
+
+00:06:05.240 --> 00:06:09.080
+the home environment, the project environment,
+
+00:06:09.080 --> 00:06:10.240
+and everything else.
+
+00:06:10.240 --> 00:06:13.000
+We don't need to worry about
+
+00:06:13.000 --> 00:06:17.000
+to keep different tools in sync
+
+00:06:17.000 --> 00:06:19.760
+and to integrate them between each other.
+
+00:06:19.760 --> 00:06:23.080
+Also, using one language to describe
+
+00:06:23.080 --> 00:06:25.440
+the whole configuration makes it possible
+
+00:06:25.440 --> 00:06:28.640
+to share values between different parts of the system.
+
+00:06:28.640 --> 00:06:32.920
+For example, color scheme, fonts, and much more.
+
+00:06:32.920 --> 00:06:39.440
+To sum up the first part of the talk:
+
+00:06:39.440 --> 00:06:43.320
+I want a working environment which is ready for work,
+
+00:06:43.320 --> 00:06:47.960
+configured in minutes to almost what I want.
+
+00:06:47.960 --> 00:06:50.800
+That means it should have some batteries included.
+
+00:06:50.800 --> 00:06:52.000
+It should be reliable.
+
+00:06:52.000 --> 00:06:54.840
+I want to get back to work in seconds
+
+00:06:54.840 --> 00:06:56.160
+even if I broke something
+
+00:06:56.160 --> 00:06:58.200
+or someone else broke something.
+
+00:06:58.200 --> 00:07:03.560
+For example, using rollbacks.
+
+00:07:03.560 --> 00:07:07.320
+It would be nice if it will be performant.
+
+00:07:07.320 --> 00:07:08.640
+It's a little subjective thing,
+
+00:07:08.640 --> 00:07:12.360
+but it's nice when things are snappy.
+
+00:07:12.360 --> 00:07:16.160
+And it's cool when things are consistent.
+
+00:07:16.160 --> 00:07:17.800
+Different interfaces have
+
+00:07:17.800 --> 00:07:20.360
+the same way of interactions with them.
+
+00:07:20.360 --> 00:07:25.920
+Let's get to the next part,
+
+00:07:25.920 --> 00:07:29.120
+and let's discuss what rde is.
+
+00:07:29.120 --> 00:07:33.360
+Originally it was my dotfiles repo,
+
+00:07:33.360 --> 00:07:35.720
+but it grew into something bigger.
+
+00:07:35.720 --> 00:07:39.320
+Now, it's a set of tools on top of
+
+00:07:39.320 --> 00:07:41.680
+GNU Guix, Guix System, and Guix Home.
+
+00:07:41.680 --> 00:07:45.800
+You can treat it as a GNU/Linux distribution,
+
+00:07:45.800 --> 00:07:48.720
+system and home environment manager
+
+00:07:48.720 --> 00:07:50.880
+or configuration framework,
+
+00:07:50.880 --> 00:07:52.920
+project environment manager
+
+00:07:52.920 --> 00:07:55.160
+(like virtualenv, but on steroids),
+
+00:07:55.160 --> 00:07:58.200
+and Emacs distribution.
+
+00:07:58.200 --> 00:08:02.840
+Usually, you just pick a few features,
+
+00:08:02.840 --> 00:08:05.654
+parameterize them and ask the tool
+
+00:08:05.655 --> 00:08:08.120
+to create an operating system for you,
+
+00:08:08.120 --> 00:08:10.280
+a home environment, project environment,
+
+00:08:10.280 --> 00:08:11.560
+or Emacs configuration.
+
+00:08:11.560 --> 00:08:15.520
+That's it. That's simple.
+
+00:08:15.520 --> 00:08:22.080
+And what rde Emacs is and how it tastes...
+
+00:08:22.080 --> 00:08:26.360
+It's like an ice cream, vanilla-flavored.
+
+00:08:26.360 --> 00:08:30.880
+No fancy macros for configuration, just plain Elisp.
+
+00:08:30.880 --> 00:08:34.954
+You can find in almost every
+
+00:08:34.955 --> 00:08:36.480
+personal Emacs configuration,
+
+00:08:36.480 --> 00:08:42.640
+built-in or vanilla-flavored packages
+
+00:08:42.640 --> 00:08:45.588
+are in priority over external
+
+00:08:45.589 --> 00:08:46.760
+or very fancy packages.
+
+00:08:46.760 --> 00:08:52.200
+There is practical reason for this.
+
+00:08:52.200 --> 00:08:55.454
+Maybe sometimes you don't get the things
+
+00:08:55.455 --> 00:08:57.720
+you're used to in other text editors,
+
+00:08:57.720 --> 00:09:01.920
+or maybe even in other Emacs frameworks,
+
+00:09:01.920 --> 00:09:05.880
+but we want to keep the final result consistent,
+
+00:09:05.880 --> 00:09:08.720
+so you can apply the same interaction patterns
+
+00:09:08.720 --> 00:09:13.480
+in different situations and extend your expectations
+
+00:09:13.480 --> 00:09:15.000
+from one tool to another,
+
+00:09:15.000 --> 00:09:16.560
+from one package to another.
+
+00:09:16.560 --> 00:09:19.400
+For example, we encourage people
+
+00:09:19.400 --> 00:09:22.600
+to use the minibuffer completion
+
+00:09:22.600 --> 00:09:26.720
+with orderless and vertico for many tasks:
+
+00:09:26.720 --> 00:09:30.680
+code navigation, file navigation,
+
+00:09:30.680 --> 00:09:32.120
+looking through your emails,
+
+00:09:32.120 --> 00:09:35.160
+or just for jumping around.
+
+00:09:35.160 --> 00:09:36.320
+Let's see.
+
+00:09:36.320 --> 00:09:39.480
+First, create a new Emacs instance
+
+00:09:39.480 --> 00:09:45.280
+and open a repository with my configuration.
+
+00:09:45.280 --> 00:09:54.040
+You can see the source code.
+
+00:09:54.040 --> 00:09:58.760
+Let's open another file which contains
+
+00:09:58.760 --> 00:09:59.960
+Emacs-related features.
+
+00:09:59.960 --> 00:10:02.280
+You can see I use imenu,
+
+00:10:02.280 --> 00:10:08.360
+and I can filter the list using minibuffer.
+
+00:10:08.360 --> 00:10:16.600
+Now let's open the Magit interface,
+
+00:10:16.600 --> 00:10:18.920
+and now I want to navigate through
+
+00:10:18.920 --> 00:10:22.240
+this long list of things here.
+
+00:10:22.240 --> 00:10:25.560
+Some of them staged. Some of them are recent commits.
+
+00:10:25.560 --> 00:10:28.400
+Some of them are untracked at all.
+
+00:10:28.400 --> 00:10:31.040
+I can open imenu: the same interface,
+
+00:10:31.040 --> 00:10:34.640
+but for now, I can navigate around
+
+00:10:34.640 --> 00:10:41.320
+the Magit sections and files which are present here.
+
+00:10:41.320 --> 00:10:45.120
+If I want to navigate project files,
+
+00:10:45.120 --> 00:10:47.520
+I use almost the same interface.
+
+00:10:47.520 --> 00:10:51.720
+I can use the same patterns to filter out
+
+00:10:51.720 --> 00:11:00.400
+files in my project or items in magit-imenu.
+
+00:11:00.400 --> 00:11:07.720
+Very similar and very consistent.
+
+00:11:07.720 --> 00:11:11.920
+Also, we try to have hotkeys consistent
+
+00:11:11.920 --> 00:11:16.680
+across different packages and parts of Emacs.
+
+00:11:16.680 --> 00:11:21.720
+We usually don't provide alternatives on what to use.
+
+00:11:21.720 --> 00:11:25.520
+We provide only one package for one task.
+
+00:11:25.520 --> 00:11:28.154
+But of course this is
+
+00:11:28.155 --> 00:11:29.880
+a configuration framework after all.
+
+00:11:29.880 --> 00:11:32.800
+You can declare your own features,
+
+00:11:32.800 --> 00:11:35.788
+implement them yourself,
+
+00:11:35.789 --> 00:11:37.440
+and use whatever you want.
+
+00:11:37.440 --> 00:11:45.240
+Let's get to some real-world examples.
+
+00:11:45.240 --> 00:11:48.221
+It's always easy to show
+
+00:11:48.222 --> 00:11:50.200
+how things get appended,
+
+00:11:50.200 --> 00:11:51.760
+how things get installed,
+
+00:11:51.760 --> 00:11:55.288
+but usually people don't show
+
+00:11:55.289 --> 00:11:56.360
+how they remove things,
+
+00:11:56.360 --> 00:11:58.800
+because it's usually painful.
+
+00:11:58.800 --> 00:12:02.120
+But in our case, it's not.
+
+00:12:02.120 --> 00:12:10.840
+Let's take my configuration,
+
+00:12:10.840 --> 00:12:12.960
+let's find feature-emacs-vertico.
+
+00:12:12.960 --> 00:12:19.821
+Vertico's just used to show
+
+00:12:19.822 --> 00:12:25.880
+this fancy completion UI
+
+00:12:25.880 --> 00:12:27.400
+that you can see here.
+
+00:12:27.400 --> 00:12:30.960
+If I disable this feature
+
+00:12:30.960 --> 00:12:43.080
+and rebuild my home environment,
+
+00:12:43.080 --> 00:12:46.360
+Emacs will lack this feature.
+
+00:12:46.360 --> 00:12:55.400
+It may take some time. It was quite fast,
+
+00:12:55.400 --> 00:13:00.400
+I didn't expect it.
+
+00:13:00.400 --> 00:13:02.880
+I have Emacs. As you can see here,
+
+00:13:02.880 --> 00:13:06.280
+now it doesn't have this completion UI anymore.
+
+00:13:06.280 --> 00:13:09.280
+I just commented it out,
+
+00:13:09.280 --> 00:13:13.320
+rebuilt my home environment,
+
+00:13:13.320 --> 00:13:15.600
+and this thing disappeared from Emacs.
+
+00:13:15.600 --> 00:13:19.960
+But what if I broke something?
+
+00:13:19.960 --> 00:13:28.440
+I just call guix home roll-back command
+
+00:13:28.440 --> 00:13:31.200
+and launch Emacs again, and you see
+
+00:13:31.200 --> 00:13:32.800
+now we have vertico back.
+
+00:13:32.800 --> 00:13:36.080
+Very good.
+
+00:13:36.080 --> 00:13:41.280
+Reliability is one of the most important qualities
+
+00:13:41.280 --> 00:13:43.920
+of working environment.
+
+00:13:43.920 --> 00:13:46.400
+We can always get back to
+
+00:13:46.400 --> 00:13:48.440
+the working state of our environment
+
+00:13:48.440 --> 00:13:52.520
+and be sure that we do the things we want.
+
+00:13:52.520 --> 00:13:57.720
+Now let's see another example.
+
+00:13:57.720 --> 00:13:59.960
+Here I have a mastodon,
+
+00:13:59.960 --> 00:14:03.600
+a post which contains a gemini link.
+
+00:14:03.600 --> 00:14:11.560
+I can click it, and you see it opens emacsclient,
+
+00:14:11.560 --> 00:14:14.480
+it renders this gemini capsule,
+
+00:14:14.480 --> 00:14:17.800
+and we can read all the posts of this guy.
+
+00:14:17.800 --> 00:14:21.000
+Very cool.
+
+00:14:21.000 --> 00:14:26.760
+But what if I go back to my configuration,
+
+00:14:26.760 --> 00:14:32.400
+we'll find a feature related to elpher,
+
+00:14:32.400 --> 00:14:36.080
+the application which handles gemini links,
+
+00:14:36.080 --> 00:14:38.320
+we'll comment it out,
+
+00:14:38.320 --> 00:14:41.720
+and we'll rebuild my home environment.
+
+00:14:41.720 --> 00:14:47.120
+What I expect here is that
+
+00:14:47.120 --> 00:14:48.440
+when I will be clicking the link,
+
+00:14:48.440 --> 00:15:02.320
+emacsclient won't pop up anymore.
+
+00:15:02.320 --> 00:15:02.720
+Cool.
+
+00:15:02.720 --> 00:15:06.600
+We rebuilt it and let's click the link.
+
+00:15:06.600 --> 00:15:08.360
+Now you see, it just opens another tab
+
+00:15:08.360 --> 00:15:10.760
+which doesn't do anything useful.
+
+00:15:10.760 --> 00:15:14.080
+Cool.
+
+00:15:14.080 --> 00:15:15.520
+Why it is important?
+
+00:15:15.520 --> 00:15:19.640
+It is important because every time
+
+00:15:19.640 --> 00:15:24.640
+you install something and you want to remove it,
+
+00:15:24.640 --> 00:15:29.320
+some parts depending on it can be broken.
+
+00:15:29.320 --> 00:15:31.840
+And also important in the other way around.
+
+00:15:31.840 --> 00:15:34.920
+Sometimes you want to install something,
+
+00:15:34.920 --> 00:15:36.640
+and it requires a few steps.
+
+00:15:36.640 --> 00:15:40.600
+For example, if you want to have
+
+00:15:40.600 --> 00:15:43.160
+a docker.el in your Emacs,
+
+00:15:43.160 --> 00:15:49.080
+you need not only docker.el itself
+
+00:15:49.080 --> 00:15:51.360
+and configuration for it,
+
+00:15:51.360 --> 00:15:55.240
+you also need to add your user to the docker group.
+
+00:15:55.240 --> 00:15:59.000
+But before it, you need to create this group,
+
+00:15:59.000 --> 00:16:00.454
+and you also need to
+
+00:16:00.455 --> 00:16:02.800
+define a system service and run it.
+
+00:16:02.800 --> 00:16:05.800
+Also you need to install docker package,
+
+00:16:05.800 --> 00:16:11.640
+docker-cli package, and containerd package.
+
+00:16:11.640 --> 00:16:15.440
+You can forget every of this small step,
+
+00:16:15.440 --> 00:16:20.480
+but if it in your declarative configuration
+
+00:16:20.480 --> 00:16:23.588
+in one place, and you just ask
+
+00:16:23.589 --> 00:16:27.821
+to enable this feature, each of those steps
+
+00:16:27.822 --> 00:16:30.880
+will be performed automatically.
+
+00:16:30.880 --> 00:16:33.200
+If you don't need docker anymore,
+
+00:16:33.200 --> 00:16:34.840
+you just disable the feature,
+
+00:16:34.840 --> 00:16:38.480
+and all the effect of all those steps
+
+00:16:38.480 --> 00:16:42.840
+will be removed from your system.
+
+00:16:42.840 --> 00:16:46.640
+I won't be showing it because it probably will
+
+00:16:46.640 --> 00:16:48.920
+take more time for reconfiguring,
+
+00:16:48.920 --> 00:16:54.400
+but you can experiment with it on your own.
+
+00:16:54.400 --> 00:17:00.840
+Let's do another interesting thing.
+
+00:17:00.840 --> 00:17:05.921
+Let's construct a small
+
+00:17:05.922 --> 00:17:07.720
+Emacs configuration from scratch.
+
+00:17:07.720 --> 00:17:10.920
+Who's this?
+
+00:17:10.920 --> 00:17:14.240
+I will open a file which contains only
+
+00:17:14.240 --> 00:17:18.720
+emacs-portable feature and feature-user-info.
+
+00:17:18.720 --> 00:17:21.120
+Now I will build an environment,
+
+00:17:21.120 --> 00:17:24.480
+and inside this environment,
+
+00:17:24.480 --> 00:17:26.640
+I will launch a new Emacs instance.
+
+00:17:26.640 --> 00:17:28.800
+As you see, it's very different
+
+00:17:28.800 --> 00:17:30.440
+from what you saw previously.
+
+00:17:30.440 --> 00:17:32.120
+And it's almost barebones.
+
+00:17:32.120 --> 00:17:39.520
+It doesn't contain anything
+
+00:17:39.520 --> 00:17:41.760
+except user-mail-address
+
+00:17:41.760 --> 00:17:45.080
+which is set to my mail address,
+
+00:17:45.080 --> 00:17:46.880
+and user-full-name.
+
+00:17:46.880 --> 00:17:50.760
+How it works:
+
+00:17:50.760 --> 00:17:54.000
+In feature-user-info, I define a few values.
+
+00:17:54.000 --> 00:18:01.120
+Those values are obtained by Emacs
+
+00:18:01.120 --> 00:18:03.280
+feature-emacs-portable
+
+00:18:03.280 --> 00:18:07.480
+and set inside Emacs configuration.
+
+00:18:07.480 --> 00:18:12.840
+But let's enable a few more features.
+
+00:18:12.840 --> 00:18:15.400
+I will do it in one go
+
+00:18:15.400 --> 00:18:22.120
+because we already saw how it works overall.
+
+00:18:22.120 --> 00:18:30.160
+Let's build another Emacs with Emacs configuration.
+
+00:18:30.160 --> 00:18:39.280
+The interesting thing about this Emacs instance
+
+00:18:39.280 --> 00:18:44.560
+is that it doesn't contain anything
+
+00:18:44.560 --> 00:18:46.520
+that I have in my usual Emacs.
+
+00:18:46.520 --> 00:18:49.360
+For example, I don't have much here.
+
+00:18:49.360 --> 00:18:55.040
+I don't have make installed, and so on.
+
+00:18:55.040 --> 00:19:06.640
+But we have feature-loader-portable package
+
+00:19:06.640 --> 00:19:09.960
+which just requires a few configure packages.
+
+00:19:09.960 --> 00:19:13.320
+Let's move it to a separate workspace.
+
+00:19:13.320 --> 00:19:21.680
+First of all, configure-rde-emacs-portable
+
+00:19:21.680 --> 00:19:23.720
+which just sets a few variables.
+
+00:19:23.720 --> 00:19:27.280
+rde configure-keycast which just shows
+
+00:19:27.280 --> 00:19:31.200
+something on the modeline
+
+00:19:31.200 --> 00:19:34.440
+which demonstrates the last hotkey pressed
+
+00:19:34.440 --> 00:19:40.080
+and the command which was invoked.
+
+00:19:40.080 --> 00:19:41.640
+We can enable which-key,
+
+00:19:41.640 --> 00:19:45.040
+and now when I type a prefix,
+
+00:19:45.040 --> 00:19:48.600
+I can see all the possible continuations
+
+00:19:48.600 --> 00:19:49.360
+for this prefix.
+
+00:19:49.360 --> 00:19:51.880
+I can enable vertico,
+
+00:19:51.880 --> 00:19:58.160
+and you can see, now we have nice completion UI.
+
+00:19:58.160 --> 00:20:03.560
+We can enable completion-related improvements
+
+00:20:03.560 --> 00:20:07.560
+and now I have not only UI itself, but also
+
+00:20:07.560 --> 00:20:15.320
+some notes here near each command,
+
+00:20:15.320 --> 00:20:17.800
+and ability to use regular expressions
+
+00:20:17.800 --> 00:20:21.480
+or some orderless matching.
+
+00:20:21.480 --> 00:20:26.400
+We can enable eshell,
+
+00:20:26.400 --> 00:20:31.320
+and now I have a hotkey for invoking Emacs shell.
+
+00:20:31.320 --> 00:20:35.920
+I don't have hotkey for vterm yet,
+
+00:20:35.920 --> 00:20:37.360
+but I can enable it,
+
+00:20:37.360 --> 00:20:40.800
+and now I have a terminal inside my Emacs.
+
+00:20:40.800 --> 00:20:43.240
+As you can see my usual shell is Zsh,
+
+00:20:43.240 --> 00:20:46.040
+but here I have a plain bash.
+
+00:20:46.040 --> 00:20:52.280
+Let's enable feature-git,
+
+00:20:52.280 --> 00:21:04.720
+and now I will be able to open my project.
+
+00:21:04.720 --> 00:21:11.488
+And inside this project,
+
+00:21:11.489 --> 00:21:14.640
+I will be able to open Magit
+
+00:21:14.640 --> 00:21:19.880
+and navigate around using imenu.
+
+00:21:19.880 --> 00:21:26.160
+Let's do few more things.
+
+00:21:26.160 --> 00:21:29.640
+Let's enable Org Roam
+
+00:21:29.640 --> 00:21:43.840
+so I will be able to open my EmacsConf notes.
+
+00:21:43.840 --> 00:21:48.240
+Let's enable configure-emacs.
+
+00:21:48.240 --> 00:21:53.320
+As you can see, the way it displayed updated.
+
+00:21:53.320 --> 00:21:59.520
+Let's enable configure-appearance,
+
+00:21:59.520 --> 00:22:03.880
+and you see the appearance of Emacs changed radically.
+
+00:22:03.880 --> 00:22:06.560
+And also, let's change the faces.
+
+00:22:06.560 --> 00:22:13.040
+And now you see almost my setup
+
+00:22:13.040 --> 00:22:14.800
+that you saw previously,
+
+00:22:14.800 --> 00:22:19.000
+but we build it from small tiny pieces.
+
+00:22:19.000 --> 00:22:27.520
+A little summary:
+
+00:22:27.520 --> 00:22:32.280
+rde is the one tool that you can use
+
+00:22:32.280 --> 00:22:34.440
+to manage the whole computing experience.
+
+00:22:34.440 --> 00:22:38.080
+It consists of composable components,
+
+00:22:38.080 --> 00:22:41.720
+and actually, it provides
+
+00:22:41.720 --> 00:22:43.240
+a reliable configuration framework.
+
+00:22:43.240 --> 00:22:46.360
+You always have a rollback.
+
+00:22:46.360 --> 00:22:49.320
+You always can switch to a generation
+
+00:22:49.320 --> 00:22:50.560
+you used a week ago.
+
+00:22:50.560 --> 00:22:57.520
+And of course, it's reproducible and declarative
+
+00:22:57.520 --> 00:22:58.680
+which is also very cool.
+
+00:22:58.680 --> 00:23:05.788
+rde Emacs is a part of rde
+
+00:23:05.789 --> 00:23:06.920
+but it can be used separately.
+
+00:23:06.920 --> 00:23:11.280
+You can think of it as an Emacs distribution
+
+00:23:11.280 --> 00:23:14.040
+which is vanilla-flavored, consistent,
+
+00:23:14.040 --> 00:23:15.960
+well-integrated, and self-contained.
+
+00:23:15.960 --> 00:23:19.560
+That's it for today.
+
+00:23:19.560 --> 00:23:22.054
+Don't hesitate to contact me
+
+00:23:22.055 --> 00:23:23.840
+via email or any other way.
+
+00:23:23.840 --> 00:23:28.154
+Thank you everyone for your attention
+
+00:23:28.155 --> 00:23:33.760
+and see you in a bit.
diff --git a/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt b/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt
new file mode 100644
index 00000000..713879c1
--- /dev/null
+++ b/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:20.479
+Introduction
+
+00:00:20.480 --> 00:00:51.799
+The end goal
+
+00:00:51.800 --> 00:02:11.519
+Constants and variables
+
+00:02:11.520 --> 00:02:40.039
+ROI
+
+00:02:40.040 --> 00:03:32.239
+Demo
+
+00:03:32.240 --> 00:04:02.239
+Detecting input
+
+00:04:02.240 --> 00:04:26.399
+Creating a table
+
+00:04:26.400 --> 00:05:17.959
+C-c C-c
+
+00:05:17.960 --> 00:07:12.999
+Our first formula
+
+00:07:13.000 --> 00:08:11.719
+Basic arithmetic
+
+00:08:11.720 --> 00:09:53.599
+Debugging
+
+00:09:53.600 --> 00:12:07.039
+Flags
+
+00:12:07.040 --> 00:12:50.039
+Recalculating
+
+00:12:50.040 --> 00:14:56.776
+Multiple formulas
+
+00:14:56.777 --> 00:16:36.201
+Formatting
+
+00:16:36.202 --> 00:18:12.202
+Conditional prompts
+
+00:18:12.203 --> 00:21:57.856
+Custom formulas
+
+00:21:57.857 --> 00:24:44.280
+Automatically updating
diff --git a/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt b/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt
new file mode 100644
index 00000000..5747aac9
--- /dev/null
+++ b/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt
@@ -0,0 +1,1736 @@
+WEBVTT captioned by tom
+
+
+00:00:00.000 --> 00:00:05.453
+Hey, I'm Gopar and this is the
+
+00:00:05.454 --> 00:00:07.639
+Real Estate and Org Mode Table Formulas talk.
+
+00:00:07.640 --> 00:00:09.879
+Not very creative, but it is what it is.
+
+00:00:09.880 --> 00:00:13.051
+Now I just want to say that everything I talk about here
+
+00:00:13.052 --> 00:00:15.902
+is in the Org Mode in the Emacs manual.
+
+00:00:15.903 --> 00:00:17.909
+I posted a link to the web version,
+
+00:00:17.910 --> 00:00:20.479
+but it should be inside of Emacs as well.
+
+00:00:20.480 --> 00:00:25.096
+Now before I start, I want to showcase the end goal.
+
+00:00:25.097 --> 00:00:26.806
+That way you know if you guys want to
+
+00:00:26.807 --> 00:00:28.739
+actually see the talk or not.
+
+00:00:28.740 --> 00:00:30.491
+So I always think that's pretty cool to see
+
+00:00:30.492 --> 00:00:31.517
+what you're actually going to build
+
+00:00:31.518 --> 00:00:32.679
+before you start building it.
+
+00:00:32.680 --> 00:00:34.285
+Alright. So let me start off with the goal,
+
+00:00:34.286 --> 00:00:38.762
+the end goal. Here we have a simple table formula
+
+00:00:38.763 --> 00:00:42.613
+and we have some constants, some values inside the list--
+
+00:00:42.614 --> 00:00:44.639
+inside the table, I'm sorry,
+
+00:00:44.640 --> 00:00:47.672
+and some other stuff that we will get to,
+
+00:00:47.673 --> 00:00:49.279
+but for now... I don't want to spoil too much.
+
+00:00:49.280 --> 00:00:50.327
+I just want to give you a demo
+
+00:00:50.328 --> 00:00:51.799
+of how it actually works.
+
+00:00:51.800 --> 00:00:56.094
+We have a few values. Let me first go over the constants.
+
+00:00:56.095 --> 00:00:57.581
+We have PMI, which stands for
+
+00:00:57.582 --> 00:00:57.590
+private mortgage insurance,
+
+00:00:57.591 --> 00:01:00.536
+so it's insurance that you'll have to pay
+
+00:01:00.537 --> 00:01:03.639
+depending on how much money you put into the deal.
+
+00:01:03.640 --> 00:01:06.067
+The property tax, which is self-explanatory,
+
+00:01:06.068 --> 00:01:09.316
+the tax that you owe for owning the property,
+
+00:01:09.317 --> 00:01:11.106
+and then home insurance,
+
+00:01:11.107 --> 00:01:13.439
+and the interest rate at the loan that you get.
+
+00:01:13.440 --> 00:01:15.666
+So, here we have a few columns.
+
+00:01:15.667 --> 00:01:17.411
+The first one is called House,
+
+00:01:17.412 --> 00:01:20.623
+which I usually just put a description of the house
+
+00:01:20.624 --> 00:01:21.126
+with the link of the posting,
+
+00:01:21.127 --> 00:01:22.493
+the price of the house,
+
+00:01:22.494 --> 00:01:26.189
+the percentage down payment (this I play around with
+
+00:01:26.190 --> 00:01:27.473
+to see how much the deal will be structured),
+
+00:01:27.474 --> 00:01:30.528
+the down payment (which is calculated from
+
+00:01:30.529 --> 00:01:31.754
+the previous two columns),
+
+00:01:31.755 --> 00:01:34.144
+the monthly mortgage (which is calculated as well),
+
+00:01:34.145 --> 00:01:37.995
+and then the tenant income (which is what I suppose
+
+00:01:37.996 --> 00:01:41.005
+would be an example of the tenant income
+
+00:01:41.006 --> 00:01:42.752
+that I can potentially make off the property,
+
+00:01:42.753 --> 00:01:45.539
+the 1% rule and the ROI.
+
+00:01:45.540 --> 00:01:47.707
+I'll quickly go over the last two columns.
+
+00:01:47.708 --> 00:01:49.200
+So first is the 1% rule.
+
+00:01:49.300 --> 00:01:50.879
+The 1% rule is essentially
+
+00:01:50.880 --> 00:01:53.588
+a "rule," in quotes, that says that
+
+00:01:53.589 --> 00:01:56.277
+if a property matches this specific formula,
+
+00:01:56.278 --> 00:01:58.319
+it is a good deal to look into.
+
+00:01:58.320 --> 00:02:00.889
+So for example, the first two pass,
+
+00:02:00.890 --> 00:02:02.676
+and the last one does not pass.
+
+00:02:02.677 --> 00:02:04.104
+The last one, at a quick glance,
+
+00:02:04.105 --> 00:02:05.471
+we can just ignore it and say,
+
+00:02:05.472 --> 00:02:06.476
+"hey, that's not going to fly,"
+
+00:02:06.477 --> 00:02:07.999
+we'll just ignore it.
+
+00:02:08.000 --> 00:02:09.890
+I won't go too much into details.
+
+00:02:09.891 --> 00:02:11.519
+That's just a brief summary.
+
+00:02:11.520 --> 00:02:14.148
+So now the ROI is the return on investment.
+
+00:02:14.149 --> 00:02:17.599
+So it says "how much of a return am I getting
+
+00:02:17.600 --> 00:02:18.959
+on the amount that I invested?"
+
+00:02:18.960 --> 00:02:21.167
+So let's say you put in $12,000,
+
+00:02:21.168 --> 00:02:23.455
+and at the end of the year, you cashflow $6,000.
+
+00:02:23.456 --> 00:02:26.126
+So if you calculate the ROI off of that,
+
+00:02:26.127 --> 00:02:28.476
+you get a 50% return on investment.
+
+00:02:28.477 --> 00:02:30.085
+In two years, you'll make your money back,
+
+00:02:30.086 --> 00:02:31.733
+which is pretty good.
+
+00:02:31.734 --> 00:02:32.718
+Then all the rest of the years,
+
+00:02:32.719 --> 00:02:34.347
+you'll just slowly be reaping in all that,
+
+00:02:34.348 --> 00:02:36.639
+all the excess cash flow.
+
+00:02:36.640 --> 00:02:40.039
+But yeah, that's it in a nutshell.
+
+00:02:40.040 --> 00:02:42.269
+So let me demo it real quick.
+
+00:02:42.270 --> 00:02:44.258
+So for example, I'm going to change the down payment,
+
+00:02:44.259 --> 00:02:45.744
+but I want you to pay attention
+
+00:02:45.745 --> 00:02:48.213
+to this column [down payment]
+
+00:02:48.214 --> 00:02:49.839
+and the monthly mortgage column.
+
+00:02:49.840 --> 00:02:51.726
+So right here [down payment] is $25,000,
+
+00:02:51.727 --> 00:02:53.472
+and here [monthly mortgage] is around $1,200,
+
+00:02:53.473 --> 00:02:55.179
+a little under $1,300.
+
+00:02:55.180 --> 00:02:57.349
+So what happens if I say, you know,
+
+00:02:57.350 --> 00:02:58.795
+what I'm going to change the down payment
+
+00:02:58.796 --> 00:03:00.948
+to 5% instead, because I just
+
+00:03:00.949 --> 00:03:02.559
+don't want to put 10.
+
+00:03:02.560 --> 00:03:04.125
+So let's just put say 5.
+
+00:03:04.126 --> 00:03:06.274
+Then I tab out of here, and voila -
+
+00:03:06.275 --> 00:03:08.522
+you see it updated to half of $25,000.
+
+00:03:08.523 --> 00:03:09.946
+So now it's $12,000,
+
+00:03:09.947 --> 00:03:10.689
+and this [monthly mortgage] went up
+
+00:03:10.690 --> 00:03:12.233
+over actually $1,300,
+
+00:03:12.234 --> 00:03:14.783
+and then this [1% rule] hasn't changed at all
+
+00:03:14.784 --> 00:03:17.679
+and the ROI is there.
+
+00:03:17.680 --> 00:03:19.147
+So one thing that I should mention is
+
+00:03:19.148 --> 00:03:20.193
+everything that I'm putting here
+
+00:03:20.194 --> 00:03:21.279
+is just example numbers,
+
+00:03:21.280 --> 00:03:25.634
+should not be taken into literal real estate advice.
+
+00:03:25.635 --> 00:03:26.859
+I just want to put that out there.
+
+00:03:26.860 --> 00:03:28.367
+These are just examples to show you
+
+00:03:28.368 --> 00:03:30.519
+how you can potentially make it on your own,
+
+00:03:30.520 --> 00:03:32.239
+do the formulas on your own.
+
+00:03:32.240 --> 00:03:35.650
+Alright, so another cool thing that I did was
+
+00:03:35.651 --> 00:03:37.737
+if there is no tenant income and I tab,
+
+00:03:37.738 --> 00:03:40.048
+it says "Enter Tenant Income".
+
+00:03:40.049 --> 00:03:41.032
+So if I don't put anything,
+
+00:03:41.033 --> 00:03:42.399
+it will automatically tell me, hey,
+
+00:03:42.400 --> 00:03:44.919
+I can't calculate without the tenant income.
+
+00:03:44.920 --> 00:03:46.607
+I can also do this right here [ROI field],
+
+00:03:46.608 --> 00:03:48.475
+say the same thing, Enter Tenant Income,
+
+00:03:48.476 --> 00:03:50.563
+but I just didn't put it for whatever reason, but
+
+00:03:50.564 --> 00:03:53.812
+after this video, you should be easily able to
+
+00:03:53.813 --> 00:03:57.399
+put it without much struggle.
+
+00:03:57.400 --> 00:04:00.130
+Alright, so if that's something you're interested in,
+
+00:04:00.131 --> 00:04:02.239
+then keep watching.
+
+00:04:02.240 --> 00:04:05.239
+So let's go over the basics first.
+
+00:04:05.240 --> 00:04:07.399
+So, how do we create a table?
+
+00:04:07.400 --> 00:04:10.368
+Well, we can do M-x org-table-create.
+
+00:04:10.369 --> 00:04:14.301
+If we run that it, will prompt us in a minibuffer.
+
+00:04:14.302 --> 00:04:16.892
+It says table size, columns times row.
+
+00:04:16.893 --> 00:04:18.177
+Usually it's rows times columns,
+
+00:04:18.178 --> 00:04:19.502
+but it is what it is.
+
+00:04:19.602 --> 00:04:20.465
+So let's just leave
+
+00:04:20.466 --> 00:04:24.959
+the default of 5 times 2, and voila, we get this.
+
+00:04:24.960 --> 00:04:26.399
+Beautiful. Awesome.
+
+00:04:26.400 --> 00:04:29.510
+So the other way is using the magical C-c C-c
+
+00:04:29.511 --> 00:04:32.401
+in Org Mode, which basically is context-aware
+
+00:04:32.402 --> 00:04:36.053
+and does anything, does the right thing like,
+
+00:04:36.054 --> 00:04:38.599
+almost 100% of the time, which is pretty amazing.
+
+00:04:38.600 --> 00:04:42.431
+Alright, let's just say I write a pipe, some words,
+
+00:04:42.432 --> 00:04:44.679
+and then another pipe, Gopar, and then
+
+00:04:44.680 --> 00:04:47.268
+another pipe. Let's just say we're trying to
+
+00:04:47.269 --> 00:04:50.599
+write it out via text, because in Org mode
+
+00:04:50.600 --> 00:04:51.546
+everything has text.
+
+00:04:51.547 --> 00:04:53.379
+There's nothing fancy about it.
+
+00:04:53.380 --> 00:04:57.672
+If I do C-c C-c, Org mode should automatically be
+
+00:04:57.673 --> 00:04:59.839
+context-aware that this area is a table.
+
+00:04:59.840 --> 00:05:04.294
+So, C-c C-c, boom. So if I press enter, another column.
+
+00:05:04.295 --> 00:05:06.963
+If I press tab, it should automatically move me.
+
+00:05:06.964 --> 00:05:09.391
+So yeah, so that's pretty much it.
+
+00:05:09.392 --> 00:05:11.919
+That's how you get started into the column.
+
+00:05:11.920 --> 00:05:15.591
+So, I'm assuming most of the people here already know that.
+
+00:05:15.592 --> 00:05:17.959
+This is just the primary basic review.
+
+00:05:17.960 --> 00:05:19.807
+So, let's first go...
+
+00:05:19.808 --> 00:05:22.819
+Let's go dive right into our first formula.
+
+00:05:22.820 --> 00:05:24.766
+So I copied some values over here,
+
+00:05:24.767 --> 00:05:27.696
+just to save time, and the columns.
+
+00:05:27.697 --> 00:05:29.163
+So, let's go ahead and say that
+
+00:05:29.164 --> 00:05:30.749
+we have single family house,
+
+00:05:30.750 --> 00:05:33.018
+and the price is a hundred thousand.
+
+00:05:33.019 --> 00:05:34.163
+And, Let's say that I want the price,
+
+00:05:34.164 --> 00:05:36.431
+the down payment that I want to put is 10%.
+
+00:05:36.432 --> 00:05:40.527
+Right. Alright. 10%. Now if I tab
+
+00:05:40.528 --> 00:05:42.393
+or go to the next column, nothing happens.
+
+00:05:42.394 --> 00:05:43.879
+Why is that? Well, it's because
+
+00:05:43.880 --> 00:05:44.984
+(you probably guessed it)
+
+00:05:44.985 --> 00:05:47.755
+we haven't written or tied any table formulas.
+
+00:05:47.756 --> 00:05:49.563
+So we're saying, alright, enough talk.
+
+00:05:49.564 --> 00:05:50.440
+How do we do that?
+
+00:05:50.540 --> 00:05:52.093
+Well, the answer is very simple.
+
+00:05:52.094 --> 00:05:54.983
+We do a pound sign (#), if I can find it.
+
+00:05:54.984 --> 00:05:58.712
+#+ and then we do TBL for table
+
+00:05:58.713 --> 00:06:01.119
+and then FM for formula.
+
+00:06:01.120 --> 00:06:03.428
+So, table formula, and the column.
+
+00:06:03.429 --> 00:06:04.934
+So this, you're already halfway
+
+00:06:04.935 --> 00:06:07.063
+to writing your first table formula.
+
+00:06:07.064 --> 00:06:09.171
+So let's say we want to automatically,
+
+00:06:09.172 --> 00:06:10.978
+Let's just, for exercise,
+
+00:06:10.979 --> 00:06:13.189
+we want to put the down payment,
+
+00:06:13.190 --> 00:06:14.615
+just put some type of value in there,
+
+00:06:14.616 --> 00:06:16.382
+just to make sure that it's working.
+
+00:06:16.383 --> 00:06:20.992
+So the way Org Mode refers to columns is,
+
+00:06:20.993 --> 00:06:24.140
+we start with the dollar sign ($) and then
+
+00:06:24.141 --> 00:06:26.868
+we put the number that the column is.
+
+00:06:26.869 --> 00:06:29.113
+Indexes start with one, not a zero.
+
+00:06:29.114 --> 00:06:31.623
+As most of us watching are programmers,
+
+00:06:31.624 --> 00:06:33.792
+we're probably used to starting with zero,
+
+00:06:33.793 --> 00:06:34.959
+but it starts with one.
+
+00:06:34.960 --> 00:06:38.330
+So one, two, three, four, five.
+
+00:06:38.331 --> 00:06:39.654
+So down payment is the fifth column,
+
+00:06:39.655 --> 00:06:42.303
+we say five, and then we say equal to,
+
+00:06:42.304 --> 00:06:44.288
+let's say Gopar.
+
+00:06:44.289 --> 00:06:47.937
+Then we do C-c C-c to evaluate it,
+
+00:06:47.938 --> 00:06:50.545
+and the table is automatically updated.
+
+00:06:50.546 --> 00:06:50.857
+Look at that.
+
+00:06:50.957 --> 00:06:55.862
+So when you do just this, dollar sign ($) 5,
+
+00:06:55.863 --> 00:06:57.706
+it updates every single column.
+
+00:06:57.806 --> 00:07:00.679
+There is a way to specify that this cell only and
+
+00:07:00.680 --> 00:07:03.224
+this cell only but this is out of scope and it's
+
+00:07:03.324 --> 00:07:05.639
+not that hard it's just not in this video.
+
+00:07:05.640 --> 00:07:08.774
+I would recommend, I commend you, or, actually
+
+00:07:08.874 --> 00:07:12.999
+I recommend that you go check out the manual for that.
+
+00:07:13.000 --> 00:07:17.624
+All right so, let's say we want to do some basic
+
+00:07:17.724 --> 00:07:19.224
+arithmetic we want to do some list values
+
+00:07:19.324 --> 00:07:20.390
+instead of just putting in text.
+
+00:07:20.490 --> 00:07:21.440
+So how do we do that?
+
+00:07:21.540 --> 00:07:24.457
+Well, we have to pull the expression that we want
+
+00:07:24.557 --> 00:07:25.007
+to put in.
+
+00:07:25.107 --> 00:07:27.859
+So, for example, if we want to add we'll do 20 plus
+
+00:07:27.959 --> 00:07:31.357
+20 and if we do C-c C-C to evaluate it, it should
+
+00:07:31.457 --> 00:07:34.224
+update every single column, the entire column,
+
+00:07:34.324 --> 00:07:38.540
+the fifth column I mean and, tada, it does.
+
+00:07:38.640 --> 00:07:41.799
+Cool! So now let's say we want to do a little bit
+
+00:07:41.899 --> 00:07:42.556
+more advanced.
+
+00:07:42.656 --> 00:07:44.907
+Let's say we want to add the previous column to
+
+00:07:45.007 --> 00:07:47.007
+this column, so how do we refer to this one?
+
+00:07:47.107 --> 00:07:50.890
+Well, 1-2-3-4 is the fourth column, so we would
+
+00:07:50.990 --> 00:07:55.831
+just simply do $4 and this should automatically
+
+00:07:55.931 --> 00:07:58.057
+be referring to this column (% DP).
+
+00:07:58.157 --> 00:08:02.190
+So we'll do 10 + 20, it's going to be 30 over here,
+
+00:08:02.490 --> 00:08:04.174
+and let's do C-C C-c.
+
+00:08:04.274 --> 00:08:07.024
+Ooh, error, what happened?
+
+00:08:07.124 --> 00:08:08.874
+Oh my god, oh my god.
+
+00:08:08.974 --> 00:08:11.719
+Well, this seems scary but no worries.
+
+00:08:11.720 --> 00:08:14.077
+This is where debugging comes in pretty handy,
+
+00:08:14.078 --> 00:08:16.740
+which is actually our next section as you can see.
+
+00:08:16.940 --> 00:08:19.324
+So, what happens if we do, if we go into the
+
+00:08:19.424 --> 00:08:21.340
+debugging section, what is the first step?
+
+00:08:21.440 --> 00:08:24.790
+Well, the first step is to try out, is to enable
+
+00:08:24.890 --> 00:08:26.416
+formula debugger.
+
+00:08:26.516 --> 00:08:31.294
+So, if you do C-c {, it will turn on a minor mode
+
+00:08:31.394 --> 00:08:35.509
+that whenever you evaluate a table formula,
+
+00:08:35.510 --> 00:08:38.290
+the debugger will be enabled,
+
+00:08:38.291 --> 00:08:39.357
+will automatically kick in.
+
+00:08:39.457 --> 00:08:41.073
+And if you want to disable the debugger,
+
+00:08:41.074 --> 00:08:43.774
+you just run the command again, and it will turn off.
+
+00:08:43.874 --> 00:08:46.607
+So, let's go ahead and run it. C-c {.
+
+00:08:46.608 --> 00:08:48.790
+As you can see in the mini buffer, it says,
+
+00:08:48.791 --> 00:08:51.441
+"formula debugging has been turned on". Awesome!
+
+00:08:51.541 --> 00:08:53.157
+So if we go back to our table
+
+00:08:53.158 --> 00:08:58.400
+and we try to run this, and see what's going on, we see...
+
+00:08:58.500 --> 00:09:00.440
+Oh, first off, before we look
+
+00:09:00.441 --> 00:09:01.390
+at the buffer that just opened,
+
+00:09:01.391 --> 00:09:02.490
+look at the mini buffer,
+
+00:09:02.491 --> 00:09:04.974
+it says "Debugging Formula. Continue to next?"
+
+00:09:05.074 --> 00:09:07.874
+So if you have multiple or a series of formulas,
+
+00:09:07.974 --> 00:09:09.690
+it will say, "hey, do you want to debug this one
+
+00:09:09.691 --> 00:09:10.374
+or the next one?"
+
+00:09:10.474 --> 00:09:11.958
+So this is just saying, "hey, do you want to go
+
+00:09:12.058 --> 00:09:13.090
+into the next formula?"
+
+00:09:13.190 --> 00:09:14.990
+And since there's no next formula,
+
+00:09:14.991 --> 00:09:16.057
+debugger will just exit out
+
+00:09:16.058 --> 00:09:18.199
+and leave you with the other buffer to see.
+
+00:09:18.299 --> 00:09:19.949
+For now, we'll just click no.
+
+00:09:20.049 --> 00:09:22.590
+Right now, it doesn't matter if you click yes or no
+
+00:09:22.591 --> 00:09:23.540
+because there's only one formula,
+
+00:09:23.640 --> 00:09:26.072
+but we'll just click no, and let's go ahead and
+
+00:09:26.172 --> 00:09:27.657
+pay attention to the new buffer.
+
+00:09:27.757 --> 00:09:29.807
+Well, over here it might seem a little confusing,
+
+00:09:29.808 --> 00:09:32.390
+but don't worry, we're just going to ignore most of this.
+
+00:09:32.490 --> 00:09:33.890
+The first thing that we're going to pay
+
+00:09:33.990 --> 00:09:35.457
+attention is to the original.
+
+00:09:35.557 --> 00:09:38.067
+So it says, okay, this is the original, so we have
+
+00:09:38.167 --> 00:09:41.124
+a quote expression, which is just trying to add the
+
+00:09:41.324 --> 00:09:41.740
+fourth column.
+
+00:09:41.840 --> 00:09:42.840
+And if we go over here
+
+00:09:42.841 --> 00:09:44.207
+once everything is finalized,
+
+00:09:44.208 --> 00:09:47.107
+it says "hey, we're trying to add this 10,
+
+00:09:47.207 --> 00:09:50.240
+but it's actually a string 10, and added to 20.
+
+00:09:50.340 --> 00:09:52.325
+So of course it's going to be an error, so now we
+
+00:09:52.425 --> 00:09:53.999
+know what the error is.
+
+00:09:54.099 --> 00:09:56.090
+So you're saying all right cool, awesome, now how
+
+00:09:56.190 --> 00:09:58.840
+do we transform that string into a number?
+
+00:09:58.940 --> 00:10:02.607
+Well, Org Mode formulas have these flags
+
+00:10:02.608 --> 00:10:05.674
+that you can use, and essentially a flag looks like this.
+
+00:10:05.774 --> 00:10:10.257
+It's a semicolon (;) followed by some letter
+
+00:10:10.258 --> 00:10:13.270
+or some identifier
+
+00:10:13.370 --> 00:10:16.490
+that will let Org mode know that hey,
+
+00:10:16.590 --> 00:10:18.290
+this should be turned into a number
+
+00:10:18.291 --> 00:10:20.207
+or this should be turned into whatever.
+
+00:10:20.307 --> 00:10:22.724
+There's different ones for alpha literal
+
+00:10:22.725 --> 00:10:23.863
+and for a bunch of...
+
+00:10:23.963 --> 00:10:25.274
+I think there's even "i" for "integer",
+
+00:10:25.474 --> 00:10:26.819
+so it depends what you want.
+
+00:10:26.919 --> 00:10:28.202
+So for now we're just going to put "number"
+
+00:10:28.203 --> 00:10:29.490
+because it's a real number.
+
+00:10:29.590 --> 00:10:33.699
+If we do this and the debugger is still on,
+
+00:10:33.707 --> 00:10:35.274
+(remember because it automatically
+
+00:10:35.374 --> 00:10:36.374
+stays on until we turn it off),
+
+00:10:36.474 --> 00:10:41.540
+if we reevaluate the the formula,
+
+00:10:41.640 --> 00:10:43.624
+we should be able to see it.
+
+00:10:43.724 --> 00:10:47.379
+But first, before I do that, let's check step two.
+
+00:10:47.479 --> 00:10:52.240
+I'll now rerun formulas with C-c * and table,
+
+00:10:52.340 --> 00:10:54.639
+which calls org-table-recalculate.
+
+00:10:54.640 --> 00:10:58.507
+To do this, you actually have to be inside the table.
+
+00:10:58.607 --> 00:11:02.354
+Otherwise, Org mode will try to do some other stuff
+
+00:11:02.454 --> 00:11:04.325
+because it is context-aware, so depending on
+
+00:11:04.425 --> 00:11:06.324
+the context it might do something else.
+
+00:11:06.424 --> 00:11:09.124
+So if we do C-c *...
+
+00:11:09.224 --> 00:11:12.724
+As you can see the debugger has kicked in,
+
+00:11:12.824 --> 00:11:14.102
+says, "Do you want to continue to next?"
+
+00:11:14.202 --> 00:11:17.580
+Let's press yes (y), and it has been applied.
+
+00:11:17.680 --> 00:11:20.971
+So as you can see, it only updated one column--
+
+00:11:21.071 --> 00:11:22.977
+I'm sorry, one row--and the thing is,
+
+00:11:23.077 --> 00:11:28.007
+when you run this, the recalculate, it will only
+
+00:11:28.107 --> 00:11:30.361
+run for the current row that you're in.
+
+00:11:30.461 --> 00:11:32.785
+If you want to run for the entire table,
+
+00:11:32.885 --> 00:11:36.240
+you're going to do C-u C-c *.
+
+00:11:36.340 --> 00:11:38.407
+Before I do that, let me turn off the debugger
+
+00:11:38.507 --> 00:11:40.807
+since we no longer are in need of it.
+
+00:11:40.907 --> 00:11:44.977
+So C-c {, and debugging has been turned off.
+
+00:11:45.077 --> 00:11:50.807
+Now let me do C-u C-c * and as you can see
+
+00:11:50.808 --> 00:11:54.320
+the other rows also calculated, updated as well.
+
+00:11:54.420 --> 00:11:54.924
+Beautiful!
+
+00:11:55.024 --> 00:11:58.507
+So as I mentioned, feel free to look / browse the
+
+00:11:58.607 --> 00:12:00.107
+documentation for more flags
+
+00:12:00.108 --> 00:12:02.640
+because each flag has its own special meaning
+
+00:12:02.641 --> 00:12:07.139
+and will do different things, which is pretty cool.
+
+00:12:07.140 --> 00:12:08.124
+All right, cool.
+
+00:12:08.224 --> 00:12:10.007
+We're done with debugging and we fixed it.
+
+00:12:10.107 --> 00:12:12.075
+So there, now we know how to create formulas
+
+00:12:12.076 --> 00:12:14.207
+and how to debug them whenever they break,
+
+00:12:14.307 --> 00:12:15.040
+which is awesome.
+
+00:12:15.140 --> 00:12:18.324
+All right, but remember how I said that you can
+
+00:12:18.424 --> 00:12:23.659
+only debug... Whenever you run recalculate,
+
+00:12:23.660 --> 00:12:25.340
+It will only run the first formula?
+
+00:12:25.440 --> 00:12:28.439
+Well, let's say you want to have multiple formulas?
+
+00:12:28.539 --> 00:12:30.807
+This is completely valid, except the bad thing is
+
+00:12:30.907 --> 00:12:34.090
+that you have to do C-c C-c C-c on each each one,
+
+00:12:34.190 --> 00:12:39.457
+because C-u C-c * won't recalculate everything.
+
+00:12:39.557 --> 00:12:40.350
+It won't.
+
+00:12:40.450 --> 00:12:41.557
+Sadly, it doesn't do it.
+
+00:12:41.657 --> 00:12:44.189
+There is a way that you can do it,
+
+00:12:44.289 --> 00:12:46.459
+which is hacking together some elisp.
+
+00:12:46.460 --> 00:12:47.474
+You can probably find it
+
+00:12:47.475 --> 00:12:48.707
+or you can probably make it yourself
+
+00:12:48.807 --> 00:12:51.107
+if you look around, but that's out of scope for this.
+
+00:12:51.207 --> 00:12:57.099
+So now, how do we... We can write all the formulas
+
+00:12:57.100 --> 00:12:59.007
+we want in one single line.
+
+00:12:59.107 --> 00:13:01.740
+There's a way to to distinguish
+
+00:13:01.741 --> 00:13:03.340
+when one ends and one begins
+
+00:13:03.341 --> 00:13:04.707
+and that is the double colon (::).
+
+00:13:04.807 --> 00:13:07.607
+So right there, and a new formula will begin.
+
+00:13:07.707 --> 00:13:08.374
+So for example,
+
+00:13:08.474 --> 00:13:12.224
+let's say for the seventh column we say "gopar".
+
+00:13:12.324 --> 00:13:17.407
+If I do C-c C-c, it'll run every single thing
+
+00:13:17.507 --> 00:13:19.226
+so that... "gopar". Tada!
+
+00:13:19.326 --> 00:13:20.624
+There, awesome.
+
+00:13:20.724 --> 00:13:22.440
+But this is going to get very annoying if you're
+
+00:13:22.540 --> 00:13:25.007
+simply trying to edit formulas like this, right?
+
+00:13:25.107 --> 00:13:26.933
+So that's where the nicer debugging,
+
+00:13:27.033 --> 00:13:28.790
+nicer editing section comes in.
+
+00:13:28.890 --> 00:13:32.299
+So, yes, just like as mentioned, table calls
+
+00:13:32.300 --> 00:13:33.507
+only the first formula.
+
+00:13:33.607 --> 00:13:36.349
+So what's the step onto this nicer editing section?
+
+00:13:36.449 --> 00:13:40.424
+Try out "C-c ," or `org-edit-special`.
+
+00:13:40.524 --> 00:13:44.557
+So let's go back to the table formula and call it...
+
+00:13:44.657 --> 00:13:47.590
+oh my god, look at that,
+
+00:13:47.690 --> 00:13:49.890
+a new buffer just for editing,
+
+00:13:49.990 --> 00:13:52.599
+and each formula is in its own line to make
+
+00:13:52.699 --> 00:13:54.624
+it easier, which is beautiful!
+
+00:13:54.724 --> 00:13:58.715
+So, let's just say I want to do another calculation.
+
+00:13:58.815 --> 00:14:02.607
+Let's do eight times eight, which should be 64,
+
+00:14:02.707 --> 00:14:04.740
+and we have no need of putting this flag
+
+00:14:04.741 --> 00:14:07.440
+because the flag only affects it on the input coming in.
+
+00:14:07.540 --> 00:14:09.074
+I should have mentioned that earlier.
+
+00:14:09.174 --> 00:14:10.774
+Only input coming in.
+
+00:14:10.874 --> 00:14:13.174
+There is ways to affect the output,
+
+00:14:13.274 --> 00:14:16.474
+which we'll also cover in this topic later on,
+
+00:14:16.574 --> 00:14:19.131
+but for now, you can either leave the end flag
+
+00:14:19.231 --> 00:14:21.990
+or leave it out. It will still work fine.
+
+00:14:21.991 --> 00:14:23.507
+Let's just leave it out for now.
+
+00:14:23.508 --> 00:14:26.624
+Let's just do C-c C-c to make sure
+
+00:14:26.625 --> 00:14:30.690
+that everything is working. 64. Beautiful.
+
+00:14:30.790 --> 00:14:33.066
+So there you have it. You can have multiple formulas
+
+00:14:33.166 --> 00:14:34.778
+just stacked up into one line,
+
+00:14:34.878 --> 00:14:36.390
+and whenever you need to edit it,
+
+00:14:36.391 --> 00:14:38.257
+just go into that into that line
+
+00:14:38.357 --> 00:14:41.024
+and "C-c ,", and tada!
+
+00:14:41.124 --> 00:14:44.350
+You have this ready, good to go, and for editing.
+
+00:14:44.450 --> 00:14:45.824
+Oh and if you want to exit out,
+
+00:14:45.825 --> 00:14:48.940
+also just do "C-c ," again and you're back.
+
+00:14:49.040 --> 00:14:51.890
+I did not mention that. Sweet!
+
+00:14:51.990 --> 00:14:54.774
+So now we know how to have
+
+00:14:54.775 --> 00:14:57.006
+a better editing experience. Sweet!
+
+00:14:57.106 --> 00:15:00.240
+So now comes the formatting section which I talked about.
+
+00:15:00.340 --> 00:15:01.874
+So what's the first step?
+
+00:15:01.974 --> 00:15:05.507
+Well for formatting, Org mode uses
+
+00:15:05.508 --> 00:15:08.574
+the printf function from C.
+
+00:15:08.674 --> 00:15:10.374
+So those who are familiar with C,
+
+00:15:10.375 --> 00:15:12.823
+you'll feel right at home because the way you format it
+
+00:15:12.923 --> 00:15:13.940
+is exactly the same way.
+
+00:15:14.040 --> 00:15:16.557
+So for example, this will print off
+
+00:15:16.558 --> 00:15:18.873
+a floating number with two decimal points.
+
+00:15:18.973 --> 00:15:21.540
+As you can see here, this is how you will use it.
+
+00:15:21.640 --> 00:15:26.324
+It will be after the semicolon and it will be "%.2f".
+
+00:15:26.424 --> 00:15:28.157
+So let's go ahead and test that out.
+
+00:15:28.158 --> 00:15:30.590
+Actually, let's go ahead to our latest function--
+
+00:15:30.690 --> 00:15:32.340
+I mean, to our latest formula.
+
+00:15:32.440 --> 00:15:33.840
+Let's go ahead to the nicer buffer
+
+00:15:33.841 --> 00:15:39.207
+and let's do, Ctrl... Let's enter the semicolon,
+
+00:15:39.208 --> 00:15:45.324
+and then let's put the percent sign, we do 2f.
+
+00:15:45.424 --> 00:15:49.174
+Actually, let's make it five
+
+00:15:49.175 --> 00:15:52.590
+just to differentiate from the formula, and let's see.
+
+00:15:52.690 --> 00:15:57.174
+Let's run it, and tada!
+
+00:15:57.274 --> 00:16:00.179
+So yeah, as you can see, five decimal points.
+
+00:16:00.180 --> 00:16:01.857
+and if we want zero decimal points, we can also
+
+00:16:01.957 --> 00:16:04.957
+just move point zero, and tada!
+
+00:16:05.057 --> 00:16:06.124
+Just like that.
+
+00:16:06.224 --> 00:16:08.774
+We can also just leave it as is how it was before,
+
+00:16:08.874 --> 00:16:10.874
+because before, we didn't even actually need it,
+
+00:16:10.875 --> 00:16:13.014
+but yeah, just an example.
+
+00:16:13.114 --> 00:16:15.090
+And just a reminder, there are
+
+00:16:15.091 --> 00:16:17.357
+plenty more ways of formatting,
+
+00:16:17.358 --> 00:16:19.640
+just look at the documentation.
+
+00:16:19.740 --> 00:16:21.724
+There will be more. Basically every single thing
+
+00:16:21.725 --> 00:16:25.574
+that you need, just use the documentation as reference.
+
+00:16:25.674 --> 00:16:28.340
+Cool! So now we know how to debug,
+
+00:16:28.341 --> 00:16:29.774
+how to write formulas
+
+00:16:29.775 --> 00:16:32.824
+and how to get a better, nicer editing buffer
+
+00:16:32.825 --> 00:16:35.124
+for the formula so we don't have to do it all
+
+00:16:35.125 --> 00:16:36.240
+in a single line.
+
+00:16:36.340 --> 00:16:38.657
+So, what about conditional prompts, like I was
+
+00:16:38.757 --> 00:16:43.390
+showing in the first table in the end goal?
+
+00:16:43.490 --> 00:16:47.299
+Well that's actually pretty simple because we already
+
+00:16:47.300 --> 00:16:48.324
+know how to do this.
+
+00:16:48.424 --> 00:16:51.133
+Yes, if you think about it for a second, if we are
+
+00:16:51.233 --> 00:16:54.221
+able to pull lisp s-expressions, then we are able to
+
+00:16:54.321 --> 00:16:56.290
+basically do it already. Here's an example.
+
+00:16:56.390 --> 00:17:01.807
+We're saying if the second column is empty, is zero--
+
+00:17:01.907 --> 00:17:04.619
+so actually, this should be with the N flag
+
+00:17:04.620 --> 00:17:06.940
+because we will transform empty values as zero,
+
+00:17:07.040 --> 00:17:08.819
+and that's how Org mode will read those.
+
+00:17:08.820 --> 00:17:12.424
+It's saying if the second flag is zero,
+
+00:17:12.425 --> 00:17:16.952
+then I want you to put "Enter the values."
+
+00:17:17.052 --> 00:17:20.440
+And if it's not empty, we're going to put
+
+00:17:20.540 --> 00:17:22.190
+"Values entered." We're going to recognize.
+
+00:17:22.290 --> 00:17:24.240
+So let's go ahead and actually do this.
+
+00:17:24.540 --> 00:17:28.990
+So let's grab this, and let's type it in.
+
+00:17:29.090 --> 00:17:36.457
+So let's go ahead. "Enter the values," because it
+
+00:17:36.557 --> 00:17:37.390
+doesn't have any.
+
+00:17:37.490 --> 00:17:42.440
+So let's go ahead and say "Hello EmacsConf"
+
+00:17:42.441 --> 00:17:47.224
+and let's go ahead and run it again.
+
+00:17:47.324 --> 00:17:48.457
+Since there are values,
+
+00:17:48.458 --> 00:17:51.574
+it's going to overwrite what's here and put value entered.
+
+00:17:51.674 --> 00:17:53.398
+So let's go ahead.
+
+00:17:53.498 --> 00:17:55.690
+Tada, so there you go.
+
+00:17:55.790 --> 00:18:00.524
+So that is pretty much how you do conditional props,
+
+00:18:00.624 --> 00:18:01.940
+which is pretty straightforward
+
+00:18:01.941 --> 00:18:02.724
+once you think about it
+
+00:18:02.725 --> 00:18:05.440
+because if you are able to insert Lisp expressions,
+
+00:18:05.441 --> 00:18:08.240
+then you are able to just do that check
+
+00:18:08.241 --> 00:18:11.074
+and do the conditional check yourself.
+
+00:18:11.174 --> 00:18:13.540
+So, custom formulas.
+
+00:18:13.640 --> 00:18:15.324
+Yeah, you'll see what I mean.
+
+00:18:15.424 --> 00:18:19.924
+We want to be able to put our own custom functions,
+
+00:18:20.024 --> 00:18:23.890
+and you probably have an idea how to do this already.
+
+00:18:23.990 --> 00:18:27.059
+Yes, we also know how to do this already.
+
+00:18:27.060 --> 00:18:30.357
+Before I continue, I'm going to say that I already
+
+00:18:30.457 --> 00:18:31.940
+have some formulas that I use
+
+00:18:31.941 --> 00:18:33.374
+which are not part of this talk
+
+00:18:33.375 --> 00:18:37.390
+because they're just functions that calculate some stuff.
+
+00:18:37.490 --> 00:18:39.990
+So for example, they calculate the monthly mortgage,
+
+00:18:40.090 --> 00:18:43.257
+the monthly PMI, property tax, homeowners insurance,
+
+00:18:43.357 --> 00:18:44.757
+so a bunch of other stuff.
+
+00:18:44.857 --> 00:18:49.729
+I have these functions already and they are a bit off,
+
+00:18:49.829 --> 00:18:52.212
+but for this example, they're doing everything.
+
+00:18:52.312 --> 00:18:54.390
+It's close enough, so don't worry too much.
+
+00:18:54.490 --> 00:18:56.824
+Just an example, you can have your own function
+
+00:18:56.924 --> 00:18:59.213
+that does something else like calculate
+
+00:18:59.313 --> 00:19:01.540
+a REI B rental or something like that.
+
+00:19:01.640 --> 00:19:03.219
+So you can do whatever you want.
+
+00:19:03.220 --> 00:19:04.724
+As long as you can call via Lisp,
+
+00:19:04.824 --> 00:19:07.899
+you can call it in Org mode, in the table formulas.
+
+00:19:07.900 --> 00:19:11.337
+So let's exit out of there.
+
+00:19:11.437 --> 00:19:13.807
+Now that we know how to do everything,
+
+00:19:13.808 --> 00:19:20.924
+let me go back to the original table and go from there.
+
+00:19:21.024 --> 00:19:26.524
+Let me close all these out actually.
+
+00:19:26.624 --> 00:19:29.524
+Now let's go back and revisit this table,
+
+00:19:29.624 --> 00:19:31.619
+since we'll be much, much more familiar
+
+00:19:31.620 --> 00:19:35.418
+except for one thing, which I will explain.
+
+00:19:35.518 --> 00:19:38.040
+So we have the constants right there
+
+00:19:38.041 --> 00:19:39.690
+and we have the house prices
+
+00:19:39.691 --> 00:19:42.499
+and we have everything just like I mentioned before.
+
+00:19:42.500 --> 00:19:44.023
+The main part that we want to look at
+
+00:19:44.123 --> 00:19:45.024
+is the table formula.
+
+00:19:45.124 --> 00:19:47.474
+So let's open up our special editing buffer,
+
+00:19:47.574 --> 00:19:49.674
+"C-c ,",
+
+00:19:49.774 --> 00:19:52.390
+and as you can see, I have some right here.
+
+00:19:52.490 --> 00:19:53.524
+So, the fifth column I'm saying,
+
+00:19:53.624 --> 00:19:55.824
+"Hey, we're gonna call this function
+
+00:19:55.924 --> 00:19:58.557
+rei-calculate-down-payment, and I'm gonna
+
+00:19:58.657 --> 00:20:00.757
+pass in the third column and fourth column
+
+00:20:00.758 --> 00:20:02.339
+and I'm going to pass in t." (true)
+
+00:20:02.340 --> 00:20:05.874
+I believe this is just to normalize,
+
+00:20:07.174 --> 00:20:12.057
+to convert to the proper decimal place,
+
+00:20:12.157 --> 00:20:14.079
+so let's not worry too much about that.
+
+00:20:14.179 --> 00:20:16.690
+Then for the sixth column, we're going to say
+
+00:20:16.790 --> 00:20:18.045
+"I calculate the monthly mortgage."
+
+00:20:18.145 --> 00:20:20.124
+We're going to pass in the third column
+
+00:20:20.224 --> 00:20:21.339
+the INTEREST_RATE, which we have
+
+00:20:21.439 --> 00:20:22.979
+defined over here in the constants.
+
+00:20:22.980 --> 00:20:26.274
+The 30, I believe this is for 30 years,
+
+00:20:26.374 --> 00:20:29.323
+PMI, the PROPERTY_TAX and HOME_INSURANCE,
+
+00:20:29.423 --> 00:20:30.774
+and then the fourth column.
+
+00:20:30.874 --> 00:20:33.824
+Then everything is going to be accepted as numbers,
+
+00:20:33.924 --> 00:20:35.074
+and we're going to have two decimals
+
+00:20:35.174 --> 00:20:36.174
+at the end of the place.
+
+00:20:36.274 --> 00:20:37.507
+So, what else?
+
+00:20:37.607 --> 00:20:40.074
+Over here is where we have our conditionals.
+
+00:20:40.174 --> 00:20:42.274
+We're saying, "hey, if the seventh column is 0,
+
+00:20:42.374 --> 00:20:44.302
+press 'Enter Tenant Income'."
+
+00:20:44.402 --> 00:20:48.407
+Over here as well, if the seventh column is zero,
+
+00:20:48.507 --> 00:20:51.724
+we're going to press 'Enter Tenant Income'
+
+00:20:51.824 --> 00:20:53.605
+and for this one we're going to say,
+
+00:20:53.705 --> 00:20:55.940
+"Hey, we're going to normalize the price."
+
+00:20:56.040 --> 00:20:59.240
+I believe this is a 1% rule.
+
+00:20:59.340 --> 00:21:01.390
+This could have been extracted into a function,
+
+00:21:01.490 --> 00:21:03.939
+but I just did the calculation right here.
+
+00:21:04.239 --> 00:21:07.890
+This, I believe, is the ROI, 12 months.
+
+00:21:07.990 --> 00:21:11.007
+This is just calculating the cash flow.
+
+00:21:11.107 --> 00:21:14.907
+This is a very rudimentary function or formula.
+
+00:21:15.407 --> 00:21:16.732
+Do not use this because there is way more
+
+00:21:16.733 --> 00:21:18.840
+to go into calculating the cash flow
+
+00:21:18.841 --> 00:21:21.499
+and also, it differs from person to person.
+
+00:21:21.599 --> 00:21:23.774
+Some people are more conservative,
+
+00:21:23.874 --> 00:21:26.959
+other people are way more liberal, so it just
+
+00:21:26.960 --> 00:21:28.874
+depends how you want to calculate it.
+
+00:21:28.974 --> 00:21:34.240
+As you can see, we have the N flag for numeric number
+
+00:21:34.241 --> 00:21:36.090
+and then we're saying we're formatting
+
+00:21:36.190 --> 00:21:37.694
+to one decimal place.
+
+00:21:37.794 --> 00:21:43.207
+The %% sign is just to input a percent sign as itself.
+
+00:21:43.208 --> 00:21:45.419
+Otherwise, Org mode is going to think
+
+00:21:45.420 --> 00:21:47.940
+it's some type of a formatter, which it's not.
+
+00:21:48.040 --> 00:21:49.140
+If you do... As I mentioned,
+
+00:21:49.240 --> 00:21:51.690
+if you've used the printf function in C or C++,
+
+00:21:51.790 --> 00:21:55.507
+then you probably know how to use it.
+
+00:21:55.607 --> 00:22:01.824
+Okay, so this is pretty much everything in a nutshell.
+
+00:22:01.924 --> 00:22:04.970
+So, one thing that I do want to say
+
+00:22:05.070 --> 00:22:06.379
+is the last section,
+
+00:22:06.479 --> 00:22:07.774
+which is automatically updating,
+
+00:22:07.874 --> 00:22:10.174
+which is the part that blew my mind
+
+00:22:10.175 --> 00:22:11.457
+when I realized that Org Mode can do this.
+
+00:22:11.557 --> 00:22:12.477
+So how do we do it?
+
+00:22:12.577 --> 00:22:14.659
+Well, you probably guessed just from looking at
+
+00:22:14.660 --> 00:22:18.324
+at the first table that we have right now.
+
+00:22:18.424 --> 00:22:20.774
+We add a column at the beginning
+
+00:22:20.874 --> 00:22:22.857
+of the table with a percent (%)--
+
+00:22:22.957 --> 00:22:24.857
+I'm sorry, with the pound sign (#)
+
+00:22:24.957 --> 00:22:28.457
+or hashtag as the younger kids call it.
+
+00:22:28.557 --> 00:22:31.045
+So this is what we do.
+
+00:22:31.145 --> 00:22:32.819
+We added a column at the beginning of the
+
+00:22:32.820 --> 00:22:34.984
+table, we do pound sign (#).
+
+00:22:35.084 --> 00:22:35.790
+So this is what it's for.
+
+00:22:35.890 --> 00:22:38.839
+This lets Org mode know that "hey,
+
+00:22:38.840 --> 00:22:41.140
+I want the values, the table formulas,
+
+00:22:41.240 --> 00:22:43.957
+to automatically run on each tab change."
+
+00:22:44.057 --> 00:22:46.240
+Now I believe that you can make it so that
+
+00:22:46.340 --> 00:22:49.123
+it changes, so that it updates on every keystroke.
+
+00:22:49.223 --> 00:22:51.024
+I think that's too much.
+
+00:22:51.124 --> 00:22:53.007
+And then you can also make it so that
+
+00:22:53.107 --> 00:22:56.019
+only certain rows update or certain columns.
+
+00:22:56.020 --> 00:22:58.219
+There's a plethora of things that you can do.
+
+00:22:58.319 --> 00:23:00.924
+You should definitely read up on the documentation,
+
+00:23:01.024 --> 00:23:03.425
+because you will probably make a way better talk,
+
+00:23:03.525 --> 00:23:06.974
+a way more advanced talk than I on this one,
+
+00:23:07.074 --> 00:23:09.574
+so I'm looking forward for that.
+
+00:23:09.674 --> 00:23:12.459
+But this is essentially how you build
+
+00:23:12.460 --> 00:23:15.507
+a Org mode table formula that will help you know
+
+00:23:15.508 --> 00:23:17.125
+if a property is correct.
+
+00:23:17.225 --> 00:23:22.340
+So, let's go ahead and as a final out to this demo,
+
+00:23:22.440 --> 00:23:25.419
+let's go ahead and enter a new column.
+
+00:23:25.420 --> 00:23:30.174
+Org-mode automatically puts the pound sign (#),
+
+00:23:30.274 --> 00:23:35.440
+which is awesome, and let's just say 'Emacs House',
+
+00:23:35.540 --> 00:23:39.590
+and let's say it is 100k.
+
+00:23:39.690 --> 00:23:44.339
+So 100k, and as you can see it's already trying to
+
+00:23:44.340 --> 00:23:46.040
+calculate the monthly mortgage,
+
+00:23:46.140 --> 00:23:47.090
+but we'll see about that,
+
+00:23:47.190 --> 00:23:49.879
+and let's just put 10% down.
+
+00:23:49.880 --> 00:23:53.057
+So 10% of 100k should be 10,000.
+
+00:23:53.157 --> 00:23:56.407
+So 10,000, correct, and the monthly mortgage is that
+
+00:23:56.408 --> 00:24:00.090
+and let's just say the tenant income is,
+
+00:24:00.190 --> 00:24:01.657
+as you can see right here,
+
+00:24:01.757 --> 00:24:05.874
+tenant income is, let's say 1500.
+
+00:24:05.974 --> 00:24:07.274
+Is it passing the 1% rule?
+
+00:24:07.374 --> 00:24:09.424
+Yep! What's my ROI?
+
+00:24:09.524 --> 00:24:13.879
+118%, which is kind of cool actually.
+
+00:24:13.880 --> 00:24:14.707
+That's a nice deal.
+
+00:24:14.907 --> 00:24:17.657
+So this is a rudimentary way of
+
+00:24:17.757 --> 00:24:20.319
+calculating deals in Org mode.
+
+00:24:20.419 --> 00:24:44.380
+I hope you found it interesting, and yeah, that is it.
diff --git a/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt
new file mode 100644
index 00000000..9dac1e1f
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt
@@ -0,0 +1,109 @@
+WEBVTT
+
+00:00:56.800 --> 00:03:24.599
+Pragmatically, how are people that buy into these ideals, and especially those that build the software, meant to live/thrive, short of renouncing many of the luxuries of modern life, as many have been struggling to reconcile both, it appears? Wouldn't it be smarter and more productive longer-term to solve that problem too?
+
+00:03:24.600 --> 00:04:28.679
+I have been admiring your work for free software for many years now. I am a bit concerned about what will happen to the GNU project when you retire (not soon, I hope!!). Have you planned how to manage the GNU project in the long run?
+
+00:04:52.520 --> 00:07:10.799
+In response to your aversion to JavaScript support in Emacs: In the same way that to revolt against the nonfree spirit in software development one has to develop software, and that to fight nonfree compilers one has to write a free compiler - can you fairly consider rejection of JavaScript as a tool conducive to improving the state of free JavaScript? A server can send back any MIME type to execute on your machine, JS was just the most convenient.
+
+00:07:27.000 --> 00:08:38.999
+With all the recent additions and optimizations to Emacs Lisp (lexical scoping, native compilation etc.) would you deem Emacs Lisp suitable for general purpose programming outside Emacs (i.e. scripting, running web servers). If not, why?
+
+00:08:44.760 --> 00:09:27.439
+Could you give a few examples of the medium-sized jobs necessary for WYSIWYG-editor support in Emacs?
+
+00:09:33.480 --> 00:10:48.639
+Should GNU (or someone else) define a safe-subset of HTML/CSS/JS to make web browsers simpler and safer (e.g. by preventing JS from contacting servers)?
+
+00:10:57.440 --> 00:13:50.479
+How can we ensure the continuity of an understanding of the more arcane parts of the [Emacs] source code, and increase their evolvability, notably with regards to display, single-threading limitations, etc.?
+
+00:13:50.480 --> 00:14:50.279
+Are there any problems or disadvantages using the GNU AGPL for non-networked software like Emacs packages?
+
+00:14:50.280 --> 00:16:36.839
+Is there a list of Emacs issues which can be solved by programmers with different levels? For example my level is A, I know basic elisp and C. How can I help?
+
+00:16:36.840 --> 00:17:19.359
+What roadblocks kept some of the other efforts from being used with Emacs?
+
+00:17:36.240 --> 00:17:55.119
+What do you use emacs for beyond editing?
+
+00:17:55.120 --> 00:18:37.279
+Song about e-mail
+
+00:18:49.556 --> 00:19:59.039
+Emacs is used by a small population relative to the population that could benefit from it. Do you have any thoughts on how to expand the user base more broadly even among software developers?
+
+00:20:05.760 --> 00:22:42.439
+Would a namespace system similar to Common Lisp packages but without :USE work in Emacs? Modern CL implementations have package local nicknames to create package local prefixes.
+
+00:22:42.440 --> 00:24:26.919
+With Emacs 29 adding more (awesome) features into vanilla Emacs, how should we ensure vanilla Emacs does not get bloated with many similar features? (example: ido/icomplete, vc/magit)
+
+00:24:26.920 --> 00:25:35.039
+Do you recommend reaching out in [high] schools for volunteers instead of universities because they are more prone to value the objectives of freedom?
+
+00:25:35.040 --> 00:27:14.879
+What was the thought process behind making Emacs Lisp dynamically scoped when you first created it? What advantages did it provide over the alternative?
+
+00:27:18.766 --> 00:29:28.839
+It's hard to pick up Emacs if you do not speak English. Can something be done to address that?
+
+00:29:28.840 --> 00:33:54.479
+Do you use Org or Org mode, and if so, to what extent?
+
+00:33:54.480 --> 00:35:19.039
+What do you have in mind for more modular Emacs development?
+
+00:35:19.040 --> 00:36:18.639
+Reframing the school question
+
+00:36:18.640 --> 00:37:48.799
+In light of that critique of JavaScript not being about the language per se but rather the "culture of blindly getting and running packages/libraries", what's so different with what's currently done by the vast majority of Emacs/Elisp users to just install packages blindly?
+
+00:37:48.800 --> 00:38:54.879
+Do you still intend to merge your patch to the "shorthands" feature to the master branch?
+
+00:38:54.880 --> 00:40:27.919
+Do you think the freedom e.g., we have in Emacs, becomes a hurdle for some people to pursue more important things in the world? I used to do a lot of Emacs programming, but I recently try to stay away from tinkering on Emacs.
+
+00:40:27.920 --> 00:43:28.839
+Question about software freedom: how does it apply to software that are art/media experiences, like videogames? In your view, Is the creator of a videogame obliged to release it under a free license?
+
+00:43:35.915 --> 00:45:45.567
+Have you seen Haketilo? It seems similar to LibreJS.
+
+00:45:45.568 --> 00:47:09.799
+Do you have any suggestions for helping propective contributers streamline
+the copyright assignment needed to contribute to Emacs (and other FSF software
+projects)?
+
+00:47:09.800 --> 00:49:31.279
+Can complexity induced by company-funded free/libre code become a problem, when the company pulls out, leaving the code potentially unmaintainable?
+
+00:49:31.280 --> 00:52:06.250
+What do you think of Hyperbole or EEV instead of org mode, or other things for the stuff that org mode does "second brain / knowledge base", or GTD 'getting things done' etc... among other things in Emacs or other Emacs packages
+
+00:52:06.251 --> 00:53:02.999
+Are there plans to bring modal editing (eg. evil-mode, viper) to Emacs core and did your opinion on modal editing change over the years?
+
+00:53:03.000 --> 00:54:04.839
+What is your opinion on the current state of large machine
+learning/AI models?
+
+00:54:14.302 --> 00:55:38.839
+I thought it was a virtue to separate the content from the style orappearance of information. Part of being free is also to view information in the format that you want. Does your WYSIWYG idea erode this virtue and lead to more thinking -- perhaps undue thinking about style over substance?
+
+00:55:38.840 --> 00:56:30.759
+Do you ever dabble in retro-computing, e.g. logging into TOPS10/20 systems SDF, etc?
+
+00:56:38.196 --> 00:58:04.479
+Do you know Gemini?
+
+00:58:04.480 --> 00:59:49.960
+stallmansupport.org
diff --git a/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.vtt b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.vtt
new file mode 100644
index 00000000..eee7b8cc
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.vtt
@@ -0,0 +1,2217 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.492
+[Amin]: Yep, thanks RMS for the great talk.
+
+00:00:02.493 --> 00:00:04.759
+Now it's time for questions and answers.
+
+00:00:04.760 --> 00:00:13.519
+I will paste the questions here and RMS will choose which ones to answer.
+
+00:00:13.520 --> 00:00:17.501
+[Richard]: Please don't post a lot of questions in the Mumble chat
+
+00:00:17.502 --> 00:00:19.239
+and fill up the buffer.
+
+00:00:19.240 --> 00:00:25.359
+There's a limit to what I can see on the screen, so make sure it's visible.
+
+00:00:25.360 --> 00:00:27.159
+Don't get too far ahead.
+
+00:00:27.160 --> 00:00:42.279
+[Amin]: Sure, I will only paste one or two questions at a time.
+
+00:00:42.280 --> 00:00:43.639
+I think it would also be helpful
+
+00:00:43.640 --> 00:00:47.359
+if you read out the questions as you answer them, Richard.
+
+00:00:47.360 --> 00:00:56.799
+[Richard]: Okay.
+
+NOTE Pragmatically, how are people that buy into these ideals, and especially those that build the software, meant to live/thrive, short of renouncing many of the luxuries of modern life, as many have been struggling to reconcile both it appears. Wouldn't it be smarter and more productive longer-term to solve that problem too?
+
+00:00:56.800 --> 00:01:01.079
+Well, this question is a little silly.
+
+00:01:01.080 --> 00:01:05.159
+It's based on sort of all or none thinking.
+
+00:01:05.160 --> 00:01:09.079
+Pragmatically, how are people that buy into these ideals?
+
+00:01:09.080 --> 00:01:11.199
+I find that term offensive.
+
+00:01:11.200 --> 00:01:16.479
+And especially those that build the software meant to live/thrive,
+
+00:01:16.480 --> 00:01:20.839
+short of renouncing many of the luxuries of modern life.
+
+00:01:20.840 --> 00:01:24.239
+It's repackaged standard.
+
+00:01:24.240 --> 00:01:30.319
+You'll die if you don't write proprietary software.
+
+00:01:30.320 --> 00:01:33.839
+But most people in the world don't write proprietary software
+
+00:01:33.840 --> 00:01:36.079
+and that doesn't kill them.
+
+00:01:36.080 --> 00:01:41.799
+Whatever you do to make money, if you're reasonably well paid at it,
+
+00:01:41.800 --> 00:01:44.119
+which if you're working in software, I hope you are,
+
+00:01:44.120 --> 00:01:49.479
+that enables you to have a lot of time to do something else,
+
+00:01:49.480 --> 00:01:53.199
+like write some free software, even supposing you find no way
+
+00:01:53.200 --> 00:02:01.639
+to make any money from the free software world, but that's just the worst case.
+
+00:02:01.640 --> 00:02:08.079
+And for a lot of people, the life they find isn't the worst case.
+
+00:02:08.080 --> 00:02:13.559
+So I think it's basically, the question is an exaggeration.
+
+00:02:13.560 --> 00:02:16.399
+We don't need to worry about it.
+
+00:02:16.400 --> 00:02:22.479
+There are many businesses which do hire people to write free software.
+
+00:02:22.480 --> 00:02:26.079
+So write whatever free program for the business
+
+00:02:26.080 --> 00:02:28.079
+that the business wants you to write.
+
+00:02:28.080 --> 00:02:32.759
+And make sure you get permission to write your own software
+
+00:02:32.760 --> 00:02:34.639
+and release it as free software
+
+00:02:34.640 --> 00:02:38.239
+and contribute it to free software projects,
+
+00:02:38.240 --> 00:02:46.759
+and you'll be able to contribute.
+
+00:02:46.760 --> 00:02:48.439
+How can I help?
+
+00:02:48.440 --> 00:02:52.519
+In addition, one very big part of the software business
+
+00:02:52.520 --> 00:02:56.359
+is custom software development for a client.
+
+00:02:56.360 --> 00:02:59.919
+One client at a time, basically.
+
+00:02:59.920 --> 00:03:05.519
+And if that business is not treating its clients as suckers,
+
+00:03:05.520 --> 00:03:10.719
+it will release the code to them under a free software license.
+
+00:03:10.720 --> 00:03:14.039
+Okay, there you are. You're getting paid to write free software.
+
+00:03:14.040 --> 00:03:24.599
+Perfectly ethical.
+
+NOTE I have been admiring your work for free software for many years now. I am a bit concerned about what will happen to the GNU project when you retire (not soon, I hope!!). Have you planned how to manage the GNU project in the long run?
+
+00:03:24.600 --> 00:03:28.719
+I have been admiring your work for free software for many years now.
+
+00:03:28.720 --> 00:03:33.639
+I'm a bit concerned about what will happen to the GNU project when you retire.
+
+00:03:33.640 --> 00:03:37.359
+Have you planned how to manage the GNU project in the long run?
+
+00:03:37.360 --> 00:03:45.359
+I haven't found a way. I had an idea for what to do.
+
+00:03:45.360 --> 00:03:54.639
+I hoped to train some people who were activists and committed supporters
+
+00:03:54.640 --> 00:04:01.159
+to start making some decisions without me and I would give them feedback.
+
+00:04:01.160 --> 00:04:10.199
+But I didn't succeed in getting them to discuss issues and propose decisions.
+
+00:04:10.200 --> 00:04:11.719
+Well, I guess I'll have to try again. Over.
+
+00:04:11.720 --> 00:04:28.679
+Just a second. I have to go and open the door.
+
+NOTE In response to your aversion to JavaScript support in Emacs: In the same way that to revolt against the nonfree spirit in software development one has to develop software, and that to fight nonfree compilers one has to write a free compiler - can you fairly consider rejection of JavaScript as a tool conducive to improving the state of free JavaScript? A server can send back any MIME type to execute on your machine, JS was just the most convenient.
+
+00:04:52.520 --> 00:04:55.479
+In response to your aversion to JavaScript support in Emacs
+
+00:04:55.480 --> 00:04:58.039
+in the same way that to revolt against
+
+00:04:58.040 --> 00:05:00.479
+the non-free spirit in software development,
+
+00:05:00.480 --> 00:05:04.439
+one has to develop software and that to fight non-free compilers,
+
+00:05:04.440 --> 00:05:05.999
+one has to write a free compiler.
+
+00:05:06.000 --> 00:05:11.199
+Can you fairly consider rejection of JavaScript as a tool conducive
+
+00:05:11.200 --> 00:05:14.159
+to improving the state of free JavaScript?
+
+00:05:14.160 --> 00:05:16.759
+There's a fundamental confusion here.
+
+00:05:16.760 --> 00:05:23.439
+The problem with JavaScript is not comparable to the problem of
+
+00:05:23.440 --> 00:05:31.519
+non-free C compilers or C++ compilers or Java compilers.
+
+00:05:31.520 --> 00:05:36.839
+This is a totally different kind of issue.
+
+00:05:36.840 --> 00:05:40.479
+We have free JavaScript support.
+
+00:05:40.480 --> 00:05:45.839
+Free browsers contain that.
+
+00:05:45.840 --> 00:05:48.519
+That's not the issue.
+
+00:05:48.520 --> 00:05:52.399
+The issue is what about the programs you're going to run?
+
+00:05:52.400 --> 00:05:58.359
+If you're talking about C, well, if you're going to run a C program,
+
+00:05:58.360 --> 00:06:02.799
+it's because at compile at first, it's because you got the source code.
+
+00:06:02.800 --> 00:06:09.039
+Probably it's free software or else it's a private project,
+
+00:06:09.040 --> 00:06:14.919
+internal project, and there's no particular danger in that.
+
+00:06:14.920 --> 00:06:18.399
+If JavaScript were just like that,
+
+00:06:18.400 --> 00:06:21.319
+there'd be no particular danger in JavaScript either.
+
+00:06:21.320 --> 00:06:26.959
+The problem is that hundreds of thousands of websites,
+
+00:06:26.960 --> 00:06:33.199
+or is it millions, are sending JavaScript programs to their visitors
+
+00:06:33.200 --> 00:06:35.919
+who don't even know what JavaScript is,
+
+00:06:35.920 --> 00:06:39.159
+who are not programmers, who have no idea what's going on.
+
+00:06:39.160 --> 00:06:43.439
+So these programs are usually non-free.
+
+00:06:43.440 --> 00:06:48.599
+They end up in the user's browser, they run, many of them are malware.
+
+00:06:48.600 --> 00:06:51.039
+So what's going to happen?
+
+00:06:51.040 --> 00:06:57.679
+Basically, JavaScript is a platform for websites to mistreat users.
+
+00:06:57.680 --> 00:06:59.679
+I know it can be used in other ways,
+
+00:06:59.680 --> 00:07:06.319
+but socially, the existence of those other ways makes little difference.
+
+00:07:06.320 --> 00:07:10.799
+The important thing about JavaScript is the danger that it creates.
+
+NOTE With all the recent additions and optimizations to Emacs Lisp (lexical scoping, native compilation etc.) would you deem Emacs Lisp suitable for general purpose programming outside Emacs (i.e. scripting, running web servers). If not, why?
+
+00:07:27.000 --> 00:07:32.279
+This question is about the idea of using Emacs Lisp
+
+00:07:32.280 --> 00:07:37.919
+for general purpose programming that has nothing to do with Emacs.
+
+00:07:37.920 --> 00:07:44.479
+Well, in theory, I guess, in principle, there's nothing wrong with that.
+
+00:07:44.480 --> 00:07:56.879
+But I think that would be a distraction, and I'd rather we didn't do it.
+
+00:07:56.880 --> 00:08:02.359
+Now, if we had a thousand great programmers ready to do that,
+
+00:08:02.360 --> 00:08:05.999
+and every other thing we could use, sure.
+
+00:08:06.000 --> 00:08:12.639
+But the fact is, we don't. And I'd really rather--
+
+00:08:12.640 --> 00:08:17.479
+There are many platforms that are fine to write programs on.
+
+00:08:17.480 --> 00:08:26.399
+So I'd rather we work on making Emacs better at editing
+
+00:08:26.400 --> 00:08:30.799
+and improving Emacs Lisp in the ways that help that goal,
+
+00:08:30.800 --> 00:08:38.999
+and leave developing general purpose programming platforms to other languages.
+
+NOTE Could you give a few examples of the medium-sized jobs necessary for WYSIWYG-editor support in Emacs?
+
+00:08:44.760 --> 00:08:51.559
+Could I give a list of the specific medium-sized jobs
+
+00:08:51.560 --> 00:08:54.959
+necessary for WYSIWYG editing?
+
+00:08:54.960 --> 00:08:58.999
+Well, I can't really. I don't have a list of one.
+
+00:08:59.000 --> 00:09:04.399
+And I'd really appreciate it if people started putting together such a list.
+
+00:09:04.400 --> 00:09:08.839
+But if you look at every feature that LibreOffice has
+
+00:09:08.840 --> 00:09:14.399
+that Emacs doesn't have, I think you will get a list.
+
+00:09:14.400 --> 00:09:17.679
+Now, maybe some of those are not that important.
+
+00:09:17.680 --> 00:09:23.759
+Maybe only a subset of them would make the list of really important ones.
+
+00:09:23.760 --> 00:09:27.439
+But I think that will give everybody a start.
+
+NOTE Should GNU (or someone else) define a safe-subset of HTML/CSS/JS to make web browsers simpler and safer (e.g. by preventing JS from contacting servers)?
+
+00:09:33.480 --> 00:09:39.159
+Should GNU or someone else define a safe subset of HTML, CSS, JS
+
+00:09:39.160 --> 00:09:41.559
+to make web browsers simpler and safer?
+
+00:09:41.560 --> 00:09:46.519
+You know, that would be an interesting thing to explore.
+
+00:09:46.520 --> 00:09:48.879
+But I don't know whether it can be done.
+
+00:09:48.880 --> 00:09:53.439
+The thing is, one of the dangerous things about JavaScript
+
+00:09:53.440 --> 00:09:55.959
+is browser profiling.
+
+00:09:55.960 --> 00:10:02.559
+Every machine runs a program at a slightly different speed.
+
+00:10:02.560 --> 00:10:09.399
+And the idea of browser profiling is that the website sends a JavaScript program
+
+00:10:09.400 --> 00:10:13.399
+to run on every visitor's browser.
+
+00:10:13.400 --> 00:10:19.999
+And it's actually a collection of benchmarks.
+
+00:10:20.000 --> 00:10:26.079
+And the collection of results is different for each user's computer.
+
+00:10:26.080 --> 00:10:30.919
+And so it enables the website to recognize each one when it comes back
+
+00:10:30.920 --> 00:10:34.799
+even if there's no cookie to help it.
+
+00:10:34.800 --> 00:10:42.719
+So, which features are sufficient to make possible browser profiling?
+
+00:10:42.720 --> 00:10:46.799
+There may be no particular unusual feature that's crucial.
+
+00:10:46.800 --> 00:10:48.639
+But arithmetic might be enough.
+
+NOTE How can we ensure the continuity of an understanding of the more arcane parts of the [Emacs] source code, and increase their evolvability, notably with regards to display, single-threading limitations, etc.?
+
+00:10:57.440 --> 00:11:00.679
+How can we ensure the continuity of an understanding
+
+00:11:00.680 --> 00:11:02.999
+of the more arcane parts of source code
+
+00:11:03.000 --> 00:11:08.279
+and increase their evolvability, notably with regard to display,
+
+00:11:08.280 --> 00:11:14.879
+single-threading limitations, etc.?
+
+00:11:14.880 --> 00:11:19.759
+Well, single-threading is a very specific thing.
+
+00:11:19.760 --> 00:11:26.559
+And the furthest that I've bothered to think about it is
+
+00:11:26.560 --> 00:11:33.799
+how can we enable easily multiple list program threads
+
+00:11:33.800 --> 00:11:35.199
+to be running in parallel.
+
+00:11:35.200 --> 00:11:39.759
+But if you're talking about multi-threading in display,
+
+00:11:39.760 --> 00:11:42.239
+I don't know if that even helps.
+
+00:11:42.240 --> 00:11:48.599
+Of course, my machine doesn't really enable me to run
+
+00:11:48.600 --> 00:11:57.719
+multiple threads in a single program, so it never mattered to me.
+
+00:11:57.720 --> 00:12:06.319
+Basically, now, development of a display code
+
+00:12:06.320 --> 00:12:12.239
+not in regard to threads, well, that's more feasible.
+
+00:12:12.240 --> 00:12:19.279
+But the thing is, generally, any new feature is likely to require
+
+00:12:19.280 --> 00:12:25.799
+changes in the buffer data structure to represent the use of the feature.
+
+00:12:25.800 --> 00:12:29.199
+And I think that's going to be the hard part.
+
+00:12:29.200 --> 00:12:33.479
+So, display won't be the hard part, and it won't be the first part.
+
+00:12:33.480 --> 00:12:37.599
+The first part is figuring out how you're going to represent a buffer
+
+00:12:37.600 --> 00:12:43.519
+with a certain display bell or whistle in it.
+
+00:12:43.520 --> 00:12:47.719
+And once you've worked that out and worked out how it's going to work well
+
+00:12:47.720 --> 00:12:51.359
+in editing, then I think you'll be able to figure out
+
+00:12:51.360 --> 00:12:55.119
+what display has to do to handle it.
+
+00:12:55.120 --> 00:13:01.079
+Of course, you have to decide that data structure,
+
+00:13:01.080 --> 00:13:05.199
+thinking about how display is going to handle it efficiently.
+
+00:13:05.200 --> 00:13:13.119
+If the data structure is bad, it won't be possible to display efficiently.
+
+00:13:13.120 --> 00:13:15.759
+So you need to think about that at that stage.
+
+00:13:15.760 --> 00:13:19.599
+But the actual work is working out the data structure
+
+00:13:19.600 --> 00:13:21.559
+and the editing to handle it.
+
+00:13:21.560 --> 00:13:31.639
+Do you recommend reaching out to schools for volunteers instead of universities
+
+00:13:31.640 --> 00:13:35.639
+because they're more prone to value the objectives of freedom?
+
+00:13:35.640 --> 00:13:38.519
+Well, reaching out for what?
+
+00:13:38.520 --> 00:13:43.719
+Reaching out to try to teach people about freedom?
+
+00:13:43.720 --> 00:13:47.479
+Or reaching out to find more developers?
+
+00:13:47.480 --> 00:13:50.479
+Maybe that person could respond.
+
+NOTE Are there any problems or disadvantages using the GNU AGPL for non-networked software like Emacs packages?
+
+00:13:50.480 --> 00:14:05.199
+Is there any problem or disadvantage in using the GNU AGPL
+
+00:14:05.200 --> 00:14:08.519
+for non-network software like Emacs packages?
+
+00:14:08.520 --> 00:14:10.239
+I don't see one.
+
+00:14:10.240 --> 00:14:17.359
+The reason why I didn't put the AGPL clause into the regular GNU GPL
+
+00:14:17.360 --> 00:14:22.319
+is it seemed a bit radical and I figured the community
+
+00:14:22.320 --> 00:14:27.079
+would be happier if that radical change didn't happen
+
+00:14:27.080 --> 00:14:31.839
+in the GNU general public license itself.
+
+00:14:31.840 --> 00:14:35.839
+I would like the person who asked the previous question
+
+00:14:35.840 --> 00:14:40.719
+to respond to what I said so I can get that answer
+
+00:14:40.720 --> 00:14:43.519
+and finish answering her question.
+
+00:14:43.520 --> 00:14:46.119
+Right.
+
+00:14:46.120 --> 00:14:50.279
+I will let you know if we end up hearing back from you--from per.
+
+NOTE Is there a list of Emacs issues which can be solved by programmers with different levels? For example my level is A, I know basic elisp and C. How can I help?
+
+00:14:50.280 --> 00:15:03.439
+Is there a list of Emacs issues which can be solved by programmers
+
+00:15:03.440 --> 00:15:05.079
+with different levels?
+
+00:15:05.080 --> 00:15:07.319
+I don't know of one.
+
+00:15:07.320 --> 00:15:14.159
+I tend to think that people who know basic programs
+
+00:15:14.160 --> 00:15:20.359
+the basic level of list programming can't contribute yet.
+
+00:15:20.360 --> 00:15:25.919
+They might be able to start debugging problems.
+
+00:15:25.920 --> 00:15:30.359
+It won't be easy but that might be a good first thing to do.
+
+00:15:30.360 --> 00:15:36.359
+Look at bugs that are waiting and see if you can debug one of them
+
+00:15:36.360 --> 00:15:39.519
+and then when you find out what's actually going wrong
+
+00:15:39.520 --> 00:15:44.159
+you can send that to the developers and it will very likely
+
+00:15:44.160 --> 00:15:46.679
+enable them to fix the problem quickly.
+
+00:15:46.680 --> 00:15:52.279
+In the process you'll learn a lot about programs
+
+00:15:52.280 --> 00:15:54.039
+and how programs are actually written
+
+00:15:54.040 --> 00:15:56.959
+and how to understand the code you actually come across.
+
+00:15:56.960 --> 00:16:02.439
+With features like Org mode and enriched mode,
+
+00:16:02.440 --> 00:16:06.759
+it seems that Emacs is getting closer to the goal of WYSIWYG.
+
+00:16:06.760 --> 00:16:10.799
+Well it's got somewhat closer but it has a very long way to go.
+
+00:16:10.800 --> 00:16:15.119
+If you compare it with something like LibreOffice
+
+00:16:15.120 --> 00:16:17.039
+you'll see how long away there is to go.
+
+00:16:17.040 --> 00:16:31.399
+There was an effort called GuileEmacs a while back
+
+00:16:31.400 --> 00:16:36.839
+which was some effort to get Guile to be able to compile and run Emacs Lisp.
+
+NOTE What roadblocks kept some of the other efforts from being used with Emacs?
+
+00:16:36.840 --> 00:16:40.959
+[Amin]: You mentioned there were still some challenges relating to Guile.
+
+00:16:40.960 --> 00:16:45.879
+What roadblocks kept some of the other efforts from being used with Emacs?
+
+00:16:45.880 --> 00:16:50.275
+[Richard]: Well we never finished solving the problem
+
+00:16:50.276 --> 00:16:55.239
+of reconciling Guile data types with Emacs Lisp data types.
+
+00:16:55.240 --> 00:17:02.439
+We got an idea for how to deal with the fact that
+
+00:17:02.440 --> 00:17:08.599
+Scheme handling of nil is different from Lisp handling of nil.
+
+00:17:08.600 --> 00:17:14.679
+The idea was that maybe this would get us close enough it could actually work.
+
+00:17:14.680 --> 00:17:19.359
+But I don't think anyone fully implemented it and made it actually work.
+
+NOTE What do you use emacs for beyond editing?
+
+00:17:36.240 --> 00:17:39.759
+What do you use Emacs for beyond editing?
+
+00:17:39.760 --> 00:17:42.679
+Well I use it for reading and writing email.
+
+00:17:42.680 --> 00:17:44.759
+That's what I mainly do.
+
+00:17:44.760 --> 00:17:47.839
+That's what I do most of the day.
+
+00:17:47.840 --> 00:17:52.559
+I could... I mean should I sing my song?
+
+00:17:52.560 --> 00:17:55.119
+Sure.
+
+NOTE Song about e-mail
+
+00:17:55.120 --> 00:18:02.639
+I've been answering my email all the goddamn day.
+
+00:18:02.640 --> 00:18:10.879
+I've been answering my email 'cause my work gets done that way.
+
+00:18:10.880 --> 00:18:14.879
+Can't you feel the fingers aching?
+
+00:18:14.880 --> 00:18:18.479
+Type until early in the morn.
+
+00:18:18.480 --> 00:18:22.319
+Can't you see the letters blurring?
+
+00:18:22.320 --> 00:18:25.799
+It's just an ad for porn.
+
+00:18:25.800 --> 00:18:30.519
+You can see how out of date that song is 'cause we don't
+
+00:18:30.520 --> 00:18:32.039
+get ads for porn much anymore.
+
+00:18:32.400 --> 00:18:37.279
+[Amin]: Thanks for the performance.
+
+NOTE Emacs is used by a small population relative to the population that could benefit from it. Do you have any thoughts on how to expand the user base more broadly even among software developers?
+
+00:18:49.556 --> 00:18:52.919
+[Richard]: Emacs is used by a small population relative to
+
+00:18:52.920 --> 00:18:54.639
+the population that could benefit from it.
+
+00:18:54.640 --> 00:18:59.519
+Do you have any thoughts on how to expand the user base more broadly,
+
+00:18:59.520 --> 00:19:02.159
+even among software developers?
+
+00:19:02.160 --> 00:19:11.679
+No. Basically, the fact is that on that aspect of things,
+
+00:19:11.680 --> 00:19:20.759
+VS Code has an advantage and the advantage comes from Microsoft.
+
+00:19:20.760 --> 00:19:28.159
+It's pushing that together as part of a large collection
+
+00:19:28.160 --> 00:19:32.839
+of evil proprietary software that subjugates its users.
+
+00:19:32.840 --> 00:19:36.119
+But those users don't understand that issue.
+
+00:19:36.120 --> 00:19:40.639
+So, I mean, I sure wish I could come up with an idea
+
+00:19:40.640 --> 00:19:44.279
+for how to spread awareness of free software
+
+00:19:44.280 --> 00:19:46.599
+and the injustice of non-free software.
+
+00:19:46.600 --> 00:19:52.879
+The best one that I know of is to show them the TEDx talk that you saw.
+
+00:19:52.880 --> 00:19:57.239
+If you show that to people, they'll get at least a basic idea
+
+00:19:57.240 --> 00:19:59.039
+of what's at stake here and why.
+
+NOTE Would a namespace system similar to Common Lisp packages but without :USE work in Emacs? Modern CL implementations have package local nicknames to create package local prefixes.
+
+00:20:05.760 --> 00:20:10.719
+Would a namespace system similar to Common Lisp packages but without :USE
+
+00:20:10.720 --> 00:20:12.199
+work in Emacs?
+
+00:20:12.200 --> 00:20:14.319
+I suppose it would.
+
+00:20:14.320 --> 00:20:18.399
+I mean, basically, the thing that's really broken about
+
+00:20:18.400 --> 00:20:21.599
+Common Lisp packages is use.
+
+00:20:21.600 --> 00:20:29.999
+But it's not crucial, or at least it's not crucial to allow that to exist
+
+00:20:30.000 --> 00:20:32.119
+for arbitrary use.
+
+00:20:32.120 --> 00:20:37.079
+Maybe you want to have something saying where a package can specify
+
+00:20:37.080 --> 00:20:42.759
+whether to use the standard system functions and variables and so on.
+
+00:20:42.760 --> 00:20:49.679
+But there is a drawback to Common Lisp packages,
+
+00:20:49.680 --> 00:21:01.719
+which is that all of the aspects of any given symbol have to go together.
+
+00:21:01.720 --> 00:21:07.319
+So if compile-foo is a variable and it's also a function,
+
+00:21:07.320 --> 00:21:09.999
+and it's also a property name,
+
+00:21:10.000 --> 00:21:15.359
+then if your symbol foo is aliased to compile-foo,
+
+00:21:15.360 --> 00:21:21.839
+that means it's aliased as a function, aliased as a variable,
+
+00:21:21.840 --> 00:21:23.959
+and aliased as a property name.
+
+00:21:23.960 --> 00:21:30.319
+And aliased is anything else that you're going to point to from list structure.
+
+00:21:30.320 --> 00:21:35.799
+So it's not going to work really smoothly.
+
+00:21:35.800 --> 00:21:42.239
+And I tend to think that we're better off with a naming convention.
+
+00:21:42.240 --> 00:21:50.599
+Since the use feature of Common Lisp packages causes trouble,
+
+00:21:50.600 --> 00:21:57.919
+well if you don't use that, why is it better to write compile-foo
+
+00:21:57.920 --> 00:22:03.479
+and have that be foo in the compile package than to write compile-foo?
+
+00:22:03.480 --> 00:22:09.959
+The packages are almost equivalent to name prefixes.
+
+00:22:09.960 --> 00:22:18.799
+And I think that there is an advantage of clarity to writing the name prefixes,
+
+00:22:18.800 --> 00:22:20.639
+even in the same file.
+
+00:22:20.640 --> 00:22:28.759
+That abbreviation, which is meant to just shorten the code and make it simpler,
+
+00:22:28.760 --> 00:22:32.319
+looks simpler, I believe doesn't actually help.
+
+00:22:32.320 --> 00:22:42.439
+And I say that based on many years of writing code that way.
+
+NOTE With Emacs 29 adding more (awesome) features into vanilla Emacs, how should we ensure vanilla Emacs does not get bloated with many similar features? (example: ido/icomplete, vc/magit)
+
+00:22:42.440 --> 00:22:48.719
+With Emacs 29 adding more awesome features into Vanilla Emacs,
+
+00:22:48.720 --> 00:22:52.919
+how should we ensure vanilla Emacs does not get bloated
+
+00:22:52.920 --> 00:22:54.879
+with many similar features?
+
+00:22:54.880 --> 00:23:03.799
+Example, ido/icomplete, vc/magit.
+
+00:23:03.800 --> 00:23:08.759
+Well, to some extent we can't. Users do things differently.
+
+00:23:08.760 --> 00:23:13.679
+I have never used Magit because I don't want to get used to using anything
+
+00:23:13.680 --> 00:23:18.839
+that's not, packages that are not actually part of Emacs.
+
+00:23:18.840 --> 00:23:25.199
+Now, a couple of years ago, the author of Maggot said he was starting to work
+
+00:23:25.200 --> 00:23:30.919
+on getting the copyright assignments to include Magit in Emacs.
+
+00:23:30.920 --> 00:23:36.159
+But I was unable to get any information on how this is progressing.
+
+00:23:36.160 --> 00:23:44.599
+So because I've never actually seen Magit and because Git is actually not
+
+00:23:44.600 --> 00:23:50.559
+the VC system that I use most, I don't know if I'd want to use Magit.
+
+00:23:50.560 --> 00:23:53.199
+I'd probably be happier using VC.
+
+00:23:53.200 --> 00:23:59.959
+I'm told that they have extremely different basic approaches to doing things.
+
+00:23:59.960 --> 00:24:03.319
+They're not just slight variants of each other.
+
+00:24:03.320 --> 00:24:07.039
+Now, having multiple slight variants, you know,
+
+00:24:07.040 --> 00:24:10.919
+things doing similar jobs in little different ways,
+
+00:24:10.920 --> 00:24:13.959
+that could be seen as redundant.
+
+00:24:13.960 --> 00:24:23.759
+But when packages have very different approaches, I think that's not redundant.
+
+00:24:23.760 --> 00:24:26.919
+Clarified version of earlier question.
+
+NOTE Do you recommend reaching out in [high] schools for volunteers instead of universities because they are more prone to value the objectives of freedom?
+
+00:24:26.920 --> 00:24:31.599
+Do you recommend reaching out in schools for volunteers for both advocacy
+
+00:24:31.600 --> 00:24:35.239
+and development instead of universities?
+
+00:24:35.240 --> 00:24:40.839
+I think that you'll find few people in high schools.
+
+00:24:40.840 --> 00:24:46.799
+I think the question when it says schools means high schools.
+
+00:24:46.800 --> 00:24:51.079
+I think you will find only very rarely someone in high school
+
+00:24:51.080 --> 00:24:57.279
+who is good enough at programming to start actually developing things.
+
+00:24:57.280 --> 00:25:00.239
+Once in a while, I guess.
+
+00:25:00.240 --> 00:25:07.039
+As an activist, I think somewhat more often.
+
+00:25:07.040 --> 00:25:09.919
+But the main thing is, do you know how to have a rapport
+
+00:25:09.920 --> 00:25:13.039
+with high school students?
+
+00:25:13.040 --> 00:25:16.359
+If you do, it would be a great thing to try.
+
+00:25:16.360 --> 00:25:26.519
+We have had some projects of teaching free software to people in public schools.
+
+00:25:26.520 --> 00:25:32.559
+And if you want to work on that, I suggest sending me an email
+
+00:25:32.560 --> 00:25:35.039
+and I'll put you in touch with someone who's done it.
+
+NOTE What was the thought process behind making Emacs Lisp dynamically scoped when you first created it? What advantages did it provide over the alternative?
+
+00:25:35.040 --> 00:25:44.719
+What was the thought process behind making Emacs Lisp dynamically scoped?
+
+00:25:44.720 --> 00:25:46.039
+It was easy.
+
+00:25:46.040 --> 00:25:53.159
+I knew perfectly well how to write a simple, small Lisp interpreter
+
+00:25:53.160 --> 00:25:55.039
+that was dynamically scoped.
+
+00:25:55.040 --> 00:26:03.919
+And small was absolutely necessary at the time because I was trying to make it
+
+00:26:03.920 --> 00:26:12.079
+able to run in a machine whose total address space was one megabyte.
+
+00:26:12.080 --> 00:26:16.639
+So the code had to be small.
+
+00:26:16.640 --> 00:26:25.239
+Why did I implement if and I believe not cond?
+
+00:26:25.240 --> 00:26:30.359
+Why did I implement or and not unless?
+
+00:26:30.360 --> 00:26:33.439
+Because you didn't need those others.
+
+00:26:33.440 --> 00:26:39.839
+You could write your Lisp code with a smaller Lisp interpreter
+
+00:26:39.840 --> 00:26:49.759
+if you didn't have those other convenient traditional standard parts of Lisp.
+
+00:26:49.760 --> 00:26:54.519
+So I stripped Emacs Lisp down to bare bones.
+
+00:26:54.520 --> 00:27:01.679
+Of course, nowadays that's not necessary anymore.
+
+00:27:01.680 --> 00:27:08.239
+Emacs used to be criticized as eight megabytes and constantly swapping.
+
+00:27:08.240 --> 00:27:10.799
+And someone pointed out to me ten years ago
+
+00:27:10.800 --> 00:27:13.079
+that if something's only eight megabytes,
+
+00:27:13.080 --> 00:27:14.879
+it's not going to swap at all anymore.
+
+NOTE It's hard to pick up Emacs if you do not speak English. Can something be done to address that?
+
+00:27:18.766 --> 00:27:21.759
+It's hard to pick up Emacs if you do not speak English.
+
+00:27:21.760 --> 00:27:24.679
+Can something be done to address that?
+
+00:27:24.680 --> 00:27:28.239
+Well, what do you actually suggest?
+
+00:27:28.240 --> 00:27:30.039
+Is it the documentation?
+
+00:27:30.040 --> 00:27:34.279
+Is it the names of commands?
+
+00:27:34.280 --> 00:27:39.319
+Is it the doc strings or is it the manual or both?
+
+00:27:39.320 --> 00:27:43.879
+Is it the messages that Emacs displays?
+
+00:27:43.880 --> 00:27:47.679
+I mean, each of these is a different issue technically.
+
+00:27:47.680 --> 00:27:51.759
+Now, the easiest thing to deal with would be the messages
+
+00:27:51.760 --> 00:27:53.679
+because in other GNU packages,
+
+00:27:53.680 --> 00:27:57.639
+we have a system for internationalizing messages.
+
+00:27:57.640 --> 00:28:01.079
+It's hard to adapt it directly to Emacs
+
+00:28:01.080 --> 00:28:06.199
+because it's designed for programs, tools, or applications
+
+00:28:06.200 --> 00:28:09.639
+that have a fixed set of messages to display.
+
+00:28:09.640 --> 00:28:12.239
+Emacs doesn't. You load in a different Lisp program,
+
+00:28:12.240 --> 00:28:14.359
+it's got a different set of messages.
+
+00:28:14.360 --> 00:28:17.119
+How exactly do you want to handle this?
+
+00:28:17.120 --> 00:28:18.439
+But it could be done.
+
+00:28:18.440 --> 00:28:20.879
+It's not a terribly hard problem.
+
+00:28:20.880 --> 00:28:25.559
+If you're interested, please work on it.
+
+00:28:25.560 --> 00:28:29.719
+What about the command names?
+
+00:28:29.720 --> 00:28:35.319
+Well, you could imagine coming up with an alternate set of command names
+
+00:28:35.320 --> 00:28:40.159
+and maybe a different character instead of M-x
+
+00:28:40.160 --> 00:28:46.839
+so that it would read only the translated command names
+
+00:28:46.840 --> 00:28:51.319
+and the ordinary Emacs command names wouldn't get in the way.
+
+00:28:51.320 --> 00:28:57.719
+M-x might still be there, but if you type this other thing, M-foobar,
+
+00:28:57.720 --> 00:29:05.799
+then it would only complete over the command names in the other language.
+
+00:29:05.800 --> 00:29:10.479
+This might be pretty simple to do technically,
+
+00:29:10.480 --> 00:29:16.559
+although working out the details might take a good deal of thought.
+
+00:29:16.560 --> 00:29:20.999
+And then docstrings?
+
+00:29:21.000 --> 00:29:25.799
+Well, you could just write another set of them
+
+00:29:25.800 --> 00:29:28.839
+and have other help commands to display them.
+
+NOTE Do you use Org or Org mode, and if so, to what extent?
+
+00:29:28.840 --> 00:29:36.159
+Do you use Org or Org mode, and if so, to what extent?
+
+00:29:36.160 --> 00:29:39.759
+I have never used them, and here's why.
+
+00:29:39.760 --> 00:29:48.359
+I think that the design process of Org mode went awry,
+
+00:29:48.360 --> 00:29:52.959
+not at the very beginning, but at the next stage.
+
+00:29:52.960 --> 00:29:56.759
+Originally, Org mode was an outlining mode.
+
+00:29:56.760 --> 00:29:58.559
+It's not something I wanted to use.
+
+00:29:58.560 --> 00:30:02.999
+I had nothing against including it, but I didn't ever try to use it.
+
+00:30:03.000 --> 00:30:08.719
+The documentation of it somehow wasn't easy for me to grasp,
+
+00:30:08.720 --> 00:30:11.719
+especially since I had no actual use for it,
+
+00:30:11.720 --> 00:30:16.079
+no reason to go through and remember all those things.
+
+00:30:16.080 --> 00:30:24.599
+Anyway, then people started developing other facilities to use the Org syntax,
+
+00:30:24.600 --> 00:30:27.599
+and they're totally unrelated to each other.
+
+00:30:27.600 --> 00:30:30.599
+They just happen to use the Org syntax,
+
+00:30:30.600 --> 00:30:34.719
+and some of them, occasionally, I thought it might be interesting to use this,
+
+00:30:34.720 --> 00:30:38.639
+but to use it, first I'd have to learn the Org syntax,
+
+00:30:38.640 --> 00:30:43.199
+and that was a task that had already proved discouraging.
+
+00:30:43.200 --> 00:30:46.759
+Now, the mistaken design, I think,
+
+00:30:46.760 --> 00:30:51.159
+was to integrate all those other facilities with Org mode.
+
+00:30:51.160 --> 00:30:54.239
+They should all have been separate, modularly separate,
+
+00:30:54.240 --> 00:30:59.439
+so that you could maybe use them with Org mode if you wanted to,
+
+00:30:59.440 --> 00:31:03.199
+but also use them separately from Org mode,
+
+00:31:03.200 --> 00:31:05.279
+and they'd be documented separately,
+
+00:31:05.280 --> 00:31:08.999
+and those I wanted to use, I would have learned to use.
+
+00:31:09.000 --> 00:31:10.999
+But that was hard to do.
+
+00:31:11.000 --> 00:31:16.639
+They had been welded together such that it was not easy to separate them.
+
+00:31:16.640 --> 00:31:20.439
+I really wish they'd get separated, but that's not an easy job.
+
+00:31:20.440 --> 00:31:23.759
+Each one needs to be remodularized.
+
+00:31:23.760 --> 00:31:31.759
+Anyway, there is something for which I think Org mode could become an advance.
+
+00:31:31.760 --> 00:31:39.759
+I'm not saying it isn't useful for people who like what it does,
+
+00:31:39.760 --> 00:31:46.399
+but it might play an important role if it were extended to do it,
+
+00:31:46.400 --> 00:31:53.639
+and that is we could use a replacement for Texinfo.
+
+00:31:53.640 --> 00:31:57.639
+Texinfo's syntax is arcane.
+
+00:31:57.640 --> 00:32:05.559
+It was based on what I could implement on top of TeX in 1984 or so.
+
+00:32:05.560 --> 00:32:15.519
+And, well, Org mode, Org syntax doesn't make all the distinctions,
+
+00:32:15.520 --> 00:32:20.599
+all the semantic markup distinctions that we can make in Texinfo.
+
+00:32:20.600 --> 00:32:25.839
+If it did, which would require extending it,
+
+00:32:25.840 --> 00:32:33.399
+then it might become a good format to write GNU manuals in.
+
+00:32:33.400 --> 00:32:37.639
+It could conceivably become a better format than we have now,
+
+00:32:37.640 --> 00:32:39.719
+and that would be a good thing.
+
+00:32:39.720 --> 00:32:43.599
+Not that many people know Texinfo syntax.
+
+00:32:43.600 --> 00:32:47.479
+It's not widely used except for GNU manuals.
+
+00:32:47.480 --> 00:32:52.439
+But probably more people know Org syntax,
+
+00:32:52.440 --> 00:32:57.239
+and if it were extended so that it did in a fairly natural way
+
+00:32:57.240 --> 00:33:02.319
+all the things that Texinfo does and maybe some additional ones,
+
+00:33:02.320 --> 00:33:05.279
+then it could be superior.
+
+00:33:05.280 --> 00:33:11.239
+And then we could gradually switch our manuals over to it.
+
+00:33:11.240 --> 00:33:14.119
+But we need to be able to generate all the output formats
+
+00:33:14.120 --> 00:33:15.359
+that we can generate now.
+
+00:33:15.360 --> 00:33:19.999
+That means HTML to put on websites.
+
+00:33:20.000 --> 00:33:27.159
+That means either info files or perhaps another form of the HTML output
+
+00:33:27.160 --> 00:33:30.079
+that would be good for an info browser,
+
+00:33:30.080 --> 00:33:34.079
+including the one inside Emacs and the one that's separate.
+
+00:33:34.080 --> 00:33:42.479
+And generating input to TeX so that it would generate pretty-looking manuals,
+
+00:33:42.480 --> 00:33:46.719
+which is one of the advantages of Texinfo.
+
+00:33:46.720 --> 00:33:48.719
+This is not a gigantic job.
+
+00:33:48.720 --> 00:33:54.479
+I'd say this is a medium-sized job, or maybe two or three medium-sized jobs.
+
+NOTE What do you have in mind for more modular Emacs development?
+
+00:33:54.480 --> 00:34:05.879
+What do you have in mind for more modular Emacs development?
+
+00:34:05.880 --> 00:34:13.479
+I think that that's...
+
+00:34:13.480 --> 00:34:17.679
+There's no specific feature that I have in mind to solve that.
+
+00:34:17.680 --> 00:34:21.719
+It's more of an approach to how you develop things.
+
+00:34:21.720 --> 00:34:28.719
+It's thinking about modularity when you write each package that you write,
+
+00:34:28.720 --> 00:34:34.119
+because you will find situations where it has to interact
+
+00:34:34.120 --> 00:34:37.439
+in various ways with other packages.
+
+00:34:37.440 --> 00:34:40.879
+And sometimes you'll find the other packages have hooks
+
+00:34:40.880 --> 00:34:42.719
+that will enable you to do it.
+
+00:34:42.720 --> 00:34:45.239
+And sometimes you'll find that
+
+00:34:45.240 --> 00:34:47.679
+the hook you'd really need for this is missing.
+
+00:34:47.680 --> 00:34:52.519
+In that case, the best thing to do might be to add
+
+00:34:52.520 --> 00:34:58.479
+a suitable, fairly general hook that can be used for your job
+
+00:34:58.480 --> 00:35:00.879
+to the other existing package,
+
+00:35:00.880 --> 00:35:08.399
+so that instead of a rigid connection to other parts of Emacs,
+
+00:35:08.400 --> 00:35:09.599
+which is somewhat unmodular,
+
+00:35:09.600 --> 00:35:12.999
+you could use a general-purpose hook,
+
+00:35:13.000 --> 00:35:17.039
+which you designed because it could do a lot of things,
+
+00:35:17.040 --> 00:35:19.039
+including the thing you need to do.
+
+NOTE Reframing the school question
+
+00:35:19.040 --> 00:35:32.039
+It might be interesting to reframe the school question.
+
+00:35:32.040 --> 00:35:34.399
+I think it is related to the first part,
+
+00:35:34.400 --> 00:35:36.959
+how to bring Libre software into schools.
+
+00:35:36.960 --> 00:35:42.159
+For example, my entry point was LaTeX in school.
+
+00:35:42.160 --> 00:35:44.439
+Well, it's okay.
+
+00:35:44.440 --> 00:35:50.599
+I don't see anything wrong with that, by all means, if it works.
+
+00:35:50.600 --> 00:36:00.479
+Now, my naive, perhaps, guess is that it wouldn't arouse much interest,
+
+00:36:00.480 --> 00:36:05.879
+because I suspect most people would rather use a WYSIWYG text editor
+
+00:36:05.880 --> 00:36:13.959
+than a text formatter like LaTeX, any text formatter.
+
+00:36:13.960 --> 00:36:18.639
+But if your experience is otherwise, go ahead.
+
+NOTE In light of that critique of JavaScript not being about the language per se but rather the "culture of blindly getting and running packages/libraries", what's so different with what's currently done by the vast majority of Emacs/Elisp users to just install packages blindly?
+
+00:36:18.640 --> 00:36:28.799
+In the light of that critique of JavaScript not being about language per se,
+
+00:36:28.800 --> 00:36:33.759
+but rather the culture of blindly getting and running packages, libraries.
+
+00:36:33.760 --> 00:36:36.119
+What's so different with what's currently done by the vast
+
+00:36:36.120 --> 00:36:42.199
+majority of EmacsLib users to just install packages blindly?
+
+00:36:42.200 --> 00:36:44.199
+Well, they know they're installing a package,
+
+00:36:44.200 --> 00:36:46.799
+and that makes all the difference.
+
+00:36:46.800 --> 00:36:50.879
+And people can post various versions of a package,
+
+00:36:50.880 --> 00:36:53.679
+and then people can compare them and say,
+
+00:36:53.680 --> 00:36:59.279
+"Hey, I looked at that version there, and it has a horrible bug."
+
+00:36:59.280 --> 00:37:03.959
+And so the community can do something about that.
+
+00:37:03.960 --> 00:37:09.519
+With JavaScript sent by websites, there is no way to do anything like that.
+
+00:37:09.520 --> 00:37:13.039
+And in addition, most of those programs are not free.
+
+00:37:13.040 --> 00:37:16.559
+How would you know? If you're not running LibreJS,
+
+00:37:16.560 --> 00:37:20.799
+you don't know what JavaScript programs are being installed
+
+00:37:20.800 --> 00:37:25.319
+into your browser at any given moment, or whether they're free.
+
+00:37:25.320 --> 00:37:31.119
+You know, very likely you'll just get a bunch of obfuscript,
+
+00:37:31.120 --> 00:37:35.559
+and you won't know what the source code is, or whether you could even find it.
+
+00:37:35.560 --> 00:37:41.399
+These things don't happen with EmacsList packages.
+
+00:37:41.400 --> 00:37:48.799
+At least not when they're in reputable package archives.
+
+NOTE Do you still intend to merge your patch to the "shorthands" feature to the master branch?
+
+00:37:48.800 --> 00:37:55.839
+Do you still intend to merge your patch to the shorthands feature
+
+00:37:55.840 --> 00:37:57.519
+to the master branch?
+
+00:37:57.520 --> 00:38:05.159
+Yes, but I've seen that something needs to be done with the docstrings,
+
+00:38:05.160 --> 00:38:17.679
+because s.el mentions in its docstrings the function names used in s.el,
+
+00:38:17.680 --> 00:38:27.199
+and the magnars string library that works just by renaming those symbols
+
+00:38:27.200 --> 00:38:31.119
+really would want to alter the docstrings too.
+
+00:38:31.120 --> 00:38:34.719
+And now there are multiple ways of doing that.
+
+00:38:34.720 --> 00:38:39.519
+One of them maybe is to edit the s.el source file
+
+00:38:39.520 --> 00:38:42.559
+so it'll do the right thing in either case.
+
+00:38:42.560 --> 00:38:48.879
+That would need a new docstring construct.
+
+00:38:48.880 --> 00:38:52.159
+Well, we've added many docstring constructs.
+
+00:38:52.160 --> 00:38:54.879
+We could add one more. It's not that hard a thing.
+
+NOTE Do you think the freedom e.g., we have in Emacs, becomes a hurdle for some people to pursue more important things in the world? I used to do a lot of Emacs programming, but I recently try to stay away from tinkering on Emacs.
+
+00:38:54.880 --> 00:39:05.799
+Do you think the freedom, e.g., we have in Emacs becomes a hurdle
+
+00:39:05.800 --> 00:39:09.319
+for some people to pursue more important things in the world?
+
+00:39:09.320 --> 00:39:12.359
+Is there something more important in the world?
+
+00:39:12.360 --> 00:39:17.399
+I used to do a lot of Emacs programming, but recently I decided to stay away
+
+00:39:17.400 --> 00:39:22.199
+from tink-linking, from tinking Emacs.
+
+00:39:22.200 --> 00:39:27.159
+I'm not sure what-- tinking is a strange word to me, tinkering with maybe.
+
+00:39:27.160 --> 00:39:33.559
+Well, there may be more important things for you to do than extend Emacs.
+
+00:39:33.560 --> 00:39:39.239
+On the other hand, when you look at all the distractions that the world offers
+
+00:39:39.240 --> 00:39:42.439
+that distract a lot more people than this,
+
+00:39:42.440 --> 00:39:47.799
+it really seems unfair to criticize Emacs because it's something
+
+00:39:47.800 --> 00:39:50.959
+you could put a lot of time into tinkering with.
+
+00:39:50.960 --> 00:39:54.599
+Look how much time people put into playing video games,
+
+00:39:54.600 --> 00:39:58.199
+which achieves nothing except distracting them.
+
+00:39:58.200 --> 00:40:04.599
+And if you distract yourself by playing with Emacs Lisp code,
+
+00:40:04.600 --> 00:40:07.399
+that's surely better.
+
+00:40:07.400 --> 00:40:10.919
+It has a chance of resulting in something
+
+00:40:10.920 --> 00:40:17.919
+actually useful and a chance that you'd learn something
+
+00:40:17.920 --> 00:40:27.919
+that's more important as learning than how to win a certain video game.
+
+NOTE Question about software freedom: how does it apply to software that are art/media experiences, like videogames? In your view, Is the creator of a videogame obliged to release it under a free license?
+
+00:40:27.920 --> 00:40:29.919
+Questions about software freedom.
+
+00:40:29.920 --> 00:40:34.719
+How does it apply to software that are art/media experiences
+
+00:40:34.720 --> 00:40:36.919
+like video games in your view?
+
+00:40:36.920 --> 00:40:42.719
+Well, I'd say that a video game typically is a collection of things,
+
+00:40:42.720 --> 00:40:49.319
+some of which are programs and some of which are art.
+
+00:40:49.320 --> 00:40:54.719
+And so once you analyze the game in that way,
+
+00:40:54.720 --> 00:40:59.479
+if you agree with my ideas about what the moral rules are
+
+00:40:59.480 --> 00:41:04.319
+for each of those categories, you can apply them separately
+
+00:41:04.320 --> 00:41:06.759
+to each thing in the collection.
+
+00:41:06.760 --> 00:41:12.279
+Programs are operational. They do things for you.
+
+00:41:12.280 --> 00:41:15.879
+And anything that does things for you should be free.
+
+00:41:15.880 --> 00:41:20.999
+The art that is simply displayed is not of that kind,
+
+00:41:21.000 --> 00:41:26.239
+so it doesn't, in my view, have to be free.
+
+00:41:26.240 --> 00:41:29.359
+It does have to be shareable.
+
+00:41:29.360 --> 00:41:36.199
+You have to be free to non-commercially redistribute an exact copy.
+
+00:41:36.200 --> 00:41:40.039
+When I talk about sharing, that's what it means, precisely that.
+
+00:41:40.040 --> 00:41:45.319
+Non-commercially redistribute exact copies to others when you wish.
+
+00:41:45.320 --> 00:41:58.359
+How would technologies like WebAssembly fit with the JavaScript issues?
+
+00:41:58.360 --> 00:42:00.519
+They don't change anything much.
+
+00:42:00.520 --> 00:42:06.079
+Basically, if the program is JavaScript source code
+
+00:42:06.080 --> 00:42:09.999
+that you could actually read, well, then if it had a free license on it,
+
+00:42:10.000 --> 00:42:11.279
+it would be free software.
+
+00:42:11.280 --> 00:42:16.319
+And if the free license is indicated in the standardized format
+
+00:42:16.320 --> 00:42:24.959
+that LibreJS understands, it would actually recognize it as free software.
+
+00:42:24.960 --> 00:42:30.759
+If it's obfuscated, then it's not the source code.
+
+00:42:30.760 --> 00:42:35.599
+And if it's WebAssembly, then it's not the source code.
+
+00:42:35.600 --> 00:42:41.999
+So those are both compiled versions of source code that isn't in the page.
+
+00:42:42.000 --> 00:42:45.759
+So they make things somewhat nastier,
+
+00:42:45.760 --> 00:42:51.159
+in the sense that you couldn't have much chance of reading it
+
+00:42:51.160 --> 00:42:52.999
+and seeing what it does.
+
+00:42:53.000 --> 00:42:55.479
+But either way, it's not free,
+
+00:42:55.480 --> 00:43:00.599
+even if it's source code with no free license, it's still not free.
+
+00:43:00.600 --> 00:43:03.639
+If it's a compiled version rather than source,
+
+00:43:03.640 --> 00:43:07.359
+that's a little further away from being free.
+
+00:43:07.360 --> 00:43:11.599
+But further away from being free doesn't make it worse.
+
+00:43:11.600 --> 00:43:13.599
+It's equally bad.
+
+00:43:13.600 --> 00:43:18.559
+If it gets further away from being free,
+
+00:43:18.560 --> 00:43:23.439
+that means the work that you might have to do to free it is more,
+
+00:43:23.440 --> 00:43:26.239
+but it's not worse.
+
+00:43:26.240 --> 00:43:28.839
+Non-free is bad.
+
+NOTE Have you seen Haketilo? It seems similar to LibreJS.
+
+00:43:35.915 --> 00:43:38.959
+Have you seen Haketilo?
+
+00:43:38.960 --> 00:43:41.679
+It seems similar to LibreJS.
+
+00:43:41.680 --> 00:43:44.519
+Haketilo is meant to enable people
+
+00:43:44.520 --> 00:43:49.199
+to get some of the benefits of the free software community
+
+00:43:49.200 --> 00:43:54.439
+with free replacement JavaScript programs for websites.
+
+00:43:54.440 --> 00:44:00.879
+So potentially it offers a real solution to the JavaScript problem.
+
+00:44:00.880 --> 00:44:05.039
+It has a long way to go from what I hear.
+
+00:44:05.040 --> 00:44:07.999
+If you want to work on it, please do.
+
+00:44:08.000 --> 00:44:14.159
+Of course, writing free replacement JavaScript
+
+00:44:14.160 --> 00:44:16.919
+for a million websites is an enormous job,
+
+00:44:16.920 --> 00:44:19.319
+but maybe we could do it for some sites.
+
+00:44:19.320 --> 00:44:24.319
+It depends how many people get enthusiastic about doing it
+
+00:44:24.320 --> 00:44:25.959
+and how many sites cooperate.
+
+00:44:25.960 --> 00:44:32.719
+Is writing free software replacement to GitHub Copilot
+
+00:44:32.720 --> 00:44:36.759
+with proper license attribution a good idea?
+
+00:44:36.760 --> 00:44:44.959
+Maybe, but remember that Copilot is not a program. Copilot is a service.
+
+00:44:44.960 --> 00:44:50.119
+It is something that somebody else's computer will do for you.
+
+00:44:50.120 --> 00:44:55.439
+It's a computation that someone else's server will do for you when you ask.
+
+00:44:55.440 --> 00:45:06.239
+And so what are the practical problems of doing that? I'm not sure.
+
+00:45:06.240 --> 00:45:13.479
+The point is, of course, the server runs by running a program.
+
+00:45:13.480 --> 00:45:17.439
+The service operates by running programs.
+
+00:45:17.440 --> 00:45:21.119
+But still, a service is a very different kind of thing from a program.
+
+00:45:21.120 --> 00:45:28.999
+People who use Copilot don't get any sort of copy of Copilot.
+
+00:45:29.000 --> 00:45:33.319
+All they do is send something they're working on to that server
+
+00:45:33.320 --> 00:45:34.999
+and they get something back.
+
+00:45:35.000 --> 00:45:45.567
+So it might be a good idea.
+
+NOTE
+Do you have any suggestions for helping propective contributers streamline
+the copyright assignment needed to contribute to Emacs (and other FSF software
+projects)?
+
+00:45:45.568 --> 00:45:48.359
+Do you have any suggestions for helping prospective contributors
+
+00:45:48.360 --> 00:45:53.359
+streamline the copyright assignment needed to contribute to Emacs?
+
+00:45:53.360 --> 00:45:57.279
+I don't think that's needed.
+
+00:45:57.280 --> 00:46:04.359
+Basically, the copyright assignment itself is pretty easy
+
+00:46:04.360 --> 00:46:06.599
+and doesn't take very long.
+
+00:46:06.600 --> 00:46:09.919
+What is sometimes harder is the copyright disclaimer,
+
+00:46:09.920 --> 00:46:14.959
+the employer disclaimer, where your employer,
+
+00:46:14.960 --> 00:46:20.399
+if you're employed to program, or if your job includes programming
+
+00:46:20.400 --> 00:46:24.399
+or could include programming, we want to be sure that your employer
+
+00:46:24.400 --> 00:46:30.559
+is not going to say that you had no right to contribute that to any program
+
+00:46:30.560 --> 00:46:37.799
+because it belonged to the employer all along and you broke the rules
+
+00:46:37.800 --> 00:46:42.319
+and the project you contributed to is shafted.
+
+00:46:42.320 --> 00:46:50.679
+Well, we are working on some simplifications to that text
+
+00:46:50.680 --> 00:46:55.119
+in the hope of making it easier to get companies to say yes to it.
+
+00:46:55.120 --> 00:46:59.039
+But fundamentally, they've got to say yes to it.
+
+00:46:59.040 --> 00:47:06.279
+We need them to say yes to it.
+
+00:47:06.280 --> 00:47:08.719
+We can't make them say yes to it.
+
+00:47:08.720 --> 00:47:09.799
+We can only ask.
+
+NOTE Can complexity induced by company-funded free/libre code become a problem, when the company pulls out, leaving the code potentially unmaintainable?
+
+00:47:09.800 --> 00:47:13.759
+Can complexity induced by company funded...
+
+00:47:13.760 --> 00:47:17.119
+Sorry, it talks about open code.
+
+00:47:17.120 --> 00:47:21.359
+I don't know what that means.
+
+00:47:21.360 --> 00:47:23.759
+Is this talking about free software?
+
+00:47:23.760 --> 00:47:27.759
+[Amin]: I think it would be safe to assume that they are indeed
+
+00:47:27.760 --> 00:47:28.959
+talking about free software.
+
+00:47:28.960 --> 00:47:34.119
+[Richard]: Okay, because I don't use the term open to classify programs.
+
+00:47:34.120 --> 00:47:39.359
+I'm not a supporter of open source and I never was.
+
+00:47:39.360 --> 00:47:42.519
+And the reason is very important.
+
+00:47:42.520 --> 00:47:50.199
+I touched on this briefly in the TEDx video.
+
+00:47:50.200 --> 00:47:58.639
+But basically, the idea of the free software movement is that users deserve
+
+00:47:58.640 --> 00:48:04.559
+the freedom to study, change and redistribute the code that they use.
+
+00:48:04.560 --> 00:48:09.879
+And it is an injustice to deny that to users.
+
+00:48:09.880 --> 00:48:13.719
+And therefore, software must be free.
+
+00:48:13.720 --> 00:48:16.159
+It's wrong if it's not free.
+
+00:48:16.160 --> 00:48:22.879
+Well, the people who created the idea of open source about 14 years later,
+
+00:48:22.880 --> 00:48:27.719
+they wanted to avoid bringing up that question.
+
+00:48:27.720 --> 00:48:31.999
+And they more or less succeeded when people talk about open source.
+
+00:48:32.000 --> 00:48:38.959
+Occasionally, that question has seeped in from the free software community.
+
+00:48:38.960 --> 00:48:41.599
+But most of the time, it never occurs to them.
+
+00:48:41.600 --> 00:48:47.519
+They simply take for granted that it's legitimate for a program not to be open.
+
+00:48:47.520 --> 00:48:52.759
+Well, that's missing the point that I consider most important.
+
+00:48:52.760 --> 00:48:57.679
+So whenever I talk about this area, I talk about it in
+
+00:48:57.680 --> 00:49:04.039
+terms of free, libre, freedom-respecting software.
+
+00:49:04.040 --> 00:49:09.839
+So, can complexity-induced by company-funded free code
+
+00:49:09.840 --> 00:49:12.399
+become a problem when the company pulls out,
+
+00:49:12.400 --> 00:49:16.239
+leaving the code potentially unmaintainable?
+
+00:49:16.240 --> 00:49:21.999
+Well, I'd say over-complicated free programs
+
+00:49:22.000 --> 00:49:24.879
+which don't have community contributors
+
+00:49:24.880 --> 00:49:27.359
+can fall into that problem.
+
+00:49:27.360 --> 00:49:31.279
+It's not limited to programs developed by companies, I think.
+
+NOTE What do you think of Hyperbole or EEV instead of org mode, or other things for the stuff that org mode does "second brain / knowledge base", or GTD 'getting things done' etc... among other things in Emacs or other Emacs packages
+
+00:49:31.280 --> 00:49:42.239
+What do you think of Hyperbole or EEV instead of Org mode?
+
+00:49:42.240 --> 00:49:46.759
+Well, I don't actually know that much about either of them.
+
+00:49:46.760 --> 00:49:49.439
+I don't know what EEV is.
+
+00:49:49.440 --> 00:49:54.257
+I've heard of Hyperbole, but it was many years ago that I looked at it,
+
+00:49:54.258 --> 00:49:56.399
+and I don't remember what I saw.
+
+00:49:56.400 --> 00:50:03.199
+So, I'm sorry I can't have an educated opinion about those specific things.
+
+00:50:03.200 --> 00:50:07.319
+It would be interesting for somebody to study that.
+
+00:50:07.320 --> 00:50:10.319
+Now, there'd be a lot to study.
+
+00:50:10.320 --> 00:50:14.999
+After all, Org mode consists of an outlining mode together
+
+00:50:15.000 --> 00:50:20.119
+with lots of other specific features that have been welded onto it.
+
+00:50:20.120 --> 00:50:26.479
+And if they were separated, made modular, separate parts of Emacs,
+
+00:50:26.480 --> 00:50:31.599
+it would be a lot easier to adapt some of them to work with hyperbole
+
+00:50:31.600 --> 00:50:32.799
+if we wanted to.
+
+00:50:32.800 --> 00:50:34.879
+Of course, do we want to?
+
+00:50:34.880 --> 00:50:36.359
+That's another question.
+
+00:50:36.360 --> 00:50:38.519
+What is EEV?
+
+00:50:38.520 --> 00:50:46.279
+I think it's similar in many ways to hyperbole.
+
+00:50:46.280 --> 00:50:50.039
+I haven't used either of them too much myself, but yeah,
+
+00:50:50.040 --> 00:50:51.759
+they are fairly similar as far as I know.
+
+00:50:51.760 --> 00:50:55.759
+If they're fairly similar, I guess that brings up the question,
+
+00:50:55.760 --> 00:50:58.319
+is either of them actually part of Emacs?
+
+00:50:58.320 --> 00:51:04.639
+I think hyperbole is a GNU package.
+
+00:51:04.640 --> 00:51:07.719
+I'm not sure if it's part of Emacs or GNU ELPA.
+
+00:51:07.720 --> 00:51:10.879
+It might be, but EEV is not as of yet.
+
+00:51:10.880 --> 00:51:12.159
+But both are free software.
+
+00:51:12.160 --> 00:51:19.159
+Well, it might be that it doesn't make sense to include them both in any sense.
+
+00:51:19.160 --> 00:51:21.159
+People can write them and distribute them,
+
+00:51:21.160 --> 00:51:23.679
+but that doesn't mean we need to pick them up.
+
+00:51:23.680 --> 00:51:28.359
+We might want to compare them and see which one is better
+
+00:51:28.360 --> 00:51:32.799
+and then look at whether it could be improved further
+
+00:51:32.800 --> 00:51:35.319
+by bringing in features from the other.
+
+00:51:35.320 --> 00:51:40.199
+This is what you do if those two things exist
+
+00:51:40.200 --> 00:51:42.519
+and you want to make the best possible thing
+
+00:51:42.520 --> 00:51:44.999
+to add, for instance, to Emacs.
+
+00:51:45.000 --> 00:51:56.319
+But since I don't know any specifics anymore, and with EEV I never did,
+
+00:51:56.320 --> 00:52:01.639
+I don't want to state any sort of a priori preference.
+
+00:52:01.640 --> 00:52:06.250
+I don't have one.
+
+NOTE Are there plans to bring modal editing (eg. evil-mode, viper) to Emacs core and did your opinion on modal editing change over the years?
+
+00:52:06.251 --> 00:52:10.959
+Are there plans to bring modal editing to Emacs core?
+
+00:52:10.960 --> 00:52:11.759
+What does that mean?
+
+00:52:11.760 --> 00:52:19.399
+[Amin]: I think they're speaking about projects or editing modes such as VI,
+
+00:52:19.400 --> 00:52:23.639
+where by default whatever you type is not getting inserted,
+
+00:52:23.640 --> 00:52:28.319
+but you can navigate between different modes
+
+00:52:28.320 --> 00:52:30.199
+and one of them being text insertion.
+
+00:52:30.200 --> 00:52:35.759
+[Richard]: Well, I don't have a wish for that.
+
+00:52:35.760 --> 00:52:38.399
+Now, I mean, it's not somehow morally anathema.
+
+00:52:38.400 --> 00:52:49.279
+I mean, it's not as if it were a non-free program.
+
+00:52:49.280 --> 00:52:58.439
+But it wouldn't be easy to design that in such a way that
+
+00:52:58.440 --> 00:53:02.999
+it fit into the framework of existing Emacs without doing any violence to it.
+
+NOTE What is your opinion on the current state of large machine
+learning/AI models?
+
+00:53:03.000 --> 00:53:16.719
+What is your opinion of the current state of large machine learning models?
+
+00:53:16.720 --> 00:53:20.919
+Even if the model is released under a free license,
+
+00:53:20.920 --> 00:53:25.399
+it cannot be modified in a meaningful way?
+
+00:53:25.400 --> 00:53:29.039
+I don't think that's true.
+
+00:53:29.040 --> 00:53:33.279
+A person who was in the field of machine learning
+
+00:53:33.280 --> 00:53:35.839
+told me that you can modify it.
+
+00:53:35.840 --> 00:53:38.999
+You can modify it by starting with what you've got
+
+00:53:39.000 --> 00:53:40.839
+and doing some further training,
+
+00:53:40.840 --> 00:53:47.159
+and you don't need, I'm told, the previously used training data to train it,
+
+00:53:47.160 --> 00:53:49.439
+to modify it.
+
+00:53:49.440 --> 00:53:53.399
+Based on that, I concluded that the trained neural network
+
+00:53:53.400 --> 00:53:56.879
+can be treated as source code.
+
+00:53:56.880 --> 00:54:01.079
+And after all, it's not made from any other kind of source code.
+
+00:54:01.080 --> 00:54:04.839
+So, in some sense, what else could the source code be?
+
+NOTE I thought it was a virtue to separate the content from the style or
+appearance of information. Part of being free is also to view information in the
+format that you want. Does your WYSIWYG idea erode this virtue and lead to more
+thinking -- perhaps undue thinking about style over substance?
+
+00:54:14.302 --> 00:54:17.519
+I thought it was a virtue to separate the content
+
+00:54:17.520 --> 00:54:19.719
+from the style or appearance of information.
+
+00:54:19.720 --> 00:54:24.759
+Part of being free is also to view information in the format you want.
+
+00:54:24.760 --> 00:54:29.959
+Does your WYSIWYG idea erode this virtue and lead to more thinking,
+
+00:54:29.960 --> 00:54:34.359
+perhaps undue thinking about style over substance?
+
+00:54:34.360 --> 00:54:38.919
+Well, I don't know, actually.
+
+00:54:38.920 --> 00:54:43.959
+I know that in LibreOffice you can make named styles,
+
+00:54:43.960 --> 00:54:46.959
+and you can apply them to parts of the text,
+
+00:54:46.960 --> 00:54:51.239
+and later on you can change what any given named style
+
+00:54:51.240 --> 00:54:53.719
+means in terms of appearance.
+
+00:54:53.720 --> 00:55:03.319
+So, is that enough independence of appearance from semantics?
+
+00:55:03.320 --> 00:55:06.319
+I am hardly a power user of LibreOffice.
+
+00:55:06.320 --> 00:55:09.239
+I've come across that feature. I've never used it.
+
+00:55:09.240 --> 00:55:17.559
+The only things I write with it are pretty simple.
+
+00:55:17.560 --> 00:55:23.519
+I have a feeling that I've been doing this for a rather long time.
+
+00:55:23.520 --> 00:55:27.279
+Do you recall when I started answering questions?
+
+00:55:27.280 --> 00:55:29.799
+I think it was something like an hour ago.
+
+00:55:29.800 --> 00:55:35.759
+Yeah, I think so. About an hour or 45 minutes-ish.
+
+00:55:35.760 --> 00:55:38.839
+Well, then I'll do a few questions more.
+
+NOTE Do you ever dabble in retro-computing, e.g. logging into TOPS10/20 systems SDF, etc?
+
+00:55:38.840 --> 00:55:42.679
+Do you ever dabble in retrocomputing?
+
+00:55:42.680 --> 00:55:47.319
+No. I decided it's a waste of time.
+
+00:55:47.320 --> 00:55:51.759
+It basically would be tinkering that would not develop
+
+00:55:51.760 --> 00:55:56.039
+anything of any importance or use.
+
+00:55:56.040 --> 00:56:02.839
+And I know that if I'm going to enjoy developing something,
+
+00:56:02.840 --> 00:56:06.079
+I could enjoy it developing anything.
+
+00:56:06.080 --> 00:56:10.239
+You know, I could enjoy just as much developing something
+
+00:56:10.240 --> 00:56:17.199
+that I think is needed right now for non-retrocomputing
+
+00:56:17.200 --> 00:56:20.679
+as I could enjoy working on retrocomputing.
+
+00:56:20.680 --> 00:56:26.079
+So I decided never to let retrocomputing
+
+00:56:26.080 --> 00:56:30.759
+distract my attention from useful computing.
+
+NOTE Do you know Gemini?
+
+00:56:38.196 --> 00:56:40.359
+Do you know the Gemini Project -
+
+00:56:40.360 --> 00:56:45.239
+a network of very simplified markdown-like text files without images
+
+00:56:45.240 --> 00:56:52.759
+and third-party materials transmitted via an open public free protocol,
+
+00:56:52.760 --> 00:56:56.519
+which is not HTTPS?
+
+00:56:56.520 --> 00:56:58.839
+I don't remember if I ever heard of that before.
+
+00:56:58.840 --> 00:57:02.639
+Sorry, I have no opinion about it.
+
+00:57:02.640 --> 00:57:10.799
+But I think that the lack of images will turn out to be a considerable drawback.
+
+00:57:10.800 --> 00:57:14.159
+I mean, imagine a website.
+
+00:57:14.160 --> 00:57:19.439
+Well, there are lots of reasons you might want to put in images.
+
+00:57:19.440 --> 00:57:27.559
+It's not limited just to making it look snazzy and distracting.
+
+00:57:27.560 --> 00:57:32.159
+There are a lot of pictures you might want to include and diagrams,
+
+00:57:32.160 --> 00:57:37.719
+and scientific papers include pictures and diagrams.
+
+00:57:37.720 --> 00:57:41.359
+It would be crippling if they couldn't be in there.
+
+00:57:41.360 --> 00:57:46.519
+So basically, I think that exclusion of images is a big loss.
+
+00:57:46.520 --> 00:57:56.879
+[Amin]: Thanks. I think that's so far all the questions I see on the pad,
+
+00:57:56.880 --> 00:58:00.319
+but let's give it maybe another minute or two
+
+00:58:00.320 --> 00:58:04.479
+if people have any other question or two to get in before we call this close.
+
+NOTE stallmansupport.org
+
+00:58:04.480 --> 00:58:27.520
+[Richard] Well, I'd like to mention that if you've heard
+
+00:58:27.521 --> 00:58:43.959
+rumors of attacks against me that people have made, it's mostly false,
+
+00:58:43.960 --> 00:58:50.079
+and you can find out more by looking at stallmansupport.org.
+
+00:58:50.080 --> 00:58:55.359
+So I refer you there, and I hope you'll take a look.
+
+00:58:55.360 --> 00:59:04.639
+[Amin]: Yes, thank you.
+
+00:59:04.640 --> 00:59:08.599
+All right, I think that's pretty much all the questions that we have.
+
+00:59:08.600 --> 00:59:10.559
+Thanks again, Richard, both for your great talk
+
+00:59:10.560 --> 00:59:14.319
+and also for taking this much time answering so many questions.
+
+00:59:14.320 --> 00:59:17.999
+We really appreciate it.
+
+00:59:18.000 --> 00:59:21.639
+[Richard]: Well, this is what I do.
+
+00:59:21.640 --> 00:59:28.839
+GNU and the Free Software Movement are what I've dedicated my life to,
+
+00:59:28.840 --> 00:59:34.679
+and since I'm still alive, I've got more to dedicate to them.
+
+00:59:34.680 --> 00:59:40.319
+[Amin]: Wonderful, and we all hope that it keeps on coming
+
+00:59:40.320 --> 00:59:43.839
+and you're able to continue for a very long time into the future.
+
+00:59:43.840 --> 00:59:46.079
+[Richard]: Happy hacking.
+
+00:59:46.080 --> 00:59:49.960
+[Amin]: Happy hacking. Bye.
diff --git a/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt
new file mode 100644
index 00000000..24aba25c
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt
@@ -0,0 +1,32 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:02:33.540
+GNU Emacs and its purpose
+
+00:02:33.640 --> 00:03:46.280
+Lisp as the extension language
+
+00:03:46.280 --> 00:06:14.640
+JavaScript versus freedom
+
+00:06:14.640 --> 00:07:23.307
+Updating "An Introduction to Emacs Lisp Programming"
+
+00:07:23.407 --> 00:08:31.707
+More memorable package names
+
+00:08:31.807 --> 00:10:23.620
+Simplifying the command interface
+
+00:10:23.620 --> 00:11:22.220
+Modularity
+
+00:11:22.220 --> 00:12:55.460
+Editing formatted text
+
+00:12:55.460 --> 00:15:31.300
+Not the equivalent of a modern web browser
+
+00:15:31.300 --> 00:17:01.500
+Getting involved
diff --git a/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt
new file mode 100644
index 00000000..5873b47b
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt
@@ -0,0 +1,756 @@
+WEBVTT captioned by anush
+
+NOTE GNU Emacs and its purpose
+
+00:00:00.000 --> 00:00:08.960
+Hello! I'm going to talk about what I would like to see
+
+00:00:08.960 --> 00:00:11.240
+in GNU Emacs in the future,
+
+00:00:11.240 --> 00:00:17.600
+and what I would prefer not to find there.
+
+00:00:17.600 --> 00:00:22.080
+This is all within the context
+
+00:00:22.080 --> 00:00:25.360
+of GNU Emacs and its purpose.
+
+00:00:25.360 --> 00:00:30.600
+GNU Emacs is a part of the GNU operating system,
+
+00:00:30.600 --> 00:00:33.300
+and the purpose of the GNU operating system
+
+00:00:33.400 --> 00:00:38.840
+is not simply to do a good job technically,
+
+00:00:38.840 --> 00:00:42.640
+not simply to be good to use.
+
+00:00:42.640 --> 00:00:45.760
+Its main purpose, its overall purpose,
+
+00:00:45.760 --> 00:00:48.560
+is to give people freedom,
+
+00:00:48.560 --> 00:00:54.760
+and to help them value and defend that freedom.
+
+00:00:54.760 --> 00:01:00.160
+A GNU package, by being a convenient, well-written program,
+
+00:01:00.160 --> 00:01:06.000
+should contribute to that overall ethical and social goal,
+
+00:01:06.000 --> 00:01:10.440
+and not only to the usefulness of our software.
+
+00:01:10.440 --> 00:01:14.080
+This is true for GNU Emacs
+
+00:01:14.080 --> 00:01:18.720
+as much as it is for any other free program we’ve developed.
+
+00:01:18.720 --> 00:01:25.320
+In fact, GNU Emacs is the first GNU program that I released.
+
+00:01:25.320 --> 00:01:28.800
+I had written some other things before that,
+
+00:01:28.800 --> 00:01:30.600
+but didn't release them at that time.
+
+00:01:30.600 --> 00:01:34.200
+There was no particular use in doing so.
+
+00:01:34.200 --> 00:01:36.007
+So it was through GNU Emacs
+
+00:01:36.107 --> 00:01:38.307
+that I learned about various things
+
+00:01:38.407 --> 00:01:44.240
+such as software licenses and how to defend freedom.
+
+00:01:44.240 --> 00:01:50.407
+You're of course familiar with what GNU Emacs is today,
+
+00:01:50.507 --> 00:01:54.240
+thanks to the contributions of thousands of other people
+
+00:01:54.340 --> 00:01:56.967
+who came after me.
+
+00:01:57.067 --> 00:01:58.880
+What would I like?
+
+00:01:58.880 --> 00:02:01.433
+What would other people like?
+
+00:02:01.533 --> 00:02:06.480
+Lots of people come to Emacs familiar with VS Code,
+
+00:02:06.480 --> 00:02:10.520
+and they say, "Please make Emacs more like VS Code.
+
+00:02:10.520 --> 00:02:15.840
+Change everything that you did in the 1980s and 90s
+
+00:02:15.840 --> 00:02:18.320
+to be like that other thing."
+
+00:02:18.320 --> 00:02:24.200
+That wouldn't be feasible even if we wanted to.
+
+00:02:24.200 --> 00:02:30.440
+Our goal is not to be... not resembling VS Code.
+
+00:02:30.440 --> 00:02:33.540
+Any resemblance is coincidental.
+
+NOTE Lisp as the extension language
+
+00:02:33.640 --> 00:02:37.940
+But in particular,
+
+00:02:38.040 --> 00:02:43.774
+we do not want to have extension languages other than Lisp.
+
+00:02:43.874 --> 00:02:47.474
+Emacs Lisp is the variant of Lisp
+
+00:02:47.574 --> 00:02:49.474
+that we've always supported,
+
+00:02:49.574 --> 00:02:52.960
+which has evolved along with Emacs.
+
+00:02:52.960 --> 00:02:57.400
+We can conceivably have Scheme as well,
+
+00:02:57.400 --> 00:03:01.040
+if we can sufficiently solve the problems,
+
+00:03:01.140 --> 00:03:03.760
+the technical problems of making Scheme
+
+00:03:03.760 --> 00:03:06.480
+and Emacs Lisp interoperate.
+
+00:03:06.480 --> 00:03:11.600
+We did some design work, I think that was with Tom Lord,
+
+00:03:11.600 --> 00:03:15.880
+whom the community will greatly miss.
+
+00:03:15.880 --> 00:03:19.240
+In the 1990s, there are challenges that remain;
+
+00:03:19.340 --> 00:03:21.360
+maybe it can be done.
+
+00:03:21.360 --> 00:03:27.960
+But a non-Lispy language would be a mistake.
+
+00:03:27.960 --> 00:03:33.000
+It would divert our development focus into areas
+
+00:03:33.000 --> 00:03:37.480
+that we don't need, languages that are less powerful,
+
+00:03:37.480 --> 00:03:46.280
+less beautiful, and less desirable for the purpose.
+
+NOTE JavaScript versus freedom
+
+00:03:46.280 --> 00:03:52.120
+However, the language that we above all shouldn't support
+
+00:03:52.120 --> 00:03:57.233
+is JavaScript. That's not because of the language itself.
+
+00:03:57.333 --> 00:04:00.480
+I don't know the JavaScript language,
+
+00:04:00.480 --> 00:04:04.200
+I've heard people say it's rather clumsy
+
+00:04:04.200 --> 00:04:07.520
+and not well designed, but I don't know this.
+
+00:04:07.520 --> 00:04:12.400
+In any case, it's not what my views are based on.
+
+00:04:12.400 --> 00:04:14.740
+There's something much worse about JavaScript,
+
+00:04:14.840 --> 00:04:18.800
+which is not the language itself, but how people use it.
+
+00:04:18.800 --> 00:04:23.640
+Namely, it's been adopted as a way for a network server
+
+00:04:23.640 --> 00:04:26.120
+to send a program to your machine
+
+00:04:26.120 --> 00:04:30.120
+without your even noticing, so that this program,
+
+00:04:30.120 --> 00:04:35.007
+written by you don't know who, will run on your computer
+
+00:04:35.107 --> 00:04:37.200
+and do you don't know what.
+
+00:04:37.200 --> 00:04:39.674
+And you're supposed to just trust
+
+00:04:39.774 --> 00:04:43.640
+all and sundry developers of software
+
+00:04:43.640 --> 00:04:45.840
+for the sites you visit,
+
+00:04:45.840 --> 00:04:51.320
+which very commonly do malicious things, often unknown
+
+00:04:51.320 --> 00:04:55.680
+to the people who are running the server itself.
+
+00:04:55.680 --> 00:04:59.320
+They paid someone else to design a website
+
+00:04:59.320 --> 00:05:01.307
+and they probably said, oh,
+
+00:05:01.407 --> 00:05:04.440
+make it fashionable and attractive.
+
+00:05:04.440 --> 00:05:09.760
+And they didn't insist, don't snoop on the visitors,
+
+00:05:09.760 --> 00:05:12.840
+even if they understood what the issue was.
+
+00:05:12.840 --> 00:05:20.480
+So these sites snoop. It's a serious problem.
+
+00:05:20.480 --> 00:05:24.080
+The problem comes not from the language JavaScript,
+
+00:05:24.080 --> 00:05:28.680
+but from the fact that browsers, by default,
+
+00:05:28.680 --> 00:05:32.440
+will pull in JavaScript code that gets sent to them
+
+00:05:32.440 --> 00:05:35.833
+and run it to do anything at all.
+
+00:05:35.933 --> 00:05:39.320
+Emacs is supposed to defend your freedom.
+
+00:05:39.320 --> 00:05:42.520
+It's supposed to help you to defend your freedom,
+
+00:05:42.520 --> 00:05:45.640
+and lead you to defend your freedom,
+
+00:05:45.640 --> 00:05:47.200
+which means it shouldn't lead you
+
+00:05:47.200 --> 00:05:50.960
+to throw your freedom away as soon as you visit a site
+
+00:05:50.960 --> 00:05:53.920
+that tries to send you a non-free program
+
+00:05:53.920 --> 00:05:58.280
+to run straight off of that other machine.
+
+00:05:58.280 --> 00:06:04.080
+So it's important not to lead users
+
+00:06:04.080 --> 00:06:06.520
+to do computing this way.
+
+00:06:06.520 --> 00:06:10.800
+So what are some good things
+
+00:06:10.800 --> 00:06:14.640
+that we would want instead of this?
+
+NOTE Updating "An Introduction to Emacs Lisp Programming"
+
+00:06:14.640 --> 00:06:19.774
+One thing we want
+
+00:06:19.874 --> 00:06:26.474
+is to update the "Introduction to Emacs Lisp Programming"
+
+00:06:26.574 --> 00:06:29.480
+by the late Bob Chassell.
+
+00:06:29.480 --> 00:06:34.720
+It's a book that makes it easy for even non-programmers
+
+00:06:34.720 --> 00:06:38.000
+to learn to write simple programs in Emacs Lisp.
+
+00:06:38.000 --> 00:06:41.200
+And from there, they can go on to do better.
+
+00:06:41.200 --> 00:06:44.800
+We made a pretty big change in Emacs Lisp
+
+00:06:44.800 --> 00:06:49.480
+a few years ago, implementing lexical scoping by default.
+
+00:06:49.480 --> 00:06:57.360
+Originally, Emacs Lisp used to be entirely dynamic scoping,
+
+00:06:57.360 --> 00:07:01.960
+like some of the earliest Lisp interpreters.
+
+00:07:01.960 --> 00:07:06.520
+This is a change that should have a careful job
+
+00:07:06.520 --> 00:07:10.560
+of updating for the introduction.
+
+00:07:10.560 --> 00:07:14.600
+I'm sure we've made it clear in the reference manual,
+
+00:07:14.600 --> 00:07:18.400
+but that's not what beginners read first.
+
+00:07:18.400 --> 00:07:23.307
+We need something to teach them in lexical scoping.
+
+NOTE More memorable package names
+
+00:07:23.407 --> 00:07:30.440
+Another thing we could use is to make it easier
+
+00:07:30.440 --> 00:07:33.880
+to understand the facilities that we have.
+
+00:07:33.880 --> 00:07:38.560
+For instance, I think every package
+
+00:07:38.560 --> 00:07:42.200
+that you might load into your Emacs and run
+
+00:07:42.200 --> 00:07:47.680
+should have a name that helps you remember what job it does.
+
+00:07:47.680 --> 00:07:51.274
+It doesn't have to be super long to tell you
+
+00:07:51.374 --> 00:07:53.507
+what job that package does.
+
+00:07:53.607 --> 00:07:56.774
+You can read the description to learn that.
+
+00:07:56.874 --> 00:07:59.600
+But once you've read the description,
+
+00:07:59.600 --> 00:08:02.974
+it should be memorable. When you see that name again,
+
+00:08:03.074 --> 00:08:06.507
+you should realize, oh, that's the package I could use
+
+00:08:06.607 --> 00:08:11.880
+to do "less" and so. We've had a tendency
+
+00:08:11.880 --> 00:08:17.840
+to give packages names for the sake of pure wordplay
+
+00:08:17.940 --> 00:08:23.474
+or lack of obvious meaning,
+
+00:08:23.574 --> 00:08:28.188
+and I think we should add on, to those packages,
+
+00:08:28.189 --> 00:08:31.707
+names that people will remember.
+
+NOTE Simplifying the command interface
+
+00:08:31.807 --> 00:08:39.200
+Also, there are ways we can simplify the command interface
+
+00:08:39.200 --> 00:08:43.760
+of Emacs. For instance, there are many different parameters
+
+00:08:43.760 --> 00:08:48.000
+users can specify that can have several values,
+
+00:08:48.000 --> 00:08:51.707
+and sometimes you do various kinds of editing
+
+00:08:51.807 --> 00:08:54.440
+in one session. That's normal in Emacs,
+
+00:08:54.440 --> 00:08:57.740
+and you might want different parameter settings
+
+00:08:57.840 --> 00:09:00.307
+for different kinds of editing.
+
+00:09:00.407 --> 00:09:06.200
+So you specify parameter value A, do some editing,
+
+00:09:06.200 --> 00:09:10.240
+you specify parameter value B, and do some editing,
+
+00:09:10.240 --> 00:09:13.720
+and you'd switch back and forth, so you want
+
+00:09:13.720 --> 00:09:17.440
+to switch back and forth between these parameters.
+
+00:09:17.440 --> 00:09:22.607
+I think we should aim ...
+
+00:09:22.707 --> 00:09:26.640
+People have added various commands to switch
+
+00:09:26.740 --> 00:09:30.400
+between the last two or n values of this parameter,
+
+00:09:30.500 --> 00:09:32.674
+and another command to switch
+
+00:09:32.774 --> 00:09:36.740
+between the last two or n values of this [other] parameter,
+
+00:09:36.840 --> 00:09:41.360
+and then that parameter, you know, and that parameter.
+
+00:09:41.360 --> 00:09:44.667
+I think we should be able to have
+
+00:09:44.767 --> 00:09:49.120
+a switch between the last n values command
+
+00:09:49.120 --> 00:09:54.320
+that works on various different parameters,
+
+00:09:54.320 --> 00:09:57.040
+and thus makes it easy to remember
+
+00:09:57.040 --> 00:09:59.240
+that there is this facility.
+
+00:09:59.340 --> 00:10:03.774
+Because right now the commands to do that are all ad-hoc,
+
+00:10:03.874 --> 00:10:08.540
+and if you don't use a toggling among the last n values
+
+00:10:08.640 --> 00:10:11.740
+of a given parameter, you won't know how to do it.
+
+00:10:11.840 --> 00:10:15.267
+It won't be obvious that there is a way,
+
+00:10:15.367 --> 00:10:17.667
+so you'd have to go to a suitable manual
+
+00:10:17.767 --> 00:10:20.100
+and study for a while to think of that.
+
+00:10:20.100 --> 00:10:23.620
+We could make this easily discoverable.
+
+NOTE Modularity
+
+00:10:23.620 --> 00:10:30.140
+There is another kind of modularity that's important,
+
+00:10:30.140 --> 00:10:34.100
+and that is modularity at the level of maintenance.
+
+00:10:34.100 --> 00:10:38.207
+This is something all programmers know about, of course,
+
+00:10:38.307 --> 00:10:43.300
+but in Emacs, various parts interact with other parts,
+
+00:10:43.300 --> 00:10:47.980
+and we've tried to make them modular in design
+
+00:10:47.980 --> 00:10:50.380
+by using lots of hooks,
+
+00:10:50.380 --> 00:10:54.380
+but we haven't gone as far as we could.
+
+00:10:54.380 --> 00:10:58.060
+With some effort, we could find calls
+
+00:10:58.060 --> 00:11:00.220
+from over here to over there
+
+00:11:00.220 --> 00:11:03.140
+that could be replaced by use of hooks,
+
+00:11:03.140 --> 00:11:05.940
+so that we could reduce the extent
+
+00:11:05.940 --> 00:11:09.874
+to which you need to know about one part of Emacs
+
+00:11:09.974 --> 00:11:12.607
+to maintain another part of Emacs,
+
+00:11:12.707 --> 00:11:17.580
+and I think that as we keep adding more facilities to Emacs,
+
+00:11:17.580 --> 00:11:22.220
+this kind of modularity will be an investment that pays off.
+
+NOTE Editing formatted text
+
+00:11:22.220 --> 00:11:27.140
+There’s one big area of features
+
+00:11:27.240 --> 00:11:30.700
+that I would like to see in Emacs,
+
+00:11:30.800 --> 00:11:33.180
+and that's the ability to edit
+
+00:11:33.180 --> 00:11:40.340
+formatted documents in WYSIWYG, to be able to edit
+
+00:11:40.340 --> 00:11:47.940
+a letter or a scientific mathematical paper with formulas
+
+00:11:47.940 --> 00:11:52.900
+or a nicely laid out manual,
+
+00:11:52.900 --> 00:11:56.660
+looking at what it's really going to look like.
+
+00:11:56.660 --> 00:12:00.460
+Now we have free software to do this.
+
+00:12:00.460 --> 00:12:04.660
+For instance, I use LibreOffice some of the time.
+
+00:12:04.660 --> 00:12:08.100
+Sometimes it's faster than writing something
+
+00:12:08.100 --> 00:12:11.860
+to be formatted with a text formatter
+
+00:12:11.860 --> 00:12:16.180
+and then formatting it. But when I use LibreOffice,
+
+00:12:16.180 --> 00:12:19.220
+I always miss the commands and facilities,
+
+00:12:19.220 --> 00:12:22.574
+the editing facilities of Emacs.
+
+00:12:22.674 --> 00:12:26.500
+I'd like to have them both together, something with
+
+00:12:26.500 --> 00:12:30.340
+the text formatting capabilities of LibreOffice
+
+00:12:30.340 --> 00:12:36.060
+or even better of TeX, but the editing commands
+
+00:12:36.060 --> 00:12:40.300
+and facilities of Emacs. This would be a big job,
+
+00:12:40.300 --> 00:12:45.980
+but it can be made up of a lot of medium-sized jobs.
+
+00:12:45.980 --> 00:12:50.020
+If people start working on those medium-sized jobs,
+
+00:12:50.020 --> 00:12:52.060
+then in a number of years
+
+00:12:52.060 --> 00:12:55.460
+we'll have something absolutely amazing.
+
+NOTE Not the equivalent of a modern web browser
+
+00:12:55.460 --> 00:13:01.140
+But one thing I think we really shouldn't have
+
+00:13:01.140 --> 00:13:06.500
+is the equivalent of a modern web browser.
+
+00:13:06.500 --> 00:13:10.940
+The World Wide Web started out in the 1990s
+
+00:13:10.940 --> 00:13:13.774
+in a much simpler form,
+
+00:13:13.874 --> 00:13:17.820
+where a web page described its contents,
+
+00:13:17.820 --> 00:13:21.180
+and the web browser laid them out,
+
+00:13:21.180 --> 00:13:23.707
+and the user could parameterize
+
+00:13:23.807 --> 00:13:27.140
+how to lay out various kinds of situations.
+
+00:13:27.140 --> 00:13:31.707
+This was not only convenient for users
+
+00:13:31.807 --> 00:13:35.874
+who wanted to control things and understand things,
+
+00:13:35.974 --> 00:13:39.640
+it was also freedom-respecting
+
+00:13:39.740 --> 00:13:43.020
+because the layout was done by your browser.
+
+00:13:43.020 --> 00:13:48.100
+If you had a free browser, you were in control,
+
+00:13:48.100 --> 00:13:51.620
+even though the browser was complicated already.
+
+00:13:51.620 --> 00:13:54.707
+But starting around two decades ago,
+
+00:13:54.807 --> 00:13:58.820
+there was an explosion in the complexity of browsers
+
+00:13:58.820 --> 00:14:02.780
+as companies wanted to have more and more control
+
+00:14:02.780 --> 00:14:07.700
+over exactly what would appear on a user's screen.
+
+00:14:07.700 --> 00:14:12.374
+So they invented lots of features to control that,
+
+00:14:12.474 --> 00:14:15.907
+features where the user couldn't really customize
+
+00:14:16.007 --> 00:14:18.307
+how something would actually appear
+
+00:14:18.407 --> 00:14:21.207
+because the whole point was that
+
+00:14:21.307 --> 00:14:23.707
+the company could control that.
+
+00:14:23.807 --> 00:14:27.020
+And JavaScript was sort of the ultimate level
+
+00:14:27.020 --> 00:14:32.007
+of "the company controls everything."
+
+00:14:32.107 --> 00:14:38.500
+Because of this, going beyond the simple level
+
+00:14:38.500 --> 00:14:43.540
+of web page formatting features in Emacs
+
+00:14:43.540 --> 00:14:50.940
+is basically heading down a path that leads to subjugation.
+
+00:14:50.940 --> 00:14:54.740
+It's a path that we need to stay away from.
+
+00:14:54.740 --> 00:15:00.307
+It's a path to an unjust world of computing
+
+00:15:00.407 --> 00:15:03.420
+that you can easily see around you.
+
+00:15:03.420 --> 00:15:08.600
+Web browsers nowadays are designed to display ads
+
+00:15:08.700 --> 00:15:11.567
+that you may not want to see.
+
+00:15:11.667 --> 00:15:17.900
+They're designed for DRM.
+
+00:15:17.900 --> 00:15:22.420
+They're designed for companies to snoop on you
+
+00:15:22.420 --> 00:15:26.300
+in unobvious ways. And all of that
+
+00:15:26.300 --> 00:15:28.980
+we should protect ourselves from,
+
+00:15:28.980 --> 00:15:31.300
+protect our users from.
+
+NOTE Getting involved
+
+00:15:31.300 --> 00:15:39.980
+So I hope that some of you will be enthusiastic
+
+00:15:39.980 --> 00:15:42.060
+about some of these changes,
+
+00:15:42.060 --> 00:15:46.940
+especially towards editing formatted text.
+
+00:15:46.940 --> 00:15:51.980
+If you want to get involved, we have
+
+00:15:51.980 --> 00:15:57.820
+a development discussion list called emacs-devel@gnu.org.
+
+00:15:57.820 --> 00:16:02.380
+You can join that. You can also,
+
+00:16:02.380 --> 00:16:05.740
+if you get interested in working on a package
+
+00:16:05.740 --> 00:16:09.500
+and you're not an experienced Emacs Lisp developer,
+
+00:16:09.500 --> 00:16:13.640
+it's a very good idea to look for an experienced developer
+
+00:16:13.740 --> 00:16:14.980
+to talk with.
+
+00:16:14.980 --> 00:16:19.220
+Make sure you can write programs in Emacs Lisp first.
+
+00:16:19.220 --> 00:16:24.260
+It's not useful to take up the expert’s time learning that.
+
+00:16:24.260 --> 00:16:27.307
+You can still learn it from the introduction.
+
+00:16:27.407 --> 00:16:31.660
+But after that, when it's a matter of how to design
+
+00:16:31.660 --> 00:16:36.180
+your favorite package, do have a discussion with developers.
+
+00:16:36.180 --> 00:16:39.060
+They'll give you design ideas
+
+00:16:39.060 --> 00:16:43.180
+that will help you make a package that we put into Emacs.
+
+00:16:43.180 --> 00:17:01.500
+Now it's time for questions.
diff --git a/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt b/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt
new file mode 100644
index 00000000..05297798
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt
@@ -0,0 +1,73 @@
+WEBVTT - EmacsConf 2022, Ramin Honary: "Build a Zettelkasten with the Hyperbole Rolodex"
+
+00:00:00.000 --> 00:01:41.039
+Introduction
+
+00:01:41.040 --> 00:01:41.039
+Key takeaway
+
+00:02:17.00 --> 00:02:46.319
+Overview of Zettelkasten
+
+00:02:46.320 --> 00:03:25.359
+Tools I use in day-to-day writing
+
+00:03:25.360 --> 00:04:03.519
+Quick overview of Hyperbole
+
+00:04:03.520 --> 00:04:55.239
+Explain HyRolo
+
+00:04:55.240 --> 00:05:44.279
+Configuration of Hyperbole using ~use-package~
+
+00:05:44.280 --> 00:06:37.599
+The Hyperbole menu-driven user interface
+
+00:06:37.600 --> 00:08:23.759
+Getting started with *HyRolo*: Create a /zettel/
+
+00:08:23.760 --> 00:09:27.121
+Searching the *HyRolo* database
+
+00:09:27.120 --> 00:10:06.959
+Demo *HyRolo* search
+
+00:10:06.960 --> 00:10:42.519
+Search operators AND/OR/NOT
+
+00:10:42.520 --> 00:12:01.759
+Navigating the search results
+
+00:12:01.760 --> 00:12:25.559
+Editing entries creates timestamps
+
+00:12:25.560 --> 00:12:56.039
+How is *HyRolo* a zettelkasten?
+
+00:12:56.040 --> 00:14:26.799
+Demo interlinked notes via *HyRolo* search
+
+00:14:26.800 --> 00:15:35.079
+Explaining how Hyperbole hyperlinks work
+
+00:15:35.080 --> 00:16:04.679
+Demo Hyperbole "implicit links"
+
+00:16:04.680 --> 00:16:04.679
+Explain Hyperbole "explicit links"
+
+00:16:04.680 --> 00:18:32.719
+Demo creating an explicit link
+
+00:18:32.720 --> 00:19:19.879
+Demo creating an /zettel/ entry for a person
+
+00:19:19.880 --> 00:20:10.559
+Demo explicit linking new entry to others
+
+00:20:10.560 --> 00:21:12.479
+How "explicit buttons" encode actions
+
+00:21:12.480 --> 00:21:43.920
+Conclusion
diff --git a/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt b/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt
new file mode 100644
index 00000000..2ec7490e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt
@@ -0,0 +1,1315 @@
+WEBVTT - EmacsConf 2022, Ramin Honary: "Build a Zettelkasten with the Hyperbole Rolodex" captioned by ramin
+
+00:00:00.000 --> 00:00:06.759
+Hello, attendees of EmacsConf 2022!
+
+00:00:06.760 --> 00:00:08.839
+The title of my talk is:
+
+00:00:08.840 --> 00:00:16.159
+"Build a Zettelkasten with the Hyperbole Rolodex."
+
+00:00:16.160 --> 00:00:17.479
+My name is Ramin Honary.
+
+00:00:17.480 --> 00:00:19.279
+I work as a software engineer
+
+00:00:19.280 --> 00:00:22.839
+writing apps for a small machine learning consultancy.
+
+00:00:22.840 --> 00:00:24.839
+I have been using Emacs since roughly 2018
+
+00:00:24.840 --> 00:00:26.479
+after having switched from a workflow
+
+00:00:26.480 --> 00:00:29.439
+using Vim together with Screen/Tmux for over a decade.
+
+00:00:29.440 --> 00:00:31.439
+Today I'd like to talk a bit about
+
+00:00:31.440 --> 00:00:34.039
+the Hyperbole package for Emacs.
+
+00:00:34.040 --> 00:00:36.159
+Others are presenting talks later today
+
+00:00:36.160 --> 00:00:37.479
+about Hyperbole as well,
+
+00:00:37.480 --> 00:00:39.839
+including some of the the authors and maintainers,
+
+00:00:39.840 --> 00:00:41.879
+so I won't go into too much detail
+
+00:00:41.880 --> 00:00:43.559
+about how Hyperbole works.
+
+00:00:43.560 --> 00:00:45.039
+Instead, I want to present
+
+00:00:45.040 --> 00:00:46.839
+a more concrete use case for Hyperbole,
+
+00:00:46.840 --> 00:00:49.279
+which is how to use it to facilitate
+
+00:00:49.280 --> 00:00:51.919
+the Zettelkasten method.
+
+00:00:51.920 --> 00:00:53.759
+Most Emacs users will probably be
+
+00:00:53.760 --> 00:00:56.039
+more familiar with Org Roam.
+
+00:00:56.040 --> 00:00:58.679
+Org Roam may even be the first thing that comes to mind
+
+00:00:58.680 --> 00:01:00.399
+when you hear the word "Zettelkasten."
+
+00:01:00.400 --> 00:01:02.479
+But personally, I use Hyperbole
+
+00:01:02.480 --> 00:01:05.039
+because I found it easier to get started with
+
+00:01:05.040 --> 00:01:07.479
+using it as an ideas database.
+
+00:01:07.480 --> 00:01:09.599
+All you need to do is install the Hyperbole package
+
+00:01:09.600 --> 00:01:11.399
+(which is available on GNU-ELPA)
+
+00:01:11.400 --> 00:01:13.759
+and then set a few customization options.
+
+00:01:13.760 --> 00:01:15.399
+There is nothing else you really need to do
+
+00:01:15.400 --> 00:01:16.079
+to get started.
+
+00:01:16.080 --> 00:01:19.759
+And also, Hyperbole works nicely with Org Mode.
+
+00:01:19.760 --> 00:01:21.799
+So Hyperbole's built-in functionality
+
+00:01:21.800 --> 00:01:24.919
+can be used as a nice, light-weight alternative
+
+00:01:24.920 --> 00:01:28.199
+to other Emacs Zettelkasten packages.
+
+00:01:28.200 --> 00:01:30.599
+This talk is for people who are curious about
+
+00:01:30.600 --> 00:01:34.159
+getting started with the Zettelkasten method,
+
+00:01:34.160 --> 00:01:36.079
+but are not ready to commit
+
+00:01:36.080 --> 00:01:41.039
+to a more purpose-built solution like Org Roam.
+
+00:01:41.040 --> 00:01:42.719
+So the thing I'd like people
+
+00:01:42.720 --> 00:01:44.599
+to take away from this presentation
+
+00:01:44.600 --> 00:01:46.759
+is that the Hyperbole Emacs package
+
+00:01:46.760 --> 00:01:50.639
+provides you with a flat-file database called "HyRolo"
+
+00:01:50.640 --> 00:01:53.239
+which you can use to store ideas.
+
+00:01:53.240 --> 00:01:55.999
+Then you can use what Hyperbole calls "buttons"
+
+00:01:56.000 --> 00:01:57.239
+(which are hyperlinks)
+
+00:01:57.240 --> 00:02:00.519
+to execute arbitrary Emacs commands
+
+00:02:00.520 --> 00:02:03.159
+and by inserting links into your database
+
+00:02:03.160 --> 00:02:06.159
+that execute queries against the database itself.
+
+00:02:06.160 --> 00:02:08.959
+These query-action links serve as
+
+00:02:08.960 --> 00:02:10.319
+a means to link ideas together,
+
+00:02:10.320 --> 00:02:13.439
+thus creating a functioning "Zettelkasten."
+
+00:02:13.440 --> 00:02:15.479
+If this doesn't make sense to you,
+
+00:02:15.480 --> 00:02:19.839
+I'll explain what all of this means presently.
+
+00:02:19.840 --> 00:02:24.359
+So just a quick overview of what "Zettelkasten" is.
+
+00:02:24.360 --> 00:02:26.199
+Note that most of what I say
+
+00:02:26.200 --> 00:02:27.359
+about the Zettelkasten method
+
+00:02:27.360 --> 00:02:29.759
+comes from a guy called Sascha Fast,
+
+00:02:29.760 --> 00:02:33.119
+and his website: zettelkasten.de .
+
+00:02:33.120 --> 00:02:34.999
+So a Zettelkasten is, in brief,
+
+00:02:35.000 --> 00:02:38.199
+a database containing many nodes of interconnected ideas,
+
+00:02:38.200 --> 00:02:40.759
+each idea being a single quantity of knowledge
+
+00:02:40.760 --> 00:02:42.039
+(about a paragraph)
+
+00:02:42.040 --> 00:02:46.319
+and linked to other related ideas.
+
+00:02:46.320 --> 00:02:47.959
+Also, let me quickly mention
+
+00:02:47.960 --> 00:02:49.679
+that there are actually many tools I use
+
+00:02:49.680 --> 00:02:51.879
+that assist me with the zettelkasten method:
+
+00:02:51.880 --> 00:02:53.599
+Hyperbole for hyperlinks;
+
+00:02:53.600 --> 00:02:56.079
+Embark for general text editing;
+
+00:02:56.080 --> 00:02:57.279
+Org Mode for markup;
+
+00:02:57.280 --> 00:02:59.439
+Dired for managing large sets of files;
+
+00:02:59.440 --> 00:03:01.959
+Consult, Vertico, Orderless, Marginalia;
+
+00:03:01.960 --> 00:03:04.519
+for interactive search through directories and documents;
+
+00:03:04.520 --> 00:03:06.359
+and Magit for revision control,
+
+00:03:06.360 --> 00:03:08.159
+and syncing my database of ideas
+
+00:03:08.160 --> 00:03:10.199
+across a few of my computers.
+
+00:03:10.200 --> 00:03:12.959
+Each of these tools provides some unique functionality,
+
+00:03:12.960 --> 00:03:15.439
+but today I will be focusing mostly on Hyperbole
+
+00:03:15.440 --> 00:03:17.039
+and how it is especially useful
+
+00:03:17.040 --> 00:03:19.839
+for the task of linking information together
+
+00:03:19.840 --> 00:03:21.399
+which is the most important aspect
+
+00:03:21.400 --> 00:03:25.359
+of the Zettelkasten methodology.
+
+00:03:25.360 --> 00:03:28.399
+And now I'll briefly go over what Hyperbole is.
+
+00:03:28.400 --> 00:03:31.159
+At it's core, Hyperbole is a simple markup language
+
+00:03:31.160 --> 00:03:34.519
+specifically designed to markup hyperlinks.
+
+00:03:34.520 --> 00:03:38.439
+Now, a hyperlink usually is only able to jump to
+
+00:03:38.440 --> 00:03:40.959
+ordinary URLs and file paths.
+
+00:03:40.960 --> 00:03:44.319
+Hyperbole extends the function of a hyperlink to provide
+
+00:03:44.320 --> 00:03:45.999
+a simple human-readable markup
+
+00:03:46.000 --> 00:03:49.639
+for executing Emacs commands (called "button actions")
+
+00:03:49.640 --> 00:03:52.359
+and then, on top of this core functionality,
+
+00:03:52.360 --> 00:03:53.239
+a few mini applications
+
+00:03:53.240 --> 00:03:56.839
+for example "HyRolo" and "Koutline",
+
+00:03:56.840 --> 00:04:00.959
+have been built to make Hyperbole more generally useful
+
+00:04:00.960 --> 00:04:03.519
+as a personal information management tool.
+
+00:04:03.520 --> 00:04:07.959
+"HyRolo" is the feature that I use as my Zettelkasten,
+
+00:04:07.960 --> 00:04:10.999
+and in particular, the HyRolo search feature
+
+00:04:11.000 --> 00:04:12.319
+in combination with
+
+00:04:12.320 --> 00:04:16.719
+the usual Hyperbole hyperlink markup language.
+
+00:04:16.720 --> 00:04:19.199
+So let me just quote the Hyperbole manual:
+
+00:04:19.200 --> 00:04:24.759
+"Hyperbole includes HyRolo for convenient management of
+
+00:04:24.760 --> 00:04:27.439
+hierarchical, record-oriented information.
+
+00:04:27.440 --> 00:04:30.879
+Most often, this is used for contact management
+
+00:04:30.880 --> 00:04:33.519
+but it can quickly be adapted to most any
+
+00:04:33.520 --> 00:04:37.199
+record-oriented lookup task requiring fast retrieval."
+
+00:04:37.200 --> 00:04:38.839
+So in other words, for example,
+
+00:04:38.840 --> 00:04:41.399
+it can be used to run search queries
+
+00:04:41.400 --> 00:04:44.679
+across the full set of nodes in a set of Org-Mode files.
+
+00:04:44.680 --> 00:04:47.679
+This means we can use an Org-Mode file
+
+00:04:47.680 --> 00:04:49.639
+as a flat-file database
+
+00:04:49.640 --> 00:04:52.159
+in which entries in the database can be linked together.
+
+00:04:52.160 --> 00:04:55.239
+This, in essence, is a what a Zettelkasten is.
+
+00:04:55.240 --> 00:04:58.959
+HyRolo needs almost no configuration,
+
+00:04:58.960 --> 00:05:00.239
+even if you are using it
+
+00:05:00.240 --> 00:05:01.719
+for the purpose of Zettelkasten,
+
+00:05:01.720 --> 00:05:03.839
+but you should at least make sure
+
+00:05:03.840 --> 00:05:05.599
+you set the location of the database
+
+00:05:05.600 --> 00:05:08.159
+in your Emacs config file, using the Customize system
+
+00:05:08.160 --> 00:05:10.359
+or however you prefer to configure your Emacs.
+
+00:05:10.360 --> 00:05:13.799
+I use "use-package", and on this slide I have here
+
+00:05:13.800 --> 00:05:15.879
+an abridged version of what my "init.el" file
+
+00:05:15.880 --> 00:05:18.199
+looks like for the Hyperbole package.
+
+00:05:18.200 --> 00:05:21.159
+A few relevant environment variables are set:
+
+00:05:21.160 --> 00:05:23.879
+the "hyrolo-file-list" variable
+
+00:05:23.880 --> 00:05:26.919
+selects where to find Rolo database files
+
+00:05:26.920 --> 00:05:29.279
+for the purpose of search. I have it set
+
+00:05:29.280 --> 00:05:31.919
+to just the Zettelkasten flat file database.
+
+00:05:31.920 --> 00:05:35.199
+And I also set "hyrolo-date-format" variable.
+
+00:05:35.200 --> 00:05:37.879
+Each database entry has a time stamp, and
+
+00:05:37.880 --> 00:05:40.239
+I use the time stamp as a unique ID
+
+00:05:40.240 --> 00:05:43.279
+for each entry (that is, each idea node)
+
+00:05:43.280 --> 00:05:44.279
+in the database.
+
+00:05:44.280 --> 00:05:48.199
+Finally, before I get into the actual demo,
+
+00:05:48.200 --> 00:05:49.599
+let me quickly explain
+
+00:05:49.600 --> 00:05:51.559
+the Hyperbole mini-buffer menu system.
+
+00:05:51.560 --> 00:05:54.599
+Mini-buffer menus in Hyperbole work just like
+
+00:05:54.600 --> 00:05:55.559
+in an ordinary GUI,
+
+00:05:55.560 --> 00:05:58.759
+except you typically enter into the mini-buffer menu
+
+00:05:58.760 --> 00:06:01.159
+with a key binding instead of a mouse click.
+
+00:06:01.160 --> 00:06:03.319
+To open the Hyperbole menu,
+
+00:06:03.320 --> 00:06:06.479
+you use the Hyperbole universal leader key
+
+00:06:06.480 --> 00:06:09.519
+that's C-h h, which by the way,
+
+00:06:09.520 --> 00:06:13.239
+this rebinds the "view-hello-file" command,
+
+00:06:13.240 --> 00:06:15.759
+which is a command that probably most people never use.
+
+00:06:15.760 --> 00:06:20.919
+So all Hyperbole menu key sequences begin with C-h h.
+
+00:06:20.920 --> 00:06:23.239
+Please remember this:
+
+00:06:23.240 --> 00:06:25.159
+as I explain how to do things,
+
+00:06:25.160 --> 00:06:26.959
+please don't worry too much
+
+00:06:26.960 --> 00:06:28.679
+about the key sequences I use
+
+00:06:28.680 --> 00:06:30.319
+to perform certain actions.
+
+00:06:30.320 --> 00:06:32.319
+Really, I am just navigating
+
+00:06:32.320 --> 00:06:33.479
+the Hyperbole mini-buffer menus.
+
+00:06:33.480 --> 00:06:37.599
+It is a very discoverable and fluid user interface.
+
+00:06:37.600 --> 00:06:42.159
+Anyway, now that we have configured our Rolo database,
+
+00:06:42.160 --> 00:06:45.399
+let's see how we enter new ideas into the database.
+
+00:06:45.400 --> 00:06:48.879
+And I will start with an empty database,
+
+00:06:48.880 --> 00:06:53.639
+then I'll switch over to a more complete database
+
+00:06:53.640 --> 00:06:57.039
+that I prepared for this demo. So...
+
+00:06:57.040 --> 00:07:04.159
+first we type the Hyperbole universal leader key C-h h,
+
+00:07:04.160 --> 00:07:08.919
+and then, you can see the menus down here
+
+00:07:08.920 --> 00:07:15.279
+we type "r" for "Rolo" and "a" for "add".
+
+00:07:15.280 --> 00:07:19.479
+That's C-h h r a to enter a new idea.
+
+00:07:19.480 --> 00:07:23.319
+And this command is available globally so,
+
+00:07:23.320 --> 00:07:26.599
+much like with the "org-capture" feature in Org-Mode,
+
+00:07:26.600 --> 00:07:28.879
+you can run this command at any time,
+
+00:07:28.880 --> 00:07:32.479
+at the very moment you want to enter an idea.
+
+00:07:32.480 --> 00:07:36.159
+First we are prompted for an entry title,
+
+00:07:36.160 --> 00:07:38.799
+and if you were using HyRolo as a contact list,
+
+00:07:38.800 --> 00:07:40.959
+this is where you would enter the person's name.
+
+00:07:40.960 --> 00:07:43.199
+I am using it as a Zettelkasten,
+
+00:07:43.200 --> 00:07:45.439
+so I instead enter a title for my idea.
+
+00:07:45.440 --> 00:07:46.839
+I'll just type in...
+
+00:07:46.840 --> 00:07:53.159
+and as soon as I press enter after this prompt,
+
+00:07:53.160 --> 00:07:55.999
+my Zettelkasten org file is opened,
+
+00:07:56.000 --> 00:08:02.879
+a new entry with the timestamp is created,
+
+00:08:02.880 --> 00:08:06.319
+and the cursor is placed at this entry
+
+00:08:06.320 --> 00:08:09.079
+ready for me to enter the body text of the idea.
+
+00:08:09.080 --> 00:08:14.799
+I'll type that in...
+
+00:08:14.800 --> 00:08:18.039
+Now I save the "idea" file (C-x C-s)
+
+00:08:18.040 --> 00:08:20.879
+and switch back to what I was working on before
+
+00:08:20.880 --> 00:08:23.759
+with the usual C-x 0 (delete-window) command.
+
+00:08:23.760 --> 00:08:26.279
+Next, I'd like to talk about
+
+00:08:26.280 --> 00:08:28.719
+the HyRolo database search feature,
+
+00:08:28.720 --> 00:08:30.879
+which is very useful.
+
+00:08:30.880 --> 00:08:33.719
+The HyRolo search feature uses
+
+00:08:33.720 --> 00:08:35.319
+only Emacs built-in functions
+
+00:08:35.320 --> 00:08:36.599
+and there is no indexing
+
+00:08:36.600 --> 00:08:38.679
+as with tools like "mlocate" or Org-Roam.
+
+00:08:38.680 --> 00:08:41.439
+So far, I have not had any trouble with efficiency.
+
+00:08:41.440 --> 00:08:42.759
+I don't know if at some point in the future,
+
+00:08:42.760 --> 00:08:44.079
+it will start slowing down.
+
+00:08:44.080 --> 00:08:46.199
+Emacs built-in search functionality
+
+00:08:46.200 --> 00:08:47.679
+is already pretty efficient as it is.
+
+00:08:47.680 --> 00:08:50.839
+It could also be that I am in the habit
+
+00:08:50.840 --> 00:08:55.679
+of storing larger bodies of text in separate files,
+
+00:08:55.680 --> 00:08:57.559
+and not in the flat file database.
+
+00:08:57.560 --> 00:08:58.999
+Anyway, you can search
+
+00:08:59.000 --> 00:09:02.239
+by regex, by string, or by words.
+
+00:09:02.240 --> 00:09:03.799
+I personally find the string search
+
+00:09:03.800 --> 00:09:04.719
+to be the most useful.
+
+00:09:04.720 --> 00:09:07.479
+The difference between word search and string search
+
+00:09:07.480 --> 00:09:09.199
+is that string search provides
+
+00:09:09.200 --> 00:09:12.119
+logical query operators like AND, OR, XOR, and NOT.
+
+00:09:12.120 --> 00:09:14.199
+Once you run a search query,
+
+00:09:14.200 --> 00:09:16.479
+a "*HyRolo*" buffer is opened
+
+00:09:16.480 --> 00:09:18.159
+with the query's results.
+
+00:09:18.160 --> 00:09:20.439
+And this is a read-only-mode buffer
+
+00:09:20.440 --> 00:09:23.239
+with a few useful single-key action bindings
+
+00:09:23.240 --> 00:09:25.079
+for navigating the list of results
+
+00:09:25.080 --> 00:09:27.119
+which I will now demonstrate.
+
+00:09:27.120 --> 00:09:31.879
+By the way, I have now switched over
+
+00:09:31.880 --> 00:09:34.639
+to a larger example Rolo database that I have created
+
+00:09:34.640 --> 00:09:36.559
+to demonstrate more of the HyRolo features.
+
+00:09:36.560 --> 00:09:39.479
+The HyRolo search is available
+
+00:09:39.480 --> 00:09:40.679
+in the Hyperbole mini-buffer menu
+
+00:09:40.680 --> 00:09:42.239
+so it is always available to you.
+
+00:09:42.240 --> 00:09:46.959
+Start with the Hyperbole universal leader key C-h h
+
+00:09:46.960 --> 00:09:53.839
+then "r" for Rolo and "s" for search. That is C-h h r s.
+
+00:09:53.840 --> 00:09:56.039
+Now we are prompted for a search string:
+
+00:09:56.040 --> 00:10:02.519
+I type in "Alice Abelton", and when I press enter,
+
+00:10:02.520 --> 00:10:03.999
+the search results pop up
+
+00:10:04.000 --> 00:10:06.959
+and the number of results is printed in the mini-buffer.
+
+00:10:06.960 --> 00:10:09.599
+We could also enter a search expression
+
+00:10:09.600 --> 00:10:12.159
+similar to a Lisp S-expression
+
+00:10:12.160 --> 00:10:14.759
+with logical operators like AND or NOT,
+
+00:10:14.760 --> 00:10:19.279
+but you would not need to quote the search terms.
+
+00:10:19.280 --> 00:10:24.519
+So, for example (C-h h r s), I could write
+
+00:10:24.520 --> 00:10:30.279
+"(and university character)" within parentheses
+
+00:10:30.280 --> 00:10:31.959
+and this would find entries
+
+00:10:31.960 --> 00:10:33.799
+that only contain both of the words
+
+00:10:33.800 --> 00:10:35.759
+"university" and "character".
+
+00:10:35.760 --> 00:10:39.239
+For the most part, I only really ever use
+
+00:10:39.240 --> 00:10:41.719
+the ordinary string search without logical operators.
+
+00:10:41.720 --> 00:10:44.759
+So as you can see, a search result buffer
+
+00:10:44.760 --> 00:10:47.239
+called "*HyRolo*" has popped up
+
+00:10:47.240 --> 00:10:48.359
+with all of the matching entries.
+
+00:10:48.360 --> 00:10:51.319
+And the search results buffer is a read-only buffer
+
+00:10:51.320 --> 00:10:54.319
+with several useful navigation key bindings:
+
+00:10:54.320 --> 00:11:01.399
+I can press "o" to switch to "overview" mode,
+
+00:11:01.400 --> 00:11:03.959
+which shows all of the headings, but no content.
+
+00:11:03.960 --> 00:11:05.479
+This would include subheadings
+
+00:11:05.480 --> 00:11:07.959
+with like 2 stars in front of it or 3 stars
+
+00:11:07.960 --> 00:11:12.159
+I can press "a" to switch to "show all mode"
+
+00:11:12.160 --> 00:11:14.559
+which shows all of the content under each heading.
+
+00:11:14.560 --> 00:11:17.079
+If I know I am looking for a keyword
+
+00:11:17.080 --> 00:11:17.999
+in a top-level heading,
+
+00:11:18.000 --> 00:11:22.639
+I can press "t" to switch to the "top-level" view mode
+
+00:11:22.640 --> 00:11:25.439
+which shows only the top-level headings.
+
+00:11:25.440 --> 00:11:27.119
+As is always the case
+
+00:11:27.120 --> 00:11:28.879
+with the Emacs default key bindings,
+
+00:11:28.880 --> 00:11:32.359
+"n" and "p" move the cursor down and up lines,
+
+00:11:32.360 --> 00:11:34.519
+so I can navigate the cursor downward
+
+00:11:34.520 --> 00:11:37.599
+to an entry that looks interesting.
+
+00:11:37.600 --> 00:11:40.279
+I can press "s" to show the content
+
+00:11:40.280 --> 00:11:41.519
+of that particular entry.
+
+00:11:41.520 --> 00:11:44.799
+I can press "h" to hide the entry again.
+
+00:11:44.800 --> 00:11:49.479
+And I can press "e" or M-RET on the entry heading
+
+00:11:49.480 --> 00:11:53.279
+to "edit" that heading (that entry),
+
+00:11:53.280 --> 00:11:56.279
+which will open the Org-Mode file,
+
+00:11:56.280 --> 00:11:59.039
+that is, the Zettelkasten database file
+
+00:11:59.040 --> 00:12:01.759
+with the cursor at this particular entry.
+
+00:12:01.760 --> 00:12:07.639
+Be warned that editing an entry creates a new timestamp,
+
+00:12:07.640 --> 00:12:10.159
+which I do not need, and there is currently
+
+00:12:10.160 --> 00:12:12.039
+no way to avoid this behavior.
+
+00:12:12.040 --> 00:12:15.199
+I work around this by simply using the undo command
+
+00:12:15.200 --> 00:12:20.039
+which removes the unwanted timestamp.
+
+00:12:20.040 --> 00:12:25.559
+And so that is how I use the HyRolo search functionality.
+
+00:12:25.560 --> 00:12:31.999
+Now... since the most important aspect of Zettelkasten
+
+00:12:32.000 --> 00:12:33.839
+is linking ideas in the database,
+
+00:12:33.840 --> 00:12:37.039
+how do we actually make this work in HyRolo?
+
+00:12:37.040 --> 00:12:40.039
+So this is the secret sauce of Hyperbole,
+
+00:12:40.040 --> 00:12:41.119
+and the key take-away
+
+00:12:41.120 --> 00:12:43.279
+for this presentation (as I said earlier).
+
+00:12:43.280 --> 00:12:46.679
+Hyperbole provides markup syntax
+
+00:12:46.680 --> 00:12:50.079
+for executing arbitrary Emacs commands
+
+00:12:50.080 --> 00:12:53.759
+so you can link HyRolo entries together
+
+00:12:53.760 --> 00:12:56.039
+using the HyRolo search function.
+
+00:12:56.040 --> 00:12:58.279
+Let me demonstrate this now.
+
+00:12:58.280 --> 00:13:03.879
+I am back in my example HyRolo database,
+
+00:13:03.880 --> 00:13:06.239
+and if you take a closer look
+
+00:13:06.240 --> 00:13:11.399
+you can see some of the hyperlinks
+
+00:13:11.400 --> 00:13:13.119
+that I already created
+
+00:13:13.120 --> 00:13:15.839
+with the angle-round bracket syntax.
+
+00:13:15.840 --> 00:13:19.279
+Now with the cursor inside of these brackets,
+
+00:13:19.280 --> 00:13:23.439
+I can press M-RET to "click" on this link.
+
+00:13:23.440 --> 00:13:27.799
+As you can see, the search query
+
+00:13:27.800 --> 00:13:32.039
+corresponding to this hyperlink here has executed
+
+00:13:32.040 --> 00:13:34.919
+and popped up the "*HyRolo*" search results buffer.
+
+00:13:34.920 --> 00:13:38.719
+There is only one linked entry,
+
+00:13:38.720 --> 00:13:41.399
+but the list of ideas that are produced
+
+00:13:41.400 --> 00:13:43.759
+by the search query in this buffer here
+
+00:13:43.760 --> 00:13:45.639
+are the list of all of the other ideas
+
+00:13:45.640 --> 00:13:47.799
+that are related to this hyperlink
+
+00:13:47.800 --> 00:13:49.479
+that we just clicked on here.
+
+00:13:49.480 --> 00:13:52.199
+(Let me get rid of the other window...)
+
+00:13:52.200 --> 00:13:55.239
+Now from within this "*HyRolo*" buffer,
+
+00:13:55.240 --> 00:13:57.839
+I can navigate to another hyperlink...
+
+00:13:57.840 --> 00:14:03.759
+and clicking on that updates the "*HyRolo*" buffer
+
+00:14:03.760 --> 00:14:04.799
+with new results again.
+
+00:14:04.800 --> 00:14:10.119
+I can just keep navigating through
+
+00:14:10.120 --> 00:14:13.959
+all the Zettelkasten entries in this way.
+
+00:14:13.960 --> 00:14:18.639
+And so this is it.
+
+00:14:18.640 --> 00:14:22.719
+This is my simple but effective Zettelkasten,
+
+00:14:22.720 --> 00:14:25.119
+constructed entirely with the functionality
+
+00:14:25.120 --> 00:14:26.799
+already built-in to Hyperbole.
+
+00:14:26.800 --> 00:14:32.599
+In the remaining time,
+
+00:14:32.600 --> 00:14:36.999
+I'd like to talk about how Hyperbole hyperlinks work,
+
+00:14:37.000 --> 00:14:38.799
+because it's slightly different
+
+00:14:38.800 --> 00:14:40.759
+from how hyperlinks work in Org Mode
+
+00:14:40.760 --> 00:14:49.199
+or with the Emacs clickable text properties.
+
+00:14:49.200 --> 00:14:52.239
+The easiest way to create a hyperlink button
+
+00:14:52.240 --> 00:14:55.279
+that runs an Emacs command
+
+00:14:55.280 --> 00:14:59.479
+is simply to type the Emacs command as an S-expression,
+
+00:14:59.480 --> 00:15:03.399
+but with angle brackets instead of parentheses.
+
+00:15:03.400 --> 00:15:05.679
+If you were looking closely,
+
+00:15:05.680 --> 00:15:08.639
+you probably already saw a hyperlink of this form,
+
+00:15:08.640 --> 00:15:10.559
+an angle-bracketed Emacs command.
+
+00:15:10.560 --> 00:15:13.159
+This hyperlink simply calls
+
+00:15:13.160 --> 00:15:18.079
+the "hyrolo-fgrep" function with this string argument.
+
+00:15:18.080 --> 00:15:20.839
+and so clicking on this button
+
+00:15:20.840 --> 00:15:23.119
+is equivalent to running a HyRolo search
+
+00:15:23.120 --> 00:15:27.319
+with the C-h h r s key sequence.
+
+00:15:27.320 --> 00:15:31.399
+As you can see, clicking on it
+
+00:15:31.400 --> 00:15:32.919
+produced the search results
+
+00:15:32.920 --> 00:15:35.079
+for entries associated with that string query.
+
+00:15:35.080 --> 00:15:41.079
+It's also possible to label an action
+
+00:15:41.080 --> 00:15:43.599
+with a so-called "implicit link",
+
+00:15:43.600 --> 00:15:47.079
+and that's this angle-and-square bracketed notation.
+
+00:15:47.080 --> 00:15:51.999
+If I click on this button,
+
+00:15:52.000 --> 00:15:54.159
+it will activate this action
+
+00:15:54.160 --> 00:16:01.359
+to the right of the colon separator,
+
+00:16:01.360 --> 00:16:03.639
+and there are the relevant search results
+
+00:16:03.640 --> 00:16:04.679
+from that string query.
+
+00:16:04.680 --> 00:16:09.119
+Finally, there are "explicit links",
+
+00:16:09.120 --> 00:16:11.239
+which I find to be especially useful
+
+00:16:11.240 --> 00:16:12.599
+for the Zettelkasten method.
+
+00:16:12.600 --> 00:16:15.239
+I've already shown an example
+
+00:16:15.240 --> 00:16:17.079
+of using an explicit link before.
+
+00:16:17.080 --> 00:16:20.759
+What makes explicit links so useful is, firstly,
+
+00:16:20.760 --> 00:16:23.919
+that the button works with just the label alone.
+
+00:16:23.920 --> 00:16:26.599
+There is no need to write an S-expression or anything.
+
+00:16:26.600 --> 00:16:28.919
+You can write the link label
+
+00:16:28.920 --> 00:16:31.959
+inline with the body text of the idea.
+
+00:16:31.960 --> 00:16:34.879
+(For example, like this.)
+
+00:16:34.880 --> 00:16:38.999
+Explicit links are identified by their label,
+
+00:16:39.000 --> 00:16:40.839
+so they are especially good for
+
+00:16:40.840 --> 00:16:43.119
+the names of people and places.
+
+00:16:43.120 --> 00:16:46.399
+By the way, this Zettelkasten database is for
+
+00:16:46.400 --> 00:16:47.919
+a fictional story I started writing
+
+00:16:47.920 --> 00:16:50.079
+for the purpose of demonstrating HyRolo
+
+00:16:50.080 --> 00:16:52.879
+in this presentation, and I had so much fun writing it
+
+00:16:52.880 --> 00:16:54.999
+that I may actually continue developing this story.
+
+00:16:55.000 --> 00:16:58.639
+Anyway, let's create a new explicit link
+
+00:16:58.640 --> 00:17:01.679
+and a new idea entry for a character in the story.
+
+00:17:01.680 --> 00:17:10.239
+So suppose I want to create a new idea node entry
+
+00:17:10.240 --> 00:17:11.959
+for this fictional character here,
+
+00:17:11.960 --> 00:17:15.359
+and I'll also want to link this entry to that node.
+
+00:17:15.360 --> 00:17:17.839
+Since hyperlinks are just string search,
+
+00:17:17.840 --> 00:17:19.799
+we don't actually need to have
+
+00:17:19.800 --> 00:17:22.279
+an entry in the database for this character.
+
+00:17:22.280 --> 00:17:24.879
+The worst that can happen is that the hyperlink
+
+00:17:24.880 --> 00:17:27.319
+executes a search that returns no results.
+
+00:17:27.320 --> 00:17:29.079
+So it's OK to create the hyperlink
+
+00:17:29.080 --> 00:17:31.879
+before we have an actual entry for this person.
+
+00:17:31.880 --> 00:17:36.719
+(I'll just M-w copy the name.)
+
+00:17:36.720 --> 00:17:40.919
+Now I use the universal Hyperbole leader key C-h h,
+
+00:17:40.920 --> 00:17:44.519
+and then "e" for "explicit links"
+
+00:17:44.520 --> 00:17:49.359
+and "c" for "create". That's C-h h e c.
+
+00:17:49.360 --> 00:17:52.639
+We are prompted for an entry label
+
+00:17:52.640 --> 00:17:56.119
+but it defaults to the text highlighted by the region,
+
+00:17:56.120 --> 00:17:57.959
+so I just press enter.
+
+00:17:57.960 --> 00:18:00.479
+Now it prompts for a button type,
+
+00:18:00.480 --> 00:18:03.119
+so I select "hyrolo-fgrep"
+
+00:18:03.120 --> 00:18:06.479
+(and there's Orderless helping me go faster),
+
+00:18:06.480 --> 00:18:10.319
+and since "hyrolo-fgrep" requires
+
+00:18:10.320 --> 00:18:12.679
+a string argument for the search query,
+
+00:18:12.680 --> 00:18:14.479
+I am prompted for the query string.
+
+00:18:14.480 --> 00:18:21.839
+I'll type in "character:", (yank "Kerri Katz's" name)
+
+00:18:21.840 --> 00:18:26.839
+and there we are, the link has been created, and
+
+00:18:26.840 --> 00:18:31.159
+(let me just get rid of the # character)
+
+00:18:31.160 --> 00:18:32.719
+I can try it out.
+
+00:18:32.720 --> 00:18:36.199
+There's no search results. That's fine.
+
+00:18:36.200 --> 00:18:38.959
+We haven't created an idea entry yet
+
+00:18:38.960 --> 00:18:40.799
+for this character now.
+
+00:18:40.800 --> 00:18:43.399
+So let's go ahead and do that now.
+
+00:18:43.400 --> 00:18:45.679
+If we remember how to create a new idea,
+
+00:18:45.680 --> 00:18:52.359
+it's C-h h r a, and then I type "character:"
+
+00:18:52.360 --> 00:18:56.799
+and then yank the name again.
+
+00:18:56.800 --> 00:18:58.399
+Now a new node has been created,
+
+00:18:58.400 --> 00:19:04.359
+and I can start describing this character.
+
+00:19:04.360 --> 00:19:08.839
+Notice that I like to precede my characters
+
+00:19:08.840 --> 00:19:11.479
+with the keyword "character:" colon.
+
+00:19:11.480 --> 00:19:14.919
+This technique helps me to create hyperlinks
+
+00:19:14.920 --> 00:19:16.999
+using more descriptive search queries
+
+00:19:17.000 --> 00:19:19.879
+that return fewer but more useful search results.
+
+00:19:19.880 --> 00:19:23.839
+And finally, I can create an explicit link
+
+00:19:23.840 --> 00:19:26.039
+from this character back to
+
+00:19:26.040 --> 00:19:28.839
+the other character (her boyfriend).
+
+00:19:28.840 --> 00:19:31.159
+I just type in "<(Bertrand Becket)>",
+
+00:19:31.160 --> 00:19:37.039
+and this explicit link has already been created
+
+00:19:37.040 --> 00:19:39.679
+so I don't need to create it again. It just works.
+
+00:19:39.680 --> 00:19:41.879
+Hyperbole identifies buttons by their label,
+
+00:19:41.880 --> 00:19:44.719
+so as long as an explicit link button with that label
+
+00:19:44.720 --> 00:19:46.039
+has been created before,
+
+00:19:46.040 --> 00:19:51.079
+I just can type in the button with markup by hand,
+
+00:19:51.080 --> 00:19:53.279
+and then I can just use it.
+
+00:19:53.280 --> 00:19:57.839
+Now I am back to the search results
+
+00:19:57.840 --> 00:19:59.319
+for the boyfriend character.
+
+00:19:59.320 --> 00:20:04.159
+I hope you can see how minimal but useful
+
+00:20:04.160 --> 00:20:07.759
+is this particular Zettelkasten technique I have
+
+00:20:07.760 --> 00:20:10.559
+that uses this "HyRolo".
+
+00:20:10.560 --> 00:20:19.359
+I should also make clear that Hyperbole explicit links
+
+00:20:19.360 --> 00:20:22.279
+are encoded in a separate file in the same directory
+
+00:20:22.280 --> 00:20:24.279
+as the Zettelkasten flat-file database.
+
+00:20:24.280 --> 00:20:37.079
+(So, let's go back to that and C-x C-f ".hypb").
+
+00:20:37.080 --> 00:20:41.239
+You should not edit this file by hand,
+
+00:20:41.240 --> 00:20:43.599
+but it is human readable,
+
+00:20:43.600 --> 00:20:45.399
+so it works well with Git
+
+00:20:45.400 --> 00:20:47.079
+and other revision control systems.
+
+00:20:47.080 --> 00:20:49.559
+Whenever an explicit link is activated,
+
+00:20:49.560 --> 00:20:52.559
+it consults this file and runs the associated action,
+
+00:20:52.560 --> 00:20:55.839
+which, in the Zettelkasten use case,
+
+00:20:55.840 --> 00:20:58.799
+will always be to run a HyRolo search query.
+
+00:20:58.800 --> 00:21:02.039
+The advantage of keeping a separate table of links
+
+00:21:02.040 --> 00:21:03.919
+is that you can edit the link action
+
+00:21:03.920 --> 00:21:06.999
+(that is, the search query) in just one place,
+
+00:21:07.000 --> 00:21:10.559
+and the updated button action works everywhere
+
+00:21:10.560 --> 00:21:12.479
+without having to change any other files.
+
+00:21:12.480 --> 00:21:18.399
+So, that is all for today.
+
+00:21:18.400 --> 00:21:20.519
+Thank you so much for listening to my talk.
+
+00:21:20.520 --> 00:21:23.079
+I'll be available for questions
+
+00:21:23.080 --> 00:21:24.919
+for the next 20 minutes or so.
+
+00:21:24.920 --> 00:21:27.959
+If there are any questions that I cannot answer,
+
+00:21:27.960 --> 00:21:29.439
+you will have a chance to ask
+
+00:21:29.440 --> 00:21:31.799
+the author of Hyperbole himself, Bob Weiner,
+
+00:21:31.800 --> 00:21:34.239
+later today after his presentation.
+
+00:21:34.240 --> 00:21:43.920
+Thanks for your attention!
diff --git a/2022/captions/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt b/2022/captions/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt
new file mode 100644
index 00000000..007fa710
--- /dev/null
+++ b/2022/captions/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt
@@ -0,0 +1,29 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:32.839
+General and Development tracks
+
+00:00:32.840 --> 00:01:02.119
+Conversations
+
+00:01:02.120 --> 00:01:30.679
+Etherpad
+
+00:01:31.600 --> 00:02:01.359
+Internet Relay Chat
+
+00:02:01.360 --> 00:02:22.439
+Accessibility and open captions
+
+00:02:22.440 --> 00:02:34.519
+status.emacsconf.org, #emacsconf-org
+
+00:02:34.520 --> 00:02:42.959
+Guidelines for conduct
+
+00:02:42.960 --> 00:03:05.359
+Recordings
+
+00:03:05.360 --> 00:03:20.720
+Let's have fun
diff --git a/2022/captions/emacsconf-2022-sat-open--opening-remarks--main.vtt b/2022/captions/emacsconf-2022-sat-open--opening-remarks--main.vtt
new file mode 100644
index 00000000..2fc69a17
--- /dev/null
+++ b/2022/captions/emacsconf-2022-sat-open--opening-remarks--main.vtt
@@ -0,0 +1,273 @@
+WEBVTT captioned by sachac
+
+NOTE General and Development tracks
+#+OUTPUT: /home/sacha/proj/emacsconf/emacsconf-2022-sat-open--opening-remarks--main.webm
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-20-35.png]]
+
+00:00:00.000 --> 00:00:03.519
+Welcome to EmacsConf 2022, where we get to find out
+
+00:00:03.520 --> 00:00:06.239
+just how crazy a text editor can get.
+
+00:00:06.240 --> 00:00:08.319
+There were so many interesting talks
+
+00:00:08.320 --> 00:00:11.319
+that we couldn't figure out how to fit them in two days,
+
+00:00:11.320 --> 00:00:14.119
+so this year we're experimenting with having two tracks.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-29-06.png]]
+
+00:00:14.120 --> 00:00:16.119
+There's a General track and a Development track,
+
+00:00:16.120 --> 00:00:17.959
+but really, you'll probably find
+
+00:00:17.960 --> 00:00:19.599
+interesting things on both tracks
+
+00:00:19.600 --> 00:00:22.159
+no matter what your level of experience is,
+
+00:00:22.160 --> 00:00:25.079
+so don't feel limited to one or the other.
+
+00:00:25.080 --> 00:00:26.999
+If we all figure out this track thing together,
+
+00:00:27.000 --> 00:00:29.879
+that could mean being able to have even more Emacs talks
+
+00:00:29.880 --> 00:00:32.839
+next year, so let's give it a try!
+
+NOTE Conversations
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-22-47.png]]
+
+00:00:32.840 --> 00:00:35.719
+The best parts of EmacsConf are the conversations.
+
+00:00:35.720 --> 00:00:38.279
+The wiki has a page on how to watch and participate,
+
+00:00:38.280 --> 00:00:40.839
+and I'll give you a quick overview as well.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-23-52.png]]
+
+00:00:40.840 --> 00:00:43.999
+You can watch both streams at live.emacsconf.org
+
+00:00:44.000 --> 00:00:46.279
+using free and open source software.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_01-00-29.png]]
+
+00:00:46.280 --> 00:00:48.199
+The schedule shows the General track on top
+
+00:00:48.200 --> 00:00:49.959
+and the Development track on the bottom,
+
+00:00:49.960 --> 00:00:52.159
+so you can see what else is going on.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-24-24.png]]
+
+00:00:52.160 --> 00:00:54.559
+The track pages have quick shortcuts so that you can
+
+00:00:54.560 --> 00:00:57.359
+find out more about talks, open the Etherpads,
+
+00:00:57.360 --> 00:01:00.799
+and join the Q&A sessions. The watch page has more tips
+
+00:01:00.800 --> 00:01:02.119
+on how to make the most of Q&A.
+
+NOTE Etherpad
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-24-44.png]]
+
+00:01:02.120 --> 00:01:05.759
+If you can, please add notes and ask questions
+
+00:01:05.760 --> 00:01:08.519
+in the Etherpad for the talk. That makes it easier
+
+00:01:08.520 --> 00:01:10.079
+for everyone to share their notes,
+
+00:01:10.080 --> 00:01:13.119
+and speakers and hosts can read the questions from there.
+
+00:01:13.120 --> 00:01:16.039
+We'll copy the notes to the talk pages afterwards.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-25-06.png]]
+
+00:01:16.040 --> 00:01:18.319
+We have one pad for each talk this year,
+
+00:01:18.320 --> 00:01:20.919
+so you can follow the links to get to the next one
+
+00:01:20.920 --> 00:01:23.959
+or go back to the schedule and get the link from there.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-25-27.png]]
+
+00:01:23.960 --> 00:01:25.599
+If you have general feedback about
+
+00:01:25.600 --> 00:01:27.759
+the conference itself, please put it in
+
+00:01:27.760 --> 00:01:30.679
+pad.emacsconf.org/2022 .
+
+NOTE Internet Relay Chat
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-25-47.png]]
+
+00:01:31.600 --> 00:01:34.479
+Internet Relay Chat or IRC can be another great way
+
+00:01:34.480 --> 00:01:37.279
+to be part of lots of conversations.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-26-04.png]]
+
+00:01:37.280 --> 00:01:40.319
+You can use chat.emacsconf.org to join the IRC channels
+
+00:01:40.320 --> 00:01:43.199
+through your web browser. The tabs on the left can help you
+
+00:01:43.200 --> 00:01:45.239
+switch between the different channels.
+
+00:01:45.240 --> 00:01:47.719
+There's #emacsconf-gen for the General track
+
+00:01:47.720 --> 00:01:50.239
+and #emacsconf-dev for the Development track.
+
+00:01:50.240 --> 00:01:53.439
+If you need to reach us, you can join #emacsconf-org
+
+00:01:53.440 --> 00:01:57.879
+or e-mail emacsconf-org-private@gnu.org.
+
+00:01:57.880 --> 00:02:01.359
+You can use #emacsconf for hallway conversations.
+
+NOTE Accessibility and open captions
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-26-32.png]]
+
+00:02:01.360 --> 00:02:03.919
+Once again, we're going to be streaming with open captions
+
+00:02:03.920 --> 00:02:06.639
+for most of the talks this year, thanks to our speakers and
+
+00:02:06.640 --> 00:02:09.919
+captioning volunteers. The captioned talks are indicated
+
+00:02:09.920 --> 00:02:12.519
+on the schedule, and with any luck, we'll be posting
+
+00:02:12.520 --> 00:02:16.119
+transcripts on talk pages shortly after the talks start.
+
+00:02:16.120 --> 00:02:18.919
+If you need additional accommodations, please let us know
+
+00:02:18.920 --> 00:02:20.319
+in #emacsconf-org and we'll see
+
+00:02:20.320 --> 00:02:22.439
+if we can make things happen.
+
+NOTE status.emacsconf.org, #emacsconf-org
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-26-55.png]]
+
+00:02:22.440 --> 00:02:26.319
+If something goes down, we'll update status.emacsconf.org.
+
+00:02:26.320 --> 00:02:27.799
+If it doesn't look like we've noticed yet,
+
+00:02:27.800 --> 00:02:31.599
+please let us know in the #emacsconf-org IRC channel,
+
+00:02:31.600 --> 00:02:34.519
+where we will be quietly panicking.
+
+NOTE Guidelines for conduct
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-27-19.png]]
+
+00:02:34.520 --> 00:02:36.959
+In all of these conversations, please keep in mind
+
+00:02:36.960 --> 00:02:39.759
+our guidelines for conduct. You can find them on the wiki,
+
+00:02:39.760 --> 00:02:42.959
+and they basically boil down to: please be nice. Thank you!
+
+NOTE Recordings
+#+CAPTION:
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-27-53.png]]
+
+00:02:42.960 --> 00:02:47.519
+We'll be posting the prerecorded videos as soon as possible.
+
+00:02:47.520 --> 00:02:50.039
+Assuming things go well, you might be able to check out
+
+00:02:50.040 --> 00:02:52.719
+quick replays on the Toobnix channel, which you can
+
+00:02:52.720 --> 00:02:55.679
+find on the watch page in the wiki. We'll post the live
+
+00:02:55.680 --> 00:02:58.759
+talks and Q&A sessions some time after the conference.
+
+00:02:58.760 --> 00:03:01.799
+If you'd like to get an update, you can subscribe to
+
+00:03:01.800 --> 00:03:05.359
+the emacsconf-discuss mailing list.
+
+NOTE Let's have fun
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-28-14.png]]
+
+00:03:05.360 --> 00:03:06.599
+All right, let's get going.
+
+00:03:06.600 --> 00:03:09.639
+Leo Vivier is going to be hosting the general track,
+
+00:03:09.640 --> 00:03:12.399
+and Amin Bandali will host the development track.
+
+00:03:12.400 --> 00:03:15.319
+The other volunteers and I will run around mostly backstage,
+
+00:03:15.320 --> 00:03:18.159
+and you'll probably meet us in the closing remarks.
+
+00:03:18.160 --> 00:03:20.720
+Let's have fun at EmacsConf 2022!
diff --git a/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt b/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt
new file mode 100644
index 00000000..6c118a7b
--- /dev/null
+++ b/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:51.919
+Introduction
+
+00:00:51.920 --> 00:02:30.679
+Packages: Lectorg, Reorg, HBH
+
+00:02:30.680 --> 00:03:14.919
+Org Mode
+
+00:03:14.920 --> 00:04:18.679
+The ecosystem of Lectorg: Elisp and Python
+
+00:04:18.680 --> 00:04:49.159
+How Lectorg works
+
+00:04:49.160 --> 00:06:15.799
+Math
+
+00:06:15.800 --> 00:07:25.759
+Business
+
+00:07:25.760 --> 00:08:08.480
+Conclusion
diff --git a/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt b/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt
new file mode 100644
index 00000000..92b99925
--- /dev/null
+++ b/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt
@@ -0,0 +1,383 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.879
+Taking notes on a computer can be challenging,
+
+00:00:04.880 --> 00:00:08.279
+especially if you compare computer notes
+
+00:00:08.280 --> 00:00:11.959
+with handwritten notes. When you're handwriting,
+
+00:00:11.960 --> 00:00:16.159
+you don't focus as much on taking those notes.
+
+00:00:16.160 --> 00:00:19.559
+Well, you don't focus as much on *how* you take the notes,
+
+00:00:19.560 --> 00:00:24.119
+you more so focus on what you're taking.
+
+00:00:24.120 --> 00:00:27.719
+You don't get that same experience
+
+00:00:27.720 --> 00:00:30.519
+if you're writing your notes on a computer.
+
+00:00:30.520 --> 00:00:32.119
+When writing notes on a computer,
+
+00:00:32.120 --> 00:00:38.439
+you mostly focus on typing or alignment.
+
+00:00:38.440 --> 00:00:42.159
+Those are things that are kind of solved already
+
+00:00:42.160 --> 00:00:45.359
+by certain software such as Org Mode,
+
+00:00:45.360 --> 00:00:48.599
+which is fantastic when it comes to note-taking,
+
+00:00:48.600 --> 00:00:51.919
+but I still believe it could be much better.
+
+NOTE Packages: Lectorg, Reorg, HBH
+
+00:00:51.920 --> 00:00:56.639
+That's why I've developed the package called Lectorg.
+
+00:00:56.640 --> 00:01:01.799
+It's a collection of scripts and snippets which allow you
+
+00:01:01.800 --> 00:01:04.959
+to improve your note-taking experience on the computer,
+
+00:01:04.960 --> 00:01:09.919
+of course, making you more focused on the subject
+
+00:01:09.920 --> 00:01:14.439
+rather than the process of taking notes.
+
+00:01:14.440 --> 00:01:16.559
+So why use Emacs? Well, again,
+
+00:01:16.560 --> 00:01:18.719
+if compared with other software,
+
+00:01:18.720 --> 00:01:21.799
+it has a lot more customizability
+
+00:01:21.800 --> 00:01:24.679
+and it can also unify pretty much anything you need
+
+00:01:24.680 --> 00:01:31.079
+in student life or work life into one place.
+
+00:01:31.080 --> 00:01:35.639
+The problems that Lectorg solves are kind of,
+
+00:01:35.640 --> 00:01:37.879
+as I mentioned, already solved partially
+
+00:01:37.880 --> 00:01:40.479
+by Org Mode itself.
+
+00:01:40.480 --> 00:01:44.599
+What I've done is simply make a bunch of additions
+
+00:01:44.600 --> 00:01:47.359
+to Org Mode through an external package,
+
+00:01:47.360 --> 00:01:51.279
+but I've also developed other sub-modules,
+
+00:01:51.280 --> 00:01:54.439
+one of them being HBH, which allows me
+
+00:01:54.440 --> 00:02:01.399
+to easily plan out my days HBH, hour by hour,
+
+00:02:01.400 --> 00:02:04.679
+therefore I can plan out my days on an hourly basis
+
+00:02:04.680 --> 00:02:09.439
+practically. But I've also built something called Reorg
+
+00:02:09.440 --> 00:02:11.999
+which, for those of you that are familiar
+
+00:02:12.000 --> 00:02:14.599
+with the Remarkable tablet, allows you
+
+00:02:14.600 --> 00:02:19.999
+to integrate notes from your Remarkable into Emacs--
+
+00:02:20.000 --> 00:02:22.439
+into your Org Mode notes basically.
+
+00:02:22.440 --> 00:02:25.199
+Now I believe there's already another talk on integrating
+
+00:02:25.200 --> 00:02:26.919
+handwritten notes into Emacs,
+
+00:02:26.920 --> 00:02:30.679
+so I won't get too much into that.
+
+NOTE Org Mode
+
+00:02:30.680 --> 00:02:36.079
+So again, at the heart of Lectorg is Org Mode,
+
+00:02:36.080 --> 00:02:38.479
+which for those of you that might not be familiar,
+
+00:02:38.480 --> 00:02:43.759
+Org Mode is one of the best pieces of software
+
+00:02:43.760 --> 00:02:49.039
+when it comes to basically capturing any sort of text,
+
+00:02:49.040 --> 00:02:51.559
+managing that text, exporting it
+
+00:02:51.560 --> 00:02:53.959
+into various different formats,
+
+00:02:53.960 --> 00:02:57.279
+which is perfect for taking notes
+
+00:02:57.280 --> 00:02:59.399
+because you can either export them,
+
+00:02:59.400 --> 00:03:02.119
+take them on the go if you don't have access
+
+00:03:02.120 --> 00:03:03.879
+to your computer all the time,
+
+00:03:03.880 --> 00:03:05.839
+or you can share them with friends, which...
+
+00:03:05.840 --> 00:03:11.359
+Well, that is somewhat self-explanatory
+
+00:03:11.360 --> 00:03:14.919
+in how that can help you or others.
+
+NOTE The ecosystem of Lectorg: Elisp and Python
+
+00:03:14.920 --> 00:03:16.559
+Now the ecosystem of Lectorg,
+
+00:03:16.560 --> 00:03:21.719
+it's a bit chaotic as of right now. It's a package itself,
+
+00:03:21.720 --> 00:03:25.759
+Lectorg.el, which also partially relies on
+
+00:03:25.760 --> 00:03:27.759
+a collection of Python scripts
+
+00:03:27.760 --> 00:03:30.039
+as I didn't have that much time
+
+00:03:30.040 --> 00:03:34.119
+to develop the software strictly in Elisp,
+
+00:03:34.120 --> 00:03:37.599
+but it still gets the job done,
+
+00:03:37.600 --> 00:03:43.719
+and I believe that there is no speed hindrance.
+
+00:03:43.720 --> 00:03:46.519
+Now to further improve Lectorg,
+
+00:03:46.520 --> 00:03:49.279
+I'd love to ask for your help
+
+00:03:49.280 --> 00:03:53.079
+if you have encountered any sort of issue
+
+00:03:53.080 --> 00:03:56.839
+when it comes to note-taking or academics in general,
+
+00:03:56.840 --> 00:03:59.759
+I would love to integrate your solution
+
+00:03:59.760 --> 00:04:04.399
+(or if you don't have one, we can come up with one)
+
+00:04:04.400 --> 00:04:07.519
+into Lectorg. Also, if anyone would be willing
+
+00:04:07.520 --> 00:04:13.439
+to transcribe those Python scripts
+
+00:04:13.440 --> 00:04:18.679
+into a more Lisp approach, then that'd be fabulous.
+
+NOTE How Lectorg works
+
+00:04:18.680 --> 00:04:24.319
+So let's look at how Lectorg works in practice.
+
+00:04:24.320 --> 00:04:26.039
+We'll look at two examples,
+
+00:04:26.040 --> 00:04:28.319
+one of taking notes for math
+
+00:04:28.320 --> 00:04:33.319
+and the other for business, I believe.
+
+00:04:33.320 --> 00:04:36.039
+Now I have to mention that all of the things
+
+00:04:36.040 --> 00:04:38.279
+that I do in that example
+
+00:04:38.280 --> 00:04:43.919
+do not cover all the functions and features of Lectorg.
+
+00:04:43.920 --> 00:04:49.159
+There is decent documentation on the Lectorg GitLab page,
+
+NOTE Math
+
+00:04:49.160 --> 00:04:57.519
+so do check that out for further reference.
+
+00:04:57.520 --> 00:04:59.319
+For our first example, we're going to start off
+
+00:04:59.320 --> 00:05:04.239
+with taking notes for statistics. Now what I'm doing here
+
+00:05:04.240 --> 00:05:06.479
+is opening Lectorg Hub, which allows me
+
+00:05:06.480 --> 00:05:10.879
+to associate certain resources with this particular course.
+
+00:05:10.880 --> 00:05:15.679
+Here, I've opened the book which I have associated
+
+00:05:15.680 --> 00:05:19.319
+with this course, and I'm going to go ahead
+
+00:05:19.320 --> 00:05:22.519
+and start taking some notes
+
+00:05:22.520 --> 00:05:26.639
+on the cumulative distribution function here.
+
+00:05:26.640 --> 00:05:29.999
+Now what OrgMode allows you to do
+
+00:05:30.000 --> 00:05:34.599
+is integrate LaTeX into regular text quite easily,
+
+00:05:34.600 --> 00:05:38.239
+preview it, and then later export it.
+
+00:05:38.240 --> 00:05:48.599
+Now here we can see the first usage of a snippet !m,
+
+00:05:48.600 --> 00:05:59.639
+which inserts a block for entering a LaTeX equation.
+
+00:05:59.640 --> 00:06:00.839
+What I'm trying to do here
+
+00:06:00.840 --> 00:06:04.999
+is take a screenshot of the figures in the book,
+
+00:06:05.000 --> 00:06:10.679
+which is done with org-download (not a part of Lectorg,
+
+00:06:10.680 --> 00:06:15.799
+but a very useful tool). Now that is it for math.
+
+NOTE Business
+
+00:06:15.800 --> 00:06:18.039
+Let's look at something a bit different.
+
+00:06:18.040 --> 00:06:20.199
+We're going to take a look at business,
+
+00:06:20.200 --> 00:06:24.519
+more specifically, taking notes on the product lifecycle.
+
+00:06:24.520 --> 00:06:27.559
+Here on the left, I have certain notes from class
+
+00:06:27.560 --> 00:06:31.079
+which are not complete.
+
+00:06:31.080 --> 00:06:34.679
+As you can see at the top, there's a comment
+
+00:06:34.680 --> 00:06:42.719
+also done using Lectorg which puts this file into a TODO
+
+00:06:42.720 --> 00:06:46.719
+so that I can get back to it whenever I want
+
+00:06:46.720 --> 00:06:48.879
+or schedule this TODO.
+
+00:06:48.880 --> 00:06:54.439
+Now I'm taking notes on a video lecture,
+
+00:06:54.440 --> 00:07:07.639
+which I've opened, again, through Lectorg hub.
+
+00:07:07.640 --> 00:07:09.759
+As you can see right now, I'm inserting
+
+00:07:09.760 --> 00:07:12.479
+another snippet for Plantuml,
+
+00:07:12.480 --> 00:07:15.319
+which immediately exports it to a file,
+
+00:07:15.320 --> 00:07:19.799
+and again I'm going to be using org-download here
+
+00:07:19.800 --> 00:07:25.759
+to insert another figure at the top.
+
+NOTE Conclusion
+
+00:07:25.760 --> 00:07:33.359
+I hope this demonstration was useful.
+
+00:07:33.360 --> 00:07:35.599
+Once again, it did not demonstrate everything.
+
+00:07:35.600 --> 00:07:37.839
+You can find more on GitLab.
+
+00:07:37.840 --> 00:07:44.399
+I hope some of you might consider using Lectorg
+
+00:07:44.400 --> 00:07:46.839
+in your academic life or perhaps even
+
+00:07:46.840 --> 00:07:51.319
+in some areas of business. I believe that is
+
+00:07:51.320 --> 00:07:53.759
+everything I have to demonstrate for today.
+
+00:07:53.760 --> 00:07:57.439
+Thank you for listening to this talk,
+
+00:07:57.440 --> 00:08:08.480
+have a nice rest of the day.
diff --git a/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt
new file mode 100644
index 00000000..b211c55f
--- /dev/null
+++ b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt
@@ -0,0 +1,32 @@
+WEBVTT captioned by Sebastian
+
+
+00:00:00.000 --> 00:00:24.000
+Introduction
+
+00:00:24.000 --> 00:03:21.000
+Q1 - Do you use flipping notes and do you keep them in org-roam?
+
+00:03:21.000 --> 00:06:00.000
+Q2 - Does it work only for PDFs or does it work for more formats?
+
+00:06:00.000 --> 00:07:04.000
+Q3 - Why use OrgNoter in place of Zotero PDF Reader?
+
+00:07:04.000 --> 00:08:16.000
+Q4 - Thoughts on the future of Zettelkasten
+
+00:08:16.000 --> 00:12:03.000
+Q4.5 - Collaborative Zettelkasten notes
+
+00:12:03.000 --> 00:15:26.000
+Q5 - How do you find a way to get a nice overview of multiple notes to rearrange them?
+
+00:15:26.000 --> 00:18:29.000
+Q6 - Can we use Zettelkasten for coding too?
+
+00:18:29.000 --> 00:19:33.000
+Q7 - Is Zetteldesk available in Melpa? - Yes
+
+00:19:33.000 --> 00:22:03.000
+Conclusion - thoughts about Zettelkasten
diff --git a/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.vtt b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.vtt
new file mode 100644
index 00000000..6ad95d62
--- /dev/null
+++ b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.vtt
@@ -0,0 +1,1232 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:06.000
+ I'm fine. So we can start, right?
+
+00:00:06.000 --> 00:00:09.100
+ Yeah, sure. I mean, you pretty much know the drill.
+
+00:00:09.100 --> 00:00:11.050
+ Everyone watching the show now already knows the drill. V
+
+00:00:11.050 --> 00:00:13.090
+idianus is going to read the questions. If you want to read
+
+00:00:13.090 --> 00:00:16.000
+ the questions on your own, you can open up the pad.
+
+00:00:16.000 --> 00:00:18.080
+ Otherwise, Vidianus will be reading the questions and
+
+00:00:18.080 --> 00:00:20.210
+ answering them in line. And I'll be making jazz in the
+
+00:00:20.210 --> 00:00:22.780
+ background whenever something doesn't work. So Vidianus,
+
+00:00:22.780 --> 00:00:24.000
+ the floor is yours.
+
+00:00:24.000 --> 00:00:32.310
+ Okay. So do you use flitting notes as well? Do you keep
+
+00:00:32.310 --> 00:00:33.780
+ them in the org room? And flitting notes are a very
+
+00:00:33.780 --> 00:00:35.580
+ interesting subject. In the initial draft of this talk, I
+
+00:00:35.580 --> 00:00:37.330
+ wanted to include flitting notes as well, but it would take
+
+00:00:37.330 --> 00:00:40.000
+ a bit too long. So I said, let's not do it.
+
+00:00:40.000 --> 00:00:43.980
+ I'm going to add a link here to my .files in the section
+
+00:00:43.980 --> 00:00:48.350
+ for flitting notes. But I can very quickly share my screen
+
+00:00:48.350 --> 00:00:52.970
+ for a moment and show you something about it. So give me a
+
+00:00:52.970 --> 00:00:54.000
+ moment.
+
+00:00:54.000 --> 00:01:00.000
+ Yes, you can do this.
+
+00:01:00.000 --> 00:01:05.000
+ Okay. So you see the screen now, I think?
+
+00:01:05.000 --> 00:01:08.000
+ Yes, I can see it.
+
+00:01:08.000 --> 00:01:13.590
+ So I have a key binding which opens my daily note. I have
+
+00:01:13.590 --> 00:01:17.490
+ some notes from other talks in EmacsConf and talks that I'm
+
+00:01:17.490 --> 00:01:21.400
+ going to miss due to the two tracks. Don't mind them. So I
+
+00:01:21.400 --> 00:01:28.000
+ write, for example, flitting note.
+
+00:01:28.000 --> 00:01:31.890
+ And I have a command down here which will automatically
+
+00:01:31.890 --> 00:01:35.760
+ give it a to do value. So let's say, for example, I'm
+
+00:01:35.760 --> 00:01:40.000
+ crossing it. It adds a tag to the current projects node,
+
+00:01:40.000 --> 00:01:44.840
+ which is essentially a node I have for things I want to do
+
+00:01:44.840 --> 00:01:46.000
+ right now.
+
+00:01:46.000 --> 00:01:52.590
+ It makes it an org-rem node. And then I can write something
+
+00:01:52.590 --> 00:01:59.360
+ here, blah, blah, blah. And if I go on org-rem node find,
+
+00:01:59.360 --> 00:02:04.000
+ actually, I need to save it first. It will appear here.
+
+00:02:04.000 --> 00:02:10.720
+ And then once I say it's done, it is not a node anymore. It
+
+00:02:10.720 --> 00:02:16.470
+ is removed here. This allows me to archive things. I can
+
+00:02:16.470 --> 00:02:21.320
+ stop the sharing now. This allows me to archive flitting
+
+00:02:21.320 --> 00:02:22.000
+ notes.
+
+00:02:22.000 --> 00:02:26.860
+ So I don't need -- because flitting notes are not something
+
+00:02:26.860 --> 00:02:31.740
+ that needs to remain my shell custom. I want them for some
+
+00:02:31.740 --> 00:02:34.000
+ point and then deleting them.
+
+00:02:34.000 --> 00:02:38.140
+ And this is done with org-journal and not org-rem-dailys
+
+00:02:38.140 --> 00:02:41.960
+ because with org-journal I can have this -- I make it a
+
+00:02:41.960 --> 00:02:45.000
+ node and then I remove it from a node.
+
+00:02:45.000 --> 00:02:48.620
+ While I don't think you can do that with org-rem-dailys,
+
+00:02:48.620 --> 00:02:52.020
+ the code for all of this is in the section I pasted on the
+
+00:02:52.020 --> 00:02:57.000
+ etherpad. And if you have any questions, you can email me.
+
+00:02:57.000 --> 00:03:11.240
+ >> Okay. >> Sorry, just to specify, all the contact
+
+00:03:11.240 --> 00:03:11.560
+ information will be available on the talk page. So be it
+
+00:03:11.560 --> 00:03:12.020
+ the email to Vidianos, also the pads, the recording,
+
+00:03:12.020 --> 00:03:14.590
+ everything will be available after the conference as soon
+
+00:03:14.590 --> 00:03:16.000
+ as we have the bandwidth for this.
+
+00:03:16.000 --> 00:03:18.950
+ So that's where you'll be able to find contact information.
+
+00:03:18.950 --> 00:03:21.000
+ Okay. You can keep going, Vidianos. Sorry for the inter
+
+00:03:21.000 --> 00:03:21.000
+ruption.
+
+00:03:21.000 --> 00:03:25.630
+ >> Okay. So the second question is if it works for PDFs
+
+00:03:25.630 --> 00:03:31.400
+ only or Word and Excel or EPUB, websites, CWW and YouTube.
+
+00:03:31.400 --> 00:03:37.520
+ So I'm not sure. Give me a moment to look at OrgNotor and
+
+00:03:37.520 --> 00:03:41.400
+ see if it says -- because I said I didn't remember. Use it
+
+00:03:41.400 --> 00:03:43.000
+ with PDFs typically.
+
+00:03:43.000 --> 00:03:48.370
+ >> Yes. From the top of my mind, I think OrgNotor works
+
+00:03:48.370 --> 00:03:53.580
+ with EPUB file via the package that is managed I think by
+
+00:03:53.580 --> 00:03:57.250
+ -- was it by Wasamasa? I can't remember actually now. But
+
+00:03:57.250 --> 00:03:59.000
+ at some point it was managed by Wasamasa.
+
+00:03:59.000 --> 00:04:07.550
+ He was probably watching right now and probably yelling at
+
+00:04:07.550 --> 00:04:16.000
+ me in the background. So I'll keep you posted on this. But
+
+00:04:16.000 --> 00:04:16.000
+ yes, the OrgNotor allows you mostly to take notes on PDF
+
+00:04:16.000 --> 00:04:16.000
+ via PDFView, but it also allows you to take notes on EPUB.
+
+00:04:16.000 --> 00:04:16.000
+ And they're working relatively well.
+
+00:04:16.000 --> 00:04:19.000
+ But as for the other -- yeah, go on, Vidianos.
+
+00:04:19.000 --> 00:04:22.840
+ >> I opened OrgNotor and it says it also is compatible with
+
+00:04:22.840 --> 00:04:27.000
+ DocView for Office, so Word, Excel and things like that.
+
+00:04:27.000 --> 00:04:30.430
+ >> Yeah. And otherwise, if you really want to take notes on
+
+00:04:30.430 --> 00:04:33.760
+ such documents, you can probably use either OrgConvert or
+
+00:04:33.760 --> 00:04:37.210
+ Pandoc to generate a document that would be editable within
+
+00:04:37.210 --> 00:04:40.200
+ OrgNotor. It shouldn't be too difficult to do so. And
+
+00:04:40.200 --> 00:04:43.400
+ usually it's mostly PDFs when you're working on research
+
+00:04:43.400 --> 00:04:45.000
+ stuff or stuff like this.
+
+00:04:45.000 --> 00:04:47.110
+ Anyway, sorry for interrupting. This is a topic very dear
+
+00:04:47.110 --> 00:04:49.570
+ to my heart as well because as you know, I have worked a
+
+00:04:49.570 --> 00:04:52.000
+ little bit in OrgGram and OrgNotor especially.
+
+00:04:52.000 --> 00:04:58.560
+ >> Yeah. So I think you should be able to do Word, Excel
+
+00:04:58.560 --> 00:05:03.000
+ and EPUB. I don't think it works with websites and it
+
+00:05:03.000 --> 00:05:07.240
+ definitely doesn't work with videos. Not sure if there's
+
+00:05:07.240 --> 00:05:09.000
+ other solutions for those.
+
+00:05:09.000 --> 00:05:11.950
+ >> I believe there is one. Sorry, I keep inserting myself
+
+00:05:11.950 --> 00:05:15.070
+ into the discussion. This is a very interesting topic. I
+
+00:05:15.070 --> 00:05:18.290
+ think Alfred Papa developed an Org package to capture a
+
+00:05:18.290 --> 00:05:21.570
+ webpage. So it's like an OrgCapture, you know, Org protocol
+
+00:05:21.570 --> 00:05:24.000
+ that allows you to capture stuff from your browser.
+
+00:05:24.000 --> 00:05:27.410
+ It allows you to capture a page and basically Pandocs the
+
+00:05:27.410 --> 00:05:31.050
+ results into an HTML, sorry, it Pandocs from HTML to an Org
+
+00:05:31.050 --> 00:05:34.860
+ document with a structure and a hierarchy. And this way you
+
+00:05:34.860 --> 00:05:38.030
+ can actually take notes on the documents and just have all
+
+00:05:38.030 --> 00:05:41.000
+ the features you would expect in an Org document.
+
+00:05:41.000 --> 00:05:49.460
+ >> I'll shut up now. This is your talk, not mine. If I
+
+00:05:49.460 --> 00:05:58.280
+ really wanted to talk about this, I should have made a talk
+
+00:05:58.280 --> 00:06:00.000
+. Anyway, back to you.
+
+00:06:00.000 --> 00:06:04.160
+ >> Okay. So next one. I used Take Notes on PDF with OrgNot
+
+00:06:04.160 --> 00:06:08.500
+er, but Zotero PDF Reader is also very nice. So, okay. Yeah,
+
+00:06:08.500 --> 00:06:12.280
+ I have seen the Zotero PDF Reader. It does look nice as
+
+00:06:12.280 --> 00:06:16.000
+ well, I would agree, but I have two problems with it.
+
+00:06:16.000 --> 00:06:21.310
+ One, Emacs key bindings don't work, and two, it's not Emacs
+
+00:06:21.310 --> 00:06:26.330
+. Basically, I think it's nice, but I want to use things
+
+00:06:26.330 --> 00:06:31.790
+ that are outside Emacs for as little as possible. And I use
+
+00:06:31.790 --> 00:06:36.310
+ it there because I haven't found a way in Emacs to save the
+
+00:06:36.310 --> 00:06:41.000
+ article somewhere and download the PDF automatically.
+
+00:06:41.000 --> 00:06:46.170
+ I know there is DOI Utils, which was mentioned by RC a few
+
+00:06:46.170 --> 00:06:51.610
+ moments ago as well, but it hasn't worked perfectly for me
+
+00:06:51.610 --> 00:06:56.730
+ in the past when I tried it, so I use Zotero for that, but
+
+00:06:56.730 --> 00:07:01.900
+ I wouldn't use it for the PDF Reader as well because I want
+
+00:07:01.900 --> 00:07:04.000
+ to use it in Emacs.
+
+00:07:04.000 --> 00:07:07.590
+ Next one. Thanks for saying that it was a great
+
+00:07:07.590 --> 00:07:12.500
+ presentation. My thoughts on the future of Zelle Casten. I
+
+00:07:12.500 --> 00:07:18.980
+ think Zelle Casten has a bright future, personally, because
+
+00:07:18.980 --> 00:07:24.000
+ it is plain text. Plain text will never go away, basically.
+
+00:07:24.000 --> 00:07:28.610
+ You will be able to use it forever, and also, Orgrom is
+
+00:07:28.610 --> 00:07:33.630
+ open source with a very vibrant community, so that won't go
+
+00:07:33.630 --> 00:07:39.640
+ away either anytime soon, I think. So, it probably has a
+
+00:07:39.640 --> 00:07:44.000
+ future, if you mean it that way.
+
+00:07:44.000 --> 00:07:49.480
+ And I think that, in general, it is a noting method that is
+
+00:07:49.480 --> 00:07:55.040
+ very efficient. I have used it for university the past few
+
+00:07:55.040 --> 00:08:01.300
+ years, and I have right now like 850 notes on it, and they
+
+00:08:01.300 --> 00:08:05.000
+ will probably only keep increasing.
+
+00:08:05.000 --> 00:08:11.250
+ So, I don't think it's going away. If you want to ask
+
+00:08:11.250 --> 00:08:16.000
+ anything else, we can talk more about it.
+
+00:08:16.000 --> 00:08:19.970
+ Actually, I do have something to add to this particular
+
+00:08:19.970 --> 00:08:24.010
+ point, because on the topic of Zelle Casten and how useful
+
+00:08:24.010 --> 00:08:27.470
+ it can be. Now, it's been a little while since Zelle Casten
+
+00:08:27.470 --> 00:08:32.630
+ really started exploding. I think in 2020, right when COVID
+
+00:08:32.630 --> 00:08:35.200
+ started, a lot of people started getting interested in Z
+
+00:08:35.200 --> 00:08:36.000
+elle Casten methods.
+
+00:08:36.000 --> 00:08:39.570
+ And ever since, we have a lot of software that were
+
+00:08:39.570 --> 00:08:43.940
+ released, including the ones we have in Orgrom. I'm going
+
+00:08:43.940 --> 00:08:47.940
+ to use Orgrom because it's the one I'm most familiar with
+
+00:08:47.940 --> 00:08:51.700
+ as a commentator, but we also have D-Notes by Prot and
+
+00:08:51.700 --> 00:08:54.000
+ other solutions as well.
+
+00:08:54.000 --> 00:08:58.310
+ And one thing that I'm currently working on, and a key area
+
+00:08:58.310 --> 00:09:02.240
+ of interest for me, is how do we use the concept of Zelle
+
+00:09:02.240 --> 00:09:06.700
+ Casten, a collection of notes. Generally, when you think of
+
+00:09:06.700 --> 00:09:10.280
+ Zelle Casten, it's a really individual collection of notes,
+
+00:09:10.280 --> 00:09:11.000
+ right?
+
+00:09:11.000 --> 00:09:14.550
+ It's something that you have, it's the stuff that you find
+
+00:09:14.550 --> 00:09:18.280
+ during your research, during the paper that you read. But
+
+00:09:18.280 --> 00:09:21.700
+ how about trying to have a slipbox for a group of people,
+
+00:09:21.700 --> 00:09:25.060
+ so that they could start sharing notes on research that
+
+00:09:25.060 --> 00:09:26.000
+ they do.
+
+00:09:26.000 --> 00:09:29.190
+ It wouldn't be the same thing as a personal slipbox, but
+
+00:09:29.190 --> 00:09:32.100
+ you can think of it as the knowledge bank for a group of
+
+00:09:32.100 --> 00:09:35.420
+ people, where they keep track of the concept that they use
+
+00:09:35.420 --> 00:09:38.810
+ within their organization, the patterns that they like to
+
+00:09:38.810 --> 00:09:41.000
+ use when they work together.
+
+00:09:41.000 --> 00:09:44.390
+ So, we actually wanted to do a talk this year on some of
+
+00:09:44.390 --> 00:09:47.960
+ those adjacent topics, but sadly, we were a little taken by
+
+00:09:47.960 --> 00:09:51.600
+ time, and you'll have to wait for next year. But I will
+
+00:09:51.600 --> 00:09:55.540
+ agree with you, Vidianos, there's a lot of very interesting
+
+00:09:55.540 --> 00:09:59.380
+ stuff abound for Zelle Casten method, and especially Zelle
+
+00:09:59.380 --> 00:10:01.000
+ Casten inside Emacs.
+
+00:10:01.000 --> 00:10:03.000
+ All right, back to you now.
+
+00:10:03.000 --> 00:10:06.850
+ Thanks for the additions, I like them as well, and I think
+
+00:10:06.850 --> 00:10:10.240
+ that what you said about collaboration, it would be very
+
+00:10:10.240 --> 00:10:12.000
+ interesting, really.
+
+00:10:12.000 --> 00:10:14.000
+ Great.
+
+00:10:14.000 --> 00:10:18.070
+ The only problem is having other people using the same
+
+00:10:18.070 --> 00:10:19.000
+ methods with you.
+
+00:10:19.000 --> 00:10:24.420
+ Sorry, Vidianos, I'm not sure if you asked me a question, I
+
+00:10:24.420 --> 00:10:29.740
+ was at a health, whispering my ear in the background at the
+
+00:10:29.740 --> 00:10:31.000
+ same time.
+
+00:10:31.000 --> 00:10:34.870
+ I just said that I really like the idea that you said about
+
+00:10:34.870 --> 00:10:36.000
+ collaboration.
+
+00:10:36.000 --> 00:10:38.830
+ Yeah, because it is really something that is missing when
+
+00:10:38.830 --> 00:10:42.200
+ you think about it. Like, the good thing about Emacs, and
+
+00:10:42.200 --> 00:10:44.900
+ the philosophy of Emacs generally, is that we have
+
+00:10:44.900 --> 00:10:48.390
+ different modes working together, and they do one thing, or
+
+00:10:48.390 --> 00:10:51.000
+ multiple things, and they do it very well.
+
+00:10:51.000 --> 00:10:54.890
+ We have org mode for editing structured documents, we have
+
+00:10:54.890 --> 00:10:58.200
+ maggots to manage repositories, we have calc to do
+
+00:10:58.200 --> 00:11:02.000
+ calculations with a polished notation and whatnot.
+
+00:11:02.000 --> 00:11:04.960
+ It feels like we have a great tool for collaboration,
+
+00:11:04.960 --> 00:11:08.050
+ editing a singular buffer, which is CRDT, which we've
+
+00:11:08.050 --> 00:11:10.000
+ already talked about before.
+
+00:11:10.000 --> 00:11:13.420
+ I'm not sure if we did have a presentation on Emacs about
+
+00:11:13.420 --> 00:11:17.130
+ CRDT. I think, if you're more interested in this, go back
+
+00:11:17.130 --> 00:11:20.410
+ to the talk I did last year with Joe Connelly and Noura El
+
+00:11:20.410 --> 00:11:24.000
+ Hassan on Emacs Research Group.
+
+00:11:24.000 --> 00:11:26.000
+ We did demonstrate what CRDT was.
+
+00:11:26.000 --> 00:11:28.890
+ So, we have a very good tool for working on a buffer, and
+
+00:11:28.890 --> 00:11:31.000
+ we have a very good way to take notes.
+
+00:11:31.000 --> 00:11:34.220
+ Why not try to combine the two tools, like Emacs is so good
+
+00:11:34.220 --> 00:11:36.660
+ at doing? We take one mode, we take another mode, we clash
+
+00:11:36.660 --> 00:11:38.580
+ them together and we do something very interesting with
+
+00:11:38.580 --> 00:11:39.000
+ them.
+
+00:11:39.000 --> 00:11:42.430
+ Well, we should probably be doing something similar with
+
+00:11:42.430 --> 00:11:46.140
+ note-taking, so that people can actually start building
+
+00:11:46.140 --> 00:11:47.000
+ notes together.
+
+00:11:47.000 --> 00:11:51.190
+ I think that would be a really key step in the future. But
+
+00:11:51.190 --> 00:11:54.330
+ anyway, I think I'm repeating myself a little bit, and I
+
+00:11:54.330 --> 00:11:57.000
+ don't want to say too much right now.
+
+00:11:57.000 --> 00:11:59.210
+ You'll see it in the future, it's coming month or coming
+
+00:11:59.210 --> 00:12:01.000
+ year, so you're not in a rush and flus.
+
+00:12:01.000 --> 00:12:03.000
+ Okay, Vityan, it's back to you now.
+
+00:12:03.000 --> 00:12:05.350
+ Okay, so how do you find a way to get a nice overview of
+
+00:12:05.350 --> 00:12:07.000
+ multiple notes to rearrange them?
+
+00:12:07.000 --> 00:12:09.790
+ Like, basically putting many small notes on another table
+
+00:12:09.790 --> 00:12:11.000
+ and rearranging them.
+
+00:12:11.000 --> 00:12:16.930
+ So, my initial idea when I tried to make Zettle Desk was to
+
+00:12:16.930 --> 00:12:20.000
+ get as close as possible to this.
+
+00:12:20.000 --> 00:12:22.800
+ Have a lot of small notes in my table and be able to
+
+00:12:22.800 --> 00:12:24.000
+ rearrange them.
+
+00:12:24.000 --> 00:12:29.000
+ Due to Org Mode being text, this is not exactly possible.
+
+00:12:29.000 --> 00:12:33.190
+ But I don't know if this question was before the third demo
+
+00:12:33.190 --> 00:12:34.000
+ or not.
+
+00:12:34.000 --> 00:12:39.870
+ What I showed in that demo, I think, to an extent, showed
+
+00:12:39.870 --> 00:12:42.000
+ what I do for rearranging.
+
+00:12:42.000 --> 00:12:47.720
+ You add all the things you want on the Zelda scratch buffer
+
+00:12:47.720 --> 00:12:50.000
+, and then rearrange them however you want.
+
+00:12:50.000 --> 00:12:56.000
+ So, that's as close as I have been able to get to that.
+
+00:12:56.000 --> 00:13:05.230
+ It's not perfect, but I think it is alright for being text,
+
+00:13:05.230 --> 00:13:11.000
+ which making it graphically would be hard, I think.
+
+00:13:11.000 --> 00:13:17.000
+ And the next one seems to be a follow-up on that question.
+
+00:13:17.000 --> 00:13:20.260
+ Yeah, it says it's difficult or impossible to do that. Yeah
+
+00:13:20.260 --> 00:13:21.000
+, I agree.
+
+00:13:21.000 --> 00:13:27.000
+ Okay.
+
+00:13:27.000 --> 00:13:33.560
+ So, this package that you say on the next one, on the next
+
+00:13:33.560 --> 00:13:39.000
+ question, I will check this link out.
+
+00:13:39.000 --> 00:13:44.840
+ It seems very interesting for writing your notes on a big
+
+00:13:44.840 --> 00:13:46.000
+ canvas.
+
+00:13:46.000 --> 00:13:50.230
+ I think it would definitely make sense for my workflow to
+
+00:13:50.230 --> 00:13:53.260
+ use something like this, if it is what I have understood
+
+00:13:53.260 --> 00:13:54.000
+ you mean it is.
+
+00:13:54.000 --> 00:13:59.000
+ I would love to try it. And we'll get back to you.
+
+00:13:59.000 --> 00:14:03.750
+ Whoever left that message, if you want to leave any contact
+
+00:14:03.750 --> 00:14:08.000
+ information or talk to me, I would love to get back to you
+
+00:14:08.000 --> 00:14:09.000
+ about this.
+
+00:14:09.000 --> 00:14:11.000
+ Because it looks very interesting.
+
+00:14:11.000 --> 00:14:14.810
+ Yes, so again, all the contact information will be
+
+00:14:14.810 --> 00:14:17.000
+ available on the talk page.
+
+00:14:17.000 --> 00:14:18.630
+ By the way, if you're worried about the lighting changes in
+
+00:14:18.630 --> 00:14:21.370
+ my place, it's just that sometimes I have a lot of light in
+
+00:14:21.370 --> 00:14:22.000
+ my face.
+
+00:14:22.000 --> 00:14:25.000
+ And then, when I'm a little tired, I do rest like this.
+
+00:14:25.000 --> 00:14:28.000
+ And it's very different, but it's still me. Don't worry
+
+00:14:28.000 --> 00:14:28.000
+ about it.
+
+00:14:28.000 --> 00:14:30.460
+ I'm not going to turn it off, because every time it's like
+
+00:14:30.460 --> 00:14:32.000
+ a flashbang going into my eyes.
+
+00:14:32.000 --> 00:14:35.240
+ So, if you want to talk to Vidyanos afterwards, maybe do
+
+00:14:35.240 --> 00:14:38.000
+ not leave your coordinates right into the pad.
+
+00:14:38.000 --> 00:14:41.000
+ Maybe get in touch with Vidyanos instead.
+
+00:14:41.000 --> 00:14:43.380
+ Those ads are going to be public eventually, and even
+
+00:14:43.380 --> 00:14:46.000
+ though we will be reviewing all the content within them,
+
+00:14:46.000 --> 00:14:49.000
+ it means that they will be open to people for a while.
+
+00:14:49.000 --> 00:14:52.000
+ So, maybe avoid putting personal information over there.
+
+00:14:52.000 --> 00:14:54.440
+ But otherwise, you'll be able to connect after the
+
+00:14:54.440 --> 00:14:57.590
+ conference relatively easily, and Vidyanos will be able to
+
+00:14:57.590 --> 00:14:58.000
+ follow up.
+
+00:14:58.000 --> 00:15:01.000
+ Or even just on the questions, whenever you have the time.
+
+00:15:01.000 --> 00:15:03.760
+ But it might take one or two weeks for the speakers to get
+
+00:15:03.760 --> 00:15:06.000
+ back to the questions you put into the pad.
+
+00:15:06.000 --> 00:15:09.000
+ We will be asking them frequently.
+
+00:15:09.000 --> 00:15:11.890
+ We do have this policy, as you know, with Emacs, of nudging
+
+00:15:11.890 --> 00:15:13.000
+ speakers to do something.
+
+00:15:13.000 --> 00:15:15.860
+ So, we will nudge speakers towards answering your questions
+
+00:15:15.860 --> 00:15:18.510
+, but it might take us about one or two weeks to get all the
+
+00:15:18.510 --> 00:15:19.000
+ answers.
+
+00:15:19.000 --> 00:15:22.000
+ I think we don't have any more questions currently.
+
+00:15:22.000 --> 00:15:24.000
+ There is one more.
+
+00:15:24.000 --> 00:15:26.000
+ Oh, there is one more. So, please take it.
+
+00:15:26.000 --> 00:15:29.800
+ Can we use Zettelkasten for coding too, especially when
+
+00:15:29.800 --> 00:15:32.000
+ using the IDs like Visual Studio and Excel?
+
+00:15:32.000 --> 00:15:38.080
+ So, I can't say for sure if you can use it, because I'm not
+
+00:15:38.080 --> 00:15:39.000
+ in coding.
+
+00:15:39.000 --> 00:15:44.000
+ The only language I know the best for coding is Emacs Lisp.
+
+00:15:44.000 --> 00:15:48.770
+ And the only other one I know is Matlab for doing
+
+00:15:48.770 --> 00:15:54.000
+ calculations, for example, for things in university.
+
+00:15:54.000 --> 00:15:59.000
+ But I think you should be able to do that.
+
+00:15:59.000 --> 00:16:03.600
+ If you look for Zettelkasten for coding, you will probably
+
+00:16:03.600 --> 00:16:06.000
+ find some resources for it.
+
+00:16:06.000 --> 00:16:14.000
+ I don't think it breaks the Zettelkasten principles.
+
+00:16:14.000 --> 00:16:21.000
+ You can make atomic nodes for coding concepts.
+
+00:16:21.000 --> 00:16:24.000
+ So, it should work, I believe.
+
+00:16:24.000 --> 00:16:26.000
+ Yeah, and I can actually confirm this.
+
+00:16:26.000 --> 00:16:31.150
+ I did share with you before in one of the previous Q&A how
+
+00:16:31.150 --> 00:16:33.390
+ we're taking notes on this little device right here to do
+
+00:16:33.390 --> 00:16:34.000
+ lead code exercises.
+
+00:16:34.000 --> 00:16:38.400
+ The thing about lead code exercises is that, well, lead
+
+00:16:38.400 --> 00:16:40.000
+ code, sorry, let's be more vague about it.
+
+00:16:40.000 --> 00:16:42.990
+ Lead code is a platform and not a free platform as well,
+
+00:16:42.990 --> 00:16:44.000
+ and I'm not advertising them.
+
+00:16:44.000 --> 00:16:46.700
+ But the concept of data structure and algorithm is really
+
+00:16:46.700 --> 00:16:48.000
+ important to programming.
+
+00:16:48.000 --> 00:16:53.260
+ And usually when you try to solve algorithmic problems, you
+
+00:16:53.260 --> 00:16:58.000
+ rely on a number of patterns that have been developed by...
+
+00:16:58.000 --> 00:17:01.260
+ Sorry, I get people telling me to my right here that, oh,
+
+00:17:01.260 --> 00:17:02.000
+ the sim is going down.
+
+00:17:02.000 --> 00:17:06.850
+ And so my stomach is falling into my body, just, oh, what
+
+00:17:06.850 --> 00:17:08.000
+ happened?
+
+00:17:08.000 --> 00:17:10.310
+ Anyway, going back to the point, we do rely on patterns and
+
+00:17:10.310 --> 00:17:13.000
+ identification of patterns within a problem.
+
+00:17:13.000 --> 00:17:17.130
+ So, as a result, it would be very much possible to create
+
+00:17:17.130 --> 00:17:20.000
+ separate nodes for all these patterns.
+
+00:17:20.000 --> 00:17:22.630
+ And you can have different exercises and say you have an
+
+00:17:22.630 --> 00:17:25.000
+ exercise that is using two different things.
+
+00:17:25.000 --> 00:17:29.000
+ It's using a tree pattern and it's using a depth search.
+
+00:17:29.000 --> 00:17:31.640
+ If neither of those two words make any sense to you, do not
+
+00:17:31.640 --> 00:17:35.100
+ worry and be grateful because this will haunt you at night
+
+00:17:35.100 --> 00:17:36.000
+ otherwise.
+
+00:17:36.000 --> 00:17:38.730
+ But it would be very, I think it would be a prime candidate
+
+00:17:38.730 --> 00:17:42.000
+ really for atomization and linking within a Zettelkasten.
+
+00:17:42.000 --> 00:17:44.780
+ Because it would make it so much easier to structure your
+
+00:17:44.780 --> 00:17:47.730
+ knowledge in a way that is organic rather than hierarchical
+
+00:17:47.730 --> 00:17:48.000
+.
+
+00:17:48.000 --> 00:17:52.030
+ So, yeah, this was a very good question and I'd be happy to
+
+00:17:52.030 --> 00:17:56.390
+ encourage the asker to try it on their own and maybe make a
+
+00:17:56.390 --> 00:17:58.000
+ presentation next year at the next EMACS Conf.
+
+00:17:58.000 --> 00:18:01.210
+ Vidyanos, before we continue, I just want to give up the
+
+00:18:01.210 --> 00:18:02.000
+ heads up.
+
+00:18:02.000 --> 00:18:05.230
+ So, we have opened the room currently. If you want to join
+
+00:18:05.230 --> 00:18:10.000
+ the room with Vidyanos, we have posted the link on ISC.
+
+00:18:10.000 --> 00:18:12.400
+ And if you go to the talk page of Vidyanos talk, you will
+
+00:18:12.400 --> 00:18:14.000
+ be able to join the room as well.
+
+00:18:14.000 --> 00:18:16.650
+ We did have quite a number of questions. So, feel free to
+
+00:18:16.650 --> 00:18:17.000
+ join.
+
+00:18:17.000 --> 00:18:19.530
+ In about four minutes, we'll need to move on to the next
+
+00:18:19.530 --> 00:18:20.000
+ talk.
+
+00:18:20.000 --> 00:18:23.000
+ But, well, actually, I give you about three more minutes.
+
+00:18:23.000 --> 00:18:26.000
+ Do we have any more questions on the pad, Vidyanos?
+
+00:18:26.000 --> 00:18:29.000
+ On the pad, no. I'm looking on IRC.
+
+00:18:29.000 --> 00:18:34.000
+ Someone says if Zeldas.dl will be available in Melpa.
+
+00:18:34.000 --> 00:18:39.000
+ It is on Melpa right now. You can find it.
+
+00:18:39.000 --> 00:18:44.390
+ Right. And you just have to -- sorry, my voice is getting
+
+00:18:44.390 --> 00:18:45.000
+ raspier.
+
+00:18:45.000 --> 00:18:47.680
+ It's only the first day of EMACS Conf. It's not even lunch
+
+00:18:47.680 --> 00:18:49.000
+ and I'm already losing my voice.
+
+00:18:49.000 --> 00:18:51.000
+ This is not booting well for the rest.
+
+00:18:51.000 --> 00:18:54.100
+ But, yeah, you should be able to find it pretty easily by
+
+00:18:54.100 --> 00:19:00.080
+ looking on doc.go for Melpa and space and zeldacaster.el,
+
+00:19:00.080 --> 00:19:01.000
+ the name of the package.
+
+00:19:01.000 --> 00:19:03.000
+ You'll be able to find it. And we can put it on the page.
+
+00:19:03.000 --> 00:19:04.600
+ I'm pretty sure it's already on your talk page, Vidyanos,
+
+00:19:04.600 --> 00:19:05.000
+ as well.
+
+00:19:05.000 --> 00:19:07.000
+ Yeah, it is on the talk page.
+
+00:19:07.000 --> 00:19:09.000
+ Yeah, you'll be able to find it really quickly.
+
+00:19:09.000 --> 00:19:11.000
+ So we have about two more minutes.
+
+00:19:11.000 --> 00:19:12.670
+ Did you see any other question that you'd like to answer as
+
+00:19:12.670 --> 00:19:13.000
+ well?
+
+00:19:13.000 --> 00:19:17.800
+ I'm scrolling on IRC since the talk started to see if there
+
+00:19:17.800 --> 00:19:19.000
+ is anything else.
+
+00:19:19.000 --> 00:19:21.000
+ I don't see anything else.
+
+00:19:21.000 --> 00:19:28.000
+ If anyone has a room here, I would love to continue.
+
+00:19:28.000 --> 00:19:33.000
+ If not, then I think we've already answered enough things.
+
+00:19:33.000 --> 00:19:38.000
+ Sure, I would concur. You have covered a lot of ground.
+
+00:19:38.000 --> 00:19:41.240
+ I am personally happy to be seeing so many talks about Zeld
+
+00:19:41.240 --> 00:19:42.000
+acaster.
+
+00:19:42.000 --> 00:19:44.430
+ It feels like I was a little bit of a forerunner at EMACS
+
+00:19:44.430 --> 00:19:46.000
+ Conf talking about Zeldacaster.
+
+00:19:46.000 --> 00:19:48.450
+ And now, we are two years later and we're still talking
+
+00:19:48.450 --> 00:19:49.000
+ about it.
+
+00:19:49.000 --> 00:19:51.170
+ I know a lot of people are getting a little tired of
+
+00:19:51.170 --> 00:19:53.000
+ hearing about Zeldacaster all the time.
+
+00:19:53.000 --> 00:19:59.050
+ But if you part all the communication, if you focus on what
+
+00:19:59.050 --> 00:20:00.000
+ it actually does,
+
+00:20:00.000 --> 00:20:03.000
+ and I keep saying it's just notes and it's just links,
+
+00:20:03.000 --> 00:20:05.000
+ it's actually quite amazing what you can do with it.
+
+00:20:05.000 --> 00:20:07.000
+ It's just a mental model, really.
+
+00:20:07.000 --> 00:20:11.690
+ So I would kind of use the, you know, sorry for the voxing
+
+00:20:11.690 --> 00:20:12.000
+ here.
+
+00:20:12.000 --> 00:20:16.460
+ But if you have been interested in Zeldacaster at some
+
+00:20:16.460 --> 00:20:17.000
+ point,
+
+00:20:17.000 --> 00:20:20.000
+ or if you are frustrated by all the talk about Zeldacaster,
+
+00:20:20.000 --> 00:20:22.000
+ that seems to be kind of like a cult at some point,
+
+00:20:22.000 --> 00:20:27.460
+ well, I would encourage you maybe to try, not necessarily
+
+00:20:27.460 --> 00:20:28.000
+ try it for yourself,
+
+00:20:28.000 --> 00:20:31.000
+ but try to understand really the simple stuff behind it.
+
+00:20:31.000 --> 00:20:34.340
+ Because honestly, there's nothing very revolutionary about
+
+00:20:34.340 --> 00:20:36.000
+ this note-taking method.
+
+00:20:36.000 --> 00:20:39.370
+ It's just that it used to be done with paper, and now it's
+
+00:20:39.370 --> 00:20:40.000
+ done with computers,
+
+00:20:40.000 --> 00:20:42.000
+ and it makes it a little more easier.
+
+00:20:42.000 --> 00:20:45.500
+ Personally, what I find the most helpful in this type of
+
+00:20:45.500 --> 00:20:48.000
+ note-taking is how organic everything feels.
+
+00:20:48.000 --> 00:20:50.650
+ You do not need to be thinking about the structure from the
+
+00:20:50.650 --> 00:20:51.000
+ get-go,
+
+00:20:51.000 --> 00:20:53.000
+ and this is extremely freeing.
+
+00:20:53.000 --> 00:20:56.000
+ OK, Vidyanos, we are about out of time.
+
+00:20:56.000 --> 00:20:58.240
+ Thank you so much for taking the time to answer the
+
+00:20:58.240 --> 00:20:59.000
+ questions.
+
+00:20:59.000 --> 00:21:01.690
+ We will be in touch in the future, and we'll be looking
+
+00:21:01.690 --> 00:21:04.000
+ forward to having more presentations about Zeldacaster,
+
+00:21:04.000 --> 00:21:08.000
+ and perhaps maybe one by you in the future.
+
+00:21:08.000 --> 00:21:11.000
+ So, well, thank you so much.
+
+00:21:11.000 --> 00:21:13.470
+ And, Vidyanos, I don't see anyone in the room, so feel free
+
+00:21:13.470 --> 00:21:15.000
+ to leave the room after we're done.
+
+00:21:15.000 --> 00:21:18.410
+ So in about one minute, we're going to go with the next
+
+00:21:18.410 --> 00:21:19.000
+ talk.
+
+00:21:19.000 --> 00:21:23.000
+ We might go a little bit quiet until the top of the minute.
+
+00:21:23.000 --> 00:21:26.000
+ I need to drink, and I need to rest my voice.
+
+00:21:26.000 --> 00:21:28.000
+ But in one minute, we'll be starting the next talk.
+
+00:21:28.000 --> 00:21:30.000
+ Vidyanos, thank you so much, and see you next time.
+
+00:21:30.000 --> 00:21:32.000
+ Bye.
+
+00:21:32.000 --> 00:21:35.000
+ (Break)
+
+00:21:37.000 --> 00:21:37.000
+
+
+00:21:37.000 --> 00:21:40.000
+ (Break)
+
+00:21:42.000 --> 00:21:42.000
+
+
+00:21:42.000 --> 00:21:45.000
+ (Break)
+
+00:21:47.000 --> 00:21:47.000
+
+
+00:21:47.000 --> 00:21:50.000
+ (Break)
+
+00:21:50.000 --> 00:21:53.000
+ (Break)
+
+00:21:55.000 --> 00:21:55.000
+
+
+00:21:55.000 --> 00:21:58.000
+ (Break)
+
+00:22:00.000 --> 00:22:00.000
+
+
+00:22:00.000 --> 00:22:03.000
+ (Break)
+
diff --git a/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt
new file mode 100644
index 00000000..2fa99c0c
--- /dev/null
+++ b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt
@@ -0,0 +1,55 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:28.320
+My second brain
+
+00:00:28.320 --> 00:01:40.560
+Contents of the talk
+
+00:01:40.560 --> 00:02:35.200
+Bibliography management
+
+00:02:35.200 --> 00:03:04.960
+Creating literature notes: ivy-bibtex-edit-notes
+
+00:03:04.960 --> 00:04:40.160
+org-roam reference template
+
+00:04:40.160 --> 00:05:40.840
+Demo
+
+00:05:40.840 --> 00:06:44.240
+Annotating with org-noter
+
+00:06:44.240 --> 00:07:02.120
+Annotating in English
+
+00:07:02.120 --> 00:07:30.200
+Afterthoughts on an article
+
+00:07:30.200 --> 00:08:21.480
+Adding a note
+
+00:08:21.480 --> 00:09:01.680
+Creating permanent notes from reference material
+
+00:09:01.680 --> 00:09:21.520
+The organization problem
+
+00:09:21.520 --> 00:10:43.600
+zetteldesk.el
+
+00:10:43.600 --> 00:11:45.040
+The zetteldesk-desktop
+
+00:11:45.040 --> 00:12:09.840
+Filtering with ivy-bibtex
+
+00:12:09.840 --> 00:13:46.200
+Inserting literature
+
+00:13:46.200 --> 00:15:19.160
+Composing the final article
+
+00:15:19.160 --> 00:16:44.480
+Thanks
diff --git a/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt
new file mode 100644
index 00000000..6b098ba9
--- /dev/null
+++ b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt
@@ -0,0 +1,1153 @@
+WEBVTT captioned by hannah
+
+00:00:00.000 --> 00:00:02.039
+Hello everyone, I'm Vidianos.
+
+00:00:02.040 --> 00:00:03.079
+Today I'm going to show you
+
+00:00:03.080 --> 00:00:04.079
+how I write and organize
+
+00:00:04.080 --> 00:00:06.439
+my literature notes using Emacs.
+
+00:00:06.440 --> 00:00:08.719
+I take my notes using Zettelkasten,
+
+00:00:08.720 --> 00:00:11.079
+which you may or may not have heard.
+
+00:00:11.080 --> 00:00:13.839
+It is about taking small atomic notes
+
+00:00:13.840 --> 00:00:14.999
+and linking them one another
+
+00:00:15.000 --> 00:00:17.599
+to create your so-called second brain.
+
+00:00:17.600 --> 00:00:19.159
+Here is mine.
+
+00:00:19.160 --> 00:00:20.719
+This is a graph of all the notes
+
+00:00:20.720 --> 00:00:22.879
+I have accumulated the last few years.
+
+00:00:22.880 --> 00:00:25.199
+It has various types of notes,
+
+00:00:25.200 --> 00:00:25.959
+but we're mainly going to focus on
+
+00:00:25.960 --> 00:00:28.319
+literature notes today.
+
+00:00:28.320 --> 00:00:29.639
+Here are the contents of my talk.
+
+00:00:29.640 --> 00:00:30.439
+We're going to start
+
+00:00:30.440 --> 00:00:31.919
+with bibliography management,
+
+00:00:31.920 --> 00:00:33.319
+which is how I take bibliography
+
+00:00:33.320 --> 00:00:35.959
+from the web and import it to Emacs.
+
+00:00:35.960 --> 00:00:37.079
+Then we're going to talk about
+
+00:00:37.080 --> 00:00:38.879
+how I create literature notes
+
+00:00:38.880 --> 00:00:42.759
+using a custom org-roam-bibtex template I have.
+
+00:00:42.760 --> 00:00:43.919
+And after talking about that,
+
+00:00:43.920 --> 00:00:46.359
+we can talk about how I write literature notes,
+
+00:00:46.360 --> 00:00:48.239
+which is through annotating an article
+
+00:00:48.240 --> 00:00:51.319
+using org-noter. Org-noter is a package
+
+00:00:51.320 --> 00:00:53.439
+that allows you to annotate PDFs
+
+00:00:53.440 --> 00:00:54.999
+using the Org format
+
+00:00:55.000 --> 00:00:59.559
+and creates a supplementary Org file to your PDF.
+
+00:00:59.560 --> 00:01:00.879
+Then we're going to talk about
+
+00:01:00.880 --> 00:01:03.519
+adding the literature to your Zettelkasten,
+
+00:01:03.520 --> 00:01:06.279
+which is a simple but important topic,
+
+00:01:06.280 --> 00:01:08.599
+and how you can write permanent notes
+
+00:01:08.600 --> 00:01:11.719
+based on the info you obtain from this literature.
+
+00:01:11.720 --> 00:01:13.319
+Lastly, we're going to focus on
+
+00:01:13.320 --> 00:01:14.999
+the organization problem
+
+00:01:15.000 --> 00:01:17.719
+one might find when having a lot of literature
+
+00:01:17.720 --> 00:01:21.439
+for an assignment or an article or something,
+
+00:01:21.440 --> 00:01:22.959
+and how I have tried to solve this
+
+00:01:22.960 --> 00:01:24.839
+with my package Zetteldesk.
+
+00:01:24.840 --> 00:01:26.359
+This isn't the perfect solution,
+
+00:01:26.360 --> 00:01:29.799
+but it is what I have, and I really like it.
+
+00:01:29.800 --> 00:01:30.839
+Finally, we're going to talk about
+
+00:01:30.840 --> 00:01:33.559
+how to compose the final article
+
+00:01:33.560 --> 00:01:35.199
+that you want to produce
+
+00:01:35.200 --> 00:01:36.799
+using this literature
+
+00:01:36.800 --> 00:01:38.639
+with the technique described
+
+00:01:38.640 --> 00:01:40.559
+in the rest of this talk.
+
+00:01:40.560 --> 00:01:42.239
+So let's begin the talk
+
+00:01:42.240 --> 00:01:44.239
+with bibliography management.
+
+00:01:44.240 --> 00:01:47.239
+Zotero is the bibliography manager I use.
+
+00:01:47.240 --> 00:01:49.399
+It is very simple to store articles with it,
+
+00:01:49.400 --> 00:01:50.679
+and it exports to .bib,
+
+00:01:50.680 --> 00:01:52.079
+integrating with packages
+
+00:01:52.080 --> 00:01:54.959
+such as org-roam-bibtex and ivy-bibtex.
+
+00:01:54.960 --> 00:01:56.679
+When researching, I typically find
+
+00:01:56.680 --> 00:02:00.039
+a long list of articles from a search engine.
+
+00:02:00.040 --> 00:02:03.439
+I open the titles which have interesting titles
+
+00:02:03.440 --> 00:02:05.039
+through their abstracts
+
+00:02:05.040 --> 00:02:07.799
+and save to Zotero those whose abstracts
+
+00:02:07.800 --> 00:02:10.319
+are the most relevant to what I want.
+
+00:02:10.320 --> 00:02:11.799
+From these articles,
+
+00:02:11.800 --> 00:02:13.359
+I typically won't read all of them
+
+00:02:13.360 --> 00:02:14.519
+because they're a lot,
+
+00:02:14.520 --> 00:02:17.759
+but I will select a few,
+
+00:02:17.760 --> 00:02:21.639
+once I have collected as many as I want.
+
+00:02:21.640 --> 00:02:24.079
+Zotero acts as a way to store everything
+
+00:02:24.080 --> 00:02:25.479
+that might be interesting,
+
+00:02:25.480 --> 00:02:28.519
+while Emacs and my Zettelkasten
+
+00:02:28.520 --> 00:02:30.959
+stores everything that is definitely interesting,
+
+00:02:30.960 --> 00:02:35.199
+and I have read it already.
+
+00:02:35.200 --> 00:02:36.359
+And then we can move to
+
+00:02:36.360 --> 00:02:38.559
+how I create literature notes.
+
+00:02:38.560 --> 00:02:41.119
+I set the default action of ivy-bibtex
+
+00:02:41.120 --> 00:02:43.599
+to ivy-bibtex-edit-notes,
+
+00:02:43.600 --> 00:02:44.919
+which will prompt-- which
+
+00:02:44.920 --> 00:02:46.479
+with org-roam-bibtex-mode active,
+
+00:02:46.480 --> 00:02:48.839
+prompts you for an org-capture template
+
+00:02:48.840 --> 00:02:50.799
+when selecting something
+
+00:02:50.800 --> 00:02:52.319
+if the node doesn't exist,
+
+00:02:52.320 --> 00:02:54.959
+or takes you to the existing node.
+
+00:02:54.960 --> 00:02:58.439
+And obviously you need to have this here,
+
+00:02:58.440 --> 00:03:00.799
+to set the default action
+
+00:03:00.800 --> 00:03:02.599
+that was already there
+
+00:03:02.600 --> 00:03:04.959
+to a letter.
+
+00:03:04.960 --> 00:03:08.039
+Then we can move to my org-roam reference template,
+
+00:03:08.040 --> 00:03:11.159
+using org-roam-bibtex.
+
+00:03:11.160 --> 00:03:12.439
+This isn't so complicated,
+
+00:03:12.440 --> 00:03:14.119
+but it has some important stuff
+
+00:03:14.120 --> 00:03:14.879
+I want to highlight.
+
+00:03:14.880 --> 00:03:17.399
+Save it to the ref directory,
+
+00:03:17.400 --> 00:03:19.719
+so I can remember where it is,
+
+00:03:19.720 --> 00:03:23.559
+and it's classified as a literature note.
+
+00:03:23.560 --> 00:03:25.119
+The file name is the cite key,
+
+00:03:25.120 --> 00:03:27.759
+which is easy and small,
+
+00:03:27.760 --> 00:03:30.079
+but the title is the actual article's title.
+
+00:03:30.080 --> 00:03:32.319
+Give it a tag of the entry-type;
+
+00:03:32.320 --> 00:03:35.039
+this is typically "article,"
+
+00:03:35.040 --> 00:03:37.479
+but it's easy to sort things this way
+
+00:03:37.480 --> 00:03:41.399
+because not all literature notes are articles.
+
+00:03:41.400 --> 00:03:43.159
+And then give the keywords
+
+00:03:43.160 --> 00:03:47.359
+that are given by Zotero, because why not?
+
+00:03:47.360 --> 00:03:51.479
+Tags here are tags from Zettelkasten.
+
+00:03:51.480 --> 00:03:53.639
+These are the links to
+
+00:03:53.640 --> 00:03:55.359
+other files which are relevant,
+
+00:03:55.360 --> 00:03:58.079
+but its initialization is empty, obviously.
+
+00:03:58.080 --> 00:03:59.839
+And then this heading is where
+
+00:03:59.840 --> 00:04:00.839
+all the magic happens.
+
+00:04:00.840 --> 00:04:04.719
+The name is just not really so relevant;
+
+00:04:04.720 --> 00:04:07.559
+I just needed something that made sense.
+
+00:04:07.560 --> 00:04:10.399
+The properties are what matters,
+
+00:04:10.400 --> 00:04:12.239
+and mainly this one here.
+
+00:04:12.240 --> 00:04:18.879
+The ${file} attribute finds
+
+00:04:18.880 --> 00:04:24.799
+the file of this specific literature
+
+00:04:24.800 --> 00:04:27.519
+and makes sure that org-noter works
+
+00:04:27.520 --> 00:04:29.639
+by default here.
+
+00:04:29.640 --> 00:04:32.559
+As I'm going to show you in a moment,
+
+00:04:32.560 --> 00:04:34.599
+this way [of] initializing the literature note,
+
+00:04:34.600 --> 00:04:36.999
+org-noter works by default.
+
+00:04:37.000 --> 00:04:40.159
+That's all, basically, for the template.
+
+00:04:40.160 --> 00:04:42.759
+This is the point of the talk
+
+00:04:42.760 --> 00:04:44.039
+where we reach the first demo.
+
+00:04:44.040 --> 00:04:47.079
+This is about opening ivy-bibtex,
+
+00:04:47.080 --> 00:04:50.239
+selecting an article I want to annotate,
+
+00:04:50.240 --> 00:04:52.999
+initializing the literature note.
+
+00:04:53.000 --> 00:04:54.999
+We can see that everything
+
+00:04:55.000 --> 00:04:56.479
+is inserted in for me,
+
+00:04:56.480 --> 00:05:01.079
+and if I open org-noter on this heading,
+
+00:05:01.080 --> 00:05:03.759
+it opens the article, as expected.
+
+00:05:03.760 --> 00:05:06.199
+I can read the article,
+
+00:05:06.200 --> 00:05:08.439
+I can say I want to
+
+00:05:08.440 --> 00:05:10.720
+annotate something here.
+
+00:05:20.720 --> 00:05:24.119
+Obviously, annotation is not that simple as here,
+
+00:05:24.120 --> 00:05:26.479
+but I don't really have the time
+
+00:05:26.480 --> 00:05:28.599
+to actually annotate an article live.
+
+00:05:28.600 --> 00:05:34.039
+But you can keep going, and it's a good setup.
+
+00:05:34.040 --> 00:05:39.879
+Then close org-noter,
+
+00:05:39.880 --> 00:05:40.839
+and let's go presentation again.
+
+00:05:40.840 --> 00:05:44.359
+Moving on, this section is some stuff
+
+00:05:44.360 --> 00:05:45.799
+about my annotation process.
+
+00:05:45.800 --> 00:05:49.479
+As I said, there is not enough time for me
+
+00:05:49.480 --> 00:05:51.119
+to actually annotate an article live,
+
+00:05:51.120 --> 00:05:52.999
+but here are some things about it.
+
+00:05:53.000 --> 00:05:55.479
+First, is that I annotate with org-noter,
+
+00:05:55.480 --> 00:05:56.719
+which I absolutely love.
+
+00:05:56.720 --> 00:05:59.599
+It is great for annotations
+
+00:05:59.600 --> 00:06:02.519
+because you do them in org,
+
+00:06:02.520 --> 00:06:03.879
+which is an amazing format
+
+00:06:03.880 --> 00:06:05.879
+and gives you a lot of flexibility,
+
+00:06:05.880 --> 00:06:07.839
+such as adding to the Zettelkasten,
+
+00:06:07.840 --> 00:06:11.319
+being initialized by a capture template,
+
+00:06:11.320 --> 00:06:13.119
+and other things.
+
+00:06:13.120 --> 00:06:15.959
+But also, you don't need to look for
+
+00:06:15.960 --> 00:06:17.359
+the notes inside the PDF,
+
+00:06:17.360 --> 00:06:19.519
+which is a problem you can have
+
+00:06:19.520 --> 00:06:20.959
+if you annotate on the PDF,
+
+00:06:20.960 --> 00:06:23.079
+and it is very annoying in my opinion.
+
+00:06:23.080 --> 00:06:26.439
+So I prefer having these notes,
+
+00:06:26.440 --> 00:06:27.879
+and I can only focus on them,
+
+00:06:27.880 --> 00:06:29.759
+but I can also see where they refer.
+
+00:06:29.760 --> 00:06:33.199
+The other scenarios are not so good.
+
+00:06:33.200 --> 00:06:35.519
+Annotating on the PDF,
+
+00:06:35.520 --> 00:06:36.479
+you search for it,
+
+00:06:36.480 --> 00:06:41.199
+and if you don't know which section it refers to,
+
+00:06:41.200 --> 00:06:42.759
+then you need to look about it,
+
+00:06:42.760 --> 00:06:44.239
+and that is very tiring.
+
+00:06:44.240 --> 00:06:48.359
+Also, I am always annotating in English.
+
+00:06:48.360 --> 00:06:50.199
+This is not my mother tongue,
+
+00:06:50.200 --> 00:06:52.039
+but it helps me avoid
+
+00:06:52.040 --> 00:06:53.679
+the necessary mental overhead
+
+00:06:53.680 --> 00:06:55.199
+of translating while reading.
+
+00:06:55.200 --> 00:06:57.559
+I want to pay attention to what I read
+
+00:06:57.560 --> 00:06:59.679
+and not to translate stuff.
+
+00:06:59.680 --> 00:07:02.119
+I will translate later.
+
+00:07:02.120 --> 00:07:05.039
+And when finishing an article,
+
+00:07:05.040 --> 00:07:07.719
+I write a mini-abstract myself,
+
+00:07:07.720 --> 00:07:10.119
+which contains what I think about the article.
+
+00:07:10.120 --> 00:07:11.639
+It doesn't need to be much,
+
+00:07:11.640 --> 00:07:13.999
+it's usually like 3 or 4 paragraphs,
+
+00:07:14.000 --> 00:07:18.319
+and it shows things that are useful in the article,
+
+00:07:18.320 --> 00:07:21.159
+and what is mentioned that matters to me.
+
+00:07:21.160 --> 00:07:22.599
+So I can look back at it,
+
+00:07:22.600 --> 00:07:24.919
+and it is very easy for me to find
+
+00:07:24.920 --> 00:07:26.599
+what I got from this article,
+
+00:07:26.600 --> 00:07:30.199
+so where I will cite it on my actual project.
+
+00:07:30.200 --> 00:07:33.879
+Then last thing you need to do
+
+00:07:33.880 --> 00:07:35.479
+is add a note to your Zettelkasten.
+
+00:07:35.480 --> 00:07:38.039
+This is very easy due to it being in an org format.
+
+00:07:38.040 --> 00:07:41.799
+You can just have it in the org-roam directory,
+
+00:07:41.800 --> 00:07:43.639
+which it automatically goes to,
+
+00:07:43.640 --> 00:07:46.559
+and link it to other relevant notes,
+
+00:07:46.560 --> 00:07:48.519
+which is its index
+
+00:07:48.520 --> 00:07:50.559
+because everything in my Zettelkasten
+
+00:07:50.560 --> 00:07:51.719
+(at least) has an index,
+
+00:07:51.720 --> 00:07:54.519
+but also every other permanent note
+
+00:07:54.520 --> 00:07:56.759
+whose contents are in one way or another
+
+00:07:56.760 --> 00:07:58.079
+mentioned inside the article.
+
+00:07:58.080 --> 00:08:00.359
+This way the article is in a network with notes
+
+00:08:00.360 --> 00:08:02.039
+that are similar to it.
+
+00:08:02.040 --> 00:08:05.359
+Then we move on to the second demo,
+
+00:08:05.360 --> 00:08:08.039
+which is about a full-fledged literature note.
+
+00:08:08.040 --> 00:08:11.119
+We can go on org-roam-node-find,
+
+00:08:11.120 --> 00:08:13.159
+search for references,
+
+00:08:13.160 --> 00:08:15.559
+go to this, and you can see
+
+00:08:15.560 --> 00:08:17.759
+it is linked to other notes.
+
+00:08:17.760 --> 00:08:20.039
+And here is the mini-abstract,
+
+00:08:20.040 --> 00:08:21.479
+and here are my notes on it.
+
+00:08:21.480 --> 00:08:27.519
+The last thing you need to do
+
+00:08:27.520 --> 00:08:29.119
+when creating a literature note,
+
+00:08:29.120 --> 00:08:31.319
+is obviously create permanent notes
+
+00:08:31.320 --> 00:08:32.279
+based on what you read.
+
+00:08:32.280 --> 00:08:35.679
+If you never create these literature notes,
+
+00:08:35.680 --> 00:08:37.679
+you will never get new information.
+
+00:08:37.680 --> 00:08:40.439
+So for your Zettelkasten to grow,
+
+00:08:40.440 --> 00:08:42.359
+you need to create such notes.
+
+00:08:42.360 --> 00:08:45.879
+This means that the subject you are researching
+
+00:08:45.880 --> 00:08:47.799
+is not just literature notes
+
+00:08:47.800 --> 00:08:50.279
+but has well-structured permanent notes,
+
+00:08:50.280 --> 00:08:52.799
+which is what you will actually read.
+
+00:08:52.800 --> 00:08:55.159
+You typically only read literature notes
+
+00:08:55.160 --> 00:08:57.159
+to see what gets cited where.
+
+00:08:57.160 --> 00:08:58.759
+What you will mostly read
+
+00:08:58.760 --> 00:08:59.839
+is these permanent notes
+
+00:08:59.840 --> 00:09:01.679
+that you create from this knowledge.
+
+00:09:01.680 --> 00:09:05.239
+So finally we are at the last part of the talk,
+
+00:09:05.240 --> 00:09:07.359
+which is about organizing literature notes.
+
+00:09:07.360 --> 00:09:09.559
+And this is in my opinion
+
+00:09:09.560 --> 00:09:10.879
+the most interesting part
+
+00:09:10.880 --> 00:09:12.199
+because it is very unique.
+
+00:09:12.200 --> 00:09:14.719
+It uses a package I wrote myself,
+
+00:09:14.720 --> 00:09:18.319
+and it doesn't have as much usage
+
+00:09:18.320 --> 00:09:21.519
+as the rest of the things I described so far.
+
+00:09:21.520 --> 00:09:24.799
+So what is the problem you might find?
+
+00:09:24.800 --> 00:09:27.959
+Indeed, if you read a lot of things,
+
+00:09:27.960 --> 00:09:30.959
+you have a large collection of notes,
+
+00:09:30.960 --> 00:09:33.919
+and it's not the only thing you will think about.
+
+00:09:33.920 --> 00:09:36.079
+However, you do need to
+
+00:09:36.080 --> 00:09:37.799
+justify everything with citations,
+
+00:09:37.800 --> 00:09:39.879
+so you need to remember everything
+
+00:09:39.880 --> 00:09:41.119
+you read in these notes.
+
+00:09:41.120 --> 00:09:43.519
+You have done a lot of work,
+
+00:09:43.520 --> 00:09:45.919
+but there is still a lot for you
+
+00:09:45.920 --> 00:09:47.319
+to reach your final manuscript.
+
+00:09:47.320 --> 00:09:50.359
+Except if there was a handy little way
+
+00:09:50.360 --> 00:09:52.879
+to combine everything
+
+00:09:52.880 --> 00:09:55.879
+and sort it in a very easy way.
+
+00:09:55.880 --> 00:09:56.959
+Well, there is,
+
+00:09:56.960 --> 00:10:00.119
+and I think it came out pretty well.
+
+00:10:00.120 --> 00:10:01.799
+It's zetteldesk.el.
+
+00:10:01.800 --> 00:10:05.039
+It was inspired by this quote here
+
+00:10:05.040 --> 00:10:06.479
+from How to Take Smart Notes.
+
+00:10:06.480 --> 00:10:09.799
+Sönke Ahrens here talked about a desktop,
+
+00:10:09.800 --> 00:10:13.079
+which you have all the literature
+
+00:10:13.080 --> 00:10:16.239
+you want in that desktop,
+
+00:10:16.240 --> 00:10:20.079
+and you try to bring it in order.
+
+00:10:20.080 --> 00:10:22.599
+And by doing that,
+
+00:10:22.600 --> 00:10:24.839
+you can improve your ideas
+
+00:10:24.840 --> 00:10:27.519
+and have a structure
+
+00:10:27.520 --> 00:10:30.919
+so that your manuscript will then be
+
+00:10:30.920 --> 00:10:33.879
+very, very easy to write.
+
+00:10:33.880 --> 00:10:36.279
+And as I say here, in trying to do this,
+
+00:10:36.280 --> 00:10:38.919
+I made something much more general
+
+00:10:38.920 --> 00:10:41.559
+than it needed to be, so yeah,
+
+00:10:41.560 --> 00:10:43.599
+you can use it for many other things.
+
+00:10:43.600 --> 00:10:46.959
+But before I show you some things about it,
+
+00:10:46.960 --> 00:10:49.879
+I want to introduce you to what a desktop is.
+
+00:10:49.880 --> 00:10:53.159
+It's essentially a collection of the knowledge
+
+00:10:53.160 --> 00:10:54.839
+you want to be able to see.
+
+00:10:54.840 --> 00:10:57.999
+You add things to your Zetteldesk,
+
+00:10:58.000 --> 00:11:01.679
+and using filter functions,
+
+00:11:01.680 --> 00:11:04.919
+you only see these notes and nothing else,
+
+00:11:04.920 --> 00:11:07.359
+which in my opinion is very handy.
+
+00:11:07.360 --> 00:11:10.319
+So having said that,
+
+00:11:10.320 --> 00:11:12.479
+we can see these things in action
+
+00:11:12.480 --> 00:11:14.399
+for the final demo of the talk.
+
+00:11:14.400 --> 00:11:15.839
+This is the third one.
+
+00:11:15.840 --> 00:11:20.879
+I will go to an index file of mine.
+
+00:11:20.880 --> 00:11:21.959
+This is 3D printing,
+
+00:11:21.960 --> 00:11:23.479
+an assignment I had last semester.
+
+00:11:23.480 --> 00:11:27.039
+And this has 28 backlinks,
+
+00:11:27.040 --> 00:11:30.399
+so a lot of things that I looked at
+
+00:11:30.400 --> 00:11:31.799
+for this assignment.
+
+00:11:31.800 --> 00:11:33.519
+I can say I want to add
+
+00:11:33.520 --> 00:11:35.799
+the current note's backlinks to the Zetteldesk,
+
+00:11:35.800 --> 00:11:38.239
+and now I have a filtered version
+
+00:11:38.240 --> 00:11:40.119
+of org-roam-node-find defined,
+
+00:11:40.120 --> 00:11:41.999
+which only lists these 29 notes.
+
+00:11:42.000 --> 00:11:45.039
+Very nice, right?
+
+00:11:45.040 --> 00:11:49.159
+I can also filter just the literature notes,
+
+00:11:49.160 --> 00:11:55.999
+which can also use other UIs beside org-roam,
+
+00:11:56.000 --> 00:11:57.439
+such as, for example,
+
+00:11:57.440 --> 00:12:00.039
+one I use a lot is the ivy-bibtex command.
+
+00:12:00.040 --> 00:12:03.239
+This takes a lot of time,
+
+00:12:03.240 --> 00:12:04.599
+much longer than the org-roam one,
+
+00:12:04.600 --> 00:12:06.479
+but has them in this UI,
+
+00:12:06.480 --> 00:12:09.839
+which in a lot of cases is more useful for me.
+
+00:12:09.840 --> 00:12:15.719
+The other very important thing is inserting these.
+
+00:12:15.720 --> 00:12:19.999
+For example, say I want to insert a permanent note,
+
+00:12:20.000 --> 00:12:21.759
+such as this.
+
+00:12:21.760 --> 00:12:25.399
+Its title will become a top-level heading,
+
+00:12:25.400 --> 00:12:29.319
+and everything else will be inserted as expected.
+
+00:12:29.320 --> 00:12:35.399
+But the most important thing for us
+
+00:12:35.400 --> 00:12:37.159
+is inserting literature, right?
+
+00:12:37.160 --> 00:12:39.519
+This is done with this command,
+
+00:12:39.520 --> 00:12:42.719
+and let's say I want to insert this.
+
+00:12:42.720 --> 00:12:48.239
+The title again becomes a heading,
+
+00:12:48.240 --> 00:12:50.839
+and this is the article title also.
+
+00:12:50.840 --> 00:12:53.039
+I store the cite key here,
+
+00:12:53.040 --> 00:12:56.319
+and everything else about it is also here.
+
+00:12:56.320 --> 00:12:58.239
+And I can add others,
+
+00:12:58.240 --> 00:13:01.199
+for example, this and this.
+
+00:13:01.200 --> 00:13:09.039
+And we have all of them here.
+
+00:13:09.040 --> 00:13:11.279
+I see it says this is the basic,
+
+00:13:11.280 --> 00:13:12.799
+so let's put it at the top.
+
+00:13:12.800 --> 00:13:18.839
+And then maybe I want to put this last.
+
+00:13:18.840 --> 00:13:24.159
+And this way, you can sort things,
+
+00:13:24.160 --> 00:13:26.319
+and typically, on the other side,
+
+00:13:26.320 --> 00:13:27.719
+I have a manuscript,
+
+00:13:27.720 --> 00:13:29.999
+and I look at what order
+
+00:13:30.000 --> 00:13:31.159
+I want to have things in
+
+00:13:31.160 --> 00:13:34.799
+and sort the articles and the permanent notes
+
+00:13:34.800 --> 00:13:38.359
+in a way so that each section can have
+
+00:13:38.360 --> 00:13:41.799
+its own citations and its own notes,
+
+00:13:41.800 --> 00:13:46.199
+which makes writing, again, very easy, in my opinion.
+
+00:13:46.200 --> 00:13:53.719
+Finally, let's go to composing the final article.
+
+00:13:53.720 --> 00:13:57.279
+This is our goal: we wrote and organized
+
+00:13:57.280 --> 00:13:58.359
+all these literature notes
+
+00:13:58.360 --> 00:14:00.399
+to put them in your final project.
+
+00:14:00.400 --> 00:14:01.879
+This might be an assignment
+
+00:14:01.880 --> 00:14:04.439
+or an actual scientific article.
+
+00:14:04.440 --> 00:14:07.479
+It is apparent that you have done
+
+00:14:07.480 --> 00:14:09.079
+a lot of work for this so far,
+
+00:14:09.080 --> 00:14:12.279
+but you don't need to do a lot more.
+
+00:14:12.280 --> 00:14:14.079
+In my opinion, this is the easiest part
+
+00:14:14.080 --> 00:14:15.519
+of the whole workflow.
+
+00:14:15.520 --> 00:14:19.279
+People consider final article composition hard,
+
+00:14:19.280 --> 00:14:21.239
+but if you've done all these steps,
+
+00:14:21.240 --> 00:14:23.439
+you already have everything you want
+
+00:14:23.440 --> 00:14:25.639
+to add in the article from your notes.
+
+00:14:25.640 --> 00:14:27.719
+It's already there,
+
+00:14:27.720 --> 00:14:30.759
+a lot of things are copy-pasted,
+
+00:14:30.760 --> 00:14:34.039
+it's all in a coherent order,
+
+00:14:34.040 --> 00:14:38.439
+connections are to an extent already there,
+
+00:14:38.440 --> 00:14:41.599
+and you know what citation goes where,
+
+00:14:41.600 --> 00:14:44.199
+so you can justify everything you write.
+
+00:14:44.200 --> 00:14:46.799
+The actual draft isn't there,
+
+00:14:46.800 --> 00:14:48.519
+but it is very easy
+
+00:14:48.520 --> 00:14:52.599
+because now you just write things as you see them
+
+00:14:52.600 --> 00:14:54.439
+in your desktop and connect them.
+
+00:14:54.440 --> 00:14:56.959
+Connections are basic--
+
+00:14:56.960 --> 00:14:59.439
+connections and making the article good, obviously,
+
+00:14:59.440 --> 00:15:02.399
+are basically the only thing you need to worry,
+
+00:15:02.400 --> 00:15:05.919
+but those are very important
+
+00:15:05.920 --> 00:15:09.039
+because others will only see the final manuscript,
+
+00:15:09.040 --> 00:15:11.079
+so if that's not good,
+
+00:15:11.080 --> 00:15:14.079
+then the whole assignment is not good, obviously.
+
+00:15:14.080 --> 00:15:17.519
+So it's not like your work is done,
+
+00:15:17.520 --> 00:15:19.159
+it's just very easy.
+
+00:15:19.160 --> 00:15:23.279
+And with that, I hope you liked my talk
+
+00:15:23.280 --> 00:15:25.519
+because it is coming to an end now.
+
+00:15:25.520 --> 00:15:27.919
+I want to thank you for your time;
+
+00:15:27.920 --> 00:15:29.679
+I hope you enjoyed it.
+
+00:15:29.680 --> 00:15:32.519
+You can feel free to email me at this address;
+
+00:15:32.520 --> 00:15:35.639
+it has also been on every slide since the beginning.
+
+00:15:35.640 --> 00:15:40.239
+I also have the GitHub for zetteldesk.el here,
+
+00:15:40.240 --> 00:15:42.519
+and I will be available for questions.
+
+00:15:42.520 --> 00:15:44.999
+I will be viewing both the pad and the IRC
+
+00:15:45.000 --> 00:15:49.159
+and will do a live Q&A after this. See you.
+
+00:15:49.160 --> 00:15:51.279
+Actually, before I go,
+
+00:15:51.280 --> 00:15:54.199
+let's show you the GitHub for zetteldesk.el.
+
+00:15:54.200 --> 00:15:57.119
+Here's the README; if you're interested on it,
+
+00:15:57.120 --> 00:15:58.519
+you can see more about it,
+
+00:15:58.520 --> 00:16:02.559
+and also I have a very in-depth wiki about it
+
+00:16:02.560 --> 00:16:06.519
+with 11 pages, and talking about everything
+
+00:16:06.520 --> 00:16:08.079
+that happens here.
+
+00:16:08.080 --> 00:16:11.759
+A lot of what we discussed is in this section
+
+00:16:11.760 --> 00:16:12.919
+about literature notes.
+
+00:16:12.920 --> 00:16:17.199
+These documents go a lot more in-depth
+
+00:16:17.200 --> 00:16:22.799
+in how Zetteldesk works, and also how to use it,
+
+00:16:22.800 --> 00:16:27.719
+so if you're interested, feel free to read them,
+
+00:16:27.720 --> 00:16:30.239
+and if you have any problems,
+
+00:16:30.240 --> 00:16:31.839
+you can open an issue about it;
+
+00:16:31.840 --> 00:16:44.480
+I will be very active. Thank you.
diff --git a/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.vtt b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.vtt
new file mode 100644
index 00000000..8391419c
--- /dev/null
+++ b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.vtt
@@ -0,0 +1,1535 @@
+WEBVTT
+
+00:00:02.000 --> 00:00:02.000
+
+
+00:00:02.000 --> 00:00:05.780
+ All right. I think we're live. Thank you, Andrew, for the
+
+00:00:05.780 --> 00:00:06.480
+ great talk.
+
+00:00:06.480 --> 00:00:09.040
+ Folks, if you'd like to ask your questions, please post
+
+00:00:09.040 --> 00:00:11.280
+ them on the pad. And at some point
+
+00:00:11.280 --> 00:00:13.340
+ in like a minute or two, we'll also open this big blue
+
+00:00:13.340 --> 00:00:14.560
+ button room if you'd like to
+
+00:00:14.560 --> 00:00:17.480
+ join here directly and ask questions here. Take it away,
+
+00:00:17.480 --> 00:00:18.000
+ Andrew.
+
+00:00:18.000 --> 00:00:25.200
+ Yeah, thanks. So should I be reading the questions from the
+
+00:00:25.200 --> 00:00:26.880
+ pad? Yeah.
+
+00:00:26.880 --> 00:00:28.400
+ Yeah, that would be great.
+
+00:00:29.040 --> 00:00:34.760
+ OK, so I see there's a question about is this built into Em
+
+00:00:34.760 --> 00:00:37.440
+acs? I guess that refers to SQLite.
+
+00:00:37.440 --> 00:00:41.630
+ And is it possible to have multiple schemas, multiple
+
+00:00:41.630 --> 00:00:43.840
+ databases? Yes, you could do all that
+
+00:00:43.840 --> 00:00:48.270
+ with Emacs 29. SQLite is built in. You can open up multiple
+
+00:00:48.270 --> 00:00:50.000
+ databases simultaneously and do just
+
+00:00:50.000 --> 00:00:53.460
+ the normal things that you can do with databases. You can
+
+00:00:53.460 --> 00:00:54.640
+ create whatever tables you want.
+
+00:00:55.440 --> 00:01:00.720
+ You can create-- you can have transactions. So it's pretty
+
+00:01:00.720 --> 00:01:04.000
+ full featured. With SQLite,
+
+00:01:04.000 --> 00:01:08.270
+ there's also a notion of additions. You could kind of
+
+00:01:08.270 --> 00:01:10.880
+ compile new things into it. And I'm not
+
+00:01:10.880 --> 00:01:14.560
+ exactly sure to the extent that that is possible as well.
+
+00:01:14.560 --> 00:01:16.400
+ So it's like how full featured of a
+
+00:01:16.400 --> 00:01:19.540
+ SQLite is it? I'm not sure. But the basic stuff, you can
+
+00:01:19.540 --> 00:01:21.680
+ certainly do. And that basic stuff is
+
+00:01:21.680 --> 00:01:26.860
+ fantastic. Next question is, what about collaborative
+
+00:01:26.860 --> 00:01:29.920
+ editing with this? Can you
+
+00:01:29.920 --> 00:01:35.070
+ have multiple computers with multiple Emacs with org mode?
+
+00:01:35.070 --> 00:01:37.840
+ I think it sort of depends. Yes,
+
+00:01:37.840 --> 00:01:41.640
+ I mean, databases are fantastic for having multiple users
+
+00:01:41.640 --> 00:01:44.080
+ doing multiple things at the same time.
+
+00:01:44.080 --> 00:01:48.990
+ And they're really designed for this use case. So I would
+
+00:01:48.990 --> 00:01:51.760
+ say, yes, you could have multiple
+
+00:01:51.760 --> 00:01:56.810
+ editing of the database, multiple editing, whereas you see
+
+00:01:56.810 --> 00:02:04.160
+ some [AUDIO OUT] probably not the best
+
+00:02:04.160 --> 00:02:06.830
+ solution. I suspect it might be possible, but I wouldn't
+
+00:02:06.830 --> 00:02:08.720
+ want to try it. I think it's better for,
+
+00:02:08.720 --> 00:02:12.660
+ like, oh, you can have multiple processes, multiple users,
+
+00:02:12.660 --> 00:02:14.400
+ perhaps contributing to the
+
+00:02:14.400 --> 00:02:17.610
+ same database. And you're growing the database, but not
+
+00:02:17.610 --> 00:02:20.080
+ such tight synchronous interactivity that
+
+00:02:20.080 --> 00:02:24.520
+ I think you might be imagining here. What about using this
+
+00:02:24.520 --> 00:02:26.880
+ on multiple computers? How do you
+
+00:02:26.880 --> 00:02:31.140
+ synchronize your data? I don't know. I need to figure that
+
+00:02:31.140 --> 00:02:33.040
+ out. I think there's a-- like,
+
+00:02:33.040 --> 00:02:36.470
+ yes, you can synchronize your database in the same [AUDIO
+
+00:02:36.470 --> 00:02:38.320
+ OUT] Emacs doesn't have any great
+
+00:02:38.320 --> 00:02:43.000
+ solutions for this. That is, like, when-- let's say I want
+
+00:02:43.000 --> 00:02:45.680
+ to synchronize the things I'm editing
+
+00:02:45.680 --> 00:02:49.280
+ on Emacs with my phone. There's all sorts of various
+
+00:02:49.280 --> 00:02:52.320
+ solutions. You could use Dropbox, Google
+
+00:02:52.320 --> 00:02:56.930
+ Drive, these kinds of things. The database makes that a
+
+00:02:56.930 --> 00:02:59.600
+ little bit harder in the sense that it's
+
+00:02:59.600 --> 00:03:04.400
+ one giant database. I suspect there are interesting ways to
+
+00:03:04.400 --> 00:03:06.560
+ do this, but I haven't explored this area
+
+00:03:06.560 --> 00:03:09.180
+ yet. I think it's a great question, though, and I would
+
+00:03:09.180 --> 00:03:10.800
+ like to investigate this further.
+
+00:03:10.800 --> 00:03:16.640
+ Are you planning to further-- this is a new other question.
+
+00:03:16.640 --> 00:03:18.720
+ Are you planning to further develop EKG?
+
+00:03:18.720 --> 00:03:22.330
+ It's highly [AUDIO OUT] me, and I do prefer SQLite over
+
+00:03:22.330 --> 00:03:23.920
+ Text. Thank you for buying into
+
+00:03:25.200 --> 00:03:29.280
+ the vision. I really like to hear that. Yeah, I am
+
+00:03:29.280 --> 00:03:32.080
+ personally using EKG. I am developing it.
+
+00:03:32.080 --> 00:03:36.940
+ I don't think it's ready for general use yet. I'd like to
+
+00:03:36.940 --> 00:03:39.680
+ get it to a state where it is ready
+
+00:03:39.680 --> 00:03:43.410
+ for general use probably by the end of the month. I think I
+
+00:03:43.410 --> 00:03:45.600
+'ll have a lot of time. There's a pretty
+
+00:03:45.600 --> 00:03:50.500
+ slow month. So that would be really nice. I've just added a
+
+00:03:50.500 --> 00:03:52.160
+ bunch of stuff to it.
+
+00:03:53.360 --> 00:03:55.970
+ I'm exploring. I think the difficult thing is not
+
+00:03:55.970 --> 00:03:58.000
+ necessarily to make it production,
+
+00:03:58.000 --> 00:04:01.800
+ like to make it stable and everything like that and to do
+
+00:04:01.800 --> 00:04:04.320
+ all the developer things that you want
+
+00:04:04.320 --> 00:04:09.380
+ to see in the state of the art era, but really, it's a
+
+00:04:09.380 --> 00:04:12.240
+ different model of how to have notes.
+
+00:04:12.240 --> 00:04:16.860
+ I'm still thinking about some of these fundamental concepts
+
+00:04:16.860 --> 00:04:18.080
+. It took me a long
+
+00:04:18.080 --> 00:04:22.030
+ time to iterate on various designs before I came up with EK
+
+00:04:22.030 --> 00:04:24.240
+G, which I think is [AUDIO OUT]
+
+00:04:24.240 --> 00:04:27.200
+ and so we're going to really see how this goes. But yes,
+
+00:04:27.200 --> 00:04:29.920
+ look for it soon. I'll probably announce it
+
+00:04:29.920 --> 00:04:39.410
+ and maybe on email. And then I will make it available
+
+00:04:39.410 --> 00:04:40.960
+ probably maybe on
+
+00:04:42.000 --> 00:04:46.780
+ new alpha is what I would like to do. Is it possible to
+
+00:04:46.780 --> 00:04:47.760
+ combine the
+
+00:04:47.760 --> 00:04:51.610
+ triples database with some custom tables in the same SQLite
+
+00:04:51.610 --> 00:04:56.240
+ file? Yes. I'm sorry. Let me continue
+
+00:04:56.240 --> 00:04:59.670
+ reading. You need to build a log table next to the triples
+
+00:04:59.670 --> 00:05:02.080
+ table or a quick query of event data.
+
+00:05:02.080 --> 00:05:04.270
+ Yeah, you certainly could do that. And I've been thinking
+
+00:05:04.270 --> 00:05:04.720
+ of adding,
+
+00:05:05.520 --> 00:05:09.210
+ like, just having a record of changes might be an
+
+00:05:09.210 --> 00:05:12.720
+ interesting thing. But yeah, it's just one table
+
+00:05:12.720 --> 00:05:17.840
+ and you really could use this one table called triples, the
+
+00:05:17.840 --> 00:05:22.000
+ triples table, in any other database
+
+00:05:22.000 --> 00:05:24.230
+ or with any other database. It's kind of designed to be its
+
+00:05:24.230 --> 00:05:26.080
+ own database though. But yeah, you could
+
+00:05:26.080 --> 00:05:28.500
+ certainly add things to the side and I can imagine people
+
+00:05:28.500 --> 00:05:29.840
+ writing extensions that do
+
+00:05:30.560 --> 00:05:34.000
+ add some tables to the side to do whatever. It's just that
+
+00:05:34.000 --> 00:05:37.680
+ I think you want to be careful because
+
+00:05:37.680 --> 00:05:42.660
+ that once you start doing that, you might want to, you don
+
+00:05:42.660 --> 00:05:45.040
+'t want to kind of duplicate information or
+
+00:05:45.040 --> 00:05:47.490
+ start having things go out of sync. It's kind of nice just
+
+00:05:47.490 --> 00:05:49.600
+ to have one kind of data. But I think
+
+00:05:49.600 --> 00:05:52.090
+ in certain circumstances, like the kind you're thinking
+
+00:05:52.090 --> 00:05:54.320
+ about, it'd be appropriate. Yeah, so
+
+00:05:54.320 --> 00:06:00.010
+ seems like a good idea. And then I see this final question
+
+00:06:00.010 --> 00:06:02.800
+ here, final for now. What are your
+
+00:06:02.800 --> 00:06:05.270
+ thoughts on adding a timestamp attribute to triple so that
+
+00:06:05.270 --> 00:06:07.280
+ the database becomes append-only and by
+
+00:06:07.280 --> 00:06:10.570
+ default you return the latest fact for a subject-object
+
+00:06:10.570 --> 00:06:13.360
+ pair? Oh, really interesting question.
+
+00:06:13.360 --> 00:06:19.560
+ Let's just say I haven't thought of that and I'll have to
+
+00:06:19.560 --> 00:06:21.680
+ think about it. I don't think,
+
+00:06:21.680 --> 00:06:26.110
+ I haven't seen other triples databases do this. I'd be
+
+00:06:26.110 --> 00:06:28.000
+ interested in what you thought
+
+00:06:28.000 --> 00:06:33.610
+ would be some of the, what you thought might be some of the
+
+00:06:33.610 --> 00:06:34.960
+ interesting
+
+00:06:34.960 --> 00:06:39.440
+ things that come out of this. Yes, you can maybe go back in
+
+00:06:39.440 --> 00:06:41.760
+ time, which is nice,
+
+00:06:41.760 --> 00:06:45.620
+ but then it seems hard to do things like deletes. I guess
+
+00:06:45.620 --> 00:06:48.000
+ you could have tombstones or something
+
+00:06:48.000 --> 00:06:51.110
+ like that, but it becomes a little bit more complicated.
+
+00:06:51.110 --> 00:06:52.880
+ And also just one thing is like,
+
+00:06:52.880 --> 00:06:55.390
+ these kind of databases, I didn't really talk about this in
+
+00:06:55.390 --> 00:06:57.120
+ the talk, but they take up a little
+
+00:06:57.120 --> 00:06:59.870
+ bit of room and I'm a little bit reluctant to have them
+
+00:06:59.870 --> 00:07:01.760
+ even more kind of heavyweight.
+
+00:07:01.760 --> 00:07:05.380
+ On the other hand, perhaps this would go well with the
+
+00:07:05.380 --> 00:07:07.680
+ question about synchronization. If you
+
+00:07:07.680 --> 00:07:11.840
+ were to do as you suggest and have timestamped triples,
+
+00:07:11.840 --> 00:07:14.080
+ synchronization actually becomes pretty
+
+00:07:14.080 --> 00:07:18.110
+ easy. So definitely an interesting thought that I'll have
+
+00:07:18.110 --> 00:07:19.600
+ to think a little bit more about. I
+
+00:07:19.600 --> 00:07:23.970
+ would love to solve the synchronization problem. All right.
+
+00:07:23.970 --> 00:07:29.520
+ I don't see any other, oh yeah,
+
+00:07:29.520 --> 00:07:33.740
+ I don't see any other questions, but you can ask on this,
+
+00:07:33.740 --> 00:07:38.160
+ on the big blue button or type in any
+
+00:07:38.160 --> 00:07:42.730
+ other questions. Otherwise I think we might be done. Cool.
+
+00:07:42.730 --> 00:07:45.280
+ And I will add that. I think we still
+
+00:07:45.280 --> 00:07:48.590
+ have about like, I guess, 15 minutes or so of live Q&A talk
+
+00:07:48.590 --> 00:07:52.320
+ for this talk on stream. If there are no
+
+00:07:52.320 --> 00:07:54.790
+ questions, you're welcome to cut it short, but otherwise we
+
+00:07:54.790 --> 00:07:56.320
+ have plenty of time. So yeah, if
+
+00:07:56.320 --> 00:07:59.910
+ people want to get more questions in, please do. I'm just
+
+00:07:59.910 --> 00:08:01.680
+ going to sit back and wait for the
+
+00:08:01.680 --> 00:08:06.000
+ questions to roll in then. Sounds good. Thank you.
+
+00:08:06.000 --> 00:08:35.920
+ All right. I see another question pop up.
+
+00:08:37.040 --> 00:08:37.040
+
+
+00:08:37.040 --> 00:08:41.400
+ With EKG, what about views like org-roam-node-mindmap-views
+
+00:08:41.400 --> 00:08:44.080
+? Yeah. I personally have
+
+00:08:44.080 --> 00:08:47.280
+ not found those views to be super helpful, but I know
+
+00:08:47.280 --> 00:08:49.680
+ people like them a lot. I don't see any
+
+00:08:49.680 --> 00:08:52.800
+ reason why you couldn't do this. It just would be a
+
+00:08:52.800 --> 00:08:56.000
+ slightly different implementation. Like this
+
+00:08:56.000 --> 00:09:02.940
+ stuff forms a graph. You can do whatever you, you know, you
+
+00:09:02.940 --> 00:09:05.920
+ could easily transform it like that same
+
+00:09:05.920 --> 00:09:09.560
+ org-roam UI. You just have to have like another sort of
+
+00:09:09.560 --> 00:09:12.160
+ translation layer basically to kind of
+
+00:09:12.160 --> 00:09:16.450
+ like figure out how to deal with the stuff in EKG or really
+
+00:09:16.450 --> 00:09:19.520
+ anything with triples. Like fundamentally
+
+00:09:19.520 --> 00:09:23.240
+ it's a graph database, so it lends itself naturally to
+
+00:09:23.240 --> 00:09:25.680
+ things that you're going to be doing,
+
+00:09:25.680 --> 00:09:30.080
+ that anything you're going to be doing with the triples
+
+00:09:30.080 --> 00:09:30.800
+ library.
+
+00:09:32.400 --> 00:09:32.400
+
+
+00:09:32.400 --> 00:09:52.480
+ [silence]
+
+00:09:52.480 --> 00:09:46.220
+ I see another question. Can ordinary Lisp data types, Lisp
+
+00:09:46.220 --> 00:09:59.440
+ symbols, etc. be stored in the
+
+00:09:59.440 --> 00:10:04.760
+ database? Yes, they can. In fact, it's primarily like if
+
+00:10:04.760 --> 00:10:07.120
+ you don't specify anything, it kind of
+
+00:10:07.120 --> 00:10:10.900
+ defaults to a list. That's sort of, I'm not exactly sure
+
+00:10:10.900 --> 00:10:13.520
+ that's the right design choice, but that's
+
+00:10:13.520 --> 00:10:19.230
+ kind of, it seems like a lot of the times it, this kind of
+
+00:10:19.230 --> 00:10:24.000
+ makes sense. Like what if I just added
+
+00:10:24.000 --> 00:10:27.000
+ like a title, I think, if I remember. I did add a title,
+
+00:10:27.000 --> 00:10:29.360
+ but I'm trying to remember. If I just added
+
+00:10:29.360 --> 00:10:33.770
+ the notion of like having a title to EKG and I believe that
+
+00:10:33.770 --> 00:10:36.240
+'s a list. Because you think about it,
+
+00:10:36.240 --> 00:10:39.160
+ you could maybe have alternate titles or multiple titles.
+
+00:10:39.160 --> 00:10:40.880
+ So these are ordered lists and so it kind
+
+00:10:40.880 --> 00:10:44.380
+ of stores it. So basically what happens is you store in the
+
+00:10:44.380 --> 00:10:46.560
+ list of like, but each list item is
+
+00:10:46.560 --> 00:10:49.910
+ a separate row in the table and it has, we call them tri
+
+00:10:49.910 --> 00:10:52.880
+ples, but there's actually one more column
+
+00:10:52.880 --> 00:10:54.720
+ that I don't talk about a lot because it just confuses the
+
+00:10:54.720 --> 00:10:56.160
+ story. But in this case it's relevant
+
+00:10:56.160 --> 00:10:59.040
+ because there you just say what the index is of the item
+
+00:10:59.040 --> 00:11:01.120
+ that you're doing it. So like you'd be
+
+00:11:01.120 --> 00:11:09.150
+ subject and then the predicate would be title in a sense.
+
+00:11:09.150 --> 00:11:12.400
+ And then title one and then like,
+
+00:11:12.400 --> 00:11:15.860
+ okay, that's index one on the fourth column. And then same
+
+00:11:15.860 --> 00:11:17.200
+ thing with the other items.
+
+00:11:17.840 --> 00:11:24.090
+ You can store symbols, SQLite and Emac SQL allow you to
+
+00:11:24.090 --> 00:11:27.920
+ sort of kind of, well, Emac SQL kind of
+
+00:11:27.920 --> 00:11:31.130
+ naturally lets you store lots of different things. And SQL
+
+00:11:31.130 --> 00:11:33.840
+ite, I kind of had to do something that
+
+00:11:33.840 --> 00:11:39.790
+ was very similar to Emac SQL. Emac SQL, in SQL, you have to
+
+00:11:39.790 --> 00:11:43.120
+ just, in your database, it basically
+
+00:11:43.120 --> 00:11:47.000
+ has to be string. Like almost everything besides the predic
+
+00:11:47.000 --> 00:11:49.120
+ates, like the object has to be a string
+
+00:11:49.120 --> 00:11:52.250
+ because it could really be anything. And the subject has to
+
+00:11:52.250 --> 00:11:53.840
+ be a string because it could be
+
+00:11:53.840 --> 00:12:00.490
+ anything. And because of that, we kind of have to make sure
+
+00:12:00.490 --> 00:12:04.080
+ that we kind of have to just store
+
+00:12:04.080 --> 00:12:06.840
+ things in a certain way. Like symbols are just strings and
+
+00:12:06.840 --> 00:12:10.720
+ lists. You could even have a list,
+
+00:12:12.640 --> 00:12:17.810
+ you could have really any list expression as a subject,
+
+00:12:17.810 --> 00:12:21.600
+ right? But it gets just written to a
+
+00:12:21.600 --> 00:12:27.720
+ string and then it gets, when it gets read, it basically,
+
+00:12:27.720 --> 00:12:30.960
+ if it's just a string, it gets read
+
+00:12:30.960 --> 00:12:36.370
+ basically as a list symbol or expression. And if it's a
+
+00:12:36.370 --> 00:12:39.840
+ string, it's a string with a string inside,
+
+00:12:39.840 --> 00:12:44.130
+ that is like the string actually has quotes on either end.
+
+00:12:44.130 --> 00:12:46.000
+ Then we say it's actually a string.
+
+00:12:46.000 --> 00:12:48.770
+ That's how kind of the internal implementation works. And
+
+00:12:48.770 --> 00:12:50.320
+ that's what Emac SQL does as well.
+
+00:12:50.320 --> 00:12:55.040
+ For those who are not familiar, Emac SQL is like this other
+
+00:12:55.040 --> 00:12:58.560
+ way to kind of interact with SQL in
+
+00:12:58.560 --> 00:13:02.210
+ your databases and it works well with SQLite and allows you
+
+00:13:02.210 --> 00:13:04.400
+ to do things like store numbers and
+
+00:13:05.600 --> 00:13:08.960
+ lists as well. And it does this exact same thing. So we try
+
+00:13:08.960 --> 00:13:10.320
+ to keep compatibility.
+
+00:13:10.320 --> 00:13:18.910
+ So you could start a database in Emacs 28 using Emacs SQL
+
+00:13:18.910 --> 00:13:23.440
+ and then you could read it with Emacs 29
+
+00:13:23.440 --> 00:13:27.430
+ using the built in SQLite. That's the hope. I mean, I have
+
+00:13:27.430 --> 00:13:28.720
+ tests, but I don't think anyone
+
+00:13:28.720 --> 00:13:35.050
+ has actually tried to do that exact thing yet. Let's see.
+
+00:13:35.050 --> 00:13:39.040
+ Are there any other new questions?
+
+00:13:39.040 --> 00:13:44.240
+ Oh, there are some. Beyond note taking, what kind of
+
+00:13:44.240 --> 00:13:45.360
+ packages do you
+
+00:13:45.360 --> 00:13:49.680
+ think would benefit from a triple library? I think,
+
+00:13:49.680 --> 00:13:53.830
+ I mean, I think it's generally just an easy way to store
+
+00:13:53.830 --> 00:13:54.880
+ things. So
+
+00:13:56.800 --> 00:14:03.200
+ anything in which you, think of packages that have to store
+
+00:14:03.200 --> 00:14:03.440
+ like
+
+00:14:03.440 --> 00:14:09.440
+ list expressions on the side. Like for example, like BBDB,
+
+00:14:09.440 --> 00:14:11.200
+ if you've used that,
+
+00:14:11.200 --> 00:14:14.110
+ it's just a, it is a database. It's the big brother
+
+00:14:14.110 --> 00:14:17.200
+ database. It's not in a database because
+
+00:14:17.200 --> 00:14:19.890
+ it was written before. Like there was an easy way to use
+
+00:14:19.890 --> 00:14:22.480
+ databases in Emacs. Like that should,
+
+00:14:22.480 --> 00:14:24.640
+ that could definitely, like you don't need the triples
+
+00:14:24.640 --> 00:14:26.160
+ library, but you could easily do this
+
+00:14:26.160 --> 00:14:31.120
+ in the triples library. And I would kind of think triples,
+
+00:14:31.120 --> 00:14:33.120
+ you know, just takes care of a lot of
+
+00:14:33.120 --> 00:14:37.280
+ things and gives a little option over everything. So I mean
+
+00:14:37.280 --> 00:14:39.760
+, there's all sorts of things like,
+
+00:14:39.760 --> 00:14:42.210
+ as I, as I kind of demoed like bookmarks, like why are book
+
+00:14:42.210 --> 00:14:43.920
+marks not in the database? They should be.
+
+00:14:43.920 --> 00:14:48.150
+ So I think if you just look around and look at all these,
+
+00:14:48.150 --> 00:14:50.640
+ all these things as,
+
+00:14:51.280 --> 00:14:55.680
+ as just, just dumping, dumping list expressions to a file,
+
+00:14:55.680 --> 00:14:57.440
+ those probably
+
+00:14:57.440 --> 00:15:01.870
+ SQLite and, and, you know, maybe triples would be a useful
+
+00:15:01.870 --> 00:15:03.200
+ way to do that.
+
+00:15:03.200 --> 00:15:08.720
+ Are you, another question, are you trying to PIM? I think
+
+00:15:08.720 --> 00:15:11.120
+ that means personal information management
+
+00:15:11.120 --> 00:15:16.160
+ with EKG. And what information do you want to manage? I'm
+
+00:15:16.160 --> 00:15:17.120
+ kind of wondering
+
+00:15:18.720 --> 00:15:21.400
+ how I, what I want to do, but like, as I just said in the
+
+00:15:21.400 --> 00:15:23.440
+ previous question, like, I think
+
+00:15:23.440 --> 00:15:26.960
+ you should be storing everything. Yeah. Like libraries,
+
+00:15:26.960 --> 00:15:28.880
+ like, yeah, actually, yeah. BBBB,
+
+00:15:28.880 --> 00:15:32.180
+ you can store contacts and email addresses. And I would
+
+00:15:32.180 --> 00:15:34.320
+ like to, you know, why, if you're storing
+
+00:15:34.320 --> 00:15:37.110
+ that, then it's kind of natural, like, oh, well, you know,
+
+00:15:37.110 --> 00:15:38.880
+ sometimes I want to have a annotation.
+
+00:15:38.880 --> 00:15:41.380
+ I want to write something about this person and, you know,
+
+00:15:41.380 --> 00:15:44.000
+ maybe I want to have something and have,
+
+00:15:46.400 --> 00:15:48.930
+ you know, maybe I want to tag this person. Maybe I want to,
+
+00:15:48.930 --> 00:15:53.200
+ maybe I want to have notes that refer
+
+00:15:53.200 --> 00:15:55.700
+ to this person. So like, it all starts to look like one
+
+00:15:55.700 --> 00:15:57.280
+ giant database when I, when you kind
+
+00:15:57.280 --> 00:16:01.120
+ of think about it a lot, which is kind of why in a, if you
+
+00:16:01.120 --> 00:16:04.800
+ look at the develop, develop branch of
+
+00:16:04.800 --> 00:16:08.290
+ triples, I, I'm work, I think what's going to be in the
+
+00:16:08.290 --> 00:16:10.400
+ next version is, is going to be a
+
+00:16:10.400 --> 00:16:14.110
+ standardized place to, to have a database. That is, you can
+
+00:16:14.110 --> 00:16:17.360
+ just connect to a, to a, the standard
+
+00:16:17.360 --> 00:16:19.360
+ database and you don't have to worry about where the
+
+00:16:19.360 --> 00:16:21.280
+ database is. We'll keep track of that for you.
+
+00:16:21.280 --> 00:16:27.540
+ And, and then everything should be working very easily and
+
+00:16:27.540 --> 00:16:30.320
+ like allow this kind of collaborative
+
+00:16:30.320 --> 00:16:32.770
+ use of, of these things. So like, yeah, it could be a
+
+00:16:32.770 --> 00:16:34.720
+ personal information manager that has all
+
+00:16:34.720 --> 00:16:37.330
+ sorts of information because I think that's what people
+
+00:16:37.330 --> 00:16:39.440
+ tend to use Emacs for is that, you know,
+
+00:16:39.440 --> 00:16:43.610
+ I have my own notes, my own contacts, my own tasks, you
+
+00:16:43.610 --> 00:16:46.080
+ know, why aren't tasks in, tasks should
+
+00:16:46.080 --> 00:16:49.820
+ also perhaps be in, in, in the database. Like, yeah, it's
+
+00:16:49.820 --> 00:16:52.000
+ kind of, org mode is completely awesome,
+
+00:16:52.000 --> 00:16:56.110
+ like really incredible. And it's, it's nice to mix to do's
+
+00:16:56.110 --> 00:16:58.480
+ with things with text, but sometimes
+
+00:16:58.480 --> 00:17:01.850
+ maybe you just want to do's that are not with text and
+
+00:17:01.850 --> 00:17:04.160
+ maybe those could be also in the database.
+
+00:17:04.160 --> 00:17:06.050
+ I don't know. It's just things I, things I'm thinking about
+
+00:17:06.050 --> 00:17:07.200
+. I'm not sure how far I want to
+
+00:17:07.200 --> 00:17:12.160
+ take that. Another question. What about using other
+
+00:17:12.160 --> 00:17:16.000
+ database programs like Postgres, MonoDB?
+
+00:17:16.000 --> 00:17:27.550
+ You, so I think you could, yes, you could do that. I don't
+
+00:17:27.550 --> 00:17:29.920
+ see it's a, I don't know why you,
+
+00:17:29.920 --> 00:17:32.720
+ I don't know if there's any advantage to doing this. Like
+
+00:17:32.720 --> 00:17:35.280
+ SQLite is kind of nice because it is
+
+00:17:35.280 --> 00:17:38.490
+ light. It is kind of, it is built into Emacs and we don't
+
+00:17:38.490 --> 00:17:39.760
+ really need anything incredibly
+
+00:17:39.760 --> 00:17:42.210
+ sophisticated here. Just having a database is like such a
+
+00:17:42.210 --> 00:17:43.680
+ higher level of sophistication than
+
+00:17:43.680 --> 00:17:47.500
+ what we've been doing in Emacs are so far. Then you know, I
+
+00:17:47.500 --> 00:17:50.000
+ think the other stuff might be overkill,
+
+00:17:50.000 --> 00:17:52.800
+ but I see no reason why it wouldn't work. I just don't
+
+00:17:52.800 --> 00:17:54.640
+ really see if there's really any big
+
+00:17:54.640 --> 00:18:00.620
+ advantages. What is your preferred reference to underscan
+
+00:18:00.620 --> 00:18:04.960
+ triples graph DBs? To sort of think
+
+00:18:04.960 --> 00:18:07.330
+ about better schema design? Oh, that's a really awesome
+
+00:18:07.330 --> 00:18:12.480
+ question. And I would, I don't, I don't
+
+00:18:12.480 --> 00:18:15.570
+ think I can answer that immediately. I kind of know all
+
+00:18:15.570 --> 00:18:17.520
+ this stuff from talking to people
+
+00:18:17.520 --> 00:18:21.730
+ basically, instead of like reading things. And like in my
+
+00:18:21.730 --> 00:18:25.040
+ work, I use these triples. That is,
+
+00:18:25.040 --> 00:18:28.100
+ that's kind of like, you know, I kind of work on a
+
+00:18:28.100 --> 00:18:30.560
+ knowledge graph. So I just have a, from,
+
+00:18:30.560 --> 00:18:35.860
+ you know, working knowledge of how these things work. So,
+
+00:18:35.860 --> 00:18:38.400
+ but it is an awesome question that let
+
+00:18:38.400 --> 00:18:41.530
+ me, let me look into it after I kind of finished this and I
+
+00:18:41.530 --> 00:18:43.440
+'ll, I'll try to fill it in, in the,
+
+00:18:43.440 --> 00:18:47.210
+ in the either pad that is connected to this talk. So thank
+
+00:18:47.210 --> 00:18:49.200
+ you for that great question.
+
+00:18:49.200 --> 00:18:53.960
+ So another question, will it slow down with the growth of a
+
+00:18:53.960 --> 00:18:56.960
+ database? Yeah, I need to do
+
+00:18:56.960 --> 00:19:00.040
+ tests about this. Cause I'd like to see like how much, how
+
+00:19:00.040 --> 00:19:01.360
+ much the database blows up,
+
+00:19:01.360 --> 00:19:05.120
+ how much it slows down for sure. Triples is not the most
+
+00:19:05.120 --> 00:19:07.360
+ efficient way. It's not even close
+
+00:19:07.360 --> 00:19:10.650
+ to being a greatly efficient way to store data for doing
+
+00:19:10.650 --> 00:19:13.120
+ any arbitrary things. But what it is,
+
+00:19:13.120 --> 00:19:17.510
+ it you're trading off standardization, which is, so you get
+
+00:19:17.510 --> 00:19:19.600
+ standardization, but you lose,
+
+00:19:19.600 --> 00:19:24.880
+ you lose the power of getting things in one SQL expression.
+
+00:19:24.880 --> 00:19:26.480
+ So you often have to kind of like do
+
+00:19:26.480 --> 00:19:31.400
+ a bunch of round trips and that's slow. However, I I'm
+
+00:19:31.400 --> 00:19:36.320
+ using this now. I have a bunch of data
+
+00:19:36.320 --> 00:19:40.440
+ and you know, quite a bit. I've, I kind of poured it over
+
+00:19:40.440 --> 00:19:42.720
+ my old org Rome to, to EKG.
+
+00:19:42.720 --> 00:19:45.860
+ And you know, I've been accumulating stuff in our room for
+
+00:19:45.860 --> 00:19:47.920
+ like, you know, two years now,
+
+00:19:47.920 --> 00:19:52.510
+ and it's pretty big, but it's very fast, really just no, no
+
+00:19:52.510 --> 00:19:55.200
+ problems at all. So yes, I'm sure
+
+00:19:55.200 --> 00:20:00.750
+ that there is a, a size in which it's too big to be fast.
+
+00:20:00.750 --> 00:20:04.400
+ But I haven't hit it. And I suspect for
+
+00:20:04.400 --> 00:20:09.230
+ most ordinary uses of, of, of Emacs, I doubt other people
+
+00:20:09.230 --> 00:20:12.160
+ will hit it as well. I mean, it's kind of
+
+00:20:12.160 --> 00:20:14.380
+ similar to, you know, when people think about org Rome and
+
+00:20:14.380 --> 00:20:15.760
+ things like, well, you know, you're
+
+00:20:15.760 --> 00:20:17.980
+ storing everything in one database, like how many notes
+
+00:20:17.980 --> 00:20:19.520
+ could have possibly hold, like that's also
+
+00:20:19.520 --> 00:20:25.980
+ going to get slow. Right. So yeah, it's, it's I think these
+
+00:20:25.980 --> 00:20:29.760
+ limits exist, but people tend not to
+
+00:20:29.760 --> 00:20:32.480
+ hit them and it's like, yes, this is going to get slow, but
+
+00:20:32.480 --> 00:20:34.320
+ it'll certainly do better. I think that
+
+00:20:34.320 --> 00:20:38.850
+ files in the file system. What are the, here's another
+
+00:20:38.850 --> 00:20:41.920
+ question. What are your thoughts on
+
+00:20:41.920 --> 00:20:47.130
+ allowing for a true graph DB backend? Whatever the current
+
+00:20:47.130 --> 00:20:50.480
+ best free software alternative to Neo4j
+
+00:20:50.480 --> 00:20:54.710
+ is, I guess. Okay. Great question. I've actually, yeah, I
+
+00:20:54.710 --> 00:20:57.360
+ actually used graph databases and several
+
+00:20:57.360 --> 00:21:00.580
+ companies I used to work for and you know, but we always
+
+00:21:00.580 --> 00:21:03.040
+ ended up switching to SQL. I like it's,
+
+00:21:03.040 --> 00:21:08.000
+ it's I can't, it's just at least for serious applications,
+
+00:21:08.000 --> 00:21:10.080
+ they tended to be slow and
+
+00:21:10.880 --> 00:21:14.310
+ lend themselves to a use that was not, that was very iter
+
+00:21:14.310 --> 00:21:16.480
+ative and not very well thought out.
+
+00:21:16.480 --> 00:21:23.880
+ So however, I don't think it's as I said, with the last
+
+00:21:23.880 --> 00:21:28.720
+ question for the way people want to,
+
+00:21:28.720 --> 00:21:31.090
+ you know, the kind of data I think Emacs users will want, I
+
+00:21:31.090 --> 00:21:32.480
+ think a graph database would work
+
+00:21:32.480 --> 00:21:36.610
+ quite well. I don't know if there would be like, what are
+
+00:21:36.610 --> 00:21:38.720
+ the advantages over triples
+
+00:21:38.720 --> 00:21:41.700
+ aside from sort of just a more, you don't have to kind of
+
+00:21:41.700 --> 00:21:43.440
+ even deal with the SQL layer, but like,
+
+00:21:43.440 --> 00:21:46.040
+ I'm kind of, I'm kind of building, you know, with triples,
+
+00:21:46.040 --> 00:21:47.760
+ we're sort of like, don't even worry about
+
+00:21:47.760 --> 00:21:50.220
+ what the layer is, right? It's just, you don't even have to
+
+00:21:50.220 --> 00:21:51.920
+ worry about SQL if you're just using
+
+00:21:51.920 --> 00:21:57.040
+ kind of the normal functionality. So you can yeah. So, you
+
+00:21:57.040 --> 00:22:00.160
+ know, maybe there are interesting
+
+00:22:00.160 --> 00:22:02.670
+ implications for using a graph database, but I can't really
+
+00:22:02.670 --> 00:22:03.680
+ think of any right now.
+
+00:22:03.680 --> 00:22:09.910
+ It's a good question though. Thank you. - And I'll quickly
+
+00:22:09.910 --> 00:22:10.880
+ add that we have about,
+
+00:22:10.880 --> 00:22:14.850
+ I think two more minutes ish on this live stream. And then
+
+00:22:14.850 --> 00:22:17.120
+ folks are welcome to either join here for
+
+00:22:17.120 --> 00:22:19.560
+ continuing the Q and A or keep posting questions on the pad
+
+00:22:19.560 --> 00:22:21.040
+ and you can continue here in this room
+
+00:22:21.040 --> 00:22:24.000
+ after the stream moves on. - Okay. In that case, I'll,
+
+00:22:24.000 --> 00:22:28.320
+ I will stick around until I don't get any more questions
+
+00:22:28.320 --> 00:22:30.080
+ for a few minutes, then I'll probably
+
+00:22:31.200 --> 00:22:33.440
+ log off. - Sounds great. Thank you.
+
+00:22:33.440 --> 00:22:35.440
+ - Yeah.
+
+00:22:58.960 --> 00:23:02.640
+ - I'm hungry. Did I get writing and recording this? So I
+
+00:23:02.640 --> 00:23:06.560
+ actually did a month ago. So like,
+
+00:23:06.560 --> 00:23:10.530
+ I don't even, I hardly even remember what it was, what that
+
+00:23:10.530 --> 00:23:12.160
+ time was like, but yes, it's,
+
+00:23:12.160 --> 00:23:14.480
+ it took a long time. These things, you know, these
+
+00:23:14.480 --> 00:23:16.480
+ recordings are a little bit challenging. And in
+
+00:23:16.480 --> 00:23:18.780
+ fact, I only kind of screwed up in several instances of the
+
+00:23:18.780 --> 00:23:20.240
+ recording. And like, I just,
+
+00:23:20.240 --> 00:23:22.240
+ I just don't have energy to kind of keep redoing. It's like
+
+00:23:22.240 --> 00:23:23.760
+, it's a long recording. It's also,
+
+00:23:23.760 --> 00:23:26.000
+ I think I chopped it up into three bits. I'm not sure if it
+
+00:23:26.000 --> 00:23:27.600
+ was that, is that obvious, but like,
+
+00:23:27.600 --> 00:23:31.860
+ I guess, notes for people doing future sessions, it's like,
+
+00:23:31.860 --> 00:23:35.680
+ make sure you have natural pauses that
+
+00:23:35.680 --> 00:23:39.860
+ you can sort of just like record a segment because
+
+00:23:39.860 --> 00:23:42.880
+ something would inevitably go wrong. And then like,
+
+00:23:42.880 --> 00:23:45.200
+ if you're trying to repeat a 20 minute talk, it just takes
+
+00:23:45.200 --> 00:23:48.720
+ forever. Yes. Oh yeah. The recipes.
+
+00:23:48.720 --> 00:23:54.230
+ That's right. Yeah. I, well, yes, I'm glad you enjoyed the
+
+00:23:54.230 --> 00:23:56.480
+ recipe. This is great. You put the
+
+00:23:56.480 --> 00:23:59.800
+ recipes in there. Like one thing that I think is, is useful
+
+00:23:59.800 --> 00:24:01.840
+ for, you know, regardless of what
+
+00:24:01.840 --> 00:24:06.110
+ thing you're using in org-roam or EKG or whatever, you know
+
+00:24:06.110 --> 00:24:08.240
+, when you're making a recipe,
+
+00:24:08.240 --> 00:24:11.230
+ you know, record in your daily diary, like, you know, when
+
+00:24:11.230 --> 00:24:12.800
+ you, what you did it, if it worked,
+
+00:24:12.800 --> 00:24:16.160
+ like what, what, you know, what adjustments you had to make
+
+00:24:16.160 --> 00:24:17.760
+, how it turned out, how it could be
+
+00:24:17.760 --> 00:24:21.320
+ better. Then like, if it's linked to the recipe, then you
+
+00:24:21.320 --> 00:24:23.040
+ have a kind of a record of like, oh,
+
+00:24:23.040 --> 00:24:25.720
+ these are, you know, not just the recipe, but like your
+
+00:24:25.720 --> 00:24:27.840
+ experiences making the recipe. I think
+
+00:24:27.840 --> 00:24:32.140
+ it's really powerful because then you can see how, you know
+
+00:24:32.140 --> 00:24:34.480
+, you can kind of refine, refine and
+
+00:24:34.480 --> 00:24:37.030
+ refine. It's really hard to do this in other ways. Like if
+
+00:24:37.030 --> 00:24:38.640
+ just, you're just using your memory,
+
+00:24:38.640 --> 00:24:40.730
+ you're, you're kind of like, well, it's, I can't remember
+
+00:24:40.730 --> 00:24:42.000
+ what I did the last time I made this
+
+00:24:42.000 --> 00:24:45.940
+ recipe, but like, you know, it seems a little bit extreme,
+
+00:24:45.940 --> 00:24:48.240
+ but I think it's quite useful to use
+
+00:24:48.240 --> 00:25:01.720
+ these note-taking applications for this use case. Okay. I
+
+00:25:01.720 --> 00:25:03.440
+ think the stream has moved on, but again,
+
+00:25:03.440 --> 00:25:05.620
+ you're all welcome to stay here and continue to Q&A as long
+
+00:25:05.620 --> 00:25:06.720
+ as there are any questions.
+
+00:25:06.720 --> 00:25:13.440
+ Thank you for your moderation.
+
+00:25:15.120 --> 00:25:19.920
+ Cheers. Happy to. Thanks for the great talk.
+
+00:25:21.200 --> 00:25:21.200
+
+
+00:25:21.200 --> 00:25:23.200
+ [end of transcript]
+
+00:25:46.080 --> 00:25:49.120
+ While I see if there's any more questions, I'm going to
+
+00:25:49.120 --> 00:25:50.320
+ fill in, I think not, not all
+
+00:25:50.320 --> 00:25:52.710
+ the replies are filled in. So I'm going to start filling in
+
+00:25:52.710 --> 00:25:53.200
+ this, you know,
+
+00:25:53.200 --> 00:25:56.240
+ the pad that's associated with this.
+
+00:25:56.400 --> 00:25:56.400
+
+
+00:25:56.400 --> 00:25:58.400
+ [end of transcript]
+
+00:26:00.160 --> 00:26:00.160
+
+
+00:26:00.160 --> 00:26:00.560
+ Okay.
+
+00:26:02.560 --> 00:26:02.560
+
+
+00:26:02.560 --> 00:26:04.560
+ [end of transcript]
+
+00:26:04.560 --> 00:26:14.560
+ Okay.
+
+00:26:16.560 --> 00:26:16.560
+
+
+00:26:16.560 --> 00:26:18.560
+ [end of transcript]
+
+00:26:20.560 --> 00:26:20.560
+
+
+00:26:20.560 --> 00:26:20.560
+ Okay.
+
+00:26:22.560 --> 00:26:22.560
+
+
+00:26:22.560 --> 00:26:22.560
+ Okay.
+
+00:26:24.560 --> 00:26:24.560
+
+
+00:26:24.560 --> 00:26:24.560
+ Okay.
+
+00:26:26.560 --> 00:26:26.560
+
+
+00:26:26.560 --> 00:26:26.560
+ Okay.
+
+00:26:28.560 --> 00:26:28.560
+
+
+00:26:28.560 --> 00:26:28.560
+ Okay.
+
+00:26:30.560 --> 00:26:30.560
+
+
+00:26:30.560 --> 00:26:30.560
+ Okay.
+
+00:26:32.560 --> 00:26:32.560
+
+
+00:26:32.560 --> 00:26:32.560
+ Okay.
+
+00:26:34.560 --> 00:26:34.560
+
+
+00:26:34.560 --> 00:26:34.560
+ Okay.
+
+00:26:36.560 --> 00:26:36.560
+
+
+00:26:36.560 --> 00:26:36.560
+ Okay.
+
+00:26:36.560 --> 00:26:46.560
+ Okay.
+
+00:26:46.560 --> 00:26:56.560
+ Okay.
+
+00:26:56.560 --> 00:27:06.560
+ Okay.
+
+00:27:06.560 --> 00:27:16.560
+ Okay.
+
+00:27:16.560 --> 00:27:26.560
+ Okay.
+
+00:27:26.560 --> 00:27:36.560
+ Okay.
+
+00:27:36.560 --> 00:27:46.560
+ Okay.
+
+00:27:46.560 --> 00:27:56.560
+ Okay.
+
+00:27:56.560 --> 00:28:06.560
+ Okay.
+
+00:28:06.560 --> 00:28:16.560
+ Okay.
+
+00:28:16.560 --> 00:28:26.560
+ Okay.
+
+00:28:26.560 --> 00:28:36.560
+ Okay.
+
+00:28:36.560 --> 00:28:46.560
+ Okay.
+
+00:28:46.560 --> 00:28:56.560
+ Okay.
+
+00:28:56.560 --> 00:29:06.560
+ Okay.
+
+00:29:06.560 --> 00:29:16.560
+ Okay.
+
+00:29:16.560 --> 00:29:26.560
+ Okay.
+
+00:29:26.560 --> 00:29:36.560
+ Okay.
+
+00:29:36.560 --> 00:29:46.560
+ Okay.
+
+00:29:46.560 --> 00:29:56.560
+ Okay.
+
+00:29:56.560 --> 00:30:06.560
+ Okay.
+
+00:30:06.560 --> 00:30:16.560
+ Okay.
+
+00:30:16.560 --> 00:30:26.560
+ Okay.
+
+00:30:26.560 --> 00:30:30.560
+ All right. I, there's no one here and I don't like any
+
+00:30:30.560 --> 00:30:35.360
+ other questions. So I am going to log out. Thank you
+
+00:30:35.360 --> 00:30:36.560
+ everyone for your questions.
+
+00:30:36.560 --> 00:30:38.560
+ [end of transcript]
+
+00:30:40.560 --> 00:30:40.560
+
+
diff --git a/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt
new file mode 100644
index 00000000..c5caa435
--- /dev/null
+++ b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:56.220
+Introduction
+
+00:00:56.220 --> 00:02:29.869
+Why SQLite
+
+00:02:29.870 --> 00:04:50.208
+The triples package
+
+00:04:50.209 --> 00:07:40.740
+Exercise: Emacs bookmarks
+
+00:07:40.740 --> 00:09:31.365
+Creating bookmarks
+
+00:09:31.366 --> 00:11:10.033
+Retrieving bookmarks
+
+00:11:10.034 --> 00:13:59.380
+Backlinks
+
+00:13:59.380 --> 00:15:57.007
+Extensible entities
+
+00:15:57.008 --> 00:18:12.771
+EKG package
+
+00:18:12.772 --> 00:19:43.780
+The code
+
+00:19:43.780 --> 00:20:52.146
+Renaming tags
+
+00:20:52.147 --> 00:21:17.660
+Conclusion
diff --git a/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt
new file mode 100644
index 00000000..4c3792aa
--- /dev/null
+++ b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt
@@ -0,0 +1,1309 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:08.555
+Hello. I'm Andrew Hyatt. I've been working on Emacs,
+
+00:00:08.556 --> 00:00:10.539
+with Emacs, and to some extent
+
+00:00:10.540 --> 00:00:15.272
+on Emacs for a while. I've written the WebSockets library
+
+00:00:15.273 --> 00:00:20.045
+and Emacs calc tutorials. I've enjoyed use of
+
+00:00:20.046 --> 00:00:24.640
+many of everyone's incredible packages.
+
+00:00:24.640 --> 00:00:27.132
+So my thesis for this talk, why I'm giving this talk,
+
+00:00:27.133 --> 00:00:29.060
+is that I'm interested in SQLite.
+
+00:00:29.061 --> 00:00:34.953
+I think we should be exploring SQLite for applications
+
+00:00:34.954 --> 00:00:37.482
+in ways I think the community has shied away from.
+
+00:00:37.483 --> 00:00:41.950
+I'd like to introduce the triples package as a way,
+
+00:00:41.951 --> 00:00:47.664
+both easy and with interesting functionality,
+
+00:00:47.665 --> 00:00:49.153
+that will allow us to build extensible databases
+
+00:00:49.154 --> 00:00:52.582
+in a way that is, I think,
+
+00:00:52.583 --> 00:00:56.220
+a little bit unusual and perhaps compelling, I hope.
+
+00:00:56.220 --> 00:00:59.226
+So first of all, why SQLite?
+
+00:00:59.227 --> 00:01:06.080
+Why is this good? Well, SQLite is now built into Emacs.
+
+00:01:06.080 --> 00:01:12.216
+So you get a few things out of this when you use it for data.
+
+00:01:12.217 --> 00:01:14.580
+First of all, it's a database.
+
+00:01:14.580 --> 00:01:16.369
+It's extremely good for data, of course.
+
+00:01:16.370 --> 00:01:19.918
+There's a simplicity to data manipulation
+
+00:01:19.919 --> 00:01:22.027
+using a database, compared to data manipulation,
+
+00:01:22.028 --> 00:01:25.196
+that is, manipulating data in a text file.
+
+00:01:25.197 --> 00:01:31.033
+Text files are really not built for data.
+
+00:01:31.034 --> 00:01:33.140
+So when typically when you need to do this,
+
+00:01:33.140 --> 00:01:35.026
+like I know Org Mode is--
+
+00:01:35.027 --> 00:01:38.116
+which I'm a huge, huge Org Mode fan--
+
+00:01:38.117 --> 00:01:41.044
+it's all about sort of data in text.
+
+00:01:41.045 --> 00:01:45.375
+It does work, but you certainly would be
+
+00:01:45.376 --> 00:01:47.360
+hard pressed to make sweeping changes
+
+00:01:47.360 --> 00:01:51.953
+to your database that is represented in text.
+
+00:01:51.954 --> 00:01:53.060
+It's just not well suited for this sort of thing.
+
+00:01:53.061 --> 00:01:54.963
+It would take a long time,
+
+00:01:54.964 --> 00:02:00.220
+where the speed of SQL is incredibly impressive.
+
+00:02:00.220 --> 00:02:04.429
+I think certainly Emacs is not known
+
+00:02:04.430 --> 00:02:06.752
+for being extremely speedy.
+
+00:02:06.753 --> 00:02:11.905
+I think the overuse of text
+
+00:02:11.906 --> 00:02:14.613
+is part of this. Of course, text and using text,
+
+00:02:14.614 --> 00:02:18.467
+using files has awesome advantages as well.
+
+00:02:18.468 --> 00:02:20.510
+I'm really here to talk about
+
+00:02:20.511 --> 00:02:22.717
+the other side of the coin, right?
+
+00:02:22.718 --> 00:02:23.961
+Everyone can judge
+
+00:02:23.962 --> 00:02:24.645
+those advantages and disadvantages
+
+00:02:24.646 --> 00:02:25.416
+and make their own trade-offs,
+
+00:02:25.417 --> 00:02:26.020
+but I want to kind of
+
+00:02:26.021 --> 00:02:29.869
+make the pitch for SQLite.
+
+00:02:29.870 --> 00:02:32.860
+So let's talk about the triples package.
+
+00:02:32.860 --> 00:02:35.488
+The triples package is a package
+
+00:02:35.489 --> 00:02:40.419
+that is designed to give you a very generic schema.
+
+00:02:40.420 --> 00:02:42.005
+You don't have to do,
+
+00:02:42.006 --> 00:02:43.291
+for most of the common operations,
+
+00:02:43.292 --> 00:02:45.516
+you don't have to write SQL yourself.
+
+00:02:45.517 --> 00:02:47.924
+A lot of stuff is built in
+
+00:02:47.925 --> 00:02:51.035
+and is based on a very generic schema.
+
+00:02:51.036 --> 00:02:53.840
+That is, it's a single table.
+
+00:02:53.840 --> 00:02:55.229
+That table has, of course, fixed schema.
+
+00:02:55.230 --> 00:02:57.478
+It basically has three columns.
+
+00:02:57.479 --> 00:03:00.867
+It actually has four columns.
+
+00:03:00.868 --> 00:03:01.193
+In this talk, I'm not going to get into
+
+00:03:01.194 --> 00:03:04.123
+the fourth column and why, but it's useful.
+
+00:03:04.124 --> 00:03:07.710
+So the three columns are subject, predicate,
+
+00:03:07.711 --> 00:03:10.361
+and object. This is what it's related to
+
+00:03:10.362 --> 00:03:13.908
+what we call an RDF format.
+
+00:03:13.909 --> 00:03:17.139
+These things basically describe a link.
+
+00:03:17.140 --> 00:03:20.007
+The link is from the subject to the object.
+
+00:03:20.008 --> 00:03:23.955
+The link type is a predicate.
+
+00:03:23.956 --> 00:03:26.085
+That sounds overly theoretical,
+
+00:03:26.086 --> 00:03:28.032
+but the point is that you can describe
+
+00:03:28.033 --> 00:03:32.005
+a lot of things with this format.
+
+00:03:32.006 --> 00:03:33.329
+You probably describe everything with it.
+
+00:03:33.330 --> 00:03:39.226
+It's very simple because the schema is fixed.
+
+00:03:39.227 --> 00:03:42.773
+It's only this kind of data. That means
+
+00:03:42.774 --> 00:03:44.140
+for your application, you define a schema
+
+00:03:44.140 --> 00:03:47.326
+in subject, predicate, object format.
+
+00:03:47.327 --> 00:03:50.072
+That defines what data you can use,
+
+00:03:50.073 --> 00:03:56.069
+what types there are, what properties they have,
+
+00:03:56.070 --> 00:03:57.214
+how you can use the system,
+
+00:03:57.215 --> 00:04:01.006
+and what is legal to do. And this is stored as data.
+
+00:04:01.007 --> 00:04:03.890
+I think as Lisp people,
+
+00:04:03.891 --> 00:04:07.540
+I think we're all very onboard
+
+00:04:07.540 --> 00:04:13.912
+with the fact that you have a simple way
+
+00:04:13.913 --> 00:04:17.660
+to express everything, and you don't have these
+
+00:04:17.660 --> 00:04:18.924
+two systems. In this way,
+
+00:04:18.925 --> 00:04:20.871
+you don't have to have code as a system.
+
+00:04:20.872 --> 00:04:24.825
+Do you have to load code to use the triples package
+
+00:04:24.826 --> 00:04:27.916
+to make sure your schema is obeyed?
+
+00:04:27.917 --> 00:04:35.213
+No, it's all just built in to this database.
+
+00:04:35.214 --> 00:04:37.036
+I'll describe this. As I said,
+
+00:04:37.037 --> 00:04:39.860
+it's a little bit abstract right now,
+
+00:04:39.860 --> 00:04:42.048
+but it will become a lot clearer
+
+00:04:42.049 --> 00:04:46.778
+when we go through an example,
+
+00:04:46.779 --> 00:04:50.208
+which we're going to do now.
+
+00:04:50.209 --> 00:04:56.660
+As an exercise, let's create Emacs bookmarks,
+
+00:04:56.660 --> 00:04:57.345
+which basically are three things:
+
+00:04:57.346 --> 00:05:01.038
+a name, a file, and an annotation.
+
+00:05:01.039 --> 00:05:02.364
+I may be missing out on functionality.
+
+00:05:02.365 --> 00:05:04.772
+Of course, everything in Emacs,
+
+00:05:04.773 --> 00:05:05.140
+everything has lots and lots of functionality,
+
+00:05:05.140 --> 00:05:08.049
+but let's just start with this simple thing.
+
+00:05:08.050 --> 00:05:11.100
+First of all, we're going to open up a database.
+
+00:05:11.100 --> 00:05:12.103
+Pretty simple.
+
+00:05:12.104 --> 00:05:15.014
+I think there's nothing to explain there.
+
+00:05:15.015 --> 00:05:19.106
+But here on this line that I'm on right now,
+
+00:05:19.107 --> 00:05:21.432
+we are saying, okay, there's going to be
+
+00:05:21.433 --> 00:05:24.839
+a type called bookmark.
+
+00:05:24.840 --> 00:05:26.826
+It's going to have the following properties.
+
+00:05:26.827 --> 00:05:29.178
+First, a file, which is unique and a string.
+
+00:05:29.179 --> 00:05:31.764
+The second is an annotation,
+
+00:05:31.765 --> 00:05:34.317
+which is again unique and a string.
+
+00:05:34.318 --> 00:05:37.864
+Then we're going to have another type called named.
+
+00:05:37.865 --> 00:05:39.808
+First of all, why is it named as part of bookmark?
+
+00:05:39.809 --> 00:05:45.562
+As I'll get into, it's interesting
+
+00:05:45.563 --> 00:05:48.511
+when you start sharing this database
+
+00:05:48.512 --> 00:05:51.365
+with other things, not just bookmarks, but other types.
+
+00:05:51.366 --> 00:05:54.616
+Bookmarks are very similar to many other things
+
+00:05:54.617 --> 00:05:56.723
+that you might want to expand into.
+
+00:05:56.724 --> 00:05:57.086
+Those other things have names,
+
+00:05:57.087 --> 00:05:58.269
+but they're not bookmarks.
+
+00:05:58.270 --> 00:06:04.123
+It's nice to separate these concerns out
+
+00:06:04.124 --> 00:06:08.372
+and just have another type called named,
+
+00:06:08.373 --> 00:06:12.780
+which just basically has a name.
+
+00:06:12.780 --> 00:06:15.746
+We can execute this.
+
+00:06:15.747 --> 00:06:21.798
+It's not interesting to look at these.
+
+00:06:21.440 --> 00:06:25.907
+that is not all that useful for anything,
+
+00:06:21.799 --> 00:06:21.439
+It outputs something
+
+00:06:25.908 --> 00:06:28.014
+but that's okay. What's done is, actually,
+
+00:06:28.015 --> 00:06:32.262
+it's created a database
+
+00:06:32.263 --> 00:06:34.045
+and it's populated it with the schema.
+
+00:06:34.046 --> 00:06:41.478
+We can look at this.
+
+00:06:41.479 --> 00:06:43.602
+We won't go through all of this
+
+00:06:43.603 --> 00:06:44.188
+because it's a little bit too much
+
+00:06:44.189 --> 00:06:46.036
+for a short presentation like this,
+
+00:06:46.037 --> 00:06:48.185
+but you could see that there's something here
+
+00:06:48.186 --> 00:06:52.500
+that's like, oh, we have a subject bookmark.
+
+00:06:52.500 --> 00:06:56.031
+We have a property base/type.
+
+00:06:56.032 --> 00:06:58.878
+That just means that there's a property
+
+00:06:58.879 --> 00:07:00.562
+that's defined by the base.
+
+00:07:00.563 --> 00:07:02.248
+This means this is from the triples package itself.
+
+00:07:02.249 --> 00:07:08.940
+It's not some other package.
+
+00:07:08.940 --> 00:07:11.525
+Third is, what is the type of this object?
+
+00:07:11.526 --> 00:07:17.060
+It's a schema. This thing could be many types.
+
+00:07:17.060 --> 00:07:19.150
+As I said, if you have a--
+
+00:07:19.151 --> 00:07:20.235
+we haven't seen an example yet,
+
+00:07:20.236 --> 00:07:21.100
+but if you have a bookmark,
+
+00:07:21.100 --> 00:07:23.686
+it's going to have a name type
+
+00:07:23.687 --> 00:07:25.694
+and a bookmark type.
+
+00:07:25.695 --> 00:07:26.719
+Everything is multi-typed
+
+00:07:26.720 --> 00:07:28.146
+and that's kind of a feature
+
+00:07:28.147 --> 00:07:32.137
+of this kind of storage system.
+
+00:07:32.138 --> 00:07:33.140
+I'm not going to go through everything,
+
+00:07:33.140 --> 00:07:35.865
+but you can see it's all there in triples,
+
+00:07:35.866 --> 00:07:40.740
+the whole schema, everything we just did.
+
+00:07:40.740 --> 00:07:42.645
+Let's create a bookmark. Again,
+
+00:07:42.646 --> 00:07:46.997
+we're going to connect to our database
+
+00:07:46.998 --> 00:07:49.246
+and we're going to basically set
+
+00:07:49.247 --> 00:07:52.552
+an entire subject.
+
+00:07:52.553 --> 00:07:54.239
+The subject is, it's basically like an entity.
+
+00:07:54.240 --> 00:07:56.105
+We're going to define a whole entity
+
+00:07:56.106 --> 00:08:00.676
+or you could refer to it as an object.
+
+00:08:00.677 --> 00:08:03.909
+That's a perfectly fine way to look at it, I think.
+
+00:08:03.910 --> 00:08:04.356
+It's going to have some identifier.
+
+00:08:04.357 --> 00:08:06.723
+That identifier could be anything.
+
+00:08:06.724 --> 00:08:07.431
+It doesn't have to be a string.
+
+00:08:07.432 --> 00:08:09.260
+It could really be anything, but we're going
+
+00:08:09.260 --> 00:08:11.369
+to give it a string called emacs-init.
+
+00:08:11.370 --> 00:08:13.298
+It does not matter what this identifier is,
+
+00:08:13.299 --> 00:08:17.808
+at least for our purposes.
+
+00:08:17.809 --> 00:08:19.914
+It does matter when you're linking to it,
+
+00:08:19.915 --> 00:08:22.263
+but I think nothing that I'm about to show you.
+
+00:08:22.264 --> 00:08:25.830
+This could truly be anything
+
+00:08:25.831 --> 00:08:28.180
+because it has a separate name.
+
+00:08:28.180 --> 00:08:32.131
+I'm giving it a name here, which is init.
+
+00:08:32.133 --> 00:08:34.917
+I'm just specifying the named type here
+
+00:08:34.918 --> 00:08:38.047
+and I'm specifying the bookmark type here
+
+00:08:38.048 --> 00:08:43.219
+and its values. We're going to do that.
+
+00:08:43.220 --> 00:08:47.769
+Now, if we look, we see everything we saw before,
+
+00:08:47.770 --> 00:08:52.246
+but now we have subject emacs-init.
+
+00:08:52.247 --> 00:08:55.973
+It has a type and it's named.
+
+00:08:55.974 --> 00:08:57.220
+We also see the same thing two lines down.
+
+00:08:57.220 --> 00:08:58.264
+This type is also a bookmark,
+
+00:08:58.265 --> 00:09:02.819
+but the name is init in the named/name,
+
+00:09:02.820 --> 00:09:05.966
+which is like the type is name, named,
+
+00:09:05.967 --> 00:09:08.752
+and the property is name. It's init.
+
+00:09:08.753 --> 00:09:12.661
+As you can see, this is just
+
+00:09:12.662 --> 00:09:16.331
+how everything looks.
+
+00:09:16.332 --> 00:09:18.356
+It's pretty straightforward
+
+00:09:18.357 --> 00:09:19.318
+and you can retrieve it.
+
+00:09:19.319 --> 00:09:21.603
+Now, we're looking at the database,
+
+00:09:21.604 --> 00:09:22.689
+but you don't really have to
+
+00:09:22.690 --> 00:09:23.218
+look at the database for... In fact,
+
+00:09:23.219 --> 00:09:24.222
+I think we're done looking
+
+00:09:24.223 --> 00:09:25.105
+at the triples format,
+
+00:09:25.106 --> 00:09:29.718
+because I think it's very simple.
+
+00:09:29.719 --> 00:09:31.365
+You've already got the hang of it, I think.
+
+00:09:31.366 --> 00:09:33.069
+Let's retrieve that just to make sure, yes,
+
+00:09:33.070 --> 00:09:37.980
+we can retrieve it.
+
+00:09:37.981 --> 00:09:38.247
+We're going to retrieve it and say, okay,
+
+00:09:38.248 --> 00:09:43.286
+what do we get when we load the emacs-init subject?
+
+00:09:43.287 --> 00:09:48.697
+Well, we get a plist of all of its properties,
+
+00:09:48.698 --> 00:09:55.630
+which then you can use in your application.
+
+00:09:55.631 --> 00:09:57.455
+There's many more ways to retrieve
+
+00:09:57.456 --> 00:09:59.379
+and there's many more ways to save.
+
+00:09:59.380 --> 00:10:01.904
+In fact, I think the way I did it here
+
+00:10:01.905 --> 00:10:04.015
+with set subject is probably not
+
+00:10:04.016 --> 00:10:06.781
+the right way to do it most of the time.
+
+00:10:06.782 --> 00:10:08.127
+It's usually because it'll erase everything.
+
+00:10:08.128 --> 00:10:13.740
+It's only really to be used when
+
+00:10:13.740 --> 00:10:15.710
+you're sure you control all the data,
+
+00:10:15.711 --> 00:10:16.399
+but you're never sure because there could be
+
+00:10:16.400 --> 00:10:19.610
+other packages that are also using this database,
+
+00:10:19.611 --> 00:10:20.695
+they could have their own data.
+
+00:10:20.696 --> 00:10:21.342
+You don't want to erase
+
+00:10:21.343 --> 00:10:25.014
+all the other Emacs init subject data.
+
+00:10:25.015 --> 00:10:27.699
+In this case, we did because
+
+00:10:27.700 --> 00:10:30.810
+we are confident it was a new entity,
+
+00:10:30.811 --> 00:10:31.335
+but in most cases, the right thing to do is
+
+00:10:31.336 --> 00:10:34.289
+just set it by type. Just say,
+
+00:10:34.290 --> 00:10:36.676
+we're just going to set the bookmark type,
+
+00:10:36.677 --> 00:10:37.222
+which is... The properties are this,
+
+00:10:37.223 --> 00:10:38.104
+and then the name type
+
+00:10:38.105 --> 00:10:42.814
+and the properties are that.
+
+00:10:42.815 --> 00:10:44.900
+That's a way that you could do things.
+
+00:10:44.900 --> 00:10:48.526
+There's also many retrieval types.
+
+00:10:48.527 --> 00:10:53.755
+The retrieval types:
+
+00:10:53.756 --> 00:10:56.403
+you can retrieve by a number of different ways,
+
+00:10:56.404 --> 00:10:58.869
+which I'm not going to get into,
+
+00:10:58.870 --> 00:11:01.241
+but you can read about in either the source
+
+00:11:01.242 --> 00:11:10.033
+or the readme in the package.
+
+00:11:10.034 --> 00:11:14.539
+We have backlinks as well.
+
+00:11:14.540 --> 00:11:15.862
+Let me explain what backlinks are.
+
+00:11:15.863 --> 00:11:17.172
+There's another feature of the triples.
+
+00:11:17.173 --> 00:11:19.860
+As I mentioned, these things
+
+00:11:19.861 --> 00:11:21.849
+can be thought about as links,
+
+00:11:21.850 --> 00:11:23.797
+but what could be a link in one direction
+
+00:11:23.798 --> 00:11:25.804
+could also be a link in the other direction,
+
+00:11:25.805 --> 00:11:28.395
+and we basically get this for free.
+
+00:11:28.396 --> 00:11:33.807
+Here's an example where we are again
+
+00:11:33.808 --> 00:11:35.752
+connecting toward bookmark. Here we're going to
+
+00:11:35.753 --> 00:11:38.223
+add a new type called tagged.
+
+00:11:38.224 --> 00:11:41.613
+We're going to give everything in tags.
+
+00:11:41.614 --> 00:11:45.524
+Here we're saying, okay, there's a type called tagged
+
+00:11:45.525 --> 00:11:49.234
+and it has a property called tags.
+
+00:11:49.235 --> 00:11:52.060
+This is not unique, so it's a list basically.
+
+00:11:52.060 --> 00:11:54.326
+It's a list of string.
+
+00:11:54.327 --> 00:11:58.675
+There also is a type called tag.
+
+00:11:58.676 --> 00:12:01.402
+This is for things that are tags themselves.
+
+00:12:01.403 --> 00:12:06.127
+Then it has a type called numbers
+
+00:12:06.128 --> 00:12:18.003
+and it has what we call a virtual reversed property.
+
+00:12:18.004 --> 00:12:21.075
+It's virtual because it's not actually stored.
+
+00:12:21.076 --> 00:12:23.741
+We just compute it by reversing
+
+00:12:23.742 --> 00:12:24.306
+the subject and the object.
+
+00:12:24.307 --> 00:12:29.260
+This is on tagged tags. When we query this,
+
+00:12:29.260 --> 00:12:32.006
+we can just say, okay,
+
+00:12:32.007 --> 00:12:33.268
+what are all the subjects
+
+00:12:33.269 --> 00:12:38.859
+that have tagged tags of me, the tag?
+
+00:12:38.860 --> 00:12:39.365
+In fact, let me demonstrate that for you.
+
+00:12:39.366 --> 00:12:42.139
+We're going to set the type on emacs-init.
+
+00:12:42.140 --> 00:12:45.070
+We're going to add the "tagged" type.
+
+00:12:45.071 --> 00:12:47.017
+This is the alternate way of setting data
+
+00:12:47.018 --> 00:12:48.740
+that I mentioned.
+
+00:12:48.740 --> 00:12:49.924
+This won't erase anything else.
+
+00:12:49.925 --> 00:12:51.752
+We're just adding something here.
+
+00:12:51.753 --> 00:12:54.742
+We're adding this type "tagged"
+
+00:12:54.743 --> 00:12:59.953
+to our previous bookmark emacs-init.
+
+00:12:59.954 --> 00:13:01.058
+We're going to add emacs and config
+
+00:13:01.059 --> 00:13:06.866
+as the tags. We're going to then
+
+00:13:06.867 --> 00:13:11.095
+set emacs as a tag and config as a tag.
+
+00:13:11.096 --> 00:13:15.385
+That just lets us have this virtual property.
+
+00:13:15.386 --> 00:13:16.389
+You have to do something.
+
+00:13:16.390 --> 00:13:18.733
+You can't get it out of thin air.
+
+00:13:18.734 --> 00:13:23.426
+The design decision we've made is:
+
+00:13:23.427 --> 00:13:25.508
+you at least need to tag it
+
+00:13:25.509 --> 00:13:32.660
+before you get the free property.
+
+00:13:32.660 --> 00:13:35.631
+What you should see... Let's try it out.
+
+00:13:35.632 --> 00:13:36.037
+We got the subject config,
+
+00:13:36.038 --> 00:13:37.261
+which we've set no data on.
+
+00:13:37.262 --> 00:13:40.668
+You can tell we're not sending any data.
+
+00:13:40.669 --> 00:13:44.820
+If I get that subject, the result is that
+
+00:13:44.821 --> 00:13:46.068
+it says its members are emacs-init.
+
+00:13:46.069 --> 00:13:49.878
+That's what a virtual reverse property.
+
+00:13:49.879 --> 00:13:53.606
+As we tag more things, this just
+
+00:13:53.607 --> 00:13:55.151
+continues to work because it's just doing
+
+00:13:55.152 --> 00:13:59.380
+a SQL query here.
+
+00:13:59.380 --> 00:14:01.985
+Besides showing off the backlinks function,
+
+00:14:01.986 --> 00:14:04.175
+this also shows off the general way
+
+00:14:04.176 --> 00:14:07.863
+you can have extensible entities.
+
+00:14:07.864 --> 00:14:09.391
+That is, it's possible that someone writes
+
+00:14:09.392 --> 00:14:13.062
+a bookmarks package that stores everything
+
+00:14:13.063 --> 00:14:18.054
+in a database, in the triples database,
+
+00:14:18.055 --> 00:14:21.521
+but then someone else can come and say,
+
+00:14:21.522 --> 00:14:23.590
+okay, I'm going to define my own types
+
+00:14:23.591 --> 00:14:25.739
+that's meant to work with this database,
+
+00:14:25.740 --> 00:14:28.507
+just like someone could do what I did here,
+
+00:14:28.508 --> 00:14:30.874
+just to add simple tagging.
+
+00:14:30.875 --> 00:14:32.900
+It's very easy to do.
+
+00:14:32.901 --> 00:14:35.931
+This stuff is not that easy to do otherwise.
+
+00:14:35.932 --> 00:14:38.961
+To do this in Lisp, I would say it's a little awkward.
+
+00:14:38.962 --> 00:14:42.673
+With databases, again, it's not only possible,
+
+00:14:42.674 --> 00:14:43.498
+it's relatively trivial,
+
+00:14:43.499 --> 00:14:49.828
+especially with this kind of database.
+
+00:14:49.829 --> 00:14:53.056
+The benefit is it's super easy to work with.
+
+00:14:53.057 --> 00:14:56.041
+With this kind of generic database,
+
+00:14:56.042 --> 00:15:00.311
+the drawback is it's not all that efficient
+
+00:15:00.312 --> 00:15:04.381
+as a special purpose table
+
+00:15:04.382 --> 00:15:06.191
+that is really built for efficiencies.
+
+00:15:06.192 --> 00:15:08.820
+A lot of times you have to do multiple lookups
+
+00:15:08.820 --> 00:15:09.442
+and things like that.
+
+00:15:09.443 --> 00:15:11.985
+Again, it's a trade-off for various things.
+
+00:15:11.986 --> 00:15:19.900
+As you can see, this is like
+
+00:15:19.901 --> 00:15:22.066
+one database for everything.
+
+00:15:22.067 --> 00:15:29.178
+That means that we don't have to all
+
+00:15:29.179 --> 00:15:31.944
+contribute to one giant database.
+
+00:15:31.945 --> 00:15:33.052
+All the packages that use triples,
+
+00:15:33.053 --> 00:15:35.180
+it doesn't have to be one database,
+
+00:15:35.180 --> 00:15:37.086
+but it's cool if it does.
+
+00:15:37.087 --> 00:15:39.393
+I don't know what I want to happen
+
+00:15:39.394 --> 00:15:41.220
+or what I expect to happen,
+
+00:15:41.220 --> 00:15:43.068
+but I think an interesting property is that
+
+00:15:43.069 --> 00:15:45.400
+this is a way for lots of data to live together
+
+00:15:45.400 --> 00:15:49.606
+and build off each other in ways that I think
+
+00:15:49.607 --> 00:15:55.780
+are hard to do with other forms of table layouts
+
+00:15:55.780 --> 00:15:57.007
+and things like that.
+
+00:15:57.008 --> 00:15:59.653
+Let's talk about a use of it,
+
+00:15:59.654 --> 00:16:02.643
+which is the EKG package.
+
+00:16:02.644 --> 00:16:04.589
+The EKG package is something I've written
+
+00:16:04.590 --> 00:16:07.780
+to demonstrate the triples library
+
+00:16:07.780 --> 00:16:09.409
+and use it for something I think is interesting,
+
+00:16:09.410 --> 00:16:12.420
+which is personal knowledge management systems
+
+00:16:12.420 --> 00:16:14.384
+of the same type, of the same genre
+
+00:16:14.385 --> 00:16:15.286
+that Org Roam is,
+
+00:16:15.287 --> 00:16:18.433
+but with different design decisions.
+
+00:16:18.434 --> 00:16:26.531
+I'll show it in action for a little bit.
+
+00:16:26.532 --> 00:16:28.359
+Let's just look at... it's all tag-based,
+
+00:16:28.360 --> 00:16:30.185
+same kind of tags we saw before
+
+00:16:30.186 --> 00:16:32.232
+when we were playing around
+
+00:16:32.233 --> 00:16:35.560
+with the bookmarks example application,
+
+00:16:35.224 --> 00:16:37.475
+What I want to show is: I can look at a tag.
+
+00:16:35.560 --> 00:16:35.223
+but everything here is...
+
+00:16:37.476 --> 00:16:40.287
+I could see notes with that tag.
+
+00:16:40.288 --> 00:16:42.632
+Everything you see here is in the database,
+
+00:16:42.633 --> 00:16:43.198
+no files involved.
+
+00:16:43.199 --> 00:16:46.404
+All of this is just a thing
+
+00:16:46.405 --> 00:16:49.390
+that's an entire object, the entire string.
+
+00:16:49.391 --> 00:16:56.081
+It works. It has tags.
+
+00:16:56.082 --> 00:16:59.229
+You can see not only this tag,
+
+00:16:59.230 --> 00:17:01.354
+but all the other tags associated with it
+
+00:17:01.355 --> 00:17:04.860
+and their notes.
+
+00:17:04.860 --> 00:17:10.255
+It's kind of an interesting way to do things.
+
+00:17:10.256 --> 00:17:12.260
+When you capture it, I think it's interesting.
+
+00:17:12.260 --> 00:17:22.275
+There's a lot of interesting design elements here.
+
+00:17:22.276 --> 00:17:25.819
+This tags thing is not part of the buffer.
+
+00:17:25.819 --> 00:17:28.751
+It's not like Org Roam.
+
+00:17:28.752 --> 00:17:29.116
+You see here in this other tags,
+
+00:17:29.117 --> 00:17:31.924
+these are things I've imported from Org Roam.
+
+00:17:31.925 --> 00:17:32.230
+This is why they look like they do.
+
+00:17:32.231 --> 00:17:34.020
+They have their own titles because
+
+00:17:34.020 --> 00:17:37.889
+I just wrote them all in Org Roam.
+
+00:17:37.890 --> 00:17:39.457
+What it looks like, really, for these notes
+
+00:17:39.458 --> 00:17:41.023
+is that it's just text.
+
+00:17:41.024 --> 00:17:44.615
+You really don't have to bother with this metadata.
+
+00:17:44.616 --> 00:17:46.282
+If I want another tag like pancakes,
+
+00:17:46.283 --> 00:17:53.654
+I can just add it here. Again, these tags
+
+00:17:53.655 --> 00:17:56.740
+will turn into data, triple data.
+
+00:17:56.740 --> 00:17:59.825
+The text is just a triple date[??] as well,
+
+00:17:59.826 --> 00:18:01.969
+but different to triple data.
+
+00:18:01.970 --> 00:18:08.362
+All these things are like that.
+
+00:18:08.363 --> 00:18:12.771
+You can open up any of these things, et cetera.
+
+00:18:12.772 --> 00:18:16.682
+I think the interesting thing here
+
+00:18:16.683 --> 00:18:22.596
+is to see the code. It's not super interesting
+
+00:18:22.597 --> 00:18:23.980
+to look at code for too long,
+
+00:18:23.980 --> 00:18:26.991
+but we don't have that long.
+
+00:18:26.992 --> 00:18:27.654
+Whenever we connect--
+
+00:18:27.655 --> 00:18:28.819
+I just want to point out a few things.
+
+00:18:28.820 --> 00:18:29.205
+Whenever we connect, we have a schema.
+
+00:18:29.206 --> 00:18:31.175
+We just do this. Every time we connect,
+
+00:18:31.176 --> 00:18:33.163
+we just make sure it has the right schema.
+
+00:18:33.164 --> 00:18:36.314
+This way, the user is up to date.
+
+00:18:36.315 --> 00:18:38.300
+This schema just looks exactly like
+
+00:18:38.301 --> 00:18:41.687
+stuff I showed you in the triples
+
+00:18:41.688 --> 00:18:43.532
+when we were looking at bookmarks.
+
+00:18:43.533 --> 00:18:45.100
+It's not complicated.
+
+00:18:45.100 --> 00:18:48.210
+I even have stuff here with people
+
+00:18:48.211 --> 00:18:51.538
+to use this as a person database.
+
+00:18:51.539 --> 00:18:52.104
+I haven't figured out how I'm going to use this yet,
+
+00:18:52.105 --> 00:18:54.273
+but you can see just to do this,
+
+00:18:54.274 --> 00:19:01.913
+it's really trivial and it's pretty easy.
+
+00:19:01.914 --> 00:19:02.498
+Let's show a few other things,
+
+00:19:02.499 --> 00:19:05.844
+like getting all the tags.
+
+00:19:05.845 --> 00:19:07.990
+Here, we could just say,
+
+00:19:07.991 --> 00:19:10.379
+let's get the subjects of type tag.
+
+00:19:10.380 --> 00:19:12.902
+We have all the triples,
+
+00:19:12.903 --> 00:19:15.849
+all the ones that are of type tag,
+
+00:19:15.850 --> 00:19:18.777
+all the things that have a subject.
+
+00:19:18.778 --> 00:19:22.145
+All the subjects that have links,
+
+00:19:22.146 --> 00:19:28.337
+that have this type, this tag in it,
+
+00:19:28.338 --> 00:19:30.660
+we can return them all.
+
+00:19:30.426 --> 00:19:32.674
+of all these objects.
+
+00:19:30.660 --> 00:19:30.425
+Basically, it just gives you a list
+
+00:19:32.675 --> 00:19:33.243
+Again, you can think of these things as objects.
+
+00:19:33.244 --> 00:19:35.433
+All the objects of type tag,
+
+00:19:35.434 --> 00:19:37.320
+we'll just get them all. Super, super simple.
+
+00:19:37.321 --> 00:19:39.585
+Triples gives you this functionality
+
+00:19:39.586 --> 00:19:43.780
+out of the box. It's not that complicated.
+
+00:19:43.780 --> 00:19:45.167
+What I would like to show,
+
+00:19:45.168 --> 00:19:49.518
+and that shows my thesis for this whole talk,
+
+00:19:49.519 --> 00:19:52.785
+is this rename tag. Now, think about
+
+00:19:52.786 --> 00:19:54.150
+how you would rename a tag in Org Roam
+
+00:19:54.151 --> 00:20:03.013
+or anything where the tag is part of the files.
+
+00:20:03.014 --> 00:20:05.280
+It's like how you would re-tag everything
+
+00:20:05.280 --> 00:20:09.869
+in Org Mode. It's complicated and error-prone
+
+00:20:09.870 --> 00:20:12.556
+and slow. This is anything,
+
+00:20:12.557 --> 00:20:14.763
+this is instantaneous and super easy.
+
+00:20:14.764 --> 00:20:17.255
+Look, that's it. There's not that many places
+
+00:20:17.256 --> 00:20:19.540
+for an error to live here.
+
+00:20:19.540 --> 00:20:21.507
+One thing I would like to point out
+
+00:20:21.508 --> 00:20:23.337
+is that we are doing direct,
+
+00:20:23.338 --> 00:20:24.320
+not everything has to go through
+
+00:20:24.321 --> 00:20:28.292
+the triples package. Maybe it should,
+
+00:20:28.293 --> 00:20:31.660
+but the triples package is a fixed format,
+
+00:20:31.660 --> 00:20:33.906
+which is why it's okay--
+
+00:20:33.907 --> 00:20:34.069
+whether it's a good idea, I'm not sure,
+
+00:20:34.070 --> 00:20:39.863
+but it's okay for client packages
+
+00:20:39.864 --> 00:20:42.833
+to just directly manipulate the tables.
+
+00:20:42.834 --> 00:20:43.937
+Here, we're just doing it just to
+
+00:20:43.938 --> 00:20:45.265
+update all the tags
+
+00:20:45.266 --> 00:20:47.891
+and then remove and set types
+
+00:20:47.892 --> 00:20:49.119
+so that the correct thing happens.
+
+00:20:49.120 --> 00:20:52.146
+As you can see, it's super, super simple.
+
+00:20:52.147 --> 00:20:55.374
+I think this proves my thesis about
+
+00:20:55.375 --> 00:21:01.526
+the advantages of applications with SQLite.
+
+00:21:01.527 --> 00:21:02.430
+Thank you for listening.
+
+00:21:02.431 --> 00:21:05.876
+I hope this puts ideas in your minds
+
+00:21:05.877 --> 00:21:09.827
+about taking advantage of this functionality.
+
+00:21:09.828 --> 00:21:11.935
+I hope to see more things
+
+00:21:11.936 --> 00:21:12.180
+using the triples library
+
+00:21:12.180 --> 00:21:16.017
+or otherwise that take advantage of this.
+
+00:21:16.018 --> 00:21:17.660
+Thank you for your time.
diff --git a/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt b/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt
new file mode 100644
index 00000000..ba390789
--- /dev/null
+++ b/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt
@@ -0,0 +1,68 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:26.039
+Introduction
+
+00:00:26.040 --> 00:01:54.359
+The 2020 Emacs User Survey
+
+00:01:54.360 --> 00:03:18.559
+The design of the survey
+
+00:03:18.560 --> 00:04:01.020
+Survey frameworks
+
+00:04:01.021 --> 00:05:40.199
+Writing a new survey framework in Julia
+
+00:05:40.200 --> 00:06:50.559
+In practice
+
+00:06:50.560 --> 00:07:39.599
+Results
+
+00:07:39.600 --> 00:09:11.159
+Going forward
+
+00:09:11.160 --> 00:11:16.999
+Responses
+
+00:11:17.000 --> 00:12:32.279
+Geography
+
+00:12:32.280 --> 00:14:04.439
+Gender
+
+00:14:04.440 --> 00:16:11.319
+Occupations
+
+00:16:11.320 --> 00:17:02.439
+Free and open source software
+
+00:17:02.440 --> 00:17:56.359
+Emacs versions
+
+00:17:56.360 --> 00:19:25.799
+Languages
+
+00:19:25.800 --> 00:20:03.399
+Prose
+
+00:20:03.400 --> 00:21:04.919
+Packages
+
+00:21:04.920 --> 00:21:38.439
+Documentation
+
+00:21:38.440 --> 00:22:44.199
+Moving forward
+
+00:22:44.200 --> 00:23:26.199
+Time
+
+00:23:26.200 --> 00:24:25.199
+How long the survey is open for
+
+00:24:25.200 --> 00:25:36.960
+Plan going forward
diff --git a/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt b/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt
new file mode 100644
index 00000000..62844b3d
--- /dev/null
+++ b/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt
@@ -0,0 +1,1614 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:06.839
+Hello everyone and thanks for tuning in. I'm Timothy,
+
+00:00:06.840 --> 00:00:08.559
+and in this talk, we'll be going over
+
+00:00:08.560 --> 00:00:11.342
+the 2022 Emacs User Survey.
+
+00:00:11.970 --> 00:00:15.078
+Since this is the first time we're discussing this,
+
+00:00:15.079 --> 00:00:18.399
+we'll be going over the survey itself a bit,
+
+00:00:18.400 --> 00:00:21.199
+how it's being put together and run,
+
+00:00:21.200 --> 00:00:24.199
+and then we'll have a little taste of the results
+
+00:00:24.200 --> 00:00:26.039
+with more analysis to be published in the future.
+
+NOTE The 2020 Emacs User Survey
+
+00:00:26.040 --> 00:00:32.399
+To start with though, a bit of background.
+
+00:00:32.400 --> 00:00:36.679
+So in 2020, we had an Emacs User Survey
+
+00:00:36.680 --> 00:00:38.839
+run by Adrien Brochard.
+
+00:00:38.840 --> 00:00:41.359
+Now this is, to the best of my knowledge,
+
+00:00:41.360 --> 00:00:45.559
+the first time that a large-scale Emacs User Survey
+
+00:00:45.560 --> 00:00:48.039
+has actually been run.
+
+00:00:48.040 --> 00:00:50.439
+About 7,000 people responded to the survey,
+
+00:00:50.440 --> 00:00:53.239
+so in many respects, it was quite successful.
+
+00:00:53.240 --> 00:00:56.519
+And what's significant about this is that
+
+00:00:56.520 --> 00:00:57.679
+with this being the first time
+
+00:00:57.680 --> 00:00:59.999
+that a large-scale survey has been run,
+
+00:01:00.000 --> 00:01:01.719
+it actually provided some insight
+
+00:01:01.720 --> 00:01:06.719
+into questions about how the community is using Emacs
+
+00:01:06.720 --> 00:01:09.959
+that allow for much better guesses
+
+00:01:09.960 --> 00:01:15.359
+than just speculation based on the small number of people
+
+00:01:15.360 --> 00:01:16.919
+who respond on the mailing list usually.
+
+00:01:16.920 --> 00:01:24.879
+So, why are we doing another survey? Well, to start with,
+
+00:01:24.880 --> 00:01:28.799
+in order to get the most value out of an Emacs User Survey,
+
+00:01:28.800 --> 00:01:32.519
+it's quite helpful if the information in it is recent.
+
+00:01:32.520 --> 00:01:35.439
+Furthermore, we can actually get some more value
+
+00:01:35.440 --> 00:01:38.039
+if we can examine trends,
+
+00:01:38.040 --> 00:01:41.199
+shifts in the way that people are using Emacs,
+
+00:01:41.200 --> 00:01:42.919
+where the pain points lie,
+
+00:01:42.920 --> 00:01:45.479
+what people are enjoying the most, etc.
+
+00:01:45.480 --> 00:01:46.520
+So in both of these respects,
+
+00:01:46.521 --> 00:01:49.599
+it's to our benefit if the survey
+
+00:01:49.600 --> 00:01:51.519
+is actually a regular event,
+
+00:01:51.520 --> 00:01:54.359
+instead of just something that's run once.
+
+NOTE The design of the survey
+
+00:01:54.360 --> 00:01:57.159
+Now, with this in mind,
+
+00:01:57.160 --> 00:02:00.959
+we ran the 2022 Emacs User Survey with the plan
+
+00:02:00.960 --> 00:02:05.079
+that this will actually become an annual event.
+
+00:02:05.080 --> 00:02:08.999
+In the design of the survey, there are a few goals here.
+
+00:02:09.000 --> 00:02:11.520
+The main one is of the user community.
+
+00:02:11.521 --> 00:02:14.520
+Now, user community is a rather nebulous phrase.
+
+00:02:14.521 --> 00:02:17.520
+In this case, what's meant in particular
+
+00:02:17.521 --> 00:02:21.020
+is value in questions, for example,
+
+00:02:21.021 --> 00:02:23.839
+things like pain points with Emacs,
+
+00:02:23.840 --> 00:02:27.119
+which versions people are using,
+
+00:02:27.120 --> 00:02:30.239
+which capabilities people are making the most use of,
+
+00:02:30.240 --> 00:02:34.519
+which could potentially be helpful to both emacs-devel
+
+00:02:34.520 --> 00:02:36.520
+but also our collection of Emacs package maintainers
+
+00:02:36.521 --> 00:02:38.020
+and the whole community.
+
+00:02:38.021 --> 00:02:40.799
+Actually, I think going beyond just the packages,
+
+00:02:40.800 --> 00:02:46.039
+we've also got the people who develop tutorials, guides,
+
+00:02:46.040 --> 00:02:49.279
+and all of that sort of surrounding activity,
+
+00:02:49.280 --> 00:02:51.020
+which can benefit from a clear understanding
+
+00:02:51.021 --> 00:02:56.020
+of how Emacs users use Emacs.
+
+00:02:56.021 --> 00:02:58.519
+Separately to that,
+
+00:02:58.520 --> 00:03:01.639
+I think as an Emacs user myself,
+
+00:03:01.640 --> 00:03:02.839
+that it's rather interesting to see
+
+00:03:02.840 --> 00:03:04.479
+how other people are using Emacs
+
+00:03:04.480 --> 00:03:07.079
+and what their experience is. So yes, basically,
+
+00:03:07.080 --> 00:03:08.559
+you've got utility and interest
+
+00:03:08.560 --> 00:03:10.719
+as the two separate driving factors
+
+00:03:10.720 --> 00:03:14.020
+as we try to pick questions, which actually can give us
+
+00:03:14.021 --> 00:03:16.520
+all of this without taking up too much
+
+00:03:16.521 --> 00:03:18.559
+of the respondents time.
+
+NOTE Survey frameworks
+
+00:03:18.560 --> 00:03:24.399
+Now, last time in 2020, the Emacs survey that Adrien ran
+
+00:03:24.400 --> 00:03:27.079
+used, I think Google Forms, if I recall correctly,
+
+00:03:27.080 --> 00:03:28.799
+with an option to send in responses manually.
+
+00:03:28.800 --> 00:03:33.159
+This worked, but it's not great,
+
+00:03:33.160 --> 00:03:35.079
+particularly given that this is for a survey
+
+00:03:35.080 --> 00:03:37.199
+being run in an ardently FOSS community.
+
+00:03:37.200 --> 00:03:38.959
+Ideally, we actually want
+
+00:03:38.960 --> 00:03:40.799
+to find a survey framework
+
+00:03:40.800 --> 00:03:44.319
+that respects the priorities of users, is open source,
+
+00:03:44.320 --> 00:03:46.359
+ideally free and open source,
+
+00:03:46.360 --> 00:03:49.999
+and is a relatively pleasant experience.
+
+00:03:50.000 --> 00:03:53.079
+Unfortunately, looking at available options,
+
+00:03:53.080 --> 00:03:56.879
+it seems that one always has to compromise on at least one,
+
+00:03:56.880 --> 00:03:58.020
+if not all of those criteria,
+
+00:03:58.021 --> 00:04:01.020
+which is quite far from ideal.
+
+NOTE Writing a new survey framework in Julia
+
+00:04:01.021 --> 00:04:04.359
+So what's the obvious solution?
+
+00:04:04.360 --> 00:04:06.639
+Okay, we should just write a new survey framework.
+
+00:04:06.640 --> 00:04:10.679
+Obviously, this is easier said than done.
+
+00:04:10.680 --> 00:04:12.239
+But around a year ago,
+
+00:04:12.240 --> 00:04:13.639
+I actually started doing exactly this.
+
+00:04:13.640 --> 00:04:17.679
+I've used the programming language Julia quite a bit
+
+00:04:17.680 --> 00:04:21.020
+on a day to day basis. And there just so happens to be
+
+00:04:21.021 --> 00:04:23.199
+a web framework for that called Genie.
+
+00:04:23.200 --> 00:04:24.719
+So I thought I'd give it a shot.
+
+00:04:24.720 --> 00:04:26.559
+And well, here we are today.
+
+00:04:26.560 --> 00:04:28.479
+I ended up putting something together,
+
+00:04:28.480 --> 00:04:34.279
+which could take a set of questions written in Julia
+
+00:04:34.280 --> 00:04:35.839
+and using a survey library,
+
+00:04:35.840 --> 00:04:38.799
+actually pass that into this helpful structure
+
+00:04:38.800 --> 00:04:44.119
+and then construct HTML forms based on that,
+
+00:04:44.120 --> 00:04:47.020
+and ingest results from the HTML forms,
+
+00:04:47.021 --> 00:04:48.520
+and just sort of handle that altogether.
+
+00:04:48.521 --> 00:04:52.439
+Now, all of this ends up being fed into an SQLite DB.
+
+00:04:52.440 --> 00:04:55.159
+So everything's there, even part responses.
+
+00:04:55.160 --> 00:04:57.599
+One of the goals with the actual design of this has been
+
+00:04:57.600 --> 00:05:01.119
+to just minimize what's actually done on the client side.
+
+00:05:01.120 --> 00:05:05.559
+So that means JavaScript, cookies, the whole lot.
+
+00:05:05.560 --> 00:05:08.759
+Basically, as far as this could reasonably be taken,
+
+00:05:08.760 --> 00:05:14.599
+we've just got static HTML being shoved to the user,
+
+00:05:14.600 --> 00:05:16.719
+or respondent rather. And then we just
+
+00:05:16.720 --> 00:05:18.519
+take an HTTP post request back
+
+00:05:18.520 --> 00:05:20.919
+and update the results that way.
+
+00:05:20.920 --> 00:05:24.239
+Now by doing things like actually paging the survey,
+
+00:05:24.240 --> 00:05:26.559
+we can allow for incremental saving of results
+
+00:05:26.560 --> 00:05:30.559
+and a few other niceties while essentially preserving
+
+00:05:30.560 --> 00:05:36.319
+an experience that doesn't really require any data
+
+00:05:36.320 --> 00:05:37.319
+of any particular capabilities, which is sort of
+
+00:05:37.320 --> 00:05:40.199
+a nice, clean, minimal experience as far as I'm concerned.
+
+NOTE In practice
+
+00:05:40.200 --> 00:05:45.679
+So how does this actually look like in practice?
+
+00:05:45.680 --> 00:05:48.119
+Well, one of the nice things about this is
+
+00:05:48.120 --> 00:05:51.479
+because the question itself is written in Julia,
+
+00:05:51.480 --> 00:05:54.279
+we can get some nice features like custom validators
+
+00:05:54.280 --> 00:05:57.919
+and other fancy behavior and directly specify
+
+00:05:57.920 --> 00:06:01.119
+how we actually want questions to be registered
+
+00:06:01.120 --> 00:06:04.439
+in the database. So here we have, for example,
+
+00:06:04.440 --> 00:06:06.679
+two questions we had from this email survey.
+
+00:06:06.680 --> 00:06:09.959
+One is a multi-select. Another one is just putting in
+
+00:06:09.960 --> 00:06:14.399
+the number of years people have used Emacs for.
+
+00:06:14.400 --> 00:06:16.159
+I think this gives a brief overview of the capabilities.
+
+00:06:16.160 --> 00:06:19.599
+One of the things I'd like to draw particular attention
+
+00:06:19.600 --> 00:06:20.759
+to here is in the multi-select,
+
+00:06:20.760 --> 00:06:22.199
+you'll see an array of options,
+
+00:06:22.200 --> 00:06:24.319
+the first one of which actually maps for different value
+
+00:06:24.320 --> 00:06:25.879
+to be stored for convenience.
+
+00:06:25.880 --> 00:06:29.119
+And then the final one is a special one, :other,
+
+00:06:29.120 --> 00:06:30.359
+and you can see that's a bit different to the rest
+
+00:06:30.360 --> 00:06:32.599
+where it's got that colon function,
+
+00:06:32.600 --> 00:06:33.719
+it's a symbol, not a string.
+
+00:06:33.720 --> 00:06:37.639
+And this is quite a nice one because the way
+
+00:06:37.640 --> 00:06:39.279
+that this framework's been designed,
+
+00:06:39.280 --> 00:06:41.759
+when we have an :other value like that,
+
+00:06:41.760 --> 00:06:44.199
+instead of it just being a sort of tick box "Other",
+
+00:06:44.200 --> 00:06:47.199
+it actually provides the option to write
+
+00:06:47.200 --> 00:06:50.559
+your own different response to all of the above.
+
+NOTE Results
+
+00:06:50.560 --> 00:06:55.319
+Okay, so at the very end, we've now got
+
+00:06:55.320 --> 00:06:58.519
+a completely FOSS survey framework, rather nice.
+
+00:06:58.520 --> 00:07:00.020
+So the set of what were these...
+
+00:07:00.021 --> 00:07:01.119
+Decent array of input types.
+
+00:07:01.120 --> 00:07:02.639
+It would be nice to expand, but at the moment
+
+00:07:02.640 --> 00:07:04.599
+I think we could just about describe it as a rich set.
+
+00:07:04.600 --> 00:07:07.159
+Zero JavaScript required, but a little bit useful
+
+00:07:07.160 --> 00:07:08.079
+for progressive enhancement.
+
+00:07:08.080 --> 00:07:12.759
+As demonstrated, we can get some fancy validation going on.
+
+00:07:12.760 --> 00:07:16.679
+And then because we've got the results
+
+00:07:16.680 --> 00:07:18.559
+tied into this quite nicely,
+
+00:07:18.560 --> 00:07:20.999
+we can actually have them available live
+
+00:07:21.000 --> 00:07:22.999
+and in quite a number of formats.
+
+00:07:23.000 --> 00:07:25.439
+I'm not sure how much you saw in the architecture diagram,
+
+00:07:25.440 --> 00:07:27.079
+but we've got all sorts of things here.
+
+00:07:27.080 --> 00:07:29.679
+CSV, TSV, plain text, JSON,
+
+00:07:29.680 --> 00:07:32.119
+just grab a copy of the SQLite database,
+
+00:07:32.120 --> 00:07:33.319
+but only the relevant bits.
+
+00:07:33.320 --> 00:07:35.879
+Or something called JLD2,
+
+00:07:35.880 --> 00:07:37.999
+which preserves a lot of type information
+
+00:07:38.000 --> 00:07:39.599
+and a few other nice things.
+
+NOTE Going forward
+
+00:07:39.600 --> 00:07:43.799
+Now, what are we going to do going forward from here?
+
+00:07:43.800 --> 00:07:46.159
+Well, there are a few minor issues here.
+
+00:07:46.160 --> 00:07:48.599
+For example, there's a memory leak issue which is going on,
+
+00:07:48.600 --> 00:07:51.839
+resulting in the service being restarted,
+
+00:07:51.840 --> 00:07:54.519
+I think every day or two, while the survey was running.
+
+00:07:54.520 --> 00:07:56.159
+I actually have the suspicion
+
+00:07:56.160 --> 00:07:57.639
+that that's largely responsible for
+
+00:07:57.640 --> 00:08:01.479
+about 1% of respondents, which is about 75 people,
+
+00:08:01.480 --> 00:08:04.399
+who described the survey experience as not great.
+
+00:08:04.400 --> 00:08:08.199
+Overall though, the feedback has been quite positive.
+
+00:08:08.200 --> 00:08:09.919
+There's been some detailed written feedback,
+
+00:08:09.920 --> 00:08:12.799
+but just from the quick great/okay/not great options,
+
+00:08:12.800 --> 00:08:14.839
+we had about two-thirds of people saying
+
+00:08:14.840 --> 00:08:16.839
+that the user experience was great,
+
+00:08:16.840 --> 00:08:19.199
+which is really nice to hear the first time being run.
+
+00:08:19.200 --> 00:08:22.839
+A few other things would be nice to add, for example,
+
+00:08:22.840 --> 00:08:25.759
+in future control flow. By this, I mean
+
+00:08:25.760 --> 00:08:27.879
+the option to present different questions
+
+00:08:27.880 --> 00:08:28.999
+based on previous answers
+
+00:08:29.000 --> 00:08:31.199
+would be quite nice to streamline the experience.
+
+00:08:31.200 --> 00:08:33.519
+For example, having a set of questions
+
+00:08:33.520 --> 00:08:37.239
+for first-time respondents or people who are involved
+
+00:08:37.240 --> 00:08:42.239
+in the packaging side of things
+
+00:08:42.240 --> 00:08:45.079
+without actually cluttering the experience
+
+00:08:45.080 --> 00:08:46.039
+for everybody else. That'd be quite nice.
+
+00:08:46.040 --> 00:08:48.599
+Further to this, all of this,
+
+00:08:48.600 --> 00:08:51.879
+I think on top of the standard web interface,
+
+00:08:51.880 --> 00:08:53.599
+it'd be quite nice to actually write a server API.
+
+00:08:53.600 --> 00:08:55.520
+And the particular reason why I mentioned this
+
+00:08:55.521 --> 00:08:58.020
+is because this could potentially allow for
+
+00:08:58.021 --> 00:09:00.359
+basically an Emacs survey package.
+
+00:09:00.360 --> 00:09:03.039
+I mean, we already use Emacs for so many things,
+
+00:09:03.040 --> 00:09:05.519
+might as well fill the survey out from within it as well.
+
+00:09:05.520 --> 00:09:11.159
+Okay, so this is how the survey has been conducted.
+
+NOTE Responses
+
+00:09:11.160 --> 00:09:13.679
+Now, what are the responses look like?
+
+00:09:13.680 --> 00:09:16.039
+Now, at this stage, I was actually hoping
+
+00:09:16.040 --> 00:09:18.919
+to get into some somewhat sophisticated analysis
+
+00:09:18.920 --> 00:09:22.599
+because there's quite a bit that you can dig out
+
+00:09:22.600 --> 00:09:24.239
+of the data responses that we've received.
+
+00:09:24.240 --> 00:09:27.879
+However, unfortunately, I've been much more limited on time
+
+00:09:27.880 --> 00:09:30.039
+than I'd hoped for, so that's going to have to come later.
+
+00:09:30.040 --> 00:09:33.559
+For now, we're just going to take a bit of a peek
+
+00:09:33.560 --> 00:09:35.959
+at some of the really basic answers.
+
+00:09:35.960 --> 00:09:38.239
+Well, it's not even really analysis.
+
+00:09:38.240 --> 00:09:40.239
+Expect to see lots of pie charts, basically.
+
+00:09:40.240 --> 00:09:42.999
+But there's still a bit of interest there,
+
+00:09:43.000 --> 00:09:44.359
+so we'll go through a bit of that
+
+00:09:44.360 --> 00:09:47.119
+and just give a bit of a tease
+
+00:09:47.120 --> 00:09:50.319
+as to what might come in the future.
+
+00:09:50.320 --> 00:09:51.919
+So to sum up for starters,
+
+00:09:51.920 --> 00:09:55.079
+we've had about 6,500 responses.
+
+00:09:55.080 --> 00:09:58.359
+It is worth noting that a thousand of those are partials,
+
+00:09:58.360 --> 00:10:02.199
+so people who gave up on the survey partway through.
+
+00:10:02.200 --> 00:10:05.399
+Given that the 2020 survey had about 7000 responses,
+
+00:10:05.400 --> 00:10:06.999
+I'll tell you we're basically on par here.
+
+00:10:07.000 --> 00:10:10.399
+This ran over a month and interestingly,
+
+00:10:10.400 --> 00:10:12.239
+about half of these respondents
+
+00:10:12.240 --> 00:10:13.799
+did not participate in the 2020 survey.
+
+00:10:13.800 --> 00:10:16.199
+I think at this point,
+
+00:10:16.200 --> 00:10:17.679
+it's not really clear what to make of that.
+
+00:10:17.680 --> 00:10:21.359
+There's been a two-year gap between the surveys.
+
+00:10:21.360 --> 00:10:25.159
+It's been done, well, it's been done quite differently,
+
+00:10:25.160 --> 00:10:29.639
+and yes, there's not enough, really, to say.
+
+00:10:29.640 --> 00:10:31.999
+What could be interesting though is actually,
+
+00:10:32.000 --> 00:10:33.839
+once this starts running regularly,
+
+00:10:33.840 --> 00:10:36.799
+we can see whether there's regular churn
+
+00:10:36.800 --> 00:10:38.520
+in the survey respondents,
+
+00:10:38.521 --> 00:10:40.020
+or if we have a consistent core
+
+00:10:40.021 --> 00:10:42.020
+with people who respond each year,
+
+00:10:42.021 --> 00:10:46.159
+and then just people who come by every now and then and go,
+
+00:10:46.160 --> 00:10:47.759
+"Oh, why not respond to this year's survey?"
+
+00:10:47.760 --> 00:10:51.479
+But we're going to have to wait a bit to actually see
+
+00:10:51.480 --> 00:10:52.759
+how people treat the survey.
+
+00:10:52.760 --> 00:10:57.519
+Now these responses came from quite a wide range of places
+
+00:10:57.520 --> 00:11:02.519
+we've got 115 nations represented here. Collectively,
+
+00:11:02.520 --> 00:11:04.039
+these ones have spent about a thousand hours
+
+00:11:04.040 --> 00:11:06.959
+giving us information. So I think, if nothing else,
+
+00:11:06.960 --> 00:11:10.479
+just from the effort that people have put into
+
+00:11:10.480 --> 00:11:12.879
+actually giving us useful data to work with,
+
+00:11:12.880 --> 00:11:13.599
+it's worth giving at least a good effort
+
+00:11:13.600 --> 00:11:15.999
+to actually trying to extract some value
+
+00:11:16.000 --> 00:11:16.999
+out of these responses.
+
+NOTE Geography
+
+00:11:17.000 --> 00:11:20.879
+Now, overall we found a lot of responses came from America,
+
+00:11:20.880 --> 00:11:23.199
+no surprises there, but as mentioned,
+
+00:11:23.200 --> 00:11:24.020
+we've got a good mix around the globe.
+
+00:11:24.021 --> 00:11:29.159
+The usual suspects for the rest of the responses,
+
+00:11:29.160 --> 00:11:33.279
+a whole bunch in Europe, a whole bunch around Asia,
+
+00:11:33.280 --> 00:11:36.799
+a bit in Australasia as well and yes,
+
+00:11:36.800 --> 00:11:38.959
+there's nothing particularly surprising here,
+
+00:11:38.960 --> 00:11:41.399
+there's a lot of inline expectations.
+
+00:11:41.400 --> 00:11:42.839
+What I find a bit more interesting, though,
+
+00:11:42.840 --> 00:11:45.359
+is if we actually normalise
+
+00:11:45.360 --> 00:11:48.079
+the number of responses from each nation
+
+00:11:48.080 --> 00:11:50.079
+by the population of said nations,
+
+00:11:50.080 --> 00:11:54.239
+essentially giving a popularity of Emacs
+
+00:11:54.240 --> 00:11:57.359
+or at least of Emacs early respondents for each nation,
+
+00:11:57.360 --> 00:12:00.919
+we end up finding that Europe, particularly Scandinavia,
+
+00:12:00.920 --> 00:12:02.199
+becomes a bit of a hotspot.
+
+00:12:02.200 --> 00:12:04.519
+So I'm not sure what's going on
+
+00:12:04.520 --> 00:12:07.319
+in Sweden, Finland and Norway,
+
+00:12:07.320 --> 00:12:10.919
+but it seems to be particularly popular around there.
+
+00:12:10.920 --> 00:12:14.199
+It's also worth noting that we now find
+
+00:12:14.200 --> 00:12:18.319
+that the proportion of respondents
+
+00:12:18.320 --> 00:12:21.799
+in countries like America, Canada, Australia
+
+00:12:21.800 --> 00:12:24.039
+and most of Europe actually becomes
+
+00:12:24.040 --> 00:12:26.399
+quite comparable with each other,
+
+00:12:26.400 --> 00:12:30.239
+which yes, once again, sort of lines up
+
+00:12:30.240 --> 00:12:32.279
+with these responses, expectations from the last slide.
+
+NOTE Gender
+
+00:12:32.280 --> 00:12:36.279
+Okay, getting into some of the other
+
+00:12:36.280 --> 00:12:38.599
+demographic information.
+
+00:12:38.600 --> 00:12:40.319
+The demographic information was new to this survey.
+
+00:12:40.320 --> 00:12:44.479
+In the 2020 survey, people were asked what they think
+
+00:12:44.480 --> 00:12:47.199
+of being asked about some demographic information
+
+00:12:47.200 --> 00:12:50.199
+in a future survey, and the overwhelming response is, "Sure,
+
+00:12:50.200 --> 00:12:52.759
+I don't really mind." And so that's what we've done here.
+
+00:12:52.760 --> 00:12:56.279
+One of the ones of somewhat interest
+
+00:12:56.280 --> 00:12:59.759
+is the age gender breakdown. So we expect Emacs
+
+00:12:59.760 --> 00:13:03.119
+to be used predominantly among people in software
+
+00:13:03.120 --> 00:13:05.839
+and programming and within the industry,
+
+00:13:05.840 --> 00:13:08.599
+I think it's quite widely documented
+
+00:13:08.600 --> 00:13:14.520
+to have about a sort of 75-25%, roughly, split
+
+00:13:14.521 --> 00:13:14.759
+between male and female.
+
+00:13:14.760 --> 00:13:19.359
+Interestingly, in Emacs,
+
+00:13:19.360 --> 00:13:22.879
+it's a much more aggressively-biased result.
+
+00:13:22.880 --> 00:13:28.679
+So we had about 96% of respondents are male
+
+00:13:28.680 --> 00:13:34.559
+with just 4% for the rest. Interestingly, though,
+
+00:13:34.560 --> 00:13:35.359
+if we look at the young respondents,
+
+00:13:35.360 --> 00:13:41.719
+say for example, under 25, we go from 96% male to 88%.
+
+00:13:41.720 --> 00:13:46.119
+So it's fair to say that the young respondents are
+
+00:13:46.120 --> 00:13:49.199
+in this respect, a somewhat more diverse group.
+
+00:13:49.200 --> 00:13:52.399
+Hopefully, as future surveys go on,
+
+00:13:52.400 --> 00:13:54.399
+we'll see this continue not die off
+
+00:13:54.400 --> 00:13:58.719
+to the sort of well, at this point,
+
+00:13:58.720 --> 00:14:02.919
+it's more like 99% if you look at the older ages.
+
+00:14:02.920 --> 00:14:04.439
+But we'll see.
+
+NOTE Occupations
+
+00:14:04.440 --> 00:14:07.919
+Occupations was an interesting slide as well.
+
+00:14:07.920 --> 00:14:09.399
+Interesting question as well.
+
+00:14:09.400 --> 00:14:11.559
+We've got the usual suspects here. I mean,
+
+00:14:11.560 --> 00:14:15.079
+it's a text editor, well, Lisp machine
+
+00:14:15.080 --> 00:14:17.639
+masquerading as a text editor, mainly used for programming,
+
+00:14:17.640 --> 00:14:20.639
+and so we expect lots of software development
+
+00:14:20.640 --> 00:14:23.519
+and that sort of thing. But that's only about
+
+00:14:23.520 --> 00:14:25.399
+just over half of the responses.
+
+00:14:25.400 --> 00:14:28.679
+We've got a huge chunk from academia,
+
+00:14:28.680 --> 00:14:29.999
+and then really just an odd bag
+
+00:14:30.000 --> 00:14:30.879
+of all sorts of other things,
+
+00:14:30.880 --> 00:14:33.079
+including things which you wouldn't really associate
+
+00:14:33.080 --> 00:14:35.359
+with programming and software at all.
+
+00:14:35.360 --> 00:14:39.639
+Things like creative writing, publishing, legal, yes.
+
+00:14:39.640 --> 00:14:41.719
+And then you've got this chunk of Other,
+
+00:14:41.720 --> 00:14:43.239
+which is I think here is
+
+00:14:43.240 --> 00:14:46.679
+the fourth most popular option here.
+
+00:14:46.680 --> 00:14:49.399
+And what we have here is about 500 different responses
+
+00:14:49.400 --> 00:14:51.839
+from a huge range of activities.
+
+00:14:51.840 --> 00:14:54.359
+It's really quite interesting to read things like
+
+00:14:54.360 --> 00:14:56.919
+I think, things like "naval officer",
+
+00:14:56.920 --> 00:15:01.319
+and just... All sorts of surprising occupations for Emacs.
+
+00:15:01.320 --> 00:15:04.799
+And I think this is a particular area
+
+00:15:04.800 --> 00:15:10.199
+because I imagine compared to other code editors,
+
+00:15:10.200 --> 00:15:13.879
+sort of your VS Code, remember like
+
+00:15:13.880 --> 00:15:18.959
+that Emacs may have a particularly diverse set
+
+00:15:18.960 --> 00:15:23.599
+of industry occupations represented in its users.
+
+00:15:23.600 --> 00:15:28.359
+Now, if you look at where the response actually came from,
+
+00:15:28.360 --> 00:15:31.039
+we've got the usual suspects up top,
+
+00:15:31.040 --> 00:15:33.959
+Hacker News and r/emacs.
+
+00:15:33.960 --> 00:15:40.119
+But then we actually get a much more graduated breakdown
+
+00:15:40.120 --> 00:15:43.679
+than in the 2020 survey.
+
+00:15:43.680 --> 00:15:46.279
+We do think familiar results here like IRC, Telegram,
+
+00:15:46.280 --> 00:15:48.639
+Emacs China, and Twitter.
+
+00:15:48.640 --> 00:15:50.839
+But now you've got a few new entries,
+
+00:15:50.840 --> 00:15:53.519
+things like the Fediverse, Discourse, Matrix,
+
+00:15:53.520 --> 00:15:56.119
+which didn't pop up previously.
+
+00:15:56.120 --> 00:15:59.079
+So I think this is yes, quite a nice sign in terms of
+
+00:15:59.080 --> 00:16:02.520
+actually hitting a wide range
+
+00:16:02.521 --> 00:16:05.999
+of pockets of Emacs users across different platforms,
+
+00:16:06.000 --> 00:16:10.319
+which bodes well for the potential representiveness
+
+00:16:10.320 --> 00:16:11.319
+of this survey.
+
+NOTE Free and open source software
+
+00:16:11.320 --> 00:16:15.119
+Unsurprisingly, if we're talking about Emacs
+
+00:16:15.120 --> 00:16:17.919
+and particularly people who are quite engaged in it,
+
+00:16:17.920 --> 00:16:19.679
+which are the respondents to this survey,
+
+00:16:19.680 --> 00:16:25.359
+we find that we also get quite a high degree of care
+
+00:16:25.360 --> 00:16:27.479
+for free and open source software.
+
+00:16:27.480 --> 00:16:30.519
+So if you have a look here,
+
+00:16:30.520 --> 00:16:35.279
+only about a quarter of users
+
+00:16:35.280 --> 00:16:39.799
+didn't express a strong preference towards FOSS software.
+
+00:16:39.800 --> 00:16:43.759
+In fact, we had over a quarter saying that
+
+00:16:43.760 --> 00:16:49.239
+they would accept significant or even any compromise
+
+00:16:49.240 --> 00:16:52.199
+to use a FOSS user software
+
+00:16:52.200 --> 00:16:55.759
+over a proprietary alternative,
+
+00:16:55.760 --> 00:16:59.679
+which given the nature of Emacs,
+
+00:16:59.680 --> 00:17:00.639
+not terribly surprising,
+
+00:17:00.640 --> 00:17:02.439
+but a strong showing nonetheless.
+
+NOTE Emacs versions
+
+00:17:02.440 --> 00:17:05.599
+Now, let's start getting to things
+
+00:17:05.600 --> 00:17:07.719
+which are actually useful for
+
+00:17:07.720 --> 00:17:11.479
+potential Emacs development and packaging.
+
+00:17:11.480 --> 00:17:13.599
+If you're thinking about supporting Emacs versions,
+
+00:17:13.600 --> 00:17:16.599
+it looks like you can do fantastically well
+
+00:17:16.600 --> 00:17:20.639
+in terms of hitting most users if you support Emacs 27+.
+
+00:17:20.640 --> 00:17:23.159
+That hits about 96% of respondents.
+
+00:17:23.160 --> 00:17:26.199
+Interestingly though, you can actually make an argument
+
+00:17:26.200 --> 00:17:27.119
+for being even more aggressive.
+
+00:17:27.120 --> 00:17:30.319
+I mean, if you have a look at Emacs 28+,
+
+00:17:30.320 --> 00:17:32.359
+that's still over three quarters of respondents.
+
+00:17:32.360 --> 00:17:35.799
+We've got, at this point, a quarter
+
+00:17:35.800 --> 00:17:37.279
+using the unreleased HEAD version,
+
+00:17:37.280 --> 00:17:40.159
+even though it's getting close to release.
+
+00:17:40.160 --> 00:17:43.039
+Obviously here, as stated, we're hitting
+
+00:17:43.040 --> 00:17:44.599
+a sort of more engaged with the community
+
+00:17:44.600 --> 00:17:47.799
+subset of Emacs users, but still,
+
+00:17:47.800 --> 00:17:49.879
+I think it's interesting to see that
+
+00:17:49.880 --> 00:17:52.639
+with Emacs's increasingly frequent update schedule,
+
+00:17:52.640 --> 00:17:54.999
+that users are actually picking up those updates
+
+00:17:55.000 --> 00:17:56.359
+quite promptly as they roll out.
+
+NOTE Languages
+
+00:17:56.360 --> 00:18:02.079
+Continuing on with how people actually use Emacs: languages.
+
+00:18:02.080 --> 00:18:05.199
+We've got the usual suspects here: lots of Python,
+
+00:18:05.200 --> 00:18:08.959
+quite a bit of JavaScript and C, lots of shell.
+
+00:18:08.960 --> 00:18:11.879
+What I find quite interesting though is
+
+00:18:11.880 --> 00:18:12.799
+if we actually bring in
+
+00:18:12.800 --> 00:18:16.719
+the 2020 Stack Overflow language usage survey data,
+
+00:18:16.720 --> 00:18:19.239
+and that maps quite well
+
+00:18:19.240 --> 00:18:20.079
+to the array of language options we provided here.
+
+00:18:20.080 --> 00:18:21.199
+They had a general Lisp option,
+
+00:18:21.200 --> 00:18:23.919
+which I've folded into Common Lisp
+
+00:18:23.920 --> 00:18:26.919
+since they listed Clojure separately.
+
+00:18:26.920 --> 00:18:29.679
+I think that seems like a fairly safe bet.
+
+00:18:29.680 --> 00:18:31.919
+But other than that, the only languages that we missed
+
+00:18:31.920 --> 00:18:35.839
+are Scheme and Elisp.
+
+00:18:35.840 --> 00:18:37.879
+What we can do is we can look at
+
+00:18:37.880 --> 00:18:41.199
+the relative popularity of different languages
+
+00:18:41.200 --> 00:18:44.519
+from our Emacs user survey compared to Stack Overflows.
+
+00:18:44.520 --> 00:18:48.319
+What do we find? Well, Clojure and Common Lisp
+
+00:18:48.320 --> 00:18:51.639
+far above the rest, I imagine in no small part due to
+
+00:18:51.640 --> 00:18:54.959
+the fantastic SLIME and Cider packages.
+
+00:18:54.960 --> 00:18:59.559
+Following that, we see Haskell being particularly prominent,
+
+00:18:59.560 --> 00:19:00.639
+and then a collection of other languages,
+
+00:19:00.640 --> 00:19:06.199
+your Erlang, Elixir, Julia, Perl and the rest.
+
+00:19:06.200 --> 00:19:10.959
+And then lastly, if we have a look at the ones
+
+00:19:10.960 --> 00:19:13.439
+which have significantly diminished popularity
+
+00:19:13.440 --> 00:19:17.719
+compared to Stack Overflow, we end up with, I think,
+
+00:19:17.720 --> 00:19:20.159
+what I could probably cast as more enterprising languages.
+
+00:19:20.160 --> 00:19:25.799
+Things like C#, Java, Typescript and the like.
+
+NOTE Prose
+
+00:19:25.800 --> 00:19:31.559
+So, that's interesting. Now, earlier
+
+00:19:31.560 --> 00:19:33.239
+when we were looking at the split of Emacs users,
+
+00:19:33.240 --> 00:19:37.239
+we found that we actually had a fair few
+
+00:19:37.240 --> 00:19:42.199
+in more creative areas, like writing and publishing.
+
+00:19:42.200 --> 00:19:44.479
+So if looking at prose, we'd expect a decent chunk
+
+00:19:44.480 --> 00:19:47.039
+to be using Emacs for prose, but it's actually more
+
+00:19:47.040 --> 00:19:48.719
+than just a little bit, it's a little slice.
+
+00:19:48.720 --> 00:19:50.599
+We've got a whopping about a third of users
+
+00:19:50.600 --> 00:19:54.719
+saying they frequently use Emacs for writing prose.
+
+00:19:54.720 --> 00:19:55.999
+I'd imagine that the availability
+
+00:19:56.000 --> 00:19:57.799
+of things like Org mode and AUCTeX
+
+00:19:57.800 --> 00:20:03.399
+probably help like this.
+
+NOTE Packages
+
+00:20:03.400 --> 00:20:05.119
+Moving on to other packages, or more packages,
+
+00:20:05.120 --> 00:20:08.879
+we've actually got a very similar split here
+
+00:20:08.880 --> 00:20:13.199
+to the 2020 survey. Org has seen a bit of a growth
+
+00:20:13.200 --> 00:20:16.039
+in popularity. We've got some new arrivals here as well.
+
+00:20:16.040 --> 00:20:18.479
+For example, Vertico has popped onto the scene
+
+00:20:18.480 --> 00:20:21.279
+and overtaken Ivy here, along with
+
+00:20:21.280 --> 00:20:24.519
+a few other new packages like Consult.
+
+00:20:24.520 --> 00:20:27.599
+Other than that, quite comparable.
+
+00:20:27.600 --> 00:20:29.999
+What's rather interesting, though, I find here is that
+
+00:20:30.000 --> 00:20:33.719
+when you have people who listed a small number of packages,
+
+00:20:33.720 --> 00:20:39.439
+they actually predominantly listed packages
+
+00:20:39.440 --> 00:20:41.319
+other than the most common set.
+
+00:20:41.320 --> 00:20:43.959
+So if we have a lot of people who only listed one package,
+
+00:20:43.960 --> 00:20:48.959
+basically two-thirds of that,
+
+00:20:48.960 --> 00:20:51.479
+or actually three-quarters of those responses
+
+00:20:51.480 --> 00:20:53.879
+were saying other packages,
+
+00:20:53.880 --> 00:20:56.279
+despite the fact that overall packages
+
+00:20:56.280 --> 00:20:58.599
+other than the highlighted selection here
+
+00:20:58.600 --> 00:21:01.399
+only constitute a quarter of responses.
+
+00:21:01.400 --> 00:21:04.919
+So there might be something a bit more to look at there.
+
+NOTE Documentation
+
+00:21:04.920 --> 00:21:07.799
+Now when people are using packages,
+
+00:21:07.800 --> 00:21:11.039
+we also asked what types of documentation
+
+00:21:11.040 --> 00:21:14.399
+people would like to see more of on package READMEs.
+
+00:21:14.400 --> 00:21:17.159
+Basically we've got a big mix here.
+
+00:21:17.160 --> 00:21:20.079
+It seems like generally people are interested in
+
+00:21:20.080 --> 00:21:23.839
+seeing more in various forms, whether it be tutorials,
+
+00:21:23.840 --> 00:21:29.479
+overviews, screenshots, comparisons, or clips and videos.
+
+00:21:29.480 --> 00:21:32.919
+So full READMEs with a lot of context
+
+00:21:32.920 --> 00:21:38.439
+seem to be quite desirable from this.
+
+NOTE Moving forward
+
+00:21:38.440 --> 00:21:42.359
+Now moving forward, what are we going to do?
+
+00:21:42.360 --> 00:21:45.039
+So 800 people gave some detailed feedback on the survey.
+
+00:21:45.040 --> 00:21:47.759
+That's quite nice. I'm going to be taking a good read
+
+00:21:47.760 --> 00:21:50.799
+of all of those responses and use that
+
+00:21:50.800 --> 00:21:55.639
+to improve the process and also the set of questions.
+
+00:21:55.640 --> 00:22:00.759
+Now all of you can also give some feedback on the questions,
+
+00:22:00.760 --> 00:22:02.679
+both that you found most useful in this survey,
+
+00:22:02.680 --> 00:22:04.799
+ones that you think might not add much value,
+
+00:22:04.800 --> 00:22:07.039
+and/or new questions
+
+00:22:07.040 --> 00:22:08.359
+that you think might be a good addition.
+
+00:22:08.360 --> 00:22:11.119
+Once I've done a bit more analysis,
+
+00:22:11.120 --> 00:22:13.119
+particularly the more sophisticated analysis
+
+00:22:13.120 --> 00:22:17.159
+which I'm planning, which will probably come out actually
+
+00:22:17.160 --> 00:22:18.719
+maybe in the first quarter of next year,
+
+00:22:18.720 --> 00:22:22.919
+we can see which questions there seem to have provided
+
+00:22:22.920 --> 00:22:25.039
+the most interesting or surprising results
+
+00:22:25.040 --> 00:22:26.559
+and those are probably worth keeping.
+
+00:22:26.560 --> 00:22:31.959
+Lastly, once we actually have an API
+
+00:22:31.960 --> 00:22:33.279
+and potentially even an Emacs package,
+
+00:22:33.280 --> 00:22:36.159
+we could automate a large number of the questions,
+
+00:22:36.160 --> 00:22:38.999
+things like Emacs version, set of packages used,
+
+00:22:39.000 --> 00:22:41.039
+and that could just streamline the experience
+
+00:22:41.040 --> 00:22:42.279
+of actually filling out the survey,
+
+00:22:42.280 --> 00:22:44.199
+make it a bit more frictionless.
+
+NOTE Time
+
+00:22:44.200 --> 00:22:47.319
+Now talking of the question of questions,
+
+00:22:47.320 --> 00:22:49.319
+a quick survey is a good survey.
+
+00:22:49.320 --> 00:22:52.959
+If we're asking people to dedicate their time
+
+00:22:52.960 --> 00:22:56.279
+to fill out this, it's good to try to get as much value
+
+00:22:56.280 --> 00:22:59.759
+without asking them to donate much of their time.
+
+00:22:59.760 --> 00:23:02.399
+How has the survey done in this respect?
+
+00:23:02.400 --> 00:23:04.119
+I'm actually very happy with how it's done.
+
+00:23:04.120 --> 00:23:06.639
+We get a few comments from the feedback saying
+
+00:23:06.640 --> 00:23:07.759
+that it was a bit of a long side,
+
+00:23:07.760 --> 00:23:10.759
+but the median time was about 12 minutes,
+
+00:23:10.760 --> 00:23:13.759
+which doesn't seem too bad, and most commonly
+
+00:23:13.760 --> 00:23:16.399
+we saw people completing it in about 8 minutes.
+
+00:23:16.400 --> 00:23:18.879
+For a once-per-year survey,
+
+00:23:18.880 --> 00:23:20.519
+I think this seems fairly reasonable.
+
+00:23:20.520 --> 00:23:24.279
+Getting closer to a 5-10 minute range would be nice,
+
+00:23:24.280 --> 00:23:26.199
+but this isn't far off.
+
+NOTE How long the survey is open for
+
+00:23:26.200 --> 00:23:30.879
+Lastly, we're also going to be considering
+
+00:23:30.880 --> 00:23:32.719
+how long the survey is open for.
+
+00:23:32.720 --> 00:23:36.719
+So from the initial opening date,
+
+00:23:36.720 --> 00:23:38.479
+what we have here is a plot of
+
+00:23:38.480 --> 00:23:41.919
+the page which people ended up on
+
+00:23:41.920 --> 00:23:43.399
+and when they started the survey.
+
+00:23:43.400 --> 00:23:46.759
+So what we can see is a huge spike in the first few days.
+
+00:23:46.760 --> 00:23:50.239
+I've just realised that this plot
+
+00:23:50.240 --> 00:23:53.399
+is actually labelled incorrectly.
+
+00:23:53.400 --> 00:23:55.679
+Please disregard the minutes to complete the survey.
+
+00:23:55.680 --> 00:23:58.839
+This should be days after survey opening
+
+00:23:58.840 --> 00:24:01.519
+that a response is actually submitted.
+
+00:24:01.520 --> 00:24:05.399
+And what we have here is a big spike
+
+00:24:05.400 --> 00:24:08.679
+in popularity in the first week basically,
+
+00:24:08.680 --> 00:24:10.599
+and then it trickles down
+
+00:24:10.600 --> 00:24:11.959
+to a fairly consistent level after that.
+
+00:24:11.960 --> 00:24:15.839
+I'm about to publish a last call for survey responses,
+
+00:24:15.840 --> 00:24:18.279
+so I'll see if any final bump happens,
+
+00:24:18.280 --> 00:24:20.039
+but this indicates that we can probably just
+
+00:24:20.040 --> 00:24:23.079
+have the survey open for a week or two
+
+00:24:23.080 --> 00:24:25.199
+and that should be sufficient.
+
+NOTE Plan going forward
+
+00:24:25.200 --> 00:24:30.839
+Alright, so what's the general plan going forwards?
+
+00:24:30.840 --> 00:24:35.639
+Well, as stated earlier, the idea is to run this annually
+
+00:24:35.640 --> 00:24:38.399
+and then consistently improve the questions,
+
+00:24:38.400 --> 00:24:41.039
+the experience, and the analysis that's done.
+
+00:24:41.040 --> 00:24:43.559
+This year has been the hardest by far
+
+00:24:43.560 --> 00:24:45.839
+because a lot had to be set up from scratch.
+
+00:24:45.840 --> 00:24:50.159
+The hope is that moving on from here,
+
+00:24:50.160 --> 00:24:51.799
+a lot of it can be reused.
+
+00:24:51.800 --> 00:24:54.039
+For example, with my comments about
+
+00:24:54.040 --> 00:24:56.439
+more sophisticated analysis being down the line,
+
+00:24:56.440 --> 00:24:58.439
+once that's all worked out,
+
+00:24:58.440 --> 00:25:00.719
+as long as nothing changes too drastically,
+
+00:25:00.720 --> 00:25:03.559
+we should be able to reuse a lot of that work
+
+00:25:03.560 --> 00:25:05.759
+quite easily in future years.
+
+00:25:05.760 --> 00:25:08.599
+Alright, that's it for now.
+
+00:25:08.600 --> 00:25:11.879
+Hopefully, you've found this an interesting peek
+
+00:25:11.880 --> 00:25:13.359
+into how the survey is operated
+
+00:25:13.360 --> 00:25:15.319
+and some of the initial results,
+
+00:25:15.320 --> 00:25:18.919
+and hopefully, I'll see you around next year
+
+00:25:18.920 --> 00:25:36.960
+for the 2023 survey. Thanks for listening.
diff --git a/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt b/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt
new file mode 100644
index 00000000..20e7c3c7
--- /dev/null
+++ b/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt
@@ -0,0 +1,40 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:08.200
+Opening
+
+00:00:24.201 --> 00:00:50.280
+Introduction to Tree-sitter
+
+00:00:50.280 --> 00:01:37.040
+Querying Tree-sitter tree
+
+00:01:37.040 --> 00:02:15.640
+Syntax highlighting
+
+00:02:15.640 --> 00:03:47.120
+Custom syntax highlighting
+
+00:03:47.120 --> 00:05:48.760
+Text objects
+
+00:05:48.760 --> 00:06:20.480
+Code folding
+
+00:06:20.480 --> 00:08:10.480
+Navigating config files
+
+00:08:10.480 --> 00:08:21.560
+Navigating code
+
+00:08:21.560 --> 00:09:31.520
+Intelligent templates
+
+00:09:31.520 --> 00:09:59.080
+Structural editing
+
+00:09:59.080 --> 00:10:26.240
+tree-sitter-save-excursion
+
+00:10:26.240 --> 00:11:03.880
+The future
diff --git a/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt b/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt
new file mode 100644
index 00000000..576f1eaf
--- /dev/null
+++ b/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt
@@ -0,0 +1,727 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:03.240
+Hey everyone, my name is Abin Simon
+
+00:00:03.240 --> 00:00:05.080
+and this talk is about "Tree-sitter:
+
+00:00:05.080 --> 00:00:08.200
+Beyond Syntax Highlighting."
+
+00:00:08.200 --> 00:00:10.720
+For those who are not aware of what Tree-sitter is,
+
+00:00:10.720 --> 00:00:11.720
+let me give you a quick intro.
+
+00:00:11.720 --> 00:00:17.120
+Tree-sitter, at its core, is a parser generator tool
+
+00:00:17.120 --> 00:00:19.440
+and an incremental parsing library.
+
+00:00:19.440 --> 00:00:22.000
+What it essentially means is that it gives you
+
+00:00:22.000 --> 00:00:23.154
+an always up-to-date
+
+00:00:23.155 --> 00:00:24.200
+AST [abstract syntax tree] of your code.
+
+00:00:24.200 --> 00:00:27.960
+In the current Emacs frame, what you see to the right
+
+00:00:27.960 --> 00:00:30.840
+is the AST tree produced by Tree-sitter
+
+00:00:30.840 --> 00:00:33.560
+of the code that is on the left.
+
+00:00:33.560 --> 00:00:37.000
+For example, if you go to this "if" statement,
+
+00:00:37.000 --> 00:00:38.840
+you can see it goes here.
+
+00:00:38.840 --> 00:00:41.440
+It is also really good at handling errors.
+
+00:00:41.440 --> 00:00:44.400
+For example, if I were to delete this [if statement],
+
+00:00:44.400 --> 00:00:47.960
+it still parses out a tree as much as it can,
+
+00:00:47.960 --> 00:00:50.280
+but with an error node.
+
+00:00:50.280 --> 00:00:51.760
+Now let's see how we can query the tree
+
+00:00:51.760 --> 00:00:54.440
+to get the information that we need.
+
+00:00:54.440 --> 00:01:01.480
+Let's first try to get all the identifiers in the buffer.
+
+00:01:01.480 --> 00:01:04.000
+It highlights all the identifiers in the buffer,
+
+00:01:04.000 --> 00:01:05.440
+but let's say we want to get something
+
+00:01:05.440 --> 00:01:07.280
+a little more precise.
+
+00:01:07.280 --> 00:01:10.400
+Let's say we wanted to get this "i" here.
+
+00:01:10.400 --> 00:01:13.280
+This, in our case, would be this identifier
+
+00:01:13.280 --> 00:01:15.200
+inside this assignment expression
+
+00:01:15.200 --> 00:01:27.320
+inside this "for" statement.
+
+00:01:27.320 --> 00:01:29.920
+We can write it out like this.
+
+00:01:29.920 --> 00:01:31.880
+I hope this gives you a basic idea
+
+00:01:31.880 --> 00:01:34.480
+of how Tree-sitter works and how you can query
+
+00:01:34.480 --> 00:01:37.040
+to get the information that you need.
+
+00:01:37.040 --> 00:01:39.520
+First of all, let's see how Tree-sitter can help us
+
+00:01:39.520 --> 00:01:41.880
+with syntax highlighting.
+
+00:01:41.880 --> 00:01:46.480
+This is the default syntax highlighting by Emacs for SQL.
+
+00:01:46.480 --> 00:01:52.000
+Now let's see how Tree-sitter helps.
+
+00:01:52.000 --> 00:01:54.240
+This is the syntax highlighting in Emacs
+
+00:01:54.240 --> 00:01:56.760
+which Tree-sitter enabled.
+
+00:01:56.760 --> 00:01:58.240
+You'll see that we're able to target
+
+00:01:58.240 --> 00:02:01.240
+a lot more things and highlight them.
+
+00:02:01.240 --> 00:02:03.138
+That said, you don't always have to
+
+00:02:03.139 --> 00:02:04.200
+highlight everything.
+
+00:02:04.200 --> 00:02:15.640
+I personally prefer a much simpler theme.
+
+00:02:15.640 --> 00:02:17.880
+Now let's see how Tree-sitter helps you simplify
+
+00:02:17.880 --> 00:02:20.920
+adding custom syntax highlighting to your code.
+
+00:02:20.920 --> 00:02:22.200
+This is a Python file which has
+
+00:02:22.200 --> 00:02:25.640
+a class and a few member functions.
+
+00:02:25.640 --> 00:02:27.680
+Anyone who has used Python will know that
+
+00:02:27.680 --> 00:02:32.040
+the "self" keyword, while it is passed in as an argument,
+
+00:02:32.040 --> 00:02:34.240
+it has more meaning than that.
+
+00:02:34.240 --> 00:02:35.480
+Let's see if you can use Tree-sitter
+
+00:02:35.480 --> 00:02:38.720
+to highlight just the "self" keyword.
+
+00:02:38.720 --> 00:02:40.400
+If you look at the Tree-sitter tree,
+
+00:02:40.400 --> 00:02:43.120
+you can see that this is the first identifier
+
+00:02:43.120 --> 00:02:45.520
+in the list of parameters for a function definition.
+
+00:02:45.520 --> 00:02:55.480
+This is how you would query for the first identifier
+
+00:02:55.480 --> 00:02:59.320
+inside parameters inside a function definition.
+
+00:02:59.320 --> 00:03:02.520
+Now, if you see here, it also matches "cls",
+
+00:03:02.520 --> 00:03:11.360
+but let's restrict it to match just "self".
+
+00:03:11.360 --> 00:03:14.200
+Now we have a Tree-sitter query that identifies
+
+00:03:14.200 --> 00:03:16.960
+the first argument to the function definition
+
+00:03:16.960 --> 00:03:19.640
+and is also called "self".
+
+00:03:19.640 --> 00:03:22.520
+We can use this to apply custom highlighting onto this.
+
+00:03:22.520 --> 00:03:25.000
+This is pretty much all the code
+
+00:03:25.000 --> 00:03:26.520
+that you'll need to do this.
+
+00:03:26.520 --> 00:03:29.240
+The first block here is essentially to say to
+
+00:03:29.240 --> 00:03:32.160
+Tree-sitter to highlight anything with python.self
+
+00:03:32.160 --> 00:03:35.720
+with the face of custom-set.
+
+00:03:35.720 --> 00:03:37.520
+Now the second block here essentially is
+
+00:03:37.520 --> 00:03:39.800
+how we match for that.
+
+00:03:39.800 --> 00:03:41.800
+Now if you go back into a Python buffer
+
+00:03:41.800 --> 00:03:44.680
+and re-enable python-mode, we'll see that "self"
+
+00:03:44.680 --> 00:03:47.120
+is highlighted differently.
+
+00:03:47.120 --> 00:03:48.880
+How about creating text objects?
+
+00:03:48.880 --> 00:03:50.440
+Tree-sitter can help there too.
+
+00:03:50.440 --> 00:03:53.080
+For those who don't know, text objects
+
+00:03:53.080 --> 00:03:54.440
+is an idea that comes from Vim,
+
+00:03:54.440 --> 00:03:57.760
+and you can do things like select word,
+
+00:03:57.760 --> 00:04:00.520
+delete word, things like that.
+
+00:04:00.520 --> 00:04:06.200
+There are other text objects like line and paragraph.
+
+00:04:06.200 --> 00:04:09.000
+For each text object, you can have operations
+
+00:04:09.000 --> 00:04:09.760
+that are defined on them.
+
+00:04:09.760 --> 00:04:13.600
+For example, delete, copy, select, comment,
+
+00:04:13.600 --> 00:04:16.400
+all of these are operations that you can do.
+
+00:04:16.400 --> 00:04:19.400
+Let's try and use Tree-sitter to add more text objects.
+
+00:04:19.400 --> 00:04:20.560
+This is a plugin that I wrote
+
+00:04:20.560 --> 00:04:25.000
+which lets you add more text objects into Emacs.
+
+00:04:25.000 --> 00:04:27.880
+It helps you code aware text objects
+
+00:04:27.880 --> 00:04:31.880
+like functions, conditionals, loops, and such.
+
+00:04:31.880 --> 00:04:34.360
+Let's see an example scenario of how
+
+00:04:34.360 --> 00:04:35.920
+something like this could come in handy.
+
+00:04:35.920 --> 00:04:39.280
+For example, I can select inside this condition
+
+00:04:39.280 --> 00:04:42.960
+or inside this function and do things like that.
+
+00:04:42.960 --> 00:04:44.520
+Let's say I want to take this conditional,
+
+00:04:44.520 --> 00:04:47.160
+move to the next function, and create it here.
+
+00:04:47.160 --> 00:04:49.640
+What I would do is something like
+
+00:04:49.640 --> 00:04:52.320
+delete the conditional, move to the next function,
+
+00:04:52.320 --> 00:04:56.240
+create a conditional there, and paste.
+
+00:04:56.240 --> 00:04:57.160
+Let's try another example.
+
+00:04:57.160 --> 00:05:01.360
+Let's say I want to take this and move it to the end.
+
+00:05:01.360 --> 00:05:02.960
+If I had to do it without text objects,
+
+00:05:02.960 --> 00:05:06.800
+I'd probably have to go back to the previous comma,
+
+00:05:06.800 --> 00:05:10.440
+delete till next comma, find the closing bracket,
+
+00:05:10.440 --> 00:05:11.880
+and paste before.
+
+00:05:11.880 --> 00:05:14.040
+That works, but let's see
+
+00:05:14.040 --> 00:05:16.520
+how Tree-sitter can simplify it.
+
+00:05:16.520 --> 00:05:19.240
+With Tree-sitter, I can say delete the argument,
+
+00:05:19.240 --> 00:05:22.880
+go to the end of the next argument, and then paste.
+
+00:05:22.880 --> 00:05:25.280
+Tree-sitter essentially helps Emacs
+
+00:05:25.280 --> 00:05:27.240
+understand the code better semantically.
+
+00:05:27.240 --> 00:05:29.600
+Here is yet another use case.
+
+00:05:29.600 --> 00:05:31.480
+I work at a remote company,
+
+00:05:31.480 --> 00:05:33.440
+and I often find myself being in a call
+
+00:05:33.440 --> 00:05:35.400
+with my teammates, explaining the code to them.
+
+00:05:35.400 --> 00:05:38.000
+And one thing that really comes in handy
+
+00:05:38.000 --> 00:05:39.760
+is the narrowing capability of Emacs.
+
+00:05:39.760 --> 00:05:43.040
+Specifically, the fancy-narrow package.
+
+00:05:43.040 --> 00:05:44.840
+I use it to narrow just the function,
+
+00:05:44.840 --> 00:05:48.760
+or I could narrow to the conditional.
+
+00:05:48.760 --> 00:05:51.520
+Next to the end, the list would be code folding.
+
+00:05:51.520 --> 00:05:54.480
+This is a package which uses Tree-sitter
+
+00:05:54.480 --> 00:05:57.560
+to improve the code folding functionalities of Emacs.
+
+00:05:57.560 --> 00:06:00.200
+Code folding has always been this thing
+
+00:06:00.200 --> 00:06:02.280
+that I've had a love-hate relationship with.
+
+00:06:02.280 --> 00:06:04.280
+It usually works most of the time,
+
+00:06:04.280 --> 00:06:06.960
+but then fails if the indentation is wrong
+
+00:06:06.960 --> 00:06:09.160
+or we do something weird with the arguments.
+
+00:06:09.160 --> 00:06:11.680
+But now with Tree-sitter in the mix,
+
+00:06:11.680 --> 00:06:12.720
+it's a lot more precise.
+
+00:06:12.720 --> 00:06:17.040
+I can fold comments, I can fold functions,
+
+00:06:17.040 --> 00:06:20.480
+I can fold conditionals. You get the idea.
+
+00:06:20.480 --> 00:06:23.840
+I work with Kubernetes, which means I end up
+
+00:06:23.840 --> 00:06:28.080
+having to write and read a lot of YAML files.
+
+00:06:28.080 --> 00:06:31.840
+And navigating big YAML files is a mess.
+
+00:06:31.840 --> 00:06:35.760
+The two main problems are figuring out where I am,
+
+00:06:35.760 --> 00:06:38.760
+and two, navigating to where I want to be.
+
+00:06:38.760 --> 00:06:41.760
+Let's see how Tree-sitter can help us with both of this.
+
+00:06:41.760 --> 00:06:43.840
+This is an example YAML file.
+
+00:06:43.840 --> 00:06:47.080
+To be precise, this is the values file
+
+00:06:47.080 --> 00:06:48.640
+of the Redis helm chart.
+
+00:06:48.640 --> 00:06:52.240
+I'm somewhere in the file on tag under image,
+
+00:06:52.240 --> 00:06:54.880
+but I don't know what this tag is for.
+
+00:06:54.880 --> 00:06:57.240
+But with the help of Tree-sitter,
+
+00:06:57.240 --> 00:06:59.160
+I've been able to add this information
+
+00:06:59.160 --> 00:07:00.440
+into my header line.
+
+00:07:00.440 --> 00:07:02.960
+If you see in the header line,
+
+00:07:02.960 --> 00:07:05.880
+you'll see that I'm under sentinel.image.
+
+00:07:05.880 --> 00:07:08.800
+Now let's see how this helps with navigation.
+
+00:07:08.800 --> 00:07:12.680
+Let's say I want to enable persistence on master node.
+
+00:07:12.680 --> 00:07:18.200
+So with the help of Tree-sitter,
+
+00:07:18.200 --> 00:07:20.400
+I was able to enumerate every field
+
+00:07:20.400 --> 00:07:22.200
+that is available in this YAML file,
+
+00:07:22.200 --> 00:07:24.520
+and I can pass that information onto imenu,
+
+00:07:24.520 --> 00:07:28.040
+which I can then use to go to exactly where I want to.
+
+00:07:28.040 --> 00:07:30.000
+Also, since we're not dealing with
+
+00:07:30.000 --> 00:07:32.600
+any language specific constructs,
+
+00:07:32.600 --> 00:07:34.040
+this is very easy to extend to
+
+00:07:34.040 --> 00:07:35.760
+other similar languages
+
+00:07:35.760 --> 00:07:37.440
+or config files in this case.
+
+00:07:37.440 --> 00:07:39.520
+So for example, this is a JSON file,
+
+00:07:39.520 --> 00:07:44.800
+and I can navigate to location or project.
+
+00:07:44.800 --> 00:07:48.320
+And just like in YAML, it shows me where I'm at.
+
+00:07:48.320 --> 00:07:49.920
+I'm in projects.name,
+
+00:07:49.920 --> 00:07:52.880
+or I'm inside projects.highlights.
+
+00:07:52.880 --> 00:07:55.600
+Or how about Nix?
+
+00:07:55.600 --> 00:07:57.480
+This is my home.nix file.
+
+00:07:57.480 --> 00:08:01.040
+Again, I can search for services,
+
+00:08:01.040 --> 00:08:04.640
+and this lists me all the services that I've enabled.
+
+00:08:04.640 --> 00:08:06.720
+How about just services.description?
+
+00:08:06.720 --> 00:08:08.160
+So this is all the services
+
+00:08:08.160 --> 00:08:10.480
+that I've enabled and have descriptions.
+
+00:08:10.480 --> 00:08:12.720
+Now that we have seen this for config files,
+
+00:08:12.720 --> 00:08:15.040
+let's see how similar things apply for code.
+
+00:08:15.040 --> 00:08:16.760
+Just like in config files,
+
+00:08:16.760 --> 00:08:18.680
+I can see which function I'm under,
+
+00:08:18.680 --> 00:08:21.560
+and if I go to the next function, it changes.
+
+00:08:21.560 --> 00:08:23.960
+Okay, here is something really awesome.
+
+00:08:23.960 --> 00:08:26.600
+This is probably one of my favorites,
+
+00:08:26.600 --> 00:08:30.400
+and one of the things that actually made me understand
+
+00:08:30.400 --> 00:08:34.080
+how powerful Tree-sitter is, and got me into it.
+
+00:08:34.080 --> 00:08:35.680
+I work with a lot of Go code,
+
+00:08:35.680 --> 00:08:38.840
+and anyone who has worked with Go will tell you
+
+00:08:38.840 --> 00:08:41.040
+how repetitive it is handling errors.
+
+00:08:41.040 --> 00:08:42.800
+For those who don't write Go,
+
+00:08:42.800 --> 00:08:45.200
+let me give you a rough idea of what I'm talking about.
+
+00:08:45.200 --> 00:08:47.000
+If you want to bubble up the error,
+
+00:08:47.000 --> 00:08:49.920
+the way you would do it is just to return the error
+
+00:08:49.920 --> 00:08:51.400
+to the function that called it.
+
+00:08:51.400 --> 00:08:55.720
+Over here, you can either return nil or an empty value,
+
+00:08:55.720 --> 00:08:57.640
+and at the end, you return error.
+
+00:08:57.640 --> 00:09:00.200
+Let's try and use Tree-sitter to do this.
+
+00:09:00.200 --> 00:09:03.120
+Using the help of Tree-sitter, let's make Emacs
+
+00:09:03.120 --> 00:09:06.421
+go back, figure out what the return arguments are,
+
+00:09:06.422 --> 00:09:08.240
+figure out what their default values are,
+
+00:09:08.240 --> 00:09:11.480
+and automatically fill in the return statement.
+
+00:09:11.480 --> 00:09:13.040
+It would look something like this.
+
+00:09:13.040 --> 00:09:16.120
+In my case, it filled in the complete form,
+
+00:09:16.120 --> 00:09:18.320
+it figured out what the return arguments are,
+
+00:09:18.320 --> 00:09:19.320
+what their types are,
+
+00:09:19.320 --> 00:09:20.960
+and what their default values are,
+
+00:09:20.960 --> 00:09:22.800
+and filled out the entire return.
+
+00:09:22.800 --> 00:09:24.760
+And since this is a template,
+
+00:09:24.760 --> 00:09:27.720
+I can go to the next function, do the same thing,
+
+00:09:27.720 --> 00:09:29.560
+next function, do the same thing,
+
+00:09:29.560 --> 00:09:31.520
+next function, do the same thing.
+
+00:09:31.520 --> 00:09:34.360
+Here is a really fascinating use case of Tree-sitter,
+
+00:09:34.360 --> 00:09:36.320
+structural editing.
+
+00:09:36.320 --> 00:09:38.200
+You might be aware of plugins like paredit,
+
+00:09:38.200 --> 00:09:40.280
+which seems to "know" your code.
+
+00:09:40.280 --> 00:09:42.520
+This sort of takes it onto another level.
+
+00:09:42.520 --> 00:09:46.040
+It is in its early stages, but what this lets you do
+
+00:09:46.040 --> 00:09:48.920
+is completely treat your code as an AST,
+
+00:09:48.920 --> 00:09:52.000
+and edit as if it's a tree instead of characters.
+
+00:09:52.000 --> 00:09:54.640
+I am not going to go much in depth into it,
+
+00:09:54.640 --> 00:09:57.000
+but if you're interested, there is a talk
+
+00:09:57.000 --> 00:09:59.080
+from last year's EmacsConf around it.
+
+00:09:59.080 --> 00:10:02.320
+I'm just going to end this with one last tiny thing
+
+00:10:02.320 --> 00:10:04.920
+that I found in the tree-sitter-extras package.
+
+00:10:04.920 --> 00:10:07.600
+It's this tiny macro called tree-sitter-save-excursion.
+
+00:10:07.600 --> 00:10:11.240
+It works pretty much like save-excursion, but better.
+
+00:10:11.240 --> 00:10:13.400
+It uses the Tree-sitter syntax tree
+
+00:10:13.400 --> 00:10:14.800
+instead of just the code
+
+00:10:14.800 --> 00:10:16.720
+to figure out where to restore the position.
+
+00:10:16.720 --> 00:10:20.200
+My main use case for this was with code formatters.
+
+00:10:20.200 --> 00:10:22.080
+Since the code moves around a lot
+
+00:10:22.080 --> 00:10:23.160
+when it gets formatted,
+
+00:10:23.160 --> 00:10:25.000
+save-excursion was completely useless,
+
+00:10:25.000 --> 00:10:26.240
+but this came in handy.
+
+00:10:26.240 --> 00:10:28.120
+I'll just leave you off with
+
+00:10:28.120 --> 00:10:31.120
+what the future of Tree-sitter looks like for Emacs.
+
+00:10:31.120 --> 00:10:33.760
+So far, every Tree-sitter related feature
+
+00:10:33.760 --> 00:10:36.040
+that I've talked about is powered by this library.
+
+00:10:36.040 --> 00:10:42.320
+But there is talk about Tree-sitter coming into the core.
+
+00:10:42.320 --> 00:10:45.840
+It will most probably be landing in Emacs 29,
+
+00:10:45.840 --> 00:10:48.720
+and if you want to check out the work on Tree-sitter
+
+00:10:48.720 --> 00:10:51.200
+in core Emacs, you can check out
+
+00:10:51.200 --> 00:10:52.920
+the features/tree-sitter branch.
+
+00:10:52.920 --> 00:10:56.640
+You'll probably see more and more features and packages
+
+00:10:56.640 --> 00:10:59.640
+relying upon Tree-sitter, and even major modes
+
+00:10:59.640 --> 00:11:01.560
+being powered by Tree-sitter.
+
+00:11:01.560 --> 00:11:03.880
+And that's a wrap from me. Thank you.
diff --git a/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.vtt b/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.vtt
new file mode 100644
index 00000000..87f60bd6
--- /dev/null
+++ b/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.vtt
@@ -0,0 +1,2153 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:03.600
+ going to start recording. All right. Thanks, Michael, for
+
+00:00:03.600 --> 00:00:05.040
+ the great talk. So
+
+00:00:05.040 --> 00:00:09.070
+ the Q&A is live now. Folks can ask questions on IRC or the
+
+00:00:09.070 --> 00:00:10.440
+ pad. And then
+
+00:00:10.440 --> 00:00:12.660
+ at some later point, we'll also open up this PDB room
+
+00:00:12.660 --> 00:00:13.860
+ itself for people to join
+
+00:00:13.860 --> 00:00:16.310
+ and ask their questions here if they want. Michael, take it
+
+00:00:16.310 --> 00:00:16.720
+ away.
+
+00:00:16.720 --> 00:00:21.470
+ Okay, I will start with the first question of etherpad is
+
+00:00:21.470 --> 00:00:22.600
+ are you using
+
+00:00:22.600 --> 00:00:28.920
+ this as it as a replacement of x ex WM? No, not yet. But I
+
+00:00:28.920 --> 00:00:33.040
+'m planning to. I'm a
+
+00:00:33.040 --> 00:00:39.700
+ I use x WM since many years like for my main computing
+
+00:00:39.700 --> 00:00:42.400
+ environment with Emacs.
+
+00:00:42.400 --> 00:00:47.530
+ And I would love to have a replacement and Wayland. I'm not
+
+00:00:47.530 --> 00:00:49.120
+ actually that sure
+
+00:00:49.120 --> 00:00:54.390
+ if that needed. But I plan on using it. It's not finished.
+
+00:00:54.390 --> 00:00:55.760
+ So is this testable?
+
+00:00:55.760 --> 00:01:04.660
+ Yes, it is testable. I have gonna provide you the code. At
+
+00:01:04.660 --> 00:01:05.960
+ the end of the
+
+00:01:05.960 --> 00:01:10.180
+ video, there was a link to my site, but there's no site yet
+
+00:01:10.180 --> 00:01:12.160
+. I bought this URL a
+
+00:01:12.160 --> 00:01:16.520
+ year ago, and that's a good reason to put something on
+
+00:01:16.520 --> 00:01:18.040
+ there. So wait a few
+
+00:01:18.040 --> 00:01:22.250
+ days and you can download a git repository. At least that's
+
+00:01:22.250 --> 00:01:23.640
+ the plan. And
+
+00:01:23.640 --> 00:01:26.710
+ then you can test it. Input handling is still missing, as I
+
+00:01:26.710 --> 00:01:30.560
+ said. Yes, that makes
+
+00:01:30.560 --> 00:01:36.390
+ it a bit rough. So the input is only guided by where the
+
+00:01:36.390 --> 00:01:39.560
+ mouse pointer is. And
+
+00:01:39.560 --> 00:01:43.770
+ it's missing in the C part in the C server part. But if
+
+00:01:43.770 --> 00:01:45.160
+ this is in there, I
+
+00:01:45.160 --> 00:01:49.450
+ think you can use it as a replacement. So it's testable,
+
+00:01:49.450 --> 00:01:50.240
+ and it's not a
+
+00:01:50.240 --> 00:01:54.140
+ replacement yet. Have you considered contributing to Emacs
+
+00:01:54.140 --> 00:01:55.080
+ cores? The next
+
+00:01:55.080 --> 00:02:00.590
+ question? Yes. Is it a general question? If I would like to
+
+00:02:00.590 --> 00:02:03.680
+ do that? Yeah, I got
+
+00:02:03.680 --> 00:02:07.560
+ quite a lot into Emacs core in the last year because I did
+
+00:02:07.560 --> 00:02:08.800
+ language work with
+
+00:02:08.800 --> 00:02:13.030
+ Lisp and really nerded out and got to know the core. So I
+
+00:02:13.030 --> 00:02:15.360
+ like it. Why not? If
+
+00:02:15.360 --> 00:02:18.980
+ it's a more specific question, if I would like to
+
+00:02:18.980 --> 00:02:20.840
+ contribute the Wayland
+
+00:02:20.840 --> 00:02:24.810
+ support to Emacs core, then I'm not that sure if it belongs
+
+00:02:24.810 --> 00:02:27.160
+ there. Like at first,
+
+00:02:27.160 --> 00:02:29.660
+ I thought, of course, you have to put it in the core. It's
+
+00:02:29.660 --> 00:02:30.520
+ C. It has to work
+
+00:02:30.520 --> 00:02:35.120
+ together. But after I looked into it a little bit more, how
+
+00:02:35.120 --> 00:02:36.280
+ to do a Wayland
+
+00:02:36.280 --> 00:02:39.270
+ compositor with Emacs, I found out, okay, there's this Way
+
+00:02:39.270 --> 00:02:40.280
+land protocol and
+
+00:02:40.280 --> 00:02:43.970
+ all the programs that are working together in a Wayland
+
+00:02:43.970 --> 00:02:45.560
+ desktop, they talk
+
+00:02:45.560 --> 00:02:51.150
+ in this protocol. And when I got Emacs to talk with the Way
+
+00:02:51.150 --> 00:02:53.320
+land protocol, it
+
+00:02:53.320 --> 00:02:57.200
+ was solved. And that is in the library, because it's an
+
+00:02:57.200 --> 00:02:58.920
+ asynchronous process,
+
+00:02:58.920 --> 00:03:02.440
+ like a network connection. And Emacs has an event loop that
+
+00:03:02.440 --> 00:03:05.560
+ listens to
+
+00:03:06.480 --> 00:03:06.480
+
+
+00:03:06.480 --> 00:03:09.490
+ messages on the network. So it's integrated into the Emacs
+
+00:03:09.490 --> 00:03:10.360
+ core. You
+
+00:03:10.360 --> 00:03:13.870
+ don't have to do anything more. But where it gets
+
+00:03:13.870 --> 00:03:15.920
+ interesting, again, is this
+
+00:03:15.920 --> 00:03:21.900
+ idea I had, maybe we could use it for more in Emacs. Emacs
+
+00:03:21.900 --> 00:03:23.840
+ is fundamentally
+
+00:03:23.840 --> 00:03:26.740
+ about drawing buffers to a screen and not fundamentally.
+
+00:03:26.740 --> 00:03:27.720
+ But the part that's
+
+00:03:27.720 --> 00:03:30.800
+ not a Lisp machine, the graphical part, it's drawing buff
+
+00:03:30.800 --> 00:03:32.000
+ers to a screen and you
+
+00:03:32.000 --> 00:03:36.060
+ have to composite these buffers somehow. And now we're
+
+00:03:36.060 --> 00:03:38.400
+ using different desktop
+
+00:03:38.400 --> 00:03:43.640
+ toolkits like GTK on the Linux. And maybe we don't have to,
+
+00:03:43.640 --> 00:03:45.000
+ we can just draw
+
+00:03:45.000 --> 00:03:49.980
+ pixel buffers, like draw into a pixel buffer. Like, I don't
+
+00:03:49.980 --> 00:03:50.880
+ know, what do we
+
+00:03:50.880 --> 00:03:55.640
+ use for rendering? I forgot, Cairo or something. And this
+
+00:03:55.640 --> 00:03:56.760
+ could just write
+
+00:03:56.760 --> 00:03:59.770
+ into a pixel buffer. So now we arranged, and Emacs is
+
+00:03:59.770 --> 00:04:01.080
+ already a window manager.
+
+00:04:01.080 --> 00:04:03.970
+ So it's not that difficult to implement a window manager
+
+00:04:03.970 --> 00:04:05.320
+ with Emacs because Emacs
+
+00:04:05.320 --> 00:04:11.060
+ is a window manager, pretty good one, I think. And no, I
+
+00:04:11.060 --> 00:04:13.040
+ just lost a little bit
+
+00:04:13.040 --> 00:04:16.670
+ more train of thought. But so far to contributing to the
+
+00:04:16.670 --> 00:04:17.960
+ core and we could do
+
+00:04:17.960 --> 00:04:20.840
+ more with it. So next question.
+
+00:04:20.840 --> 00:04:23.960
+ - One thing, Michael, quickly. Sorry. Yeah, it would be
+
+00:04:23.960 --> 00:04:25.200
+ great if you could also
+
+00:04:25.200 --> 00:04:27.510
+ repeat the questions for the stream before you answer them.
+
+00:04:27.510 --> 00:04:28.040
+ That would be
+
+00:04:28.040 --> 00:04:28.440
+ awesome.
+
+00:04:28.440 --> 00:04:30.120
+ - I will do that.
+
+00:04:30.120 --> 00:04:30.920
+ - Thank you.
+
+00:04:32.600 --> 00:04:32.600
+
+
+00:04:32.600 --> 00:04:36.260
+ Question. Is this valent compositor in Emacs? What
+
+00:04:36.260 --> 00:04:39.040
+ different with XReparent in
+
+00:04:39.040 --> 00:04:45.290
+ X11? Okay, this is a little bit difficult for me to
+
+00:04:45.290 --> 00:04:48.520
+ understand, but I answered
+
+00:04:48.520 --> 00:04:53.550
+ anyway. So first, is this a valent compositor in Emacs? I
+
+00:04:53.550 --> 00:04:54.840
+ would say no,
+
+00:04:54.840 --> 00:04:58.870
+ because the Emacs doesn't do the valent compositoring. I
+
+00:04:58.870 --> 00:05:00.440
+ first planned to do it
+
+00:05:00.440 --> 00:05:03.130
+ like this, but it doesn't work out like this because you
+
+00:05:03.130 --> 00:05:06.120
+ have to handle file
+
+00:05:06.120 --> 00:05:10.120
+ descriptors and Emacs can't handle file descriptors except
+
+00:05:10.120 --> 00:05:11.480
+ you go down to the C
+
+00:05:11.480 --> 00:05:19.930
+ part. So no, it's not. It's a C, a WL roots valent compos
+
+00:05:19.930 --> 00:05:22.840
+itor that talks to
+
+00:05:22.840 --> 00:05:29.290
+ Emacs and Emacs is, it's just like a helper compositor. Em
+
+00:05:29.290 --> 00:05:31.160
+acs says where to
+
+00:05:31.160 --> 00:05:34.380
+ put the windows. It's the window manager. And in the future
+
+00:05:34.380 --> 00:05:35.360
+, where to put the
+
+00:05:35.360 --> 00:05:40.170
+ inputs so that you can insert Emacs into the input stream
+
+00:05:40.170 --> 00:05:43.320
+ like XWM does it. Okay,
+
+00:05:43.320 --> 00:05:49.070
+ then what different with XReparent in X11? I don't actually
+
+00:05:49.070 --> 00:05:51.000
+ know what XReparent
+
+00:05:51.000 --> 00:05:55.150
+ is, so I'm sorry. I have to skip this one. How would
+
+00:05:55.150 --> 00:05:57.000
+ multiple monitors be
+
+00:05:57.000 --> 00:05:59.990
+ handled? Separate frames? Yes, separate frames. This is
+
+00:05:59.990 --> 00:06:01.160
+ already testable. It's
+
+00:06:01.160 --> 00:06:08.540
+ implemented. As soon as a new monitor crops up, the Emacs
+
+00:06:08.540 --> 00:06:10.320
+ is, the valent
+
+00:06:10.320 --> 00:06:15.490
+ protocol informs about a new output event and Emacs then
+
+00:06:15.490 --> 00:06:17.000
+ pops up a new frame
+
+00:06:17.000 --> 00:06:22.240
+ on this output. And depending on how usable you want to
+
+00:06:22.240 --> 00:06:24.760
+ have it, you can just,
+
+00:06:24.760 --> 00:06:27.160
+ there could be a menu like where do you want the output? Do
+
+00:06:27.160 --> 00:06:27.840
+ you want to have a
+
+00:06:27.840 --> 00:06:30.230
+ screen on it or something like that? And then you have
+
+00:06:30.230 --> 00:06:31.480
+ output handling. Output
+
+00:06:31.480 --> 00:06:35.100
+ handling is already working. So separate frames, one per
+
+00:06:35.100 --> 00:06:37.480
+ output because that's
+
+00:06:37.480 --> 00:06:41.010
+ the Emacs analog. You have windows, you have frames, frames
+
+00:06:41.010 --> 00:06:42.760
+ are like monitors.
+
+00:06:42.760 --> 00:06:45.800
+ And the special thing about valent outputs is they don't
+
+00:06:45.800 --> 00:06:46.600
+ have to be a whole
+
+00:06:46.600 --> 00:06:49.980
+ monitor or hardware device. They can also be like a normal
+
+00:06:49.980 --> 00:06:52.840
+ frame. Next question
+
+00:06:52.840 --> 00:06:57.440
+ is, could you make it so you can restart Emacs without
+
+00:06:57.440 --> 00:06:59.400
+ logging out or switch to
+
+00:06:59.400 --> 00:07:02.640
+ non-Emacs buffer while Emacs is blocking? These are the
+
+00:07:02.640 --> 00:07:05.080
+ biggest issues with XWM.
+
+00:07:05.080 --> 00:07:13.240
+ While Emacs is blocking. Okay, I have to think about this a
+
+00:07:13.240 --> 00:07:14.760
+ little bit
+
+00:07:16.120 --> 00:07:19.270
+ because right now I have a problem with restarting and the
+
+00:07:19.270 --> 00:07:20.600
+ code I wrote. Emacs
+
+00:07:20.600 --> 00:07:25.340
+ starts the valent server and then starts to talk to it, the
+
+00:07:25.340 --> 00:07:28.520
+ server to Emacs. And
+
+00:07:28.520 --> 00:07:33.070
+ as soon as the server terminates, Emacs terminates. Because
+
+00:07:33.070 --> 00:07:34.680
+ GTK has this feature
+
+00:07:34.680 --> 00:07:38.550
+ and it's a bug since several years and they know it, but
+
+00:07:38.550 --> 00:07:39.880
+ apparently it's a
+
+00:07:39.880 --> 00:07:44.830
+ feature, not a bug. So as soon as a valent GTK window
+
+00:07:44.830 --> 00:07:47.000
+ terminates, it terminates
+
+00:07:47.000 --> 00:07:51.420
+ its process. That means if there's an Emacs frame on valent
+
+00:07:51.420 --> 00:07:52.440
+ and the frame is
+
+00:07:52.440 --> 00:07:57.610
+ powered by GTK as Emacs currently does it, valent termin
+
+00:07:57.610 --> 00:07:59.560
+ates the frame, Emacs
+
+00:07:59.560 --> 00:08:02.870
+ gets terminated, whole thing is terminated. Well, normally
+
+00:08:02.870 --> 00:08:03.480
+ you would like
+
+00:08:03.480 --> 00:08:06.500
+ something that like Emacs terminal frame, and then you pop
+
+00:08:06.500 --> 00:08:07.640
+ open valent buffer
+
+00:08:07.640 --> 00:08:10.160
+ or something like that. And it's just a long running Emacs
+
+00:08:10.160 --> 00:08:11.640
+ session, but that's
+
+00:08:11.640 --> 00:08:16.670
+ a blocker right now and it's GTK's fault. But we already
+
+00:08:16.670 --> 00:08:18.040
+ know the other
+
+00:08:18.040 --> 00:08:22.220
+ bug we have since years. And so I don't think this one is
+
+00:08:22.220 --> 00:08:23.640
+ resolved either.
+
+00:08:23.640 --> 00:08:29.040
+ So what does mean or switch to non-Emacs buffers while Em
+
+00:08:29.040 --> 00:08:31.000
+acs is blocking? No,
+
+00:08:31.000 --> 00:08:35.090
+ you can't. Okay. Now you can't do this because Emacs does
+
+00:08:35.090 --> 00:08:36.200
+ the window managing
+
+00:08:36.200 --> 00:08:43.700
+ as in EXWM. So there's a new window or you want to switch a
+
+00:08:43.700 --> 00:08:45.960
+ window. So it has
+
+00:08:45.960 --> 00:08:50.640
+ to go through Emacs. Emacs gets a request for new window or
+
+00:08:50.640 --> 00:08:52.280
+ Emacs just says layout
+
+00:08:52.280 --> 00:08:55.820
+ this window at this point. And if Emacs as it's single
+
+00:08:55.820 --> 00:08:58.200
+ threaded is blocked, it
+
+00:08:58.200 --> 00:09:05.830
+ can't issue this layout request. So yeah, that's not going
+
+00:09:05.830 --> 00:09:09.320
+ to work out as long
+
+00:09:09.320 --> 00:09:17.190
+ as Emacs is just single threaded. Next question. Did this
+
+00:09:17.190 --> 00:09:19.400
+ project can implement
+
+00:09:19.400 --> 00:09:23.680
+ mirror of buffer for Emacs different window? Okay. I think
+
+00:09:23.680 --> 00:09:25.320
+ I got this question.
+
+00:09:27.320 --> 00:09:31.810
+ Can you, okay. In Emacs normally you know how buffers work.
+
+00:09:31.810 --> 00:09:32.760
+ Like you have one
+
+00:09:32.760 --> 00:09:35.420
+ buffer, you split it, you have two buffers, but it's the
+
+00:09:35.420 --> 00:09:37.000
+ same buffer. Then you can
+
+00:09:37.000 --> 00:09:39.320
+ take one of the buffers and look at another place in this
+
+00:09:39.320 --> 00:09:42.360
+ buffer. You can't do
+
+00:09:42.360 --> 00:09:45.930
+ this with Emacs buffers, but you can't do it like an EXWM.
+
+00:09:45.930 --> 00:09:47.080
+ You can't do it with
+
+00:09:47.080 --> 00:09:50.980
+ the X windows because there's only one view on the X
+
+00:09:50.980 --> 00:09:54.440
+ windows. So now the special
+
+00:09:54.440 --> 00:09:57.790
+ thing with Valent, you can have multiple views on the same
+
+00:09:57.790 --> 00:10:00.040
+ window. And when I got
+
+00:10:00.040 --> 00:10:03.210
+ to implement this idea, I was, yeah, of course I'm going to
+
+00:10:03.210 --> 00:10:04.440
+ do multiple views,
+
+00:10:04.440 --> 00:10:09.710
+ same window as Emacs does it. And I had it implemented. And
+
+00:10:09.710 --> 00:10:11.560
+ then I found out, no,
+
+00:10:11.560 --> 00:10:16.660
+ this is not going to work. Because a window has always one
+
+00:10:16.660 --> 00:10:18.920
+ size. Like you can't,
+
+00:10:18.920 --> 00:10:23.000
+ if you have a video open, you can't just tell it, make it
+
+00:10:23.000 --> 00:10:24.680
+ this size. Or if you have
+
+00:10:24.680 --> 00:10:29.080
+ a web browser open and you can't have different sizes. So
+
+00:10:29.080 --> 00:10:32.360
+ it's in principle, it's
+
+00:10:32.360 --> 00:10:37.910
+ comfortable with the Emacs model. Like the normal desktop
+
+00:10:37.910 --> 00:10:39.640
+ model doesn't work with Emacs. So
+
+00:10:39.640 --> 00:10:44.200
+ no, this still doesn't work. You can do a hack. I tried it.
+
+00:10:44.200 --> 00:10:45.320
+ You have like one big
+
+00:10:45.320 --> 00:10:48.750
+ window that you have other windows and you scale them or
+
+00:10:48.750 --> 00:10:50.600
+ you crop them, but this isn't
+
+00:10:50.600 --> 00:10:54.890
+ well supported in WL roots. And also it doesn't make a lot
+
+00:10:54.890 --> 00:10:57.720
+ of sense actually. So I scrapped it
+
+00:10:57.720 --> 00:11:02.030
+ and there's just one view. Okay. So just one view because
+
+00:11:02.030 --> 00:11:04.280
+ it doesn't make a lot of sense to have
+
+00:11:04.280 --> 00:11:08.120
+ multiple views. How does this next question, how does the
+
+00:11:08.120 --> 00:11:10.840
+ single threaded, threaded affects
+
+00:11:10.840 --> 00:11:16.470
+ the project? Yeah. And so far as it does affect any Emacs
+
+00:11:16.470 --> 00:11:19.640
+ package, like it's not a special
+
+00:11:19.640 --> 00:11:25.400
+ problem, not a, not a actual problem. Like the only, only,
+
+00:11:25.400 --> 00:11:26.480
+ um, um,
+
+00:11:26.480 --> 00:11:32.850
+ there's just one thing where Emacs could block, uh, the
+
+00:11:32.850 --> 00:11:35.720
+ other windows. It's when the other window
+
+00:11:35.720 --> 00:11:39.730
+ requests a layout, like there's a new program that opened a
+
+00:11:39.730 --> 00:11:42.760
+ window or another window opened
+
+00:11:42.760 --> 00:11:46.840
+ and Emacs is blocking and can't service this new surface
+
+00:11:46.840 --> 00:11:49.400
+ request. So you won't see anything,
+
+00:11:49.400 --> 00:11:53.620
+ but except from that, um, if you see the window Emacs hangs
+
+00:11:53.620 --> 00:11:57.320
+ like with the EXWVM, you just can use
+
+00:11:57.320 --> 00:12:00.790
+ the other program because it's not coupled to Emacs in any
+
+00:12:00.790 --> 00:12:02.120
+ significant way.
+
+00:12:03.720 --> 00:12:08.190
+ Um, and the good thing is, and that's the short side remark
+
+00:12:08.190 --> 00:12:11.240
+. If you want to go further than our
+
+00:12:11.240 --> 00:12:14.000
+ single threaded thing, it's like, I think we, we have a
+
+00:12:14.000 --> 00:12:16.200
+ talk somewhere in this conference, like,
+
+00:12:16.200 --> 00:12:21.420
+ um, how Emacs was always async and is it, is async and Em
+
+00:12:21.420 --> 00:12:24.200
+acs is async. Well, we have async
+
+00:12:24.200 --> 00:12:27.670
+ processes. We have callbacks, we have network processes we
+
+00:12:27.670 --> 00:12:29.800
+ can use asynchronously. And I think
+
+00:12:29.800 --> 00:12:33.820
+ that's the way forward for Emacs to don't be blocking, like
+
+00:12:33.820 --> 00:12:35.800
+ have worker threads, something
+
+00:12:35.800 --> 00:12:40.140
+ like this and have a main thing because it's one big muddle
+
+00:12:40.140 --> 00:12:43.160
+ of muddle of code. I don't think you
+
+00:12:43.160 --> 00:12:49.280
+ can just separate it. So, but we could lean more into these
+
+00:12:49.280 --> 00:12:53.320
+ helpers and workers like Node.js does
+
+00:12:53.320 --> 00:12:57.950
+ it or something like that. So next question is this
+
+00:12:57.950 --> 00:13:01.800
+ technology. I have a short matter question.
+
+00:13:01.800 --> 00:13:08.200
+ Do I have to stop or can I answer all the questions? Um,
+
+00:13:08.200 --> 00:13:09.880
+ yeah, I think we can go on for now.
+
+00:13:09.880 --> 00:13:13.420
+ And, um, the BBB room is also open for anyone who does want
+
+00:13:13.420 --> 00:13:15.720
+ to join here to ask questions directly,
+
+00:13:15.720 --> 00:13:18.420
+ um, in case the stream moves on. But I think this is our
+
+00:13:18.420 --> 00:13:20.280
+ last talk on the Dev track before the launch
+
+00:13:20.280 --> 00:13:22.850
+ break. So yeah, you should be good. Ah, nice. I don't need
+
+00:13:22.850 --> 00:13:24.520
+ a lunch break because, uh, uh,
+
+00:13:24.520 --> 00:13:32.110
+ in Europe it's already like the next meal. Right. So, um,
+
+00:13:32.110 --> 00:13:34.760
+ next question is this technology
+
+00:13:34.760 --> 00:13:38.840
+ need right? Valence server. Can it works with GNOME 3?
+
+00:13:38.840 --> 00:13:42.760
+ Actually, yes, it needs to write a
+
+00:13:42.760 --> 00:13:47.490
+ valence server because valence needs a valence server. And,
+
+00:13:47.490 --> 00:13:49.320
+ uh, just for you, what does the
+
+00:13:49.320 --> 00:13:53.900
+ server actually do? The server does, um, for example, it is
+
+00:13:53.900 --> 00:13:55.880
+ the compositor. The valence
+
+00:13:55.880 --> 00:13:58.680
+ compositor is part of the valence compositor. It's like
+
+00:13:58.680 --> 00:14:00.360
+ difficult naming they had there.
+
+00:14:00.360 --> 00:14:04.320
+ And it does a merging of, of windows. You have, um, you
+
+00:14:04.320 --> 00:14:06.760
+ have an application and it draws a window.
+
+00:14:06.760 --> 00:14:09.730
+ So you give it a pixel buffer, the application draws in
+
+00:14:09.730 --> 00:14:11.560
+ this pixel buffer, and then you put it
+
+00:14:11.560 --> 00:14:16.310
+ on the screen and compositor this other surfaces that are
+
+00:14:16.310 --> 00:14:19.560
+ on the screen. And, um, you have to look
+
+00:14:19.560 --> 00:14:22.320
+ into the frame rate you want to have and stuff like that.
+
+00:14:22.320 --> 00:14:24.360
+ So it's really low level stuff. It's,
+
+00:14:24.360 --> 00:14:28.020
+ it's, um, that's the thing the valence compositor does. And
+
+00:14:28.020 --> 00:14:30.200
+ it does input handling like lip input,
+
+00:14:30.200 --> 00:14:33.760
+ and then it receives something and routes it to this
+
+00:14:33.760 --> 00:14:37.320
+ surface of that surface, or I think shell
+
+00:14:37.320 --> 00:14:41.340
+ it's called. It's a shell that reserves the input. Okay.
+
+00:14:41.340 --> 00:14:44.760
+ Can it work with GNOME 3? Yes,
+
+00:14:44.760 --> 00:14:47.930
+ maybe. I don't know how open they are and if you can
+
+00:14:47.930 --> 00:14:50.600
+ integrate it, but I don't think that's,
+
+00:14:50.600 --> 00:14:55.520
+ that's a good direction because what do you want to build?
+
+00:14:55.520 --> 00:15:00.040
+ So, ah, just one thing since Emacs can
+
+00:15:00.040 --> 00:15:04.130
+ talk valence and is a normal valence client with the
+
+00:15:04.130 --> 00:15:07.880
+ library I wrote, it can take, can talk to any
+
+00:15:07.880 --> 00:15:13.520
+ other valence program and maybe you can do something useful
+
+00:15:13.520 --> 00:15:16.520
+ with GNOME 3 and Emacs as a
+
+00:15:16.520 --> 00:15:19.500
+ valence client. Like you can automate parts of your desktop
+
+00:15:19.500 --> 00:15:21.720
+ or something like that. Um, yeah,
+
+00:15:21.720 --> 00:15:25.850
+ that would be a possibility. Good. I'm going now to the
+
+00:15:25.850 --> 00:15:28.200
+ next question that is, could there be an
+
+00:15:28.200 --> 00:15:31.940
+ Emacs valence server and just connect with Emacs client?
+
+00:15:31.940 --> 00:15:36.600
+ Cool. I named my thing Emacs valence
+
+00:15:36.600 --> 00:15:42.050
+ server. So there is already an Emacs valence server. Um,
+
+00:15:42.050 --> 00:15:44.600
+ connect with Emacs client.
+
+00:15:44.600 --> 00:15:50.600
+ I don't actually get the question, but I think, um, yes, of
+
+00:15:50.600 --> 00:15:53.080
+ course you have an Emacs running.
+
+00:15:53.080 --> 00:15:56.070
+ It doesn't have to be an Emacs valence server because Emacs
+
+00:15:56.070 --> 00:15:56.920
+ is multi-display
+
+00:15:56.920 --> 00:16:01.090
+ and then you can just pop open the windows in valence or
+
+00:16:01.090 --> 00:16:04.360
+ something like this. Next question is
+
+00:16:04.360 --> 00:16:07.650
+ when you share your code, could you provide the equivalent
+
+00:16:07.650 --> 00:16:10.040
+ of an X session script for those who
+
+00:16:10.040 --> 00:16:17.920
+ are on XWM and want to test? Yes, I can, because it's my
+
+00:16:17.920 --> 00:16:21.720
+ goal is to have it run like this for
+
+00:16:21.720 --> 00:16:24.660
+ myself. But when I share the code in the coming days, as I
+
+00:16:24.660 --> 00:16:29.640
+'m planning, no, you won't run it like
+
+00:16:29.640 --> 00:16:33.910
+ this because it's not that polished yet. So a startup is a
+
+00:16:33.910 --> 00:16:36.360
+ little bit more involved and I
+
+00:16:36.360 --> 00:16:41.030
+ haven't researched all the ways you can make it polished,
+
+00:16:41.030 --> 00:16:44.600
+ but it's on the roadmap. So stay tuned.
+
+00:16:46.520 --> 00:16:51.220
+ The next question is, I have a demo to show this Emacs val
+
+00:16:51.220 --> 00:16:52.520
+ence compositor,
+
+00:16:52.520 --> 00:16:56.900
+ even if buggy now, just curious. Yes, there is a demo. Like
+
+00:16:56.900 --> 00:16:59.480
+ you just watched one in the video. It
+
+00:16:59.480 --> 00:17:06.370
+ was the compositor running. It did the compositing of the
+
+00:17:06.370 --> 00:17:11.080
+ video I made. And the other demo is the
+
+00:17:11.080 --> 00:17:16.980
+ code I'm planning to release. The code right now is working
+
+00:17:16.980 --> 00:17:21.960
+, but there's some documentation also,
+
+00:17:21.960 --> 00:17:26.510
+ but it's not finished. So have fun digging in there, but
+
+00:17:26.510 --> 00:17:29.400
+ don't expect anything like hyper
+
+00:17:29.400 --> 00:17:33.690
+ polished or something like this. More, yeah, I'm looking
+
+00:17:33.690 --> 00:17:36.680
+ for feedback and ideas and where to take
+
+00:17:36.680 --> 00:17:42.260
+ this thing. Now we're going to get to buffer mirroring. So
+
+00:17:42.260 --> 00:17:44.760
+ next question is, so the current
+
+00:17:44.760 --> 00:17:47.950
+ limitation is that buffer mirroring doesn't respect
+
+00:17:47.950 --> 00:17:50.360
+ different widths or heights. Yeah,
+
+00:17:50.360 --> 00:17:53.530
+ the limitation is fundamentally if you have a normal
+
+00:17:53.530 --> 00:17:55.800
+ desktop window, look at your browser
+
+00:17:55.800 --> 00:17:59.980
+ or your video player, just watching me, you are just
+
+00:17:59.980 --> 00:18:04.600
+ watching me. It just has one size. You can't
+
+00:18:04.600 --> 00:18:08.570
+ say, please make yourself this size and this size and show
+
+00:18:08.570 --> 00:18:12.040
+ me two different parts of your site or
+
+00:18:12.040 --> 00:18:17.520
+ that doesn't work. It's not thought like this. So you can
+
+00:18:17.520 --> 00:18:20.680
+ hack something up that you have like
+
+00:18:20.680 --> 00:18:24.300
+ a big window and then you show a little crop part of it and
+
+00:18:24.300 --> 00:18:26.760
+ another buffer. This does actually work,
+
+00:18:27.560 --> 00:18:32.940
+ but just a little site or like if you want to do something
+
+00:18:32.940 --> 00:18:38.680
+ like this, be prepared. WL roots doesn't,
+
+00:18:38.680 --> 00:18:43.740
+ okay. So a Wayland server or compositor has to do its own
+
+00:18:43.740 --> 00:18:47.880
+ compositing. That means it has to
+
+00:18:47.880 --> 00:18:51.590
+ composite the different buffers or pixel buffer it has in
+
+00:18:51.590 --> 00:18:53.880
+ one pixel buffer and put it on the output.
+
+00:18:55.000 --> 00:18:59.600
+ That means you have to do that yourself. And there's a
+
+00:18:59.600 --> 00:19:01.960
+ helper to do this in WL roots.
+
+00:19:01.960 --> 00:19:07.410
+ This is WLR scene as it's called. And it does this for you.
+
+00:19:07.410 --> 00:19:09.720
+ You build a scene tree and does
+
+00:19:09.720 --> 00:19:14.510
+ damage tracking so it doesn't repaint everything. It saves
+
+00:19:14.510 --> 00:19:16.920
+ battery and it's a lot of work to do this
+
+00:19:16.920 --> 00:19:21.710
+ and it's ready there. But what is missing in this helper is
+
+00:19:21.710 --> 00:19:24.920
+ cropping and resizing. So right now you
+
+00:19:24.920 --> 00:19:28.700
+ can't crop and you can't resize. And I would say this is
+
+00:19:28.700 --> 00:19:31.240
+ the main blocker for using the thing I
+
+00:19:31.240 --> 00:19:38.100
+ built, Wayland compositor is you can't crop windows. And if
+
+00:19:38.100 --> 00:19:42.920
+ you, maybe you use MP4 like the
+
+00:19:42.920 --> 00:19:48.310
+ video player, it doesn't respect what you tell it, what the
+
+00:19:48.310 --> 00:19:51.480
+ size it should get. It just, it keeps its
+
+00:19:51.480 --> 00:19:55.400
+ aspect ratio and then just respects and either width or
+
+00:19:55.400 --> 00:19:58.280
+ height, but not both if they don't fit.
+
+00:19:58.280 --> 00:20:01.790
+ So you want to fit it in a buffer and then it's stay, it's
+
+00:20:01.790 --> 00:20:04.360
+ overflows the buffer a little bit. You
+
+00:20:04.360 --> 00:20:09.200
+ can see it in the talk video. In my talk, I posted like the
+
+00:20:09.200 --> 00:20:11.720
+ little camera picture of me is not always
+
+00:20:11.720 --> 00:20:15.550
+ there where it should be. It's over the mode line or
+
+00:20:15.550 --> 00:20:18.680
+ something like that. And yeah, there needs to
+
+00:20:18.680 --> 00:20:25.180
+ be some cropping. XWVM does cropping. It crops. You can try
+
+00:20:25.180 --> 00:20:28.920
+ it out. If someone of you is a XWM
+
+00:20:28.920 --> 00:20:39.560
+ user, he can do a full screen video MP4 video, and then
+
+00:20:39.560 --> 00:20:42.200
+ just split right. And then you'll see
+
+00:20:42.200 --> 00:20:46.990
+ just half the video screen because it's no cropped, but the
+
+00:20:46.990 --> 00:20:49.320
+ video player in the background
+
+00:20:49.320 --> 00:20:55.480
+ still sends the full screen. Okay. So much for this topic.
+
+00:20:55.480 --> 00:20:59.420
+ Ah, okay. And if you want to do cropping, you have to do
+
+00:20:59.420 --> 00:21:03.720
+ your own compositor. I asked the real W
+
+00:21:05.080 --> 00:21:09.870
+ WL roots. Sorry. That's this W is complicated for me. I
+
+00:21:09.870 --> 00:21:16.120
+ asked the WL roots developers on their IRC
+
+00:21:16.120 --> 00:21:19.450
+ channel and they told me, yes, we wanted to have this. We
+
+00:21:19.450 --> 00:21:21.400
+ have an issue open, but it's not
+
+00:21:21.400 --> 00:21:24.870
+ implemented and you have to do it yourself. And yes,
+
+00:21:24.870 --> 00:21:27.320
+ whoever wants us has to do it himself. And
+
+00:21:27.320 --> 00:21:32.180
+ that's a lot of work in C. Okay. I'll jump in quickly at
+
+00:21:32.180 --> 00:21:33.800
+ one thing. Yeah. I think we were about
+
+00:21:33.800 --> 00:21:36.040
+ like two minutes break, sorry, two minutes away from our
+
+00:21:36.040 --> 00:21:38.840
+ lunch break. At which point I think the
+
+00:21:38.840 --> 00:21:42.160
+ stream will be moving on or will be stopped, but this BQB
+
+00:21:42.160 --> 00:21:44.600
+ room will be open. So yeah, Michael and
+
+00:21:44.600 --> 00:21:47.250
+ anyone else who is participating in the Q&A, you're more
+
+00:21:47.250 --> 00:21:49.160
+ than welcome to stay here and continue the
+
+00:21:49.160 --> 00:21:55.160
+ question and answer. Okay. Thank you for this announcement.
+
+00:21:55.160 --> 00:21:59.960
+ Yeah. I would like to keep answering
+
+00:21:59.960 --> 00:22:05.570
+ questions and maybe yeah, until there's no more interest or
+
+00:22:05.570 --> 00:22:08.200
+ I am hungry too, but I don't need a
+
+00:22:08.200 --> 00:22:12.600
+ lunch as I already. Yep. Okay. Sounds great. Yep. So yeah,
+
+00:22:12.600 --> 00:22:14.840
+ the stream will probably be cut off in
+
+00:22:14.840 --> 00:22:17.940
+ about a minute or so, but yeah, this room will be open and
+
+00:22:17.940 --> 00:22:20.040
+ you and others will be able to stay here
+
+00:22:20.040 --> 00:22:25.160
+ and keep asking and answering questions. Okay. Thanks.
+
+00:22:25.160 --> 00:22:29.720
+ Thank you. Then let's go on to the next
+
+00:22:29.720 --> 00:22:48.790
+ question. I just scrolled. I forgot my place. Okay. Could
+
+00:22:48.790 --> 00:22:51.000
+ you use some of the packages with
+
+00:22:51.000 --> 00:22:54.920
+ other Wayland compositors? Probably not all of it's way KDE
+
+00:22:54.920 --> 00:22:57.160
+, Rivergnome. Yes, you can. And thank
+
+00:22:57.160 --> 00:23:01.680
+ you for this idea because I already, I didn't think of this
+
+00:23:01.680 --> 00:23:04.440
+ before. You can use it because you
+
+00:23:04.440 --> 00:23:07.620
+ can talk to them. Like you can talk to Wayland protocols.
+
+00:23:07.620 --> 00:23:09.560
+ You can have a look at them. There's
+
+00:23:09.560 --> 00:23:14.830
+ like the core protocol of Wayland is in the core repository
+
+00:23:14.830 --> 00:23:18.120
+ of the Wayland project. And there's a
+
+00:23:18.120 --> 00:23:21.680
+ Wayland protocols repository. They have like three tier
+
+00:23:21.680 --> 00:23:23.720
+ staging, experimental and stable,
+
+00:23:23.720 --> 00:23:26.900
+ almost nothing in Wayland is stable. So be prepared for
+
+00:23:26.900 --> 00:23:28.920
+ some changes in the future, I think.
+
+00:23:28.920 --> 00:23:35.700
+ And you can talk to these protocols. They are not that
+
+00:23:35.700 --> 00:23:39.800
+ difficult, but some things are already a bit
+
+00:23:39.800 --> 00:23:43.370
+ too complicated. Like you have to take output and then to
+
+00:23:43.370 --> 00:23:45.640
+ get the actual width or something like
+
+00:23:45.640 --> 00:23:49.630
+ this, you have to request another output. And this one
+
+00:23:49.630 --> 00:23:52.600
+ talks to you and the other output says, okay,
+
+00:23:52.600 --> 00:23:55.050
+ I'm done or something like this. Some things are a little
+
+00:23:55.050 --> 00:23:58.680
+ bit difficult, but it's quite readable
+
+00:23:58.680 --> 00:24:03.520
+ and understandable and you can do scripting Sway, but I don
+
+00:24:03.520 --> 00:24:06.120
+'t have a lot of experience there because
+
+00:24:06.120 --> 00:24:11.930
+ like I'm an XWM user. I do it in Emacs. I'm staying on X. I
+
+00:24:11.930 --> 00:24:14.520
+ had Sway several years ago,
+
+00:24:14.520 --> 00:24:18.110
+ but only a short time. So I'm not that knowledgeable. The
+
+00:24:18.110 --> 00:24:20.040
+ next question is,
+
+00:24:20.760 --> 00:24:26.170
+ will Wayland support reach feature parity with XWM in the
+
+00:24:26.170 --> 00:24:29.560
+ future? Will there be other trade-offs?
+
+00:24:29.560 --> 00:24:35.830
+ No, it won't. Okay. But don't think, it's not something
+
+00:24:35.830 --> 00:24:38.760
+ usable because I don't think all the
+
+00:24:38.760 --> 00:24:45.530
+ features in the EXWM is needed. I want to work spaces as I
+
+00:24:45.530 --> 00:24:49.320
+ said in the talk, because yeah,
+
+00:24:49.320 --> 00:24:53.460
+ Emacs does work spaces and I won't do this, but I will do
+
+00:24:53.460 --> 00:24:58.200
+ everything. Like what's my plan with
+
+00:24:58.200 --> 00:25:01.690
+ this thing? It's like the two use cases I already alluded
+
+00:25:01.690 --> 00:25:06.280
+ to in the video. The first is you have a
+
+00:25:06.280 --> 00:25:11.030
+ Wayland surface and you show it inside an Emacs buffer or
+
+00:25:11.030 --> 00:25:13.160
+ an Emacs window. So you have a kind of
+
+00:25:13.160 --> 00:25:22.510
+ Wayland buffer, I'm calling it. That's the thing EXWM does.
+
+00:25:22.510 --> 00:25:26.600
+ And I think, yeah, it should reach
+
+00:25:26.600 --> 00:25:30.710
+ feature parity with it. It also has output management and
+
+00:25:30.710 --> 00:25:32.600
+ like the input handling,
+
+00:25:32.600 --> 00:25:37.700
+ there's like the simulation keys and I don't know what else
+
+00:25:37.700 --> 00:25:41.080
+, but actually I don't have a solution
+
+00:25:41.080 --> 00:25:46.060
+ yet for the input handling. It's a thing I haven't looked
+
+00:25:46.060 --> 00:25:49.480
+ that much into. Will there be other
+
+00:25:49.480 --> 00:25:53.660
+ trade-offs? Yeah, most certainly there are always trade-
+
+00:25:53.660 --> 00:25:56.200
+offs, but I can't tell you which.
+
+00:25:56.200 --> 00:26:00.920
+ So the next question is, what is the biggest difference
+
+00:26:00.920 --> 00:26:01.880
+ between X,
+
+00:26:01.880 --> 00:26:07.000
+ Org and Wayland that you have found? Okay, what's the
+
+00:26:07.000 --> 00:26:10.360
+ biggest difference?
+
+00:26:10.360 --> 00:26:18.970
+ Don't know actually, don't know. First of all, I'm not that
+
+00:26:18.970 --> 00:26:23.320
+ knowledgeable in X, Org. I used it,
+
+00:26:23.320 --> 00:26:28.150
+ but I have no more programs in X Window Manager. I haven't
+
+00:26:28.150 --> 00:26:30.520
+ looked a lot into it, except
+
+00:26:31.400 --> 00:26:37.380
+ WEM, I looked into the code, into Elisp code and how it
+
+00:26:37.380 --> 00:26:39.880
+ does the communication and
+
+00:26:39.880 --> 00:26:46.750
+ took inspiration of course. Yeah, big difference is you don
+
+00:26:46.750 --> 00:26:50.120
+'t have one monolithic server. Like you
+
+00:26:50.120 --> 00:26:54.390
+ have one X, Org server and in Wayland you have lots of
+
+00:26:54.390 --> 00:26:57.800
+ servers like GNOME has one, KDE has one,
+
+00:26:58.760 --> 00:27:02.510
+ then WL roots is another approach, Swae has an
+
+00:27:02.510 --> 00:27:05.480
+ implementation in WL roots and so on.
+
+00:27:05.480 --> 00:27:10.350
+ So now it's the last question I find in my path is, did you
+
+00:27:10.350 --> 00:27:13.880
+ know EAF? Yes, I know. Of course,
+
+00:27:13.880 --> 00:27:17.000
+ like I think we have a talk. We have a talk. We had talks
+
+00:27:17.000 --> 00:27:21.400
+ and I never used it. I'm sorry.
+
+00:27:22.440 --> 00:27:29.400
+ Maybe it's interesting. It's Python. I don't do a lot of
+
+00:27:29.400 --> 00:27:31.640
+ Python and
+
+00:27:31.640 --> 00:27:37.220
+ similar use case. It's like, I think it's embedded X
+
+00:27:37.220 --> 00:27:40.200
+ widgets. Please correct me if I'm wrong.
+
+00:27:40.200 --> 00:27:47.450
+ Yeah, that's all I can say to this topic. But I think like
+
+00:27:47.450 --> 00:27:49.800
+ any application framework,
+
+00:27:49.800 --> 00:27:53.920
+ you can want to do an Emacs or stuff like that will mesh
+
+00:27:53.920 --> 00:27:57.240
+ really good with Emacs compositor that
+
+00:27:57.240 --> 00:28:02.650
+ is integrated or like almost integrated in Emacs because
+
+00:28:02.650 --> 00:28:05.640
+ now you can use this to do your application
+
+00:28:05.640 --> 00:28:10.070
+ framework and paint the windows in Emacs. And I think maybe
+
+00:28:10.070 --> 00:28:12.440
+ we can come back to the reparenting
+
+00:28:12.440 --> 00:28:18.450
+ X thing, which I don't really understand. So I don't know
+
+00:28:18.450 --> 00:28:21.560
+ exactly how X does the X widgets, like
+
+00:28:21.560 --> 00:28:28.190
+ no idea. But I think we can do something similar with Way
+
+00:28:28.190 --> 00:28:31.960
+land. Like we can just embed the little
+
+00:28:31.960 --> 00:28:36.710
+ Wayland surfaces in an Emacs buffer. And that's a thing I
+
+00:28:36.710 --> 00:28:40.440
+ wanted to get a discussion started.
+
+00:28:40.440 --> 00:28:45.950
+ Someone, yeah, maybe someone has an idea. Maybe someone is
+
+00:28:45.950 --> 00:28:49.000
+ already deep down in Emacs internals
+
+00:28:49.000 --> 00:28:54.620
+ and knows how these displays stuff works like image display
+
+00:28:54.620 --> 00:28:57.880
+, X widget display, and so on.
+
+00:28:57.880 --> 00:29:03.290
+ And maybe this person or someone else has an idea how we
+
+00:29:03.290 --> 00:29:05.640
+ could do the Wayland surfaces.
+
+00:29:05.640 --> 00:29:09.280
+ Right now it's just Emacs receives a request for new
+
+00:29:09.280 --> 00:29:13.160
+ surface. Okay. You open a new program.
+
+00:29:13.160 --> 00:29:16.430
+ The program says to the Wayland server, "Hey, I'm here. I
+
+00:29:16.430 --> 00:29:19.480
+ want to have surface." Wayland server
+
+00:29:19.480 --> 00:29:24.750
+ gives it the surface and says to Emacs, "Hey, here's a new
+
+00:29:24.750 --> 00:29:27.880
+ surface. You can lay it out." And
+
+00:29:27.880 --> 00:29:31.080
+ Emacs then can lay it out or not, however it likes.
+
+00:29:31.080 --> 00:29:33.480
+ Normally the default path I choose is
+
+00:29:33.480 --> 00:29:38.490
+ Emacs bundles, the surface with a buffer. And if the buffer
+
+00:29:38.490 --> 00:29:40.600
+ is shown, it shows the surface.
+
+00:29:40.600 --> 00:29:43.690
+ And otherwise it's just hidden. But you can do whatever you
+
+00:29:43.690 --> 00:29:45.800
+ want with the surface. You just
+
+00:29:45.800 --> 00:29:49.050
+ have to say, please put it at this coordinate and this
+
+00:29:49.050 --> 00:29:52.280
+ width and this height. So you can put it in
+
+00:29:52.280 --> 00:29:54.980
+ a buffer and you can scroll it in a buffer. But this
+
+00:29:54.980 --> 00:29:57.560
+ integration, how to put something in a buffer
+
+00:29:57.560 --> 00:30:00.060
+ and scroll it there. I don't know how to do it. And I don't
+
+00:30:00.060 --> 00:30:02.920
+ know how to do it. It should be like
+
+00:30:02.920 --> 00:30:06.070
+ a good solution. I don't know how to do it. Maybe someone
+
+00:30:06.070 --> 00:30:10.040
+ of you has an idea. I'm finished with the
+
+00:30:10.040 --> 00:30:17.190
+ questions of the path. I haven't had a look in IRC because
+
+00:30:17.190 --> 00:30:20.600
+ yes, I was busy talking.
+
+00:30:20.600 --> 00:30:27.910
+ I can either like browse through the IRC if you want, or
+
+00:30:27.910 --> 00:30:31.480
+ maybe someone wants to say something or
+
+00:30:31.480 --> 00:30:36.410
+ have a look. Ah, thank you. I already answered the IRC
+
+00:30:36.410 --> 00:30:39.880
+ questions. So yes, I'm finished.
+
+00:30:39.880 --> 00:30:47.720
+ I still see some people in the room. Yeah. Maybe someone,
+
+00:30:47.720 --> 00:30:49.880
+ if you have an idea or wants to use it.
+
+00:30:49.880 --> 00:30:58.330
+ I don't know how fast I will have it in a usable state. It
+
+00:30:58.330 --> 00:30:58.840
+'s like,
+
+00:31:01.080 --> 00:31:05.200
+ at first I just wanted to do this presentation and show to
+
+00:31:05.200 --> 00:31:09.400
+ you the possibility. I already read
+
+00:31:09.400 --> 00:31:13.400
+ in the internet some places like Emacs, Devel, Mailindus
+
+00:31:13.400 --> 00:31:16.120
+ that was one time and other places that
+
+00:31:16.120 --> 00:31:20.080
+ other people's had the same, other person had the same
+
+00:31:20.080 --> 00:31:25.800
+ ideas. But I was thinking just to lay out
+
+00:31:25.800 --> 00:31:29.740
+ the general idea to you. And then I thought, okay, do an
+
+00:31:29.740 --> 00:31:32.200
+ experiment, show if it works. And the
+
+00:31:32.200 --> 00:31:35.870
+ experiments spun a little bit. It worked. And so I got
+
+00:31:35.870 --> 00:31:40.520
+ further and now I have an almost usable thing,
+
+00:31:40.520 --> 00:31:46.990
+ but I already spent like a month with it. So we'll take
+
+00:31:46.990 --> 00:31:49.640
+ some more time to finish.
+
+00:31:52.840 --> 00:31:59.040
+ Yeah. Thanks that you think, Gary, that you think it's, you
+
+00:31:59.040 --> 00:32:03.800
+ are happy to test it. Thank you.
+
+00:32:03.800 --> 00:32:08.870
+ I would like to have it like a little bit more flexible
+
+00:32:08.870 --> 00:32:11.240
+ than the X solutions, because
+
+00:32:11.240 --> 00:32:16.880
+ as I told you can have it nested, like you have a normal Em
+
+00:32:16.880 --> 00:32:20.760
+acs and you can just do the embedding
+
+00:32:20.760 --> 00:32:24.710
+ and the embedded surfaces. And so in a normal Emacs and you
+
+00:32:24.710 --> 00:32:27.400
+ don't have to give Emacs the whole
+
+00:32:27.400 --> 00:32:35.080
+ desktop. So you don't have to do XWM. You can just have a
+
+00:32:35.080 --> 00:32:39.080
+ normal Emacs window and have all the goodies
+
+00:32:39.080 --> 00:32:45.770
+ and features there. Okay. Again, the code will be available
+
+00:32:45.770 --> 00:32:49.080
+ on my site. I can post you the link,
+
+00:32:49.080 --> 00:32:54.330
+ but there's nothing there yet. Oh, wait a few days. I was
+
+00:32:54.330 --> 00:32:57.480
+ thinking of doing it this weekend,
+
+00:32:57.480 --> 00:33:03.190
+ but it's EmacsConf and I want to listen to your ideas and
+
+00:33:03.190 --> 00:33:06.360
+ participate and don't do coding instead.
+
+00:33:06.360 --> 00:33:15.080
+ This is the link. I could put it on another code forge, but
+
+00:33:15.080 --> 00:33:18.120
+ I want to do something
+
+00:33:19.880 --> 00:33:19.880
+
+
+00:33:19.880 --> 00:33:26.340
+ myself instead. I have a landing page. If I put it in my
+
+00:33:26.340 --> 00:33:29.320
+ browser, it's just,
+
+00:33:29.320 --> 00:33:35.840
+ yeah, no connection possible. It's not configured. It's
+
+00:33:35.840 --> 00:33:39.080
+ just bought, wait a few days.
+
+00:33:42.120 --> 00:33:46.520
+ Okay. Short question for the room. Does anyone know someone
+
+00:33:46.520 --> 00:33:48.280
+ else working on stuff like this?
+
+00:33:48.280 --> 00:34:05.250
+ Because if, please let them know so we can team up and don
+
+00:34:05.250 --> 00:34:06.840
+'t do it twice.
+
+00:34:11.800 --> 00:34:14.440
+ I had a lot of fun with the Emacs part of the code. I like
+
+00:34:14.440 --> 00:34:17.640
+ coding in Elisp in general,
+
+00:34:17.640 --> 00:34:22.480
+ but it's not that much fun to work on the C side. It's
+
+00:34:22.480 --> 00:34:26.520
+ complex and prone to break.
+
+00:34:26.520 --> 00:34:32.360
+ So don't mind collaborating.
+
+00:34:41.560 --> 00:34:45.960
+ Why the sad face?
+
+00:34:45.960 --> 00:34:56.920
+ Yes, I know the lack of active development.
+
+00:35:02.920 --> 00:35:09.400
+ Okay. Because yeah, so no problem. You can't know anyone or
+
+00:35:09.400 --> 00:35:10.120
+ a lot of,
+
+00:35:10.120 --> 00:35:15.280
+ like, it's a good thing. So I got to start it and I wanted
+
+00:35:15.280 --> 00:35:16.200
+ to start,
+
+00:35:16.200 --> 00:35:24.260
+ you know, people quitting the XW. I don't have problems yet
+
+00:35:24.260 --> 00:35:26.120
+. It's not that I started
+
+00:35:26.120 --> 00:35:28.720
+ implementing this because I thought, ah, it's not working
+
+00:35:28.720 --> 00:35:30.840
+ anymore. I need something new. It's like,
+
+00:35:30.840 --> 00:35:37.680
+ it's works fine. I just did it because I thought, well, why
+
+00:35:37.680 --> 00:35:39.720
+ not do something new? And because it
+
+00:35:39.720 --> 00:35:45.180
+ opens new possibilities, which weren't there before, or at
+
+00:35:45.180 --> 00:35:47.320
+ least I didn't know of them.
+
+00:35:47.320 --> 00:35:58.920
+ Okay. How could I put this? Okay. If it's ready for no, as
+
+00:35:58.920 --> 00:36:00.440
+ I will promote it. If it's
+
+00:36:00.440 --> 00:36:06.030
+ ready for normal usement, like you can just install it and
+
+00:36:06.030 --> 00:36:09.480
+ use it for an everyday driver
+
+00:36:09.480 --> 00:36:12.150
+ and have you do it. You would X session file and can just
+
+00:36:12.150 --> 00:36:14.840
+ start it up. It won't be an X session
+
+00:36:14.840 --> 00:36:18.660
+ file because that's X and that's a thing of the past and,
+
+00:36:18.660 --> 00:36:20.200
+ but something similar.
+
+00:36:20.200 --> 00:36:26.320
+ I could imagine posting, like, I don't know, he makes lists
+
+00:36:26.320 --> 00:36:28.280
+, Reddit, something like this, but
+
+00:36:29.160 --> 00:36:33.240
+ until then, like the code I will release now, it's just
+
+00:36:33.240 --> 00:36:34.200
+ experimental and
+
+00:36:34.200 --> 00:36:41.710
+ it's for the people who want to get involved and, or want
+
+00:36:41.710 --> 00:36:43.320
+ to do their own thing with it,
+
+00:36:43.320 --> 00:36:48.130
+ use the client to automate sway or so for them. It's really
+
+00:36:48.130 --> 00:36:49.640
+ interesting.
+
+00:36:50.200 --> 00:36:50.200
+
+
+00:36:50.200 --> 00:37:00.200
+ [inaudible]
+
+00:37:00.200 --> 00:37:02.760
+ Yes, I know. Like you,
+
+00:37:02.760 --> 00:42:20.290
+ okay, this sway.el, I have to look at it, but I don't think
+
+00:42:20.290 --> 00:37:15.000
+ now is a good idea.
+
+00:37:17.160 --> 00:37:21.680
+ Maybe something useful there. Thank you, PlasmaStrike and G
+
+00:37:21.680 --> 00:37:22.520
+argiola.
+
+00:37:22.520 --> 00:37:28.450
+ Yes, people are moving and Valent is the future. That's the
+
+00:37:28.450 --> 00:37:30.680
+ point I wanted to say. Like, I think
+
+00:37:30.680 --> 00:37:36.840
+ you can stay on X, like in the future, but it's not gonna
+
+00:37:36.840 --> 00:37:38.760
+ get that much development and
+
+00:37:38.760 --> 00:37:42.520
+ sooner or later, like there will be new features and you
+
+00:37:42.520 --> 00:37:44.200
+ won't have it in the old one and stuff
+
+00:37:44.200 --> 00:37:48.690
+ like that. And for Emacs to be viable as a window manager
+
+00:37:48.690 --> 00:37:51.560
+ in this whole computing environment, or as
+
+00:37:51.560 --> 00:37:56.810
+ I said, a Lispy Linux desktop, I think it needs to have
+
+00:37:56.810 --> 00:37:59.000
+ this Valent capability and
+
+00:37:59.000 --> 00:38:08.680
+ that's the way for it to get it.
+
+00:38:09.960 --> 00:38:09.960
+
+
+00:38:09.960 --> 00:38:21.960
+ [inaudible]
+
+00:38:21.960 --> 00:38:28.510
+ I'm just reading the IRC log and someone wrote, I was
+
+00:38:28.510 --> 00:38:32.600
+ amazed to see the video inside Emacs.
+
+00:38:32.600 --> 00:38:44.280
+ Thank you. That was meant to be amazing. Yeah, thank you.
+
+00:38:45.560 --> 00:38:45.560
+
+
+00:38:45.560 --> 00:38:45.640
+ [inaudible]
+
+00:38:46.920 --> 00:38:46.920
+
+
+00:38:46.920 --> 00:38:47.000
+ [inaudible]
+
+00:38:48.280 --> 00:38:48.280
+
+
+00:38:48.280 --> 00:38:48.360
+ [inaudible]
+
+00:38:49.640 --> 00:38:49.640
+
+
+00:38:49.640 --> 00:38:49.720
+ [inaudible]
+
+00:38:51.000 --> 00:38:51.000
+
+
+00:38:51.000 --> 00:38:51.080
+ [inaudible]
+
+00:38:52.080 --> 00:38:52.240
+ [inaudible]
+
+00:38:52.240 --> 00:38:52.400
+ [inaudible]
+
+00:38:52.400 --> 00:38:52.480
+ [inaudible]
+
+00:38:52.480 --> 00:38:52.640
+ [inaudible]
+
+00:38:52.640 --> 00:38:52.720
+ [inaudible]
+
+00:38:52.720 --> 00:38:52.800
+ [inaudible]
+
+00:38:52.800 --> 00:38:52.880
+ [inaudible]
+
+00:38:52.880 --> 00:38:52.960
+ [inaudible]
+
+00:38:52.960 --> 00:38:53.040
+ [inaudible]
+
+00:38:53.040 --> 00:38:53.120
+ [inaudible]
+
+00:38:53.120 --> 00:38:53.200
+ [inaudible]
+
+00:38:53.200 --> 00:38:53.200
+ [inaudible]
+
+00:38:53.200 --> 00:38:53.280
+ [inaudible]
+
+00:38:53.280 --> 00:38:53.360
+ [inaudible]
+
+00:38:53.360 --> 00:38:53.440
+ [inaudible]
+
+00:38:53.440 --> 00:38:53.520
+ [inaudible]
+
+00:38:53.520 --> 00:38:53.600
+ [inaudible]
+
+00:38:53.600 --> 00:38:53.680
+ [inaudible]
+
+00:38:53.680 --> 00:38:53.760
+ [inaudible]
+
+00:38:53.760 --> 00:38:53.840
+ [inaudible]
+
+00:38:53.840 --> 00:38:53.920
+ [inaudible]
+
+00:38:53.920 --> 00:38:54.000
+ [inaudible]
+
+00:38:54.000 --> 00:38:54.080
+ [inaudible]
+
+00:38:54.080 --> 00:38:54.160
+ [inaudible]
+
+00:38:54.160 --> 00:38:54.160
+ [inaudible]
+
+00:38:54.160 --> 00:38:54.240
+ [inaudible]
+
+00:38:54.240 --> 00:38:54.240
+ [inaudible]
+
+00:38:54.240 --> 00:38:54.320
+ [inaudible]
+
+00:38:54.320 --> 00:38:54.400
+ [inaudible]
+
+00:38:54.400 --> 00:38:54.480
+ [inaudible]
+
+00:38:54.480 --> 00:38:54.560
+ [inaudible]
+
+00:38:54.560 --> 00:38:54.640
+ [inaudible]
+
+00:38:54.640 --> 00:38:54.640
+ [inaudible]
+
+00:38:54.640 --> 00:38:54.720
+ [inaudible]
+
+00:38:54.720 --> 00:38:54.720
+ [inaudible]
+
+00:38:54.720 --> 00:38:54.800
+ [inaudible]
+
+00:38:54.800 --> 00:38:54.880
+ [inaudible]
+
+00:38:54.880 --> 00:38:54.960
+ [inaudible]
+
+00:38:54.960 --> 00:38:55.040
+ [inaudible]
+
+00:38:55.040 --> 00:38:55.120
+ [inaudible]
+
+00:38:55.120 --> 00:39:20.000
+ [inaudible]
+
+00:39:20.000 --> 00:39:20.080
+ [inaudible]
+
+00:39:20.080 --> 00:39:20.160
+ [inaudible]
+
+00:39:20.160 --> 00:39:20.240
+ [inaudible]
+
+00:39:20.800 --> 00:39:20.800
+
+
+00:39:20.800 --> 00:39:25.920
+ Okay, Emax could already do. I'm just reading the IRC
+
+00:39:25.920 --> 00:39:46.400
+ because I don't know what else to say right now.
+
+00:39:46.400 --> 00:39:57.040
+ [inaudible]
+
+00:39:57.040 --> 00:40:00.880
+ Yeah, it's nice to see so many people saying thank you and
+
+00:40:00.880 --> 00:40:07.600
+ at least I read it like two times now. So yeah, I'm pleased
+
+00:40:07.600 --> 00:40:10.160
+ to see this and the interest in
+
+00:40:10.160 --> 00:40:16.400
+ gender.
+
+00:40:16.400 --> 00:40:26.640
+ [inaudible]
+
+00:40:26.640 --> 00:40:38.640
+ [inaudible]
+
+00:40:38.640 --> 00:40:49.370
+ Okay, I see there's still some people typing and it's a lot
+
+00:40:49.370 --> 00:40:52.240
+ of more thank yous and yeah,
+
+00:40:52.240 --> 00:41:00.980
+ thank you. I'm pleased and I will publish stuff like if it
+
+00:41:00.980 --> 00:41:06.320
+'s usable. I want to use it myself,
+
+00:41:06.320 --> 00:41:13.410
+ so if you're in luck, you can use it too. And let's see, I
+
+00:41:13.410 --> 00:41:18.160
+ think I wrap up this Q&A here and
+
+00:41:18.160 --> 00:41:22.780
+ yeah, thank you for the discussion, for your questions and
+
+00:41:22.780 --> 00:41:27.280
+ your interest and have a nice rest
+
+00:41:27.280 --> 00:41:48.950
+ of EmaxConf. Yeah, bye. I'm just going to leave the room or
+
+00:41:48.950 --> 00:41:51.760
+ microphone or go back to EmaxConf.
+
+00:41:55.360 --> 00:41:56.480
+ Sounds good. Thanks again.
+
+00:41:56.480 --> 00:42:00.320
+ Ah, you're still there.
+
+00:42:00.320 --> 00:42:03.760
+ Hey, yeah, I just got back for a second.
+
+00:42:03.760 --> 00:42:05.380
+ Okay.
+
+00:42:05.380 --> 00:42:08.960
+ Yeah, just wanted to say thanks for the great talk and I'll
+
+00:42:08.960 --> 00:42:10.720
+ definitely be watching it and the Q&A.
+
+00:42:10.720 --> 00:42:13.280
+ And yeah, it's very exciting stuff.
+
+00:42:13.280 --> 00:42:17.350
+ Yeah, thank you. I got the feedback now. It's exciting. I
+
+00:42:17.350 --> 00:42:20.400
+ think so too. So yeah,
+
+00:42:20.400 --> 00:42:24.160
+ have a nice time at EmaxConf and see you next time. Bye.
+
+00:42:24.160 --> 00:42:27.920
+ Thank you. You as well. See you around. Bye.
+
+00:42:27.920 --> 00:42:28.420
+ Bye.
+
+00:42:30.420 --> 00:42:30.420
+
+
+00:42:30.420 --> 00:42:30.920
+ Bye.
+
+00:42:32.920 --> 00:42:32.920
+
+
+00:42:32.920 --> 00:42:33.420
+ Bye.
+
+00:42:35.420 --> 00:42:35.420
+
+
+00:42:35.420 --> 00:42:35.920
+ Bye.
+
+00:42:37.920 --> 00:42:37.920
+
+
+00:42:37.920 --> 00:42:38.420
+ Bye.
+
+00:42:38.420 --> 00:42:46.420
+ Bye.
+
diff --git a/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt b/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt
new file mode 100644
index 00000000..34eeb842
--- /dev/null
+++ b/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt
@@ -0,0 +1,471 @@
+WEBVTT captioned by bhavin192
+
+NOTE Introduction
+
+00:00.000 --> 00:08.000
+Hello EmacsConf and hello fellow Emacs fans.
+
+00:08.000 --> 00:10.920
+My name is Michael Bauer, and I'm from Germany.
+
+00:10.920 --> 00:00:13.440
+I'm gonna talk to you about "Why and how Emacs
+
+00:00:13.440 --> 00:00:17.200
+should become a Wayland compositor."
+
+00:17.200 --> 00:21.740
+And it already kinda is a Wayland compositor.
+
+00:21.740 --> 00:25.000
+This talk is composed by Wayland and Emacs.
+
+00:25.000 --> 00:00:26.840
+If I'm talking about a Wayland compositor
+
+00:00:26.840 --> 00:00:29.360
+or Emacs as Wayland compositor,
+
+00:00:29.360 --> 00:00:30.440
+I mean it in the sense that
+
+00:00:30.440 --> 00:00:36.000
+EXWM is an X window manager. I hope you know EXWM.
+
+NOTE Why
+
+00:36.000 --> 00:41.000
+So, why?
+
+00:41.000 --> 00:00:44.120
+Emacs can do Wayland now, that was a stopper
+
+00:00:44.120 --> 00:00:49.000
+before, and now it's solved with `pgtk` branch.
+
+00:49.000 --> 00:00:53.240
+It makes the Emacs toolbox bigger,
+
+00:00:53.240 --> 00:00:55.000
+which is always a good thing.
+
+00:55.000 --> 00:00:58.440
+And the cool thing about Wayland, which is not
+
+00:00:58.440 --> 00:01:02.280
+possible under X is, it can run standalone
+
+00:01:02.280 --> 00:01:06.840
+on the Linux kernel interface, or nested under X,
+
+00:01:06.840 --> 00:01:07.120
+or even nested under Wayland.
+
+01:09.000 --> 00:01:13.840
+The compositor features of Emacs doesn't mean
+
+00:01:13.840 --> 00:01:16.960
+it has to take over the whole output.
+
+00:01:16.960 --> 00:01:20.560
+It can use them, even if it's just like
+
+00:01:20.560 --> 00:01:23.080
+a normal window or normal program.
+
+01:23.000 --> 00:01:25.120
+And last reason is,
+
+00:01:25.120 --> 00:01:27.240
+I want to keep living inside Emacs
+
+00:01:27.240 --> 00:01:31.000
+and Wayland is the future, apparently.
+
+NOTE EXWM use case
+
+01:31.000 --> 01:35.000
+EXWM use case is the first use case.
+
+01:35.000 --> 00:01:38.400
+You take a Wayland surface and put it inside
+
+00:01:38.400 --> 00:01:41.520
+an Emacs window. You see it right below.
+
+00:01:41.520 --> 00:01:45.880
+The video of me is a Wayland surface,
+
+00:01:45.880 --> 00:01:50.000
+and it's inside an Emacs window managed by Emacs.
+
+01:50.000 --> 00:01:53.480
+Emacs does the input, and the clipboard handling,
+
+00:01:53.480 --> 00:01:59.000
+and can insert itself here, and do great things.
+
+01:59.000 --> 00:02:03.200
+And it's a possibility to Lispify the Linux desktop,
+
+00:02:03.200 --> 00:02:08.000
+as Emacs Lispifies the command line.
+
+NOTE XWidget use case
+
+02:08.000 --> 00:02:12.960
+The other use case is the XWidget use case.
+
+00:02:12.960 --> 00:02:17.000
+I don't know if you know XWidgets.
+
+02:17.000 --> 00:02:19.720
+It's embedded X windows inside Emacs.
+
+00:02:19.720 --> 00:02:24.000
+There's a web browser available in Emacs.
+
+02:24.000 --> 00:02:27.520
+With Wayland, you could embed anything that can
+
+00:02:27.520 --> 00:02:32.000
+create a Wayland surface like video, web, or 3D.
+
+02:32.000 --> 00:02:34.880
+Think OpenGL, something like
+
+00:02:34.880 --> 00:02:38.000
+EmacsGL would be possible.
+
+02:38.000 --> 02:46.000
+And we wouldn't have just images like we have so far.
+
+NOTE How
+
+02:46.000 --> 00:02:50.560
+So, how to implement this Wayland compositor?
+
+00:02:50.560 --> 00:02:52.560
+I'm going to tell you how I did it,
+
+00:02:52.560 --> 00:02:57.000
+or I did this demo I'm showing you right now.
+
+02:57.000 --> 00:03:00.680
+First of all, how does Wayland work?
+
+00:03:00.680 --> 00:03:04.000
+Wayland is a protocol in XML.
+
+03:04.000 --> 00:03:11.120
+It's a server and client, and they share a set of
+
+00:03:11.120 --> 00:03:13.960
+objects, and the objects have methods.
+
+00:03:13.960 --> 00:03:16.120
+They are specified in the protocol,
+
+00:03:16.120 --> 00:03:24.080
+and Wayland also says how the server
+
+00:03:24.080 --> 00:03:25.720
+and client talk to each other.
+
+00:03:25.720 --> 00:03:33.440
+First blocker for Emacs becoming a Wayland
+
+00:03:33.440 --> 00:03:37.000
+compositor is that Emacs and Wayland both have
+
+00:03:37.000 --> 00:03:41.880
+their own event loop, and you can't merge them too.
+
+00:03:41.880 --> 00:03:45.800
+But you don't have to merge them
+
+00:03:45.800 --> 00:03:48.000
+because you can just make Emacs speak Wayland.
+
+03:48.000 --> 00:03:50.040
+So, Emacs becomes a Wayland client,
+
+00:03:50.040 --> 00:03:53.000
+and there's an extra server Emacs is talking to.
+
+03:53.000 --> 00:03:59.160
+So, we need a minimal Wayland server that does all
+
+00:03:59.160 --> 00:04:03.000
+the stuff Emacs can't do and do the rest in Emacs.
+
+04:03.000 --> 00:04:07.800
+---The minimal Wayland server, I did it in wlroots.
+
+00:04:07.800 --> 00:04:13.040
+That's the library behind Sway. I think it's
+
+00:04:13.040 --> 00:04:20.000
+the Wayland library to do stuff like this.
+
+04:20.000 --> 04:26.000
+I implemented four different things to make it work.
+
+04:26.000 --> 00:04:30.680
+It's these three letter acronyms on the left.
+
+00:04:30.680 --> 00:04:34.520
+It's Emacs, Wayland, and then it's a server,
+
+00:04:34.520 --> 00:04:38.000
+a client, a protocol, and buffers.
+
+04:38.000 --> 04:44.000
+The server is written in C and it's mostly tinywl.
+
+04:44.000 --> 00:04:46.280
+It's the example of wlroots,
+
+00:04:46.280 --> 00:04:52.000
+and it's around 1000 lines of code.
+
+04:52.000 --> 00:04:54.960
+ewc, the Wayland client in Emacs,
+
+00:04:54.960 --> 00:04:58.560
+is the thing I'm most proud of.
+
+00:04:58.560 --> 00:05:02.120
+It's 300 lines of code, and it is a
+
+00:05:02.120 --> 00:05:08.000
+fully featured Wayland client in Emacs.
+
+05:08.000 --> 00:05:11.640
+With this, Emacs can speak Wayland,
+
+00:05:11.640 --> 00:05:18.000
+and then I implemented Emacs Wayland protocol.
+
+05:18.000 --> 00:05:21.280
+It more or less allows Emacs to become a Wayland
+
+00:05:21.280 --> 00:05:24.640
+window manager, so it's not actually the compositor.
+
+00:05:24.640 --> 00:05:27.680
+The compositor stays in C, but Emacs is
+
+00:05:27.680 --> 00:05:31.000
+now a Wayland window manager!
+
+05:31.000 --> 00:05:34.520
+And the last thing is Emacs Wayland buffers.
+
+00:05:34.520 --> 00:05:35.880
+It's the window manager part.
+
+00:05:35.880 --> 00:05:38.440
+It's around 500 lines of code,
+
+00:05:38.440 --> 00:05:41.680
+and it does the buffer management inside
+
+00:05:41.680 --> 00:05:45.680
+Emacs windows, or floating right like you see me
+
+00:05:45.680 --> 00:05:48.000
+now floating on the right.
+
+05:48.000 --> 00:05:51.000
+It works, but it is still buggy,
+
+00:05:51.000 --> 00:05:54.320
+and it is also missing input handling,
+
+00:05:54.320 --> 00:06:01.000
+so there's more code to come for this to work.
+
+NOTE Caveats
+
+06:01.000 --> 06:05.000
+Some caveats about this approach.
+
+06:05.000 --> 00:06:09.640
+wlroots is around 60 kilo LoCs (Line of Code)
+
+00:06:09.640 --> 00:06:12.000
+and in active development.
+
+06:12.000 --> 00:06:16.640
+They have like a slogan 60 kilo locs of code
+
+00:06:16.640 --> 00:06:19.760
+you had to write anyway to make a Wayland
+
+00:06:19.760 --> 00:06:22.520
+compositor. And no, you don't have to write it.
+
+00:06:22.520 --> 00:06:25.840
+But I still remember when it was like 50 kilo locs,
+
+00:06:25.840 --> 00:06:29.680
+and now it's 60. And it's like a moving target.
+
+00:06:29.680 --> 00:06:32.480
+I think it could be quite a lot of work
+
+00:06:32.480 --> 00:06:34.000
+to keep up with it.
+
+06:34.000 --> 06:41.000
+Yeah, it could be quite a bit of work.
+
+06:41.000 --> 06:46.000
+Some windows don't like to keep the aspect ratios.
+
+06:46.000 --> 00:06:49.560
+You tell them and you have to crop them.
+
+00:06:49.560 --> 00:06:53.000
+And the interface I use in wlroots for doing this,
+
+06:53.000 --> 00:06:57.280
+`wlr_scene`, can't do cropping yet,
+
+00:06:57.280 --> 00:07:01.000
+so this doesn't work.
+
+07:01.000 --> 00:07:03.240
+Another problem is with GTK.
+
+00:07:03.240 --> 00:07:03.280
+Once Wayland is enabled and it stays on.
+
+07:11.000 --> 00:07:12.560
+This doesn't make sense.
+
+00:07:12.560 --> 00:07:15.000
+Okay, if you kill the Wayland server,
+
+00:07:15.000 --> 00:07:18.000
+GTK kills Emacs, that's not a good thing.
+
+07:18.000 --> 00:07:21.000
+And it's still a bit of work and fussing needed
+
+00:07:21.000 --> 00:07:23.640
+to get this to work reliably.
+
+00:07:23.640 --> 00:07:26.000
+It's quite buggy right now.
+
+NOTE Call to action
+
+07:26.000 --> 07:30.000
+And that brings me to my call to action.
+
+07:30.000 --> 00:07:34.440
+I think making Emacs Wayland capable is
+
+00:07:34.440 --> 00:07:39.000
+a further step to make an Emacs OS.
+
+07:39.000 --> 00:07:41.360
+It gains output and input handling.
+
+00:07:41.360 --> 00:07:44.120
+Output handling is already there,
+
+00:07:44.120 --> 00:07:45.760
+input handling is still missing,
+
+00:07:45.760 --> 00:07:49.720
+but Emacs can manage monitors, outputs,
+
+00:07:49.720 --> 00:07:53.040
+different frames if it's like nested,
+
+00:07:53.040 --> 00:07:57.080
+And inputs, keyboards, simulation keys,
+
+00:07:57.080 --> 00:07:58.000
+stuff like that.
+
+07:58.000 --> 08:02.000
+We could use it in more ways for Emacs display, maybe.
+
+08:02.000 --> 00:08:05.720
+Wayland just manages simple pixel buffers,
+
+00:08:05.720 --> 00:08:09.000
+so it's a protocol for managing pixel buffers.
+
+08:09.000 --> 00:08:12.560
+And in a sense, we could go back to
+
+00:08:12.560 --> 00:08:15.560
+the old X ways and maybe even ditch GTK.
+
+00:08:15.560 --> 00:08:18.000
+I don't know, but why need it?
+
+08:18.000 --> 00:08:20.600
+We can composite without it.
+
+00:08:20.600 --> 00:08:27.000
+Let's make buffer menus, buffer world, buffer.
+
+08:27.000 --> 00:08:29.040
+Emacs Wayland protocol, like I did it,
+
+00:08:29.040 --> 00:08:34.040
+allows a very concise design, and it allows
+
+00:08:34.040 --> 00:08:38.000
+to improve on the EXWM code base.
+
+08:38.000 --> 00:08:41.840
+And I wrote KISS style because EXWM has
+
+00:08:41.840 --> 00:08:45.000
+workspace management integrated.
+
+08:45.000 --> 00:08:50.600
+I don't think that's needed, like Emacs does it.
+
+00:08:50.600 --> 00:08:53.640
+Why do you have to do something extra?
+
+00:08:53.640 --> 00:08:56.000
+So why do it?
+
+08:56.000 --> 00:09:00.040
+To finish the call to action,
+
+00:09:00.040 --> 00:09:03.280
+if this is the thing you want to see in Emacs,
+
+00:09:03.280 --> 00:09:06.600
+maybe you want to get involved, have some ideas,
+
+00:09:06.600 --> 00:09:10.000
+so we could discuss it.
+
+09:10.000 --> 00:09:14.960
+I'm looking forward to discuss with you
+
+00:09:14.960 --> 00:09:21.000
+and hear your questions and ideas.
+
+09:21.000 --> 00:09:24.200
+I want to say a big thank you to the
+
+00:09:24.200 --> 00:09:26.600
+organizers of EmacsConf and the other speakers
+
+00:09:26.600 --> 00:09:29.000
+for making this event possible.
+
+09:29.000 --> 09:39.000
+Thank you, and see you.
diff --git a/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt
new file mode 100644
index 00000000..e26d08e8
--- /dev/null
+++ b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt
@@ -0,0 +1,23 @@
+WEBVTT captioned by Sebastian
+
+
+00:00:00.000 --> 00:01:23.674
+Introduction
+
+00:01:23.774 --> 00:02:38.882
+Q1 - Does it become unwieldy due to the interaction of the edit org-source to use org-mode and the virtual linear programming as the project becomes larger?
+
+00:02:38.982 --> 00:03:16.080
+Q2 - I want to take a look at the files used in your demo, are they somewhere online?
+
+00:03:16.080 --> 00:04:54.960
+Digression - some explanations about the background dinosaur :D
+
+00:04:54.960 --> 00:05:49.640
+Information about org-entry-get
+
+00:05:49.640 --> 00:13:32.960
+Are workflows as they are in your life closely tied to particular projects or are they general workflows? - Long discussion about the workflow!
+
+00:13:32.960 --> 00:17:54.440
+Wrapping up
diff --git a/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.vtt b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.vtt
new file mode 100644
index 00000000..407cc711
--- /dev/null
+++ b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.vtt
@@ -0,0 +1,893 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:03.760
+ Okay, hi everyone. Yeah, sorry George, I'm just going to
+
+00:00:03.760 --> 00:00:06.520
+ introduce you a little bit.
+
+00:00:06.520 --> 00:00:10.500
+ For context, generally when I arrive on a BBB room, I have
+
+00:00:10.500 --> 00:00:11.880
+ a little bit of time to chat
+
+00:00:11.880 --> 00:00:14.810
+ with the speaker, but right now I made it right on time and
+
+00:00:14.810 --> 00:00:16.040
+ I barely had time to say
+
+00:00:16.040 --> 00:00:19.190
+ hi to George, but I will do it live. Hi George, how are you
+
+00:00:19.190 --> 00:00:19.720
+ doing?
+
+00:00:19.720 --> 00:00:26.330
+ Hello! No, doing well. I do think some of the content in
+
+00:00:26.330 --> 00:00:28.520
+ the etherpad got overridden.
+
+00:00:28.520 --> 00:00:33.520
+ Like I was typing out a whole bunch of different stuff with
+
+00:00:33.520 --> 00:00:36.320
+ other workflows to develop, but
+
+00:00:36.320 --> 00:00:40.330
+ I will try to find where that went. Yeah, so George,
+
+00:00:40.330 --> 00:00:41.640
+ nothing is lost. Don't worry
+
+00:00:41.640 --> 00:00:47.260
+ about this, we will get it back to you. I believe it's my
+
+00:00:47.260 --> 00:00:49.760
+ fault. I looked at the pad
+
+00:00:49.760 --> 00:00:51.920
+ and I said, "Oh, this is not a question, this is a pad."
+
+00:00:51.920 --> 00:00:53.800
+ And I think one of my Helvan
+
+00:00:53.800 --> 00:00:56.060
+ helps in the background said, "Oh yeah, I'm just going to
+
+00:00:56.060 --> 00:00:57.400
+ wipe this all out." But don't
+
+00:00:57.400 --> 00:01:00.360
+ worry, it's still in the history and we'll be able to find
+
+00:01:00.360 --> 00:01:01.600
+ all the code you had.
+
+00:01:01.600 --> 00:01:07.310
+ Cool, we'll find it. Yeah, so... So George, I'm just going
+
+00:01:07.310 --> 00:01:08.240
+ to... Sorry, this
+
+00:01:08.240 --> 00:01:11.940
+ is my task, to give you some context otherwise. Do you have
+
+00:01:11.940 --> 00:01:13.840
+ the pad open in front of you?
+
+00:01:13.840 --> 00:01:18.030
+ I do, yeah. I have the pad open. Would you be able to take
+
+00:01:18.030 --> 00:01:19.000
+ questions from there?
+
+00:01:19.000 --> 00:01:23.630
+ Yeah, so we can take questions from here. I think we've
+
+00:01:23.630 --> 00:01:26.240
+ already answered a bunch. So
+
+00:01:26.240 --> 00:01:30.060
+ one of the ones that's in there right now is, "Does it
+
+00:01:30.060 --> 00:01:32.720
+ become unwieldy due to the indirection
+
+00:01:32.720 --> 00:01:36.000
+ of the edit org source to use org mode and the virtual
+
+00:01:36.000 --> 00:01:37.880
+ linear programming as the project
+
+00:01:37.880 --> 00:01:44.250
+ becomes larger?" It can. So I generally use it for... I
+
+00:01:44.250 --> 00:01:47.160
+ find parts of the project that
+
+00:01:47.160 --> 00:01:53.390
+ are more useful for it and to be dropping in. So like on a
+
+00:01:53.390 --> 00:01:56.400
+ large project, when I'm working
+
+00:01:56.400 --> 00:02:01.200
+ with other people, I do not use it as much because you need
+
+00:02:01.200 --> 00:02:03.680
+ to actually be able to modify
+
+00:02:03.680 --> 00:02:08.480
+ the code. However, I just recently found out about a
+
+00:02:08.480 --> 00:02:11.160
+ feature called detangle, which is
+
+00:02:11.160 --> 00:02:15.060
+ the inverse of the tangle where as long as there's certain
+
+00:02:15.060 --> 00:02:17.120
+ tokens emitted into your file,
+
+00:02:17.120 --> 00:02:20.110
+ you'll be able to take the file and re-update back into the
+
+00:02:20.110 --> 00:02:21.960
+ linear programming document,
+
+00:02:21.960 --> 00:02:24.840
+ which is kind of mind-blowing as a feature. I have not had
+
+00:02:24.840 --> 00:02:26.280
+ a chance to experiment with
+
+00:02:26.280 --> 00:02:34.170
+ it yet though, and I think that could work really, really
+
+00:02:34.170 --> 00:02:35.920
+ well. Thanks for restoring
+
+00:02:35.920 --> 00:02:41.090
+ the stuff I was putting in. "I want to take a look at the
+
+00:02:41.090 --> 00:02:42.880
+ files used in your demo. Are
+
+00:02:42.880 --> 00:02:47.420
+ they somewhere online?" So I dropped the stuff I used for
+
+00:02:47.420 --> 00:02:51.720
+ the Arduino stuff. Now, caveat
+
+00:02:51.720 --> 00:02:55.220
+ with that, I was figuring out the workflows as I did it. So
+
+00:02:55.220 --> 00:02:57.320
+ there's like a readme of...
+
+00:02:57.320 --> 00:03:02.110
+ I was both figuring out Arduino and workflows. So the
+
+00:03:02.110 --> 00:03:05.400
+ initial readme has a bunch of projects
+
+00:03:05.400 --> 00:03:08.270
+ as I kind of did them one by one. So the workflow becomes
+
+00:03:08.270 --> 00:03:10.240
+ more mature the further down the list
+
+00:03:10.240 --> 00:03:16.080
+ you are. The ones earlier on are just copy-pasting a lot.
+
+00:03:16.080 --> 00:03:21.600
+ Do we have any other questions? This
+
+00:03:21.600 --> 00:03:25.590
+ is not the same shirt. You noticed. Also, the room's been
+
+00:03:25.590 --> 00:03:27.440
+ rearranged because my wife
+
+00:03:27.440 --> 00:03:30.640
+ made me move everything.
+
+00:03:30.640 --> 00:03:33.350
+ That's fine. Don't worry about it. It looks fine in the
+
+00:03:33.350 --> 00:03:35.000
+ background. I was implying that
+
+00:03:35.000 --> 00:03:37.290
+ you know the seven mistake game, trying to see what changed
+
+00:03:37.290 --> 00:03:38.360
+ in the background. I was
+
+00:03:38.360 --> 00:03:40.330
+ very interested though in some of the stuff that I was
+
+00:03:40.330 --> 00:03:41.720
+ seeing, including this dinner in
+
+00:03:41.720 --> 00:03:42.720
+ the background.
+
+00:03:42.720 --> 00:03:50.080
+ Yeah. Yeah, yeah. Yeah. There you go. There. It's my five-
+
+00:03:50.080 --> 00:03:54.560
+year-old's birthday party in
+
+00:03:54.560 --> 00:04:00.030
+ the summer. And it's been far more useful as a video
+
+00:04:00.030 --> 00:04:03.680
+ background than a bunch of five-year-olds
+
+00:04:03.680 --> 00:04:04.680
+ were impressed with it.
+
+00:04:04.680 --> 00:04:08.350
+ Yeah. Sorry. I do have to... It begs a question though,
+
+00:04:08.350 --> 00:04:10.760
+ which is it's a fairly large structure
+
+00:04:10.760 --> 00:04:14.080
+ to be made by a five-year-old. Like it is several five-
+
+00:04:14.080 --> 00:04:15.240
+years-old tall.
+
+00:04:15.240 --> 00:04:19.950
+ Yeah. Well, the idea was I wanted them to be able to fit
+
+00:04:19.950 --> 00:04:23.160
+ them. But it didn't quite work.
+
+00:04:23.160 --> 00:04:25.370
+ Yeah. It definitely feels like the mouth would be able to
+
+00:04:25.370 --> 00:04:26.680
+ fit a five-year-old. Yeah. So I
+
+00:04:26.680 --> 00:04:28.730
+ think we're good. We might want to get back on track. Sorry
+
+00:04:28.730 --> 00:04:29.400
+ for getting distracted by
+
+00:04:29.400 --> 00:04:32.680
+ this menacing presence in the background.
+
+00:04:32.680 --> 00:04:36.090
+ I had not heard of org-transclusion. I should look into
+
+00:04:36.090 --> 00:04:41.400
+ this. I'm waiting for the next one
+
+00:04:41.400 --> 00:04:47.800
+ to get typed up. I'll post a couple more things that...
+
+00:04:47.800 --> 00:04:54.960
+ Here. Into the chat. So a couple...
+
+00:04:54.960 --> 00:05:00.430
+ I mentioned in the chat that first of all, that org-entry-
+
+00:05:00.430 --> 00:05:03.480
+get thing to be able to...
+
+00:05:03.480 --> 00:05:07.660
+ So you could put properties into... You could put variables
+
+00:05:07.660 --> 00:05:09.480
+ into properties on your org
+
+00:05:09.480 --> 00:05:13.200
+ outline and then have them be referenced is really, really,
+
+00:05:13.200 --> 00:05:15.600
+ really powerful. Because especially
+
+00:05:15.600 --> 00:05:19.470
+ because you can call into blocks from other parts of the
+
+00:05:19.470 --> 00:05:22.400
+ outline. You can basically...
+
+00:05:22.400 --> 00:05:25.050
+ You know how... I don't know if anyone here does React. But
+
+00:05:25.050 --> 00:05:26.360
+ there's something that's very
+
+00:05:26.360 --> 00:05:29.640
+ powerful that happens because you could do... You kind of
+
+00:05:29.640 --> 00:05:31.240
+ have dynamic scoping over the
+
+00:05:31.240 --> 00:05:35.940
+ DOM tree. And you get a similar type of power that you get
+
+00:05:35.940 --> 00:05:38.760
+ with React contexts in org mode.
+
+00:05:38.760 --> 00:05:41.540
+ Because you have variables that you could set depending on
+
+00:05:41.540 --> 00:05:42.800
+ what's the closest point
+
+00:05:42.800 --> 00:05:48.570
+ in the outline tree is. And then have defaults cascade
+
+00:05:48.570 --> 00:05:49.640
+ upwards.
+
+00:05:49.640 --> 00:05:57.160
+ Let's see. Are workflows as they are in your life closely
+
+00:05:57.160 --> 00:06:01.400
+ tied to particular projects?
+
+00:06:01.400 --> 00:06:05.600
+ Or are they general workflows? So I think there's general
+
+00:06:05.600 --> 00:06:09.040
+ ones. Like repository source
+
+00:06:09.040 --> 00:06:12.820
+ code analysis that I've gone to and used over and over
+
+00:06:12.820 --> 00:06:16.120
+ again. So I mentioned down below
+
+00:06:16.120 --> 00:06:24.200
+ Codemod and JORS. That's a pretty common trick I use to...
+
+00:06:24.200 --> 00:06:25.480
+ Like just when I sit down with
+
+00:06:25.480 --> 00:06:28.770
+ a project to analyze its history. Make a movie of how it
+
+00:06:28.770 --> 00:06:30.480
+ plays out. And a lot of that is
+
+00:06:30.480 --> 00:06:35.820
+ very... It's easiest to orchestrate in org. So here
+
+00:06:35.820 --> 00:06:39.640
+ actually I'll drop... I'll drop one
+
+00:06:39.640 --> 00:06:44.560
+ right at the top of the other cool workflows. Here's an
+
+00:06:44.560 --> 00:06:48.840
+ example of something I did... I
+
+00:06:48.840 --> 00:06:54.080
+ don't want that to... We'll figure out how to make that not
+
+00:06:54.080 --> 00:06:57.240
+ be... There we go.
+
+00:06:57.240 --> 00:07:02.870
+ So here's an example I did where it was like... I'll clean
+
+00:07:02.870 --> 00:07:05.880
+ that up a little bit. But where
+
+00:07:05.880 --> 00:07:13.400
+ you basically are using org. Within org you use Codemod.
+
+00:07:13.400 --> 00:07:14.320
+ Here's the thing. This stuff
+
+00:07:14.320 --> 00:07:18.050
+ is hard to do if you can't just write about it and say this
+
+00:07:18.050 --> 00:07:19.960
+ is what I'm trying to do.
+
+00:07:19.960 --> 00:07:23.000
+ And talk about it in prose. Because you're doing things
+
+00:07:23.000 --> 00:07:24.600
+ like analysis and you have to
+
+00:07:24.600 --> 00:07:28.990
+ have it all ready in front of mind. And if you don't have
+
+00:07:28.990 --> 00:07:31.400
+ that... And if you have...
+
+00:07:31.400 --> 00:07:33.980
+ You just have an empty document. You can type into whatever
+
+00:07:33.980 --> 00:07:35.560
+. You can type what you're trying
+
+00:07:35.560 --> 00:07:39.690
+ to do. And then figure out how to do it in terms of these
+
+00:07:39.690 --> 00:07:40.520
+ blocks.
+
+00:07:40.520 --> 00:07:43.970
+ So for example, this is pretty generic and something I end
+
+00:07:43.970 --> 00:07:45.600
+ up going to a lot. Where you
+
+00:07:45.600 --> 00:07:49.520
+ use something like Codemod to basically run analysis on
+
+00:07:49.520 --> 00:07:52.480
+ like... Well, what sort of stuff
+
+00:07:52.480 --> 00:07:55.590
+ does... Or I guess that first one's not even Codemod. That
+
+00:07:55.590 --> 00:07:58.320
+ first one's just Git log analysis.
+
+00:07:58.320 --> 00:08:02.730
+ What sort of stuff has a person done? What files have they
+
+00:08:02.730 --> 00:08:04.200
+ touched? And then like...
+
+00:08:04.200 --> 00:08:06.380
+ Okay. I don't want to see the full list of the files. I
+
+00:08:06.380 --> 00:08:07.640
+ just want to get an idea of what
+
+00:08:07.640 --> 00:08:12.750
+ areas they've worked. So really take the first few director
+
+00:08:12.750 --> 00:08:14.640
+ies of there. And just emit that
+
+00:08:14.640 --> 00:08:18.770
+ out to the screen. And now I can kind of go by each author
+
+00:08:18.770 --> 00:08:20.240
+ and figure that out. And then
+
+00:08:20.240 --> 00:08:24.220
+ the next example is me using the Codemod project to do
+
+00:08:24.220 --> 00:08:28.720
+ something like... Well, what's... Let's
+
+00:08:28.720 --> 00:08:32.070
+ look at coupling. So whenever one file within this project
+
+00:08:32.070 --> 00:08:33.200
+ changes, what other files are
+
+00:08:33.200 --> 00:08:36.090
+ likely to change? Oh, and I don't care about test files.
+
+00:08:36.090 --> 00:08:37.760
+ And I don't care about doc files.
+
+00:08:37.760 --> 00:08:40.440
+ And I don't care about package log or whatever. And then
+
+00:08:40.440 --> 00:08:42.680
+ again, you get that analysis. It's
+
+00:08:42.680 --> 00:08:43.680
+ very useful.
+
+00:08:43.680 --> 00:08:46.190
+ - Sorry, George. Interjecting real quickly to say two
+
+00:08:46.190 --> 00:08:47.880
+ things. First, we have opened the
+
+00:08:47.880 --> 00:08:51.260
+ Q&A if you want to join and ask questions to George or...
+
+00:08:51.260 --> 00:08:52.560
+ Just like I'm doing right
+
+00:08:52.560 --> 00:08:55.810
+ now. And also, George, I am a little lost. You are the
+
+00:08:55.810 --> 00:08:57.880
+ green collar on the bad, right?
+
+00:08:57.880 --> 00:09:04.240
+ - I am the what? Oh, I am now the... Yes, I am the green
+
+00:09:04.240 --> 00:09:05.480
+ collar.
+
+00:09:05.480 --> 00:09:07.200
+ - Okay. So I've lost...
+
+00:09:07.200 --> 00:09:11.000
+ - No, you're the green collar. I am now... Goodness.
+
+00:09:11.000 --> 00:09:13.770
+ - Okay. Can you tell me at which time you were? Because I
+
+00:09:13.770 --> 00:09:15.120
+ was a little lost in the bad
+
+00:09:15.120 --> 00:09:16.520
+ on what you were commenting on right now.
+
+00:09:16.520 --> 00:09:19.600
+ - Okay. Yeah, yeah, yeah. That was... I'm purple collar now
+
+00:09:19.600 --> 00:09:20.920
+. So that first block under
+
+00:09:20.920 --> 00:09:24.000
+ other cool workflows is what I just put in there.
+
+00:09:24.000 --> 00:09:26.280
+ - Okay. Cool. It is on screen now.
+
+00:09:26.280 --> 00:09:29.480
+ - Yeah, yeah, yeah. And then there's a question, possibly
+
+00:09:29.480 --> 00:09:31.320
+ weak understanding here, but why
+
+00:09:31.320 --> 00:09:36.930
+ direct use of Tangle versus Org Babel? So take something
+
+00:09:36.930 --> 00:09:40.160
+ like Arduino CLI. That is running
+
+00:09:40.160 --> 00:09:44.810
+ at the file system level. Well, okay, no. Arduino CLI works
+
+00:09:44.810 --> 00:09:46.360
+ with the file system. You're
+
+00:09:46.360 --> 00:09:51.010
+ telling it, "Here are some files. Go do some stuff with
+
+00:09:51.010 --> 00:09:55.480
+ those files." So in order to do
+
+00:09:55.480 --> 00:09:59.560
+ that at the... And you have to have a specific type of file
+
+00:09:59.560 --> 00:10:01.640
+ system. So in order to do that
+
+00:10:01.640 --> 00:10:05.280
+ directly in Org Babel, I'd have to write an Org Babel
+
+00:10:05.280 --> 00:10:07.840
+ extension, which are not super easy
+
+00:10:07.840 --> 00:10:11.450
+ to write, that kind of writes files into a temp directory
+
+00:10:11.450 --> 00:10:13.320
+ in a certain format, blah,
+
+00:10:13.320 --> 00:10:16.720
+ blah, blah, which is hard. What's a lot easier is just tell
+
+00:10:16.720 --> 00:10:18.600
+ Tangle to just dump the file
+
+00:10:18.600 --> 00:10:22.020
+ and have a file watcher running. And whenever it happens,
+
+00:10:22.020 --> 00:10:24.120
+ it just deploys to an Arduino,
+
+00:10:24.120 --> 00:10:33.630
+ for example. Yeah, so it's basically a way of integrating
+
+00:10:33.630 --> 00:10:35.120
+ with things that require the
+
+00:10:35.120 --> 00:10:36.120
+ file system.
+
+00:10:36.120 --> 00:10:41.650
+ - Sorry, George, was there a question for me? I'm not sure
+
+00:10:41.650 --> 00:10:43.160
+ I was...
+
+00:10:43.160 --> 00:10:46.240
+ - Oh, no, no, no, no, no. I think that was the answer to
+
+00:10:46.240 --> 00:10:48.120
+ the question. I'm now looking
+
+00:10:48.120 --> 00:10:49.120
+ to see if there's...
+
+00:10:49.120 --> 00:10:50.120
+ - Okay, sorry.
+
+00:10:50.120 --> 00:10:51.120
+ - Yeah, we have more questions.
+
+00:10:51.120 --> 00:10:55.050
+ - Also, George, to give you a little bit of a heads up, we
+
+00:10:55.050 --> 00:10:57.240
+ have opened the Q&A right now,
+
+00:10:57.240 --> 00:11:00.830
+ and people should be able to join. But we only have about
+
+00:11:00.830 --> 00:11:02.640
+ three more minutes until we
+
+00:11:02.640 --> 00:11:06.260
+ need to go on a little bit of a break. So feel free to
+
+00:11:06.260 --> 00:11:08.480
+ answer as many questions on the
+
+00:11:08.480 --> 00:11:11.500
+ pad as possible. I don't see anyone in the chat, on BBB
+
+00:11:11.500 --> 00:11:13.240
+ right now, so questions on the
+
+00:11:13.240 --> 00:11:14.240
+ pad.
+
+00:11:14.240 --> 00:11:20.400
+ - Yeah, so I'll just put a couple more things. I'm a big
+
+00:11:20.400 --> 00:11:24.720
+ fan of plant QML, and I will regularly
+
+00:11:24.720 --> 00:11:30.750
+ use plant QML to do both architecture diagrams and wire
+
+00:11:30.750 --> 00:11:34.800
+frames using their salt language for
+
+00:11:34.800 --> 00:11:37.850
+ mockups. So I'll write an entire technical document being
+
+00:11:37.850 --> 00:11:39.160
+ like, "Here's what we should
+
+00:11:39.160 --> 00:11:42.250
+ do," and be putting stuff directly in it. People see it,
+
+00:11:42.250 --> 00:11:45.040
+ and they're like, "Oh, mockup's
+
+00:11:45.040 --> 00:11:50.990
+ great." Not directly about... Oh, TreeSitter integration,
+
+00:11:50.990 --> 00:11:53.600
+ because you can now use TreeSitter.
+
+00:11:53.600 --> 00:11:57.110
+ So you can use TreeSitter to analyze other code files. So
+
+00:11:57.110 --> 00:11:59.080
+ for example, I recently wrote
+
+00:11:59.080 --> 00:12:03.210
+ a little TreeSitter script that would pop open a TypeScript
+
+00:12:03.210 --> 00:12:05.200
+ file, analyze all the exports,
+
+00:12:05.200 --> 00:12:08.420
+ and grab everything that's exported along with its .com and
+
+00:12:08.420 --> 00:12:10.000
+ just dump it into my document
+
+00:12:10.000 --> 00:12:14.780
+ so I can review it and update it just by with a keystroke
+
+00:12:14.780 --> 00:12:18.160
+ as that file evolves. And just
+
+00:12:18.160 --> 00:12:23.820
+ an honorable mention, I would say I recently found out Org-
+
+00:12:23.820 --> 00:12:25.720
+Rome UI. So if you're an Org-Rome
+
+00:12:25.720 --> 00:12:29.050
+ user, that's an awesome visualization where it starts a
+
+00:12:29.050 --> 00:12:30.720
+ server and shows you a little
+
+00:12:30.720 --> 00:12:35.370
+ web page with everything visualized. And just in terms of
+
+00:12:35.370 --> 00:12:38.720
+... It's nice and cool and useful,
+
+00:12:38.720 --> 00:12:42.690
+ but it's also a great politics hack where you start a new
+
+00:12:42.690 --> 00:12:44.680
+ job or a team, and then you
+
+00:12:44.680 --> 00:12:47.670
+ spend a month, a week taking your notes. So you have 80
+
+00:12:47.670 --> 00:12:49.080
+ notes or something like that,
+
+00:12:49.080 --> 00:12:50.800
+ because they're a little bit... And then at the end of the
+
+00:12:50.800 --> 00:12:51.760
+ week, you do your one-on-one
+
+00:12:51.760 --> 00:12:54.560
+ with your manager. You're like, "Here's the visualization
+
+00:12:54.560 --> 00:12:56.360
+ and everything," and your jaw
+
+00:12:56.360 --> 00:12:57.360
+ drops. Yes.
+
+00:12:57.360 --> 00:13:00.750
+ It is. It is amazing. Org-Rome UI is amazing. I'm a little
+
+00:13:00.750 --> 00:13:02.480
+ biased, so I won't talk too much
+
+00:13:02.480 --> 00:13:04.500
+ about it because people in the know will know that I've
+
+00:13:04.500 --> 00:13:06.040
+ actually helped with the development
+
+00:13:06.040 --> 00:13:08.700
+ of Org-Rome. But yes, Org-Rome UI is so great. I also
+
+00:13:08.700 --> 00:13:11.000
+ worked in a team where we were presenting
+
+00:13:11.000 --> 00:13:14.930
+ Org-Rome and Org-Rome UI to people who had no idea of what
+
+00:13:14.930 --> 00:13:16.840
+ was Emacs or Org-Mode, but
+
+00:13:16.840 --> 00:13:21.420
+ they could see atoms and they could see them being linked.
+
+00:13:21.420 --> 00:13:24.160
+ It was so amazing. It just works.
+
+00:13:24.160 --> 00:13:26.320
+ It's great when things just work.
+
+00:13:26.320 --> 00:13:27.320
+ Yeah.
+
+00:13:27.320 --> 00:13:31.120
+ All right, George. Any last thing you'd like to say to the
+
+00:13:31.120 --> 00:13:32.960
+ stream before we wrap up?
+
+00:13:32.960 --> 00:13:36.980
+ Nope. Put more workflows in the document if you have any
+
+00:13:36.980 --> 00:13:38.320
+ other ideas too.
+
+00:13:38.320 --> 00:13:41.440
+ Cool. Amazing. We'll be on the lookout for this. So George,
+
+00:13:41.440 --> 00:13:42.440
+ thank you so much for your
+
+00:13:42.440 --> 00:13:45.640
+ presentation and for your questions, and we will see you
+
+00:13:45.640 --> 00:13:46.760
+ later probably.
+
+00:13:46.760 --> 00:13:47.760
+ Thank you. Bye-bye.
+
+00:13:47.760 --> 00:13:48.760
+ Bye-bye.
+
+00:13:48.760 --> 00:13:58.820
+ I'm still there. See you in a bit, folks. Oh, sorry. Sorry.
+
+00:13:58.820 --> 00:14:00.920
+ I'm panicking. Give me
+
+00:14:00.920 --> 00:14:08.300
+ a second. Sure. You saw me whisper right now. We will be
+
+00:14:08.300 --> 00:14:09.640
+ going on a little bit of a break
+
+00:14:09.640 --> 00:14:14.960
+ right now. The next talk will be due in about 10 minutes.
+
+00:14:14.960 --> 00:14:18.200
+ So at 35 of the current hour,
+
+00:14:18.200 --> 00:14:21.450
+ we will be reconvening on Gen for the next talk. So see you
+
+00:14:21.450 --> 00:14:23.560
+ in a bit and enjoy the break.
+
+00:14:23.560 --> 00:14:29.160
+ You are currently the only person in this conference.
+
+00:14:29.160 --> 00:14:41.310
+ Give me just a second. I'll put some music for the break.
+
+00:14:41.310 --> 00:14:45.240
+ Right now I'm doing too many
+
+00:14:45.240 --> 00:14:47.140
+ things at the same time. So we will have to wait a little
+
+00:14:47.140 --> 00:14:48.280
+ bit for everything to work.
+
+00:14:48.280 --> 00:14:50.340
+ I'll put the music on first so that you have something nice
+
+00:14:50.340 --> 00:14:51.560
+ to listen to, which is Shoshin
+
+00:14:51.560 --> 00:15:04.440
+ Music the Lloyd.
+
+00:15:04.440 --> 00:15:20.440
+ (Music)
+
+00:15:20.440 --> 00:15:40.440
+ (Music)
+
+00:15:40.440 --> 00:16:00.440
+ (Music)
+
+00:16:00.440 --> 00:16:20.440
+ (Music)
+
+00:16:20.440 --> 00:16:40.440
+ (Music)
+
+00:16:40.440 --> 00:17:00.440
+ (Music)
+
+00:17:00.440 --> 00:17:20.440
+ (Music)
+
+00:17:20.440 --> 00:17:40.440
+ (Music)
+
+00:17:40.440 --> 00:17:54.440
+ (Music)
+
diff --git a/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt
new file mode 100644
index 00000000..d3302b79
--- /dev/null
+++ b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt
@@ -0,0 +1,77 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:53.960
+Introduction
+
+21
+00:00:53.960 --> 00:02:30.200
+The future
+
+60
+00:02:30.200 --> 00:03:15.680
+Org development workflows
+
+78
+00:03:15.680 --> 00:04:54.600
+Taking notes
+
+109
+00:04:54.600 --> 00:06:10.680
+org-capture templates
+
+132
+00:06:10.680 --> 00:06:49.160
+Building up a dashboard
+
+146
+00:06:49.160 --> 00:07:45.680
+org-store-links
+
+164
+00:07:45.680 --> 00:08:21.480
+Formatting
+
+174
+00:08:21.480 --> 00:08:52.200
+Pasting code
+
+184
+00:08:52.200 --> 00:10:04.960
+Git
+
+202
+00:10:04.960 --> 00:11:29.040
+async-shell-command
+
+226
+00:11:29.040 --> 00:13:47.840
+Literate programming and tangling
+
+272
+00:13:47.840 --> 00:14:36.400
+Noweb
+
+290
+00:14:36.400 --> 00:16:04.480
+Running commands
+
+316
+00:16:04.480 --> 00:16:43.600
+Buttons
+
+327
+00:16:43.600 --> 00:18:04.800
+Workspaces
+
+353
+00:18:04.800 --> 00:18:36.000
+dash
+
+366
+00:18:36.000 --> 00:19:29.920
+Header arguments
+
+386
+00:19:29.920 --> 00:20:26.920
+Conclusion
diff --git a/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt
new file mode 100644
index 00000000..58d88b2f
--- /dev/null
+++ b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt
@@ -0,0 +1,1309 @@
+WEBVTT captioned by bhavin192
+
+00:00:00.000 --> 00:00:04.600
+Hello. Welcome to my first ever EmacsConf talk.
+
+00:00:04.600 --> 00:00:06.360
+This is really exciting for me.
+
+00:00:06.360 --> 00:00:08.600
+I've done lots of conferences,
+
+00:00:08.600 --> 00:00:12.800
+but rarely ones this technical and this nerdy.
+
+00:00:12.800 --> 00:00:13.508
+I also feel like
+
+00:00:13.508 --> 00:00:15.040
+I have something interesting to share.
+
+00:00:15.040 --> 00:00:18.680
+I come to Emacs relatively late in my career,
+
+00:00:18.680 --> 00:00:20.920
+only about six years ago,
+
+00:00:20.920 --> 00:00:22.880
+but I've been absolutely amazed
+
+00:00:22.880 --> 00:00:25.800
+at the innovation and commitment of the community
+
+00:00:25.800 --> 00:00:28.200
+to do things their own way.
+
+00:00:28.200 --> 00:00:30.120
+Oftentimes, these become things
+
+00:00:30.120 --> 00:00:33.880
+that are not readily available anywhere else.
+
+00:00:33.880 --> 00:00:35.307
+So, as I've been using Emacs
+
+00:00:35.307 --> 00:00:37.160
+(and Org mode specifically)
+
+00:00:37.160 --> 00:00:39.600
+a great deal in my day-to-day workflows,
+
+00:00:39.600 --> 00:00:41.520
+I've been leaning more and more into
+
+00:00:41.520 --> 00:00:43.607
+some of these tips and tricks.
+
+00:00:43.607 --> 00:00:46.680
+I find that there is almost every day
+
+00:00:46.680 --> 00:00:48.120
+that I discover some useful tweak
+
+00:00:48.120 --> 00:00:50.760
+that can make my development better.
+
+00:00:50.760 --> 00:00:53.960
+I want to share them with you now.
+
+00:00:53.960 --> 00:00:54.874
+[Future George]: Hey, hold on!
+
+00:00:54.874 --> 00:00:56.200
+Who are you?
+
+00:00:56.200 --> 00:01:00.400
+[Future George]: I'm you from the future!
+
+00:01:00.400 --> 00:01:02.480
+Oh, nice. How good.
+
+00:01:02.480 --> 00:01:05.240
+No, I'm you from, like, a month from now.
+
+00:01:05.240 --> 00:01:08.440
+Look, you know how these talks are pre-recorded,
+
+00:01:08.440 --> 00:01:10.760
+and you know how you've spent the last two years
+
+00:01:10.760 --> 00:01:12.400
+criticizing conference speakers
+
+00:01:12.400 --> 00:01:14.000
+for trying to do the same old thing
+
+00:01:14.000 --> 00:01:15.120
+and not creatively adapting
+
+00:01:15.120 --> 00:01:17.440
+to the online conference medium?
+
+00:01:17.440 --> 00:01:20.520
+Well, you are recording this back in November.
+
+00:01:20.520 --> 00:01:23.160
+I'm in December when everyone is watching this
+
+00:01:23.160 --> 00:01:24.720
+for the first time.
+
+00:01:24.720 --> 00:01:27.120
+That is something we can do now.
+
+00:01:27.120 --> 00:01:29.640
+[George]: Okay, so this is a gimmick.
+
+00:01:29.640 --> 00:01:32.880
+Cool! And I see you still haven't figured out
+
+00:01:32.880 --> 00:01:35.440
+how to remove backgrounds with OBS.
+
+00:01:35.440 --> 00:01:37.240
+[Future George]: Oh my god! It's such a pain,
+
+00:01:37.240 --> 00:01:40.360
+I have to get a plugin or something.
+
+00:01:40.360 --> 00:01:42.760
+So, yes, it's kind of a gimmick,
+
+00:01:42.760 --> 00:01:44.920
+but I also have a cool point.
+
+00:01:44.920 --> 00:01:46.200
+You know, how you just said
+
+00:01:46.200 --> 00:01:48.840
+that you discover something new every day?
+
+00:01:48.840 --> 00:01:49.920
+Well, your talk isn't that long,
+
+00:01:49.920 --> 00:01:52.720
+and I found a bunch of cool new workflow synths.
+
+00:01:52.720 --> 00:01:55.920
+[George]: Oh, okay, that makes sense.
+
+00:01:55.920 --> 00:01:58.360
+I'm starting a new job in the intervening time.
+
+00:01:58.360 --> 00:01:59.720
+[Future George]: Exactly!
+
+00:01:59.720 --> 00:02:02.440
+So, I have more stuff I want to add.
+
+00:02:02.440 --> 00:02:03.740
+[George]: Oh, and I bet that
+
+00:02:03.740 --> 00:02:05.960
+once we set the ground rules,
+
+00:02:05.960 --> 00:02:07.136
+the audience might have
+
+00:02:07.136 --> 00:02:08.960
+some of their own suggestions.
+
+00:02:08.960 --> 00:02:11.160
+That is a good idea.
+
+00:02:11.160 --> 00:02:11.960
+Okay, go away now.
+
+00:02:11.960 --> 00:02:13.574
+[Future George]: Fine, but
+
+00:02:13.574 --> 00:02:15.240
+aren't you gonna explain the dino?
+
+00:02:15.240 --> 00:02:18.800
+[George]: This is EmacsConf, dude.
+
+00:02:18.800 --> 00:02:20.320
+You think a dinosaur built out of
+
+00:02:20.320 --> 00:02:22.160
+boxes and old dishwasher parts
+
+00:02:22.160 --> 00:02:24.207
+is the weirdest background thing we'll see?
+
+00:02:24.207 --> 00:02:27.880
+[Both making dinosaur roaring sound: ROAAAAR!]
+
+00:02:27.880 --> 00:02:30.200
+Okay, bye now.
+
+00:02:30.200 --> 00:02:33.160
+Hey everyone, you heard the idea.
+
+00:02:33.160 --> 00:02:35.000
+This is going to be a thinly-veiled attempt
+
+00:02:35.000 --> 00:02:36.940
+to show you stuff about
+
+00:02:36.940 --> 00:02:38.760
+Emacs and Org mode, specifically,
+
+00:02:38.760 --> 00:02:41.560
+that I think is super cool and immediately useful
+
+00:02:41.560 --> 00:02:43.600
+while you're doing development.
+
+00:02:43.600 --> 00:02:46.720
+Let's define the scope of Org development workflow
+
+00:02:46.720 --> 00:02:49.000
+as something specific you do with Org mode
+
+00:02:49.000 --> 00:02:50.800
+that helps in certain common
+
+00:02:50.800 --> 00:02:52.880
+development related activities.
+
+00:02:52.880 --> 00:02:54.560
+Now, tie-dye me from the future said
+
+00:02:54.560 --> 00:02:56.960
+he's got some more ideas
+
+00:02:56.960 --> 00:02:58.840
+beyond what I'm presenting here.
+
+00:02:58.840 --> 00:03:01.960
+I'm sure many of you have ideas as well.
+
+00:03:01.960 --> 00:03:07.960
+So, we're going to share a collaborative document,
+
+00:03:07.960 --> 00:03:10.120
+and let's all as we're listening to this
+
+00:03:10.120 --> 00:03:11.440
+be talking, and chatting, and entering
+
+00:03:11.440 --> 00:03:13.240
+our own ideas and workflows,
+
+00:03:13.240 --> 00:03:15.680
+so that we can learn and improve together.
+
+00:03:15.680 --> 00:03:17.960
+And now with that, let's begin.
+
+00:03:17.960 --> 00:03:20.280
+I've got a ton of ground to cover,
+
+00:03:20.280 --> 00:03:23.480
+and I want to start by talking about note-taking.
+
+00:03:23.480 --> 00:03:25.720
+Shrink down! [transition]
+
+00:03:25.720 --> 00:03:30.074
+Note-taking is incredibly important.
+
+00:03:30.074 --> 00:03:33.600
+We can't keep all this stuff in our heads.
+
+00:03:33.600 --> 00:03:36.640
+So, for example, I find myself with
+
+00:03:36.640 --> 00:03:41.760
+the need to learn about the solid project.
+
+00:03:41.760 --> 00:03:44.520
+This right here is the solid project,
+
+00:03:44.520 --> 00:03:47.320
+and I want to play around with it.
+
+00:03:47.320 --> 00:03:50.920
+I am going to start by creating a note for it.
+
+00:03:50.920 --> 00:03:53.360
+Now, one of the things that I want to do
+
+00:03:53.360 --> 00:03:57.240
+is explore one of their tutorials.
+
+00:03:57.240 --> 00:03:58.960
+That's the site I just saw.
+
+00:03:58.960 --> 00:04:03.720
+I can go ahead and create a note for myself.
+
+00:04:03.720 --> 00:04:10.280
+Right, "Solid React Example",
+
+00:04:10.280 --> 00:04:12.120
+and maybe a set of stuff ending on there.
+
+00:04:12.120 --> 00:04:14.240
+I'm going to clone this project,
+
+00:04:14.240 --> 00:04:15.720
+which I've already done,
+
+00:04:15.720 --> 00:04:18.360
+and I can pull it up right here.
+
+00:04:18.360 --> 00:04:22.280
+So, I can pull it up right here,
+
+00:04:22.280 --> 00:04:24.440
+and I can now start to explore it.
+
+00:04:24.440 --> 00:04:26.440
+So, for example, this code base sounds…,
+
+00:04:26.440 --> 00:04:27.080
+it seems interesting.
+
+00:04:27.080 --> 00:04:28.996
+I'm going to want to
+
+00:04:28.996 --> 00:04:31.520
+store a link to this in my code.
+
+00:04:31.520 --> 00:04:34.840
+I'm going to run `org-store-link`,
+
+00:04:34.840 --> 00:04:37.960
+and I can come in here and say,
+
+00:04:37.960 --> 00:04:48.280
+let's explore structure. Local link,
+
+00:04:48.280 --> 00:04:50.640
+and here I'm going to put that right there.
+
+00:04:50.640 --> 00:04:52.960
+Now, at any given time I can come into this note
+
+00:04:52.960 --> 00:04:54.600
+and be thrown right into the structure.
+
+00:04:54.600 --> 00:04:58.880
+I want to go and now start investigating the code,
+
+00:04:58.880 --> 00:05:02.474
+but before doing that
+
+00:05:02.474 --> 00:05:08.280
+I'm going to take an extra step
+
+00:05:08.280 --> 00:05:13.560
+and customize the Org capture system.
+
+00:05:13.560 --> 00:05:16.297
+I'm going to create a playground node here,
+
+00:05:16.297 --> 00:05:17.320
+where I can do whatever.
+
+00:05:17.320 --> 00:05:20.680
+Now, what does this template do?
+
+00:05:20.680 --> 00:05:22.960
+Well, it's just going to create a new template.
+
+00:05:22.960 --> 00:05:24.640
+And whenever I hit the s key,
+
+00:05:24.640 --> 00:05:31.680
+it is going to go ahead and add a new heading
+
+00:05:31.680 --> 00:05:36.280
+to which I will enter,
+
+00:05:36.280 --> 00:05:38.326
+and it's going to grab a link
+
+00:05:38.326 --> 00:05:39.720
+to wherever I'm pointing at,
+
+00:05:39.720 --> 00:05:41.760
+and any highlighted code
+
+00:05:41.760 --> 00:05:44.560
+will also be inserted into a source block,
+
+00:05:44.560 --> 00:05:49.407
+and eventually, drop my cursor
+
+00:05:49.407 --> 00:05:52.107
+where I can work on it.
+
+00:05:52.107 --> 00:05:55.000
+So, we can grab our template,
+
+00:05:55.000 --> 00:05:57.400
+and the one thing I'm going to need to add it here
+
+00:05:57.400 --> 00:05:59.360
+is to say what file this goes to.
+
+00:05:59.360 --> 00:06:03.760
+I'm going to copy the name of this file,
+
+00:06:03.760 --> 00:06:08.040
+and put it right in there.
+
+00:06:08.040 --> 00:06:10.680
+I'm going to go ahead now run this template.
+
+00:06:10.680 --> 00:06:14.400
+Now, we can explore our code.
+
+00:06:14.400 --> 00:06:16.440
+For example, I can look in the server,
+
+00:06:16.440 --> 00:06:18.400
+and say, "Oh yeah, this slide looks interesting.
+
+00:06:18.400 --> 00:06:21.040
+Go ahead and capture that."
+
+00:06:21.040 --> 00:06:23.800
+There you see our template.
+
+00:06:23.800 --> 00:06:26.000
+You see, yeah, this is Next.js app,
+
+00:06:26.000 --> 00:06:29.320
+and you can see it got added right in here
+
+00:06:29.320 --> 00:06:33.080
+right next to my other code.
+
+00:06:33.080 --> 00:06:34.640
+So, that's interesting.
+
+00:06:34.640 --> 00:06:36.920
+I can always go ahead and click that link,
+
+00:06:36.920 --> 00:06:40.560
+and get thrown directly to where in the code I was.
+
+00:06:40.560 --> 00:06:43.240
+I'm kind of building up my own dashboard
+
+00:06:43.240 --> 00:06:45.040
+as I explore this project
+
+00:06:45.040 --> 00:06:49.160
+of interesting points within the project.
+
+00:06:49.160 --> 00:06:52.440
+One of the things I noticed here
+
+00:06:52.440 --> 00:06:57.440
+by looking at the file structure is that
+
+00:06:57.440 --> 00:07:02.040
+there is an area for certificates.
+
+00:07:02.040 --> 00:07:05.625
+That's a little unusual, so we'll make a note
+
+00:07:05.625 --> 00:07:08.007
+of that by again running `org-store-link`.
+
+00:07:08.007 --> 00:07:12.707
+This comes with certificates,
+
+00:07:12.707 --> 00:07:18.007
+so we'll put that there.
+
+00:07:18.007 --> 00:07:21.607
+One of the good standbys is,
+
+00:07:21.607 --> 00:07:23.540
+just to use our regular shell commands.
+
+00:07:23.540 --> 00:07:26.774
+So, we will go ahead and say,
+
+00:07:26.774 --> 00:07:29.807
+the default directory for this is our project.
+
+00:07:29.807 --> 00:07:31.640
+And we can go ahead and say,
+
+00:07:31.640 --> 00:07:38.520
+`cat certificates/localhost.key`,
+
+00:07:38.520 --> 00:07:43.760
+and then we'll output the first five lines of it,
+
+00:07:43.760 --> 00:07:45.848
+just to make sure it's a regular certificate.
+
+00:07:45.848 --> 00:07:49.360
+Now, notice this got broken up a little bit.
+
+00:07:49.360 --> 00:07:51.720
+This is due to Emacs auto formatting.
+
+00:07:51.720 --> 00:07:55.866
+We can come in here, and tell it to
+
+00:07:55.866 --> 00:07:57.400
+format it as code,
+
+00:07:57.400 --> 00:07:59.880
+which will be the same as this block right here.
+
+00:07:59.880 --> 00:08:02.320
+Now, there are other options available.
+
+00:08:02.320 --> 00:08:05.453
+If, for example, we don't want [it]
+
+00:08:05.453 --> 00:08:06.480
+to be a shell block,
+
+00:08:06.480 --> 00:08:09.560
+we wanted a Python block for some reason,
+
+00:08:09.560 --> 00:08:15.320
+we do `:wrap src python`, and execute that,
+
+00:08:15.320 --> 00:08:18.440
+and it's now wrapped as a Python block,
+
+00:08:18.440 --> 00:08:21.480
+but I like it as a shell.
+
+00:08:21.480 --> 00:08:24.240
+Let's, for example, go down into pages here
+
+00:08:24.240 --> 00:08:25.800
+and look at this document file.
+
+00:08:25.800 --> 00:08:29.160
+We're saying, "Okay. Well, this looks interesting
+
+00:08:29.160 --> 00:08:32.474
+maybe highlight that," and we'll go ahead
+
+00:08:32.474 --> 00:08:36.240
+and capture that template
+
+00:08:36.240 --> 00:08:39.400
+and say, grab all this code and paste it in here.
+
+00:08:39.400 --> 00:08:42.440
+Now, there is a bug at the moment,
+
+00:08:42.440 --> 00:08:46.280
+where if you highlight more than one lines of code,
+
+00:08:46.280 --> 00:08:50.760
+the link will not work, and that honestly
+
+00:08:50.760 --> 00:08:54.540
+might be something I look into fixing.
+
+00:08:54.540 --> 00:08:57.507
+One of the things that might be useful here
+
+00:08:57.507 --> 00:08:59.274
+would be to check out
+
+00:08:59.274 --> 00:09:02.107
+how this file has evolved over time.
+
+00:09:02.107 --> 00:09:05.340
+To do that, I'm going to use Magit.
+
+00:09:05.340 --> 00:09:09.640
+I'll pull up a log.
+
+00:09:09.640 --> 00:09:11.400
+Look, there's only a single change.
+
+00:09:11.400 --> 00:09:13.040
+I'm going to run a command
+
+00:09:13.040 --> 00:09:16.840
+called `orgit-store-link`,
+
+00:09:16.840 --> 00:09:22.174
+and now I can come in here and say,
+
+00:09:22.174 --> 00:09:26.207
+"It's only changed once."
+
+00:09:26.207 --> 00:09:30.274
+Go ahead and insert that link.
+
+00:09:30.507 --> 00:09:33.340
+Now, this file…
+
+00:09:33.340 --> 00:09:32.960
+the arguments here are kind of weird,
+
+00:09:35.800 --> 00:09:38.520
+and in fact, if I click this,
+
+00:09:38.520 --> 00:09:42.040
+it will actually go to the full log of that branch.
+
+00:09:42.040 --> 00:09:45.760
+However, we can fix that pretty easily.
+
+00:09:45.760 --> 00:09:49.120
+Grab the path of our file,
+
+00:09:49.120 --> 00:09:53.874
+and this right here is really just the arguments
+
+00:09:53.874 --> 00:09:56.280
+that are passed into the log command.
+
+00:09:56.280 --> 00:09:58.880
+So, here we go, we put that in there,
+
+00:09:58.880 --> 00:10:04.960
+and there we go. We get the full file history.
+
+00:10:04.960 --> 00:10:09.280
+Now, I want to actually build the program.
+
+00:10:09.280 --> 00:10:16.520
+So, "Build the app."
+
+00:10:16.520 --> 00:10:18.800
+Now, I could of course run it as a shell, right.
+
+00:10:18.800 --> 00:10:22.560
+`npm ci`. The problem with that is that
+
+00:10:22.560 --> 00:10:26.400
+Emacs is single-threaded. So, if I were to do that,
+
+00:10:26.400 --> 00:10:30.400
+the entire time while it was running,
+
+00:10:30.400 --> 00:10:33.120
+it would be locking out my Emacs.
+
+00:10:33.120 --> 00:10:35.740
+Additionally, I might not actually want
+
+00:10:35.740 --> 00:10:38.707
+all that scroll--`npm ci` produces a lot of it--
+
+00:10:38.707 --> 00:10:40.080
+actually in my document.
+
+00:10:40.080 --> 00:10:43.840
+So instead, what we could do is
+
+00:10:43.840 --> 00:10:46.800
+use an Emacs Lisp function,
+
+00:10:46.800 --> 00:10:49.640
+and it's called `async-shell-command`.
+
+00:10:49.640 --> 00:10:52.880
+And when you run something in async-shell-command,
+
+00:10:52.880 --> 00:10:58.007
+it's going to a comint buffer with a process
+
+00:10:58.007 --> 00:11:00.107
+attached to it, and run it in there.
+
+00:11:00.107 --> 00:11:04.907
+I will need to set the directory here first,
+
+00:11:04.907 --> 00:11:07.560
+and since, again, this is going to be
+
+00:11:07.560 --> 00:11:08.960
+opening up in a new buffer.
+
+00:11:08.960 --> 00:11:09.960
+I don't need to see that.
+
+00:11:09.960 --> 00:11:11.407
+I'm going to run it.
+
+00:11:11.407 --> 00:11:13.680
+And what's going to happen is
+
+00:11:13.680 --> 00:11:17.120
+this is actually not going to work.
+
+00:11:17.120 --> 00:11:18.160
+And it doesn't work,
+
+00:11:18.160 --> 00:11:20.320
+Not for any particular reason I can control.
+
+00:11:20.320 --> 00:11:24.880
+It's unfortunately that the repo is broken,
+
+00:11:24.880 --> 00:11:26.307
+but that is a totally valid
+
+00:11:26.307 --> 00:11:29.040
+result of our investigation.
+
+00:11:29.040 --> 00:11:33.107
+One of the things that I really love
+
+00:11:33.107 --> 00:11:37.640
+to do with Org mode is to actually use it for
+
+00:11:37.640 --> 00:11:38.240
+literate programming,
+
+00:11:38.240 --> 00:11:43.080
+because Org mode has a pretty capable
+
+00:11:43.080 --> 00:11:46.000
+code generation facility built into it.
+
+00:11:46.000 --> 00:11:47.440
+It's called tangling.
+
+00:11:47.440 --> 00:11:51.720
+So, if I go ahead and take my document...
+
+00:11:51.720 --> 00:11:54.107
+This is for a little Arduino project,
+
+00:11:54.107 --> 00:11:56.907
+where I was figuring out to spin things around
+
+00:11:56.907 --> 00:12:00.074
+using an old Roomba motor.
+
+00:12:00.074 --> 00:12:05.280
+I can go ahead and write a script like this,
+
+00:12:05.280 --> 00:12:09.400
+and then notice, I use the tangle variable
+
+00:12:09.400 --> 00:12:11.520
+that is just going to determine
+
+00:12:11.520 --> 00:12:13.560
+where that file gets written
+
+00:12:13.560 --> 00:12:17.680
+when we call the command `org-babel-tangle`.
+
+00:12:17.680 --> 00:12:20.080
+So, if I go ahead and run this,
+
+00:12:20.080 --> 00:12:21.800
+you can see down in the minibuffer,
+
+00:12:21.800 --> 00:12:23.040
+it's going to write to
+
+00:12:23.040 --> 00:12:26.707
+`/tmp/go-batsy-playground/go-batsy-playground.ino`.
+
+00:12:26.707 --> 00:12:27.840
+That's where this right here would write,
+
+00:12:29.240 --> 00:12:33.480
+and then I could run commands on it.
+
+00:12:33.480 --> 00:12:36.574
+Then I want to start being able to use this
+
+00:12:36.574 --> 00:12:38.600
+to build out a program.
+
+00:12:38.600 --> 00:12:42.000
+I'm going ahead and writing in prose
+
+00:12:42.000 --> 00:12:43.440
+and interspersing it with code.
+
+00:12:43.440 --> 00:12:47.160
+So, it's the inverse of code,
+
+00:12:47.160 --> 00:12:49.374
+in which you intersperse comments, [here]
+
+00:12:49.374 --> 00:12:51.640
+you write prose, and then you intersperse code
+
+00:12:51.640 --> 00:12:54.920
+where as needed.
+
+00:12:54.920 --> 00:12:58.120
+Tangle is implicitly defined up at the higher level
+
+00:12:58.120 --> 00:12:59.640
+in this property block right here,
+
+00:12:59.640 --> 00:13:02.600
+which I will talk about in a little bit.
+
+00:13:02.600 --> 00:13:04.720
+But if you want to see what properties
+
+00:13:04.720 --> 00:13:07.400
+are available at any given time,
+
+00:13:07.400 --> 00:13:10.140
+you can hit `org-babel-view-src-block-info`
+
+00:13:10.140 --> 00:13:14.274
+right there, and you can see that tangle is enabled.
+
+00:13:14.274 --> 00:13:16.440
+All of these blocks have the exact same tangle.
+
+00:13:16.440 --> 00:13:20.800
+If I run and see what it is, it's just going to
+
+00:13:20.800 --> 00:13:23.680
+write to this directory to `go-batsy.ino`.
+
+00:13:23.680 --> 00:13:28.920
+`org-babel-tangle` is going to go ahead
+
+00:13:28.920 --> 00:13:30.640
+and tangle all these source code blocks,
+
+00:13:30.640 --> 00:13:33.174
+and I can go ahead and look at my file
+
+00:13:33.174 --> 00:13:34.440
+and here it is.
+
+00:13:34.440 --> 00:13:36.240
+This is the full Arduino file
+
+00:13:36.240 --> 00:13:37.360
+that was generated from there.
+
+00:13:37.360 --> 00:13:40.807
+I start writing code here,
+
+00:13:40.807 --> 00:13:43.320
+and I'm basically doing it in a prose way.
+
+00:13:43.320 --> 00:13:44.640
+As I'm thinking about it,
+
+00:13:44.640 --> 00:13:46.080
+I write down what I'm going to do.
+
+00:13:46.080 --> 00:13:49.240
+Now these braces, we haven't seen these before.
+
+00:13:49.240 --> 00:13:50.440
+This is an aspect of Org called `noweb`,
+
+00:13:52.680 --> 00:13:55.374
+which again is not too much of a
+
+00:13:55.374 --> 00:13:56.400
+templating system too.
+
+00:13:56.400 --> 00:13:58.960
+But it does one thing, which is insert code,
+
+00:13:58.960 --> 00:14:00.200
+which turns out to be enough.
+
+00:14:00.200 --> 00:14:03.640
+So, this right here basically says,
+
+00:14:03.640 --> 00:14:08.507
+take that block with that exact name
+
+00:14:08.507 --> 00:14:09.960
+and just insert here.
+
+00:14:09.960 --> 00:14:13.760
+If you want to see exactly what a block expands to,
+
+00:14:13.760 --> 00:14:15.160
+you're going to come in here.
+
+00:14:15.160 --> 00:14:18.320
+You're going to run `org-babel-expand-src-block`,
+
+00:14:18.320 --> 00:14:21.000
+and there we go. That's what this block expands to.
+
+00:14:21.000 --> 00:14:22.080
+That's what all those places
+
+00:14:22.080 --> 00:14:24.807
+of this little bits and pieces expand to.
+
+00:14:24.807 --> 00:14:26.120
+So, that becomes really useful, and notice
+
+00:14:28.120 --> 00:14:29.960
+basically we just take these little blocks
+
+00:14:29.960 --> 00:14:32.520
+that are not going to be tangled directly
+
+00:14:32.520 --> 00:14:33.920
+but it will be in this other block.
+
+00:14:33.920 --> 00:14:38.074
+And we turn off their tangling.
+
+00:14:38.074 --> 00:14:40.680
+Now that you have some sort of tangling,
+
+00:14:40.680 --> 00:14:42.880
+you want to be able to interact with those files
+
+00:14:42.880 --> 00:14:46.707
+that are written to that directory.
+
+00:14:46.707 --> 00:14:48.960
+So, right here I have an area
+
+00:14:48.960 --> 00:14:52.760
+where I can do things like run a compiler.
+
+00:14:52.760 --> 00:14:55.160
+Now what does that compiler do?
+
+00:14:55.160 --> 00:14:57.840
+Well, this right here references
+
+00:14:57.841 --> 00:15:01.874
+a source code block that appears in another Org file.
+
+00:15:01.874 --> 00:15:04.520
+And I find that when doing these sort of things
+
+00:15:04.520 --> 00:15:06.007
+it can be useful to have a little
+
+00:15:06.007 --> 00:15:08.000
+utility Org directory.
+
+00:15:08.000 --> 00:15:10.374
+So, here it is, `org/ci.org`.
+
+00:15:10.374 --> 00:15:11.640
+This is just part of my repo.
+
+00:15:11.640 --> 00:15:14.140
+We open up, and here we go.
+
+00:15:14.140 --> 00:15:15.200
+I have a compile function.
+
+00:15:15.200 --> 00:15:18.360
+Basically, it's doing some stuff
+
+00:15:18.360 --> 00:15:20.480
+to clean up things correctly.
+
+00:15:20.480 --> 00:15:23.520
+But then using that same `async-shell-command`
+
+00:15:23.520 --> 00:15:26.280
+to open things up and a new buffer.
+
+00:15:26.280 --> 00:15:28.674
+In this case, named after
+
+00:15:28.674 --> 00:15:31.200
+whatever heading it was under.
+
+00:15:31.200 --> 00:15:35.160
+And then we're going to go ahead and inside of it
+
+00:15:35.160 --> 00:15:39.874
+run Arduino CLI command to compile,
+
+00:15:39.874 --> 00:15:43.560
+and pass that into `watchexec`.
+
+00:15:43.560 --> 00:15:46.120
+which is a little Rust program
+
+00:15:46.120 --> 00:15:49.520
+that watches inode[??] files for any changes,
+
+00:15:49.520 --> 00:15:51.240
+and when they detect them, we will run this.
+
+00:15:51.240 --> 00:15:56.160
+If I were to, for example, add a line here,
+
+00:15:56.160 --> 00:15:59.360
+and now run `org-babel-tangle`,
+
+00:15:59.360 --> 00:16:02.400
+you can see watchexec immediately
+
+00:16:02.400 --> 00:16:04.480
+picks it up and restarts it.
+
+00:16:04.480 --> 00:16:07.474
+Now it's kind of a pain to remember
+
+00:16:07.475 --> 00:16:09.680
+to run `org-babel-tangle` all the time.
+
+00:16:09.680 --> 00:16:13.807
+So, I can come here and click this button.
+
+00:16:13.807 --> 00:16:17.040
+It asks me to execute it there.
+
+00:16:17.040 --> 00:16:18.280
+And what does that do?
+
+00:16:18.280 --> 00:16:23.280
+Here you go. It's just a very simple hyperlink,
+
+00:16:23.280 --> 00:16:25.600
+but to the Elisp protocol.
+
+00:16:25.600 --> 00:16:30.600
+The Elisp protocol just adds a hook that says,
+
+00:16:30.600 --> 00:16:35.107
+whenever a document is saved, run `org-babel-tangle`.
+
+00:16:35.107 --> 00:16:37.600
+And now that I've run that, I can go ahead,
+
+00:16:37.600 --> 00:16:39.307
+come in here, and delete that.
+
+00:16:39.307 --> 00:16:42.340
+And look at that. It tangles automatically for me.
+
+00:16:42.340 --> 00:16:45.040
+Because I don't want to actually have this
+
+00:16:45.040 --> 00:16:49.480
+playground script tangle to my real file,
+
+00:16:49.480 --> 00:16:51.440
+I need this concept of
+
+00:16:51.440 --> 00:16:52.760
+some sort of workspace directory.
+
+00:16:52.760 --> 00:16:54.880
+And a workspace directory
+
+00:16:54.880 --> 00:16:58.280
+what I really want is a variable that is tied to
+
+00:16:58.280 --> 00:17:02.674
+where in my document hierarchy this appears.
+
+00:17:02.674 --> 00:17:06.680
+I want a dynamically scoped variable
+
+00:17:06.680 --> 00:17:08.240
+that's scoped to my document.
+
+00:17:08.240 --> 00:17:12.560
+And you can do that. For example, in this case,
+
+00:17:12.560 --> 00:17:15.280
+I have in my properties
+
+00:17:15.280 --> 00:17:20.080
+a key value declared `workspace-directory`,
+
+00:17:20.080 --> 00:17:22.080
+[it] goes into a temp directory.
+
+00:17:22.080 --> 00:17:24.480
+And here, by running `org-get-entry`
+
+00:17:24.480 --> 00:17:25.800
+starting at the current point,
+
+00:17:25.800 --> 00:17:27.507
+find `workspace-directory`
+
+00:17:27.507 --> 00:17:28.760
+with a second parameter 1.
+
+00:17:28.760 --> 00:17:31.520
+You can see down in the minibuffer,
+
+00:17:31.520 --> 00:17:37.174
+goes to `/tmp/go-batsy-playground/`.
+
+00:17:37.174 --> 00:17:39.720
+This right here is going to override
+
+00:17:42.040 --> 00:17:44.307
+the `workspace-directory` at the top level,
+
+00:17:44.307 --> 00:17:47.607
+which is dot. Dot means here.
+
+00:17:47.607 --> 00:17:48.880
+That's what makes sure
+
+00:17:48.880 --> 00:17:50.680
+that the rest of these tangle to
+
+00:17:50.680 --> 00:17:54.560
+that go-batsy file right relevant to here.
+
+00:17:54.560 --> 00:17:55.740
+And that does mean that we need
+
+00:17:55.740 --> 00:17:58.207
+a little bit more complex thing here.
+
+00:17:58.207 --> 00:18:01.760
+So, we're saying go ahead and `org-entry-get`
+
+00:18:01.760 --> 00:18:04.800
+the `workspace-directory`.
+
+00:18:04.800 --> 00:18:06.807
+If anyone hasn't seen this syntax,
+
+00:18:06.807 --> 00:18:16.040
+this dash arrow is from the dash.el library,
+
+00:18:16.040 --> 00:18:19.240
+which is basically a big library of all
+
+00:18:19.240 --> 00:18:20.940
+the utility functions that you wish
+
+00:18:20.940 --> 00:18:22.880
+Emacs Lisp had. They're well-named.
+
+00:18:22.880 --> 00:18:24.480
+I highly, highly recommend it.
+
+00:18:24.480 --> 00:18:26.080
+This is the threading operator.
+
+00:18:26.080 --> 00:18:28.200
+So, we're just basically taking it,
+
+00:18:28.200 --> 00:18:29.760
+getting the `workspace-directory`,
+
+00:18:29.760 --> 00:18:32.307
+if it happens to be dot, then we're just going to
+
+00:18:32.307 --> 00:18:33.320
+return the current directory,
+
+00:18:33.320 --> 00:18:36.000
+otherwise whatever directory said.
+
+00:18:36.000 --> 00:18:39.240
+And then I want to just take a moment
+
+00:18:39.240 --> 00:18:41.280
+and look at the rest of this structure.
+
+00:18:41.280 --> 00:18:43.080
+So, `workspace-directory` we talked about.
+
+00:18:43.080 --> 00:18:46.774
+`header-args` if you noticed, none of my
+
+00:18:46.774 --> 00:18:48.707
+code blocks for the most part
+
+00:18:48.707 --> 00:18:50.840
+have any header arguments.
+
+00:18:50.840 --> 00:18:53.174
+You can drop the `header-args` property,
+
+00:18:53.174 --> 00:18:55.607
+which is going to be header arguments
+
+00:18:55.607 --> 00:18:57.840
+that are added automatically
+
+00:18:57.840 --> 00:19:03.407
+to all source code blocks under this heading.
+
+00:19:03.407 --> 00:19:05.407
+`header-args+`. Well,
+
+00:19:05.407 --> 00:19:06.540
+sometimes you don't want to type…
+
+00:19:06.540 --> 00:19:07.507
+you have a bunch of args,
+
+00:19:07.507 --> 00:19:08.240
+you don't want to type them out
+
+00:19:08.240 --> 00:19:09.440
+in this one big line.
+
+00:19:09.440 --> 00:19:11.040
+So, you basically are adding a new header-arg
+
+00:19:13.320 --> 00:19:15.407
+to the existing list of header.
+
+00:19:15.407 --> 00:19:18.160
+And then you can have header-args that are specific
+
+00:19:18.160 --> 00:19:20.440
+to certain languages, like, for example,
+
+00:19:20.440 --> 00:19:21.560
+this `default-directory` var is going to be set
+
+00:19:23.720 --> 00:19:25.200
+for all Emacs Lisps.
+
+00:19:25.200 --> 00:19:29.574
+And for all Arduinos, evaluation will be disabled,
+
+00:19:29.574 --> 00:19:32.440
+and tangling will be automatically enabled.
+
+00:19:32.440 --> 00:19:35.307
+These are just some of the workflows that become
+
+00:19:35.307 --> 00:19:38.320
+useful when you're actually doing the coding.
+
+00:19:38.320 --> 00:19:41.374
+[Future George]: Oh, hello again!
+
+00:19:41.374 --> 00:19:45.307
+Me from the six months from now.
+
+00:19:45.307 --> 00:19:49.107
+[George]: Cool.
+
+00:19:49.107 --> 00:19:51.000
+[Future George]: The talk got over, people liked it,
+
+00:19:51.000 --> 00:19:53.040
+thought the pacing was all over the place.
+
+00:19:53.040 --> 00:19:56.360
+[George]: Yeah, I had to cut two thirds of it,
+
+00:19:56.360 --> 00:19:59.800
+going to be filling in those gaps in the Etherpad.
+
+00:19:59.800 --> 00:20:03.520
+[Future George]: And the editing was uneven, at best.
+
+00:20:03.520 --> 00:20:05.507
+[George]: I got way better at it
+
+00:20:05.507 --> 00:20:06.680
+as I worked on it, didn't I?
+
+00:20:06.680 --> 00:20:09.960
+Kdenlive is pretty cool.
+
+00:20:09.960 --> 00:20:13.540
+But yeah, I wanted to take a shot at
+
+00:20:13.540 --> 00:20:16.040
+something different, and I figured if anyone can
+
+00:20:16.040 --> 00:20:17.760
+appreciate trying something different,
+
+00:20:17.760 --> 00:20:20.120
+it's EmacsConf, right?
+
+00:20:20.120 --> 00:20:21.520
+I hope people found it useful.
+
+00:20:21.520 --> 00:20:22.600
+[Future George]: Yeah, some did.
+
+00:20:22.600 --> 00:20:26.920
+Oh, I should tell you about the coming Orca war.
diff --git a/2022/cfp.md b/2022/cfp.md
new file mode 100644
index 00000000..5b07d426
--- /dev/null
+++ b/2022/cfp.md
@@ -0,0 +1,229 @@
+[[!meta title="Call for Participation"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua,
+David Bremner<br />
+Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane<br />
+Copyright &copy; 2022 Amin Bandali"]]
+<!-- cfp.md is exported from cfp.org, please modify that instead. -->
+
+
+# Call for Participation
+
+[EmacsConf 2022](https://emacsconf.org/2022/) will be a virtual conference on **December 3 and 4,
+2022 (Sat-Sun)**. If you'd like to present at the conference, please
+[submit your proposal](https://emacsconf.org/2022/cfp/) by **September 30, 2022**.
+
+EmacsConf 2022 is about the joy of [Emacs](https://www.gnu.org/software/emacs/) and Emacs Lisp. Come share
+your experiments and adventures with the Emacs text editor / operating
+system / way of life! We welcome speakers of **all backgrounds** and
+**all levels of experience**, including newcomers giving their first
+talk. What have you found exciting about Emacs lately? What do you
+wish someone had told you when you were starting out? What part of
+your workflow might inspire someone to get into Emacs or go deeper?
+
+A great way to get started with writing a proposal is to start by
+exploring the programs from previous years: [2021](https://emacsconf.org/2021/schedule/), [2020](https://emacsconf.org/2020/schedule/), [2019](https://emacsconf.org/2019/schedule/), [2015](https://emacsconf.org/2015/schedule/),
+[2013](https://emacsconf.org/2013/#program). You might also find some neat ideas on the [ideas](https://emacsconf.org/2022/ideas/) page. Feel
+free to add yours there too! If you're still not sure, come by our
+IRC channel `#emacsconf` on `irc.libera.chat` and say hi. You can
+join the chat using [your favourite IRC client](ircs://irc.libera.chat:6697/emacsconf), or by visiting
+[chat.emacsconf.org](https://chat.emacsconf.org) in your web browser.
+
+All kinds of people use Emacs for all kinds of things. We'd love it
+if EmacsConf 2022 could highlight interesting perspectives and reflect
+the diversity of our community. If you know someone who might have
+a good idea for a talk, please reach out to them and encourage them to
+submit a proposal. Many people (especially from underrepresented
+groups such as women, people of colour, non-developers, etc.) might
+not consider themselves proficient enough to share their thoughts.
+If you let them know that you value their knowledge and experiences,
+and maybe even suggest something that you think others would like to
+hear about, they may realize that they do have something worth sharing
+and that we would love to hear from them.
+
+
+# Important dates
+
+For EmacsConf 2022, we are planning for 9am to 5pm Toronto/EST
+(2pm-10pm UTC) on December 3 and 4. Depending on people's
+availability, it might be two half-days.
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">CFP opens</td>
+<td class="org-left">July 17, 2022</td>
+</tr>
+
+
+<tr>
+<td class="org-left">CFP closes</td>
+<td class="org-left">September 30, 2022</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Speaker notifications</td>
+<td class="org-left">October 15, 2022</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Schedule published</td>
+<td class="org-left">October 31, 2022</td>
+</tr>
+
+
+<tr>
+<td class="org-left">EmacsConf 2022!</td>
+<td class="org-left">December 3 and 4, 2022</td>
+</tr>
+</tbody>
+</table>
+
+If you are not available during the conference itself but you have a
+neat idea that you'd like to share, please propose it anyway! You can
+always handle questions after the conference, and we might even be
+able to coordinate with other Emacs meetups for regional events (if
+you're an Emacs meetup organizer and would like to make this happen
+let's [get in touch](https://emacsconf.org/contact/)!).
+
+Please note that although we will try our best to stick to the above
+dates in the coming months, given the current state of the world, we
+may have to move things around a bit in case of unforeseen events.
+Thank you for your patience and understanding.
+
+<a name="formats"></a>
+
+
+# Talk formats
+
+We'd like EmacsConf 2022 to inspire lots of different people to
+explore lots of different things in Emacs. We hope to put together a
+stream of quick ideas followed by lots of conversation over IRC and/or
+Q&A sessions, with occasional deep dives into topics that many people
+might find interesting or useful.
+
+As you think about your talk, consider what you can share in:
+
+- **Up to 10 minutes total:** What is the core idea? What do you want
+ people to do or remember? You can show just enough to get people
+ interested and then point them to where they can learn more
+ afterwards. You can answer questions over IRC, the pad, or the
+ wiki, and there's no limit to how long that conversation can go.
+
+- **Up to 20 minutes total:** How would you flesh out some of the points
+ from your 5-10 minute presentation? How can you show the pieces
+ working together?
+
+- **Up to 40 minutes total:** What would benefit from a deep dive?
+ How do you keep it engaging?
+
+When writing your proposal, please write an outline of what you plan
+to talk about if you have 5-10 minutes. If you'd like to propose a
+longer talk, outline what you might include if you had more time to
+present (up to 40 minutes, including Q&A).
+
+Here's an example for a potentially 40-minute talk:
+
+- 5-10 minutes: quick demo of the abc package working together with
+ xyz package.
+- 20 minutes: same as above, with some customization options to
+ accommodate a different workflow.
+- 40 minutes: all of the above, including modifying the behaviour of
+ the package in order to add something new.
+
+This flexibility would help us in devising the conference schedule so
+that as many people as possible could get a chance to present their
+ideas, while still allowing for featuring longer deep dive talks.
+
+Other session formats such as tutorials, workshops, and hangouts are
+welcome as well, in case you would find those other formats preferable
+to a traditional talk format. If you're interested in these or other
+session types, please let us know [publicly](https://lists.gnu.org/mailman/listinfo/emacsconf-org) or [privately](https://lists.gnu.org/mailman/listinfo/emacsconf-org-private). We'll be
+happy to work something out with you.
+
+
+# Preparing and submitting your proposal
+
+We're aware that it can be challenging and intimidating to prepare and
+submit a proposal to a conference, and we want to help make it less
+so. Come say hi to us on our IRC channel `#emacsconf` on
+`irc.libera.chat`, and we'd be happy to try and answer any questions
+or concerns you may have about writing your proposal or submitting it.
+We'd also love to receive suggestions on how we can best help you and
+other prospective speakers interested in giving a talk at EmacsConf.
+
+Once you're ready to submit your proposal, the [submit](https://emacsconf.org/2022/submit/) page has the
+instructions on how to submit your talk. The submissions will then be
+reviewed by a selection committee (please [let us know](https://emacsconf.org/contact/) if you would
+like to help review submissions as part of this committee).
+
+If your talk is approved, we'd love it if you could help us make sure
+the conference runs smoothly. After we email you with the time
+allotted for your talk, we'll ask you to
+
+- prepare a prerecording of your talk, or record it with our help if
+ that'd be easier for you; and
+
+- schedule a short tech-check if you'd like to be able to answer
+ questions in a live session.
+
+Don't forget to subscribe to our main mailing list, [emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss),
+for discussion and announcements about the EmacsConf conference.
+
+If you'd like to propose something other than a talk, like restreaming
+the conference, you can also use this CFP to share your ideas with us.
+
+We look forward to your ideas and submissions!
+
+
+# Getting involved
+
+If you would like to help with the conference (planning the sessions,
+reviewing proposals, helping with infrastructure, making sessions more
+accessible, editing video transcripts, etc.), see our [planning](https://emacsconf.org/2022/planning/) page
+and come say hi to us at `#emacsconf` on `irc.libera.chat`.
+
+Importantly, as EmacsConf continues to grow and receive increasingly
+more talk/session proposal submissions each year, we have thought
+about adding multiple parallel tracks during the conference days to
+accommodate the large number of sessions. However, we're currently
+a very small team and we would need your help to do it! If you're
+interested in helping stream a parallel EmacsConf track and have a
+reliable internet connection with decent speed and bandwidth, please
+[get in touch](https://emacsconf.org/contact/) with us so we can help get you set up for streaming.
+We'd also likely need more volunteers still for each track, for
+example a host for that track to announce the next talk (this can also
+be done by the streamer if the streamer is interested and able to) and
+another volunteer to help check in speakers of upcoming live sessions.
+
+If you are interested and able to help with any of the above, please
+reach out to us; we'd love to have your help!
+
+In addition to the [emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss) list, feel free to subscribe to
+[emacsconf-org](https://lists.gnu.org/mailman/listinfo/emacsconf-org) as well, for discussions related to organizing the
+conference by the EmacsConf organizers and volunteers.
+
+We'd really appreciate your help in making EmacsConf 2022 the best one
+so far!
+
+
+# Commitment to freedom
+
+We remain fully committed to freedom, and we will continue
+using our infrastructure and streaming setup consisting entirely
+of [free software](https://www.gnu.org/philosophy/free-sw.html), much like previous EmacsConf conferences.
+Articles and documentation about the EmacsConf infrastructure are
+still underway, and will be announced on the emacsconf-discuss list
+when available. If you are curious about the EmacsConf infrastructure
+or are interested in working on it, please join our `#emacsconf-infra`
+channel on `irc.libera.chat` and say hi!
+
diff --git a/2022/cfp.org b/2022/cfp.org
new file mode 100644
index 00000000..f2126250
--- /dev/null
+++ b/2022/cfp.org
@@ -0,0 +1,242 @@
+#+title: EmacsConf 2022
+#+subtitle: Online Conference
+#+date: December 3 and 4, 2022
+#+options: author:nil toc:nil
+
+#+begin_export md
+[[!meta title="Call for Participation"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua,
+David Bremner<br />
+Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane<br />
+Copyright &copy; 2022 Amin Bandali"]]
+<!-- cfp.md is exported from cfp.org, please modify that instead. -->
+#+end_export
+
+* COMMENT How to export this file :noexport:
+
+As of the time of writing this document (Org mode version 9.3.7), the
+Org links library (=ol.el=) does not yet recognize =ircs= link types,
+and will throw an error if you try to export a file containing them,
+such as this file.
+
+To work around that, you can use something along the lines of the
+Emacs Lisp code below, by either adding it to your init file, or by
+putting the point in the code block and hitting =C-c C-v e= (that is,
+hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to
+evaluate the code, working around the issue only for the current
+session.
+
+#+begin_src emacs-lisp :results silent
+(org-link-set-parameters
+ "ircs"
+ :export
+ (lambda (link description format)
+ "Export an ircs link.
+See `org-link-parameters' for details about LINK, DESCRIPTION and
+FORMAT."
+ (let ((desc (or description link)))
+ (pcase format
+ (`html (format "<a href=\"ircs:%s\">%s</a>" link desc))
+ (`md (format "[%s](ircs:%s)" desc link))
+ (_ nil)))))
+#+end_src
+
+[[elisp:(org-md-export-to-markdown)][Export this file to Markdown]]
+
+* Call for Participation
+
+[[https://emacsconf.org/2022/][EmacsConf 2022]] will be a virtual conference on *December 3 and 4,
+2022 (Sat-Sun)*. If you'd like to present at the conference, please
+[[https://emacsconf.org/2022/cfp/][submit your proposal]] by *September 30, 2022*.
+
+EmacsConf 2022 is about the joy of [[https://www.gnu.org/software/emacs/][Emacs]] and Emacs Lisp. Come share
+your experiments and adventures with the Emacs text editor / operating
+system / way of life! We welcome speakers of *all backgrounds* and
+*all levels of experience*, including newcomers giving their first
+talk. What have you found exciting about Emacs lately? What do you
+wish someone had told you when you were starting out? What part of
+your workflow might inspire someone to get into Emacs or go deeper?
+
+A great way to get started with writing a proposal is to start by
+exploring the programs from previous years: [[https://emacsconf.org/2021/schedule/][2021]], [[https://emacsconf.org/2020/schedule/][2020]], [[https://emacsconf.org/2019/schedule/][2019]], [[https://emacsconf.org/2015/schedule/][2015]],
+[[https://emacsconf.org/2013/#program][2013]]. You might also find some neat ideas on the [[https://emacsconf.org/2022/ideas/][ideas]] page. Feel
+free to add yours there too! If you're still not sure, come by our
+IRC channel =#emacsconf= on =irc.libera.chat= and say hi. You can
+join the chat using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by visiting
+[[https://chat.emacsconf.org][chat.emacsconf.org]] in your web browser.
+
+All kinds of people use Emacs for all kinds of things. We'd love it
+if EmacsConf 2022 could highlight interesting perspectives and reflect
+the diversity of our community. If you know someone who might have
+a good idea for a talk, please reach out to them and encourage them to
+submit a proposal. Many people (especially from underrepresented
+groups such as women, people of colour, non-developers, etc.) might
+not consider themselves proficient enough to share their thoughts.
+If you let them know that you value their knowledge and experiences,
+and maybe even suggest something that you think others would like to
+hear about, they may realize that they do have something worth sharing
+and that we would love to hear from them.
+
+* Important dates
+
+For EmacsConf 2022, we are planning for 9am to 5pm Toronto/EST
+(2pm-10pm UTC) on December 3 and 4. Depending on people's
+availability, it might be two half-days.
+
+| CFP opens | July 17, 2022 |
+| CFP closes | September 30, 2022 |
+| Speaker notifications | October 15, 2022 |
+| Schedule published | October 31, 2022 |
+| EmacsConf 2022! | December 3 and 4, 2022 |
+
+If you are not available during the conference itself but you have a
+neat idea that you'd like to share, please propose it anyway! You can
+always handle questions after the conference, and we might even be
+able to coordinate with other Emacs meetups for regional events (if
+you're an Emacs meetup organizer and would like to make this happen
+let's [[https://emacsconf.org/contact/][get in touch]]!).
+
+Please note that although we will try our best to stick to the above
+dates in the coming months, given the current state of the world, we
+may have to move things around a bit in case of unforeseen events.
+Thank you for your patience and understanding.
+
+#+md: <a name="formats"></a>
+* Talk formats
+
+We'd like EmacsConf 2022 to inspire lots of different people to
+explore lots of different things in Emacs. We hope to put together a
+stream of quick ideas followed by lots of conversation over IRC and/or
+Q&A sessions, with occasional deep dives into topics that many people
+might find interesting or useful.
+
+As you think about your talk, consider what you can share in:
+
+- *Up to 10 minutes total:* What is the core idea? What do you want
+ people to do or remember? You can show just enough to get people
+ interested and then point them to where they can learn more
+ afterwards. You can answer questions over IRC, the pad, or the
+ wiki, and there's no limit to how long that conversation can go.
+
+- *Up to 20 minutes total:* How would you flesh out some of the points
+ from your 5-10 minute presentation? How can you show the pieces
+ working together?
+
+- *Up to 40 minutes total:* What would benefit from a deep dive?
+ How do you keep it engaging?
+
+When writing your proposal, please write an outline of what you plan
+to talk about if you have 5-10 minutes. If you'd like to propose a
+longer talk, outline what you might include if you had more time to
+present (up to 40 minutes, including Q&A).
+
+Here's an example for a potentially 40-minute talk:
+
+- 5-10 minutes: quick demo of the abc package working together with
+ xyz package.
+- 20 minutes: same as above, with some customization options to
+ accommodate a different workflow.
+- 40 minutes: all of the above, including modifying the behaviour of
+ the package in order to add something new.
+
+This flexibility would help us in devising the conference schedule so
+that as many people as possible could get a chance to present their
+ideas, while still allowing for featuring longer deep dive talks.
+
+Other session formats such as tutorials, workshops, and hangouts are
+welcome as well, in case you would find those other formats preferable
+to a traditional talk format. If you're interested in these or other
+session types, please let us know [[https://lists.gnu.org/mailman/listinfo/emacsconf-org][publicly]] or [[https://lists.gnu.org/mailman/listinfo/emacsconf-org-private][privately]]. We'll be
+happy to work something out with you.
+
+* Preparing and submitting your proposal
+
+We're aware that it can be challenging and intimidating to prepare and
+submit a proposal to a conference, and we want to help make it less
+so. Come say hi to us on our IRC channel =#emacsconf= on
+=irc.libera.chat=, and we'd be happy to try and answer any questions
+or concerns you may have about writing your proposal or submitting it.
+We'd also love to receive suggestions on how we can best help you and
+other prospective speakers interested in giving a talk at EmacsConf.
+
+Once you're ready to submit your proposal, the [[https://emacsconf.org/2022/submit/][submit]] page has the
+instructions on how to submit your talk. The submissions will then be
+reviewed by a selection committee (please [[https://emacsconf.org/contact/][let us know]] if you would
+like to help review submissions as part of this committee).
+
+If your talk is approved, we'd love it if you could help us make sure
+the conference runs smoothly. After we email you with the time
+allotted for your talk, we'll ask you to
+
+- prepare a prerecording of your talk, or record it with our help if
+ that'd be easier for you; and
+
+- schedule a short tech-check if you'd like to be able to answer
+ questions in a live session.
+
+Don't forget to subscribe to our main mailing list, [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]],
+for discussion and announcements about the EmacsConf conference.
+
+If you'd like to propose something other than a talk, like restreaming
+the conference, you can also use this CFP to share your ideas with us.
+
+We look forward to your ideas and submissions!
+
+* Getting involved
+
+If you would like to help with the conference (planning the sessions,
+reviewing proposals, helping with infrastructure, making sessions more
+accessible, editing video transcripts, etc.), see our [[https://emacsconf.org/2022/planning/][planning]] page
+and come say hi to us at =#emacsconf= on =irc.libera.chat=.
+
+Importantly, as EmacsConf continues to grow and receive increasingly
+more talk/session proposal submissions each year, we have thought
+about adding multiple parallel tracks during the conference days to
+accommodate the large number of sessions. However, we're currently
+a very small team and we would need your help to do it! If you're
+interested in helping stream a parallel EmacsConf track and have a
+reliable internet connection with decent speed and bandwidth, please
+[[https://emacsconf.org/contact/][get in touch]] with us so we can help get you set up for streaming.
+We'd also likely need more volunteers still for each track, for
+example a host for that track to announce the next talk (this can also
+be done by the streamer if the streamer is interested and able to) and
+another volunteer to help check in speakers of upcoming live sessions.
+
+If you are interested and able to help with any of the above, please
+reach out to us; we'd love to have your help!
+
+In addition to the [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]] list, feel free to subscribe to
+[[https://lists.gnu.org/mailman/listinfo/emacsconf-org][emacsconf-org]] as well, for discussions related to organizing the
+conference by the EmacsConf organizers and volunteers.
+
+We'd really appreciate your help in making EmacsConf 2022 the best one
+so far!
+
+* Commitment to freedom
+
+We remain fully committed to freedom, and we will continue
+using our infrastructure and streaming setup consisting entirely
+of [[https://www.gnu.org/philosophy/free-sw.html][free software]], much like previous EmacsConf conferences.
+Articles and documentation about the EmacsConf infrastructure are
+still underway, and will be announced on the emacsconf-discuss list
+when available. If you are curious about the EmacsConf infrastructure
+or are interested in working on it, please join our =#emacsconf-infra=
+channel on =irc.libera.chat= and say hi!
+
+* COMMENT Copyright & License
+
+Copyright (c) 2020 Amin Bandali, Sacha Chua, David Bremner
+Copyright (c) 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane
+Copyright (c) 2022 Amin Bandali
+
+The EmacsConf 2022 Call for Participation is part of the EmacsConf
+wiki, and is dual-licensed under the terms of the Creative Commons
+Attribution-ShareAlike 4.0 International Public License; and the GNU
+General Public License as published by the Free Software Foundation,
+either version 3 of the License, or (at your option) any later
+version.
+
+A copy of these two licenses is available on the EmacsConf wiki, in
+the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
diff --git a/2022/decisions.md b/2022/decisions.md
new file mode 100644
index 00000000..d9bfb5b1
--- /dev/null
+++ b/2022/decisions.md
@@ -0,0 +1,90 @@
+
+# Table of Contents
+
+- [How do we want to schedule talks?](#schedule)
+ - [Notes](#schedule-notes)
+ - [Option I: Drop back down to one track](#back-to-one)
+ - [Option H: Gen starts with high-level use cases, second day has Hyperbole](#gen-to-specific)
+ - [Option A: General and development tracks - 15/25 buffers, 60 min lunch, dev starts at 10](#gen-and-dev)
+
+
+<a id="schedule"></a>
+
+# TODO How do we want to schedule talks?
+
+
+<a id="schedule-notes"></a>
+
+## Notes
+
+- Green: no availability constraints
+- Red: invalid because of availability constraint
+- Dashed: IRC/pad Q&A, not live
+
+Host role:
+
+- Give the speaker a heads-up before their Q&A session begins
+- If needed, read the questions from the pad to the speaker (Many speakers are comfortable reading the pad on their own.)
+- Give the speaker time warnings before the end of their Q&A session on the stream. Interested participants can continue
+
+Streamer role:
+
+- Switch between playing the prerec and joining the Q&A session
+- Adjust audio volume at the beginning of the Q&A session
+- (optional) Switch scene layouts to focus on different things
+
+Shifts will be Sat AM, Sat PM, Sun AM, or Sun PM per track. People can take multiple shifts.
+
+Updating the images requires `emacsconf-schedule.el` from
+`git@git.emacsconf.org:emacsconf-el` and `emacsconf-org-file` set to
+wherever the private conf org file is.
+
+<span class="timestamp-wrapper"><span class="timestamp">[2022-10-04 Tue]</span></span>
+
+- Added option H. General starts with general Org use cases and moves on to more niche things on day 2.
+
+<span class="timestamp-wrapper"><span class="timestamp">[2022-10-04 Tue]</span></span>
+
+- Discussed option G with zaeph on #emacsconf-org. zaeph prefers
+ option A over option G because it gives people more choices -
+ they can hop from talk to talk.
+
+<span class="timestamp-wrapper"><span class="timestamp">[2022-10-03 Mon]</span></span>
+
+- Discussed with bandali and zaeph on #emacsconf-org
+- Decided on Option A with B, C, or F as fallbacks depending on volunteer roster
+- Better for the viewers and the volunteers
+
+
+<a id="back-to-one"></a>
+
+## Option I: Drop back down to one track
+
+- 45 minutes lunch, 5 minutes between talks, two 5-minute breaks per day
+- Color indicates talk status (gray: waiting, light yellow: processing, yellow: to assign, light green: captioning, green: captioned and ready)
+
+- ![img](schedule-option-back-to-one.svg)
+
+
+<a id="gen-to-specific"></a>
+
+## Option H: Gen starts with high-level use cases, second day has Hyperbole
+
+- compared to A, general audience will be more interested in Org use cases than in Hyperbole, and then we can look at specific techniques on day 2
+
+- ![img](schedule-option-gen-to-specific.svg)
+
+
+<a id="gen-and-dev"></a>
+
+## Option A: General and development tracks - 15/25 buffers, 60 min lunch, dev starts at 10
+
+- Lots of space for Q&A and hallway conversations
+- People can probably find lots of sessions that interest them throughout the day
+- If they decide a talk isn't for them, they can switch and catch another one
+- Stagger live Q&A sessions so that just in case we have only one streamer, they can bounce back and forth
+- Can give some talks extra time if we want
+- Could use dedicated host/streamer(s) for dev track; if not, they can probably pick up questions themselves
+
+- ![img](schedule-option-gen-and-dev.svg)
+
diff --git a/2022/decisions/index.org b/2022/decisions/index.org
new file mode 100644
index 00000000..75f617ec
--- /dev/null
+++ b/2022/decisions/index.org
@@ -0,0 +1,327 @@
+#+EXPORT_FILE_NAME: ../decisions.md
+#+TOC: headlines 3
+
+* TODO How do we want to schedule talks?
+:PROPERTIES:
+:CUSTOM_ID: schedule
+:END:
+
+** Notes
+:PROPERTIES:
+:CUSTOM_ID: schedule-notes
+:END:
+
+- Green: no availability constraints
+- Red: invalid because of availability constraint
+- Dashed: IRC/pad Q&A, not live
+
+Host role:
+- Give the speaker a heads-up before their Q&A session begins
+- If needed, read the questions from the pad to the speaker (Many speakers are comfortable reading the pad on their own.)
+- Give the speaker time warnings before the end of their Q&A session on the stream. Interested participants can continue
+
+Streamer role:
+- Switch between playing the prerec and joining the Q&A session
+- Adjust audio volume at the beginning of the Q&A session
+- (optional) Switch scene layouts to focus on different things
+
+Shifts will be Sat AM, Sat PM, Sun AM, or Sun PM per track. People can take multiple shifts.
+
+Updating the images requires =emacsconf-schedule.el= from
+=git@git.emacsconf.org:emacsconf-el= and =emacsconf-org-file= set to
+wherever the private conf org file is.
+
+[2022-10-04 Tue]
+- Added option H. General starts with general Org use cases and moves on to more niche things on day 2.
+
+[2022-10-04 Tue]
+- Discussed option G with zaeph on #emacsconf-org. zaeph prefers
+ option A over option G because it gives people more choices -
+ they can hop from talk to talk.
+
+[2022-10-03 Mon]
+- Discussed with bandali and zaeph on #emacsconf-org
+- Decided on Option A with B, C, or F as fallbacks depending on volunteer roster
+- Better for the viewers and the volunteers
+** Option J: One track interleaved
+
+#+begin_src emacs-lisp :exports results :var filename="schedule-option-back-to-one-interleaved.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints
+ '(("LUNCH" "11:30" "13:30")
+ ("saturday closing remarks" "16:30" "18:00")
+ ("sunday closing remarks" "16:30" "18:00")))
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("Saturday, December 3" :start "2022-12-03 09:00")
+ sat-open
+journalism school treesitter handwritten lspbridge science asmblox buddy wayland
+lunch
+meetups sqlite buttons mail realestate maint health eev python haskell sat-close
+ ("Sunday, December 4" :start "2022-12-04 09:00")
+ sun-open
+survey orgyear rolodex rde orgsuperlinks justl orgvm rms
+lunch
+detached hyperorg eshell workflows async grail
+jupyter dbus indieweb devel localizing
+fanfare
+sun-close)))
+ (emacsconf-schedule-break-time 0)
+ (emacsconf-schedule-lunch-time 30)
+ (emacsconf-schedule-default-buffer-minutes 5)
+ (emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status))
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 5)
+ (emacsconf-schedule-strategies '((lambda (info) (mapcar (lambda (o) (plist-put o :track "General")) info))
+ emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-video-time
+ emacsconf-schedule-round-start-to-five
+ emacsconf-schedule-allocate-buffer-time-at-most-max-time))
+)
+#+end_src
+
+#+RESULTS:
+:results:
+- [[file:schedule-option-back-to-one-interleaved.svg]]
+:end:
+
+Some options:
+- back to one track; Q&A on alternate stream
+ - main orgas on main stream?
+ - schedule thrashing, limited time between talks
+ - lots of live talks
+- two tracks, sachac runs around behind the scenes
+- *two tracks, sachac starts off doing the streaming with other people shadowing*
+ - someone else needs to do checkin and my other shifts
+
+
+** Option I: Drop back down to one track
+:PROPERTIES:
+:CUSTOM_ID: back-to-one
+:END:
+
+- 45 minutes lunch, 5 minutes between talks, two 5-minute breaks per day
+- Color indicates talk status (gray: waiting, light yellow: processing, yellow: to assign, light green: captioning, green: captioned and ready)
+
+#+begin_src emacs-lisp :exports results :var filename="schedule-option-back-to-one.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints
+ '(("LUNCH" "11:30" "13:30")
+ ("saturday closing remarks" "16:30" "18:00")
+ ("sunday closing remarks" "16:30" "18:00")))
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("Saturday, December 3" :start "2022-12-03 09:00")
+ sat-open
+journalism handwritten rolodex
+science
+break buddy meetups buttons devel workflows lunch health realestate indieweb orgvm orgsuperlinks
+break
+ school jupyter community hyperorg localizing fanfare asmblox
+ sat-close
+ ("Sunday, December 4" :start "2022-12-04 09:00")
+ sun-open
+ survey orgyear rde lspbridge break treesitter
+ eshell justl
+ rms lunch
+ sqlite detached
+ async eev python mail break maint dbus wayland haskell grail
+ sun-close)))
+ (emacsconf-schedule-break-time 0)
+ (emacsconf-schedule-lunch-time 45)
+ (emacsconf-schedule-default-buffer-minutes 5)
+ (emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status))
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 5)
+
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-video-time
+ emacsconf-schedule-round-start-to-five
+ emacsconf-schedule-allocate-buffer-time-at-most-max-time))
+)
+#+end_src
+
+#+RESULTS:
+:results:
+- localizing: Starts at 15:58 before 16:00
+- haskell: Starts at 15:59 before 16:00
+- [[file:schedule-option-back-to-one.svg]]
+:end:p
+
+** Option H: Gen starts with high-level use cases, second day has Hyperbole
+:PROPERTIES:
+:CUSTOM_ID: gen-to-specific
+:END:
+
+- compared to A, general audience will be more interested in Org use cases than in Hyperbole, and then we can look at specific techniques on day 2
+
+#+begin_src emacs-lisp :exports results :var filename="schedule-option-gen-to-specific.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints '(("LUNCH" "11:30" "13:30")))
+ (emacsconf-schedule-default-buffer-minutes 15)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 25)
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("GEN Saturday, December 3" . "2022-12-03 09:00")
+ "Saturday opening remarks"
+ journalism
+ school
+ handwritten
+ (break :track "General")
+ science
+ (lunch :start "12:00" :track "General")
+ meetups
+ buddy
+ community
+ (break :track "General")
+ realestate
+ health
+ jupyter
+
+ ("Saturday closing remarks" . "2022-12-03 17:00")
+ ("GEN Sunday, December 4" . "2022-12-04 09:00")
+ "Sunday opening remarks"
+ survey
+ orgyear
+ rolodex
+ (break :track "General")
+ links buttons
+ (lunch :start "12:00" :track "General")
+ hyperorg
+ workflows
+
+ (break :track "General")
+ orgvm
+ indieweb
+ fanfare
+ ("Sunday closing remarks" . "2022-12-04 17:00")
+ ("DEV Saturday, December 3" . "2022-12-03 10:00")
+ localizing treesitter lspbridge
+ (lunch :start "12:00" :track "Development")
+ sqlite
+
+mail
+(break :track "Development")
+eev python
+maint (haskell)
+ ("DEV Sunday, December 4" . "2022-12-04 10:00")
+ rde
+ justl
+tramp
+(lunch :track "Development" :start "12:00")
+detached
+eshell
+async
+(break :track "Development")
+asmblox
+dbus
+wayland
+)))
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-schedule-max-time 30)
+ (emacsconf-schedule-tweaked-allocations '(("indieweb" . 20)
+ ("maint" . 20)
+ ("workflows" . 20)))
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-buffer-time
+ emacsconf-schedule-tweak-allocations))
+ (tracks '((:label "Saturday"
+ :start "2022-12-03 9:00"
+ :end "2022-12-03 18:00"
+ :tracks ("General" "Development"))
+ (:label "Sunday"
+ :start "2022-12-04 9:00"
+ :end "2022-12-04 18:00"
+ :tracks ("General" "Development")))))
+
+#+end_src
+
+#+RESULTS:
+:results:
+- [[file:schedule-option-gen-to-specific.svg]]
+:end:
+
+** Option A: General and development tracks - 15/25 buffers, 60 min lunch, dev starts at 10
+:PROPERTIES:
+:CUSTOM_ID: gen-and-dev
+:END:
+
+- Lots of space for Q&A and hallway conversations
+- People can probably find lots of sessions that interest them throughout the day
+- If they decide a talk isn't for them, they can switch and catch another one
+- Stagger live Q&A sessions so that just in case we have only one streamer, they can bounce back and forth
+- Can give some talks extra time if we want
+- Could use dedicated host/streamer(s) for dev track; if not, they can probably pick up questions themselves
+#+begin_src emacs-lisp :exports results :var filename="schedule-option-gen-and-dev.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints '(("LUNCH" "11:30" "13:30")))
+ (emacsconf-schedule-default-buffer-minutes 15)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 25)
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("GEN Saturday, December 3" . "2022-12-03 09:00")
+ "Saturday opening remarks"
+ survey orgyear rolodex
+ (break . "10:45")
+ links buttons
+ (lunch . "12:00")
+ hyperorg realestate health
+ break
+ jupyter workflows
+
+ ("Saturday closing remarks" . "2022-12-03 17:00")
+ ("GEN Sunday, December 4" . "2022-12-04 09:00")
+ "Sunday opening remarks"
+ journalism
+ handwritten
+ break
+ school science lunch
+ meetups buddy
+ community
+break orgvm
+ indieweb fanfare
+ ("Sunday closing remarks" . "2022-12-04 17:00")
+ ("DEV Saturday, December 3" . "2022-12-03 10:00")
+ localizing treesitter lspbridge
+ (lunch :track "Development")
+ sqlite
+mail
+eev python
+(break :start "15:00" :track "Development") maint (haskell . "2022-12-03 16:00")
+ ("DEV Sunday, December 4" . "2022-12-04 10:00")
+ justl (rde . "10:30")
+eshell
+ (lunch :track "Development")
+ detached
+ tramp async
+ (break :track "Development")
+ asmblox dbus wayland
+ )) )
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-schedule-max-time 30)
+ (emacsconf-schedule-tweaked-allocations '(("indieweb" . 20)
+ ("maint" . 20)
+ ("workflows" . 20)))
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-buffer-time
+ emacsconf-schedule-tweak-allocations))
+ (tracks '((:label "Saturday"
+ :start "2022-12-03 9:00"
+ :end "2022-12-03 18:00"
+ :tracks ("General" "Development"))
+ (:label "Sunday"
+ :start "2022-12-04 9:00"
+ :end "2022-12-04 18:00"
+ :tracks ("General" "Development")))))
+
+#+end_src
+
+#+RESULTS:
+:results:
+- [[file:schedule-option-gen-and-dev.svg]]
+:end:
+
diff --git a/2022/decisions/index.org_archive b/2022/decisions/index.org_archive
new file mode 100644
index 00000000..18c44252
--- /dev/null
+++ b/2022/decisions/index.org_archive
@@ -0,0 +1,462 @@
+# -*- mode: org -*-
+
+
+Archived entries from file /home/sacha/proj/emacsconf/wiki/2022/decisions/index.org
+
+
+* Option B: Two afternoon tracks (dev starts at 13:30), 10/20 buffer, 60 min lunch
+:PROPERTIES:
+:CUSTOM_ID: two-afternoons
+:ARCHIVE_TIME: 2022-10-04 Tue 23:45
+:ARCHIVE_FILE: ~/proj/emacsconf/wiki/2022/decisions/index.org
+:ARCHIVE_OLPATH: How do we want to schedule talks?
+:ARCHIVE_CATEGORY: index
+:END:
+
+- Good option if we don't have enough hosts/streamers to cover both days
+- Some room to breathe, some dev talks still on the main track
+
+#+begin_src emacs-lisp :exports results :var filename="schedule-option-two-afternoon-tracks.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints
+ '(("LUNCH" "11:30" "13:30")))
+ (emacsconf-schedule-default-buffer-minutes 10)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 20)
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("GEN Saturday, December 3" . "2022-12-03 09:00")
+ "Saturday opening remarks"
+ survey journalism orgyear rolodex
+ break
+ links buttons hyperorg
+ lunch
+ meetups buddy school science
+ break
+ realestate health
+ "Saturday closing remarks"
+ ("DEV Saturday afternoon" . "2022-12-03 13:30")
+ eshell detached asmblox break maint mail haskell
+ ("Sunday, December 4" . "2022-12-04 09:00")
+ "Sunday opening remarks"
+ localizing handwritten treesitter
+ break
+ orgvm indieweb rde
+ justl
+ lunch
+ jupyter
+ workflows async
+ break
+community fanfare
+("Sunday closing remarks" . "2022-12-04 17:00")
+ ("DEV Sunday afternoon" . "2022-12-04 13:30")
+ tramp
+ sqlite eev python wayland dbus
+ lspbridge
+ )))
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-schedule-max-time 30)
+
+ (emacsconf-schedule-tweaked-allocations '(("indieweb" . 20)
+ ("maint" . 20)
+ ("workflows" . 20)))
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-buffer-time-at-most-max-time
+ emacsconf-schedule-tweak-allocations))
+ (tracks '((:label "Saturday"
+ :start "2022-12-03 9:00"
+ :end "2022-12-03 18:00"
+ :tracks (("^GEN" "^DEV")
+ ("^DEV" "^Sunday")))
+ (:label "Sunday"
+ :start "2022-12-04 9:00"
+ :end "2022-12-04 18:00"
+ :tracks (("^Sunday" "^DEV Sunday")
+ ("^DEV Sunday"))))))
+
+
+#+end_src
+
+#+RESULTS:
+:results:
+- LUNCH: Ends at 13:45 after 13:30
+- [[file:schedule-option-two-afternoon-tracks.svg]]
+:end:
+
+
+* Option C: One afternoon track, 5/10 minute buffers, 60 minute lunch
+:PROPERTIES:
+:CUSTOM_ID: one-afternoon
+:ARCHIVE_TIME: 2022-10-04 Tue 23:45
+:ARCHIVE_FILE: ~/proj/emacsconf/wiki/2022/decisions/index.org
+:ARCHIVE_OLPATH: How do we want to schedule talks?
+:ARCHIVE_CATEGORY: index
+:END:
+
+- Lightens up the schedule a little bit, allows us to test out tracks without committing too much
+- Needs an extra host and streamer for one afternoon
+
+#+begin_src emacs-lisp :exports results :var filename="schedule-option-one-afternoon-track.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints
+ '(("LUNCH" "11:30" "13:30")
+ ("saturday closing remarks" "16:30" "18:00")
+ ("sunday closing remarks" "16:30" "18:00")))
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("GEN Saturday, December 3" . "2022-12-03 09:00")
+ "Saturday opening remarks"
+ survey journalism orgyear rolodex
+ break
+ links buttons hyperorg
+ lunch
+ meetups buddy school science community
+ break
+ realestate health jupyter
+ "Saturday closing remarks"
+ ("DEV Saturday afternoon" . "2022-12-03 13:30")
+ eshell detached asmblox break maint mail wayland lspbridge
+ ("Sunday, December 4" . "2022-12-04 09:00")
+ "Sunday opening remarks"
+ localizing handwritten treesitter
+ break
+ orgvm indieweb rde
+ justl
+ lunch
+ workflows tramp async sqlite eev python
+ break
+ dbus haskell fanfare
+ "Sunday closing remarks")))
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-schedule-max-time 30)
+ (emacsconf-schedule-default-buffer-minutes 5)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 10)
+ (emacsconf-schedule-tweaked-allocations '(("indieweb" . 20)
+ ("maint" . 20)
+ ("workflows" . 20)))
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-buffer-time-at-most-max-time
+ emacsconf-schedule-tweak-allocations))
+ (tracks '((:label "Saturday"
+ :start "2022-12-03 9:00"
+ :end "2022-12-03 18:00"
+ :tracks (("^GEN" "^DEV")
+ ("^DEV" "^Sunday")))
+ (:label "Sunday"
+ :start "2022-12-04 9:00"
+ :end "2022-12-04 18:00"
+ :tracks (("^Sunday"))))))
+
+#+end_src
+
+#+RESULTS:
+:results:
+- [[file:schedule-option-one-afternoon-track.svg]]
+:end:
+
+
+* Option D: Remove buffer from non-live talks (not recommended)
+:PROPERTIES:
+:CUSTOM_ID: no-irc
+:ARCHIVE_TIME: 2022-10-04 Tue 23:45
+:ARCHIVE_FILE: ~/proj/emacsconf/wiki/2022/decisions/index.org
+:ARCHIVE_OLPATH: How do we want to schedule talks?
+:ARCHIVE_CATEGORY: index
+:END:
+
+- Considerations:
+ - Frees up about 20 minutes on each day, so we might be able to squeeze in two more talks sideways.
+ - Pretty frenetic
+ - Not recommended
+
+#+begin_src emacs-lisp :exports results :var filename="schedule-option-only-live-qa.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints
+ '(("LUNCH" "11:30" "13:30")
+ ("saturday closing remarks" "16:30" "18:00")
+ ("sunday closing remarks" "16:30" "18:00")))
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("Saturday, December 3" . "2022-12-03 09:00")
+ "Saturday opening remarks"
+ survey journalism orgyear handwritten rolodex
+ break
+ links buttons hyperorg
+ lunch
+ meetups buddy school science community realestate
+ break
+ health jupyter orgvm indieweb workflows
+ "Saturday closing remarks"
+ ("Sunday, December 4" . "2022-12-04 09:00")
+ "Sunday opening remarks"
+ localizing lspbridge treesitter
+ break
+ justl rde eshell detached asmblox
+ lunch
+ tramp async sqlite eev python mail
+ break
+ dbus wayland maint haskell fanfare
+ "Sunday closing remarks")))
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 30)
+ (emacsconf-schedule-max-time 30)
+ (emacsconf-schedule-default-buffer-minutes 0)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 10)
+ (emacsconf-schedule-tweaked-allocations '(("indieweb" . 20)
+ ("maint" . 20)
+ ("workflows" . 20)))
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-buffer-time-at-most-max-time
+ emacsconf-schedule-tweak-allocations))
+ (tracks '((:label "Saturday"
+ :start "2022-12-03 9:00"
+ :end "2022-12-03 18:00"
+ :tracks (("^Saturday" "^Sunday")))
+ (:label "Sunday"
+ :start "2022-12-04 9:00"
+ :end "2022-12-04 18:00"
+ :tracks (("^Sunday"))))))
+#+end_src
+
+#+RESULTS:
+:results:
+- [[file:schedule-option-only-live-qa.svg]]
+:end:
+
+
+* Option E: Reduce buffer to non-round numbers (3/7 minutes, like 2021); 10min break 30min lunch (not recommended)
+:PROPERTIES:
+:CUSTOM_ID: non-round
+:ARCHIVE_TIME: 2022-10-04 Tue 23:45
+:ARCHIVE_FILE: ~/proj/emacsconf/wiki/2022/decisions/index.org
+:ARCHIVE_OLPATH: How do we want to schedule talks?
+:ARCHIVE_CATEGORY: index
+:END:
+
+- Schedule looks too precise, sets expectations; timekeeping is more challenging
+- Pretty frenetic
+- Could probably use shifts for hosts or streamers
+- Not recommended
+
+#+begin_src emacs-lisp :results value :exports results :var filename="schedule-option-non-round-buffer.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints
+ '(("LUNCH" "11:30" "13:30")
+ ("saturday closing remarks" "16:30" "18:00")
+ ("sunday closing remarks" "16:30" "18:00")))
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("Saturday, December 3" . "2022-12-03 09:00")
+ "Saturday opening remarks"
+ survey journalism orgyear handwritten rolodex
+ break
+ links buttons hyperorg
+ lunch
+ meetups buddy school science community realestate
+ break
+ health jupyter orgvm indieweb workflows
+ "Saturday closing remarks"
+ ("Sunday, December 4" . "2022-12-04 09:00")
+ "Sunday opening remarks"
+ localizing lspbridge treesitter
+ break
+ justl rde eshell detached asmblox
+ lunch
+ tramp async sqlite eev python mail
+ break
+ dbus wayland maint haskell fanfare
+ "Sunday closing remarks")))
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 30)
+ (emacsconf-schedule-max-time 30)
+ (emacsconf-schedule-default-buffer-minutes 3)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 7)
+ (emacsconf-schedule-tweaked-allocations '(("indieweb" . 20)
+ ("maint" . 20)
+ ("workflows" . 20)))
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-buffer-time-at-most-max-time
+ emacsconf-schedule-tweak-allocations))
+ (tracks '((:label "Saturday"
+ :start "2022-12-03 9:00"
+ :end "2022-12-03 18:00"
+ :tracks (("^Saturday" "^Sunday")))
+ (:label "Sunday"
+ :start "2022-12-04 9:00"
+ :end "2022-12-04 18:00"
+ :tracks (("^Sunday")))))))
+#+end_src
+
+#+RESULTS:
+:results:
+- [[file:schedule-option-non-round-buffer.svg]]
+:end:
+
+
+* Option F: Pack everything in one long day (current schedule)
+:PROPERTIES:
+:CUSTOM_ID: long
+:ARCHIVE_TIME: 2022-10-04 Tue 23:45
+:ARCHIVE_FILE: ~/proj/emacsconf/wiki/2022/decisions/index.org
+:ARCHIVE_OLPATH: How do we want to schedule talks?
+:ARCHIVE_CATEGORY: index
+:END:
+
+- Considerations:
+ - Difficult to accommodate extra talks
+ - Host/streamer have a very long intense day
+- Ideas:
+ - Split up hosting duties into shifts (volunteers can read the questions)
+ - Use prerecorded intros and outros
+ - Split up streaming duties into shifts (volunteers can adjust audio volume, switch to the right BBB room)
+ - Set up cloud streaming so that streamers can work in shifts
+
+#+begin_src emacs-lisp :exports results :var filename="schedule-option-one-full-day.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints
+ '(("LUNCH" "11:30" "13:30")
+ ("saturday closing remarks" "16:30" "18:00")
+ ("sunday closing remarks" "16:30" "18:00")))
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("Saturday, December 3" . "2022-12-03 09:00")
+ "Saturday opening remarks"
+ survey journalism orgyear handwritten rolodex
+ break
+ links buttons hyperorg
+ lunch
+ meetups buddy school science community realestate
+ break
+ health jupyter orgvm indieweb workflows
+ "Saturday closing remarks"
+ ("Sunday, December 4" . "2022-12-04 09:00")
+ "Sunday opening remarks"
+ localizing lspbridge treesitter
+ break
+ justl rde eshell detached asmblox
+ lunch
+ tramp async sqlite eev python mail
+ break
+ dbus wayland haskell maint fanfare
+ "Sunday closing remarks")))
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 30)
+ (emacsconf-schedule-max-time 30)
+ (emacsconf-schedule-default-buffer-minutes 5)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 10)
+ (emacsconf-schedule-tweaked-allocations '(("indieweb" . 20)
+ ("maint" . 20)
+ ("workflows" . 20)))
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-buffer-time-at-most-max-time
+ emacsconf-schedule-tweak-allocations))
+ (tracks '((:label "Saturday"
+ :start "2022-12-03 9:00"
+ :end "2022-12-03 18:00"
+ :tracks (("^Saturday" "^Sunday")))
+ (:label "Sunday"
+ :start "2022-12-04 9:00"
+ :end "2022-12-04 18:00"
+ :tracks (("^Sunday"))))))
+#+end_src
+
+#+RESULTS:
+:results:
+- [[file:schedule-option-one-full-day.svg]]
+:end:
+
+
+* Option G: Time-aligned
+:PROPERTIES:
+:CUSTOM_ID: gen-and-dev-aligned
+:ARCHIVE_TIME: 2022-10-04 Tue 23:45
+:ARCHIVE_FILE: ~/proj/emacsconf/wiki/2022/decisions/index.org
+:ARCHIVE_OLPATH: How do we want to schedule talks?
+:ARCHIVE_CATEGORY: index
+:END:
+
+- Line up the starts and the Q&A; easier to display in a table, but
+ then we will really need to have multiple hosts/streamers, and
+ people will have to choose.
+
+#+begin_src emacs-lisp :exports results :var filename="schedule-option-gen-and-dev-aligned.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints '(("LUNCH" "11:30" "13:30")))
+ (emacsconf-schedule-default-buffer-minutes 15)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 15)
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("GEN Saturday, December 3" . "2022-12-03 08:55")
+ "Saturday opening remarks"
+ (survey . "9:00")
+ (orgyear . "9:30")
+ (rolodex . "10:00")
+ break
+ (links . "11:00")
+ buttons
+ (lunch . "12:00")
+ hyperorg
+ realestate
+ health
+ (break . "15:00")
+ jupyter (workflows . "16:00")
+
+ ("Saturday closing remarks" . "2022-12-03 16:45")
+ ("GEN Sunday, December 4" . "2022-12-04 09:00")
+ "Sunday opening remarks"
+ journalism
+ handwritten
+ school
+ break science meetups (lunch . "12:00")
+ community
+ buddy
+ orgvm
+ (break . "14:45")
+ indieweb fanfare
+ ("Sunday closing remarks" . "2022-12-04 16:30")
+ ("DEV Saturday, December 3" . "2022-12-03 10:00")
+ localizing (treesitter . "11:00") rde
+ (lunch :start "12:00" :track "Development")
+ mail
+
+sqlite eev python (break :track "Development")
+maint (haskell . "2022-12-03 16:00")
+ ("DEV Sunday, December 4" . "2022-12-04 10:00")
+(justl . "10:05") (lspbridge . "10:50")
+ eshell (lunch :start "12:00" :track "Development")
+ tramp
+ detached
+ asmblox (break :start "14:45" :track "Development") async wayland
+ (dbus . "16:00") )) )
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-schedule-max-time 30)
+ (emacsconf-schedule-tweaked-allocations '(("indieweb" . 20)
+ ("maint" . 20)
+ ("workflows" . 20)))
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-buffer-time
+ emacsconf-schedule-tweak-allocations))
+ (emacsconf-schedule-validate-live-q-and-a-sessions-buffer nil)
+ (tracks '((:label "Saturday"
+ :start "2022-12-03 9:00"
+ :end "2022-12-03 18:00"
+ :tracks ("General" "Development"))
+ (:label "Sunday"
+ :start "2022-12-04 9:00"
+ :end "2022-12-04 18:00"
+ :tracks ("General" "Development")))))
+
+#+end_src
+
+#+RESULTS:
+:results:
+- [[file:schedule-option-gen-and-dev-aligned.svg]]
+:end:
diff --git a/2022/decisions/schedule-option-back-to-one.svg b/2022/decisions/schedule-option-back-to-one.svg
new file mode 100644
index 00000000..6e736572
--- /dev/null
+++ b/2022/decisions/schedule-option-back-to-one.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:10- 9:30 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="15" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(44,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 9:35- 9:43 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="54" y="15" opacity="0.8" width="12" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(64,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:48-10:10 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="75" y="15" opacity="0.8" width="34" height="34" stroke="black" stroke-dasharray="5,5,5" fill="green"></rect> <g transform="translate(107,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:15-10:32 Writing and organizing literature notes for scientific writing</title> <rect x="117" y="15" opacity="0.8" width="26" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(141,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 10:37-10:45 The Emacs Buddy initiative</title> <rect x="152" y="15" opacity="0.8" width="12" height="34" stroke="black" stroke-dasharray="5,5,5" fill="green"></rect> <g transform="translate(162,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 10:50-11:10 Attending and organizing Emacs meetups</title> <rect x="172" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(201,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 11:15-11:26 Linking personal info with Hyperbole implicit buttons</title> <rect x="211" y="15" opacity="0.8" width="17" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(226,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 11:31-11:37 Emacs development updates</title> <rect x="236" y="15" opacity="0.8" width="9" height="34" stroke="black" stroke-dasharray="5,5,5" fill="green"></rect> <g transform="translate(243,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 11:42-12:03 Org workflows for developers</title> <rect x="254" y="15" opacity="0.8" width="32" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(284,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot" data-slug="health"> <title> 12:53- 1:18 Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="365" y="15" opacity="0.8" width="39" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(402,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 1:23- 1:48 Real estate and Org table formulas</title> <rect x="412" y="15" opacity="0.8" width="39" height="34" stroke="black" stroke-dasharray="5,5,5" fill="green"></rect> <g transform="translate(449,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 1:53- 2:10 Putting Org Mode on the Indieweb</title> <rect x="459" y="15" opacity="0.8" width="26" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(483,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 2:15- 2:25 orgvm: a simple HTTP server for org</title> <rect x="494" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(507,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 2:30- 2:39 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="517" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(529,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 2:44- 2:53 Back to school with Emacs</title> <rect x="539" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="green"></rect> <g transform="translate(551,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 2:58- 3:18 Edit live Jupyter notebook cells with Emacs</title> <rect x="561" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(590,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 3:23- 3:53 Powerful productivity with Hyperbole and Org Mode</title> <rect x="600" y="15" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(645,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:13- 4:23 Fanfare for the Common Emacs User</title> <rect x="679" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(692,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(742,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 3:58- 4:08 Pre-localizing Emacs</title> <rect x="655" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="red"></rect> <g transform="translate(668,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 4:28- 4:45 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="702" y="50" opacity="0.8" width="26" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(726,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,100)"> <title> Schedule for Sunday</title> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:10- 9:30 Results of the 2022 Emacs Survey</title> <rect x="15" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(44,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(67,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 4:34- 4:54 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="712" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(741,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:59- 5:09 Sunday closing remarks</title> <rect x="751" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(764,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 9:50-10:14 rde Emacs introduction</title> <rect x="78" y="50" opacity="0.8" width="37" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(113,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client" data-slug="lspbridge"> <title> 10:19-10:39 lsp-bridge: complete asynchronous LSP client</title> <rect x="123" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(152,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:44-10:56 Tree-sitter beyond syntax highlighting</title> <rect x="163" y="50" opacity="0.8" width="18" height="34" stroke="black" stroke-dasharray="5,5,5" fill="green"></rect> <g transform="translate(179,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 11:01-11:16 Top 10 reasons why you should be using Eshell</title> <rect x="189" y="50" opacity="0.8" width="23" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(210,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 11:21-11:32 justl: Driving recipes within Emacs</title> <rect x="221" y="50" opacity="0.8" width="17" height="34" stroke="black" stroke-dasharray="5,5,5" fill="green"></rect> <g transform="translate(236,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:37-11:55 What I'd like to see in Emacs</title> <rect x="246" y="50" opacity="0.8" width="28" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(272,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 12:45- 1:07 Using SQLite as a data source: a framework and an example</title> <rect x="352" y="50" opacity="0.8" width="34" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(384,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:12- 1:23 Getting detached from Emacs</title> <rect x="395" y="50" opacity="0.8" width="17" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(410,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 1:28- 1:46 Emacs was async before async was cool</title> <rect x="420" y="50" opacity="0.8" width="28" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(446,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 1:51- 1:56 Bidirectional links with eev</title> <rect x="456" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(461,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 2:01- 2:06 Short hyperlinks to Python docs</title> <rect x="472" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(477,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 2:11- 2:49 Revisiting the anatomy of Emacs mail user agents</title> <rect x="487" y="50" opacity="0.8" width="59" height="34" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(544,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:54- 3:14 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="555" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(584,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:19- 3:39 The Wheels on D-Bus</title> <rect x="594" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(623,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 3:44- 3:54 Emacs should become a Wayland compositor</title> <rect x="633" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(646,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 3:59- 4:29 Haskell code exploration with Emacs</title> <rect x="657" y="50" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="red"></rect> <g transform="translate(702,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> \ No newline at end of file
diff --git a/2022/decisions/schedule-option-gen-and-dev-aligned.svg b/2022/decisions/schedule-option-gen-and-dev-aligned.svg
new file mode 100644
index 00000000..554707c7
--- /dev/null
+++ b/2022/decisions/schedule-option-gen-and-dev-aligned.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="nil" title="GEN Saturday, December 3"> <rect x="-8" y="15" opacity="0.8" width="-126771" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126781,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Saturday, December 3</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="-8" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-3,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="0" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(27,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="44" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(56,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="88" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(115,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="140" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(152,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="177" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(189,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="214" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(226,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="nil" title="LUNCH"> <rect x="266" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="355" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(397,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="422" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(449,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="474" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(501,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="nil" title="BREAK"> <rect x="533" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(545,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="548" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(560,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="622" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(649,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="688" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(693,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="nil" title="GEN Sunday, December 4"> <rect x="2133" y="15" opacity="0.8" width="-128912" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126781,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="2133" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2138,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="2140" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2167,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="2192" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2204,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="2229" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(2256,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="nil" title="BREAK"> <rect x="2281" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2293,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="2296" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2323,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="2348" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2360,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="nil" title="LUNCH"> <rect x="2400" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2486,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="2488" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2530,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="2555" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(2567,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="2592" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2604,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="nil" title="BREAK"> <rect x="2644" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2656,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="2659" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2686,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="2711" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2723,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="2800" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2812,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="nil" title="DEV Saturday, December 3"> <rect x="88" y="15" opacity="0.8" width="-126867" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126781,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Saturday, December 3</text></g></a> <a href="nil" title="DEV Sunday, December 4"> <rect x="2222" y="15" opacity="0.8" width="-129001" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126781,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="88" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(115,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="177" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(189,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="214" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(241,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="nil" title="LUNCH"> <rect x="266" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="355" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(397,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="422" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(449,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="474" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(479,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="503" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(508,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="nil" title="BREAK"> <rect x="533" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(545,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="548" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(575,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="622" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(664,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="2229" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2241,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="2296" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(2323,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="2348" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2360,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="nil" title="LUNCH"> <rect x="2400" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2486,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="2488" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2530,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="2555" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2567,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="2592" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2604,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="nil" title="BREAK"> <rect x="2644" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2656,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="2659" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2686,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="2711" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2723,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="2755" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2782,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,100)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="nil" title="GEN Saturday, December 3"> <rect x="-2141" y="15" opacity="0.8" width="-126771" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128914,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Saturday, December 3</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="-2141" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-2136,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="-2134" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-2107,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="-2089" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-2077,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="-2045" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-2018,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="-1993" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1981,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="-1956" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1944,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="-1919" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1907,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="nil" title="LUNCH"> <rect x="-1867" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1781,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="-1778" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1736,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="-1712" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1685,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="-1660" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1633,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="nil" title="BREAK"> <rect x="-1600" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1588,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="-1586" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1574,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="-1512" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1485,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="-1445" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1440,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="nil" title="GEN Sunday, December 4"> <rect x="0" y="15" opacity="0.8" width="-128912" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128914,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="7" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="59" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(71,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="96" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(123,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="nil" title="BREAK"> <rect x="148" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(160,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="162" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(189,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="214" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(226,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="nil" title="LUNCH"> <rect x="266" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="355" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(397,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="422" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(434,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="459" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(471,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="nil" title="BREAK"> <rect x="511" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(523,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="525" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(552,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="577" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(589,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="666" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(678,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="nil" title="DEV Saturday, December 3"> <rect x="-2045" y="15" opacity="0.8" width="-126867" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128914,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Saturday, December 3</text></g></a> <a href="nil" title="DEV Sunday, December 4"> <rect x="88" y="15" opacity="0.8" width="-129001" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128915,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="-2045" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-2018,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="-1956" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-1944,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="-1919" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1892,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="nil" title="LUNCH"> <rect x="-1867" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1781,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="-1778" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1736,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="-1712" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1685,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="-1660" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1655,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="-1630" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1625,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="nil" title="BREAK"> <rect x="-1600" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1588,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="-1586" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1559,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="-1512" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1470,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="96" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(108,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="162" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(189,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="214" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(226,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="nil" title="LUNCH"> <rect x="266" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="355" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(397,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="422" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(434,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="459" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(471,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="nil" title="BREAK"> <rect x="511" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(523,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="525" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(552,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="577" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(589,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="622" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(649,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file
diff --git a/2022/decisions/schedule-option-gen-and-dev.svg b/2022/decisions/schedule-option-gen-and-dev.svg
new file mode 100644
index 00000000..d23dd3f1
--- /dev/null
+++ b/2022/decisions/schedule-option-gen-and-dev.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="nil" title="GEN Saturday, December 3"> <rect x="0" y="15" opacity="0.8" width="-126770" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126772,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Saturday, December 3</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="7" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="59" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(71,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="96" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(123,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="155" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(167,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="170" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(182,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="222" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(234,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="nil" title="LUNCH"> <rect x="266" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="355" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(397,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="437" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(464,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="488" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(515,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="nil" title="BREAK"> <rect x="555" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(567,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="570" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(582,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="622" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(649,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="711" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(716,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="nil" title="GEN Sunday, December 4"> <rect x="2133" y="15" opacity="0.8" width="-128904" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126773,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="2133" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2138,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="2140" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2167,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="2207" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2219,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="nil" title="BREAK"> <rect x="2259" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2271,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="2274" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(2301,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="2325" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2352,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="nil" title="LUNCH"> <rect x="2392" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2478,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="2481" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2493,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="2533" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(2545,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="2570" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2612,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="nil" title="BREAK"> <rect x="2651" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2663,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="2666" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2678,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="2718" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2745,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="2785" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2797,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="2844" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2856,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="nil" title="DEV Saturday, December 3"> <rect x="88" y="15" opacity="0.8" width="-126859" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126773,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Saturday, December 3</text></g></a> <a href="nil" title="DEV Sunday, December 4"> <rect x="2222" y="15" opacity="0.8" width="-128993" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126773,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="88" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(115,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="155" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(167,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="192" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(219,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="nil" title="LUNCH"> <rect x="244" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(330,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="333" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(360,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="400" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(442,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="481" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(486,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="511" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(516,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="nil" title="BREAK"> <rect x="533" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(545,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="548" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(575,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="622" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(664,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="2222" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2234,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="2266" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2293,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="2333" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2345,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="nil" title="LUNCH"> <rect x="2385" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2471,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="2474" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2486,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="2525" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2567,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="2607" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2634,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="nil" title="BREAK"> <rect x="2674" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2686,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="2688" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2700,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="2740" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2767,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="2807" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2819,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,100)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="nil" title="GEN Saturday, December 3"> <rect x="-2134" y="15" opacity="0.8" width="-126770" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128906,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Saturday, December 3</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="-2134" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-2129,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="-2126" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-2099,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="-2075" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-2063,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="-2038" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-2011,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="-1978" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1966,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="-1963" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1951,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="-1912" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1900,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="nil" title="LUNCH"> <rect x="-1867" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1781,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="-1778" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1736,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="-1697" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1670,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="-1645" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1618,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="nil" title="BREAK"> <rect x="-1578" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1566,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="-1563" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1551,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="-1512" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1485,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="-1423" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1418,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="nil" title="GEN Sunday, December 4"> <rect x="0" y="15" opacity="0.8" width="-128904" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128906,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="7" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="74" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(86,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="nil" title="BREAK"> <rect x="125" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(137,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="140" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(167,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="192" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(219,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="nil" title="LUNCH"> <rect x="259" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(345,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="348" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(360,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="400" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(412,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="437" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(479,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="nil" title="BREAK"> <rect x="518" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(530,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="533" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(545,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="585" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(612,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="651" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(663,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="711" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(723,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="nil" title="DEV Saturday, December 3"> <rect x="-2045" y="15" opacity="0.8" width="-126859" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128906,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Saturday, December 3</text></g></a> <a href="nil" title="DEV Sunday, December 4"> <rect x="88" y="15" opacity="0.8" width="-128993" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128907,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="-2045" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-2018,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="-1978" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-1966,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="-1941" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1914,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="nil" title="LUNCH"> <rect x="-1889" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1803,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="-1800" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1773,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="-1734" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1692,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="-1652" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1647,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="-1623" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1618,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="nil" title="BREAK"> <rect x="-1600" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1588,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="-1586" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1559,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="-1512" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1470,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="88" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(100,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="133" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(160,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="200" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(212,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="nil" title="LUNCH"> <rect x="251" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(337,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="340" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(352,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="392" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(434,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="474" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(501,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="nil" title="BREAK"> <rect x="540" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(552,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="555" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(567,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="607" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(634,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="674" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(686,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file
diff --git a/2022/decisions/schedule-option-gen-to-specific.svg b/2022/decisions/schedule-option-gen-to-specific.svg
new file mode 100644
index 00000000..6ec146cd
--- /dev/null
+++ b/2022/decisions/schedule-option-gen-to-specific.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="nil" title="GEN Saturday, December 3"> <rect x="0" y="15" opacity="0.8" width="-126747" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126749,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Saturday, December 3</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="7" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="74" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(101,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="125" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(137,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="nil" title="BREAK"> <rect x="177" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(189,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="192" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(219,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="nil" title="LUNCH"> <rect x="266" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="355" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(367,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="407" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(419,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="444" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(486,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="nil" title="BREAK"> <rect x="525" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(537,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="540" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(567,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="592" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(619,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="659" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(671,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="711" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(716,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="nil" title="GEN Sunday, December 4"> <rect x="2133" y="15" opacity="0.8" width="-128880" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126749,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="2133" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2138,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="2140" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2167,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="2192" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2204,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="2229" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2256,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="2281" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2293,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="2296" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2308,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="2348" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2360,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="nil" title="LUNCH"> <rect x="2400" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2486,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="2488" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2530,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="2570" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2597,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="nil" title="BREAK"> <rect x="2637" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2649,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="2651" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2663,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="2703" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2730,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="2770" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2782,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="2844" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2856,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="nil" title="DEV Saturday, December 3"> <rect x="88" y="15" opacity="0.8" width="-126836" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126750,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Saturday, December 3</text></g></a> <a href="nil" title="DEV Sunday, December 4"> <rect x="2222" y="15" opacity="0.8" width="-128969" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-126749,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="88" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(115,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="155" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(167,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="192" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(219,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="nil" title="LUNCH"> <rect x="266" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="355" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(382,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="422" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(464,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="nil" title="BREAK"> <rect x="503" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(515,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="518" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(523,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="548" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(553,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="577" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(604,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="644" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(686,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="2222" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2249,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="2288" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2300,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="2325" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2367,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="nil" title="LUNCH"> <rect x="2400" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2486,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="2488" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2500,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="2540" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2552,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="2592" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2619,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="nil" title="BREAK"> <rect x="2659" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2671,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="2674" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2686,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="2725" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2752,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="2792" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2804,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,100)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="nil" title="GEN Saturday, December 3"> <rect x="-2134" y="15" opacity="0.8" width="-126747" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128883,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Saturday, December 3</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="-2134" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-2129,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="-2126" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-2099,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="-2060" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-2033,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="-2008" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1996,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="nil" title="BREAK"> <rect x="-1956" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1944,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="-1941" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1914,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="nil" title="LUNCH"> <rect x="-1867" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1781,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="-1778" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1766,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="-1726" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1714,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="-1689" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1647,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="nil" title="BREAK"> <rect x="-1608" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1596,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="-1593" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1566,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="-1541" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1514,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="-1475" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1463,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="-1423" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1418,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="nil" title="GEN Sunday, December 4"> <rect x="0" y="15" opacity="0.8" width="-128880" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128882,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="7" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="59" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(71,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="96" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(123,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="148" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(160,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="162" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(174,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="214" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(226,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="nil" title="LUNCH"> <rect x="266" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="355" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(397,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="437" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(464,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="nil" title="BREAK"> <rect x="503" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(515,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="518" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(530,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="570" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(597,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="637" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(649,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="711" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(723,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="nil" title="DEV Saturday, December 3"> <rect x="-2045" y="15" opacity="0.8" width="-126836" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128883,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Saturday, December 3</text></g></a> <a href="nil" title="DEV Sunday, December 4"> <rect x="88" y="15" opacity="0.8" width="-128969" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-128883,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Sunday, December 4</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="-2045" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-2018,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="-1978" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-1966,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="-1941" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1914,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="nil" title="LUNCH"> <rect x="-1867" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1781,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="-1778" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1751,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="-1712" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1670,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="nil" title="BREAK"> <rect x="-1630" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1618,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="-1615" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1610,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="-1586" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1581,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="-1556" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1529,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="-1489" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1447,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="88" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(115,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="155" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(167,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="192" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(234,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="nil" title="LUNCH"> <rect x="266" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="355" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(367,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="407" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(419,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="459" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(486,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="nil" title="BREAK"> <rect x="525" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(537,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="540" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(552,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="592" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(619,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="659" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(671,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file
diff --git a/2022/decisions/schedule-option-non-round-buffer.svg b/2022/decisions/schedule-option-non-round-buffer.svg
new file mode 100644
index 00000000..875c4cc5
--- /dev/null
+++ b/2022/decisions/schedule-option-non-round-buffer.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="0" y="15" width="7" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="7" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(34,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="41" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(68,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="81" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(93,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="100" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(112,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="125" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(152,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="160" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(172,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="174" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(186,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="200" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(212,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="225" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(267,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="nil" title="LUNCH"> <rect x="280" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(322,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="324" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(336,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="349" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(361,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="368" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(395,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="402" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(429,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="442" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(484,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="497" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(524,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="nil" title="BREAK"> <rect x="531" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(543,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="546" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(573,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="586" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(598,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="611" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(623,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="637" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(664,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="677" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(704,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="717" y="15" width="7" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(722,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,100)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="0" y="15" width="7" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="7" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(34,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="47" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(74,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="81" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(93,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="nil" title="BREAK"> <rect x="100" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(112,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="115" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(127,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="134" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(161,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="174" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(186,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="200" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(212,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="225" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(237,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="nil" title="LUNCH"> <rect x="250" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(292,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="294" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(336,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="349" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(376,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="389" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(416,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="429" y="15" width="7" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(434,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="441" y="15" width="7" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(446,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="453" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(495,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="nil" title="BREAK"> <rect x="508" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(520,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="522" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(549,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="562" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(574,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="588" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(615,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="628" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(670,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="682" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(694,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="708" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(720,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file
diff --git a/2022/decisions/schedule-option-one-afternoon-track.svg b/2022/decisions/schedule-option-one-afternoon-track.svg
new file mode 100644
index 00000000..594c10ac
--- /dev/null
+++ b/2022/decisions/schedule-option-one-afternoon-track.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="0" y="15" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="7" y="15" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="44" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(71,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="88" y="15" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(100,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="111" y="15" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(138,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="148" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(160,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="162" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(174,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="192" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(204,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="222" y="15" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(264,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="nil" title="LUNCH"> <rect x="281" y="15" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(367,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="370" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(382,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="400" y="15" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(412,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="422" y="15" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(449,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="459" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(486,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="503" y="15" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(545,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="nil" title="BREAK"> <rect x="562" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(574,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="577" y="15" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(604,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="614" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(641,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="659" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(671,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="688" y="15" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(693,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="400" y="50" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(412,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="429" y="50" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(441,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="459" y="50" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(471,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="nil" title="BREAK"> <rect x="488" y="50" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(500,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="503" y="50" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(530,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="548" y="50" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(590,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="607" y="50" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(619,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="637" y="50" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(664,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,100)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="0" y="15" width="7" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="7" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(34,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="51" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(63,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="81" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(93,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="nil" title="BREAK"> <rect x="103" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(115,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="118" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(130,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="148" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(175,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="192" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(219,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="237" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(249,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="nil" title="LUNCH"> <rect x="259" y="15" width="88" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(345,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="348" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(375,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="392" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(434,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="451" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(478,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="496" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(523,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="540" y="15" width="7" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(545,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="555" y="15" width="7" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(560,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="nil" title="BREAK"> <rect x="570" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(582,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="585" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(612,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="629" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(671,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="688" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(700,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="718" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(730,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file
diff --git a/2022/decisions/schedule-option-one-full-day.svg b/2022/decisions/schedule-option-one-full-day.svg
new file mode 100644
index 00000000..4934402d
--- /dev/null
+++ b/2022/decisions/schedule-option-one-full-day.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="0" y="15" width="7" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="7" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(34,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="44" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(71,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="88" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(100,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="111" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(123,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="140" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(167,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="177" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(189,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="192" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(204,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="222" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(234,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="251" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(293,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="nil" title="LUNCH"> <rect x="311" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(353,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="355" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(367,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="385" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(397,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="407" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(434,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="444" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(471,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="488" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(530,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="548" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(575,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="nil" title="BREAK"> <rect x="585" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(597,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="600" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(627,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="644" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(656,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="674" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(686,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="703" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(730,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="748" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(775,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="792" y="15" width="7" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(797,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,100)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="0" y="15" width="7" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="7" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(34,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="51" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(78,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="88" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(100,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="nil" title="BREAK"> <rect x="111" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(123,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="125" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(137,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="148" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(175,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="192" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(204,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="222" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(234,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="251" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(263,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="nil" title="LUNCH"> <rect x="281" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(323,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="325" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(367,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="385" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(412,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="429" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(456,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="474" y="15" width="7" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(479,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="488" y="15" width="7" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(493,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="503" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(545,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="nil" title="BREAK"> <rect x="562" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(574,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="577" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(604,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="622" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(634,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="651" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(693,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="711" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(738,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="755" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(767,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="785" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(797,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file
diff --git a/2022/decisions/schedule-option-only-live-qa.svg b/2022/decisions/schedule-option-only-live-qa.svg
new file mode 100644
index 00000000..849eb6c8
--- /dev/null
+++ b/2022/decisions/schedule-option-only-live-qa.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="0" y="15" width="7" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="7" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(34,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="37" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(64,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="81" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(93,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="96" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(108,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="125" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(152,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="155" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(167,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="170" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(182,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="200" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(212,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="229" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(271,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="nil" title="LUNCH"> <rect x="288" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(330,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="333" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(345,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="362" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(374,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="377" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(404,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="407" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(434,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="451" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(493,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="511" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(538,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="nil" title="BREAK"> <rect x="540" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(552,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="555" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(582,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="600" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(612,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="629" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(641,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="659" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(686,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="703" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(730,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="748" y="15" width="7" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(753,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,100)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="0" y="15" width="7" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="7" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(34,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="51" y="15" width="29" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(78,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="81" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(93,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="nil" title="BREAK"> <rect x="96" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(108,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="111" y="15" width="14" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(123,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="125" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(152,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="170" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(182,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="200" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(212,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="229" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(241,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="nil" title="LUNCH"> <rect x="259" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(301,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="303" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(345,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="362" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(389,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="407" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(434,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="451" y="15" width="7" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(456,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="459" y="15" width="7" height="69" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(464,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="466" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(508,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="nil" title="BREAK"> <rect x="525" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(537,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="540" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(567,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="585" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(597,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="614" y="15" width="29" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(641,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="659" y="15" width="44" height="69" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(701,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="718" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(730,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="748" y="15" width="14" height="69" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(760,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file
diff --git a/2022/decisions/schedule-option-two-afternoon-tracks.svg b/2022/decisions/schedule-option-two-afternoon-tracks.svg
new file mode 100644
index 00000000..8a8132b9
--- /dev/null
+++ b/2022/decisions/schedule-option-two-afternoon-tracks.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/" title="Saturday opening remarks"> <rect x="0" y="15" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="7" y="15" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="51" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(78,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org"> <rect x="111" y="15" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(123,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="140" y="15" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(167,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="nil" title="BREAK"> <rect x="185" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(197,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="200" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(212,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="229" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(241,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="259" y="15" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(301,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="nil" title="LUNCH"> <rect x="333" y="15" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(419,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="422" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(434,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="451" y="15" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(463,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs"> <rect x="481" y="15" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(508,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="525" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(552,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="nil" title="BREAK"> <rect x="585" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(597,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="600" y="15" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(627,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="644" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(671,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Saturday closing remarks"> <rect x="703" y="15" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(708,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="400" y="50" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(412,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs"> <rect x="429" y="50" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(441,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="459" y="50" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(471,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="nil" title="BREAK"> <rect x="488" y="50" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(500,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="503" y="50" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(530,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="562" y="50" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(604,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="637" y="50" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(679,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,100)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/" title="Sunday opening remarks"> <rect x="0" y="15" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="7" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="66" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(78,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="96" y="15" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(108,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="nil" title="BREAK"> <rect x="125" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(137,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="140" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(152,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="170" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(197,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction"> <rect x="229" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(256,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="288" y="15" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(300,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="nil" title="LUNCH"> <rect x="318" y="15" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(404,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="407" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(419,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers"> <rect x="437" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(464,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool"> <rect x="496" y="15" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(523,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="nil" title="BREAK"> <rect x="555" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(567,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="570" y="15" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(612,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="644" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(656,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/" title="Sunday closing remarks"> <rect x="711" y="15" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(723,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="400" y="50" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(442,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="474" y="50" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(501,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev"> <rect x="533" y="50" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(538,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="555" y="50" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(560,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="577" y="50" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(589,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="607" y="50" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(634,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="666" y="50" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(693,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file
diff --git a/2022/draft-schedule.md b/2022/draft-schedule.md
new file mode 100644
index 00000000..b79784aa
--- /dev/null
+++ b/2022/draft-schedule.md
@@ -0,0 +1,53 @@
+This is a *DRAFT* schedule.
+<svg width="600" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="600" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sat</text> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <title> Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="6" y="15" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(29,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs"> <title> Back to school with Emacs</title> <rect x="56" y="15" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(79,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <title> How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="93" y="15" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(103,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <title> Writing and organizing literature notes for scientific writing</title> <rect x="143" y="15" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(166,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <title> Attending and organizing Emacs meetups</title> <rect x="300" y="15" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(310,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative"> <title> The Emacs Buddy initiative</title> <rect x="337" y="15" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(347,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <title> The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="362" y="15" opacity="0.8" width="37" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(397,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas"> <title> Real estate and Org table formulas</title> <rect x="437" y="15" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <title> Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="475" y="15" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(498,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <title> Edit live Jupyter notebook cells with Emacs</title> <rect x="525" y="15" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(535,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <title> orgvm: a simple HTTP server for org</title> <rect x="562" y="15" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(572,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <title> Tree-sitter beyond syntax highlighting</title> <rect x="75" y="75" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(85,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <title> lsp-bridge: complete asynchronous LSP client</title> <rect x="100" y="75" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <title> asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="137" y="75" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(147,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <title> Emacs should become a Wayland compositor</title> <rect x="181" y="75" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(191,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <title> Using SQLite as a data source: a framework and an example</title> <rect x="300" y="75" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(323,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <title> Revisiting the anatomy of Emacs mail user agents</title> <rect x="356" y="75" opacity="0.8" width="37" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(391,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <title> Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="437" y="75" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev"> <title> Bidirectional links with eev</title> <rect x="493" y="75" opacity="0.8" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(497,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs"> <title> Short hyperlinks to Python docs</title> <rect x="512" y="75" opacity="0.8" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(516,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs"> <title> Haskell code exploration with Emacs</title> <rect x="531" y="75" opacity="0.8" width="37" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(566,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(75,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(150,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(225,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(375,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(450,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(525,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></svg>
+
+Jump to: <a href="#date-2022-12-03">Sat Dec 3</a> - <a href="#date-2022-12-04">Sun Dec 4</a><a name="date-2022-12-03"></a>
+# Saturday Dec 3, 2022
+<div class="schedule" data-start="2022-12-03T14:00:00+0000" data-end="2022-12-03T22:00:00+0000" data-tracks="General,Development">
+[[!template id=sched title="Emacs journalism (or everything's a nail if you hit it with Emacs)" url="/2022/talks/journalism" speakers="Alfred Zanini" q-and-a="live" track="General" slug="journalism" time="20" startutc="2022-12-03T14:05:00+0000" endutc="2022-12-03T14:25:00+0000" start="9:05" end="9:25"]]
+[[!template id=sched title="Back to school with Emacs" url="/2022/talks/school" speakers="Daniel Rösel" q-and-a="IRC" track="General" slug="school" time="20" startutc="2022-12-03T14:45:00+0000" endutc="2022-12-03T15:05:00+0000" start="9:45" end="10:05"]]
+[[!template id=sched title="Tree-sitter beyond syntax highlighting" url="/2022/talks/treesitter" speakers="Abin Simon" q-and-a="IRC" track="Development" slug="treesitter" time="10" startutc="2022-12-03T15:00:00+0000" endutc="2022-12-03T15:10:00+0000" start="10:00" end="10:10"]]
+[[!template id=sched title="How to incorporate handwritten notes into Emacs Orgmode" url="/2022/talks/handwritten" speakers="Bala Ramadurai" q-and-a="live" track="General" slug="handwritten" time="10" startutc="2022-12-03T15:15:00+0000" endutc="2022-12-03T15:25:00+0000" start="10:15" end="10:25"]]
+[[!template id=sched title="lsp-bridge: complete asynchronous LSP client" url="/2022/talks/lspbridge" speakers="Andy Stewart, Matthew Zeng" q-and-a="IRC" track="Development" slug="lspbridge" time="20" startutc="2022-12-03T15:20:00+0000" endutc="2022-12-03T15:40:00+0000" start="10:20" end="10:40"]]
+[[!template id=sched title="asm-blox: a game based on WebAssembly that no one asked for" url="/2022/talks/asmblox" speakers="Zachary Romero" q-and-a="live" track="Development" slug="asmblox" time="10" startutc="2022-12-03T15:50:00+0000" endutc="2022-12-03T16:00:00+0000" start="10:50" end="11:00"]]
+[[!template id=sched title="Writing and organizing literature notes for scientific writing" url="/2022/talks/science" speakers="Vidianos" q-and-a="live" track="General" slug="science" time="20" startutc="2022-12-03T15:55:00+0000" endutc="2022-12-03T16:15:00+0000" start="10:55" end="11:15"]]
+[[!template id=sched title="Emacs should become a Wayland compositor" url="/2022/talks/wayland" speakers="Michael Bauer" q-and-a="live" track="Development" slug="wayland" time="10" startutc="2022-12-03T16:25:00+0000" endutc="2022-12-03T16:35:00+0000" start="11:25" end="11:35"]]
+[[!template id=sched title="Attending and organizing Emacs meetups" url="/2022/talks/meetups" speakers="Bhavin Gandhi" q-and-a="live" track="General" slug="meetups" time="10" startutc="2022-12-03T18:00:00+0000" endutc="2022-12-03T18:10:00+0000" start="1:00" end="1:10"]]
+[[!template id=sched title="Using SQLite as a data source: a framework and an example" url="/2022/talks/sqlite" speakers="Andrew Hyatt" q-and-a="live" track="Development" slug="sqlite" time="20" startutc="2022-12-03T18:00:00+0000" endutc="2022-12-03T18:20:00+0000" start="1:00" end="1:20"]]
+[[!template id=sched title="The Emacs Buddy initiative" url="/2022/talks/buddy" speakers="Andrea" q-and-a="IRC" track="General" slug="buddy" time="10" startutc="2022-12-03T18:30:00+0000" endutc="2022-12-03T18:40:00+0000" start="1:30" end="1:40"]]
+[[!template id=sched title="Revisiting the anatomy of Emacs mail user agents" url="/2022/talks/mail" speakers="Mohsen BANAN" q-and-a="live" track="Development" slug="mail" time="30" startutc="2022-12-03T18:45:00+0000" endutc="2022-12-03T19:15:00+0000" start="1:45" end="2:15"]]
+[[!template id=sched title="The ship that builds itself: How we used Emacs to develop a workshop for communities" url="/2022/talks/community" speakers="Noorah Alhasan, Joseph Corneli, Leo Vivier" q-and-a="live" track="General" slug="community" time="30" startutc="2022-12-03T18:50:00+0000" endutc="2022-12-03T19:20:00+0000" start="1:50" end="2:20"]]
+[[!template id=sched title="Real estate and Org table formulas" url="/2022/talks/realestate" speakers="Daniel Gopar" q-and-a="pad" track="General" slug="realestate" time="20" startutc="2022-12-03T19:50:00+0000" endutc="2022-12-03T20:10:00+0000" start="2:50" end="3:10"]]
+[[!template id=sched title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" url="/2022/talks/maint" speakers="Sid Kasivajhula" q-and-a="live" track="Development" slug="maint" time="20" startutc="2022-12-03T19:50:00+0000" endutc="2022-12-03T20:10:00+0000" start="2:50" end="3:10"]]
+[[!template id=sched title="Health data journaling and visualization with Org Mode and GNUplot" url="/2022/talks/health" speakers="David O'Toole" q-and-a="live" track="General" slug="health" time="20" startutc="2022-12-03T20:20:00+0000" endutc="2022-12-03T20:40:00+0000" start="3:20" end="3:40"]]
+[[!template id=sched title="Bidirectional links with eev" url="/2022/talks/eev" speakers="Eduardo Ochs" q-and-a="IRC" track="Development" slug="eev" time="5" startutc="2022-12-03T20:35:00+0000" endutc="2022-12-03T20:40:00+0000" start="3:35" end="3:40"]]
+[[!template id=sched title="Short hyperlinks to Python docs" url="/2022/talks/python" speakers="Eduardo Ochs" q-and-a="IRC" track="Development" slug="python" time="5" startutc="2022-12-03T20:50:00+0000" endutc="2022-12-03T20:55:00+0000" start="3:50" end="3:55"]]
+[[!template id=sched title="Edit live Jupyter notebook cells with Emacs" url="/2022/talks/jupyter" speakers="Blaine Mooers" q-and-a="live" track="General" slug="jupyter" time="10" startutc="2022-12-03T21:00:00+0000" endutc="2022-12-03T21:10:00+0000" start="4:00" end="4:10"]]
+[[!template id=sched title="Haskell code exploration with Emacs" url="/2022/talks/haskell" speakers="Yuchen Pei" q-and-a="live" track="Development" slug="haskell" time="30" startutc="2022-12-03T21:05:00+0000" endutc="2022-12-03T21:35:00+0000" start="4:05" end="4:35"]]
+[[!template id=sched title="orgvm: a simple HTTP server for org" url="/2022/talks/orgvm" speakers="Corwin Brust" q-and-a="live" track="General" slug="orgvm" time="10" startutc="2022-12-03T21:30:00+0000" endutc="2022-12-03T21:40:00+0000" start="4:30" end="4:40"]]
+</div>
+
+<svg width="600" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="600" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sun</text> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <title> Results of the 2022 Emacs Survey</title> <rect x="6" y="15" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(29,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org"> <title> This Year in Org</title> <rect x="43" y="15" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(53,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <title> Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="75" y="15" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(98,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <title> Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="125" y="15" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(135,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <title> Linking personal info with Hyperbole implicit buttons</title> <rect x="162" y="15" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(172,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <title> Powerful productivity with Hyperbole and Org Mode</title> <rect x="300" y="15" opacity="0.8" width="37" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(335,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers"> <title> Org workflows for developers</title> <rect x="362" y="15" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(385,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <title> GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="412" y="15" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(435,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <title> Putting Org Mode on the Indieweb</title> <rect x="475" y="15" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(498,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <title> Fanfare for the Common Emacs User</title> <rect x="525" y="15" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(535,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction"> <title> rde Emacs introduction</title> <rect x="75" y="75" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(98,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs"> <title> justl: Driving recipes within Emacs</title> <rect x="131" y="75" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(141,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <title> Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="156" y="75" opacity="0.8" width="37" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(191,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs"> <title> Getting detached from Emacs</title> <rect x="300" y="75" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(310,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <title> Top 10 reasons why you should be using Eshell</title> <rect x="343" y="75" opacity="0.8" width="12" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(353,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool"> <title> Emacs was async before async was cool</title> <rect x="387" y="75" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(410,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus"> <title> The Wheels on D-Bus</title> <rect x="456" y="75" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(479,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs"> <title> Pre-localizing Emacs</title> <rect x="525" y="75" opacity="0.8" width="25" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(548,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(75,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(150,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(225,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(375,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(450,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(525,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></svg>
+
+Jump to: <a href="#date-2022-12-03">Sat Dec 3</a> - <a href="#date-2022-12-04">Sun Dec 4</a><a name="date-2022-12-04"></a>
+# Sunday Dec 4, 2022
+<div class="schedule" data-start="2022-12-04T14:00:00+0000" data-end="2022-12-04T22:00:00+0000" data-tracks="General,Development">
+[[!template id=sched title="Results of the 2022 Emacs Survey" url="/2022/talks/survey" speakers="Timothy" q-and-a="IRC" track="General" slug="survey" time="20" startutc="2022-12-04T14:05:00+0000" endutc="2022-12-04T14:25:00+0000" start="9:05" end="9:25"]]
+[[!template id=sched title="This Year in Org" url="/2022/talks/orgyear" speakers="Timothy" q-and-a="IRC" track="General" slug="orgyear" time="10" startutc="2022-12-04T14:35:00+0000" endutc="2022-12-04T14:45:00+0000" start="9:35" end="9:45"]]
+[[!template id=sched title="Build a Zettelkasten with the Hyperbole Rolodex" url="/2022/talks/rolodex" speakers="Ramin Honary" q-and-a="IRC" track="General" slug="rolodex" time="20" startutc="2022-12-04T15:00:00+0000" endutc="2022-12-04T15:20:00+0000" start="10:00" end="10:20"]]
+[[!template id=sched title="rde Emacs introduction" url="/2022/talks/rde" speakers="Andrew Tropin" q-and-a="live" track="Development" slug="rde" time="20" startutc="2022-12-04T15:00:00+0000" endutc="2022-12-04T15:20:00+0000" start="10:00" end="10:20"]]
+[[!template id=sched title="Linking headings with org-super-links (poor-man's Zettelkasten)" url="/2022/talks/orgsuperlinks" speakers="Karl Voit" q-and-a="live" track="General" slug="orgsuperlinks" time="10" startutc="2022-12-04T15:40:00+0000" endutc="2022-12-04T15:50:00+0000" start="10:40" end="10:50"]]
+[[!template id=sched title="justl: Driving recipes within Emacs" url="/2022/talks/justl" speakers="Sibi Prabakaran" q-and-a="IRC" track="Development" slug="justl" time="10" startutc="2022-12-04T15:45:00+0000" endutc="2022-12-04T15:55:00+0000" start="10:45" end="10:55"]]
+[[!template id=sched title="Elisp and the TRAMP: How to NOT write code you don't have to" url="/2022/talks/tramp" speakers="Grant Shangreaux" q-and-a="live" track="Development" slug="tramp" time="30" startutc="2022-12-04T16:05:00+0000" endutc="2022-12-04T16:35:00+0000" start="11:05" end="11:35"]]
+[[!template id=sched title="Linking personal info with Hyperbole implicit buttons" url="/2022/talks/buttons" speakers="Mats Lidell" q-and-a="live" track="General" slug="buttons" time="10" startutc="2022-12-04T16:10:00+0000" endutc="2022-12-04T16:20:00+0000" start="11:10" end="11:20"]]
+[[!template id=sched title="Powerful productivity with Hyperbole and Org Mode" url="/2022/talks/hyperorg" speakers="Robert Weiner" q-and-a="live" track="General" slug="hyperorg" time="30" startutc="2022-12-04T18:00:00+0000" endutc="2022-12-04T18:30:00+0000" start="1:00" end="1:30"]]
+[[!template id=sched title="Getting detached from Emacs" url="/2022/talks/detached" speakers="Niklas Eklund" q-and-a="live" track="Development" slug="detached" time="10" startutc="2022-12-04T18:00:00+0000" endutc="2022-12-04T18:10:00+0000" start="1:00" end="1:10"]]
+[[!template id=sched title="Top 10 reasons why you should be using Eshell" url="/2022/talks/eshell" speakers="Howard Abrams" q-and-a="live" track="Development" slug="eshell" time="10" startutc="2022-12-04T18:35:00+0000" endutc="2022-12-04T18:45:00+0000" start="1:35" end="1:45"]]
+[[!template id=sched title="Org workflows for developers" url="/2022/talks/workflows" speakers="George Mauer" q-and-a="live" track="General" slug="workflows" time="20" startutc="2022-12-04T18:50:00+0000" endutc="2022-12-04T19:10:00+0000" start="1:50" end="2:10"]]
+[[!template id=sched title="Emacs was async before async was cool" url="/2022/talks/async" speakers="Michael Herstine" q-and-a="live" track="Development" slug="async" time="20" startutc="2022-12-04T19:10:00+0000" endutc="2022-12-04T19:30:00+0000" start="2:10" end="2:30"]]
+[[!template id=sched title="GRAIL---A Generalized Representation and Aggregation of Information Layers" url="/2022/talks/grail" speakers="Sameer Pradhan" q-and-a="live" track="General" slug="grail" time="20" startutc="2022-12-04T19:30:00+0000" endutc="2022-12-04T19:50:00+0000" start="2:30" end="2:50"]]
+[[!template id=sched title="The Wheels on D-Bus" url="/2022/talks/dbus" speakers="Ian Eure" q-and-a="live" track="Development" slug="dbus" time="20" startutc="2022-12-04T20:05:00+0000" endutc="2022-12-04T20:25:00+0000" start="3:05" end="3:25"]]
+[[!template id=sched title="Putting Org Mode on the Indieweb" url="/2022/talks/indieweb" speakers="Michael Herstine" q-and-a="live" track="General" slug="indieweb" time="20" startutc="2022-12-04T20:20:00+0000" endutc="2022-12-04T20:40:00+0000" start="3:20" end="3:40"]]
+[[!template id=sched title="Fanfare for the Common Emacs User" url="/2022/talks/fanfare" speakers="John Cummings" q-and-a="live" track="General" slug="fanfare" time="10" startutc="2022-12-04T21:00:00+0000" endutc="2022-12-04T21:10:00+0000" start="4:00" end="4:10"]]
+[[!template id=sched title="Pre-localizing Emacs" url="/2022/talks/localizing" speakers="Jean-Christophe Helary" q-and-a="live" track="Development" slug="localizing" time="20" startutc="2022-12-04T21:00:00+0000" endutc="2022-12-04T21:20:00+0000" start="4:00" end="4:20"]]
+<div class="cancelled">Cancelled:<ul><li>Emacs News highlights - Sacha Chua</li></ul></div></div> \ No newline at end of file
diff --git a/2022/ideas.md b/2022/ideas.md
new file mode 100644
index 00000000..adca52ba
--- /dev/null
+++ b/2022/ideas.md
@@ -0,0 +1,13 @@
+[[!meta title="Ideas"]]
+[[!meta copyright="Copyright &copy; 2020, 2021, 2022 Amin Bandali"]]
+
+This is _the_ place to collect ideas for talks and other sessions for
+EmacsConf 2022. :-)
+
+Be sure to check out the ideas from previous years as well:
+[[2021|2021/ideas]], [[2020|2020/ideas]], [[2019|2019/ideas]],
+[[2015|2015/ideas]].
+
+## Ideas
+
+### _Add your idea here!_
diff --git a/2022/info/asmblox-after.md b/2022/info/asmblox-after.md
new file mode 100644
index 00000000..e1ce67d3
--- /dev/null
+++ b/2022/info/asmblox-after.md
@@ -0,0 +1,306 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="asmblox-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hi, I'm Zach and today I'll be giving""" start="00:00:00.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""a presentation on asm-blox,""" start="00:00:03.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""a programming game inspired by WebAssembly.""" start="00:00:05.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So programming games came into prominence""" start="00:00:08.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""about a decade ago and are loved for providing""" start="00:00:10.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""interesting programming challenges""" start="00:00:13.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""without all the messiness of real world programming.""" start="00:00:14.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""I wanted to make a programming game""" start="00:00:17.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and I decided to base it off of TIS-100,""" start="00:00:19.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""having a pretty basic UI.""" start="00:00:24.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It seemed pretty doable in Emacs.""" start="00:00:28.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""TIS 100 is a programming game""" start="00:00:30.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""where you write a fictional assembly language""" start="00:00:33.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""into a grid of cells which can each""" start="00:00:35.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""communicate with one another,""" start="00:00:37.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""you're tasked with solving""" start="00:00:39.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""fairly simple CS 101 like problems.""" start="00:00:41.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""To mix things up a bit I decided to base""" start="00:00:44.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the language of asm-blox off of""" start="00:00:48.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""WebAssembly, which is stack based,""" start="00:00:49.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""as opposed to TIS-100 which is registered based.""" start="00:00:52.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here you can see the same program""" start="00:00:55.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""written in the game TIS-100,""" start="00:00:59.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""what it looks like in asm-blox,""" start="00:01:01.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and the original WebAssembly that it's based off of.""" start="00:01:03.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""With that said, let's get into a demo.""" start="00:01:08.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This is the game board.""" start="00:01:10.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's a 4 by 3 grid.""" start="00:01:12.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Each cell has a stack of size 4.""" start="00:01:14.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""First off, I'll show some of the stack editing commands.""" start="00:01:16.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can add a value with the const function.""" start="00:01:20.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here we're adding two values to this stack""" start="00:01:23.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""to get added, and eventually the stack gets overflowed.""" start="00:01:27.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can fix that as follows with the clear command,""" start="00:01:33.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""so that clears the stack.""" start="00:01:37.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can duplicate values on the stack.""" start="00:01:40.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This duplicates the item at the bottom of the stack.""" start="00:01:43.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""10 gets put on, 20 gets put on,""" start="00:01:45.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""then 10 will get duplicated""" start="00:01:48.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and put on the top of the stack.""" start="00:01:50.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can increment. For example, this increments""" start="00:01:52.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the second to bottom, the second to bottom""" start="00:01:55.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""from the stack.""" start="00:01:58.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So 10, 20, increment that, clear.""" start="00:01:59.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""That's basic stack operations.""" start="00:02:04.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Next up, we have numeric commands.""" start="00:02:07.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""For example, here, if we add &quot;add&quot;,""" start="00:02:11.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it pops two values off the stack,""" start="00:02:12.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""adds them, and pushes the result on.""" start="00:02:14.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Another way we can write this is as follows.""" start="00:02:17.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can have the add here""" start="00:02:20.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then nest the two constants,""" start="00:02:22.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then this does the same thing.""" start="00:02:26.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""First, the inner constant operations run,""" start="00:02:28.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then the outer add operation runs.""" start="00:02:31.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can nest as deeply as we want.""" start="00:02:35.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""There's also subtraction, multiplication, and whatnot.""" start="00:02:40.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Next up are Boolean operations.""" start="00:02:44.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Zero counts as true.""" start="00:02:46.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Anything else--sorry, zero counts as false.""" start="00:02:49.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Anything else is true.""" start="00:02:51.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""For example, this would give us false and true,""" start="00:02:52.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""so that result should be false.""" start="00:03:01.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Zero gets put on the stack,""" start="00:03:04.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""one gets put on, and then the &quot;and&quot; operation.""" start="00:03:06.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So there's also or, not,""" start="00:03:08.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and various numerical comparison operations""" start="00:03:12.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""like greater than and less than.""" start="00:03:17.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Next up are the port operations.""" start="00:03:21.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can send values to other cells as follows.""" start="00:03:22.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here we create a value""" start="00:03:27.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then send it right.""" start="00:03:29.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let's run this.""" start="00:03:33.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The 10 goes on the stack,""" start="00:03:35.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then it gets sent to the right.""" start="00:03:37.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here it's waiting for this cell to pick it up.""" start="00:03:38.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It can pick it up just as follows.""" start="00:03:41.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So left... and then why don't we have it""" start="00:03:44.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""drop that value after it gets it.""" start="00:03:47.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So the 10 gets sent to the right.""" start="00:03:49.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This one picks it up and drops it.""" start="00:03:53.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Lastly, we have control flow,""" start="00:04:00.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""which is a bit tricky,""" start="00:04:03.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but with this visual,""" start="00:04:04.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it helps explain it.""" start="00:04:06.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""There are two block constructs, &quot;block&quot; and &quot;loop&quot;,""" start="00:04:08.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and there's two jumping constructs, &quot;br&quot; and &quot;brif&quot;.""" start="00:04:12.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So if &quot;loop&quot; is jumped to,""" start="00:04:16.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the control flow goes to the beginning,""" start="00:04:23.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the top of the loop.""" start="00:04:25.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If a block is jumped to,""" start="00:04:26.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it goes to the end of the block,""" start="00:04:28.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and these various blocks""" start="00:04:31.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""are identified by their level of nestedness.""" start="00:04:33.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""From the point of view of this jump statement,""" start="00:04:36.520" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""this &quot;br&quot; statement, this is block level 0,""" start="00:04:40.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""this is 1, this is 2.""" start="00:04:45.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So here, &quot;br 1&quot; would be referring to this loop.""" start="00:04:46.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""What this [br 1] would do is,""" start="00:04:49.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it would jump to this loop right here.""" start="00:04:51.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If we were to do this [br 2], what this would do is,""" start="00:04:54.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""this would jump past this block right here.""" start="00:04:57.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So as another example, this right here,""" start="00:05:02.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""this is a loop that generates increasing numbers.""" start="00:05:09.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Let's see. Next up, we have modules.""" start="00:05:15.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This is an example of a stack module.""" start="00:05:22.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""In addition to stack, there's also heaps.""" start="00:05:26.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""What this does is it allows us to create""" start="00:05:28.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""an extra stack that we can push and pop items onto.""" start="00:05:34.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This one can have as large size as we need.""" start="00:05:38.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here it has a size of 20.""" start="00:05:41.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's taking values from up""" start="00:05:43.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and exposing those values on the left.""" start="00:05:46.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This loop right here, it generates numbers,""" start="00:05:51.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and it's putting them onto the stack.""" start="00:05:57.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We can see here that those numbers""" start="00:05:59.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""are being exposed to this cell right here.""" start="00:06:00.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's just taking values, and eventually,""" start="00:06:03.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it's going to overflow and cause an error.""" start="00:06:07.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""That finishes the basic commands.""" start="00:06:11.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Why don't we try solving this puzzle.""" start="00:06:14.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The puzzle description is right here.""" start="00:06:16.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We want to read a value from I.""" start="00:06:21.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Send 1 to G if I is greater than 0.""" start="00:06:23.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Send 1 to E if it's equal to 0.""" start="00:06:28.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Send 1 to L if it's less than 0.""" start="00:06:30.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""And then all the other ones, we send 0 to.""" start="00:06:32.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""First things first, let's send the value we get""" start="00:06:35.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""from the input down as follows.""" start="00:06:40.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let's send that value right.""" start="00:06:44.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""You get from up.""" start="00:06:49.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Okay. So next, we're getting a value on the left.""" start="00:06:51.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Now we want to compare if this number is greater than 0.""" start="00:06:54.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If it's greater than 0, we send 1 to G.""" start="00:06:58.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let's perform the greater than operation""" start="00:06:59.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""on that item we just got, and we're comparing it to 0.""" start="00:07:03.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Now that result, we're going to send down,""" start="00:07:08.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and we're going to send this original value""" start="00:07:11.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""we got from here to the right.""" start="00:07:13.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here, we do a similar step.""" start="00:07:16.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We get the value from the left,""" start="00:07:19.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but this time, we have to do an equal operation.""" start="00:07:20.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Is that number we got equal to 0?""" start="00:07:22.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We send that result down,""" start="00:07:25.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then send this number to the right.""" start="00:07:28.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Lastly, we get this number from the left.""" start="00:07:32.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here, we need to compare if it's less than 0.""" start="00:07:38.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We send that result down,""" start="00:07:42.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and now lastly, we drop that remaining value.""" start="00:07:45.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Okay, let's--oh, and then lastly,""" start="00:07:50.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""we need to send down the value we get up.""" start="00:07:53.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Send down, up, send down, up.""" start="00:07:56.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Okay, so let's try running this.""" start="00:08:02.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let's see. We notice that""" start="00:08:04.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the numbers are coming in from I.""" start="00:08:08.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""They're going through our various conditions""" start="00:08:10.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and should be sending all the correct values.""" start="00:08:14.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It looks like we're not getting any errors so far.""" start="00:08:18.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let's speed this up.""" start="00:08:23.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""That completes the puzzle.""" start="00:08:26.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Now let's get into some of the implementation details.""" start="00:08:33.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The first thing is the game loop.""" start="00:08:42.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The game loop is... So this is actually extremely simple.""" start="00:08:46.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""All the state for the entire game""" start="00:08:50.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""is stored in just a few variables.""" start="00:08:52.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""There's one variable storing""" start="00:08:54.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the text of each cell as a vector of strings.""" start="00:08:56.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""There's a single function""" start="00:09:01.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""that renders the entire game, the entire board.""" start="00:09:06.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""There's a single function that would render""" start="00:09:09.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""this entire screen based off of the state,""" start="00:09:11.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then the game waits for you to press a key.""" start="00:09:13.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The key usually, depending on what action you perform,""" start="00:09:19.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""updates the state and causes a re-render.""" start="00:09:24.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's an extremely simple game loop,""" start="00:09:27.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but it makes implementing it pretty easy.""" start="00:09:29.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""To demonstrate how this game loop works,""" start="00:09:32.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""I have a simple demo prepared.""" start="00:09:35.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This is a game of tic-tac-toe.""" start="00:09:38.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Let me show this real fast.""" start="00:09:41.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's an extremely simple implementation,""" start="00:09:44.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but it follows the same principles""" start="00:09:49.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""that I used in asm-blox.""" start="00:09:51.466" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""First, we have the state defined in variables.""" start="00:09:53.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Here we have two pieces of state.""" start="00:09:57.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We have which player's turn it is""" start="00:09:59.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and the state of the game board.""" start="00:10:01.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The player turn can be nil if it's empty,""" start="00:10:03.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the string &quot;x&quot; or the string &quot;o&quot;.""" start="00:10:06.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Then the game board is a list of nine board elements.""" start="00:10:08.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So that's the state.""" start="00:10:14.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Then we have a helper function.""" start="00:10:16.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""You can go into the details,""" start="00:10:18.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but it just returns true""" start="00:10:19.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""if the board has a winning player.""" start="00:10:21.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Part two is the rendering function.""" start="00:10:25.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Only based off of the game state,""" start="00:10:30.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""we have a function that erases the buffer""" start="00:10:32.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and draws this from scratch.""" start="00:10:36.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""That's this part right here.""" start="00:10:40.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Lastly, we have the action.""" start="00:10:45.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""We have one action which is bound to RET,""" start="00:10:46.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and it places a player token.""" start="00:10:51.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Once it places a player token,""" start="00:10:55.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it rerenders the board,""" start="00:10:59.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and all the rerendering is handled by this function.""" start="00:11:03.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Then we have just creating of the mode""" start="00:11:06.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and initialization function.""" start="00:11:12.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""With these three steps""" start="00:11:14.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it clearly separates out all of the state,""" start="00:11:16.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""the rendering, and the actions,""" start="00:11:20.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and it makes implementing it very simple.""" start="00:11:22.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""One trick that's used here and that I use""" start="00:11:25.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""in my asm-blox game is that""" start="00:11:29.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""when I render the board,""" start="00:11:32.383" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""I propertize the text to contain extra information.""" start="00:11:33.317" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""For example, here, each cell has""" start="00:11:40.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""a tic-tac-toe index to indicate which number cell it is.""" start="00:11:45.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""This has index 0, 1, 2, all the way up to 8.""" start="00:11:49.400" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""That way, for placing, the only thing it has to do""" start="00:11:53.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""is just look at its position""" start="00:11:58.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""based off of the text property.""" start="00:12:01.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It makes implementation extremely simple.""" start="00:12:04.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Next up, we have the implementation of the code cells.""" start="00:12:07.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If you notice, here it's kind of weird""" start="00:12:14.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""how it's like a buffer, but each cell kind of acts""" start="00:12:16.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""like its own buffer, and it has its own limits.""" start="00:12:21.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""All of the Emacs editing--""" start="00:12:25.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""well, some of the Emacs editing commands kind of work,""" start="00:12:27.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""like beginning-of-line, end-of-line, end-of-buffer.""" start="00:12:30.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""How is that done?""" start="00:12:35.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Well, it's all just a trick, actually.""" start="00:12:38.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Each cell has text properties of which line it's at""" start="00:12:41.760" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and its cell coordinates.""" start="00:12:47.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Whenever a key is pressed for editing, moving lines--""" start="00:12:48.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""there's even kind of more complicated things""" start="00:12:54.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""like switching cells around--""" start="00:12:58.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""so all of that,""" start="00:13:00.600" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it knows which position it's in,""" start="00:13:03.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it knows what cell it's in,""" start="00:13:05.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then it copies the text of the cell,""" start="00:13:08.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""because remember, the contents of the cell""" start="00:13:12.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""are stored in internal state.""" start="00:13:16.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It copies that cell contents into a temporary buffer.""" start="00:13:18.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It then moves the point to whichever line it was""" start="00:13:23.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""in the game board.""" start="00:13:27.960" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It performs the action.""" start="00:13:31.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It makes sure that the resulting text isn't""" start="00:13:33.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""longer than the cell width or the cell height.""" start="00:13:36.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If everything checks out,""" start="00:13:40.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""it updates the state and calls a re-render.""" start="00:13:42.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So there's nothing going on in here""" start="00:13:45.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""that's, like, actually inserting a letter A.""" start="00:13:48.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It's all updating the state and causing a re-render.""" start="00:13:51.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""So this makes things like certain""" start="00:14:00.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""internal Emacs editing constructs""" start="00:14:03.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""pretty hard to use, like undoing.""" start="00:14:06.480" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Normally the undoing construct""" start="00:14:09.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""works off the contents of the buffer.""" start="00:14:12.200" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""But if your buffer is actually just""" start="00:14:15.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""a reflection of the internal state,""" start="00:14:17.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""then how does undoing work?""" start="00:14:20.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Well, it pretty much is kind of a hack.""" start="00:14:21.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""I mean, undoing is here,""" start="00:14:24.880" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""but it's pretty much redone""" start="00:14:27.040" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""in a not so configurable, not so modifiable way.""" start="00:14:32.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Pretty much everything is like that,""" start="00:14:37.560" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""from these parentheses highlighting...""" start="00:14:40.080" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Normally, parentheses highlighting""" start="00:14:42.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""would be kind of weird,""" start="00:14:46.320" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""with cross-line parentheses and everything.""" start="00:14:47.244" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""All of that had to be redone.""" start="00:14:49.840" video="mainVideo-asmblox" id="subtitle"]]
+[[!template new="1" text="""Another point about how this is implemented""" start="00:14:52.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""is the assembly text to executable code.""" start="00:14:58.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""If you're familiar with WebAssembly""" start="00:15:02.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""you might have encountered a tool wat-wasm.""" start="00:15:05.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It basically converts the WebAssembly text format""" start="00:15:10.720" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""to byte code.""" start="00:15:16.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""And what I do here... It goes through a similar process.""" start="00:15:18.280" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Normally, when you're writing this text format,""" start="00:15:22.440" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""you can nest things as deeply as you want.""" start="00:15:28.000" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Basically, what happens is it flattens out everything.""" start="00:15:30.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It kind of knows the order""" start="00:15:33.800" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""that all these things are going to get executed,""" start="00:15:35.920" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and then it puts it into one single line""" start="00:15:38.160" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""that it can just run through and execute.""" start="00:15:40.680" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""The same thing for the loops and blocks.""" start="00:15:44.120" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""It internally generates labels and jump statements.""" start="00:15:48.360" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""So that concludes this presentation.""" start="00:15:52.240" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""Thank you for listening,""" start="00:15:58.640" video="mainVideo-asmblox" id="subtitle"]]
+[[!template text="""and I hope you enjoy the rest of the conference.""" start="00:15:59.667" video="mainVideo-asmblox" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [zacromero@posteo.net](mailto:zacromero@posteo.net?subject=Comment%20for%20EmacsConf%202022%20asmblox%3A%20asm-blox%3A%20a%20game%20based%20on%20WebAssembly%20that%20no%20one%20asked%20for)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/asmblox-before.md b/2022/info/asmblox-before.md
new file mode 100644
index 00000000..d8c509ff
--- /dev/null
+++ b/2022/info/asmblox-before.md
@@ -0,0 +1,44 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Zachary Romero shares a game he wrote and how he made it. Afterwards, he will handle questions over BigBlueButton.
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="asmblox-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="asmblox-mainVideo" data="""
+00:00.000 Introduction
+00:30.680 TIS-100
+00:44.960 WebAssembly
+01:08.040 Basic stack operations
+02:07.640 Numeric commands
+02:44.680 Boolean operations
+03:21.400 Port operations
+04:00.240 Control flow
+05:15.720 Modules
+06:14.480 Puzzle
+08:33.040 The game loop
+09:35.200 Tic-tac-toe
+11:25.880 Text properties
+12:07.800 Code cells
+14:00.920 Undo
+14:37.560 Parentheses
+14:52.360 Assembly text to executable code
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.webm">Download --main.webm (238MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/rfZ2V1DZNgpMh18gKrsXmY">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="asmblox-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="asmblox-qanda" data="""
+00:00.000 Introduction
+01:12.600 Why did you choose an internal state versus many 'state buffers'?
+02:10.720 Do you have plans to port shenzhen.io to Emacs?
+02:29.960 Did this use WASM?
+02:59.800 Why wasm rather than a more traditional Assembly dialect? It wouldn't be harder to implement, right?
+05:08.960 Any next projects on your mind?
+05:52.680 Does this work with any other paren-based editing packages?
+06:46.920 What kind of tool could use this idea?
+07:56.280 How did you go about designing the puzzles?
+08:39.320 What are your favorite changes in the upcoming Emacs 29?
+09:07.480 Are there tools to add more puzzles?
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.webm">Download --answers.webm (24MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers--chapters.vtt">Download --answers--chapters.vtt</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/asmblox-nav.md b/2022/info/asmblox-nav.md
new file mode 100644
index 00000000..f28a2155
--- /dev/null
+++ b/2022/info/asmblox-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/science">Writing and organizing literature notes for scientific writing</a>
+Next by track: <a href="/2022/talks/buddy">The Emacs Buddy initiative</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/async-after.md b/2022/info/async-after.md
new file mode 100644
index 00000000..28a74f96
--- /dev/null
+++ b/2022/info/async-after.md
@@ -0,0 +1,396 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="async-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hey everyone. I'm Michael,""" start="00:00:00.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and I'm going to be talking to you today""" start="00:00:02.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""about asynchronous programming in Emacs Lisp.""" start="00:00:04.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I'm located in the San Francisco Bay Area,""" start="00:00:07.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""where I'm a developer as well as""" start="00:00:10.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a long time Emacs user.""" start="00:00:11.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""You may have heard of async""" start="00:00:14.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""or asynchronous programming.""" start="00:00:15.981" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The idea has been around for decades,""" start="00:00:18.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but it first gained widespread attention""" start="00:00:20.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in JavaScript back in the aughts.""" start="00:00:23.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And in the teens it gained tremendous popularity""" start="00:00:26.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in the DevOps world with Go lang.""" start="00:00:29.521" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And just in the last few years,""" start="00:00:31.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""support for async programming has landed in Rust.""" start="00:00:33.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Well, it can be done in Emacs as well,""" start="00:00:37.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and this talk will demonstrate that""" start="00:00:40.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""by walking you through a little problem""" start="00:00:42.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that I actually solved for myself.""" start="00:00:44.600" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""Like a lot of these stories,""" start="00:00:47.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it begins with scratching a personal itch.""" start="00:00:49.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""In my case, automating my music server.""" start="00:00:51.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I use something called the Music Player Daemon""" start="00:00:55.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""locally, and as the name suggests,""" start="00:00:57.537" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it just kind of hangs out in the background.""" start="00:01:00.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Reads music files,""" start="00:01:03.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and talks to assorted sound drivers.""" start="00:01:04.771" video="mainVideo-async" id="subtitle"]]
+[[!template text="""In fact, it is so focused on""" start="00:01:08.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that mission that it doesn't even offer""" start="00:01:09.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a user interface.""" start="00:01:11.354" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Instead, it serves an API""" start="00:01:12.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and invites application developers""" start="00:01:14.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to build clients on top of that API.""" start="00:01:16.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, so let's hop into a vterm,""" start="00:01:19.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and I'd like to show you the MPD client I use""" start="00:01:22.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""for my daily driver, something called NCMP CPP.""" start="00:01:25.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Doesn't exactly roll off the tongue,""" start="00:01:29.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but I've got a playlist,""" start="00:01:31.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I can browse the file system,""" start="00:01:33.461" video="mainVideo-async" id="subtitle"]]
+[[!template text="""looks like I can search my music library,""" start="00:01:36.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""yada yada yada.""" start="00:01:39.344" video="mainVideo-async" id="subtitle"]]
+[[!template text="""It's got all the basic features.""" start="00:01:40.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The point that I want to make is that""" start="00:01:42.560" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""NCMP CPP is a completely independent project""" start="00:01:44.854" video="mainVideo-async" id="subtitle"]]
+[[!template text="""of MPD, separate and distinct.""" start="00:01:50.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""It does all of its work by simply communicating""" start="00:01:53.680" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with the Music Player Demon over the API.""" start="00:01:57.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Well, I wanted to program to that API""" start="00:02:01.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""only from within Emacs.""" start="00:02:03.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Now, there are already Emacs MPD clients out there,""" start="00:02:05.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but I didn't really want a full-blown client.""" start="00:02:09.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I just wanted a few small tweaks""" start="00:02:11.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""over my current configuration.""" start="00:02:14.137" video="mainVideo-async" id="subtitle"]]
+[[!template text="""A command to skip to the next song.""" start="00:02:16.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Maybe shove the current track into the mode line.""" start="00:02:19.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Things like this.""" start="00:02:22.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I needed an Elisp API that would let me do this.""" start="00:02:24.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, well, let's get out of ncmpcpp,""" start="00:02:28.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and let's get into a netcat session""" start="00:02:32.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with my local MPD server.""" start="00:02:37.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""As you can see, we get a welcome string.""" start="00:02:39.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, it is a server goes first protocol.""" start="00:02:43.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""But after that it's a very familiar""" start="00:02:46.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""text based request response oriented protocol.""" start="00:02:49.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I can ask for the volume.""" start="00:02:53.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I can ask for the status.""" start="00:02:56.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""But in particular I wanted an asynchronous API.""" start="00:02:58.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If I issue a command like""" start="00:03:06.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""find every track in my library,""" start="00:03:07.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that's going to produce a lot of data.""" start="00:03:11.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That's a human perceptible pause""" start="00:03:15.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""as Emacs processes all the input.""" start="00:03:18.920" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""What I wanted was a style of programming""" start="00:03:22.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""where I could fire off my command,""" start="00:03:25.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""have the Emacs command loop keep working,""" start="00:03:28.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and only invoke some callback""" start="00:03:31.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""when there was data available.""" start="00:03:33.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Well, Emacs is famously single threaded,""" start="00:03:35.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""so it shouldn't come as a surprise that it offers""" start="00:03:38.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a rich set of primitives that enable the sort of""" start="00:03:42.221" video="mainVideo-async" id="subtitle"]]
+[[!template text="""network programming that I wanted to do.""" start="00:03:45.654" video="mainVideo-async" id="subtitle"]]
+[[!template text="""In particular, it offers""" start="00:03:48.271" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a function called `make-network-process`.""" start="00:03:50.671" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Now this method offers""" start="00:03:53.404" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a bewildering variety of options,""" start="00:03:54.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but at the heart of the matter""" start="00:03:57.721" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it opens a network connection""" start="00:03:59.487" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to some endpoint out there,""" start="00:04:01.054" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and we can configure it to be non-blocking.""" start="00:04:02.687" video="mainVideo-async" id="subtitle"]]
+[[!template text="""It returns a handle that you can use to refer""" start="00:04:06.104" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to this network connection with other methods.""" start="00:04:10.421" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Other methods such as `process-send-string`,""" start="00:04:13.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which as the name suggests,""" start="00:04:17.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""allows you to send textual data""" start="00:04:19.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to the remote endpoint of your network connection.""" start="00:04:21.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""You can also use it with `set-process-filter`,""" start="00:04:26.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which allows you to associate a callback""" start="00:04:29.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with your network connection.""" start="00:04:32.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That callback will be invoked""" start="00:04:33.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""when there is data available""" start="00:04:35.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in the process's read buffer.""" start="00:04:37.804" video="mainVideo-async" id="subtitle"]]
+[[!template text="""In other words,""" start="00:04:40.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in a request response oriented protocol""" start="00:04:41.254" video="mainVideo-async" id="subtitle"]]
+[[!template text="""like that of MPD, you open your socket""" start="00:04:44.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with `make-network-process`,""" start="00:04:47.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""send your request via `process-send-string`""" start="00:04:50.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and life will just continue in Emacs""" start="00:04:53.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""until some data shows up""" start="00:04:56.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in the process's read buffer,""" start="00:04:57.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at which point your callback will be invoked.""" start="00:05:00.720" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""It turns out this was enough""" start="00:05:05.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""for a purpose built async runtime.""" start="00:05:07.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Let's work through the sequence of events""" start="00:05:12.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""when opening a connection""" start="00:05:14.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and firing off a few commands in this style.""" start="00:05:16.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, let's imagine a library""" start="00:05:18.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that offers a connection object of some sort,""" start="00:05:22.887" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a caller, and an MPD server out on the network.""" start="00:05:25.767" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The caller will presumably get themselves""" start="00:05:29.487" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a connection object by invoking some sort""" start="00:05:31.807" video="mainVideo-async" id="subtitle"]]
+[[!template text="""of connect method on our library.""" start="00:05:34.954" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We can handle this through `make-network-process`,""" start="00:05:38.327" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but we're going to invoke `make-network-process`""" start="00:05:41.047" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with nowait equal to true,""" start="00:05:45.487" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in other words asynchronously.""" start="00:05:47.167" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That means the method is going to return immediately.""" start="00:05:50.567" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We won't even know if the connection is up,""" start="00:05:52.927" video="mainVideo-async" id="subtitle"]]
+[[!template text="""let alone what the response would be.""" start="00:05:56.327" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""This has some implications.""" start="00:05:59.247" video="mainVideo-async" id="subtitle"]]
+[[!template text="""At this point we've returned control to the caller,""" start="00:06:01.807" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the Emacs event loop is proceeding""" start="00:06:05.247" video="mainVideo-async" id="subtitle"]]
+[[!template text="""quite happily, and so the caller is free""" start="00:06:08.247" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to start using our connection object.""" start="00:06:11.304" video="mainVideo-async" id="subtitle"]]
+[[!template text="""They might say issue a status command.""" start="00:06:15.047" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, well, in our library""" start="00:06:18.367" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we don't have a connection yet.""" start="00:06:20.248" video="mainVideo-async" id="subtitle"]]
+[[!template text="""How on earth are we going to service this?""" start="00:06:22.887" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Well, we can simply give ourselves a queue""" start="00:06:26.607" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and note down the fact that""" start="00:06:29.807" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we owe a status command.""" start="00:06:31.820" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That's pretty quick.""" start="00:06:34.567" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We've now returned control back to our caller,""" start="00:06:35.647" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and they are again free to issue more commands.""" start="00:06:38.087" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Maybe they issue a play command.""" start="00:06:40.527" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, well, we're going to go deeper into depth,""" start="00:06:42.567" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and note that we also owe a play command.""" start="00:06:45.167" video="mainVideo-async" id="subtitle"]]
+[[!template text="""At some point in the indeterminate future,""" start="00:06:51.127" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the connection will get up,""" start="00:06:54.007" video="mainVideo-async" id="subtitle"]]
+[[!template text="""MPD will allocate resources to track a new client.""" start="00:06:57.598" video="mainVideo-async" id="subtitle"]]
+[[!template text="""They will write the welcome string into the socket,""" start="00:07:03.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and those bytes are going to show up""" start="00:07:06.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in the Emacs process's read buffer,""" start="00:07:07.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at which point our callback will be invoked.""" start="00:07:10.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We can parse the welcome string, maybe""" start="00:07:13.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""note the version of that connection object""" start="00:07:17.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that might come in handy.""" start="00:07:19.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""But the key point is our callback needs to""" start="00:07:20.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""take a look at the queue and notice:""" start="00:07:23.021" video="mainVideo-async" id="subtitle"]]
+[[!template text="""&quot;Oh. We owe a status command,&quot;""" start="00:07:25.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and so we'll invoke `process-send-string`,""" start="00:07:27.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and send the status command down the pipe.""" start="00:07:29.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Again, at some indeterminate time in the future""" start="00:07:32.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""some bytes are going to show up""" start="00:07:36.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in our process's read buffer""" start="00:07:38.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and our callback will again be invoked.""" start="00:07:41.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We've got volume is 75 plus a lot of other stuff,""" start="00:07:44.721" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and here we come to the next problem.""" start="00:07:48.560" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""If our caller invoked status,""" start="00:07:50.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""they probably wanted to know about the status,""" start="00:07:54.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""so how shall we get them to them?""" start="00:07:56.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Well, there's really not a lot of options""" start="00:07:59.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at this point except the callback.""" start="00:08:02.601" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, so change of plan.""" start="00:08:04.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Our queue is no longer a queue of commands.""" start="00:08:07.568" video="mainVideo-async" id="subtitle"]]
+[[!template text="""It's going to be a queue of commands""" start="00:08:11.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with associated callbacks.""" start="00:08:13.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We read the response off the socket,""" start="00:08:15.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""invoke our caller supplied callback,""" start="00:08:20.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and then pop the queue.""" start="00:08:23.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""At this point our callback""" start="00:08:26.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""(the library callback) needs to know""" start="00:08:28.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that we still have a pending command,""" start="00:08:32.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we fire that off down the pipe,""" start="00:08:34.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at some indeterminate time in the future""" start="00:08:35.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we get a response,""" start="00:08:38.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""our callback is invoked,""" start="00:08:40.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we invoke the caller supplied callback,""" start="00:08:42.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and we pop the queue.""" start="00:08:45.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The structure of such a program""" start="00:08:47.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""is best viewed as a finite state machine.""" start="00:08:53.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And this is typically where you end up""" start="00:08:55.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in asynchronous programming,""" start="00:08:57.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at least when you don't have a runtime grafted""" start="00:08:59.835" video="mainVideo-async" id="subtitle"]]
+[[!template text="""onto your program the way you do with Go lang,""" start="00:09:02.551" video="mainVideo-async" id="subtitle"]]
+[[!template text="""or when you don't have sort of extensive""" start="00:09:04.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""library support the way you do with Rust.""" start="00:09:07.251" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Your data structure exists in one of these states""" start="00:09:09.680" video="mainVideo-async" id="subtitle"]]
+[[!template text="""at any given time,""" start="00:09:14.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and when input shows up on your file descriptor,""" start="00:09:15.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""you transition along one of these edges""" start="00:09:18.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to a new state.""" start="00:09:21.368" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""Cool. So, let's take a look at some of the code""" start="00:09:24.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that flows from this.""" start="00:09:28.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, let's hop over to an Emacs""" start="00:09:30.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and take a look at how we might code this up.""" start="00:09:32.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If you recall the sequence diagrams I shared,""" start="00:09:35.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we're going to be scribbling down the command""" start="00:09:38.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and the callback that we'll be invoking""" start="00:09:40.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""upon its completion.""" start="00:09:42.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The first thing I did was""" start="00:09:43.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""give myself a little command struct.""" start="00:09:44.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""With that, I was able to define""" start="00:09:47.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the connection object.""" start="00:09:51.159" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We're going to be storing""" start="00:09:52.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the handle to the connection.""" start="00:09:55.134" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We're going to write down the protocol version""" start="00:09:56.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that we harvest from the welcome message,""" start="00:09:59.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and of course we'll be recording""" start="00:10:02.117" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the command queue as well.""" start="00:10:04.249" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And so I gave myself a little connection object,""" start="00:10:06.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""connection struct with those three attributes.""" start="00:10:08.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""With the data model squared away,""" start="00:10:12.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it was really pretty easy""" start="00:10:15.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to code up the connect implementation.""" start="00:10:16.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I'm eliding some details for exposition purposes,""" start="00:10:19.918" video="mainVideo-async" id="subtitle"]]
+[[!template text="""but in the event it's really not that more complex""" start="00:10:25.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""than what you see here.""" start="00:10:29.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We're going to unpack the arguments,""" start="00:10:31.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""figure out where the MPD server is""" start="00:10:32.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to which you would like us to connect.""" start="00:10:35.651" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We'll connect via `make-network-process`.""" start="00:10:37.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We'll associate a library defined callback""" start="00:10:40.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""with that connection via `set-process-filter`.""" start="00:10:42.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Then we'll instantiate the connection object""" start="00:10:45.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and return it to the caller.""" start="00:10:48.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Once the caller has a connection object,""" start="00:10:51.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""they're free to send commands down that connection.""" start="00:10:53.818" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, what we're doing here is simply""" start="00:10:57.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""instantiating a command object""" start="00:11:00.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""on the basis of the caller supplied arguments""" start="00:11:02.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and appending it to the queue.""" start="00:11:05.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Then the last thing we do,""" start="00:11:07.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and I've just indicated this with a comment,""" start="00:11:08.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""is we kick the queue.""" start="00:11:10.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""This kind of goes back""" start="00:11:12.680" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to the state transition diagram""" start="00:11:14.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I laid out earlier.""" start="00:11:16.680" video="mainVideo-async" id="subtitle"]]
+[[!template text="""What this means is the logic for saying,""" start="00:11:18.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""well, if we're awaiting the completion""" start="00:11:22.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""of a previously sent command,""" start="00:11:24.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""there's really not much more to be done.""" start="00:11:25.851" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We're just going to push this command""" start="00:11:27.501" video="mainVideo-async" id="subtitle"]]
+[[!template text="""onto the queue and return.""" start="00:11:30.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""On the other hand, if the queue is empty""" start="00:11:31.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""on entry to `elmpd-send`,""" start="00:11:34.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""there's no reason not to just""" start="00:11:37.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""immediately send the command.""" start="00:11:38.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""This is an example of the sort of client side code""" start="00:11:40.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that results from this API.""" start="00:11:46.600" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""So, you can see here, we are giving ourselves""" start="00:11:48.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a connection to the MPD server on the localhost.""" start="00:11:51.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We're going to send the get volume command""" start="00:11:54.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""down that connection.""" start="00:11:57.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And if that command completes and all is well,""" start="00:11:58.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we'll just send a message to Emacs.""" start="00:12:02.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Unfortunately, you can't see my minibuffer,""" start="00:12:05.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""so I'll hop over to the Messages buffer.""" start="00:12:07.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And there's our result.""" start="00:12:11.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""The volume is 43.""" start="00:12:12.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Great, I thought.""" start="00:12:15.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Simple, clean, responsive, easy to code to.""" start="00:12:18.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That is unfortunately not the end of the story.""" start="00:12:24.160" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""Let's continue this example a little bit.""" start="00:12:27.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Let's imagine that""" start="00:12:31.736" video="mainVideo-async" id="subtitle"]]
+[[!template text="""if the volume comes back from the server""" start="00:12:33.301" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and it is less than 50,""" start="00:12:35.501" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we would like to set it to 50.""" start="00:12:37.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, this is interesting""" start="00:12:39.335" video="mainVideo-async" id="subtitle"]]
+[[!template text="""because we have two commands""" start="00:12:41.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and whether or not we send the second command""" start="00:12:43.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it is going to depend on""" start="00:12:45.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the response we get from the first.""" start="00:12:46.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay. I thought, well, that's fine.""" start="00:12:48.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I can simply put that logic in the callback""" start="00:12:51.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that I specified for the get volume command.""" start="00:12:55.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, here we are we check the return code,""" start="00:12:58.701" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we parse the volume, we compare it to 50,""" start="00:13:01.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and if it's less we just invoke `elmpd-send` again""" start="00:13:04.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""from the first command's callback.""" start="00:13:08.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Okay, I could live with that""" start="00:13:10.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it's not the worst thing I've ever seen.""" start="00:13:14.051" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""Let's extend this example a little further,""" start="00:13:15.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and this is contrived, but bear with me.""" start="00:13:19.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Let us suppose that if we do set the volume to 50,""" start="00:13:21.868" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we'd like to get the volume one more time just to""" start="00:13:25.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""make sure that our change took on the server.""" start="00:13:28.635" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We can play the same game.""" start="00:13:30.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We will put that logic in the callback""" start="00:13:33.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that we specified for the set volume command.""" start="00:13:37.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And here we are, we check the return code,""" start="00:13:40.168" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we send a message to Emacs,""" start="00:13:43.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we send the get volume command again""" start="00:13:45.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""along with its own callback.""" start="00:13:49.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And at this point I hope it's clear""" start="00:13:51.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""(the problem that is emerging),""" start="00:13:55.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and if it's not yet, let me note that so far""" start="00:13:57.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we're only handling the happy path""" start="00:14:01.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""in each of these callbacks.""" start="00:14:03.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""We really ought to do something about the error path.""" start="00:14:04.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""For purposes of illustration, let's just say,""" start="00:14:06.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""we send a message to Emacs""" start="00:14:10.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that means it would look like this.""" start="00:14:12.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""At this point that I really think""" start="00:14:14.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it's impossible to deny that this API is actually""" start="00:14:17.335" video="mainVideo-async" id="subtitle"]]
+[[!template text="""not that easy to program to.""" start="00:14:20.851" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If there are any JavaScript devs watching,""" start="00:14:23.280" video="mainVideo-async" id="subtitle"]]
+[[!template text="""you're probably chuckling right now""" start="00:14:27.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""because I have discovered for myself""" start="00:14:28.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""what they call &quot;callback hell&quot;.""" start="00:14:30.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If you are returning""" start="00:14:33.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the results of asynchronous function invocations""" start="00:14:37.868" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to their caller via callbacks,""" start="00:14:40.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""you pretty much inevitably end up in this sort of""" start="00:14:42.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""deeply nested sequence of callbacks""" start="00:14:45.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that is difficult to write, difficult to read,""" start="00:14:48.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and difficult to reason about.""" start="00:14:50.768" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""And yet when I was stuck in this situation""" start="00:14:53.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it just seemed like it really shouldn't be this bad.""" start="00:14:57.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If I give myself this sort of tabular data structure,""" start="00:15:00.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I felt that this expressed precisely the same logic""" start="00:15:05.320" video="mainVideo-async" id="subtitle"]]
+[[!template text="""just in a much easier to read manner.""" start="00:15:10.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I could, in my mind's eye,""" start="00:15:12.868" video="mainVideo-async" id="subtitle"]]
+[[!template text="""see the code for transforming this data structure,""" start="00:15:15.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which is really just a list,""" start="00:15:19.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""into the code that you just""" start="00:15:21.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""saw in the previous slide,""" start="00:15:23.585" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and really if Lisp is good at anything""" start="00:15:25.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it is list processing right.""" start="00:15:29.440" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And it was really at this point""" start="00:15:31.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""that a little bit of enlightenment dawned.""" start="00:15:33.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I learned that Lisp is homo iconic,""" start="00:15:36.368" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which is just means that the language itself""" start="00:15:40.800" video="mainVideo-async" id="subtitle"]]
+[[!template text="""is a data structure in that language.""" start="00:15:46.040" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Lisp code is, after all, just a list.""" start="00:15:49.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And the power of Lisp macros""" start="00:15:53.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""is taking that data structure,""" start="00:15:57.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""some data structure that you've defined,""" start="00:15:59.760" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and doing exactly what I wanted to do.""" start="00:16:02.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Transforming it from one list into another,""" start="00:16:04.640" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the destination list being Lisp code.""" start="00:16:07.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, I got busy, and I coded up my first Lisp macro,""" start="00:16:11.835" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which I called `elmpd-chain`.""" start="00:16:16.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And that lengthy list of, you know,""" start="00:16:19.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""three or four nested callbacks""" start="00:16:21.600" video="mainVideo-async" id="subtitle"]]
+[[!template text="""gets turned into this,""" start="00:16:24.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""which I hope you'll agree is much simpler""" start="00:16:25.920" video="mainVideo-async" id="subtitle"]]
+[[!template text="""much easier to read, much easier to reason about.""" start="00:16:29.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""And if you're morbidly curious,""" start="00:16:32.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""you can expand your macros,""" start="00:16:36.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and this invocation of `elmpd-chain` expands to this.""" start="00:16:40.160" video="mainVideo-async" id="subtitle"]]
+[[!template text="""So, that's my story.""" start="00:16:44.200" video="mainVideo-async" id="subtitle"]]
+[[!template new="1" text="""In all fairness, I should note that""" start="00:16:46.400" video="mainVideo-async" id="subtitle"]]
+[[!template text="""the MPD protocol has some subtleties""" start="00:16:50.840" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and complexities that I didn't really get into,""" start="00:16:53.501" video="mainVideo-async" id="subtitle"]]
+[[!template text="""both due to time constraints""" start="00:16:56.880" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and because they're not terribly relevant""" start="00:16:58.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""to the points I wanted to touch on.""" start="00:17:00.520" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I should also note that there's""" start="00:17:02.000" video="mainVideo-async" id="subtitle"]]
+[[!template text="""a fair amount of work in the library itself""" start="00:17:05.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""around accumulating partial responses""" start="00:17:07.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""as they show up in the buffer""" start="00:17:11.240" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and dispatching them piecemeal to the caller.""" start="00:17:12.560" video="mainVideo-async" id="subtitle"]]
+[[!template text="""That was really too complex to get into here.""" start="00:17:16.120" video="mainVideo-async" id="subtitle"]]
+[[!template text="""If you would like to see the code,""" start="00:17:20.468" video="mainVideo-async" id="subtitle"]]
+[[!template text="""it's available on GitHub as well as MELPA.""" start="00:17:22.360" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I'll be putting a version of this talk""" start="00:17:25.080" video="mainVideo-async" id="subtitle"]]
+[[!template text="""on my personal site,""" start="00:17:29.200" video="mainVideo-async" id="subtitle"]]
+[[!template text="""and you can always reach out to me personally,""" start="00:17:30.480" video="mainVideo-async" id="subtitle"]]
+[[!template text="""I hang out on IRC as sp1ff,""" start="00:17:33.720" video="mainVideo-async" id="subtitle"]]
+[[!template text="""or you can just email me as sp1ff@pobox.com.""" start="00:17:36.960" video="mainVideo-async" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:17:41.920" video="mainVideo-async" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20async%3A%20Emacs%20was%20async%20before%20async%20was%20cool)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/async-before.md b/2022/info/async-before.md
new file mode 100644
index 00000000..3b3c1068
--- /dev/null
+++ b/2022/info/async-before.md
@@ -0,0 +1,39 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+# Talk
+
+<div class="vid"><video controls preload="none" id="async-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="async-mainVideo" data="""
+00:00.000 Asynchronous programming
+00:47.200 Automating my music player
+01:42.600 Working with the API
+03:22.080 make-network-process
+05:05.200 The sequence of events
+05:57.920 Queues
+07:50.480 Callbacks
+09:24.240 Client-side code
+11:48.080 Demo
+12:27.760 Logic
+13:15.520 Callback hell
+14:53.520 Lisp macros
+16:46.400 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.webm">Download --main.webm (98MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/6mKNBvuubwoWFA9SFsgUQS">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="async-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="async-qanda" data="""
+00:00.000 Introduction
+00:21.600 How does this approach compare to using tq.el, Emacs' built-in library for transaction queues?
+01:10.480 Have you considered using the aio.el library (written by Chris Wellons) that implements async/await for Emacs lisp using promises?
+02:45.440 Are you aware that EMMS has an MPD client? There's also mpc.el built into Emacs.
+05:20.360 Have you seen the Lonesome Pine Specials?
+07:44.400 Would using dynamic/special vars add anything interesting / easier to async elisp in your opinion?
+10:16.560 How does your project compare to some of the other MPD clients?
+11:55.040 Can you share the code to the macro that creates the callback tree?
+14:42.880 There's another package (chuntaro?) in addition to wellon's aio that also implements a coroutine trampoline on the emacs event loop. any thoughts on the async/await paradigm generally red/blue functions, etc?
+15:03.440 Any thoughts on the async await paradigm generally, red-blue functions, etc.?
+21:06.320 Do you think it's a viable future for Emacs to get out of callback hell?
+24:39.320 Generators
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.webm">Download --answers.webm (34MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers--chapters.vtt">Download --answers--chapters.vtt</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/async-nav.md b/2022/info/async-nav.md
new file mode 100644
index 00000000..4898e531
--- /dev/null
+++ b/2022/info/async-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/workflows">Org workflows for developers</a>
+Next by track: <a href="/2022/talks/grail">GRAIL---A Generalized Representation and Aggregation of Information Layers</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/buddy-after.md b/2022/info/buddy-after.md
new file mode 100644
index 00000000..c662c571
--- /dev/null
+++ b/2022/info/buddy-after.md
@@ -0,0 +1,156 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="buddy-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello, welcome to my talk, the Emacs Buddy Initiative.""" start="00:00:00.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Who am I?""" start="00:00:03.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I'm Andrea. I work as a Clojure Software Engineer""" start="00:00:04.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""somewhere in the middle of the UK.""" start="00:00:07.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And I started with Emacs during my PhD,""" start="00:00:09.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""thanks to my PhD supervisor""" start="00:00:12.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""that introduced me to this tool.""" start="00:00:14.120" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And from now and from then,""" start="00:00:15.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I am basically using it for everything.""" start="00:00:17.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""You can find more about this everything""" start="00:00:20.320" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""at ag91.github.io, that is my blog.""" start="00:00:22.160" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So let's get into the talk.""" start="00:00:26.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""Why Emacs Buddy?""" start="00:00:27.900" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Emacs Buddy is an initiative to bring us together.""" start="00:00:29.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And the reason is because Emacs is a limitless tool.""" start="00:00:32.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So you can keep learning about it,""" start="00:00:36.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""you can keep expanding it,""" start="00:00:38.800" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and also takes time to get up to speed.""" start="00:00:41.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So you may actually extend Emacs""" start="00:00:44.800" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""or you may actually get introduced,""" start="00:00:48.680" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""start using Emacs,""" start="00:00:50.620" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""but you could fall into all the traps""" start="00:00:52.320" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""or all the wasted times that other users have already gone through.""" start="00:00:56.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And so, since there are a lot of amazing people""" start="00:01:00.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""in the Emacs community,""" start="00:01:04.600" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""why do every time redo the same error?""" start="00:01:07.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So let's bring us together.""" start="00:01:10.120" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And it would be amazing to get a one-to-one relation.""" start="00:01:12.160" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So I have somebody that actually knows what you want to do,""" start="00:01:17.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""what you want to achieve with Emacs,""" start="00:01:21.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and supports you because they have done a similar path to yours.""" start="00:01:23.400" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And so they can remove some of the obstacles for you.""" start="00:01:27.440" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""So what can you expect?""" start="00:01:32.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""The main thing is guidance on your Emacs journey,""" start="00:01:34.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""because the Emacs journey is infinite, it doesn't really end.""" start="00:01:37.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""But the farther you go,""" start="00:01:41.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""the more value you get from this amazing tool.""" start="00:01:44.080" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And that helps you save time.""" start="00:01:46.800" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And at the same time, you can meet like-minded people.""" start="00:01:50.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And so you can learn about Emacs or about your context,""" start="00:01:54.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""if they are in, for example, if you are a physicist,""" start="00:01:59.080" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""they are physicists or they are interested in the field.""" start="00:02:02.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""You may not only learn about Emacs,""" start="00:02:07.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""but you can learn also something about the field.""" start="00:02:09.160" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And anyway, the idea is that you can move forward together.""" start="00:02:11.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""Somebody asked, why not just mailing lists or Reddit?""" start="00:02:17.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Well, the point is that mailing list is many people""" start="00:02:20.400" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""can help you solve one issue that you have.""" start="00:02:24.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And that naturally doesn't become a discussion""" start="00:02:28.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""of where you are from, what are you trying to achieve,""" start="00:02:31.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and where you want to move forward with using this editor""" start="00:02:35.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""or using this tool.""" start="00:02:40.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Instead, here, we want something more personal,""" start="00:02:42.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""something more like you tell your story.""" start="00:02:45.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And if I can help you achieve what you need,""" start="00:02:48.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I am also interested in your story as a buddy.""" start="00:02:53.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""So given that, how do you get in touch with a buddy?""" start="00:02:58.960" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Well, the thing is easy.""" start="00:03:03.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Just ping me at this email, andrea-dev@hotmail.com.""" start="00:03:04.680" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And I can put you in touch with one of the buddies""" start="00:03:12.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""that are available.""" start="00:03:15.400" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Or you can contact them personally, directly,""" start="00:03:16.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""because on the web page, on the Emacs Buddy web page,""" start="00:03:20.200" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""there are links to their material or their websites.""" start="00:03:26.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And sometimes you can find the contact yourself.""" start="00:03:32.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Anyway, I am a facilitator.""" start="00:03:35.600" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So if you contact me, I will find the contact for the person""" start="00:03:37.160" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""that you want to get in touch.""" start="00:03:41.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""You can also get in touch with me.""" start="00:03:43.080" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I'm a buddy myself.""" start="00:03:44.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""How did it go so far?""" start="00:03:47.960" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Well, from when I started the initiative,""" start="00:03:49.600" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""more or less we had 10 buddies.""" start="00:03:52.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""We had 10 buddies that are available to help you""" start="00:03:55.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""with your Emacs journey.""" start="00:03:58.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And I buddyed myself, or I got in touch""" start="00:04:01.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""with people that wanted a buddy, about eight people.""" start="00:04:04.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Each of these conversations was quite interesting.""" start="00:04:10.680" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""I decided to paraphrase one.""" start="00:04:14.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I had this user that got in touch and said:""" start="00:04:19.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""&quot;I used Emacs for 10 years.""" start="00:04:23.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I'm curious about the initiative,""" start="00:04:25.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and here is my GitHub that I started writing recently,""" start="00:04:27.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Elisp projects&quot;, projects in Elisp to extend Emacs.""" start="00:04:32.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I looked at their code.""" start="00:04:37.680" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I suggested, &quot;Oh, why don't you use dash?""" start="00:04:40.840" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""It's something that I'm familiar with.""" start="00:04:43.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Maybe you may like it as well.&quot;""" start="00:04:45.300" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And then I started asking, &quot;Oh, what do you do with Emacs?""" start="00:04:49.440" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Have you tried a note taking tool like Org Roam?&quot;""" start="00:04:51.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And then the conversation started.""" start="00:04:56.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So &quot;yeah, I tried Org Roam version one.""" start="00:04:58.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I use my own thing.""" start="00:05:00.200" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""But what is it...""" start="00:05:01.200" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I'm curious about version two.""" start="00:05:02.880" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Did you use it?""" start="00:05:04.240" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Do you know about Luhmann?&quot;""" start="00:05:05.840" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""That is the inspiration of Org Roam""" start="00:05:07.080" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and the backlinking and stuff.""" start="00:05:09.862" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And then I started the conversation about that.""" start="00:05:13.240" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And we discussed about functional programming.""" start="00:05:15.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""We discussed a bit about philosophy and went on.""" start="00:05:18.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""And then this conversation is not currently going.""" start="00:05:23.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So we arrived to a point in which it sort of died out.""" start="00:05:29.160" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""But if I want or if they want, they can ping me back.""" start="00:05:32.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I can ping them.""" start="00:05:36.680" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So it's sort of a reference of this person exists""" start="00:05:37.440" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""and is an interesting person to chat with when I have something""" start="00:05:40.800" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""to say to them.""" start="00:05:44.440" video="mainVideo-buddy" id="subtitle"]]
+[[!template new="1" text="""And what if you want to be a buddy?""" start="00:05:48.360" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Well, if you want to be a buddy, it's easy as well.""" start="00:05:50.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So basically, just open a PR on the Emacs buddy repository.""" start="00:05:54.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""That is something that I am maintaining at the moment.""" start="00:06:02.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Or simply send me the information.""" start="00:06:05.280" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Somebody just sent me an email with the information.""" start="00:06:07.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""I have created the commit to make it public available.""" start="00:06:10.000" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""The information is just your name, a summary,""" start="00:06:14.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""what kind of user you are so that you can attract""" start="00:06:18.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""the right people to you, and a link to your material""" start="00:06:21.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""so that if they are curious about your summary or about you,""" start="00:06:28.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""they can actually go and check and even contact you directly.""" start="00:06:31.960" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""If they contact via me, I will know your email anyway""" start="00:06:35.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""from the PR you open.""" start="00:06:40.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So that is all.""" start="00:06:44.320" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""There are ideas to maybe... if... this is basically""" start="00:06:45.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""an advertisement for this initiative""" start="00:06:53.040" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""so that we can get people that want to be helped""" start="00:06:54.760" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""or people that want to help.""" start="00:06:57.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""It's building up organically, so no rush""" start="00:07:01.200" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""to make this thing grow, escalate enormously.""" start="00:07:03.600" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""But for example, there are ideas to join this with the meetup""" start="00:07:08.640" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""talk that is being happening in the conference.""" start="00:07:12.480" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""So for example, if you find out something very interesting,""" start="00:07:15.720" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""you can bring the discussion that you have with your buddy""" start="00:07:19.520" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""into a meetup so that the group with which you speak is bigger.""" start="00:07:22.200" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""There are ideas like that.""" start="00:07:27.560" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""But first of all, just get in touch if you want to find""" start="00:07:28.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""like-minded people that want to help you with your Emacs""" start="00:07:33.120" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""journey or if you want to help others.""" start="00:07:36.600" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:07:38.920" video="mainVideo-buddy" id="subtitle"]]
+[[!template text="""Enjoy the rest of the talks and chat to you soon.""" start="00:07:39.800" video="mainVideo-buddy" id="subtitle"]]
+
+
+
+Captioner: andrea
+
+Questions or comments? Please e-mail [andrea-dev@hotmail.com](mailto:andrea-dev@hotmail.com?subject=Comment%20for%20EmacsConf%202022%20buddy%3A%20The%20Emacs%20Buddy%20initiative)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/buddy-before.md b/2022/info/buddy-before.md
new file mode 100644
index 00000000..5b6a0e8f
--- /dev/null
+++ b/2022/info/buddy-before.md
@@ -0,0 +1,16 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Andrea shares how to connect with an Emacs Buddy for one-to-one peer mentoring. Afterwards, he will answer questions over IRC.
+
+<div class="vid"><video controls preload="none" id="buddy-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="buddy-mainVideo" data="""
+00:00.000 Introduction
+00:27.900 Why Emacs Buddy?
+01:32.720 What can you expect?
+02:17.040 Why not just mailing lists or Reddit?
+02:58.960 How do you get in touch with a buddy?
+03:47.960 How did it go?
+04:14.760 Example
+05:48.360 What if you want to be a buddy?
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.webm">Download --main.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.opus">Download --main.opus (5.9MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/rGaAhFjM5GCvNHBhs39JA3">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/buddy-nav.md b/2022/info/buddy-nav.md
new file mode 100644
index 00000000..1bb28aa9
--- /dev/null
+++ b/2022/info/buddy-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/asmblox">asm-blox: a game based on WebAssembly that no one asked for</a>
+Next by track: <a href="/2022/talks/wayland">Emacs should become a Wayland compositor</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/buttons-after.md b/2022/info/buttons-after.md
new file mode 100644
index 00000000..44c9be69
--- /dev/null
+++ b/2022/info/buttons-after.md
@@ -0,0 +1,238 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="buttons-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hi everyone! I'm Mats Liddell.""" start="00:00:00.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""In this talk, I will show""" start="00:00:06.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""how you can link to personal data""" start="00:00:07.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""using Hyperbole's support for implicit button types.""" start="00:00:09.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Before starting, a few words about me.""" start="00:00:13.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""I work as a software engineer,""" start="00:00:16.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and in my spare time""" start="00:00:18.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""I'm co-maintaining the Hyperbole package""" start="00:00:19.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""together with the package author Bob Weiner.""" start="00:00:21.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Hyperbole dates back to 1993,""" start="00:00:24.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and have had some inactive years in the past,""" start="00:00:27.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but work is now active again.""" start="00:00:29.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The package is available""" start="00:00:31.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""through the GNU ELPA package archive.""" start="00:00:33.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The talk will focus on""" start="00:00:36.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""creation of implicit button types.""" start="00:00:37.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""For more info on Hyperbole,""" start="00:00:39.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""listen to other presentations""" start="00:00:41.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and check out the package documentation.""" start="00:00:43.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""What I want you to take with you from this talk is""" start="00:00:46.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that the implicit button types""" start="00:00:50.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""can make patterns in your files into buttons;""" start="00:00:51.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and that new implicit button types""" start="00:00:54.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""can quickly be created by using""" start="00:00:56.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the `defil` and the `defal` macros.""" start="00:00:58.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""So what is an implicit button type?""" start="00:01:01.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""I think of it as a text pattern""" start="00:01:05.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that has some extended meaning.""" start="00:01:06.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""When you see the pattern in the text,""" start="00:01:08.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you can think of it as a button type.""" start="00:01:10.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""When you press the button,""" start="00:01:12.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""something related to that meaning happens.""" start="00:01:13.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It can be jumping to some place,""" start="00:01:16.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""opening an external tool, doing some computation.""" start="00:01:19.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So there can be some action""" start="00:01:22.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""associated with the pattern.""" start="00:01:24.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""To make it clear, let's look at some examples.""" start="00:01:29.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Let's start with something that is maybe so obvious""" start="00:01:33.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that you don't even think of it as a pattern: a file name.""" start="00:01:36.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""When you see such a string in text,""" start="00:01:39.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you will naturally associate it with a file on disk,""" start="00:01:41.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and if you would click on it,""" start="00:01:45.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you would probably expect that file to open.""" start="00:01:46.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""In the first sentence on the slide,""" start="00:01:52.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you might recognize the file name""" start="00:01:55.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""for the bash initialization file, ~/.bashrc.""" start="00:01:56.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Hyperbole comes with built-in support""" start="00:02:01.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""for recognizing files and directory path names""" start="00:02:03.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""as implicit button types in text.""" start="00:02:06.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""For Hyperbole to take action on the button type,""" start="00:02:08.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you move the cursor within the button""" start="00:02:11.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and press M-RET or use a mouse click.""" start="00:02:13.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So let's try that.""" start="00:02:16.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Similar for the path, /usr/local in the next sentence.""" start="00:02:22.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""That will open the corresponding""" start="00:02:27.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""directory using dired-mode.""" start="00:02:29.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""Other examples of built-in implicit button types""" start="00:02:37.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that Hyperbole recognizes are email addresses,""" start="00:02:39.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""web addresses, requests for comment documents""" start="00:02:43.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""in the form of RFC followed by a number,""" start="00:02:47.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""GNU debbugs issues, plus many more.""" start="00:02:50.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""These are some examples""" start="00:02:53.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""of implicit button types with built-in support.""" start="00:02:55.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""I list them here to give you an idea""" start="00:02:58.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""how the text pattern in itself is enough""" start="00:02:59.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""for the system to recognize it""" start="00:03:02.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""as something actionable.""" start="00:03:03.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""So as shown, Hyperbole has built-in support""" start="00:03:10.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""for implicit buttons.""" start="00:03:12.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""There's only one problem here.""" start="00:03:14.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The behavior is predefined.""" start="00:03:16.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""There is of course a trade off.""" start="00:03:17.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It is convenient to get""" start="00:03:20.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""many button types out of the box""" start="00:03:21.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""with likely good standard behavior""" start="00:03:23.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and that works in many places.""" start="00:03:25.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""But what if you would want to create""" start="00:03:27.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""your own completely new mapping,""" start="00:03:29.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""possibly to your own data?""" start="00:03:31.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It is here that Hyperbole's support for creating""" start="00:03:32.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""new implicit button types comes in.""" start="00:03:38.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""For the full pattern matching button type,""" start="00:03:41.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""like for the filename and examples we just looked at,""" start="00:03:43.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you need to define the implicit button""" start="00:03:46.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""using the macro, `defib`.""" start="00:03:48.755" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The downside of that is""" start="00:03:50.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you need to code at the elisp level.""" start="00:03:53.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""However, if you are creating a new pattern""" start="00:03:54.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that has well-defined delimiters,""" start="00:03:57.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""there is support for that in an easier way.""" start="00:03:59.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""These support functions, or rather macros,""" start="00:04:01.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""are `defil` and `defal`.""" start="00:04:03.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""We will look at those macros soon,""" start="00:04:06.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but first, my definition of personal data.""" start="00:04:08.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""I think of personal data as something""" start="00:04:13.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that you would like to link to,""" start="00:04:18.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but it's not necessarily in a form""" start="00:04:19.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""supported by any known tool.""" start="00:04:21.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It might be stored on a web server, local storage,""" start="00:04:23.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""or could even be some computation""" start="00:04:26.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""rather than a link.""" start="00:04:28.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""What all these cases have in common is that""" start="00:04:29.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""you want to be able to reference it""" start="00:04:32.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""in a short, and for you, descriptive way.""" start="00:04:34.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So when you write text, you can use""" start="00:04:36.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""a new implicit type to create the connection.""" start="00:04:38.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""This might be a bit abstract,""" start="00:04:44.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""so let's look at an example.""" start="00:04:46.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Suppose you have a flat file structure""" start="00:04:48.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""with some notes in each file.""" start="00:04:51.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It can look like this.""" start="00:04:52.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""In the data folder, we have two files""" start="00:04:54.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that represents the notes we have taken.""" start="00:04:57.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""We now want to be able to link to these notes""" start="00:05:00.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""from outside of the data folder.""" start="00:05:02.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Let's make an implicit button type""" start="00:05:07.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that opens a file in this structure.""" start="00:05:08.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""To make the pattern stand out in text,""" start="00:05:10.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""we use double braces as start and stop delimiters.""" start="00:05:13.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""An implicit button instance""" start="00:05:16.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""would then look like this.""" start="00:05:20.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""We can create that using the `defil` macro like this.""" start="00:05:22.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""This invocation of the field""" start="00:05:27.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""creates a button type &quot;demo-link-to-file&quot;""" start="00:05:31.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""with the start delimiter of &quot;{{&quot;""" start="00:05:34.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and then delimiters of &quot;}}&quot;,""" start="00:05:37.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the regular expression &quot;.*&quot; pattern""" start="00:05:40.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to match everything between the delimiters,""" start="00:05:43.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and finally, the action defined by the link expression.""" start="00:05:45.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Pattern substitution is performed""" start="00:05:48.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""on the link expression before evaluation""" start="00:05:52.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""so that the text that is in between the delimiters""" start="00:05:54.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""is inserted where the &quot;\\&&quot; is in the link expression.""" start="00:05:57.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So all in all, implicit type instance will result in""" start="00:06:02.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the link expression of &quot;~/data/FileA&quot;,""" start="00:06:07.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""which we recognize as a file path.""" start="00:06:11.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""With a single-line expression,""" start="00:06:14.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""we have created our own hyperbutton syntax""" start="00:06:18.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that we can use in any Emacs buffer""" start="00:06:21.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to link to this custom set of data.""" start="00:06:23.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So let's evaluate the defil and use it.""" start="00:06:25.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""I have prepared the files so that they already""" start="00:06:30.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""contain some text and implicit links.""" start="00:06:33.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So from the presentation, we can go to FileA,""" start="00:06:36.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and from there to fileB.""" start="00:06:43.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Since the Hyperbole path expression""" start="00:06:48.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""supports outline structures, we can,""" start="00:06:51.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""as an extra bonus, reference directly""" start="00:06:53.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the headers in the files,""" start="00:06:55.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""so we can, for example, link directly""" start="00:06:57.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to &quot;More Notes&quot; in FileB.""" start="00:07:00.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""We have now created a simple info system.""" start="00:07:02.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""Looking deeper at the link expression,""" start="00:07:10.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""it can be of four different types:""" start="00:07:16.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""A file path expression,""" start="00:07:19.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""as we have already looked at;""" start="00:07:22.040" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""a brace-delimited key series,""" start="00:07:23.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that is, a series of command keys""" start="00:07:25.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""for performing some action,""" start="00:07:27.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""much like a keyboard macro;""" start="00:07:29.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""An URL; or a function that takes one argument,""" start="00:07:30.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""which will be given the button text as input.""" start="00:07:36.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The URL link expression allows you""" start="00:07:38.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to link to web pages.""" start="00:07:42.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So if the data you want to link to""" start="00:07:44.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""is accessible through the Web""" start="00:07:46.560" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and the URL can be constructed""" start="00:07:48.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""from the button text in a meaningful way,""" start="00:07:50.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""it is possible to do that.""" start="00:07:53.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""Let's create the button type""" start="00:07:54.520" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that links to GNU software.""" start="00:07:56.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The URL to the GNU software catalog""" start="00:07:57.720" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""is www.gnu.org/software,""" start="00:08:01.089" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and with what we know about the field,""" start="00:08:04.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""it is easy to create the button type for that.""" start="00:08:07.440" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It can look like this.""" start="00:08:09.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""And here are two possible buttons""" start="00:08:11.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""linking to Emacs and Hyperbole.""" start="00:08:16.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So let's again evaluate the defil and use it.""" start="00:08:19.320" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Please note that not all GNU software""" start="00:08:24.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""is under that URL,""" start="00:08:28.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""so this simple definition will not work""" start="00:08:29.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to link to everything.""" start="00:08:31.000" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""To highlight the fact that the button action""" start="00:08:32.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""does not have to be a link,""" start="00:08:37.280" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but can be any action,""" start="00:08:39.080" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""let's look at a math example.""" start="00:08:40.600" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Here is the button type that does some math""" start="00:08:42.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""and writes the result in the message area.""" start="00:08:44.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Let's evaluate and use it.""" start="00:08:47.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""Before ending, I would like to mention""" start="00:08:57.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the defal macro.""" start="00:08:59.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It is similar to the defil macro,""" start="00:09:00.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but simpler, since it uses a form""" start="00:09:02.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""of the implicit button type with no delimiters.""" start="00:09:04.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""It is simply <TYPE LINK-EXPR>.""" start="00:09:07.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""So the implicit button type contains the link type""" start="00:09:14.800" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""in clear text.""" start="00:09:17.920" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Our recent FSF software button""" start="00:09:18.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""would be created like this.""" start="00:09:23.120" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""And it would be instantiated in text like this.""" start="00:09:24.855" video="mainVideo-buttons" id="subtitle"]]
+[[!template new="1" text="""I have shown how you,""" start="00:09:29.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""with the help of the defil macro in Hyperbole,""" start="00:09:34.960" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""quickly can create implicit buttons.""" start="00:09:37.840" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""With those buttons, you can link""" start="00:09:40.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to your personal information""" start="00:09:41.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""in the form it may have.""" start="00:09:43.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""By the nature of the implicit buttons,""" start="00:09:44.160" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""those can be used from any file in Emacs.""" start="00:09:47.200" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""The button types can be""" start="00:09:49.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""created to be used long term,""" start="00:09:52.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""but even short term use within the session is possible,""" start="00:09:54.640" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""since the creation is simple and quick.""" start="00:09:57.680" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Inspired by this, I hope you will find ways""" start="00:09:59.880" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""to create implicit buttons""" start="00:10:03.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""that will support you getting to your information.""" start="00:10:04.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""For the simplest cases,""" start="00:10:07.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""the field and the file macros might be enough.""" start="00:10:09.240" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""For more complicated cases,""" start="00:10:11.400" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""using a tailor-made function can be an option.""" start="00:10:13.360" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""If you know Elisp, use the defib macro""" start="00:10:15.760" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""which gives you full control over the button type.""" start="00:10:19.480" video="mainVideo-buttons" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:10:22.240" video="mainVideo-buttons" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20buttons%3A%20Linking%20personal%20info%20with%20Hyperbole%20implicit%20buttons)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/buttons-before.md b/2022/info/buttons-before.md
new file mode 100644
index 00000000..e6f2387c
--- /dev/null
+++ b/2022/info/buttons-before.md
@@ -0,0 +1,50 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Mats Lidell shares how you can create your own hyperbutton syntax that can be used in any file to trigger any kind of action. After the talk, he will answer your questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="buttons">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect stroke-width="3" x="439" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 11-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-buttons>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T18:40:00Z" end="2022-12-03T18:55:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~1:40 PM - 1:55 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~12:40 PM - 12:55 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~11:40 AM - 11:55 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~10:40 AM - 10:55 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~6:40 PM - 6:55 PM UTC <br />Saturday, Dec 3 2022, ~7:40 PM - 7:55 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~8:40 PM - 8:55 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~12:10 AM - 12:25 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~2:40 AM - 2:55 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~3:40 AM - 3:55 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="buttons-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="buttons-mainVideo" data="""
+00:00.000 Introduction
+01:01.760 Implicit buttons
+01:29.920 Filenames
+02:37.080 Other built-in implicit buttons
+03:10.120 Creating new implicit button types with defib, defil, and defal
+04:13.400 Personal data
+04:44.480 Defining an implicit button with defil
+07:10.720 Types of link expressions
+07:54.520 Another button example
+08:32.200 Action buttons
+08:57.160 The defal macro
+09:29.760 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.webm">Download --main.webm (15MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/uLx9KkUP8SbH2KZfynEtLR">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="buttons-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="buttons-qanda" data="""
+00:00.000 Introduction
+00:40.600 So with one line of code you can create custom hyperbutton types that are live in any Emacs buffer. Is that right?
+02:53.320 Is there a good way to share common patterns for links other than the ones that you shared? shall those be PRs to your repository?
+06:27.480 Could you differentiate Hyperbole and Org?
+08:27.720 How did you present the right buffer with shortcuts at the right of your buffer?
+10:58.200 Working with different support systems
+14:14.600 Bob Weiner
+19:04.800 Do the links/buttons created in hyperbole (like that one with the url) get exported on org-mode files too? (like when exported to html)
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.webm">Download --answers.webm (31MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers--chapters.vtt">Download --answers--chapters.vtt</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/buttons-nav.md b/2022/info/buttons-nav.md
new file mode 100644
index 00000000..6f340d09
--- /dev/null
+++ b/2022/info/buttons-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/sqlite">Using SQLite as a data source: a framework and an example</a>
+Next by track: <a href="/2022/talks/mail">Revisiting the anatomy of Emacs mail user agents</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/community-after.md b/2022/info/community-after.md
new file mode 100644
index 00000000..7dea9532
--- /dev/null
+++ b/2022/info/community-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20community%3A%20The%20ship%20that%20builds%20itself%3A%20How%20we%20used%20Emacs%20to%20develop%20a%20workshop%20for%20communities)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/community-before.md b/2022/info/community-before.md
new file mode 100644
index 00000000..bf1aca59
--- /dev/null
+++ b/2022/info/community-before.md
@@ -0,0 +1,16 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+<div class="schedule-in-context schedule-svg-container" data-slug="community">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities" data-slug="community"> <title> 1:40- 1:50 The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect stroke-width="3" x="439" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(452,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 3:55 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: complete asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:20 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(499,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(648,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 10-min talk followed by live Q&A (<https://emacsconf.org/current/community/room>)
+Status: Sorry, this talk has been cancelled
+
+
+
+# Description
+
+
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/community-nav.md b/2022/info/community-nav.md
new file mode 100644
index 00000000..c1566b5d
--- /dev/null
+++ b/2022/info/community-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2022/talks/sqlite">Using SQLite as a data source: a framework and an example</a>
+Next by time: <a href="/2022/talks/mail">Revisiting the anatomy of Emacs mail user agents</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/dbus-after.md b/2022/info/dbus-after.md
new file mode 100644
index 00000000..4b1f44f2
--- /dev/null
+++ b/2022/info/dbus-after.md
@@ -0,0 +1,378 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="dbus-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Welcome to my EmacsConf 2022 talk, The Wheels on D-Bus.""" start="00:00:00.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""In this talk, we'll cover what D-Bus is,""" start="00:00:04.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""why you might want to use it, and how to use it with Emacs.""" start="00:00:07.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""D-Bus is fundamentally based on passing messages""" start="00:00:10.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""in between processes, using the bus as a mediator.""" start="00:00:13.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""On top of this is built an RPC system with method invocation""" start="00:00:17.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that has argument lists and return values,""" start="00:00:20.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""like you might find in any programming language.""" start="00:00:22.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""These are commonly used for verb-type actions""" start="00:00:25.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""like &quot;restart my computer.&quot;""" start="00:00:27.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""You can also associate a collection of attributes""" start="00:00:30.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with objects on the bus, and these are called properties.""" start="00:00:32.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The properties can be read-only, write-only, or read-write.""" start="00:00:35.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Signals are a way of notifying participants on the bus""" start="00:00:39.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of updated state, and are the basis""" start="00:00:43.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for building dynamic user interfaces""" start="00:00:46.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that react to changes in the system.""" start="00:00:47.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It has a static and strong type system,""" start="00:00:50.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so if you send a message with the wrong type signature,""" start="00:00:52.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it simply gets rejected instead of going through""" start="00:00:55.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to the remote service.""" start="00:00:57.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It also manages service life cycles,""" start="00:00:59.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so you're not running services at all times.""" start="00:01:02.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""They can be started and stopped by D-Bus on demand.""" start="00:01:04.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""D-Bus has two major use cases.""" start="00:01:07.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The first is acting as a lower-level substrate""" start="00:01:10.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for higher-level programs,""" start="00:01:13.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""like a graphical desktop environment.""" start="00:01:14.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""For example, if you want to manage your network connectivity""" start="00:01:16.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""from your graphical environment,""" start="00:01:19.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""instead of having to build all of that from the ground up,""" start="00:01:21.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can rely on the D-Bus service to do that""" start="00:01:23.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and only build the graphical component of it.""" start="00:01:26.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This gives you consistency between desktop environments""" start="00:01:28.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and reduces code duplication.""" start="00:01:31.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Another application is automating desktop programs.""" start="00:01:33.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""If your program offers a D-Bus service,""" start="00:01:37.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""then it can be remote-controlled,""" start="00:01:39.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and if all of your programs offer D-Bus,""" start="00:01:40.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can control your entire desktop.""" start="00:01:42.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Let's look at the abstractions that D-Bus provides.""" start="00:01:45.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The top level object is called a bus,""" start="00:01:48.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it's like a partition""" start="00:01:51.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that messages get exchanged inside of.""" start="00:01:52.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Messages don't cross buses.""" start="00:01:54.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Inside of a bus are services.""" start="00:01:57.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Services are normally identified in reverse FQDN order,""" start="00:01:59.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so org.foobar.FooService.""" start="00:02:03.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Each service provides some set of features""" start="00:02:06.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""related to a particular area of functionality.""" start="00:02:08.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Inside of each service are objects.""" start="00:02:11.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Objects use a path notation,""" start="00:02:14.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and usually follow the same reverse FQDN format""" start="00:02:16.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""as the service identifier.""" start="00:02:19.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Each object has one or more interfaces.""" start="00:02:21.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""An interface is like a facet that you can use""" start="00:02:24.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to interact with an object,""" start="00:02:27.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and inside of the interface are properties, methods,""" start="00:02:29.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and signals, which we covered before.""" start="00:02:32.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Properties are attributes that can be read or written.""" start="00:02:34.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Methods are verbs that you can call to invoke an action,""" start="00:02:37.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and a signal is something that's used to move state""" start="00:02:40.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""in between a service and another participant on the bus.""" start="00:02:43.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""There can be any number of interfaces on an object,""" start="00:02:47.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""any number of objects in a service,""" start="00:02:49.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and any number of services on a bus,""" start="00:02:51.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and any number of buses on a system.""" start="00:02:53.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""There are two well-known busses,""" start="00:02:55.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and these roughly map to those two use cases""" start="00:03:00.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I mentioned before.""" start="00:03:02.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The system bus is for interfacing with hardware""" start="00:03:03.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and operating-system-level concerns""" start="00:03:06.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""like disks, networks, and so forth.""" start="00:03:08.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The session bus is tied to a user login,""" start="00:03:11.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and is more in the desktop automation use case.""" start="00:03:14.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""There are some common interfaces you'll find""" start="00:03:20.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""if you go exploring D-Bus.""" start="00:03:21.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The Introspectable interface is the basis""" start="00:03:23.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of a lot of the reflection features.""" start="00:03:26.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It has a single method called introspect""" start="00:03:27.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that returns the XML interface description""" start="00:03:30.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of whatever you call it on.""" start="00:03:32.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Peer is used for lower level connectivity,""" start="00:03:33.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for example, pinging a service to see if it's running.""" start="00:03:36.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And the Properties interface is the basis""" start="00:03:39.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of the read-write properties,""" start="00:03:41.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which are secretly method calls under the cover.""" start="00:03:43.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Just about every object you interact with on D-Bus""" start="00:03:45.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""will support all three of these interfaces.""" start="00:03:48.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Additionally, ObjectManager is used for services""" start="00:03:51.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that manage collections of objects.""" start="00:03:54.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""For example, the disk service has an object""" start="00:03:56.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for each disk that's attached,""" start="00:03:59.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and the object manager allows you""" start="00:04:01.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to enumerate all of those.""" start="00:04:02.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Emacs supports D-Bus natively since version 23.1.""" start="00:04:06.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It's a combination of native bindings""" start="00:04:10.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with a C library and dbus.el.""" start="00:04:12.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""While there are some ports of D-Bus""" start="00:04:14.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to non-Linux operating systems,""" start="00:04:17.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it's probably only available on Linux""" start="00:04:19.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and almost certainly only usable on Linux.""" start="00:04:22.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""If you want to interact with D-Bus from Emacs,""" start="00:04:24.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it's fairly straightforward.""" start="00:04:28.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""There's a collection of functions like dbus-get-property""" start="00:04:30.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""or dbus-call-method, et cetera,""" start="00:04:33.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and they almost all take this same set""" start="00:04:35.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of four arguments at the beginning:""" start="00:04:37.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""bus, service, path, and interface.""" start="00:04:39.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""In this case, it takes a single additional property,""" start="00:04:42.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is the one to read.""" start="00:04:45.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And what we're calling is the hostname1 service,""" start="00:04:46.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which gives you just a little bit of information""" start="00:04:49.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""about the system, like its hostname or its chassis.""" start="00:04:51.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And in this case, you can see I'm running""" start="00:04:54.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""this presentation off my laptop.""" start="00:04:56.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The problem with this and what I don't like about it""" start="00:04:57.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""is that all of these identifiers are very verbose""" start="00:05:00.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and very repetitive.""" start="00:05:04.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And if you end up calling these a lot,""" start="00:05:05.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it gets old really quickly.""" start="00:05:07.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""So I wrote a wrapper called Debase,""" start="00:05:09.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is convenience on top of the built-in functions.""" start="00:05:13.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Most of the stock functions have Debase versions""" start="00:05:15.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""just by replacing &quot;dbus&quot; with &quot;debase&quot;.""" start="00:05:18.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And let's look how that works.""" start="00:05:21.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""The fundamental idea of Debase is that you can bind together""" start="00:05:23.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""all of those arguments into a single object""" start="00:05:28.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that represents the endpoint.""" start="00:05:30.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is an EIEIO class, and it takes keyword arguments,""" start="00:05:31.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so there's never any chance""" start="00:05:35.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of mixing up which thing is what.""" start="00:05:36.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So this sets the endpoint to that object,""" start="00:05:38.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""calls debase-get-property on it,""" start="00:05:41.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and you can see it works exactly the same.""" start="00:05:43.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The thing that's really nice about this, though,""" start="00:05:45.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""is it knows that so many of these arguments""" start="00:05:47.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""are very similar that it can compute most of them""" start="00:05:50.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""if you don't provide them all.""" start="00:05:52.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So if you just say service, it will assume""" start="00:05:54.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that you want the same object that matches""" start="00:05:57.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and the same interface that matches,""" start="00:05:59.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it works just the same.""" start="00:06:00.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I find this very, very convenient.""" start="00:06:02.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""You can also reuse the object""" start="00:06:04.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""instead of having to repeat every argument""" start="00:06:07.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with every function call,""" start="00:06:09.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is a really great improvement in ergonomics.""" start="00:06:10.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Because so many objects have multiple interfaces,""" start="00:06:13.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you often find yourself needing to look""" start="00:06:18.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""at a different aspect of that object.""" start="00:06:20.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is supported with the built-in EIEIO clone method,""" start="00:06:22.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which takes an object""" start="00:06:26.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and a set of keyword arguments to replace.""" start="00:06:28.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So in this case, we can see we're calling""" start="00:06:30.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""the Properties method,""" start="00:06:32.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but everything else on that endpoint is the same.""" start="00:06:33.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And then we're gonna call the method GetAll""" start="00:06:35.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""on that Properties interface,""" start="00:06:38.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it's going to return all the properties""" start="00:06:39.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of the org.freedesktop.hostname1 interface""" start="00:06:41.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""inside of that object.""" start="00:06:43.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And if we run that, we can see there's the hostname""" start="00:06:45.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and some other information about the laptop""" start="00:06:48.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that I'm running this on.""" start="00:06:50.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Debase also supports object binding.""" start="00:06:51.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This creates a lexical context in which the Debase object""" start="00:06:54.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""is the implicit target of any D-Bus function.""" start="00:06:58.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is really convenient if you need""" start="00:07:01.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to fetch multiple properties or otherwise interact""" start="00:07:03.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with the same endpoint in multiple different ways.""" start="00:07:06.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And you can see I'm still on a laptop""" start="00:07:09.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it's still named meson.""" start="00:07:11.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""You can also, if you don't want to use the object,""" start="00:07:12.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can provide the raw argument list.""" start="00:07:16.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Under the covers, this is basically an flet""" start="00:07:18.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""where you're currying all of these functions""" start="00:07:20.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so they start with those argument lists.""" start="00:07:23.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And you can see I'm running on a Linux machine,""" start="00:07:25.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which should not be surprising.""" start="00:07:27.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Debase also has an experimental code generation feature.""" start="00:07:29.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It outputs EIEIO code with one class per D-Bus interface.""" start="00:07:34.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This includes accessors for all of its properties""" start="00:07:38.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with an in-process cache, so if you read one property,""" start="00:07:41.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you don't have to go back to the bus to read it again.""" start="00:07:44.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It also outputs generic functions and method implementations""" start="00:07:46.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for the D-Bus interface methods.""" start="00:07:50.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It includes name-mangling options,""" start="00:07:52.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so you can control how everything is named.""" start="00:07:54.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And you can generate the code either""" start="00:07:56.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""via introspecting a live system""" start="00:07:58.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""or providing an XML interface description,""" start="00:08:00.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is handy if you want to use it""" start="00:08:02.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""as part of a non-interactive build.""" start="00:08:04.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I think this has a lot of promise,""" start="00:08:05.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but it doesn't feel quite right yet,""" start="00:08:08.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so any feedback or contributions are very welcome.""" start="00:08:09.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Let's generate some Elisp code""" start="00:08:14.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""for that hostname1 service we were interacting with before.""" start="00:08:16.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""debase-gen-class is the generation class,""" start="00:08:19.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it says to create a class that matches this interface,""" start="00:08:23.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""named &quot;hostname1&quot;, and then the rest of these arguments""" start="00:08:26.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""are the same ones to target the endpoint,""" start="00:08:29.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""just like with debase-object,""" start="00:08:31.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""because it extends debase-object.""" start="00:08:32.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""debase-gen-code is a generic function""" start="00:08:34.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that takes any debase-gen class.""" start="00:08:37.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""There are different classes for functions,""" start="00:08:40.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""properties, et cetera,""" start="00:08:42.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it creates all of the code for it.""" start="00:08:43.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""If we evaluate it, we can see the results""" start="00:08:45.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""look about like we would expect:""" start="00:08:48.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""creates a defclass named &quot;hostname1&quot;,""" start="00:08:49.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which extends debase-object,""" start="00:08:52.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""has all of the slots and accessors defined,""" start="00:08:53.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and then methods that define everything""" start="00:08:56.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that you might want to do with it, including documentation.""" start="00:08:59.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is based on introspecting a running system,""" start="00:09:01.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but as I mentioned,""" start="00:09:04.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can provide an XML interface description instead,""" start="00:09:05.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""if you like.""" start="00:09:08.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Debase also comes with &quot;debase-objectmanager&quot;,""" start="00:09:08.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is convenience for the D-Bus ObjectManager interface.""" start="00:09:12.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is used in a lot of places in D-Bus,""" start="00:09:15.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""where an object manages other objects.""" start="00:09:18.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""For example, the NetworkManager object""" start="00:09:20.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""manages network hardware objects,""" start="00:09:22.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and using the ObjectManager interface,""" start="00:09:25.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can enumerate all of the network hardware,""" start="00:09:26.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and by subscribing to the signals,""" start="00:09:28.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can be notified when they change.""" start="00:09:31.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""&quot;debase-objectmanager&quot; keeps a local cache,""" start="00:09:33.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and will fire a callback on any change.""" start="00:09:36.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So it's the building block for that dynamic user interface,""" start="00:09:38.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""like you would see in a desktop system,""" start="00:09:41.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but inside of Emacs.""" start="00:09:43.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Let's do some demos.""" start="00:09:44.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Discomfort is an interface I wrote for UDisks2,""" start="00:09:47.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is what manages all of the block device hardware.""" start="00:09:51.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And again, it has that dynamic desktop-like interactivity,""" start="00:09:53.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and mostly will just do what you mean.""" start="00:09:57.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is definitely alpha state.""" start="00:10:00.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It doesn't have all the features,""" start="00:10:03.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but it's good enough that I use it daily.""" start="00:10:04.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So here's Discomfort,""" start="00:10:06.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and you can see it has a list of all your hardware,""" start="00:10:08.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""what type it is, and where it's mounted.""" start="00:10:11.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I have a little USB extension cable here,""" start="00:10:13.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and I'm gonna plug in a disc,""" start="00:10:16.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""just to show you how this works.""" start="00:10:17.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""You can see when I plug it in,""" start="00:10:19.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""just a moment later,""" start="00:10:21.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it shows up in that list, automatically.""" start="00:10:22.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I don't have to press any key,""" start="00:10:24.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I don't have to refresh it, it's just there.""" start="00:10:25.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""If I unplug it, it's gone.""" start="00:10:27.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Plug it back in,""" start="00:10:29.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and there it is.""" start="00:10:30.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And you can see it's an encrypted volume.""" start="00:10:33.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So in order to do anything with this,""" start="00:10:35.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I'm going to have to supply a password.""" start="00:10:37.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Just pressing Enter goes into the &quot;do what I mean&quot; mode,""" start="00:10:38.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it asks for the password.""" start="00:10:41.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""In this case, I've chosen the very secure password""" start="00:10:43.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of &quot;password&quot;.""" start="00:10:46.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I hit Enter, and it unlocks it, and it mounts it,""" start="00:10:47.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and it opens &quot;dired&quot; looking at it.""" start="00:10:51.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And here's a little README.""" start="00:10:53.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Let's see what it says.""" start="00:10:54.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""&quot;Hello, EmacsConf.&quot;""" start="00:10:55.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So that's my demo of discomfort.""" start="00:10:58.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""In addition to acting as a client for D-Bus,""" start="00:11:01.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Emacs can also offer services to other D-Bus clients.""" start="00:11:05.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is a really interesting opportunity""" start="00:11:09.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""because it allows many different programs""" start="00:11:11.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to integrate with Emacs""" start="00:11:14.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""in ways that were previously very difficult.""" start="00:11:15.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""You can use this as an alternative to Emacs.""" start="00:11:17.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The difference is D-Bus provides a full API,""" start="00:11:20.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""so instead of emacsclient being""" start="00:11:23.200" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""a sort of fire-and-forget system,""" start="00:11:25.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""you can actually get results back from the remote operation.""" start="00:11:26.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So here's some code.""" start="00:11:30.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Here's a dbus-eval function, which takes a string,""" start="00:11:32.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""reads it, and evaluates it,""" start="00:11:35.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and returns whatever that value is.""" start="00:11:37.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Then we have a debase-bind block""" start="00:11:39.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that sets up an object on the session bus.""" start="00:11:41.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Again, that's my user login bus.""" start="00:11:44.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It offers this D-Bus service Emacs.""" start="00:11:46.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is a constant inside of the dbus.el package.""" start="00:11:49.560" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And again, the path is a constant in there.""" start="00:11:53.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And we're gonna create this interface,""" start="00:11:55.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""org.gnu.Emacs.Eval, and then register a method called Eval""" start="00:11:57.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that calls that dbus-eval function.""" start="00:12:02.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Pretty straightforward, only a handful of lines of code.""" start="00:12:04.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""To test this out, we're going to use the dbus-send utility.""" start="00:12:08.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""This is a command line program that interacts with D-Bus.""" start="00:12:12.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""We're going to tell it to wait for and print the reply,""" start="00:12:15.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that the message should be sent to the session bus,""" start="00:12:18.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that we're going to talk""" start="00:12:21.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to the org.gnu.Emacs service on that bus,""" start="00:12:22.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and the /org/gnu/Emacs object inside that service.""" start="00:12:25.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""On that object, we're gonna interact""" start="00:12:30.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with the org.gnu.Emacs.Eval interface""" start="00:12:33.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and call its Eval method.""" start="00:12:36.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""We're gonna call that method with a single string argument,""" start="00:12:37.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which is indicated by the string prefix,""" start="00:12:40.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and then a form to evaluate.""" start="00:12:42.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I actually have to run this from a shell,""" start="00:12:45.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""because if I try using it in Org, it wedges.""" start="00:12:47.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""org-babel blocks waiting on completion,""" start="00:12:49.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""which blocks the D-Bus service from responding.""" start="00:12:51.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I really wish Emacs was multi-threaded.""" start="00:12:54.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""But let's try it out.""" start="00:12:57.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So if we run this, we can see that we get a return,""" start="00:12:59.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and that's an unsigned integer of 32 bits""" start="00:13:02.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with a value of 3.""" start="00:13:05.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So like I was saying, this is really a two-way API""" start="00:13:06.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""where you can communicate back and forth""" start="00:13:09.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""between Emacs and another program.""" start="00:13:11.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""It's not just fire-and-forget.""" start="00:13:13.400" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I think that's really cool.""" start="00:13:14.960" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""Let's try another demo.""" start="00:13:16.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""What about a remote org-capture?""" start="00:13:18.520" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""What if you could trigger an org-capture""" start="00:13:20.600" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""from any program on your desktop?""" start="00:13:23.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I think that would be pretty cool.""" start="00:13:24.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And we can see, there it is.""" start="00:13:26.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""All right, I think I've got that one covered.""" start="00:13:30.240" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""So I do want to say that remote eval is probably a bad idea""" start="00:13:38.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""from a security perspective,""" start="00:13:42.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""but the point of this is some quick and dirty demonstrations""" start="00:13:43.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""of what can happen and to get people's imaginations flowing,""" start="00:13:46.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""because I think this is something""" start="00:13:49.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that offers a lot of promise for Emacs.""" start="00:13:51.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I think having a full-blown Emacs desktop environment""" start="00:13:54.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""where it can do all the things that a GNOME""" start="00:13:57.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""or a KDE environment can do is very exciting.""" start="00:13:59.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""And if you want to have a traditional GUI with Emacs""" start="00:14:02.760" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""as a more integrated participant of it,""" start="00:14:06.440" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""its service mechanism offers a lot of ability to do that.""" start="00:14:08.680" video="mainVideo-dbus" id="subtitle"]]
+[[!template new="1" text="""In the micro sense, I think there's a lot of improvements""" start="00:14:11.880" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""that can be made to either dbus.el or to dbase.""" start="00:14:16.000" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""The main one is handling of the type system.""" start="00:14:19.280" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Lisp's dynamic type system doesn't mesh particularly well""" start="00:14:21.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""with the static strong type system that D-bus offers,""" start="00:14:25.840" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and having some convenience to assist that""" start="00:14:28.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""would be very helpful.""" start="00:14:31.360" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""There's also some weird interfaces.""" start="00:14:32.640" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""For example, some things return identifiers""" start="00:14:35.320" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""as an array of integer code points instead of a string,""" start="00:14:38.120" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and there should be a common way of handling that.""" start="00:14:40.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""I also think that the service support could be improved.""" start="00:14:43.720" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Even though I gave the demo service,""" start="00:14:46.160" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""it's not really a great D-bus citizen""" start="00:14:48.040" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""because it doesn't offer that introspection mechanism,""" start="00:14:50.480" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""and so the actual methods are pretty much invisible""" start="00:14:53.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""to other participants,""" start="00:14:55.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""unless they already know that you're using Emacs.""" start="00:14:56.920" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""That's my talk.""" start="00:15:00.080" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:15:01.800" video="mainVideo-dbus" id="subtitle"]]
+[[!template text="""You can find me on mastodon.social or on libera.chat.""" start="00:15:02.560" video="mainVideo-dbus" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20dbus%3A%20The%20Wheels%20on%20D-Bus)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/dbus-before.md b/2022/info/dbus-before.md
new file mode 100644
index 00000000..fac93a6c
--- /dev/null
+++ b/2022/info/dbus-before.md
@@ -0,0 +1,62 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="dbus">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect stroke-width="3" x="588" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 16-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-dbus>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T20:15:00Z" end="2022-12-04T20:35:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~3:15 PM - 3:35 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~2:15 PM - 2:35 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~1:15 PM - 1:35 PM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~12:15 PM - 12:35 PM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~8:15 PM - 8:35 PM UTC <br />Sunday, Dec 4 2022, ~9:15 PM - 9:35 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~10:15 PM - 10:35 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~1:45 AM - 2:05 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~4:15 AM - 4:35 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~5:15 AM - 5:35 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="dbus-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="dbus-mainVideo" data="""
+00:00.000 What is D-Bus?
+01:07.880 Why D-Bus?
+01:45.360 The D-Bus Model
+02:55.360 Well-known Busses
+03:20.000 Common interfaces
+04:06.240 Emacs Native D-Bus
+05:09.320 Debase
+05:23.880 Debase: Objects
+06:13.440 Debase: Retarget objects
+06:51.080 Debase: Object binding
+07:12.480 Debase: Raw binding
+07:29.400 Debase: Codegen
+08:14.200 Debase: Codegen example
+09:08.680 Debase: ObjectManager
+09:44.480 Demo: Discomfort
+11:01.480 Demo: Remote eval
+13:16.280 Demo: Remote Org capture
+14:11.880 Future directions
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/uwgjHJvZF9cv5KcYFZmdNz">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="dbus-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="dbus-qanda" data="""
+00:46.840 D-Feet graphical debugger
+01:37.000 Emacs desktop environment
+04:58.160 How long has D-Bus been around, and what was in place before that?
+07:48.360 Why is everything D-Bus prefixed with "org."?
+08:28.480 Do most OS/desktop environment/window managers interoperate well over D-Bus?
+10:08.720 There is a lot of criticism against D-Bus out there. Why do you think that might be?
+11:37.560 Which system services come to mind when thinking about applications, be it at the OS/DE/WM level?
+12:19.720 When it comes to managing devices, how are D-Bus and udev related?
+13:33.280 What is something D-Bus does that you couldn't do before? What is a really cool use of D-Bus in a modern desktop environment?
+15:08.880 Can you explain briefly what clients and services can do with properties?
+17:49.920 Is there such a thing as a D-Bus reflection browser, maybe Emacs-based, that lets you discover all the behavior different D-Bus app participants provide?
+18:17.760 Next question, D-Bus seems great for extensibility, but then Emacs has no such mechanism and is fantastically more extensible. Why do you think this is so?
+19:25.200 Do you have any other cool D-Bus ideas?
+19:54.640 Are there buses besides system and session? Is there anything more to a bus besides a way to group objects?
+22:52.280 What do you use it for?
+25:12.480 It looks like dBus is mostly useful for Emacs to do IPC -- IIUC, this is how synctex works when working with LaTeX docs. How does it compare with other ways of doing IPC, for example, communicating over a socket with MPD?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="dbus-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.webm">Download --answers.webm (18MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.opus">Download --answers.opus (9.8MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/dbus-nav.md b/2022/info/dbus-nav.md
new file mode 100644
index 00000000..de8d811a
--- /dev/null
+++ b/2022/info/dbus-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/grail">GRAIL---A Generalized Representation and Aggregation of Information Layers</a>
+Next by track: <a href="/2022/talks/indieweb">Putting Org Mode on the Indieweb</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/detached-after.md b/2022/info/detached-after.md
new file mode 100644
index 00000000..21abac9b
--- /dev/null
+++ b/2022/info/detached-after.md
@@ -0,0 +1,182 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="detached-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello, everyone! Welcome to my talk,""" start="00:00:00.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""&quot;Getting detached from Emacs&quot;.""" start="00:00:04.454" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""When I started to use Emacs,""" start="00:00:07.321" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I quickly gravitated towards using it""" start="00:00:09.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""as much as I could.""" start="00:00:12.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Magit, Org, Dired,""" start="00:00:15.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""a lot of new possibilities opened up.""" start="00:00:17.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""However, there was a workflow""" start="00:00:21.360" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""that was difficult for me to replace.""" start="00:00:23.280" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""The problem for me was running shell commands""" start="00:00:27.120" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""in sub-processes of Emacs,""" start="00:00:30.120" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""which in some situations led me to stick to""" start="00:00:32.560" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""using an external terminal.""" start="00:00:34.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""These situations,""" start="00:00:38.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""often revolved around long-running shell commands,""" start="00:00:39.688" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""either on my local machine""" start="00:00:43.354" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""or on a remote host.""" start="00:00:46.154" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""When I was on a remote host,""" start="00:00:48.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I would also rely on using the program tmux""" start="00:00:50.240" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to be able to detach from the remote process.""" start="00:00:52.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""My main concern at the time""" start="00:00:57.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""was that I didn't want to having to avoid""" start="00:00:59.621" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""restarting Emacs,""" start="00:01:01.954" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""because I needed to wait for a process to complete.""" start="00:01:03.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""However, there was of course a lot of things""" start="00:01:07.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I was missing out on by not using Emacs.""" start="00:01:11.200" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""Therefore, my solution to resolving""" start="00:01:15.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the issue of occasionally having to leave Emacs""" start="00:01:19.760" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""led me down the path of developing the package""" start="00:01:22.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Detached.""" start="00:01:26.188" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""The package allows Emacs to delegate""" start="00:01:28.321" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the responsibility of creating processes""" start="00:01:31.160" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to the program dtach.""" start="00:01:33.640" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""It also makes sure to write""" start="00:01:36.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the output of the process to a file,""" start="00:01:39.121" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""which we will see later on how that is being used.""" start="00:01:44.421" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""The package makes Emacs capable of""" start="00:01:48.254" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""attaching to these processes""" start="00:01:50.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""as well as managing them.""" start="00:01:53.120" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""In the package, each process is called a session,""" start="00:01:55.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and inside of Emacs that is just""" start="00:01:58.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""an object with properties""" start="00:02:01.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""such as what command is being run,""" start="00:02:02.560" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""what working directory is used,""" start="00:02:04.688" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""where the output is stored, etc.""" start="00:02:06.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""The important aspect is also that""" start="00:02:10.240" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""these objects are being persistent,""" start="00:02:12.480" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""so they are stored over time.""" start="00:02:16.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Today, I'm going to walk you through""" start="00:02:20.221" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""how I use the package and what advantages""" start="00:02:22.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""there are of treating processes like text.""" start="00:02:26.154" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""I'm going to start by opening up M-x shell,""" start="00:02:30.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and I will run a command""" start="00:02:35.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to update my package manager.""" start="00:02:40.388" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Instead of pressing return,""" start="00:02:46.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I'll simply press shift return""" start="00:02:48.354" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to let Emacs delegate the execution""" start="00:02:50.240" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to the dtach program.""" start="00:02:52.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Emacs will immediately attach itself to the process,""" start="00:02:54.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and we therefore don't perceive any difference""" start="00:02:57.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""from when running the command as a subprocess.""" start="00:03:00.960" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""We now have the option though""" start="00:03:04.480" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to detach from the session,""" start="00:03:06.588" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and later on we can of course""" start="00:03:09.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""reattach Emacs to the session.""" start="00:03:12.080" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""For me, this addresses the core""" start="00:03:17.154" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""of the problem that I had.""" start="00:03:20.521" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""But let’s see what’s more""" start="00:03:23.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the new workflow inside of Emacs can bring.""" start="00:03:25.040" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""The package supports multiple user interfaces""" start="00:03:30.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""such as Eshell and Compile.""" start="00:03:35.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I will therefore switch to the Detached project,""" start="00:03:39.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and I will run the build command that I use.""" start="00:03:43.360" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I will run it with detached-compile""" start="00:03:49.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""with the difference that""" start="00:03:54.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I can detach from the compilation.""" start="00:03:55.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""One benefit of this new workflow is that""" start="00:03:59.800" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I can get a system notification shown up here""" start="00:04:05.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""once a session has finished.""" start="00:04:08.680" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Previously, I was either forced to have""" start="00:04:10.760" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the terminal open so I could see it or hiding it,""" start="00:04:15.520" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""but then risking having forgotten it.""" start="00:04:19.040" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""How do we then see the output of a session?""" start="00:04:27.854" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Get the detached-list-sessions command,""" start="00:04:32.560" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and here we see""" start="00:04:36.888" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""the command that we just built,""" start="00:04:42.954" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and we see the guix pull with an asterisk""" start="00:04:45.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""indicating that it is continuously running.""" start="00:04:48.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""If I press enter,""" start="00:04:54.480" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""we will get the output of the session here.""" start="00:05:01.521" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""And since it was run using compile,""" start="00:05:04.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""we also have compilation mode enabled here,""" start="00:05:07.200" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""so we could navigate between""" start="00:05:11.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""potential warnings or errors.""" start="00:05:14.288" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""And we see that there is a warning here.""" start="00:05:17.160" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""One thing that""" start="00:05:21.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I have prepared here is that""" start="00:05:26.721" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""if I open up the user interface,""" start="00:05:28.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""we only see two sessions,""" start="00:05:32.240" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""but that is because we applied a filter here.""" start="00:05:35.760" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, we have actually the only sessions""" start="00:05:39.088" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""that are created within the last 12 hours""" start="00:05:43.160" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and that are considered unique.""" start="00:05:46.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, if I remove the uniqueness,""" start="00:05:47.360" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""we also see that we have a previous build""" start="00:05:50.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""running on the main branch.""" start="00:05:57.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, I think that's typically normal""" start="00:05:59.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""that you might have that.""" start="00:06:02.760" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""And since the sessions can be considered text,""" start="00:06:07.080" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""we can just mark these two and check,""" start="00:06:10.920" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""does this warning exist on the main branch or not?""" start="00:06:14.760" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, we can just diff these ones""" start="00:06:18.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and we see that the warning is only present""" start="00:06:22.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""on the emacsconf branch.""" start="00:06:27.554" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""Now, another benefit, in my opinion,""" start="00:06:34.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""of the new way of working is that""" start="00:06:37.520" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I have these properties being displayed""" start="00:06:41.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""in the user interface.""" start="00:06:43.240" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I can quickly see which commands are still running,""" start="00:06:45.421" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""what hosts they are running on,""" start="00:06:48.960" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""where they are running,""" start="00:06:51.360" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and for how long they have been running.""" start="00:06:53.488" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""And if they have run,""" start="00:06:58.221" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""how long did it take?""" start="00:07:00.421" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""Occasionally, though, there might be""" start="00:07:04.521" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""even more input needed to distinguish sessions.""" start="00:07:06.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, what I typically do then is""" start="00:07:16.880" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""press A to annotate the session,""" start="00:07:19.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I would add a &quot;Warning found at emacsconf&quot;""" start="00:07:22.200" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""And then it will show up this annotation""" start="00:07:29.088" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""in the echo area when I select the session.""" start="00:07:32.954" video="mainVideo-detached" id="subtitle"]]
+[[!template new="1" text="""Another great improvement of using these sessions""" start="00:07:45.088" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and consider them being text is,""" start="00:07:48.080" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""now we also see the guix pull completed here.""" start="00:07:52.640" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Then we can also select and see that, okay,""" start="00:07:57.421" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""there is a lot of updates in this command,""" start="00:08:01.021" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""but let's not look at it now.""" start="00:08:08.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Let's instead remember that""" start="00:08:10.160" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""previously last week""" start="00:08:17.654" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""when I ran a guix pull,""" start="00:08:19.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I saw an Emacs package that looks interesting.""" start="00:08:21.640" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I rather don't remember its full name,""" start="00:08:27.680" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""but it has something to do with collection.""" start="00:08:30.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, what I then can do is""" start="00:08:32.720" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""remove the 12 hour narrowing criteria,""" start="00:08:38.840" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and we can see here I got sessions ranging back""" start="00:08:42.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""even to 28th of October.""" start="00:08:47.680" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Since these are just to be considered text,""" start="00:08:51.040" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""I can--""" start="00:08:55.600" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""now let's first narrow the sessions""" start="00:08:58.754" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to only show the ones that run guix pull.""" start="00:09:00.320" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Then I would narrow based on the output""" start="00:09:05.288" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""containing a regular expression.""" start="00:09:08.440" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, I remember it was something with collection.""" start="00:09:11.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""And we got one hit.""" start="00:09:14.400" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Here it should be something with collection.""" start="00:09:20.088" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""It was emacs-flymake-collection.""" start="00:09:24.188" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""This is something that is a""" start="00:09:29.621" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""very nice feature to have.""" start="00:09:34.821" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""It doesn't create any overhead""" start="00:09:38.400" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""of having these old sessions lying around""" start="00:09:42.160" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""and occasionally, it can be interesting""" start="00:09:45.280" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""to search through them as well.""" start="00:09:47.400" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""So, for me, this is another example of""" start="00:09:49.680" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""when bringing workflows into Emacs,""" start="00:09:55.000" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""it often opens up new exciting possibilities.""" start="00:10:00.054" video="mainVideo-detached" id="subtitle"]]
+[[!template text="""Thanks a lot for listening.""" start="00:10:05.121" video="mainVideo-detached" id="subtitle"]]
+
+
+
+Captioner: anush
+
+Questions or comments? Please e-mail [niklas.eklund@posteo.net](mailto:niklas.eklund@posteo.net?subject=Comment%20for%20EmacsConf%202022%20detached%3A%20Getting%20detached%20from%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/detached-before.md b/2022/info/detached-before.md
new file mode 100644
index 00000000..b3139527
--- /dev/null
+++ b/2022/info/detached-before.md
@@ -0,0 +1,50 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Niklas Eklund shows how to use detached to manage long-running asynchronous processes, including how to search through and compare session results. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="detached">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect stroke-width="3" x="378" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 11-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-detached>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T18:01:00Z" end="2022-12-04T18:16:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~1:01 PM - 1:16 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~12:01 PM - 12:16 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~11:01 AM - 11:16 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~10:01 AM - 10:16 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~6:01 PM - 6:16 PM UTC <br />Sunday, Dec 4 2022, ~7:01 PM - 7:16 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~8:01 PM - 8:16 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~11:31 PM - 11:46 PM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~2:01 AM - 2:16 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~3:01 AM - 3:16 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="detached-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="detached-mainVideo" data="""
+00:00.000 Intro
+00:27.120 The problem
+01:15.800 My solution: detached
+02:30.840 Shell
+03:30.800 Compile
+04:27.854 Detached list sessions
+05:21.440 Narrow criteria
+06:07.080 Diff sessions
+06:34.040 Rich interface with properties
+07:04.521 Annotation
+07:45.088 Searching through sessions
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.webm">Download --main.webm (42MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/5g6W1vPuWeHognYnvnnbNk">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="detached-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="detached-qanda" data="""
+00:32.880 Can it replace ssh+tmux for persistent sessions on remote hosts?
+01:16.880 I see integration with projectile in the readme. Does it also integrate with project.el?
+03:51.240 Can you detach a session from shell-mode and reattach from eshell/vterm/term-mode? Or start a compile in shell-mode and attach it from compilation-mode?
+05:45.120 How do you talk to detached? Could it be feasible to run a child Emacs instead of detached?
+07:45.880 How does it handle processes that require user input?
+09:20.000 Can you rerun a command (session?) but in another directory?
+12:22.880 What are some other places where this might be useful?
+16:59.720 What are you currently excited about in Emacs?
+19:27.400 Bug in detached re: eshell and quotes
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="detached-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.webm">Download --answers.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.opus">Download --answers.opus (8.9MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/detached-nav.md b/2022/info/detached-nav.md
new file mode 100644
index 00000000..0a9a505f
--- /dev/null
+++ b/2022/info/detached-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/hyperorg">Powerful productivity with Hyperbole and Org Mode</a>
+Next by track: <a href="/2022/talks/eshell">Top 10 reasons why you should be using Eshell</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/devel-after.md b/2022/info/devel-after.md
new file mode 100644
index 00000000..d2f37446
--- /dev/null
+++ b/2022/info/devel-after.md
@@ -0,0 +1,133 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="devel-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello, it's time for another Emacs development update.""" start="00:00:00.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I want to thank the organizers of EmacsConf""" start="00:00:05.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for putting this together""" start="00:00:07.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and also the maintainers of Emacs""" start="00:00:10.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""with a special thanks to Eli Zaretskii.""" start="00:00:12.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""It's really he who gave me this information""" start="00:00:14.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""so that I could pass it along to you.""" start="00:00:16.520" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""The main thing to discuss this time""" start="00:00:19.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""with regard to what's been going on with Emacs is Emacs 29.""" start="00:00:21.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""The release cycle for Emacs 29 should begin in December""" start="00:00:25.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""when a branch will be cut and the release work will start.""" start="00:00:29.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""We should be seeing Emacs 29 coming out fairly soon.""" start="00:00:32.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Here's just a brief overview""" start="00:00:36.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""of some of the things to look forward to""" start="00:00:38.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""coming up in Emacs 29.""" start="00:00:39.680" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""Overlays have been re-implemented.""" start="00:00:42.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""If you haven't used them before,""" start="00:00:45.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""overlays are a way to apply a set of properties""" start="00:00:47.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""over a range of text so that""" start="00:00:50.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""you can have things like mouse clicks""" start="00:00:53.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""take on different behavior""" start="00:00:55.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""depending on where it happens in the text.""" start="00:00:57.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This is different than text properties""" start="00:00:59.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""which associate the properties with the text itself.""" start="00:01:01.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Overlays do not alter the text in any way""" start="00:01:04.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and they simply, as the name suggests,""" start="00:01:07.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""overlay on the buffer.""" start="00:01:09.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Now previously, overlays were implemented as linear lists""" start="00:01:10.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""which got very slow when there were""" start="00:01:14.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""a lot of overlays in a buffer.""" start="00:01:15.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Now they're being re-implemented as trees,""" start="00:01:17.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""so that searching should be very fast, and""" start="00:01:19.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in fact, comparable to text properties.""" start="00:01:21.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This is already on the master branch""" start="00:01:24.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and (more or less) is ready for release.""" start="00:01:26.520" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""Eglot has been ported into Emacs.""" start="00:01:29.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Eglot is an LSP [Language Server Protocol] client for Emacs,""" start="00:01:32.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""one of the two that are often used.""" start="00:01:36.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""But now it's going to be included in core,""" start="00:01:38.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""so it's considered official""" start="00:01:40.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and will be well integrated with other Emacs features.""" start="00:01:42.760" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""There's going to be a Tree-sitter library.""" start="00:01:46.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Tree-sitter is a way of building fast incremental parsers.""" start="00:01:48.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There's a website on Tree-sitter if you Google for that.""" start="00:01:53.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This can be used for various features,""" start="00:01:56.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but first and foremost, it'll be used""" start="00:01:57.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for fontification and indentation in Emacs.""" start="00:01:59.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Instead of heuristics and regular expressions,""" start="00:02:02.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""you can now build your fontifications""" start="00:02:05.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""based on a parse tree.""" start="00:02:07.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There's a branch now that supports this""" start="00:02:09.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for several modes already, like Python, TypeScript,""" start="00:02:10.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and JavaScript.""" start="00:02:13.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""We don't have anyone yet working on it for C mode""" start="00:02:15.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but Eli has challenged whether anyone""" start="00:02:18.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in the community is interested.""" start="00:02:20.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""He would love to see Tree-sitter support added for C mode,""" start="00:02:21.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because this has been quite slow""" start="00:02:25.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""when dealing with very, very large files""" start="00:02:27.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and Tree-sitter should help that.""" start="00:02:29.640" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""There have been significant improvements""" start="00:02:32.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in dealing with very long lines.""" start="00:02:34.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This is something that has been""" start="00:02:36.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""a long time frequent complaint.""" start="00:02:38.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs becomes rather unusable""" start="00:02:40.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""if you open a giant file that's a single long line.""" start="00:02:42.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Anyone who's ever tried to open a 30 megabyte JSON file""" start="00:02:45.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that's all on one line will know this pain.""" start="00:02:49.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Some modes, however, will have to adapt to this change,""" start="00:02:52.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because sometimes access to the whole buffer""" start="00:02:55.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""is now forcefully restricted.""" start="00:02:58.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""If the mode requires access to the entire buffer""" start="00:03:00.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""at all times to work, then the developer of that mode""" start="00:03:04.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""will need to devise some simplifications""" start="00:03:08.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""so that they don't require that complete access.""" start="00:03:10.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""For example, if a mode used to go way back""" start="00:03:13.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""to the beginning of the buffer""" start="00:03:15.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in order to determine if there's an unbalanced parenthesis,""" start="00:03:16.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""this won't work in the new long lines support mode,""" start="00:03:19.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because the entire buffer is not always available.""" start="00:03:23.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs is sort of doing some""" start="00:03:25.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""restricting of the buffer heuristically""" start="00:03:27.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in order to keep the visible range working""" start="00:03:29.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""very, very quickly now.""" start="00:03:32.480" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""Emacs can now build directly with SQLite.""" start="00:03:35.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This means that SQLite databases""" start="00:03:39.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""can be directly accessible from Emacs.""" start="00:03:42.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Should be nice for anyone whose mode wants to""" start="00:03:44.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""cache or store some queryable data.""" start="00:03:47.360" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""The XInput extension is now up to version 2.""" start="00:03:50.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There are many extensions in this specification.""" start="00:03:54.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""From the user's point of view,""" start="00:03:58.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it enables things like smooth scrolling and touch devices.""" start="00:03:59.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs will now use this by default on all systems""" start="00:04:03.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""where the library is installed.""" start="00:04:06.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""It should be on every modern system that uses X.""" start="00:04:08.560" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""There's also a pure GTK build in Emacs 29.""" start="00:04:11.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""The purpose of this is to allow Emacs""" start="00:04:15.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""on systems without X, such as Wayland or Broadway,""" start="00:04:17.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""to be able to have a graphical build of Emacs.""" start="00:04:21.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There's also lots of improvements to drag and drop""" start="00:04:24.160" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""on X systems, for people who like drag and drop.""" start="00:04:27.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And there's support for double buffering on Microsoft Windows.""" start="00:04:31.360" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""The last of the headline features""" start="00:04:34.280" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""coming for Emacs 29 is emoji input.""" start="00:04:38.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So there will now be a prefix key,""" start="00:04:41.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""C-x 8 e for emoji input,""" start="00:04:43.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""along with several new commands to insert emoji""" start="00:04:47.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""by various forms of shorthand.""" start="00:04:50.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There will even be an input method""" start="00:04:52.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""where you can write the plain English names of emojis""" start="00:04:54.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and have the symbol inserted.""" start="00:04:57.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So that rounds out some of the features""" start="00:04:59.120" video="mainVideo-devel" id="subtitle"]]
+[[!template new="1" text="""coming up for Emacs 29.""" start="00:05:02.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Sounds like an exciting release""" start="00:05:03.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and it should be headed your way soon.""" start="00:05:05.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I hope everybody has fun at the conference""" start="00:05:07.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and enjoy yourselves.""" start="00:05:09.920" video="mainVideo-devel" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20devel%3A%20Emacs%20development%20updates)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/devel-before.md b/2022/info/devel-before.md
new file mode 100644
index 00000000..d2576923
--- /dev/null
+++ b/2022/info/devel-before.md
@@ -0,0 +1,21 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, John Wiegley will briefly summarize important developments on the road to Emacs 29. He will not be able to answer questions right now, but you can post questions in the pad and he can follow up after the event.
+
+<div class="vid"><video controls preload="none" id="devel-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="devel-mainVideo" data="""
+00:00.000 Introduction
+00:19.320 Emacs 29 release cycle
+00:42.400 Overlays
+01:29.080 Eglot
+01:46.480 Tree-sitter
+02:30.840 Very long lines
+03:35.240 SQLite
+03:50.080 XInput
+04:11.320 Pure GTK build
+04:24.640 Drag and drop
+04:31.400 Double-buffering on Microsoft Windows
+04:35.240 Emoji input
+05:00.080 End
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.webm">Download --main.webm (33MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.opus">Download --main.opus (2.8MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/o8S5uKpPTCD717zwHPd5cD">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/devel-nav.md b/2022/info/devel-nav.md
new file mode 100644
index 00000000..9335964b
--- /dev/null
+++ b/2022/info/devel-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/localizing">Pre-localizing Emacs</a>
+Next by track: <a href="/2022/talks/fanfare">Fanfare for the Common Emacs User</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/eev-after.md b/2022/info/eev-after.md
new file mode 100644
index 00000000..7368a306
--- /dev/null
+++ b/2022/info/eev-after.md
@@ -0,0 +1,173 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="eev-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hi! My name is Eduardo Ochs. I'm the author""" start="00:00:00.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""of an Emacs package called eev, and the name""" start="00:00:04.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""of this presentation is: &quot;Bidirectional links""" start="00:00:06.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""in eev&quot;.""" start="00:00:09.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Let me present things in a weird order,""" start="00:00:10.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""starting by the new feature, and then I'm""" start="00:00:13.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""going to explain the whole context.""" start="00:00:16.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""One of the main features that we are""" start="00:00:20.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""going to see here is this function here,""" start="00:00:22.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""M-x kla, and kla is a mnemonic for &quot;kill""" start="00:00:24.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Link to Anchor&quot;. Let me explain... let me""" start="00:00:27.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""demonstrate how it works. This thing here""" start="00:00:31.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""with the green angle brackets is an""" start="00:00:33.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""anchor, this thing between the green""" start="00:00:36.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""angle brackets is a tag of an""" start="00:00:40.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""anchor, and if I type M-x kla here""" start="00:00:42.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it highlights this tag for a second and""" start="00:00:46.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it says &quot;Copied to the kill ring: blah""" start="00:00:49.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""blah blah...&quot; and this thing here is a link.""" start="00:00:52.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""I can insert the link here, I""" start="00:00:54.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""can insert the link in my notes...""" start="00:00:57.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and if I execute this thing this link""" start="00:01:00.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""here it goes to this anchor in this file.""" start="00:01:03.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""If you have a recent version of eev""" start="00:01:10.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""installed then trying this feature""" start="00:01:12.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""should be very easy...""" start="00:01:13.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""you just need to open the this file here,""" start="00:01:15.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""in which everything is defined, and then""" start="00:01:18.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""go to this section at the beginning of""" start="00:01:21.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the file, and then run the three blocks""" start="00:01:23.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""of tests that are there.""" start="00:01:26.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""This block corresponds roughly to what""" start="00:01:28.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""we have just done...""" start="00:01:31.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this other block""" start="00:01:33.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""is slightly different because it shows""" start="00:01:36.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""some variants of kla... one is with `f`""" start="00:01:40.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""instead of an `a` here, let me""" start="00:01:44.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""show how it works... if we type""" start="00:01:48.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""`M-x eeklf` or just `M-x klf`""" start="00:01:51.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""we get a link to this file that does not""" start="00:01:57.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""point to an anchor, and if we type""" start="00:02:00.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""`M-x klt` we get another kind of link that""" start="00:02:03.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""is a link to an anchor in the same""" start="00:02:07.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""file...""" start="00:02:09.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and the third block""" start="00:02:11.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""is more interesting because it lets""" start="00:02:16.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""people create links to files that""" start="00:02:18.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""are elsewhere, and that do not have""" start="00:02:20.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""anchors in them...""" start="00:02:23.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""let me execute this... this will""" start="00:02:25.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""run this sexp here and display the""" start="00:02:29.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""target at the window at the right...""" start="00:02:32.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this is one of the source files of Emacs.""" start="00:02:35.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Let's imagine that I want to create a""" start="00:02:41.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""link to this string here... then I can""" start="00:02:43.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""type `M-x klfs`, and this will create a""" start="00:02:46.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""link to a file and to a string in that""" start="00:02:51.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""file. So if I type ENTER here""" start="00:02:53.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it says: &quot;Copied to the kill ring: ...\""" start="00:02:56.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and this is a link to this file here,""" start="00:02:59.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and to the first occurrence of this""" start="00:03:02.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""string in this file.""" start="00:03:04.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""So: how does this work (inside)?...""" start="00:03:10.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""when I was trying to write the documentation""" start="00:03:14.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""of this I tried to write a summary of""" start="00:03:16.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""how the algorithm works, and I failed and""" start="00:03:19.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""I tried again, and I failed again,""" start="00:03:21.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""several times... and then I gave up and I""" start="00:03:23.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""decided to write an intro - a tutorial,""" start="00:03:26.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this one -""" start="00:03:29.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""that explains everything with lots of""" start="00:03:31.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""details, and with lots of sections""" start="00:03:34.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""with &quot;Try it!&quot;s, that""" start="00:03:35.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""have examples that you you can run to""" start="00:03:39.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""understand things, to examine how some""" start="00:03:41.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""functions work, how the data""" start="00:03:44.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""structures work, and so on...""" start="00:03:48.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the problem is that sometimes we have""" start="00:03:51.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""several hyperlinks that point to the to""" start="00:03:54.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the same file. Let me give an example.""" start="00:03:56.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""In the configuration in which I am now,""" start="00:04:00.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""in this file here... the old way of""" start="00:04:04.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""generating hyperlinks to this file""" start="00:04:07.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""with `find-here-links`""" start="00:04:08.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""will generate a temporary buffer""" start="00:04:10.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""like this, and then I would have to""" start="00:04:13.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""choose which one of these hyperlinks I""" start="00:04:15.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""find best, which one I prefer, and then""" start="00:04:18.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""copy it to my notes... so instead""" start="00:04:21.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""of choosing a hyperlink this thing here""" start="00:04:25.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""shows all the options.""" start="00:04:27.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""And in the new way, in `M-x kla`""" start="00:04:30.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and friends, there's an algorithm that""" start="00:04:34.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""chooses the best short hyperlink by""" start="00:04:37.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""itself, and this algorithm is a bit hard""" start="00:04:39.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to explain... let me demonstrate it here.""" start="00:04:43.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Again, we have all these options here, of""" start="00:04:46.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""hyperlinks to this file...""" start="00:04:50.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and if I type `M-x klf`""" start="00:04:51.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it chooses one of them.""" start="00:04:56.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""And of course I can copy it to my notes,""" start="00:04:58.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it's going to work, it's going to point""" start="00:05:01.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to here... and so on.""" start="00:05:02.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Well, the title of this presentation was""" start="00:05:05.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""&quot;Bidirectional links with eev&quot;... let me""" start="00:05:08.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""show what I mean by bi-directional""" start="00:05:11.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""hyperlinks, and how we can use this thing""" start="00:05:13.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to create bidirectional hyperlinks""" start="00:05:15.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""very quickly.""" start="00:05:17.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""I will have to use a smaller font... let""" start="00:05:19.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""me open these two files here. This one at""" start="00:05:22.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the left is a program in Haskell, and""" start="00:05:25.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this one is a file with my notes on""" start="00:05:27.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Haskell.""" start="00:05:30.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""How do I create a link from...""" start="00:05:31.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to this file in Haskell""" start="00:05:35.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to put it in this file here? I can put""" start="00:05:39.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the cursor here, in any position""" start="00:05:42.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""after this anchor here, and type""" start="00:05:45.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""`M-x kla`...""" start="00:05:48.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it copies this link here to the kill""" start="00:05:49.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""ring and then I can can go here and""" start="00:05:51.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""either insert it with C-y (yank), or""" start="00:05:54.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""insert it with `M-k kli`, that adds a""" start="00:05:59.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""comment prefix here.""" start="00:06:06.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""So this is a way to create a link from""" start="00:06:07.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""here to there in which every""" start="00:06:11.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""comment has to be given explicitly...""" start="00:06:15.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""but I also implemented a way to""" start="00:06:18.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""create the two links at the same time.""" start="00:06:21.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""I don't use it much, it's mostly for""" start="00:06:23.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""demos, because it's impressive, I wanted""" start="00:06:25.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""to show that in this presentation...""" start="00:06:27.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""Anyway, let me show it here. Note that""" start="00:06:29.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""that in this file here the point is""" start="00:06:33.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""here, in this file the point is here...""" start="00:06:36.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""My trick is going to create a link to""" start="00:06:40.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this anchor and put it in this file, and""" start="00:06:43.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it's going to create a link to this""" start="00:06:47.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""anchor and put it in this file...""" start="00:06:49.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""So, here it goes: `M-x kla2`... ta-da!""" start="00:06:52.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""it highlighted the true anchors for a""" start="00:06:57.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""second, and it created these things here""" start="00:07:01.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""and inserted them with the""" start="00:07:03.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""right prefixes, I mean, the right""" start="00:07:06.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""comment prefixes.""" start="00:07:09.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""And that's it!""" start="00:07:10.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""So... that's it. If you found this thing""" start="00:07:15.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""interesting just""" start="00:07:18.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""install a recent version of eev and run""" start="00:07:22.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""the tutorial, either with this thing here,""" start="00:07:25.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""`M-x find-kla-intro`, or by running""" start="00:07:28.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""this sexp, or open this file here in the""" start="00:07:30.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""eev directory, and follow the""" start="00:07:35.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""tutorials...""" start="00:07:37.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""most things that there are well""" start="00:07:39.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""documented, but the thing that I don't""" start="00:07:42.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""use much and that is mostly for demos,""" start="00:07:46.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""which is the the thing that creates""" start="00:07:47.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""bi-directional hyperlinks, is not yet""" start="00:07:50.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""well documented, but the rest is.""" start="00:07:52.000" video="mainVideo-eev" id="subtitle"]]
+[[!template text="""So: that's it! Bye! Have fun! =)""" start="00:07:55.000" video="mainVideo-eev" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20eev%3A%20Bidirectional%20links%20with%20eev)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/eev-before.md b/2022/info/eev-before.md
new file mode 100644
index 00000000..556359de
--- /dev/null
+++ b/2022/info/eev-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="eev">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect stroke-width="3" x="619" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 8-min talk followed by IRC Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">#emacsconf-dev</a>)
+Etherpad: <https://pad.emacsconf.org/2022-eev>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+<div class="vid"><video controls preload="none" id="eev-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.webm">Download --main.webm (17MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.opus">Download --main.opus (3.9MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/hQUQSeECqpb3AMSqiViksa">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/eev-nav.md b/2022/info/eev-nav.md
new file mode 100644
index 00000000..cdf20e11
--- /dev/null
+++ b/2022/info/eev-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/health">Health data journaling and visualization with Org Mode and gnuplot</a>
+Next by track: <a href="/2022/talks/jupyter">Edit live Jupyter notebook cells with Emacs</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/eshell-after.md b/2022/info/eshell-after.md
new file mode 100644
index 00000000..3c6c1674
--- /dev/null
+++ b/2022/info/eshell-after.md
@@ -0,0 +1,253 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="eshell-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""I have 10 minutes to talk you into""" start="00:00:00.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""giving Eshell a second chance.""" start="00:00:05.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Have the right perspective and expectation,""" start="00:00:07.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and I think you’ll really enjoy it.""" start="00:00:10.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Just remember eshell is a shell,""" start="00:00:12.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""not a terminal emulator.""" start="00:00:15.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I use both Eshell and vterm.""" start="00:00:17.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’m going to talk and type fast,""" start="00:00:20.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""as I have 10 reasons for you to try Eshell again.""" start="00:00:23.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""1. It’s an Emacs REPL.""" start="00:00:29.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I mean, check this out.""" start="00:00:32.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Let’s start up Eshell here.""" start="00:00:34.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Let’s just type a Lisp expression.""" start="00:00:37.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""It works.""" start="00:00:41.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""As a shell, the parens are kinda optional.""" start="00:00:43.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""2. It’s also a shell.""" start="00:00:48.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""While eshell may look like a shell, like Bash""" start="00:00:52.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""you should view it as a REPL""" start="00:00:56.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""with parenthesis-less s-expressions.""" start="00:00:58.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This makes sense, because a shell command with options,""" start="00:01:02.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""like this ls command,""" start="00:01:05.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""looks like an s-expression.""" start="00:01:08.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""3. You can mix these two modes.""" start="00:01:10.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Shells can call subshells""" start="00:01:12.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""which return their output like a function call,""" start="00:01:14.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""like this Bash command.""" start="00:01:17.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In this Eshell example,""" start="00:01:20.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I use the output of a text file""" start="00:01:22.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""as command line arguments to ripgrep.""" start="00:01:24.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Notice how I use braces""" start="00:01:27.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to state that it is a call to an eshell expression.""" start="00:01:29.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""We can mix Lisp-expressions and Shell-expressions.""" start="00:01:34.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Allow me a contrived example.""" start="00:01:40.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Notice I use good ol' setq to create a variable.""" start="00:01:45.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Yes, those are global Emacs variables available everywhere.""" start="00:01:50.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In Eshell, the wildcard actually creates a list.""" start="00:01:54.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This variable assignment doesn’t work as you might expect,""" start="00:01:59.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""as setq in Eshell is still setq,""" start="00:02:04.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and it assigns variables in pairs.""" start="00:02:07.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""To make a list in Eshell, we use listify:""" start="00:02:10.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Without parens, Eshell is in “shell mode”,""" start="00:02:17.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""which means that words are strings,""" start="00:02:21.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and variables need to be prefixed with dollar signs.""" start="00:02:23.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""A command can have both Eshell and Lisp expressions.""" start="00:02:26.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""As you can see here,""" start="00:02:32.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I have a call to ripgrep,""" start="00:02:34.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""but part of it is an s-expression.""" start="00:02:37.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Remember the differences:""" start="00:02:40.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""With parens, eshell treats it as Lisp,""" start="00:02:42.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""like the last line in my example.""" start="00:02:46.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""With braces, eshell follows these shell-like rules:""" start="00:02:49.200" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""First, if it looks like a number, it's a number.""" start="00:02:53.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Otherwise, eshell converts it to a string""" start="00:02:57.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""(quotes, like a shell, groups words).""" start="00:02:59.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""What about this mix between functions and executables""" start="00:03:03.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""for the first word?""" start="00:03:07.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Functions that begin with eshell are called first.""" start="00:03:10.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Next in priority are executables on your $PATH,""" start="00:03:15.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""then matching Lisp functions.""" start="00:03:19.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""You can actually switch this order""" start="00:03:22.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""with the `eshell-prefer-lisp-functions` variable.""" start="00:03:23.941" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""4. Emacs is actually better than shell.""" start="00:03:27.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""If the following works, why would you call""" start="00:03:31.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""expr or bc or dc, or any of those other calculators?""" start="00:03:35.200" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""You can just call a Lisp expression.""" start="00:03:40.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Why call less or more when you could call view-file?""" start="00:03:43.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Here, I’ve aliased less to view-file.""" start="00:03:48.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Load it up, and it shows up in an Emacs mode.""" start="00:03:52.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Just like with less, if you hit q,""" start="00:03:57.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""you go back to your Eshell terminal.""" start="00:04:01.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I do have an improvement, though.""" start="00:04:05.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The problem with view-file is""" start="00:04:08.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""it takes a single file as an argument.""" start="00:04:10.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In a shell, we might want to view more than one.""" start="00:04:13.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""So let’s make a solution to that.""" start="00:04:15.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This function will call the first function""" start="00:04:18.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""with the first argument,""" start="00:04:21.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and the second function with each of the rest.""" start="00:04:22.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This allows me to make a version of less""" start="00:04:26.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that calls view-file on the first [argument] given,""" start="00:04:29.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""but open in another window for each additional file.""" start="00:04:33.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""5. Better regular expressions.""" start="00:04:36.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Can’t remember regular expressions when calling""" start="00:04:41.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""grep or some other search function? Use the rx macro.""" start="00:04:44.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Here I call ripgrep again, but this time,""" start="00:04:48.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’m using a Lisp expression calling the rx macro""" start="00:04:55.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to look for UUIDs in the files in my current directory.""" start="00:05:00.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""But I have another improvement for this.""" start="00:05:04.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""While the rx macro is freaking cool for Emacs Lisp,""" start="00:05:08.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""it doesn’t always translate to regular expressions""" start="00:05:13.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""accepted by most commands.""" start="00:05:15.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The (I have no idea how to pronounce this) pcre2el project""" start="00:05:20.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""can convert from a Lisp regular expression""" start="00:05:25.200" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to Perl-compatible regular expressions (PCRE)""" start="00:05:28.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""acceptable by most search commands.""" start="00:05:31.360" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’ve created a new macro here, prx,""" start="00:05:33.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that translates the output of the rx macro.""" start="00:05:37.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This allows me to type something much more readable,""" start="00:05:41.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and probably easier to remember.""" start="00:05:46.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Certainly easier than this freaking regular expression.""" start="00:05:48.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’ve got an even better improvement.""" start="00:05:54.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The rx macro with regular expression snippets""" start="00:05:59.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""can be assigned to key words""" start="00:06:03.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that I can then take advantage of.""" start="00:06:05.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Now our command would be much simpler to type.""" start="00:06:08.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""6. Loops are better with predicates.""" start="00:06:13.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Let’s say you want to remove the execute bit""" start="00:06:16.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""from files that have it.""" start="00:06:18.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In a shell like bash, you need both a for loop and an if,""" start="00:06:20.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""as you can see in this example.""" start="00:06:24.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""With eshell, use a predicate to combine into a simple loop.""" start="00:06:26.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The paren x after a file glob""" start="00:06:31.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""filters for only files marked as executable.""" start="00:06:34.360" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Now here is another improvement.""" start="00:06:36.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Since we often type loops to execute on one command,""" start="00:06:43.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""what about creating a function""" start="00:06:47.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that can do this all in one go?""" start="00:06:49.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This do function splits the arguments on that double colon,""" start="00:06:51.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""where the left side is a single statement to run,""" start="00:06:57.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and the right side is a list of files.""" start="00:07:00.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I have to append and flatten it""" start="00:07:02.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""in order for it to work.""" start="00:07:05.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""It loops through each file,""" start="00:07:07.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""creating an eshell command with the file appended.""" start="00:07:09.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""With this, I can remove the execute bit""" start="00:07:12.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""on all CSV files that have it.""" start="00:07:15.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I see that my example wasn’t too good, as most commands""" start="00:07:20.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""like chmod accept multiple files, but you get the idea.""" start="00:07:24.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In my final, larger form on my website,""" start="00:07:29.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I don’t assume the command expression accepts""" start="00:07:33.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""a file as a final argument,""" start="00:07:35.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""as I can also replace underscores with the filename.""" start="00:07:36.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""7. Output of last command.""" start="00:07:39.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Most shells have a special variable""" start="00:07:45.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""like $? for the exit code of the last command.""" start="00:07:48.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""While reading through the source code,""" start="00:07:52.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I noticed that the $$ refers to""" start="00:07:55.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""the output of the last command.""" start="00:07:58.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This seems pretty cool.""" start="00:08:00.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""However, Eshell returns true or nil""" start="00:08:05.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""when running external commands,""" start="00:08:10.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so accessing the output from a call to ls""" start="00:08:12.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""doesn’t work as expected.""" start="00:08:15.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""But this is Emacs.""" start="00:08:19.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""We can fix that.""" start="00:08:21.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""After running any command, eshell sets these four variables.""" start="00:08:23.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I can hook a function call after every Eshell command.""" start="00:08:28.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Using buffer-substring,""" start="00:08:33.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I store the output into a global variable,""" start="00:08:36.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and extend Eshell’s special variables list.""" start="00:08:39.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In my Emacs configuration,""" start="00:08:43.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I turned this variable into a ring,""" start="00:08:46.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so while $$ works,""" start="00:08:48.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so does array sub-scripting on that variable.""" start="00:08:51.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This allows me to run a command""" start="00:08:54.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and use the output from that command more than once.""" start="00:08:58.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The code for this is a bit longer,""" start="00:09:02.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so you’ll need to see my Emacs configuration for details.""" start="00:09:05.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""8. Redirection back to Emacs.""" start="00:09:08.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Output of any command""" start="00:09:13.440" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""can go to kill-ring (or the clipboard).""" start="00:09:14.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Think of the implications.""" start="00:09:18.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""You don’t have to go into text selection mode.""" start="00:09:21.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Just grab the output.""" start="00:09:23.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""In fact, with our $$ improvement,""" start="00:09:26.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""we can always copy the output from the last command""" start="00:09:30.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to the clipboard.""" start="00:09:33.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Better yet, let’s write the output""" start="00:09:34.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to our engineering notebook.""" start="00:09:38.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Here’s my idea.""" start="00:09:39.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""First, create a capture template that takes a string,""" start="00:09:41.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""or if called interactively, the region,""" start="00:09:46.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and that does an immediate-finish after inserting""" start="00:09:48.200" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that string to the default notes file.""" start="00:09:51.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Next, create a wrapper function""" start="00:09:53.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to call org-capture-string to run that template.""" start="00:09:57.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Finally, we add our new function to eshell-virtual-targets.""" start="00:10:01.560" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Let’s see this in action.""" start="00:10:07.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I have a CSV file of user information.""" start="00:10:08.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I can use grep and cut to extract some of that""" start="00:10:15.708" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and write it out to this month’s engineering notebook.""" start="00:10:19.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""9. Using Emacs buffers.""" start="00:10:26.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Why leave the results of eshell commands""" start="00:10:35.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""in the *eshell* buffer?""" start="00:10:39.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Send the output into a buffer where you can use it.""" start="00:10:40.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Here’s a call to ripgrep""" start="00:10:44.120" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that searches for lines with email addresses""" start="00:10:48.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""using a complicated regular expression""" start="00:10:50.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that I added to my prx macro.""" start="00:10:53.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""When I switch to this almost-grep buffer,""" start="00:10:56.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I can turn on grep-mode.""" start="00:11:01.080" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Now I can jump around as if I just called grep directly.""" start="00:11:03.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Perhaps I’m proficient with my prx macro""" start="00:11:09.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to filter out entries,""" start="00:11:14.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""but not good with shell commands""" start="00:11:16.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that I can use in pipes to extract just one…""" start="00:11:19.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""the address column, for instance?""" start="00:11:24.000" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Let’s just extract it,""" start="00:11:26.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""send it to a buffer called email-list,""" start="00:11:28.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and now I can use Emacs commands that I know and love""" start="00:11:33.280" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to edit the data directly.""" start="00:11:38.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""We currently have an over-sight""" start="00:11:39.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""that the Eshell’s built-in cat command""" start="00:11:55.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""doesn’t pipe buffer contents as standard in.""" start="00:11:58.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""So I created a bcat, a buffer cat, function to do this.""" start="00:12:02.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""So this command works""" start="00:12:07.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to grab my email addresses I just extracted""" start="00:12:09.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and send them to another program.""" start="00:12:14.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""If you’re interested, I have a more elaborate""" start="00:12:16.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and yet simpler workflow surrounding sending data""" start="00:12:20.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""back and forth from Eshell to Emacs buffers.""" start="00:12:25.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""10. Did I mention that you can cd to remote systems?""" start="00:12:28.400" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""This command uses SSH to jump to my host, goblin,""" start="00:12:35.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""start a root session, and jump to the etc directory.""" start="00:12:39.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Remember that Tramp can be finicky""" start="00:12:44.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""if you start blinging your remote hosts with oh-my-zshell,""" start="00:12:47.720" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and funky prompts and things like that,""" start="00:12:52.840" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so your mileage may vary.""" start="00:12:57.791" video="mainVideo-eshell" id="subtitle"]]
+[[!template new="1" text="""In summary: Use eshell if you want""" start="00:12:59.360" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""a quick way to run commands and Emacs functions as a REPL,""" start="00:13:03.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""or to run an OS program but process the output with Emacs.""" start="00:13:07.320" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Keep in mind that Eshell has two types of subshells,""" start="00:13:11.480" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""and you can mix and match during a command call.""" start="00:13:15.920" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""The rx macro is really cool.""" start="00:13:19.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Eshell loops are better with filters and predicates …""" start="00:13:22.640" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""if you can remember them.""" start="00:13:26.600" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Take advantage of Emacs buffers""" start="00:13:28.240" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""to really enhance your shell experience.""" start="00:13:30.960" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""You’ve now seen that just like Emacs,""" start="00:13:32.880" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’ve crafted Eshell to be my own shell creation,""" start="00:13:36.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""tailored to my workflow.""" start="00:13:39.520" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""So, steal my spells, cast your own magic,""" start="00:13:41.040" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""but feel free to share your incantations back to me.""" start="00:13:44.800" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""I’ve gone over my time allotment, so we’ll have to""" start="00:13:48.760" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""continue this discussion on the intertubes.""" start="00:13:51.360" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Why yes, I have joined the birdless diaspora,""" start="00:13:53.680" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""so toot me over there.""" start="00:13:57.160" video="mainVideo-eshell" id="subtitle"]]
+[[!template text="""Thanks.""" start="00:13:59.200" video="mainVideo-eshell" id="subtitle"]]
+
+
+
+Captioner: howard
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20eshell%3A%20Top%2010%20reasons%20why%20you%20should%20be%20using%20Eshell)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/eshell-before.md b/2022/info/eshell-before.md
new file mode 100644
index 00000000..1c57c21e
--- /dev/null
+++ b/2022/info/eshell-before.md
@@ -0,0 +1,52 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Howard Abrams shows how eshell combines the best of Emacs Lisp and shells. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="eshell">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect stroke-width="3" x="439" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 15-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-eshell>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T18:40:00Z" end="2022-12-04T18:55:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~1:40 PM - 1:55 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~12:40 PM - 12:55 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~11:40 AM - 11:55 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~10:40 AM - 10:55 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~6:40 PM - 6:55 PM UTC <br />Sunday, Dec 4 2022, ~7:40 PM - 7:55 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~8:40 PM - 8:55 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~12:10 AM - 12:25 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~2:40 AM - 2:55 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~3:40 AM - 3:55 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="eshell-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="eshell-mainVideo" data="""
+00:00.000 Introduction
+00:29.000 1. It’s an Emacs REPL
+00:48.600 2. It’s also a shell
+01:10.120 3. You can mix these two modes
+03:27.560 4. Emacs is better than shell
+04:36.080 5. Better regular expressions
+06:13.480 6. Loops are better with predicates
+07:39.640 7. Output of last command
+09:08.520 8. Redirection back to Emacs
+10:26.880 9. Using Emacs buffers
+12:28.400 10. cd to remote systems
+12:59.360 Summary
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.opus">Download --main.opus (7.2MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/ndrA731VbY2U6SP8onw3yw">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="eshell-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="eshell-qanda" data="""
+00:31.280 Do you fall back to vterm only when needing terminal emulation?
+01:56.320 Have you thought about adding the Eshell manual?
+02:43.200 Can Eshell be used from Elisp?
+03:33.880 How does that interplay with literate devops?
+04:42.880 Do you have a strategy for getting around Eshell's lack of support for input redirection?
+07:35.040 Do you have a preferred method for getting argument completion for shell commands?
+09:14.320 Similarly, is it possible to get Eldoc-based completion for Elisp calls in Eshell?
+10:33.720 Integrating functions into Emacs core
+12:51.760 Are you the maintainer of Eshell now? No, just an interested bystander.
+18:13.880 Do you ever fall back to terminals/shells outside Emacs, and if so, in what circumstances?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="eshell-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.webm">Download --answers.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.opus">Download --answers.opus (8.4MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/eshell-nav.md b/2022/info/eshell-nav.md
new file mode 100644
index 00000000..0852d97c
--- /dev/null
+++ b/2022/info/eshell-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/detached">Getting detached from Emacs</a>
+Next by track: <a href="/2022/talks/workflows">Org workflows for developers</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/fanfare-after.md b/2022/info/fanfare-after.md
new file mode 100644
index 00000000..f393b689
--- /dev/null
+++ b/2022/info/fanfare-after.md
@@ -0,0 +1,273 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="fanfare-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hello, my name is John Cummings, and I'm here today""" start="00:00:00.000" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to play a Fanfare for the Common Emacs User.""" start="00:00:02.206" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""By &quot;common&quot;, I mean the types of Emacs usage""" start="00:00:04.852" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and comfort that are simpler, more mundane,""" start="00:00:07.266" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and yes, even imperfect,""" start="00:00:09.689" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that some may identify with more than others,""" start="00:00:11.075" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or more at certain times.""" start="00:00:13.037" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It's hard to use Emacs and not be aware of""" start="00:00:14.651" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""the impressive and interesting accomplishments""" start="00:00:16.914" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""of its community. And here at emacsconf""" start="00:00:18.703" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we also get pumped up about those things,""" start="00:00:20.756" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""amplified by the energy of the other attendees.""" start="00:00:22.426" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But this energy fades as we return focus""" start="00:00:25.567" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to our day-to-day work. And in these circumstances,""" start="00:00:27.730" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we may unfairly judge our own Emacs usage""" start="00:00:30.571" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""against the community highlights.""" start="00:00:32.993" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""So I want to identify and celebrate the ways""" start="00:00:34.997" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that we common Emacs users use it,""" start="00:00:37.712" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""the reasons why it's a good fit for those ways,""" start="00:00:39.932" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and some ways we could take advantage of that.""" start="00:00:42.290" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""What is Emacs to us common users? Well, we're consumers.""" start="00:00:45.430" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We use whatever was available - whatever our OS gave us,""" start="00:00:48.528" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or whatever we found when we searched the web.""" start="00:00:51.493" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We're not even necessarily aware""" start="00:00:53.990" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""of what the latest version is, or what changes it has.""" start="00:00:55.711" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may not ever think about upgrading.""" start="00:00:58.091" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We have what we have, and we use what we have.""" start="00:01:00.138" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But I think, with this simple act, many of us""" start="00:01:02.742" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""achieve a very significant Emacs milestone:""" start="00:01:05.149" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we've committed to having it in our toolkit""" start="00:01:07.997" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and our skillset. We'll probably install it""" start="00:01:10.278" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""on every system that we can, eventually.""" start="00:01:12.625" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We know it has a use for us today,""" start="00:01:14.804" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and that it will solve some problems""" start="00:01:16.827" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that we don't even know about yet.""" start="00:01:18.120" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It will not just be one tool; it will be many.""" start="00:01:19.588" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And we know that it will be more than just useful;""" start="00:01:22.215" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""it will also be challenging, puzzling, and frustrating.""" start="00:01:24.368" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But we still keep it""" start="00:01:27.345" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""as a permanent part of our toolkit,""" start="00:01:28.630" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and we should be proud of that.""" start="00:01:29.873" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And regardless of what exactly we've installed,""" start="00:01:31.800" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""it was a good choice.""" start="00:01:34.136" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It will almost certainly do what we need it to do.""" start="00:01:35.337" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Old versions are not inert dead-ends;""" start="00:01:37.556" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""they're still functional tools.""" start="00:01:39.766" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And that's a key aspect of Emacs - it's a tool""" start="00:01:41.134" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to get our work done. That sounds obvious,""" start="00:01:43.979" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but it's easy to get distracted by the great things""" start="00:01:46.398" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that it can accomplish, and think""" start="00:01:48.483" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that it requires the same accomplishments from us.""" start="00:01:49.985" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But it requires no advanced state of mind,""" start="00:01:52.571" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""no level of expertise to start using it,""" start="00:01:54.656" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or use it correctly.""" start="00:01:56.867" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It just requires that we have it, and use it.""" start="00:01:58.043" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And with a little effort, we can get results early on,""" start="00:02:00.754" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and those results are not just preparations""" start="00:02:03.665" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""for better things to come later;""" start="00:02:06.084" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""they have value for us today,""" start="00:02:07.586" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and we're already using it right.""" start="00:02:08.712" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And when we do need to tweak whatever we installed,""" start="00:02:12.049" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we might again be consumers, finding some snippets""" start="00:02:14.551" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""out on the web, pasting them in, and moving on.""" start="00:02:16.803" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We don't necessarily understand what we did,""" start="00:02:19.581" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but we got some value out of it. Over time,""" start="00:02:21.933" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we may participate more, take it day by day,""" start="00:02:24.102" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and one day we may find that our config""" start="00:02:26.114" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""has become a disorganized pile.""" start="00:02:28.357" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Maybe it's mixed haphazardly""" start="00:02:30.902" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""with some output from the &quot;customize&quot; feature,""" start="00:02:32.027" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and eventually we start to feel""" start="00:02:34.029" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""like it's a shameful mess. It's hard to manage;""" start="00:02:35.697" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we may think of it as append-only or read-only.""" start="00:02:37.991" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We can't deny there are problems here,""" start="00:02:40.960" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but it happened for a good reason. It was quick,""" start="00:02:42.829" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""easy, and effective for us""" start="00:02:45.582" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to enhance our experience this way, and then move on.""" start="00:02:47.250" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We were using Emacs as it was designed here.""" start="00:02:50.062" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It just wasn't sustainable indefinitely.""" start="00:02:52.172" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may continue doing things this way""" start="00:02:54.775" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""even though we realize it's not a good idea.""" start="00:02:56.627" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But I think there are some ways""" start="00:02:59.596" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to mitigate the downsides,""" start="00:03:00.472" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that let us embrace our tendencies,""" start="00:03:01.682" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and continue to benefit from them.""" start="00:03:03.150" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""If we allow and encourage ourselves""" start="00:03:05.444" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to capture our thoughts and circumstances""" start="00:03:06.971" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""along with the work that we do on our config,""" start="00:03:10.065" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and do so without judgment, or the responsibility""" start="00:03:11.700" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to &quot;do it right&quot;, we give ourselves the context""" start="00:03:14.386" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to understand and manage it later.""" start="00:03:17.047" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""This should be done however works for us,""" start="00:03:19.549" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""whether it's rambling inline comments,""" start="00:03:21.618" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""keeping a separate journal or notes,""" start="00:03:23.286" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or even a more advanced literate programming technique,""" start="00:03:25.247" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""if we want to make an investment like that.""" start="00:03:27.975" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Or putting our config into source control,""" start="00:03:30.485" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""even if it's nothing more than a simple,""" start="00:03:32.629" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""daily record of changes along with our contextual notes,""" start="00:03:34.214" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""will make things a lot easier for our future selves.""" start="00:03:37.050" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But regardless of how well, or sloppy, we manage it,""" start="00:03:41.221" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we should also realize that our messy config""" start="00:03:43.974" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""is a personal artifact with inherent value,""" start="00:03:46.184" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""even if it's amusement value, or sentimental value.""" start="00:03:48.129" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Emacs is not only a tool to get our work done,""" start="00:03:51.565" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""it can also be a very personalized experience.""" start="00:03:54.401" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And if so, then our Emacs config""" start="00:03:56.978" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""is our experience in written form.""" start="00:03:59.366" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""You can see it as a log of your journey through Emacs,""" start="00:04:02.110" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and the mark that you made on it along the way,""" start="00:04:04.303" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""mistakes and all.""" start="00:04:06.663" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may see our config as a record of failure,""" start="00:04:08.506" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""of things that we did wrong, the things that we repeated,""" start="00:04:10.676" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or never finished. But it's important to realize""" start="00:04:12.886" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that a record of failure is a record of persistence.""" start="00:04:15.672" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""In that sense, it's kind of like our genome:""" start="00:04:18.592" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""a set of unique, disorganized,""" start="00:04:20.761" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""somewhat accidental properties, that, on the whole,""" start="00:04:23.197" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""makes us fit to survive in our Emacs usage.""" start="00:04:26.308" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It's also interesting to think of it""" start="00:04:29.394" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""as an archaeological record. Where we can sometimes""" start="00:04:31.021" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""get some insight into our &quot;ancient times&quot;.""" start="00:04:33.482" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Just being able to see what we were doing years ago""" start="00:04:35.942" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""is interesting -- to see how things changed,""" start="00:04:38.570" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and hopefully grew over time. And sometimes""" start="00:04:40.906" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we find some buried treasures that we forgot were there.""" start="00:04:43.158" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And of course it's interesting to realize""" start="00:04:45.845" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that when we start Emacs, this pile of config""" start="00:04:48.172" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""also executes in roughly the same order""" start="00:04:50.874" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that we created it in. Our journey through Emacs""" start="00:04:52.959" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""happens again and again every time we start it up.""" start="00:04:56.438" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And it's ready for us to keep working on it.""" start="00:04:59.482" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And when it comes to packages,""" start="00:05:04.095" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we may not make extensive use of them, if any at all.""" start="00:05:05.305" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We probably have different reasons for this.""" start="00:05:09.050" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may feel like we need to reach""" start="00:05:10.602" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""some level of mastery before we start using them.""" start="00:05:12.437" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may not have the mental room to think about packages,""" start="00:05:14.815" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or may not want to take on the administrative burden""" start="00:05:17.943" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""required to keep track of which packages we have,""" start="00:05:20.362" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""the dependencies and versions, and their compatibility.""" start="00:05:22.989" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Some of us may just be uncomfortable""" start="00:05:25.834" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""letting new third-party code run in our environments.""" start="00:05:27.694" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""It could also just be the case""" start="00:05:30.664" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that our needs haven't driven us to need a package yet.""" start="00:05:31.832" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We're already doing what we need,""" start="00:05:35.377" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and doing it efficiently enough.""" start="00:05:36.871" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And here we find more alignment""" start="00:05:39.089" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""between Emacs the tool, and our common mindset:""" start="00:05:40.215" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""They work well when they stay needs-driven.""" start="00:05:42.592" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We're not obligated to use""" start="00:05:44.977" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""as much of Emacs' functionality as we can,""" start="00:05:46.646" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or every package that we're aware of""" start="00:05:48.949" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""if we don't have a need to.""" start="00:05:51.159" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And in fact, that's a great way to stay overwhelmed.""" start="00:05:52.510" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But if we stay aware of our needs, and then find""" start="00:05:54.971" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that there is a package that might address them,""" start="00:05:57.700" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""then we can deal with it. And a need to explore,""" start="00:05:59.902" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and a need to be curious, is a valid need.""" start="00:06:02.655" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And if we do need extra confidence for that exploration,""" start="00:06:05.823" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""then the things we talked about before,""" start="00:06:09.327" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""like keeping good notes of our experiences and needs,""" start="00:06:10.912" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or version controlling our config,""" start="00:06:13.633" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""will help us keep that connection to our needs,""" start="00:06:15.541" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that gives us the freedom to experiment""" start="00:06:18.586" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""in the wide world of packages.""" start="00:06:20.922" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And if we really do just need what's built in to Emacs,""" start="00:06:23.008" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""the vanilla out-of-the-box experience,""" start="00:06:27.262" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""then we can also be proud that we're making use""" start="00:06:29.514" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""of all the work that went into that experience,""" start="00:06:32.183" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""because a lot did.""" start="00:06:33.560" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And when we report any problems that we find,""" start="00:06:35.021" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we're also working to keep that experience""" start="00:06:37.256" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""smooth for future users.""" start="00:06:39.190" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Of course, some of us may find this intimidating,""" start="00:06:41.192" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and if so, feel free to reach out to me,""" start="00:06:43.987" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and probably anyone in the community,""" start="00:06:46.531" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that can help you navigate that process.""" start="00:06:48.767" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""So how do we use our Emacs installation?""" start="00:06:56.249" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We often use it very simply: we get simple results""" start="00:06:59.461" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""in simple ways. Often we do things the same simple way""" start="00:07:01.838" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""for a very long time, and this is of course great,""" start="00:07:06.068" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""since we're getting done what we need to get done.""" start="00:07:08.720" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""There's no result or method too simple for Emacs.""" start="00:07:10.513" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And we're not oblivious to the alternative.""" start="00:07:14.392" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Many of us are at least aware that there are ways""" start="00:07:16.853" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we could iterate on what we do,""" start="00:07:19.356" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or some polish that we could apply,""" start="00:07:20.649" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and we may even quite enjoy""" start="00:07:22.734" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""reading about more advanced Emacs possibilities,""" start="00:07:24.569" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and thinking about how they could apply""" start="00:07:27.113" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to our own workflow, but at the end of the day,""" start="00:07:28.215" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we still keep our own usage the same, and basic.""" start="00:07:30.951" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And this is another fundamental aspect of using Emacs.""" start="00:07:33.703" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""You can work simply and successfully,""" start="00:07:36.998" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but you'll always be conscious of the possibility""" start="00:07:38.959" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""for far more complexity. And many of us""" start="00:07:40.502" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""do try to iterate on our ways, and sometimes succeed,""" start="00:07:43.213" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but often we run into trouble and we stop or defer.""" start="00:07:46.424" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""A lot of times we're intimidated by the scope of things -""" start="00:07:49.177" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we're not sure how to make measurable progress.""" start="00:07:51.304" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We may find that the first ways we learned""" start="00:07:53.848" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""are so ingrained in us, that learning even a second way""" start="00:07:56.101" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""is many times harder.""" start="00:07:59.312" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And sometimes we do make sudden progress""" start="00:08:01.147" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""after years of sameness,""" start="00:08:03.191" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and wonder why we waited so long.""" start="00:08:04.275" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And these are universal pains""" start="00:08:06.260" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that everyone has to feel who wants to improve.""" start="00:08:07.737" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But this is again where we can benefit""" start="00:08:11.324" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""from letting our needs drive us.""" start="00:08:13.451" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Sometimes they'll tell us that it's OK""" start="00:08:14.661" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""keeping things the way they are, and sometimes""" start="00:08:16.538" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""they'll tell us that it's good to keep pushing,""" start="00:08:18.806" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""because there's a reason for it,""" start="00:08:20.491" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and we'll be glad that we did.""" start="00:08:21.767" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And what are the ways that we do learn,""" start="00:08:25.077" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and grow, and create within Emacs? One constant""" start="00:08:27.507" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""is that we forget a lot. We learn something""" start="00:08:30.635" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and then remember that we already learned""" start="00:08:33.596" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and forgot it once before. Sometimes we just hope""" start="00:08:35.682" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to learn more than we forget.""" start="00:08:38.309" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And staying driven by our needs can also help here,""" start="00:08:39.769" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""because it's easier to learn something""" start="00:08:41.772" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""when we have a reason to, and an application for it.""" start="00:08:43.499" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""In Emacs, it can be tempting to do this backwards,""" start="00:08:46.317" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and want to learn all there is about Emacs first,""" start="00:08:49.071" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and then apply it. But again that's a surefire way""" start="00:08:51.782" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to stay overwhelmed.""" start="00:08:53.992" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And when we code and build things, we tend to create many small, quick things,""" start="00:08:55.935" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""but never really integrate them deeply""" start="00:08:59.640" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""into our environment or workflow.""" start="00:09:01.600" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""We leave things half-finished once we get bored,""" start="00:09:03.661" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or find ourselves in over our head.""" start="00:09:05.462" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And this is natural, because we're curious and creative,""" start="00:09:07.088" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and Emacs makes it relatively easy, and actually fun,""" start="00:09:09.883" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to experiment and get these quick results.""" start="00:09:12.677" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But it's less clear how to see them through,""" start="00:09:14.845" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and inherently less fun to do the follow-up gruntwork.""" start="00:09:17.065" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""But if we embrace our ways here,""" start="00:09:20.310" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and structure our workflow to support them,""" start="00:09:21.970" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we might find ourselves more satisfied.""" start="00:09:23.897" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""So let's give ourselves permission, and a logical place""" start="00:09:26.215" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""to put all our fun little quick experiments,""" start="00:09:28.926" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""without having to worry about integrating""" start="00:09:31.571" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""or polishing them, unless we find a need to later.""" start="00:09:33.423" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Let's use source control wisely to give ourselves""" start="00:09:35.700" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""a place to experiment, and a place for stability.""" start="00:09:38.505" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""Let's stay needs-driven so that we know""" start="00:09:41.447" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""what we really do need to follow up on,""" start="00:09:42.968" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and what's OK to drop. And let's remember""" start="00:09:46.186" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""that there is someone who will always appreciate""" start="00:09:48.963" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""any notes about our thought process we can take,""" start="00:09:50.965" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""no matter how rough or rambling they are:""" start="00:09:53.635" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""our future selves.""" start="00:09:55.845" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And so I hope that some people can identify with""" start="00:09:58.788" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""at least some of what I've shared today.""" start="00:10:01.376" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""And I hope that we realize that,""" start="00:10:02.927" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""no matter how we see ourselves as Emacs users,""" start="00:10:05.021" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""and no matter what we see other people building,""" start="00:10:06.964" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""we're proud of the fact that we have built""" start="00:10:09.233" video="mainVideo-fanfare" id="subtitle"]]
+[[!template text="""an experience that fits us. Thank you to everyone.""" start="00:10:11.569" video="mainVideo-fanfare" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20fanfare%3A%20Fanfare%20for%20the%20Common%20Emacs%20User)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/fanfare-before.md b/2022/info/fanfare-before.md
new file mode 100644
index 00000000..de244b57
--- /dev/null
+++ b/2022/info/fanfare-before.md
@@ -0,0 +1,57 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="fanfare">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect stroke-width="3" x="698" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 11-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-fanfare>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T21:25:00Z" end="2022-12-04T21:35:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~4:25 PM - 4:35 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~3:25 PM - 3:35 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~2:25 PM - 2:35 PM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~1:25 PM - 1:35 PM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~9:25 PM - 9:35 PM UTC <br />Sunday, Dec 4 2022, ~10:25 PM - 10:35 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~11:25 PM - 11:35 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~2:55 AM - 3:05 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~5:25 AM - 5:35 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~6:25 AM - 6:35 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="fanfare-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.webm">Download --main.webm (25MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.opus">Download --main.opus (4.4MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/3ikPgKEnX1jVUqnxZrMuHs">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="fanfare-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="fanfare-qanda" data="""
+03:26.480 How would you suggest Emacs developers, including package developers, interface with non-developer users and get their insights to help in shaping future Emacs functionality?
+04:38.480 Is the Emacs community getting smaller?
+08:22.720 Do you think using one of the starter packages affects the learning process you mentioned?
+10:41.040 Barrier to getting regular users on board
+15:26.280 Changing your habits
+19:28.240 Tip of the day, Emacs help discovery
+21:47.020 Menus
+32:18.040 In terms of your Emacs, how far down do you go? (Lisp functions, primitives, C)
+43:52.400 Have we thought about how to use touchscreens?
+47:39.560 Have you ever seen VisiData?
+53:48.880 Low-code environments
+59:32.200 Microsoft
+01:04:53.840 Hyperbole and Org
+01:12:07.720 EmacsConf behind the scenes
+01:21:00.680 Theming
+01:22:42.080 HyControl
+01:26:25.880 Emacspeak
+01:31:21.040 Recording
+01:38:22.520 Losing and rediscovering knowledge
+01:44:11.480 Emacs as a shared community knowledge base
+01:53:46.560 Philosophy
+02:03:49.800 Narrowing
+02:05:40.800 First time on a new system
+02:07:43.800 Bootstrapping
+02:10:50.760 Richard Stallman
+02:14:24.880 Other developers
+02:15:54.880 Emacs and Org development
+02:21:41.000 Closures, Lisp
+02:42:12.480 Clog
+02:54:23.960 Domain-specific languages, collaboration
+03:02:39.280 Condensing things into a 10-minute talk
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="fanfare-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.webm">Download --answers.webm (306MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.opus">Download --answers.opus (62MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/fanfare-nav.md b/2022/info/fanfare-nav.md
new file mode 100644
index 00000000..6617b751
--- /dev/null
+++ b/2022/info/fanfare-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/devel">Emacs development updates</a>
+Next by track: <a href="/2022/talks/python">Short hyperlinks to Python docs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/grail-after.md b/2022/info/grail-after.md
new file mode 100644
index 00000000..98d5a049
--- /dev/null
+++ b/2022/info/grail-after.md
@@ -0,0 +1,645 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="grail-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Thank you for joining me today. I'm Sameer Pradhan""" start="00:00:00.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""from the Linguistic Data Consortium""" start="00:00:05.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""at the University of Pennsylvania""" start="00:00:07.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and founder of cemantix.org .""" start="00:00:10.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Today we'll be addressing research""" start="00:00:14.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in computational linguistics,""" start="00:00:16.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""also known as natural language processing""" start="00:00:18.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a sub area of artificial intelligence""" start="00:00:22.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with a focus on modeling and predicting""" start="00:00:24.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""complex linguistic structures from various signals.""" start="00:00:27.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The work we present is limited to text and speech signals.""" start="00:00:31.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but it can be extended to other signals.""" start="00:00:35.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We propose an architecture,""" start="00:00:38.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and we call it GRAIL, which allows""" start="00:00:40.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the representation and aggregation""" start="00:00:42.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of such rich structures in a systematic fashion.""" start="00:00:44.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I'll demonstrate a proof of concept""" start="00:00:50.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""for representing and manipulating data and annotations""" start="00:00:52.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""for the specific purpose of building""" start="00:00:56.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""machine learning models that simulate understanding.""" start="00:00:58.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""These technologies have the potential for impact""" start="00:01:02.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in almost every conceivable field""" start="00:01:05.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that generates and uses data.""" start="00:01:09.120" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""We process human language""" start="00:01:13.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""when our brains receive and assimilate""" start="00:01:15.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""various signals which are then manipulated""" start="00:01:16.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and interpreted within a syntactic structure.""" start="00:01:20.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""it's a complex process that I have simplified here""" start="00:01:23.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""for the purpose of comparison to machine learning.""" start="00:01:27.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Recent machine learning models tend to require""" start="00:01:30.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a large amount of raw, naturally occurring data""" start="00:01:33.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and a varying amount of manually enriched data,""" start="00:01:37.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""commonly known as &quot;annotations&quot;.""" start="00:01:40.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Owing to the complex and numerous nature""" start="00:01:43.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of linguistic phenomena, we have most often used""" start="00:01:45.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a divide and conquer approach.""" start="00:01:49.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The strength of this approach is that it allows us""" start="00:01:53.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to focus on a single, or perhaps a few related""" start="00:01:55.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""linguistic phenomena.""" start="00:01:58.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The weaknesses are the universe of these phenomena""" start="00:02:00.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""keep expanding, as language itself""" start="00:02:03.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""evolves and changes over time,""" start="00:02:07.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and second, this approach requires an additional task""" start="00:02:09.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of aggregating the interpretations,""" start="00:02:13.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""creating more opportunities for computer error.""" start="00:02:14.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Our challenge, then, is to find the sweet spot""" start="00:02:18.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that allows us to encode complex information""" start="00:02:21.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""without the use of manual annotation,""" start="00:02:25.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or without the additional task of aggregation by computers.""" start="00:02:27.720" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""So what do I mean by &quot;annotation&quot;?""" start="00:02:34.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""In this talk the word annotation refers to""" start="00:02:37.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the manual assignment of certain attributes""" start="00:02:39.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to portions of a signal which is necessary""" start="00:02:43.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to perform the end task.""" start="00:02:48.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""For example, in order for the algorithm""" start="00:02:51.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to accurately interpret a pronoun,""" start="00:02:54.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""it needs to know that pronoun,""" start="00:02:57.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""what that pronoun refers back to.""" start="00:03:00.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We may find this task trivial, however,""" start="00:03:03.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""current algorithms repeatedly fail in this task.""" start="00:03:06.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So the complexities of understanding""" start="00:03:10.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in computational linguistics require annotation.""" start="00:03:13.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The world annotation itself is a useful example,""" start="00:03:16.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because it also reminds us""" start="00:03:20.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that words have multiple meetings""" start="00:03:22.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as annotation itself does—""" start="00:03:25.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""just as I needed to define it in this context,""" start="00:03:27.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""so that my message won't be misinterpreted.""" start="00:03:30.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So, too, must annotators do this for algorithms""" start="00:03:33.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""through the manual intervention.""" start="00:03:39.040" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Learning from raw data""" start="00:03:43.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""(commonly known as unsupervised learning)""" start="00:03:44.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""poses limitations for machine learning.""" start="00:03:47.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""As I described, modeling complex phenomena""" start="00:03:50.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""need manual annotations.""" start="00:03:53.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The learning algorithm uses these annotations""" start="00:03:55.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as examples to build statistical models.""" start="00:03:58.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is called supervised learning.""" start="00:04:01.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Without going into too much detail,""" start="00:04:04.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I'll simply note that the recent popularity""" start="00:04:06.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the concept of deep learning""" start="00:04:10.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is that evolutionary step""" start="00:04:12.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where we have learned to train models""" start="00:04:14.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""using trillions of parameters in ways that they can""" start="00:04:17.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""learn richer hierarchical structures""" start="00:04:20.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""from very large amounts of annotate, unannotated data.""" start="00:04:25.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""These models can then be fine-tuned,""" start="00:04:29.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""using varying amounts of annotated examples""" start="00:04:32.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""depending on the complexity of the task""" start="00:04:35.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to generate better predictions.""" start="00:04:37.640" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""As you might imagine, manually annotating""" start="00:04:39.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""complex, linguistic phenomena""" start="00:04:44.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can be very specific, labor-intensive task.""" start="00:04:47.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""For example, imagine if we were""" start="00:04:51.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to go back through this presentation""" start="00:04:54.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and connect all the pronouns""" start="00:04:56.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with the nouns to which they refer.""" start="00:04:58.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Even for a short 18 min presentation,""" start="00:04:59.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this would require hundreds of annotations.""" start="00:05:03.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The models we build are only as good""" start="00:05:05.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as the quality of the annotations we make.""" start="00:05:08.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We need guidelines""" start="00:05:11.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that ensure that the annotations are done""" start="00:05:12.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""by at least two humans who have substantial agreement""" start="00:05:15.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with each other in their interpretations.""" start="00:05:19.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We know that if we try to trade a model using annotations""" start="00:05:22.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that are very subjective, or have more noise,""" start="00:05:25.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we will receive poor predictions.""" start="00:05:28.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Additionally, there is the concern of introducing""" start="00:05:30.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""various unexpected biases into one's models.""" start="00:05:33.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So annotation is really both an art and a science.""" start="00:05:37.080" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""In the remaining time,""" start="00:05:44.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we will turn to two fundamental questions.""" start="00:05:47.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""First, how can we develop a unified representation""" start="00:05:50.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of data and annotations""" start="00:05:54.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that encompasses arbitrary levels of linguistic information?""" start="00:05:55.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""There is a long history of attempting to answer""" start="00:05:59.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this first question.""" start="00:06:03.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This history is documented in our recent article,""" start="00:06:04.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you can refer to that article.""" start="00:06:08.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It will be on the website.""" start="00:06:11.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It is as if we, as a community,""" start="00:06:16.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""have been searching for our own Holy Grail.""" start="00:06:19.000" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""The second question we will pose is""" start="00:06:22.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""what role might Emacs, along with Org mode,""" start="00:06:26.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""play in this process?""" start="00:06:30.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Well, the solution itself may not be tied to Emacs.""" start="00:06:31.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Emacs has built in capabilities""" start="00:06:35.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that could be useful for evaluating potential solutions.""" start="00:06:38.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It's also one of the most extensively documented""" start="00:06:42.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""pieces of software and the most customizable""" start="00:06:45.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""piece of software that I have ever come across,""" start="00:06:48.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and many would agree with that.""" start="00:06:51.600" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""In order to approach this second question,""" start="00:06:55.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we turn to the complex structure of language itself.""" start="00:07:00.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""At first glance, language appears to us""" start="00:07:03.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as a series of words.""" start="00:07:07.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Words form sentences, sentences form paragraphs,""" start="00:07:09.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and paragraphs form completed text.""" start="00:07:13.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""If this was a sufficient description""" start="00:07:16.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the complexity of language,""" start="00:07:19.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""all of us would be able to speak and read""" start="00:07:21.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""at least ten different languages.""" start="00:07:24.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We know it is much more complex than this.""" start="00:07:26.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""There is a rich, underlying recursive tree structure--""" start="00:07:29.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in fact, many possible tree structures""" start="00:07:33.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""which makes a particular sequence meaningful""" start="00:07:36.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and many others meaningless.""" start="00:07:39.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One of the better understood tree structures""" start="00:07:42.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is the syntactic structure.""" start="00:07:45.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""While natural language""" start="00:07:47.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""has rich ambiguities and complexities,""" start="00:07:49.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""programming languages are designed to be parsed""" start="00:07:51.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and interpreted deterministically.""" start="00:07:55.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Emacs has been used for programming very effectively.""" start="00:07:57.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So there is a potential for using Emacs""" start="00:08:02.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as a tool for annotation.""" start="00:08:05.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This would significantly improve our current set of tools.""" start="00:08:06.560" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""It is important to note that most of the annotation tools""" start="00:08:10.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that have been developed over the past few decades""" start="00:08:16.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""have relied on graphical interfaces,""" start="00:08:19.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""even those used for enriching textual information.""" start="00:08:22.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Most of the tools in current use""" start="00:08:26.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""are designed for a end user to add very specific,""" start="00:08:30.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""very restricted information.""" start="00:08:36.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We have not really made use of the potential""" start="00:08:38.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that an editor or a rich editing environment like Emacs""" start="00:08:42.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can add to the mix.""" start="00:08:45.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Emacs has long enabled the editing of, the manipulation of""" start="00:08:47.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""complex embedded tree structures abundant in source code.""" start="00:08:52.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So it's not difficult to imagine that it would have""" start="00:08:56.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""many capabilities that we we need""" start="00:08:58.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to represent actual language.""" start="00:09:00.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""In fact, it already does that with features""" start="00:09:02.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that allow us to quickly navigate""" start="00:09:04.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""through sentences and paragraphs,""" start="00:09:06.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and we don't need a few key strokes.""" start="00:09:07.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Or to add various text properties to text spans""" start="00:09:09.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to create overlays, to name but a few.""" start="00:09:13.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Emacs figured out this way to handle Unicode,""" start="00:09:17.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""so you don't even have to worry about the complexity""" start="00:09:22.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of managing multiple languages.""" start="00:09:26.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It's built into Emacs. In fact, this is not the first time""" start="00:09:29.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Emacs has been used for linguistic analysis.""" start="00:09:34.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One of the breakthrough moments in language,""" start="00:09:37.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""natural language processing was the creation""" start="00:09:41.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of manually created syntactic trees""" start="00:09:44.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""for a 1 million word collection""" start="00:09:48.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of Wall Street Journal articles.""" start="00:09:50.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This was else around 1992""" start="00:09:52.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""before Java or graphical interfaces were common.""" start="00:09:54.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The tool that was used to create that corpus was Emacs.""" start="00:09:59.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It was created at UPenn, and is famously known as""" start="00:10:03.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the Penn Treebank. '92 was about when""" start="00:10:08.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the Linguistic Data Consortium was also established,""" start="00:10:12.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and it's been about 30 years""" start="00:10:16.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that it has been creating various""" start="00:10:18.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""language-related resources.""" start="00:10:20.720" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Org mode--in particular, the outlining mode,""" start="00:10:22.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or rather the enhanced form of outlining mode--""" start="00:10:28.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""allows us to create rich outlines,""" start="00:10:32.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""attaching properties to nodes,""" start="00:10:35.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and provides commands for easily customizing""" start="00:10:37.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""sorting of various pieces of information""" start="00:10:41.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as per one's requirement.""" start="00:10:43.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This can also be a very useful tool.""" start="00:10:45.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This enhanced form of outline-mode adds more power to Emacs.""" start="00:10:50.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It provides commands for easily customizing""" start="00:10:59.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and filtering information,""" start="00:11:03.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""while at the same time hiding unnecessary context.""" start="00:11:05.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It also allows structural editing.""" start="00:11:09.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This can be a very useful tool to enrich corpora""" start="00:11:11.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where we are focusing on limited amount of phenomena.""" start="00:11:16.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The two together allow us to create""" start="00:11:20.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a rich representation""" start="00:11:24.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that can simultaneously capture multiple possible sequences,""" start="00:11:27.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""capture details necessary to recreate the original source,""" start="00:11:33.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""allow the creation of hierarchical representation,""" start="00:11:38.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""provide structural editing capabilities""" start="00:11:42.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that can take advantage of the concept of inheritance""" start="00:11:44.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""within the tree structure.""" start="00:11:47.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Together they allow local manipulations of structures,""" start="00:11:49.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""thereby minimizing data coupling.""" start="00:11:54.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The concept of tags in Org mode""" start="00:11:56.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""complement the hierarchy part.""" start="00:11:59.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Hierarchies can be very rigid,""" start="00:12:01.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but to tags on hierarchies,""" start="00:12:03.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we can have a multifaceted representations.""" start="00:12:06.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""As a matter of fact, Org mode has the ability for the tags""" start="00:12:08.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to have their own hierarchical structure""" start="00:12:12.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""which further enhances the representational power.""" start="00:12:15.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""All of this can be done as a sequence""" start="00:12:18.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of mostly functional data transformations,""" start="00:12:22.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because most of the capabilities""" start="00:12:25.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can be configured and customized.""" start="00:12:27.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It is not necessary to do everything at once.""" start="00:12:29.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Instead, it allows us to incrementally increase""" start="00:12:32.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the complexity of the representation.""" start="00:12:36.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Finally, all of this can be done""" start="00:12:37.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in plain-text representation""" start="00:12:39.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""which comes with its own advantages.""" start="00:12:42.360" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Now let's take a simple example.""" start="00:12:45.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is a a short video that I'll play.""" start="00:12:50.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The sentence is &quot;I saw the moon with a telescope,&quot;""" start="00:12:56.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and let's just make a copy of the sentence.""" start="00:12:59.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""What we can do now is to see:""" start="00:13:04.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""what does this sentence comprise?""" start="00:13:09.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It has a noun phrase &quot;I,&quot;""" start="00:13:11.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""followed by a word &quot;saw.&quot;""" start="00:13:13.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Then &quot;the moon&quot; is another noun phrase,""" start="00:13:17.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and &quot;with the telescope&quot; is a prepositional phrase.""" start="00:13:21.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Now one thing that you might remember,""" start="00:13:24.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""from grammar school or syntax is that""" start="00:13:30.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""there is a syntactic structure.""" start="00:13:36.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And if you in this particular case--""" start="00:13:41.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because we know that the moon is not typically""" start="00:13:44.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""something that can hold the telescope,""" start="00:13:47.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that the seeing must be done by me or &quot;I,&quot;""" start="00:13:51.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the telescope must be in my hand,""" start="00:13:56.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or &quot;I&quot; am viewing the moon with a telescope.""" start="00:14:01.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""However, it is possible that in a different context""" start="00:14:04.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the moon could be referring to an animated character""" start="00:14:13.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a animated series, and could actually hold the telescope.""" start="00:14:17.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And this is one of the most--""" start="00:14:22.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the oldest and one of the most--""" start="00:14:23.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and in that case the situation might be""" start="00:14:24.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that I'm actually seeing the moon holding a telescope...""" start="00:14:26.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I mean. The moon is holding the telescope,""" start="00:14:30.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and I'm just seeing the moon holding the telescope.""" start="00:14:36.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Complex linguistic ambiguity or linguistic""" start="00:14:40.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""phenomena that requires world knowledge,""" start="00:14:48.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and it's called the PP attachment problem""" start="00:14:53.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where the propositional phrase attachment""" start="00:14:55.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can be ambiguous, and various different contextual cues""" start="00:14:59.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""have to be used to resolve the ambiguity.""" start="00:15:04.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So in this case, as you saw,""" start="00:15:06.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""both the readings are technically true,""" start="00:15:09.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""depending on different contexts.""" start="00:15:11.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So one thing we could do is just""" start="00:15:13.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to cut the tree and duplicate it,""" start="00:15:16.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and then let's create another node""" start="00:15:19.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and call it an &quot;OR&quot; node.""" start="00:15:21.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And because we are saying,""" start="00:15:24.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this is one of the two interpretations.""" start="00:15:26.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Now let's call one interpretation &quot;a&quot;,""" start="00:15:28.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and that interpretation essentially""" start="00:15:32.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is this child of that node &quot;a&quot;""" start="00:15:36.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and that says that the moon""" start="00:15:39.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is holding the telescope.""" start="00:15:41.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Now we can create another representation &quot;b&quot;""" start="00:15:44.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where we capture the other interpretation,""" start="00:15:46.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where this, the act, the moon or--I am actually""" start="00:15:53.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""holding the telescope,""" start="00:15:59.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and watching the moon using it.""" start="00:16:00.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So now we have two separate interpretations""" start="00:16:06.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in the same structure,""" start="00:16:09.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and all we do--we're able to do is with this,""" start="00:16:11.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with very quick key strokes now...""" start="00:16:15.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""While we are at it, let's add another interesting thing,""" start="00:16:18.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this node that represents &quot;I&quot;:""" start="00:16:22.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""&quot;He.&quot; It can be &quot;She&quot;.""" start="00:16:25.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""It can be &quot;the children,&quot; or it can be &quot;The people&quot;.""" start="00:16:28.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Basically, any entity that has the capability to &quot;see&quot;""" start="00:16:35.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can be substituted in this particular node.""" start="00:16:45.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Let's see what we have here now.""" start="00:16:53.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We just are getting sort of a zoom view""" start="00:16:57.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the entire structure, what we created,""" start="00:17:01.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and essentially you can see that""" start="00:17:04.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""by just, you know, using a few keystrokes,""" start="00:17:08.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we were able to capture two different interpretations""" start="00:17:11.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of a a simple sentence,""" start="00:17:17.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and they are also able to add""" start="00:17:20.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""these alternate pieces of information""" start="00:17:23.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that could help machine learning algorithms""" start="00:17:27.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""generalize better.""" start="00:17:30.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""All right.""" start="00:17:32.440" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Now, let's look at the next thing. So in a sense,""" start="00:17:36.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we can use this power of functional data structures""" start="00:17:40.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to represent various potentially conflicting""" start="00:17:46.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and structural readings of that piece of text.""" start="00:17:50.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""In addition to that, we can also create more texts,""" start="00:17:55.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""each with different structure,""" start="00:17:58.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and have them all in the same place.""" start="00:17:59.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This allows us to address the interpretation""" start="00:18:01.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of a static sentence that might be occurring in the world,""" start="00:18:04.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""while simultaneously inserting information""" start="00:18:06.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that would add more value to it.""" start="00:18:09.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This makes the enrichment process also very efficient.""" start="00:18:11.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Additionally, we can envision""" start="00:18:15.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a power user of the future, or present,""" start="00:18:19.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""who can not only annotate a span,""" start="00:18:24.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but also edit the information in situ""" start="00:18:27.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a way that would help machine algorithms""" start="00:18:31.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""generalize better by making more efficient use""" start="00:18:34.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the annotations.""" start="00:18:36.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So together, Emacs and Org mode can speed up""" start="00:18:37.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the enrichment of the signals""" start="00:18:41.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a way that allows us""" start="00:18:42.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to focus on certain aspects and ignore others.""" start="00:18:44.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Extremely complex landscape of rich structures""" start="00:18:47.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""can be captured consistently,""" start="00:18:50.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a fashion that allows computers""" start="00:18:53.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to understand language.""" start="00:18:55.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We can then build tools to enhance the tasks""" start="00:18:56.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that we do in our everyday life.""" start="00:19:00.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""YAMR is acronym, or the file's type or specification""" start="00:19:03.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that we are creating to capture this new""" start="00:19:10.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""rich representation.""" start="00:19:15.240" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""We'll now look at an example of spontaneous speech""" start="00:19:17.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that occurs in spoken conversations.""" start="00:19:21.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Conversations frequently contain errors in speech:""" start="00:19:24.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""interruptions, disfluencies,""" start="00:19:28.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""verbal sounds such as cough or laugh,""" start="00:19:30.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and other noises.""" start="00:19:33.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""In this sense, spontaneous speech is similar""" start="00:19:35.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to a functional data stream.""" start="00:19:38.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We cannot take back words that come out of our mouth,""" start="00:19:39.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but we tend to make mistakes, and we correct ourselves""" start="00:19:42.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""as soon as we realize that we have made--""" start="00:19:47.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we have misspoken.""" start="00:19:49.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This process manifests through a combination""" start="00:19:50.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of a handful of mechanisms, including immediate correction""" start="00:19:53.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""after an error, and we do this unconsciously.""" start="00:19:56.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Computers, on the other hand,""" start="00:20:00.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""must be taught to understand these cases.""" start="00:20:02.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""What we see here is a example document or outline,""" start="00:20:06.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or part of a document that illustrates""" start="00:20:12.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""various different aspects of the representation.""" start="00:20:18.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We don't have a lot of time to go through""" start="00:20:22.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""many of the details.""" start="00:20:25.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I would highly encourage you to play a...""" start="00:20:28.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I'm planning on making some videos, or ascii cinemas,""" start="00:20:31.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that I'll be posting, and you can,""" start="00:20:39.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""if you're interested, you can go through those.""" start="00:20:42.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The idea here is to try to do""" start="00:20:46.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a slightly more complex use case.""" start="00:20:50.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But again, given the time constraint""" start="00:20:54.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the amount of information""" start="00:20:57.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that needs to fit in the screen,""" start="00:21:00.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this may not be very informative,""" start="00:21:01.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but at least it will give you some idea""" start="00:21:05.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of what can be possible.""" start="00:21:08.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And in this particular case, what you're seeing is that""" start="00:21:10.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""there is a sentence which is &quot;What I'm I'm tr- telling now.&quot;""" start="00:21:13.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Essentially, there is a repetition of the word &quot;I'm&quot;,""" start="00:21:18.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and then there is a partial word""" start="00:21:21.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that somebody tried to say &quot;telling&quot;,""" start="00:21:23.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but started saying &quot;tr-&quot;, and then corrected themselves""" start="00:21:25.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and said, &quot;telling now.&quot;""" start="00:21:29.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So in this case, you see, we can capture words""" start="00:21:30.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or a sequence of words, or a sequence of tokens.""" start="00:21:39.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One thing to... An interesting thing to note is that in NLP,""" start="00:21:44.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""sometimes we have to break typically""" start="00:21:52.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""words that don't have spaces into two separate words,""" start="00:21:55.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""especially contractions like &quot;I'm&quot;,""" start="00:22:01.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""so the syntactic parser needs needs two separate nodes.""" start="00:22:04.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But anyway, so I'll... You can see that here.""" start="00:22:08.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The other... This view. What this view shows is that""" start="00:22:11.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with each of the nodes in the sentence""" start="00:22:15.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or in the representation,""" start="00:22:19.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you can have a lot of different properties""" start="00:22:23.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that you can attach to them,""" start="00:22:26.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and these properties are typically hidden,""" start="00:22:27.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""like you saw in the earlier slide.""" start="00:22:30.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But you can make use of all these properties""" start="00:22:32.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to do various kind of searches and filtering.""" start="00:22:35.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And on the right hand side here--""" start="00:22:39.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this is actually not a legitimate syntax--""" start="00:22:43.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but on the right are descriptions""" start="00:22:48.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of what each of these represent.""" start="00:22:51.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""All the information is also available in the article.""" start="00:22:53.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""You can see there... It shows how much rich context""" start="00:22:57.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you can capture.""" start="00:23:04.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is just a closer snapshot""" start="00:23:05.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the properties on the node,""" start="00:23:08.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you can see we can have things like,""" start="00:23:10.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""whether the word is a token or not,""" start="00:23:13.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or that it's incomplete, whether some words""" start="00:23:14.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""might want to be filtered out for parsing,""" start="00:23:17.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and we can say this: PARSE_IGNORE,""" start="00:23:19.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or some words or restart markers...""" start="00:23:23.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We can mark, add a RESTART_MARKER, or sometimes,""" start="00:23:25.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""some of these might have durations. Things like that.""" start="00:23:29.240" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""The other fascinating thing of this representation""" start="00:23:32.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is that you can edit properties in the column view.""" start="00:23:38.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And suddenly, you have this tabular data structure""" start="00:23:42.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""combined with the hierarchical data structure.""" start="00:23:45.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And as you can--you may not be able to see it here,""" start="00:23:48.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but what has also happened here is that""" start="00:23:53.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""some of the tags have been inherited""" start="00:23:56.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""from the earlier nodes.""" start="00:24:01.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And so you get a much fuller picture of things.""" start="00:24:02.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Essentially you, can filter out things""" start="00:24:07.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that you want to process,""" start="00:24:13.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""process them, and then reintegrate it into the whole.""" start="00:24:15.320" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""So, in conclusion, today we have proposed and demonstrated""" start="00:24:20.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the use of an architecture (GRAIL),""" start="00:24:25.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""which allows the representation, manipulation,""" start="00:24:27.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and aggregation of rich linguistic structures""" start="00:24:31.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a systematic fashion.""" start="00:24:34.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We have shown how GRAIL advances the tools""" start="00:24:36.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""available for building machine learning models""" start="00:24:41.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that simulate understanding.""" start="00:24:44.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Thank you very much for your time and attention today.""" start="00:24:46.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""My contact information is on this slide.""" start="00:24:51.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""If you are interested in an additional example""" start="00:24:54.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that demonstrates the representation""" start="00:25:02.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of speech and written text together,""" start="00:25:05.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""please continue watching.""" start="00:25:08.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Otherwise, you can stop here""" start="00:25:10.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and enjoy the rest of the conference.""" start="00:25:12.200" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Welcome to the bonus material.""" start="00:25:15.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""I'm glad for those of you who are stuck around.""" start="00:25:39.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""We are now going to examine an instance""" start="00:25:43.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of speech and text signals together""" start="00:25:46.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that produce multiple layers.""" start="00:25:49.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""When we have--when we take a spoken conversation""" start="00:25:51.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and use the best language processing models available,""" start="00:25:54.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we suddenly hit a hard spot""" start="00:25:58.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because the tools are typically not trained""" start="00:26:00.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to filter out the unnecessary cruft""" start="00:26:03.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in order to automatically interpret""" start="00:26:05.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the part of what is being said""" start="00:26:07.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that is actually relevant.""" start="00:26:09.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Over time, language researchers""" start="00:26:11.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""have created many interdependent layers of annotations,""" start="00:26:14.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""yet the assumptions underlying them are seldom the same.""" start="00:26:17.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Piecing together such related but disjointed annotations""" start="00:26:21.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""on their predictions poses a huge challenge.""" start="00:26:25.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is another place where we can leverage""" start="00:26:28.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the data model underlying the Emacs editor,""" start="00:26:30.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""along with the structural editing capabilities""" start="00:26:33.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of Org mode to improve current tools.""" start="00:26:35.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Let's take this very simple looking utterance.""" start="00:26:38.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""&quot;Um \{lipsmack\} and that's it. (\{laugh\})&quot;""" start="00:26:42.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Looks like the person-- so this is--""" start="00:26:48.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""what you are seeing here is a transcript of an audio signal""" start="00:26:50.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that has a lip smack and a laugh as part of it,""" start="00:26:54.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and there is also a &quot;Um&quot; like interjection.""" start="00:27:00.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So this has a few interesting noises""" start="00:27:04.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and specific things that would be illustrative""" start="00:27:08.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of what we are going to, how we are going to represent it.""" start="00:27:14.000" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Okay. So let's say you want to have""" start="00:27:20.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a syntactic analysis of this sentence or utterance.""" start="00:27:25.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One common technique people use""" start="00:27:28.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is just to remove the cruft, and, you know,""" start="00:27:30.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""write some rules, clean up the utterance,""" start="00:27:32.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""make it look like it's proper English,""" start="00:27:35.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and then, you know, tokenize it,""" start="00:27:36.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and basically just use standard tools to process it.""" start="00:27:40.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But in that process, they end up eliminating""" start="00:27:43.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""valid pieces of signal that have meaning to others""" start="00:27:47.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""studying different phenomena of language.""" start="00:27:51.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Here you have the rich transcript,""" start="00:27:52.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the input to the syntactic parser.""" start="00:27:56.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""As you can see, there is a little tokenization happening""" start="00:28:00.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where you'll be inserting space""" start="00:28:05.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""between &quot;that&quot; and the contracted is ('s),""" start="00:28:07.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and between the period and the &quot;it,&quot;""" start="00:28:12.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the output of the syntactic parser is shown below.""" start="00:28:15.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""which (surprise) is a S-expression.""" start="00:28:18.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Like I said, the parse trees, when they were created,""" start="00:28:21.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and still largely when they are used, are S-expressions,""" start="00:28:24.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and most of the viewers here""" start="00:28:29.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""should not have much problem reading it.""" start="00:28:33.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""You can see this tree structure""" start="00:28:35.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of this syntactic parser here.""" start="00:28:37.280" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Now let's say you want to integrate""" start="00:28:39.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""phonetic information or phonetic layer""" start="00:28:40.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that's in the audio signal, and do some analysis.""" start="00:28:44.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Now, it would need you to do a few-- take a few steps.""" start="00:28:49.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""First, you would need to align the transcript""" start="00:28:57.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with the audio. This process is called forced alignment,""" start="00:29:01.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where you already know what the transcript is,""" start="00:29:06.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you have the audio, and you can get a good alignment""" start="00:29:10.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""using both pieces of information.""" start="00:29:14.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And this is typically a technique that is used to""" start="00:29:17.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""create training data for training""" start="00:29:20.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""automatic speech recognizers.""" start="00:29:23.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One interesting thing is that in order to do""" start="00:29:25.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""this forced alignment, you have to keep""" start="00:29:29.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the non-speech events in transcript,""" start="00:29:32.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because they consume some audio signal,""" start="00:29:35.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and if you don't have that signal,""" start="00:29:39.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the alignment process doesn't know exactly...""" start="00:29:41.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you know, it doesn't do a good job,""" start="00:29:44.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because it needs to align all parts of the signal""" start="00:29:45.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with something, either pause or silence or noise or words.""" start="00:29:50.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Interestingly, punctuations really don't factor in,""" start="00:29:55.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because we don't speak in punctuations.""" start="00:29:59.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So one of the things that you need to do""" start="00:30:01.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""is remove most of the punctuations,""" start="00:30:04.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""although you'll see there are some punctuations""" start="00:30:05.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that can be kept, or that are to be kept.""" start="00:30:08.040" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""And the other thing is that the alignment has to be done""" start="00:30:12.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""before tokenization, as it impacts pronunciation.""" start="00:30:15.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""To show an example: Here you see &quot;that's&quot;.""" start="00:30:20.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""When it's one word,""" start="00:30:24.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""it has a slightly different pronunciation""" start="00:30:26.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""than when it is two words, which is &quot;that is&quot;,""" start="00:30:31.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""like you can see &quot;is.&quot; And so,""" start="00:30:35.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""if you split the tokens or split the words""" start="00:30:38.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in order for syntactic parser to process it,""" start="00:30:44.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you would end up getting the wrong phonetic analysis.""" start="00:30:48.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And if you have--if you process it""" start="00:30:51.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""through the phonetic analysis,""" start="00:30:54.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you don't know how to integrate it""" start="00:30:55.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with the tokenized syntax, you can, you know,""" start="00:30:59.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that can be pretty tricky. And a lot of time,""" start="00:31:02.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""people write one-off pieces of code that handle these,""" start="00:31:07.520" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but the idea here is to try to have a general architecture""" start="00:31:10.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that seamlessly integrates all these pieces.""" start="00:31:14.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Then you do the syntactic parsing of the remaining tokens.""" start="00:31:17.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Then you align the data and the two annotations,""" start="00:31:21.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and then integrate the two layers.""" start="00:31:24.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Once that is done, then you can do all kinds of""" start="00:31:27.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""interesting analysis, and test various hypotheses""" start="00:31:31.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and generate the statistics,""" start="00:31:33.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""but without that you only are dealing""" start="00:31:35.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""with one or the other part.""" start="00:31:39.360" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""Let's just take a quick look at how each of the layers""" start="00:31:42.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that are involved look like.""" start="00:31:48.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So this is &quot;Um \{lipsmack\}, and that's it. \{laugh\}&quot;""" start="00:31:51.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is the transcript, and on the right hand side,""" start="00:31:56.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you see the same thing as a transcript""" start="00:32:00.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""listed in a vertical in a column.""" start="00:32:04.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""You'll see why, in just a second.""" start="00:32:06.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And there are some place--""" start="00:32:08.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""there are some rows that are empty,""" start="00:32:09.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""some rows that are wider than the others, and we'll see why.""" start="00:32:11.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""The next is the tokenized sentence""" start="00:32:15.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""where you have space added,""" start="00:32:19.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you know space between these two tokens:""" start="00:32:20.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""&quot;that&quot; and the apostrophe &quot;s&quot; ('s),""" start="00:32:23.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the &quot;it&quot; and the &quot;period&quot;.""" start="00:32:26.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And you see on the right hand side""" start="00:32:28.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that the tokens have attributes.""" start="00:32:30.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So there is a token index, and there are 1, 2,""" start="00:32:33.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""you know 0, 1, 2, 3, 4, 5 tokens,""" start="00:32:36.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and each token has a start and end character,""" start="00:32:38.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and space (sp) also has a start and end character,""" start="00:32:41.480" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and space is represented by a &quot;sp&quot;. And there are""" start="00:32:45.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""these other things that we removed,""" start="00:32:50.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""like the &quot;\{LS\}&quot; which is for &quot;\{lipsmack\}&quot;""" start="00:32:54.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and &quot;\{LG\}&quot; which is &quot;\{laugh\}&quot; are showing grayed out,""" start="00:32:56.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you'll see why some of these things are grayed out""" start="00:32:59.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""in a little bit.""" start="00:33:02.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""This is what the forced alignment tool produces.""" start="00:33:03.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Basically, it takes the transcript,""" start="00:33:11.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and this is the transcript""" start="00:33:17.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that has slightly different symbols,""" start="00:33:19.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because different tools use different symbols""" start="00:33:24.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and their various configurational things.""" start="00:33:26.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But this is what is used to get an alignment""" start="00:33:28.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or time alignment with phones.""" start="00:33:33.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So this column shows the phones, and so each word...""" start="00:33:36.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So, for example, &quot;and&quot; has been aligned with these phones,""" start="00:33:40.080" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and these on the start and end""" start="00:33:43.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""are essentially temporal or time stamps that it aligned--""" start="00:33:46.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that has been aligned to it.""" start="00:33:52.960" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Interestingly, sometimes we don't really have any pause""" start="00:33:54.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or any time duration between some words""" start="00:34:00.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and those are highlighted as gray here.""" start="00:34:05.160" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""See, there's this space... Actually""" start="00:34:08.200" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""it does not have any temporal content,""" start="00:34:12.760" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""whereas this other space has some duration.""" start="00:34:17.800" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So the ones that have some duration are captured,""" start="00:34:21.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""while the others are the ones that in the earlier diagram""" start="00:34:24.840" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""we saw were left out.""" start="00:34:29.520" video="mainVideo-grail" id="subtitle"]]
+[[!template new="1" text="""And the aligner actually produces multiple files.""" start="00:34:31.320" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""One of the files has a different, slightly different""" start="00:34:37.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""variation on the same information,""" start="00:34:44.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and in this case, you can see""" start="00:34:46.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""that the punctuation is missing,""" start="00:34:50.000" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the punctuation is, you know, deliberately missing,""" start="00:34:52.400" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""because there is no time associated with it,""" start="00:34:57.600" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you see that it's not the tokenized sentence--""" start="00:35:02.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""a tokenized word. This... Now it gives you a full table,""" start="00:35:06.440" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and you can't really look into it very carefully.""" start="00:35:17.120" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""But we can focus on the part that seems legible,""" start="00:35:21.240" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""or, you know, properly written sentence,""" start="00:35:25.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""process it and reincorporate it back into the whole.""" start="00:35:28.560" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""So if somebody wants to look at, for example,""" start="00:35:32.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""how many pauses the person made while they were talking,""" start="00:35:35.880" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And they can actually measure the pause, the number,""" start="00:35:39.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the duration, and make connections between that""" start="00:35:42.920" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and the rich syntactic structure that is being produced.""" start="00:35:46.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""And in order to do that, you have to get these layers""" start="00:35:49.640" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""to align with each other,""" start="00:35:57.280" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""and this table is just a tabular representation""" start="00:35:59.040" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""of the information that we'll be storing in the YAMR file.""" start="00:36:04.360" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Congratulations! You have reached""" start="00:36:08.680" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""the end of this demonstration.""" start="00:36:11.720" video="mainVideo-grail" id="subtitle"]]
+[[!template text="""Thank you for your time and attention.""" start="00:36:13.480" video="mainVideo-grail" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20grail%3A%20GRAIL---A%20Generalized%20Representation%20and%20Aggregation%20of%20Information%20Layers)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/grail-before.md b/2022/info/grail-before.md
new file mode 100644
index 00000000..26e0d6c1
--- /dev/null
+++ b/2022/info/grail-before.md
@@ -0,0 +1,33 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+# Talk
+
+<div class="vid"><video controls preload="none" id="grail-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="grail-mainVideo" data="""
+00:00.000 Introduction
+01:13.400 Processing language
+02:34.560 Annotation
+03:43.240 Learning from data
+04:39.680 Manual annotation
+05:44.400 How can we develop a unified representation?
+06:22.520 What role might Emacs and Org mode play?
+06:55.280 The complex structure of language
+08:10.800 Annotation tools
+10:22.360 Org mode
+12:45.480 Example
+17:36.240 Different readings
+19:17.680 Spontaneous speech
+23:32.000 Editing properties in column view
+24:20.280 Conclusion
+25:15.280 Bonus material
+27:20.480 Syntactic analysis
+28:39.280 Forced alignment
+30:12.600 Alignment before tokenization
+31:42.880 Layers
+34:31.320 Variations
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.webm">Download --main.webm (81MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/iepyHuSZMww6K4yfkntTpA">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="grail-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.webm" />${captions}<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="grail-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.webm">Download --answers.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.opus">Download --answers.opus (16MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/grail-nav.md b/2022/info/grail-nav.md
new file mode 100644
index 00000000..a81dc915
--- /dev/null
+++ b/2022/info/grail-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/async">Emacs was async before async was cool</a>
+Next by track: <a href="/2022/talks/dbus">The Wheels on D-Bus</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/handwritten-after.md b/2022/info/handwritten-after.md
new file mode 100644
index 00000000..7b9f8fb5
--- /dev/null
+++ b/2022/info/handwritten-after.md
@@ -0,0 +1,123 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="handwritten-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Can you recognize this building?""" start="00:00:00.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""Some of you may have recognized this.""" start="00:00:08.080" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""This building is called""" start="00:00:09.800" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""the John Hancock building.""" start="00:00:11.440" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""This is in Chicago.""" start="00:00:14.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I recently bought this building.""" start="00:00:17.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Isn't it nice?""" start="00:00:19.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Heavens no!""" start="00:00:21.320" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I am in my home in Pune in India.""" start="00:00:23.240" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I am Bala Ramadurai,""" start="00:00:27.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""an author, professor, and an innovation coach.""" start="00:00:29.160" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Hello and welcome to my talk on""" start="00:00:33.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""“How to incorporate handwritten notes""" start="00:00:36.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""into Emacs Org Mode”""" start="00:00:39.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Now, why did I show you this building?""" start="00:00:42.280" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""The name is of interest for this talk.""" start="00:00:45.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""In the US, someone's signature is""" start="00:00:49.400" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""also referred to as their Hancock.""" start="00:00:52.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Your handwriting is pretty much part of your identity.""" start="00:00:55.200" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""It is as fundamental as that.""" start="00:00:59.680" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Of course, there is a movie by that name too, Hancock.""" start="00:01:03.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I could have started with a clip from that movie,""" start="00:01:07.600" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""but in spite of Will Smith and Charlize Theron,""" start="00:01:12.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""both my favorite movie stars in the movie, I hated it.""" start="00:01:15.880" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""[Clip from Hancock (2008)]""" start="00:01:24.160" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""But I digress.""" start="00:01:35.160" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Handwriting has been a fascinating topic for me.""" start="00:01:40.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""However, note-taking has always been on my computer,""" start="00:01:44.200" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""in particular, in the Emacs Org Mode system.""" start="00:01:49.720" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""It is so easy to note down anything,""" start="00:01:54.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""add a schedule, add a deadline,""" start="00:01:57.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""search anything you want, link anything you want,""" start="00:01:59.840" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""export it to any format, track what you've been doing,""" start="00:02:04.280" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""clock your tasks, and on and on and on.""" start="00:02:07.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""It's such a squeaky-clean system to""" start="00:02:12.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""track everything and link it to""" start="00:02:15.520" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""anything from the digital world.""" start="00:02:17.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Sharing the original notes is still a pain in the rear,""" start="00:02:20.800" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""but for personal stuff, it's awesome.""" start="00:02:24.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""But then what about handwriting?""" start="00:02:29.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""Research seems to suggest that handwritten notes""" start="00:02:32.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""can enhance clarity of thought, retention,""" start="00:02:35.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""sometimes even getting rid of your worries.""" start="00:02:40.200" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""[Fried, C. B. (2008). In-class laptop use and
+its effects on student learning]""" start="00:02:50.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""[Speaker displays articles on Note-taking]""" start="00:03:06.400" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""My experience seems to agree with that too.""" start="00:03:13.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""As a professor, my fear has always been""" start="00:03:17.840" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""this quote, “Lecturing is that mysterious process""" start="00:03:21.200" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""by means of which the contents of the notebook""" start="00:03:25.200" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""of the professor are transferred""" start="00:03:29.240" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""through the instrument of the fountain pen""" start="00:03:31.880" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""to the notebook of the student""" start="00:03:34.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""without passing through the mind of either.”""" start="00:03:37.280" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Hmmm... So, question — How do we combine""" start="00:03:40.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""the efficient Org Mode system""" start="00:03:45.680" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""with the effective handwritten note-taking system?""" start="00:03:48.160" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Merge the systems together. Absolutely.""" start="00:03:53.720" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""How do you do that?""" start="00:03:56.800" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Step 1: Write the notes by hand""" start="00:03:59.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""on a notebook. Pen, pencil.""" start="00:04:03.680" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Keep some convention for yourselves""" start="00:04:06.080" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""for tracking tasks like a star or an asterisk.""" start="00:04:09.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Step 2: Scan them using""" start="00:04:13.040" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""your favourite mobile app.""" start="00:04:16.400" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I recommend Adobe Scan or Dropbox.""" start="00:04:18.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Step 3: store the document as a JPG file""" start="00:04:23.440" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""into a folder called Inbox.""" start="00:04:30.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Make sure this syncs into a cloud storage folder""" start="00:04:32.680" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""and your Org Mode system""" start="00:04:37.760" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""has access to this folder.""" start="00:04:39.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""(Optional) Step 4: convert the notes into text""" start="00:04:41.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""using Google Keep or just type""" start="00:04:45.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""the damn thing one more time.""" start="00:04:49.320" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Then you can process that""" start="00:04:51.520" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""in your Org Mode system""" start="00:04:54.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""as you always do in whatever""" start="00:04:56.240" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""is there in your inbox.""" start="00:04:59.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""But, three steps or four before I get access""" start="00:05:02.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""to my notes and into my Org Mode?""" start="00:05:06.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""What a precious waste of time.""" start="00:05:09.400" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""I'd rather be tinkering with my""" start="00:05:11.640" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""config file in that time, correct?""" start="00:05:14.120" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Boy...""" start="00:05:18.800" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Get or buy or gift or convince your partner,""" start="00:05:19.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""parent, or anybody else to gift yourself""" start="00:05:24.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""a touch-enabled large device.""" start="00:05:29.720" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Then use an app like OneNote to write notes""" start="00:05:31.960" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""on the device and link the handwritten note""" start="00:05:37.880" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""directly into Org Mode by copying the link.""" start="00:05:41.440" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""You can use a shortcut like Ctrl-1""" start="00:05:46.240" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""to mark the todos, but that means it remains""" start="00:05:54.080" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""only on OneNote ecosystem, the todos.""" start="00:05:59.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""You can use the same app to also convert""" start="00:06:05.160" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""the handwritten note into text""" start="00:06:14.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""just by the click of a button.""" start="00:06:18.320" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""As a bonus, you can even include screenshots""" start="00:06:23.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""from your online meetings.""" start="00:06:27.360" video="mainVideo-handwritten" id="subtitle"]]
+[[!template new="1" text="""I like both my options.""" start="00:06:30.920" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Option 1: use a regular notebook,""" start="00:06:33.440" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""scan and process them into my inbox.""" start="00:06:36.440" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Option 2: write the notes in a digital device""" start="00:06:40.840" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""and convert them into text.""" start="00:06:44.560" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Or, third option, I appeal to thee,""" start="00:06:46.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""oh great community, can you please build a package""" start="00:06:52.480" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""inside Org Mode that recognises handwriting""" start="00:06:57.000" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""to export it into our Org Mode, Emacs Org Mode.""" start="00:07:00.960" video="mainVideo-handwritten" id="subtitle"]]
+[[!template text="""Thank you so much for your attention. Bye.""" start="00:07:10.040" video="mainVideo-handwritten" id="subtitle"]]
+
+
+
+Captioner: jai
+
+Questions or comments? Please e-mail [bala@balaramadurai.net](mailto:bala@balaramadurai.net?subject=Comment%20for%20EmacsConf%202022%20handwritten%3A%20How%20to%20incorporate%20handwritten%20notes%20into%20Emacs%20Orgmode)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/handwritten-before.md b/2022/info/handwritten-before.md
new file mode 100644
index 00000000..43c65cf1
--- /dev/null
+++ b/2022/info/handwritten-before.md
@@ -0,0 +1,50 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Bala Ramadurai shares how he takes handwritten notes and includes them in his Org Mode files. Afterwards, he will handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="handwritten">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect stroke-width="3" x="101" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 8-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-handwritten>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T15:05:00Z" end="2022-12-03T15:15:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~10:05 AM - 10:15 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~9:05 AM - 9:15 AM CST (US/Central)<br />Saturday, Dec 3 2022, ~8:05 AM - 8:15 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~7:05 AM - 7:15 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~3:05 PM - 3:15 PM UTC <br />Saturday, Dec 3 2022, ~4:05 PM - 4:15 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~5:05 PM - 5:15 PM EET (Europe/Athens)<br />Saturday, Dec 3 2022, ~8:35 PM - 8:45 PM IST (Asia/Kolkata)<br />Saturday, Dec 3 2022, ~11:05 PM - 11:15 PM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~12:05 AM - 12:15 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="handwritten-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="handwritten-mainVideo" data="""
+00:02.200 Introduction
+01:41.080 Org Mode
+02:29.520 Handwriting
+03:42.167 Combining Org Mode and handwriting
+03:59.720 Step 1: Write the notes by hand
+04:14.420 Step 2: Scan them
+04:23.640 Step 3: Store the document
+04:42.300 (Optional) Step 4: Convert the notes
+05:02.280 Using touch devices
+06:30.920 Options
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--script.fountain">Download --script.fountain</a></li><li><a href="https://toobnix.org/w/kr86uvn8KHey8cGULY71Aw">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="handwritten-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="handwritten-qanda" data="""
+00:30.160 How do you link the notes together so that you could search through them in the future?
+01:51.649 Is it necessary to OCR your handwriting?
+03:59.351 What about searching notes? Notes to text while being offline?
+06:00.080 Have you looked at taking handwritten notes on a tablet like Xournal++?
+07:32.160 Have you tried out the reMarkable device and figured out how to link the files back into Org mode constructivley yet?
+09:26.299 Handwritten and org transcribed notes de-duplication for searching: do you want one or the other, both?
+12:01.280 How often do you instead type in and summarize your notes?
+15:14.164 How fancy has your handwritten notes import been?
+21:58.411 Do you actually have a device of your own that allows you to take notes like this? Or is it just written on paper?
+24:36.320 Mindmaps
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="handwritten-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.webm">Download --answers.webm (103MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.opus">Download --answers.opus (11MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/handwritten-nav.md b/2022/info/handwritten-nav.md
new file mode 100644
index 00000000..1ef722c7
--- /dev/null
+++ b/2022/info/handwritten-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/treesitter">Tree-sitter beyond syntax highlighting</a>
+Next by track: <a href="/2022/talks/lspbridge">lsp-bridge: a smooth-as-butter asynchronous LSP client</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/haskell-after.md b/2022/info/haskell-after.md
new file mode 100644
index 00000000..e9e454fb
--- /dev/null
+++ b/2022/info/haskell-after.md
@@ -0,0 +1,466 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="haskell-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Today, I will talk about Haskell code exploration for Emacs.""" start="00:00:00.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""What is Haskell? It is a purely functional language.""" start="00:00:03.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""For example, every value in Haskell is immutable.""" start="00:00:06.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And it is the main compiler of Haskell, GHC.""" start="00:00:09.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It provides API for the whole compilation pipeline.""" start="00:00:13.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""For example, the tools mentioned in this talk,""" start="00:00:16.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including hcel and haddorg,""" start="00:00:18.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""they use, they heavily utilize the GHC front-end API""" start="00:00:20.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for parsing and understanding""" start="00:00:24.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the identifiers in Haskell source files.""" start="00:00:26.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Roughly speaking,""" start="00:00:29.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""a Haskell program consists of several parts.""" start="00:00:31.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""it begins with some front matters, including,""" start="00:00:34.664" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for example, language extensions,""" start="00:00:37.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which are optional language features one might want to use""" start="00:00:40.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for convenience.""" start="00:00:44.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The front matters also contain module exports.""" start="00:00:48.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So for example, here we define,""" start="00:00:52.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we declare module F2Md.Config""" start="00:00:55.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for this Haskell source file,""" start="00:00:58.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which exports these four identifiers""" start="00:01:00.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that other source files can use when importing F2Md.Config.""" start="00:01:03.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And the next will be""" start="00:01:07.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""a block of imports so that we can use libraries""" start="00:01:10.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and identifiers in these libraries.""" start="00:01:14.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The bulk of a Haskell source file normally is""" start="00:01:17.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""a list of declarations,""" start="00:01:21.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including values, types, and instances, and so on.""" start="00:01:23.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The difference between a value and a type is that""" start="00:01:26.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the type of a value is a type,""" start="00:01:29.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and the type of a type is a kind.""" start="00:01:30.500" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""For example, here's a small block of Haskell source code.""" start="00:01:34.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We define Range type""" start="00:01:38.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""from a lower-end integer to a higher-end integer.""" start="00:01:41.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We also declare a value r of the type Range,""" start="00:01:45.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which is Range from 2 to 7,""" start="00:01:51.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""because in Haskell, we like to--""" start="00:01:54.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by default, functions can be curried,""" start="00:02:01.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which basically means, by default, we want to utilize""" start="00:02:04.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the partial application of functions.""" start="00:02:09.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We don't require parens surrounding arguments""" start="00:02:12.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""when invoking a function.""" start="00:02:17.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""That makes it possible, if you want,""" start="00:02:19.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to write Haskell like Lisp""" start="00:02:22.725" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by adding a bit of redundant parens.""" start="00:02:25.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So for example,""" start="00:02:28.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""here are two blocks of code, one Lisp, one Haskell,""" start="00:02:30.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and they look quite similar to each other.""" start="00:02:33.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""What is a code explorer?""" start="00:02:36.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""A code explorer is a tool""" start="00:02:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to browse its code base to its code comprehension.""" start="00:02:39.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Code explorer commonly comes with""" start="00:02:42.724" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""several functionalities or features,""" start="00:02:45.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including a cross-referencer,""" start="00:02:47.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which allows going to definitions of an identifier at points""" start="00:02:49.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or looking up references of an identifier,""" start="00:02:53.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like where it is used.""" start="00:02:56.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So the example in Emacs would be xref.""" start="00:02:58.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Code explorer also would be able to show you""" start="00:03:04.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""documentation and signatures of identifiers at points.""" start="00:03:07.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""In Emacs, that would be eldoc.""" start="00:03:10.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It also commonly allows you to search for identifiers.""" start="00:03:13.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Something like that in Emacs""" start="00:03:17.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""could be describe-function and find-function.""" start="00:03:19.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Code explorer is normally""" start="00:03:22.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""quite often implemented in two parts,""" start="00:03:24.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the indexer and the server,""" start="00:03:27.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""where the indexer parses the source code files,""" start="00:03:28.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""indexes the identifiers,""" start="00:03:32.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and stores the information of identifiers""" start="00:03:34.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like the definition, size, and the currencies,""" start="00:03:36.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""either in databases or in files.""" start="00:03:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The other part is the server,""" start="00:03:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which uses the database created by the indexer""" start="00:03:44.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to serve the information of the identifier.""" start="00:03:49.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Before I present my solution to code exploring,""" start="00:03:53.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""some description of prior art is in order.""" start="00:03:57.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""There are several tools that you can use""" start="00:04:01.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to aid code exploration,""" start="00:04:05.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including tech-based tools like hasktags and hs-tags.""" start="00:04:08.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The limitation with these tools""" start="00:04:13.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is they are focused on the current projects only""" start="00:04:15.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and do not work""" start="00:04:18.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for cross-packaging reference and definition.""" start="00:04:19.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Another problem with the tag-based tools is""" start="00:04:26.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""they might not handle symbols with the same name properly.""" start="00:04:31.045" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Sometimes they get confused,""" start="00:04:34.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and they ask you to choose which definition,""" start="00:04:36.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""what is the correct definition site,""" start="00:04:43.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""even though the occurrence of the symbol""" start="00:04:46.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or the symbol at point has only one definition ambiguously.""" start="00:04:49.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Another tool is the haskell-mode.""" start="00:04:55.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""It has some limited support for eldoc""" start="00:04:58.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by displaying the signature of an identifier at points,""" start="00:05:02.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""but the identifier has to be something""" start="00:05:06.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that is commonly known or sort of built-in""" start="00:05:11.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or come from the base library of Haskell.""" start="00:05:15.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So for example,""" start="00:05:18.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""it works for common functions like head and tail.""" start="00:05:20.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And you can see that the signature is displayed here.""" start="00:05:24.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""However, it does not work for,""" start="00:05:27.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""let's say, IO. IO is a type.""" start="00:05:29.664" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Maybe that's the reason.""" start="00:05:31.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's find another function""" start="00:05:33.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that's not from the base library.""" start="00:05:37.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""toJSON is from the Aeson library,""" start="00:05:40.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so no signature is displayed here.""" start="00:05:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""It also provides""" start="00:05:47.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""some sort of goto-declaration functionality""" start="00:05:51.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to jump to any declaration in a file.""" start="00:05:53.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""To do that, one has to first run haskell-decl-scan-mode""" start="00:05:56.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to enter this minor mode.""" start="00:06:00.664" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Then we can run imenu to go to any definition,""" start="00:06:03.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to go to any declaration, like getHomeR.""" start="00:06:08.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Apparently, after running that,""" start="00:06:11.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we are able to go to definition.""" start="00:06:13.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So for example, let's see,""" start="00:06:16.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we want to find definition of getCityJR.""" start="00:06:19.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And indeed, it works""" start="00:06:22.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""if it's within the same source file, of course.""" start="00:06:25.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It still does not work for cross-packaging identifiers.""" start="00:06:28.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So HandlerFor is probably an identifier from servant.""" start="00:06:32.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Or no, not necessarily servant. Maybe WAI.""" start="00:06:37.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Anyway, it's another library.""" start="00:06:40.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And how about find-references?""" start="00:06:43.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""find-references also works somehow for this file.""" start="00:06:50.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""How about WidgetFor?""" start="00:07:01.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It works for WidgetFor too.""" start="00:07:06.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It has some support for goto-definition and find-references.""" start="00:07:13.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""But as usual, it does not support such things cross-package.""" start="00:07:18.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""And finally, we have""" start="00:07:26.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the Sledgehammer HLS Haskell language server.""" start="00:07:27.365" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It can be used with EGLOT.""" start="00:07:31.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""But the problem with HLS, HLS has many many features""" start="00:07:33.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""because it is a language server,""" start="00:07:40.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like renaming, like eldoc for standard libraries, and so on.""" start="00:07:42.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""But the problem with HLS is, one, that it is very, very slow.""" start="00:07:51.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And I wouldn't use it with my laptop.""" start="00:07:57.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And two, it also does not support cross-package referencing.""" start="00:08:00.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""In fact, there's an outstanding GitHub issue about this.""" start="00:08:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So cross-package referencing and goto-definition""" start="00:08:08.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is sort of a common shortfall,""" start="00:08:13.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""a common problem for these existing Haskell code explorers.""" start="00:08:17.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Then finally, we also have hoogle and hackage.""" start="00:08:21.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Hoogle is a search engine for Haskell identifiers,""" start="00:08:23.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and the results link to Hackage,""" start="00:08:28.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which is the Haskell documentation website""" start="00:08:30.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for all Haskell libraries.""" start="00:08:33.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Haskell Hackage has functionality""" start="00:08:35.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""where you can jump to the source code file rendered in HTML,""" start="00:08:40.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and you can click on the identifiers there""" start="00:08:45.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to jump to definitions,""" start="00:08:49.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""but it does not support find references,""" start="00:08:51.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and it is rather basic.""" start="00:08:54.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Then I learned about haskell-code-explorer,""" start="00:08:59.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which is a fully-fledged Haskell code explorer.""" start="00:09:01.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It is written by someone else.""" start="00:09:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It is a web application""" start="00:09:07.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for exploring Haskell package codebases.""" start="00:09:09.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The official reference instance for haskell-code-explorer""" start="00:09:12.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is available at this URL, which I will demo soon.""" start="00:09:16.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""What I did with these packages... I ported it to GHC 9.2.""" start="00:09:19.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I renamed it to hcel because I want to focus on Emacs clients""" start="00:09:25.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""rather than JavaScript clients, which I will explain later.""" start="00:09:29.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And I also wrote an Emacs client package, of course.""" start="00:09:31.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""This is what haskell-code-explorer looks like.""" start="00:09:37.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""On the homepage, it is a list of indexed packages""" start="00:09:41.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""indexed by the indexer.""" start="00:09:47.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""One can filter it by the package name""" start="00:09:50.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or look for identifiers directly across all packages.""" start="00:09:53.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's have a look at base. There are three versions.""" start="00:10:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's have a look at the latest version, 4.12.0.0.""" start="00:10:09.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Once entering the package view,""" start="00:10:15.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""you are shown a list of all modules by their path,""" start="00:10:19.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""as well as a tree of these module files.""" start="00:10:24.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""You can filter by module name or file name,""" start="00:10:29.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or you can search for identifier within the same package""" start="00:10:32.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or in all packages.""" start="00:10:34.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say we want to learn about Control.Monad.""" start="00:10:36.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Now we are in the module view.""" start="00:10:43.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The source file is presented to you,""" start="00:10:46.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and it has links to identifiers.""" start="00:10:49.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""When you hover over them, the documentation shows up,""" start="00:10:55.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including the signature where it is defined.""" start="00:11:01.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""You can go to its definition or find references.""" start="00:11:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say we want to go to the definition of Monad.""" start="00:11:10.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It jumps to the definition site of the monad type class.""" start="00:11:20.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""If we click at the definition site,""" start="00:11:25.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""it brings up a list of references.""" start="00:11:28.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""On the left, you can choose""" start="00:11:32.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which package you want to find references of monad in.""" start="00:11:33.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's look at the random one, avwx.""" start="00:11:39.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Here is a list of results where Monad is used in avwx.""" start="00:11:47.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This is a module path.""" start="00:11:54.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""One can go to any of these results.""" start="00:11:57.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We can search for things in all packages""" start="00:12:06.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""or in the current package.""" start="00:12:07.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let’s say I want to search for &quot;Read&quot;""" start="00:12:09.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I think this is the &quot;Read&quot; that is commonly used in Haskell,""" start="00:12:13.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the read type class for parsing strings into values.""" start="00:12:19.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I think that is more or less it.""" start="00:12:25.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""That is the Haskell Code Explorer web application""" start="00:12:31.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""in all its glory.""" start="00:12:34.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Let's go back to the slides.""" start="00:12:38.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""That was the web application,""" start="00:12:40.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which is basically a JavaScript client""" start="00:12:43.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that talks to the server""" start="00:12:46.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by sending requests and receiving""" start="00:12:48.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and parsing the JSON results or JSON responses.""" start="00:12:51.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Initially, I was interested in hacking the web client.""" start="00:12:55.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It uses the ember.js web framework.""" start="00:13:02.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The first thing to do was to npm install ember-cli.""" start="00:13:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It gives me 12 vulnerabilities,""" start="00:13:09.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""4 low, 2 moderate, 3 high, 3 critical.""" start="00:13:16.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I don't know how often it is the case""" start="00:13:19.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""when we don't really care about these nasty vulnerabilities""" start="00:13:26.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""from Node.js or npm because they are so common.""" start="00:13:33.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I don't quite like that.""" start="00:13:36.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Another reason for favoring Emacs clients""" start="00:13:41.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""over JavaScript clients is user freedom.""" start="00:13:45.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Emacs is geared towards user freedom.""" start="00:13:49.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It allows users maximum freedom to customize or mod Emacs.""" start="00:13:53.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I think Emacs clients can be a way to fix JavaScript traps,""" start="00:14:01.664" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like using user scripts to replace non-free JavaScript.""" start="00:14:07.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""There are tools to do that, for example, like Haketilo.""" start="00:14:14.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Why write JavaScript replacement""" start="00:14:19.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""if we can write Elisp replacement?""" start="00:14:21.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""If we overwrite all kinds of front-ends in Emacs""" start="00:14:25.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for commonly-used web applications""" start="00:14:31.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like Reddit, Hacker News, what have you,""" start="00:14:34.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""then we have an Emacs app store""" start="00:14:37.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""where we can just install these applications""" start="00:14:40.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and browse the web more freely.""" start="00:14:43.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Back to hcel, which is the Emacs client I wrote.""" start="00:14:51.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I tried to reuse as much of Emacs built-ins as possible,""" start="00:14:56.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including eldoc, for showing documentation,""" start="00:14:59.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""xref for cross-referencer,""" start="00:15:03.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""compilation-mode for showing search results of identifiers,""" start="00:15:04.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""outline-mode for a hierarchical view""" start="00:15:07.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""of package module identifiers,""" start="00:15:11.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""sort of a cursor-mode for highlighting identifiers,""" start="00:15:14.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""help-mode for displaying quick help for Haskell identifiers,""" start="00:15:18.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""integration with haddorg,""" start="00:15:26.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which I will mention later, etc.""" start="00:15:27.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It is available as hcel without the dot on GNU ELPA.""" start="00:15:31.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Time for a demo.""" start="00:15:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""To start using hc.el, surprise surprise,""" start="00:15:40.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we run the hcel command.""" start="00:15:42.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We are presented with a list of packages""" start="00:15:45.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""indexed by the hcel indexer.""" start="00:15:46.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This is an outline mode,""" start="00:15:52.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so we can tab to list all the modules""" start="00:15:54.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""represented by the module path.""" start="00:15:58.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We can further tab into the list of identifiers""" start="00:16:01.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""declared in this module.""" start="00:16:03.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Now it asks whether you want to open module source.""" start="00:16:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This is because some module source code""" start="00:16:09.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""can be quite large and it can take a bit of time.""" start="00:16:11.984" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""In this case, the control monad is quite small,""" start="00:16:14.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so let's say yes.""" start="00:16:17.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We see the list of identifiers.""" start="00:16:19.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""One can jump to an identifier forever.""" start="00:16:24.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""As you can see, the identifiers at points are highlighted.""" start="00:16:28.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This can be particularly useful""" start="00:16:33.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""in a large function declaration""" start="00:16:36.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""where you come to see, for example,""" start="00:16:38.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""all the occurrences of an identifier""" start="00:16:40.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""inside the body of the declaration.""" start="00:16:44.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""These are declarations""" start="00:16:48.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which in Haskell mode are listed in imenu.""" start="00:16:50.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We can do the same here in hcel source mode.""" start="00:16:53.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It lists all the declarations with their signature.""" start="00:17:00.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say we want to jump to this funny operator.""" start="00:17:06.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It worked and you can also go back and forth""" start="00:17:13.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""within the declarations by pressing &quot;n&quot; and &quot;p&quot;.""" start="00:17:20.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Similarly, you can do something similar in the outline mode""" start="00:17:26.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by toggling the follow mode, just like in org-agenda.""" start="00:17:30.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's turn it off.""" start="00:17:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Now, how about find definition references?""" start="00:17:40.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Using xref,""" start="00:17:46.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we can jump to the definition of Int and jump back.""" start="00:17:49.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Jump to Maybe, jump back.""" start="00:17:53.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's have a look at references of replicateM.""" start="00:17:56.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""There are plenty of them.""" start="00:18:01.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Maybe we want to check out ghc-lib.""" start="00:18:03.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Here are all the references""" start="00:18:09.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and you can of course jump to any of them in the results.""" start="00:18:11.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Cool.""" start="00:18:16.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""You may have already noticed""" start="00:18:19.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""the eldoc displaying the documentation""" start="00:18:21.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and signature of identifiers.""" start="00:18:27.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""For example, here it shows the signature of replicateM,""" start="00:18:34.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""where it is defined, and its documentation.""" start="00:18:44.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We can bring up the eldoc buffer.""" start="00:18:47.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""In the eldoc buffer,""" start="00:18:56.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""there are also links to other identifiers,""" start="00:18:58.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which takes you to the definition of these identifiers,""" start="00:19:00.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like minBound.""" start="00:19:04.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Apparently, this is not working.""" start="00:19:07.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I'm pretty sure it maybe works.""" start="00:19:10.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's go to nothing or just...""" start="00:19:13.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I think those didn't work because""" start="00:19:17.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the module source for those identifiers is not open.""" start="00:19:19.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Of course, you can search""" start="00:19:24.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for any identifiers across all indexed packages""" start="00:19:30.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""by invoking hcel-global-ids.""" start="00:19:33.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say we want to search for Read.""" start="00:19:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We are presented with a list of results,""" start="00:19:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which are identifiers starting with Read with capital R.""" start="00:19:47.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""They also show where they are defined""" start="00:19:54.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and the documentation, just like in eldoc.""" start="00:19:57.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""One can also directly jump to the identifier""" start="00:20:07.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""in the mini-buffer results.""" start="00:20:13.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""For example, we want to check out this Read2""" start="00:20:20.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""defined in base-4.12.0.0 Data.Functor.Classes""" start="00:20:22.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""There we go.""" start="00:20:28.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Another functionality of hcel""" start="00:20:34.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is the help buffer integration.""" start="00:20:37.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We can do hcel-help and then let's say""" start="00:20:41.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""we want to learn about the read type class.""" start="00:20:46.565" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This is a help buffer""" start="00:20:52.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and you can jump to other definitions""" start="00:20:55.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""within the help buffer""" start="00:21:00.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to read the documentation like readsPrec.""" start="00:21:02.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It says Server version cannot be satistifed. Actual version.""" start="00:21:07.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This means we need to tell hecl""" start="00:21:11.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that the server has the correct version.""" start="00:21:14.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""hecl-fetch-server-version.""" start="00:21:17.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Wait a bit for it to update""" start="00:21:21.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the knowledge of the server version.""" start="00:21:25.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Now you can follow the links, Read, readsPrec.""" start="00:21:27.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""You can do the &quot;l&quot; and &quot;r&quot; to navigate within the history.""" start="00:21:33.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""ReadS, ReadP.""" start="00:21:38.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Just like in the help buffer for elisp code,""" start="00:21:43.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""you can jump to the definition.""" start="00:21:46.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I believe that is everything, more or less.""" start="00:21:53.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""That concludes the demo.""" start="00:22:00.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Now let's turn to haddorg,""" start="00:22:05.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""which is an Org backend for Haddock.""" start="00:22:07.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Haddock is the documentation generator for Haskell packages.""" start="00:22:09.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""For example,""" start="00:22:13.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the official Haskell package documentation website Hackage,""" start="00:22:15.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""all the documentation there is generated by Haddock""" start="00:22:22.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""into the HTML format.""" start="00:22:25.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Haddock has several backends""" start="00:22:28.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that convert the intermediate representation""" start="00:22:31.424" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""called interface to various output formats,""" start="00:22:34.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including HTML, LaTeX, and Hugo.""" start="00:22:37.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""HTML is the main format with a lot of features.""" start="00:22:41.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""LaTeX is less so, and I don't think it is widely used.""" start="00:22:44.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's have a look at an HTML example.""" start="00:22:49.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""This is a PDF because these HTML files can be rather large""" start="00:22:53.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and slow down EWW significantly.""" start="00:23:01.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It's faster to convert it to PDF""" start="00:23:07.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and read it from pdf-tools.""" start="00:23:10.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Looks like this is as big as it goes.""" start="00:23:17.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I hope you can still see it.""" start="00:23:20.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Can I still enlarge it a bit more? Maybe.""" start="00:23:26.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""This is Servant.Server.""" start="00:23:30.144" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It is a module in the servant-server package.""" start="00:23:33.064" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It is a widely used package for writing servers.""" start="00:23:36.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It starts with a heading, which is the name of the module,""" start="00:23:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and the table of contents.""" start="00:23:49.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Then a heading: Run an wai application from an API.""" start="00:23:52.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Under this heading, there are all the relevant identifiers""" start="00:23:56.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that is concerned with running a WAI application from API,""" start="00:24:00.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""including serve, which is one of the main entry points""" start="00:24:08.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""for a Servant.Server.""" start="00:24:13.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It has a signature linkable to the other identifiers,""" start="00:24:15.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the documentation,""" start="00:24:21.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""an example with a Haskell source code block.""" start="00:24:23.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""That's what HTML output looks like.""" start="00:24:26.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""As I mentioned,""" start="00:24:31.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""there are several downsides or drawbacks with that,""" start="00:24:34.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like the HTML files can be huge and slow down EWW.""" start="00:24:35.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Also, every module is an HTML of itself,""" start="00:24:41.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and there's also an HTML for the package""" start="00:24:46.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""with a list of all the modules.""" start="00:24:48.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Whereas the Org backend""" start="00:24:50.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is better in that it is much more compact.""" start="00:24:54.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""All the modules under the same package""" start="00:25:04.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""are included in one Org file""" start="00:25:07.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""as sub-headings, level 2 headings.""" start="00:25:10.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So, servant-server, Servant.Server, that is the module.""" start="00:25:13.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So basically, this level 2 heading""" start="00:25:19.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""contains all the information in this PDF.""" start="00:25:21.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Run the WAI application from API, serve.""" start="00:25:25.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It has a signature that links to other identifiers""" start="00:25:29.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and the documentation that's also linkable.""" start="00:25:39.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""The Haskell source block is now an Org source block,""" start="00:25:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and you can do all sorts of interesting things""" start="00:25:47.224" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""with it using org-babel.""" start="00:25:49.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Let's check the links as server.""" start="00:25:52.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Right, so the link works.""" start="00:25:56.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Application, right, Request.""" start="00:26:00.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""It also supports cross-packaging package linking,""" start="00:26:05.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so following the link to request""" start="00:26:08.384" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""takes us from servant-server package Org documentation""" start="00:26:12.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""to the WAI Org documentation.""" start="00:26:17.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""Another nice thing with Org documentation""" start="00:26:24.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""is that you can use Org functions""" start="00:26:27.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like org-goto to jump to any identifiers.""" start="00:26:32.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say we want to jump to application.""" start="00:26:40.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We have toApplication. So it jumpts to toApplication.""" start="00:26:45.904" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I guess application is not an identifier,""" start="00:26:50.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""yes, it is more like a type alias,""" start="00:26:54.024" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that's why we couldn't find it.""" start="00:26:55.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So that is haddorg.""" start="00:26:58.664" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And of course, I implemented a bit of integration""" start="00:27:01.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""between haddorg and hcel""" start="00:27:06.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so that we can jump from one to the other.""" start="00:27:08.544" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's go back to servant.""" start="00:27:11.304" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's see, ServerT.""" start="00:27:15.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Maybe we want to check out""" start="00:27:24.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the source code definition of ServerT.""" start="00:27:27.104" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""To find out exactly what sort of type alias it is,""" start="00:27:31.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""like what is the alias (or type synonym)""" start="00:27:36.264" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We run hcel-identifier-at-point--""" start="00:27:43.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""sorry, hcel-haddorg-to-hcel-definition...""" start="00:27:49.504" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Oh, we have an HTTP error.""" start="00:27:52.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Typ ServerT not found in module src/Servant/Server.hs""" start="00:27:55.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Why? Well, this is because""" start="00:27:59.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""the HCEL server only understands,""" start="00:28:01.125" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""it only has knowledge of identifiers""" start="00:28:04.944" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that is defined in the original source file.""" start="00:28:07.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So, it is not aware of, say,""" start="00:28:12.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""identifiers that are re-exported in the module.""" start="00:28:17.184" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Most likely, Servant.Server module re-exports ServerT""" start="00:28:21.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""from another module.""" start="00:28:25.824" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We will probably have better luck""" start="00:28:28.704" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""looking into some internal modules like this one.""" start="00:28:29.744" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's try this type class HasContextEntry.""" start="00:28:35.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""So this time it worked.""" start="00:28:39.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template new="1" text="""And, of course, we can go the other direction""" start="00:28:42.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""from hecl to haddorg.""" start="00:28:44.344" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Let's say if we want to display named context""" start="00:28:48.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""in the haddorg documentation""" start="00:28:51.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""so that we can read about, other identifiers documentation""" start="00:28:54.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""that is related to named context.""" start="00:29:01.624" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""We do hecl-identifier-at-point-to-haddorg""" start="00:29:04.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And it does take us to the server-server old file.""" start="00:29:08.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Okay.""" start="00:29:14.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""And that concludes my presentation.""" start="00:29:18.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""You can find hecl in GNU Elpa,""" start="00:29:21.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and you can also find the source code,""" start="00:29:23.584" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""as well as the source of haddorg""" start="00:29:25.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""and instructions on how to generate org documentation""" start="00:29:27.464" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""using haddorg in my cgit instance.""" start="00:29:29.864" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Thank you for your attention.""" start="00:29:33.000" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""I hope you enjoy the rest of the conference.""" start="00:29:36.784" video="mainVideo-haskell" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:29:38.000" video="mainVideo-haskell" id="subtitle"]]
+
+
+
+Captioner: anush
+
+Questions or comments? Please e-mail [id@ypei.org](mailto:id@ypei.org?subject=Comment%20for%20EmacsConf%202022%20haskell%3A%20Haskell%20code%20exploration%20with%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/haskell-before.md b/2022/info/haskell-before.md
new file mode 100644
index 00000000..ab963d87
--- /dev/null
+++ b/2022/info/haskell-before.md
@@ -0,0 +1,63 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Yuchen Pei demonstrates an Emacs package for exploring Haskell code and org documentation generated by a Haddock org backend. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="haskell">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect stroke-width="3" x="666" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 30-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-haskell>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T21:05:00Z" end="2022-12-03T21:35:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~4:05 PM - 4:35 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~3:05 PM - 3:35 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~2:05 PM - 2:35 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~1:05 PM - 1:35 PM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~9:05 PM - 9:35 PM UTC <br />Saturday, Dec 3 2022, ~10:05 PM - 10:35 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~11:05 PM - 11:35 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~2:35 AM - 3:05 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~5:05 AM - 5:35 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~6:05 AM - 6:35 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="haskell-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="haskell-mainVideo" data="""
+00:00.000 What is Haskell?
+00:30.520 Parts of a Haskell program
+01:33.640 Example of Haskell source code
+02:13.400 Writing Haskell like Lisp
+02:37.160 What is a code explorer?
+03:53.760 Prior art
+04:56.240 Haskell mode
+05:46.080 Jumping to declarations
+06:43.560 Finding references
+07:24.840 The Haskell language server
+08:20.520 Hoogle and Hackage
+08:54.960 Haskell Code Explorer
+09:34.600 Demo of Haskell Code Explorer
+10:42.080 Learning about monads
+12:35.480 Web client
+13:39.920 User freedom
+14:47.800 hc.el
+15:38.560 Demo
+16:46.520 Declarations
+17:38.920 Finding definitions and references
+18:19.160 Eldoc
+19:22.360 Searching for identifiers
+20:32.560 Help buffer integration
+22:01.440 Haddock
+23:28.840 Servant
+24:30.480 Org
+25:50.320 Links
+26:19.280 Navigation
+28:41.160 Going the other direction
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/6u6Pd9P8zcbwfFVXNHYzUz">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="haskell-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="haskell-qanda" data="""
+01:42.120 Does it work with offline documentation?
+03:50.720 What is the state of integration of Haskell with Emacs in 2022?
+09:01.680 Have you tried any projects in literate Haskell?
+12:51.360 Is the indexing faster when re-indexing? Would it be too slow to re-index on-demand?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="haskell-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.webm">Download --answers.webm (6.6MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.opus">Download --answers.opus (5.5MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/haskell-nav.md b/2022/info/haskell-nav.md
new file mode 100644
index 00000000..5d1f7344
--- /dev/null
+++ b/2022/info/haskell-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/jupyter">Edit live Jupyter notebook cells with Emacs</a>
+Next by track: <a href="/2022/talks/sat-close">Saturday closing remarks</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/health-after.md b/2022/info/health-after.md
new file mode 100644
index 00000000..ec02951c
--- /dev/null
+++ b/2022/info/health-after.md
@@ -0,0 +1,423 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="health-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hi, this is Dave O'Toole, and today""" start="00:00:00.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'll be giving a presentation on tracking health data""" start="00:00:04.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with Emacs, Org Mode, and Gnuplot.""" start="00:00:07.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So Gnuplot is the well-known scientific""" start="00:00:12.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and mathematical plotting application.""" start="00:00:16.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You feed it text files full of names, dates, numbers,""" start="00:00:19.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""data points, and you get out a nice graph.""" start="00:00:24.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You can spit out SVG. You can spit out PNG graphics.""" start="00:00:27.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""In this case, we're using an SVG.""" start="00:00:31.120" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""What I'm going to show you today""" start="00:00:33.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is how to take daily health journal items:""" start="00:00:36.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""in other words, things like I exercised""" start="00:00:39.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""such and such number of minutes today,""" start="00:00:42.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I got X hours of sleep last night,""" start="00:00:44.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I used such and such number of pieces of nicotine gum,""" start="00:00:47.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""say five pieces. So let's see,""" start="00:00:51.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""we've got this whole picture here, all right,""" start="00:00:54.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and I've tracked here...""" start="00:00:58.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is a month of data from my life.""" start="00:00:59.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is... I'm not showing all the variables,""" start="00:01:02.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but this is what I felt comfortable sharing""" start="00:01:05.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""in order to help people who might have a need to track,""" start="00:01:08.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""either because of a chronic condition,""" start="00:01:14.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""or just because of a health improvement goal""" start="00:01:15.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""or what have you, people who might need to""" start="00:01:18.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""track health data in a way""" start="00:01:20.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that's a little bit more robust""" start="00:01:23.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""than just one or two variables""" start="00:01:24.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and just weight or just blood pressure.""" start="00:01:26.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So in this case, I've got exercise,""" start="00:01:29.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I've got the number of hours of sleep,""" start="00:01:33.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the number of doses of nicotine,""" start="00:01:36.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""(that's the yellow line here),""" start="00:01:38.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and this is referring to nicotine gum.""" start="00:01:40.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""What we're going to be talking about""" start="00:01:44.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is looking at connections, the idea""" start="00:01:45.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that plotting your data can actually""" start="00:01:47.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""help you figure out what's going on.""" start="00:01:49.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is just one month.""" start="00:01:52.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I've been doing this for a couple of months now,""" start="00:01:53.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but I felt comfortable showing one month""" start="00:01:55.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with a limited subset of the variables.""" start="00:01:57.560" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""What I'm going to be doing in this presentation""" start="00:01:59.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is showing you how to set up your org templates""" start="00:02:02.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so that you can, you know, hit a hotkey""" start="00:02:05.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""to capture today's data with an org template--""" start="00:02:08.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""or in this case yesterday's. Usually I'm saying, okay,""" start="00:02:11.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""yesterday this happened,""" start="00:02:14.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because you don't know until the day's over""" start="00:02:15.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""how many pieces of nicotine gum you ate""" start="00:02:17.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""or how many hours you slept.""" start="00:02:19.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So usually we're recording data for the previous day.""" start="00:02:21.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""We can set up a capture template""" start="00:02:25.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so that it fills a little org entry. One for exercise,""" start="00:02:28.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""one for sleep, one for nicotine, one for distress.""" start="00:02:30.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Here distress is just 1 to 10:""" start="00:02:34.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""how bad do you feel today?""" start="00:02:36.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""It's not a scientific measure, but you know,""" start="00:02:38.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""many, many things ask you to rate""" start="00:02:41.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""on a scale of 1 to 10, how bad is the anxiety,""" start="00:02:43.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""how bad is the general level of stress,""" start="00:02:47.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and so without a lot of complication,""" start="00:02:49.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I just rate that one to ten.""" start="00:02:51.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Pain, okay, we won't have to get into any details,""" start="00:02:53.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but if there is a level of chronic pain, well,""" start="00:02:58.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I put that between 1 and 10. As we can see here,""" start="00:03:00.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""during the period that I've shown you, it's pretty low.""" start="00:03:04.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""There's some. If you miss a dose of medication,""" start="00:03:07.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you can track that, in this case""" start="00:03:11.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with a big ugly red triangle, you know.""" start="00:03:13.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You can see, I can see here that in mid-, in late September,""" start="00:03:17.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""sorry, in early to mid-October,""" start="00:03:24.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I stopped using the nicotine gum""" start="00:03:29.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and probably should have cut down more gradually""" start="00:03:31.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because my sleep suffered. Look at this.""" start="00:03:32.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The sleep line is down here, okay?""" start="00:03:34.760" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""What I'm going to do now,""" start="00:03:38.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""now that I've shown you the graph""" start="00:03:39.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and some of the things that are useful about it,""" start="00:03:40.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm going to actually take a step back""" start="00:03:44.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and show you from start to finish how you can do this""" start="00:03:46.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""in GNU Emacs, and I have a little template generator""" start="00:03:50.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that you can use if you'd like.""" start="00:03:53.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""All right, so let's go back.""" start="00:03:56.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Let's step back from this file.""" start="00:03:59.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""We're going to split the screen, and on the left side,""" start="00:04:01.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm going to put the underlying Org file""" start="00:04:07.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that generates this graph.""" start="00:04:09.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Let me shrink that a little bit.""" start="00:04:10.920" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""All right, I'm going to work my way backwards""" start="00:04:16.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""from the template to the template generator,""" start="00:04:22.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""meaning that you'll be able to spit out,""" start="00:04:26.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""given your own specification of health variables,""" start="00:04:28.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you'll be able to have it spit out""" start="00:04:31.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""a custom Gnuplot script like this""" start="00:04:33.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that's preset up with the definitions""" start="00:04:38.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""for the column view in Org mode.""" start="00:04:41.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm assuming a little bit of familiarity""" start="00:04:43.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with Org mode and Gnuplotting,""" start="00:04:45.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but I'll try to explain as much as I can as I go along.""" start="00:04:47.200" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""The journal here is where... okay, okay, one moment.""" start="00:04:51.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So as you can see, there's a sub-entry here""" start="00:04:59.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""for each day that I've included from my data set""" start="00:05:03.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""starting on September 13th of this year""" start="00:05:06.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and ending on October 17th.""" start="00:05:08.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""And there's an Org property drawer with""" start="00:05:10.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the corresponding names of each field and the value.""" start="00:05:16.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now the idea here is that the columns specify...""" start="00:05:29.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""if you know a little bit about Org mode,""" start="00:05:36.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""what happens is that you...""" start="00:05:40.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""let's say that I hit the key for my journal template,""" start="00:05:43.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""which... Mine is very similar.""" start="00:05:50.920" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""This is the capture buffer for today's date,""" start="00:05:52.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and if you're recording yesterday's date,""" start="00:06:00.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you can just flip it like that if you need to.""" start="00:06:02.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Then I say, yesterday, I remember""" start="00:06:04.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I went for about a one-mile walk,""" start="00:06:08.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so that's probably about 20 minutes,""" start="00:06:11.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and that I had such and such,""" start="00:06:14.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I had eight and a half hours of sleep, let's say.""" start="00:06:16.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I estimate how many pieces of nicotine gum I have.""" start="00:06:19.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I try to count as closely as I can, how much distress,""" start="00:06:22.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you know what I mean,""" start="00:06:25.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""whether or not I missed a dose of medication.""" start="00:06:26.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Then when you hit C-c C-c,""" start="00:06:28.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""it captures that to the end of your Org file.""" start="00:06:32.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now what this shows is that... I cut and paste it in.""" start="00:06:39.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I've been keeping these entries every day for months,""" start="00:06:46.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and that I cut and pasted in a month of data.""" start="00:06:48.160" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""Now I'm going to dig in a little bit to the Gnuplot script.""" start="00:06:51.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This here, all this stuff, is one component of the graph,""" start="00:07:00.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and I'll go over how it works.""" start="00:07:07.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""First, the items through this column declaration here,""" start="00:07:11.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and the id:myid, this columnview table here,""" start="00:07:19.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""\#+BEGIN: columnview, this whole bit here,""" start="00:07:30.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is going to get filled in with the corresponding columns,""" start="00:07:34.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""exercise minutes, sleep hours, nicotine doses.""" start="00:07:39.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""And then it gets pumped out by Org mode into a file""" start="00:07:43.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that looks like this: tab-separated values""" start="00:07:53.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with an ISO-style date at the beginning.""" start="00:07:59.841" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""So what we're going to do is we're going to go through""" start="00:08:03.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the Gnuplot portion of this,""" start="00:08:10.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and I'm going to enlarge the font a little.""" start="00:08:14.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm going to go line by line through the Gnuplot portion.""" start="00:08:21.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now, my template generator will give you one like this.""" start="00:08:23.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You don't have to write this from scratch.""" start="00:08:30.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""But I'm going to go through it line by line""" start="00:08:33.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because if you do use the template,""" start="00:08:35.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""then it'll help to have gone through it line by line,""" start="00:08:37.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because you're probably going to have to modify it.""" start="00:08:42.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So first, we're going to clear the graphics""" start="00:08:46.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""from any previous runs""" start="00:08:49.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so that if we reuse the same Gnuplot process,""" start="00:08:50.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""we're not overwriting the old--""" start="00:08:53.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that we are completely overwriting the old image.""" start="00:08:57.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So that's the purpose of this line here.""" start="00:09:00.720" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""The output parameters: we want to put out an SVG file.""" start="00:09:03.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Font Arial, that's funny,""" start="00:09:08.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but I don't know what font it's actually ending up choosing,""" start="00:09:13.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but it looks fine.""" start="00:09:16.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Then we want it to be square,""" start="00:09:16.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so I'm giving it 900 by 900 pixels,""" start="00:09:19.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""even though it is a scalable vector graphic.""" start="00:09:21.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""We're putting it in the same folder as the org file,""" start="00:09:23.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""example.svg.""" start="00:09:29.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""These lines here set it up to use the Org mode format""" start="00:09:30.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that we showed in the other file over here.""" start="00:09:39.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The time format is four-digit year, two-digit month,""" start="00:09:42.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""two-digit day.""" start="00:09:48.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The time format doesn't specify here the time,""" start="00:09:50.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but that doesn't seem to mess it up.""" start="00:09:56.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This line &quot;set datafile separator&quot; means that""" start="00:09:59.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the separators between that""" start="00:10:02.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and between all the other fields are tabs,""" start="00:10:04.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""which is what Org mode does""" start="00:10:06.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""when it spits out a table by default.""" start="00:10:08.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Okay, along to the next lines.""" start="00:10:11.000" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""We're going to set up for time series data,""" start="00:10:15.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""meaning that the x-axis is going to be time,""" start="00:10:18.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""x2tics 1 format.""" start="00:10:22.808" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I believe this means that every day has one tick""" start="00:10:26.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and that this tells it that the first--""" start="00:10:30.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""unfortunately, I forget the exact meaning of this one line.""" start="00:10:32.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm just going to move on. We want one X tick per day,""" start="00:10:39.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and because X is in seconds,""" start="00:10:44.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""it's 24 hours times 60 minutes times 60 seconds.""" start="00:10:46.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This line &quot;set grid xtics&quot; gives us""" start="00:10:50.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""a vertical line on each day of the graph.""" start="00:10:55.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'll pull up the graph""" start="00:10:57.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""just so that it's a little easier to see.""" start="00:10:58.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""All these vertical lines, one on each day,""" start="00:11:00.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that's given to you by &quot;set grid xtics&quot;.""" start="00:11:03.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""One Y tick every five points.""" start="00:11:06.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So here at five pieces of nicotine,""" start="00:11:10.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""we've got a five, at ten pieces – well,""" start="00:11:13.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""we don't want to eat ten pieces, but ten, fifteen, twenty.""" start="00:11:15.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Rotating the labels to make them fit a little bit better,""" start="00:11:19.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that's this part here where the labels are sideways,""" start="00:11:25.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and even with just one month of data,""" start="00:11:28.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""they're getting a little crowded.""" start="00:11:30.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This &quot;set key box lc&quot; just makes the line around the key,""" start="00:11:35.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the legend here, a little bit less severe.""" start="00:11:41.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""set xtics format: this makes it so that, for example,""" start="00:11:44.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I've done a United-States-style date here""" start="00:11:51.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with the month and then the day.""" start="00:11:53.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You don't necessarily have to do that.""" start="00:11:55.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You can have whatever you want.""" start="00:11:58.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This xtics format,""" start="00:12:01.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that relates to how the dates are printed.""" start="00:12:03.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Remember that over here, this set timefmt,""" start="00:12:06.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that relates to how the dates are formatted""" start="00:12:12.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""in the Org mode output.""" start="00:12:15.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So remember, those are two...""" start="00:12:17.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You don't want to mix those up.""" start="00:12:18.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""All right, &quot;yrange [0:40]&quot;.""" start="00:12:19.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Thus far, my exercise sessions have all been""" start="00:12:23.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""less than 30 minutes, and nothing's gone over 30.""" start="00:12:28.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""If you have a health variable""" start="00:12:31.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that is in a significantly different range,""" start="00:12:35.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you may need to get a slightly more complicated""" start="00:12:38.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Gnuplot script because it is possible to plot""" start="00:12:41.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""multiple yranges in one plot""" start="00:12:43.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""if you have a variable that uses a different range.""" start="00:12:46.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""It's just a little trickier.""" start="00:12:48.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""These parts here, aside from the fact""" start="00:12:49.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that you might make some changes that relate to""" start="00:12:55.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the date and your country format,""" start="00:12:59.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""are going to be the same.""" start="00:13:01.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is like boilerplate for almost anything.""" start="00:13:03.240" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""Now here are the parts that are going to vary""" start="00:13:05.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""depending on what health variables you want to store.""" start="00:13:09.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""There are three main sections here.""" start="00:13:13.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""One is setting the different line types that are used.""" start="00:13:18.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Setting linetype 1 with line width 2, line color RGB.""" start="00:13:28.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Unfortunately, Gnuplot is a little bit cryptic,""" start="00:13:32.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""which is why I've made this template generator""" start="00:13:34.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that I'll show you in a moment.""" start="00:13:36.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I pick a color. So this is exercise, forest green.""" start="00:13:38.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Point size 1, meaning you get""" start="00:13:43.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""these little green triangles about that size.""" start="00:13:49.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""But the point type 9 is the pointing up triangle.""" start="00:13:51.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Line type 2, purple. So that's the sleep line.""" start="00:13:54.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So we're just establishing these different line types""" start="00:13:59.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that we've given arbitrary numbers.""" start="00:14:03.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now onto the next section.""" start="00:14:04.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Oh, before I move on here,""" start="00:14:08.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""you can see point type 11 for line 5, which is red.""" start="00:14:12.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""And that's the missed medications line,""" start="00:14:16.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so you get a triangle that's upside down""" start="00:14:18.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because that's point shape 11.""" start="00:14:20.640" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""All right. The next section here is the goal lines.""" start="00:14:22.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""There are horizontal dashed lines here""" start="00:14:27.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""at 8 purple hours of sleep, because 8 hours is the goal.""" start="00:14:33.441" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So there's a horizontal line at Y = 8.""" start="00:14:37.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""For pieces of nicotine gum,""" start="00:14:41.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm trying to keep it to around 5 right now.""" start="00:14:43.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So my goal line is at 5. So these...""" start="00:14:46.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Here, a goal of at least 20 minutes of exercise.""" start="00:14:52.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Sometimes I get more, sometimes I get less.""" start="00:14:56.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""There's a green line and a 20, showing that that's the goal.""" start="00:14:59.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""These lines here are actually the goal lines.""" start="00:15:02.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""You can specify the goal for each one""" start="00:15:06.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""in the template generator that I'll show you.""" start="00:15:09.120" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""The last part is the actual plot command.""" start="00:15:12.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So the dependent... So okay,""" start="00:15:28.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""these all start with 1, &quot;using 1&quot; against this variable.""" start="00:15:30.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So $2... This is a ternary operator here""" start="00:15:34.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that says if the value of the second column is zero,""" start="00:15:41.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""then don't plot a point. In other words,""" start="00:15:49.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""not a number means it won't plot a point.""" start="00:15:52.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The template generator lets you skip over""" start="00:15:56.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the details of that. It sticks this in there.""" start="00:15:58.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'll show you.""" start="00:16:02.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So we only want to plot a point when the value is non-zero.""" start="00:16:02.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""If there was no exercise, we're not plotting a point.""" start="00:16:09.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The with construct means we'll plot data""" start="00:16:12.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""using date against exercise with points,""" start="00:16:15.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the title is &quot;exercise (minutes)&quot;, line type 1.""" start="00:16:21.341" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Remember, we established line type 1 up here""" start="00:16:25.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""as being forest green, point style 1,""" start="00:16:29.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""point type 9, green triangles.""" start="00:16:35.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now I'm going to show 1 against column 3,""" start="00:16:37.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""which is &quot;hours of sleep&quot;.""" start="00:16:42.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This one is plotted with lines,""" start="00:16:43.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""so we don't specify a point type or point size,""" start="00:16:46.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""just a line type 2. And remember, you can see""" start="00:16:48.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that line type 2 is defined as purple""" start="00:16:51.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""with point type 1, point size 1.""" start="00:16:55.241" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Okay, so I did specify point size and point type,""" start="00:16:57.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but because I'm not plotting with points,""" start="00:16:59.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""those are ignored.""" start="00:17:01.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Here we come to the line with nicotine.""" start="00:17:02.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The fourth column is the nicotine number,""" start="00:17:08.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the fourth column from the Org mode file.""" start="00:17:11.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So here you can see how we're telling Gnuplot""" start="00:17:13.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""to take each column of the tab-separated Org mode file""" start="00:17:16.008" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and put it into the graph.""" start="00:17:19.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The line types are set up here.""" start="00:17:21.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The goal lines are set up here.""" start="00:17:25.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""And then the actual plot command is set up here.""" start="00:17:30.800" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""So now we're going to work further backwards""" start="00:17:35.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""from this Gnuplot template""" start="00:17:41.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""to the template generator that I used to make it.""" start="00:17:42.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Now I'm not going to go into""" start="00:17:46.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""all of the details of the code,""" start="00:18:01.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but what I am going to show you is that""" start="00:18:03.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""there's a variable called `health-factors`.""" start="00:18:06.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""And what this does, this `health-factors-from-list`""" start="00:18:10.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""lets you specify, with a property list""" start="00:18:15.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""of keyword and value pairs""" start="00:18:20.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""(here's the keyword name and the value is exercise),""" start="00:18:22.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the goal that I want 20 minutes of exercise,""" start="00:18:24.800" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that the unit is minutes,""" start="00:18:28.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that the color is forest green, and so on.""" start="00:18:30.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The aspects of the Gnuplot setup""" start="00:18:36.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""have been abstracted here.""" start="00:18:39.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Eight hours of sleep is the goal here.""" start="00:18:43.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""The hours are units. What color,""" start="00:18:49.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""what thickness of the line.""" start="00:18:54.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Here we specify the number of points.""" start="00:18:55.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""There's references online""" start="00:19:00.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that show you what point types are what shapes in Gnuplot,""" start="00:19:01.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and so on and so forth.""" start="00:19:05.200" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""I'll walk through the code a little bit that does this,""" start="00:19:11.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that actually takes these pieces,""" start="00:19:17.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that takes this specification of what your variables are""" start="00:19:20.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and turns it into a template.""" start="00:19:24.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""First, I'm using EIEIO,""" start="00:19:30.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the object system that's included with GNU Emacs.""" start="00:19:37.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""It's a reasonable facsimile""" start="00:19:41.720" video="mainVideo-health" id="subtitle"]]
+[[!template text="""of the Common Lisp Object System.""" start="00:19:45.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""What I'm going to be doing here""" start="00:19:47.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is defining a class with each of those items,""" start="00:19:51.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""those properties that we talked about in that list""" start="00:19:56.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that lets you specify name, what the goal is,""" start="00:19:58.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""what the units are, and the Gnuplot things""" start="00:20:01.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""(the Gnuplot parameters like thickness,""" start="00:20:04.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""plot type, and all that) into a class that will then""" start="00:20:06.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""spit out the template once you feed it""" start="00:20:13.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""some of these health factor objects. So just a moment.""" start="00:20:16.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""For example, you can see that this template""" start="00:20:27.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""originally came from being generated by this code here.""" start="00:20:34.480" video="mainVideo-health" id="subtitle"]]
+[[!template text="""To use the template,""" start="00:20:46.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""to use this little template generator...""" start="00:20:52.960" video="mainVideo-health" id="subtitle"]]
+[[!template text="""See, here's where it spits out the line type""" start="00:20:55.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""given the pieces.""" start="00:21:06.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is all just text formatting.""" start="00:21:07.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is one of the things that Emacs Lisp""" start="00:21:09.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""just really excels at.""" start="00:21:11.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I need to take a piece of data""" start="00:21:13.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""like a list of health information,""" start="00:21:19.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""a list of health variables, what their units are,""" start="00:21:22.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and how they're supposed to be formatted in Gnuplot,""" start="00:21:25.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and go from that to the nice template.""" start="00:21:28.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""So that's pretty much the whole thing.""" start="00:21:30.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I want to see if there's anything I missed.""" start="00:21:31.720" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""Bring up the chart.""" start="00:21:41.000" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This has been really useful""" start="00:21:51.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""for communicating with healthcare professionals""" start="00:21:54.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because you are both on the same page""" start="00:21:59.600" video="mainVideo-health" id="subtitle"]]
+[[!template text="""about exactly what is happening,""" start="00:22:04.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""what's been happening because if... Let's say""" start="00:22:05.880" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that you're tired when you talk to your care provider.""" start="00:22:10.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Well, if you have objective information""" start="00:22:15.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that you've been recording every day,""" start="00:22:17.560" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that you're ahead of the game, really,""" start="00:22:18.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""because you don't need, necessarily, the presence of mind""" start="00:22:22.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""to be able to give your care provider""" start="00:22:25.120" video="mainVideo-health" id="subtitle"]]
+[[!template text="""a complete picture of what's going on in your world.""" start="00:22:27.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""If you can find those few minutes a day to enter--""" start="00:22:30.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""not even a few minutes,""" start="00:22:33.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""really just a minute to enter the data""" start="00:22:34.400" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and say what happened yesterday...""" start="00:22:37.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I'm finding over these months""" start="00:22:39.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""that I've been more in touch with my health when I can--""" start="00:22:42.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""not forced, but when I have the habit,""" start="00:22:45.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the consistent habit every single day""" start="00:22:49.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""of recording that data--I'm accountable to myself.""" start="00:22:52.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""It's interesting.""" start="00:22:55.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I guess it gets into a little bit of ideas""" start="00:22:57.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""about the Quantified Self""" start="00:23:01.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and how holding yourself accountable""" start="00:23:02.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""can change what you do and what the outcomes are.""" start="00:23:05.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Just look at this here.""" start="00:23:09.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Without getting into too much detail,""" start="00:23:14.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""one of the reasons I track my sleep is because,""" start="00:23:17.280" video="mainVideo-health" id="subtitle"]]
+[[!template text="""as you can see, my sleep""" start="00:23:19.680" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is not as well-regulated as most people,""" start="00:23:22.040" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and that's why I need to do that.""" start="00:23:26.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This was a time... 10, 12,""" start="00:23:31.440" video="mainVideo-health" id="subtitle"]]
+[[!template text="""here's 14 hours of sleep, that's depression.""" start="00:23:34.441" video="mainVideo-health" id="subtitle"]]
+[[!template text="""It oscillates a little bit. But then below the goal line,""" start="00:23:36.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""the things are a little more normal here.""" start="00:23:43.520" video="mainVideo-health" id="subtitle"]]
+[[!template text="""This is a little more normal.""" start="00:23:45.640" video="mainVideo-health" id="subtitle"]]
+[[!template text="""But then, really, without thinking about it too much,""" start="00:23:46.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I cut out the nicotine, and my sleep suffered.""" start="00:23:52.080" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Just the fact that I'm able to look and see that connection""" start="00:23:56.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""is really amazing to me.""" start="00:24:00.200" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Maybe I would have anyway,""" start="00:24:01.360" video="mainVideo-health" id="subtitle"]]
+[[!template text="""but looking at the whole months of data,""" start="00:24:02.760" video="mainVideo-health" id="subtitle"]]
+[[!template text="""there have been many things to discuss""" start="00:24:05.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and many things to think about.""" start="00:24:07.400" video="mainVideo-health" id="subtitle"]]
+[[!template new="1" text="""Because this is a short presentation,""" start="00:24:09.920" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I probably should wrap up.""" start="00:24:12.160" video="mainVideo-health" id="subtitle"]]
+[[!template text="""I just want to thank the whole Emacs community""" start="00:24:13.840" video="mainVideo-health" id="subtitle"]]
+[[!template text="""for being there and for including me in the conference""" start="00:24:18.240" video="mainVideo-health" id="subtitle"]]
+[[!template text="""and I hope to participate next year as well.""" start="00:24:23.320" video="mainVideo-health" id="subtitle"]]
+[[!template text="""Thank you so much.""" start="00:24:27.080" video="mainVideo-health" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20health%3A%20Health%20data%20journaling%20and%20visualization%20with%20Org%20Mode%20and%20gnuplot)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/health-before.md b/2022/info/health-before.md
new file mode 100644
index 00000000..68441993
--- /dev/null
+++ b/2022/info/health-before.md
@@ -0,0 +1,56 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, David O'Toole shares how he tracked and graphed his personal data using Org mode and Gnuplot, and how you can use a template generator to do the same. Afterwards, he will handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="health">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect stroke-width="3" x="564" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 25-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-health>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T20:00:00Z" end="2022-12-03T20:25:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~3:00 PM - 3:25 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~2:00 PM - 2:25 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~1:00 PM - 1:25 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~12:00 PM - 12:25 PM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~8:00 PM - 8:25 PM UTC <br />Saturday, Dec 3 2022, ~9:00 PM - 9:25 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~10:00 PM - 10:25 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~1:30 AM - 1:55 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~4:00 AM - 4:25 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~5:00 AM - 5:25 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="health-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="health-mainVideo" data="""
+00:00.000 Introduction
+00:33.640 How to take daily health journal items
+01:59.440 How to set up your org templates
+03:38.320 How to do it in GNU Emacs
+04:16.840 Overview of the presentation
+04:51.960 The journal
+05:52.800 The capture buffer
+06:51.320 The columnview table
+08:03.480 Gnuplot
+09:03.320 Output parameters
+10:15.480 Time series data
+13:05.920 Health variables
+14:22.680 Goal lines
+15:12.000 The Gnuplot command
+17:35.560 The template generator
+19:11.480 The code that creates a template
+21:41.000 The power of the chart
+24:09.920 Thanks
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.webm">Download --main.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/j4M57ijUYE4DMVwT9X3CYB">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="health-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="health-qanda" data="""
+00:50.800 Do you use this just for yourself? Or do you use this to discuss/show with doctors/health professionals?
+02:38.157 How do you input the health data?
+03:53.121 How do you track the various health statistics that you are gathering?
+04:50.422 It's possible to download data from the Apple watch's health app. Is it easy enough to incorporate those .csv files into your implementation of Gnuplot?
+06:48.800 Regarding the medication tracking you only have option to record missed or not. If one needs to take multiple medication throughout the day, how would you propose to track that? Within gnuplot or separate?
+08:27.720 How's the workflow when working on the gnuplot code?
+09:07.680 How much time does it take to process the amount of data that you add inside GNU Emacs?
+09:38.190 Will indent-guide behave well with yaml files for helm?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="health-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.webm">Download --answers.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.opus">Download --answers.opus (6.8MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/health-nav.md b/2022/info/health-nav.md
new file mode 100644
index 00000000..15fa5106
--- /dev/null
+++ b/2022/info/health-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/maint">Maintaining the Maintainers: Attribution as an Economic Model for Open Source</a>
+Next by track: <a href="/2022/talks/eev">Bidirectional links with eev</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/hyperorg-after.md b/2022/info/hyperorg-after.md
new file mode 100644
index 00000000..2de66414
--- /dev/null
+++ b/2022/info/hyperorg-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20hyperorg%3A%20Powerful%20productivity%20with%20Hyperbole%20and%20Org%20Mode)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/hyperorg-before.md b/2022/info/hyperorg-before.md
new file mode 100644
index 00000000..2b52af8c
--- /dev/null
+++ b/2022/info/hyperorg-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Bob Weiner discusses utilizing GNU Hyperbole action-oriented buttons in Org mode documents for interactive demos and task automation.
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="hyperorg-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--main.webm" />${captions}<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--main.webm">Download --main.webm (110MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--main.opus">Download --main.opus (19MB)</a></li><li><a href="https://toobnix.org/w/uz8zLQWbjGC49LSx3Y1Vx7">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="hyperorg-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.webm" />${captions}<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="hyperorg-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.webm">Download --answers.webm (42MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.opus">Download --answers.opus (15MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/hyperorg-nav.md b/2022/info/hyperorg-nav.md
new file mode 100644
index 00000000..d22df26b
--- /dev/null
+++ b/2022/info/hyperorg-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/rms">What I'd like to see in Emacs</a>
+Next by track: <a href="/2022/talks/detached">Getting detached from Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/indieweb-after.md b/2022/info/indieweb-after.md
new file mode 100644
index 00000000..ffe7d3c2
--- /dev/null
+++ b/2022/info/indieweb-after.md
@@ -0,0 +1,364 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="indieweb-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hey everyone, I'm Michael,""" start="00:00:00.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and I'm going to be talking about""" start="00:00:02.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Org mode and the IndieWeb.""" start="00:00:03.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I am located in the San Francisco Bay Area,""" start="00:00:06.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""where I'm a developer as well as""" start="00:00:08.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a longtime Emacs user.""" start="00:00:10.321" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""So, I maintain a personal website using Org mode.""" start="00:00:14.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""If you're watching this talk,""" start="00:00:17.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I'm going to guess that you probably are too.""" start="00:00:19.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""For anybody who isn't,""" start="00:00:21.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""let me explain exactly what I mean by that.""" start="00:00:24.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I have a static website. I author the pages""" start="00:00:28.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""in Org mode's markup language,""" start="00:00:32.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""otherwise known as Orgdown.""" start="00:00:34.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I use the Org export facility""" start="00:00:36.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to transcode that markup to HTML.""" start="00:00:38.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And then I just use rsync to push""" start="00:00:43.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the resulting HTML pages up to a VPS.""" start="00:00:47.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I like the workflow.""" start="00:00:51.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It's familiar to me as a coder.""" start="00:00:52.854" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I get to use familiar tools like Git and Make.""" start="00:00:57.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Publishing and then pushing the site""" start="00:01:03.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to a local test server is just `make`.""" start="00:01:06.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Pushing it to the live site is just `make prod`.""" start="00:01:09.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""That said, certain problems made themselves apparent""" start="00:01:13.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""with this arrangement pretty quickly.""" start="00:01:18.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Commenting was one. It's very difficult""" start="00:01:22.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to support commenting on a static website.""" start="00:01:25.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I've got no database.""" start="00:01:28.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I have no real server, and so on.""" start="00:01:29.501" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Yes, of course, there is Disqus""" start="00:01:34.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and other third party services""" start="00:01:35.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that will do this for you,""" start="00:01:37.868" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""but I was uncomfortable outsourcing that job.""" start="00:01:38.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And it was more than just comments.""" start="00:01:43.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""There was a general sense of isolation.""" start="00:01:45.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""There's no connection to places""" start="00:01:48.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""like Reddit, or Mastodon, or Twitter,""" start="00:01:50.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""you know, where all the people are.""" start="00:01:53.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I guess you can post, then Tweet a link to it.""" start="00:01:56.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""But suppose somebody responds to your Tweet.""" start="00:01:59.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Now you've got a conversation going on on Twitter""" start="00:02:01.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that you're a visitor, and""" start="00:02:05.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that a non-Twitter-using visitor to your site""" start="00:02:07.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""would be completely disconnected from.""" start="00:02:09.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I am seeing people using Reddit effectively""" start="00:02:15.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""as the comment section for their sites.""" start="00:02:19.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""But unless you've got an audience, you know,""" start="00:02:22.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the size of Derek's or Amos's,""" start="00:02:24.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I don't think that's really feasible either.""" start="00:02:27.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Now, after casting about for some time,""" start="00:02:32.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I stumbled upon something called the IndieWeb.""" start="00:02:34.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""In their own words, the IndieWeb is""" start="00:02:37.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a community of independent and personal websites""" start="00:02:39.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""connected by simple standards based on""" start="00:02:41.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the principles of owning your domain""" start="00:02:44.401" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and using it as your primary identity,""" start="00:02:46.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""publishing on your own site,""" start="00:02:48.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and optionally syndicating elsewhere,""" start="00:02:50.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and owning your data.""" start="00:02:52.418" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I would describe it as a collection of individuals""" start="00:02:54.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""who've chosen to own their own platforms,""" start="00:02:57.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""alongside a loosely specked set of standards""" start="00:03:01.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that tie those sites together.""" start="00:03:05.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And it's really those standards""" start="00:03:07.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that make the IndieWeb""" start="00:03:09.218" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""more than just a call for everybody""" start="00:03:10.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to go back to the arts""" start="00:03:13.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and blog on on their own sites.""" start="00:03:14.735" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Now, this presentation isn't going to""" start="00:03:17.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""focus on the IndieWeb as such.""" start="00:03:19.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It's more about using Org mode""" start="00:03:21.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to put your site on the IndieWeb.""" start="00:03:23.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I'm a little limited by time here,""" start="00:03:24.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""so I'm going to focus on""" start="00:03:28.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""just one of those protocols,""" start="00:03:30.351" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and that's Webmentions.""" start="00:03:32.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, what's a Webmention?""" start="00:03:33.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Let's begin with the inveterate Alice,""" start="00:03:35.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""who has a website""" start="00:03:38.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and has posted content to that site.""" start="00:03:39.468" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Her old friend Bob comes along,""" start="00:03:42.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""notices that content""" start="00:03:46.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and wishes to say something about it.""" start="00:03:47.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""He posts to his site""" start="00:03:49.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and his publication software will,""" start="00:03:51.468" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""if it supports Webmentions,""" start="00:03:54.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""will notice that he's mentioned Alice's post.""" start="00:03:57.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""At that point, his publication software""" start="00:04:00.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""reaches out to Alice's site,""" start="00:04:04.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""asks for the mentioned document,""" start="00:04:07.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and will examine it to see""" start="00:04:11.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""if Alice advertises an endpoint at her site""" start="00:04:12.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""capable of receiving Webmentions.""" start="00:04:15.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""In this case, it does.""" start="00:04:18.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, Bob's publishing software does it.""" start="00:04:19.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""At the end of the day,""" start="00:04:23.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a Webmention is really just""" start="00:04:24.468" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""an HTTP post request with two parameters,""" start="00:04:26.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a source and a target.""" start="00:04:30.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""On receipt, Alice's server will""" start="00:04:33.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""reach out to Bob's site,""" start="00:04:36.818" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""request the document that contains the mention,""" start="00:04:39.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and validate it, decide whether or not""" start="00:04:43.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""she wants to accept the Webmention.""" start="00:04:45.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""In this case, it's legit, it's accepted,""" start="00:04:48.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and Alice chooses to make a note,""" start="00:04:50.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to update her content,""" start="00:04:54.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to make a note of the fact""" start="00:04:56.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that it was mentioned by Bob.""" start="00:04:58.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Now a couple of things to note here.""" start="00:05:00.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The first is that this is effectively""" start="00:05:01.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""decentralized commenting.""" start="00:05:03.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Both parties own their content,""" start="00:05:04.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and there's no third party involved,""" start="00:05:07.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""trusted or otherwise.""" start="00:05:09.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Now at this point, you might object that, well,""" start="00:05:13.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""as the owner of a statically generated site,""" start="00:05:16.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I have essentially none of the infrastructure""" start="00:05:18.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I need to implement this.""" start="00:05:21.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I have no server above and beyond Apache.""" start="00:05:22.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I can't really…, I have no database.""" start="00:05:27.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I guess you could send Webmentions with curl,""" start="00:05:30.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""but now to do Webmention endpoint discovery,""" start="00:05:33.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""you're going to be parsing arbitrary HTML.""" start="00:05:37.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It's a lot of work.""" start="00:05:39.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""That's okay. There are sites out there""" start="00:05:41.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that offer Webmentions as a service.""" start="00:05:45.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, let's take a look at how that goes.""" start="00:05:48.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We return to our original example.""" start="00:05:51.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Alice continues to advertise an endpoint""" start="00:05:54.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""capable of receiving Webmentions,""" start="00:05:57.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""but it's no longer on her site.""" start="00:06:00.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It's at webmention.io.""" start="00:06:01.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Bob is essentially in the same position,""" start="00:06:03.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""but he now has in his world""" start="00:06:08.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a third party site called Telegraph.""" start="00:06:09.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""When Bob wants to publish,""" start="00:06:13.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""he no longer needs to go through all the work""" start="00:06:16.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""of sending Webmention,""" start="00:06:19.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and of carrying out Webmention endpoint discovery.""" start="00:06:21.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""He sends one API request to Telegraph,""" start="00:06:25.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""effectively saying, please send a Webmention for me.""" start="00:06:27.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Asynchronously, telegraph.io is going to""" start="00:06:31.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""retrieve Alice's post,""" start="00:06:36.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""do Webmention endpoint discovery,""" start="00:06:38.718" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and send the Webmention on Bob's behalf.""" start="00:06:41.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Except this time he's sending it to webmention.io.""" start="00:06:45.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Now, at some arbitrary point in the future,""" start="00:06:48.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Alice can ask webmention.io,""" start="00:06:53.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""&quot;Hey, do I have any new Webmentions?&quot;""" start="00:06:55.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And if she does, she may choose""" start="00:06:57.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to update her content and publish.""" start="00:07:00.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Okay, so let's code this up.""" start="00:07:04.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Now, I'm recording this talk""" start="00:07:07.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""about a month ahead of time""" start="00:07:09.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and I haven't been able to put together""" start="00:07:10.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a little demo project.""" start="00:07:12.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Hopefully, I can hack something together""" start="00:07:13.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""before this video streams.""" start="00:07:16.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""But in the meantime,""" start="00:07:18.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I'd like to imagine a little test site.""" start="00:07:20.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It has a single page,""" start="00:07:22.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""maybe we'll call it index.org,""" start="00:07:25.218" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and we're going to publish it.""" start="00:07:28.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We're going to export it to""" start="00:07:30.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a subdirectory of our project directory,""" start="00:07:32.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""simply called www.""" start="00:07:35.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, the entry point to the Org export system""" start="00:07:39.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""is the function org-publish,""" start="00:07:44.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""whose docstring helpfully says,""" start="00:07:46.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""it publishes all projects.""" start="00:07:49.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The set of all projects is defined by""" start="00:07:52.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the variable `org-publish-project-alist`,""" start="00:07:56.760" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""which is a very flexible association list""" start="00:07:59.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that lets you define""" start="00:08:02.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""what files are in your project,""" start="00:08:03.868" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""how you wish to export them,""" start="00:08:05.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""where they're going to go, etc, etc, etc.""" start="00:08:07.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So great. This is actually pretty straightforward.""" start="00:08:10.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We just give ourselves a little Elisp file""" start="00:08:13.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and a single function.""" start="00:08:15.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I'll call it publish,""" start="00:08:17.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and all it will do is define""" start="00:08:18.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""`org-publish-project-alist`""" start="00:08:22.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and invoke `org-publish-all`.""" start="00:08:25.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""At that point, exporting is a one-liner.""" start="00:08:26.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We just invoke Emacs, load up our site.el file,""" start="00:08:31.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and invoke the publish function.""" start="00:08:35.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And if we want to publish to the live server,""" start="00:08:37.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that's just another one-liner of ours.""" start="00:08:43.668" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, that's the publication framework.""" start="00:08:45.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Now, let's take a look at sending Webmentions.""" start="00:08:48.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The idea is that we're going to""" start="00:08:51.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""get our fingers into the publication process.""" start="00:08:54.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Note when we see a Webmention in""" start="00:08:57.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the process of exporting our Orgdown,""" start="00:09:01.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and write it out to disk for sending later on.""" start="00:09:04.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Now, I didn't want to send a Webmention""" start="00:09:07.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""for every single link in the post.""" start="00:09:11.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I wanted this to be an intentional choice.""" start="00:09:13.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And it turns out there are""" start="00:09:14.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""different sorts of Webmentions""" start="00:09:16.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""you can make on a page.""" start="00:09:19.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""For instance, if you add""" start="00:09:20.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the CSS class u-in-reply-to to your link,""" start="00:09:22.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the recipient will""" start="00:09:26.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""interpret this Webmention as a reply.""" start="00:09:28.635" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""There are similar CSS classes""" start="00:09:30.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""for likes, reposts, and generalized mentions.""" start="00:09:33.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""When the recipient gets your Webmention,""" start="00:09:37.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""if they want to know who's talking to them,""" start="00:09:42.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""they need to parse your page""" start="00:09:45.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and look for DOM elements with certain CSS classes""" start="00:09:47.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""defined by the protocol as well.""" start="00:09:51.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""I'm a visual thinker,""" start="00:09:54.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""so I kind of drew out the process of publication,""" start="00:09:57.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and exactly where we're going to""" start="00:10:00.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""get our fingers into this.""" start="00:10:03.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, this is me invoking make,""" start="00:10:05.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""which of course fires up Emacs.""" start="00:10:07.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Just as before, my publish function will define""" start="00:10:09.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""`org-publish-project-alist` with one difference.""" start="00:10:14.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""There is an attribute,""" start="00:10:17.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a property in the list called `publishing-function`.""" start="00:10:21.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We're going to need to customize that.""" start="00:10:23.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""As usual, we then call…,""" start="00:10:26.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""we kick off the process by calling `org-publish-all`.""" start="00:10:28.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""org-publish-all will invoke""" start="00:10:31.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""your publishing function""" start="00:10:36.468" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""for each page, and it will hand to""" start="00:10:37.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""your publishing function for each page.""" start="00:10:40.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The name of the file you're publishing,""" start="00:10:42.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""where it's going, and a parameter entitled plist.""" start="00:10:45.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""This is not super well documented.""" start="00:10:50.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""There are points in the docs""" start="00:10:53.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that refer to this as a communication channel.""" start="00:10:55.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""What I discovered by simply reading the code was that""" start="00:10:57.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""it's a property list that is initialized""" start="00:11:01.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""for each invocation of your publication function.""" start="00:11:04.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The initial properties are""" start="00:11:09.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""inherited from your project,""" start="00:11:13.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""but you are free to add properties as you go""" start="00:11:16.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to communicate between different portions""" start="00:11:20.801" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""of the publication process.""" start="00:11:23.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""My publication function really does one thing,""" start="00:11:25.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and that's simply swap out the HTML template""" start="00:11:30.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that's passed to `org-publish-to`.""" start="00:11:34.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Now, in order to take note of""" start="00:11:36.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""each Webmention that I send,""" start="00:11:43.696" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I took advantage of another""" start="00:11:45.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Org mode extension point""" start="00:11:47.585" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""called defining new link types.""" start="00:11:49.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Here you can see""" start="00:11:52.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I've created a new link type called reply.""" start="00:11:54.851" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""One of the attributes that you can attach to this""" start="00:11:58.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""is the function that is used to export your link.""" start="00:12:01.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I've elided the code for""" start="00:12:06.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""mentions, likes, and reposts.""" start="00:12:08.562" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""If you look at my export function,""" start="00:12:10.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""you can see that it ultimately yields""" start="00:12:13.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the appropriate HTML for this link.""" start="00:12:16.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Before that, it calls a little helper function""" start="00:12:19.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that will pull out the actual""" start="00:12:22.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""target URL of the link""" start="00:12:24.518" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and shove it into this communication channel""" start="00:12:26.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""under the property name `sp1ff/mentions`.""" start="00:12:28.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""So, `org-publish-to` is really the workhorse""" start="00:12:31.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""of the publication process.""" start="00:12:37.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The first thing it's going to do is""" start="00:12:40.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""transcode from the parsed Orgdown,""" start="00:12:42.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""which is an intermediate representation""" start="00:12:47.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""known as Org elements, to HTML.""" start="00:12:50.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""In particular, for every one of my new links""" start="00:12:53.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that I'm using to mark Webmentions,""" start="00:12:57.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""it's going to invoke my little export function.""" start="00:13:00.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And so as we work our way through the post,""" start="00:13:04.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I'm going to accumulate all the Webmentions""" start="00:13:06.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that I've made in the property list.""" start="00:13:09.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""The second step is to actually render""" start="00:13:10.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""the final HTML document,""" start="00:13:14.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and that's where my specialized template comes in.""" start="00:13:16.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""All I do there is, use it to get""" start="00:13:18.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""my authorship information into the page.""" start="00:13:21.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And then the last step is called finalization.""" start="00:13:24.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""At this point, we have the rendered HTML document,""" start="00:13:29.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and Org mode gives you an extension point here,""" start="00:13:32.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""where you can do arbitrary post-processing""" start="00:13:35.720" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""on that document.""" start="00:13:38.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I arguably abuse it to retrieve""" start="00:13:39.200" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""all the Webmentions I've made""" start="00:13:42.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""out of the communication channel""" start="00:13:44.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and write them to disk.""" start="00:13:46.280" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""At this point, when we type make,""" start="00:13:47.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""we wind up with the rendered HTML""" start="00:13:54.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""for our Orgdown document,""" start="00:13:59.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""along with a little text file""" start="00:14:01.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""in which we've recorded all the Webmentions""" start="00:14:03.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that need to be sent.""" start="00:14:06.040" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""The next step is to send said Webmentions.""" start="00:14:07.349" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""This is surprisingly easy in Emacs Lisp.""" start="00:14:11.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""This is my actual implementation.""" start="00:14:15.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I use the request.el package to talk to Telegraph.""" start="00:14:17.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And at this point, we really don't need to""" start="00:14:22.360" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""add a lot to our little site Elisp file.""" start="00:14:26.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I sketched out a `send-webmentions` implementation""" start="00:14:30.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that just goes through in a loop""" start="00:14:34.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and calls my send-webmention function.""" start="00:14:36.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And now publication becomes a two-step process.""" start="00:14:39.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""First, the org-publish, then sending Webmentions.""" start="00:14:42.640" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""Okay, so I realize this has been""" start="00:14:46.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a bit of a whirlwind.""" start="00:14:51.418" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""So, where are we now?""" start="00:14:52.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""We have a sample site that we can publish""" start="00:14:55.240" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and have sent Webmentions.""" start="00:15:00.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And we've done it with just Emacs, Org mode,""" start="00:15:02.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""a little Lisp, and a make file.""" start="00:15:05.480" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""If you'd like to see more,""" start="00:15:07.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I've put my library up on GitHub.""" start="00:15:09.080" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""It has logic for both""" start="00:15:11.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""sending and receiving Webmentions""" start="00:15:13.754" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""as well as something""" start="00:15:15.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that on the IndieWeb is called POSSE,""" start="00:15:16.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""which is an acronym standing for""" start="00:15:19.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Publish (on your) Own Site, Syndicate Elsewhere.""" start="00:15:22.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""What that means is that""" start="00:15:25.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""you turn the publication step""" start="00:15:27.818" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""from merely publishing new content to your site""" start="00:15:31.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""to also replicating it to places""" start="00:15:35.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""like Twitter and Facebook and so forth.""" start="00:15:36.920" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And also when people like, comment,""" start="00:15:39.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and retweet your content,""" start="00:15:44.120" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that gets fed back to your site,""" start="00:15:45.960" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""where you can display it as comments.""" start="00:15:47.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template new="1" text="""In terms of the future,""" start="00:15:51.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""I feel like I'm at a decision point.""" start="00:15:52.600" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Org mode is admirably flexible,""" start="00:15:54.520" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and I'm confident that I can continue to""" start="00:15:58.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""add support for IndieWeb protocols.""" start="00:16:00.320" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""On the other hand, it is so flexible""" start="00:16:02.560" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""that the process of figuring out""" start="00:16:05.440" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""which extension points to use in any situation""" start="00:16:07.880" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""is very challenging.""" start="00:16:10.680" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""When I started down this path,""" start="00:16:12.000" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""my mindset was keep it simple""" start="00:16:14.800" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""and let's just see how far I could get with Org mode.""" start="00:16:17.840" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""And I feel like I might be bumping up""" start="00:16:20.400" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""against the limitations of that approach now.""" start="00:16:23.160" video="mainVideo-indieweb" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:16:25.800" video="mainVideo-indieweb" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20indieweb%3A%20Putting%20Org%20Mode%20on%20the%20Indieweb)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/indieweb-before.md b/2022/info/indieweb-before.md
new file mode 100644
index 00000000..843d566c
--- /dev/null
+++ b/2022/info/indieweb-before.md
@@ -0,0 +1,62 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Michael Herstine shows how to set up Org Mode for sending and publishing Webmentions as part of the Indieweb. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="indieweb">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect stroke-width="3" x="603" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 17-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-indieweb>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T20:25:00Z" end="2022-12-04T20:45:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~3:25 PM - 3:45 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~2:25 PM - 2:45 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~1:25 PM - 1:45 PM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~12:25 PM - 12:45 PM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~8:25 PM - 8:45 PM UTC <br />Sunday, Dec 4 2022, ~9:25 PM - 9:45 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~10:25 PM - 10:45 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~1:55 AM - 2:15 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~4:25 AM - 4:45 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~5:25 AM - 5:45 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="indieweb-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="indieweb-mainVideo" data="""
+00:00.000 Introduction
+00:14.080 Maintaining a personal website using Org mode
+01:13.880 Problems with comments and isolation
+02:32.040 The Indieweb
+03:17.800 Webmentions
+05:00.600 Decentralized commenting
+07:04.160 The publication framework
+08:48.080 Sending Webmentions
+09:54.000 The process of publication
+11:36.840 Defining new link types
+12:31.920 org-publish-to
+14:07.349 Sending Webmentions with request.el
+14:46.520 Summary
+15:51.400 The future
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.webm">Download --main.webm (51MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/bTV1JohHSkRvnHYQKZ39hm">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="indieweb-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="indieweb-qanda" data="""
+00:00.000 Introduction
+01:05.500 Q0 - How did you create the drill down representation of the make call?
+02:22.132 Q1 - Have you seen Reclaim ID?
+02:22.840 Q2 - what happens when you republish or re-export the same post will the web mentions be sent out repeatedly
+03:14.300 Q3 - Backend storage - alternative to database
+04:01.107 Q4 - Any thoughts on using it with ox-hugo?
+05:27.632 Q6 - web 1, web 2 vs web3 (?)
+05:57.207 Intermission - opening the Q&A message
+08:12.207 Q7 - Cutting telegraph out of the equation?
+09:08.715 Q8 - Web3 - indieweb vs(?) static site
+09:55.232 Q9 - Do you have a process running on the webserver to receive requests?
+10:44.857 Q8 (bis) - discussion about Web3 + having a demo
+12:20.957 Q9 - How satisfied are you? - current vs alternative indieweb protocols
+13:44.440 Q10 - Are you not doing too much inside emacs?
+14:32.540 Q11 - If you start with Telegraph and then want to change the endpoint, what happens?
+15:55.814 Q12 - Have you seen Agregore browser?
+16:13.914 Q13 - Are you not doing too much inside emacs? (bis)
+17:33.690 Closing and moving to the next speaker
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="indieweb-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.webm">Download --answers.webm (39MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.opus">Download --answers.opus (6.7MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/indieweb-nav.md b/2022/info/indieweb-nav.md
new file mode 100644
index 00000000..dbe52317
--- /dev/null
+++ b/2022/info/indieweb-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/dbus">The Wheels on D-Bus</a>
+Next by track: <a href="/2022/talks/localizing">Pre-localizing Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/journalism-after.md b/2022/info/journalism-after.md
new file mode 100644
index 00000000..8df9d23a
--- /dev/null
+++ b/2022/info/journalism-after.md
@@ -0,0 +1,277 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="journalism-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""All right. Hello, everyone. Welcome to my talk.""" start="00:00:00.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""We'll be talking today about Emacs journalism""" start="00:00:06.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and what that means.""" start="00:00:10.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""First of all, I'd like to thank the EmacsConf organizers.""" start="00:00:12.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Thank you very much, Sacha, for being very patient with me.""" start="00:00:15.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Let's get right into it. So who's this talk for?""" start="00:00:20.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""First of all, it's for anyone""" start="00:00:22.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""who wants to learn about workflows""" start="00:00:24.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and how you can work with Emacs""" start="00:00:26.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to basically do anything you want.""" start="00:00:28.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And it's for all levels of Emacs lovers.""" start="00:00:31.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I'll keep it accessible.""" start="00:00:33.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""Why this talk? So first of all,""" start="00:00:36.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I want to share a lot of Emacs.""" start="00:00:37.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I also wanted to learn about workflows myself.""" start="00:00:40.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So what better way than to talk about them""" start="00:00:42.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to be able to learn? And we could maybe learn a thing""" start="00:00:46.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""or two about collaboration and using Emacs to that motive.""" start="00:00:49.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I think it's useful to try and figure out who am I?""" start="00:00:56.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Why am I having this talk? I'm a journalist based""" start="00:01:00.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""in Hong Kong and a documentary filmmaker. So that means""" start="00:01:03.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that I have interviews quite often.""" start="00:01:06.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I'm dealing with texts and subtitles,""" start="00:01:08.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which I have to transcribe.""" start="00:01:11.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And I'm also dealing with a lot of research.""" start="00:01:14.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So that means going through a lot of documents and a lot of,""" start="00:01:16.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""well, skimming through documents""" start="00:01:22.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to be able to have something to write.""" start="00:01:26.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And I also use Emacs since basically one year ago,""" start="00:01:30.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I started using it full time""" start="00:01:34.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to have a great detriment of my productivity.""" start="00:01:35.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So we'll be talking about, we'll be talking about, well,""" start="00:01:39.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""basically, my workflow for Emacs""" start="00:01:45.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and how I went about having an Emacs workflow.""" start="00:01:48.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""So what is best when you're thinking about your own workflow""" start="00:01:52.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and some things to think about journalism""" start="00:01:56.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and about using these kinds of tools""" start="00:01:59.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""in combination for this? So where do we all start?""" start="00:02:03.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Let's start with a simple-ish definition""" start="00:02:09.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""of what is a workflow. A workflow is""" start="00:02:11.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""any sequence of actions or tools you use to accomplish that.""" start="00:02:14.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So it doesn't have to be through text processing,""" start="00:02:18.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""though obviously being a text-oriented community,""" start="00:02:23.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""it will most likely be partially text.""" start="00:02:27.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But it's just about how we accomplish a task""" start="00:02:31.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and which tools and mindsets we go into it with.""" start="00:02:35.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""For example, let's talk about my old workflow.""" start="00:02:39.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""That workflow was basically just Google Drive""" start="00:02:42.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""using proprietary tools like Notion, Google Drive, Office,""" start="00:02:46.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Storyboarder, and for communication, WeChat.""" start="00:02:50.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""If I could forgive all the privacy concerns of WeChat,""" start="00:02:55.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I wouldn't, but I still wouldn't forgive""" start="00:02:59.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""the terribly buggy interface, and I hate it.""" start="00:03:03.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So there are certain tools that you have to use""" start="00:03:06.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and you have to modify your workflow""" start="00:03:09.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""or just adapt your workflow to the tools""" start="00:03:11.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that you have to use. So for me, unfortunately,""" start="00:03:13.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that means having to use WeChat. You compartmentalize it""" start="00:03:17.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and set it aside, try not to think about it too hard.""" start="00:03:23.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And this is the part that hurts the most, right?""" start="00:03:27.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""You're thinking about your workflow,""" start="00:03:29.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""you're thinking about, all right,""" start="00:03:31.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I have this thing that works, I don't think about it.""" start="00:03:32.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And all of a sudden, oh, I'm not happy""" start="00:03:37.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""with what I have right now. So let's get into,""" start="00:03:40.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""let's get into how, oops. So let's get into how and why""" start="00:03:44.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""we're not happy with our workflows.""" start="00:03:50.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Because obviously, it's quite nice""" start="00:03:51.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to not have to think about things.""" start="00:03:55.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But once you've thought about it,""" start="00:03:57.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and once you're not happy with how it works,""" start="00:03:58.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I think it's quite useful to think about""" start="00:04:01.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""why we're not happy about it.""" start="00:04:03.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""A huge part of what Emacs is being conscious of, well,""" start="00:04:05.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""how do we find our workflows?""" start="00:04:10.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""How do we find what we want to do? And for me, obviously,""" start="00:04:11.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""the best way to find that is to write it down""" start="00:04:17.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and to try and tailor my tools to it.""" start="00:04:19.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""This is what I came up with.""" start="00:04:24.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I want to be able to manage my accounting,""" start="00:04:26.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to manage collaboration. So: working on files""" start="00:04:28.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""alongside my colleagues, communication,""" start="00:04:30.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""so that's planning out and managing meetings,""" start="00:04:33.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""managing teammates, managing tasks, information gathering.""" start="00:04:38.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So that's what I was saying, going through documents,""" start="00:04:44.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""going through all these lists of tasks and all of these,""" start="00:04:45.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""not lists of tasks, all of these, well, basically,""" start="00:04:50.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""scientific papers, notes, references and wikis, media.""" start="00:04:54.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I want to be able to have a music player,""" start="00:04:59.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""a podcast player, a movie player. That's outside of work,""" start="00:05:02.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but it's still one of the tasks that I do. Media processing,""" start="00:05:06.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""so this is where my job kind of gets into it a bit more.""" start="00:05:10.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I want to be able to take notes""" start="00:05:13.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""on the media that I watch,""" start="00:05:15.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to transcribe the interviews""" start="00:05:16.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and even the conversations that I have,""" start="00:05:19.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to be able to later on have an easier time.""" start="00:05:21.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Photo editing, video editing, so unfortunately,""" start="00:05:26.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Emacs isn't quite quite oriented to that.""" start="00:05:32.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Graphic design, color grading, storyboarding.""" start="00:05:35.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And so obviously, you go into it a bit more.""" start="00:05:40.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So managing to do scheduling tasks, interviews,""" start="00:05:43.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""preparing shot lists, tracking time,""" start="00:05:46.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""setting daily work goals, setting priorities,""" start="00:05:49.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""independent tasks, publishing,""" start="00:05:53.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""so publishing stuff for my work on my work CMS,""" start="00:05:55.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""publishing stuff on my personal CMS,""" start="00:05:59.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""although that's not happened yet. I've been kind of busy.""" start="00:06:01.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Security and privacy, so making sure""" start="00:06:06.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that everything that I use respects my data and respects me.""" start="00:06:08.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Unfortunately, not the case, but you take what you can.""" start="00:06:13.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Text processing. So that's journaling,""" start="00:06:18.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""writing down articles, my personal wiki, my work wiki,""" start="00:06:20.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which I use to document, well, for example,""" start="00:06:26.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""several projects that I have currently.""" start="00:06:34.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I basically have my work wiki that I'm trying""" start="00:06:37.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to fill out where I'll be able""" start="00:06:43.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to basically go into it later on""" start="00:06:45.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and have my thoughts written down.""" start="00:06:47.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And programming, which I'm not very good at.""" start="00:06:50.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""Some people might have noticed""" start="00:06:56.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that this looks a lot like [literate] programming.""" start="00:06:59.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""If you go into my config file,""" start="00:07:17.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I have something kind of similar.""" start="00:07:18.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I was planning on having a bit more time""" start="00:07:20.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""for this presentation and making it stick to that.""" start="00:07:22.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But you'll see basically the mess that is my Emacs config.""" start="00:07:26.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But it kind of sticks to the same thoughts, right?""" start="00:07:31.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Text processing, web browsing, finances,""" start="00:07:33.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that's my accounting, media and research.""" start="00:07:37.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So my BibTeX... Here be dragons.""" start="00:07:39.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Terrible, terrible config""" start="00:07:43.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that I've stolen from plenty of people.""" start="00:07:45.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So basically, that's how Emacs fits into this.""" start="00:07:47.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So this is where I talk about literate configs""" start="00:07:52.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and how that's helped me. Obviously, I've extolled""" start="00:07:57.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""the virtue of literate configs""" start="00:08:01.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to quite an extent right here. It's basically...""" start="00:08:04.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""The concept is to have documents, living documents""" start="00:08:09.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and documentation as code.""" start="00:08:15.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So basically, let's go back into my config.""" start="00:08:18.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I talk about what the config file does, have code blocks.""" start="00:08:22.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So this is something that Emacs does. I'm pretty sure""" start="00:08:31.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that there are some resources about that accessible online,""" start="00:08:33.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which are even accessible in the Emacs Gulf. And so, yeah,""" start="00:08:36.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""basically just having everything accessible""" start="00:08:46.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""in one single source, one single file,""" start="00:08:50.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which allows you to basically put everything down""" start="00:08:52.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and integrate things from your config much much more easily.""" start="00:08:54.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""That's something that I found very useful in Emacs""" start="00:09:00.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and which I think everyone can benefit from""" start="00:09:05.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""or the idea of it, like having everything stored centrally.""" start="00:09:07.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""It doesn't have to be used just for Emacs.""" start="00:09:11.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""It can be used also, it can be used also for, for example,""" start="00:09:15.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""a Qt browser or for other window manager configs.""" start="00:09:22.000" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""That kind of thing.""" start="00:09:26.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And it's not been very easy to set a place.""" start="00:09:28.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I haven't done that just yet, but that's the plan.""" start="00:09:32.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""Basically, this is all thanks to Org mode.""" start="00:09:37.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So, small presentation of what Org mode is. Org mode""" start="00:09:41.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""is basically a project / task management,""" start="00:09:45.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""past management and task management,""" start="00:09:49.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and writing mode for Emacs.""" start="00:09:52.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I can just put in a heading to do Hello World,""" start="00:09:54.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""send a message to Rosie tomorrow about the shoot space MDS--""" start="00:10:00.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that's thanks to wonderful Doom Emacs--and schedule it.""" start="00:10:10.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I don't know. It's tomorrow. Let's go and set it to 9am.""" start="00:10:15.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And say, maybe it's it's tomorrow already. I've done it.""" start="00:10:21.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I've sent a message. Perfect. It's done.""" start="00:10:28.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And it also allows you to have an agenda view.""" start="00:10:31.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I hope there's nothing too compromising right here.""" start="00:10:33.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Whatever. It's fine. So it allows you""" start="00:10:37.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to basically manage your agenda from there.""" start="00:10:41.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And you might have seen me doing my little space nrf""" start="00:10:45.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and wonderful key binding by Org Roam. So this""" start="00:10:54.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""is also another thing which is quite quite nice""" start="00:10:58.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""with Emacs is that you can you can have Org Roam, which""" start="00:11:01.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""is basically a database management program.""" start="00:11:06.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I can have documentary ideas""" start="00:11:09.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and have basically my ideas which link up to another file.""" start="00:11:12.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So for example, this one, which I have nothing for,""" start="00:11:21.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but you get the idea. So it allows you to apps""" start="00:11:25.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to link up with different files and to manage your thoughts.""" start="00:11:29.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And this gets back into the workflow part of my talk,""" start="00:11:33.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which is, well, this, this is a way""" start="00:11:37.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to control what your workflow""" start="00:11:41.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""is control what the tools you're using are and to control,""" start="00:11:44.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""basically the way in which you interact""" start="00:11:49.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""with your technology.""" start="00:11:52.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""So I am getting back into the way that I collaborate.""" start="00:11:52.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Because obviously it's no good having just""" start="00:11:59.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""one Emacs user who's trying to share to share things""" start="00:12:02.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""with his editor. So I use pandoc.""" start="00:12:07.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""For example, let's go back into my file right here.""" start="00:12:11.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Obviously, I don't spend much time inside of tables.""" start="00:12:17.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But if I select this one, that's &quot;SPC m e&quot;.""" start="00:12:24.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Thank you, Doom Emacs for the for the keybindings.""" start="00:12:29.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And I can just export it via pandoc right here, So &quot;p&quot;.""" start="00:12:32.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And I can just export it to doc, docx, or export it to ODT.""" start="00:12:38.240" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So as an ODT file, which is typically what I do.""" start="00:12:50.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And then I just send it through WeChat,""" start="00:12:55.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which is not optimal, but I'm not allowed""" start="00:12:57.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""to do anything else. So it is what it is.""" start="00:13:00.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Basically, this is how I export my files. And I re-import,""" start="00:13:04.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I re-import them with pandoc as well.""" start="00:13:12.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So I convert my Pages files, which I receive""" start="00:13:15.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""through an ICS plugin. It's not quite finalized,""" start="00:13:19.800" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""so I'm not ready to show it,""" start="00:13:22.880" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but there's a link that I'll be putting""" start="00:13:24.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""in the description which talks about this.""" start="00:13:26.360" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So this is my sharing part.""" start="00:13:29.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""It's nothing very special, honestly.""" start="00:13:32.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""It's just making sure that your documents""" start="00:13:35.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""are able to be shared.""" start="00:13:38.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I have certain things. So for example,""" start="00:13:41.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""if I go into retro gaming in Hong Kong,""" start="00:13:44.080" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""if I go into my scripts, there are certain headings""" start="00:13:47.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which I have. So for example, they ignore...""" start="00:13:53.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""My editor doesn't like to have some headings.""" start="00:13:55.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But when I have a video script that I'm preparing,""" start="00:13:58.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I like to have them for my own organization""" start="00:14:02.600" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and for my thinking. So I keep them in right there""" start="00:14:05.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and put in ignore. This is the advantage""" start="00:14:09.400" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""of the Emacs because you can just SPC m e o o,""" start="00:14:11.761" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and this is ready to send, basically.""" start="00:14:17.281" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""There are ways to have export presets,""" start="00:14:20.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but I'm not quite there yet. It's a lot of work.""" start="00:14:24.040" video="mainVideo-journalism" id="subtitle"]]
+[[!template new="1" text="""So, getting back to my presentation.""" start="00:14:26.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""This all goes into basically other packages,""" start="00:14:30.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""which I want to implement, but I haven't been able to.""" start="00:14:36.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""My main conclusion: you don't have to get lost in the weeds.""" start="00:14:39.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I kind of did that while preparing this talk.""" start="00:14:43.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So basically, you don't have to do it all at once.""" start="00:14:48.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Don't let it consume your life.""" start="00:14:51.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I probably should have done this earlier.""" start="00:14:55.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But Emacs configs are forever work in progress.""" start="00:14:57.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So there are lots of features which you can add,""" start="00:15:02.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""a lot of things which you can implement if you only had,""" start="00:15:04.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I don't know, five weeks to be able to implement them.""" start="00:15:08.120" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""But you're working right now.""" start="00:15:11.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And this is a message to me five months ago.""" start="00:15:12.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Don't do it. Just keep working""" start="00:15:16.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and don't get lost in configuration all day.""" start="00:15:19.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""So yeah, basically the aim is to use software that you love,""" start="00:15:23.640" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but not die in the process.""" start="00:15:27.560" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And yeah, basically just using it as much as you can""" start="00:15:29.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""using fast software as much as you can.""" start="00:15:34.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I'm doing that as well for...""" start="00:15:36.520" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I have certain software such as storyboarder or bit tags,""" start="00:15:39.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""that kind of thing, which I try to use as much as possible,""" start="00:15:46.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""even outside of Emacs.""" start="00:15:50.160" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And the aim is to get the work done in the end.""" start="00:15:51.840" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I'm not an absolutist on this. So yeah, basically,""" start="00:15:56.280" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""let's keep modding our configs and having fun.""" start="00:16:00.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""If you've got any questions about the talk,""" start="00:16:03.920" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I'm happy to answer. I am a novice at this,""" start="00:16:06.480" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""both presenting in front of camera""" start="00:16:10.440" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and at talking about Emacs.""" start="00:16:12.960" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I'm sure I've gotten a few things wrong,""" start="00:16:15.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""and it's not been the smoothest talk, but it's 10pm, almost.""" start="00:16:18.680" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I need to get back home. Yeah, take care, everyone.""" start="00:16:23.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""Thanks again to the organizers. Here's my contact info.""" start="00:16:28.760" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""And I'll be in touch with the questions.""" start="00:16:32.720" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""I don't think I'll be able to do the live answers,""" start="00:16:36.200" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""but that's more or less it. Thanks so much for listening,""" start="00:16:38.320" video="mainVideo-journalism" id="subtitle"]]
+[[!template text="""if you've been listening, and take care.""" start="00:16:41.880" video="mainVideo-journalism" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20journalism%3A%20Emacs%20journalism%20%28or%20everything%27s%20a%20nail%20if%20you%20hit%20it%20with%20Emacs%29)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/journalism-before.md b/2022/info/journalism-before.md
new file mode 100644
index 00000000..6c1b25c5
--- /dev/null
+++ b/2022/info/journalism-before.md
@@ -0,0 +1,45 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="journalism">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect stroke-width="3" x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 17-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-journalism>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T14:05:00Z" end="2022-12-03T14:25:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~9:05 AM - 9:25 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~8:05 AM - 8:25 AM CST (US/Central)<br />Saturday, Dec 3 2022, ~7:05 AM - 7:25 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~6:05 AM - 6:25 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~2:05 PM - 2:25 PM UTC <br />Saturday, Dec 3 2022, ~3:05 PM - 3:25 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~4:05 PM - 4:25 PM EET (Europe/Athens)<br />Saturday, Dec 3 2022, ~7:35 PM - 7:55 PM IST (Asia/Kolkata)<br />Saturday, Dec 3 2022, ~10:05 PM - 10:25 PM +08 (Asia/Singapore)<br />Saturday, Dec 3 2022, ~11:05 PM - 11:25 PM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="journalism-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="journalism-mainVideo" data="""
+00:00.000 Introduction
+00:36.120 Why this talk
+01:52.160 Thinking about workflows
+02:39.120 My old workflow
+04:05.280 Finding my workflow
+06:56.800 Literate configuration
+09:37.640 Org Mode
+11:52.960 Collaborating with Pandoc
+14:26.960 You don't have to get lost in the weeds
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.webm">Download --main.webm (112MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.opus">Download --main.opus (9.9MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/nqaGcHbHSY2dGxVpzvc3WX">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="journalism-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="journalism-qanda" data="""
+00:58.920 Why was WeChat a necessity for you?
+02:33.520 Have you looked at crdt.el for collaborative real-time editing?
+05:11.520 Sharing Org Mode files is trickier than we expect. Do you do this?
+07:15.520 Do you use pandoc for incoming and outgoing docs? Do you find that repeated conversions lose document quality?
+10:16.520 What was your moment when you started to work in Emacs instead of config editing?
+12:53.520 Why is Emacs recommended for journalism?
+19:17.520 Do you use any fancy solutions for annotating text onto particular video timestamps?
+24:08.520 When you get stuck with an Emacs problem, is there somewhere you go to get help (nice place for non-tech people)?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="journalism-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.webm">Download --answers.webm (114MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.opus">Download --answers.opus (8.7MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/journalism-nav.md b/2022/info/journalism-nav.md
new file mode 100644
index 00000000..530eee48
--- /dev/null
+++ b/2022/info/journalism-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/sat-open">Saturday opening remarks</a>
+Next by track: <a href="/2022/talks/school">Back to school with Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/jupyter-after.md b/2022/info/jupyter-after.md
new file mode 100644
index 00000000..830fdf16
--- /dev/null
+++ b/2022/info/jupyter-after.md
@@ -0,0 +1,270 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="jupyter-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hi, my name is Blaine Mooers.""" start="00:00:00.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'm an associate professor of biochemistry""" start="00:00:03.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""at the University of Oklahoma Health Sciences Center""" start="00:00:05.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in Oklahoma City.""" start="00:00:08.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'm going to talk about the use of Emacs""" start="00:00:09.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to edit live Jupyter notebook cells""" start="00:00:12.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""as well as text areas on web pages.""" start="00:00:16.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So like a lot of technical workers,""" start="00:00:20.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I find myself having to write prose""" start="00:00:22.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in text areas on web pages,""" start="00:00:24.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""as well as working with code""" start="00:00:28.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in Jupyter notebooks and Colab notebooks,""" start="00:00:31.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and often I have wished for""" start="00:00:37.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""the full power of Emacs while doing so.""" start="00:00:39.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Well, now that is possible.""" start="00:00:43.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Actually, there are several solutions""" start="00:00:45.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that have been available for some time.""" start="00:00:46.800" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'm going to talk about one solution""" start="00:00:49.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that I'm familiar with and has worked out for me.""" start="00:00:50.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""So this requires the use of two software packages,""" start="00:00:55.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""GhostText and Atomic Chrome.""" start="00:00:58.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""GhostText is an extension for the web browser,""" start="00:01:01.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""whereas Atomic Chrome is a package for Emacs.""" start="00:01:04.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""You have to have both of these.""" start="00:01:07.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So Chrome is for the editor side""" start="00:01:10.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and GhostText handles the browser side.""" start="00:01:13.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""The GhostText extension is available""" start="00:01:18.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in the Chrome web store.""" start="00:01:22.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And GhostText is represented by this icon,""" start="00:01:26.800" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""which has a ghost in front of the capital letter T.""" start="00:01:29.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""It is being developed by Federico Brigante.""" start="00:01:31.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""He is a very prolific JavaScript developer.""" start="00:01:36.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""He has a web page committed to GhostText,""" start="00:01:41.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""as well as a GitHub site.""" start="00:01:44.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So here's an example of GhostText.""" start="00:01:47.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This is a snapshot from a session""" start="00:01:50.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that I had while editing LaTeX on the Overleaf website.""" start="00:01:54.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Overleaf is this web service""" start="00:02:01.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that empowers the editing of LaTeX documents on the web.""" start="00:02:03.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I have clicked on this GhostText icon in the toolbar.""" start="00:02:09.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I had already opened up Emacs,""" start="00:02:14.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and I had the Atomic Chrome server running.""" start="00:02:17.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So a connection was established,""" start="00:02:19.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""as indicated by this blue border around this text area.""" start="00:02:21.800" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And as soon as that appeared,""" start="00:02:28.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""the text appeared in a buffer inside of Emacs.""" start="00:02:30.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I have overlaid the area where normally the compiled PDF""" start="00:02:35.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""would appear in an Overleaf session.""" start="00:02:40.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I'm using a configuration for LaTeX that I developed,""" start="00:02:43.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""which is available through the MooersLab GitHub site.""" start="00:02:47.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I also gave a talk about how I use LaTeX in Emacs""" start="00:02:52.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""at the Berlin Emacs meetup in August.""" start="00:02:55.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This talk was not recorded,""" start="00:02:58.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""but the slides are available on this website.""" start="00:03:00.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I would like to now switch to a little live coding""" start="00:03:05.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to make this a little more interesting.""" start="00:03:09.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I start my day at this other website called 750Words.""" start="00:03:12.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""This site just takes plain text,""" start="00:03:22.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""but I like to write in LaTeX.""" start="00:03:25.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So GhostText came to my rescue""" start="00:03:28.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""when I started using this everyday last May.""" start="00:03:31.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I clicked on the GhostText icon.""" start="00:03:34.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""It highlighted that area in blue.""" start="00:03:37.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""There's some boilerplate""" start="00:03:39.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that I like to start my day with.""" start="00:03:41.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I like to get a list of my deadlines""" start="00:03:45.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that are coming up, as shown here,""" start="00:03:50.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""for the next several months.""" start="00:03:54.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then I have landed at this tab stop.""" start="00:03:55.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And so I had issued a tab trigger""" start="00:03:59.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""which inserted this almost 50 lines of text""" start="00:04:04.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""from a snippet through Yasnippet.""" start="00:04:09.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then I'll change this text to whatever.""" start="00:04:13.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then I can hit TAB to move to the next site.""" start="00:04:17.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I was dead tired last night, so I fell asleep at my desk,""" start="00:04:29.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and whatever. So I just keep on going""" start="00:04:38.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and then hit TAB again and enter my &quot;To Be Done&quot; items.""" start="00:04:42.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then what I love about Emacs is that""" start="00:04:47.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""you can hit C-c C-j to insert a new item and so forth,""" start="00:04:50.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""so you can extend the list.""" start="00:04:56.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Initially, I just have 10 items.""" start="00:05:03.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'm going to have more. And on I go,""" start="00:05:05.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""using the full power of LaTeX.""" start="00:05:08.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I have configured Atomic Chrome""" start="00:05:12.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""so it will recognize this website as a –""" start="00:05:16.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""it will open up this website –""" start="00:05:20.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""the connection to this website with this buffer""" start="00:05:21.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in the LaTeX major mode. To turn this off,""" start="00:05:26.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""we can close – simply just close the buffer""" start="00:05:36.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and that will shut things down.""" start="00:05:40.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""On the browser side, you can right-click on the icon""" start="00:05:42.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and disconnect GhostText on this page.""" start="00:05:46.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Okay, let's go to a different situation.""" start="00:05:49.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This is not a feature that's advertised by the developer,""" start="00:05:53.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""but I discovered that you can edit code cells""" start="00:05:57.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""(or any kind of cell for that matter)""" start="00:06:00.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in a Jupyter Notebook.""" start="00:06:02.800" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""However, we have a challenge here.""" start="00:06:04.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""We have three text areas open – three code cells.""" start="00:06:05.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So if we click on the GhostText icon,""" start="00:06:09.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""these three areas will show up in green""" start="00:06:14.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we'll be prompted to select the one""" start="00:06:17.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that we want to activate.""" start="00:06:19.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""We want to activate the one with text.""" start="00:06:20.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So then we can go in here and make edits, of course,""" start="00:06:22.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and you can do this in Emacs""" start="00:06:31.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""or we can do it in the browser. It doesn't matter.""" start="00:06:33.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""You saw me editing in Emacs,""" start="00:06:35.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""but we can also make the edits""" start="00:06:38.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in the text area of the browser""" start="00:06:40.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and they will show up immediately in Emacs.""" start="00:06:44.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So we could change the case of that M and that's going to –""" start="00:06:47.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""shows up over here. Okay, we can run this code.""" start="00:06:54.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So this is R, one of the three major""" start="00:06:59.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""programming languages for data science.""" start="00:07:03.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""At least, Jupyter is supposed to be""" start="00:07:05.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""a combination of Julia, Python, and R.""" start="00:07:07.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So we're running mcmc to get the posterior distribution""" start="00:07:13.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we're going to plot those out with this pyplots package,""" start="00:07:17.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we have these beautiful plots showing the median""" start="00:07:21.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""of the posterior distribution for four variables in –""" start="00:07:24.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""four parameters in the CARS data set,""" start="00:07:27.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""which is available – built into the R package.""" start="00:07:31.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then these shaded areas are the 80% interval.""" start="00:07:38.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Okay. Oops.""" start="00:07:45.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So now for the Python side,""" start="00:07:49.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""here's an example in which I'm going to actually""" start="00:08:07.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""insert a snippet of that cell""" start="00:08:13.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and then I'm going to enter nvlig for nglview ligand,""" start="00:08:18.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and just hit enter. Oops. Hit TAB, excuse me,""" start="00:08:27.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we don't need this line of code, so delete that.""" start="00:08:43.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Yep, we want to load up this pdb file""" start="00:08:48.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that's in this subdirectory.""" start="00:08:52.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So the pdb file is a plain text file""" start="00:08:54.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that contains atomic coordinates""" start="00:08:56.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""of protein crystal structure.""" start="00:08:58.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This protein happens to be important in cancer""" start="00:09:00.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we have – we screened by docking 55,000 compounds""" start="00:09:03.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""on a supercomputer""" start="00:09:09.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and then we did MD [molecular dynamics] simulations""" start="00:09:10.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""of the top 10 [actually 20] leads.""" start="00:09:12.744" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Twelve of them had the compound remain bound""" start="00:09:14.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""during the period of the simulation,""" start="00:09:18.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""so those have some potential for –""" start="00:09:19.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and require experimental validation.""" start="00:09:22.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So we'll run this chunk of code,""" start="00:09:25.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and this will give a view of the molecule""" start="00:09:28.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""that we can interact with by using the mouse.""" start="00:09:30.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""But I want to share this with my colleague.""" start="00:09:36.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""My colleague is not set up to use Jupyter,""" start="00:09:39.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""but instead we can write this out to a HTML file,""" start="00:09:42.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""which I have loaded up already.""" start="00:09:46.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And so we can actually – perhaps.""" start="00:09:48.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""We click on these two arrows pointing at each other,""" start="00:09:55.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we can get a full screen view of this molecule""" start="00:10:01.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and he can identify each atom in this structure.""" start="00:10:05.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Over a thousand atoms present.""" start="00:10:10.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""We're just hovering over a specific atom.""" start="00:10:12.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So shown in gray is the ligand that is bound. Okay.""" start="00:10:14.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So we still have this box selected""" start="00:10:27.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and we still have these two different –""" start="00:10:32.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""so for each of the – our selected text areas""" start="00:10:36.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""we have a separate – we have a separate buffer open. Okay.""" start="00:10:40.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""To wrap things up here, here's an example of using –""" start="00:11:03.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""with evolving Julia code.""" start="00:11:06.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And so this Julia code in this cell is in a Emacs buffer.""" start="00:11:08.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""So you've got an idea now, I think.""" start="00:11:12.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So in terms of plain text areas like in Overleaf""" start="00:11:19.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and then these cells in Jupyter Notebooks,""" start="00:11:23.760" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""these are other areas that can be edited""" start="00:11:27.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""like in the text areas within Outlook Webmail and Gmail.""" start="00:11:30.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Instead of having to point with the mouse""" start="00:11:37.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""or click with the mouse,""" start="00:11:42.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""one can also use keybindings or keyboard shortcuts.""" start="00:11:43.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So here are the ones for three major operating systems.""" start="00:11:48.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So how does GhostText work?""" start="00:11:51.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Main thing is you have to open up Emacs""" start="00:11:54.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and get this Atomic Chrome server running.""" start="00:11:57.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""And then with it up and going,""" start="00:11:59.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""GhostText will be able to – has to be activated""" start="00:12:03.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and it will find the GhostText server""" start="00:12:06.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""through the localhost port 4001.""" start="00:12:09.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Put that into the web browser.""" start="00:12:15.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""If you navigate to that port,""" start="00:12:19.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""you'll get output that looks like this""" start="00:12:21.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""if everything's working well.""" start="00:12:23.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Otherwise, you'll get a error message""" start="00:12:25.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and it should have a port socket –""" start="00:12:27.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""a web socket port number.""" start="00:12:30.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""It will not be the same every time.""" start="00:12:34.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So these are the supported web browsers""" start="00:12:36.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in addition to Chrome. These are supported""" start="00:12:42.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""and likewise anything in these –""" start="00:12:45.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""any browser related to these""" start="00:12:47.280" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""can probably use these extensions.""" start="00:12:49.880" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""For example, the Brave browser will use Chrome extension""" start="00:12:53.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and the Firefox browser extension works with WaterFox.""" start="00:12:56.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""These are the supported editors.""" start="00:13:01.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Each editor has its own extension""" start="00:13:05.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and this GhostText was initially developed for SublimeText.""" start="00:13:10.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So if you have SublimeText,""" start="00:13:15.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""then you can use its smooth operation as positive control""" start="00:13:17.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""when things go wrong with Emacs.""" start="00:13:21.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This is Atomic. This is a GitHub site for Atomic Chrome.""" start="00:13:25.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Atomic Chrome is available for installation through Melpa.""" start="00:13:29.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""This is my configuration for Atomic Chrome.""" start="00:13:33.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I have this setup so the server starts whenever I log in,""" start="00:13:40.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and I have it set up so that default major mode is Python""" start="00:13:45.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to deal with the Jupyter notebooks and Colab notebooks.""" start="00:13:50.320" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then I have major modes""" start="00:13:55.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""for these other websites defined below.""" start="00:13:57.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This is a testing site so the developer has made""" start="00:13:59.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to help with troubleshooting.""" start="00:14:06.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""He also has a protocol on his website""" start="00:14:08.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to follow during troubleshooting.""" start="00:14:11.160" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So here are some precautions.""" start="00:14:13.560" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""You'll find that GhostText doesn't work with Pluto.""" start="00:14:16.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Pluto is a new computational notebook""" start="00:14:19.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""for working with Julia.""" start="00:14:21.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""My suggestion would be just to run IJulia in Jupyter.""" start="00:14:23.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""It also doesn't work, of course, with RStudio.""" start="00:14:27.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Even though RStudio sort of resembles""" start="00:14:32.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""a web page, web browser, it's not.""" start="00:14:35.200" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Of course, you can always run R,""" start="00:14:39.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""as you've just seen, using the IPy kernel.""" start="00:14:41.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I will also caution you that if you use the Emacs server,""" start="00:14:48.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""you may run into issues""" start="00:14:52.240" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""with the server competing with the port 4001.""" start="00:14:53.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So instead, you should probably configure the Emacs server""" start="00:14:58.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""to use a specific port.""" start="00:15:01.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So far – although I haven't done that myself –""" start="00:15:05.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""so far, I haven't found any conflicts""" start="00:15:07.640" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""with the Org Roam user interface.""" start="00:15:11.000" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So my conclusions are: GhostText allows you to edit prose""" start="00:15:13.480" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""with your favorite major mode""" start="00:15:20.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""in the text areas of web pages""" start="00:15:24.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and in the cells of Jupyter notebooks.""" start="00:15:28.120" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""This allows you to tap into snippets""" start="00:15:31.080" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and thereby save time as you have – probably have –""" start="00:15:34.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""hopefully got an idea of.""" start="00:15:37.520" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'd like to thank my friends and mentors""" start="00:15:39.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""who've helped me out during my second year""" start="00:15:44.040" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""in my Emacs learning spiral.""" start="00:15:46.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template new="1" text="""These include my local colleagues.""" start="00:15:49.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""We meet once a month in the Oklahoma Data Science Workshop.""" start="00:15:55.840" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Last July, I gave a presentation about GhostText.""" start="00:15:58.680" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""And then also my friends at Berlin and Austin Emacs meetups""" start="00:16:01.720" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""and in the UK research software engineer""" start="00:16:08.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Emacs research Slack channel.""" start="00:16:12.960" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""So I don't attend these every month,""" start="00:16:17.600" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""but I try to make the meetings as often as I can.""" start="00:16:18.920" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""Then I'm supported by the following grants,""" start="00:16:21.440" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""which allow me to spend""" start="00:16:25.400" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""at least some time each day in Emacs.""" start="00:16:28.360" video="mainVideo-jupyter" id="subtitle"]]
+[[!template text="""I'll be happy to take any questions.""" start="00:16:30.680" video="mainVideo-jupyter" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [Blaine-Mooers@ouhsc.edu](mailto:Blaine-Mooers@ouhsc.edu?subject=Comment%20for%20EmacsConf%202022%20jupyter%3A%20Edit%20live%20Jupyter%20notebook%20cells%20with%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/jupyter-before.md b/2022/info/jupyter-before.md
new file mode 100644
index 00000000..f64c7d85
--- /dev/null
+++ b/2022/info/jupyter-before.md
@@ -0,0 +1,52 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Blaine Mooers shows how to use GhostText and Atomic Chrome to edit Jupyter notebook cells and other text areas within Emacs. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="jupyter">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect stroke-width="3" x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 18-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-jupyter>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T20:45:00Z" end="2022-12-03T21:05:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~3:45 PM - 4:05 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~2:45 PM - 3:05 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~1:45 PM - 2:05 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~12:45 PM - 1:05 PM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~8:45 PM - 9:05 PM UTC <br />Saturday, Dec 3 2022, ~9:45 PM - 10:05 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~10:45 PM - 11:05 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~2:15 AM - 2:35 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~4:45 AM - 5:05 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~5:45 AM - 6:05 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="jupyter-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="jupyter-mainVideo" data="""
+00:00.000 Introduction
+00:51.520 GhostText and Atomic Chrome
+01:26.920 GhostText
+03:13.120 Live coding demo
+05:57.040 Editing code cells
+07:57.160 Python
+11:11.040 Julia
+11:59.600 How does GhostText work?
+12:44.320 Supported web browsers
+13:33.000 Atomic Chrome configuration
+14:21.560 Precautions
+15:21.480 Conclusions
+15:48.560 Thanks
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.webm">Download --main.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.opus">Download --main.opus (8.4MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--slides.pdf">Download --slides.pdf (2MB)</a></li><li><a href="https://toobnix.org/w/3umjDWcUmHoypvBnzw7dTQ">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="jupyter-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="jupyter-qanda" data="""
+01:00.520 Do you have a favorite color theme?
+01:54.360 To your knowledge, are recent coming security changes in Chrome going to impact browser extensions?
+03:07.960 Is this browser-agnostic, or do you have to use Chrome?
+03:47.580 You mentioned a couple other solutions to allow emacs editing of text areas. Pointers?
+05:49.520 Why not save text from Emacs?
+08:03.320 Have you been talking with John Kitchin?
+10:06.160 Journey
+11:37.560 What was the keybinding for Linux Firefox?
+12:44.960 How long have you been using Emacs?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="jupyter-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.webm">Download --answers.webm (34MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.opus">Download --answers.opus (5MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/jupyter-nav.md b/2022/info/jupyter-nav.md
new file mode 100644
index 00000000..bef304bc
--- /dev/null
+++ b/2022/info/jupyter-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/eev">Bidirectional links with eev</a>
+Next by track: <a href="/2022/talks/haskell">Haskell code exploration with Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/justl-after.md b/2022/info/justl-after.md
new file mode 100644
index 00000000..25ce11e8
--- /dev/null
+++ b/2022/info/justl-after.md
@@ -0,0 +1,290 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="justl-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hi everyone, I am Sibi Prabakaran""" start="00:00:00.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and welcome to my session on Justl Emacs Mode.""" start="00:00:04.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""A bit about me, I have been working""" start="00:00:09.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""as a Haskell Engineer""" start="00:00:11.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""at FPComplete for the last 4 years.""" start="00:00:12.880" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I am based out of India.""" start="00:00:15.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I occasionally blog at my website psibi.in""" start="00:00:17.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""where you can find more information about me.""" start="00:00:20.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I have been using Emacs""" start="00:00:23.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""for more than a decade now.""" start="00:00:25.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I help in the maintenance""" start="00:00:26.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""of the Terraform client for LSP mode.""" start="00:00:28.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I have also authored dhall-mode and rego-mode""" start="00:00:31.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which are the major modes""" start="00:00:33.960" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""for the respective languages.""" start="00:00:35.000" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Before jumping into the demo""" start="00:00:39.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""of the Emacs package,""" start="00:00:40.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I would like to give a brief introduction""" start="00:00:42.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""about justfiles and what it is.""" start="00:00:44.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I will also try to compare it with Makefiles""" start="00:00:46.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""as it takes a lot of inspiration from it.""" start="00:00:49.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""What you see currently in the buffer""" start="00:00:53.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is a sample justfile.""" start="00:00:55.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""If you have previously used Makefiles,""" start="00:00:57.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you would be able to see""" start="00:00:59.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""that there is quite a bit of similarity""" start="00:01:00.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""between them.""" start="00:01:02.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Anything that starts with hash""" start="00:01:03.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is a documentation comment.""" start="00:01:05.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can see that I have the first recipe""" start="00:01:07.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which is named as default.""" start="00:01:09.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""So if you run the just executable""" start="00:01:10.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""without any arguments,""" start="00:01:12.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by default it is going to run""" start="00:01:14.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the first recipe.""" start="00:01:15.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""This recipe's definition""" start="00:01:17.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""calls the just command""" start="00:01:18.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in turn, with the two arguments,""" start="00:01:20.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""namely --list and --unsorted,""" start="00:01:21.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which basically asks just""" start="00:01:24.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to list down all the recipes""" start="00:01:25.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in an unsorted order.""" start="00:01:27.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Each line of each recipe is executed""" start="00:01:29.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by a fresh shell.""" start="00:01:32.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""That pretty much""" start="00:01:33.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is the high level overview""" start="00:01:35.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""of getting started to use this tool.""" start="00:01:36.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""This tool assumes the presence of a shell""" start="00:01:38.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which is bash in most GNU/Linux systems,""" start="00:01:40.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but you can configure it""" start="00:01:43.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to explicitly use any specific shell""" start="00:01:44.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you have in mind.""" start="00:01:47.160" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Let me in fact go and try executing""" start="00:01:48.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the first recipe.""" start="00:01:50.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I will first execute it""" start="00:01:52.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""without any arguments,""" start="00:01:53.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which will force it to run the first recipe.""" start="00:01:55.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see, it listed all the recipes.""" start="00:01:59.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Now I can actually execute""" start="00:02:01.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a particular recipe""" start="00:02:03.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by passing an explicit recipe name.""" start="00:02:04.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me execute the hello recipe now""" start="00:02:06.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which will basically print &quot;hello world&quot;.""" start="00:02:08.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""It works as expected.""" start="00:02:11.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see, that's all that's required""" start="00:02:15.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to get started with this tool.""" start="00:02:17.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You create a file named justfile""" start="00:02:18.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in a directory, define some recipes""" start="00:02:20.349" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and then run them""" start="00:02:22.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""via the just executable.""" start="00:02:23.640" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Note that there are""" start="00:02:27.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""various other features in justfile.""" start="00:02:28.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can define variables,""" start="00:02:30.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""mark some variables""" start="00:02:32.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to be exported as environment variables,""" start="00:02:33.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""have optional parameters""" start="00:02:35.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""that can be passed to a recipe.""" start="00:02:37.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can also set up dependency""" start="00:02:38.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""between recipes""" start="00:02:40.960" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and also write scripts within a recipe""" start="00:02:42.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in a language of your choice.""" start="00:02:44.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I won't be going into the details,""" start="00:02:46.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but I encourage you to go through""" start="00:02:48.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the very helpful manual page""" start="00:02:50.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to learn more about it.""" start="00:02:51.640" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Also, let me compare it with Makefiles.""" start="00:02:56.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I do think it's kind of unfair""" start="00:02:59.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to compare both the tools""" start="00:03:00.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""since make is a build automation tool""" start="00:03:02.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""whereas just's goal is a task runner,""" start="00:03:04.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and since just doesn't try to be""" start="00:03:07.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a build system,""" start="00:03:09.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it can avoid the associated complexity""" start="00:03:10.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""that comes with the tool like make.""" start="00:03:12.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""There is one nice historical fact""" start="00:03:15.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""about just.""" start="00:03:17.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""The initial version of just""" start="00:03:18.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""relied on make command being available,""" start="00:03:19.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""so it was basically""" start="00:03:21.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a glorified wrapper around it.""" start="00:03:23.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""But it was removed,""" start="00:03:25.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and justfile doesn't have""" start="00:03:26.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""that dependency anymore.""" start="00:03:27.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""If you are using make as a task runner""" start="00:03:29.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""then you would have to use""" start="00:03:31.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""something called phony targets.""" start="00:03:33.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I don't want to go into the details,""" start="00:03:35.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but makefiles have good reason""" start="00:03:37.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""for why they need something like that.""" start="00:03:39.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Since justfile is not a build system,""" start="00:03:41.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it doesn't have to deal with them.""" start="00:03:44.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""The error message""" start="00:03:45.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and user experience of this tool,""" start="00:03:47.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in my opinion, is better.""" start="00:03:48.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""To show you a concrete example,""" start="00:03:50.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""justfile errors out by default""" start="00:03:52.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""if you have duplicate recipes.""" start="00:03:54.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""This is in contrast with make""" start="00:03:56.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""where I believe it prints out""" start="00:03:58.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a warning about it,""" start="00:04:00.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but still executes the target action.""" start="00:04:01.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Justfile also gives you the ability""" start="00:04:03.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to easily create scripts""" start="00:04:06.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""written in any language within a recipe.""" start="00:04:08.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""My personal opinion is that""" start="00:04:10.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""if you are using makefile""" start="00:04:12.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""as a task runner,""" start="00:04:14.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you might want to check out justfile""" start="00:04:15.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to see if it will suit your workflow.""" start="00:04:17.440" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""With that, I'll move on to justl.el,""" start="00:04:19.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which is basically an Emacs package""" start="00:04:25.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""for driving justfiles.""" start="00:04:26.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I started writing this tool""" start="00:04:28.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""around a year ago""" start="00:04:29.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""when my usage of justfile increased.""" start="00:04:31.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""The objective of the tool""" start="00:04:33.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is to reduce the usage of the CLI""" start="00:04:35.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and drive the execution of the recipes""" start="00:04:37.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""natively within the editor.""" start="00:04:40.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me take you back to the justfile""" start="00:04:41.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which we saw previously.""" start="00:04:44.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""This time we will drive it""" start="00:04:45.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""within the editor itself,""" start="00:04:47.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""instead of executing commands via vterm""" start="00:04:48.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""as done previously.""" start="00:04:51.400" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""So the idea is you either""" start="00:04:52.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""open the justfile,""" start="00:04:54.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""or any other file in the directory.""" start="00:04:56.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""That doesn't matter, actually.""" start="00:04:57.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Once you do that,""" start="00:04:59.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you call the justl command.""" start="00:05:00.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Now as you can see, it lists down""" start="00:05:02.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""all the recipes,""" start="00:05:06.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""along with the description if present.""" start="00:05:07.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can move on to different recipes""" start="00:05:09.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by your usual keybinding.""" start="00:05:11.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""And for executing a specific recipe,""" start="00:05:13.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you have to press the e keybinding,""" start="00:05:15.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and that will run the recipe""" start="00:05:18.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and show its output""" start="00:05:19.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""on a special buffer named *just*""" start="00:05:21.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which is built on top of""" start="00:05:23.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the compilation mode available in Emacs.""" start="00:05:25.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me actually try""" start="00:05:27.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""executing the hello recipe""" start="00:05:28.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which we previously executed in vterm.""" start="00:05:30.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see,""" start="00:05:32.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it executed the recipe""" start="00:05:38.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and the &quot;hello world&quot; output""" start="00:05:39.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is visible in the just buffer.""" start="00:05:41.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can also see that there is""" start="00:05:42.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""other metadata like""" start="00:05:44.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""when it started executing""" start="00:05:45.880" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and when did it finish executing.""" start="00:05:47.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""If a recipe execution fails,""" start="00:05:49.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it will also change the color""" start="00:05:51.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and print the corresponding exit code.""" start="00:05:53.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me actually show you""" start="00:05:55.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by modifying the hello recipe""" start="00:05:57.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and making it exit.""" start="00:05:59.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see,""" start="00:06:03.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it clearly indicates the error message now.""" start="00:06:08.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""That is a pretty much""" start="00:06:10.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a good high level overview""" start="00:06:12.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""of how to execute recipes""" start="00:06:14.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""using this Emacs extension.""" start="00:06:15.680" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""If I press the h or the ? key,""" start="00:06:17.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it will display the various ways""" start="00:06:21.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to drive it.""" start="00:06:23.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Now as you can see,""" start="00:06:24.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""you can pass various options to it.""" start="00:06:27.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I find the dry run option effective""" start="00:06:29.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""whenever I have to print the recipe contents""" start="00:06:31.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""without actually executing the recipe.""" start="00:06:34.560" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""There are also various ways to execute it.""" start="00:06:36.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can use Emacs's eshell to execute it""" start="00:06:39.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by pressing the E keybinding.""" start="00:06:42.960" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me try executing the hello recipe again,""" start="00:06:45.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but this time via Emacs's eshell.""" start="00:06:48.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see now I have an eshell instance""" start="00:06:50.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""where it executed the just hello recipe.""" start="00:06:54.840" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""You can also directly""" start="00:06:57.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""go to the recipe line""" start="00:07:02.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by pressing the return key.""" start="00:07:03.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""So let's say if I want to""" start="00:07:05.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""go to the recipe build app""" start="00:07:08.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""all I have to do is press the return key""" start="00:07:09.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and it will go to the just file""" start="00:07:12.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""with the proper line.""" start="00:07:14.400" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""You can also re-execute the same recipe""" start="00:07:15.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""from the output just buffer.""" start="00:07:19.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I find this very helpful""" start="00:07:21.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""when iterating on certain things.""" start="00:07:23.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""In my day job,""" start="00:07:25.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I often have to work with a Kubernetes cluster,""" start="00:07:26.720" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and I would have to write""" start="00:07:29.240" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""resource manifest files for applications.""" start="00:07:30.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Having the ability to run the recipes""" start="00:07:33.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""while iterating on the project""" start="00:07:36.377" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is very useful, in my opinion.""" start="00:07:37.943" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Let me actually show you""" start="00:07:39.560" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""an example of what I am talking about.""" start="00:07:42.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me run the build app recipe now,""" start="00:07:43.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which will basically build the manifest""" start="00:07:46.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and print it out.""" start="00:07:48.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Now let me open one of the application files.""" start="00:07:49.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I will open the ingress.yaml file.""" start="00:07:58.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""So I have this YAML file which I am working on,""" start="00:07:59.960" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and I also have this output buffer""" start="00:08:06.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which is basically the output""" start="00:08:08.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""of the build app recipe.""" start="00:08:10.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Now I can basically go through this buffer""" start="00:08:11.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and see if everything is alright,""" start="00:08:14.200" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""but I find out that I didn't want""" start="00:08:18.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the hostname to be emacs2022.""" start="00:08:21.760" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I wanted it to be just emacs.""" start="00:08:23.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I can go and fix it in my YAML file,""" start="00:08:25.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and then I can go on""" start="00:08:29.000" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to the output buffer""" start="00:08:34.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and basically just re-run the command""" start="00:08:36.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""by pressing the g key binding.""" start="00:08:38.520" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see,""" start="00:08:40.080" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""it executed the same recipe again,""" start="00:08:42.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and I can see that""" start="00:08:48.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the hostname is indeed emacs.""" start="00:08:49.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I find this kind of workflow very convenient""" start="00:08:51.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""while I am working on a project.""" start="00:08:55.000" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""Another way of interacting""" start="00:08:56.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""with the justl extension""" start="00:08:59.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is by using the interactive function""" start="00:09:00.440" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""justl-exec-recipe-in-dir.""" start="00:09:02.400" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""The use case of this function""" start="00:09:04.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""is executing a one-off recipe""" start="00:09:06.040" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""while you are working on something else.""" start="00:09:07.840" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Let me show you an example of it.""" start="00:09:09.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""As you can see, it shows me""" start="00:09:11.960" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""a drop down of various recipes""" start="00:09:19.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""available in the justfile.""" start="00:09:21.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""You can choose any particular one""" start="00:09:22.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and execute the corresponding recipe.""" start="00:09:24.880" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""In this case, I will choose""" start="00:09:26.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""the build-app recipe,""" start="00:09:28.360" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and we will get the output""" start="00:09:29.640" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""in the *just* buffer""" start="00:09:31.320" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""which should be similar""" start="00:09:32.280" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to what we saw previously.""" start="00:09:33.200" video="mainVideo-justl" id="subtitle"]]
+[[!template new="1" text="""So this was a quick introduction""" start="00:09:34.680" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to what justfile is""" start="00:09:43.920" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and how to drive them within Emacs.""" start="00:09:45.120" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Hopefully it was helpful""" start="00:09:46.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""and it would encourage you""" start="00:09:48.600" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""to use justfiles in your workflow.""" start="00:09:50.160" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""Thank you for allowing me to present.""" start="00:09:51.480" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""I am available in IRC""" start="00:09:53.800" video="mainVideo-justl" id="subtitle"]]
+[[!template text="""if you have any questions.""" start="00:09:55.480" video="mainVideo-justl" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [psibi2000@gmail.com](mailto:psibi2000@gmail.com?subject=Comment%20for%20EmacsConf%202022%20justl%3A%20justl%3A%20Driving%20recipes%20within%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/justl-before.md b/2022/info/justl-before.md
new file mode 100644
index 00000000..584be749
--- /dev/null
+++ b/2022/info/justl-before.md
@@ -0,0 +1,22 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Sibi Prabakaran shares how to use justl to run justfile tasks from inside Emacs, including a comparison with Makefiles. Afterwards, he will handle questions over IRC.
+
+<div class="vid"><video controls preload="none" id="justl-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="justl-mainVideo" data="""
+00:00.000 Introduction
+00:39.320 Justfiles
+01:48.520 Executing recipes
+02:27.680 Other features
+02:56.440 Comparison with Makefiles
+04:19.280 justl.el
+04:52.400 Executing recipes in Emacs
+06:17.280 Options
+06:36.600 Eshell
+06:57.320 Going to the recipe line
+07:15.520 Re-executing recipes
+07:39.560 Example
+08:56.600 justl-exec-recipe-in-dir
+09:34.680 End
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--slides.pdf">Download --slides.pdf</a></li><li><a href="https://toobnix.org/w/tonDBKQYxzZMXQhreMpoca">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/justl-nav.md b/2022/info/justl-nav.md
new file mode 100644
index 00000000..57ceda4b
--- /dev/null
+++ b/2022/info/justl-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/orgsuperlinks">Linking headings with org-super-links (poor-man's Zettelkasten)</a>
+Next by track: <a href="/2022/talks/orgvm">orgvm: a simple HTTP server for org</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/links-after.md b/2022/info/links-after.md
new file mode 100644
index 00000000..12818346
--- /dev/null
+++ b/2022/info/links-after.md
@@ -0,0 +1,5 @@
+<!-- Automatically generated by emacsconf-generate-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20links%3A%20Linking%20headings%20with%20org-super-links%20%28poor-man%27s%20Zettelkasten%29)
+<!-- End of emacsconf-generate-after-page -->
diff --git a/2022/info/links-before.md b/2022/info/links-before.md
new file mode 100644
index 00000000..7b781ff6
--- /dev/null
+++ b/2022/info/links-before.md
@@ -0,0 +1,2 @@
+<!-- Automatically generated by emacsconf-generate-before-page -->
+<!-- End of emacsconf-generate-before-page --> \ No newline at end of file
diff --git a/2022/info/links-nav.md b/2022/info/links-nav.md
new file mode 100644
index 00000000..66faaeb3
--- /dev/null
+++ b/2022/info/links-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/rolodex">Build a Zettelkasten with the Hyperbole Rolodex</a>
+Next by track: <a href="/2022/talks/buttons">Linking personal info with Hyperbole implicit buttons</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/localizing-after.md b/2022/info/localizing-after.md
new file mode 100644
index 00000000..bd8b2bbf
--- /dev/null
+++ b/2022/info/localizing-after.md
@@ -0,0 +1,248 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="localizing-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hello everyone, I am Jean-Christophe Helary,""" start="00:00:00.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I live in Japan, and I'm a translator.""" start="00:00:05.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here is my second presentation on this very""" start="00:00:09.680" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""prestigious stage that is the Emacs conference.""" start="00:00:12.633" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Following my &quot;Let's Translate the 2 million words""" start="00:00:15.300" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""in the Emacs manual&quot; in 2021, my topic this year,""" start="00:00:18.367" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""always related to translation, is""" start="00:00:21.767" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""pre-localizing Emacs or much less pretentiously,""" start="00:00:25.167" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;Just make sure that your strings don't mix up plurals&quot;.""" start="00:00:28.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, for some reason I resumed Emacs use""" start="00:00:31.933" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""around 2016, and as I was rediscovering the thing""" start="00:00:36.133" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I found really old outline-mode files here""" start="00:00:39.940" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and there on my machine.""" start="00:00:42.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And I started to experiment""" start="00:00:44.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""again and write again with Emacs.""" start="00:00:45.140" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I think that at the time,""" start="00:00:47.167" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I was coming from Aquamacs and because of""" start="00:00:48.564" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""an integration bug with macOS, I decided""" start="00:00:50.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to check what was going on in the code.""" start="00:00:53.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That was my first official contribution.""" start="00:00:55.440" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So as I was happily installing and uninstalling""" start="00:00:59.040" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""things, I noticed something weird one day.""" start="00:01:02.233" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Let me enlarge that picture.""" start="00:01:05.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""See? And even if I were not a translator,""" start="00:01:09.080" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I would not like that string, and obviously""" start="00:01:12.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""the same bug bites you when the string""" start="00:01:14.960" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""tells you to erase the package.""" start="00:01:16.833" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Boom, so we agree that we have a problem here.""" start="00:01:20.520" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, I started to do some spelunking into the code,""" start="00:01:26.720" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and at least that was my feeling""" start="00:01:29.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""because I really am not a programmer""" start="00:01:31.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""by any stretch of the imagination.""" start="00:01:33.100" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And what I found was an amazing piece of""" start="00:01:37.240" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""natural language engineering that was mixing code""" start="00:01:39.467" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""with English suffixes and all that,""" start="00:01:41.840" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and I could see that the people who had""" start="00:01:44.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""written that code were pretty smart,""" start="00:01:46.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""but had missed a number of edge cases""" start="00:01:47.767" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that produced the above bugs.""" start="00:01:49.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That was my first experience with""" start="00:01:51.280" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""all the message related functions,""" start="00:01:53.500" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;format&quot;, &quot;concat&quot;, &quot;message&quot;, etc.""" start="00:01:55.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""But even with my beginner's eyes I could see that""" start="00:01:58.360" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""something was off because when you want""" start="00:02:00.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to produce natural language strings you never ever""" start="00:02:03.040" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""should use &quot;replace-regex-in-string&quot; to""" start="00:02:06.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""add an &quot;ing&quot; or an &quot;ed&quot; suffix""" start="00:02:08.600" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to change the mode of a sentence.""" start="00:02:11.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""But that's what I was seeing was happening.""" start="00:02:12.980" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, what we had to deal with here""" start="00:02:16.840" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""was way more than just a missed plural.""" start="00:02:20.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""It was an attempt at engineering all""" start="00:02:22.220" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""the message strings destined to the user""" start="00:02:24.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""with the smart code that was making assumptions""" start="00:02:26.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""on the structure of words,""" start="00:02:28.567" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and in the localization world that's a big no-no.""" start="00:02:30.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I'm a translator, and such UI strings issues""" start="00:02:33.220" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""have been sorted out decades ago.""" start="00:02:36.667" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So I was a bit shocked.""" start="00:02:38.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""The final patch took me about a year to write,""" start="00:02:41.320" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""because I'm slow, because I needed to verify""" start="00:02:43.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and understand a lot, because there are""" start="00:02:45.380" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""plenty of rules and plenty of people who are""" start="00:02:47.167" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""explaining you very nicely what the rules are,""" start="00:02:49.100" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""because I have kids, and because the""" start="00:02:51.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Emacs development list is such a cool place to be""" start="00:02:53.733" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that you often forget why you're there sometimes.""" start="00:02:55.600" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Anyway, for people who can't click on a video,""" start="00:02:58.560" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and I can't either, here are the relevant""" start="00:03:01.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""parts with some short comments.""" start="00:03:03.640" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I'll be talking with localization in mind,""" start="00:03:05.840" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""knowing full well that Emacs localization""" start="00:03:07.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""is not on the map at the moment.""" start="00:03:09.640" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So first, there is this thing""" start="00:03:12.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""about &quot;format&quot; and &quot;concat&quot;.""" start="00:03:14.167" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And if I remember correctly,""" start="00:03:15.520" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;format&quot; is better for user-facing things,""" start="00:03:17.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and &quot;concat&quot; is better for internal things.""" start="00:03:20.300" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here, there are two things.""" start="00:03:25.160" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""First, a rule that we have when we prepare""" start="00:03:26.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""strings that need to be localized is""" start="00:03:28.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""never ever make assumptions on the way""" start="00:03:30.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""numbers are expressed in the language.""" start="00:03:33.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here, the assumption is that""" start="00:03:35.780" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""we have either a singular or plural form,""" start="00:03:37.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and that's not always the case.""" start="00:03:40.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That usually means that you should externalize""" start="00:03:42.040" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""numbers and find a generic way to express them.""" start="00:03:44.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So it makes for slightly less natural""" start="00:03:48.280" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""language strings, but it's better anyway.""" start="00:03:50.833" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Then we have that comma there that's trying""" start="00:03:54.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to be externalized and that's weird,""" start="00:03:56.667" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""so I put it back into the sentence.""" start="00:03:58.167" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here we have another construct, or two rather,""" start="00:04:02.620" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that really should not be used like this.""" start="00:04:04.967" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""It's &quot;prin1&quot; that uses quoting characters,""" start="00:04:06.960" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""just like &quot;print&quot;, and &quot;princ&quot; that does not.""" start="00:04:10.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And you see why they were combined together.""" start="00:04:12.480" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And they were both trying to be really smart""" start="00:04:15.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""about which article to put in front of a vowel.""" start="00:04:17.133" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And you just don't do that.""" start="00:04:19.780" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""You just keep things simple.""" start="00:04:20.960" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here again, the code is trying to be smart,""" start="00:04:25.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""but it's really not much more efficient than""" start="00:04:26.633" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""plainly stating what you want.""" start="00:04:28.480" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And here again, we have &quot;concat&quot; things""" start="00:04:34.940" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that we could just use to plainly state""" start="00:04:36.500" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""what we want to state.""" start="00:04:40.367" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, instead of &quot;concat&quot; I just put a &quot;message&quot;.""" start="00:04:41.980" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And here we have something that's very cute.""" start="00:04:49.880" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""It's a computerized plural.""" start="00:04:52.260" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here again, assuming that""" start="00:04:54.540" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""there are only plural or singular forms.""" start="00:04:55.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""But the end string is not that much more natural""" start="00:04:58.640" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""than the fix, the code is less efficient""" start="00:05:00.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and is harder to understand.""" start="00:05:02.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here again, the code is trying to make""" start="00:05:07.760" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""smart things where it could be much simpler.""" start="00:05:09.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That is the part where you get the""" start="00:05:13.520" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""number of packages and their names.""" start="00:05:14.667" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here the whole sentence with the semicolons""" start="00:05:19.480" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and the question mark is split in parts,""" start="00:05:22.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""between which something will be inserted.""" start="00:05:26.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That's really ugly and difficult to read.""" start="00:05:29.180" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Here again, another &quot;ing&quot; waiting to be""" start="00:05:34.240" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""regex-inserted into the code.""" start="00:05:37.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And here at last, we get to the point""" start="00:05:44.840" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""where everything started.""" start="00:05:46.633" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And you can see that unlike in the other spots,""" start="00:05:48.760" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""there is no possibility for the expression""" start="00:05:50.833" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to be singular.""" start="00:05:52.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, I guess that if it hadn't been for that bug,""" start="00:05:54.680" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I would not have found the other items,""" start="00:05:57.600" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and we would be left with code that works,""" start="00:05:59.320" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""of course, but that is""" start="00:06:01.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""harder to understand, and maintain.""" start="00:06:02.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Last but not least, a last version of""" start="00:06:06.020" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;just plainly state what you mean to state&quot;.""" start="00:06:08.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Keep it simple.""" start="00:06:10.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So first, we have this wonderful CONTRIBUTE file""" start="00:06:14.880" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that is very explicit about""" start="00:06:19.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""how we must proceed when contributing code.""" start="00:06:21.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, that's really the first place""" start="00:06:23.520" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that we should all read.""" start="00:06:25.233" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""The README file is pretty cool too,""" start="00:06:27.760" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""especially at the beginning of the process,""" start="00:06:29.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""when you're not sure whether""" start="00:06:30.967" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""you want to fix that bug or just report it.""" start="00:06:31.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And then we've got packages.""" start="00:06:36.240" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""We've got a number of packages that are really""" start="00:06:37.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""helpful when it comes to reading""" start="00:06:39.900" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""the information and the manuals.""" start="00:06:42.600" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I'm mentioning three of them here,""" start="00:06:45.880" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and I think they are the most important for us.""" start="00:06:48.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So &quot;helpful&quot; is on the right,""" start="00:06:53.720" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and it's overflowing the window with""" start="00:06:55.600" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""all the contextualized information it provides,""" start="00:06:58.667" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and the standard &quot;help&quot; is on the left.""" start="00:07:01.900" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I mean, really there are like two or three""" start="00:07:05.280" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""screen-full of information in the &quot;helpful&quot; output,""" start="00:07:07.933" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""so you really only see a part,""" start="00:07:11.567" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""but I guess if you use it, you know what I'm saying.""" start="00:07:13.233" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""What I like the most here is the &quot;view in manual&quot;""" start="00:07:16.320" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""part, where you can actually click and even get""" start="00:07:18.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""more information that's sometimes""" start="00:07:21.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""easier to read and understand.""" start="00:07:23.667" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And then you've got the &quot;info&quot; versus &quot;inform&quot; formats.""" start="00:07:28.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""When you're in the manual,""" start="00:07:33.640" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;inform&quot; makes a huge difference.""" start="00:07:34.567" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""You can see here that you've got colorized items,""" start="00:07:37.140" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and also in the middle you've got that""" start="00:07:39.367" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""'read' part that's green and bold.""" start="00:07:42.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""In &quot;info&quot; it's not a specific object,""" start="00:07:45.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""it's just a string. In 'inform' it's actually""" start="00:07:49.333" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""a link that you can click,""" start="00:07:52.200" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and actually go to that 'read' manual page.""" start="00:07:53.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Now, we've got &quot;which-key&quot;.""" start="00:07:58.320" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;which-key&quot; is a savior for beginners too.""" start="00:08:01.300" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Just wait half a second or something,""" start="00:08:03.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and Emacs will show you all the keys""" start="00:08:04.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that you can access from the prefix combination""" start="00:08:06.500" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that you just typed.""" start="00:08:08.433" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, it's really helpful for discovering functions""" start="00:08:09.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and learning new functions, getting used to them.""" start="00:08:13.200" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And so that whole process started…,""" start="00:08:19.160" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""it was May 23, 2017,""" start="00:08:21.500" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""with that thread when I found the bug.""" start="00:08:26.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""I just bumped into an English/code bug""" start="00:08:30.440" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""this morning. In package.el, when one package""" start="00:08:32.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""is not needed anymore, the message is:""" start="00:08:36.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;Package menu: Operation finished.""" start="00:08:39.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""1 packages are no longer needed&quot;, etc.""" start="00:08:41.300" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, I was asking whether we had best practices""" start="00:08:44.880" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""for using messages, and we had a whole thread""" start="00:08:49.633" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""about that. And while I was discussing on that""" start="00:08:53.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""thread, I started that new thread, which is:""" start="00:08:57.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;package.el strings&quot;.""" start="00:09:01.240" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""The whole thing actually ended on June 27, 2018.""" start="00:09:02.867" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, a year after, with that message from Noam""" start="00:09:09.900" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""telling me that &quot;Yes I can close the bug,&quot;""" start="00:09:15.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and that was it.""" start="00:09:18.567" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, it took about a year to finish that.""" start="00:09:22.040" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""What I did learn basically is that""" start="00:09:24.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""helping with Emacs is not that difficult.""" start="00:09:28.133" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""It takes time when you're not fluent with the code,""" start="00:09:32.160" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""but that's okay because the reference""" start="00:09:36.100" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""is excellent, and there are lots of people""" start="00:09:37.100" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""who are here to help.""" start="00:09:39.300" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Basically, the solution to all our problems is""" start="00:09:41.520" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""&quot;Keep It Simple and Straightforward&quot;.""" start="00:09:45.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""As you can see in that patch,""" start="00:09:47.733" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""even if it's a beginner's patch,""" start="00:09:51.033" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""what I did shows what can be done by Emacs Lisp""" start="00:09:53.233" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""beginners to help with &quot;straightening&quot; the strings""" start="00:09:57.733" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to reduce the number of potential English bugs.""" start="00:09:59.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And then to make Emacs strings easier""" start="00:10:02.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""to be handled by real localization processes one day.""" start="00:10:04.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""But it doesn't have to be about strings""" start="00:10:07.233" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""because strings can be an easy entry point to Emacs,""" start="00:10:09.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""but it can be any itch that you want to scratch.""" start="00:10:12.767" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And my real conclusion is that""" start="00:10:16.720" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Emacs is free software, and what that means is mostly""" start="00:10:18.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""that it allows you to do things that you would""" start="00:10:22.160" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""never have thought of being able to do before.""" start="00:10:24.067" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""That's really the biggest lesson to be learned here.""" start="00:10:27.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""So, I want to thank all the people""" start="00:10:32.000" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""who allowed this to be happening, allowed me to""" start="00:10:33.400" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""learn a bit and contribute a bit to that wonderful""" start="00:10:37.920" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""piece of software that Emacs is.""" start="00:10:41.267" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""And thank you everyone for listening,""" start="00:10:42.800" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""and hopefully I'll see you next year""" start="00:10:44.533" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""with a different translation related presentation.""" start="00:10:46.700" video="mainVideo-localizing" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:10:51.520" video="mainVideo-localizing" id="subtitle"]]
+
+
+
+Captioner: jean-christophe
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20localizing%3A%20Pre-localizing%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/localizing-before.md b/2022/info/localizing-before.md
new file mode 100644
index 00000000..91f3f803
--- /dev/null
+++ b/2022/info/localizing-before.md
@@ -0,0 +1,30 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="localizing">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect stroke-width="3" x="658" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 11-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-localizing>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T21:00:00Z" end="2022-12-04T21:10:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~4:00 PM - 4:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~3:00 PM - 3:10 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~2:00 PM - 2:10 PM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~1:00 PM - 1:10 PM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~9:00 PM - 9:10 PM UTC <br />Sunday, Dec 4 2022, ~10:00 PM - 10:10 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~11:00 PM - 11:10 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~2:30 AM - 2:40 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~5:00 AM - 5:10 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~6:00 AM - 6:10 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="localizing-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/7E7zo6E6KvrWamsQUxfRuR">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="localizing-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="localizing-qanda" data="""
+06:11.680 Is Emacs localized/localizable?
+10:07.160 You mention regex on strings is a red flag for localization, are there others to look out for?
+13:49.980 So, your project is to localize all of Emacs?
+14:47.325 How deep would usefull localization go? Because at the core of Emacs are docstrings and localizing them could also imply localizing Elisp.
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="localizing-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.webm">Download --answers.webm (36MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.opus">Download --answers.opus (6.1MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/localizing-nav.md b/2022/info/localizing-nav.md
new file mode 100644
index 00000000..d2aac021
--- /dev/null
+++ b/2022/info/localizing-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/indieweb">Putting Org Mode on the Indieweb</a>
+Next by track: <a href="/2022/talks/devel">Emacs development updates</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/lspbridge-after.md b/2022/info/lspbridge-after.md
new file mode 100644
index 00000000..848d11a0
--- /dev/null
+++ b/2022/info/lspbridge-after.md
@@ -0,0 +1,332 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="lspbridge-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Good morning folks, I'm Matthew.""" start="00:00:00.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Welcome to another year of EmacsConf.""" start="00:00:04.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It's looking fantastic this year.""" start="00:00:07.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Firstly, I have to apologize for my voice""" start="00:00:10.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and occasional cough today.""" start="00:00:13.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""I am currently recovering from a cold,""" start="00:00:15.880" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""hopefully it's not Covid or flu,""" start="00:00:18.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so please bear with me today.""" start="00:00:21.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Actually, this talk was supposed to be brought to you""" start="00:00:24.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""by Manatee Lazycat, the author of lsp-bridge.""" start="00:00:27.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""But verbal English isn't Lazycat's strongest skill,""" start="00:00:31.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and we are good friends as we maintain""" start="00:00:36.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the Emacs Application Framework together,""" start="00:00:38.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so here I am today presenting to you this package.""" start="00:00:41.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Welcome to my talk on lsp-bridge:""" start="00:00:46.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""a smooth-as-butter asynchronous LSP client.""" start="00:00:48.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""What is LSP?""" start="00:00:50.321" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The first question is, what is LSP?""" start="00:00:57.201" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""For anyone who doesn't know here,""" start="00:01:01.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP stands for Language Server Protocol,""" start="00:01:03.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it is a set of protocols defined by Microsoft""" start="00:01:06.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that provides smart features like autocomplete,""" start="00:01:09.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""go to definition, documentation, etc.,""" start="00:01:13.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that can be implemented across different editors and IDEs.""" start="00:01:17.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It was initially created""" start="00:01:23.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for their Visual Studio Code product,""" start="00:01:25.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""then publically shared with everyone.""" start="00:01:28.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""So there are language servers out there""" start="00:01:33.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that implemented this procotol,""" start="00:01:36.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and editors need to implement the same procotols""" start="00:01:38.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to talk to the language servers""" start="00:01:41.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""in order to retrieve necessary information.""" start="00:01:43.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Emacs has 2 LSP clients already, the lsp-mode and eglot,""" start="00:01:46.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""both implemented the protocols and both are very good.""" start="00:01:53.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Now comes to the second question, of course,""" start="00:02:00.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""given lsp-mode and eglot, why another LSP client?""" start="00:02:03.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""I used to use lsp-mode all the time,""" start="00:02:09.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""I have to say I really appreciate Ivan Yonchovski""" start="00:02:12.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and the team's efforts. Also, I'd like to congratuate eglot""" start="00:02:16.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for making into Emacs 29! These are fantastic packages,""" start="00:02:20.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""they are very mature and robust.""" start="00:02:27.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""However, with all due respect, both of the implementation""" start="00:02:31.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""are fundamentally limited""" start="00:02:35.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""by the single-threaded nature of Emacs,""" start="00:02:36.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it is neither the fault of lsp-mode nor eglot.""" start="00:02:39.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Although in recent years there have been""" start="00:02:46.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""improvements to Emacs core such as native JSON support,""" start="00:02:47.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""there are still scenarios where Emacs clog""" start="00:02:51.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for a brief second when processing large amounts of data,""" start="00:02:55.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""as Emacs is processing everything in the single thread.""" start="00:02:59.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This problem is especially apparent in some LSP servers""" start="00:03:03.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that feeds in tens of thousands of JSON data""" start="00:03:08.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""with every single key press.""" start="00:03:11.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Additionally, the large amount of data""" start="00:03:15.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""sent by the LSP server, such as the completion candidates,""" start="00:03:17.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the diagnostics and documentation,""" start="00:03:21.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""they are temporarily stored in the Emacs memory,""" start="00:03:23.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""which will trigger garbage collection very frequently,""" start="00:03:27.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""this also causes stuttering user experience.""" start="00:03:31.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Increasing the gc-cons-threshold helps,""" start="00:03:34.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""but doesn't eliminate the problem.""" start="00:03:37.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""For something like the LSP,""" start="00:03:43.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the language servers need time to compute,""" start="00:03:45.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and Emacs needs capacity to process and filter""" start="00:03:48.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""all the data coming from the language servers.""" start="00:03:52.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""A large codebase project with a slow language server""" start="00:03:55.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that sends tens of thousands of JSON""" start="00:03:59.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""will significantly increase the time needed to process it,""" start="00:04:02.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""when we don't have a multi-thread,""" start="00:04:06.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the single thread originally allocated for perhaps,""" start="00:04:08.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""handling user input will be used to process all the data,""" start="00:04:12.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and don't even talk about the garbage collection along the way.""" start="00:04:17.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The unfortunate truth is that the size of the codebase""" start="00:04:22.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and the efficiency of the language server""" start="00:04:26.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""is completely out of Emacs' control,""" start="00:04:28.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it is also out of both the lsp-mode and eglot's control.""" start="00:04:31.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""If there's an LSP client""" start="00:04:38.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that can completely eliminate stuttering""" start="00:04:40.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and provide a seamless feedback,""" start="00:04:42.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that would be great, isn't it?""" start="00:04:45.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""However, we're vaguely talking about speed right now,""" start="00:04:50.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""what is considered fast?""" start="00:04:53.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""What is considered seamless?""" start="00:04:56.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""What we really mean when we say""" start="00:04:58.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the current LSP implementation is slow?""" start="00:05:01.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Let's first look at the problem fundamentally.""" start="00:05:05.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We interact with Emacs through a keyboard,""" start="00:05:12.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so what we perceive as a fast and smooth feedback""" start="00:05:17.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""completely depends on how long it takes""" start="00:05:22.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for a keyboard input to display on the Emacs buffer.""" start="00:05:26.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""From a pure graphical perspective,""" start="00:05:29.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""we need a minimum of 24 frames per second,""" start="00:05:32.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the standard in the media industry,""" start="00:05:36.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for us humans to perceive something as seamless.""" start="00:05:39.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Say we need 25 frames per second, this means,""" start="00:05:42.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""if we divide 1000 milliseconds by 25,""" start="00:05:47.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""we only have approximately 40 millisecond window""" start="00:05:50.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for the response time to spare.""" start="00:05:54.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Even if we relax the constraint a bit more,""" start="00:05:57.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""on average a typist takes about 100 to 200 milliseconds""" start="00:06:01.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""between typing each character,""" start="00:06:06.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so as long as we see a response within this timeframe,""" start="00:06:09.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it is tolerable. However, using a slow language server""" start="00:06:12.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""on a large codebase easily exceeds""" start="00:06:19.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the hundred millisecond mark,""" start="00:06:22.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and sometimes takes more than 200 milliseconds,""" start="00:06:24.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and inevitably will cause an inconsistent delay""" start="00:06:27.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for the end user.""" start="00:06:32.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""At this point, someone might want to point out""" start="00:06:33.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that nobody is gonna type at the maximum pace all the time.""" start="00:06:37.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""That's right, frankly speaking most of my time""" start="00:06:41.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""spent at programming is not writing code,""" start="00:06:45.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""but staring at the screen""" start="00:06:47.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""thinking about how to write the code.""" start="00:06:49.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""However, when we do actually type,""" start="00:06:51.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""maybe only a sentence, a variable name, a keyword,""" start="00:06:55.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""or just performing keybinding shortcuts,""" start="00:07:00.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that's when we want to see our input feedback immediately.""" start="00:07:03.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We've already spend so much time""" start="00:07:08.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""thinking about how to write,""" start="00:07:10.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""we don't want to waste any more time waiting for Emacs""" start="00:07:12.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to process and show us what we've written""" start="00:07:16.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""half a second ago. Otherwise the frustration will build up.""" start="00:07:19.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""In the past two years of EmacsConf, I've talked about""" start="00:07:28.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the Emacs Application Framework, a project that extended""" start="00:07:32.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Emacs Lisp to Python, Qt and JavaScript ecosystems.""" start="00:07:35.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The EAF project specializes in improving""" start="00:07:39.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the graphical and multimedia capabilities of Emacs""" start="00:07:43.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""through other languages, it was a great success.""" start="00:07:47.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It demonstrated the endless possibilities of Emacs""" start="00:07:51.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""by embracing the strengths in other ecosystems.""" start="00:07:55.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""If anyone is interested for more information on EAF,""" start="00:08:00.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""please see the EAF repo and refer to my talks""" start="00:08:04.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""from EmacsConf2020 and 2021.""" start="00:08:08.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:08:12.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The EAF project was created by Manatee Lazycat as well,""" start="00:08:12.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so he thought if there is a way to design""" start="00:08:16.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""an LSP client similar to EAF""" start="00:08:20.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that takes the advantage of Python's multi-threading,""" start="00:08:22.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it will be able to solve our problem.""" start="00:08:25.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Conveniently EAF had already done most of the ground work""" start="00:08:27.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and demonstrated the possibility""" start="00:08:32.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""of cooperating Elisp and Python using the Emacs RPC effectively.""" start="00:08:34.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge has several goals in mind.""" start="00:08:42.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Firstly, performance is the number one priority.""" start="00:08:45.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Secondly, use Python multi-threading to bypass""" start="00:08:50.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the aforementioned bottlenecks of a single-threaded Emacs.""" start="00:08:55.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Thirdly, provide a simple solution that requires""" start="00:08:59.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""minimal setup for someone who just wants to have""" start="00:09:04.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""a fast autocomplete system in Emacs.""" start="00:09:07.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This means, LSP Bridge does not intend""" start="00:09:10.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and will not implement the entire LSP protocol,""" start="00:09:16.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""which is a vastly different approach""" start="00:09:21.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""than a solution like lsp-mode,""" start="00:09:23.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""we do not want to compete this way.""" start="00:09:25.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We also believe some of the LSP Protocol features""" start="00:09:28.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""are unnecessary, or we already have better solutions""" start="00:09:33.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""in the Emacs ecosystem,""" start="00:09:37.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""such as tree-sitter for syntax highlighting.""" start="00:09:38.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""So we will not reinvent the wheel.""" start="00:09:42.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Ultimately, we want to provide the fastest, butter-smooth""" start="00:09:44.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and performant LSP client out of the box.""" start="00:09:50.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Design.""" start="00:09:53.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Now let's look at the design architecture diagram.""" start="00:09:54.561" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""As you can see, it is split into""" start="00:10:01.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the top half and bottom half.""" start="00:10:04.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The top is the design for a single file model,""" start="00:10:07.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and the bottom half is for project model.""" start="00:10:10.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We make this distinction because we don't want a new user""" start="00:10:13.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to be troubled on choosing a project root directory""" start="00:10:18.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""as the first impression to LSP""" start="00:10:22.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""before even start writing code.""" start="00:10:25.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:10:27.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""From a new user's perspective,""" start="00:10:27.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""they've just installed this package,""" start="00:10:30.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and all they are expecting""" start="00:10:32.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""is using a smart autocomplete system,""" start="00:10:35.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""what does root directory even mean in this context?""" start="00:10:37.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""So we make the decision for them""" start="00:10:41.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""based on whether this file is part of a git repository.""" start="00:10:44.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Often times we write code in its own standalone file,""" start="00:10:48.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""this is extremely common for scripting languages""" start="00:10:56.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""like bash or python. So in the single file model,""" start="00:10:59.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge will start a dedicated LSP server""" start="00:11:03.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for this particular file based on file type,""" start="00:11:07.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and every file corresponds to a LSP server,""" start="00:11:10.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so each server doesn't interfere with one another.""" start="00:11:13.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The project model will have every file of the same type""" start="00:11:17.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""under the same project share one server.""" start="00:11:23.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We believe this is a positive trade-off for user experience.""" start="00:11:25.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:11:30.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge internally implemented two main threads,""" start="00:11:30.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""one is the Request Thread, the other is Response Thread.""" start="00:11:36.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The Request Thread is used to handle all the requests""" start="00:11:40.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""coming from Emacs, it does not answer immediately,""" start="00:11:45.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""this is important because Emacs doesn't need to wait""" start="00:11:48.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""for any response under any reason,""" start="00:11:52.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""even if the server is buggy or died out,""" start="00:11:54.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it shouldn't matter to the performance of Emacs.""" start="00:11:58.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The Response Thread is used to handle""" start="00:12:01.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the response coming from LSP servers.""" start="00:12:04.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""After retrieving a response, regardless of the JSON size,""" start="00:12:06.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it sends to its own thread for computation,""" start="00:12:11.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""such as candidate filtering and renaming.""" start="00:12:14.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Once the computation is finished,""" start="00:12:17.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it will determine if this information is expired,""" start="00:12:20.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""if not, then push it to Emacs.""" start="00:12:23.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:12:26.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""From the Emacs side, when it receives the LSP information,""" start="00:12:26.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it only needs to determine the course of action,""" start="00:12:31.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""either popup completion, jump to definition,""" start="00:12:34.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""renaming action, or show references and show documentions.""" start="00:12:39.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""You see, from a user, all LSP Bridge doing""" start="00:12:44.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""is these 5 things, the user doesn't need to care about""" start="00:12:49.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""anything else like the complicated""" start="00:12:52.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Language Server Protocols.""" start="00:12:54.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:12:56.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Python side caches heavy data""" start="00:12:56.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""such as candidate documentation and diagnostics.""" start="00:13:02.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""We process as much server data as possible in Python,""" start="00:13:06.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and only pass to Emacs as little data as possible""" start="00:13:11.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so it doesn't clog the Emacs thread""" start="00:13:15.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and triggers garbage collection.""" start="00:13:18.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:13:19.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This design is critical, because all Emacs needs to do""" start="00:13:19.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""is sending LSP requests to LSP Bridge,""" start="00:13:24.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it doesn't wait for a response,""" start="00:13:27.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it simply knows what to do *when* there is a response.""" start="00:13:29.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""So the user's input immediately displays on the buffer""" start="00:13:33.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""well within the 40 millisecond window,""" start="00:13:37.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and in the mean time, the user can continue to type""" start="00:13:39.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""if he doesn't need the help from LSP right away,""" start="00:13:45.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it fundamentally resolves the stuttering problem.""" start="00:13:48.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Now I want to talk about acm-mode,""" start="00:13:51.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""which stands for asynchronous completion menu,""" start="00:13:59.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it is a completion framework""" start="00:14:09.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that currently bundled with LSP Bridge""" start="00:14:12.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""designed to accomodate for""" start="00:14:15.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the asynchronous nature of LSP servers.""" start="00:14:17.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It is a replacement for the built-in capf,""" start="00:14:20.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""short for completion-at-point-functions,""" start="00:14:26.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""used in almost everywhere""" start="00:14:30.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""including company-mode and corfu-mode.""" start="00:14:32.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Yes, we unfortunately reinvented a very fundamental wheel.""" start="00:14:35.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""No, it wasn't an easy decision.""" start="00:14:40.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""However we still believe it's worth it.""" start="00:14:44.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge initially used company-mode,""" start="00:14:47.880" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""then moved on to corfu-mode for a while,""" start="00:14:53.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""but eventually Lazycat determined""" start="00:14:56.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that it is much more painful to write""" start="00:14:59.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""a lot of workaround code to force LSP Bridge""" start="00:15:00.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to handle capf nicely than to just fork Corfu,""" start="00:15:05.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""remove all the capf code,""" start="00:15:09.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and write a new completion framework from the remainings.""" start="00:15:12.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:15:15.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Performance wise, capf requires Emacs to store""" start="00:15:15.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the entire candidate list""" start="00:15:20.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""when looking up candidate annotations.""" start="00:15:23.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It needs to search through the entire candidate list first,""" start="00:15:27.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""then use the candidate as a key""" start="00:15:30.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to search for the actual information.""" start="00:15:32.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This entire process will be repeated every time""" start="00:15:34.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""when drawing the completion menu.""" start="00:15:38.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This is truly intensive computing task for Emacs to handle.""" start="00:15:40.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""On top of that, the existing capf frameworks assume""" start="00:15:45.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""the candidate list, which is retrieved from the LSP server,""" start="00:15:50.520" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to be ready and finalized in place""" start="00:15:54.280" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""when the completion popup occurred.""" start="00:15:56.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""However given the design of LSP Bridge,""" start="00:15:58.720" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Emacs will not sit there and wait for the server response,""" start="00:16:02.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""instead the Response Thread may feed Emacs data""" start="00:16:05.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""whenever it's ready. This makes capf almost impossible""" start="00:16:10.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to form a finalized candidate list during popup.""" start="00:16:14.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""""" start="00:16:21.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""The complete reasons regarding why capf is incompatible""" start="00:16:21.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""with the asynchronous nature of LSP servers""" start="00:16:26.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""are very complicated and deserves its own talk.""" start="00:16:28.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Lazycat wrote an entire blog post detailing his reasonings,""" start="00:16:32.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""while Corfu's author Daniel Mendler a.k.a minad""" start="00:16:37.080" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""also done his own investigations and experiments,""" start="00:16:41.000" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and reached a common conclusion.""" start="00:16:44.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""For anyone interested, I've pasted the links""" start="00:16:47.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to the corresponding posts here.""" start="00:16:50.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Therefore, keep in mind that LSP Bridge""" start="00:16:52.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""can only use acm-mode to work nicely,""" start="00:16:57.400" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""so please disable other completion frameworks""" start="00:16:59.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""like company and corfu before trying LSP Bridge.""" start="00:17:03.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""By designing ACM with asynchronous server response in mind,""" start="00:17:07.160" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""this unlocks LSP Bridge project's potential""" start="00:17:14.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to provide completions from almost any backends.""" start="00:17:18.760" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""ACM has blended all the backends together,""" start="00:17:22.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and configured a priority to display""" start="00:17:25.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""important completion results like LSP before other backends.""" start="00:17:28.800" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""It can autocomplete LSP, TabNine, Elisp symbols, yasnippets,""" start="00:17:32.840" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""even English dictionaries and much more.""" start="00:17:38.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""As long as you have the backends installed,""" start="00:17:41.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""they all work out-of-the-box!""" start="00:17:43.960" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Although LSP Bridge is a relatively new package""" start="00:17:46.320" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""with just over 7 months old, it is already a success!""" start="00:17:55.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""As of December of 2022, we have 67 contributors""" start="00:18:00.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""making more than 1000 commits,""" start="00:18:06.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and we reached more than 600 stars on Github!""" start="00:18:08.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge is easily extensible,""" start="00:18:12.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""developing a new language backend is very simple too,""" start="00:18:16.360" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""feel free to join us!""" start="00:18:18.880" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""LSP Bridge is another successful example""" start="00:18:20.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""of extending Emacs Lisp with Python, and just like EAF,""" start="00:18:25.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""it demonstrated the potential Emacs can achieve""" start="00:18:29.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""when we jump out of the Lisp-only world""" start="00:18:33.640" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""and embrace other ecosystems.""" start="00:18:37.040" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Recently Lazycat created a package called blink-search""" start="00:18:39.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that leveraged similar ideas""" start="00:18:43.480" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""but an asynchronous search framework,""" start="00:18:45.680" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""as well as a package called deno-bridge""" start="00:18:48.920" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""that extended Emacs Lisp""" start="00:18:51.240" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""with Deno JavaScript TypeScript runtimes.""" start="00:18:53.120" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Please check it out,""" start="00:18:56.440" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""if consider joining the development too!""" start="00:18:57.560" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""This is the entirety of my presentation, thanks for joining!""" start="00:19:05.200" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""Me and Lazycat will be available""" start="00:19:08.600" video="mainVideo-lspbridge" id="subtitle"]]
+[[!template text="""to answer questions on IRC and Etherpad.""" start="00:19:11.320" video="mainVideo-lspbridge" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20lspbridge%3A%20lsp-bridge%3A%20a%20smooth-as-butter%20asynchronous%20LSP%20client)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/lspbridge-before.md b/2022/info/lspbridge-before.md
new file mode 100644
index 00000000..536ac2cb
--- /dev/null
+++ b/2022/info/lspbridge-before.md
@@ -0,0 +1,4 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><video controls preload="none" id="lspbridge-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.webm">Download --main.webm (34MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.opus">Download --main.opus (9.4MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/oWZ7s5B5pw6vayDKPJQVBG">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/lspbridge-nav.md b/2022/info/lspbridge-nav.md
new file mode 100644
index 00000000..bbffa0d4
--- /dev/null
+++ b/2022/info/lspbridge-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/handwritten">How to incorporate handwritten notes into Emacs Orgmode</a>
+Next by track: <a href="/2022/talks/science">Writing and organizing literature notes for scientific writing</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/mail-after.md b/2022/info/mail-after.md
new file mode 100644
index 00000000..e1221cf9
--- /dev/null
+++ b/2022/info/mail-after.md
@@ -0,0 +1,581 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="mail-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Greetings. Salaam. This is Mohsen Banan. محسن بنان.""" start="00:00:00.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am a software and internet engineer.""" start="00:00:09.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I have been interested in email and""" start="00:00:12.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs for a very long time.""" start="00:00:14.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""My interest in email started with X.400""" start="00:00:17.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and the Red and Blue CCITT books -- circa 1988.""" start="00:00:21.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Early on, in the very early 1990s, I jumped ship""" start="00:00:27.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and joined the Internet email movement.""" start="00:00:32.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am the primary author of two mobile email""" start="00:00:35.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""related Internet RFCs, RFC-2188 and RFC-2524.""" start="00:00:38.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""My interest in Emacs started in 1986 --""" start="00:00:45.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It was Emacs version 17 then. By around 1988""" start="00:00:49.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""when Emacs version 18 was well in place,""" start="00:00:54.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I started living inside of Emacs.""" start="00:00:58.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""My primary digital environment has been Emacs ever since.""" start="00:01:01.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It has been a good life.""" start="00:01:06.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It turns out that Emacs and email mix up really well.""" start="00:01:11.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Here, in this presentation and in the context of""" start="00:01:17.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Revisiting The Anatomy of Emacs Mail User Agents,""" start="00:01:21.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With MARMEE (Multi-Account Resident""" start="00:01:26.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Message Exchange Environment)""" start="00:01:30.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am offering my thoughts on this topic""" start="00:01:33.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in this Emacs Conference 2022.""" start="00:01:35.560" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Long ago, I asked myself:""" start="00:01:41.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;What should my ultimate mail environment be?&quot;""" start="00:01:43.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Over the past 20+ years, I have been exploring""" start="00:01:49.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the concept of the &quot;Ultimate Mail User Agent (MUA)&quot;.""" start="00:01:52.141" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We do care about privacy, autonomy,""" start="00:01:58.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""morality, ethics, society and philosophy,""" start="00:02:01.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""so from the get go, proprietary (Haraam) environments""" start="00:02:05.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""such as Microsoft Office's Outlook""" start="00:02:10.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and Google Office's Gmail were non-starters for me.""" start="00:02:14.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But these are significant realities""" start="00:02:20.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and we need to deal with these realities.""" start="00:02:23.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice how Microsoft and Google""" start="00:02:27.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""have both framed their MUAs in the context of &quot;office&quot;.""" start="00:02:30.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""That type of framing is correct.""" start="00:02:36.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""an MUA must be fully integrated""" start="00:02:38.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in the totality of one's digital ecosystem.""" start="00:02:41.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, the Ultimate Mail User Agent""" start="00:02:46.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""must be part of the Ultimate Usage Environment""" start="00:02:49.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of the Ultimate Digital Ecosystem.""" start="00:02:53.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In the non-proprietary (Halaal) universe, clearly""" start="00:02:57.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the ultimate usage environment is Emacs.""" start="00:03:02.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs is today's most potent and convivial""" start="00:03:07.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""non-proprietary usage environment.""" start="00:03:10.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, clearly, the ultimate Mail User Agent""" start="00:03:15.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""must be an integral part of Emacs.""" start="00:03:19.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Having reached that conclusion,""" start="00:03:22.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we then need to determine the specifics""" start="00:03:24.158" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of the shape and the anatomy of Emacs' MUAs.""" start="00:03:28.125" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""We could have arrived at this conclusion""" start="00:03:33.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""from the reverse direction as well.""" start="00:03:36.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Zawinski's Law states:""" start="00:03:38.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Every program attempts to expand until it can read mail.""" start="00:03:41.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Those programs which cannot so expand""" start="00:03:46.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""are replaced by ones which can.""" start="00:03:49.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Jamie's point is very simple and obvious.""" start="00:03:52.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The &quot;App&quot; that you &quot;live in&quot; all day""" start="00:03:56.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""should be your MUA and mail environment.""" start="00:03:59.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I ask those who jumped ship, who abandoned Emacs""" start="00:04:05.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in favor of VS Code: What about mail?""" start="00:04:09.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Long ago, Emacs expanded to including MUAs.""" start="00:04:15.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In fact there are many Emacs MUAs that you can choose from.""" start="00:04:21.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""If you are already hip with Emacs And Linux,""" start="00:04:27.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""you should definitely consider doing email in Emacs.""" start="00:04:30.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But if you are not already hip with Emacs,""" start="00:04:34.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I mean for new Emacs users, unfortunately,""" start="00:04:39.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""setting up and using email is not straight forward.""" start="00:04:43.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We (I mean, Emacs developers) should work on that!""" start="00:04:48.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs offers a good number of MUAs with""" start="00:04:54.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""different characteristics to suit differing tastes.""" start="00:04:57.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""As of 2022, you can choose from the following MUAs:""" start="00:05:01.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Gnus, VM, WanderLust, Mew, mu4e, notmuch.el, mh-e and Rmail.""" start="00:05:06.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Over the years I have tried several of these""" start="00:05:15.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and eventually landed on Gnus.""" start="00:05:17.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The relevance column in this table simply and only""" start="00:05:20.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""reflects my taste.""" start="00:05:25.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Throughout the rest of this presentation, I focus on Gnus.""" start="00:05:28.080" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""I have 3 types of audiences in mind for this presentation.""" start="00:05:32.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""First, if you are already using Emacs""" start="00:05:36.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""as more than an editor,""" start="00:05:39.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""it makes good sense for you to also use Emacs as your MUA.""" start="00:05:42.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There may well be some relevant information here for you""" start="00:05:47.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in that situation.""" start="00:05:50.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Second, for those interested in philosophy of Emacs,""" start="00:05:52.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I go on some bigger picture tangents""" start="00:05:57.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that may be of value to you.""" start="00:06:00.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Third, I address some Emacs developers with some feedback,""" start="00:06:02.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""some suggestions, and some requests.""" start="00:06:08.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The general model here is that""" start="00:06:11.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we would collectively work towards""" start="00:06:14.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""improving what is on the table.""" start="00:06:17.080" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""When a Mail User Agent is self-contained""" start="00:06:19.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and includes implementation of mail protocols,""" start="00:06:22.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we call it a Monolithic-MUA.""" start="00:06:26.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Just as it is with the physical mail postal service,""" start="00:06:29.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""sending mail and receiving mail""" start="00:06:33.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""are fundamentally separate activities.""" start="00:06:36.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And then there is mail processing.""" start="00:06:40.640" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Based on these categorizations,""" start="00:06:42.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs has a set of mature libraries""" start="00:06:45.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for composing mail, sending mail, and receiving mail.""" start="00:06:49.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""These are all independently well-documented""" start="00:06:53.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and are part of the basic emacs Distribution.""" start="00:06:58.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs MUAs then use these common libraries""" start="00:07:02.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to process mail (each somewhat differently).""" start="00:07:06.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The primary benefit of the Monolithic-MUA approach""" start="00:07:09.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is that Emacs MUAs then become self-contained""" start="00:07:15.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and therefore multi-platform.""" start="00:07:19.600" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""But, when it comes to the question of merits of""" start="00:07:22.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""implementation of mail protocols in Elisp inside of Emacs,""" start="00:07:25.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""there is also another approach:""" start="00:07:30.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that of a Split-MUA.""" start="00:07:33.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Concept of a split-MUA is that of""" start="00:07:36.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""splitting the MUA into two different parts:""" start="00:07:40.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""One being the usage environment,""" start="00:07:44.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and the other being mail protocols processing.""" start="00:07:47.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The interface between these can be either""" start="00:07:50.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""direct (the upper box)""" start="00:07:54.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""or through protocols (the lower box).""" start="00:07:57.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With Gnus, we primarily use the direct interface.""" start="00:08:00.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The split-MUA model has many advantages""" start="00:08:05.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""over the monolithic-MUA model.""" start="00:08:09.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With Split-MUAs, your messages are local,""" start="00:08:12.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""you can search them privately""" start="00:08:17.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and access to your email is faster.""" start="00:08:19.840" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Gnus can be used as both a Monolithic-MUA""" start="00:08:22.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and also as a Split-MUA.""" start="00:08:28.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Gnus and other Emacs MUAs are flexible enough""" start="00:08:30.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to allow you to create your own split-MUA.""" start="00:08:35.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For outgoing mail, Gnus can""" start="00:08:39.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""invoke a sendmail-like interface program.""" start="00:08:42.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For incoming mail, Gnus can access Maildirs directly""" start="00:08:45.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and let other programs imap-retrieve""" start="00:08:50.008" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and update into maildirs.""" start="00:08:53.725" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""You can then search through your maildirs""" start="00:08:56.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""locally and privately""" start="00:08:59.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""with various mail-oriented search engines,""" start="00:09:01.375" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and many have done so.""" start="00:09:04.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For example, what we are seeing on this slide""" start="00:09:07.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is from a 2014 Do It Yourself (DIY) recipe""" start="00:09:11.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that one of our fellow Emacs conference participants,""" start="00:09:15.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Adolfo, had published at the mentioned URL.""" start="00:09:20.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The recipe in that slide is based on the following tools:""" start="00:09:24.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""mbsync, mu, mu4e, and msmtp.""" start="00:09:29.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""All our choices are different.""" start="00:09:35.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There are many such recipes out there on the web.""" start="00:09:38.280" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""So, here, I don't want to provide""" start="00:09:42.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""yet another Emacs Split-MUA recipe.""" start="00:09:46.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I want to do more.""" start="00:09:50.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Instead, I want to target the contours of the ultimate MUA""" start="00:09:51.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in the non-proprietary universe of digital ecosystems.""" start="00:09:56.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But, first, let's take a look at what is""" start="00:10:01.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""happening in the proprietary universe.""" start="00:10:05.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The 5 big American proprietary tech companies""" start="00:10:07.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""(Google, Microsoft, Apple, Facebook and Amazon)""" start="00:10:11.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""have created 5 competing enclaves as mostly separate""" start="00:10:14.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and isolated digital ecosystem.""" start="00:10:20.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In this slide, I am focusing on the first 3""" start="00:10:23.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and each of their office and email environments.""" start="00:10:27.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Let's clearly recognize that the economic model""" start="00:10:31.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of these proprietary digital ecosystems is:""" start="00:10:36.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;Surveillance Capitalism&quot;.""" start="00:10:40.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, when any of us goes there to get""" start="00:10:42.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""a free-of-charge email account,""" start="00:10:45.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""he has chosen to voluntarily forgo much of his privacy.""" start="00:10:47.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And many have done so.""" start="00:10:53.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Sadly, the rest of the world is becoming""" start="00:10:55.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Americanized through the American Internet.""" start="00:10:59.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""As of 2022, almost %90 of Facebook's""" start="00:11:02.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""daily active users come from outside of the US.""" start="00:11:08.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Also, with respect to email, each of the enclaves""" start="00:11:11.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""have MUAs that are fully integrated""" start="00:11:17.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in their digital ecosystems""" start="00:11:20.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in the form of an office environment""" start="00:11:22.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""comprising of address book, calendar, time management""" start="00:11:24.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and planning tools and multi-lingual authoring""" start="00:11:29.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and various other integrated tools.""" start="00:11:33.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Now, let's focus on the right side of this picture.""" start="00:11:36.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""On the non-proprietary side,""" start="00:11:40.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""based on the Western FLOSS model,""" start="00:11:43.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we have ended up with lots of components.""" start="00:11:46.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We have Debian as a platform,""" start="00:11:49.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we have Emacs as an editor-centered office environment""" start="00:11:52.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and we have Gnus as an incredibly powerful MUA.""" start="00:11:58.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But on the non-proprietary side we don't have anything""" start="00:12:03.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that can reasonably be considered a digital ecosystem.""" start="00:12:07.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I mean, the services aspect is missing.""" start="00:12:12.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Over the past two decades I have created""" start="00:12:16.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""quite an elaborate digital ecosystem for myself.""" start="00:12:20.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It is called: By*.""" start="00:12:24.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The Libre-Halaal ByStar Digital Ecosystem""" start="00:12:26.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is being built to provide autonomy-oriented services""" start="00:12:30.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""on internet scale.""" start="00:12:35.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The * in ByStar stands for Unix's globbing symbol,""" start="00:12:37.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""signifying that our scope is everything.""" start="00:12:42.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice in this bigger picture that in the red box,""" start="00:12:46.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""our focus remains to be Emacs, Gnus and the ultimate MUA.""" start="00:12:52.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am not here to sell you ByStar, but perhaps""" start="00:12:58.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""you should be in the market for something like that.""" start="00:13:03.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We need non-proprietary digital ecosystems.""" start="00:13:06.240" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Very briefly, I'll give you""" start="00:13:10.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""some pointers to the full ByStar story.""" start="00:13:13.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The full ByStar story is a 250 plus pages book titled:""" start="00:13:16.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Nature Of Polyexistentials,""" start="00:13:23.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Basis For Abolishment Of""" start="00:13:26.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The Western Intellectual Property Rights Regime,""" start="00:13:28.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And Introduction Of""" start="00:13:31.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The Libre-Halaal ByStar Digital Ecosystem.""" start="00:13:33.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I have it self-published on my own ByName public web page.""" start="00:13:36.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The ByStar story starts with understanding of the""" start="00:13:42.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Nature Of Polyexistentials.""" start="00:13:46.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Polyexistentials inherently exist in multiples.""" start="00:13:48.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Software is a polyexistential.""" start="00:13:53.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Polyexistentials are naturally non-scarce,""" start="00:13:56.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and making polyexistential artificially scarce,""" start="00:14:01.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which is what the Western""" start="00:14:06.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""intellectual property rights regime does,""" start="00:14:08.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is counter to nature.""" start="00:14:11.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Polyexistentials are unownable""" start="00:14:13.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and should not be considered property.""" start="00:14:17.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The Western IPR regime is in conflict with nature.""" start="00:14:20.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But, the book is more than just philosophy.""" start="00:14:25.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In that book I also cover""" start="00:14:29.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the bigger picture of healthy digital ecosystems""" start="00:14:32.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which also includes the topic of this presentation.""" start="00:14:35.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I'd be interested in your thoughts and your feedback,""" start="00:14:39.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""if you choose to dig deeper.""" start="00:14:43.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And if you want to dig deeper, here are some links.""" start="00:14:45.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""By* is about re-decentralization""" start="00:14:51.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of Internet application services.""" start="00:14:55.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Among other things, ByStar provides""" start="00:14:57.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""complete own-your-email services. I mean,""" start="00:15:00.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""private Hillary-Clinton-Style mail servers for everyone.""" start="00:15:05.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There is an overview of ByStar at by-star.net.""" start="00:15:10.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""You may have noticed that I consistently use""" start="00:15:16.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the &quot;Libre-Halaal&quot; label with ByStar.""" start="00:15:21.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Halaal is a very sensitive word.""" start="00:15:25.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am a Moslem.""" start="00:15:28.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But my use of Halaal is not in a religious context.""" start="00:15:30.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It is in a philosphical context.""" start="00:15:35.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And the scope of the &quot;Libre-Halaal&quot; label""" start="00:15:39.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is manner-of-existence of Software and Services.""" start="00:15:42.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It is not about Halaal-ness with respect to""" start="00:15:46.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""function and use of Software and Services.""" start="00:15:50.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Unfortunately, the word Halaal""" start="00:15:54.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and the concept of Halaal does not exist in English.""" start="00:15:58.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, first I introduce it into Globish.""" start="00:16:02.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I have done so in PLPC-120039.""" start="00:16:06.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Further, I explain as to why labels""" start="00:16:12.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of Open Source and Free Software are both ill-directed.""" start="00:16:18.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We then carefully define""" start="00:16:22.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;Libre-Halaal Software&quot; and &quot;Libre-Halaal Services&quot;.""" start="00:16:25.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice that last link.""" start="00:16:30.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I bet, this is the first time""" start="00:16:33.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that anyone includes a link to his &quot;Open Business Plan&quot;""" start="00:16:36.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in an Emacs Conference.""" start="00:16:40.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I hope others would do this as well.""" start="00:16:43.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There is appetite out there""" start="00:16:46.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for privacy- and autonomy-oriented digital ecosystems,""" start="00:16:49.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and there is no conflict between honest business,""" start="00:16:53.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""honest profit, and Libre-Halaal Software""" start="00:16:57.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and Libre-Halaal Services.""" start="00:17:01.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The sub-title of our open business plan is:""" start="00:17:02.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;An Inversion to the Proprietary Internet Services Model&quot;.""" start="00:17:08.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And here are the same links as a native Reveal slide.""" start="00:17:12.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""If instead of a video, you are viewing""" start="00:17:20.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""this presentation as a Reveal web page,""" start="00:17:24.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""you can just click on the pointers and URLs.""" start="00:17:27.400" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""So, what was the point of bringing ByStar""" start="00:17:31.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""into this presentation?""" start="00:17:36.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In tangible terms, what have we gotten out of""" start="00:17:38.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the tangent we took on the ByStar bigger picture?""" start="00:17:42.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Of course we have the ByStar Digital Ecosystem itself.""" start="00:17:45.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But that is not immediately relevant to this presentation.""" start="00:17:50.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Here, through BISOS we now have""" start="00:17:54.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""an integration framework, which we definitely needed.""" start="00:17:59.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We now have BISOS-MARMEE,""" start="00:18:04.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Multi-Account Resident Mail Exchange Environment,""" start="00:18:07.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which is a consistent set""" start="00:18:11.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of MUA-related software components --- which we need.""" start="00:18:13.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We also needed to augment Emacs in our own terms,""" start="00:18:17.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""so we have Blee for that,""" start="00:18:23.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""ByStar Libre-Halaal Emacs Environment,""" start="00:18:25.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is ByStar ecosystemized Emacs.""" start="00:18:29.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And finally Blee-Gnus, which is""" start="00:18:32.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Gnus and MARMEE integrated with Blee.""" start="00:18:37.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With these in place, we can now dive deeper into MARMEE.""" start="00:18:40.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The idea of MARMEE, is that of packaging together""" start="00:18:46.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the mail protocols parts of the Split-MUA.""" start="00:18:53.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""MARMEE (which is of course in the context of BISOS)""" start="00:18:56.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is the green box in this slide.""" start="00:19:00.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For outgoing mail, we use an altered qmail.""" start="00:19:03.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We will be looking deeper into qmail a bit later.""" start="00:19:08.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For incoming mail, we are using offlineimap""" start="00:19:12.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which is oauth2 aware.""" start="00:19:17.560" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Before going into more details,""" start="00:19:20.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""let's take a look at the parts lists for""" start="00:19:23.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""BISOS-MARMEE and Blee-Gnus.""" start="00:19:26.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""MARMEE is a collection of Python-based libraries""" start="00:19:29.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and Debian packages that provide for rich sending""" start="00:19:33.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and receiving of email outside of Emacs.""" start="00:19:37.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Here is our BISOS-MARMEE parts list.""" start="00:19:40.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""MARMEE features include tracked mail Sending""" start="00:19:44.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for confirmed mail communications""" start="00:19:48.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and email distribution facilities""" start="00:19:51.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""(say, similar to Constant Contact).""" start="00:19:54.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For Delivery Status Notification (DSN),""" start="00:19:57.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we have adopted flufl.bounce.""" start="00:20:02.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I'll be touching on everything that is qmail-related,""" start="00:20:06.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""namely qmail-remote.cs and mailfront, in a separate slide.""" start="00:20:10.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""notmuch is our choice of mail search engine.""" start="00:20:17.320" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Similarly, here is our Blee-Gnus Parts List.""" start="00:20:21.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Blee-Gnus is Gnus and MARMEE integrated with BISOS and Blee.""" start="00:20:27.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice mentions of org-msg and polymode here.""" start="00:20:33.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Later, I'll expand on these in the context of""" start="00:20:38.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""transitioning from Message-Mode to Message-Polymode.""" start="00:20:42.880" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""With these parts in place,""" start="00:20:47.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""now let's see how they will all come together.""" start="00:20:52.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Gnus is very flexible, and in combination with MARMEE,""" start="00:20:55.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""it can create an incredibly powerful MUA.""" start="00:21:00.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""On this slide, note the boxes""" start="00:21:03.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that include the FPs label.""" start="00:21:07.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""FP stand for File Parameters.""" start="00:21:10.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It is the basis of BISOS's configuration""" start="00:21:14.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and secrets management.""" start="00:21:18.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice that it has consistent agents""" start="00:21:20.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""inside of Emacs and on the OS.""" start="00:21:24.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This is a big deal""" start="00:21:27.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in that it can reduce user visible configuration complexity.""" start="00:21:29.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Also, notice the X822-Bus here.""" start="00:21:34.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The idea of X822-Bus is that of""" start="00:21:39.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""allowing for communication among user's preferences, Gnus""" start="00:21:44.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and MARMEE-qmail through addition of X- fields""" start="00:21:49.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in RFC-822 message headers.""" start="00:21:53.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""X822-Bus is used for selection of mail sending agents""" start="00:21:57.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and specification of delivery status parameters.""" start="00:22:03.600" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Of key significance in this picture""" start="00:22:08.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is our choice of qmail for outgoing mail.""" start="00:22:12.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Compared to sendmail, postfix, exim,""" start="00:22:15.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and other conventional MTAs;""" start="00:22:22.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the qmail ecosystem is far more flexible and potent.""" start="00:22:25.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We are not using qmail as is.""" start="00:22:31.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Ours is called bystar-qmail.""" start="00:22:34.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""When we use it as a traditional MTA,""" start="00:22:38.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we refer to it as PALS-qmail.""" start="00:22:41.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And when we use it on the MUA side, we call it MARMEE-qmail.""" start="00:22:45.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Just like Emacs, qmail has""" start="00:22:52.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""a solid core and a flexible periphery.""" start="00:22:56.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""All our alterations have been on the periphery.""" start="00:22:59.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We have replaced qmail-remote""" start="00:23:04.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""with our own Python implementation called qmail-remote.cs.""" start="00:23:07.891" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""By being in Python, it can do a lot more a lot more easily.""" start="00:23:14.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For example, qmail-remote.cs interacts with""" start="00:23:20.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Google Oauth2 APIs and allows you to send through Gmail.""" start="00:23:26.541" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This is shown with the red circle.""" start="00:23:33.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We have also replaced qmail-smtpd with mailfront,""" start="00:23:36.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""shown with a blue circle.""" start="00:23:43.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This allows us to use MARMEE Split-MUA""" start="00:23:46.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""through protocol interfaces.""" start="00:23:51.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Let's take a look at that.""" start="00:23:54.000" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Previously we looked at the &quot;Direct Interface&quot; of MARMEE,""" start="00:23:56.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""specifically, qmail-inject and Maildir for Gnus.""" start="00:24:02.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But what if we wanted to use""" start="00:24:08.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""MARMEE with other MUAs outside of Emacs?""" start="00:24:11.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""That can be done through the &quot;Protocol Interface&quot;.""" start="00:24:15.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""MARMEE also includes &quot;mailfront&quot;""" start="00:24:18.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which can function as an SMTP submit server for localhost.""" start="00:24:22.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This way, we can configure""" start="00:24:27.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the outgoing mail part of any MUA to point to the localhost""" start="00:24:30.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and have MARMEE-qmail function as an outgoing proxy.""" start="00:24:36.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For incoming mail, MARMEE-Split-MUA-Protocol-Interface""" start="00:24:41.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""includes &quot;Courier&quot;, which can function""" start="00:24:47.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""as an IMAP server for localhost.""" start="00:24:51.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This way, we can configure the incoming mail part""" start="00:24:54.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of any MUA to point to the localhost""" start="00:24:58.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and have MARMEE function as an incoming proxy""" start="00:25:02.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""by serving the local Maildir to the MUA.""" start="00:25:06.520" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""All sources for all of ByStar, BISOS,""" start="00:25:10.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Blee and MARMEE are subject to Affero GPL.""" start="00:25:18.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The sources and documentation are all republished""" start="00:25:23.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""under various &quot;Organizations&quot;""" start="00:25:28.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""under github.com/mohsenBanan""" start="00:25:30.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""All of ByStar, BISOS, Blee and MARMEE""" start="00:25:35.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""reflect work in progress,""" start="00:25:40.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and we are NOT recruiting users at this time.""" start="00:25:42.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For more than two decades,""" start="00:25:46.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I have been using these all in that bigger context.""" start="00:25:49.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""They are mostly real,""" start="00:25:53.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""but so far, just for myself and a few other engineers.""" start="00:25:56.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Our model is similar to God's early days.""" start="00:26:01.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""You may ask:""" start="00:26:06.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;How did God create all of this in just 7 days?&quot;""" start="00:26:08.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Well, easy, He did not have an installed base to deal with.""" start="00:26:12.120" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""You can obtain and install MARMEE in two ways. As is:""" start="00:26:17.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""as standalone-MARMEE, you can just""" start="00:26:24.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""pip install bisos.marmee.""" start="00:26:29.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For the Gnus part you are completely on your own.""" start="00:26:31.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Or on a Debian-11, you can just run""" start="00:26:35.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the bisos bootstrap script.""" start="00:26:40.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""That way you will have all of BISOS, which includes MARMEE""" start="00:26:43.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and you will have Blee, which includes Blee-Gnus.""" start="00:26:48.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""If you plan to do so,""" start="00:26:52.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I suggest that you first try it in a disposable VM.""" start="00:26:54.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""BISOS and Blee are large.""" start="00:26:58.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Many apt and pip packages will be installed!""" start="00:27:02.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And here are the same links as a native Reveal slide.""" start="00:27:06.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""If you are viewing this presentation as Reveal.js web page,""" start="00:27:11.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""you can just click on the pointers and URLs.""" start="00:27:17.520" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Let's consider MARMEE as an Emacs &quot;Common Agent&quot;.""" start="00:27:20.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""By &quot;Common-Agent&quot; I mean a capability""" start="00:27:25.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which Emacs builds on""" start="00:27:28.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and which other Apps can also use.""" start="00:27:30.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs has a very rich applications development framework""" start="00:27:33.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for absorbing common-agents.""" start="00:27:38.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Consider how magit has absorbed git,""" start="00:27:41.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""or how flycheck has absorbed mypy""" start="00:27:45.475" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""or how EAF does its work outside of Emacs ---""" start="00:27:49.775" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""that too can be considered a common-agent.""" start="00:27:54.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The common-agent model permits us""" start="00:27:57.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to do more outside of Emacs.""" start="00:28:02.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Common-agents maximize social benefits""" start="00:28:04.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and are more convivial.""" start="00:28:08.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For example, any MUA can profit from MARMEE.""" start="00:28:10.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But we don't have good ways of""" start="00:28:15.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""packaging Emacs and its packages""" start="00:28:18.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""with their common-agents.""" start="00:28:21.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Instead, we usually end up with DIY recipes.""" start="00:28:23.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This is why I am contextualizing""" start="00:28:28.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs inside of Blee and BISOS.""" start="00:28:32.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""That is what they are for.""" start="00:28:35.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And that is why I consider them""" start="00:28:38.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""immediately relevant to this presentation.""" start="00:28:40.425" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With an incredibly powerful Display Engine,""" start="00:28:43.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and an incredibly powerful Elisp Engine,""" start="00:28:47.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and an incredibly powerful Input Methods Engine,""" start="00:28:51.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and an incredibly powerful Common-Agents paradigm,""" start="00:28:55.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Emacs has the potential of being""" start="00:28:59.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""any non-proprietary digital ecosystem's""" start="00:29:02.708" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""preferred usage environment.""" start="00:29:06.408" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am in favor of putting more around Emacs""" start="00:29:08.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and strengthening integration of Emacs""" start="00:29:14.091" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""with Debian, explicitly,""" start="00:29:17.441" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""perhaps even at the cost of""" start="00:29:19.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""de-emphasizing its multi-platform attribute.""" start="00:29:22.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""A smaller Emacs is a better Emacs.""" start="00:29:26.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Notice that in this slide,""" start="00:29:30.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I have used many arrows in many colors.""" start="00:29:33.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Much of Emacs's power comes from its ability""" start="00:29:37.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to absorb and to integrate.""" start="00:29:45.600" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Tomohiro is right on the mark when he says,""" start="00:29:47.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""&quot;The reason why Emacs platform is good""" start="00:29:51.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""is that it cooperates with OS,""" start="00:29:55.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""not because it is good by itself.&quot;""" start="00:29:58.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I am suggesting that we should""" start="00:30:00.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""raise the bar from the OS""" start="00:30:04.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to the entirety of our digital ecosystem.""" start="00:30:06.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There are many models""" start="00:30:09.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for Emacs to cooperate with the OS""" start="00:30:13.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and with applications and with services.""" start="00:30:15.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The colors of arrows in the previous slide correspond to""" start="00:30:19.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the model of interface of the common-agent:""" start="00:30:25.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for example, sub-process invocation, pipe-based""" start="00:30:28.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""asynchronous interface, or file-based interactions.""" start="00:30:34.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""One important aspect of common-agent paradigm is that""" start="00:30:39.360" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""both the common-agent and its Emacs App""" start="00:30:44.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""need to be configured consistently.""" start="00:30:50.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In MARMEE and Blee-Gnus,""" start="00:30:53.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""we use File-Params to accomplish this.""" start="00:30:57.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In BISOS, there is a Python interface to File-Params,""" start="00:31:01.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""there is a Bash interface to File-Params,""" start="00:31:06.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and in Blee, there is an Elisp interface to File-Params.""" start="00:31:10.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, configurations are extended.""" start="00:31:15.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Furthermore, File-Params can be encrypted,""" start="00:31:18.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and credentials can be protected and shared.""" start="00:31:23.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This is a significant improvement over .authinfo""" start="00:31:26.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and its more recent incarnations.""" start="00:31:33.920" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""EmacsConf could be a great place""" start="00:31:36.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for users to provide feedback to developers""" start="00:31:41.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and for developers to suggest to developers.""" start="00:31:44.375" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In that spirit, my primary audience in this part""" start="00:31:47.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""are fellow Emacs developers.""" start="00:31:52.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""BISOS-MARMEE and Blee-Gnus are starting points.""" start="00:31:54.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We can collectively work""" start="00:32:00.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""towards improving what is in place.""" start="00:32:02.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Some such improvements involve""" start="00:32:04.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""collaboration among various Emacs developers.""" start="00:32:07.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Here, I am making some explicit requests""" start="00:32:11.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""from some of the relevant emacs developers.""" start="00:32:16.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""At most, these are requests and invitations.""" start="00:32:19.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For each of these requests, I am providing links""" start="00:32:24.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for additional details.""" start="00:32:28.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In due course, I'll follow up""" start="00:32:30.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in the Emacs developers mailing list.""" start="00:32:33.040" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""Gnus uses X-Message-SMTP-Method""" start="00:32:35.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for selection of Mail-Sending-Agent.""" start="00:32:41.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Even though all the qmail injection code is still in Gnus,""" start="00:32:45.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""support for &quot;X-Message-SMTP-Method: qmail&quot; is missing.""" start="00:32:50.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It takes 2 lines of code to revive it.""" start="00:32:58.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With regards to (1), qmail was previously supported in Gnus.""" start="00:33:02.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Lars, can you please reactivate it? Thanks.""" start="00:33:07.400" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""(2) is a terminology suggestion.""" start="00:33:11.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The term X-Message-SMTP-Method violates conceptual layering.""" start="00:33:16.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Please consider changing it to X-Message-Send-Method.""" start="00:33:21.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""In a Split-MUA setup, Gnus need not know about SMTP at all.""" start="00:33:27.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We just need to pass information""" start="00:33:33.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to a Mail-Sending-Agent selector.""" start="00:33:36.600" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""(3) is simply a design suggestion for""" start="00:33:39.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which I prepared the context.""" start="00:33:44.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text=""".authinfo and Emacs auth-source library""" start="00:33:46.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""are too Emacs-centric.""" start="00:33:51.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""We need to share config info and secrets""" start="00:33:54.200" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""between common-agents and Emacs.""" start="00:33:57.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""The File Parameters approach""" start="00:34:00.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""can be a general-purpose solution.""" start="00:34:03.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Is it reasonable to extend auth-source library to""" start="00:34:05.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""support File Params?""" start="00:34:10.840" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I'll cover (4) in the next slide.""" start="00:34:12.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""(5) is a philosophical common suggestion""" start="00:34:16.520" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""to all Emacs developers. We need to better cultivate""" start="00:34:21.160" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the model of Common-Agents integration with Emacs.""" start="00:34:26.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""And here are the same links as a native Reveal slide.""" start="00:34:30.880" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""A mail message comprises of""" start="00:34:39.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Envelope, Header and BodyParts.""" start="00:34:42.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Each of these have their own syntax (their own mode).""" start="00:34:45.600" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Conceivably Each BodyPart has its own mode.""" start="00:34:49.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, we need to evolve Message-Mode into Message-Polymode.""" start="00:34:53.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""More or less by default, org-mode has become""" start="00:34:59.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the beginnings of &quot;Emacs Native Markup Language -- ENML&quot;.""" start="00:35:03.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""With org-msg you can write your emails in org-mode ---""" start="00:35:09.000" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""destined as html.""" start="00:35:14.400" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""org-msg needs to become""" start="00:35:16.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""an integral part of Message-Polymode.""" start="00:35:19.560" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""It would be heavenly""" start="00:35:22.240" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""if Lars, Jérémy and Vitalie could collaborate""" start="00:35:25.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and give us the needed Message-Polymode. Thank you.""" start="00:35:29.960" video="mainVideo-mail" id="subtitle"]]
+[[!template new="1" text="""One way to verify that we have not gone astray""" start="00:35:34.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in our horizontal bigger pictures is to verify them""" start="00:35:38.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""through the concept of &quot;Vertical Slice Use Cases&quot;.""" start="00:35:42.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Let one use case be reading and writing""" start="00:35:46.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of mail on multiple gmail accounts with Gnus.""" start="00:35:50.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Google now requires use of oauth2 tokens""" start="00:35:54.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""which MARMEE can do outside of emacs.""" start="00:35:59.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""There is a recent email thread""" start="00:36:02.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""on that in the emacs-devel mailing list.""" start="00:36:05.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Let another use case be that of tracking delivery""" start="00:36:09.120" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and non-delivery reports for custom envelope addresses""" start="00:36:14.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""of byname.net (part of ByStar) autonomous mail services.""" start="00:36:18.680" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I would have loved to walk you through these""" start="00:36:26.040" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""vertical slice use cases""" start="00:36:30.320" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""as screen captures of my Blee environment.""" start="00:36:32.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""For that, I need at least another 20 minutes.""" start="00:36:36.440" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""But my time is up.""" start="00:36:40.640" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""So, let's consider this as the first""" start="00:36:43.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""in a series of presentations""" start="00:36:46.720" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""where next in this series could be""" start="00:36:48.920" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""the mentioned two vertical slice use cases.""" start="00:36:51.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Perhaps there could be another presentation""" start="00:36:55.480" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""on this topic in EmacsConf 2023.""" start="00:36:59.280" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""This document was produced entirely with""" start="00:37:02.880" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Libre-Halaal Software, and is published using""" start="00:37:06.760" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""Libre-Halaal Internet Services.""" start="00:37:10.800" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""I want to thank all the EmacsConf Organizers""" start="00:37:13.080" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""for their great work,""" start="00:37:17.960" video="mainVideo-mail" id="subtitle"]]
+[[!template text="""and Sacha, Leo, and Amin in particular.""" start="00:37:19.520" video="mainVideo-mail" id="subtitle"]]
+
+
+
+Captioner: mohsen
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20mail%3A%20Revisiting%20the%20anatomy%20of%20Emacs%20mail%20user%20agents)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/mail-before.md b/2022/info/mail-before.md
new file mode 100644
index 00000000..bb7ce309
--- /dev/null
+++ b/2022/info/mail-before.md
@@ -0,0 +1,64 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Mohsen Banan describes how Emacs mail can be part of a comprehensive digital ecosystem. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="mail">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect stroke-width="3" x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 38-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-mail>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T18:50:00Z" end="2022-12-03T19:30:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~1:50 PM - 2:30 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~12:50 PM - 1:30 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~11:50 AM - 12:30 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~10:50 AM - 11:30 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~6:50 PM - 7:30 PM UTC <br />Saturday, Dec 3 2022, ~7:50 PM - 8:30 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~8:50 PM - 9:30 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~12:20 AM - 1:00 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~2:50 AM - 3:30 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~3:50 AM - 4:30 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="mail-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mail-mainVideo" data="""
+00:00.000 Introduction
+01:41.080 Mail and the digital ecosystem
+03:33.600 Platformization and Mail
+05:32.400 Contours of this presentation
+06:19.800 Anatomy of monolithic MUAs
+06:42.840 Existing Elisp mail libraries and modes
+07:22.960 Concept of a split-MUA
+08:22.320 Emacs and the culture of DIY split-MUAs
+09:42.400 A glimpse of the bigger picture
+13:10.880 The full ByStar story
+17:31.320 ByStar DE context, assets, and terminology
+19:20.120 MARMEE parts list
+20:21.760 Blee-Gnus parts list
+20:47.680 Deep integration of BISOS-MARMEE and Blee-Gnus
+22:08.840 qmail and bystar-qmail
+23:56.560 MARMEE: common-agent for split-MUA implementations
+25:10.760 Obtaining, installing, and configuring MARMEE
+26:17.200 Installing MARMEE
+27:20.480 Emacs inside of ByStar
+29:47.760 Emacs common-agent models and interfaces
+31:36.960 Evolution of Gnus with MARMEE
+32:35.280 X-Message-SMTP-Method: qmail
+33:11.320 X-Message-Send-Method
+33:39.320 Shared common-agents configuration and secrets management
+34:39.600 Evolution of message-mode into message-polymode
+35:34.080 Two vertical-slice mail use cases
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.webm">Download --main.webm (88MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.opus">Download --main.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/dAg6eAtVYa2oVuSBcMZE9q">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="mail-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mail-qanda" data="""
+07:25.000 Why Gnus over Notmuch?
+08:59.000 So the idea is more about Emacs as a holistic computing experience with other packages and services rather than about email specifically?
+10:38.000 Early on you expressed misgivings about the western copyright regime, but you're using a GPL license. Is this a conflict?
+15:15.000 Do you know of GNU Guix? How do you think about using it for packaging/configuring Emacs and your various packages?
+16:47.000 Is this being split up in a heavily configured server for email hosting and a thin client package for your local client to integrate with your Emacs packages, maybe with a client thin docker container for other packages like notmuch locally?
+23:23.000 So do you combine tagging facilities of Notmuch into Gnus as well?
+25:38.000 Could you expand on the definition of libre-halaal?
+31:30.000 What is the scope of what you are imagining? Just software?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="mail-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.webm">Download --answers.webm (34MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.opus">Download --answers.opus (12MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/mail-nav.md b/2022/info/mail-nav.md
new file mode 100644
index 00000000..f527ff0e
--- /dev/null
+++ b/2022/info/mail-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/buttons">Linking personal info with Hyperbole implicit buttons</a>
+Next by track: <a href="/2022/talks/realestate">Real estate and Org table formulas</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/maint-after.md b/2022/info/maint-after.md
new file mode 100644
index 00000000..761bfb3d
--- /dev/null
+++ b/2022/info/maint-after.md
@@ -0,0 +1,400 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="maint-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""When we think about the problems of the world""" start="00:00:00.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we see global warming, war, appropriation, poverty,""" start="00:00:06.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and among numerous other problems,""" start="00:00:12.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""also the inability to make a living""" start="00:00:13.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as an open source developer.""" start="00:00:16.200" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""Now this last problem may seem a lot less consequential""" start="00:00:18.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""compared to the other ones,""" start="00:00:22.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""but what if I told you that the solution to this problem""" start="00:00:23.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and the solutions to the others are one and the same?""" start="00:00:26.760" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""And it's because there's a common underlying problem""" start="00:00:30.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""at the heart of all of these problems.""" start="00:00:33.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""I'm going to tell you what that problem is in one sentence.""" start="00:00:36.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""You ready for it? It is ...""" start="00:00:39.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the deviation of market value from _true_ value.""" start="00:00:42.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Let's think about this in the context of""" start="00:00:48.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""existing economic systems such as capitalism and communism.""" start="00:00:50.440" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""And of these, I want to focus on capitalism""" start="00:00:55.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because it is the only nontrivial economic system, really.""" start="00:00:58.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Communism is more sort of a political means""" start="00:01:02.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to achieve economic ends.""" start="00:01:04.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the other economic systems exist""" start="00:01:07.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""sort of on a spectrum between these two.""" start="00:01:09.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So let's focus on capitalism.""" start="00:01:11.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Capitalism has as its basis of value supply and demand.""" start="00:01:14.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And consequently, there is a great emphasis""" start="00:01:19.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""on this idea of ownership.""" start="00:01:21.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now ownership is an idea that made some kind of sense""" start="00:01:25.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""when you have goods and services""" start="00:01:28.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are constrained in some way,""" start="00:01:31.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are essentially finite in supply.""" start="00:01:33.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But when you have things like""" start="00:01:36.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""works of software, art, and music,""" start="00:01:37.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which are essentially infinite in supply,""" start="00:01:41.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the idea of ownership and supply and demand""" start="00:01:43.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""don't make sense anymore.""" start="00:01:46.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And yet we employ the institution of property""" start="00:01:48.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to constrain supply and introduce the idea of supply""" start="00:01:51.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""just so that we can induce a market value""" start="00:01:56.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in terms of supply and demand""" start="00:01:58.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in a capitalist economic system. And it's wrongheaded.""" start="00:02:00.320" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""How many of us have written copyright declarations""" start="00:02:05.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""like these on our work.""" start="00:02:10.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""It's a lot of work!""" start="00:02:12.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Especially when we have version control.""" start="00:02:14.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now in this example,""" start="00:02:18.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""almost every line is written by a different person,""" start="00:02:19.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""so who owns the code in this case?""" start="00:02:23.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Who owns the copyright here?""" start="00:02:25.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Is it some of them, is it all of them,""" start="00:02:27.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""do they share it in some way?""" start="00:02:30.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""It doesn't really make sense,""" start="00:02:32.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""especially when the reason we're employing""" start="00:02:34.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""copyright and ownership in this case""" start="00:02:37.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is to approximate the idea of attribution,""" start="00:02:40.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which is what we really care about here.""" start="00:02:44.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And that brings us to the nature of the solution,""" start="00:02:46.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which is to move away from an economic system""" start="00:02:51.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""based on ownership and supply and demand,""" start="00:02:53.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to an economic system based on attribution, instead.""" start="00:02:55.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""That is, moving away from who _owns_ what""" start="00:02:59.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to who _did_ what and how important was it.""" start="00:03:02.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And we can do this by the process of""" start="00:03:07.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Dialectical Inheritance Attribution,""" start="00:03:09.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which just means that we do it in a collective way""" start="00:03:12.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""using common collectively agreed upon standards""" start="00:03:16.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are applied transparently to all.""" start="00:03:20.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And when we have an economic system""" start="00:03:24.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that is based on attribution""" start="00:03:25.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as the source of value in this way,""" start="00:03:26.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we call it attribution based economics.""" start="00:03:28.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now, once we have that, it gives us fairness,""" start="00:03:34.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""effective empowerment of expertise,""" start="00:03:39.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""freedom through incentives rather than through coercion.""" start="00:03:43.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And privacy as well.""" start="00:03:46.360" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""But I could tell you all of those things""" start="00:03:49.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and some may still say, &quot;Why should I care about this?&quot;""" start="00:03:52.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""There are those who would say""" start="00:03:57.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that fairness is not a good goal,""" start="00:03:58.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and that might makes right,""" start="00:04:00.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and that as Darwin showed us,""" start="00:04:03.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the nature of nature is violence.""" start="00:04:04.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now I know that many of us reject this ideology,""" start="00:04:09.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and we feel in our bones that it is wrong.""" start="00:04:12.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But luckily we don't have to resort to high philosophy""" start="00:04:16.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and gut feeling in order to convince ourselves""" start="00:04:19.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that an attribution-based system is truly better.""" start="00:04:21.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Because in addition to all of""" start="00:04:24.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""those other properties we talked about,""" start="00:04:26.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""an attribution-based economic system is also efficient.""" start="00:04:28.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And I say this from the perspective of having""" start="00:04:33.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""an admiration for the efficiency of capitalism.""" start="00:04:36.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So understand that that is my perspective""" start="00:04:39.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""when I say that this system --""" start="00:04:43.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""an attribution-based economic system --""" start="00:04:45.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is significantly more efficient than capitalism.""" start="00:04:47.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And it achieves that by virtue of eliminating the waste""" start="00:04:51.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that is inherent in adversarial competition,""" start="00:04:55.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""while still preserving market forces!""" start="00:04:58.480" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""In addition to this property""" start="00:05:01.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""there is also this other property""" start="00:05:05.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that I think is truly profound,""" start="00:05:07.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and I want to motivate it by this example of a gyroscope.""" start="00:05:10.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now many of us have had the opportunity to play with""" start="00:05:15.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""a gyroscope at some point in our lives.""" start="00:05:19.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""If you haven't, I encourage you to go out and get one""" start="00:05:21.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and try it out. It also makes a good gift""" start="00:05:23.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""if you're thinking about giving it""" start="00:05:25.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to somebody else this year.""" start="00:05:27.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But if you've played with a gyroscope""" start="00:05:28.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""then you've had the experience, perhaps,""" start="00:05:32.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""of putting it on your hand and moving it around.""" start="00:05:35.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And no matter what you do, it will always maintain its axis.""" start="00:05:37.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Even if you try to push it""" start="00:05:42.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and try to make it deviate from that axis,""" start="00:05:45.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""it will fight you. It will resist you,""" start="00:05:48.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and keep to that axis no matter what.""" start="00:05:50.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And if you've had this experience,""" start="00:05:53.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""then believe it or not,""" start="00:05:56.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""you have some insight into the nature of economic systems.""" start="00:05:58.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Because if we try to get an economic system to do something""" start="00:06:02.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""other than what it wants to do,""" start="00:06:07.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""other than what is its nature,""" start="00:06:09.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""then it will resist us and it will fight that change.""" start="00:06:11.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now, I don't know about you,""" start="00:06:14.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""but I'd prefer to avoid fighting these gyroscopic forces.""" start="00:06:17.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""I'd rather have these forces work with me""" start="00:06:22.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""rather than against me. Now in a capitalist system,""" start="00:06:25.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""there is another problem, which is that""" start="00:06:29.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""not only do you have these gyroscopic forces at work,""" start="00:06:32.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""but these forces aren't even all working together.""" start="00:06:35.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""They're working against each other, in many cases.""" start="00:06:39.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""They represent misaligned interests.""" start="00:06:42.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And indeed, these misaligned interests""" start="00:06:46.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""are the very means by which these forces operate at all.""" start="00:06:50.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So in a way, war is not just""" start="00:06:53.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""an inevitable consequence in this system""" start="00:06:57.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""but is rather the very nature of such a system.""" start="00:06:59.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""In an attribution-based system, on the other hand,""" start="00:07:05.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""by virtue of the source of value""" start="00:07:08.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""being collective attribution,""" start="00:07:11.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we are able to achieve alignment""" start="00:07:13.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""of all of these interests at every scale,""" start="00:07:17.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""so that at every scale of society,""" start="00:07:19.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""from the smallest to the largest scales,""" start="00:07:22.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the interests will be aligned,""" start="00:07:24.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""will be consonant and harmonious.""" start="00:07:26.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""I think this is a very important, profound quality""" start="00:07:28.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that I think is the fundamental problem of economics -""" start="00:07:33.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the fundamental goal of economics to solve.""" start="00:07:38.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And I believe that an attribution-based economic system""" start="00:07:40.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""addresses it and solves it.""" start="00:07:43.840" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""So without further ado, I want to bring it home""" start="00:07:45.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to the prototype that we have in mind""" start="00:07:50.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""for the Emacs community.""" start="00:07:52.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now we want to start in the Emacs community""" start="00:07:53.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because Emacs has a long tradition""" start="00:07:56.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""of exploring better ways of doing things""" start="00:07:58.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and pursuing better alternatives to the status quo.""" start="00:08:02.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now, to give you an overview of the prototype""" start="00:08:05.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that we've implemented for open source projects.""" start="00:08:09.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The prototype is composed of two broad phases,""" start="00:08:12.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that is, the appraisal phase and the accounting phase.""" start="00:08:15.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Any project is composed of ideas, capital and labor.""" start="00:08:18.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The appraisal phase is involved in assessing the work done""" start="00:08:21.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in terms of how much value was created""" start="00:08:26.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and who created the value and how important that value is.""" start="00:08:29.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The output of this stage is an attributions file.""" start="00:08:31.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the second phase, of accounting, is about, you know,""" start="00:08:35.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""how do you handle payments that come in""" start="00:08:42.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and how do you pay people out.""" start="00:08:43.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now the first part has more of a social component to it""" start="00:08:45.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and the second part has more of""" start="00:08:48.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""a technological component to it that can be automated.""" start="00:08:50.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So in order to implement this prototype,""" start="00:08:53.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we have two things.""" start="00:08:56.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""We have founding documents that describe the social aspects,""" start="00:08:57.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and an accounting system that automates""" start="00:09:01.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""some of the technological aspects.""" start="00:09:04.040" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""The founding documents, in the noble tradition""" start="00:09:05.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""of the Gayaneshagowa and the US constitution,""" start="00:09:10.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""include a constitution which describes""" start="00:09:14.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the guiding principles of ABE,""" start="00:09:17.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and the two main prongs are forward-looking empowerment""" start="00:09:20.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and backward-looking fairness.""" start="00:09:25.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""This means that we want to empower""" start="00:09:26.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""those individuals and groups""" start="00:09:28.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are most likely to create value in the future,""" start="00:09:31.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""while also recognizing and fairly compensating""" start="00:09:33.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""those who've created value in the past,""" start="00:09:36.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to set a good example and incentivize others""" start="00:09:38.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to take chances in creating value.""" start="00:09:41.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And it describes high level principles of""" start="00:09:45.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""dialectical inheritance attribution""" start="00:09:50.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as proceeding by means of""" start="00:09:52.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""common, collectively agreed-upon standards""" start="00:09:53.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are applied to all.""" start="00:09:56.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the key thing here is these improvements feed back""" start="00:09:56.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to the whole and apply to everyone.""" start="00:09:59.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And this is an important quality""" start="00:10:01.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to ensuring fairness and accuracy.""" start="00:10:03.640" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""There's also a declaration of non-ownership.""" start="00:10:05.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""We saw already that ownership is an overused institution.""" start="00:10:09.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""This just codifies that and allows us to shed""" start="00:10:13.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the baggage of this idea of ownership""" start="00:10:20.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""where it doesn't make any sense.""" start="00:10:22.440" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""A third document is the financial model""" start="00:10:24.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which describes how payments are to be treated,""" start="00:10:28.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and a key idea here is that when you pay money""" start="00:10:31.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to an open source project, you know,""" start="00:10:34.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""today you don't really have an incentive to do so,""" start="00:10:37.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and it essentially is kind of like a donation.""" start="00:10:40.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But in this model, in an attribution-based model,""" start="00:10:42.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""when you pay money to a project,""" start="00:10:46.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""you're creating value in a way.""" start="00:10:48.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""You're contributing value to the project""" start="00:10:50.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and that itself is attributable.""" start="00:10:51.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the manner in which we'll treat this""" start="00:10:53.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is in terms of the fair market price that, again,""" start="00:10:56.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we agree upon collectively.""" start="00:10:58.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And any payment that exceeds the fair market price""" start="00:11:00.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is going to be treated as investment.""" start="00:11:04.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the goal here for this financial model""" start="00:11:06.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is for the system to be self-sustaining,""" start="00:11:10.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""so I think there are many open problems here""" start="00:11:11.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and any finance experts or any other experts""" start="00:11:15.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""who are interested in contributing here,""" start="00:11:18.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""your help is needed, certainly.""" start="00:11:21.480" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""There's also an attribution model document,""" start="00:11:23.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which describes some of the theoretical ideas""" start="00:11:26.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that would guide dialectical inheritance attribution,""" start="00:11:29.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and there are many interesting ideas here.""" start="00:11:33.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""One that I'd like to mention is &quot;backpropagation,&quot;""" start="00:11:36.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which is the idea that""" start="00:11:40.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as we're improving the standards over time""" start="00:11:42.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and they're likely to get more accurate and fair over time,""" start="00:11:45.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we'd like these more accurate and fair standards""" start="00:11:48.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to &quot;backpropagate&quot; and calibrate the value assignments""" start="00:11:51.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that were done in the past.""" start="00:11:56.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And this means that some people might have been""" start="00:11:57.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""underpaid in the past""" start="00:12:01.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and we would pay them what they were underpaid,""" start="00:12:02.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""or the balance,""" start="00:12:05.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and some people may have been overpaid.""" start="00:12:06.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Now in that case we're not going to go and say,""" start="00:12:08.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""&quot;hey we overpaid you, give us the money back.&quot;""" start="00:12:11.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Instead the system as a whole is going to bear""" start="00:12:14.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the cost of being wrong,""" start="00:12:18.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and so it's kind of an insurance policy.""" start="00:12:19.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But I think another more interesting quality here is that""" start="00:12:22.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the system in practice wouldn't really""" start="00:12:25.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""absorb any negative impact here""" start="00:12:29.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because there is an incentive""" start="00:12:33.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""for these people who've been overpaid""" start="00:12:34.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to reinvest that money.""" start="00:12:37.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So I think they would want to invest the money""" start="00:12:38.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in other places that the system has valued""" start="00:12:42.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as being valuable and showing potential.""" start="00:12:45.520" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""The second component of the implementation""" start="00:12:49.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is the accounting system. All accounting is public.""" start="00:12:54.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""All payments into the repo are public""" start="00:12:58.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and all payments out of the project are also public.""" start="00:13:00.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""We can do some things for privacy,""" start="00:13:03.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and again, the basis of this system is dialogue.""" start="00:13:05.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""It's not a fundamentally technologically system.""" start="00:13:08.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""It's a fundamentally dialogue-based system,""" start="00:13:10.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and that, to be honest with you, is everything.""" start="00:13:12.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""It's all systems that we have in place.""" start="00:13:14.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But by embracing that, it means that""" start="00:13:17.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we can do whatever we want to do by discussion,""" start="00:13:21.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and if there's something""" start="00:13:25.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that we cannot achieve in a technological way,""" start="00:13:26.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we'll achieve it in a non-technological way.""" start="00:13:27.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""But anyway, the point is, all accounting is public,""" start="00:13:30.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and text files in the repository""" start="00:13:36.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""form the inputs and outputs of the accounting system""" start="00:13:40.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which is implemented as a GitHub action.""" start="00:13:43.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So typically a source repository will have""" start="00:13:48.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""an ABE folder containing these three inputs:""" start="00:13:51.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""attributions, payments,""" start="00:13:54.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and payouts. And we'll see how that works.""" start="00:13:55.600" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""This is the drym.org Github organization account.""" start="00:13:59.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""This is an example of a repository that uses""" start="00:14:04.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the GitHub action accounting system.""" start="00:14:09.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So there will be a payments folder, a payouts folder,""" start="00:14:12.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as well as an attributions file.""" start="00:14:16.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The payments: essentially each file""" start="00:14:18.640" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""just represents a payment that's made to the repository.""" start="00:14:23.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Payouts is the same except it's payments""" start="00:14:26.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""made by the admins of the repository to contributors.""" start="00:14:29.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And the attributions file breaks down""" start="00:14:32.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the attribution of the value in the repository""" start="00:14:37.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""by contributor. And then the billing system runs""" start="00:14:40.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""on every relevant commit,""" start="00:14:47.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""which is typically changes to the ABE folder,""" start="00:14:50.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""generates a set of transactions""" start="00:14:53.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that are owed to various people from various payments,""" start="00:14:57.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and then creates an issue with the outstanding balances""" start="00:15:00.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that need to be paid out to contributors,""" start="00:15:05.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and tells you what those balances are.""" start="00:15:07.280" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So for repository or project maintainers,""" start="00:15:09.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""it automates all these accounting details""" start="00:15:11.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and you just have to worry about fulfilling the payments.""" start="00:15:14.880" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""An interesting property of the prototype""" start="00:15:17.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is that boundary incentives expand the boundary,""" start="00:15:23.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and that is that the incentives in the system""" start="00:15:28.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""are so constructed that those on the periphery""" start="00:15:33.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""of the attribution-based economic system""" start="00:15:38.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""have an incentive to join in.""" start="00:15:40.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And we'll see how that works.""" start="00:15:42.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Well, as I mentioned, we're starting this prototype""" start="00:15:45.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in the Emacs community with the""" start="00:15:51.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Symex repo. Symex is a structural editing package,""" start="00:15:52.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and this prototype will recognize direct contributors""" start="00:15:59.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as well as antecedents and related projects""" start="00:16:05.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""through the process of collective attribution.""" start="00:16:08.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""We all decide how financial contributions to the Symex repo""" start="00:16:09.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""are going to be distributed to the direct contributors""" start="00:16:14.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as well as to antecedents and related projects.""" start="00:16:18.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So the power is yours!""" start="00:16:21.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And that's what I meant when I said""" start="00:16:23.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that the boundary incentives expand the boundary,""" start="00:16:27.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because projects that we agree are owed money""" start="00:16:29.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""from the Symex repo now would have an incentive to join,""" start="00:16:32.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because once they join they would get that money.""" start="00:16:37.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And we'll also be implementing this in the""" start="00:16:39.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Racket community. Racket is a Scheme dialect,""" start="00:16:43.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and Emacs has great support for Racket in Racket Mode""" start="00:16:47.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""so I encourage you to try it.""" start="00:16:50.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And we'll be prototyping it in the Qi repository.""" start="00:16:52.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Qi is a language written in Racket which is, you know,""" start="00:16:56.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""it's for functional programming and things like that.""" start="00:16:59.600" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And once again, we'll recognize direct contributors""" start="00:17:02.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as well as antecedents and we all decide""" start="00:17:06.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and agree on how those are done.""" start="00:17:09.240" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""So how do you adopt this?""" start="00:17:11.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""You can add the github action to a repo""" start="00:17:14.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that you are a maintainer of.""" start="00:17:18.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""You can financially support an ABE project.""" start="00:17:20.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""This is important to do""" start="00:17:23.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because the system won't get started""" start="00:17:25.200" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""without money as an input.""" start="00:17:26.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And it also has network effects, as we saw -""" start="00:17:28.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the more money you contribute,""" start="00:17:31.120" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the more incentive there is""" start="00:17:33.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""for other people to join the system.""" start="00:17:35.240" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And contributions are also attributable,""" start="00:17:36.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as we said earlier.""" start="00:17:39.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Some of them can be treated as investments.""" start="00:17:41.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Any help you can provide with funding""" start="00:17:43.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""would be attributable and very helpful, of course.""" start="00:17:48.000" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And yeah, if you can help us achieve""" start="00:17:50.520" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""the goal of self-sufficiency""" start="00:17:54.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""without relying on capitalist entry points,""" start="00:17:55.840" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that would be very helpful as well.""" start="00:17:59.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""I'd like to acknowledge the help of many individuals""" start="00:18:01.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""for this presentation""" start="00:18:06.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""as well as many of the supporting things""" start="00:18:09.400" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that have gone on behind the scenes for years.""" start="00:18:12.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And in particular for now I want to mention""" start="00:18:14.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""Jair and Ariana who wrote the accounting system""" start="00:18:19.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that we saw earlier, and Salim who encouraged me""" start="00:18:25.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""to take this social approach to the prototype.""" start="00:18:28.320" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And so many more people who have believed and invested""" start="00:18:32.800" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""in the cause of &quot;attribution, not ownership!&quot;""" start="00:18:36.560" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""I want to leave you with this closing thought.""" start="00:18:39.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The electromagnetic attraction between two objects""" start="00:18:42.760" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is 10^42 stronger (!) than the gravitational attraction""" start="00:18:46.160" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""between these same objects.""" start="00:18:49.920" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And yet, a stone falls to the Earth""" start="00:18:51.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""under the influence of gravity, not magnetism.""" start="00:18:53.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""The reason is that the e/m forces are polarized,""" start="00:18:56.680" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""much like our world, and cancel each other out.""" start="00:19:00.880" video="mainVideo-maint" id="subtitle"]]
+[[!template new="1" text="""Now in this world, we are told""" start="00:19:04.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""that we should look out for ourselves""" start="00:19:07.720" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because no one is going to look out for us.""" start="00:19:09.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""That we should take care of our own""" start="00:19:11.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because we can't rely on others to care.""" start="00:19:14.040" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""An attribution-based economy is nothing like that.""" start="00:19:17.360" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""We care about each other,""" start="00:19:22.480" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""we take care of each other,""" start="00:19:23.960" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""because taking care of one another is valuable,""" start="00:19:25.440" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""and an attribution-based economic system""" start="00:19:29.880" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""is capable of recognizing that value, in financial terms.""" start="00:19:32.560" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""And as a result, we are safe in the embrace of the world.""" start="00:19:39.080" video="mainVideo-maint" id="subtitle"]]
+[[!template text="""So, um, yeah. Let's go!""" start="00:19:43.880" video="mainVideo-maint" id="subtitle"]]
+
+
+
+Captioner: sid
+
+Questions or comments? Please e-mail [sid@drym.org](mailto:sid@drym.org?subject=Comment%20for%20EmacsConf%202022%20maint%3A%20Maintaining%20the%20Maintainers%3A%20Attribution%20as%20an%20Economic%20Model%20for%20Open%20Source)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/maint-before.md b/2022/info/maint-before.md
new file mode 100644
index 00000000..b37e44d3
--- /dev/null
+++ b/2022/info/maint-before.md
@@ -0,0 +1,60 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="maint">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect stroke-width="3" x="549" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 20-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-maint>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T19:50:00Z" end="2022-12-03T20:10:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~2:50 PM - 3:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~1:50 PM - 2:10 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~12:50 PM - 1:10 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~11:50 AM - 12:10 PM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~7:50 PM - 8:10 PM UTC <br />Saturday, Dec 3 2022, ~8:50 PM - 9:10 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~9:50 PM - 10:10 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~1:20 AM - 1:40 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~3:50 AM - 4:10 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~4:50 AM - 5:10 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="maint-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="maint-mainVideo" data="""
+00:00.000 Problems
+00:18.840 Solution?
+00:30.840 A common underlying problem
+00:55.840 Capitalism
+02:05.760 Copyright
+03:49.840 An attribution-based economic system is efficient
+05:01.760 Gyroscopes
+07:45.200 Prototypes
+09:05.920 Founding documents
+10:05.920 Declaration of non-ownership
+10:24.320 The financial model
+11:23.240 The attribution model
+12:49.120 The accounting system
+13:59.920 drym.org Github account
+15:17.600 Expanding the boundary
+17:11.560 Adopting this idea
+18:39.160 Closing thoughts
+19:04.080 Taking care of one another
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.webm">Download --main.webm (64MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/6vrCBs7r9RELh2byQ4CMsj">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="maint-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="maint-qanda" data="""
+00:18.720 Short recap of what the talk was about?
+02:09.280 What's the incentive to pay?
+04:04.014 What do you think of projects like OpenQ?
+04:23.305 Are you aware of SourceCred?
+07:39.889 How is this different from money?
+08:58.080 How would you approach a viable experiment for ABE?
+10:33.999 How do you constrain the cognitive and time burdens of deciding the values of attributed contributions?
+13:29.360 How are the attribution amounts calculated?
+16:29.820 Synchronicity with Bastien's talk last year
+17:28.960 What are your assumptions about human nature?
+21:17.680 What is the URL of the project?
+21:45.002 Check out the prototype, "Old Abe"
+22:29.520 Closing Remarks
+23:50.320 A flicker of light and following your curiosity
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="maint-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.webm">Download --answers.webm (114MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.opus">Download --answers.opus (15MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/maint-nav.md b/2022/info/maint-nav.md
new file mode 100644
index 00000000..44197598
--- /dev/null
+++ b/2022/info/maint-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/realestate">Real estate and Org table formulas</a>
+Next by track: <a href="/2022/talks/health">Health data journaling and visualization with Org Mode and gnuplot</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/meetups-after.md b/2022/info/meetups-after.md
new file mode 100644
index 00000000..e05ba4c0
--- /dev/null
+++ b/2022/info/meetups-after.md
@@ -0,0 +1,899 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="meetups-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello everyone, welcome to my talk.""" start="00:00:00.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I hope you all have been""" start="00:00:09.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""enjoying EmacsConf so far, like I am.""" start="00:00:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""But you might be wondering,""" start="00:00:14.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;How do I meet fellow Emacs users""" start="00:00:15.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""after the conference?&quot;""" start="00:00:18.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What if I tell you there is a way?""" start="00:00:21.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The answer is local meetups.""" start="00:00:23.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""These are user groups who arrange events""" start="00:00:26.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""at some frequency, they meet at some frequency.""" start="00:00:29.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's what we are going to talk about today:""" start="00:00:34.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""attending and organizing Emacs meetups.""" start="00:00:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""In other words, enjoying your Emacs journey""" start="00:00:39.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""with more folks!""" start="00:00:41.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I am Bhavin, I am from India,""" start="00:00:43.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and I have been organizing""" start="00:00:45.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Emacs Asia Pacific meetup""" start="00:00:47.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""since last few months [almost 2 years].""" start="00:00:49.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""We will be talking about online meetups""" start="00:00:52.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""most of the time.""" start="00:00:54.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The beauty of online meetups is,""" start="00:00:57.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you can join any meetups""" start="00:00:59.251" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""if the time permits,""" start="00:01:01.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""if the time zone is same.""" start="00:01:03.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And there is no barrier.""" start="00:01:05.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So let's get started.""" start="00:01:07.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Let's see how a meetup looks like.""" start="00:01:10.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""We will see one of the Emacs APAC meetup's""" start="00:01:14.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""snippet, basically.""" start="00:01:18.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: There is something called org-indent-mode.""" start="00:01:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, it's like this org-adapt-indentation""" start="00:01:29.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which is like electric indent.""" start="00:01:33.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Like when you press enter, it will indent.""" start="00:01:34.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There is org-indent-mode, which does not require you""" start="00:01:37.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to actually make the indents physically""" start="00:01:41.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""in the file.""" start="00:01:44.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""It will make things appear indented.""" start="00:01:45.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""This one?""" start="00:01:54.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Yeah.""" start="00:01:55.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Bhavin]: org-adapt-indentation.""" start="00:01:56.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Okay.""" start="00:01:57.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Looks interesting, right?""" start="00:02:03.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, let's get into more details.""" start="00:02:04.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""You might have a question:""" start="00:02:08.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Why I should attend meetups?&quot;""" start="00:02:09.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's a good question.""" start="00:02:11.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should always ask &quot;why&quot;.""" start="00:02:12.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""It's an opportunity to learn together.""" start="00:02:14.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You basically meet like-minded people,""" start="00:02:19.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""like-minded Emacs users,""" start="00:02:21.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you can always have fun, right?""" start="00:02:23.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""You still might have a question:""" start="00:02:27.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;I am a beginner.&quot;""" start="00:02:29.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I would say that's a great avenue for you.""" start="00:02:31.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You get to discover more things.""" start="00:02:34.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can get help if you are facing""" start="00:02:36.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""any issues, any errors.""" start="00:02:38.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And always keep in mind that it's okay""" start="00:02:41.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""if you don't understand everything""" start="00:02:42.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""from the discussions.""" start="00:02:44.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There are going to be times where everything is…,""" start="00:02:45.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""all the topics you are not able to understand,""" start="00:02:49.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which is totally fine.""" start="00:02:51.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;I am an experienced user.&quot;""" start="00:02:56.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I would say that's even better""" start="00:02:58.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""because you can help others""" start="00:03:00.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""during the meetup.""" start="00:03:01.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And usually, in Emacs or in general,""" start="00:03:03.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""there is always something new to learn.""" start="00:03:06.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There are plenty of packages.""" start="00:03:08.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There might be something""" start="00:03:10.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you have never tried.""" start="00:03:11.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And there are always going to be""" start="00:03:12.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""different workflows of using something.""" start="00:03:13.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""So now, how do I become part of a meetup, right?""" start="00:03:16.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;How do I become part of a meetup group?&quot;""" start="00:03:23.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The first step you might be doing is""" start="00:03:26.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""finding a meetup.""" start="00:03:29.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There is this page,""" start="00:03:30.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""EmacsWiki page called Usergroups,""" start="00:03:32.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""currently maintained""" start="00:03:35.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""by Leo and Sacha.""" start="00:03:37.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, let's see how that page looks like.""" start="00:03:38.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""As you can see, this page tells you""" start="00:03:46.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""about all the upcoming events.""" start="00:03:48.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And it also has a list of all the meetup groups.""" start="00:03:51.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, you can find all the groups there.""" start="00:04:05.485" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Once you find one,""" start="00:04:10.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you need to join them, right?""" start="00:04:11.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""How to join differs from group to group""" start="00:04:13.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""but usually you will find a way to subscribe""" start="00:04:17.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to their mailing list or RSS feed,""" start="00:04:20.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""join their IRC channels.""" start="00:04:23.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They might have accounts on some platforms""" start="00:04:24.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""like Mobilizon or meetup.com.""" start="00:04:27.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can just go there and join,""" start="00:04:29.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that you get notified""" start="00:04:31.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""whenever there is a new event.""" start="00:04:32.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Now, seeing that list,""" start="00:04:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you might say, &quot;There are too many events""" start="00:04:39.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""of my interest.&quot;""" start="00:04:42.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Don't worry, there is a solution.""" start="00:04:42.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There is an Emacs calendar,""" start="00:04:47.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you can subscribe to this calendar.""" start="00:04:49.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see what all events""" start="00:04:51.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""are there in this particular calendar.""" start="00:04:55.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""This month there is Emacs Berlin to start with""" start="00:04:56.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and then there is EmacsConf,""" start="00:05:00.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""then Emacs APAC is also there.""" start="00:05:02.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see…, there is a companion website""" start="00:05:06.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for this calendar as well.""" start="00:05:15.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's go to the website also.""" start="00:05:17.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You will see all the options, how to import it.""" start="00:05:19.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There is ICS file,""" start="00:05:24.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""there are different time zones,""" start="00:05:26.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Org mode files.""" start="00:05:28.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can just go there and subscribe.""" start="00:05:29.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;How do I make most of it?""" start="00:05:33.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If I am attending a meetup,""" start="00:05:38.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""how do I make most of it?&quot;""" start="00:05:40.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I would say never hesitate""" start="00:05:42.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""from asking questions.""" start="00:05:44.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If there is something new,""" start="00:05:45.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""something you don't understand,""" start="00:05:46.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""just go ahead and ask questions.""" start="00:05:47.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ask for help if you are stuck somewhere.""" start="00:05:49.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There are going to be new things,""" start="00:05:51.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so make sure you note them down,""" start="00:05:54.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you can try those later.""" start="00:05:56.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If possible, have a microphone or webcam on,""" start="00:05:58.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that you can connect with others very easily.""" start="00:06:04.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If that's not an option for some reason,""" start="00:06:07.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""it's fine, you can always use chat""" start="00:06:10.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and interact with everyone.""" start="00:06:12.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, don't make that a reason for not attending.""" start="00:06:13.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Go ahead and attend,""" start="00:06:18.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""even if you just have chat as an option""" start="00:06:20.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to interact with others.""" start="00:06:22.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Wait, I still have questions.&quot;""" start="00:06:23.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Definitely.""" start="00:06:27.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If you have more questions,""" start="00:06:28.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""go ahead and post those.""" start="00:06:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I will come to them at the end.""" start="00:06:31.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Now we know how to attend,""" start="00:06:34.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what are the things you need to do""" start="00:06:42.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""if you want to attend.""" start="00:06:44.651" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;What if I want to start my own meetup group?&quot;""" start="00:06:45.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Because there is no regional group,""" start="00:06:48.418" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or there is something very specific""" start="00:06:51.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which you want to start a group about.""" start="00:06:53.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Again, &quot;Why should I start a meetup group?&quot;""" start="00:06:55.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""It is a way, I would say, to give back""" start="00:07:01.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to the community by creating a platform""" start="00:07:05.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for people to interact.""" start="00:07:08.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You give speakers a platform,""" start="00:07:10.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you also give a platform to the attendees.""" start="00:07:15.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And obviously to have fun with others.""" start="00:07:17.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""There are some common questions""" start="00:07:19.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which might come up,""" start="00:07:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""something like,""" start="00:07:26.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;How much effort do I need to put?&quot;""" start="00:07:28.051" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Personally, I don't have to put""" start="00:07:29.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""more than two hours a month,""" start="00:07:32.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""that's including the time""" start="00:07:34.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I attend the meetup.""" start="00:07:36.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;What if I'm new to Emacs?&quot;""" start="00:07:37.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's totally fine.""" start="00:07:42.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You don't have to know Emacs,""" start="00:07:43.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you don't have to be an expert""" start="00:07:45.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to start a meetup group.""" start="00:07:47.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's totally fine.""" start="00:07:48.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You will have more folks joining in""" start="00:07:49.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""with different experiences.""" start="00:07:51.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's totally fine to be a beginner""" start="00:07:54.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""in Emacs to start a meetup.""" start="00:07:57.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;How do I do it now?&quot;""" start="00:07:58.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, let's look at some specifics,""" start="00:08:02.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""some questions you might need to answer""" start="00:08:05.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""in order to start your meetup group.""" start="00:08:08.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Format of the meetup.""" start="00:08:10.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What participants will do during the meetup?""" start="00:08:13.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see one of the options,""" start="00:08:17.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""this is one of my favorites.""" start="00:08:20.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Keep it simple, a bit unstructured""" start="00:08:23.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and have free flowing discussions.""" start="00:08:26.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What does that mean?""" start="00:08:28.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That basically means letting people""" start="00:08:30.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""ask questions, share new things they have found,""" start="00:08:32.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""let them ask doubts, let them ask for help.""" start="00:08:35.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""During this free flowing discussions,""" start="00:08:39.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you can go through Emacs News as well,""" start="00:08:44.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""go through the topics, and you might find""" start="00:08:46.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""something interesting which you can talk about.""" start="00:08:49.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Why I prefer discussions?""" start="00:08:52.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Discussions basically give an opportunity""" start="00:08:57.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to all the participants to participate.""" start="00:09:00.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They get to talk about what they know""" start="00:09:03.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""rather than just having one way talk.""" start="00:09:06.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They can basically participate""" start="00:09:09.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""by putting up their thoughts.""" start="00:09:12.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Everyone gets to learn more""" start="00:09:13.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""as topics change.""" start="00:09:17.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usually during these free flowing discussions,""" start="00:09:18.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""topics keep changing""" start="00:09:21.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and that's how you get to learn more.""" start="00:09:22.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""This also has less friction for the speakers.""" start="00:09:25.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They won't have a burden that,""" start="00:09:29.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Okay, I have a talk in the meetup""" start="00:09:31.651" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I need to prepare.&quot;""" start="00:09:34.485" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That just increases friction for them""" start="00:09:35.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to participate.""" start="00:09:38.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If you are having a free flowing discussion,""" start="00:09:39.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""it's basically just a matter of saying,""" start="00:09:42.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Hey, maybe I would like to share my screen,""" start="00:09:44.685" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and I'll talk about this particular thing.&quot;""" start="00:09:47.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""What about talks?""" start="00:09:49.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Everyone loves talks, even I do.""" start="00:09:53.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, make sure you are also accommodating talks,""" start="00:09:55.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""allow people to submit talks,""" start="00:09:58.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and have talks plus discussions.""" start="00:10:00.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can also host watch parties.""" start="00:10:03.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can pick up""" start="00:10:07.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""any of the talks from EmacsConf""" start="00:10:09.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for anything which is out there,""" start="00:10:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you can watch it together,""" start="00:10:14.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you can have discussion""" start="00:10:15.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""about that particular talk.""" start="00:10:17.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""The next question""" start="00:10:18.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you might need to answer""" start="00:10:23.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""is frequency of the meetup.""" start="00:10:24.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""How often the group is going to meet?""" start="00:10:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""One option is recurring meetups.""" start="00:10:28.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So something like, you meet every month""" start="00:10:32.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""on a specific day time.""" start="00:10:37.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Another option is one-off meetups.""" start="00:10:39.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can meet whenever you have""" start="00:10:43.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""some specific talk,""" start="00:10:46.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""some specific discussion topic.""" start="00:10:47.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What you can do about the timing is,""" start="00:10:49.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""if you are targeting a specific region,""" start="00:10:52.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""make sure [people from] all the time zones""" start="00:10:54.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""from that region are able to attend.""" start="00:10:56.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Now you have figured out everything""" start="00:10:58.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you are going to schedule the meetup.""" start="00:11:04.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, &quot;Should I schedule and just wait?&quot;""" start="00:11:06.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No.""" start="00:11:08.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Go ahead and spread the word about it.""" start="00:11:08.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see what we can do.""" start="00:11:10.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can post on social media about your event.""" start="00:11:12.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usually do it a week or two before,""" start="00:11:16.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that people can plan their other things.""" start="00:11:19.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Share it on local GNU/Linux user groups.""" start="00:11:24.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They might have IRC channels, mailing lists,""" start="00:11:27.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so you should share your event there.""" start="00:11:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Reddit seems to be a popular place as well.""" start="00:11:32.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Many people follow and are there,""" start="00:11:35.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so you can post about your event there as well.""" start="00:11:37.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""The next option is adding your event""" start="00:11:39.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to Emacs calendar.""" start="00:11:43.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should get your event added""" start="00:11:45.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to the EmacsWiki and the calendar,""" start="00:11:47.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which we saw in the first part.""" start="00:11:49.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And the instructions are given there.""" start="00:11:51.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, whenever you schedule a meetup,""" start="00:11:53.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you should definitely add your event""" start="00:11:55.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to those places.""" start="00:11:58.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Next thing you should do is…,""" start="00:11:58.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""these are few points""" start="00:12:02.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which you should do during the meetup.""" start="00:12:04.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should start with the introductions.""" start="00:12:07.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Introductions serve as an icebreaker, usually.""" start="00:12:10.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They make everyone speak about themselves,""" start="00:12:14.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that everyone knows each other""" start="00:12:18.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a bit at least.""" start="00:12:20.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Make sure it is possible for others""" start="00:12:21.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to participate via chat.""" start="00:12:24.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, if there are some messages in the chat,""" start="00:12:27.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""make sure you relay those to others""" start="00:12:30.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""who are talking via audio/video.""" start="00:12:32.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Share your website at the end,""" start="00:12:35.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that people know and they can follow it,""" start="00:12:39.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and they can join the next event.""" start="00:12:41.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The next is keeping track of time.""" start="00:12:44.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Make sure you keep track of time.""" start="00:12:48.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Have some time, let's say, 1 hour""" start="00:12:50.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or slightly more than that""" start="00:12:52.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and time-bound your event,""" start="00:12:54.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that we respect everyone's time""" start="00:12:56.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and we conclude in time.""" start="00:12:58.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Now your meetup was done,""" start="00:13:00.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""it was good, people attended.""" start="00:13:05.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What's next?""" start="00:13:06.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Publishing the recordings, I would say.""" start="00:13:07.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should consider publishing the talks""" start="00:13:10.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or discussions both.""" start="00:13:14.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The reason being people can revisit the things.""" start="00:13:15.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usually people go back""" start="00:13:20.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and watch the recordings again.""" start="00:13:21.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And those who were not able to attend,""" start="00:13:23.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""they can also participate""" start="00:13:26.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""by watching the recording.""" start="00:13:27.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can do even more.""" start="00:13:28.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can have captions for the videos,""" start="00:13:32.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that people can enjoy the talks""" start="00:13:34.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""way better than just audio video.""" start="00:13:37.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And you can even have written summaries""" start="00:13:40.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""of the discussions,""" start="00:13:43.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""something like with links.""" start="00:13:44.451" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see some of the examples of summaries.""" start="00:13:45.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""This is one of the summaries""" start="00:13:48.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for Austin meetup""" start="00:13:55.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and this is written by someone""" start="00:13:56.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""who is participating during that meetup.""" start="00:13:59.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can see they have put up their thoughts,""" start="00:14:01.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what they think about something""" start="00:14:04.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""they got to know in the event.""" start="00:14:05.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Another example we can see is M-x Research.""" start="00:14:08.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can see they have put up""" start="00:14:14.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""all the discussion points.""" start="00:14:16.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They even have action items from the meetup.""" start="00:14:18.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""One more example we can see is Emacs APAC.""" start="00:14:21.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What I have done here is,""" start="00:14:25.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I have mentioned the topic and links,""" start="00:14:28.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""who shared what.""" start="00:14:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And that's about post meetup stuff.""" start="00:14:32.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can keep it simple.""" start="00:14:36.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Just start with hosting your video recordings,""" start="00:14:38.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and just start with basic links and details.""" start="00:14:40.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""So, are we ready to start a meetup?""" start="00:14:44.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Definitely.""" start="00:14:50.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's see some of the points""" start="00:14:52.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or checklist, I would say,""" start="00:14:54.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you should do before you start""" start="00:14:56.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a meetup group.""" start="00:14:57.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""What are the next steps?""" start="00:14:58.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Have a co-organizer.""" start="00:14:59.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, have at least one co-organizer or person""" start="00:15:04.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to talk to during the meetup,""" start="00:15:07.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so that even if no one shows up""" start="00:15:09.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you will have someone to talk to""" start="00:15:12.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and you both can discuss""" start="00:15:14.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""about the topic you decided to.""" start="00:15:16.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If your friend or the person""" start="00:15:20.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""you have reached out to""" start="00:15:22.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""are hesitant to become a &quot;co-organizer&quot;,""" start="00:15:23.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""because that feels like responsibility,""" start="00:15:26.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""it's fine.""" start="00:15:28.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can ask them to just come with you""" start="00:15:29.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and have the discussion during the event.""" start="00:15:32.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And like Andrea explained""" start="00:15:36.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""in his talk about 'buddy',""" start="00:15:38.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""buddy is someone who is helping you""" start="00:15:40.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""with your Emacs journey.""" start="00:15:43.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Buddies and their mentees""" start="00:15:45.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""can make their meeting public,""" start="00:15:48.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and that can be a good way to start""" start="00:15:52.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or spin-off a meetup.""" start="00:15:56.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Have a website for your meetup.""" start="00:15:57.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should definitely have a website""" start="00:16:01.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""where people can go and read""" start="00:16:04.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""about your event or the group.""" start="00:16:05.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Keep it simple.""" start="00:16:08.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Have RSS feed, so that people can subscribe.""" start="00:16:10.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And whenever you have new talks,""" start="00:16:13.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""make sure you add those talks""" start="00:16:15.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to the announcement pages.""" start="00:16:17.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Let's quickly see some of the example websites.""" start="00:16:18.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""The first one here is again""" start="00:16:23.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Emacs Asia-Pacific event.""" start="00:16:32.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can see we have details,""" start="00:16:34.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what is the timing, how to submit a talk,""" start="00:16:36.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""how to attend.""" start="00:16:41.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Next example is Emacs Berlin.""" start="00:16:42.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, you can see they have mentioned""" start="00:16:45.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what is the next event,""" start="00:16:47.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""which were the previous events,""" start="00:16:48.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""how to participate, how to stay updated.""" start="00:16:51.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""And similarly, there is M-x Research as well.""" start="00:16:53.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They have mentioned what are the events,""" start="00:16:57.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what are the upcoming events and all.""" start="00:16:59.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can just get started""" start="00:17:00.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""by taking any of the websites,""" start="00:17:09.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and just modify it to your liking.""" start="00:17:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""That's totally fine.""" start="00:17:13.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""The next thing you will need""" start="00:17:14.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""is a video conferencing tool.""" start="00:17:17.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""It should support video, screen share, chat.""" start="00:17:19.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""These are the few of""" start="00:17:23.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""the free software options.""" start="00:17:25.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""One is BigBlueButton""" start="00:17:27.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and another is Jitsi Meet.""" start="00:17:29.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can request for an account""" start="00:17:31.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""on the given instance to EmacsConf organizers""" start="00:17:33.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""on this mailing list,""" start="00:17:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or you can stick to any""" start="00:17:38.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""of the Jitsi Meet instances.""" start="00:17:40.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Communication media.""" start="00:17:42.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You should have at least some way""" start="00:17:45.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for people to interact post meetup""" start="00:17:47.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or before the meetup.""" start="00:17:51.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""You can use any of the existing IRC channels, #emacsconf,""" start="00:17:53.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or maybe you can use the existing""" start="00:17:57.386" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""GNU/Linux user groups lists.""" start="00:17:59.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""I would recommend you to read or watch""" start="00:18:01.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Starting an Emacs meetup&quot; by Harry Schwartz.""" start="00:18:07.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""They have mentioned details""" start="00:18:11.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""about in-person meetups,""" start="00:18:13.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""but there are many important points""" start="00:18:14.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to consider in that post""" start="00:18:17.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""as well as in the recording.""" start="00:18:20.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""So, go ahead and definitely watch""" start="00:18:21.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""before you start your meetup.""" start="00:18:23.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If you need any help with""" start="00:18:24.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""BigBlueButton account, hosting,""" start="00:18:29.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or captioning the talk recordings""" start="00:18:32.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for very specific or good talks,""" start="00:18:35.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""don't hesitate to reach out to""" start="00:18:37.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""EmacsConf organizers.""" start="00:18:38.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""There are many volunteers""" start="00:18:40.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""subscribed to that list,""" start="00:18:42.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""so you will definitely find""" start="00:18:43.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""someone to help you.""" start="00:18:45.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""I had one idea.""" start="00:18:50.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If you are one of the organizers,""" start="00:18:50.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""or if you plan to start a meetup,""" start="00:18:53.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I was thinking if""" start="00:18:55.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""we can have a common platform""" start="00:18:57.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for all the organizers""" start="00:18:59.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""to discuss what they are doing,""" start="00:19:00.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""what they are experimenting.""" start="00:19:01.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If you are interested,""" start="00:19:04.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""drop me an email at this email address.""" start="00:19:06.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""If I get somewhere with this idea,""" start="00:19:10.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I will definitely involve everyone""" start="00:19:13.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""who is interested.""" start="00:19:15.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""With that, we come to the end of my talk.""" start="00:19:16.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""I would like to thank Sacha and Leo""" start="00:19:21.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""for their inputs while I was creating this talk,""" start="00:19:23.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""and thank you for joining.""" start="00:19:26.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Now it is time for the questions.""" start="00:19:30.040" video="mainVideo-meetups" id="subtitle"]]
+
+<a name="meetups-mainVideo-transcript-es"></a>
+# Spanish
+
+[[!template new="1" text="""Hola a todos y todas. Bienvenidos y bienvenidas a mi conferencia.""" start="00:00:00.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Espero que todos y todas hayan disfrutado hasta ahora""" start="00:00:09.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de EmacsConf, como lo hago yo.""" start="00:00:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Pero podrían preguntarse,""" start="00:00:14.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;¿Cómo me encuentro con usuarios y usuarias de Emacs""" start="00:00:15.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""luego de la conferencia?&quot;""" start="00:00:18.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Qué pasaría si les digo que hay una manera?""" start="00:00:21.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""La respuesta son los encuentros locales.""" start="00:00:23.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Estos son grupos locales que organizan eventos""" start="00:00:26.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Se encuentran con cierta frecuencia.""" start="00:00:29.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Eso es de lo que vamos a hablar hoy:""" start="00:00:34.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""asistir a encuentros de Emacs y también organizarlos.""" start="00:00:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""En otras palabras,""" start="00:00:39.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""disfrutar de tu peregrinaje por Emacs con más gente!""" start="00:00:41.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Soy Bhavin. Vengo de India,""" start="00:00:43.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y he organizado""" start="00:00:45.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""el encuentro Emacs Asia Pacific""" start="00:00:47.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""desde hace casi 2 años.""" start="00:00:49.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hablaré acerca de los encuentros en línea""" start="00:00:52.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""la mayoría del tiempo.""" start="00:00:54.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""La belleza de los encuentros en línea es""" start="00:00:57.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que puedes unirte a cualquier encuentro,""" start="00:00:59.251" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""si tu tiempo lo permite,""" start="00:01:01.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""sin importar la zona horaria.""" start="00:01:03.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""... y no existen barreras.""" start="00:01:05.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que comencemos.""" start="00:01:07.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Veamos qué aspecto tienen los encuentros.""" start="00:01:10.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Básicalmente, veremos una parte""" start="00:01:14.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de un encuentro Emacs APAC.""" start="00:01:18.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: Existe algo llamado org-indent-mode.""" start="00:01:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: Es como org-adapt-indentation""" start="00:01:29.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: que es como la indentación eléctrica.""" start="00:01:33.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: Cuando presionas enter, [el texto] será indentado.""" start="00:01:34.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: Existe org-indent-mode, que no requiere""" start="00:01:37.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: que insertes las indentaciones físicamente""" start="00:01:41.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: en el archivo.""" start="00:01:44.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""[Ihor]: Hará que las cosas parezcan indentadas.""" start="00:01:45.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Este?""" start="00:01:54.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""""" start="00:01:55.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""org-adapt-indentation""" start="00:01:56.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""De acuerdo.""" start="00:01:57.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Parece interesante, ¿verdad?""" start="00:02:03.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que entremos en detalles.""" start="00:02:04.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Podrías tener una pregunta:""" start="00:02:08.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;¿Por qué debo asistir a encuentros?&quot;""" start="00:02:09.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Esa es una buena pregunta.""" start="00:02:11.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Siempre debieras preguntar &quot;¿por qué&quot;.""" start="00:02:12.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Es una oportunidad de aprender juntos y juntas.""" start="00:02:14.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Tú basicamente te encuentras con gente que piensa igual,""" start="00:02:19.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""usuarios y usuarias de Emacs que piensan igual.""" start="00:02:21.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""... y siempre puedes divertirte, ¿verdad?""" start="00:02:23.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Podrías tener una preocupación:""" start="00:02:27.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Soy un novato o una novata.&quot;""" start="00:02:29.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Yo diría que hay una gran oportunidad para tí.""" start="00:02:31.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes descubrir más cosas.""" start="00:02:34.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes conseguir ayuda, si encuentras""" start="00:02:36.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""dificultades, errores.""" start="00:02:38.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y siempre recuerda que estará bien""" start="00:02:41.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""si no entiendes todo""" start="00:02:42.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en las conversaciones.""" start="00:02:44.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Habrá momentos cuando todo sea...""" start="00:02:45.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que otros temas no sean comprensibles;""" start="00:02:49.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""lo cual es totalmente comprensible.""" start="00:02:51.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;Soy un usuario experimentado o una usuaria experimentada.&quot;""" start="00:02:56.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Diría que esta situación es aún mejor""" start="00:02:58.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""porque puedes ayudar a otros y otras""" start="00:03:00.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""durante un encuentro.""" start="00:03:01.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y usualmente, en Emacs o en general,""" start="00:03:03.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""siempre hay algo nuevo que aprender.""" start="00:03:06.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hay abundancia de paquetes.""" start="00:03:08.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Podría haber algo""" start="00:03:10.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que nunca haz probado.""" start="00:03:11.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y siempre habrá""" start="00:03:12.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""diferentes flujos de trabajo para usar [un paquete].""" start="00:03:13.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Así que ahora te preguntarás: ¿cómo me vuelvo parte de un encuentro? ¿Verdad?""" start="00:03:16.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;¿Cómo me vuelvo parte del grupo de un encuentro?&quot;""" start="00:03:23.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""El primer paso que podrías emprender""" start="00:03:26.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""es buscar un encuentro.""" start="00:03:29.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Existe una página""" start="00:03:30.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""del EmacsWiki https://www.emacswiki.org/emacs/Usergroups""" start="00:03:32.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""mantenida actualmente""" start="00:03:35.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""por Leo y por Sacha.""" start="00:03:37.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que, veamos cómo se ve esa página.""" start="00:03:38.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Como puedes ver, esta página se refiere""" start="00:03:46.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a todos los eventos que vendrán.""" start="00:03:48.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Además, tiene una lista de todos los grupos de encuentros.""" start="00:03:51.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que, puedes encontrar todos los grupos ahí.""" start="00:04:05.485" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""En cuanto encuentres uno,""" start="00:04:10.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""debes unirte a ellos, ¿verdad?""" start="00:04:11.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Cómo unirte difiere de grupo a grupo""" start="00:04:13.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""pero usualmente encontrarás una forma de suscribirte""" start="00:04:17.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a su lista de correo o a sus noticias RSS,""" start="00:04:20.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""únete a su canal de IRC.""" start="00:04:23.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Podrían tener cuentas en diferentes plataformas""" start="00:04:24.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""como Mobilizon o meetup.com [cuidado de que contengan Javascript privativo].""" start="00:04:27.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes ir allá y unirte,""" start="00:04:29.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que te notifiquen""" start="00:04:31.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cuando hay un evento nuevo.""" start="00:04:32.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Ahora, al ver esa lista""" start="00:04:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""puedes decir, &quot;Hay demasiados eventos""" start="00:04:39.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de mi interés.&quot;""" start="00:04:42.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No te preocupes. Hay una solución.""" start="00:04:42.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Existe un calendario Emacs.""" start="00:04:47.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes suscribirte a este calendario.""" start="00:04:49.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Veamos qué eventos""" start="00:04:51.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""hay en este calendario en particular.""" start="00:04:55.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Este mes hay Emacs Berlin para comenzar""" start="00:04:56.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y luego hay EmacsConf.""" start="00:05:00.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Luego hay Emacs APAC, que también está ahí.""" start="00:05:02.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Veamos ... existe un sitio web acompañante""" start="00:05:06.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para este calendario también.""" start="00:05:15.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Vayamos a ese sitio web.""" start="00:05:17.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Verás todas las opciones, como importarlo a tu software.""" start="00:05:19.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hay un archivo ICS.""" start="00:05:24.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hay diferentes zonas horarias,""" start="00:05:26.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""archivos Org mode.""" start="00:05:28.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes simplemente ir allá y suscribirte.""" start="00:05:29.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;¿Cómo lo aprovecho al máximo?""" start="00:05:33.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si asisto a un encuentro,""" start="00:05:38.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿cómo aprovecho al máximo?&quot;""" start="00:05:40.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Yo diría que nunca dudes""" start="00:05:42.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en hacer preguntas.""" start="00:05:44.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si hay algo nuevo,""" start="00:05:45.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""algo que no entiendas,""" start="00:05:46.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""solamente haz las preguntas.""" start="00:05:47.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Pide ayuda, si te encuentras atascado con algún problema.""" start="00:05:49.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""También existirán asuntos nuevos.""" start="00:05:51.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que asegúrate de tomar nota""" start="00:05:54.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y podrás intentar probarlos luego.""" start="00:05:56.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si es posible, ten listo un micrófono o cámara web encendidas.""" start="00:05:58.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""De esa manera podrás conectarte con otres de manera rápida.""" start="00:06:04.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si esa no es una opción por alguna razón,""" start="00:06:07.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""está bien. Siempre puedes usar el chat""" start="00:06:10.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""e interactuar con todas y con todos.""" start="00:06:12.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que esa no es una razón para no asistir.""" start="00:06:13.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Anímate y asiste,""" start="00:06:18.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""aunque solamente tengas el chat como única opción""" start="00:06:20.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para interactuar con otras y otros.""" start="00:06:22.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Espera. Aún tengo preguntas.&quot;""" start="00:06:23.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Seguro.""" start="00:06:27.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si tienes más preguntas,""" start="00:06:28.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""plantéalas.""" start="00:06:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Llegaré a ellas al final.""" start="00:06:31.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ahora sabemos cómo asistir,""" start="00:06:34.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cuáles son las cosas que debes hacer""" start="00:06:42.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""si deseas asistir.""" start="00:06:44.651" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;¿Qué pasa si deseo iniciar mi propio grupo de encuentro?&quot;""" start="00:06:45.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""porque no hay un grupo regional""" start="00:06:48.418" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o existe un tema muy específico""" start="00:06:51.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""del que quieres tener un grupo particular.""" start="00:06:53.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""De nuevo, &quot;¿Por qué debería iniciar un grupo de encuentro?&quot;""" start="00:06:55.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Es una manera, diría yo, para tener reciprocidad""" start="00:07:01.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""con la comunidad, mediante la creación de una plataforma""" start="00:07:05.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que la gente interactúe.""" start="00:07:08.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ofreces a los conferencistas una plataforma.""" start="00:07:10.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""También le ofreces una platforma a los asistentes.""" start="00:07:15.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y, obviamente, para divertirse junto con otros.""" start="00:07:17.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Hay preguntas comunes""" start="00:07:19.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que pueden presentarse.""" start="00:07:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Algo como:""" start="00:07:26.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;¿Cuánto esfuerzo se requiere?&quot;""" start="00:07:28.051" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Personalmente, yo no debo poner""" start="00:07:29.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""más de dos horas por mes.""" start="00:07:32.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Eso incluye el tiempo""" start="00:07:34.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para atender al encuentro.""" start="00:07:36.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;¿Qué pasa si soy novato en Emacs?&quot;""" start="00:07:37.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Eso no importa.""" start="00:07:42.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No necesitas saber Emacs.""" start="00:07:43.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No necesitas ser un experto""" start="00:07:45.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""par iniciar un groupo de encuentro.""" start="00:07:47.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Está muy bien.""" start="00:07:48.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Tendrás más gente que se una""" start="00:07:49.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""con diferente experiencia.""" start="00:07:51.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Es totalmente aceptable ser un novato""" start="00:07:54.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en Emacs para iniciar un encuentro.""" start="00:07:57.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""&quot;Ahora, ¿cómo lo hago?&quot;""" start="00:07:58.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que, veamos algunos detalles,""" start="00:08:02.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""algunas preguntas que podrías necesitar contestar""" start="00:08:05.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para iniciar tu grupo de encuentro.""" start="00:08:08.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Formato del encuentro.""" start="00:08:10.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Qué harán los participantes durante el encuentro?""" start="00:08:13.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Veamos una de las opciones.""" start="00:08:17.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Esta es una de mis favoritas.""" start="00:08:20.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Mantenlo sencillo, un poco desestructurado""" start="00:08:23.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y asegúrate de que las conversaciones fluyan libremente.""" start="00:08:26.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Qué sígnifica eso?""" start="00:08:28.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Basicamente significa dejar a las personas""" start="00:08:30.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""preguntar, compartir nuevas cosas que han encontrado.""" start="00:08:32.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Permíteles preguntar sobre sus dudas. Premíteles pedir ayuda.""" start="00:08:35.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Durante estas conversaciones de libre flujo,""" start="00:08:39.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""puedes también cubrir Noticas de Emacs.""" start="00:08:44.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Revisa los temas y podrías encontrar""" start="00:08:46.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""algo interesante de lo que puedas hablar.""" start="00:08:49.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""¿Por qué prefiero las conversaciones?""" start="00:08:52.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Básicamente, las conversaciones brindan una oportunidad""" start="00:08:57.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para todos los asistentes a participar.""" start="00:09:00.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Logran hablar de lo que conocen,""" start="00:09:03.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en lugar de solamente tener un monólogo.""" start="00:09:06.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Pueden participar, básicamente""" start="00:09:09.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""al exponer sus pensamientos.""" start="00:09:12.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Todos consiguen aprender más""" start="00:09:13.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""mientras cambian los temas.""" start="00:09:17.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usualmente durante estas conversaciones de libre flujo,""" start="00:09:18.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""los temas siguen cambiando""" start="00:09:21.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y esa es la manera en que consigues aprender más.""" start="00:09:22.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Esto también ofrece menos fricción para les conferencistas.""" start="00:09:25.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No sentirán el peso de:""" start="00:09:29.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;De acuerdo, tengo que dar una conferencia en este encuentro""" start="00:09:31.651" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que requiero preparar.&quot;""" start="00:09:34.485" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Eso solamente incrementa la fricción para que ellos""" start="00:09:35.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""participen.""" start="00:09:38.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si logras una conversación de libre flujo,""" start="00:09:39.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""solamente es asunto de decir:""" start="00:09:42.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Hey, Quizá quiera compartir mi pantalla""" start="00:09:44.685" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y hablaré de este tema en particular.&quot;""" start="00:09:47.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""¿Qué hay sobre las conferencias?""" start="00:09:49.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Todos adoran las conferencias, incluso yo.""" start="00:09:53.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que asegúrate de acomodar las conferencias también.""" start="00:09:55.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Permite a la gente presentar sus conferencias""" start="00:09:58.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y sostén conferencias y conversaciones.""" start="00:10:00.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""También puedes sostener proyecciones.""" start="00:10:03.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes tomar""" start="00:10:07.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cualquiera de las conferencias de EmacsConf,""" start="00:10:09.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de lo que quiera que se encuentre ahí,""" start="00:10:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y puedes mirarla juntos.""" start="00:10:14.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Luego pueden tener una conversación""" start="00:10:15.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""acerca de esa conferencia en particular.""" start="00:10:17.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""La siguiente pregunta""" start="00:10:18.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que podrías necesitar contestar""" start="00:10:23.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""es acerca de la frecuencia de los encuentros.""" start="00:10:24.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Qué tan a menudo se reunirá el grupo?""" start="00:10:25.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Una opción son los encuentros recurrentes.""" start="00:10:28.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que algo como, reunirse cada mes""" start="00:10:32.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""un día específico a cierta hora.""" start="00:10:37.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Otra opción son los encuentros de una sola ocasión.""" start="00:10:39.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes reunirte cuando sea""" start="00:10:43.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que ofrezcas una conferencia en particular,""" start="00:10:46.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""algún tema específico de conversación.""" start="00:10:47.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Lo que harías sobre los usos horarios es,""" start="00:10:49.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""si apuntas a una región específica,""" start="00:10:52.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""asegúrate que todos puedan asistir""" start="00:10:54.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""desde los distintos usos horarios de esa región.""" start="00:10:56.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Ahora haz descifrado todo""" start="00:10:58.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y que vas a agendar el encuentro.""" start="00:11:04.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que &quot;¿Debiría agendar y solamente esperar?&quot;""" start="00:11:06.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""No.""" start="00:11:08.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Difunde la noticia.""" start="00:11:08.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Veamos qué podemos hacer.""" start="00:11:10.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes publicar en redes sociales el evento.""" start="00:11:12.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usualmente se debe hacer con una o dos semanas de antelación""" start="00:11:16.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que la gente pueda planificar sus otros asuntos.""" start="00:11:19.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Compártelo en los grupos locales de usuarios de GNU con linux.""" start="00:11:24.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Podrían tener canales de IRC, listas de correo.""" start="00:11:27.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que debes compartir [la convocatoria] a tu evento ahí.""" start="00:11:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Reddit también parece ser un lugar popular para anunciar.""" start="00:11:32.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hay mucha gente y seguidores que están ahí.""" start="00:11:35.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que puedes anunciar sobre tu evento ahí tambien.""" start="00:11:37.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""La siguiente opción es agregar tu evento""" start="00:11:39.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""al calendario Emacs.""" start="00:11:43.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Debes conseguir que tu evento se añada""" start="00:11:45.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a EmacsWiki y al calendario,""" start="00:11:47.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que vimos en la primera parte [de esta conferencia].""" start="00:11:49.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y las instrucciones se encuentran ahí.""" start="00:11:51.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que, cuando sea que agendes un encuentro,""" start="00:11:53.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""debes definitivamente añadir tu evento""" start="00:11:55.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a aquellos lugares.""" start="00:11:58.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Lo siguiente que debes hacer es ...""" start="00:11:58.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""estos son algunos puntos""" start="00:12:02.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que debes realizar durante el encuentro.""" start="00:12:04.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Debes iniciar con las introducciones.""" start="00:12:07.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Las introducciones sirven para romper el hielo, usualmente.""" start="00:12:10.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hacen que todos hablen acerca de sí mismos""" start="00:12:14.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que todos se conozcan""" start="00:12:18.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""al menos un poco.""" start="00:12:20.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Haz posible que otros""" start="00:12:21.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""participen via chat.""" start="00:12:24.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""De tal manera que, si hay mensajes en el chat,""" start="00:12:27.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""asegúrate de relegarlos""" start="00:12:30.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a quienes están hablando via audio/video.""" start="00:12:32.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Comparte tu sitio web al final""" start="00:12:35.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que las personas lo sepan y lo sigan""" start="00:12:39.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y para que puedan venir al siguiente evento.""" start="00:12:41.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Lo siguiente es controlar el tiempo.""" start="00:12:44.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Asegúrate de controlar el tiempo.""" start="00:12:48.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Reserva un tiempo, puede ser una hora,""" start="00:12:50.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o algo más que eso,""" start="00:12:52.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y fija ese horario para tu evento""" start="00:12:54.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""con el fin de respetar el tiempo de todos""" start="00:12:56.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y que se termine a tiempo.""" start="00:12:58.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Ahora tu encuentro termina,""" start="00:13:00.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""fue bueno y la gente vino.""" start="00:13:05.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Qué sigue?""" start="00:13:06.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Publicar las grabaciones, diría yo.""" start="00:13:07.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Deberías considerar publicar las conferencias""" start="00:13:10.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o las conversaciones, o ambas.""" start="00:13:14.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""La razón es que las personas pueden revisitarlas.""" start="00:13:15.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Usualmente, la gente vuelve""" start="00:13:20.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y mira las grabaciones nuevamente.""" start="00:13:21.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y aquellos que no pudieron asistir,""" start="00:13:23.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""ellos también pueden participar""" start="00:13:26.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""al observar la grabación.""" start="00:13:27.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes hacer aún más.""" start="00:13:28.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes tener subtítulos para los vídeos""" start="00:13:32.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que la gente pueda disfrutar de las conferencias""" start="00:13:34.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de mejor manera que solamente el audio y el vídeo.""" start="00:13:37.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""E inclusive tú puedes tener resúmenes escritos""" start="00:13:40.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de las conversaciones,""" start="00:13:43.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o algo parecido con los hipervínculos.""" start="00:13:44.451" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Veamos algunos de los ejemplos con los resúmenes.""" start="00:13:45.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Este es uno de los resúmenes""" start="00:13:48.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""del encuentro en Austin [Texas, EEUUA]""" start="00:13:55.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y fue escrito por alguien""" start="00:13:56.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""quien participó durante el encuentro.""" start="00:13:59.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes ver que publicó sus pensamientos,""" start="00:14:01.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""lo que pensaban sobre un asunto""" start="00:14:04.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que aprendieron en el evento.""" start="00:14:05.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Otro ejemplo que podemos ver es M-x investigar.""" start="00:14:08.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes ver lo que han publicado ...""" start="00:14:14.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""todos los puntos de la conversación.""" start="00:14:16.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Incluso han recopilado puntos de acción mediante el encuentro.""" start="00:14:18.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Un ejemplo más que podemos ver es Emacs APAC.""" start="00:14:21.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Lo que he hecho es,""" start="00:14:25.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""yo he mencionado el tema y los hipervínculos ...""" start="00:14:28.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""quién compartió qué.""" start="00:14:30.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y eso es lo que hay sobre asuntos para después del evento.""" start="00:14:32.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes mantenerlo sencillo.""" start="00:14:36.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Solamente inicia con alojar las grabaciones de vídeo""" start="00:14:38.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y solamente inicia con los hipervínculos básicas y con los detalles.""" start="00:14:40.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Así que, ¿estamos listos para iniciar un encuentro?""" start="00:14:44.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¡Definitivamente!""" start="00:14:50.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Repasemos algunos de los puntos""" start="00:14:52.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o hagamos una lista, yo diría,""" start="00:14:54.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""sobre lo que debes hacer antes de iniciar""" start="00:14:56.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""un grupo de encuentro.""" start="00:14:57.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""¿Cuáles son los siguientes pasos?""" start="00:14:58.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Consigue un co-organizador.""" start="00:14:59.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Entonces, ten al menos un co-organizador""" start="00:15:04.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o persona con quien hablar durante el encuentro""" start="00:15:07.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que, aunque nadie más venga,""" start="00:15:09.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""tengas con quien hablar""" start="00:15:12.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y ambos pueden conversar""" start="00:15:14.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""sobre el tema que pretendían.""" start="00:15:16.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si tu amigo o la persona""" start="00:15:20.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que conseguiste""" start="00:15:22.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""duda en convertirse en co-organizadora""" start="00:15:23.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""porque siente que es una responsabilidad,""" start="00:15:26.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""está bien.""" start="00:15:28.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes pedirle que solamente te acompañe""" start="00:15:29.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y sostén la conversación durante el evento.""" start="00:15:32.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y, como Andrea explicó""" start="00:15:36.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en su conferencia sobre los 'compañeros',""" start="00:15:38.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""'compañero' es quien te ayuda""" start="00:15:40.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""en tu travesía de Emacs.""" start="00:15:43.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Compañeros y pupilos""" start="00:15:45.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""pueden hacer de su encuentro uno que sea público""" start="00:15:48.800" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y esa puede ser una buena manera de comenzar""" start="00:15:52.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a poner a rodar un encuentro.""" start="00:15:56.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Ten un sitio web para tu encuentro.""" start="00:15:57.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Definitivamente debes tener un sitio web""" start="00:16:01.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""donde la gente pueda leer""" start="00:16:04.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""sobre tu evento o sobre el grupo.""" start="00:16:05.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Mantenlo simple.""" start="00:16:08.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Levanta noticias de RSS para que las personas puedan suscribirse.""" start="00:16:10.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y cuando tengas nuevas conferencias,""" start="00:16:13.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""asegúrate de añadir esas conferencias""" start="00:16:15.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a las páginas de anuncios.""" start="00:16:17.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Rápidamente, veamos algunos sitios web de ejemplo.""" start="00:16:18.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""El primero es nuevamente""" start="00:16:23.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""el del evento de Emacs Asia-Pacific.""" start="00:16:32.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes ver que mostramos detalles,""" start="00:16:34.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""el horario, cómo proponer una conferencia,""" start="00:16:36.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cómo asistir.""" start="00:16:41.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""El siguiente ejemplo es Emacs Berlin.""" start="00:16:42.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ahí puedes ver que han mencionado""" start="00:16:45.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cuál es el siguiente evento,""" start="00:16:47.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cuáles fueron los eventos previos,""" start="00:16:48.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cómo participar, cómo mantenerse actualizado.""" start="00:16:51.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Y de igual manera, existe M-x investigar.""" start="00:16:53.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Han mencionado cuáles son los eventos,""" start="00:16:57.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""cuáles son los eventos venideros y todo lo demás.""" start="00:16:59.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes iniciar,""" start="00:17:00.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""simplemente tomando cualquiera de estos sitios web""" start="00:17:09.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y solamente modifícalos a tu gusto.""" start="00:17:11.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Es totalmente aceptable.""" start="00:17:13.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Lo siguiente que requerirás""" start="00:17:14.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""es de una herramienta para videoconferencia.""" start="00:17:17.640" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Debería soportar vídeo, compartir escritorio, chat.""" start="00:17:19.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Estas son algunas""" start="00:17:23.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de las opciones en software libre.""" start="00:17:25.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Una es BigBlueButton""" start="00:17:27.680" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y otra es Jitsi Meet.""" start="00:17:29.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes solicitar una cuenta en la instancia apropiada""" start="00:17:31.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a los organizadores de EmacsConf""" start="00:17:33.040" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""que están en esta lista de correo,""" start="00:17:36.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o puedes mantenerte en cualquiera""" start="00:17:38.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""de las instancias de Jitsi Meet.""" start="00:17:40.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Medios de comunicación.""" start="00:17:42.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Deberías tener al menos una manera""" start="00:17:45.960" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que la gente interactúe después del encuentro""" start="00:17:47.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y antes del encuentro.""" start="00:17:51.120" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Puedes utilizar cualquiera de los canales existentes en IRC,""" start="00:17:53.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""\#emacsconf, o quizá desees""" start="00:17:55.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""usar las listas de grupos de usuarios de GNU con Linux.""" start="00:17:59.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Recomendaría que leas o mires""" start="00:18:01.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""&quot;Starting an Emacs meetup&quot; por Harry Schwartz.""" start="00:18:07.600" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ha mencionado los detalles""" start="00:18:11.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""sobre encuentros personales""" start="00:18:13.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""pero hay mucho puntos importantes""" start="00:18:14.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a considerar en esa publicación""" start="00:18:17.720" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""tanto como en la grabación.""" start="00:18:20.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que, ve y definitivamente mira [ese vídeo]""" start="00:18:21.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""antes de iniciar tu encuentro.""" start="00:18:23.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si necesitas ayuda""" start="00:18:24.840" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""con la cuenta, el alojamiento""" start="00:18:29.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o para poner subtítulos a las grabaciones de BigBlueButton""" start="00:18:32.520" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para conferencias muy específicas o buenas,""" start="00:18:35.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""no dudes en buscar""" start="00:18:37.160" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""a los organizadores de EmacsConf.""" start="00:18:38.880" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Hay muchos voluntarios""" start="00:18:40.480" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""suscritos a esa lista [de correo].""" start="00:18:42.320" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Así que definitivamente encontrarás""" start="00:18:43.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""alguien quien te ayude.""" start="00:18:45.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template new="1" text="""Tuve una idea.""" start="00:18:50.080" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si tu eres uno de les organizadores""" start="00:18:50.760" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""o si planeas iniciar un encuentro,""" start="00:18:53.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""pensaba en que si tendríamos""" start="00:18:55.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""una plataforma común""" start="00:18:57.360" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""para que todos les organizadores""" start="00:18:59.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""conversen sobre lo que están haciendo,""" start="00:19:00.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""lo que están expermentando.""" start="00:19:01.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si estás interesado, envíame un correo a este correo electrónico""" start="00:19:04.000" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""bhavin192 [arroba] geeksocket [punto] in.""" start="00:19:06.920" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Si logro llegar a algún lado con esta idea,""" start="00:19:10.400" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""definitivamente involucraré a todos""" start="00:19:13.200" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""quienes estén interesados.""" start="00:19:15.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Con eso, llegamos al final de mi conferencia.""" start="00:19:16.280" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Me gustaría agradecer a Sacha y a Leo""" start="00:19:21.240" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""por sus recomendaciones mientras creaba esta conferencia""" start="00:19:23.440" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""y a ustedes por unirse.""" start="00:19:26.560" video="mainVideo-meetups" id="subtitle"]]
+[[!template text="""Ahora es el momento para las preguntas.""" start="00:19:30.040" video="mainVideo-meetups" id="subtitle"]]
+
+
+
+Captioners: bhavin192, translated to Spanish by quiliro
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20meetups%3A%20Attending%20and%20organizing%20Emacs%20meetups)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/meetups-before.md b/2022/info/meetups-before.md
new file mode 100644
index 00000000..9c5b53b5
--- /dev/null
+++ b/2022/info/meetups-before.md
@@ -0,0 +1,63 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Bhavin Gandhi shares how to participate in Emacs meetups and even how to organize your own. Afterwards, he will handle questions over BigBlueButton. Spanish captions are also available for this talk. You can find them on the talk page.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="meetups">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect stroke-width="3" x="376" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 20-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-meetups>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T18:00:00Z" end="2022-12-03T18:20:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~1:00 PM - 1:20 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~12:00 PM - 12:20 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~11:00 AM - 11:20 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~10:00 AM - 10:20 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~6:00 PM - 6:20 PM UTC <br />Saturday, Dec 3 2022, ~7:00 PM - 7:20 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~8:00 PM - 8:20 PM EET (Europe/Athens)<br />Saturday, Dec 3 2022, ~11:30 PM - 11:50 PM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~2:00 AM - 2:20 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~3:00 AM - 3:20 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="meetups-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt" default /><track label="Spanish" kind="captions" srclang="es" src="/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt" />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="meetups-mainVideo" data="""
+00:00.000 Introduction
+01:10.120 Example from Emacs APAC
+02:08.320 "Why should I attend meetups?"
+02:27.400 "I am a beginner"
+02:56.800 "I am an experienced user"
+03:16.160 Finding meetups
+04:10.000 How to join
+04:36.840 Emacs Calendar
+05:33.200 Making the most of a meetup
+06:45.560 "What if I want to start my own meetup group?"
+07:19.680 "How much effort do I need to put?"
+07:37.880 "What if I'm new to Emacs?"
+07:58.480 "How do I do it now?"
+08:52.600 Why I prefer discussions
+09:49.440 What about talks?
+10:18.240 Frequency of the meetup
+10:58.480 "Should I schedule and just wait?"
+11:39.960 Adding your event to the Emacs Calendar
+11:58.920 What to do during the meetup
+13:00.280 After the meetup
+14:44.240 Checklist
+14:59.800 Co-organizers
+15:57.240 Website
+17:14.200 Video conferencing
+17:42.280 Communication
+18:01.720 Other resources
+18:50.080 Connecting with other organizers
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.webm">Download --main.webm (104MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt">Download --main_es.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/nk37ygsa4ijMhV7uY94Lw2">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="meetups-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="meetups-qanda" data="""
+02:05.680 Thoughts on physical meetups
+07:34.841 Hybrid meetings
+10:03.680 How much time does it take you to organize a meetup?
+11:29.280 How do we use the workshops to make content that lasts after the workshop?
+14:25.800 Automation
+15:23.160 Emacs User Group
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="meetups-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.webm">Download --answers.webm (49MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.opus">Download --answers.opus (6.1MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/meetups-nav.md b/2022/info/meetups-nav.md
new file mode 100644
index 00000000..1a89e616
--- /dev/null
+++ b/2022/info/meetups-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/wayland">Emacs should become a Wayland compositor</a>
+Next by track: <a href="/2022/talks/sqlite">Using SQLite as a data source: a framework and an example</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/news-after.md b/2022/info/news-after.md
new file mode 100644
index 00000000..c7118f3d
--- /dev/null
+++ b/2022/info/news-after.md
@@ -0,0 +1,5 @@
+<!-- Automatically generated by emacsconf-generate-after-page -->
+
+
+Questions or comments? Please e-mail [sacha@sachachua.com](mailto:sacha@sachachua.com?subject=Comment%20for%20EmacsConf%202022%20news%3A%20Emacs%20News%20highlights)
+<!-- End of emacsconf-generate-after-page -->
diff --git a/2022/info/news-before.md b/2022/info/news-before.md
new file mode 100644
index 00000000..eeee30e3
--- /dev/null
+++ b/2022/info/news-before.md
@@ -0,0 +1,17 @@
+<!-- Automatically generated by emacsconf-generate-before-page -->
+
+<div class="schedule-in-context schedule-svg-container" data-slug="news">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 10:00-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="94" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:10 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:30- 2:50 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="517" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:20- 3:40 Putting Org Mode on the Indieweb</title> <rect x="596" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:00- 4:10 Fanfare for the Common Emacs User</title> <rect x="658" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(671,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 5:00- 5:10 Sunday closing remarks</title> <rect x="752" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(765,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:20 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:20 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:45-10:55 justl: Driving recipes within Emacs</title> <rect x="164" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(177,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to" data-slug="tramp"> <title> 11:05-11:35 Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="196" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(241,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:10 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(389,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:35- 1:45 Top 10 reasons why you should be using Eshell</title> <rect x="431" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:10- 2:30 Emacs was async before async was cool</title> <rect x="486" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(515,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:05- 3:25 The Wheels on D-Bus</title> <rect x="572" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(601,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 5-min talk followed by IRC Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-nil">#emacsconf-nil</a>)
+Pad: <https://pad.emacsconf.org/2022-news>
+Status: Talk cancelled
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T23:00:00Z" end="2022-12-04T23:05:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~6:00 PM - 6:05 PM EST (US/Eastern)</div><div class="others">Sunday, Dec 4 2022, ~6:00 PM - 6:05 PM EST (US/Eastern)</div></div><div><a href="/2022/watch/nil/">Find out how to watch and participate</a></div>
+
+
+# Description
+
+
+<!-- End of emacsconf-generate-before-page --> \ No newline at end of file
diff --git a/2022/info/news-nav.md b/2022/info/news-nav.md
new file mode 100644
index 00000000..130fb5b1
--- /dev/null
+++ b/2022/info/news-nav.md
@@ -0,0 +1,2 @@
+Back to the [[talks]]
+Previous: <a href="/2022/talks/fanfare">Fanfare for the Common Emacs User</a>
diff --git a/2022/info/orgsuperlinks-after.md b/2022/info/orgsuperlinks-after.md
new file mode 100644
index 00000000..c218e3d6
--- /dev/null
+++ b/2022/info/orgsuperlinks-after.md
@@ -0,0 +1,184 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="orgsuperlinks-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello, my name is Karl Voit""" start="00:00:00.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and I'm going to show you a little demo""" start="00:00:05.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""on how I'm working with links""" start="00:00:08.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between arbitrary headings""" start="00:00:10.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and how I define dependencies between tasks""" start="00:00:12.760" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""when I'm working with projects and so forth.""" start="00:00:16.240" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""For that purpose, I've created a repository""" start="00:00:18.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""that contains the files we are going to work with,""" start="00:00:22.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""with the overall setup and so forth.""" start="00:00:27.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So you just have to download this repository""" start="00:00:30.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and you're able to replay everything""" start="00:00:32.840" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which you are going to see here.""" start="00:00:36.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""If you've downloaded the configuration of the demo,""" start="00:00:38.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""you see those files, and you start the Emacs""" start="00:00:44.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""with an empty configuration""" start="00:00:49.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and link demo file, like that.""" start="00:00:52.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So let me just briefly increase the font size.""" start="00:00:59.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Setting up the demo is easy.""" start="00:01:03.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I've done the key visualization,""" start="00:01:05.760" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""the webcam part, and I've started the Emacs""" start="00:01:08.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and increased the font size.""" start="00:01:11.840" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""And the last thing and the most important thing""" start="00:01:13.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""you need to do here""" start="00:01:17.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""is executing the babel block,""" start="00:01:18.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which consists of more or less dirty Elisp code""" start="00:01:20.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""that installs the necessary packages, functions,""" start="00:01:23.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and bindings required in this demo.""" start="00:01:27.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""You need to acknowledge the execution""" start="00:01:29.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""with yes and return, and after a couple of seconds,""" start="00:01:32.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""everything is downloaded""" start="00:01:36.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and set up nicely for your demo.""" start="00:01:37.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""The first demo is the demo""" start="00:01:42.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""where I'm going to show you""" start="00:01:45.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""how I'm working with links""" start="00:01:46.960" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between arbitrary headings.""" start="00:01:48.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""It consists of two commands,""" start="00:01:50.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""org-super-links-quick-insert-inline-link,""" start="00:01:52.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and the second one is""" start="00:01:55.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""org-super-links-quick-insert-drawer-link.""" start="00:01:56.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So the difference is,""" start="00:01:59.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""the first one is an inline link,""" start="00:02:01.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and the second one only depends""" start="00:02:03.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""on the drawers of the headings.""" start="00:02:07.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So let's show you what I mean.""" start="00:02:09.960" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""If I'm inserting here the inline link""" start="00:02:12.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""to the second one, which I have to choose""" start="00:02:15.240" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""from the result set here,""" start="00:02:18.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""you see that there is this second heading link""" start="00:02:21.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""included here in the first heading.""" start="00:02:26.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Let's open up the first and second heading.""" start="00:02:29.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""You see that I can jump this link""" start="00:02:34.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""to the second heading. The first heading""" start="00:02:37.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""as well as the second heading""" start="00:02:40.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""get human readable IDs,""" start="00:02:42.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which I personally prefer.""" start="00:02:43.880" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""The second one gets""" start="00:02:46.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""a backheading in a link drawer,""" start="00:02:49.320" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which was created automatically.""" start="00:02:51.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So this is a method where I link arbitrary headings,""" start="00:02:53.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and that's the main reason""" start="00:02:57.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""why I personally don't need any""" start="00:02:59.168" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Zettelkasten-based method like Org Roam.""" start="00:03:01.215" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""The next command which I want to show you""" start="00:03:03.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""is the link between those drawers.""" start="00:03:08.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So in order to link the third to the fourth,""" start="00:03:13.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I need to look for the fourth.""" start="00:03:17.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""In this case, you do not see""" start="00:03:20.320" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""any inline link like here above,""" start="00:03:24.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""but you see the :PROPERTIES: drawers""" start="00:03:27.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and the :LINKS: drawers in both headings.""" start="00:03:31.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So there is a forward- and a back-link""" start="00:03:35.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between those two headings,""" start="00:03:38.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and if you see a links drawer""" start="00:03:40.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""you know that there are""" start="00:03:42.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""linked headings you can follow.""" start="00:03:45.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I do find this method very very handy.""" start="00:03:47.560" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""Of course, this doesn't only work""" start="00:03:51.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""within one single Org mode file.""" start="00:03:53.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""It works between arbitrary Org mode files""" start="00:03:57.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""as long as they are""" start="00:04:01.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""part of your Org Mode agenda list.""" start="00:04:02.634" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So that was the first heading""" start="00:04:05.760" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""with the bi-directional links.""" start="00:04:08.280" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""The second one is a little bit""" start="00:04:09.960" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""more complicated than that""" start="00:04:11.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""because I show you how I'm working with projects.""" start="00:04:13.080" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Usually, I start the project""" start="00:04:17.280" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""by adding a &quot;Why?&quot; statement""" start="00:04:19.534" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""so that I remember why this project""" start="00:04:22.080" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""needs to be done in the first place.""" start="00:04:25.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I do a brainstorming on the tasks""" start="00:04:27.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""that need to be done in the project""" start="00:04:32.280" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""as a simple list.""" start="00:04:33.934" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""With this handy command (C-c *),""" start="00:04:36.280" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I'm converting it to a list of Org mode headings.""" start="00:04:39.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Now let's add the NEXT keyword,""" start="00:04:43.840" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which is my default to-do keyword,""" start="00:04:47.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""to the first heading.""" start="00:04:49.001" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""You notice that there is a CREATED property""" start="00:04:49.760" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which is not relevant to the demo itself,""" start="00:04:53.320" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""but it's part of my setup.""" start="00:04:56.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I really like those created headings""" start="00:04:57.840" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""because when I add arbitrary headings,""" start="00:05:00.840" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""this CREATED property is added automatically.""" start="00:05:03.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""So now I want to define a dependency""" start="00:05:07.680" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between &quot;Empty garage&quot;""" start="00:05:11.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and &quot;Paint walls and floor.&quot;""" start="00:05:12.968" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I do that by invoking my command here,""" start="00:05:14.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and look for the &quot;Paint walls&quot; heading.""" start="00:05:18.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""In this dialogue, you may add a scheduled date""" start="00:05:22.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and/or a deadline date""" start="00:05:28.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and/or a to-do statement. For this demo""" start="00:05:30.234" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I only choose the to-do keyword.""" start="00:05:34.240" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""You notice that there is""" start="00:05:37.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""this TRIGGER property added.""" start="00:05:39.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""That's default behavior of org-edna""" start="00:05:41.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""which is managing the dependencies, in my case.""" start="00:05:43.280" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""In the other one, there is this BLOCKER property.""" start="00:05:47.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""It's very handy to know that those IDs""" start="00:05:51.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""might be used for jumping""" start="00:05:55.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between those dependencies again.""" start="00:05:57.880" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Those two headings don't have to be necessarily""" start="00:06:00.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""in the very same Org Mode file.""" start="00:06:03.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""They may be scattered around""" start="00:06:05.560" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""your Org Mode agenda files all over the place.""" start="00:06:07.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So continuing this definition of dependency""" start="00:06:11.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between the second and the third one...""" start="00:06:16.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I'm using the search &quot;Bring back stuff&quot;...""" start="00:06:19.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""the search functionality...""" start="00:06:23.000" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I choose the NEXT keyword here, its dependency.""" start="00:06:24.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""The same holds true for the last two.""" start="00:06:28.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""&quot;Is painted&quot;, for example. I'm going to use""" start="00:06:32.480" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""the NEXT keyword again.""" start="00:06:37.400" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""I tend to use the last task of any project""" start="00:06:39.320" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""to close the overall project.""" start="00:06:44.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So if I show you this one,""" start="00:06:47.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I'm using the dependency to &quot;Garage&quot; project,""" start="00:06:49.880" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and this time I'm using the DONE keyword.""" start="00:06:57.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""Of course, the properties""" start="00:07:02.200" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""look like that all the time,""" start="00:07:04.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""so there is a trigger from the first task""" start="00:07:07.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""to the second one, and there is a blocker""" start="00:07:11.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""from the second one back to the first one,""" start="00:07:13.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and when I'm actually doing the project,""" start="00:07:17.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I may now mark the first task as DONE,""" start="00:07:21.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and you notice that the second one""" start="00:07:25.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""automatically gets a next keyword.""" start="00:07:28.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""This happened, of course, for all those tasks.""" start="00:07:31.440" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""The neat thing is when I close the last one,""" start="00:07:34.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""the overall project gets its DONE keyword as well.""" start="00:07:38.920" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So this is how I'm working with""" start="00:07:42.760" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""projects and dependencies.""" start="00:07:46.360" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""Most of the time, task dependencies""" start="00:07:49.120" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""are not even within the same Org Mode subheading,""" start="00:07:53.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""let's say. Also, I'm using dependencies""" start="00:07:58.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""between different Org Mode files.""" start="00:08:01.600" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""This is a very, very cool way of defining""" start="00:08:03.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""what to do next in a project,""" start="00:08:07.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""without looking for tasks""" start="00:08:10.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""that can't be done at that stage.""" start="00:08:12.668" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template new="1" text="""You can have a look at the details of the demo""" start="00:08:15.640" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""by checking out the files in the repository.""" start="00:08:20.240" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""That's it for the demo,""" start="00:08:23.800" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and therefore I thank you for your patience.""" start="00:08:27.080" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""I wish you good luck,""" start="00:08:30.720" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""and I hope that I could show you one or two tricks""" start="00:08:32.160" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""that you can add to your Org Mode setup""" start="00:08:39.520" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""in order to help you with your daily work.""" start="00:08:42.080" video="mainVideo-orgsuperlinks" id="subtitle"]]
+[[!template text="""So bye from me, till next time.""" start="00:08:47.040" video="mainVideo-orgsuperlinks" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [EmacsConf22@Karl-Voit.at](mailto:EmacsConf22@Karl-Voit.at?subject=Comment%20for%20EmacsConf%202022%20orgsuperlinks%3A%20Linking%20headings%20with%20org-super-links%20%28poor-man%27s%20Zettelkasten%29)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/orgsuperlinks-before.md b/2022/info/orgsuperlinks-before.md
new file mode 100644
index 00000000..e39c08d1
--- /dev/null
+++ b/2022/info/orgsuperlinks-before.md
@@ -0,0 +1,51 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Karl Voit shares how he uses org-edna and org-super-links to manage dependencies and links betweentasks in Org Mode. Afterwards, he will handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="orgsuperlinks">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect stroke-width="3" x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 9-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-orgsuperlinks>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T15:40:00Z" end="2022-12-04T15:50:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~10:40 AM - 10:50 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~9:40 AM - 9:50 AM CST (US/Central)<br />Sunday, Dec 4 2022, ~8:40 AM - 8:50 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~7:40 AM - 7:50 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~3:40 PM - 3:50 PM UTC <br />Sunday, Dec 4 2022, ~4:40 PM - 4:50 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~5:40 PM - 5:50 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~9:10 PM - 9:20 PM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~11:40 PM - 11:50 PM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~12:40 AM - 12:50 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="orgsuperlinks-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="orgsuperlinks-mainVideo" data="""
+00:00.000 Introduction
+00:18.680 Setting up the demo
+01:42.680 Linking between headings
+03:03.920 Link drawers
+03:51.640 Bi-directional links
+04:09.960 Projects
+05:07.680 Dependencies
+05:51.600 Jumping between dependencies
+06:39.320 Closing the project
+07:49.120 Task dependencies between files
+08:15.640 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/ff1YxBEgR9LxJ51trJwyYk">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="orgsuperlinks-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="orgsuperlinks-qanda" data="""
+02:04.360 Can you filter out blocked tasks?
+03:07.720 Do you ever have any issues having so much meta-level information?
+05:01.160 Bidirectional links
+10:22.491 Does this change how you use TODO keywords NEXT, TODO, BLOCKED?
+11:14.300 Is your PhD published?
+12:32.466 Org Brain
+13:38.841 Do you find that the links are fragile, hard to maintain?
+14:19.383 Would it be of interest to make auto descriptions for links in Org?
+15:24.960 Why not Org UUIDs for IDs?
+16:19.360 Do you use anything for "What links here to this heading?"
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="orgsuperlinks-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.webm">Download --answers.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.opus">Download --answers.opus (6.8MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/orgsuperlinks-nav.md b/2022/info/orgsuperlinks-nav.md
new file mode 100644
index 00000000..266b6c1c
--- /dev/null
+++ b/2022/info/orgsuperlinks-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/rde">rde Emacs introduction</a>
+Next by track: <a href="/2022/talks/justl">justl: Driving recipes within Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/orgvm-after.md b/2022/info/orgvm-after.md
new file mode 100644
index 00000000..6e56988a
--- /dev/null
+++ b/2022/info/orgvm-after.md
@@ -0,0 +1,746 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="orgvm-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""And so this little application--""" start="00:00:36.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""well, I'll skip that and just kind of""" start="00:00:42.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""jump right into my thesis for those of you""" start="00:00:42.504" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that might be planning to duck out for the RMS talk,""" start="00:00:49.143" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""starting in a little bit.""" start="00:00:53.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So essentially, my thesis here is really that""" start="00:00:55.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the Emacs toolchain can easily be combined""" start="00:00:55.546" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with other skills and used in kind of""" start="00:00:59.379" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""a Unix paradigm of having sort of different tools""" start="00:01:08.794" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to do different steps.""" start="00:01:13.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We might actually use the same tool""" start="00:01:14.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to implement a couple of steps.""" start="00:01:17.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But with that paradigm, each step""" start="00:01:19.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is an individual item that can be sort of""" start="00:01:22.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""dropped in and replaced.""" start="00:01:22.087" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So over the course of the talk,""" start="00:01:26.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""hopefully I'll come back to that thesis.""" start="00:01:26.421" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""But I'll now jump back and start walking through""" start="00:01:31.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""what is orgvm?""" start="00:01:31.087" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this is a very simple proof of concept program.""" start="00:01:37.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We'll just jump over to perhaps""" start="00:01:39.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""a prettier view of the source code for it.""" start="00:01:39.587" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is implemented-- oops.""" start="00:01:45.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There's some cruft, I think, in my local.""" start="00:01:49.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so this config block at the top...""" start="00:01:53.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we'll be jumping back and forth""" start="00:01:56.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""between the code and the documentation.""" start="00:01:58.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So the first thing I want to point out""" start="00:02:01.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is that this is written in Node.js,""" start="00:02:04.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but I think you'll find it'd be pretty trivial to implement""" start="00:02:05.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""in any language.""" start="00:02:08.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Certainly, you're more than welcome to use this.""" start="00:02:10.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'd be happy to accept your patches or feature requests""" start="00:02:13.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and things like that.""" start="00:02:17.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Of course, bug reports.""" start="00:02:20.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But I'd also encourage others to roll their own.""" start="00:02:21.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You might well come up with a different version of this""" start="00:02:25.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that's even cooler.""" start="00:02:28.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we can learn from each other.""" start="00:02:29.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If you heard one of my talks before,""" start="00:02:32.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you probably recognize a common theme.""" start="00:02:34.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm a big fan of head-first development""" start="00:02:36.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as a way to get invested in both""" start="00:02:40.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the tool chain and a culture.""" start="00:02:40.337" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so let's come back to orgvm.""" start="00:02:44.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""First of all, we'll start with""" start="00:02:49.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the itch I was trying to scratch.""" start="00:02:49.587" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I wanted to be able to quickly use a web browser""" start="00:02:52.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to browse my Org documents.""" start="00:02:58.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's particularly handy when the documents""" start="00:03:00.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""are full of cross links to each other.""" start="00:03:01.421" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That meant I wanted to automatically export,""" start="00:03:05.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""particularly to HTML.""" start="00:03:10.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But it made sense for me to include Markdown, PDF,""" start="00:03:12.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or whatever format I want.""" start="00:03:17.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Because many times, I'm going to look at that file""" start="00:03:18.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and then pop it into an email or upload it somewhere.""" start="00:03:22.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then finally, it should be, therefore,""" start="00:03:29.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""pretty easy to download the document""" start="00:03:33.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""rather than view it, once I'm done.""" start="00:03:33.754" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So let's just run a quick demo.""" start="00:03:38.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You'll see I'm still a Windows user.""" start="00:03:42.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Yeah, I'm working on it.""" start="00:03:44.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So all right, first thing that we're going to do""" start="00:03:45.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is fire up the program.""" start="00:03:52.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Actually, for simplicity, let's just""" start="00:03:53.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""admit we live in a DOS world.""" start="00:04:00.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And as you can see, there's not much to it""" start="00:04:01.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to get the application running.""" start="00:04:19.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So with that done, then, I can run out to my localhost.""" start="00:04:22.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we'll just start by plugging in the name of an Org file.""" start="00:04:25.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I've got a little Org file that I prepared""" start="00:04:37.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that just kind of provides a proof of concept to this.""" start="00:04:37.587" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And you can see, as imagined, we're automatically""" start="00:04:49.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""turning that Org file...""" start="00:04:53.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's just take a quick look at it.""" start="00:04:54.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And here's that file now.""" start="00:04:56.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You can see, nothing up my sleeve.""" start="00:05:10.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is a very basic Org file""" start="00:05:11.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I use for testing this program.""" start="00:05:11.962" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Images work.""" start="00:05:16.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We've got some nicely syntax-highlighted code blocks""" start="00:05:17.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""in a couple different languages,""" start="00:05:21.837" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and not really that much going on there.""" start="00:05:25.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, let's come back to the documentation.""" start="00:05:29.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I pretty well covered this, I think.""" start="00:05:33.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But you'll need a relatively recent version of Emacs.""" start="00:05:36.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I haven't taken any pains to make this backward compatible.""" start="00:05:39.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""To be fair, I haven't tested it extensively.""" start="00:05:43.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It may well work on Emacs 26 or older versions.""" start="00:05:46.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm personally running 27.1 and 28,""" start="00:05:50.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as well as recent builds of 29.""" start="00:05:55.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There's some quick start instructions here,""" start="00:05:57.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which I'm going to take as read.""" start="00:06:02.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You probably saw the key element of this,""" start="00:06:03.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which involves starting the program.""" start="00:06:08.601" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You do-- I will call out Yale.""" start="00:06:11.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If you're trying to play with this yourself,""" start="00:06:13.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""don't forget to run the npm install command.""" start="00:06:15.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That'll bring in express.js,""" start="00:06:20.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which the JavaScript we're about to look at is built on.""" start="00:06:20.087" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So let's just take a look at the usage patterns real quick.""" start="00:06:24.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""To use this, we're simply giving the document name""" start="00:06:33.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""without the .org extension in whatever file path--""" start="00:06:35.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or I'm sorry, whatever we've configured the server""" start="00:06:42.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to run on, in this case, port 3000.""" start="00:06:46.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I also want to call attention to the fact""" start="00:06:50.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that nothing in this program protects you""" start="00:06:52.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""from damaging yourself.""" start="00:06:55.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This isn't meant as a production capability.""" start="00:06:57.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is something that's used to publish""" start="00:07:00.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""your own note files""" start="00:07:00.587" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and roll them out to yourself.""" start="00:07:04.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's something I'll definitely look at adding,""" start="00:07:06.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but I want people to be careful of it""" start="00:07:08.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""while this is in an alpha state.""" start="00:07:12.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So the default response is HTML, and we saw that here.""" start="00:07:14.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But we also can modify the response format.""" start="00:07:22.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We're currently supporting HTML, Markdown, and PDF.""" start="00:07:26.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And that's really enough to select a different format.""" start="00:07:29.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's really nothing more than adding type. Okay.""" start="00:07:34.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Not sure what's going on there.""" start="00:07:48.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Okay, well, there goes my demo.""" start="00:07:50.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Shows me for doing my talk live.""" start="00:07:57.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But this, fortunately, this error message""" start="00:08:03.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is a nice segue to the part of the talk""" start="00:08:06.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I'd really like to focus on,""" start="00:08:08.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""hopefully bringing me back to that thesis.""" start="00:08:10.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So as we start to look at code, what we're looking for""" start="00:08:13.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is really this Emacs Lisp that's getting generated here.""" start="00:08:17.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And you'll notice that's the stuff""" start="00:08:21.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I thought was important to produce as diagnostics""" start="00:08:24.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""for the programs running as well.""" start="00:08:27.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So, spoiler, this Elisp is dynamically""" start="00:08:29.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""generated by the program.""" start="00:08:34.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And that's really the core of the way""" start="00:08:35.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""orgvm or my orgvm works.""" start="00:08:38.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this should look pretty similar to the view of the code""" start="00:08:42.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we had a moment ago.""" start="00:08:47.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You can see I've got some bases.""" start="00:08:48.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is all hard-coded into the program,""" start="00:08:51.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""nothing fancy going on here.""" start="00:08:53.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The debug is simply controlling that diagnostic output""" start="00:08:56.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that we looked at.""" start="00:09:00.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There's some other, hopefully fairly self-explanatory""" start="00:09:01.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""programs or properties, where to find Emacs and so forth.""" start="00:09:04.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""And then finally, we come in to the meat of it,""" start="00:09:09.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the variables that are used to control what Elisp""" start="00:09:16.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we can generate dynamically.""" start="00:09:16.337" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So here, we're controlling the extension""" start="00:09:24.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that it should look for Org files.""" start="00:09:27.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Hopefully not too many people out there""" start="00:09:29.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with a weird extension for the Org files,""" start="00:09:31.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but this should support that.""" start="00:09:34.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm afraid that is something I've been known to do.""" start="00:09:37.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Then we define a list of additional export types.""" start="00:09:40.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Here's one that ought to work.""" start="00:09:49.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's take a look at type=org.""" start="00:09:50.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And, aha, it's giving us the file.""" start="00:09:54.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I'm not going to open that up,""" start="00:09:59.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but now we can see that that's definitely working,""" start="00:10:00.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""for certain versions of working.""" start="00:10:02.421" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this list of type parameters is""" start="00:10:09.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""controlling the supported types.""" start="00:10:14.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Hopefully it should be fairly easy to add in different ones.""" start="00:10:15.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The fancy footwork here is just a list""" start="00:10:18.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of the types that we're going to be using.""" start="00:10:21.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The fancy footwork here involves, first of all,""" start="00:10:23.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""there's the extension and the MIME type.""" start="00:10:29.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's, as you might guess, used to control""" start="00:10:32.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the response content type.""" start="00:10:32.254" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""We also have this replace variable.""" start="00:10:38.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This prevents-- there's an optimization""" start="00:10:40.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to send an existing PDF or HTML file""" start="00:10:44.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if that's already there,""" start="00:10:48.837" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but only if the original source Org file""" start="00:10:50.464" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""hasn't been modified since.""" start="00:10:51.004" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This `replace` effectively can turn that off.""" start="00:10:56.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If I remove the `replace: true` attribute,""" start="00:10:59.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""then I'll be prevented from overwriting that.""" start="00:11:03.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""In other words, I'll always send a cached version.""" start="00:11:07.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That might be helpful if, for example,""" start="00:11:10.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you've got hand-tuned PDFs""" start="00:11:13.879" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and you don't want to accidentally overwrite them.""" start="00:11:15.066" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, let's get into the code a little bit more.""" start="00:11:19.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm going to skip past the really good stuff""" start="00:11:23.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and jump into the boring parts""" start="00:11:28.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""so that we have them as context.""" start="00:11:28.296" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Here's the default path.""" start="00:11:34.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And it is going to send me the readme from the project--""" start="00:11:37.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""from the project repo if I don't specify a path.""" start="00:11:41.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then we have a couple of different endpoints""" start="00:11:47.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that we support.""" start="00:11:51.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We'll come back to this first one.""" start="00:11:52.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""For now, let's start with the more normal one,""" start="00:11:55.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which is just giving us a file name.""" start="00:11:55.587" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So we can see we start by figuring out""" start="00:12:01.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""what the physical file name should be called.""" start="00:12:04.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And assuming that that exists--""" start="00:12:08.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""sorry, I've confused myself.""" start="00:12:15.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this is the caching or the optimization""" start="00:12:17.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I mentioned, sending the existing file.""" start="00:12:23.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This file exists is where the optimization is""" start="00:12:25.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that regenerates the file if the source""" start="00:12:31.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or document for the HTML generator has changed.""" start="00:12:38.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Again, this is a short talk, so I'm not""" start="00:12:45.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""going to go into all the nuances of this JavaScript code.""" start="00:12:46.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's pretty far from an Emacs-related thing.""" start="00:12:49.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So with that said, then, the rest of this program""" start="00:12:52.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is really mostly just handling the different errors:""" start="00:12:56.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""&quot;I didn't understand that type.&quot;""" start="00:12:59.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""&quot;I don't know the document.&quot;""" start="00:13:01.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""&quot;I failed.&quot;""" start="00:13:02.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Otherwise, there's the caching.""" start="00:13:03.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""And here's really where things get interesting,""" start="00:13:06.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""where we've generated some Elisp,""" start="00:13:14.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and then we're calling Emacs with that Elisp.""" start="00:13:19.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If everything works, we'll send the file.""" start="00:13:22.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If it doesn't, we'll send the 500.""" start="00:13:24.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we've already seen the 500, so we know that works.""" start="00:13:27.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, let's get to the interesting part.""" start="00:13:30.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Sorry, one more footnote.""" start="00:13:33.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""There is a capability built in that will""" start="00:13:37.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""allow us to execute an Org block.""" start="00:13:39.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's see if that's working in our local.""" start="00:13:41.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'll remind myself how to do it.""" start="00:13:44.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's run.""" start="00:13:47.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I think it's called test.""" start="00:13:49.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And that's returning a 500.""" start="00:13:53.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm suspecting that's running because I'm running""" start="00:13:56.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""in command instead of bash.""" start="00:13:58.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Oh, yeah, so the failure is happening""" start="00:13:59.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""after I generate the Elisp.""" start="00:14:06.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm pretty confident that is what the actual problem is.""" start="00:14:07.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If we have time, I'll jump back over there""" start="00:14:10.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and relaunch it in mingw bash.""" start="00:14:12.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we can see it actually work.""" start="00:14:19.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But this works pretty well for me on my work laptop.""" start="00:14:21.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I didn't have to make any changes to it.""" start="00:14:24.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I have a fairly high amount of confidence,""" start="00:14:25.860" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""at least in trivial cases, this works pretty well.""" start="00:14:28.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, so what I actually wanted to talk about today--""" start="00:14:32.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and I'm going to be kind of hand-waving around""" start="00:14:37.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this ES5 class that I've got and kind of the way that works.""" start="00:14:41.731" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Hopefully, this will be pretty familiar to you""" start="00:14:46.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if you are a JavaScript programmer.""" start="00:14:49.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The interesting stuff comes when we want to build some Lisp.""" start="00:14:53.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Here, you can see that I really don't have""" start="00:15:01.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""a whole lot of code around formatting LISP.""" start="00:15:01.962" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You can see that I've special-cased""" start="00:15:11.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""whether the arguments that were passed""" start="00:15:14.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""happen to be a function.""" start="00:15:19.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If they are, I'm going to call that function.""" start="00:15:20.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then the result will be formatted as Lisp.""" start="00:15:25.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this would be a recursive call here.""" start="00:15:31.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Otherwise, I'm just going to return the arguments.""" start="00:15:35.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Sorry, otherwise, I will slap a pair of parentheses""" start="00:15:40.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""around the result of walking that list if I get...""" start="00:15:48.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""formatting each element of the list of arguments""" start="00:15:57.879" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that this `formatLisp` process calls""" start="00:15:57.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and separating them with spaces.""" start="00:16:02.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So in short form, this program walks through a list.""" start="00:16:04.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If the list it receives is a function,""" start="00:16:10.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""it calls that function.""" start="00:16:14.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Once that's handled or otherwise,""" start="00:16:16.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we simply walk the list, taking the arguments,""" start="00:16:19.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""concatenating them on strings, and finally,""" start="00:16:22.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""wrap the results in parentheses.""" start="00:16:26.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So what I didn't mention there but might be obvious""" start="00:16:28.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is if I have a nested list, the inner list""" start="00:16:31.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""will be subjected to the same treatment.""" start="00:16:36.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this is a recursive sort of algorithm.""" start="00:16:38.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, so now when I go to export,""" start="00:16:43.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""actually, in the interest of time,""" start="00:16:51.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm going to avoid walking through that piece of code""" start="00:16:53.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and let's focus instead on the more interesting part""" start="00:16:55.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of how that Lisp gets encoded.""" start="00:16:58.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So coming back to the PDF is a good example here,""" start="00:17:02.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because it's got a special case.""" start="00:17:07.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You can see I've specified this `exportFun`""" start="00:17:10.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or export function.""" start="00:17:10.337" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's a property none of these other types have.""" start="00:17:15.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And you can see it contains some Elisp telling us""" start="00:17:22.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""how to call the export for it.""" start="00:17:27.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's go see how that's used.""" start="00:17:29.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""At the very end of what I just skipped over,""" start="00:17:32.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the detailed &quot;how the Org export process works,&quot;""" start="00:17:35.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you'll see that I am ending with a step""" start="00:17:40.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to call the export function.""" start="00:17:45.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Here, I look to see whether I have""" start="00:17:48.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""an export function property.""" start="00:17:48.004" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If I do, I call that function.""" start="00:17:55.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And if I don't, I build this list with the default""" start="00:18:00.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""`org-export-to-file` function""" start="00:18:00.921" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""using the filename and an output filename.""" start="00:18:07.072" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this, hopefully, is pretty familiar to anybody""" start="00:18:15.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that's manually messed around""" start="00:18:18.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with calling `org-export-to-file`.""" start="00:18:18.504" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If it isn't, you can pretty well trust me for it.""" start="00:18:23.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There's nothing very special going on.""" start="00:18:25.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This looks rather like...""" start="00:18:28.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Poor example there.""" start="00:18:30.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's go back to our markdown.""" start="00:18:37.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And there, we can see--""" start="00:18:46.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: I'm going to make a quick announcement.""" start="00:18:47.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Can you hear me?""" start="00:18:49.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Yes, go for it.""" start="00:18:50.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: OK, let me just show my face.""" start="00:18:52.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Oh, I'm not showing my face.""" start="00:18:54.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Damn it.""" start="00:18:55.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""OK, I'll make the announcement.""" start="00:18:55.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You won't see my face quite yet.""" start="00:18:57.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We are about to get started.""" start="00:18:58.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Well, we actually just got started on dev""" start="00:19:00.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with the talk by RMS.""" start="00:19:02.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if you want to hop over to watch the talk by RMS,""" start="00:19:06.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""feel free to do so.""" start="00:19:08.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Otherwise, we will be continuing on Gen with Corwin""" start="00:19:09.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to finish his talk and have a Q&A.""" start="00:19:12.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Corwin, you can feel free to go now.""" start="00:19:12.254" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Okay, bye, everybody.""" start="00:19:16.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And for those sticking around,""" start="00:19:18.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm just going to keep pressing on with this.""" start="00:19:22.796" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""In fact, I'm going to dive back into the part""" start="00:19:25.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I skipped here, which is the rest of how""" start="00:19:30.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this export functionality works.""" start="00:19:35.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So just to make sure the dot is tied together,""" start="00:19:37.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the core of how this program works""" start="00:19:41.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is generating some Elisp and then passing it""" start="00:19:44.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to Emacs in batch mode.""" start="00:19:49.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if that wasn't perfectly clear,""" start="00:19:51.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that's really what's going on with this program.""" start="00:19:53.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The rest of the implementation is just""" start="00:19:57.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""a way to do that or certain features that""" start="00:19:59.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""are supported in that generated Elisp, if you will.""" start="00:20:01.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this is, you could say, the minimum implementation""" start="00:20:08.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I could come up with to create a web server""" start="00:20:11.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""for my local Org documents.""" start="00:20:11.754" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I will also interrupt myself to just pull up""" start="00:20:17.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the Etherpad real quick.""" start="00:20:24.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Actually, if somebody is listening""" start="00:20:28.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and can share a link to that, I closed my browser window""" start="00:20:29.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with my links in it.""" start="00:20:34.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But sure, I'm happy to take questions at any point, Leo,""" start="00:20:36.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if there are any questions for me.""" start="00:20:44.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Are you hanging out with me,""" start="00:20:48.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""instead of watching RMS? You can go.""" start="00:20:49.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm teasing.""" start="00:20:53.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: No, I mean, we know that some people can""" start="00:20:54.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""have both streams open.""" start="00:20:58.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's fine.""" start="00:21:00.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And right now, it's not the Q&A with RMS.""" start="00:21:01.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's just the presentation.""" start="00:21:03.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So feel free to hang out a little longer""" start="00:21:04.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if you just want the live stuff.""" start="00:21:07.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Don't worry about it.""" start="00:21:09.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""You're fine.""" start="00:21:09.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Yeah, and forgive me, everybody,""" start="00:21:10.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if you were hoping for a quick, succinct talk.""" start="00:21:13.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I happen to know I was going to be opposite RMS,""" start="00:21:16.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""so I awarded myself the liberty of rambling.""" start="00:21:18.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if you do have a question, something that I alluded to""" start="00:21:23.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and haven't come back to yet, you should, by all means,""" start="00:21:26.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""prompt me.""" start="00:21:29.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Corwin, I might do--""" start="00:21:30.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm just giving you a little heads up.""" start="00:21:33.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I might need to go help at some point of dev.""" start="00:21:35.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if I need to do so, I will let you know right now""" start="00:21:38.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""inside the BBB room,""" start="00:21:43.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and you'll be on your own to manage the chat.""" start="00:21:44.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And you can just talk backstage to us""" start="00:21:46.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to manage what we do with the stream, OK?""" start="00:21:47.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Yep, that should be no problem at all.""" start="00:21:50.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I've got my pad up now.""" start="00:21:52.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Thank you, ??.""" start="00:21:53.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I'm sorry about butchering your name there.""" start="00:21:55.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And yep, I've got my chat open.""" start="00:21:58.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I think I'm pretty well set to self-manage.""" start="00:22:03.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Oh, I don't have a camera on.""" start="00:22:06.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So you can't see me giving you the thumbs up.""" start="00:22:07.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Okay, good.""" start="00:22:09.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, so let's just walk through,""" start="00:22:09.860" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because it's sort of an interesting code.""" start="00:22:16.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's just take a look real quick""" start="00:22:18.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""at how we generated our Elisp here,""" start="00:22:20.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because it is--""" start="00:22:24.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""there we go.""" start="00:22:26.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It is a little bit interesting.""" start="00:22:27.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So here is the method.""" start="00:22:29.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I didn't get into detail on this.""" start="00:22:32.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But there's an ES5 class that represents""" start="00:22:34.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""an Org mode document.""" start="00:22:34.087" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It has the static debug property that,""" start="00:22:38.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as you might imagine,""" start="00:22:38.921" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""can be overridden by that debug setting""" start="00:22:42.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we looked at in the defaults.""" start="00:22:45.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We also have a static variable that--""" start="00:22:48.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""a static property that does nothing more than getting""" start="00:22:51.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the path to Emacs out of those defaults.""" start="00:22:57.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Similarly, we have a class method""" start="00:23:00.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to spawn out an Emacs, as I mentioned, in batch mode,""" start="00:23:02.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""eval-ing some arbitrary Lisp that's passed in.""" start="00:23:09.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so the type--""" start="00:23:12.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this is where things start to get interesting.""" start="00:23:20.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this is an implementation detail,""" start="00:23:23.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but-- that it's written as a static method.""" start="00:23:26.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But essentially, what's going on here""" start="00:23:30.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is looking up from that type list""" start="00:23:32.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to try to find a type that's passed in,""" start="00:23:34.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and that's returning one of these blocks.""" start="00:23:37.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's say I requested HTML, which would be the default.""" start="00:23:41.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Then I'm going to get this set of properties back.""" start="00:23:44.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:23:50.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Essentially, this program generates a program""" start="00:23:51.260" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or a little block of executable elisp.""" start="00:24:04.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""However, in some cases, where if the `load-path` has""" start="00:24:10.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""been customized in that type block,""" start="00:24:15.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or I think that's the only case I supported.""" start="00:24:20.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There was another complexity I removed.""" start="00:24:25.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So in that case, then I can simply""" start="00:24:28.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""replace that program with a let.""" start="00:24:32.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Either way, I'm going to have everything I generate""" start="00:24:33.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""be encapsulated in a single block.""" start="00:24:41.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The-- then I'm calling that formatLisp process""" start="00:24:45.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that we talked about, appending to that--""" start="00:24:49.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or inserting into, you could say, the outer scope.""" start="00:24:52.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we start by finding the file.""" start="00:25:01.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We then load any libraries that might be needed.""" start="00:25:05.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""In some cases, the type might not""" start="00:25:11.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""have any external libraries.""" start="00:25:13.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So we just-- so that's a no-op.""" start="00:25:15.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then finally, we're going to execute""" start="00:25:18.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that logic I mentioned before about selecting""" start="00:25:24.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""either the default org-export-to-file,""" start="00:25:27.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or else whatever Elisp we've staged for exporting""" start="00:25:30.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that particular file type.""" start="00:25:36.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And again, in the case of PDF, there's a special function""" start="00:25:38.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that's used to trigger that export.""" start="00:25:43.113" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Or you may be aware that that's a little more complicated.""" start="00:25:46.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There's intermediate forms there.""" start="00:25:49.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:25:50.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So just reminding myself if there's anything else""" start="00:25:56.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I have to cover on background.""" start="00:26:01.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I think that pretty well covers the basics.""" start="00:26:03.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""All right, let's look at that source block execute.""" start="00:26:07.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is the other use of the format list function.""" start="00:26:09.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So here, rather than looking at the type""" start="00:26:14.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and passing that through our Org export method,""" start="00:26:16.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and then that type is used to get the list""" start="00:26:24.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that we want to create.""" start="00:26:29.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""In the case of source block execute,""" start="00:26:30.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we're kind of rolling it a lot more by hand.""" start="00:26:37.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So this gives us a good chance to sort of unwind""" start="00:26:40.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""how that list looks when it's staged as JavaScript data.""" start="00:26:43.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So here again, I wrap everything in a `progn`.""" start="00:26:49.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I start by preventing an interactive prompt""" start="00:26:52.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""for the Babel execution.""" start="00:26:58.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then we load languages.""" start="00:27:01.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This relates to another piece of our configuration""" start="00:27:04.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""where we've specified a set of languages""" start="00:27:12.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that it's OK to execute.""" start="00:27:17.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if that type isn't in this list,""" start="00:27:19.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""then we won't be able to execute it in line""" start="00:27:24.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""through our trivial little web server.""" start="00:27:28.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:27:32.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""With that done, then, loading the selected language,""" start="00:27:33.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we then once again open the file.""" start="00:27:40.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And we're-- whoops.""" start="00:27:43.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let-bind a return value, which is""" start="00:27:46.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""calculated by using Org source block execute [`org-sbe`]""" start="00:27:51.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""on the name of the block that's given.""" start="00:27:55.167" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then we use a temp buffer to write that out""" start="00:27:58.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to a temporary file.""" start="00:28:05.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is actually a little clumsy,""" start="00:28:06.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""but I haven't put the effort in to have this written out""" start="00:28:08.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to the standard output cleanly instead of using a temp file.""" start="00:28:12.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So under-- this is another example of where it may not""" start="00:28:17.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""be production-- well, it definitely""" start="00:28:20.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is not production-worthy code in that under heavy load,""" start="00:28:22.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this would certainly break with collisions""" start="00:28:27.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""on the Babel file,""" start="00:28:30.167" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the name of the Babel file.""" start="00:28:32.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""In any case, once we've staged up our Elisp, which is--""" start="00:28:34.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this is basically variable interpolation,""" start="00:28:37.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""then we just call Emacs on that.""" start="00:28:42.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And if we look down to where that's called,""" start="00:28:47.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you can see that the Org Babel filename calculated here.""" start="00:28:49.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Is there a problem?""" start="00:29:12.795" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: No, I'm fine.""" start="00:29:15.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm just lost in my code.""" start="00:29:15.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: OK, cool.""" start="00:29:18.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Uh-oh means, oh, I need to intervene.""" start="00:29:19.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""What is going on?""" start="00:29:21.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Carry on, please.""" start="00:29:22.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: No, I'm fine, Leo.""" start="00:29:23.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:29:24.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so then--""" start="00:29:25.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""so you can see we get--""" start="00:29:27.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we send the Babel file here,""" start="00:29:28.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which is calculated manually.""" start="00:29:35.538" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""A bit sloppy there, since I have essentially the same--""" start="00:29:41.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I have two different places where""" start="00:29:45.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm calculating the Org doc file in two different ways.""" start="00:29:47.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Have I encouraged you to write your own yet?""" start="00:29:52.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Or send patches.""" start="00:29:54.720" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so that's pretty much the nuts and bolts""" start="00:29:56.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of this program.""" start="00:30:01.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's go back to just seeing if we can't make it run.""" start="00:30:02.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:30:22.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, well, I apologize for not""" start="00:30:22.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""having taken the time to stage my demo this morning.""" start="00:30:45.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm going to try to make it better for you.""" start="00:30:49.560" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But apparently, it's going to be non-trivial""" start="00:30:52.680" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to make the program work.""" start="00:30:59.920" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's just-- before I completely give up,""" start="00:31:04.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""let's go ahead and try our Babel execute.""" start="00:31:07.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And that, too, is failing.""" start="00:31:13.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So there's something unhappy in my local world.""" start="00:31:14.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There it goes.""" start="00:31:18.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But in any case, let's go ahead and just take a look at""" start="00:31:19.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that.""" start="00:31:26.600" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's see.""" start="00:31:28.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Control Enter.""" start="00:31:30.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's take a look at that generated .el""" start="00:31:36.628" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and compare it to-- whoa--""" start="00:31:40.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and compare it to--""" start="00:31:42.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm just going to format this manually,""" start="00:31:44.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because I've forgotten my key bindings to auto-format it.""" start="00:31:52.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""There we go.""" start="00:31:56.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:32:02.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So now we can see, as promised, there's really""" start="00:32:07.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""nothing going on here other than the interpolation""" start="00:32:13.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of the variables in.""" start="00:32:16.200" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We're inserting-- we're using an insert and write file""" start="00:32:18.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""method, which is, again, rather sloppy,""" start="00:32:24.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to generate the text file.""" start="00:32:27.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right.""" start="00:32:32.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let's come back to our documentation""" start="00:32:32.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and see if we can put a bow on the project.""" start="00:32:34.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So I hope I've convinced you that this was actually""" start="00:32:39.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""rather easy to do.""" start="00:32:43.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""The entirety of my index.js file is 262 lines,""" start="00:32:45.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and that includes a good 40 of whitespace and configuration.""" start="00:32:52.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It has only one dependency, the Express,""" start="00:33:03.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which really builds the web server.""" start="00:33:06.506" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Any language you'd rather implement this in""" start="00:33:08.240" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""will have a similar capability for building""" start="00:33:11.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""some type of trivial web server.""" start="00:33:14.120" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I think you may find--""" start="00:33:16.280" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I certainly found that a large portion of the code base""" start="00:33:18.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is really making the errors meaningful,""" start="00:33:22.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""in that, in some cases, sending an appropriate HTTP status""" start="00:33:28.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""based on what happened.""" start="00:33:32.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""In other cases-- let's see if""" start="00:33:34.360" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I've got an explicit `throw` left in here--""" start="00:33:38.003" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""in other cases, just trapping different types""" start="00:33:42.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of failure conditions.""" start="00:33:45.840" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm going to look at my pad, and I do see a question here.""" start="00:33:47.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So let me jump in here.""" start="00:33:54.000" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""[Leo]: Corwin, just to make sure, are you switching to Q&A?""" start="00:33:58.880" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Are you finished with your presentation?""" start="00:34:00.640" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Well, as I said, I'm happy to take Q&A throughout.""" start="00:34:02.380" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But yes, let's say yes to that.""" start="00:34:05.260" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Okay, so Corwin, what I'm going to need to do now--""" start="00:34:08.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you are in charge of the room.""" start="00:34:10.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""We are going to open up the room so""" start="00:34:12.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that if people have questions watching right now on Gen,""" start="00:34:14.060" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""feel free to come in.""" start="00:34:17.220" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And there was something else I needed to say.""" start="00:34:18.700" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Yes, Corwin, if there's any problem,""" start="00:34:22.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""whisper to us on Mumble.""" start="00:34:24.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So you might want to unmute Mumble""" start="00:34:25.700" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and be able to listen to us over there.""" start="00:34:27.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: I can't do that, Leo.""" start="00:34:29.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If I unmute, Mumble is going to bleed through.""" start="00:34:32.480" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Okay, sure.""" start="00:34:36.440" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Well, if you have any problem,""" start="00:34:36.960" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""type in #emacsconf-org channel,""" start="00:34:39.417" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and we'll be with you, OK?""" start="00:34:41.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Or I'll PM somebody.""" start="00:34:42.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But I don't anticipate having any problems.""" start="00:34:43.520" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'll put something in -org when I run out of steam here.""" start="00:34:45.760" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""How's that?""" start="00:34:49.040" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Amazing, cool.""" start="00:34:50.400" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I will have to leave the room, though.""" start="00:34:51.160" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm leaving the recording going so that we have your Q&A.""" start="00:34:53.320" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And whenever you're available--""" start="00:34:56.800" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: I'll shut off the recording when I close the room.""" start="00:34:58.080" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Leo]: Okay, great.""" start="00:35:02.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Good luck, Corwin.""" start="00:35:02.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""[Corwin]: Thank you.""" start="00:35:04.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, and if you're still with me, well, thanks.""" start="00:35:06.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I appreciate that.""" start="00:35:09.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I did offer to be opposite RMS.""" start="00:35:13.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I'm in no way offended if people do want to jump over,""" start="00:35:16.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""especially as that starts to shift over to Q&A.""" start="00:35:20.060" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm taking Leo's leaving as a pretty good indication""" start="00:35:23.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that that's happening now-ish.""" start="00:35:26.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I totally understand""" start="00:35:28.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""if folks are more excited to do that.""" start="00:35:31.386" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Meanwhile, let me just jump over to the question""" start="00:35:35.020" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I received.""" start="00:35:37.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'll show the pad here so that I save myself""" start="00:35:38.660" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""reading the question out.""" start="00:35:46.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But I'll paraphrase it.""" start="00:35:47.860" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""Why am I not running the web server in Emacs?""" start="00:35:48.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That would be a great way to do it.""" start="00:35:52.660" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I chose to build it in Node.js""" start="00:35:54.380" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because that was trivially easy for me.""" start="00:35:56.341" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""And then finally, am I using org-info-js?""" start="00:36:22.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""No, I learned about this essentially at this conference.""" start="00:36:24.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So that's something I'll be learning more about.""" start="00:36:27.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And it could well influence this project.""" start="00:36:30.660" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, and thanks for the questions.""" start="00:36:34.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, I'm going to slow my roll just a little bit here""" start="00:36:59.020" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""because I think I kind of have all the time in the world.""" start="00:37:02.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I will be wrapping up within about 15 or 20 minutes""" start="00:37:06.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""at the latest just to avoid stressing out""" start="00:37:11.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""my fellow organizers, especially Leo and Sacha""" start="00:37:15.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that have the bulk of the heavy lifting this year,""" start="00:37:18.828" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and Amin, and really, thanks all to everybody.""" start="00:37:22.260" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""God, the nicest part of doing my own talk""" start="00:37:26.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is that I get to say that.""" start="00:37:29.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's just so much fun to contribute to EmacsConf.""" start="00:37:31.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""And if you're at all interested, there's""" start="00:37:35.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""plenty of completely backstage, behind the curtain role.""" start="00:37:38.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Behind the curtain roles doesn't mean""" start="00:37:43.100" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you have to be somebody that likes""" start="00:37:45.340" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""talking or being on webcam.""" start="00:37:47.866" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Sorry that my camera isn't working this year.""" start="00:37:50.060" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I spent quite a while fussing with that""" start="00:37:52.300" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and lost all my time to get my prerec working.""" start="00:37:53.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, so trying to think where I can take us""" start="00:37:56.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""without my demo working.""" start="00:38:10.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I was really hoping to show the Org Babel piece.""" start="00:38:11.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's really fun.""" start="00:38:14.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""So let me just mention briefly how I'm using this at work.""" start="00:38:15.580" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So at work, I'll have some type of Org document.""" start="00:38:20.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And usually, it's a project.""" start="00:38:25.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So the title of the document is My Project.""" start="00:38:27.700" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then I'll have a requirements section.""" start="00:38:32.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I'll have a meeting notes section.""" start="00:38:37.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""That's probably the key thing.""" start="00:38:43.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then as the project goes on, I'll start having--""" start="00:38:44.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm a solutions architect.""" start="00:38:49.540" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So my job is formalizing design in large part.""" start="00:38:50.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So then I'll have a design documents section.""" start="00:38:55.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And this is where I'll be doing a lot of my work.""" start="00:39:01.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I'll start out saying--""" start="00:39:05.020" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And maybe Bob is a subject matter expert""" start="00:39:26.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""whose buy-in I need to have on how we're going""" start="00:39:29.340" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to do the high-level design.""" start="00:39:32.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Maybe a lead engineer or a dev manager""" start="00:39:34.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""or something like that.""" start="00:39:37.297" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, as my work goes on,""" start="00:39:39.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""then this will start getting into more detail.""" start="00:39:42.654" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And things of this nature.""" start="00:40:16.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""As things get further and further,""" start="00:40:18.660" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'll actually have documentation""" start="00:40:20.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that I'm adding in here.""" start="00:40:21.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Oh, I see.""" start="00:40:22.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's a big mess.""" start="00:40:28.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, well, we'll just reuse this.""" start="00:40:29.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I can insert those all in line.""" start="00:40:32.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And now for the fun part,""" start="00:40:40.380" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""let's see if the most trivial case""" start="00:40:42.158" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""is working here.""" start="00:40:44.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""No.""" start="00:40:49.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, completely broken.""" start="00:40:51.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Let me drag.""" start="00:40:52.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, well, apologies again for the poor quality""" start="00:40:57.260" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""of my demo today.""" start="00:41:05.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And let me just look real quick at my Etherpad once more.""" start="00:41:06.260" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And I'll glance at BBB to see if there's anybody""" start="00:41:13.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""jumping in with questions.""" start="00:41:16.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And then I'll go back to IRC and look for questions there.""" start="00:41:18.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""OK, and I don't see any additional questions on the pad.""" start="00:41:23.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I'm just going to scan IRC real quick.""" start="00:41:33.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I suspect that the TreeSitter comment isn't for me.""" start="00:41:35.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""All right, and I'm not seeing a lot of questions there.""" start="00:41:44.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So I'm just going to vamp for just a minute or two.""" start="00:41:56.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""As I mentioned, I'm a conference volunteer.""" start="00:42:04.340" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This is my third year volunteering""" start="00:42:07.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with the conference.""" start="00:42:09.700" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And probably if you take one thing away from my talk,""" start="00:42:11.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""it should be I really like volunteering""" start="00:42:15.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""for the conference.""" start="00:42:17.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It's fun.""" start="00:42:18.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It makes me feel sort of close to the pulse.""" start="00:42:19.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And it gives me a chance to just interact with people""" start="00:42:23.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that have very different perspectives on Emacs,""" start="00:42:27.297" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""which is something that I really value a lot.""" start="00:42:30.107" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Emacs, like anything else sort of in the internet world,""" start="00:42:32.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""has a real echo chamber factor.""" start="00:42:40.220" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If you do or don't like use-package,""" start="00:42:42.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you probably interact with a lot of people""" start="00:42:46.505" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that feel the same way about that.""" start="00:42:49.136" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And so I really recommend volunteering for EmacsConf""" start="00:42:53.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as a way to sort of mix it up and get""" start="00:42:57.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to know people that may not use Emacs""" start="00:43:01.340" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the same way that you do.""" start="00:43:03.859" video="mainVideo-orgvm" id="subtitle"]]
+[[!template new="1" text="""Or perhaps more on topic, though,""" start="00:43:08.380" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the log line for this talk is it's really quite easy""" start="00:43:10.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to build a program that uses Emacs in a pipeline capability.""" start="00:43:14.300" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I think there's a ton of opportunity in this space.""" start="00:43:20.980" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""This particular example is just a trivial web server""" start="00:43:23.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""written using Node.js.""" start="00:43:27.700" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""But as was pointed out, we could have used elnode""" start="00:43:30.780" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as a web server""" start="00:43:31.546" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and done the entire thing within Emacs Lisp.""" start="00:43:40.060" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Or really, almost any technology""" start="00:43:44.060" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""would get us this capability.""" start="00:43:48.766" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""From an implementation standpoint,""" start="00:43:52.900" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I had a lot of fun building""" start="00:43:54.660" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""this trivial little Elisp parser,""" start="00:43:56.848" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""and I'm rather pleased with the fact""" start="00:43:59.580" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""that the entirety of that--""" start="00:44:03.220" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""the entire algorithm for turning JavaScript or JSON data,""" start="00:44:07.340" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""we could say, into Elisp is really a one-liner,""" start="00:44:14.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""albeit a nasty one-liner. That was pretty cool""" start="00:44:20.420" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""to discover how simple that was.""" start="00:44:25.820" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So in my mind, that opens up a lot of possibility.""" start="00:44:28.180" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""If it's this easy in JavaScript,""" start="00:44:31.220" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""I wouldn't expect it to be hard,""" start="00:44:32.890" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""any more difficult in your favorite language.""" start="00:44:34.709" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""Glance one more time to see if there""" start="00:44:36.860" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""happen to be any other questions.""" start="00:44:41.140" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""And not seeing any, I'm going to go ahead and start""" start="00:44:42.940" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""wrapping up my chat now.""" start="00:44:47.300" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""It will take me a couple of minutes to do that.""" start="00:44:49.500" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""So if you do have any other questions that you""" start="00:44:51.620" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""want to drop into the pad or any comments,""" start="00:44:54.580" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""you're more than welcome to hit me with those""" start="00:44:56.460" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""as I coordinate closing this chat, this talk,""" start="00:44:59.740" video="mainVideo-orgvm" id="subtitle"]]
+[[!template text="""with the organizer team.""" start="00:45:03.820" video="mainVideo-orgvm" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20orgvm%3A%20orgvm%3A%20a%20simple%20HTTP%20server%20for%20org)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/orgvm-before.md b/2022/info/orgvm-before.md
new file mode 100644
index 00000000..46c4c612
--- /dev/null
+++ b/2022/info/orgvm-before.md
@@ -0,0 +1,46 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="orgvm">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect stroke-width="3" x="203" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 47-min talk followed by included in main video Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">#emacsconf-gen</a>)
+Etherpad: <https://pad.emacsconf.org/2022-orgvm>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T16:10:00Z" end="2022-12-04T16:20:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~11:10 AM - 11:20 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~10:10 AM - 10:20 AM CST (US/Central)<br />Sunday, Dec 4 2022, ~9:10 AM - 9:20 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~8:10 AM - 8:20 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~4:10 PM - 4:20 PM UTC <br />Sunday, Dec 4 2022, ~5:10 PM - 5:20 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~6:10 PM - 6:20 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~9:40 PM - 9:50 PM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~12:10 AM - 12:20 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~1:10 AM - 1:20 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+<div class="vid"><video controls preload="none" id="orgvm-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="orgvm-mainVideo" data="""
+00:36.000 Introduction
+01:31.080 What is orgvm?
+02:01.880 Nodejs
+02:49.560 The itch I was trying to scratch
+03:38.320 Demo
+05:29.760 Needs a relatively recent version of Emacs
+06:24.920 Usage patterns
+08:13.520 Emacs Lisp
+09:09.160 Variables
+10:38.720 Replace
+11:19.120 Getting into the code some more
+13:06.480 Generating Elisp
+13:37.320 Org blocks
+14:32.400 Building some Lisp
+16:43.000 How Elisp gets encoded
+19:25.040 How the export works
+22:09.860 Walking through the code
+26:07.440 Executing the source block
+32:39.760 Conclusion
+33:58.880 Questions and answers
+35:48.940 Why am I not running the web server in Emacs?
+36:22.140 Is this using org-info-js?
+37:35.460 EmacsConf
+38:15.580 How I'm using this at work
+42:04.340 Volunteering for EmacsConf
+43:08.380 It's easy to build a program that uses Emacs in the pipeline
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.webm">Download --main.webm (159MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/9Ybxov8eVA763kRvHuM6zY">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/orgvm-nav.md b/2022/info/orgvm-nav.md
new file mode 100644
index 00000000..a6936218
--- /dev/null
+++ b/2022/info/orgvm-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/justl">justl: Driving recipes within Emacs</a>
+Next by track: <a href="/2022/talks/rms">What I'd like to see in Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/orgyear-after.md b/2022/info/orgyear-after.md
new file mode 100644
index 00000000..b1e57ef7
--- /dev/null
+++ b/2022/info/orgyear-after.md
@@ -0,0 +1,406 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="orgyear-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello. If you're listening to this talk,""" start="00:00:00.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""then you should be at least a bit interested""" start="00:00:04.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in Org mode, which is fantastic""" start="00:00:06.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""because there have been quite a few""" start="00:00:09.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""interesting developments over the past year or so.""" start="00:00:11.253" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I'm Timothy, as you may have gathered from the last talk,""" start="00:00:14.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and I'm also quite involved with the Org project,""" start="00:00:19.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""so I'd like to go through a few of those developments""" start="00:00:21.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""over the past year or so and give you a few hints as well""" start="00:00:24.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as to what potentially lies around the corner with Org mode.""" start="00:00:27.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""The starters, slightly on the more boring side""" start="00:00:32.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but rather significant change to the project,""" start="00:00:35.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""occurred with the housekeeping or organisation.""" start="00:00:37.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""The codebase for the Org project has actually shifted over""" start="00:00:40.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""from a self-hosted Gogs instance over to Savannah,""" start="00:00:43.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which means it's now living right alongside""" start="00:00:46.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the Emacs codebase.""" start="00:00:49.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""This has been accompanied by the creation""" start="00:00:51.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of a whole bunch of Org-related repos under""" start="00:00:53.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Bastien's (Org's maintainer) personal sourceHut account.""" start="00:00:58.220" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""We've got the source of the website, the Org wiki Worg,""" start="00:01:03.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as well as Org contrib.""" start="00:01:06.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Another recent addition to this list of Org-related repos""" start="00:01:08.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is the new Org mode tests--continuous integration.""" start="00:01:13.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now, this is rather important, because while we do recommend""" start="00:01:17.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that all contributors actually run make tests""" start="00:01:22.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""before submitting patches to the Org project,""" start="00:01:25.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""this doesn't always happen.""" start="00:01:29.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It can also actually be a bit harder than you expect""" start="00:01:31.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to run the tests because there are a lot""" start="00:01:34.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of trans-dependencies you get with Org;""" start="00:01:35.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""for instance, with all of the various Babel libraries""" start="00:01:37.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which actually require other packages""" start="00:01:40.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or programming language to be installed on the system.""" start="00:01:42.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Having a single self-contained test system""" start="00:01:46.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to actually make sure that Org can be regularly""" start="00:01:50.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and thoroughly tested should be a great help for actually""" start="00:01:53.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""ensuring the quality of the contributions.""" start="00:01:57.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""The funding structure for Org has also undergone a bit""" start="00:02:04.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of a shift. Historically, we've just directed everybody""" start="00:02:07.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""who's interested in financially supporting the Org project""" start="00:02:10.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to the maintainer Bastien's personal GitHub sponsors""" start="00:02:14.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and LibrePay accounts. Now, early this year,""" start="00:02:18.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Bastion has created the Librepay Org mode team account,""" start="00:02:22.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which means that you can actually now""" start="00:02:27.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""support the Org project as opposed to""" start="00:02:29.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the person leading the Org project.""" start="00:02:33.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Currently, this just distributes donations between Bastien,""" start="00:02:34.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Ihor, and myself. However, the idea is that""" start="00:02:39.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as the active contributors for the Org project""" start="00:02:42.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""come and go over time, the list of people on this team""" start="00:02:45.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""can be changed as seems sensible. The hope here is that""" start="00:02:50.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""it will simplify both how easy it is""" start="00:02:57.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to actually financially support the Org project""" start="00:03:00.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as well as how easily people contributing""" start="00:03:02.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to the Org project can be supported.""" start="00:03:04.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""If you're interested in supporting the Org project,""" start="00:03:09.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""there's never been a better time than now""" start="00:03:13.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to have a look at this""" start="00:03:15.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and let anybody who might also might be interested know.""" start="00:03:16.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Hopefully, this leads to a healthier funding structure""" start="00:03:23.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that will scale better into the long term""" start="00:03:25.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and thus better support the work that happens with Org.""" start="00:03:28.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Now, the project itself has of course also seen quite a bit""" start="00:03:32.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of development over the past year.""" start="00:03:37.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""We've had about 800 comments from 80 contributors.""" start="00:03:38.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Within these comments, there's been a lot of polishing""" start="00:03:44.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""quality-of-life improvements,""" start="00:03:46.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and also quite a few new features.""" start="00:03:48.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now, I haven't got nearly enough time""" start="00:03:50.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to go through this exhaustively,""" start="00:03:52.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""so we're just going to go through a quick highlight reel.""" start="00:03:54.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""There's a collection of export improvements""" start="00:03:58.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""from things which affect all export backends,""" start="00:04:00.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""like including remote content""" start="00:04:04.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and adding new things like DOI links""" start="00:04:07.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and support for encrypted Org files,""" start="00:04:09.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as well as a whole lot of export-backend-specific changes.""" start="00:04:11.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""For example, quite a few backends--""" start="00:04:14.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I've mentioned the LaTeX one here,""" start="00:04:17.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but also others such as Texinfo--have now got""" start="00:04:18.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""rich support for various types of attributes and objects.""" start="00:04:23.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""The HTML backend has had a few things boosted up and well,""" start="00:04:26.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""if you want to see the full list,""" start="00:04:31.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""just take a look at the release notes.""" start="00:04:33.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""We've also seen a similar collection of improvements""" start="00:04:36.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""with the Babel backends. Once again, this is scattered--""" start="00:04:39.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or well, it can be split into two sets of changes.""" start="00:04:43.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""There's some which affect all of Babel, essentially.""" start="00:04:46.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""For instance, the new syntax of parsing""" start="00:04:49.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the raw content of code blocks, or the changes with Noweb.""" start="00:04:52.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""For example, :noweb-prefix is a new option that can be used.""" start="00:04:56.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And then there's also a collection""" start="00:05:01.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of backend-specific changes. So ASCII graphics with PlantUML""" start="00:05:03.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or enhanced return capabilities with the ob-python library.""" start="00:05:07.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""And then of course, as before, a whole collection""" start="00:05:12.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of more changes which you can find in the release notes.""" start="00:05:17.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Last but by no means least,""" start="00:05:19.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""there have been quite a few changes within the rest of Org.""" start="00:05:22.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So this is, once again, far too many things to list,""" start="00:05:26.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but it's things like improved refiling,""" start="00:05:30.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""capture templates, image preview sizing,""" start="00:05:33.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""clocktable settings, agenda tweaks,""" start="00:05:36.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and well, a whole lot more.""" start="00:05:38.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Yes, basically, the essence of what's here""" start="00:05:41.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is a lot of little changes""" start="00:05:45.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which just address particular use cases in ways""" start="00:05:48.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that I don't think anybody's going to be seeing""" start="00:05:50.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the impact of all of them,""" start="00:05:55.053" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but I think most people should at least""" start="00:05:55.787" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""find one or two things""" start="00:05:57.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which actually improve their own usage.""" start="00:06:00.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Now these are the sort of assorted""" start="00:06:04.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""relatively minor improvements,""" start="00:06:06.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but there are also some major ones.""" start="00:06:07.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And one in particular, citations.""" start="00:06:09.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So I think this has been, at this point,""" start="00:06:12.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""over a decade in the making,""" start="00:06:15.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but Org finally has first-class support for citations.""" start="00:06:17.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And I have to say, it is marvellous.""" start="00:06:21.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""You'd hope so, after the labour. I think it is.""" start="00:06:23.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It can be said that it's actually worth the wait.""" start="00:06:27.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I think out of the various options you've got now,""" start="00:06:30.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""(for example, the way that Pandoc""" start="00:06:31.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and Markdown otherwise[??] do it)""" start="00:06:34.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Org has a fantastically succinct and flexible""" start="00:06:35.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""syntax for citations, which scales really well for all sorts""" start="00:06:40.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of different use cases.""" start="00:06:45.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Additionally, on the backend side of things,""" start="00:06:47.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we've now got a generalised way for handling citations""" start="00:06:51.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which has been quite helpful for the--I think""" start="00:06:55.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I could say rather rapid development""" start="00:06:57.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of multiple citation backends for Org.""" start="00:07:00.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And I think it's just fantastic, really, seeing""" start="00:07:03.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""how quickly Org has gone""" start="00:07:07.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""from having no support for citations""" start="00:07:09.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""at the start of this year""" start="00:07:12.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to what can be described as""" start="00:07:13.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a wonderfully rich and flexible support""" start="00:07:17.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""with, well, multiple backends for citations.""" start="00:07:20.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I think that's something that we can really be proud of.""" start="00:07:23.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And it's been a fantastic contribution""" start="00:07:27.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""for everybody involved in this process.""" start="00:07:30.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Okay, so we've had features.""" start="00:07:31.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""There have also been a whole lot of""" start="00:07:36.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""quality of life improvements.""" start="00:07:38.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Once again, many more than I can reasonably mention here.""" start="00:07:39.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So I'm just going to flick it through""" start="00:07:43.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a few of them. A few big ones though,""" start="00:07:46.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Ihor is responsible for three lovely developments with Org,""" start="00:07:48.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""one of which is Org fold. So this is a generalisation""" start="00:07:52.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of the way that content is folded in Org.""" start="00:07:55.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And I think quite a few of you will actually underestimate""" start="00:07:57.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""how much can be folded in Org.""" start="00:08:00.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It's not just a matter of headlines.""" start="00:08:01.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It's headlines, code blocks, lists, environments,""" start="00:08:03.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""all sorts of things can actually be folded in Org.""" start="00:08:07.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And the introduction of Org fold is important""" start="00:08:10.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""for two reasons. One is that it has allowed for""" start="00:08:14.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""text-property-based folding,""" start="00:08:18.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which in Emacs versions less than 29""" start="00:08:21.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""has a huge difference in performance,""" start="00:08:24.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is particularly apparent with larger files.""" start="00:08:27.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""The second significant thing about this is that""" start="00:08:29.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""it now actually provides a more general way""" start="00:08:32.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to actually describe changes to the folding structure.""" start="00:08:36.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So before there was direct modification of""" start="00:08:39.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""messing with overlays scattered around the Org code base.""" start="00:08:42.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now we have a much more well organised system""" start="00:08:45.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""where we use Org fold to say what is and isn't folded""" start="00:08:49.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and to manage the state of all of that,""" start="00:08:53.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is, I think, just from a sort of design,""" start="00:08:54.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""sort of project design approach, a much better system.""" start="00:08:59.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""We've also got the Org element cache by Ihor.""" start="00:09:02.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""This is actually something which was discussed""" start="00:09:06.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""quite a while ago, but has somewhat stalled""" start="00:09:09.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""due to the difficulty of cache invalidation.""" start="00:09:12.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Ihor has sunk a tremendous amount of effort into this""" start="00:09:14.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and has improved it to the point""" start="00:09:17.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""where we've now actually been able to""" start="00:09:19.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""enable this by default. So what this basically does is""" start="00:09:21.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""it records lots of information""" start="00:09:25.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""about the structure of the Org document""" start="00:09:28.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and allows for, well, with the appropriate modifications""" start="00:09:30.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that Ihor has also made throughout the Org element library""" start="00:09:34.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to use this information to speed up various operations""" start="00:09:37.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""based on the Org document syntax tree.""" start="00:09:41.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And so this has been quite--""" start="00:09:44.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the improvements have been scattered all over the place,""" start="00:09:48.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but for a good example for libraries""" start="00:09:49.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or anybody who's wanting to quickly map over Org elements""" start="00:09:52.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is `org-element-cache-map', which now provides""" start="00:09:57.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a much, much faster way to map over""" start="00:10:00.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""all of the Org elements in a document.""" start="00:10:04.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""This also ties into the third major feature from Ihor""" start="00:10:07.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which I'd like to mention, which is Org persist.""" start="00:10:10.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So this provides a method of persisting values""" start="00:10:13.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""across Emacs sessions, basically saving them""" start="00:10:17.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to a file somewhere and loading them.""" start="00:10:20.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now this works for Elisp values and it also works for files,""" start="00:10:21.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which we made use of with the improved capabilities""" start="00:10:25.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""for remote files and exports.""" start="00:10:29.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""This has also been used with the `org-element-cache' data.""" start="00:10:32.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So now, if you've got a massive Org file""" start="00:10:35.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and you open it once, that data can be saved to""" start="00:10:37.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""with the Org element cache to Org persist,""" start="00:10:41.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and the next time you load this file""" start="00:10:44.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in another Emacs session,""" start="00:10:46.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we can just start with the cached data""" start="00:10:47.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""instead of having to construct everything from scratch,""" start="00:10:50.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is quite nice. Once again, a change which""" start="00:10:53.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""much like the other ones,""" start="00:10:56.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we will see more of an impact in larger files,""" start="00:10:57.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but a very welcome one everywhere.""" start="00:11:00.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Now with remote files, there's also been the beginnings""" start="00:11:02.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of a bit of an effort with Org""" start="00:11:06.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to improve the approach we have to safety.""" start="00:11:09.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So in this case previously,""" start="00:11:13.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Org would unconditionally download""" start="00:11:15.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""all the remotes of files that's all referenced.""" start="00:11:17.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And now, it's actually going to maintain a list of""" start="00:11:19.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""sort of safe resources and prompt you""" start="00:11:23.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""when it's surprised by something,""" start="00:11:25.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to work out whether it should""" start="00:11:26.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""just download this one resource,""" start="00:11:29.887" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""mark the whole domain as safe, and a few other options.""" start="00:11:31.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""We're also going to probably see""" start="00:11:35.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a similar approach extend to, for instance,""" start="00:11:36.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""bits of Babel execution in the future.""" start="00:11:39.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Okay bug fixes. It will be remiss of me not to mention that""" start="00:11:40.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""along with all of the features""" start="00:11:45.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and quality of life improvements,""" start="00:11:46.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""there has been a huge pile of bug fixes.""" start="00:11:49.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I think the best way to actually get a look at this""" start="00:11:51.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""would be to look at the release notes""" start="00:11:57.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or maybe even the actual commit log,""" start="00:11:59.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but you could also just take my word and say that""" start="00:12:00.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""there have been a whole load of them""" start="00:12:04.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""over the past year. So just yes, the code base, I think,""" start="00:12:05.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is just gradually getting into better and better shape.""" start="00:12:11.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Asynchronous session evaluation is I think possibly""" start="00:12:15.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the final quality-of-life improvement""" start="00:12:18.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I want to mention. This came early in the year,""" start="00:12:19.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""just with ob-python, and it's been delayed""" start="00:12:22.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""because in order to actually make it work,""" start="00:12:24.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""they've required some fundamental changes to the way""" start="00:12:26.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that ob-comint works.""" start="00:12:29.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now that's been implemented,""" start="00:12:31.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we've since seen support extended to ob-R,""" start="00:12:33.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and hopefully, we'll see more languages join this list""" start="00:12:36.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in the not-too-distant future.""" start="00:12:38.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Now I guess one bonus which I tacked on just for fun is""" start="00:12:42.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""it's now more convenient than ever""" start="00:12:45.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to actually specify the permissions for tangled files.""" start="00:12:47.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Previously you had to give a list expression""" start="00:12:52.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which should be evaluated.""" start="00:12:55.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now you can give it directly in octal form""" start="00:12:55.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""instead of being a list expression""" start="00:12:58.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that produces an integer representation""" start="00:12:59.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of the octal permissions.""" start="00:13:01.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Or you can use ls style: rwx and dashes.""" start="00:13:03.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Or even just chmod. I want to be able to execute this""" start="00:13:08.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as a user, which will basically modify""" start="00:13:13.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the default permission to add that capability.""" start="00:13:16.387" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Alrighty. So that's the Org project itself,""" start="00:13:18.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but there's also a whole ecosystem.""" start="00:13:22.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So what have we got here?""" start="00:13:24.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Well a whole bunch of Zettelkasten""" start="00:13:27.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or personal-knowledge-base-type projects.""" start="00:13:30.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""One of which is logseq, so that's an online open source""" start="00:13:32.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Zettelkasten which supports both Markdown""" start="00:13:36.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and also Org mode as a first-class format.""" start="00:13:39.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Then of course we have Org Roam, which provides""" start="00:13:41.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a Zettelkasten built directly on top of Org within Emacs.""" start="00:13:45.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Both of these are seen considerably interesting""" start="00:13:48.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""over the past year.""" start="00:13:51.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Moving on to visuals, minad has produced""" start="00:13:52.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""another lovely minad package in the form of org-modern""" start="00:13:56.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which just spruces up the visuals of all documents""" start="00:14:00.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and seems to have been quite well received recently""" start="00:14:04.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""since its release.""" start="00:14:09.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""Building on top of the citations from earlier,""" start="00:14:10.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Andras Simonyi has produced""" start="00:14:13.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the wonderful citeproc-org library,""" start="00:14:14.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which, if you're not familiar,""" start="00:14:16.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""allows the capabilities of the citation style language""" start="00:14:20.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which has now become something""" start="00:14:25.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is quite widely supported""" start="00:14:26.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to be used for Org citation exports.""" start="00:14:28.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""This means that you've got access to I think at this point""" start="00:14:31.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is it thousands or tens of thousands""" start="00:14:33.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of different bibliography and citation formats""" start="00:14:35.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is obviously a huge boon to org citations.""" start="00:14:39.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Lastly, just to be slightly critical,""" start="00:14:42.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I'm actually going to mention the Neovim Org mode project,""" start="00:14:46.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""because I think this really shows the interest""" start="00:14:49.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in Org as the format, beyond just Emacs.""" start="00:14:52.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I think I haven't gone into it much here,""" start="00:14:55.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but there's been quite a lot of development""" start="00:14:58.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""with external tools making use of the Org format.""" start="00:15:00.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Clearly, we've done quite a few things right,""" start="00:15:04.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and so I think it's interesting to see the interest""" start="00:15:07.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that exists outside of Emacs,""" start="00:15:11.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""even without all the lovely tooling we've built,""" start="00:15:13.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""just out of appreciation of the formatting, its potential.""" start="00:15:15.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Speaking of the format, though,""" start="00:15:18.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we've also seen three new parsers on the scene this year.""" start="00:15:21.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""We've got one in Julia, Haskell""" start="00:15:24.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and another one for Tree sitter.""" start="00:15:27.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""The last one, I think, is currently the least capable,""" start="00:15:28.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but also potentially the most interesting""" start="00:15:31.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in terms of what possibilities it allows for.""" start="00:15:32.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Okay. So that's a quick speed run through""" start="00:15:36.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""some of the developments over the past year.""" start="00:15:42.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""What's coming next? So there's been""" start="00:15:44.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""quite a lot of work done with the Org syntax document.""" start="00:15:47.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""In fact, I've completely written it,""" start="00:15:51.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and we've now taken it up to spec""" start="00:15:54.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to actually accurately describe the way""" start="00:15:57.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that the Org format is, as of Org 9.6.""" start="00:15:59.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now, I think this is quite an important document""" start="00:16:03.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""for the growth in parsing tools""" start="00:16:08.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to help actually ensure""" start="00:16:09.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that the way that external tools process Org""" start="00:16:11.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is actually in sync with the way that Org mode does.""" start="00:16:16.440" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I think it's worth doing everything we can, really,""" start="00:16:20.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to avoid the sort of implementation drift""" start="00:16:22.560" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that we've seen with Markdown.""" start="00:16:24.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I don't want anything near that.""" start="00:16:27.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""This is also quite good for the Org format itself because,""" start="00:16:29.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in the process of going through this sort of effort,""" start="00:16:32.487" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""it brings attention to irregularities in the syntax""" start="00:16:34.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which you might want to resolve, and as well as""" start="00:16:38.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""helping the robustness of org mode itself.""" start="00:16:41.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So ultimately, this is to everybody's benefit, really.""" start="00:16:43.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It's also my personal hope that this might actually""" start="00:16:46.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""get to the point where we consider submitting this""" start="00:16:51.800" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as a text format to the Internet Engineering Task Force""" start="00:16:54.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""as a new text format. So that would be quite nice.""" start="00:16:59.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""The Org project itself has a layer on top""" start="00:17:06.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of the mailing list called Woof developed by Bastien,""" start="00:17:09.640" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and that's about to have another major release.""" start="00:17:13.680" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So what this is going to do is improve the ease of which""" start="00:17:16.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we can actually monitor what's going on""" start="00:17:21.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""with the mailing list. So this is when people have patches,""" start="00:17:23.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""bug reports, or other types of things""" start="00:17:27.080" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""raised on the mailing list.""" start="00:17:29.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""It's a nice way to collect the status of those""" start="00:17:30.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and put them all in one place.""" start="00:17:34.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So improvements to this improve the ease of which""" start="00:17:35.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""the Org mode project can be managed,""" start="00:17:37.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is always quite nice to see.""" start="00:17:40.400" video="mainVideo-orgyear" id="subtitle"]]
+[[!template new="1" text="""There's also been--jumping back to the export""" start="00:17:41.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which is mentioned right at the start of this presentation--""" start="00:17:46.320" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""we've got the introduction of engraved faces""" start="00:17:48.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to LaTeX export. Now what's quite interesting about this""" start="00:17:51.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""is that it's actually used as Emacs' native font lock""" start="00:17:54.480" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and allows for processing that in a generalized way""" start="00:17:57.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""to different output formats. So at the moment,""" start="00:18:01.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""this is just integrated with ox-latex,""" start="00:18:03.840" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""but it contains the functionality needed for HTML and ASCII,""" start="00:18:06.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and it could also be extended to other formats like ODT.""" start="00:18:11.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""So we could potentially have full syntax highlighting""" start="00:18:13.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""based on Emacs exported to, well,""" start="00:18:18.280" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""really all of the Org mode backends,""" start="00:18:20.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""except, I suppose, the plain text ones like Markdown.""" start="00:18:24.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And I think from both the capabilities perspective--""" start="00:18:27.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""because I think, really, font lock in Emacs""" start="00:18:29.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""from Emacs major modes""" start="00:18:33.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""tends to blow basically everything else vaguely used""" start="00:18:34.200" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""out of the water, whether it be listings, minted""" start="00:18:37.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""or other efforts--and also from a consistency point of view,""" start="00:18:39.240" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""this could be quite a nice development.""" start="00:18:45.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Alrighty. Now this talk is &quot;This Year in Org,&quot;""" start="00:18:49.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and I think you all may have guessed""" start="00:18:51.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""this is very much tied into my work with This Month in Org""" start="00:18:52.600" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""which started, I think, a bit over a year ago.""" start="00:18:57.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""And so, as you're all avid readers,""" start="00:19:00.120" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""I'm sure you've noticed""" start="00:19:04.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""that there haven't been as many posts as of late.""" start="00:19:05.920" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Now this isn't because my interest in This Month in Org""" start="00:19:08.520" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""has been diminishing. Simply, it's the consequence""" start="00:19:11.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of an evaporation of my free time.""" start="00:19:15.880" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""However, This Month in Org is still going to stick around.""" start="00:19:18.760" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""The only change really is that the title is going to be--""" start="00:19:22.360" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""probably continue to be""" start="00:19:26.160" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""a bit more aspirational than descriptive""" start="00:19:28.000" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""in the near future. We'll see how this goes.""" start="00:19:30.040" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""Well, thanks for listening to this overview""" start="00:19:32.960" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""of the state of Org at the moment,""" start="00:19:36.720" video="mainVideo-orgyear" id="subtitle"]]
+[[!template text="""and hopefully, I'll see you next year.""" start="00:19:38.600" video="mainVideo-orgyear" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20orgyear%3A%20This%20Year%20in%20Org)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/orgyear-before.md b/2022/info/orgyear-before.md
new file mode 100644
index 00000000..2c6ed2bc
--- /dev/null
+++ b/2022/info/orgyear-before.md
@@ -0,0 +1,29 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><video controls preload="none" id="orgyear-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="orgyear-mainVideo" data="""
+00:00.000 Introduction
+00:32.080 Project housekeeping
+01:08.800 Continuous integration
+02:04.680 Funding contributors
+03:32.560 New features
+03:58.640 An assortment of export improvements
+04:36.520 A collection of babel improvements
+05:12.280 A multitude of general org-mode improvements
+06:04.160 Citations
+07:31.600 Quality of life improvements
+07:48.320 Org fold
+09:02.480 Org element cache
+10:07.360 Org persist
+11:02.720 More careful resource downloading
+11:40.200 Bug fixes
+12:15.800 Asynchronous session evaluation
+12:42.800 Nicer tangle mode syntax
+13:18.280 A flourishing ecosystem
+13:52.600 Org-modern
+14:10.120 citeproc-org
+15:44.040 Continuing work on the Org format
+17:06.320 Mailing list management
+17:41.920 Further engraving
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main.webm">Download --main.webm (28MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-orgyear--this-year-in-org--timothy--main.pdf">Download --main.pdf</a></li><li><a href="https://toobnix.org/w/qed3SGg4ZMo8fLuzwXoeNP">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/orgyear-nav.md b/2022/info/orgyear-nav.md
new file mode 100644
index 00000000..7419bb9f
--- /dev/null
+++ b/2022/info/orgyear-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/survey">Results of the 2022 Emacs Survey</a>
+Next by track: <a href="/2022/talks/rolodex">Build a Zettelkasten with the Hyperbole Rolodex</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/python-after.md b/2022/info/python-after.md
new file mode 100644
index 00000000..b388d9d2
--- /dev/null
+++ b/2022/info/python-after.md
@@ -0,0 +1,298 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="python-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hi! My name is Eduardo Ochs. I'm the author""" start="00:00:00.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of an Emacs package called eev...""" start="00:00:04.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and eev is about taking executable notes""" start="00:00:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of everything that you do, and this""" start="00:00:10.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""presentation is about how I use this...""" start="00:00:13.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""how I finally found a way to take""" start="00:00:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""executable notes of what the python docs""" start="00:00:18.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""say.""" start="00:00:22.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Let me explain that in another way. I've""" start="00:00:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""try to Learn Python many times, but""" start="00:00:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""hm, my brain is wired in a weird way, so""" start="00:00:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it didn't work... and finally a few""" start="00:00:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""months ago I found a way of studying""" start="00:00:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Python that finally clicked for me.""" start="00:00:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""The idea is that... well, it's here in""" start="00:00:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the title - is a way to create short""" start="00:00:47.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""hyperlinks to the""" start="00:00:50.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""documentation of python.""" start="00:00:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Here's an example.""" start="00:00:54.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""This file contains some some chunks""" start="00:00:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of code from the Python tutorial and""" start="00:01:00.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""some links to the places in which""" start="00:01:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I found these chunks of code.""" start="00:01:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for example, if I run this link here""" start="00:01:07.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it opens a certain page of the Python""" start="00:01:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""tutorial in my browser - note that it""" start="00:01:14.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""opens the local copy of the""" start="00:01:18.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""documentation -""" start="00:01:19.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and if I""" start="00:01:22.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""run this link here it opens the source""" start="00:01:25.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""in .rst""" start="00:01:29.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of the same page. So the first link opens""" start="00:01:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the HTML and this one opens the""" start="00:01:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""RST. This is useful because in the""" start="00:01:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""beginning""" start="00:01:39.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I was copying these chunks of code in""" start="00:01:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the obvious way - I would simply""" start="00:01:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""visit the the documentation in HTML and""" start="00:01:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I would mark""" start="00:01:50.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""a chunk... a snippet of code here and I""" start="00:01:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""would copy it to my notes.""" start="00:01:54.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""And then after a while I""" start="00:01:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""realized that it was much easier to""" start="00:02:01.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""simply go to the RST sources and to copy""" start="00:02:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the chunks of code from there... and""" start="00:02:07.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""note that these links look quite similar.""" start="00:02:10.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""There's one difference here, that is""" start="00:02:14.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this `r` that is prepended to the name""" start="00:02:17.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of the function... the `r` means""" start="00:02:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""&quot;open the RST&quot;...""" start="00:02:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and if I use the suffix `w` it means""" start="00:02:26.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""use the documentation on the web instead""" start="00:02:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of using the local copy.""" start="00:02:32.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So this one""" start="00:02:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""opens a local copy""" start="00:02:36.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and this one""" start="00:02:38.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""takes a while""" start="00:02:42.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and opens the""" start="00:02:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the page of the documentation in the""" start="00:02:49.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""site of Python blah blah...""" start="00:02:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and this thing here is""" start="00:02:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""executable in the usual eev sense, that""" start="00:02:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""we ca... if we type f8 several times here""" start="00:03:02.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the f8s on the lines that start""" start="00:03:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""with red stars create a target buffer""" start="00:03:08.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here... and in this case it creates a""" start="00:03:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""target buffer running Python, and if I""" start="00:03:14.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""type f8 on these other lines these are""" start="00:03:17.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the lines are sent""" start="00:03:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to that REPL.""" start="00:03:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""But anyway, let me go back.""" start="00:03:25.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Most of the things that I'm going to""" start="00:03:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""present here are in the tutorial of this...""" start="00:03:32.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""package...""" start="00:03:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""we can go to the source code""" start="00:03:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here in the eev directory - it's a file""" start="00:03:41.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""called eev-rstdoc.el but the best""" start="00:03:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""docs are in the tutorial, here...""" start="00:03:50.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and the tutorial also has some""" start="00:03:53.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""executable""" start="00:03:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""chunks... some snippets of python""" start="00:03:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""code that are executable, but they""" start="00:04:02.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""don't have those nice colors... so""" start="00:04:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""apologies for that.""" start="00:04:07.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""We need to run this thing here to make""" start="00:04:11.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""everything work.""" start="00:04:13.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""This thing will define some functions""" start="00:04:15.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""with funny names that I will""" start="00:04:17.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""explain later.""" start="00:04:19.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Let me explain something new.""" start="00:04:26.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""let's compare all these""" start="00:04:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""links here. They take this argument""" start="00:04:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here and they expand the the argument in""" start="00:04:38.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""a certain way. For example this string is""" start="00:04:41.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""expanded to this long URL here... note that""" start="00:04:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it got a prefix here,""" start="00:04:49.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that's quite long... it got the .html here,""" start="00:04:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and then the hash and the anchor here...""" start="00:04:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and each one of the functions in the""" start="00:04:59.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""pydoc family expands this""" start="00:05:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""argument in a different way.""" start="00:05:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""The one that that opens the doc in the""" start="00:05:09.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""web uses another prefix -""" start="00:05:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this one - and the one that opens the rst""" start="00:05:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""file ignores the part after the hash""" start="00:05:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for technical reasons... I was never""" start="00:05:24.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""able to to find a good way to convert""" start="00:05:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this hash into a string to search for,""" start="00:05:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so to make something that goes to""" start="00:05:33.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the right section in the link to the rst""" start="00:05:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""doc I have to convert by hand, and by""" start="00:05:38.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""trial and error, this thing here into a""" start="00:05:42.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""pointer to that section, like""" start="00:05:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this one...""" start="00:05:48.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""in which the &quot;_numeric-types:&quot;""" start="00:05:50.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""is here.""" start="00:05:55.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So all these links here are based on""" start="00:05:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""expansion, and this is easy to""" start="00:06:02.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""understand...""" start="00:06:04.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""but suppose that I want to""" start="00:06:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""create a link like this, or suppose that""" start="00:06:08.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I'm browsing the docs here""" start="00:06:11.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and I just I follow some some links...""" start="00:06:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""let me do something random here...""" start="00:06:21.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""suppose that I decide that this""" start="00:06:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""section is very interesting. How can I""" start="00:06:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""create a link to that? I can""" start="00:06:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""use this pilcrow symbol and the""" start="00:06:39.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""&quot;Copy link address&quot;,""" start="00:06:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and copy the link to""" start="00:06:45.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""my notes...""" start="00:06:49.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and then the Python family...""" start="00:06:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""well, we saw the the functions in the""" start="00:06:55.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Python family have a certain way - have""" start="00:06:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""several ways of expanding these""" start="00:07:00.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""short arguments... and they also have a""" start="00:07:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""certain way of""" start="00:07:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""shortening URLs like this one. If I type""" start="00:07:07.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""`M-x pdk` the message is this one.""" start="00:07:11.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""`pdk` is a mnemonic for""" start="00:07:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""&quot;Python doc kill&quot;, and this""" start="00:07:17.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""&quot;kill&quot; means &quot;copy to the kill ring&quot;""" start="00:07:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so if I type `M-x pdk` here it""" start="00:07:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""considers that this thing is a link""" start="00:07:27.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to the python Docs, and it""" start="00:07:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""shortens this link in a certain way, and""" start="00:07:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it kills a short link.""" start="00:07:36.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I can insert the short link with C-y""" start="00:07:42.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""(yank)""" start="00:07:45.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and then I can test this link to be sure""" start="00:07:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that it points to where I want, and""" start="00:07:49.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""then I can delete this thing, and ta-da,""" start="00:07:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""now I have a short link, and of course I""" start="00:07:55.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""can modify this link by adding a suffix""" start="00:07:57.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here...""" start="00:08:00.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and in this case here""" start="00:08:02.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I will have to change the identifier""" start="00:08:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to something else...""" start="00:08:09.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""but I'm not going to do that now.""" start="00:08:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""This module of eev comes with three""" start="00:08:18.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""families predefined. One is a family that""" start="00:08:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""points to the the documentation of""" start="00:08:24.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Python itself, another one points the""" start="00:08:26.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""documentation of SymPy, that is a program""" start="00:08:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for symbolic computation, like for doing""" start="00:08:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""mathematics equations...""" start="00:08:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and the other one points to the""" start="00:08:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""documentation of MatPlotLib.""" start="00:08:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""How do these families work?""" start="00:08:43.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Each family has to be defined in two""" start="00:08:47.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""parts.""" start="00:08:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Remember that""" start="00:08:53.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""eev has lots of functions""" start="00:08:55.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""like this one... this one""" start="00:08:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""is the most basic, and it is explained""" start="00:09:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here, in this section of the main""" start="00:09:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""tutorial. This section explains that""" start="00:09:08.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""a sexp like this one produces lots of""" start="00:09:13.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""functions - produces a family of""" start="00:09:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""functions - and it does that by producing""" start="00:09:19.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""a certain chunk of code and then""" start="00:09:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""executing this chunk of code... and if we""" start="00:09:25.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""add a certain prefix here... `find-` and we""" start="00:09:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""execute this we can... instead of executing""" start="00:09:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that chunk of code we can see what is""" start="00:09:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that chunk of code. In the case of `code-c-d`""" start="00:09:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it is this. It is a `setq`, several""" start="00:09:39.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""`defun`s, and some comments here, with""" start="00:09:43.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""links to the documentation.""" start="00:09:47.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""In the case of rstdoc it's the same.""" start="00:09:49.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""We have this function here that defines""" start="00:09:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the function in the python family...""" start="00:09:54.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and we can run this to understand what""" start="00:09:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this `code-rstdoc` does.""" start="00:09:59.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""It creates this temporary buffer here...""" start="00:10:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""with lots of `defun`s, a `code-c-d` here,""" start="00:10:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and lots of comments here... and the""" start="00:10:09.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""comments include some tests. For example""" start="00:10:10.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""we can use these functions here to test""" start="00:10:13.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""how the expansion works.""" start="00:10:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""And""" start="00:10:21.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""note that in this buffer here we don't""" start="00:10:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""have the paths that that this family""" start="00:10:26.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""uses. We don't have for example""" start="00:10:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the URL that points to the site of""" start="00:10:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Python, to the directory that contains""" start="00:10:33.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the reference manual, or whatever... all""" start="00:10:36.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""these things are in another part of the""" start="00:10:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""definition of that family - that is a""" start="00:10:42.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""variable.""" start="00:10:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""If we execute this we go to the""" start="00:10:45.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""source code of eev-rstdoc,""" start="00:10:48.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to the parts in which""" start="00:10:50.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this variable is defined...""" start="00:10:54.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and""" start="00:10:57.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for each family we have a variable like""" start="00:10:59.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this,""" start="00:11:01.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""whose value is a property""" start="00:11:02.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""list with several fields...""" start="00:11:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""these first fields are very easy to""" start="00:11:07.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""understand - they are used in the""" start="00:11:09.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""expansion... this one too. And these""" start="00:11:10.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""two fields are used in the shrinking -""" start="00:11:16.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""in the shortening - and""" start="00:11:19.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this field here""" start="00:11:21.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""tells what is the name of the""" start="00:11:25.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""killing function""" start="00:11:28.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so the fields of this thing here are""" start="00:11:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""used""" start="00:11:33.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to generate...""" start="00:11:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""some fields are used to generate the""" start="00:11:36.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""code that appears here, and some fields""" start="00:11:39.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""are simply""" start="00:11:41.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""read by functions like this one, that""" start="00:11:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""consults the variable.""" start="00:11:47.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Now the natural question is: how can we""" start="00:11:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""define new families? Or: how can we change""" start="00:11:53.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""a family like this one to point to""" start="00:11:57.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""another version of Python?""" start="00:11:59.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""There are some template-based functions""" start="00:12:03.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for doing that. They are explained in""" start="00:12:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this section of the tutorial...""" start="00:12:09.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""where is that?...""" start="00:12:10.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""oh God, it's far away...""" start="00:12:14.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here.""" start="00:12:17.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Suppose that we have a package foo, that""" start="00:12:20.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""we want to create a family that points""" start="00:12:23.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to the docs""" start="00:12:25.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of that package foo... so, we""" start="00:12:27.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""can execute this thing here, and it""" start="00:12:31.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""generates this""" start="00:12:32.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this thing from a template.""" start="00:12:34.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""If we just want to modify a current""" start="00:12:37.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""definition we can run something like""" start="00:12:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this - note that the family `:py`""" start="00:12:42.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""already exists, and instead of using""" start="00:12:44.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""placeholders in some of these""" start="00:12:47.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""URLs it will use the current values of""" start="00:12:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the fields...""" start="00:12:53.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so we can also use this modify""" start="00:12:55.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""existing families.""" start="00:12:59.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Well these are the technical details.""" start="00:13:01.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Now the natural question is: why do I""" start="00:13:05.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""want this? This doesn't""" start="00:13:08.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""any sense to me! Why should I""" start="00:13:12.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""try this?""" start="00:13:14.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""And the best answer: is for most people""" start="00:13:15.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this way of using""" start="00:13:18.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""executable notes do not make any sense""" start="00:13:21.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""at all at first sight...""" start="00:13:24.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so what I'm trying to do is: I'm trying""" start="00:13:27.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to write to these tutorials with""" start="00:13:30.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""many examples that are very easy to run,""" start="00:13:33.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and that examine data structures,""" start="00:13:35.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and functions, and test things,""" start="00:13:38.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and so on... so my main argument""" start="00:13:40.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""for convincing people to""" start="00:13:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""test this is: this is trivial to test -""" start="00:13:48.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""simply install eev and run this thing""" start="00:13:52.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""here, and run the examples, and probably""" start="00:13:54.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""you're going to find that this""" start="00:13:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""tutorial is fun to follow.""" start="00:13:58.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So that's it! =)""" start="00:14:01.000" video="mainVideo-python" id="subtitle"]]
+
+
+
+Captioner: eduardo
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20python%3A%20Short%20hyperlinks%20to%20Python%20docs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/python-before.md b/2022/info/python-before.md
new file mode 100644
index 00000000..b666a3b6
--- /dev/null
+++ b/2022/info/python-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="python">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect stroke-width="3" x="705" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 15-min talk followed by IRC Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">#emacsconf-dev</a>)
+Etherpad: <https://pad.emacsconf.org/2022-python>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+<div class="vid"><video controls preload="none" id="python-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.webm">Download --main.webm (48MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/rK5n3EhFisCJPQsCueZdmn">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/python-nav.md b/2022/info/python-nav.md
new file mode 100644
index 00000000..6dd8f920
--- /dev/null
+++ b/2022/info/python-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/fanfare">Fanfare for the Common Emacs User</a>
+Next by track: <a href="/2022/talks/sun-close">Sunday closing remarks</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/rde-after.md b/2022/info/rde-after.md
new file mode 100644
index 00000000..c3d6852f
--- /dev/null
+++ b/2022/info/rde-after.md
@@ -0,0 +1,391 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="rde-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello and welcome everyone at EmacsConf 2022.""" start="00:00:00.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I'm Andrew Tropin, and today""" start="00:00:11.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""we will talk about my Emacs setup.""" start="00:00:13.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I will tell you the story behind it.""" start="00:00:16.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We will discuss what rde and rde Emacs are,""" start="00:00:19.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and we'll make a small Emacs configuration.""" start="00:00:23.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""My original motivation was to have""" start="00:00:28.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a ready for work development environment""" start="00:00:30.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which is reliable and guaranteed to work""" start="00:00:34.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""every time I need it,""" start="00:00:36.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""preferably performant and consistent.""" start="00:00:37.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I say development environment,""" start="00:00:42.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but it actually applies to""" start="00:00:44.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""many other working environment,""" start="00:00:45.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""especially text-heavy.""" start="00:00:47.600" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""An easy and obvious solution is to""" start="00:00:52.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""pick one of existing configuration frameworks""" start="00:00:54.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""like Spacemacs, Doom Emacs, Prelude,""" start="00:00:57.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or something else,""" start="00:01:00.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and to get a pre-configured Emacs""" start="00:01:02.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""in a minute with all bells and whistles.""" start="00:01:05.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But the problem is: only Emacs.""" start="00:01:09.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""In reality, your working environment consists""" start="00:01:12.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""not only from elisp packages,""" start="00:01:16.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but also from system packages""" start="00:01:18.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and their configurations, project libraries,""" start="00:01:21.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""compilers, building tools, etc.,""" start="00:01:23.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and thus you already have at least""" start="00:01:27.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""three, or more likely, five things""" start="00:01:31.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""for managing your environment:""" start="00:01:34.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""configuration, Emacs configuration framework,""" start="00:01:37.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Emacs package manager, system package manager,""" start="00:01:39.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""system/dot files configuration manager,""" start="00:01:42.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""project/language package manager""" start="00:01:46.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and maybe something else.""" start="00:01:49.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Even having our Emacs configuration""" start="00:01:51.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and package manager covered by framework""" start="00:01:56.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""we still have a lot of things""" start="00:01:59.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which we have to interact with,""" start="00:02:02.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""keep in sync, and more importantly,""" start="00:02:04.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""each of them can break.""" start="00:02:08.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But by &quot;works every time,&quot; I mean""" start="00:02:12.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""even if I updated my system packages,""" start="00:02:17.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""configurations, I migrated to a different machine,""" start="00:02:19.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""someone on my team updated project dependencies,""" start="00:02:23.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can get back to work in a matter of seconds,""" start="00:02:29.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or maybe in some cases, minutes.""" start="00:02:31.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""If I have multiple tools""" start="00:02:39.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""for managing my environment""" start="00:02:40.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and even one of them is broken,""" start="00:02:43.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the whole setup is broken.""" start="00:02:45.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Also, if one of them doesn't support""" start="00:02:48.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""deterministic rollback,""" start="00:02:51.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can't guarantee the reliability""" start="00:02:53.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""of my working environment.""" start="00:02:58.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can't be sure that I will be able to""" start="00:02:59.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""rescue or revive it.""" start="00:03:01.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""The less points of failure we have,""" start="00:03:02.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the easier to stay sane.""" start="00:03:06.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Imagine some late breakage notice""" start="00:03:09.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""when you did update a few hours or days ago""" start="00:03:13.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and found it later, and you have""" start="00:03:17.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a few different tools involved.""" start="00:03:20.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It will be really hard to find the cause""" start="00:03:25.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and to make everything work again.""" start="00:03:28.280" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Is it possible to have one tool""" start="00:03:34.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to cover all the needs I described above?""" start="00:03:37.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Yes, almost. With this tool,""" start="00:03:44.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you can get a reliable setup.""" start="00:03:48.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Now, I talk about functional package managers.""" start="00:03:50.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Functional package managers allow us to""" start="00:03:57.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""manage systems, users, Emacs, project/""" start="00:04:00.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""language packages, and their configurations.""" start="00:04:03.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But more importantly, it allows to do it""" start="00:04:07.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""in a declarative and reproducible manner.""" start="00:04:10.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""That means you just define what you need,""" start="00:04:13.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and those tools build it for you.""" start="00:04:16.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""No matter what was before, you get what you asked for.""" start="00:04:19.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It doesn't matter what time of day,""" start="00:04:24.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""what you did before, what other packages""" start="00:04:26.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you have installed previously.""" start="00:04:29.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You just ask for something, and you get it.""" start="00:04:31.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Two years ago, I did a talk at EmacsConf 2020""" start="00:04:34.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""where I demonstrated a prototype of""" start="00:04:41.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Emacs configuration managed by Nix.""" start="00:04:43.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Originally, I wanted to base my work on""" start="00:04:47.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""an already existing Emacs configuration framework.""" start="00:04:50.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But later, I decided that it will be easier""" start="00:04:56.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and a little more flexible""" start="00:05:01.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to start from ground up.""" start="00:05:02.440" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""After the first prototype in Nix,""" start="00:05:04.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I decided to switch to Guix. To make it short,""" start="00:05:06.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Guix is another functional package manager,""" start="00:05:12.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but more freedom- and reproducibility-oriented,""" start="00:05:14.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and written in only one language (Guile Scheme)""" start="00:05:21.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""instead of few custom-made Nix DSL, Bash, and C++.""" start="00:05:24.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""So now I can write Lisp code, while this code""" start="00:05:29.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""writes another Lisp code. Very neat indeed.""" start="00:05:34.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Unfortunately, at the moment, there was no tool""" start="00:05:37.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to manage user configurations,""" start="00:05:42.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""also known as dotfiles, with Guix.""" start="00:05:45.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""So I wrote one. And now it's a part of GNU Guix""" start="00:05:48.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and called Guix Home.""" start="00:05:52.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""What do we get from this one tool?""" start="00:05:54.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We can use one language to describe the whole system,""" start="00:05:58.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the home environment, the project environment,""" start="00:06:05.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and everything else.""" start="00:06:09.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We don't need to worry about""" start="00:06:10.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to keep different tools in sync""" start="00:06:13.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and to integrate them between each other.""" start="00:06:17.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Also, using one language to describe""" start="00:06:19.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the whole configuration makes it possible""" start="00:06:23.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to share values between different parts of the system.""" start="00:06:25.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""For example, color scheme, fonts, and much more.""" start="00:06:28.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""To sum up the first part of the talk:""" start="00:06:32.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I want a working environment which is ready for work,""" start="00:06:39.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""configured in minutes to almost what I want.""" start="00:06:43.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""That means it should have some batteries included.""" start="00:06:47.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It should be reliable.""" start="00:06:50.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I want to get back to work in seconds""" start="00:06:52.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""even if I broke something""" start="00:06:54.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or someone else broke something.""" start="00:06:56.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""For example, using rollbacks.""" start="00:06:58.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It would be nice if it will be performant.""" start="00:07:03.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It's a little subjective thing,""" start="00:07:07.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but it's nice when things are snappy.""" start="00:07:08.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And it's cool when things are consistent.""" start="00:07:12.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Different interfaces have""" start="00:07:16.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the same way of interactions with them.""" start="00:07:17.800" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Let's get to the next part,""" start="00:07:20.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and let's discuss what rde is.""" start="00:07:25.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Originally it was my dotfiles repo,""" start="00:07:29.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but it grew into something bigger.""" start="00:07:33.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Now, it's a set of tools on top of""" start="00:07:35.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""GNU Guix, Guix System, and Guix Home.""" start="00:07:39.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can treat it as a GNU/Linux distribution,""" start="00:07:41.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""system and home environment manager""" start="00:07:45.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or configuration framework,""" start="00:07:48.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""project environment manager""" start="00:07:50.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""(like virtualenv, but on steroids),""" start="00:07:52.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and Emacs distribution.""" start="00:07:55.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Usually, you just pick a few features,""" start="00:07:58.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""parameterize them and ask the tool""" start="00:08:02.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to create an operating system for you,""" start="00:08:05.655" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a home environment, project environment,""" start="00:08:08.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or Emacs configuration.""" start="00:08:10.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""That's it. That's simple.""" start="00:08:11.560" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""And what rde Emacs is and how it tastes...""" start="00:08:15.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It's like an ice cream, vanilla-flavored.""" start="00:08:22.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""No fancy macros for configuration, just plain Elisp.""" start="00:08:26.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can find in almost every""" start="00:08:30.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""personal Emacs configuration,""" start="00:08:34.955" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""built-in or vanilla-flavored packages""" start="00:08:36.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""are in priority over external""" start="00:08:42.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or very fancy packages.""" start="00:08:45.589" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""There is practical reason for this.""" start="00:08:46.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Maybe sometimes you don't get the things""" start="00:08:52.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you're used to in other text editors,""" start="00:08:55.455" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or maybe even in other Emacs frameworks,""" start="00:08:57.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but we want to keep the final result consistent,""" start="00:09:01.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""so you can apply the same interaction patterns""" start="00:09:05.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""in different situations and extend your expectations""" start="00:09:08.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""from one tool to another,""" start="00:09:13.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""from one package to another.""" start="00:09:15.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""For example, we encourage people""" start="00:09:16.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to use the minibuffer completion""" start="00:09:19.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""with orderless and vertico for many tasks:""" start="00:09:22.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""code navigation, file navigation,""" start="00:09:26.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""looking through your emails,""" start="00:09:30.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or just for jumping around.""" start="00:09:32.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's see.""" start="00:09:35.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""First, create a new Emacs instance""" start="00:09:36.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and open a repository with my configuration.""" start="00:09:39.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can see the source code.""" start="00:09:45.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's open another file which contains""" start="00:09:54.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Emacs-related features.""" start="00:09:58.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can see I use imenu,""" start="00:09:59.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and I can filter the list using minibuffer.""" start="00:10:02.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Now let's open the Magit interface,""" start="00:10:08.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now I want to navigate through""" start="00:10:16.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""this long list of things here.""" start="00:10:18.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Some of them staged. Some of them are recent commits.""" start="00:10:22.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Some of them are untracked at all.""" start="00:10:25.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can open imenu: the same interface,""" start="00:10:28.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but for now, I can navigate around""" start="00:10:31.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the Magit sections and files which are present here.""" start="00:10:34.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""If I want to navigate project files,""" start="00:10:41.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I use almost the same interface.""" start="00:10:45.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can use the same patterns to filter out""" start="00:10:47.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""files in my project or items in magit-imenu.""" start="00:10:51.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Very similar and very consistent.""" start="00:11:00.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Also, we try to have hotkeys consistent""" start="00:11:07.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""across different packages and parts of Emacs.""" start="00:11:11.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We usually don't provide alternatives on what to use.""" start="00:11:16.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We provide only one package for one task.""" start="00:11:21.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But of course this is""" start="00:11:25.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a configuration framework after all.""" start="00:11:28.155" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can declare your own features,""" start="00:11:29.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""implement them yourself,""" start="00:11:32.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and use whatever you want.""" start="00:11:35.789" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Let's get to some real-world examples.""" start="00:11:37.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It's always easy to show""" start="00:11:45.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""how things get appended,""" start="00:11:48.222" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""how things get installed,""" start="00:11:50.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but usually people don't show""" start="00:11:51.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""how they remove things,""" start="00:11:55.289" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""because it's usually painful.""" start="00:11:56.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But in our case, it's not.""" start="00:11:58.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's take my configuration,""" start="00:12:02.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""let's find feature-emacs-vertico.""" start="00:12:10.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Vertico's just used to show""" start="00:12:12.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""this fancy completion UI""" start="00:12:19.822" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""that you can see here.""" start="00:12:25.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""If I disable this feature""" start="00:12:27.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and rebuild my home environment,""" start="00:12:30.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Emacs will lack this feature.""" start="00:12:43.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It may take some time. It was quite fast,""" start="00:12:46.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I didn't expect it.""" start="00:12:55.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I have Emacs. As you can see here,""" start="00:13:00.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""now it doesn't have this completion UI anymore.""" start="00:13:02.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I just commented it out,""" start="00:13:06.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""rebuilt my home environment,""" start="00:13:09.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and this thing disappeared from Emacs.""" start="00:13:13.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But what if I broke something?""" start="00:13:15.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I just call guix home roll-back command""" start="00:13:19.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and launch Emacs again, and you see""" start="00:13:28.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""now we have vertico back.""" start="00:13:31.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Very good.""" start="00:13:32.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Reliability is one of the most important qualities""" start="00:13:36.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""of working environment.""" start="00:13:41.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We can always get back to""" start="00:13:43.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the working state of our environment""" start="00:13:46.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and be sure that we do the things we want.""" start="00:13:48.440" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Now let's see another example.""" start="00:13:52.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Here I have a mastodon,""" start="00:13:57.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a post which contains a gemini link.""" start="00:13:59.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can click it, and you see it opens emacsclient,""" start="00:14:03.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""it renders this gemini capsule,""" start="00:14:11.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and we can read all the posts of this guy.""" start="00:14:14.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Very cool.""" start="00:14:17.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But what if I go back to my configuration,""" start="00:14:21.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""we'll find a feature related to elpher,""" start="00:14:26.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""the application which handles gemini links,""" start="00:14:32.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""we'll comment it out,""" start="00:14:36.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and we'll rebuild my home environment.""" start="00:14:38.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""What I expect here is that""" start="00:14:41.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""when I will be clicking the link,""" start="00:14:47.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""emacsclient won't pop up anymore.""" start="00:14:48.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Cool.""" start="00:15:02.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We rebuilt it and let's click the link.""" start="00:15:02.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Now you see, it just opens another tab""" start="00:15:06.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which doesn't do anything useful.""" start="00:15:08.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Cool.""" start="00:15:10.760" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Why it is important?""" start="00:15:14.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It is important because every time""" start="00:15:15.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you install something and you want to remove it,""" start="00:15:19.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""some parts depending on it can be broken.""" start="00:15:24.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And also important in the other way around.""" start="00:15:29.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Sometimes you want to install something,""" start="00:15:31.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and it requires a few steps.""" start="00:15:34.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""For example, if you want to have""" start="00:15:36.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a docker.el in your Emacs,""" start="00:15:40.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you need not only docker.el itself""" start="00:15:43.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and configuration for it,""" start="00:15:49.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you also need to add your user to the docker group.""" start="00:15:51.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But before it, you need to create this group,""" start="00:15:55.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and you also need to""" start="00:15:59.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""define a system service and run it.""" start="00:16:00.455" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Also you need to install docker package,""" start="00:16:02.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""docker-cli package, and containerd package.""" start="00:16:05.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can forget every of this small step,""" start="00:16:11.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but if it in your declarative configuration""" start="00:16:15.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""in one place, and you just ask""" start="00:16:20.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to enable this feature, each of those steps""" start="00:16:23.589" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""will be performed automatically.""" start="00:16:27.822" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""If you don't need docker anymore,""" start="00:16:30.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you just disable the feature,""" start="00:16:33.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and all the effect of all those steps""" start="00:16:34.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""will be removed from your system.""" start="00:16:38.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I won't be showing it because it probably will""" start="00:16:42.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""take more time for reconfiguring,""" start="00:16:46.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but you can experiment with it on your own.""" start="00:16:48.920" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""Let's do another interesting thing.""" start="00:16:54.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's construct a small""" start="00:17:00.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Emacs configuration from scratch.""" start="00:17:05.922" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Who's this?""" start="00:17:07.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I will open a file which contains only""" start="00:17:10.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""emacs-portable feature and feature-user-info.""" start="00:17:14.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Now I will build an environment,""" start="00:17:18.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and inside this environment,""" start="00:17:21.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I will launch a new Emacs instance.""" start="00:17:24.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""As you see, it's very different""" start="00:17:26.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""from what you saw previously.""" start="00:17:28.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And it's almost barebones.""" start="00:17:30.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It doesn't contain anything""" start="00:17:32.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""except user-mail-address""" start="00:17:39.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which is set to my mail address,""" start="00:17:41.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and user-full-name.""" start="00:17:45.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""How it works:""" start="00:17:46.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""In feature-user-info, I define a few values.""" start="00:17:50.760" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Those values are obtained by Emacs""" start="00:17:54.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""feature-emacs-portable""" start="00:18:01.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and set inside Emacs configuration.""" start="00:18:03.280" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""But let's enable a few more features.""" start="00:18:07.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I will do it in one go""" start="00:18:12.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""because we already saw how it works overall.""" start="00:18:15.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's build another Emacs with Emacs configuration.""" start="00:18:22.120" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""The interesting thing about this Emacs instance""" start="00:18:30.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""is that it doesn't contain anything""" start="00:18:39.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""that I have in my usual Emacs.""" start="00:18:44.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""For example, I don't have much here.""" start="00:18:46.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I don't have make installed, and so on.""" start="00:18:49.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""But we have feature-loader-portable package""" start="00:18:55.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which just requires a few configure packages.""" start="00:19:06.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's move it to a separate workspace.""" start="00:19:09.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""First of all, configure-rde-emacs-portable""" start="00:19:13.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which just sets a few variables.""" start="00:19:21.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""rde configure-keycast which just shows""" start="00:19:23.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""something on the modeline""" start="00:19:27.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which demonstrates the last hotkey pressed""" start="00:19:31.200" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and the command which was invoked.""" start="00:19:34.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We can enable which-key,""" start="00:19:40.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now when I type a prefix,""" start="00:19:41.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can see all the possible continuations""" start="00:19:45.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""for this prefix.""" start="00:19:48.600" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I can enable vertico,""" start="00:19:49.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and you can see, now we have nice completion UI.""" start="00:19:51.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We can enable completion-related improvements""" start="00:19:58.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now I have not only UI itself, but also""" start="00:20:03.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""some notes here near each command,""" start="00:20:07.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and ability to use regular expressions""" start="00:20:15.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""or some orderless matching.""" start="00:20:17.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""We can enable eshell,""" start="00:20:21.480" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now I have a hotkey for invoking Emacs shell.""" start="00:20:26.400" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I don't have hotkey for vterm yet,""" start="00:20:31.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but I can enable it,""" start="00:20:35.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now I have a terminal inside my Emacs.""" start="00:20:37.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""As you can see my usual shell is Zsh,""" start="00:20:40.800" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but here I have a plain bash.""" start="00:20:43.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's enable feature-git,""" start="00:20:46.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and now I will be able to open my project.""" start="00:20:52.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And inside this project,""" start="00:21:04.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""I will be able to open Magit""" start="00:21:11.489" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and navigate around using imenu.""" start="00:21:14.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's do few more things.""" start="00:21:19.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's enable Org Roam""" start="00:21:26.160" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""so I will be able to open my EmacsConf notes.""" start="00:21:29.640" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's enable configure-emacs.""" start="00:21:43.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""As you can see, the way it displayed updated.""" start="00:21:48.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Let's enable configure-appearance,""" start="00:21:53.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and you see the appearance of Emacs changed radically.""" start="00:21:59.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And also, let's change the faces.""" start="00:22:03.880" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And now you see almost my setup""" start="00:22:06.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""that you saw previously,""" start="00:22:13.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but we build it from small tiny pieces.""" start="00:22:14.800" video="mainVideo-rde" id="subtitle"]]
+[[!template new="1" text="""A little summary:""" start="00:22:19.000" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""rde is the one tool that you can use""" start="00:22:27.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""to manage the whole computing experience.""" start="00:22:32.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""It consists of composable components,""" start="00:22:34.440" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and actually, it provides""" start="00:22:38.080" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""a reliable configuration framework.""" start="00:22:41.720" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You always have a rollback.""" start="00:22:43.240" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You always can switch to a generation""" start="00:22:46.360" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""you used a week ago.""" start="00:22:49.320" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""And of course, it's reproducible and declarative""" start="00:22:50.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which is also very cool.""" start="00:22:57.520" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""rde Emacs is a part of rde""" start="00:22:58.680" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""but it can be used separately.""" start="00:23:05.789" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""You can think of it as an Emacs distribution""" start="00:23:06.920" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""which is vanilla-flavored, consistent,""" start="00:23:11.280" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""well-integrated, and self-contained.""" start="00:23:14.040" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""That's it for today.""" start="00:23:15.960" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Don't hesitate to contact me""" start="00:23:19.560" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""via email or any other way.""" start="00:23:22.055" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""Thank you everyone for your attention""" start="00:23:23.840" video="mainVideo-rde" id="subtitle"]]
+[[!template text="""and see you in a bit.""" start="00:23:28.155" video="mainVideo-rde" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20rde%3A%20rde%20Emacs%20introduction)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/rde-before.md b/2022/info/rde-before.md
new file mode 100644
index 00000000..c920f706
--- /dev/null
+++ b/2022/info/rde-before.md
@@ -0,0 +1,52 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Andrew Tropin will demonstrate how to use rde Emacs for reproducible configuration, including how to enable or remove features. Afterwards, he will handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="rde">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect stroke-width="3" x="94" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 24-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-rde>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T15:00:00Z" end="2022-12-04T15:25:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~10:00 AM - 10:25 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~9:00 AM - 9:25 AM CST (US/Central)<br />Sunday, Dec 4 2022, ~8:00 AM - 8:25 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~7:00 AM - 7:25 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~3:00 PM - 3:25 PM UTC <br />Sunday, Dec 4 2022, ~4:00 PM - 4:25 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~5:00 PM - 5:25 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~8:30 PM - 8:55 PM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~11:00 PM - 11:25 PM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~12:00 AM - 12:25 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="rde-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rde-mainVideo" data="""
+00:00.000 Introduction
+00:52.040 The challenge
+03:34.840 Functional package managers
+05:04.920 Guix Home
+07:20.360 rde
+08:15.520 Vanilla-flavoured
+11:37.440 Removing features
+13:52.520 Another example
+15:14.080 Multiple steps
+16:54.400 A small Emacs configuration
+18:07.480 Enabling features
+22:19.000 Summary
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.webm">Download --main.webm (278MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/iPos3hVhMrPsnyJskzSkY9">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="rde-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rde-qanda" data="""
+00:29.720 Do you use this to have multiple configs running side by side for live comparison?
+02:16.760 Are you using Guix System, or Guix on top of another distro? If System, any tips?
+03:25.560 One of the issues I've had managing Emacs packages with Guix is a conflict between the Guix package ethos (read-only) and the Emacs package ethos (hackable in real-time). Any suggestions to resolve this?
+05:40.800 What is next for rde?
+08:08.100 Do you use Emacs without this? If so, for what purposes, and how does it feel compared to rde?
+11:07.220 Are there any plans to push things from rde to guix's main channel?
+13:34.220 How difficult is it to add support for new Emacs packages to Guix?
+15:36.340 Do your reckon RDE is currently opinionated? Or is it a one size fits all framework?
+18:19.020 How to get into RDE? Is there already documentation/getting started guide?
+20:35.420 Can you mix RDE with custom emacs init file?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="rde-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.webm">Download --answers.webm (42MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.opus">Download --answers.opus (7.7MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/rde-nav.md b/2022/info/rde-nav.md
new file mode 100644
index 00000000..be6581c9
--- /dev/null
+++ b/2022/info/rde-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/rolodex">Build a Zettelkasten with the Hyperbole Rolodex</a>
+Next by track: <a href="/2022/talks/orgsuperlinks">Linking headings with org-super-links (poor-man's Zettelkasten)</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/realestate-after.md b/2022/info/realestate-after.md
new file mode 100644
index 00000000..be27e4fd
--- /dev/null
+++ b/2022/info/realestate-after.md
@@ -0,0 +1,593 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="realestate-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hey, I'm Gopar and this is the""" start="00:00:00.000" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Real Estate and Org Mode Table Formulas talk.""" start="00:00:05.454" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Not very creative, but it is what it is.""" start="00:00:07.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Now I just want to say that everything I talk about here""" start="00:00:09.880" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""is in the Org Mode in the Emacs manual.""" start="00:00:13.052" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I posted a link to the web version,""" start="00:00:15.903" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but it should be inside of Emacs as well.""" start="00:00:17.910" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""Now before I start, I want to showcase the end goal.""" start="00:00:20.480" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""That way you know if you guys want to""" start="00:00:25.097" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""actually see the talk or not.""" start="00:00:26.807" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So I always think that's pretty cool to see""" start="00:00:28.740" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""what you're actually going to build""" start="00:00:30.492" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""before you start building it.""" start="00:00:31.518" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Alright. So let me start off with the goal,""" start="00:00:32.680" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the end goal. Here we have a simple table formula""" start="00:00:34.286" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we have some constants, some values inside the list--""" start="00:00:38.763" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""inside the table, I'm sorry,""" start="00:00:42.614" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and some other stuff that we will get to,""" start="00:00:44.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but for now... I don't want to spoil too much.""" start="00:00:47.673" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I just want to give you a demo""" start="00:00:49.280" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""of how it actually works.""" start="00:00:50.328" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""We have a few values. Let me first go over the constants.""" start="00:00:51.800" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We have PMI, which stands for""" start="00:00:56.095" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""private mortgage insurance,""" start="00:00:57.582" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so it's insurance that you'll have to pay""" start="00:00:57.591" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""depending on how much money you put into the deal.""" start="00:01:00.537" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The property tax, which is self-explanatory,""" start="00:01:03.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the tax that you owe for owning the property,""" start="00:01:06.068" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then home insurance,""" start="00:01:09.317" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the interest rate at the loan that you get.""" start="00:01:11.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, here we have a few columns.""" start="00:01:13.440" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The first one is called House,""" start="00:01:15.667" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which I usually just put a description of the house""" start="00:01:17.412" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""with the link of the posting,""" start="00:01:20.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the price of the house,""" start="00:01:21.127" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the percentage down payment (this I play around with""" start="00:01:22.494" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to see how much the deal will be structured),""" start="00:01:26.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the down payment (which is calculated from""" start="00:01:27.474" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the previous two columns),""" start="00:01:30.529" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the monthly mortgage (which is calculated as well),""" start="00:01:31.755" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then the tenant income (which is what I suppose""" start="00:01:34.145" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""would be an example of the tenant income""" start="00:01:37.996" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that I can potentially make off the property,""" start="00:01:41.006" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the 1% rule and the ROI.""" start="00:01:42.753" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I'll quickly go over the last two columns.""" start="00:01:45.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So first is the 1% rule.""" start="00:01:47.708" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The 1% rule is essentially""" start="00:01:49.300" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a &quot;rule,&quot; in quotes, that says that""" start="00:01:50.880" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if a property matches this specific formula,""" start="00:01:53.589" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it is a good deal to look into.""" start="00:01:56.278" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for example, the first two pass,""" start="00:01:58.320" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the last one does not pass.""" start="00:02:00.890" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The last one, at a quick glance,""" start="00:02:02.677" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we can just ignore it and say,""" start="00:02:04.105" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;hey, that's not going to fly,&quot;""" start="00:02:05.472" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we'll just ignore it.""" start="00:02:06.477" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I won't go too much into details.""" start="00:02:08.000" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""That's just a brief summary.""" start="00:02:09.891" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So now the ROI is the return on investment.""" start="00:02:11.520" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So it says &quot;how much of a return am I getting""" start="00:02:14.149" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""on the amount that I invested?&quot;""" start="00:02:17.600" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's say you put in $12,000,""" start="00:02:18.960" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and at the end of the year, you cashflow $6,000.""" start="00:02:21.168" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So if you calculate the ROI off of that,""" start="00:02:23.456" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you get a 50% return on investment.""" start="00:02:26.127" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""In two years, you'll make your money back,""" start="00:02:28.477" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is pretty good.""" start="00:02:30.086" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Then all the rest of the years,""" start="00:02:31.734" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you'll just slowly be reaping in all that,""" start="00:02:32.719" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""all the excess cash flow.""" start="00:02:34.348" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""But yeah, that's it in a nutshell.""" start="00:02:36.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So let me demo it real quick.""" start="00:02:40.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for example, I'm going to change the down payment,""" start="00:02:42.270" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but I want you to pay attention""" start="00:02:44.259" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to this column [down payment]""" start="00:02:45.745" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the monthly mortgage column.""" start="00:02:48.214" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So right here [down payment] is $25,000,""" start="00:02:49.840" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and here [monthly mortgage] is around $1,200,""" start="00:02:51.727" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a little under $1,300.""" start="00:02:53.473" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So what happens if I say, you know,""" start="00:02:55.180" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""what I'm going to change the down payment""" start="00:02:57.350" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to 5% instead, because I just""" start="00:02:58.796" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""don't want to put 10.""" start="00:03:00.949" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's just put say 5.""" start="00:03:02.560" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Then I tab out of here, and voila -""" start="00:03:04.126" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you see it updated to half of $25,000.""" start="00:03:06.275" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So now it's $12,000,""" start="00:03:08.523" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and this [monthly mortgage] went up""" start="00:03:09.947" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""over actually $1,300,""" start="00:03:10.690" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then this [1% rule] hasn't changed at all""" start="00:03:12.234" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the ROI is there.""" start="00:03:14.784" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So one thing that I should mention is""" start="00:03:17.680" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""everything that I'm putting here""" start="00:03:19.148" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""is just example numbers,""" start="00:03:20.194" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""should not be taken into literal real estate advice.""" start="00:03:21.280" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I just want to put that out there.""" start="00:03:25.635" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""These are just examples to show you""" start="00:03:26.860" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""how you can potentially make it on your own,""" start="00:03:28.368" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""do the formulas on your own.""" start="00:03:30.520" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""Alright, so another cool thing that I did was""" start="00:03:32.240" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if there is no tenant income and I tab,""" start="00:03:35.651" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it says &quot;Enter Tenant Income&quot;.""" start="00:03:37.738" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So if I don't put anything,""" start="00:03:40.049" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it will automatically tell me, hey,""" start="00:03:41.033" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I can't calculate without the tenant income.""" start="00:03:42.400" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I can also do this right here [ROI field],""" start="00:03:44.920" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""say the same thing, Enter Tenant Income,""" start="00:03:46.608" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but I just didn't put it for whatever reason, but""" start="00:03:48.476" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""after this video, you should be easily able to""" start="00:03:50.564" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""put it without much struggle.""" start="00:03:53.813" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Alright, so if that's something you're interested in,""" start="00:03:57.400" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""then keep watching.""" start="00:04:00.131" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So let's go over the basics first.""" start="00:04:02.240" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, how do we create a table?""" start="00:04:05.240" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, we can do M-x org-table-create.""" start="00:04:07.400" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If we run that it, will prompt us in a minibuffer.""" start="00:04:10.369" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It says table size, columns times row.""" start="00:04:14.302" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Usually it's rows times columns,""" start="00:04:16.893" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but it is what it is.""" start="00:04:18.178" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's just leave""" start="00:04:19.602" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the default of 5 times 2, and voila, we get this.""" start="00:04:20.466" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Beautiful. Awesome.""" start="00:04:24.960" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So the other way is using the magical C-c C-c""" start="00:04:26.400" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""in Org Mode, which basically is context-aware""" start="00:04:29.511" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and does anything, does the right thing like,""" start="00:04:32.402" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""almost 100% of the time, which is pretty amazing.""" start="00:04:36.054" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Alright, let's just say I write a pipe, some words,""" start="00:04:38.600" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then another pipe, Gopar, and then""" start="00:04:42.432" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""another pipe. Let's just say we're trying to""" start="00:04:44.680" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""write it out via text, because in Org mode""" start="00:04:47.269" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""everything has text.""" start="00:04:50.600" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There's nothing fancy about it.""" start="00:04:51.547" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If I do C-c C-c, Org mode should automatically be""" start="00:04:53.380" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""context-aware that this area is a table.""" start="00:04:57.673" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, C-c C-c, boom. So if I press enter, another column.""" start="00:04:59.840" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If I press tab, it should automatically move me.""" start="00:05:04.295" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So yeah, so that's pretty much it.""" start="00:05:06.964" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""That's how you get started into the column.""" start="00:05:09.392" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, I'm assuming most of the people here already know that.""" start="00:05:11.920" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This is just the primary basic review.""" start="00:05:15.592" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So, let's first go...""" start="00:05:17.960" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's go dive right into our first formula.""" start="00:05:19.808" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So I copied some values over here,""" start="00:05:22.820" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just to save time, and the columns.""" start="00:05:24.767" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, let's go ahead and say that""" start="00:05:27.697" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we have single family house,""" start="00:05:29.164" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the price is a hundred thousand.""" start="00:05:30.750" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And, Let's say that I want the price,""" start="00:05:33.019" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the down payment that I want to put is 10%.""" start="00:05:34.164" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Right. Alright. 10%. Now if I tab""" start="00:05:36.432" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or go to the next column, nothing happens.""" start="00:05:40.528" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Why is that? Well, it's because""" start="00:05:42.394" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""(you probably guessed it)""" start="00:05:43.880" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we haven't written or tied any table formulas.""" start="00:05:44.985" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So we're saying, alright, enough talk.""" start="00:05:47.756" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""How do we do that?""" start="00:05:49.564" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, the answer is very simple.""" start="00:05:50.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We do a pound sign (#), if I can find it.""" start="00:05:52.094" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""\#+ and then we do TBL for table""" start="00:05:54.984" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then FM for formula.""" start="00:05:58.713" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, table formula, and the column.""" start="00:06:01.120" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So this, you're already halfway""" start="00:06:03.429" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to writing your first table formula.""" start="00:06:04.935" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's say we want to automatically,""" start="00:06:07.064" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's just, for exercise,""" start="00:06:09.172" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we want to put the down payment,""" start="00:06:10.979" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just put some type of value in there,""" start="00:06:13.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just to make sure that it's working.""" start="00:06:14.616" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So the way Org Mode refers to columns is,""" start="00:06:16.383" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we start with the dollar sign ($) and then""" start="00:06:20.993" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we put the number that the column is.""" start="00:06:24.141" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Indexes start with one, not a zero.""" start="00:06:26.869" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As most of us watching are programmers,""" start="00:06:29.114" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we're probably used to starting with zero,""" start="00:06:31.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but it starts with one.""" start="00:06:33.793" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So one, two, three, four, five.""" start="00:06:34.960" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So down payment is the fifth column,""" start="00:06:38.331" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we say five, and then we say equal to,""" start="00:06:39.655" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""let's say Gopar.""" start="00:06:42.304" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Then we do C-c C-c to evaluate it,""" start="00:06:44.289" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and the table is automatically updated.""" start="00:06:47.938" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Look at that.""" start="00:06:50.546" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So when you do just this, dollar sign ($) 5,""" start="00:06:50.957" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it updates every single column.""" start="00:06:55.863" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There is a way to specify that this cell only and""" start="00:06:57.806" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""this cell only but this is out of scope and it's""" start="00:07:00.680" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""not that hard it's just not in this video.""" start="00:07:03.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I would recommend, I commend you, or, actually""" start="00:07:05.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I recommend that you go check out the manual for that.""" start="00:07:08.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""All right so, let's say we want to do some basic""" start="00:07:13.000" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""arithmetic we want to do some list values""" start="00:07:17.724" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""instead of just putting in text.""" start="00:07:19.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So how do we do that?""" start="00:07:20.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, we have to pull the expression that we want""" start="00:07:21.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to put in.""" start="00:07:24.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, for example, if we want to add we'll do 20 plus""" start="00:07:25.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""20 and if we do C-c C-C to evaluate it, it should""" start="00:07:27.959" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""update every single column, the entire column,""" start="00:07:31.457" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the fifth column I mean and, tada, it does.""" start="00:07:34.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Cool! So now let's say we want to do a little bit""" start="00:07:38.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""more advanced.""" start="00:07:41.899" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's say we want to add the previous column to""" start="00:07:42.656" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""this column, so how do we refer to this one?""" start="00:07:45.007" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, 1-2-3-4 is the fourth column, so we would""" start="00:07:47.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just simply do $4 and this should automatically""" start="00:07:50.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""be referring to this column (% DP).""" start="00:07:55.931" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So we'll do 10 + 20, it's going to be 30 over here,""" start="00:07:58.157" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's do C-C C-c.""" start="00:08:02.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Ooh, error, what happened?""" start="00:08:04.274" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Oh my god, oh my god.""" start="00:08:07.124" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, this seems scary but no worries.""" start="00:08:08.974" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""This is where debugging comes in pretty handy,""" start="00:08:11.720" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is actually our next section as you can see.""" start="00:08:14.078" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, what happens if we do, if we go into the""" start="00:08:16.940" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""debugging section, what is the first step?""" start="00:08:19.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, the first step is to try out, is to enable""" start="00:08:21.440" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""formula debugger.""" start="00:08:24.890" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, if you do C-c {, it will turn on a minor mode""" start="00:08:26.516" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that whenever you evaluate a table formula,""" start="00:08:31.394" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the debugger will be enabled,""" start="00:08:35.510" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""will automatically kick in.""" start="00:08:38.291" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And if you want to disable the debugger,""" start="00:08:39.457" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you just run the command again, and it will turn off.""" start="00:08:41.074" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, let's go ahead and run it. C-c {.""" start="00:08:43.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As you can see in the mini buffer, it says,""" start="00:08:46.608" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;formula debugging has been turned on&quot;. Awesome!""" start="00:08:48.791" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So if we go back to our table""" start="00:08:51.541" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we try to run this, and see what's going on, we see...""" start="00:08:53.158" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Oh, first off, before we look""" start="00:08:58.500" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""at the buffer that just opened,""" start="00:09:00.441" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""look at the mini buffer,""" start="00:09:01.391" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it says &quot;Debugging Formula. Continue to next?&quot;""" start="00:09:02.491" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So if you have multiple or a series of formulas,""" start="00:09:05.074" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it will say, &quot;hey, do you want to debug this one""" start="00:09:07.974" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or the next one?&quot;""" start="00:09:09.691" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So this is just saying, &quot;hey, do you want to go""" start="00:09:10.474" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""into the next formula?&quot;""" start="00:09:12.058" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And since there's no next formula,""" start="00:09:13.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""debugger will just exit out""" start="00:09:14.991" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and leave you with the other buffer to see.""" start="00:09:16.058" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""For now, we'll just click no.""" start="00:09:18.299" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Right now, it doesn't matter if you click yes or no""" start="00:09:20.049" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because there's only one formula,""" start="00:09:22.591" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but we'll just click no, and let's go ahead and""" start="00:09:23.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""pay attention to the new buffer.""" start="00:09:26.172" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, over here it might seem a little confusing,""" start="00:09:27.757" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but don't worry, we're just going to ignore most of this.""" start="00:09:29.808" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The first thing that we're going to pay""" start="00:09:32.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""attention is to the original.""" start="00:09:33.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So it says, okay, this is the original, so we have""" start="00:09:35.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a quote expression, which is just trying to add the""" start="00:09:38.167" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""fourth column.""" start="00:09:41.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And if we go over here""" start="00:09:41.840" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""once everything is finalized,""" start="00:09:42.841" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it says &quot;hey, we're trying to add this 10,""" start="00:09:44.208" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but it's actually a string 10, and added to 20.""" start="00:09:47.207" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So of course it's going to be an error, so now we""" start="00:09:50.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""know what the error is.""" start="00:09:52.425" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So you're saying all right cool, awesome, now how""" start="00:09:54.099" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""do we transform that string into a number?""" start="00:09:56.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, Org Mode formulas have these flags""" start="00:09:58.940" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that you can use, and essentially a flag looks like this.""" start="00:10:02.608" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It's a semicolon (;) followed by some letter""" start="00:10:05.774" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or some identifier""" start="00:10:10.258" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that will let Org mode know that hey,""" start="00:10:13.370" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""this should be turned into a number""" start="00:10:16.590" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or this should be turned into whatever.""" start="00:10:18.291" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There's different ones for alpha literal""" start="00:10:20.307" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and for a bunch of...""" start="00:10:22.725" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I think there's even &quot;i&quot; for &quot;integer&quot;,""" start="00:10:23.963" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so it depends what you want.""" start="00:10:25.474" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for now we're just going to put &quot;number&quot;""" start="00:10:26.919" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because it's a real number.""" start="00:10:28.203" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If we do this and the debugger is still on,""" start="00:10:29.590" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""(remember because it automatically""" start="00:10:33.707" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""stays on until we turn it off),""" start="00:10:35.374" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if we reevaluate the the formula,""" start="00:10:36.474" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we should be able to see it.""" start="00:10:41.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""But first, before I do that, let's check step two.""" start="00:10:43.724" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I'll now rerun formulas with C-c * and table,""" start="00:10:47.479" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which calls org-table-recalculate.""" start="00:10:52.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""To do this, you actually have to be inside the table.""" start="00:10:54.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Otherwise, Org mode will try to do some other stuff""" start="00:10:58.607" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because it is context-aware, so depending on""" start="00:11:02.454" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the context it might do something else.""" start="00:11:04.425" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So if we do C-c *...""" start="00:11:06.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As you can see the debugger has kicked in,""" start="00:11:09.224" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""says, &quot;Do you want to continue to next?&quot;""" start="00:11:12.824" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's press yes (y), and it has been applied.""" start="00:11:14.202" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So as you can see, it only updated one column--""" start="00:11:17.680" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I'm sorry, one row--and the thing is,""" start="00:11:21.071" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""when you run this, the recalculate, it will only""" start="00:11:23.077" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""run for the current row that you're in.""" start="00:11:28.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If you want to run for the entire table,""" start="00:11:30.461" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you're going to do C-u C-c *.""" start="00:11:32.885" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Before I do that, let me turn off the debugger""" start="00:11:36.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""since we no longer are in need of it.""" start="00:11:38.507" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So C-c {, and debugging has been turned off.""" start="00:11:40.907" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Now let me do C-u C-c * and as you can see""" start="00:11:45.077" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the other rows also calculated, updated as well.""" start="00:11:50.808" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Beautiful!""" start="00:11:54.420" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So as I mentioned, feel free to look / browse the""" start="00:11:55.024" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""documentation for more flags""" start="00:11:58.607" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because each flag has its own special meaning""" start="00:12:00.108" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and will do different things, which is pretty cool.""" start="00:12:02.641" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""All right, cool.""" start="00:12:07.140" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We're done with debugging and we fixed it.""" start="00:12:08.224" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So there, now we know how to create formulas""" start="00:12:10.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and how to debug them whenever they break,""" start="00:12:12.076" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is awesome.""" start="00:12:14.307" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""All right, but remember how I said that you can""" start="00:12:15.140" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""only debug... Whenever you run recalculate,""" start="00:12:18.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It will only run the first formula?""" start="00:12:23.660" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, let's say you want to have multiple formulas?""" start="00:12:25.440" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This is completely valid, except the bad thing is""" start="00:12:28.539" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that you have to do C-c C-c C-c on each each one,""" start="00:12:30.907" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because C-u C-c * won't recalculate everything.""" start="00:12:34.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It won't.""" start="00:12:39.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Sadly, it doesn't do it.""" start="00:12:40.450" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There is a way that you can do it,""" start="00:12:41.657" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is hacking together some elisp.""" start="00:12:44.289" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""You can probably find it""" start="00:12:46.460" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or you can probably make it yourself""" start="00:12:47.475" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if you look around, but that's out of scope for this.""" start="00:12:48.807" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So now, how do we... We can write all the formulas""" start="00:12:51.207" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we want in one single line.""" start="00:12:57.100" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There's a way to to distinguish""" start="00:12:59.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""when one ends and one begins""" start="00:13:01.741" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and that is the double colon (::).""" start="00:13:03.341" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So right there, and a new formula will begin.""" start="00:13:04.807" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for example,""" start="00:13:07.707" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""let's say for the seventh column we say &quot;gopar&quot;.""" start="00:13:08.474" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If I do C-c C-c, it'll run every single thing""" start="00:13:12.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so that... &quot;gopar&quot;. Tada!""" start="00:13:17.507" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There, awesome.""" start="00:13:19.326" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""But this is going to get very annoying if you're""" start="00:13:20.724" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""simply trying to edit formulas like this, right?""" start="00:13:22.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So that's where the nicer debugging,""" start="00:13:25.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""nicer editing section comes in.""" start="00:13:27.033" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, yes, just like as mentioned, table calls""" start="00:13:28.890" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""only the first formula.""" start="00:13:32.300" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So what's the step onto this nicer editing section?""" start="00:13:33.607" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Try out &quot;C-c ,&quot; or `org-edit-special`.""" start="00:13:36.449" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go back to the table formula and call it...""" start="00:13:40.524" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""oh my god, look at that,""" start="00:13:44.657" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a new buffer just for editing,""" start="00:13:47.690" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and each formula is in its own line to make""" start="00:13:49.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it easier, which is beautiful!""" start="00:13:52.699" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, let's just say I want to do another calculation.""" start="00:13:54.724" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's do eight times eight, which should be 64,""" start="00:13:58.815" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we have no need of putting this flag""" start="00:14:02.707" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because the flag only affects it on the input coming in.""" start="00:14:04.741" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I should have mentioned that earlier.""" start="00:14:07.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Only input coming in.""" start="00:14:09.174" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There is ways to affect the output,""" start="00:14:10.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which we'll also cover in this topic later on,""" start="00:14:13.274" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but for now, you can either leave the end flag""" start="00:14:16.574" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or leave it out. It will still work fine.""" start="00:14:19.231" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's just leave it out for now.""" start="00:14:21.991" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's just do C-c C-c to make sure""" start="00:14:23.508" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that everything is working. 64. Beautiful.""" start="00:14:26.625" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So there you have it. You can have multiple formulas""" start="00:14:30.790" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just stacked up into one line,""" start="00:14:33.166" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and whenever you need to edit it,""" start="00:14:34.878" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just go into that into that line""" start="00:14:36.391" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and &quot;C-c ,&quot;, and tada!""" start="00:14:38.357" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""You have this ready, good to go, and for editing.""" start="00:14:41.124" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Oh and if you want to exit out,""" start="00:14:44.450" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""also just do &quot;C-c ,&quot; again and you're back.""" start="00:14:45.825" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I did not mention that. Sweet!""" start="00:14:49.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So now we know how to have""" start="00:14:51.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a better editing experience. Sweet!""" start="00:14:54.775" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So now comes the formatting section which I talked about.""" start="00:14:57.106" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So what's the first step?""" start="00:15:00.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well for formatting, Org mode uses""" start="00:15:01.974" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the printf function from C.""" start="00:15:05.508" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So those who are familiar with C,""" start="00:15:08.674" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you'll feel right at home because the way you format it""" start="00:15:10.375" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""is exactly the same way.""" start="00:15:12.923" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for example, this will print off""" start="00:15:14.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a floating number with two decimal points.""" start="00:15:16.558" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As you can see here, this is how you will use it.""" start="00:15:18.973" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It will be after the semicolon and it will be &quot;%.2f&quot;.""" start="00:15:21.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go ahead and test that out.""" start="00:15:26.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Actually, let's go ahead to our latest function--""" start="00:15:28.158" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I mean, to our latest formula.""" start="00:15:30.690" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's go ahead to the nicer buffer""" start="00:15:32.440" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's do, Ctrl... Let's enter the semicolon,""" start="00:15:33.841" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then let's put the percent sign, we do 2f.""" start="00:15:39.208" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Actually, let's make it five""" start="00:15:45.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just to differentiate from the formula, and let's see.""" start="00:15:49.175" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let's run it, and tada!""" start="00:15:52.690" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So yeah, as you can see, five decimal points.""" start="00:15:57.274" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and if we want zero decimal points, we can also""" start="00:16:00.180" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just move point zero, and tada!""" start="00:16:01.957" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Just like that.""" start="00:16:05.057" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We can also just leave it as is how it was before,""" start="00:16:06.224" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because before, we didn't even actually need it,""" start="00:16:08.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but yeah, just an example.""" start="00:16:10.875" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And just a reminder, there are""" start="00:16:13.114" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""plenty more ways of formatting,""" start="00:16:15.091" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""just look at the documentation.""" start="00:16:17.358" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There will be more. Basically every single thing""" start="00:16:19.740" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that you need, just use the documentation as reference.""" start="00:16:21.725" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Cool! So now we know how to debug,""" start="00:16:25.674" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""how to write formulas""" start="00:16:28.341" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and how to get a better, nicer editing buffer""" start="00:16:29.775" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""for the formula so we don't have to do it all""" start="00:16:32.825" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""in a single line.""" start="00:16:35.125" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So, what about conditional prompts, like I was""" start="00:16:36.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""showing in the first table in the end goal?""" start="00:16:38.757" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well that's actually pretty simple because we already""" start="00:16:43.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""know how to do this.""" start="00:16:47.300" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Yes, if you think about it for a second, if we are""" start="00:16:48.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""able to pull lisp s-expressions, then we are able to""" start="00:16:51.233" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""basically do it already. Here's an example.""" start="00:16:54.321" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We're saying if the second column is empty, is zero--""" start="00:16:56.390" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so actually, this should be with the N flag""" start="00:17:01.907" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because we will transform empty values as zero,""" start="00:17:04.620" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and that's how Org mode will read those.""" start="00:17:07.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It's saying if the second flag is zero,""" start="00:17:08.820" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""then I want you to put &quot;Enter the values.&quot;""" start="00:17:12.425" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And if it's not empty, we're going to put""" start="00:17:17.052" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;Values entered.&quot; We're going to recognize.""" start="00:17:20.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go ahead and actually do this.""" start="00:17:22.290" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's grab this, and let's type it in.""" start="00:17:24.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go ahead. &quot;Enter the values,&quot; because it""" start="00:17:29.090" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""doesn't have any.""" start="00:17:36.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go ahead and say &quot;Hello EmacsConf&quot;""" start="00:17:37.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's go ahead and run it again.""" start="00:17:42.441" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Since there are values,""" start="00:17:47.324" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it's going to overwrite what's here and put value entered.""" start="00:17:48.458" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's go ahead.""" start="00:17:51.674" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Tada, so there you go.""" start="00:17:53.498" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So that is pretty much how you do conditional props,""" start="00:17:55.790" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is pretty straightforward""" start="00:18:00.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""once you think about it""" start="00:18:01.941" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because if you are able to insert Lisp expressions,""" start="00:18:02.725" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""then you are able to just do that check""" start="00:18:05.441" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and do the conditional check yourself.""" start="00:18:08.241" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, custom formulas.""" start="00:18:11.174" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""Yeah, you'll see what I mean.""" start="00:18:13.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We want to be able to put our own custom functions,""" start="00:18:15.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and you probably have an idea how to do this already.""" start="00:18:20.024" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Yes, we also know how to do this already.""" start="00:18:23.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Before I continue, I'm going to say that I already""" start="00:18:27.060" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""have some formulas that I use""" start="00:18:30.457" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which are not part of this talk""" start="00:18:31.941" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because they're just functions that calculate some stuff.""" start="00:18:33.375" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So for example, they calculate the monthly mortgage,""" start="00:18:37.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the monthly PMI, property tax, homeowners insurance,""" start="00:18:40.090" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so a bunch of other stuff.""" start="00:18:43.357" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I have these functions already and they are a bit off,""" start="00:18:44.857" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but for this example, they're doing everything.""" start="00:18:49.829" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""It's close enough, so don't worry too much.""" start="00:18:52.312" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Just an example, you can have your own function""" start="00:18:54.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""that does something else like calculate""" start="00:18:56.924" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a REI B rental or something like that.""" start="00:18:59.313" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So you can do whatever you want.""" start="00:19:01.640" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As long as you can call via Lisp,""" start="00:19:03.220" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""you can call it in Org mode, in the table formulas.""" start="00:19:04.824" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's exit out of there.""" start="00:19:07.900" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Now that we know how to do everything,""" start="00:19:11.437" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""let me go back to the original table and go from there.""" start="00:19:13.808" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Let me close all these out actually.""" start="00:19:21.024" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Now let's go back and revisit this table,""" start="00:19:26.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""since we'll be much, much more familiar""" start="00:19:29.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""except for one thing, which I will explain.""" start="00:19:31.620" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So we have the constants right there""" start="00:19:35.518" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we have the house prices""" start="00:19:38.041" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we have everything just like I mentioned before.""" start="00:19:39.691" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The main part that we want to look at""" start="00:19:42.500" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""is the table formula.""" start="00:19:44.123" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So let's open up our special editing buffer,""" start="00:19:45.124" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;C-c ,&quot;,""" start="00:19:47.574" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and as you can see, I have some right here.""" start="00:19:49.774" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, the fifth column I'm saying,""" start="00:19:52.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;Hey, we're gonna call this function""" start="00:19:53.624" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""rei-calculate-down-payment, and I'm gonna""" start="00:19:55.924" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""pass in the third column and fourth column""" start="00:19:58.657" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and I'm going to pass in t.&quot; (true)""" start="00:20:00.758" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I believe this is just to normalize,""" start="00:20:02.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to convert to the proper decimal place,""" start="00:20:07.174" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so let's not worry too much about that.""" start="00:20:12.157" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Then for the sixth column, we're going to say""" start="00:20:14.179" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;I calculate the monthly mortgage.&quot;""" start="00:20:16.790" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We're going to pass in the third column""" start="00:20:18.145" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""the INTEREST_RATE, which we have""" start="00:20:20.224" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""defined over here in the constants.""" start="00:20:21.439" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The 30, I believe this is for 30 years,""" start="00:20:22.980" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""PMI, the PROPERTY_TAX and HOME_INSURANCE,""" start="00:20:26.374" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then the fourth column.""" start="00:20:29.423" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Then everything is going to be accepted as numbers,""" start="00:20:30.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and we're going to have two decimals""" start="00:20:33.924" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""at the end of the place.""" start="00:20:35.174" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, what else?""" start="00:20:36.274" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Over here is where we have our conditionals.""" start="00:20:37.607" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We're saying, &quot;hey, if the seventh column is 0,""" start="00:20:40.174" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""press 'Enter Tenant Income'.&quot;""" start="00:20:42.374" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Over here as well, if the seventh column is zero,""" start="00:20:44.402" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""we're going to press 'Enter Tenant Income'""" start="00:20:48.507" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and for this one we're going to say,""" start="00:20:51.824" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""&quot;Hey, we're going to normalize the price.&quot;""" start="00:20:53.705" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I believe this is a 1% rule.""" start="00:20:56.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This could have been extracted into a function,""" start="00:20:59.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but I just did the calculation right here.""" start="00:21:01.490" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This, I believe, is the ROI, 12 months.""" start="00:21:04.239" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This is just calculating the cash flow.""" start="00:21:07.990" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This is a very rudimentary function or formula.""" start="00:21:11.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Do not use this because there is way more""" start="00:21:15.407" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to go into calculating the cash flow""" start="00:21:16.733" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and also, it differs from person to person.""" start="00:21:18.841" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Some people are more conservative,""" start="00:21:21.599" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""other people are way more liberal, so it just""" start="00:21:23.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""depends how you want to calculate it.""" start="00:21:26.960" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""As you can see, we have the N flag for numeric number""" start="00:21:28.974" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and then we're saying we're formatting""" start="00:21:34.241" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to one decimal place.""" start="00:21:36.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""The %% sign is just to input a percent sign as itself.""" start="00:21:37.794" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Otherwise, Org mode is going to think""" start="00:21:43.208" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it's some type of a formatter, which it's not.""" start="00:21:45.420" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""If you do... As I mentioned,""" start="00:21:48.040" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if you've used the printf function in C or C++,""" start="00:21:49.240" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""then you probably know how to use it.""" start="00:21:51.790" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Okay, so this is pretty much everything in a nutshell.""" start="00:21:55.607" video="mainVideo-realestate" id="subtitle"]]
+[[!template new="1" text="""So, one thing that I do want to say""" start="00:22:01.924" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""is the last section,""" start="00:22:05.070" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is automatically updating,""" start="00:22:06.479" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is the part that blew my mind""" start="00:22:07.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""when I realized that Org Mode can do this.""" start="00:22:10.175" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So how do we do it?""" start="00:22:11.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Well, you probably guessed just from looking at""" start="00:22:12.577" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""at the first table that we have right now.""" start="00:22:14.660" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We add a column at the beginning""" start="00:22:18.424" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""of the table with a percent (%)--""" start="00:22:20.874" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I'm sorry, with the pound sign (#)""" start="00:22:22.957" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""or hashtag as the younger kids call it.""" start="00:22:24.957" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So this is what we do.""" start="00:22:28.557" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""We added a column at the beginning of the""" start="00:22:31.145" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""table, we do pound sign (#).""" start="00:22:32.820" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So this is what it's for.""" start="00:22:35.084" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""This lets Org mode know that &quot;hey,""" start="00:22:35.890" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I want the values, the table formulas,""" start="00:22:38.840" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""to automatically run on each tab change.&quot;""" start="00:22:41.240" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Now I believe that you can make it so that""" start="00:22:44.057" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""it changes, so that it updates on every keystroke.""" start="00:22:46.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I think that's too much.""" start="00:22:49.223" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""And then you can also make it so that""" start="00:22:51.124" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""only certain rows update or certain columns.""" start="00:22:53.107" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""There's a plethora of things that you can do.""" start="00:22:56.020" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""You should definitely read up on the documentation,""" start="00:22:58.319" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""because you will probably make a way better talk,""" start="00:23:01.024" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a way more advanced talk than I on this one,""" start="00:23:03.525" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""so I'm looking forward for that.""" start="00:23:07.074" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""But this is essentially how you build""" start="00:23:09.674" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""a Org mode table formula that will help you know""" start="00:23:12.460" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""if a property is correct.""" start="00:23:15.508" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So, let's go ahead and as a final out to this demo,""" start="00:23:17.225" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""let's go ahead and enter a new column.""" start="00:23:22.440" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Org-mode automatically puts the pound sign (#),""" start="00:23:25.420" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""which is awesome, and let's just say 'Emacs House',""" start="00:23:30.274" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's say it is 100k.""" start="00:23:35.540" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So 100k, and as you can see it's already trying to""" start="00:23:39.690" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""calculate the monthly mortgage,""" start="00:23:44.340" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""but we'll see about that,""" start="00:23:46.140" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's just put 10% down.""" start="00:23:47.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So 10% of 100k should be 10,000.""" start="00:23:49.880" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So 10,000, correct, and the monthly mortgage is that""" start="00:23:53.157" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""and let's just say the tenant income is,""" start="00:23:56.408" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""as you can see right here,""" start="00:24:00.190" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""tenant income is, let's say 1500.""" start="00:24:01.757" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Is it passing the 1% rule?""" start="00:24:05.974" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""Yep! What's my ROI?""" start="00:24:07.374" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""118%, which is kind of cool actually.""" start="00:24:09.524" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""That's a nice deal.""" start="00:24:13.880" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""So this is a rudimentary way of""" start="00:24:14.907" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""calculating deals in Org mode.""" start="00:24:17.757" video="mainVideo-realestate" id="subtitle"]]
+[[!template text="""I hope you found it interesting, and yeah, that is it.""" start="00:24:20.419" video="mainVideo-realestate" id="subtitle"]]
+
+
+
+Captioner: tom
+
+Questions or comments? Please e-mail [gopardaniel@gmail.com](mailto:gopardaniel@gmail.com?subject=Comment%20for%20EmacsConf%202022%20realestate%3A%20Real%20estate%20and%20Org%20table%20formulas)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/realestate-before.md b/2022/info/realestate-before.md
new file mode 100644
index 00000000..58b26d1d
--- /dev/null
+++ b/2022/info/realestate-before.md
@@ -0,0 +1,40 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Daniel Gopar shares how he uses Org tables as spreadsheets to help him decide on real estate investments. Afterwards, he will handle questions via the Etherpad.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="realestate">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect stroke-width="3" x="494" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 25-min talk followed by pad Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">#emacsconf-gen</a>)
+Etherpad: <https://pad.emacsconf.org/2022-realestate>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+<div class="vid"><video controls preload="none" id="realestate-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="realestate-mainVideo" data="""
+00:00.000 Introduction
+00:20.480 The end goal
+00:51.800 Constants and variables
+02:11.520 ROI
+02:40.040 Demo
+03:32.240 Detecting input
+04:02.240 Creating a table
+04:26.400 C-c C-c
+05:17.960 Our first formula
+07:13.000 Basic arithmetic
+08:11.720 Debugging
+09:53.600 Flags
+12:07.040 Recalculating
+12:50.040 Multiple formulas
+14:56.777 Formatting
+16:36.202 Conditional prompts
+18:12.203 Custom formulas
+21:57.857 Automatically updating
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/wNqs2ukhcQwCzUkar2bq55">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/realestate-nav.md b/2022/info/realestate-nav.md
new file mode 100644
index 00000000..936d9d38
--- /dev/null
+++ b/2022/info/realestate-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/mail">Revisiting the anatomy of Emacs mail user agents</a>
+Next by track: <a href="/2022/talks/maint">Maintaining the Maintainers: Attribution as an Economic Model for Open Source</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/rms-after.md b/2022/info/rms-after.md
new file mode 100644
index 00000000..455bdfbc
--- /dev/null
+++ b/2022/info/rms-after.md
@@ -0,0 +1,260 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="rms-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello! I'm going to talk about what I would like to see""" start="00:00:00.000" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""in GNU Emacs in the future,""" start="00:00:08.960" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and what I would prefer not to find there.""" start="00:00:11.240" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""This is all within the context""" start="00:00:17.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of GNU Emacs and its purpose.""" start="00:00:22.080" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""GNU Emacs is a part of the GNU operating system,""" start="00:00:25.360" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and the purpose of the GNU operating system""" start="00:00:30.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is not simply to do a good job technically,""" start="00:00:33.400" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""not simply to be good to use.""" start="00:00:38.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Its main purpose, its overall purpose,""" start="00:00:42.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is to give people freedom,""" start="00:00:45.760" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and to help them value and defend that freedom.""" start="00:00:48.560" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""A GNU package, by being a convenient, well-written program,""" start="00:00:54.760" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""should contribute to that overall ethical and social goal,""" start="00:01:00.160" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and not only to the usefulness of our software.""" start="00:01:06.000" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""This is true for GNU Emacs""" start="00:01:10.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""as much as it is for any other free program we’ve developed.""" start="00:01:14.080" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""In fact, GNU Emacs is the first GNU program that I released.""" start="00:01:18.720" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I had written some other things before that,""" start="00:01:25.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but didn't release them at that time.""" start="00:01:28.800" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""There was no particular use in doing so.""" start="00:01:30.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So it was through GNU Emacs""" start="00:01:34.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that I learned about various things""" start="00:01:36.107" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""such as software licenses and how to defend freedom.""" start="00:01:38.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""You're of course familiar with what GNU Emacs is today,""" start="00:01:44.240" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""thanks to the contributions of thousands of other people""" start="00:01:50.507" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""who came after me.""" start="00:01:54.340" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""What would I like?""" start="00:01:57.067" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""What would other people like?""" start="00:01:58.880" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Lots of people come to Emacs familiar with VS Code,""" start="00:02:01.533" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and they say, &quot;Please make Emacs more like VS Code.""" start="00:02:06.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Change everything that you did in the 1980s and 90s""" start="00:02:10.520" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to be like that other thing.&quot;""" start="00:02:15.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""That wouldn't be feasible even if we wanted to.""" start="00:02:18.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Our goal is not to be... not resembling VS Code.""" start="00:02:24.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Any resemblance is coincidental.""" start="00:02:30.440" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""But in particular,""" start="00:02:33.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""we do not want to have extension languages other than Lisp.""" start="00:02:38.040" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Emacs Lisp is the variant of Lisp""" start="00:02:43.874" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that we've always supported,""" start="00:02:47.574" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""which has evolved along with Emacs.""" start="00:02:49.574" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""We can conceivably have Scheme as well,""" start="00:02:52.960" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""if we can sufficiently solve the problems,""" start="00:02:57.400" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""the technical problems of making Scheme""" start="00:03:01.140" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and Emacs Lisp interoperate.""" start="00:03:03.760" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""We did some design work, I think that was with Tom Lord,""" start="00:03:06.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""whom the community will greatly miss.""" start="00:03:11.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""In the 1990s, there are challenges that remain;""" start="00:03:15.880" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""maybe it can be done.""" start="00:03:19.340" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""But a non-Lispy language would be a mistake.""" start="00:03:21.360" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It would divert our development focus into areas""" start="00:03:27.960" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that we don't need, languages that are less powerful,""" start="00:03:33.000" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""less beautiful, and less desirable for the purpose.""" start="00:03:37.480" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""However, the language that we above all shouldn't support""" start="00:03:46.280" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is JavaScript. That's not because of the language itself.""" start="00:03:52.120" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I don't know the JavaScript language,""" start="00:03:57.333" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I've heard people say it's rather clumsy""" start="00:04:00.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and not well designed, but I don't know this.""" start="00:04:04.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""In any case, it's not what my views are based on.""" start="00:04:07.520" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""There's something much worse about JavaScript,""" start="00:04:12.400" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""which is not the language itself, but how people use it.""" start="00:04:14.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Namely, it's been adopted as a way for a network server""" start="00:04:18.800" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to send a program to your machine""" start="00:04:23.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""without your even noticing, so that this program,""" start="00:04:26.120" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""written by you don't know who, will run on your computer""" start="00:04:30.120" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and do you don't know what.""" start="00:04:35.107" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""And you're supposed to just trust""" start="00:04:37.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""all and sundry developers of software""" start="00:04:39.774" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""for the sites you visit,""" start="00:04:43.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""which very commonly do malicious things, often unknown""" start="00:04:45.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to the people who are running the server itself.""" start="00:04:51.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""They paid someone else to design a website""" start="00:04:55.680" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and they probably said, oh,""" start="00:04:59.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""make it fashionable and attractive.""" start="00:05:01.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""And they didn't insist, don't snoop on the visitors,""" start="00:05:04.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""even if they understood what the issue was.""" start="00:05:09.760" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So these sites snoop. It's a serious problem.""" start="00:05:12.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""The problem comes not from the language JavaScript,""" start="00:05:20.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but from the fact that browsers, by default,""" start="00:05:24.080" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""will pull in JavaScript code that gets sent to them""" start="00:05:28.680" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and run it to do anything at all.""" start="00:05:32.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Emacs is supposed to defend your freedom.""" start="00:05:35.933" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It's supposed to help you to defend your freedom,""" start="00:05:39.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and lead you to defend your freedom,""" start="00:05:42.520" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""which means it shouldn't lead you""" start="00:05:45.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to throw your freedom away as soon as you visit a site""" start="00:05:47.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that tries to send you a non-free program""" start="00:05:50.960" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to run straight off of that other machine.""" start="00:05:53.920" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So it's important not to lead users""" start="00:05:58.280" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to do computing this way.""" start="00:06:04.080" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So what are some good things""" start="00:06:06.520" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that we would want instead of this?""" start="00:06:10.800" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""One thing we want""" start="00:06:14.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is to update the &quot;Introduction to Emacs Lisp Programming&quot;""" start="00:06:19.874" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""by the late Bob Chassell.""" start="00:06:26.574" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It's a book that makes it easy for even non-programmers""" start="00:06:29.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to learn to write simple programs in Emacs Lisp.""" start="00:06:34.720" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""And from there, they can go on to do better.""" start="00:06:38.000" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""We made a pretty big change in Emacs Lisp""" start="00:06:41.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""a few years ago, implementing lexical scoping by default.""" start="00:06:44.800" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Originally, Emacs Lisp used to be entirely dynamic scoping,""" start="00:06:49.480" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""like some of the earliest Lisp interpreters.""" start="00:06:57.360" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""This is a change that should have a careful job""" start="00:07:01.960" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of updating for the introduction.""" start="00:07:06.520" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I'm sure we've made it clear in the reference manual,""" start="00:07:10.560" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but that's not what beginners read first.""" start="00:07:14.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""We need something to teach them in lexical scoping.""" start="00:07:18.400" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""Another thing we could use is to make it easier""" start="00:07:23.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to understand the facilities that we have.""" start="00:07:30.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""For instance, I think every package""" start="00:07:33.880" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that you might load into your Emacs and run""" start="00:07:38.560" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""should have a name that helps you remember what job it does.""" start="00:07:42.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It doesn't have to be super long to tell you""" start="00:07:47.680" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""what job that package does.""" start="00:07:51.374" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""You can read the description to learn that.""" start="00:07:53.607" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""But once you've read the description,""" start="00:07:56.874" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""it should be memorable. When you see that name again,""" start="00:07:59.600" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""you should realize, oh, that's the package I could use""" start="00:08:03.074" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to do &quot;less&quot; and so. We've had a tendency""" start="00:08:06.607" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to give packages names for the sake of pure wordplay""" start="00:08:11.880" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""or lack of obvious meaning,""" start="00:08:17.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and I think we should add on, to those packages,""" start="00:08:23.574" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""names that people will remember.""" start="00:08:28.189" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""Also, there are ways we can simplify the command interface""" start="00:08:31.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of Emacs. For instance, there are many different parameters""" start="00:08:39.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""users can specify that can have several values,""" start="00:08:43.760" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and sometimes you do various kinds of editing""" start="00:08:48.000" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""in one session. That's normal in Emacs,""" start="00:08:51.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and you might want different parameter settings""" start="00:08:54.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""for different kinds of editing.""" start="00:08:57.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So you specify parameter value A, do some editing,""" start="00:09:00.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""you specify parameter value B, and do some editing,""" start="00:09:06.200" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and you'd switch back and forth, so you want""" start="00:09:10.240" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to switch back and forth between these parameters.""" start="00:09:13.720" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I think we should aim ...""" start="00:09:17.440" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""People have added various commands to switch""" start="00:09:22.707" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""between the last two or n values of this parameter,""" start="00:09:26.740" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and another command to switch""" start="00:09:30.500" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""between the last two or n values of this [other] parameter,""" start="00:09:32.774" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and then that parameter, you know, and that parameter.""" start="00:09:36.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I think we should be able to have""" start="00:09:41.360" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""a switch between the last n values command""" start="00:09:44.767" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that works on various different parameters,""" start="00:09:49.120" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and thus makes it easy to remember""" start="00:09:54.320" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that there is this facility.""" start="00:09:57.040" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Because right now the commands to do that are all ad-hoc,""" start="00:09:59.340" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and if you don't use a toggling among the last n values""" start="00:10:03.874" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of a given parameter, you won't know how to do it.""" start="00:10:08.640" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It won't be obvious that there is a way,""" start="00:10:11.840" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""so you'd have to go to a suitable manual""" start="00:10:15.367" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and study for a while to think of that.""" start="00:10:17.767" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""We could make this easily discoverable.""" start="00:10:20.100" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""There is another kind of modularity that's important,""" start="00:10:23.620" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and that is modularity at the level of maintenance.""" start="00:10:30.140" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""This is something all programmers know about, of course,""" start="00:10:34.100" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but in Emacs, various parts interact with other parts,""" start="00:10:38.307" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and we've tried to make them modular in design""" start="00:10:43.300" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""by using lots of hooks,""" start="00:10:47.980" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but we haven't gone as far as we could.""" start="00:10:50.380" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""With some effort, we could find calls""" start="00:10:54.380" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""from over here to over there""" start="00:10:58.060" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that could be replaced by use of hooks,""" start="00:11:00.220" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""so that we could reduce the extent""" start="00:11:03.140" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to which you need to know about one part of Emacs""" start="00:11:05.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to maintain another part of Emacs,""" start="00:11:09.974" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and I think that as we keep adding more facilities to Emacs,""" start="00:11:12.707" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""this kind of modularity will be an investment that pays off.""" start="00:11:17.580" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""There’s one big area of features""" start="00:11:22.220" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that I would like to see in Emacs,""" start="00:11:27.240" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and that's the ability to edit""" start="00:11:30.800" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""formatted documents in WYSIWYG, to be able to edit""" start="00:11:33.180" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""a letter or a scientific mathematical paper with formulas""" start="00:11:40.340" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""or a nicely laid out manual,""" start="00:11:47.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""looking at what it's really going to look like.""" start="00:11:52.900" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Now we have free software to do this.""" start="00:11:56.660" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""For instance, I use LibreOffice some of the time.""" start="00:12:00.460" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Sometimes it's faster than writing something""" start="00:12:04.660" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to be formatted with a text formatter""" start="00:12:08.100" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and then formatting it. But when I use LibreOffice,""" start="00:12:11.860" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I always miss the commands and facilities,""" start="00:12:16.180" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""the editing facilities of Emacs.""" start="00:12:19.220" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""I'd like to have them both together, something with""" start="00:12:22.674" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""the text formatting capabilities of LibreOffice""" start="00:12:26.500" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""or even better of TeX, but the editing commands""" start="00:12:30.340" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and facilities of Emacs. This would be a big job,""" start="00:12:36.060" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""but it can be made up of a lot of medium-sized jobs.""" start="00:12:40.300" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""If people start working on those medium-sized jobs,""" start="00:12:45.980" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""then in a number of years""" start="00:12:50.020" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""we'll have something absolutely amazing.""" start="00:12:52.060" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""But one thing I think we really shouldn't have""" start="00:12:55.460" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is the equivalent of a modern web browser.""" start="00:13:01.140" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""The World Wide Web started out in the 1990s""" start="00:13:06.500" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""in a much simpler form,""" start="00:13:10.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""where a web page described its contents,""" start="00:13:13.874" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and the web browser laid them out,""" start="00:13:17.820" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and the user could parameterize""" start="00:13:21.180" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""how to lay out various kinds of situations.""" start="00:13:23.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""This was not only convenient for users""" start="00:13:27.140" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""who wanted to control things and understand things,""" start="00:13:31.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""it was also freedom-respecting""" start="00:13:35.974" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""because the layout was done by your browser.""" start="00:13:39.740" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""If you had a free browser, you were in control,""" start="00:13:43.020" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""even though the browser was complicated already.""" start="00:13:48.100" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""But starting around two decades ago,""" start="00:13:51.620" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""there was an explosion in the complexity of browsers""" start="00:13:54.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""as companies wanted to have more and more control""" start="00:13:58.820" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""over exactly what would appear on a user's screen.""" start="00:14:02.780" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""So they invented lots of features to control that,""" start="00:14:07.700" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""features where the user couldn't really customize""" start="00:14:12.474" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""how something would actually appear""" start="00:14:16.007" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""because the whole point was that""" start="00:14:18.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""the company could control that.""" start="00:14:21.307" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""And JavaScript was sort of the ultimate level""" start="00:14:23.807" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of &quot;the company controls everything.&quot;""" start="00:14:27.020" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Because of this, going beyond the simple level""" start="00:14:32.107" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""of web page formatting features in Emacs""" start="00:14:38.500" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""is basically heading down a path that leads to subjugation.""" start="00:14:43.540" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It's a path that we need to stay away from.""" start="00:14:50.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It's a path to an unjust world of computing""" start="00:14:54.740" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that you can easily see around you.""" start="00:15:00.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Web browsers nowadays are designed to display ads""" start="00:15:03.420" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that you may not want to see.""" start="00:15:08.700" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""They're designed for DRM.""" start="00:15:11.667" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""They're designed for companies to snoop on you""" start="00:15:17.900" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""in unobvious ways. And all of that""" start="00:15:22.420" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""we should protect ourselves from,""" start="00:15:26.300" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""protect our users from.""" start="00:15:28.980" video="mainVideo-rms" id="subtitle"]]
+[[!template new="1" text="""So I hope that some of you will be enthusiastic""" start="00:15:31.300" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""about some of these changes,""" start="00:15:39.980" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""especially towards editing formatted text.""" start="00:15:42.060" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""If you want to get involved, we have""" start="00:15:46.940" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""a development discussion list called emacs-devel@gnu.org.""" start="00:15:51.980" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""You can join that. You can also,""" start="00:15:57.820" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""if you get interested in working on a package""" start="00:16:02.380" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""and you're not an experienced Emacs Lisp developer,""" start="00:16:05.740" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""it's a very good idea to look for an experienced developer""" start="00:16:09.500" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""to talk with.""" start="00:16:13.740" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Make sure you can write programs in Emacs Lisp first.""" start="00:16:14.980" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""It's not useful to take up the expert’s time learning that.""" start="00:16:19.220" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""You can still learn it from the introduction.""" start="00:16:24.260" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""But after that, when it's a matter of how to design""" start="00:16:27.407" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""your favorite package, do have a discussion with developers.""" start="00:16:31.660" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""They'll give you design ideas""" start="00:16:36.180" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""that will help you make a package that we put into Emacs.""" start="00:16:39.060" video="mainVideo-rms" id="subtitle"]]
+[[!template text="""Now it's time for questions.""" start="00:16:43.180" video="mainVideo-rms" id="subtitle"]]
+
+
+
+Captioner: anush
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20rms%3A%20What%20I%27d%20like%20to%20see%20in%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/rms-before.md b/2022/info/rms-before.md
new file mode 100644
index 00000000..62113c2d
--- /dev/null
+++ b/2022/info/rms-before.md
@@ -0,0 +1,78 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+For context, we will first play Richard Stallman's 2014 TEDx talk called "Free Software, Free Society." The TEDx talk is licensed under the Creative Commons Attribution - No Derivative Works 3.0 license. Afterwards, Richard Stallman will discuss what he believes will be good ways to improve Emacs. The EmacsConf talk will be under the Creative Commons Attribution - ShareAlike license. There will be a moderated Q&A, so please put your questions in the Etherpad or IRC.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="rms">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect stroke-width="3" x="211" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 18-min talk followed by moderated Mumble Q&A (<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">#emacsconf-dev</a>)
+Etherpad: <https://pad.emacsconf.org/2022-rms>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T16:15:00Z" end="2022-12-04T16:35:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~11:15 AM - 11:35 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~10:15 AM - 10:35 AM CST (US/Central)<br />Sunday, Dec 4 2022, ~9:15 AM - 9:35 AM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~8:15 AM - 8:35 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~4:15 PM - 4:35 PM UTC <br />Sunday, Dec 4 2022, ~5:15 PM - 5:35 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~6:15 PM - 6:35 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~9:45 PM - 10:05 PM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~12:15 AM - 12:35 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~1:15 AM - 1:35 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="rms-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rms-mainVideo" data="""
+00:00.000 GNU Emacs and its purpose
+02:33.640 Lisp as the extension language
+03:46.280 JavaScript versus freedom
+06:14.640 Updating "An Introduction to Emacs Lisp Programming"
+07:23.407 More memorable package names
+08:31.807 Simplifying the command interface
+10:23.620 Modularity
+11:22.220 Editing formatted text
+12:55.460 Not the equivalent of a modern web browser
+15:31.300 Getting involved
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.webm">Download --main.webm (81MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.opus">Download --main.opus (7.7MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/oWWwS9T9BTQU8DnJ2g56vm">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="rms-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rms-qanda" data="""
+00:56.800 Pragmatically, how are people that buy into these ideals, and especially those that build the software, meant to live/thrive, short of renouncing many of the luxuries of modern life, as many have been struggling to reconcile both, it appears? Wouldn't it be smarter and more productive longer-term to solve that problem too?
+03:24.600 I have been admiring your work for free software for many years now. I am a bit concerned about what will happen to the GNU project when you retire (not soon, I hope!!). Have you planned how to manage the GNU project in the long run?
+04:52.520 In response to your aversion to JavaScript support in Emacs: In the same way that to revolt against the nonfree spirit in software development one has to develop software, and that to fight nonfree compilers one has to write a free compiler - can you fairly consider rejection of JavaScript as a tool conducive to improving the state of free JavaScript? A server can send back any MIME type to execute on your machine, JS was just the most convenient.
+07:27.000 With all the recent additions and optimizations to Emacs Lisp (lexical scoping, native compilation etc.) would you deem Emacs Lisp suitable for general purpose programming outside Emacs (i.e. scripting, running web servers). If not, why?
+08:44.760 Could you give a few examples of the medium-sized jobs necessary for WYSIWYG-editor support in Emacs?
+09:33.480 Should GNU (or someone else) define a safe-subset of HTML/CSS/JS to make web browsers simpler and safer (e.g. by preventing JS from contacting servers)?
+10:57.440 How can we ensure the continuity of an understanding of the more arcane parts of the [Emacs] source code, and increase their evolvability, notably with regards to display, single-threading limitations, etc.?
+13:50.480 Are there any problems or disadvantages using the GNU AGPL for non-networked software like Emacs packages?
+14:50.280 Is there a list of Emacs issues which can be solved by programmers with different levels? For example my level is A, I know basic elisp and C. How can I help?
+16:36.840 What roadblocks kept some of the other efforts from being used with Emacs?
+17:36.240 What do you use emacs for beyond editing?
+17:55.120 Song about e-mail
+18:49.556 Emacs is used by a small population relative to the population that could benefit from it. Do you have any thoughts on how to expand the user base more broadly even among software developers?
+20:05.760 Would a namespace system similar to Common Lisp packages but without :USE work in Emacs? Modern CL implementations have package local nicknames to create package local prefixes.
+22:42.440 With Emacs 29 adding more (awesome) features into vanilla Emacs, how should we ensure vanilla Emacs does not get bloated with many similar features? (example: ido/icomplete, vc/magit)
+24:26.920 Do you recommend reaching out in [high] schools for volunteers instead of universities because they are more prone to value the objectives of freedom?
+25:35.040 What was the thought process behind making Emacs Lisp dynamically scoped when you first created it? What advantages did it provide over the alternative?
+27:18.766 It's hard to pick up Emacs if you do not speak English. Can something be done to address that?
+29:28.840 Do you use Org or Org mode, and if so, to what extent?
+33:54.480 What do you have in mind for more modular Emacs development?
+35:19.040 Reframing the school question
+36:18.640 In light of that critique of JavaScript not being about the language per se but rather the "culture of blindly getting and running packages/libraries", what's so different with what's currently done by the vast majority of Emacs/Elisp users to just install packages blindly?
+37:48.800 Do you still intend to merge your patch to the "shorthands" feature to the master branch?
+38:54.880 Do you think the freedom e.g., we have in Emacs, becomes a hurdle for some people to pursue more important things in the world? I used to do a lot of Emacs programming, but I recently try to stay away from tinkering on Emacs.
+40:27.920 Question about software freedom: how does it apply to software that are art/media experiences, like videogames? In your view, Is the creator of a videogame obliged to release it under a free license?
+43:35.915 Have you seen Haketilo? It seems similar to LibreJS.
+45:45.568 Do you have any suggestions for helping propective contributers streamline
+the copyright assignment needed to contribute to Emacs (and other FSF software
+projects)?
+47:09.800 Can complexity induced by company-funded free/libre code become a problem, when the company pulls out, leaving the code potentially unmaintainable?
+49:31.280 What do you think of Hyperbole or EEV instead of org mode, or other things for the stuff that org mode does "second brain / knowledge base", or GTD 'getting things done' etc... among other things in Emacs or other Emacs packages
+52:06.251 Are there plans to bring modal editing (eg. evil-mode, viper) to Emacs core and did your opinion on modal editing change over the years?
+53:03.000 What is your opinion on the current state of large machine
+learning/AI models?
+54:14.302 I thought it was a virtue to separate the content from the style orappearance of information. Part of being free is also to view information in the format that you want. Does your WYSIWYG idea erode this virtue and lead to more thinking -- perhaps undue thinking about style over substance?
+55:38.840 Do you ever dabble in retro-computing, e.g. logging into TOPS10/20 systems SDF, etc?
+56:38.196 Do you know Gemini?
+58:04.480 stallmansupport.org
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="rms-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.webm">Download --answers.webm (129MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.opus">Download --answers.opus (30MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/rms-nav.md b/2022/info/rms-nav.md
new file mode 100644
index 00000000..1ae68acd
--- /dev/null
+++ b/2022/info/rms-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/orgvm">orgvm: a simple HTTP server for org</a>
+Next by track: <a href="/2022/talks/hyperorg">Powerful productivity with Hyperbole and Org Mode</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/rolodex-after.md b/2022/info/rolodex-after.md
new file mode 100644
index 00000000..bcd512c2
--- /dev/null
+++ b/2022/info/rolodex-after.md
@@ -0,0 +1,453 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="rolodex-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello, attendees of EmacsConf 2022!""" start="00:00:00.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The title of my talk is:""" start="00:00:06.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""&quot;Build a Zettelkasten with the Hyperbole Rolodex.&quot;""" start="00:00:08.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""My name is Ramin Honary.""" start="00:00:16.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I work as a software engineer""" start="00:00:17.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""writing apps for a small machine learning consultancy.""" start="00:00:19.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I have been using Emacs since roughly 2018""" start="00:00:22.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""after having switched from a workflow""" start="00:00:24.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""using Vim together with Screen/Tmux for over a decade.""" start="00:00:26.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Today I'd like to talk a bit about""" start="00:00:29.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the Hyperbole package for Emacs.""" start="00:00:31.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Others are presenting talks later today""" start="00:00:34.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""about Hyperbole as well,""" start="00:00:36.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""including some of the the authors and maintainers,""" start="00:00:37.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I won't go into too much detail""" start="00:00:39.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""about how Hyperbole works.""" start="00:00:41.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Instead, I want to present""" start="00:00:43.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a more concrete use case for Hyperbole,""" start="00:00:45.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which is how to use it to facilitate""" start="00:00:46.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the Zettelkasten method.""" start="00:00:49.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Most Emacs users will probably be""" start="00:00:51.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""more familiar with Org Roam.""" start="00:00:53.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Org Roam may even be the first thing that comes to mind""" start="00:00:56.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""when you hear the word &quot;Zettelkasten.&quot;""" start="00:00:58.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""But personally, I use Hyperbole""" start="00:01:00.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""because I found it easier to get started with""" start="00:01:02.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""using it as an ideas database.""" start="00:01:05.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""All you need to do is install the Hyperbole package""" start="00:01:07.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(which is available on GNU-ELPA)""" start="00:01:09.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then set a few customization options.""" start="00:01:11.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""There is nothing else you really need to do""" start="00:01:13.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to get started.""" start="00:01:15.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And also, Hyperbole works nicely with Org Mode.""" start="00:01:16.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So Hyperbole's built-in functionality""" start="00:01:19.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""can be used as a nice, light-weight alternative""" start="00:01:21.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to other Emacs Zettelkasten packages.""" start="00:01:24.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This talk is for people who are curious about""" start="00:01:28.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""getting started with the Zettelkasten method,""" start="00:01:30.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but are not ready to commit""" start="00:01:34.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to a more purpose-built solution like Org Roam.""" start="00:01:36.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""So the thing I'd like people""" start="00:01:41.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to take away from this presentation""" start="00:01:42.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is that the Hyperbole Emacs package""" start="00:01:44.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""provides you with a flat-file database called &quot;HyRolo&quot;""" start="00:01:46.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which you can use to store ideas.""" start="00:01:50.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Then you can use what Hyperbole calls &quot;buttons&quot;""" start="00:01:53.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(which are hyperlinks)""" start="00:01:56.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to execute arbitrary Emacs commands""" start="00:01:57.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and by inserting links into your database""" start="00:02:00.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that execute queries against the database itself.""" start="00:02:03.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""These query-action links serve as""" start="00:02:06.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a means to link ideas together,""" start="00:02:08.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""thus creating a functioning &quot;Zettelkasten.&quot;""" start="00:02:10.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If this doesn't make sense to you,""" start="00:02:13.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'll explain what all of this means presently.""" start="00:02:15.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""So just a quick overview of what &quot;Zettelkasten&quot; is.""" start="00:02:19.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Note that most of what I say""" start="00:02:24.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""about the Zettelkasten method""" start="00:02:26.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""comes from a guy called Sascha Fast,""" start="00:02:27.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and his website: zettelkasten.de .""" start="00:02:29.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So a Zettelkasten is, in brief,""" start="00:02:33.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a database containing many nodes of interconnected ideas,""" start="00:02:35.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""each idea being a single quantity of knowledge""" start="00:02:38.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(about a paragraph)""" start="00:02:40.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and linked to other related ideas.""" start="00:02:42.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Also, let me quickly mention""" start="00:02:46.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that there are actually many tools I use""" start="00:02:47.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that assist me with the zettelkasten method:""" start="00:02:49.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Hyperbole for hyperlinks;""" start="00:02:51.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Embark for general text editing;""" start="00:02:53.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Org Mode for markup;""" start="00:02:56.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Dired for managing large sets of files;""" start="00:02:57.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Consult, Vertico, Orderless, Marginalia;""" start="00:02:59.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for interactive search through directories and documents;""" start="00:03:01.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and Magit for revision control,""" start="00:03:04.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and syncing my database of ideas""" start="00:03:06.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""across a few of my computers.""" start="00:03:08.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Each of these tools provides some unique functionality,""" start="00:03:10.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but today I will be focusing mostly on Hyperbole""" start="00:03:12.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and how it is especially useful""" start="00:03:15.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the task of linking information together""" start="00:03:17.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which is the most important aspect""" start="00:03:19.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""of the Zettelkasten methodology.""" start="00:03:21.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""And now I'll briefly go over what Hyperbole is.""" start="00:03:25.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""At it's core, Hyperbole is a simple markup language""" start="00:03:28.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""specifically designed to markup hyperlinks.""" start="00:03:31.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now, a hyperlink usually is only able to jump to""" start="00:03:34.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""ordinary URLs and file paths.""" start="00:03:38.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Hyperbole extends the function of a hyperlink to provide""" start="00:03:40.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a simple human-readable markup""" start="00:03:44.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for executing Emacs commands (called &quot;button actions&quot;)""" start="00:03:46.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then, on top of this core functionality,""" start="00:03:49.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a few mini applications""" start="00:03:52.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for example &quot;HyRolo&quot; and &quot;Koutline&quot;,""" start="00:03:53.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""have been built to make Hyperbole more generally useful""" start="00:03:56.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""as a personal information management tool.""" start="00:04:00.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""&quot;HyRolo&quot; is the feature that I use as my Zettelkasten,""" start="00:04:03.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and in particular, the HyRolo search feature""" start="00:04:07.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in combination with""" start="00:04:11.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the usual Hyperbole hyperlink markup language.""" start="00:04:12.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So let me just quote the Hyperbole manual:""" start="00:04:16.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""&quot;Hyperbole includes HyRolo for convenient management of""" start="00:04:19.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""hierarchical, record-oriented information.""" start="00:04:24.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Most often, this is used for contact management""" start="00:04:27.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but it can quickly be adapted to most any""" start="00:04:30.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""record-oriented lookup task requiring fast retrieval.&quot;""" start="00:04:33.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So in other words, for example,""" start="00:04:37.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""it can be used to run search queries""" start="00:04:38.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""across the full set of nodes in a set of Org-Mode files.""" start="00:04:41.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This means we can use an Org-Mode file""" start="00:04:44.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""as a flat-file database""" start="00:04:47.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in which entries in the database can be linked together.""" start="00:04:49.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This, in essence, is a what a Zettelkasten is.""" start="00:04:52.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""HyRolo needs almost no configuration,""" start="00:04:55.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""even if you are using it""" start="00:04:58.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the purpose of Zettelkasten,""" start="00:05:00.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but you should at least make sure""" start="00:05:01.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you set the location of the database""" start="00:05:03.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in your Emacs config file, using the Customize system""" start="00:05:05.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""or however you prefer to configure your Emacs.""" start="00:05:08.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I use &quot;use-package&quot;, and on this slide I have here""" start="00:05:10.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""an abridged version of what my &quot;init.el&quot; file""" start="00:05:13.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""looks like for the Hyperbole package.""" start="00:05:15.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""A few relevant environment variables are set:""" start="00:05:18.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the &quot;hyrolo-file-list&quot; variable""" start="00:05:21.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""selects where to find Rolo database files""" start="00:05:23.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the purpose of search. I have it set""" start="00:05:26.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to just the Zettelkasten flat file database.""" start="00:05:29.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And I also set &quot;hyrolo-date-format&quot; variable.""" start="00:05:31.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Each database entry has a time stamp, and""" start="00:05:35.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I use the time stamp as a unique ID""" start="00:05:37.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for each entry (that is, each idea node)""" start="00:05:40.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in the database.""" start="00:05:43.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Finally, before I get into the actual demo,""" start="00:05:44.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""let me quickly explain""" start="00:05:48.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the Hyperbole mini-buffer menu system.""" start="00:05:49.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Mini-buffer menus in Hyperbole work just like""" start="00:05:51.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in an ordinary GUI,""" start="00:05:54.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""except you typically enter into the mini-buffer menu""" start="00:05:55.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with a key binding instead of a mouse click.""" start="00:05:58.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""To open the Hyperbole menu,""" start="00:06:01.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you use the Hyperbole universal leader key""" start="00:06:03.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that's C-h h, which by the way,""" start="00:06:06.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""this rebinds the &quot;view-hello-file&quot; command,""" start="00:06:09.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which is a command that probably most people never use.""" start="00:06:13.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So all Hyperbole menu key sequences begin with C-h h.""" start="00:06:15.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Please remember this:""" start="00:06:20.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""as I explain how to do things,""" start="00:06:23.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""please don't worry too much""" start="00:06:25.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""about the key sequences I use""" start="00:06:26.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to perform certain actions.""" start="00:06:28.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Really, I am just navigating""" start="00:06:30.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the Hyperbole mini-buffer menus.""" start="00:06:32.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""It is a very discoverable and fluid user interface.""" start="00:06:33.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Anyway, now that we have configured our Rolo database,""" start="00:06:37.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""let's see how we enter new ideas into the database.""" start="00:06:42.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And I will start with an empty database,""" start="00:06:45.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""then I'll switch over to a more complete database""" start="00:06:48.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that I prepared for this demo. So...""" start="00:06:53.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""first we type the Hyperbole universal leader key C-h h,""" start="00:06:57.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then, you can see the menus down here""" start="00:07:04.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""we type &quot;r&quot; for &quot;Rolo&quot; and &quot;a&quot; for &quot;add&quot;.""" start="00:07:08.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""That's C-h h r a to enter a new idea.""" start="00:07:15.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And this command is available globally so,""" start="00:07:19.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""much like with the &quot;org-capture&quot; feature in Org-Mode,""" start="00:07:23.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you can run this command at any time,""" start="00:07:26.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""at the very moment you want to enter an idea.""" start="00:07:28.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""First we are prompted for an entry title,""" start="00:07:32.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and if you were using HyRolo as a contact list,""" start="00:07:36.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""this is where you would enter the person's name.""" start="00:07:38.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I am using it as a Zettelkasten,""" start="00:07:40.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I instead enter a title for my idea.""" start="00:07:43.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'll just type in...""" start="00:07:45.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and as soon as I press enter after this prompt,""" start="00:07:46.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""my Zettelkasten org file is opened,""" start="00:07:53.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a new entry with the timestamp is created,""" start="00:07:56.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and the cursor is placed at this entry""" start="00:08:02.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""ready for me to enter the body text of the idea.""" start="00:08:06.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'll type that in...""" start="00:08:09.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now I save the &quot;idea&quot; file (C-x C-s)""" start="00:08:14.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and switch back to what I was working on before""" start="00:08:18.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the usual C-x 0 (delete-window) command.""" start="00:08:20.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Next, I'd like to talk about""" start="00:08:23.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the HyRolo database search feature,""" start="00:08:26.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which is very useful.""" start="00:08:28.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The HyRolo search feature uses""" start="00:08:30.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""only Emacs built-in functions""" start="00:08:33.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and there is no indexing""" start="00:08:35.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""as with tools like &quot;mlocate&quot; or Org-Roam.""" start="00:08:36.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So far, I have not had any trouble with efficiency.""" start="00:08:38.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I don't know if at some point in the future,""" start="00:08:41.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""it will start slowing down.""" start="00:08:42.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Emacs built-in search functionality""" start="00:08:44.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is already pretty efficient as it is.""" start="00:08:46.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""It could also be that I am in the habit""" start="00:08:47.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""of storing larger bodies of text in separate files,""" start="00:08:50.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and not in the flat file database.""" start="00:08:55.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Anyway, you can search""" start="00:08:57.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""by regex, by string, or by words.""" start="00:08:59.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I personally find the string search""" start="00:09:02.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to be the most useful.""" start="00:09:03.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The difference between word search and string search""" start="00:09:04.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is that string search provides""" start="00:09:07.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""logical query operators like AND, OR, XOR, and NOT.""" start="00:09:09.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Once you run a search query,""" start="00:09:12.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a &quot;*HyRolo*&quot; buffer is opened""" start="00:09:14.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the query's results.""" start="00:09:16.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And this is a read-only-mode buffer""" start="00:09:18.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with a few useful single-key action bindings""" start="00:09:20.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for navigating the list of results""" start="00:09:23.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which I will now demonstrate.""" start="00:09:25.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""By the way, I have now switched over""" start="00:09:27.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to a larger example Rolo database that I have created""" start="00:09:31.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to demonstrate more of the HyRolo features.""" start="00:09:34.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The HyRolo search is available""" start="00:09:36.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in the Hyperbole mini-buffer menu""" start="00:09:39.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so it is always available to you.""" start="00:09:40.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Start with the Hyperbole universal leader key C-h h""" start="00:09:42.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""then &quot;r&quot; for Rolo and &quot;s&quot; for search. That is C-h h r s.""" start="00:09:46.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now we are prompted for a search string:""" start="00:09:53.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I type in &quot;Alice Abelton&quot;, and when I press enter,""" start="00:09:56.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the search results pop up""" start="00:10:02.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and the number of results is printed in the mini-buffer.""" start="00:10:04.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""We could also enter a search expression""" start="00:10:06.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""similar to a Lisp S-expression""" start="00:10:09.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with logical operators like AND or NOT,""" start="00:10:12.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but you would not need to quote the search terms.""" start="00:10:14.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So, for example (C-h h r s), I could write""" start="00:10:19.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""&quot;(and university character)&quot; within parentheses""" start="00:10:24.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and this would find entries""" start="00:10:30.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that only contain both of the words""" start="00:10:31.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""&quot;university&quot; and &quot;character&quot;.""" start="00:10:33.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""For the most part, I only really ever use""" start="00:10:35.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the ordinary string search without logical operators.""" start="00:10:39.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So as you can see, a search result buffer""" start="00:10:41.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""called &quot;*HyRolo*&quot; has popped up""" start="00:10:44.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with all of the matching entries.""" start="00:10:47.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And the search results buffer is a read-only buffer""" start="00:10:48.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with several useful navigation key bindings:""" start="00:10:51.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press &quot;o&quot; to switch to &quot;overview&quot; mode,""" start="00:10:54.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which shows all of the headings, but no content.""" start="00:11:01.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This would include subheadings""" start="00:11:03.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with like 2 stars in front of it or 3 stars""" start="00:11:05.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press &quot;a&quot; to switch to &quot;show all mode&quot;""" start="00:11:07.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which shows all of the content under each heading.""" start="00:11:12.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If I know I am looking for a keyword""" start="00:11:14.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in a top-level heading,""" start="00:11:17.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press &quot;t&quot; to switch to the &quot;top-level&quot; view mode""" start="00:11:18.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which shows only the top-level headings.""" start="00:11:22.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""As is always the case""" start="00:11:25.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the Emacs default key bindings,""" start="00:11:27.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""&quot;n&quot; and &quot;p&quot; move the cursor down and up lines,""" start="00:11:28.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I can navigate the cursor downward""" start="00:11:32.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to an entry that looks interesting.""" start="00:11:34.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press &quot;s&quot; to show the content""" start="00:11:37.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""of that particular entry.""" start="00:11:40.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press &quot;h&quot; to hide the entry again.""" start="00:11:41.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And I can press &quot;e&quot; or M-RET on the entry heading""" start="00:11:44.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to &quot;edit&quot; that heading (that entry),""" start="00:11:49.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which will open the Org-Mode file,""" start="00:11:53.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that is, the Zettelkasten database file""" start="00:11:56.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the cursor at this particular entry.""" start="00:11:59.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Be warned that editing an entry creates a new timestamp,""" start="00:12:01.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which I do not need, and there is currently""" start="00:12:07.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""no way to avoid this behavior.""" start="00:12:10.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I work around this by simply using the undo command""" start="00:12:12.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which removes the unwanted timestamp.""" start="00:12:15.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And so that is how I use the HyRolo search functionality.""" start="00:12:20.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Now... since the most important aspect of Zettelkasten""" start="00:12:25.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is linking ideas in the database,""" start="00:12:32.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""how do we actually make this work in HyRolo?""" start="00:12:33.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So this is the secret sauce of Hyperbole,""" start="00:12:37.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and the key take-away""" start="00:12:40.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for this presentation (as I said earlier).""" start="00:12:41.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Hyperbole provides markup syntax""" start="00:12:43.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for executing arbitrary Emacs commands""" start="00:12:46.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so you can link HyRolo entries together""" start="00:12:50.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""using the HyRolo search function.""" start="00:12:53.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Let me demonstrate this now.""" start="00:12:56.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I am back in my example HyRolo database,""" start="00:12:58.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and if you take a closer look""" start="00:13:03.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you can see some of the hyperlinks""" start="00:13:06.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that I already created""" start="00:13:11.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the angle-round bracket syntax.""" start="00:13:13.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now with the cursor inside of these brackets,""" start="00:13:15.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can press M-RET to &quot;click&quot; on this link.""" start="00:13:19.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""As you can see, the search query""" start="00:13:23.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""corresponding to this hyperlink here has executed""" start="00:13:27.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and popped up the &quot;*HyRolo*&quot; search results buffer.""" start="00:13:32.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""There is only one linked entry,""" start="00:13:34.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but the list of ideas that are produced""" start="00:13:38.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""by the search query in this buffer here""" start="00:13:41.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""are the list of all of the other ideas""" start="00:13:43.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that are related to this hyperlink""" start="00:13:45.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that we just clicked on here.""" start="00:13:47.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(Let me get rid of the other window...)""" start="00:13:49.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now from within this &quot;*HyRolo*&quot; buffer,""" start="00:13:52.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can navigate to another hyperlink...""" start="00:13:55.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and clicking on that updates the &quot;*HyRolo*&quot; buffer""" start="00:13:57.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with new results again.""" start="00:14:03.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can just keep navigating through""" start="00:14:04.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""all the Zettelkasten entries in this way.""" start="00:14:10.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""And so this is it.""" start="00:14:13.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This is my simple but effective Zettelkasten,""" start="00:14:18.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""constructed entirely with the functionality""" start="00:14:22.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""already built-in to Hyperbole.""" start="00:14:25.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""In the remaining time,""" start="00:14:26.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'd like to talk about how Hyperbole hyperlinks work,""" start="00:14:32.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""because it's slightly different""" start="00:14:37.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""from how hyperlinks work in Org Mode""" start="00:14:38.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""or with the Emacs clickable text properties.""" start="00:14:40.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The easiest way to create a hyperlink button""" start="00:14:49.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that runs an Emacs command""" start="00:14:52.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is simply to type the Emacs command as an S-expression,""" start="00:14:55.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but with angle brackets instead of parentheses.""" start="00:14:59.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If you were looking closely,""" start="00:15:03.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you probably already saw a hyperlink of this form,""" start="00:15:05.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""an angle-bracketed Emacs command.""" start="00:15:08.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This hyperlink simply calls""" start="00:15:10.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the &quot;hyrolo-fgrep&quot; function with this string argument.""" start="00:15:13.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and so clicking on this button""" start="00:15:18.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is equivalent to running a HyRolo search""" start="00:15:20.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the C-h h r s key sequence.""" start="00:15:23.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""As you can see, clicking on it""" start="00:15:27.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""produced the search results""" start="00:15:31.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for entries associated with that string query.""" start="00:15:32.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""It's also possible to label an action""" start="00:15:35.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with a so-called &quot;implicit link&quot;,""" start="00:15:41.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and that's this angle-and-square bracketed notation.""" start="00:15:43.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If I click on this button,""" start="00:15:47.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""it will activate this action""" start="00:15:52.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""to the right of the colon separator,""" start="00:15:54.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and there are the relevant search results""" start="00:16:01.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""from that string query.""" start="00:16:03.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""Finally, there are &quot;explicit links&quot;,""" start="00:16:04.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which I find to be especially useful""" start="00:16:09.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the Zettelkasten method.""" start="00:16:11.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I've already shown an example""" start="00:16:12.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""of using an explicit link before.""" start="00:16:15.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""What makes explicit links so useful is, firstly,""" start="00:16:17.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that the button works with just the label alone.""" start="00:16:20.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""There is no need to write an S-expression or anything.""" start="00:16:23.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""You can write the link label""" start="00:16:26.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""inline with the body text of the idea.""" start="00:16:28.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(For example, like this.)""" start="00:16:31.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Explicit links are identified by their label,""" start="00:16:34.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so they are especially good for""" start="00:16:39.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the names of people and places.""" start="00:16:40.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""By the way, this Zettelkasten database is for""" start="00:16:43.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a fictional story I started writing""" start="00:16:46.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the purpose of demonstrating HyRolo""" start="00:16:47.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""in this presentation, and I had so much fun writing it""" start="00:16:50.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that I may actually continue developing this story.""" start="00:16:52.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Anyway, let's create a new explicit link""" start="00:16:55.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and a new idea entry for a character in the story.""" start="00:16:58.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So suppose I want to create a new idea node entry""" start="00:17:01.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for this fictional character here,""" start="00:17:10.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and I'll also want to link this entry to that node.""" start="00:17:11.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Since hyperlinks are just string search,""" start="00:17:15.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""we don't actually need to have""" start="00:17:17.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""an entry in the database for this character.""" start="00:17:19.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The worst that can happen is that the hyperlink""" start="00:17:22.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""executes a search that returns no results.""" start="00:17:24.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So it's OK to create the hyperlink""" start="00:17:27.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""before we have an actual entry for this person.""" start="00:17:29.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(I'll just M-w copy the name.)""" start="00:17:31.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now I use the universal Hyperbole leader key C-h h,""" start="00:17:36.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then &quot;e&quot; for &quot;explicit links&quot;""" start="00:17:40.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and &quot;c&quot; for &quot;create&quot;. That's C-h h e c.""" start="00:17:44.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""We are prompted for an entry label""" start="00:17:49.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but it defaults to the text highlighted by the region,""" start="00:17:52.640" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I just press enter.""" start="00:17:56.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now it prompts for a button type,""" start="00:17:57.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I select &quot;hyrolo-fgrep&quot;""" start="00:18:00.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(and there's Orderless helping me go faster),""" start="00:18:03.120" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and since &quot;hyrolo-fgrep&quot; requires""" start="00:18:06.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""a string argument for the search query,""" start="00:18:10.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I am prompted for the query string.""" start="00:18:12.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'll type in &quot;character:&quot;, (yank &quot;Kerri Katz's&quot; name)""" start="00:18:14.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and there we are, the link has been created, and""" start="00:18:21.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(let me just get rid of the # character)""" start="00:18:26.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I can try it out.""" start="00:18:31.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""There's no search results. That's fine.""" start="00:18:32.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""We haven't created an idea entry yet""" start="00:18:36.200" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for this character now.""" start="00:18:38.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""So let's go ahead and do that now.""" start="00:18:40.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If we remember how to create a new idea,""" start="00:18:43.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""it's C-h h r a, and then I type &quot;character:&quot;""" start="00:18:45.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then yank the name again.""" start="00:18:52.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now a new node has been created,""" start="00:18:56.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and I can start describing this character.""" start="00:18:58.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Notice that I like to precede my characters""" start="00:19:04.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""with the keyword &quot;character:&quot; colon.""" start="00:19:08.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""This technique helps me to create hyperlinks""" start="00:19:11.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""using more descriptive search queries""" start="00:19:14.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that return fewer but more useful search results.""" start="00:19:17.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""And finally, I can create an explicit link""" start="00:19:19.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""from this character back to""" start="00:19:23.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the other character (her boyfriend).""" start="00:19:26.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I just type in &quot;<(Bertrand Becket)>&quot;,""" start="00:19:28.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and this explicit link has already been created""" start="00:19:31.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so I don't need to create it again. It just works.""" start="00:19:37.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Hyperbole identifies buttons by their label,""" start="00:19:39.680" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so as long as an explicit link button with that label""" start="00:19:41.880" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""has been created before,""" start="00:19:44.720" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I just can type in the button with markup by hand,""" start="00:19:46.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and then I can just use it.""" start="00:19:51.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Now I am back to the search results""" start="00:19:53.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the boyfriend character.""" start="00:19:57.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I hope you can see how minimal but useful""" start="00:19:59.320" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is this particular Zettelkasten technique I have""" start="00:20:04.160" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""that uses this &quot;HyRolo&quot;.""" start="00:20:07.760" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""I should also make clear that Hyperbole explicit links""" start="00:20:10.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""are encoded in a separate file in the same directory""" start="00:20:19.360" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""as the Zettelkasten flat-file database.""" start="00:20:22.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(So, let's go back to that and C-x C-f &quot;.hypb&quot;).""" start="00:20:24.280" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""You should not edit this file by hand,""" start="00:20:37.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""but it is human readable,""" start="00:20:41.240" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""so it works well with Git""" start="00:20:43.600" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and other revision control systems.""" start="00:20:45.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Whenever an explicit link is activated,""" start="00:20:47.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""it consults this file and runs the associated action,""" start="00:20:49.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""which, in the Zettelkasten use case,""" start="00:20:52.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""will always be to run a HyRolo search query.""" start="00:20:55.840" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""The advantage of keeping a separate table of links""" start="00:20:58.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""is that you can edit the link action""" start="00:21:02.040" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""(that is, the search query) in just one place,""" start="00:21:03.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""and the updated button action works everywhere""" start="00:21:07.000" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""without having to change any other files.""" start="00:21:10.560" video="mainVideo-rolodex" id="subtitle"]]
+[[!template new="1" text="""So, that is all for today.""" start="00:21:12.480" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Thank you so much for listening to my talk.""" start="00:21:18.400" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""I'll be available for questions""" start="00:21:20.520" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""for the next 20 minutes or so.""" start="00:21:23.080" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""If there are any questions that I cannot answer,""" start="00:21:24.920" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""you will have a chance to ask""" start="00:21:27.960" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""the author of Hyperbole himself, Bob Weiner,""" start="00:21:29.440" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""later today after his presentation.""" start="00:21:31.800" video="mainVideo-rolodex" id="subtitle"]]
+[[!template text="""Thanks for your attention!""" start="00:21:34.240" video="mainVideo-rolodex" id="subtitle"]]
+
+
+
+Captioner: ramin
+
+Questions or comments? Please e-mail [ramin.honary@gmail.com](mailto:ramin.honary@gmail.com?subject=Comment%20for%20EmacsConf%202022%20rolodex%3A%20Build%20a%20Zettelkasten%20with%20the%20Hyperbole%20Rolodex)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/rolodex-before.md b/2022/info/rolodex-before.md
new file mode 100644
index 00000000..93b0adc4
--- /dev/null
+++ b/2022/info/rolodex-before.md
@@ -0,0 +1,32 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Ramin Honary shares how he uses HyRolo to create and navigate links between his notes. Afterwards, he will handle questions via IRC.
+
+<div class="vid"><video controls preload="none" id="rolodex-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rolodex-mainVideo" data="""
+00:00.000 Introduction
+01:41.040 Key takeaway
+02:17.000 Overview of Zettelkasten
+02:46.320 Tools I use in day-to-day writing
+03:25.360 Quick overview of Hyperbole
+04:03.520 Explain HyRolo
+04:55.240 Configuration of Hyperbole using ~use-package~
+05:44.280 The Hyperbole menu-driven user interface
+06:37.600 Getting started with *HyRolo*: Create a /zettel/
+08:23.760 Searching the *HyRolo* database
+09:27.120 Demo *HyRolo* search
+10:06.960 Search operators AND/OR/NOT
+10:42.520 Navigating the search results
+12:01.760 Editing entries creates timestamps
+12:25.560 How is *HyRolo* a zettelkasten?
+12:56.040 Demo interlinked notes via *HyRolo* search
+14:26.800 Explaining how Hyperbole hyperlinks work
+15:35.080 Demo Hyperbole "implicit links"
+16:04.680 Explain Hyperbole "explicit links"
+16:04.680 Demo creating an explicit link
+18:32.720 Demo creating an /zettel/ entry for a person
+19:19.880 Demo explicit linking new entry to others
+20:10.560 How "explicit buttons" encode actions
+21:12.480 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/n6kPHmyb7bwombvnc48BE6">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/rolodex-nav.md b/2022/info/rolodex-nav.md
new file mode 100644
index 00000000..d52810ca
--- /dev/null
+++ b/2022/info/rolodex-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/orgyear">This Year in Org</a>
+Next by track: <a href="/2022/talks/rde">rde Emacs introduction</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/sat-close-after.md b/2022/info/sat-close-after.md
new file mode 100644
index 00000000..a51ef399
--- /dev/null
+++ b/2022/info/sat-close-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sat-close%3A%20Saturday%20closing%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/sat-close-before.md b/2022/info/sat-close-before.md
new file mode 100644
index 00000000..f3b222a8
--- /dev/null
+++ b/2022/info/sat-close-before.md
@@ -0,0 +1,4 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><div></div><div class="files resources"><ul></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/sat-close-nav.md b/2022/info/sat-close-nav.md
new file mode 100644
index 00000000..f9156b4f
--- /dev/null
+++ b/2022/info/sat-close-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/haskell">Haskell code exploration with Emacs</a>
+Next by track: <a href="/2022/talks/sun-open">Sunday opening remarks</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/sat-open-after.md b/2022/info/sat-open-after.md
new file mode 100644
index 00000000..c5e3d342
--- /dev/null
+++ b/2022/info/sat-open-after.md
@@ -0,0 +1,89 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="sat-open-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Welcome to EmacsConf 2022, where we get to find out""" start="00:00:00.000" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""just how crazy a text editor can get.""" start="00:00:03.520" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There were so many interesting talks""" start="00:00:06.240" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""that we couldn't figure out how to fit them in two days,""" start="00:00:08.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so this year we're experimenting with having two tracks.""" start="00:00:11.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There's a General track and a Development track,""" start="00:00:14.120" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""but really, you'll probably find""" start="00:00:16.120" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""interesting things on both tracks""" start="00:00:17.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""no matter what your level of experience is,""" start="00:00:19.600" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so don't feel limited to one or the other.""" start="00:00:22.160" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If we all figure out this track thing together,""" start="00:00:25.080" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""that could mean being able to have even more Emacs talks""" start="00:00:27.000" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""next year, so let's give it a try!""" start="00:00:29.880" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""The best parts of EmacsConf are the conversations.""" start="00:00:32.840" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:35.720" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and I'll give you a quick overview as well.""" start="00:00:38.280" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:40.840" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""using free and open source software.""" start="00:00:44.000" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The schedule shows the General track on top""" start="00:00:46.280" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and the Development track on the bottom,""" start="00:00:48.200" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can see what else is going on.""" start="00:00:49.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The track pages have quick shortcuts so that you can""" start="00:00:52.160" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""find out more about talks, open the Etherpads,""" start="00:00:54.560" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and join the Q&A sessions. The watch page has more tips""" start="00:00:57.360" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on how to make the most of Q&A.""" start="00:01:00.800" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""If you can, please add notes and ask questions""" start="00:01:02.120" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""in the Etherpad for the talk. That makes it easier""" start="00:01:05.760" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for everyone to share their notes,""" start="00:01:08.520" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and speakers and hosts can read the questions from there.""" start="00:01:10.080" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:01:13.120" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We have one pad for each talk this year,""" start="00:01:16.040" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can follow the links to get to the next one""" start="00:01:18.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or go back to the schedule and get the link from there.""" start="00:01:20.920" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you have general feedback about""" start="00:01:23.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""the conference itself, please put it in""" start="00:01:25.600" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""pad.emacsconf.org/2022 .""" start="00:01:27.760" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""Internet Relay Chat or IRC can be another great way""" start="00:01:31.600" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""to be part of lots of conversations.""" start="00:01:34.480" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:01:37.280" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""through your web browser. The tabs on the left can help you""" start="00:01:40.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""switch between the different channels.""" start="00:01:43.200" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There's #emacsconf-gen for the General track""" start="00:01:45.240" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and #emacsconf-dev for the Development track.""" start="00:01:47.720" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:01:50.240" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:01:53.440" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:01:57.880" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""Once again, we're going to be streaming with open captions""" start="00:02:01.360" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:02:03.920" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""captioning volunteers. The captioned talks are indicated""" start="00:02:06.640" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on the schedule, and with any luck, we'll be posting""" start="00:02:09.920" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""transcripts on talk pages shortly after the talks start.""" start="00:02:12.520" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you need additional accommodations, please let us know""" start="00:02:16.120" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""in #emacsconf-org and we'll see""" start="00:02:18.920" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""if we can make things happen.""" start="00:02:20.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""If something goes down, we'll update status.emacsconf.org.""" start="00:02:22.440" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If it doesn't look like we've noticed yet,""" start="00:02:26.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:02:27.800" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""where we will be quietly panicking.""" start="00:02:31.600" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""In all of these conversations, please keep in mind""" start="00:02:34.520" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""our guidelines for conduct. You can find them on the wiki,""" start="00:02:36.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and they basically boil down to: please be nice. Thank you!""" start="00:02:39.760" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""We'll be posting the prerecorded videos as soon as possible.""" start="00:02:42.960" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Assuming things go well, you might be able to check out""" start="00:02:47.520" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""quick replays on the Toobnix channel, which you can""" start="00:02:50.040" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""find on the watch page in the wiki. We'll post the live""" start="00:02:52.720" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""talks and Q&A sessions some time after the conference.""" start="00:02:55.680" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you'd like to get an update, you can subscribe to""" start="00:02:58.760" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""the emacsconf-discuss mailing list.""" start="00:03:01.800" video="mainVideo-sat-open" id="subtitle"]]
+[[!template new="1" text="""All right, let's get going.""" start="00:03:05.360" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Leo Vivier is going to be hosting the general track,""" start="00:03:06.600" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and Amin Bandali will host the development track.""" start="00:03:09.640" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The other volunteers and I will run around mostly backstage,""" start="00:03:12.400" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:03:15.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Let's have fun at EmacsConf 2022!""" start="00:03:18.160" video="mainVideo-sat-open" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sat-open%3A%20Saturday%20opening%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/sat-open-before.md b/2022/info/sat-open-before.md
new file mode 100644
index 00000000..89db2e0d
--- /dev/null
+++ b/2022/info/sat-open-before.md
@@ -0,0 +1,15 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><video controls preload="none" id="sat-open-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-sat-open--opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-sat-open--opening-remarks--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sat-open-mainVideo" data="""
+00:00.000 General and Development tracks
+00:32.840 Conversations
+01:02.120 Etherpad
+01:31.600 Internet Relay Chat
+02:01.360 Accessibility and open captions
+02:22.440 status.emacsconf.org, #emacsconf-org
+02:34.520 Guidelines for conduct
+02:42.960 Recordings
+03:05.360 Let's have fun
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sat-open--opening-remarks--main.webm">Download --main.webm (11MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sat-open--opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/xp2YZmteZe5qgSvwQxfCUS">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/sat-open-nav.md b/2022/info/sat-open-nav.md
new file mode 100644
index 00000000..28900365
--- /dev/null
+++ b/2022/info/sat-open-nav.md
@@ -0,0 +1,6 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Next by track: <a href="/2022/talks/journalism">Emacs journalism (or everything's a nail if you hit it with Emacs)</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/school-after.md b/2022/info/school-after.md
new file mode 100644
index 00000000..6433a51c
--- /dev/null
+++ b/2022/info/school-after.md
@@ -0,0 +1,137 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="school-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Taking notes on a computer can be challenging,""" start="00:00:00.000" video="mainVideo-school" id="subtitle"]]
+[[!template text="""especially if you compare computer notes""" start="00:00:04.880" video="mainVideo-school" id="subtitle"]]
+[[!template text="""with handwritten notes. When you're handwriting,""" start="00:00:08.280" video="mainVideo-school" id="subtitle"]]
+[[!template text="""you don't focus as much on taking those notes.""" start="00:00:11.960" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Well, you don't focus as much on *how* you take the notes,""" start="00:00:16.160" video="mainVideo-school" id="subtitle"]]
+[[!template text="""you more so focus on what you're taking.""" start="00:00:19.560" video="mainVideo-school" id="subtitle"]]
+[[!template text="""You don't get that same experience""" start="00:00:24.120" video="mainVideo-school" id="subtitle"]]
+[[!template text="""if you're writing your notes on a computer.""" start="00:00:27.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""When writing notes on a computer,""" start="00:00:30.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""you mostly focus on typing or alignment.""" start="00:00:32.120" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Those are things that are kind of solved already""" start="00:00:38.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""by certain software such as Org Mode,""" start="00:00:42.160" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which is fantastic when it comes to note-taking,""" start="00:00:45.360" video="mainVideo-school" id="subtitle"]]
+[[!template text="""but I still believe it could be much better.""" start="00:00:48.600" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""That's why I've developed the package called Lectorg.""" start="00:00:51.920" video="mainVideo-school" id="subtitle"]]
+[[!template text="""It's a collection of scripts and snippets which allow you""" start="00:00:56.640" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to improve your note-taking experience on the computer,""" start="00:01:01.800" video="mainVideo-school" id="subtitle"]]
+[[!template text="""of course, making you more focused on the subject""" start="00:01:04.960" video="mainVideo-school" id="subtitle"]]
+[[!template text="""rather than the process of taking notes.""" start="00:01:09.920" video="mainVideo-school" id="subtitle"]]
+[[!template text="""So why use Emacs? Well, again,""" start="00:01:14.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""if compared with other software,""" start="00:01:16.560" video="mainVideo-school" id="subtitle"]]
+[[!template text="""it has a lot more customizability""" start="00:01:18.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""and it can also unify pretty much anything you need""" start="00:01:21.800" video="mainVideo-school" id="subtitle"]]
+[[!template text="""in student life or work life into one place.""" start="00:01:24.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""The problems that Lectorg solves are kind of,""" start="00:01:31.080" video="mainVideo-school" id="subtitle"]]
+[[!template text="""as I mentioned, already solved partially""" start="00:01:35.640" video="mainVideo-school" id="subtitle"]]
+[[!template text="""by Org Mode itself.""" start="00:01:37.880" video="mainVideo-school" id="subtitle"]]
+[[!template text="""What I've done is simply make a bunch of additions""" start="00:01:40.480" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to Org Mode through an external package,""" start="00:01:44.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""but I've also developed other sub-modules,""" start="00:01:47.360" video="mainVideo-school" id="subtitle"]]
+[[!template text="""one of them being HBH, which allows me""" start="00:01:51.280" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to easily plan out my days HBH, hour by hour,""" start="00:01:54.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""therefore I can plan out my days on an hourly basis""" start="00:02:01.400" video="mainVideo-school" id="subtitle"]]
+[[!template text="""practically. But I've also built something called Reorg""" start="00:02:04.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which, for those of you that are familiar""" start="00:02:09.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""with the Remarkable tablet, allows you""" start="00:02:12.000" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to integrate notes from your Remarkable into Emacs--""" start="00:02:14.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""into your Org Mode notes basically.""" start="00:02:20.000" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now I believe there's already another talk on integrating""" start="00:02:22.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""handwritten notes into Emacs,""" start="00:02:25.200" video="mainVideo-school" id="subtitle"]]
+[[!template text="""so I won't get too much into that.""" start="00:02:26.920" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""So again, at the heart of Lectorg is Org Mode,""" start="00:02:30.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which for those of you that might not be familiar,""" start="00:02:36.080" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Org Mode is one of the best pieces of software""" start="00:02:38.480" video="mainVideo-school" id="subtitle"]]
+[[!template text="""when it comes to basically capturing any sort of text,""" start="00:02:43.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""managing that text, exporting it""" start="00:02:49.040" video="mainVideo-school" id="subtitle"]]
+[[!template text="""into various different formats,""" start="00:02:51.560" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which is perfect for taking notes""" start="00:02:53.960" video="mainVideo-school" id="subtitle"]]
+[[!template text="""because you can either export them,""" start="00:02:57.280" video="mainVideo-school" id="subtitle"]]
+[[!template text="""take them on the go if you don't have access""" start="00:02:59.400" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to your computer all the time,""" start="00:03:02.120" video="mainVideo-school" id="subtitle"]]
+[[!template text="""or you can share them with friends, which...""" start="00:03:03.880" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Well, that is somewhat self-explanatory""" start="00:03:05.840" video="mainVideo-school" id="subtitle"]]
+[[!template text="""in how that can help you or others.""" start="00:03:11.360" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""Now the ecosystem of Lectorg,""" start="00:03:14.920" video="mainVideo-school" id="subtitle"]]
+[[!template text="""it's a bit chaotic as of right now. It's a package itself,""" start="00:03:16.560" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Lectorg.el, which also partially relies on""" start="00:03:21.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""a collection of Python scripts""" start="00:03:25.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""as I didn't have that much time""" start="00:03:27.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to develop the software strictly in Elisp,""" start="00:03:30.040" video="mainVideo-school" id="subtitle"]]
+[[!template text="""but it still gets the job done,""" start="00:03:34.120" video="mainVideo-school" id="subtitle"]]
+[[!template text="""and I believe that there is no speed hindrance.""" start="00:03:37.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now to further improve Lectorg,""" start="00:03:43.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""I'd love to ask for your help""" start="00:03:46.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""if you have encountered any sort of issue""" start="00:03:49.280" video="mainVideo-school" id="subtitle"]]
+[[!template text="""when it comes to note-taking or academics in general,""" start="00:03:53.080" video="mainVideo-school" id="subtitle"]]
+[[!template text="""I would love to integrate your solution""" start="00:03:56.840" video="mainVideo-school" id="subtitle"]]
+[[!template text="""(or if you don't have one, we can come up with one)""" start="00:03:59.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""into Lectorg. Also, if anyone would be willing""" start="00:04:04.400" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to transcribe those Python scripts""" start="00:04:07.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""into a more Lisp approach, then that'd be fabulous.""" start="00:04:13.440" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""So let's look at how Lectorg works in practice.""" start="00:04:18.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""We'll look at two examples,""" start="00:04:24.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""one of taking notes for math""" start="00:04:26.040" video="mainVideo-school" id="subtitle"]]
+[[!template text="""and the other for business, I believe.""" start="00:04:28.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now I have to mention that all of the things""" start="00:04:33.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""that I do in that example""" start="00:04:36.040" video="mainVideo-school" id="subtitle"]]
+[[!template text="""do not cover all the functions and features of Lectorg.""" start="00:04:38.280" video="mainVideo-school" id="subtitle"]]
+[[!template text="""There is decent documentation on the Lectorg GitLab page,""" start="00:04:43.920" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""so do check that out for further reference.""" start="00:04:49.160" video="mainVideo-school" id="subtitle"]]
+[[!template text="""For our first example, we're going to start off""" start="00:04:57.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""with taking notes for statistics. Now what I'm doing here""" start="00:04:59.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""is opening Lectorg Hub, which allows me""" start="00:05:04.240" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to associate certain resources with this particular course.""" start="00:05:06.480" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Here, I've opened the book which I have associated""" start="00:05:10.880" video="mainVideo-school" id="subtitle"]]
+[[!template text="""with this course, and I'm going to go ahead""" start="00:05:15.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""and start taking some notes""" start="00:05:19.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""on the cumulative distribution function here.""" start="00:05:22.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now what OrgMode allows you to do""" start="00:05:26.640" video="mainVideo-school" id="subtitle"]]
+[[!template text="""is integrate LaTeX into regular text quite easily,""" start="00:05:30.000" video="mainVideo-school" id="subtitle"]]
+[[!template text="""preview it, and then later export it.""" start="00:05:34.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now here we can see the first usage of a snippet !m,""" start="00:05:38.240" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which inserts a block for entering a LaTeX equation.""" start="00:05:48.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""What I'm trying to do here""" start="00:05:59.640" video="mainVideo-school" id="subtitle"]]
+[[!template text="""is take a screenshot of the figures in the book,""" start="00:06:00.840" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which is done with org-download (not a part of Lectorg,""" start="00:06:05.000" video="mainVideo-school" id="subtitle"]]
+[[!template text="""but a very useful tool). Now that is it for math.""" start="00:06:10.680" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""Let's look at something a bit different.""" start="00:06:15.800" video="mainVideo-school" id="subtitle"]]
+[[!template text="""We're going to take a look at business,""" start="00:06:18.040" video="mainVideo-school" id="subtitle"]]
+[[!template text="""more specifically, taking notes on the product lifecycle.""" start="00:06:20.200" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Here on the left, I have certain notes from class""" start="00:06:24.520" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which are not complete.""" start="00:06:27.560" video="mainVideo-school" id="subtitle"]]
+[[!template text="""As you can see at the top, there's a comment""" start="00:06:31.080" video="mainVideo-school" id="subtitle"]]
+[[!template text="""also done using Lectorg which puts this file into a TODO""" start="00:06:34.680" video="mainVideo-school" id="subtitle"]]
+[[!template text="""so that I can get back to it whenever I want""" start="00:06:42.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""or schedule this TODO.""" start="00:06:46.720" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Now I'm taking notes on a video lecture,""" start="00:06:48.880" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which I've opened, again, through Lectorg hub.""" start="00:06:54.440" video="mainVideo-school" id="subtitle"]]
+[[!template text="""As you can see right now, I'm inserting""" start="00:07:07.640" video="mainVideo-school" id="subtitle"]]
+[[!template text="""another snippet for Plantuml,""" start="00:07:09.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""which immediately exports it to a file,""" start="00:07:12.480" video="mainVideo-school" id="subtitle"]]
+[[!template text="""and again I'm going to be using org-download here""" start="00:07:15.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""to insert another figure at the top.""" start="00:07:19.800" video="mainVideo-school" id="subtitle"]]
+[[!template new="1" text="""I hope this demonstration was useful.""" start="00:07:25.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Once again, it did not demonstrate everything.""" start="00:07:33.360" video="mainVideo-school" id="subtitle"]]
+[[!template text="""You can find more on GitLab.""" start="00:07:35.600" video="mainVideo-school" id="subtitle"]]
+[[!template text="""I hope some of you might consider using Lectorg""" start="00:07:37.840" video="mainVideo-school" id="subtitle"]]
+[[!template text="""in your academic life or perhaps even""" start="00:07:44.400" video="mainVideo-school" id="subtitle"]]
+[[!template text="""in some areas of business. I believe that is""" start="00:07:46.840" video="mainVideo-school" id="subtitle"]]
+[[!template text="""everything I have to demonstrate for today.""" start="00:07:51.320" video="mainVideo-school" id="subtitle"]]
+[[!template text="""Thank you for listening to this talk,""" start="00:07:53.760" video="mainVideo-school" id="subtitle"]]
+[[!template text="""have a nice rest of the day.""" start="00:07:57.440" video="mainVideo-school" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [daniel@alves.world](mailto:daniel@alves.world?subject=Comment%20for%20EmacsConf%202022%20school%3A%20Back%20to%20school%20with%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/school-before.md b/2022/info/school-before.md
new file mode 100644
index 00000000..536648a3
--- /dev/null
+++ b/2022/info/school-before.md
@@ -0,0 +1,16 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+Daniel Rosel demonstrates Lectorg, a package that he wrote to make note taking faster and simpler. Afterwards, he will handle questions over IRC.
+
+<div class="vid"><video controls preload="none" id="school-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="school-mainVideo" data="""
+00:00.000 Introduction
+00:51.920 Packages: Lectorg, Reorg, HBH
+02:30.680 Org Mode
+03:14.920 The ecosystem of Lectorg: Elisp and Python
+04:18.680 How Lectorg works
+04:49.160 Math
+06:15.800 Business
+07:25.760 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.webm">Download --main.webm (22MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.opus">Download --main.opus (6.3MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/tM8H4Dj2hZ69CwWMFStZqX">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/school-nav.md b/2022/info/school-nav.md
new file mode 100644
index 00000000..daf22b0e
--- /dev/null
+++ b/2022/info/school-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/journalism">Emacs journalism (or everything's a nail if you hit it with Emacs)</a>
+Next by track: <a href="/2022/talks/treesitter">Tree-sitter beyond syntax highlighting</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/science-after.md b/2022/info/science-after.md
new file mode 100644
index 00000000..148bde2b
--- /dev/null
+++ b/2022/info/science-after.md
@@ -0,0 +1,399 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="science-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello everyone, I'm Vidianos.""" start="00:00:00.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Today I'm going to show you""" start="00:00:02.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""how I write and organize""" start="00:00:03.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""my literature notes using Emacs.""" start="00:00:04.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I take my notes using Zettelkasten,""" start="00:00:06.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which you may or may not have heard.""" start="00:00:08.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It is about taking small atomic notes""" start="00:00:11.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and linking them one another""" start="00:00:13.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to create your so-called second brain.""" start="00:00:15.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Here is mine.""" start="00:00:17.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is a graph of all the notes""" start="00:00:19.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I have accumulated the last few years.""" start="00:00:20.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It has various types of notes,""" start="00:00:22.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but we're mainly going to focus on""" start="00:00:25.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""literature notes today.""" start="00:00:25.960" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Here are the contents of my talk.""" start="00:00:28.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""We're going to start""" start="00:00:29.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with bibliography management,""" start="00:00:30.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is how I take bibliography""" start="00:00:31.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""from the web and import it to Emacs.""" start="00:00:33.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Then we're going to talk about""" start="00:00:35.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""how I create literature notes""" start="00:00:37.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""using a custom org-roam-bibtex template I have.""" start="00:00:38.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And after talking about that,""" start="00:00:42.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""we can talk about how I write literature notes,""" start="00:00:43.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is through annotating an article""" start="00:00:46.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""using org-noter. Org-noter is a package""" start="00:00:48.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that allows you to annotate PDFs""" start="00:00:51.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""using the Org format""" start="00:00:53.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and creates a supplementary Org file to your PDF.""" start="00:00:55.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Then we're going to talk about""" start="00:00:59.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""adding the literature to your Zettelkasten,""" start="00:01:00.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is a simple but important topic,""" start="00:01:03.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and how you can write permanent notes""" start="00:01:06.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""based on the info you obtain from this literature.""" start="00:01:08.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Lastly, we're going to focus on""" start="00:01:11.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the organization problem""" start="00:01:13.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""one might find when having a lot of literature""" start="00:01:15.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""for an assignment or an article or something,""" start="00:01:17.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and how I have tried to solve this""" start="00:01:21.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with my package Zetteldesk.""" start="00:01:22.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This isn't the perfect solution,""" start="00:01:24.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but it is what I have, and I really like it.""" start="00:01:26.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Finally, we're going to talk about""" start="00:01:29.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""how to compose the final article""" start="00:01:30.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that you want to produce""" start="00:01:33.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""using this literature""" start="00:01:35.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with the technique described""" start="00:01:36.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""in the rest of this talk.""" start="00:01:38.640" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""So let's begin the talk""" start="00:01:40.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with bibliography management.""" start="00:01:42.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Zotero is the bibliography manager I use.""" start="00:01:44.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It is very simple to store articles with it,""" start="00:01:47.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it exports to .bib,""" start="00:01:49.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""integrating with packages""" start="00:01:50.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""such as org-roam-bibtex and ivy-bibtex.""" start="00:01:52.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""When researching, I typically find""" start="00:01:54.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""a long list of articles from a search engine.""" start="00:01:56.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I open the titles which have interesting titles""" start="00:02:00.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""through their abstracts""" start="00:02:03.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and save to Zotero those whose abstracts""" start="00:02:05.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""are the most relevant to what I want.""" start="00:02:07.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""From these articles,""" start="00:02:10.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I typically won't read all of them""" start="00:02:11.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because they're a lot,""" start="00:02:13.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but I will select a few,""" start="00:02:14.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""once I have collected as many as I want.""" start="00:02:17.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Zotero acts as a way to store everything""" start="00:02:21.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that might be interesting,""" start="00:02:24.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""while Emacs and my Zettelkasten""" start="00:02:25.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""stores everything that is definitely interesting,""" start="00:02:28.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and I have read it already.""" start="00:02:30.960" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""And then we can move to""" start="00:02:35.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""how I create literature notes.""" start="00:02:36.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I set the default action of ivy-bibtex""" start="00:02:38.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to ivy-bibtex-edit-notes,""" start="00:02:41.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which will prompt-- which""" start="00:02:43.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with org-roam-bibtex-mode active,""" start="00:02:44.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""prompts you for an org-capture template""" start="00:02:46.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""when selecting something""" start="00:02:48.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""if the node doesn't exist,""" start="00:02:50.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""or takes you to the existing node.""" start="00:02:52.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And obviously you need to have this here,""" start="00:02:54.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to set the default action""" start="00:02:58.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that was already there""" start="00:03:00.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to a letter.""" start="00:03:02.600" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Then we can move to my org-roam reference template,""" start="00:03:04.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""using org-roam-bibtex.""" start="00:03:08.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This isn't so complicated,""" start="00:03:11.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but it has some important stuff""" start="00:03:12.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I want to highlight.""" start="00:03:14.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Save it to the ref directory,""" start="00:03:14.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so I can remember where it is,""" start="00:03:17.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it's classified as a literature note.""" start="00:03:19.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The file name is the cite key,""" start="00:03:23.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is easy and small,""" start="00:03:25.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but the title is the actual article's title.""" start="00:03:27.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Give it a tag of the entry-type;""" start="00:03:30.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""this is typically &quot;article,&quot;""" start="00:03:32.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but it's easy to sort things this way""" start="00:03:35.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because not all literature notes are articles.""" start="00:03:37.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And then give the keywords""" start="00:03:41.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that are given by Zotero, because why not?""" start="00:03:43.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Tags here are tags from Zettelkasten.""" start="00:03:47.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""These are the links to""" start="00:03:51.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""other files which are relevant,""" start="00:03:53.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but its initialization is empty, obviously.""" start="00:03:55.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And then this heading is where""" start="00:03:58.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""all the magic happens.""" start="00:03:59.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The name is just not really so relevant;""" start="00:04:00.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I just needed something that made sense.""" start="00:04:04.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The properties are what matters,""" start="00:04:07.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and mainly this one here.""" start="00:04:10.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The ${file} attribute finds""" start="00:04:12.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the file of this specific literature""" start="00:04:18.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and makes sure that org-noter works""" start="00:04:24.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""by default here.""" start="00:04:27.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""As I'm going to show you in a moment,""" start="00:04:29.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""this way [of] initializing the literature note,""" start="00:04:32.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""org-noter works by default.""" start="00:04:34.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""That's all, basically, for the template.""" start="00:04:37.000" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""This is the point of the talk""" start="00:04:40.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""where we reach the first demo.""" start="00:04:42.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is about opening ivy-bibtex,""" start="00:04:44.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""selecting an article I want to annotate,""" start="00:04:47.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""initializing the literature note.""" start="00:04:50.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""We can see that everything""" start="00:04:53.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is inserted in for me,""" start="00:04:55.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and if I open org-noter on this heading,""" start="00:04:56.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it opens the article, as expected.""" start="00:05:01.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I can read the article,""" start="00:05:03.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I can say I want to""" start="00:05:06.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""annotate something here.""" start="00:05:08.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Obviously, annotation is not that simple as here,""" start="00:05:20.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but I don't really have the time""" start="00:05:24.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to actually annotate an article live.""" start="00:05:26.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""But you can keep going, and it's a good setup.""" start="00:05:28.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Then close org-noter,""" start="00:05:34.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and let's go presentation again.""" start="00:05:39.880" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Moving on, this section is some stuff""" start="00:05:40.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""about my annotation process.""" start="00:05:44.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""As I said, there is not enough time for me""" start="00:05:45.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to actually annotate an article live,""" start="00:05:49.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but here are some things about it.""" start="00:05:51.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""First, is that I annotate with org-noter,""" start="00:05:53.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which I absolutely love.""" start="00:05:55.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It is great for annotations""" start="00:05:56.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because you do them in org,""" start="00:05:59.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is an amazing format""" start="00:06:02.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and gives you a lot of flexibility,""" start="00:06:03.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""such as adding to the Zettelkasten,""" start="00:06:05.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""being initialized by a capture template,""" start="00:06:07.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and other things.""" start="00:06:11.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""But also, you don't need to look for""" start="00:06:13.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the notes inside the PDF,""" start="00:06:15.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is a problem you can have""" start="00:06:17.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""if you annotate on the PDF,""" start="00:06:19.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it is very annoying in my opinion.""" start="00:06:20.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""So I prefer having these notes,""" start="00:06:23.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and I can only focus on them,""" start="00:06:26.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but I can also see where they refer.""" start="00:06:27.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The other scenarios are not so good.""" start="00:06:29.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Annotating on the PDF,""" start="00:06:33.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you search for it,""" start="00:06:35.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and if you don't know which section it refers to,""" start="00:06:36.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""then you need to look about it,""" start="00:06:41.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and that is very tiring.""" start="00:06:42.760" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Also, I am always annotating in English.""" start="00:06:44.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is not my mother tongue,""" start="00:06:48.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but it helps me avoid""" start="00:06:50.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the necessary mental overhead""" start="00:06:52.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""of translating while reading.""" start="00:06:53.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I want to pay attention to what I read""" start="00:06:55.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and not to translate stuff.""" start="00:06:57.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I will translate later.""" start="00:06:59.680" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""And when finishing an article,""" start="00:07:02.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I write a mini-abstract myself,""" start="00:07:05.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which contains what I think about the article.""" start="00:07:07.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It doesn't need to be much,""" start="00:07:10.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it's usually like 3 or 4 paragraphs,""" start="00:07:11.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it shows things that are useful in the article,""" start="00:07:14.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and what is mentioned that matters to me.""" start="00:07:18.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""So I can look back at it,""" start="00:07:21.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it is very easy for me to find""" start="00:07:22.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""what I got from this article,""" start="00:07:24.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so where I will cite it on my actual project.""" start="00:07:26.600" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Then last thing you need to do""" start="00:07:30.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is add a note to your Zettelkasten.""" start="00:07:33.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is very easy due to it being in an org format.""" start="00:07:35.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""You can just have it in the org-roam directory,""" start="00:07:38.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which it automatically goes to,""" start="00:07:41.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and link it to other relevant notes,""" start="00:07:43.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is its index""" start="00:07:46.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because everything in my Zettelkasten""" start="00:07:48.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""(at least) has an index,""" start="00:07:50.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but also every other permanent note""" start="00:07:51.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""whose contents are in one way or another""" start="00:07:54.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""mentioned inside the article.""" start="00:07:56.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This way the article is in a network with notes""" start="00:07:58.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that are similar to it.""" start="00:08:00.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Then we move on to the second demo,""" start="00:08:02.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is about a full-fledged literature note.""" start="00:08:05.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""We can go on org-roam-node-find,""" start="00:08:08.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""search for references,""" start="00:08:11.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""go to this, and you can see""" start="00:08:13.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it is linked to other notes.""" start="00:08:15.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And here is the mini-abstract,""" start="00:08:17.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and here are my notes on it.""" start="00:08:20.040" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""The last thing you need to do""" start="00:08:21.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""when creating a literature note,""" start="00:08:27.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is obviously create permanent notes""" start="00:08:29.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""based on what you read.""" start="00:08:31.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""If you never create these literature notes,""" start="00:08:32.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you will never get new information.""" start="00:08:35.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""So for your Zettelkasten to grow,""" start="00:08:37.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you need to create such notes.""" start="00:08:40.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This means that the subject you are researching""" start="00:08:42.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is not just literature notes""" start="00:08:45.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but has well-structured permanent notes,""" start="00:08:47.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is what you will actually read.""" start="00:08:50.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""You typically only read literature notes""" start="00:08:52.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to see what gets cited where.""" start="00:08:55.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""What you will mostly read""" start="00:08:57.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is these permanent notes""" start="00:08:58.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that you create from this knowledge.""" start="00:08:59.840" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""So finally we are at the last part of the talk,""" start="00:09:01.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which is about organizing literature notes.""" start="00:09:05.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And this is in my opinion""" start="00:09:07.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the most interesting part""" start="00:09:09.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because it is very unique.""" start="00:09:10.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It uses a package I wrote myself,""" start="00:09:12.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it doesn't have as much usage""" start="00:09:14.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""as the rest of the things I described so far.""" start="00:09:18.320" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""So what is the problem you might find?""" start="00:09:21.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Indeed, if you read a lot of things,""" start="00:09:24.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you have a large collection of notes,""" start="00:09:27.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and it's not the only thing you will think about.""" start="00:09:30.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""However, you do need to""" start="00:09:33.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""justify everything with citations,""" start="00:09:36.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so you need to remember everything""" start="00:09:37.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you read in these notes.""" start="00:09:39.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""You have done a lot of work,""" start="00:09:41.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but there is still a lot for you""" start="00:09:43.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to reach your final manuscript.""" start="00:09:45.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Except if there was a handy little way""" start="00:09:47.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to combine everything""" start="00:09:50.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and sort it in a very easy way.""" start="00:09:52.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Well, there is,""" start="00:09:55.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and I think it came out pretty well.""" start="00:09:56.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It's zetteldesk.el.""" start="00:10:00.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It was inspired by this quote here""" start="00:10:01.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""from How to Take Smart Notes.""" start="00:10:05.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Sönke Ahrens here talked about a desktop,""" start="00:10:06.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which you have all the literature""" start="00:10:09.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you want in that desktop,""" start="00:10:13.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and you try to bring it in order.""" start="00:10:16.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And by doing that,""" start="00:10:20.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you can improve your ideas""" start="00:10:22.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and have a structure""" start="00:10:24.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so that your manuscript will then be""" start="00:10:27.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""very, very easy to write.""" start="00:10:30.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And as I say here, in trying to do this,""" start="00:10:33.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I made something much more general""" start="00:10:36.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""than it needed to be, so yeah,""" start="00:10:38.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you can use it for many other things.""" start="00:10:41.560" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""But before I show you some things about it,""" start="00:10:43.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I want to introduce you to what a desktop is.""" start="00:10:46.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It's essentially a collection of the knowledge""" start="00:10:49.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you want to be able to see.""" start="00:10:53.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""You add things to your Zetteldesk,""" start="00:10:54.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and using filter functions,""" start="00:10:58.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you only see these notes and nothing else,""" start="00:11:01.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which in my opinion is very handy.""" start="00:11:04.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""So having said that,""" start="00:11:07.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""we can see these things in action""" start="00:11:10.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""for the final demo of the talk.""" start="00:11:12.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is the third one.""" start="00:11:14.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I will go to an index file of mine.""" start="00:11:15.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is 3D printing,""" start="00:11:20.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""an assignment I had last semester.""" start="00:11:21.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And this has 28 backlinks,""" start="00:11:23.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so a lot of things that I looked at""" start="00:11:27.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""for this assignment.""" start="00:11:30.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I can say I want to add""" start="00:11:31.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""the current note's backlinks to the Zetteldesk,""" start="00:11:33.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and now I have a filtered version""" start="00:11:35.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""of org-roam-node-find defined,""" start="00:11:38.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which only lists these 29 notes.""" start="00:11:40.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Very nice, right?""" start="00:11:42.000" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""I can also filter just the literature notes,""" start="00:11:45.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which can also use other UIs beside org-roam,""" start="00:11:49.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""such as, for example,""" start="00:11:56.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""one I use a lot is the ivy-bibtex command.""" start="00:11:57.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This takes a lot of time,""" start="00:12:00.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""much longer than the org-roam one,""" start="00:12:03.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but has them in this UI,""" start="00:12:04.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which in a lot of cases is more useful for me.""" start="00:12:06.480" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""The other very important thing is inserting these.""" start="00:12:09.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""For example, say I want to insert a permanent note,""" start="00:12:15.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""such as this.""" start="00:12:20.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Its title will become a top-level heading,""" start="00:12:21.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and everything else will be inserted as expected.""" start="00:12:25.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""But the most important thing for us""" start="00:12:29.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""is inserting literature, right?""" start="00:12:35.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is done with this command,""" start="00:12:37.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and let's say I want to insert this.""" start="00:12:39.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The title again becomes a heading,""" start="00:12:42.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and this is the article title also.""" start="00:12:48.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I store the cite key here,""" start="00:12:50.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and everything else about it is also here.""" start="00:12:53.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And I can add others,""" start="00:12:56.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""for example, this and this.""" start="00:12:58.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And we have all of them here.""" start="00:13:01.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I see it says this is the basic,""" start="00:13:09.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so let's put it at the top.""" start="00:13:11.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And then maybe I want to put this last.""" start="00:13:12.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""And this way, you can sort things,""" start="00:13:18.840" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and typically, on the other side,""" start="00:13:24.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I have a manuscript,""" start="00:13:26.320" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and I look at what order""" start="00:13:27.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I want to have things in""" start="00:13:30.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and sort the articles and the permanent notes""" start="00:13:31.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""in a way so that each section can have""" start="00:13:34.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""its own citations and its own notes,""" start="00:13:38.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""which makes writing, again, very easy, in my opinion.""" start="00:13:41.800" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""Finally, let's go to composing the final article.""" start="00:13:46.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This is our goal: we wrote and organized""" start="00:13:53.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""all these literature notes""" start="00:13:57.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to put them in your final project.""" start="00:13:58.360" video="mainVideo-science" id="subtitle"]]
+[[!template text="""This might be an assignment""" start="00:14:00.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""or an actual scientific article.""" start="00:14:01.880" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It is apparent that you have done""" start="00:14:04.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""a lot of work for this so far,""" start="00:14:07.480" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but you don't need to do a lot more.""" start="00:14:09.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""In my opinion, this is the easiest part""" start="00:14:12.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""of the whole workflow.""" start="00:14:14.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""People consider final article composition hard,""" start="00:14:15.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but if you've done all these steps,""" start="00:14:19.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you already have everything you want""" start="00:14:21.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""to add in the article from your notes.""" start="00:14:23.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""It's already there,""" start="00:14:25.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""a lot of things are copy-pasted,""" start="00:14:27.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it's all in a coherent order,""" start="00:14:30.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""connections are to an extent already there,""" start="00:14:34.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and you know what citation goes where,""" start="00:14:38.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so you can justify everything you write.""" start="00:14:41.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""The actual draft isn't there,""" start="00:14:44.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but it is very easy""" start="00:14:46.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because now you just write things as you see them""" start="00:14:48.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""in your desktop and connect them.""" start="00:14:52.600" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Connections are basic--""" start="00:14:54.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""connections and making the article good, obviously,""" start="00:14:56.960" video="mainVideo-science" id="subtitle"]]
+[[!template text="""are basically the only thing you need to worry,""" start="00:14:59.440" video="mainVideo-science" id="subtitle"]]
+[[!template text="""but those are very important""" start="00:15:02.400" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because others will only see the final manuscript,""" start="00:15:05.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so if that's not good,""" start="00:15:09.040" video="mainVideo-science" id="subtitle"]]
+[[!template text="""then the whole assignment is not good, obviously.""" start="00:15:11.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""So it's not like your work is done,""" start="00:15:14.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it's just very easy.""" start="00:15:17.520" video="mainVideo-science" id="subtitle"]]
+[[!template new="1" text="""And with that, I hope you liked my talk""" start="00:15:19.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""because it is coming to an end now.""" start="00:15:23.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I want to thank you for your time;""" start="00:15:25.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I hope you enjoyed it.""" start="00:15:27.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""You can feel free to email me at this address;""" start="00:15:29.680" video="mainVideo-science" id="subtitle"]]
+[[!template text="""it has also been on every slide since the beginning.""" start="00:15:32.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I also have the GitHub for zetteldesk.el here,""" start="00:15:35.640" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and I will be available for questions.""" start="00:15:40.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I will be viewing both the pad and the IRC""" start="00:15:42.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and will do a live Q&A after this. See you.""" start="00:15:45.000" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Actually, before I go,""" start="00:15:49.160" video="mainVideo-science" id="subtitle"]]
+[[!template text="""let's show you the GitHub for zetteldesk.el.""" start="00:15:51.280" video="mainVideo-science" id="subtitle"]]
+[[!template text="""Here's the README; if you're interested on it,""" start="00:15:54.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you can see more about it,""" start="00:15:57.120" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and also I have a very in-depth wiki about it""" start="00:15:58.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""with 11 pages, and talking about everything""" start="00:16:02.560" video="mainVideo-science" id="subtitle"]]
+[[!template text="""that happens here.""" start="00:16:06.520" video="mainVideo-science" id="subtitle"]]
+[[!template text="""A lot of what we discussed is in this section""" start="00:16:08.080" video="mainVideo-science" id="subtitle"]]
+[[!template text="""about literature notes.""" start="00:16:11.760" video="mainVideo-science" id="subtitle"]]
+[[!template text="""These documents go a lot more in-depth""" start="00:16:12.920" video="mainVideo-science" id="subtitle"]]
+[[!template text="""in how Zetteldesk works, and also how to use it,""" start="00:16:17.200" video="mainVideo-science" id="subtitle"]]
+[[!template text="""so if you're interested, feel free to read them,""" start="00:16:22.800" video="mainVideo-science" id="subtitle"]]
+[[!template text="""and if you have any problems,""" start="00:16:27.720" video="mainVideo-science" id="subtitle"]]
+[[!template text="""you can open an issue about it;""" start="00:16:30.240" video="mainVideo-science" id="subtitle"]]
+[[!template text="""I will be very active. Thank you.""" start="00:16:31.840" video="mainVideo-science" id="subtitle"]]
+
+
+
+Captioner: hannah
+
+Questions or comments? Please e-mail [vidianosgiannitsis@gmail.com](mailto:vidianosgiannitsis@gmail.com?subject=Comment%20for%20EmacsConf%202022%20science%3A%20Writing%20and%20organizing%20literature%20notes%20for%20scientific%20writing)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/science-before.md b/2022/info/science-before.md
new file mode 100644
index 00000000..5dd6ce02
--- /dev/null
+++ b/2022/info/science-before.md
@@ -0,0 +1,58 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Vidianos Giannitsis shares how he uses Org Roam, org-noter, and zetteldesk.el to manage his literature notes and write articles. Afterwards, he will handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="science">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect stroke-width="3" x="164" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 17-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-science>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T15:45:00Z" end="2022-12-03T16:05:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~10:45 AM - 11:05 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~9:45 AM - 10:05 AM CST (US/Central)<br />Saturday, Dec 3 2022, ~8:45 AM - 9:05 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~7:45 AM - 8:05 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~3:45 PM - 4:05 PM UTC <br />Saturday, Dec 3 2022, ~4:45 PM - 5:05 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~5:45 PM - 6:05 PM EET (Europe/Athens)<br />Saturday, Dec 3 2022, ~9:15 PM - 9:35 PM IST (Asia/Kolkata)<br />Saturday, Dec 3 2022, ~11:45 PM - 12:05 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~12:45 AM - 1:05 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="science-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="science-mainVideo" data="""
+00:00.000 My second brain
+00:28.320 Contents of the talk
+01:40.560 Bibliography management
+02:35.200 Creating literature notes: ivy-bibtex-edit-notes
+03:04.960 org-roam reference template
+04:40.160 Demo
+05:40.840 Annotating with org-noter
+06:44.240 Annotating in English
+07:02.120 Afterthoughts on an article
+07:30.200 Adding a note
+08:21.480 Creating permanent notes from reference material
+09:01.680 The organization problem
+09:21.520 zetteldesk.el
+10:43.600 The zetteldesk-desktop
+11:45.040 Filtering with ivy-bibtex
+12:09.840 Inserting literature
+13:46.200 Composing the final article
+15:19.160 Thanks
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/v8ypuDbDai4WJYu5CbVRYc">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="science-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="science-qanda" data="""
+00:00.000 Introduction
+00:24.000 Q1 - Do you use flipping notes and do you keep them in org-roam?
+03:21.000 Q2 - Does it work only for PDFs or does it work for more formats?
+06:00.000 Q3 - Why use OrgNoter in place of Zotero PDF Reader?
+07:04.000 Q4 - Thoughts on the future of Zettelkasten
+08:16.000 Q4.5 - Collaborative Zettelkasten notes
+12:03.000 Q5 - How do you find a way to get a nice overview of multiple notes to rearrange them?
+15:26.000 Q6 - Can we use Zettelkasten for coding too?
+18:29.000 Q7 - Is Zetteldesk available in Melpa? - Yes
+19:33.000 Conclusion - thoughts about Zettelkasten
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="science-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.webm">Download --answers.webm (13MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.opus">Download --answers.opus (7.2MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/science-nav.md b/2022/info/science-nav.md
new file mode 100644
index 00000000..3bde0317
--- /dev/null
+++ b/2022/info/science-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/lspbridge">lsp-bridge: a smooth-as-butter asynchronous LSP client</a>
+Next by track: <a href="/2022/talks/asmblox">asm-blox: a game based on WebAssembly that no one asked for</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/sqlite-after.md b/2022/info/sqlite-after.md
new file mode 100644
index 00000000..974f0328
--- /dev/null
+++ b/2022/info/sqlite-after.md
@@ -0,0 +1,451 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="sqlite-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello. I'm Andrew Hyatt. I've been working on Emacs,""" start="00:00:00.000" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""with Emacs, and to some extent""" start="00:00:08.556" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""on Emacs for a while. I've written the WebSockets library""" start="00:00:10.540" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and Emacs calc tutorials. I've enjoyed use of""" start="00:00:15.273" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""many of everyone's incredible packages.""" start="00:00:20.046" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""So my thesis for this talk, why I'm giving this talk,""" start="00:00:24.640" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is that I'm interested in SQLite.""" start="00:00:27.133" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think we should be exploring SQLite for applications""" start="00:00:29.061" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""in ways I think the community has shied away from.""" start="00:00:34.954" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'd like to introduce the triples package as a way,""" start="00:00:37.483" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""both easy and with interesting functionality,""" start="00:00:41.951" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that will allow us to build extensible databases""" start="00:00:47.665" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""in a way that is, I think,""" start="00:00:49.154" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a little bit unusual and perhaps compelling, I hope.""" start="00:00:52.583" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""So first of all, why SQLite?""" start="00:00:56.220" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Why is this good? Well, SQLite is now built into Emacs.""" start="00:00:59.227" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""So you get a few things out of this when you use it for data.""" start="00:01:06.080" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""First of all, it's a database.""" start="00:01:12.217" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's extremely good for data, of course.""" start="00:01:14.580" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There's a simplicity to data manipulation""" start="00:01:16.370" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""using a database, compared to data manipulation,""" start="00:01:19.919" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that is, manipulating data in a text file.""" start="00:01:22.028" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Text files are really not built for data.""" start="00:01:25.197" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""So when typically when you need to do this,""" start="00:01:31.034" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""like I know Org Mode is--""" start="00:01:33.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which I'm a huge, huge Org Mode fan--""" start="00:01:35.027" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's all about sort of data in text.""" start="00:01:38.117" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It does work, but you certainly would be""" start="00:01:41.045" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""hard pressed to make sweeping changes""" start="00:01:45.376" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to your database that is represented in text.""" start="00:01:47.360" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's just not well suited for this sort of thing.""" start="00:01:51.954" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It would take a long time,""" start="00:01:53.061" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""where the speed of SQL is incredibly impressive.""" start="00:01:54.964" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think certainly Emacs is not known""" start="00:02:00.220" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""for being extremely speedy.""" start="00:02:04.430" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think the overuse of text""" start="00:02:06.753" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is part of this. Of course, text and using text,""" start="00:02:11.906" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""using files has awesome advantages as well.""" start="00:02:14.614" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'm really here to talk about""" start="00:02:18.468" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the other side of the coin, right?""" start="00:02:20.511" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Everyone can judge""" start="00:02:22.718" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""those advantages and disadvantages""" start="00:02:23.962" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and make their own trade-offs,""" start="00:02:24.646" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but I want to kind of""" start="00:02:25.417" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""make the pitch for SQLite.""" start="00:02:26.021" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""So let's talk about the triples package.""" start="00:02:29.870" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The triples package is a package""" start="00:02:32.860" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that is designed to give you a very generic schema.""" start="00:02:35.489" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You don't have to do,""" start="00:02:40.420" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""for most of the common operations,""" start="00:02:42.006" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you don't have to write SQL yourself.""" start="00:02:43.292" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""A lot of stuff is built in""" start="00:02:45.517" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and is based on a very generic schema.""" start="00:02:47.925" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That is, it's a single table.""" start="00:02:51.036" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That table has, of course, fixed schema.""" start="00:02:53.840" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It basically has three columns.""" start="00:02:55.230" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It actually has four columns.""" start="00:02:57.479" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""In this talk, I'm not going to get into""" start="00:03:00.868" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the fourth column and why, but it's useful.""" start="00:03:01.194" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""So the three columns are subject, predicate,""" start="00:03:04.124" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and object. This is what it's related to""" start="00:03:07.711" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""what we call an RDF format.""" start="00:03:10.362" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""These things basically describe a link.""" start="00:03:13.909" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The link is from the subject to the object.""" start="00:03:17.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The link type is a predicate.""" start="00:03:20.008" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That sounds overly theoretical,""" start="00:03:23.956" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but the point is that you can describe""" start="00:03:26.086" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a lot of things with this format.""" start="00:03:28.033" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You probably describe everything with it.""" start="00:03:32.006" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's very simple because the schema is fixed.""" start="00:03:33.330" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's only this kind of data. That means""" start="00:03:39.227" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""for your application, you define a schema""" start="00:03:42.774" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""in subject, predicate, object format.""" start="00:03:44.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That defines what data you can use,""" start="00:03:47.327" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""what types there are, what properties they have,""" start="00:03:50.073" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""how you can use the system,""" start="00:03:56.070" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and what is legal to do. And this is stored as data.""" start="00:03:57.215" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think as Lisp people,""" start="00:04:01.007" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think we're all very onboard""" start="00:04:03.891" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""with the fact that you have a simple way""" start="00:04:07.540" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to express everything, and you don't have these""" start="00:04:13.913" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""two systems. In this way,""" start="00:04:17.660" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you don't have to have code as a system.""" start="00:04:18.925" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Do you have to load code to use the triples package""" start="00:04:20.872" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to make sure your schema is obeyed?""" start="00:04:24.826" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""No, it's all just built in to this database.""" start="00:04:27.917" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'll describe this. As I said,""" start="00:04:35.214" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's a little bit abstract right now,""" start="00:04:37.037" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but it will become a lot clearer""" start="00:04:39.860" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""when we go through an example,""" start="00:04:42.049" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which we're going to do now.""" start="00:04:46.779" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""As an exercise, let's create Emacs bookmarks,""" start="00:04:50.209" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which basically are three things:""" start="00:04:56.660" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a name, a file, and an annotation.""" start="00:04:57.346" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I may be missing out on functionality.""" start="00:05:01.039" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Of course, everything in Emacs,""" start="00:05:02.365" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""everything has lots and lots of functionality,""" start="00:05:04.773" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but let's just start with this simple thing.""" start="00:05:05.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""First of all, we're going to open up a database.""" start="00:05:08.050" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Pretty simple.""" start="00:05:11.100" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think there's nothing to explain there.""" start="00:05:12.104" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""But here on this line that I'm on right now,""" start="00:05:15.015" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we are saying, okay, there's going to be""" start="00:05:19.107" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a type called bookmark.""" start="00:05:21.433" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's going to have the following properties.""" start="00:05:24.840" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""First, a file, which is unique and a string.""" start="00:05:26.827" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The second is an annotation,""" start="00:05:29.179" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is again unique and a string.""" start="00:05:31.765" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Then we're going to have another type called named.""" start="00:05:34.318" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""First of all, why is it named as part of bookmark?""" start="00:05:37.865" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As I'll get into, it's interesting""" start="00:05:39.809" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""when you start sharing this database""" start="00:05:45.563" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""with other things, not just bookmarks, but other types.""" start="00:05:48.512" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Bookmarks are very similar to many other things""" start="00:05:51.366" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that you might want to expand into.""" start="00:05:54.617" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Those other things have names,""" start="00:05:56.724" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but they're not bookmarks.""" start="00:05:57.087" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's nice to separate these concerns out""" start="00:05:58.270" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and just have another type called named,""" start="00:06:04.124" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which just basically has a name.""" start="00:06:08.373" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We can execute this.""" start="00:06:12.780" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's not interesting to look at these.""" start="00:06:15.747" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that is not all that useful for anything,""" start="00:06:21.440" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It outputs something""" start="00:06:21.799" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but that's okay. What's done is, actually,""" start="00:06:25.908" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's created a database""" start="00:06:28.015" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and it's populated it with the schema.""" start="00:06:32.263" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We can look at this.""" start="00:06:34.046" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We won't go through all of this""" start="00:06:41.479" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""because it's a little bit too much""" start="00:06:43.603" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""for a short presentation like this,""" start="00:06:44.189" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you could see that there's something here""" start="00:06:46.037" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that's like, oh, we have a subject bookmark.""" start="00:06:48.186" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We have a property base/type.""" start="00:06:52.500" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That just means that there's a property""" start="00:06:56.032" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that's defined by the base.""" start="00:06:58.879" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This means this is from the triples package itself.""" start="00:07:00.563" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's not some other package.""" start="00:07:02.249" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Third is, what is the type of this object?""" start="00:07:08.940" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's a schema. This thing could be many types.""" start="00:07:11.526" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As I said, if you have a--""" start="00:07:17.060" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we haven't seen an example yet,""" start="00:07:19.151" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but if you have a bookmark,""" start="00:07:20.236" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's going to have a name type""" start="00:07:21.100" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and a bookmark type.""" start="00:07:23.687" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Everything is multi-typed""" start="00:07:25.695" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and that's kind of a feature""" start="00:07:26.720" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""of this kind of storage system.""" start="00:07:28.147" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'm not going to go through everything,""" start="00:07:32.138" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you can see it's all there in triples,""" start="00:07:33.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the whole schema, everything we just did.""" start="00:07:35.866" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""Let's create a bookmark. Again,""" start="00:07:40.740" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we're going to connect to our database""" start="00:07:42.646" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and we're going to basically set""" start="00:07:46.998" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""an entire subject.""" start="00:07:49.247" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The subject is, it's basically like an entity.""" start="00:07:52.553" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to define a whole entity""" start="00:07:54.240" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""or you could refer to it as an object.""" start="00:07:56.106" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That's a perfectly fine way to look at it, I think.""" start="00:08:00.677" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's going to have some identifier.""" start="00:08:03.910" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That identifier could be anything.""" start="00:08:04.357" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It doesn't have to be a string.""" start="00:08:06.724" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It could really be anything, but we're going""" start="00:08:07.432" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to give it a string called emacs-init.""" start="00:08:09.260" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It does not matter what this identifier is,""" start="00:08:11.370" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""at least for our purposes.""" start="00:08:13.299" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It does matter when you're linking to it,""" start="00:08:17.809" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but I think nothing that I'm about to show you.""" start="00:08:19.915" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This could truly be anything""" start="00:08:22.264" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""because it has a separate name.""" start="00:08:25.831" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'm giving it a name here, which is init.""" start="00:08:28.180" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'm just specifying the named type here""" start="00:08:32.133" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and I'm specifying the bookmark type here""" start="00:08:34.918" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and its values. We're going to do that.""" start="00:08:38.048" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Now, if we look, we see everything we saw before,""" start="00:08:43.220" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but now we have subject emacs-init.""" start="00:08:47.770" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It has a type and it's named.""" start="00:08:52.247" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We also see the same thing two lines down.""" start="00:08:55.974" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This type is also a bookmark,""" start="00:08:57.220" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but the name is init in the named/name,""" start="00:08:58.265" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is like the type is name, named,""" start="00:09:02.820" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and the property is name. It's init.""" start="00:09:05.967" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As you can see, this is just""" start="00:09:08.753" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""how everything looks.""" start="00:09:12.662" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's pretty straightforward""" start="00:09:16.332" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and you can retrieve it.""" start="00:09:18.357" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Now, we're looking at the database,""" start="00:09:19.319" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you don't really have to""" start="00:09:21.604" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""look at the database for... In fact,""" start="00:09:22.690" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I think we're done looking""" start="00:09:23.219" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""at the triples format,""" start="00:09:24.223" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""because I think it's very simple.""" start="00:09:25.106" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You've already got the hang of it, I think.""" start="00:09:29.719" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""Let's retrieve that just to make sure, yes,""" start="00:09:31.366" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we can retrieve it.""" start="00:09:33.070" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to retrieve it and say, okay,""" start="00:09:37.981" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""what do we get when we load the emacs-init subject?""" start="00:09:38.248" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Well, we get a plist of all of its properties,""" start="00:09:43.287" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which then you can use in your application.""" start="00:09:48.698" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There's many more ways to retrieve""" start="00:09:55.631" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and there's many more ways to save.""" start="00:09:57.456" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""In fact, I think the way I did it here""" start="00:09:59.380" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""with set subject is probably not""" start="00:10:01.905" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the right way to do it most of the time.""" start="00:10:04.016" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's usually because it'll erase everything.""" start="00:10:06.782" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's only really to be used when""" start="00:10:08.128" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you're sure you control all the data,""" start="00:10:13.740" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you're never sure because there could be""" start="00:10:15.711" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""other packages that are also using this database,""" start="00:10:16.400" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""they could have their own data.""" start="00:10:19.611" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You don't want to erase""" start="00:10:20.696" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""all the other Emacs init subject data.""" start="00:10:21.343" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""In this case, we did because""" start="00:10:25.015" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we are confident it was a new entity,""" start="00:10:27.700" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but in most cases, the right thing to do is""" start="00:10:30.811" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""just set it by type. Just say,""" start="00:10:31.336" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we're just going to set the bookmark type,""" start="00:10:34.290" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is... The properties are this,""" start="00:10:36.677" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and then the name type""" start="00:10:37.223" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and the properties are that.""" start="00:10:38.105" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That's a way that you could do things.""" start="00:10:42.815" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There's also many retrieval types.""" start="00:10:44.900" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The retrieval types:""" start="00:10:48.527" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you can retrieve by a number of different ways,""" start="00:10:53.756" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which I'm not going to get into,""" start="00:10:56.404" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you can read about in either the source""" start="00:10:58.870" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""or the readme in the package.""" start="00:11:01.242" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""We have backlinks as well.""" start="00:11:10.034" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Let me explain what backlinks are.""" start="00:11:14.540" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There's another feature of the triples.""" start="00:11:15.863" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As I mentioned, these things""" start="00:11:17.173" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""can be thought about as links,""" start="00:11:19.861" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but what could be a link in one direction""" start="00:11:21.850" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""could also be a link in the other direction,""" start="00:11:23.798" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and we basically get this for free.""" start="00:11:25.805" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Here's an example where we are again""" start="00:11:28.396" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""connecting toward bookmark. Here we're going to""" start="00:11:33.808" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""add a new type called tagged.""" start="00:11:35.753" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to give everything in tags.""" start="00:11:38.224" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Here we're saying, okay, there's a type called tagged""" start="00:11:41.614" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and it has a property called tags.""" start="00:11:45.525" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This is not unique, so it's a list basically.""" start="00:11:49.235" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's a list of string.""" start="00:11:52.060" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There also is a type called tag.""" start="00:11:54.327" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This is for things that are tags themselves.""" start="00:11:58.676" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Then it has a type called numbers""" start="00:12:01.403" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and it has what we call a virtual reversed property.""" start="00:12:06.128" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's virtual because it's not actually stored.""" start="00:12:18.004" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We just compute it by reversing""" start="00:12:21.076" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the subject and the object.""" start="00:12:23.742" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This is on tagged tags. When we query this,""" start="00:12:24.307" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we can just say, okay,""" start="00:12:29.260" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""what are all the subjects""" start="00:12:32.007" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that have tagged tags of me, the tag?""" start="00:12:33.269" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""In fact, let me demonstrate that for you.""" start="00:12:38.860" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to set the type on emacs-init.""" start="00:12:39.366" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to add the &quot;tagged&quot; type.""" start="00:12:42.140" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This is the alternate way of setting data""" start="00:12:45.071" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that I mentioned.""" start="00:12:47.018" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This won't erase anything else.""" start="00:12:48.740" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're just adding something here.""" start="00:12:49.925" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're adding this type &quot;tagged&quot;""" start="00:12:51.753" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to our previous bookmark emacs-init.""" start="00:12:54.743" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We're going to add emacs and config""" start="00:12:59.954" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""as the tags. We're going to then""" start="00:13:01.059" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""set emacs as a tag and config as a tag.""" start="00:13:06.867" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That just lets us have this virtual property.""" start="00:13:11.096" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You have to do something.""" start="00:13:15.386" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You can't get it out of thin air.""" start="00:13:16.390" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The design decision we've made is:""" start="00:13:18.734" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you at least need to tag it""" start="00:13:23.427" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""before you get the free property.""" start="00:13:25.509" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""What you should see... Let's try it out.""" start="00:13:32.660" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We got the subject config,""" start="00:13:35.632" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which we've set no data on.""" start="00:13:36.038" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You can tell we're not sending any data.""" start="00:13:37.262" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""If I get that subject, the result is that""" start="00:13:40.669" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it says its members are emacs-init.""" start="00:13:44.821" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That's what a virtual reverse property.""" start="00:13:46.069" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As we tag more things, this just""" start="00:13:49.879" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""continues to work because it's just doing""" start="00:13:53.607" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a SQL query here.""" start="00:13:55.152" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""Besides showing off the backlinks function,""" start="00:13:59.380" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""this also shows off the general way""" start="00:14:01.986" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""you can have extensible entities.""" start="00:14:04.176" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That is, it's possible that someone writes""" start="00:14:07.864" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""a bookmarks package that stores everything""" start="00:14:09.392" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""in a database, in the triples database,""" start="00:14:13.063" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but then someone else can come and say,""" start="00:14:18.055" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""okay, I'm going to define my own types""" start="00:14:21.522" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that's meant to work with this database,""" start="00:14:23.591" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""just like someone could do what I did here,""" start="00:14:25.740" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""just to add simple tagging.""" start="00:14:28.508" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's very easy to do.""" start="00:14:30.875" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This stuff is not that easy to do otherwise.""" start="00:14:32.901" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""To do this in Lisp, I would say it's a little awkward.""" start="00:14:35.932" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""With databases, again, it's not only possible,""" start="00:14:38.962" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's relatively trivial,""" start="00:14:42.674" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""especially with this kind of database.""" start="00:14:43.499" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The benefit is it's super easy to work with.""" start="00:14:49.829" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""With this kind of generic database,""" start="00:14:53.057" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the drawback is it's not all that efficient""" start="00:14:56.042" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""as a special purpose table""" start="00:15:00.312" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that is really built for efficiencies.""" start="00:15:04.382" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""A lot of times you have to do multiple lookups""" start="00:15:06.192" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and things like that.""" start="00:15:08.820" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Again, it's a trade-off for various things.""" start="00:15:09.443" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As you can see, this is like""" start="00:15:11.986" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""one database for everything.""" start="00:15:19.901" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""That means that we don't have to all""" start="00:15:22.067" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""contribute to one giant database.""" start="00:15:29.179" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""All the packages that use triples,""" start="00:15:31.945" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it doesn't have to be one database,""" start="00:15:33.053" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but it's cool if it does.""" start="00:15:35.180" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I don't know what I want to happen""" start="00:15:37.087" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""or what I expect to happen,""" start="00:15:39.394" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but I think an interesting property is that""" start="00:15:41.220" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""this is a way for lots of data to live together""" start="00:15:43.069" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and build off each other in ways that I think""" start="00:15:45.400" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""are hard to do with other forms of table layouts""" start="00:15:49.607" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and things like that.""" start="00:15:55.780" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""Let's talk about a use of it,""" start="00:15:57.008" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is the EKG package.""" start="00:15:59.654" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The EKG package is something I've written""" start="00:16:02.644" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to demonstrate the triples library""" start="00:16:04.590" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and use it for something I think is interesting,""" start="00:16:07.780" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is personal knowledge management systems""" start="00:16:09.410" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""of the same type, of the same genre""" start="00:16:12.420" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that Org Roam is,""" start="00:16:14.385" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but with different design decisions.""" start="00:16:15.287" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I'll show it in action for a little bit.""" start="00:16:18.434" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Let's just look at... it's all tag-based,""" start="00:16:26.532" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""same kind of tags we saw before""" start="00:16:28.360" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""when we were playing around""" start="00:16:30.186" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""with the bookmarks example application,""" start="00:16:32.233" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""What I want to show is: I can look at a tag.""" start="00:16:35.224" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but everything here is...""" start="00:16:35.560" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I could see notes with that tag.""" start="00:16:37.476" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Everything you see here is in the database,""" start="00:16:40.288" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""no files involved.""" start="00:16:42.633" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""All of this is just a thing""" start="00:16:43.199" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that's an entire object, the entire string.""" start="00:16:46.405" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It works. It has tags.""" start="00:16:49.391" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You can see not only this tag,""" start="00:16:56.082" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but all the other tags associated with it""" start="00:16:59.230" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and their notes.""" start="00:17:01.355" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's kind of an interesting way to do things.""" start="00:17:04.860" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""When you capture it, I think it's interesting.""" start="00:17:10.256" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""There's a lot of interesting design elements here.""" start="00:17:12.260" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This tags thing is not part of the buffer.""" start="00:17:22.276" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's not like Org Roam.""" start="00:17:25.819" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You see here in this other tags,""" start="00:17:28.752" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""these are things I've imported from Org Roam.""" start="00:17:29.117" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This is why they look like they do.""" start="00:17:31.925" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""They have their own titles because""" start="00:17:32.231" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I just wrote them all in Org Roam.""" start="00:17:34.020" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""What it looks like, really, for these notes""" start="00:17:37.890" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is that it's just text.""" start="00:17:39.458" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You really don't have to bother with this metadata.""" start="00:17:41.024" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""If I want another tag like pancakes,""" start="00:17:44.616" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I can just add it here. Again, these tags""" start="00:17:46.283" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""will turn into data, triple data.""" start="00:17:53.655" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""The text is just a triple date[??] as well,""" start="00:17:56.740" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but different to triple data.""" start="00:17:59.826" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""All these things are like that.""" start="00:18:01.970" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""You can open up any of these things, et cetera.""" start="00:18:08.363" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""I think the interesting thing here""" start="00:18:12.772" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is to see the code. It's not super interesting""" start="00:18:16.683" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to look at code for too long,""" start="00:18:22.597" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but we don't have that long.""" start="00:18:23.980" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Whenever we connect--""" start="00:18:26.992" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I just want to point out a few things.""" start="00:18:27.655" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Whenever we connect, we have a schema.""" start="00:18:28.820" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We just do this. Every time we connect,""" start="00:18:29.206" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we just make sure it has the right schema.""" start="00:18:31.176" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This way, the user is up to date.""" start="00:18:33.164" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""This schema just looks exactly like""" start="00:18:36.315" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""stuff I showed you in the triples""" start="00:18:38.301" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""when we were looking at bookmarks.""" start="00:18:41.688" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's not complicated.""" start="00:18:43.533" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I even have stuff here with people""" start="00:18:45.100" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to use this as a person database.""" start="00:18:48.211" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I haven't figured out how I'm going to use this yet,""" start="00:18:51.539" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but you can see just to do this,""" start="00:18:52.105" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""it's really trivial and it's pretty easy.""" start="00:18:54.274" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Let's show a few other things,""" start="00:19:01.914" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""like getting all the tags.""" start="00:19:02.499" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Here, we could just say,""" start="00:19:05.845" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""let's get the subjects of type tag.""" start="00:19:07.991" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""We have all the triples,""" start="00:19:10.380" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""all the ones that are of type tag,""" start="00:19:12.903" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""all the things that have a subject.""" start="00:19:15.850" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""All the subjects that have links,""" start="00:19:18.778" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""that have this type, this tag in it,""" start="00:19:22.146" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we can return them all.""" start="00:19:28.338" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""of all these objects.""" start="00:19:30.426" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Basically, it just gives you a list""" start="00:19:30.660" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Again, you can think of these things as objects.""" start="00:19:32.675" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""All the objects of type tag,""" start="00:19:33.244" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""we'll just get them all. Super, super simple.""" start="00:19:35.434" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Triples gives you this functionality""" start="00:19:37.321" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""out of the box. It's not that complicated.""" start="00:19:39.586" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""What I would like to show,""" start="00:19:43.780" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and that shows my thesis for this whole talk,""" start="00:19:45.168" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is this rename tag. Now, think about""" start="00:19:49.519" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""how you would rename a tag in Org Roam""" start="00:19:52.786" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""or anything where the tag is part of the files.""" start="00:19:54.151" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""It's like how you would re-tag everything""" start="00:20:03.014" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""in Org Mode. It's complicated and error-prone""" start="00:20:05.280" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and slow. This is anything,""" start="00:20:09.870" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""this is instantaneous and super easy.""" start="00:20:12.557" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Look, that's it. There's not that many places""" start="00:20:14.764" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""for an error to live here.""" start="00:20:17.256" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""One thing I would like to point out""" start="00:20:19.540" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""is that we are doing direct,""" start="00:20:21.508" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""not everything has to go through""" start="00:20:23.338" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the triples package. Maybe it should,""" start="00:20:24.321" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but the triples package is a fixed format,""" start="00:20:28.293" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""which is why it's okay--""" start="00:20:31.660" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""whether it's a good idea, I'm not sure,""" start="00:20:33.907" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""but it's okay for client packages""" start="00:20:34.070" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""to just directly manipulate the tables.""" start="00:20:39.864" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Here, we're just doing it just to""" start="00:20:42.834" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""update all the tags""" start="00:20:43.938" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""and then remove and set types""" start="00:20:45.266" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""so that the correct thing happens.""" start="00:20:47.892" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""As you can see, it's super, super simple.""" start="00:20:49.120" video="mainVideo-sqlite" id="subtitle"]]
+[[!template new="1" text="""I think this proves my thesis about""" start="00:20:52.147" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""the advantages of applications with SQLite.""" start="00:20:55.375" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Thank you for listening.""" start="00:21:01.527" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I hope this puts ideas in your minds""" start="00:21:02.431" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""about taking advantage of this functionality.""" start="00:21:05.877" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""I hope to see more things""" start="00:21:09.828" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""using the triples library""" start="00:21:11.936" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""or otherwise that take advantage of this.""" start="00:21:12.180" video="mainVideo-sqlite" id="subtitle"]]
+[[!template text="""Thank you for your time.""" start="00:21:16.018" video="mainVideo-sqlite" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sqlite%3A%20Using%20SQLite%20as%20a%20data%20source%3A%20a%20framework%20and%20an%20example)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/sqlite-before.md b/2022/info/sqlite-before.md
new file mode 100644
index 00000000..e0ada947
--- /dev/null
+++ b/2022/info/sqlite-before.md
@@ -0,0 +1,57 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Andrew Hyatt shows how to use SQLite to store and retrieve information using the triples package. Afterwards, he wil handle questions over BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="sqlite">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect stroke-width="3" x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 22-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-sqlite>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: TO_CAPTION_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-03T18:00:00Z" end="2022-12-03T18:25:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~1:00 PM - 1:25 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~12:00 PM - 12:25 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~11:00 AM - 11:25 AM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~10:00 AM - 10:25 AM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~6:00 PM - 6:25 PM UTC <br />Saturday, Dec 3 2022, ~7:00 PM - 7:25 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~8:00 PM - 8:25 PM EET (Europe/Athens)<br />Saturday, Dec 3 2022, ~11:30 PM - 11:55 PM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~2:00 AM - 2:25 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~3:00 AM - 3:25 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="sqlite-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sqlite-mainVideo" data="""
+00:00.000 Introduction
+00:56.220 Why SQLite
+02:29.870 The triples package
+04:50.209 Exercise: Emacs bookmarks
+07:40.740 Creating bookmarks
+09:31.366 Retrieving bookmarks
+11:10.034 Backlinks
+13:59.380 Extensible entities
+15:57.008 EKG package
+18:12.772 The code
+19:43.780 Renaming tags
+20:52.147 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.webm">Download --main.webm (69MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/a26FMpRuCKmn4YZU4ysdrd">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="sqlite-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sqlite-qanda" data="""
+00:29.040 Is this built into Emacs? Multiple schemas, multiple databases?
+01:22.756 What about collaborative editing with this?
+02:22.913 What about using this on multiple computers? How do you synchronize your data?
+03:16.640 Are you planning to further develop EKG?
+04:45.303 Is it then possible to combine the triples DB with some custom tables in the same SQLite file?
+06:01.734 What are your thoughts on adding a timestamp attribute to triples so that the database becomes append-only and by default you return the latest fact for a subject-object pair?
+08:37.040 With EKG what about views like org roam node mind map view? Or org mode virtual view for integration with other org packages?
+09:46.220 Can ordinary lisp data types (lists, symbols, etc) be stored in the database?
+13:41.041 Beyond note-taking, what kind of packages do you think would benefit from triples library?
+15:03.200 Are you trying to create a PIM with EKG? What information do you primarily want to manage?
+17:10.021 What about using other databases programs: PostgreSQL, MongoDB, etc.?
+17:55.899 What is your preferred reference to understand triples/graph dbs? (e.g. think better about schema design)
+18:49.200 Will it slow down with the growth of a database?
+20:39.728 What are your thoughts on allowing for a true graph DB backend?
+22:58.960 Challenges with recording
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="sqlite-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.webm">Download --answers.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.opus">Download --answers.opus (8.3MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/sqlite-nav.md b/2022/info/sqlite-nav.md
new file mode 100644
index 00000000..df7ecc8f
--- /dev/null
+++ b/2022/info/sqlite-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/meetups">Attending and organizing Emacs meetups</a>
+Next by track: <a href="/2022/talks/buttons">Linking personal info with Hyperbole implicit buttons</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/sun-close-after.md b/2022/info/sun-close-after.md
new file mode 100644
index 00000000..f15ea0e2
--- /dev/null
+++ b/2022/info/sun-close-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sun-close%3A%20Sunday%20closing%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/sun-close-before.md b/2022/info/sun-close-before.md
new file mode 100644
index 00000000..f3b222a8
--- /dev/null
+++ b/2022/info/sun-close-before.md
@@ -0,0 +1,4 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><div></div><div class="files resources"><ul></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/sun-close-nav.md b/2022/info/sun-close-nav.md
new file mode 100644
index 00000000..c7f08cc2
--- /dev/null
+++ b/2022/info/sun-close-nav.md
@@ -0,0 +1,6 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/python">Short hyperlinks to Python docs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/sun-open-after.md b/2022/info/sun-open-after.md
new file mode 100644
index 00000000..e11c9bbb
--- /dev/null
+++ b/2022/info/sun-open-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sun-open%3A%20Sunday%20opening%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/sun-open-before.md b/2022/info/sun-open-before.md
new file mode 100644
index 00000000..f3b222a8
--- /dev/null
+++ b/2022/info/sun-open-before.md
@@ -0,0 +1,4 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><div></div><div class="files resources"><ul></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/sun-open-nav.md b/2022/info/sun-open-nav.md
new file mode 100644
index 00000000..a5b07625
--- /dev/null
+++ b/2022/info/sun-open-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/sat-close">Saturday closing remarks</a>
+Next by track: <a href="/2022/talks/survey">Results of the 2022 Emacs Survey</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/survey-after.md b/2022/info/survey-after.md
new file mode 100644
index 00000000..d3d710f3
--- /dev/null
+++ b/2022/info/survey-after.md
@@ -0,0 +1,538 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="survey-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello everyone and thanks for tuning in. I'm Timothy,""" start="00:00:00.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and in this talk, we'll be going over""" start="00:00:06.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the 2022 Emacs User Survey.""" start="00:00:08.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Since this is the first time we're discussing this,""" start="00:00:11.970" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we'll be going over the survey itself a bit,""" start="00:00:15.079" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""how it's being put together and run,""" start="00:00:18.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then we'll have a little taste of the results""" start="00:00:21.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with more analysis to be published in the future.""" start="00:00:24.200" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""To start with though, a bit of background.""" start="00:00:26.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So in 2020, we had an Emacs User Survey""" start="00:00:32.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""run by Adrien Brochard.""" start="00:00:36.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now this is, to the best of my knowledge,""" start="00:00:38.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the first time that a large-scale Emacs User Survey""" start="00:00:41.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""has actually been run.""" start="00:00:45.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""About 7,000 people responded to the survey,""" start="00:00:48.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""so in many respects, it was quite successful.""" start="00:00:50.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And what's significant about this is that""" start="00:00:53.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with this being the first time""" start="00:00:56.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that a large-scale survey has been run,""" start="00:00:57.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it actually provided some insight""" start="00:01:00.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""into questions about how the community is using Emacs""" start="00:01:01.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that allow for much better guesses""" start="00:01:06.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""than just speculation based on the small number of people""" start="00:01:09.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""who respond on the mailing list usually.""" start="00:01:15.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So, why are we doing another survey? Well, to start with,""" start="00:01:16.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in order to get the most value out of an Emacs User Survey,""" start="00:01:24.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's quite helpful if the information in it is recent.""" start="00:01:28.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Furthermore, we can actually get some more value""" start="00:01:32.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""if we can examine trends,""" start="00:01:35.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""shifts in the way that people are using Emacs,""" start="00:01:38.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""where the pain points lie,""" start="00:01:41.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""what people are enjoying the most, etc.""" start="00:01:42.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So in both of these respects,""" start="00:01:45.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's to our benefit if the survey""" start="00:01:46.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is actually a regular event,""" start="00:01:49.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""instead of just something that's run once.""" start="00:01:51.520" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, with this in mind,""" start="00:01:54.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we ran the 2022 Emacs User Survey with the plan""" start="00:01:57.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that this will actually become an annual event.""" start="00:02:00.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""In the design of the survey, there are a few goals here.""" start="00:02:05.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""The main one is of the user community.""" start="00:02:09.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now, user community is a rather nebulous phrase.""" start="00:02:11.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""In this case, what's meant in particular""" start="00:02:14.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is value in questions, for example,""" start="00:02:17.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""things like pain points with Emacs,""" start="00:02:21.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which versions people are using,""" start="00:02:23.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which capabilities people are making the most use of,""" start="00:02:27.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which could potentially be helpful to both emacs-devel""" start="00:02:30.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but also our collection of Emacs package maintainers""" start="00:02:34.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and the whole community.""" start="00:02:36.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Actually, I think going beyond just the packages,""" start="00:02:38.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've also got the people who develop tutorials, guides,""" start="00:02:40.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and all of that sort of surrounding activity,""" start="00:02:46.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which can benefit from a clear understanding""" start="00:02:49.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of how Emacs users use Emacs.""" start="00:02:51.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Separately to that,""" start="00:02:56.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think as an Emacs user myself,""" start="00:02:58.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that it's rather interesting to see""" start="00:03:01.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""how other people are using Emacs""" start="00:03:02.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and what their experience is. So yes, basically,""" start="00:03:04.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""you've got utility and interest""" start="00:03:07.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""as the two separate driving factors""" start="00:03:08.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""as we try to pick questions, which actually can give us""" start="00:03:10.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""all of this without taking up too much""" start="00:03:14.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of the respondents time.""" start="00:03:16.521" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, last time in 2020, the Emacs survey that Adrien ran""" start="00:03:18.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""used, I think Google Forms, if I recall correctly,""" start="00:03:24.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with an option to send in responses manually.""" start="00:03:27.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""This worked, but it's not great,""" start="00:03:28.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""particularly given that this is for a survey""" start="00:03:33.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""being run in an ardently FOSS community.""" start="00:03:35.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Ideally, we actually want""" start="00:03:37.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to find a survey framework""" start="00:03:38.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that respects the priorities of users, is open source,""" start="00:03:40.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""ideally free and open source,""" start="00:03:44.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and is a relatively pleasant experience.""" start="00:03:46.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Unfortunately, looking at available options,""" start="00:03:50.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it seems that one always has to compromise on at least one,""" start="00:03:53.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""if not all of those criteria,""" start="00:03:56.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which is quite far from ideal.""" start="00:03:58.021" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""So what's the obvious solution?""" start="00:04:01.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Okay, we should just write a new survey framework.""" start="00:04:04.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Obviously, this is easier said than done.""" start="00:04:06.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But around a year ago,""" start="00:04:10.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I actually started doing exactly this.""" start="00:04:12.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I've used the programming language Julia quite a bit""" start="00:04:13.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""on a day to day basis. And there just so happens to be""" start="00:04:17.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a web framework for that called Genie.""" start="00:04:21.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So I thought I'd give it a shot.""" start="00:04:23.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And well, here we are today.""" start="00:04:24.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I ended up putting something together,""" start="00:04:26.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which could take a set of questions written in Julia""" start="00:04:28.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and using a survey library,""" start="00:04:34.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""actually pass that into this helpful structure""" start="00:04:35.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then construct HTML forms based on that,""" start="00:04:38.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and ingest results from the HTML forms,""" start="00:04:44.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and just sort of handle that altogether.""" start="00:04:47.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now, all of this ends up being fed into an SQLite DB.""" start="00:04:48.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So everything's there, even part responses.""" start="00:04:52.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""One of the goals with the actual design of this has been""" start="00:04:55.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to just minimize what's actually done on the client side.""" start="00:04:57.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So that means JavaScript, cookies, the whole lot.""" start="00:05:01.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Basically, as far as this could reasonably be taken,""" start="00:05:05.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've just got static HTML being shoved to the user,""" start="00:05:08.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""or respondent rather. And then we just""" start="00:05:14.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""take an HTTP post request back""" start="00:05:16.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and update the results that way.""" start="00:05:18.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now by doing things like actually paging the survey,""" start="00:05:20.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we can allow for incremental saving of results""" start="00:05:24.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and a few other niceties while essentially preserving""" start="00:05:26.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""an experience that doesn't really require any data""" start="00:05:30.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of any particular capabilities, which is sort of""" start="00:05:36.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a nice, clean, minimal experience as far as I'm concerned.""" start="00:05:37.320" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""So how does this actually look like in practice?""" start="00:05:40.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Well, one of the nice things about this is""" start="00:05:45.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""because the question itself is written in Julia,""" start="00:05:48.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we can get some nice features like custom validators""" start="00:05:51.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and other fancy behavior and directly specify""" start="00:05:54.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""how we actually want questions to be registered""" start="00:05:57.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in the database. So here we have, for example,""" start="00:06:01.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""two questions we had from this email survey.""" start="00:06:04.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""One is a multi-select. Another one is just putting in""" start="00:06:06.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the number of years people have used Emacs for.""" start="00:06:09.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think this gives a brief overview of the capabilities.""" start="00:06:14.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""One of the things I'd like to draw particular attention""" start="00:06:16.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to here is in the multi-select,""" start="00:06:19.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""you'll see an array of options,""" start="00:06:20.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the first one of which actually maps for different value""" start="00:06:22.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to be stored for convenience.""" start="00:06:24.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And then the final one is a special one, :other,""" start="00:06:25.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and you can see that's a bit different to the rest""" start="00:06:29.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""where it's got that colon function,""" start="00:06:30.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's a symbol, not a string.""" start="00:06:32.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And this is quite a nice one because the way""" start="00:06:33.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that this framework's been designed,""" start="00:06:37.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""when we have an :other value like that,""" start="00:06:39.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""instead of it just being a sort of tick box &quot;Other&quot;,""" start="00:06:41.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it actually provides the option to write""" start="00:06:44.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""your own different response to all of the above.""" start="00:06:47.200" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Okay, so at the very end, we've now got""" start="00:06:50.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a completely FOSS survey framework, rather nice.""" start="00:06:55.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So the set of what were these...""" start="00:06:58.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Decent array of input types.""" start="00:07:00.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It would be nice to expand, but at the moment""" start="00:07:01.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think we could just about describe it as a rich set.""" start="00:07:02.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Zero JavaScript required, but a little bit useful""" start="00:07:04.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for progressive enhancement.""" start="00:07:07.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""As demonstrated, we can get some fancy validation going on.""" start="00:07:08.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And then because we've got the results""" start="00:07:12.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""tied into this quite nicely,""" start="00:07:16.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we can actually have them available live""" start="00:07:18.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and in quite a number of formats.""" start="00:07:21.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I'm not sure how much you saw in the architecture diagram,""" start="00:07:23.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but we've got all sorts of things here.""" start="00:07:25.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""CSV, TSV, plain text, JSON,""" start="00:07:27.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""just grab a copy of the SQLite database,""" start="00:07:29.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but only the relevant bits.""" start="00:07:32.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Or something called JLD2,""" start="00:07:33.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which preserves a lot of type information""" start="00:07:35.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and a few other nice things.""" start="00:07:38.000" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, what are we going to do going forward from here?""" start="00:07:39.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Well, there are a few minor issues here.""" start="00:07:43.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For example, there's a memory leak issue which is going on,""" start="00:07:46.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""resulting in the service being restarted,""" start="00:07:48.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think every day or two, while the survey was running.""" start="00:07:51.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I actually have the suspicion""" start="00:07:54.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that that's largely responsible for""" start="00:07:56.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""about 1% of respondents, which is about 75 people,""" start="00:07:57.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""who described the survey experience as not great.""" start="00:08:01.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Overall though, the feedback has been quite positive.""" start="00:08:04.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""There's been some detailed written feedback,""" start="00:08:08.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but just from the quick great/okay/not great options,""" start="00:08:09.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we had about two-thirds of people saying""" start="00:08:12.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that the user experience was great,""" start="00:08:14.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which is really nice to hear the first time being run.""" start="00:08:16.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""A few other things would be nice to add, for example,""" start="00:08:19.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in future control flow. By this, I mean""" start="00:08:22.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the option to present different questions""" start="00:08:25.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""based on previous answers""" start="00:08:27.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""would be quite nice to streamline the experience.""" start="00:08:29.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For example, having a set of questions""" start="00:08:31.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for first-time respondents or people who are involved""" start="00:08:33.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in the packaging side of things""" start="00:08:37.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""without actually cluttering the experience""" start="00:08:42.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for everybody else. That'd be quite nice.""" start="00:08:45.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Further to this, all of this,""" start="00:08:46.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think on top of the standard web interface,""" start="00:08:48.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it'd be quite nice to actually write a server API.""" start="00:08:51.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And the particular reason why I mentioned this""" start="00:08:53.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is because this could potentially allow for""" start="00:08:55.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""basically an Emacs survey package.""" start="00:08:58.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I mean, we already use Emacs for so many things,""" start="00:09:00.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""might as well fill the survey out from within it as well.""" start="00:09:03.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Okay, so this is how the survey has been conducted.""" start="00:09:05.520" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, what are the responses look like?""" start="00:09:11.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now, at this stage, I was actually hoping""" start="00:09:13.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to get into some somewhat sophisticated analysis""" start="00:09:16.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""because there's quite a bit that you can dig out""" start="00:09:18.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of the data responses that we've received.""" start="00:09:22.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""However, unfortunately, I've been much more limited on time""" start="00:09:24.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""than I'd hoped for, so that's going to have to come later.""" start="00:09:27.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For now, we're just going to take a bit of a peek""" start="00:09:30.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""at some of the really basic answers.""" start="00:09:33.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Well, it's not even really analysis.""" start="00:09:35.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Expect to see lots of pie charts, basically.""" start="00:09:38.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But there's still a bit of interest there,""" start="00:09:40.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""so we'll go through a bit of that""" start="00:09:43.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and just give a bit of a tease""" start="00:09:44.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""as to what might come in the future.""" start="00:09:47.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So to sum up for starters,""" start="00:09:50.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've had about 6,500 responses.""" start="00:09:51.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It is worth noting that a thousand of those are partials,""" start="00:09:55.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""so people who gave up on the survey partway through.""" start="00:09:58.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Given that the 2020 survey had about 7000 responses,""" start="00:10:02.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I'll tell you we're basically on par here.""" start="00:10:05.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""This ran over a month and interestingly,""" start="00:10:07.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""about half of these respondents""" start="00:10:10.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""did not participate in the 2020 survey.""" start="00:10:12.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think at this point,""" start="00:10:13.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's not really clear what to make of that.""" start="00:10:16.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""There's been a two-year gap between the surveys.""" start="00:10:17.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It's been done, well, it's been done quite differently,""" start="00:10:21.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and yes, there's not enough, really, to say.""" start="00:10:25.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What could be interesting though is actually,""" start="00:10:29.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""once this starts running regularly,""" start="00:10:32.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we can see whether there's regular churn""" start="00:10:33.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in the survey respondents,""" start="00:10:36.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""or if we have a consistent core""" start="00:10:38.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with people who respond each year,""" start="00:10:40.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then just people who come by every now and then and go,""" start="00:10:42.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""&quot;Oh, why not respond to this year's survey?&quot;""" start="00:10:46.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But we're going to have to wait a bit to actually see""" start="00:10:47.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""how people treat the survey.""" start="00:10:51.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now these responses came from quite a wide range of places""" start="00:10:52.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've got 115 nations represented here. Collectively,""" start="00:10:57.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""these ones have spent about a thousand hours""" start="00:11:02.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""giving us information. So I think, if nothing else,""" start="00:11:04.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""just from the effort that people have put into""" start="00:11:06.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""actually giving us useful data to work with,""" start="00:11:10.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's worth giving at least a good effort""" start="00:11:12.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to actually trying to extract some value""" start="00:11:13.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""out of these responses.""" start="00:11:16.000" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, overall we found a lot of responses came from America,""" start="00:11:17.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""no surprises there, but as mentioned,""" start="00:11:20.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've got a good mix around the globe.""" start="00:11:23.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""The usual suspects for the rest of the responses,""" start="00:11:24.021" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a whole bunch in Europe, a whole bunch around Asia,""" start="00:11:29.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a bit in Australasia as well and yes,""" start="00:11:33.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""there's nothing particularly surprising here,""" start="00:11:36.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""there's a lot of inline expectations.""" start="00:11:38.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What I find a bit more interesting, though,""" start="00:11:41.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is if we actually normalise""" start="00:11:42.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the number of responses from each nation""" start="00:11:45.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""by the population of said nations,""" start="00:11:48.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""essentially giving a popularity of Emacs""" start="00:11:50.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""or at least of Emacs early respondents for each nation,""" start="00:11:54.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we end up finding that Europe, particularly Scandinavia,""" start="00:11:57.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""becomes a bit of a hotspot.""" start="00:12:00.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So I'm not sure what's going on""" start="00:12:02.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in Sweden, Finland and Norway,""" start="00:12:04.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but it seems to be particularly popular around there.""" start="00:12:07.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It's also worth noting that we now find""" start="00:12:10.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that the proportion of respondents""" start="00:12:14.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in countries like America, Canada, Australia""" start="00:12:18.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and most of Europe actually becomes""" start="00:12:21.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""quite comparable with each other,""" start="00:12:24.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which yes, once again, sort of lines up""" start="00:12:26.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with these responses, expectations from the last slide.""" start="00:12:30.240" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Okay, getting into some of the other""" start="00:12:32.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""demographic information.""" start="00:12:36.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""The demographic information was new to this survey.""" start="00:12:38.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""In the 2020 survey, people were asked what they think""" start="00:12:40.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of being asked about some demographic information""" start="00:12:44.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in a future survey, and the overwhelming response is, &quot;Sure,""" start="00:12:47.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I don't really mind.&quot; And so that's what we've done here.""" start="00:12:50.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""One of the ones of somewhat interest""" start="00:12:52.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is the age gender breakdown. So we expect Emacs""" start="00:12:56.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to be used predominantly among people in software""" start="00:12:59.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and programming and within the industry,""" start="00:13:03.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think it's quite widely documented""" start="00:13:05.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to have about a sort of 75-25%, roughly, split""" start="00:13:08.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""between male and female.""" start="00:13:14.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Interestingly, in Emacs,""" start="00:13:14.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's a much more aggressively-biased result.""" start="00:13:19.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So we had about 96% of respondents are male""" start="00:13:22.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with just 4% for the rest. Interestingly, though,""" start="00:13:28.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""if we look at the young respondents,""" start="00:13:34.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""say for example, under 25, we go from 96% male to 88%.""" start="00:13:35.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So it's fair to say that the young respondents are""" start="00:13:41.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in this respect, a somewhat more diverse group.""" start="00:13:46.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Hopefully, as future surveys go on,""" start="00:13:49.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we'll see this continue not die off""" start="00:13:52.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to the sort of well, at this point,""" start="00:13:54.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's more like 99% if you look at the older ages.""" start="00:13:58.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But we'll see.""" start="00:14:02.920" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Occupations was an interesting slide as well.""" start="00:14:04.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Interesting question as well.""" start="00:14:07.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We've got the usual suspects here. I mean,""" start="00:14:09.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it's a text editor, well, Lisp machine""" start="00:14:11.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""masquerading as a text editor, mainly used for programming,""" start="00:14:15.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and so we expect lots of software development""" start="00:14:17.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and that sort of thing. But that's only about""" start="00:14:20.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""just over half of the responses.""" start="00:14:23.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We've got a huge chunk from academia,""" start="00:14:25.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then really just an odd bag""" start="00:14:28.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of all sorts of other things,""" start="00:14:30.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""including things which you wouldn't really associate""" start="00:14:30.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with programming and software at all.""" start="00:14:33.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Things like creative writing, publishing, legal, yes.""" start="00:14:35.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And then you've got this chunk of Other,""" start="00:14:39.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which is I think here is""" start="00:14:41.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the fourth most popular option here.""" start="00:14:43.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And what we have here is about 500 different responses""" start="00:14:46.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""from a huge range of activities.""" start="00:14:49.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It's really quite interesting to read things like""" start="00:14:51.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think, things like &quot;naval officer&quot;,""" start="00:14:54.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and just... All sorts of surprising occupations for Emacs.""" start="00:14:56.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And I think this is a particular area""" start="00:15:01.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""because I imagine compared to other code editors,""" start="00:15:04.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""sort of your VS Code, remember like""" start="00:15:10.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that Emacs may have a particularly diverse set""" start="00:15:13.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of industry occupations represented in its users.""" start="00:15:18.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now, if you look at where the response actually came from,""" start="00:15:23.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've got the usual suspects up top,""" start="00:15:28.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Hacker News and r/emacs.""" start="00:15:31.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But then we actually get a much more graduated breakdown""" start="00:15:33.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""than in the 2020 survey.""" start="00:15:40.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We do think familiar results here like IRC, Telegram,""" start="00:15:43.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Emacs China, and Twitter.""" start="00:15:46.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But now you've got a few new entries,""" start="00:15:48.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""things like the Fediverse, Discourse, Matrix,""" start="00:15:50.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which didn't pop up previously.""" start="00:15:53.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So I think this is yes, quite a nice sign in terms of""" start="00:15:56.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""actually hitting a wide range""" start="00:15:59.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of pockets of Emacs users across different platforms,""" start="00:16:02.521" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which bodes well for the potential representiveness""" start="00:16:06.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of this survey.""" start="00:16:10.320" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Unsurprisingly, if we're talking about Emacs""" start="00:16:11.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and particularly people who are quite engaged in it,""" start="00:16:15.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which are the respondents to this survey,""" start="00:16:17.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we find that we also get quite a high degree of care""" start="00:16:19.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for free and open source software.""" start="00:16:25.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So if you have a look here,""" start="00:16:27.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""only about a quarter of users""" start="00:16:30.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""didn't express a strong preference towards FOSS software.""" start="00:16:35.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""In fact, we had over a quarter saying that""" start="00:16:39.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""they would accept significant or even any compromise""" start="00:16:43.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to use a FOSS user software""" start="00:16:49.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""over a proprietary alternative,""" start="00:16:52.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which given the nature of Emacs,""" start="00:16:55.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""not terribly surprising,""" start="00:16:59.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but a strong showing nonetheless.""" start="00:17:00.640" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now, let's start getting to things""" start="00:17:02.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which are actually useful for""" start="00:17:05.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""potential Emacs development and packaging.""" start="00:17:07.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""If you're thinking about supporting Emacs versions,""" start="00:17:11.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""it looks like you can do fantastically well""" start="00:17:13.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in terms of hitting most users if you support Emacs 27+.""" start="00:17:16.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""That hits about 96% of respondents.""" start="00:17:20.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Interestingly though, you can actually make an argument""" start="00:17:23.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for being even more aggressive.""" start="00:17:26.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I mean, if you have a look at Emacs 28+,""" start="00:17:27.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that's still over three quarters of respondents.""" start="00:17:30.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We've got, at this point, a quarter""" start="00:17:32.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""using the unreleased HEAD version,""" start="00:17:35.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""even though it's getting close to release.""" start="00:17:37.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Obviously here, as stated, we're hitting""" start="00:17:40.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a sort of more engaged with the community""" start="00:17:43.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""subset of Emacs users, but still,""" start="00:17:44.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think it's interesting to see that""" start="00:17:47.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""with Emacs's increasingly frequent update schedule,""" start="00:17:49.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that users are actually picking up those updates""" start="00:17:52.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""quite promptly as they roll out.""" start="00:17:55.000" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Continuing on with how people actually use Emacs: languages.""" start="00:17:56.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We've got the usual suspects here: lots of Python,""" start="00:18:02.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""quite a bit of JavaScript and C, lots of shell.""" start="00:18:05.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What I find quite interesting though is""" start="00:18:08.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""if we actually bring in""" start="00:18:11.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the 2020 Stack Overflow language usage survey data,""" start="00:18:12.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and that maps quite well""" start="00:18:16.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to the array of language options we provided here.""" start="00:18:19.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""They had a general Lisp option,""" start="00:18:20.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which I've folded into Common Lisp""" start="00:18:21.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""since they listed Clojure separately.""" start="00:18:23.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think that seems like a fairly safe bet.""" start="00:18:26.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""But other than that, the only languages that we missed""" start="00:18:29.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""are Scheme and Elisp.""" start="00:18:31.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What we can do is we can look at""" start="00:18:35.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the relative popularity of different languages""" start="00:18:37.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""from our Emacs user survey compared to Stack Overflows.""" start="00:18:41.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What do we find? Well, Clojure and Common Lisp""" start="00:18:44.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""far above the rest, I imagine in no small part due to""" start="00:18:48.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the fantastic SLIME and Cider packages.""" start="00:18:51.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Following that, we see Haskell being particularly prominent,""" start="00:18:54.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then a collection of other languages,""" start="00:18:59.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""your Erlang, Elixir, Julia, Perl and the rest.""" start="00:19:00.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And then lastly, if we have a look at the ones""" start="00:19:06.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which have significantly diminished popularity""" start="00:19:10.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""compared to Stack Overflow, we end up with, I think,""" start="00:19:13.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""what I could probably cast as more enterprising languages.""" start="00:19:17.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Things like C#, Java, Typescript and the like.""" start="00:19:20.160" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""So, that's interesting. Now, earlier""" start="00:19:25.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""when we were looking at the split of Emacs users,""" start="00:19:31.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we found that we actually had a fair few""" start="00:19:33.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in more creative areas, like writing and publishing.""" start="00:19:37.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So if looking at prose, we'd expect a decent chunk""" start="00:19:42.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to be using Emacs for prose, but it's actually more""" start="00:19:44.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""than just a little bit, it's a little slice.""" start="00:19:47.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We've got a whopping about a third of users""" start="00:19:48.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""saying they frequently use Emacs for writing prose.""" start="00:19:50.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I'd imagine that the availability""" start="00:19:54.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of things like Org mode and AUCTeX""" start="00:19:56.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""probably help like this.""" start="00:19:57.800" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Moving on to other packages, or more packages,""" start="00:20:03.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we've actually got a very similar split here""" start="00:20:05.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to the 2020 survey. Org has seen a bit of a growth""" start="00:20:08.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in popularity. We've got some new arrivals here as well.""" start="00:20:13.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For example, Vertico has popped onto the scene""" start="00:20:16.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and overtaken Ivy here, along with""" start="00:20:18.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a few other new packages like Consult.""" start="00:20:21.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Other than that, quite comparable.""" start="00:20:24.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""What's rather interesting, though, I find here is that""" start="00:20:27.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""when you have people who listed a small number of packages,""" start="00:20:30.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""they actually predominantly listed packages""" start="00:20:33.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""other than the most common set.""" start="00:20:39.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So if we have a lot of people who only listed one package,""" start="00:20:41.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""basically two-thirds of that,""" start="00:20:43.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""or actually three-quarters of those responses""" start="00:20:48.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""were saying other packages,""" start="00:20:51.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""despite the fact that overall packages""" start="00:20:53.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""other than the highlighted selection here""" start="00:20:56.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""only constitute a quarter of responses.""" start="00:20:58.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So there might be something a bit more to look at there.""" start="00:21:01.400" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now when people are using packages,""" start="00:21:04.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we also asked what types of documentation""" start="00:21:07.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""people would like to see more of on package READMEs.""" start="00:21:11.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Basically we've got a big mix here.""" start="00:21:14.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""It seems like generally people are interested in""" start="00:21:17.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""seeing more in various forms, whether it be tutorials,""" start="00:21:20.080" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""overviews, screenshots, comparisons, or clips and videos.""" start="00:21:23.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So full READMEs with a lot of context""" start="00:21:29.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""seem to be quite desirable from this.""" start="00:21:32.920" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now moving forward, what are we going to do?""" start="00:21:38.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So 800 people gave some detailed feedback on the survey.""" start="00:21:42.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""That's quite nice. I'm going to be taking a good read""" start="00:21:45.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of all of those responses and use that""" start="00:21:47.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to improve the process and also the set of questions.""" start="00:21:50.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Now all of you can also give some feedback on the questions,""" start="00:21:55.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""both that you found most useful in this survey,""" start="00:22:00.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""ones that you think might not add much value,""" start="00:22:02.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and/or new questions""" start="00:22:04.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that you think might be a good addition.""" start="00:22:07.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Once I've done a bit more analysis,""" start="00:22:08.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""particularly the more sophisticated analysis""" start="00:22:11.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which I'm planning, which will probably come out actually""" start="00:22:13.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""maybe in the first quarter of next year,""" start="00:22:17.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we can see which questions there seem to have provided""" start="00:22:18.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the most interesting or surprising results""" start="00:22:22.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and those are probably worth keeping.""" start="00:22:25.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Lastly, once we actually have an API""" start="00:22:26.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and potentially even an Emacs package,""" start="00:22:31.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we could automate a large number of the questions,""" start="00:22:33.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""things like Emacs version, set of packages used,""" start="00:22:36.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and that could just streamline the experience""" start="00:22:39.000" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""of actually filling out the survey,""" start="00:22:41.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""make it a bit more frictionless.""" start="00:22:42.280" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Now talking of the question of questions,""" start="00:22:44.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a quick survey is a good survey.""" start="00:22:47.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""If we're asking people to dedicate their time""" start="00:22:49.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to fill out this, it's good to try to get as much value""" start="00:22:52.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""without asking them to donate much of their time.""" start="00:22:56.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""How has the survey done in this respect?""" start="00:22:59.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I'm actually very happy with how it's done.""" start="00:23:02.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""We get a few comments from the feedback saying""" start="00:23:04.120" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that it was a bit of a long side,""" start="00:23:06.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but the median time was about 12 minutes,""" start="00:23:07.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""which doesn't seem too bad, and most commonly""" start="00:23:10.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we saw people completing it in about 8 minutes.""" start="00:23:13.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For a once-per-year survey,""" start="00:23:16.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I think this seems fairly reasonable.""" start="00:23:18.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Getting closer to a 5-10 minute range would be nice,""" start="00:23:20.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but this isn't far off.""" start="00:23:24.280" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Lastly, we're also going to be considering""" start="00:23:26.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""how long the survey is open for.""" start="00:23:30.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So from the initial opening date,""" start="00:23:32.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""what we have here is a plot of""" start="00:23:36.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the page which people ended up on""" start="00:23:38.480" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and when they started the survey.""" start="00:23:41.920" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""So what we can see is a huge spike in the first few days.""" start="00:23:43.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I've just realised that this plot""" start="00:23:46.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""is actually labelled incorrectly.""" start="00:23:50.240" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Please disregard the minutes to complete the survey.""" start="00:23:53.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""This should be days after survey opening""" start="00:23:55.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""that a response is actually submitted.""" start="00:23:58.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""And what we have here is a big spike""" start="00:24:01.520" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""in popularity in the first week basically,""" start="00:24:05.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then it trickles down""" start="00:24:08.680" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""to a fairly consistent level after that.""" start="00:24:10.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""I'm about to publish a last call for survey responses,""" start="00:24:11.960" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""so I'll see if any final bump happens,""" start="00:24:15.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""but this indicates that we can probably just""" start="00:24:18.280" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""have the survey open for a week or two""" start="00:24:20.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and that should be sufficient.""" start="00:24:23.080" video="mainVideo-survey" id="subtitle"]]
+[[!template new="1" text="""Alright, so what's the general plan going forwards?""" start="00:24:25.200" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Well, as stated earlier, the idea is to run this annually""" start="00:24:30.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and then consistently improve the questions,""" start="00:24:35.640" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""the experience, and the analysis that's done.""" start="00:24:38.400" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""This year has been the hardest by far""" start="00:24:41.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""because a lot had to be set up from scratch.""" start="00:24:43.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""The hope is that moving on from here,""" start="00:24:45.840" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""a lot of it can be reused.""" start="00:24:50.160" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""For example, with my comments about""" start="00:24:51.800" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""more sophisticated analysis being down the line,""" start="00:24:54.040" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""once that's all worked out,""" start="00:24:56.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""as long as nothing changes too drastically,""" start="00:24:58.440" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""we should be able to reuse a lot of that work""" start="00:25:00.720" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""quite easily in future years.""" start="00:25:03.560" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Alright, that's it for now.""" start="00:25:05.760" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""Hopefully, you've found this an interesting peek""" start="00:25:08.600" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""into how the survey is operated""" start="00:25:11.880" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and some of the initial results,""" start="00:25:13.360" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""and hopefully, I'll see you around next year""" start="00:25:15.320" video="mainVideo-survey" id="subtitle"]]
+[[!template text="""for the 2023 survey. Thanks for listening.""" start="00:25:18.920" video="mainVideo-survey" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20survey%3A%20Results%20of%20the%202022%20Emacs%20Survey)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/survey-before.md b/2022/info/survey-before.md
new file mode 100644
index 00000000..088e0197
--- /dev/null
+++ b/2022/info/survey-before.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+<div class="vid"><video controls preload="none" id="survey-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="survey-mainVideo" data="""
+00:00.000 Introduction
+00:26.040 The 2020 Emacs User Survey
+01:54.360 The design of the survey
+03:18.560 Survey frameworks
+04:01.021 Writing a new survey framework in Julia
+05:40.200 In practice
+06:50.560 Results
+07:39.600 Going forward
+09:11.160 Responses
+11:17.000 Geography
+12:32.280 Gender
+14:04.440 Occupations
+16:11.320 Free and open source software
+17:02.440 Emacs versions
+17:56.360 Languages
+19:25.800 Prose
+20:03.400 Packages
+21:04.920 Documentation
+21:38.440 Moving forward
+22:44.200 Time
+23:26.200 How long the survey is open for
+24:25.200 Plan going forward
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.webm">Download --main.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/gYfDLkR2DTkd1ZW54hXATW">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/survey-nav.md b/2022/info/survey-nav.md
new file mode 100644
index 00000000..20ca2a79
--- /dev/null
+++ b/2022/info/survey-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/sun-open">Sunday opening remarks</a>
+Next by track: <a href="/2022/talks/orgyear">This Year in Org</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/info/tramp-after.md b/2022/info/tramp-after.md
new file mode 100644
index 00000000..6d849143
--- /dev/null
+++ b/2022/info/tramp-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [shoshin@cicadas.surf](mailto:shoshin@cicadas.surf?subject=Comment%20for%20EmacsConf%202022%20tramp%3A%20Elisp%20and%20the%20TRAMP%3A%20How%20to%20NOT%20write%20code%20you%20don%27t%20have%20to)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/tramp-before.md b/2022/info/tramp-before.md
new file mode 100644
index 00000000..1f37b892
--- /dev/null
+++ b/2022/info/tramp-before.md
@@ -0,0 +1,16 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+<div class="schedule-in-context schedule-svg-container" data-slug="tramp">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 10:00-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="94" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:10 Org workflows for developers</title> <rect x="454" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:30- 2:50 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="517" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:20- 3:40 Putting Org Mode on the Indieweb</title> <rect x="596" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:00- 4:05 Emacs development updates</title> <rect x="658" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(663,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:15- 4:25 Fanfare for the Common Emacs User</title> <rect x="682" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(695,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:45-10:55 justl: Driving recipes within Emacs</title> <rect x="164" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(177,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to" data-slug="tramp"> <title> 11:05-11:35 Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="196" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue" stroke-width="3"></rect> <g transform="translate(241,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)" font-weight="bold"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:10 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(389,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:35- 1:45 Top 10 reasons why you should be using Eshell</title> <rect x="431" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:10- 2:30 Emacs was async before async was cool</title> <rect x="486" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(515,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:05- 3:25 The Wheels on D-Bus</title> <rect x="572" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(601,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:20 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 30-min talk followed by live Q&A (<https://emacsconf.org/current/tramp/room>)
+Status: Waiting for video from speaker
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T16:05:00Z" end="2022-12-04T16:35:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~11:05 AM - 11:35 AM EST (US/Eastern)</div><div class="others">Sunday, Dec 4 2022, ~11:05 AM - 11:35 AM EST (US/Eastern)</div></div><div><a href="/2022/watch/dev/">Find out how to watch and participate</a></div>
+
+
+# Description
+
+
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/tramp-nav.md b/2022/info/tramp-nav.md
new file mode 100644
index 00000000..11d3205f
--- /dev/null
+++ b/2022/info/tramp-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2022/talks/justl">justl: Driving recipes within Emacs</a>
+Next by time: <a href="/2022/talks/buttons">Linking personal info with Hyperbole implicit buttons</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/treesitter-after.md b/2022/info/treesitter-after.md
new file mode 100644
index 00000000..f34bdb39
--- /dev/null
+++ b/2022/info/treesitter-after.md
@@ -0,0 +1,257 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="treesitter-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hey everyone, my name is Abin Simon""" start="00:00:00.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and this talk is about &quot;Tree-sitter:""" start="00:00:03.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Beyond Syntax Highlighting.&quot;""" start="00:00:05.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For those who are not aware of what Tree-sitter is,""" start="00:00:08.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""let me give you a quick intro.""" start="00:00:10.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Tree-sitter, at its core, is a parser generator tool""" start="00:00:11.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and an incremental parsing library.""" start="00:00:17.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""What it essentially means is that it gives you""" start="00:00:19.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""an always up-to-date""" start="00:00:22.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""AST [abstract syntax tree] of your code.""" start="00:00:23.155" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""In the current Emacs frame, what you see to the right""" start="00:00:24.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""is the AST tree produced by Tree-sitter""" start="00:00:27.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""of the code that is on the left.""" start="00:00:30.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For example, if you go to this &quot;if&quot; statement,""" start="00:00:33.560" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""you can see it goes here.""" start="00:00:37.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It is also really good at handling errors.""" start="00:00:38.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For example, if I were to delete this [if statement],""" start="00:00:41.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""it still parses out a tree as much as it can,""" start="00:00:44.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but with an error node.""" start="00:00:47.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Now let's see how we can query the tree""" start="00:00:50.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to get the information that we need.""" start="00:00:51.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's first try to get all the identifiers in the buffer.""" start="00:00:54.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It highlights all the identifiers in the buffer,""" start="00:01:01.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but let's say we want to get something""" start="00:01:04.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""a little more precise.""" start="00:01:05.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's say we wanted to get this &quot;i&quot; here.""" start="00:01:07.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This, in our case, would be this identifier""" start="00:01:10.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""inside this assignment expression""" start="00:01:13.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""inside this &quot;for&quot; statement.""" start="00:01:15.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""We can write it out like this.""" start="00:01:27.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I hope this gives you a basic idea""" start="00:01:29.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""of how Tree-sitter works and how you can query""" start="00:01:31.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to get the information that you need.""" start="00:01:34.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""First of all, let's see how Tree-sitter can help us""" start="00:01:37.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""with syntax highlighting.""" start="00:01:39.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is the default syntax highlighting by Emacs for SQL.""" start="00:01:41.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now let's see how Tree-sitter helps.""" start="00:01:46.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is the syntax highlighting in Emacs""" start="00:01:52.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""which Tree-sitter enabled.""" start="00:01:54.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""You'll see that we're able to target""" start="00:01:56.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""a lot more things and highlight them.""" start="00:01:58.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""That said, you don't always have to""" start="00:02:01.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""highlight everything.""" start="00:02:03.139" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I personally prefer a much simpler theme.""" start="00:02:04.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Now let's see how Tree-sitter helps you simplify""" start="00:02:15.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""adding custom syntax highlighting to your code.""" start="00:02:17.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is a Python file which has""" start="00:02:20.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""a class and a few member functions.""" start="00:02:22.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Anyone who has used Python will know that""" start="00:02:25.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""the &quot;self&quot; keyword, while it is passed in as an argument,""" start="00:02:27.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""it has more meaning than that.""" start="00:02:32.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's see if you can use Tree-sitter""" start="00:02:34.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to highlight just the &quot;self&quot; keyword.""" start="00:02:35.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""If you look at the Tree-sitter tree,""" start="00:02:38.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""you can see that this is the first identifier""" start="00:02:40.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""in the list of parameters for a function definition.""" start="00:02:43.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is how you would query for the first identifier""" start="00:02:45.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""inside parameters inside a function definition.""" start="00:02:55.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now, if you see here, it also matches &quot;cls&quot;,""" start="00:02:59.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but let's restrict it to match just &quot;self&quot;.""" start="00:03:02.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now we have a Tree-sitter query that identifies""" start="00:03:11.360" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""the first argument to the function definition""" start="00:03:14.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and is also called &quot;self&quot;.""" start="00:03:16.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""We can use this to apply custom highlighting onto this.""" start="00:03:19.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is pretty much all the code""" start="00:03:22.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that you'll need to do this.""" start="00:03:25.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""The first block here is essentially to say to""" start="00:03:26.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Tree-sitter to highlight anything with python.self""" start="00:03:29.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""with the face of custom-set.""" start="00:03:32.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now the second block here essentially is""" start="00:03:35.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""how we match for that.""" start="00:03:37.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now if you go back into a Python buffer""" start="00:03:39.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and re-enable python-mode, we'll see that &quot;self&quot;""" start="00:03:41.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""is highlighted differently.""" start="00:03:44.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""How about creating text objects?""" start="00:03:47.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Tree-sitter can help there too.""" start="00:03:48.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For those who don't know, text objects""" start="00:03:50.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""is an idea that comes from Vim,""" start="00:03:53.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and you can do things like select word,""" start="00:03:54.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""delete word, things like that.""" start="00:03:57.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""There are other text objects like line and paragraph.""" start="00:04:00.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For each text object, you can have operations""" start="00:04:06.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that are defined on them.""" start="00:04:09.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For example, delete, copy, select, comment,""" start="00:04:09.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""all of these are operations that you can do.""" start="00:04:13.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's try and use Tree-sitter to add more text objects.""" start="00:04:16.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is a plugin that I wrote""" start="00:04:19.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""which lets you add more text objects into Emacs.""" start="00:04:20.560" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It helps you code aware text objects""" start="00:04:25.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""like functions, conditionals, loops, and such.""" start="00:04:27.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's see an example scenario of how""" start="00:04:31.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""something like this could come in handy.""" start="00:04:34.360" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For example, I can select inside this condition""" start="00:04:35.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""or inside this function and do things like that.""" start="00:04:39.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's say I want to take this conditional,""" start="00:04:42.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""move to the next function, and create it here.""" start="00:04:44.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""What I would do is something like""" start="00:04:47.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""delete the conditional, move to the next function,""" start="00:04:49.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""create a conditional there, and paste.""" start="00:04:52.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's try another example.""" start="00:04:56.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's say I want to take this and move it to the end.""" start="00:04:57.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""If I had to do it without text objects,""" start="00:05:01.360" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I'd probably have to go back to the previous comma,""" start="00:05:02.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""delete till next comma, find the closing bracket,""" start="00:05:06.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and paste before.""" start="00:05:10.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""That works, but let's see""" start="00:05:11.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""how Tree-sitter can simplify it.""" start="00:05:14.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""With Tree-sitter, I can say delete the argument,""" start="00:05:16.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""go to the end of the next argument, and then paste.""" start="00:05:19.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Tree-sitter essentially helps Emacs""" start="00:05:22.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""understand the code better semantically.""" start="00:05:25.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Here is yet another use case.""" start="00:05:27.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I work at a remote company,""" start="00:05:29.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and I often find myself being in a call""" start="00:05:31.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""with my teammates, explaining the code to them.""" start="00:05:33.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""And one thing that really comes in handy""" start="00:05:35.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""is the narrowing capability of Emacs.""" start="00:05:38.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Specifically, the fancy-narrow package.""" start="00:05:39.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I use it to narrow just the function,""" start="00:05:43.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""or I could narrow to the conditional.""" start="00:05:44.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Next to the end, the list would be code folding.""" start="00:05:48.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is a package which uses Tree-sitter""" start="00:05:51.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to improve the code folding functionalities of Emacs.""" start="00:05:54.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Code folding has always been this thing""" start="00:05:57.560" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that I've had a love-hate relationship with.""" start="00:06:00.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It usually works most of the time,""" start="00:06:02.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but then fails if the indentation is wrong""" start="00:06:04.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""or we do something weird with the arguments.""" start="00:06:06.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""But now with Tree-sitter in the mix,""" start="00:06:09.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""it's a lot more precise.""" start="00:06:11.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I can fold comments, I can fold functions,""" start="00:06:12.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I can fold conditionals. You get the idea.""" start="00:06:17.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""I work with Kubernetes, which means I end up""" start="00:06:20.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""having to write and read a lot of YAML files.""" start="00:06:23.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""And navigating big YAML files is a mess.""" start="00:06:28.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""The two main problems are figuring out where I am,""" start="00:06:31.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and two, navigating to where I want to be.""" start="00:06:35.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's see how Tree-sitter can help us with both of this.""" start="00:06:38.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is an example YAML file.""" start="00:06:41.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""To be precise, this is the values file""" start="00:06:43.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""of the Redis helm chart.""" start="00:06:47.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I'm somewhere in the file on tag under image,""" start="00:06:48.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but I don't know what this tag is for.""" start="00:06:52.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""But with the help of Tree-sitter,""" start="00:06:54.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I've been able to add this information""" start="00:06:57.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""into my header line.""" start="00:06:59.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""If you see in the header line,""" start="00:07:00.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""you'll see that I'm under sentinel.image.""" start="00:07:02.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Now let's see how this helps with navigation.""" start="00:07:05.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's say I want to enable persistence on master node.""" start="00:07:08.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""So with the help of Tree-sitter,""" start="00:07:12.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I was able to enumerate every field""" start="00:07:18.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that is available in this YAML file,""" start="00:07:20.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and I can pass that information onto imenu,""" start="00:07:22.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""which I can then use to go to exactly where I want to.""" start="00:07:24.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Also, since we're not dealing with""" start="00:07:28.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""any language specific constructs,""" start="00:07:30.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""this is very easy to extend to""" start="00:07:32.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""other similar languages""" start="00:07:34.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""or config files in this case.""" start="00:07:35.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""So for example, this is a JSON file,""" start="00:07:37.440" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and I can navigate to location or project.""" start="00:07:39.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""And just like in YAML, it shows me where I'm at.""" start="00:07:44.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I'm in projects.name,""" start="00:07:48.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""or I'm inside projects.highlights.""" start="00:07:49.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Or how about Nix?""" start="00:07:52.880" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is my home.nix file.""" start="00:07:55.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Again, I can search for services,""" start="00:07:57.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and this lists me all the services that I've enabled.""" start="00:08:01.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""How about just services.description?""" start="00:08:04.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""So this is all the services""" start="00:08:06.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that I've enabled and have descriptions.""" start="00:08:08.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Now that we have seen this for config files,""" start="00:08:10.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""let's see how similar things apply for code.""" start="00:08:12.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Just like in config files,""" start="00:08:15.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I can see which function I'm under,""" start="00:08:16.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and if I go to the next function, it changes.""" start="00:08:18.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Okay, here is something really awesome.""" start="00:08:21.560" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This is probably one of my favorites,""" start="00:08:23.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and one of the things that actually made me understand""" start="00:08:26.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""how powerful Tree-sitter is, and got me into it.""" start="00:08:30.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I work with a lot of Go code,""" start="00:08:34.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and anyone who has worked with Go will tell you""" start="00:08:35.680" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""how repetitive it is handling errors.""" start="00:08:38.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""For those who don't write Go,""" start="00:08:41.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""let me give you a rough idea of what I'm talking about.""" start="00:08:42.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""If you want to bubble up the error,""" start="00:08:45.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""the way you would do it is just to return the error""" start="00:08:47.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to the function that called it.""" start="00:08:49.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Over here, you can either return nil or an empty value,""" start="00:08:51.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and at the end, you return error.""" start="00:08:55.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Let's try and use Tree-sitter to do this.""" start="00:08:57.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Using the help of Tree-sitter, let's make Emacs""" start="00:09:00.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""go back, figure out what the return arguments are,""" start="00:09:03.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""figure out what their default values are,""" start="00:09:06.422" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and automatically fill in the return statement.""" start="00:09:08.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It would look something like this.""" start="00:09:11.480" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""In my case, it filled in the complete form,""" start="00:09:13.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""it figured out what the return arguments are,""" start="00:09:16.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""what their types are,""" start="00:09:18.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and what their default values are,""" start="00:09:19.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and filled out the entire return.""" start="00:09:20.960" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""And since this is a template,""" start="00:09:22.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I can go to the next function, do the same thing,""" start="00:09:24.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""next function, do the same thing,""" start="00:09:27.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""next function, do the same thing.""" start="00:09:29.560" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""Here is a really fascinating use case of Tree-sitter,""" start="00:09:31.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""structural editing.""" start="00:09:34.360" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""You might be aware of plugins like paredit,""" start="00:09:36.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""which seems to &quot;know&quot; your code.""" start="00:09:38.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""This sort of takes it onto another level.""" start="00:09:40.280" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It is in its early stages, but what this lets you do""" start="00:09:42.520" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""is completely treat your code as an AST,""" start="00:09:46.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and edit as if it's a tree instead of characters.""" start="00:09:48.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""I am not going to go much in depth into it,""" start="00:09:52.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but if you're interested, there is a talk""" start="00:09:54.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""from last year's EmacsConf around it.""" start="00:09:57.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""I'm just going to end this with one last tiny thing""" start="00:09:59.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that I found in the tree-sitter-extras package.""" start="00:10:02.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It's this tiny macro called tree-sitter-save-excursion.""" start="00:10:04.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It works pretty much like save-excursion, but better.""" start="00:10:07.600" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It uses the Tree-sitter syntax tree""" start="00:10:11.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""instead of just the code""" start="00:10:13.400" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""to figure out where to restore the position.""" start="00:10:14.800" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""My main use case for this was with code formatters.""" start="00:10:16.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""Since the code moves around a lot""" start="00:10:20.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""when it gets formatted,""" start="00:10:22.080" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""save-excursion was completely useless,""" start="00:10:23.160" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""but this came in handy.""" start="00:10:25.000" video="mainVideo-treesitter" id="subtitle"]]
+[[!template new="1" text="""I'll just leave you off with""" start="00:10:26.240" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""what the future of Tree-sitter looks like for Emacs.""" start="00:10:28.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""So far, every Tree-sitter related feature""" start="00:10:31.120" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""that I've talked about is powered by this library.""" start="00:10:33.760" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""But there is talk about Tree-sitter coming into the core.""" start="00:10:36.040" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""It will most probably be landing in Emacs 29,""" start="00:10:42.320" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""and if you want to check out the work on Tree-sitter""" start="00:10:45.840" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""in core Emacs, you can check out""" start="00:10:48.720" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""the features/tree-sitter branch.""" start="00:10:51.200" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""You'll probably see more and more features and packages""" start="00:10:52.920" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""relying upon Tree-sitter, and even major modes""" start="00:10:56.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""being powered by Tree-sitter.""" start="00:10:59.640" video="mainVideo-treesitter" id="subtitle"]]
+[[!template text="""And that's a wrap from me. Thank you.""" start="00:11:01.560" video="mainVideo-treesitter" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [mail@meain.io](mailto:mail@meain.io?subject=Comment%20for%20EmacsConf%202022%20treesitter%3A%20Tree-sitter%20beyond%20syntax%20highlighting)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/treesitter-before.md b/2022/info/treesitter-before.md
new file mode 100644
index 00000000..45e483d5
--- /dev/null
+++ b/2022/info/treesitter-before.md
@@ -0,0 +1,21 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, Abin Simon shares many ways in which Tree-sitter can help improve your text editing workflow. Afterwards, he will answer questions via IRC.
+
+<div class="vid"><video controls preload="none" id="treesitter-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="treesitter-mainVideo" data="""
+00:00.000 Opening
+00:24.201 Introduction to Tree-sitter
+00:50.280 Querying Tree-sitter tree
+01:37.040 Syntax highlighting
+02:15.640 Custom syntax highlighting
+03:47.120 Text objects
+05:48.760 Code folding
+06:20.480 Navigating config files
+08:10.480 Navigating code
+08:21.560 Intelligent templates
+09:31.520 Structural editing
+09:59.080 tree-sitter-save-excursion
+10:26.240 The future
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.opus">Download --main.opus (8.1MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/4AKhgQA71ewnyhDUsBnfKt">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/treesitter-nav.md b/2022/info/treesitter-nav.md
new file mode 100644
index 00000000..9f8cda8a
--- /dev/null
+++ b/2022/info/treesitter-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/school">Back to school with Emacs</a>
+Next by track: <a href="/2022/talks/handwritten">How to incorporate handwritten notes into Emacs Orgmode</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/watch.md b/2022/info/watch.md
new file mode 100644
index 00000000..a72cd9bc
--- /dev/null
+++ b/2022/info/watch.md
@@ -0,0 +1,9 @@
+<!-- Automatically generated by emacsconf-publish-watch-pages -->
+[[!sidebar content=""]]
+# Tracks
+
+<table width="100%"><tr><th>Watch page</th><th>IRC channel (libera.chat)</th><th>Alternative for streaming player</th><th>Low res</th></tr>
+<tr><td><a href="/2022/watch/gen">General</a></td><td><a href="https://chat.emacsconf.org/?join=emacsconf-gen">#emacsconf-gen</a></td><td><a href="https://live0.emacsconf.org/gen.webm">https://live0.emacsconf.org/gen.webm</a></td><td><a href="${480p}">gen-480p.webm</a></tr>
+<tr><td><a href="/2022/watch/dev">Development</a></td><td><a href="https://chat.emacsconf.org/?join=emacsconf-dev">#emacsconf-dev</a></td><td><a href="https://live0.emacsconf.org/dev.webm">https://live0.emacsconf.org/dev.webm</a></td><td><a href="${480p}">dev-480p.webm</a></tr></table>
+
+<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <title> Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="8" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(39,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs"> <title> Back to school with Emacs</title> <rect x="75" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(106,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <title> How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="125" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(139,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <title> Writing and organizing literature notes for scientific writing</title> <rect x="191" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(222,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <title> Attending and organizing Emacs meetups</title> <rect x="400" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(414,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative"> <title> The Emacs Buddy initiative</title> <rect x="450" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(464,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <title> The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="483" y="15" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas"> <title> Real estate and Org table formulas</title> <rect x="583" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(614,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <title> Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="633" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <title> Edit live Jupyter notebook cells with Emacs</title> <rect x="700" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(714,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <title> orgvm: a simple HTTP server for org</title> <rect x="750" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(764,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <title> Tree-sitter beyond syntax highlighting</title> <rect x="100" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(114,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <title> lsp-bridge: complete asynchronous LSP client</title> <rect x="133" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(164,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <title> asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="183" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(197,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <title> Emacs should become a Wayland compositor</title> <rect x="241" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(255,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <title> Using SQLite as a data source: a framework and an example</title> <rect x="400" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(431,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <title> Revisiting the anatomy of Emacs mail user agents</title> <rect x="475" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(523,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <title> Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="583" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(614,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev"> <title> Bidirectional links with eev</title> <rect x="658" y="75" opacity="0.8" width="8" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(664,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs"> <title> Short hyperlinks to Python docs</title> <rect x="683" y="75" opacity="0.8" width="8" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(689,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs"> <title> Haskell code exploration with Emacs</title> <rect x="708" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(756,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></g> <g transform="translate(0,150)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <title> Results of the 2022 Emacs Survey</title> <rect x="8" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(39,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org"> <title> This Year in Org</title> <rect x="58" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(72,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <title> Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="100" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(131,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <title> Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="166" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(180,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <title> Linking personal info with Hyperbole implicit buttons</title> <rect x="216" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(230,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <title> Powerful productivity with Hyperbole and Org Mode</title> <rect x="400" y="15" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(448,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers"> <title> Org workflows for developers</title> <rect x="483" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(514,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <title> GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="550" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(581,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <title> Putting Org Mode on the Indieweb</title> <rect x="633" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <title> Fanfare for the Common Emacs User</title> <rect x="700" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(714,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction"> <title> rde Emacs introduction</title> <rect x="100" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs"> <title> justl: Driving recipes within Emacs</title> <rect x="175" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(189,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <title> Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="208" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(256,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs"> <title> Getting detached from Emacs</title> <rect x="400" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(414,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <title> Top 10 reasons why you should be using Eshell</title> <rect x="458" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(472,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool"> <title> Emacs was async before async was cool</title> <rect x="516" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(547,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus"> <title> The Wheels on D-Bus</title> <rect x="608" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(639,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs"> <title> Pre-localizing Emacs</title> <rect x="700" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(731,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></g></svg> \ No newline at end of file
diff --git a/2022/info/wayland-after.md b/2022/info/wayland-after.md
new file mode 100644
index 00000000..c4ee53cd
--- /dev/null
+++ b/2022/info/wayland-after.md
@@ -0,0 +1,163 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="wayland-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hello EmacsConf and hello fellow Emacs fans.""" start="00:00:00.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""My name is Michael Bauer, and I'm from Germany.""" start="00:00:08.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I'm gonna talk to you about &quot;Why and how Emacs""" start="00:00:10.920" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""should become a Wayland compositor.&quot;""" start="00:00:13.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And it already kinda is a Wayland compositor.""" start="00:00:17.200" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""This talk is composed by Wayland and Emacs.""" start="00:00:21.740" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""If I'm talking about a Wayland compositor""" start="00:00:25.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""or Emacs as Wayland compositor,""" start="00:00:26.840" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I mean it in the sense that""" start="00:00:29.360" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""EXWM is an X window manager. I hope you know EXWM.""" start="00:00:30.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""So, why?""" start="00:00:36.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Emacs can do Wayland now, that was a stopper""" start="00:00:41.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""before, and now it's solved with `pgtk` branch.""" start="00:00:44.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It makes the Emacs toolbox bigger,""" start="00:00:49.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""which is always a good thing.""" start="00:00:53.240" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And the cool thing about Wayland, which is not""" start="00:00:55.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""possible under X is, it can run standalone""" start="00:00:58.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""on the Linux kernel interface, or nested under X,""" start="00:01:02.280" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""or even nested under Wayland.""" start="00:01:06.840" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""The compositor features of Emacs doesn't mean""" start="00:01:09.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""it has to take over the whole output.""" start="00:01:13.840" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It can use them, even if it's just like""" start="00:01:16.960" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""a normal window or normal program.""" start="00:01:20.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And last reason is,""" start="00:01:23.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I want to keep living inside Emacs""" start="00:01:25.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and Wayland is the future, apparently.""" start="00:01:27.240" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""EXWM use case is the first use case.""" start="00:01:31.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""You take a Wayland surface and put it inside""" start="00:01:35.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""an Emacs window. You see it right below.""" start="00:01:38.400" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""The video of me is a Wayland surface,""" start="00:01:41.520" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and it's inside an Emacs window managed by Emacs.""" start="00:01:45.880" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Emacs does the input, and the clipboard handling,""" start="00:01:50.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and can insert itself here, and do great things.""" start="00:01:53.480" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And it's a possibility to Lispify the Linux desktop,""" start="00:01:59.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""as Emacs Lispifies the command line.""" start="00:02:03.200" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""The other use case is the XWidget use case.""" start="00:02:08.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I don't know if you know XWidgets.""" start="00:02:12.960" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's embedded X windows inside Emacs.""" start="00:02:17.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""There's a web browser available in Emacs.""" start="00:02:19.720" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""With Wayland, you could embed anything that can""" start="00:02:24.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""create a Wayland surface like video, web, or 3D.""" start="00:02:27.520" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Think OpenGL, something like""" start="00:02:32.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""EmacsGL would be possible.""" start="00:02:34.880" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And we wouldn't have just images like we have so far.""" start="00:02:38.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""So, how to implement this Wayland compositor?""" start="00:02:46.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I'm going to tell you how I did it,""" start="00:02:50.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""or I did this demo I'm showing you right now.""" start="00:02:52.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""First of all, how does Wayland work?""" start="00:02:57.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Wayland is a protocol in XML.""" start="00:03:00.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's a server and client, and they share a set of""" start="00:03:04.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""objects, and the objects have methods.""" start="00:03:11.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""They are specified in the protocol,""" start="00:03:13.960" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and Wayland also says how the server""" start="00:03:16.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and client talk to each other.""" start="00:03:24.080" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""First blocker for Emacs becoming a Wayland""" start="00:03:25.720" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""compositor is that Emacs and Wayland both have""" start="00:03:33.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""their own event loop, and you can't merge them too.""" start="00:03:37.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""But you don't have to merge them""" start="00:03:41.880" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""because you can just make Emacs speak Wayland.""" start="00:03:45.800" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""So, Emacs becomes a Wayland client,""" start="00:03:48.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and there's an extra server Emacs is talking to.""" start="00:03:50.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""So, we need a minimal Wayland server that does all""" start="00:03:53.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""the stuff Emacs can't do and do the rest in Emacs.""" start="00:03:59.160" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""---The minimal Wayland server, I did it in wlroots.""" start="00:04:03.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""That's the library behind Sway. I think it's""" start="00:04:07.800" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""the Wayland library to do stuff like this.""" start="00:04:13.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I implemented four different things to make it work.""" start="00:04:20.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's these three letter acronyms on the left.""" start="00:04:26.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's Emacs, Wayland, and then it's a server,""" start="00:04:30.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""a client, a protocol, and buffers.""" start="00:04:34.520" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""The server is written in C and it's mostly tinywl.""" start="00:04:38.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's the example of wlroots,""" start="00:04:44.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and it's around 1000 lines of code.""" start="00:04:46.280" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""ewc, the Wayland client in Emacs,""" start="00:04:52.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""is the thing I'm most proud of.""" start="00:04:54.960" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's 300 lines of code, and it is a""" start="00:04:58.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""fully featured Wayland client in Emacs.""" start="00:05:02.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""With this, Emacs can speak Wayland,""" start="00:05:08.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and then I implemented Emacs Wayland protocol.""" start="00:05:11.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It more or less allows Emacs to become a Wayland""" start="00:05:18.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""window manager, so it's not actually the compositor.""" start="00:05:21.280" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""The compositor stays in C, but Emacs is""" start="00:05:24.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""now a Wayland window manager!""" start="00:05:27.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And the last thing is Emacs Wayland buffers.""" start="00:05:31.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's the window manager part.""" start="00:05:34.520" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's around 500 lines of code,""" start="00:05:35.880" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and it does the buffer management inside""" start="00:05:38.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Emacs windows, or floating right like you see me""" start="00:05:41.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""now floating on the right.""" start="00:05:45.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It works, but it is still buggy,""" start="00:05:48.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and it is also missing input handling,""" start="00:05:51.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""so there's more code to come for this to work.""" start="00:05:54.320" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Some caveats about this approach.""" start="00:06:01.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""wlroots is around 60 kilo LoCs (Line of Code)""" start="00:06:05.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and in active development.""" start="00:06:09.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""They have like a slogan 60 kilo locs of code""" start="00:06:12.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""you had to write anyway to make a Wayland""" start="00:06:16.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""compositor. And no, you don't have to write it.""" start="00:06:19.760" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""But I still remember when it was like 50 kilo locs,""" start="00:06:22.520" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and now it's 60. And it's like a moving target.""" start="00:06:25.840" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I think it could be quite a lot of work""" start="00:06:29.680" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""to keep up with it.""" start="00:06:32.480" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Yeah, it could be quite a bit of work.""" start="00:06:34.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Some windows don't like to keep the aspect ratios.""" start="00:06:41.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""You tell them and you have to crop them.""" start="00:06:46.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And the interface I use in wlroots for doing this,""" start="00:06:49.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""`wlr_scene`, can't do cropping yet,""" start="00:06:53.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""so this doesn't work.""" start="00:06:57.280" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Another problem is with GTK.""" start="00:07:01.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Once Wayland is enabled and it stays on.""" start="00:07:03.240" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""This doesn't make sense.""" start="00:07:11.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Okay, if you kill the Wayland server,""" start="00:07:12.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""GTK kills Emacs, that's not a good thing.""" start="00:07:15.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And it's still a bit of work and fussing needed""" start="00:07:18.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""to get this to work reliably.""" start="00:07:21.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It's quite buggy right now.""" start="00:07:23.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And that brings me to my call to action.""" start="00:07:26.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I think making Emacs Wayland capable is""" start="00:07:30.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""a further step to make an Emacs OS.""" start="00:07:34.440" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""It gains output and input handling.""" start="00:07:39.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Output handling is already there,""" start="00:07:41.360" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""input handling is still missing,""" start="00:07:44.120" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""but Emacs can manage monitors, outputs,""" start="00:07:45.760" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""different frames if it's like nested,""" start="00:07:49.720" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And inputs, keyboards, simulation keys,""" start="00:07:53.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""stuff like that.""" start="00:07:57.080" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""We could use it in more ways for Emacs display, maybe.""" start="00:07:58.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Wayland just manages simple pixel buffers,""" start="00:08:02.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""so it's a protocol for managing pixel buffers.""" start="00:08:05.720" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And in a sense, we could go back to""" start="00:08:09.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""the old X ways and maybe even ditch GTK.""" start="00:08:12.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I don't know, but why need it?""" start="00:08:15.560" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""We can composite without it.""" start="00:08:18.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Let's make buffer menus, buffer world, buffer.""" start="00:08:20.600" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Emacs Wayland protocol, like I did it,""" start="00:08:27.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""allows a very concise design, and it allows""" start="00:08:29.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""to improve on the EXWM code base.""" start="00:08:34.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""And I wrote KISS style because EXWM has""" start="00:08:38.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""workspace management integrated.""" start="00:08:41.840" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I don't think that's needed, like Emacs does it.""" start="00:08:45.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Why do you have to do something extra?""" start="00:08:50.600" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""So why do it?""" start="00:08:53.640" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""To finish the call to action,""" start="00:08:56.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""if this is the thing you want to see in Emacs,""" start="00:09:00.040" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""maybe you want to get involved, have some ideas,""" start="00:09:03.280" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""so we could discuss it.""" start="00:09:06.600" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I'm looking forward to discuss with you""" start="00:09:10.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""and hear your questions and ideas.""" start="00:09:14.960" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""I want to say a big thank you to the""" start="00:09:21.000" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""organizers of EmacsConf and the other speakers""" start="00:09:24.200" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""for making this event possible.""" start="00:09:26.600" video="mainVideo-wayland" id="subtitle"]]
+[[!template text="""Thank you, and see you.""" start="00:09:29.000" video="mainVideo-wayland" id="subtitle"]]
+
+Questions or comments? Please e-mail [perma-curious@posteo.de](mailto:perma-curious@posteo.de?subject=Comment%20for%20EmacsConf%202022%20wayland%3A%20Emacs%20should%20become%20a%20Wayland%20compositor)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/wayland-before.md b/2022/info/wayland-before.md
new file mode 100644
index 00000000..e257f59b
--- /dev/null
+++ b/2022/info/wayland-before.md
@@ -0,0 +1,10 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+# Talk
+
+<div class="vid"><video controls preload="none" id="wayland-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.webm">Download --main.webm (15MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.opus">Download --main.opus (6.1MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt">Download --main.vtt</a></li><li><a href="https://toobnix.org/w/enc6bnYbm2gHpwrBa6bVjR">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="wayland-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.webm" />${captions}<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="wayland-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.webm">Download --answers.webm (78MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.opus">Download --answers.opus (13MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/wayland-nav.md b/2022/info/wayland-nav.md
new file mode 100644
index 00000000..f4977e88
--- /dev/null
+++ b/2022/info/wayland-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/buddy">The Emacs Buddy initiative</a>
+Next by track: <a href="/2022/talks/meetups">Attending and organizing Emacs meetups</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2022/info/workflows-after.md b/2022/info/workflows-after.md
new file mode 100644
index 00000000..b9b92295
--- /dev/null
+++ b/2022/info/workflows-after.md
@@ -0,0 +1,451 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="workflows-mainVideo-transcript"></a>
+# Transcript
+
+[[!template new="1" text="""Hello. Welcome to my first ever EmacsConf talk.""" start="00:00:00.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is really exciting for me.""" start="00:00:04.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I've done lots of conferences,""" start="00:00:06.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but rarely ones this technical and this nerdy.""" start="00:00:08.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I also feel like""" start="00:00:12.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I have something interesting to share.""" start="00:00:13.508" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I come to Emacs relatively late in my career,""" start="00:00:15.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""only about six years ago,""" start="00:00:18.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but I've been absolutely amazed""" start="00:00:20.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""at the innovation and commitment of the community""" start="00:00:22.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to do things their own way.""" start="00:00:25.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Oftentimes, these become things""" start="00:00:28.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that are not readily available anywhere else.""" start="00:00:30.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, as I've been using Emacs""" start="00:00:33.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""(and Org mode specifically)""" start="00:00:35.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""a great deal in my day-to-day workflows,""" start="00:00:37.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I've been leaning more and more into""" start="00:00:39.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""some of these tips and tricks.""" start="00:00:41.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I find that there is almost every day""" start="00:00:43.607" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that I discover some useful tweak""" start="00:00:46.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that can make my development better.""" start="00:00:48.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I want to share them with you now.""" start="00:00:50.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""[Future George]: Hey, hold on!""" start="00:00:53.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Who are you?""" start="00:00:54.874" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: I'm you from the future!""" start="00:00:56.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Oh, nice. How good.""" start="00:01:00.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""No, I'm you from, like, a month from now.""" start="00:01:02.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Look, you know how these talks are pre-recorded,""" start="00:01:05.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and you know how you've spent the last two years""" start="00:01:08.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""criticizing conference speakers""" start="00:01:10.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""for trying to do the same old thing""" start="00:01:12.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and not creatively adapting""" start="00:01:14.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to the online conference medium?""" start="00:01:15.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Well, you are recording this back in November.""" start="00:01:17.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm in December when everyone is watching this""" start="00:01:20.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""for the first time.""" start="00:01:23.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That is something we can do now.""" start="00:01:24.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: Okay, so this is a gimmick.""" start="00:01:27.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Cool! And I see you still haven't figured out""" start="00:01:29.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""how to remove backgrounds with OBS.""" start="00:01:32.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: Oh my god! It's such a pain,""" start="00:01:35.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I have to get a plugin or something.""" start="00:01:37.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, yes, it's kind of a gimmick,""" start="00:01:40.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but I also have a cool point.""" start="00:01:42.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You know, how you just said""" start="00:01:44.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that you discover something new every day?""" start="00:01:46.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Well, your talk isn't that long,""" start="00:01:48.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I found a bunch of cool new workflow synths.""" start="00:01:49.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: Oh, okay, that makes sense.""" start="00:01:52.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm starting a new job in the intervening time.""" start="00:01:55.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: Exactly!""" start="00:01:58.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, I have more stuff I want to add.""" start="00:01:59.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: Oh, and I bet that""" start="00:02:02.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""once we set the ground rules,""" start="00:02:03.740" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the audience might have""" start="00:02:05.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""some of their own suggestions.""" start="00:02:07.136" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That is a good idea.""" start="00:02:08.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Okay, go away now.""" start="00:02:11.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: Fine, but""" start="00:02:11.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""aren't you gonna explain the dino?""" start="00:02:13.574" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: This is EmacsConf, dude.""" start="00:02:15.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You think a dinosaur built out of""" start="00:02:18.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""boxes and old dishwasher parts""" start="00:02:20.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""is the weirdest background thing we'll see?""" start="00:02:22.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Both making dinosaur roaring sound: ROAAAAR!]""" start="00:02:24.207" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Okay, bye now.""" start="00:02:27.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Hey everyone, you heard the idea.""" start="00:02:30.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is going to be a thinly-veiled attempt""" start="00:02:33.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to show you stuff about""" start="00:02:35.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Emacs and Org mode, specifically,""" start="00:02:36.940" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that I think is super cool and immediately useful""" start="00:02:38.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""while you're doing development.""" start="00:02:41.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Let's define the scope of Org development workflow""" start="00:02:43.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""as something specific you do with Org mode""" start="00:02:46.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that helps in certain common""" start="00:02:49.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""development related activities.""" start="00:02:50.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, tie-dye me from the future said""" start="00:02:52.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""he's got some more ideas""" start="00:02:54.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""beyond what I'm presenting here.""" start="00:02:56.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm sure many of you have ideas as well.""" start="00:02:58.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, we're going to share a collaborative document,""" start="00:03:01.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and let's all as we're listening to this""" start="00:03:07.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""be talking, and chatting, and entering""" start="00:03:10.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""our own ideas and workflows,""" start="00:03:11.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""so that we can learn and improve together.""" start="00:03:13.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""And now with that, let's begin.""" start="00:03:15.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I've got a ton of ground to cover,""" start="00:03:17.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I want to start by talking about note-taking.""" start="00:03:20.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Shrink down! [transition]""" start="00:03:23.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Note-taking is incredibly important.""" start="00:03:25.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""We can't keep all this stuff in our heads.""" start="00:03:30.074" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, for example, I find myself with""" start="00:03:33.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the need to learn about the solid project.""" start="00:03:36.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This right here is the solid project,""" start="00:03:41.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I want to play around with it.""" start="00:03:44.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I am going to start by creating a note for it.""" start="00:03:47.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, one of the things that I want to do""" start="00:03:50.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""is explore one of their tutorials.""" start="00:03:53.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That's the site I just saw.""" start="00:03:57.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I can go ahead and create a note for myself.""" start="00:03:58.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Right, &quot;Solid React Example&quot;,""" start="00:04:03.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and maybe a set of stuff ending on there.""" start="00:04:10.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to clone this project,""" start="00:04:12.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which I've already done,""" start="00:04:14.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I can pull it up right here.""" start="00:04:15.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, I can pull it up right here,""" start="00:04:18.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I can now start to explore it.""" start="00:04:22.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, for example, this code base sounds…,""" start="00:04:24.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it seems interesting.""" start="00:04:26.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to want to""" start="00:04:27.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""store a link to this in my code.""" start="00:04:28.996" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to run `org-store-link`,""" start="00:04:31.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I can come in here and say,""" start="00:04:34.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""let's explore structure. Local link,""" start="00:04:37.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and here I'm going to put that right there.""" start="00:04:48.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, at any given time I can come into this note""" start="00:04:50.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and be thrown right into the structure.""" start="00:04:52.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""I want to go and now start investigating the code,""" start="00:04:54.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but before doing that""" start="00:04:58.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to take an extra step""" start="00:05:02.474" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and customize the Org capture system.""" start="00:05:08.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to create a playground node here,""" start="00:05:13.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where I can do whatever.""" start="00:05:16.297" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, what does this template do?""" start="00:05:17.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Well, it's just going to create a new template.""" start="00:05:20.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And whenever I hit the s key,""" start="00:05:22.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it is going to go ahead and add a new heading""" start="00:05:24.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to which I will enter,""" start="00:05:31.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and it's going to grab a link""" start="00:05:36.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to wherever I'm pointing at,""" start="00:05:38.326" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and any highlighted code""" start="00:05:39.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""will also be inserted into a source block,""" start="00:05:41.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and eventually, drop my cursor""" start="00:05:44.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where I can work on it.""" start="00:05:49.407" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, we can grab our template,""" start="00:05:52.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and the one thing I'm going to need to add it here""" start="00:05:55.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""is to say what file this goes to.""" start="00:05:57.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to copy the name of this file,""" start="00:05:59.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and put it right in there.""" start="00:06:03.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to go ahead now run this template.""" start="00:06:08.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Now, we can explore our code.""" start="00:06:10.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""For example, I can look in the server,""" start="00:06:14.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and say, &quot;Oh yeah, this slide looks interesting.""" start="00:06:16.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Go ahead and capture that.&quot;""" start="00:06:18.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""There you see our template.""" start="00:06:21.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You see, yeah, this is Next.js app,""" start="00:06:23.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and you can see it got added right in here""" start="00:06:26.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""right next to my other code.""" start="00:06:29.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, that's interesting.""" start="00:06:33.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I can always go ahead and click that link,""" start="00:06:34.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and get thrown directly to where in the code I was.""" start="00:06:36.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm kind of building up my own dashboard""" start="00:06:40.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""as I explore this project""" start="00:06:43.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""of interesting points within the project.""" start="00:06:45.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""One of the things I noticed here""" start="00:06:49.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""by looking at the file structure is that""" start="00:06:52.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""there is an area for certificates.""" start="00:06:57.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That's a little unusual, so we'll make a note""" start="00:07:02.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""of that by again running `org-store-link`.""" start="00:07:05.625" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This comes with certificates,""" start="00:07:08.007" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""so we'll put that there.""" start="00:07:12.707" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""One of the good standbys is,""" start="00:07:18.007" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""just to use our regular shell commands.""" start="00:07:21.607" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, we will go ahead and say,""" start="00:07:23.540" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the default directory for this is our project.""" start="00:07:26.774" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And we can go ahead and say,""" start="00:07:29.807" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`cat certificates/localhost.key`,""" start="00:07:31.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and then we'll output the first five lines of it,""" start="00:07:38.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""just to make sure it's a regular certificate.""" start="00:07:43.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Now, notice this got broken up a little bit.""" start="00:07:45.848" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is due to Emacs auto formatting.""" start="00:07:49.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""We can come in here, and tell it to""" start="00:07:51.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""format it as code,""" start="00:07:55.866" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which will be the same as this block right here.""" start="00:07:57.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, there are other options available.""" start="00:07:59.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""If, for example, we don't want [it]""" start="00:08:02.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to be a shell block,""" start="00:08:05.453" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""we wanted a Python block for some reason,""" start="00:08:06.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""we do `:wrap src python`, and execute that,""" start="00:08:09.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and it's now wrapped as a Python block,""" start="00:08:15.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but I like it as a shell.""" start="00:08:18.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Let's, for example, go down into pages here""" start="00:08:21.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and look at this document file.""" start="00:08:24.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""We're saying, &quot;Okay. Well, this looks interesting""" start="00:08:25.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""maybe highlight that,&quot; and we'll go ahead""" start="00:08:29.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and capture that template""" start="00:08:32.474" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and say, grab all this code and paste it in here.""" start="00:08:36.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, there is a bug at the moment,""" start="00:08:39.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where if you highlight more than one lines of code,""" start="00:08:42.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the link will not work, and that honestly""" start="00:08:46.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""might be something I look into fixing.""" start="00:08:50.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""One of the things that might be useful here""" start="00:08:54.540" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""would be to check out""" start="00:08:57.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""how this file has evolved over time.""" start="00:08:59.274" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""To do that, I'm going to use Magit.""" start="00:09:02.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'll pull up a log.""" start="00:09:05.340" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Look, there's only a single change.""" start="00:09:09.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to run a command""" start="00:09:11.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""called `orgit-store-link`,""" start="00:09:13.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and now I can come in here and say,""" start="00:09:16.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""&quot;It's only changed once.&quot;""" start="00:09:22.174" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Go ahead and insert that link.""" start="00:09:26.207" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, this file…""" start="00:09:30.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the arguments here are kind of weird,""" start="00:09:33.340" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and in fact, if I click this,""" start="00:09:35.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it will actually go to the full log of that branch.""" start="00:09:38.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""However, we can fix that pretty easily.""" start="00:09:42.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Grab the path of our file,""" start="00:09:45.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and this right here is really just the arguments""" start="00:09:49.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that are passed into the log command.""" start="00:09:53.874" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, here we go, we put that in there,""" start="00:09:56.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and there we go. We get the full file history.""" start="00:09:58.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Now, I want to actually build the program.""" start="00:10:04.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, &quot;Build the app.&quot;""" start="00:10:09.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now, I could of course run it as a shell, right.""" start="00:10:16.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`npm ci`. The problem with that is that""" start="00:10:18.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Emacs is single-threaded. So, if I were to do that,""" start="00:10:22.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the entire time while it was running,""" start="00:10:26.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it would be locking out my Emacs.""" start="00:10:30.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Additionally, I might not actually want""" start="00:10:33.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""all that scroll--`npm ci` produces a lot of it--""" start="00:10:35.740" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""actually in my document.""" start="00:10:38.707" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So instead, what we could do is""" start="00:10:40.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""use an Emacs Lisp function,""" start="00:10:43.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and it's called `async-shell-command`.""" start="00:10:46.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And when you run something in async-shell-command,""" start="00:10:49.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it's going to a comint buffer with a process""" start="00:10:52.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""attached to it, and run it in there.""" start="00:10:58.007" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I will need to set the directory here first,""" start="00:11:00.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and since, again, this is going to be""" start="00:11:04.907" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""opening up in a new buffer.""" start="00:11:07.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I don't need to see that.""" start="00:11:08.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going to run it.""" start="00:11:09.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And what's going to happen is""" start="00:11:11.407" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""this is actually not going to work.""" start="00:11:13.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And it doesn't work,""" start="00:11:17.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Not for any particular reason I can control.""" start="00:11:18.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""It's unfortunately that the repo is broken,""" start="00:11:20.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but that is a totally valid""" start="00:11:24.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""result of our investigation.""" start="00:11:26.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""One of the things that I really love""" start="00:11:29.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to do with Org mode is to actually use it for""" start="00:11:33.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""literate programming,""" start="00:11:37.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""because Org mode has a pretty capable""" start="00:11:38.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""code generation facility built into it.""" start="00:11:43.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""It's called tangling.""" start="00:11:46.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, if I go ahead and take my document...""" start="00:11:47.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is for a little Arduino project,""" start="00:11:51.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where I was figuring out to spin things around""" start="00:11:54.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""using an old Roomba motor.""" start="00:11:56.907" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I can go ahead and write a script like this,""" start="00:12:00.074" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and then notice, I use the tangle variable""" start="00:12:05.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that is just going to determine""" start="00:12:09.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where that file gets written""" start="00:12:11.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""when we call the command `org-babel-tangle`.""" start="00:12:13.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, if I go ahead and run this,""" start="00:12:17.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you can see down in the minibuffer,""" start="00:12:20.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it's going to write to""" start="00:12:21.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`/tmp/go-batsy-playground/go-batsy-playground.ino`.""" start="00:12:23.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That's where this right here would write,""" start="00:12:26.707" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and then I could run commands on it.""" start="00:12:29.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Then I want to start being able to use this""" start="00:12:33.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to build out a program.""" start="00:12:36.574" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I'm going ahead and writing in prose""" start="00:12:38.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and interspersing it with code.""" start="00:12:42.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, it's the inverse of code,""" start="00:12:43.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""in which you intersperse comments, [here]""" start="00:12:47.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you write prose, and then you intersperse code""" start="00:12:49.374" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where as needed.""" start="00:12:51.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Tangle is implicitly defined up at the higher level""" start="00:12:54.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""in this property block right here,""" start="00:12:58.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which I will talk about in a little bit.""" start="00:12:59.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""But if you want to see what properties""" start="00:13:02.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""are available at any given time,""" start="00:13:04.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you can hit `org-babel-view-src-block-info`""" start="00:13:07.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""right there, and you can see that tangle is enabled.""" start="00:13:10.140" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""All of these blocks have the exact same tangle.""" start="00:13:14.274" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""If I run and see what it is, it's just going to""" start="00:13:16.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""write to this directory to `go-batsy.ino`.""" start="00:13:20.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`org-babel-tangle` is going to go ahead""" start="00:13:23.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and tangle all these source code blocks,""" start="00:13:28.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I can go ahead and look at my file""" start="00:13:30.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and here it is.""" start="00:13:33.174" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is the full Arduino file""" start="00:13:34.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that was generated from there.""" start="00:13:36.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I start writing code here,""" start="00:13:37.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and I'm basically doing it in a prose way.""" start="00:13:40.807" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""As I'm thinking about it,""" start="00:13:43.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I write down what I'm going to do.""" start="00:13:44.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now these braces, we haven't seen these before.""" start="00:13:46.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""This is an aspect of Org called `noweb`,""" start="00:13:49.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which again is not too much of a""" start="00:13:52.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""templating system too.""" start="00:13:55.374" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""But it does one thing, which is insert code,""" start="00:13:56.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which turns out to be enough.""" start="00:13:58.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, this right here basically says,""" start="00:14:00.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""take that block with that exact name""" start="00:14:03.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and just insert here.""" start="00:14:08.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""If you want to see exactly what a block expands to,""" start="00:14:09.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you're going to come in here.""" start="00:14:13.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You're going to run `org-babel-expand-src-block`,""" start="00:14:15.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and there we go. That's what this block expands to.""" start="00:14:18.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That's what all those places""" start="00:14:21.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""of this little bits and pieces expand to.""" start="00:14:22.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, that becomes really useful, and notice""" start="00:14:24.807" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""basically we just take these little blocks""" start="00:14:28.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that are not going to be tangled directly""" start="00:14:29.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but it will be in this other block.""" start="00:14:32.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And we turn off their tangling.""" start="00:14:33.920" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Now that you have some sort of tangling,""" start="00:14:38.074" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you want to be able to interact with those files""" start="00:14:40.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that are written to that directory.""" start="00:14:42.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, right here I have an area""" start="00:14:46.707" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where I can do things like run a compiler.""" start="00:14:48.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Now what does that compiler do?""" start="00:14:52.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Well, this right here references""" start="00:14:55.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""a source code block that appears in another Org file.""" start="00:14:57.841" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And I find that when doing these sort of things""" start="00:15:01.874" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it can be useful to have a little""" start="00:15:04.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""utility Org directory.""" start="00:15:06.007" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, here it is, `org/ci.org`.""" start="00:15:08.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is just part of my repo.""" start="00:15:10.374" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""We open up, and here we go.""" start="00:15:11.640" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I have a compile function.""" start="00:15:14.140" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Basically, it's doing some stuff""" start="00:15:15.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to clean up things correctly.""" start="00:15:18.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""But then using that same `async-shell-command`""" start="00:15:20.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to open things up and a new buffer.""" start="00:15:23.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""In this case, named after""" start="00:15:26.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""whatever heading it was under.""" start="00:15:28.674" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And then we're going to go ahead and inside of it""" start="00:15:31.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""run Arduino CLI command to compile,""" start="00:15:35.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and pass that into `watchexec`.""" start="00:15:39.874" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which is a little Rust program""" start="00:15:43.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that watches inode[??] files for any changes,""" start="00:15:46.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and when they detect them, we will run this.""" start="00:15:49.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""If I were to, for example, add a line here,""" start="00:15:51.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and now run `org-babel-tangle`,""" start="00:15:56.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you can see watchexec immediately""" start="00:15:59.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""picks it up and restarts it.""" start="00:16:02.400" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""Now it's kind of a pain to remember""" start="00:16:04.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to run `org-babel-tangle` all the time.""" start="00:16:07.475" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, I can come here and click this button.""" start="00:16:09.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""It asks me to execute it there.""" start="00:16:13.807" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And what does that do?""" start="00:16:17.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Here you go. It's just a very simple hyperlink,""" start="00:16:18.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""but to the Elisp protocol.""" start="00:16:23.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""The Elisp protocol just adds a hook that says,""" start="00:16:25.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""whenever a document is saved, run `org-babel-tangle`.""" start="00:16:30.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And now that I've run that, I can go ahead,""" start="00:16:35.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""come in here, and delete that.""" start="00:16:37.600" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And look at that. It tangles automatically for me.""" start="00:16:39.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Because I don't want to actually have this""" start="00:16:42.340" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""playground script tangle to my real file,""" start="00:16:45.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I need this concept of""" start="00:16:49.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""some sort of workspace directory.""" start="00:16:51.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And a workspace directory""" start="00:16:52.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""what I really want is a variable that is tied to""" start="00:16:54.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""where in my document hierarchy this appears.""" start="00:16:58.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I want a dynamically scoped variable""" start="00:17:02.674" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that's scoped to my document.""" start="00:17:06.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And you can do that. For example, in this case,""" start="00:17:08.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I have in my properties""" start="00:17:12.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""a key value declared `workspace-directory`,""" start="00:17:15.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[it] goes into a temp directory.""" start="00:17:20.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And here, by running `org-get-entry`""" start="00:17:22.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""starting at the current point,""" start="00:17:24.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""find `workspace-directory`""" start="00:17:25.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""with a second parameter 1.""" start="00:17:27.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You can see down in the minibuffer,""" start="00:17:28.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""goes to `/tmp/go-batsy-playground/`.""" start="00:17:31.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This right here is going to override""" start="00:17:37.174" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the `workspace-directory` at the top level,""" start="00:17:42.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which is dot. Dot means here.""" start="00:17:44.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""That's what makes sure""" start="00:17:47.607" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that the rest of these tangle to""" start="00:17:48.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that go-batsy file right relevant to here.""" start="00:17:50.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And that does mean that we need""" start="00:17:54.560" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""a little bit more complex thing here.""" start="00:17:55.740" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, we're saying go ahead and `org-entry-get`""" start="00:17:58.207" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the `workspace-directory`.""" start="00:18:01.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""If anyone hasn't seen this syntax,""" start="00:18:04.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""this dash arrow is from the dash.el library,""" start="00:18:06.807" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which is basically a big library of all""" start="00:18:16.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""the utility functions that you wish""" start="00:18:19.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Emacs Lisp had. They're well-named.""" start="00:18:20.940" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I highly, highly recommend it.""" start="00:18:22.880" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""This is the threading operator.""" start="00:18:24.480" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, we're just basically taking it,""" start="00:18:26.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""getting the `workspace-directory`,""" start="00:18:28.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""if it happens to be dot, then we're just going to""" start="00:18:29.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""return the current directory,""" start="00:18:32.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""otherwise whatever directory said.""" start="00:18:33.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""And then I want to just take a moment""" start="00:18:36.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and look at the rest of this structure.""" start="00:18:39.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, `workspace-directory` we talked about.""" start="00:18:41.280" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`header-args` if you noticed, none of my""" start="00:18:43.080" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""code blocks for the most part""" start="00:18:46.774" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""have any header arguments.""" start="00:18:48.707" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""You can drop the `header-args` property,""" start="00:18:50.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""which is going to be header arguments""" start="00:18:53.174" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""that are added automatically""" start="00:18:55.607" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to all source code blocks under this heading.""" start="00:18:57.840" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""`header-args+`. Well,""" start="00:19:03.407" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""sometimes you don't want to type…""" start="00:19:05.407" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you have a bunch of args,""" start="00:19:06.540" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""you don't want to type them out""" start="00:19:07.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""in this one big line.""" start="00:19:08.240" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""So, you basically are adding a new header-arg""" start="00:19:09.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to the existing list of header.""" start="00:19:13.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And then you can have header-args that are specific""" start="00:19:15.407" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""to certain languages, like, for example,""" start="00:19:18.160" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""this `default-directory` var is going to be set""" start="00:19:20.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""for all Emacs Lisps.""" start="00:19:23.720" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""And for all Arduinos, evaluation will be disabled,""" start="00:19:25.200" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""and tangling will be automatically enabled.""" start="00:19:29.574" video="mainVideo-workflows" id="subtitle"]]
+[[!template new="1" text="""These are just some of the workflows that become""" start="00:19:32.440" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""useful when you're actually doing the coding.""" start="00:19:35.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: Oh, hello again!""" start="00:19:38.320" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Me from the six months from now.""" start="00:19:41.374" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: Cool.""" start="00:19:45.307" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: The talk got over, people liked it,""" start="00:19:49.107" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""thought the pacing was all over the place.""" start="00:19:51.000" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: Yeah, I had to cut two thirds of it,""" start="00:19:53.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""going to be filling in those gaps in the Etherpad.""" start="00:19:56.360" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: And the editing was uneven, at best.""" start="00:19:59.800" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[George]: I got way better at it""" start="00:20:03.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""as I worked on it, didn't I?""" start="00:20:05.507" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Kdenlive is pretty cool.""" start="00:20:06.680" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""But yeah, I wanted to take a shot at""" start="00:20:09.960" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""something different, and I figured if anyone can""" start="00:20:13.540" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""appreciate trying something different,""" start="00:20:16.040" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""it's EmacsConf, right?""" start="00:20:17.760" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""I hope people found it useful.""" start="00:20:20.120" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""[Future George]: Yeah, some did.""" start="00:20:21.520" video="mainVideo-workflows" id="subtitle"]]
+[[!template text="""Oh, I should tell you about the coming Orca war.""" start="00:20:22.600" video="mainVideo-workflows" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+Questions or comments? Please e-mail [gmauer+emacsconf@gmail.com](mailto:gmauer+emacsconf@gmail.com?subject=Comment%20for%20EmacsConf%202022%20workflows%3A%20Org%20workflows%20for%20developers)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2022/info/workflows-before.md b/2022/info/workflows-before.md
new file mode 100644
index 00000000..5102cc01
--- /dev/null
+++ b/2022/info/workflows-before.md
@@ -0,0 +1,56 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+In this talk, George Mauer demonstrates several ways that Org Mode can help people explore and develop code. Afterwards, he will handle questions via BigBlueButton.
+
+
+The following image shows where the talk is in the schedule for Sun 2022-12-04. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="workflows">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect stroke-width="3" x="454" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 21-min talk followed by live Q&A (done)
+Etherpad: <https://pad.emacsconf.org/2022-workflows>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: TO_INDEX_QA
+<div>Times in different timezones:</div><div class="times" start="2022-12-04T18:50:00Z" end="2022-12-04T19:15:00Z"><div class="conf-time">Sunday, Dec 4 2022, ~1:50 PM - 2:15 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 4 2022, ~12:50 PM - 1:15 PM CST (US/Central)<br />Sunday, Dec 4 2022, ~11:50 AM - 12:15 PM MST (US/Mountain)<br />Sunday, Dec 4 2022, ~10:50 AM - 11:15 AM PST (US/Pacific)<br />Sunday, Dec 4 2022, ~6:50 PM - 7:15 PM UTC <br />Sunday, Dec 4 2022, ~7:50 PM - 8:15 PM CET (Europe/Paris)<br />Sunday, Dec 4 2022, ~8:50 PM - 9:15 PM EET (Europe/Athens)<br />Monday, Dec 5 2022, ~12:20 AM - 12:45 AM IST (Asia/Kolkata)<br />Monday, Dec 5 2022, ~2:50 AM - 3:15 AM +08 (Asia/Singapore)<br />Monday, Dec 5 2022, ~3:50 AM - 4:15 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="workflows-mainVideo"><source src="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="workflows-mainVideo" data="""
+00:00.000 Introduction
+00:53.960 The future
+02:30.200 Org development workflows
+03:15.680 Taking notes
+04:54.600 org-capture templates
+06:10.680 Building up a dashboard
+06:49.160 org-store-links
+07:45.680 Formatting
+08:21.480 Pasting code
+08:52.200 Git
+10:04.960 async-shell-command
+11:29.040 Literate programming and tangling
+13:47.840 Noweb
+14:36.400 Running commands
+16:04.480 Buttons
+16:43.600 Workspaces
+18:04.800 dash
+18:36.000 Header arguments
+19:29.920 Conclusion
+
+"""]]<div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.webm">Download --main.webm (111MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://toobnix.org/w/bRD59ZVoJk1zpNnchaygk4">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="workflows-qanda"><source src="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.webm" />${captions}<track kind="chapters" label="Chapters" src="/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="workflows-qanda" data="""
+00:00.000 Introduction
+01:23.774 Q1 - Does it become unwieldy due to the interaction of the edit org-source to use org-mode and the virtual linear programming as the project becomes larger?
+02:38.982 Q2 - I want to take a look at the files used in your demo, are they somewhere online?
+03:16.080 Digression - some explanations about the background dinosaur :D
+04:54.960 Information about org-entry-get
+05:49.640 Are workflows as they are in your life closely tied to particular projects or are they general workflows? - Long discussion about the workflow!
+13:32.960 Wrapping up
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="workflows-qanda-audio" src="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.webm">Download --answers.webm (27MB)</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2022/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.opus">Download --answers.opus (5.9MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2022/info/workflows-nav.md b/2022/info/workflows-nav.md
new file mode 100644
index 00000000..a3a5989b
--- /dev/null
+++ b/2022/info/workflows-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2022/talks/eshell">Top 10 reasons why you should be using Eshell</a>
+Next by track: <a href="/2022/talks/async">Emacs was async before async was cool</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2022/meetings.org b/2022/meetings.org
new file mode 100644
index 00000000..e3c01a47
--- /dev/null
+++ b/2022/meetings.org
@@ -0,0 +1,21 @@
+#+OPTIONS: toc:nil
+
+#+begin_export md
+[[!meta title="Meeting notes"]]
+[[!meta copyright="Copyright &copy; 2022 Amin Bandali, Sacha Chua, David O'Toole, Corwin Brust, Leo Vivier, Daniel Gopar"]]
+<!-- Automatically generated from meetings.org -->
+#+end_export
+
+* [2022-05-28 Sat 16:00] CFP meeting
+- CFP: Should it be a call for /proposals/ or /propositions/?
+ - “Proposition” might be friendlier
+
+- Calendar
+ - We’re not going to conflict with SEAGL this year.
+ - Having it on the first week-end of December isn’t too bad. People have told us that holding the conference in December would lead to a scarcer viewership because of travelling; however, the first weekend of December should be pretty safe. If we need to get Christmassy, we will do what must be done (i.e. wear funny hats).
+ - We can still keep the earlier date as a backup in case many people complain.
+ - As a result, the official date for the next EmacsConf is (tentatively) [2022-12-03 Sat]--[2022-12-04 Sun].
+ - We’re not sure if we need more time to prepare for EmacsConf 2022.
+ - If we want a CFP that finishes earlier, the problem is that the CFP might start and finish during the Summer break.
+ - We’re having many questions about the parameters that we should consider for the calendar; since there’s no rush, we can take some extra time to consider the ramifications of our decisions.
+ - We’ve updated the times in [[cfp.org][cfp.org]].
diff --git a/2022/organizers-notebook.bash b/2022/organizers-notebook.bash
new file mode 100644
index 00000000..80af7bb9
--- /dev/null
+++ b/2022/organizers-notebook.bash
@@ -0,0 +1,10 @@
+while read p; do
+ mkdir -p "$p";
+ cd "$p";
+ wget "https://bbb.emacsverse.org/presentation/${p}/slides_new.xml" \
+ "https://bbb.emacsverse.org/presentation/${p}/video/webcams.webm" \
+ "https://bbb.emacsverse.org/presentation/${p}/deskshare.xml" \
+ "https://bbb.emacsverse.org/presentation/${p}/deskshare/deskshare.webm" \
+ "https://bbb.emacsverse.org/presentation/${p}/metadata.xml"
+ cd ..;
+done <ids.txt
diff --git a/2022/organizers-notebook.md b/2022/organizers-notebook.md
new file mode 100644
index 00000000..44837dee
--- /dev/null
+++ b/2022/organizers-notebook.md
@@ -0,0 +1,8533 @@
+<!-- organizers-notebook.md is exported from organizers-notebook/index.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2022/organizers-notebook/index.org](/2022/organizers-notebook/index.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/).
+
+
+# Table of Contents
+
+- [Overall priorities](#overall)
+- [Next comms update](#update)
+- [Projects and other long-running tasks](#projects)
+- [Ideas for next year](#maybe-projects):nextyear:
+- [Things to figure out / decisions to make](#decisions)
+- [Roles needed](#roles)
+- [Infrastructure notes](#infra)
+- [Other tasks and processes](#other)
+- [In case of](#exceptions)
+- [Task archive](#archive)
+- [Communications](#comms)
+- [Supporting code](#code)
+- [Lessons learned](#lessons)
+
+Projects and tasks:
+
+- [Harvest live talks and Q&A](#harvest)
+- [Send thanks](#thanks)
+- [Finalize the files to be used for streaming](#files)
+- [Look for ways to reduce risk](#derisk):derisk:
+- [Make checkin and Q&A process slide](#qa):sachac:
+- [Caption talks and make chapter headings](#caption)
+- [Prepare intros for the hosts to read](#host-intros)
+- [Set up talks on Toobnix and YouTube](#video-platforms):sachac:yt:toobnix:
+- [Do another run](#dry-run)
+- [Turn off file upload service on media.emacsconf.org](#upload-off):sachac:infra:
+- [Review notebook for tasks, priorities, and scheduling](#review)
+- [Use Mumble for backchannel coordination and also on-stage](#mumble)
+- [Satellite events](#satellite)
+- [Volunteer update](#volunteer-2022-11-14)
+- [Make a linear hyperlist for managing EmacsConf](#hyperlist):sachac:
+- [Record intro/outro for day-1 and day-2](#rec-intro):zaeph:
+- [Add category tags and possibly links between talks across 2022 and all previous years](#link-pages):quiliro:wiki:
+- [JS/CSS enhancement](#watch-css):emacsconf:
+- [Build up the ansible playbook](#ansible):sachac:opal:
+- [Consider breakout rooms for lunch break](#breakouts)
+- [Work on the OBS scenes](#obs-scenes):zaeph:corwin:sachac:
+- [Plan Etherpad use and hosting](#etherpad):sachac:ansible:
+- [Write about EmacsConf behind the scenes](#writing):sachac:
+
+Schedule by status: (gray: waiting, light yellow: processing, yellow: to assign, light green: captioning, green: captioned and ready) - Updated by conf.org and the wiki repository
+
+![img](schedule.svg)
+
+
+<a id="overall"></a>
+
+# Overall priorities
+
+This table makes it easier to move the slider depending on who wants
+to volunteer and how much we can get done. At some point, we&rsquo;ll figure
+out how to track our current status so we know what we need to
+scramble to do in order to get the conference off the ground. **bold**
+is our current goal. Feel free to volunteer for anything that
+interests you!
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">&#xa0;</th>
+<th scope="col" class="org-left">Good</th>
+<th scope="col" class="org-left">Better</th>
+<th scope="col" class="org-left">Best</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left"><a href="#harvest">harvesting talks &amp; Q&amp;A</a></td>
+<td class="org-left"><b>recordings trimmed if needed, published</b></td>
+<td class="org-left">chapter markers</td>
+<td class="org-left">edited transcripts</td>
+</tr>
+</tbody>
+</table>
+
+Previous priorities;
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left"><a href="#conforg">conf.org management</a></td>
+<td class="org-left">on sachac&rsquo;s laptop</td>
+<td class="org-left">S: on res.emacsconf.org</td>
+<td class="org-left"><b>DONE S/Z: other people know how to work with it</b></td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#prepare-prerec-process">prerec</a></td>
+<td class="org-left">convert to webm</td>
+<td class="org-left">normalize audio</td>
+<td class="org-left"><b><a href="#mastering">DONE Z: reduce noise</a></b></td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">DONE S: link to stream, pad, IRC</td>
+<td class="org-left"><b>S: link to prerec when live</b></td>
+<td class="org-left">embed stream, pad, IRC, prerec</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#sched-decision">schedule</a></td>
+<td class="org-left">one track</td>
+<td class="org-left"><b>DONE S: two tracks</b></td>
+<td class="org-left">aligned times, full roster</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#upload">upload</a></td>
+<td class="org-left">FTP</td>
+<td class="org-left"><b>DONE S: web-based</b></td>
+<td class="org-left">auto-encoded, preview (SReview?)</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#streaming">streaming</a></td>
+<td class="org-left">ffmpeg from computer</td>
+<td class="org-left">OBS</td>
+<td class="org-left"><b>DONE: OBS in cloud, switchable hosts</b></td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#other-streams">other streams</a></td>
+<td class="org-left">480p</td>
+<td class="org-left">+ Toobnix</td>
+<td class="org-left"><b>S: + YouTube</b></td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#coordinate-volunteers">volunteer coordination</a></td>
+<td class="org-left">ad-hoc</td>
+<td class="org-left"><b>DONE playbook</b></td>
+<td class="org-left">training meetings + recordings</td>
+</tr>
+
+
+<tr>
+<td class="org-left">BBB rooms</td>
+<td class="org-left">about 5 rooms that we cycle through</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><b>DONE S: one room per speaker</b></td>
+</tr>
+
+
+<tr>
+<td class="org-left">host</td>
+<td class="org-left">no host, speaker reads pad</td>
+<td class="org-left"><b>host reads pad</b></td>
+<td class="org-left">host monitors IRC and helps with BBB as well</td>
+</tr>
+
+
+<tr>
+<td class="org-left">BBB Q&amp;A</td>
+<td class="org-left">none</td>
+<td class="org-left"><b>DONE open to community</b></td>
+<td class="org-left">moderated by speaker and host</td>
+</tr>
+
+
+<tr>
+<td class="org-left">BBB Q&amp;A start</td>
+<td class="org-left">awkward silence while waiting</td>
+<td class="org-left"><b>speaker can demo a little</b></td>
+<td class="org-left">host has prepared questions just in case no one shows up</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">tracks</td>
+<td class="org-left">+ IRC</td>
+<td class="org-left"><b>DONE S: + talk info</b>, maybe even current/recent/next</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#etherpad">pad</a></td>
+<td class="org-left">one pad for conf</td>
+<td class="org-left">one pad per talk, wikimedia</td>
+<td class="org-left"><b>DONE S: one pad per talk, self-hosted</b> so we can access API</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#irc">IRC</a></td>
+<td class="org-left">#emacsconf, -org</td>
+<td class="org-left"><b>DONE #emacsconf, -gen, -dev, -org</b></td>
+<td class="org-left">IRC volunteer copying to pads; maybe even IRC bots</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">ERC commands</td>
+<td class="org-left"><b>DONE S: hook-based</b></td>
+<td class="org-left">timer-based</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#publishing-sched">sched update</a></td>
+<td class="org-left"><b>DONE S: publish at start</b></td>
+<td class="org-left">update main sched</td>
+<td class="org-left">update talk pages</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#video-platforms">other platforms</a></td>
+<td class="org-left"><b>S: Toobnix &amp; YT after event</b></td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">S: Toobnix + YT when live</td>
+</tr>
+
+
+<tr>
+<td class="org-left">schedule view</td>
+<td class="org-left">text table</td>
+<td class="org-left">imagemap fallback</td>
+<td class="org-left"><b>DONE S: interactive SVG</b></td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#caption-workflow">caption workflow</a></td>
+<td class="org-left">YT autosubs</td>
+<td class="org-left">Whisper autosubs</td>
+<td class="org-left"><b>DONE: Whisper + more granular timestamps</b></td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#wiki-design">wiki</a></td>
+<td class="org-left">plain text, markdown</td>
+<td class="org-left"><b>DONE S: some JS and CSS enrichment</b></td>
+<td class="org-left">more JS and CSS, embeds, videoplayer</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#ansible">ansible</a></td>
+<td class="org-left">none</td>
+<td class="org-left"><b>DONE S: some automation</b></td>
+<td class="org-left">comprehensive, can also work against containers</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="#intro">intro and exit</a></td>
+<td class="org-left"><b>DONE: slide on screen, host on Mumble</b></td>
+<td class="org-left">per-talk video, recorded voiceover</td>
+<td class="org-left">Emacs thing so we can display info, countdowns, IRC</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="update"></a>
+
+# Next comms update
+
+- all the Q&A videos are available
+- updated GRAIL talk, uploaded orgvm talk
+- volunteers: next step is to make chapter markers, large model VTTs are now available
+- <span class="timestamp-wrapper"><span class="timestamp">[2022-12-15 Thu] </span></span> all Q&A videos posted, large model VTTs available
+- <span class="timestamp-wrapper"><span class="timestamp">[2022-12-12 Mon] </span></span> Updated grail, updated backstage view
+- <span class="timestamp-wrapper"><span class="timestamp">[2022-12-11 Sun] </span></span> Thank-you notes sent to all the speakers with Toobnix and YouTube URLs, BBB playback info
+
+
+<a id="projects"></a>
+
+# Projects and other long-running tasks
+
+- [Harvest live talks and Q&A](#harvest)
+- [Send thanks](#thanks)
+- [Finalize the files to be used for streaming](#files)
+- [Look for ways to reduce risk](#derisk):derisk:
+- [Make checkin and Q&A process slide](#qa):sachac:
+- [Caption talks and make chapter headings](#caption)
+- [Prepare intros for the hosts to read](#host-intros)
+- [Set up talks on Toobnix and YouTube](#video-platforms):sachac:yt:toobnix:
+- [Do another run](#dry-run)
+- [Turn off file upload service on media.emacsconf.org](#upload-off):sachac:infra:
+- [Review notebook for tasks, priorities, and scheduling](#review)
+- [Use Mumble for backchannel coordination and also on-stage](#mumble)
+- [Satellite events](#satellite)
+- [Volunteer update](#volunteer-2022-11-14)
+- [Make a linear hyperlist for managing EmacsConf](#hyperlist):sachac:
+- [Record intro/outro for day-1 and day-2](#rec-intro):zaeph:
+- [Add category tags and possibly links between talks across 2022 and all previous years](#link-pages):quiliro:wiki:
+- [JS/CSS enhancement](#watch-css):emacsconf:
+- [Build up the ansible playbook](#ansible):sachac:opal:
+- [Consider breakout rooms for lunch break](#breakouts)
+- [Work on the OBS scenes](#obs-scenes):zaeph:corwin:sachac:
+- [Plan Etherpad use and hosting](#etherpad):sachac:ansible:
+- [Write about EmacsConf behind the scenes](#writing):sachac:
+
+
+<a id="harvest"></a>
+
+## Harvest live talks and Q&A
+
+
+### DONE Add audio-only options to the publishing process
+
+
+### Learn from how other conferences harvest their talks and Q&A
+
+- DebConf posts the talk video (prerecorded + in person Q&A), no transcripts or index
+ Ex: <https://debconf22.debconf.org/talks/71-sequoia-pgp-v5-openpgp-authentication-and-debian/> . They link to the video and the Etherpad.
+- FOSSDEM has directory listings by track: <https://video.fosdem.org/2022/D.conference/>
+ also embedded video and links to slides, video recording, chat room (but not logs) <https://archive.fosdem.org/2022/schedule/event/community_contributions/>
+- LibrePlanet has thumbnails:
+ <https://media.libreplanet.org/u/libreplanet/tag/libreplanet-2022-video/> . Talk page has video and links to slides, download.
+ <https://media.libreplanet.org/u/libreplanet/m/taking-back-the-web-with-haketilo/>
+- NeovimConf: YouTube playlist, lots of comments on YouTube, key moments
+- VS Code Day: link to YouTube video, edited CC captions in YouTube, links and a hashtag in the video description, key moments
+- TED: transcript button, shows transcript in a scrollable area on the right
+
+
+### DONE Publish more Q&A recordings
+
+
+#### DONE Check status
+
+ (emacsconf-collect-prop :slug
+ (seq-remove
+ (lambda (o)
+ (or (null (string-match "live" (or (plist-get o :q-and-a) "")))
+ (null (emacsconf-talk-file o "--bbb-webcams.webm"))
+ (and (emacsconf-talk-file o "--answers.webm")
+ (plist-get o :qa-public))))
+ (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+
+
+#### DONE Write code to make it easy to do so
+
+emacsconf-extract-publish-qa
+
+
+#### DONE Fetch the reencoded maint answers and post it to backstage
+
+
+### DONE Document this phase of the conference
+
+We&rsquo;re now in the harvesting phase of the conference, where we work on
+collecting the ideas that people shared in the Q&A sessions as well as
+any talks that were not available as pre-recorded videos. It&rsquo;s a great
+way to help speakers get stuff out of their heads and into a form we
+can all learn from. =)
+
+Status of talks and Q&A sessions:
+
+- All talks except for the new version of grail should now be
+ available at <https://media.emacsconf.org/2022/> and on talk pages
+- Links to the BBB playbacks and to the various BBB resources (&#x2013;bbb-\*
+ for each talk) are now in the backstage area for speakers and/or
+ volunteers to review
+- RMS Q&A audio has been uploaded (&#x2013;questions.ogg)
+- grail talk will be reuploaded by the speaker
+- IRC logs have been copied to the backstage area; see the links at
+ the top of the backstage area
+- Etherpads have been converted to Markdown and included on the talk pages
+- BBB chats have been converted to Markdown and included on the talk pages
+
+Here&rsquo;s a good/better/best scale for stuff we can do during this phase:
+
+- Good:
+ - Look at IRC log at the top of the backstage area and copy
+ anonymized questions/answers/feedback to the wiki pages as well,
+ if they weren&rsquo;t already on the page
+ - Somewhat manual because of overlapping conversations; might be
+ easier to have one volunteer do all the talks in one shift
+ (Saturday morning gen, Saturday morning dev, Saturday afternoon
+ gen, etc.), so you can e-mail to call dibs if you like. We
+ usually remove names from the public log as well. Most of the
+ conversations should be in the track-specific channels, but some
+ might have ended up in #emacsconf as well. You can check the
+ talk page to see if the questions are already there. If you&rsquo;re
+ already set up to edit the wiki or you can figure out the
+ slightly complicated setup for editing, feel free to edit the
+ page directly. If not, you can email a Markdown or Org Mode
+ snippet to emacsconf-submit@gnu.org and let me know what page to
+ put it on.
+- Better:
+ - Review the BBB recording to check if there&rsquo;s anything that needs
+ to be deleted from the recording before we publish it so that
+ people can listen to things themselves; publish the recording or
+ excerpts of it
+ - Might be easier with the transcript, but can also be done
+ without one. asmblox, async, buttons, dbus, detached, and eshell
+ have &#x2013;bbb-webcams.vtt as the autogenerated Whisper transcripts.
+- Even better than that:
+ - Make chapter markers for the Q&A recording so that people can jump
+ to the question they&rsquo;re particularly interested in. You can write
+ them in the form:
+ mm:ss text goes here
+ mm:ss more text
+ and I can turn those into chapter headings.
+- Totally awesome:
+ - Edited captions/transcripts for the Q&A
+ - Answers copied into the Q&A section, possibly with linked timestamps
+
+
+#### Process for reviewing and trimming the videos
+
+Helper function:
+
+- emacsconf-extract-publish-qa (call with C-u in order to specify a time for truncating the video)
+
+Skim the transcript and the videos to see if anything needs to be removed, and which video to use
+
+BigBlueButton gives us the webcams and audio as one video
+(\`&#x2013;bbb-webcams.webm\`) and the screenshare (if any) as another video
+(\`&#x2013;bbb-deskshare.webm\`). If the speaker shared their screen, we can
+focus on that instead of their webcam. The following ffmpeg command
+combines the audio from the webcams (which has been previously
+extracted into a separate file, \`&#x2013;bbb-webcams.opus\`) with the video
+from the screenshare.
+
+ffmpeg -i example&#x2013;bbb-webcams.opus -i example&#x2013;bbb-deskshare.webm -c copy example&#x2013;answers.webm
+
+We also want to check if people accidentally shared sensitive
+information on their screen, or if anyone said something that they
+might not have said if they remembered that thethe Q&A videos will be
+shared after the talk. Sometimes there&rsquo;s some time before we get
+around to closing the meeting at the end of the Q&A. Usually, a quick
+read of the transcript will show anything that needs to be trimmed.
+Here&rsquo;s how to stop the recording at a specified time:
+
+ffmpeg -i input.webm -to hh:mm:ss -c copy output.webm
+
+Cutting out stuff from the middle of a recording is slightly more
+complicated. It might be easier to use a nonlinear video editor such
+as kdenlive to edit the video. If you want to use ffmpeg, using
+filters to select the frames and reencode the video will probably work
+out better than splitting the file into multiple parts and then
+concatenating them without reencoding, as the latter tends to need to
+be split on keyframes. Here&rsquo;s a sample command based on this
+[StackOverflow](<https://stackoverflow.com/questions/64866231/remove-a-section-from-the-middle-of-a-video-without-concat>) answer that removes the section between 15 seconds and
+45 seconds:
+
+ffmpeg -i input.webm \\
+ -vf &ldquo;select=&rsquo;not(between(t,15,45))&rsquo;, setpts=N/FRAME\_RATE/TB&rdquo; \\
+ -af &ldquo;aselect=&rsquo;not(between(t,15,45))&rsquo;, asetpts=N/SR/TB&rdquo; \\
+ output.webm
+
+Alternatively, you can let us know what parts needs to be trimmed, and
+we can figure that part out.
+
+
+### TODO Prepare groundwork for volunteers to help
+
+
+#### CANCELLED Document IRC/pad/BBB chat extraction tasks
+
+Experience level: no technical background needed; slightly easier if you&rsquo;ve set up your computer for editing the wiki, which needs ssh and git
+
+There were lots of interesting notes and Q&A on IRC and the pad. If we can copy them to the talk page on the wiki, then we can catch any questions that hadn&rsquo;t been answered and forward feedback to the speaker. It&rsquo;s a little challenging because the IRC conversation might get mixed up when another talk starts, so it helps to read the IRC log and decide what lines to include. We usually remove names from the public log as well. Most of the conversations should be in the track-specific channels, but some might have ended up in #emacsconf as well.
+
+I&rsquo;ve added IRC chat logs to the top of the backstage page. Each talk also links to the HTML (&#x2013;pad.html) and Markdown (&#x2013;pad.md) version of the pad.
+
+You can see the 2021 talks (ex: <https://emacsconf.org/2021/talks/frownies/> , <https://emacsconf.org/2021/talks/pattern/> ) for an example of how the discussions were archived on the talk pages. Sometimes we organize them by type of comment, so it&rsquo;s easy to see Q&A vs. notes vs. feedback about the talk itself.
+
+To avoid duplicating work, maybe we can use this Etherpad to call dibs on talks to process. You can write your name or nick next to the talk(s) you&rsquo;re archiving.
+
+If you&rsquo;re already set up to edit the wiki or you can figure out the slightly complicated setup for editing, feel free to edit the page directly. If not, you can email a Markdown or Org Mode snippet to emacsconf-submit@gnu.org and let me know what page to put it on.
+
+
+### TODO Split up relevant sections from IRC logs so that volunteers can go through them
+
+
+### DONE Check duration of Q&A BBB recordings
+
+About 15 hours total
+
+ (format-seconds "%h:%.2m:%.2s"
+ (/ (apply '+
+ (seq-keep (lambda (o)
+ (and (file-exists-p (expand-file-name (concat (plist-get o :video-slug) "--bbb-webcams.opus") emacsconf-cache-dir))
+ (compile-media-get-file-duration-ms
+ (expand-file-name (concat (plist-get o :video-slug) "--bbb-webcams.opus") emacsconf-cache-dir))))
+ (emacsconf-get-talk-info)))
+ 1000)) ;; "14:52:28"
+
+around 4 hours to process asmblox: 14 minutes (/ (\* 4 60) 14.0) ~17x recorded time
+(/ (\* 17 15) 24.0) 10.625
+
+
+### DONE Get the playback links for the BBB talks
+
+Added as BBB\_PLAYBACK properties (:bbb-playback in the plist).
+on orga@res:
+
+- /data/emacsconf/2022/bbb-playbacks has the files from the web-based playback
+- /data/emacsconf/2022/bbb-raw has the raw files
+
+
+#### DONE Download all the BBB playback files
+
+ (let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+ (mapconcat
+ (lambda (o)
+ (when (plist-get o :bbb-playback)
+ (let ((meeting-id (when (string-match "meetingId=\\(.+\\)"
+ (plist-get o :bbb-playback))
+ (match-string 1 (plist-get o :bbb-playback)))))
+ (concat "mkdir " (plist-get o :slug) "\n"
+ "cd " (plist-get o :slug) "\n"
+ (mapconcat
+ (lambda (file)
+ (concat
+ "wget https://bbb.emacsverse.org/presentation/"
+ meeting-id "/" file "\n")
+ )
+ '("video/webcams.webm" "metadata.xml" "deskshare/deskshare.webm" "panzooms.xml" "cursor.xml" "deskshare.xml" "captions.json" "presentation_text.json" "slides_new.xml")
+ ""
+ )
+ "cd ..\n"
+ ))
+ )
+ )
+ info
+ ""))
+
+
+#### DONE Convert to Opus in preparation for transcription
+
+find -name webcams.webm -exec bash -c &rsquo;ffmpeg -i {} -c:a copy $(echo {} | sed &rsquo;s/webm/opus/&rsquo;)&rsquo; \\;
+
+
+#### TODO Transcribe serially
+
+in bbb-whisper
+
+ for SLUG in *; do
+ echo Processing $SLUG $(date -Iseconds) | tee -a bbb-whisper.log
+ (
+ cd $SLUG;
+ if [[ ! -f webcams.txt ]]; then
+ whisper --model large --language en --verbose True webcams.opus
+ else
+ echo "Skipping, already exists"
+ fi
+ )
+ done
+
+
+### DONE Extract RMS Q&A from dump
+
+17:48 of current
+
+
+#### DONE Ffmpeg
+
+[19:26] <bandali> rsyncing the stream dumps from live0:/data/emacsconf-2022-\* into fh-vm01:~orga/live0-streams/
+[19:26] <bandali> i&rsquo;ll probably rsync a copy to my own laptop as well, for backup
+[19:29] <bandali> a reminder that the stream dumps shouldn&rsquo;t be used as-is, and should first be remuxed using ffmpeg to fix the timestamps
+[19:30] <bandali> using something like this: ffmpeg -i myfile.webm -acodec copy -vcodec copy myfile-remuxed.webm >> myfile.log 2>&1
+
+
+### DONE Extract orgvm talk
+
+
+### DONE Post IRC logs to backstage so that volunteers can split them up
+
+See links at the top of backstage
+
+
+### SOMEDAY Copy logs for analysis
+
+
+### DONE Transcribe recordings
+
+
+### DONE Collect recordings from bbb
+
+
+### DONE Back up all the pads
+
+
+### DONE Extract bbb chat and add to backstage
+
+
+### SOMEDAY Awesome Speaker Diarization | awesome-diarization
+
+<https://wq2012.github.io/awesome-diarization/>
+
+
+### SOMEDAY Document irc, bbb chat, pad tasks
+
+Experience level: no technical background needed; slightly easier if you&rsquo;ve set up your computer for editing the wiki, which needs ssh and git
+
+There were lots of interesting notes and Q&A on IRC and the pad. If we can copy them to the talk page on the wiki, then we can catch any questions that hadn&rsquo;t been answered and forward feedback to the speaker. It&rsquo;s a little challenging because the IRC conversation might get mixed up when another talk starts, so it helps to read the IRC log and decide what lines to include. We usually remove names from the public log as well. Most of the conversations should be in the track-specific channels, but some might have ended up in #emacsconf as well.
+
+I&rsquo;ve added IRC chat logs to the top of the backstage page, and each talk also links to the HTML (&#x2013;pad.html) and Markdown (&#x2013;pad.md) version of the pad.
+
+You can see the 2021 talks (ex: <https://emacsconf.org/2021/talks/frownies/> , <https://emacsconf.org/2021/talks/pattern/> ) for an example of how the discussions were archived on the talk pages. Sometimes we organize them by type of comment, so it&rsquo;s easy to see Q&A vs. notes vs. feedback about the talk itself.
+
+To avoid duplicating work, maybe we can use this Etherpad to call dibs on talks to process. You can write your name or nick next to the talk(s) you&rsquo;re archiving.
+
+If you&rsquo;re already set up to edit the wiki or you can figure out the slightly complicated setup for editing, feel free to edit the page directly. If not, you can email a Markdown or Org Mode snippet to emacsconf-submit@gnu.org and let me know what page to put it on.
+
+
+### STARTED Write some code to copy the events.xml to the backstage
+
+recording timestamp is 2022-12-03T09:41:30.888-08
+bandali user ID is w\_uwwpzp4fjtqq
+joined 2022-12-03T10:07:06.066-08
+aaaaaah, hmm. recording timestamp seems earlier, that might just be when BBB starts the whole thing.
+aha! The raw directory has the whole thing, not just the recorded part, and the recording timestamp is the beginning of the meeting. So let&rsquo;s find out where the actual recording starts.
+
+Maybe StartWebRTCShareEvent ?
+ParticipantStatusChangeEvent might be the webcam start.
+Is it DeskShareStartRTMP ?
+
+
+### TODO Improve visualization for Q&A sessions, especially when there&rsquo;s nothing else to look at
+
+
+#### SOMEDAY Consider the challenge of aligning video segments with a timeline
+
+
+#### SOMEDAY windows - Reducing command-line shortcomings caused by excessive number of FFmpeg inputs - Super User
+
+<https://superuser.com/questions/1369843/reducing-command-line-shortcomings-caused-by-excessive-number-of-ffmpeg-inputs>
+
+
+#### SOMEDAY kkroening/ffmpeg-python: Python bindings for FFmpeg - with complex filtering support
+
+<https://github.com/kkroening/ffmpeg-python>
+
+
+#### SOMEDAY Extension repository - Inkscape Wiki
+
+<https://wiki.inkscape.org/wiki/index.php/Extension_repository#Generator>
+
+
+#### SOMEDAY how to render a long text in an area with automatic wrap - Legacy ImageMagick Discussions Archive
+
+<https://www.imagemagick.org/discourse-server/viewtopic.php?t=27325>
+
+
+#### SOMEDAY svg to tex with svg package and inkscape: make the text to wrap inside a shape - TeX - LaTeX Stack Exchange
+
+<https://tex.stackexchange.com/questions/325711/svg-to-tex-with-svg-package-and-inkscape-make-the-text-to-wrap-inside-a-shape>
+
+
+#### SOMEDAY tikz API documentation
+
+<https://allefeld.github.io/pytikz/tikz/>
+
+
+#### SOMEDAY tikz pgf - Absolute positioning in beamer - TeX - LaTeX Stack Exchange
+
+<https://tex.stackexchange.com/questions/6185/absolute-positioning-in-beamer>
+
+
+#### SOMEDAY CTAN: Package textpos
+
+<https://ctan.org/pkg/textpos>
+
+
+#### SOMEDAY positioning - How do I put some text in specific position on a page horizontally with the prosper class? - TeX - LaTeX Stack Exchange
+
+<https://tex.stackexchange.com/questions/35602/how-do-i-put-some-text-in-specific-position-on-a-page-horizontally-with-the-pros>
+
+
+#### SOMEDAY Exporting LaTeX TikZ as Image Files | Baeldung on Computer Science
+
+<https://www.baeldung.com/cs/exporting-tikz-as-images>
+
+
+#### SOMEDAY OpenAI Whisper tutorial: Whisper - Transcription and diarization (speaker identification) | LabLab
+
+<https://lablab.ai/t/whisper-transcription-and-speaker-identification>
+
+
+#### TODO Consider ffmpeg to make speaker labels so that I can overlay them on webcams.webm
+
+
+#### TODO could be fancy to have an FFMPEG compose the videos with names and webcams on the right side
+
+
+#### SOMEDAY Try using the single webcam view of the speaker
+
+
+### SOMEDAY Think about how I want to format the VTT for the RMS Q&A
+
+
+#### SOMEDAY Use word data, maybe reflow based on it
+
+
+### SOMEDAY Combine webcams and deskshare
+
+
+### TODO Extract comments from IRC
+
+
+#### SOMEDAY Auto-add A: marker for speaker
+
+
+### DONE compare deskshare with webcams
+
+ (mapcar (lambda (o)
+ (cons (emacsconf-get-slug-from-string o)
+ (- (compile-media-get-file-duration-ms o)
+ (compile-media-get-file-duration-ms (replace-regexp-in-string "deskshare" "webcams" o))) )
+
+ )
+ (directory-files emacsconf-cache-dir t "-deskshare.webm"))
+
+
+### Improve segmented audio normalization
+
+
+#### SOMEDAY How to normalize the volume of an audio file in python? - Stack Overflow
+
+<https://stackoverflow.com/questions/42492246/how-to-normalize-the-volume-of-an-audio-file-in-python>
+
+
+#### SOMEDAY Execute Macro from Script - Audacity Forum
+
+<https://forum.audacityteam.org/viewtopic.php?t=121821>
+
+
+### TODO subtitle hyperorg
+
+
+### DONE Check duration
+
+ (/ (apply '+
+ (mapcar #'compile-media-get-file-duration-ms
+ (directory-files emacsconf-cache-dir t "\\(main\\|webcams\\).webm\\|rms.*ogg")))
+ 3600000.0)
+
+28.860543888888888
+
+- 29 hours including Q&A
+- 14 hours of talks, 15 hours of Q&A
+
+(\* 28 0.0075 60)
+12.6
+
+
+### SOMEDAY Copy irc, haven&rsquo;t actually done that yet
+
+
+### SOMEDAY Create harvesting etherpad if needed to track the status?
+
+
+### DONE Update task status now that I have TO\_REVIEW\_QA, TO\_INDEX\_QA, TO\_CAPTION\_QA
+
+ (with-current-buffer (find-file-noselect emacsconf-org-file)
+ (org-map-entries
+ (lambda ()
+ (if (file-exists-p (expand-file-name (concat (org-entry-get (point) "VIDEO_SLUG") "--answers.webm")
+ emacsconf-cache-dir))
+ (org-todo "TO_INDEX_QA")
+ (org-todo "TO_REVIEW_QA")))
+ "TODO=\"TO_ARCHIVE\"+SLUG={.}")
+ )
+
+ (with-current-buffer (find-file-noselect emacsconf-org-file)
+ (org-map-entries
+ (lambda ()
+ (unless (file-exists-p (expand-file-name (concat (org-entry-get (point) "VIDEO_SLUG") "--bbb-webcams.webm")
+ emacsconf-cache-dir))
+ (org-todo "TO_ARCHIVE")))
+ "TODO=\"TO_REVIEW_QA\"+SLUG={.}")
+ )
+
+
+### TODO consider number-anonymizing the IRC chat
+
+
+### TODO switch to resources view
+
+
+### TODO Harvest the closing remarks
+
+
+### TODO Check normalization of answers
+
+<https://stackoverflow.com/questions/42492246/how-to-normalize-the-volume-of-an-audio-file-in-python>
+
+
+#### SOMEDAY Scripting - Audacity Manual
+
+<https://manual.audacityteam.org/man/scripting.html>
+
+
+### SOMEDAY Post transcripts, start working on chapter workflow
+
+
+### SOMEDAY Add audio-only handler for media card
+
+
+### SOMEDAY How to chunk text into paragraphs using python | by N Polovinkin | Medium
+
+<https://medium.com/@npolovinkin/how-to-chunk-text-into-paragraphs-using-python-8ae66be38ea6>
+
+
+### STARTED Figure out ways to make sense of IRC logs
+
+ssh
+Possible: thread speaker messages?
+Manual:
+
+- search backward to find the lines, put something under
+- avy to indent it under that line
+- use properties to suggest lines
+- copy everything, use Emacs News code to refile entries
+- anonymize after
+
+
+### TODO improve nil note for missing resources
+
+
+### CANCELLED Trim grail if needed
+
+
+### DONE I uploaded the Q&A sessions to Toobnix. :sachac:
+
+Least extra work if I do it after chapter markers, but I can just do them now and then update them later
+
+ (mapc (lambda (o)
+ (let ((default-directory "~/vendor/PeerTube/"))
+ (when (emacsconf-publish-upload-answers o 'toobnix)
+ (emacsconf-go-to-talk o)
+ (shell-command "xdotool mousemove 1782 370 click 1 sleep 1 key Ctrl+r sleep 4 mousemove 1584 546 click 3 sleep 1 mousemove 1664 746 click 1 mousemove 1584 546 sleep 1 key Alt+Tab sleep 1")
+ (org-entry-put
+ (point) "QA_TOOBNIX"
+ (read-string (format "URL for %s: "
+ (org-entry-get (point) "SLUG")))))))
+ (seq-remove
+ (lambda (o)
+ (or (null (emacsconf-talk-file o "--answers.webm"))
+ (plist-get o :qa-toobnix)))
+ (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+
+
+### DONE Upload answers to Youtube :sachac:
+
+Set eval to yes and work carefully.
+
+ (defun emacsconf-publish-answers-python (talk)
+ (interactive)
+ (concat "filename = \"\"\"" (emacsconf-talk-file talk "--answers.webm") "\"\"\"\n"
+ "title = \"\"\"" (emacsconf-publish-answers-title talk 100) "\"\"\"\n"
+ "description = \"\"\"" (emacsconf-publish-answers-description talk 'youtube) "\"\"\"\n"))
+ (plist-get
+ (seq-find (lambda (talk)
+ (not (or (null (emacsconf-talk-file talk "--answers.webm"))
+ (plist-get talk :qa-youtube))))
+ (emacsconf-prepare-for-display (emacsconf-get-talk-info)))
+ :slug)
+
+:end:
+
+quota, continue tomorrow
+
+
+#### Setup
+
+ from playwright.sync_api import Playwright, sync_playwright, expect
+ from pathlib import Path
+ import json
+
+ playwright = sync_playwright().start()
+ browser = playwright.firefox.launch(headless=False)
+ context = browser.new_context()
+ page = context.new_page()
+ context.add_cookies(json.loads(Path("cookies.json").read_text()))
+ page.goto("https://studio.youtube.com/")
+
+Save the cookies after it&rsquo;s all set up
+
+ Path("cookies.json").write_text(json.dumps(cookies))
+
+ context.add_cookies(json.loads(Path("cookies.json").read_text()))
+ page.goto("https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A")
+
+1. Upload the file
+
+ #page.get_by_role("dialog", name="Video processing").get_by_role("button", name="Close").click()
+ page.locator("#create-icon").click()
+ page.get_by_text("Upload videos").click()
+ page.get_by_role("button", name="Select files").click()
+ nil
+
+1. Set the talk details and copy the URL.
+
+ (save-window-excursion
+ (emacsconf-go-to-talk (emacsconf-resolve-talk slug))
+ (org-entry-put (point) "QA_YOUTUBE" url))
+
+
+##### Background code
+
+ (let ((talk (emacsconf-resolve-talk slug)))
+ (kill-new (emacsconf-talk-file talk "--answers.webm"))
+ (emacsconf-publish-answers-python talk))
+
+ nil
+ page.locator("#title-textarea").click()
+ page.keyboard.press("Control+KeyA")
+ page.keyboard.press("Delete")
+ page.keyboard.type(title)
+ page.locator("#description-textarea #textbox").fill(description)
+ page.locator('ytcp-video-metadata-playlists .dropdown-trigger-text').click()
+ page.get_by_role("dialog", name="Choose playlists").get_by_text("EmacsConf 2022").click()
+ page.get_by_role("button", name="Done").click()
+ page.get_by_role("button", name="Show more").click()
+ page.get_by_placeholder("Add tag").fill("emacs, emacsconf, answers")
+ page.get_by_placeholder("Add tag").click()
+ href = page.locator('a.ytcp-video-info').get_attribute('href')
+ page.locator("#step-badge-3").click()
+ page.locator(".ytcp-video-visibility-select[name=PUBLIC]").click()
+ page.get_by_role("button", name="PUBLISH").click()
+ print(href)
+
+<https://youtu.be/Q453L_whGEc>
+
+
+### TODO Add links to Q&A to Youtube video descriptions
+
+
+### SOMEDAY Make a podcast feed of the talks
+
+
+### TODO Check that webms have latest vtts
+
+
+### TODO Break autocaptions every 5 minutes or so, so that they can be included on the webpage
+
+
+### DONE Add maint chapter markers to Toobnix and Youtube, automate it
+
+ (setq talk (emacsconf-resolve-talk "maint"))
+ (replace-regexp-in-string
+ "\\\\" "\\\\\\\\"
+ (json-encode
+ (list
+ :qa-youtube (plist-get talk :qa-youtube)
+ :qa-toobnix (plist-get talk :qa-toobnix)
+ :slug (plist-get talk :slug)
+ :answers-description-youtube (emacsconf-publish-answers-description talk 'youtube)
+ :answers-description-toobnix (emacsconf-publish-answers-description talk 'youtube))))
+
+Update YouTube
+
+ from playwright.sync_api import Playwright, sync_playwright, expect
+ from pathlib import Path
+ import json
+ import re
+
+ talk = json.loads("""nil""")
+ playwright = sync_playwright().start()
+ browser = playwright.firefox.launch(headless=False)
+ context = browser.new_context()
+ page = context.new_page()
+ context.add_cookies(json.loads(Path("cookies.json").read_text()))
+ m = re.search("[^/=]+$", talk['qa-youtube'])
+ page.goto("https://studio.youtube.com/video/" + m.group(0) + "/edit")
+ page.locator("#description-textarea #textbox").fill(talk['answers-description-youtube'])
+ page.get_by_role('button', name="Save").click()
+
+Update Toobnix:
+
+ talk = json.loads("""nil""")
+ m = re.search("[^/=]+$", talk['qa-youtube'])
+ page.goto("https://toobnix.org/videos/update/" + m.group(0))
+ page.locator("#description").fill(talk['answers-description-toobnix'])
+ page.locator('.orange-button').click()
+
+
+<a id="thanks"></a>
+
+## TODO Send thanks
+
+
+### TODO Send thank-you notes to speakers
+
+Dependencies:
+
+- youtube, toobnix urls
+- bbb playback urls
+- pads copied
+
+ (defvar emacsconf-mail-thank-speaker-open-youtube t
+ "If non-nil, browse to the YouTube page so we can mention views and stuff.")
+
+ (defun emacsconf-mail-thank-speaker (group &optional template)
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (delete-other-windows)
+ (with-selected-window
+ (split-window-right)
+ (emacsconf-edit-wiki-page (plist-get (cadr group) :slug))
+ (when (> (length (cdr group)) 1)
+ (mapc
+ (lambda (talk)
+ (with-selected-window (split-window-below)
+ (emacsconf-edit-wiki-page (plist-get talk :slug))))
+ (cddr group))
+ (balance-windows)))
+ (let ((with-bbb (seq-filter (lambda (talk) (plist-get talk :bbb-playback)) (cdr group))))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "thanks-speaker"))
+ (car group)
+ (list
+ :email (car group)
+ :conf-name emacsconf-name
+ :year
+ emacsconf-year
+ :plural
+ (if (= (length (cdr group)) 1) "" "s")
+ :video-is
+ (if (= (length (cdr group)) 1) "video is" "videos are")
+ :bbb-note
+ (if with-bbb
+ (concat
+ " We'd like to publish the audio (and possibly the video as well)
+ with chapter markers and maybe even captions, depending on
+ volunteers. In case you want to revisit your Q&A session in
+ order to remember anything particularly cool that you'd like to
+ follow up on (or anything particularly sensitive/embarrassing
+ that you'd like us to omit), you can view the BigBlueButton
+ playback at " (mapconcat (lambda (talk) (plist-get talk :bbb-playback)) with-bbb " , ") " . Volunteers will be working on harvesting the Q&A over the next few weeks/months. If you'd like to help with the processing, I've added the files
+ to ${backstage} and documented our harvesting process at
+ https://emacsconf.org/harvesting/ . The files start with --bbb in the backstage area. This is
+ totally optional and just there in case you feel like taking advantage
+ of it. =)")
+ "")
+ :backstage
+ (mapconcat (lambda (talk)
+ (concat "https://media.emacsconf.org/" emacsconf-year "/backstage/#" (plist-get talk :slug)))
+ (cdr group) " , ")
+ :urls
+ (mapconcat (lambda (talk)
+ (plist-get talk :absolute-url))
+ (cdr group) " , ")
+ :toobnix-url
+ (mapconcat (lambda (talk)
+ (plist-get talk :toobnix-url))
+ (cdr group) " , ")
+ :youtube-url
+ (mapconcat (lambda (talk)
+ (plist-get talk :youtube-url))
+ (cdr group) " , ")
+ :speakers-short (plist-get (cadr group) :speakers-short)))
+ (when emacsconf-mail-thank-speaker-open-youtube
+ (mapc (lambda (talk)
+ (when (plist-get talk :youtube-url)) (browse-url (plist-get talk :youtube-url)))
+ (cdr group)))))
+
+
+#### Template
+
+Hi, ${speakers-short}!
+
+Thank you so much for being part of EmacsConf ${year}! Hundreds of
+people enjoyed it, and I&rsquo;m sure even more will come across the videos
+in the days to follow.
+
+Your ${video-is} available on the talk page${plural} at ${urls} , and
+we&rsquo;ve added the discussions from Etherpad/IRC.${bbb-note}${wrap}
+
+We&rsquo;ve also uploaded your talk video${plural} to Toobnix (a PeerTube
+instance) at ${toobnix-url} and YouTube at ${youtube-url} . If you
+want to reupload the video to your own channel, please feel free to do
+so. If you let me know where you&rsquo;ve uploaded it, I think I can switch
+our playlist to include your version of the video instead. That way,
+it might be easier for you to respond to comments on videos.${wrap}
+
+If you would like to share more resources, you can add them to the
+talk page or e-mail them to us and we can add them for you.
+
+Thanks again for speaking at EmacsConf!
+
+Sacha
+
+
+### TODO Send thank-you notes to volunteers
+
+
+<a id="files"></a>
+
+## STARTED Finalize the files to be used for streaming
+
+Verify that all the files load
+
+ (let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+ (mapconcat
+ (lambda (track)
+ (concat "- " (plist-get track :name) "\n"
+ (mapconcat
+ (lambda (talk)
+ (if (plist-get talk :video-file)
+ (format " - [ ] [[elisp:(emacsconf-stream-play-talk-on-change \"%s\")][Play %s]]\n"
+ (plist-get talk :slug) (plist-get talk :slug))
+ ""))
+ (emacsconf-filter-talks-by-track track info))))
+ emacsconf-tracks))
+
+How about the ones that might be live
+
+ (let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+ (mapconcat
+ (lambda (track)
+ (concat "- " (plist-get track :name) "\n"
+ (mapconcat
+ (lambda (talk)
+ (if (null (plist-get talk :video-file))
+ (format " - [ ] [[elisp:(emacsconf-stream-play-talk-on-change \"%s\")][Play %s]]\n"
+ (plist-get talk :slug) (plist-get talk :slug))
+ ""))
+ (emacsconf-filter-talks-by-track track info))))
+ emacsconf-tracks))
+
+
+### TODO Fix my audio volume for intros
+
+
+### DONE Remove first eight seconds of Jupyter if possible, and the last 16 seconds or so
+
+screen -S jupyter-trim ffmpeg -y -ss 8 -to 00:16:40 -i emacsconf-2022-jupyter&#x2013;edit-live-jupyter-notebook-cells-with-emacs&#x2013;blaine-mooers&#x2013;final.webm emacsconf-2022-jupyter&#x2013;edit-live-jupyter-notebook-cells-with-emacs&#x2013;blaine-mooers&#x2013;trimmed.webm
+
+
+### TODO Regenerate overlays to accommodate different layout
+
+
+<a id="derisk"></a>
+
+## Look for ways to reduce risk :derisk:
+
+<https://pad.emacsconf.org/premortem>
+
+
+### DONE Click on stuff with xdotool
+
+(emacsconf-stream-bbb &ldquo;journalism&rdquo;)
+(emacsconf-stream-xdotool-set-up-bbb &ldquo;journalism&rdquo;)
+;; get into backstage area
+xdotool mousemove 806 385 click 1
+
+(progn
+)
+
+(let ((pos (emacsconf-stream-xdotool &ldquo;General&rdquo; &ldquo;getmouselocation&rdquo;)))
+ (when (string-match &ldquo;x:\\$[0-9]+\$ y:\\$[0-9]+\$&rdquo; pos)
+ (insert (format &ldquo;(emacsconf-stream-xdotool \\&rdquo;General\\&ldquo; \\&rdquo;mousemove %s %s click 1\\&ldquo;)\n&rdquo; (match-string 1 pos) (match-string 2 pos)))))
+
+(emacsconf-stream-track-ssh
+ (emacsconf-get-track &ldquo;General&rdquo;)
+ (split-string &ldquo;xdotool &rdquo;))
+
+xdotool mousemove 253 176 click 1
+xdotool mousemove 215 164 click 1
+xdotool key f11
+
+
+### DONE Make copyable version of bbb redirect :derisk:
+
+
+### DONE Make sure all the important tasks are scheduled over the next two weeks
+
+ (defun emacsconf-prep-agenda ()
+ (interactive)
+ (let* ((notebook (expand-file-name "index.org" (expand-file-name "organizers-notebook" (expand-file-name emacsconf-year emacsconf-directory))))
+ (org-agenda-custom-commands
+ `(("a" "Agenda"
+ ((tags-todo "-PRIORITY=\"C\"-SCHEDULED={.}-nextyear"
+ ((org-agenda-files (list ,notebook))))
+ (agenda ""
+ ((org-agenda-files (list ,notebook))
+ (org-agenda-span 7)))
+ )))))
+ (org-agenda nil "a")))
+
+
+### DONE Try a reboot before the resize :sachac:
+
+- After rebooting live0, we should still be able to:
+ - [X] SSH to it
+ - [X] Stream gen to it
+ - [X] Start up the fallbacks: screen-fallbacks
+ - test: mpv <https://live0.emacsconf.org/gen-fallback.webm>
+ - [X] Play gen stream: mpv <https://live0.emacsconf.org/gen.webm>
+ - [X] Play gen 480p stream: mpv <https://live0.emacsconf.org/gen-480p.webm>
+ - [X] Go to watch page for gen:
+ - <https://emacsconf.org/2022/watch/gen/>
+ - <https://live.emacsconf.org/2022/watch/gen/>
+ - [X] Start test restream to toobnix
+ - screen-restream-test-toobnix.sh
+ - <https://toobnix.org/w/dmibQFkBTNcJyTVVQTyd5C>
+ - Test dev as well (optional)
+ - [X] Stream dev to it
+ - [X] Play dev stream
+ - [X] Play dev 480p stream
+ - [X] Go to watch page for dev
+- After rebooting front0, we should still be able to:
+ - [X] View the wiki <https://emacsconf.org/2022/>
+ - [X] Update the status page [edit](file://ssh:front0.emacsconf.org:/var/www/status.emacsconf.org/index.html) <https://status.emacsconf.org>
+ - [ ] Go to the pad: <https://pad.emacsconf.org/2022>
+
+
+### DONE icecast fallback :derisk:sachac:
+
+
+#### Creating the files
+
+ffmpeg -y -f lavfi -i anullsrc=channel\_layout=stereo:sample\_rate=48000 -loop 1 -r 20 -t 10 -i sorry.png -c:v libvpx -c:a libvorbis -color\_primaries 1 -color\_trc 1 -colorspace 1 -crf 30 -g 120 -minrate 1.5M -b:v 1500 -g 120 -maxrate 1.5M -cluster\_time\_limit 5100 -shortest sorry.webm
+
+ffmpeg -y -f lavfi -i anullsrc=channel\_layout=stereo:sample\_rate=48000 -loop 1 -r 20 -t 10 -i sorry.png -vf scale=854:480 -c:v libvpx -c:a libvorbis -color\_primaries 1 -color\_trc 1 -colorspace 1 -crf 30 -g 120 -minrate 1.5M -b:v 1500 -g 120 -maxrate 1.5M -cluster\_time\_limit 5100 -shortest sorry-480p.webm
+
+icecast 2.4.4
+ Stream #0:0: Video: vp8, yuv420p(tv, bt709, progressive), 1280x720, SAR 1:1 DAR 16:9, 20 fps, 20 tbr, 1k tbn, 1k tbc (default)
+ Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
+
+Okay. I can ffmpeg to /gen-sorry.webm with
+orga@live0:/usr/share/icecast2/web$ ffmpeg -r 20 -re -stream\_loop -1 -i gen-fallback.webm -f webm -content\_type video/webm -c:a copy -c:v copy icecast://https://emacsconf.org/2022/talks/$PASSWORD@localhost:8001/gen-sorry.webm
+
+
+##### TODO Add test pattern to part of the screen
+
+
+##### gen
+
+Input #0, matroska,webm, from &rsquo;http://live0.emacsconf.org:8001/gen.webm&rsquo;:
+ Metadata:
+ ENCODER : Lavf58.20.100
+ icy-pub : 0
+ icy-metadata : 1
+ Duration: N/A, start: 39.061000, bitrate: N/A
+ Stream #0:0: Video: vp8, yuv420p(tv, bt709, progressive), 1280x720, SAR 1:1 DAR 16:9, 20 fps, 20 tbr, 1k tbn, 1k tbc (default)
+ Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
+
+
+##### fallback
+
+Input #0, matroska,webm, from &rsquo;http://live0.emacsconf.org:8001/gen.webm&rsquo;:
+ Metadata:
+ ENCODER : Lavf58.20.100
+ icy-pub : 0
+ icy-metadata : 1
+ Duration: N/A, start: 19.473000, bitrate: N/A
+ Stream #0:0: Video: vp8, yuv420p(tv, bt709, progressive), 1280x720, SAR 1:1 DAR 16:9, 20 fps, 20 tbr, 1k tbn, 1k tbc (default)
+ Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
+
+
+#### DONE Create fallback for 480p as well
+
+
+#### DONE Create fallback video
+
+
+#### DONE Add more ffmpeg options from the OBS profile to try to get them to match as closely as possible
+
+
+#### DONE Detect fallback and reload the video player
+
+<https://stackoverflow.com/questions/36280764/audio-stops-playing-while-moving-to-fallback-mount-using-icecast#36332739>
+
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (c) 2022 Sacha Chua - CC0 Public Domain
+ var video = document.querySelector('video.reload');
+ if (video) {
+ var myVar = setInterval(reloadAsNeeded, 1000);
+ var oldTime = '';
+ function reloadAsNeeded() {
+ if ((video.paused != true && (video.currentTime - oldTime) == 0 && video.currentTime != 0)) {
+ var source = video.querySelector('source');
+ var oldVideo = source.src;
+ source.src = '';
+ source.src = oldVideo;
+ video.load();
+ video.play();
+ }
+ oldTime = video.currentTime;
+ };
+ }
+ // @license-end
+
+
+### DONE Make sure things are okay for me to handle both streams :sachac:
+
+
+#### DONE Add keyboard shortcuts
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">S-g</td>
+<td class="org-left">gen VNC</td>
+</tr>
+
+
+<tr>
+<td class="org-left">S-d</td>
+<td class="org-left">dev VNC</td>
+</tr>
+
+
+<tr>
+<td class="org-left">S-G</td>
+<td class="org-left">gen console</td>
+</tr>
+
+
+<tr>
+<td class="org-left">S-D</td>
+<td class="org-left">dev console</td>
+</tr>
+
+
+<tr>
+<td class="org-left">S-o</td>
+<td class="org-left">orga@res console</td>
+</tr>
+</tbody>
+</table>
+
+
+#### DONE figure out left/right to keep track of both streams
+
+I&rsquo;m just going to do this with pavucontrol so that it&rsquo;s not too complicated
+
+
+#### CANCELLED Tweak my audio setup for push-to-talk?
+
+<https://news.ycombinator.com/item?id=23160101>
+<https://gist.github.com/zouppen/bdd40a42c77ca387fae8bace0f2ed3e0>
+
+
+#### DONE Guard against over-announcing by paying attention to erc
+
+Goal: Don&rsquo;t spam the channel with talk announcements
+
+If it was announced in the last 5 minutes, don&rsquo;t reannounce it as part
+of the hook, but allow reannouncements if called manually.
+
+How to detect announcements:
+
+If it was the most recently announced talk in the channel, don&rsquo;t re-announce it
+
+(with-eval-after-load &rsquo;erc (add-hook &rsquo;erc-insert-pre-hook &rsquo;emacsconf-erc-notice-announcements))
+
+
+<a id="qa"></a>
+
+## CANCELLED Make checkin and Q&A process slide :sachac:
+
+Low-priority because people were able to manage fine last year
+Even better if we can add in-between slides (ex:
+<https://media.emacsconf.org/2022/in-between/journalism>) for slide #2
+
+asked corwin about access to bbb.emacsverse.org because uploading
+presentations seems to not work on our instance. In the meantime, we
+can paste in <https://emacsconf.org/2022/qa/> for tips.
+
+
+<a id="caption"></a>
+
+## Caption talks and make chapter headings
+
+
+### DONE Nudge volunteers to e-mail me captions by Dec 1 :mail:sachac:
+
+
+### DONE Copy chapter headings for mail talk :emacsconf:captions:
+
+
+### DONE Caption the new talks :sachac:
+
+
+<a id="host-intros"></a>
+
+## Prepare intros for the hosts to read
+
+<https://pad.emacsconf.org/intros>
+also in :INTRO\_NOTE: in conf.org so that we can plop it into the hyperlists.
+
+
+### DONE Write intros for all the other talks
+
+so that people on other platforms can come across EmacsConf
+
+
+### DONE Record a few sample intros to test the workflow
+
+mogrify -alpha off file.png
+
+
+### DONE Write the restreaming shell scripts
+
+
+### DONE Create the events and save the keys :sachac:
+
+[Other platforms](file:///home/sacha/proj/emacsconf/private/conf.md)
+
+$1 is of the form rtmp://&#x2026;/stream\_key
+
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
+
+Creating the events
+
+- YouTube: Create - Go Live - Schedule Stream - Streaming Software
+- Toobnix: Publish - Go live
+ - max live is 5 hours
+
+
+##### EmacsConf 2022 - General track
+
+This is for the general track of EmacsConf, the conference about the joy of Emacs and Emacs Lisp.
+
+Schedule:
+Saturday Dec 3, 2022, 9 AM - 12 PM EST, 1 PM - 5 PM EST
+Sunday Dec 4, 2022, 9 AM - 12 PM EST, 1 PM - 5 PM EST
+
+Watch using free/open source software: <https://live.emacsconf.org/2022/watch/gen/>
+Conference info: <https://emacsconf.org/2022/>
+Schedule: <https://emacsconf.org/2022/talks/>
+Chat on #emacsconf-dev via <https://chat.emacsconf.org> or irc.libera.chat
+Etherpad: <https://pad.emacsconf.org/2022>
+
+Videos are shared under the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license. Please observe the guidelines for conduct: <https://emacsconf.org/conduct/>
+
+
+##### EmacsConf 2022 - Development track
+
+This is for the development track of EmacsConf, the conference about the joy of Emacs and Emacs Lisp.
+
+Schedule:
+Saturday Dec 3, 2022, 9 AM - 12 PM EST, 1 PM - 5 PM EST
+Sunday Dec 4, 2022, 9 AM - 12 PM EST, 1 PM - 5 PM EST
+
+Watch using free/open source software: <https://live.emacsconf.org/2022/watch/dev/>
+Conference info: <https://emacsconf.org/2022/>
+Schedule: <https://emacsconf.org/2022/talks/>
+Chat on #emacsconf-dev via <https://chat.emacsconf.org> or irc.libera.chat
+Etherpad: <https://pad.emacsconf.org/2022>
+
+Videos are shared under the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license. Please observe the guidelines for conduct: <https://emacsconf.org/conduct/>
+
+
+### DONE Test start restream on a timer :emacsconf:
+
+ssh live0.emacsconf.org
+confirm that Toobnix test stream isn&rsquo;t playing
+
+echo &rsquo;/bin/bash /home/orga/screen-restream-test-toobnix.sh&rsquo; | at &rsquo;now + 1 minute&rsquo;
+echo &rsquo;/bin/bash /home/orga/screen-restream-test-toobnix.sh&rsquo; | at 8:30
+
+
+### TODO Process the other intros
+
+
+### DONE Record more intros :zaeph:
+
+
+### DONE Record two-part introduction for RMS talk
+
+Before Richard Stallman shares what he&rsquo;d like to see in Emacs, we will first play Richard Stallman&rsquo;s 2014 TEDx talk called &ldquo;Free Software, Free Society&rdquo;. The TEDx talk is licensed under the Creative Commons Attribution - No Derivative Works 3.0 license.
+
+The next talk is called &ldquo;What I&rsquo;d like to see in Emacs,&rdquo; by Richard Stallman. This talk will be under the Creative Commons Attribution - ShareAlike license like the other talks at EmacsConf. Afterwards, he will answer questions via a moderated Q&A, so please put your questions in the Etherpad or IRC.
+
+
+### DONE Add images to zaeph&rsquo;s intros :sachac:
+
+
+### DONE Add subtitles to intros
+
+
+### DONE rerecord zachary, pronunciation
+
+
+### DONE rerecord buddy, got mixed up with meetups
+
+
+### DONE redo visual for health, changed the title case
+
+
+### DONE rerecord indieweb, accent on the wrong syllable
+
+
+### DONE rerecord jupyter intro, repetitive
+
+
+### TODO consider rerecording meetups to add
+
+Spanish subtitles are also available for this talk.
+
+You can find them on the talk page.
+
+
+### TODO Contextualize journalism talk
+
+
+<a id="video-platforms"></a>
+
+## DONE Set up talks on Toobnix and YouTube :sachac:yt:toobnix:
+
+so that people can find the videos on other video platforms
+waiting for prerecs
+
+category 15: science and technology
+license 2: attribution - share alike
+language: en
+privacy 2: unlisted
+tags: emacs,emacsconf
+
+
+### DONE Add toobnix url on schedule
+
+
+### Upload to YouTube
+
+ (insert
+ (string-join
+ (seq-take
+ (seq-keep
+ (lambda (o)
+ (when (and
+ (file-exists-p
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--final.webm")
+ emacsconf-cache-dir))
+ (null (plist-get o :youtube-url)))
+ (format "./youtube-upload --client-secrets=../../client_secret.json --title=%s --description=%s --category=%s --tags=emacs,emacsconf --recording-date=%s --default-language=en --default-audio-language=en --embeddable=True %s"
+ (shell-quote-argument
+ (concat emacsconf-name " " emacsconf-year ": " (plist-get o :title) " - " (plist-get o :speakers-with-pronouns)))
+ (shell-quote-argument
+ (emacsconf-publish-video-description o))
+ (shell-quote-argument "Science & Technology")
+ (format-time-string "%Y-%m-%dT%H:%M:%S.0Z" (plist-get o :start-time) t)
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--final.webm")
+ emacsconf-cache-dir)
+ )))
+ (emacsconf-get-talk-info)) 1)
+ "\n"))
+ ./youtube-upload --client-secrets=../../client_secret.json --title=EmacsConf\ 2022\:\ Writing\ and\ organizing\ literature\ notes\ for\ scientific\ writing\ -\ Vidianos\ Giannitsis --description=https\://emacsconf.org/2022/talks/science'
+ ''
+ '00\:00\:00\ My\ second\ brain'
+ '00\:28\ Contents\ of\ the\ talk'
+ '01\:40\ Bibliography\ management'
+ '02\:35\ Creating\ literature\ notes\:\ ivy-bibtex-edit-notes'
+ '03\:04\ org-roam\ reference\ template'
+ '04\:40\ Demo'
+ '05\:40\ Annotating\ with\ org-noter'
+ '06\:44\ Annotating\ in\ English'
+ '07\:02\ Afterthoughts\ on\ an\ article'
+ '07\:30\ Adding\ a\ note'
+ '08\:21\ Creating\ permanent\ notes\ from\ reference\ material'
+ '09\:01\ The\ organization\ problem'
+ '09\:21\ zetteldesk.el'
+ '10\:43\ The\ zetteldesk-desktop'
+ '11\:45\ Filtering\ with\ ivy-bibtex'
+ '12\:09\ Inserting\ literature'
+ '13\:46\ Composing\ the\ final\ article'
+ '15\:19\ Thanks'
+ ''
+ 'You\ can\ view\ this\ and\ other\ resources\ using\ free/libre\ software\ at\ https\://emacsconf.org/2022/talks/science\ .'
+ 'This\ video\ is\ available\ under\ the\ terms\ of\ the\ Creative\ Commons\ Attribution-ShareAlike\ 4.0\ International\ \(CC\ BY-SA\ 4.0\)\ license. --category=Science\ \&\ Technology --tags=emacs,emacsconf --recording-date=2022-12-03T15:45:00.0Z --default-language=en --default-audio-language=en --embeddable=True /home/sacha/proj/emacsconf/cache/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--final.webm
+
+
+### Toobnix
+
+ (insert
+ (string-join
+ (seq-keep
+ (lambda (o)
+ (when (and
+ (file-exists-p
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--main.webm")
+ emacsconf-cache-dir))
+ (null (plist-get o :toobnix-url)))
+ (format "cd ~/vendor/PeerTube; node dist/server/tools/peertube.js upload -f %s -n %s -l 2 -c 15 -P 2 -t emacs,emacsconf -L en -C emacsconf -d %s"
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--main.webm")
+ emacsconf-cache-dir)
+ (shell-quote-argument
+ (concat emacsconf-name " " emacsconf-year ": " (plist-get o :title) " - " (plist-get o :speakers-with-pronouns)))
+ (shell-quote-argument
+ (emacsconf-publish-video-description o)))))
+ (emacsconf-get-talk-info))
+ "\n"))
+
+
+### DONE Upload the rest of the talks to Toobnix
+
+
+### DONE Add Toobnix talks to a playlist
+
+ (mapc (lambda (o)
+ (when (plist-get o :toobnix-url)
+ (browse-url (plist-get o :toobnix-url))
+ (shell-command "xdotool sleep 5 mousemove 1815 1030 click 1 sleep 2 mousemove 1684 799 click 1 key Alt+Tab")
+ (read-string "Continue?")))
+ (let ((talks (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+ (seq-drop talks
+ (1+ (seq-position talks
+ (seq-find (lambda (o) (string= (plist-get o :slug) "haskell")) talks)))))
+ )
+
+
+### DONE Add Youtube talks to a playlist
+
+
+### DONE Upload talks to YouTube
+
+ (seq-keep
+ (lambda (o)
+ (when (and
+ (file-exists-p
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--final.webm")
+ emacsconf-cache-dir))
+ (null (plist-get o :youtube-url)))
+ (concat (plist-get o :video-slug) "--final.webm")))
+ (emacsconf-get-talk-info))
+
+ ;; This buffer is for text that is not saved, and for Lisp evaluation.
+ ;; To create a file, visit it with C-x C-f and enter text in its buffer.
+
+ (let ((pos (shell-command-to-string "xdotool getmouselocation")))
+ (when (string-match "x:\\([0-9]+\\) y:\\([0-9]+\\)" pos)
+ (insert (format "(shell-command \"xdotool mousemove %s %s click 1\")\n" (match-string 1 pos) (match-string 2 pos)))))
+
+ (setq list (seq-filter (lambda (o)
+ (and
+ (file-exists-p
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--final.webm")
+ emacsconf-cache-dir))
+ (null (plist-get o :youtube-url))))
+ (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+ (setq list (cons talk list))
+
+ (while list
+ (progn
+ (shell-command "xdotool mousemove 707 812 click 1 sleep 2")
+
+ (setq talk (pop list))
+ ;; click create
+ (shell-command "xdotool mousemove 843 187 click 1 sleep 1")
+ ;; video
+ (shell-command "xdotool mousemove 833 217 click 1 sleep 1")
+ ;; select files
+ (shell-command (concat "xdotool mousemove 491 760 click 1 sleep 4 type "
+ (shell-quote-argument (concat (plist-get talk :video-slug) "--final.webm"))))
+ ;; open
+ (shell-command "xdotool mousemove 1318 847 click 1 sleep 5")
+
+ (kill-new (concat
+ emacsconf-name " "
+ emacsconf-year ": "
+ (plist-get talk :title)
+ " - "
+ (plist-get talk :speakers-with-pronouns)))
+ (shell-command "xdotool sleep 1 mousemove 331 440 click :1 key Ctrl+a Delete sleep 1 key Ctrl+Shift+v sleep 2")
+
+ (kill-new (emacsconf-publish-video-description talk t))
+ (shell-command "xdotool mousemove 474 632 click 1 sleep 1 key Ctrl+a sleep 1 key Delete sleep 1 key Ctrl+Shift+v"))
+ (read-string "Press a key once you've pasted in the description")
+
+ ;; next
+ (when (emacsconf-captions-edited-p (expand-file-name (concat (plist-get talk :video-slug) "--main.vtt") emacsconf-cache-dir))
+ (shell-command "xdotool mousemove 352 285 click 1 sleep 1")
+
+ ;; add captions
+ (shell-command "xdotool mousemove 877 474 click 1 sleep 3")
+ (shell-command "xdotool mousemove 165 408 click 1 sleep 1")
+ (shell-command "xdotool mousemove 633 740 click 1 sleep 2")
+ (shell-command (concat "xdotool mousemove 914 755 click 1 sleep 4 type "
+ (shell-quote-argument (concat (plist-get talk :video-slug) "--main.vtt"))))
+ (read-string "Press a key once you've loaded the VTT")
+ (shell-command "xdotool mousemove 910 1037 sleep 1 click 1 sleep 4")
+ ;; done
+ (shell-command "xdotool mousemove 890 297 click 1 sleep 3")
+ )
+
+
+ (progn
+ ;; visibility
+ (shell-command "xdotool mousemove 810 303 click 1 sleep 2")
+ ;; public
+ (shell-command "xdotool mousemove 119 614 click 1 sleep 2")
+ ;; copy
+ (shell-command "xdotool mousemove 882 669 click 1 sleep 1")
+ ;; done
+ (shell-command "xdotool mousemove 908 1089 click 1 sleep 5 key Alt+Tab")
+
+ (emacsconf-with-talk-heading talk
+ (org-entry-put (point) "YOUTUBE_URL" (read-string "URL: "))
+ ))
+ )
+
+ ;; (shell-command "xdotool mousemove 165 408 click 1 sleep 1")
+ ;; (shell-command "xdotool mousemove 2312 1483 click 1 sleep 1")
+ ;; ;; schedule
+ ;; (shell-command "xdotool mousemove 1527 752 click 1")
+ ;; (message "%s" (format-time-string "%Y-%m-%d %I:%M %p" (plist-get talk :start-time)
+ ;; emacsconf-timezone))))
+ ;; ;; (shell-command (concat "xdotool mousemove 1695 611 click 1 key Shift+PgDn Ctrl+a Del type "
+ ;; ;; (format-time-string "%I:%M %p"
+ ;; ;; (plist-get talk :start-time)
+ ;; ;; emacsconf-timezone)))
+ ;; ;; copy link
+
+ ;; (progn
+ ;; (shell-command "xdotool mousemove 2284 668 click 1 sleep 1 click 1")
+ ;; ;; schedule
+ ;; (shell-command "xdotool mousemove 2324 1498 click 1 sleep 3")
+
+ ;; ;; close
+ ;; (shell-command "xdotool mousemove 2100 996 click 1")
+ ;; )
+
+
+### DONE upload the rest of the files onto Toobnix
+
+
+### TODO Upload more Toobnix and YouTube talks
+
+
+<a id="dry-run"></a>
+
+## DONE Do another run
+
+Summary:
+
+- bandali will stream from his computer; confirmed can stream to dev
+- corwin will probably connect to gen by VNC; confirmed can connect to VNC and click around, need to become more familiar with setup after trip
+- sachac will be backup streamer if bandali or corwin are unavailable
+
+Goals:
+
+- Good: Streamers are set up to broadcast from their own OBS if needed (could be a backup plan, could be the main plan)
+- Better: Streamers can connect to the VNC session for their track, manage OBS, start videos (with overlays), and browse the Q&A links
+- Best: Streamers can connect via emacsclient in orga@res.emacsconf.org, manage the task status, and have everything working
+
+Agenda:
+
+- Get familiar with the setup
+- Consider whether we want to prioritize local OBS (more screen real estate) or stream OBS (easier swapping, can be controlled remotely)
+- Consider whether we want mumble to be able to quickly add audio; how do we want to set it up scene-wise?
+
+
+### Checklist for later dry run
+
+1. Streams
+ - [ ] General stream
+ - [ ] Development stream
+ - [ ] 480p streams
+2. Scenes
+ - [ ] Intro
+ - [ ] Prerec
+ - [ ] Q&A: live
+ - [ ] Q&A: IRC
+ - [ ] Q&A: pad
+3. [ ] IRC channels
+ - [ ] Announce
+ - [ ] Question handling
+ - [ ] Timers
+4. [ ] Watching pages
+ - [ ] Before launch
+ - [ ] Streaming
+ - [ ] Emergency announcement
+5. [ ] Pads
+6. [ ] Wiki
+ - [ ] Schedule update
+ - [ ] Message on the schedule
+ - [ ] Prerec live
+7. [ ] Wind everything down
+
+Later on
+
+- [ ] Toobnix stream
+- [ ] YouTube stream
+
+
+### Create test
+
+gst-launch-1.0 compositor name=mix sink\_1::xpos=1180 sink\_1::ypos=470 ! videoconvert ! autovideosink filesrc location=community-title.svg ! rsvgdec ! imagefreeze num\_buffers=100 ! mix. videotestsrc ! video/x-raw,width=400,height=300 ! mix. audiotestsrc freq ! autoaudiosink
+
+gst-launch-1.0 compositor name=mix sink\_1::xpos=1200 sink\_1::ypos=600 ! videoconvert ! autovideosink \\
+filesrc location=community-title.svg ! rsvgdec ! imagefreeze num\_buffers=100 ! mix. \\
+filesrc location=background.opus ! oggdemux ! opusdec ! audioconvert ! audioresample ! mix.
+videotestsrc ! video/x-raw,width=400,height=300,framerate=25/1 num\_buffers=(25 \* (4 \* 60 + 5)) ! mix.
+
+gst-launch-1.0 webmmux name=mux ! filesink location=community.webm \\
+compositor name=mix sink\_1::xpos=1200 sink\_1::ypos=600 ! videoconvert ! vp8enc ! queue ! mux.video\_0 \\
+filesrc location=community-title.svg ! rsvgdec ! imagefreeze num\_buffers=2450 ! mix. \\
+filesrc location=background.opus ! oggdemux ! opusdec ! audioconvert ! audioresample ! vorbisenc ! queue ! mux.audio\_0 \\
+videotestsrc num\_buffers=2450 ! video/x-raw,width=400,height=300,framerate=10/1 ! mix.
+
+1251,/home/sacha/proj/emacsconf/private/assets/titles% find -name community-title.svg -exec inkscape &#x2013;export-type=png &#x2013;export-width=1280 &#x2013;export-height=720 &#x2013;export-background-opacity=0 {} \\;
+
+
+### DONE Do mini dry run
+
+
+#### DONE Revisit OBS and streaming setup to prepare for the dry run next weekend
+
+
+#### DONE Make mini dry run hyperlist with buttons
+
+- hh:mm slug
+ - hyperlist note
+ - set talk playing
+ - play intro
+ - play talk
+ - set talk closed q
+ - join bbb
+ - set talk open q
+ - set talk to archive
+
+(emacsconf-hyperlist-show-streamer-day &ldquo;2022-12-03&rdquo;)
+(emacsconf-hyperlist-show-streamer-day &ldquo;2022-12-04&rdquo;)
+
+Testing:
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">intro</td>
+<td class="org-left">talk</td>
+<td class="org-left">Q&amp;A</td>
+<td class="org-left">Expected</td>
+</tr>
+
+
+<tr>
+<td class="org-left">journalism</td>
+<td class="org-left">recorded</td>
+<td class="org-left">live</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">school</td>
+<td class="org-left">recorded</td>
+<td class="org-left">recorded</td>
+<td class="org-left">IRC</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">handwritten</td>
+<td class="org-left">recorded</td>
+<td class="org-left">recorded</td>
+<td class="org-left">BBB</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">treesitter</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">health</td>
+<td class="org-left">live</td>
+<td class="org-left">recorded</td>
+<td class="org-left">BBB</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">jupyter</td>
+<td class="org-left">live</td>
+<td class="org-left">live</td>
+<td class="org-left">BBB</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+</tbody>
+</table>
+
+- journalism: recorded intro, recorded talk, live
+
+(emacsconf-hyperlist-show-streamer-day &ldquo;2022-12-03&rdquo; nil
+(list &ldquo;journalism&rdquo; &ldquo;school&rdquo; &ldquo;treesitter&rdquo; &ldquo;handwritten&rdquo; &ldquo;health&rdquo; &ldquo;jupyter&rdquo;))
+
+
+### DONE Do a dry run for the dry run
+
+
+<a id="upload-off"></a>
+
+## TODO Turn off file upload service on media.emacsconf.org :sachac:infra:
+
+so that nginx can have more memory and we don&rsquo;t risk slowdowns
+
+
+<a id="review"></a>
+
+## DONE Review notebook for tasks, priorities, and scheduling
+
+
+### TODO Review tasks
+
+
+<a id="mumble"></a>
+
+## Use Mumble for backchannel coordination and also on-stage
+
+<span class="timestamp-wrapper"><span class="timestamp">[2022-11-19 Sat] </span></span> sachac: Confirmed that you can join the emacsconf-dev or emacsconf-gen channel if you have access, and you can speak on air in just that channel
+
+
+### DONE Update the Mumble setup :bandali:
+
+- [X] Add emacsconf-gen and emacsconf-dev channels
+- [X] Give the emacsconf-gen and emacsconf-dev users access to them
+- [X] Give the other organizers access to emacsconf-gen, emacsconf-dev, and org-private
+- [X] Get emacsconf-gen and -dev to join the right channels
+
+
+### DONE E-mail volunteers and help them get on Mumble :bandali:
+
+
+#### Template
+
+We plan to use Mumble as a virtual walkie-talkie during the conference
+so that we can quickly talk to each other as needed. It can also be a
+way for us to add our audio to the streams. Please set up your system
+as follows:
+
+1. Install a Mumble client on the device you want to use to connect to
+ the voice channel. It can be your computer or phone. You can choose
+ the username that you would like to log in with.
+2. Create and backup your certificate. (This is part of the wizard for
+ the desktop client, and it might be automatic on a phone client.)
+3. Connect to mumble.emacsconf.org with your desired username.
+4. Register your account on the server using the `Self > Register`
+ command. This reserves your username using your certificate and
+ allows me to add you to ACLs.
+5. Let me know (sachac on #emacsconf-org in IRC or
+ sacha@sachachua.com) when you&rsquo;ve registered so that I can add you
+ to the access control lists for the private channels. If I&rsquo;m around
+ on mumble (sachac), you can say hi to me there and confirm that
+ it&rsquo;s working.
+
+You can enter a channel by double-clicking on it. (On Mumla for
+Android, entering a channel is instead done by clicking on the arrow
+to the right of the channel.) Then your audio will go to that channel,
+and you can hear audio from that channel. We can use the
+`emacsconf-gen` and `emacsconf-dev` channels to speak on air, and we
+can use the `backstage` channel for coordination.
+
+Looking forward to hearing from you!
+
+Sacha
+
+
+### DONE Generate certificates, add them to conf.org, and register the users :sachac:
+
+
+### DONE Set up Mumble and bring the volunteers on board
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">&#xa0;</th>
+<th scope="col" class="org-left">Emailed</th>
+<th scope="col" class="org-left">Onboarded</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">X</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2022-11-19 Sat] </span></span> access granted, briefed</td>
+</tr>
+
+
+<tr>
+<td class="org-left">jman</td>
+<td class="org-left">X</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2022-11-21 Mon] </span></span> access granted, briefed</td>
+</tr>
+
+
+<tr>
+<td class="org-left">vetrivln</td>
+<td class="org-left">X</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2022-11-19 Sat] </span></span> access granted, briefed</td>
+</tr>
+</tbody>
+</table>
+
+
+### DONE set up Mumble channels for host-dev and host-gen?
+
+zaeph wants to make it easy to talk to the host without distracting them all the time
+
+
+### DONE add dry-run check of whispering to hosts
+
+
+<a id="satellite"></a>
+
+## Satellite events
+
+
+### Zurich
+
+
+#### DONE Link to satellite events on the wiki :bandali:
+
+<https://200ok.ch/posts/2022-11-01_emacsconf__with_a_new_physical_venue.html>
+
+on the watch page
+
+
+#### DONE announce on the emacsconf-discuss mailing list :bandali:
+
+
+<a id="volunteer-2022-11-14"></a>
+
+## Volunteer update
+
+- talk banners, akshay
+
+
+<a id="hyperlist"></a>
+
+## Make a linear hyperlist for managing EmacsConf :sachac:
+
+Goal:
+
+- Volunteers should be able to coordinate everything by stepping through a linear list of things to do
+- The hyperlist will primarily live on orga@res.emacsconf.org and be accessed through emacsclient. (Maybe sat.org and sun.org)
+- Volunteers should be able to take breaks as needed
+
+emacsconf-hyperlist-show-streamer-day
+
+[How do we want to coordinate during the conference itself?](#coordination)
+
+
+### DONE Try writing it to an Etherpad
+
+
+### DONE Revisit the hyperlists to make sure they make sense
+
+
+### DONE Add intro notes and specific talk notes to the hyperlist
+
+
+### DONE Make a hyperlist for checking people in for easier copying and pasting
+
+
+### DONE Send FlowyCoder hyperlist for checking people in :mail:
+
+[Use Mumble for backchannel coordination and also on-stage](file:///home/sacha/proj/emacsconf/wiki/2022/organizers-notebook/index.md)
+
+
+#### DONE make sure live talks are on the checkin list
+
+
+### DONE Make backstage redirects for pad and qa so that hosts and streamers can have an easier time
+
+ex:
+<https://media.emacsconf.org/2022/backstage/current/pad/journalism>
+<https://media.emacsconf.org/2022/backstage/current/room/journalism>
+
+Pattern:
+<https://media.emacsconf.org/2022/backstage/current/slug/pad>
+<https://media.emacsconf.org/2022/backstage/current/slug/room>
+<https://media.emacsconf.org/2022/backstage/current/pad/slug>
+<https://media.emacsconf.org/2022/backstage/current/room/slug>
+
+
+### CANCELLED Regenerate hyperlist if sched changes
+
+
+### CANCELLED Put shell commands on a separate line so they&rsquo;re easy to select and run
+
+
+### DONE Make a hyperlist for hosts
+
+
+### DONE Update etherpad hyperlist
+
+
+### DONE Adjust audio levels from hyperlist
+
+
+### TODO Adjust audio levels from hyperlist with a repeat-mode keymap
+
+
+### DONE Link pamix to a konsole ssh
+
+
+### DONE Add monitoring the streams to the hyperlist / shortcuts
+
+
+### TODO Test hyperlist on obs and record quick demos
+
+
+<a id="rec-intro"></a>
+
+## TODO Record intro/outro for day-1 and day-2 :zaeph:
+
+- Opening remarks Sat
+ - Welcome to EmacsConf 2022
+ - What&rsquo;s new at EmacsConf?
+ - This year, we have two tracks: General and Development.
+ - Prerecorded videos will be published as soon as possible (aiming
+ for publishing them as the talks stream), so you can check the
+ talk page for the video and the transcript a few minutes after the
+ talk starts.
+ - How to participate
+ - You can watch at live.emacsconf.org using free and open source software.
+ - Select the stream you&rsquo;re interested in.
+ - There are quick shortcuts on the watch page so that you can
+ open the Etherpad, Q&A, or IRC.
+ - We recommend adding notes asking questions in the Etherpad
+ for the talk. That way, it&rsquo;s easier to organize the
+ questions and answers, and the host can read questions out
+ to the speaker as needed.
+ - You can also use the track-specific IRC channels
+ (#emacsconf-gen and #emacsconf-dev).
+ - You can look at the schedule to see what else is going on.
+ - IRC:
+ - You can use #emacsconf for hallway conversations.
+ - If you need to reach conference organizers, you can use the
+ \#emacsconf-org IRC channel or e-mail sacha@sachachua.com .
+ - General feedback in pad.emacsconf.org/2022
+ - Accessibility
+ - Streaming with open captions thanks to speakers and volunteers
+ - Talks indicated with &ldquo;captioned&rdquo; on the schedule
+ - Transcript available on talk pages
+ - Encourage people to add notes, questions, and answers to the
+ Etherpad, which will be archived as plain text on the talk
+ pages after the conference
+ - If you need additional support, ask in #emacsconf-accessible or #emacsconf-org
+- Closing remarks Sat
+ - Thanks
+ - Thank you to all the speakers and participants.
+ - This year&rsquo;s conference will be hosted by zaeph, bandali, and
+ vetrivln, and streamed by corwin, bandali, and jman.
+ - Thanks to our captioning volunteers: sachac, bhavin192, Tom
+ Purl, Hannah Miller, triko, and anush, and also to the speakers
+ who captioned their own talks. Thanks to quiliro for translating
+ the meetups talk into Spanish. and to Akshay Gaikwad for
+ contributing some designs.
+ - Thanks to the Free Software Foundation for the mailing
+ lists. Thanks to Ry P for the server that we&rsquo;re using for OBS
+ streaming and for processing videos.
+ - Come back tomorrow
+- Closing remarks Sun
+ - Thanks
+ -
+
+
+### DONE Review opening remarks from last year
+
+<https://emacsconf.org/2021/talks/day1-open/>
+
+
+<a id="link-pages"></a>
+
+## TODO Add category tags and possibly links between talks across 2022 and all previous years :quiliro:wiki:
+
+- Prerequisite: Can edit wiki pages (<https://emacsconf.org/edit/>)
+- Goal: Make it easier for people to discover interesting related talks
+
+- List of talks for EmacsConf 2022: <https://emacsconf.org/talks/>
+- List of talks: <https://emacsconf.org/talks/>
+- List of categories: <https://emacsconf.org/CategoryCategory/>
+- To add something to a category, add `\[[!taglink CategoryName]]` to the bottom of its talk page (ex: 2022/talks/maint.md is in CategoryCommunity)
+- You can create new categories by making up new CategoryNames.
+- You can also link to a talk with a link like this: `\[[/2022/talks/maint|Maintaining the Maintainers: Attribution as an Economic Model for Open Source]]`
+ You can make a new heading called `# Related talks`
+
+
+<a id="watch-css"></a>
+
+## TODO JS/CSS enhancement :emacsconf:
+
+
+### TODO Add start and end attributes to the brief stuff for possible JS/CSS
+
+
+### TODO Consider putting the subtitles outside the video <https://stackoverflow.com/questions/61826237/is-there-a-simple-way-to-position-subtitles-below-the-hlml5-video> :emacsconf:
+
+<file:///home/sacha/sync/orgzly/Inbox.md>
+
+
+### SOMEDAY Make video sticky and move it to the right :js:css:nextyear:
+
+<https://webdesign.tutsplus.com/tutorials/how-to-create-a-sticky-floating-video-on-page-scroll--cms-28342>
+
+
+<a id="ansible"></a>
+
+## TODO Build up the ansible playbook :sachac:opal:
+
+git@git.emacsconf.org:pub/emacsconf-ansible
+
+Goals:
+
+Playbook will be able to reproduce:
+
+- [Etherpad](#etherpad): probably okay to deploy on VPS
+- web-based file upload: probably in a docker
+- publishing environment for schedule etc.
+
+in prod or docker container
+
+
+### DONE restreamers on live0
+
+[Set up stream events on Toobnix and YouTube](#other-streams)
+
+
+### DONE icecast on live0
+
+(find-file &ldquo;/ssh:live|sudo::/etc/icecast2/icecast.xml&rdquo;)
+
+
+#### DONE Set up watch/gen-480p
+
+
+### DONE publishing environment
+
+
+### DONE Get ansible to run against a clean docker
+
+
+### DONE Set up Etherpad with MySQL
+
+
+### TODO Make the upload ansible configuration controllable via a variable
+
+
+<a id="breakouts"></a>
+
+## SOMEDAY Consider breakout rooms for lunch break
+
+
+<a id="obs-scenes"></a>
+
+## CANCELLED Work on the OBS scenes :zaeph:corwin:sachac:
+
+- [ ] corwin is out from Nov 11-20, and we should start working on them before then.
+
+
+<a id="etherpad"></a>
+
+## INPROGRESS Plan Etherpad use and hosting :sachac:ansible:
+
+- Relevant links:
+ - Per-pad, nicely structured info with abstract, watching information, etc. CarpentryCon 2022 Schedule • CarpentryCon 2022 <https://2022.carpentrycon.org/>
+ - One pad per session: <https://meta.wikimedia.org/wiki/Arctic_Knot_Conference_2021/Program#Friday,_June_25th>
+ - [Etherpad integration in Jitsi ](https://community.jitsi.org/t/tutorial-etherpad-integration-in-jitsi-meetings/99697)
+
+- Good: One pad per session
+- Better: Some kind of monitoring so that we can link to the pads or embed
+ the pads even before the conference starts while not risking too
+ much vandalism
+- Best:
+ - Pad can be easily regenerated from Emacs Lisp with a check to see if people have been adding to it
+ - Pad links to next talks
+
+Where should we host this?
+
+- live0: gets scaled up the most, lots of people connect to it for the conference, didn&rsquo;t hit performance constraints last time
+- front0: lower risk of interfering with stream
+- bbb: will already be put on strain with the concurrent streams (test showed it was stable with up to 10 concurrent video streams and 40 total participants)
+- opal’s: no news from owner, but beefy server that we used for reencode last year
+- new Linode (probably 4GB or 8GB shared CPU): can easily be spun up, yay Ansible
+
+[Ansible notes](#ansible)
+
+Consider if we need extra scaling beyond being on a beefy live0?
+
+- Scale calculator: <https://scale.etherpad.org/>
+ - assuming 3 concurrent authors, 100 lurkers per pad, 3 concurrent pads
+ - 1 core, 4GB RAM, bandwidth Mb/s: 7.488
+- <https://mclear.co.uk/2021/09/08/deploying-etherpad-at-scale-in-one-minute/>
+- <https://github.com/ether/etherpad-load-test>
+
+Will need to try this again when we resize nodes. Probably just the extra memory will be enough and the CPU use from node won&rsquo;t step on the streaming, but not sure
+
+
+### DONE Use the API to create pages based on all the slugs
+
+
+### CANCELLED Figure out monitoring; maybe get everything daily and commit to git repo?
+
+History or regeneration will be fine. We&rsquo;ll probably link to it shortly before the event, and we can also turn off the service until we&rsquo;re ready.
+
+
+### DONE Generate talk-specific pad content
+
+
+### DONE Set up nginx reverse proxy
+
+
+### DONE Load-test
+
+tl;dr: Either a separate 4GB Linode or being on live0 will probably be
+okay, but I&rsquo;m not 100% sure due to the limitations of my load-testing
+setup. I don&rsquo;t know if we need to shard by pad.
+
+It looks like etherpad-load-test tends to max out at ~40 connections
+on a specific node. I used GNU Parallel to run the loadtesting tool
+against a 4GB Linode instance (shared CPU) from five nodes at the same
+time (my X220, my 2GB Linode instance, front0, and the node with the
+pad), and they all reached about 35-45 clients before failure (not
+updating within 100ms).
+
+ echo 'node node_modules/etherpad-load-test/app.js http://170.187.195.5:9001 -d 120 > ~/output.txt' | parallel -J loadtest -j 1 --onall --verbose --tag
+
+ echo 'grep Local ~/output.txt | tail -1' | parallel -J loadtest -j 1 --onall --tag
+
+Files were created at roughly the same time, so the max loads probably
+overlapped. It would be good to have finer control over the
+etherpad-load-test tool. Haven&rsquo;t figured out how to properly use `-l`
+and `-a` yet.
+
+ echo 'stat -c %y ~/output.txt' | parallel -J loadtest -j 1 --onall --tag
+
+CPU graph went only up to 5%. Network max was 2.36 Mb/s in, 1.25 Mb/s out.
+looking at top, CPU seems to go only up to about 12% or so.
+
+
+### DONE Set up pad.emacsconf.org to point to live0.emacsconf.org :bandali:
+
+
+### DONE Set up letsencrypt
+
+Waiting for DNS
+add to /etc/dehydrated/domains.txt
+sudo sh -x /etc/cron.daily/renew-https-cert-local
+
+
+### DONE Link to pad from talk page
+
+
+### DONE Add links to general conference pad
+
+for collecting feedback
+
+
+### TODO Prototype shift pads for easier scrolling
+
+if we can get the anchor plugin
+
+
+### DONE Be able to fall back to wikimedia if necessary, maybe with nginx redirects
+
+
+### DONE Export pad initial content HTML to make it easier to reimport into wikimedia or elsewhere
+
+`emacsconf-pad-export-initial-content-for-all-talks`
+
+
+### SOMEDAY Cache pad times in a json or el :emacsconf:
+
+
+### DONE Confirm that we can use the time slider to move back in time
+
+
+### TODO Consider monospace font for Etherpad? :nextyear:
+
+
+<a id="writing"></a>
+
+## TODO Write about EmacsConf behind the scenes :sachac:
+
+
+### TODO Write about scheduling and tracks
+
+
+### TODO Write about scheduling and summing up properties
+
+
+### TODO Write about scheduling and SVG
+
+
+### TODO Write about timers and todo state change hooks
+
+
+### TODO Write about TRAMP and workaround of shifting talks
+
+
+### TODO Write about OBS on VNC
+
+
+### TODO Write about BBB redirects and opening things up
+
+
+### TODO Write about ERC announcements
+
+
+### TODO Write about copying files to backstage
+
+
+### TODO Write about captions
+
+
+### SOMEDAY Write about setup for vnc
+
+
+### SOMEDAY Write about setting org properties from a region, looking at tables, summing it up
+
+
+### SOMEDAY Record animation of changing the schedule
+
+
+### SOMEDAY Write about mail merge
+
+
+### #EmacsConf behind the scenes: Testing the schedule with SVGs
+
+> Org mode allows you to have inline images, and you can return them as the results of Org Babel
+> blocks. I wanted to test different #EmacsConf scheduling strategies quickly. I used Emacs&rsquo;s XML and
+> SVG support to create the SVGs based on the scheduling data I gave it. Splitting my window made it
+> easy to change the schedule, use \`C-c C-c\` to execute the block, and see the schedule image
+> (including any validation notes) in the other window. The code is in
+> <https://git.emacsconf.org/emacsconf-el/tree/emacsconf-schedule.el> .
+>
+> [Screenshot of how I tested #EmacsConf scheduling strategies using inline images in an Org file](https://emacs.ch/system/media_attachments/files/109/485/992/555/721/586/original/7bf3ab2a89fdcaec.png)
+
+<https://emacs.ch/@sachac/109486006078029919>
+
+
+### SOMEDAY <https://graz.social/@publicvoit/109496340869869181>
+
+publicvoit@graz.social - Organizers of online #video #conferences: take a look at the amazing work the organizers of #EmacsConf are doing with the pre- and post-processing of a 9 minute demo #video: <https://emacsconf.org/2022/talks/orgsuperlinks/>
+
+Subtitles, transcript, (Q&A from the live discussion are following), chapter marks, discussion thread from the #Etherpad used, &#x2026;
+
+I only wrote the &rsquo;Description&rsquo; section and contributed the raw video file. It&rsquo;s really impressive what @sachac and the other organizers + volunteers are doing here.  
+
+
+<a id="maybe-projects"></a>
+
+# Ideas for next year :nextyear:
+
+
+## Possible talks
+
+
+### SOMEDAY Is eMacs worth using/learning for non programmers? I.e are there non programming applications for it?
+
+<https://www.reddit.com/r/emacs/comments/107y169/is_emacs_worth_usinglearning_for_non_programmers/>
+Interesting comments
+
+
+## SOMEDAY <https://www.reddit.com/r/i3wm/comments/b1hgxm/i3wm_over_vnc_with_dual_monitors/?utm_source=share&utm_medium=android_app&utm_name=androidcss&utm_term=2&utm_content=share_button> might be interesting to have dual monitors next year
+
+
+## SOMEDAY Suggest public submissions next time
+
+would it be interesting to see if other people can build on what&rsquo;s submitted?
+
+
+## SOMEDAY Match /names with speakers, maybe make a page with people currently online
+
+
+## SOMEDAY EmacsWiki: Erc Robot
+
+<https://www.emacswiki.org/emacs/ErcRobot>
+
+After I get ikiwiki sorted out, I can use Erc to control it so that I can test it a lot before letting it mess with the real thing
+
+Goals:
+Update schedule
+Publish prerec when talk is playing
+
+
+### SOMEDAY Irc bot for opening
+
+notice the message
+open the Q&A specified by slug, or look it up from the channel
+
+
+## TODO Consider making a bot to support announcing, updating, publishing, who&rsquo;s here, announcing when speakers are here
+
+<https://salsa.debian.org/rhonda/schedulebot>
+
+- announces:
+ - $talk will start in $min minutes
+ - $talk has just begun
+ - $talk has just finished
+- seen
+
+
+## SOMEDAY indentation - CSS - successive indenting of siblings after headings - Stack Overflow
+
+<https://stackoverflow.com/questions/31872535/css-successive-indenting-of-siblings-after-headings>
+
+
+## SOMEDAY html - Indent everything after h1, h2, etc. before the next, one, while stacking the indents, with CSS - Stack Overflow
+
+<https://stackoverflow.com/questions/69711847/indent-everything-after-h1-h2-etc-before-the-next-one-while-stacking-the-in>
+
+
+## Video
+
+
+### SOMEDAY infrastructure/source-recording.sh at master · FOSDEM/infrastructure
+
+<https://github.com/FOSDEM/infrastructure/blob/master/ansible/playbooks/roles/video-bbb/files/scripts/source-recording.sh>
+
+
+### SOMEDAY c3voc/voctomix - Docker Image | Docker Hub
+
+<https://hub.docker.com/r/c3voc/voctomix/>
+
+
+### SOMEDAY DebConf video team / vogol · GitLab
+
+<https://salsa.debian.org/debconf-video-team/vogol>
+
+
+### SOMEDAY roles/vogol · master · DebConf video team / ansible · GitLab web interface for voctomix
+
+<https://salsa.debian.org/debconf-video-team/ansible/-/tree/master/roles/vogol>
+
+
+### SOMEDAY CarlFK/veyepar: Video Eyeball Processor and Review
+
+<https://github.com/CarlFK/veyepar>
+
+
+### SOMEDAY timvideos/streaming-system: Tim Video&rsquo;s - Live Streaming for user groups and other events.
+
+<https://github.com/timvideos/streaming-system>
+
+
+### SOMEDAY <no title> — DebConf Videoteam Ansible documentation
+
+<https://debconf-video-team.pages.debian.net/ansible/ansible_roles/etherpad.html>
+
+
+### SOMEDAY DebConf video team / ansible · GitLab
+
+<https://salsa.debian.org/debconf-video-team/ansible>
+
+
+## SOMEDAY handprint · PyPI
+
+<https://pypi.org/project/handprint/>
+That might be interesting for reviewing text recognition output
+
+
+## TODO Update websocket
+
+
+## TODO Idea for next year: save talk details in an org note so that I can easily send e-mails comparing previous with current
+
+<file:///home/sacha/proj/emacsconf/wiki/2022/speakers.md>
+
+
+## DONE What ideas do we want to borrow from other conferences?
+
+- FOSDEM had a conference track
+ - <https://archive.fosdem.org/2022/schedule/track/conference_organisation/>
+- DebConf
+ - Thorough documentation at <https://debconf-video-team.pages.debian.net/docs/>
+ - <https://debconf-video-team.pages.debian.net/docs/online_volunteer_roles.html>
+ - Ansible: <https://salsa.debian.org/debconf-video-team/ansible> , <https://debconf-video-team.pages.debian.net/ansible>
+ - SReview for cutting videos?
+ - <https://wiki.debian.org/Teams/DebConf/Video/Subtitles>
+ - Pentabarf <https://lists.debian.org/debconf-team/2008/08/msg00147.html>
+ - Schedule shows local time and DebConf time: <https://debconf21.debconf.org/schedule/>
+- LibrePlanet <https://libreplanet.org/2022/>
+
+ - libreadventure, minetest?
+
+ - <https://www.collabmagazine.com/organizing-a-multi-track-virtual-conference-with-microsoft-teams-live-events-a-technical-playbook-and-lessons-learned/> : 4-person team, post-prod, break commercials
+
+
+### SOMEDAY virtual-conf-resources/foss-north.md at master · e8johan/virtual-conf-resources
+
+<https://github.com/e8johan/virtual-conf-resources/blob/master/foss-north.md>
+
+
+### SOMEDAY e8johan/virtual-conf-resources: Resources for virtual conferences
+
+<https://github.com/e8johan/virtual-conf-resources>
+
+
+## TODO Consider hosting reveal.js for EmacsConf
+
+
+## TODO back up media and bbb
+
+
+## TODO figure out how zaeph can run ansible
+
+
+## TODO Check that the restreams can handle hiccups
+
+<https://toobnix.org/w/dmibQFkBTNcJyTVVQTyd5C>
+
+ugh might need to restart restreams
+PTS 233286211, next:63716000 invalid dropping st:0
+DTS 233286223, next:63828674 st:1 invalid dropping
+
+screen -S restream-test-toobnix -X quit; screen-restream-test-toobnix.sh
+screen -S restream-test-youtube -X quit; screen-restream-test-youtube.sh
+screen -S restream-gen-toobnix -X quit; screen-restream-gen-toobnix.sh
+screen -S restream-gen-youtube -X quit; screen-restream-gen-youtube.sh
+screen -S restream-dev-toobnix -X quit; screen-restream-dev-toobnix.sh
+screen -S restream-dev-youtube -X quit; screen-restream-dev-youtube.sh
+
+ugh sound timestamps get all messed up
+
+
+## TODO Figure out how to have a test talk for publishing
+
+
+## TODO figure out back button
+
+<bandali> hmm, for some reason with firefox the back button doesn&rsquo;t seem to
+ work as expected on after clicking on one of the tracks on
+ live.emacsconf.org [21:44]
+<bandali> seems like there&rsquo;s an additional redirect or something. doesn&rsquo;t
+ matter too much tho [21:45]
+
+
+## TODO Erc bot so bandali and zaeph can check time remaining
+
+
+## TODO make hotkeys for kicking the 480p streams
+
+
+## SOMEDAY Add timezones to all schedules
+
+
+## SOMEDAY <https://social.coop/@jotaemei/109456544613400591>
+
+jotaemei@social.coop - This year’s #Emacs Conference is taking place right now; its official website is naturally RMS/FSF/MIT flavored. The video feed is not working on my mobile phone browser. So, the alternative instructions are to open a link in MPV (will VLC work?) on a desktop. The event times that are given in the schedule do not display a timezone. And presentation notes and collection of audience questions are provided via Etherpad. 😆 I hope the recordings will be available. ☺️ <https://emacsconf.org/2022/watch/dev/>
+
+
+## SOMEDAY Consider idle timer for wiki publishing the wiki, at for running things
+
+
+## SOMEDAY Re: How to avoid the user triggering &ldquo;Forbidden reentrant call of Tramp&rdquo;
+
+<https://lists.gnu.org/archive/html/tramp-devel/2021-04/msg00036.html>
+
+
+## TODO Make it easier to ship a last-minute update
+
+1. Upload file to backstage
+2. make all
+3. Copy to orga@res:~/stream
+4. Sync it to orga@res:~/cache
+
+
+## SOMEDAY Add timezone note above every schedule table
+
+
+## TODO Braindump things that worked well and things I&rsquo;m looking forward to tweaking
+
+
+## TODO Incorporate zaeph&rsquo;s braindump
+
+
+## SOMEDAY <https://social.coop/@jotaemei/109468491432592197>
+
+jotaemei@social.coop - @sachac I like this idea of a timezone converter for people displayed on (or by) the listing. For me, the cause was that I was trying to find my way around the site at the last second and was afraid I’d missed a presentation I saw someone post earlier about coming up, but I think it was just that the speakers were running a little behind schedule.
+
+
+## SOMEDAY Add export/txt to the pad announcements next year - dto
+
+
+## TODO Learn from other conferences
+
+
+### Neovimconf
+
+
+### SOMEDAY Normconf: The Normcore Tech Conference
+
+<https://normconf.com/>
+
+
+## SOMEDAY Look into properly streaming to YouTube, Toobnix, and 480p
+
+
+## TODO Consider practising with ffmpeg in the cloud so that we can handle last-minute submissions
+
+<https://cloud.google.com/functions/docs/console-quickstart-1st-gen>
+<https://aws.amazon.com/marketplace/pp/prodview-ixe3igo3gsu24#pdp-pricing>
+or a VM
+
+
+### TODO <https://github.com/tuomastik/ffmpeg-google-cloud>
+
+<https://cloud.google.com/functions/docs/console-quickstart-1st-gen>
+
+
+### SOMEDAY Investigate bacalhau compute over data
+
+
+### SOMEDAY Using video transcoding on Amazon ECS - Amazon Elastic Container Service
+
+<https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-vt1.html>
+
+
+## SOMEDAY Add timer for 5 minute and 2 minute warnings to go to emacsconf-org
+
+
+## TODO make the Org agenda versions more visible
+
+
+## SOMEDAY Explore idea of OBS virtual webcam showing the question vs screenshare
+
+
+## SOMEDAY Ideas for people to reach out to for talks?
+
+
+### Using emacs mail to prefilter mail
+
+<https://www.reddit.com/r/emacs/comments/zp0qn6/a_tragic_story_of_emacs_lover/j0r7i1f/>
+
+
+## SOMEDAY Check ffmpeg benchmarks and recommendations; can we speed up our encoding for last-minute submissions?
+
+
+### SOMEDAY <https://www.reddit.com/r/AV1/comments/k7colv/encoder_tuning_part_1_tuning_libvpxvp9_be_more/?utm_source=share&utm_medium=android_app&utm_name=androidcss&utm_term=2&utm_content=share_button>
+
+
+## TODO <https://owncast.online/faq/>
+
+instead of Icecast? uses RTMP
+
+
+## STARTED Jingle
+
+[02:38] <dto> tweaked it <https://usercontent.irccloud-cdn.com/file/akHATPq3/emacsconf.ogg>
+
+
+<a id="decisions"></a>
+
+# Things to figure out / decisions to make
+
+- [Do we want to drop talks?](#drop)
+- [How do we want to coordinate during the conference itself?](#coordination)
+- [How do we want to make the full schedule more manageable?](#sched-decision)
+- [Do we want to skip the closed Q&A and go straight to open?](#closed)
+- [How much do we want to enrich the wiki with JS?](#wiki-design)
+- [How do we want to make better use of Etherpad?](#pad-decision)
+- [Can we nudge people to ask IRC questions in a way that will make it easier for us to follow them?](#irc-markers)
+- [Do we want people to advertise any openings with their companies or any work that they&rsquo;re looking for?](#advertising)
+- [Decision archive](#decision-archive)
+- [Think about what to do with schedule gaps due to cancelled talks](#schedule-gaps):thoughts:
+- [Split rms into two talks?](#rmstedsplit)
+
+
+<a id="drop"></a>
+
+## Do we want to drop talks?
+
+- **Keep the slot open, allow people to speak live**
+ - If they don&rsquo;t show up, continue with previous Q&A or have an open room
+
+
+<a id="coordination"></a>
+
+## How do we want to coordinate during the conference itself?
+
+- Considerations:
+ - Good to have something that the hosts and streamers can walk through step by step
+ - Do we want the check-in volunteer to also keep something
+ - Announcing and publishing are easier if the task states are updated
+
+- Mumble for walkie-talkie communications?
+ - Can we keep it off the stream more reliably, but still be able to choose to put it on the stream?
+ - We can keep it in the combined sink and then manually go to that
+ channel in our clients when we want to talk on stream
+ - Should we have a Gen channel and a Dev channel so that we can choose to speak into ?
+- Checklist
+ - Etherpad
+ - All the volunteers can access it easily
+ - Tasks can be updated through SSH commands
+ - conf.org
+ - Run Emacs commands directly from it
+ - A little trickier in terms of access
+
+
+<a id="sched-decision"></a>
+
+## How do we want to make the full schedule more manageable?
+
+Host role:
+
+- Give the speaker a heads-up before their Q&A session begins
+- If needed, read the questions from the pad to the speaker (Many speakers are comfortable reading the pad on their own.)
+- Give the speaker time warnings before the end of their Q&A session on the stream. Interested participants can continue
+
+Streamer role:
+
+- Switch between playing the prerec and joining the Q&A session
+- Adjust audio volume at the beginning of the Q&A session
+- (optional) Switch scene layouts to focus on different things
+
+Shifts will be Sat AM, Sat PM, Sun AM, or Sun PM per track. People can take multiple shifts.
+
+<https://emacsconf.org/2022/decisions/#schedule>
+
+- Figure out how hosting can be done in shifts
+ - Add notes in one place
+- Figure out how streaming can be done in shifts: OBS in the cloud?
+ - [Investigate streaming options, maybe OBS in the cloud](#streaming)
+- Figure out how publishing can be done in shifts
+ - Console Emacs in a VM with everything set up for publishing to the wiki
+
+<span class="timestamp-wrapper"><span class="timestamp">[2022-10-04 Tue]</span></span>
+
+- Added option H: general starts with general Org use cases and moves on to more niche things on day 2.
+ - compared to A, general audience will be more interested in Org use
+ cases than in Hyperbole, and then we can look at specific
+ techniques on day 2
+
+<span class="timestamp-wrapper"><span class="timestamp">[2022-10-04 Tue]</span></span>
+
+- Discussed option G with zaeph on #emacsconf-org. zaeph prefers
+ option A over option G because it gives people more choices -
+ they can hop from talk to talk.
+
+<span class="timestamp-wrapper"><span class="timestamp">[2022-10-03 Mon]</span></span>
+
+- Discussed with bandali and zaeph on #emacsconf-org
+- Decided on Option A with B, C, or F as fallbacks depending on volunteer roster
+- Better for the viewers and the volunteers
+
+
+<a id="closed"></a>
+
+## Do we want to skip the closed Q&A and go straight to open?
+
+- Closed: Less moderation needed in the beginning
+- Open: less coordination needed (since the host doesn&rsquo;t have to either tell me that it&rsquo;s okay to open it up or change the task status themselves), and people are generally good at meeting etiquette
+
+
+<a id="wiki-design"></a>
+
+## How much do we want to enrich the wiki with JS?
+
+Ideas to consider:
+
+- Toggling local time display on the schedule
+- Making organizers-notebook nicer to browse through (or maybe use organice?)
+- Improve the video player (resolution switching? chapter markers?) - <https://github.com/sampotts/plyr> for video?
+
+
+### SOMEDAY ?: Figure out JS and CSS niceties that will make organizers-notebook more enjoyable to browse through :css:js:
+
+- TODO/DONE/etc. keyword highlighting?
+- Collapsible sections?
+
+
+### SOMEDAY ?: Find a way to add JS libraries to the wiki but shield them from anon editing :js:
+
+gitolite should have some options to do this
+
+
+### SOMEDAY ?: Beautify video players :js:css:
+
+Might not be necessary.
+
+
+<a id="pad-decision"></a>
+
+## How do we want to make better use of Etherpad?
+
+Pain points:
+
+- Lots of scrolling for speakers
+- Takes some effort to move questions from IRC to the pad
+
+
+### How many pads do we want?
+
+- One pad for everything
+ - Scroll down, down, down
+ - Easy to set up at the beginning
+ - Inertia
+- One pad per set of talks (Saturday AM, Saturday PM, Sunday AM, Sunday PM)
+ - Less scrolling
+- One pad per talk, plus one meta pad
+ - Very little scrolling
+ - Can send people directly to the pad
+
+
+### Do we want to host our own?
+
+- Use etherpad.wikimedia.org
+ - Worked fine last year
+- Host our own
+ - Might be able to use API to append questions to it, if we want to get super fancy
+
+
+### Do we want to embed the pad as an iframe on the watch page? on talk pages?
+
+This guides people to use the pad for discussion/questions instead of IRC
+
+Options:
+
+- Current: None, just a link
+- Big pad on the watch page:
+- Individual pads:
+ - Watch page needs to be updated with current pad and link to previous pad
+ - Individual talk page can embed the iframe
+- Embed the IRC channel instead
+
+
+<a id="irc-markers"></a>
+
+## Can we nudge people to ask IRC questions in a way that will make it easier for us to follow them?
+
+Two tracks mean two IRC channels with lots of space for Q&A, so this may become less of an issue
+
+Pain points:
+
+- Q&A/discussions often overlap with the next talks
+- Sometimes questions don&rsquo;t get copied to the pad
+- Fast discussions can get overwhelming
+
+Ideas:
+
+- Announce pad link at the beginning of the talk and at the start of
+ live Q&A, encourage most people to ask questions there
+- Encourage people to start questions with Q:
+ - A little extra work, but not as much as including the slug
+ - Easier to pick out when people search
+ - Volunteers can restate questions easily if people forget the Q:
+- Encourage people to start questions with Q-slug: (ex: Q-news: question about Emacs News Highlights, Q-journalism: &#x2026;)
+ - Easier to pick out questions even with overlapping Q&A/talks
+- Use two or three IRC channels so that talks can rotate among channels
+ - Easier to pick out questions even with overlapping Q&A/talks
+ - Needs logging and more organizer attention
+- Maybe a volunteer can have an ERC command that copies a question into a buffer, or even into the Etherpad
+
+
+<a id="advertising"></a>
+
+## Do we want people to advertise any openings with their companies or any work that they&rsquo;re looking for?
+
+- Speakers on their page?
+- General audience on a wiki page somewhere?
+
+
+<a id="decision-archive"></a>
+
+## Decision archive
+
+
+### Where should volunteers e-mail?
+
+- **Default to emacsconf-org and offer emacsconf-org-private as an option**
+- emacsconf-org-private
+ - less public, e.g. if for whatever reason we might have to decline an offer of help
+ - Also, some people want to volunteer but do not want to be in the public’s eye.
+- emacsconf-org
+ - If you’re thinking about the enticement factor of having people
+ volunteer publicly, we’ll still have a well-furnished list of people
+ helping us run the conf somewhere on the wiki. [11:22]
+ - i would think if someone doesn&rsquo;t want to do it publicly, they could
+ opt to write to -org-private instead, but otherwise the defacto
+ should be public (-org)
+ - i just think most folks would want to do this publicly unless for
+ specific reasons, rather than the other way around
+
+
+### CANCELLED Do we want to do alt-stream the same way again this year?
+
+Superseded by decision to have multiple tracks
+
+- Alt stream joins the current session and then continues with it until the Q&A finishes; people join the BBB room if they want to ask questions
+ - Nice and convivial, Q&A still gets captured
+ - Inertia means most people get the main message
+- Multiple streams with more space between talks, people choose which stream they want to watch
+ - How other conferences do it
+ - Speakers can attend related talks more easily
+
+
+### DONE Shall we put a generic e-mail address for sending feedback, maybe with different mailtos?
+
+Pain points:
+
+- Many talk pages don&rsquo;t have public e-mail addresses, so it takes a
+ little extra work (or is sometimes impossible) for people to follow
+ up if they have questions
+
+Options:
+
+- Do nothing (current)
+- Add a mailto link to emacsconf-discuss that prepopulates the subject
+- Add a mailto link to emacsconf-org
+ - Wider discussion
+- **Add a mailto to emacsconf-org-private**
+ - Private feedback that can be forwarded to the speaker
+
+
+### DONE How many BBB rooms do we want to set up?
+
+- One per talk
+ - We can send speakers a direct link to their room and they can check into it themselves
+ - Needs a little more work when setting up rooms and when extracting videos
+ - Easier for the host to join
+ - Check-in person can just keep an ear open in that room
+- Five or so, rotating among them
+ - Check-in person directs the speaker to the next available room
+ - Worked fine last time
+
+
+### DONE How easy do we want to make it to join the BBB session?
+
+Considerations:
+
+- It&rsquo;s easier for the checkin person to deal with only the speaker
+- We may not want people to join the Q&A session at the beginning
+- We want to make it easy for people to join the Q&A session eventually
+
+Options:
+
+- PROBABLY EASIEST: Set it to anyone can join, but the meeting needs to be started by a
+ moderator. Start the meeting on the day of the talk. Announce the
+ BBB URL in the pad, IRC channel, and on the talk page when the host
+ is ready. Maybe add a rewrite rule when the host is ready.
+- Set an access code. Announce the access code when the host is ready.
+ - Access codes are annoying to copy and paste.
+ - Access codes might get accidentally unset or regenerated.
+- Set room so that moderators have to approve waiting users.
+ - Check-in has to watch out for waiting speaker.
+ - Host sets it to accept everyone who&rsquo;s waiting when the host is ready.
+ - Changing it to turn the option off doesn&rsquo;t seem to affect an
+ ongoing meeting, even though the web interface says you should be
+ able to change the setting any time.
+ - Waiting users don&rsquo;t make the user notification go ding.
+
+Change talk status to OPEN\_Q or UNSTREAMED\_Q, and change to TO\_ARCHIVE when done.
+M-x emacsconf-publish-bbb-redirect to update the redirect for a single talk
+M-x emacsconf-publish-bbb-redirect-all updates all the redirects
+
+
+#### DONE Add nginx redirect from emacsconf.org
+
+/ssh:front|sudo::/etc/nginx/sites-available/emacsconf.org
+
+
+### DONE How do we want to name the BBB rooms?
+
+Needs to be easy to:
+
+- share all the BBB rooms for a particular shift with the check-in volunteer
+- start the BBB rooms for the morning
+- match up the recordings with the talks afterwards
+- find the BBB room for a talk or speaker
+- remove all the BBB rooms for the year
+
+ec22-sat-am-dev Speaker Name (slugs)
+
+
+### SOMEDAY Do we want to make the ikiwiki web-editable?
+
+Pain points:
+
+- Speakers usually ended up going through us
+
+Options:
+
+- Web-editable:
+ - Speakers and general public will be able to edit it more easily
+- Git: (current)
+ - Haven&rsquo;t had a problem with spam
+ - Reduces merge conflict potential
+
+
+<a id="schedule-gaps"></a>
+
+## TODO Think about what to do with schedule gaps due to cancelled talks :thoughts:
+
+- if the previous Q&A is still going, we can stream that one
+- if there are no previous Q&As running, options:
+ - just leave it on the in-between slide: no extra effort required
+ - host a breakout room in [ec22-open](https://media.emacsconf.org/current/bbb-open.html): gives people someplaco to go, might lead to interesting conversatinos
+- big gaps: consider:
+ - substitute talk
+ - rearrange conference schedule
+ - just show the IRC
+ - replay talks from previous years
+
+
+### SOMEDAY Consider fillers covering conference stuff :thoughts:
+
+
+<a id="rmstedsplit"></a>
+
+## CANCELLED Split rms into two talks?
+
+- Split into a separate talk:
+ - Can more easily have intros
+ - Can post the transcript to the talk page
+- Same talk, stream files:
+ - Might as well learn how to do that anyway
+
+
+### DONE Figure out what to do about rms sequence
+
+Keep it at one talk, but figure out stream files thing
+
+
+<a id="roles"></a>
+
+# Roles needed
+
+Each role comprises different responsibilities. A person may have multiple roles. An organizer might take the lead for a role, but if you want to volunteer, speak up and they&rsquo;ll probably be glad to share the load.
+
+Some roles are also described on the <https://emacsconf.org/2022/volunteer> page. If you want to encourage people to volunteer to help, add a role description there.
+
+
+## During the proposal stage
+
+The roles below are related to the proposals in the early stages of the preparation.
+
+- Scheduler (SCHED: sachac)
+ - Process talks as they come and find the best place for them in the timeline
+ - Keep track of availability and thematic constraints and find solutions that accommodate most
+- Reviewer
+ - Review the proposals sent to emacsconf-submit before the speaker-notification deadline
+ - Raise flags if there are problems with a proposal (e.g. too much content for the short format)
+- Listener
+ - Receive emails from emacsconf-submit
+ - Ensure that candidates are sticking to the prescribed format (esp. the 10/20/40 duration rule)
+ - Respond to people&rsquo;s requests and suggestions, pulling in other people to help as needed
+- Publisher (PUB: sachac)
+ - Set up the wiki page
+- Infrastructure
+ - Figure out streaming options
+ - Set up file upload system that speakers will use
+ - Plan other systems that people will use
+
+
+## When speakers have submitted their pre-recorded videos
+
+- Copy to backstage as &#x2013;original.webm and &#x2013;main.webm using M-x emacsconf-upload-copy-from-json
+- Copy to res /data/emacsconf/2022
+- Start /data/emacsconf/2022/process-captions.py if it&rsquo;s not already running
+- Use ~zaeph/scripts/reencode.sh on the file as well
+
+- Video processor (zaeph)
+ - Standardize and compress uploaded videos
+- Caption lead (sachac)
+ - Prepare videos and starting captions for captioning volunteers
+- Captioner
+ - Edit automatically-generated captions to correct misrecognized words
+ - Nice to have: Break up the captions in better places so that subtitles are neither too long nor too short
+ - Perk: Get access to prerecorded videos
+- Quality checker
+ - Doublecheck videos for potential encoding issues or compression artifacts that get in the way of viewing
+ - Doublecheck captions
+- Tech checker
+ - Help speakers check that their system works well with BBB for live Q&A
+
+
+## During the conference
+
+- Streamer (STREAM)
+ - Download prerecorded videos
+ - Send the combined stream to Icecast for broadcasting
+- Director (DIR: corwin) - possibly same as streamer
+ - Switch scenes, manage audio volumes as needed
+ - Provide timekeeping information to host (especially go-live countdowns)
+- Host (HOST: zaeph)
+ - Introduce talks and speakers
+ - Read questions
+ - Give time warnings
+ - Thank speakers and transition to next talk
+- Timekeeper - possibly same as host
+ - Manage time based on all available information (prerecs durations, speakers not showing up, etc.)
+- Check in (CHECK)
+ - Notice speakers checking into IRC
+ - Get them into the correct room and help them doublecheck their audio and video quality
+ - Troubleshoot as needed
+ - Notify host about next room to join
+ - Follow up with speakers who haven&rsquo;t checked in yet
+ - Check on speakers periodically so that they&rsquo;re not waiting alone
+- Questions
+ - Copy questions from IRC and the pad to wherever the host and speaker are looking
+- Pad scribe
+ - Organize and format people&rsquo;s contributions
+ - Add notes about links, key points, questions, answers
+- Accessibility (ACCESS: dto)
+ - Describe visuals in #emacsconf-accessible
+ - Nice to have: echo the captions into #emacsconf-accessible
+- Quality checker
+ - Doublecheck stream quality and audio volume
+- Publisher (PUB: sachac)
+ - Announce talks in the IRC channels
+ - Nice to have: Update the wiki page with resources (video)
+ - Nice to have: Set resources to public as each talk is played (Toobnix, YouTube)
+ - Nice to have: Update the schedule to reflect changes throughout the day
+
+
+<a id="shifts"></a>
+
+### Shifts
+
+<a name="shifts"></a>
+
+AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition)
+
+Saturday Dec 3
+
+<table id="org4d51b24">
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">&#xa0;</th>
+<th scope="col" class="org-left">Host</th>
+<th scope="col" class="org-left">Streamer</th>
+<th scope="col" class="org-left">Checkin</th>
+<th scope="col" class="org-left">IRC</th>
+<th scope="col" class="org-left">Pad</th>
+<th scope="col" class="org-left">Coord</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">Gen AM</td>
+<td class="org-left">zaeph</td>
+<td class="org-left">sachac</td>
+<td class="org-left">corwin</td>
+<td class="org-left">dto</td>
+<td class="org-left">publicvoit</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Gen PM</td>
+<td class="org-left">zaeph</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">bandali</td>
+<td class="org-left">publicvoit</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Dev AM</td>
+<td class="org-left">bandali</td>
+<td class="org-left">sachac</td>
+<td class="org-left">corwin</td>
+<td class="org-left">dto</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Dev PM</td>
+<td class="org-left">bandali</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">bandali</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+</tbody>
+</table>
+
+publicvoit - pad until 4pm on Sat, until 2pm on Sun
+
+Sunday Dec 4
+
+<table id="org9b01a39">
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">&#xa0;</th>
+<th scope="col" class="org-left">Host</th>
+<th scope="col" class="org-left">Streamer</th>
+<th scope="col" class="org-left">Checkin</th>
+<th scope="col" class="org-left">IRC</th>
+<th scope="col" class="org-left">Pad</th>
+<th scope="col" class="org-left">Coord</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">Gen AM</td>
+<td class="org-left">zaeph</td>
+<td class="org-left">sachac</td>
+<td class="org-left">corwin</td>
+<td class="org-left">dto</td>
+<td class="org-left">publicvoit</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Gen PM</td>
+<td class="org-left">zaeph</td>
+<td class="org-left">jman</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">bandali</td>
+<td class="org-left">publicvoit</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Dev AM</td>
+<td class="org-left">bandali</td>
+<td class="org-left">sachac</td>
+<td class="org-left">corwin</td>
+<td class="org-left">dto</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Dev PM</td>
+<td class="org-left">bandali</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">bandali</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+</tbody>
+</table>
+
+Backups:
+
+- dev host/streamer: bandali, sachac
+- gen host/streamer: zaeph, sachac
+- checkin, IRC, pad: sachac
+
+Interested in a shift? Please e-mail <mailto:emacsconf-org-private@gnu.org> and we&rsquo;ll help you figure out what you need to learn.
+
+ `(setq emacsconf-shifts
+ (list
+ ,@(apply #'append
+ (mapcar
+ (lambda (day)
+ (let ((headers (mapcar (lambda (field) (intern (concat ":" (downcase field))))
+ (cdr (car (cadr day))))))
+ (mapcar
+ (lambda (row)
+ (apply #'append
+ (list 'list :id
+ (when (string-match "^\\([^ ]+\\) \\(AM\\|PM\\)" (car row))
+ (format "%s-%s-%s"
+ (car day)
+ (downcase (match-string 2 (car row)))
+ (downcase (match-string 1 (car row)))))
+ :track
+ (if (string-match "^Gen" (car row)) "General" "Development")
+ :start
+ (format "%sT%s:00:00%s"
+ (elt day 2)
+ (if (string-match "AM" (car row)) "08" "13")
+ emacsconf-timezone-offset)
+ :end
+ (format "%sT%s:00:00%s"
+ (elt day 2)
+ (if (string-match "AM" (car row)) "12" "18")
+ emacsconf-timezone-offset))
+ (seq-map-indexed
+ (lambda (value index)
+ (unless (string= value "")
+ (list (elt headers index) value)))
+ (cdr row))))
+ (cdr (cadr day)))
+ ))
+ (list
+ (list "sat" sat "2022-12-03")
+ (list "sun" sun "2022-12-04"))))))
+
+
+## After the conference
+
+- Video processor
+ - Extract live segments into videos
+- Captioner
+ - Add more captions
+ - Summarize Q&A
+- Publisher
+ - Post more information
+
+
+<a id="infra"></a>
+
+# Infrastructure notes
+
+
+## Uh&#x2026; how should ikiwiki be set up?
+
+- remove the ikiwiki\_src clone from the ansible config
+
+<https://ikiwiki.info/rcs/git/>
+bare repo has a post-update hook that updates the src repo
+src repo is ~ikiwiki/emacsconf
+~git/repositories/pub/emacsconf-wiki.git/hooks/post-update runs ~git/repositories/pub/emacsconf-wiki.git/hooks/post-update.h00-ikiwiki-wrapper
+there is an anon mirror that&rsquo;s updated with sudo -u anon /home/anon/fetch-wiki
+the git wrapper is
+/home/ikiwiki/hooks/emacsconf
+
+~anon/emacsconf-wiki.git has origin git@git.emacsconf.org:pub/emacsconf-wiki (fetch)
+but git log does not have the new stuff
+Where is the new stuff?
+&#x2026; hah, maybe I forgot to push
+
+
+## Backstage
+
+
+### File suffixes, and what they correspond to
+
+Per categories, earlier suffixes come earlier in the process.
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">Suffix</th>
+<th scope="col" class="org-left">Description</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">VIDEO</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#x2013;original.EXT</td>
+<td class="org-left">File as submitted by speaker</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#x2013;reencoded.webm</td>
+<td class="org-left">Reencode via ffmpeg incantation</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#x2013;final.webm</td>
+<td class="org-left">Broadcast-ready reencode with normalized audio</td>
+</tr>
+</tbody>
+
+<tbody>
+<tr>
+<td class="org-left">AUDIO</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#x2013;original.EXT</td>
+<td class="org-left">Extracted audio track from speaker upload; used for speech-recognition</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#x2013;normalized.opus</td>
+<td class="org-left">Normalized audio track</td>
+</tr>
+</tbody>
+
+<tbody>
+<tr>
+<td class="org-left">SUBTITLES</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#x2013;?(incomplete-)transcript</td>
+<td class="org-left">Transcript provided by speaker</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#x2013;main.EXT</td>
+<td class="org-left">Broadcast-ready reencode; different formats for different uses</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="other"></a>
+
+# Other tasks and processes
+
+- [Giving conf.org access to a new volunteer or fake user](#private-access)
+- [As prerecorded talks come in](#prerec-process)
+- [When a talk is captioned](#when-captioned)
+- [Other tasks before the conference](#before)
+- [During the conference](#during-conference)
+- [After the conference](#after-conference)
+
+
+<a id="private-access"></a>
+
+## Giving conf.org access to a new volunteer or fake user
+
+This can only be done by the admins of the gitolite instance (zaeph,
+or bandali as a backup). This is because the changes need to be made
+in the gitolite-admin repo that can only be accessed by admins. In a
+pinch, people with access to the \`orga\` user on front0 can manually
+add themselves to the list of admins and manually rebuild the
+instance.
+
+Regular process:
+
+- Get public key from volunteer,
+- Add key under `./key/dir/`,
+- Update permissions on `./conf/gitolite.conf`,
+- Push to origin.
+
+
+<a id="prerec-process"></a>
+
+## As prerecorded talks come in
+
+- Sacha: Parcel out captioning work to volunteers, help them get set up
+- Volunteers: Caption pre-recorded videos (usually starting from autogenerated ones for easier work)
+- Make sure all the links/resources mentioned are written down somewhere (web page and enriched captions for pasting into #emacsconf-accessible)
+
+
+### Compress the video
+
+Usage: `compress-video.sh original-file output-file`:
+
+(zaeph might tinker with this)
+
+ Q=32
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
+
+We tried using q56 before, but it was a little too aggressive. Q=32 is the default and is probably a reasonable space vs. quality compromise.
+
+2020 version used with parallel
+
+ Q=$1
+ WIDTH=1280
+ HEIGHT=720
+ AUDIO_RATE=48000
+ VIDEO_FILTER="scale=w=${WIDTH}:h=${HEIGHT}:force_original_aspect_ratio=1,pad=${WIDTH}:${HEIGHT}:(ow-iw)/2:(oh-ih)/2,fps=25,colorspace=all=bt709:iall=bt601-6-625:fast=1"
+ FILE=$2
+ SUFFIX=$Q
+ shift
+ shift
+ if [ ! -f $FILE ]; then
+ wget https://mirror.csclub.uwaterloo.ca/emacsconf/2020/$FILE
+ fi
+ ffmpeg -y -i "$FILE" -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -an -threads 8 /dev/null &&
+ if [[ $FILE =~ "webm" ]]; then
+ ffmpeg -y -i "$FILE" $* -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -ac 2 -threads 8 -c:a copy "${FILE%.*}--compressed$SUFFIX.webm"
+ else
+ ffmpeg -y -i "$FILE" $* -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -ac 2 -threads 8 -c:a libvorbis "${FILE%.*}--compressed$SUFFIX.webm"
+ fi
+ rm $FILE
+
+2022 version used with parallel to compress low version
+
+ Q=$1
+ WIDTH=1280
+ HEIGHT=720
+ AUDIO_RATE=48000
+ VIDEO_FILTER="scale=w=${WIDTH}:h=${HEIGHT}:force_original_aspect_ratio=1,pad=${WIDTH}:${HEIGHT}:(ow-iw)/2:(oh-ih)/2,fps=25,colorspace=all=bt709:iall=bt601-6-625:fast=1"
+ FILE=$2
+ SUFFIX=$Q
+ shift
+ shift
+ ffmpeg -y -i "$FILE" -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -an -threads 8 /dev/null &&
+ if [[ $FILE =~ "webm" ]]; then
+ ffmpeg -y -i "$FILE" $* -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -ac 2 -threads 8 -c:a copy "${FILE%.*}--compressed$SUFFIX.webm"
+ else
+ ffmpeg -y -i "$FILE" $* -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -ac 2 -threads 8 -c:a libvorbis "${FILE%.*}--compressed$SUFFIX.webm"
+ fi
+
+
+### sachac
+
+- download to local cache
+ ~/proj/emacsconf/private/sync-cache
+- upload to YouTube in case we can get autogenerated subtitles from there
+ <https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A/videos/upload?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D>
+- upload to res:~/2022/captions
+- caption.sh
+- sync-cache to copy the vtt
+- emacsconf-make-backstage-index
+- send confirmation e-mail
+
+
+### Confirmation e-mail
+
+
+#### DONE Make sure all submissions have been acknowledged
+
+- [X] sibi
+- [X] vidianos
+- [X] bhavin
+- [X] gopar
+- [X] bala
+- [X] andrea
+- [X] andrew
+- [X] zachary for asmblox (reception confirmed by zaeph, and no problem
+ with video)
+- [X] ramin (ack’d by zaeph)
+- [X] abin (meain, ack’d by zaeph)
+
+
+#### Acknowledge pre-rec submission
+
+ (defun emacsconf-mail-acknowledge-submission (talk &optional template)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (save-window-excursion
+ (emacsconf-with-talk-heading (plist-get talk :slug)
+ (emacsconf-cache-video-data talk)
+ (when (string= (plist-get talk :status) "WAITING_FOR_PREREC")
+ (org-todo "TO_PROCESS"))))
+ (emacsconf-publish-backstage-index)
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "ack-prerec"))
+ (plist-get talk :email)
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :time (plist-get talk :time)
+ :title (plist-get talk :title)
+ :email (plist-get talk :email)
+ :minutes (plist-get talk :video-time)
+ :speakers-short (plist-get talk :speakers-short)
+ :url (concat emacsconf-base-url (plist-get talk :url))
+ :year emacsconf-year)))
+
+
+#### Template
+
+Hi, ${speakers-short}!
+
+Just a quick note to let you know that I&rsquo;ve downloaded your submission
+for &ldquo;${title}&rdquo;. We&rsquo;ve added your submission to the backstage area at
+${backstage} (username: ${backstage-user}, password:
+${backstage-password}), and we&rsquo;ll post the files on your talk page
+when the talk is public. A quick check shows that your video is about
+${minutes} minutes long (${time} minutes budgeted).
+
+We&rsquo;ll be working on captioning it over the next few weeks. We&rsquo;ll
+e-mail again a little closer to the conference with schedule updates
+and other useful information. If you want to upload a new version, you
+can upload it the same way you did the previous one.
+
+Please feel free to e-mail us at emacsconf-submit@gnu.org if you need
+help updating the talk wiki page at ${url} or if you have other
+questions.
+
+Thank you so much for all the work you put into preparing a talk for
+EmacsConf ${year}, and thank you for submitting the prerecorded video
+before the conference!
+
+Sacha Chua
+
+
+<a id="mastering"></a>
+
+### Mastering the prerec’s audio-track
+
+Mastering is the process of preparing an audio-track for a purpose. For
+us, the purpose is quite simple: maximize the intelligibility of the
+speaker and minimize the noise.
+
+We can get great results with Audacity for the vast majority of
+audio-tracks. Sometimes, however, some audio-tracks have intractable
+noise-profile that require the use of model-based denoising filters that
+can applied with ffmpeg.
+
+We’ll start with the average Audacity workflow, and we’ll move on to the
+model-based filters after.
+
+
+#### Audacity workflow
+
+When we process a prerec, we extract the audio of the original upload
+and add it to the backstage. You should be able to find it under the
+name &#x2013;original.$audio\_format or &#x2013;main.$audio\_format. If it’s not
+there, it’s easy to extract the audio from the original video, but
+we’d prefer if you warned core-organizers about it because it’s not
+normal.
+
+We’ve simplified the process down to these steps:
+
+1. Open the audio file in Audacity.
+
+ You might want to increase the size of the waveform by pulling on the
+ bottom of the bottom of the track.
+
+ [audacity-demo-noise-reduction.webm](https://media.emacsconf.org/misc/audacity-demo-noise-reduction.webm)
+
+2. Find a moment of quiet in the video, and select it.
+
+ We ask our speakers to include 5 seconds of quiet at the beginning or
+ end of their prerecs, but even if they don’t, it’s relatively.
+
+3. Effects → Noise Reduction → Get Noise Profile
+
+4. Select → All
+
+5. Effects → Noise Reduction → OK
+
+ You can select a spoken portion of the track before applying the
+ effect and preview it to test your settings. The default are usually
+ enough (Noise reduction (dB): 12, Sensitivity: 6.00, Frequency smoothing
+ (bands): 3).
+
+ [audacity-demo-noise-reduction.webm](https://media.emacsconf.org/misc/audacity-demo-noise-reduction.webm)
+
+6. Tools → Apply Macro → Alpha
+
+ Before you can apply the Alpha macro, you need to save its content to
+ disk and import it via Tools → Macro Manager → Import.
+
+ Reverb:Delay="20" DryGain="5" HfDamping="99" Reverberance="15" RoomSize="70" StereoWidth="25" ToneHigh="0" ToneLow="100" WetGain="-13" WetOnly="0"
+ Amplify:Ratio="1"
+ FilterCurve:f0="79.621641" f1="101.02321" FilterLength="8191" InterpolateLin="0" InterpolationMethod="B-spline" v0="5.9148936" v1="0.042552948"
+ Normalize:ApplyGain="1" PeakLevel="-3" RemoveDcOffset="1" StereoIndependent="1"
+ Compressor:AttackTime="0.1" NoiseFloor="-50" Normalize="1" Ratio="2" ReleaseTime="1" Threshold="-30" UsePeak="0"
+
+1. Export → Export Audio… → Opus Files (.opus format)
+
+ Use the following settings:
+
+ [audacity-export-settings.png](https://media.emacsconf.org/misc/audacity-export-settings.png)
+
+ > Bit Rate: 64 kbps
+ > VBR Mode: On
+ > Compression: 10
+ > Application: Audio
+ > Frame Duration: 20 ms
+ > Cutoff: Disabled
+
+
+#### Model-based denoising filter
+
+If you can’t manage to get a good result with Audacity, chances are it’s
+because there’s too much noise in the video, even after profile-based
+denoising. This usually happens when the noise-pattern of an
+audio-track evolves over the video, or if has an aperiodic quality. For
+those, we’re going to need a bigger boat.
+
+Model-based denoising means using an AI-generated model to remove the
+audio frequencies that are usually associated to noise and preserve
+those that aren’t. A different context (e.g. noisy room with statics,
+noisy room with people chatting, etc.) means a different model; for us,
+this means a model that minimizes background noise and maximizes clear
+voices (the speakers’).
+
+This is the model we’ve been using:
+
+[audio-denoiser-model-mp.rnnn](https://media.emacsconf.org/misc/audio-denoiser-model-mp.rnnn) (download link)
+
+Source: [rnnoise-models](https://github.com/GregorR/rnnoise-models), Model: [marathon-prescription](https://raw.githubusercontent.com/GregorR/rnnoise-models/master/marathon-prescription-2018-08-29/mp.rnnn)
+
+You should always apply the filter on the original’s audio, as opposed
+to an Audacity-processed audio. This is to ensure that we have the most
+information about the signal, which means we can have gather the most
+information about the noise-profile.
+
+Following is the ffmpeg incantation to use to apply the filter-model.
+Make sure to modify the `DENOISER` variable and adapt input/output.
+
+ DENOISER="/path/to/audio-denoiser-model-mp.rnnn"
+ input="original.opus"
+ output="denoised.opus"
+ ffmpeg -i "$input" -af "arnndn=m=$DENOISER" "$output"
+
+There’s no need to customize the libopus export information; the default
+is more than enough for human-speech.
+
+When you’re done with this step, you can then process the outputted
+audio-track with Audacity, skipping the denoising steps (1 to 5).
+
+
+#### Questions?
+
+If you’ve got any question on the process, you canget in touch with me (zaeph)!
+
+
+<a id="when-captioned"></a>
+
+## When a talk is captioned
+
+- Combine captions with talk
+- Upload captions to YT and Toobnix
+- Prepare captions for wiki inclusion
+
+
+<a id="before"></a>
+
+## Other tasks before the conference
+
+- Coordinate volunteer schedules so all the roles are covered
+
+
+### Test stream setup
+
+[Stream](#other-streams)
+
+
+<a id="mpv-captions"></a>
+
+### Set up MPV for captions
+
+mpv.conf profile tips are now at <https://emacsconf.org/mpv/> .
+
+
+#### Suggested font: Clear Sans
+
+Links:
+
+- tar.gz with all fonts: [from zaeph&rsquo;s server](https://zaeph.tk/files/emacsconf/captions/fonts.tar.gz) (more convenient)
+- WOFF from GitHub repo: [clear-sans/WOFF at main · intel/clear-sans](https://github.com/intel/clear-sans/tree/main/WOFF)
+
+
+### Download prerecorded videos from ${protected}
+
+- STREAM: Download prerecorded videos from ${protected}
+
+ rsync -avzue ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
+
+
+<a id="during-conference"></a>
+
+## During the conference
+
+
+### Set up
+
+
+#### Arrange screens
+
+- CHECK:
+ - Share ${upcoming}, ${playbook}, and ${conf} via CRDT: `conf-crdt-connect-and-share`
+ - Current schedule, filenames/commands for playing, Q&A preference, IRC nick, pronunciation, intro notes, prerec duration, emergency contact information
+ - `conf-upcoming-add-subtree`
+ - Have #emacsconf-org, #emacsconf, #emacsconf-accessible, and #emacsconf-questions open
+ - Use `/opall` to get op privileges in all the channels
+ - Start backup process for pad
+
+ while true; do
+ curl https://etherpad.wikimedia.org/p/emacsconf-2021/export/html > emacsconf-$(date +"%Y%m%d-%H%M%S").html
+ sleep 15m
+ done
+ - Computer for alternate streaming:
+ - Open browser for joining BBB
+ - Open MPV for playing <http://live0.emacsconf.org:8000/main.webm>
+- HOST:
+ - rsync the newest &#x2013;main.webm from front: rsync -avze ssh front:/var/www/media.emacsconf.org/2021/protected/\*&#x2013;main.webm .
+ - Check OBS scenes for sharing windows/tabs as a virtual camera:
+ - chat.emacsconf.org with #emacsconf
+ - Etherpad
+ - Schedule
+ - next talk page
+ - Clock with current time on screen: `watch TZ=America/Toronto date`
+ - Set up backchannel for easy viewing
+ - ${upcoming}
+ - \#emacsconf-org and #emacsconf channels
+ - (?) Join organizer room S
+
+
+#### Start streaming :stream:
+
+- HOST: Display getting-ready message and start streaming to main.webm
+- HOST: Confirm that the stream is live at <https://live.emacsconf.org/main.webm>
+- B: Update ${status} to say that the stream is live
+- CHECK: Start low-resolution stream, confirm at <https://live.emacsconf.org/main-480p.webm>
+ Call this on live0 with $CONF480PASS as the first parameter. The Icecast configuration is on `live0` at <file:///ssh:live|sudo:/etc/icecast2/icecast.xml>=.
+
+ PASS=$1
+ while true; do ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx icecast://ec2020main480pmu:$PASS@localhost:8000/main-480p.webm; done
+- CHECK: Start Youtube and Toobnix streams. Call this with $YOUTUBE1PASS, $YOUTUBE2PASS, or $TOOBNIX as the parameter
+
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
+- CHECK: Verify YouTube and Toobnix streams and the CPU load on live0.
+- CHECK: Set the YouTube and Toobnix streams to public.
+- B: Verify with #emacsconf that the stream is active.
+- CHECK: Play main stream on alternate laptop. Start alternate stream and verify. Update ${status}.
+- CHECK: Announce on Twitter (@emacs, @emacsconf, @sachac) and in #emacs
+ EmacsConf 2021 starting now: <https://emacsconf.org/2021/>
+
+
+<a id="other-streams"></a>
+
+##### Stream
+
+
+###### Low-res stream
+
+Needs the `$main480p` environment variable set to something of the form `icecast://username:password@site:port/mount-point.webm`. Icecast configuration can be found on `live0` at `/etc/icecast2/icecast.xml`. It was okay to run this command directly on `live0` in 2020, since that kept the speed at roughly 1x.
+
+ while true; do ffmpeg -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx $main480p done
+
+
+###### Youtube
+
+
+###### Toobnix
+
+
+###### DONE Add IRC links to YouTube and Toobnix descriptions
+
+
+### Check in a speaker
+
+Exception: [CHECK is unavailable](#check-gone)
+
+- Speaker checks in on #emacsconf-org via IRC or via e-mail ~30m before
+- CHECK notes IRC nick for speaker.
+- CHECK confirms Q&A preference: live/IRC/Etherpad, preferred way of getting questions
+- [? unknown] Thanks for checking in! How would you like to handle Q&A
+ today - live video, the collaborative Etherpad at
+ <https://etherpad.wikimedia.org/p/emacsconf-2021> , or IRC (like
+ this)?
+- [? IRC] Thanks for checking in! Feel free to keep an eye on
+ \#emacsconf for questions and discussion, and we&rsquo;ll copy things from
+ the pad to there. If the volume gets overwhelming, let us know and
+ we can forward questions to #emacsconf-questions for you. If you&rsquo;d
+ like to try Q&A over live video or the collaborative pad instead, or
+ if you need help, please let us know.
+- [? Etherpad] Thanks for checking in! The collaborative pad we&rsquo;ll be
+ using for questions is at
+ <https://etherpad.wikimedia.org/p/emacsconf-2021> . We&rsquo;ll collect
+ questions from #emacsconf and put them there. If you&rsquo;d like to jump
+ to your part of the document, you might be able to keep an eye on
+ questions. Please let us know if you need help, or if you want to
+ switch to live Q&A.
+- [? live] Thanks for checking in! I&rsquo;ll send you some private messages
+ with instructions, so please check there. Let me know if you don&rsquo;t
+ get them.
+ - Private messages:
+ - (erc-message &ldquo;PRIVMSG&rdquo; (format &ldquo;%s You can use this BBB room: %s . I&rsquo;ll join you there shortly to set up the room and do the last-minute tech check.&rdquo; nick room-url))
+ - (erc-message &ldquo;PRIVMSG&rdquo; (format &ldquo;%s The collaborative pad we&rsquo;ll be using for questions is at %s . We&rsquo;ll collect questions from #emacsconf and put them there. If you&rsquo;d like to jump to your part of the document, you might be able to keep an eye on questions. Alternatively, we can read questions to you.&rdquo; nick conf-collaborative-pad))
+ - (erc-message &ldquo;PRIVMSG&rdquo; (format &ldquo;%s Leo Vivier will join when it&rsquo;s time, and he will give you the go-ahead when it&rsquo;s time to present. See you in the BBB room!&rdquo; nick))
+ - CHECK directs speaker to available room with `/checkin <room> <nick>`
+ - Speaker joins talk room
+ - CHECK makes speaker presenter and moderator, does last-minute tech check
+ - Hello, thanks
+ - Speaker tries screen sharing and webcam (optional)
+ - check screen readability
+ - CHECK briefs speaker on process, including:
+ - live Q&A: reading questions themselves (can do in any order,
+ can skip; coach possible responses for awkward things) or asking HOST to read questions to them
+ - HOST can share the pad or IRC; speaker shares screen only if doing demo
+ - encouragement of webcam, although it&rsquo;s optional
+ - how HOST will join shortly before the prerec ends and then
+ give them the go-ahead
+ - closing any tabs watching the stream as their talk starts
+ (otherwise the audio is confusing)
+ - If the speaker will be giving a live presentation, CHECK
+ collects emergency contact information (in case of technical
+ issues) and shares it with HOST in the CRDT buffer
+ - Okay to do other things until the prerec ends
+ - CHECK updates ${upcoming} with link to the talk room and
+ preferences for Q&A-. CHECK will also /msg the relevant
+ information.
+
+
+#### bandali&rsquo;s check-in steps
+
+- please leave webcam quality on &rsquo;medium&rsquo;
+- please read each audience question out loud before responding
+- please mute stream on your machine if you&rsquo;re watching
+- would you like to stay around for a longer q&a?
+- would you like to share your webcam or screen? (quickly mention how)
+
+
+### Present talk
+
+- CHECK announces the next talk on IRC and marks the previous talk as done. (`conf-announce`)
+- PAD clears pad colours.
+- [? prerec]
+ - HOST switches to MPV scene in OBS and plays the video (with captions if available).
+ - Exception: [Last-minute prerecording submission](#last-minute-prerec)
+ - Exception:
+ - [CHECK publishes information](#publish)
+ - [HOST gets a head start on handling Q&A](#questions)
+ - When prerec finishes, HOST switches the OBS scene to show BBB.
+- [? live]
+ - Exception: [Speaker does not have a prerec and has not checked in](#really-missing)
+ - HOST joins the BBB room and double-checks that recording is on.
+ - CHECK-alternate joins the BBB room and pauses main MPV.
+ - HOST switches to OBS scene for BBB.
+ - Speaker presents.
+ - Exception: [Technical issues during a live presentation](#live-issues)
+ - [? talk needs to be wrapped up]
+ - HOST nudges speaker verbally.
+
+
+### Publish information
+
+- CHECK updates the schedule in:
+ - ${conf}
+ - ${upcoming}
+ - wiki
+- CHECK publishes the video to media.emacsconf.org using `conf-publish-files`
+- CHECK commits the wiki page and the captions for the talk.
+- CHECK publishes the video on YouTube and ToobNix using `conf-video-share`.
+ - Update description:
+
+ This video is available under the terms of the
+ Creative Commons Attribution-ShareAlike 4.0 International (CC
+ BY-SA 4.0) license.
+
+ You can view it using free and open source software at
+ ${url}
+
+ ${description}
+ - Mark it as public.
+ - Add it to EmacsConf 2021 playlist.
+ - Update title and description.
+ - Mark it as public.
+ - Doublecheck subtitles
+ - Add it to the EmacsConf 2021 playlist.
+- [? live sections]
+ - CHECK does a rough-cut of the recording from ${dump} to get the last X minutes or by time range. There&rsquo;s about a 1-2 minute delay.
+ Ex: `(kill-new (conf-dump-get "alt" "10:24" "10:30" "qa_"))`
+ - When there&rsquo;s an opportunity to do so:
+ - CHECK finetunes the rough-cut recording (trim start and end) and posts it to:
+ - media.emacsconf.org/2021
+ - wiki page for talk
+
+
+#### DONE Automatically commit to the wiki
+
+when emacsconf-publish-autocommit-wiki is set
+
+(emacsconf-publish-update-talk (append (list :public t) (emacsconf-resolve-talk &ldquo;journalism&rdquo;)))
+(emacsconf-publish-update-talk (append (list :public nil) (emacsconf-resolve-talk &ldquo;journalism&rdquo;)))
+
+
+#### DONE Make sure VTTs only get published when they&rsquo;re edited
+
+
+##### publishing
+
+
+##### webm
+
+
+##### media directory
+
+
+#### DONE Fix mapconcat error in updating task status
+
+
+#### DONE Add intros to wiki pages
+
+
+#### SOMEDAY Cache video data - audio processed?
+
+
+#### DONE Cache video data - edited captions
+
+
+##### DONE Double-check that all the edited captions have the header
+
+ (mapcar (lambda (o)
+ (plist-get o :slug))
+ (seq-filter
+ (lambda (o) (and
+ (string= (plist-get o :status) "TO_STREAM")
+ (null (plist-get o :captions-edited))))
+ (emacsconf-get-talk-info)))
+
+
+#### DONE Automatically commit and push the wiki
+
+
+#### DONE Set publishing on a timer :sachac:
+
+
+##### DONE Single timer, batch timers for playing and closed q
+
+(emacsconf-stream-schedule-timers)
+
+
+##### DONE Take intro into account for scheduling q&a time
+
+
+##### TODO Test the timer
+
+ (let ((info (emacsconf-inflate-sexp '(journalism
+
+
+#### DONE Simplify manual setting of a timer to update task status :sachac:
+
+emacsconf-stream-schedule-talk-status-change
+
+
+#### DONE Rename update-task-status.sh to talk :sachac:
+
+
+#### DONE make sure captions are included on the wiki page
+
+
+#### DONE Set public based on time, expose more interactive functions :sachac:
+
+so that the wiki doesn&rsquo;t have to depend on synchronized conf.org state
+
+ (cl-assert
+ (plist-get
+ (emacsconf-add-talk-status (list :start-time (date-to-time "2022-01-01T12:00:00-0400")))
+ :public))
+ (cl-assert
+ (null
+ (plist-get
+ (emacsconf-add-talk-status (list :start-time (date-to-time "2030-01-01T12:00:00-0400")))
+ :public)))
+ (cl-assert
+ (plist-get
+ (emacsconf-add-talk-status (list :start-time (date-to-time "2030-01-01T12:00:00-0400")
+ :status "PLAYING"))
+ :public))
+
+
+#### TODO figure out if we need to adapt to org-time-stamp-formats change removing brackets
+
+
+### Handle Q&A
+
+Exceptions:
+
+- [Speaker has not checked in](#missing)
+
+- [? live]
+ - CHECK-alternate joins the BBB room and pauses MPV.
+ - HOST joins the BBB room
+ - HOST starts recording in BBB or confirms that it&rsquo;s already recording
+ - HOST switches to the BBB scene in OBS.
+ - HOST describes how to ask questions.
+ - [? No questions yet]
+ - HOST thanks speaker, says nice things about talk, and asks a couple of prepared questions
+ - [? Awkward question]
+ - HOST can try rephrasing the question.
+ - HOST adds note to IRC/Etherpad that speakers can answer in any order, skip questions, answer afterwards, etc.
+ - [? Q&A needs to be wrapped up]
+ - HOST writes in Etherpad/IRC or nudges speaker verbally.
+ - CHECK notes the time that the live Q&A finished and switches back to the main stream on CHECK-alternate.
+- [? IRC/pad]
+ - HOST switches to pad/chat OBS scene.
+ - HOST describes Q&A method and shows it on the screen.
+ - While there&rsquo;s buffer time before the next talk, HOST can read out
+ questions and answers, or transition to the next talk early
+ - HOST: It&rsquo;s time for the next talk, but if you want to keep
+ discussing the previous talk, please feel free to continue doing
+ so on IRC or the pad.
+- [? speaker will answer after the conference]
+ - HOST switches to pad/chat OBS scene.
+ - HOST says the speaker is not available right now, but we&rsquo;ll
+ forward the questions to the speaker and we&rsquo;ll post the speaker&rsquo;s
+ answers on the wiki page. Leave your contact information if you
+ want to be notified, or subscribe to the emacsconf-discuss mailing
+ list to get the announcement. Please feel free to continue
+ discussing the talk on IRC or the pad.
+- [Present next talk](#present)
+
+\*
+
+
+### During each talk
+
+- Volunteers: post links/resources/descriptions/captions (depending on your level of energy) to #emacsconf-accessible
+- Volunteers: making sure questions get posted somewhere the speaker can see them
+
+
+### Break time
+
+- CHECK marks the last talk as done. `conf-end-current-talk`
+- CHECK stops and restarts the Toobnix restreaming process, and re-checks the stream
+- CHECK uses `conf-upcoming-add-subtree` to add the afternoon talks to upcoming.org
+- HOST doublechecks network transfer limit and server health
+
+
+### End of stream
+
+- CHECK removes live Q&A links
+- CHECK stops ffmpeg process for Youtube
+- CHECK stops ffmpeg process for Toobnix
+- CHECK stops ffmpeg process for main-480p
+- STREAM stops streaming
+- B updates the status pages
+- bandali figures out the downstream
+
+
+<a id="after-conference"></a>
+
+## After the conference
+
+
+### Send thanks
+
+[Thank you, next steps](#thanks)
+
+
+### Extract the opening and closing remarks
+
+
+### Extract the Q&A recordings, trimming as needed
+
+From <https://bbb.emacsverse.org/b/admins/recordings>
+
+ console.log([...document.querySelectorAll('.email-link')].map((o) => '| ' + o.closest('tr').querySelector('time').getAttribute('datetime') + ' | ' + o.closest('tr').querySelector('#recording-text').innerHTML.trim() + ' | ' + o.getAttribute('data-pres-link').trim() + ' |').join('\n'))
+
+Make an `ids.txt` with the IDs extracted from BBB.
+
+In the same directory:
+
+ while read p; do
+ mkdir -p "$p";
+ cd "$p";
+ wget "https://bbb.emacsverse.org/presentation/${p}/slides_new.xml" \
+ "https://bbb.emacsverse.org/presentation/${p}/video/webcams.webm" \
+ "https://bbb.emacsverse.org/presentation/${p}/deskshare.xml" \
+ "https://bbb.emacsverse.org/presentation/${p}/deskshare/deskshare.webm" \
+ "https://bbb.emacsverse.org/presentation/${p}/metadata.xml"
+ cd ..;
+ done <ids.txt
+
+Resource explanation:
+
+- **slides\_new.xml:** Text chat
+- **webcams.webm:** Webcam as video stream, also has audio
+- **deskshare.xml:** start and stop time of desktop sharing, if any
+- **deskshare.webm:** Shared desktop as video
+- metadata.xml
+
+Probably focus on grabbing the audio first and seeing what&rsquo;s worth keeping
+
+ (defun emacsconf-extract-chat (slug speaker)
+ (interactive (list
+ (emacsconf-complete-talk)
+ (completing-read "Speaker: "
+ (seq-uniq
+ (mapcar (lambda (node) (dom-attr node 'name))
+ (dom-by-tag (xml-parse-region (point-min) (point-max)) 'chattimeline)))
+ )))
+ (let ((text
+ (mapconcat (lambda (node)
+ (when (string= (dom-attr node 'target) "chat")
+ (let ((message
+ (replace-regexp-in-string
+ "\\(^[^ +]?\\): " ""
+ (replace-regexp-in-string "<a href=\"\\(.+?\\)\" rel=\"nofollow\"><u>\\(.+?\\)</u></a>"
+ "<\\1>" (dom-attr node 'message)))))
+ (if (string-match speaker (dom-attr node 'name))
+ (format "- %s: %s\n" speaker message)
+ (format "- %s\n" message)))))
+ (dom-by-tag (xml-parse-region (point-min) (point-max)) 'chattimeline)
+ "")))
+ (emacsconf-edit-wiki-page slug)
+ (if (re-search-forward "# Discussion" nil t)
+ (progn
+ (goto-char (match-end 0))
+ (insert "\n\n"))
+ (goto-char (point-max)))
+ (kill-new text)))
+ ;; TODO: Combine lines from same nick, or identify speakers with anon1/2/etc.
+ (defun emacsconf-extract-chat-from-dired ()
+ (interactive)
+ (find-file (expand-file-name "slides_new.xml" (dired-get-file-for-visit)))
+ (call-interactively 'emacsconf-extract-chat))
+
+ (defun emacsconf-make-webcams-deskshare-spans (deskshare start-ms stop-ms strategy source-dir)
+ (let ((secs (/ start-ms 1000.0))
+ (webcam-video (expand-file-name "webcams.webm" source-dir))
+ (deskshare-video (expand-file-name "deskshare.webm" source-dir))
+ spans)
+ (mapc (lambda (o)
+ (unless (or (= secs (string-to-number (dom-attr o 'start_timestamp)))
+ (= (string-to-number (dom-attr o 'start_timestamp)) 0)
+ (> secs (/ stop-ms 1000.0)))
+ (setq spans (cons (list :source webcam-video
+ :start-ms (* secs 1000)
+ :stop-ms
+ (* 1000
+ (if (eq strategy 'test)
+ (+ secs 3)
+ (max secs (string-to-number (dom-attr o 'start_timestamp))))))
+ spans)))
+ (when (and (<= (string-to-number (dom-attr o 'start_timestamp))
+ (/ stop-ms 1000.0))
+ (>= (string-to-number (dom-attr o 'stop_timestamp))
+ (/ start-ms 1000.0)))
+ (setq spans (cons (list :source deskshare-video
+ :start-ms (max (* 1000 (string-to-number (dom-attr o 'start_timestamp)))
+ start-ms)
+ :stop-ms
+ (if (eq strategy 'test)
+ (* 1000 (+ (string-to-number (dom-attr o 'start_timestamp)) 3))
+ (min (* 1000 (string-to-number (dom-attr o 'stop_timestamp)))
+ stop-ms)))
+ spans))
+ (setq secs (string-to-number (dom-attr o 'stop_timestamp)))))
+ (dom-by-tag deskshare 'event))
+ (unless (>= (floor (* secs 1000)) stop-ms)
+ (setq spans (cons (list :source webcam-video
+ :start-ms (* 1000 secs)
+ :stop-ms (if (eq strategy 'test)
+ (* 1000 (+ secs 3))
+ stop-ms))
+ spans)))
+ (if (eq strategy 'test)
+ `((video ,@(reverse spans))
+ (audio ,@(mapcar (lambda (o)
+ (list :source webcam-video
+ :start-ms (plist-get o :start-ms)
+ :stop-ms (plist-get o :stop-ms)))
+ (reverse spans))))
+ `((video ,@(nreverse spans))
+ (audio (:source ,webcam-video :start-ms ,start-ms :stop-ms ,stop-ms))))))
+
+ (defun emacsconf-get-ffmpeg-to-splice-webcam-and-recording (slug start-ms stop-ms info &optional strategy)
+ "Return FFMPEG command for slicing.
+ Strategies:
+ - 'fast-cut-start-keyframe - find the keyframe before the start ms and cut from there, doing a fast copy.
+ - 'start-keyframe-and-reencode - find the keyframe before the start ms and cut from there, reencoding.
+ - 'cut-and-concat - seek to the keyframe before, slowly find the start-ms, reencode the snippet, and then do a fast copy of the remaining. May have encoding errors.
+ - default: copy from start-ms to stop-ms, reencoding.
+ "
+ (let* ((source-dir (expand-file-name (concat "../questions/by-slug/" slug) emacsconf-captions-directory))
+ (video-slug (plist-get (seq-find (lambda (o) (string= (plist-get o :slug) slug)) info) :video-slug))
+ (output (expand-file-name (concat video-slug "--answers.webm") emacsconf-captions-directory))
+ (webcam-video (expand-file-name "webcams.webm" source-dir)))
+ (if (file-exists-p (expand-file-name "deskshare.webm" source-dir))
+ ;; Has deskshare
+ (let* ((deskshare (xml-parse-file (expand-file-name "deskshare.xml" source-dir)))
+ (final-size (compile-media-max-dimensions
+ (expand-file-name "deskshare.webm" source-dir)
+ (expand-file-name "webcams.webm" source-dir)))
+ (duration (compile-media-get-file-duration-ms (expand-file-name "webcams.webm" source-dir)))
+ (spans (emacsconf-make-webcams-deskshare-spans deskshare start-ms stop-ms strategy source-dir))
+ (compile-media-output-video-width (car final-size))
+ (compile-media-output-video-height (cdr final-size)))
+ (compile-media-get-command spans output))
+ ;; Just webcams
+ (compile-media-get-command
+ (compile-media-split-tracks
+ (list (list :source webcam-video :start-ms start-ms :stop-ms stop-ms)))
+ output))))
+
+Make a table of the form
+
+<table id="orgf99a134">
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">Start</td>
+<td class="org-left">End</td>
+<td class="org-left">Slug</td>
+<td class="org-left">Notes</td>
+<td class="org-left">URL</td>
+<td class="org-left">Timestamp</td>
+</tr>
+</tbody>
+</table>
+
+ (defun emacsconf-process-qa-recordings (qa dir)
+ ;; (setq conf-qa-recordings qa)
+ ;; (memoize 'conf-ffmpeg-get-closest-keyframe-in-msecs)
+ ;; (memoize 'conf-ffmpeg-get-keyframes-between)
+ ;; (memoize 'conf-video-dimensions)
+ ;; (memoize 'compile-media-get-file-duration-ms)
+ ;; (memoize-restore 'conf-ffmpeg-get-keyframes-around)
+
+ (let ((info (emacsconf-get-talk-info)))
+ (replace-regexp-in-string
+ "captions/" "answers-slow/"
+ (replace-regexp-in-string
+ dir ""
+ (string-join
+ (nreverse
+ (sort
+ (delq nil
+ (mapcar
+ (lambda (o)
+ (when (> (length (car o)) 0)
+ (emacsconf-get-ffmpeg-to-splice-webcam-and-recording
+ (elt o 2)
+ (compile-media-timestamp-to-msecs (elt o 0))
+ (compile-media-timestamp-to-msecs (elt o 1))
+ info)))
+ ; (seq-take qa 2)
+ qa
+ ))
+ (lambda (a b) (string-match "trim" a))))
+ "\n")))))
+
+
+### Update the wiki
+
+
+### Update captions
+
+- Merge them into the video with `add-captions.sh`
+
+ #!/usr/bin/zsh
+ BASE="${1%.*}"
+ BASE="${BASE%--main}"
+ ffmpeg -y -i "$1" ${BASE}--main.vtt
+ if [ -f "${BASE}--normalized.webm" ]; then
+ ffmpeg -y -i "$1" -i "${BASE}--normalized.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ else
+ ffmpeg -y -i "$1" -i "${BASE}--compressed.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ fi
+ cp ${BASE}--main.vtt ${BASE}--chapters.vtt ~/vendor/emacsconf-wiki/2021/captions
+ scp "${BASE}--captioned.webm" "${BASE}--main.webm"
+ scp "${BASE}--main.webm" front:~/protected
+ scp "${BASE}--main.vtt" front:~/protected
+ scp "${BASE}--chapters.vtt" front:~/protected
+ ssh front 'cd protected; chmod ugo+r *'
+- Update Toobnix and Youtube captions with `conf-video-share`.
+- Update Toobnix and Youtube descriptions with chapters.
+- Update ${conf-year}/${captions}/${slug}.md in the wiki. To make this from scratch, use `M-x conf-prepare-transcript-directives` from the talk heading in the conference Org file.
+
+
+### STARTED Update the chapter index for answers
+
+- emacsconf-subed-make-chapter-file-based-on-comments
+- emacsconf-publish-process-answers-chapters
+ - Put it in wiki/year/captions/ and add it to the repository
+ - Add it to the cache directory
+ - Upload it to media.emacsconf.org:~/year
+- Update the talk page
+- Remove the help marker from the talk page
+
+ <https://emacsconf.org/help_with_chapter_markers/>
+ <file:///home/sacha/proj/emacsconf/cache>
+
+
+### BLOCKED Downsize the server :bandali:
+
+
+<a id="exceptions"></a>
+
+# In case of
+
+See <https://pad.emacsconf.org/premortem> for more.
+
+- [Common broadcast (gen and dev)](#common):stream:
+- [Stream OBS needs to be restarted](#obs-restart):stream:
+- [Wiki](#ikiwiki-stuck):publish:
+- [Cancelled talk](#cancelled):schedule:
+- [Last-minute prerecording submission](#last-minute-prerec):upload:
+- [Technical issues during a live presentation](#live-issues):stream:
+- [Big technical issues with streaming](#stream-issues):stream:
+- [Last-minute caption or file update](#last-minute-captions):upload:
+- [Pad malfunction or mess-up](#pad-broken):infra:
+- [Speaker has not checked in](#missing):sched:
+- [Speaker does not have a prerec and has not checked in](#really-missing):sched:
+- [Conduct guidelines issue](#conduct):host:
+- [CHECK is unavailable](#check-gone)
+- [HOST is unavailable](#host-gone)
+- [live0 can&rsquo;t handle the load or is close to network transfer limit](#network)
+- [People have a hard time seeing dark-mode presentations (or light-mode)](#dark-mode)
+- [Schedule update](#update-sched):sched:
+- [New talk](#new-talk):sched:
+- [In case we need to do things manually because the task status hooks don&rsquo;t work](#manual)
+- [Alternate stream volunteer wants to stream](#alternate)
+- [Video playing error, need to play with mpv manually](#play-mpv-manually):stream:
+- [Shift changes](#orgd99c648)
+- [Need to restart 480p stream](#restart-480p):stream:
+- [Renamed talk](#renamed):sched:
+- [Need to restart the Toobnix streams so we don&rsquo;t exceed 5 hours](#orgc1b179b)
+
+
+<a id="common"></a>
+
+## Common broadcast (gen and dev) :stream:
+
+Options:
+
+- mpv <https://live.emacsconf.org/emacsconf/gen.webm>
+- mpv the same video
+- join the BBB room
+
+emacsconf-stream-rebroadcast - specify the source track
+
+[Development -> General]((emacsconf-stream-rebroadcast "Development" "General"))
+[General -> Development]((emacsconf-stream-rebroadcast "General" "Development"))
+
+
+<a id="obs-restart"></a>
+
+## Stream OBS needs to be restarted :stream:
+
+- ssh to the track and run `track-obs`
+- ssh to live0.emacsconf and run whatever&rsquo;s appropriate:
+
+ screen -S restream-test-toobnix -X quit; screen-restream-test-toobnix.sh
+ screen -S restream-test-youtube -X quit; screen-restream-test-youtube.sh
+ screen -S restream-gen-toobnix -X quit; screen-restream-gen-toobnix.sh
+ screen -S restream-gen-youtube -X quit; screen-restream-gen-youtube.sh
+ screen -S restream-dev-toobnix -X quit; screen-restream-dev-toobnix.sh
+ screen -S restream-dev-youtube -X quit; screen-restream-dev-youtube.sh
+- check if the streams are all right
+
+
+<a id="ikiwiki-stuck"></a>
+
+## Wiki :publish:
+
+Stuck:
+
+sudo -iu ikiwiki &#x2013; ikiwiki &#x2013;setup ~ikiwiki/emacsconf.setup
+
+emacsconf.setup changed:
+
+ssh orga@front0.emacsconf.org
+sudo su - ikiwiki
+ikiwiki &#x2013;setup emacsconf.setup &#x2013;rebuild &#x2013;wrappers
+
+
+<a id="cancelled"></a>
+
+## Cancelled talk :schedule:
+
+1. Update conf.org to mark the talk as cancelled.
+2. Update the `schedule-choices` block to fix the time for the following talk, or recalculate all the schedules. Check for any validation errors in the `:results:` block.
+3. When you&rsquo;re happy with the schedule, run the `draft-schedule` block.
+4. Update the talk page to add CANCELLED to the title.
+5. Publish the wiki and doublecheck it.
+ - Talk gone from the schedule?
+ - Talk listed among the cancelled talks?
+ - Talk page has cancelled info?
+6. Remove the talk from the [one-track emergency schedule](#one-track)
+
+
+<a id="last-minute-prerec"></a>
+
+## Last-minute prerecording submission :upload:
+
+- COORD will copy it from the FTP upload server to orga@res.emacsconf.org:~/stream -p 46668 and name it appropriately.
+- COORD will notify STREAM with the scp command and the mpv command so that STREAM can choose.
+
+
+<a id="live-issues"></a>
+
+## Technical issues during a live presentation :stream:
+
+- HOST tries to contact the speaker
+- [? back on track]
+ - [? can be squeezed into remaining time]: Continue
+ - [? need extra time]: CHECK fiddles with buffer of following talks in conf.org and updates schedule
+ - [? need too much extra time (ex: 10min)]: HOST acknowledges
+ technical issues and says we may be able to follow up after the
+ conference
+- [? can&rsquo;t resume]: HOST acknowledges technical issues and says we may
+ be able to follow up after the conference
+
+
+<a id="stream-issues"></a>
+
+## Big technical issues with streaming :stream:
+
+<file://ssh:orga@front0.emacsconf.org:/var/www/status.emacsconf.org/index.html>
+
+- HOST notifies #emacsconf and #emacsconf-org and adds a note at the top of the ${pad}.
+- HOST updates the 2022.md wiki page
+- CHECK publishes prerecordings
+ - media.emacsconf.org
+ - wiki
+ - Toobnix
+ - Peertube
+- STREAM e-mails the mailing list
+
+
+<a id="last-minute-captions"></a>
+
+## Last-minute caption or file update :upload:
+
+- CHECK uploads the &#x2013;main.vtt file to orga@res.emacsconf.org:~/stream -p 46668
+- If streaming locally, STREAM copies the VTT file and loads it into MPV with `--sub-file`
+
+ssh orga@media.emacsconf.org
+cd backstage; make all
+
+ssh orga@res.emacsconf.org -p 46668
+~/cache/update-cache
+cd ~/stream
+cp ~/cache/\*$SLUG\*&#x2013;main.webm .
+
+
+<a id="pad-broken"></a>
+
+## Pad malfunction or mess-up :infra:
+
+- PAD resets the pad using the time slider
+- [? still not recovered]
+ - PAD reimports the pad from backup
+
+
+<a id="missing"></a>
+
+## Speaker has not checked in :sched:
+
+- Let the previous talk run a little longer for Q&A; end at least in time for the prerec
+- After the previous Q&A wraps up, play the prerec
+- [? still not around after prerec finishes]
+ - HOST: Speaker might be having some difficulty connecting, but we&rsquo;ll collect your questions on the pad and send them afterwards.
+ - Show the questions and discussion, invite people into the Q&A to talk about the talk. They can share their experiences and comments.
+
+
+<a id="really-missing"></a>
+
+## Speaker does not have a prerec and has not checked in :sched:
+
+- Let the previous talk do extended Q&A
+- Close to the time of the missing talk:
+ - See if any of the previous speakers want to be set up for an impromptu talk/extension in a BBB room, just in case
+ - HOST: The next speaker might be having some difficulty connecting. In the meantime, let&rsquo;s&#x2026;
+ - OR:
+ - highlight ongoing discussions
+ - invite another speaker for an impromptu extension; mplsCorwin will keep a list of possible speakers who are still active
+ - replay a short prerec
+ - let mplsCorwin or zaeph fill in
+
+
+<a id="conduct"></a>
+
+## Conduct guidelines issue :host:
+
+- [? IRC]: IRC operator addresses it with a reminder and/or a kick or a ban
+- [? not resolved, or onscreen]
+ - HOST addresses it (on-camera if needed) with a reminder and/or a kick or a ban
+
+
+<a id="check-gone"></a>
+
+## CHECK is unavailable
+
+- COORD or STREAM does check-ins
+- HOST refers to the shift pad for Q&A preference etc.
+- STREAM checks ~/stream for prerec filenames etc.
+- Dropped goals:
+ - Publishing recordings ASAP
+ - Updating schedule/wiki on the fly
+
+
+<a id="host-gone"></a>
+
+## HOST is unavailable
+
+- STREAM will do the hosting.
+
+
+<a id="network"></a>
+
+## live0 can&rsquo;t handle the load or is close to network transfer limit
+
+- OR:
+ - Redirect some viewers via asking in #emacsconf:
+ - watch via main-480p
+ - watch via Toobnix
+ - Consider dropping the restream to Toobnix (lower audience?) or to Youtube
+ - Add additional node to Linode account for shared transfer pool (TODO: doublecheck)
+
+
+<a id="dark-mode"></a>
+
+## People have a hard time seeing dark-mode presentations (or light-mode)
+
+mpv &#x2013;vf=negate $url
+
+
+<a id="update-sched"></a>
+
+## Schedule update :sched:
+
+- Test the new schedule using the blocks near the beginning of conf.org
+- emacsconf-publish-update-schedule
+- E-mail affected speakers - see emacsconf-mail-schedule-update function
+
+
+<a id="new-talk"></a>
+
+## New talk :sched:
+
+- Create entry in conf.org
+- Fit it into the schedule using the emacsconf-schedule-plan variable
+- When happy, execute the draft-schedule block to update the SCHEDULED properties
+- emacsconf-generate-talk-page
+- emacsconf-update-schedule
+- emacsconf
+- emacsconf-stream-generate-assets-for-talk
+
+
+<a id="manual"></a>
+
+## In case we need to do things manually because the task status hooks don&rsquo;t work
+
+export SLUG=the ID of the talk
+
+- [TO\_STREAM -> PLAYING](#orgffa54ff):stream:
+- [CLOSED\_Q -> OPEN\_Q](#open)
+- [OPEN\_Q -> TO\_ARCHIVE](#archive)
+
+
+<a id="orgffa54ff"></a>
+
+### TO\_STREAM -> PLAYING :stream:
+
+play slug (ex: play journalism)
+
+
+<a id="open"></a>
+
+### CLOSED\_Q -> OPEN\_Q
+
+Example for mail talk:
+
+STATE=open; ssh orga@media.emacsconf.org &ldquo;cp *home/orga/backstage/assets/redirects/$STATE/bbb-$SLUG.html /home/orga/2022/current*&rdquo;
+
+
+<a id="archive"></a>
+
+### OPEN\_Q -> TO\_ARCHIVE
+
+Example for mail talk:
+
+STATE=after; ssh orga@media.emacsconf.org &ldquo;cp *home/orga/backstage/assets/redirects/$STATE/bbb-$SLUG.html /home/orga/2022/current*&rdquo;
+
+If you need to reset the state:
+
+STATE=before; ssh orga@media.emacsconf.org &ldquo;cp *home/orga/backstage/assets/redirects/$STATE/bbb-$SLUG.html /home/orga/2022/current*&rdquo;
+
+
+<a id="alternate"></a>
+
+## Alternate stream volunteer wants to stream
+
+- CHECK gives ALTERNATE the BBB room URL for the talk they are interested in
+- ALTERNATE starts streaming to assigned end point
+- CHECK confirms stream
+- CHECK updates ${stream-status}
+- CHECK notifies STREAM and HOST
+ - After prerec plays:
+ - HOST: This talk has an extended demo/Q&A. You can go to ${alternate-url} to watch it, and we&rsquo;ll post a recording afterwards.
+ - HOST sends ${alternate-url} to IRC: Alternate stream for ${title}: ${alternate-url}
+- ALTERNATE notifies #emacsconf-org when the stream is done.
+- CHECK updates ${stream-status} to note that the alternate stream is finished.
+
+ FFMPEG process for sending the desktop and audio to the $CONFALT mountpoint on Linux with X11 and Alsa:
+
+ 1. Set the CONFALT environment variable to icecast://user:password@live0.emacsconf.org:8000/alt.webm
+ 2. Install pavucontrol if you don&rsquo;t have it already.
+ 3. Start the following command (<stream-desktop-and-audio.sh>:
+
+ while true; do ffmpeg -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done
+ 4. Use pavucontrol to set the recording source for the ffmpeg
+ command to be the audio monitor, so you get system output as
+ well.
+ - OR:
+ - [? splitting audio] (look for “Set up sinks for sound” under 2021/)
+ - [? same audio]
+ - Set up audio monitor as the input for FFMPEG
+ - MPV goes to MPV sink, browser goes to recording sink, FFMPEG takes in recording monitor
+
+
+<a id="play-mpv-manually"></a>
+
+## Video playing error, need to play with mpv manually :stream:
+
+You can skip the intro and play a video by specifying the filename, like this:
+play ~/stream/emacsconf-2022-journalism-\*
+
+
+<a id="orgd99c648"></a>
+
+## Shift changes
+
+1. Update [Shifts](#shifts)
+2. Evaluate the code underneath to get the setq.
+3. Put the setq in emacsconf.el.
+4. Regenerate the hyperlists: emacsconf-pad-prepopulate-hyperlists
+
+
+<a id="restart-480p"></a>
+
+## Need to restart 480p stream :stream:
+
+ssh live
+
+/usr/local/bin/emacsconf-lowres-dev-on-connect
+or
+/usr/local/bin/emacsconf-lowres-gen-on-connect
+
+
+<a id="renamed"></a>
+
+## Renamed talk :sched:
+
+1. Change conf.org heading.
+2. Change the video slug property.
+3. Rename any existing files in the backstage area.
+4. emacsconf-publish-backstage-index
+5. Change the title and heading on the wiki page.
+6. Update the schedule (emacsconf-publish-schedule).
+7. Update info pages (emacsconf-publish-info-pages).
+8. Update the watch page (emacsconf-publish-watch-pages).
+9. Update the pad, and the two previous pads.
+10. Update the in-between slide (and for the following one) and upload the assets.
+11. Redo the intros for that talk and the following one
+ SLUG=health; ffmpeg -y -loop 1 -i ../../in-between/$SLUG.png -i $SLUG.opus -i $SLUG.vtt -shortest ../$SLUG.webm; mpv $SLUG.webm
+
+
+### DONE Rename lspbridge
+
+rerecord lspbridge intro
+
+lspbridge science
+
+
+### DONE Rename health
+
+health eev
+
+
+<a id="orgc1b179b"></a>
+
+## TODO Need to restart the Toobnix streams so we don&rsquo;t exceed 5 hours
+
+screen -S restream-gen-toobnix -X quit; screen-restream-gen-toobnix.sh
+screen -S restream-dev-toobnix -X quit; screen-restream-dev-toobnix.sh
+
+
+<a id="archive"></a>
+
+# Task archive
+
+
+## DONE Write preparation instructions :zaeph:
+
+2021/prepare.md can be reused.
+
+Extra stuff to consider adding:
+
+- DONE Suggestions for themes (especially wrt colourscape)
+- DONE “Please don’t squeeze your talk by fast-forwarding your speech. Trimming silences and filler words can help, though. Sometimes it&rsquo;s easier to write, record, and edit your voiceover, and then record the video to go along with it.&ldquo;
+- DONE Allowing speakers to plant questions, esp. to cover tangential stuff that couldn’t fit in the prerec
+
+
+## CANCELLED Allocate extra time if possible; send e-mail :sachac:
+
+
+## DONE Review metadata for speakers in conf.org :zaeph:
+
+See the bottom of conf.org for some automated validation
+
+
+## DONE Review the submissions in the pad (see emacsconf-org-private or conf.org for the link) and add any objections or comments by Sept 26 for possible [early speaker notification](#acceptance), Oct 7 for everything :organizers:
+
+- zaeph: will start reviewing on Sep 21
+
+
+## DONE Write preparation instructions :zaeph:
+
+2021/prepare.md can be reused.
+
+Extra stuff to consider adding:
+
+- DONE Suggestions for themes (especially wrt colourscape)
+- DONE “Please don’t squeeze your talk by fast-forwarding your speech. Trimming silences and filler words can help, though. Sometimes it&rsquo;s easier to write, record, and edit your voiceover, and then record the video to go along with it.&ldquo;
+- DONE Allowing speakers to plant questions, esp. to cover tangential stuff that couldn’t fit in the prerec
+
+
+## DONE Add more submissions (CFP deadline Sept 30) :sachac:
+
+- Sacha: Add submissions to emacsconf-2022-private, draft 2-day schedule by Oct 10
+
+
+## DONE Publish talk pages :sachac:
+
+
+## DONE Send early acceptances :sachac:
+
+Ideal sequence:
+
+1. publish /2022/prepare (zaeph)
+2. publish wiki pages
+3. send acceptance e-mails
+ - Allocate at most 20 minutes, say we&rsquo;ll try to add more time depending on the schedule (probably know by Sept 30 or Oct 1)
+ - Include review comments
+4. Send an additional e-mail introducing speakers who may want to coordinate
+
+
+## DONE Prepare to export talk information to wiki :sachac:
+
+Tested code in a fork, can publish talk information once talks are approved.
+emacsconf-publish.el
+emacsconf-generate-info-pages
+emacsconf-generate-main-schedule
+emacsconf-generate-talk-pages
+
+
+## DONE Give access to emacsconf-2022-private to dto :zaeph:
+
+
+## DONE Write better subtitle documentation :sachac:
+
+<https://wiki.debian.org/Teams/DebConf/Video/Subtitles>
+<https://emacsconf.org/captioning>
+That will help more people subtitle things
+
+
+## DONE Write volunteer page :sachac:
+
+<https://emacsconf.org/2022/volunteer>
+
+
+## DONE Review the submissions in the pad (see emacsconf-org-private or conf.org for the link) and add any objections or comments by Sept 26 for possible [early speaker notification](#acceptance), Oct 7 for everything :organizers:
+
+- zaeph: will start reviewing on Sep 21
+
+
+## DONE Double-check sachac’s timezone conversions for availability :zaeph:
+
+zaeph helped with this, even catching some based on e-mail timestamps
+
+
+## DONE Copy things over from previous notebooks :sachac:
+
+
+## DONE Prepare to publish schedule :sachac:wiki:
+
+- Should be understandable as plain text
+- Ideally responsive to take advantage of more screen space on monitors while still being understandable on mobile
+- Organize by tracks and then days
+- Links to jump to a track and day
+- Graphics to make it easier for people to see nearby talk options
+- Optionally, graphical view on talk pages as well (might need to publish a JSON somewhere to front)
+
+ Schedule inspiration:
+
+ - [DebConf 2022](https://debconf22.debconf.org/schedule/) converted times to your local timezone
+ - [LibrePlanet 2022](https://libreplanet.org/2022/program/) used table columns for the different tracks
+ - [SFSCON 2022](https://www.sfscon.it/programs/2022/) lists sessions chronologically, indicating tracks with labels and dots on a diagram. Dropdowns act as filters.
+ - <https://css-tricks.com/building-a-conference-schedule-with-css-grid/>
+
+- With JS and grid CSS: <https://imgur.com/KNpGayp>
+- Fallback <https://imgur.com/HT9vX3o>
+
+Draft: <https://emacsconf.org/2022/draft-schedule/>
+
+
+### DONE Set up main schedule as plain text
+
+general track
+day 1 and day 2
+
+dev track
+day 1 and day 2
+
+by day
+all talks
+
+
+### DONE Set up talk page navigation
+
+- program phase: by track
+- schedule phase: chronological
+
+
+### CANCELLED See if I can get the schedule to split into a nice grid on larger devices that support it
+
+Slightly annoying to do with JS/CSS because I want it to fall back to an interleaved schedule on small screens, so we would probably need to duplicate the elements and then use media queries.
+
+
+### SOMEDAY Add caption icon to schedule :emacsconf:
+
+so that it&rsquo;s easier for people to see which talks are accessible
+
+
+### DONE Add captioned label in talk index
+
+
+### TODO Display breaks and lunch in the schedule
+
+
+## DONE Process confirmations as we receive them :sachac:zaeph:
+
+- Reply to the speaker and Cc -submit to confirm the confirmation. Something like &ldquo;Confirming your confirmation, no reply needed to this one. Thank you!&rdquo;
+- Update talk to WAITING\_FOR\_PREREC in conf.org
+- Add a note in the logbook (C-c C-z - org-add-note) for the talk entry
+- Add :PUBLIC\_EMAIL: t if given permission to use the e-mail on the
+ talk page, or set it to an alternative e-mail if provided.
+- Update the public wiki&rsquo;s ${year}/talks/{$slug}.md page to add the
+ e-mail address as <mailto:person@example.com> on the speaker
+ information line.
+- At some point, use `M-x emacsconf-generate-talk-pages` to update the e-mail address used in the footer.
+
+ (let (waiting)
+ (save-window-excursion
+ (with-current-buffer (find-file emacsconf-org-file)
+ (org-map-entries (lambda () (add-to-list 'waiting
+ (list (org-entry-get (point) "SLUG")
+ (org-entry-get (point) "ITEM")))) "TODO=\"TO_CONFIRM\"")))
+ waiting)
+
+
+## CANCELLED Create Org heading for scheduling caption team&rsquo;s live IRC duty shifts :dto:
+
+See [Shifts](#shifts)
+
+
+## DONE Sacha: Organize volunteer information :sachac:
+
+
+## DONE Once talks are approved
+
+- sacha: Publish initial talk information pages
+- Double-check talk pages, format them nicely
+- Publish draft schedule
+- Confirm e-mail communication with all of the speakers
+
+Process for accepting a talk:
+
+- Create subtree for talk and populate it with properties.
+ - Required: CUSTOM\_ID SLUG NAME NAME\_SHORT EMAIL AVAILABILITY Q\_AND\_A TRACK MAX\_TIME
+ - Optional: PRONOUNS PRONUNCIATION IRC PUBLIC\_EMAIL MIN\_TIME EMERGENCY
+ - Can be validated with `emacsconf-validate-talk-subtree`
+ - Add a talk abstract subtree
+- Add it to emacsconf-schedule-plan and fiddle with it until the flow looks good
+- Execute the draft-schedule block to update the schedule in the Org file
+- Add the talk page to the wiki with `emacsconf-add-talk-page`.
+- Stage, commit, and push the wiki files. Make sure to add the talk page and the info pages.
+- Doublecheck the wiki page on the web, since the e-mail refers to it.
+- E-mail the speaker the acceptance by using `emacsconf-draft-acceptance-for-email-group` from `organizers-notebook/`.
+- Log the acceptance using `C-c C-z` in the talk subtree in `conf.org`, noting the number of minutes.
+- Change the status to TO\_CONFIRM.
+
+
+## DONE Remind people about confirming e-mail communications :sachac:email:speakers:
+
+Look for the TO\_CONFIRM status in conf.org, probably include in schedule e-mail
+
+
+## DONE Send people schedule information and doublecheck their availability/Q&A preference :sachac:email:speakers:sched:
+
+ (defun emacsconf-mail-schedule (group &optional template)
+ "Send draft schedule.
+ GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (require 'emacsconf-ical)
+ (let ((reply-by-date (date-to-time "2022-10-14"))
+ (draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "check-sched"))
+ (car group)
+ (list
+ :titles
+ (mapconcat (lambda (o) (format "%s: %s"
+ (plist-get o :slug)
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ emacsconf-timezone)))
+ (cdr group) "; ")
+ :draft-schedule
+ draft-schedule
+ :speakers-short
+ (plist-get (cadr group) :speakers-short)
+ :plural
+ (if (= (length (cdr group)) 1) "" "s")
+ :email
+ (plist-get (cadr group) :email)
+ :year
+ (or (plist-get (cadr group) :year) emacsconf-year)
+ :coordination-note
+ (if (seq-find (lambda (o) (member (plist-get o :slug) '("journalism" "rolodex" "orgsuperlinks" "buttons" "hyperorg" "science")))
+ (cdr group))
+ "I've changed the order slightly from the coordination e-mail I sent you. The sequence is now journalism - science - rolodex - orgsuperlinks - buttons - hyperorg. science is now second instead of last, and the first two talks are on Sat while the last four are on Sun. That probably means you don't have to coordinate as much, but you can still do so if you would like to build on other people's talks."
+ "")
+ :schedule
+ (mapconcat
+ (lambda (o) (format "* TODO Check time for \"%s\" (%s) :emacsconf:\nDEADLINE: %s\n(Not a hard deadline, just encouragement to e-mail us before that date if you can)\nPlease e-mail [[mailto:emacsconf-submit@gnu.org]] if you need it changed\n%s track\n%s\nIn context: %s"
+ (plist-get o :title)
+ (plist-get o :slug)
+ (format-time-string (car org-time-stamp-formats) reply-by-date emacsconf-timezone)
+ (plist-get o :track)
+ (string-join
+ (let ((emacsconf-timezones
+ (if (plist-get o :timezone)
+ (seq-uniq (append (list emacsconf-timezone)
+ (split-string (plist-get o :timezone) " ")
+ (list "UTC")))
+ emacsconf-timezones)))
+ (emacsconf-timezone-strings o))
+ "\n")
+ draft-schedule))
+ (cdr group)
+ "\n----------------------------------------------------------------\n")
+ :reply-by
+ (format-time-string "%b %-e (%a)" reply-by-date emacsconf-timezone)
+ :timezone-note
+ (if (plist-get (cadr group) :timezone)
+ (format "I've included timezone conversion to %s. Let me know if you'd like me to use a different timezone in future e-mails."
+ (plist-get (cadr group) :timezone) " ")
+ "I can translate times into your local timezone. Let me know what timezone you'd like me to use.")
+ :availability-note
+ (cond
+ ((seq-find (lambda (o) (string-match "yes" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you've indicated that you're available during the conference."))
+ ((seq-find (lambda (o) (string-match "not indicated" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you didn't indicate any particular availability constraints in your submission."))
+ (t (format "I think it respects your indicated availability, which we've noted as %s."
+ (string-join
+ (seq-uniq
+ (mapcar
+ (lambda (o) (format "\"%s\"" (plist-get o :availability)))
+ (cdr group)))
+ " and "))))))))
+
+ (defun emacsconf-mail-schedule-update (group &optional template)
+ "Send draft schedule update.
+ GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (require 'emacsconf-ical)
+ (let ((reply-by-date (date-to-time "2022-10-14"))
+ (draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "check-sched"))
+ (car group)
+ (list
+ :titles
+ (mapconcat (lambda (o) (format "%s: %s"
+ (plist-get o :slug)
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ emacsconf-timezone)))
+ (cdr group) "; ")
+ :draft-schedule
+ draft-schedule
+ :speakers-short
+ (plist-get (cadr group) :speakers-short)
+ :plural
+ (if (= (length (cdr group)) 1) "" "s")
+ :email
+ (plist-get (cadr group) :email)
+ :year
+ (or (plist-get (cadr group) :year) emacsconf-year)
+ :coordination-note
+ (if (seq-find (lambda (o) (member (plist-get o :slug) '("journalism" "rolodex" "orgsuperlinks" "buttons" "hyperorg" "science")))
+ (cdr group))
+ "I've changed the order slightly from the coordination e-mail I sent you. The sequence is now journalism - science - rolodex - orgsuperlinks - buttons - hyperorg. science is now second instead of last, and the first two talks are on Sat while the last four are on Sun. That probably means you don't have to coordinate as much, but you can still do so if you would like to build on other people's talks."
+ "")
+ :schedule
+ (mapconcat
+ (lambda (o) (format "\"%s\" (%s)\n%s track\n%s\nIn context: %s"
+ (plist-get o :title)
+ (plist-get o :slug)
+ (plist-get o :track)
+ (replace-regexp-in-string
+ "^\\(.*\\)\n\\(.*\\)"
+ "\\1\nIn other timezones:\n\\2"
+ (string-join
+ (let ((emacsconf-timezones
+ (if (plist-get o :timezone)
+ (seq-uniq (append (list emacsconf-timezone)
+ (split-string (plist-get o :timezone) " ")
+ (list "UTC")))
+ emacsconf-timezones)))
+ (emacsconf-timezone-strings o))
+ "\n"))
+ draft-schedule))
+ (cdr group)
+ "\n----------------------------------------------------------------\n")
+ :reply-by
+ (format-time-string "%b %-e (%a)" reply-by-date emacsconf-timezone)
+ :timezone-note
+ (if (plist-get (cadr group) :timezone)
+ (format "I've included timezone conversion to %s. Let me know if you'd like me to use a different timezone in future e-mails."
+ (plist-get (cadr group) :timezone))
+ "I can translate times into your local timezone. Let me know what timezone you'd like me to use.")
+ :availability-note
+ (cond
+ ((seq-find (lambda (o) (string-match "yes" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you've indicated that you're available during the conference."))
+ ((seq-find (lambda (o) (string-match "not indicated" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you didn't indicate any particular availability constraints in your submission."))
+ (t (format "I think it respects your indicated availability, which we've noted as %s."
+ (string-join
+ (seq-uniq
+ (mapcar
+ (lambda (o) (format "\"%s\"" (plist-get o :availability)))
+ (cdr group)))
+ " and "))))))))
+
+
+### Template
+
+Hi, ${speakers-short}!
+
+Here&rsquo;s the tentative schedule for when your EmacsConf talk${plural}
+will be streamed. Your talk${plural} will be streamed once, but I&rsquo;ve
+included a few timezone conversions for convenience.
+
+---
+
+${schedule}
+
+---
+
+${availability-note} You&rsquo;ll also have time for Q&A afterwards, which
+can be as short or as long as you like. We&rsquo;ll send you more
+information about how the Q&A will work as the conference gets closer.
+
+If you&rsquo;d like to see the other talks for context, you can check out
+the draft schedule at <https://emacsconf.org/${year}/draft-schedule/> .
+The times may move around a bit as we update the schedule, so I&rsquo;ll
+check in with you if things change a lot. ${coordination-note}
+
+We&rsquo;d like to publish the schedule this month, so we&rsquo;d love to hear
+from you by **${reply-by}** if the times don&rsquo;t work for you. (We can
+shuffle things around even after that date if something comes up.)
+Also, if you think your talk${plural} would go better next to a
+different talk, please let us know. ${timezone-note} Please keep
+emacsconf-submit@gnu.org in To or Cc when replying. Thanks!
+
+Sacha
+
+
+### Schedule change affecting dev
+
+(Please ignore the previous update, I included the wrong times in the
+e-mail. The web version&rsquo;s been fine, though! Sorry about the extra
+e-mails.)
+
+I tweaked the schedule to put treesitter and lspbridge earlier, so
+asmblox and wayland are a little later on Saturday morning. If you&rsquo;d
+like to see the latest schedule for your talk, you can go to
+<https://emacsconf.org/${year}/draft-schedule/> . Thanks for your
+patience!
+
+---
+
+${schedule}
+
+---
+
+(no need to reply to this to confirm, unless I broke the schedule for
+you and you want me to fix it)
+
+Sacha
+
+
+### Schedule change for buddy/meetup
+
+Hi ${speakers-short}!
+
+I tweaked the schedule to allocate a little more time for the meetups
+talk, and I moved the buddy talk earlier to make space. I think this
+might improve the flow as well, since the meetups will refer to how
+meeting up with a buddy is a good way to get a public Emacs meetup off
+the ground. If you&rsquo;d like to see the latest schedule for your talk,
+you can go to <https://emacsconf.org/${year}/talks/> . Thanks for your
+patience!
+
+---
+
+${schedule}
+
+---
+
+(no need to reply to this to confirm, unless I broke the schedule for
+you and you want me to fix it)
+
+Sacha
+
+
+## DONE Volunteer communications: E-mail update for Oct 9, 2022 :email:volunteers:
+
+Add your news and requests to this.
+
+
+### Template so far
+
+Hello, EmacsConf volunteers!
+
+We&rsquo;re starting to gear up for EmacsConf 2022, and we would love to
+figure out how to work with your skills, interests, and availability.
+<https://emacsconf.org/2022/volunteer/> has some specific task ideas and
+general roles.
+
+<https://emacsconf.org/2022/organizers-notebook/#overall> has an
+overall prioritization matrix. If any of those options look like
+something you want to learn or help with, or if you want to make
+things even better than what&rsquo;s in the table, let me know.
+
+Given the number of talks this year, we&rsquo;re going to try to see if we
+can pull off two tracks. I&rsquo;ve posted a draft schedule at
+<https://emacsconf.org/2022/draft-schedule/> and have e-mailed speakers
+to confirm their availability. This schedule staggers live Q&A
+sessions so that the person managing the streams can jump back and
+forth as needed. We&rsquo;ll figure out shifts once we&rsquo;ve sorted out the
+processes and training info, but if you want to call dibs on
+something, feel free.
+<https://emacsconf.org/2022/organizers-notebook/#shifts>
+
+Please let me know what kinds of things you&rsquo;d like to learn more about
+or help out with!
+
+Sacha Chua
+
+(You&rsquo;re receiving this e-mail because you&rsquo;re on the emacsconf-org
+mailing list. Thanks for wanting to help out!)
+
+
+## DONE Delete all the EmacsConf BBB rooms from last year :chore:bbb:zaeph:
+
+For the admins on BBB. The list is accessible here: [Organization Settings](https://bbb.emacsverse.org/b/admins/rooms).
+Should take no more than ~20′.
+
+
+## DONE Write volunteer update
+
+Hello, folks! Here&rsquo;s the weekly update on what&rsquo;s happening backstage
+for EmacsConf 2022 in case you notice something that you want to help
+out with. =)
+
+- All the speakers have confirmed that they&rsquo;ve gotten the acceptance
+ e-mails. Many speakers have confirmed that the schedule works for
+ them after I reshuffled a few talks for better availability. I&rsquo;ve
+ posted the schedule at <https://emacsconf.org/2022/talks/> . We&rsquo;ll
+ announce the schedule on the emacsconf-discuss mailing, Reddit, and
+ various places this week.
+
+- zaeph has been working on the ffmpeg incantations for preprocessing
+ the videos that will be submitted soon. bandali is working on
+ getting the FTP and web-based uploads sorted out so that speakers
+ can submit their videos.
+
+- I created some watch pages to support viewing different tracks:
+ <https://emacsconf.org/2022/watch/> . The livestreams won&rsquo;t work yet
+ and it would be nice to figure out something that can dynamically
+ display info for recent/current/upcoming talks, but it&rsquo;s a start.
+
+- We set up a self-hosted Etherpad (ex:
+ <https://pad.emacsconf.org/2022-journalism>) with an easy way to
+ redirect to using Wikimedia in case we run into scaling issues. I&rsquo;ve
+ added it to our Ansible playbook
+ (git@git.emacsconf.org:pub/emacsconf-ansible) and I&rsquo;m looking
+ forward to incorporating Ry P.&rsquo;s improvements. Karl Voit gave
+ feedback on the first draft of the template.
+
+- vetrivln volunteered for some of the dev hosting shifts, Karl Voit
+ volunteered for some of the gen pad shifts, and FlowyCoder
+ volunteered for some of the gen check-in shifts. Thanks!
+
+Next week, we hope to:
+
+- Announce the EmacsConf 2022 schedule in the usual places (got any wording/JS/CSS suggestions?)
+- Finalize the upload instructions so that speakers can start submitting their files
+- Put together volunteer training materials
+- Set up per-speaker BBB rooms and friendly URLs
+
+Sacha
+
+
+## DONE Publish icals :sachac:
+
+It would be nice to have track-specific icals as well.
+
+
+### DONE Check icals, create org schedule
+
+<https://www.reddit.com/r/emacs/comments/yilmhv/emacsconf_2022_dec_3_4_schedule/ixgt1wr?utm_medium=android_app&utm_source=share&context=3>
+
+
+<a id="upload"></a>
+
+## DONE Figure out web-based file upload :needsowner:sachac:ansible:
+
+zaeph: I can work on it, but I’m not experienced in this domain, so I’d prefer to be a back-up.
+task is currently with bandali
+
+Lesson learned from last year: &ldquo;Since people kept running into ftp
+problems, we might want to set up a web-frontend next year to minimise
+problems.&rdquo;
+
+Maybe we could ask some of the volunteers who wanted to help us with
+the infra? It shouldn’t be complicated to deploy a ready-made
+solution.
+
+&ldquo;file drop&rdquo; is a common keyword for looking for information.
+Considerations:
+
+- Probably run it on media.emacsconf.org
+- Bonus features:
+ - password-protected or hidden behind some kind of authentication or hidden behind some kind of URL, so we don&rsquo;t have to worry too much about spam
+ - extra points for sending speakers links to upload to specific folders so that we can separate resources by talk
+ - Resumable uploads would be good, since some speakers had a hard time with unreliable connections
+- What other conferences do:
+ - LibrePlanet uses plain FTP and recommends FileZilla <https://libreplanet.org/wiki/Video_upload_instructions>
+ - FOSSDEM uses Pentabarf to receive uploads <https://archive.fosdem.org/2022/manuals/program/speaker/>
+ - DebConf uses SReview(?)
+ - FOSSGIS uses Seafile <https://vmx.cx/cgi-bin/blog/index.cgi/video-uploads-for-an-online-conference%3A2021-06-12%3Aen%2Cconference%2Cgeo>
+- Some options:
+
+ <table>
+
+
+ <colgroup>
+ <col class="org-left">
+
+ <col class="org-left">
+
+ <col class="org-left">
+
+ <col class="org-left">
+
+ <col class="org-left">
+ </colgroup>
+ <tbody>
+ <tr>
+ <td class="org-left">Project</td>
+ <td class="org-left">Docker</td>
+ <td class="org-left">Buster</td>
+ <td class="org-left">Base</td>
+ <td class="org-left">Notes</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><a href="https://www.projectsend.org/">https://www.projectsend.org/</a></td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">php+mysql</td>
+ <td class="org-left">&#xa0;</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><a href="https://github.com/pomf/pomf">https://github.com/pomf/pomf</a></td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">php+mysql</td>
+ <td class="org-left">&#xa0;</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><a href="https://github.com/psi-4ward/psitransfer">https://github.com/psi-4ward/psitransfer</a></td>
+ <td class="org-left">official</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">node</td>
+ <td class="org-left">can set upload password, resumable; data volume needs uid 1000</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><a href="https://github.com/epoupon/fileshelter">https://github.com/epoupon/fileshelter</a></td>
+ <td class="org-left">official</td>
+ <td class="org-left">ppa</td>
+ <td class="org-left">C++</td>
+ <td class="org-left">&#xa0;</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><a href="https://github.com/mickael-kerjean/filestash">https://github.com/mickael-kerjean/filestash</a></td>
+ <td class="org-left">official</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">general FTP client</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><a href="https://gitlab.com/moejo42/Jirafeau">https://gitlab.com/moejo42/Jirafeau</a></td>
+ <td class="org-left">official</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">php</td>
+ <td class="org-left">&#xa0;</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><a href="https://github.com/YouTransfer/YouTransfer">https://github.com/YouTransfer/YouTransfer</a></td>
+ <td class="org-left">official</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">node</td>
+ <td class="org-left">looking for maint</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><a href="https://github.com/dutchcoders/transfer.sh/">https://github.com/dutchcoders/transfer.sh/</a></td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">&#xa0;</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><a href="https://github.com/eikek/sharry">https://github.com/eikek/sharry</a></td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">&#xa0;</td>
+ </tr>
+ </tbody>
+ </table>
+
+ - NextCloud
+
+ anon FTP upload currently goes to *srv/ftp/anon* on media.emacsconf.org
+
+ <file:///ssh:media|sudo>
+
+ Maybe I&rsquo;ll do psitransfer as a direct install
+
+
+### DONE Create 2022/upload.md with the same workflow as last year for a start
+
+
+### DONE Implement new workflow
+
+
+<a id="irc"></a>
+
+## DONE Update IRC instructions because of multiple tracks
+
+Added to watch pages
+
+
+<a id="publishing-sched"></a>
+
+## DONE Move scheduling and publishing code to Emacs on a VPS so that other people can help out :sachac:
+
+Ideal:
+
+- Update pages with watching information, additional resources, etc. as talks go live
+- Update the schedule as needed (cancelled or reordered talks, etc.)
+
+Where:
+
+- front? my own VPS?
+
+ Nice if there&rsquo;s an Ansible playbook
+
+ sachac&rsquo;s notes:
+ <file:///home/sacha/code/docker/emacsconf-publish/>
+- probably good to set it up on front
+
+It&rsquo;s now on front.
+
+
+## DONE Prepare email for nudging speakers to send prerec, and inform on upload workflow :timesensitive:needsowner:
+
+
+### Code
+
+ (defun emacsconf-mail-upload (group &optional template)
+ "Send upload instructions and reminder.
+ GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (let ((action-date (date-to-time "2022-11-04")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "upload"))
+ (car group)
+ (list
+ :slugs (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) " or ")
+ :speakers-short (plist-get (cadr group) :speakers-short)
+ :plural (if (= (length (cdr group)) 1) "" "s")
+ :email (plist-get (cadr group) :email)
+ :year (or (plist-get (cadr group) :year) emacsconf-year)
+ :prerec-note (emacsconf-surround
+ (make-string 64 ?-)
+ (string-join (seq-uniq (mapcar
+ (lambda (o)
+ (plist-get o :prerec-info))
+ (cdr group)))
+ "\n")
+ (make-string 64 ?-)
+ "")))))
+
+
+### Template
+
+Hi, ${speakers-short}!
+
+${prerec-note}Here are the instructions for uploading the
+video${plural} for your talk${plural}. You can find the latest version
+of the instructions at https://emacsconf.org/2022/upload/ . There are
+two ways to upload your talk${plural} this year, so you can pick the
+one that works best for you:
+
+- Web-based: <https://ftp-upload.emacsconf.org> , password emacsconf
+- FTP: host: ftp-upload.emacsconf.org, port: 21, username: anonymous
+ folder: upload-here
+
+If you upload slides and other resources, we can include them on the
+talk page when your talk goes live. If you happen to have a script or
+a transcript, please include them as well (it’ll speed up the
+captioning for us).
+
+Please add a comment or start your filenames with the ID for the talk
+that it&rsquo;s for: ${slugs}.
+
+If you&rsquo;re still working on your talk, you might find the tips at
+<https://emacsconf.org/2022/prepare> useful. In brief:
+
+- at least 1280x720 resolution
+- we recommend dark text on a light background, with enough contrast
+ to make it easy to read
+- if possible, use a headset or external microphone to record audio
+ in order to minimize computer noise
+- upload a separate 5 second recording of quiet or leave 5 seconds
+ of quiet at the end of your talk video so that we can process your
+ video for noise reduction
+
+Please plan to upload your talk by November 4 (next Friday) so that we
+can get started preparing it for streaming. If you can&rsquo;t make it by
+then, we can accept later submissions, although it&rsquo;s a bit more of a
+scramble and our stress levels go up as the conference approaches. =)
+We&rsquo;d really appreciate the extra time for captioning and
+double-checking. Thank you for your help in getting ready for a smooth
+EmacsConf 2022!
+
+Sacha Chua
+
+
+## DONE Send backstage email
+
+ (defun emacsconf-mail-backstage-info (group &optional template)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "backstage"))
+ (plist-get group :email)
+ (append group
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :conf-name emacsconf-name
+ :year emacsconf-year))))
+ (defun emacsconf-mail-backstage-info-to-speakers-and-captioners ()
+ (interactive)
+ (let ((template (emacsconf-mail-merge-get-template "backstage"))
+ (speaker-groups
+ (seq-uniq
+ (mapcar
+ (lambda (talk)
+ (list
+ :name (plist-get talk :speakers-short)
+ :email (plist-get talk :email)
+ :role "speaker"
+ :backstage-use
+ "As we add more talks, you can skim through any relevant ones to
+ see if there are any points you'd like to build on in your talk.
+ Also, you can get a sense of what we do behind the scenes to try
+ to get as many talks captioned for broadcast, and what you can do
+ to make it easier. (A text file with names and technical terms
+ can be helpful. No need to type out a manual transcript if you
+ don't start from a script.) After you upload your talk and we
+ process the files, you can use the backstage area to check the
+ quality of the reencoded video."))
+ (seq-filter (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC"))
+ (emacsconf-filter-talks (emacsconf-get-talk-info))))))
+ (volunteer-groups
+ (with-current-buffer (find-file-noselect emacsconf-org-file)
+ (org-map-entries (lambda ()
+ (list :name (org-entry-get (point) "NAME_SHORT")
+ :email (org-entry-get (point) "EMAIL")
+ :role "captioning volunteer"
+ :backstage-use "If you see a talk that you'd like to caption, you can e-mail me at sacha@sachachua.com and I can reserve it for you."))
+ "captions"))))
+ (mapcar (lambda (g) (emacsconf-mail-backstage-info g template))
+ (append
+ speaker-groups
+ (seq-remove (lambda (v) (seq-find (lambda (s) (string= (plist-get s :email)
+ (plist-get v :email)))
+ speaker-groups))
+ volunteer-groups)))))
+
+
+### Template
+
+Hi ${name}!
+
+You&rsquo;re getting this e-mail because you are a ${role} for ${conf-name}
+${year}. (Thanks!)
+
+I&rsquo;m so excited! =) A number of speakers have uploaded their videos,
+and OpenAI Whisper looks like a promising way to get automatically
+generated captions that we can use as a starting point.
+
+We&rsquo;ve set up ${backstage} as the backstage area where you can view the
+videos and resources uploaded so far. You can access it with the
+username "${backstage-user}&ldquo; and the password &rdquo;${backstage-password}&ldquo;.
+Please keep the backstage password and other speakers&rsquo; talk resources
+secret. ${backstage-use}
+
+Thank you!
+
+Sacha Chua
+
+
+## DONE Write playbooks
+
+
+### DONE Host :zaeph:
+
+<https://emacsconf.org/2022/volunteer/host>
+
+
+### CANCELLED Streamer :zaeph:
+
+Blocked by [Investigate streaming options, maybe OBS in the cloud](#streaming)
+
+bandali and corwin/zaeph will do the streaming, so writing the streaming playbook is a little lower priority for now
+
+
+### DONE Check-in
+
+<https://emacsconf.org/2022/volunteer/checkin/>
+
+
+### DONE IRC
+
+<https://emacsconf.org/2022/volunteer/irc/>
+
+
+### DONE Pad
+
+<https://emacsconf.org/2022/volunteer/pad/>
+
+
+### DONE Captions
+
+<https://emacsconf.org/2022/volunteer/caption/>
+
+
+## CANCELLED Figure out why ikiwiki is slow :infra:wiki:
+
+complex regular expression issues?
+should the captions be outside the wiki?
+
+
+## CANCELLED Add nice-to-have stuff to prepare.md :zaeph:
+
+- org-reveal config
+- SIL fonts choice
+
+
+## DONE Write volunteer update 2022-10-23 :update:
+
+Hello, folks! Here&rsquo;s the weekly update on what&rsquo;s happening backstage
+for EmacsConf 2022 in case you notice something that you want to help
+out with. =)
+
+- We&rsquo;ve e-mailed the speakers instructions for uploading their files through either a web browser or an FTP client, and three speakers have already done so! Those talks are now available in the backstage area (<https://media.emacsconf.org/2022/backstage/>), along with the first set of edited captions (thanks Jai Vetrivelan!). If you don&rsquo;t have the username and password for the backstage area and you would like to access it, please e-mail me and I&rsquo;ll send you the details.
+- We&rsquo;ve created a BBB room for each speaker&rsquo;s live Q&A session. The URLs are in conf.org in the private repository if you need them.
+- We&rsquo;ve drafted some documentation for different volunteer roles. If you&rsquo;d like to volunteer as a captioner, check-in person (hmm, reception?), Etherpad scribe, IRC monitor, or host, please check out the appropriate link and let me know if I need to add anything to the docs:
+ - <https://emacsconf.org/2022/volunteer/caption>
+ - <https://emacsconf.org/2022/volunteer/irc>
+ - <https://emacsconf.org/2022/volunteer/pad>
+ - <https://emacsconf.org/2022/volunteer/checkin>
+ - <https://emacsconf.org/2022/volunteer/host>
+- Thanks to David O&rsquo;Toole for signing up for some IRC shifts! If you would like to volunteer for a shift, check out <https://emacsconf.org/2022/organizers-notebook/#shifts> .
+- We&rsquo;ve updated our streaming configuration for the General and Development tracks, and have started testing them using mpv and the watch pages. Videos aren&rsquo;t currently streaming, but you can check out the layout of the watch pages at:
+
+ - <https://emacsconf.org/2022/watch/gen/>
+ - <https://live.emacsconf.org/2022/watch/gen/>
+ - <https://emacsconf.org/2022/watch/dev/>
+ - <https://live.emacsconf.org/2022/watch/dev/>
+
+ These pages could probably be a lot prettier and easier to use. If you have some ideas for improving them or if you&rsquo;d like to work on the HTML/CSS/JS, we&rsquo;d love your help!
+- There are now Q&A waiting rooms with friendly URLs so that it&rsquo;s easier for people to join the live Q&A when the host decides it&rsquo;s okay to let everyone in. They&rsquo;re linked on the watch pages (along with the pads) and they&rsquo;ll be linked from the talk pages once we&rsquo;re ready to share them.
+- zaeph has been busy tweaking the ffmpeg workflow for reencoding and normalizing videos. Thanks to Ry P. for sharing the res.emacsconf.org server with us - we&rsquo;ve been using it for all the processing that our laptops can&rsquo;t handle.
+- We experimented with using the OpenAI Whisper speech-to-text toolkit to create the auto-generated captions that captioning volunteers can edit. Looks promising! If you&rsquo;d like to compare the performance between small, medium, and large models, you can look at the VTT files for the sqlite talk in the backstage area. I&rsquo;ve also added support for tab-separated values (like Audacity label exports) and a subed-convert command to subed.el, which might give us a more concise format to work with. I&rsquo;ll work on getting word-level timing data so that our captioning workflow can be even easier.
+
+Next week, we hope to:
+
+- improve the prerec and captioning workflows
+- get more captions underway
+
+Lots of good stuff happening!
+
+Sacha Chua
+
+
+## DONE 2022-10-30 volunteer update
+
+Hello, everyone! Here&rsquo;s the weekly update on what&rsquo;s happening backstage
+for EmacsConf 2022 in case you notice something that you want to help
+out with. =)
+
+- Help wanted - Captioning: There are three talks open for captioning
+ in <https://media.emacsconf.org/2022/backstage/> , so feel free to
+ e-mail me if you&rsquo;d like to reserve one. I&rsquo;ve tweaked the captioning
+ process a little bit so that I can reflow the transcripts into
+ shorter subtitles before people edit the captions, so editing is
+ easier to do because you don&rsquo;t have to split along the way. (If
+ you&rsquo;re curious about the technical stuff, I switched to manually
+ splitting the text using emacsconf-reflow from emacsconf-el and then
+ the using aeneas for forced alignment, because I couldn&rsquo;t figure out
+ how to get torchaudio unstuck sometimes.)
+
+ If you don&rsquo;t have the username and password for the backstage area
+ and you would like to access it, please e-mail me and I&rsquo;ll send you
+ the details.
+
+- Help wanted - tech checks: For sessions with live Q&A, we&rsquo;d like to
+ set up tech-checks with speakers to make sure that their setup works
+ well with BigBlueButton. A rough outline of the process is in the
+ tech-checking protocol heading at
+ <https://emacsconf.org/2022/organizers-notebook/#tech-checks> . If you
+ would like to help with tech-checks, please e-mail us with your
+ general availability (including timezones) and preferred public
+ contact information so that we can include you on the list at
+ <https://emacsconf.org/2022/prepare/#tech-check> and in the e-mail to
+ speakers.
+
+- Help wanted - intro/intermission slides, OBS overlay, ??: It might
+ be interesting to design something to show right before and right
+ after a talk so that people can see the title, speaker name, talk
+ page URL, Q&A info, pad URL, pronouns, etc. Ideally we&rsquo;d be able to
+ generate a whole bunch of these from the talk data, so maybe SVG or
+ a TikZ picture? If this is your jam, let us know.
+
+- OBS in the cloud: We&rsquo;ve been able to figure out how to stream both
+ streams using OBS, VNC, and PulseAudio on Ry P.&rsquo;s virtual server, so
+ it&rsquo;s even more likely that we&rsquo;re going to pull off two tracks this
+ year. Yay!
+
+- Tom Purl has joined as a captioning volunteer. Hi Tom!
+
+This week we hope to get lots of talks submitted, processed, and on
+the way to being captioned. We&rsquo;re also planning to make the captioning
+workflow even better, and to improve the OBS streaming workflow. Whee!
+
+Sacha <sacha@sachachua.com>
+
+
+## Volunteer update 2022-11-07
+
+Hi everyone!
+
+Here&rsquo;s what&rsquo;s been happening backstage.
+
+- Speakers have been submitting their videos, hooray! I added a
+ schedule to the backstage page at
+ <https://media.emacsconf.org/2022/backstage/> so that people can see
+ how the schedule&rsquo;s coming along. We expect more talks to come in the
+ next two weeks. Not panicking yet. =)
+
+- Thanks to all the people who&rsquo;ve been working on captions so far!
+ Bhavin, Andrea, and Ramin did the captions for their talks, and Jai
+ captioned Bala&rsquo;s talk. Tom, Bhavin, and Hannah are currently working
+ on captions. There are three more talks backstage if anyone wants to
+ work on them.
+
+- I just posted some notes on how I reflow and edit subtitles in case
+ they&rsquo;re helpful:
+ <https://media.emacsconf.org/2022/backstage/editing-captions.html>
+ It&rsquo;s also linked from the backstage page under More info: editing
+ captions.
+
+- We added the Emacs development updates talk from John Wiegley and
+ updated the times of other talks based on messages from the
+ speakers.
+
+- We did a dry run of the OBS streaming setup with Leo, Amin, and
+ Corwin. I think we&rsquo;re on track to being able to broadcast two
+ streams this year.
+
+- IRC announcements, BBB redirection, and media file publishing can
+ now all automatically happen when the talk status changes,
+ simplifying our work during the conference. Video playback and Q&A
+ browser windows can happen automatically if streaming from
+ res.emacsconf.org. I want to get the publishing workflow all
+ smoothed out too, so that talks and transcripts can be more easily
+ published to the wiki pages during the conference.
+
+Plans for this week:
+
+- More videos and captions!
+- I plan to work on talk page publishing so that it happens smoothly during the conference
+- Leo&rsquo;s going to review the videos submitted so far and prepare intros for them
+- Might be a good idea to reach out to speakers for tech checks and bios
+
+EmacsConf is a little less than four weeks away. Stuff is happening!
+
+Sacha
+
+
+## DONE Send prerec reminder :sachac:
+
+
+### DONE Update logbook with notes from e-mails :sachac:
+
+
+### DONE Follow up with speakers based on their availability
+
+
+### CANCELLED Email speakers because I&rsquo;ll be shutting down the web upload
+
+
+## DONE Send schedule-published email for emacsconf-discuss :needsowner:timesensitive:email:
+
+Schedule is now available; post to emacsconf-discuss, emacs-tangents
+<https://lists.gnu.org/archive/html/emacsconf-discuss/2022-10/msg00000.html>
+
+
+### DONE Post it to r/emacs as well :reddit:zaeph:
+
+Please let zaeph know when it’s live so that the post can be distinguished.
+
+
+### Template
+
+Greetings, fellow Emacsians!
+
+On behalf of the EmacsConf 2022 organizers team, I&rsquo;m very excited to
+announce the schedule for EmacsConf 2022 (Dec 3 and 4), available at:
+
+<https://emacsconf.org/2022/talks>
+
+All of the times listed on the schedule are in EST (UTC-5). You can
+click on each talk&rsquo;s title to open its page for more information,
+including its scheduled time in your local time. (Displaying local time
+requires running a tiny bit of AGPLv3+-licensed free/libre JavaScript
+code, included on the talk pages.)
+
+For prerecorded talks, this time is also when the talk&rsquo;s video will be
+made available on the same page. Please note that the times are
+approximations, and that the schedule may change leading up to the
+conference.
+
+As the conference approaches, we&rsquo;ll post more details on how to watch
+and participate.
+
+You can subscribe to the emacsconf-discuss mailing list at
+<https://lists.gnu.org/mailman/listinfo/emacsconf-discuss> to
+be sure you&rsquo;ll get updates.
+
+Want to help make EmacsConf even awesomer? Volunteer!
+<https://emacsconf.org/2022/volunteer/>
+
+We hope to see you all around on Dec 3-4 for EmacsConf 2022!
+
+P.S. please direct all replies to this post either to myself or to the
+emacsconf-discuss list, so as to help avoid generating extra off-topic
+chatter in the other lists cc&rsquo;d in this message; thank you.
+
+
+## DONE Flesh out prepare.md for audio-recording tips before the prerec-deadline :zaeph:
+
+
+## DONE Write speaker e-mail for people who have already submitted their talks
+
+To: speakers who have already submitted their talks (so that we don&rsquo;t distract people who are still working on their talks)
+
+ (defun emacsconf-mail-speaker-after-video (group &optional template)
+ (interactive (list (emacsconf-mail-complete-email-group
+ (seq-filter (lambda (o) (plist-get o :intro-note))
+ (emacsconf-active-talks (emacsconf-get-talk-info))))))
+ (setq template (or template (emacsconf-mail-merge-get-template "speaker-after-video")))
+ (let ((talks (cdr group)))
+ (emacsconf-mail-prepare
+ template
+ (car group)
+ (list :speakers-short (plist-get (cadr group) :speakers-short)
+ :plural (if (= (length (cdr group)) 1) "" "s")
+ :email (plist-get (cadr group) :email)
+ :in-between (mapconcat (lambda (talk)
+ (emacsconf-surround "<https://media.emacsconf.org/2022/in-between/" (plist-get talk :slug) ".png>" ""))
+ (cdr group)
+ ", ")
+ :intro
+ (mapconcat (lambda (talk)
+ (string-join (org-wrap (emacsconf-surround "- " (plist-get talk :intro-note) "\n" "") 70) "\n"))
+ (cdr group)
+ "")
+ :chapters
+ (mapconcat (lambda (talk)
+ (format "<https://media.emacsconf.org/2022/backstage/#%s>:\n%s"
+ (plist-get talk :slug)
+ (mapconcat
+ (lambda (chapter)
+ (concat (format-seconds "%.2h:%z%.2m:%.2s"
+ (floor (/ (elt chapter 1) 1000)))
+ " "
+ (elt chapter 3) "\n"))
+ (subed-parse-file
+ (expand-file-name (concat (plist-get talk :video-slug) "--main--chapters.vtt") emacsconf-cache-dir)))))
+ (cdr group)
+ "\n\n")
+ :caption-note
+ (if (seq-find (lambda (o) (not (string= (plist-get o :status) "TO_STREAM"))) (cdr group))
+ " The captions haven't been fully edited yet, so please ignore any errors in the captions themselves."
+ "")
+ :urls
+ (mapconcat (lambda (o) (concat "<" emacsconf-base-url (plist-get o :url) ">"))
+ (cdr group) " , ")
+ :tech-check-note
+ (if (string-match "live" (or (mapconcat (lambda (o) (or (plist-get o :q-and-a) "")) (cdr group) " ") ""))
+ (format
+ "*Tech check*
+
+ Since you're planning to do a live Q&A session, you may want to
+ connect to the test BBB room at <%s> to make sure you can share
+ your audio, your window or screen, and your webcam (optional). Sharing
+ system audio or multi-monitor setups can sometimes be tricky, so
+ please let us know if you need help figuring things out. You can
+ double-check by connecting with a separate device, or you can arrange
+ to meet with one of the tech-check volunteers
+ (<https://emacsconf.org/2022/prepare/#tech-check>).${wrap}
+
+ " emacsconf-test-bbb-room) "")))
+ (add-hook 'message-sent-hook
+ `(lambda ()
+ (mapc (lambda (o)
+ (emacsconf-add-to-talk-logbook o "Sent speaker-after-video email"))
+ (list
+ ,@(mapcar (lambda (talk) (plist-get talk :slug)) talks))))
+ nil t)))
+
+ (defun emacsconf-mail-speakers-after-videos ()
+ (interactive)
+ (let* ((info (seq-filter (lambda (o) (plist-get o :intro-note))
+ (emacsconf-active-talks (emacsconf-get-talk-info))))
+ (grouped (seq-group-by (lambda (o) (plist-get o :email)) info))
+ (template (emacsconf-mail-merge-get-template "speaker-after-video")))
+ (mapc (lambda (group)
+ (emacsconf-mail-speaker-after-video group template))
+ grouped)))
+
+
+### Template
+
+Hi, ${speakers-short}!
+
+Thank you for uploading your video early! Let&rsquo;s get a few more things
+sorted out for a smooth EmacsConf 2022.
+
+${tech-check-note}\*Intro\*
+
+I&rsquo;ve written a brief (and possibly inaccurate! =) ) intro that the
+host can read out before your talk while the in-between slide
+(${in-between}) is being displayed:
+
+${intro}
+
+Would you like to tweak it to better reflect your talk?
+
+**Chapter markers**
+
+I&rsquo;ve added chapter markers to your video in the backstage area to help
+with navigation. You can click on them in the backstage area if you
+want to easily jump around, or review the list that I&rsquo;ve included for
+your convenience:
+
+${chapters}
+If you prefer other headings or timestamps, please let me know!${caption-note}
+
+**Bio, community support links**
+
+People often want to learn more about speakers and show their
+appreciation. If you&rsquo;d like to include an author bio and any
+social/support links to your talk page${plural} (${urls}), please
+e-mail us the text that you&rsquo;d like to include. You can also follow the
+instructions at <https://emacsconf.org/edit/> to edit your talk
+page${plural} directly yourself, if you want to.${wrap}
+
+Thanks again for all your contributions!
+
+Sacha
+
+
+<a id="prepare-prerec-process"></a>
+
+## DONE Prepare for prerecs :zaeph:
+
+
+### DONE Optimize ffmpeg incantation
+
+Remember to update <../prepare.md> with the new incantation.
+
+
+#### Incantation from last year
+
+ Q=32
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
+
+
+#### New candidate
+
+Changelog:
+
+- Disable adaptive quantization by setting aq-mode to 0 (TODO: compare samples)
+- Add `-row-mt 1` needed to support `tile-rows` (2×2 is enough for 720p)
+- Also use tiles for first pass
+- Remove `-frame-parallel 0` because it’s disabled by default (see [Notes on encoding settings · Kagami/webm.py Wiki](https://github.com/Kagami/webm.py/wiki/Notes-on-encoding-settings))
+- Put number of CPU in variable and use it for `cpu-used` and `threads`
+- Stick to default for `auto-alt-ref`
+- Stick to default for `lag-in-frames`
+
+ Q=32
+ CPU=8
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -an -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -g 240 -pass 1 -f webm -threads $CPU /dev/null &&
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -pass 2 -g 240 -threads $CPU "$2"
+
+Other considerations:
+
+- We might want to tweak the time before keyframes (`-g`).
+
+
+#### FFMpeg
+
+<https://img.ly/blog/ultimate-guide-to-ffmpeg/>
+
+
+### DONE Figure out workflow for handling submitted prerecs
+
+We need time after the prerecs get submitted to:
+
+- convert the videos and check that they&rsquo;ve been reencoded properly by watching the re-encoded ones all the way to the end
+- caption videos
+- capture any extra info
+- follow up with missing prerecs
+
+Make changes in [As prerecorded talks come in](#prerec-process)
+
+
+<a id="intro"></a>
+
+## DONE Make something to display between talks :akshay196:
+
+Goals:
+
+- Reassure people that they&rsquo;re in the right stream for the talk that they&rsquo;re looking for
+- Direct them to the pad and Q&A for the talk
+
+What to show in between talks:
+
+- Previous talk: title, speaker, pronouns, talk page, Q&A information (if still live)
+- Next talk: title, speaker, pronouns, talk page, Q&A information, countdown
+
+<https://media.emacsconf.org/2022/backstage/gen-in-between.pdf>
+<https://media.emacsconf.org/2022/backstage/dev-in-between.pdf>
+
+- Good: Static image, maybe created with LaTeX
+- Better: Video with unobtrusive sound so people can doublecheck that their audio works
+- Best: Emacs thing so that we can have a dynamic timer and last-minute announcements, and so that it&rsquo;s Emacs =)
+- Even better than that: A compact view that can be overlaid on the Q&A session using OBS
+
+See break commercials
+<https://www.collabmagazine.com/organizing-a-multi-track-virtual-conference-with-microsoft-teams-live-events-a-technical-playbook-and-lessons-learned/>
+
+OBS scenes (maybe?):
+
+- splash-screen when we’re on break
+- scene when broadcasting a talk (where we might want a logo and a bar or surrounding to broadcast messages like time left in
+ recording); and
+- Q&A scene with host-webcam, optional speaker-webcam, and pad with questions.
+- Q&A scene focusing on shared screen from speaker
+- Q&A scene with IRC and pad
+
+Nothing is urgent, blocking it, or being blocked by it, so you can
+play around with ideas.
+
+We&rsquo;re experimenting with two tracks this year, so we expect that some
+people will join midway through a talk or Q&A session and
+would like to reorient themselves. Some Q&A sessions may end
+early, so we would like to reassure people that they&rsquo;re in
+the right spot for the next talk. Most Q&As will be done
+live, but some Q&As will be done over IRC, so we need to
+point people to the right place.
+
+and if there&rsquo;s room for a little extra info like public e-mail
+addresses or pronouns, that can help people when they discuss
+things. That info will be in the pad and IRC, though, so it&rsquo;s
+also okay to omit it
+
+We can programmatically replace strings in
+SVG from Emacs, so we can easily use that as an overlay.
+
+<zaeph> …Or, if you just want to focus on the look of
+things, we can think of the content on our own.
+
+<sachac> oh yeah, totally, you can just focus on the design and use
+placeholder text
+
+Overlay considerations:
+
+- talk videos will likely have subtitles; no subtitles for Q&A
+- zaeph doesn&rsquo;t like vertical text
+
+
+### DONE Generate talk banners :sachac:
+
+![img](https://gitlab.com/akshay196/emacsconf-artwork/-/blob/main/2022/talk-banner/sample.svg)
+<https://gitlab.com/akshay196/emacsconf-artwork/-/blob/main/2022/overlays/src/>
+
+
+### TODO Make a list of different things to plug during commercial breaks, like Mastodon :sachac:
+
+
+### CANCELLED Create a version of in-between that we can use for Q&A, since it&rsquo;s no longer &ldquo;Coming Next&rdquo;
+
+
+## DONE Find volunteers for tech-checks :zaeph:
+
+
+### DONE Add entry in 2022/volunteer.md
+
+
+### DONE Write protocol for adding tech-checker volunteer
+
+- Invite volunteer to BBB (ask core organizers)
+- Update <prepare.md> with new tech-checker info
+- Coach tech-checker on the protocol
+
+
+### DONE Write the tech-checking protocol (formerly referred to as “tech-checklist”)
+
+From previous years:
+
+> - Can you speak and be heard? Is there echo?
+> - Can you hear the organizer?
+> - Can you share your screen? Is the screen readable?
+> - If you plan to show your keystrokes, is that display visible?
+> - If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background?
+> - Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you?
+> - Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes?
+> - Do you need help finding your way around IRC so that you can check into \`#emacsconf-org\`? What is your IRC nickname?
+
+
+<a id="conforg"></a>
+
+## DONE Move conf.org management to orga@res.emacsconf.org :sachac:
+
+so that more people can work with it during the conference
+See the publish role in the ansible playbook
+
+
+## DONE Ask speakers for bios or support nudges to include on their talk pages :wiki:
+
+maybe after we get the prerecs
+ex: liberapay, patreon, anyone looking for a job, etc.
+
+
+## DONE Set up BBB rooms and update conf.org :sachac:
+
+1. Log on to bbb.emacsverse.org as an admin.
+2. Create a room. Enable **Mute users when they join**.
+
+ The code below doesn&rsquo;t quite work, but might be a good starting point for future automation.
+
+ (setq list (seq-drop (emacsconf-bbb-room-title-list) 3)) ; skip some if needed
+ (progn
+ (setq name (pop list))
+ (kill-new (format "name=\"%s\";$('#create-room-block').click();$('#create-room-name').val(name);$('#room_mute_on_join').click();$('.create-room-button').click();\n"
+ name))
+ (sleep-for 1)
+ (shell-command "xdotool key alt+Tab sleep 3 key ctrl+v sleep 1 key Return"))
+
+console.log(JSON.stringify([&#x2026;document.querySelectorAll(&rsquo;.delete-room&rsquo;)].map((o) => { return { name: o.getAttribute(&rsquo;data-name&rsquo;), path: o.getAttribute(&rsquo;data-path&rsquo;) }}).filter((o) => o.name.match(*^ec22*))))
+
+see conf.org for the rest of the process
+
+
+### DONE Add volunteers to the BBB rooms
+
+- vetrivln: sat-am-dev, sun-am-dev
+- FlowyCoder: sat-pm-gen, sun-pm-gen
+- jman: sun-pm-gen
+
+
+### DONE Doublecheck mute on join
+
+[Shifts](file:///home/sacha/proj/emacsconf/wiki/2022/organizers-notebook/index.md)
+
+ list = [...document.querySelectorAll('.room-name-editable')].filter((o) => o.value.match(/^ec22-(sat|sun)/));
+ list.reduce(async(prev, elem) => {
+ await prev;
+ if (!sessionStorage.getItem(elem.value)) {
+ return new Promise(async (resolve, reject) => {
+ card = elem.closest('.card-body');
+ card.querySelector('.item-action.dropdown a').click();
+ await new Promise(r => setTimeout(r, 1000));
+ card.querySelector('.update-room').click();
+ await new Promise(r => setTimeout(r, 1000));
+ if (!document.querySelector('#room_mute_on_join').checked) {
+ document.querySelector('#room_mute_on_join').click();
+ sessionStorage.setItem(elem.value, true);
+ await new Promise(r => setTimeout(r, 1000));
+ document.querySelector('.update-only.create-room-button').click();
+ } else {
+ sessionStorage.setItem(elem.value, true);
+ document.querySelector('#createRoomModal').click();
+ }
+ resolve(true);
+ });
+ }
+ });
+
+
+<a id="coordinate-volunteers"></a>
+
+## DONE Coordinate and help volunteers :sachac:
+
+- <../volunteer>
+- Figure out what information volunteers need in order to feel
+ comfortable signing up for tasks. ex:
+ <https://wiki.debian.org/DebConf/21/VideoVolunteering>
+- Encourage people to sign up for [Shifts](#shifts)
+
+
+### DONE Plan training session(s), Q&A availability, recordings
+
+
+### CANCELLED Hold Q&A session with volunteers
+
+
+### TODO Respond to new volunteers
+
+
+### SOMEDAY Subscribe volunteers to mailing list
+
+
+<a id="streaming"></a>
+
+## DONE Investigate streaming options, maybe OBS in the cloud :sachac:
+
+Current status:
+
+- res.emacsconf.org seems to be able to handle 2x (OBS + TigerVNC + MPV, should test with Firefox as well)
+- corwin and jman will stream gen from OBS on res
+- bandali will stream dev from his laptop
+- let sachac know if you want manual control or more autopilot for the gen stream
+
+Goals:
+
+- [X] Be able to start a VNC server with OBS, MPV, and Firefox, connect to it, and stream
+- [X] Have another session with the sound isolated
+- [-] Split the audio so that we can join the Q&A room before the MPV ends - handled by automatic scene switcher detecting mpv, but we can&rsquo;t share just a window, so we might as well just wait
+- [X] Control MPV from the commandline: track-mpv appears in the correct display, and it can also be controlled via the socket like this: echo &rsquo;{ &ldquo;command&rdquo;: [&ldquo;loadfile&rdquo;, &ldquo;test2.webm&rdquo;] }&rsquo; | socat - ~/mpv-socket-emacsconf-dev
+- [ ] Share the window instead of the desktop?
+
+Prerequisites:
+
+- You need to be able to SSH out to res.emacsconf.org on port 46668
+ and forward ports, so one of the main organizers needs to add your
+ SSH public key to the authorized\_keys file. Please e-mail your SSH
+ public key to sacha@sachachua.com and test that port 46668 is not
+ blocked.
+- For streaming from OBS in VNC, you will need a VNC viewer like
+ tigervnc-viewer.
+- For streaming from your local computer, you will need OBS and FFmpeg.
+
+During the conference, you will:
+
+- play the talk video (unless it&rsquo;s automatically managed by the agenda) and update the overlays
+- display intro/intermission information as needed
+- open the Q&A windows, like the pad and the BBB room/IRC (unless it&rsquo;s automatically managed by the agenda)
+- adjust the volume if needed
+- arrange windows and focus the BBB room on the speaker&rsquo;s webcam if needed
+- if you like, you can be responsible for managing the track from conf.org on orga@res.emacsconf.org
+
+Dry run checklist:
+
+- [ ] Connect to the server
+ ssh orga@res.emacsconf.org -p 46668
+ emacsconf # runs emacsclient -c -a emacs
+- [ ] Forward ports and connect via VNC
+- [ ] Find the OBS or start it if it is not running
+- [ ] Start recording
+- [ ] Play a video
+- [ ] Open two Firefox windows and arrange them
+- [ ] Manage windows on the workspace
+- [ ] Adjust the volume in OBS
+- [ ] SSH to the server and play a video off-screen
+- [ ] SSH to the server with X forwarding and adjust the volume off-screen
+
+
+### Broadcasting from local OBS (option A)
+
+- You can copy the profile from your track or look inside it for the icecast mount point details:
+ - Gen: rsync -avze &rsquo;ssh -p 46668&rsquo; emacsconf-gen@res.emacsconf.org:~/.config/obs-studio/basic/profiles/ ~/.config/obs-studio/basic/profiles/
+ - Dev: rsync -avze &rsquo;ssh -p 46668&rsquo; emacsconf-dev@res.emacsconf.org:~/.config/obs-studio/basic/profiles/ ~/.config/obs-studio/basic/profiles/
+
+- Sacha will turn off the OBS recordings on res so that you can test streaming from your computer
+ - If you&rsquo;re doing this independently, you can jump ahead to &ldquo;Connecting to VNC&rdquo; in order to stop the recording yourself
+
+- Verify with MPV:
+
+ mpv https://live0.emacsconf.org/gen.webm
+ mpv https://live0.emacsconf.org/dev.webm
+
+- With luck, the 480p streams will be up automatically as well
+
+ mpv https://live0.emacsconf.org/gen-480p.webm
+ mpv https://live0.emacsconf.org/dev-480p.webm
+
+
+### Connecting to VNC (option B)
+
+1. Stop broadcasting locally if you were testing local OBS.
+
+2. Install a VNC viewer on your system (ex: tigervnc-viewer).
+
+3. Set up your local environment:
+ - gen: export TRACK=gen; export TRACK\_PORT=5905; export SSH\_PORT=46668
+ - dev: export TRACK=dev; export TRACK\_PORT=5906; export SSH\_PORT=46668
+
+4. Copy the password:
+
+ scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK -p $SSH\_PORT
+
+5. Forward your local ports and connect via VNC viewer to the
+ appropriate forwarded port from your laptop:
+
+ ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &
+ sleep 5 # Give it time to establish the tunnels
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+
+ (If this doesn&rsquo;t find a VNC server to connect to, you can start it with `ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc`)
+
+6. Start **recording** (not streaming). If you don&rsquo;t see OBS when you connect, it&rsquo;s probably on workspace 2, so you can switch with Alt-2. If you still don&rsquo;t see it there, you can open a terminal with Alt-Enter and then run `track-obs`. After you start recording, confirm that it is now broadcasting to the stream.
+
+7. Verify with MPV on your local system:
+
+ mpv https://live0.emacsconf.org/$TRACK.webm &
+
+8. With luck, the 480p streams will be up automatically as well. On your local system:
+
+ mpv https://live0.emacsconf.org/$TRACK-480p.webm &
+
+9. Play a video. It should display the video and update the overlays. If you need to update the overlays manually, you can copy files from `/data/emacsconf/overlays` onto `$HOME/other.png` and `$HOME/video.png`.
+
+ You can play a video with `play video-id` (ex: `play meetups`), or you can specify the filename (ex: ~play ~/stream/emacsconf-2022-meetups\*.webm).
+
+ termit: Ctrl-Shift-t makes a new tab
+
+ i3 cheat sheet:
+
+ - Alt-Enter creates a terminal
+ - Alt-d runs a command
+ - Alt-e toggles horizontal/vertical split
+ - Alt-f toggles full-screen
+ - Alt-w switches to tabbed view
+ - Alt-1 switches to workspace 1, Alt-2 switches to workspace 2
+ - Alt-Shift-2 moves things to workspace 2
+ - Alt-Shift-Left moves the current window to the left
+ - Alt-Shift-Right moves the current window to the right
+
+10. Test Q&A. You can either wait for the video to finish or quit it with &ldquo;q&rdquo;.
+ You can paste in the URLs or use
+ `firefox /data/emacsconf/2022/index-$TRACK.html`
+
+11. Test adjusting the audio
+ - `ssh emacsconf-$TRACK@res.emacsconf.org -p 46668`
+ - Then use `qa-louder`, `qa-quieter`, or `qa-vol vol%` (ex: `qa-vol 90%`)
+
+Other notes and tips:
+
+- You can use Emacs for emergency or ad-hoc announcements.
+- Use OBS or `pavucontrol` to adjust the volume of BBB as needed. You might be able to manage `pavucontrol` off-screen with `ssh emacsconf-$TRACK@res.emacsconf.org -X -p $SSH_PORT pavucontrol`.
+- You can also `ssh emacsconf-$TRACK@res.emasconf.org -p 46668` and start new processes from the command-line, such as using `track-mpv`. If you specify commands when you call SSH instead of using an interactive shell, you may need to also specify DISPLAY=:5 (for the gen track) or DISPLAY=:6 (for the dev track), since ssh won&rsquo;t pick up the variables from `.bashrc`.
+- If you have a Wayland-only desktop without any X11 compatibility layer (example: [Sway](https://swaywm.org) with `xwayland disable`) the suggested software (`tigervnc`) might no work. You can use instead for example `gnome-remote-desktop`. The password for the VNC connection can be retrieved from the file `vnc-passwd-$TRACK` (3DES encrypted).
+
+
+### Managing the stream from the agenda (option B2)
+
+ssh orga@res.emacsconf.org -p $SSH\_PORT
+emacsconf # runs emacsclient -c -a emacs
+
+You can then use
+
+- emacsconf-stream-play-video
+- emacsconf-stream-open-qa-windows-on-change
+- emacsconf-agenda-by-track
+- emacsconf-agenda
+
+If things are going well, you can use C-c C-t on the agenda view to change a talk to PLAYING, CLOSED\_Q, or OPEN\_Q, and various things should happen in the background. If they don&rsquo;t happen in the background, use emacsconf-add-org-after-todo-state-change-hook to add the todo state change hook, then try again.
+
+Task state shortcuts for C-c C-t:
+
+- **m (mpv):** PLAYING - -stream-play-video, emacsconf-stream-set-talk-info, publish the files to the media directory
+- **q (Q&A):** CLOSED\_Q
+- **o (open):** update the BBB redirect URLs to let people into the room
+- u (unstreamed)
+- r (to archive)
+
+You can leave the emacsclient with `C-x 5 0`
+
+
+#### Do Q&A
+
+From the emacsclient on orga@res.emacsconf.org, you can open various talk-related things:
+
+- emacsconf-stream-open-pad
+- emacsconf-stream-join-qa
+- emacsconf-stream-join-chat
+
+Alternatively, you can switch to the VNC viewer and use the links in
+<file:///data/emacsconf/2022/index-gen.html> or
+<file:///data/emacsconf/2022/index-dev.html> .
+
+For Q&A, you may want to have the Etherpad on the left, the BBB Q&A or
+IRC chat on the right, and the terminal and OBS windows on
+workspace 2.
+
+
+### Other tasks as needed
+
+
+#### Display emergency news / announcements
+
+M-x emacsconf-stream-broadcast to send a message to both streams
+or M-x emacsconf-stream-set-news to send a message to one stream.
+
+If that doesn&rsquo;t work, edit the news file directly with:
+`ssh emacsconf-$TRACK@res.emacsconf.org > ~/news.txt`
+
+If that doesn&rsquo;t work, use the VNC session to switch to an Emacs window
+and type your message in.
+
+
+#### Kill the VNC server:
+
+ssh emacsconf-$TRACK@res.emacsconf.org &ldquo;vncserver -kill&rdquo;
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">~/bin/track-obs</td>
+<td class="org-left">start OBS with the track&rsquo;s profile and scene collection</td>
+</tr>
+
+
+<tr>
+<td class="org-left">~/bin/track-mpv file.webm</td>
+<td class="org-left">play the file using the track&rsquo;s sink</td>
+</tr>
+</tbody>
+</table>
+
+
+#### Making OBS scenes
+
+Making OBS scenes is pretty straightforward as you can move the
+different blocks on your scene in the preview window. However, it’s
+important to make sure that your video-captures and your overlays are
+snapping properly to the edges of the view-port. To do this, make sure
+to right-click on the block inside the preview window, and try the
+different fitting options (fit by width, height, etc.) until you find
+one that works best.
+
+We’ll probably be streaming at 720p, but since we’re also considering
+a 1080p update, try to create your overlays in a format or a resolution
+that would support resizing.
+
+
+### Other notes
+
+There are sockets in the home directory for MPV control if you want to keep that process.
+echo &rsquo;{ &ldquo;command&rdquo;: [&ldquo;loadfile&rdquo;, &ldquo;test2.webm&rdquo;] }&rsquo; | socat - ~/mpv-socket-emacsconf-dev
+
+
+### DONE Test and document command-line way of managing audio :sachac:
+
+
+### DONE Move my conf.org setup to res so that we can control everything from there
+
+
+### DONE Set timers for changing todo state
+
+ (defun emacsconf-schedule-test-buffer (info)
+ (mapcar (lambda (o) (plist-put o :buffer "1") o) info))
+ (let ((emacsconf-schedule-strategies '(emacsconf-schedule-test-buffer)))
+ (emacsconf-stream-schedule-timers (emacsconf-schedule-prepare
+ (emacsconf-schedule-inflate-sexp
+ `(("Test gen" :start ,(format-time-string "%Y-%m-%d %H:%M"
+ (time-add (current-time) (seconds-to-time 60))))
+ (journalism :time "1")
+ (school :time "2")
+ (handwritten :time "1")
+ ("Test dev" :start ,(format-time-string "%Y-%m-%d %H:%M"
+ (time-add (current-time) (seconds-to-time 60))))
+ (treesitter :time "2")
+ (lspbridge :time "1")
+ (asmblox :time "1"))))))
+
+the dev one worked, but the gen one gets
+Couldn’t find local shell prompt for /bin/sh
+Tramp: Opening connection **Async Shell Command** for emacsconf-gen@res.emacsconf.org using ssh&#x2026;failed
+
+Maybe I need to stagger them, or maybe I need to use a shell command.
+Changed to call ssh directly instead of using tramp.
+
+
+### DONE Figure out how to work with the layout
+
+<https://i3wm.org/docs/layout-saving.html>
+
+
+### DONE Allow per-track configuration of todo hooks :sachac:
+
+emacsconf-todo-hooks
+
+
+### CANCELLED Use xdotool to automate joining BBB in Firefox (signing in, clicking on listen only)
+
+
+#### DONE Xdotool over ssh so that I can click things?
+
+
+### CANCELLED Experiment with sharing part of the screen so that there&rsquo;s space for us to work a little off-screen
+
+We might just have to rely on xdotool to move windows the way we want them
+Window fixes that didn&rsquo;t work
+
+- <https://obsproject.com/forum/threads/solved-window-capture-black-screen.47082/>
+- <https://www.reddit.com/r/obs/comments/kas5ka/obs_window_capture_xcomposite_black_screen/>
+
+
+### DONE Set up scenes and try them
+
+
+### DONE Set up text source for URL
+
+
+### DONE Create Ansible tasks for setting up sinks for MPV and Firefox for the streams, and adding the scenes appropriately
+
+
+### DONE See if I can even Ansible-up the rest of the tasks
+
+like starting up Firefox and mpv and everything
+
+
+### CANCELLED obs-websocket control of OBS on the server
+
+so that the streamer can adjust volume offscreen?
+
+
+### DONE document such that someone else could use/fix it
+
+
+### DONE recruit at least one more person to help operate the &ldquo;video bouncer&rdquo;
+
+
+### Other notes
+
+- bandali doesn&rsquo;t have much cognitive bandwidth at the moment, so we can keep things simple with OBS on laptops
+
+- Issue: zaeph was dropping frames and couldn’t pay attention to as many things as he wanted
+- Issue: corwin needs assistance to not be locked in his chair for the whole conf. Premptively, zaeph can do it by broadcasting OBS scenes via the rtmp (instead of just his webcam).
+- With a long day, we may want to be able to schedule hosts/streamers/publishers in shifts
+- Ideal: Easy reproducible setup to spin up an OBS VM with scenes set up, allowing multiple users to connect to it at the same time. Maybe x2go or vnc? VMs with 8 vCPUs and a vGPU cost more, so it would be good to figure out what&rsquo;s needed, spin it down, and then spin it up maybe the day before or something like that.
+- Plus points if we can control the OBS via password-protected websocket so we can tell it to switch scenes (and even more points if we do so from Emacs, maybe via that obs-websocket.el ;) ). MPV is also controllable via IPC, so we can use the same MPV player and then switch videos around. Maybe mpvc? <https://unix.stackexchange.com/questions/664728/how-can-i-control-mpv-in-command-line>
+- Probably Linode&rsquo;s Dedicated 32 GB + RTX6000 GPU x1 at $1.50 an hour for 2-3 days + dev time, since live.emacsconf.org is in Linode as well
+- We should also look into normalization across the board, especially if we have BBB participants. pipewire + easyeffects on the box might be the easiest way to do it.
+
+- <https://docs.vdo.ninja/>
+- Live Streaming using low configuration vps <https://www.youtube.com/watch?v=3iBYYgkG1eM&t=953>
+- <https://snowmix.sourceforge.io/Examples/input.html>
+- <https://www.google.com/url?sa=t&source=web&rct=j&url=https://m.youtube.com/watch%3Fv%3D1y-DUYiECWQ&ved=2ahUKEwjPru_TqOv6AhVMkokEHXL9Dm4QtwJ6BAgqEAI&usg=AOvVaw17mbCEiFL6dGVY4YEBufcy>
+- [OBS Studio 26.0 | Hacker News](https://news.ycombinator.com/item?id=24633139)
+- <https://github.com/mviereck/x11docker#sound>
+- <https://vcs.fsf.org/?p=streamdesktop.git;a=tree>
+- <https://opensource.com/article/20/5/conference-free-software>
+- <https://github.com/soonum/hubangl>
+- <https://obsproject.com/forum/threads/run-obs-on-vm-in-the-cloud.122543/>
+
+
+### DONE Automate in-between display?
+
+[Think about what to do with schedule gaps due to cancelled talks](file:///home/sacha/proj/emacsconf/wiki/2022/organizers-notebook/index.md)
+
+emacsconf-stream-display-clock-and-countdown
+
+
+#### SOMEDAY Redo in-between slides
+
+
+#### DONE Automatically display in-between slide if there&rsquo;s no recorded intro
+
+Okay, what&rsquo;s the tricky part here?
+
+todo status triggers playing, so things have to be non-interactive
+intro needs to be manual
+
+- if manual intro
+ - open the in-between page
+ - streamer types &ldquo;play slug&rdquo; manually
+- if recorded intro
+
+Gen:
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">recorded intro</td>
+<td class="org-left">live intro</td>
+</tr>
+
+
+<tr>
+<td class="org-left">recorded talk</td>
+<td class="org-left"><span title="(emacsconf-stream-play-intro &quot;school&quot;)">school</span>; play automatically</td>
+<td class="org-left"><span title="(emacsconf-stream-play-intro &quot;workflows&quot;)">workflows</span>; show in-between, host intros over mumble, streamer types &ldquo;play slug&rdquo;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">live talk</td>
+<td class="org-left"><span title="(emacsconf-stream-play-intro &quot;journalism&quot;)">journalism</span>; play intro automatically, join bbb</td>
+<td class="org-left"><span title="(emacsconf-stream-play-intro &quot;survey&quot;)">survey</span>; join bbb, no in-between slide</td>
+</tr>
+</tbody>
+</table>
+
+Dev:
+
+[async]((emacsconf-stream-play-intro "async"))
+
+
+#### DONE Make sure recorded intros play
+
+<(emacsconf-stream-play-talk-on-change "school")> should play intro + video
+<(emacsconf-stream-play-video "health")> should play video (no recorded intro)
+
+dev:
+<(emacsconf-stream-play-talk-on-change "treesitter")> should play intro + video
+
+
+### DONE Separate mumble audio so that panic button can still bring in our audio
+
+
+### DONE Prepare for rms talk and Q&A with bandali
+
+Mumble?
+
+
+#### DONE Reflow and edit VTT for RMS TEDx talk so that things are on one line
+
+<file:///home/sacha/proj/emacsconf/lisp/emacsconf-stream.el>
+
+
+### DONE Add panic button to OBS settings
+
+Ctrl-Shift-M?
+
+
+### DONE Add background music to server :emacsconf:
+
+zaeph suggests using shoshin&rsquo;s music
+
+if ! screen -list | grep -q background; then
+ screen -S track-mpv ~/stream/background.wav &
+fi
+
+
+### DONE Make it easy to rebroadcast other track (ex: rms) - might need mpv with minimal configuration, switchable profiles
+
+
+#### DONE make it easy to rebroadcast
+
+
+<a id="caption-workflow"></a>
+
+## DONE Smoothen captioning workflow :sachac:
+
+It looks like OpenAPI needs a little less editing in terms of
+capitalization and punctuation, but it produces longer captions
+(likely a 30-second sliding window). I&rsquo;ll try to upload both YT and
+OpenAPI captions so that people can decide what they like.
+
+[Set up MPV for captions](#mpv-captions)
+
+
+### DONE Make sure all the captioned files are marked so
+
+ (seq-keep (lambda (o)
+ (when (and (string= (plist-get o :status) "TO_STREAM")
+ (or (null (plist-get o :captions-edited))
+ (null (with-temp-buffer
+ (insert-file-contents
+ (expand-file-name (concat (plist-get o :video-slug) "--main.vtt")
+ emacsconf-cache-dir))
+ (goto-char (point-min))
+ (re-search-forward "captioned by" (line-end-position) t)))))
+ (plist-get o :slug)
+ ))
+ (emacsconf-get-talk-info))
+
+
+### DONE Edit survey captions
+
+
+### DONE Edit dbus captions
+
+
+### DONE Figure out why it&rsquo;s choking on SRV2
+
+Can I use aeneas for alignment instead?
+
+Reflow the .txt file and reupload to res if needed
+call ../run-aeneas.sh from the directory with the opus or ogg and the txt file
+
+sachac@res-https://emacsconf.org/2022/talks/~/current/meetups$ python3 -m aeneas.tools.execute\_task emacsconf-2022-meetups&#x2013;attending-and-organizing-emacs-meetups&#x2013;bhavin-gandhi&#x2013;main.opus reflowed.srt &ldquo;task\_language=eng|os\_task\_file\_format=json|is\_text\_type=subtitles&rdquo; output.json
+
+I might try out lhotse and torchaudio someday, but it&rsquo;s low priority. aeneas seems to do a reasonable job of
+
+
+### DONE Move publishing the backstage index to res so that we can trigger it after the files are uploaded
+
+
+### DONE Compare large, medium, and small models
+
+12 threads
+
+Original file: 21:16 21 minutes
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-right">Hours</td>
+<td class="org-right">Mult</td>
+<td class="org-left">Notes</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="https://media.emacsconf.org/2022/backstage/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--large.vtt">Large</a></td>
+<td class="org-right">2:49</td>
+<td class="org-right">8</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="https://media.emacsconf.org/2022/backstage/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--medium.vtt">Medium</a></td>
+<td class="org-right">2:03</td>
+<td class="org-right">5.9</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><a href="https://media.emacsconf.org/2022/backstage/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--small.vtt">Small</a></td>
+<td class="org-right">0:40</td>
+<td class="org-right">2</td>
+<td class="org-left">More run-on sentences</td>
+</tr>
+</tbody>
+</table>
+
+Large and medium might do better on a system with a GPU. I&rsquo;ll default to the small model for now.
+
+
+### DONE Commit subed-tsv so that people can try a cleaner output
+
+
+### DONE Investigate more granular timestamps for the output from OpenAPI Whisper
+
+<https://git.emacsconf.org/emacsconf-ansible/tree/roles/caption/templates>
+
+
+### DONE Upload srv2 from YouTube for word-level
+
+
+### CANCELLED Compare with Google Cloud Speech API
+
+~/code/speech
+
+
+### DONE E-mail for bringing new captioning volunteers onboard
+
+ (defun emacsconf-mail-backstage-intro (volunteer &optional template)
+ (interactive (list (emacsconf-complete-volunteer)))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "backstage-intro"))
+ (assoc-default "EMAIL" volunteer 'string=)
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :conf-name emacsconf-name
+ :year emacsconf-year
+ :name (assoc-default "NAME_SHORT" volunteer 'string=)
+ :email (assoc-default "EMAIL" volunteer 'string=))))
+
+
+#### Template
+
+Hi ${name}!
+
+Thank you for volunteering for ${conf-name} ${year}!
+
+We&rsquo;ve set up ${backstage} as the backstage area where you can view the
+videos and resources uploaded so far. You can access it with the
+username "${backstage-user}&ldquo; and the password &rdquo;${backstage-password}&ldquo;.
+Please keep the backstage password and other speakers&rsquo; talk resources
+secret.
+
+For some ideas on ways to help, you can check out
+<https://emacsconf.org/2022/volunteer/> . You can also suggest other
+things you might be interested in.
+
+You can ask questions or chat with other volunteers by e-mailing the
+mailing list at emacsconf-org@gnu.org or dropping by #emacsconf on the
+libera.chat IRC network. You can also e-mail me or
+emacsconf-org-private@gnu.org if you have private questions.
+
+Thank you again for your help! =)
+
+Sacha Chua
+
+
+### DONE E-mail for bringing new captioning volunteers onboard
+
+ (defun emacsconf-mail-captioning-intro (volunteer &optional template)
+ (interactive (list (emacsconf-complete-volunteer)
+ (emacsconf-mail-merge-get-template "captioning-intro")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "captioning-intro"))
+ (assoc-default "EMAIL" volunteer 'string=)
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :conf-name emacsconf-name
+ :year emacsconf-year
+ :name (assoc-default "NAME_SHORT" volunteer 'string=)
+ :email (assoc-default "EMAIL" volunteer 'string=))))
+
+
+#### Template
+
+Hi ${name}!
+
+Thank you for volunteering to help with the captions for ${conf-name}
+${year}! Last year, we were able to get almost all the talks captioned
+in time for streaming. Participants found them very useful for
+understanding different technical terms, names, accents, and so on.
+We&rsquo;d love to be able to pull that off again this year, and it would be
+great to have you on board.
+
+We&rsquo;ve set up ${backstage} as the backstage area where you can view the
+videos and resources uploaded so far. You can access it with the
+username "${backstage-user}&ldquo; and the password &rdquo;${backstage-password}&ldquo;.
+Please keep the backstage password and resources secret. If you see a
+talk that you&rsquo;d like to caption, you can e-mail me at
+sacha@sachachua.com and I can reserve it for you. Then you can correct
+any misrecognized words, fix capitalizations, remove filler words as
+needed, and so on.
+
+You&rsquo;ll probably want to work with either the VTT or the TXT versions
+(VTT is WebVTT format and has timestamps), but you can check the other
+talk resources in case the speaker has posted scripts or other useful
+things. Both VTT and TXT are plain text, so feel free to use your
+favourite text or subtitle editor. I&rsquo;ve posted a brief demo of how I
+edit captions at
+<https://media.emacsconf.org/2022/backstage/editing-captions.html> , and
+you can find more captioning tips at <https://emacsconf.org/captioning/>
+. You can convert it to whatever format you like. If you prefer to
+work with plain text, we can figure out the timestamps afterwards.
+
+Let me know if you want to reserve a talk for captioning or if you have
+any questions or suggestions. We&rsquo;re also in the #emacsconf-org channel
+on the libera.chat IRC network, which you can connect to with your
+favourite IRC client or through the web-based interface at
+<https://chat.emacsconf.org/> .
+
+Sacha Chua
+
+
+### DONE Support cue IDs in subed-vtt.el
+
+
+### CANCELLED jiwer · PyPI - measure error rate
+
+<https://pypi.org/project/jiwer/>
+
+
+### SOMEDAY Think about flow for YouTube captions
+
+are they at the right length?
+
+
+### DONE Check captions for rms talk
+
+
+### TODO Try whisper.cpp
+
+commented out `-mavx` to get it to compile in Debian on res
+
+ffmpeg -y -i emacsconf-2022-rmsted&#x2013;main.ogg -acodec pcm\_s16le -ac 1 -ar 16000 emacsconf-2022-rmsted&#x2013;main.wav
+/usr/src/whisper.cpp/main -f emacsconf-2022-rmsted&#x2013;main.wav -m models/ggml-large.bin -ovtt -otxt
+
+
+### DONE edit rms tedx captions, they&rsquo;re not actually edited!
+
+
+### DONE realign subtitles if needed, looks like aeneas options need tweaking
+
+ (seq-keep
+ (lambda (file)
+ (let ((subtitles (subed-parse-file file))
+ gaps)
+ (while (cdr subtitles)
+ (setq gaps (cons (- (elt (cadr subtitles) 1) (elt (car subtitles) 2))
+ gaps))
+ (setq subtitles (cdr subtitles)))
+ ;; if there are gaps more than
+ (let ((big-gaps (seq-filter (lambda (gap) (> gap 100)) gaps)))
+ (when big-gaps
+ (list (file-name-base file)
+ (length big-gaps)
+ (apply #'max big-gaps)))))
+ )
+ (directory-files emacsconf-cache-dir t "--main.vtt$")
+ )
+
+
+### SOMEDAY ggerganov/whisper.cpp: Port of OpenAI&rsquo;s Whisper model in C/C++
+
+<https://github.com/ggerganov/whisper.cpp>
+
+
+### TODO Move the captioning stuff to the public area
+
+
+### TODO Look into getting the confidence intervals out of aeneas, maybe by getting it as an XML
+
+Also look into finetuneas
+
+
+### SOMEDAY A Deep Dive Exploration Applying OpenAI’s Whisper ASR To A PBS NewsHour Broadcast – The GDELT Project
+
+<https://blog.gdeltproject.org/a-deep-dive-exploration-applying-openais-whisper-asr-to-a-pbs-newshour-broadcast/>
+
+
+### SOMEDAY Confidence scores for each word? - Discussion #284 - openai/whisper
+
+<https://github.com/openai/whisper/discussions/284>
+
+
+### SOMEDAY jianfch/stable-ts: Stabilizing timestamps of OpenAI&rsquo;s Whisper outputs down to word-level
+
+<https://github.com/jianfch/stable-ts>
+
+
+### SOMEDAY See if we can get confidence data out of whisper
+
+
+### SOMEDAY Use bbb events to identify speaker changes and overlapping spans that might need closer attention
+
+
+### SOMEDAY Getting Started with Bacalhau | Bacalhau Docs
+
+<https://docs.bacalhau.org/getting-started/installation>
+
+
+### SOMEDAY Use OpenAI Whisper and Bacalhau to transcribe audio and video files | Nerd For Tech
+
+<https://medium.com/nerd-for-tech/how-to-use-bacalhau-and-openai-whisper-to-transcribe-a-youtube-video-7b6ee0135ce2>
+
+
+### SOMEDAY A Deep Dive Exploration Applying OpenAI’s Whisper ASR To A Russian Television News Broadcast – The GDELT Project
+
+<https://blog.gdeltproject.org/a-deep-dive-exploration-applying-openais-whisper-asr-to-a-russian-television-news-broadcast/>
+
+
+### SOMEDAY Benchmarks for T4 & V100 GPUs, comparison with human captioning, and deep dive on non-deterministic output · Discussion #395 · openai/whisper
+
+<https://github.com/openai/whisper/discussions/395>
+
+
+### SOMEDAY Pointers for running this on a GPU via a cloud service? · Discussion #398 · openai/whisper
+
+<https://github.com/openai/whisper/discussions/398>
+
+
+### SOMEDAY How to chunk text into paragraphs using python | by N Polovinkin | Medium
+
+<https://medium.com/@npolovinkin/how-to-chunk-text-into-paragraphs-using-python-8ae66be38ea6>
+
+
+## DONE Find a way to accommodate a specific return-speaker
+
+We’re not sure if we’re going to get a presentation or a prerec for them
+this year, but we need to keep this at the back of our minds.
+
+Note on how DebConf handled incidents:
+<https://www.mail-archive.com/search?l=debconf-team@lists.debian.org&q=subject:%22Re%5C%3A+DebConf+21+Incident+Response%22&o=newest&f=1>
+
+
+## DONE Write check-in email :sachac:
+
+
+### DONE Switch all the rooms to allow anyone to start them - one less step for the check-in person
+
+ //list = [...document.querySelectorAll('.room-name-editable')].filter((o) => o.value.match(/^ec22-(sat|sun)/));
+ card = document.querySelector('a[href=\"%s\"] .card-body');
+ card.querySelector('.item-action.dropdown a').click()
+ card.querySelector('.update-room').click()
+ if (!document.querySelector('#room_anyone_can_start').checked) {
+ document.querySelector('#room_anyone_can_start').click();
+ }
+ document.querySelector('.update-only.create-room-button').click();
+
+okay, next thing, it automatically refreshes. so I can&rsquo;t run the whole Javascript, I need to xdotool it.
+
+ (setq list (mapcar (lambda (o) (plist-get o :bbb-room)) (emacsconf-get-talk-info)))
+ (setq list (seq-drop list (seq-position list "https://bbb.emacsverse.org/b/sac-rvc-kd2-pev")))
+ (progn
+ (setq item (pop list))
+ (when (string-match "/b/\\(.*\\)" item)
+ (kill-new (format "card = document.querySelector('a[href=\"%s\"] .card-body');
+ card.querySelector('.item-action.dropdown a').click()
+ card.querySelector('.update-room').click()
+ if (!document.querySelector('#room_anyone_can_start').checked) {
+ document.querySelector('#room_anyone_can_start').click();
+ }
+ document.querySelector('.update-only.create-room-button').click();
+ "
+ (match-string 0 item)))
+ (sleep-for 2)
+ (shell-command "xdotool key alt+Tab")))
+
+Relying on xdotool seems a little fragile. Let&rsquo;s just check the page
+itself for the next one that needs to be done.
+
+ list = [...document.querySelectorAll('.room-name-editable')].filter((o) => o.value.match(/^ec22-(sat|sun)/));
+ list.reduce(async(prev, elem) => {
+ await prev;
+ if (!sessionStorage.getItem(elem.value)) {
+ return new Promise((resolve, reject) => {
+ card = elem.closest('.card-body');
+ card.querySelector('.item-action.dropdown a').click();
+ card.querySelector('.update-room').click();
+ sessionStorage.setItem(elem.value, true);
+ setTimeout(function() {
+ if (!document.querySelector('#room_anyone_can_start').checked) {
+ document.querySelector('#room_anyone_can_start').click();
+ document.querySelector('.update-only.create-room-button').click();
+ } else {
+ document.querySelector('#createRoomModal').click();
+ }
+ resolve(true);
+ }, 500);
+ });
+ }
+ });
+
+
+### DONE Update checkin instructions
+
+
+### Templates
+
+Goals:
+
+- Ask speaker verify their scheduled time
+ It has already been confirmed with them, but it might have changed slightly
+ - HOW: They should check the time at the top of their talk page on the day of the conference
+- Double-check Q&A preference, encourage tech checks for live talks/Q&A
+ - If they are available:
+ - Direct to tech-checks via <https://emacsconf.org/${year}/prepare/>
+ - Inform them of the check-in process
+ - They come say hi to us 30&rsquo; before their session in #emacsconf-org or #emacsconf (they can use chat.emacsconf.org )
+ - We get them set up in a room where they can wait until the end of the broadcast of their pretention
+ - They’re joined by the streamer and host.
+- Warning about potential emergency changes
+
+Slightly more complex because of the conditionals
+
+ (defun emacsconf-mail-checkin-instructions (group &optional template)
+ "Send checkin instructions.
+ GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group
+ (seq-filter
+ (lambda (o)
+ (or
+ (string= (plist-get o :status) "CANCELLED")
+ (null (plist-get o :email))
+ (string-match "after" (or (plist-get o :q-and-a) ""))))
+ (emacsconf-get-talk-info)))))
+ (let* ((talks (seq-remove
+ (lambda (o)
+ (or
+ (string= (plist-get o :status) "CANCELLED")
+ (null (plist-get o :email))
+ (string-match "after" (or (plist-get o :q-and-a) ""))
+ (save-window-excursion
+ (emacsconf-with-talk-heading o
+ (re-search-forward "checkin instructions" (save-excursion (org-end-of-subtree)) t)))))
+ (cdr group)))
+ (waiting-talks (seq-find (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC")) talks)))
+ (when talks
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "checkin-at-conf"))
+ (car group)
+ (list
+ :year emacsconf-year
+ :base-url emacsconf-base-url
+ :conf-name emacsconf-name
+ :email (plist-get (car talks) :email)
+ :emergency emacsconf-emergency-contact
+ :plural (if (> (length (cdr group)) 1) "s" "")
+ :speakers-short (plist-get (car talks) :speakers-short)
+ :url (mapconcat (lambda (o) (concat emacsconf-base-url (plist-get o :url)))
+ talks" , ")
+ :waiting
+ (cond
+ ((> (length waiting-talks) 1)
+ " If you can upload your talk videos before the conference, I think that might be much less stressful for everyone than doing it live. =) Please note that we will turn off the web-based upload on Dec 1 to free up memory on the server, so please upload them as early as you can.${wrap}")
+ ((= (length waiting-talks) 1)
+ " If you can upload your talk video before the conference, I think that might be much less stressful for everyone than doing it live. =) Please note that we will turn off the web-based upload on Dec 1 to free up memory on the server, so please upload it as early as you can.${wrap}")
+ (t ""))
+ :checkin-info
+ (mapconcat
+ (lambda (o)
+ (let ((base-checkin (format-time-string "%b %-d %-l:%M %p" (plist-get o :checkin-time) emacsconf-timezone))
+ (speaker-checkin (format-time-string "%b %-d %-l:%M %p" (plist-get o :checkin-time) (plist-get o :timezone))))
+ (emacsconf-replace-plist-in-string
+ (append (list :base-url emacsconf-base-url
+ :check-in
+ (concat
+ "Before "
+ base-checkin " in " emacsconf-timezone
+ (if (string= base-checkin speaker-checkin)
+ ""
+ (concat
+ ", which is the same as " speaker-checkin " in " (plist-get o :timezone))) "\n"
+ " (this is " (plist-get o :checkin-label) ")")
+ :qa-info-speakers
+ (cond
+ ;; aaaaah, no prerec yet
+ ((string= (plist-get o :status) "WAITING_FOR_PREREC")
+ (concat "Talk and Q&A BigBlueButton room: " (plist-get o :bbb-room)))
+ ((null (plist-get o :q-and-a)) "")
+ ((string-match "live" (plist-get o :q-and-a)) (concat "Q&A BigBlueButton room: " (plist-get o :bbb-room)))
+ ((string-match "irc" (plist-get o :q-and-a)) (concat "Q&A: " (plist-get o :channel) " (" (plist-get o :webchat-url) ")"))
+ ((string-match "pad" (plist-get o :q-and-a)) "Q&A: On the pad")
+ (t "Q&A: After the event")))
+ o)
+ "- ${title}
+ Info and sched: ${base-url}${url}
+ Check-in: ${check-in}
+ Pad: ${pad-url}
+ ${qa-info-speakers}")))
+ talks "\n\n")))
+ (mapc (lambda (o)
+ (emacsconf-mail-log-message-when-sent o "Sent checkin instructions"))
+ talks))))
+
+
+#### E-mail for speakers who are planning to be at the conference
+
+Hello, ${speakers-short}!
+
+We&rsquo;re looking forward to having you join us at EmacsConf!
+
+We&rsquo;ve updated the schedule based on the submissions and cancellations,
+and we&rsquo;ll probably update the schedule even on the day of the
+conference. You can get a rough idea of your schedule on your talk
+page${plural}. You might want to check your talk page${plural} some time next
+week to get a rough sense of where it is, and then check it again on
+the day of your talk${plural}. Please let me know if the times don&rsquo;t
+work for you.
+
+We&rsquo;ll try our best to keep your talk in the same general timeslot (ex:
+Saturday morning, Saturday afternoon, Sunday morning, Sunday
+afternoon). We&rsquo;ve done some dry-runs, but just in case it turns out
+that running two tracks at the same time leaves us too frazzled, we
+may drop back to one track with Q&A on an alternate stream, like last
+year. If there are big changes to your schedule on the day of your
+talk${plural}, you&rsquo;ll get an e-mail from us with a subject like
+&ldquo;URGENT: EmacsConf 2022: &#x2026;&rdquo;.${wrap}
+
+Here&rsquo;s your talk page URL and checkin information:
+
+${checkin-info}
+
+Please check in early so that we can deal with scheduling changes or
+technical issues, and so that we don&rsquo;t worry too much about whether
+you&rsquo;ll be ready to go for Q&A. =) You can find the check-in process at
+${base-url}${year}/speakers/ .${waiting}
+
+If something comes up, please let us know as soon as you can. Here&rsquo;s
+my emergency contact information: ${emergency}
+
+Thank you for sharing your time and energy with the EmacsConf community!
+
+Sacha
+
+p.s. If you need to cancel, that&rsquo;s okay too, life happens. Let me know
+as soon as you can and I&rsquo;ll try to shuffle things around. Thank you!
+
+
+#### E-mail for speakers who are not planning to be around, but who have sent us their prerecs
+
+Hello, ${name}!
+
+Thank you so much for contributing a talk for EmacsConf ${year}! We&rsquo;re
+looking forward to collecting questions and forwarding them to you by
+e-mail after the conference. We&rsquo;ll also post the prerecording at the
+time that it gets streamed, so people will be able to access it at
+${url} once it has gone live.
+
+If it turns out that you can make it to the conference after all, feel
+free to drop us a line at #emacsconf-org and we&rsquo;ll let people know
+you&rsquo;re around. You can find the check-in process at
+<https://emacsconf.org/${year}/speakers/> .
+
+Thank you again for being part of EmacsConf ${year}!
+
+Sacha
+
+
+### CANCELLED Draft e-mail to send speakers who may need to do it live
+
+
+### DONE Make sure IRC talks get BBB checkin information if they need to do it live :mail:
+
+survey, orgyear, lspbridge, eev, python
+
+
+<a id="one-track"></a>
+
+## Plan in-case-of-emergency schedule for dropping back to one track after Saturday morning :sachac:derisk:
+
+We might be able to do it on a modular basis (Saturday afternoon, Sunday morning, or Sunday afternoon).
+We need a quick way to notify the affected speakers, and we should give them a heads-up as well.
+We also need a quick way to update the schedule.
+
+
+### DONE Update conf.org and the wiki based on the selected emergency schedule
+
+
+### DONE Give speakers a heads-up regarding schedule tweaks and the potential for bigger schedule changes
+
+
+### DONE Draft the code for mailing all the affected speakers
+
+
+### Saturday afternoon
+
+- ![img](emergency-back-to-one-sat-pm.svg)
+
+
+### Sunday morning
+
+- rms: Ends at 12:15 after 12:00
+- ![img](emergency-back-to-one-sun-am.svg)
+
+
+### Sunday afternoon
+
+- ![img](emergency-back-to-one-sun-pm.svg)
+
+
+### DONE Get the emergency schedule sorted out so that we can easily switch to it
+
+To change, set emacsconf-schedule-apply to t
+M-x emacsconf-update-schedule
+Commit the wiki and push it
+Draft the e-mail for emergency schedule
+
+
+### DONE Draft e-mail for emergency schedule
+
+ (defun emacsconf-mail-emergency-update (group &optional template)
+ "Send emergency schedule update.
+ GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (setq template (or template (emacsconf-mail-merge-get-template "emergency")))
+ (emacsconf-mail-prepare
+ template
+ (car group)
+ (list
+ :urls (mapconcat (lambda (o) (plist-get o :absolute-url)) (cdr group) " , ")
+ :emergency emacsconf-emergency-contact
+ :conf-name emacsconf-name
+ :year emacsconf-year
+ :email (plist-get (cadr group) :email)
+ :plural (if (= (length (cdr group)) 1) "" "s")
+ :schedule
+ (mapconcat
+ (lambda (o)
+ (concat "Talk: " (plist-get o :title) "\n"
+ "URL: " (plist-get o :absolute-url) "\n"
+ "New start of talk: "
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ emacsconf-timezone)
+ "\n"
+ (if (string= emacsconf-timezone (plist-get o :timezone))
+ ""
+ (concat
+ "which is the same as "
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ (plist-get o :timezone))))))
+ (cdr group)
+ "\n\n"))))
+
+
+#### Template
+
+Sorry about the last-minute change. We needed to update the schedule
+because two tracks turned out to be too much for us to handle at the
+moment. The new schedule will play all the talks on one stream, and
+the other stream will handle Q&A.
+
+Here&rsquo;s a copy of the updated schedule for your convenience:
+${schedule}
+
+Please check in at least 30 minutes before your talk (or 60 minutes if
+you&rsquo;re going to do it live). <https://emacsconf.org/2022/speakers/> has
+more details.
+
+You can also find the new schedule at the page URL${plural} above.
+Please let me know if you can&rsquo;t make it. We can collect the questions
+and you can follow up afterwards. You can reach me by e-mail or in
+\#emacsconf-org on IRC, or with this emergency contact info:
+${emergency}
+
+Thank you for your patience!
+
+Sacha
+
+
+## DONE Manage front0 and live0 size :bandali:
+
+
+### DONE Resize front0 and live0 in the Linode administration console :bandali:
+
+[20:23:48] <bandali> aha okay thanks. yeah i think i&rsquo;ll do at least 8gb or 16gb for front0, maybe even one or two larger
+[20:24:19] <bandali> and for live0 probably the same as last year, maybe slightly larger
+
+
+### CANCELLED Check fps after resize :sachac:
+
+
+### DONE Back up dumps from live0
+
+media.emacsconf.org:~/emacsconf-2021-stream-dumps/
+res.emacsconf.org:/data/emacsconf/2021/dumps/
+
+Now there should be more space in case we want to enable dumping before the resize
+
+
+### DONE Update ansible configuration :sachac:
+
+Waiting for resize
+Clean up the media root
+
+in all.yml
+
+test\_mode: false
+
+then
+
+ansible-playbook -i inventory.yml prod-playbook.yml &#x2013;tags media
+ansible-playbook -i inventory.yml prod-playbook.yml &#x2013;tags stream
+ansible-playbook -i inventory.yml prod-playbook.yml &#x2013;tags publish
+
+Confirm that
+
+- icecast dumps recordings
+- <https://media.emacsconf.org/2022> is unprotected
+- <https://media.emacsconf.org/2022/backstage> is protected
+
+
+<a id="comms"></a>
+
+# Communications
+
+
+## DONE Ask emacsconf-org-private for feedback on early submissions
+
+The EmacsConf 2022 CFP was extended to Sept 30 with notifications to
+go out on Oct 15. We&rsquo;ve got plenty of submissions and with any luck,
+you&rsquo;ve been reviewing them as they come in (assuming you have access to
+emacsconf-submit@).
+
+As a courtesy to people who got their stuff together in a timely manner
+and to give them extra time to prepare a prerecorded talk (which might
+also translate into extra time for us to process and caption the talks),
+I&rsquo;d like to send acceptances and tentative time allotments by Sept 30.
+I plan to offer a max of 20 minutes with a note that additional time may
+be available for Q&A depending on how many additional submissions we get.
+
+Could everyone who wants a say in the program please add comments to
+$url by ****Sept 26**** so that we can send out early acceptances? In
+general, we try to say yes to everything, so here&rsquo;s your chance to
+raise any red flags or suggest ways to make things even better.
+Thanks!
+
+Sacha
+
+
+<a id="acceptance"></a>
+
+## DONE Acceptance :sachac:
+
+We can accept early or send people a note saying notification of acceptance will be on Oct 15, because of the extended CFP.
+Right before this e-mail:
+
+- Publish the wiki pages
+
+Objectives for this e-mail:
+
+- Notify people of acceptance
+- Tell them the number of minutes to plan for\* (might get more)
+- Tell them about the target date
+- Get them to reply
+- Ask for public contact information or any changes to the wiki page
+
+
+ (defun emacsconf-draft-acceptance-for-email-group (group &optional template)
+ "GROUP is (email . (talk talk))."
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (let* ((template (or template (emacsconf-mail-merge-get-template "acceptance")))
+ (talks (cdr group))
+ (first (car talks))
+ (reply-by-date (date-to-time "2022-10-08"))
+ (prerec-target (date-to-time "2022-11-04"))
+ (attrs `(:speakers-short
+ ,(plist-get first :speakers-short)
+ :plural
+ ,(if (= (length talks) 1) "" "s")
+ :email
+ ,(plist-get first :email)
+ :year
+ ,(or (plist-get first :year) emacsconf-year)
+ :reply-date
+ ,(format-time-string "%b %-e (%a)" reply-by-date)
+ :titles
+ ,(mapconcat (lambda (o) (format "\"%s\" (%s)"
+ (plist-get o :title)
+ (plist-get o :slug)))
+ talks " and ")
+ :prerec-target
+ ,(format-time-string "%b %-e (%a)" prerec-target)
+ :page-urls
+ ,(mapconcat (lambda (o) (concat "- " (plist-get o :url)))
+ talks "\n")
+ :irc
+ ,(if (plist-get first :irc) (concat (plist-get first :irc) "? ") "")
+ :acceptance-tasks
+ ,(concat
+ "* TODO Reply to acceptance e-mail in order to confirm e-mail communication :emacsconf:
+ DEADLINE: " (format-time-string "<%Y-%m-%d %a>" reply-by-date) "\n Please include any extra information you want (ex: public e-mail, IRC nick) on\n"
+ (mapconcat (lambda (o) (concat " " (plist-get o :url)))
+ talks "\n") "\n"
+ (mapconcat (lambda (o) (format "* TODO Record %s-minute talk for \"%s\" (%s) :emacsconf:
+ DEADLINE: %s\n https://emacsconf.org/%s/prepare/"
+ (plist-get o :time)
+ (plist-get o :title)
+ (plist-get o :slug)
+ (format-time-string "<%Y-%m-%d %a>" prerec-target)
+ (plist-get o :year)))
+ talks "\n"))
+ :talk-details-and-comments
+ ,(mapconcat
+ (lambda (o)
+ (format "%s minutes: %s\n%s\n\n%s"
+ (plist-get o :time)
+ (plist-get o :title)
+ (plist-get o :url)
+ (string-fill (emacsconf-replace-plist-in-string
+ (append o
+ (list
+ :prerec-target (format-time-string "%b %-e" prerec-target)))
+ (plist-get o :acceptance-comment)) 72)))
+ talks "\n---------------------------------------------------------------------\n"))))
+ (emacsconf-mail-prepare template (car group) attrs)))
+
+ (defun emacsconf-draft-all-acceptances ()
+ (interactive)
+ (let* ((emacsconf-talk-info-functions (append emacsconf-talk-info-functions '(emacsconf-get-talk-comments-from-subtree)))
+ (info (seq-filter (lambda (o) (string= (plist-get o :status) "TO_ACCEPT"))
+ (emacsconf-filter-talks (emacsconf-get-talk-info))))
+ (grouped (seq-group-by (lambda (o) (plist-get o :email)) info))
+ (template (emacsconf-mail-merge-get-template "acceptance")))
+ (mapc (lambda (group)
+ (emacsconf-draft-acceptance-for-email-group group template))
+ grouped)))
+
+
+### Speaker acceptance
+
+Hi, ${speakers-short}!
+
+Summary:
+,${acceptance-tasks}
+
+We&rsquo;ve accepted your EmacsConf proposal${plural} for ${titles}! Thanks
+for volunteering to share what you&rsquo;re learning about. I know it takes
+a fair bit of work to prepare a presentation, so I appreciate that
+you&rsquo;re taking the time to show what&rsquo;s possible with Emacs and
+encourage people to learn more.
+
+---
+
+${talk-details-and-comments}
+
+---
+
+You&rsquo;ll have some time after your talk${plural} for Q&A, so the allocated time
+can be just for your pre-recorded talk${plural}. Of course, if you like, you
+can make it shorter.
+
+We&rsquo;ve posted preparation tips at <https://emacsconf.org/${year}/prepare/> .
+We&rsquo;ll send you instructions on how to upload files once we get that
+set up.
+
+Could you please plan to ****put your pre-rec${plural} together by
+${prerec-target}**** (or even earlier if you want)? We&rsquo;re going to try
+to caption as many talks as possible again this year, and extra time
+helps a lot. People found the captions really helpful while watching
+the stream, and sending your talk in early will make it more likely
+that we&rsquo;ll be able to get your captions edited and reviewed before the
+conference.
+
+****Please reply to this e-mail by ${reply-date}**** (doublechecking that
+emacsconf-submit@gnu.org is in the To: or Cc:) so that we can confirm
+that we&rsquo;ve got the right email address for you and that messages can
+get properly delivered. Also, would you like us to put ${email} as the
+public contact information for you, or would you like us to add
+something else to the talk page${plural}?
+
+${page-urls}
+
+If you have any questions, please e-mail us at
+emacsconf-submit@gnu.org or pass by the #emacsconf-org IRC channel on
+irc.libera.chat (Web-based: <https://chat.emacsconf.org/#/connect>).
+
+Thank you so much!
+
+Sacha Chua
+
+
+## Future
+
+
+### Captions for approval
+
+
+#### Template
+
+Hi ${speakers-short}!
+
+Because you sent in your video before the conference, we were able to
+caption it so that more people can find and enjoy your talk.
+${captioner-volunteered} I&rsquo;ve attached the caption text file in case
+you want to review it, suggest any corrections, or use the text in a
+blog post or elsewhere. You can look at the attached file or watch
+your video with closed captions at ${url} . I&rsquo;ve also included the
+captions at the end of this e-mail for your convenience.${wrap}
+
+${chapters-note}${intro-note}Do you have a bio or social/donation links you&rsquo;d like us
+to add to the wiki page for your talk?
+
+Thanks again for your contribution!
+
+${captioner-thanks}Sacha
+
+${captions}
+
+
+### Speakers we haven&rsquo;t confirmed e-mail communications with
+
+Hi, ${name}!
+
+I think we haven&rsquo;t heard from you since we accepted your EmacsConf
+${year} proposal for "${title}&ldquo;. EmacsConf coming up soon, so I wanted
+to check in with you to see how you&rsquo;re doing.
+
+Could you please e-mail us to let us know if you&rsquo;re still working on
+your prerecorded video, if you&rsquo;re planning to present live, or if you
+can&rsquo;t make it this year? No worries if other priorities have come up
+and you don&rsquo;t have the time for a presentation.
+
+If you&rsquo;ve been working on a presentation, fantastic! When you&rsquo;re
+ready, you can upload it following the instructions at
+<https://emacsconf.org/${year}/prepare/> (ideally before ${prerec-date} so
+that we have time to download it, doublecheck, etc.).
+
+If you plan to present live, please go through the self-check at
+<https://test.bigbluebutton.org/> . Some speakers have encountered
+technical issues with BigBlueButton that they didn&rsquo;t have with Zoom or
+Google Meet, so this is something we definitely want to look into
+earlier rather than later. If that works for you, please e-mail us
+back so that I can keep your timeslot. The tentative schedule for your
+talk is on the talk page at ${url} .
+
+**Please e-mail us your plans before ${date}.** I&rsquo;m
+planning to shift the schedule around to give more time to confirmed
+speakers for Q&A and possibly live demos. If I don&rsquo;t hear from you by
+then (maybe an over-enthusiastic spam filter has been swallowing up
+all our mail?), I&rsquo;ll probably reallocate the ${time} minutes that had
+been set aside for your talk. We might be able to squeeze it back in
+afterwards or play a video from you at the end of the conference day,
+but it would be nice to get the schedule sorted out instead of
+scrambling to fill gaps on the day of the conference.
+
+Hope to hear from you by ${date}!
+
+Sacha Chua
+
+(Please use Reply to All to keep emacsconf-submit@gnu.org in the loop. Thanks!)
+
+
+### Speakers who are missing prerecs
+
+ (let ((template (conf-mail-merge-get-template "missing")))
+ (seq-map
+ (lambda (info)
+ (compose-mail (plist-get info :email)
+ (conf-replace-plist-in-string info (plist-get template :subject))
+ `(("Reply-To" . ,(plist-get template :reply-to))
+ ("Mail-Followup-To" . ,(plist-get template :mail-followup-to))
+ ("Cc" . ,(plist-get template :cc))))
+ (message-goto-body)
+ (insert (conf-replace-plist-in-string info (plist-get template :body)))
+ (plist-get info :email))
+ (mapcar 'cadr
+ (seq-group-by (lambda (o) (plist-get o :email))
+ (seq-filter (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC"))
+ (conf-get-talk-info))))))
+
+
+#### Template
+
+Hi ${speakers},
+
+EmacsConf is in a few days and I don&rsquo;t think we have your prerecorded
+video yet, so I&rsquo;m getting miiiildly stressed about the schedule. And
+you&rsquo;re probably stressing out about it too, so let&rsquo;s go figure out how
+we can make this work.
+
+Option A: If you happen to have the prerecording or can get it done by
+tomorrow, we can probably squeeze it in. Please upload it to
+ftp-upload.emacsconf.org by following the instructions in
+<https://emacsconf.org/${year}/prepare#ftp-upload> , or send us a link using
+your favourite file-sharing service (especially if FTP is giving you
+problems).
+
+Option B: If you want to present live, it might be an option. I&rsquo;m a little
+worried about the potential for technical issues, since we&rsquo;ve had
+problems with that in previous EmacsConfs. The tight schedule means
+there&rsquo;s not a lot of time to figure things out, and it can be hard to
+make something as focused as a prerecorded video when you&rsquo;re doing it
+live. We will definitely want to make sure that:
+
+- your self-serve tech check works: <https://test.bigbluebutton.org>
+ at your convenience;
+- you check in as early as possible (at least 1 hour before, so we
+ know if the speaker before you needs to extend) and let us know
+ that you want to do it live <https://emacsconf.org/${year}/speakers> .
+ We keep adapting the schedule as things come up, so please check
+ <https://emacsconf.org/${year}/schedule/> on the day of the conference.
+
+If there are technical issues or your talk runs a little over time, we
+might have to stop streaming it on the main stream when it&rsquo;s time for
+the next talk. We may be able to continue streaming it on the
+alternate stream. If so, people can continue watching it there if they
+wish to.
+
+Option C: If you can&rsquo;t make it, that&rsquo;s okay. Life gets crazy
+sometimes. Please let us know and we can update the wiki. If you
+happen to be able to make a prerecorded video afterwards, we can add
+that to the wiki, playlists, and announcements. We hope you can join
+us next year.
+
+Since EmacsConf is **this weekend** (aaaaaaah), please let us know by
+tomorrow noon EST (Friday; 9AM PST, 5PM GMT, 6PM CET) so that we can
+keep the time allocated for you in the schedule. If we don&rsquo;t hear from
+you, we&rsquo;ll probably reallocate the ${time} minutes reserved for you so
+that other talks can have longer Q&A. If you can still make it, check
+in early and let us know so that we can try to work out an alternate
+stream for you. Hope to hear from you soon!
+
+Sacha
+
+
+### Last email before the conference
+
+> Friends, emacsians, hackers, lend me your ears!
+>
+> This is it, the final stretch until the next EmacsConf. A couple of weeks
+> ago, we’ve shared our program with you; now, it is time for us to share our
+> schedule, i.e. when the talks will happen!
+>
+> You can find it on our wiki:
+> <https://emacsconf.org/$year/schedule/>
+>
+> All the times on the program are listed in EST (UTC-5). If a talk catches
+> your eye, we invite you to click on its title to find out at what time it will
+> be broadcast in your local time. Also, if the talk is pre-recorded, it will
+> also be the time at which the talk will be made available on the same page.
+
+
+### Thank you, next steps
+
+
+#### Code
+
+ (defun conf-mail-thanks-after-conference ()
+ (interactive)
+ (let* ((template (conf-mail-merge-get-template "speaker-thanks"))
+ (info (conf-get-talk-info-for-subtree)))
+ (compose-mail (plist-get info :email)
+ (conf-replace-plist-in-string
+ info (plist-get template :subject)))
+ (message-goto-body)
+ (save-excursion
+ (insert
+ (string-trim
+ (conf-replace-plist-in-string
+ (append
+ (list :subtitle-note
+ (if (file-exists-p (expand-file-name (format "%s/captions/%s--main.vtt"
+ (plist-get info :year)
+ (plist-get info :video-slug)) conf-directory))
+ "You can add the subtitles by downloading them from the talk page and uploading them to your video. "
+ "We didn't quite manage to squeeze in captions for your talk during the conference, but we'll work on those soon.")
+ :qa-note
+ (if (plist-get info :qa-public)
+ "The recording of your Q&A session is also on the talk page. "
+ "")
+ )
+ info)
+ (plist-get template :body)))))))
+
+
+#### Text
+
+Hi ${speakers-short}!
+
+Thank you so much for being part of EmacsConf ${year}! Hundreds of people
+enjoyed it, and I&rsquo;m sure even more will come across the videos in the
+days to follow.
+
+Your prerecorded video is available on the talk page at ${url} , and
+we&rsquo;ve added the questions and comments that we&rsquo;ve collected from
+IRC/BBB/Etherpad. ${qa-note}
+
+We&rsquo;ve also uploaded your talk video to ToobNix (a PeerTube
+instance) at ${toobnix-url} and YouTube at ${youtube-url} . If you
+want to reupload the video to your own channel, feel free to do so.
+${subtitle-note} If you let me know where you&rsquo;ve uploaded
+it, I can switch our playlist to include your version of the video
+instead. That way, it might be easier for you to respond to comments
+on videos.
+
+If you would like to share more resources, you can add them to the
+talk page or e-mail them to us and we can add them for you.
+
+Thanks again for speaking at EmacsConf!
+
+Sacha
+
+
+## Archive
+
+
+### DONE Second announcement: CFP
+
+Dear fellow Emacsians,
+
+This is the second and final Call for Participation for EmacsConf 2022
+now extended until September 30, and the conference itself planned for
+December 3 and 4 (Sat-Sun). Please see the CFP below for details on
+how to send in your proposal(s), or chat with us about them and about
+other ways of participating and volunteering around EmacsConf via our
+main IRC channel #emacsconf on the Libera.Chat network.
+
+If you&rsquo;re considering submitting a proposal but think the remaining
+time may not be enough, please reach out to me off-list as soon as
+possible so we could work something out.
+
+I&rsquo;ll close this portion of the email with a thank you to all of the
+folks who have submitted session proposals or expressed interest in
+volunteering with EmacsConf. We look forward to reading and reviewing
+all of your messages and proposals, and getting back to you about them
+and about the next steps soon. :-)
+
+Best,
+amin
+
+P.S. please direct any replies to this post either to myself or to the
+emacsconf-discuss list, so as to help avoid generating extra off-topic
+chatter in the other lists cc&rsquo;d on this message. Thank you.
+
+
+### DONE First announcement: CFP
+
+Dear fellow Emacsians,
+
+We are excitedly calling for your participation for EmacsConf 2022,
+planned for December 3 and 4, 2022 (Sat-Sun)! The CFP will be open
+until September 18. Please see below for details on how to send in
+your proposal(s), or chat with us about them and about other ways of
+participating and volunteering around EmacsConf via our main IRC
+channel #emacsconf on the Libera.Chat network.
+
+As an entirely volunteer-run conference we are always looking for more
+volunteers and organizers to help with various aspects of organizing
+and running the conference, including reviewing session proposals and
+streaming parallel tracks. To get involved, please come by our IRC
+channel or one of our public mailing lists (see below) and introduce
+yourself and tell us about your interests, or contact myself or one of
+the other organizers directly if you&rsquo;re feeling a bit shy; we hope to
+hear from you! :)
+
+Best,
+amin
+
+P.S. please direct any replies for this message either to me or to the
+emacsconf-discuss list, so as to help avoid generating extra off-topic
+chatter in the other lists Cc&rsquo;d on this message. Thank you.
+
+
+<a id="code"></a>
+
+# Supporting code
+
+
+## General
+
+ (defvar emacsconf-danger-allow-dangerous-stuff nil
+ "When non-nil, trade safety for convenience.")
+
+ (defvar emacsconf-danger-asked nil
+ "When non-nil, user has already been asked for security trade-off.")
+
+ (defun emacsconf-danger--ask (forms)
+ "Ask to run dangerous FORMS.
+ Return t if the answer is “yes”."
+ (when (y-or-n-p (format "FORMS:\n%s\n\nThis is dangerous. Run anyway? "
+ (prin1-to-string forms)))
+ (unless emacsconf-danger-asked
+ (if (y-or-n-p "Would you like to trade security for convenience for the rest of the session? ")
+ (setq-local emacsconf-danger-allow-dangerous-stuff t)
+ (setq-local emacsconf-danger-asked t)))
+ t))
+
+ (defmacro emacsconf-danger--shield (error &rest forms)
+ "Protect user from dangerous FORMS.
+ Throw an error if ERROR is non-nil, skip otherwise."
+ `(let ((shield (not (or emacsconf-danger-allow-dangerous-stuff
+ (emacsconf-danger--ask ',@forms)))))
+ (if shield
+ ,(when error
+ '(user-error "Dangerous action cancelled by user"))
+ ,@forms)))
+
+ (defmacro emacsconf-danger-shield (&rest forms)
+ "Protect user from dangerous FORMS by throwing an ERROR."
+ `(emacsconf-danger--shield t ,@forms))
+
+ (defmacro emacsconf-danger-skip (&rest forms)
+ "Protect user from dangerous FORMS by skipping them."
+ `(emacsconf-danger--shield nil ,@forms))
+
+ ;; Make it easy to jump and refile
+ (setq-local org-refile-targets '((nil . (:maxlevel . 5))))
+
+ (message "General setup has been loaded")
+
+ (emacsconf-danger-shield
+ (setq-local org-confirm-babel-evaluate nil
+ org-confirm-elisp-link-function nil))
+ (message "No longer asking for confirmation in this buffer")
+
+ (setq-local emacsconf-danger-allow-dangerous-stuff t)
+ (org-babel-ref-resolve "elisp-no-confirmation()")
+
+ (message "Now allowing dangerous stuff. Buckle up, buckaroo!")
+
+ (kill-local-variable 'emacsconf-danger-allow-dangerous-stuff)
+ (kill-local-variable 'emacsconf-danger-asked)
+ (kill-local-variable 'org-confirm-babel-evaluate)
+ (kill-local-variable 'org-confirm-elisp-link-function)
+ (kill-local-variable 'org-refile-targets)
+
+ (message "Back to safety. Phew!")
+
+
+## Prerecs
+
+
+### Receive notification when new prerecs are available
+
+ #!/usr/bin/env sh
+
+ set -eu
+
+ sleep_duration=600
+
+ data="$(basename "$0" ".sh").data"
+
+ plural () {
+ if [ "$2" = 1 ] || [ "$2" = -1 ]; then
+ echo "${1}"
+ else
+ case $1 in
+ "is" )
+ echo "are"
+ ;;
+ * )
+ echo "${1}s"
+ esac
+ fi
+ }
+
+ current_time() {
+ date +"[%T]"
+ }
+
+ log() {
+ printf "%s $1\n" "$(current_time)"
+ }
+
+ color_green="\e[32m"
+ color_white="\e[0m"
+
+ log2() {
+ log "${color_green}$1${color_white}"
+ }
+
+ notify() {
+ log2 "$1"
+ notify-send -t 0 "EmacsConf" "$(log "$1")"
+ }
+
+ _sleep() {
+ log "Checking again in ${sleep_duration}s"
+ sleep "$sleep_duration"
+ }
+
+ fetch() {
+ TERM=xterm ssh orga@media.emacsconf.org -- ls -1 /srv/upload | wc -l
+ }
+
+ clean() {
+ rm -f "$data"
+ log "Data file has been cleaned"
+ }
+
+ if [ "$#" -gt 0 ]; then
+ command="$1"
+ if [ "$command" = "clean" ]; then
+ clean
+ exit 0
+ fi
+
+ if [ "$command" = "clean-start" ]; then
+ clean
+ fi
+ fi
+
+ touch "$data"
+
+ log2 "Currently waiting for prerec"
+
+ while true; do
+ prerecs_number_past=$(cat "$data")
+ diff=0
+
+ while true; do
+ log "Checking..."
+ prerecs_number_current="$(fetch)"
+ diff=$((prerecs_number_current - prerecs_number_past))
+ if [ $diff -gt 0 ]; then
+ break
+ fi
+ log "No new prerec"
+ _sleep
+ done
+
+ notify "$diff new $(plural "prerec" $diff) $(plural "is" $diff) available!"
+
+ echo "$prerecs_number_current" > "$data"
+
+ _sleep
+ done
+
+
+### Fetch upload data
+
+ #!/usr/bin/env sh
+
+ set -eu
+
+ current_time() {
+ date +"[%T]"
+ }
+
+ log() {
+ printf "%s $1\n" "$(current_time)"
+ }
+
+ if [ -t 0 ]; then
+ log "Fetching data..."
+ fi
+
+ TERM=xterm ssh orga@media.emacsconf.org -- cat /srv/upload/*/*json
+
+
+### Fetch new talk data formatted
+
+ #!/usr/bin/env sh
+
+ set -eu
+
+ echo "Fetching data..."
+ data_raw="$(./fetch-upload-data.sh)"
+
+ echo
+
+ echo "$data_raw" | awk "$(cat << EOF
+ func dewrap(a) {gsub(/^ *".*": "|",$/, "", a); return a};
+ BEGIN {i=0};
+ /^ "sid"/ { a[0] = dewrap(\$0); };
+ /^ "name"/ { a[2] = sprintf("%s\t", dewrap(\$0)) };
+ /^ "comment"/ { a[3] = sprintf("%s\t", dewrap(\$0)); if (a[3] == "\t"){a[3] = "No comment"} };
+ /^ "key"/ { a[1] = dewrap(\$0); };
+ /^\}/ { printf "[%d]\t%s\t%s\t%s\n\t%s\n\n", i, a[0], a[1], a[2], a[3]; i=i+1};
+ EOF
+ )"
+
+
+## Publish this page
+
+ (defun emacsconf-org-publish-this-page ()
+ (interactive)
+ (org-md-export-to-markdown)
+ (org-babel-tangle)
+ (magit-stage-modified)
+ (magit-commit-create (list "-m" (read-string "Commit message: ")))
+ (call-interactively #'magit-push-current-to-pushremote))
+
+
+### Export to markdown
+
+ (defun emacsconf-export-md-on-save ()
+ "Export markdown on save.
+ Meant to be used with `after-save-hook'."
+ (org-md-export-to-markdown)
+ (org-babel-tangle))
+
+ (defvar emacsconf-export-md-on-save-configured t
+ "Non-nil when the setup code-block has been executed.")
+
+ (unless (bound-and-true-p emacsconf-export-md-on-save-configured)
+ (org-babel-ref-resolve "md-export-on-save-setup()"))
+
+ (add-hook 'after-save-hook #'emacsconf-export-md-on-save nil t)
+
+ (when (memq #'emacsconf-export-md-on-save after-save-hook)
+ (message "Hook is active"))
+
+ (remove-hook 'after-save-hook #'emacsconf-export-md-on-save t)
+
+ (unless (memq #'emacsconf-export-md-on-save after-save-hook)
+ (message "Hook is no longer active"))
+
+
+## Tangle and publish on save
+
+ (defun emacsconf-export-md-on-save ()
+ "Export markdown on save.
+ Meant to be used with `after-save-hook'."
+ (org-md-export-to-markdown)
+ (org-babel-tangle))
+
+ (defvar emacsconf-export-md-on-save-configured t
+ "Non-nil when the setup code-block has been executed.")
+
+ (unless (bound-and-true-p emacsconf-export-md-on-save-configured)
+ (org-babel-ref-resolve "md-export-on-save-setup()"))
+
+ (add-hook 'after-save-hook #'emacsconf-export-md-on-save nil t)
+
+ (when (memq #'emacsconf-export-md-on-save after-save-hook)
+ (message "Hook is active"))
+
+ (remove-hook 'after-save-hook #'emacsconf-export-md-on-save t)
+
+ (unless (memq #'emacsconf-export-md-on-save after-save-hook)
+ (message "Hook is no longer active"))
+
+
+## Review agenda
+
+ (defcustom emacsconf-org-tag nil "Tag for your nick, for easier agenda filtering"
+ :group 'emacsconf
+ :type 'string)
+
+ (defun emacsconf-show-my-agenda ()
+ (interactive)
+ (let* ((org-agenda-files (list (buffer-file-name)))
+ (tag-filter (if emacsconf-org-tag (concat "+" emacsconf-org-tag) ""))
+ (org-agenda-tag-filter-preset (list (when emacsconf-org-tag (concat "+" emacsconf-org-tag))))
+ (org-agenda-custom-commands `(("a" "Agenda"
+ ((agenda ,tag-filter)
+ (tags-todo ,(concat tag-filter "-SCHEDULED={.+}-DEADLINE={.+}")))
+ ((org-agenda-span 14))))))
+ (org-agenda nil "a")))
+
+
+## Process review comments from pad
+
+see emacsconf-import-comments-from-etherpad-text
+
+
+<a id="lessons"></a>
+
+# Lessons learned
+
+
+## From previous years
+
+- [X] Shorter CFP, longer recording time
+- [X] Ask for talk title to be subject in submission
+- [X] Fresh eyes can doublecheck that all the talks are included and that availability properties have been set/followed
+- [X] Putting ‘availability’ towards the top of the submission template would make it harder for us to miss it during reviews, and it shouldn’t change anything for speakers.
+- [X] All the personalised messages we’ve sent during the scheduling campaign should probably be kept in a repo so that it’s less work for those who will be in charge of it next.
+- [X] Since people kept running into ftp problems, we might want to set up a web-frontend next year to minimise problems.
+- [X] Might be a good idea to avoid Thanksgiving weekend, as lots of people travel then
+- [X] Tech-checks haven’t been really popular this year, but there are so many ways we could make them more useful. On the <span class="timestamp-wrapper"><span class="timestamp">[2021-11-16 Tue]</span></span>, 10 days prior the conf, we thought that it could be nice to use them as recording sessions for late-prerecs, and that’s only one example.
+- [X] Having the NO\_NEWS / WAITING\_FOR\_PREREC contrast from the start of `conf.org` might have made it easier for us to ping speakers who were late to the party this year. Rather than sending the personalised 10 days prior to the conference, we might have sent it a week after the submission of the anticipated scheduled (where we ask speakers if their allocated time is okay, based on their availability).
+- [X] Move first dry run earlier (maybe one month before?) to give us more time for process tweaks
+- [ ] Dropping talks one week before the conf might allow us to have a near-fixed schedule to announce early.
+ - or we can plan for live or gaps, that&rsquo;s cool too
+- [ ] CRM
+ - [ ] zaeph: Implementing a variable for `automatic-emails` would make it easier to suppress user-hooks for message-mode
+ - [ ]zaeph: Even though we’re sending emails automatically, we might want to keep trace of them in our `Sent` IMAP folder. notmuch does it with `Fcc:` in the header, so we might need a user-customisable var here as well.
+- [ ] less tiring lighting
+- [ ] split host and streamer?
+- [ ] Cram less with different tracks
+- [ ] Review pre-recs, even late submissions in their entirety to ensure no syncing issue
+- [ ] Tight opening-remarks, possible pre-rec.
+- [X] Asking pronunciation of name as soon as application with SA-cha CHEW-ah pattern would be good. Not a lot of diligence with it this year.
+- [ ] People need to specify their IRC handle on application (potentially forcing nick and/or first-name/last-name.
+ - suggested, but not everyone has IRC, so that&rsquo;s okay. We&rsquo;ll manage. Walk new speakers through it?
+- [ ] We might want to figure out an ffmpeg workflow for noise-suppressing on top of normalisation. Take inspiration from Audacity macros.
+- [ ] Having a more relaxed Saturday might give us time to adjust to tech-stack.
+- [X] Creating BBB rooms in anticipation and/or automatically, before or during, might make for smoother check-in; right now, people keep wanting to check in via email even though we told them to use chat
+ - One BBB room per talk
+- [ ] Pre-recs were a little blocky wrt encoding; we might want to bump the bitrate next year
+- [ ] we can see if bot + pads + merging will help next year, and we can also experiment with multiple streams if there are enough people to pull it off so that speakers don&rsquo;t feel like they&rsquo;ve just been dropped in a room and left to their own devices :)
+
+
+## Lessons learned for next year
+
+
+### CFP & Review period
+
+- Ask for public e-mail or contact information, IRC handle in CFP
+- Be even more stringent about the 10/20/40-min splits. A lot of
+ speakers still default to the 20- or 40-min formats without
+ providing us shorter formats, and that puts strain on our schedule
+ and requires us to use a different template for the notification
+ (which can be confusing). We need to stress that not respecting the
+ format makes it harder not only for the organizers, but also for the
+ speakers themselves (since they will have to rethink their
+ presentation). Maybe we can have an e-mail template for a quick
+ reply that says something like &ldquo;Just in case we need to squeeze
+ talks into shorter times, could you please also propose an outline
+ for a possible 10-minute talk that could get people interested in
+ your topic and point them to where they can find out more?&rdquo;
+- Two people is the sweet number of reviewers to have for the
+ proposals before sending the notifications, and there’d be
+ diminishing returns with more. Two is enough to release the pressure
+ on SCHED, verify the metadata (esp. speaker availability), and
+ suggest a different ordering where appropriate. It can take a long
+ time to comb through the proposals (roughly 10 proposals per hour),
+ and whilst it’d be difficult to justify more in-depth reviewers,
+ other orgas can do a shallow-pass to catch red-flags or discuss the
+ submissions as they come in. Other organizers can always chime in on
+ topics they particularly care about so that their encouraging
+ comments or suggestions can be included in the acceptance e-mail.
+- We extended CFP-end by two weeks this year, but that made it coincide
+ with speaker-notifs, and that’s awkward. Next time, we should only
+ extend the CFP by one week to avoid having to scramble with the
+ schedule until the very last day.
+- Some people assume that they have to suggest longer formats even if
+ they intend their talks to be 10′ or 20′. We should change the
+ wording on the CFP to ask them to only provide alternatives for
+ shorter formats, not longer.
+- It was hard to squeeze all the org/hyperbole talk on day-1.
+ Generally, the people who submit these kinds of talk come from all
+ over the world, and US mornings are more accommodating than US
+ evenings when it comes to timezones. We might consider having two org
+ **mornings** rather than an org **day**; it would give us more flexibility
+ with those talks.
+- We’re starting to reach critical mass on the org-talks. We might want
+ to consider splitting the org-talks and the dev-talks into two
+ distinct events to allow them to grow independently.
+- We should associate time-of-day with CFP-deadline; otherwise, the
+ scheduler has to be on edge until the very end of the day. It’s worse
+ this year because we made CFP-end coincide with speaker-notif, so this
+ might not be as much of a problem next year.
+- It’s easier for us to extend beyond 5pm than to go before 9am
+ (especially for the West coast). Extending beyond 5pm puts strain on
+ European organizers and volunteers, though.
+- Sometimes, ikiwiki on front0 took a lot of time to process the new
+ commits. sachac assumed this is due to a faulty regex parsing. We
+ should be able to find out more by looking at the logs from ikiwiki
+ after a slow commit.
+- Ask for preferred timezone in CFP
+- Check with John Wiegley re: schedule - we always happen to coincide with his work trips
+
+
+### When processing prerecs
+
+- We should flesh out the prepare.md section on audio-recording because
+ some speakers have annoying coil-whines when recording from their
+ laptop’s microphone which are particularly hard to remove. We should
+ ask speaker to record some silence, listen to it in isolation, and
+ gauge how silent it actually is. It’s not a biggie though, since we
+ can usually degrade the audio quality for the sake of removing the
+ noise.
+- We can ask for silence in a separate recording so that we don&rsquo;t have to worry about cutting it out.
+
+
+## Possible big projects for next year
+
+
+### Prolog’ing the schedule
+
+
+### Designing the EmacsConf suite (to make it easier for people other us to run their own versions)
+
diff --git a/2022/organizers-notebook/emergency-back-to-one-sat-pm.svg b/2022/organizers-notebook/emergency-back-to-one-sat-pm.svg
new file mode 100644
index 00000000..47586081
--- /dev/null
+++ b/2022/organizers-notebook/emergency-back-to-one-sat-pm.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="0" y="15" opacity="0.8" width="59" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(57,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:47- 2:02 Linking personal info with Hyperbole implicit buttons</title> <rect x="139" y="15" opacity="0.8" width="44" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(181,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:44- 3:09 Real estate and Org table formulas</title> <rect x="308" y="15" opacity="0.8" width="74" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(380,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:09- 3:34 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="382" y="15" opacity="0.8" width="74" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(454,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 4:00- 4:20 Edit live Jupyter notebook cells with Emacs</title> <rect x="533" y="15" opacity="0.8" width="59" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(590,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 4:42- 4:52 orgvm: a simple HTTP server for org</title> <rect x="657" y="15" opacity="0.8" width="29" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(684,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:24- 5:29 Saturday closing remarks</title> <rect x="782" y="15" opacity="0.8" width="14" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(794,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:21- 1:46 Using SQLite as a data source: a framework and an example</title> <rect x="62" y="100" opacity="0.8" width="74" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(134,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 2:03- 2:43 Revisiting the anatomy of Emacs mail user agents</title> <rect x="186" y="100" opacity="0.8" width="118" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(302,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:45 Bidirectional links with eev</title> <rect x="459" y="100" opacity="0.8" width="29" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(486,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 3:45- 4:00 Short hyperlinks to Python docs</title> <rect x="488" y="100" opacity="0.8" width="44" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(530,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 4:21- 4:41 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="595" y="100" opacity="0.8" width="59" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(652,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:53- 5:23 Haskell code exploration with Emacs</title> <rect x="690" y="100" opacity="0.8" width="88" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(776,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(177,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(355,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(533,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(711,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> \ No newline at end of file
diff --git a/2022/organizers-notebook/emergency-back-to-one-sun-am.svg b/2022/organizers-notebook/emergency-back-to-one-sun-am.svg
new file mode 100644
index 00000000..fe5d88ac
--- /dev/null
+++ b/2022/organizers-notebook/emergency-back-to-one-sun-am.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Sunday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="19" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(17,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:35 Results of the 2022 Emacs Survey</title> <rect x="19" y="15" opacity="0.8" width="114" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(131,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:55 This Year in Org</title> <rect x="133" y="15" opacity="0.8" width="76" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(207,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 10:15-10:40 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="285" y="15" opacity="0.8" width="95" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(378,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 11:20-11:30 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="533" y="15" opacity="0.8" width="38" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(569,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:45-11:55 orgvm: a simple HTTP server for org</title> <rect x="628" y="15" opacity="0.8" width="38" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(664,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 9:55-10:15 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="209" y="100" opacity="0.8" width="76" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(283,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:40-11:05 rde Emacs introduction</title> <rect x="380" y="100" opacity="0.8" width="95" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(473,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 11:05-11:20 Tree-sitter beyond syntax highlighting</title> <rect x="476" y="100" opacity="0.8" width="57" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(531,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 11:30-11:45 justl: Driving recipes within Emacs</title> <rect x="571" y="100" opacity="0.8" width="57" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(626,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:55-12:15 What I'd like to see in Emacs</title> <rect x="666" y="100" opacity="0.8" width="76" height="84" stroke="black" stroke-dasharray="5,5,5" fill="red"></rect> <g transform="translate(740,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(228,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(457,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(685,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g></g></svg> \ No newline at end of file
diff --git a/2022/organizers-notebook/emergency-back-to-one-sun-pm.svg b/2022/organizers-notebook/emergency-back-to-one-sun-pm.svg
new file mode 100644
index 00000000..1749c973
--- /dev/null
+++ b/2022/organizers-notebook/emergency-back-to-one-sun-pm.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Sunday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 1:00- 1:10 Emacs development updates</title> <rect x="0" y="15" opacity="0.8" width="26" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(24,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:13- 1:53 Powerful productivity with Hyperbole and Org Mode</title> <rect x="34" y="15" opacity="0.8" width="106" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(138,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 2:14- 2:39 Org workflows for developers</title> <rect x="197" y="15" opacity="0.8" width="66" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(261,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 3:00- 3:20 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="320" y="15" opacity="0.8" width="53" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(371,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:46- 4:06 Putting Org Mode on the Indieweb</title> <rect x="442" y="15" opacity="0.8" width="53" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(493,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:50- 5:05 Fanfare for the Common Emacs User</title> <rect x="613" y="15" opacity="0.8" width="40" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(651,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 5:08- 5:18 Sunday closing remarks</title> <rect x="661" y="15" opacity="0.8" width="26" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(685,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:56- 2:11 Getting detached from Emacs</title> <rect x="149" y="100" opacity="0.8" width="40" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(187,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 2:42- 2:57 Top 10 reasons why you should be using Eshell</title> <rect x="272" y="100" opacity="0.8" width="40" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(310,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 3:23- 3:43 Emacs was async before async was cool</title> <rect x="381" y="100" opacity="0.8" width="53" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(432,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 4:09- 4:29 The Wheels on D-Bus</title> <rect x="504" y="100" opacity="0.8" width="53" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(555,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:32- 4:47 Pre-localizing Emacs</title> <rect x="565" y="100" opacity="0.8" width="40" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(603,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(160,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(320,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(480,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(640,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> \ No newline at end of file
diff --git a/2022/organizers-notebook/index.org b/2022/organizers-notebook/index.org
new file mode 100644
index 00000000..a778b6f4
--- /dev/null
+++ b/2022/organizers-notebook/index.org
@@ -0,0 +1,8712 @@
+# [[elisp:(org-md-export-to-markdown)][Export this file to Markdown]]
+#+todo: TODO(t) SOMEDAY STARTED INPROGRESS(i) WAITING(w) STANDBY(s) BLOCKED(b) | DONE(x) CANCELLED(c)
+#+OPTIONS: h:6 toc:nil num:nil ':t
+#+PROPERTY: header-args :results silent :exports code :tangle yes
+#+EXPORT_FILE_NAME: ../organizers-notebook.md
+#+PROPERTY: QUANTIFIED Emacs
+
+#+begin_export md
+<!-- organizers-notebook.md is exported from organizers-notebook/index.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2022/organizers-notebook/index.org](/2022/organizers-notebook/index.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/).
+#+end_export
+
+#+TOC: headlines 1
+
+Projects and tasks:
+
+#+TOC: headlines 1 :target #projects
+
+Schedule by status: (gray: waiting, light yellow: processing, yellow: to assign, light green: captioning, green: captioned and ready) - Updated by conf.org and the wiki repository
+
+[[file:schedule.svg]]
+
+* Working with this file :noexport:
+:PROPERTIES:
+:CUSTOM_ID: this
+:END:
+You can open the following links (~C-c C-o~ or ~<mouse-1>~) to run the
+associated actions:
+
+General:
+- [[elisp:(org-babel-ref-resolve "general-setup()")][General setup]] / [[elisp:(prog1 (org-babel-ref-resolve "general-setup()") (org-babel-ref-resolve "i-like-danger()"))][Risky general setup]]
+- [[elisp:(org-babel-ref-resolve "i-like-danger()")][I’m okay trading off security for convenience]] / [[elisp:(org-babel-ref-resolve "back-to-safety()")][Bring me back to safety]]
+ - [[elisp:(org-babel-ref-resolve "elisp-no-confirmation")][Do not ask for confirmation when evaluating elisp links or org-babel blocks]] (Risky)
+- [[elisp:(org-babel-execute-buffer)][Execute buffer]] (Risky and unreliable for now)
+- [[elisp:(emacsconf-show-my-agenda)][Show my agenda]] - customize emacsconf-org-tag
+
+Importing changes:
+(This file is frequently edited, so please pull before making your changes.)
+- [[elisp:(magit-pull-from-pushremote nil)][Pull from origin]]
+
+Export:
+- [[elisp:(progn (org-md-export-to-markdown) (org-babel-tangle))][Export and tangle]]
+- [[elisp:(emacsconf-org-publish-this-page)][Export, tangle, commit, push]]
+
+Export on save:
+- [[elisp:(org-babel-ref-resolve "md-export-on-save-toggle-on()")][Export on save]]
+- [[elisp:(org-babel-ref-resolve "md-export-on-save-toggle-off()")][Stop exporting on save]]
+
+You can use ~C-c /~ (~org-sparse-tree~) to filter this for TODOs,
+or ~C-c \~ (~org-match-sparse-tree~) to see anything tagged with your tag.
+~org-agenda~ with ~<~ for the file restriction may also be handy.
+
+
+* Overall priorities
+:PROPERTIES:
+:CUSTOM_ID: overall
+:END:
+
+This table makes it easier to move the slider depending on who wants
+to volunteer and how much we can get done. At some point, we'll figure
+out how to track our current status so we know what we need to
+scramble to do in order to get the conference off the ground. *bold*
+is our current goal. Feel free to volunteer for anything that
+interests you!
+
+| | Good | Better | Best |
+|------------------------+-------------------------------------------+--------------------------------------+--------------------------------------------------------------|
+| [[#harvest][harvesting talks & Q&A]] | *recordings trimmed if needed, published* | chapter markers | edited transcripts |
+
+Previous priorities;
+
+| [[#conforg][conf.org management]] | on sachac's laptop | S: on res.emacsconf.org | *DONE S/Z: other people know how to work with it* |
+| [[#prepare-prerec-process][prerec]] | convert to webm | normalize audio | *[[#mastering][DONE Z: reduce noise]]* |
+| [[#publish-live][talk pages]] | DONE S: link to stream, pad, IRC | *S: link to prerec when live* | embed stream, pad, IRC, prerec |
+| [[#sched-decision][schedule]] | one track | *DONE S: two tracks* | aligned times, full roster |
+| [[#upload][upload]] | FTP | *DONE S: web-based* | auto-encoded, preview (SReview?) |
+| [[#streaming][streaming]] | ffmpeg from computer | OBS | *DONE: OBS in cloud, switchable hosts* |
+| [[#other-streams][other streams]] | 480p | + Toobnix | *S: + YouTube* |
+| [[#coordinate-volunteers][volunteer coordination]] | ad-hoc | *DONE playbook* | training meetings + recordings |
+| BBB rooms | about 5 rooms that we cycle through | | *DONE S: one room per speaker* |
+| host | no host, speaker reads pad | *host reads pad* | host monitors IRC and helps with BBB as well |
+| BBB Q&A | none | *DONE open to community* | moderated by speaker and host |
+| BBB Q&A start | awkward silence while waiting | *speaker can demo a little* | host has prepared questions just in case no one shows up |
+| [[#write-viewing][watch page]] | tracks | + IRC | *DONE S: + talk info*, maybe even current/recent/next |
+| [[#etherpad][pad]] | one pad for conf | one pad per talk, wikimedia | *DONE S: one pad per talk, self-hosted* so we can access API |
+| [[#irc][IRC]] | #emacsconf, -org | *DONE #emacsconf, -gen, -dev, -org* | IRC volunteer copying to pads; maybe even IRC bots |
+| [[#irc-announce][IRC announcements]] | ERC commands | *DONE S: hook-based* | timer-based |
+| [[#publishing-sched][sched update]] | *DONE S: publish at start* | update main sched | update talk pages |
+| [[#video-platforms][other platforms]] | *S: Toobnix & YT after event* | | S: Toobnix + YT when live |
+| schedule view | text table | imagemap fallback | *DONE S: interactive SVG* |
+| [[#caption-workflow][caption workflow]] | YT autosubs | Whisper autosubs | *DONE: Whisper + more granular timestamps* |
+| [[#wiki-design][wiki]] | plain text, markdown | *DONE S: some JS and CSS enrichment* | more JS and CSS, embeds, videoplayer |
+| [[#ansible][ansible]] | none | *DONE S: some automation* | comprehensive, can also work against containers |
+| [[#intro][intro and exit]] | DONE: slide on screen, host on Mumble | *per-talk video, recorded voiceover* | Emacs thing so we can display info, countdowns, IRC |
+* Next comms update
+SCHEDULED: <2022-12-18 Sun>
+:PROPERTIES:
+:CUSTOM_ID: update
+:CREATED: [022-12-11 Sun 10:0]
+:END:
+
+- all the Q&A videos are available
+- updated GRAIL talk, uploaded orgvm talk
+- volunteers: next step is to make chapter markers, large model VTTs are now available
+- [2022-12-15 Thu] all Q&A videos posted, large model VTTs available
+- [2022-12-12 Mon] Updated grail, updated backstage view
+- [2022-12-11 Sun] Thank-you notes sent to all the speakers with Toobnix and YouTube URLs, BBB playback info
+
+* Projects and other long-running tasks
+:PROPERTIES:
+:CUSTOM_ID: projects
+:END:
+
+#+TOC: headlines 1 local
+** Harvest live talks and Q&A
+:PROPERTIES:
+:CUSTOM_ID: harvest
+:END:
+*** DONE Add audio-only options to the publishing process
+CLOSED: [2022-12-15 Thu 16:38]
+:PROPERTIES:
+:Effort: 0:30
+:END:
+*** Learn from how other conferences harvest their talks and Q&A
+- DebConf posts the talk video (prerecorded + in person Q&A), no transcripts or index
+ Ex: https://debconf22.debconf.org/talks/71-sequoia-pgp-v5-openpgp-authentication-and-debian/ . They link to the video and the Etherpad.
+- FOSSDEM has directory listings by track: https://video.fosdem.org/2022/D.conference/
+ also embedded video and links to slides, video recording, chat room (but not logs) https://archive.fosdem.org/2022/schedule/event/community_contributions/
+- LibrePlanet has thumbnails:
+ https://media.libreplanet.org/u/libreplanet/tag/libreplanet-2022-video/ . Talk page has video and links to slides, download.
+ https://media.libreplanet.org/u/libreplanet/m/taking-back-the-web-with-haketilo/
+- NeovimConf: YouTube playlist, lots of comments on YouTube, key moments
+- VS Code Day: link to YouTube video, edited CC captions in YouTube, links and a hashtag in the video description, key moments
+- TED: transcript button, shows transcript in a scrollable area on the right
+*** DONE Publish more Q&A recordings
+CLOSED: [2022-12-15 Thu 10:27]
+**** DONE Check status
+CLOSED: [2022-12-15 Thu 00:39]
+#+begin_src emacs-lisp :results replace :eval no
+(emacsconf-collect-prop :slug
+ (seq-remove
+ (lambda (o)
+ (or (null (string-match "live" (or (plist-get o :q-and-a) "")))
+ (null (emacsconf-talk-file o "--bbb-webcams.webm"))
+ (and (emacsconf-talk-file o "--answers.webm")
+ (plist-get o :qa-public))))
+ (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+#+end_src
+
+#+RESULTS:
+:results:
+nil
+:end:
+
+**** DONE Write code to make it easy to do so
+emacsconf-extract-publish-qa
+**** DONE Fetch the reencoded maint answers and post it to backstage
+CLOSED: [2022-12-12 Mon 11:30]
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 09:53]
+:END:
+:LOGBOOK:
+- State "DONE" from "TODO" [2022-12-12 Mon 11:30]
+:END:
+
+*** DONE Document this phase of the conference
+CLOSED: [2022-12-08 Thu 20:54]
+:PROPERTIES:
+:CREATED: [2022-12-08 Thu 19:33]
+:END:
+
+We're now in the harvesting phase of the conference, where we work on
+collecting the ideas that people shared in the Q&A sessions as well as
+any talks that were not available as pre-recorded videos. It's a great
+way to help speakers get stuff out of their heads and into a form we
+can all learn from. =)
+
+Status of talks and Q&A sessions:
+
+- All talks except for the new version of grail should now be
+ available at https://media.emacsconf.org/2022/ and on talk pages
+- Links to the BBB playbacks and to the various BBB resources (--bbb-*
+ for each talk) are now in the backstage area for speakers and/or
+ volunteers to review
+- RMS Q&A audio has been uploaded (--questions.ogg)
+- grail talk will be reuploaded by the speaker
+- IRC logs have been copied to the backstage area; see the links at
+ the top of the backstage area
+- Etherpads have been converted to Markdown and included on the talk pages
+- BBB chats have been converted to Markdown and included on the talk pages
+
+Here's a good/better/best scale for stuff we can do during this phase:
+
+- Good:
+ - Look at IRC log at the top of the backstage area and copy
+ anonymized questions/answers/feedback to the wiki pages as well,
+ if they weren't already on the page
+ - Somewhat manual because of overlapping conversations; might be
+ easier to have one volunteer do all the talks in one shift
+ (Saturday morning gen, Saturday morning dev, Saturday afternoon
+ gen, etc.), so you can e-mail to call dibs if you like. We
+ usually remove names from the public log as well. Most of the
+ conversations should be in the track-specific channels, but some
+ might have ended up in #emacsconf as well. You can check the
+ talk page to see if the questions are already there. If you're
+ already set up to edit the wiki or you can figure out the
+ slightly complicated setup for editing, feel free to edit the
+ page directly. If not, you can email a Markdown or Org Mode
+ snippet to emacsconf-submit@gnu.org and let me know what page to
+ put it on.
+- Better:
+ - Review the BBB recording to check if there's anything that needs
+ to be deleted from the recording before we publish it so that
+ people can listen to things themselves; publish the recording or
+ excerpts of it
+ - Might be easier with the transcript, but can also be done
+ without one. asmblox, async, buttons, dbus, detached, and eshell
+ have --bbb-webcams.vtt as the autogenerated Whisper transcripts.
+- Even better than that:
+ - Make chapter markers for the Q&A recording so that people can jump
+ to the question they're particularly interested in. You can write
+ them in the form:
+ mm:ss text goes here
+ mm:ss more text
+ and I can turn those into chapter headings.
+- Totally awesome:
+ - Edited captions/transcripts for the Q&A
+ - Answers copied into the Q&A section, possibly with linked timestamps
+**** Process for reviewing and trimming the videos
+
+Helper function:
+- emacsconf-extract-publish-qa (call with C-u in order to specify a time for truncating the video)
+
+
+Skim the transcript and the videos to see if anything needs to be removed, and which video to use
+
+BigBlueButton gives us the webcams and audio as one video
+(`--bbb-webcams.webm`) and the screenshare (if any) as another video
+(`--bbb-deskshare.webm`). If the speaker shared their screen, we can
+focus on that instead of their webcam. The following ffmpeg command
+combines the audio from the webcams (which has been previously
+extracted into a separate file, `--bbb-webcams.opus`) with the video
+from the screenshare.
+
+ ffmpeg -i example--bbb-webcams.opus -i example--bbb-deskshare.webm -c copy example--answers.webm
+
+We also want to check if people accidentally shared sensitive
+information on their screen, or if anyone said something that they
+might not have said if they remembered that the the Q&A videos will be
+shared after the talk. Sometimes there's some time before we get
+around to closing the meeting at the end of the Q&A. Usually, a quick
+read of the transcript will show anything that needs to be trimmed.
+Here's how to stop the recording at a specified time:
+
+ ffmpeg -i input.webm -to hh:mm:ss -c copy output.webm
+
+Cutting out stuff from the middle of a recording is slightly more
+complicated. It might be easier to use a nonlinear video editor such
+as kdenlive to edit the video. If you want to use ffmpeg, using
+filters to select the frames and reencode the video will probably work
+out better than splitting the file into multiple parts and then
+concatenating them without reencoding, as the latter tends to need to
+be split on keyframes. Here's a sample command based on this
+[StackOverflow](https://stackoverflow.com/questions/64866231/remove-a-section-from-the-middle-of-a-video-without-concat) answer that removes the section between 15 seconds and
+45 seconds:
+
+ ffmpeg -i input.webm \
+ -vf "select='not(between(t,15,45))', setpts=N/FRAME_RATE/TB" \
+ -af "aselect='not(between(t,15,45))', asetpts=N/SR/TB" \
+ output.webm
+
+Alternatively, you can let us know what parts needs to be trimmed, and
+we can figure that part out.
+
+
+
+
+*** TODO Prepare groundwork for volunteers to help
+**** CANCELLED Document IRC/pad/BBB chat extraction tasks
+CLOSED: [2022-12-08 Thu 20:35]
+
+Experience level: no technical background needed; slightly easier if you've set up your computer for editing the wiki, which needs ssh and git
+
+There were lots of interesting notes and Q&A on IRC and the pad. If we can copy them to the talk page on the wiki, then we can catch any questions that hadn't been answered and forward feedback to the speaker. It's a little challenging because the IRC conversation might get mixed up when another talk starts, so it helps to read the IRC log and decide what lines to include. We usually remove names from the public log as well. Most of the conversations should be in the track-specific channels, but some might have ended up in #emacsconf as well.
+
+I've added IRC chat logs to the top of the backstage page. Each talk also links to the HTML (--pad.html) and Markdown (--pad.md) version of the pad.
+
+You can see the 2021 talks (ex: https://emacsconf.org/2021/talks/frownies/ , https://emacsconf.org/2021/talks/pattern/ ) for an example of how the discussions were archived on the talk pages. Sometimes we organize them by type of comment, so it's easy to see Q&A vs. notes vs. feedback about the talk itself.
+
+To avoid duplicating work, maybe we can use this Etherpad to call dibs on talks to process. You can write your name or nick next to the talk(s) you're archiving.
+
+If you're already set up to edit the wiki or you can figure out the slightly complicated setup for editing, feel free to edit the page directly. If not, you can email a Markdown or Org Mode snippet to emacsconf-submit@gnu.org and let me know what page to put it on.
+*** TODO Split up relevant sections from IRC logs so that volunteers can go through them
+
+*** DONE Check duration of Q&A BBB recordings
+CLOSED: [2022-12-08 Thu 20:35]
+
+About 15 hours total
+#+begin_src emacs-lisp :eval no
+(format-seconds "%h:%.2m:%.2s"
+ (/ (apply '+
+ (seq-keep (lambda (o)
+ (and (file-exists-p (expand-file-name (concat (plist-get o :video-slug) "--bbb-webcams.opus") emacsconf-cache-dir))
+ (compile-media-get-file-duration-ms
+ (expand-file-name (concat (plist-get o :video-slug) "--bbb-webcams.opus") emacsconf-cache-dir))))
+ (emacsconf-get-talk-info)))
+ 1000)) ;; "14:52:28"
+#+end_src
+around 4 hours to process asmblox: 14 minutes (/ (* 4 60) 14.0) ~17x recorded time
+(/ (* 17 15) 24.0) 10.625
+
+*** DONE Get the playback links for the BBB talks
+CLOSED: [2022-12-06 Tue 09:52]
+
+Added as BBB_PLAYBACK properties (:bbb-playback in the plist).
+on orga@res:
+
+- /data/emacsconf/2022/bbb-playbacks has the files from the web-based playback
+- /data/emacsconf/2022/bbb-raw has the raw files
+
+
+**** DONE Download all the BBB playback files
+ #+begin_src emacs-lisp :eval no
+ (let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+ (mapconcat
+ (lambda (o)
+ (when (plist-get o :bbb-playback)
+ (let ((meeting-id (when (string-match "meetingId=\\(.+\\)"
+ (plist-get o :bbb-playback))
+ (match-string 1 (plist-get o :bbb-playback)))))
+ (concat "mkdir " (plist-get o :slug) "\n"
+ "cd " (plist-get o :slug) "\n"
+ (mapconcat
+ (lambda (file)
+ (concat
+ "wget https://bbb.emacsverse.org/presentation/"
+ meeting-id "/" file "\n")
+ )
+ '("video/webcams.webm" "metadata.xml" "deskshare/deskshare.webm" "panzooms.xml" "cursor.xml" "deskshare.xml" "captions.json" "presentation_text.json" "slides_new.xml")
+ ""
+ )
+ "cd ..\n"
+ ))
+ )
+ )
+ info
+ ""))
+ #+end_src
+
+**** DONE Convert to Opus in preparation for transcription
+
+find -name webcams.webm -exec bash -c 'ffmpeg -i {} -c:a copy $(echo {} | sed 's/webm/opus/')' \;
+
+**** TODO Transcribe serially
+in bbb-whisper
+#+begin_src sh :eval no
+for SLUG in *; do
+ echo Processing $SLUG $(date -Iseconds) | tee -a bbb-whisper.log
+ (
+ cd $SLUG;
+ if [[ ! -f webcams.txt ]]; then
+ whisper --model large --language en --verbose True webcams.opus
+ else
+ echo "Skipping, already exists"
+ fi
+ )
+done
+#+end_src
+*** DONE Extract RMS Q&A from dump
+CLOSED: [2022-12-08 Thu 20:35]
+17:48 of current
+
+**** DONE Ffmpeg
+CLOSED: [2022-12-08 Thu 20:35]
+:PROPERTIES:
+:CREATED: [2022-12-04 Sun 20:18]
+:END:
+
+[19:26] <bandali> rsyncing the stream dumps from live0:/data/emacsconf-2022-* into fh-vm01:~orga/live0-streams/
+[19:26] <bandali> i'll probably rsync a copy to my own laptop as well, for backup
+[19:29] <bandali> a reminder that the stream dumps shouldn't be used as-is, and should first be remuxed using ffmpeg to fix the timestamps
+[19:30] <bandali> using something like this: ffmpeg -i myfile.webm -acodec copy -vcodec copy myfile-remuxed.webm >> myfile.log 2>&1
+
+*** DONE Extract orgvm talk
+CLOSED: [2022-12-08 Thu 20:35]
+*** DONE Post IRC logs to backstage so that volunteers can split them up
+CLOSED: [2022-12-06 Tue 09:55]
+
+See links at the top of backstage
+
+*** SOMEDAY Copy logs for analysis
+:PROPERTIES:
+:CREATED: [2022-12-04 Sun 20:41]
+:END:
+
+*** DONE Transcribe recordings
+CLOSED: [2022-12-15 Thu 00:40]
+:PROPERTIES:
+:CREATED: [2022-12-04 Sun 20:38]
+:END:
+
+*** DONE Collect recordings from bbb
+CLOSED: [2022-12-08 Thu 20:36]
+:PROPERTIES:
+:CREATED: [2022-12-04 Sun 20:38]
+:END:
+
+*** DONE Back up all the pads
+CLOSED: [2022-12-08 Thu 20:35] SCHEDULED: <2022-12-05 Mon>
+*** DONE Extract bbb chat and add to backstage
+CLOSED: [2022-12-08 Thu 20:35]
+:PROPERTIES:
+:CREATED: [2022-12-06 Tue 12:04]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-06 Tue 13:51]--[2022-12-06 Tue 22:11] => 8:20
+:END:
+
+*** SOMEDAY Awesome Speaker Diarization | awesome-diarization
+:PROPERTIES:
+:CREATED: [2022-12-06 Tue 12:00]
+:END:
+
+https://wq2012.github.io/awesome-diarization/
+
+*** SOMEDAY Document irc, bbb chat, pad tasks
+:PROPERTIES:
+:CREATED: [2022-12-05 Mon 15:36]
+:END:
+
+Experience level: no technical background needed; slightly easier if you've set up your computer for editing the wiki, which needs ssh and git
+
+There were lots of interesting notes and Q&A on IRC and the pad. If we can copy them to the talk page on the wiki, then we can catch any questions that hadn't been answered and forward feedback to the speaker. It's a little challenging because the IRC conversation might get mixed up when another talk starts, so it helps to read the IRC log and decide what lines to include. We usually remove names from the public log as well. Most of the conversations should be in the track-specific channels, but some might have ended up in #emacsconf as well.
+
+I've added IRC chat logs to the top of the backstage page, and each talk also links to the HTML (--pad.html) and Markdown (--pad.md) version of the pad.
+
+You can see the 2021 talks (ex: https://emacsconf.org/2021/talks/frownies/ , https://emacsconf.org/2021/talks/pattern/ ) for an example of how the discussions were archived on the talk pages. Sometimes we organize them by type of comment, so it's easy to see Q&A vs. notes vs. feedback about the talk itself.
+
+To avoid duplicating work, maybe we can use this Etherpad to call dibs on talks to process. You can write your name or nick next to the talk(s) you're archiving.
+
+If you're already set up to edit the wiki or you can figure out the slightly complicated setup for editing, feel free to edit the page directly. If not, you can email a Markdown or Org Mode snippet to emacsconf-submit@gnu.org and let me know what page to put it on.
+
+*** STARTED Write some code to copy the events.xml to the backstage
+:PROPERTIES:
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-11 Sun 14:14]
+:END:
+
+recording timestamp is 2022-12-03T09:41:30.888-08
+bandali user ID is w_uwwpzp4fjtqq
+joined 2022-12-03T10:07:06.066-08
+aaaaaah, hmm. recording timestamp seems earlier, that might just be when BBB starts the whole thing.
+aha! The raw directory has the whole thing, not just the recorded part, and the recording timestamp is the beginning of the meeting. So let's find out where the actual recording starts.
+
+Maybe StartWebRTCShareEvent ?
+ParticipantStatusChangeEvent might be the webcam start.
+Is it DeskShareStartRTMP ?
+
+*** TODO [#C] Improve visualization for Q&A sessions, especially when there's nothing else to look at
+**** SOMEDAY Consider the challenge of aligning video segments with a timeline
+:PROPERTIES:
+:CREATED: [2022-12-08 Thu 16:31]
+:END:
+
+**** SOMEDAY windows - Reducing command-line shortcomings caused by excessive number of FFmpeg inputs - Super User
+:PROPERTIES:
+:CREATED: [2022-12-09 Fri 20:24]
+:END:
+
+https://superuser.com/questions/1369843/reducing-command-line-shortcomings-caused-by-excessive-number-of-ffmpeg-inputs
+
+**** SOMEDAY kkroening/ffmpeg-python: Python bindings for FFmpeg - with complex filtering support
+:PROPERTIES:
+:CREATED: [2022-12-09 Fri 20:26]
+:END:
+
+https://github.com/kkroening/ffmpeg-python
+
+**** SOMEDAY Extension repository - Inkscape Wiki
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 22:59]
+:END:
+
+https://wiki.inkscape.org/wiki/index.php/Extension_repository#Generator
+
+**** SOMEDAY how to render a long text in an area with automatic wrap - Legacy ImageMagick Discussions Archive
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 23:01]
+:END:
+
+https://www.imagemagick.org/discourse-server/viewtopic.php?t=27325
+
+**** SOMEDAY svg to tex with svg package and inkscape: make the text to wrap inside a shape - TeX - LaTeX Stack Exchange
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 22:58]
+:END:
+
+https://tex.stackexchange.com/questions/325711/svg-to-tex-with-svg-package-and-inkscape-make-the-text-to-wrap-inside-a-shape
+
+**** SOMEDAY tikz API documentation
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 22:40]
+:END:
+
+https://allefeld.github.io/pytikz/tikz/
+
+**** SOMEDAY tikz pgf - Absolute positioning in beamer - TeX - LaTeX Stack Exchange
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 22:36]
+:END:
+
+https://tex.stackexchange.com/questions/6185/absolute-positioning-in-beamer
+
+**** SOMEDAY CTAN: Package textpos
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 22:36]
+:END:
+
+https://ctan.org/pkg/textpos
+
+**** SOMEDAY positioning - How do I put some text in specific position on a page horizontally with the prosper class? - TeX - LaTeX Stack Exchange
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 22:34]
+:END:
+
+https://tex.stackexchange.com/questions/35602/how-do-i-put-some-text-in-specific-position-on-a-page-horizontally-with-the-pros
+
+**** SOMEDAY Exporting LaTeX TikZ as Image Files | Baeldung on Computer Science
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 22:33]
+:END:
+
+https://www.baeldung.com/cs/exporting-tikz-as-images
+
+**** SOMEDAY OpenAI Whisper tutorial: Whisper - Transcription and diarization (speaker identification) | LabLab
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 22:23]
+:END:
+
+https://lablab.ai/t/whisper-transcription-and-speaker-identification
+
+**** TODO Consider ffmpeg to make speaker labels so that I can overlay them on webcams.webm
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 21:53]
+:END:
+
+**** TODO could be fancy to have an FFMPEG compose the videos with names and webcams on the right side
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 14:41]
+:END:
+
+**** SOMEDAY Try using the single webcam view of the speaker
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 18:03]
+:END:
+
+*** SOMEDAY Think about how I want to format the VTT for the RMS Q&A
+:PROPERTIES:
+:CREATED: [2022-12-08 Thu 13:53]
+:END:
+
+**** SOMEDAY Use word data, maybe reflow based on it
+:PROPERTIES:
+:CREATED: [2022-12-08 Thu 18:35]
+:END:
+*** SOMEDAY Combine webcams and deskshare
+:PROPERTIES:
+:CREATED: [2022-12-09 Fri 21:24]
+:END:
+
+*** TODO Extract comments from IRC
+**** SOMEDAY Auto-add A: marker for speaker
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 22:19]
+:END:
+
+*** DONE compare deskshare with webcams
+
+#+begin_src emacs-lisp :eval no
+(mapcar (lambda (o)
+ (cons (emacsconf-get-slug-from-string o)
+ (- (compile-media-get-file-duration-ms o)
+ (compile-media-get-file-duration-ms (replace-regexp-in-string "deskshare" "webcams" o))) )
+
+ )
+ (directory-files emacsconf-cache-dir t "-deskshare.webm"))
+#+end_src
+
+#+RESULTS:
+:results:
+((/home/sacha/proj/emacsconf/cache/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--bbb-deskshare.webm . -9.0) (/home/sacha/proj/emacsconf/cache/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--bbb-deskshare.webm . -7.0) (/home/sacha/proj/emacsconf/cache/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--bbb-deskshare.webm . -24.0) (/home/sacha/proj/emacsconf/cache/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--bbb-deskshare.webm . -8.0) (/home/sacha/proj/emacsconf/cache/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--bbb-deskshare.webm . -7.0) (/home/sacha/proj/emacsconf/cache/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--bbb-deskshare.webm . 12.0) (/home/sacha/proj/emacsconf/cache/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--bbb-deskshare.webm . -49.0) (/home/sacha/proj/emacsconf/cache/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--bbb-deskshare.webm . 5.0))
+:end:
+
+*** Improve segmented audio normalization
+**** SOMEDAY How to normalize the volume of an audio file in python? - Stack Overflow
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 21:03]
+:END:
+
+https://stackoverflow.com/questions/42492246/how-to-normalize-the-volume-of-an-audio-file-in-python
+
+
+**** SOMEDAY Execute Macro from Script - Audacity Forum
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 20:59]
+:END:
+
+https://forum.audacityteam.org/viewtopic.php?t=121821
+
+*** TODO subtitle hyperorg
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 20:07]
+:END:
+
+*** DONE Check duration
+
+#+begin_src emacs-lisp :eval no
+(/ (apply '+
+ (mapcar #'compile-media-get-file-duration-ms
+ (directory-files emacsconf-cache-dir t "\\(main\\|webcams\\).webm\\|rms.*ogg")))
+ 3600000.0)
+#+end_src
+
+28.860543888888888
+
+- 29 hours including Q&A
+- 14 hours of talks, 15 hours of Q&A
+
+
+(* 28 0.0075 60)
+12.6
+
+*** SOMEDAY Copy irc, haven't actually done that yet
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 15:39]
+:END:
+
+*** SOMEDAY [#C] Create harvesting etherpad if needed to track the status?
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 18:53]
+:END:
+
+*** DONE Update task status now that I have TO_REVIEW_QA, TO_INDEX_QA, TO_CAPTION_QA
+CLOSED: [2022-12-13 Tue 09:55]
+:LOGBOOK:
+- State "DONE" from "TODO" [2022-12-13 Tue 09:55]
+:END:
+
+#+begin_src emacs-lisp :eval no
+(with-current-buffer (find-file-noselect emacsconf-org-file)
+ (org-map-entries
+ (lambda ()
+ (if (file-exists-p (expand-file-name (concat (org-entry-get (point) "VIDEO_SLUG") "--answers.webm")
+ emacsconf-cache-dir))
+ (org-todo "TO_INDEX_QA")
+ (org-todo "TO_REVIEW_QA")))
+ "TODO=\"TO_ARCHIVE\"+SLUG={.}")
+ )
+
+(with-current-buffer (find-file-noselect emacsconf-org-file)
+ (org-map-entries
+ (lambda ()
+ (unless (file-exists-p (expand-file-name (concat (org-entry-get (point) "VIDEO_SLUG") "--bbb-webcams.webm")
+ emacsconf-cache-dir))
+ (org-todo "TO_ARCHIVE")))
+ "TODO=\"TO_REVIEW_QA\"+SLUG={.}")
+ )
+#+end_src
+
+*** TODO consider number-anonymizing the IRC chat
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 09:34]
+:END:
+
+*** TODO switch to resources view
+:PROPERTIES:
+:CREATED: [2022-12-15 Thu 01:16]
+:END:
+*** TODO Harvest the closing remarks
+:PROPERTIES:
+:CREATED: [2022-12-15 Thu 00:59]
+:END:
+*** TODO Check normalization of answers
+:PROPERTIES:
+:CREATED: [2022-12-15 Thu 00:11]
+:END:
+https://stackoverflow.com/questions/42492246/how-to-normalize-the-volume-of-an-audio-file-in-python
+**** SOMEDAY Scripting - Audacity Manual
+:PROPERTIES:
+:CREATED: [2022-12-15 Thu 00:02]
+:END:
+
+https://manual.audacityteam.org/man/scripting.html
+
+*** SOMEDAY Post transcripts, start working on chapter workflow
+:PROPERTIES:
+:CREATED: [2022-12-14 Wed 22:24]
+:END:
+
+*** SOMEDAY Add audio-only handler for media card
+:PROPERTIES:
+:CREATED: [2022-12-15 Thu 01:18]
+:END:
+
+*** SOMEDAY How to chunk text into paragraphs using python | by N Polovinkin | Medium
+:PROPERTIES:
+:CREATED: [2022-12-14 Wed 17:17]
+:END:
+
+https://medium.com/@npolovinkin/how-to-chunk-text-into-paragraphs-using-python-8ae66be38ea6
+
+*** STARTED Figure out ways to make sense of IRC logs
+:PROPERTIES:
+:CREATED: [2022-12-13 Tue 16:37]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-20 Tue 10:34]--[2022-12-20 Tue 13:16] => 2:42
+:END:
+ssh
+Possible: thread speaker messages?
+Manual:
+- search backward to find the lines, put something under
+- avy to indent it under that line
+- use properties to suggest lines
+- copy everything, use Emacs News code to refile entries
+- anonymize after
+
+*** TODO improve nil note for missing resources
+:PROPERTIES:
+:CREATED: [2022-12-15 Thu 16:52]
+:END:
+*** CANCELLED Trim grail if needed
+CLOSED: [2022-12-16 Fri 21:35]
+:PROPERTIES:
+:CREATED: [2022-12-15 Thu 22:24]
+:END:
+*** DONE I uploaded the Q&A sessions to Toobnix. :sachac:
+CLOSED: [2022-12-16 Fri 13:53]
+:LOGBOOK:
+- State "DONE" from "TODO" [2022-12-16 Fri 13:53]
+:END:
+
+Least extra work if I do it after chapter markers, but I can just do them now and then update them later
+
+#+begin_src emacs-lisp :eval yes
+(mapc (lambda (o)
+ (let ((default-directory "~/vendor/PeerTube/"))
+ (when (emacsconf-publish-upload-answers o 'toobnix)
+ (emacsconf-go-to-talk o)
+ (shell-command "xdotool mousemove 1782 370 click 1 sleep 1 key Ctrl+r sleep 4 mousemove 1584 546 click 3 sleep 1 mousemove 1664 746 click 1 mousemove 1584 546 sleep 1 key Alt+Tab sleep 1")
+ (org-entry-put
+ (point) "QA_TOOBNIX"
+ (read-string (format "URL for %s: "
+ (org-entry-get (point) "SLUG")))))))
+ (seq-remove
+ (lambda (o)
+ (or (null (emacsconf-talk-file o "--answers.webm"))
+ (plist-get o :qa-toobnix)))
+ (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+#+end_src
+*** DONE Upload answers to Youtube :sachac:
+CLOSED: [2022-12-16 Fri 21:35] SCHEDULED: <2022-12-17 Sat>
+:PROPERTIES:
+:CREATED: [2022-12-16 Fri 08:01]
+:header-args: :eval no
+:END:
+:LOGBOOK:
+- State "WAITING" from "SOMEDAY" [2022-12-16 Fri 12:58] \\
+ quota
+:END:
+
+Set eval to yes and work carefully.
+
+#+NAME: not-done
+#+begin_src emacs-lisp
+(defun emacsconf-publish-answers-python (talk)
+ (interactive)
+ (concat "filename = \"\"\"" (emacsconf-talk-file talk "--answers.webm") "\"\"\"\n"
+ "title = \"\"\"" (emacsconf-publish-answers-title talk 100) "\"\"\"\n"
+ "description = \"\"\"" (emacsconf-publish-answers-description talk 'youtube) "\"\"\"\n"))
+(plist-get
+ (seq-find (lambda (talk)
+ (not (or (null (emacsconf-talk-file talk "--answers.webm"))
+ (plist-get talk :qa-youtube))))
+ (emacsconf-prepare-for-display (emacsconf-get-talk-info)))
+ :slug)
+
+
+#+end_src
+
+#+RESULTS: not-done
+:results:
+nil
+:end:
+:end:
+
+quota, continue tomorrow
+**** Setup
+#+begin_src python :dir "/home/sacha/proj/plays" :session plays
+from playwright.sync_api import Playwright, sync_playwright, expect
+from pathlib import Path
+import json
+
+playwright = sync_playwright().start()
+browser = playwright.firefox.launch(headless=False)
+context = browser.new_context()
+page = context.new_page()
+context.add_cookies(json.loads(Path("cookies.json").read_text()))
+page.goto("https://studio.youtube.com/")
+#+end_src
+
+#+RESULTS:
+:results:
+<Response url='https://studio.youtube.com/' request=<Request url='https://studio.youtube.com/' method='GET'>>
+:end:
+
+Save the cookies after it's all set up
+
+#+begin_src python :dir "/home/sacha/proj/plays" :session plays
+Path("cookies.json").write_text(json.dumps(cookies))
+#+end_src
+
+#+RESULTS:
+:results:
+:end:
+
+#+begin_src python :dir "/home/sacha/proj/plays" :session plays
+context.add_cookies(json.loads(Path("cookies.json").read_text()))
+page.goto("https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A")
+#+end_src
+
+
+#+RESULTS:
+:results:
+:end:
+
+1. Upload the file
+
+#+NAME: create
+#+begin_src python :dir "/home/sacha/proj/plays" :session plays :noweb yes :results silent
+#page.get_by_role("dialog", name="Video processing").get_by_role("button", name="Close").click()
+page.locator("#create-icon").click()
+page.get_by_text("Upload videos").click()
+page.get_by_role("button", name="Select files").click()
+<<talk()>>
+#+end_src
+
+2. Set the talk details and copy the URL.
+
+#+begin_src emacs-lisp :var slug=not-done :var url=set_details :results silent
+(save-window-excursion
+ (emacsconf-go-to-talk (emacsconf-resolve-talk slug))
+ (org-entry-put (point) "QA_YOUTUBE" url))
+#+end_src
+***** Background code
+#+NAME: talk
+#+begin_src emacs-lisp :var slug=not-done :noweb yes
+(let ((talk (emacsconf-resolve-talk slug)))
+ (kill-new (emacsconf-talk-file talk "--answers.webm"))
+ (emacsconf-publish-answers-python talk))
+#+end_src
+
+#+RESULTS: talk
+:results:
+filename = """/home/sacha/proj/emacsconf/cache/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.webm"""
+title = """EmacsConf 2022 Q&A: Health data journaling and visualization with Org Mode and gnuplot"""
+description = """David O'Toole (he/him)
+
+This is the Q&A for the talk at https://youtu.be/YmQ1CYMz-OY .
+
+You can view this and other resources using free/libre software at https://emacsconf.org/2022/talks/health .
+This video is available under the terms of the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.
+"""
+:end:
+
+#+NAME: set_details
+#+begin_src python :dir "/home/sacha/proj/plays" :session plays :results output :noweb yes
+<<talk()>>
+page.locator("#title-textarea").click()
+page.keyboard.press("Control+KeyA")
+page.keyboard.press("Delete")
+page.keyboard.type(title)
+page.locator("#description-textarea #textbox").fill(description)
+page.locator('ytcp-video-metadata-playlists .dropdown-trigger-text').click()
+page.get_by_role("dialog", name="Choose playlists").get_by_text("EmacsConf 2022").click()
+page.get_by_role("button", name="Done").click()
+page.get_by_role("button", name="Show more").click()
+page.get_by_placeholder("Add tag").fill("emacs, emacsconf, answers")
+page.get_by_placeholder("Add tag").click()
+href = page.locator('a.ytcp-video-info').get_attribute('href')
+page.locator("#step-badge-3").click()
+page.locator(".ytcp-video-visibility-select[name=PUBLIC]").click()
+page.get_by_role("button", name="PUBLISH").click()
+print(href)
+#+end_src
+
+#+RESULTS: set_details
+:results:
+https://youtu.be/XTDpzx9QHSI
+:end:
+
+#+RESULTS:
+:results:
+https://youtu.be/Q453L_whGEc
+:end:
+
+*** TODO Add links to Q&A to Youtube video descriptions
+:PROPERTIES:
+:CREATED: [2022-12-16 Fri 14:12]
+:END:
+
+*** SOMEDAY Make a podcast feed of the talks
+:PROPERTIES:
+:CREATED: [2022-12-17 Sat 14:26]
+:END:
+
+*** TODO Check that webms have latest vtts
+:PROPERTIES:
+:CREATED: [2022-12-17 Sat 08:09]
+:END:
+
+*** TODO Break autocaptions every 5 minutes or so, so that they can be included on the webpage
+SCHEDULED: <2022-12-20 Tue>
+:PROPERTIES:
+:CREATED: [2022-12-15 Thu 22:05]
+:END:
+
+*** DONE Add maint chapter markers to Toobnix and Youtube, automate it
+:PROPERTIES:
+:CREATED: [2022-12-21 Wed 09:45]
+:Effort: 1:00
+:QUANTIFIED: Emacs
+:END:
+:LOGBOOK:
+- State "DONE" from "STARTED" [2022-12-21 Wed 10:30]
+CLOCK: [2022-12-21 Wed 10:06]--[2022-12-21 Wed 10:30] => 0:24
+:END:
+
+#+NAME: answers-chapters
+#+begin_src emacs-lisp :eval no
+(setq talk (emacsconf-resolve-talk "maint"))
+(replace-regexp-in-string
+ "\\\\" "\\\\\\\\"
+ (json-encode
+ (list
+ :qa-youtube (plist-get talk :qa-youtube)
+ :qa-toobnix (plist-get talk :qa-toobnix)
+ :slug (plist-get talk :slug)
+ :answers-description-youtube (emacsconf-publish-answers-description talk 'youtube)
+ :answers-description-toobnix (emacsconf-publish-answers-description talk 'youtube))))
+#+end_src
+
+Update YouTube
+
+#+begin_src python :dir "/home/sacha/proj/plays" :session plays :var talk_json=answers-chapters :noweb yes :results output
+from playwright.sync_api import Playwright, sync_playwright, expect
+from pathlib import Path
+import json
+import re
+
+talk = json.loads("""<<talk()>>""")
+playwright = sync_playwright().start()
+browser = playwright.firefox.launch(headless=False)
+context = browser.new_context()
+page = context.new_page()
+context.add_cookies(json.loads(Path("cookies.json").read_text()))
+m = re.search("[^/=]+$", talk['qa-youtube'])
+page.goto("https://studio.youtube.com/video/" + m.group(0) + "/edit")
+page.locator("#description-textarea #textbox").fill(talk['answers-description-youtube'])
+ page.get_by_role('button', name="Save").click()
+#+end_src
+
+Update Toobnix:
+
+#+begin_src python :dir "/home/sacha/proj/plays" :session plays :var talk_json=answers-chapters :noweb yes :results output
+talk = json.loads("""<<talk()>>""")
+m = re.search("[^/=]+$", talk['qa-youtube'])
+page.goto("https://toobnix.org/videos/update/" + m.group(0))
+page.locator("#description").fill(talk['answers-description-toobnix'])
+page.locator('.orange-button').click()
+#+end_src
+
+
+#+RESULTS:
+:results:
+:end:
+
+** TODO Send thanks
+:PROPERTIES:
+:CUSTOM_ID: thanks
+:END:
+*** TODO Send thank-you notes to speakers
+
+Dependencies:
+- youtube, toobnix urls
+- bbb playback urls
+- pads copied
+
+ #+begin_src emacs-lisp
+(defvar emacsconf-mail-thank-speaker-open-youtube t
+ "If non-nil, browse to the YouTube page so we can mention views and stuff.")
+
+(defun emacsconf-mail-thank-speaker (group &optional template)
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (delete-other-windows)
+ (with-selected-window
+ (split-window-right)
+ (emacsconf-edit-wiki-page (plist-get (cadr group) :slug))
+ (when (> (length (cdr group)) 1)
+ (mapc
+ (lambda (talk)
+ (with-selected-window (split-window-below)
+ (emacsconf-edit-wiki-page (plist-get talk :slug))))
+ (cddr group))
+ (balance-windows)))
+ (let ((with-bbb (seq-filter (lambda (talk) (plist-get talk :bbb-playback)) (cdr group))))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "thanks-speaker"))
+ (car group)
+ (list
+ :email (car group)
+ :conf-name emacsconf-name
+ :year
+ emacsconf-year
+ :plural
+ (if (= (length (cdr group)) 1) "" "s")
+ :video-is
+ (if (= (length (cdr group)) 1) "video is" "videos are")
+ :bbb-note
+ (if with-bbb
+ (concat
+ " We'd like to publish the audio (and possibly the video as well)
+ with chapter markers and maybe even captions, depending on
+ volunteers. In case you want to revisit your Q&A session in
+ order to remember anything particularly cool that you'd like to
+ follow up on (or anything particularly sensitive/embarrassing
+ that you'd like us to omit), you can view the BigBlueButton
+ playback at " (mapconcat (lambda (talk) (plist-get talk :bbb-playback)) with-bbb " , ") " . Volunteers will be working on harvesting the Q&A over the next few weeks/months. If you'd like to help with the processing, I've added the files
+to ${backstage} and documented our harvesting process at
+https://emacsconf.org/harvesting/ . The files start with --bbb in the backstage area. This is
+totally optional and just there in case you feel like taking advantage
+of it. =)")
+ "")
+ :backstage
+ (mapconcat (lambda (talk)
+ (concat "https://media.emacsconf.org/" emacsconf-year "/backstage/#" (plist-get talk :slug)))
+ (cdr group) " , ")
+ :urls
+ (mapconcat (lambda (talk)
+ (plist-get talk :absolute-url))
+ (cdr group) " , ")
+ :toobnix-url
+ (mapconcat (lambda (talk)
+ (plist-get talk :toobnix-url))
+ (cdr group) " , ")
+ :youtube-url
+ (mapconcat (lambda (talk)
+ (plist-get talk :youtube-url))
+ (cdr group) " , ")
+ :speakers-short (plist-get (cadr group) :speakers-short)))
+ (when emacsconf-mail-thank-speaker-open-youtube
+ (mapc (lambda (talk)
+ (when (plist-get talk :youtube-url)) (browse-url (plist-get talk :youtube-url)))
+ (cdr group)))))
+ #+end_src
+
+**** Template
+:PROPERTIES:
+:EMAIL_ID: thanks-speaker
+:TO: ${email}
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}, sacha@sachachua.com
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}, sacha@sachachua.com
+:FUNCTION: emacsconf-mail-thank-speaker
+:CC: emacsconf-submit@gnu.org
+:LOG_NOTE: thanked speaker
+:SUBJECT: ${conf-name} ${year}: Thank you for presenting
+:END:
+
+Hi, ${speakers-short}!
+
+Thank you so much for being part of EmacsConf ${year}! Hundreds of
+people enjoyed it, and I'm sure even more will come across the videos
+in the days to follow.
+
+Your ${video-is} available on the talk page${plural} at ${urls} , and
+we've added the discussions from Etherpad/IRC.${bbb-note}${wrap}
+
+We've also uploaded your talk video${plural} to Toobnix (a PeerTube
+instance) at ${toobnix-url} and YouTube at ${youtube-url} . If you
+want to reupload the video to your own channel, please feel free to do
+so. If you let me know where you've uploaded it, I think I can switch
+our playlist to include your version of the video instead. That way,
+it might be easier for you to respond to comments on videos.${wrap}
+
+If you would like to share more resources, you can add them to the
+talk page or e-mail them to us and we can add them for you.
+
+Thanks again for speaking at EmacsConf!
+
+Sacha
+
+
+*** TODO Send thank-you notes to volunteers
+** STARTED Finalize the files to be used for streaming
+SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CUSTOM_ID: files
+:Effort: 0:15
+:END:
+
+Verify that all the files load
+
+#+begin_src emacs-lisp :results replace
+(let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+ (mapconcat
+ (lambda (track)
+ (concat "- " (plist-get track :name) "\n"
+ (mapconcat
+ (lambda (talk)
+ (if (plist-get talk :video-file)
+ (format " - [ ] [[elisp:(emacsconf-stream-play-talk-on-change \"%s\")][Play %s]]\n"
+ (plist-get talk :slug) (plist-get talk :slug))
+ ""))
+ (emacsconf-filter-talks-by-track track info))))
+ emacsconf-tracks))
+#+end_src
+
+#+RESULTS:
+:results:
+- General
+- Development
+:end:
+
+How about the ones that might be live
+#+begin_src emacs-lisp :results replace
+(let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+ (mapconcat
+ (lambda (track)
+ (concat "- " (plist-get track :name) "\n"
+ (mapconcat
+ (lambda (talk)
+ (if (null (plist-get talk :video-file))
+ (format " - [ ] [[elisp:(emacsconf-stream-play-talk-on-change \"%s\")][Play %s]]\n"
+ (plist-get talk :slug) (plist-get talk :slug))
+ ""))
+ (emacsconf-filter-talks-by-track track info))))
+ emacsconf-tracks))
+#+end_src
+
+#+RESULTS:
+:results:
+- General
+- Development
+:end:
+
+*** TODO Fix my audio volume for intros
+*** DONE [#C] Remove first eight seconds of Jupyter if possible, and the last 16 seconds or so
+CLOSED: [2022-12-02 Fri 10:27] SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 21:53]
+:END:
+:LOGBOOK:
+- State "WAITING" from "TODO" [2022-12-02 Fri 08:00] \\
+ waiting for ffmpeg to finish
+:END:
+
+screen -S jupyter-trim ffmpeg -y -ss 8 -to 00:16:40 -i emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--final.webm emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--trimmed.webm
+*** TODO Regenerate overlays to accommodate different layout
+
+** [#A] Look for ways to reduce risk :derisk:
+:PROPERTIES:
+:CUSTOM_ID: derisk
+:END:
+https://pad.emacsconf.org/premortem
+*** DONE [#C] Click on stuff with xdotool
+CLOSED: [2022-12-01 Thu 08:29]
+
+(emacsconf-stream-bbb "journalism")
+(emacsconf-stream-xdotool-set-up-bbb "journalism")
+;; get into backstage area
+xdotool mousemove 806 385 click 1
+
+(progn
+)
+
+(let ((pos (emacsconf-stream-xdotool "General" "getmouselocation")))
+ (when (string-match "x:\\([0-9]+\\) y:\\([0-9]+\\)" pos)
+ (insert (format "(emacsconf-stream-xdotool \"General\" \"mousemove %s %s click 1\")\n" (match-string 1 pos) (match-string 2 pos)))))
+
+
+
+
+(emacsconf-stream-track-ssh
+ (emacsconf-get-track "General")
+ (split-string "xdotool "))
+
+
+xdotool mousemove 253 176 click 1
+xdotool mousemove 215 164 click 1
+xdotool key f11
+*** DONE [#A] Make copyable version of bbb redirect :derisk:
+CLOSED: [2022-11-22 Tue 10:06] SCHEDULED: <2022-11-21 Mon>
+:PROPERTIES:
+:CREATED: [2022-11-21 Mon 06:45]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-22 Tue 08:37]--[2022-11-22 Tue 10:06] => 1:29
+:END:
+*** DONE Make sure all the important tasks are scheduled over the next two weeks
+CLOSED: [2022-11-21 Mon 14:49] SCHEDULED: <2022-11-21 Mon>
+:PROPERTIES:
+:Effort: 0:30
+:QUANTIFIED: Emacs
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-21 Mon 13:17]--[2022-11-21 Mon 13:56] => 0:39
+:END:
+
+#+begin_src emacs-lisp :eval yes
+(defun emacsconf-prep-agenda ()
+ (interactive)
+ (let* ((notebook (expand-file-name "index.org" (expand-file-name "organizers-notebook" (expand-file-name emacsconf-year emacsconf-directory))))
+ (org-agenda-custom-commands
+ `(("a" "Agenda"
+ ((tags-todo "-PRIORITY=\"C\"-SCHEDULED={.}-nextyear"
+ ((org-agenda-files (list ,notebook))))
+ (agenda ""
+ ((org-agenda-files (list ,notebook))
+ (org-agenda-span 7)))
+ )))))
+ (org-agenda nil "a")))
+#+end_src
+*** DONE Try a reboot before the resize :sachac:
+CLOSED: [2022-12-02 Fri 09:06] SCHEDULED: <2022-12-02 Fri>
+ :PROPERTIES:
+ :CREATED: [2022-11-27 Sun 12:48]
+ :END:
+
+- After rebooting live0, we should still be able to:
+ - [X] SSH to it
+ - [X] Stream gen to it
+ - [X] Start up the fallbacks: screen-fallbacks
+ - test: mpv https://live0.emacsconf.org/gen-fallback.webm
+ - [X] Play gen stream: mpv https://live0.emacsconf.org/gen.webm
+ - [X] Play gen 480p stream: mpv https://live0.emacsconf.org/gen-480p.webm
+ - [X] Go to watch page for gen:
+ - https://emacsconf.org/2022/watch/gen/
+ - https://live.emacsconf.org/2022/watch/gen/
+ - [X] Start test restream to toobnix
+ - screen-restream-test-toobnix.sh
+ - https://toobnix.org/w/dmibQFkBTNcJyTVVQTyd5C
+ - Test dev as well (optional)
+ - [X] Stream dev to it
+ - [X] Play dev stream
+ - [X] Play dev 480p stream
+ - [X] Go to watch page for dev
+- After rebooting front0, we should still be able to:
+ - [X] View the wiki https://emacsconf.org/2022/
+ - [X] Update the status page [[file:/ssh:front0.emacsconf.org:/var/www/status.emacsconf.org/index.html][edit]] https://status.emacsconf.org
+ - [ ] Go to the pad: https://pad.emacsconf.org/2022
+
+*** DONE [#A] icecast fallback :derisk:sachac:
+SCHEDULED: <2022-11-28 Mon>
+ :PROPERTIES:
+ :CREATED: [2022-11-27 Sun 12:51]
+ :Effort: 1:00
+ :QUANTIFIED: Emacs
+ :CUSTOM_ID: fallback
+ :END:
+:LOGBOOK:
+CLOCK: [2022-11-27 Sun 15:30]
+:END:
+**** Creating the files
+ffmpeg -y -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 -loop 1 -r 20 -t 10 -i sorry.png -c:v libvpx -c:a libvorbis -color_primaries 1 -color_trc 1 -colorspace 1 -crf 30 -g 120 -minrate 1.5M -b:v 1500 -g 120 -maxrate 1.5M -cluster_time_limit 5100 -shortest sorry.webm
+
+ffmpeg -y -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 -loop 1 -r 20 -t 10 -i sorry.png -vf scale=854:480 -c:v libvpx -c:a libvorbis -color_primaries 1 -color_trc 1 -colorspace 1 -crf 30 -g 120 -minrate 1.5M -b:v 1500 -g 120 -maxrate 1.5M -cluster_time_limit 5100 -shortest sorry-480p.webm
+
+icecast 2.4.4
+ Stream #0:0: Video: vp8, yuv420p(tv, bt709, progressive), 1280x720, SAR 1:1 DAR 16:9, 20 fps, 20 tbr, 1k tbn, 1k tbc (default)
+ Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
+
+ Okay. I can ffmpeg to /gen-sorry.webm with
+ orga@live0:/usr/share/icecast2/web$ ffmpeg -r 20 -re -stream_loop -1 -i gen-fallback.webm -f webm -content_type video/webm -c:a copy -c:v copy icecast://emacsconf:$PASSWORD@localhost:8001/gen-sorry.webm
+***** TODO [#C] Add test pattern to part of the screen
+***** gen
+
+Input #0, matroska,webm, from 'http://live0.emacsconf.org:8001/gen.webm':
+ Metadata:
+ ENCODER : Lavf58.20.100
+ icy-pub : 0
+ icy-metadata : 1
+ Duration: N/A, start: 39.061000, bitrate: N/A
+ Stream #0:0: Video: vp8, yuv420p(tv, bt709, progressive), 1280x720, SAR 1:1 DAR 16:9, 20 fps, 20 tbr, 1k tbn, 1k tbc (default)
+ Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
+
+***** fallback
+
+Input #0, matroska,webm, from 'http://live0.emacsconf.org:8001/gen.webm':
+ Metadata:
+ ENCODER : Lavf58.20.100
+ icy-pub : 0
+ icy-metadata : 1
+ Duration: N/A, start: 19.473000, bitrate: N/A
+ Stream #0:0: Video: vp8, yuv420p(tv, bt709, progressive), 1280x720, SAR 1:1 DAR 16:9, 20 fps, 20 tbr, 1k tbn, 1k tbc (default)
+ Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default)
+**** DONE Create fallback for 480p as well
+CLOSED: [2022-11-28 Mon 19:59]
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-28 Mon 19:00]--[2022-11-28 Mon 19:59] => 0:59
+:END:
+**** DONE Create fallback video
+ CLOSED: [2022-11-27 Sun 16:25]
+:LOGBOOK:
+- State "DONE" from "TODO" [2022-11-27 Sun 16:25]
+:END:
+**** DONE Add more ffmpeg options from the OBS profile to try to get them to match as closely as possible
+CLOSED: [2022-11-28 Mon 14:24] SCHEDULED: <2022-11-28 Mon>
+:PROPERTIES:
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-28 Mon 13:24]--[2022-11-28 Mon 13:41] => 0:17
+:END:
+**** DONE Detect fallback and reload the video player
+CLOSED: [2022-11-28 Mon 14:46] SCHEDULED: <2022-11-28 Mon>
+ :PROPERTIES:
+ :CREATED: [2022-11-27 Sun 17:53]
+ :Effort: 0:30
+ :END:
+ :LOGBOOK:
+ CLOCK: [2022-11-28 Mon 14:24]--[2022-11-28 Mon 14:46] => 0:22
+ :END:
+
+https://stackoverflow.com/questions/36280764/audio-stops-playing-while-moving-to-fallback-mount-using-icecast#36332739
+
+#+begin_src js :eval no
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (c) 2022 Sacha Chua - CC0 Public Domain
+var video = document.querySelector('video.reload');
+if (video) {
+ var myVar = setInterval(reloadAsNeeded, 1000);
+ var oldTime = '';
+ function reloadAsNeeded() {
+ if ((video.paused != true && (video.currentTime - oldTime) == 0 && video.currentTime != 0)) {
+ var source = video.querySelector('source');
+ var oldVideo = source.src;
+ source.src = '';
+ source.src = oldVideo;
+ video.load();
+ video.play();
+ }
+ oldTime = video.currentTime;
+ };
+}
+// @license-end
+#+end_src
+*** DONE [#A] Make sure things are okay for me to handle both streams :sachac:
+CLOSED: [2022-11-29 Tue 14:51] SCHEDULED: <2022-11-29 Tue>
+ :PROPERTIES:
+ :CREATED: [2022-11-27 Sun 12:41]
+ :CUSTOM_ID: both
+ :END:
+**** DONE Add keyboard shortcuts
+CLOSED: [2022-11-29 Tue 08:17] SCHEDULED: <2022-11-30 Wed>
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-29 Tue 08:04]--[2022-11-29 Tue 08:17] => 0:13
+:END:
+
+
+| S-g | gen VNC |
+| S-d | dev VNC |
+| S-G | gen console |
+| S-D | dev console |
+| S-o | orga@res console |
+
+**** DONE figure out left/right to keep track of both streams
+CLOSED: [2022-11-29 Tue 08:02] SCHEDULED: <2022-11-28 Mon>
+ :PROPERTIES:
+ :CREATED: [2022-11-27 Sun 12:20]
+ :Effort: 0:30
+ :END:
+ :LOGBOOK:
+ CLOCK: [2022-11-29 Tue 07:50]--[2022-11-29 Tue 08:02] => 0:12
+ :END:
+
+ I'm just going to do this with pavucontrol so that it's not too complicated
+
+**** CANCELLED [#C] Tweak my audio setup for push-to-talk?
+CLOSED: [2022-11-29 Tue 14:51] SCHEDULED: <2022-11-30 Wed>
+https://news.ycombinator.com/item?id=23160101
+https://gist.github.com/zouppen/bdd40a42c77ca387fae8bace0f2ed3e0
+
+**** DONE [#B] Guard against over-announcing by paying attention to erc
+CLOSED: [2022-11-29 Tue 14:50] SCHEDULED: <2022-11-29 Tue>
+ :PROPERTIES:
+ :CREATED: [2022-11-27 Sun 18:32]
+ :Effort: 0:45
+ :END:
+ :LOGBOOK:
+ CLOCK: [2022-11-29 Tue 12:49]--[2022-11-29 Tue 14:50] => 2:01
+ CLOCK: [2022-11-29 Tue 08:18]--[2022-11-29 Tue 08:27] => 0:09
+ CLOCK: [2022-11-29 Tue 08:03]--[2022-11-29 Tue 08:03] => 0:00
+ :END:
+
+Goal: Don't spam the channel with talk announcements
+
+If it was announced in the last 5 minutes, don't reannounce it as part
+of the hook, but allow reannouncements if called manually.
+
+How to detect announcements:
+
+
+If it was the most recently announced talk in the channel, don't re-announce it
+
+(with-eval-after-load 'erc (add-hook 'erc-insert-pre-hook 'emacsconf-erc-notice-announcements))
+
+** CANCELLED [#C] Make checkin and Q&A process slide :sachac:
+CLOSED: [2022-12-06 Tue 10:01]
+ :PROPERTIES:
+ :CREATED: [2022-11-20 Sun 10:04]
+ :Effort: 0:30
+ :CUSTOM_ID: qa
+ :END:
+ :LOGBOOK:
+ CLOCK: [2022-11-22 Tue 11:38]--[2022-11-23 Wed 09:37] => 21:59
+ :END:
+Low-priority because people were able to manage fine last year
+Even better if we can add in-between slides (ex:
+https://media.emacsconf.org/2022/in-between/journalism) for slide #2
+
+asked corwin about access to bbb.emacsverse.org because uploading
+presentations seems to not work on our instance. In the meantime, we
+can paste in https://emacsconf.org/2022/qa/ for tips.
+
+** [#B] Caption talks and make chapter headings
+:PROPERTIES:
+:CUSTOM_ID: caption
+:END:
+*** DONE Nudge volunteers to e-mail me captions by Dec 1 :mail:sachac:
+CLOSED: [2022-11-28 Mon 13:23] SCHEDULED: <2022-11-28 Mon>
+*** DONE [#C] Copy chapter headings for mail talk :emacsconf:captions:
+CLOSED: [2022-11-28 Mon 00:23]
+:PROPERTIES:
+:CREATED: [2022-11-21 Mon 20:50]
+:END:
+
+*** DONE Caption the new talks :sachac:
+CLOSED: [2022-12-01 Thu 12:39] SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 07:47]
+:END:
+** [#A] Prepare intros for the hosts to read
+:PROPERTIES:
+:CUSTOM_ID: host-intros
+:END:
+https://pad.emacsconf.org/intros
+also in :INTRO_NOTE: in conf.org so that we can plop it into the hyperlists.
+*** DONE Write intros for all the other talks
+CLOSED: [2022-11-28 Mon 00:22] SCHEDULED: <2022-11-28 Mon>
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-24 Thu 21:34]--[2022-11-25 Fri 10:57] => 13:23
+:END:
+
+so that people on other platforms can come across EmacsConf
+*** DONE Record a few sample intros to test the workflow
+CLOSED: [2022-11-26 Sat 15:34]
+
+mogrify -alpha off file.png
+
+*** DONE [#A] Write the restreaming shell scripts
+CLOSED: [2022-11-21 Mon 14:49] SCHEDULED: <2022-11-24 Thu>
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-21 Mon 13:56]--[2022-11-21 Mon 14:49] => 0:53
+:END:
+
+*** DONE Create the events and save the keys :sachac:
+CLOSED: [2022-11-19 Sat 11:58]
+[[file:~/proj/emacsconf/private/conf.org::*Other platforms][Other platforms]]
+
+$1 is of the form rtmp://.../stream_key
+
+ #+begin_src sh :eval no :exports code
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
+ #+end_src
+
+Creating the events
+- YouTube: Create - Go Live - Schedule Stream - Streaming Software
+- Toobnix: Publish - Go live
+ - max live is 5 hours
+
+***** EmacsConf 2022 - General track
+
+This is for the general track of EmacsConf, the conference about the joy of Emacs and Emacs Lisp.
+
+Schedule:
+Saturday Dec 3, 2022, 9 AM - 12 PM EST, 1 PM - 5 PM EST
+Sunday Dec 4, 2022, 9 AM - 12 PM EST, 1 PM - 5 PM EST
+
+Watch using free/open source software: https://live.emacsconf.org/2022/watch/gen/
+Conference info: https://emacsconf.org/2022/
+Schedule: https://emacsconf.org/2022/talks/
+Chat on #emacsconf-dev via https://chat.emacsconf.org or irc.libera.chat
+Etherpad: https://pad.emacsconf.org/2022
+
+Videos are shared under the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license. Please observe the guidelines for conduct: https://emacsconf.org/conduct/
+
+***** EmacsConf 2022 - Development track
+
+This is for the development track of EmacsConf, the conference about the joy of Emacs and Emacs Lisp.
+
+Schedule:
+Saturday Dec 3, 2022, 9 AM - 12 PM EST, 1 PM - 5 PM EST
+Sunday Dec 4, 2022, 9 AM - 12 PM EST, 1 PM - 5 PM EST
+
+Watch using free/open source software: https://live.emacsconf.org/2022/watch/dev/
+Conference info: https://emacsconf.org/2022/
+Schedule: https://emacsconf.org/2022/talks/
+Chat on #emacsconf-dev via https://chat.emacsconf.org or irc.libera.chat
+Etherpad: https://pad.emacsconf.org/2022
+
+Videos are shared under the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license. Please observe the guidelines for conduct: https://emacsconf.org/conduct/
+*** DONE Test start restream on a timer :emacsconf:
+CLOSED: [2022-11-24 Thu 09:54] SCHEDULED: <2022-11-24 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-22 Tue 19:06]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-24 Thu 09:05]--[2022-11-24 Thu 09:54] => 0:49
+:END:
+
+ssh live0.emacsconf.org
+confirm that Toobnix test stream isn't playing
+
+echo '/bin/bash /home/orga/screen-restream-test-toobnix.sh' | at 'now + 1 minute'
+echo '/bin/bash /home/orga/screen-restream-test-toobnix.sh' | at 8:30
+
+
+*** TODO [#C] Process the other intros
+:PROPERTIES:
+:CREATED: [2022-11-26 Sat 10:38]
+:END:
+
+*** DONE Record more intros :zaeph:
+CLOSED: [2022-12-01 Thu 14:08] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-30 Wed 00:02]
+:END:
+
+*** DONE [#A] Record two-part introduction for RMS talk
+CLOSED: [2022-12-01 Thu 10:32] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 07:46]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-01 Thu 09:44]--[2022-12-01 Thu 10:32] => 0:48
+:END:
+
+Before Richard Stallman shares what he'd like to see in Emacs, we will first play Richard Stallman's 2014 TEDx talk called "Free Software, Free Society". The TEDx talk is licensed under the Creative Commons Attribution - No Derivative Works 3.0 license.
+
+
+The next talk is called "What I'd like to see in Emacs," by Richard Stallman. This talk will be under the Creative Commons Attribution - ShareAlike license like the other talks at EmacsConf. Afterwards, he will answer questions via a moderated Q&A, so please put your questions in the Etherpad or IRC.
+
+*** DONE [#A] Add images to zaeph's intros :sachac:
+CLOSED: [2022-12-01 Thu 18:36] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 12:52]
+:END:
+*** DONE Add subtitles to intros
+CLOSED: [2022-12-01 Thu 23:07]
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 18:34]
+:Effort: 1:00
+:END:
+:LOGBOOK:
+
+CLOCK: [2022-12-01 Thu 20:09]--[2022-12-01 Thu 23:07] => 2:58
+:END:
+*** DONE rerecord zachary, pronunciation
+CLOSED: [2022-12-01 Thu 23:07]
+*** DONE rerecord buddy, got mixed up with meetups
+CLOSED: [2022-12-01 Thu 23:07]
+*** DONE redo visual for health, changed the title case
+CLOSED: [2022-12-01 Thu 23:07]
+*** DONE [#C] rerecord indieweb, accent on the wrong syllable
+CLOSED: [2022-12-01 Thu 23:07]
+*** DONE [#C] rerecord jupyter intro, repetitive
+CLOSED: [2022-12-01 Thu 23:07]
+*** TODO [#C] consider rerecording meetups to add
+SCHEDULED: <2022-12-02 Fri>
+
+Spanish subtitles are also available for this talk.
+
+You can find them on the talk page.
+
+*** TODO [#C] Contextualize journalism talk
+SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CREATED: [2022-12-02 Fri 01:26]
+:END:
+
+** DONE Set up talks on Toobnix and YouTube :sachac:yt:toobnix:
+CLOSED: [2022-11-30 Wed 18:54] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CUSTOM_ID: video-platforms
+:Effort: 1:00
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-30 Wed 14:32]--[2022-11-30 Wed 15:21] => 0:49
+:END:
+so that people can find the videos on other video platforms
+waiting for prerecs
+
+category 15: science and technology
+license 2: attribution - share alike
+language: en
+privacy 2: unlisted
+tags: emacs,emacsconf
+
+
+#+begin_src emacs-lisp
+
+#+end_src
+
+
+*** DONE Add toobnix url on schedule
+CLOSED: [2022-11-23 Wed 22:57]
+:PROPERTIES:
+:CREATED: [2022-11-23 Wed 20:50]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-23 Wed 21:52]--[2022-11-23 Wed 22:57] => 1:05
+:END:
+*** Upload to YouTube
+
+#+begin_src emacs-lisp :eval no
+(insert
+ (string-join
+ (seq-take
+ (seq-keep
+ (lambda (o)
+ (when (and
+ (file-exists-p
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--final.webm")
+ emacsconf-cache-dir))
+ (null (plist-get o :youtube-url)))
+ (format "./youtube-upload --client-secrets=../../client_secret.json --title=%s --description=%s --category=%s --tags=emacs,emacsconf --recording-date=%s --default-language=en --default-audio-language=en --embeddable=True %s"
+ (shell-quote-argument
+ (concat emacsconf-name " " emacsconf-year ": " (plist-get o :title) " - " (plist-get o :speakers-with-pronouns)))
+ (shell-quote-argument
+ (emacsconf-publish-video-description o))
+ (shell-quote-argument "Science & Technology")
+ (format-time-string "%Y-%m-%dT%H:%M:%S.0Z" (plist-get o :start-time) t)
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--final.webm")
+ emacsconf-cache-dir)
+ )))
+ (emacsconf-get-talk-info)) 1)
+ "\n"))
+./youtube-upload --client-secrets=../../client_secret.json --title=EmacsConf\ 2022\:\ Writing\ and\ organizing\ literature\ notes\ for\ scientific\ writing\ -\ Vidianos\ Giannitsis --description=https\://emacsconf.org/2022/talks/science'
+''
+'00\:00\:00\ My\ second\ brain'
+'00\:28\ Contents\ of\ the\ talk'
+'01\:40\ Bibliography\ management'
+'02\:35\ Creating\ literature\ notes\:\ ivy-bibtex-edit-notes'
+'03\:04\ org-roam\ reference\ template'
+'04\:40\ Demo'
+'05\:40\ Annotating\ with\ org-noter'
+'06\:44\ Annotating\ in\ English'
+'07\:02\ Afterthoughts\ on\ an\ article'
+'07\:30\ Adding\ a\ note'
+'08\:21\ Creating\ permanent\ notes\ from\ reference\ material'
+'09\:01\ The\ organization\ problem'
+'09\:21\ zetteldesk.el'
+'10\:43\ The\ zetteldesk-desktop'
+'11\:45\ Filtering\ with\ ivy-bibtex'
+'12\:09\ Inserting\ literature'
+'13\:46\ Composing\ the\ final\ article'
+'15\:19\ Thanks'
+''
+'You\ can\ view\ this\ and\ other\ resources\ using\ free/libre\ software\ at\ https\://emacsconf.org/2022/talks/science\ .'
+'This\ video\ is\ available\ under\ the\ terms\ of\ the\ Creative\ Commons\ Attribution-ShareAlike\ 4.0\ International\ \(CC\ BY-SA\ 4.0\)\ license. --category=Science\ \&\ Technology --tags=emacs,emacsconf --recording-date=2022-12-03T15:45:00.0Z --default-language=en --default-audio-language=en --embeddable=True /home/sacha/proj/emacsconf/cache/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--final.webm
+#+end_src
+
+*** Toobnix
+
+
+#+begin_src emacs-lisp :eval no
+(insert
+ (string-join
+ (seq-keep
+ (lambda (o)
+ (when (and
+ (file-exists-p
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--main.webm")
+ emacsconf-cache-dir))
+ (null (plist-get o :toobnix-url)))
+ (format "cd ~/vendor/PeerTube; node dist/server/tools/peertube.js upload -f %s -n %s -l 2 -c 15 -P 2 -t emacs,emacsconf -L en -C emacsconf -d %s"
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--main.webm")
+ emacsconf-cache-dir)
+ (shell-quote-argument
+ (concat emacsconf-name " " emacsconf-year ": " (plist-get o :title) " - " (plist-get o :speakers-with-pronouns)))
+ (shell-quote-argument
+ (emacsconf-publish-video-description o)))))
+ (emacsconf-get-talk-info))
+ "\n"))
+#+end_src
+
+*** DONE Upload the rest of the talks to Toobnix
+CLOSED: [2022-12-06 Tue 10:32]
+*** DONE Add Toobnix talks to a playlist
+CLOSED: [2022-12-06 Tue 13:44]
+#+begin_src emacs-lisp :eval no
+(mapc (lambda (o)
+ (when (plist-get o :toobnix-url)
+ (browse-url (plist-get o :toobnix-url))
+ (shell-command "xdotool sleep 5 mousemove 1815 1030 click 1 sleep 2 mousemove 1684 799 click 1 key Alt+Tab")
+ (read-string "Continue?")))
+ (let ((talks (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+ (seq-drop talks
+ (1+ (seq-position talks
+ (seq-find (lambda (o) (string= (plist-get o :slug) "haskell")) talks)))))
+ )
+
+#+end_src
+*** DONE Add Youtube talks to a playlist
+CLOSED: [2022-12-06 Tue 13:21]
+*** DONE Upload talks to YouTube
+CLOSED: [2022-12-06 Tue 13:21] SCHEDULED: <2022-12-05 Mon>
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 07:47]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-02 Fri 12:56]--[2022-12-02 Fri 15:59] => 3:03
+:END:
+
+#+begin_src emacs-lisp :eval yes :results replace list
+(seq-keep
+ (lambda (o)
+ (when (and
+ (file-exists-p
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--final.webm")
+ emacsconf-cache-dir))
+ (null (plist-get o :youtube-url)))
+ (concat (plist-get o :video-slug) "--final.webm")))
+ (emacsconf-get-talk-info))
+#+end_src
+
+#+RESULTS:
+:results:
+- nil
+:end:
+
+#+begin_src emacs-lisp :eval no
+;; This buffer is for text that is not saved, and for Lisp evaluation.
+;; To create a file, visit it with C-x C-f and enter text in its buffer.
+
+(let ((pos (shell-command-to-string "xdotool getmouselocation")))
+ (when (string-match "x:\\([0-9]+\\) y:\\([0-9]+\\)" pos)
+ (insert (format "(shell-command \"xdotool mousemove %s %s click 1\")\n" (match-string 1 pos) (match-string 2 pos)))))
+
+(setq list (seq-filter (lambda (o)
+ (and
+ (file-exists-p
+ (expand-file-name
+ (concat (plist-get o :video-slug) "--final.webm")
+ emacsconf-cache-dir))
+ (null (plist-get o :youtube-url))))
+ (emacsconf-prepare-for-display (emacsconf-get-talk-info))))
+(setq list (cons talk list))
+
+(while list
+ (progn
+ (shell-command "xdotool mousemove 707 812 click 1 sleep 2")
+
+ (setq talk (pop list))
+ ;; click create
+ (shell-command "xdotool mousemove 843 187 click 1 sleep 1")
+ ;; video
+ (shell-command "xdotool mousemove 833 217 click 1 sleep 1")
+ ;; select files
+ (shell-command (concat "xdotool mousemove 491 760 click 1 sleep 4 type "
+ (shell-quote-argument (concat (plist-get talk :video-slug) "--final.webm"))))
+ ;; open
+ (shell-command "xdotool mousemove 1318 847 click 1 sleep 5")
+
+ (kill-new (concat
+ emacsconf-name " "
+ emacsconf-year ": "
+ (plist-get talk :title)
+ " - "
+ (plist-get talk :speakers-with-pronouns)))
+ (shell-command "xdotool sleep 1 mousemove 331 440 click :1 key Ctrl+a Delete sleep 1 key Ctrl+Shift+v sleep 2")
+
+ (kill-new (emacsconf-publish-video-description talk t))
+ (shell-command "xdotool mousemove 474 632 click 1 sleep 1 key Ctrl+a sleep 1 key Delete sleep 1 key Ctrl+Shift+v"))
+ (read-string "Press a key once you've pasted in the description")
+
+ ;; next
+ (when (emacsconf-captions-edited-p (expand-file-name (concat (plist-get talk :video-slug) "--main.vtt") emacsconf-cache-dir))
+ (shell-command "xdotool mousemove 352 285 click 1 sleep 1")
+
+ ;; add captions
+ (shell-command "xdotool mousemove 877 474 click 1 sleep 3")
+ (shell-command "xdotool mousemove 165 408 click 1 sleep 1")
+ (shell-command "xdotool mousemove 633 740 click 1 sleep 2")
+ (shell-command (concat "xdotool mousemove 914 755 click 1 sleep 4 type "
+ (shell-quote-argument (concat (plist-get talk :video-slug) "--main.vtt"))))
+ (read-string "Press a key once you've loaded the VTT")
+ (shell-command "xdotool mousemove 910 1037 sleep 1 click 1 sleep 4")
+ ;; done
+ (shell-command "xdotool mousemove 890 297 click 1 sleep 3")
+ )
+
+
+ (progn
+ ;; visibility
+ (shell-command "xdotool mousemove 810 303 click 1 sleep 2")
+ ;; public
+ (shell-command "xdotool mousemove 119 614 click 1 sleep 2")
+ ;; copy
+ (shell-command "xdotool mousemove 882 669 click 1 sleep 1")
+ ;; done
+ (shell-command "xdotool mousemove 908 1089 click 1 sleep 5 key Alt+Tab")
+
+ (emacsconf-with-talk-heading talk
+ (org-entry-put (point) "YOUTUBE_URL" (read-string "URL: "))
+ ))
+ )
+
+ ;; (shell-command "xdotool mousemove 165 408 click 1 sleep 1")
+ ;; (shell-command "xdotool mousemove 2312 1483 click 1 sleep 1")
+ ;; ;; schedule
+ ;; (shell-command "xdotool mousemove 1527 752 click 1")
+ ;; (message "%s" (format-time-string "%Y-%m-%d %I:%M %p" (plist-get talk :start-time)
+ ;; emacsconf-timezone))))
+ ;; ;; (shell-command (concat "xdotool mousemove 1695 611 click 1 key Shift+PgDn Ctrl+a Del type "
+ ;; ;; (format-time-string "%I:%M %p"
+ ;; ;; (plist-get talk :start-time)
+ ;; ;; emacsconf-timezone)))
+ ;; ;; copy link
+
+ ;; (progn
+ ;; (shell-command "xdotool mousemove 2284 668 click 1 sleep 1 click 1")
+ ;; ;; schedule
+ ;; (shell-command "xdotool mousemove 2324 1498 click 1 sleep 3")
+
+ ;; ;; close
+ ;; (shell-command "xdotool mousemove 2100 996 click 1")
+ ;; )
+#+end_src
+*** DONE upload the rest of the files onto Toobnix
+CLOSED: [2022-12-02 Fri 12:54] SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CREATED: [2022-12-02 Fri 08:16]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-02 Fri 12:47]--[2022-12-02 Fri 12:54] => 0:07
+:END:
+*** TODO [#C] Upload more Toobnix and YouTube talks
+SCHEDULED: <2022-12-05 Mon>
+:PROPERTIES:
+:CREATED: [2022-12-03 Sat 07:01]
+:END:
+
+** DONE [#A] Do another run
+CLOSED: [2022-11-28 Mon 00:21] SCHEDULED: <2022-11-27 Sun>
+:PROPERTIES:
+:CUSTOM_ID: dry-run
+:END:
+
+Summary:
+- bandali will stream from his computer; confirmed can stream to dev
+- corwin will probably connect to gen by VNC; confirmed can connect to VNC and click around, need to become more familiar with setup after trip
+- sachac will be backup streamer if bandali or corwin are unavailable
+
+Goals:
+- Good: Streamers are set up to broadcast from their own OBS if needed (could be a backup plan, could be the main plan)
+- Better: Streamers can connect to the VNC session for their track, manage OBS, start videos (with overlays), and browse the Q&A links
+- Best: Streamers can connect via emacsclient in orga@res.emacsconf.org, manage the task status, and have everything working
+
+Agenda:
+- Get familiar with the setup
+- Consider whether we want to prioritize local OBS (more screen real estate) or stream OBS (easier swapping, can be controlled remotely)
+- Consider whether we want mumble to be able to quickly add audio; how do we want to set it up scene-wise?
+
+*** Checklist for later dry run
+
+ 1. Streams
+ - [ ] General stream
+ - [ ] Development stream
+ - [ ] 480p streams
+ 2. Scenes
+ - [ ] Intro
+ - [ ] Prerec
+ - [ ] Q&A: live
+ - [ ] Q&A: IRC
+ - [ ] Q&A: pad
+ 3. [ ] IRC channels
+ - [ ] Announce
+ - [ ] Question handling
+ - [ ] Timers
+ 4. [ ] Watching pages
+ - [ ] Before launch
+ - [ ] Streaming
+ - [ ] Emergency announcement
+ 5. [ ] Pads
+ 6. [ ] Wiki
+ - [ ] Schedule update
+ - [ ] Message on the schedule
+ - [ ] Prerec live
+ 7. [ ] Wind everything down
+
+
+Later on
+- [ ] Toobnix stream
+- [ ] YouTube stream
+*** Create test
+
+gst-launch-1.0 compositor name=mix sink_1::xpos=1180 sink_1::ypos=470 ! videoconvert ! autovideosink filesrc location=community-title.svg ! rsvgdec ! imagefreeze num_buffers=100 ! mix. videotestsrc ! video/x-raw,width=400,height=300 ! mix. audiotestsrc freq ! autoaudiosink
+
+gst-launch-1.0 compositor name=mix sink_1::xpos=1200 sink_1::ypos=600 ! videoconvert ! autovideosink \
+filesrc location=community-title.svg ! rsvgdec ! imagefreeze num_buffers=100 ! mix. \
+filesrc location=background.opus ! oggdemux ! opusdec ! audioconvert ! audioresample ! mix.
+videotestsrc ! video/x-raw,width=400,height=300,framerate=25/1 num_buffers=(25 * (4 * 60 + 5)) ! mix.
+
+gst-launch-1.0 webmmux name=mux ! filesink location=community.webm \
+compositor name=mix sink_1::xpos=1200 sink_1::ypos=600 ! videoconvert ! vp8enc ! queue ! mux.video_0 \
+filesrc location=community-title.svg ! rsvgdec ! imagefreeze num_buffers=2450 ! mix. \
+filesrc location=background.opus ! oggdemux ! opusdec ! audioconvert ! audioresample ! vorbisenc ! queue ! mux.audio_0 \
+videotestsrc num_buffers=2450 ! video/x-raw,width=400,height=300,framerate=10/1 ! mix.
+
+1251,/home/sacha/proj/emacsconf/private/assets/titles% find -name community-title.svg -exec inkscape --export-type=png --export-width=1280 --export-height=720 --export-background-opacity=0 {} \;
+
+
+*** DONE Do mini dry run
+CLOSED: [2022-11-19 Sat 11:09]
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 07:49]
+:END:
+**** DONE Revisit OBS and streaming setup to prepare for the dry run next weekend
+CLOSED: [2022-11-19 Sat 11:09]
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 08:00]
+:Effort: 1:00
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-19 Sat 09:47]--[2022-11-19 Sat 11:09] => 1:22
+:END:
+**** DONE Make mini dry run hyperlist with buttons
+CLOSED: [2022-11-29 Tue 11:02]
+:PROPERTIES:
+:CREATED: [2022-11-28 Mon 22:40]
+:Effort: 1:00
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-29 Tue 10:21]--[2022-11-29 Tue 11:02] => 0:41
+CLOCK: [2022-11-29 Tue 08:27]
+:END:
+
+- hh:mm slug
+ - hyperlist note
+ - set talk playing
+ - play intro
+ - play talk
+ - set talk closed q
+ - join bbb
+ - set talk open q
+ - set talk to archive
+
+(emacsconf-hyperlist-show-streamer-day "2022-12-03")
+(emacsconf-hyperlist-show-streamer-day "2022-12-04")
+
+
+Testing:
+
+| | intro | talk | Q&A | Expected |
+| journalism | recorded | live | | |
+| school | recorded | recorded | IRC | |
+| handwritten | recorded | recorded | BBB | |
+| treesitter | | | | |
+| health | live | recorded | BBB | |
+| jupyter | live | live | BBB | |
+
+- journalism: recorded intro, recorded talk, live
+
+(emacsconf-hyperlist-show-streamer-day "2022-12-03" nil
+(list "journalism" "school" "treesitter" "handwritten" "health" "jupyter"))
+
+
+*** DONE [#A] Do a dry run for the dry run
+CLOSED: [2022-11-28 Mon 00:21] SCHEDULED: <2022-11-27 Sun>
+:PROPERTIES:
+:CREATED: [2022-11-25 Fri 13:28]
+:END:
+
+** TODO [#C] Turn off file upload service on media.emacsconf.org :sachac:infra:
+SCHEDULED: <2022-12-03 Sat>
+:PROPERTIES:
+:CUSTOM_ID: upload-off
+:END:
+so that nginx can have more memory and we don't risk slowdowns
+** DONE Review notebook for tasks, priorities, and scheduling
+CLOSED: [2022-11-21 Mon 14:34]
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 08:01]
+:CUSTOM_ID: review
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-19 Sat 11:17]--[2022-11-19 Sat 11:29] => 0:12
+:END:
+*** TODO Review tasks
+SCHEDULED: <2022-12-02 Fri>
+** Use Mumble for backchannel coordination and also on-stage
+:PROPERTIES:
+:CUSTOM_ID: mumble
+:END:
+
+[2022-11-19 Sat] sachac: Confirmed that you can join the emacsconf-dev or emacsconf-gen channel if you have access, and you can speak on air in just that channel
+
+*** DONE Update the Mumble setup :bandali:
+CLOSED: [2022-11-19 Sat 11:15]
+- [X] Add emacsconf-gen and emacsconf-dev channels
+- [X] Give the emacsconf-gen and emacsconf-dev users access to them
+- [X] Give the other organizers access to emacsconf-gen, emacsconf-dev, and org-private
+- [X] Get emacsconf-gen and -dev to join the right channels
+*** DONE E-mail volunteers and help them get on Mumble :bandali:
+CLOSED: [2022-11-19 Sat 09:03]
+
+**** Template
+
+We plan to use Mumble as a virtual walkie-talkie during the conference
+so that we can quickly talk to each other as needed. It can also be a
+way for us to add our audio to the streams. Please set up your system
+as follows:
+
+1. Install a Mumble client on the device you want to use to connect to
+ the voice channel. It can be your computer or phone. You can choose
+ the username that you would like to log in with.
+2. Create and backup your certificate. (This is part of the wizard for
+ the desktop client, and it might be automatic on a phone client.)
+3. Connect to mumble.emacsconf.org with your desired username.
+4. Register your account on the server using the ~Self > Register~
+ command. This reserves your username using your certificate and
+ allows me to add you to ACLs.
+5. Let me know (sachac on #emacsconf-org in IRC or
+ sacha@sachachua.com) when you've registered so that I can add you
+ to the access control lists for the private channels. If I'm around
+ on mumble (sachac), you can say hi to me there and confirm that
+ it's working.
+
+You can enter a channel by double-clicking on it. (On Mumla for
+Android, entering a channel is instead done by clicking on the arrow
+to the right of the channel.) Then your audio will go to that channel,
+and you can hear audio from that channel. We can use the
+~emacsconf-gen~ and ~emacsconf-dev~ channels to speak on air, and we
+can use the ~backstage~ channel for coordination.
+
+Looking forward to hearing from you!
+
+Sacha
+
+*** DONE Generate certificates, add them to conf.org, and register the users :sachac:
+CLOSED: [2022-11-08 Tue 11:33]
+*** DONE Set up Mumble and bring the volunteers on board
+CLOSED: [2022-11-21 Mon 18:07] SCHEDULED: <2022-11-26 Sat>
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 07:59]
+:END:
+
+| | Emailed | Onboarded |
+|------------+---------+------------------------------------------|
+| FlowyCoder | X | [2022-11-19 Sat] access granted, briefed |
+| jman | X | [2022-11-21 Mon] access granted, briefed |
+| vetrivln | X | [2022-11-19 Sat] access granted, briefed |
+
+*** DONE set up Mumble channels for host-dev and host-gen?
+CLOSED: [2022-11-26 Sat 22:22] SCHEDULED: <2022-11-27 Sun>
+ :PROPERTIES:
+ :CREATED: [2022-11-20 Sun 10:38]
+ :END:
+zaeph wants to make it easy to talk to the host without distracting them all the time
+
+*** DONE add dry-run check of whispering to hosts
+CLOSED: [2022-11-21 Mon 18:09] SCHEDULED: <2022-11-25 Fri>
+ :PROPERTIES:
+ :CREATED: [2022-11-20 Sun 10:34]
+ :END:
+
+** Satellite events
+:PROPERTIES:
+:CUSTOM_ID: satellite
+:END:
+*** Zurich
+**** DONE Link to satellite events on the wiki :bandali:
+CLOSED: [2022-11-21 Mon 13:53]
+https://200ok.ch/posts/2022-11-01_emacsconf__with_a_new_physical_venue.html
+
+on the watch page
+**** DONE announce on the emacsconf-discuss mailing list :bandali:
+CLOSED: [2022-11-21 Mon 13:53]
+** Volunteer update
+:PROPERTIES:
+:CUSTOM_ID: volunteer-2022-11-14
+:END:
+
+- talk banners, akshay
+
+** Make a linear hyperlist for managing EmacsConf :sachac:
+:PROPERTIES:
+:CUSTOM_ID: hyperlist
+:END:
+
+Goal:
+- Volunteers should be able to coordinate everything by stepping through a linear list of things to do
+- The hyperlist will primarily live on orga@res.emacsconf.org and be accessed through emacsclient. (Maybe sat.org and sun.org)
+- Volunteers should be able to take breaks as needed
+
+emacsconf-hyperlist-show-streamer-day
+
+[[#coordination][How do we want to coordinate during the conference itself?]]
+*** DONE Try writing it to an Etherpad
+CLOSED: [2022-11-14 Mon 14:14] SCHEDULED: <2022-11-19 Sat>
+
+*** DONE [#A] Revisit the hyperlists to make sure they make sense
+CLOSED: [2022-11-23 Wed 13:14] SCHEDULED: <2022-11-23 Wed>
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 07:49]
+:END:
+*** DONE [#B] Add intro notes and specific talk notes to the hyperlist
+CLOSED: [2022-11-22 Tue 11:29] SCHEDULED: <2022-11-22 Tue>
+*** DONE [#A] Make a hyperlist for checking people in for easier copying and pasting
+CLOSED: [2022-11-23 Wed 13:14] SCHEDULED: <2022-11-23 Wed>
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-23 Wed 10:15]--[2022-11-23 Wed 13:14] => 2:59
+:END:
+*** DONE Send FlowyCoder hyperlist for checking people in :mail:
+CLOSED: [2022-11-28 Mon 12:25] SCHEDULED: <2022-11-28 Mon>
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 09:26]
+:END:
+
+[[file:~/proj/emacsconf/wiki/2022/organizers-notebook/index.org::*Use Mumble for backchannel coordination and also on-stage][Use Mumble for backchannel coordination and also on-stage]]
+
+**** DONE [#A] make sure live talks are on the checkin list
+CLOSED: [2022-11-30 Wed 10:50]
+:PROPERTIES:
+:CREATED: [2022-11-28 Mon 21:38]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-30 Wed 09:38]--[2022-11-30 Wed 10:50] => 1:12
+:END:
+
+*** DONE Make backstage redirects for pad and qa so that hosts and streamers can have an easier time
+CLOSED: [2022-11-22 Tue 11:32] SCHEDULED: <2022-11-22 Tue>
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 13:54]
+:END:
+
+ex:
+https://media.emacsconf.org/2022/backstage/current/pad/journalism
+https://media.emacsconf.org/2022/backstage/current/room/journalism
+
+Pattern:
+https://media.emacsconf.org/2022/backstage/current/slug/pad
+https://media.emacsconf.org/2022/backstage/current/slug/room
+https://media.emacsconf.org/2022/backstage/current/pad/slug
+https://media.emacsconf.org/2022/backstage/current/room/slug
+
+
+*** CANCELLED [#B] Regenerate hyperlist if sched changes
+ CLOSED: [2022-11-23 Wed 13:17] SCHEDULED: <2022-11-23 Wed>
+ :PROPERTIES:
+ :CREATED: [2022-11-17 Thu 22:17]
+ :END:
+
+*** CANCELLED Put shell commands on a separate line so they're easy to select and run
+CLOSED: [2022-11-24 Thu 08:57] SCHEDULED: <2022-11-24 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-23 Wed 20:50]
+:END:
+
+*** DONE [#A] Make a hyperlist for hosts
+CLOSED: [2022-11-30 Wed 10:50]
+:PROPERTIES:
+:CREATED: [2022-11-29 Tue 21:19]
+:END:
+
+*** DONE [#A] Update etherpad hyperlist
+CLOSED: [2022-11-30 Wed 10:50]
+:PROPERTIES:
+:CREATED: [2022-11-29 Tue 21:19]
+:END:
+
+*** DONE Adjust audio levels from hyperlist
+CLOSED: [2022-11-30 Wed 13:03]
+:PROPERTIES:
+:CREATED: [2022-11-30 Wed 11:52]
+:END:
+*** TODO [#C] Adjust audio levels from hyperlist with a repeat-mode keymap
+
+*** DONE Link pamix to a konsole ssh
+CLOSED: [2022-12-01 Thu 09:31] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 07:47]
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-01 Thu 09:18]--[2022-12-01 Thu 09:31] => 0:13
+:END:
+*** DONE Add monitoring the streams to the hyperlist / shortcuts
+CLOSED: [2022-12-01 Thu 09:38] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 07:50]
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-01 Thu 09:31]--[2022-12-01 Thu 09:38] => 0:07
+:END:
+*** TODO Test hyperlist on obs and record quick demos
+SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CREATED: [2022-12-02 Fri 06:58]
+:END:
+
+** TODO [#C] Record intro/outro for day-1 and day-2 :zaeph:
+:PROPERTIES:
+:CUSTOM_ID: rec-intro
+:END:
+
+- Opening remarks Sat
+ - Welcome to EmacsConf 2022
+ - What's new at EmacsConf?
+ - This year, we have two tracks: General and Development.
+ - Prerecorded videos will be published as soon as possible (aiming
+ for publishing them as the talks stream), so you can check the
+ talk page for the video and the transcript a few minutes after the
+ talk starts.
+ - How to participate
+ - You can watch at live.emacsconf.org using free and open source software.
+ - Select the stream you're interested in.
+ - There are quick shortcuts on the watch page so that you can
+ open the Etherpad, Q&A, or IRC.
+ - We recommend adding notes asking questions in the Etherpad
+ for the talk. That way, it's easier to organize the
+ questions and answers, and the host can read questions out
+ to the speaker as needed.
+ - You can also use the track-specific IRC channels
+ (#emacsconf-gen and #emacsconf-dev).
+ - You can look at the schedule to see what else is going on.
+ - IRC:
+ - You can use #emacsconf for hallway conversations.
+ - If you need to reach conference organizers, you can use the
+ #emacsconf-org IRC channel or e-mail sacha@sachachua.com .
+ - General feedback in pad.emacsconf.org/2022
+ - Accessibility
+ - Streaming with open captions thanks to speakers and volunteers
+ - Talks indicated with "captioned" on the schedule
+ - Transcript available on talk pages
+ - Encourage people to add notes, questions, and answers to the
+ Etherpad, which will be archived as plain text on the talk
+ pages after the conference
+ - If you need additional support, ask in #emacsconf-accessible or #emacsconf-org
+- Closing remarks Sat
+ - Thanks
+ - Thank you to all the speakers and participants.
+ - This year's conference will be hosted by zaeph, bandali, and
+ vetrivln, and streamed by corwin, bandali, and jman.
+ - Thanks to our captioning volunteers: sachac, bhavin192, Tom
+ Purl, Hannah Miller, triko, and anush, and also to the speakers
+ who captioned their own talks. Thanks to quiliro for translating
+ the meetups talk into Spanish. and to Akshay Gaikwad for
+ contributing some designs.
+ - Thanks to the Free Software Foundation for the mailing
+ lists. Thanks to Ry P for the server that we're using for OBS
+ streaming and for processing videos.
+ - Come back tomorrow
+- Closing remarks Sun
+ - Thanks
+ -
+*** DONE Review opening remarks from last year
+CLOSED: [2022-11-25 Fri 11:29] SCHEDULED: <2022-11-24 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-24 Thu 07:17]
+:END:
+
+https://emacsconf.org/2021/talks/day1-open/
+
+** TODO [#C] Add category tags and possibly links between talks across 2022 and all previous years :quiliro:wiki:
+:PROPERTIES:
+:CUSTOM_ID: link-pages
+:END:
+
+- Prerequisite: Can edit wiki pages (https://emacsconf.org/edit/)
+- Goal: Make it easier for people to discover interesting related talks
+
+- List of talks for EmacsConf 2022: https://emacsconf.org/talks/
+- List of talks: https://emacsconf.org/talks/
+- List of categories: https://emacsconf.org/CategoryCategory/
+- To add something to a category, add =\[[!taglink CategoryName]]= to the bottom of its talk page (ex: 2022/talks/maint.md is in CategoryCommunity)
+- You can create new categories by making up new CategoryNames.
+- You can also link to a talk with a link like this: =\[[/2022/talks/maint|Maintaining the Maintainers: Attribution as an Economic Model for Open Source]]=
+ You can make a new heading called =# Related talks=
+** TODO [#C] JS/CSS enhancement :emacsconf:
+:PROPERTIES:
+:CREATED: [2022-10-22 Sat 15:15]
+:CUSTOM_ID: watch-css
+:END:
+
+*** TODO [#C] Add start and end attributes to the brief stuff for possible JS/CSS
+:PROPERTIES:
+:CREATED: [2022-10-20 Thu 22:26]
+:END:
+
+*** TODO [#C] Consider putting the subtitles outside the video https://stackoverflow.com/questions/61826237/is-there-a-simple-way-to-position-subtitles-below-the-hlml5-video :emacsconf:
+:PROPERTIES:
+:CREATED: [2022-11-22 Tue 15:00]
+:END:
+
+[[file:~/sync/orgzly/Inbox.org]]
+
+*** SOMEDAY [#C] Make video sticky and move it to the right :js:css:nextyear:
+
+https://webdesign.tutsplus.com/tutorials/how-to-create-a-sticky-floating-video-on-page-scroll--cms-28342
+
+** TODO [#C] Build up the ansible playbook :sachac:opal:
+:PROPERTIES:
+:CUSTOM_ID: ansible
+:END:
+git@git.emacsconf.org:pub/emacsconf-ansible
+
+Goals:
+
+Playbook will be able to reproduce:
+- [[#etherpad][Etherpad]]: probably okay to deploy on VPS
+- web-based file upload: probably in a docker
+- publishing environment for schedule etc.
+
+in prod or docker container
+
+*** DONE restreamers on live0
+CLOSED: [2022-11-22 Tue 08:37] SCHEDULED: <2022-11-24 Thu>
+[[#other-streams][Set up stream events on Toobnix and YouTube]]
+*** DONE icecast on live0
+CLOSED: [2022-10-29 Sat 09:56]
+:PROPERTIES:
+:Effort: 1:00
+:END:
+:LOGBOOK:
+[2022-10-20 Thu 12:36]
+:END:
+
+(find-file "/ssh:live|sudo::/etc/icecast2/icecast.xml")
+**** DONE Set up watch/gen-480p
+CLOSED: [2022-10-29 Sat 09:56]
+
+
+*** DONE publishing environment
+CLOSED: [2022-11-19 Sat 11:12]
+*** DONE Get ansible to run against a clean docker
+CLOSED: [2022-10-11 Tue 12:20]
+*** DONE Set up Etherpad with MySQL
+
+*** TODO Make the upload ansible configuration controllable via a variable
+:PROPERTIES:
+:CREATED: [2022-12-13 Tue 09:43]
+:END:
+** SOMEDAY [#C] Consider breakout rooms for lunch break
+:PROPERTIES:
+:CREATED: [2022-11-07 Mon 08:12]
+:CUSTOM_ID: breakouts
+:END:
+
+** CANCELLED [#C] Work on the OBS scenes :zaeph:corwin:sachac:
+CLOSED: [2022-11-28 Mon 00:21] SCHEDULED: <2022-11-27 Sun>
+:PROPERTIES:
+:CUSTOM_ID: obs-scenes
+:END:
+- [ ] corwin is out from Nov 11-20, and we should start working on them before then.
+** INPROGRESS [#C] Plan Etherpad use and hosting :sachac:ansible:
+:PROPERTIES:
+:CUSTOM_ID: etherpad
+:END:
+
+- Relevant links:
+ - Per-pad, nicely structured info with abstract, watching information, etc. CarpentryCon 2022 Schedule • CarpentryCon 2022 https://2022.carpentrycon.org/
+ - One pad per session: https://meta.wikimedia.org/wiki/Arctic_Knot_Conference_2021/Program#Friday,_June_25th
+ - [[https://community.jitsi.org/t/tutorial-etherpad-integration-in-jitsi-meetings/99697][Etherpad integration in Jitsi ]]
+
+- Good: One pad per session
+- Better: Some kind of monitoring so that we can link to the pads or embed
+ the pads even before the conference starts while not risking too
+ much vandalism
+- Best:
+ - Pad can be easily regenerated from Emacs Lisp with a check to see if people have been adding to it
+ - Pad links to next talks
+
+Where should we host this?
+- live0: gets scaled up the most, lots of people connect to it for the conference, didn't hit performance constraints last time
+- front0: lower risk of interfering with stream
+- bbb: will already be put on strain with the concurrent streams (test showed it was stable with up to 10 concurrent video streams and 40 total participants)
+- opal’s: no news from owner, but beefy server that we used for reencode last year
+- new Linode (probably 4GB or 8GB shared CPU): can easily be spun up, yay Ansible
+
+[[#ansible][Ansible notes]]
+
+Consider if we need extra scaling beyond being on a beefy live0?
+- Scale calculator: https://scale.etherpad.org/
+ - assuming 3 concurrent authors, 100 lurkers per pad, 3 concurrent pads
+ - 1 core, 4GB RAM, bandwidth Mb/s: 7.488
+- https://mclear.co.uk/2021/09/08/deploying-etherpad-at-scale-in-one-minute/
+- https://github.com/ether/etherpad-load-test
+
+Will need to try this again when we resize nodes. Probably just the extra memory will be enough and the CPU use from node won't step on the streaming, but not sure
+
+*** DONE Create pads for all the talks
+CLOSED: [2023-10-17 Tue 09:46] SCHEDULED: <2023-11-05 Sun>
+:PROPERTIES:
+:CUSTOM_ID: create-pads
+:CREATED: [023-10-13 Fri 10:1]
+:END:
+
+Because the pads refer to the next and previous talks and include the talk titles, this is best redone after the schedule has settled down.
+
+
+*** DONE Use the API to create pages based on all the slugs
+CLOSED: [2022-10-11 Tue 20:41]
+*** CANCELLED Figure out monitoring; maybe get everything daily and commit to git repo?
+CLOSED: [2022-10-12 Wed 20:31]
+History or regeneration will be fine. We'll probably link to it shortly before the event, and we can also turn off the service until we're ready.
+*** DONE Generate talk-specific pad content
+CLOSED: [2022-10-12 Wed 20:31]
+*** DONE Set up nginx reverse proxy
+CLOSED: [2022-10-13 Thu 12:19]
+*** DONE Load-test
+CLOSED: [2022-10-13 Thu 12:32]
+
+tl;dr: Either a separate 4GB Linode or being on live0 will probably be
+okay, but I'm not 100% sure due to the limitations of my load-testing
+setup. I don't know if we need to shard by pad.
+
+It looks like etherpad-load-test tends to max out at ~40 connections
+on a specific node. I used GNU Parallel to run the loadtesting tool
+against a 4GB Linode instance (shared CPU) from five nodes at the same
+time (my X220, my 2GB Linode instance, front0, and the node with the
+pad), and they all reached about 35-45 clients before failure (not
+updating within 100ms).
+
+#+begin_src sh :eval no
+echo 'node node_modules/etherpad-load-test/app.js http://170.187.195.5:9001 -d 120 > ~/output.txt' | parallel -J loadtest -j 1 --onall --verbose --tag
+#+end_src
+
+#+begin_src sh :eval no :results output replace
+echo 'grep Local ~/output.txt | tail -1' | parallel -J loadtest -j 1 --onall --tag
+#+end_src
+
+#+RESULTS:
+:results:
+: Local Clients Connected: 43
+front Local Clients Connected: 43
+live Local Clients Connected: 44
+root@170.187.195.5 Local Clients Connected: 38
+web Local Clients Connected: 42
+:end:
+
+Files were created at roughly the same time, so the max loads probably
+overlapped. It would be good to have finer control over the
+etherpad-load-test tool. Haven't figured out how to properly use ~-l~
+and ~-a~ yet.
+
+#+begin_src sh :eval no :results output replace
+echo 'stat -c %y ~/output.txt' | parallel -J loadtest -j 1 --onall --tag
+#+end_src
+
+#+RESULTS:
+:results:
+: 2022-10-13 12:42:32.212744774 -0400
+front 2022-10-13 16:42:34.466605650 +0000
+live 2022-10-13 16:38:46.818016379 +0000
+root@170.187.195.5 2022-10-13 16:39:01.738965567 +0000
+web 2022-10-13 12:39:14.417086960 -0400
+:end:
+
+CPU graph went only up to 5%. Network max was 2.36 Mb/s in, 1.25 Mb/s out.
+looking at top, CPU seems to go only up to about 12% or so.
+*** DONE Set up pad.emacsconf.org to point to live0.emacsconf.org :bandali:
+CLOSED: [2022-10-17 Mon 00:31] DEADLINE: <2022-11-12 Sat>
+*** DONE Set up letsencrypt
+CLOSED: [2022-10-16 Sun 14:42]
+Waiting for DNS
+add to /etc/dehydrated/domains.txt
+sudo sh -x /etc/cron.daily/renew-https-cert-local
+*** DONE [#A] Link to pad from talk page
+CLOSED: [2022-11-21 Mon 13:55] SCHEDULED: <2022-11-20 Sun>
+*** DONE Add links to general conference pad
+CLOSED: [2022-10-19 Wed 09:22]
+for collecting feedback
+*** TODO [#C] Prototype shift pads for easier scrolling
+if we can get the anchor plugin
+*** DONE Be able to fall back to wikimedia if necessary, maybe with nginx redirects
+CLOSED: [2022-10-13 Thu 13:55]
+*** DONE Export pad initial content HTML to make it easier to reimport into wikimedia or elsewhere
+CLOSED: [2022-10-13 Thu 13:46]
+~emacsconf-pad-export-initial-content-for-all-talks~
+*** SOMEDAY [#C] Cache pad times in a json or el :emacsconf:
+:PROPERTIES:
+:CREATED: [2022-11-22 Tue 22:06]
+:END:
+
+*** DONE Confirm that we can use the time slider to move back in time
+CLOSED: [2022-11-22 Tue 10:06]
+:PROPERTIES:
+:CREATED: [2022-11-22 Tue 10:00]
+:END:
+:LOGBOOK:
+- State "DONE" from "TODO" [2022-11-22 Tue 10:06]
+:END:
+
+*** TODO [#C] Consider monospace font for Etherpad? :nextyear:
+ :PROPERTIES:
+ :CREATED: [2022-11-27 Sun 09:00]
+ :END:
+
+** TODO [#C] Write about EmacsConf behind the scenes :sachac:
+SCHEDULED: <2022-12-26 Mon>
+:PROPERTIES:
+:CUSTOM_ID: writing
+:END:
+*** TODO Write about scheduling and tracks
+:PROPERTIES:
+:CREATED: [2022-12-04 Sun 20:41]
+:END:
+
+*** TODO Write about scheduling and summing up properties
+:PROPERTIES:
+:CREATED: [2022-12-04 Sun 20:41]
+:END:
+*** TODO Write about scheduling and SVG
+*** TODO Write about timers and todo state change hooks
+*** TODO Write about TRAMP and workaround of shifting talks
+*** TODO Write about OBS on VNC
+*** TODO Write about BBB redirects and opening things up
+*** TODO Write about ERC announcements
+*** TODO Write about copying files to backstage
+*** TODO Write about captions
+
+*** SOMEDAY Write about setup for vnc
+:PROPERTIES:
+:CREATED: [2022-11-29 Tue 18:38]
+:END:
+
+*** SOMEDAY Write about setting org properties from a region, looking at tables, summing it up
+:PROPERTIES:
+:CREATED: [2022-12-08 Thu 15:15]
+:END:
+
+*** SOMEDAY Record animation of changing the schedule
+:PROPERTIES:
+:CREATED: [2022-12-09 Fri 21:07]
+:END:
+
+*** SOMEDAY Write about mail merge
+:PROPERTIES:
+:CREATED: [2022-12-10 Sat 10:22]
+:END:
+
+*** #EmacsConf behind the scenes: Testing the schedule with SVGs
+
+#+begin_quote
+Org mode allows you to have inline images, and you can return them as the results of Org Babel
+blocks. I wanted to test different #EmacsConf scheduling strategies quickly. I used Emacs's XML and
+SVG support to create the SVGs based on the scheduling data I gave it. Splitting my window made it
+easy to change the schedule, use `C-c C-c` to execute the block, and see the schedule image
+(including any validation notes) in the other window. The code is in
+https://git.emacsconf.org/emacsconf-el/tree/emacsconf-schedule.el .
+
+[[https://emacs.ch/system/media_attachments/files/109/485/992/555/721/586/original/7bf3ab2a89fdcaec.png][Screenshot of how I tested #EmacsConf scheduling strategies using inline images in an Org file]]
+#+end_quote
+
+[[https://emacs.ch/@sachac/109486006078029919]]
+
+*** SOMEDAY https://graz.social/@publicvoit/109496340869869181
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 13:04]
+:END:
+
+publicvoit@graz.social - Organizers of online #video #conferences: take a look at the amazing work the organizers of #EmacsConf are doing with the pre- and post-processing of a 9 minute demo #video: https://emacsconf.org/2022/talks/orgsuperlinks/
+
+Subtitles, transcript, (Q&A from the live discussion are following), chapter marks, discussion thread from the #Etherpad used, ...
+
+I only wrote the 'Description' section and contributed the raw video file. It's really impressive what @sachac and the other organizers + volunteers are doing here.  
+
+* Ideas for next year :nextyear:
+:PROPERTIES:
+:CUSTOM_ID: maybe-projects
+:END:
+
+** Possible talks
+*** SOMEDAY Is eMacs worth using/learning for non programmers? I.e are there non programming applications for it?
+:PROPERTIES:
+:CREATED: [2023-01-10 Tue 08:18]
+:END:
+
+https://www.reddit.com/r/emacs/comments/107y169/is_emacs_worth_usinglearning_for_non_programmers/
+Interesting comments
+
+** SOMEDAY https://www.reddit.com/r/i3wm/comments/b1hgxm/i3wm_over_vnc_with_dual_monitors/?utm_source=share&utm_medium=android_app&utm_name=androidcss&utm_term=2&utm_content=share_button might be interesting to have dual monitors next year
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 22:42]
+:END:
+
+** SOMEDAY Suggest public submissions next time
+ :PROPERTIES:
+ :CREATED: [2022-09-22 Thu 21:09]
+ :END:
+would it be interesting to see if other people can build on what's submitted?
+
+** SOMEDAY [#C] Match /names with speakers, maybe make a page with people currently online
+ :PROPERTIES:
+ :CREATED: [2022-10-01 Sat 23:58]
+ :END:
+
+** SOMEDAY EmacsWiki: Erc Robot
+ :PROPERTIES:
+ :CREATED: [2022-10-01 Sat 21:11]
+ :END:
+
+https://www.emacswiki.org/emacs/ErcRobot
+
+After I get ikiwiki sorted out, I can use Erc to control it so that I can test it a lot before letting it mess with the real thing
+
+Goals:
+Update schedule
+Publish prerec when talk is playing
+
+*** SOMEDAY [#C] Irc bot for opening
+SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 22:35]
+:END:
+
+notice the message
+open the Q&A specified by slug, or look it up from the channel
+
+** TODO Consider making a bot to support announcing, updating, publishing, who's here, announcing when speakers are here
+ :PROPERTIES:
+ :CREATED: [2022-10-03 Mon 23:43]
+ :END:
+
+https://salsa.debian.org/rhonda/schedulebot
+
+- announces:
+ - $talk will start in $min minutes
+ - $talk has just begun
+ - $talk has just finished
+- seen
+
+** SOMEDAY indentation - CSS - successive indenting of siblings after headings - Stack Overflow
+ :PROPERTIES:
+ :CREATED: [2022-10-07 Fri 21:15]
+ :END:
+
+https://stackoverflow.com/questions/31872535/css-successive-indenting-of-siblings-after-headings
+
+** SOMEDAY html - Indent everything after h1, h2, etc. before the next, one, while stacking the indents, with CSS - Stack Overflow
+ :PROPERTIES:
+ :CREATED: [2022-10-07 Fri 21:13]
+ :END:
+
+https://stackoverflow.com/questions/69711847/indent-everything-after-h1-h2-etc-before-the-next-one-while-stacking-the-in
+
+** Video
+*** SOMEDAY infrastructure/source-recording.sh at master · FOSDEM/infrastructure
+ :PROPERTIES:
+ :CREATED: [2022-10-04 Tue 00:11]
+ :END:
+
+https://github.com/FOSDEM/infrastructure/blob/master/ansible/playbooks/roles/video-bbb/files/scripts/source-recording.sh
+
+*** SOMEDAY c3voc/voctomix - Docker Image | Docker Hub
+ :PROPERTIES:
+ :CREATED: [2022-10-04 Tue 00:09]
+ :END:
+
+https://hub.docker.com/r/c3voc/voctomix/
+
+*** SOMEDAY DebConf video team / vogol · GitLab
+ :PROPERTIES:
+ :CREATED: [2022-10-04 Tue 00:07]
+ :END:
+
+https://salsa.debian.org/debconf-video-team/vogol
+
+*** SOMEDAY roles/vogol · master · DebConf video team / ansible · GitLab web interface for voctomix
+ :PROPERTIES:
+ :CREATED: [2022-10-04 Tue 00:06]
+ :END:
+
+https://salsa.debian.org/debconf-video-team/ansible/-/tree/master/roles/vogol
+
+*** SOMEDAY CarlFK/veyepar: Video Eyeball Processor and Review
+ :PROPERTIES:
+ :CREATED: [2022-10-04 Tue 00:02]
+ :END:
+
+https://github.com/CarlFK/veyepar
+
+*** SOMEDAY timvideos/streaming-system: Tim Video's - Live Streaming for user groups and other events.
+ :PROPERTIES:
+ :CREATED: [2022-10-04 Tue 00:01]
+ :END:
+
+https://github.com/timvideos/streaming-system
+
+*** SOMEDAY <no title> — DebConf Videoteam Ansible documentation
+ :PROPERTIES:
+ :CREATED: [2022-10-03 Mon 23:40]
+ :END:
+
+https://debconf-video-team.pages.debian.net/ansible/ansible_roles/etherpad.html
+
+*** SOMEDAY DebConf video team / ansible · GitLab
+ :PROPERTIES:
+ :CREATED: [2022-10-03 Mon 23:38]
+ :END:
+
+https://salsa.debian.org/debconf-video-team/ansible
+
+** SOMEDAY handprint · PyPI
+ :PROPERTIES:
+ :CREATED: [2022-11-14 Mon 23:22]
+ :END:
+
+https://pypi.org/project/handprint/
+That might be interesting for reviewing text recognition output
+
+** TODO Update websocket
+ SCHEDULED: <2022-12-18 Sun>
+
+** TODO Idea for next year: save talk details in an org note so that I can easily send e-mails comparing previous with current
+ :PROPERTIES:
+ :CREATED: [2022-11-20 Sun 10:31]
+ :END:
+
+[[file:~/proj/emacsconf/wiki/2022/speakers.md::you beforehand.]]
+
+** DONE What ideas do we want to borrow from other conferences?
+:PROPERTIES:
+:CUSTOM_ID: other-confs
+:END:
+
+- FOSDEM had a conference track
+ - https://archive.fosdem.org/2022/schedule/track/conference_organisation/
+- DebConf
+ - Thorough documentation at https://debconf-video-team.pages.debian.net/docs/
+ - https://debconf-video-team.pages.debian.net/docs/online_volunteer_roles.html
+ - Ansible: https://salsa.debian.org/debconf-video-team/ansible , https://debconf-video-team.pages.debian.net/ansible
+ - SReview for cutting videos?
+ - https://wiki.debian.org/Teams/DebConf/Video/Subtitles
+ - Pentabarf https://lists.debian.org/debconf-team/2008/08/msg00147.html
+ - Schedule shows local time and DebConf time: https://debconf21.debconf.org/schedule/
+- LibrePlanet https://libreplanet.org/2022/
+ - libreadventure, minetest?
+
+ - https://www.collabmagazine.com/organizing-a-multi-track-virtual-conference-with-microsoft-teams-live-events-a-technical-playbook-and-lessons-learned/ : 4-person team, post-prod, break commercials
+
+*** SOMEDAY virtual-conf-resources/foss-north.md at master · e8johan/virtual-conf-resources
+ :PROPERTIES:
+ :CREATED: [2022-10-01 Sat 23:50]
+ :END:
+
+https://github.com/e8johan/virtual-conf-resources/blob/master/foss-north.md
+
+*** SOMEDAY e8johan/virtual-conf-resources: Resources for virtual conferences
+ :PROPERTIES:
+ :CREATED: [2022-10-01 Sat 23:49]
+ :END:
+
+https://github.com/e8johan/virtual-conf-resources
+
+** TODO Consider hosting reveal.js for EmacsConf
+:PROPERTIES:
+:CREATED: [2022-11-25 Fri 10:55]
+:END:
+** TODO back up media and bbb
+SCHEDULED: <2023-01-26 Thu>
+ :PROPERTIES:
+ :CREATED: [2022-11-27 Sun 13:07]
+ :END:
+
+** TODO figure out how zaeph can run ansible
+:PROPERTIES:
+:CREATED: [2022-12-02 Fri 08:23]
+:END:
+** TODO [#A] Check that the restreams can handle hiccups
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 07:48]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-01 Thu 12:39]--[2022-12-01 Thu 18:36] => 5:57
+:END:
+
+
+https://toobnix.org/w/dmibQFkBTNcJyTVVQTyd5C
+
+ugh might need to restart restreams
+PTS 233286211, next:63716000 invalid dropping st:0
+DTS 233286223, next:63828674 st:1 invalid dropping
+
+screen -S restream-test-toobnix -X quit; screen-restream-test-toobnix.sh
+screen -S restream-test-youtube -X quit; screen-restream-test-youtube.sh
+screen -S restream-gen-toobnix -X quit; screen-restream-gen-toobnix.sh
+screen -S restream-gen-youtube -X quit; screen-restream-gen-youtube.sh
+screen -S restream-dev-toobnix -X quit; screen-restream-dev-toobnix.sh
+screen -S restream-dev-youtube -X quit; screen-restream-dev-youtube.sh
+
+ugh sound timestamps get all messed up
+
+** TODO Figure out how to have a test talk for publishing
+:PROPERTIES:
+:CREATED: [2022-12-02 Fri 09:03]
+:END:
+** TODO figure out back button
+:PROPERTIES:
+:CREATED: [2022-12-02 Fri 21:45]
+:END:
+
+<bandali> hmm, for some reason with firefox the back button doesn't seem to
+ work as expected on after clicking on one of the tracks on
+ live.emacsconf.org [21:44]
+<bandali> seems like there's an additional redirect or something. doesn't
+ matter too much tho [21:45]
+
+** TODO Erc bot so bandali and zaeph can check time remaining
+:PROPERTIES:
+:CREATED: [2022-12-02 Fri 16:16]
+:END:
+
+** TODO make hotkeys for kicking the 480p streams
+:PROPERTIES:
+:CREATED: [2022-12-04 Sun 14:52]
+:END:
+** SOMEDAY Add timezones to all schedules
+:PROPERTIES:
+:CREATED: [2022-12-04 Sun 20:40]
+:END:
+
+** SOMEDAY https://social.coop/@jotaemei/109456544613400591
+:PROPERTIES:
+:CREATED: [2022-12-04 Sun 18:10]
+:END:
+
+jotaemei@social.coop - This year’s #Emacs Conference is taking place right now; its official website is naturally RMS/FSF/MIT flavored. The video feed is not working on my mobile phone browser. So, the alternative instructions are to open a link in MPV (will VLC work?) on a desktop. The event times that are given in the schedule do not display a timezone. And presentation notes and collection of audience questions are provided via Etherpad. 😆 I hope the recordings will be available. ☺️ https://emacsconf.org/2022/watch/dev/
+
+** SOMEDAY Consider idle timer for wiki publishing the wiki, at for running things
+:PROPERTIES:
+:CREATED: [2022-12-03 Sat 21:21]
+:END:
+
+** SOMEDAY Re: How to avoid the user triggering "Forbidden reentrant call of Tramp"
+:PROPERTIES:
+:CREATED: [2022-12-03 Sat 20:32]
+:END:
+
+https://lists.gnu.org/archive/html/tramp-devel/2021-04/msg00036.html
+
+** TODO Make it easier to ship a last-minute update
+
+1. Upload file to backstage
+2. make all
+3. Copy to orga@res:~/stream
+4. Sync it to orga@res:~/cache
+
+** SOMEDAY [#C] Add timezone note above every schedule table
+:PROPERTIES:
+:CREATED: [2022-12-03 Sat 01:41]
+:END:
+
+** TODO Braindump things that worked well and things I'm looking forward to tweaking
+SCHEDULED: <2022-12-05 Mon>
+** TODO Incorporate zaeph's braindump
+** SOMEDAY https://social.coop/@jotaemei/109468491432592197
+:PROPERTIES:
+:CREATED: [2022-12-06 Tue 15:57]
+:END:
+
+jotaemei@social.coop - @sachac I like this idea of a timezone converter for people displayed on (or by) the listing. For me, the cause was that I was trying to find my way around the site at the last second and was afraid I’d missed a presentation I saw someone post earlier about coming up, but I think it was just that the speakers were running a little behind schedule.
+
+** SOMEDAY Add export/txt to the pad announcements next year - dto
+:PROPERTIES:
+:CREATED: [2022-12-05 Mon 23:16]
+:END:
+
+** TODO Learn from other conferences
+*** Neovimconf
+*** SOMEDAY Normconf: The Normcore Tech Conference
+:PROPERTIES:
+:CREATED: [2022-12-07 Wed 00:09]
+:END:
+
+https://normconf.com/
+** SOMEDAY Look into properly streaming to YouTube, Toobnix, and 480p
+:PROPERTIES:
+:CREATED: [2022-12-08 Thu 21:27]
+:END:
+
+** TODO Consider practising with ffmpeg in the cloud so that we can handle last-minute submissions
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 11:07]
+:END:
+
+https://cloud.google.com/functions/docs/console-quickstart-1st-gen
+https://aws.amazon.com/marketplace/pp/prodview-ixe3igo3gsu24#pdp-pricing
+or a VM
+
+*** TODO https://github.com/tuomastik/ffmpeg-google-cloud
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 11:07]
+:END:
+
+https://cloud.google.com/functions/docs/console-quickstart-1st-gen
+
+*** SOMEDAY Investigate bacalhau compute over data
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 17:14]
+:END:
+
+*** SOMEDAY Using video transcoding on Amazon ECS - Amazon Elastic Container Service
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 20:52]
+:END:
+
+https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-vt1.html
+
+** SOMEDAY Add timer for 5 minute and 2 minute warnings to go to emacsconf-org
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 16:36]
+:END:
+
+** TODO make the Org agenda versions more visible
+:PROPERTIES:
+:CREATED: [2022-12-13 Tue 10:54]
+:END:
+** SOMEDAY Explore idea of OBS virtual webcam showing the question vs screenshare
+:PROPERTIES:
+:CREATED: [2022-12-13 Tue 16:38]
+:END:
+
+** SOMEDAY Ideas for people to reach out to for talks?
+*** Using emacs mail to prefilter mail
+https://www.reddit.com/r/emacs/comments/zp0qn6/a_tragic_story_of_emacs_lover/j0r7i1f/
+
+** SOMEDAY Check ffmpeg benchmarks and recommendations; can we speed up our encoding for last-minute submissions?
+:PROPERTIES:
+:CREATED: [2022-12-13 Tue 15:38]
+:END:
+
+*** SOMEDAY https://www.reddit.com/r/AV1/comments/k7colv/encoder_tuning_part_1_tuning_libvpxvp9_be_more/?utm_source=share&utm_medium=android_app&utm_name=androidcss&utm_term=2&utm_content=share_button
+:PROPERTIES:
+:CREATED: [2022-12-13 Tue 20:58]
+:END:
+
+** TODO https://owncast.online/faq/
+:PROPERTIES:
+:CREATED: [2022-12-23 Fri 10:46]
+:END:
+
+instead of Icecast? uses RTMP
+** STARTED Jingle
+:PROPERTIES:
+:CREATED: [2022-12-09 Fri 08:46]
+:Effort: 0:15
+:QUANTIFIED: Emacs
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-09 Fri 09:15]
+:END:
+
+[02:38] <dto> tweaked it https://usercontent.irccloud-cdn.com/file/akHATPq3/emacsconf.ogg
+
+* Things to figure out / decisions to make
+:PROPERTIES:
+:CUSTOM_ID: decisions
+:END:
+
+#+TOC: headlines 1 local
+** Do we want to drop talks?
+:PROPERTIES:
+:CUSTOM_ID: drop
+:END:
+
+- *Keep the slot open, allow people to speak live*
+ - If they don't show up, continue with previous Q&A or have an open room
+
+
+** How do we want to coordinate during the conference itself?
+:PROPERTIES:
+:CUSTOM_ID: coordination
+:END:
+
+- Considerations:
+ - Good to have something that the hosts and streamers can walk through step by step
+ - Do we want the check-in volunteer to also keep something
+ - Announcing and publishing are easier if the task states are updated
+
+- Mumble for walkie-talkie communications?
+ - Can we keep it off the stream more reliably, but still be able to choose to put it on the stream?
+ - We can keep it in the combined sink and then manually go to that
+ channel in our clients when we want to talk on stream
+ - Should we have a Gen channel and a Dev channel so that we can choose to speak into ?
+- Checklist
+ - Etherpad
+ - All the volunteers can access it easily
+ - Tasks can be updated through SSH commands
+ - conf.org
+ - Run Emacs commands directly from it
+ - A little trickier in terms of access
+
+** How do we want to make the full schedule more manageable?
+:PROPERTIES:
+:CUSTOM_ID: sched-decision
+:END:
+
+Host role:
+- Give the speaker a heads-up before their Q&A session begins
+- If needed, read the questions from the pad to the speaker (Many speakers are comfortable reading the pad on their own.)
+- Give the speaker time warnings before the end of their Q&A session on the stream. Interested participants can continue
+
+Streamer role:
+- Switch between playing the prerec and joining the Q&A session
+- Adjust audio volume at the beginning of the Q&A session
+- (optional) Switch scene layouts to focus on different things
+
+Shifts will be Sat AM, Sat PM, Sun AM, or Sun PM per track. People can take multiple shifts.
+
+https://emacsconf.org/2022/decisions/#schedule
+
+- Figure out how hosting can be done in shifts
+ - Add notes in one place
+- Figure out how streaming can be done in shifts: OBS in the cloud?
+ - [[*Investigate streaming options, maybe OBS in the cloud][Investigate streaming options, maybe OBS in the cloud]]
+- Figure out how publishing can be done in shifts
+ - Console Emacs in a VM with everything set up for publishing to the wiki
+
+[2022-10-04 Tue]
+- Added option H: general starts with general Org use cases and moves on to more niche things on day 2.
+ - compared to A, general audience will be more interested in Org use
+ cases than in Hyperbole, and then we can look at specific
+ techniques on day 2
+
+[2022-10-04 Tue]
+- Discussed option G with zaeph on #emacsconf-org. zaeph prefers
+ option A over option G because it gives people more choices -
+ they can hop from talk to talk.
+
+[2022-10-03 Mon]
+- Discussed with bandali and zaeph on #emacsconf-org
+- Decided on Option A with B, C, or F as fallbacks depending on volunteer roster
+- Better for the viewers and the volunteers
+
+** Do we want to skip the closed Q&A and go straight to open?
+:PROPERTIES:
+:CUSTOM_ID: closed
+:END:
+
+- Closed: Less moderation needed in the beginning
+- Open: less coordination needed (since the host doesn't have to either tell me that it's okay to open it up or change the task status themselves), and people are generally good at meeting etiquette
+** How much do we want to enrich the wiki with JS?
+:PROPERTIES:
+:CUSTOM_ID: wiki-design
+:END:
+Ideas to consider:
+- Toggling local time display on the schedule
+- Making organizers-notebook nicer to browse through (or maybe use organice?)
+- Improve the video player (resolution switching? chapter markers?) - https://github.com/sampotts/plyr for video?
+
+*** SOMEDAY [#C] ?: Figure out JS and CSS niceties that will make organizers-notebook more enjoyable to browse through :css:js:
+
+
+- TODO/DONE/etc. keyword highlighting?
+- Collapsible sections?
+*** SOMEDAY [#C] ?: Find a way to add JS libraries to the wiki but shield them from anon editing :js:
+gitolite should have some options to do this
+*** SOMEDAY [#C] ?: Beautify video players :js:css:
+Might not be necessary.
+** How do we want to make better use of Etherpad?
+:PROPERTIES:
+:CUSTOM_ID: pad-decision
+:END:
+Pain points:
+- Lots of scrolling for speakers
+- Takes some effort to move questions from IRC to the pad
+*** How many pads do we want?
+- One pad for everything
+ - Scroll down, down, down
+ - Easy to set up at the beginning
+ - Inertia
+- One pad per set of talks (Saturday AM, Saturday PM, Sunday AM, Sunday PM)
+ - Less scrolling
+- One pad per talk, plus one meta pad
+ - Very little scrolling
+ - Can send people directly to the pad
+*** Do we want to host our own?
+- Use etherpad.wikimedia.org
+ - Worked fine last year
+- Host our own
+ - Might be able to use API to append questions to it, if we want to get super fancy
+*** Do we want to embed the pad as an iframe on the watch page? on talk pages?
+This guides people to use the pad for discussion/questions instead of IRC
+
+Options:
+
+- Current: None, just a link
+- Big pad on the watch page:
+- Individual pads:
+ - Watch page needs to be updated with current pad and link to previous pad
+ - Individual talk page can embed the iframe
+- Embed the IRC channel instead
+
+** Can we nudge people to ask IRC questions in a way that will make it easier for us to follow them?
+:PROPERTIES:
+:CUSTOM_ID: irc-markers
+:END:
+
+Two tracks mean two IRC channels with lots of space for Q&A, so this may become less of an issue
+
+Pain points:
+
+- Q&A/discussions often overlap with the next talks
+- Sometimes questions don't get copied to the pad
+- Fast discussions can get overwhelming
+
+Ideas:
+
+- Announce pad link at the beginning of the talk and at the start of
+ live Q&A, encourage most people to ask questions there
+- Encourage people to start questions with Q:
+ - A little extra work, but not as much as including the slug
+ - Easier to pick out when people search
+ - Volunteers can restate questions easily if people forget the Q:
+- Encourage people to start questions with Q-slug: (ex: Q-news: question about Emacs News Highlights, Q-journalism: ...)
+ - Easier to pick out questions even with overlapping Q&A/talks
+- Use two or three IRC channels so that talks can rotate among channels
+ - Easier to pick out questions even with overlapping Q&A/talks
+ - Needs logging and more organizer attention
+- Maybe a volunteer can have an ERC command that copies a question into a buffer, or even into the Etherpad
+** Do we want people to advertise any openings with their companies or any work that they're looking for?
+:PROPERTIES:
+:CUSTOM_ID: advertising
+:END:
+
+- Speakers on their page?
+- General audience on a wiki page somewhere?
+
+** Decision archive
+:PROPERTIES:
+:CUSTOM_ID: decision-archive
+:END:
+*** Where should volunteers e-mail?
+:LOGBOOK:
+- Note taken on [2022-09-23 Fri 11:26] \\
+ Discussed in #emacsconf-org
+:END:
+
+- *Default to emacsconf-org and offer emacsconf-org-private as an option*
+- emacsconf-org-private
+ - less public, e.g. if for whatever reason we might have to decline an offer of help
+ - Also, some people want to volunteer but do not want to be in the public’s eye.
+- emacsconf-org
+ - If you’re thinking about the enticement factor of having people
+ volunteer publicly, we’ll still have a well-furnished list of people
+ helping us run the conf somewhere on the wiki. [11:22]
+ - i would think if someone doesn't want to do it publicly, they could
+ opt to write to -org-private instead, but otherwise the defacto
+ should be public (-org)
+ - i just think most folks would want to do this publicly unless for
+ specific reasons, rather than the other way around
+
+*** CANCELLED Do we want to do alt-stream the same way again this year?
+
+Superseded by decision to have multiple tracks
+
+- Alt stream joins the current session and then continues with it until the Q&A finishes; people join the BBB room if they want to ask questions
+ - Nice and convivial, Q&A still gets captured
+ - Inertia means most people get the main message
+- Multiple streams with more space between talks, people choose which stream they want to watch
+ - How other conferences do it
+ - Speakers can attend related talks more easily
+*** DONE Shall we put a generic e-mail address for sending feedback, maybe with different mailtos?
+CLOSED: [2022-10-07 Fri 14:45]
+Pain points:
+- Many talk pages don't have public e-mail addresses, so it takes a
+ little extra work (or is sometimes impossible) for people to follow
+ up if they have questions
+
+Options:
+- Do nothing (current)
+- Add a mailto link to emacsconf-discuss that prepopulates the subject
+- Add a mailto link to emacsconf-org
+ - Wider discussion
+- *Add a mailto to emacsconf-org-private*
+ - Private feedback that can be forwarded to the speaker
+
+*** DONE How many BBB rooms do we want to set up?
+:PROPERTIES:
+:CUSTOM_ID: bbb-rooms
+:END:
+
+- One per talk
+ - We can send speakers a direct link to their room and they can check into it themselves
+ - Needs a little more work when setting up rooms and when extracting videos
+ - Easier for the host to join
+ - Check-in person can just keep an ear open in that room
+- Five or so, rotating among them
+ - Check-in person directs the speaker to the next available room
+ - Worked fine last time
+*** DONE How easy do we want to make it to join the BBB session?
+:PROPERTIES:
+:CUSTOM_ID: bbb-join
+:END:
+Considerations:
+- It's easier for the checkin person to deal with only the speaker
+- We may not want people to join the Q&A session at the beginning
+- We want to make it easy for people to join the Q&A session eventually
+
+Options:
+
+- PROBABLY EASIEST: Set it to anyone can join, but the meeting needs to be started by a
+ moderator. Start the meeting on the day of the talk. Announce the
+ BBB URL in the pad, IRC channel, and on the talk page when the host
+ is ready. Maybe add a rewrite rule when the host is ready.
+- Set an access code. Announce the access code when the host is ready.
+ - Access codes are annoying to copy and paste.
+ - Access codes might get accidentally unset or regenerated.
+- Set room so that moderators have to approve waiting users.
+ - Check-in has to watch out for waiting speaker.
+ - Host sets it to accept everyone who's waiting when the host is ready.
+ - Changing it to turn the option off doesn't seem to affect an
+ ongoing meeting, even though the web interface says you should be
+ able to change the setting any time.
+ - Waiting users don't make the user notification go ding.
+
+Change talk status to OPEN_Q or UNSTREAMED_Q, and change to TO_ARCHIVE when done.
+M-x emacsconf-publish-bbb-redirect to update the redirect for a single talk
+M-x emacsconf-publish-bbb-redirect-all updates all the redirects
+**** DONE Add nginx redirect from emacsconf.org
+CLOSED: [2022-11-19 Sat 11:17]
+/ssh:front|sudo::/etc/nginx/sites-available/emacsconf.org
+*** DONE How do we want to name the BBB rooms?
+CLOSED: [2022-10-19 Wed 11:08]
+:PROPERTIES:
+:CUSTOM_ID: bbb-name
+:END:
+
+Needs to be easy to:
+- share all the BBB rooms for a particular shift with the check-in volunteer
+- start the BBB rooms for the morning
+- match up the recordings with the talks afterwards
+- find the BBB room for a talk or speaker
+- remove all the BBB rooms for the year
+
+ec22-sat-am-dev Speaker Name (slugs)
+
+*** SOMEDAY [#C] Do we want to make the ikiwiki web-editable?
+:PROPERTIES:
+:CUSTOM_ID: cgi
+:END:
+Pain points:
+- Speakers usually ended up going through us
+
+Options:
+- Web-editable:
+ - Speakers and general public will be able to edit it more easily
+- Git: (current)
+ - Haven't had a problem with spam
+ - Reduces merge conflict potential
+
+** TODO Think about what to do with schedule gaps due to cancelled talks :thoughts:
+SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 17:30]
+:CUSTOM_ID: schedule-gaps
+:END:
+
+- if the previous Q&A is still going, we can stream that one
+- if there are no previous Q&As running, options:
+ - just leave it on the in-between slide: no extra effort required
+ - host a breakout room in [[https://media.emacsconf.org/current/bbb-open.html][ec22-open]]: gives people someplaco to go, might lead to interesting conversatinos
+- big gaps: consider:
+ - substitute talk
+ - rearrange conference schedule
+ - just show the IRC
+ - replay talks from previous years
+
+*** SOMEDAY [#C] Consider fillers covering conference stuff :thoughts:
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 17:43]
+:END:
+
+** CANCELLED Split rms into two talks?
+CLOSED: [2022-12-01 Thu 09:17] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-29 Tue 23:06]
+:CUSTOM_ID: rmstedsplit
+:END:
+
+- Split into a separate talk:
+ - Can more easily have intros
+ - Can post the transcript to the talk page
+- Same talk, stream files:
+ - Might as well learn how to do that anyway
+
+*** DONE Figure out what to do about rms sequence
+CLOSED: [2022-12-01 Thu 09:17] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-30 Wed 22:26]
+:END:
+
+Keep it at one talk, but figure out stream files thing
+
+* Roles needed
+:PROPERTIES:
+:CUSTOM_ID: roles
+:END:
+Each role comprises different responsibilities. A person may have multiple roles. An organizer might take the lead for a role, but if you want to volunteer, speak up and they'll probably be glad to share the load.
+
+Some roles are also described on the https://emacsconf.org/2022/volunteer page. If you want to encourage people to volunteer to help, add a role description there.
+** During the proposal stage
+
+The roles below are related to the proposals in the early stages of the preparation.
+
+- Scheduler (SCHED: sachac)
+ - Process talks as they come and find the best place for them in the timeline
+ - Keep track of availability and thematic constraints and find solutions that accommodate most
+- Reviewer
+ - Review the proposals sent to emacsconf-submit before the speaker-notification deadline
+ - Raise flags if there are problems with a proposal (e.g. too much content for the short format)
+- Listener
+ - Receive emails from emacsconf-submit
+ - Ensure that candidates are sticking to the prescribed format (esp. the 10/20/40 duration rule)
+ - Respond to people's requests and suggestions, pulling in other people to help as needed
+- Publisher (PUB: sachac)
+ - Set up the wiki page
+- Infrastructure
+ - Figure out streaming options
+ - Set up file upload system that speakers will use
+ - Plan other systems that people will use
+
+** When speakers have submitted their pre-recorded videos
+
+- Copy to backstage as --original.webm and --main.webm using M-x emacsconf-upload-copy-from-json
+- Copy to res /data/emacsconf/2022
+- Start /data/emacsconf/2022/process-captions.py if it's not already running
+- Use ~zaeph/scripts/reencode.sh on the file as well
+
+- Video processor (zaeph)
+ - Standardize and compress uploaded videos
+- Caption lead (sachac)
+ - Prepare videos and starting captions for captioning volunteers
+- Captioner
+ - Edit automatically-generated captions to correct misrecognized words
+ - Nice to have: Break up the captions in better places so that subtitles are neither too long nor too short
+ - Perk: Get access to prerecorded videos
+- Quality checker
+ - Doublecheck videos for potential encoding issues or compression artifacts that get in the way of viewing
+ - Doublecheck captions
+- Tech checker
+ - Help speakers check that their system works well with BBB for live Q&A
+
+** During the conference
+- Streamer (STREAM)
+ - Download prerecorded videos
+ - Send the combined stream to Icecast for broadcasting
+- Director (DIR: corwin) - possibly same as streamer
+ - Switch scenes, manage audio volumes as needed
+ - Provide timekeeping information to host (especially go-live countdowns)
+- Host (HOST: zaeph)
+ - Introduce talks and speakers
+ - Read questions
+ - Give time warnings
+ - Thank speakers and transition to next talk
+- Timekeeper - possibly same as host
+ - Manage time based on all available information (prerecs durations, speakers not showing up, etc.)
+- Check in (CHECK)
+ - Notice speakers checking into IRC
+ - Get them into the correct room and help them doublecheck their audio and video quality
+ - Troubleshoot as needed
+ - Notify host about next room to join
+ - Follow up with speakers who haven't checked in yet
+ - Check on speakers periodically so that they're not waiting alone
+- Questions
+ - Copy questions from IRC and the pad to wherever the host and speaker are looking
+- Pad scribe
+ - Organize and format people's contributions
+ - Add notes about links, key points, questions, answers
+- Accessibility (ACCESS: dto)
+ - Describe visuals in #emacsconf-accessible
+ - Nice to have: echo the captions into #emacsconf-accessible
+- Quality checker
+ - Doublecheck stream quality and audio volume
+- Publisher (PUB: sachac)
+ - Announce talks in the IRC channels
+ - Nice to have: Update the wiki page with resources (video)
+ - Nice to have: Set resources to public as each talk is played (Toobnix, YouTube)
+ - Nice to have: Update the schedule to reflect changes throughout the day
+*** Shifts
+:PROPERTIES:
+:CUSTOM_ID: shifts
+:END:
+
+#+BEGIN_EXPORT md
+<a name="shifts"></a>
+#+END_EXPORT
+
+AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition)
+
+Saturday Dec 3
+#+NAME: saturday-shifts
+| | Host | Streamer | Checkin | IRC | Pad | Coord |
+|--------+---------+----------+------------+---------+------------+--------|
+| Gen AM | zaeph | sachac | corwin | dto | publicvoit | sachac |
+| Gen PM | zaeph | sachac | FlowyCoder | bandali | publicvoit | sachac |
+| Dev AM | bandali | sachac | corwin | dto | | sachac |
+| Dev PM | bandali | sachac | FlowyCoder | bandali | | sachac |
+
+publicvoit - pad until 4pm on Sat, until 2pm on Sun
+
+Sunday Dec 4
+#+NAME: sunday-shifts
+| | Host | Streamer | Checkin | IRC | Pad | Coord |
+|--------+---------+----------+------------+---------+------------+--------|
+| Gen AM | zaeph | sachac | corwin | dto | publicvoit | sachac |
+| Gen PM | zaeph | jman | FlowyCoder | bandali | publicvoit | sachac |
+| Dev AM | bandali | sachac | corwin | dto | | sachac |
+| Dev PM | bandali | sachac | FlowyCoder | bandali | | sachac |
+
+Backups:
+- dev host/streamer: bandali, sachac
+- gen host/streamer: zaeph, sachac
+- checkin, IRC, pad: sachac
+
+Interested in a shift? Please e-mail [[mailto:emacsconf-org-private@gnu.org]] and we'll help you figure out what you need to learn.
+
+#+begin_src emacs-lisp :var sat=saturday-shifts :var sun=sunday-shifts :rownames no :colnames no :results verbatim replace
+`(setq emacsconf-shifts
+ (list
+ ,@(apply #'append
+ (mapcar
+ (lambda (day)
+ (let ((headers (mapcar (lambda (field) (intern (concat ":" (downcase field))))
+ (cdr (car (cadr day))))))
+ (mapcar
+ (lambda (row)
+ (apply #'append
+ (list 'list :id
+ (when (string-match "^\\([^ ]+\\) \\(AM\\|PM\\)" (car row))
+ (format "%s-%s-%s"
+ (car day)
+ (downcase (match-string 2 (car row)))
+ (downcase (match-string 1 (car row)))))
+ :track
+ (if (string-match "^Gen" (car row)) "General" "Development")
+ :start
+ (format "%sT%s:00:00%s"
+ (elt day 2)
+ (if (string-match "AM" (car row)) "08" "13")
+ emacsconf-timezone-offset)
+ :end
+ (format "%sT%s:00:00%s"
+ (elt day 2)
+ (if (string-match "AM" (car row)) "12" "18")
+ emacsconf-timezone-offset))
+ (seq-map-indexed
+ (lambda (value index)
+ (unless (string= value "")
+ (list (elt headers index) value)))
+ (cdr row))))
+ (cdr (cadr day)))
+ ))
+ (list
+ (list "sat" sat "2022-12-03")
+ (list "sun" sun "2022-12-04"))))))
+
+#+end_src
+
+#+RESULTS:
+:results:
+(setq emacsconf-shifts (list (list :id "sat-am-gen" :track "General" :start "2022-12-03T08:00:00-0500" :end "2022-12-03T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "corwin" :irc "dto" :pad "publicvoit" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2022-12-03T13:00:00-0500" :end "2022-12-03T18:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :irc "bandali" :pad "publicvoit" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2022-12-03T08:00:00-0500" :end "2022-12-03T12:00:00-0500" :host "bandali" :streamer "sachac" :checkin "corwin" :irc "dto" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2022-12-03T13:00:00-0500" :end "2022-12-03T18:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :irc "bandali" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2022-12-04T08:00:00-0500" :end "2022-12-04T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "corwin" :irc "dto" :pad "publicvoit" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2022-12-04T13:00:00-0500" :end "2022-12-04T18:00:00-0500" :host "zaeph" :streamer "jman" :checkin "FlowyCoder" :irc "bandali" :pad "publicvoit" :coord "sachac") (list :id "sun-am-dev" :track "Development" :start "2022-12-04T08:00:00-0500" :end "2022-12-04T12:00:00-0500" :host "bandali" :streamer "sachac" :checkin "corwin" :irc "dto" :coord "sachac") (list :id "sun-pm-dev" :track "Development" :start "2022-12-04T13:00:00-0500" :end "2022-12-04T18:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :irc "bandali" :coord "sachac")))
+:end:
+
+** After the conference
+- Video processor
+ - Extract live segments into videos
+- Captioner
+ - Add more captions
+ - Summarize Q&A
+- Publisher
+ - Post more information
+* Infrastructure notes
+:PROPERTIES:
+:CUSTOM_ID: infra
+:END:
+
+** Uh... how should ikiwiki be set up?
+:PROPERTIES:
+:CUSTOM_ID: ikiwiki
+:END:
+
+- remove the ikiwiki_src clone from the ansible config
+https://ikiwiki.info/rcs/git/
+bare repo has a post-update hook that updates the src repo
+src repo is ~ikiwiki/emacsconf
+~git/repositories/pub/emacsconf-wiki.git/hooks/post-update runs ~git/repositories/pub/emacsconf-wiki.git/hooks/post-update.h00-ikiwiki-wrapper
+there is an anon mirror that's updated with sudo -u anon /home/anon/fetch-wiki
+the git wrapper is
+/home/ikiwiki/hooks/emacsconf
+
+~anon/emacsconf-wiki.git has origin git@git.emacsconf.org:pub/emacsconf-wiki (fetch)
+but git log does not have the new stuff
+Where is the new stuff?
+... hah, maybe I forgot to push
+
+** Backstage
+:PROPERTIES:
+:CUSTOM_ID: infra-backstage
+:END:
+*** File suffixes, and what they correspond to
+Per categories, earlier suffixes come earlier in the process.
+|----------------------------+------------------------------------------------------------------------|
+| Suffix | Description |
+|----------------------------+------------------------------------------------------------------------|
+| VIDEO | |
+| --original.EXT | File as submitted by speaker |
+| --reencoded.webm | Reencode via ffmpeg incantation |
+| --final.webm | Broadcast-ready reencode with normalized audio |
+|----------------------------+------------------------------------------------------------------------|
+| AUDIO | |
+| --original.EXT | Extracted audio track from speaker upload; used for speech-recognition |
+| --normalized.opus | Normalized audio track |
+|----------------------------+------------------------------------------------------------------------|
+| SUBTITLES | |
+| --?(incomplete-)transcript | Transcript provided by speaker |
+| --main.EXT | Broadcast-ready reencode; different formats for different uses |
+|----------------------------+------------------------------------------------------------------------|
+
+* Other tasks and processes
+:PROPERTIES:
+:CUSTOM_ID: other
+:END:
+
+#+TOC: headlines 1 local
+** Giving conf.org access to a new volunteer or fake user
+:PROPERTIES:
+:CUSTOM_ID: private-access
+:END:
+This can only be done by the admins of the gitolite instance (zaeph,
+or bandali as a backup). This is because the changes need to be made
+in the gitolite-admin repo that can only be accessed by admins. In a
+pinch, people with access to the `orga` user on front0 can manually
+add themselves to the list of admins and manually rebuild the
+instance.
+
+Regular process:
+- Get public key from volunteer,
+- Add key under ~./key/dir/~,
+- Update permissions on ~./conf/gitolite.conf~,
+- Push to origin.
+
+
+** As prerecorded talks come in
+:PROPERTIES:
+:CUSTOM_ID: prerec-process
+:END:
+
+- Sacha: Parcel out captioning work to volunteers, help them get set up
+- Volunteers: Caption pre-recorded videos (usually starting from autogenerated ones for easier work)
+- Make sure all the links/resources mentioned are written down somewhere (web page and enriched captions for pasting into #emacsconf-accessible)
+*** Compress the video
+Usage: =compress-video.sh original-file output-file=:
+
+(zaeph might tinker with this)
+
+#+begin_src sh :eval no :tangle compress-video.sh
+Q=32
+ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
+#+end_src
+
+We tried using q56 before, but it was a little too aggressive. Q=32 is the default and is probably a reasonable space vs. quality compromise.
+
+2020 version used with parallel
+
+#+begin_src sh :tangle get-and-compress.sh :eval no
+Q=$1
+WIDTH=1280
+HEIGHT=720
+AUDIO_RATE=48000
+VIDEO_FILTER="scale=w=${WIDTH}:h=${HEIGHT}:force_original_aspect_ratio=1,pad=${WIDTH}:${HEIGHT}:(ow-iw)/2:(oh-ih)/2,fps=25,colorspace=all=bt709:iall=bt601-6-625:fast=1"
+FILE=$2
+SUFFIX=$Q
+shift
+shift
+if [ ! -f $FILE ]; then
+ wget https://mirror.csclub.uwaterloo.ca/emacsconf/2020/$FILE
+fi
+ffmpeg -y -i "$FILE" -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -an -threads 8 /dev/null &&
+if [[ $FILE =~ "webm" ]]; then
+ ffmpeg -y -i "$FILE" $* -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -ac 2 -threads 8 -c:a copy "${FILE%.*}--compressed$SUFFIX.webm"
+else
+ ffmpeg -y -i "$FILE" $* -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -ac 2 -threads 8 -c:a libvorbis "${FILE%.*}--compressed$SUFFIX.webm"
+fi
+rm $FILE
+#+end_src
+
+2022 version used with parallel to compress low version
+
+#+begin_src sh :eval no :tangle "compress-video-low.sh"
+Q=$1
+WIDTH=1280
+HEIGHT=720
+AUDIO_RATE=48000
+VIDEO_FILTER="scale=w=${WIDTH}:h=${HEIGHT}:force_original_aspect_ratio=1,pad=${WIDTH}:${HEIGHT}:(ow-iw)/2:(oh-ih)/2,fps=25,colorspace=all=bt709:iall=bt601-6-625:fast=1"
+FILE=$2
+SUFFIX=$Q
+shift
+shift
+ffmpeg -y -i "$FILE" -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -an -threads 8 /dev/null &&
+if [[ $FILE =~ "webm" ]]; then
+ ffmpeg -y -i "$FILE" $* -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -ac 2 -threads 8 -c:a copy "${FILE%.*}--compressed$SUFFIX.webm"
+else
+ ffmpeg -y -i "$FILE" $* -pixel_format yuv420p -vf $VIDEO_FILTER -colorspace 1 -color_primaries 1 -color_trc 1 -c:v libvpx-vp9 -b:v 0 -crf $Q -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -ac 2 -threads 8 -c:a libvorbis "${FILE%.*}--compressed$SUFFIX.webm"
+fi
+
+
+#+end_src
+*** sachac
+
+- download to local cache
+ ~/proj/emacsconf/private/sync-cache
+- upload to YouTube in case we can get autogenerated subtitles from there
+ https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A/videos/upload?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D
+- upload to res:~/2022/captions
+- caption.sh
+- sync-cache to copy the vtt
+- emacsconf-make-backstage-index
+- send confirmation e-mail
+*** Confirmation e-mail
+:PROPERTIES:
+:CUSTOM_ID: confirm-prerec
+:END:
+**** DONE Make sure all submissions have been acknowledged
+CLOSED: [2022-11-19 Sat 11:18]
+- [X] sibi
+- [X] vidianos
+- [X] bhavin
+- [X] gopar
+- [X] bala
+- [X] andrea
+- [X] andrew
+- [X] zachary for asmblox (reception confirmed by zaeph, and no problem
+ with video)
+- [X] ramin (ack’d by zaeph)
+- [X] abin (meain, ack’d by zaeph)
+
+**** Acknowledge pre-rec submission
+:PROPERTIES:
+:CUSTOM_ID: ack-prerec
+:END:
+
+#+begin_src emacs-lisp
+(defun emacsconf-mail-acknowledge-submission (talk &optional template)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (save-window-excursion
+ (emacsconf-with-talk-heading (plist-get talk :slug)
+ (emacsconf-cache-video-data talk)
+ (when (string= (plist-get talk :status) "WAITING_FOR_PREREC")
+ (org-todo "TO_PROCESS"))))
+ (emacsconf-publish-backstage-index)
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "ack-prerec"))
+ (plist-get talk :email)
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :time (plist-get talk :time)
+ :title (plist-get talk :title)
+ :email (plist-get talk :email)
+ :minutes (plist-get talk :video-time)
+ :speakers-short (plist-get talk :speakers-short)
+ :url (concat emacsconf-base-url (plist-get talk :url))
+ :year emacsconf-year)))
+#+end_src
+**** Template
+:PROPERTIES:
+:EMAIL_ID: ack-prerec
+:TO: ${email}
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:SUBJECT: EmacsConf ${year}: Thank you for uploading your video!
+:END:
+
+Hi, ${speakers-short}!
+
+Just a quick note to let you know that I've downloaded your submission
+for "${title}". We've added your submission to the backstage area at
+${backstage} (username: ${backstage-user}, password:
+${backstage-password}), and we'll post the files on your talk page
+when the talk is public. A quick check shows that your video is about
+${minutes} minutes long (${time} minutes budgeted).
+
+We'll be working on captioning it over the next few weeks. We'll
+e-mail again a little closer to the conference with schedule updates
+and other useful information. If you want to upload a new version, you
+can upload it the same way you did the previous one.
+
+Please feel free to e-mail us at emacsconf-submit@gnu.org if you need
+help updating the talk wiki page at ${url} or if you have other
+questions.
+
+Thank you so much for all the work you put into preparing a talk for
+EmacsConf ${year}, and thank you for submitting the prerecorded video
+before the conference!
+
+Sacha Chua
+*** Mastering the prerec’s audio-track
+:PROPERTIES:
+:CUSTOM_ID: mastering
+:END:
+
+Mastering is the process of preparing an audio-track for a purpose. For
+us, the purpose is quite simple: maximize the intelligibility of the
+speaker and minimize the noise.
+
+We can get great results with Audacity for the vast majority of
+audio-tracks. Sometimes, however, some audio-tracks have intractable
+noise-profile that require the use of model-based denoising filters that
+can applied with ffmpeg.
+
+We’ll start with the average Audacity workflow, and we’ll move on to the
+model-based filters after.
+
+**** Audacity workflow
+When we process a prerec, we extract the audio of the original upload
+and add it to the backstage. You should be able to find it under the
+name --original.$audio_format or --main.$audio_format. If it’s not
+there, it’s easy to extract the audio from the original video, but
+we’d prefer if you warned core-organizers about it because it’s not
+normal.
+
+We’ve simplified the process down to these steps:
+
+1. Open the audio file in Audacity.
+
+ You might want to increase the size of the waveform by pulling on the
+ bottom of the bottom of the track.
+
+ [[https://media.emacsconf.org/misc/audacity-demo-noise-reduction.webm][audacity-demo-noise-reduction.webm]]
+
+2. Find a moment of quiet in the video, and select it.
+
+ We ask our speakers to include 5 seconds of quiet at the beginning or
+ end of their prerecs, but even if they don’t, it’s relatively.
+
+3. Effects → Noise Reduction → Get Noise Profile
+
+4. Select → All
+
+5. Effects → Noise Reduction → OK
+
+ You can select a spoken portion of the track before applying the
+ effect and preview it to test your settings. The default are usually
+ enough (Noise reduction (dB): 12, Sensitivity: 6.00, Frequency smoothing
+ (bands): 3).
+
+ [[https://media.emacsconf.org/misc/audacity-demo-noise-reduction.webm][audacity-demo-noise-reduction.webm]]
+
+6. Tools → Apply Macro → Alpha
+
+ Before you can apply the Alpha macro, you need to save its content to
+ disk and import it via Tools → Macro Manager → Import.
+
+#+begin_src txt :eval no :tangle audacity-macro-alpha.txt
+Reverb:Delay="20" DryGain="5" HfDamping="99" Reverberance="15" RoomSize="70" StereoWidth="25" ToneHigh="0" ToneLow="100" WetGain="-13" WetOnly="0"
+Amplify:Ratio="1"
+FilterCurve:f0="79.621641" f1="101.02321" FilterLength="8191" InterpolateLin="0" InterpolationMethod="B-spline" v0="5.9148936" v1="0.042552948"
+Normalize:ApplyGain="1" PeakLevel="-3" RemoveDcOffset="1" StereoIndependent="1"
+Compressor:AttackTime="0.1" NoiseFloor="-50" Normalize="1" Ratio="2" ReleaseTime="1" Threshold="-30" UsePeak="0"
+#+end_src
+
+7. Export → Export Audio… → Opus Files (.opus format)
+
+ Use the following settings:
+
+ [[https://media.emacsconf.org/misc/audacity-export-settings.png][audacity-export-settings.png]]
+
+ #+begin_quote
+ Bit Rate: 64 kbps
+ VBR Mode: On
+ Compression: 10
+ Application: Audio
+ Frame Duration: 20 ms
+ Cutoff: Disabled
+ #+end_quote
+
+
+**** Model-based denoising filter
+If you can’t manage to get a good result with Audacity, chances are it’s
+because there’s too much noise in the video, even after profile-based
+denoising. This usually happens when the noise-pattern of an
+audio-track evolves over the video, or if has an aperiodic quality. For
+those, we’re going to need a bigger boat.
+
+Model-based denoising means using an AI-generated model to remove the
+audio frequencies that are usually associated to noise and preserve
+those that aren’t. A different context (e.g. noisy room with statics,
+noisy room with people chatting, etc.) means a different model; for us,
+this means a model that minimizes background noise and maximizes clear
+voices (the speakers’).
+
+This is the model we’ve been using:
+
+[[https://media.emacsconf.org/misc/audio-denoiser-model-mp.rnnn][audio-denoiser-model-mp.rnnn]] (download link)
+
+Source: [[https://github.com/GregorR/rnnoise-models][rnnoise-models]], Model: [[https://raw.githubusercontent.com/GregorR/rnnoise-models/master/marathon-prescription-2018-08-29/mp.rnnn][marathon-prescription]]
+
+You should always apply the filter on the original’s audio, as opposed
+to an Audacity-processed audio. This is to ensure that we have the most
+information about the signal, which means we can have gather the most
+information about the noise-profile.
+
+Following is the ffmpeg incantation to use to apply the filter-model.
+Make sure to modify the ~DENOISER~ variable and adapt input/output.
+
+#+begin_src sh :tangle audio-denoiser.sh :eval no
+DENOISER="/path/to/audio-denoiser-model-mp.rnnn"
+input="original.opus"
+output="denoised.opus"
+ffmpeg -i "$input" -af "arnndn=m=$DENOISER" "$output"
+#+end_src
+
+There’s no need to customize the libopus export information; the default
+is more than enough for human-speech.
+
+When you’re done with this step, you can then process the outputted
+audio-track with Audacity, skipping the denoising steps (1 to 5).
+
+**** Questions?
+If you’ve got any question on the process, you canget in touch with me (zaeph)!
+
+** When a talk is captioned
+:PROPERTIES:
+:CUSTOM_ID: when-captioned
+:END:
+- Combine captions with talk
+- Upload captions to YT and Toobnix
+- Prepare captions for wiki inclusion
+
+** Other tasks before the conference
+:PROPERTIES:
+:CUSTOM_ID: before
+:END:
+- Coordinate volunteer schedules so all the roles are covered
+*** Test stream setup
+:PROPERTIES:
+:CUSTOM_ID: test-stream
+:END:
+[[*Stream][Stream]]
+*** Set up MPV for captions
+:PROPERTIES:
+:CUSTOM_ID: mpv-captions
+:END:
+
+mpv.conf profile tips are now at https://emacsconf.org/mpv/ .
+
+**** Suggested font: Clear Sans
+Links:
+- tar.gz with all fonts: [[https://zaeph.tk/files/emacsconf/captions/fonts.tar.gz][from zaeph's server]] (more convenient)
+- WOFF from GitHub repo: [[https://github.com/intel/clear-sans/tree/main/WOFF][clear-sans/WOFF at main · intel/clear-sans]]
+*** Download prerecorded videos from ${protected}
+:PROPERTIES:
+:CUSTOM_ID: download-videos
+:END:
+
+- STREAM: Download prerecorded videos from ${protected}
+ #+begin_src sh :eval no
+ rsync -avzue ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
+ #+end_src
+
+
+
+** During the conference
+:PROPERTIES:
+:CUSTOM_ID: during-conference
+:END:
+
+*** Set up
+:PROPERTIES:
+:CUSTOM_ID: setup
+:END:
+**** Arrange screens
+:PROPERTIES:
+:CUSTOM_ID: screens
+:END:
+
+- CHECK:
+ - Share ${upcoming}, ${playbook}, and ${conf} via CRDT: =conf-crdt-connect-and-share=
+ - Current schedule, filenames/commands for playing, Q&A preference, IRC nick, pronunciation, intro notes, prerec duration, emergency contact information
+ - =conf-upcoming-add-subtree=
+ - Have #emacsconf-org, #emacsconf, #emacsconf-accessible, and #emacsconf-questions open
+ - Use =/opall= to get op privileges in all the channels
+ - Start backup process for pad
+ #+begin_src sh :eval no :tangle backup-pad.sh
+ while true; do
+ curl https://etherpad.wikimedia.org/p/emacsconf-2021/export/html > emacsconf-$(date +"%Y%m%d-%H%M%S").html
+ sleep 15m
+ done
+ #+end_src
+ - Computer for alternate streaming:
+ - Open browser for joining BBB
+ - Open MPV for playing http://live0.emacsconf.org:8000/main.webm
+- HOST:
+ - rsync the newest --main.webm from front: rsync -avze ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
+ - Check OBS scenes for sharing windows/tabs as a virtual camera:
+ - chat.emacsconf.org with #emacsconf
+ - Etherpad
+ - Schedule
+ - next talk page
+ - Clock with current time on screen: =watch TZ=America/Toronto date=
+ - Set up backchannel for easy viewing
+ - ${upcoming}
+ - #emacsconf-org and #emacsconf channels
+ - (?) Join organizer room S
+
+**** Start streaming :stream:
+:PROPERTIES:
+:CUSTOM_ID: start-streaming
+:END:
+
+- HOST: Display getting-ready message and start streaming to main.webm
+- HOST: Confirm that the stream is live at https://live.emacsconf.org/main.webm
+- B: Update ${status} to say that the stream is live
+- CHECK: Start low-resolution stream, confirm at https://live.emacsconf.org/main-480p.webm
+ Call this on live0 with $CONF480PASS as the first parameter. The Icecast configuration is on =live0= at [[file:/ssh:live|sudo:/etc/icecast2/icecast.xml]]=.
+ #+begin_src sh :eval no :tangle "restream-lowres.sh"
+ PASS=$1
+ while true; do ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx icecast://ec2020main480pmu:$PASS@localhost:8000/main-480p.webm; done
+ #+end_src
+- CHECK: Start Youtube and Toobnix streams. Call this with $YOUTUBE1PASS, $YOUTUBE2PASS, or $TOOBNIX as the parameter
+ #+begin_src sh :eval no :tangle "restream-flv.sh"
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
+ #+end_src
+- CHECK: Verify YouTube and Toobnix streams and the CPU load on live0.
+- CHECK: Set the YouTube and Toobnix streams to public.
+- B: Verify with #emacsconf that the stream is active.
+- CHECK: Play main stream on alternate laptop. Start alternate stream and verify. Update ${status}.
+- CHECK: Announce on Twitter (@emacs, @emacsconf, @sachac) and in #emacs
+ EmacsConf 2021 starting now: https://emacsconf.org/2021/
+
+***** Stream
+:PROPERTIES:
+:CUSTOM_ID: other-streams
+:END:
+****** Low-res stream
+
+ Needs the =$main480p= environment variable set to something of the form =icecast://username:password@site:port/mount-point.webm=. Icecast configuration can be found on =live0= at =/etc/icecast2/icecast.xml=. It was okay to run this command directly on =live0= in 2020, since that kept the speed at roughly 1x.
+
+ #+begin_src sh :eval no
+ while true; do ffmpeg -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx $main480p done
+ #+end_src
+
+****** Youtube
+****** Toobnix
+
+****** DONE Add IRC links to YouTube and Toobnix descriptions
+CLOSED: [2022-12-01 Thu 09:10] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 07:49]
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-01 Thu 08:53]--[2022-12-01 Thu 09:10] => 0:17
+:END:
+*** Check in a speaker
+:PROPERTIES:
+:CUSTOM_ID: check-in
+:END:
+
+Exception: [[*CHECK is unavailable][CHECK is unavailable]]
+
+- Speaker checks in on #emacsconf-org via IRC or via e-mail ~30m before
+- CHECK notes IRC nick for speaker.
+- CHECK confirms Q&A preference: live/IRC/Etherpad, preferred way of getting questions
+- [? unknown] Thanks for checking in! How would you like to handle Q&A
+ today - live video, the collaborative Etherpad at
+ https://etherpad.wikimedia.org/p/emacsconf-2021 , or IRC (like
+ this)?
+- [? IRC] Thanks for checking in! Feel free to keep an eye on
+ #emacsconf for questions and discussion, and we'll copy things from
+ the pad to there. If the volume gets overwhelming, let us know and
+ we can forward questions to #emacsconf-questions for you. If you'd
+ like to try Q&A over live video or the collaborative pad instead, or
+ if you need help, please let us know.
+- [? Etherpad] Thanks for checking in! The collaborative pad we'll be
+ using for questions is at
+ https://etherpad.wikimedia.org/p/emacsconf-2021 . We'll collect
+ questions from #emacsconf and put them there. If you'd like to jump
+ to your part of the document, you might be able to keep an eye on
+ questions. Please let us know if you need help, or if you want to
+ switch to live Q&A.
+- [? live] Thanks for checking in! I'll send you some private messages
+ with instructions, so please check there. Let me know if you don't
+ get them.
+ - Private messages:
+ - (erc-message "PRIVMSG" (format "%s You can use this BBB room: %s . I'll join you there shortly to set up the room and do the last-minute tech check." nick room-url))
+ - (erc-message "PRIVMSG" (format "%s The collaborative pad we'll be using for questions is at %s . We'll collect questions from #emacsconf and put them there. If you'd like to jump to your part of the document, you might be able to keep an eye on questions. Alternatively, we can read questions to you." nick conf-collaborative-pad))
+ - (erc-message "PRIVMSG" (format "%s Leo Vivier will join when it's time, and he will give you the go-ahead when it's time to present. See you in the BBB room!" nick))
+ - CHECK directs speaker to available room with =/checkin <room> <nick>=
+ - Speaker joins talk room
+ - CHECK makes speaker presenter and moderator, does last-minute tech check
+ - Hello, thanks
+ - Speaker tries screen sharing and webcam (optional)
+ - check screen readability
+ - CHECK briefs speaker on process, including:
+ - live Q&A: reading questions themselves (can do in any order,
+ can skip; coach possible responses for awkward things) or asking HOST to read questions to them
+ - HOST can share the pad or IRC; speaker shares screen only if doing demo
+ - encouragement of webcam, although it's optional
+ - how HOST will join shortly before the prerec ends and then
+ give them the go-ahead
+ - closing any tabs watching the stream as their talk starts
+ (otherwise the audio is confusing)
+ - If the speaker will be giving a live presentation, CHECK
+ collects emergency contact information (in case of technical
+ issues) and shares it with HOST in the CRDT buffer
+ - Okay to do other things until the prerec ends
+ - CHECK updates ${upcoming} with link to the talk room and
+ preferences for Q&A-. CHECK will also /msg the relevant
+ information.
+
+**** bandali's check-in steps
+
+- please leave webcam quality on 'medium'
+- please read each audience question out loud before responding
+- please mute stream on your machine if you're watching
+- would you like to stay around for a longer q&a?
+- would you like to share your webcam or screen? (quickly mention how)
+
+*** Present talk
+:PROPERTIES:
+:CUSTOM_ID: present
+:END:
+
+- CHECK announces the next talk on IRC and marks the previous talk as done. (=conf-announce=)
+- PAD clears pad colours.
+- [? prerec]
+ - HOST switches to MPV scene in OBS and plays the video (with captions if available).
+ - Exception: [[*Last-minute prerecording submission][Last-minute prerecording submission]]
+ - Exception: [[*Last-minute caption update][Last-minute caption update]]
+ - [[*Publish information][CHECK publishes information]]
+ - [[*Handle Q&A][HOST gets a head start on handling Q&A]]
+ - When prerec finishes, HOST switches the OBS scene to show BBB.
+- [? live]
+ - Exception: [[*Speaker does not have a prerec and has not checked in][Speaker does not have a prerec and has not checked in]]
+ - HOST joins the BBB room and double-checks that recording is on.
+ - CHECK-alternate joins the BBB room and pauses main MPV.
+ - HOST switches to OBS scene for BBB.
+ - Speaker presents.
+ - Exception: [[*Technical issues during a live presentation][Technical issues during a live presentation]]
+ - [? talk needs to be wrapped up]
+ - HOST nudges speaker verbally.
+
+*** Publish information
+:PROPERTIES:
+:CUSTOM_ID: publish
+:END:
+
+ - CHECK updates the schedule in:
+ - ${conf}
+ - ${upcoming}
+ - wiki
+ - CHECK publishes the video to media.emacsconf.org using =conf-publish-files=
+ - CHECK commits the wiki page and the captions for the talk.
+ - CHECK publishes the video on YouTube and ToobNix using =conf-video-share=.
+ - Update description:
+ #+begin_example
+This video is available under the terms of the
+Creative Commons Attribution-ShareAlike 4.0 International (CC
+BY-SA 4.0) license.
+
+You can view it using free and open source software at
+${url}
+
+${description}
+ #+end_example
+ - Mark it as public.
+ - Add it to EmacsConf 2021 playlist.
+ - Update title and description.
+ - Mark it as public.
+ - Doublecheck subtitles
+ - Add it to the EmacsConf 2021 playlist.
+ - [? live sections]
+ - CHECK does a rough-cut of the recording from ${dump} to get the last X minutes or by time range. There's about a 1-2 minute delay.
+ Ex: =(kill-new (conf-dump-get "alt" "10:24" "10:30" "qa_"))=
+ - When there's an opportunity to do so:
+ - CHECK finetunes the rough-cut recording (trim start and end) and posts it to:
+ - media.emacsconf.org/2021
+ - wiki page for talk
+**** DONE Automatically commit to the wiki
+CLOSED: [2022-12-02 Fri 12:43]
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-02 Fri 11:12]
+:END:
+when emacsconf-publish-autocommit-wiki is set
+
+(emacsconf-publish-update-talk (append (list :public t) (emacsconf-resolve-talk "journalism")))
+(emacsconf-publish-update-talk (append (list :public nil) (emacsconf-resolve-talk "journalism")))
+
+
+**** DONE [#B] Make sure VTTs only get published when they're edited
+CLOSED: [2022-11-25 Fri 12:59] SCHEDULED: <2022-11-25 Fri>
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 08:03]
+:END:
+***** publishing
+***** webm
+***** media directory
+**** DONE [#A] Fix mapconcat error in updating task status
+CLOSED: [2022-11-22 Tue 10:17] SCHEDULED: <2022-11-21 Mon>
+:PROPERTIES:
+:CREATED: [2022-11-21 Mon 07:23]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-22 Tue 10:06]--[2022-11-22 Tue 10:17] => 0:11
+:END:
+
+**** DONE Add intros to wiki pages
+CLOSED: [2022-11-23 Wed 13:42] SCHEDULED: <2022-11-23 Wed>
+:PROPERTIES:
+:CREATED: [2022-11-22 Tue 07:45]
+:END:
+
+**** SOMEDAY [#C] Cache video data - audio processed?
+:PROPERTIES:
+:CREATED: [2022-11-23 Wed 20:40]
+:END:
+
+**** DONE Cache video data - edited captions
+CLOSED: [2022-11-23 Wed 22:57]
+:PROPERTIES:
+:CREATED: [2022-11-23 Wed 20:40]
+:END:
+***** DONE Double-check that all the edited captions have the header
+CLOSED: [2022-11-29 Tue 07:50] SCHEDULED: <2022-12-01 Thu>
+
+#+begin_src emacs-lisp :eval no
+(mapcar (lambda (o)
+ (plist-get o :slug))
+ (seq-filter
+ (lambda (o) (and
+ (string= (plist-get o :status) "TO_STREAM")
+ (null (plist-get o :captions-edited))))
+ (emacsconf-get-talk-info)))
+#+end_src
+**** DONE Automatically commit and push the wiki
+CLOSED: [2022-12-02 Fri 12:47]
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-02 Fri 11:06]
+:END:
+
+**** DONE Set publishing on a timer :sachac:
+CLOSED: [2022-11-29 Tue 12:48] SCHEDULED: <2022-11-29 Tue>
+:PROPERTIES:
+:CREATED: [2022-11-26 Sat 21:10]
+:END:
+***** DONE Single timer, batch timers for playing and closed q
+CLOSED: [2022-11-29 Tue 12:48]
+:PROPERTIES:
+:CREATED: [2022-11-29 Tue 00:47]
+:END:
+(emacsconf-stream-schedule-timers)
+
+***** DONE Take intro into account for scheduling q&a time
+CLOSED: [2022-12-01 Thu 09:44] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-30 Wed 16:28]
+:END:
+***** TODO Test the timer
+SCHEDULED: <2022-12-02 Fri>
+
+#+begin_src emacs-lisp :eval no
+(let ((info (emacsconf-inflate-sexp '(journalism
+#+end_src
+
+**** DONE Simplify manual setting of a timer to update task status :sachac:
+CLOSED: [2022-11-29 Tue 12:35] SCHEDULED: <2022-11-29 Tue>
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-29 Tue 11:02]--[2022-11-29 Tue 12:35] => 1:33
+:END:
+
+emacsconf-stream-schedule-talk-status-change
+**** DONE Rename update-task-status.sh to talk :sachac:
+CLOSED: [2022-11-29 Tue 07:44] SCHEDULED: <2022-11-29 Tue>
+
+**** DONE make sure captions are included on the wiki page
+CLOSED: [2022-11-26 Sat 22:23]
+:PROPERTIES:
+:CREATED: [2022-11-24 Thu 13:58]
+:END:
+
+**** DONE Set public based on time, expose more interactive functions :sachac:
+CLOSED: [2022-11-29 Tue 07:44] SCHEDULED: <2022-11-28 Mon>
+ :PROPERTIES:
+ :CREATED: [2022-11-27 Sun 18:31]
+ :Effort: 0:30
+ :END:
+ :LOGBOOK:
+ CLOCK: [2022-11-29 Tue 07:41]--[2022-11-29 Tue 07:44] => 0:03
+ :END:
+so that the wiki doesn't have to depend on synchronized conf.org state
+
+#+begin_src emacs-lisp :eval no
+(cl-assert
+ (plist-get
+ (emacsconf-add-talk-status (list :start-time (date-to-time "2022-01-01T12:00:00-0400")))
+ :public))
+(cl-assert
+ (null
+ (plist-get
+ (emacsconf-add-talk-status (list :start-time (date-to-time "2030-01-01T12:00:00-0400")))
+ :public)))
+(cl-assert
+ (plist-get
+ (emacsconf-add-talk-status (list :start-time (date-to-time "2030-01-01T12:00:00-0400")
+ :status "PLAYING"))
+ :public))
+#+end_src
+
+**** TODO [#C] figure out if we need to adapt to org-time-stamp-formats change removing brackets
+:PROPERTIES:
+:CREATED: [2022-11-29 Tue 06:40]
+:END:
+
+*** Handle Q&A
+:PROPERTIES:
+:CUSTOM_ID: questions
+:END:
+
+Exceptions:
+- [[*Speaker has not checked in][Speaker has not checked in]]
+
+- [? live]
+ - CHECK-alternate joins the BBB room and pauses MPV.
+ - HOST joins the BBB room
+ - HOST starts recording in BBB or confirms that it's already recording
+ - HOST switches to the BBB scene in OBS.
+ - HOST describes how to ask questions.
+ - [? No questions yet]
+ - HOST thanks speaker, says nice things about talk, and asks a couple of prepared questions
+ - [? Awkward question]
+ - HOST can try rephrasing the question.
+ - HOST adds note to IRC/Etherpad that speakers can answer in any order, skip questions, answer afterwards, etc.
+ - [? Q&A needs to be wrapped up]
+ - HOST writes in Etherpad/IRC or nudges speaker verbally.
+ - CHECK notes the time that the live Q&A finished and switches back to the main stream on CHECK-alternate.
+- [? IRC/pad]
+ - HOST switches to pad/chat OBS scene.
+ - HOST describes Q&A method and shows it on the screen.
+ - While there's buffer time before the next talk, HOST can read out
+ questions and answers, or transition to the next talk early
+ - HOST: It's time for the next talk, but if you want to keep
+ discussing the previous talk, please feel free to continue doing
+ so on IRC or the pad.
+- [? speaker will answer after the conference]
+ - HOST switches to pad/chat OBS scene.
+ - HOST says the speaker is not available right now, but we'll
+ forward the questions to the speaker and we'll post the speaker's
+ answers on the wiki page. Leave your contact information if you
+ want to be notified, or subscribe to the emacsconf-discuss mailing
+ list to get the announcement. Please feel free to continue
+ discussing the talk on IRC or the pad.
+- [[*Present talk][Present next talk]]
+
+*
+*** During each talk
+:PROPERTIES:
+:CUSTOM_ID: each-talk
+:END:
+- Volunteers: post links/resources/descriptions/captions (depending on your level of energy) to #emacsconf-accessible
+- Volunteers: making sure questions get posted somewhere the speaker can see them
+*** Break time
+:PROPERTIES:
+:CUSTOM_ID: break
+:END:
+
+- CHECK marks the last talk as done. =conf-end-current-talk=
+- CHECK stops and restarts the Toobnix restreaming process, and re-checks the stream
+- CHECK uses =conf-upcoming-add-subtree= to add the afternoon talks to upcoming.org
+- HOST doublechecks network transfer limit and server health
+
+
+*** End of stream
+:PROPERTIES:
+:CUSTOM_ID: end
+:END:
+
+- CHECK removes live Q&A links
+- CHECK stops ffmpeg process for Youtube
+- CHECK stops ffmpeg process for Toobnix
+- CHECK stops ffmpeg process for main-480p
+- STREAM stops streaming
+- B updates the status pages
+- bandali figures out the downstream
+
+** After the conference
+:PROPERTIES:
+:CUSTOM_ID: after-conference
+:END:
+*** Send thanks
+[[*Thank you, next steps][Thank you, next steps]]
+*** Extract the opening and closing remarks
+*** Extract the Q&A recordings, trimming as needed
+From https://bbb.emacsverse.org/b/admins/recordings
+#+begin_src js2 :eval no :tangle no
+console.log([...document.querySelectorAll('.email-link')].map((o) => '| ' + o.closest('tr').querySelector('time').getAttribute('datetime') + ' | ' + o.closest('tr').querySelector('#recording-text').innerHTML.trim() + ' | ' + o.getAttribute('data-pres-link').trim() + ' |').join('\n'))
+#+end_src
+
+Make an ~ids.txt~ with the IDs extracted from BBB.
+
+In the same directory:
+#+begin_src bash :eval no
+while read p; do
+ mkdir -p "$p";
+ cd "$p";
+ wget "https://bbb.emacsverse.org/presentation/${p}/slides_new.xml" \
+ "https://bbb.emacsverse.org/presentation/${p}/video/webcams.webm" \
+ "https://bbb.emacsverse.org/presentation/${p}/deskshare.xml" \
+ "https://bbb.emacsverse.org/presentation/${p}/deskshare/deskshare.webm" \
+ "https://bbb.emacsverse.org/presentation/${p}/metadata.xml"
+ cd ..;
+done <ids.txt
+#+end_src
+
+Resource explanation:
+
+- slides_new.xml :: Text chat
+- webcams.webm :: Webcam as video stream, also has audio
+- deskshare.xml :: start and stop time of desktop sharing, if any
+- deskshare.webm :: Shared desktop as video
+- metadata.xml
+
+Probably focus on grabbing the audio first and seeing what's worth keeping
+
+#+begin_src emacs-lisp
+(defun emacsconf-extract-chat (slug speaker)
+ (interactive (list
+ (emacsconf-complete-talk)
+ (completing-read "Speaker: "
+ (seq-uniq
+ (mapcar (lambda (node) (dom-attr node 'name))
+ (dom-by-tag (xml-parse-region (point-min) (point-max)) 'chattimeline)))
+ )))
+ (let ((text
+ (mapconcat (lambda (node)
+ (when (string= (dom-attr node 'target) "chat")
+ (let ((message
+ (replace-regexp-in-string
+ "\\(^[^ +]?\\): " ""
+ (replace-regexp-in-string "<a href=\"\\(.+?\\)\" rel=\"nofollow\"><u>\\(.+?\\)</u></a>"
+ "<\\1>" (dom-attr node 'message)))))
+ (if (string-match speaker (dom-attr node 'name))
+ (format "- %s: %s\n" speaker message)
+ (format "- %s\n" message)))))
+ (dom-by-tag (xml-parse-region (point-min) (point-max)) 'chattimeline)
+ "")))
+ (emacsconf-edit-wiki-page slug)
+ (if (re-search-forward "# Discussion" nil t)
+ (progn
+ (goto-char (match-end 0))
+ (insert "\n\n"))
+ (goto-char (point-max)))
+ (kill-new text)))
+;; TODO: Combine lines from same nick, or identify speakers with anon1/2/etc.
+(defun emacsconf-extract-chat-from-dired ()
+ (interactive)
+ (find-file (expand-file-name "slides_new.xml" (dired-get-file-for-visit)))
+ (call-interactively 'emacsconf-extract-chat))
+#+end_src
+
+#+begin_src emacs-lisp :eval no
+(defun emacsconf-make-webcams-deskshare-spans (deskshare start-ms stop-ms strategy source-dir)
+ (let ((secs (/ start-ms 1000.0))
+ (webcam-video (expand-file-name "webcams.webm" source-dir))
+ (deskshare-video (expand-file-name "deskshare.webm" source-dir))
+ spans)
+ (mapc (lambda (o)
+ (unless (or (= secs (string-to-number (dom-attr o 'start_timestamp)))
+ (= (string-to-number (dom-attr o 'start_timestamp)) 0)
+ (> secs (/ stop-ms 1000.0)))
+ (setq spans (cons (list :source webcam-video
+ :start-ms (* secs 1000)
+ :stop-ms
+ (* 1000
+ (if (eq strategy 'test)
+ (+ secs 3)
+ (max secs (string-to-number (dom-attr o 'start_timestamp))))))
+ spans)))
+ (when (and (<= (string-to-number (dom-attr o 'start_timestamp))
+ (/ stop-ms 1000.0))
+ (>= (string-to-number (dom-attr o 'stop_timestamp))
+ (/ start-ms 1000.0)))
+ (setq spans (cons (list :source deskshare-video
+ :start-ms (max (* 1000 (string-to-number (dom-attr o 'start_timestamp)))
+ start-ms)
+ :stop-ms
+ (if (eq strategy 'test)
+ (* 1000 (+ (string-to-number (dom-attr o 'start_timestamp)) 3))
+ (min (* 1000 (string-to-number (dom-attr o 'stop_timestamp)))
+ stop-ms)))
+ spans))
+ (setq secs (string-to-number (dom-attr o 'stop_timestamp)))))
+ (dom-by-tag deskshare 'event))
+ (unless (>= (floor (* secs 1000)) stop-ms)
+ (setq spans (cons (list :source webcam-video
+ :start-ms (* 1000 secs)
+ :stop-ms (if (eq strategy 'test)
+ (* 1000 (+ secs 3))
+ stop-ms))
+ spans)))
+ (if (eq strategy 'test)
+ `((video ,@(reverse spans))
+ (audio ,@(mapcar (lambda (o)
+ (list :source webcam-video
+ :start-ms (plist-get o :start-ms)
+ :stop-ms (plist-get o :stop-ms)))
+ (reverse spans))))
+ `((video ,@(nreverse spans))
+ (audio (:source ,webcam-video :start-ms ,start-ms :stop-ms ,stop-ms))))))
+
+(defun emacsconf-get-ffmpeg-to-splice-webcam-and-recording (slug start-ms stop-ms info &optional strategy)
+ "Return FFMPEG command for slicing.
+Strategies:
+- 'fast-cut-start-keyframe - find the keyframe before the start ms and cut from there, doing a fast copy.
+- 'start-keyframe-and-reencode - find the keyframe before the start ms and cut from there, reencoding.
+- 'cut-and-concat - seek to the keyframe before, slowly find the start-ms, reencode the snippet, and then do a fast copy of the remaining. May have encoding errors.
+- default: copy from start-ms to stop-ms, reencoding.
+"
+ (let* ((source-dir (expand-file-name (concat "../questions/by-slug/" slug) emacsconf-captions-directory))
+ (video-slug (plist-get (seq-find (lambda (o) (string= (plist-get o :slug) slug)) info) :video-slug))
+ (output (expand-file-name (concat video-slug "--answers.webm") emacsconf-captions-directory))
+ (webcam-video (expand-file-name "webcams.webm" source-dir)))
+ (if (file-exists-p (expand-file-name "deskshare.webm" source-dir))
+ ;; Has deskshare
+ (let* ((deskshare (xml-parse-file (expand-file-name "deskshare.xml" source-dir)))
+ (final-size (compile-media-max-dimensions
+ (expand-file-name "deskshare.webm" source-dir)
+ (expand-file-name "webcams.webm" source-dir)))
+ (duration (compile-media-get-file-duration-ms (expand-file-name "webcams.webm" source-dir)))
+ (spans (emacsconf-make-webcams-deskshare-spans deskshare start-ms stop-ms strategy source-dir))
+ (compile-media-output-video-width (car final-size))
+ (compile-media-output-video-height (cdr final-size)))
+ (compile-media-get-command spans output))
+ ;; Just webcams
+ (compile-media-get-command
+ (compile-media-split-tracks
+ (list (list :source webcam-video :start-ms start-ms :stop-ms stop-ms)))
+ output))))
+#+end_src
+
+Make a table of the form
+
+#+NAME: QA_RECORDINGS
+| Start | End | Slug | Notes | URL | Timestamp |
+|-------+-----+------+-------+-----+-----------|
+
+#+begin_src emacs-lisp :var qa=QA_RECORDINGS :eval no :dir="videos/"
+(defun emacsconf-process-qa-recordings (qa dir)
+;; (setq conf-qa-recordings qa)
+;; (memoize 'conf-ffmpeg-get-closest-keyframe-in-msecs)
+;; (memoize 'conf-ffmpeg-get-keyframes-between)
+;; (memoize 'conf-video-dimensions)
+;; (memoize 'compile-media-get-file-duration-ms)
+;; (memoize-restore 'conf-ffmpeg-get-keyframes-around)
+
+(let ((info (emacsconf-get-talk-info)))
+ (replace-regexp-in-string
+ "captions/" "answers-slow/"
+ (replace-regexp-in-string
+ dir ""
+ (string-join
+ (nreverse
+ (sort
+ (delq nil
+ (mapcar
+ (lambda (o)
+ (when (> (length (car o)) 0)
+ (emacsconf-get-ffmpeg-to-splice-webcam-and-recording
+ (elt o 2)
+ (compile-media-timestamp-to-msecs (elt o 0))
+ (compile-media-timestamp-to-msecs (elt o 1))
+ info)))
+; (seq-take qa 2)
+ qa
+ ))
+ (lambda (a b) (string-match "trim" a))))
+ "\n")))))
+#+end_src
+
+*** Update the wiki
+*** Update captions
+
+- Merge them into the video with =add-captions.sh=
+ #+begin_src sh :eval no
+ #!/usr/bin/zsh
+ BASE="${1%.*}"
+ BASE="${BASE%--main}"
+ ffmpeg -y -i "$1" ${BASE}--main.vtt
+ if [ -f "${BASE}--normalized.webm" ]; then
+ ffmpeg -y -i "$1" -i "${BASE}--normalized.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ else
+ ffmpeg -y -i "$1" -i "${BASE}--compressed.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ fi
+ cp ${BASE}--main.vtt ${BASE}--chapters.vtt ~/vendor/emacsconf-wiki/2021/captions
+ scp "${BASE}--captioned.webm" "${BASE}--main.webm"
+ scp "${BASE}--main.webm" front:~/protected
+ scp "${BASE}--main.vtt" front:~/protected
+ scp "${BASE}--chapters.vtt" front:~/protected
+ ssh front 'cd protected; chmod ugo+r *'
+ #+end_src
+- Update Toobnix and Youtube captions with =conf-video-share=.
+- Update Toobnix and Youtube descriptions with chapters.
+- Update ${conf-year}/${captions}/${slug}.md in the wiki. To make this from scratch, use =M-x conf-prepare-transcript-directives= from the talk heading in the conference Org file.
+*** STARTED Update the chapter index for answers
+SCHEDULED: <2023-03-28 Tue>
+:PROPERTIES:
+:Effort: 0:30
+:END:
+
+- emacsconf-subed-make-chapter-file-based-on-comments
+- emacsconf-publish-process-answers-chapters
+ - Put it in wiki/year/captions/ and add it to the repository
+ - Add it to the cache directory
+ - Upload it to media.emacsconf.org:~/year
+- Update the talk page
+- Remove the help marker from the talk page
+
+ https://emacsconf.org/help_with_chapter_markers/
+ [[~/proj/emacsconf/cache]]
+*** BLOCKED [#A] Downsize the server :bandali:
+SCHEDULED: <2022-12-03 Sat>
+* In case of
+:PROPERTIES:
+:CUSTOM_ID: exceptions
+:END:
+
+See https://pad.emacsconf.org/premortem for more.
+
+#+TOC: headlines 1 local
+
+** Common broadcast (gen and dev) :stream:
+:PROPERTIES:
+:CUSTOM_ID: common
+:END:
+
+Options:
+- mpv https://live.emacsconf.org/emacsconf/gen.webm
+- mpv the same video
+- join the BBB room
+
+emacsconf-stream-rebroadcast - specify the source track
+
+[[elisp:(emacsconf-stream-rebroadcast "Development" "General")][Development -> General]]
+[[elisp:(emacsconf-stream-rebroadcast "General" "Development")][General -> Development]]
+
+** Stream OBS needs to be restarted :stream:
+:PROPERTIES:
+:CUSTOM_ID: obs-restart
+:END:
+
+- ssh to the track and run ~track-obs~
+- ssh to live0.emacsconf and run whatever's appropriate:
+ #+begin_example
+ screen -S restream-test-toobnix -X quit; screen-restream-test-toobnix.sh
+ screen -S restream-test-youtube -X quit; screen-restream-test-youtube.sh
+ screen -S restream-gen-toobnix -X quit; screen-restream-gen-toobnix.sh
+ screen -S restream-gen-youtube -X quit; screen-restream-gen-youtube.sh
+ screen -S restream-dev-toobnix -X quit; screen-restream-dev-toobnix.sh
+ screen -S restream-dev-youtube -X quit; screen-restream-dev-youtube.sh
+ #+end_example
+- check if the streams are all right
+
+
+
+** Wiki :publish:
+:PROPERTIES:
+:CUSTOM_ID: ikiwiki-stuck
+:END:
+
+Stuck:
+
+ sudo -iu ikiwiki -- ikiwiki --setup ~ikiwiki/emacsconf.setup
+
+emacsconf.setup changed:
+
+ssh orga@front0.emacsconf.org
+sudo su - ikiwiki
+ikiwiki --setup emacsconf.setup --rebuild --wrappers
+
+** Cancelled talk :schedule:
+:PROPERTIES:
+:CUSTOM_ID: cancelled
+:END:
+
+1. Update conf.org to mark the talk as cancelled.
+2. Update the ~schedule-choices~ block to fix the time for the following talk, or recalculate all the schedules. Check for any validation errors in the ~:results:~ block.
+3. When you're happy with the schedule, run the ~draft-schedule~ block.
+4. Update the talk page to add CANCELLED to the title.
+5. Publish the wiki and doublecheck it.
+ - Talk gone from the schedule?
+ - Talk listed among the cancelled talks?
+ - Talk page has cancelled info?
+6. Remove the talk from the [[#one-track][one-track emergency schedule]]
+** Last-minute prerecording submission :upload:
+:PROPERTIES:
+:CUSTOM_ID: last-minute-prerec
+:END:
+
+- COORD will copy it from the FTP upload server to orga@res.emacsconf.org:~/stream -p 46668 and name it appropriately.
+- COORD will notify STREAM with the scp command and the mpv command so that STREAM can choose.
+
+** Technical issues during a live presentation :stream:
+:PROPERTIES:
+:CUSTOM_ID: live-issues
+:END:
+
+- HOST tries to contact the speaker
+- [? back on track]
+ - [? can be squeezed into remaining time]: Continue
+ - [? need extra time]: CHECK fiddles with buffer of following talks in conf.org and updates schedule
+ - [? need too much extra time (ex: 10min)]: HOST acknowledges
+ technical issues and says we may be able to follow up after the
+ conference
+- [? can't resume]: HOST acknowledges technical issues and says we may
+ be able to follow up after the conference
+
+** Big technical issues with streaming :stream:
+:PROPERTIES:
+:CUSTOM_ID: stream-issues
+:END:
+
+[[file:/ssh:orga@front0.emacsconf.org:/var/www/status.emacsconf.org/index.html]]
+
+- HOST notifies #emacsconf and #emacsconf-org and adds a note at the top of the ${pad}.
+- HOST updates the 2022.md wiki page
+- CHECK publishes prerecordings
+ - media.emacsconf.org
+ - wiki
+ - Toobnix
+ - Peertube
+- STREAM e-mails the mailing list
+** Last-minute caption or file update :upload:
+:PROPERTIES:
+:CUSTOM_ID: last-minute-captions
+:END:
+
+- CHECK uploads the --main.vtt file to orga@res.emacsconf.org:~/stream -p 46668
+- If streaming locally, STREAM copies the VTT file and loads it into MPV with =--sub-file=
+
+ssh orga@media.emacsconf.org
+cd backstage; make all
+
+ssh orga@res.emacsconf.org -p 46668
+~/cache/update-cache
+cd ~/stream
+cp ~/cache/*$SLUG*--main.webm .
+
+
+** Pad malfunction or mess-up :infra:
+:PROPERTIES:
+:CUSTOM_ID: pad-broken
+:END:
+
+- PAD resets the pad using the time slider
+- [? still not recovered]
+ - PAD reimports the pad from backup
+
+** Speaker has not checked in :sched:
+:PROPERTIES:
+:CUSTOM_ID: missing
+:END:
+- Let the previous talk run a little longer for Q&A; end at least in time for the prerec
+- After the previous Q&A wraps up, play the prerec
+- [? still not around after prerec finishes]
+ - HOST: Speaker might be having some difficulty connecting, but we'll collect your questions on the pad and send them afterwards.
+ - Show the questions and discussion, invite people into the Q&A to talk about the talk. They can share their experiences and comments.
+
+** Speaker does not have a prerec and has not checked in :sched:
+:PROPERTIES:
+:CUSTOM_ID: really-missing
+:END:
+- Let the previous talk do extended Q&A
+- Close to the time of the missing talk:
+ - See if any of the previous speakers want to be set up for an impromptu talk/extension in a BBB room, just in case
+ - HOST: The next speaker might be having some difficulty connecting. In the meantime, let's...
+ - OR:
+ - highlight ongoing discussions
+ - invite another speaker for an impromptu extension; mplsCorwin will keep a list of possible speakers who are still active
+ - replay a short prerec
+ - let mplsCorwin or zaeph fill in
+** Conduct guidelines issue :host:
+:PROPERTIES:
+:CUSTOM_ID: conduct
+:END:
+
+- [? IRC]: IRC operator addresses it with a reminder and/or a kick or a ban
+- [? not resolved, or onscreen]
+ - HOST addresses it (on-camera if needed) with a reminder and/or a kick or a ban
+
+** CHECK is unavailable
+:PROPERTIES:
+:CUSTOM_ID: check-gone
+:END:
+
+- COORD or STREAM does check-ins
+- HOST refers to the shift pad for Q&A preference etc.
+- STREAM checks ~/stream for prerec filenames etc.
+- Dropped goals:
+ - Publishing recordings ASAP
+ - Updating schedule/wiki on the fly
+
+** HOST is unavailable
+:PROPERTIES:
+:CUSTOM_ID: host-gone
+:END:
+
+- STREAM will do the hosting.
+
+** live0 can't handle the load or is close to network transfer limit
+:PROPERTIES:
+:CUSTOM_ID: network
+:END:
+
+- OR:
+ - Redirect some viewers via asking in #emacsconf:
+ - watch via main-480p
+ - watch via Toobnix
+ - Consider dropping the restream to Toobnix (lower audience?) or to Youtube
+ - Add additional node to Linode account for shared transfer pool (TODO: doublecheck)
+
+** People have a hard time seeing dark-mode presentations (or light-mode)
+:PROPERTIES:
+:CUSTOM_ID: dark-mode
+:END:
+
+mpv --vf=negate $url
+** Schedule update :sched:
+:PROPERTIES:
+:CUSTOM_ID: update-sched
+:END:
+
+- Test the new schedule using the blocks near the beginning of conf.org
+- emacsconf-publish-update-schedule
+- E-mail affected speakers - see emacsconf-mail-schedule-update function
+
+** New talk :sched:
+:PROPERTIES:
+:CUSTOM_ID: new-talk
+:END:
+- Create entry in conf.org
+- Fit it into the schedule using the emacsconf-schedule-plan variable
+- When happy, execute the draft-schedule block to update the SCHEDULED properties
+- emacsconf-generate-talk-page
+- emacsconf-update-schedule
+- emacsconf
+- emacsconf-stream-generate-assets-for-talk
+** In case we need to do things manually because the task status hooks don't work
+:PROPERTIES:
+:CUSTOM_ID: manual
+:END:
+
+export SLUG=the ID of the talk
+
+#+TOC: headlines 1 local
+*** TO_STREAM -> PLAYING :stream:
+
+play slug (ex: play journalism)
+*** CLOSED_Q -> OPEN_Q
+:PROPERTIES:
+:CUSTOM_ID: open
+:END:
+
+Example for mail talk:
+
+STATE=open; ssh orga@media.emacsconf.org "cp /home/orga/backstage/assets/redirects/$STATE/bbb-$SLUG.html /home/orga/2022/current/"
+
+*** OPEN_Q -> TO_ARCHIVE
+:PROPERTIES:
+:CUSTOM_ID: archive
+:END:
+
+Example for mail talk:
+
+STATE=after; ssh orga@media.emacsconf.org "cp /home/orga/backstage/assets/redirects/$STATE/bbb-$SLUG.html /home/orga/2022/current/"
+
+If you need to reset the state:
+
+STATE=before; ssh orga@media.emacsconf.org "cp /home/orga/backstage/assets/redirects/$STATE/bbb-$SLUG.html /home/orga/2022/current/"
+** Alternate stream volunteer wants to stream
+:PROPERTIES:
+:CUSTOM_ID: alternate
+:END:
+- CHECK gives ALTERNATE the BBB room URL for the talk they are interested in
+- ALTERNATE starts streaming to assigned end point
+- CHECK confirms stream
+- CHECK updates ${stream-status}
+- CHECK notifies STREAM and HOST
+ - After prerec plays:
+ - HOST: This talk has an extended demo/Q&A. You can go to ${alternate-url} to watch it, and we'll post a recording afterwards.
+ - HOST sends ${alternate-url} to IRC: Alternate stream for ${title}: ${alternate-url}
+- ALTERNATE notifies #emacsconf-org when the stream is done.
+- CHECK updates ${stream-status} to note that the alternate stream is finished.
+
+ FFMPEG process for sending the desktop and audio to the $CONFALT mountpoint on Linux with X11 and Alsa:
+
+ 1. Set the CONFALT environment variable to icecast://user:password@live0.emacsconf.org:8000/alt.webm
+ 2. Install pavucontrol if you don't have it already.
+ 3. Start the following command ([[file:stream-desktop-and-audio.sh]]:
+ #+begin_src sh :eval no :tangle stream-desktop-and-audio.sh
+ while true; do ffmpeg -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done
+ #+end_src
+ 4. Use pavucontrol to set the recording source for the ffmpeg
+ command to be the audio monitor, so you get system output as
+ well.
+ - OR:
+ - [? splitting audio] (look for “Set up sinks for sound” under 2021/)
+ - [? same audio]
+ - Set up audio monitor as the input for FFMPEG
+ - MPV goes to MPV sink, browser goes to recording sink, FFMPEG takes in recording monitor
+
+** Video playing error, need to play with mpv manually :stream:
+:PROPERTIES:
+:CUSTOM_ID: play-mpv-manually
+:END:
+
+You can skip the intro and play a video by specifying the filename, like this:
+play ~/stream/emacsconf-2022-journalism-*
+** Shift changes
+
+1. Update [[#shifts]]
+2. Evaluate the code underneath to get the setq.
+3. Put the setq in emacsconf.el.
+4. Regenerate the hyperlists: emacsconf-pad-prepopulate-hyperlists
+
+** Need to restart 480p stream :stream:
+:PROPERTIES:
+:CUSTOM_ID: restart-480p
+:END:
+
+ssh live
+
+/usr/local/bin/emacsconf-lowres-dev-on-connect
+or
+/usr/local/bin/emacsconf-lowres-gen-on-connect
+** Renamed talk :sched:
+:PROPERTIES:
+:CUSTOM_ID: renamed
+:END:
+
+1. Change conf.org heading.
+2. Change the video slug property.
+3. Rename any existing files in the backstage area.
+4. emacsconf-publish-backstage-index
+5. Change the title and heading on the wiki page.
+6. Update the schedule (emacsconf-publish-schedule).
+7. Update info pages (emacsconf-publish-info-pages).
+8. Update the watch page (emacsconf-publish-watch-pages).
+9. Update the pad, and the two previous pads.
+10. Update the in-between slide (and for the following one) and upload the assets.
+11. Redo the intros for that talk and the following one
+ SLUG=health; ffmpeg -y -loop 1 -i ../../in-between/$SLUG.png -i $SLUG.opus -i $SLUG.vtt -shortest ../$SLUG.webm; mpv $SLUG.webm
+
+*** DONE Rename lspbridge
+CLOSED: [2022-12-02 Fri 19:23]
+rerecord lspbridge intro
+
+lspbridge science
+
+*** DONE Rename health
+CLOSED: [2022-12-02 Fri 19:27]
+:PROPERTIES:
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-02 Fri 18:58]--[2022-12-02 Fri 19:27] => 0:29
+:END:
+health eev
+** TODO Need to restart the Toobnix streams so we don't exceed 5 hours
+:PROPERTIES:
+:CREATED: [2022-12-03 Sat 12:33]
+:END:
+
+screen -S restream-gen-toobnix -X quit; screen-restream-gen-toobnix.sh
+screen -S restream-dev-toobnix -X quit; screen-restream-dev-toobnix.sh
+
+* Task archive
+:PROPERTIES:
+:CUSTOM_ID: archive
+:END:
+
+** DONE Write preparation instructions :zaeph:
+CLOSED: [2022-09-29 Thu 20:45] DEADLINE: <2022-09-26 Mon>
+:PROPERTIES:
+:ARCHIVE_TIME: 2022-10-01 Sat 00:33
+:END:
+2021/prepare.md can be reused.
+
+Extra stuff to consider adding:
+- DONE Suggestions for themes (especially wrt colourscape)
+- DONE “Please don’t squeeze your talk by fast-forwarding your speech. Trimming silences and filler words can help, though. Sometimes it's easier to write, record, and edit your voiceover, and then record the video to go along with it."
+- DONE Allowing speakers to plant questions, esp. to cover tangential stuff that couldn’t fit in the prerec
+** CANCELLED Allocate extra time if possible; send e-mail :sachac:
+CLOSED: [2022-09-30 Fri 18:13] SCHEDULED: <2022-10-02 Sun>
+:PROPERTIES:
+:ARCHIVE_TIME: 2022-10-01 Sat 00:38
+:END:
+
+
+** DONE Review metadata for speakers in conf.org :zaeph:
+CLOSED: [2022-10-01 Sat 00:37] SCHEDULED: <2022-09-23 Fri>
+:PROPERTIES:
+:ARCHIVE_TIME: 2022-10-01 Sat 00:38
+:END:
+
+See the bottom of conf.org for some automated validation
+** DONE Review the submissions in the pad (see emacsconf-org-private or conf.org for the link) and add any objections or comments by Sept 26 for possible [[#acceptance][early speaker notification]], Oct 7 for everything :organizers:
+CLOSED: [2022-09-29 Thu 20:29] DEADLINE: <2022-09-26 Mon>
+- zaeph: will start reviewing on Sep 21
+** DONE Write preparation instructions :zaeph:
+CLOSED: [2022-09-29 Thu 20:45] DEADLINE: <2022-09-26 Mon>
+2021/prepare.md can be reused.
+
+Extra stuff to consider adding:
+- DONE Suggestions for themes (especially wrt colourscape)
+- DONE “Please don’t squeeze your talk by fast-forwarding your speech. Trimming silences and filler words can help, though. Sometimes it's easier to write, record, and edit your voiceover, and then record the video to go along with it."
+- DONE Allowing speakers to plant questions, esp. to cover tangential stuff that couldn’t fit in the prerec
+** DONE Add more submissions (CFP deadline Sept 30) :sachac:
+CLOSED: [2022-09-30 Fri 18:13] DEADLINE: <2022-09-30 Fri>
+- Sacha: Add submissions to emacsconf-2022-private, draft 2-day schedule by Oct 10
+** DONE Publish talk pages :sachac:
+CLOSED: [2022-09-30 Fri 18:13]
+** DONE Send early acceptances :sachac:
+CLOSED: [2022-09-30 Fri 18:13] DEADLINE: <2022-09-30 Fri>
+
+Ideal sequence:
+1. publish /2022/prepare (zaeph)
+2. publish wiki pages
+3. send acceptance e-mails
+ - Allocate at most 20 minutes, say we'll try to add more time depending on the schedule (probably know by Sept 30 or Oct 1)
+ - Include review comments
+4. Send an additional e-mail introducing speakers who may want to coordinate
+
+** DONE Prepare to export talk information to wiki :sachac:
+DEADLINE: <2022-10-15 Sat>
+
+Tested code in a fork, can publish talk information once talks are approved.
+emacsconf-publish.el
+emacsconf-generate-info-pages
+emacsconf-generate-main-schedule
+emacsconf-generate-talk-pages
+
+** DONE Give access to emacsconf-2022-private to dto :zaeph:
+CLOSED: [2022-09-21 Wed 01:17]
+** DONE Write better subtitle documentation :sachac:
+CLOSED: [2022-09-22 Thu 15:12]
+https://wiki.debian.org/Teams/DebConf/Video/Subtitles
+https://emacsconf.org/captioning
+That will help more people subtitle things
+** DONE Write volunteer page :sachac:
+CLOSED: [2022-09-22 Thu 15:02]
+https://emacsconf.org/2022/volunteer
+
+** DONE Review the submissions in the pad (see emacsconf-org-private or conf.org for the link) and add any objections or comments by Sept 26 for possible [[#acceptance][early speaker notification]], Oct 7 for everything :organizers:
+CLOSED: [2022-09-27 Tue 16:14] DEADLINE: <2022-09-26 Mon>
+- zaeph: will start reviewing on Sep 21
+** DONE Double-check sachac’s timezone conversions for availability :zaeph:
+CLOSED: [2022-09-27 Tue 16:14]
+
+zaeph helped with this, even catching some based on e-mail timestamps
+** DONE Copy things over from previous notebooks :sachac:
+CLOSED: [2022-09-21 Wed 14:12]
+** DONE Prepare to publish schedule :sachac:wiki:
+CLOSED: [2022-10-07 Fri 13:56]
+:PROPERTIES:
+:CUSTOM_ID: schedule-publish-old
+:END:
+
+- Should be understandable as plain text
+- Ideally responsive to take advantage of more screen space on monitors while still being understandable on mobile
+- Organize by tracks and then days
+- Links to jump to a track and day
+- Graphics to make it easier for people to see nearby talk options
+- Optionally, graphical view on talk pages as well (might need to publish a JSON somewhere to front)
+
+ Schedule inspiration:
+ - [[https://debconf22.debconf.org/schedule/][DebConf 2022]] converted times to your local timezone
+ - [[https://libreplanet.org/2022/program/][LibrePlanet 2022]] used table columns for the different tracks
+ - [[https://www.sfscon.it/programs/2022/][SFSCON 2022]] lists sessions chronologically, indicating tracks with labels and dots on a diagram. Dropdowns act as filters.
+ - https://css-tricks.com/building-a-conference-schedule-with-css-grid/
+
+
+ - With JS and grid CSS: https://imgur.com/KNpGayp
+ - Fallback https://imgur.com/HT9vX3o
+
+
+ Draft: https://emacsconf.org/2022/draft-schedule/
+*** DONE Set up main schedule as plain text
+CLOSED: [2022-10-06 Thu 21:25]
+
+general track
+day 1 and day 2
+
+dev track
+day 1 and day 2
+
+by day
+all talks
+
+
+*** DONE Set up talk page navigation
+CLOSED: [2022-10-06 Thu 21:25]
+- program phase: by track
+- schedule phase: chronological
+*** CANCELLED See if I can get the schedule to split into a nice grid on larger devices that support it
+CLOSED: [2022-10-07 Fri 13:55]
+Slightly annoying to do with JS/CSS because I want it to fall back to an interleaved schedule on small screens, so we would probably need to duplicate the elements and then use media queries.
+
+
+*** SOMEDAY [#C] Add caption icon to schedule :emacsconf:
+:PROPERTIES:
+:CREATED: [2022-11-22 Tue 22:21]
+:END:
+so that it's easier for people to see which talks are accessible
+
+*** DONE Add captioned label in talk index
+CLOSED: [2022-11-23 Wed 22:58]
+:PROPERTIES:
+:CREATED: [2022-11-23 Wed 21:46]
+:END:
+
+*** TODO [#C] Display breaks and lunch in the schedule
+:PROPERTIES:
+:CREATED: [2022-11-25 Fri 10:56]
+:END:
+
+** DONE Process confirmations as we receive them :sachac:zaeph:
+CLOSED: [2022-10-07 Fri 14:18]
+:PROPERTIES:
+:CUSTOM_ID: confirm-post-process
+:END:
+
+- Reply to the speaker and Cc -submit to confirm the confirmation. Something like "Confirming your confirmation, no reply needed to this one. Thank you!"
+- Update talk to WAITING_FOR_PREREC in conf.org
+- Add a note in the logbook (C-c C-z - org-add-note) for the talk entry
+- Add :PUBLIC_EMAIL: t if given permission to use the e-mail on the
+ talk page, or set it to an alternative e-mail if provided.
+- Update the public wiki's ${year}/talks/{$slug}.md page to add the
+ e-mail address as <mailto:person@example.com> on the speaker
+ information line.
+- At some point, use =M-x emacsconf-generate-talk-pages= to update the e-mail address used in the footer.
+
+#+begin_src emacs-lisp :results replace table :eval never-export
+(let (waiting)
+ (save-window-excursion
+ (with-current-buffer (find-file emacsconf-org-file)
+ (org-map-entries (lambda () (add-to-list 'waiting
+ (list (org-entry-get (point) "SLUG")
+ (org-entry-get (point) "ITEM")))) "TODO=\"TO_CONFIRM\"")))
+ waiting)
+#+end_src
+
+#+RESULTS:
+:results:
+:end:
+
+** CANCELLED Create Org heading for scheduling caption team's live IRC duty shifts :dto:
+CLOSED: [2022-10-07 Fri 14:24] DEADLINE: <2022-09-30 Fri>
+See [[#shifts]]
+
+** DONE Sacha: Organize volunteer information :sachac:
+** DONE Once talks are approved
+- sacha: Publish initial talk information pages
+- Double-check talk pages, format them nicely
+- Publish draft schedule
+- Confirm e-mail communication with all of the speakers
+
+Process for accepting a talk:
+
+- Create subtree for talk and populate it with properties.
+ - Required: CUSTOM_ID SLUG NAME NAME_SHORT EMAIL AVAILABILITY Q_AND_A TRACK MAX_TIME
+ - Optional: PRONOUNS PRONUNCIATION IRC PUBLIC_EMAIL MIN_TIME EMERGENCY
+ - Can be validated with ~emacsconf-validate-talk-subtree~
+ - Add a talk abstract subtree
+- Add it to emacsconf-schedule-plan and fiddle with it until the flow looks good
+- Execute the draft-schedule block to update the schedule in the Org file
+- Add the talk page to the wiki with ~emacsconf-add-talk-page~.
+- Stage, commit, and push the wiki files. Make sure to add the talk page and the info pages.
+- Doublecheck the wiki page on the web, since the e-mail refers to it.
+- E-mail the speaker the acceptance by using ~emacsconf-draft-acceptance-for-email-group~ from ~organizers-notebook/~.
+- Log the acceptance using ~C-c C-z~ in the talk subtree in ~conf.org~, noting the number of minutes.
+- Change the status to TO_CONFIRM.
+
+** DONE Remind people about confirming e-mail communications :sachac:email:speakers:
+CLOSED: [2022-10-08 Sat 18:55] SCHEDULED: <2022-10-08 Sat>
+:PROPERTIES:
+:CUSTOM_ID: confirm-email
+:END:
+
+Look for the TO_CONFIRM status in conf.org, probably include in schedule e-mail
+** DONE Send people schedule information and doublecheck their availability/Q&A preference :sachac:email:speakers:sched:
+CLOSED: [2022-10-09 Sun 09:38] SCHEDULED: <2022-10-08 Sat>
+:PROPERTIES:
+:CUSTOM_ID: check-sched
+:END:
+
+#+begin_src emacs-lisp
+(defun emacsconf-mail-schedule (group &optional template)
+ "Send draft schedule.
+GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (require 'emacsconf-ical)
+ (let ((reply-by-date (date-to-time "2022-10-14"))
+ (draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "check-sched"))
+ (car group)
+ (list
+ :titles
+ (mapconcat (lambda (o) (format "%s: %s"
+ (plist-get o :slug)
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ emacsconf-timezone)))
+ (cdr group) "; ")
+ :draft-schedule
+ draft-schedule
+ :speakers-short
+ (plist-get (cadr group) :speakers-short)
+ :plural
+ (if (= (length (cdr group)) 1) "" "s")
+ :email
+ (plist-get (cadr group) :email)
+ :year
+ (or (plist-get (cadr group) :year) emacsconf-year)
+ :coordination-note
+ (if (seq-find (lambda (o) (member (plist-get o :slug) '("journalism" "rolodex" "orgsuperlinks" "buttons" "hyperorg" "science")))
+ (cdr group))
+ "I've changed the order slightly from the coordination e-mail I sent you. The sequence is now journalism - science - rolodex - orgsuperlinks - buttons - hyperorg. science is now second instead of last, and the first two talks are on Sat while the last four are on Sun. That probably means you don't have to coordinate as much, but you can still do so if you would like to build on other people's talks."
+ "")
+ :schedule
+ (mapconcat
+ (lambda (o) (format "* TODO Check time for \"%s\" (%s) :emacsconf:\nDEADLINE: %s\n(Not a hard deadline, just encouragement to e-mail us before that date if you can)\nPlease e-mail [[mailto:emacsconf-submit@gnu.org]] if you need it changed\n%s track\n%s\nIn context: %s"
+ (plist-get o :title)
+ (plist-get o :slug)
+ (format-time-string (car org-time-stamp-formats) reply-by-date emacsconf-timezone)
+ (plist-get o :track)
+ (string-join
+ (let ((emacsconf-timezones
+ (if (plist-get o :timezone)
+ (seq-uniq (append (list emacsconf-timezone)
+ (split-string (plist-get o :timezone) " ")
+ (list "UTC")))
+ emacsconf-timezones)))
+ (emacsconf-timezone-strings o))
+ "\n")
+ draft-schedule))
+ (cdr group)
+ "\n----------------------------------------------------------------\n")
+ :reply-by
+ (format-time-string "%b %-e (%a)" reply-by-date emacsconf-timezone)
+ :timezone-note
+ (if (plist-get (cadr group) :timezone)
+ (format "I've included timezone conversion to %s. Let me know if you'd like me to use a different timezone in future e-mails."
+ (plist-get (cadr group) :timezone) " ")
+ "I can translate times into your local timezone. Let me know what timezone you'd like me to use.")
+ :availability-note
+ (cond
+ ((seq-find (lambda (o) (string-match "yes" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you've indicated that you're available during the conference."))
+ ((seq-find (lambda (o) (string-match "not indicated" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you didn't indicate any particular availability constraints in your submission."))
+ (t (format "I think it respects your indicated availability, which we've noted as %s."
+ (string-join
+ (seq-uniq
+ (mapcar
+ (lambda (o) (format "\"%s\"" (plist-get o :availability)))
+ (cdr group)))
+ " and "))))))))
+
+(defun emacsconf-mail-schedule-update (group &optional template)
+ "Send draft schedule update.
+GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (require 'emacsconf-ical)
+ (let ((reply-by-date (date-to-time "2022-10-14"))
+ (draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "check-sched"))
+ (car group)
+ (list
+ :titles
+ (mapconcat (lambda (o) (format "%s: %s"
+ (plist-get o :slug)
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ emacsconf-timezone)))
+ (cdr group) "; ")
+ :draft-schedule
+ draft-schedule
+ :speakers-short
+ (plist-get (cadr group) :speakers-short)
+ :plural
+ (if (= (length (cdr group)) 1) "" "s")
+ :email
+ (plist-get (cadr group) :email)
+ :year
+ (or (plist-get (cadr group) :year) emacsconf-year)
+ :coordination-note
+ (if (seq-find (lambda (o) (member (plist-get o :slug) '("journalism" "rolodex" "orgsuperlinks" "buttons" "hyperorg" "science")))
+ (cdr group))
+ "I've changed the order slightly from the coordination e-mail I sent you. The sequence is now journalism - science - rolodex - orgsuperlinks - buttons - hyperorg. science is now second instead of last, and the first two talks are on Sat while the last four are on Sun. That probably means you don't have to coordinate as much, but you can still do so if you would like to build on other people's talks."
+ "")
+ :schedule
+ (mapconcat
+ (lambda (o) (format "\"%s\" (%s)\n%s track\n%s\nIn context: %s"
+ (plist-get o :title)
+ (plist-get o :slug)
+ (plist-get o :track)
+ (replace-regexp-in-string
+ "^\\(.*\\)\n\\(.*\\)"
+ "\\1\nIn other timezones:\n\\2"
+ (string-join
+ (let ((emacsconf-timezones
+ (if (plist-get o :timezone)
+ (seq-uniq (append (list emacsconf-timezone)
+ (split-string (plist-get o :timezone) " ")
+ (list "UTC")))
+ emacsconf-timezones)))
+ (emacsconf-timezone-strings o))
+ "\n"))
+ draft-schedule))
+ (cdr group)
+ "\n----------------------------------------------------------------\n")
+ :reply-by
+ (format-time-string "%b %-e (%a)" reply-by-date emacsconf-timezone)
+ :timezone-note
+ (if (plist-get (cadr group) :timezone)
+ (format "I've included timezone conversion to %s. Let me know if you'd like me to use a different timezone in future e-mails."
+ (plist-get (cadr group) :timezone))
+ "I can translate times into your local timezone. Let me know what timezone you'd like me to use.")
+ :availability-note
+ (cond
+ ((seq-find (lambda (o) (string-match "yes" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you've indicated that you're available during the conference."))
+ ((seq-find (lambda (o) (string-match "not indicated" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you didn't indicate any particular availability constraints in your submission."))
+ (t (format "I think it respects your indicated availability, which we've noted as %s."
+ (string-join
+ (seq-uniq
+ (mapcar
+ (lambda (o) (format "\"%s\"" (plist-get o :availability)))
+ (cdr group)))
+ " and "))))))))
+#+end_src
+
+*** Template
+:PROPERTIES:
+:EMAIL_ID: check-sched
+:SUBJECT: EmacsConf draft schedule: ${titles}
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:FUNCTION: emacsconf-mail-schedule
+:END:
+Hi, ${speakers-short}!
+
+Here's the tentative schedule for when your EmacsConf talk${plural}
+will be streamed. Your talk${plural} will be streamed once, but I've
+included a few timezone conversions for convenience.
+
+----------------------------------------------------------------
+${schedule}
+----------------------------------------------------------------
+
+${availability-note} You'll also have time for Q&A afterwards, which
+can be as short or as long as you like. We'll send you more
+information about how the Q&A will work as the conference gets closer.
+
+If you'd like to see the other talks for context, you can check out
+the draft schedule at https://emacsconf.org/${year}/draft-schedule/ .
+The times may move around a bit as we update the schedule, so I'll
+check in with you if things change a lot. ${coordination-note}
+
+We'd like to publish the schedule this month, so we'd love to hear
+from you by *${reply-by}* if the times don't work for you. (We can
+shuffle things around even after that date if something comes up.)
+Also, if you think your talk${plural} would go better next to a
+different talk, please let us know. ${timezone-note} Please keep
+emacsconf-submit@gnu.org in To or Cc when replying. Thanks!
+
+Sacha
+*** Schedule change affecting dev
+:PROPERTIES:
+:SUBJECT: EmacsConf draft schedule update 2 this time with the updated times: ${titles}
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:FUNCTION: emacsconf-mail-schedule-update
+:SLUGS: treesitter lspbridge asmblox wayland
+:EMAIL_ID: sched-change
+:END:
+
+(Please ignore the previous update, I included the wrong times in the
+e-mail. The web version's been fine, though! Sorry about the extra
+e-mails.)
+
+I tweaked the schedule to put treesitter and lspbridge earlier, so
+asmblox and wayland are a little later on Saturday morning. If you'd
+like to see the latest schedule for your talk, you can go to
+https://emacsconf.org/${year}/draft-schedule/ . Thanks for your
+patience!
+
+----------------------------------------------------------------
+${schedule}
+----------------------------------------------------------------
+
+(no need to reply to this to confirm, unless I broke the schedule for
+you and you want me to fix it)
+
+Sacha
+*** Schedule change for buddy/meetup
+:PROPERTIES:
+:SUBJECT: EmacsConf draft schedule update 3: ${titles}
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:FUNCTION: emacsconf-mail-schedule-update
+:SLUGS: buddy meetups
+:EMAIL_ID: sched-change-meetups
+:END:
+
+Hi ${speakers-short}!
+
+I tweaked the schedule to allocate a little more time for the meetups
+talk, and I moved the buddy talk earlier to make space. I think this
+might improve the flow as well, since the meetups will refer to how
+meeting up with a buddy is a good way to get a public Emacs meetup off
+the ground. If you'd like to see the latest schedule for your talk,
+you can go to https://emacsconf.org/${year}/talks/ . Thanks for your
+patience!
+
+----------------------------------------------------------------
+${schedule}
+----------------------------------------------------------------
+
+(no need to reply to this to confirm, unless I broke the schedule for
+you and you want me to fix it)
+
+Sacha
+
+** DONE Volunteer communications: E-mail update for Oct 9, 2022 :email:volunteers:
+CLOSED: [2022-10-09 Sun 21:16] SCHEDULED: <2022-10-09 Sun>
+:PROPERTIES:
+:CUSTOM_ID: volunteer-2022-10-09
+:END:
+
+Add your news and requests to this.
+
+*** Template so far
+:PROPERTIES:
+:SUBJECT: Getting things ready for EmacsConf 2022
+:TO: emacsconf-org@gnu.org
+:END:
+
+Hello, EmacsConf volunteers!
+
+We're starting to gear up for EmacsConf 2022, and we would love to
+figure out how to work with your skills, interests, and availability.
+<https://emacsconf.org/2022/volunteer/> has some specific task ideas and
+general roles.
+
+<https://emacsconf.org/2022/organizers-notebook/#overall> has an
+overall prioritization matrix. If any of those options look like
+something you want to learn or help with, or if you want to make
+things even better than what's in the table, let me know.
+
+Given the number of talks this year, we're going to try to see if we
+can pull off two tracks. I've posted a draft schedule at
+<https://emacsconf.org/2022/draft-schedule/> and have e-mailed speakers
+to confirm their availability. This schedule staggers live Q&A
+sessions so that the person managing the streams can jump back and
+forth as needed. We'll figure out shifts once we've sorted out the
+processes and training info, but if you want to call dibs on
+something, feel free.
+<https://emacsconf.org/2022/organizers-notebook/#shifts>
+
+Please let me know what kinds of things you'd like to learn more about
+or help out with!
+
+Sacha Chua
+
+(You're receiving this e-mail because you're on the emacsconf-org
+mailing list. Thanks for wanting to help out!)
+
+** DONE Delete all the EmacsConf BBB rooms from last year :chore:bbb:zaeph:
+CLOSED: [2022-10-11 Tue 19:32]
+:PROPERTIES:
+:CUSTOM_ID: bbb-cleanup
+:END:
+For the admins on BBB. The list is accessible here: [[https://bbb.emacsverse.org/b/admins/rooms][Organization Settings]].
+Should take no more than ~20′.
+** DONE Write volunteer update
+CLOSED: [2022-10-17 Mon 08:24] SCHEDULED: <2022-10-17 Mon>
+:PROPERTIES:
+:CUSTOM_ID: volunteer-2022-10-16
+:END:
+
+Hello, folks! Here's the weekly update on what's happening backstage
+for EmacsConf 2022 in case you notice something that you want to help
+out with. =)
+
+- All the speakers have confirmed that they've gotten the acceptance
+ e-mails. Many speakers have confirmed that the schedule works for
+ them after I reshuffled a few talks for better availability. I've
+ posted the schedule at https://emacsconf.org/2022/talks/ . We'll
+ announce the schedule on the emacsconf-discuss mailing, Reddit, and
+ various places this week.
+
+- zaeph has been working on the ffmpeg incantations for preprocessing
+ the videos that will be submitted soon. bandali is working on
+ getting the FTP and web-based uploads sorted out so that speakers
+ can submit their videos.
+
+- I created some watch pages to support viewing different tracks:
+ https://emacsconf.org/2022/watch/ . The livestreams won't work yet
+ and it would be nice to figure out something that can dynamically
+ display info for recent/current/upcoming talks, but it's a start.
+
+- We set up a self-hosted Etherpad (ex:
+ https://pad.emacsconf.org/2022-journalism) with an easy way to
+ redirect to using Wikimedia in case we run into scaling issues. I've
+ added it to our Ansible playbook
+ (git@git.emacsconf.org:pub/emacsconf-ansible) and I'm looking
+ forward to incorporating Ry P.'s improvements. Karl Voit gave
+ feedback on the first draft of the template.
+
+- vetrivln volunteered for some of the dev hosting shifts, Karl Voit
+ volunteered for some of the gen pad shifts, and FlowyCoder
+ volunteered for some of the gen check-in shifts. Thanks!
+
+Next week, we hope to:
+
+- Announce the EmacsConf 2022 schedule in the usual places (got any wording/JS/CSS suggestions?)
+- Finalize the upload instructions so that speakers can start submitting their files
+- Put together volunteer training materials
+- Set up per-speaker BBB rooms and friendly URLs
+
+Sacha
+
+** DONE Publish icals :sachac:
+CLOSED: [2022-10-19 Wed 18:46]
+:PROPERTIES:
+:CUSTOM_ID: ical
+:Effort: 1:00
+:END:
+
+It would be nice to have track-specific icals as well.
+
+*** DONE [#A] Check icals, create org schedule
+CLOSED: [2022-11-23 Wed 10:14] SCHEDULED: <2022-11-23 Wed>
+:PROPERTIES:
+:CREATED: [2022-11-23 Wed 07:29]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-23 Wed 09:37]--[2022-11-23 Wed 10:14] => 0:37
+:END:
+
+https://www.reddit.com/r/emacs/comments/yilmhv/emacsconf_2022_dec_3_4_schedule/ixgt1wr?utm_medium=android_app&utm_source=share&context=3
+
+** DONE [#A] Figure out web-based file upload :needsowner:sachac:ansible:
+CLOSED: [2022-10-19 Wed 09:20] SCHEDULED: <2022-10-18 Tue>
+:PROPERTIES:
+:CUSTOM_ID: upload
+:END:
+zaeph: I can work on it, but I’m not experienced in this domain, so I’d prefer to be a back-up.
+task is currently with bandali
+
+Lesson learned from last year: "Since people kept running into ftp
+problems, we might want to set up a web-frontend next year to minimise
+problems."
+
+Maybe we could ask some of the volunteers who wanted to help us with
+the infra? It shouldn’t be complicated to deploy a ready-made
+solution.
+
+"file drop" is a common keyword for looking for information.
+Considerations:
+- Probably run it on media.emacsconf.org
+- Bonus features:
+ - password-protected or hidden behind some kind of authentication or hidden behind some kind of URL, so we don't have to worry too much about spam
+ - extra points for sending speakers links to upload to specific folders so that we can separate resources by talk
+ - Resumable uploads would be good, since some speakers had a hard time with unreliable connections
+- What other conferences do:
+ - LibrePlanet uses plain FTP and recommends FileZilla https://libreplanet.org/wiki/Video_upload_instructions
+ - FOSSDEM uses Pentabarf to receive uploads https://archive.fosdem.org/2022/manuals/program/speaker/
+ - DebConf uses SReview(?)
+ - FOSSGIS uses Seafile https://vmx.cx/cgi-bin/blog/index.cgi/video-uploads-for-an-online-conference%3A2021-06-12%3Aen%2Cconference%2Cgeo
+- Some options:
+
+ | Project | Docker | Buster | Base | Notes |
+ | https://www.projectsend.org/ | | | php+mysql | |
+ | https://github.com/pomf/pomf | | | php+mysql | |
+ | https://github.com/psi-4ward/psitransfer | official | | node | can set upload password, resumable; data volume needs uid 1000 |
+ | https://github.com/epoupon/fileshelter | official | ppa | C++ | |
+ | https://github.com/mickael-kerjean/filestash | official | | | general FTP client |
+ | https://gitlab.com/moejo42/Jirafeau | official | | php | |
+ | https://github.com/YouTransfer/YouTransfer | official | | node | looking for maint |
+ | https://github.com/dutchcoders/transfer.sh/ | | | | |
+ | https://github.com/eikek/sharry | | | | |
+ - NextCloud
+
+ anon FTP upload currently goes to /srv/ftp/anon/ on media.emacsconf.org
+
+ [[file:/ssh:media|sudo::/etc/vsftpd.conf]]
+
+ Maybe I'll do psitransfer as a direct install
+
+*** DONE Create 2022/upload.md with the same workflow as last year for a start
+CLOSED: [2022-10-18 Tue 14:37]
+*** DONE Implement new workflow
+CLOSED: [2022-10-18 Tue 14:37]
+** DONE Update IRC instructions because of multiple tracks
+CLOSED: [2022-10-16 Sun 17:39]
+:PROPERTIES:
+:CUSTOM_ID: irc
+:END:
+
+Added to watch pages
+** DONE Move scheduling and publishing code to Emacs on a VPS so that other people can help out :sachac:
+:PROPERTIES:
+:CUSTOM_ID: publishing-sched
+:END:
+Ideal:
+- Update pages with watching information, additional resources, etc. as talks go live
+- Update the schedule as needed (cancelled or reordered talks, etc.)
+
+Where:
+- front? my own VPS?
+
+ Nice if there's an Ansible playbook
+
+ sachac's notes:
+ [[file:~/code/docker/emacsconf-publish/]]
+- probably good to set it up on front
+
+It's now on front.
+
+** DONE Prepare email for nudging speakers to send prerec, and inform on upload workflow :timesensitive:needsowner:
+CLOSED: [2022-10-22 Sat 08:42]
+:PROPERTIES:
+:CUSTOM_ID: mail-upload
+:END:
+
+*** Code
+
+#+begin_src emacs-lisp
+(defun emacsconf-mail-upload (group &optional template)
+ "Send upload instructions and reminder.
+GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (let ((action-date (date-to-time "2022-11-04")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "upload"))
+ (car group)
+ (list
+ :slugs (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) " or ")
+ :speakers-short (plist-get (cadr group) :speakers-short)
+ :plural (if (= (length (cdr group)) 1) "" "s")
+ :email (plist-get (cadr group) :email)
+ :year (or (plist-get (cadr group) :year) emacsconf-year)
+ :prerec-note (emacsconf-surround
+ (make-string 64 ?-)
+ (string-join (seq-uniq (mapcar
+ (lambda (o)
+ (plist-get o :prerec-info))
+ (cdr group)))
+ "\n")
+ (make-string 64 ?-)
+ "")))))
+#+end_src
+
+*** Template
+:PROPERTIES:
+:EMAIL_ID: upload
+:FUNCTION: emacsconf-mail-upload
+:SUBJECT: EmacsConf upload instructions
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:END:
+
+Hi, ${speakers-short}!
+
+${prerec-note}Here are the instructions for uploading the
+video${plural} for your talk${plural}. You can find the latest version
+of the instructions at https://emacsconf.org/2022/upload/ . There are
+two ways to upload your talk${plural} this year, so you can pick the
+one that works best for you:
+
+- Web-based: https://ftp-upload.emacsconf.org , password emacsconf
+- FTP: host: ftp-upload.emacsconf.org, port: 21, username: anonymous
+ folder: upload-here
+
+If you upload slides and other resources, we can include them on the
+talk page when your talk goes live. If you happen to have a script or
+a transcript, please include them as well (it’ll speed up the
+captioning for us).
+
+Please add a comment or start your filenames with the ID for the talk
+that it's for: ${slugs}.
+
+If you're still working on your talk, you might find the tips at
+https://emacsconf.org/2022/prepare useful. In brief:
+
+- at least 1280x720 resolution
+- we recommend dark text on a light background, with enough contrast
+ to make it easy to read
+- if possible, use a headset or external microphone to record audio
+ in order to minimize computer noise
+- upload a separate 5 second recording of quiet or leave 5 seconds
+ of quiet at the end of your talk video so that we can process your
+ video for noise reduction
+
+Please plan to upload your talk by November 4 (next Friday) so that we
+can get started preparing it for streaming. If you can't make it by
+then, we can accept later submissions, although it's a bit more of a
+scramble and our stress levels go up as the conference approaches. =)
+We'd really appreciate the extra time for captioning and
+double-checking. Thank you for your help in getting ready for a smooth
+EmacsConf 2022!
+
+Sacha Chua
+** DONE Send backstage email
+CLOSED: [2022-10-22 Sat 09:23]
+
+#+begin_src emacs-lisp
+(defun emacsconf-mail-backstage-info (group &optional template)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "backstage"))
+ (plist-get group :email)
+ (append group
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :conf-name emacsconf-name
+ :year emacsconf-year))))
+(defun emacsconf-mail-backstage-info-to-speakers-and-captioners ()
+ (interactive)
+ (let ((template (emacsconf-mail-merge-get-template "backstage"))
+ (speaker-groups
+ (seq-uniq
+ (mapcar
+ (lambda (talk)
+ (list
+ :name (plist-get talk :speakers-short)
+ :email (plist-get talk :email)
+ :role "speaker"
+ :backstage-use
+ "As we add more talks, you can skim through any relevant ones to
+see if there are any points you'd like to build on in your talk.
+Also, you can get a sense of what we do behind the scenes to try
+to get as many talks captioned for broadcast, and what you can do
+to make it easier. (A text file with names and technical terms
+can be helpful. No need to type out a manual transcript if you
+don't start from a script.) After you upload your talk and we
+process the files, you can use the backstage area to check the
+quality of the reencoded video."))
+ (seq-filter (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC"))
+ (emacsconf-filter-talks (emacsconf-get-talk-info))))))
+ (volunteer-groups
+ (with-current-buffer (find-file-noselect emacsconf-org-file)
+ (org-map-entries (lambda ()
+ (list :name (org-entry-get (point) "NAME_SHORT")
+ :email (org-entry-get (point) "EMAIL")
+ :role "captioning volunteer"
+ :backstage-use "If you see a talk that you'd like to caption, you can e-mail me at sacha@sachachua.com and I can reserve it for you."))
+ "captions"))))
+ (mapcar (lambda (g) (emacsconf-mail-backstage-info g template))
+ (append
+ speaker-groups
+ (seq-remove (lambda (v) (seq-find (lambda (s) (string= (plist-get s :email)
+ (plist-get v :email)))
+ speaker-groups))
+ volunteer-groups)))))
+
+#+end_src
+
+*** Template
+:PROPERTIES:
+:SUBJECT: EmacsConf backstage area with videos and other resources
+:EMAIL_ID: backstage
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:END:
+
+Hi ${name}!
+
+You're getting this e-mail because you are a ${role} for ${conf-name}
+${year}. (Thanks!)
+
+I'm so excited! =) A number of speakers have uploaded their videos,
+and OpenAI Whisper looks like a promising way to get automatically
+generated captions that we can use as a starting point.
+
+We've set up ${backstage} as the backstage area where you can view the
+videos and resources uploaded so far. You can access it with the
+username "${backstage-user}" and the password "${backstage-password}".
+Please keep the backstage password and other speakers' talk resources
+secret. ${backstage-use}
+
+Thank you!
+
+Sacha Chua
+
+** DONE Write playbooks
+CLOSED: [2022-10-22 Sat 09:25]
+*** DONE Host :zaeph:
+CLOSED: [2022-10-20 Thu 11:30]
+https://emacsconf.org/2022/volunteer/host
+
+*** CANCELLED Streamer :zaeph:
+CLOSED: [2022-10-22 Sat 09:24]
+:PROPERTIES:
+:CUSTOM_ID: inform-streamer-volunteers
+:END:
+Blocked by [[#streaming]]
+
+bandali and corwin/zaeph will do the streaming, so writing the streaming playbook is a little lower priority for now
+*** DONE Check-in
+CLOSED: [2022-10-16 Sun 21:26]
+[[https://emacsconf.org/2022/volunteer/checkin/]]
+*** DONE IRC
+CLOSED: [2022-10-16 Sun 21:38]
+https://emacsconf.org/2022/volunteer/irc/
+*** DONE Pad
+CLOSED: [2022-10-17 Mon 00:25]
+:PROPERTIES:
+:CUSTOM_ID: inform-pad-volunteers
+:END:
+https://emacsconf.org/2022/volunteer/pad/
+*** DONE Captions
+CLOSED: [2022-10-17 Mon 00:25]
+:PROPERTIES:
+:CUSTOM_ID: inform-pad-volunteers
+:END:
+https://emacsconf.org/2022/volunteer/caption/
+** CANCELLED [#C] Figure out why ikiwiki is slow :infra:wiki:
+CLOSED: [2022-10-22 Sat 09:26]
+:PROPERTIES:
+:CUSTOM_ID: ikiwiki-regex
+:END:
+complex regular expression issues?
+should the captions be outside the wiki?
+** CANCELLED Add nice-to-have stuff to prepare.md :zaeph:
+CLOSED: [2022-10-22 Sat 09:27]
+:PROPERTIES:
+:CUSTOM_ID: extra-prepare
+:END:
+- org-reveal config
+- SIL fonts choice
+
+** DONE Write volunteer update 2022-10-23 :update:
+CLOSED: [2022-10-23 Sun 10:22]
+:PROPERTIES:
+:CUSTOM_ID: volunteer-2022-10-23
+:TO: emacsconf-org@gnu.org
+:END:
+
+Hello, folks! Here's the weekly update on what's happening backstage
+for EmacsConf 2022 in case you notice something that you want to help
+out with. =)
+
+- We've e-mailed the speakers instructions for uploading their files through either a web browser or an FTP client, and three speakers have already done so! Those talks are now available in the backstage area (https://media.emacsconf.org/2022/backstage/), along with the first set of edited captions (thanks Jai Vetrivelan!). If you don't have the username and password for the backstage area and you would like to access it, please e-mail me and I'll send you the details.
+- We've created a BBB room for each speaker's live Q&A session. The URLs are in conf.org in the private repository if you need them.
+- We've drafted some documentation for different volunteer roles. If you'd like to volunteer as a captioner, check-in person (hmm, reception?), Etherpad scribe, IRC monitor, or host, please check out the appropriate link and let me know if I need to add anything to the docs:
+ - https://emacsconf.org/2022/volunteer/caption
+ - https://emacsconf.org/2022/volunteer/irc
+ - https://emacsconf.org/2022/volunteer/pad
+ - https://emacsconf.org/2022/volunteer/checkin
+ - https://emacsconf.org/2022/volunteer/host
+- Thanks to David O'Toole for signing up for some IRC shifts! If you would like to volunteer for a shift, check out https://emacsconf.org/2022/organizers-notebook/#shifts .
+- We've updated our streaming configuration for the General and Development tracks, and have started testing them using mpv and the watch pages. Videos aren't currently streaming, but you can check out the layout of the watch pages at:
+ - https://emacsconf.org/2022/watch/gen/
+ - https://live.emacsconf.org/2022/watch/gen/
+ - https://emacsconf.org/2022/watch/dev/
+ - https://live.emacsconf.org/2022/watch/dev/
+ These pages could probably be a lot prettier and easier to use. If you have some ideas for improving them or if you'd like to work on the HTML/CSS/JS, we'd love your help!
+- There are now Q&A waiting rooms with friendly URLs so that it's easier for people to join the live Q&A when the host decides it's okay to let everyone in. They're linked on the watch pages (along with the pads) and they'll be linked from the talk pages once we're ready to share them.
+- zaeph has been busy tweaking the ffmpeg workflow for reencoding and normalizing videos. Thanks to Ry P. for sharing the res.emacsconf.org server with us - we've been using it for all the processing that our laptops can't handle.
+- We experimented with using the OpenAI Whisper speech-to-text toolkit to create the auto-generated captions that captioning volunteers can edit. Looks promising! If you'd like to compare the performance between small, medium, and large models, you can look at the VTT files for the sqlite talk in the backstage area. I've also added support for tab-separated values (like Audacity label exports) and a subed-convert command to subed.el, which might give us a more concise format to work with. I'll work on getting word-level timing data so that our captioning workflow can be even easier.
+
+Next week, we hope to:
+
+- improve the prerec and captioning workflows
+- get more captions underway
+
+Lots of good stuff happening!
+
+Sacha Chua
+
+** DONE 2022-10-30 volunteer update
+CLOSED: [2022-10-30 Sun 19:46]
+:PROPERTIES:
+:CUSTOM_ID: volunteer-2022-10-30
+:END:
+
+Hello, everyone! Here's the weekly update on what's happening backstage
+for EmacsConf 2022 in case you notice something that you want to help
+out with. =)
+
+- Help wanted - Captioning: There are three talks open for captioning
+ in <https://media.emacsconf.org/2022/backstage/> , so feel free to
+ e-mail me if you'd like to reserve one. I've tweaked the captioning
+ process a little bit so that I can reflow the transcripts into
+ shorter subtitles before people edit the captions, so editing is
+ easier to do because you don't have to split along the way. (If
+ you're curious about the technical stuff, I switched to manually
+ splitting the text using emacsconf-reflow from emacsconf-el and then
+ the using aeneas for forced alignment, because I couldn't figure out
+ how to get torchaudio unstuck sometimes.)
+
+ If you don't have the username and password for the backstage area
+ and you would like to access it, please e-mail me and I'll send you
+ the details.
+
+- Help wanted - tech checks: For sessions with live Q&A, we'd like to
+ set up tech-checks with speakers to make sure that their setup works
+ well with BigBlueButton. A rough outline of the process is in the
+ tech-checking protocol heading at
+ <https://emacsconf.org/2022/organizers-notebook/#tech-checks> . If you
+ would like to help with tech-checks, please e-mail us with your
+ general availability (including timezones) and preferred public
+ contact information so that we can include you on the list at
+ <https://emacsconf.org/2022/prepare/#tech-check> and in the e-mail to
+ speakers.
+
+- Help wanted - intro/intermission slides, OBS overlay, ??: It might
+ be interesting to design something to show right before and right
+ after a talk so that people can see the title, speaker name, talk
+ page URL, Q&A info, pad URL, pronouns, etc. Ideally we'd be able to
+ generate a whole bunch of these from the talk data, so maybe SVG or
+ a TikZ picture? If this is your jam, let us know.
+
+- OBS in the cloud: We've been able to figure out how to stream both
+ streams using OBS, VNC, and PulseAudio on Ry P.'s virtual server, so
+ it's even more likely that we're going to pull off two tracks this
+ year. Yay!
+
+- Tom Purl has joined as a captioning volunteer. Hi Tom!
+
+This week we hope to get lots of talks submitted, processed, and on
+the way to being captioned. We're also planning to make the captioning
+workflow even better, and to improve the OBS streaming workflow. Whee!
+
+Sacha <sacha@sachachua.com>
+
+** Volunteer update 2022-11-07
+:PROPERTIES:
+:CUSTOM_ID: volunteer-2022-11-07
+:END:
+
+Hi everyone!
+
+Here's what's been happening backstage.
+
+- Speakers have been submitting their videos, hooray! I added a
+ schedule to the backstage page at
+ <https://media.emacsconf.org/2022/backstage/> so that people can see
+ how the schedule's coming along. We expect more talks to come in the
+ next two weeks. Not panicking yet. =)
+
+- Thanks to all the people who've been working on captions so far!
+ Bhavin, Andrea, and Ramin did the captions for their talks, and Jai
+ captioned Bala's talk. Tom, Bhavin, and Hannah are currently working
+ on captions. There are three more talks backstage if anyone wants to
+ work on them.
+
+- I just posted some notes on how I reflow and edit subtitles in case
+ they're helpful:
+ <https://media.emacsconf.org/2022/backstage/editing-captions.html>
+ It's also linked from the backstage page under More info: editing
+ captions.
+
+- We added the Emacs development updates talk from John Wiegley and
+ updated the times of other talks based on messages from the
+ speakers.
+
+- We did a dry run of the OBS streaming setup with Leo, Amin, and
+ Corwin. I think we're on track to being able to broadcast two
+ streams this year.
+
+- IRC announcements, BBB redirection, and media file publishing can
+ now all automatically happen when the talk status changes,
+ simplifying our work during the conference. Video playback and Q&A
+ browser windows can happen automatically if streaming from
+ res.emacsconf.org. I want to get the publishing workflow all
+ smoothed out too, so that talks and transcripts can be more easily
+ published to the wiki pages during the conference.
+
+Plans for this week:
+
+- More videos and captions!
+- I plan to work on talk page publishing so that it happens smoothly during the conference
+- Leo's going to review the videos submitted so far and prepare intros for them
+- Might be a good idea to reach out to speakers for tech checks and bios
+
+EmacsConf is a little less than four weeks away. Stuff is happening!
+
+Sacha
+
+** DONE Send prerec reminder :sachac:
+CLOSED: [2022-11-11 Fri 19:27] SCHEDULED: <2022-11-11 Fri>
+:PROPERTIES:
+:CUSTOM_ID: prerec-reminder
+:END:
+*** DONE Update logbook with notes from e-mails :sachac:
+CLOSED: [2022-11-11 Fri 19:27]
+*** DONE Follow up with speakers based on their availability
+CLOSED: [2022-11-11 Fri 19:27]
+*** CANCELLED Email speakers because I'll be shutting down the web upload
+CLOSED: [2022-12-02 Fri 19:30] SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CREATED: [2022-11-30 Wed 22:24]
+:END:
+
+** DONE Send schedule-published email for emacsconf-discuss :needsowner:timesensitive:email:
+CLOSED: [2022-11-01 Tue 08:50] SCHEDULED: <2022-10-31 Mon> DEADLINE: <2022-10-31 Mon>
+:PROPERTIES:
+:CUSTOM_ID: announce-program
+:END:
+
+Schedule is now available; post to emacsconf-discuss, emacs-tangents
+https://lists.gnu.org/archive/html/emacsconf-discuss/2022-10/msg00000.html
+
+*** DONE Post it to r/emacs as well :reddit:zaeph:
+CLOSED: [2022-11-01 Tue 08:50]
+Please let zaeph know when it’s live so that the post can be distinguished.
+
+*** Template
+:PROPERTIES:
+:SUBJECT: [ANN] EmacsConf 2022 schedule
+:TO: emacsconf-discuss@gnu.org, emacs-tangents@gnu.org
+:END:
+
+Greetings, fellow Emacsians!
+
+On behalf of the EmacsConf 2022 organizers team, I'm very excited to
+announce the schedule for EmacsConf 2022 (Dec 3 and 4), available at:
+
+ https://emacsconf.org/2022/talks
+
+All of the times listed on the schedule are in EST (UTC-5). You can
+click on each talk's title to open its page for more information,
+including its scheduled time in your local time. (Displaying local time
+requires running a tiny bit of AGPLv3+-licensed free/libre JavaScript
+code, included on the talk pages.)
+
+For prerecorded talks, this time is also when the talk's video will be
+made available on the same page. Please note that the times are
+approximations, and that the schedule may change leading up to the
+conference.
+
+As the conference approaches, we'll post more details on how to watch
+and participate.
+
+You can subscribe to the emacsconf-discuss mailing list at
+https://lists.gnu.org/mailman/listinfo/emacsconf-discuss to
+be sure you'll get updates.
+
+Want to help make EmacsConf even awesomer? Volunteer!
+https://emacsconf.org/2022/volunteer/
+
+We hope to see you all around on Dec 3-4 for EmacsConf 2022!
+
+P.S. please direct all replies to this post either to myself or to the
+emacsconf-discuss list, so as to help avoid generating extra off-topic
+chatter in the other lists cc'd in this message; thank you.
+** DONE Flesh out prepare.md for audio-recording tips before the prerec-deadline :zaeph:
+CLOSED: [2022-11-06 Sun 15:26]
+:PROPERTIES:
+:CUSTOM_ID: prepare-audio
+:END:
+** DONE Write speaker e-mail for people who have already submitted their talks
+CLOSED: [2022-11-14 Mon 20:42]
+:PROPERTIES:
+:CUSTOM_ID: speaker-after-video
+:END:
+
+To: speakers who have already submitted their talks (so that we don't distract people who are still working on their talks)
+
+#+begin_src emacs-lisp
+(defun emacsconf-mail-speaker-after-video (group &optional template)
+ (interactive (list (emacsconf-mail-complete-email-group
+ (seq-filter (lambda (o) (plist-get o :intro-note))
+ (emacsconf-active-talks (emacsconf-get-talk-info))))))
+ (setq template (or template (emacsconf-mail-merge-get-template "speaker-after-video")))
+ (let ((talks (cdr group)))
+ (emacsconf-mail-prepare
+ template
+ (car group)
+ (list :speakers-short (plist-get (cadr group) :speakers-short)
+ :plural (if (= (length (cdr group)) 1) "" "s")
+ :email (plist-get (cadr group) :email)
+ :in-between (mapconcat (lambda (talk)
+ (emacsconf-surround "<https://media.emacsconf.org/2022/in-between/" (plist-get talk :slug) ".png>" ""))
+ (cdr group)
+ ", ")
+ :intro
+ (mapconcat (lambda (talk)
+ (string-join (org-wrap (emacsconf-surround "- " (plist-get talk :intro-note) "\n" "") 70) "\n"))
+ (cdr group)
+ "")
+ :chapters
+ (mapconcat (lambda (talk)
+ (format "<https://media.emacsconf.org/2022/backstage/#%s>:\n%s"
+ (plist-get talk :slug)
+ (mapconcat
+ (lambda (chapter)
+ (concat (format-seconds "%.2h:%z%.2m:%.2s"
+ (floor (/ (elt chapter 1) 1000)))
+ " "
+ (elt chapter 3) "\n"))
+ (subed-parse-file
+ (expand-file-name (concat (plist-get talk :video-slug) "--main--chapters.vtt") emacsconf-cache-dir)))))
+ (cdr group)
+ "\n\n")
+ :caption-note
+ (if (seq-find (lambda (o) (not (string= (plist-get o :status) "TO_STREAM"))) (cdr group))
+ " The captions haven't been fully edited yet, so please ignore any errors in the captions themselves."
+ "")
+ :urls
+ (mapconcat (lambda (o) (concat "<" emacsconf-base-url (plist-get o :url) ">"))
+ (cdr group) " , ")
+ :tech-check-note
+ (if (string-match "live" (or (mapconcat (lambda (o) (or (plist-get o :q-and-a) "")) (cdr group) " ") ""))
+ (format
+ "*Tech check*
+
+Since you're planning to do a live Q&A session, you may want to
+connect to the test BBB room at <%s> to make sure you can share
+your audio, your window or screen, and your webcam (optional). Sharing
+system audio or multi-monitor setups can sometimes be tricky, so
+please let us know if you need help figuring things out. You can
+double-check by connecting with a separate device, or you can arrange
+to meet with one of the tech-check volunteers
+(<https://emacsconf.org/2022/prepare/#tech-check>).${wrap}
+
+" emacsconf-test-bbb-room) "")))
+ (add-hook 'message-sent-hook
+ `(lambda ()
+ (mapc (lambda (o)
+ (emacsconf-add-to-talk-logbook o "Sent speaker-after-video email"))
+ (list
+ ,@(mapcar (lambda (talk) (plist-get talk :slug)) talks))))
+ nil t)))
+
+(defun emacsconf-mail-speakers-after-videos ()
+ (interactive)
+ (let* ((info (seq-filter (lambda (o) (plist-get o :intro-note))
+ (emacsconf-active-talks (emacsconf-get-talk-info))))
+ (grouped (seq-group-by (lambda (o) (plist-get o :email)) info))
+ (template (emacsconf-mail-merge-get-template "speaker-after-video")))
+ (mapc (lambda (group)
+ (emacsconf-mail-speaker-after-video group template))
+ grouped)))
+
+
+#+end_src
+*** Template
+:PROPERTIES:
+:EMAIL_ID: speaker-after-video
+:FUNCTION: emacsconf-mail-speaker-after-video
+:SUBJECT: EmacsConf: miscellaneous todos now that you've sent in your video${plural}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}, sacha@sachachua.com
+:CC: emacsconf-submit@gnu.org
+:END:
+
+Hi, ${speakers-short}!
+
+Thank you for uploading your video early! Let's get a few more things
+sorted out for a smooth EmacsConf 2022.
+
+${tech-check-note}*Intro*
+
+I've written a brief (and possibly inaccurate! =) ) intro that the
+host can read out before your talk while the in-between slide
+(${in-between}) is being displayed:
+
+${intro}
+
+Would you like to tweak it to better reflect your talk?
+
+*Chapter markers*
+
+I've added chapter markers to your video in the backstage area to help
+with navigation. You can click on them in the backstage area if you
+want to easily jump around, or review the list that I've included for
+your convenience:
+
+${chapters}
+If you prefer other headings or timestamps, please let me know!${caption-note}
+
+*Bio, community support links*
+
+People often want to learn more about speakers and show their
+appreciation. If you'd like to include an author bio and any
+social/support links to your talk page${plural} (${urls}), please
+e-mail us the text that you'd like to include. You can also follow the
+instructions at <https://emacsconf.org/edit/> to edit your talk
+page${plural} directly yourself, if you want to.${wrap}
+
+Thanks again for all your contributions!
+
+Sacha
+
+** DONE Prepare for prerecs :zaeph:
+CLOSED: [2022-10-29 Sat 09:58] DEADLINE: <2022-11-04 Fri>
+:PROPERTIES:
+:CUSTOM_ID: prepare-prerec-process
+:END:
+*** DONE Optimize ffmpeg incantation
+CLOSED: [2022-10-29 Sat 09:58]
+Remember to update [[file:../prepare.md::Compression]] with the new incantation.
+
+**** Incantation from last year
+#+begin_src sh :eval no
+Q=32
+ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
+#+end_src
+
+#+RESULTS:
+:results:
+:end:
+
+**** New candidate
+Changelog:
+- Disable adaptive quantization by setting aq-mode to 0 (TODO: compare samples)
+- Add ~-row-mt 1~ needed to support ~tile-rows~ (2×2 is enough for 720p)
+- Also use tiles for first pass
+- Remove ~-frame-parallel 0~ because it’s disabled by default (see [[https://github.com/Kagami/webm.py/wiki/Notes-on-encoding-settings][Notes on encoding settings · Kagami/webm.py Wiki]])
+- Put number of CPU in variable and use it for ~cpu-used~ and ~threads~
+- Stick to default for ~auto-alt-ref~
+- Stick to default for ~lag-in-frames~
+#+begin_src sh :eval no
+Q=32
+CPU=8
+ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -an -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -g 240 -pass 1 -f webm -threads $CPU /dev/null &&
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -pass 2 -g 240 -threads $CPU "$2"
+#+end_src
+
+Other considerations:
+- We might want to tweak the time before keyframes (~-g~).
+**** FFMpeg
+https://img.ly/blog/ultimate-guide-to-ffmpeg/
+*** DONE Figure out workflow for handling submitted prerecs
+CLOSED: [2022-10-29 Sat 09:54]
+We need time after the prerecs get submitted to:
+- convert the videos and check that they've been reencoded properly by watching the re-encoded ones all the way to the end
+- caption videos
+- capture any extra info
+- follow up with missing prerecs
+
+Make changes in [[#prerec-process]]
+
+** DONE Make something to display between talks :akshay196:
+CLOSED: [2022-11-07 Mon 14:46]
+:PROPERTIES:
+:CREATED: [2022-10-03 Mon 07:50]
+:CUSTOM_ID: intro
+:END:
+
+Goals:
+- Reassure people that they're in the right stream for the talk that they're looking for
+- Direct them to the pad and Q&A for the talk
+
+What to show in between talks:
+- Previous talk: title, speaker, pronouns, talk page, Q&A information (if still live)
+- Next talk: title, speaker, pronouns, talk page, Q&A information, countdown
+
+https://media.emacsconf.org/2022/backstage/gen-in-between.pdf
+https://media.emacsconf.org/2022/backstage/dev-in-between.pdf
+
+- Good: Static image, maybe created with LaTeX
+- Better: Video with unobtrusive sound so people can doublecheck that their audio works
+- Best: Emacs thing so that we can have a dynamic timer and last-minute announcements, and so that it's Emacs =)
+- Even better than that: A compact view that can be overlaid on the Q&A session using OBS
+
+See break commercials
+https://www.collabmagazine.com/organizing-a-multi-track-virtual-conference-with-microsoft-teams-live-events-a-technical-playbook-and-lessons-learned/
+
+OBS scenes (maybe?):
+
+- splash-screen when we’re on break
+- scene when broadcasting a talk (where we might want a logo and a bar or surrounding to broadcast messages like time left in
+ recording); and
+- Q&A scene with host-webcam, optional speaker-webcam, and pad with questions.
+- Q&A scene focusing on shared screen from speaker
+- Q&A scene with IRC and pad
+
+Nothing is urgent, blocking it, or being blocked by it, so you can
+play around with ideas.
+
+We're experimenting with two tracks this year, so we expect that some
+people will join midway through a talk or Q&A session and
+would like to reorient themselves. Some Q&A sessions may end
+early, so we would like to reassure people that they're in
+the right spot for the next talk. Most Q&As will be done
+live, but some Q&As will be done over IRC, so we need to
+point people to the right place.
+
+and if there's room for a little extra info like public e-mail
+addresses or pronouns, that can help people when they discuss
+things. That info will be in the pad and IRC, though, so it's
+also okay to omit it
+
+
+
+We can programmatically replace strings in
+SVG from Emacs, so we can easily use that as an overlay.
+
+
+<zaeph> …Or, if you just want to focus on the look of
+things, we can think of the content on our own.
+
+<sachac> oh yeah, totally, you can just focus on the design and use
+placeholder text
+
+Overlay considerations:
+- talk videos will likely have subtitles; no subtitles for Q&A
+- zaeph doesn't like vertical text
+*** DONE Generate talk banners :sachac:
+CLOSED: [2022-11-07 Mon 14:46]
+https://gitlab.com/akshay196/emacsconf-artwork/-/blob/main/2022/talk-banner/sample.svg
+https://gitlab.com/akshay196/emacsconf-artwork/-/blob/main/2022/overlays/src/
+
+*** TODO [#C] Make a list of different things to plug during commercial breaks, like Mastodon :sachac:
+ :PROPERTIES:
+ :CREATED: [2022-11-17 Thu 14:25]
+ :END:
+
+*** CANCELLED Create a version of in-between that we can use for Q&A, since it's no longer "Coming Next"
+CLOSED: [2022-11-24 Thu 13:15] SCHEDULED: <2022-11-24 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-23 Wed 12:29]
+:END:
+
+** DONE Find volunteers for tech-checks :zaeph:
+CLOSED: [2022-11-19 Sat 11:08]
+:PROPERTIES:
+:CUSTOM_ID: tech-checks
+:END:
+*** DONE Add entry in 2022/volunteer.md
+*** DONE Write protocol for adding tech-checker volunteer
+CLOSED: [2022-11-19 Sat 11:08]
+- Invite volunteer to BBB (ask core organizers)
+- Update [[file:prepare.md::Tech-check]] with new tech-checker info
+- Coach tech-checker on the protocol
+*** DONE Write the tech-checking protocol (formerly referred to as “tech-checklist”)
+CLOSED: [2022-11-19 Sat 11:08]
+From previous years:
+#+begin_quote
+- Can you speak and be heard? Is there echo?
+- Can you hear the organizer?
+- Can you share your screen? Is the screen readable?
+- If you plan to show your keystrokes, is that display visible?
+- If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background?
+- Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you?
+- Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes?
+- Do you need help finding your way around IRC so that you can check into `#emacsconf-org`? What is your IRC nickname?
+#+end_quote
+** DONE Move conf.org management to orga@res.emacsconf.org :sachac:
+CLOSED: [2022-11-06 Sun 15:27]
+:PROPERTIES:
+:CUSTOM_ID: conforg
+:END:
+so that more people can work with it during the conference
+See the publish role in the ansible playbook
+
+** DONE Ask speakers for bios or support nudges to include on their talk pages :wiki:
+CLOSED: [2022-11-19 Sat 11:09]
+:PROPERTIES:
+:CUSTOM_ID: speaker-bio
+:END:
+maybe after we get the prerecs
+ex: liberapay, patreon, anyone looking for a job, etc.
+** DONE Set up BBB rooms and update conf.org :sachac:
+CLOSED: [2022-11-19 Sat 11:12]
+:PROPERTIES:
+:CUSTOM_ID: create-bbb
+:END:
+
+1. Log on to bbb.emacsverse.org as an admin.
+2. Create a room. Enable *Mute users when they join*.
+
+ The code below doesn't quite work, but might be a good starting point for future automation.
+
+ #+begin_src emacs-lisp :eval no
+(setq list (seq-drop (emacsconf-bbb-room-title-list) 3)) ; skip some if needed
+(progn
+ (setq name (pop list))
+ (kill-new (format "name=\"%s\";$('#create-room-block').click();$('#create-room-name').val(name);$('#room_mute_on_join').click();$('.create-room-button').click();\n"
+ name))
+ (sleep-for 1)
+ (shell-command "xdotool key alt+Tab sleep 3 key ctrl+v sleep 1 key Return"))
+#+end_src
+
+console.log(JSON.stringify([...document.querySelectorAll('.delete-room')].map((o) => { return { name: o.getAttribute('data-name'), path: o.getAttribute('data-path') }}).filter((o) => o.name.match(/^ec22/))))
+
+see conf.org for the rest of the process
+*** DONE Add volunteers to the BBB rooms
+CLOSED: [2022-11-08 Tue 09:48] DEADLINE: <2022-11-18 Fri>
+
+- vetrivln: sat-am-dev, sun-am-dev
+- FlowyCoder: sat-pm-gen, sun-pm-gen
+- jman: sun-pm-gen
+
+*** DONE Doublecheck mute on join
+CLOSED: [2022-11-21 Mon 12:05]
+:PROPERTIES:
+:CREATED: [2022-11-21 Mon 11:31]
+:Effort: 0:15
+:QUANTIFIED: Emacs
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-21 Mon 11:49]--[2022-11-21 Mon 12:05] => 0:16
+:END:
+[[file:~/proj/emacsconf/wiki/2022/organizers-notebook/index.org::*Shifts][Shifts]]
+
+#+begin_src js2 :eval no
+list = [...document.querySelectorAll('.room-name-editable')].filter((o) => o.value.match(/^ec22-(sat|sun)/));
+list.reduce(async(prev, elem) => {
+ await prev;
+ if (!sessionStorage.getItem(elem.value)) {
+ return new Promise(async (resolve, reject) => {
+ card = elem.closest('.card-body');
+ card.querySelector('.item-action.dropdown a').click();
+ await new Promise(r => setTimeout(r, 1000));
+ card.querySelector('.update-room').click();
+ await new Promise(r => setTimeout(r, 1000));
+ if (!document.querySelector('#room_mute_on_join').checked) {
+ document.querySelector('#room_mute_on_join').click();
+ sessionStorage.setItem(elem.value, true);
+ await new Promise(r => setTimeout(r, 1000));
+ document.querySelector('.update-only.create-room-button').click();
+ } else {
+ sessionStorage.setItem(elem.value, true);
+ document.querySelector('#createRoomModal').click();
+ }
+ resolve(true);
+ });
+ }
+});
+
+#+end_src
+** DONE Coordinate and help volunteers :sachac:
+CLOSED: [2022-11-19 Sat 11:14]
+:PROPERTIES:
+:CUSTOM_ID: coordinate-volunteers
+:END:
+
+- [[../volunteer]]
+- Figure out what information volunteers need in order to feel
+ comfortable signing up for tasks. ex:
+ https://wiki.debian.org/DebConf/21/VideoVolunteering
+- Encourage people to sign up for [[#shifts]]
+
+*** DONE Plan training session(s), Q&A availability, recordings
+CLOSED: [2022-11-19 Sat 11:14]
+*** CANCELLED Hold Q&A session with volunteers
+CLOSED: [2022-11-19 Sat 11:14]
+:PROPERTIES:
+:CUSTOM_ID: schedule-volunteer-qna
+:END:
+*** TODO Respond to new volunteers
+SCHEDULED: <2022-12-05 Mon>
+*** SOMEDAY Subscribe volunteers to mailing list
+SCHEDULED: <2022-12-08 Thu>
+:PROPERTIES:
+:CREATED: [2022-12-05 Mon 17:49]
+:END:
+
+** DONE Investigate streaming options, maybe OBS in the cloud :sachac:
+CLOSED: [2022-11-06 Sun 18:16] DEADLINE: <2022-11-20 Sun>
+:PROPERTIES:
+:CUSTOM_ID: streaming
+:END:
+
+Current status:
+
+- res.emacsconf.org seems to be able to handle 2x (OBS + TigerVNC + MPV, should test with Firefox as well)
+- corwin and jman will stream gen from OBS on res
+- bandali will stream dev from his laptop
+- let sachac know if you want manual control or more autopilot for the gen stream
+
+Goals:
+
+- [X] Be able to start a VNC server with OBS, MPV, and Firefox, connect to it, and stream
+- [X] Have another session with the sound isolated
+- [-] Split the audio so that we can join the Q&A room before the MPV ends - handled by automatic scene switcher detecting mpv, but we can't share just a window, so we might as well just wait
+- [X] Control MPV from the commandline: track-mpv appears in the correct display, and it can also be controlled via the socket like this: echo '{ "command": ["loadfile", "test2.webm"] }' | socat - ~/mpv-socket-emacsconf-dev
+- [ ] Share the window instead of the desktop?
+
+Prerequisites:
+
+- You need to be able to SSH out to res.emacsconf.org on port 46668
+ and forward ports, so one of the main organizers needs to add your
+ SSH public key to the authorized_keys file. Please e-mail your SSH
+ public key to sacha@sachachua.com and test that port 46668 is not
+ blocked.
+- For streaming from OBS in VNC, you will need a VNC viewer like
+ tigervnc-viewer.
+- For streaming from your local computer, you will need OBS and FFmpeg.
+
+During the conference, you will:
+
+- play the talk video (unless it's automatically managed by the agenda) and update the overlays
+- display intro/intermission information as needed
+- open the Q&A windows, like the pad and the BBB room/IRC (unless it's automatically managed by the agenda)
+- adjust the volume if needed
+- arrange windows and focus the BBB room on the speaker's webcam if needed
+- if you like, you can be responsible for managing the track from conf.org on orga@res.emacsconf.org
+
+Dry run checklist:
+
+- [ ] Connect to the server
+ ssh orga@res.emacsconf.org -p 46668
+ emacsconf # runs emacsclient -c -a emacs
+- [ ] Forward ports and connect via VNC
+- [ ] Find the OBS or start it if it is not running
+- [ ] Start recording
+- [ ] Play a video
+- [ ] Open two Firefox windows and arrange them
+- [ ] Manage windows on the workspace
+- [ ] Adjust the volume in OBS
+- [ ] SSH to the server and play a video off-screen
+- [ ] SSH to the server with X forwarding and adjust the volume off-screen
+
+*** Broadcasting from local OBS (option A)
+ - You can copy the profile from your track or look inside it for the icecast mount point details:
+
+ - Gen: rsync -avze 'ssh -p 46668' emacsconf-gen@res.emacsconf.org:~/.config/obs-studio/basic/profiles/ ~/.config/obs-studio/basic/profiles/
+ - Dev: rsync -avze 'ssh -p 46668' emacsconf-dev@res.emacsconf.org:~/.config/obs-studio/basic/profiles/ ~/.config/obs-studio/basic/profiles/
+
+ - Sacha will turn off the OBS recordings on res so that you can test streaming from your computer
+ - If you're doing this independently, you can jump ahead to "Connecting to VNC" in order to stop the recording yourself
+
+ - Verify with MPV:
+ #+begin_example
+ mpv https://live0.emacsconf.org/gen.webm
+ mpv https://live0.emacsconf.org/dev.webm
+ #+end_example
+
+ - With luck, the 480p streams will be up automatically as well
+ #+begin_example
+ mpv https://live0.emacsconf.org/gen-480p.webm
+ mpv https://live0.emacsconf.org/dev-480p.webm
+ #+end_example
+
+*** Connecting to VNC (option B)
+
+ 1. Stop broadcasting locally if you were testing local OBS.
+
+ 2. Install a VNC viewer on your system (ex: tigervnc-viewer).
+
+ 3. Set up your local environment:
+
+ - gen: export TRACK=gen; export TRACK_PORT=5905; export SSH_PORT=46668
+ - dev: export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668
+
+ 4. Copy the password:
+
+ scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK -p $SSH_PORT
+
+ 5. Forward your local ports and connect via VNC viewer to the
+ appropriate forwarded port from your laptop:
+
+ #+begin_example
+ ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &
+ sleep 5 # Give it time to establish the tunnels
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+ #+end_example
+
+ (If this doesn't find a VNC server to connect to, you can start it with ~ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc~)
+
+ 6. Start *recording* (not streaming). If you don't see OBS when you connect, it's probably on workspace 2, so you can switch with Alt-2. If you still don't see it there, you can open a terminal with Alt-Enter and then run ~track-obs~. After you start recording, confirm that it is now broadcasting to the stream.
+
+ 7. Verify with MPV on your local system:
+ #+begin_example
+ mpv https://live0.emacsconf.org/$TRACK.webm &
+ #+end_example
+
+ 8. With luck, the 480p streams will be up automatically as well. On your local system:
+ #+begin_example
+ mpv https://live0.emacsconf.org/$TRACK-480p.webm &
+ #+end_example
+
+ 9. Play a video. It should display the video and update the overlays. If you need to update the overlays manually, you can copy files from ~/data/emacsconf/overlays~ onto ~$HOME/other.png~ and ~$HOME/video.png~.
+
+ You can play a video with ~play video-id~ (ex: ~play meetups~), or you can specify the filename (ex: ~play ~/stream/emacsconf-2022-meetups*.webm).
+
+ termit: Ctrl-Shift-t makes a new tab
+
+ i3 cheat sheet:
+ - Alt-Enter creates a terminal
+ - Alt-d runs a command
+ - Alt-e toggles horizontal/vertical split
+ - Alt-f toggles full-screen
+ - Alt-w switches to tabbed view
+ - Alt-1 switches to workspace 1, Alt-2 switches to workspace 2
+ - Alt-Shift-2 moves things to workspace 2
+ - Alt-Shift-Left moves the current window to the left
+ - Alt-Shift-Right moves the current window to the right
+
+ 10. Test Q&A. You can either wait for the video to finish or quit it with "q".
+ You can paste in the URLs or use
+ ~firefox /data/emacsconf/2022/index-$TRACK.html~
+
+ 11. Test adjusting the audio
+
+ - ~ssh emacsconf-$TRACK@res.emacsconf.org -p 46668~
+ - Then use ~qa-louder~, ~qa-quieter~, or ~qa-vol vol%~ (ex: ~qa-vol 90%~)
+
+ Other notes and tips:
+
+ - You can use Emacs for emergency or ad-hoc announcements.
+ - Use OBS or ~pavucontrol~ to adjust the volume of BBB as needed. You might be able to manage ~pavucontrol~ off-screen with ~ssh emacsconf-$TRACK@res.emacsconf.org -X -p $SSH_PORT pavucontrol~.
+ - You can also ~ssh emacsconf-$TRACK@res.emasconf.org -p 46668~ and start new processes from the command-line, such as using ~track-mpv~. If you specify commands when you call SSH instead of using an interactive shell, you may need to also specify DISPLAY=:5 (for the gen track) or DISPLAY=:6 (for the dev track), since ssh won't pick up the variables from ~.bashrc~.
+ - If you have a Wayland-only desktop without any X11 compatibility layer (example: [[https://swaywm.org][Sway]] with ~xwayland disable~) the suggested software (~tigervnc~) might no work. You can use instead for example ~gnome-remote-desktop~. The password for the VNC connection can be retrieved from the file ~vnc-passwd-$TRACK~ (3DES encrypted).
+
+*** Managing the stream from the agenda (option B2)
+
+ssh orga@res.emacsconf.org -p $SSH_PORT
+emacsconf # runs emacsclient -c -a emacs
+
+You can then use
+
+- emacsconf-stream-play-video
+- emacsconf-stream-open-qa-windows-on-change
+- emacsconf-agenda-by-track
+- emacsconf-agenda
+
+If things are going well, you can use C-c C-t on the agenda view to change a talk to PLAYING, CLOSED_Q, or OPEN_Q, and various things should happen in the background. If they don't happen in the background, use emacsconf-add-org-after-todo-state-change-hook to add the todo state change hook, then try again.
+
+Task state shortcuts for C-c C-t:
+
+- m (mpv) :: PLAYING - -stream-play-video, emacsconf-stream-set-talk-info, publish the files to the media directory
+- q (Q&A) :: CLOSED_Q
+- o (open) :: update the BBB redirect URLs to let people into the room
+- u (unstreamed)
+- r (to archive)
+
+You can leave the emacsclient with ~C-x 5 0~
+
+
+**** Do Q&A
+
+From the emacsclient on orga@res.emacsconf.org, you can open various talk-related things:
+- emacsconf-stream-open-pad
+- emacsconf-stream-join-qa
+- emacsconf-stream-join-chat
+
+Alternatively, you can switch to the VNC viewer and use the links in
+file:///data/emacsconf/2022/index-gen.html or
+file:///data/emacsconf/2022/index-dev.html .
+
+For Q&A, you may want to have the Etherpad on the left, the BBB Q&A or
+IRC chat on the right, and the terminal and OBS windows on
+workspace 2.
+
+*** Other tasks as needed
+
+**** Display emergency news / announcements
+
+M-x emacsconf-stream-broadcast to send a message to both streams
+or M-x emacsconf-stream-set-news to send a message to one stream.
+
+If that doesn't work, edit the news file directly with:
+~ssh emacsconf-$TRACK@res.emacsconf.org > ~/news.txt~
+
+If that doesn't work, use the VNC session to switch to an Emacs window
+and type your message in.
+
+**** Kill the VNC server:
+
+ssh emacsconf-$TRACK@res.emacsconf.org "vncserver -kill"
+
+| ~/bin/track-obs | start OBS with the track's profile and scene collection |
+| ~/bin/track-mpv file.webm | play the file using the track's sink |
+
+**** Making OBS scenes
+
+Making OBS scenes is pretty straightforward as you can move the
+different blocks on your scene in the preview window. However, it’s
+important to make sure that your video-captures and your overlays are
+snapping properly to the edges of the view-port. To do this, make sure
+to right-click on the block inside the preview window, and try the
+different fitting options (fit by width, height, etc.) until you find
+one that works best.
+
+We’ll probably be streaming at 720p, but since we’re also considering
+a 1080p update, try to create your overlays in a format or a resolution
+that would support resizing.
+
+*** Other notes
+There are sockets in the home directory for MPV control if you want to keep that process.
+echo '{ "command": ["loadfile", "test2.webm"] }' | socat - ~/mpv-socket-emacsconf-dev
+*** DONE Test and document command-line way of managing audio :sachac:
+CLOSED: [2022-11-19 Sat 11:14] DEADLINE: <2022-11-20 Sun>
+
+*** DONE Move my conf.org setup to res so that we can control everything from there
+CLOSED: [2022-11-03 Thu 14:10]
+*** DONE Set timers for changing todo state
+CLOSED: [2022-11-13 Sun 11:13]
+
+#+begin_src emacs-lisp :eval no
+ (defun emacsconf-schedule-test-buffer (info)
+ (mapcar (lambda (o) (plist-put o :buffer "1") o) info))
+ (let ((emacsconf-schedule-strategies '(emacsconf-schedule-test-buffer)))
+ (emacsconf-stream-schedule-timers (emacsconf-schedule-prepare
+ (emacsconf-schedule-inflate-sexp
+ `(("Test gen" :start ,(format-time-string "%Y-%m-%d %H:%M"
+ (time-add (current-time) (seconds-to-time 60))))
+ (journalism :time "1")
+ (school :time "2")
+ (handwritten :time "1")
+ ("Test dev" :start ,(format-time-string "%Y-%m-%d %H:%M"
+ (time-add (current-time) (seconds-to-time 60))))
+ (treesitter :time "2")
+ (lspbridge :time "1")
+ (asmblox :time "1"))))))
+ #+end_src
+
+the dev one worked, but the gen one gets
+Couldn’t find local shell prompt for /bin/sh
+Tramp: Opening connection *Async Shell Command* for emacsconf-gen@res.emacsconf.org using ssh...failed
+
+Maybe I need to stagger them, or maybe I need to use a shell command.
+Changed to call ssh directly instead of using tramp.
+
+*** DONE Figure out how to work with the layout
+CLOSED: [2022-11-08 Tue 12:32]
+https://i3wm.org/docs/layout-saving.html
+*** DONE Allow per-track configuration of todo hooks :sachac:
+CLOSED: [2022-11-08 Tue 12:49]
+emacsconf-todo-hooks
+*** CANCELLED [#C] Use xdotool to automate joining BBB in Firefox (signing in, clicking on listen only)
+CLOSED: [2022-11-08 Tue 12:32]
+**** DONE Xdotool over ssh so that I can click things?
+CLOSED: [2022-12-01 Thu 08:29]
+:PROPERTIES:
+:CREATED: [2022-11-28 Mon 23:08]
+:END:
+
+*** CANCELLED [#C] Experiment with sharing part of the screen so that there's space for us to work a little off-screen
+CLOSED: [2022-11-08 Tue 12:32]
+
+We might just have to rely on xdotool to move windows the way we want them
+Window fixes that didn't work
+- https://obsproject.com/forum/threads/solved-window-capture-black-screen.47082/
+- https://www.reddit.com/r/obs/comments/kas5ka/obs_window_capture_xcomposite_black_screen/
+
+*** DONE Set up scenes and try them
+CLOSED: [2022-10-30 Sun 21:54]
+*** DONE Set up text source for URL
+CLOSED: [2022-10-30 Sun 21:54]
+*** DONE Create Ansible tasks for setting up sinks for MPV and Firefox for the streams, and adding the scenes appropriately
+CLOSED: [2022-10-30 Sun 21:54]
+*** DONE See if I can even Ansible-up the rest of the tasks
+CLOSED: [2022-10-30 Sun 21:54]
+like starting up Firefox and mpv and everything
+*** CANCELLED obs-websocket control of OBS on the server
+CLOSED: [2022-11-19 Sat 11:14]
+so that the streamer can adjust volume offscreen?
+*** DONE document such that someone else could use/fix it
+CLOSED: [2022-11-19 Sat 11:15]
+*** DONE recruit at least one more person to help operate the "video bouncer"
+CLOSED: [2022-11-19 Sat 11:15]
+*** Other notes
+- bandali doesn't have much cognitive bandwidth at the moment, so we can keep things simple with OBS on laptops
+
+- Issue: zaeph was dropping frames and couldn’t pay attention to as many things as he wanted
+- Issue: corwin needs assistance to not be locked in his chair for the whole conf. Premptively, zaeph can do it by broadcasting OBS scenes via the rtmp (instead of just his webcam).
+- With a long day, we may want to be able to schedule hosts/streamers/publishers in shifts
+- Ideal: Easy reproducible setup to spin up an OBS VM with scenes set up, allowing multiple users to connect to it at the same time. Maybe x2go or vnc? VMs with 8 vCPUs and a vGPU cost more, so it would be good to figure out what's needed, spin it down, and then spin it up maybe the day before or something like that.
+- Plus points if we can control the OBS via password-protected websocket so we can tell it to switch scenes (and even more points if we do so from Emacs, maybe via that obs-websocket.el ;) ). MPV is also controllable via IPC, so we can use the same MPV player and then switch videos around. Maybe mpvc? https://unix.stackexchange.com/questions/664728/how-can-i-control-mpv-in-command-line
+- Probably Linode's Dedicated 32 GB + RTX6000 GPU x1 at $1.50 an hour for 2-3 days + dev time, since live.emacsconf.org is in Linode as well
+- We should also look into normalization across the board, especially if we have BBB participants. pipewire + easyeffects on the box might be the easiest way to do it.
+
+
+
+
+- https://docs.vdo.ninja/
+- Live Streaming using low configuration vps https://www.youtube.com/watch?v=3iBYYgkG1eM&t=953
+- https://snowmix.sourceforge.io/Examples/input.html
+- https://www.google.com/url?sa=t&source=web&rct=j&url=https://m.youtube.com/watch%3Fv%3D1y-DUYiECWQ&ved=2ahUKEwjPru_TqOv6AhVMkokEHXL9Dm4QtwJ6BAgqEAI&usg=AOvVaw17mbCEiFL6dGVY4YEBufcy
+- [[https://news.ycombinator.com/item?id=24633139][OBS Studio 26.0 | Hacker News]]
+- https://github.com/mviereck/x11docker#sound
+- https://vcs.fsf.org/?p=streamdesktop.git;a=tree
+- https://opensource.com/article/20/5/conference-free-software
+- https://github.com/soonum/hubangl
+- https://obsproject.com/forum/threads/run-obs-on-vm-in-the-cloud.122543/
+*** DONE Automate in-between display?
+CLOSED: [2022-11-25 Fri 12:50] SCHEDULED: <2022-11-24 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-20 Sun 08:33]
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-25 Fri 11:30]--[2022-11-25 Fri 12:50] => 1:20
+:END:
+[[file:~/proj/emacsconf/wiki/2022/organizers-notebook/index.org::*Think about what to do with schedule gaps due to cancelled talks][Think about what to do with schedule gaps due to cancelled talks]]
+
+emacsconf-stream-display-clock-and-countdown
+
+**** SOMEDAY [#C] Redo in-between slides
+:PROPERTIES:
+:CREATED: [2022-11-25 Fri 15:48]
+:END:
+
+**** DONE Automatically display in-between slide if there's no recorded intro
+CLOSED: [2022-11-29 Tue 07:12] SCHEDULED: <2022-11-28 Mon>
+ :PROPERTIES:
+ :CREATED: [2022-11-27 Sun 10:51]
+ :Effort: 0:30
+ :END:
+ :LOGBOOK:
+ CLOCK: [2022-11-28 Mon 20:00]--[2022-11-29 Tue 07:12] => 11:12
+ :END:
+
+ Okay, what's the tricky part here?
+
+todo status triggers playing, so things have to be non-interactive
+intro needs to be manual
+- if manual intro
+ - open the in-between page
+ - streamer types "play slug" manually
+- if recorded intro
+
+Gen:
+
+| | recorded intro | live intro |
+| recorded talk | [[elisp:(emacsconf-stream-play-intro "school")][school]]; play automatically | [[elisp:(emacsconf-stream-play-intro "workflows")][workflows]]; show in-between, host intros over mumble, streamer types "play slug" |
+| live talk | [[elisp:(emacsconf-stream-play-intro "journalism")][journalism]]; play intro automatically, join bbb | [[elisp:(emacsconf-stream-play-intro "survey")][survey]]; join bbb, no in-between slide |
+
+Dev:
+
+[[elisp:(emacsconf-stream-play-intro "async")][async]]
+
+**** DONE Make sure recorded intros play
+CLOSED: [2022-11-29 Tue 07:37] SCHEDULED: <2022-11-29 Tue>
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-29 Tue 07:23]
+:END:
+
+[[elisp:(emacsconf-stream-play-talk-on-change "school")]] should play intro + video
+[[elisp:(emacsconf-stream-play-video "health")]] should play video (no recorded intro)
+
+dev:
+[[elisp:(emacsconf-stream-play-talk-on-change "treesitter")]] should play intro + video
+
+
+*** DONE [#A] Separate mumble audio so that panic button can still bring in our audio
+ CLOSED: [2022-11-22 Tue 11:00] SCHEDULED: <2022-11-21 Mon>
+ :PROPERTIES:
+ :CREATED: [2022-11-20 Sun 10:14]
+ :Effort: 30
+ :END:
+ :LOGBOOK:
+ CLOCK: [2022-11-22 Tue 10:19]--[2022-11-22 Tue 11:00] => 0:41
+ :END:
+
+*** DONE Prepare for rms talk and Q&A with bandali
+ CLOSED: [2022-12-01 Thu 12:38] SCHEDULED: <2022-12-01 Thu> DEADLINE: <2022-12-01 Thu>
+ :PROPERTIES:
+ :CREATED: [2022-11-18 Fri 12:27]
+ :END:
+
+Mumble?
+
+**** DONE [#B] Reflow and edit VTT for RMS TEDx talk so that things are on one line
+CLOSED: [2022-11-29 Tue 22:56] SCHEDULED: <2022-11-30 Wed>
+ :PROPERTIES:
+ :CREATED: [2022-11-19 Sat 19:02]
+ :Effort: 0:30
+ :END:
+ :LOGBOOK:
+ - Note taken on [2022-11-29 Tue 15:01] \\
+ want to have Whisper do it
+ CLOCK: [2022-11-29 Tue 14:59]--[2022-11-29 Tue 15:01] => 0:02
+ :END:
+
+[[file:~/proj/emacsconf/lisp/emacsconf-stream.el]]
+
+*** DONE Add panic button to OBS settings
+CLOSED: [2022-11-24 Thu 09:02] SCHEDULED: <2022-11-24 Thu>
+ :PROPERTIES:
+ :CREATED: [2022-11-20 Sun 10:13]
+ :END:
+
+ Ctrl-Shift-M?
+
+*** DONE Add background music to server :emacsconf:
+CLOSED: [2022-11-24 Thu 08:57] SCHEDULED: <2022-11-24 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-22 Tue 21:40]
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-24 Thu 08:06]--[2022-11-24 Thu 08:57] => 0:51
+:END:
+zaeph suggests using shoshin's music
+
+if ! screen -list | grep -q background; then
+ screen -S track-mpv ~/stream/background.wav &
+fi
+
+*** DONE [#A] Make it easy to rebroadcast other track (ex: rms) - might need mpv with minimal configuration, switchable profiles
+CLOSED: [2022-12-02 Fri 07:41] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-30 Wed 23:46]
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-01 Thu 18:46]--[2022-12-01 Thu 20:09] => 1:23
+CLOCK: [2022-12-01 Thu 08:29]--[2022-12-01 Thu 08:53] => 0:24
+:END:
+
+
+**** DONE make it easy to rebroadcast
+CLOSED: [2022-12-02 Fri 07:41] SCHEDULED: <2022-12-01 Thu>
+:PROPERTIES:
+:CREATED: [2022-12-01 Thu 13:39]
+:END:
+** DONE [#C] Smoothen captioning workflow :sachac:
+CLOSED: [2022-11-19 Sat 11:10]
+:PROPERTIES:
+:CUSTOM_ID: caption-workflow
+:END:
+It looks like OpenAPI needs a little less editing in terms of
+capitalization and punctuation, but it produces longer captions
+(likely a 30-second sliding window). I'll try to upload both YT and
+OpenAPI captions so that people can decide what they like.
+
+[[#mpv-captions][Set up MPV for captions]]
+*** DONE Make sure all the captioned files are marked so
+CLOSED: [2022-11-30 Wed 19:03]
+
+#+begin_src emacs-lisp :eval no
+(seq-keep (lambda (o)
+ (when (and (string= (plist-get o :status) "TO_STREAM")
+ (or (null (plist-get o :captions-edited))
+ (null (with-temp-buffer
+ (insert-file-contents
+ (expand-file-name (concat (plist-get o :video-slug) "--main.vtt")
+ emacsconf-cache-dir))
+ (goto-char (point-min))
+ (re-search-forward "captioned by" (line-end-position) t)))))
+ (plist-get o :slug)
+ ))
+ (emacsconf-get-talk-info))
+#+end_src
+*** DONE Edit survey captions
+CLOSED: [2022-11-29 Tue 22:20] SCHEDULED: <2022-11-30 Wed>
+:PROPERTIES:
+:CREATED: [022-11-29 Tue 15:2]
+:END:
+
+*** DONE Edit dbus captions
+CLOSED: [2022-11-29 Tue 15:22]
+:PROPERTIES:
+:Effort: 1:00
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-29 Tue 15:07]--[2022-11-29 Tue 15:22] => 0:15
+:END:
+*** DONE Figure out why it's choking on SRV2
+CLOSED: [2022-10-30 Sun 00:13]
+Can I use aeneas for alignment instead?
+
+Reflow the .txt file and reupload to res if needed
+call ../run-aeneas.sh from the directory with the opus or ogg and the txt file
+
+sachac@res-emacsconf:~/current/meetups$ python3 -m aeneas.tools.execute_task emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.opus reflowed.srt "task_language=eng|os_task_file_format=json|is_text_type=subtitles" output.json
+
+I might try out lhotse and torchaudio someday, but it's low priority. aeneas seems to do a reasonable job of
+*** DONE [#C] Move publishing the backstage index to res so that we can trigger it after the files are uploaded
+CLOSED: [2022-11-19 Sat 11:09]
+:PROPERTIES:
+:CREATED: [2022-10-21 Fri 16:45]
+:END:
+
+*** DONE Compare large, medium, and small models
+CLOSED: [2022-10-23 Sun 08:32]
+12 threads
+
+Original file: 21:16 21 minutes
+| | Hours | Mult | Notes |
+| [[https://media.emacsconf.org/2022/backstage/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--large.vtt][Large]] | 2:49 | 8 | |
+| [[https://media.emacsconf.org/2022/backstage/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--medium.vtt][Medium]] | 2:03 | 5.9 | |
+| [[https://media.emacsconf.org/2022/backstage/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--small.vtt][Small]] | 0:40 | 2 | More run-on sentences |
+
+Large and medium might do better on a system with a GPU. I'll default to the small model for now.
+
+*** DONE Commit subed-tsv so that people can try a cleaner output
+CLOSED: [2022-10-23 Sun 09:59]
+:PROPERTIES:
+:Effort: 1:00
+:QUANTIFIED: Emacs
+:END:
+:LOGBOOK:
+CLOCK: [2022-10-23 Sun 08:32]--[2022-10-23 Sun 09:59] => 1:27
+:END:
+*** DONE Investigate more granular timestamps for the output from OpenAPI Whisper
+CLOSED: [2022-10-25 Tue 11:14]
+
+https://git.emacsconf.org/emacsconf-ansible/tree/roles/caption/templates
+
+*** DONE Upload srv2 from YouTube for word-level
+CLOSED: [2022-10-22 Sat 23:16]
+:PROPERTIES:
+:CREATED: [2022-10-22 Sat 14:38]
+:END:
+*** CANCELLED [#C] Compare with Google Cloud Speech API
+CLOSED: [2022-10-29 Sat 09:58]
+~/code/speech
+
+*** DONE E-mail for bringing new captioning volunteers onboard
+CLOSED: [2022-10-29 Sat 09:58]
+#+begin_src emacs-lisp
+(defun emacsconf-mail-backstage-intro (volunteer &optional template)
+ (interactive (list (emacsconf-complete-volunteer)))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "backstage-intro"))
+ (assoc-default "EMAIL" volunteer 'string=)
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :conf-name emacsconf-name
+ :year emacsconf-year
+ :name (assoc-default "NAME_SHORT" volunteer 'string=)
+ :email (assoc-default "EMAIL" volunteer 'string=))))
+#+end_src
+**** Template
+:PROPERTIES:
+:TO: ${email}
+:FUNCTION: emacsconf-mail-backstage-intro
+:EMAIL_ID: backstage-intro
+:SUBJECT: ${conf-name} ${year}: Thanks for volunteering!
+:END:
+
+Hi ${name}!
+
+Thank you for volunteering for ${conf-name} ${year}!
+
+We've set up ${backstage} as the backstage area where you can view the
+videos and resources uploaded so far. You can access it with the
+username "${backstage-user}" and the password "${backstage-password}".
+Please keep the backstage password and other speakers' talk resources
+secret.
+
+For some ideas on ways to help, you can check out
+https://emacsconf.org/2022/volunteer/ . You can also suggest other
+things you might be interested in.
+
+You can ask questions or chat with other volunteers by e-mailing the
+mailing list at emacsconf-org@gnu.org or dropping by #emacsconf on the
+libera.chat IRC network. You can also e-mail me or
+emacsconf-org-private@gnu.org if you have private questions.
+
+Thank you again for your help! =)
+
+Sacha Chua
+
+*** DONE E-mail for bringing new captioning volunteers onboard
+CLOSED: [2022-10-29 Sat 09:58]
+#+begin_src emacs-lisp
+(defun emacsconf-mail-captioning-intro (volunteer &optional template)
+ (interactive (list (emacsconf-complete-volunteer)
+ (emacsconf-mail-merge-get-template "captioning-intro")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "captioning-intro"))
+ (assoc-default "EMAIL" volunteer 'string=)
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :conf-name emacsconf-name
+ :year emacsconf-year
+ :name (assoc-default "NAME_SHORT" volunteer 'string=)
+ :email (assoc-default "EMAIL" volunteer 'string=))))
+#+end_src
+**** Template
+:PROPERTIES:
+:TO: ${email}
+:FUNCTION: emacsconf-mail-captioning-intro
+:EMAIL_ID: captioning-intro
+:SUBJECT: ${conf-name} ${year}: Thanks for volunteering to help with captions!
+:END:
+
+Hi ${name}!
+
+Thank you for volunteering to help with the captions for ${conf-name}
+${year}! Last year, we were able to get almost all the talks captioned
+in time for streaming. Participants found them very useful for
+understanding different technical terms, names, accents, and so on.
+We'd love to be able to pull that off again this year, and it would be
+great to have you on board.
+
+We've set up ${backstage} as the backstage area where you can view the
+videos and resources uploaded so far. You can access it with the
+username "${backstage-user}" and the password "${backstage-password}".
+Please keep the backstage password and resources secret. If you see a
+talk that you'd like to caption, you can e-mail me at
+sacha@sachachua.com and I can reserve it for you. Then you can correct
+any misrecognized words, fix capitalizations, remove filler words as
+needed, and so on.
+
+You'll probably want to work with either the VTT or the TXT versions
+(VTT is WebVTT format and has timestamps), but you can check the other
+talk resources in case the speaker has posted scripts or other useful
+things. Both VTT and TXT are plain text, so feel free to use your
+favourite text or subtitle editor. I've posted a brief demo of how I
+edit captions at
+https://media.emacsconf.org/2022/backstage/editing-captions.html , and
+you can find more captioning tips at https://emacsconf.org/captioning/
+. You can convert it to whatever format you like. If you prefer to
+work with plain text, we can figure out the timestamps afterwards.
+
+Let me know if you want to reserve a talk for captioning or if you have
+any questions or suggestions. We're also in the #emacsconf-org channel
+on the libera.chat IRC network, which you can connect to with your
+favourite IRC client or through the web-based interface at
+https://chat.emacsconf.org/ .
+
+Sacha Chua
+*** DONE [#C] Support cue IDs in subed-vtt.el
+CLOSED: [2022-11-11 Fri 08:58]
+*** CANCELLED [#C] jiwer · PyPI - measure error rate
+CLOSED: [2022-11-19 Sat 11:09]
+:PROPERTIES:
+:CREATED: [2022-10-22 Sat 20:59]
+:END:
+
+https://pypi.org/project/jiwer/
+
+*** SOMEDAY Think about flow for YouTube captions
+SCHEDULED: <2022-12-07 Wed>
+:PROPERTIES:
+:CREATED: [2022-11-23 Wed 16:21]
+:END:
+
+are they at the right length?
+*** DONE [#A] Check captions for rms talk
+CLOSED: [2022-11-26 Sat 22:35] SCHEDULED: <2022-11-27 Sun>
+:PROPERTIES:
+:CREATED: [2022-11-26 Sat 20:44]
+:END:
+
+*** TODO [#C] Try whisper.cpp
+commented out ~-mavx~ to get it to compile in Debian on res
+
+ffmpeg -y -i emacsconf-2022-rmsted--main.ogg -acodec pcm_s16le -ac 1 -ar 16000 emacsconf-2022-rmsted--main.wav
+/usr/src/whisper.cpp/main -f emacsconf-2022-rmsted--main.wav -m models/ggml-large.bin -ovtt -otxt
+
+*** DONE [#A] edit rms tedx captions, they're not actually edited!
+CLOSED: [2022-11-29 Tue 22:56]
+:PROPERTIES:
+:CREATED: [2022-11-29 Tue 08:00]
+:END:
+
+*** DONE [#A] realign subtitles if needed, looks like aeneas options need tweaking
+CLOSED: [2022-11-30 Wed 14:17] SCHEDULED: <2022-11-30 Wed>
+:PROPERTIES:
+:CREATED: [2022-11-29 Tue 21:46]
+:Effort: 1:00
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-30 Wed 14:05]--[2022-11-30 Wed 14:17] => 0:12
+:END:
+
+#+begin_src emacs-lisp :eval no
+(seq-keep
+ (lambda (file)
+ (let ((subtitles (subed-parse-file file))
+ gaps)
+ (while (cdr subtitles)
+ (setq gaps (cons (- (elt (cadr subtitles) 1) (elt (car subtitles) 2))
+ gaps))
+ (setq subtitles (cdr subtitles)))
+ ;; if there are gaps more than
+ (let ((big-gaps (seq-filter (lambda (gap) (> gap 100)) gaps)))
+ (when big-gaps
+ (list (file-name-base file)
+ (length big-gaps)
+ (apply #'max big-gaps)))))
+ )
+ (directory-files emacsconf-cache-dir t "--main.vtt$")
+ )
+#+end_src
+
+
+*** SOMEDAY ggerganov/whisper.cpp: Port of OpenAI's Whisper model in C/C++
+:PROPERTIES:
+:CREATED: [2022-11-28 Mon 11:37]
+:END:
+
+https://github.com/ggerganov/whisper.cpp
+
+*** TODO Move the captioning stuff to the public area
+:PROPERTIES:
+:CREATED: [2022-12-05 Mon 11:09]
+:END:
+
+*** TODO Look into getting the confidence intervals out of aeneas, maybe by getting it as an XML
+:PROPERTIES:
+:CREATED: [2022-12-10 Sat 08:58]
+:END:
+
+Also look into finetuneas
+
+*** SOMEDAY A Deep Dive Exploration Applying OpenAI’s Whisper ASR To A PBS NewsHour Broadcast – The GDELT Project
+:PROPERTIES:
+:CREATED: [2022-12-11 Sun 00:36]
+:END:
+
+https://blog.gdeltproject.org/a-deep-dive-exploration-applying-openais-whisper-asr-to-a-pbs-newshour-broadcast/
+
+*** SOMEDAY Confidence scores for each word? - Discussion #284 - openai/whisper
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 08:33]
+:END:
+
+https://github.com/openai/whisper/discussions/284
+
+*** SOMEDAY jianfch/stable-ts: Stabilizing timestamps of OpenAI's Whisper outputs down to word-level
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 08:35]
+:END:
+
+https://github.com/jianfch/stable-ts
+
+*** SOMEDAY See if we can get confidence data out of whisper
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 08:32]
+:END:
+
+*** SOMEDAY Use bbb events to identify speaker changes and overlapping spans that might need closer attention
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 08:32]
+:END:
+
+*** SOMEDAY Getting Started with Bacalhau | Bacalhau Docs
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 17:09]
+:END:
+
+https://docs.bacalhau.org/getting-started/installation
+
+*** SOMEDAY Use OpenAI Whisper and Bacalhau to transcribe audio and video files | Nerd For Tech
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 17:08]
+:END:
+
+https://medium.com/nerd-for-tech/how-to-use-bacalhau-and-openai-whisper-to-transcribe-a-youtube-video-7b6ee0135ce2
+
+*** SOMEDAY A Deep Dive Exploration Applying OpenAI’s Whisper ASR To A Russian Television News Broadcast – The GDELT Project
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 16:49]
+:END:
+
+https://blog.gdeltproject.org/a-deep-dive-exploration-applying-openais-whisper-asr-to-a-russian-television-news-broadcast/
+
+*** SOMEDAY Benchmarks for T4 & V100 GPUs, comparison with human captioning, and deep dive on non-deterministic output · Discussion #395 · openai/whisper
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 16:40]
+:END:
+
+https://github.com/openai/whisper/discussions/395
+
+*** SOMEDAY Pointers for running this on a GPU via a cloud service? · Discussion #398 · openai/whisper
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 21:44]
+:END:
+
+https://github.com/openai/whisper/discussions/398
+
+*** SOMEDAY How to chunk text into paragraphs using python | by N Polovinkin | Medium
+:PROPERTIES:
+:CREATED: [2022-12-12 Mon 21:35]
+:END:
+
+https://medium.com/@npolovinkin/how-to-chunk-text-into-paragraphs-using-python-8ae66be38ea6
+
+** DONE Find a way to accommodate a specific return-speaker
+CLOSED: [2022-11-19 Sat 11:17]
+We’re not sure if we’re going to get a presentation or a prerec for them
+this year, but we need to keep this at the back of our minds.
+
+Note on how DebConf handled incidents:
+https://www.mail-archive.com/search?l=debconf-team@lists.debian.org&q=subject:%22Re%5C%3A+DebConf+21+Incident+Response%22&o=newest&f=1
+
+** DONE [#A] Write check-in email :sachac:
+CLOSED: [2022-11-21 Mon 13:30] DEADLINE: <2022-11-20 Sun> SCHEDULED: <2022-11-19 Sat>
+:PROPERTIES:
+:CUSTOM_ID: check-in-email
+:END:
+*** DONE Switch all the rooms to allow anyone to start them - one less step for the check-in person
+CLOSED: [2022-11-20 Sun 09:33]
+:PROPERTIES:
+:Effort: 0:30
+:QUANTIFIED: Emacs
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-20 Sun 08:46]--[2022-11-20 Sun 09:33] => 0:47
+:END:
+
+#+begin_src js2 :eval no
+//list = [...document.querySelectorAll('.room-name-editable')].filter((o) => o.value.match(/^ec22-(sat|sun)/));
+card = document.querySelector('a[href=\"%s\"] .card-body');
+card.querySelector('.item-action.dropdown a').click()
+card.querySelector('.update-room').click()
+if (!document.querySelector('#room_anyone_can_start').checked) {
+ document.querySelector('#room_anyone_can_start').click();
+}
+document.querySelector('.update-only.create-room-button').click();
+#+end_src
+
+okay, next thing, it automatically refreshes. so I can't run the whole Javascript, I need to xdotool it.
+
+#+begin_src emacs-lisp :eval no
+(setq list (mapcar (lambda (o) (plist-get o :bbb-room)) (emacsconf-get-talk-info)))
+(setq list (seq-drop list (seq-position list "https://bbb.emacsverse.org/b/sac-rvc-kd2-pev")))
+(progn
+ (setq item (pop list))
+ (when (string-match "/b/\\(.*\\)" item)
+ (kill-new (format "card = document.querySelector('a[href=\"%s\"] .card-body');
+card.querySelector('.item-action.dropdown a').click()
+card.querySelector('.update-room').click()
+if (!document.querySelector('#room_anyone_can_start').checked) {
+ document.querySelector('#room_anyone_can_start').click();
+}
+document.querySelector('.update-only.create-room-button').click();
+"
+ (match-string 0 item)))
+ (sleep-for 2)
+ (shell-command "xdotool key alt+Tab")))
+#+end_src
+
+Relying on xdotool seems a little fragile. Let's just check the page
+itself for the next one that needs to be done.
+
+#+begin_src js2 :eval no
+list = [...document.querySelectorAll('.room-name-editable')].filter((o) => o.value.match(/^ec22-(sat|sun)/));
+list.reduce(async(prev, elem) => {
+ await prev;
+ if (!sessionStorage.getItem(elem.value)) {
+ return new Promise((resolve, reject) => {
+ card = elem.closest('.card-body');
+ card.querySelector('.item-action.dropdown a').click();
+ card.querySelector('.update-room').click();
+ sessionStorage.setItem(elem.value, true);
+ setTimeout(function() {
+ if (!document.querySelector('#room_anyone_can_start').checked) {
+ document.querySelector('#room_anyone_can_start').click();
+ document.querySelector('.update-only.create-room-button').click();
+ } else {
+ document.querySelector('#createRoomModal').click();
+ }
+ resolve(true);
+ }, 500);
+ });
+ }
+});
+#+end_src
+
+*** DONE Update checkin instructions
+CLOSED: [2022-11-20 Sun 10:58]
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-20 Sun 10:12]--[2022-11-20 Sun 10:58] => 0:46
+:END:
+*** Templates
+:PROPERTIES:
+:SUBJECT: Getting ready for EmacsConf ${year}
+:END:
+
+Goals:
+- Ask speaker verify their scheduled time
+ It has already been confirmed with them, but it might have changed slightly
+ - HOW: They should check the time at the top of their talk page on the day of the conference
+- Double-check Q&A preference, encourage tech checks for live talks/Q&A
+ - If they are available:
+ - Direct to tech-checks via https://emacsconf.org/${year}/prepare/
+ - Inform them of the check-in process
+ - They come say hi to us 30' before their session in #emacsconf-org or #emacsconf (they can use chat.emacsconf.org )
+ - We get them set up in a room where they can wait until the end of the broadcast of their pretention
+ - They’re joined by the streamer and host.
+- Warning about potential emergency changes
+
+Slightly more complex because of the conditionals
+
+#+begin_src emacs-lisp :lexical t
+(defun emacsconf-mail-checkin-instructions (group &optional template)
+ "Send checkin instructions.
+GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group
+ (seq-filter
+ (lambda (o)
+ (or
+ (string= (plist-get o :status) "CANCELLED")
+ (null (plist-get o :email))
+ (string-match "after" (or (plist-get o :q-and-a) ""))))
+ (emacsconf-get-talk-info)))))
+ (let* ((talks (seq-remove
+ (lambda (o)
+ (or
+ (string= (plist-get o :status) "CANCELLED")
+ (null (plist-get o :email))
+ (string-match "after" (or (plist-get o :q-and-a) ""))
+ (save-window-excursion
+ (emacsconf-with-talk-heading o
+ (re-search-forward "checkin instructions" (save-excursion (org-end-of-subtree)) t)))))
+ (cdr group)))
+ (waiting-talks (seq-find (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC")) talks)))
+ (when talks
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "checkin-at-conf"))
+ (car group)
+ (list
+ :year emacsconf-year
+ :base-url emacsconf-base-url
+ :conf-name emacsconf-name
+ :email (plist-get (car talks) :email)
+ :emergency emacsconf-emergency-contact
+ :plural (if (> (length (cdr group)) 1) "s" "")
+ :speakers-short (plist-get (car talks) :speakers-short)
+ :url (mapconcat (lambda (o) (concat emacsconf-base-url (plist-get o :url)))
+ talks" , ")
+ :waiting
+ (cond
+ ((> (length waiting-talks) 1)
+ " If you can upload your talk videos before the conference, I think that might be much less stressful for everyone than doing it live. =) Please note that we will turn off the web-based upload on Dec 1 to free up memory on the server, so please upload them as early as you can.${wrap}")
+ ((= (length waiting-talks) 1)
+ " If you can upload your talk video before the conference, I think that might be much less stressful for everyone than doing it live. =) Please note that we will turn off the web-based upload on Dec 1 to free up memory on the server, so please upload it as early as you can.${wrap}")
+ (t ""))
+ :checkin-info
+ (mapconcat
+ (lambda (o)
+ (let ((base-checkin (format-time-string "%b %-d %-l:%M %p" (plist-get o :checkin-time) emacsconf-timezone))
+ (speaker-checkin (format-time-string "%b %-d %-l:%M %p" (plist-get o :checkin-time) (plist-get o :timezone))))
+ (emacsconf-replace-plist-in-string
+ (append (list :base-url emacsconf-base-url
+ :check-in
+ (concat
+ "Before "
+ base-checkin " in " emacsconf-timezone
+ (if (string= base-checkin speaker-checkin)
+ ""
+ (concat
+ ", which is the same as " speaker-checkin " in " (plist-get o :timezone))) "\n"
+ " (this is " (plist-get o :checkin-label) ")")
+ :qa-info-speakers
+ (cond
+ ;; aaaaah, no prerec yet
+ ((string= (plist-get o :status) "WAITING_FOR_PREREC")
+ (concat "Talk and Q&A BigBlueButton room: " (plist-get o :bbb-room)))
+ ((null (plist-get o :q-and-a)) "")
+ ((string-match "live" (plist-get o :q-and-a)) (concat "Q&A BigBlueButton room: " (plist-get o :bbb-room)))
+ ((string-match "irc" (plist-get o :q-and-a)) (concat "Q&A: " (plist-get o :channel) " (" (plist-get o :webchat-url) ")"))
+ ((string-match "pad" (plist-get o :q-and-a)) "Q&A: On the pad")
+ (t "Q&A: After the event")))
+ o)
+ "- ${title}
+ Info and sched: ${base-url}${url}
+ Check-in: ${check-in}
+ Pad: ${pad-url}
+ ${qa-info-speakers}")))
+ talks "\n\n")))
+ (mapc (lambda (o)
+ (emacsconf-mail-log-message-when-sent o "Sent checkin instructions"))
+ talks))))
+#+end_src
+
+**** E-mail for speakers who are planning to be at the conference
+:PROPERTIES:
+:EMAIL_ID: checkin-instructions
+:SUBJECT: ${conf-name} ${year}: Check-in instructions
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:FUNCTION: emacsconf-mail-checkin-instructions
+:END:
+
+Hello, ${speakers-short}!
+
+We're looking forward to having you join us at EmacsConf!
+
+We've updated the schedule based on the submissions and cancellations,
+and we'll probably update the schedule even on the day of the
+conference. You can get a rough idea of your schedule on your talk
+page${plural}. You might want to check your talk page${plural} some time next
+week to get a rough sense of where it is, and then check it again on
+the day of your talk${plural}. Please let me know if the times don't
+work for you.
+
+We'll try our best to keep your talk in the same general timeslot (ex:
+Saturday morning, Saturday afternoon, Sunday morning, Sunday
+afternoon). We've done some dry-runs, but just in case it turns out
+that running two tracks at the same time leaves us too frazzled, we
+may drop back to one track with Q&A on an alternate stream, like last
+year. If there are big changes to your schedule on the day of your
+talk${plural}, you'll get an e-mail from us with a subject like
+"URGENT: EmacsConf 2022: ...".${wrap}
+
+Here's your talk page URL and checkin information:
+
+${checkin-info}
+
+Please check in early so that we can deal with scheduling changes or
+technical issues, and so that we don't worry too much about whether
+you'll be ready to go for Q&A. =) You can find the check-in process at
+${base-url}${year}/speakers/ .${waiting}
+
+If something comes up, please let us know as soon as you can. Here's
+my emergency contact information: ${emergency}
+
+Thank you for sharing your time and energy with the EmacsConf community!
+
+Sacha
+
+p.s. If you need to cancel, that's okay too, life happens. Let me know
+as soon as you can and I'll try to shuffle things around. Thank you!
+
+**** E-mail for speakers who are not planning to be around, but who have sent us their prerecs
+:PROPERTIES:
+:EMAIL_ID: checkin-after
+:SUBJECT: EmacsConf ${year}: Check-in instructions
+:END:
+
+Hello, ${name}!
+
+Thank you so much for contributing a talk for EmacsConf ${year}! We're
+looking forward to collecting questions and forwarding them to you by
+e-mail after the conference. We'll also post the prerecording at the
+time that it gets streamed, so people will be able to access it at
+${url} once it has gone live.
+
+If it turns out that you can make it to the conference after all, feel
+free to drop us a line at #emacsconf-org and we'll let people know
+you're around. You can find the check-in process at
+https://emacsconf.org/${year}/speakers/ .
+
+Thank you again for being part of EmacsConf ${year}!
+
+Sacha
+*** CANCELLED Draft e-mail to send speakers who may need to do it live
+CLOSED: [2022-11-21 Mon 13:30]
+:PROPERTIES:
+:CUSTOM_ID: live-speakers
+:END:
+*** DONE [#A] Make sure IRC talks get BBB checkin information if they need to do it live :mail:
+CLOSED: [2022-11-28 Mon 13:24] SCHEDULED: <2022-11-28 Mon>
+:PROPERTIES:
+:CREATED: [2022-11-23 Wed 11:24]
+:Effort: 0:15
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-28 Mon 13:23]--[2022-11-28 Mon 13:24] => 0:01
+:END:
+survey, orgyear, lspbridge, eev, python
+
+** [#B] Plan in-case-of-emergency schedule for dropping back to one track after Saturday morning :sachac:derisk:
+:PROPERTIES:
+:CUSTOM_ID: one-track
+:END:
+
+We might be able to do it on a modular basis (Saturday afternoon, Sunday morning, or Sunday afternoon).
+We need a quick way to notify the affected speakers, and we should give them a heads-up as well.
+We also need a quick way to update the schedule.
+*** DONE Update conf.org and the wiki based on the selected emergency schedule
+CLOSED: [2022-11-24 Thu 21:33] SCHEDULED: <2022-11-28 Mon>
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-17 Thu 21:15]--[2022-11-17 Thu 21:15] => 0:00
+:END:
+
+*** DONE Give speakers a heads-up regarding schedule tweaks and the potential for bigger schedule changes
+CLOSED: [2022-11-21 Mon 13:55] SCHEDULED: <2022-11-18 Fri>
+*** DONE Draft the code for mailing all the affected speakers
+CLOSED: [2022-11-24 Thu 21:33] SCHEDULED: <2022-11-28 Mon>
+*** Saturday afternoon
+#+begin_src emacs-lisp :exports results :results replace :var filename="emergency-back-to-one-sat-pm.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints nil)
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("Saturday, December 3" :start "2022-12-03 13:00")
+ meetups sqlite buttons mail realestate health eev python jupyter maint orgvm haskell sat-close)))
+ (emacsconf-schedule-start-time "13:00")
+ (emacsconf-schedule-svg-modify-functions '(;emacsconf-schedule-svg-color-by-status
+ ))
+ (emacsconf-schedule-default-buffer-minutes 0)
+ (emacsconf-schedule-expected-talks '(meetups sqlite mail buttons realestate maint health eev python jupyter haskell sat-close))
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 1)
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-video-time-round-up-to-five
+ emacsconf-schedule-allocate-buffer-time))
+ (emacsconf-schedule-apply nil) ;; change this in case of emergency
+)
+#+end_src
+
+#+RESULTS:
+:results:
+- [[file:emergency-back-to-one-sat-pm.svg]]
+:end:
+
+*** Sunday morning
+#+begin_src emacs-lisp :exports results :results replace :var filename="emergency-back-to-one-sun-am.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints '())
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("Sunday, December 4" :start "2022-12-04 9:00")
+ sun-open survey orgyear lspbridge rolodex rde treesitter orgsuperlinks justl orgvm rms)))
+ (emacsconf-schedule-expected-talks '(sun-open survey orgyear rolodex lspbridge rde orgsuperlinks treesitter justl orgvm rms))
+ (emacsconf-schedule-end-time "12:30")
+ (emacsconf-schedule-svg-modify-functions '(;emacsconf-schedule-svg-color-by-status
+ ))
+ (emacsconf-schedule-default-buffer-minutes 0)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 0)
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-video-time-round-up-to-five
+ emacsconf-schedule-allocate-buffer-time))
+ (emacsconf-schedule-apply nil) ;; change this in case of emergency
+)
+#+end_src
+
+#+RESULTS:
+:results:
+- rms: Ends at 12:15 after 12:00
+- [[file:emergency-back-to-one-sun-am.svg]]
+:end:
+
+
+*** Sunday afternoon
+#+begin_src emacs-lisp :exports results :results replace :var filename="emergency-back-to-one-sun-pm.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ emacsconf-time-constraints
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("Sunday, December 4" :start "2022-12-04 13:00")
+ devel hyperorg detached workflows eshell grail async indieweb dbus localizing fanfare sun-close)))
+ (emacsconf-schedule-start-time "13:00")
+ (emacsconf-schedule-end-time "18:00")
+ (emacsconf-schedule-expected-talks '(hyperorg detached workflows eshell grail async indieweb dbus localizing devel fanfare sun-close))
+ (emacsconf-schedule-svg-modify-functions '(;emacsconf-schedule-svg-color-by-status
+ ))
+ (emacsconf-schedule-default-buffer-minutes 3)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 3)
+ (emacsconf-schedule-strategies '(emacsconf-schedule-override-breaks
+ emacsconf-schedule-allocate-video-time-round-up-to-five
+ emacsconf-schedule-allocate-buffer-time))
+ (emacsconf-schedule-apply nil) ;; change this in case of emergency
+)
+#+end_src
+
+#+RESULTS:
+:results:
+- [[file:emergency-back-to-one-sun-pm.svg]]
+:end:
+
+*** DONE Get the emergency schedule sorted out so that we can easily switch to it
+CLOSED: [2022-11-24 Thu 21:33] SCHEDULED: <2022-11-24 Thu>
+:PROPERTIES:
+:CREATED: [2022-11-19 Sat 08:01]
+:END:
+
+To change, set emacsconf-schedule-apply to t
+M-x emacsconf-update-schedule
+Commit the wiki and push it
+Draft the e-mail for emergency schedule
+
+*** DONE Draft e-mail for emergency schedule
+CLOSED: [2022-11-24 Thu 21:32]
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-11-24 Thu 21:13]--[2022-11-24 Thu 21:32] => 0:19
+:END:
+
+#+begin_src emacs-lisp
+(defun emacsconf-mail-emergency-update (group &optional template)
+ "Send emergency schedule update.
+GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (setq template (or template (emacsconf-mail-merge-get-template "emergency")))
+ (emacsconf-mail-prepare
+ template
+ (car group)
+ (list
+ :urls (mapconcat (lambda (o) (plist-get o :absolute-url)) (cdr group) " , ")
+ :emergency emacsconf-emergency-contact
+ :conf-name emacsconf-name
+ :year emacsconf-year
+ :email (plist-get (cadr group) :email)
+ :plural (if (= (length (cdr group)) 1) "" "s")
+ :schedule
+ (mapconcat
+ (lambda (o)
+ (concat "Talk: " (plist-get o :title) "\n"
+ "URL: " (plist-get o :absolute-url) "\n"
+ "New start of talk: "
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ emacsconf-timezone)
+ "\n"
+ (if (string= emacsconf-timezone (plist-get o :timezone))
+ ""
+ (concat
+ "which is the same as "
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ (plist-get o :timezone))))))
+ (cdr group)
+ "\n\n"))))
+#+end_src
+
+**** Template
+:PROPERTIES:
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:SUBJECT: URGENT: ${conf-name} ${year}: Schedule update
+:SLUGS: buddy devel
+:FUNCTION: emacsconf-mail-emergency-update
+:EMAIL_ID: emergency
+:END:
+
+Sorry about the last-minute change. We needed to update the schedule
+because two tracks turned out to be too much for us to handle at the
+moment. The new schedule will play all the talks on one stream, and
+the other stream will handle Q&A.
+
+Here's a copy of the updated schedule for your convenience:
+${schedule}
+
+Please check in at least 30 minutes before your talk (or 60 minutes if
+you're going to do it live). https://emacsconf.org/2022/speakers/ has
+more details.
+
+You can also find the new schedule at the page URL${plural} above.
+Please let me know if you can't make it. We can collect the questions
+and you can follow up afterwards. You can reach me by e-mail or in
+#emacsconf-org on IRC, or with this emergency contact info:
+${emergency}
+
+Thank you for your patience!
+
+Sacha
+
+** DONE [#A] Manage front0 and live0 size :bandali:
+CLOSED: [2022-12-06 Tue 10:01] SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CUSTOM_ID: resize
+:END:
+
+*** DONE Resize front0 and live0 in the Linode administration console :bandali:
+CLOSED: [2022-12-06 Tue 10:00]
+[20:23:48] <bandali> aha okay thanks. yeah i think i'll do at least 8gb or 16gb for front0, maybe even one or two larger
+[20:24:19] <bandali> and for live0 probably the same as last year, maybe slightly larger
+*** CANCELLED Check fps after resize :sachac:
+CLOSED: [2022-12-02 Fri 09:06] SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:CREATED: [2022-12-02 Fri 07:27]
+:END:
+*** DONE Back up dumps from live0
+CLOSED: [2022-12-02 Fri 11:05]
+media.emacsconf.org:~/emacsconf-2021-stream-dumps/
+res.emacsconf.org:/data/emacsconf/2021/dumps/
+
+Now there should be more space in case we want to enable dumping before the resize
+
+*** DONE [#A] Update ansible configuration :sachac:
+CLOSED: [2022-12-02 Fri 19:30] SCHEDULED: <2022-12-02 Fri>
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2022-12-02 Fri 15:59]--[2022-12-02 Fri 18:58] => 2:59
+:END:
+Waiting for resize
+Clean up the media root
+
+in all.yml
+
+test_mode: false
+
+then
+
+ansible-playbook -i inventory.yml prod-playbook.yml --tags media
+ansible-playbook -i inventory.yml prod-playbook.yml --tags stream
+ansible-playbook -i inventory.yml prod-playbook.yml --tags publish
+
+Confirm that
+- icecast dumps recordings
+- https://media.emacsconf.org/2022 is unprotected
+- https://media.emacsconf.org/2022/backstage is protected
+
+* Communications
+:PROPERTIES:
+:CUSTOM_ID: comms
+:END:
+** DONE Ask emacsconf-org-private for feedback on early submissions
+
+The EmacsConf 2022 CFP was extended to Sept 30 with notifications to
+go out on Oct 15. We've got plenty of submissions and with any luck,
+you've been reviewing them as they come in (assuming you have access to
+emacsconf-submit@).
+
+As a courtesy to people who got their stuff together in a timely manner
+and to give them extra time to prepare a prerecorded talk (which might
+also translate into extra time for us to process and caption the talks),
+I'd like to send acceptances and tentative time allotments by Sept 30.
+I plan to offer a max of 20 minutes with a note that additional time may
+be available for Q&A depending on how many additional submissions we get.
+
+Could everyone who wants a say in the program please add comments to
+$url by **Sept 26** so that we can send out early acceptances? In
+general, we try to say yes to everything, so here's your chance to
+raise any red flags or suggest ways to make things even better.
+Thanks!
+
+Sacha
+
+** DONE Acceptance :sachac:
+CLOSED: [2022-09-30 Fri 18:13] DEADLINE: <2022-09-30 Fri>
+:PROPERTIES:
+:CUSTOM_ID: acceptance
+:END:
+
+We can accept early or send people a note saying notification of acceptance will be on Oct 15, because of the extended CFP.
+Right before this e-mail:
+
+- Publish the wiki pages
+
+Objectives for this e-mail:
+
+- Notify people of acceptance
+- Tell them the number of minutes to plan for* (might get more)
+- Tell them about the target date
+- Get them to reply
+- Ask for public contact information or any changes to the wiki page
+
+#+begin_src emacs-lisp
+
+(defun emacsconf-draft-acceptance-for-email-group (group &optional template)
+ "GROUP is (email . (talk talk))."
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (let* ((template (or template (emacsconf-mail-merge-get-template "acceptance")))
+ (talks (cdr group))
+ (first (car talks))
+ (reply-by-date (date-to-time "2022-10-08"))
+ (prerec-target (date-to-time "2022-11-04"))
+ (attrs `(:speakers-short
+ ,(plist-get first :speakers-short)
+ :plural
+ ,(if (= (length talks) 1) "" "s")
+ :email
+ ,(plist-get first :email)
+ :year
+ ,(or (plist-get first :year) emacsconf-year)
+ :reply-date
+ ,(format-time-string "%b %-e (%a)" reply-by-date)
+ :titles
+ ,(mapconcat (lambda (o) (format "\"%s\" (%s)"
+ (plist-get o :title)
+ (plist-get o :slug)))
+ talks " and ")
+ :prerec-target
+ ,(format-time-string "%b %-e (%a)" prerec-target)
+ :page-urls
+ ,(mapconcat (lambda (o) (concat "- " (plist-get o :url)))
+ talks "\n")
+ :irc
+ ,(if (plist-get first :irc) (concat (plist-get first :irc) "? ") "")
+ :acceptance-tasks
+ ,(concat
+ "* TODO Reply to acceptance e-mail in order to confirm e-mail communication :emacsconf:
+ DEADLINE: " (format-time-string "<%Y-%m-%d %a>" reply-by-date) "\n Please include any extra information you want (ex: public e-mail, IRC nick) on\n"
+(mapconcat (lambda (o) (concat " " (plist-get o :url)))
+ talks "\n") "\n"
+(mapconcat (lambda (o) (format "* TODO Record %s-minute talk for \"%s\" (%s) :emacsconf:
+ DEADLINE: %s\n https://emacsconf.org/%s/prepare/"
+ (plist-get o :time)
+ (plist-get o :title)
+ (plist-get o :slug)
+ (format-time-string "<%Y-%m-%d %a>" prerec-target)
+ (plist-get o :year)))
+ talks "\n"))
+ :talk-details-and-comments
+ ,(mapconcat
+ (lambda (o)
+ (format "%s minutes: %s\n%s\n\n%s"
+ (plist-get o :time)
+ (plist-get o :title)
+ (plist-get o :url)
+ (string-fill (emacsconf-replace-plist-in-string
+ (append o
+ (list
+ :prerec-target (format-time-string "%b %-e" prerec-target)))
+ (plist-get o :acceptance-comment)) 72)))
+ talks "\n---------------------------------------------------------------------\n"))))
+ (emacsconf-mail-prepare template (car group) attrs)))
+
+(defun emacsconf-draft-all-acceptances ()
+ (interactive)
+ (let* ((emacsconf-talk-info-functions (append emacsconf-talk-info-functions '(emacsconf-get-talk-comments-from-subtree)))
+ (info (seq-filter (lambda (o) (string= (plist-get o :status) "TO_ACCEPT"))
+ (emacsconf-filter-talks (emacsconf-get-talk-info))))
+ (grouped (seq-group-by (lambda (o) (plist-get o :email)) info))
+ (template (emacsconf-mail-merge-get-template "acceptance")))
+ (mapc (lambda (group)
+ (emacsconf-draft-acceptance-for-email-group group template))
+ grouped)))
+
+#+end_src
+*** Speaker acceptance
+:PROPERTIES:
+:SUBJECT: EmacsConf ${year} acceptance${plural}: ${titles}
+:EMAIL_ID: acceptance
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:END:
+Hi, ${speakers-short}!
+
+Summary:
+,${acceptance-tasks}
+
+We've accepted your EmacsConf proposal${plural} for ${titles}! Thanks
+for volunteering to share what you're learning about. I know it takes
+a fair bit of work to prepare a presentation, so I appreciate that
+you're taking the time to show what's possible with Emacs and
+encourage people to learn more.
+
+---------------------------------------------------------------------
+${talk-details-and-comments}
+---------------------------------------------------------------------
+
+You'll have some time after your talk${plural} for Q&A, so the allocated time
+can be just for your pre-recorded talk${plural}. Of course, if you like, you
+can make it shorter.
+
+We've posted preparation tips at https://emacsconf.org/${year}/prepare/ .
+We'll send you instructions on how to upload files once we get that
+set up.
+
+Could you please plan to **put your pre-rec${plural} together by
+${prerec-target}** (or even earlier if you want)? We're going to try
+to caption as many talks as possible again this year, and extra time
+helps a lot. People found the captions really helpful while watching
+the stream, and sending your talk in early will make it more likely
+that we'll be able to get your captions edited and reviewed before the
+conference.
+
+**Please reply to this e-mail by ${reply-date}** (doublechecking that
+emacsconf-submit@gnu.org is in the To: or Cc:) so that we can confirm
+that we've got the right email address for you and that messages can
+get properly delivered. Also, would you like us to put ${email} as the
+public contact information for you, or would you like us to add
+something else to the talk page${plural}?
+
+${page-urls}
+
+If you have any questions, please e-mail us at
+emacsconf-submit@gnu.org or pass by the #emacsconf-org IRC channel on
+irc.libera.chat (Web-based: https://chat.emacsconf.org/#/connect).
+
+Thank you so much!
+
+Sacha Chua
+
+** Future
+*** Captions for approval
+
+**** Template
+:PROPERTIES:
+:SUBJECT: EmacsConf ${year}: Captions for ${title}
+:TO: ${email}
+:CC: ${captioner-email}, emacsconf-submit@gnu.org
+:REPLY_TO: ${email}, ${captioner-email}, emacsconf-submit@gnu.org
+:EMAIL_ID: captions
+:CUSTOM_ID: approve-captions
+:END:
+
+Hi ${speakers-short}!
+
+Because you sent in your video before the conference, we were able to
+caption it so that more people can find and enjoy your talk.
+${captioner-volunteered} I've attached the caption text file in case
+you want to review it, suggest any corrections, or use the text in a
+blog post or elsewhere. You can look at the attached file or watch
+your video with closed captions at ${url} . I've also included the
+captions at the end of this e-mail for your convenience.${wrap}
+
+${chapters-note}${intro-note}Do you have a bio or social/donation links you'd like us
+to add to the wiki page for your talk?
+
+Thanks again for your contribution!
+
+${captioner-thanks}Sacha
+
+${captions}
+
+*** Speakers we haven't confirmed e-mail communications with
+Hi, ${name}!
+
+I think we haven't heard from you since we accepted your EmacsConf
+${year} proposal for "${title}". EmacsConf coming up soon, so I wanted
+to check in with you to see how you're doing.
+
+Could you please e-mail us to let us know if you're still working on
+your prerecorded video, if you're planning to present live, or if you
+can't make it this year? No worries if other priorities have come up
+and you don't have the time for a presentation.
+
+If you've been working on a presentation, fantastic! When you're
+ready, you can upload it following the instructions at
+https://emacsconf.org/${year}/prepare/ (ideally before ${prerec-date} so
+that we have time to download it, doublecheck, etc.).
+
+If you plan to present live, please go through the self-check at
+https://test.bigbluebutton.org/ . Some speakers have encountered
+technical issues with BigBlueButton that they didn't have with Zoom or
+Google Meet, so this is something we definitely want to look into
+earlier rather than later. If that works for you, please e-mail us
+back so that I can keep your timeslot. The tentative schedule for your
+talk is on the talk page at ${url} .
+
+*Please e-mail us your plans before ${date}.* I'm
+planning to shift the schedule around to give more time to confirmed
+speakers for Q&A and possibly live demos. If I don't hear from you by
+then (maybe an over-enthusiastic spam filter has been swallowing up
+all our mail?), I'll probably reallocate the ${time} minutes that had
+been set aside for your talk. We might be able to squeeze it back in
+afterwards or play a video from you at the end of the conference day,
+but it would be nice to get the schedule sorted out instead of
+scrambling to fill gaps on the day of the conference.
+
+Hope to hear from you by ${date}!
+
+Sacha Chua
+
+(Please use Reply to All to keep emacsconf-submit@gnu.org in the loop. Thanks!)
+
+*** Speakers who are missing prerecs
+#+begin_src emacs-lisp :eval no :tangle no
+(let ((template (conf-mail-merge-get-template "missing")))
+ (seq-map
+ (lambda (info)
+ (compose-mail (plist-get info :email)
+ (conf-replace-plist-in-string info (plist-get template :subject))
+ `(("Reply-To" . ,(plist-get template :reply-to))
+ ("Mail-Followup-To" . ,(plist-get template :mail-followup-to))
+ ("Cc" . ,(plist-get template :cc))))
+ (message-goto-body)
+ (insert (conf-replace-plist-in-string info (plist-get template :body)))
+ (plist-get info :email))
+ (mapcar 'cadr
+ (seq-group-by (lambda (o) (plist-get o :email))
+ (seq-filter (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC"))
+ (conf-get-talk-info))))))
+#+end_src
+
+**** Template
+:PROPERTIES:
+:SUBJECT: [need answer by Friday noon EST] EmacsConf ${year}: Don't have a prerec from you yet, aaah!
+:EMAIL_ID: missing
+:END:
+
+Hi ${speakers},
+
+EmacsConf is in a few days and I don't think we have your prerecorded
+video yet, so I'm getting miiiildly stressed about the schedule. And
+you're probably stressing out about it too, so let's go figure out how
+we can make this work.
+
+Option A: If you happen to have the prerecording or can get it done by
+tomorrow, we can probably squeeze it in. Please upload it to
+ftp-upload.emacsconf.org by following the instructions in
+https://emacsconf.org/${year}/prepare#ftp-upload , or send us a link using
+your favourite file-sharing service (especially if FTP is giving you
+problems).
+
+Option B: If you want to present live, it might be an option. I'm a little
+worried about the potential for technical issues, since we've had
+problems with that in previous EmacsConfs. The tight schedule means
+there's not a lot of time to figure things out, and it can be hard to
+make something as focused as a prerecorded video when you're doing it
+live. We will definitely want to make sure that:
+ - your self-serve tech check works: https://test.bigbluebutton.org
+ at your convenience;
+ - you check in as early as possible (at least 1 hour before, so we
+ know if the speaker before you needs to extend) and let us know
+ that you want to do it live https://emacsconf.org/${year}/speakers .
+ We keep adapting the schedule as things come up, so please check
+ https://emacsconf.org/${year}/schedule/ on the day of the conference.
+
+If there are technical issues or your talk runs a little over time, we
+might have to stop streaming it on the main stream when it's time for
+the next talk. We may be able to continue streaming it on the
+alternate stream. If so, people can continue watching it there if they
+wish to.
+
+Option C: If you can't make it, that's okay. Life gets crazy
+sometimes. Please let us know and we can update the wiki. If you
+happen to be able to make a prerecorded video afterwards, we can add
+that to the wiki, playlists, and announcements. We hope you can join
+us next year.
+
+Since EmacsConf is *this weekend* (aaaaaaah), please let us know by
+tomorrow noon EST (Friday; 9AM PST, 5PM GMT, 6PM CET) so that we can
+keep the time allocated for you in the schedule. If we don't hear from
+you, we'll probably reallocate the ${time} minutes reserved for you so
+that other talks can have longer Q&A. If you can still make it, check
+in early and let us know so that we can try to work out an alternate
+stream for you. Hope to hear from you soon!
+
+Sacha
+
+*** Last email before the conference
+#+begin_quote
+Friends, emacsians, hackers, lend me your ears!
+
+This is it, the final stretch until the next EmacsConf. A couple of weeks
+ago, we’ve shared our program with you; now, it is time for us to share our
+schedule, i.e. when the talks will happen!
+
+You can find it on our wiki:
+https://emacsconf.org/$year/schedule/
+
+All the times on the program are listed in EST (UTC-5). If a talk catches
+your eye, we invite you to click on its title to find out at what time it will
+be broadcast in your local time. Also, if the talk is pre-recorded, it will
+also be the time at which the talk will be made available on the same page.
+#+end_quote
+
+
+*** Thank you, next steps
+:PROPERTIES:
+:CUSTOM_ID: thanks
+:END:
+**** Code
+
+
+#+begin_src emacs-lisp
+(defun conf-mail-thanks-after-conference ()
+ (interactive)
+ (let* ((template (conf-mail-merge-get-template "speaker-thanks"))
+ (info (conf-get-talk-info-for-subtree)))
+ (compose-mail (plist-get info :email)
+ (conf-replace-plist-in-string
+ info (plist-get template :subject)))
+ (message-goto-body)
+ (save-excursion
+ (insert
+ (string-trim
+ (conf-replace-plist-in-string
+ (append
+ (list :subtitle-note
+ (if (file-exists-p (expand-file-name (format "%s/captions/%s--main.vtt"
+ (plist-get info :year)
+ (plist-get info :video-slug)) conf-directory))
+ "You can add the subtitles by downloading them from the talk page and uploading them to your video. "
+ "We didn't quite manage to squeeze in captions for your talk during the conference, but we'll work on those soon.")
+ :qa-note
+ (if (plist-get info :qa-public)
+ "The recording of your Q&A session is also on the talk page. "
+ "")
+ )
+ info)
+ (plist-get template :body)))))))
+#+end_src
+
+#+RESULTS:
+:results:
+conf-mail-thanks-after-conference
+:end:
+
+
+**** Text
+:PROPERTIES:
+:EMAIL_ID: speaker-thanks
+:SUBJECT: Thanks for speaking at EmacsConf ${year}! Prerec for ${title} up on page, YouTube, Toobnix
+:END:
+
+Hi ${speakers-short}!
+
+Thank you so much for being part of EmacsConf ${year}! Hundreds of people
+enjoyed it, and I'm sure even more will come across the videos in the
+days to follow.
+
+Your prerecorded video is available on the talk page at ${url} , and
+we've added the questions and comments that we've collected from
+IRC/BBB/Etherpad. ${qa-note}
+
+We've also uploaded your talk video to ToobNix (a PeerTube
+instance) at ${toobnix-url} and YouTube at ${youtube-url} . If you
+want to reupload the video to your own channel, feel free to do so.
+${subtitle-note} If you let me know where you've uploaded
+it, I can switch our playlist to include your version of the video
+instead. That way, it might be easier for you to respond to comments
+on videos.
+
+If you would like to share more resources, you can add them to the
+talk page or e-mail them to us and we can add them for you.
+
+Thanks again for speaking at EmacsConf!
+
+Sacha
+** Archive
+*** DONE Second announcement: CFP
+:PROPERTIES:
+:SUBJECT: [ANN] EmacsConf 2022 Second Call for Participation (extended until Sep 30)
+:END:
+:LOGBOOK:
+- Note taken on [2022-09-18 Sun 13:29] \\
+ Sent by bandali to emacsconf-discuss@gnu.org, emacs-devel@gnu.org, emacs-orgmode@gnu.org, emacs-tangents@gnu.org
+:END:
+
+Dear fellow Emacsians,
+
+This is the second and final Call for Participation for EmacsConf 2022
+now extended until September 30, and the conference itself planned for
+December 3 and 4 (Sat-Sun). Please see the CFP below for details on
+how to send in your proposal(s), or chat with us about them and about
+other ways of participating and volunteering around EmacsConf via our
+main IRC channel #emacsconf on the Libera.Chat network.
+
+If you're considering submitting a proposal but think the remaining
+time may not be enough, please reach out to me off-list as soon as
+possible so we could work something out.
+
+I'll close this portion of the email with a thank you to all of the
+folks who have submitted session proposals or expressed interest in
+volunteering with EmacsConf. We look forward to reading and reviewing
+all of your messages and proposals, and getting back to you about them
+and about the next steps soon. :-)
+
+Best,
+amin
+
+P.S. please direct any replies to this post either to myself or to the
+emacsconf-discuss list, so as to help avoid generating extra off-topic
+chatter in the other lists cc'd on this message. Thank you.
+*** DONE First announcement: CFP
+:PROPERTIES:
+:SUBJECT: [ANN] EmacsConf 2022 Second Call for Participation (extended until Sep 30)
+:END:
+:LOGBOOK:
+- Note taken on [2022-07-17 Sun 22:00] \\
+ Sent by bandali to emacsconf-discuss@gnu.org, emacs-devel@gnu.org, emacs-orgmode@gnu.org, emacs-tangents@gnu.org
+:END:
+
+Dear fellow Emacsians,
+
+We are excitedly calling for your participation for EmacsConf 2022,
+planned for December 3 and 4, 2022 (Sat-Sun)! The CFP will be open
+until September 18. Please see below for details on how to send in
+your proposal(s), or chat with us about them and about other ways of
+participating and volunteering around EmacsConf via our main IRC
+channel #emacsconf on the Libera.Chat network.
+
+As an entirely volunteer-run conference we are always looking for more
+volunteers and organizers to help with various aspects of organizing
+and running the conference, including reviewing session proposals and
+streaming parallel tracks. To get involved, please come by our IRC
+channel or one of our public mailing lists (see below) and introduce
+yourself and tell us about your interests, or contact myself or one of
+the other organizers directly if you're feeling a bit shy; we hope to
+hear from you! :)
+
+Best,
+amin
+
+P.S. please direct any replies for this message either to me or to the
+emacsconf-discuss list, so as to help avoid generating extra off-topic
+chatter in the other lists Cc'd on this message. Thank you.
+
+* Supporting code
+:PROPERTIES:
+:CUSTOM_ID: code
+:END:
+** General
+#+name: general-setup
+#+begin_src emacs-lisp
+(defvar emacsconf-danger-allow-dangerous-stuff nil
+ "When non-nil, trade safety for convenience.")
+
+(defvar emacsconf-danger-asked nil
+ "When non-nil, user has already been asked for security trade-off.")
+
+(defun emacsconf-danger--ask (forms)
+ "Ask to run dangerous FORMS.
+Return t if the answer is “yes”."
+ (when (y-or-n-p (format "FORMS:\n%s\n\nThis is dangerous. Run anyway? "
+ (prin1-to-string forms)))
+ (unless emacsconf-danger-asked
+ (if (y-or-n-p "Would you like to trade security for convenience for the rest of the session? ")
+ (setq-local emacsconf-danger-allow-dangerous-stuff t)
+ (setq-local emacsconf-danger-asked t)))
+ t))
+
+(defmacro emacsconf-danger--shield (error &rest forms)
+ "Protect user from dangerous FORMS.
+Throw an error if ERROR is non-nil, skip otherwise."
+ `(let ((shield (not (or emacsconf-danger-allow-dangerous-stuff
+ (emacsconf-danger--ask ',@forms)))))
+ (if shield
+ ,(when error
+ '(user-error "Dangerous action cancelled by user"))
+ ,@forms)))
+
+(defmacro emacsconf-danger-shield (&rest forms)
+ "Protect user from dangerous FORMS by throwing an ERROR."
+ `(emacsconf-danger--shield t ,@forms))
+
+(defmacro emacsconf-danger-skip (&rest forms)
+ "Protect user from dangerous FORMS by skipping them."
+ `(emacsconf-danger--shield nil ,@forms))
+
+;; Make it easy to jump and refile
+(setq-local org-refile-targets '((nil . (:maxlevel . 5))))
+
+(message "General setup has been loaded")
+#+end_src
+
+#+name: elisp-no-confirmation
+#+begin_src emacs-lisp
+(emacsconf-danger-shield
+ (setq-local org-confirm-babel-evaluate nil
+ org-confirm-elisp-link-function nil))
+(message "No longer asking for confirmation in this buffer")
+#+end_src
+
+#+name: i-like-danger
+#+begin_src emacs-lisp
+(setq-local emacsconf-danger-allow-dangerous-stuff t)
+(org-babel-ref-resolve "elisp-no-confirmation()")
+
+(message "Now allowing dangerous stuff. Buckle up, buckaroo!")
+#+end_src
+
+#+name: back-to-safety
+#+begin_src emacs-lisp
+(kill-local-variable 'emacsconf-danger-allow-dangerous-stuff)
+(kill-local-variable 'emacsconf-danger-asked)
+(kill-local-variable 'org-confirm-babel-evaluate)
+(kill-local-variable 'org-confirm-elisp-link-function)
+(kill-local-variable 'org-refile-targets)
+
+(message "Back to safety. Phew!")
+#+end_src
+** Prerecs
+*** Receive notification when new prerecs are available
+#+begin_src sh :eval no :tangle prerecs-check-new.sh
+#!/usr/bin/env sh
+
+set -eu
+
+sleep_duration=600
+
+data="$(basename "$0" ".sh").data"
+
+plural () {
+ if [ "$2" = 1 ] || [ "$2" = -1 ]; then
+ echo "${1}"
+ else
+ case $1 in
+ "is" )
+ echo "are"
+ ;;
+ * )
+ echo "${1}s"
+ esac
+ fi
+}
+
+current_time() {
+ date +"[%T]"
+}
+
+log() {
+ printf "%s $1\n" "$(current_time)"
+}
+
+color_green="\e[32m"
+color_white="\e[0m"
+
+log2() {
+ log "${color_green}$1${color_white}"
+}
+
+notify() {
+ log2 "$1"
+ notify-send -t 0 "EmacsConf" "$(log "$1")"
+}
+
+_sleep() {
+ log "Checking again in ${sleep_duration}s"
+ sleep "$sleep_duration"
+}
+
+fetch() {
+ TERM=xterm ssh orga@media.emacsconf.org -- ls -1 /srv/upload | wc -l
+}
+
+clean() {
+ rm -f "$data"
+ log "Data file has been cleaned"
+}
+
+if [ "$#" -gt 0 ]; then
+ command="$1"
+ if [ "$command" = "clean" ]; then
+ clean
+ exit 0
+ fi
+
+ if [ "$command" = "clean-start" ]; then
+ clean
+ fi
+fi
+
+touch "$data"
+
+log2 "Currently waiting for prerec"
+
+while true; do
+ prerecs_number_past=$(cat "$data")
+ diff=0
+
+ while true; do
+ log "Checking..."
+ prerecs_number_current="$(fetch)"
+ diff=$((prerecs_number_current - prerecs_number_past))
+ if [ $diff -gt 0 ]; then
+ break
+ fi
+ log "No new prerec"
+ _sleep
+ done
+
+ notify "$diff new $(plural "prerec" $diff) $(plural "is" $diff) available!"
+
+ echo "$prerecs_number_current" > "$data"
+
+ _sleep
+done
+#+end_src
+*** Fetch upload data
+#+begin_src sh :eval no :tangle prerecs-fetch-upload-data.sh
+#!/usr/bin/env sh
+
+set -eu
+
+current_time() {
+ date +"[%T]"
+}
+
+log() {
+ printf "%s $1\n" "$(current_time)"
+}
+
+if [ -t 0 ]; then
+ log "Fetching data..."
+fi
+
+TERM=xterm ssh orga@media.emacsconf.org -- cat /srv/upload/*/*json
+#+end_src
+*** Fetch new talk data formatted
+#+begin_src sh :eval no :tangle prerecs-fetch-new.sh
+#!/usr/bin/env sh
+
+set -eu
+
+echo "Fetching data..."
+data_raw="$(./fetch-upload-data.sh)"
+
+echo
+
+echo "$data_raw" | awk "$(cat << EOF
+func dewrap(a) {gsub(/^ *".*": "|",$/, "", a); return a};
+BEGIN {i=0};
+/^ "sid"/ { a[0] = dewrap(\$0); };
+/^ "name"/ { a[2] = sprintf("%s\t", dewrap(\$0)) };
+/^ "comment"/ { a[3] = sprintf("%s\t", dewrap(\$0)); if (a[3] == "\t"){a[3] = "No comment"} };
+/^ "key"/ { a[1] = dewrap(\$0); };
+/^\}/ { printf "[%d]\t%s\t%s\t%s\n\t%s\n\n", i, a[0], a[1], a[2], a[3]; i=i+1};
+EOF
+ )"
+#+end_src
+** Publish this page
+#+begin_src emacs-lisp
+(defun emacsconf-org-publish-this-page ()
+ (interactive)
+ (org-md-export-to-markdown)
+ (org-babel-tangle)
+ (magit-stage-modified)
+ (magit-commit-create (list "-m" (read-string "Commit message: ")))
+ (call-interactively #'magit-push-current-to-pushremote))
+#+end_src
+
+*** Export to markdown
+
+#+name: md-export-on-save-setup
+#+begin_src emacs-lisp
+(defun emacsconf-export-md-on-save ()
+ "Export markdown on save.
+Meant to be used with `after-save-hook'."
+ (org-md-export-to-markdown)
+ (org-babel-tangle))
+
+(defvar emacsconf-export-md-on-save-configured t
+ "Non-nil when the setup code-block has been executed.")
+#+end_src
+
+#+name: md-export-on-save-toggle-on
+#+begin_src emacs-lisp
+(unless (bound-and-true-p emacsconf-export-md-on-save-configured)
+ (org-babel-ref-resolve "md-export-on-save-setup()"))
+
+(add-hook 'after-save-hook #'emacsconf-export-md-on-save nil t)
+
+(when (memq #'emacsconf-export-md-on-save after-save-hook)
+ (message "Hook is active"))
+#+end_src
+
+#+name: md-export-on-save-toggle-off
+#+begin_src emacs-lisp
+(remove-hook 'after-save-hook #'emacsconf-export-md-on-save t)
+
+(unless (memq #'emacsconf-export-md-on-save after-save-hook)
+ (message "Hook is no longer active"))
+#+end_src
+
+** Tangle and publish on save
+#+name: md-export-on-save-setup
+#+begin_src emacs-lisp :eval query
+(defun emacsconf-export-md-on-save ()
+ "Export markdown on save.
+Meant to be used with `after-save-hook'."
+ (org-md-export-to-markdown)
+ (org-babel-tangle))
+
+(defvar emacsconf-export-md-on-save-configured t
+ "Non-nil when the setup code-block has been executed.")
+#+end_src
+
+#+name: md-export-on-save-toggle-on
+#+BEGIN_SRC emacs-lisp :eval query
+(unless (bound-and-true-p emacsconf-export-md-on-save-configured)
+ (org-babel-ref-resolve "md-export-on-save-setup()"))
+
+(add-hook 'after-save-hook #'emacsconf-export-md-on-save nil t)
+
+(when (memq #'emacsconf-export-md-on-save after-save-hook)
+ (message "Hook is active"))
+#+END_SRC
+
+#+name: md-export-on-save-toggle-off
+#+begin_src emacs-lisp :eval query :outputs none
+(remove-hook 'after-save-hook #'emacsconf-export-md-on-save t)
+
+(unless (memq #'emacsconf-export-md-on-save after-save-hook)
+ (message "Hook is no longer active"))
+#+end_src
+** Review agenda
+#+begin_src emacs-lisp :results silent
+(defcustom emacsconf-org-tag nil "Tag for your nick, for easier agenda filtering"
+ :group 'emacsconf
+ :type 'string)
+#+end_src
+#+begin_src emacs-lisp :results silent
+(defun emacsconf-show-my-agenda ()
+ (interactive)
+ (let* ((org-agenda-files (list (buffer-file-name)))
+ (tag-filter (if emacsconf-org-tag (concat "+" emacsconf-org-tag) ""))
+ (org-agenda-tag-filter-preset (list (when emacsconf-org-tag (concat "+" emacsconf-org-tag))))
+ (org-agenda-custom-commands `(("a" "Agenda"
+ ((agenda ,tag-filter)
+ (tags-todo ,(concat tag-filter "-SCHEDULED={.+}-DEADLINE={.+}")))
+ ((org-agenda-span 14))))))
+ (org-agenda nil "a")))
+ #+end_src
+
+** Process review comments from pad
+see emacsconf-import-comments-from-etherpad-text
+
+* Lessons learned
+:PROPERTIES:
+:CUSTOM_ID: lessons
+:END:
+** From previous years
+- [X] Shorter CFP, longer recording time
+- [X] Ask for talk title to be subject in submission
+- [X] Fresh eyes can doublecheck that all the talks are included and that availability properties have been set/followed
+- [X] Putting ‘availability’ towards the top of the submission template would make it harder for us to miss it during reviews, and it shouldn’t change anything for speakers.
+- [X] All the personalised messages we’ve sent during the scheduling campaign should probably be kept in a repo so that it’s less work for those who will be in charge of it next.
+- [X] Since people kept running into ftp problems, we might want to set up a web-frontend next year to minimise problems.
+- [X] Might be a good idea to avoid Thanksgiving weekend, as lots of people travel then
+- [X] Tech-checks haven’t been really popular this year, but there are so many ways we could make them more useful. On the [2021-11-16 Tue], 10 days prior the conf, we thought that it could be nice to use them as recording sessions for late-prerecs, and that’s only one example.
+- [X] Having the NO_NEWS / WAITING_FOR_PREREC contrast from the start of ~conf.org~ might have made it easier for us to ping speakers who were late to the party this year. Rather than sending the personalised 10 days prior to the conference, we might have sent it a week after the submission of the anticipated scheduled (where we ask speakers if their allocated time is okay, based on their availability).
+- [X] Move first dry run earlier (maybe one month before?) to give us more time for process tweaks
+- [ ] Dropping talks one week before the conf might allow us to have a near-fixed schedule to announce early.
+ - or we can plan for live or gaps, that's cool too
+- [ ] CRM
+ - [ ] zaeph: Implementing a variable for ~automatic-emails~ would make it easier to suppress user-hooks for message-mode
+ - [ ]zaeph: Even though we’re sending emails automatically, we might want to keep trace of them in our ~Sent~ IMAP folder. notmuch does it with ~Fcc:~ in the header, so we might need a user-customisable var here as well.
+- [ ] less tiring lighting
+- [ ] split host and streamer?
+- [ ] Cram less with different tracks
+- [ ] Review pre-recs, even late submissions in their entirety to ensure no syncing issue
+- [ ] Tight opening-remarks, possible pre-rec.
+- [X] Asking pronunciation of name as soon as application with SA-cha CHEW-ah pattern would be good. Not a lot of diligence with it this year.
+- [ ] People need to specify their IRC handle on application (potentially forcing nick and/or first-name/last-name.
+ - suggested, but not everyone has IRC, so that's okay. We'll manage. Walk new speakers through it?
+- [ ] We might want to figure out an ffmpeg workflow for noise-suppressing on top of normalisation. Take inspiration from Audacity macros.
+- [ ] Having a more relaxed Saturday might give us time to adjust to tech-stack.
+- [X] Creating BBB rooms in anticipation and/or automatically, before or during, might make for smoother check-in; right now, people keep wanting to check in via email even though we told them to use chat
+ - One BBB room per talk
+- [ ] Pre-recs were a little blocky wrt encoding; we might want to bump the bitrate next year
+- [ ] we can see if bot + pads + merging will help next year, and we can also experiment with multiple streams if there are enough people to pull it off so that speakers don't feel like they've just been dropped in a room and left to their own devices :)
+
+** Lessons learned for next year
+
+*** CFP & Review period
+
+- Ask for public e-mail or contact information, IRC handle in CFP
+- Be even more stringent about the 10/20/40-min splits. A lot of
+ speakers still default to the 20- or 40-min formats without
+ providing us shorter formats, and that puts strain on our schedule
+ and requires us to use a different template for the notification
+ (which can be confusing). We need to stress that not respecting the
+ format makes it harder not only for the organizers, but also for the
+ speakers themselves (since they will have to rethink their
+ presentation). Maybe we can have an e-mail template for a quick
+ reply that says something like "Just in case we need to squeeze
+ talks into shorter times, could you please also propose an outline
+ for a possible 10-minute talk that could get people interested in
+ your topic and point them to where they can find out more?"
+- Two people is the sweet number of reviewers to have for the
+ proposals before sending the notifications, and there’d be
+ diminishing returns with more. Two is enough to release the pressure
+ on SCHED, verify the metadata (esp. speaker availability), and
+ suggest a different ordering where appropriate. It can take a long
+ time to comb through the proposals (roughly 10 proposals per hour),
+ and whilst it’d be difficult to justify more in-depth reviewers,
+ other orgas can do a shallow-pass to catch red-flags or discuss the
+ submissions as they come in. Other organizers can always chime in on
+ topics they particularly care about so that their encouraging
+ comments or suggestions can be included in the acceptance e-mail.
+- We extended CFP-end by two weeks this year, but that made it coincide
+ with speaker-notifs, and that’s awkward. Next time, we should only
+ extend the CFP by one week to avoid having to scramble with the
+ schedule until the very last day.
+- Some people assume that they have to suggest longer formats even if
+ they intend their talks to be 10′ or 20′. We should change the
+ wording on the CFP to ask them to only provide alternatives for
+ shorter formats, not longer.
+- It was hard to squeeze all the org/hyperbole talk on day-1.
+ Generally, the people who submit these kinds of talk come from all
+ over the world, and US mornings are more accommodating than US
+ evenings when it comes to timezones. We might consider having two org
+ *mornings* rather than an org *day*; it would give us more flexibility
+ with those talks.
+- We’re starting to reach critical mass on the org-talks. We might want
+ to consider splitting the org-talks and the dev-talks into two
+ distinct events to allow them to grow independently.
+- We should associate time-of-day with CFP-deadline; otherwise, the
+ scheduler has to be on edge until the very end of the day. It’s worse
+ this year because we made CFP-end coincide with speaker-notif, so this
+ might not be as much of a problem next year.
+- It’s easier for us to extend beyond 5pm than to go before 9am
+ (especially for the West coast). Extending beyond 5pm puts strain on
+ European organizers and volunteers, though.
+- Sometimes, ikiwiki on front0 took a lot of time to process the new
+ commits. sachac assumed this is due to a faulty regex parsing. We
+ should be able to find out more by looking at the logs from ikiwiki
+ after a slow commit.
+- Ask for preferred timezone in CFP
+- Check with John Wiegley re: schedule - we always happen to coincide with his work trips
+
+*** When processing prerecs
+- We should flesh out the prepare.md section on audio-recording because
+ some speakers have annoying coil-whines when recording from their
+ laptop’s microphone which are particularly hard to remove. We should
+ ask speaker to record some silence, listen to it in isolation, and
+ gauge how silent it actually is. It’s not a biggie though, since we
+ can usually degrade the audio quality for the sake of removing the
+ noise.
+- We can ask for silence in a separate recording so that we don't have to worry about cutting it out.
+
+** Possible big projects for next year
+
+*** Prolog’ing the schedule
+
+*** Designing the EmacsConf suite (to make it easier for people other us to run their own versions)
+
+* COMMENT Copyright & License
+
+ Copyright (C) 2020-2022 Sacha Chua, Amin Bandali, Leo Vivier
+
+ The EmacsConf 2022 organizers' notebook is part of the EmacsConf
+ wiki, and is dual-licensed under the terms of the Creative Commons
+ Attribution-ShareAlike 4.0 International Public License; and the GNU
+ General Public License as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later
+ version.
+
+ A copy of these two licenses is available on the EmacsConf wiki, in
+ the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
+
+* COMMENT Local variables
+
diff --git a/2022/organizers-notebook/schedule.svg b/2022/organizers-notebook/schedule.svg
new file mode 100644
index 00000000..496bce92
--- /dev/null
+++ b/2022/organizers-notebook/schedule.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(36,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(83,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(114,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(193,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(240,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(405,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.8" width="23" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(460,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.8" width="39" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(531,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.8" width="39" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(601,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(664,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(742,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="50" opacity="0.8" width="23" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(115,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(162,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(209,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(240,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="50" opacity="0.8" width="39" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(413,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="50" opacity="0.8" width="62" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(514,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(578,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(624,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="50" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(711,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,100)"> <title> Schedule for Sunday</title> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(38,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(67,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.8" width="39" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(126,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(169,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(216,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(421,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="39" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(491,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(554,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(632,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(679,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(711,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(750,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:02-10:27 rde Emacs introduction</title> <rect x="97" y="50" opacity="0.8" width="39" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(134,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="50" opacity="0.8" width="23" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(193,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(240,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="50" opacity="0.8" width="23" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(399,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="50" opacity="0.8" width="23" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(460,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(530,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(617,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(671,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(710,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="black" x="0" y="83" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> \ No newline at end of file
diff --git a/2022/planning.md b/2022/planning.md
new file mode 100644
index 00000000..20560520
--- /dev/null
+++ b/2022/planning.md
@@ -0,0 +1,25 @@
+[[!meta title="Planning"]]
+[[!meta copyright="Copyright &copy; 2020, 2021, 2022 Amin Bandali"]]
+
+Most of the EmacsConf organizers and other volunteers hang out in the
+`#emacsconf` IRC channel on `irc.libera.chat`. If you would like to
+get involved, come by our `#emacsconf` channel and say hi!
+
+Besides IRC, the [emacsconf-org][emacsconf-org] public mailing list is
+the main medium of communication for the EmacsConf organizers.
+
+You can find most of the backstage notes in the
+[[organizers' notebook|organizers-notebook]].
+
+You might find it useful to also look at the plans and notes from
+previous years:
+
+- 2021: [[planning|2021/planning]],
+ [[organizers' notebook|2021/organizers-notebook]]
+- 2020: [[planning|2020/planning]],
+ [[organizers' notebook|2020/organizers-notebook]]
+- 2019: [[planning|2019/planning]],
+ [[organizers' notebook|2019/organizers-notebook]]
+
+
+[emacsconf-org]: https://lists.gnu.org/mailman/listinfo/emacsconf-org
diff --git a/2022/prepare.md b/2022/prepare.md
new file mode 100644
index 00000000..3ec8d713
--- /dev/null
+++ b/2022/prepare.md
@@ -0,0 +1,301 @@
+[[!meta title="Notes and tips on preparing your talk"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali<br />Copyright &copy; 2021, 2022 Amin Bandali, Sacha Chua, Leo Vivier"]]
+
+This page contains notes and tips for our speakers on preparing their
+talks and presentations. Please read through the list and consider it
+while preparing your talk. If you have any questions, concerns, or
+suggestions please feel free to write to one our organizational mailing
+lists: the public <emacsconf-org@gnu.org> list, or the private
+<emacsconf-org-private@gnu.org> list, depending on the nature of the
+matter you would like to discuss.
+
+Note: being part of a wiki, this page is subject to change (including
+by you!); so please check back every now and again for any changes and
+updates.
+
+[[Already done? Upload your video and other files|upload]]
+
+### Guidelines for conduct
+
+Please review our [[guidelines for conduct|conduct]] when preparing your
+talk to make sure we’re all on the same page and strive to make the
+event a great experience for all. If you’re not sure whether your talk
+or presentation style meets the guidelines laid out in the guidelines
+for conduct, we’d be happy to help. You can email Sacha Chua at
+<sacha@sachachua.com> to chat more about this.
+
+### Recording your talk
+
+To help EmacsConf 2022 run smoothly, please prerecord your talk, and
+plan to upload your video(s) by **November 4** to allow us enough time
+to do any needed processing (e.g. format or codec conversion) in
+preparation for the event. Please consider submitting a prerecording as
+early as possible so that we can see if volunteers can caption your
+video to make it more accessible and searchable.
+
+To make it easier for organizers and attendees to correctly pronounce
+your name, please start your video with something along the lines of:
+
+"Hi! I’m ${NAME} and I’ll be talking about ${TOPIC}."
+
+The talks will be broadcast with a resolution of **1280x720px**
+(720p). Please make sure your text will be easy to read at that size.
+[You can change the font-size in your Emacs](https://www.emacswiki.org/emacs/SetFonts#h5o-6).
+If you are capturing a single window, you can also resize it before
+you record.
+
+We recommend using **dark text on a light background** for your
+recording, as this can be easier to see especially for people who are
+visually impaired. Themes with more contrast are easier to read than
+low-contrast ones. If you use a dark theme with your Emacs, you can
+change to a lighter one with `M-x customize-theme` (look for those
+with a `-light` suffix). The `modus-themes-load-operandi` command from
+the `modus-themes` package can be a good option.
+
+Audio quality can go a long way in making your talk enjoyable to
+watch. Consider the background noise in the room that you are using to
+record, and see if you can temporarily turn off things for your
+recording. If you have a **headset or external microphone**, try recording
+the audio through that so that you can reduce the sound of the
+computer itself. If you have a smartphone, that might also be a good
+way to record audio that you can then combine with your video
+afterwards. Some people find that draping a blanket over their head
+(including the microphone under the blanket) can help reduce echo,
+which can be a good excuse to make a blanket fort. (It's for
+EmacsConf!)
+
+Please leave at least **5 seconds of quiet** at the end of your video.
+We can use it to try to process your video in order to reduce noise.
+
+Many speakers prefer to record and edit the audio until they're happy
+with how it fits in the time, and then add the slides or videos
+afterwards. It might be easier than trying to do both the audio and
+the video in one go.
+
+To record your video, you could use any of the following pieces of
+free software, depending on your needs:
+
+- [OBS](//obsproject.com)
+- [SimpleScreenRecorder](//www.maartenbaert.be/simplescreenrecorder/)
+- [vokoscreenNG](//linuxecke.volkoh.de/vokoscreen/vokoscreen.html)
+- [peek](//github.com/phw/peek)
+- [ffmpeg](//trac.ffmpeg.org/wiki/Capture/Desktop)
+
+If you decide to use OBS, please make sure to verify the window-capture
+options. Most notably, there is a “Swap red and blue” option that is
+necessary for some setup, and it's easy to miss it.
+
+You might find the following free software programs useful for editing
+your video recordings:
+
+- [Kdenlive](//kdenlive.org/en/)
+- [Blender](//www.blender.org)
+- [Pitivi](http://www.pitivi.org)
+
+Per GNU Project’s [Guide to
+Formats](//audio-video.gnu.org/docs/formatguide.html), we prefer to
+receive prerecorded videos in formats unencumbered by software patents,
+such as `video/webm` ([WebM](https://www.webmproject.org/)-encoded video
+files, with `.webm` file extension) and `video/ogg` (video files encoded
+with the Theora video codec, encapsulated in an Ogg transport layer,
+with `.ogg` or `.ogv` file extension). However, if for one reason or
+another you are unable to send us your prerecorded video in one of the
+above formats, you may submit them in other common formats, like MPEG-4
+(`.mp4`), and we will convert them to our preferred formats on your
+behalf.
+
+*Prepare recorded video in 720p (1280px by 720px) or higher, in the
+WebM format if possible.*
+
+# Compression
+
+If you would like to compress your video before uploading, the following shell script may be useful:
+
+ Q=32
+ CPU=8
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -an -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -g 240 -pass 1 -f webm -threads $CPU /dev/null &&
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a libopus -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -pass 2 -g 240 -threads $CPU "$2"
+
+If you put it in a file called `compress-video.sh`, you can execute it
+from the command line with something like `sh compress-video.sh
+input-file.webm output-file.webm`. It will compress the file in two
+passes. During the first pass, the frame count will increase, but the
+speed will be 0. After the first pass, it will display proper progress
+information.
+
+<a name="tech-check"></a>
+# Tech-check
+
+We ask that speakers who plan to participate in live Q&A sessions schedule
+a short tech-check in the weeks leading to the conference; this is to ensure
+that you can perform all the common tasks you’d need such as sharing your
+screen or toggling your microphone.
+
+We use BigBlueButton for our video-conferencing needs, and a quick way to
+familiarize yourself with it is to run it in a test-room:
+<https://test.bigbluebutton.org/>
+
+If this is your first time at EmacsConf or if you run into any problems,
+please get in touch with us and we’ll sort things out together! In these
+cases, since we’ll need to schedule a 1-on-1 tech-check with you, we ask that
+you email the closest volunteer to your timezone in the list below (or zaeph
+if none of the timezones is a good fit). You can also visit us at
+[#emacsconf-org on Libera](irc://libera.chat/#emacsconf-org).
+
+We will likely schedule those 1-on-1 tech-checks with you on Saturdays or
+Sundays, but we would be happy to try and work out another time if that
+doesn’t work for you.
+
+<table>
+<thead>
+<tr>
+<td>Volunteer</td>
+<td>Email</td>
+<td>IRC Nick</td>
+<td>Timezone</td>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Leo Vivier</td>
+<td>&lt;<a href="mailto:zaeph@zaeph.net">zaeph@zaeph.net</a>&gt;</td>
+<td>zaeph</td>
+<td>CET (UTC+1)</td>
+</tr>
+<tr>
+<td>Sacha Chua</td>
+<td>&lt;<a href="mailto:sacha@sachachua.com">sacha@sachachua.com</a>&gt;</td>
+<td>sachac</td>
+<td>America/Toronto - usually Sat/Sun 8-10AM EDT</td>
+</tr>
+<tr>
+<td><strong>Want to help out? You can add your name and contact-info here!</strong></td>
+<td>&lt;<a href="mailto:your@email">your@email</a>&gt;</td>
+<td>…</td>
+<td>…</td>
+</tr>
+<!-- <tr> -->
+<!-- <td>Corwin Brust</td> -->
+<!-- <td>&lt;<a href="mailto:corwin@bru.st">corwin@bru.st</a>&gt;</td> -->
+<!-- <td>corwin</td> -->
+<!-- <td>US/Central (UTC-6)</td> -->
+<!-- </tr> -->
+<!-- <tr> -->
+<!-- <td>Amin Bandali</td> -->
+<!-- <td>&lt;<a href="mailto:bandali@gnu.org">bandali@gnu.org</a>&gt;</td> -->
+<!-- <td>bandali</td> -->
+<!-- <td>US/Eastern (UTC-5)</td> -->
+<!-- </tr> -->
+</tbody>
+</table>
+
+If you’d like to help out with the tech-checks, feel free to add your name and
+email to the above list and email &lt;<a
+href="mailto:zaeph@zaeph.net">zaeph@zaeph.net</a>&gt; to plan the logistics.
+
+Thank you so much for helping with EmacsConf 2022!
+
+# Frequently-asked questions
+
+## Can I present live?
+
+Tech issues kept happening during EmacsConf 2020, so we’d really
+prefer that all talks have prerecorded videos. There will be time for
+live questions and answers, though, so if you can record a short video
+covering your main points, you might be able to go into more detail in
+live Q&A.
+
+## I have so much I want to share. Can I record a longer video?
+
+The conference program has so many interesting talks. We wish we
+could fit everything in at full length! (Maybe EmacsConf month?)
+Please think of your video as a short teaser that can get people
+interested and point them to where they can find out more. You can
+email <emacsconf-submit@gnu.org> links and other notes to add to the
+wiki page for your talk. If you’d like to record a longer video *in
+addition* to the short one for the main conference, please feel free
+to send us that too.
+
+Additionally, even though it is tempting, please refrain from
+fast-forwarding your recording to make it fit within the format; on top
+of being obvious, it hurts your intelligibility. Trimming out the
+silences and the filler words can help sometimes, but a better solution
+for you might be to write, record, and edit your voice-over; then, you
+can record your video to go along with it.
+
+As a last option, you may send some questions for the host to ask you
+during the Q&A so that you can address extra points that couldn’t make
+the cut.
+
+## I can’t figure out how to record the video. Can I just present the talk?
+
+We might be able to help you record your talk using the BigBlueButton
+web conferencing system before November 4. Please email
+<emacsconf-submit@gnu.org> with some times that might work for you and
+we’ll see if a volunteer can meet up with you to record it.
+
+## Do I need to follow some visual guidelines for the presentation?
+
+- Dark text on a light background is more legible than the opposite
+ (especially for people who are visually impaired), and more contrast
+ is better than a low-contrast theme. This stands for both your
+ slides and your Emacs theme.
+- If you think your fonts might be too small in your slides or in Emacs,
+ they might very well be. [You can change the font-size in your
+ Emacs](https://www.emacswiki.org/emacs/SetFonts#h5o-6), but you can
+ also play with the size of the captured window during your recording.
+- Try to minimize the screen-flashes that occur when you switch between
+ windows, especially if their themes do not cohere (light-to-dark and
+ the reverse). If you can edit your recording, fades and other
+ transitions are a neat solution to this problem.
+
+## How do I show my keystrokes on screen?
+
+In Emacs, you can use
+[interaction-log.el](https://github.com/michael-heerdegen/interaction-log.el)
+(in MELPA) to display the keystrokes and the commands they run in a separate
+buffer. For a system-wide solution, you can look into
+[screenkey](https://gitlab.com/screenkey/screenkey).
+
+## I’m not used to talking to myself. Can I present the talk to someone?
+
+We might be able to help you record your talk using the BigBlueButton
+web conferencing system before November 4. Please email
+<emacsconf-submit@gnu.org> with some times that might work for you and
+we’ll see if a volunteer can meet up with you to record it.
+
+## Can I see the other proposed talks?
+
+Once we’ve emailed all the speakers about their acceptance, we’ll put
+up the talk wiki pages. That way, you can see what else is going on
+in the conference and maybe coordinate with other speakers in order to
+minimize overlap and maximize awesomeness.
+
+## What if there are lots of great questions during Q&A and we run out of time?
+
+You can continue answering questions on the collaborative pad or IRC,
+and we’ll copy questions and answers onto the wiki page afterwards so
+that you can answer them in your own time after the event.
+
+An extended live demo or Q&A session might be possible if someone
+volunteers to broadcast it on an alternative stream. If you or a
+volunteer is interested in helping with this, please feel free to
+contact us at <emacsconf-submit@gnu.org>.
+
+## More questions?
+
+Please email <emacsconf-submit@gnu.org>. We’d love to hear from you.
+
+Thanks for contributing to EmacsConf 2022!
+
+<!-- <a name="tech-checklist"></a> -->
+<!-- #### Tech checklist -->
+
+<!-- - Can you speak and be heard? Is there echo? -->
+<!-- - Can you hear the organizer? -->
+<!-- - Can you share your screen? Is the screen readable? -->
+<!-- - If you plan to show your keystrokes, is that display visible? -->
+<!-- - If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background? -->
+<!-- - Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you? -->
+<!-- - Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes? -->
+<!-- - Do you need help finding your way around IRC so that you can check into `#emacsconf-org`? What is your IRC nickname? -->
diff --git a/2022/qa.md b/2022/qa.md
new file mode 100644
index 00000000..559045a1
--- /dev/null
+++ b/2022/qa.md
@@ -0,0 +1,43 @@
+[[!meta title="Q&A participation"]]
+[[!meta copyright="Copyright &copy; 2022 Sacha Chua"]]
+
+# BigBlueButton
+
+## Notes for participants
+
+- You can ask questions via the text chat or by voice. Voice and webcam are totally optional.
+- Please stay muted until it's your turn.
+- To raise your hand:
+ 1. Open the participant list. If it's hidden, use the person icon in the top left.
+ 2. Click on your name.
+ 3. Click on **Set Status** - **Raise**.
+ You can lower your hand by clicking on your name and choosing **Clear Status**.
+- Headphone or earphones can help avoid audio feedback.
+- If performance is slow, please keep your webcam off.
+- The recording of this session will be posted on the talk page. We'll
+ also copy questions, answers, and notes from the text chat.
+ Everything will be shared under the Creative Commons
+ Attribution-ShareAlike 4.0 License.
+- If you can, please add questions, answers, and notes to the
+ Etherpad. The URL for the Etherpad is on the talk page.
+- Please follow <https://emacsconf.org/conduct> guidelines.
+- If something should be omitted from the recording, put a NOTE in the
+ chat and explain what the organizers should do.
+
+## Notes for the speaker
+
+- You can answer questions in whatever order you want.
+- You can skip questions or take your time to think about them.
+- Please read the questions out loud before answering. This makes it
+ easier to save the questions and answers afterwards.
+- We'll let you know when the stream is going to move on to the next
+ talk. Even after the streamer switches over to the next talk, you
+ can still stay and chat here for as long as you like. When you're
+ done, you can wrap up and leave.
+- If something should be omitted from the recording, put a NOTE in the
+ chat and explain what the organizers should do.
+
+# IRC
+
+- If you add "Q: " as a prefix when asking a question (ex: "Q: Could you please give more details on ..."), it will be easier for us to notice your question.
+- If you are discussing a previous talk after the next talk starts, you may want to add the talk ID to your message to make it clearer. (ex: "re:devel I think ...")
diff --git a/2022/schedule-2022-12-03.md b/2022/schedule-2022-12-03.md
new file mode 100644
index 00000000..7be2c17f
--- /dev/null
+++ b/2022/schedule-2022-12-03.md
@@ -0,0 +1 @@
+<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg></div> \ No newline at end of file
diff --git a/2022/schedule-2022-12-04.md b/2022/schedule-2022-12-04.md
new file mode 100644
index 00000000..201fad8b
--- /dev/null
+++ b/2022/schedule-2022-12-04.md
@@ -0,0 +1 @@
+<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg></div> \ No newline at end of file
diff --git a/2022/schedule-details.md b/2022/schedule-details.md
new file mode 100644
index 00000000..bec9803d
--- /dev/null
+++ b/2022/schedule-details.md
@@ -0,0 +1,54 @@
+Jump to: <a href="#date-2022-12-03">Sat Dec 3</a> - <a href="#date-2022-12-04">Sun Dec 4</a><a name="date-2022-12-03"></a>
+# Saturday Dec 3, 2022
+[[!inline pages="internal(2022/schedule-2022-12-03)" raw="yes"]]
+
+<div class="schedule" data-start="2022-12-03T14:00:00+0000" data-end="2022-12-03T22:30:00+0000" data-tracks="General,Development">
+[[!template id=sched q-and-a="""none""" pad="""https://pad.emacsconf.org/2022-sat-open""" startutc="""2022-12-03T14:00:00+0000""" endutc="""2022-12-03T14:05:00+0000""" start="""9:00""" end="""9:05""" title="""Saturday opening remarks""" url="""/2022/talks/sat-open""" speakers="""Sacha Chua""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""sat-open""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/journalism/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-journalism""" startutc="""2022-12-03T14:05:00+0000""" endutc="""2022-12-03T14:25:00+0000""" start="""9:05""" end="""9:25""" title="""Emacs journalism (or everything's a nail if you hit it with Emacs)""" url="""/2022/talks/journalism""" speakers="""Alfred Zanini""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""journalism""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: velocitatem</a>""" pad="""https://pad.emacsconf.org/2022-school""" startutc="""2022-12-03T14:45:00+0000""" endutc="""2022-12-03T14:55:00+0000""" start="""9:45""" end="""9:55""" title="""Back to school with Emacs""" url="""/2022/talks/school""" speakers="""Daniel Rösel""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""school""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: meain</a>""" pad="""https://pad.emacsconf.org/2022-treesitter""" startutc="""2022-12-03T15:00:00+0000""" endutc="""2022-12-03T15:15:00+0000""" start="""10:00""" end="""10:15""" title="""Tree-sitter beyond syntax highlighting""" url="""/2022/talks/treesitter""" speakers="""Abin Simon""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""treesitter""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/handwritten/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-handwritten""" startutc="""2022-12-03T15:05:00+0000""" endutc="""2022-12-03T15:15:00+0000""" start="""10:05""" end="""10:15""" title="""How to incorporate handwritten notes into Emacs Orgmode""" url="""/2022/talks/handwritten""" speakers="""Bala Ramadurai""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""handwritten""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: manateelazycat, matthewzmd</a>""" pad="""https://pad.emacsconf.org/2022-lspbridge""" startutc="""2022-12-03T15:25:00+0000""" endutc="""2022-12-03T15:45:00+0000""" start="""10:25""" end="""10:45""" title="""lsp-bridge: a smooth-as-butter asynchronous LSP client""" url="""/2022/talks/lspbridge""" speakers="""Andy Stewart, Matthew Zeng""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""lspbridge""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/science/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-science""" startutc="""2022-12-03T15:45:00+0000""" endutc="""2022-12-03T16:05:00+0000""" start="""10:45""" end="""11:05""" title="""Writing and organizing literature notes for scientific writing""" url="""/2022/talks/science""" speakers="""Vidianos Giannitsis""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""science""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/asmblox/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-asmblox""" startutc="""2022-12-03T15:55:00+0000""" endutc="""2022-12-03T16:15:00+0000""" start="""10:55""" end="""11:15""" title="""asm-blox: a game based on WebAssembly that no one asked for""" url="""/2022/talks/asmblox""" speakers="""Zachary Romero""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""asmblox""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a>""" pad="""https://pad.emacsconf.org/2022-buddy""" startutc="""2022-12-03T16:25:00+0000""" endutc="""2022-12-03T16:35:00+0000""" start="""11:25""" end="""11:35""" title="""The Emacs Buddy initiative""" url="""/2022/talks/buddy""" speakers="""Andrea""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""buddy""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/wayland/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-wayland""" startutc="""2022-12-03T16:25:00+0000""" endutc="""2022-12-03T16:35:00+0000""" start="""11:25""" end="""11:35""" title="""Emacs should become a Wayland compositor""" url="""/2022/talks/wayland""" speakers="""Michael Bauer""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""wayland""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/meetups/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-meetups""" startutc="""2022-12-03T18:00:00+0000""" endutc="""2022-12-03T18:20:00+0000""" start="""1:00""" end="""1:20""" title="""Attending and organizing Emacs meetups""" url="""/2022/talks/meetups""" speakers="""Bhavin Gandhi""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""meetups""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/sqlite/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-sqlite""" startutc="""2022-12-03T18:00:00+0000""" endutc="""2022-12-03T18:25:00+0000""" start="""1:00""" end="""1:25""" title="""Using SQLite as a data source: a framework and an example""" url="""/2022/talks/sqlite""" speakers="""Andrew Hyatt""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""sqlite""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/buttons/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-buttons""" startutc="""2022-12-03T18:40:00+0000""" endutc="""2022-12-03T18:55:00+0000""" start="""1:40""" end="""1:55""" title="""Linking personal info with Hyperbole implicit buttons""" url="""/2022/talks/buttons""" speakers="""Mats Lidell""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""buttons""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/mail/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-mail""" startutc="""2022-12-03T18:50:00+0000""" endutc="""2022-12-03T19:30:00+0000""" start="""1:50""" end="""2:30""" title="""Revisiting the anatomy of Emacs mail user agents""" url="""/2022/talks/mail""" speakers="""Mohsen BANAN""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""mail""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="nil">Etherpad</a>""" pad="""https://pad.emacsconf.org/2022-realestate""" startutc="""2022-12-03T19:15:00+0000""" endutc="""2022-12-03T19:40:00+0000""" start="""2:15""" end="""2:40""" title="""Real estate and Org table formulas""" url="""/2022/talks/realestate""" speakers="""Daniel Gopar""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""realestate""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/maint/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-maint""" startutc="""2022-12-03T19:50:00+0000""" endutc="""2022-12-03T20:10:00+0000""" start="""2:50""" end="""3:10""" title="""Maintaining the Maintainers: Attribution as an Economic Model for Open Source""" url="""/2022/talks/maint""" speakers="""Sid Kasivajhula""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""maint""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/health/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-health""" startutc="""2022-12-03T20:00:00+0000""" endutc="""2022-12-03T20:25:00+0000""" start="""3:00""" end="""3:25""" title="""Health data journaling and visualization with Org Mode and gnuplot""" url="""/2022/talks/health""" speakers="""David O'Toole""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""health""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a>""" pad="""https://pad.emacsconf.org/2022-eev""" startutc="""2022-12-03T20:35:00+0000""" endutc="""2022-12-03T20:40:00+0000""" start="""3:35""" end="""3:40""" title="""Bidirectional links with eev""" url="""/2022/talks/eev""" speakers="""Eduardo Ochs""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""eev""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/jupyter/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-jupyter""" startutc="""2022-12-03T20:45:00+0000""" endutc="""2022-12-03T21:05:00+0000""" start="""3:45""" end="""4:05""" title="""Edit live Jupyter notebook cells with Emacs""" url="""/2022/talks/jupyter""" speakers="""Blaine Mooers""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""jupyter""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/haskell/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-haskell""" startutc="""2022-12-03T21:05:00+0000""" endutc="""2022-12-03T21:35:00+0000""" start="""4:05""" end="""4:35""" title="""Haskell code exploration with Emacs""" url="""/2022/talks/haskell""" speakers="""Yuchen Pei""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""haskell""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""none""" pad="""https://pad.emacsconf.org/2022-sat-close""" startutc="""2022-12-03T21:50:00+0000""" endutc="""2022-12-03T21:55:00+0000""" start="""4:50""" end="""4:55""" title="""Saturday closing remarks""" url="""/2022/talks/sat-close""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""sat-close""" note=""""""]]</div>
+
+Jump to: <a href="#date-2022-12-03">Sat Dec 3</a> - <a href="#date-2022-12-04">Sun Dec 4</a><a name="date-2022-12-04"></a>
+# Sunday Dec 4, 2022
+[[!inline pages="internal(2022/schedule-2022-12-04)" raw="yes"]]
+
+<div class="schedule" data-start="2022-12-04T14:00:00+0000" data-end="2022-12-04T22:30:00+0000" data-tracks="General,Development">
+[[!template id=sched q-and-a="""none""" pad="""https://pad.emacsconf.org/2022-sun-open""" startutc="""2022-12-04T14:00:00+0000""" endutc="""2022-12-04T14:05:00+0000""" start="""9:00""" end="""9:05""" title="""Sunday opening remarks""" url="""/2022/talks/sun-open""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""sun-open""" note=""""""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: tecosaur</a>""" pad="""https://pad.emacsconf.org/2022-survey""" startutc="""2022-12-04T14:06:00+0000""" endutc="""2022-12-04T14:26:00+0000""" start="""9:06""" end="""9:26""" title="""Results of the 2022 Emacs Survey""" url="""/2022/talks/survey""" speakers="""Timothy""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""survey""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: tecosaur</a>""" pad="""https://pad.emacsconf.org/2022-orgyear""" startutc="""2022-12-04T14:35:00+0000""" endutc="""2022-12-04T14:45:00+0000""" start="""9:35""" end="""9:45""" title="""This Year in Org""" url="""/2022/talks/orgyear""" speakers="""Timothy""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""orgyear""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a>""" pad="""https://pad.emacsconf.org/2022-rolodex""" startutc="""2022-12-04T14:57:00+0000""" endutc="""2022-12-04T15:22:00+0000""" start="""9:57""" end="""10:22""" title="""Build a Zettelkasten with the Hyperbole Rolodex""" url="""/2022/talks/rolodex""" speakers="""Ramin Honary""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""rolodex""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/rde/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-rde""" startutc="""2022-12-04T15:00:00+0000""" endutc="""2022-12-04T15:25:00+0000""" start="""10:00""" end="""10:25""" title="""rde Emacs introduction""" url="""/2022/talks/rde""" speakers="""Andrew Tropin""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""rde""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/orgsuperlinks/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-orgsuperlinks""" startutc="""2022-12-04T15:40:00+0000""" endutc="""2022-12-04T15:50:00+0000""" start="""10:40""" end="""10:50""" title="""Linking headings with org-super-links (poor-man's Zettelkasten)""" url="""/2022/talks/orgsuperlinks""" speakers="""Karl Voit""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""orgsuperlinks""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a>""" pad="""https://pad.emacsconf.org/2022-justl""" startutc="""2022-12-04T15:50:00+0000""" endutc="""2022-12-04T16:05:00+0000""" start="""10:50""" end="""11:05""" title="""justl: Driving recipes within Emacs""" url="""/2022/talks/justl""" speakers="""Sibi Prabakaran""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""justl""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""none""" pad="""https://pad.emacsconf.org/2022-orgvm""" startutc="""2022-12-04T16:10:00+0000""" endutc="""2022-12-04T16:20:00+0000""" start="""11:10""" end="""11:20""" title="""orgvm: a simple HTTP server for org""" url="""/2022/talks/orgvm""" speakers="""Corwin Brust""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""orgvm""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">Moderated via Mumble, ask questions via pad or IRC</a>""" pad="""https://pad.emacsconf.org/2022-rms""" startutc="""2022-12-04T16:15:00+0000""" endutc="""2022-12-04T16:35:00+0000""" start="""11:15""" end="""11:35""" title="""What I'd like to see in Emacs""" url="""/2022/talks/rms""" speakers="""Richard M. Stallman""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""rms""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/hyperorg/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-hyperorg""" startutc="""2022-12-04T18:00:00+0000""" endutc="""2022-12-04T18:30:00+0000""" start="""1:00""" end="""1:30""" title="""Powerful productivity with Hyperbole and Org Mode""" url="""/2022/talks/hyperorg""" speakers="""Robert Weiner""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""hyperorg""" note="""video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/detached/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-detached""" startutc="""2022-12-04T18:01:00+0000""" endutc="""2022-12-04T18:16:00+0000""" start="""1:01""" end="""1:16""" title="""Getting detached from Emacs""" url="""/2022/talks/detached""" speakers="""Niklas Eklund""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""detached""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/eshell/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-eshell""" startutc="""2022-12-04T18:40:00+0000""" endutc="""2022-12-04T18:55:00+0000""" start="""1:40""" end="""1:55""" title="""Top 10 reasons why you should be using Eshell""" url="""/2022/talks/eshell""" speakers="""Howard Abrams""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""eshell""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/workflows/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-workflows""" startutc="""2022-12-04T18:50:00+0000""" endutc="""2022-12-04T19:15:00+0000""" start="""1:50""" end="""2:15""" title="""Org workflows for developers""" url="""/2022/talks/workflows""" speakers="""George Mauer""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""workflows""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/async/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-async""" startutc="""2022-12-04T19:20:00+0000""" endutc="""2022-12-04T19:40:00+0000""" start="""2:20""" end="""2:40""" title="""Emacs was async before async was cool""" url="""/2022/talks/async""" speakers="""Michael Herstine""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""async""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/grail/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-grail""" startutc="""2022-12-04T19:35:00+0000""" endutc="""2022-12-04T19:55:00+0000""" start="""2:35""" end="""2:55""" title="""GRAIL---A Generalized Representation and Aggregation of Information Layers""" url="""/2022/talks/grail""" speakers="""Sameer Pradhan""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""grail""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/dbus/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-dbus""" startutc="""2022-12-04T20:15:00+0000""" endutc="""2022-12-04T20:35:00+0000""" start="""3:15""" end="""3:35""" title="""The Wheels on D-Bus""" url="""/2022/talks/dbus""" speakers="""Ian Eure""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""dbus""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/indieweb/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-indieweb""" startutc="""2022-12-04T20:25:00+0000""" endutc="""2022-12-04T20:45:00+0000""" start="""3:25""" end="""3:45""" title="""Putting Org Mode on the Indieweb""" url="""/2022/talks/indieweb""" speakers="""Michael Herstine""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""indieweb""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/localizing/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-localizing""" startutc="""2022-12-04T21:00:00+0000""" endutc="""2022-12-04T21:10:00+0000""" start="""4:00""" end="""4:10""" title="""Pre-localizing Emacs""" url="""/2022/talks/localizing""" speakers="""Jean-Christophe Helary""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""localizing""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""none""" pad="""https://pad.emacsconf.org/2022-devel""" startutc="""2022-12-04T21:05:00+0000""" endutc="""2022-12-04T21:15:00+0000""" start="""4:05""" end="""4:15""" title="""Emacs development updates""" url="""/2022/talks/devel""" speakers="""John Wiegley""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""devel""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://emacsconf.org/current/fanfare/room/">BBB</a>""" pad="""https://pad.emacsconf.org/2022-fanfare""" startutc="""2022-12-04T21:25:00+0000""" endutc="""2022-12-04T21:35:00+0000""" start="""4:25""" end="""4:35""" title="""Fanfare for the Common Emacs User""" url="""/2022/talks/fanfare""" speakers="""John Cummings""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""fanfare""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a>""" pad="""https://pad.emacsconf.org/2022-python""" startutc="""2022-12-04T21:30:00+0000""" endutc="""2022-12-04T21:35:00+0000""" start="""4:30""" end="""4:35""" title="""Short hyperlinks to Python docs""" url="""/2022/talks/python""" speakers="""Eduardo Ochs""" track="""Development""" watch="""https://emacsconf.org/2022/watch/dev""" slug="""python""" note="""captioned, video posted"""]]
+[[!template id=sched q-and-a="""none""" pad="""https://pad.emacsconf.org/2022-sun-close""" startutc="""2022-12-04T21:50:00+0000""" endutc="""2022-12-04T22:00:00+0000""" start="""4:50""" end="""5:00""" title="""Sunday closing remarks""" url="""/2022/talks/sun-close""" track="""General""" watch="""https://emacsconf.org/2022/watch/gen""" slug="""sun-close""" note=""""""]]</div> \ No newline at end of file
diff --git a/2022/schedule-image.md b/2022/schedule-image.md
new file mode 100644
index 00000000..81ce8057
--- /dev/null
+++ b/2022/schedule-image.md
@@ -0,0 +1 @@
+<div class="schedule-svg-container"><svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:06- 9:26 Results of the 2022 Emacs Survey</title> <rect x="9" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:57-10:22 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="89" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(126,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:01- 1:16 Getting detached from Emacs</title> <rect x="378" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(399,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 4:30- 4:35 Short hyperlinks to Python docs</title> <rect x="705" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(710,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg></div> \ No newline at end of file
diff --git a/2022/schedule.svg b/2022/schedule.svg
new file mode 100644
index 00000000..9ec8717e
--- /dev/null
+++ b/2022/schedule.svg
@@ -0,0 +1 @@
+<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <title> Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="8" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(39,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs"> <title> Back to school with Emacs</title> <rect x="75" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(106,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <title> How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="125" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(139,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <title> Writing and organizing literature notes for scientific writing</title> <rect x="191" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(222,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <title> Attending and organizing Emacs meetups</title> <rect x="400" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(414,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative"> <title> The Emacs Buddy initiative</title> <rect x="450" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(464,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <title> The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="483" y="15" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas"> <title> Real estate and Org table formulas</title> <rect x="583" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(614,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <title> Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="633" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <title> Edit live Jupyter notebook cells with Emacs</title> <rect x="700" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(714,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <title> orgvm: a simple HTTP server for org</title> <rect x="750" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(764,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <title> Tree-sitter beyond syntax highlighting</title> <rect x="100" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(114,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <title> lsp-bridge: complete asynchronous LSP client</title> <rect x="133" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(164,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <title> asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="183" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(197,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <title> Emacs should become a Wayland compositor</title> <rect x="241" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(255,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <title> Using SQLite as a data source: a framework and an example</title> <rect x="400" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(431,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <title> Revisiting the anatomy of Emacs mail user agents</title> <rect x="475" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(523,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <title> Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="583" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(614,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev"> <title> Bidirectional links with eev</title> <rect x="658" y="75" opacity="0.8" width="8" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(664,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs"> <title> Short hyperlinks to Python docs</title> <rect x="683" y="75" opacity="0.8" width="8" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(689,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs"> <title> Haskell code exploration with Emacs</title> <rect x="708" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(756,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></g> <g transform="translate(0,150)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <title> Results of the 2022 Emacs Survey</title> <rect x="8" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(39,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org"> <title> This Year in Org</title> <rect x="58" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(72,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <title> Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="100" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(131,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <title> Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="166" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(180,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <title> Linking personal info with Hyperbole implicit buttons</title> <rect x="216" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(230,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <title> Powerful productivity with Hyperbole and Org Mode</title> <rect x="400" y="15" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(448,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers"> <title> Org workflows for developers</title> <rect x="483" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(514,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <title> GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="550" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(581,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <title> Putting Org Mode on the Indieweb</title> <rect x="633" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <title> Fanfare for the Common Emacs User</title> <rect x="700" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(714,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction"> <title> rde Emacs introduction</title> <rect x="100" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs"> <title> justl: Driving recipes within Emacs</title> <rect x="175" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(189,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <title> Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="208" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(256,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs"> <title> Getting detached from Emacs</title> <rect x="400" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(414,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <title> Top 10 reasons why you should be using Eshell</title> <rect x="458" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(472,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool"> <title> Emacs was async before async was cool</title> <rect x="516" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(547,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus"> <title> The Wheels on D-Bus</title> <rect x="608" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(639,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs"> <title> Pre-localizing Emacs</title> <rect x="700" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(731,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></g></svg> \ No newline at end of file
diff --git a/2022/sidebar.md b/2022/sidebar.md
new file mode 100644
index 00000000..8982f07b
--- /dev/null
+++ b/2022/sidebar.md
@@ -0,0 +1,11 @@
+<p>Welcome to...</p>
+<p class="center">[[!img /i/emacsconf-logo1-256.png alt="EmacsConf logo" size="72x" link=2022]]</p>
+<p class="center"><strong>[[EmacsConf 2022|2022]]</strong></p>
+
+---
+
+* [[Program|talks]]
+* [[Volunteer]]
+* [[Planning]]
+* [[Guidelines for Conduct|conduct]]
+* [[Contact information|contact]]
diff --git a/2022/speakers.md b/2022/speakers.md
new file mode 100644
index 00000000..9f8ffae7
--- /dev/null
+++ b/2022/speakers.md
@@ -0,0 +1,98 @@
+[[!meta title="Conference-day instructions for speakers"]]
+[[!meta copyright="Copyright &copy; 2021 Sacha Chua"]]
+
+# Before your talk
+
+Please check in at least 30 minutes before the start of your Q&A
+session if you have a prerecorded talk, or at least 60 minutes before
+the start of your talk if you are going to do it live. You can check
+in on IRC by joining the #emacsconf-org channel on libera.chat using
+your favorite IRC client or using
+[https://chat.emacsconf.org](https://chat.emacsconf.org/?join=emacsconf-org).
+If you want, you can also join the channel for your track as well
+(either #emacsconf-gen or #emacsconf-dev). Say something like "Hi,
+this is &lt;your name&gt; checking in" in the \#emacsconf-org channel
+and one of the organizers will check you in. If you are having a hard
+time with IRC, e-mail <emacsconf-submit@gnu.org> and we can give you
+the URL of a BigBlueButton room to join.
+
+- If you want to do Q&A over IRC or Etherpad:
+ - You can hang out in the IRC channel for your track and/or on the
+ pad for your talk.
+- If you want to do Q&A over Mumble:
+ - You can connect to mumble.emacsconf.org.
+- If you want to do Q&A in a BigBlueButton room (ex: quick demoes):
+ - We'll set you up in a BigBlueButton room (check your e-mail for
+ the URL, or ask in #emacsconf-org). You can keep watching the
+ conference or doing other things while waiting there. We'll let
+ you know shortly before your prerec ends. If you want, you can get
+ things ready for whatever you might want to demonstrate.
+ - Please use headphones or earphones to minimize the risk of audio
+ feedback. Webcams are optional.
+
+The schedule on your talk page is still tentative. Please check your
+talk page for updates, especially on the day of the talk. We've done
+some dry-runs, but just in case it turns out that running two tracks
+at the same time leaves us too frazzled, we may drop back to one track
+with Q&A on an alternate stream. We'll try our best to keep your talk
+in the same general timeslot (ex: Saturday morning, Saturday
+afternoon, Sunday morning, Sunday afternoon). If we need to do that,
+or if there are other big changes to your schedule on the day of your
+talk, you'll get an e-mail from us with a subject like "URGENT:
+EmacsConf 2022: ...".
+
+Please let us know if you're running late or if it turns out you can't
+make it. Drop by #emacsconf-org, e-mail us at
+<emacsconf-submit@gnu.org> , or use the emergency contact information
+from the check-in instructions email. If we start worrying, we'll
+reach out to you via your emergency contact information.
+
+# While your talk plays
+
+People will add notes and questions on the
+pad, or they'll ask them on IRC. Volunteers will try to copy all the
+questions to the pad. If you're on Etherpad or IRC, you
+can start answering whenever you like.
+
+# Answering questions
+
+- General notes about answering questions:
+ - You can answer questions in any order, and you can skip any questions you like.
+ - You don't have to answer questions right away. If you want to take
+ some time to think about things, that's okay.
+ - If you're answering questions by voice and the host is not reading
+ the questions out for you, please read the question out before you
+ answer it. This makes it easier to follow the conversation and to
+ copy the answers to the talk page afterwards.
+- After your prerec finishes:
+ - If you're doing IRC/Etherpad: we'll let people know where to ask
+ questions and we can read out some of the questions and answers
+ that are there.
+ - If you're on Mumble: we'll pull you into the channel room and the
+ streamer will connect to it. When we confirm that you can be
+ heard, you and the host can go ahead with the Q&A.
+ - If you're doing Q&A in a BBB room:
+ - We'll switch the stream to broadcast from the BBB room you're
+ in, and we'll start recording the session so that Q&A can be
+ available after the conference. We'll give you a signal when the
+ Q&A is ready to start.
+ - Depending on your preferences, the host can read questions to
+ you, or you can read questions off the pad/IRC yourself.
+ - We'll open up the Q&A for other people to join if there's time
+ for a longer discussion. If so, this conversation can continue
+ for as long as you like. If it's time for the next talk to
+ start, we'll give you a heads-up and your Q&A can continue off
+ the stream in the same BBB room. When you are ready to stop
+ answering questions, you can wrap up however you'd like and
+ leave the meeting.
+
+# After the conference
+
+We'll collect questions and answers from IRC and the pad. We'll put
+them on the talk page and e-mail them to you in case you want to
+follow up or keep the conversation going. We'll also work on
+extracting the videos from the Q&A sessions and we'll post them on the
+talk page.
+
+Thank you so much for putting so much time and energy into sharing
+what you know at EmacsConf!
diff --git a/2022/submit.md b/2022/submit.md
new file mode 100644
index 00000000..81b31abd
--- /dev/null
+++ b/2022/submit.md
@@ -0,0 +1,107 @@
+[[!meta title="Submit"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali<br />
+Copyright 2021 Amin Bandali, Sacha Chua, Leo Vivier<br />
+Copyright 2022 Amin Bandali"]]
+
+When you're ready to submit your proposal, send your submission via
+email to <emacsconf-submit@gnu.org> by **September 30**, including at
+minimum these essential information:
+
+- Your [preferred] name and its pronunciation, and optionally your
+ preferred pronouns;
+
+- your availability during the conference days (December 3 and 4) and
+ how you'd like to handle questions (live web conference, IRC, pad,
+ wiki, questions after the event);
+
+- emergency contact information (such as phone number) in case the
+ organizers need to contact you at the last minute before your talk,
+ or reach you during your talk (for example due to technical
+ difficulties);
+
+- the title of your talk/session;
+
+- an abstract of your talk/session (500 words or less);
+
+- brief descriptions/outlines for [[all talk formats|cfp#formats]] up
+ to your maximum planned length:
+ - 5-10 minutes:
+ - 20 minutes:
+ - 40 minutes:
+
+- your agreement with the speaker release for EmacsConf (see below).
+
+
+Please use the following template for your submission email,
+filling it out with information about you and your proposal:
+
+```
+Speaker name (and optional pronunciation) and preferred pronouns:
+
+
+Speaker availability and preferred Q&A approach:
+
+
+Speaker emergency contact information:
+
+
+Talk title:
+
+
+Talk abstract:
+
+
+
+
+
+
+
+
+- 5-10 minutes: (brief description/outline)
+- 20 minutes: (brief description/outline)
+- 40 minutes: (brief description/outline)
+
+Speaker release:
+
+ By submitting this proposal, I agree that my presentation at
+ EmacsConf 2022 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials")
+ under the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use
+ of the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+```
+
+
+All kinds of people use Emacs for all kinds of things. We would love
+it if EmacsConf 2022 could highlight interesting perspectives and
+reflect the diversity of our community. If you know someone who might
+have a good idea for a talk, please reach out to them and encourage
+them to submit a proposal. Many people (especially from
+underrepresented groups such as women, people of colour,
+non-developers, etc.) might not consider themselves expert enough to
+share their thoughts. If you let them know that you value their
+knowledge and maybe even suggest something that you think others would
+like to hear more about, they may realize that they have something
+worth sharing and that we would love to hear from them.
+
+The submissions will be reviewed by a selection committee. If you
+would like to help review submissions as part of this committee,
+please [[let us know|contact]]. We look forward to hearing from you
+(and the people you want to nudge to speak)!
diff --git a/2022/talks.md b/2022/talks.md
new file mode 100644
index 00000000..e7813e3e
--- /dev/null
+++ b/2022/talks.md
@@ -0,0 +1,26 @@
+[[!meta title="Talks"]]
+[[!meta copyright="Copyright &copy; 2022 Sacha Chua"]]
+[[!sidebar content=""]]
+
+EmacsConf 2022 was on Dec 3 (Sat) and Dec 4 (Sun), 2022 from 9am-5pm
+Toronto/EST time. There were two tracks. The General track included
+talks about Emacs workflows and community resources, while the
+Development track focused on technical topics. Even if you're new to
+Emacs and Emacs Lisp, you'll probably find lots of talks that can
+inspire you and help you learn.
+
+<!-- You can also view all the videos and download resources from the index of [[all EmacsConf 2022 resources|all]]. -->
+
+<!-- There was also an alternate stream for APAC hours, see <https://libreau.org/past.html#emacsconf21>. -->
+
+[[!inline pages="internal(2022/schedule-details)" raw="yes"]]
+
+# Other stuff
+
+You can subscribe to the
+[emacsconf-discuss mailing list](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss)
+to be sure to get updates.
+
+Want to help make EmacsConf even awesomer? [[Volunteer!|/2022/volunteer]]
+
+
diff --git a/2022/talks/asmblox.md b/2022/talks/asmblox.md
new file mode 100644
index 00000000..b97f7169
--- /dev/null
+++ b/2022/talks/asmblox.md
@@ -0,0 +1,94 @@
+[[!sidebar content=""]]
+[[!meta title="asm-blox: a game based on WebAssembly that no one asked for"]]
+[[!meta copyright="Copyright &copy; 2022 Zachary Romero"]]
+[[!inline pages="internal(2022/info/asmblox-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# asm-blox: a game based on WebAssembly that no one asked for
+Zachary Romero (<mailto:zacromero@posteo.net>)
+
+[[!inline pages="internal(2022/info/asmblox-before)" raw="yes"]]
+
+Over the past decade, programming games have risen in popularity and
+become a genre unto themselves. They are loved for their open-endedness
+and have helped people get into programming as well as help programmers
+hone their problem-solving skills. As a fan of the genre, I decided I
+wanted to recreate such an experience in Emacs. Looking at the already
+existing collection of games, TIS-100 by Zachtronics stood out as an
+especially good candidate for the base of a game, where the user is
+entering assembly code into a terminal to solve puzzles. The game
+asm-blox switches things around and instead of programming register
+machines, you program mini stack machines in a language similar to the
+WebAssembly text format.
+
+I'm still wondering if the game is actually any fun or not but either
+way it was an interesting project to make. In this talk, I'll demo the
+game as well as go over some of the Emacs Lisp tricks I used to make it
+work.
+
+The source code can be found at <https://github.com/zkry/asm-blox>
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: Why did you choose an internal state versus many`state
+ buffers`? (ie. actual windows)  Thanks!
+ - A: A single internal state is easier to deal with in the context
+ of the game. Windows would obviously be better for other normal
+ applications to allow users to customize how they should behave.
+- Q:Do you have plans to port shenzhen io to emacs?
+ - A:That would be cool, was also thinking about exopunks.
+- Q:Did this use wasm ? We call some wasm code from Emacs?
+ - A:No, more similar to TIS-100, just a game.
+- Q: Why wasm rather than a more traditional Assembly dialect? It
+ wouldn't be harder to implement, right?
+ - A: It would have been easier, but less of a challenge and
+ resemble TIS-100 too much.
+- Q:Any next projects on your mind?
+ - A: Yes, a couple, hopefully more useful. I think tree-sitter is
+ cool. There's a neovim plugin called neogen that generates
+ documentation. Hopefully next year I'll be presenting something
+ more useful.
+- Q: Does this work with any other paren-based editing packages?
+ - A: Not at all (etc. tbd)
+- Q: What kind of tool could use this idea? 
+ - A: So I think some sort of graph drawing tool in Emacs might
+ have a similar idea. Like artist-mode but with graph drawing
+ constructs.
+- Q:  How did you go about designing the puzzles?
+ - A: With open-ended puzzles like this, coming up with random
+ ideas that seem like they should be implementable usually works.
+ If  you've seen some of Zachtronics games, the bar is extremely
+ high for what is capable.
+- Q: What' are your favorite changes  in the upcoming emacs 29?
+ - A: Definitely tree sitter. I've played around with it and it
+ provides a nice interface for extracting syntax information.
+ Like I can probably rewrite this plugin without any crazy
+ regexs: <https://github.com/zkry/go-ttest.el>
+- Q: Are there tools to add more puzzles?
+ - A: So the game code itself has a asm-blox-puzzles.el file which
+ defines each puzzle. It's pretty easy to add new puzzles but it
+ involves digging into the code.
+- QLike a binding to graphviz? (assume this is a continuation of the
+ "what kind of tool" question)
+ - A: I was thinking more ASCII, like a tool I saw called diagon.
+ Like artist mode but for graphs. But graphviz is amazing and a
+ lot could be done with that.
+
+           the diagon tool: <https://arthursonzogni.com/Diagon/#Math>
+
+Other feedback from IRC:
+
+- Great presentation. Game actually looks quite fun
+- Thanks again for your answers. Du bist das Beste
+
+[[!inline pages="internal(2022/info/asmblox-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/asmblox-nav)" raw="yes"]]
+
+[[!taglink CategoryFun]]
diff --git a/2022/talks/async.md b/2022/talks/async.md
new file mode 100644
index 00000000..5b7fbbc8
--- /dev/null
+++ b/2022/talks/async.md
@@ -0,0 +1,103 @@
+[[!sidebar content=""]]
+[[!meta title="Emacs was async before async was cool"]]
+[[!meta copyright="Copyright &copy; 2022 Michael Herstine"]]
+[[!inline pages="internal(2022/info/async-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs was async before async was cool
+Michael Herstine (IRC: sp1ff)
+
+[[!inline pages="internal(2022/info/async-before)" raw="yes"]]
+
+While async is all the rage in the JavaScript, Go and Rust
+communities, Emacs has had the ability to (certain) asynchronous
+processing all along. I learned this while writing an Emacs package to
+program to my music server's API.
+
+Music Player Daemon is a project that does what it says: hangs out in
+the background & plays your music. It has an API that I wanted to call
+from Emacs. I had just learned async Rust, so I decided to see if I
+could do something similar here. It turns out I could: I wound-up
+writing a little async runtime that allows callers to "send" commands
+to the daemon by queueing them up and returning immediately. In the
+background, as output from previous commands comes in, new commands
+are dequeued and sent.
+
+This required callers to provide callbacks in order to receive the
+results of their commands, which led to a situation all too familiar
+to Javascript programmers: callback hell. The coda to my story was
+(finally) coming to understand Lisp macros in order to extend Emacs
+Lisp with a more convenient construct for sending multiple commands.
+
+This talk will dive into the details of the Emacs Lisp process API,
+specifically the Low-Level Network Access API, with illustrations as
+to how it can be used to build an asynchronous queue. It will also
+introduce Lisp macros and how powerful they can be.
+
+Michael is a developer and long-time Emacs user from the San Francisco
+Bay area. He hacks in C++, Lisp & Rust and thinks a lot about writing
+provably correct code. You can find him at:
+
+ - his [home page](https://www.unwoundstack.com)
+ - on IRC: sp1ff on Libera.Chat
+ - through [e-mail](mailto:sp1ff@pobox.com)
+ - or on [Github](https://github.com/sp1ff)
+
+# Discussion
+
+- Q: (Referencing the first half of your talk): How does this approach
+ compare to using tq.el, Emacs' built-in library for transaction
+ queues?
+ - A: Great question; should have mentioned that... I took a look,
+ but chose to just do it "by hand"; I wouldn't have used many
+ of the features offerred by tq.
+- Q: Have you considered using the aio.el library (written by Chris
+ Wellons) that implements async/await for Emacs lisp using promises?
+ It's implemented using Elisp's record data structure, and turns
+ the nested callback structure into regular-looking Elisp code
+ (without extra keywords etc). +1
+ - A: I wasn't aware, but thanks for the pointer-- will
+ definitely take a look
+- Q: not to take away from your excellent work, but are you aware that
+ EMMS has an MPD client? There's also mpc.el built into Emacs.
+ - A: Another great point; I am, along with mpdel (another MPD
+ client for Emacs). They are all full-fledge applications-- I
+ just wanted a small, tight toolkit
+- Q:Have you seen the Lonesome Pine Specials? I saw your music library
+ and figured you would be interested. My favorite is the one with
+ Edgar Meyer, Sam Bush, Jerry Douglas, and I think Bela Fleck and
+ Mark O'Connor?
+ - A: LOL I haven't, but I I think I will be!
+- Q: can you share the code to the macro that creates the callback
+ tree?
+ - A: <https://github.com/sp1ff/elmpd/blob/master/elmpd.el#L898>
+ - thanks!
+- Q: would using dynamic/special vars add anything interesting /
+ easier to async elisp in your opinion? i noticed you using `let` a
+ lot, but if you defined a variable hmm... not sure if i can :)  i
+ was just wondering if having dynamic binding in Elisp opposed to
+ something like JS adds some power to async programming
+ - A: lexical binding is easier to reason about :)
+- Q: There's another package (chuntaro?) in addition to wellon's aio
+ that also implements a coroutine trampoline on the emacs event loop.
+ any thoughts on the async/await paradigm generally red/blue
+ functions, etc?
+ - A: Longer discussion in the chat room, but I think it's a
+ promising if over-used approach to concurrency.
+- Q: How does your project compare to some of the other MPD clients?
+- Q: Any thoughts on the async await paradigm generally, red-blue functions, etc.?
+- Q: Do you think it's a viable future for Emacs to get out of callback hell?
+
+Comments from YouTube:
+
+- Thank you for the informative video Michael! Now I know a way to avoid callback hell in Emacs lisp!
+- Nice talk, thank you Michael!
+
+[[!inline pages="internal(2022/info/async-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/async-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/buddy.md b/2022/talks/buddy.md
new file mode 100644
index 00000000..30a9e0ce
--- /dev/null
+++ b/2022/talks/buddy.md
@@ -0,0 +1,100 @@
+[[!sidebar content=""]]
+[[!meta title="The Emacs Buddy initiative"]]
+[[!meta copyright="Copyright &copy; 2022 Andrea"]]
+[[!inline pages="internal(2022/info/buddy-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# The Emacs Buddy initiative
+Andrea (<mailto:andrea-dev@hotmail.com>)
+
+[[!inline pages="internal(2022/info/buddy-before)" raw="yes"]]
+
+Emacs is a cryptic marvel of usefulness: who else can help you solve
+its riddles if not a buddy?
+
+The Emacs Buddy initiative [0] aims to help you find somebody that can
+support you in your Emacs exploration.
+
+No matter if this is the first (or second?) time you start Emacs or if
+it is decades you use it: everyone hits a wall behind which there is
+progress. More often than not somebody else (sometimes a younger
+sometimes an older one but always with a different context) can help
+us move past those walls towards new discovery.
+
+So come and listen about how to stand on the shoulders of your Emacs
+ buddies!
+
+In this short talk I will give an idea of how to request a buddy, how
+to become a buddy yourself and how the initiative worked out so far!
+
+[0] <https://github.com/ag91/emacs-buddy>
+
+# Discussion
+
+## Notes and feedback
+
+- I am totally into emacs buddy!!
+- noticed the program name in Andrea's Emacs window title? ;-)
+ - "This Text Editor is just Too Cool :)" in the fram title
+- The "Buddy System" has already helped me with Emacs and Gnus. Thank you Andrea!
+ - oh, you are welcome danisanti :D Hope you keep sending encrypted mails: thanks for the GPG exercise :)
+- This buddy system is a great idea, by the way. I could see how this might really benefit people trying to learn more or spread their skills
+- I think the usergroups page on the EmacsWiki is fairly well maintained.. https://www.emacswiki.org/emacs/Usergroups
+
+
+
+## Questions
+
+- Q: OFF TOPIC and not a question but a remark: hotmail.com is
+ constantly blocking more and more smaller email servers (for valid
+ but also dubious reasons) and many administrators are frustrated
+ enough not to try to get off Microsoft's blocklist any more. So
+ your email address might not be reachable by a substantial set of
+ people especially people who do not use the big email players such
+ as Google.
+ - A: oh what do you suggest? I can use/make a different one
+ - Karl: I'd recommend not to use Microsoft email servers in
+ general as I've realized in too many situations that admins
+ gave up fighting Microsoft. For example, my Mastodon
+ instance can not be used any more by people using hotmail
+ for that reason. Sometimes, admins do have to pay real money
+ in order to get unblocked by Microsoft. This is a pattern
+ I'd not support myself. YMMV.
+ - The worst part: users of Hotmail do not realize this
+ until they really need to contact a company or a person
+ who got blocked.
+ - Ah didn't know that, I will look into it then. Thanks!
+ - Have a look at e.g. mailbox.org (using renewables),
+ migadu.com (partly), posteo.de (if you don't require an own
+ domain...)
+ - For people who focus on mobile apps and webmailers,
+ protonmail might be a good idea. They are Swiss-based
+ and focus on a very high level of privacy and security.
+ AFAIR IMAP is only for payed plans and for for the free
+ plan.
+ - interesting, thanks!
+- Hi Andrea-- great talk. I hope your idea can scale. Are you looking at other models such as mentorship networks etc. What are your thoughts on real-time collaboration? Also, should this buddy network be a slack or discord channel? Would that help?
+ - I will just scale it up if necessary pulling more people as facilitators in case
+- Hi, just missed the talk, but as a beginner who just enjoys tinkering with emacs, I herewith warn you that I might reach out to you :-)
+- Q: would you consider creating a IRC channel for your buddy initiative?
+ - A: I didn't think about it: how would that be? I was thinking email/calls was more personal ;)
+ - a permanent IRC is great for me
+ - email and calls are good too
+ - for IRC there already is #emacs
+ - #emacs is a pretty big channel. I can see where having a dedicated channel would make sense.
+ - something like jitsi might be good if you want that. I think you can protect them w/ code to keep weirdos out?
+ - email is more personal and it doesn't need to be connected all the time to get an answer
+ - yeah, async vs. sync communication styles.
+ - FWIW, to create a channel simply /join #the-channel
+- quiliro: I want to be a mentor and also would like to be mentored
+ - A: just drop me an email and we can get on from there
+ - dto: hey `none can you pm me your email? i could do some mentoring sessions this year for sure
+
+[[!inline pages="internal(2022/info/buddy-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/buddy-nav)" raw="yes"]]
+
+[[!taglink CategoryCommunity]]
diff --git a/2022/talks/buttons.md b/2022/talks/buttons.md
new file mode 100644
index 00000000..dc4e9a39
--- /dev/null
+++ b/2022/talks/buttons.md
@@ -0,0 +1,108 @@
+[[!sidebar content=""]]
+[[!meta title="Linking personal info with Hyperbole implicit buttons"]]
+[[!meta copyright="Copyright &copy; 2022 Mats Lidell"]]
+[[!inline pages="internal(2022/info/buttons-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Linking personal info with Hyperbole implicit buttons
+Mats Lidell (he/him/his, <mailto:matsl@gnu.org>)
+
+[[!inline pages="internal(2022/info/buttons-before)" raw="yes"]]
+
+GNU Hyperbole, The Everyday Hypertextual Information Manager, supports
+hypertext links. Linking is done though buttons that can be either of
+two types, implicit buttons and explicit buttons.
+
+In this talk I will show how the Hyperbole support of implicit buttons
+can be used to create links to personal data.
+
+Outline:
+
+1. Short introduction to Hyperbole
+2. Description of what an implicit button is
+3. Description of how Hyperbole supports creating new implicit buttons using the Hyperbole defil macro
+4. Examples of applying the defil macro together with different personal data structures
+
+# Discussion
+
+- Hyperbole - <https://www.gnu.org/software/hyperbole/>
+- <https://savannah.gnu.org/projects/hyperbole/>
+- Get a lot of power and put buttons everywhere without having to
+ learn a lot of syntax. This is what is cool about hyperbole. 
+- You can expand and collapse trees if you export hyperbole kotl-files
+ (unlike exporting from org-mode)
+- These hyperbole buttons looks quite cool!
+- the mapping is agnostic if you are looking at the code or any other document, that is quite powerful, thanks for the presentation!
+- I was in the other room and just came in at the last moment to hear about hyperbole for the first time!
+
+## Questions
+
+- Q: So with one line of code you can create custom hyperbutton types
+ that are live in any Emacs buffer.  Is that right?
+ - A: Yes.
+- Q:Is there a good way to share common patterns for links other than
+ the ones that you shared? shall those be PRs to your repository?
+ - A: 
+ - No, I view these buttons first as specific for your
+ application or supporting your way of working so would have
+ less value in sharing. On sharing is that they could be used
+ for collabration between different users where each user
+ would define their own mapping to work in their environment.
+ In the file example in the presentation each users could
+ have has stored the data in different local folders but use
+ the same pattern to link to the data.
+ - Thinking about it again now I realize that you mean sharing
+ as examples or for inspiration. That is a good idea. We
+ don't have any example section but we could add that. You
+ can also post ideas and examples to the Hyperbole user
+ mailing list.
+- Q: I liked the link to evaluate Calc expressions. Any way to get the
+ outcome into the buffer and not just in the message window? It could replace embedded calc mode with more control... I guess any elisp code can be used for the target evaluation.
+ -ericsfraga
+ - A: You can mix Hyperbole buttons with Org source blocks too, so
+ you could get things in a buffer that way too.
+ - The example uses a lambda expression to get the result
+ displayed. To get the result inserted in the buffer would just
+ require a function to do that instead of displaying it in the
+ message window.
+ - This would be a simple example of this (It will insert the
+ result after the button, removing rest of the line but keep the
+ point in the button allowing you to change it to calculate a new
+ result.)
+ ````
+ (defil demo-do-math "<<" ">>" ".*"
+ '(lambda (x) (save-excursion (search-forward ">>")
+ (kill-line) (insert " " (calc-eval x) " "))))
+ ````
+- Q: How did you present the right buffer with shortcuts at the right
+ of your buffer? -- a lot of people are wondering.
+ - A:  interaction-log mode -
+ <https://github.com/michael-heerdegen/interaction-log.el>
+ - In combination with displaying it in a separate frame.
+- Q:What kind of cool actions do you use in Hyperbole?
+ - A: Among other things... 
+ - You can expand and collapse trees if you export hyperbole
+ kotl-files (unlike exporting from org-mode) kotl-files are
+ Hyperbole outliner files.
+ - I use implicit button defined with the defib macro that
+ allows me to match to text with no start and stop 
+ delimiters. That way I can match on identifiers used in
+ other systems verbatim, such as identifiers in ticketing
+ systems. Much like the in Hyperbole built in debbugs for the
+ pattern "bug#id-number"
+- Q: Does the links/buttons created in hyperbole (like that one with
+ the url) get exported on org-mode files too? (like when exported to
+ html).
+ - A: There is currently no support for turning the implicit
+ buttons into html-links on export. In practice I would think
+ that to be hard and would only support parts of the
+ functionality but is an interesting idea.
+
+[[!inline pages="internal(2022/info/buttons-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/buttons-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/community.md b/2022/talks/community.md
new file mode 100644
index 00000000..4ec396cb
--- /dev/null
+++ b/2022/talks/community.md
@@ -0,0 +1,57 @@
+[[!sidebar content=""]]
+[[!meta title="The ship that builds itself: How we used Emacs to develop a workshop for communities"]]
+[[!meta copyright="Copyright &copy; 2022 Noorah Alhasan, Joseph Corneli, Leo Vivier"]]
+[[!inline pages="internal(2022/info/community-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# CANCELLED: The ship that builds itself: How we used Emacs to develop a workshop for communities
+Noorah Alhasan, Joseph Corneli, Leo Vivier (Noorah: she/her, Joseph: he/him, Leo: he/him)
+
+[[!inline pages="internal(2022/info/community-before)" raw="yes"]]
+
+After meeting at EmacsConf 2020, and since then, convening weekly as
+the Emacs Research Group, we gained a lot of experience working across
+disciplines. Building on our long-running small-group experience, we
+developed a strategy for engaging others in the kind of light creative
+work that we value because we want to share our patterns for building
+effective joyful action.
+
+Our new day-long workshop brings people together around a topic of
+shared interest. We use a scenario-development and exploration
+process to help participants understand their common ground and
+discover new ways to work together. In this talk, we will give an
+overview of recent workshops we’ve run on themes linked to public
+space and future studies and how we utilize Emacs for our research.
+
+Looking back at our recent pilots as a source of evidence, we’ll look
+at whether and how the methods we used helped people quickly identify
+core themes that they want to keep working on together. While we
+don’t expect everyone to meet weekly as we did, we do expect that
+some participants will leave energised. Underlying the workshop is
+the claim that the right combination of methods should help people
+find topics of priority that they want to get traction on, for
+example, breaking down a topic like "public space" into doable actions
+like cleaning up an abandoned lot. Does the evidence so far support
+this claim?
+
+We also reflect on how technology — including the further evolution of
+Emacs — could help people be even more effective at identifying and
+addressing challenging problems. As a small example, note-taking in
+real-time with CRDT helps us practice ‘active listening’ in our
+meetings and gives us a detailed record of what happened so that we can
+return to for further reflection and analysis. As we think about the
+other affordances of Emacs, we get excited about how more advanced
+data analysis and more structured interaction patterns could aid in
+going back over our old thoughts and getting more out of the time we
+spend together. One potential application would be forming bridges
+between the different community groups, we work with.
+
+
+
+[[!inline pages="internal(2022/info/community-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/community-nav)" raw="yes"]]
+
+[[!taglink CategoryCommunity]]
diff --git a/2022/talks/dbus.md b/2022/talks/dbus.md
new file mode 100644
index 00000000..23ee2eac
--- /dev/null
+++ b/2022/talks/dbus.md
@@ -0,0 +1,173 @@
+[[!sidebar content=""]]
+[[!meta title="The Wheels on D-Bus"]]
+[[!meta copyright="Copyright &copy; 2022 Ian Eure"]]
+[[!inline pages="internal(2022/info/dbus-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# The Wheels on D-Bus
+Ian Eure (ee-uhn you-er, he/him/his, IRC: ieure)
+
+[[!inline pages="internal(2022/info/dbus-before)" raw="yes"]]
+
+In this talk, I’ll explore uses of D-Bus that supercharge your
+Emacs Operating System.
+
+# Discussion
+
+## Notes
+
+- - <https://codeberg.org/emacs-weirdware/debase>
+
+- <https://codeberg.org/emacs-weirdware/discomfort>
+
+- re: "pushing mindshare"..  Yes, you were very successful on that!
+
+## Questions and answers
+
+- Q: This is such a great overview of dbus.  I hadn't been paying
+ attention to this space because it seemed to be in flux (10-15 years
+ age).  How long has dbus been around and what was in place before
+ that?
+ - A: D-Bus dates to 2002, but really saw stabilization and
+ adoption in the 2010s.  There wasn't really anything prior to
+ D-Bus, you'd do some of the things it does by shelling out and
+ driving command-line programs --- not a great approach.
+- Q: Forgive me if this question is silly: Why is everything dBus
+ prefixed with "org."?
+ - A: D-Bus services generally use reverse-FQDN notation, similar
+ to Java packages, and most stuff using it is not-for-profit
+ software, so `org.` is a very common prefix for those.
+- Q: In your investigations, do most OS/DE/WM interop well over d-bus?
+ Which one(s) have proven more challenging, if any?
+ - A: Since D-Bus is pretty uniform, DE/WM considerations aren't a
+ large concern.  D-Bus isn't widely used on non-Linux systems,
+ so OS differences have little to no impact.
+- Q: Re: using EXWM as a Desktop Environment -- Does EXWM provide a
+ session manager (daemon)?
+ - A: No, but it looks like it can work with external X11 session
+ managers.
+- Q:There is a lot of critisism against d-bus out there, why do you
+ think that might be?
+ - A: Because it's not very good.  It uses XML, which isn't hip,
+ and I think a lot of people have a knee-jerk negative reaction
+ to.
+- Q: Which system services come to mind when thinking about
+ applications, be it at the OS/DE/WM level?
+ - A: Stuff that interacts with hardware: turning WiFi on and off,
+ connecting to networks, pairing Bluetooth devices.  The kind of
+ stuff you find in the upper-right of the dock/menubar in a
+ traditional DE.
+- Q: "If you want to do the kinds of things that dBus does, you're
+ limited": What is something dBus does that you couldn't do before?
+ What is a really cool use of dBus in a modern DE (KDE/Gnome etc)?
+ - A: D-Bus is fundamentally about making it *easier* to do things,
+ and using that increased ease of use to broaden the number of
+ places that kind of thing gets done.  So there's some prior art
+ for doing some of these things, but none of them is as easy as
+ doing it via D-Bus.  As far as specific features: I've been
+ using computers a very long time, and it's still magic to me
+ that you can just plug hardware in and immediately use it
+ without having to do anything --- D-Bus is foundational to that
+ kind of interactivity when it comes to things like storage,
+ network, and Bluetooth-connected devices.
+- Q:  When it comes to managing devices, how are dBus and UDev
+ related?
+ - A: They're orthogonal.  I believe UDisks2 (which is the D-Bus
+ service for managing disks) talks to UDev2, but this is abstract
+ & not a detail you have to care about as a client of UDisks2.
+- Q: As an average GNU/Linux user, I've used signals and methods
+ before but not properties. You gave an example involving properties,
+ but it kind of flew by. Can you explain briefly what clients and
+ services can do with properties?
+ - A: Properties are metadata associated with an object
+ interface[.   They can expose r/o information about the object
+ (the name of the host; the UUID of a disk device; the hardware
+ address of a network device), and you can modify certain
+ properties about the object or service by writing to them.  For
+ example, `org.freedesktop.NetworkManager.Device` has an
+ `AutoConnect` property, which you can use to enable/disable
+ automatic connection.
+- Q: what is the name of the dbus GUI you showed?  defeat? dfeet?
+ - A: "d-feet" 
+- Q:  Naive Q (me not knowing much about dBus): Is there such a thing
+ as a dBus reflection browser (maybe Emacs based) that lets you
+ discover all the behavior different dBus app participants provide?
+ Thinking something like what macOS Automator does? (actually, wait,
+ think you're showing it)
+ - A: d-feet is the one I showed:
+ <https://wiki.gnome.org/Apps/DFeet>
+ - I'd very much like something similar, but built into Emacs.
+- Q:dbus seems great for extensibility. But then Emacs has no such
+ mechanism. And is fantastically more extensibile. Why do you think
+ this is so?         
+ - A: I think these are different kinds of extensibility.  Emacs is
+ much more malleable than anything D-Bus offers.  You can't
+ change how existing D-Bus services work in the same way as you
+ can with Emacs customizations, variables, advice, or just going
+ and hacking on the code live; you can only add new features by
+ creating new services.
+- Q:  Do you have other cool dbus ideas?
+ - A: I greatly want to see:
+ - A D-Bus browser.
+ - discomfort expanded and made better looking, so there isn't
+ a single storage-related task I can't do with it and dired.
+ - A NetworkManager interface, so I don't have to use
+ nmtui/nmcli.
+ - A Bluez (bluetooth) interface, so I never have to see
+ bluetoothctl again.
+- Q: Are there Busses besides System and Session? Is there anything
+ more to a Bus besides a way to group ~~services~~ objects?
+ - A: There's always at least a System bus; theres one Session bus
+ per logged-in session (so potentially zero).  You can create and
+ connect to as many busses as you want, and they get identified
+ by the socket they listen on, which can be a local UNIX socket
+ or a TCP socket.  This isn't a common usecase, most things use
+ system and session.
+- Q: It looks like dBus is mostly useful for Emacs to do IPC -- IIUC,
+ this is how synctex works when working with LaTeX docs. How does it
+ compare with other ways of doing IPC, for example, communicating
+ over a socket with MPD?
+ - A: D-Bus provides a uniform framework for building these
+ services.  MPD's socket interface only works with MPD, and if
+ you want to connect to one, you have to write code that speaks
+ the protocol before you can do high-level things like "play"
+ or "pause."  D-Bus provides the underlying communication layer
+ as well as the model for the API, so you get all that stuff for
+ free.  If a music player has a D-Bus interface, and you're
+ using a language with D-Bus bindings, you can go from zero to
+ "support playing and pausing" in one line of code.
+- Q: ~~What mainstream/popular d-bus alternatives have you seen out
+ there, if any, maybe beyond pipes, udev, and such? -> somewhat
+ redundant with the above~~
+ - A: There aren't any alternatives on Linux that I'm aware of. 
+ Other operating systems have different ways of doing things
+ similar to what D-Bus does (such as OSA/AppleScript on macOS).
+- Q: I see a python dbus tutorial, does it make sense to have an emacs
+ version?
+ <https://dbus.freedesktop.org/doc/dbus-python/tutorial.html> 
+ - A: That's a really good idea!
+- Q: How if at all do the various web browsers interop (well) via
+ d-bus?
+ - A: It could be better.  Firefox (and forks) have a simple
+ interface that lets you open a URL, but nothing else.  I'm not
+ sure about other browsers, since LibreWolf is what I use.  If
+ you use d-feet to examine the session bus, you can see!
+- Q: Nice, thanks! I had been looking for a udisks tool. Is it available?
+ - A: Yes, https://codeberg.org/emacs-weirdware/discomfort It's alpha, but way nicer than using udisksctl.
+
+Other discussions from IRC:
+
+- Very interesting talk Ian!
+- Pretty interesting... I am already scratching my head thinking on applications!
+- Thanks, fascinating ieure, now onto refactoring everything not yet into Emacs to be managed in Emacs via d-bus...
+- One usage example I've recently stumbled over is the scad-dbus package which can control the openscad gui from Emacs, move around the camera etc.
+- @ieure : Thanks for the great talk, love these expositions of yours, especially of things that have gone under-appreciated - and the packaging into timeless tunes obviously!
+
+[[!inline pages="internal(2022/info/dbus-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/dbus-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/detached.md b/2022/talks/detached.md
new file mode 100644
index 00000000..f4b17e92
--- /dev/null
+++ b/2022/talks/detached.md
@@ -0,0 +1,89 @@
+[[!sidebar content=""]]
+[[!meta title="Getting detached from Emacs"]]
+[[!meta copyright="Copyright &copy; 2022 Niklas Eklund"]]
+[[!inline pages="internal(2022/info/detached-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Getting detached from Emacs
+Niklas Eklund (he/him, <mailto:niklas.eklund@posteo.net>)
+
+[[!inline pages="internal(2022/info/detached-before)" raw="yes"]]
+
+
+As an enthusiastic Emacs user I would find myself replacing the usage
+of an external terminal emulator with the Emacs alternative
+interfaces. This included using packages such as dired for file
+management, magit for git and proced for processes. However I always
+kept a terminal around for running shell commands. These were
+commands that I knew would either, take a long time to run, produce a
+lot of rapid text output or that I would run on a remote machine. In
+the remote case I would rely on tmux to be able to detach and let the
+command run even when I wasn't connected.
+
+To rid me of the need for the terminal emulator in these situations I
+developed the detached.el package. It is a package that builds on top
+of the dtach program, which provides the ability to detach and
+re-attach to processes, to offload Emacs from these processes. The
+package seamlessly integrates the ability to detach and attach into
+Emacs, and offers integration with many built in features such as
+shell, eshell, compile, org and dired.
+
+In this talk I will demonstrate the features of this alternative way
+to run detached processes and how the package can leverage built in
+Emacs functionality to provide a great experience. The user interface
+will be showcased and how the processes essentially becomes text,
+which fits very well into Emacs.
+
+# Bio
+
+- Blog: <https://niklaseklund.srht.site/>
+- Source code: <https://sr.ht/~niklaseklund/>
+
+My name is Niklas Eklund. I am 35 years young and I live in Gothenburg
+(Sweden) with my wife and our dog. In my daily work, I write code in
+C++ and Python. My free time I dedicate to music, board-games, improvement,
+and of course, Emacs.
+
+More than 4 years has passed since I first started using Emacs and
+there is so much to like about it: its community, the ethics and how
+it encourage me to experiment and explore. Whether it is about writing
+a small function, or a package, the ability to mold Emacs to what
+makes sense to us as individuals is something to cherish.
+
+# Discussion
+
+## Questions and answers
+
+- Q: Can it replace ssh+tmux for persistent sessions on remote hosts?
+ - A: Not yet; being considered for future work.
+- Q: I see integration with projectile in the readme, does it also
+ integrate with project.el?
+ - A: Not yet but should be easy to add.
+- Q:  Can you detach a session from shell-mode and reattach from
+ eshell/vterm/term-mode?  Or start a compile in shell-mode and attach
+ it from compilation-mode?
+ - A: 
+- Q: How do you talk to detached? Could it be feasible to run a child
+ emacs instead of detached? Would it make sense? Better communication
+ maybe?
+ - A:
+- Q: How does it handle processes that require user input? (Usually to
+ type y/n, etc). M-x compile is great but can't handle user input.
+ - A:
+- Q: Can you rerun a command (session?) but in another directory?
+ - A:
+- Q: What are some other places where this might be useful?  mu4e
+ fetching mail?  Git processes started by Magit?  What things would
+ you like to see working in a 1-2 year timeframe?
+ - A: 
+- Q: What are you currently excited about in emacs? 
+
+
+[[!inline pages="internal(2022/info/detached-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/detached-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/devel.md b/2022/talks/devel.md
new file mode 100644
index 00000000..6ee016c9
--- /dev/null
+++ b/2022/talks/devel.md
@@ -0,0 +1,73 @@
+[[!meta title="Emacs development updates"]]
+[[!meta copyright="Copyright &copy; 2022 John Wiegley"]]
+[[!inline pages="internal(2022/info/devel-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs development updates
+John Wiegley
+
+[[!inline pages="internal(2022/info/devel-before)" raw="yes"]]
+
+What has been happening and what is soon to come in Emacs development
+
+Bio: John Wiegley is a past maintainer of Emacs and frequent contributor of Emacs Lisp.
+
+# Discussion
+
+## Questions and answers
+
+- Q: Any word on bringing someone like John W. back in in a maintainer
+ role? I think someone like him is good in that role and miss seeing
+ his messages as frequently!
+ - A: I very much appreciate the support! but now is not a good time. I have other
+ distractions that would detract from my ability to support the community
+ properly.
+- Q: Does the user need to do anything to turn on support for long
+ lines?
+ - A: No! Just editing files with long lines should become much faster.
+ - Side note intersting vidoes about long lines
+ - <https://www.youtube.com/watch?v=5C3wB3xiMmU>  Emacs Long
+ Lines Fix
+ - <https://www.youtube.com/watch?v=kflDJ9L4siw>  Emacs Long
+ Lines, This Time With Feeling
+- Q: Having emace init comand line option is nice" no more chemacs
+ for multiple emacs configs" and would make starter packs eaiser to
+ test, or makeing applications or scripts based off of emacs easier
+ to do. Is there anything else following this decection?
+ - A: I don't really follow this question well enough to have an answer!
+- Q: The discussion during Howard's Eshell talk indicated demand for
+ enhancing Eshell and its documentation. For those of us interested
+ in pursuing that, where should we start? Should we explore moving it
+ from core into an independent package?
+ - A: Certainly new development could happen in an independent repository, with
+ releases delivered back to the Emacs repository. There are other packages that
+ also do this.
+- Q: has any date been set for 29 release?
+ - someone else: I haven't seen dates on devel. The branch was just cut so I would expect it will be at least a few months. Could be longer as there are so many new features in 29 (tree-sitter, sql-lite, use-package to name a few I'm hyped for)
+ - someone else: Seems like a good release for dropping legacy and using all the new stuff everybody else is using. wayland, lsp, tree-sitter, better performance on long lines.
+ - A: I'm not aware of a specific date, but if you follow the emacs-devel list, updates are sometimes posted.
+- Is tree-sitter useful if you want to parse all the code in an application or is it more narrow, i.e. just for interactive parsing of changing code?
+ - A: I imagine it's generally useful for parsing any sort of text that you want to
+ perform structural analysis on, whether in whole, in part or incrementally. I
+ recommend checking out the web documentation on the tree-sitter libraries.
+Notes and other feedback:
+
+- XInput 2 support author here.  X has historically seen three
+ input APIs: Core Input, legacy XInput, and XInput 2.  Emacs only
+ ever used the first until Emacs 29, where it jumped straight to
+ using the last.  So it's not quite an ``update'', but rather an
+ entirely new feature.  Thanks for the great talk!
+ - A: Good to know, thank you for that clarification!
+
+- Thanks John! Thanks Eli!
+
+## Notes
+
+[[!inline pages="internal(2022/info/devel-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/devel-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/eev.md b/2022/talks/eev.md
new file mode 100644
index 00000000..c8d40a9b
--- /dev/null
+++ b/2022/talks/eev.md
@@ -0,0 +1,71 @@
+[[!sidebar content=""]]
+[[!meta title="Bidirectional links with eev"]]
+[[!meta copyright="Copyright &copy; 2022 Eduardo Ochs"]]
+[[!inline pages="internal(2022/info/eev-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Bidirectional links with eev
+Eduardo Ochs
+
+[[!inline pages="internal(2022/info/eev-before)" raw="yes"]]
+
+Consider the two sexps below:
+
+ (code-c-d "foobar" "/tmp/foo/bar/" :anchor)
+ (code-c-d "fb" "/tmp/foo/bar/" :anchor)
+
+Each one of them defines several "short hyperlink" functions. After
+running them the three sexps below are roughly equivalent:
+
+ (find-file "/tmp/foo/bar/plic.txt")
+ (find-foobarfile "plic.txt")
+ (find-fbfile "plic.txt")
+
+The "`code-c-d`"s above also define functions with even shorter names
+&#x2013; `find-foobar` and `find-fb` - that point to "anchors" in files in
+the directory `/tmp/foo/bar/`. The three sexps below are roughly
+equivalent -
+
+ (find-fline "/tmp/foo/bar/plic.txt" "«bletch»")
+ (find-foobar "plic.txt" "bletch")
+ (find-fb "plic.txt" "bletch")
+
+Until feb/2022 the only way that I had to produce these hyperlinks to
+anchors quickly required a LOT of muscle memory&#x2026; I had to type this,
+
+ M-1 M-h M-w M-h M-h 9*<down> M-h M-2 M-h M-y M-h M-- M-h M-w M-k
+
+where the number of "`<down>`"s depended on whether I preferred
+`find-foobar` of `find-fb` - i.e., of on what is my preferred "code"
+for the "directory" `/tmp/foo/bar/`; either "`foobar`" or "`fb`".
+
+In this presentation I will show a much better way to generate short
+hyperlinks to anchors and push these short hyperlinks to the kill
+ring, and how I use that to create bidirectional hyperlinks between my
+notes on a language $LANGUAGE and programs written in that language.
+
+For more info see [this page](http://angg.twu.net/emacsconf2022-kla.html).
+
+# Discussion
+
+- Q: Can you say why you like all your links to be elisp expressions rather than something more textual? Is it just so you can always evaluate the expressions?
+ - A: rswgnu5: it is quicker to create hyperlinks that don't have titles, and many years ago I had some problems when I gave titles that were not very good, and I ended up with links that didn't do what I expected, so I sort of stopped trusting links whose actions are hidden and only their titles are shown. also, I am trying to write code in which all parts are easy to understand.
+- Q: I am fond of and inspired by your idea of Lisp Markup & Interfaces. Have you thought of other Lisp Markup uses than Links? How do you think of incorporating tree-sitter? If that makes sense to you or at all.
+ - A: can you explain your idea? I haven't had time to play with tree-sitter yet, but my holidays will start in a few weeks... I sometimes get stuck trying to understand the inner details of things whose inner details shouldn't be relevant... I had this problem with both Org and Hyperbole several times, and I guess that I will have it with tree-sitter too...
+ - edrx: I don't have a concrete idea. I just have been thinking of the intersection of Markup, minimalist Textinterfaces and little Languages | language oriented programming for a while. Eg Lisp is a nice List/ tree data syntax. You use it for links. Do you have other markup like uses for? And speaking of tree data, tree-sitter is a tool to incrementally & robust build a tree from a flat text buffer.
+ - do you know this? https://github.com/mmontone/emacs-inspector
+- Bi-directional links is a good idea.
+- I look forward to trying it out and seeing how it feels. It certainly looked cool!
+- awesome! btw edrx i'd really enjoyed the last eev workshop, would be totally down to attend another one later too
+- An interesting link type to add would be org id for org roam or denote id link types.
+- I've been trying to use eev to explore parts of Emacs that I don't understand... a basic example is M-x list-packages
+- Something to love about org mode, hyperbole, and eev is how they push the idea of links further
+
+[[!inline pages="internal(2022/info/eev-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/eev-nav)" raw="yes"]]
+
+[[!taglink CategoryEEV]]
diff --git a/2022/talks/eshell.md b/2022/talks/eshell.md
new file mode 100644
index 00000000..def188e8
--- /dev/null
+++ b/2022/talks/eshell.md
@@ -0,0 +1,156 @@
+[[!sidebar content=""]]
+[[!meta title="Top 10 reasons why you should be using Eshell"]]
+[[!meta copyright="Copyright &copy; 2022 Howard Abrams"]]
+[[!inline pages="internal(2022/info/eshell-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Top 10 reasons why you should be using Eshell
+Howard Abrams (he/him)
+
+[[!inline pages="internal(2022/info/eshell-before)" raw="yes"]]
+
+While Eshell is this quick and dirty way to run external commands, its
+*dirtiness* plays into the Lisp’s *malleable* big ball of mud metaphor,
+and I have a number of quick hacks that will make you want to play in
+this puddle.
+
+This will be a lightning talk that I will pre-record to show off some
+features in eshell I found while diving into the source code &#x2026; stuff
+you can’t do in another terminals. Did you know that `$$` is a special
+variable that contains the output from the last command?
+
+Update from Howard: I wrote an _expanded transcript_ with more code and functional links. See <http://howardism.org/Technical/Emacs/eshell-why.html>
+Want _all_ the code? See my literate dotfiles for #emacs at <https://github.com/howardabrams/hamacs/blob/main/ha-eshell.org>
+# Discussion
+
+## Notes
+
+- Full code:
+ <https://github.com/howardabrams/hamacs/blob/main/ha-eshell.org>
+- Longer transcript:
+ <http://howardism.org/Technical/Emacs/eshell-why.html>
+- Yes eshell is usefull!  Please help polishing and showing this stuff
+ you found out.
+- Alvaro Ramirez has been doing the DWIM stuff
+- Regarding the not so well oiled parts of eshell. There are many
+ efforts doing a better shell. I have the feeling we already have
+ that in emacs already and it is just unfinished. But maybe that is
+ just a statment about emacs in general.
+- Reach out to me if anyone wants to pair up and make a eshell-ext
+ with many of the feature improvements I mentioned in my talk, that
+ probably shouldn't clutter up the default eshell implementation.
+- eshell is great for running top and htop (except I can't figure out how to input the function keys)
+ - haha yeah i don't either
+- vterm isn't distracting - it has no new features to speak of
+
+## Questions and answers
+
+- Q: Do you fallback to vterm only when needing terminal emulation
+ (ncurses/etc)? Or are there use cases or contexts where you use
+ vterm over eshell beyond just terminal emulation needs?
+ - A: I do vterm mostly for SSH, but Docker builds and Ansible
+ commands can cause a real mess of the screen, so I often run
+ those commands in vterm ... but I'm not really working with
+ that output.
+- Q: One issue I've had with eshell's TRAMP integration is that cd
+ is host agnostic (as you point out). This means typing `cd` on a
+ remote machine will cd back to $HOME on your local machine. Is
+ there a way to cd to $HOME on the remote machine?
+ - A: It just isn't the way it behaves. While Eshell, with a
+ Tramp-based cd command, will ssh "under the hood", it is
+ temporary, as all the buffer work is local. I usually don't
+ know what will happen, so I often need to switch to vterm for
+ all ssh work. Which gets me upset when I encounter something
+ that I would then like to use Eshell for (like piping the output
+ back to my local Emacs buffer).
+- Q: Thank you for the missing Why eshell. Have you thought about
+ adding it to the eshell manual?
+ - A: maybe I should team up with someone and improve on it
+- Q:Do you know if the eshell {} can be used from elisp? It could make
+ for a nice elisp shell interface.
+ - A: Yes. Start with `eshell-command' and some variations on
+ that.
+- Q: How does that interplay with your "literate-devops" approach,
+ where things are done in an org buffer/document first instead of
+ directly in the shell/terminal?
+ - A: the 2 are different. I use as REPL to test stuff
+- Q: Do you have a strategy for getting around eshell's lack of
+ support for input redirection? (I also miss process substitution.)
+ - A: I have started sending output to Emacs buffers, where I can
+ have more fun editing them than trying to get a pipe command
+ sequence working. I wrote a function to pull a buffer back into
+ Eshell to pipe back to something else. Pipes are problematic in
+ Eshell.
+- Q: Can you call elisp functions as well (ie, not just commands)?
+ - A: Yes. Functions that start with eshell/ are called as if they
+ were commands. However, all functions are available in eshell
+ ... that is what makes it more interesting than the other
+ comint-based term shells.
+- ~~Q: Aren't buffers the superior pipes? --> that was meant as a
+ comment when he was asked about pipes, not a question per se -->
+ alright~~
+ - A:Howard: yes
+- Q:Do you have a preferred method for getting argument completion for
+ shell commands in Eshell?
+ - A: Check out
+ <https://github.com/howardabrams/hamacs/blob/main/ha-eshell.org#getopts>
+- Q: Similarly, is it possible to get Eldoc-based completion for Elisp
+ calls in Eshell?
+ - A: dont know. would be great, though
+- Q:Do you have thoughts about
+ <https://www.masteringemacs.org/article/complete-guide-mastering-eshell#plan-9-smart-shell>
+ ?  Summary: it effecitly adds a "| less" to every command so you
+ get to see paged output if needed, except it is built into eshell.
+ - A: It is a cool idea, but while I tried it when Mickey first
+ published that idea, it didn't stay in my workflow.
+- Q: Is $$ a built-in feature of eshell or did you add it?
+ - A: The Eshell built-in version of $$ doesn't always work, so
+ I wrote an updated version that seems to work better (see
+ <https://github.com/howardabrams/hamacs/blob/main/ha-eshell.org#last-results>)
+ ... I'm pretty sure that if you do a command with a lot of
+ output, it may not work at all, not just get the last of that
+ output. Mine is just a better hack. :-D
+- Q: Do you ever fallback to terminals/shells outside Emacs, and if so
+ in what circumstances?
+ - A: I boot up with a Terminal to mount remote file systems, as my
+ Emacs configuration isn't always stored locally on my machine.
+ I'll admit that I sometimes leave the Emacs Garden, but doing
+ anything interesting become frustrating when you have to leave
+ the keyboard for the mouse.
+- Q: What are the less well-oiled parts of Eshell or edge case issues
+ that you encounter if any?
+ - A: We should make a list and start working on them.
+- Q:Do you have ways to improve eshell vterm interop like sharing
+ command history and directory tracking?
+ - A: I don't. If I am going to SSH somewhere, I just start vterm,
+ and haven't thought about any interop.
+- Q: Where can I find your eshell/do command? Probably you also have another bunch of interesting Eshell helpers.
+ - https://gitlab.com/howardabrams/hamacs/-/blob/main/ha-eshell.org?plain=1#L741-761
+
+Other comments from IRC:
+
+- Impressive. eshell is an emacs REPL! I knew I could issue some emacs commands but not this level of interactivity. Thanks!
+- The real elisp REPL is ielm, but eshell is more generally useful.
+- eshell is a REPL focused on the specific niche of shell. ielm's the pure elisp repl, and it rocks.
+- yes. i know ielm. just hadn't realised how powerful eshell is.
+- howard-abrams : every time I've watched a talk of yours over the years, Emacs/Org-mode has absorbed one more use cases of mine, and made them be in literate form. I'm down to Emacs and a web browser, so I'm looking ahead to your talk about the Web in Emacs :)
+- You can also leverage org-mode source blocks tu turn outputs into inputs to other blocks so, plenty of alternatives to pipes
+- Wow! Eshell is awesome! I have just learnt more tips! Thanks howard-abrams!
+- I think of Eshell as my *universal* machine REPL, i.e. not just ielm for emacs/elisp nor a shell for the machine, but *both* emacs/elisp and the OS/env.. In that way it's quite neat.
+- howard-abrams: thank you, very inspiring! I've always found 'normal' command line usage somewhat cumbersome and am certanly going to look at the code
+- I really like eshell but I sometimes find the aliases a bit hard to write. alias f if $* {find-file $1; for i in {cdr {flatten-tree $*}} {find-file-other-window $i}} {echo "No files"} - Should probably use Elisp instead
+ - I think the aliases are almost completely broken, and only seem to work in the barest of cases.
+ - Yes, in particular the Lisp part is broken. In combination with $*
+ - I agree that you should write a function for that. Because as I mentioned in my talk, aliases don't accept $* at all.
+ - Oh, they do. This alias works. I don't recall the reason why I wrote this as an alias. I probably just wanted to use an alias where possible.
+ - Huh ... that works? I need to try it out. I couldn't get that working, so that is why I wrote the function that I did.
+- watching your talk now; TIL /dev/kill and /devl/clip
+
+[[!inline pages="internal(2022/info/eshell-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/eshell-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/fanfare.md b/2022/talks/fanfare.md
new file mode 100644
index 00000000..24e2ed4b
--- /dev/null
+++ b/2022/talks/fanfare.md
@@ -0,0 +1,179 @@
+[[!sidebar content=""]]
+[[!meta title="Fanfare for the Common Emacs User"]]
+[[!meta copyright="Copyright &copy; 2022 John Cummings"]]
+[[!inline pages="internal(2022/info/fanfare-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Fanfare for the Common Emacs User
+John Cummings (IRC: jrootabega, <mailto:john@rootabega.net>)
+
+[[!inline pages="internal(2022/info/fanfare-before)" raw="yes"]]
+
+
+# Table of Contents
+
+
+
+Emacs enables Emacs developers to produce some very impressive and
+useful things. It can also inspire examination and discussion of
+profound ideals. But what about the everyday user who may not always
+feel that they live up to these examples? What about the "dark matter"
+of the Emacs universe? There's a lot of us out there, and we have an
+important effect, but it may be hard to see it. What about life after
+the EmacsConf inspiration has started to fade, and we find ourselves
+working much the same way as we always have? In this
+not-very-technical short reflection (perhaps just a personal
+projection pep talk), I want to recognize and celebrate the experience
+of these users.
+
+Colored by my personal unremarkable usage of Emacs, I'll describe some
+of the practices and "imperfections" that everyday Emacs users might
+experience &#x2013; trying to create and remember keybindings, writing many
+quick hacky functions to solve miscellaneous problems, trying to learn
+more than we forget, half-implemented ideas, messy organic .emacs,
+etc. I'll frame these positively, as a great way to use Emacs for our
+own personal mundane needs, and a sign of our own dedication and
+pragmatism. I'll opine on how Emacs is, conversely, a perfect platform
+for this kind of usage in addition to highly-organized packages and
+modes.
+
+
+# Discussion
+
+## Notes
+
+- What a wonderful talk.  You knocked it out of the park.  Thank you
+ so much.
+- "Psychic baggage" with emacs-- awareness of possibilities left
+ behind and opportunity costs.
+- Possibly related:
+ - <https://www.youtube.com/watch?v=yJDv-zdhzMY> Mother of all demos
+ - <https://www.youtube.com/watch?v=oMpf0ilQ9Lk&list=PLomc4HLgvuCWuJVVwsT8pbLWYR-n3G8bH&index=17> EmacsConf 2019 - 18 - Object oriented spreadsheets with example applications - David O'Toole (dto)
+ - <https://agregore.mauve.moe/> peer to peer browser
+ - <https://emacspeak.sourceforge.net/>
+ - The Common Lisp Omnificent GUI Builder - Online Lisp Meeting #13, 11.01.2022 <https://www.youtube.com/watch?v=pkQ-WlzQudw>
+ - <https://gtoolkit.com/>
+ - <https://janet-lang.org/>
+
+## Questions and answers
+
+- Q: I have not only One config, but multiple configs in different
+ locations... .emacs/init.el and .emacs.d/init.el and different
+ Python installs in different places. Is this something that I should
+ take care of earlier rather than later? I need to pay someone to
+ "consult" on my config. Is this an existing business? Is there a
+ place to barter a screen share for something else of value in
+ exchange? In any case, thank you for giving permission to have fun
+ without the need for too much structure. 
+ - A: Good quetion... I'm humbled and will give it some thought.
+ The Buddy emacs system would be a good place to start. 
+ - Now after having thought some more, I think it depends on your
+ comfort level when the best time to reorganize your various
+ environments and configs is. Separate configs and installs might
+ be better separate if they are just doing different things or
+ represent different mental contexts. If the separation starts
+ causing stress or extra effort, at least you then know you have
+ a good reason for merging them
+ - and won't be doing it just for its own sake. I still think the
+ Emacs Buddy Initiative sounds like a great way for people to
+ trade eyeballs on stuff like this. And there's always the
+ famous rule: just post it somewhere and say it's the best
+ approach, and you'll get dozens of people giving you free
+ advice on how to improve it!
+- Q:How would you suggest Emacs developers (including package
+ developers) interface with non-developer users and get their
+ insights to help in shaping future Emacs functionality?  What sorts
+ of things make new functionality more welcoming to non-technical
+ users?
+ - A: From what I can tell on the Emacs mailing lists, reaching out
+ to all types of users is already seen as important and results
+ in collaborations like the recent Emacs Survey. As far as going
+ further than that, maybe a space for users of the package where
+ all skill/comfort levels are welcomed and comfortable
+ volunteering feedback? I wonder how many users might not even be
+ interested in ever giving feedback just because they prefer to
+ keep to themselves.
+ - Side note.: sourchut allows multiple repos one one mailing list
+ for smaller packages
+- Q: It's my impression that many "common" Emacs users are
+ migrating to other editors in past years. The reasons cited include
+ configurations growing out of control, and the general
+ rough-around-the-edges feel of Emacs that they've been putting up
+ with for a while. (Maybe this isn't a new phenomenon) As a result,
+ Emacs is becoming home to a *smaller* set of people who are ever
+ *more* invested in it. Do you share this observation? If you do,
+ what do you think of this trend?
+ - A: My impression has been that there has been a large net
+ increase in Emacs users in the last, let's say, 5-10 years,
+ probably due to the popularity of tools including, but not
+ limited to, org, starter kits, magit, others I can't remember
+ due to a tired brain. One of the hypotheses that I couldn't fit
+ in my talk was that I doubted that anyone ever really left
+ Emacs.  Maybe they do some other tasks with other tools (I
+ myself already don't use it for all my programming), but they
+ always have some use for it. That could be wrong, of course. I
+ agreee that there may be subpopulations of Emacs users whose
+ proportions and philosophies change over time. I think the
+ coming years will be about those groups finding common ground,
+ but I think the overall population is doing OK at the moment. I
+ could just be too committed to Emacs' utility to notice other
+ things too much.
+- Q:Do you consider that using one of the starter packages (doom
+ emacs, spacemacs, etc.) affect that learning process that you
+ mentioned? or is it a good thing from your perspective?
+ - A: I don't have personal experience with a starter package, but
+ I'm somewhat familiar with how those two at least work. I think
+ any way is fine for getting started, and would just make your
+ experience different when and if you started to outgrow it or
+ get curious. Again, I'm technically ignorant about this, but my
+ gut tells me that you could also learn and build a very advanced
+ experience completely inside those kits, and that would still be
+ a great thing, and comparing it to "standard" Emacs might be
+ more of an academic distinction for those people. If they picked
+ those up with the INTENTION of one day outgrowing them, that's
+ also interesting. I think it would be a personal matter whether
+ that was the right choice. I think at least SOME people would
+ feel that they should have just went straight to standard Emacs,
+ but I don't know/feel strongly enough to have a strong belief.
+- Q: Would a "Tip of the Day" package or some elaboration on that
+ idea in Emacs help discovery for lay users? Does that already exist?
+ - A: I'm sure something like that exists, but at the time of the
+ question I could not think of one. I think something like that
+ could help if you got the tips that were appropriate for your
+ situation at the time. I know in other applications, I often end
+ up seeing "Tip of the Day" as something that gets in my way,
+ even if I enabled it myself. Maybe a tip-on-demand? It might be
+ hard to provide a stream of tips that can stay interesting and
+ appropriate for a person's skill level for a long time, and be
+ available when they were receptive to them. Now I'm having
+ ideas about how to show context-sensitive animated tips. Perhaps
+ one day I will have a better answer!
+ - There is <https://nitter.net/emacstips>
+ - <https://github.com/emacs-dashboard/emacs-dashboard> was also
+ suggested by a listener  
+- Q: what is a fanfare
+ - A: it's based on an American piece of music "Fanfare for the Common Man" by Aaron Copland
+
+## Other discussions from IRC
+- this is a GREAT talk!
+- yes, really nice!
+- Every single point I'm like "yes! THIS"
+- This is as true of life as it is of emacs. Life imitates art imitates emacs...
+- Resonates with me from having used emacs for a 5+ years
+- Great talk!!
+- Can't argue with this great reminder that a messy perennially-evolving Emacs setup/config is the norm rather than the exception!
+- understanding source control is such a high bar for lay folk though, makes me think emacs by default setup version control for config files
+- Hmmm, *someone* could experiment with detecting what version control is available locally then using vc to automatically source control changes to our conf..
+- Also, over the last few years, some credit should go to Doom/Spacemacs for bringing new people into the fold that may otherwise not have given Emacs a second look with more the vanilla experience
+ - The more I think about it, the more having use-case packages with virtual machines makes a lot of sense. A sort of all in one package that can be used "out of the box" with an included guide.
+ - I like using starter packs with scratch init. It's a great way to know how far you can push emacs:)
+ - agree, I started with Spacemacs, then moved to Doom Emacs, and I just love it, I agree that starting from scratch was too much challange to start, but now I am not sure if I should try that path or is not actually worth it (considering that I understand much more about the editor and the programming language)
+
+[[!inline pages="internal(2022/info/fanfare-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/fanfare-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/grail.md b/2022/talks/grail.md
new file mode 100644
index 00000000..20e7f6d5
--- /dev/null
+++ b/2022/talks/grail.md
@@ -0,0 +1,322 @@
+[[!sidebar content=""]]
+[[!meta title="GRAIL---A Generalized Representation and Aggregation of Information Layers"]]
+[[!meta copyright="Copyright &copy; 2022 Sameer Pradhan"]]
+[[!inline pages="internal(2022/info/grail-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# GRAIL---A Generalized Representation and Aggregation of Information Layers
+Sameer Pradhan (he/him)
+
+[[!inline pages="internal(2022/info/grail-before)" raw="yes"]]
+[[!template id="help"
+volunteer=""
+summary="Q&A could be indexed with chapter markers"
+tags="help_with_chapter_markers"
+message="""The Q&A session for this talk does not have chapter markers yet.
+Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="grail-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]]
+
+
+The human brain receives various signals that it assimilates (filters,
+splices, corrects, etc.) to build a syntactic structure and its semantic
+interpretation. This is a complex process that enables human communication.
+The field of artificial intelligence (AI) is devoted to studying how we
+generate symbols and derive meaning from such signals and to building
+predictive models that allow effective human-computer interaction.
+
+For the purpose of this talk we will limit the scope of signals to the
+domain to language&#x2014;text and speech. Computational Linguistics (CL),
+a.k.a. Natural Language Processing (NLP), is a sub-area of AI that tries to
+interpret them. It involves modeling and predicting complex linguistic
+structures from these signals. These models tend to rely heavily on a large
+amount of ``raw'' (naturally occurring) data and a varying amount of
+(manually) enriched data, commonly known as ``annotations''. The models are
+only as good as the quality of the annotations. Owing to the complex and
+numerous nature of linguistic phenomena, a divide and conquer approach is
+common. The upside is that it allows one to focus on one, or few, related
+linguistic phenomena. The downside is that the universe of these phenomena
+keeps expanding as language is context sensitive and evolves over time. For
+example, depending on the context, the word ``bank'' can refer to a financial
+institution, or the rising ground surrounding a lake, or something else. The
+verb ``google'' did not exist before the company came into being.
+
+Manually annotating data can be a very task specific, labor intensive,
+endeavor. Owing to this, advances in multiple modalities have happened in
+silos until recently. Recent advances in computer hardware and machine
+learning algorithms have opened doors to interpretation of multimodal data.
+However, the need to piece together such related but disjoint predictions
+poses a huge challenge.
+
+This brings us to the two questions that we will try to address in this
+talk:
+
+1. How can we come up with a unified representation of data and annotations that encompasses arbitrary levels of linguistic information? and,
+
+2. What role might Emacs play in this process?
+
+Emacs provides a rich environment for editing and manipulating recursive
+embedded structures found in programming languages. Its view of text,
+however, is more or less linear&#x2013;strings broken into words, strings ended by
+periods, strings identified using delimiters, etc. It does not assume
+embedded or recursive structure in text. However, the process of interpreting
+natural language involves operating on such structures. What if we could
+adapt Emacs to manipulate rich structures derived from text? Unlike
+programming languages, which are designed to be parsed and interpreted
+deterministically, interpretation of statements in natural languages has to
+frequently deal with phenomena such as ambiguity, inconsistency,
+incompleteness, etc. and can get quite complex.
+
+We present an architecture (GRAIL) which utilizes the capabilities of Emacs
+to allow the representation and aggregation of such rich structures in
+a systematic fashion. Our approach is not tied to Emacs, but uses its many
+built-in capabilities for creating and evaluating solution prototypes.
+
+
+# Discussion
+
+## Notes
+
+- I will plan to fix the issues with the subtitles in a more
+ systematic fashion and make the video available on the
+ emacsconf/grail  URL. My sense is that this URL will be active for
+ the foreseeable future.
+- I am going to try and revise some of the answers which I typed quite
+ quickly and may not have provided useful context or might have made
+ errors.
+- .
+- Please feel free to email me at pradhan@cemantix.org for any futher
+ questions or discussions you may want to have with me or be part of
+ the grail community (doesn't exist yet :-), or is a community of 1)
+- .
+
+## Questions and answers
+
+- Q: Has the '92 UPenn corpus of articles feat been reproduced over
+ and over again using these tools?
+ - A: 
+ - Yes. The '92 corpus only annotated syntactic structure. It was
+ probably the first time that the details captured in syntax were
+ selected not purely based on linguistic accuracy, but on the
+ consistency of such annotations across multiple annotators. This
+ is often referred to as Inter-Annotator Agreement. The high IAA
+ for this corpus was probably one of the reasons that parsers
+ trained on it got accuracies in the mid 80s or so. Then over the
+ next 30 years (and still continuing..) academics improved on
+ parsers and today the performance on the test set from this
+ corpus is somewhere around F-score of 95. But this has to be
+ taken with a big grain of salt given overfitting and how many
+ times people have seen the test set. 
+ - One thing that might be worth mentioing is that over the past 30
+ years, there have been many different phenomena that have been
+ annotated on a part of this corpus. However, as I mentioned
+ given the difficulty of current tools and representations to
+ integrate disparate layers of annotations. Some such issues
+ being related to the complexity of the phenomena and others
+ related to the brittleness of the representations. For example,
+ I remember when we were building the OntoNotes corpus, there was
+ a point where the guidelines were changed to split all words at
+ a 'hyphen'. That simple change cause a lot of heartache
+ because the interdependencies were not captured at a level that
+ could be programmatically manipulated. That was around 2007 when
+ I decided to use a relational database architecture to represent
+ the layers. The great thing is that it was an almost perfect
+ representation but for some reason it never caught up because
+ using a database to prepare data for training was something that
+ was kind of unthinkable 15 years ago. Maybe? Anyway, the format
+ that is the easiest to use but very rigid in the sense that you
+ can quickly make use of it, but if something changes somewhere
+ you have no idea if the whole is consistent. And when came
+ across org-mode sometime around 2011/12 (if I remember
+ correctly) I thought it would be a great tool. And indeed about
+ decade in the future I am trying to stand on it's and emacs'
+ shoulders.
+ - This corpus was one of the first large scale manually annotated
+ corpora that bootstrapped the statistical natural language
+ processing era.  That can be considered the first wave... 
+ SInce then, there have been  more corpora built on the same
+ philosophy.  In fact I spent about 8 years about a decade ago
+ building a much larger corpus with more layers of information
+ and it is called the OntoNotes. It covers Chinese and Arabic as
+ well (DARPA funding!) This is freely available for research to
+ anyone anywhere. that was quite a feat. 
+- Q:Is this only for natural languagles like english or more general?
+ Would this be used for programing laungages.
+ - A: I am using English as a use case, but the idea is to have it
+ completely multilingual. 
+ - I cannot think why you would want to use it for programming
+ languages. In fact the concept of an AST in programming
+ languages was what I thought would be worth exploring in this
+ area of research.  Org Mode, the way I sometimes view it is a
+ somewhat crude incarnation of that and can be sort of manually
+ built, but the idea is to identify patterns and build upon them
+ to create a larger collection of transformations that could be
+ generally useful.  That could help capture the abstract
+ reprsentation of "meaning" and help the models learn better. 
+ - These days most models are trained on a boat load of data and no
+ matter how much data you use to train your largest model, it is
+ still going to be a small spec in the universe of ever growing
+ data that are are sitting in today. So, not surprisingly, these
+ models tend to overfit the data they are trained on.  
+ - So, if you have a smaller data set which is not quite the same
+ as the one that you had the training data for, then the models
+ really do poorly. It is sometimes compared to learning a sine
+ function using the points on the sine wave as opposed to
+ deriving the function itself. You can get close, but then then
+ you cannot really do a lot better with that model :-)
+ - I did a brief stint at the Harvard Medical School/Boston
+ Childrens' Hospital to see if we would use the same underlying
+ philosophy to build better models for understanding clinical
+ notes. It would be an extremely useful and socially beneficial
+ use case, but then after a few years and realizing that the
+ legal and policy issues realted to making such data available on
+ a larger scale might need a few more decades, I decided to step
+ off that wagon (if I am using the figure of speech correctly).
+ - .
+ - More recently, since I joined the Linguistic Data Consortium, we
+ have been looking at spoken neurological tests that are taken by
+ older people and using which neurologists can predict a
+ potential early onset of some neurological disorder. The idea is
+ to see if we can use speech and langauge signals to predict such
+ cases early on. The fact that we don't have cures for those
+ conditions yet, the best we can do it identify them earlier with
+ the hope that the progression can be slowed down.
+ - .
+ - This is sort of what is happening with the deep learning hype.
+ It is not to say that there hasn;t been a significant
+ advancement in the technologies, but to say that the models can
+ "learn" is an extremely overstatement. 
+
+
+
+- Q: Reminds me of the advantages of pre computer copy and paste. Cut
+ up paper and rearange but having more stuff with your pieces.
+ - A: Right! 
+ - Kind of like that, but more "intelligent" than copy/paste,
+ because you could have various local constraints that would
+ ensure that the information that is consistent with the whole. I
+ am also ensioning this as a usecase of hooks. And if you can
+ have rich local dependencies, then you can be sure (as much as
+ you can) that the information signal is not too corrupted.
+ - .
+ - I did not read the "cut up paper" you mentioned. That is an
+ interesting thought. In fact, the kind of thing I was/am
+ envisioning is that you can cut the paper a million ways but
+ then you can still join them back to form the original piece of
+ paper. 
+
+```{=html}
+<!-- -->
+```
+
+
+
+- Q: Have you used it on some real life situation? where have you experimented with this?
+ - A: NO. 
+ - I am probably the only person who is doing this crazy thing. It
+ would be nice, or rather I have a feeling that something like
+ this, if worked upon for a while by many might lead to a really
+ potent tool for the masses. I feel strongly about giving such
+ power to the users, and be able to edit and share the data
+ openly so that they are not stuck in some corporate vault
+ somewhere :-) One thing at a time.
+ - .
+ - I am in the process of creating a minimally viable package and
+ see where that goes.
+ - .
+ - The idea is to start within emacs and orgmode but not
+ necessarily be limited to it.
+
+- Q:Do you see this as a format for this type of annotation
+ specifically, or something more general that can be used for
+ interlinear glosses, lexicons, etc? -- Does wordsense include a
+ valence on positive or negative words-- (mood) . 
+
+- Interesting. question.  There are sub-corpora that have some of this
+ data. 
+
+- - A: Absolutely. IN fact, the project I mentioned OntoNotes has
+ multiple layers of annotation. One of them being the
+ propositional structure which uses a large lexicon that covers
+ about 15K verbs and nouns and all their argument structures that
+ we have been seen so far in the corpora. There is about a
+ million "propositions" that have been released recently (we
+ just recently celebrated a 20th birthday of the corpus. It is
+ called the PropBank. 
+
+- There is an interesting history of the "Banks" . It started with
+ Treebank, and then there was PropBank (with a capital B), but then
+ when we were developing OntoNotes which contains:
+ - Syntax
+ - Named Entities
+ - Coreference Resolutoion
+ - Propositions
+ - Word Sensse 
+
+- All in the same whole and across various genre... (can add more
+ information here later... )
+
+- Q: Are there parallel efforts to analyze literary texts or news
+ articles? Pulling the ambiguity of meaning and not just the syntax
+ out of works? (Granted this may be out of your area-- ignore as
+ desired)
+ - A: :-) Nothing that relates to "meaning" falls too far away
+ from where I would like to be. It is a very large landscape and
+ growing very fast, so it is hard to be able to be everywhere at
+ the same time :-)
+ - .
+ - Many people are working on trying to analyze literature.
+ Analyzing news stories has been happening since the beginning of
+ the statistical NLP revolution---sort of linked to the fact that
+ the first million "trees" were curated using WSJ articles :-)
+
+- Q: Have you considered support for conlangs, such as Toki Pona?  The
+ simplicity of Toki Pona seems like it would lend itself well to
+ machine processing.
+ - A:  This is the first time I hearing of conlangs and Toki Pona.
+ I would love to know more about them to say more, but I cannot
+ imaging any langauge not being able to use this framework.
+ - conlangs are "constructed languages" such as Esperanto ---
+ languages designed with intent, rather than evolved over
+ centuries.  Toki Pona is a minimal conlang created in 2001, with
+ a uniform syntax and small (<200 word) vocabulary.
+ - Thanks for the information! I would love to look into it.
+
+- Q: Is there a roadmap of sorts for GRAIL?
+ - A: 
+ - Yes. I am now actually using real world annotations on larg
+ corpora---both text and speech and am validating the concept
+ further. I am sure there will be some bumps in the way, and I am
+ not saying that this is going to be a cure-all, but I feel
+ (after spending most of my professional life building/using
+ corpora) that this approach does seem very appealing to me. The
+ speed of its development will depend on how many buy into the
+ idea and pitch in, I guess.
+
+- Q: How can GRAIL be used by common people?
+ - A: I don't think it can be used by common people at the very
+ moment---partly because most "common man" has never heard of
+ emacs or org-mode. But if we can valide the concept and if it
+ does "grow legs" and walk out of the emacs room into the
+ larger universe, then absolutely, anyone who can have any say
+ about langauge could use it. And the contributions would be as
+ useful as the consistency with which one can capture a certain
+ phenomena.
+ - .
+ - Everytime you use a capta these days, the algorithms used by the
+ company storing the data get slightly better. What if we could
+ democratize this concept. That could lead to fascinating things.
+ Like Wikipedia did for the sum total of human knowledge.
+
+- Q: 
+ - A: 
+
+
+
+
+[[!inline pages="internal(2022/info/grail-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/grail-nav)" raw="yes"]]
+
+[[!taglink CategoryLinguistics]]
diff --git a/2022/talks/handwritten.md b/2022/talks/handwritten.md
new file mode 100644
index 00000000..962ec4ca
--- /dev/null
+++ b/2022/talks/handwritten.md
@@ -0,0 +1,138 @@
+[[!sidebar content=""]]
+[[!meta title="How to incorporate handwritten notes into Emacs Orgmode"]]
+[[!meta copyright="Copyright &copy; 2022 Bala Ramadurai"]]
+[[!inline pages="internal(2022/info/handwritten-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+[[!img /i/2022-handwritten-title.png alt="title" size="600x"]]
+
+# How to incorporate handwritten notes into Emacs Orgmode
+Bala Ramadurai (his/him, <mailto:bala@balaramadurai.net>)
+
+[[!inline pages="internal(2022/info/handwritten-before)" raw="yes"]]
+
+
+[[!img /i/2022-handwritten-abstract.png alt="title" style="max-width: 100%; height: auto"]]
+
+Research suggests that note taking is most effective when done by hand. Yes, handwritten notes. Certainly, typewritten or typed out notes are more efficient, however notes written by hand are retained by the human brain much longer.
+
+Integrating handwritten notes into a computer leaned productivity workflow is tricky. Also, in terms of hardware, if all you have is a smartphone, then we need to deal with the situation a bit differently.
+
+This talk will introduce to you a simple system to integrate handwritten notes into your org-mode (Emacs) based productivity workflow.
+
+- Gist of the problem of dealing with handwritten notes
+- Advantages of handwritten notes
+- Emacs org mode workflow
+ - Option 1: Hardware for handwriting not available
+ - Option 2: Hardware for handwriting available
+
+
+# Discussion
+
+## Notes
+
+- Tesseract is a free and open source tool to do OCR (may or may not
+ convert handwriting)
+ - <https://github.com/tesseract-ocr/tesseract>
+- Karl Voit: I'm not practicing handwritten OCR at the moment. From
+ what I've read, offline handwriting OCR (offline OCR = not
+ recognizing while writing but form a (scanned) document) is only
+ implemented in a good way in highly proprietary services such as
+ Microsoft OneNote and Evernote and Apple Notes. Since I don't use
+ those services on purpose
+ (<https://karl-voit.at/2018/04/21/end-of-OneNote/>), I don't have
+ personal experience. I'm still hoping that there will be a FOSS
+ solution one fine day.
+ - I'm (rarely) taking notes on my BOOX Note Air e-ink tablet
+ (which I love). It has decent on-device offline-OCR but it's
+ really tedious to use it. So usually, I keep the notes as PDF
+ file and don't care to OCR it. Not great but at the moment I
+ can live with it.
+ - After all: I'm much faster when typing on my keyboard
+ (<https://karl-voit.at/2021/03/21/advantage2-plans/>) - so if
+ there is no graphical information to be captured, I'm faster
+ typing in Org mode than writing by hand.
+ - Do you have a blog article about that? I own a BOOX Air myself but I can't think of a viable workflow using it with handwriting + OCR on-device.
+- <https://capture2text.sourceforge.net/> \-- another potential OCR
+ solution that is FOSS, but supported only on Windows OS
+- mathpix seems to support OCR now as well:
+ - <https://mathpix.com/blog/mathpix-text-ocr>
+ - <https://mathpix.com/handwriting-recognition>
+- Leo Vivier owns an e-ink tablet: Boox Max Lumi (almost A4-size,
+ bigger brother of Boox Note Air)
+- Digital pens and digitizing platforms help to get your notes from
+ analogue into digital form: 
+ - <https://www.wired.com/gallery/best-smart-pens/>
+ - Also, livescript uses special pens and tablets (erasable and
+ correctable), transcribes your handwriting
+
+- [LiveScribe](https://www.amazon.com/Livescribe-Single-Subject-Notebook-4-pack/dp/B001AALJ1I/ref=asc\_df\_B001AALJ1I/?tag=hyprod-20&linkCode=df0&hvadid=167151358503&hvpos=&hvnetw=g&hvrand=14286771041209503377&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9027973&hvtargid=pla-359920653567&psc=1)
+
+- I always love the way Bala records his talks :D
+- i read every word
+- Apple notes scanning is working very well these days.
+- OneNote is super locked-in these days.
+- Thank you Prof!
+- Lol @ just type out the damn note XD. It's a good point, but I have over a year of handwritten notes that I haven't bothered typing out ;-)
+- I have had some success with tesseract and my handwritten notes
+- has anyone training such a OCR system to make it more accurate for your handwriting or additional symbols.
+- shh I've been using Google Cloud Vision to get the text out of my sketches =)
+- wow what a refined video. really solid editing. this is enjoyable to watch
+- would it be better to use OCR or to read the notes and use speech-to-text?
+- Does it work well with free software, klavul
+- hmh, there seems to be plugin to integrate orgmode with xournalpp ( https://gitlab.com/vherrmann/org-xournalpp )
+- I use capture2text , made a small wrapper
+- Would it be possible to make a libre software which could detect handwritten notes as does the Boogie Board and run Emacs on it?
+ - other: people with short-term requirements and who don't care are using great OCR with cloud-based lock-in services. Therefore, there isn't much incentive to create FOSS.
+
+## Questions and answers
+
+- Q: How do you link the notes together so that you could search
+ through them in the future?
+ - A: I'm still in the process of trying to link these topics. Once you convert these notes from handwritten text --or if you have a handwriting device and you can convert it into text-- import it into org-roam and link it the way that you'd normally do it. I started a week ago linking these texts. That would be my response-- which leads into the next question...
+- Q: Is it necessary to OCR your handwriting or change the way you
+ write to use your workflow? 
+ - A: Yes, this is a necessary step. You have to conduct optical character recognition. Because otherwise, indexing and linking becomes a problem later on. If it's just for you and reading your own text and you browse it and read it when you want, then that's different. You don't have to worry about the OCR-- just import the jpeg or png or whatever and put it under the org-mode or org-roam headline and you should be good to go.
+ However, if you want to search and link then OCR becomes necessary. I'm unfamiliar with anything inside the emacs ecosystem that does OCR. I use tools like OneNote and I think Google Keep does that. I use an external tool to convert if you want linking and indexing. For me sometimes screenshots and handwritten notes have to go together. The key is to have those together.
+- Q: What about Searching notes, notes to text while being offline
+ - A: Yes, there are no two ways about it. Only proprietary software like Google Keep and Microsoft, perhaps Dropbox does it. I would say it's absolutely mandatory for you to convert this... unless the emacs org mode community puts their heads together. If you want me to help by reviewing a package I am keen on doing that and trying it out.
+ OneNote can search with OCR, as far as Bala is aware.
+- Q: Those articles on notetaking seem interesting. Could we get a link
+ for them?
+ - A: I will definitely drop a link in the etherpad after the talk to make it available. A good friend in France shared this with me. He had a whole bunch of articles that supported my thesis. (an email was sent with a follow-up request on 10 December)
+- Q: Have you looked at taking handwritten notes on a tablet like
+ Xournal++
+ - A: [Not yet] The only tools I've used have been OneNote and Google keep. For now, the dropbox method for me is to write the notes, then take a photo with a mobile phone camera, upload it to dropbox-- why dropbox-- because it allows jpeg to be uploaded. I find pdf very cumbersome. I then import it into OneNote which converts it into digitized text. Then I take and move it from the inbox into the org mode system. That's how my workflow is. I have started to experiment with other devices and workflows, but not enough to give you intelligent advice.
+ Q: Have you tried out the "Remarkable" device and figured out how to link the files back into org mode constructively yet?
+ - A: Yes, I've heard of that device as well as Book and Amazon has come out with the writing Kindle. These devices do exist, but I'm not sure if they convert to text and put it in a format you can import into org mode. This would be nice, if you can integrate it into emacs. I use dropbox to do all the good stuff. I can certainly do that.
+- Q: Something to think about is handwritten and org transcribed notes
+ de-duplication for searching, do you want one or the other, both?
+ - A: Thank you for asking this. Transcription has become very important not only transcribing written but voice notes. In spite of so many tools out there, I find it extremely cumbersome to transcribe voice notes. It would be nice if we had voice, and handwritten transcription helps. Actually that's a great idea. I would be very interested in voice and handwriting. I've seen this in software in OneNote and transcription packages. This is really important and a great idea. I volunteer to test this out. Right now I find it very difficult to transcribe, so if this can do it for us that would be amazing.
+ - side note: org-remark could be useful for this
+ <https://github.com/nobiot/org-remark>
+- Q: How fancy have your imports of handwritten notes been for org mode?
+ (Bullets, TODO , org tables etc...)
+ - A: Bala uses a star on paper when writing tasks and makes
+ them into org tasks during manual transcription. He also uses dates for this. I know then that I need to keep track of those things in a task. It would be really cool to OCR org constructs from paper. TODO items etc. Doing away with all of the intermediate steps would be nice. A writing org-mode as if it was a human language instead of something that is restricted to a computer.
+ - Just to glorify handwriting. I decided that I would hand write what I was going to talk about. The handwritten notes turned out much better than my plain vanilla talk. I even wrote some jokes this way. Handwriting helps thinking and speaking with an audience. Computers have led to handwriting being less important, but Bala thinks
+ they're very efficient and important :)
+- Q: How often do you instead use keyboard entry to type in and
+ summarize your notes? Would you consider that a suitable approach
+ for yourself, e.g. at the end of the day?
+ - A: When in a hurry, Bala types notes directly into Org Mode.
+ - He has not yet established a habit of daily journaling but
+ would like to do so in the future. I have a shortcut for org-roam dailies that shows up in blue text on the calendar. Daily writing would be helpful.
+ - Handwriting can be easier depending on language/script.
+ Perhaps handwriting is best for non-Roman script. My mother tongue has a script that is not English.
+- Q: Do you have any ideas about mindmapping and incorporating those notes into your process? I've used nebo and other tools, but wish I had a better way of extracting key words.
+ - A: I have used mindmapping which is hierarchical, in fact I use something called function maps. Just like org-roam and interacting relationships. All of this I've been drawing on my laptop screen. All of this helps me. I don't digitally convert it. It helps me and is a lot easier. When I need to add to it I can do so. I find that doing it on a device and retaining it without conversion is best. Converting does not help me at all. YOu can select it, with a lasso select. Those things can be done. I like it to be that way. Then I link it into org mode.
+- Q: Bala, sorry to join late to the party, you might have answer. Do you train your own OCR?
+
+
+[[!inline pages="internal(2022/info/handwritten-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/handwritten-nav)" raw="yes"]]
+
+ [[!taglink CategoryOrgMode]]
diff --git a/2022/talks/haskell.md b/2022/talks/haskell.md
new file mode 100644
index 00000000..c5307788
--- /dev/null
+++ b/2022/talks/haskell.md
@@ -0,0 +1,45 @@
+[[!sidebar content=""]]
+[[!meta title="Haskell code exploration with Emacs"]]
+[[!meta copyright="Copyright &copy; 2022 Yuchen Pei"]]
+[[!inline pages="internal(2022/info/haskell-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Haskell code exploration with Emacs
+Yuchen Pei (he/him/himself/his/his, IRC: dragestil, <mailto:id@ypei.org>)
+
+[[!inline pages="internal(2022/info/haskell-before)" raw="yes"]]
+
+
+In this talk I will describe and demonstrate some tools for Haskell
+development using Emacs, including code exploration using hcel and
+haddock org documentation generation using haddorg.
+
+# Bio
+
+Yuchen is a programmer and mathematician. He co-maintains [librejs](https://www.gnu.org/software/librejs/index.html) and
+[h-node.org](https://h-node.org), and a couple of Emacs packages at GNU ELPA. He is also a
+licensing volunteer with the FSF. In his personal time, he likes to
+program in Haskell and elisp and license all of his programming work
+under AGPLv3+ (see <https://g.ypei.me>). He can be reached at
+<id@ypei.org>.
+# Discussion
+
+## Notes
+
+- <https://gitlab.com/tseenshe/haskell-tng.el>
+- <https://gitlab.com/tseenshe/hsinspect>
+
+## Questions and answers
+
+- Q:Is the indexing faster when re-indexing? Would it be too slow to
+ re-index on-demand?
+
+
+[[!inline pages="internal(2022/info/haskell-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/haskell-nav)" raw="yes"]]
+
+[[!taglink CategoryCoding]]
diff --git a/2022/talks/health.md b/2022/talks/health.md
new file mode 100644
index 00000000..230e3682
--- /dev/null
+++ b/2022/talks/health.md
@@ -0,0 +1,105 @@
+[[!sidebar content=""]]
+[[!meta title="Health data journaling and visualization with Org Mode and gnuplot"]]
+[[!meta copyright="Copyright &copy; 2022 David O'Toole"]]
+[[!inline pages="internal(2022/info/health-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Health data journaling and visualization with Org Mode and gnuplot
+David O'Toole (he/him, <https://emacs.ch/@dto>)
+
+[[!inline pages="internal(2022/info/health-before)" raw="yes"]]
+
+
+**Note: The correct name of gnuplot is gnuplot, not GNUplot. It is not GNU software, nor is it licensed under a GNU license. [Details](http://gnuplot.info/faq/index.html#x1-70001.2)**
+
+"GNU Emacs with Org Mode and gnuplot offer a complete Free Software
+solution for tracking health information based on a daily data
+journal. With Org capture templates and data tables, you can easily
+enter facts for each day such as hours of sleep, minutes of exercise,
+doses of medication, weight, or even add freeform notes. Through the
+use of subjective numeric scores you can track symptoms like stress,
+anxiety, or pain. Org Mode's gnuplot support enables you to visualize
+the data in order to spot correlations and evaluate trends. The use of
+detailed record-keeping and graphing can help you communicate with
+health care providers."
+
+A reusable org template will be provided at:
+<https://gitlab.com/dto/health-template>
+
+
+# Discussion
+
+## Notes
+
+- I agree that just tracking is a great thing. I heard of some people starting to lose weight, just because they started recording it daily.
+- just Thank you very much
+- I like this demo of plotting use
+- Damn, this template looks awesome, nice work
+- (incf eieio-reputation)
+- huh, I could probably use that thing that shows a line for other sexps at the same level...
+ - Yeah, that looks super handy!
+ - A: yeah it's cool. i think it's called indent-guide
+- very good talk!!!
+- emacs is like willy wonkas candy factory
+- thanks for the talk; was thinking that you could use a mobile app like BeOrg and cloud file sync to help automate your data entry
+ - hmm i haven't heard of BeOrg i'll have to look it up!
+
+## Questions and answers
+
+- Q: do you use this just for yourself? Or do you use this to
+ discuss/show with doctors/health professionals? 
+ - A:
+- Q:How do you input the health data? semi automated with org mode
+ capture templets?, copy paste, Automated with a smart watch and
+ ifttt or tasker in an org mode document to automatily add stuff like
+ sleeping data? and which parts are and are not automated, semi
+ automated or manual.
+ - A:All manually
+- Q:How do you track the various health statistics that you are
+ gathering?
+ - A:Manaully for example for sleeping I look at the clock before
+ and after I go to sleep.
+- Q: It's possible to download data from the apple watch's health
+ app. Is it easy enough to incorporate those .csv files into your
+ implementation of Gnuplot? 
+ - A:You can import csv to org. Just copy paste the csv data to
+ org, highlight it and press C-c | (the function is
+ org-table-create-or-convert-from-region)
+- Q: Regarding the medication tracking you only have option to record
+ missed or not. If one needs to take multiple medication throughout
+ the day, how would you propose to track that? Within gnuplot or
+ separate?
+ - A:
+- Q:How's the workflow when working on the gnuplot code -- can you
+ e.g. C-c C-c and the svg output on the right is updated
+ automatically?
+ - A:Use auto-revert-tail-mode in the buffer that displays the svg,
+ then it will update automatically
+- Q: How much time does it take to process the amount of data that you
+ add inside GNU Emacs?
+ - A: some seconds (no issues to manage that inside the editor)
+- Q: will indent-guide behave well with yaml files for helm?
+ - A: 
+- Q: Have you noticed your behaviour changing as a result of tracking
+ your data?
+ - A: Yes, definitively and in a good way
+- Q: did you not have exercise data for the final period of bad sleep,
+ or was it the case that you did not exercise? This question tells me
+ that you want to symbolically represent missing data differently
+ from "0". And, if the answer is "no exercise", then it is
+ possible that this is a factor in your lack of sleep, it's not
+ necessarily the withdrawal from nicotine. As always, use caution
+ when drawing up causal links from correlation. Recommended in this
+ context - "The book of why", by Judea Pearl.
+ - A: 
+
+
+
+[[!inline pages="internal(2022/info/health-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/health-nav)" raw="yes"]]
+
+[[!taglink CategoryOrgMode]]
diff --git a/2022/talks/hyperorg.md b/2022/talks/hyperorg.md
new file mode 100644
index 00000000..ccfed5a5
--- /dev/null
+++ b/2022/talks/hyperorg.md
@@ -0,0 +1,160 @@
+[[!sidebar content=""]]
+[[!meta title="Powerful productivity with Hyperbole and Org Mode"]]
+[[!meta copyright="Copyright &copy; 2022 Robert Weiner"]]
+[[!inline pages="internal(2022/info/hyperorg-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Powerful productivity with Hyperbole and Org Mode
+Robert Weiner (wine-er)
+
+[[!template id="help"
+summary="main talk does not have captions"
+tags="help_with_main_captions"
+message="""This talk does not have captions yet.
+Would you like to help [caption this talk](/captioning)?
+You may be able to start with these [autogenerated captions](/2022/captions/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt)."""]]
+
+GNU Hyperbole and Org Mode are both parts of Emacs;
+both offer outlining and hypertext support but Org uses its own
+native format while Hyperbole can work across all major modes and
+data formats, including Org's. The two systems are compatible.
+This talk will show ways to use them together and the resultant
+productivity benefits that can be achieved.
+
+Outline:
+
+a. Context-sensitive Action Key on Org Constructs
+b. Automate Actions in Org Mode with Hyperbole Key Series
+c. Rapidly Link to or from Org Headers, e.g. in Source Code
+d. Search over Org Notes with Hyperbole's HyRolo
+e. Dynamically Expand/Contract Org outlines exported to web pages
+f. Embed Org Tables in Hyperbole Koutlines
+g. Create Your Own Hyperbole Implicit Buttons from Org
+h. Hyperbole Expands Org Mode to an Emacs-wide Persistant Hyperbutton-Action Capability on Any Textual Format
+
+
+# Discussion
+
+## Notes
+
+- Sorry a few pixels at the left of the screen are cut off due to how
+ it was recorded but it should not affect the bulk of the information
+ you'll see.  We'll also make the Org document driving the
+ presentation available for offline review.
+
+## Questions and answers
+
+- Q: Can you have multiple implicit button files, if so how would you
+ know which link came from what files?
+ - A: Links are one way at the present time, so you just place them
+ where they are needed and activate them.  Things like HyRolo can
+ be used to locate matching elements across multiple files.
+- Q: What about using implicit buttons with multiple people with
+ different configs?
+ - A:As mentioned in the talk, environment and Lisp variables
+ embedded in path links allow for sharing links whose location
+ varies by user/team.  In other cases you often want team members
+ to see the same result as someone else sees when a button is
+ activated.
+- Q: Coming in from Org/Org-mode, would it be a fair assessment that
+ Hyperbole is in some way a *generalization* of what most people
+ think of the great features of Org to work across formats (i.e. not
+ just in Org buffers, though *also* therein), with the Hyperbole
+ links/buttons being the recurring example? And that it then further
+ adds some capabilities (again across formats and thus including in
+ Org buffers). Being a global minor mode (vs a major mode and thus
+ coupled to a particular format namely org) is interesting per se,
+ and I think goes to RMS's talk that Org's features could be more
+ generalized and modularized. How is Hyperbole in that respect?
+ - A:Org, I believe, is focused on being an interactive notebook
+ and publishing tool notably for scientists or academics, even
+ though it is used by other technical people.  Hyperbole is for
+ creating a hyperverse filled with many types of text files and
+ interlinking them while maintaining their native formats; it
+ does little with conversion to formats for publication, aside
+ from export of Koutlines to HTML for use on the web.
+- Q: Internal/Radio targets: are they able to link to other Org mode
+ files (that are part of my agenda)? Background: <<<example
+ target>>> (default Org mode feature) is great for glossary and so
+ forth but only works within a single Org mode file.
+ - A: You could develop an implicit button type that would link
+ from an external file to a radio target in another file.  These
+ usually are just a few lines of code.
+- Q: Your package advances how useful a mouse can be with creating
+ links, do you have any experiance or thoughts about how
+ touchscreens, or mice could be used or improved with emacs..
+ - A: I place the Action Mouse Key on my middle mouse button and
+ the Assist Mouse Key on my right mouse button because I find
+ them that useful.  The existing drag capabilities of the mouse
+ are similar to actions we would have for a touchscreen
+ interface.
+- Q: Would you consider Hyperbole to be more of a format spec that can
+ then be handled however we want? Or the engine itself along with
+ that format? i.e. can the simple link formats be used for other
+ extensible purposes?
+ - A: yes, hyperbole was thoughts a s an hypertxt engine and then
+ be avail. to multiple apps (as API). turns out didnt work really
+ well
+- Q: How is the integration with org-roam?
+ - A: We are just beginning to work with org-roam and will likely
+ add a Hyperbole interface to it across time.  We are also
+ looking at related tools and how
+- Q: When doing something where do you determine where to put it
+ 'kotl, rolo, org".? I like kotl for journaling and org mode for
+ gtd.:)
+ - A: sure, they're both outlined formats and they work well.
+ depends on your taste
+- Q:Would you recommend a specific resource for getting into
+ Hyperbole, or should I just start with the manual? Definitely
+ interested in getting into this. (oh I love interactive demo style
+ formats, great!)
+ - A: dont start with the manual! :) for learning use the menu
+ system C-h-d-d and watch the interactive demo. Then watch one of
+ the tutorial videos (mentioned before)
+- Q: What is hyperorg?
+ - A: probably a typo for hyperborg
+ - sachac: I had to come up with IDs for all the talks, that was just the one I made up for this one
+- Q:Do you have advice for people who'd like to try using Hyperbole
+ with Org, but don't want to pollute Org files with inline Hyperbole
+ links (e.g., with files that will be published)? (...Or is that
+ inevitably the point of Hyperbole links?)
+ - A:
+- Q: How is the integration with org-roam?
+
+## Other discussions from IRC
+
+- I like the use of the term "cognitive overhead"
+- I really need to spend more time digging into Hyperbole. So far I only use it to open urls in the browser :D
+- These hyperbole talks are making me want to try
+- The issue I've got is that plain org-mode can deal with probably 50% of the use-cases of Hyperbole and the other 50% are not that important to me (yet). ...
+- Interesting idea: "Hyperbole golf" - somebody suggest something that should be accomplished. I'm doing it with my Org mode setup and the other person does it with Hyperbole. I'm sure that Hyperbole may be more elegant but so far, I didn't see anything that I can't do with my setup as well.
+- I would love to see a table comparing how to do things with Org and with Hyperbole with examples, with eev, zk, org brain. There are a lot of these type of packages
+- no problem. However, some things are non-standard org mode because they depend on my personal setup such as file links which I do use without path.
+- Notice how there is so little to Hyperbole buttons embedded in the buffer, so it doesn't break your flow when reading the text, e.g. if you just open the file without a structured viewer.
+- would it be easy to add a section to the table saying "to run these examples in Org you need to run this first?"
+- I understand eev even less than hyperbole somehow, so having a matrix of the 3 would do wonders for me.
+- i suppose another aspect to consider with hyperbole is that it can work outside org mode as well?
+- assist key == escape key
+- btw, people can download a .zip with all the videos by Rainer Koening from here: http://angg.twu.net/eev-wconfig.html#learn-org
+- That grid popup is really cool
+- Gosh it's time to check out hyperbole.
+- there's sooo much I want to check after this conference
+- There is not enough time for all of these
+- Action Key = {M-RET}; Assist Key = {C-u M-RET} though you can bind them as you like.
+- for action key and action key assist a good idea would be use a mouse that has extra buttons for those
+- I just installed hyperbole and I think it just works.
+- Awesome demo, thanks!
+- Thanks rswgnu! Great exposition, I'm much further along on my way towards Hyperbole enlightenment that's for sure.
+- Awesome talk, definitely planning to try out Hyperbole
+- Intense but too much information for just a Hyperbole newbie
+- I will have to watch your talk 3 or 4 times...too much directly to the vein!
+ - A: Thanks. That was the idea, to expose people to new things rapidly just to encourage interest. Install Hyperbole and you can learn at your own pace.
+
+[[!inline pages="internal(2022/info/hyperorg-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/hyperorg-nav)" raw="yes"]]
+
+[[!taglink CategoryHyperbole]]
diff --git a/2022/talks/indieweb.md b/2022/talks/indieweb.md
new file mode 100644
index 00000000..4c9b1ab6
--- /dev/null
+++ b/2022/talks/indieweb.md
@@ -0,0 +1,132 @@
+[[!sidebar content=""]]
+[[!meta title="Putting Org Mode on the Indieweb"]]
+[[!meta copyright="Copyright &copy; 2022 Michael Herstine"]]
+[[!inline pages="internal(2022/info/indieweb-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Putting Org Mode on the Indieweb
+Michael Herstine (IRC: sp1ff)
+
+[[!inline pages="internal(2022/info/indieweb-before)" raw="yes"]]
+
+
+# Table of Contents
+
+
+
+Many of us maintain personal websites using Org Mode. While an
+Org-generated static site has advantages over full-blown Content
+Management Systems, its simplicity comes with costs such as fewer
+features. The first feature I missed was supporting comments on my
+site, but I quickly began to feel isolated on the web altogether.
+
+Enter the Indieweb: the Indieweb is a collection of protocols for
+connecting to other independent sites, pushing your content to social
+media sites, collecting likes, comments & responses from other sites
+<span class="underline">back</span> to yours, and many other things as well.
+
+In this talk, I'll briefly sketch out the dilemma of the independent
+web site & how the Indieweb tries to address it. The focus, however,
+will be on how Emacs, Org Mode, and a few Unix tools suffice to get
+your static Org Mode site onto the Indieweb.
+
+
+(Update July 2023) I've created a simple site demonstrating how
+to use the package [here](https://indie-org.sh/). The source for
+the site is on [Github](https://github.com/sp1ff/indie-org.sh)
+for anyone to see or tinker with.
+
+
+Michael is a developer and long-time Emacs user from the San Francisco
+Bay area. He hacks in C++, Lisp & Rust and thinks a lot about writing
+provably correct code. You can find him at:
+
+ - his [home page](https://www.unwoundstack.com)
+ - on IRC: sp1ff on Libera.Chat
+ - through [e-mail](mailto:sp1ff@pobox.com)
+ - or on [Github](https://github.com/sp1ff)
+
+# Discussion
+
+## Notes
+
+- Thanks for a great talk - this was the missing piece in the puzzle
+ of the website I'm tinkering with!
+ - I'm so happy to hear that!
+- Similar: <http://www.by-star.net/> and
+ <http://www.by-star.net/content/generated/doc.free/bystar/PLPC/180038/current/accessPage>
+
+## Questions and answers
+
+- Q: Have you wu. This allows you to make a login that you own or at
+ least is more open souree and ownable. Seems to fit in with indie
+ web
+ - A: No but I will check it out later
+- Q: How did you create the graphical drill-down representation of the
+ make call? Is it hand-written and scanned in?
+ - A: LOL... I started with a diagram I made at
+ <https://excalidraw.com/>. The initial diagram was the complete
+ flow. Exported that to Gimp & made the intermediate slides there
+- Q: what happens when you re-publish or re-export the same post? i.e.
+ will the webmention be sent out repeatedly?
+ - A: You could do that but it would annoy the recipient. The
+ system is smart enough not to re-send the mentions.
+- Q: An advantage I see to using org mode for the indieweb  for this
+ is you can use it for your notes "org roam for example" and org
+ mode no-export for private data you don't want ot share. Your
+ webmentions could be org files as notes.. Anything else good about
+ using org mode for this.
+ - A:
+- Q:  Any thoughts on using with with Ox-Hugo?
+ - A: No. So far, I was following an Emacs/Org mode OOTB (out of
+ the box) approach and pushing emacs as far as I could take it
+- Q: So, is this a Web3 approach? Web 1 = static sites Web 2 =
+ interactive sites- but centralized
+ - A: Indieweb is about reclaiming your data. It's a distibuted
+ approach.
+ - Annotation Karl: some people started the term Web0 for similar,
+ decentralized approaches. ;-)
+ - Annotation Karl: Web3 is supposed to be something really strange
+ with Blockchains and this is definitely nothing like that Web3
+ (which will be a dead bubble in a few months IMHO)
+ - Here's the link: Do you see this as a format for annotations
+ specifically, or something more general that can be used for
+ interlinear glosses, etc?
+- Q: Is there a workflow to use emacs to publish and connect directly
+ to target websites instead of telegraph?
+ - A: If you want to cut telegraph cut out of the equation, you'll
+ need more work on the client-side. "What if they're down?"
+ ... 
+- Q: Do you have to have a process running on the web server to
+ recieve requests?
+ - A: Nope-- just a cron job
+- Q: I think perhaps you are doing too much inside of emacs?
+ - A: When I started, I thought that I was so close with the OOTB
+ (out of the box) features. 
+- Q: Say you start out using webmentions-as-a-service (webmention.io,
+ telegraph.p3k.io) and then you want to chnge endpoint, whether to a
+ different service, or to your own new server with a CGI script or
+ something. Will that work smoothly, do you think, or will there be
+ mentions piling up at your old address?
+ - A: Should be fine, unless your senders are doing something very
+ odd
+- Q:Have you seen <https://github.com/AgregoreWeb/agregore-browser> It
+ is a decentrilized kiss browser. Using some of the peer to peer
+ protocols used whithin this could be useful for propgating stuff
+ like webmentions.
+ - A: No, I haven't (but I will soon!).
+
+## Other discussions from IRC
+
+- I think perhaps you are doing too much inside of emacs.
+ - mohsen: Somethings are better done outside of emacs. I have built something similar at http://www.by-star.net/PLPC/180038 and also please see http://www.by-star.net
+
+
+[[!inline pages="internal(2022/info/indieweb-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/indieweb-nav)" raw="yes"]]
+
+[[!taglink CategoryOrgMode]]
diff --git a/2022/talks/journalism.md b/2022/talks/journalism.md
new file mode 100644
index 00000000..2ca1f2fd
--- /dev/null
+++ b/2022/talks/journalism.md
@@ -0,0 +1,208 @@
+[[!sidebar content=""]]
+[[!meta title="Emacs journalism (or everything's a nail if you hit it with Emacs)"]]
+[[!meta copyright="Copyright &copy; 2022 Alfred Zanini"]]
+[[!inline pages="internal(2022/info/journalism-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs journalism (or everything's a nail if you hit it with Emacs)
+Alfred Zanini (he/they)
+
+[[!inline pages="internal(2022/info/journalism-before)" raw="yes"]]
+
+
+# PART I - Where I started
+
+
+## Figuring out what you want out of your workflow
+
+For me, that is:
+
+- note-taking and todos for admin and work tasks
+- project management - setting up deadlines for each task and reminders to check in with people
+- a writing environment when I need to focus on script work
+- a way to experiment with coding and integrating that into my work
+- storyboarding different scenes
+- scheduling interviews and reachouts for interviews
+
+
+## Presentation of my previous workflow
+
+Using google drive, word, storyboarder, wechat, notion
+
+
+# Part II - Where I ended up
+
+
+## Why Emacs ?
+
+
+## Org-Contacts
+
+Setting up Org-Contacts to track documentary leads and keep up with them -
+also in use for personal contacts
+
+
+## ORG Roam
+
+Using Org-Roam to link project ideas and leads, and add summaries of interviews
+/ transcripts to contact files. Org-Mode and Org-Contacts to schedule interviews,
+reaching out, check-ins. All the while writing the script for the project on the
+Org-Roam page, with global project questions and specific interview questions
+for each scheduled shoot.
+
+
+## PANDOC and working with colleagues
+
+Once my first draft of the script is ready, I need to be able to share it for review.
+This is where the "Everything's a nail when you hit it with emacs" part comes
+in. Using Org-Mode for comments and for coloring with HTML tags and source
+blocks Not the easiest nor the most fun way to collaborate, but it is where I
+have ended up on.
+
+
+## Other packages I use regularly for a documentary workflow
+
+Mu4e Fountain.el hledger-mode bibtex for research papers present
+
+
+# Conclusions
+
+
+## Forever Work In Progress
+
+A lot of features to be added and kinks
+to be worked out but getting to a state where you can use software
+that you love every day is the most important point to me
+
+So let's keep modding our configs!
+
+
+# Discussion
+
+## Notes
+
+- WRT Literate programming, if you've never read Knuth's
+ Tangle/Web/Weave stuff, it's worth knowing about
+- Using the Calendar in conjunction with task managment and email show
+ off the power off the holistic workflow of Emacs
+- CRDT-- an easy way to work with other people in emacs --
+ <https://code.librehq.com/qhong/crdt.el>
+- Yes, liberal arts types.
+- I relate with so much of this talk so far :-P
+- I didn't know about :ignore: for org-mode headings. Is that set up by default?
+- I also use COMMENT as a todo and it is ignored too.
+- Ahhhhh. Good call. I use TODO in headings when I'm writing to remind me to finish sections later.
+- Yeah, I use :noexport: in pretty much every doc for all of my notes and throwaway scratch writing and stuff.
+- Huh, CRDT sounds interesting.
+- I export docs to Markdown, but I also use pandoc to generate DOCX files from org. Because most writers aren't using Emacs.
+- Thanks, I'll check that out. The writers and editors that I'm working with are frequestly looking for ways to handle change tracking and version tracking for docs. I recommend stuff like git but they need something that's easier for non-techie folks to use.
+- Feedback
+ - Great talk!
+ - Well done!
+ - flipping great stuff. Thanks!!!!!!
+
+## Questions and answers
+
+- Q: It'd be interesting if you explained why WeChat is a necessity
+ for you; outside China, most people have no reason to use it at
+ all.  Thanks.
+ - A: I think he meant Weechat (the IRC client) not WeChat --
+ Chinese exigency 
+ - The captioning did mention WeChat.  If he lives in Hong Kong,
+ then I totally understand, so consider this question answered.
+ - Oh nvm then
+ - Yeah, you've (Alfred) gotten WeChat spot on.  Most people here
+ don't care much, but I'm probably one of the only people in
+ this country not using WeChat, and it's a major PITA to live
+ without.
+- Q:Have you looked at CRDT.el for collaborative realtime editing?
+ - A: most of my work is just versions
+ - CRDT has great org mode support for task managent
+ - CRDT
+ - <https://code.librehq.com/qhong/crdt.el/>
+ - <https://elpa.gnu.org/packages/crdt.html>
+ - related:
+ <https://www.emacswiki.org/emacs/CollaborativeEditing>
+- Q:Sharing orgmode files is trickier than we expect. Do you do this?
+ If yes, how do you do it?
+ - A: Direct sharing was not successful. Exporting to docx or ODT
+ is problematic (Latex structure). 
+ - has tried github and gitlab, but that might require signups - is
+ also suboptimal
+ - Export profiles for ODT or DOCX is a better approach, or at
+ least worked well so far
+ - Karl Voit's notes on collaborative working with non-Org users:
+ - - <http://irreal.org/blog/?p=6234>
+ -   -
+ <https://www.wisdomandwonder.com/link/9922/how-to-reintegrate-changes-for-word-back-into-org-mode>
+ -   - Export to docx via pandoc and re-import via =pandoc
+ --track-changes=all=
+ -     : pandoc --track-changes=all Document.docx
+ Compare_to_original.org
+ - -
+ <https://www.reddit.com/r/emacs/comments/ad43hf/question_how_do_you_manage_tasks_calendars_with/>
+ - - <https://github.com/200ok-ch/organice>: an implementation
+ of Org mode without the dependency of Emacs. It is built for
+ mobile and desktop browsers and syncs with Dropbox, Google
+ Drive and WebDAV.
+ - - [2021-06-08 Tue]
+ <https://www.reddit.com/r/orgmode/comments/nuit8u/coordinating_with_people_who_dont_use_emacs_or/>
+ → discussion
+ - Karl Voit's notes on collaborative working with Emacs users:
+ - - 2020-05-29
+ <https://gitlab.com/emacsomancer/collaborative-writing-environment-emacs>
+ -   - special emacs setup that allows collaboration on the
+ same LAN
+ -   - needs separate emacs config (different host or user or
+ move config out of the way)
+ -   - [ ] try it out myself
+ - - [2020-08-31 Mon] <http://typeintandem.com/> +
+ <https://github.com/jscheid/tandem-emacs>
+ -   - unmaintained:
+ <https://github.com/jscheid/tandem-emacs/issues/1>
+ - - [2021-11-03 Wed]
+ <https://code.librehq.com/qhong/crdt.el.git>
+ -   - via Sacha Chua's EmacsConf21 Emacs news
+- Q:Do you use pandoc for incoming and outgoing docs? Do you find that
+ repeated conversions lose document quality?
+ - A: Layouts are kind of wonky, but that's possible to work through if you go into the settings and adjust basically to how you want it to look like.
+ - And for incoming docs, so that's a bit more of a hassle. My plan for this talk was to have it a bit more ready, but I've got this integration for org-ic, org-apple-pages documents, that kind of thing. So that's often the documents that I get from my colleagues, and I found a way to transfer them into org documents. I did that kind of quickly, so I don't think I'm quite ready to share exactly how it went, but I'm planning on doing some documentation around that. But yeah, basically the gist of it is, I don't find it a huge issue.
+- Q: I am beginning on emacs (again) after falling off every time
+ because of the "working in config-files" whole day. What was your
+ moment when you really started to work in emacs instead of
+ config-editing?
+ - A: Had the click after finding text editor workflow. Don't be
+ too frustrated :-) , use templates, put ideas off to a later
+ moment. 
+ - related: <https://xkcd.com/1205/> and <https://xkcd.com/1319/>
+- Q: Why is emacs recommended for journalism? -vidianos asks
+ - A: I wouldn't say it's recommended-- a personal choice--
+ valuable as a tool-- can be tailored so that it's easy to
+ transfer skills from other disciplines-- more scientific ones
+ to journalism. Org-Roam is a game changer because it allows me
+ to set thoughts aside and know that I can get back to it. Helps
+ with self-control.
+- Q: Do you use any fancy solutions for annotation text onto
+ particular video timestamps?
+ - Clarification: Yes, asking about making notes on a video, when
+ something happens 
+ - Side Note: subd.el could be useful
+ <https://github.com/sachac/subed>
+ - A: Taking notes with org-roam and linking them to BiBTeX etc
+- Q: When you get stuck with an emacs problem-- is there somewhere you go to get help (nice place for non-tech people?)
+- Q: is it possible to use emacs bookmarks capability to literally bookmark a specific timestamp in a video clip (and by that the note taking could be done in that bookmark instance)… ?
+- Q: is Alfred australian?
+ - I suspect he's Swiss
+- Thanks, I'll check that out. The writers and editors that I'm working with are frequestly looking for ways to handle change tracking and version tracking for docs. I recommend stuff like git but they need something that's easier for non-techie folks to use.
+- I did not know about org-mpv
+- There isn't a proper org-mpv, but there are a few functions to combine mpv.el with org-mode here: https://github.com/kljohann/mpv.el/wiki
+- Alfred is a very quick learner
+
+[[!inline pages="internal(2022/info/journalism-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/journalism-nav)" raw="yes"]]
+
+[[!taglink CategoryOrgMode]] [[!taglink CategoryOrgRoam]]
diff --git a/2022/talks/jupyter.md b/2022/talks/jupyter.md
new file mode 100644
index 00000000..1a9304a9
--- /dev/null
+++ b/2022/talks/jupyter.md
@@ -0,0 +1,102 @@
+[[!sidebar content=""]]
+[[!meta title="Edit live Jupyter notebook cells with Emacs"]]
+[[!meta copyright="Copyright &copy; 2022 Blaine Mooers"]]
+[[!inline pages="internal(2022/info/jupyter-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Edit live Jupyter notebook cells with Emacs
+Blaine Mooers (Blane Moors, he/him, <mailto:Blaine-Mooers@ouhsc.edu>)
+
+[[!inline pages="internal(2022/info/jupyter-before)" raw="yes"]]
+
+My talk will address a dilemma faced daily by many technical writers and programmers.
+Like many academics, I use several web-based platforms for writing prose (e.g., 750words, Overleaf) and interactive computing (Jupyter Notebook, Google Colab Notebooks).
+The first group lacks support for snippets.
+The second group has support for snippets, but this support does not include tab triggers and tab stops.
+The absence of tab stops can increase the number of bugs by overlooking parameter values in the snippet that need to be changed to adapt the snippet to the current problem.
+One solution to the absence of full-powered snippets is to apply Emacs with yasnippets to these web-based platforms.
+
+One route to doing so is to use the atomic-chrome package for Emacs and the GhostText Extension for web browsers.
+These two software packages enable two-way communication via a web socket between an Emacs buffer and the text area of the web page.
+Edits made on the web side of the socket are immediately sent to the Emacs buffer and vice versa.
+The Emacs's snippets and other editing tools only work in the Emacs buffer.
+The connection can be closed from either side.
+This route has enabled me to apply snippets of LaTeX code to my daily writing in 750words.
+I have been able to convert 750words into a platform for writing in LaTeX; by default, it uses markdown.
+I have also been able to apply code snippets for Julia, Python, R, and so on in Jupyter notebook cells.
+In other words, I get to extend my time writing in Emacs.
+
+In my ten-minute talk, I will describe my problems with web-based platforms and their solution with Emacs.
+I will describe where to find the required software and how I configured Emacs.
+I will present several precautions for using GhostText and describe the limitations of its application.
+I will provide links to collections of snippets I found handy daily usage of 750words and Jupyter.
+
+
+# Discussion
+
+## Notes
+
+- <https://github.com/alpha22jp/atomic-chrome> atomic chrome is by
+ alpha2jp. It is available on MELPA.
+- <https://ghosttext.fregante.com/> Central website for GhostText.
+- <https://www.youtube.com/watch?v=JWW3o104npY&t=190s> Example of
+ using GhostText with Moodle to write web papes.
+- <https://github.com/MooersLab/latex-emacs> My configuration
+ targeting LaTeX in Gnu Emacs.
+- <https://github.com/MooersLab/BerlinEmacsAugust2022> Slides from a
+ 90-minute talk in August at the Berlin Emacs Meetup about using
+ LaTeX in Emacs.
+- <https://github.com/MooersLab/DSW22ghosttext> Slides to 50-minute
+ talk in July about using GhostText with Emacs and other editors.
+ Includes slides for friends that use Vim.
+- Great talk, thank you!
+- Btw, great talk Blaine!
+- I've got ghosttext and emacs via atomicchrome working now: very easy and very useful! Thank you.
+- Nice job Blaine!
+- Thank you!
+- Pretty inspring!
+
+## Questions and answers
+
+- Q: Kind of a silly question but I'm curious... Do you have a
+ favourite color theme?
+ - A: I like several themes and use different ones in different Emacs profiles to distinguish their windows if two are more are open at once. I use the leuven theme in my default config file. It resembles the ef-light theme in the ef-theme. package by Protesilaos Stavrou. I use the ef-spring theme in my latex-emacs config; it has mint green background color.
+- Q: Really interesting to discover GhostText thanks. I use ein (Emacs
+ Ipython Notebooks
+ <https://github.com/millejoh/emacs-ipython-notebook>) for running
+ notebooks locally, I can clearly see the advantage of using
+ GhostText with non-local notebooks/websites but is there anything
+ that GhostText provides over EIN when interacting with locally
+ running Jupyter Notebooks?
+ - A: Good question. I have used the juptyer package in org files, but I do not have much experience with EIN.
+ EIN has a long list of commands specific to editing Jupyter Notebooks.
+ I expect that EIN provides the more powerful approach after making the investment in learning the new keybindings.
+ GhostText was not designed specifically to edit Jupyter cells.
+- Q: To your knowledge are recent/coming security changes in Chrome
+ going to impact the browswer exstention?   Thanks !
+ - A: I do not know the answer.
+ If the secuirty changes inhibits GhostText, it should continue to work in the FireFox family of browsers and Safari.
+- Q:Is this browser-agnostic, or do you have to use Chrome? (answered
+ in talk 15:58)
+ - A: Works on different browsers
+- Q: You mentioned a couple other solutions to allow emacs editing of
+ text areas.  Pointers?
+ - Two options: (1) A: Emacs Everywhere (https://github.com/tecosaur/emacs-everywhere); however, it requires uses emacs-client.
+ (2) The above-mentioned atomic-chrome package can use the browser extension for chrome called "atomic-chrome" in place of GhostText.
+ It is called "atomic" because the extension was orginally designed to work with the text editor Atom. However, I cannot find this extension.
+- Q: Why not save text from emacs?
+ - A: The text in the file will get out of synch with the text in the Emacs buffer and the browser. This can lead to loss of all of the text. Maybe you can set up continuous saving of the text to the file from Emacs.
+- Q: What was the key binding for Linux/Firefox?
+ - A: Ctrl+Shift+h
+- Q: how long have you been in Emacs?
+ - A: 18 months ago I made the commitment to adopt GNU Emacs as my main text editor. I had several false starts earlier. I was too impatient to master one of the starter kits.
+
+
+[[!inline pages="internal(2022/info/jupyter-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/jupyter-nav)" raw="yes"]]
+
+[[!taglink CategoryOrgMode]]
diff --git a/2022/talks/justl.md b/2022/talks/justl.md
new file mode 100644
index 00000000..640bc168
--- /dev/null
+++ b/2022/talks/justl.md
@@ -0,0 +1,42 @@
+[[!sidebar content=""]]
+[[!meta title="justl: Driving recipes within Emacs"]]
+[[!meta copyright="Copyright &copy; 2022 Sibi Prabakaran"]]
+[[!inline pages="internal(2022/info/justl-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# justl: Driving recipes within Emacs
+Sibi Prabakaran (he/him, <mailto:psibi2000@gmail.com>)
+
+[[!inline pages="internal(2022/info/justl-before)" raw="yes"]]
+
+[justl.el](https://github.com/psibi/justl.el) is a major mode for driving justfiles.
+
+Justfiles are a way to save and run project specific commands. Think
+of it like Makefile, but purely focused as a command runner.
+
+The purpose of the talk is to give a brief introduction about
+justfile and then followed by how to use the justl.el extension to
+drive justfiles from within Emacs.
+
+Bio: [https://psibi.in/about.html](https://psibi.in/about.html)
+
+## Resources
+
+- [justl.el Home page](https://github.com/psibi/justl.el)
+- [Just tool Home page](https://github.com/casey/just)
+
+## Discussion
+
+- thanks for the great talk sibi :)
+- Seems like a pretty focused and useful tool!
+- will try out Just after that talk
+- Great talk. I'll definitively give it a try.
+
+[[!inline pages="internal(2022/info/justl-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/justl-nav)" raw="yes"]]
+
+[[!taglink CategoryCoding]]
diff --git a/2022/talks/links.md b/2022/talks/links.md
new file mode 100644
index 00000000..b8e9bc83
--- /dev/null
+++ b/2022/talks/links.md
@@ -0,0 +1,2 @@
+[[!sidebar content=""]]
+[[!meta redir=/2022/talks/orgsuperlinks]]
diff --git a/2022/talks/localizing.md b/2022/talks/localizing.md
new file mode 100644
index 00000000..2677d4ee
--- /dev/null
+++ b/2022/talks/localizing.md
@@ -0,0 +1,53 @@
+[[!sidebar content=""]]
+[[!meta title="Pre-localizing Emacs"]]
+[[!meta copyright="Copyright &copy; 2022 Jean-Christophe Helary"]]
+[[!inline pages="internal(2022/info/localizing-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Pre-localizing Emacs
+Jean-Christophe Helary (he/him)
+
+[[!inline pages="internal(2022/info/localizing-before)" raw="yes"]]
+
+Before Emacs user-facing strings are localized to users’ languages (will that ever happen?), there are things developers must remember when including such strings in the code, and there are things that emacs-lisp beginners (like me, forever) can do to help when they face such issues.
+
+It is not easy to write naturally flowing language when the language depends on program variables, but even if we stick to English for the time being, it is important to separate natural language from computer language as much as possible.
+
+I will be presenting an old patch to packages.el accepted in June 2018 that took me about a year to write. The origin of the patch is a plural mistake in the packages install messages. As you can see pre-patch, the code was filled with English substrings embedded into the code to produce pasts, plurals and all sorts of English grammatical constructs.
+
+<https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=61f73703c74756e6963cc622f03bcc6938ab71b2>
+
+Even if it is a beginner’s patch (thoroughly reviewed by dev-experts), it shows what can be done by emacs-lisp beginners to help with “straightening” the strings to reduce the number of potential English bugs and then to make Emacs strings easier to be handled by real localization processes, one day.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: I use Emacs on English but my mother tongue is Spanish. Is Emacs
+ localized/localizable?
+ - haha I have no English knowledge to help fixing text labels, but
+ it is of use for new developments.
+ - A:
+- Q: You mention regex on strings is a red flag for localization, are
+ there others to look out for?
+ - A:
+- Q: So, your project is to localize all of Emacs?
+ - A:
+- Q: How deep would usefull localization go? Because at the core of
+ emacs are Docstrings and localizing them could also imply localizing
+ Elisp.
+ - A:
+
+Other feedback:
+
+- Merci Jean-Christophe ! I really enjoyed your talk (and would very much like to help localise Emacs).
+
+[[!inline pages="internal(2022/info/localizing-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/localizing-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/lspbridge.md b/2022/talks/lspbridge.md
new file mode 100644
index 00000000..a6fcfb19
--- /dev/null
+++ b/2022/talks/lspbridge.md
@@ -0,0 +1,143 @@
+[[!meta title="lsp-bridge: a smooth-as-butter asynchronous LSP client"]]
+[[!meta copyright="Copyright &copy; 2022 Andy Stewart"]]
+[[!inline pages="internal(2022/info/lspbridge-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# lsp-bridge: a smooth-as-butter asynchronous LSP client
+Andy Stewart and Matthew Zeng (IRC: Andy: manateelazycat)
+
+[[!inline pages="internal(2022/info/lspbridge-before)" raw="yes"]]
+
+Emacs built-in single-threaded mechanism and GC design will cause Emacs to freeze when receiving oversized LSP data.
+
+Lsp-bridge uses python's threading technology to build caches that bridge Emacs and LSP server. Lsp-bridge will provide a smooth completion experience without compromise to slow down emacs' performance.
+
+lsp-bridge is completely asynchronous, to the point that even the completion popup is controlled by lsp-bridge. It offloads all the computation to an external python process, and hence the emacs session itself stays always responsive, as it has very few things to do.
+
+lsp-bridge has now supported 39 LSP servers and all kinds completion backend: include LSP、 TabNine、 Citre、 Elisp、 Search Words、 Path、 Yasnippet、 Tempel、 Telegra、 English etc, it just works pretty well out of the box.
+
+Related design, please check <https://manateelazycat.github.io/emacs/2022/05/12/lsp-bridge.html> and <https://manateelazycat.github.io/emacs/2022/06/26/why-lsp-bridge-not-use-capf.html> (sorry, I'm Chinese Emacser)
+
+
+[[!sidebar content=""]]
+# Discussion
+
+## Notes
+
+- <https://github.com/manateelazycat/lsp-bridge>
+
+## Questions and answers
+
+- Q: Is the fatal mistake of this approach that you can't M-x
+ find-function into the code?
+ - A: It is an unfortunate tradeoff. But what is the "fatal"
+ part?
+- Q:Will lsp-bridge replace eglot/lsp-mode, or could it work with
+ them?
+ - A: Yes, lsp-bridge will replace lsp-mode/eglot and
+ company/corfu.
+- Q:Is it possible to use lsp-mode and lsp-bridge together (Disabling
+ completions of lsp-mode)?
+ - A: lsp-bridge is plugin to replace lsp-mode and eglot, can't
+ work with lsp-mode.
+- Q:Is there a demo of lsp-bridge showing its performance?
+ - A:Hard to do that in 20 minute presentation about the
+ principles. Best to try it to see.
+- Q:Will this be a candidate for core Emacs?
+ - A:Perhaps not, it uses a lot of Python and many Emacsers may not
+ like that instead of pure elisp.
+ - (someone else on IRC): And as I said above, this breaks introspectivity, which is one of the main features of Emacs.
+- Q:If performance is the main objective, why Python and not something
+ like, e.g. Rust?
+ - A:Python is easy to develop in, and LSP's performance is
+ IO-based. The key is multi-threading, not language performance.
+ - A: LSP is IO intensive not CPU intensive, Python isn't doing
+ too good with latter but former is pretty fine. Anyways, as
+ I've explained in the talk, the multithreading design
+ fundamentally fixed the problem, it doesn't need any faster
+ language. Existing python ecosystem and python's ease of
+ development were also part of consideration
+- Q: Is there a benchmark comparison with lsp-mode and eglot?
+ - A: It is a nuisance to create a benchmark comparison when
+ lsp-bridge and lsp-mode/eglot are structured so fundamentally
+ different (single-thread & multi-thread). Feel free to try
+ lsp-bridge on a huge repository with a slow server (i.e volar,
+ java), you will experience the difference immediately
+- Q:You tried lsp-mode , but have you tried Eglot re:performance? I
+ heard lsp-mode isn't that efficient.
+ - A:lsp-bridge is much much faster than eglot and lsp-mode
+ - A: lsp-mode and eglot both suffer from bottlenecks from the
+ single-threaded Emacs and the uncontrollability of the codebase
+ size & lsp-servers, I've also heard eglot is better in terms of
+ performance than lsp-mode, but lsp-bridge avoided this problem
+ fundamentally
+- Q:How well does lsp-bridge coexist with clojure-lsp and cider?
+ - A: clojure-lsp is part of the supported language servers
+ already., C# also supported by OmniSharp
+- Q:Can lsp-bridge work with all LSP backends or just Python at the
+ moment?
+ - A: All LSP backends.
+ - A:
+ <https://github.com/manateelazycat/lsp-bridge#supported-language-servers>
+- Q: Is there any plan to support dap-mode or something alike?
+ - A: Yes, but this year I've already spent so much time on
+ develop lsp-bridge/EAF/blink-search/deno-bridge/markmacro. We
+ can use lsp-bridge's technology build faster dap-mode similar
+ project.
+- Q: does lsp-bridge work over Tramp?
+ - A: tramp is very slow, I will planinng write new plugin to
+ replace otramp, then we will make lsp-bridge work on remote
+ machine, and something like VSCode does,  idea
+ <https://github.com/manateelazycat/lsp-bridge/issues/357>
+- Q: Does acm mode work on terminal or it only works on GUI?
+ - A: The main acm-mode bundled with lsp-bridge only works on GUI
+ at the moment. There is a community maintained repo that enables
+ acm-mode to work on terminal:
+ <https://github.com/twlz0ne/acm-terminal>
+- Q: acm-mode is fast, is it possible to use it outside of lsp-bridge
+ as a standalone mode?
+ - A: No, acm-mode fast is because lsp-bridge's multi-thread and
+ asynchronous design, not because acm-mode itself
+- Q: What lsp features will not be considered in lsp-bridge? How about
+ symbol highlight, breadcrumbs?
+ - A:lsp-bridge's highest priority is performance, symbol
+ highlight is not useful and it will slow down the render
+ performance (symbol-overlay is better choose)
+ - A: breadcrumbs is not LSP procotol, I just want we coding like
+ hacker that live in Emacs, I don't want make Emacs like a
+ VSCode clone.
+- Q: doesn't Python have the same fundamental problem with threads? I mean GIL.
+ - A: NO, if you really wrote multi-thread code.
+- GIL doesn't matter for handling blocking IO in multiple threads
+ - lounge-4227, same is true for elisp
+ - Most emacsers haven't experience on multi-thread, python GIL won't block this.
+ - But Emacs's haven't multi-thread.
+ - Emacs's single-thread and GC can't handle LSP in real-time.
+- Q: ManateeLazyCat Do you think Emacs could be fixed in order to allow for this kind of multithreaded implementations in Elisp itself?
+ - A: No, there have so many elisp code running single-thread, if elisp implement multithread, Emacs will break out.
+- Q: I tried lsp-bridge, and it's wonderful. What I miss most is imenu integration in lsp-mode/eglot. Is there any plan to support it ?
+ - A: I doesn't use imenu, I'm personal no plan to support it, but any PR are welcome.
+- I don't have anything against Python, in fact I like it myself, but it seems strange that this can't be solved without requiring a second runtime
+ - A: It's not technology, it's about Emacs's history, if emacs include multi-thread, will break most elisp plugins.
+- Q: Does the package manage the external LSP and bridge processes.
+ - A: Yes.
+
+Other feedback from IRC:
+
+- I can relate Java LSP and a huge repository :D
+- Fast response from LSP really impressed me.
+- Smooth-as-butter, that's a really apt description of it. In the past few days I have learned it for the improvement of acm-mode and I am very comfortable. I was a TabNine user, so it was exciting that acm-mode supported it out-of-box.
+- I was hooked on Corfu and Cape right before I touched on acm-mode, but acm-mode turned me around in an instant.
+- Yeah, I like the ideas behind lsp-bridge, and a great explanation of it. I may have to have a wrapper function to toggle corfu and whatnot whenever I start the lsp-bridge.
+- Well, you just did, with this work, so there is at least one way that was done. It means that it should be a way to restrict multithreading in a way that doesn't break existing code but adds functionality for solving particular problems
+- Yes, definitely not easy, but worth it. Your work proves it, so I hope it motivates people to solve the fundamental problem at some point. In the meantime, please continue the awesome work you are doing!
+- Big thanks for working on this project, I think it's great that there's a solution out there for LSP performance. My setup has been struggling on some particularly large projects w/ many thousand line TS/Ruby files
+
+[[!inline pages="internal(2022/info/lspbridge-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/lspbridge-nav)" raw="yes"]]
+
+[[!taglink CategoryCoding]]
diff --git a/2022/talks/mail.md b/2022/talks/mail.md
new file mode 100644
index 00000000..e0a54386
--- /dev/null
+++ b/2022/talks/mail.md
@@ -0,0 +1,153 @@
+[[!sidebar content=""]]
+[[!meta title="Revisiting the anatomy of Emacs mail user agents"]]
+[[!meta copyright="Copyright &copy; 2022 Mohsen BANAN"]]
+[[!inline pages="internal(2022/info/mail-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Revisiting the anatomy of Emacs mail user agents
+Mohsen BANAN (MO-HH-SS-EN, he/him, <mailto:emacs@mohsen.1.banan.byname.net>)
+
+[[!inline pages="internal(2022/info/mail-before)" raw="yes"]]
+
+Actually, it makes very good sense to use Emacs as your Mail User Agent (MUA).
+A dominant and fundamental aspect of
+mail composition and mail processing is editing. And, if you live inside of
+Emacs, of course you expect to have the
+ultimate messaging environment.
+
+Over the years many Emacs MUAs have appeared. As of 2022, the following Emacs
+MUAs are available to choose from:
+Gnus, VM, WanderLust, Mew, mu4e, notmuch.el, mh-e and Rmail.
+
+Emacs MUAs can be used as Monolithic-MUAs (with elisp smtp and imap protocol
+implementations) or as Split-MUAs (with external
+smtp and imap protocol implementations). We make a case for superiority of the
+Split-MUA model.
+Recent evolutions of Gmail and Outlook towards requiring OAuth and our agility
+to better address that
+requirement based on the Split-MUA anatomy is one of our justifications for
+converging
+towards the Split-MUA anatomy.
+
+While what we are presenting here applies to all Emacs MUAs, our focus is Gnus.
+Gnus is distributed with Emacs proper and is the richest and most potent MUA,
+anywhere!
+
+We have wrapped all that is needed to use Gnus as a complete Split-MUA for
+Unix-like environments in a package
+called MARMEE (Multi-Account Resident Message Exchange Environment).
+
+MARMEE consists of a set of packages that span:
+
+- Deb GNU/Linux Packages
+- PyPI Python Packages
+- Emacs Elisp Packages
+
+plus everything that is needed to properly install these on Debian-like GNU/
+Linux systems and
+integrate them with Gnus. By choice, we have limited our integration languages
+to elisp, python and bash.
+
+MARMEE component packages include:
+
+- OuterRim-qmail (deb+PyPI) – Outer Rim oriented qmail, as a Resident Mail Submission UA.
+ qmail-remote is replaced by a python implementation which includes OAuth
+ awareness.
+ qmail-inject is replaced by a python implementation which is X822-Bus aware
+ (for DSN requests)
+- offlineimap (PyPI) – as a Resident Mail Retrieval UA.
+ offlineimap includes OAuth awareness.
+- notmuch (deb) – for searching
+- gpg (deb) – for privacy and integrity
+- flufl.bounce (PyPI) – for bounces and DSN (Delivery Status Notification)
+ processing.
+- bisos.cs (PyPI) – BISOS CommandServices for configuration and secrets
+ management and integration.
+- gmailOauth2.cs (PyPI) – For SMTP and IMAP authentication/authorization
+ through gmail.com
+ Used by qmail-remote for out-going and by offlineimap for in-coming OAuth
+ based mail.
+- org-msg (EmacsPkg) – For HTML-composition in org-mode and for htmlized
+ citations.
+- mcdt (EmacsPkg) – Mail Composition, Templating, Distribution and Tracking.
+
+The integration framework for MARMEE is BISOS (ByStar Internet Services OS).
+Full integration of Emacs, MARMEE and BISOS is called Blee (ByStar Libre-Halaal
+Emacs Environment).
+The easiest way to use MARMEE is to install BISOS – which includes Blee.
+
+In this talk I will demonstrate what a wonderful environment the Split-MUA
+model of Gnus+MARMEE can be.
+
+After walking through the concepts and the integration framework, I&rsquo;ll walk
+through transparent access to
+multiple mail servers conveniently and show org-mode composition of BIDI emails
+going out as html.
+
+My primary goal is to show that these packages can be integrated, but that
+integration is not simple.
+Furthermore, various improvements can be made to the packages to enhance the
+complete integrated environment.
+I&rsquo;ll be enumerating my requests from relevant package managers.
+If we were to collectively buy into something like this, we can greatly
+simplify use of Emacs MUAs
+with all mail systems – including the commonly used Gmail and Outlook.
+
+Of course, we should not be using Gmail and Outlook. Instead we should extend
+Libre Software into Libre Services
+and provide for edge-oriented autonomy and privacy in the services domain.
+There is a services side to
+what we have presented here. It is called &ldquo;The Libre-Halaal By* (ByStar)
+Digital Ecosystem&rdquo; – <http://www.by-star.net/>
+Perhaps that could be a topic for the next EmacsConf.
+
+For questions or comments, feel welcome to email me at: <mailto:emacs@mohsen.1.banan.byname.net>
+# Discussion
+
+## Notes
+
+- great talk -- this is a **LOT** of info to ingest!
+- link to book on polyexistentialism:
+ <http://www.by-star.net/content/generated/doc.free/mohsen/PLPC/120033/>
+
+## Questions and answers
+
+- Q:something I have liked about notmuch is using maildir makes
+ searching fast and the knowledge that you have all your email
+ period:) why gnus over notmuch. as a side note you also have
+ muchsync for notmuch clients and jmap for more exotic normal
+ clients.
+ - A:
+- Q:So the idea is more about emacs as a holistic computing experiance
+ with other packages and services rather than about email specificly.
+ as an alternative to the something like the microsoft office suite?
+ - A:
+- Q: Early on you expressed misgivings about the western copyright
+ regime, but you're using a GPL license.  Is this a conflict? (great
+ work BTW)
+ - A:
+- Q: Do you know of GNU Guix how do you think about using it for
+ packaging/configuring Emacs & your various packages else you might
+ look it up;) Or nix"os"
+ - A:
+- Q:Is this being split up in a heavily configured server for emall
+ hosting and a thin client package for youl local client to integrate
+ with your emacs packages, maybe with a client thin docker container
+ for other packages like notmuch locally
+ - A:
+- Q:Could you expand on the definition libre-halaal?
+ - A:(answered - capture TBD)
+- Q: What is the scope of what you are imagining? Just software?
+ - A: (answered - capture TBD)
+- Q:NFTs! 
+ - A: (responded - capture TBD)
+
+
+[[!inline pages="internal(2022/info/mail-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/mail-nav)" raw="yes"]]
+
+[[!taglink CategoryMail]]
diff --git a/2022/talks/maint.md b/2022/talks/maint.md
new file mode 100644
index 00000000..e573ba65
--- /dev/null
+++ b/2022/talks/maint.md
@@ -0,0 +1,249 @@
+[[!sidebar content=""]]
+[[!meta title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"]]
+[[!meta copyright=""]]
+[[!meta license="The material on this wiki page is placed in the public domain. Where copyright is taken to apply, the material is dual-licensed under CC BY-SA 4.0 and GPLv3+."]]
+
+[[!inline pages="internal(2022/info/maint-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# Maintaining the Maintainers: Attribution as an Economic Model for Open Source
+Sid Kasivajhula (any pronouns, commonly he/him, IRC: countvajhula, <mailto:sid@drym.org>)
+
+*The material on this wiki page is placed in the public domain. Where copyright is taken to apply, the material is dual-licensed under CC BY-SA 4.0 and GPLv3+*
+
+[[!inline pages="internal(2022/info/maint-before)" raw="yes"]]
+
+This talk is based on research on a new model for interactions in
+living systems, including human social systems, called identity
+architecture. The paper is available at this link:
+<https://www.drym.org/IALS.pdf> In particular, the sections on "Economic
+Systems," "Property," and "A Universal System" describe the rationale,
+underlying principles, and dynamical consequences of an
+attribution-based economic system. Follow its development at
+<https://github.com/drym-org/identity> and support an ABE project near you!
+
+----
+
+The problem of supporting open source software and contributors is a
+pressing one, and one for which we don't have good solutions.
+
+So many developers today pour their creative energies into
+freely-distributed works only to have those same works of passion turn
+into a pain in the neck when they find themselves eternally on the
+hook to provide support in exchange for minimal or no compensation,
+and often with limited assistance.
+
+Fundamentally, the reason it's this way is that traditional economic
+systems operate on <span class="underline">supply and demand</span> as the basis of value. In such
+systems, open and unlimited availability translates into zero market
+value, and consequently, open source enterprises are not economically
+sound. Even in high profile projects, developers make a living purely
+through value added services rather than from the core of the value of
+their contributions &#x2013; that is, from the code they wrote. Since, from
+a market value standpoint, <span class="underline">that code is worthless</span>.
+
+Copyright and patents (not to mention proprietary software) are an
+attempt to address this within the existing economic model by imposing
+artificial scarcity in order to induce market value. In principle,
+they also provide safeguards against appropriation. On the other hand,
+the unlimited availability of creative works is a profoundly good
+thing from the perspective of maximizing value, and thus suppressing
+it is deeply misguided. Organizations like the Free Software
+Foundation have campaigned against such restrictions for some time
+now, for related reasons; nevertheless, the problem of providing a
+viable economic basis, aside from these crude attempts, remains
+unaddressed.
+
+Attribution-based economics is a new model that aims to remedy this
+state of affairs by changing the basis of value from supply and demand
+to <span class="underline">collective recognition</span>. This is facilitated by a process of
+"inheritance attribution" where we collectively agree on the extent of
+inherence of ideas and works in other (e.g. derivative) ideas and
+works, by means of transparent and evolving standards. This model is
+capable of recognizing a much larger set of valuable contributions,
+including forms of value that cannot be coerced into a
+supply-and-demand equation. That is, in this model, there is no need
+to artificially restrict availability in order for something to be
+considered valuable. By virtue of the curious property that
+innovations on the process are themselves subject to the process of
+recognition in a self-reflective way, we gain accuracy, and by the
+property that agreed-upon standards apply equally to all, we gain
+fairness &#x2013; guarantees that are at best tenuously present in today's
+economic systems.
+
+This talk introduces some early experiments with attribution-based
+economics in the Emacs community, and some initial proposals that
+point the way forward on how, with your help, such a system might
+scale up to larger projects and communities far beyond open source.
+
+# Discussion
+
+## Questions and answers
+
+The initial questions below were answered live, and as they may be found in the live Q&A transcript, they are not fully transcribed below. The question on "human nature" has a more clear answer below, added after the fact. Following the live section is an extended Q&A section for the benefit of future readers who may have more questions.
+
+### Live Q&A
+
+Q: This seems to assume that there will be $ contributions commensurate with the value of the project vs. everyone freeloading because there is no incentive to pay
+
+A: This concept of economy will make all participants stakeholders, so there is an incentive to pay. There are a number of open questions, though, as this idea is new.
+
+Q: Are you aware of projects like OpenQ (https://www.openq.dev/)? Would that fit the model in your opinion?
+
+A: Not familiar with OpenQ
+
+Q: I see incredible amounts of overlap with the SourceCred system https://sourcecred.io/ , where attribution of antecedents, graph of contributions, fair-in-hindsight backpropogation is built-in. Are you aware of SourceCred?
+
+A: Not very familiar with it [answered in more detail live, but I've also added more on this after the live section of Q&A below]
+
+Q: How is this different from money? Not in some abstract ownership vs attribution way. Open source funding is an incentive problem, which this does not change as far as I can see.
+
+A: Money can be revisited in the future but maybe not immediately.
+
+Q: How would you approach a viable experiment?
+
+A: We have a Github Action that automatically creates the boilerplate of files and directories needed for the accounting. Further development through dialogue because of the many questions open.
+
+Q: Given that the oversight is a social process, how do you constrain the cognitive and time burdens of deciding the values of attributed contributions?
+
+A: We start with simple heuristics and first tackle the majority of issues.
+
+Q: How are the attribution amounts calculated? (ORGA NOTE: restored from a prior version; welcome to remove if this was your question and you removed it intentionally)
+
+A: Dialectical Inheritance Attribution (DIA), a social practice described in the talk. One heuristic strategy that will be used will be "Analyze, Appraise, Anonymize, Attribute."
+
+Q: What are your assumptions about human nature vis. self interest vs. altruism?
+
+A: In the live Q&A I meandered on this point, so let me answer more clearly here.
+
+ABE does not assume anything about human nature. It is neither cynical nor idealistic. Rather, it achieves the goals I mentioned in the talk in a purely structural way, setting up the source of value in such a way (DIA) that emergent incentives align with the common good. The "common good" emerges as simply being the aggregate of desires in a particular context. Since selfish desires cancel out at a sufficiently large scale, the incentive resultant from DIA forms what is good for everyone rather than what is good for some, in other words, exactly what we mean by the common good.
+
+Another way of saying this is that in an ABE system, you don't have to choose between being altruistic and being selfish. The more you give, the more empowered you are, and so, the more selfish you are, the more altruistic you'll be. As a result, it isn't useful anymore to see things in terms of selfishness and altruism.
+
+In response to this, some may say, well then we won't get credit for being "truly" good. To them I would say, it's so much more important for our world to teach people to be better than for us to worry about who is "truly" good on their own. If our world lets selfish and parochial people become cruel and deluded and further the cause of hate and injustice, then we have failed them and each other. Even the worst among us has great capacity for good, and the wonder of ABE is that it could use them to do good, teach them to be good, a kind of "Aikido" that redirects their inclinations to align with (without being limited by) what everyone agrees is good. After all, if we teach moral lessons in the ivory towers of our churches, temples, mosques and synagogues, while also teaching by our actual practices and systems that selfishness and winning and being egotistical are good, then what results can we expect?
+
+Q: URL of the project?
+
+A:
+
+- The founding documents for the prototype economic system are at https://github.com/drym-org/foundation
+
+- The accounting system which you can use in your projects (contains setup instructions) is at https://github.com/drym-org/old-abe
+
+- The research on which this is based is at drym.org
+
+### Extended Q&A
+
+The rest of these questions will be categorized under "ABE Now" -- relating to the prototype and practical considerations for adoption today, and "ABE Future" -- which discusses more philosophical issues regarding the nature and goals of the system.
+
+#### ABE Now
+
+Q: How is this different from splitting donations to my project with my partners?
+
+A: In one respect it is dramatically different from that, and that is that *creators are not required to participate in this process*. Rather, it is a service provided to members of the community by members of the community. This shift may seem small on the surface, but it is precisely what lends this idea the power to solve the big problems I mentioned in the talk. There are two other differences, as ABE:
+
+1. Recognizes antecedents in both directions. It's not just sharing proceeds from your project with your buddies, but also sharing with creators whose works and ideas are reflected in yours. And likewise, it's others sharing proceeds from their projects with you.
+
+2. Encourages investment. It's easy enough to write a small project with your buddies, but when you have big dreams, you need big resources. If you are doing a startup in today's system, you divide "ownership" shares with your buddies and also with investors with deep pockets who can help you scale your project up to provide the maximum value. It's the same in ABE, except that anyone can be an investor simply by paying money to the project. This allows you to scale up your project by the support of ordinary mortals and not only "angels." It also means that every project will scale up to the right extent -- not too much and not too little -- because there are no incentives to wring value out of projects when there are more efficient ways to get the same amount of value -- there are no barriers to becoming an investor, after all. If your particular horse isn't winning, there is no cost, and indeed an incentive, to pick another horse rather than force your horse to win at any cost. Of course, in an ABE system, you don't own these horses, they aren't even competing, and there usually wouldn't even be a clear boundary between them!
+
+Q: How is this different from SourceCred and OpenQ? When there are technologies and services like these around, why do we need ABE?
+
+A: Systems like SourceCred are promising, and it's great that they're being developed. Technologies such as these will be indispensable to ABE's operations in the long term. At the same time, I want to strongly emphasize that technology is not the _basis_ of the new system. Instead, the basis of ABE is dialogue and agreement. This is a central idea because it means that anyone who has ever contributed value, and anyone who is contributing value today, and anyone who will contribute value in the future, can rest in the safety of collective attribution and be recognized and empowered -- people like you. Aside from sharing your work, there is nothing technological that you need to do (e.g. record your contribution on a blockchain, or be part of a software project that is using an attribution-oriented compensation scheme such as SourceCred, or have patents on your ideas, or anything else) in order to be eligible to be recognized for what you did, are doing, and will do.
+
+Q: What prevents bad actors from taking over?
+
+A: There are many possible kinds of bad actor.
+
+- Those who use your project and don't pay.
+
+For now, this is OK and expected. But as the system scales, becoming eligible to _receive_ attributive payments means consenting to participate in ABE wholesale. So the more valuable a project is, the greater is its incentive to participate.
+
+- Those who will make improvements and sell independently instead of contributing back.
+
+This person is operating under the assumption that they will be able to generate more money on their own than through others via well-established channels of attribution and use. This assumption is generally unlikely to hold.
+
+- Those who attempt to set standards that benefit themselves.
+
+Because standards are set in an anonymized way, such self-serving standards are only likely to prevail on small scales where participants cannot be truly anonymous. At larger scales, this "Dialectical Mirror" ensures that these incentives cancel out ensuring that fair standards win over selfish ones. Additionally, since DIA is applied globally -- that is, the standards agreed upon in special cases are generalized to the maximum extent possible -- self-serving incentives in special cases would be negated by standards decided in the general case. To put this all in simple terms, "desires that benefit only oneself don't scale, desires that benefit all do." I call this the "Good vs Evil" principle. It is a very interesting mathematical property of an ABE system.
+
+- Those who do not report payments.
+
+The ABE constitution requires that payments being reported is a collective responsibility -- both payers as well as payees can report it. Payers have an incentive to report it because it counts as an investment. Payees have an incentive to report it because being in non-conformance with the constitution can make the project ineligible to continue receiving attributive payments from the system.
+
+But in general, yes it is important to put safeguards in place to protect against identified risks, and no doubt, there is a lot of work to do on this front. If you can think of such risks, you can help by bringing them up and/or helping to implement the necessary safeguards. We're all in this together!
+
+Q: If in ABE some portion of payments to my project go to upstream projects, then isn't there less incentive for me to work on my project?
+
+A: Some portion of your revenues go upstream, but by the same token, some portion of revenues of downstream projects come to you. Determining the precise proportions of value is not an easy problem, and it will take time and experimentation to arrive at the "sweet spot" for simultaneously incentivizing future work while fairly recognizing past work.
+
+Q: I don't see a license on ABE projects. What gives?
+
+A: Whether you have a license or not, and whether your project is proprietary or not, it is in all cases eligible to be recognized by ABE (but note that if your code is not open source, then there is less value there to be recognized -- constituting an _incentive_ to release your code).
+
+By virtue of this, having a license on ABE projects would amount to introducing something distracting which has no bearing on the process. Additionally, as ABE endorses non-ownership, that essentially puts these projects in the public domain. Projects that are not owned don't need licenses. After all, who would be in a position to issue such a license if no one has special privileges to begin with?
+
+Q: OK, but why not use the Unlicense or Creative Commons?
+
+A: Licenses like the Unlicense, well intentioned though they are, don't really help because they offer a glimpse at an open and free world that they don't provide any means of attaining, leading to complacency on the part of the user. To be fair, we owe such licenses a debt of gratitude as they have helped us get to the point where people are more receptive to the idea of non-ownership. But such crutches hinder us now -- if a potential user sees the Unlicense and if this vision of a free world takes the place of the need for a real solution in their minds, then no one is better off for it. On the other hand, a declaration of non-ownership is, to paraphrase Leo Vivier, a thread of curiosity that you can follow to reveal more complete answers. Follow that thread, friends!
+
+Q: DIA sounds like an involved process. How can it be done efficiently enough to usefully keep up with the pace of contributions to a project?
+
+A: We use an idea that we call "Renormalization," which I'll explain soon. First, the system, at least at the initial stages, assumes that preferences in the system are consistent. If a person says they like A better than B and B better than C, we assume that they will like A better than C. By making this assumption, we can reduce the hard problem of appraising the value of a contribution to a project to the problem of simply appraising its value in relation to any other single aspect of the project that has already been appraised, and then "renormalizing" (i.e. ensuring the proportions total to 1, or a 100%) the attributed proportions to include the newly created value. For instance, it's hard to say how valuable a particular bug fix is to a project, but it's much easier to say how valuable it is in comparison to another bug fix that was already appraised. So, once there is a seed of appraised contributions, it becomes much easier to appraise new contributions. Periodically, the process of DIA would be conducted afresh to apply the standards more rigorously. This is analogous to a similar algorithm followed in the field of robotics, where a robot navigating a large room can have a rough idea of its position even if it is unable to see its surroundings, by maintaining an internal model of its own movements until visual data is available. Likewise, we can maintain useful appraisals of the value of pull requests even before we have had a chance to conduct the full process of DIA, which may be done at a much less frequent rate (e.g. monthly or quarterly) than the frequency of contributions.
+
+#### ABE Future
+
+Q: You said ABE solves appropriation. How does it do that?
+
+A: Appropriation is unfairly benefiting from someone else's contributions. It is an inevitable consequence of the power law distribution where more empowered members of society are in a position to disproportionately benefit from the contributions of others due to the "loudspeaker" that empowerment equips one with, leading to a kind of "double counting" in empowerment causing the rich to get richer in a general (not just financial) sense.
+
+The current solution to this problem is to impose constraints on the freedom of such empowered individuals and groups in order to prevent their profiting in this manner from the cultural creations of marginalized groups and individuals. Yet, while constraining the freedom of others is sometimes necessary, it is rarely desirable. Additionally, this solution isn't very effective, since it is only able to address visible acts of appropriation, and comes nowhere near addressing the full scale of the problem. In truth, by the time creations have been appropriated over timescales of years, decades, and centuries, the knowledge that they ever came from the marginalized group has long faded, and, indeed, such a claim would scarcely be believable since the creation would have a long association with the empowered group in the mainstream -- a mainstream which, after all, is disproportionately shaped by that group. In ABE, since attribution is the source of value and empowerment, and since this is done in an anonymized way that has strong fairness guarantees, greater empowerment does not enable one to unfairly benefit from creations. Indeed, it encourages mass dissemination of cultural creations since the originators will be empowered by virtue of such dissemination, allowing them to create _even more_ creations representative of their culture and traditions. In this way, it solves the problem of appropriation at every level of society, from contributions in a collaborative project to cultural creations at the scale of human society.
+
+Q: You said ABE solves war. How does it do that?
+
+A: War on the scale of nations is the same as fisticuffs on the scale of two blokes having a disagreement. It happens because of misaligned interests. The a priori "state of nature" of human interactions, and national interactions, is one where such misalignments may occur since these interests arise independently. Capitalism doesn't change the origin of such interests, and only pits them against one another on battlefield as a way for someone to get the prize. ABE invites us to reflect on those a priori interests and shows us that, if we all agree to "look in the dialectical mirror" before allowing these interests to interact in the world, we could modify these interests before the fact so that they align, by devising conventions, protocols, and standards that allow us to each get what we want. One such protocol is Dialectical Inheritance Attribution, which by virtue of a certain structural property (see "altruism"), allows us to place economic value on goods and services to the extent that they align with the common good. This removes the conditions for war in the great majority of cases. For the remainder, there may be other solutions to be found by looking in the dialectical mirror - it is full of illusion and wonder, and some say that all of our answers lie there for anyone who will peer far enough into its mists :)
+
+Q: You said ABE solves poverty. How does it do that?
+
+A: It may seem inconceivable that helping the poor could lead to financial rewards, but that's exactly what I'm saying an ABE system would do.
+
+Response: That is a naive and idealistic position. According to your own statements, empowerment in an ABE system would be representive of true value contributed. Then, by definition, the poor are those who contribute the least value to society. If they don't contribute value, then how does helping them contribute value?
+
+A: Even in the new system, although everything that is empowered would be good, not everything that is good would be empowered. People would be poor for many reasons. Sometimes it would be because they didn't contribute value, or because they caused problems for others. But other times, it would just be statistical accident, since the world isn't deterministic and things don't always go the way we expect. People may also be poor because we simply aren't able to discern the value in their contributions, though they may be valuable. After all, to use a timely example as it is Christmas time, many would say that Jesus contributed value to the world, and yet, he was poor, and it was a rudimentary system based on dialogue that saw him condemned to death. ABE cannot fully escape our capacity to make mistakes. But by recognizing helping the poor as a valuable activity, we allow such people to stand on their own feet and have a chance to create value in the future. No one would ever not be in a position to create value. Today, on the other hand, millions waste all of their time simply struggling to make ends meet, a neverending cycle that isn't conducive to creating value.
+
+Response: But wouldn't it be more valuable to create real value directly, instead of helping those who may be unlikely to create such value?
+
+A: Let me tell you about something I call the "Bhulbulaiyya Principle." The story goes that at one time in the past, the Indian town of Lucknow was struggling economically and there was widespread poverty. In response, its eccentric ruler decided to invent a project to engage the whole community -- the construction of a large maze (which is now called Bhul Bhulaiyya). The project, ostensibly a pointless one, created jobs for thousands and created downstream needs that created more jobs, so that the entire community came alive economically and all of their problems were solved.
+
+Another name for this same principle could be the "Military Industrial Complex Principle," because, indeed, wars -- even the most pointless wars without a political goal -- are often good for a nation's economy.
+
+So, when unambiguously "pointless" activities can be good for the economy in a capitalist system, it should not be so surprising that an activity like helping the poor, that is widely agreed upon as being good, would be good for the economy in an ABE system.
+
+Q: In that case, what prevents freeloaders from just living off of the support of others?
+
+A: Without even considering the structural inequities nor the dynamical tendencies (e.g. the cycles of addiction and crime) that are at play, an important factor in why people "freeload" today is that there are sharp discontinuities between being disenfranchised and being a self-sustaining and contributing member of society, resulting in a "chasm" that must be crossed by a force of will and fortune for the rehabilitation of those on the periphery of society. These discontinuities include (1) the finiteness of jobs, (2) the logistical and operational difficulties of managing the relationship of employment (on both sides), (3) the rigidity of the employment contract... among many other more subtle and deep-seated aspects. On the other hand, in an ABE system, if collective attribution of value created is the source of recognition in the form of money, employment is a superfluous concept as it is unnecessary to the process of value recognition and consequent payment. This significantly reduces the barriers to rehabilitation. Added to that, since the system also incentivizes working together, and is in principle able to recognize arbitrarily small contributions, the net result is the elimination of these discontinuities -- the "chasm" -- between being disenfranchised and being solvent.
+
+Another thing is that the support of others doesn't only take the form of fulfilling the immediate needs of such would-be freeloaders. Rather, the greatest incentive is to help them in such a way that it puts them in a position to create value. Additionally, there is also an incentive to innovate on the ways of accomplishing this, so that we might expect there would be an entire industry around helping disenfranchised individuals in the most effective way as agreed upon collectively. All of these derive their value from recognition and attribution rather than supply and demand, so that even though, just like in a capitalist system, such methods and practices would be governed by financial incentives, in an ABE system these incentives would be aligned with the common good, so that it is structurally robust against abuse.
+
+Q: Although you decry the Darwinian, winner-takes-all aspect of capitalism, it is a powerful incentive to innovate. If I don't have existential concerns in ABE, would I really be as intent on creating value? Are there sufficient incentives in ABE in comparison with capitalism?
+
+A: Even setting aside for a moment that causing non-economical harm as a side effect of creating value is nowhere accounted in capitalism, in practice, only a small proportion of people in a capitalist society are truly creating the most value that they might. Most are coopted into established revenue streams because the system enables, and incentivizes, appropriating the talents of others less empowered than you, so that in a mathematical sense, even a small advantage for any individual actor leads to a biasing of local value to the maximization of value from the perspective of that actor, i.e. making the rich richer. That is, the system inherently has a second order effect of the rich getting richer, regardless of who they are, and this isn't based on something they do but is a dynamical property of the system -- it is _because_ they are rich that they get richer.
+
+The net of it is that the incentives to innovate in capitalism are quickly smothered by locally self-serving incentives. To see evidence of this, look no further than the hundreds of promising startups that are acquired by larger companies and then simply shut down, essentially constituting a bribe to these founders to stop competing with the larger company, and instead to help the larger company with its existing programmes -- effectively defusing the very innovation that competition is supposed to spark.
+
+So capitalism, after all, isn't as good at innovation as we like to think. But what about ABE?
+
+In ABE, I would say that the incentive to innovate is stronger because you can rest assured that you will be fairly recognized the same way as anyone else, without having to jump through hoops to get startup capital or resources of any kind, or have special "connections" or a "network" or worry about who can be trusted and who might take advantage of you, since anyone can be an investor and a simple payment to a project makes you one. Thus there are incentives in place for others to invest in value you have to contribute, and therefore for others to discover what you have to say, if indeed what you have to say is valuable. It frees you up to do precisely what you love and precisely what you are good at and precisely what contributes the most value, without your having to worry about any of the logistics since there are incentives in place for those logistical details to be taken care of by all. _There will always be help_ at every stage, for any purpose, since it is all attributable.
+
+## Feedback
+
+- Thanks. Love your license.
+- cue up a marxist analysis, and then shut down the proletariat? :D
+- If I was being told that this man is one of Protesilaos' long lost siblings, I would believe it.
+
+[[!inline pages="internal(2022/info/maint-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/maint-nav)" raw="yes"]]
+
+[[!taglink CategoryCommunity]]
diff --git a/2022/talks/meetups.md b/2022/talks/meetups.md
new file mode 100644
index 00000000..8f7118a0
--- /dev/null
+++ b/2022/talks/meetups.md
@@ -0,0 +1,81 @@
+[[!sidebar content=""]]
+[[!meta title="Attending and organizing Emacs meetups"]]
+[[!meta copyright="Copyright &copy; 2022 Bhavin Gandhi"]]
+[[!inline pages="internal(2022/info/meetups-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Attending and organizing Emacs meetups
+Bhavin Gandhi (he/him, IRC: bhavin192,
+[@bhavin192@toots.dgplug.org](https://toots.dgplug.org/@bhavin192))
+
+[[!inline pages="internal(2022/info/meetups-before)" raw="yes"]]
+
+
+(You can select English or Spanish as the closed captions for this talk.)
+
+Events like EmacsConf are a great place to meet Emacs users around the
+world. You get to learn about new ideas, workflows, packages, and make
+new friends as well :) What if I tell you that you can meet fellow Emacs
+users more frequently, that too in your region/time zone? Yes, meetup
+groups!
+
+In this talk, I will help you explore Emacs meetup groups of your
+interest. And cover how to attend meetups, how to stay updated with all
+the Emacs related events, and more.
+
+Organizing a meetup and setting up a platform for others is even more
+fun! I will cover how to easily get started with organizing meetup
+events as well.
+
+Outline:
+
+- Why meetups?
+- How to find nearby groups?
+- Staying updated with events
+- Organizing meetups
+- My learnings from organizing meetup events
+
+## Links
+- [EmacsWiki: Usergroups](https://www.emacswiki.org/emacs/Usergroups)
+- [Emacs calendar](https://emacslife.com/calendar/)
+- Slides: [meetups.org: rendered on
+ GitLab](https://gitlab.com/bhavin192/talks/-/blob/master/2022/emacsconf-2022/meetups.org),
+ [meetups.org:
+ raw](https://gitlab.com/bhavin192/talks/-/raw/master/2022/emacsconf-2022/meetups.org)
+# Discussion
+
+## Notes
+
+- Anybody in NoVA (Viriginia area) interstesd in starting meetup?
+- EuGE is Latin for "ah-ha"
+ - pronounced "huge"
+- Thank you so much. Good talk.
+- Thank you for promoting and informing about meetups. I think I am gonna look for one.
+- yay, quiliro's spanish subs now display in https://emacsconf.org/2022/talks/meetups/
+- I have found that we needed at least 2 hours before any event and 2 hours after, besides the proparations. You said that it takes 1 hour to organize.
+- Also, bhavin192 - thanks for the shout-out for M-x Research. I'm the organiser :D
+
+## Questions and answers
+
+- Q:  Do you attend or organize a Emacs meetup?
+ - A:
+- Q:  Thoughts on physical meetups? 
+ - A:
+- Q: Any thoughts on hybrid meetups (physical wher most peopel are
+ plus stream it online)?
+ - A:
+- Q: bhavin192 - I'm interested! Should we start by having an irc/matrix channel to discuss?
+ - IRC or Matrix for all the organizers. Hmm, sounds good as well. How about reusing #emacsconf? It is pretty much free during rest of the year.
+- How do you automate?
+- What is ILUGC ?
+- could you share your slides? there were a few links and emails I couldn't get
+ - slides: https://gitlab.com/bhavin192/talks/-/blob/master/2022/emacsconf-2022/meetups.org
+
+[[!inline pages="internal(2022/info/meetups-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/meetups-nav)" raw="yes"]]
+
+[[!taglink CategoryCommunity]]
diff --git a/2022/talks/orgsuperlinks.md b/2022/talks/orgsuperlinks.md
new file mode 100644
index 00000000..ba94f71d
--- /dev/null
+++ b/2022/talks/orgsuperlinks.md
@@ -0,0 +1,196 @@
+[[!sidebar content=""]]
+[[!meta title="Linking headings with org-super-links (poor-man's Zettelkasten)"]]
+[[!meta copyright="Copyright &copy; 2022 Karl Voit"]]
+[[!inline pages="internal(2022/info/orgsuperlinks-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Linking headings (poor-man's Zettelkasten) and defining advanced task dependencies
+Karl Voit (he/him, IRC: publicvoit, <mailto:EmacsConf22@Karl-Voit.at>)
+
+[[!inline pages="internal(2022/info/orgsuperlinks-before)" raw="yes"]]
+
+As written in [this blog
+article](https://karl-voit.at/2020/06/14/Zettelkasten-concerns), Karl
+thinks that a full-blown Zettelkasten workflow is not always a perfect
+match for a given set of requirements.
+
+To him, the most important aspect of the Zettelkasten method are the
+**bi-directional links between arbitrary headings**. If you want to use
+such links without the additional burden and benefit of a
+Zettelkasten implementation, you might want to learn how
+bi-directional links are able to help you here.
+
+In this talk, you will see a demo how links are used in the author's
+setup for linking headings and **defining advanced dependencies between
+todo headings**.
+
+You can find [the **self-contained demo file** on
+Gitlab.com](https://gitlab.com/publicvoit/orgmode-link-demo). It
+consists of various packages and some Elisp glue to create these methods:
+
+- Bi-directional links between headings:
+ - [org-super-links](https://github.com/toshism/org-super-links) with `org-super-links-org-ql` and `org-super-links-org-rifle`
+ - `org-super-links-quick-insert-inline-link`
+ - `org-super-links-quick-insert-drawer-link`
+ - [org-linker](https://github.com/toshism/org-linker)
+
+- Advanced dependencies:
+ - [org-edna](https://www.nongnu.org/org-edna-el/)
+ - [org-linker-edna](https://github.com/toshism/org-linker-edna)
+
+- Search, completion and narrowing:
+ - [helm](https://emacs-helm.github.io/helm/)
+ - [helm-org](https://github.com/emacs-helm/helm-org)
+ - [org-ql](https://github.com/alphapapa/org-ql) with `helm-org-ql`
+
+- Adding CREATED properties for new headings: [org-expiry](https://git.sr.ht/~bzg/org-contrib/blob/master/lisp/org-expiry.el) (not necessary for any demo functionality)
+
+More on bi-directional links and Karl's Org mode projects:
+
+- [UOMF: Linking Headings With org-super-links (Poor-Man's Zettelkasten)](https://karl-voit.at/2020/07/22/org-super-links/)
+- [UOMF: On How to Define Projects in Org Mode](https://karl-voit.at/2019/11/03/org-projects/)
+- [A Draft Workflow for Advanced Project Management Using Org Mode and Org Edna](https://karl-voit.at/2020/08/14/project-mgt-draft/)
+- [Zettelkasten/Org-roam/Org-brain Is Crap](https://karl-voit.at/2020/06/14/Zettelkasten-concerns/)
+
+[More Emacs-related articles by Karl](https://karl-voit.at/tags/emacs/)
+
+# Discussion
+
+## Notes
+
+- Please note that Karl has written additional notes and links on
+ <https://emacsconf.org/2022/talks/orgsuperlinks/> + the linked blog
+ article <https://karl-voit.at/2020/07/22/org-super-links/>
+- Method vs. tool:
+ <https://karl-voit.at/2021/01/18/feature-vs-method/>
+- nice talk
+
+## Questions and answers
+
+- Q: so the LINKS drawers holds so-called "backlinks"?
+ - A: yes. You can customize the drawer name.
+- Q: does this configuration you use need packages outside elpa?
+ - A: yes. repository link:
+ <https://gitlab.com/publicvoit/orgmode-link-demo>
+- Q:Can you filter out blocked taskes on stuff like your agenda or a
+ specific agenda view, When you want to know what you can do next?
+ - A: Blocked tasks are never shown on the agenda by default.
+ Whenever there is no scheduled timestamp attached to a heading,
+ it's not visible on my agenda. If you use the dependencies as
+ described in the demo, the timestamp is only marked if the
+ previous one is canceled. So blocked tasks are not shown in this
+ setup.
+- Q:The functionality seems quite nice but the markup seems pretty
+ heavy in the property drawers.  Do you ever have any issues having
+ so much meta-level information in the file?
+ - A: As long as it doesn't need to be typed manually there's no
+ real issue. The orgmode files tend to be large. I haven't felt
+ it's bloated.
+- Q:Does this change how you use todo keywords "next, todo,
+ blocked?", avoiding some or starting to use others
+ - A: No. My keywords are NEXT, STARTED, WAITING, DONE, CANCELLED
+- Q:Org Brain has stuff like parent links and directional links,
+ sibling links. If org roam else has nothing else intersting what
+ about like the previous stuff?
+ - A: My links are not "directed" most of the time. So I don't
+ have the requirment for specific link types or directions. In
+ short: I don't need semantic links so far. Following the KISS
+ principle. I get the information from the context of the link.
+- Q: DO you find that the links are fragile, hard to maintain?
+ - A: not really. sometimes I rename links and the link name is not
+ updated, that require some fixes by hand
+- Q: PhD Thesis link
+ - A: <https://karl-voit.at/tagstore/en/papers.shtml> The first
+ chapters of my thesis should be easy to read for the general
+ public as I summarize the history of PIM (Personal Information
+ Management) research
+ - + related github projects around tagstore
+ <https://github.com/novoid/>
+ - tagstore <https://karl-voit.at/tagstore/> = research
+ prototype software in Python to do research around tagging
+ interfaces for local files
+ - flexible to adapt
+ - Topic: improving the local file management beyond the usual
+ hierarchy of directories (tagging + TagTrees)
+ - DONE AFTER my PhD:
+ <https://karl-voit.at/managing-digital-photographs/>
+ filetags, date2name, move2archive, ...
+- Q: why not org-id's UUIDs for IDs, and the preference for
+ human-readable ones (and not just use CUSTOM_ID for those)?
+ - Karl: I hate UUID because they're opaque, so I removed them.
+ - I don't understand. There is a part for human to read
+ description: [[UUID][A human readable description]]
+ - Karl: this would not add any benefit from my personal point
+ of view as longs as the human-readable ID is unique. So why
+ not get rid of the UUID and use the humand readable link
+ text?
+ - A human readble link is fragile, e.g. space, non acsii
+ characters. When unexpected things happen, it is hard to
+ detect the change. Using human-readable link text
+ release the stress, so the user could focus on the
+ content. 
+ - Karl: You should take a look at my Elisp function that
+ generates the ID strings. No problem so far.
+ <https://github.com/novoid/dot-emacs/blob/master/config.org>
+ - I found you write a blog about it:
+ <https://karl-voit.at/2019/11/16/UOMF-Linking-Headings/>
+ . I will read about it.
+ - I found `(defun
+ my-generate-sanitized-alnum-dash-string(str)`
+ in the
+ - way to generate your ID requires replace
+ non-ASCII characters: ;;
+ - Replace German Umlauts with 7-bit ASCII.
+ - ;; Replace German Umlauts with 7-bit ASCII.
+ - (str (replace-regexp-in-string "[Ä]" "Ae"
+ str t))
+ - (str (replace-regexp-in-string "[Ü]" "Ue"
+ str t))
+ - This is a very tedious work to do. I don't know
+ if users come from
+ - other non-ASCII characters would have to write
+ their own replacement
+ - regular expression.
+- Q. do you have/use anything for "what links here / to this
+ heading", in a more occur/grep-style buffer and auto.?
+ - A: not yet, I use org-occur in the buffer and get the result
+- Q: (totally tangential):  Do you navigate your files with the arrow
+ keys or with C-{pnbf}?  I saw arrows on your key-cast.
+ - It's more complicated than that:
+ <https://karl-voit.at/2021/05/23/advantage2-modifications/>
+ - In short: I'm using the arrow keys but they are not where
+ you'd assume they are. ;-)
+- Q: link to thesis please
+- Q: any way to do links by heading hierarchy?
+- Q: so the LINKS drawers holds so-called "backlinks"?
+ - A: yes. You can customize the drawer name.
+- does this configuration you use need packages outside elpa?
+ - A: my setup Elisp could be improved to great extend.
+ - A: <https://emacsconf.org/2022/talks/orgsuperlinks/>
+ - A: <https://gitlab.com/publicvoit/orgmode-link-demo>
+
+### Other discussions from IRC
+
+- Wow, this looks super organized
+- i have to admire embedding that much info into tasks (ie: blocked, next, etc), i never get that far. my headings are much more lightweight, i'd likely use a plain list if i could fold over the text below
+- Is there a specialized package for showing backlinks (org-mode) in a buffer, say based on IDs, in a normal occur buffer or even a grep/rg style thing?
+- i really like that both publicvoit's org-superlinks and hyperbole are both elisp and inside emacs, where org-roam is a hodgepodge of external tools (my impression)
+ - isn't sqlite the only external dependency for org-roam though?
+- Speaker: Actually, to create the demo fully self-contained was most of the effort with this demo. By far.
+- Fashion:
+ - *that* is a dapper looking fellow!
+ - Really loved the ending publicvoit
+ - haha the goodbye was epic
+ - I am way underdressed for this conference it appears
+ - oh! I backed up and see the shorts that publicvoit was wearing!
+ - A fashion leder if you will
+ - I was here for the fashion. Not dissapointed.
+
+[[!inline pages="internal(2022/info/orgsuperlinks-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/orgsuperlinks-nav)" raw="yes"]]
+
+[[!taglink CategoryOrgMode]] [[!taglink CategoryZettelkasten]]
diff --git a/2022/talks/orgvm.md b/2022/talks/orgvm.md
new file mode 100644
index 00000000..b4f3c72c
--- /dev/null
+++ b/2022/talks/orgvm.md
@@ -0,0 +1,45 @@
+[[!sidebar content=""]]
+[[!meta title="orgvm: a simple HTTP server for org"]]
+[[!meta copyright="Copyright &copy; 2022 Corwin Brust"]]
+[[!inline pages="internal(2022/info/orgvm-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# orgvm: a simple HTTP server for org
+Corwin Brust (he/him/any, IRC: corwin)
+
+[[!inline pages="internal(2022/info/orgvm-before)" raw="yes"]]
+
+OrgVM is, so far, a very simple nodejs wrapper, invoking Emacs in
+batch mode. I'll talk about how I use it to make project notes
+available on demand to my colleagues and how it works, especially the
+generation of elisp from javascript/JSON.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: Why not build upon Nic Ferrier's elnode web server written in
+ Elisp?  As Nic describes it: "Elnode is a non-blocking IO webserver
+ written entirely in EmacsLisp. It's like an EmacsLisp version of
+ node.js."  Your implementation will likely get much simpler if you
+ keep it all in Lisp.
+ - A: I chose to build with node.js because that was easy for me;
+ but an Emacs based version sounds awesome!
+- Q: Is this using org-info-js? 
+ - A: nope; I need to learn more about this - seems very exciting
+ and like it could influence this project
+- Q: Why did you make yet another web server?
+ - I read it was to make your org files portable.
+ - He's auto-generating .html files to match his org files in the background so that he can browse them via web browser right?
+- Q: How is that portable. You still need a web browser. Org files need the very basic..... cat
+- Q: Have you heard about https://codeberg.org/gopiandcode/emacs-viewer, by any chance?
+
+[[!inline pages="internal(2022/info/orgvm-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/orgvm-nav)" raw="yes"]]
+
+[[!taglink CategoryOrgMode]]
diff --git a/2022/talks/orgyear.md b/2022/talks/orgyear.md
new file mode 100644
index 00000000..010445a1
--- /dev/null
+++ b/2022/talks/orgyear.md
@@ -0,0 +1,129 @@
+[[!sidebar content=""]]
+[[!meta title="This Year in Org"]]
+[[!meta copyright="Copyright &copy; 2022 Timothy"]]
+[[!inline pages="internal(2022/info/orgyear-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# This Year in Org
+Timothy (he/him, IRC: tecosaur)
+
+[[!inline pages="internal(2022/info/orgyear-before)" raw="yes"]]
+
+You've all been avid readers of the (somewhat irregular) "This Month in
+Org", now you can be an avid listener of a special edition exclusive to
+EmacsConf: "This Year in Org", a quick rundown of major developments in
+Org over the past year, and perhaps a hint of some things lying around
+the corner.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: Not a question, but just a great thanks for "This month in org"
+ which helps us get awareness about the greatness of Org!
+ - A:Thanks :)
+- Q: Does the project need other kinds of support (infrastructre,
+ etc.) which can't be covered by donations to devs? (without
+ detriment to supporting devs!!)
+ - A: There isn't much in terms of ongoing costs (just hosting
+ <https://orgmode.org> really), but donations are great for
+ dignifying the work done, indicating the value it has to the
+ community, motivating developers, and also helping
+ justify/enable more time to be spent working on Org.
+- Q: What is the use of parsers in other languages? Is it to make org
+ available in other applications?
+ - A:Org is being used outside Emacs (e.g. Hugo, Logseq, rendering
+ on GitHub/GitLab/Gitea), and so it's worth trying to make sure
+ they treat the syntax in a consistent manner. Similarly, if
+ people build nice tools for Org outside Emacs, that's nice for
+ us :)
+ - Voit: Shameless plug:
+ <https://gitlab.com/publicvoit/orgdown/-/blob/master/README.org>
+ is also an idea to promote the syntax of Org mode in tools
+ outside of Emacs. After all, everybody is getting advantages
+ when Orgdown (syntax of Org mode; often named "org" but it's
+ frequently mixed up with the Elisp implementation) is a rather
+ popular syntax.
+- Q: citar package is a really pleasant addition with support for
+ org-style citations. What's your take?
+ - A: Citar is great, IMO
+- Q: How many hours a week do you spend contributing to org?
+ - A: It varies a lot. It's also a bit difficult to say, because
+ there have been a fair few patch sets which have been
+ "incubated" in my config before brining them to Org mode, and
+ so I need to detangle "time spent tinkering on Org in my
+ config" and "time spent working on patches for Org mode".
+ Some weeks it's ~0h, others it might be as much as ~30h. The
+ average might sit around ~5h, but that's just a wild guess.
+- Q: As a fan of emacs org-mode and Julia myself too, do you see any
+ possiblities/wishes/plans to somehow connect org and julia evenmore
+ (apart from ob-julia). Perhaps a julia parser of org-mode, or
+ something like that?  Just wanna personally thank you for all the
+ effort in org, emacs and julia you are putting throughout! I have
+ learned quite a bit about doom emacs config from your blogs too. I
+ feel like our setup/interest overlaps quite a bit, and its always
+ helpful too see your work out there. Thanks again, keep up the great
+ work!
+ - A: Wait a few slides 😉 (<https://github.com/tecosaur/Org.jl>)
+- Q: "Org", "Org-mode", "org-mode", "Org/Org-mode"? Which one
+ for the format/notation and which one for the software proper, and
+ then the whole thing (with org-contrib and third-party packages) vs
+ just the repo and major mode per se?
+ - A: "Org mode" for the project, "org-mode" for the major
+ mode, "Org" for the format
+- Q: How much time/week do you spend editing your doom config?
+ - A: Err, too much 😆 
+ - I feel that :D
+- Q:In your doom configs, you like using variables fonts and stuff,
+ basically a lot visuals everywhere. I feel that it makes everything
+ sluggish. Am I doing something wrong? Maybe there are less visible
+ tricks in your config?
+ - A: It doesn't make things slow enough that I care, basically.
+ Doom does some nice performance stuff, and I try to go for
+ deferred loading and look for text-properties over overlays for
+ performance in visual packages. As for varaible pitch fonts
+ look, that's handled by Harfbuzz not elisp AFAIK (and so
+ doesn't really affect performance).
+- Q: Do you use linux or mac system? What kinds if not a secret?Q
+ - Linux, OpenSUSE Tumbleweed specifically
+- Q: I wonder why the export to HTML has not been modernized. Any particular reason?
+ - A: It's going to take a whole lot of time an effort. I take that as being more flexible and better able to suit "modern HTML/CSS" usage. Incidentally, the HTML and Markdown backends are two things I'd like to have a look at next year (if I end up having the time).
+- Q: haven't looked at citation support at all yet, any great intro articles out there?
+ - I may be (am) biased, but try https://blog.tecosaur.com/tmio/2021-07-31-citations.html 🙂
+ - More discussion about citations:
+ - and I have found the citar package a really pleasant addition with support for org-style citations
+ - Citar is great, IMO
+ - Citar is indeed great. I have been meaning to switch to Citar from ivy-bibtex, but honestly I am just being lazy
+ - I am not sure as I haven't used ivy-bibtex. I am half-way migrating away from org-ref but will likely keep that around for a while longer (mostly for old links and its doi-utils import functions)
+ - I found citar really easy to set up and get started with. Very clear and clean entry points
+- Org mode outside of Emacs: https://gitlab.com/publicvoit/orgdown/-/blob/master/doc/Tool-Support.org
+ - A: Also https://orgmode.org/tools.html 🙂
+- your visuals have always been charachteristic, where did you learn that? in the sense that I can reasonably guess you made something when I see the result. I was also thinking about your config or the survey website, or are they inspired by that theme?
+ - A: I think that's just "themed Beamer metropolis". I do also naturally go to light themed content with a pale yellow-y background.
+- Q: "Org", "Org-mode", "org-mode", "Org/Org-mode"? Which one for the format/notation and which one for the software proper, and then the whole thing (with org-contrib and third-party packages) vs just the repo and major mode per se?
+ - A: "Org mode" for the project, "org-mode" for the major mode, "Org" for the format
+- Q: Thank you :) Any plans to use tree-sitter with org? How would it relate to org-element? But if I remember correctly org syntax can not be fully expressed as tree-sitter grammer... So maybe tree-sitter is not for org?
+ - i don't grasp the recent infatuation with external parsers.
+ - A: They're happening, and syntax divergence is bad. and if they are used to make neat things, it's nice if we can make use of them too
+
+## Other discussions from IRC
+
+- yeah org-modern ?
+- lots of progress on the syntax doc, i just checked it out on worg
+- engraved-faces is excellent.
+- Again, an excellent talk.
+- Both talks were great! Thanks
+- good pace, slides, and clearly delivered
+- "aspirational rather than descriptive" -- I will remember this for future use :D
+- thanks tecosaur for the very nice overview and reminder of all the recent changes in org!
+
+
+[[!inline pages="internal(2022/info/orgyear-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/orgyear-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/python.md b/2022/talks/python.md
new file mode 100644
index 00000000..21601833
--- /dev/null
+++ b/2022/talks/python.md
@@ -0,0 +1,69 @@
+[[!sidebar content=""]]
+[[!meta title="Short hyperlinks to Python docs"]]
+[[!meta copyright="Copyright &copy; 2022 Eduardo Ochs"]]
+[[!inline pages="internal(2022/info/python-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Short hyperlinks to Python docs
+Eduardo Ochs
+
+[[!inline pages="internal(2022/info/python-before)" raw="yes"]]
+
+If we have a local copy of the Python docs installed then it is easy
+to define the three hyperlink functions in the Python program below,
+
+ # (find-pydoc "tutorial/classes")
+ # (find-pydocw "tutorial/classes")
+ # (find-pydocr "tutorial/classes")
+ class MyVector:
+ def __init__(v, x, y):
+ v.x = x
+ v.y = y
+
+such that each one expands its argument in the right way, and the
+first one opens the local URL
+<file:///usr/share/doc/python3.9-doc/html/tutorial/classes.html> in
+the browser, the
+second one opens <https://docs.python.org/3/tutorial/classes.html>, and
+the third one opens the RST source of those HTML pages in Emacs: the
+file `/<rstsourcedir>/tutorial/classes.rst.txt`.
+
+The docs for Python are designed to be navigated in a browser. Suppose
+that we start on the page
+[classes.html](https://docs.python.org/3/tutorial/classes.html)
+above, follow a couple of
+hyperlinks, and then we find this other page that, ahem, is very
+interesting and important and we *need* to have hyperlinks to:
+
+<https://docs.python.org/3/reference/datamodel.html#object.__init__>
+
+The most obvious way to create elisp hyperlinks to that page is to
+copy its URL to Emacs, edit it by hand to produce a `(find-pydoc ...)`
+hyperlink, duplicate that hyperlink twice, and add a "`w`" and a "`r`"
+into the right places&#x2026; but this is not very practical.
+
+In this presentation I will show a practical way to handle that. It is
+a new module of eev &#x2013;
+[eev-rstdoc.el](http://angg.twu.net/eev-current/eev-rstdoc.el.html)
+&#x2013; that performs both the
+expansions needed by `find-pydoc{,w,r}` and the "shrinkings" that
+convert URLs and filenames to short hyperlinks. Eev-rstdoc.el comes
+with three "families" of hyperlinks, expansions, and shrinkings: one
+for Python docs, one for SymPy, and one for MatPlotLib. It is easy to
+add new families, and the parameters for expansion and shrinking in
+each family are easy to configure.
+
+For more info see [this
+page](http://angg.twu.net/emacsconf2022-py.html). For a translation of the Python tutorial
+to a format that has only executable examples and elisp hyperlinks,
+see [this](http://angg.twu.net/e/python.e.html#tut-numbers).
+
+
+[[!inline pages="internal(2022/info/python-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/python-nav)" raw="yes"]]
+
+[[!taglink CategoryPython]]
diff --git a/2022/talks/rde.md b/2022/talks/rde.md
new file mode 100644
index 00000000..62810ae7
--- /dev/null
+++ b/2022/talks/rde.md
@@ -0,0 +1,105 @@
+[[!meta title="rde Emacs introduction"]]
+[[!meta copyright="Copyright &copy; 2022 Andrew Tropin"]]
+[[!inline pages="internal(2022/info/rde-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# rde Emacs introduction
+Andrew Tropin (he/him, IRC: abcdw, <https://trop.in>)
+
+[[!inline pages="internal(2022/info/rde-before)" raw="yes"]]
+
+
+[rde Emacs](https://git.sr.ht/~abcdw/rde/tree/master/item/rde/features/emacs-xyz.scm)
+is a vanilla-flavored distribution of Emacs, which intergates well
+with your OS, WM and rest of the environment. It's built on top of
+[Guix Home](https://guix.gnu.org/en/blog/2022/keeping-ones-home-tidy/)
+project and allows to manage not only elisp packages and
+configurations, but other dependencies like operating system packages,
+user program configurations in a declarative and reproducible manner.
+
+You don't need to follow complicated installation instructions, apply
+workarounds and be afraid of updates: just do it, update rde, throw some
+custom elisp code, declare and customize features you need or want to
+try in a simple lisp (Scheme) file and you will get it. Don't like the
+result? Just rollback to previous generation and EVERYTHING will work
+as before. Once you make it to your liking, it will work forever*, even
+if you move to a new laptop/workstation.
+
+# Discussion
+
+## Notes
+
+- Thank you. Super cool that you started guix home. (:
+
+## Questions and answers
+
+- Q: Do you use this to have multiple configs running side by side for
+ live comparison?
+ - A: Yes, two separate configs. (more capture TBD)
+- Q: Are you using Guix System, or Guix on top of another distro?  If
+ System, any tips?  I tried Guix System, but found getting started
+ was very difficult due to lacking WiFi firmware and incomplete
+ documentation.
+ - A: Yes he uses Guix system and package manager. RE: WiFi: First
+ option is to buy a wifi adaptor that doesn't require
+ proprietary firmware.
+- Q: One of the issues I've had managing Emacs packages with Guix is
+ a conflict between the Guix package ethos (read-only) and the Emacs
+ package ethos (hackable in real-time). Any suggestions to resolve
+ this?
+ - A: There is an interactive/live workflow for editing emacs
+ configuration, which kinda similiar to usual, but you persist
+ your changes from time to time and rebuild the configuration to
+ apply those persisted changes for new emacs instances.
+- Q: What is next for rde?
+ - A: Short term plan is to prepare more documentation, getting
+ started guide, live CD to explore system. Also would like to
+ find maintainers to help. 
+- Q: Do you use emacs without this? If so, for what purposes, and how
+ does it feel compared to rde?
+ - A: No, I don't use emacs outside of RDE. There's a way to add
+ mostly anything in your emacs config into RDE.But doesn't use
+ it because it isn't reproducible. Can break between machines.
+- Q: Are there any plans to push things from rde to guix's main
+ channel?
+ - A: Would like to push some things upstream but can't always fit
+ patches 
+- Q: How difficult is it to add support for new Emacs packages to
+ Guix?  Have you found that's burdensome vs. package.el or other
+ in-Emacs package management approaches?
+ - A: Packaging elisp for guix isn't hard at all, in most cases
+ it's really easy. Sending patches is a little more involved,
+ but also not rocket science :)
+- Q: Do your reckon RDE is currently opinionated? Or is it a one size
+ fits all framework?
+ - A: It's vanilla-flavored and kinda opinionated at the same
+ time, but everyone free to use whatever parts/features fits
+ them, also they free to implement or use implemented by others
+ features, which can fit better for them than original rde's
+ features.
+- Q: How to get into RDE? Is there already documentation/getting
+ started guide?
+ - There is an example configuration and link to slightly sparse
+ manual at <https://git.sr.ht/~abcdw/rde>, you can ask question
+ #tropin at libera.chat.
+- Q: Can you mix RDE with custom emacs init file?
+ - Yes, you can, but it will add irreproducibility to your setup.
+
+Other discussions from IRC:
+
+- Easy reliable rollbacks is definitely one of the things I love about nix and guix
+- Yes! It is great to know that stuff is hard to mess up. This leads to more fun experimenting.
+
+[[!inline pages="internal(2022/info/rde-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/rde-nav)" raw="yes"]]
+
+# Related talks
+
+- [Building reproducible Emacs](/2020/talks/08/) - Andrew's previous talk at EmacsConf 2020
+[[!sidebar content=""]]
+
+[[!taglink CategoryConfiguration]]
diff --git a/2022/talks/realestate.md b/2022/talks/realestate.md
new file mode 100644
index 00000000..d3dbbdab
--- /dev/null
+++ b/2022/talks/realestate.md
@@ -0,0 +1,91 @@
+[[!sidebar content=""]]
+[[!meta title="Real estate and Org table formulas"]]
+[[!meta copyright="Copyright &copy; 2022 Daniel Gopar"]]
+[[!inline pages="internal(2022/info/realestate-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Real estate and Org table formulas
+Daniel Gopar (he/him, IRC: gopar, <mailto:gopardaniel@gmail.com>)
+
+[[!inline pages="internal(2022/info/realestate-before)" raw="yes"]]
+
+This will be a 20 minute presentation on how I use org mode tables (specifically formulas) on how I can quickly see if a deal is feasible or not.
+
+Topics will include:
+
+- Creating Table Formulas
+- Special Buffer Editing Formulas
+- Formatting output
+- Special Debugging just for formulas
+- Creating Custom Formulas
+- Automatically re-calculating rows/table
+- Finally Putting it all together to tell at a glance if a property is ideal or not
+
+Essentially bits and pieces from this section of the manual:
+<https://orgmode.org/manual/The-Spreadsheet.html>
+
+
+# Discussion
+
+## Notes
+
+- <https://orgmode.org/manual/The-Spreadsheet.html>
+- Really liking the idea of the talk so far, but I would suggest zooming in on the text more next time
+- Damn, org tables have so many more features than the ones I use already
+- tables in org are highly underused. all the functionality of spreadsheet calculators with the power of elisp at your fingertips!
+- this talk is awesome
+- and org-mode has plenty of hidden power...
+- and the power of Emacs Calc, to boot. Including handling units like kW, m, Pa, ...
+- +1 for the awesomeness
+- I've always been slightly apprehensive of going full spreadsheet with org tables but the features are very cool.
+- I actually learned a lot from this talk. Thanks @gopar.
+- great talk, thank you very much!
+- excellent presentation, thanks!
+- loved the presentation
+- just downloaded a .webm of the talk. looks great on my screen (1280x720)
+- Thanks for the Org mode Table tips
+- was a fun, straight forward how to. very useful.
+- I don't have any questions now, but I'm going to try to learn many things that you demonstrated!
+- I hadn't seen the formula debugger before. Very useful information.
+- org tables are so powerful
+- moving around cols + rows - is also way faster than what one can do in GUI spreadsheet apps
+- oh! great, thanks for sharing!
+
+## Questions and answers
+
+- Q:  Pretty neat-- Can you say how this is better than maintaining a
+ gui spreadsheet? 
+ - A: As all things in life, this is preference. org tables are
+ text only and for me this is easier than learning yet another
+ tool (google spreadsheets/MS excel/etc) but totally up to you
+ :)  Also, you can write your formulas in Elisp instead of
+ whatever crippled language you have to use in other
+ spreadsheets.+2 (move the logic to lisp to other package and
+ decouple/reuse it other documents, test it, etc.); Moving around
+ cols + rows - is also way faster than what one can do in GUI
+ spreadsheet apps
+- Q: Is there a way to share the constants between the tables?
+ - A: You can create a constants for the entire buffer, or save
+ them as variables :)
+- Q: Can you please provide the link to the org file?
+ - A: Currently the file is not hosted anywhere. I can put it in a
+ github repo in a bit :)
+- Q:Is there a way to link to a cell in another row in the same table?
+ or other tables?
+ - A:I think i remember reading that it is possible to do the first
+ part of your question. I don't think you can do the 2nd part
+ about linking cells from other tables. I'd recommend double
+ checking w/ the org docs since I can be misremembering things :)
+ - Update: Looks like it is possible ->
+ <https://orgmode.org/manual/References.html>
+- where is the org file for thase calculations?
+
+
+[[!inline pages="internal(2022/info/realestate-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/realestate-nav)" raw="yes"]]
+
+[[!taglink CategoryOrgMode]]
diff --git a/2022/talks/rms.md b/2022/talks/rms.md
new file mode 100644
index 00000000..a78c1d99
--- /dev/null
+++ b/2022/talks/rms.md
@@ -0,0 +1,433 @@
+[[!meta title="What I'd like to see in Emacs"]]
+[[!meta copyright="Copyright &copy; 2022 Richard M. Stallman"]]
+[[!inline pages="internal(2022/info/rms-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# What I'd like to see in Emacs
+
+Richard M. Stallman
+
+[[!inline pages="internal(2022/info/rms-before)" raw="yes"]]
+
+We played [Richard Stallman's 2014 TEDx video: "Free Sofware, Free Society"](https://www.fsf.org/blogs/rms/20140407-geneva-tedx-talk-free-software-free-society) for context before his talk for EmacsConf 2022. The 2014 TEDx video is 14 minutes long, and is licensed under the Creative Commons Attribution-No Derivative Works 3.0 license. - EmacsConf organizers
+
+# Discussion
+
+## Notes
+
+- <https://stallman.org/>
+- <https://stallmansupport.org/> (regarding reports of attacks against
+ him)
+- "Free Software": A similar point of view related to contributing
+ to gated web forums:
+ <https://karl-voit.at/2020/10/23/avoid-web-forums/>
+- "Everything other than an Lispy language would be wrong for GNU
+ Emacs" (paraphrased)
+- RMS wants an update to "An Introduction to Programming in Emacs
+ Lisp" to cover changes to Emacs such as lexical binding.
+- Names of packages should help you remember what this package does.
+ Omit pure word-plays. Stick to names that people will remember.
+- RMS wants to edit formatted documents within Emacs using WYSIWYG
+ (like with LibreOffice)
+- RMS wants to get back to the situation where browsers decided how a
+ web page is rendered. Less browser features that allow to control
+ the look by the web page providers.
+- RMS doesn't want to use packages that are not actually part of
+ Emacs (e.g., Magit). RMS is using VC and not git.
+- RMS: "Happy hacking"
+
+## Questions and answers
+
+- Q: Pragmatically, how are people that buy into these ideals, and
+ especially those that build the software, meant to live/thrive,
+ short of renouncing many of the luxuries of modern life, as many
+ have been struggling to reconcile both it appears. Wouldn't it be
+ smarter and more productive longer-term to solve that problem too?
+ - A: (answered on stream, will be copied later)
+- Q: I have been admiring your work for free software for many years
+ now. I am a bit concerned about what will happen to the GNU project
+ when you retire (not soon, I hope!!). Have you planned how to manage
+ the GNU project in the long run?
+ - A: (answering on stream, will be copied later)
+ - RMS: haven't found a way yet. We'll have to try again.
+- Q: In response to your aversion to JavaScript support in Emacs: In
+ the same way that to revolt against the nonfree spirit in software
+ development one has to develop software, and that to fight nonfree
+ compilers one has to write a free compiler - can you fairly consider
+ rejection of JavaScript as a tool conducive to improving the state
+ of free JavaScript? A server can send back any MIME type to execute
+ on your machine, JS was just the most convenient.
+ - A: The issue is different in kind. We already have free JS
+ support.  Free browsers contain it.  The issue is the programs
+ that are going to run. If JS would allow you to inspect the code
+ before runing it, it wouldn't be problematic. The problem is
+ that they end up in your browser and the user has no idea
+ what's happening.  Websites are mistreating users. The
+ important thing about it is the danger it creates. 
+- Q: With all the recent additions and optimizations to Emacs Lisp
+ (lexical scoping, native compilation etc.) would you deem Emacs Lisp
+ suitable for general purpose programming outside Emacs (i.e.
+ scripting, running web servers). If not, why?
+ - A: Nothing wrong with this in principle, but it would be a
+ distraction. I'd rather we didn't do it. If we had 1K
+ programmers ready to do this and every other thing, no problem.
+ We don't. There are many other platforms that can accommodate
+ programs. I'd rather use emacs to do its work and leaving other
+ languages to theirs. 
+- Q: Would a namespace system similar to Common Lisp packages but
+ without :USE work in Emacs? Modern CL implementations have package
+ local nicknames to create package local prefixes.
+ - A: Basically, yes, but it has issues. [rest will be copied from
+ stream later...] A naming convention would be much simpler to
+ get right.
+- Q: With Emacs 29 adding more (awesome) features into vanilla emacs,
+ how should we ensure vanilla emacs does not get bloated with many
+ similar features? (example : ido/icomplete, vc/magit)
+ - A:To some extent we can't, because users do things differently.
+ I have never used Magit because I didn't want to use anything
+ not part of Emacs. I was unable to get into contact with the
+ Magit developer regarding integration of it within Emacs. I do
+ not use git as my main vc system. I think when packages have
+ very different approaches about how to handle things (like vc
+ versus magit) their approaches are not redundant.
+- Q: What do you have in mind for more modular Emacs development?
+ - A: There is no specific feature, but a way of thinking about
+ modularity when you write each package because you'll find that
+ when interacting with other packages you'll identify hooks that
+ may be there or may be missing. You could add a fairly general
+ hook so that instead of a rigid connection to other parts of
+ emacs you could use a general purpose hook that could do a lot
+ of things including the thing you need it to do.
+- Q: Could you give a few examples of the medium-sized jobs necessary
+ for WYSIWYG-editor support in Emacs?
+ - A: I can't really, but I would appreciate it if people started
+ putting that together. If you look at LIbreOffice then you could
+ choose a subset of very important ones that will give everyone a
+ start. 
+- Q:Is there an up-do-date document where people can see what is and
+ isn't on the roadmap, and why? i.e. a live version of talks like
+ this or email threads on emacs-devel?
+ - A: Not that I'm aware of.
+ - etc/TODO
+- Q: Should GNU (or someone else) define a safe-subset of HTML/CSS/JS
+ to make web browsers simpler and safer (e.g. by preventing JS from
+ contacting servers)?
+ - A: This would be an interesting thing to explore, but I don't
+ know if it can be done. Browser profiling is facilitated by
+ javascript. So, there is a collection of benchmarks and results
+ are different. So it allows the browser to gain information
+ without employing cookies. 
+- Q: How can we ensure the continuity of an understanding of the more
+ arcane parts of the [Emacs] source code, and increase their
+ evolvability, notably with regards to display, single-threading
+ limitations, etc.?
+ - A:  Single threading is a very specific thing. The furthest that
+ I've bothered to think about it is to enable multiple LISP
+ programs to run in parallel. My machine doesn't allow me to run
+ multiple threads in a single program, so it never mattered to
+ me. Basically, dev of the displaycode without threads is more
+ feasible. However, changes in the buffer data structure would be
+ required and that will be the hard part. Representing a buffer
+ with a certain display needs to be worked out first. You have to
+ decide the data structure thinking about how display can handle
+ it efficiently. Think about that at that stage. The editing and
+ data structure is the part to figure out.
+- Q: Do you recommend reaching out in [high] schools for volunteers
+ instead of universities because they are more prone to value the
+ objectives of freedom?
+- Do you recommend reaching out in schools for volunteers for both
+ advocacy and for development instead of unversities because they are
+ more prone to value the objectives of freedom?
+ - A: Reaching out for what? To teach about freedom or to find more
+ developers? Can you elaborate? **Questioner**:  
+ - A: my entrypoint in school was LaTex. 
+- Q: There was an effort called guile-emacs a while back, and there
+ was some effort to get guile to be able to compile and run
+ emacs-lisp, you mentioned there were still some challenges related
+ to guile, what road blocks kept some of these other efforts from
+ being used with Emacs?
+ - A: We never finished the problem of reconciling guile-emacs data
+ types with Emacs Lisp data types (such as handling nil/#f/()
+ interoperation [and string/buffer handling]).
+- Q: Are there any problems or disadvantages using the GNU AGPL for
+ non-networked software like Emacs packages?
+ - A: I figured the community would be happier if the radical
+ change did not happen in the license itself. 
+- Q: Is there a list of Emacs issues which can be solved by
+ programmers with different levels? For example my level is A, I know
+ basic elisp and C. How can i help?
+ - A: I don't know of one. I tend to think that people who know
+ only a basic knowledge. Looking at bugs and thinking about how
+ they could debug them, you could alert the developers. In the
+ process you'll learn more about how programs are written and
+ how to understand them. 
+- Q: What do you use emacs for beyond editing? Nice song :-)
+ - A: I use it for reading and writing email; this is what I do
+ most of the day.  (**Sings**) 
+ - "I've been answering my email,
+ - all the god-damned day / .. / <transcriber lost the thread
+ about here [lyrics available at
+ <https://stallman.org/doggerel.html#IveBeenAnsweringMyEmail>]
+- Q:With features like org-mode and enriched-mode, it seems like Emacs
+ is getting closer to the goal of WSIWYG. Are there specific ways in
+ which you see these as falling short?
+- Q: Do you use Org/Org-mode, and if so to what extent?
+ - A: No. Originally, it was an outlining mode that I never tried
+ to use. The documentation was not easy for  nme to grasp because
+ I had no use for it. Then others developed other ways to use the
+ org syntax. I was not interested in using the org syntax. The
+ process was daunting. It was not easy to separate other modules
+ used with org mode. Org mode could become an advance-- not
+ saying that it isn't useful-- if extended to do it, we could
+ use a replacement for texinfo. Texinfo's syntax was arcane and
+ was based on TeX. It could become a better way to write GNU
+ manuals. Probably more people know that syntax and if it could
+ be extended then it could be a superior way to write the
+ manuals. But we need to be able to generate all of the outputs
+ that we can generate now. HTML, info files, info browsers like
+ the one inside emacs, and generating input to TeX. This is not a
+ gigantic job. It is two or three medium-sized jobs.  
+- Q:Emacs is used by a small population relative to the population
+ that could benefit from it.  Do you have any thoughts on how to
+ expand the user base more broadly even among software developers?
+ - A: No. Basically, the fact is that vscode has an advantage--
+ which comes from Microsoft, which is putting it together as a
+ part of evil proprietary software... Users don't understand
+ that issue. I wish I could come up with a way to show them
+ what's at stake and why.  The TEDX talk is the closest thing. 
+- Q: It's hard to pick up Emacs if you do not speak English, can
+ something be done to address that?
+ - A: What do you actually suggest? Manuals? Messages that Emacs
+ displays? Command names? The easiest thing would be to deal wiht
+ the messages. It's hard to adapt it to Emacs because there is
+ no fixed set of messages. It could be done. It's not a terribly
+ hard process. Maybe differrent command names or an alternative
+ to meta-x. If you typed this other thing, it would only complete
+ over the other names in the native language. Working out the
+ details would take a great deal of thought. Docstrings: you
+ could write another set of them and write a set of help
+ commands. 
+- Q: What was the thought process behind making emacs lisp dynamically
+ scoped when you first created it? What advantages did it provide
+ over the alternative?
+ - A: It was simple. I did know how to implement it to build a
+ simple and small Lisp interpreter and being small was crucial to
+ bootstrap it on the hardware of that time. Things have changed
+ though, these days Eight Megabytes And Constantly Swapping is an
+ obsolete statement
+- Q: In light of that critique of JavaScript not being about the
+ language per se but rather the "culture of blindly getting and
+ running packages/libraries", what's so different with what's
+ currently done by the vast majority of Emacs/Elisp users to just
+ install packages blindly?
+ - A: Well, they know they're installing a package and that makes
+ all the difference. People could post various versions of a
+ package that people can look at and identify which to use or
+ whether one of them has horrible bugs. With JS there is no way
+ to do this, and most of these programs are not free. You don't
+ know which programs are being installed on your browser. These
+ things don't happen with elisp packages -- at least not when
+ they're in reputable package archives. 
+- Q: Do you think the freedom e.g., we have in Emacs, becomes a hurdle
+ for some people to pursue more important things in the world? I used
+ to do a lot of Emacs programming, but I recently try to stay away
+ from tinkering on Emacs.
+ - A: There may be more important things for you to do, but when
+ you look at all of the other distractions in the world it seems
+ unfair to criticize emacs. Look at video games which achieve
+ nothing but distraction. If you tinker with emacs code there is
+ a chance for you to discover something more important than how
+ to win a video game.
+ - Reply to Anwser: Sorry about the question. I do not intend
+ to criticize Emacs. It is more like a reflection on this
+ issue. The easiblity of jumping from anywhere in Emacs to
+ the source code, to the add-on packages, to the rich
+ documentation, to previous notes I have, becomes a strong
+ pulling force for me to do more important things. I often
+ found myself stay late in nights, and unable to have a good
+ sleep. Emacs gives me tremendous amount of freedom, I
+ definitely apprecitate it. On the other hand, I hate to stay
+ in non-free software, so I elimintate every possibility to
+ interact with them. This seems to be more effective to get
+ work done, since I only do the most important things, let it
+ go, and never thinking about the software. Don't get me
+ wrong, I agree with your point of view that the most
+ important thing GNU Emacs gives to the world is the freedom.
+ I  will do my part. 
+- Q: Do you still intend to merge your patch to the "shorthands"
+ feature to the master branch?
+ - A: Yes, but some work on the docstrings is blocking it. s.el
+ references other s.el functions in its docstrings and we'll
+ want to alter the docstrings, too. A new docstring construct
+ could fix that. We've added a lot alrady, one more would be
+ fine.
+- Q: Question about software freedom: how does it apply to software
+ that are art/media experiences, like videogames? In your view, Is
+ the creator of a videogame obliged to release it under a free
+ license?
+ - A: 
+- Q: And how would technologies like webassembly fit in with the
+ javascript issues?
+ - A: They don't change much. If the licensing situation is
+ handled the same way as with regular JS using LibreJS-recognized
+ license notices and complies with its license [like, by
+ providing its sources], it would be fine.
+- Q: Have you seen Haketilo <https://haketilo.koszko.org/> It looks
+ kinda like librejs?
+ - A: Haketilo is design to allow people to get some of the benefit
+ of free software. Potentially it offers a solution to the
+ javascript problem, but it has a long way to go. If you want to
+ do this, please do so. 
+- Q: Is writing a free software replacement to Github Copilot with
+ proper license attribution a good idea? (like Mozilla Common Voice)
+ - A: Maybe but remember that copilot is not a program, it is a
+ service. It is a computation that someone else will do for you
+ when you ask. What are the practical problems with doing that?
+ Not sure. Of course the server operates by running programs, but
+ there is still a difference. People who use copilot don't get
+ any kind of copy of the program. They send it to the server. It
+ might be a good idea. 
+- Q: Do you have any suggestions for helping propective contributers
+ streamline the copyright assignment needed to contribute to Emacs
+ (and other FSF software projects)?  If working for a large
+ corporation, simply navigating the internal beaucracy to find the
+ correct person/people to talk to who even understands what you're
+ talking about without a "deer in the headlights look" can be very
+ difficult.  This problem of gaining copyright assignment seems to be
+ a signifcant problem and ultimately splits people into two different
+ classifications, those who can contribute directly to FSF projects
+ (willing and able) and those who can't (willing but unable).
+ - A: The copyright assignment does not take long. The important
+ thing is the employer disclaimer. If your job entails
+ programming, we want to make sure that your employer does not
+ say, "you've got no right to contribute that program" and the
+ project is shafted. We are working on some simplifications to
+ make it easier for companies to say yes to it, but fundamentally
+ we need them to say yes. 
+- Q: What do you think of Hyperbole or EEV instead of org mode, or
+ other things for the stuff that org mode does "second brain /
+ knowledge base", or GTD 'getting things done' etc... among other
+ things in Emacs or other Emacs packages
+ - A: Well, I don't know that much about either of them. I don't
+ know EEV. I know Hyperbole, but it was many years ago. So I
+ can't have an educated opinion. Someone could study this, and
+ there would be a lot to study. If these are fairly similar-- is
+ either actually part of emacs? A: [Both are free software. ] 
+ - A: We might want to compare them to determine which is the best
+ possible add to emacs, but since I don't have specifics, I
+ don't want to state a priority preference. I don't have one. 
+- Q: I thought it was a virtue to separate the content from the style
+ or appearance of information. Part of being free is also to view
+ information in the format that you want. Does your WYSIWYG idea
+ erode this virtue and lead to more thinking -- perhaps undue
+ thinking about style over substance?  {seems like more freedom for
+ authors and less freedom for readers} (No the question is more about
+ the experience of creation.)
+ - A: I don't know actually. I know that in LibreOffice you can
+ make named styles, and you can change styles... Is that enough?
+ I am hardly a power user. 
+- Q: Do you ever dabble in retro-computing, e.g. logging into
+ TOPS10/20 systems SDF, etc?  
+ - A: No, I decided it's a waste of time. It's tinkering that
+ would not develop anything of any importance or use. And I know
+ if I'm going to enjoy developing something... I could enjoy
+ developing anything... I decided not to distract my attention
+ from useful computing. 
+- Q: Do you know Gemini <https://gemini.circumlunar.space/> ? (a
+ network of very simplified Markdown-like text files without images
+ and third-party content transmitted via an open/public/free protocol
+ which is not http(s)) If so, what do you think of it? (I'm dreaming
+ of a Gemini-web with interlinked Org mode syntax files)
+ - A: I don't remember and have no opinion. The lack of images
+ will turn out to be a considerable drawback. The exclusion of
+ images would be a big loss. 
+- Q: What is your opinion on the current state of large machine
+ learning/AI models? Even if the model is released under a free
+ license, it cannot be modified in a meaningful way without access to
+ vast quantities of training data, which isn't free. Even if it's
+ available, using the data requires datacenter-levels of computing
+ resources out of the reach of most users.
+ - A: I don't think that's true. You can modify it. You don't
+ need the previously used training data. The trained neural
+ network can be treated as source code. What else could it be? 
+- Q: Are there plans to bring modal editing (eg. evil-mode, viper) to
+ emacs core and did your opinion on modal editing change over the
+ years?
+ - A: I don't have a wish for that. Now it's not somehow morally
+ anathema. It's not a non-free program. How to incorporate this
+ into existing Emacs without doing any violence to its code is
+ the question. 
+- Q: Can complexity induced by company-funded free/libre code become a
+ problem, when the company pulls out, leaving the code potentially
+ unmaintainable?
+ - A: It's a matter of community, the same applies for software
+ developed by single individuals. Over-complicated programs
+ suffer more.
+- Q:  Hi Richard, do you know about [GNU
+ TeXmacs](<https://texmacs.org>)? If so, why doesn't it fit your
+ idea of a way to write rich documents with emacs-like keyboard-based
+ interfaces? (referring to "something like layout capabilities of
+ TeX and the editing capabilities of Emacs).
+ - A: 
+- Comment: If you've heard about attacks that others have been making
+ on me I refer you to stallmansupport.org.
+ <https://stallmansupport.org/>
+
+Some comments from IRC:
+
+- wasamasa : I admire the commitment and integrity. I'm just taking a step back and thinking if this should be expected, or a more pragmatic but still uncompromising approach would be warranted in the bigger scheme.
+- emacs has so many great features and packages just in the latest years and my feeling is that they are very much inspired/cloned/reworked from the features that came out of sublime text/atom/vs code/other current popular editor
+ - That's what happens when you have the freedom to shape the tool as you want. Different people like different features and sometimes (pretty often actually) it just happens that they end up implementing features they liked in other tools they used before.
+- it's important to state non-goals like fullblown webbrowser, javascript etc. because they are not obvious to newcomers and would add a lot of bloat
+
+Some comments from YouTube:
+
+- One thing I learned for sure after watching this great talk is that
+ Emacs is open to have all modern features that newer software like VS
+ Code use as long as it doesn't deteriorate user's freedom and privacy.
+
+- Great talk! I appreciate the continued effort into all things GNU,
+ ensuring our freedom to use these computers however we may choose. I
+ will add that the bits about JavaScript and the explosion of
+ complexity in browsers all being based in companies' unjust demand to
+ directly dictate what is displayed on a users screen are very clearly
+ true, and opens my mind up about how a truly free world is something
+ we need to continue to fight for
+
+- The formatted text editing in WYSIWYG was something I did not think I
+ would hear from RMS.
+
+- Looking at around 12:50, maybe it would be nice to have a nice
+ Org-Mode template that did that which incorporated the correct header
+ adjustments that could output in PDF or DOC forms for sharing. I keep
+ a couple of headers around that I reuse, but tweaking them is
+ monumental. It would be nice to have a "stock" selection of headers
+ for specific tasks.
+
+- RMS is a wonderful human being. Without him we would live in a world
+ of proprietary closed source software.
+
+- I would like to have "grammar sensitive selection and navigation" ...
+ basically putting numbers at the "syntax terms" (like variable, method
+ body, argument etc) .... But I'm not good/efficient enough at
+ programming to do something by myself ... I think this would make a
+ massive difference for coders and a nice feature to set apart from
+ IDEs. But hey, a man can dream :D
+
+- I still would love to see GNU/Hurd completed in my lifetime
+
+- Emacs 30 support for interoperation between libreoffice suite confirmed?? PogChamp
+
+Reactions:
+- <https://news.ycombinator.com/item?id=33888981>
+- [Why do we hack?](http://curious.galthub.com/blog/2022-12-04/)
+- [RMS On What He Wants and Doesn’t Want in Emacs](https://irreal.org/blog/?p=11013)
+- <https://www.reddit.com/r/emacs/comments/zktblg/emacsconf_2022_what_id_like_to_see_in_emacs/>
+
+[[!inline pages="internal(2022/info/rms-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/rms-nav)" raw="yes"]]
+
+[[!taglink CATEGORY:]]
diff --git a/2022/talks/rolodex.md b/2022/talks/rolodex.md
new file mode 100644
index 00000000..2da2a11f
--- /dev/null
+++ b/2022/talks/rolodex.md
@@ -0,0 +1,298 @@
+[[!sidebar content=""]]
+[[!meta title="Build a Zettelkasten with the Hyperbole Rolodex"]]
+[[!meta copyright="Copyright &copy; 2022 Ramin Honary"]]
+[[!inline pages="internal(2022/info/rolodex-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# Build a Zettelkasten with the Hyperbole Rolodex
+Ramin Honary ("Rah-mean" (hard-H) "Ho-na-ree", he/him.
+
+- Email: <mailto:ramin.honary@gmail.com>
+- Homepage: <https://tilde.town/~ramin_hal9001/>
+- Mastodon: <https://emacs.ch/@ramin_hal9001>
+- GitHub: <https://github.com/RaminHAL9001>
+
+[[!inline pages="internal(2022/info/rolodex-before)" raw="yes"]]
+
+
+"Zettelkasten" is a methodology for marshaling your knowledge,
+ideas, creativity, into a database of hyperlinked notes, each note
+representing a single quantity of knowledge. The method was first
+devised by a well-published social scientist named Niklas Luhmann.
+Though he constructed his database with actual slips of paper in a
+box with a notebook for indexing, naturally, modern software removes
+the manual labor from the process.
+
+In the world of Emacs packages, Org Mode is the most well-known
+package that provides the tools necessary for building a Zettelkasten,
+along with extensions such as "Org Roam" which add functionality that
+manage links between Org Mode documents. But Org Mode is not the only
+Emacs package to provide such tools.
+
+In this talk, I demonstrate how to use an oft-overlooked package
+called Hyperbole as an alternative to Org Roam for managing hyperlinks
+and building a Zettelkasten. In particular I use the Hyperbole
+"Rolodex" feature, called "HyRolo." It was originally designed for
+tracking your personal relations, but it can be used to build a
+Zettelkasten with almost no additional configuration or 3rd-party
+packages. HyRolo is a purely textual database, and does not require
+an external database software to index the notes. It also provides a
+very rich set of "actions" so that notes not only link to each other,
+but can also trigger Emacs to execute code as well.
+
+# Presentation outline:
+
+## Introduction
+
+ - Ramin Honary
+
+ - Software Engineer, App Developer (mostly Python and Haskell)
+
+ - Emacs user for about 4 years (since 2018)
+
+## Key Takeaway
+
+ - The Hyperbole hyperlink markup language lets you create links that
+ execute arbitrary Emacs commands.
+
+ - To link entries, create a hyperlink that executes a **HyRolo**
+ search.
+
+## Quick overview of the Zettelkasten methodology
+
+ - **Note:** most of what I say about the Zettelkasten method comes
+ from Sacha Fast of <https://zettelkasten.de>
+
+ - **Zettelkasten is:** a database of interconnected ideas
+
+## Tools I use in day-to-day writing
+
+ - **Hyperbole:** for hyperlinking, search, project management
+
+ - **Embark:** arranging text, copy and paste
+
+ - **Org-Mode:** for markup
+
+ - **Dired:** for working with sets of files
+
+ - **Consult, Vertico, Orderless, Marginalia:** interactive search
+
+ - **Magit:** Git revision control of my plain-text database
+
+## Quick overview of Hyperbole
+
+ - **Core functionality:** a markup language for hyperlinks
+
+ - Applications such as **HyRolo** and **Koutline** built on top of
+ this core functionality.
+
+ - **HyRolo** is the feature I use as my Zettelkasten.
+
+## Configuration of Hyperbole using `use-package`
+
+ ```emacs-lisp
+ (use-package hyperbole
+ :config
+ (setq hbmap:dir-user "~/.emacs.d/hyperb/")
+ (setq hyrolo-file-list '("~/.emacs.d/hyperb/ideas.org"))
+ (setq hyrolo-date-format "%Y-%m-%d %H:%M:%S"))
+ ```
+
+## The Hyperbole Menu-Driven User Interface
+
+ - Menus are a kind of modal user interface
+
+ - Enter menu with Hyperbole leader key `{C-h h ...}`
+
+ - Select menu items with key presses
+
+ - Works a little like `which-key`
+
+## Getting started with **HyRolo**: Create a *zettel*
+
+ - Add entry: `{C-h h r a}` "*hyperbole rolodex add*"
+ - Prompts you for a title for the entry
+ - The Zettelkasten file (e.g. ~idea.org~) is opened
+ - Write the body of the *zettel*, save the file.
+
+## Searching the *HyRolo* database
+
+ - Multiple search options: by **string**, by **regex**, by **word**.
+
+ - I use **string search** most often: `{C-h h r s}`
+
+ - String search provides logical `AND`, `OR`, `XOR`, `NOT`
+
+ - Executing a search opens the `*HyRolo*` buffer.
+
+ - Read-only mode buffer with useful single-key navigation.
+
+## Searching the **HyRolo** database
+
+ - **`{o}` as in "overview":** hides all but the headings
+
+ - **`{a}` as in "all":** shows all information under each heading
+
+ - **`{t}` as in "top":** shows top-level entries
+
+ - **`{n}` and `{p}`:** next/previous result
+
+ - **`{h}` and `{s}`:** hide/show a search result subheading
+
+ - **`{C-u r}` as in "regex":** prompts for a new string search
+
+ - **`{e}` or `{M-RET}` :** jump to that entry for editing, although
+ using this command inserts a new timestamp, I just use `{C-/}`
+ to undo insertion of the timestamp.
+
+## How is **HyRolo** a Zettelkasten?
+
+ - **Key take-away:** The Hyperbole hyperlink markup language lets
+ you execute *arbitrary Emacs commands.*
+
+ - To link Zettelkasten entries, create an hyperlinks that execute a
+ **HyRolo** search.
+
+## How to create an explicit link
+
+ 1. Highlight text to be linked
+
+ 2. `{C-h h e c}` to create a link
+
+ 3. Prompted for link text with highlighted region (press enter)
+
+ 4. Prompted for action: `hyrolo-fgrep`
+
+ 5. Prompted for search string: `hyperbole`
+
+## How "explicit buttons" encode actions
+
+ - A **separate file** from the HyRolo flat-file database.
+
+ - By default, called `.hypb`, exists in the same directory as the
+ HyRolo flat-file database.
+
+## Conclusion
+
+ 1. A Zettelkasten is database of ideas linked together
+
+ 2. The Hyperbole **HyRolo** can run search queries
+
+ 3. The Hyperbole markdown creates links that execute queries
+
+ 4. This results in a minimal but useful Zettelkasten.
+# Discussion
+
+## Notes
+
+- My blog: <https://tilde.town/~ramin_hal9001>
+
+## Questions and answers
+
+- Q: Why is the time-stamp not implemented as an Org mode PROPERTIES
+ entry? (e,g, :CREATED:)
+ - A: Hyperbole pre-dates Org-Mode, although the maintainers have
+ made efforts to make Hyperbole compatible with Org-Mode as much
+ as possible. You could ask Bob Weiner directly, but it could
+ just be for backward compatibility, trying to keep the
+ formatting for current Hyperbole users. You could raise that as
+ an issue, they may be willing to include a config option
+ allowing you to specify the time-stamp format.
+- Q: why Hyperbole/HyRolo over Org-Roam? (I don't use either, just
+ curious)
+ - A: HyRolo and Hyperbole require no other software beyond code
+ builtin to Emacs.  For example, when I first built Org-Roam, it
+ did not work properly for me and I had to modify the build
+ process to get it set up.  With Hyperbole, you install one
+ package and you can start working.
+ - A: ^this, and I find it to be a lighter-weight solution. I was
+ able to get it working without depending on SQLite or doing any
+ indexing. Hyperbole is also a more general solution that can be
+ applied to a wider range of use cases than just Zettelkasten.
+- Q: How does this scale to very large data bases?
+ - A: It works very well with fairly large personal databases.  No
+ one has ever complained about performance.  Generally, people
+ are surprised how fast it is given that there is no separate
+ indexing in the background.
+ - A: I personally do not have a large database so I don't know
+ for sure. But it is basically as efficient as Grep is, and I
+ have used Grep on multiple-gigabyte files without noticing it
+ being too slow. Modern computers are fast enough that indexing
+ isn't required for reasonable performance on smaller databases.
+- Q: The demo displayed how to search occurances of certain keywords
+ in a giant single-document text database. But what about other open
+ (or not open) Emacs buffers? Think of IRC chars, emails, etc.
+ - A: Set the hyrolo-file-list variaable to include any directory
+ of files you want to search.
+ - I mostly referred to non-file buffers.
+ - Searching through (for example) an IRC buffer is a
+ different command than searching through a directory of
+ files, and this makes sense for the "Rolodex" use
+ case, since typically your database will be a file, and
+ not an in-memory buffer. But you can create a hyperlink
+ button that triggers an ordinary "isearch"-like
+ command the same way you would execute other Emacs
+ commands.
+- Q: if I may ask, why Hyperbole/HyRolo over Org-Roam? (I don't use either, just curious)
+ - rswgnu: HyRolo and Hyperbole require no other software beyond code builtin to Emacs. For example, when I first built Org-Roam, it did not work properly for me and I had to modify the build process to get it set up. With Hyperbole, you install one package and you can start working.
+ - A: @lounge-060 I found Hyperbole to be a more light-weight option over Org-Roam.
+- Q: did i misunderstand, that each time he's hitting a button he's going to a temporary buffer which is a search result?
+ - A: yes, the button executes a search, so the cursor jumps to the search result buffer, but you can jump to other links within the same search result buffer.
+ - interesting, but i asked if a link can go directly to the source file, not a search buffer. i'm thinking like org's follow link, which isn't always accurate as i'd like.
+ - A: yes, you could do that. the Hyperbole link syntax does not have to execute a search, you can link directly to a file.
+- Q: can the hyperlink goto the ORG file buffer at a specific location?
+- Q: Thanks for the links. Can you recommend resources for incremental peg too?
+- Q: wonder how that compares to plain org-mode, with links and in particular "elisp" links to built-in org-agenda functions, or org-ql (any of alphapapa's packages really)?
+ - One relevant distinction is that Hyperbole provides "alternative" action for a link. You may not just follow it, but do other things. Org mode does not have that
+ - custom link types are quite extensible though, and with the "elisp" type it's possible to call into many things without such customization. I'll have to try Hyperbole though.
+ - hyperbole looks like it can use code, has some assumption of data types, etc
+ - A: Yeah, hyperbole is a very general solution for establishing connections between various pieces of information. Hyperbole is a global minor mode so it works everywhere.
+- Q: Why do you have only one file?
+ - A: it is just easier for me to keep all the realted information in a single file. I could split it into several files in a directory, but I don't see any benefit to doing that. You can point the search function to the directory, and it will search all of the files there.
+ - i honestly find the idea of tons of little files to be a problem. why not have many headings in a file by primary category
+ - HyRolo does use single files for its databases. Ramin is just migrating from keeping a separate Org file per note.
+- Q: One thing that stopped me from using Hyperbole is that is does not load for me :( Reporting bug is still in my todo list
+ - A: curious. If you load, can you run M-x action-key and get it to work? If so, it probably works but is blocked by your key bindings.
+- another obvious issue I faced is M-RET is already used by Org extensively
+ - I had to compromise on marks by setting leader keybinding C-SPC C-SPC to hyperbole action instead
+ - Q: rswgnu perhaps already asked before, but M-RET (default hyperbole action key) conflicts with org-mode use. For now I've resorted to using C-SPC C-SPC (with leader package) but is there another better alternative generally preferred? Perhaps one that does not conflict with a major feature like marks?
+- Q: what would you recommend with emphasis on "beginner level" when starting with org-mode and planning to create the "2nd brain" approach: org-roam or hyberbole?
+- Q: if you have a blog somewhere, I'll be very interested to read more. Your style of explaining and demo-ing things is quite nice
+ - A: My blog is https://tilde.town/~ramin_hal9001
+- Q: what advantage do you see in using hyperbole?
+ - A: The big advantage for me is the "explicit links" feature, it lets me create a database of links that work universally. For example, you can change the link in the flat file database, and it updates in all of your files. If you and I shared a Hyperbole link file, I could write a link `<(like this)>` right here in the chat buffer and you could use it from within the Emacs chat client ERC.
+
+## Other discussions from IRC
+
+- Feedback
+ - I like this method of the talk slides being kinda transparent so you can see the speaker behind them.
+ - This looks very interesting tbf
+ - Its cool to see how many different note taking packages there are in Emacs
+ - Very nice talk-- and very understandable for me as a beginner who had never heard of hyperbole and did not understand the use-case. I also have not heard or read of a Zettelkasten, so this was even more useful.
+ - This talk has already given enough ideas on making some stuff dynamic
+ - There is a very good chance I'll keep coming back to this talk and its transcript over the next year, just to see how I can improve my presonal workflow more by integrating Hyperbole. Right now, I just use hyperbole to more conveniently (and more importantly, with same keybinding everywhere) open links across Emacs.
+ - Great talk Rami
+n, thank you!
+- Hyperbole
+ - Nice-- I needed this talk yesterday having not been familiar with hyperbole and use cases.
+ - i've been waiting to see a hyperbole use case, so i'm watching =]
+ - (Hopefully I can finally grok what this Hyperbole thing is about and how it contrasts with Org/Org-mode and such)
+ - sounds very vanilla...which I like
+ - Hyperbole sounds like something I definitely should get into, but I havent looked into it
+ - finally something that helped me grok hyperbole ;]
+ - Seeing an application thereof, as opposed to an exposition of its capabilities in the abstract (though quite interesting too, thanks rswgnu!), has given me a slightly better understanding, thanks!
+ - hyperbole has been something i've struggled to understand from the docs and examples. i think i've finally started to get that it's a text hyperlink with potential code embedded.
+ - ty for the explaination, like i said, this has helped me refine my impression of hyperbole further.
+ - I'm quite looking forward to more integration between org and hyperbole
+ - Thanks ramin_hal9001, I'm further on my way to enlightenment about Hyperbole that I was that's for sure!
+ - Watching Hyperbole videos like this, not understanding it completely: to me, Hyperbole doesn't have much advantage if you're happy with (bi-directional) Org mode links (as demoed in 15min). However, I do think that Hyperbole does have many advantages when you're starting to embrace the idea of "dynamic links" of all sorts. So far, I did not get creative enough to start with Hyperbole for that
+ - rswgnu : If I may ask, I keep looking for either uses cases or capabilities that Hyperbole could bring to bear beyond what I'm doing with Org/Org-mode (taking in account that its has custom link types and elisp links and such), are there some that would come to mind? I've watched most videos and skimmed the documentation a few times, but I'm still not reaching the aha moment, yet, but I feel one use case could change that.
+ - It could be interesting to use Hyperbole to auto-detect various links in Emails by matching common text patterns
+
+[[!inline pages="internal(2022/info/rolodex-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/rolodex-nav)" raw="yes"]]
+
+[[!taglink CategoryHyperbole]] [[!taglink CategoryZettelkasten]]
diff --git a/2022/talks/sat-close.md b/2022/talks/sat-close.md
new file mode 100644
index 00000000..e1e097b9
--- /dev/null
+++ b/2022/talks/sat-close.md
@@ -0,0 +1,50 @@
+[[!sidebar content=""]]
+[[!meta title="Saturday closing remarks"]]
+[[!meta copyright="Copyright &copy; 2022 EmacsConf organizers"]]
+[[!inline pages="internal(2022/info/sat-close-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Saturday closing remarks
+
+
+[[!inline pages="internal(2022/info/sat-close-before)" raw="yes"]]
+
+
+- Wheeeee! We made it to the end of the first day! Thank you so much
+ for joining us for the first day of EmacsConf 2022.
+- Pre-recorded talks are up on the talk pages and at
+ <https://media.emacsconf.org/2022>
+- We'll work on extracting the Q&As from the recordings in the weeks
+ to come. If you'd like updates, please subscribe to the
+ emacsconf-discuss mailing list.
+- Thanks
+ - Thank you to all the speakers, volunteers, and participants.
+ - This year's conference hosts are zaeph and bandali and our
+ streamer sachac
+ - Thanks to our captioning volunteers: sachac, bhavin192, Tom
+ Purl, Hannah Miller, triko, and anush, and also to the speakers
+ who captioned their own talks. Thanks to quiliro for translating
+ the meetups talk into Spanish subtitles, which you can find on
+ the talk page. 
+ - Thanks to Akshay Gaikwad for design contributions.
+ - Thanks also to other volunteers: corwin, vetrivln, dto, jman,
+ FlowyCoder who worked on all the other things that are needed to
+ make this happen.
+ - shoshin whose music you will hear tomorrow
+
+# Discussion
+
+- Q: we will gush tomorrow ...  so many good talks today, and so well
+ organized!
+ - A: Yay all those wonderful speakers! And there'll be even more
+ tomorrow, so tune in!
+
+
+[[!inline pages="internal(2022/info/sat-close-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/sat-close-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/sat-open.md b/2022/talks/sat-open.md
new file mode 100644
index 00000000..11cb6e54
--- /dev/null
+++ b/2022/talks/sat-open.md
@@ -0,0 +1,22 @@
+[[!sidebar content=""]]
+[[!meta title="Saturday opening remarks"]]
+[[!meta copyright="Copyright &copy; 2022 ${speakers}"]]
+[[!inline pages="internal(2022/info/sat-open-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Saturday opening remarks
+
+
+[[!inline pages="internal(2022/info/sat-open-before)" raw="yes"]]
+
+
+
+
+[[!inline pages="internal(2022/info/sat-open-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/sat-open-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/schedule-2022-12-03.svg b/2022/talks/schedule-2022-12-03.svg
new file mode 100644
index 00000000..c3a9d317
--- /dev/null
+++ b/2022/talks/schedule-2022-12-03.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sat</text> <a href="2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <rect x="8" y="15" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(39,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="2022/talks/school" title="Back to school with Emacs"> <rect x="75" y="15" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(106,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <rect x="125" y="15" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(139,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <rect x="191" y="15" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(222,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="2022/talks/meetups" title="Attending and organizing Emacs meetups"> <rect x="400" y="15" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(414,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="2022/talks/buddy" title="The Emacs Buddy initiative"> <rect x="450" y="15" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(464,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <rect x="483" y="15" opacity="0.8" width="50" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(531,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="2022/talks/realestate" title="Real estate and Org table formulas"> <rect x="583" y="15" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(614,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <rect x="633" y="15" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(664,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <rect x="700" y="15" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(714,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <rect x="750" y="15" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(764,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="2022/talks/localizing" title="Pre-localizing Emacs"> <rect x="100" y="100" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(131,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <rect x="175" y="100" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(189,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <rect x="208" y="100" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(239,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <rect x="400" y="100" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(431,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <rect x="475" y="100" opacity="0.8" width="50" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(523,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <rect x="583" y="100" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(614,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="2022/talks/eev" title="Bidirectional links with eev"> <rect x="658" y="100" opacity="0.8" width="8" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(664,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="2022/talks/python" title="Short hyperlinks to Python docs"> <rect x="683" y="100" opacity="0.8" width="8" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(689,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="2022/talks/haskell" title="Haskell code exploration with Emacs"> <rect x="708" y="100" opacity="0.8" width="50" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(756,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 4</text></g></svg> \ No newline at end of file
diff --git a/2022/talks/schedule-2022-12-04.svg b/2022/talks/schedule-2022-12-04.svg
new file mode 100644
index 00000000..c0e8b517
--- /dev/null
+++ b/2022/talks/schedule-2022-12-04.svg
@@ -0,0 +1 @@
+<svg width="800" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sun</text> <a href="2022/talks/survey" title="Results of the 2022 Emacs Survey"> <rect x="8" y="15" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(39,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="2022/talks/orgyear" title="This Year in Org"> <rect x="58" y="15" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(72,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <rect x="100" y="15" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(131,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="2022/talks/links" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <rect x="166" y="15" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(180,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> links</text></g></a> <a href="2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <rect x="216" y="15" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(230,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <rect x="400" y="15" opacity="0.8" width="50" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(448,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="2022/talks/workflows" title="Org workflows for developers"> <rect x="483" y="15" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(514,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <rect x="550" y="15" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(581,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <rect x="633" y="15" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(664,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <rect x="700" y="15" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(714,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="2022/talks/rde" title="rde Emacs introduction"> <rect x="100" y="100" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(131,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="2022/talks/justl" title="justl: Driving recipes within Emacs"> <rect x="175" y="100" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(189,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <rect x="208" y="100" opacity="0.8" width="50" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(256,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="2022/talks/detached" title="Getting detached from Emacs"> <rect x="400" y="100" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(414,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <rect x="458" y="100" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(472,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="2022/talks/async" title="Emacs was async before async was cool"> <rect x="516" y="100" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(547,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="2022/talks/wayland" title="Emacs should become a Wayland compositor"> <rect x="608" y="100" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(622,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <rect x="666" y="100" opacity="0.8" width="16" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(680,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="2022/talks/dbus" title="The Wheels on D-Bus"> <rect x="725" y="100" opacity="0.8" width="33" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(756,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="darkgray" x="0" y="183" font-size="10" text-anchor="middle"> 4</text></g></svg> \ No newline at end of file
diff --git a/2022/talks/school.md b/2022/talks/school.md
new file mode 100644
index 00000000..eaf34d95
--- /dev/null
+++ b/2022/talks/school.md
@@ -0,0 +1,102 @@
+[[!sidebar content=""]]
+[[!meta title="Back to school with Emacs"]]
+[[!meta copyright="Copyright &copy; 2022 Daniel Rösel"]]
+[[!inline pages="internal(2022/info/school-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# Back to school with Emacs
+Daniel Rösel (ˈrøːzl̩, IRC: velocitatem, <mailto:daniel@alves.world>, <https://daniel.alves.world>)
+
+[[!inline pages="internal(2022/info/school-before)" raw="yes"]]
+
+This talk is aimed at those who would be interested in using Emacs for
+school purposes. What it will present the listeners with is a
+collection of tips and trick on how to be more efficient when taking
+notes and organizing student life. Methods should apply to a target
+audience studying at a university or high school.
+
+Outline:
+
+- **Part 1:** 5 - 10 min
+ - Present benefits of using Emacs over other software/hand-writing
+ - Present packages which support the mentioned benefits
+ - Packages used
+ - Usage and application of each package
+ - The ecosystem as a whole
+- **Part 2:** ~5 min
+ - Demonstrate the work-flow
+ - Show applications in various regions of academics
+ - External input from other users
+
+# Resources
+
+<https://gitlab.com/velocitatem/lectorg>
+# Discussion
+
+## Notes
+
+- ReOrg <https://github.com/velocitatem/reorg>
+- LectOrg <https://gitlab.com/velocitatem/lectorg>
+
+## Questions and answers
+
+- Q:regarding exporting notes from remarkable does this system works
+ with any tablet? Would love to use it with a boox max etc.
+ - A: Unfortunately, it does not (directly). The current software I
+ use makes use of OneDrive so in theory it could be integrated
+ with others.
+- Q: quiliro: is there a demo for lector?
+ - A: quiliro See <https://gitlab.com/velocitatem/lectorg>
+- Q: <quiliro> velocitatem: are you opening the pdf inside emacs?
+ - A: The PDF was being open in firefox.
+- Q:Have you tried org-noter for taking notes on pdfs?
+ - A:I have not, will make sure to check it out tho!
+- Q: How does lectorg diverge from using something like YASnippets for
+ the math insertations, etc. 
+ - A: It uses YASnippets to inser the math functions, the main idea
+ is to provide those snippets and to use them with lectorg's
+ functions to plot graphs.
+- Q: Can your notes interact with the vidoes at all? ex timestamps or
+ inserted subs, external player "mpv"
+ - A: As of now, they cannot, but that is a wonderful idea!
+- Q:  do you find that you can type fast enough / keep up with live
+ lectures using Lectorg?
+ - A: Not 100% but the package makes it easier for me to deal with
+ other things while taking notes
+-  <korkeala> velocitatem : thanks for the talk! you mentioned
+ integration with remarkable notes, could that be with other hand
+ writing software, like xjournalpp?
+ - A: I am really not certain, but im sure it could be. Since
+ reMarkable has a very proprietary cloud, the integration is a
+ bit of a hack.
+- Q: Is there a way of making latex rendering go in the background?
+ Also to lower its 
+ - A: 
+- Q: did you open that firefox from inside EXWM or is it a separate frame?
+ - Its bspwm
+- Q: "With lectorg you can easily capture the every detail without your attention wavering a single bit." What makes Lecter not waver your attention?
+ - Not 100% but the package makes it easier for me to deal with other things while taking notes
+ - It makes some actions more automated and quicker
+ - You can see some of the functions and snippets improving my speed when opening certain files or creating markup for my notes
+- how does the remarkable import works? can it be used with other tablets?
+ - Speaker: I am really not sure, but im sure it could be. Since reMarkable has a very proprietary cloud, the integration is a bit of a hack
+- how does the function graphing work?
+ - Insert new latex function with graph using `lectorg/insert-new-function`
+ - Generate graph for existing latex function with `lectorg/generate-graph-for-function`
+- I do read using nov.el and I use bookmarks. Is there a way to link the ePUB to your org documents?
+- how long have you been using Emacs? Did you find that you could take notes productively right away or did it take you a while before you reached the point where you could follow e.g. a lecture sufficiently quickly?
+ - Iv been using Emacs for about a year now. It definitely took me a while to become more productive
+- nov.el adds nov: link type
+- How you considered using something like https://mathpix.com/blog/image-to-latex-converter to speed up your workflow entering Maths equations, I wonder if an streamlined integration exists for that in Emacs already 🤔
+- I also have a remarkable, and would love to learn more about how other people integrate their hand-drawn notes into their org-mode notes :)
+- thanks velocitatem! I am considering whether to recommend it to my students; I have been using Emacs a long time and it is easy to forget how long it took to get into it ;)
+- yeah, same. Both handwritten notes and Treesitter are super interesting to me :)
+
+
+[[!inline pages="internal(2022/info/school-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/school-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/science.md b/2022/talks/science.md
new file mode 100644
index 00000000..b3fc4be9
--- /dev/null
+++ b/2022/talks/science.md
@@ -0,0 +1,167 @@
+[[!sidebar content=""]]
+[[!meta title="Writing and organizing literature notes for scientific writing"]]
+[[!meta copyright="Copyright &copy; 2022 Vidianos"]]
+[[!inline pages="internal(2022/info/science-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Writing and organizing literature notes for scientific writing
+Vidianos Giannitsis (<mailto:vidianosgiannitsis@gmail.com>)
+
+[[!inline pages="internal(2022/info/science-before)" raw="yes"]]
+
+Literature notes are a cornerstone of one's zettelkasten. Especially for scientific writing which needs to be based on bibliography, having notes on the literature you read is essential. Inspired by a chapter of "How to Take Smart Notes" by Sonke Ahrens - one of the best Zettelkasten books out there - which talks about the process of writing a scientific article, I crafted a heavily personalized workflow for writing and organizing my literature notes, which I wanted to present to you. Due to university, I have worked on assignments meant to simulate scientific articles and through them I refined this workflow to what it is today, which I am very happy with. I even wrote my own package for addressing part of this workflow, which will be a pivotal part of the talk. I have tried to not overcomplicate the talk, but a familiarity to zettelkasten and scientific writing is expected to get the most out of the talk.
+
+This talk will focus on how Emacs has aided me in scientific writing and will cover how I use various packages for this. Featured will be: Org-noter, one of my favourite emacs packages which I use to annotate articles using org-mode while reading them. I will focus primarily on its integration with my org-roam-capture-templates and how it, org-roam-bibtex and ivy-bibtex work together to very easily create and flesh out literature notes for the articles I find, but I will also briefly mention how I annotate articles. Then, how I use org-roam to then take what I learned from this literature and create permanent notes on it which I can then add easily to my Zettelkasten. And finally, how I organize both literature and permanent notes on a subject using my own project, the zetteldesk package, and how I can very easily create a first draft of my work using this. With the draft created organically through my notes, it is then almost effortless to write the final work, as it consists simply of reading the draft, making small changes and fixes and perfecting it so it is a ready product.
+
+## Links
+
+- [Zotero](https://www.zotero.org/), the app I use for capturing
+ literature I find, which is unfortunately not in Emacs as I haven't
+ figured out a good way to do this from Emacs. (P.S. if you have a
+ good workflow for doing this from inside Emacs, I would love to have
+ a discussion with you because leaving Emacs annoys me).
+
+- [Org-Roam](https://www.orgroam.com/), the bread and butter of almost
+ everything in my workflow. Org-roam creates my zettelkasten and is
+ the basis of the other packages here.
+
+- [Ivy-bibtex](https://github.com/tmalsburg/helm-bibtex), the package
+ that allows Emacs to read .bib files and do things with them,
+ allowing for bibliography management in Emacs.
+
+- [Org-roam-bibtex](https://github.com/org-roam/org-roam-bibtex).
+ Integration between the 2 packages listed above so I can easily add
+ literature notes to my Zettelkasten.
+
+- [Org-noter](https://github.com/weirdNox/org-noter), the package that
+ does all the annotating. I can't take notes on an article without
+ org-noter, its just the best way to do it.
+
+- [Zetteldesk](https://github.com/Vidianos-Giannitsis/zetteldesk.el)
+ my personal project which was inspired by making this workflow work
+ in Emacs. This package facilitates everything discussed in the last
+ part of the talk about organizing your literature.
+
+## Bio
+
+I am Vidianos Giannitsis, a 4th year chemical engineering student who loves to use Emacs. I have been using Emacs for about 2 and a half years and at this point it has become the most important part of my workflow. After seeing how awesome Emacs is, I was very inclined to learn elisp to truly customize Emacs to its limits. So I did, and at the start of 2022 I started working on a package of mine "zetteldesk.el". This package was inspired from "How to take smart notes" the well known zettelkasten book. I read something there and I was like, surely I can implement this in Emacs, can't I. And so I did.
+
+I have watched EmacsConf for the last two years and I was interested in participating in it myself. Since I recently wrote a package of mine, I thought it was a good opportunity to make a talk of my own. So I made this talk about managing literature as it is something I believe I can deliver unique information and something I have worked on a lot recently.
+# Discussion
+
+## Notes
+
+- Zettelkasten and zetteldesk
+ - <https://github.com/Vidianos-Giannitsis/zetteldesk.el>
+ - <https://github.com/Vidianos-Giannitsis/zetteldesk.el/wiki>
+ - Available on MELPA as well.
+- Org-capture--pandocs into a note-taking format
+- Karl Voit: Capturing HTML content from my Firefox is easy with
+ <https://github.com/kuanyui/copy-as-org-mode>
+- Leo Vivier's personal email address is dude@suits-do-suit-me.fr
+ ;-) Spam me!
+- link to Leo's talk from last year:
+ <https://emacsconf.org/2021/talks/erg>
+- Great talk, but I wish images in org mode would scroll smoother. It's a deal breaker for me. Does anybody know of a package that allows that?
+ - not sure but iirc emacs 29 has pixel-perfect mouse wheel scrolling instead for line-wise scrolling -- maybe that solves that?
+ - try M-x pixel-scroll-mode
+- have you looked into org-ref and specifically doi-utils? It adds a command that will download a bibtex entry for a given DOI. It even downloads the article (if possible) or to attach at pdf to it.
+- oh cool. what is the name of this package that scrolls an article? "org noter" "noder"?
+ - org-noter
+ - doctorhoo: I am using it quite intensively. The download does not work so often thanks to the journals making it difficult (I guess), but it is easy enough to add a manully downloaded one. The download of the bibtex (and assignment of a sensible key) on the other hand works very reliably.
+- This is a great demo. Thank you!
+- What is doing the org-mode presentation?
+ - its org-tree-slide-mode
+- That was excellent. Thanks very much!
+- wow that was really nice. thank you
+- thanks vidianos
+- oooh, dired icons
+- Great presentation and a nice Q&A session
+- For my part, I like seeing talks on zettelkasten !
+- zettelkasten is exciting but I ended up doing something much simpler
+- thank you again for a great presentation. very inspiring.
+
+- From the speaker: I saw a lot of kind words while scrolling here to see if there are any questions. Thanks a lot everyone! Happy to be part of this conference
+
+## Questions and answers
+
+- Q:Do you use fleeting notes as well? Do you keep them in org-roam?
+ - A:<https://github.com/Vidianos-Giannitsis/Dotfiles/blob/master/emacs/.emacs.d/libs/zettelkasten.org#fleeting-notes>
+ - To document the answer I gave live I am adding a small
+ description of it here. I do use fleeting-notes which I manage
+ with org-journal. I have a custom function
+ (org-roam-init-fleeting-note) in the link above which gives the
+ note an id (makes it an org-roam note), gives it a todo value
+ and links it to my Current Projects node. This way, the note is
+ inserted to my zettelkasten. But, when the TODO value becomes
+ DONE I have a hook that removes the ID. This is the method I use
+ for archiving fleeting notes when they are no longer needed. I
+ don't use org-roam-dailies as I am not aware of a way to
+ archive them that is this seamless.
+- Q:Does it work for PDFs only or can we use it for Word and Excel
+ files too? or epub, websites "eww" or videos like youtube?
+ - A:Leo says Org-noter does allow epub notes through an
+ extensions, and works with DocView for Office docs. Can also use
+ Pandoc
+- Q: I used to take notes on PDFs similarly in org-noter, but the
+ recent Zotero PDF reader is also very nice. Have you looked into
+ integrating the Zotero PDF reader with org-noter?
+ - A: While the program is nice the author dosn't use it becouse
+ it is not emacs nor have emacs bindings
+- Q:Great presentantion Vaidanos. Can you let us know your thoughts on
+ Zettlekasten's future?
+ - A: Zettelkasten has a great future because plaintext will never
+ go away
+ -        and orgmode is open source with a vibrant community.  Leo
+ adds: Zettelkasten popularity shot up big in 2020.
+- Q: Have you found a way to get a nice "overview of multiple notes"
+ to re-arrange them? Like physically putting many small notes on a
+ table and re-arranging them?
+ - A: Original goal of speaker's new package Zetteldesk.el is to
+ get notes
+ -        in a table and organize them. The idea is to use the
+ Zetteldesk as a scratch buffer. But making it graphical would be
+ hard.  (do check the 3rd demo of the talk if you haven't
+ already at 11:10 mins)
+ - A: The Koutliner in the GNU Hyperbole package can be used for
+ this where all notes would be organized, autonumbered and
+ automatically have a per-file unique hyperanchor ID.  You can
+ move notes/ideas around the same way you do in Org outlines. 
+ Besides collapsing and expanding trees of notes, you can also
+ clip the view to a particular number of lines per note for
+ overviews.  It supports Org tables too.
+- Q: Following up on the previous question, it seems difficult or
+ impossible to do with emacs rendering, but perhaps with similar
+ strategies as org-roam-ui one could get a Zooming User Interface for
+ manipulating the notes on a big canvas. This is a FOSS prototype:
+ <https://jermolene.com/cecily/> and this is a SaaS (proprietary)
+ one: <https://www.napkin.one/>. What are your thoughts on this? Do
+ you think it makes sense with your workflow?
+- Q: Can we use Zettlekasten for coding too? Especially when using
+ IDEs like Visual Studio and Excel?
+ - A: Not sure, speaker is not in coding beyond Emacs Lisp and
+ MATLAB. But he thinks it should be possible. Don't think it
+ breaks the principles of Zettelkasten, can make notes for
+ concepts. Leo confirms that note taking can be useful for
+ programming and problem solving. Leo says code could be good for
+ Zettelkasten "atomizing".
+ - Comment from Karl Voit: I'm not using Zettelkasten myself but
+ when I code, I'm heavily relying on my personal knowledge base
+ which also includes Python snippets and sources (in my case) as
+ I'm not a frequent programmer. So I forget the most basic stuff
+ from one session to the next when there are weeks/months
+ in-between. In the same fashion, a knowledge-base realized with
+ a Zettelkasten is something that helps you here, producing
+ better code and remembering previous
+ patterns/tricks/sources/...
+- Q: will your zetteldesktop.el be available in elpa?
+
+
+[[!inline pages="internal(2022/info/science-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/science-nav)" raw="yes"]]
+
+[[!taglink CategoryZettelkasten]] [[!taglink CategoryOrgMode]] [[!taglink CategoryOrgRoam]]
diff --git a/2022/talks/sqlite.md b/2022/talks/sqlite.md
new file mode 100644
index 00000000..89146b51
--- /dev/null
+++ b/2022/talks/sqlite.md
@@ -0,0 +1,175 @@
+[[!sidebar content=""]]
+[[!meta title="Using SQLite as a data source: a framework and an example"]]
+[[!meta copyright="Copyright &copy; 2022 Andrew Hyatt"]]
+[[!inline pages="internal(2022/info/sqlite-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Using SQLite as a data source: a framework and an example
+Andrew Hyatt (he/him)
+
+[[!inline pages="internal(2022/info/sqlite-before)" raw="yes"]]
+
+Emacs can now be built with SQLite, giving native support for reading
+and writing to a database. With this, we can start seriously
+considering a SQLite-first approach: instead of storing data on the
+filesystem, and using various ad-hoc solutions for metadata, we can
+use SQLite to store and search our data. This is essentially a
+tradeoff between the power and speed of SQLite and the universality of
+the filesystem. If we accept that this approach is useful, then a
+standard way to store information in database, may be useful and
+promote package interoperability, just as our single filesystem does.
+The triples packages is a RDF-like database for supplying such a
+flexible system for storing and retrieving data from SQLite. A sample
+application, ekg, a replacement for org-roam, is shown using this, and
+the advantages of the triple design are explained.
+
+For more information and the packages discussed here, see the
+[triples](https://github.com/ahyatt/triples) and
+[ekg](https://github.com/ahyatt/ekg) pages.
+
+# Discussion
+
+- <https://www.reddit.com/r/emacs/comments/zexv6b/using_sqlite_as_a_data_source_a_framework_and_an/>
+- <https://news.ycombinator.com/item?id=33853509>
+
+## Notes
+
+- <https://github.com/ahyatt/triples>
+- <https://github.com/ahyatt/ekg>
+- <https://www.gnu.org/software/hyperbole/man/hyperbole.html#Implicit-Buttons> -
+ discussed in the next talk could really help simplify access to your
+ triples and ekg primitives; have a look when you have time.
+- You had some delicious recipes in there. Made ME hungry!
+- Thanks, that's insightful
+
+## Questions and answers
+
+- Q:  To what extent did Datomic influence the design of triples? 
+ <https://www.datomic.com/>
+ - A: I wasn't aware of Datomics, but I think both triples and
+ Datomics are influenced by RDF & trends in Knowledge Graph
+ construction in the industry.  I took a look at that page, and
+ one interesting thing they do is (AFAICT) store edits to the
+ database instead of actual values, allowing you to reconstruct
+ the database or go forward or backward in time.  This is very
+ interesting, and I'm thinking of ways to make the database
+ safer, but not sure if I can get to such sophisticated
+ properties in this implementation. 
+- Q:built into Emacs? nice. multiple schemas (so to say
+ differentiation of "databases" (if you will so) are possible with
+ that built-in instance?
+ - A: Yes, with emacs 29. Full-featured with multiple databases,
+ transactions, etc.
+- Q:What about collaborative editing whith this? Multiple computers
+ with multiple emacs like crdt.el with org mode?
+ - A: Database are great for more async collaboration, multiple
+ people / processes can add to the repository at the same time. 
+ But I think it's not going to be a great solution for multiple
+ users modifying  the same buffer.
+- Q:What about using this on multiple computers? How would you
+ syncronize the data?  (This is a minor problem in org-roam where if
+ you share files between multiple computers, their SQLite databases
+ get out of sync and require M-x org-roam-db-sync to rebuild the
+ SQLite database.)
+ - A: This is an unsolved problem, one that I'm interested in
+ looking into.  There possibly are standardized db solutions to
+ this, but I don't yet know what they are.
+- Q: With EKG what about views like org roam node mind map view? Or
+ org mode virtual view for integration with other org packages?
+ - A: This is possible, it just needs to interface with the
+ database in a different way.  It's all graphs, so really any
+ triple library might be a good fit for this.
+- Q:  Are you planning to further develop EKG? It is highly
+ interesting to me, I do prefer SQLite over text.
+ - A: Andrew is using it; not ready for general use but quite soon
+ -- towards the end of  the month! Still in exploratory mode
+ though. Still thinking about (some of) the fundamental
+ concepts. 
+- Q: Is it then possible to combine the triples DB with some custom
+ tables in the same SQLite file? (e.g. to build a log table next to
+ the triples tables for quick query of event data)
+ - A: You could do that. AT the moment it's just one table
+ (triples). It's designed to be one table in one DB -- beware
+ of consistency issues if you add further tables, which you can
+ definitely do.
+- Q: What are your thoughts on adding a timestamp attribute to triples
+ so that the DB becomes append-only and by default you return the
+ latest fact for a subject/object pair?
+ - Q+ -> Use is to keep a record - you don´t delete? e.g. you get
+ all past addresses of a person or all past versions of a given
+ fact. Even version control for notes.
+ - A: I haven't thought of that / not seen in other triple stores
+ - A: Be ware that these DBs already take quite a bit of space
+ - A: may make synchronization easier
+- Q: can ordinary lisp data types (lists, symbols, etc) be stored in
+ the data base
+ - A: Yes, if you don't specify, it defaults to a list. Not sure
+ that was the right design choice; lists map to rows with a
+ hidden index column. emacs-sql and this also represent most
+ things as strings. 
+- Q: beyond note taking what kind of packages do you think would
+ benefit from triples library?
+ - A: Anything where you have lisp forms stored in a file would
+ probably be better implemented via a database.  And the triples
+ library makes this easy and standardized.  So, for example BBDB,
+ which is a "database" should actually be in a database.  And
+ then you might want to annotate, tag, etc, so having be in one
+ big database makes a lot of sense to me, because I think all
+ this kind of info wants to live together. 
+- Q: Are you trying to create a PIM with EKG?  What information do you
+ primarily want to manage?
+ - A: Yes, I think many uses of emacs is in line with PIM, and
+ those use-cases are a good fit for triples / ekg.  Notes,
+ people, projects, maybe even being able to integrate with org
+ and manage TODOs there as well.
+- Q: What about using other databases programs Postgres mongoDB etc..
+ [see last q too, but I guess you refer to other relational, e.g.
+ Postgresql]
+ - A: Those could work, maybe the triples library would work via
+ emacsql with those, but I haven't tested it.  I'm not sure
+ what the benefit would be, typically these database tend to be
+ simple and small, so a more full-featured DB is probably
+ overkill.  MongoDB and those kinds of row-oriented databases
+ probably wouldn't be a good fit, but I haven't tried it.
+- Q: What is your preferred reference to understand triples/graph dbs?
+ (e.g. think better about schema design)
+ - A: I know from using them / talking about them. I will come back
+ with some references!
+- Q: Will it slow down with a growth of database?
+ - A: there is a tradeoff -- triples gives you a standard schema,
+ but you lose the power of getting things in one SQL expression -
+ which makes it slow. But I have a bunch of data (2yrs of
+ org-roam usage) and it is still very fast. These limits exist,
+ but the usual rate of content creation is not large enough to
+ hit the limits.
+- Q: What are your thoughts on allowing for a "true" graph-db
+ backend? (whatever the current best free software alternative to
+ neo4j is, I guess). 
+ - A:  In my usage, the graph DBs tended to be slow and somewhat
+ clumsy in usage, we returned every time to SQL [please reword
+ if appropriate]. At the moment not a glaring need (for the
+ quantities of data people manage in Emacs).
+- Q: How hungry did you get while writing and recording this?
+ - A: I forgot that I used recipes as an example in my demo! 
+ org-roam / ekg and other things are a great way to cook better,
+ BTW.  When you make a recipe, write a org-roam daily (or in ekg,
+ an entry tagged with the date and the recipe) with notes about
+ how it went, what could be better, etc.  Then you can later see
+ the recipe and notes on it at once, which helps you further
+ refine the recipe.
+- Q: beyond note taking what kind of packages do you think would benefit from triples library
+
+Other discussions from IRC:
+
+- I like the font he's using in his org doc.
+- In some way, triples (turtle, RDF and similar things) describe a directed graph, where echa edge is like: Subject--Predicate-->Object. A datalog can describe this too (for example: with predicates like triple(S,P,O)).
+
+
+[[!inline pages="internal(2022/info/sqlite-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/sqlite-nav)" raw="yes"]]
+
+[[!taglink CategoryEmacsLisp]]
diff --git a/2022/talks/sun-close.md b/2022/talks/sun-close.md
new file mode 100644
index 00000000..8dc73050
--- /dev/null
+++ b/2022/talks/sun-close.md
@@ -0,0 +1,253 @@
+[[!sidebar content=""]]
+[[!meta title="Sunday closing remarks"]]
+[[!meta copyright="Copyright &copy; 2022 ${speakers}"]]
+[[!inline pages="internal(2022/info/sun-close-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Sunday closing remarks
+
+
+[[!inline pages="internal(2022/info/sun-close-before)" raw="yes"]]
+
+- Questions/comments related to EmacsConf 2022 as a whole?
+ <https://pad.emacsconf.org/2022>
+- Pre-recorded talks should already be up on the talk pages and at
+ <https://media.emacsconf.org> . We'll upload them to Toobnix and
+ YouTube as well in the coming weeks. (Some are already available.)
+ We'll also collect the recordings from the Q&A sessions and post
+ them. You can subscribe to the emacsconf-discuss mailing list
+ (<https://lists.gnu.org/mailman/listinfo/emacsconf-discuss>) for
+ updates.
+ - corwin - I'll jump in at this point
+- Love the conversations and the community? Here's how to keep going:
+ - Lots of meetups both online and in person:
+ <https://www.emacswiki.org/emacs/Usergroups>
+ - Like the IRC conversations? There's an #emacs channel,
+ #org-mode, #emacs-beginners on irc.libera.chat (put #emacs in
+ the channel field on chat.emacsconf.org, or use an IRC client
+ (bandali maintains ERC =) ) )
+ - If you blog about EmacsConf or Emacs, please let me know at
+ sacha@sachachua.com so I can include it in Emacs News
+ (<https://sachachua.com/emacs-news/>) . 
+ - <https://lobste.rs/t/emacs> , <https://reddit.com/r/emacs/> ,
+ <https://reddit.com/r/orgmode/> 
+ - Mastodon: there's a lively community at <https://emacs.ch>
+- Corwin - stop here
+- Flowy - starts here
+- Want to help out with EmacsConf? Please e-mail
+ emacsconf-org@gnu.org or emacsconf-org-private@gnu.org and we will
+ assimilate you. =) Volunteers get early access to the talks and end
+ up learning a lot about Emacs along the way. You don't need to be
+ very technical; all levels of experience, interest, and availability
+ welcome.
+ - Next up: copying the pads and extracting notes from IRC so that
+ they can be added to the wiki; adding chapter markers and
+ captions for Q&A; ...
+- Would be great if the webpage timestamps could be localized to the
+ web browser's local time.
+- Thanks
+ - Thank you to all the speakers, volunteers, and participants, and
+ to all the people in our lives who make this possible.
+ - This year's conference hosts are zaeph and bandali and our
+ streamer sachac (who did not go crazy managing two streams at
+ the same time, yay Org Mode and OBS in the cloud!)
+ - Flowy - stopping here
+ - Who next? ʕ ·ᴥ·ʔ?
+ - Maybe sachac?  It's about the captioneers!
+ - Thanks to our captioning volunteers: sachac, bhavin192, Tom
+ Purl, Hannah Miller, triko, and anush, and also to the speakers
+ who captioned their own talks. Thanks to quiliro for translating
+ the meetups talk into Spanish subtitles, which you can find on
+ the talk page. 
+ - Thanks to dto for describing things in #emacsconf-accessible.
+ - Thanks to everyone who added notes and questions to the pad, and
+ especially to publicvoit and jrootabega.
+ - zaeph can take care of this from here
+ - Thanks to bhavin192 for last-minute reencoding and captioning,
+ and to his brother for lending us a beefy computer for
+ last-minute panicky reencodes.
+ - Thanks to Akshay Gaikwad for design contributions (notably the
+ next-talk slides)
+ - Thanks also to other volunteers: corwin, vetrivln, dto, jman,
+ FlowyCoder, and vetrivln who worked on all the other things that
+ are needed to make this happen.
+ - Thanks to Zen Monk Alain M. Lafon, Alex Mihov, Phil Hofmann, and
+ friends from 200ok.ch and Ardeo for organizing an in-person
+ EmacsConf satellite in Lucerne, Switzerland in their Coworking
+ Hub venue
+ - Thanks to shoshin whose music you heard today
+ - Thanks to the GNU Project and the Free Software Foundation for
+ Emacs and the mailing lists, and libera.chat for IRC community
+ support. 
+ - Thanks to Ry P for the server that we're using for OBS
+ streaming and for processing videos.
+ - Thanks so much to all the organizers and participants in
+ EmacsConf 2022! (All of you! =) You're all awesome.)
+- From chat:
+ -  <edgarvincent[m]> I'd be very happy to help.
+ -  All right! Looking forward to hearing from you - please
+ e-mail us at emacsconf-org@gnu.org
+ - <minad> Seriously, an emacsconf-mode would be great. I browsed
+ the website from eww, started vlc from eww, irced from Emacs.
+ The only thing missing was this etherpad.
+ - <edgarvincent[m]> Yes, it may sound a bit cheesy, but it is
+ nonetheless very  true: I think emacs conf does a great job of
+ bringing in very different people together and producing a great
+ feeling of togertherness.
+
+## Questions
+
+- Q: What did you use to make this? 
+ - All free/libre/open source tools:
+ - One private Org file with speaker/volunteer/talk info
+ - The talks were generally run using run-at-time,
+ org-after-todo-state-change-hook, and some TRAMP (by the
+ way, TRAMP does not like being run from timers at the
+ same time, so we shifted some talks =) )
+ - A public Org file for processes:
+ <https://emacsconf.org/2022/organizers-notebook>
+ - An ansible repo for configuration management:
+ <https://git.emacsconf.org/emacsconf-ansible/>
+ - Lots of Emacs Lisp:
+ <https://git.emacsconf.org/emacsconf-el/>
+ - TRAMP for writing files and running commands on remote
+ computers
+ - OBS for streaming, Icecast for sharing the stream with
+ viewers
+ - VNC for letting hosts and streamers connect to the same
+ display for OBS streaming
+ - screen for naming shell commands and making them easier to
+ resume and kill
+ - BigBlueButton for video Q&A
+ - Mumble for speaking on the stream as well as for backstage
+ communications
+ - ERC for Internet Relay Chat within Emacs, The Lounge for
+ web-based IRC
+ - Ikiwiki for the wiki (editing through git commits)
+ - Etherpad for collaborative note-taking
+ - ffmpeg for reencoding videos to free (patent-unencumbered)
+ formats and compressing them
+ - Captioning (<https://emacsconf.org/captioning>):
+ - OpenAI Whisper for computer-generated transcripts to be
+ reflowed and edited by captioning volunteers
+ - Some Emacs Lisp code to help with reflowing
+ (emacsconf-reflow, in
+ <https://git.emacsconf.org/emacsconf-el/>)
+ - Aeneas (<https://www.readbeyond.it/aeneas/>) for
+ synchronizing reflowed text with the audio files
+ - subed.el (<https://github.com/sachac/subed>) for editing
+ captions within Emacs (synchronizes with MPV)
+ - MPV for playing videos (config tips:
+ <https://emacsconf.org/mpv/>
+ <https://git.emacsconf.org/emacsconf-ansible/tree/roles/obs/templates/mpv.conf>)
+- Q: How do you have multiple font sizes, countdowns and clocks in
+ fundamental mode?
+ - A:
+ <https://git.emacsconf.org/emacsconf-el/tree/emacsconf-stream.el>
+ : see emacsconf-stream-display-clock-and-countdown. You can
+ propertize a string with face attributes and then insert it.
+- Q:  [what were the] participation rates (# of users) [this
+ year]?
+ - A:  High-water mark was around 350: 240 people on Gen and ~100
+ on Dev.  It's not clear how these metrics compare to prior
+ years because we ran two streams in parallel this year. (i.e. a
+ given person could be watching both streams at the same time.)
+- Q: 
+ - A:
+- Q: A great problem is having too many talks that we have split into
+ 2 tracks. What about having multiple conferences a year?
+ - A: Want to help organize another one? =)
+- Q: "emacsconf-org.el" to elpa/core? :)
+ - There's a repo, it's probably very idiosyncratic, happy to
+ chat with whoever's interested - sachac
+ - A:
+- Q: My streaming improved immensely once I implemented the mpv
+ solution. I could have benefited from a short "how to" beforehand
+ for the command line tool. 
+ - A: ooh, good point, we'll recommend that more next time
+- Q: Suggestion really-- a few setup videos that orient people to the
+ tools and conventions for participation. would be better. I think
+ y'all also need to load balance Leo-- turn him into an MC and
+ allow someone to field and queue up questions.  That way Leo would
+ not be in a hurry to get back to the next presentation. He could
+ hand off the mic to someone who could facilitate. 
+- The number of users in the chat seem to have been around the 150 count. Is this typical-- less than normal participation? Higher participation? It would be a good data point from the organizers to note.
+- are we going to get participation rates (# of users) in the closing remrks?
+- quiliro: Would it be useful for next year's EmacsConf if I volunteered to set up crdt for creating pads directly from Emacs?
+- Q: Is there an EmacsConf howto?
+ - Impressive event... I wish sachac or bandali would provide an EmacsConf howto!
+- does the Emacs survey have geographic demographics on users? might use that to inform EmacsConf schedule
+
+## Discussion
+
+- Keep up the great work for EmacsConf every year
+- what a great weekend. been using emacs for 30+ years and still learned a boatload.
+- it's so nice the community keeps things rolling forward. thanks y'all for the work of organizing all this!
+- Definitely so much new stuff
+- Got stuff to tinker with for a month or two
+- thanks to all organizers and presenters. everything so well done!
+- And besides the organizers, thanks to everyone who gave a talk this year!!
+- pretty nice talks and emacsconf in general! Thanks a lot
+- I think we can all say that we enjoyed a lot of the talks
+- this conf already goaded me into trying out 29 (building on a mac, so far. Linux boxen are next) to try the core tree sitter stuff. I need to go back and watch talks I miss and follow up on notes I already have. Love all this content!
+- thanks a lot organizers! emacs, emacs people, emacsconf - all are outstanding 8-)
+- Great emacsconf, as always! Thank you all that have been involved making it happen!
+- As a longtime Emacs user, it was great to stumble on this conference. Thanks
+- bandali sachac zaeph & team : What a treat this yearly EmacsConf, many thanks to you for your outstanding work... once again!
+- 07:25] <bandali> <3
+- some notes on how we did it in the pad
+- Meeting or rather seing yu all reinforces the belive in me that Emacs is the better computing thing. It can archive this! Thank you.
+- I had to make some decisions on which track to listen to, but that comes with the territory, I suppose. The two traks worked great.
+- Me too. It went very well!
+- emacsconf.org -- It's a domain name! It's an org-mode file! It's a domain name and an org-mode file!
+- Tracks
+ - Yeah, there were some points where I wanted to watch 2 talks at the same time as well
+ - But I really liked the 2 tracks
+ - But, I liked the fact that it gave more time for Q&As and we were more relaxed
+ - Last year was much more of a hurry
+ - This edition went extremely smoothly.
+ - I don't think that many people watched both talks at the same time.
+ - I'm not sure, I think people who watched dev would probably be interested in gen also.
+ - most people would find their preference and not jump-room
+- Stack:
+ - //git.emacsconf.org looks to be interesting!
+ - Yes! Our wiki is git based (which I think is really cool)
+- Timezones:
+ - I am in Europe and I personally like the time in which the talk is for me more than the American timezone
+ - I try to schedule all the talks based on speaker availability
+ - I wouldnt like waking up at 9 am in the weekend
+ - But I think its good both for Americans and Europeans
+ - for me it was great because I wake up 4 hours before start and go to sleep 1 hour after closing
+- I think that previewing the talks would be great to be able to make more or better questions
+ - volunteer again next year! =)
+ - sure, sachac .... it has been a great experience...even better than giving a talk! more relaxed at least
+- I loved sameer's talk even with the problems
+- I loved that 95% of the talkes had captions. that is why i could follow up with the Sameer talk
+- i was impressed about the feedback the organizers had before and during the event
+- this organization was impressive
+- thanks to you for being so active during the two days of conference!
+- even being active in chat helps make the conference feel more alive
+- wanting to experience more of the conference in Emacs
+ - I found it a bit hard to switch between Emacs, IRC, VLC and the Etherpad. Something like crdt.el would be great.
+ - Impressive techsetup and execution. Amazing that you did this with that much polish and utility. I think next thing would be an Emacs mode :P
+ - Seriously, an emacsconf-mode would be great. I browsed the website from eww, started vlc from eww, irced from Emacs. The only thing missing was this etherpad.
+ - and even my mpv was running inside Emacs....in EXWM
+ - I have top half taken by emacs split into a bunch of irc windows and the bottom split into two with etherpad on the left and the mpv on the right
+ - Yes Emacs collaboration is missing. But maybe next? I too had most in emacs. Beste.
+ - I absolutely agree. Actually, I was unconsciously expecting to access the conf from within Emacs, for some reason (well, to some extent, I did, by using empv for the videos and ement for the chat :)
+ - I had the schedule in Agenda. You could download a localized org schedule.
+ - Yes this could be more visible #feedback
+ - https://github.com/isamert/empv.el (a package which allows one to use mpv from within Emacs)
+ - Organizing and running, and attending, an online conference about Emacs, all in Emacs - take that VS Code
+- jman, FlowyCoder, bandali : I did not see you.... were you in the back end?
+ - quiliro, i was a bit more present this year actually, but mainly on the dev track rather than gen
+ - bandali was hosting the dev track so on screen here and there and various voice overs;jman and FlowyCoder were indeed running different backstage things
+
+[[!inline pages="internal(2022/info/sun-close-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/sun-close-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/sun-open.md b/2022/talks/sun-open.md
new file mode 100644
index 00000000..7c83247e
--- /dev/null
+++ b/2022/talks/sun-open.md
@@ -0,0 +1,23 @@
+[[!sidebar content=""]]
+[[!meta title="Sunday opening remarks"]]
+[[!meta copyright="Copyright &copy; 2022 ${speakers}"]]
+[[!inline pages="internal(2022/info/sun-open-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Sunday opening remarks
+
+
+[[!inline pages="internal(2022/info/sun-open-before)" raw="yes"]]
+
+
+
+
+
+[[!inline pages="internal(2022/info/sun-open-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/sun-open-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/survey.md b/2022/talks/survey.md
new file mode 100644
index 00000000..4e1238bf
--- /dev/null
+++ b/2022/talks/survey.md
@@ -0,0 +1,160 @@
+[[!sidebar content=""]]
+[[!meta title="Results of the 2022 Emacs Survey"]]
+[[!meta copyright="Copyright &copy; 2022 Timothy"]]
+[[!inline pages="internal(2022/info/survey-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Results of the 2022 Emacs Survey
+Timothy (he/him, IRC: tecosaur)
+
+[[!inline pages="internal(2022/info/survey-before)" raw="yes"]]
+
+If I am giving this talk, then a month ago the 2022 Emacs Survey will
+have occurred! I will go through the motivations, implementation,
+results, and plans of the Emacs Survey.
+
+Outline:
+
+- A quick overview of the main results of the 2022 Emacs Survey
+- Discussion of motivation, implementation, and future plans
+
+
+# Discussion
+
+## Notes
+
+- 2020: 7000 participants in the survey (Adrien Brochard)
+- 2022: new survey framework: julia (language) + Genie Framework
+- 2022: 6600 responses (1000 partial); 115 nations; 96% male (better
+ among younger people)
+- the plots are using Makie, a Julia plotting library
+
+## From IRC
+
+- Magit
+ - magit is more popular than org mode :-O
+ - Magit was more popular in 2020 too, however the gap has narrowed in the 2022 results 😀
+ - magit is a miracle
+ - I've read about people who use Emacs for magit ONLY!
+ - magit deserves every heart given
+ - I love magit and I am not even a developer so I can only imagine how amazing it is for people who use it for actual work
+ - Especially since for programmers, which is a large chunk of emacs users, version control is probably more important than org I would assume
+ - ieure, i see why people might think that, but svn is non negotiable at work. my question was: does magit do anything useful for all merging VCS that could be included in VC?
+ - The difference between terminal git and magit is huge for me, even as someone who doesnt use it every day
+ - If your repos are mostly standard source and not dependent on huge binary assets or anything, you're missing out on better VCS first and foremost
+ - but judging by the way users extol magit, it must do something better than vc that can be applied to all merging version control systems (non locking ones). if someone can tell me what it is and i find it useful, i might add it to vc
+ - I use both VC and Magit actively and I've found it's mostly about the enhanced interactivity with Git. It's very visual and also allows you to pretty much interactively set/unset flags to various Git commands as you would on the terminal but much faster all thanks to transient.el.
+ - +1 for transient being a big part of why people find magit easier to use.
+- New versions
+ - We have to be careful about selection bias when it comes to versions used.
+ - my worry is that people on older versions are less up to date with what is going on and might not hear about the survey :/
+ - the way i see it packages don't really have to officially support versions of emacs older than the latest release
+ - unless they're big and see frequent updates for new platforms
+ - i.e. TRAMP
+ - otherwise users of older versions will just backport those packages themselves
+
+## Feedback
+
+- Survey framework
+ - oh yeah, the new framework was super pleasant to use, am a fan
+ - Liked how there was a way the responses were saved (locally?), and there was a possibility to resume answering later!
+ - from a user's perspective, the UX was amazing including download-options for my own answers. Impressive.
+ - I loved this year's platform too! so another +1 here
+- found the pie charts a little hard to follow, e.g. what color related to that package etc. Maybe add more labeling to the chart itself?
+ - on that topic, some of the colors were also very close (eg. Haskell and Java in the language graph)
+- I'd suggest that bar charts with more than 5 colors be labeled at the bar versus in the margin. (Also take mercy on the color blind)
+ - i'd suggest using a different tiled pattern for each bar instead of colors. That makes them easier to follow, especially for the color blind, or for people who cannot see colors well at night (me)
+ - Speaker: Hopefully this isn't too bad for the colour blind, I chose Paul Tol's colour schemes for that reason (among others)
+- i took part in that survey! *proud of accomplishment*
+- First, a general BIG THANK YOU for your survey!
+- nice, thanks for working on all of this
+- this is an amazing talk.
+- org mode huge, always forget how much of that pie it brings in
+- nice pie chart :)
+- lobste.rs getting bigger lately?
+- i am going to be interested in how the results differ when you factor out /r/emacs
+- the graphics are gorgeous
+- hence while I sprinkle in phrases like "within this more engaged subset of users ..." 😉
+- Hmmm, I didn't think about using Emacs as my chat / email client as counting as writing prose in Emacs. But it does.
+- (and the same with Org 😛)
+- magit applies to many mode, there is only one org-mode ;]
+- I don't think I can stop using magit
+- man who are these people filling the survey in less than 10 min?
+- Excellent talk! Thank you.
+- thanks for the talk btw, it was very interesting
+- Very informative. Nicely done!
+- Excellent work, looking forward to further analysis
+- Very nice presentation!
+- Thanks Timothy, great talk!
+- Thanks, great talk! *clapclapclap*
+- Great presentation
+- next year, I will join survey
+- Great talk and thanks for all this nice work!!
+- my compliments for your great analysis of the survey's data
+
+## Questions and answers
+
+- Q: will there be another survey next year as well?
+ - That's the plan, and the year after, etc.
+- Q: Do Emacs developers take into account the survey results? I mean,
+ they are volunteers working on what they find useful/interesting for
+ them, which is of course great.
+ - A: There's no obligation for emacs-devel or Emacs package
+ maintainers to do anything in response to the survey results,
+ but hopefully the results will be able to inform development
+ choices they make.
+- Q: are you planning to have the software used beyond Emacs surveys?
+ - A: It could well be, it's written as a general survey platform
+- Q: Is the survey software available in source code via
+ Gitlab/Github/...? What's the license?
+ - A: Yep, it's GPL-3, and the source is availible at
+ <https://git.tecosaur.net/tec/emacs-survey>
+- Q: Are the raw results available so we can run some data analysis
+ ourselves?
+ - A: Indeed! As mentioned in the talk they're publically
+ availible in a number of formats, e.g.
+ - <https://emacssurvey.org/results/3425413930.csv>
+ - <https://emacssurvey.org/results/3425413930.json>
+ - <https://emacssurvey.org/results/3425413930.db>
+- Q: Any specific reason why you chose Julia as a language to code the
+ survey (curious about it)?
+ - A: I use it a lot, and like doing so :)
+- Q: Do you have any insight on the degree of selection bias (the
+ respondents may represent a very particular segment of the overall
+ users, in terms of motivation to respond). The nb of days of
+ response after announce may indicate that respondents are very much
+ in touch with emacs news.
+ - A: We can try to look at the degree to which the survey referrer
+ (r/emacs, HN, etc.) changes the survey results, but ultimately
+ this is a hard question. At the end of the day, the way I view
+ things is we can just do our best to investigate how much of an
+ effect is seen in the results, but this is the best shot we have
+ availible.
+ - A2: That said, we can compare a few particular statistics to
+ other surveys done in a wider population to gauge how close our
+ results are to them, but that assumes that those other surveys
+ (e.g. Stack Overflow's developer survey) are themselves
+ representative of the Emacs user base, itself can be quite an
+ assumption.
+- Q: Are the pies in gnuplot or something else?
+ - A: The plots are using Makie, a Julia plotting library.
+- Q: Thoughts on an emacs package to fill out the survey? Just more
+ work for you ;)
+ - A: Hopefully more work for someone else ;)
+- Q: Is the survey framework open sourced already or still in the
+ works?
+ - A: (replied above, IIUC) it's GPL-3 and the source is available
+ at <https://git.tecosaur.net/tec/emacs-survey>
+- Q: what did you use to draw the diagram in p.7?
+ - Inkscape
+- Q: you might go into this in a second, but are there any specific questions you are looking to go into when you find the time?
+
+
+[[!inline pages="internal(2022/info/survey-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/survey-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/tramp.md b/2022/talks/tramp.md
new file mode 100644
index 00000000..cf7b5076
--- /dev/null
+++ b/2022/talks/tramp.md
@@ -0,0 +1,28 @@
+[[!sidebar content=""]]
+[[!meta title="Elisp and the TRAMP: How to NOT write code you don't have to"]]
+[[!meta copyright="Copyright &copy; 2022 Grant Shangreaux"]]
+[[!inline pages="internal(2022/info/tramp-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# CANCELLED: Elisp and the TRAMP: How to NOT write code you don't have to
+Grant Shangreaux (Shang-groo or Shang-grow, he/him, <mailto:shoshin@cicadas.surf>, <https://cicadas.surf/~shoshin>, IRC: shoshin on libera.chat, @kheya@mastodon.social, <https://matrix.to/#/@shoshin:cicadas.surf>)
+
+[[!inline pages="internal(2022/info/tramp-before)" raw="yes"]]
+
+When you have a hammer, everything looks like a nail. When you have
+Emacs, everything looks like&#x2026; what? This is a story of understanding
+a particular feature of Tramp and realizing it could be used in all
+sorts of places in Emacs-land. Some of them are truly useful, but I
+ended up in a place where applying it was going to create a non-trivial
+amount of work writing Emacs Lisp to extend EMMS.
+
+
+
+[[!inline pages="internal(2022/info/tramp-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/tramp-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/treesitter.md b/2022/talks/treesitter.md
new file mode 100644
index 00000000..317cf3f5
--- /dev/null
+++ b/2022/talks/treesitter.md
@@ -0,0 +1,121 @@
+[[!sidebar content=""]]
+[[!meta title="Tree-sitter beyond syntax highlighting"]]
+[[!meta copyright="Copyright &copy; 2022 Abin Simon"]]
+[[!inline pages="internal(2022/info/treesitter-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Tree-sitter beyond syntax highlighting
+Abin Simon (IRC: meain on libera.chat, Matrix: @meain:matrix.org, <mailto:mail@meain.io>)
+
+[[!inline pages="internal(2022/info/treesitter-before)" raw="yes"]]
+
+Tree sitter has seen a lot of development recently, but more often
+than not folks are only aware of its use for syntax highliting. The
+idea of this talk is to introduce some other usecases where they could
+benefit from tree-sitter.
+
+This talk will be an overview of the kind of things that they will be
+able to do with tree-sitter with demos but won't go in depth into how
+they would all of them. The presentation will link to the resources
+mentioned during the talk where folks can learn more about each of
+them.
+
+This session will introduce them to things like (not final list):
+
+- textobjects using tree-sitter: <https://github.com/meain/evil-textobj-tree-sitter/>
+- Folding using tree-sitter: <https://github.com/emacs-tree-sitter/ts-fold>
+- Navigating config headings: <https://blog.meain.io/2022/navigating-config-files-using-tree-sitter/>
+- Using tree-sitter for narrowing: <https://blog.meain.io/2022/more-treesitter-emacs/#narrow-to-language-level-constructs>
+- Intelligent snippets using tree-sitter: <https://blog.meain.io/2021/intelligent-snippets-treesitter/>
+- Using tree-sitter to get which-func like functionality: <https://blog.meain.io/2022/more-treesitter-emacs/#show-current-class%2Ffunction-name-in-modeline>
+- Some useful tree-sitter functions: tree-sitter-save-excursion
+
+
+# Discussion
+
+## Notes
+
+- The speaker's blog: <https://blog.meain.io/>
+- Fancy Narrow: <https://github.com/Malabarba/fancy-narrow>
+- Text objects using tree-sitter in evil-mode:
+ <https://github.com/meain/evil-textobj-tree-sitter/>
+- Notes/Slides: <https://github.com/meain/emacsconf-talk-tree-sitter>
+
+## Questions and answers
+
+- Q: What treesitter package is being used I think there is 3
+ different ones
+ - A:  Most of what is demoed here is using
+ <https://github.com/emacs-tree-sitter/elisp-tree-sitter>
+- Q: Can the folds be treated as outlines as in outline-minor-mode
+ folds?
+ - A: I don't think the package ts-fold which I showcased works
+ with outline mode, but it should be simple enough to add
+ something like that
+ (<https://github.com/emacs-tree-sitter/ts-fold>)
+- Q: Is there any benefit to use tree-sitter for sexp-based languages?
+ +1
+ - A: Being able to query for specific things like variables /
+ conditions might come in handy
+- Q:Do you have to have an LSP set up in order to use tree-sitter?
+ - A:I still use eglot for lsp. While tree-sitter help with
+ highlighting, folding, nav etc . . tree-sitter can be more
+ thought of to be working on a single file. So when I need to do
+ project wide things like jump to defenition, find reference or
+ renames lsp comes in handy.
+- Q: Is there any example configuration for the transition from
+ traditional major mode to new *-ts-major-mode? It seems that
+ configuration of major mode (xxx-mode-hook, yasnippet, etc) has to
+ been rewritten
+ - A: I am just starting to work with builtin tree-sitter, so
+ don't have much input here  unfortunately :(
+- Q: So, is there a tree-sitter language definition for elisp?
+ - A: I'm just starting to look into built-in tree sitter, but I feel like we should be able to do all of them.
+- Q: awesome stuff. i always wonder when itll appear in my fingers. sure the lib is in 29 but i guess some glue is required?
+- Q: thanks for the great talk. I have one question. Will tree sitter able to highlight syntax in sourceblocks of org files?
+ - A: there is nothing technically stopping one from enabling highlighting in config blocks. Since I don't use org, I've not really looked into how it currently is.
+- Q: So Emacs 29 includes the original tree sitter C library by Max Brunsfeld or is it a custom rewrite?
+- Q: what about the relationship between emacs-tree-sitter and treesitter in core emacs
+ - A: there are just two Emacs side implementaions for the tree-sitter lib <https://tree-sitter.github.io/tree-sitter/> . The first one is in Rust and the second in C within core
+ - A: I have not extensively tested out the builtin one, but both should be more or less the same. The builtin one is less mature as of now and has a slightly different api.
+ - A: Plus most plugins that work with tree-sitter will be working with elisp-tree-sitter only as of now
+ - I'm speaking of the the third party package. Perhaps it has been fixed. IIUC the issue is not the emacs package but rather tree-sitter itself.
+ - A: You might wanna open an issue at https://github.com/emacs-tree-sitter/tree-sitter-langs if you are having issues with tree-sitter highlighting
+- Q: biggest difference between the treesitter functionality built into Emacs 29 and the emacs-tree-sitter github package?
+- Q: Are there any sample configurations about *-ts-mode integrated with default major-mode?
+- Q: Building Emacs 29 with native tree-sitter support seem challanging any useful tip.
+ - building emacs ... tips from Xah Lee <http://xahlee.info/emacs/emacs/building_emacs_on_linux.html>
+- Q: How much of what you showed can be done with the build-in tree-sitter?
+- Q: How easy is it to hack the syntax definition?
+ - A: It is super easy once you learn a bit about tree-sitter. This is how the highlight queries looks like. <https://github.com/emacs-tree-sitter/tree-sitter-langs/blob/master/queries/python/highlights.scm> Once we have this, the tree-sitter integration can take care of the rest.
+- Q: So Emacs 29 includes the original tree sitter C library by Max Brunsfeld or is it a custom rewrite?
+ - both elisp-tree-sitter and tree-sitter in emacs core are emacs side wrappers on top of the tree-sitter lib from Max.
+- Q: What was the name of the module used for doing AST queries on the current buffer?
+ - A: for viewing and querying the tree, they are commands built into `tree-sitter-debug-mode` and `tree-sitter-query-builder`
+
+## Other IRC discussions
+
+- thanks for the great talk meain!
+- thank you for the talk
+- Great talk. Can I use this with Python? Bash?
+- Amazing stuff!!! I need that YAML thing!
+- When I am writing lisp macros I'm always having problems with the highlighting. I'm seeing this can be achieve with tree-sitter, is there a more streamlined way of doing it with treesitter - with less code?
+- thank you for tree-sitter talk, It's awesome
+- Now I definitely need to try tree-sitter
+- very inspiring talk, the future looks bright!
+- Very well done talk. Thank you.
+- I've actually added a lot of highlighting for rust mode on my editor, using tree sitter. It's very powerful once you get into it
+- with the new *-ts-mode, seems that a lot of configurations of language specific major mode have to be rewritten
+ - A: yup, there are quite a few things that being rewritten a bit like indent, highlight etc.
+- yup, previously I would just jump to top after reformatting code. These days I've been also trying https://github.com/radian-software/apheleia which has been pretty good at keeping the position by using some other methods
+- I use your tree-sitter package for a long time, It works very stable.
+- I use tree-sitter write plugin to replace paredit: https://github.com/manateelazycat/grammatical-edit
+
+[[!inline pages="internal(2022/info/treesitter-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/treesitter-nav)" raw="yes"]]
+
+[[!taglink CategoryTreeSitter]]
diff --git a/2022/talks/wayland.md b/2022/talks/wayland.md
new file mode 100644
index 00000000..9f633c8a
--- /dev/null
+++ b/2022/talks/wayland.md
@@ -0,0 +1,122 @@
+[[!meta title="Emacs should become a Wayland compositor"]]
+[[!meta copyright="Copyright &copy; 2022 Michael Bauer"]]
+[[!inline pages="internal(2022/info/wayland-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs should become a Wayland compositor
+Michael Bauer[[!sidebar content=""]]
+ (IRC: permcu, <mailto:perma-curious@posteo.de>)
+
+[[!inline pages="internal(2022/info/wayland-before)" raw="yes"]]
+[[!template id="help"
+volunteer=""
+summary="Q&A could be indexed with chapter markers"
+tags="help_with_chapter_markers"
+message="""The Q&A session for this talk does not have chapter markers yet.
+Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="wayland-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]]
+
+
+Since Emacs learned wayland last year, it can now become a wayland compositor.
+Emacs is already a great window manager. Let us embrace this in the wayland
+future, where managers become compositors.
+
+In this short talk I would like to convince you that this is a good idea and get
+you exciting about the possibilities. I then outline how to go about
+implementing this idea.
+
+Afterwards I would very much like to get a discussion started together.
+
+Discussions:
+
+- <https://news.ycombinator.com/item?id=33849556>
+
+# Discussion
+
+## Notes
+
+- Call to action - let Michael know if you know anyone else working on
+ something like this so they can collaborate and not duplicate
+ effort.
+- Site (coming soon): perma-curious.eu
+- I am an EXWM user and would be very happy to test your code! Looks great!
+- I know of many people quitting EXWM because of the lack of active development. Your project could be a kind of revival!
+- I would be interested to try it out. I'm on sway right now.
+- What I mean is that people are moving to other WMs which work or are planned to work with Wayland
+- sway.el might have something that could be used
+- Feedback:
+ - Thank you very much for the talk and the work.
+ - Thank you for sharing your amazing work!
+ - Yes, thank you for the talk, looks really promising
+ - thank you for the talk
+ - Thanks and great job!
+
+## Questions and answers
+
+- Q: Are you using it as a replacement of EXWM?
+ - A: No, not yet, but I'm planning to.
+- Q:Is this testable?
+ - A:
+- Q: Have you considered contributing it to emacs core? 
+ - A:
+- Q:Question: this is wayland compositor in Emacs? What different with
+ XReprarent in X11 ?
+ - A:No, I planned it, but no. Does not handle file descriptors.
+ It's a compositor that talks to Emacs. etc. I don't know what
+ XReparent is; have to skip that.
+- Q:What does it mean for emacs to be "a wayland compositor"? What
+ can the end users do with it?
+ - A:
+- Q: How would multiple monitors be handled? Separate Frames?
+ - A:
+- Q:  Could you make it so you can restart emacs without loging out;
+ or switch to non emacs buffers while emacs is blocking: these are
+ the biggest issues with EXWM? Maybe in the future with a different
+ ui for non emacs buffers.
+ - A: 
+- Q:Did this project can implement *mirror* of buffer for Emacs
+ different window?
+ - A:
+- Q:How does the single-threaded affects the project?
+ - A:
+- Q:this technology need write wayland server? Can it works with
+ Gnome3 ?
+ - A:
+- Q: Could there be a emacs-wayland-server and just connect with
+ emacsclient?
+ - A:
+- Q: When you share your code, could you provide the equivalent of an
+ .xsession script for those who are on EXWM and want to test?
+ - A:
+- Q: there have a demo to show this emacs-wayland-compositor, even it
+ buggy now? Just curious. ;)
+ - A:
+- Q: So the current limitation is that buffer mirroring doesn't respect different widths/heights?
+ - A:(answered - transcript tbd)
+- Q:Could you use some of this package with other walyand compositers
+ "probably not all of it" , sway, kde, river, gnome.
+ - A:(answered - transcript tbd)
+- Q:Will Wayland support reach feature parity with EXWM in the future?
+ Will there be other tradeoffs?
+ - A:(answered - transcript tbd)
+- Q: What is the biggest difference between Xorg and wayland that you
+ have found?
+ - A:(answered - transcript tbd)
+- Q: Did you know EAF
+ <https://github.com/emacs-eaf/emacs-application-framework> ? 
+- Q: Do you have the code available somewhere (git repo)?
+ - <https://perma-curious.eu>
+- Q: So the current limitation is that buffer mirroring doesn't respect different widths/heights?
+
+Other discussions from IRC:
+
+- If I understand correctly, this project is more like philosophy of EXWM, but it not based on X11, instead based on Wayland.
+
+
+[[!inline pages="internal(2022/info/wayland-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/wayland-nav)" raw="yes"]]
+
+
diff --git a/2022/talks/workflows.md b/2022/talks/workflows.md
new file mode 100644
index 00000000..a42db628
--- /dev/null
+++ b/2022/talks/workflows.md
@@ -0,0 +1,56 @@
+[[!sidebar content=""]]
+[[!meta title="Org workflows for developers"]]
+[[!meta copyright="Copyright &copy; 2022 George Mauer"]]
+[[!inline pages="internal(2022/info/workflows-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Org workflows for developers
+George Mauer (he/him/they/ze, IRC: gmauer, <mailto:gmauer+emacsconf@gmail.com>)
+
+[[!inline pages="internal(2022/info/workflows-before)" raw="yes"]]
+
+# Table of Contents
+
+
+
+We all know org-mode is great but much of the discussion often
+focuses on the agendas, todo lists, and project planning. These are
+all valuable. yet rarely do we talk about workflows that do work, not
+just plan it. Inspired by literate programming ideas, this talk will
+demonstrate a grab-bag of workflows developed over the years that are
+of use not only for planning, tracking, note keeping, and ops work,
+but in actual day-to-day enterprise software development.
+
+
+# Discussion
+
+## Notes
+
+- Start with all the things from howardism literate devops articles -
+ its all great and is what got me started
+ <http://howardism.org/Technical/Emacs/literate-devops.html> (he also
+ just did a talk on eshell)
+- Learning request.el, dash.el, cl-loop facility, and s.el reasonably
+ well is a pretty big 
+- there is also <https://gitlab.com/mtekman/org-tanglesync.el>
+
+- Q: are arduino blocks included in org-mode?
+ - A: I did add `arduino-mode` I think thats the only thing I did so maybe its from there
+- A: This is the bit that I'm particularly proud of btw - the ability to do dynamic scoping of variables that is driven by properties in the org outline
+- Q: how did you insert the texts (not caption)?
+ - A: in kdenlive
+
+## Feedback
+
+- liked it a lot
+- awesome talk gmauer`
+- :) It was fun captioning it.
+
+[[!inline pages="internal(2022/info/workflows-after)" raw="yes"]]
+
+[[!inline pages="internal(2022/info/workflows-nav)" raw="yes"]]
+
+[[!taglink CategoryOrgMode]] [[!taglink CategoryCoding]]
diff --git a/2022/upload.md b/2022/upload.md
new file mode 100644
index 00000000..98e9fb07
--- /dev/null
+++ b/2022/upload.md
@@ -0,0 +1,100 @@
+[[!meta title="Upload instructions for speakers"]]
+
+You can upload your video through a web-based interface or using your
+favourite FTP client. Please start your filename with the identifier
+for your talk, which is the last part of the talk page URL. For
+example, if your talk page is at
+https://emacsconf.org/2022/talks/journalism/ , the ID is
+`journalism`.
+
+If you have slides, notes, or a script for your talk, please include
+them as well. We can post them on the talk page, and we can also use
+them to help caption your talk. You can also send us additional text
+or links to include on your talk page. If you need help, please email
+<emacsconf-submit@gnu.org>.
+
+Please let us know at <emacsconf-submit@gnu.org> if you do *not* want
+your talk included in the EmacsConf 2022 password-protected backstage
+area for volunteers and speakers.
+
+[[!toc]]
+
+# Web interface
+
+Go to <https://ftp-upload.emacsconf.org> and enter the password
+**emacsconf** (Javascript required, compatible with LibreJS).
+
+You can upload multiple files by dragging and dropping onto the window
+or by clicking on the green + button at the bottom of the list on the
+left. The default settings are fine.
+
+When you have selected all of your files, click on the **Upload**
+button. The page will show a progress bar. When the upload is
+complete, the page will display the download URL. You can e-mail
+<emacsconf-submit@gnu.org> with that URL, or we can pick up the files
+when we check regularly.
+
+<a name="ftp"></a>
+# FTP
+Here are the FTP server details:
+
+- host: ftp-upload.emacsconf.org
+- username: anonymous
+- port: 21
+- folder: upload-here
+
+To upload your recording and any accompanying material to the above
+FTP server, you can use your FTP client of choice. For instance,
+FileZilla, a free/libre user-friendly application with a graphical
+user interface. On deb-based GNU/Linux distributions such as Trisquel
+you can install FileZilla by running `sudo apt install filezilla` in a
+terminal. Otherwise, you can download FileZilla from their [project
+website](https://filezilla-project.org/).
+
+You can also use a command-line interface with `ftp`:
+
+```
+$ ftp ftp-upload.emacsconf.org 21
+> anonymous
+> passive
+> cd upload-here
+> send /local/path/to/file.ext file.ext # Don’t forget the 2nd arg!
+# Ctrl-D to exit
+```
+
+If you get a `500 Illegal PORT command.` command, try `passive` or
+`quote pasv` to switch to passive mode before sending your file.
+
+If connection fails on the first try, please check to make sure the
+details are exactly as described above; and if the issue persists,
+please email <emacsconf-submit@gnu.org> so we can look into it.
+
+# What happens next?
+
+We'll send you an e-mail when we download your files. Then we'll
+process your video to normalize the audio levels and try to reduce
+noise. We'll also convert it into a standard format using codecs that
+aren't encumbered by patents, and we'll make a compressed version that
+will be easier for people with limited bandwidth.
+
+We'll upload your materials to the EmacsConf 2022 backstage area so
+that volunteers can work on captioning it. If you don't want your talk
+included in the backstage area for volunteers and other speakers,
+please let us know at <emacsconf-submit@gnu.org> before you submit
+your talk
+
+In a few weeks, we'll e-mail you check-in instructions for the
+conference. If you plan to have a live Q&A session, we'll also e-mail
+you instructions for the BigBlueButton room that you can use to answer
+questions.
+
+On the day of the conference, we'll move your materials to the public
+EmacsConf 2022 area and publish them when the talk is streamed.
+
+# What if you can't upload the presentation by November 4?
+
+We can accept later submissions, although it's more of a scramble.
+Please try to upload your talk as soon as you can. (Our stress levels
+get higher and higher as the conference approaches!)
+
+Thank you for your help in getting ready for a smooth EmacsConf 2022!
diff --git a/2022/volunteer.md b/2022/volunteer.md
new file mode 100644
index 00000000..8a052d5c
--- /dev/null
+++ b/2022/volunteer.md
@@ -0,0 +1,35 @@
+[[!meta title="Volunteer"]]
+[[!meta copyright="Copyright &copy; 2022 Sacha Chua"]]
+
+[[!toc levels=3]]
+
+EmacsConf 2022 was a lot of fun, and now we get to turn all those
+wonderful talks and Q&A sessions into something people can keep
+learning from in the years to come. We would love to figure out how to
+work with your skills, interests, and availability. Volunteering is a
+great way to meet fellow Emacs geeks, tinker around with interesting
+packages and scripts, and learn a ton.
+
+<https://emacsconf.org/2022/organizers-notebook/#overall> has an
+overall prioritization matrix. If any of those options look like
+something you want to learn or help with, or if you want to make
+things even better than what's in the table, let us know.
+
+# Some ideas for help wanted / projects after the conferenc
+
+- [[harvest|**Review, index, and caption Q&A sesssions**]]
+- Make things even better next year
+ - Automate the video processing workflow so that we can handle last-minute submissions more smoothly
+ - Improve the captioning workflow
+
+See <https://emacsconf.org/2022/organizers-notebook/> for a lot more
+about what's happening backstage and opportunities to help. Let us
+know what sorts of things you're interested in and what you'd like to
+learn more about. Doesn't have to be limited to this list!
+
+# Got other ideas?
+
+[We'd love to hear from you!](mailto:emacsconf-org@gnu.org) (or privately:
+[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org))
+
+[[!taglink CategoryVolunteer]]
diff --git a/2022/volunteer/caption.md b/2022/volunteer/caption.md
new file mode 100644
index 00000000..7494b720
--- /dev/null
+++ b/2022/volunteer/caption.md
@@ -0,0 +1,63 @@
+[[!meta title="Caption volunteer"]]
+
+# Responsibilities
+
+- Write captions or edit auto-generated captions in order to make
+ pre-recorded videos easier to understand
+- (optional) Note chapter markers
+- (optional) Note other things that may need additional help to make
+ them accessible, such as images not described in the speaker's
+ voiceover
+- (optional) Help extract information from Q&A videos after the conference
+
+# Preparation
+
+We'll set up a protected directory so you can get a sneak peek at the
+prerecorded videos, and we'll e-mail you the username and password to
+use. If slides, scripts, or auto-generated captions are available as a
+starting point, we'll upload those as well.
+
+# Process
+
+We'll e-mail all the captioning volunteers once speakers submit videos.
+
+When you want to caption a video, browse through the protected
+directory to see which ones are available for captioning. E-mail
+<sacha@sachachua.com> or send a message to `sachac` via IRC
+(`#emacsconf-org` on IRC) so that we can reserve that one for you.
+Check out these [[captioning]] tips and fire up your favorite subtitle
+editor.
+
+We find that captioning generally takes between 2-6x the video time if
+you're an experienced captioner editing auto-generated captions, and
+can take a bit longer than that if you're starting out or starting
+from scratch. You can work with timestamps, or you can send us plain
+text and we'll get them aligned with the videos. It's okay to work in
+small chunks.
+
+E-mail your partial or finished captions to <sacha@sachachua.com> .
+When you're finished, we'll send them to the speaker for review and
+prepare the transcript for inclusion in the wiki.
+
+When the streamer shows the pre-recorded video, your captions will be
+included below it. They will also be combined into a transcript for
+the wiki, which will be published when the talk is live. Chapter
+markers will be listed below videos so that people can jump to
+specific sections.
+
+# After the conference
+
+If any talks weren't captioned by the time of the conference, you're certainly welcome to help caption them afterwards. We'll also extract the Q&A sessions and work on either chapter markers (to indicate when specific questions were answered) or captions for those.
+
+Here's what people said about how most of the EmacsConf 2021 talks were streamed with captions during the conference itself:
+
+- "I really appreciate the approach of doing things prerecorded and having captions."
+- "The captions for this conference have has an impressive amount of work put into them."
+- "++ to all that stuff. Great job on the captions, and the demonstrated functionality is very impressive."
+- "At first, I thought the captions would be unnecessary, but over time, understanding the accents for various individuals has been challenging, so the captions helped."
+
+Your captions will not only make talks more accessible during the conference, but also more searchable and more browsable after the conference. Thank you!
+
+[[Check out other ways to volunteer|2022/volunteer]]
+
+[[!taglink CategoryVolunteer ]]
diff --git a/2022/volunteer/checkin.md b/2022/volunteer/checkin.md
new file mode 100644
index 00000000..fc3f6182
--- /dev/null
+++ b/2022/volunteer/checkin.md
@@ -0,0 +1,118 @@
+[[!meta title="Check-in volunteer"]]
+
+# Responsibilities
+
+- Notice speakers checking into IRC or Big Blue Button
+- Get them into the correct room and help them doublecheck their audio and video quality
+- Follow up with speakers who haven't checked in yet
+- Check on speakers periodically so that they're not waiting alone
+- (optional) Do tech-checks with speakers before the conference to identify potential issues
+
+Live Q&A is part of what makes EmacsConf better than a video playlist
+watch party. You can help speakers get settled in and feel at ease so
+that they're ready to go live as soon as their video finishes.
+
+# Preparation
+
+You'll need an account on bbb.emacsverse.org, and we'll set you up
+with moderator access on the relevant BBB rooms.
+
+We'll share a list of talks for your shift with:
+
+- starting time
+- talk title
+- track
+- speaker name
+- pronunciation
+- pronouns
+- BBB room URL
+- pad URL
+- email address
+- emergency contact information
+
+# Process
+
+## Looking for speakers
+
+We'll ask speakers to check into `#emacsconf-org` at least 30 minutes
+before their Q&A session and say something like "Hello, this is NAME
+checking in." You can hang out in the #emacsconf-org channel and keep
+an eye out for their messages.
+
+## Checking speakers in
+
+When you notice a speaker checking in, you can use something like
+`/msg NICK Hi, let me help you get checked in. Please join BBB_URL .`
+to send a private message to the speaker with the Big Blue Button URL.
+
+Join the BBB room. If you do not have moderator access, let sachac know.
+
+The BBB rooms will be set up so that people can join without approval.
+When the speaker arrives, you can take a few moments to say hi to
+them, thank them for presenting at EmacsConf, etc.
+
+Click on their name and choose **Promote to moderator.**
+
+Click on their name again and choose **Make presenter.**
+
+**Checklist with notes:**
+
+- Can you speak and be heard? Is there echo?
+ - Help them doublecheck their audio quality. Using earphones or headphones can help avoid audio feedback, and using an external microphone can improve audio as well.
+- Can you hear me?
+- Can you share your screen? Will the screen be readable at 1280x720?
+ - Speakers may want to share their screen during the Q&A session. They can do so using the monitor icon in the lower middle. Sharing a single window is usually more advisable than sharing the entire screen, since it allows them to resize the window so that it's easy for people to read.
+ - We recommend good contrast with dark foreground on light background to make it easier for people to see things even in bright light.
+- If you plan to show your keystrokes, is that display visible?
+- If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background?
+ - The speaker's webcam is optional but highly recommended. The speaker can turn their webcam on using the camera icon in the lower middle.
+- Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you?
+ - If the speaker wants to read questions as they come in on Etherpad or IRC, help them load the pad or the track-specific IRC channel. If there is a host for the session, the host can also read questions out loud. Let the speaker know that they can answer questions in any order they want, skip questions, take a little time to think about their answers, and answer questions for as short or as long as they'd like. The room is dedicated for their use, so they don't have to worry about stepping on someone else's Q&A. The first part of their Q&A will be streamed. The host will let them know when the time for streamed Q&A is almost done, but people can continue discussing things in the Q&A room if they want.
+- If you plan to play sounds during your Q&A session, is that audible?
+ - Sometimes speakers will need to set up a virtual loopback device to get their system audio to be included in BBB. This is somewhat complicated and should be tested before the conference.
+
+Once the speaker is settled in, you can let `#emacsconf-org` know that
+the speaker has been checked in.
+
+Let the speaker know how many minutes before their Q&A starts. They
+can take a break before then. Many speakers choose to watch other
+talks before theirs.
+
+## Heads-up before the Q&A starts
+
+Check in on the speaker about five minutes before their Q&A session
+starts to give them a heads-up. Ask them to close any other tabs that
+they might be using to watch EmacsConf, because that will create an
+audio feedback loop once their Q&A session is being streamed.
+
+Right before the Q&A starts, make sure the host has started the
+recording. If there is no host or the host has forgotten, you can use
+the **Start recording** button at the top.
+
+In between checking in people, feel free to enjoy the conference!
+
+## What if a live Q&A session is starting within 30 minutes and the speaker hasn't shown up yet?
+
+Let us know on `#emacsconf-org`. You or another organizer can contact
+them using their emergency contact info. If you prefer to not use your
+phone, you can ask one of the organizers in #emacsconf-org and we'll
+call the speaker for you.
+
+If the speaker is still not available, we can stream any ongoing Q&A
+sessions or open it up for community discussion.
+
+## After the Q&A wraps up
+
+If you notice that the Q&A in a room is all done, you can thank the
+speaker and click on **Stop recording** in the top middle.
+
+# After the conference
+
+Checking in speakers goes a long way to reducing the technical risks
+and keeping the conference running smoothly. A smooth checkin can
+encourage both speakers and participants to come back next year for
+more Emacs awesomeness. Thank you!
+
+[[Check out other ways to volunteer|2022/volunteer]]
+
+[[!taglink CategoryVolunteer]]
diff --git a/2022/volunteer/host.md b/2022/volunteer/host.md
new file mode 100644
index 00000000..4f19ca27
--- /dev/null
+++ b/2022/volunteer/host.md
@@ -0,0 +1,111 @@
+[[!meta title="Host volunteer"]]
+
+# Responsibilities
+
+For talks with live Q&A sessions:
+
+- Start the recording
+- Ask the speaker questions from the pad and read out feedback if you want
+- (optional) Monitor IRC for questions as well
+- (optional) Let the other organizers know when you're ready for conference
+ participants to join the Q&A; moderate the discussion as needed
+- Handle technical issues that turn up
+- Give the speaker time warnings
+- Keep things cool
+
+Many speakers find it easier to reply to questions that are spoken
+aloud, and this also ensures that the questions get into the
+recording. As the host, you can help shape the Q&A session by choosing
+the order of questions to ask (unless the speaker wants to address a
+different question). You can also help rephrase unclear questions or
+help the speaker feel more comfortable by reminding them that they
+don't have to answer all the questions.
+
+# Preparation
+
+We will give you a list of talks with the times, speaker info, pad
+URL, and URL for the live Q&A session. Please keep the Q&A URLs secret
+until you are ready for everyone to join the Q&A session.
+
+We will also add you as a moderator to the rooms for the talks in your
+shift. You may want to practice muting people in BBB.
+
+We strongly recommend using a headset or earphones to minimize audio
+feedback. Using a headset microphone or an external microphone can
+also improve your sound quality.
+
+# Process
+
+This year we are experimenting with per-talk pads in order to simplify
+the experience for the speakers, since many speakers found it
+difficult to find and focus on their section in a long pad.
+
+At least 5 minutes before the Q&A session starts, go to the provided
+URL. If BBB shows you a list of meetings, you can click on **Join**
+to join the selected one. If you do not have moderator access, let
+us know in `#emacsconf-org` and we can add you.
+
+Have another window for the pad for the current talk.
+
+Have another window or two for IRC. You may want to set up your
+windows so that you can quickly glance at #emacsconf-org. Optionally,
+you can also monitor the chat channel for your track (optional).
+Ideally, an IRC volunteer will monitor that channel and copy the
+questions into the pad for you, so you can focus on just the pad if
+you like.
+
+Make sure you do **not** have another window watching the stream, or
+you may get audio feedback whenever you unmute yourself. If you notice
+audio feedback when other people unmute, you can ask them to make sure
+they aren't watching the stream in a different window and that they
+haven't accidentally joined twice.
+
+To minimize background noise, keep your mic on mute unless you're
+speaking. You can optionally turn on your webcam.
+
+The streamer will join the BBB meeting shortly after the prerecorded
+video ends. When the streamer gives you the go-ahead, **turn on
+recording** and confirm that it is on. Double-check that recording is
+on by seeing whether the button at the top has changed to a red button
+with a timer.
+
+The Q&A will start out closed; just you and the speaker. Depending on
+your comfort level and how the discussion goes, you can let us know
+when you would like it to be opened up to general participation by
+inviting people out loud (and possibly quickly posting in #emacsconf-org).
+Then we will update the public BBB redirect URL to
+point to the BBB room so that people can join. This should take less
+than a minute to update. People will then be able to join using the
+Q&A URL that will be in the talk page and in IRC. That way,
+participants can join the Q&A session and ask directly. You can then
+shift to be more of a moderator, reminding people to stay on mute
+unless it's their turn to speak and muting people as needed.
+
+BBB sometimes has issues if there are lots of participants with
+webcams on. If you notice that things are getting slow or choppy, you
+can ask participants to turn their webcams off.
+
+Please give the speaker a 5-minute warning and a 2-minute warning
+before the end of their streamed Q&A session. If you've decided to
+open up the Q&A session, it can continue off-stream for as long as the
+speaker likes while you move on to the next Q&A session to host. If
+the speaker would like to wrap up, they can leave the meeting whenever
+they want. You can then thank everyone and move on to the next
+presentation.
+
+# In case of...
+
+- Incidents: If someone isn't keeping the
+ [[guidelines for conduct|conduct]] in mind, you can moderate using
+ BBB's tools (muting or removing participants), or let us know in
+ `#emacsconf-org` and we'll figure out how to deal with the
+ situation.
+
+# Afterwards
+
+Q&A sessions are what make EmacsConf more fun than a playlist. =)
+Thanks for helping make EmacsConf awesome!
+
+[[Check out other ways to volunteer|2022/volunteer]]
+
+[[!taglink CategoryVolunteer ]]
diff --git a/2022/volunteer/irc.md b/2022/volunteer/irc.md
new file mode 100644
index 00000000..50724753
--- /dev/null
+++ b/2022/volunteer/irc.md
@@ -0,0 +1,82 @@
+[[!meta title="IRC volunteer"]]
+
+# Responsibilities
+
+- Keep an eye on the IRC channel for your track and copy questions to
+ the relevant Etherpad so that hosts and speakers can easily find
+ them.
+- (optional) Copy other talk-related items to the talk's Etherpad
+- (optional) Copy other conference-related items to the conference Etherpad
+- (optional) Answer conference-related questions
+- (optional) Announce talks and Q&A sessions
+
+The IRC conversations can be pretty fast and difficult to follow. Your
+help in copying questions and other important points to the Etherpad
+will be much appreciated by hosts, speakers, and other participants.
+
+# Preparation
+
+If you'd like to announce talks and Q&A sessions, we can share a pad
+with announcements that you can copy and paste.
+
+If you would like to help set the channel topic or moderate the
+channel, please ask one of the main organizers (bandali, zaeph, or
+sachac) to add you as a channel operator.
+
+# Process
+
+## Copying questions
+
+Open `#emacsconf-gen` and/or `#emacsconf-dev` depending on your shift
+and your ability to keep track of multiple things at the same time.
+
+In another window, open the Etherpad for the relevant talk(s). You can
+find pad URLs on the talk page or in the talk announcement that is
+also posted on IRC.
+
+When you notice a question posted in IRC, reply to the person and say
+that you'll copy the question into the relevant pad. If you're using
+ERC or another programmable IRC client, you may want to make a command
+that simplifies that process.
+
+Copy the question to the bottom of the question list of the relevant
+pad and add the person's nick after it in parentheses. Please keep it
+as a top-level item instead of nesting it under something else. You
+can reword the question for clarity if needed.
+
+The conversation might be too fast to keep track of, especially if the
+channel for a track has overlapping discussions. Feel free to ask if
+people have any more questions for a particular speaker. You can also
+encourage people to use conventions like starting their questions with
+Q: or Q-talkid:.
+
+## Copying other talk-related items
+
+IRC participants might share interesting observations, links, or
+feedback. Please feel free to copy them into the Etherpad for future
+reference.
+
+For Q&A sessions done over IRC, it would also be helpful to copy the
+answers to the Etherpad.
+
+## Announcing talks and Q&A sessions
+
+At the indicated time, paste the announcement into the relevant
+channel. (This might be automated if we get around to it.)
+
+# In case of...
+
+- Incidents: If someone isn't keeping
+ [[guidelines for conduct|conduct]] in mind, let us know in
+ `#emacsconf-org` and we'll figure out how to deal with the
+ situation.
+
+# After the conference
+
+We'll review the chat logs and add anything that might have been
+missed to the Etherpad before archiving it onto the talk page. Thank
+you!
+
+[[Check out other ways to volunteer|2022/volunteer]]
+
+[[!taglink CategoryVolunteer ]]
diff --git a/2022/volunteer/pad.md b/2022/volunteer/pad.md
new file mode 100644
index 00000000..49dcf1a4
--- /dev/null
+++ b/2022/volunteer/pad.md
@@ -0,0 +1,83 @@
+[[!meta title="Etherpad volunteer"]]
+
+# Responsibilities
+
+- Write down interesting points, links, questions, and answers on the
+ Etherpad during talks and Q&A sessions so that people can quickly
+ get the gist even if they're jumping in late or skimming through
+ things without watching the full video
+- Add the Q&A BBB URL to the Etherpad when the host gives the OK for
+ everyone to join
+
+# Preparation
+
+We will add the pad URLs to the watch page for the track.
+
+We will also give you a list of URLs for the live Q&A sessions in the
+BBB room. Please keep these URLs secret until the host gives you the
+OK to add them to the pad.
+
+You can see the pad for the previous year at
+https://etherpad.wikimedia.org/p/emacsconf-2021 . The discussion
+section in https://emacsconf.org/2021/talks/frownies/ shows how the
+pad will be archived onto the talk page. A sample pad for this year's
+conference can be found at <https://pad.emacsconf.org/2022-journalism>
+
+If you would like to suggest improvements to the pad format, please
+e-mail <emacsconf-org@gnu.org> before the conference starts. Thank
+you!
+
+# Process
+
+This year we are experimenting with per-talk pads in order to simplify
+the experience for the speakers, since many speakers found it
+difficult to find and focus on their section in a long pad.
+
+Open one window with the watch page for the EmacsConf track so that
+you can watch the prerecorded video and the Q&A session. Open another
+for the pad for the current talk. You can get the pad URL from the
+watch page, the talk page, the IRC announcements, or by navigating the
+**Next talks** links on a pad.
+
+You don't need to make a verbatim transcription. Short bullet-points
+are enough. If you're not sure about a term, you can mark it with
+something like ?? and someone else may be able to fill it in. If you
+happen to be able to quickly add timestamps in US/Eastern time, that
+may be handy.
+
+If you would like to continue scribing the live Q&A for a session even
+after the next pre-recorded talk starts, you can join the BBB session
+for the live Q&A. Scribing live Q&A sessions might be more useful than
+scribing the pre-recorded video portion because people will have
+access to the videos and possibly transcripts, while Q&A may take a
+while to extract.
+
+To make it easier for the hosts and speakers, we keep the BBB room
+URLs secret until the hosts or speakers give the OK to open it up.
+When the host or speaker invites everyone in, you can add the BBB URL
+to the Etherpad to make it easier for people to join from there.
+
+You can keep an eye on the time to see when the next live Q&A session
+is starting so that you can join the next one if there are overlapping
+sessions.
+
+# In case of...
+
+- Oopsies: Sometimes people accidentally delete chunks of the pad. It happens.
+ You can use the time slider (looks like a clock, second icon in the
+ top right) to go back to a previous version.
+
+- Incidents: If someone isn't keeping
+ [[guidelines for conduct|conduct]] in mind, let us know in
+ `#emacsconf-org` and we'll figure out how to deal with the
+ situation.
+
+# After the conference
+
+We'll archive the pad on the talk page after the event, so your work
+will also help people follow up, find ideas and answers, and get even
+more out of EmacsConf 2022. Thank you!
+
+[[Check out other ways to volunteer|2022/volunteer]]
+
+[[!taglink CategoryVolunteer ]]
diff --git a/2022/watch-dev.md b/2022/watch-dev.md
new file mode 100644
index 00000000..7a211013
--- /dev/null
+++ b/2022/watch-dev.md
@@ -0,0 +1,45 @@
+<!-- Automatically generated by emacsconf-publish-watch-pages -->
+[[!inline pages="internal(2022/info/watch-announce)" raw="yes"]]
+[[!meta title="Development stream"]]
+[[!sidebar content=""]]
+
+<a name="watch"></a>
+<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
+Streams: [[General|/2022/watch-gen]] - [[Development|/2022/watch-dev]]
+
+<video controls><source src="https://live0.emacsconf.org/dev.webm" type="video/webm" /></video>
+Alternatively, load <https://live0.emacsconf.org/dev.webm> in a streaming media player.
+
+<a name="chat"></a>
+<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
+Streams: [[General|/2022/watch-gen]] - [[Development|/2022/watch-dev]]
+
+Chat: [#emacsconf-dev on libera.chat](https://chat.emacsconf.org/?join=emacsconf-dev)
+
+<div class="chat-iframe" data-track="dev"></div>
+
+<a name="sched"></a>
+<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
+Streams: [[General|/2022/watch-gen]] - [[Development|/2022/watch-dev]]
+
+<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <title> Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="8" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(39,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs"> <title> Back to school with Emacs</title> <rect x="75" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(106,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <title> How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="125" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(139,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <title> Writing and organizing literature notes for scientific writing</title> <rect x="191" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(222,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <title> Attending and organizing Emacs meetups</title> <rect x="400" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(414,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative"> <title> The Emacs Buddy initiative</title> <rect x="450" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(464,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <title> The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="483" y="15" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas"> <title> Real estate and Org table formulas</title> <rect x="583" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(614,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <title> Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="633" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <title> Edit live Jupyter notebook cells with Emacs</title> <rect x="700" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(714,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <title> orgvm: a simple HTTP server for org</title> <rect x="750" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(764,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <title> Tree-sitter beyond syntax highlighting</title> <rect x="100" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(114,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <title> lsp-bridge: complete asynchronous LSP client</title> <rect x="133" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(164,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <title> asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="183" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(197,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <title> Emacs should become a Wayland compositor</title> <rect x="241" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(255,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <title> Using SQLite as a data source: a framework and an example</title> <rect x="400" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(431,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <title> Revisiting the anatomy of Emacs mail user agents</title> <rect x="475" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(523,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <title> Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="583" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(614,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev"> <title> Bidirectional links with eev</title> <rect x="658" y="75" opacity="0.8" width="8" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(664,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs"> <title> Short hyperlinks to Python docs</title> <rect x="683" y="75" opacity="0.8" width="8" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(689,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs"> <title> Haskell code exploration with Emacs</title> <rect x="708" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(756,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></g> <g transform="translate(0,150)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <title> Results of the 2022 Emacs Survey</title> <rect x="8" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(39,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org"> <title> This Year in Org</title> <rect x="58" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(72,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <title> Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="100" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(131,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <title> Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="166" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(180,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <title> Linking personal info with Hyperbole implicit buttons</title> <rect x="216" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(230,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <title> Powerful productivity with Hyperbole and Org Mode</title> <rect x="400" y="15" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(448,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers"> <title> Org workflows for developers</title> <rect x="483" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(514,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <title> GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="550" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(581,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <title> Putting Org Mode on the Indieweb</title> <rect x="633" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <title> Fanfare for the Common Emacs User</title> <rect x="700" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(714,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction"> <title> rde Emacs introduction</title> <rect x="100" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs"> <title> justl: Driving recipes within Emacs</title> <rect x="175" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(189,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <title> Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="208" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(256,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs"> <title> Getting detached from Emacs</title> <rect x="400" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(414,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <title> Top 10 reasons why you should be using Eshell</title> <rect x="458" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(472,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool"> <title> Emacs was async before async was cool</title> <rect x="516" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(547,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus"> <title> The Wheels on D-Bus</title> <rect x="608" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(639,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs"> <title> Pre-localizing Emacs</title> <rect x="700" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(731,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></g></svg>
+
+
+[[!template id=sched title="Tree-sitter beyond syntax highlighting" url="/2022/talks/treesitter" speakers="Abin Simon" q-and-a="IRC or pad after event"]]
+[[!template id=sched title="lsp-bridge: complete asynchronous LSP client" url="/2022/talks/lspbridge" speakers="Andy Stewart, Matthew Zeng" q-and-a="IRC"]]
+[[!template id=sched title="asm-blox: a game based on WebAssembly that no one asked for" url="/2022/talks/asmblox" speakers="Zachary Romero" q-and-a="live"]]
+[[!template id=sched title="Emacs should become a Wayland compositor" url="/2022/talks/wayland" speakers="Michael Bauer" q-and-a="live"]]
+[[!template id=sched title="Using SQLite as a data source: a framework and an example" url="/2022/talks/sqlite" speakers="Andrew Hyatt" q-and-a="live"]]
+[[!template id=sched title="Revisiting the anatomy of Emacs mail user agents" url="/2022/talks/mail" speakers="Mohsen BANAN" q-and-a="live"]]
+[[!template id=sched title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" url="/2022/talks/maint" speakers="Sid Kasivajhula" q-and-a="live"]]
+[[!template id=sched title="Bidirectional links with eev" url="/2022/talks/eev" speakers="Eduardo Ochs" q-and-a="IRC"]]
+[[!template id=sched title="Short hyperlinks to Python docs" url="/2022/talks/python" speakers="Eduardo Ochs" q-and-a="IRC"]]
+[[!template id=sched title="Haskell code exploration with Emacs" url="/2022/talks/haskell" speakers="Yuchen Pei" q-and-a="live"]]
+[[!template id=sched title="rde Emacs introduction" url="/2022/talks/rde" speakers="Andrew Tropin" q-and-a="live"]]
+[[!template id=sched title="justl: Driving recipes within Emacs" url="/2022/talks/justl" speakers="Sibi Prabakaran" q-and-a="IRC"]]
+[[!template id=sched title="Elisp and the TRAMP: How to NOT write code you don't have to" url="/2022/talks/tramp" speakers="Grant Shangreaux" q-and-a="live"]]
+[[!template id=sched title="Getting detached from Emacs" url="/2022/talks/detached" speakers="Niklas Eklund" q-and-a="live"]]
+[[!template id=sched title="Top 10 reasons why you should be using Eshell" url="/2022/talks/eshell" speakers="Howard Abrams" q-and-a="live"]]
+[[!template id=sched title="Emacs was async before async was cool" url="/2022/talks/async" speakers="Michael Herstine" q-and-a="live"]]
+[[!template id=sched title="The Wheels on D-Bus" url="/2022/talks/dbus" speakers="Ian Eure" q-and-a="live"]]
+[[!template id=sched title="Pre-localizing Emacs" url="/2022/talks/localizing" speakers="Jean-Christophe Helary" q-and-a="live"]]
diff --git a/2022/watch-gen.md b/2022/watch-gen.md
new file mode 100644
index 00000000..a2fee277
--- /dev/null
+++ b/2022/watch-gen.md
@@ -0,0 +1,52 @@
+<!-- Automatically generated by emacsconf-publish-watch-pages -->
+[[!inline pages="internal(2022/info/watch-announce)" raw="yes"]]
+[[!meta title="General stream"]]
+[[!sidebar content=""]]
+
+<a name="watch"></a>
+<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
+Streams: [[General|/2022/watch-gen]] - [[Development|/2022/watch-dev]]
+
+<video controls><source src="https://live0.emacsconf.org/gen.webm" type="video/webm" /></video>
+Alternatively, load <https://live0.emacsconf.org/gen.webm> in a streaming media player.
+
+<a name="chat"></a>
+<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
+Streams: [[General|/2022/watch-gen]] - [[Development|/2022/watch-dev]]
+
+Chat: [#emacsconf-gen on libera.chat](https://chat.emacsconf.org/?join=emacsconf-gen)
+
+<div class="chat-iframe" data-track="gen"></div>
+
+<a name="sched"></a>
+<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
+Streams: [[General|/2022/watch-gen]] - [[Development|/2022/watch-dev]]
+
+<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <title> Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="8" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(39,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs"> <title> Back to school with Emacs</title> <rect x="75" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(106,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <title> How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="125" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(139,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <title> Writing and organizing literature notes for scientific writing</title> <rect x="191" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(222,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <title> Attending and organizing Emacs meetups</title> <rect x="400" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(414,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative"> <title> The Emacs Buddy initiative</title> <rect x="450" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(464,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <title> The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="483" y="15" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas"> <title> Real estate and Org table formulas</title> <rect x="583" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(614,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <title> Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="633" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <title> Edit live Jupyter notebook cells with Emacs</title> <rect x="700" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(714,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <title> orgvm: a simple HTTP server for org</title> <rect x="750" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(764,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <title> Tree-sitter beyond syntax highlighting</title> <rect x="100" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(114,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <title> lsp-bridge: complete asynchronous LSP client</title> <rect x="133" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(164,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <title> asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="183" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(197,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <title> Emacs should become a Wayland compositor</title> <rect x="241" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(255,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <title> Using SQLite as a data source: a framework and an example</title> <rect x="400" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(431,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <title> Revisiting the anatomy of Emacs mail user agents</title> <rect x="475" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(523,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <title> Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="583" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(614,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev"> <title> Bidirectional links with eev</title> <rect x="658" y="75" opacity="0.8" width="8" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(664,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs"> <title> Short hyperlinks to Python docs</title> <rect x="683" y="75" opacity="0.8" width="8" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(689,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs"> <title> Haskell code exploration with Emacs</title> <rect x="708" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(756,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></g> <g transform="translate(0,150)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <title> Results of the 2022 Emacs Survey</title> <rect x="8" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(39,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org"> <title> This Year in Org</title> <rect x="58" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(72,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <title> Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="100" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(131,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <title> Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="166" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(180,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <title> Linking personal info with Hyperbole implicit buttons</title> <rect x="216" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(230,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <title> Powerful productivity with Hyperbole and Org Mode</title> <rect x="400" y="15" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(448,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers"> <title> Org workflows for developers</title> <rect x="483" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(514,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <title> GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="550" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(581,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <title> Putting Org Mode on the Indieweb</title> <rect x="633" y="15" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <title> Fanfare for the Common Emacs User</title> <rect x="700" y="15" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(714,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction"> <title> rde Emacs introduction</title> <rect x="100" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs"> <title> justl: Driving recipes within Emacs</title> <rect x="175" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(189,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <title> Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="208" y="75" opacity="0.8" width="50" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(256,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs"> <title> Getting detached from Emacs</title> <rect x="400" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(414,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <title> Top 10 reasons why you should be using Eshell</title> <rect x="458" y="75" opacity="0.8" width="16" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(472,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool"> <title> Emacs was async before async was cool</title> <rect x="516" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(547,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus"> <title> The Wheels on D-Bus</title> <rect x="608" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(639,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs"> <title> Pre-localizing Emacs</title> <rect x="700" y="75" opacity="0.8" width="33" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(731,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(100,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(200,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(300,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(400,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(500,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(600,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(700,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g></g></svg>
+
+
+[[!template id=sched title="Saturday opening remarks" url="/2022/talks/"]]
+[[!template id=sched title="Emacs journalism (or everything's a nail if you hit it with Emacs)" url="/2022/talks/journalism" speakers="Alfred Zanini" q-and-a="live"]]
+[[!template id=sched title="Back to school with Emacs" url="/2022/talks/school" speakers="Daniel Rösel" q-and-a="IRC"]]
+[[!template id=sched title="How to incorporate handwritten notes into Emacs Orgmode" url="/2022/talks/handwritten" speakers="Bala Ramadurai" q-and-a="live"]]
+[[!template id=sched title="Writing and organizing literature notes for scientific writing" url="/2022/talks/science" speakers="Vidianos" q-and-a="live"]]
+[[!template id=sched title="Attending and organizing Emacs meetups" url="/2022/talks/meetups" speakers="Bhavin Gandhi" q-and-a="live"]]
+[[!template id=sched title="The Emacs Buddy initiative" url="/2022/talks/buddy" speakers="Andrea" q-and-a="IRC or pad"]]
+[[!template id=sched title="The ship that builds itself: How we used Emacs to develop a workshop for communities" url="/2022/talks/community" speakers="Noorah Alhasan, Joseph Corneli, Leo Vivier" q-and-a="live"]]
+[[!template id=sched title="Real estate and Org table formulas" url="/2022/talks/realestate" speakers="Daniel Gopar" q-and-a="pad"]]
+[[!template id=sched title="Health data journaling and visualization with Org Mode and GNUplot" url="/2022/talks/health" speakers="David O'Toole" q-and-a="live"]]
+[[!template id=sched title="Saturday closing remarks" url="/2022/talks/"]]
+[[!template id=sched title="Edit live Jupyter notebook cells with Emacs" url="/2022/talks/jupyter" speakers="Blaine Mooers" q-and-a="live"]]
+[[!template id=sched title="orgvm: a simple HTTP server for org" url="/2022/talks/orgvm" speakers="Corwin Brust" q-and-a="live (not indicated)"]]
+[[!template id=sched title="Sunday opening remarks" url="/2022/talks/"]]
+[[!template id=sched title="Results of the 2022 Emacs Survey" url="/2022/talks/survey" speakers="Timothy" q-and-a="IRC"]]
+[[!template id=sched title="This Year in Org" url="/2022/talks/orgyear" speakers="Timothy" q-and-a="IRC"]]
+[[!template id=sched title="Build a Zettelkasten with the Hyperbole Rolodex" url="/2022/talks/rolodex" speakers="Ramin Honary" q-and-a="IRC"]]
+[[!template id=sched title="Linking headings with org-super-links (poor-man's Zettelkasten)" url="/2022/talks/orgsuperlinks" speakers="Karl Voit" q-and-a="live"]]
+[[!template id=sched title="Linking personal info with Hyperbole implicit buttons" url="/2022/talks/buttons" speakers="Mats Lidell" q-and-a="live"]]
+[[!template id=sched title="Powerful productivity with Hyperbole and Org Mode" url="/2022/talks/hyperorg" speakers="Robert Weiner" q-and-a="live"]]
+[[!template id=sched title="Org workflows for developers" url="/2022/talks/workflows" speakers="George Mauer" q-and-a="live or IRC"]]
+[[!template id=sched title="GRAIL---A Generalized Representation and Aggregation of Information Layers" url="/2022/talks/grail" speakers="Sameer Pradhan" q-and-a="live"]]
+[[!template id=sched title="Putting Org Mode on the Indieweb" url="/2022/talks/indieweb" speakers="Michael Herstine" q-and-a="live"]]
+[[!template id=sched title="Sunday closing remarks" url="/2022/talks/"]]
+[[!template id=sched title="Fanfare for the Common Emacs User" url="/2022/talks/fanfare" speakers="John Cummings" q-and-a="live"]]
diff --git a/2022/watch.md b/2022/watch.md
new file mode 100644
index 00000000..3b2efcb9
--- /dev/null
+++ b/2022/watch.md
@@ -0,0 +1,68 @@
+[[!inline pages="internal(2022/watch/announce)" raw="yes"]]
+[[!inline pages="internal(2022/watch/info)" raw="yes"]]
+[[!sidebar content=""]]
+
+EmacsConf 2022 will be on Dec 3 (Sat) and Dec 4 (Sun), 2022 from
+9am-5pm Toronto/EST time (US/Eastern); equivalently, 6am-3pm PST,
+2pm-10pm UTC, 3pm-11pm Zurich/CET, 7:30pm-4:30am(next-day) India/IST,
+10pm-6am GMT+8.
+
+You can view streams using the watch pages or in a streaming web
+player such as [MPV](https://mpv.io). If you need to reverse the video
+for easier viewing (ex: turning dark mode into light mode), try a
+command like `mpv --vf=negate URL`.
+
+If you experience any disruptions (including weird audio), try waiting
+a minute or two and then reloading the page you're using to watch the
+video. If that still doesn't work, please check our status page at
+<https://status.emacsconf.org> for updates on the status of various
+parts of our infrastructure, and instructions on how to get in touch
+with us about disruptions.
+
+If you prefer, you can watch the livestream via Toobnix (a PeerTube
+instance): [General
+track](https://toobnix.org/w/7t9X8eXuSby8YpyEKTb4aj), [Development
+track](https://toobnix.org/w/w6K77y3bNMo8xsNuqQeCcD). Pre-recorded
+videos and replays will also be available on Toobnix in the [EmacsConf
+channel](https://toobnix.org/c/emacsconf).
+
+To participate in the Q&A, please check the [[talks]] index for a link
+to the talk page, and [[read these Q&A tips|qa]]. The talk page will
+have the Q&A details, including the Etherpad link, IRC channel, and
+optionally a BigBlueButton room (BBB) for Q&A. If you plan to
+participate in Q&A in the BigBlueButton room, please use headphones or
+earphones in order to minimize audio feedback. The link on the talk
+page will take you to a waiting room that will automatically refresh
+when the host has opened the Q&A.
+
+The Etherpad for general EmacsConf discussions is at
+<https://pad.emacsconf.org/2022>. The schedule and the talk pages link
+to the Etherpads for the specific talk. Please feel free to add notes
+and questions to the Etherpad.
+
+Here are the irc.libera.chat IRC channels that we'll be using this year:
+
+- \#emacsconf-gen: discussion for the General track
+- \#emacsconf-dev: discussion for the development track
+- \#emacsconf: hallway conversations, other general conversations
+- \#emacsconf-org: if you need to get in touch with the organizers
+
+You can use the `/JOIN` command in an IRC client (ex:
+chat.emacsconf.org) to join a different channel. Ex: `/join #emacsconf-org`
+if you want to talk to the organizers.
+
+Pre-recorded talk videos will be available on the talk pages after the
+talks go live, and other videos (including Q&A) will also be added to
+the talk pages once we process them.
+
+**Accessibility:** Pre-recorded talks will be streamed with open
+captions, and the transcripts will be posted to the talk pages as
+well. If you have any accessibility requests, please join the
+[#emacsconf-org](https://chat.emacsconf.org/?join=emacsconf-org) and
+let us know, or e-mail <emacsconf-org-private@gnu.org> to reach the
+organizers.
+
+Physical events:
+
+- [Lucerne](https://200ok.ch/posts/2022-11-01_emacsconf__with_a_new_physical_venue.html)
+
diff --git a/2022/watch/announce.md b/2022/watch/announce.md
new file mode 100644
index 00000000..80c62599
--- /dev/null
+++ b/2022/watch/announce.md
@@ -0,0 +1,6 @@
+When EmacsConf 2022 is live (Dec 3 and Dec 4), you will be able to watch the livestreams from the watch pages below.
+
+Legend:
+
+* Solid lines: Q&A will be through a BigBlueButton room (you can ask questions there or through IRC/Etherpad)
+* Dashed lines: Q&A will be over IRC or the Etherpad, or the speaker will follow up afterwards
diff --git a/2022/watch/dev.md b/2022/watch/dev.md
new file mode 100644
index 00000000..3741aef3
--- /dev/null
+++ b/2022/watch/dev.md
@@ -0,0 +1,151 @@
+<!-- Automatically generated by emacsconf-publish-watch-pages -->
+<!--
+[[!inline pages="internal(2022/watch/announce)" raw="yes"]]
+[[!meta title="Development stream"]]
+[[!sidebar content=""]] -->
+
+<hr size="1">
+<div><a name="watch"></a><strong>Watch</strong> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <a href="/2022/watch/gen/">General</a> - <strong>Development</strong> | <a href="https://emacsconf.org/2022/watch/">Tips for watching/participating</a></div>
+
+<video controls class="reload"><source src="https://live0.emacsconf.org/dev.webm" type="video/webm" /></video>
+<div>Alternatively, load <a href="https://live0.emacsconf.org/dev.webm">https://live0.emacsconf.org/dev.webm</a> or <a href="https://live0.emacsconf.org/dev-480p.webm">https://live0.emacsconf.org/dev-480p.webm</a> (low-res) in a streaming media player such as MPV.</div>
+<hr size="1"><div><a name="links"></a><a href="#watch">Watch</a> - <strong>Pad and Q&amp;A links</strong> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <a href="/2022/watch/gen/">General</a> - <strong>Development</strong></div><div><span><a href="https://emacsconf.org/2022/talks/treesitter">treesitter</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-treesitter">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: meain</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/lspbridge">lspbridge</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-lspbridge">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: manateelazycat, matthewzmd</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/asmblox">asmblox</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-asmblox">pad</a>, <a href="https://emacsconf.org/current/asmblox/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/wayland">wayland</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-wayland">pad</a>, <a href="https://emacsconf.org/current/wayland/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/sqlite">sqlite</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-sqlite">pad</a>, <a href="https://emacsconf.org/current/sqlite/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/mail">mail</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-mail">pad</a>, <a href="https://emacsconf.org/current/mail/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/maint">maint</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-maint">pad</a>, <a href="https://emacsconf.org/current/maint/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/eev">eev</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-eev">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/python">python</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-python">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/haskell">haskell</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-haskell">pad</a>, <a href="https://emacsconf.org/current/haskell/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/rde">rde</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-rde">pad</a>, <a href="https://emacsconf.org/current/rde/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/justl">justl</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-justl">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/rms">rms</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-rms">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">Moderated via Mumble, ask questions via pad or IRC</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/detached">detached</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-detached">pad</a>, <a href="https://emacsconf.org/current/detached/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/eshell">eshell</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-eshell">pad</a>, <a href="https://emacsconf.org/current/eshell/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/async">async</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-async">pad</a>, <a href="https://emacsconf.org/current/async/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/dbus">dbus</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-dbus">pad</a>, <a href="https://emacsconf.org/current/dbus/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/localizing">localizing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-localizing">pad</a>, <a href="https://emacsconf.org/current/localizing/room/">BBB</a>)</span></div>
+<div class="pad-output"></div>
+<hr size="1"><div><a name="chat"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <strong>Chat</strong> - <a href="#sched">Schedule</a> | Tracks: <a href="/2022/watch/gen/">General</a> - <strong>Development</strong></div><div>Chat: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">emacsconf-dev</a> on libera.chat</div>
+
+<div class="chat-iframe" data-track="dev"></div>
+<iframe src="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev" height="600" width="100%"></iframe>
+<hr size="1"><div><a name="sched"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <strong>Schedule</strong> | Tracks: <a href="/2022/watch/gen/">General</a> - <strong>Development</strong></div>
+<ul>Legend:
+<li>Solid lines: Q&A will be through a BigBlueButton room (you can ask questions there or through IRC/Etherpad)</li>
+<li>Dashed lines: Q&A will be over IRC or the Etherpad, or the speaker will follow up afterwards</li></ul>
+<div><svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(648,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:55-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="86" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="https://emacsconf.org/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:15 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(397,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg></div>
+<div><h1>Saturday, Dec 3, 2022</h1>
+<div data-start="2022-12-03T15:00:00+0000" data-end="2022-12-03T15:15:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:00</span> - <span class="sched-end">10:15</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-treesitter">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: meain</a></span>; <span class="sched-slug">id:treesitter</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/treesitter">Tree-sitter beyond syntax highlighting</a></div>
+ <div class="sched-speakers">Abin Simon</div>
+
+</div>
+
+<div data-start="2022-12-03T15:25:00+0000" data-end="2022-12-03T15:45:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:25</span> - <span class="sched-end">10:45</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-lspbridge">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: manateelazycat, matthewzmd</a></span>; <span class="sched-slug">id:lspbridge</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/lspbridge">lsp-bridge: a smooth-as-butter asynchronous LSP client</a></div>
+ <div class="sched-speakers">Andy Stewart, Matthew Zeng</div>
+
+</div>
+
+<div data-start="2022-12-03T15:55:00+0000" data-end="2022-12-03T16:15:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:55</span> - <span class="sched-end">11:15</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-asmblox">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/asmblox/room/">BBB</a></span>; <span class="sched-slug">id:asmblox</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/asmblox">asm-blox: a game based on WebAssembly that no one asked for</a></div>
+ <div class="sched-speakers">Zachary Romero</div>
+
+</div>
+
+<div data-start="2022-12-03T16:25:00+0000" data-end="2022-12-03T16:35:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:25</span> - <span class="sched-end">11:35</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-wayland">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/wayland/room/">BBB</a></span>; <span class="sched-slug">id:wayland</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/wayland">Emacs should become a Wayland compositor</a></div>
+ <div class="sched-speakers">Michael Bauer</div>
+
+</div>
+
+<div data-start="2022-12-03T18:00:00+0000" data-end="2022-12-03T18:25:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:25</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-sqlite">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/sqlite/room/">BBB</a></span>; <span class="sched-slug">id:sqlite</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/sqlite">Using SQLite as a data source: a framework and an example</a></div>
+ <div class="sched-speakers">Andrew Hyatt (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-03T18:50:00+0000" data-end="2022-12-03T19:30:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:50</span> - <span class="sched-end">2:30</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-mail">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/mail/room/">BBB</a></span>; <span class="sched-slug">id:mail</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/mail">Revisiting the anatomy of Emacs mail user agents</a></div>
+ <div class="sched-speakers">Mohsen BANAN (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-03T19:50:00+0000" data-end="2022-12-03T20:10:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:50</span> - <span class="sched-end">3:10</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-maint">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/maint/room/">BBB</a></span>; <span class="sched-slug">id:maint</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/maint">Maintaining the Maintainers: Attribution as an Economic Model for Open Source</a></div>
+ <div class="sched-speakers">Sid Kasivajhula (he/him or any)</div>
+
+</div>
+
+<div data-start="2022-12-03T20:35:00+0000" data-end="2022-12-03T20:40:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:35</span> - <span class="sched-end">3:40</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-eev">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a></span>; <span class="sched-slug">id:eev</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/eev">Bidirectional links with eev</a></div>
+ <div class="sched-speakers">Eduardo Ochs</div>
+
+</div>
+
+<div data-start="2022-12-03T20:50:00+0000" data-end="2022-12-03T20:55:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:50</span> - <span class="sched-end">3:55</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-python">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a></span>; <span class="sched-slug">id:python</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/python">Short hyperlinks to Python docs</a></div>
+ <div class="sched-speakers">Eduardo Ochs</div>
+
+</div>
+
+<div data-start="2022-12-03T21:05:00+0000" data-end="2022-12-03T21:35:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:05</span> - <span class="sched-end">4:35</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-haskell">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/haskell/room/">BBB</a></span>; <span class="sched-slug">id:haskell</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/haskell">Haskell code exploration with Emacs</a></div>
+ <div class="sched-speakers">Yuchen Pei (he/him/himself/his/his)</div>
+
+</div>
+
+<h1>Sunday, Dec 4, 2022</h1>
+<div data-start="2022-12-04T15:00:00+0000" data-end="2022-12-04T15:25:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:00</span> - <span class="sched-end">10:25</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-rde">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/rde/room/">BBB</a></span>; <span class="sched-slug">id:rde</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/rde">rde Emacs introduction</a></div>
+ <div class="sched-speakers">Andrew Tropin (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-04T15:50:00+0000" data-end="2022-12-04T16:05:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:50</span> - <span class="sched-end">11:05</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-justl">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a></span>; <span class="sched-slug">id:justl</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/justl">justl: Driving recipes within Emacs</a></div>
+ <div class="sched-speakers">Sibi Prabakaran (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-04T16:15:00+0000" data-end="2022-12-04T16:35:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:15</span> - <span class="sched-end">11:35</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-rms">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">Moderated via Mumble, ask questions via pad or IRC</a></span>; <span class="sched-slug">id:rms</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/rms">What I'd like to see in Emacs</a></div>
+ <div class="sched-speakers">Richard M. Stallman</div>
+
+</div>
+
+<div data-start="2022-12-04T18:00:00+0000" data-end="2022-12-04T18:15:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:15</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-detached">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/detached/room/">BBB</a></span>; <span class="sched-slug">id:detached</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/detached">Getting detached from Emacs</a></div>
+ <div class="sched-speakers">Niklas Eklund (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-04T18:40:00+0000" data-end="2022-12-04T18:55:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:40</span> - <span class="sched-end">1:55</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-eshell">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/eshell/room/">BBB</a></span>; <span class="sched-slug">id:eshell</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/eshell">Top 10 reasons why you should be using Eshell</a></div>
+ <div class="sched-speakers">Howard Abrams (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-04T19:20:00+0000" data-end="2022-12-04T19:40:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:20</span> - <span class="sched-end">2:40</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-async">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/async/room/">BBB</a></span>; <span class="sched-slug">id:async</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/async">Emacs was async before async was cool</a></div>
+ <div class="sched-speakers">Michael Herstine</div>
+
+</div>
+
+<div data-start="2022-12-04T20:15:00+0000" data-end="2022-12-04T20:35:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:15</span> - <span class="sched-end">3:35</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-dbus">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/dbus/room/">BBB</a></span>; <span class="sched-slug">id:dbus</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/dbus">The Wheels on D-Bus</a></div>
+ <div class="sched-speakers">Ian Eure (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-04T21:00:00+0000" data-end="2022-12-04T21:10:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:00</span> - <span class="sched-end">4:10</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-localizing">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/localizing/room/">BBB</a></span>; <span class="sched-slug">id:localizing</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/localizing">Pre-localizing Emacs</a></div>
+ <div class="sched-speakers">Jean-Christophe Helary (he/him)</div>
+
+</div>
+
+</div>
diff --git a/2022/watch/gen.md b/2022/watch/gen.md
new file mode 100644
index 00000000..22452154
--- /dev/null
+++ b/2022/watch/gen.md
@@ -0,0 +1,200 @@
+<!-- Automatically generated by emacsconf-publish-watch-pages -->
+<!--
+[[!inline pages="internal(2022/watch/announce)" raw="yes"]]
+[[!meta title="General stream"]]
+[[!sidebar content=""]] -->
+
+<hr size="1">
+<div><a name="watch"></a><strong>Watch</strong> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2022/watch/dev/">Development</a> | <a href="https://emacsconf.org/2022/watch/">Tips for watching/participating</a></div>
+
+<video controls class="reload"><source src="https://live0.emacsconf.org/gen.webm" type="video/webm" /></video>
+<div>Alternatively, load <a href="https://live0.emacsconf.org/gen.webm">https://live0.emacsconf.org/gen.webm</a> or <a href="https://live0.emacsconf.org/gen-480p.webm">https://live0.emacsconf.org/gen-480p.webm</a> (low-res) in a streaming media player such as MPV.</div>
+<hr size="1"><div><a name="links"></a><a href="#watch">Watch</a> - <strong>Pad and Q&amp;A links</strong> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2022/watch/dev/">Development</a></div><div><span><a href="https://emacsconf.org/2022/talks/sat-open">sat-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-sat-open">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2022/talks/journalism">journalism</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-journalism">pad</a>, <a href="https://emacsconf.org/current/journalism/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/school">school</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-school">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: velocitatem</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/handwritten">handwritten</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-handwritten">pad</a>, <a href="https://emacsconf.org/current/handwritten/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/science">science</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-science">pad</a>, <a href="https://emacsconf.org/current/science/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/buddy">buddy</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-buddy">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/meetups">meetups</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-meetups">pad</a>, <a href="https://emacsconf.org/current/meetups/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/buttons">buttons</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-buttons">pad</a>, <a href="https://emacsconf.org/current/buttons/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/realestate">realestate</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-realestate">pad</a>, <a href="nil">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/health">health</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-health">pad</a>, <a href="https://emacsconf.org/current/health/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/jupyter">jupyter</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-jupyter">pad</a>, <a href="https://emacsconf.org/current/jupyter/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/sat-close">sat-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-sat-close">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2022/talks/sun-open">sun-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-sun-open">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2022/talks/survey">survey</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-survey">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: tecosaur</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/orgyear">orgyear</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-orgyear">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: tecosaur</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/rolodex">rolodex</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-rolodex">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/orgsuperlinks">orgsuperlinks</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-orgsuperlinks">pad</a>, <a href="https://emacsconf.org/current/orgsuperlinks/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/orgvm">orgvm</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-orgvm">pad</a>, <a href="https://emacsconf.org/current/orgvm/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/hyperorg">hyperorg</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-hyperorg">pad</a>, <a href="https://emacsconf.org/current/hyperorg/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/workflows">workflows</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-workflows">pad</a>, <a href="https://emacsconf.org/current/workflows/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/grail">grail</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-grail">pad</a>, <a href="https://emacsconf.org/current/grail/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/indieweb">indieweb</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-indieweb">pad</a>, <a href="https://emacsconf.org/current/indieweb/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/devel">devel</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-devel">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2022/talks/fanfare">fanfare</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-fanfare">pad</a>, <a href="https://emacsconf.org/current/fanfare/room/">BBB</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/sun-close">sun-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-sun-close">pad</a>, none)</span></div>
+<div class="pad-output"></div>
+<hr size="1"><div><a name="chat"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <strong>Chat</strong> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2022/watch/dev/">Development</a></div><div>Chat: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">emacsconf-gen</a> on libera.chat</div>
+
+<div class="chat-iframe" data-track="gen"></div>
+<iframe src="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen" height="600" width="100%"></iframe>
+<hr size="1"><div><a name="sched"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <strong>Schedule</strong> | Tracks: <strong>General</strong> - <a href="/2022/watch/dev/">Development</a></div>
+<ul>Legend:
+<li>Solid lines: Q&A will be through a BigBlueButton room (you can ask questions there or through IRC/Etherpad)</li>
+<li>Dashed lines: Q&A will be over IRC or the Etherpad, or the speaker will follow up afterwards</li></ul>
+<div><svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(648,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:55-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="86" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="https://emacsconf.org/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:15 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(397,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg></div>
+<div><h1>Saturday, Dec 3, 2022</h1>
+<div data-start="2022-12-03T14:00:00+0000" data-end="2022-12-03T14:05:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:00</span> - <span class="sched-end">9:05</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-sat-open">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:sat-open</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/sat-open">Saturday opening remarks</a></div>
+ <div class="sched-speakers">Sacha Chua</div>
+
+</div>
+
+<div data-start="2022-12-03T14:05:00+0000" data-end="2022-12-03T14:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:05</span> - <span class="sched-end">9:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-journalism">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/journalism/room/">BBB</a></span>; <span class="sched-slug">id:journalism</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/journalism">Emacs journalism (or everything's a nail if you hit it with Emacs)</a></div>
+ <div class="sched-speakers">Alfred Zanini (he/they)</div>
+
+</div>
+
+<div data-start="2022-12-03T14:45:00+0000" data-end="2022-12-03T14:55:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:45</span> - <span class="sched-end">9:55</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-school">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: velocitatem</a></span>; <span class="sched-slug">id:school</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/school">Back to school with Emacs</a></div>
+ <div class="sched-speakers">Daniel Rösel</div>
+
+</div>
+
+<div data-start="2022-12-03T15:05:00+0000" data-end="2022-12-03T15:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:05</span> - <span class="sched-end">10:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-handwritten">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/handwritten/room/">BBB</a></span>; <span class="sched-slug">id:handwritten</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/handwritten">How to incorporate handwritten notes into Emacs Orgmode</a></div>
+ <div class="sched-speakers">Bala Ramadurai (his/him)</div>
+
+</div>
+
+<div data-start="2022-12-03T15:45:00+0000" data-end="2022-12-03T16:05:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:45</span> - <span class="sched-end">11:05</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-science">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/science/room/">BBB</a></span>; <span class="sched-slug">id:science</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/science">Writing and organizing literature notes for scientific writing</a></div>
+ <div class="sched-speakers">Vidianos Giannitsis</div>
+
+</div>
+
+<div data-start="2022-12-03T16:25:00+0000" data-end="2022-12-03T16:35:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:25</span> - <span class="sched-end">11:35</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-buddy">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a></span>; <span class="sched-slug">id:buddy</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/buddy">The Emacs Buddy initiative</a></div>
+ <div class="sched-speakers">Andrea</div>
+
+</div>
+
+<div data-start="2022-12-03T18:00:00+0000" data-end="2022-12-03T18:20:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-meetups">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/meetups/room/">BBB</a></span>; <span class="sched-slug">id:meetups</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/meetups">Attending and organizing Emacs meetups</a></div>
+ <div class="sched-speakers">Bhavin Gandhi (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-03T18:40:00+0000" data-end="2022-12-03T18:55:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:40</span> - <span class="sched-end">1:55</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-buttons">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/buttons/room/">BBB</a></span>; <span class="sched-slug">id:buttons</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/buttons">Linking personal info with Hyperbole implicit buttons</a></div>
+ <div class="sched-speakers">Mats Lidell (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-03T19:15:00+0000" data-end="2022-12-03T19:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:15</span> - <span class="sched-end">2:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-realestate">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="nil">Etherpad</a></span>; <span class="sched-slug">id:realestate</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/realestate">Real estate and Org table formulas</a></div>
+ <div class="sched-speakers">Daniel Gopar (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-03T20:00:00+0000" data-end="2022-12-03T20:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:00</span> - <span class="sched-end">3:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-health">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/health/room/">BBB</a></span>; <span class="sched-slug">id:health</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/health">Health data journaling and visualization with Org Mode and gnuplot</a></div>
+ <div class="sched-speakers">David O'Toole (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-03T20:45:00+0000" data-end="2022-12-03T21:05:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:45</span> - <span class="sched-end">4:05</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-jupyter">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/jupyter/room/">BBB</a></span>; <span class="sched-slug">id:jupyter</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/jupyter">Edit live Jupyter notebook cells with Emacs</a></div>
+ <div class="sched-speakers">Blaine Mooers (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-03T21:50:00+0000" data-end="2022-12-03T21:55:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:50</span> - <span class="sched-end">4:55</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-sat-close">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:sat-close</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/sat-close">Saturday closing remarks</a></div>
+
+
+</div>
+
+<h1>Sunday, Dec 4, 2022</h1>
+<div data-start="2022-12-04T14:00:00+0000" data-end="2022-12-04T14:05:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:00</span> - <span class="sched-end">9:05</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-sun-open">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:sun-open</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/sun-open">Sunday opening remarks</a></div>
+
+
+</div>
+
+<div data-start="2022-12-04T14:05:00+0000" data-end="2022-12-04T14:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:05</span> - <span class="sched-end">9:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-survey">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: tecosaur</a></span>; <span class="sched-slug">id:survey</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/survey">Results of the 2022 Emacs Survey</a></div>
+ <div class="sched-speakers">Timothy (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-04T14:35:00+0000" data-end="2022-12-04T14:45:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:35</span> - <span class="sched-end">9:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-orgyear">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: tecosaur</a></span>; <span class="sched-slug">id:orgyear</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/orgyear">This Year in Org</a></div>
+ <div class="sched-speakers">Timothy (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-04T14:55:00+0000" data-end="2022-12-04T15:20:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:55</span> - <span class="sched-end">10:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-rolodex">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a></span>; <span class="sched-slug">id:rolodex</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/rolodex">Build a Zettelkasten with the Hyperbole Rolodex</a></div>
+ <div class="sched-speakers">Ramin Honary (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-04T15:40:00+0000" data-end="2022-12-04T15:50:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:40</span> - <span class="sched-end">10:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-orgsuperlinks">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/orgsuperlinks/room/">BBB</a></span>; <span class="sched-slug">id:orgsuperlinks</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/orgsuperlinks">Linking headings with org-super-links (poor-man's Zettelkasten)</a></div>
+ <div class="sched-speakers">Karl Voit (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-04T16:10:00+0000" data-end="2022-12-04T16:20:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:10</span> - <span class="sched-end">11:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-orgvm">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/orgvm/room/">BBB</a></span>; <span class="sched-slug">id:orgvm</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/orgvm">orgvm: a simple HTTP server for org</a></div>
+ <div class="sched-speakers">Corwin Brust (he/him/any)</div>
+
+</div>
+
+<div data-start="2022-12-04T18:00:00+0000" data-end="2022-12-04T18:30:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:30</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-hyperorg">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/hyperorg/room/">BBB</a></span>; <span class="sched-slug">id:hyperorg</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/hyperorg">Powerful productivity with Hyperbole and Org Mode</a></div>
+ <div class="sched-speakers">Robert Weiner</div>
+
+</div>
+
+<div data-start="2022-12-04T18:50:00+0000" data-end="2022-12-04T19:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:50</span> - <span class="sched-end">2:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-workflows">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/workflows/room/">BBB</a></span>; <span class="sched-slug">id:workflows</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/workflows">Org workflows for developers</a></div>
+ <div class="sched-speakers">George Mauer (he/him/they/ze)</div>
+
+</div>
+
+<div data-start="2022-12-04T19:35:00+0000" data-end="2022-12-04T19:55:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:35</span> - <span class="sched-end">2:55</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-grail">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/grail/room/">BBB</a></span>; <span class="sched-slug">id:grail</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/grail">GRAIL---A Generalized Representation and Aggregation of Information Layers</a></div>
+ <div class="sched-speakers">Sameer Pradhan (he/him)</div>
+
+</div>
+
+<div data-start="2022-12-04T20:25:00+0000" data-end="2022-12-04T20:45:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:25</span> - <span class="sched-end">3:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-indieweb">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/indieweb/room/">BBB</a></span>; <span class="sched-slug">id:indieweb</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/indieweb">Putting Org Mode on the Indieweb</a></div>
+ <div class="sched-speakers">Michael Herstine</div>
+
+</div>
+
+<div data-start="2022-12-04T21:05:00+0000" data-end="2022-12-04T21:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:05</span> - <span class="sched-end">4:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-devel">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:devel</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/devel">Emacs development updates</a></div>
+ <div class="sched-speakers">John Wiegley</div>
+
+</div>
+
+<div data-start="2022-12-04T21:25:00+0000" data-end="2022-12-04T21:35:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:25</span> - <span class="sched-end">4:35</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-fanfare">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://emacsconf.org/current/fanfare/room/">BBB</a></span>; <span class="sched-slug">id:fanfare</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/fanfare">Fanfare for the Common Emacs User</a></div>
+ <div class="sched-speakers">John Cummings</div>
+
+</div>
+
+<div data-start="2022-12-04T21:50:00+0000" data-end="2022-12-04T22:00:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:50</span> - <span class="sched-end">5:00</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2022-sun-close">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:sun-close</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/sun-close">Sunday closing remarks</a></div>
+
+
+</div>
+
+</div>
diff --git a/2022/watch/info.md b/2022/watch/info.md
new file mode 100644
index 00000000..b6b0a50f
--- /dev/null
+++ b/2022/watch/info.md
@@ -0,0 +1,7 @@
+[[!sidebar content=""]]<!-- Automatically generated by emacsconf-publish-watch-pages -->
+
+<h1>Tracks</h1><table width="100%"><tr><th>Watch page</th><th>IRC channel (libera.chat)</th><th>Alternative for streaming player</th><th>Low res</th></tr>
+<tr><td><div class="sched-track General"><a href="/2022/watch/gen/">General</a></div></td><td><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">emacsconf-gen</a></td><td><a href="https://live0.emacsconf.org/gen.webm">https://live0.emacsconf.org/gen.webm</a></td><td><a href="https://live0.emacsconf.org/gen-480p.webm">gen-480p.webm</a></tr>
+<tr><td><div class="sched-track Development"><a href="/2022/watch/dev/">Development</a></div></td><td><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">emacsconf-dev</a></td><td><a href="https://live0.emacsconf.org/dev.webm">https://live0.emacsconf.org/dev.webm</a></td><td><a href="https://live0.emacsconf.org/dev-480p.webm">dev-480p.webm</a></tr></table>
+
+<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(648,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 9:55-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="86" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="https://emacsconf.org/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 11:10-11:20 orgvm: a simple HTTP server for org</title> <rect x="203" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(216,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:15 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:35- 2:55 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="525" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(554,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:25- 3:45 Putting Org Mode on the Indieweb</title> <rect x="603" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(632,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 4:05- 4:15 Emacs development updates</title> <rect x="666" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:25- 4:35 Fanfare for the Common Emacs User</title> <rect x="698" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(711,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:50- 5:00 Sunday closing remarks</title> <rect x="737" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(750,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(131,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:50-11:05 justl: Driving recipes within Emacs</title> <rect x="172" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(193,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/rms" title="What I'd like to see in Emacs" data-slug="rms"> <title> 11:15-11:35 What I'd like to see in Emacs</title> <rect x="211" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rms</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:15 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(397,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:40- 1:55 Top 10 reasons why you should be using Eshell</title> <rect x="439" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(460,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:20- 2:40 Emacs was async before async was cool</title> <rect x="501" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:15- 3:35 The Wheels on D-Bus</title> <rect x="588" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(617,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:10 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(671,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> \ No newline at end of file
diff --git a/2023.md b/2023.md
new file mode 100644
index 00000000..1d5b5373
--- /dev/null
+++ b/2023.md
@@ -0,0 +1,56 @@
+[[!meta copyright="Copyright &copy; 2021, 2022 Amin Bandali; 2023 Sacha Chua"]]
+[[!sidebar content=""]]
+
+<p class="center">EmacsConf 2023 | Online Conference<br />
+<b>December 2 and 3, 2023 (Sat-Sun)</b></p>
+
+<p class="center">[[!img /i/emacsconf-logo1-256.png
+alt="EmacsConf logo"]]</p>
+
+<p class="center"><strong>[[2023 Report|report]]</strong> | <strong>[[Talks|talks]]</strong> | [[Volunteer]] | [[Prepare]] | [[Planning]] | [[Guidelines for Conduct|conduct]] | [[Contact information|contact]]</p>
+
+<p class="center">EmacsConf is the conference about the joy of
+<a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> and
+Emacs Lisp. Check out the [[conference report!|report]]</p>
+
+All the pre-recorded videos and live BBB recordings are now available at
+<https://emacsconf.org/2023/talks>. We'll be working on extracting more information
+over the next few weeks. If you'd
+like updates, please sign up for
+[emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss)
+or check this page in a while.
+
+ [[**Volunteer**|volunteer]], get involved, and help spread the word!
+
+We held EmacsConf 2023 as an **online conference** again this year.
+We remain fully committed to freedom, and we will continue using our
+infrastructure and streaming setup consisting entirely of [free
+software][freesw], much like previous EmacsConf conferences.
+
+There was also a satellite event in
+[Lucerne, Switzerland](https://200ok.ch/posts/2023-11-01_announcing_emacsconf__swiss_satellite.html).
+Let us know if you want to organize one next year!
+
+For general EmacsConf discussions, join the
+[emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss)
+mailing list. For discussions related to organizing EmacsConf, join
+the
+[emacsconf-org](https://lists.gnu.org/mailman/listinfo/emacsconf-org)
+mailing list. You can email us publicly at
+<mailto:emacsconf-org@gnu.org> or privately at
+<mailto:emacsconf-org-private@gnu.org>.
+
+Come hang out with us in the `#emacsconf` channel on `irc.libera.chat`
+([Libera.Chat][libera] IRC network). You can join the chat using
+[your favourite IRC client][libera-emacsconf], or by visiting
+[chat.emacsconf.org][chat] in your web browser.
+
+[freesw]: https://www.gnu.org/philosophy/free-sw.html
+[libera]: https://libera.chat
+[libera-emacsconf]: ircs://irc.libera.chat:6697/emacsconf
+[chat]: https://chat.emacsconf.org
+
+Archived pages:
+* [[Call for Participation|cfp]]
+* [[Ideas]]
+* [[Submit]]
diff --git a/2023/bbb-for-speakers.md b/2023/bbb-for-speakers.md
new file mode 100644
index 00000000..2f77c24f
--- /dev/null
+++ b/2023/bbb-for-speakers.md
@@ -0,0 +1,127 @@
+[[!meta title="BigBlueButton tips for speakers"]]
+[[!meta copyright="Copyright &copy; 2023 Sacha Chua"]]
+
+# BigBlueButton tips for speakers
+
+We'll be using BigBlueButton for EmacsConf 2023 live presentations and
+web conference Q&A sessions. It should act mostly like other web
+conferencing systems people have used before, but just in case, it's a
+good idea to test it with your setup before the conference begins.
+
+We've set up one room for each speaker or group of speakers. We'll
+e-mail you with your personal URL, and you can also find it
+[backstage](https://media.emacsconf.org/2023/backstage) as the "Open
+backstage BigBlueButton" link for your talk. Before the conference, we'll set it so
+that anyone can start a meeting and all users are moderators. That
+way, when you connect to the meeting room to test your setup, you'll
+be able to share your screen and/or your webcam.
+
+## Audio
+
+- When you connect to the meeting, it will say "How would you like to
+ join the audio?" After you choose "Microphone", it will display
+ "Connecting to echo test..." and then "This is a private echo test.
+ Speak a few words. Did you hear audio?" When you talk, you should
+ hear your words echoed back to you after a short delay. If you
+ don't, please try different audio settings, check your web browser's
+ audio permissions, or try a different web browser.
+ - [How to manage your camera and microphone permissions with Mozilla Firefox](https://support.mozilla.org/en-US/kb/how-manage-your-camera-and-microphone-permissions)
+ - [How to manage your camera and microphone permissions with Google Chrome](https://support.google.com/chrome/answer/2693767?hl=en&co=GENIE.Platform%3DDesktop)
+
+ You can repeat the echo test by leaving and rejoining the audio
+ using the telephone handset icon at the bottom.
+
+- Using headphones or earphones can help reduce noise and avoid audio
+ feedback loops. If you happen to have an external microphone, using
+ it may also help reduce noise.
+
+- You will start off muted. You can unmute yourself by using the
+ microphone icon near the bottom. Then you can doublecheck your audio
+ by seeing if your name shows up with a microphone icon near the top
+ when you're speaking, or by joining from another device.
+
+- If you plan to share sounds from your computer (not just your
+ microphone), please test if this works and if the audio can be heard
+ via the web conference. It should be echoed back to you during the
+ echo test. If it isn't echoed back to you,
+
+- BigBlueButton sometimes makes interesting choices about audio
+ levels. If you can familiarize yourself with the microphone volume
+ control setting for your system, that will make it easier to adjust
+ audio during the conference.
+
+## Sharing
+
+- You can share your screen using the monitor icon on the bottom
+ toolbar. (This might not be available on phones.) Sharing a single
+ window might be better than sharing the whole screen, because then
+ you'll be able to easily resize the window in order to improve
+ readability.
+
+- Sharing screens can be a little tricky with multi-monitor setups. If
+ you use more than one monitor, please check if sharing works the way
+ you expect it to. If it doesn't, you may need to consider using one
+ monitor during your Q&A session.
+
+- Uploading a presentation (PDF or other document types) doesn't work
+ on our instance, so if you would like to share something, you will
+ need to share your screen.
+
+## What to expect during the conference
+
+I'll change the room settings on Dec 1 so that anyone can start the
+web conference but people won't be moderators when they join. Please
+check your setup before then.
+
+You can check in during the conference by introducing yourself in the
+[#emacsconf-org channel](https://chat.emacsconf.org/?join=emacsconf-org)
+with something like "Hi, this is *name* checking in". Please check in
+ideally 30 minutes or more before your live talk or Q&A session so
+that we don't start panicking. The check-in volunteer will join you in
+your BigBlueButton room, make you a moderator, and go through the
+pre-flight checklist with you.
+
+Here is the checklist we'll do:
+
+- Can you speak and be heard? Is there echo?
+- Can you hear the check-in volunteer?
+- Can you share your screen? Will the screen be readable at 1280x720?
+- If you plan to show your keystrokes, is that display visible?
+- If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background?
+- Can you view the Etherpad where we'll collect questions? (The Etherpad link is in the backstage area under your talk.) Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or do you want a volunteer to read questions to you?
+- If you plan to play sounds during your Q&A session, are they audible?
+
+After the check-in volunteer gets you settled in, you can keep the
+browser tab open with the BigBlueButton room, stretch, get a glass of
+water, etc. A few minutes before your Q&A session starts, we'll pop
+back in to give you a heads-up. We'll remind you to close any other
+tab where you might be watching EmacsConf so that you don't end up
+hearing yourself with a delay (that can be quite confusing), and we'll
+start the recording. We'll start the recording when the host and
+streamer join you.
+
+You can answer whatever questions you like in whatever order you like.
+We would greatly appreciate it if you read the question out loud first
+before you answer it. That makes it much easier to capture the notes
+and to add an index so that people can jump to specific questions.
+
+When you and the host are comfortable with how things are going, we
+can open it up for people to join you so they can chat with you
+directly. You can stay in the web conference room and chat with them
+for as long as you like. When you're ready to wrap up, you can click
+on the three-dot menu in the top right and choose **End meeting**.
+
+If you accidentally share something or say something that you want to
+be removed from the recording (it happens!), type something into the
+text chat like "oops!" with possibly some details of what you'd like
+us to do. We can get the timestamp from that and look into editing the
+recording.
+
+## After the conference
+
+We'll download the recordings, process them, copy questions and
+answers to the wiki page, and see if we can add a chapter index so
+people can jump to specific parts of the discussion. We'll keep you up
+to date as things move through the process.
+
+Thank you so much for being part of EmacsConf!
diff --git a/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt b/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt
new file mode 100644
index 00000000..24d868ec
--- /dev/null
+++ b/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt
@@ -0,0 +1,14 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:01.199
+Introduction
+
+00:01:01.200 --> 00:03:33.359
+Demo
+
+00:03:33.360 --> 00:04:47.039
+emi-escape-12
+
+00:04:47.040 --> 00:06:03.281
+The rest of the game
diff --git a/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt b/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt
new file mode 100644
index 00000000..ef19436d
--- /dev/null
+++ b/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt
@@ -0,0 +1,315 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.039
+Hi, I'm going to give you a little demo
+
+00:00:04.040 --> 00:00:06.439
+of a project that I'm working on
+
+00:00:06.440 --> 00:00:09.839
+which is called the `orgdungeon`.
+
+00:00:09.840 --> 00:00:16.039
+As you can see here, they are just a bunch of Org files
+
+00:00:16.040 --> 00:00:20.559
+and also an Emacs Lisp file.
+
+00:00:20.560 --> 00:00:26.799
+What I found is that if you have these Org files
+
+00:00:26.800 --> 00:00:30.919
+and then you have an Emacs Lisp file as a source
+
+00:00:30.920 --> 00:00:36.879
+to control how to progress from one file to another,
+
+00:00:36.880 --> 00:00:40.519
+it will give you a game-like experience.
+
+00:00:40.520 --> 00:00:43.479
+It's like the old game Myst.
+
+00:00:43.480 --> 00:00:46.119
+It was developed with the technology
+
+00:00:46.120 --> 00:00:48.759
+HyperCard for the Macintosh.
+
+00:00:48.760 --> 00:00:53.199
+Basically, it uses a similar technology,
+
+00:00:53.200 --> 00:00:57.559
+so a similar interface to the developer
+
+00:00:57.560 --> 00:01:01.199
+who was using that technology to develop the game.
+
+NOTE Demo
+
+00:01:01.200 --> 00:01:03.799
+Concretely, I'm going to give you
+
+00:01:03.800 --> 00:01:08.879
+a demo of how the game looks like.
+
+00:01:08.880 --> 00:01:14.839
+So, this is a very vanilla Emacs setup.
+
+00:01:14.840 --> 00:01:18.639
+Then I open up the first Org file.
+
+00:01:18.640 --> 00:01:22.839
+The Org file is just a bunch of text,
+
+00:01:22.840 --> 00:01:25.519
+but it tells you a story.
+
+00:01:25.520 --> 00:01:27.359
+So you wake up somewhere,
+
+00:01:27.360 --> 00:01:32.599
+and then there is a dog-like robot called Emi around you.
+
+00:01:32.600 --> 00:01:37.759
+And then it tells you what you should do.
+
+00:01:37.760 --> 00:01:40.799
+Following the instructions...
+
+00:01:40.800 --> 00:01:42.719
+For example, here it tells you
+
+00:01:42.720 --> 00:01:46.239
+down there is one thing called "code block,"
+
+00:01:46.240 --> 00:01:51.359
+and then you can evaluate it by pressing `C-c C-c`.
+
+00:01:51.360 --> 00:01:53.639
+Then we can just go there
+
+00:01:53.640 --> 00:01:55.239
+and then just evaluate the code block.
+
+00:01:55.240 --> 00:02:00.239
+So technically it just runs the Emacs Lisp file,
+
+00:02:00.240 --> 00:02:04.999
+because you can see here, if you load Emacs Lisp...
+
+00:02:05.000 --> 00:02:07.159
+It just evaluates that Emacs Lisp file.
+
+00:02:07.160 --> 00:02:09.799
+I can just say `C-c C-c`.
+
+00:02:09.800 --> 00:02:12.319
+Then for this one, I just say yes,
+
+00:02:12.320 --> 00:02:16.519
+and then it will jump to another file.
+
+00:02:16.520 --> 00:02:18.759
+But in the game, I call it the plane.
+
+00:02:18.760 --> 00:02:21.039
+So it jumps to another plane.
+
+00:02:21.040 --> 00:02:24.039
+Yeah, so...
+
+00:02:24.040 --> 00:02:26.399
+In the other one, it's just saying that
+
+00:02:26.400 --> 00:02:29.879
+there is a function called `emi-escape-10`.
+
+00:02:29.880 --> 00:02:33.479
+Assuming that you don't have any experience
+
+00:02:33.480 --> 00:02:34.759
+how to use Emacs,
+
+00:02:34.760 --> 00:02:38.759
+so you have no idea how to do that,
+
+00:02:38.760 --> 00:02:41.319
+but down there, it's saying that
+
+00:02:41.320 --> 00:02:44.319
+there is a key combination called `C-h f`,
+
+00:02:44.320 --> 00:02:48.399
+and it will bring up the help system.
+
+00:02:48.400 --> 00:02:52.559
+Then you can read the help file of `emi-escape-10`.
+
+00:02:52.560 --> 00:02:55.739
+So you can just do that. For example, `C-h f`
+
+00:02:55.740 --> 00:03:02.999
+and then `describe-function` `emi-escape-10` here.
+
+00:03:03.000 --> 00:03:06.319
+It will show you the help file.
+
+00:03:06.320 --> 00:03:10.919
+Then it's just saying that you can press `M-x`,
+
+00:03:10.920 --> 00:03:13.519
+and Meta usually mapped to Alt,
+
+00:03:13.520 --> 00:03:15.079
+and then yeah.
+
+00:03:15.080 --> 00:03:18.719
+Then you can just close this help file using `C-x 1`.
+
+00:03:18.720 --> 00:03:21.399
+I'm just going to do that. And then yeah...
+
+00:03:21.400 --> 00:03:31.479
+I'm just try that. `M-x` and then `emi-escape-10`.
+
+00:03:31.480 --> 00:03:33.359
+All right.
+
+NOTE emi-escape-12
+
+00:03:33.360 --> 00:03:36.039
+So I will jump to another file.
+
+00:03:36.040 --> 00:03:39.359
+Or in the game, you jump to another plane.
+
+00:03:39.360 --> 00:03:40.338
+And now you know that
+
+00:03:40.339 --> 00:03:44.839
+there is a function called `emi-escape-12`.
+
+00:03:44.840 --> 00:03:47.638
+And yeah, you can just do that `emi`,
+
+00:03:47.639 --> 00:03:50.399
+because you learned it previously, right.
+
+00:03:50.400 --> 00:03:52.079
+`emi-escape-12`.
+
+00:03:52.080 --> 00:03:55.119
+But this time, it asks you for a password,
+
+00:03:55.120 --> 00:03:57.799
+which you probably don't know, right?
+
+00:03:57.800 --> 00:03:59.839
+If you just type in anything,
+
+00:03:59.840 --> 00:04:02.719
+it will just say incorrect password.
+
+00:04:02.720 --> 00:04:06.359
+But yeah, it's part of the learning experience
+
+00:04:06.360 --> 00:04:07.279
+because previously you learned
+
+00:04:07.280 --> 00:04:10.319
+that you should use the help file,
+
+00:04:10.320 --> 00:04:16.199
+help system to read the help file of a function,
+
+00:04:16.200 --> 00:04:18.319
+so you can just use the help file
+
+00:04:18.320 --> 00:04:25.839
+to look for the help of `emi-escape-12`.
+
+00:04:25.840 --> 00:04:29.519
+Then, yeah, the help file will say that
+
+00:04:29.520 --> 00:04:31.239
+you should enter a password,
+
+00:04:31.240 --> 00:04:34.159
+and the password is `emi`.
+
+00:04:34.160 --> 00:04:36.439
+Right. So you can just do that.
+
+00:04:36.440 --> 00:04:42.239
+Write `emi-escape-12`,
+
+00:04:42.240 --> 00:04:47.039
+and then now you know the password is `emi`. Right.
+
+NOTE The rest of the game
+
+00:04:47.040 --> 00:04:51.839
+So you can progress along these different files,
+
+00:04:51.840 --> 00:04:53.519
+and then if you...
+
+00:04:53.520 --> 00:04:54.639
+Okay, it's like a game,
+
+00:04:54.640 --> 00:04:57.279
+but at the same time, it also teaches you
+
+00:04:57.280 --> 00:05:01.679
+something about how Emacs works.
+
+00:05:01.680 --> 00:05:04.599
+For example, like the previous one,
+
+00:05:04.600 --> 00:05:07.279
+you know how to use the help file, for example,
+
+00:05:07.280 --> 00:05:11.519
+but in the later part, you will learn how to
+
+00:05:11.520 --> 00:05:14.279
+evaluate some Emacs Lisp code
+
+00:05:14.280 --> 00:05:17.159
+and also how to write some Emacs Lisp code
+
+00:05:17.160 --> 00:05:19.559
+as well, and then you will learn
+
+00:05:19.560 --> 00:05:23.399
+the difference between interactive commands
+
+00:05:23.400 --> 00:05:27.239
+and also just ordinary functions, for example.
+
+00:05:27.240 --> 00:05:31.399
+Now, I just created a few Org files,
+
+00:05:31.400 --> 00:05:36.439
+but I'm actively adding more Org files
+
+00:05:36.440 --> 00:05:39.599
+so that we can have a complete kind of
+
+00:05:39.600 --> 00:05:42.559
+educational experience.
+
+00:05:42.560 --> 00:05:45.639
+If you want to follow along [with] this project,
+
+00:05:45.640 --> 00:05:51.359
+you can just go to my Github repository.
+
+00:05:51.360 --> 00:05:56.539
+I hope you enjoyed this little demo.
+
+00:05:56.540 --> 00:06:03.281
+Thank you.
diff --git a/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt
new file mode 100644
index 00000000..dca4982e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt
@@ -0,0 +1,23 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:16.079
+Introduction
+
+00:01:16.080 --> 00:02:18.959
+Org Mode
+
+00:02:18.960 --> 00:06:27.839
+Working together
+
+00:06:27.840 --> 00:08:04.039
+Data cleaning
+
+00:08:04.040 --> 00:12:36.039
+Processing
+
+00:12:36.040 --> 00:14:01.759
+Visualization
+
+00:14:01.760 --> 00:19:07.280
+Preserve
diff --git a/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt
new file mode 100644
index 00000000..1dcc0b22
--- /dev/null
+++ b/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt
@@ -0,0 +1,1176 @@
+WEBVTT captioned by amine, checked by sachac
+
+NOTE Introduction
+
+00:00.000 --> 00:00:01.874
+[Lukas]: Welcome to our presentation,
+
+00:00:01.875 --> 00:00:03.599
+Collaborative Data Processing
+
+00:03.600 --> 00:06.039
+and Documenting using org-babel.
+
+00:06.040 --> 00:07.759
+My name is Lukas Bossert, and I'm
+
+00:07.760 --> 00:00:09.740
+from the RWTH Aachen University
+
+00:00:09.741 --> 00:00:12.519
+in the city of Aachen, Germany.
+
+00:12.520 --> 00:14.839
+[Jonathan]: And my name is Jonathan Hartmann.
+
+00:14.840 --> 00:18.719
+I'm also from the IT Center here at RWTH Aachen.
+
+00:18.720 --> 00:19.239
+[Lukas]: Great.
+
+00:19.240 --> 00:21.679
+And we will show you today how you
+
+00:21.680 --> 00:25.399
+can use Org Mode for data processing.
+
+00:25.400 --> 00:27.999
+So you see a little workflow what we are going to do.
+
+00:28.000 --> 00:31.199
+First, we will give you a slight introduction to Org Mode.
+
+00:31.200 --> 00:34.639
+Then we will dive into the part of data preparing.
+
+00:34.640 --> 00:38.679
+First, you're going to query the data using the language SPARQL.
+
+00:38.680 --> 00:41.759
+Then we're going to clean it using a different language.
+
+00:41.760 --> 00:44.279
+And in the main part of our presentation,
+
+00:44.280 --> 00:48.119
+we're going to do the data processing, first aggregating
+
+00:48.120 --> 00:52.519
+using Python, later on counting items using Org,
+
+00:52.520 --> 00:56.360
+and even visualizing it using R. At the end,
+
+00:56.400 --> 00:58.959
+we're going to show you how to preserve
+
+00:58.960 --> 01:01.759
+the data and the document and its documentation,
+
+01:01.760 --> 01:06.599
+first doing in plain exporting, then adding some metadata,
+
+01:06.600 --> 01:09.759
+and showing you two different ways, first a manual export,
+
+01:09.760 --> 01:13.359
+and also then a batch-processed export.
+
+01:13.360 --> 01:14.239
+All right.
+
+01:14.240 --> 01:16.079
+Let's dive in to that.
+
+NOTE Org Mode
+
+01:16.080 --> 01:19.919
+Jonathan, can you give us an introduction about Org Mode?
+
+01:19.920 --> 01:20.439
+[Jonathan]: Of course.
+
+01:20.440 --> 01:23.079
+So in case anyone isn't familiar with it,
+
+01:23.080 --> 01:25.879
+Org Mode, in the words of Carsten Dominik,
+
+01:25.880 --> 01:28.559
+is back to the future for plain text.
+
+01:28.560 --> 01:31.439
+So this is just a module available for Emacs,
+
+01:31.440 --> 01:32.519
+plain-text base.
+
+01:32.520 --> 01:34.919
+It's been around since 2003, which
+
+01:34.920 --> 01:36.799
+makes it about 20 years old.
+
+01:36.800 --> 01:40.159
+And it's extensible and fully customizable.
+
+01:40.160 --> 01:43.999
+And especially, it's very convenient, very good
+
+01:44.000 --> 01:46.719
+for scientific text production and organization.
+
+01:46.720 --> 01:49.439
+So for example, you can do project management, agenda,
+
+01:49.440 --> 01:52.559
+diary, journaling, personal knowledge management,
+
+01:52.560 --> 01:53.359
+presentation.
+
+01:53.360 --> 01:55.520
+Even this is written in Org Mode.
+
+01:55.560 --> 01:57.439
+It's an Org Mode presentation.
+
+01:57.440 --> 01:59.199
+You can do single source publishing,
+
+01:59.200 --> 02:01.679
+which we will do later on, and also
+
+02:01.680 --> 02:06.479
+literate programming, which is the core of our talk.
+
+02:06.480 --> 02:06.999
+OK.
+
+02:07.000 --> 02:10.799
+[Lukas]: So let me stop this presentation here.
+
+02:10.800 --> 02:14.719
+So what you see here is the plain text underneath it.
+
+02:14.720 --> 02:18.959
+So this is Org Mode.
+
+NOTE Working together
+
+02:18.960 --> 02:21.919
+And Jonathan, since we kind of already
+
+02:21.920 --> 02:25.320
+did the introduction together, should we
+
+02:26.120 --> 00:02:28.760
+also do the working part together?
+
+00:02:28.761 --> 00:02:29.700
+[Jonathan]: Of course.
+
+00:02:29.701 --> 00:02:33.119
+So you see on the screen there on the right,
+
+00:02:33.120 --> 00:02:35.060
+that's my screen in Emacs.
+
+00:02:35.061 --> 00:02:39.520
+And Lukas, why don't you host a session using CRDT,
+
+00:02:39.521 --> 00:02:41.200
+and I'll connect to your buffer.
+
+00:02:41.201 --> 00:02:42.560
+[Lukas]: OK. Great.
+
+00:02:42.561 --> 00:02:43.280
+I do that.
+
+00:02:43.281 --> 00:02:46.180
+So what I do, I'm using Doom Emacs.
+
+00:02:46.181 --> 00:02:49.307
+And I can use the `SPC` and then the `l`
+
+00:02:49.308 --> 00:02:52.140
+for the live share/collab part.
+
+00:02:52.141 --> 02:57.999
+I can use the `s` for share current buffer.
+
+02:58.000 --> 00:03:01.559
+So when I do this, I'm getting asked for some settings.
+
+00:03:01.560 --> 00:03:04.439
+I'm going with the default settings here.
+
+00:03:04.440 --> 00:03:08.340
+So default port, no password, and my display name.
+
+00:03:08.341 --> 00:03:11.940
+And now Emacs is connecting.
+
+00:03:11.941 --> 00:03:15.179
+And once it's connected, which just takes a couple of seconds,
+
+00:03:15.180 --> 00:03:17.239
+I can get the URL.
+
+00:03:17.240 --> 03:20.800
+So I'm going back to this menu and using `y`
+
+03:21.160 --> 03:23.999
+for copying the URL of the current session.
+
+03:24.000 --> 03:27.799
+And this is the URL I'm going to send over to you, Jonathan,
+
+03:27.800 --> 03:29.079
+to pick that up.
+
+03:29.080 --> 03:29.599
+[Jonathan]: Right.
+
+03:29.600 --> 03:30.079
+OK.
+
+03:30.080 --> 00:03:36.999
+And now on my screen, I'm going to do a `SPC l c` for connect.
+
+00:03:37.000 --> 00:03:38.740
+And I'm going to paste the URL
+
+00:03:38.741 --> 00:03:40.040
+that Lukas just sent me in here.
+
+00:03:40.980 --> 03:43.719
+Default port, no password.
+
+03:43.720 --> 00:03:45.440
+And we're connecting now.
+
+00:03:45.700 --> 03:48.600
+So this takes a second just to get us synced up.
+
+03:51.600 --> 00:03:54.160
+So we can work on the same document at the same time.
+
+00:03:54.161 --> 03:56.639
+We can follow each other's cursors around.
+
+03:56.640 --> 03:58.839
+We can have multiple buffers open and work on them
+
+03:58.840 --> 04:00.999
+at the same time.
+
+04:01.000 --> 04:04.719
+And so here you see that we are both in the same document.
+
+04:04.720 --> 04:06.280
+You can see my cursor popping around.
+
+04:09.040 --> 04:13.279
+And you can see we're both editing the same item.
+
+04:13.280 --> 04:14.039
+Great.
+
+04:14.040 --> 04:18.039
+[Lukas]: So we also see who else is currently in our buffer
+
+04:18.040 --> 04:20.199
+with the user overview.
+
+04:20.200 --> 04:23.559
+So let me just delete that window.
+
+04:23.560 --> 04:26.079
+And that's going to work in our main one.
+
+04:26.080 --> 04:29.599
+So we said first part is about data retrieval.
+
+04:29.600 --> 04:32.720
+So we should give it a headline.
+
+04:37.080 --> 04:39.239
+We said prepare stage.
+
+04:39.240 --> 04:42.319
+So what are we going to do first, Jonathan?
+
+04:42.320 --> 00:04:43.940
+[Jonathan]: So what we're going to do,
+
+00:04:43.941 --> 00:04:45.399
+what this whole document is based upon,
+
+04:45.400 --> 04:50.119
+is we're going to pull data from Wikidata using a SPARQL query.
+
+04:50.120 --> 04:53.519
+The data we're going to pull is related to the NFDIs,
+
+04:53.520 --> 04:55.639
+which here in Germany is the National Forschungsdaten
+
+04:55.640 --> 05:00.679
+Infrastructure, which is a sort of collection of universities
+
+05:00.680 --> 05:03.399
+that work together on various research projects.
+
+05:03.400 --> 05:05.599
+And this is emblematic of the kind of data
+
+05:05.600 --> 05:09.239
+that we would be interested in working with here.
+
+05:09.240 --> 05:13.359
+So I'm going to paste a--forgive the pre-written code--
+
+05:13.360 --> 05:19.840
+I'm going to paste some text in here.
+
+05:20.040 --> 00:05:21.407
+[Lukas]: And while you are talking, I just
+
+00:05:21.408 --> 00:05:23.359
+keep on documenting what we do
+
+00:05:23.360 --> 00:05:25.880
+so we can split the work.
+
+05:27.360 --> 05:29.679
+[Jonathan]: In here, after a minor technical upset,
+
+05:29.680 --> 05:32.559
+is the raw dataset cell.
+
+05:32.560 --> 00:05:34.740
+And it's going to use SPARQL,
+
+00:05:34.741 --> 00:05:37.174
+which is how we have the syntax highlighting
+
+00:05:37.175 --> 00:05:37.940
+in our code here.
+
+00:05:37.941 --> 05:40.639
+It's going to go to the URL endpoint
+
+05:40.640 --> 05:43.639
+query.wikidata.org/sparql ,
+
+05:43.640 --> 05:46.799
+and it's going to return the data as a text CSV,
+
+05:46.800 --> 05:49.279
+and it's going to cache that data
+
+05:49.280 --> 05:51.439
+so that we don't constantly hammer the API every time
+
+05:51.440 --> 05:54.239
+we run this notebook.
+
+05:54.240 --> 00:05:57.360
+So I'm going to run that there.
+
+00:05:57.361 --> 05:58.799
+You can see down at the bottom of my screen,
+
+05:58.800 --> 06:00.840
+we're contacting the host query.wikidata.org .
+
+06:05.720 --> 06:07.319
+[Lukas]: And there's the result.
+
+06:07.320 --> 06:11.799
+[Jonathan]: Yeah, except I think that for our purposes here,
+
+06:11.800 --> 06:15.279
+we're just going to limit this to 50 results.
+
+06:15.280 --> 06:16.279
+[Lukas]: Oh, yeah.
+
+06:16.280 --> 06:18.679
+[Jonathan]: Just so it's a little easier for us to manage.
+
+06:18.680 --> 06:20.719
+I'm going to run that again.
+
+06:20.720 --> 06:21.519
+There we go.
+
+06:21.520 --> 00:06:22.319
+That looks a little better.
+
+00:06:22.320 --> 00:06:23.159
+[Lukas]: I think that's fine.
+
+00:06:23.160 --> 00:06:25.359
+50 items is fine.
+
+00:06:25.360 --> 06:27.839
+So what do we see here, Jonathan?
+
+NOTE Data cleaning
+
+06:27.840 --> 06:28.319
+[Jonathan]: Right.
+
+06:28.320 --> 06:31.239
+So the first thing we see when we look at this
+
+06:31.240 --> 00:06:33.307
+is a couple of Q codes at the top,
+
+00:06:33.308 --> 00:06:36.079
+which are an artifact of Wikidata.
+
+06:36.080 --> 06:39.519
+So these are pages which don't have
+
+06:39.520 --> 06:42.519
+the label for whichever institution they happen to be.
+
+06:42.520 --> 06:45.919
+For our purposes here, we're just going to exclude them.
+
+06:45.920 --> 06:48.199
+We could just go on Wikidata and edit them ourselves.
+
+06:48.200 --> 06:50.399
+But for now, it's a little more interesting
+
+06:50.400 --> 06:52.519
+if we go and remove them.
+
+06:52.520 --> 06:55.159
+So I'm going to create a new cell.
+
+06:55.160 --> 06:58.279
+Lukas, if you don't mind starting one for data cleaning.
+
+06:58.280 --> 06:58.879
+[Lukas]: Oh, yeah.
+
+06:58.880 --> 06:59.479
+Good point.
+
+06:59.480 --> 07:02.039
+Yeah, data cleaning.
+
+07:02.040 --> 07:03.439
+OK.
+
+07:03.440 --> 00:07:05.499
+How do you want to do that, Jonathan?
+
+00:07:05.500 --> 07:09.759
+[Jonathan]: I'm going to use a shell command.
+
+07:09.760 --> 07:11.119
+So let's see.
+
+07:11.120 --> 07:12.999
+There we go.
+
+07:13.000 --> 07:15.159
+And so you can see, here is another cell,
+
+07:15.160 --> 07:20.039
+that the cell is now using a shell,
+
+07:20.040 --> 00:07:23.799
+and that we have this thing `:var input=raw-dataset`,
+
+00:07:23.800 --> 00:07:25.840
+which is the name of the cell above
+
+00:07:25.841 --> 00:07:28.439
+where we got our data from Wikidata.
+
+07:28.440 --> 07:31.679
+This is going to run just a simple shell command.
+
+07:31.680 --> 07:33.959
+It's going to take the input and then run `sed` on it
+
+07:33.960 --> 00:07:37.039
+and exclude any records which have a Q
+
+00:07:37.040 --> 00:07:41.279
+followed by one or more digits afterwards.
+
+07:41.280 --> 07:43.960
+That should remove those from our data set.
+
+07:44.000 --> 07:45.400
+So I'm going to run that.
+
+07:48.640 --> 07:51.039
+That seems to have done the trick.
+
+07:51.040 --> 07:51.879
+[Lukas]: Great, yeah.
+
+07:51.880 --> 07:52.919
+That's really good.
+
+07:52.920 --> 07:55.399
+We got rid of all the Q items.
+
+07:55.400 --> 07:55.919
+Very good.
+
+07:55.920 --> 07:59.959
+So we just have two-column table: institutions
+
+07:59.960 --> 08:02.759
+and consortia.
+
+08:02.760 --> 08:04.039
+Very nice.
+
+NOTE Processing
+
+08:04.040 --> 08:08.719
+So let's come to our main part, doing some processing.
+
+08:08.720 --> 08:13.560
+Let me give you a headline here, process the data.
+
+08:13.640 --> 08:15.519
+What do you want to do first?
+
+08:15.520 --> 08:17.599
+[Jonathan]: This is not a very complicated data set,
+
+08:17.600 --> 08:19.439
+but let's just do some simple counts first.
+
+08:19.440 --> 08:22.199
+I'm going to start with Python,
+
+08:22.200 --> 08:25.239
+and we're just going to do some aggregation with Python.
+
+08:25.240 --> 08:30.039
+Again, I've got some pre-written code here.
+
+08:30.040 --> 08:34.999
+You can see that we've started a cell using Python.
+
+08:35.000 --> 08:37.879
+The variable `clean_df` now is equal to `clean-dataset`.
+
+08:37.880 --> 00:08:39.707
+So we're going to take that data
+
+00:08:39.708 --> 00:08:41.039
+that we retrieved from the SPARQL query,
+
+08:41.040 --> 08:42.680
+we're going to run it through the cleaning cell,
+
+08:42.720 --> 08:45.239
+and then we're going to import it into this cell.
+
+08:45.240 --> 08:47.839
+This is just going to do some simple Python aggregation.
+
+08:47.840 --> 00:08:49.007
+We're going to import `pandas`,
+
+00:08:49.008 --> 00:08:51.307
+which is the Python data science library,
+
+00:08:51.308 --> 00:08:54.839
+create a data frame out of our input,
+
+08:54.840 --> 08:57.479
+and then aggregate it, grouping on `wLabel`,
+
+08:57.480 --> 08:59.959
+and getting a count from that and returning it.
+
+08:59.960 --> 09:01.640
+So if we execute that cell...
+
+09:05.040 --> 09:08.879
+[Lukas]: Nice, we get institutions and a count.
+
+09:08.880 --> 09:14.119
+But what about not ordering it by the alphabet,
+
+09:14.120 --> 09:17.079
+but more like ordering by counts?
+
+09:17.080 --> 09:18.439
+[Jonathan]: Sure.
+
+09:18.440 --> 09:22.839
+So let's do this... `sort_values()`, I think, as the Python.
+
+09:22.840 --> 09:24.919
+How does that look?
+
+09:24.920 --> 00:09:27.640
+[Lukas]: Better, but I would like to
+
+00:09:27.641 --> 00:09:29.239
+have the highest number first
+
+09:29.240 --> 09:32.239
+and then ascending.
+
+09:32.240 --> 09:34.719
+Well, not ascending, descending.
+
+09:34.720 --> 09:37.600
+[Jonathan]: Right, so we can do `ascending=False`.
+
+09:39.880 --> 09:42.559
+[Lukas]: This is perfect, I'd say.
+
+09:42.560 --> 09:43.079
+[Jonathan]: Great.
+
+09:43.080 --> 09:44.079
+[Lukas]: Very good.
+
+09:44.080 --> 00:09:46.799
+OK, that's nice.
+
+00:09:46.800 --> 09:47.999
+We get a good overview here.
+
+09:48.000 --> 09:50.079
+But can we also do something else,
+
+09:50.080 --> 09:56.079
+like counting how many institutions are
+
+09:56.080 --> 09:57.799
+involved in one consortium?
+
+09:57.800 --> 10:00.879
+And also using this later on in the text?
+
+10:00.880 --> 00:10:00.880
+[Jonathan]: Sure, so I'm going to put a new...
+
+00:10:00.881 --> 00:10:05.040
+If you give me another heading down here
+
+00:10:05.041 --> 00:10:08.320
+for institutions per consortium...
+
+10:12.080 --> 10:16.799
+And here we're going to use awk code just to spice things up
+
+10:16.800 --> 10:18.959
+and add yet another language in here.
+
+10:18.960 --> 10:22.439
+So you can see this is awk.
+
+10:22.440 --> 10:26.279
+We're using standard in instead of defining a variable.
+
+10:26.280 --> 10:28.359
+But the really interesting thing about this cell
+
+10:28.360 --> 00:10:33.399
+is that we have this `:var consortium="NFDI4Memory"`.
+
+10:33.400 --> 00:10:35.640
+And what this code is doing is
+
+00:10:35.641 --> 00:10:38.040
+it's counting any time it sees
+
+00:10:38.041 --> 00:10:40.279
+that particular consortium name
+
+10:40.280 --> 10:41.759
+and keeping track of that.
+
+10:41.760 --> 00:10:43.907
+So if we execute this,
+
+00:10:43.908 --> 00:10:45.919
+Lukas, why don't you execute this one?
+
+10:45.920 --> 10:49.399
+[Lukas]: OK, I'm going to enter it.
+
+10:49.400 --> 10:52.439
+And I get a result, NFDI4Memory,
+
+10:52.440 --> 10:58.239
+because this is our default value for this variable.
+
+10:58.240 --> 10:59.439
+And we get the count.
+
+10:59.440 --> 00:11:01.640
+So it's five institutions are involved
+
+00:11:01.641 --> 00:11:04.639
+in the NFDI4memory consortium.
+
+11:04.640 --> 11:07.839
+Great, but the very nice thing, what I think,
+
+11:07.840 --> 11:12.519
+is here that we can use this code snippet within our text.
+
+11:12.520 --> 11:14.279
+So, blended in seamlessly.
+
+11:14.280 --> 11:16.199
+Let me give you an example.
+
+11:16.200 --> 11:18.919
+I'm writing out the text.
+
+11:18.920 --> 11:27.599
+Now we know how many institutions are in...
+
+11:27.600 --> 11:29.239
+Give me an example.
+
+11:29.240 --> 11:31.480
+I would like to know how many institutions are
+
+11:31.560 --> 11:35.079
+involved in NFDI4Objects, which is a consortium.
+
+11:35.080 --> 11:39.239
+So I'm writing `call_` and using
+
+11:39.240 --> 00:11:42.607
+the name of this snippet here, of this cell,
+
+00:11:42.608 --> 00:11:46.607
+which is `inst-count(`,
+
+00:11:46.608 --> 00:11:51.719
+and writing my value, `NFDI4Objects`.
+
+11:51.720 --> 11:57.999
+As soon as I evaluate this using `C-c C-c`,
+
+11:58.000 --> 12:00.279
+I get the result back here.
+
+12:00.280 --> 12:05.159
+I can do this even for more.
+
+12:05.160 --> 12:14.039
+Or in writing, `call_inst-count`, go with `NFDI4Earth`,
+
+12:14.040 --> 12:16.799
+which is another consortium.
+
+12:16.800 --> 12:20.559
+`C-c C-c`, it's three institutions.
+
+12:20.560 --> 12:23.439
+This can be used throughout your text,
+
+12:23.440 --> 12:26.639
+and as soon as the data set changes from in the beginning,
+
+12:26.640 --> 12:30.399
+maybe different results requiring Wikidata,
+
+12:30.400 --> 12:35.079
+this also will be updated once it's exported.
+
+12:35.080 --> 12:36.039
+Very nice, Jonathan.
+
+NOTE Visualization
+
+12:36.040 --> 00:12:38.974
+But I think we did a lot of analysis
+
+00:12:38.975 --> 00:12:41.079
+on text and counting things.
+
+12:41.080 --> 12:43.679
+Can we also do something more visual?
+
+12:43.680 --> 12:45.199
+Show me something.
+
+12:45.200 --> 12:45.759
+[Jonathan]: Sure.
+
+12:45.760 --> 12:48.639
+So what we can do with this, because we just
+
+12:48.640 --> 12:51.399
+have two columns here that are sort of related,
+
+12:51.400 --> 12:53.759
+we can build a little network plot out of it.
+
+12:53.760 --> 12:56.999
+So let's make a network visualization.
+
+12:57.000 --> 12:59.599
+We're going to use the `igraph` library from R
+
+12:59.600 --> 13:02.559
+and just plot the edges that we see here.
+
+13:02.560 --> 13:04.239
+There we go.
+
+13:04.240 --> 13:11.879
+There's my little heading and space.
+
+13:11.880 --> 13:13.479
+Here is our code.
+
+13:13.480 --> 13:16.039
+Again, just to be fancy and keep using
+
+13:16.040 --> 13:19.719
+different languages in here, we set a variable called
+
+13:19.720 --> 13:21.560
+`NFDI_edges` equal to `clean-dataset`.
+
+13:21.600 --> 13:23.399
+So this, again, is sort of cascading
+
+13:23.400 --> 00:13:25.740
+through the original data
+
+00:13:25.741 --> 00:13:28.807
+that we pulled from the Wikidata endpoint,
+
+00:13:28.808 --> 00:13:30.959
+cleaning that data, and now it's being inserted
+
+13:30.960 --> 13:32.959
+into this cell as well.
+
+13:32.960 --> 13:34.239
+But you see the difference here.
+
+13:34.240 --> 13:36.839
+Instead of exporting a table, what we're saying
+
+13:36.840 --> 13:39.239
+is that there will be a graphics file,
+
+13:39.240 --> 13:44.639
+and it will be called network-plot.png.
+
+13:44.640 --> 13:45.119
+All right.
+
+13:45.120 --> 13:47.959
+And so Lukas, why don't you execute this one?
+
+13:47.960 --> 13:48.759
+[Lukas]: There you go.
+
+13:48.760 --> 13:52.919
+I can click `C-c C-c`
+
+13:52.920 --> 13:59.159
+and I get a nice plot of the network below our cell.
+
+13:59.160 --> 14:01.759
+So this is very nice indeed.
+
+NOTE Preserve
+
+14:01.760 --> 14:05.199
+So I think it's about time to wrap it up and to export
+
+14:05.200 --> 14:07.959
+and to preserve the data and the documentation
+
+14:07.960 --> 14:13.079
+that we have in our very last step, calling preserve.
+
+14:13.080 --> 14:16.239
+So I would like to do it in two steps.
+
+14:16.240 --> 14:18.600
+First, maybe manually exporting it,
+
+14:18.800 --> 14:22.239
+but then also doing it in a batch process.
+
+14:22.240 --> 14:27.119
+Giving you some insights how to do that manual export.
+
+14:27.120 --> 14:30.559
+For example, you can do a LaTeX export.
+
+14:30.560 --> 14:34.279
+Let me write down the key combination to do that here.
+
+14:34.280 --> 14:44.560
+So you press `SPC m e l o`.
+
+14:44.600 --> 14:49.159
+Let me show you how this is done.
+
+14:49.160 --> 14:51.439
+So I'm pressing `SPC`.
+
+14:51.440 --> 14:55.679
+I'm pressing `m`, which is my local leader.
+
+14:55.680 --> 15:01.279
+I'm pressing `e`, which is now the `org-export-dispatch`.
+
+15:01.280 --> 15:03.519
+And now I have different options I can choose from.
+
+15:03.520 --> 15:07.119
+I want to do a LaTeX export because I want to get in PDF.
+
+15:07.120 --> 00:15:08.674
+So I'm pressing `l`.
+
+00:15:08.675 --> 00:15:11.479
+Now I've got different options available.
+
+15:11.480 --> 15:17.399
+So I'm pressing `o` for a PDF file and open that.
+
+15:17.400 --> 15:21.119
+Let's see now the code.
+
+15:21.120 --> 15:25.639
+Now this is exporting document.
+
+15:25.640 --> 00:15:29.674
+And what we have here is PDF,
+
+00:15:29.675 --> 00:15:31.974
+which contains our workflow in the beginning,
+
+00:15:31.975 --> 00:15:35.707
+our bullet points we have here,
+
+00:15:35.708 --> 00:15:37.919
+and also the code snippet
+
+15:37.920 --> 15:41.120
+that we use for querying the data.
+
+15:41.280 --> 15:43.599
+And we have the result below that.
+
+15:43.600 --> 15:46.999
+So this is our table with all the data sets.
+
+15:47.000 --> 15:51.879
+But as you can see, this is running out of the page.
+
+15:51.880 --> 15:55.679
+So this is not very nice using the default settings.
+
+15:55.680 --> 16:00.239
+But everything is in this PDF.
+
+16:00.240 --> 16:02.759
+I guess we can now show you a way
+
+16:02.760 --> 16:06.519
+how to improve this result.
+
+16:06.520 --> 16:07.039
+[Jonathan]: Right.
+
+16:07.040 --> 16:09.399
+So we have, of course, a version of this
+
+16:09.400 --> 00:16:10.774
+that we prepared ahead of time,
+
+00:16:10.775 --> 00:16:14.279
+which is more or less identical to the one we just made,
+
+16:14.280 --> 16:17.839
+but it has a little more text, a little more explanation,
+
+16:17.840 --> 16:20.559
+a little more documentation along with the code.
+
+16:20.560 --> 16:23.879
+You can see we have some metadata up at the top,
+
+16:23.880 --> 16:26.879
+the title, the authors, a bibliography,
+
+16:26.880 --> 16:31.679
+and most importantly, the `custom-export.setup` file,
+
+16:31.680 --> 16:36.879
+which lists specifically the sort of LaTeX commands
+
+16:36.880 --> 16:43.599
+that we're using and the HTML styles that we're going to use.
+
+16:43.600 --> 16:45.919
+And then down at the bottom of this file,
+
+16:45.920 --> 16:49.119
+we have our automatic batch process.
+
+16:49.120 --> 16:51.719
+Here is one more language we're including in here.
+
+16:51.720 --> 16:53.439
+So this is Lisp.
+
+16:53.440 --> 16:57.359
+And you can see here we are exporting to HTML, ASCII,
+
+16:57.360 --> 16:58.079
+and PDF.
+
+16:58.080 --> 17:01.359
+The nice thing about this is that this is a document.
+
+17:01.360 --> 00:17:03.307
+It's a sort of document that we have a couple of
+
+00:17:03.308 --> 00:17:08.639
+that we can have running automatically and building.
+
+17:08.640 --> 17:12.919
+It will export a HTML, an ASCII file, and a PDF file
+
+17:12.920 --> 00:17:14.674
+every time it's run based off of
+
+00:17:14.675 --> 00:17:17.319
+the most recent data available on Wikidata.
+
+17:17.320 --> 17:19.719
+So it's self-documenting.
+
+17:19.720 --> 00:17:22.440
+We have, of course, our data retrieval steps,
+
+00:17:22.441 --> 00:17:25.159
+our data cleaning steps, our data preparation steps,
+
+17:25.160 --> 17:28.359
+and our preservation steps all listed at the same time.
+
+17:28.360 --> 17:30.239
+And then you can see over on the right,
+
+17:30.240 --> 17:34.320
+there's an example of the HTML file that we get out of this.
+
+17:34.360 --> 17:37.639
+We also get a very nicely formatted PDF file,
+
+17:37.640 --> 17:39.239
+which doesn't have that little issue
+
+17:39.240 --> 17:41.719
+with the overflow of the table.
+
+17:41.720 --> 17:43.559
+It's very nicely put together.
+
+17:43.560 --> 17:46.199
+And we even have an ASCII file.
+
+17:46.200 --> 17:47.879
+And I should also point out very quickly,
+
+17:47.880 --> 17:51.799
+while you have this one up, Lukas, after the awk code,
+
+17:51.800 --> 17:56.079
+you can see the text for the number of consortia,
+
+17:56.080 --> 17:57.839
+or the number of institutions per consortia
+
+17:57.840 --> 18:00.519
+is actually printed inline.
+
+18:00.520 --> 18:01.799
+[Lukas]: Yeah, you're very right.
+
+18:01.800 --> 18:06.119
+So this is what we had as code,
+
+18:06.120 --> 18:10.719
+and now this is nicely integrated into our text.
+
+18:10.720 --> 18:15.279
+So we got the consortium and number of institutions.
+
+18:15.280 --> 18:19.199
+You can't tell a difference between code and text.
+
+18:19.200 --> 18:20.719
+[Jonathan]: And those are automatically updated.
+
+18:20.720 --> 18:23.879
+So if another institution joins NFDI4Earth,
+
+18:23.880 --> 18:26.319
+then the next time this runs, we update the text right here.
+
+18:26.320 --> 18:28.519
+It's nothing we have to worry about.
+
+18:28.520 --> 18:30.400
+We just pull it directly out of Wikidata.
+
+18:31.840 --> 18:34.679
+[Lukas]: And for the sake of completeness,
+
+18:34.680 --> 18:37.879
+this is the ASCII file.
+
+18:37.880 --> 18:39.320
+That's in the export format.
+
+18:42.760 --> 18:46.440
+It contains also everything, code and data.
+
+18:48.360 --> 18:51.680
+Yeah, so this is what we wanted to show you,
+
+18:53.240 --> 18:56.639
+how to do some data processing,
+
+18:56.640 --> 18:58.679
+some collaborative work,
+
+18:58.680 --> 19:01.119
+documenting using org-babel.
+
+19:01.120 --> 19:03.960
+Thanks for listening.
+
+19:05.720 --> 19:07.280
+[Jonathan]: Thank you all, have a good day.
diff --git a/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt b/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt
new file mode 100644
index 00000000..2d7cd23d
--- /dev/null
+++ b/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt
@@ -0,0 +1,4664 @@
+WEBVTT
+
+
+00:00:02.540 --> 00:00:03.840
+All right. Hi again, everyone.
+
+00:00:03.840 --> 00:00:04.839
+It's been a while. Well,
+
+00:00:04.839 --> 00:00:06.980
+actually, it's been like 2 minutes tops.
+
+00:00:07.819 --> 00:00:09.099
+We were just with John Wheatley,
+
+00:00:09.099 --> 00:00:11.019
+and now we are with Stefan Krangas.
+
+00:00:11.120 --> 00:00:15.900
+Hi. Hi. So as we said before,
+
+00:00:16.160 --> 00:00:20.600
+Stefan is co-maintainer now of Is it the
+
+00:00:20.600 --> 00:00:22.920
+entire Emacs project? How do you describe
+
+00:00:22.920 --> 00:00:26.260
+this? Yeah, co-maintainer of GNU Emacs.
+
+00:00:27.439 --> 00:00:29.380
+Right, perfect. So you know what?
+
+00:00:29.380 --> 00:00:31.760
+Because I'm sure everyone is dying to hear
+
+00:00:32.420 --> 00:00:33.840
+everything you've got to say in your
+
+00:00:33.840 --> 00:00:36.040
+presentation I'm just going to shut up now
+
+00:00:36.040 --> 00:00:37.640
+and leave the floor to you.
+
+00:00:37.640 --> 00:00:39.440
+Do you need to share your screen or anything?
+
+00:00:40.080 --> 00:00:45.239
+No. Okay great well I'll just cut my webcam
+
+00:00:45.239 --> 00:00:47.059
+off I'll still be in the background so do not
+
+00:00:47.059 --> 00:00:48.940
+hesitate if you've got any problem I'm still
+
+00:00:48.940 --> 00:00:52.560
+around And I'll see you just beacon whenever
+
+00:00:52.560 --> 00:00:53.940
+you're done. And I'll show up with the
+
+00:00:53.940 --> 00:00:56.120
+questions. All right? Thank you,
+
+00:00:56.120 --> 00:00:58.739
+Leo. And thank you, everyone,
+
+00:00:58.739 --> 00:01:02.379
+for being here. I'm Stefan Kangas.
+
+00:01:02.739 --> 00:01:06.660
+So as Leo explained, I am recently appointed
+
+00:01:06.680 --> 00:01:09.660
+as a co-maintainer of GNU Emacs,
+
+00:01:10.960 --> 00:01:13.400
+which a role that I'm fulfilling currently
+
+00:01:13.780 --> 00:01:17.460
+with Eli Sretsky, who's been co-maintainer
+
+00:01:18.840 --> 00:01:23.320
+for quite some time. So I got the question to
+
+00:01:23.320 --> 00:01:26.780
+be a co-maintainer from Richard in August
+
+00:01:26.780 --> 00:01:29.280
+this year. And of course,
+
+00:01:29.600 --> 00:01:31.460
+when you get a question like that,
+
+00:01:31.840 --> 00:01:34.020
+I couldn't not say yes.
+
+00:01:34.360 --> 00:01:39.440
+So here we are. I can't tell you how excited
+
+00:01:39.920 --> 00:01:45.060
+I am to have this opportunity to address the
+
+00:01:45.060 --> 00:01:47.380
+community in this way.
+
+00:01:47.640 --> 00:01:49.800
+I'm really humbled, of course,
+
+00:01:50.380 --> 00:01:55.040
+to be part of it, and to be able to serve the
+
+00:01:55.040 --> 00:01:59.080
+community in this capacity.
+
+00:02:00.080 --> 00:02:04.080
+I've used Emacs, I think many of you might
+
+00:02:04.080 --> 00:02:06.820
+also have used Emacs for quite some time,
+
+00:02:06.820 --> 00:02:11.100
+but I'm going on 2 decades as an Emacs user.
+
+00:02:11.120 --> 00:02:14.280
+My involvement in Emacs Lisp development is,
+
+00:02:14.280 --> 00:02:16.160
+I mean, almost as long,
+
+00:02:16.660 --> 00:02:19.680
+but my core development goes back only 4,
+
+00:02:19.960 --> 00:02:26.700
+5 years. I have to also thank the EmacsConf
+
+00:02:27.180 --> 00:02:28.840
+organizers who are doing,
+
+00:02:29.100 --> 00:02:31.960
+I think, a tremendous job and have done a
+
+00:02:31.960 --> 00:02:34.820
+tremendous job over the years in really
+
+00:02:34.820 --> 00:02:37.800
+building and strengthening what I think is
+
+00:02:38.300 --> 00:02:42.180
+this fantastic community of users and
+
+00:02:42.180 --> 00:02:46.120
+developers and people interested in Emacs.
+
+00:02:46.620 --> 00:02:50.100
+I actually had the chance to meet up with Eli
+
+00:02:50.100 --> 00:02:53.700
+Sretzky, as well as another Emacs hacker,
+
+00:02:53.960 --> 00:02:57.080
+Andrea Corallo, when I was at the GNU
+
+00:02:57.980 --> 00:03:00.460
+project's 40 years celebration,
+
+00:03:00.800 --> 00:03:04.340
+40 years since the GNU project was announced.
+
+00:03:05.280 --> 00:03:08.540
+And it was very inspiring in general to meet
+
+00:03:09.660 --> 00:03:12.780
+people. And I think EmacsConf should also,
+
+00:03:12.980 --> 00:03:18.360
+I think, serve to inspire and sort of help
+
+00:03:19.020 --> 00:03:22.120
+bring something to the type of work that many
+
+00:03:22.120 --> 00:03:24.340
+of us are doing to improve Emacs,
+
+00:03:24.340 --> 00:03:26.200
+whether it's in package development or in
+
+00:03:26.200 --> 00:03:29.680
+core, to bring out the new and exciting ideas
+
+00:03:29.800 --> 00:03:34.040
+and get people enthusiastic about Emacs,
+
+00:03:34.080 --> 00:03:37.580
+about hacking on Emacs.
+
+00:03:38.560 --> 00:03:45.400
+This is my little attempt to contribute with
+
+00:03:45.600 --> 00:03:49.440
+let's say 2 things. I will first try to
+
+00:03:49.600 --> 00:03:54.400
+present how we do Emacs core development and
+
+00:03:54.400 --> 00:03:58.360
+why we've done some of the choices that we
+
+00:03:58.360 --> 00:04:02.060
+have, because We have seen at times that
+
+00:04:02.280 --> 00:04:06.500
+perhaps people aren't always clear on this or
+
+00:04:06.500 --> 00:04:08.660
+that aspect. So maybe this will be
+
+00:04:08.960 --> 00:04:12.260
+enlightening. I will also try to present some
+
+00:04:12.260 --> 00:04:17.860
+kind of vision for what Emacs could be with
+
+00:04:18.060 --> 00:04:21.680
+your help. Emacs is already very good,
+
+00:04:21.820 --> 00:04:26.880
+as we all know, but we could be even better.
+
+00:04:27.040 --> 00:04:29.940
+That's the reality of any type of software
+
+00:04:30.060 --> 00:04:35.100
+development. So the overall idea of this talk
+
+00:04:35.220 --> 00:04:38.380
+is to tell you, if you're an Emacs list
+
+00:04:38.380 --> 00:04:40.460
+package developer today,
+
+00:04:40.760 --> 00:04:44.200
+why you should become an Emacs core
+
+00:04:44.440 --> 00:04:47.300
+developer, and the sort of steps that you
+
+00:04:47.300 --> 00:04:49.340
+might want to take to do that,
+
+00:04:49.340 --> 00:04:52.100
+or how you can help Emacs core development.
+
+00:04:52.120 --> 00:04:54.320
+Even if you're just a user and you found a
+
+00:04:54.320 --> 00:04:57.340
+bug, report it. Perhaps you have a feature
+
+00:04:57.340 --> 00:04:58.820
+request that you'd like to discuss.
+
+00:04:58.820 --> 00:05:02.680
+I think we need more interaction in general
+
+00:05:02.900 --> 00:05:04.900
+between Emacs core developers,
+
+00:05:05.080 --> 00:05:06.440
+typically on emacsdevil.gnu.org,
+
+00:05:08.440 --> 00:05:12.420
+the mailing list that we use to coordinate
+
+00:05:12.840 --> 00:05:14.880
+our development efforts,
+
+00:05:15.860 --> 00:05:19.520
+between Emacs devil package developers and
+
+00:05:19.520 --> 00:05:22.460
+users, Because there is so much great stuff
+
+00:05:22.500 --> 00:05:24.740
+really going on in the community.
+
+00:05:25.520 --> 00:05:28.620
+But I think sometimes the step to core
+
+00:05:28.740 --> 00:05:32.500
+development seems big and perhaps even a
+
+00:05:32.500 --> 00:05:35.440
+little bit scary. So I'm hoping to be able to
+
+00:05:35.440 --> 00:05:38.720
+help bridge that gap, even if just a little
+
+00:05:38.720 --> 00:05:43.000
+bit. We need more people contributing to
+
+00:05:43.000 --> 00:05:46.740
+Emacs itself. And also a small disclaimer
+
+00:05:46.840 --> 00:05:49.920
+here, in this talk I will only be able to
+
+00:05:49.920 --> 00:05:53.700
+speak for myself, not for GNU or the Emacs
+
+00:05:53.760 --> 00:05:56.100
+project, even if it's like a little bit more
+
+00:05:56.500 --> 00:05:58.780
+official, but I will also try to give the
+
+00:05:58.780 --> 00:06:01.720
+view of the project where it makes sense to
+
+00:06:01.720 --> 00:06:04.200
+do so. Keep in mind, I'm only 1 of the
+
+00:06:04.200 --> 00:06:06.820
+maintainers, the co-maintainer together with
+
+00:06:06.820 --> 00:06:09.820
+Eli, and I can't just make decisions
+
+00:06:09.880 --> 00:06:11.400
+arbitrarily. In a sense,
+
+00:06:11.680 --> 00:06:14.180
+I'm as a co-maintainer and trusted as a
+
+00:06:14.180 --> 00:06:15.420
+steward and trusted by,
+
+00:06:15.420 --> 00:06:16.680
+of course, the GNU project,
+
+00:06:16.680 --> 00:06:22.000
+but also by the community That we really
+
+00:06:22.580 --> 00:06:24.180
+can't just take decisions,
+
+00:06:24.440 --> 00:06:27.380
+I think, arbitrarily. Even if it sometimes
+
+00:06:27.380 --> 00:06:30.560
+perhaps may seem so, or it may feel that way,
+
+00:06:31.100 --> 00:06:35.080
+we really have to realize that we can't just
+
+00:06:35.080 --> 00:06:39.200
+push too much of just a personal agenda to
+
+00:06:39.200 --> 00:06:41.520
+the extent that it doesn't line up with what
+
+00:06:41.520 --> 00:06:45.260
+is best for eMacs going forward,
+
+00:06:47.500 --> 00:06:50.320
+and the more overall picture of that.
+
+00:06:50.320 --> 00:06:52.640
+So there are limitations that come with the
+
+00:06:52.640 --> 00:06:59.940
+job, if you like. So 1 question I often,
+
+00:07:00.040 --> 00:07:02.280
+I actually got this week when I started a new
+
+00:07:02.280 --> 00:07:04.500
+assignment at work, and I got the question
+
+00:07:06.280 --> 00:07:08.720
+when I said I'm involved in Emacs
+
+00:07:08.720 --> 00:07:10.400
+development. And then someone asked,
+
+00:07:10.400 --> 00:07:12.480
+oh, is Emacs still developed?
+
+00:07:12.720 --> 00:07:16.400
+Isn't it done almost? And I answered to that,
+
+00:07:16.400 --> 00:07:17.880
+yes, we are still around.
+
+00:07:17.880 --> 00:07:21.940
+We're going on 40 years now as a software
+
+00:07:21.940 --> 00:07:25.940
+project. Not many projects actually can claim
+
+00:07:26.120 --> 00:07:29.020
+that type of longevity.
+
+00:07:29.540 --> 00:07:33.900
+But Emacs is among those few that can.
+
+00:07:33.900 --> 00:07:36.340
+And of course, we have had some very exciting
+
+00:07:36.340 --> 00:07:38.000
+developments in recent versions.
+
+00:07:38.000 --> 00:07:41.600
+I think John just gave you an update on that.
+
+00:07:41.980 --> 00:07:46.160
+But we had just some highlights out of many
+
+00:07:46.160 --> 00:07:47.940
+highlights that you could give,
+
+00:07:48.580 --> 00:07:50.920
+really, we got the TreeSetter support in
+
+00:07:50.920 --> 00:07:54.320
+Emacs 29 that we now need to sort of extend
+
+00:07:54.320 --> 00:07:56.340
+and develop. We have merged EGLOT,
+
+00:07:56.380 --> 00:07:59.440
+so we have LSP support out of the box,
+
+00:07:59.440 --> 00:08:00.980
+I think is a huge improvement.
+
+00:08:01.400 --> 00:08:02.960
+Native compilation, of course,
+
+00:08:02.960 --> 00:08:06.520
+a big feature. I mean,
+
+00:08:06.580 --> 00:08:08.900
+that was Andrea's job,
+
+00:08:08.900 --> 00:08:11.260
+really, for performance.
+
+00:08:11.460 --> 00:08:14.020
+And it turns out that in many types of
+
+00:08:14.020 --> 00:08:15.720
+workloads and the types of stuff that people
+
+00:08:15.720 --> 00:08:17.580
+are doing, it often matters.
+
+00:08:18.080 --> 00:08:21.180
+And we're hoping to make that the default,
+
+00:08:21.480 --> 00:08:24.960
+perhaps already in Emacs 30.
+
+00:08:24.960 --> 00:08:26.840
+So there are things that are happening that
+
+00:08:26.840 --> 00:08:31.680
+fundamentally make Emacs better at a very
+
+00:08:32.200 --> 00:08:37.360
+core level. So, of course,
+
+00:08:37.360 --> 00:08:41.679
+why wouldn't you want to be involved in such
+
+00:08:41.679 --> 00:08:43.440
+an exciting and, I think,
+
+00:08:43.440 --> 00:08:51.240
+dynamic project? How is Emacs developed?
+
+00:08:51.660 --> 00:08:53.000
+Well, this is, I think,
+
+00:08:53.000 --> 00:08:54.180
+perhaps to some people,
+
+00:08:54.200 --> 00:08:56.300
+a little bit more of a threshold,
+
+00:08:56.520 --> 00:08:59.100
+if you like, because I think all of us know
+
+00:08:59.100 --> 00:09:02.640
+really that there is exciting and cool stuff
+
+00:09:02.980 --> 00:09:06.560
+that is going on in Emacs and has been going
+
+00:09:06.560 --> 00:09:08.260
+on over the last couple of years and we'll
+
+00:09:08.260 --> 00:09:10.040
+see even more of that,
+
+00:09:10.040 --> 00:09:11.180
+I think, going forward.
+
+00:09:12.600 --> 00:09:16.580
+1 thing is that communication still takes
+
+00:09:16.580 --> 00:09:20.340
+place over a mailing list in 2023.
+
+00:09:21.240 --> 00:09:23.800
+So we have emacsdevil at gnu.org,
+
+00:09:24.440 --> 00:09:26.140
+and that's where we develop Emacs.
+
+00:09:26.680 --> 00:09:30.140
+We use, we send patches back and forth,
+
+00:09:30.140 --> 00:09:31.360
+we comment on patches.
+
+00:09:32.700 --> 00:09:36.420
+And actually this workflow is very good,
+
+00:09:36.700 --> 00:09:39.580
+if you're used to it. Because guess what?
+
+00:09:39.580 --> 00:09:42.200
+As Emacs users, we like doing everything we
+
+00:09:42.200 --> 00:09:45.220
+can in Emacs, especially the core tasks that
+
+00:09:45.220 --> 00:09:49.980
+we're doing, such as developing Emacs itself.
+
+00:09:50.140 --> 00:09:52.860
+Of course, you want to do that fully within
+
+00:09:52.960 --> 00:09:55.440
+Emacs. So we hack Emacs Lisp in Emacs,
+
+00:09:55.440 --> 00:09:58.840
+we hack C in Emacs, we respond to emails also
+
+00:10:00.240 --> 00:10:02.700
+from Emacs, respond to bug reports,
+
+00:10:02.700 --> 00:10:05.040
+manage bug reports. We do all that stuff
+
+00:10:05.460 --> 00:10:07.840
+very, very smoothly. And it doesn't really
+
+00:10:07.840 --> 00:10:10.540
+matter in a sense, what is the medium?
+
+00:10:10.560 --> 00:10:12.080
+It happens to be email.
+
+00:10:12.180 --> 00:10:14.160
+Technically it could be anything,
+
+00:10:14.440 --> 00:10:16.720
+but email really has that type of staying
+
+00:10:16.720 --> 00:10:19.640
+power where we've been able to use it for a
+
+00:10:19.640 --> 00:10:21.260
+long time. And this is how,
+
+00:10:22.360 --> 00:10:24.000
+and we're still able to use it.
+
+00:10:24.000 --> 00:10:25.800
+And this is how free software was always
+
+00:10:25.800 --> 00:10:26.640
+developed in the past.
+
+00:10:26.640 --> 00:10:28.380
+Only in the last, let's say 10,
+
+00:10:28.380 --> 00:10:32.440
+15 years, We've had more development taking
+
+00:10:32.440 --> 00:10:35.560
+place perhaps on forges like GitHub,
+
+00:10:35.580 --> 00:10:39.160
+GitLab, whatever. But we are 1 of the
+
+00:10:39.160 --> 00:10:40.680
+holdouts. I mean, there are others,
+
+00:10:40.680 --> 00:10:42.560
+of course, like the Linux kernel has mailing
+
+00:10:42.560 --> 00:10:44.340
+lists. They're not trying to do that scale
+
+00:10:44.340 --> 00:10:47.580
+development on GitHub.
+
+00:10:49.280 --> 00:10:51.360
+And this is not just because we're Luddites
+
+00:10:51.760 --> 00:10:53.560
+that refuse to change.
+
+00:10:53.560 --> 00:10:55.380
+We just have to do it in the old way,
+
+00:10:55.380 --> 00:10:57.120
+because it is the old way,
+
+00:10:57.120 --> 00:10:58.680
+and that's the way it should be.
+
+00:10:58.780 --> 00:11:00.420
+No, it's actually because we,
+
+00:11:01.220 --> 00:11:03.460
+as core developers, the core development team
+
+00:11:03.460 --> 00:11:05.460
+and the people already involved and doing
+
+00:11:05.460 --> 00:11:08.560
+tremendous, I mean large amounts of work in
+
+00:11:08.560 --> 00:11:12.480
+Emacs has very efficient workflows built up
+
+00:11:12.720 --> 00:11:15.620
+based on this. So of course,
+
+00:11:15.620 --> 00:11:17.780
+I mean moving to something else is something
+
+00:11:18.320 --> 00:11:20.180
+that we might like to do,
+
+00:11:20.580 --> 00:11:24.400
+but we're not yet clear on how to do it
+
+00:11:24.400 --> 00:11:26.100
+exactly and what to move to.
+
+00:11:26.320 --> 00:11:28.380
+So these are the types of discussions that
+
+00:11:28.380 --> 00:11:30.280
+we're looking at. Can we still support a
+
+00:11:30.280 --> 00:11:34.040
+mailing, an email type workflow while moving
+
+00:11:34.040 --> 00:11:36.100
+to something else? That would be 1 of the big
+
+00:11:36.100 --> 00:11:38.400
+ones. I think another thing that trips people
+
+00:11:38.400 --> 00:11:40.840
+up is that we used a bug tracker that,
+
+00:11:40.840 --> 00:11:42.620
+I mean, maybe some people,
+
+00:11:42.620 --> 00:11:45.560
+I've heard people say it's archaic.
+
+00:11:47.020 --> 00:11:49.900
+It's called Debugs. I think maybe Debugs gets
+
+00:11:49.900 --> 00:11:52.000
+a bit of a bad rap. I think that bugs is a
+
+00:11:52.000 --> 00:11:53.100
+good piece of software.
+
+00:11:53.520 --> 00:11:55.160
+It wasn't developed in 2023.
+
+00:11:55.580 --> 00:11:57.540
+I mean, that's much as clear.
+
+00:11:57.660 --> 00:11:58.880
+It's a little bit older,
+
+00:11:59.060 --> 00:12:01.320
+but it really is a workhorse of the Debian
+
+00:12:01.320 --> 00:12:03.820
+project, which is obviously a project that's
+
+00:12:03.960 --> 00:12:09.400
+developed in a very different way than Emacs
+
+00:12:09.400 --> 00:12:11.880
+is. It's on a completely different scale,
+
+00:12:11.880 --> 00:12:12.840
+of course, much bigger,
+
+00:12:12.840 --> 00:12:14.980
+many more developers, and so on.
+
+00:12:15.040 --> 00:12:17.800
+But I think the developers did a good job for
+
+00:12:17.800 --> 00:12:20.240
+the time. But it might be showing its age,
+
+00:12:20.920 --> 00:12:23.160
+perhaps, in places. Perhaps,
+
+00:12:23.440 --> 00:12:25.120
+again, it's the email workflow.
+
+00:12:25.260 --> 00:12:27.720
+And people see that as a little bit of a
+
+00:12:27.720 --> 00:12:30.180
+threshold. It seems alien.
+
+00:12:30.180 --> 00:12:31.300
+It's a little bit strange,
+
+00:12:32.220 --> 00:12:34.980
+the types of workflows that you have there.
+
+00:12:35.220 --> 00:12:38.860
+So we are seeing some limitations with that
+
+00:12:38.860 --> 00:12:40.940
+box. And again, how do you report bugs?
+
+00:12:41.020 --> 00:12:42.600
+Well, in a sense, it's easy.
+
+00:12:42.600 --> 00:12:46.660
+You send an email to bug-gnu-emacs at gnu.org
+
+00:12:47.620 --> 00:12:51.340
+and you copy in whatever you get from,
+
+00:12:51.340 --> 00:12:53.300
+you know, report the EMAX bug or if you have,
+
+00:12:53.300 --> 00:12:55.120
+you know, send mail set up locally,
+
+00:12:55.580 --> 00:12:58.700
+just hit control C, control C and it's sent
+
+00:12:58.700 --> 00:13:01.720
+to the bug tracker and that's fine.
+
+00:13:03.840 --> 00:13:08.680
+But also I have to mention that there is this
+
+00:13:08.680 --> 00:13:10.600
+very good package on GNU Elpas.
+
+00:13:10.600 --> 00:13:13.540
+If you're ever trying to read the Emacs bug
+
+00:13:13.540 --> 00:13:16.500
+tracker or following along in Emacs
+
+00:13:16.500 --> 00:13:19.000
+development, I really recommend install the
+
+00:13:19.000 --> 00:13:21.300
+package devbugs from GNU Elpa.
+
+00:13:22.120 --> 00:13:24.140
+It's so good. And again,
+
+00:13:24.140 --> 00:13:26.580
+it's built on GNU, it's all integrated in
+
+00:13:26.580 --> 00:13:30.040
+Emacs, it's so much better than using the web
+
+00:13:30.660 --> 00:13:33.220
+and so on. And if you really want to get into
+
+00:13:33.220 --> 00:13:38.040
+it, you can download the bug tracker archives
+
+00:13:38.140 --> 00:13:39.500
+and the mailing list archives,
+
+00:13:39.720 --> 00:13:41.260
+and you can put them locally,
+
+00:13:41.260 --> 00:13:42.380
+you can have them searchable,
+
+00:13:42.740 --> 00:13:44.440
+and you can have whatever experience you
+
+00:13:44.440 --> 00:13:47.340
+like. So, I mean, it's really a flexible
+
+00:13:48.240 --> 00:13:51.240
+workflow, but it's a bit strange,
+
+00:13:51.260 --> 00:13:52.620
+perhaps, to some people.
+
+00:13:53.460 --> 00:13:58.120
+So we also think supporting only this
+
+00:13:58.120 --> 00:14:00.140
+workflow might be a little bit too limiting.
+
+00:14:00.660 --> 00:14:04.200
+So we do want to move over to something like
+
+00:14:04.440 --> 00:14:06.760
+GitLab, perhaps Sourcehat or something
+
+00:14:06.760 --> 00:14:10.460
+similar. We've had a couple of discussions
+
+00:14:10.760 --> 00:14:14.000
+about that over the last couple of years.
+
+00:14:14.480 --> 00:14:15.820
+I think even before that,
+
+00:14:15.820 --> 00:14:18.940
+but that's how far back I've been involved,
+
+00:14:18.940 --> 00:14:21.800
+and definitely it's come up occasionally.
+
+00:14:23.100 --> 00:14:27.900
+I think we are less far away than perhaps
+
+00:14:27.940 --> 00:14:30.560
+ever is how I would express that,
+
+00:14:30.720 --> 00:14:36.680
+and in the sense that the remaining blockers
+
+00:14:36.960 --> 00:14:38.640
+for just making the shift,
+
+00:14:38.640 --> 00:14:40.200
+let's say, are I think,
+
+00:14:40.200 --> 00:14:42.120
+I mean, first of all, we're talking about
+
+00:14:42.120 --> 00:14:44.020
+limitations, perhaps in the software,
+
+00:14:44.020 --> 00:14:46.420
+they're well defined, and they're not as
+
+00:14:46.420 --> 00:14:49.060
+amountable. I don't think they have to be in
+
+00:14:49.060 --> 00:14:50.840
+any case. We should be able to make some
+
+00:14:50.840 --> 00:14:54.660
+progress. The main thing that we're lacking
+
+00:14:54.720 --> 00:14:58.480
+now is not more discussion or more people
+
+00:15:00.800 --> 00:15:03.120
+prodding us to just please switch over.
+
+00:15:03.120 --> 00:15:04.580
+No, we're looking for volunteers.
+
+00:15:05.980 --> 00:15:08.380
+If you think that you,
+
+00:15:08.400 --> 00:15:10.960
+you know, have what it takes to sort of come
+
+00:15:10.960 --> 00:15:14.060
+in and help us do something like that and
+
+00:15:14.060 --> 00:15:15.040
+work together with us,
+
+00:15:15.040 --> 00:15:16.840
+you know, to see what can be done,
+
+00:15:16.840 --> 00:15:20.200
+perhaps some, a few things would need to be
+
+00:15:20.200 --> 00:15:23.220
+changed in GitLab. I don't think anything
+
+00:15:23.220 --> 00:15:26.120
+huge, but maybe there are some patches to be
+
+00:15:26.120 --> 00:15:27.880
+written and sent upstream,
+
+00:15:27.980 --> 00:15:30.280
+or maybe we need to do some local hacks or
+
+00:15:30.280 --> 00:15:33.140
+whatever. If you wanna do that,
+
+00:15:33.140 --> 00:15:34.860
+please contact us, emacsdevil.
+
+00:15:35.460 --> 00:15:38.940
+We'll be very happy to talk to you.
+
+00:15:38.940 --> 00:15:40.460
+And then we can start making progress.
+
+00:15:40.520 --> 00:15:42.740
+So I'm really hoping that that sound like
+
+00:15:42.740 --> 00:15:46.620
+will come into place. But we need to,
+
+00:15:46.780 --> 00:15:52.340
+if we do switch over, we need to preserve the
+
+00:15:52.340 --> 00:15:54.820
+good parts of our email-based workflows.
+
+00:15:54.820 --> 00:15:57.140
+So there are requirements there so that we
+
+00:15:57.140 --> 00:16:00.180
+can continue to do our job as maintainers,
+
+00:16:01.720 --> 00:16:04.900
+if you like. Another thing is that we've
+
+00:16:04.900 --> 00:16:08.340
+sometimes seen that there's a bit of a
+
+00:16:08.340 --> 00:16:11.380
+different culture perhaps on mailing lists
+
+00:16:11.380 --> 00:16:15.060
+and on Emacs devil than what many people are
+
+00:16:15.060 --> 00:16:17.580
+used to, especially like you've used perhaps,
+
+00:16:17.800 --> 00:16:20.540
+many people might be in university and
+
+00:16:20.540 --> 00:16:23.500
+they've started using Emacs,
+
+00:16:23.720 --> 00:16:25.820
+maybe got into a little bit of package
+
+00:16:25.840 --> 00:16:29.060
+development and starting to get the ropes of
+
+00:16:29.060 --> 00:16:32.540
+that and are very used to working on places
+
+00:16:32.560 --> 00:16:35.460
+like GitLab or something like that,
+
+00:16:35.460 --> 00:16:38.000
+then the type of culture and way of
+
+00:16:38.000 --> 00:16:42.040
+communicating that we use in Emacs might be a
+
+00:16:42.040 --> 00:16:44.440
+little bit different. And of course,
+
+00:16:44.540 --> 00:16:47.360
+it's different in the sense that mailing
+
+00:16:47.380 --> 00:16:49.900
+lists have always, I mean,
+
+00:16:49.900 --> 00:16:51.060
+let's say hacker culture,
+
+00:16:51.060 --> 00:16:52.120
+whatever you want to call it,
+
+00:16:52.120 --> 00:16:54.400
+have always communicated in a particular way
+
+00:16:54.720 --> 00:16:58.340
+using mailing lists. So it's like succinct to
+
+00:16:58.340 --> 00:17:00.320
+the point, perhaps I'm skipping a few
+
+00:17:00.320 --> 00:17:03.340
+pleasantries. And the idea is that you should
+
+00:17:03.340 --> 00:17:08.000
+just use it in as effective way as possible,
+
+00:17:08.359 --> 00:17:11.099
+so that also the archives are usable.
+
+00:17:11.319 --> 00:17:13.660
+And the other thing is that generally people
+
+00:17:13.660 --> 00:17:16.500
+involved in developing free software has to
+
+00:17:16.500 --> 00:17:19.660
+deal with a lot of incoming traffic,
+
+00:17:19.780 --> 00:17:25.900
+emails. They don't have the bandwidth if it's
+
+00:17:25.900 --> 00:17:28.220
+too much noise. You really need to be strict
+
+00:17:28.220 --> 00:17:31.840
+to keep the signal to noise ratio high.
+
+00:17:31.840 --> 00:17:35.280
+We have some weird terminology on the Emacs
+
+00:17:35.280 --> 00:17:38.040
+devil. People tell us,
+
+00:17:38.200 --> 00:17:40.680
+we say sometimes install patches which
+
+00:17:40.680 --> 00:17:44.180
+basically means push to master or merge pull
+
+00:17:44.180 --> 00:17:46.720
+requests because we've used other version
+
+00:17:46.720 --> 00:17:48.600
+control systems in the past where it might
+
+00:17:48.600 --> 00:17:50.700
+have made more sense to say install patches.
+
+00:17:51.000 --> 00:17:52.540
+And then you sort of, I don't know,
+
+00:17:52.540 --> 00:17:54.380
+I say it. Don't ask me why.
+
+00:17:54.380 --> 00:17:56.040
+But it feels natural after a while.
+
+00:17:56.040 --> 00:17:57.720
+You install a patch. It's clear what you
+
+00:17:57.720 --> 00:18:02.280
+mean. You don't have to worry about which
+
+00:18:02.280 --> 00:18:05.940
+branch it's on. So it's a little bit
+
+00:18:06.600 --> 00:18:10.120
+historical there. So there is some of that
+
+00:18:10.120 --> 00:18:11.960
+culture going on. It might be different.
+
+00:18:11.960 --> 00:18:14.200
+We don't use emojis that much.
+
+00:18:14.220 --> 00:18:16.680
+That's another thing. There is no like,
+
+00:18:16.840 --> 00:18:20.900
+you can click the little like button at the
+
+00:18:20.900 --> 00:18:25.080
+bottom of a comment or an email as you could
+
+00:18:25.080 --> 00:18:27.740
+on GitHub. But there are exceptions and it's
+
+00:18:27.740 --> 00:18:29.600
+not like someone will send you angry emails
+
+00:18:29.600 --> 00:18:31.480
+if you use an emoji or something like that.
+
+00:18:31.480 --> 00:18:34.200
+But it can come off as perhaps Because people
+
+00:18:34.200 --> 00:18:37.180
+are pressed for time also when replying to
+
+00:18:37.260 --> 00:18:39.400
+all these emails. So it might come off as a
+
+00:18:39.400 --> 00:18:42.880
+little bit short, but that's just how it is.
+
+00:18:43.440 --> 00:18:46.880
+And I think We have heard this comment before
+
+00:18:46.880 --> 00:18:50.680
+that mailing lists are scary or Emacs devil
+
+00:18:50.720 --> 00:18:54.380
+is scary or core development is scary.
+
+00:18:54.780 --> 00:18:58.180
+And I've touched a few of these points a
+
+00:18:58.180 --> 00:18:59.620
+little bit already. I think,
+
+00:18:59.620 --> 00:19:01.500
+yeah, maybe a little bit.
+
+00:19:02.320 --> 00:19:05.740
+For example, we don't use emojis very short
+
+00:19:06.820 --> 00:19:10.940
+in the communication. And we always use
+
+00:19:10.940 --> 00:19:13.240
+correct grammar and spelling.
+
+00:19:13.380 --> 00:19:15.920
+We take that seriously because it's important
+
+00:19:15.920 --> 00:19:19.060
+for being clear in your written communication
+
+00:19:19.200 --> 00:19:21.540
+when all you have is written communication.
+
+00:19:22.680 --> 00:19:23.740
+It's really important.
+
+00:19:26.760 --> 00:19:31.400
+But it's not like If you come in there and
+
+00:19:31.400 --> 00:19:33.580
+you don't know all these cultural rules and
+
+00:19:33.580 --> 00:19:36.380
+all these patterns, then you know you will We
+
+00:19:36.380 --> 00:19:37.900
+won't talk to you No Actually,
+
+00:19:37.900 --> 00:19:41.100
+we try to be as welcoming as we can and and
+
+00:19:41.100 --> 00:19:44.600
+be mindful and you know people not Everyone
+
+00:19:44.600 --> 00:19:46.700
+has English as their native language,
+
+00:19:47.080 --> 00:19:49.200
+for example. So perhaps someone says
+
+00:19:49.200 --> 00:19:51.360
+something, and it might come off as rude,
+
+00:19:51.360 --> 00:19:53.200
+but maybe it's just a direct translation.
+
+00:19:53.200 --> 00:19:56.520
+So we're trying to give a lot of whatever the
+
+00:19:56.520 --> 00:19:59.760
+native language is. So we try to give a lot
+
+00:19:59.760 --> 00:20:01.780
+of leeway and just be a little bit,
+
+00:20:01.780 --> 00:20:03.580
+you know, flexible and focus on,
+
+00:20:03.580 --> 00:20:04.920
+you know, the key, key points,
+
+00:20:04.920 --> 00:20:06.580
+which are the technical things,
+
+00:20:06.580 --> 00:20:07.760
+the technical decisions,
+
+00:20:07.840 --> 00:20:09.280
+technical arguments, rather than,
+
+00:20:09.280 --> 00:20:11.920
+you know, getting bogged down in a lot of,
+
+00:20:11.920 --> 00:20:15.360
+you know, personal, you know,
+
+00:20:15.360 --> 00:20:19.220
+discussions and flame wars.
+
+00:20:19.300 --> 00:20:21.260
+So, I mean, there are these things to be
+
+00:20:21.260 --> 00:20:23.160
+aware of, you know, it's just a little bit
+
+00:20:23.160 --> 00:20:24.980
+different. I don't think it's anything huge.
+
+00:20:25.080 --> 00:20:26.620
+And I wouldn't be, you know,
+
+00:20:28.440 --> 00:20:30.480
+I think it would be sad if people felt too
+
+00:20:30.480 --> 00:20:32.320
+intimidated by that. It just is what it is.
+
+00:20:32.320 --> 00:20:33.540
+And if you spend some time there,
+
+00:20:33.540 --> 00:20:35.960
+you'll see how people generally communicate.
+
+00:20:38.400 --> 00:20:41.260
+Sometimes, there are a lot of people on
+
+00:20:41.260 --> 00:20:43.600
+EmacsDevil. It's a public mailing list.
+
+00:20:43.660 --> 00:20:46.240
+A lot of people just sign up to follow Emacs
+
+00:20:46.240 --> 00:20:48.860
+development. Sometimes they chime in.
+
+00:20:48.940 --> 00:20:50.820
+And I think this is in general a good thing.
+
+00:20:50.820 --> 00:20:53.300
+I think it should be a public mailing list.
+
+00:20:53.680 --> 00:21:00.220
+Sometimes this leads to weird situations from
+
+00:21:00.480 --> 00:21:03.400
+just a point of view as an Emacs maintainer,
+
+00:21:03.480 --> 00:21:07.080
+right? I mean, I try to say something and it
+
+00:21:07.080 --> 00:21:08.240
+doesn't always say, oh,
+
+00:21:08.240 --> 00:21:10.020
+he's the maintainer or whatever.
+
+00:21:10.080 --> 00:21:11.200
+So when I say something,
+
+00:21:11.200 --> 00:21:13.380
+it should carry a little bit more weight than
+
+00:21:13.380 --> 00:21:16.160
+some unknown person from the internet who has
+
+00:21:16.160 --> 00:21:18.300
+an opinion and decided to send it to
+
+00:21:18.740 --> 00:21:21.020
+EmacsDevil. So it's good to be a little bit
+
+00:21:21.020 --> 00:21:23.160
+aware of who is a little bit more involved
+
+00:21:23.160 --> 00:21:25.280
+with the project. I would check out the
+
+00:21:25.280 --> 00:21:27.100
+maintainers file. I would check,
+
+00:21:27.380 --> 00:21:31.000
+see in the Git log, do these people actually
+
+00:21:31.000 --> 00:21:33.300
+have any anything in core?
+
+00:21:33.580 --> 00:21:35.260
+And if not, maybe, you know,
+
+00:21:35.860 --> 00:21:38.660
+there, we won't really,
+
+00:21:39.100 --> 00:21:41.000
+even if they express an opinion very
+
+00:21:41.000 --> 00:21:42.720
+strongly, even if they're a little bit rude,
+
+00:21:42.720 --> 00:21:44.700
+maybe they're not even involved in Emacs
+
+00:21:44.760 --> 00:21:46.340
+development. I mean, often,
+
+00:21:46.680 --> 00:21:48.460
+that's the case we have some people,
+
+00:21:48.460 --> 00:21:49.900
+unfortunately, at times,
+
+00:21:50.340 --> 00:21:52.720
+we have random people from the internet come
+
+00:21:52.720 --> 00:21:54.720
+in on the mailing list and they're just a
+
+00:21:54.720 --> 00:21:56.780
+little bit rude, or they say an opinion
+
+00:21:57.740 --> 00:21:59.620
+that's not exactly helpful.
+
+00:22:00.060 --> 00:22:02.320
+And I think you need to be aware.
+
+00:22:02.320 --> 00:22:04.340
+I mean, these things happen in any forum,
+
+00:22:04.340 --> 00:22:07.740
+but it happens on EmacsDevO as well.
+
+00:22:07.800 --> 00:22:10.680
+So just be a little bit aware of who you're
+
+00:22:10.680 --> 00:22:13.540
+talking to, what people are doing.
+
+00:22:13.700 --> 00:22:15.880
+It can help to Check the archives,
+
+00:22:16.240 --> 00:22:18.460
+see who writes what, and so on.
+
+00:22:20.320 --> 00:22:23.080
+But it's not something that I think is a huge
+
+00:22:23.080 --> 00:22:24.220
+problem. It is just, again,
+
+00:22:24.220 --> 00:22:25.780
+something to be aware of.
+
+00:22:25.900 --> 00:22:28.040
+We have the new kind of communication
+
+00:22:28.180 --> 00:22:30.820
+guidelines in place, which basically says
+
+00:22:30.820 --> 00:22:33.740
+that you should be nice to people and stay
+
+00:22:33.740 --> 00:22:36.060
+focused on the technical problem,
+
+00:22:36.060 --> 00:22:38.300
+try to see things from another person's point
+
+00:22:38.300 --> 00:22:39.360
+of view, this kind of stuff.
+
+00:22:39.360 --> 00:22:42.140
+So we're really trying to be as inclusive as
+
+00:22:42.140 --> 00:22:46.820
+possible and just stay correct in general.
+
+00:22:46.820 --> 00:22:48.380
+And sometimes, I mean,
+
+00:22:48.380 --> 00:22:50.060
+not everyone, it's a public list.
+
+00:22:50.060 --> 00:22:52.440
+We moderate it, but not to a huge extent,
+
+00:22:52.440 --> 00:22:57.840
+right? So sometimes people get away with a
+
+00:22:57.840 --> 00:23:02.260
+little bit of perhaps stretching the
+
+00:23:02.260 --> 00:23:04.700
+boundaries of what might be included in the
+
+00:23:04.700 --> 00:23:06.500
+kind communication guidelines,
+
+00:23:08.040 --> 00:23:10.940
+sort of the fences and limitations of that.
+
+00:23:11.460 --> 00:23:13.940
+But I would just ignore that.
+
+00:23:13.940 --> 00:23:15.700
+Sometimes it happens that we,
+
+00:23:15.860 --> 00:23:17.160
+as happens in any forum,
+
+00:23:17.160 --> 00:23:19.440
+by the way, you just, we have these very big
+
+00:23:19.440 --> 00:23:21.760
+threads. We start discussing something else.
+
+00:23:21.760 --> 00:23:24.300
+Perhaps you send us a patch and it just
+
+00:23:24.320 --> 00:23:26.360
+devolves into us discussing something
+
+00:23:26.360 --> 00:23:28.680
+completely different. And of course I partake
+
+00:23:28.680 --> 00:23:30.440
+in that, not better than anyone else,
+
+00:23:30.440 --> 00:23:32.940
+but it just happens. I mean,
+
+00:23:32.960 --> 00:23:34.800
+it's not your fault. It's just what happens
+
+00:23:34.800 --> 00:23:37.200
+sometimes in forums, and don't mind that.
+
+00:23:37.200 --> 00:23:39.120
+And it's a little bit easier to do that in
+
+00:23:39.120 --> 00:23:41.680
+emails, because you just change the subject,
+
+00:23:41.680 --> 00:23:43.580
+and now it's supposed to be a different
+
+00:23:43.580 --> 00:23:45.780
+thread, but it comes as replies usually to
+
+00:23:45.780 --> 00:23:48.480
+you, which wouldn't happen perhaps in a
+
+00:23:48.480 --> 00:23:49.960
+different workflow. So it's something to be
+
+00:23:49.960 --> 00:23:53.300
+aware of as well. Another thing is that,
+
+00:23:53.300 --> 00:23:54.680
+of course, in written communication,
+
+00:23:55.080 --> 00:23:56.620
+tone doesn't always come across.
+
+00:23:57.980 --> 00:23:59.240
+If someone sounds negative,
+
+00:23:59.240 --> 00:24:01.280
+sometimes it's just them being neutral.
+
+00:24:01.460 --> 00:24:05.400
+Sometimes you get no replies.
+
+00:24:05.500 --> 00:24:07.120
+You send something, you get no replies.
+
+00:24:07.120 --> 00:24:09.220
+And this could mean, actually it could mean,
+
+00:24:09.880 --> 00:24:11.500
+yeah, what you said was uncontroversial.
+
+00:24:11.720 --> 00:24:12.980
+We think it was a good idea.
+
+00:24:13.660 --> 00:24:16.360
+No 1 replied to it because either someone
+
+00:24:16.360 --> 00:24:18.960
+else would reply or just there was no need to
+
+00:24:18.960 --> 00:24:20.640
+reply because, yeah, why not?
+
+00:24:21.580 --> 00:24:24.060
+So but if you do send a patch and you don't
+
+00:24:24.060 --> 00:24:26.280
+get an answer, wait. I mean,
+
+00:24:26.280 --> 00:24:29.380
+don't wait 1, 2 days. Maybe we're busy or
+
+00:24:29.380 --> 00:24:30.520
+we're sick or whatever.
+
+00:24:30.840 --> 00:24:32.800
+Wait 2 weeks. It's fine to just send it
+
+00:24:32.800 --> 00:24:34.940
+again. If you send the patch to EmacsDevil,
+
+00:24:35.660 --> 00:24:37.040
+send it to the bug mailing list,
+
+00:24:37.040 --> 00:24:39.260
+because we lose track of stuff on EmacsDevil.
+
+00:24:39.800 --> 00:24:41.560
+That's just the reality of it.
+
+00:24:43.440 --> 00:24:46.080
+So if you propose making a change and no 1
+
+00:24:46.080 --> 00:24:48.340
+commented, feel free to ask us again if a
+
+00:24:48.340 --> 00:24:51.080
+patch would be welcome and we will clarify.
+
+00:24:53.480 --> 00:24:54.720
+Bug reports, unfortunately,
+
+00:24:54.780 --> 00:24:56.280
+if you get no answer, I mean,
+
+00:24:56.280 --> 00:24:59.740
+we do have a limited amount of time to work
+
+00:24:59.860 --> 00:25:02.360
+on bugs. If you're looking to get started in
+
+00:25:02.360 --> 00:25:05.520
+Emacs development, this is an excellent way
+
+00:25:05.740 --> 00:25:07.320
+to start getting involved.
+
+00:25:07.480 --> 00:25:09.960
+What I'd recommend is start looking into
+
+00:25:09.960 --> 00:25:11.420
+bugs. I'd install that bug,
+
+00:25:11.420 --> 00:25:13.860
+I'd see about the mailing workflow and set
+
+00:25:13.860 --> 00:25:15.800
+that up a little bit, or not.
+
+00:25:16.160 --> 00:25:17.960
+It's up to you. You can reply to an email
+
+00:25:17.960 --> 00:25:20.160
+without setting any of that stuff up.
+
+00:25:20.600 --> 00:25:22.480
+But just help us try out your bugs,
+
+00:25:22.540 --> 00:25:24.720
+send patches, do that type of stuff.
+
+00:25:24.720 --> 00:25:26.280
+I mean, that's an excellent way,
+
+00:25:26.280 --> 00:25:27.740
+and extremely welcome.
+
+00:25:27.740 --> 00:25:30.360
+We're so happy to see when people pick up bug
+
+00:25:30.360 --> 00:25:32.500
+reports that have been left by the wayside
+
+00:25:32.640 --> 00:25:34.580
+and just fix them, send us a patch,
+
+00:25:36.040 --> 00:25:37.520
+and we can just apply it.
+
+00:25:37.920 --> 00:25:40.360
+So that's really your starting point if you
+
+00:25:40.360 --> 00:25:43.600
+want to get involved in Emacs core
+
+00:25:44.440 --> 00:25:50.580
+development. I also want to say that be aware
+
+00:25:50.580 --> 00:25:54.020
+that you know Emacs is the editor of the GNU
+
+00:25:54.280 --> 00:25:56.820
+operating system and this makes the project
+
+00:25:56.820 --> 00:25:58.700
+political a little bit whether you like it or
+
+00:25:58.700 --> 00:26:01.380
+not. Luckily the you know the politics are
+
+00:26:01.560 --> 00:26:03.400
+limited enough that we can find broad
+
+00:26:03.400 --> 00:26:05.520
+agreement on it. So we want to promote,
+
+00:26:05.780 --> 00:26:08.420
+we want to create free software.
+
+00:26:08.860 --> 00:26:10.960
+That's sort of it. That's it.
+
+00:26:11.400 --> 00:26:13.740
+And there shouldn't be too much more to it,
+
+00:26:13.740 --> 00:26:15.600
+right? We want to rid the world of
+
+00:26:15.600 --> 00:26:19.700
+proprietary software as an evil thing.
+
+00:26:19.700 --> 00:26:21.920
+Ideally, all software should be free.
+
+00:26:23.000 --> 00:26:25.160
+But these are just the goals of the free
+
+00:26:25.160 --> 00:26:27.440
+software movement. So we're very strict with
+
+00:26:27.440 --> 00:26:29.660
+some things. We don't recommend non-free
+
+00:26:30.060 --> 00:26:31.320
+proprietary software. Of course,
+
+00:26:31.320 --> 00:26:33.180
+we have no problem mentioning Microsoft
+
+00:26:33.260 --> 00:26:35.140
+Windows because everyone knows that there's
+
+00:26:35.140 --> 00:26:39.280
+this obscure operating system developed in
+
+00:26:39.280 --> 00:26:41.760
+California that some people insist on using.
+
+00:26:42.040 --> 00:26:45.000
+We use, many of us use GNU plus Linux.
+
+00:26:45.060 --> 00:26:47.380
+Actually, some core developers happen to use
+
+00:26:47.440 --> 00:26:50.820
+exactly, you know, not GNU plus Linux,
+
+00:26:50.820 --> 00:26:52.600
+but that's fine as well,
+
+00:26:52.600 --> 00:26:54.820
+right? We take a little bit of a pragmatic
+
+00:26:54.860 --> 00:26:56.840
+view, but we don't wanna do,
+
+00:26:56.840 --> 00:26:59.020
+what we don't wanna do is promote like this
+
+00:26:59.020 --> 00:27:04.780
+small, unknown piece of non-free software and
+
+00:27:04.780 --> 00:27:08.400
+sort of help the non-free software in that
+
+00:27:08.400 --> 00:27:11.620
+way. That's where we try to draw the line,
+
+00:27:12.440 --> 00:27:15.760
+you know, in just expressing just a few
+
+00:27:15.760 --> 00:27:18.060
+words. So that's 1 thing.
+
+00:27:18.200 --> 00:27:21.620
+We're, I think, very pragmatic on this point,
+
+00:27:21.620 --> 00:27:24.900
+but we do try to follow the principle.
+
+00:27:25.240 --> 00:27:27.180
+We also require copyright assignment.
+
+00:27:27.700 --> 00:27:30.040
+And I think in general,
+
+00:27:30.620 --> 00:27:34.740
+the argument is that we require a copyright
+
+00:27:34.780 --> 00:27:38.940
+assignment, because that makes it easier to
+
+00:27:39.280 --> 00:27:43.440
+defend the legal status of the GNU Emacs
+
+00:27:43.640 --> 00:27:45.920
+source code. So if there's ever a legal
+
+00:27:45.920 --> 00:27:48.280
+battle, the idea is that if it's only 1
+
+00:27:48.280 --> 00:27:50.260
+copyright holder and you have a GPL
+
+00:27:50.320 --> 00:27:54.140
+violation, i.e. Someone might change Emacs
+
+00:27:54.140 --> 00:27:55.820
+and then distribute it as proprietary
+
+00:27:56.100 --> 00:27:58.040
+software or something nasty like that,
+
+00:27:58.040 --> 00:28:00.620
+then we have an easier way of defending it in
+
+00:28:00.620 --> 00:28:02.780
+court if there is only 1 copyright holder.
+
+00:28:02.780 --> 00:28:04.840
+So we assigned copyright to the Free Software
+
+00:28:04.840 --> 00:28:09.460
+Foundation. And I think there,
+
+00:28:09.720 --> 00:28:12.600
+I mean, sometimes people oppose this for
+
+00:28:12.600 --> 00:28:13.660
+various reasons, you know,
+
+00:28:13.660 --> 00:28:15.720
+people see it as, you know,
+
+00:28:15.720 --> 00:28:16.880
+maybe some people might say,
+
+00:28:16.880 --> 00:28:17.860
+you know, it's ideological,
+
+00:28:18.040 --> 00:28:19.340
+you know, who goes, you know,
+
+00:28:19.340 --> 00:28:21.360
+the FSF goes too far with this.
+
+00:28:21.700 --> 00:28:23.860
+And, and, I mean, that's fine.
+
+00:28:23.860 --> 00:28:25.580
+You that's, that's an opinion.
+
+00:28:25.640 --> 00:28:28.320
+And the there, then other people are more
+
+00:28:28.320 --> 00:28:30.040
+practical, you know, it's just,
+
+00:28:30.040 --> 00:28:31.360
+It's a hassle, basically,
+
+00:28:31.360 --> 00:28:33.220
+we don't want to sign these papers.
+
+00:28:33.640 --> 00:28:35.580
+And I'm not really here to tell anyone that
+
+00:28:35.580 --> 00:28:37.160
+they're wrong. I've expressed my views on
+
+00:28:37.160 --> 00:28:40.780
+this in the past. But just for now,
+
+00:28:40.960 --> 00:28:43.660
+I'm just very practical for the purposes of
+
+00:28:43.660 --> 00:28:46.500
+this talk. So I signed the papers.
+
+00:28:46.580 --> 00:28:49.280
+It's Maybe it didn't take me many minutes.
+
+00:28:49.280 --> 00:28:51.900
+And in most cases, it shouldn't really.
+
+00:28:52.580 --> 00:28:55.000
+And it's something that I found worth doing,
+
+00:28:55.000 --> 00:28:58.580
+because that way I could focus on continuing
+
+00:28:58.580 --> 00:29:01.360
+to improve Emacs instead of discussing the
+
+00:29:01.360 --> 00:29:03.220
+finer points of copyright law.
+
+00:29:03.480 --> 00:29:05.280
+You could write patches and stuff,
+
+00:29:05.280 --> 00:29:06.680
+that kind of thing. So,
+
+00:29:06.680 --> 00:29:08.480
+I mean, this is something that trips people
+
+00:29:08.480 --> 00:29:11.100
+up and, you know, it's fine that people have
+
+00:29:11.320 --> 00:29:14.200
+different opinions on it and so on,
+
+00:29:14.200 --> 00:29:19.280
+but I think for now that's just something to
+
+00:29:19.280 --> 00:29:23.000
+be aware of. So that's,
+
+00:29:23.000 --> 00:29:26.120
+I think, I mean, there's much more that could
+
+00:29:26.120 --> 00:29:27.880
+be said. Ideally, I would like to have a
+
+00:29:27.880 --> 00:29:31.060
+practical part to this talk as well.
+
+00:29:32.020 --> 00:29:34.440
+But I wanted to say something about the
+
+00:29:34.440 --> 00:29:37.159
+packages in Emacs. Because as we know,
+
+00:29:37.159 --> 00:29:40.440
+I mean, Emacs is the, I can't remember what
+
+00:29:40.440 --> 00:29:41.740
+it says, it's like a visual,
+
+00:29:42.260 --> 00:29:43.780
+there's in the manual it says,
+
+00:29:43.780 --> 00:29:45.900
+oh, Emacs is an advanced text editor.
+
+00:29:46.180 --> 00:29:47.980
+It's visual, which, I mean,
+
+00:29:47.980 --> 00:29:50.280
+it's not ed, the whole Unix ed,
+
+00:29:50.280 --> 00:29:52.700
+so that's cool. It's also customizable,
+
+00:29:53.300 --> 00:29:56.180
+right? So that's always been a thing.
+
+00:29:57.800 --> 00:29:59.980
+And what makes Emacs so amazing.
+
+00:30:00.040 --> 00:30:01.820
+And some people described it as,
+
+00:30:01.920 --> 00:30:03.880
+I can't remember who said that there has been
+
+00:30:03.880 --> 00:30:09.440
+a Cambrian explosion of packages in Emacs.
+
+00:30:09.440 --> 00:30:10.440
+And I think that's true.
+
+00:30:10.440 --> 00:30:12.400
+I mean, if you look at something like Melpa,
+
+00:30:12.400 --> 00:30:13.760
+I think they have over 5,000
+
+00:30:13.940 --> 00:30:16.220
+packages now. It's like truly impressive,
+
+00:30:16.460 --> 00:30:18.760
+just an immense amount of work and immense
+
+00:30:18.760 --> 00:30:22.320
+amount of packages. And really,
+
+00:30:22.860 --> 00:30:24.340
+this shows the strength,
+
+00:30:24.340 --> 00:30:26.600
+I think, of the Emacs community,
+
+00:30:26.680 --> 00:30:28.780
+of Emacs itself as an idea.
+
+00:30:29.060 --> 00:30:31.240
+And I think it's also just tremendous work
+
+00:30:31.240 --> 00:30:33.580
+that's been done by the maintainers.
+
+00:30:33.960 --> 00:30:36.040
+And they do get a lot of recognition for
+
+00:30:36.040 --> 00:30:38.900
+that. And rightly so, in my opinion.
+
+00:30:39.620 --> 00:30:41.920
+It's done so much, I think,
+
+00:30:41.920 --> 00:30:44.260
+for our community. The other package archive
+
+00:30:44.260 --> 00:30:46.340
+that we have is GNU-ELPA.
+
+00:30:46.620 --> 00:30:49.640
+And that's been enabled since when packages
+
+00:30:49.640 --> 00:30:51.000
+first got introduced back in,
+
+00:30:51.000 --> 00:30:53.160
+I think, Emacs, was it 23?
+
+00:30:55.520 --> 00:30:59.200
+And probably, I mean, the main thing why a
+
+00:30:59.200 --> 00:31:01.860
+package goes onto GNU Elpa is,
+
+00:31:01.860 --> 00:31:04.040
+you know, it should be installable out of the
+
+00:31:04.040 --> 00:31:07.580
+box. So, I mean, that's a big benefit in a
+
+00:31:07.580 --> 00:31:10.960
+sense. It's also a requirement for GNU Alpa
+
+00:31:10.960 --> 00:31:12.240
+that the copyright, again,
+
+00:31:12.240 --> 00:31:14.540
+just as GNU Emacs, the copyright is assigned
+
+00:31:15.480 --> 00:31:17.020
+to the Free Software Foundation.
+
+00:31:17.080 --> 00:31:19.940
+And some very hugely popular packages,
+
+00:31:20.020 --> 00:31:21.420
+like YaSnippet, for example,
+
+00:31:21.420 --> 00:31:25.060
+is on GNU Alpa. And we were discussing this
+
+00:31:25.160 --> 00:31:30.040
+just 2 months back. And Joe Tavora,
+
+00:31:30.060 --> 00:31:31.780
+I can't say his name, G-O-A-O,
+
+00:31:33.280 --> 00:31:36.100
+Tavora. He made the point that he's never
+
+00:31:36.140 --> 00:31:40.280
+seen a problem in any of his packages with
+
+00:31:40.280 --> 00:31:42.100
+copyright assignment in particular.
+
+00:31:42.100 --> 00:31:44.540
+It's never been a problem to get people to be
+
+00:31:44.540 --> 00:31:46.560
+involved in the development of those packages
+
+00:31:46.560 --> 00:31:48.220
+just because of the copyright assignment
+
+00:31:49.160 --> 00:31:50.640
+requirements. So I mean,
+
+00:31:51.180 --> 00:31:53.840
+that's his perspective on that.
+
+00:31:54.320 --> 00:32:00.480
+And I think it was worth relating his
+
+00:32:00.480 --> 00:32:06.500
+experience here. So we also have this new
+
+00:32:06.500 --> 00:32:08.500
+package archive called non-GNU-alpha,
+
+00:32:08.920 --> 00:32:12.880
+which is now enabled by default as well.
+
+00:32:12.920 --> 00:32:14.440
+I think for practical purposes,
+
+00:32:14.540 --> 00:32:16.880
+you could get into it a little bit more,
+
+00:32:16.960 --> 00:32:18.840
+you know, why we created non-NUELPA,
+
+00:32:19.940 --> 00:32:22.320
+and perhaps that's something we can discuss
+
+00:32:23.360 --> 00:32:26.240
+in the Q&A section. For practical purposes,
+
+00:32:26.380 --> 00:32:28.280
+the main thing to be aware of is,
+
+00:32:28.280 --> 00:32:30.980
+yes, we don't promote non-free software on
+
+00:32:30.980 --> 00:32:36.780
+there, And we also don't have the copyright
+
+00:32:36.780 --> 00:32:39.060
+assignment requirement.
+
+00:32:41.400 --> 00:32:43.820
+I think this is probably for new packages.
+
+00:32:43.940 --> 00:32:48.180
+It's generally better if they go to GNU Elpa,
+
+00:32:48.180 --> 00:32:51.220
+if there is any type of idea or ambition
+
+00:32:51.280 --> 00:32:53.460
+that, you know, at some point it would be
+
+00:32:53.460 --> 00:32:56.740
+good or it might be good to eventually have
+
+00:32:56.740 --> 00:32:58.900
+some type of functionality like this shipped
+
+00:32:58.900 --> 00:33:01.200
+with Emacs itself. So I think this is
+
+00:33:01.200 --> 00:33:04.020
+something that perhaps package authors could
+
+00:33:04.020 --> 00:33:07.340
+also be aware of, that occasionally we do
+
+00:33:07.340 --> 00:33:09.780
+bring in functionality from GNU Elpa into
+
+00:33:09.780 --> 00:33:12.180
+core Emacs because we feel that it should be
+
+00:33:12.440 --> 00:33:15.560
+better integrated with Emacs itself.
+
+00:33:16.420 --> 00:33:18.480
+So if I could give any type of
+
+00:33:18.480 --> 00:33:19.400
+recommendation, of course,
+
+00:33:19.400 --> 00:33:22.120
+you do. These are your packages,
+
+00:33:22.120 --> 00:33:25.520
+right? In an ideal world,
+
+00:33:25.520 --> 00:33:28.680
+we would only use this for legacy packages
+
+00:33:28.680 --> 00:33:30.240
+where people contributed in the past,
+
+00:33:30.240 --> 00:33:32.120
+but you didn't worry about the copyright
+
+00:33:32.120 --> 00:33:34.200
+assignment. But where possible,
+
+00:33:34.200 --> 00:33:37.480
+I think there is benefit in putting it on GNU
+
+00:33:37.540 --> 00:33:42.900
+Elpa. And I wanted to end a little bit on a
+
+00:33:42.900 --> 00:33:45.140
+more, you know, the more opinionated perhaps
+
+00:33:45.380 --> 00:33:47.260
+part of my talk and not just talk about
+
+00:33:47.260 --> 00:33:49.160
+processes. I see that I'm running out of
+
+00:33:49.160 --> 00:33:51.700
+time. So I will say Emacs is hackable.
+
+00:33:51.760 --> 00:33:54.520
+And I think that's a blessing and a curse.
+
+00:33:54.520 --> 00:33:56.340
+And if you think about something like,
+
+00:33:59.060 --> 00:34:01.100
+the types of choices that you can make,
+
+00:34:01.100 --> 00:34:03.040
+perhaps when you implement something,
+
+00:34:03.160 --> 00:34:06.680
+There are choices, different choices between
+
+00:34:06.680 --> 00:34:07.740
+something like common list,
+
+00:34:07.740 --> 00:34:09.440
+which is like bigger, more batteries
+
+00:34:09.440 --> 00:34:11.320
+included, and something like scheme,
+
+00:34:11.320 --> 00:34:12.239
+which is more minimal.
+
+00:34:12.239 --> 00:34:13.679
+And I think we have some of those,
+
+00:34:13.679 --> 00:34:16.280
+you know, this kind of tension also in the
+
+00:34:16.280 --> 00:34:18.159
+Emacs itself. What should be in Emacs core?
+
+00:34:18.159 --> 00:34:19.699
+Should we have a lean Emacs core?
+
+00:34:19.699 --> 00:34:21.800
+Should we have more stuff in Emacs core?
+
+00:34:22.360 --> 00:34:26.320
+And I think these are good discussions to
+
+00:34:26.320 --> 00:34:29.380
+have. And there are various challenges that
+
+00:34:29.380 --> 00:34:31.940
+are associated with each of those choices.
+
+00:34:32.540 --> 00:34:35.320
+I think what will never change is that Emacs
+
+00:34:35.320 --> 00:34:37.280
+is hackable. Emacs is customizable.
+
+00:34:37.500 --> 00:34:38.800
+This is the key strength.
+
+00:34:38.860 --> 00:34:40.960
+This is why we love and use Emacs.
+
+00:34:40.960 --> 00:34:41.820
+I think fundamentally,
+
+00:34:42.380 --> 00:34:44.280
+whether you do it a lot or not,
+
+00:34:44.380 --> 00:34:47.260
+this is what at core is bringing you that
+
+00:34:47.320 --> 00:34:49.179
+amazing user experience.
+
+00:34:50.739 --> 00:34:53.199
+However, the flip side of that sometimes is
+
+00:34:53.199 --> 00:34:56.280
+that it's so easy to hack Emacs so that we
+
+00:34:56.280 --> 00:34:58.520
+hack around bugs instead of fixing them.
+
+00:34:58.520 --> 00:35:00.540
+We do some tweak and our customers say,
+
+00:35:00.540 --> 00:35:01.720
+okay, this is a little bit broken,
+
+00:35:01.720 --> 00:35:03.560
+Let me just fix it. I'll put an advice on
+
+00:35:03.560 --> 00:35:05.700
+this function. I'll do this customization.
+
+00:35:06.500 --> 00:35:09.040
+Or we accept limitations in Emacs core.
+
+00:35:09.340 --> 00:35:12.100
+And I think it's fine.
+
+00:35:12.380 --> 00:35:13.760
+I mean, this will never change.
+
+00:35:13.760 --> 00:35:16.560
+That will always be core to what Emacs is,
+
+00:35:16.560 --> 00:35:20.140
+right? However, I think that the flip side of
+
+00:35:20.140 --> 00:35:22.500
+that is that I think sometimes we could be
+
+00:35:22.500 --> 00:35:26.760
+better at just taking those few extra steps
+
+00:35:26.820 --> 00:35:29.260
+to also make Emacs better itself and solve
+
+00:35:29.260 --> 00:35:31.680
+this for all users. And I think if we can
+
+00:35:31.680 --> 00:35:33.680
+build a little bit more of a culture like
+
+00:35:33.680 --> 00:35:35.460
+that, I mean, we already have that culture to
+
+00:35:35.460 --> 00:35:37.200
+a large extent, don't get me wrong,
+
+00:35:37.200 --> 00:35:39.620
+we do, but if we can get a little bit more of
+
+00:35:39.620 --> 00:35:41.320
+that culture, let's get that into core,
+
+00:35:41.320 --> 00:35:43.760
+let's get that problem fixed,
+
+00:35:43.980 --> 00:35:46.140
+that frustration. I can tell you that,
+
+00:35:47.040 --> 00:35:48.940
+I just started a new assignment at work,
+
+00:35:48.940 --> 00:35:51.420
+I already told you, so I'm going to write a
+
+00:35:51.420 --> 00:35:54.140
+lot of Python, okay? So I need to keep track
+
+00:35:54.140 --> 00:35:55.740
+of something called virtual environments,
+
+00:35:56.040 --> 00:35:58.260
+and that's just a way to install these
+
+00:35:58.440 --> 00:36:01.640
+dependencies just locally per directory or
+
+00:36:01.640 --> 00:36:03.420
+per repository kind of thing.
+
+00:36:03.900 --> 00:36:05.740
+And I've used various packages for that.
+
+00:36:05.740 --> 00:36:07.860
+There are like 4 packages,
+
+00:36:07.940 --> 00:36:10.560
+5 packages, maybe. And 1 is called VM,
+
+00:36:10.560 --> 00:36:11.740
+and 1 is called VirtualM,
+
+00:36:11.820 --> 00:36:13.640
+and 1 is called Python-VM.
+
+00:36:15.420 --> 00:36:16.980
+And now I'm using, you know,
+
+00:36:16.980 --> 00:36:18.100
+I'm using a different 1.
+
+00:36:18.100 --> 00:36:19.620
+And it's just a little bit,
+
+00:36:20.080 --> 00:36:22.160
+why doesn't this work out of the box in
+
+00:36:22.160 --> 00:36:25.680
+Emacs? Why? I don't think there's a really
+
+00:36:25.680 --> 00:36:28.640
+good fundamental good reason why something
+
+00:36:28.640 --> 00:36:30.460
+like that doesn't work in Emacs.
+
+00:36:30.480 --> 00:36:31.980
+So I think that's really,
+
+00:36:32.220 --> 00:36:35.220
+I mean, I'm sure there are other things like
+
+00:36:35.220 --> 00:36:37.280
+that, other fundamental features.
+
+00:36:37.740 --> 00:36:39.920
+Why is it that for the last 20 years,
+
+00:36:39.920 --> 00:36:43.740
+we've shipped Emacs with no PHP support out
+
+00:36:43.740 --> 00:36:47.660
+of the box? I mean, I'm not a PHP programmer.
+
+00:36:47.660 --> 00:36:51.020
+I don't really have a lot of love for PHP,
+
+00:36:51.020 --> 00:36:56.020
+let's say. To me, it's a very funny-looking
+
+00:36:57.180 --> 00:37:00.060
+language, but okay, still it's been very
+
+00:37:00.060 --> 00:37:02.060
+popular. Why haven't we supported it?
+
+00:37:02.120 --> 00:37:03.280
+I mean, it's just strange.
+
+00:37:03.280 --> 00:37:05.040
+You install Emacs on some machine,
+
+00:37:05.220 --> 00:37:07.260
+you open a PHP file, you get fundamental
+
+00:37:07.280 --> 00:37:09.160
+mode. It's not the best user experience,
+
+00:37:09.160 --> 00:37:12.600
+in my opinion. So I think there are some
+
+00:37:12.600 --> 00:37:15.480
+things where we really could do a little bit
+
+00:37:15.480 --> 00:37:20.200
+better. And I'm seeing this all the time.
+
+00:37:20.200 --> 00:37:22.500
+Just this week, this new assignment was
+
+00:37:22.500 --> 00:37:24.640
+interesting. There was this Emacs user.
+
+00:37:24.720 --> 00:37:26.980
+Turns out we have the exact same hack in both
+
+00:37:26.980 --> 00:37:29.860
+of our init files. So we had created the
+
+00:37:29.860 --> 00:37:32.140
+exact same mode for DIRED,
+
+00:37:32.140 --> 00:37:33.920
+actually, to hide dot files.
+
+00:37:33.920 --> 00:37:36.720
+You know, dot something is supposed to be
+
+00:37:36.720 --> 00:37:39.440
+hidden on a Unix system.
+
+00:37:40.240 --> 00:37:43.940
+So we had DERED hide dot files mode to just
+
+00:37:43.940 --> 00:37:47.100
+hide them. And why isn't that in DERED?
+
+00:37:47.100 --> 00:37:48.420
+Or should it be in DERED?
+
+00:37:48.480 --> 00:37:50.860
+Should it be a package on the new Elpa?
+
+00:37:51.000 --> 00:37:53.000
+Where should it be? Why is it just local
+
+00:37:53.000 --> 00:37:54.680
+hack? Should it be on a wiki somewhere?
+
+00:37:54.680 --> 00:37:56.740
+I mean, sometimes that's the correct answer.
+
+00:37:56.980 --> 00:37:59.060
+Sometimes the correct answer is,
+
+00:37:59.060 --> 00:38:00.420
+yes, it should be a package.
+
+00:38:00.780 --> 00:38:02.360
+Sometimes the correct answer is,
+
+00:38:02.360 --> 00:38:04.140
+yes, it should really be in core.
+
+00:38:04.280 --> 00:38:06.420
+So what I want to promote is more like,
+
+00:38:06.480 --> 00:38:08.900
+let's just take a step back and just ask
+
+00:38:08.900 --> 00:38:11.180
+yourself, what's the best solution if we look
+
+00:38:11.180 --> 00:38:12.240
+at the overall picture?
+
+00:38:12.240 --> 00:38:13.920
+Should I hack this into my configuration?
+
+00:38:14.600 --> 00:38:16.840
+In many cases, yes, that's the right thing to
+
+00:38:16.840 --> 00:38:19.540
+do. We don't want to proliferate just random
+
+00:38:19.840 --> 00:38:22.160
+solutions all over Emacs for no reason.
+
+00:38:22.540 --> 00:38:24.760
+But sometimes we want to fix it once and for
+
+00:38:24.760 --> 00:38:27.700
+all. We want to do that in core.
+
+00:38:27.880 --> 00:38:30.200
+So you could send stuff like that to us as
+
+00:38:30.200 --> 00:38:31.480
+patches or as packages.
+
+00:38:31.560 --> 00:38:34.340
+And we can discuss a little bit about where
+
+00:38:34.340 --> 00:38:36.420
+should we solve this? What's the right level
+
+00:38:37.280 --> 00:38:41.100
+of abstraction? I'm seeing that I'm running
+
+00:38:41.100 --> 00:38:43.620
+out of time. I had an Emacs wish list.
+
+00:38:43.620 --> 00:38:46.880
+Maybe we can take more of that in the Q&A.
+
+00:38:47.170 --> 00:38:49.226
+But I want to say, like,
+
+00:38:49.226 --> 00:38:50.460
+in VS Code, you just start VS Code.
+
+00:38:50.460 --> 00:38:51.660
+You open a Python file,
+
+00:38:51.660 --> 00:38:53.040
+and you get, like, hey,
+
+00:38:53.040 --> 00:38:54.560
+are you trying to use Python?
+
+00:38:54.840 --> 00:38:56.280
+Click here, install Python.
+
+00:38:56.280 --> 00:38:58.700
+You get all the nice things out of the box.
+
+00:38:59.180 --> 00:39:01.560
+And my argument is, why can't we have more of
+
+00:39:01.560 --> 00:39:03.880
+that in Emacs? I don't think it's necessarily
+
+00:39:04.000 --> 00:39:06.360
+hard, but it does take a little bit of work.
+
+00:39:06.960 --> 00:39:09.060
+The challenges here are more social,
+
+00:39:09.060 --> 00:39:10.880
+I think, than technical.
+
+00:39:10.900 --> 00:39:12.780
+And I think it's worth doing,
+
+00:39:12.780 --> 00:39:14.060
+because it's not just Python.
+
+00:39:14.060 --> 00:39:16.640
+It's just There are always these small things
+
+00:39:16.640 --> 00:39:18.900
+where it just really should work,
+
+00:39:18.900 --> 00:39:20.900
+and that would be a much better experience.
+
+00:39:20.900 --> 00:39:23.360
+And then you could customize not that thing
+
+00:39:23.360 --> 00:39:24.600
+that should just work,
+
+00:39:24.640 --> 00:39:27.140
+but you could customize more fun and
+
+00:39:27.140 --> 00:39:29.620
+exploratory things instead of people
+
+00:39:29.620 --> 00:39:31.720
+reinventing the wheel over and over again.
+
+00:39:31.720 --> 00:39:33.420
+So I'm very excited about what's happening in
+
+00:39:33.420 --> 00:39:35.280
+Emacs. I think we should be proud of what
+
+00:39:35.280 --> 00:39:37.360
+we've accomplished. It's so many things to
+
+00:39:37.360 --> 00:39:38.360
+many different people,
+
+00:39:38.360 --> 00:39:39.660
+an environment for hacking,
+
+00:39:40.040 --> 00:39:41.620
+just a productivity system.
+
+00:39:41.880 --> 00:39:44.020
+Other sees us as a different way of looking
+
+00:39:44.020 --> 00:39:45.360
+at computing, you know,
+
+00:39:45.360 --> 00:39:47.440
+the embodiment of the ideal of the Lisp
+
+00:39:47.440 --> 00:39:49.280
+machine if you want to talk big words and
+
+00:39:49.280 --> 00:39:50.660
+stuff like that. And of course,
+
+00:39:50.660 --> 00:39:53.320
+Emacs are all those things and so many more.
+
+00:39:53.320 --> 00:39:55.440
+And that's what makes Emacs so amazing.
+
+00:39:56.280 --> 00:40:00.780
+And in some sense, we should be care that
+
+00:40:00.780 --> 00:40:03.040
+people are satisfied with using lesser text
+
+00:40:03.040 --> 00:40:05.600
+editors. How could they be happy running
+
+00:40:05.600 --> 00:40:07.440
+that? I mean, I'm sure it's fine,
+
+00:40:07.440 --> 00:40:09.800
+but it sure as hell isn't Emacs.
+
+00:40:09.800 --> 00:40:12.340
+So don't we owe it to the world and to them
+
+00:40:12.340 --> 00:40:14.440
+and to ourselves to make a great Emacs.
+
+00:40:14.760 --> 00:40:16.120
+That will be my ending words.
+
+00:40:16.120 --> 00:40:18.020
+And I hope to see you all in the Q&A.
+
+00:40:18.120 --> 00:40:22.560
+Thank you all. And thank you so much,
+
+00:40:22.560 --> 00:40:24.360
+Stefan. That was a wonderful presentation.
+
+00:40:24.800 --> 00:40:27.280
+And I just want to give you the opportunity.
+
+00:40:27.340 --> 00:40:29.940
+You said that you perhaps had,
+
+00:40:30.480 --> 00:40:31.400
+Not the practical stuff,
+
+00:40:31.400 --> 00:40:33.280
+but you wanted to do a demo or something like
+
+00:40:33.280 --> 00:40:34.780
+this? What did you mention exactly?
+
+00:40:36.180 --> 00:40:38.460
+Yeah, we didn't have time really.
+
+00:40:38.740 --> 00:40:42.040
+Yes, I'm not sure. I didn't prepare anything
+
+00:40:42.040 --> 00:40:43.580
+so that we can do it live.
+
+00:40:43.620 --> 00:40:44.800
+But maybe for next time,
+
+00:40:44.800 --> 00:40:48.620
+I will do a demo. Don't hold me to it.
+
+00:40:49.920 --> 00:40:51.100
+Or someone else could.
+
+00:40:51.100 --> 00:40:52.540
+That would be really amazing.
+
+00:40:53.260 --> 00:40:54.020
+Right. Well, thank you,
+
+00:40:54.020 --> 00:40:56.820
+Stéphane. You've been already into so much
+
+00:40:56.820 --> 00:41:00.560
+detail of so many... So much of the intricacy
+
+00:41:01.780 --> 00:41:05.100
+of the maintenance. And as someone who's been
+
+00:41:05.460 --> 00:41:07.980
+95% of the time developing for Melpa,
+
+00:41:08.260 --> 00:41:11.040
+I feel like this talk was very geared to a
+
+00:41:11.040 --> 00:41:13.980
+lot of us who tend to experiment in this
+
+00:41:13.980 --> 00:41:16.400
+Cambrian stage of Emacs evolution,
+
+00:41:16.400 --> 00:41:19.620
+where we get to deploy a lot of creativity
+
+00:41:20.600 --> 00:41:24.020
+whilst also feeling pretty agile in a way we
+
+00:41:24.020 --> 00:41:25.580
+come up with solutions to problems.
+
+00:41:25.640 --> 00:41:29.240
+But you've won me over with your discussion
+
+00:41:29.240 --> 00:41:31.360
+about potentially moving some of this stuff
+
+00:41:31.360 --> 00:41:33.220
+to core. And I think this particularly
+
+00:41:33.280 --> 00:41:36.140
+resonated at the end with this tension that
+
+00:41:36.140 --> 00:41:38.660
+you feel about problems that you encounter.
+
+00:41:39.160 --> 00:41:40.760
+Do you fix them in Melpa?
+
+00:41:40.760 --> 00:41:42.040
+Do you fix them in core?
+
+00:41:42.040 --> 00:41:43.780
+Is it not something that is supposed to be an
+
+00:41:43.780 --> 00:41:46.560
+option? I love this tension and it's
+
+00:41:46.560 --> 00:41:48.040
+something that we've been exploring for the
+
+00:41:48.040 --> 00:41:49.780
+last 3 edition of Emacs Cons.
+
+00:41:49.780 --> 00:41:52.480
+It's really what is to be the interaction
+
+00:41:52.600 --> 00:41:55.660
+between this pool of very clever developers
+
+00:41:55.680 --> 00:41:58.100
+who are on Melpa but who are perhaps a little
+
+00:41:58.100 --> 00:42:00.880
+bit afraid of joining Core and the wonderful
+
+00:42:00.920 --> 00:42:02.860
+job that you do that, yes,
+
+00:42:02.980 --> 00:42:05.640
+seems archaic from the outside,
+
+00:42:05.860 --> 00:42:07.840
+but as you've been at length today in your
+
+00:42:07.840 --> 00:42:09.480
+presentation, is actually just a better way
+
+00:42:09.480 --> 00:42:11.780
+to work, a very pragmatic way to get a lot of
+
+00:42:11.780 --> 00:42:13.320
+work done. So, thank you so much for your
+
+00:42:13.320 --> 00:42:15.240
+presentation. Thank you,
+
+00:42:15.240 --> 00:42:20.740
+Leo. So, we have about 12 minutes now to go
+
+00:42:20.740 --> 00:42:22.950
+through as many questions as possible.
+
+00:42:22.950 --> 00:42:26.000
+You have obviously had a lot of questions
+
+00:42:26.000 --> 00:42:27.180
+throughout your presentation.
+
+00:42:27.660 --> 00:42:28.940
+Do you have access to the pad,
+
+00:42:28.940 --> 00:42:30.400
+or do you want me to share the question and
+
+00:42:30.400 --> 00:42:32.660
+feed them to you? Yes,
+
+00:42:32.660 --> 00:42:34.200
+could you start with sharing them?
+
+00:42:34.200 --> 00:42:36.000
+I'll see if I can get it on my screen.
+
+00:42:36.280 --> 00:42:39.640
+Sure, I'll do that. Please let me know if my
+
+00:42:39.720 --> 00:42:42.980
+microphone is clipping because my OBS setup
+
+00:42:42.980 --> 00:42:44.440
+sometimes is a little bit janky.
+
+00:42:44.440 --> 00:42:46.080
+But I'm going to try to read the questions
+
+00:42:46.080 --> 00:42:47.780
+for now. It's tipping,
+
+00:42:48.080 --> 00:42:51.980
+I can hear you okay. Okay,
+
+00:42:51.980 --> 00:42:54.400
+so bear with the clicking,
+
+00:42:54.400 --> 00:42:56.480
+we'll switch as soon as possible to Stefan
+
+00:42:56.480 --> 00:42:58.080
+reading the question, but I'll read the first
+
+00:42:58.080 --> 00:43:02.820
+1. Can you tell us some about your,
+
+00:43:02.860 --> 00:43:04.340
+can you tell us some more I assume,
+
+00:43:04.340 --> 00:43:06.160
+about your background with Emacs development
+
+00:43:06.160 --> 00:43:07.500
+and programming in general,
+
+00:43:07.580 --> 00:43:09.220
+your professional work possibly?
+
+00:43:11.400 --> 00:43:15.440
+Yeah, sure. Okay, I studied computer science
+
+00:43:15.440 --> 00:43:19.960
+at university. I started programming on a
+
+00:43:19.960 --> 00:43:23.960
+Commodore 64. I started with BASIC and then I
+
+00:43:23.960 --> 00:43:26.880
+did a couple of versions of BASIC as a kid.
+
+00:43:27.380 --> 00:43:31.540
+But then really things took off when I
+
+00:43:31.540 --> 00:43:34.240
+started using GNU Linux.
+
+00:43:34.300 --> 00:43:35.580
+I can't remember which year,
+
+00:43:35.580 --> 00:43:37.440
+maybe it was early 2000,
+
+00:43:38.480 --> 00:43:39.740
+something like that, late.
+
+00:43:39.840 --> 00:43:42.080
+No, it must've been before that actually,
+
+00:43:42.380 --> 00:43:44.120
+because I remember I was 14.
+
+00:43:44.340 --> 00:43:46.020
+Yeah, okay, so let's say 1999,
+
+00:43:46.500 --> 00:43:48.720
+1998, somewhere there around.
+
+00:43:48.840 --> 00:43:50.200
+Then I started with Perl,
+
+00:43:50.200 --> 00:43:52.620
+and I did Perl for a good long while.
+
+00:43:52.700 --> 00:43:55.460
+I learned C++, I learned C,
+
+00:43:55.680 --> 00:43:56.960
+I did all kinds of stuff,
+
+00:43:56.960 --> 00:43:58.640
+and then I went to university,
+
+00:43:59.440 --> 00:44:01.700
+computer science, and I've been working,
+
+00:44:01.700 --> 00:44:03.980
+you know, in various roles.
+
+00:44:04.160 --> 00:44:06.300
+Right now, I'm coding Python.
+
+00:44:06.980 --> 00:44:09.640
+Up until last Friday, I was writing firmware
+
+00:44:09.940 --> 00:44:12.319
+in C for a small microcontroller,
+
+00:44:12.440 --> 00:44:15.600
+which is pretty different than writing
+
+00:44:15.600 --> 00:44:17.060
+Python, that's for sure.
+
+00:44:17.220 --> 00:44:19.600
+So yeah, so that's a little bit about me.
+
+00:44:19.600 --> 00:44:21.860
+I got interested in free software,
+
+00:44:22.300 --> 00:44:24.720
+you know, also at a very young age.
+
+00:44:24.720 --> 00:44:26.320
+So, I mean, I've been following these,
+
+00:44:26.320 --> 00:44:29.120
+you know, ideological discussions and
+
+00:44:29.120 --> 00:44:31.560
+debates, read all this stuff by Richard
+
+00:44:31.560 --> 00:44:33.940
+Stallman and so on and so forth.
+
+00:44:33.940 --> 00:44:37.760
+But yeah, that's it. Great,
+
+00:44:37.760 --> 00:44:41.120
+thank you. I'll move on to the next question.
+
+00:44:41.120 --> 00:44:42.980
+You'll have to listen to me because if I
+
+00:44:42.980 --> 00:44:45.020
+start sharing my screen again,
+
+00:44:45.020 --> 00:44:46.320
+we're going to get some clicks.
+
+00:44:48.140 --> 00:44:50.680
+So the question. Do you think that 1 day
+
+00:44:50.680 --> 00:44:53.930
+there will be a native I'll start again,
+
+00:44:53.930 --> 00:44:54.079
+sorry. Do you think that 1 day there will be
+
+00:44:54.079 --> 00:44:54.440
+a native... I'll start again,
+
+00:44:54.440 --> 00:44:56.480
+sorry. Do you think that 1 day there will be
+
+00:44:56.480 --> 00:44:59.020
+a native graphical web browser in Emacs or is
+
+00:44:59.020 --> 00:45:00.540
+it kind of against its philosophy and
+
+00:45:00.540 --> 00:45:03.820
+architecture? So will we stick just with EWW
+
+00:45:04.200 --> 00:45:06.800
+and EAF or similar workaround tricks?
+
+00:45:08.640 --> 00:45:11.200
+So if, I don't know if people have seen,
+
+00:45:11.200 --> 00:45:12.740
+there is a talk by, I think,
+
+00:45:13.440 --> 00:45:15.080
+Perry Metzger, is that the name?
+
+00:45:15.080 --> 00:45:16.800
+Sorry if I got the name wrong.
+
+00:45:17.080 --> 00:45:18.360
+Perry Metzger, I think.
+
+00:45:18.720 --> 00:45:20.800
+It's like, he marks a text editor for the
+
+00:45:20.800 --> 00:45:22.640
+next 40 years. He makes an excellent point
+
+00:45:22.640 --> 00:45:24.720
+there that 1 of the things that we need to do
+
+00:45:24.720 --> 00:45:27.840
+is really get a proper HTML rendering in
+
+00:45:27.840 --> 00:45:30.260
+Emacs. It's like a dream at this point.
+
+00:45:30.260 --> 00:45:32.200
+No 1 is actively working on something like
+
+00:45:32.200 --> 00:45:34.240
+that. I think that, you know,
+
+00:45:34.240 --> 00:45:36.380
+there, first of all, you'd need to rewrite
+
+00:45:36.380 --> 00:45:39.520
+the display engine. So that's a big job.
+
+00:45:39.920 --> 00:45:41.140
+It is. I'm not saying,
+
+00:45:41.140 --> 00:45:42.540
+you know, it can't be done,
+
+00:45:43.040 --> 00:45:44.660
+but you need to start there.
+
+00:45:44.660 --> 00:45:47.560
+Right? Second of all, you need to think
+
+00:45:47.560 --> 00:45:50.460
+about, you know, with all the Emacs Lisp code
+
+00:45:50.460 --> 00:45:52.090
+out there, is really assuming,
+
+00:45:52.090 --> 00:45:54.960
+you know, 1 paradigm, which is that you have
+
+00:45:54.960 --> 00:45:57.720
+a square, and basically you have columns and
+
+00:45:57.720 --> 00:45:59.760
+you have rows, and everything is in there,
+
+00:45:59.760 --> 00:46:02.360
+even images, is basically in a column,
+
+00:46:02.540 --> 00:46:04.740
+you know, in a column on a row somewhere.
+
+00:46:05.380 --> 00:46:07.360
+Whereas, you know, when you just start doing
+
+00:46:07.360 --> 00:46:09.780
+the more web stuff and web rendering,
+
+00:46:10.120 --> 00:46:12.020
+you already have like a seaplane.
+
+00:46:12.040 --> 00:46:14.500
+You have different types of geometries that
+
+00:46:14.500 --> 00:46:16.880
+are possible. And what does it mean to go to
+
+00:46:16.880 --> 00:46:19.370
+the logical next line in that kind of sense?
+
+00:46:19.370 --> 00:46:21.420
+I mean these types of things I'm not saying
+
+00:46:21.420 --> 00:46:23.440
+it can't be done. I'm saying there are there
+
+00:46:23.440 --> 00:46:27.440
+are definitely some challenges there It would
+
+00:46:27.440 --> 00:46:30.280
+be amazing I mean, but we need someone with
+
+00:46:30.280 --> 00:46:33.020
+you know, the inclination and talent I think
+
+00:46:33.320 --> 00:46:37.680
+to work on that's a job posting if I've ever
+
+00:46:37.680 --> 00:46:40.200
+had 1. So good luck to whoever's willing to
+
+00:46:40.200 --> 00:46:42.100
+apply for this 1. I think it's a tough 1.
+
+00:46:43.180 --> 00:46:46.440
+It is, yes. Go on. Okay,
+
+00:46:46.560 --> 00:46:48.040
+do you happen to have the questions in front
+
+00:46:48.040 --> 00:46:50.320
+of you? Can I just read them to you so that
+
+00:46:50.320 --> 00:46:52.660
+you can also have a feedback in front of you?
+
+00:46:54.780 --> 00:46:56.680
+Yes, I have the pad here.
+
+00:46:57.260 --> 00:46:58.860
+Okay, cool. So I'll read the next question
+
+00:46:58.860 --> 00:47:00.260
+and this way I don't have to worry too much
+
+00:47:00.260 --> 00:47:02.320
+about me butchering every word in the
+
+00:47:02.320 --> 00:47:04.540
+sentence. So, Emacs development and
+
+00:47:04.540 --> 00:47:06.460
+communication still is very much focused on
+
+00:47:06.460 --> 00:47:08.640
+email mailing lists. I like this,
+
+00:47:08.640 --> 00:47:10.380
+but what do you think about introducing other
+
+00:47:10.380 --> 00:47:12.320
+channels for talking to users,
+
+00:47:12.440 --> 00:47:15.140
+like the Emacs project community could set up
+
+00:47:15.140 --> 00:47:17.120
+a master on instance of its own,
+
+00:47:17.120 --> 00:47:20.280
+for instance? I think from the point of view
+
+00:47:20.280 --> 00:47:21.760
+of the Emacs core team,
+
+00:47:21.760 --> 00:47:23.860
+we don't really have a lot of resources or
+
+00:47:23.860 --> 00:47:25.960
+people inclined to be working on stuff like
+
+00:47:25.960 --> 00:47:27.880
+that. But I mean, there is so much going on.
+
+00:47:27.880 --> 00:47:29.360
+Emacs is a very, you know,
+
+00:47:30.420 --> 00:47:32.580
+It's a big community, frankly,
+
+00:47:32.580 --> 00:47:34.500
+right? So people working on emacs.com,
+
+00:47:34.760 --> 00:47:37.400
+there are people in the IRC channel,
+
+00:47:37.500 --> 00:47:39.200
+the emacs IRC channel,
+
+00:47:39.400 --> 00:47:40.820
+there's the emacs subreddit.
+
+00:47:40.960 --> 00:47:43.280
+And I mean, people are doing an incredible
+
+00:47:43.380 --> 00:47:45.480
+job. And I think if people wanna do more
+
+00:47:45.480 --> 00:47:46.400
+stuff like that, I mean,
+
+00:47:46.400 --> 00:47:48.840
+Don't wait for Argo, just go for it.
+
+00:47:52.000 --> 00:47:54.340
+Great. Moving on to the next question.
+
+00:47:54.340 --> 00:47:56.520
+Sorry, I'm not commenting anymore because we
+
+00:47:56.520 --> 00:47:58.180
+have so many questions and I'd love for you
+
+00:47:58.180 --> 00:48:00.260
+to answer as many people as possible because
+
+00:48:00.260 --> 00:48:02.540
+we have about 6 minutes technically,
+
+00:48:02.640 --> 00:48:04.820
+but we can go perhaps a little bit over.
+
+00:48:05.080 --> 00:48:06.220
+If you have the time, Stefan,
+
+00:48:06.220 --> 00:48:08.680
+though. Yeah. Okay, great.
+
+00:48:09.340 --> 00:48:11.140
+What are some features or packages you'd like
+
+00:48:11.140 --> 00:48:12.540
+to see developed by the community?
+
+00:48:12.560 --> 00:48:15.560
+We've already talked about the native HTTP
+
+00:48:15.920 --> 00:48:17.620
+display, but do you have any others?
+
+00:48:19.540 --> 00:48:22.080
+So, I mean, developed by the community,
+
+00:48:22.360 --> 00:48:23.240
+it depends what you mean.
+
+00:48:23.240 --> 00:48:27.720
+So do you mean sending stuff that people
+
+00:48:27.720 --> 00:48:29.720
+could be working on in general?
+
+00:48:30.480 --> 00:48:33.320
+I think for now, like let's say the roadmap,
+
+00:48:33.420 --> 00:48:35.140
+I'll just give some of the things that I
+
+00:48:35.140 --> 00:48:36.940
+think should happen right now and that I
+
+00:48:36.940 --> 00:48:39.060
+would love for people to send patches for.
+
+00:48:39.060 --> 00:48:41.120
+That's what I'm gonna be answering because
+
+00:48:41.120 --> 00:48:42.860
+that's what I think I can answer.
+
+00:48:43.280 --> 00:48:45.220
+Tree-sitter is a new thing,
+
+00:48:45.280 --> 00:48:48.620
+right? Improving and working on new modes
+
+00:48:48.860 --> 00:48:50.040
+for, you know, TreeSitter,
+
+00:48:50.200 --> 00:48:52.860
+it's not very hard. I think many people get
+
+00:48:52.900 --> 00:48:55.560
+into it and make sure to integrate them in
+
+00:48:55.560 --> 00:48:57.540
+Emacs core. I think that would be,
+
+00:48:58.140 --> 00:49:00.140
+I mean, on my wishlist.
+
+00:49:00.140 --> 00:49:01.960
+The other thing that is that we've asked for
+
+00:49:01.960 --> 00:49:03.740
+someone perhaps with a little bit more
+
+00:49:03.740 --> 00:49:05.940
+experience, I think, but working on
+
+00:49:05.940 --> 00:49:09.080
+refactoring capabilities in Emacs and a more
+
+00:49:09.080 --> 00:49:11.320
+general framework, I think,
+
+00:49:11.320 --> 00:49:13.680
+for that. There are probably many more ideas
+
+00:49:13.780 --> 00:49:15.300
+that I could give people,
+
+00:49:15.300 --> 00:49:17.720
+but those would be the 2 big ones,
+
+00:49:17.720 --> 00:49:20.140
+I think, that are also very uncontroversial.
+
+00:49:22.360 --> 00:49:23.960
+It's funny because for me,
+
+00:49:24.400 --> 00:49:26.760
+I don't think refactoring would count as a
+
+00:49:26.760 --> 00:49:29.760
+feature, but it's so vital to allowing
+
+00:49:30.360 --> 00:49:31.780
+further features to be developed.
+
+00:49:31.780 --> 00:49:34.160
+Otherwise, I remember the way Org Mode used
+
+00:49:34.160 --> 00:49:36.300
+to be before we had Org Element and stuff
+
+00:49:36.300 --> 00:49:38.940
+like this. It was really complicated to write
+
+00:49:38.940 --> 00:49:41.200
+any kind of parsing stuff for it.
+
+00:49:41.200 --> 00:49:42.340
+And now that we've got it,
+
+00:49:42.340 --> 00:49:44.080
+it just opened up a world of possibility
+
+00:49:44.180 --> 00:49:46.160
+where parsing an Org Mode file is just made
+
+00:49:46.160 --> 00:49:48.280
+so much easier. So I think that's a wonderful
+
+00:49:48.280 --> 00:49:49.620
+answer because it goes,
+
+00:49:49.760 --> 00:49:52.080
+it's multi-layered as you would expect from
+
+00:49:52.080 --> 00:49:53.920
+something that concerns the whole of Emacs.
+
+00:49:55.800 --> 00:49:57.160
+Moving on to the next question.
+
+00:49:57.440 --> 00:49:59.960
+What is the hardest decision being made
+
+00:49:59.960 --> 00:50:02.480
+within Emacs dev for the last 3 years.
+
+00:50:02.480 --> 00:50:04.960
+I'm not sure, is it the decision in the last
+
+00:50:04.960 --> 00:50:07.480
+3 years or I'll let you interpret the
+
+00:50:07.480 --> 00:50:08.760
+question however you want.
+
+00:50:09.280 --> 00:50:10.960
+Okay, well, I'll say this.
+
+00:50:11.640 --> 00:50:14.220
+I started in August and I haven't had any
+
+00:50:14.220 --> 00:50:16.920
+really hard decisions so far.
+
+00:50:16.920 --> 00:50:20.540
+So good news. Maybe Eli will have more for
+
+00:50:20.540 --> 00:50:22.820
+the last 3 years. Keep it simple.
+
+00:50:25.240 --> 00:50:28.660
+Thanks. Cool. Next question.
+
+00:50:28.860 --> 00:50:31.920
+Any plans to integrate XWM into core?
+
+00:50:31.940 --> 00:50:34.400
+Emacs is a really good Winters manager.
+
+00:50:34.780 --> 00:50:38.080
+That's super cool. I think EXWM is cool.
+
+00:50:38.100 --> 00:50:40.140
+I think they need to upgrade to Wayland
+
+00:50:40.260 --> 00:50:41.880
+somehow and that's not clear yet,
+
+00:50:41.880 --> 00:50:44.880
+but you know, we don't have any current plans
+
+00:50:44.880 --> 00:50:48.900
+to integrate it, no. Right,
+
+00:50:49.020 --> 00:50:51.600
+Next question. Do you think it is a good idea
+
+00:50:51.600 --> 00:50:53.540
+to choose Org Mode for writing documentation
+
+00:50:53.680 --> 00:50:57.740
+instead of tech info? I think that whatever
+
+00:50:57.740 --> 00:50:59.680
+we do, it should be the people that are
+
+00:50:59.680 --> 00:51:01.760
+working on the documentation that should make
+
+00:51:01.760 --> 00:51:03.420
+that choice. Currently we have,
+
+00:51:03.420 --> 00:51:05.920
+I think, Modus themes and Org Mode itself is
+
+00:51:05.920 --> 00:51:08.060
+writing their documentation in Org Mode,
+
+00:51:08.080 --> 00:51:10.940
+that's fine by me. It has some drawbacks,
+
+00:51:10.960 --> 00:51:13.440
+it has some benefits, but most documentation
+
+00:51:13.580 --> 00:51:14.840
+is still in tech info.
+
+00:51:15.240 --> 00:51:17.360
+Maybe we'd need to replace that at some
+
+00:51:17.360 --> 00:51:19.840
+point, I don't know. But for now,
+
+00:51:19.840 --> 00:51:22.280
+that's what people know and use.
+
+00:51:22.280 --> 00:51:24.280
+And if you find that as a barrier to
+
+00:51:24.280 --> 00:51:25.600
+contribute to Emacs, I mean,
+
+00:51:25.600 --> 00:51:27.420
+just really write it as plain text.
+
+00:51:27.540 --> 00:51:29.380
+We'll be happy to help you with the markup.
+
+00:51:29.380 --> 00:51:30.280
+It's a little bit, you know,
+
+00:51:30.280 --> 00:51:31.760
+finicky and stuff like that.
+
+00:51:33.340 --> 00:51:35.060
+Great. Thanks for that.
+
+00:51:35.620 --> 00:51:38.000
+Next question. What do you plan to work on in
+
+00:51:38.000 --> 00:51:39.360
+Emacs Core in the future?
+
+00:51:40.460 --> 00:51:42.660
+I'm a little bit hesitant to reply to that.
+
+00:51:42.660 --> 00:51:43.740
+Of course I have ideas.
+
+00:51:43.740 --> 00:51:45.760
+Of course there are projects that I'm working
+
+00:51:45.760 --> 00:51:47.640
+on. However, if I say it here,
+
+00:51:47.640 --> 00:51:48.480
+I feel like, you know,
+
+00:51:48.480 --> 00:51:51.240
+then you'll hold me to it later and come ask,
+
+00:51:51.300 --> 00:51:52.480
+where is that feature?
+
+00:51:52.640 --> 00:51:55.180
+So I'll just say there is plenty of stuff
+
+00:51:55.180 --> 00:51:57.340
+that I'm working on, and if you want to know
+
+00:51:57.340 --> 00:51:58.780
+some of the stuff that I have been working
+
+00:51:58.780 --> 00:52:00.040
+on, check the Git log.
+
+00:52:00.060 --> 00:52:02.400
+I think that's just really as much as I want
+
+00:52:02.400 --> 00:52:05.040
+to say about that right now.
+
+00:52:05.660 --> 00:52:07.360
+You've added folks to just look at the path
+
+00:52:07.360 --> 00:52:09.620
+with the changelog and that's all you need.
+
+00:52:11.600 --> 00:52:13.340
+All right, moving on to the next question.
+
+00:52:14.020 --> 00:52:16.120
+What do you use Emacs for in your life other
+
+00:52:16.120 --> 00:52:17.580
+than working on Emacs itself?
+
+00:52:18.080 --> 00:52:21.060
+Oh shit. So the big thing is programming,
+
+00:52:21.140 --> 00:52:24.020
+right? Now I work as a programmer.
+
+00:52:27.040 --> 00:52:29.280
+But in general, I use org mode heavily.
+
+00:52:29.340 --> 00:52:30.780
+I use it for all my writing.
+
+00:52:30.820 --> 00:52:33.460
+I use it to write, prepare this talk.
+
+00:52:33.480 --> 00:52:35.360
+I use it as a productivity system.
+
+00:52:35.380 --> 00:52:41.980
+I use it for emails. I use it as an RSS
+
+00:52:41.980 --> 00:52:44.480
+reader. I do most of my computing.
+
+00:52:44.760 --> 00:52:47.040
+I also have Firefox. So it's like Emacs and
+
+00:52:47.040 --> 00:52:48.820
+Firefox for some reason.
+
+00:52:48.900 --> 00:52:51.900
+I do read documentation in Emacs as well in
+
+00:52:51.900 --> 00:52:58.440
+you, but yeah. Great. I'm still,
+
+00:52:59.180 --> 00:53:00.720
+I do very much the same thing with you.
+
+00:53:00.720 --> 00:53:02.040
+Like You've described exactly what I do.
+
+00:53:02.040 --> 00:53:02.960
+I work as a programmer,
+
+00:53:02.960 --> 00:53:04.640
+I use Augment for a lot of stuff,
+
+00:53:04.640 --> 00:53:06.340
+and I think that describes a whole lot of
+
+00:53:06.340 --> 00:53:08.100
+people currently watching the stream.
+
+00:53:09.380 --> 00:53:10.680
+Moving on to the next question.
+
+00:53:10.840 --> 00:53:12.740
+What could we do in order to make Emacs more
+
+00:53:12.740 --> 00:53:14.280
+attractive for younger users?
+
+00:53:14.820 --> 00:53:17.940
+This is an amazing question and I feel wholly
+
+00:53:18.480 --> 00:53:20.720
+unprepared to answer this.
+
+00:53:21.180 --> 00:53:24.180
+Probably more introductory material aimed at
+
+00:53:24.320 --> 00:53:26.580
+that age group. What do you mean by younger
+
+00:53:26.580 --> 00:53:28.740
+users? You know what would be really cool if
+
+00:53:28.740 --> 00:53:30.740
+you had an Emacs for kids project?
+
+00:53:31.020 --> 00:53:32.060
+That would be amazing.
+
+00:53:32.680 --> 00:53:34.920
+I'm not sure if that's what people are
+
+00:53:34.920 --> 00:53:36.880
+thinking about, but yeah,
+
+00:53:37.200 --> 00:53:39.780
+that's about what I can say for now.
+
+00:53:40.380 --> 00:53:43.320
+Good question. It is a very good question,
+
+00:53:43.320 --> 00:53:45.880
+like it comes back always to a key topic in
+
+00:53:45.880 --> 00:53:47.720
+EmacsConf, which is, how do we get more
+
+00:53:47.720 --> 00:53:49.360
+people to join us? Because it's a wonderful
+
+00:53:49.360 --> 00:53:51.760
+community. And how do we onboard people who
+
+00:53:51.760 --> 00:53:54.220
+are not programmers or people who are younger
+
+00:53:54.400 --> 00:53:56.720
+than the average Joe coming in those
+
+00:53:57.120 --> 00:54:01.560
+meetings? There's this Excellent article by
+
+00:54:01.560 --> 00:54:05.960
+Paul Graham, I think, where he was describing
+
+00:54:06.140 --> 00:54:09.140
+how they used Emacs as the sort of customer
+
+00:54:09.320 --> 00:54:11.520
+service system. They built the customer
+
+00:54:11.520 --> 00:54:13.940
+service system for the early days of Amazon
+
+00:54:14.700 --> 00:54:17.200
+in Emacs Lisp. And then they switched and all
+
+00:54:17.200 --> 00:54:18.680
+the employees were sad.
+
+00:54:18.680 --> 00:54:21.680
+So definitely there's more stuff that could
+
+00:54:21.680 --> 00:54:25.160
+be done in Emacs and be done better in Emacs.
+
+00:54:25.240 --> 00:54:27.440
+So for sure, if people want to explore more
+
+00:54:27.440 --> 00:54:28.880
+stuff like that, that's amazing.
+
+00:54:29.720 --> 00:54:32.040
+Yeah. And for people who weren't around
+
+00:54:32.040 --> 00:54:33.740
+earlier today, we've had a presentation about
+
+00:54:33.740 --> 00:54:36.820
+how to get computer science students to use
+
+00:54:36.860 --> 00:54:41.100
+Emacs and trying to provide as much
+
+00:54:41.100 --> 00:54:43.500
+information and as much tutorial as needed
+
+00:54:43.500 --> 00:54:45.480
+for them to understand what is the philosophy
+
+00:54:45.480 --> 00:54:48.420
+behind Emacs and how it influences the way
+
+00:54:48.420 --> 00:54:49.540
+you work and so forth.
+
+00:54:49.540 --> 00:54:51.420
+So you might want to revisit this discussion.
+
+00:54:51.420 --> 00:54:53.400
+And we also have plenty of talks talking
+
+00:54:53.400 --> 00:54:57.720
+about this issue. And I can just add that I
+
+00:54:57.720 --> 00:55:00.320
+think it's very important for us as a
+
+00:55:00.320 --> 00:55:03.120
+community to just be enthusiastic to get more
+
+00:55:03.120 --> 00:55:04.640
+people involved. Because I mean,
+
+00:55:04.640 --> 00:55:06.660
+look, there's this meme where it's like,
+
+00:55:06.660 --> 00:55:08.620
+I use Arch Linux, by the way,
+
+00:55:08.620 --> 00:55:10.020
+I use Arch, by the way.
+
+00:55:10.080 --> 00:55:12.380
+And for some reason, people using Arch keep
+
+00:55:12.380 --> 00:55:14.080
+telling you that they're using Arch.
+
+00:55:14.600 --> 00:55:16.160
+That's fine. Use whatever you want.
+
+00:55:16.160 --> 00:55:18.260
+It's free software, I don't care.
+
+00:55:20.140 --> 00:55:21.900
+I think if you look at Vim users,
+
+00:55:21.900 --> 00:55:23.440
+they're very almost militant,
+
+00:55:23.540 --> 00:55:25.780
+oh, we're Vim, and Vim is the thing.
+
+00:55:25.920 --> 00:55:27.480
+And Emacs users sometimes,
+
+00:55:27.700 --> 00:55:29.960
+and it's fine. We take a bit of a more
+
+00:55:29.960 --> 00:55:31.160
+laid-back approach. We're like,
+
+00:55:31.160 --> 00:55:32.720
+yeah, I use Emacs, you use Vim,
+
+00:55:32.720 --> 00:55:35.320
+whatever. And that's fine.
+
+00:55:35.320 --> 00:55:36.820
+I mean, that's the correct approach,
+
+00:55:36.820 --> 00:55:38.480
+I think. You should respect what people want
+
+00:55:38.480 --> 00:55:40.840
+to use. I don't care that people use VS Code
+
+00:55:40.840 --> 00:55:42.540
+or whatever. I'm not going to use that
+
+00:55:42.540 --> 00:55:43.940
+because it's too limiting.
+
+00:55:43.940 --> 00:55:45.780
+It's not really a workable environment.
+
+00:55:46.400 --> 00:55:48.620
+But I think it's OK to be enthusiastic.
+
+00:55:48.740 --> 00:55:51.360
+I think it's okay to talk about that type of
+
+00:55:51.360 --> 00:55:54.100
+enthusiasm and anything that can help
+
+00:55:54.400 --> 00:55:56.880
+increase the enthusiasm around Emacs can only
+
+00:55:56.880 --> 00:56:01.100
+help the longevity of Emacs.
+
+00:56:02.520 --> 00:56:04.280
+I agree and that's also 1 of the key
+
+00:56:04.280 --> 00:56:05.340
+objectives of EmacsConf.
+
+00:56:05.460 --> 00:56:07.660
+It's about bringing a lot of amazing people
+
+00:56:07.660 --> 00:56:09.100
+to come talk, like you,
+
+00:56:09.140 --> 00:56:11.400
+about stuff that is very dear to you.
+
+00:56:11.400 --> 00:56:14.180
+And it's very tangible how much you care,
+
+00:56:14.180 --> 00:56:15.920
+all of you, about what you're presenting.
+
+00:56:15.920 --> 00:56:18.560
+And it's amazing to put all of you people on
+
+00:56:18.560 --> 00:56:20.800
+just 48 hours talking about all of this and
+
+00:56:20.800 --> 00:56:22.920
+then creating so much content for people to
+
+00:56:22.920 --> 00:56:24.480
+watch. And I think it's really helping the
+
+00:56:24.480 --> 00:56:28.140
+enthusiasm to live on and to gather a little
+
+00:56:28.140 --> 00:56:29.660
+more snow as it comes down.
+
+00:56:29.920 --> 00:56:31.720
+Yeah, I watch you Max Conf every year.
+
+00:56:31.720 --> 00:56:33.460
+I think it's a lot of fun.
+
+00:56:34.300 --> 00:56:37.360
+Thank you. I'll take the compliment for
+
+00:56:37.360 --> 00:56:38.620
+everyone else in the team.
+
+00:56:39.620 --> 00:56:41.120
+We're going to go a little bit longer with
+
+00:56:41.120 --> 00:56:42.800
+the Q&A because we still have a lot of
+
+00:56:42.800 --> 00:56:44.480
+questions and if Stéphane is still willing to
+
+00:56:44.480 --> 00:56:48.160
+answer, I'm still willing to not go too bad
+
+00:56:48.160 --> 00:56:49.740
+to hear a lot more of it.
+
+00:56:49.740 --> 00:56:50.580
+Yeah, for me it's fine.
+
+00:56:50.580 --> 00:56:55.760
+I have time. Great. So I think I've done this
+
+00:56:55.760 --> 00:56:57.460
+question. So, all right.
+
+00:56:58.080 --> 00:57:00.060
+How are we going to make sure that a cool
+
+00:57:00.060 --> 00:57:01.960
+idea is going to pass it through for the next
+
+00:57:01.960 --> 00:57:04.100
+generation, let's say 20 years later,
+
+00:57:04.120 --> 00:57:05.860
+the generation still have the good knowledge
+
+00:57:05.860 --> 00:57:09.940
+we have today. Yeah, so I mean,
+
+00:57:09.940 --> 00:57:12.840
+if you think about what does EMAX need to
+
+00:57:12.840 --> 00:57:15.180
+have staying power, so in general,
+
+00:57:15.180 --> 00:57:17.020
+they say, you know, if if when you start a
+
+00:57:17.020 --> 00:57:19.340
+company, if you have a company for 1 year,
+
+00:57:19.340 --> 00:57:20.220
+then in all likelihood,
+
+00:57:20.220 --> 00:57:21.820
+you're going to have it for 2 years because,
+
+00:57:21.820 --> 00:57:23.680
+you know, it's just so if you've had Emacs
+
+00:57:23.680 --> 00:57:25.840
+for 4 years, I'm saying that we're going to
+
+00:57:25.840 --> 00:57:27.980
+have Emacs for the next 4 years as well.
+
+00:57:27.980 --> 00:57:30.540
+Just based on that, I'm not sure the logic
+
+00:57:30.540 --> 00:57:32.200
+holds up, but you know,
+
+00:57:32.440 --> 00:57:34.320
+how does Emacs stay relevant?
+
+00:57:34.340 --> 00:57:35.500
+I think is the question.
+
+00:57:35.500 --> 00:57:38.400
+Well, I think we need to continue working on
+
+00:57:38.520 --> 00:57:41.840
+all the types of exploratory work that people
+
+00:57:41.840 --> 00:57:43.820
+are doing in the community.
+
+00:57:43.820 --> 00:57:45.720
+I think there is fundamental stuff that needs
+
+00:57:45.720 --> 00:57:47.720
+to be done. I mean, if people want to work
+
+00:57:47.720 --> 00:57:49.400
+on, you know, web rendering and Emacs,
+
+00:57:49.400 --> 00:57:50.240
+maybe that's the next,
+
+00:57:50.240 --> 00:57:53.240
+you know, revolutionary step that we need
+
+00:57:53.240 --> 00:57:55.320
+that could, you know, really showcase what
+
+00:57:55.320 --> 00:57:57.640
+Emacs, you know, as, you know,
+
+00:57:57.640 --> 00:58:00.620
+an idea, even if not Emacs as a software
+
+00:58:00.620 --> 00:58:01.960
+could be and, you know,
+
+00:58:01.960 --> 00:58:05.000
+Because there is huge potential in the idea
+
+00:58:05.000 --> 00:58:07.100
+as such. So maybe that's something.
+
+00:58:07.960 --> 00:58:09.600
+But I mean, from the point of view of core
+
+00:58:09.600 --> 00:58:11.840
+development, I think we need to just continue
+
+00:58:11.840 --> 00:58:15.040
+working on the fundamental technologies.
+
+00:58:15.260 --> 00:58:17.980
+1 thing that I would like to eventually see
+
+00:58:17.980 --> 00:58:19.700
+is a better garbage collector.
+
+00:58:19.900 --> 00:58:22.280
+We've talked about that for a long time,
+
+00:58:22.280 --> 00:58:25.140
+but I mean, we need someone to do the job
+
+00:58:25.380 --> 00:58:27.980
+really. It's not very easy.
+
+00:58:27.980 --> 00:58:29.780
+It's very hard, actually.
+
+00:58:31.100 --> 00:58:34.000
+So just continues working on stuff like that,
+
+00:58:34.000 --> 00:58:35.180
+continue with the exploration,
+
+00:58:35.800 --> 00:58:40.260
+continue using and being excited about Emacs.
+
+00:58:40.260 --> 00:58:43.180
+I think that's the best guarantee that we
+
+00:58:43.180 --> 00:58:45.800
+have. Yeah, and perhaps to echo something
+
+00:58:45.800 --> 00:58:46.780
+that you said earlier,
+
+00:58:46.840 --> 00:58:47.960
+the tools that you're using,
+
+00:58:47.960 --> 00:58:49.920
+like the emails, they've been around forever,
+
+00:58:49.920 --> 00:58:51.100
+they will be around forever.
+
+00:58:51.500 --> 00:58:53.480
+This pragmatic stance on the tools that
+
+00:58:53.480 --> 00:58:56.240
+you're using, they might look stayed from the
+
+00:58:56.240 --> 00:58:58.880
+outside, but ultimately they are what permits
+
+00:58:59.220 --> 00:59:02.280
+a sense of longevity to any kind of project
+
+00:59:03.300 --> 00:59:05.460
+you embark upon. Also,
+
+00:59:05.460 --> 00:59:07.260
+in a sense, I think that the expectations
+
+00:59:07.740 --> 00:59:09.320
+might be changing in the sense that,
+
+00:59:09.320 --> 00:59:12.820
+you know, when I started using GNU Linux,
+
+00:59:12.980 --> 00:59:15.060
+you know what the first thing I did was,
+
+00:59:15.060 --> 00:59:16.960
+because I couldn't get Xorg to run.
+
+00:59:16.960 --> 00:59:19.040
+So the first thing you had to do was you had
+
+00:59:19.040 --> 00:59:20.820
+to compile your own Linux kernel.
+
+00:59:20.820 --> 00:59:22.960
+So you sit there and make manuconfig and
+
+00:59:22.960 --> 00:59:24.880
+you'll like, try to read it and you've never
+
+00:59:24.880 --> 00:59:26.320
+done anything like this before.
+
+00:59:26.320 --> 00:59:27.800
+You know, I was just a kid.
+
+00:59:27.800 --> 00:59:29.540
+I had never been at this kind of,
+
+00:59:29.540 --> 00:59:31.560
+you know, whatever. So I had to start with
+
+00:59:31.560 --> 00:59:34.200
+that. And then you have to write the X or
+
+00:59:34.200 --> 00:59:36.100
+configuration file. And I had the patience
+
+00:59:36.100 --> 00:59:37.100
+for that. But nowadays,
+
+00:59:37.200 --> 00:59:38.600
+people have different expectations.
+
+00:59:38.740 --> 00:59:40.460
+You just install something,
+
+00:59:40.640 --> 00:59:42.720
+and it works. And we need to keep that in
+
+00:59:42.720 --> 00:59:45.280
+mind as well. So that's why I keep pushing as
+
+00:59:45.280 --> 00:59:48.720
+1 of my big things. We need to build a more
+
+00:59:48.740 --> 00:59:51.180
+cohesive experience out of the box.
+
+00:59:51.180 --> 00:59:52.540
+Of course, that can be customizable.
+
+00:59:52.940 --> 00:59:55.240
+You shouldn't shoehorn anything in just for
+
+00:59:55.240 --> 00:59:58.760
+the sake of it. But you could get some things
+
+00:59:58.940 --> 01:00:00.920
+a little bit more for free.
+
+01:00:01.220 --> 01:00:03.080
+And maybe some of us that have our own
+
+01:00:03.080 --> 01:00:04.780
+configs and we've been doing this for you
+
+01:00:04.780 --> 01:00:07.720
+know, 2, 05:10, even 20 years,
+
+01:00:08.480 --> 01:00:09.660
+we could also see, you know,
+
+01:00:09.660 --> 01:00:11.640
+from the point of view of a new user that
+
+01:00:11.640 --> 01:00:13.780
+just installs VS Code and then they click,
+
+01:00:13.780 --> 01:00:15.680
+yes I use Python, yes I use that,
+
+01:00:15.680 --> 01:00:18.840
+and then it just automatically works.
+
+01:00:19.200 --> 01:00:20.600
+You know what I mean? I mean,
+
+01:00:20.600 --> 01:00:24.140
+then could we get closer to that perhaps a
+
+01:00:24.140 --> 01:00:26.060
+little bit? I think that would also help.
+
+01:00:26.760 --> 01:00:28.700
+Yeah, I think that's what we call the
+
+01:00:28.700 --> 01:00:30.580
+configuration wizard. And we were talking
+
+01:00:30.580 --> 01:00:32.520
+about this, I think, a couple of years ago at
+
+01:00:32.520 --> 01:00:34.200
+EmacsConf. I can't remember if it was with
+
+01:00:34.200 --> 01:00:35.740
+Adam in the chat. Adam,
+
+01:00:35.740 --> 01:00:38.240
+I mean Alpha Papa, or if it was with Bastien,
+
+01:00:38.240 --> 01:00:40.440
+but I remember the idea cropping off.
+
+01:00:40.440 --> 01:00:42.520
+Like, it's either you get a tutorial for
+
+01:00:42.520 --> 01:00:43.520
+Emacs, a proper tutorial,
+
+01:00:43.520 --> 01:00:45.640
+or you get a wizard, or you get both,
+
+01:00:45.640 --> 01:00:47.520
+and then all is right for the world.
+
+01:00:47.520 --> 01:00:49.420
+But definitely cool ideas being evoked.
+
+01:00:50.280 --> 01:00:52.280
+I'm gonna say I need to decree the time when
+
+01:00:52.280 --> 01:00:54.440
+we finish because for me it is 11.15
+
+01:00:55.080 --> 01:00:59.300
+p.m. And I think my co-organizers are also
+
+01:00:59.300 --> 01:01:01.680
+willing to end the day and go rest because
+
+01:01:01.680 --> 01:01:03.540
+we've got another day to go tomorrow.
+
+01:01:03.760 --> 01:01:06.280
+So how about we take 3 minutes and 30 seconds
+
+01:01:06.280 --> 01:01:08.300
+to try to answer a little bit more succinctly
+
+01:01:08.560 --> 01:01:09.780
+the questions we've got left.
+
+01:01:09.780 --> 01:01:10.940
+How does that sound, Stefan?
+
+01:01:11.320 --> 01:01:15.200
+Sounds great. Cool, so I'll start reading the
+
+01:01:15.200 --> 01:01:17.140
+questions then that we've got left.
+
+01:01:18.340 --> 01:01:20.840
+So this 1 we've got. If you're willing to
+
+01:01:20.840 --> 01:01:22.360
+discuss it, what do you think about the
+
+01:01:22.360 --> 01:01:24.720
+recent controversy about use of CLLib in
+
+01:01:24.720 --> 01:01:29.980
+Emacs call code? Am I willing to discuss
+
+01:01:29.980 --> 01:01:35.960
+that? I have said my opinion on Emacs,
+
+01:01:36.420 --> 01:01:40.580
+Devel, I think. And I think I understand,
+
+01:01:40.680 --> 01:01:44.820
+I think, the viewpoints of both sides in that
+
+01:01:44.820 --> 01:01:46.720
+discussion. It is true that some things,
+
+01:01:46.720 --> 01:01:49.280
+I mean, we have to think about that.
+
+01:01:49.280 --> 01:01:50.340
+There is a real problem,
+
+01:01:50.340 --> 01:01:53.520
+I think, when we have 3 different APIs for
+
+01:01:53.520 --> 01:01:55.140
+doing the same thing in Emacs.
+
+01:01:55.320 --> 01:01:57.080
+And can we make that a little bit better?
+
+01:01:57.280 --> 01:01:59.280
+I mean, perhaps we could,
+
+01:01:59.760 --> 01:02:04.040
+right? So that's about as much as I'd like to
+
+01:02:04.040 --> 01:02:06.940
+say. Fair enough. I would have also accepted
+
+01:02:06.940 --> 01:02:09.160
+that CL loops are ugly to write and they
+
+01:02:09.160 --> 01:02:10.320
+don't feel very lispy.
+
+01:02:10.320 --> 01:02:12.040
+But I'll take your answer as well.
+
+01:02:13.260 --> 01:02:15.360
+Yeah, some people think that.
+
+01:02:15.660 --> 01:02:18.400
+I understand that position as well.
+
+01:02:19.200 --> 01:02:21.220
+Right. Okay, next question.
+
+01:02:21.260 --> 01:02:23.100
+When we find a bug in our Emacs,
+
+01:02:23.100 --> 01:02:25.200
+do we need to try to replicate it on our side
+
+01:02:25.200 --> 01:02:26.780
+version, on our SID version,
+
+01:02:26.780 --> 01:02:29.340
+sorry, then update all the usual list package
+
+01:02:29.340 --> 01:02:31.480
+we use, and if we succeed to replicate the
+
+01:02:31.480 --> 01:02:33.340
+bug in this version, only then go to
+
+01:02:33.340 --> 01:02:35.420
+development version 30 and do the same.
+
+01:02:35.660 --> 01:02:37.580
+Then only ask for assistance in reporting the
+
+01:02:37.580 --> 01:02:40.260
+bug we found. So I believe when they
+
+01:02:40.260 --> 01:02:43.540
+encounter a bug, are people supposed to go to
+
+01:02:43.540 --> 01:02:47.500
+master to pull main and just to make sure
+
+01:02:47.500 --> 01:02:48.740
+that they are on the latest version.
+
+01:02:48.740 --> 01:02:49.980
+Is this something that you require?
+
+01:02:50.660 --> 01:02:51.860
+We don't require that,
+
+01:02:51.860 --> 01:02:54.940
+but we do try to encourage you to reproduce
+
+01:02:54.960 --> 01:02:57.380
+it on master if we think that it matters.
+
+01:02:57.720 --> 01:03:00.920
+Yeah, so if you can, that's even better.
+
+01:03:01.620 --> 01:03:03.940
+But if the bug is there in Emacs 29,
+
+01:03:03.940 --> 01:03:06.000
+maybe we want to fix it in Emacs 29.2.
+
+01:03:06.340 --> 01:03:09.820
+So the latest point release is also fine.
+
+01:03:10.400 --> 01:03:12.940
+Bugs in Emacs 28 at this point,
+
+01:03:12.940 --> 01:03:14.780
+like the previous major version,
+
+01:03:15.060 --> 01:03:17.720
+we might ask you to try to reproduce it on
+
+01:03:17.720 --> 01:03:19.600
+Emacs 29 because we're not planning more
+
+01:03:19.600 --> 01:03:21.600
+releases of old major versions.
+
+01:03:21.600 --> 01:03:23.660
+So that's the fundamental reason for that.
+
+01:03:24.480 --> 01:03:25.820
+Great. Thank you for your answer.
+
+01:03:25.900 --> 01:03:27.680
+All right. Moving on to the next question.
+
+01:03:27.840 --> 01:03:29.280
+On branching off sub-threads,
+
+01:03:29.680 --> 01:03:31.840
+I note that they are less visible compared to
+
+01:03:31.840 --> 01:03:33.380
+starting a new thread in practice.
+
+01:03:33.520 --> 01:03:35.680
+I am wondering if it is just my impression or
+
+01:03:35.680 --> 01:03:37.400
+something devs also observe.
+
+01:03:37.920 --> 01:03:39.780
+Yeah, it's true. That's correct.
+
+01:03:41.400 --> 01:03:42.840
+I don't know what to do about it.
+
+01:03:42.840 --> 01:03:44.160
+If you want more visibility,
+
+01:03:44.180 --> 01:03:45.920
+I guess just start a new thread.
+
+01:03:47.080 --> 01:03:48.960
+I don't know. I can only agree,
+
+01:03:48.960 --> 01:03:50.880
+really. I concur. That's true.
+
+01:03:51.720 --> 01:03:54.260
+Okay. Next question. What about rewriting
+
+01:03:54.340 --> 01:03:57.100
+Emacs in Rust? Use Guile instead of Elisp.
+
+01:03:57.260 --> 01:03:59.580
+Multi-threaded Emacs. Make Emacs prettier and
+
+01:03:59.580 --> 01:04:01.760
+shiny. And of course, same defaults.
+
+01:04:02.220 --> 01:04:04.440
+Just kidding. We are spoiled children because
+
+01:04:04.440 --> 01:04:07.780
+you and Eli, Lars, and etc do an impressive
+
+01:04:08.420 --> 01:04:10.620
+work. I live in Emacs since 2001.
+
+01:04:11.040 --> 01:04:14.220
+Thanks. That was a good 1.
+
+01:04:14.220 --> 01:04:17.880
+Sane defaults. Okay, Well,
+
+01:04:18.900 --> 01:04:20.580
+thank you. Thanks for that comment.
+
+01:04:20.580 --> 01:04:23.440
+That made me chuckle. Next question by the
+
+01:04:23.440 --> 01:04:24.520
+same person, I assume.
+
+01:04:24.520 --> 01:04:26.580
+The only downside I see with copyright
+
+01:04:26.580 --> 01:04:28.900
+assignment is that 1 has to disclose their
+
+01:04:28.900 --> 01:04:31.240
+real identity. Would it be a possibility to
+
+01:04:31.240 --> 01:04:32.860
+assign a copyright under a nickname?
+
+01:04:33.160 --> 01:04:34.840
+Yeah, you don't have to say a real name.
+
+01:04:34.840 --> 01:04:37.260
+Just register some pseudonym.
+
+01:04:37.360 --> 01:04:39.440
+The FSF does need your real name,
+
+01:04:39.440 --> 01:04:41.420
+but that's kept private only.
+
+01:04:41.500 --> 01:04:45.920
+So feel free to reach out to assign at
+
+01:04:45.920 --> 01:04:48.360
+gnu.org and ask more about that.
+
+01:04:49.860 --> 01:04:51.680
+Right. All right, next question.
+
+01:04:51.820 --> 01:04:53.400
+Do you think it is possible to reach an
+
+01:04:53.400 --> 01:04:55.240
+agreement on sane defaults for better
+
+01:04:55.240 --> 01:04:57.220
+out-of-the-box experience?
+
+01:04:57.800 --> 01:05:00.040
+Yeah, so your sane is not my sane
+
+01:05:00.060 --> 01:05:01.760
+necessarily. So that's the fundamental
+
+01:05:01.780 --> 01:05:02.960
+problem that we're discussing here.
+
+01:05:02.960 --> 01:05:03.960
+I think it's a social,
+
+01:05:03.960 --> 01:05:05.240
+not a technical problem.
+
+01:05:05.380 --> 01:05:07.580
+We do change defaults sometimes,
+
+01:05:07.640 --> 01:05:09.880
+but I mean, there is also some staying power.
+
+01:05:09.880 --> 01:05:12.260
+So it's understandable that,
+
+01:05:12.260 --> 01:05:13.940
+you know, it's, we can't just change them
+
+01:05:13.940 --> 01:05:15.920
+willy nilly and then flip flop between,
+
+01:05:15.920 --> 01:05:18.340
+you know, 1 or the other kind of thing.
+
+01:05:18.340 --> 01:05:20.060
+So it does take a little bit more time.
+
+01:05:20.060 --> 01:05:22.860
+But yeah, sure, we can.
+
+01:05:23.000 --> 01:05:25.860
+We do change defaults at times.
+
+01:05:26.380 --> 01:05:29.780
+But it's perhaps more slower than what some
+
+01:05:29.780 --> 01:05:31.420
+people would prefer, for sure.
+
+01:05:31.640 --> 01:05:36.000
+So that's, yeah. Right,
+
+01:05:36.000 --> 01:05:37.620
+all right. We have 2 more questions.
+
+01:05:37.920 --> 01:05:40.020
+So will XWidgets have a future?
+
+01:05:40.120 --> 01:05:42.180
+Seeing the new bugs popping up in the latest
+
+01:05:42.740 --> 01:05:45.280
+XWidget dev. Not sure if there was the rest
+
+01:05:45.280 --> 01:05:46.640
+of the question, But on XWidgets,
+
+01:05:46.640 --> 01:05:47.940
+can you tell us a little more?
+
+01:05:48.740 --> 01:05:50.580
+I'm not really following now.
+
+01:05:50.580 --> 01:05:52.400
+I mean, I'm not seeing a lot of development
+
+01:05:52.500 --> 01:05:54.180
+on XWidgets currently.
+
+01:05:54.480 --> 01:05:57.100
+Some people have done work in fixing up a few
+
+01:05:57.100 --> 01:06:00.320
+bugs, but I think that feature really needs
+
+01:06:00.380 --> 01:06:02.180
+more love. So I think we need,
+
+01:06:02.180 --> 01:06:03.600
+you know, help is welcome,
+
+01:06:03.600 --> 01:06:05.920
+patch is welcome. That's what I can say about
+
+01:06:05.920 --> 01:06:11.180
+that. All right, and our final question of
+
+01:06:11.180 --> 01:06:13.140
+the day. Have you voted for Emacs as the
+
+01:06:13.140 --> 01:06:15.140
+software of the year on the Tuxes by Jupyter
+
+01:06:15.140 --> 01:06:17.480
+Broadcasting? I did because Emacs 29 is
+
+01:06:17.480 --> 01:06:19.300
+great. Thank you. Okay,
+
+01:06:19.300 --> 01:06:20.580
+well, good job voting.
+
+01:06:20.580 --> 01:06:22.960
+I didn't know, I don't know what Tuxy is on
+
+01:06:22.960 --> 01:06:25.680
+Jupyter broadcasting, but look it up and go
+
+01:06:25.680 --> 01:06:28.040
+vote. So I wish I could tell you,
+
+01:06:28.040 --> 01:06:29.500
+I assume with Tux, it might be something
+
+01:06:29.500 --> 01:06:32.900
+related to Linux, but that's as much as I can
+
+01:06:32.900 --> 01:06:34.840
+say. All right, well, Stefan,
+
+01:06:34.960 --> 01:06:36.600
+thank you so much for taking the time not
+
+01:06:36.600 --> 01:06:38.000
+only to do a wonderful presentation,
+
+01:06:38.000 --> 01:06:39.640
+but also for answering all the questions of
+
+01:06:39.640 --> 01:06:41.240
+the community. Do you have anything else to
+
+01:06:41.240 --> 01:06:45.360
+add? Just really thanks for all the questions
+
+01:06:45.360 --> 01:06:46.760
+and thanks for staying.
+
+01:06:47.780 --> 01:06:49.600
+It's been a long day, a long conference,
+
+01:06:49.600 --> 01:06:51.180
+so thanks for staying and listening to my
+
+01:06:51.180 --> 01:06:52.540
+talk as well. Really appreciate it.
+
+01:06:52.540 --> 01:06:54.280
+Appreciate the good work you guys are doing
+
+01:06:54.280 --> 01:06:55.460
+behind the scenes, organizing,
+
+01:06:55.520 --> 01:06:56.740
+setting everything up.
+
+01:06:57.040 --> 01:07:00.420
+And really humbled to be a part of this
+
+01:07:00.420 --> 01:07:02.060
+community. So thank you all.
+
+01:07:02.680 --> 01:07:05.860
+Well I can assure you that no 1 either in the
+
+01:07:05.860 --> 01:07:08.040
+organization team or the people watching now
+
+01:07:08.040 --> 01:07:10.900
+felt like it was tiring to stay and listen to
+
+01:07:10.900 --> 01:07:12.760
+your answers. So thank you so much Stefan.
diff --git a/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt
new file mode 100644
index 00000000..2c46c976
--- /dev/null
+++ b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:35.399
+Introduction
+
+00:01:35.400 --> 00:02:01.159
+Cubing in Emacs
+
+00:02:01.160 --> 00:02:32.039
+Prior art
+
+00:02:32.040 --> 00:03:16.519
+The name
+
+00:03:16.520 --> 00:03:49.239
+What's in wca-prep
+
+00:03:49.240 --> 00:04:03.080
+Demo
+
+00:05:15.340 --> 00:07:09.219
+Challenges: Representing the cube
+
+00:07:09.220 --> 00:08:09.499
+Scrambling
+
+00:08:09.500 --> 00:08:56.419
+Visualization
+
+00:08:56.420 --> 00:09:55.579
+UI with Transient
+
+00:09:55.580 --> 00:11:12.579
+Book-keeping with SQLite
+
+00:11:12.580 --> 00:13:30.860
+Conclusion
diff --git a/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt
new file mode 100644
index 00000000..db303c95
--- /dev/null
+++ b/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt
@@ -0,0 +1,803 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:08.359
+Hello, everyone, and welcome to Speedcubing in Emacs.
+
+00:00:08.360 --> 00:00:10.119
+First of all, a little bit about myself.
+
+00:00:10.120 --> 00:00:13.679
+My name is Vasilij Schneidermann. Online, I go by wasamasa.
+
+00:00:13.680 --> 00:00:18.039
+I'm 31 years old. I work in information security,
+
+00:00:18.040 --> 00:00:20.479
+and I do consulting and hacking
+
+00:00:20.480 --> 00:00:22.479
+and stuff like figuring out
+
+00:00:22.480 --> 00:00:25.279
+how to break into other people's computers
+
+00:00:25.280 --> 00:00:29.359
+and how to secure their systems basically.
+
+00:00:29.360 --> 00:00:31.439
+You can reach me by email.
+
+00:00:31.440 --> 00:00:36.639
+I do have a self-hosted code repository thingy going on.
+
+00:00:36.640 --> 00:00:40.399
+I have a blog, and you can find me
+
+00:00:40.400 --> 00:00:45.919
+in some other places online, like IRC for example.
+
+00:00:45.920 --> 00:00:48.679
+So about the talk itself,
+
+00:00:48.680 --> 00:00:52.839
+I used to be into the Rubik's cube when I was in school.
+
+00:00:52.840 --> 00:00:54.039
+I forgot about it, though,
+
+00:00:54.040 --> 00:00:56.279
+because these cubes were not very good.
+
+00:00:56.280 --> 00:01:02.279
+Recently I did find some cheap looking cube at a shop.
+
+00:01:02.280 --> 00:01:04.119
+Did not pay terribly much for it.
+
+00:01:04.120 --> 00:01:07.039
+It was so, so much better than my old cube,
+
+00:01:07.040 --> 00:01:08.639
+it was unreal.
+
+00:01:08.640 --> 00:01:11.479
+This motivated me to get back into
+
+00:01:11.480 --> 00:01:13.559
+this really weird kind of hobby.
+
+00:01:13.560 --> 00:01:17.999
+For this, you need to be good at producing
+
+00:01:18.000 --> 00:01:19.399
+a truly random scramble
+
+00:01:19.400 --> 00:01:22.319
+and timing your attempts to get any better at it.
+
+00:01:22.320 --> 00:01:23.719
+There is, of course, existing software
+
+00:01:23.720 --> 00:01:26.239
+to do the scrambling for you and the recording
+
+00:01:26.240 --> 00:01:28.079
+and the timekeeping and such,
+
+00:01:28.080 --> 00:01:31.239
+but all the good options seem to be either web or mobile,
+
+00:01:31.240 --> 00:01:33.239
+for example the cstimer software
+
+00:01:33.240 --> 00:01:35.399
+or the twisty-timer app on Android.
+
+
+NOTE Cubing in Emacs
+
+00:01:35.400 --> 00:01:39.319
+To my surprise, I did not find a single decent option
+
+00:01:39.320 --> 00:01:41.959
+inside Emacs, so this is basically a case study
+
+00:01:41.960 --> 00:01:44.999
+how to do better. For this, I wanted to make use of
+
+00:01:45.000 --> 00:01:47.799
+all the cool new Emacs features that appeared,
+
+00:01:47.800 --> 00:01:50.879
+like the SVG library; Transient,
+
+00:01:50.880 --> 00:01:53.599
+the library used for the Magit-style interfaces;
+
+00:01:53.600 --> 00:01:56.439
+and the recently added sqlite-mode.
+
+00:01:56.440 --> 00:02:01.159
+And most importantly it was about having fun.
+
+NOTE Prior art
+
+00:02:01.160 --> 00:02:02.759
+So here's a full list of prior art,
+
+00:02:02.760 --> 00:02:04.279
+I will not go into detail about this,
+
+00:02:04.280 --> 00:02:06.239
+but basically we have things solving
+
+00:02:06.240 --> 00:02:08.039
+very different parts of this,
+
+00:02:08.040 --> 00:02:10.759
+but not all of it. For example: we have several,
+
+00:02:10.760 --> 00:02:14.239
+we have a timer. We have several solvers.
+
+00:02:14.240 --> 00:02:16.039
+We have some scramblers.
+
+00:02:16.040 --> 00:02:19.359
+We have some whole-cube simulators, including a 3D one.
+
+00:02:19.360 --> 00:02:20.759
+We have something for making it easier
+
+00:02:20.760 --> 00:02:23.119
+to enter your algorithms in the notation.
+
+00:02:23.120 --> 00:02:25.919
+But nothing that does all of those things in one package,
+
+00:02:25.920 --> 00:02:28.119
+which kind of surprised me.
+
+00:02:28.120 --> 00:02:32.039
+So I present the `wca-prep` package.
+
+NOTE The name
+
+00:02:32.040 --> 00:02:35.559
+So the name, I found it difficult
+
+00:02:35.560 --> 00:02:39.959
+to come up with a good name and so I looked
+
+00:02:39.960 --> 00:02:42.559
+and I saw, well there's this World Cube Association
+
+00:02:42.560 --> 00:02:46.039
+that holds these competitions where you compete.
+
+00:02:46.040 --> 00:02:47.759
+They do this for the Rubik's cube
+
+00:02:47.760 --> 00:02:48.919
+but also a few others,
+
+00:02:48.920 --> 00:02:50.799
+so there's like a standardized list
+
+00:02:50.800 --> 00:02:52.639
+of events they have for this.
+
+00:02:52.640 --> 00:02:55.159
+There is a standard notation for this
+
+00:02:55.160 --> 00:02:56.519
+and rules and everything.
+
+00:02:56.520 --> 00:02:58.199
+And the goal of my package is basically
+
+00:02:58.200 --> 00:03:01.279
+to help prepare myself for such a competition
+
+00:03:01.280 --> 00:03:03.679
+and in fact a week ago I went to my first one
+
+00:03:03.680 --> 00:03:06.719
+which was wild, but pretty cool.
+
+00:03:06.720 --> 00:03:10.919
+So for this reason I chose this name wca-prep,
+
+00:03:10.920 --> 00:03:13.639
+because it helps me prepare for this kind of competition
+
+00:03:13.640 --> 00:03:16.519
+and this limited the scope significantly,
+
+NOTE What's in wca-prep
+
+00:03:16.520 --> 00:03:18.999
+I have a scrambler, visualization of the scramble,
+
+00:03:19.000 --> 00:03:23.319
+timer, and statistics.
+
+00:03:23.320 --> 00:03:25.559
+I excluded pretty much everything else I've seen.
+
+00:03:25.560 --> 00:03:28.788
+For this reason, I only tried to focus on
+
+00:03:28.789 --> 00:03:32.199
+some very basic puzzles I can solve comfortably,
+
+00:03:32.200 --> 00:03:34.839
+and did not want to do anything else
+
+00:03:34.840 --> 00:03:36.439
+that may complicate things significantly.
+
+00:03:36.440 --> 00:03:40.479
+No other kinds of puzzles, no simulation, no solving,
+
+00:03:40.480 --> 00:03:43.919
+no exotic events, and no specialized scrambles
+
+00:03:43.920 --> 00:03:49.239
+that are only good for practicing specific algorithms.
+
+NOTE Demo
+
+00:03:49.240 --> 00:03:54.199
+So at this point the organizer should hopefully show
+
+00:03:54.200 --> 00:03:57.999
+a small video I've prepared, a one minute video showing how
+
+00:03:58.000 --> 00:05:15.239
+I actually use this to solve a cube and to time my solve.
+
+NOTE Challenges: Representing the cube
+
+00:05:15.240 --> 00:05:18.508
+Okay, so building this thing, there were several challenges.
+
+00:05:18.509 --> 00:05:20.508
+The first one was how do I even represent
+
+00:05:20.509 --> 00:05:22.468
+the state of a Rubik's cube.
+
+00:05:22.469 --> 00:05:25.508
+For this there are many possible representations,
+
+00:05:25.509 --> 00:05:27.708
+no obvious best solution.
+
+00:05:27.709 --> 00:05:29.628
+I did not, well, what helped me was that
+
+00:05:29.629 --> 00:05:31.988
+I did not have to programmatically solve this thing,
+
+00:05:31.989 --> 00:05:35.188
+so I picked the easiest possible representation
+
+00:05:35.189 --> 00:05:38.268
+which is just an array of every single facelet.
+
+00:05:38.269 --> 00:05:42.508
+For a 3x3 cube you have 9 facelets on one side,
+
+00:05:42.509 --> 00:05:47.268
+so times 6 sides you would have 54 elements in this array.
+
+00:05:47.269 --> 00:05:49.708
+So with this representation, it's very simple,
+
+00:05:49.709 --> 00:05:52.388
+but it's kind of weird to do scrambles with this.
+
+00:05:52.389 --> 00:05:54.908
+But otherwise, it worked very, very well.
+
+00:05:54.909 --> 00:05:57.268
+In the future, I plan to learn some group theory,
+
+00:05:57.269 --> 00:05:58.748
+pick a better representation
+
+00:05:58.749 --> 00:06:01.188
+and do this in a much, much more elegant way
+
+00:06:01.189 --> 00:06:07.868
+without compromising speed too much.
+
+00:06:07.869 --> 00:06:10.708
+Yes. Once I had the representation,
+
+00:06:10.709 --> 00:06:13.628
+the scrambling itself should not be too hard.
+
+00:06:13.629 --> 00:06:17.748
+For this, it's important to consider that basically
+
+00:06:17.749 --> 00:06:19.148
+if you do a face turn
+
+00:06:19.149 --> 00:06:22.428
+you end up swapping some facelets with other facelets,
+
+00:06:22.429 --> 00:06:26.028
+that's the easiest way to think about this.
+
+00:06:26.029 --> 00:06:29.268
+To determine which one goes into which one's position,
+
+00:06:29.269 --> 00:06:32.470
+it was pretty confusing to figure this out.
+
+00:06:32.471 --> 00:06:34.308
+For this I went through a few papers,
+
+00:06:34.309 --> 00:06:36.028
+and I found one which suggested
+
+00:06:36.029 --> 00:06:37.948
+to just build a cube out of paper,
+
+00:06:37.949 --> 00:06:40.028
+number every facelet, and turn it
+
+00:06:40.029 --> 00:06:44.348
+and keep track of which facelet moved into which position.
+
+00:06:44.349 --> 00:06:47.508
+And programmatically, the `cl-rotatef` macro
+
+00:06:47.509 --> 00:06:49.388
+was very, very useful for doing this kind of
+
+00:06:49.389 --> 00:06:51.628
+in-place swapping you need for this operation.
+
+00:06:51.629 --> 00:06:54.868
+So in the future, group theory would hopefully
+
+00:06:54.869 --> 00:06:57.988
+make this a bit less awkward.
+
+00:06:57.989 --> 00:07:00.108
+Here's a photo of this paper cube I made
+
+00:07:00.109 --> 00:07:03.868
+along with a real cube. As you can see
+
+00:07:03.869 --> 00:07:07.348
+mathematically speaking, they are the same thing,
+
+00:07:07.349 --> 00:07:09.268
+they just look very, very different.
+
+NOTE Scrambling
+
+00:07:09.269 --> 00:07:14.308
+So the scramble algorithm itself,
+
+00:07:14.309 --> 00:07:19.428
+I pondered how this would even be done. In the competitions,
+
+00:07:19.429 --> 00:07:21.588
+They do this in a very, very elaborate way.
+
+00:07:21.589 --> 00:07:22.748
+They generate a random cube,
+
+00:07:22.749 --> 00:07:25.388
+they try to solve it, and if it's solvable
+
+00:07:25.389 --> 00:07:28.548
+they use these solution moves
+
+00:07:28.549 --> 00:07:30.828
+to turn into a scramble basically.
+
+00:07:30.829 --> 00:07:34.948
+And they also make sure to canonicalize the moves,
+
+00:07:34.949 --> 00:07:38.548
+so if you have subsequent moves that can be simplified,
+
+00:07:38.549 --> 00:07:40.588
+they do simplify these as much as possible.
+
+00:07:40.589 --> 00:07:41.228
+For example,
+
+00:07:41.229 --> 00:07:43.748
+if you have two subsequent rotations in one direction,
+
+00:07:43.749 --> 00:07:46.668
+it's turned into a different kind of rotation,
+
+00:07:46.669 --> 00:07:49.388
+so 90 and 90 equals 180.
+
+00:07:49.389 --> 00:07:53.308
+And the other Elisp scramblers I looked at,
+
+00:07:53.309 --> 00:07:55.108
+they generate random moves.
+
+00:07:55.109 --> 00:07:57.508
+Some of them do canonicalize. Not all of them.
+
+00:07:57.509 --> 00:08:00.908
+This one tries to do the best low-fi thing,
+
+00:08:00.909 --> 00:08:02.388
+that is, generating random moves,
+
+00:08:02.389 --> 00:08:04.028
+canonicalizing and repeating
+
+00:08:04.029 --> 00:08:09.548
+until enough have been generated.
+
+NOTE Visualization
+
+00:08:09.549 --> 00:08:13.148
+For the visualization I had to figure out
+
+00:08:13.149 --> 00:08:14.508
+something else too complicated.
+
+00:08:14.509 --> 00:08:17.228
+For this, I tried to figure out
+
+00:08:17.229 --> 00:08:19.868
+where every facelift would end up in the puzzle view
+
+00:08:19.869 --> 00:08:21.428
+when you would unfold it.
+
+00:08:21.429 --> 00:08:25.668
+And for this, I did not consider the facelet orientation.
+
+00:08:25.669 --> 00:08:29.268
+This may be important later for some other puzzles
+
+00:08:29.269 --> 00:08:31.148
+where you can end up with very twisted faces,
+
+00:08:31.149 --> 00:08:33.028
+but for simple cubes, it's not a problem.
+
+00:08:33.029 --> 00:08:36.308
+My initial prototype used colored text,
+
+00:08:36.309 --> 00:08:38.748
+but later, I used the SVG library.
+
+00:08:38.749 --> 00:08:41.588
+It turned out to be easy enough to use, actually.
+
+00:08:41.589 --> 00:08:46.108
+Currently, I have hard-coded face-color mappings,
+
+00:08:46.109 --> 00:08:49.108
+but I plan to replace this so that theming is possible.
+
+00:08:49.109 --> 00:08:51.588
+For example, if you happen to have a cube
+
+00:08:51.589 --> 00:08:54.689
+that does not have the same color mappings as I do,
+
+00:08:54.690 --> 00:08:56.468
+then you should be able to fix this.
+
+NOTE UI with Transient
+
+00:08:56.469 --> 00:09:01.428
+Next challenge was to build
+
+00:09:01.429 --> 00:09:03.948
+a beautiful intuitive UI with Transient.
+
+00:09:03.949 --> 00:09:06.868
+The reason why I chose this is
+
+00:09:06.869 --> 00:09:10.348
+because it would be self-documenting and Magit-style,
+
+00:09:10.349 --> 00:09:12.348
+and everyone knows how Magit works basically.
+
+00:09:12.349 --> 00:09:15.308
+Since Transient has become part of Emacs,
+
+00:09:15.309 --> 00:09:17.228
+there is really no reason to not try it out.
+
+00:09:17.229 --> 00:09:21.668
+The problem was documentation is difficult to understand.
+
+00:09:21.669 --> 00:09:23.388
+It's very abstract and high level,
+
+00:09:23.389 --> 00:09:25.868
+and it's hard to figure out. "Okay,
+
+00:09:25.869 --> 00:09:26.788
+I want to do something,
+
+00:09:26.789 --> 00:09:28.908
+how am I supposed to do this?"
+
+00:09:28.909 --> 00:09:33.348
+I did find transient-showcase, which has lots of examples,
+
+00:09:33.349 --> 00:09:35.628
+but they don't really feel finished
+
+00:09:35.629 --> 00:09:39.068
+and not realistic enough.
+
+00:09:39.069 --> 00:09:40.748
+When I tried to use the package,
+
+00:09:40.749 --> 00:09:42.908
+I got plenty of unhelpful error messages
+
+00:09:42.909 --> 00:09:44.108
+when using it incorrectly.
+
+00:09:44.109 --> 00:09:45.948
+I did manage to figure it out,
+
+00:09:45.949 --> 00:09:50.588
+but I plan to find more actual examples of it,
+
+00:09:50.589 --> 00:09:53.428
+to have an executable reference basically
+
+00:09:53.429 --> 00:09:55.628
+and try to improve my use of it.
+
+NOTE Book-keeping with SQLite
+
+00:09:55.629 --> 00:10:01.548
+For the book-keeping, I used SQLite.
+
+00:10:01.549 --> 00:10:04.548
+This is a very recent addition to Emacs,
+
+00:10:04.549 --> 00:10:07.308
+it only appeared in the current major version.
+
+00:10:07.309 --> 00:10:09.388
+It's still very early days.
+
+00:10:09.389 --> 00:10:13.028
+I found some oddities, one of them turned out to be
+
+00:10:13.029 --> 00:10:14.828
+a bug in the transaction macro.
+
+00:10:14.829 --> 00:10:17.588
+Like basically, if you do an SQL transaction
+
+00:10:17.589 --> 00:10:20.188
+and an error happens, then every helper I found
+
+00:10:20.189 --> 00:10:20.948
+does a rollback on an error.
+
+00:10:20.949 --> 00:10:26.748
+But this one did not. It actually committed on an error,
+
+00:10:26.749 --> 00:10:29.868
+and this was very weird to figure out.
+
+00:10:29.869 --> 00:10:34.308
+I reported a bug. Eli was nice enough to send me a patch.
+
+00:10:34.309 --> 00:10:35.428
+We did some patch review,
+
+00:10:35.429 --> 00:10:37.988
+and he ended up fixing it properly.
+
+00:10:37.989 --> 00:10:45.668
+So yes, there's still a lot to be done there, and yeah,
+
+00:10:45.669 --> 00:10:46.908
+the API is very basic.
+
+00:10:46.909 --> 00:10:48.908
+You don't have convenience helpers
+
+00:10:48.909 --> 00:10:51.308
+like fetch the first row or fetch the first value
+
+00:10:51.309 --> 00:10:54.429
+or anything, but they're easy enough to write yourself.
+
+00:10:54.430 --> 00:10:56.369
+And the biggest challenge with this bookkeeping part
+
+00:10:56.370 --> 00:10:58.028
+was figuring out a decent schema,
+
+00:10:58.029 --> 00:11:00.148
+like how to organize data correctly
+
+00:11:00.149 --> 00:11:02.348
+so that it would not be awkward to manipulate.
+
+00:11:02.349 --> 00:11:05.748
+And with this, you can finally build a package
+
+00:11:05.749 --> 00:11:07.388
+that remembers its state properly
+
+00:11:07.389 --> 00:11:10.468
+and don't have to run into foot guns
+
+00:11:10.469 --> 00:11:12.628
+with Lisp-style serialization, deserialization.
+
+NOTE Conclusion
+
+00:11:12.629 --> 00:11:18.188
+So yes, that concludes it so far.
+
+00:11:18.189 --> 00:11:22.188
+So what did I learn from this exercise?
+
+00:11:22.189 --> 00:11:24.508
+Well, there are still plenty of packages
+
+00:11:24.509 --> 00:11:25.588
+for Emacs to be written.
+
+00:11:25.589 --> 00:11:28.908
+If you think everything you can think of
+
+00:11:28.909 --> 00:11:31.348
+or you need has already been written, well, guess what?
+
+00:11:31.349 --> 00:11:31.788
+No.
+
+00:11:31.789 --> 00:11:34.044
+These are still plenty of specialized things
+
+00:11:34.045 --> 00:11:36.788
+that could need your help.
+
+00:11:36.789 --> 00:11:39.788
+These cubes do not require advanced mathematics,
+
+00:11:39.789 --> 00:11:41.148
+contrary to what you may think.
+
+00:11:41.149 --> 00:11:44.708
+Yes, you can apply advanced mathematics to them
+
+00:11:44.709 --> 00:11:47.468
+if you want to, but you don't have to.
+
+00:11:47.469 --> 00:11:50.988
+What surprised me about this is basically group theory.
+
+00:11:50.989 --> 00:11:52.068
+I've heard of it before.
+
+00:11:52.069 --> 00:11:53.828
+It seemed to be a meme, basically,
+
+00:11:53.829 --> 00:11:56.468
+because it has been like mostly Haskell people
+
+00:11:56.469 --> 00:11:58.188
+being very excited about this
+
+00:11:58.189 --> 00:12:02.508
+and it seemed kind of, like, divorced from reality, basically.
+
+00:12:02.509 --> 00:12:05.948
+But this puzzle, it actually proves that yes,
+
+00:12:05.949 --> 00:12:06.948
+it has its use.
+
+00:12:06.949 --> 00:12:08.428
+It definitely has.
+
+00:12:08.429 --> 00:12:11.388
+You just have to find the right problem matching it,
+
+00:12:11.389 --> 00:12:13.468
+and yeah.
+
+00:12:13.469 --> 00:12:15.388
+So yeah, once I understand it better,
+
+00:12:15.389 --> 00:12:18.548
+the topic, I expect to write better code.
+
+00:12:18.549 --> 00:12:24.468
+These new Emacs features, they work well enough.
+
+00:12:24.469 --> 00:12:25.908
+There are some rough edges.
+
+00:12:25.909 --> 00:12:27.428
+They definitely need more testing.
+
+00:12:27.429 --> 00:12:30.668
+So please, please, everyone,
+
+00:12:30.669 --> 00:12:34.548
+if you write Elisp, please try SQLite or Transient
+
+00:12:34.549 --> 00:12:36.708
+or anything else that looks cool and shiny.
+
+00:12:36.709 --> 00:12:38.468
+Report bugs.
+
+00:12:38.469 --> 00:12:41.588
+Find ways to improve them, anything. And yeah,
+
+00:12:41.589 --> 00:12:44.868
+I'm sure that if we do this,
+
+00:12:44.869 --> 00:12:47.668
+then Emacs will continue to get even better.
+
+00:12:47.669 --> 00:12:51.788
+So yeah, what's next for this package?
+
+00:12:51.789 --> 00:12:55.988
+Well, I could... There are lots of obvious UI improvements
+
+00:12:55.989 --> 00:12:57.348
+and testing to be done.
+
+00:12:57.349 --> 00:12:59.708
+I basically want to reach feature parity
+
+00:12:59.709 --> 00:13:02.428
+with the twisty-timer app, which this is very much inspired by.
+
+00:13:02.429 --> 00:13:06.668
+I want nice-looking stats like graphical ones
+
+00:13:06.669 --> 00:13:08.788
+instead of just a simple list of times.
+
+00:13:08.789 --> 00:13:11.228
+And I want support for more puzzles, of course,
+
+00:13:11.229 --> 00:13:12.548
+not just the simple cubes,
+
+00:13:12.549 --> 00:13:14.588
+but as I progress learning these puzzles,
+
+00:13:14.589 --> 00:13:18.068
+I want to have Emacs supporting me for this.
+
+00:13:18.069 --> 00:13:22.428
+But generally, it's a very open-ended package.
+
+00:13:22.429 --> 00:13:26.628
+And this concludes the talk.
+
+00:13:26.629 --> 00:13:30.909
+Thank you very much.
diff --git a/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt b/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt
new file mode 100644
index 00000000..7a93ee4c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt
@@ -0,0 +1,1652 @@
+WEBVTT
+
+
+00:00:02.419 --> 00:00:08.480
+2 seconds. All right. I think we are live.
+
+00:00:08.480 --> 00:00:10.280
+Yes. So, hi again, everyone.
+
+00:00:10.580 --> 00:00:13.620
+I have the pleasure to welcome John Wiegley
+
+00:00:13.620 --> 00:00:15.440
+in person to this EmacsConf.
+
+00:00:15.700 --> 00:00:17.260
+Hi, John. Hello there.
+
+00:00:17.680 --> 00:00:18.820
+How are you doing, Leo?
+
+00:00:18.820 --> 00:00:21.100
+I am doing fantastic, and even more now that
+
+00:00:21.100 --> 00:00:23.540
+I am in a room with you because we've been,
+
+00:00:24.279 --> 00:00:25.640
+we were reminiscing with Sacha.
+
+00:00:25.640 --> 00:00:30.860
+So you had been there in person in 2013 And
+
+00:00:30.860 --> 00:00:32.680
+since we started doing those online,
+
+00:00:32.680 --> 00:00:35.020
+Juan, since 2019, I think you've always been
+
+00:00:35.020 --> 00:00:38.460
+online, right? Usually it's a pre-recorded
+
+00:00:38.520 --> 00:00:40.440
+video. I think this will be the first 1 I do
+
+00:00:40.440 --> 00:00:42.540
+live in a long time. You're right.
+
+00:00:42.540 --> 00:00:44.239
+I'm saying we are online right now,
+
+00:00:44.239 --> 00:00:45.920
+but I just meant pre-recorded video.
+
+00:00:45.920 --> 00:00:48.400
+So it's good to have you almost in person or
+
+00:00:48.400 --> 00:00:50.900
+at least live and we are excited to hear
+
+00:00:50.900 --> 00:00:52.360
+about some of the Emacs news.
+
+00:00:52.360 --> 00:00:54.780
+So the floor is yours.
+
+00:00:55.080 --> 00:00:56.900
+All right, well welcome everybody.
+
+00:00:57.260 --> 00:01:00.239
+This is the yearly state of the Emacs union,
+
+00:01:00.239 --> 00:01:02.860
+I guess, about how Emacs development is
+
+00:01:02.860 --> 00:01:05.379
+going. Just to note, I am not currently a
+
+00:01:05.379 --> 00:01:07.760
+maintainer of Emacs. So what I do to get
+
+00:01:07.760 --> 00:01:09.920
+these notes is I call up my friend,
+
+00:01:09.920 --> 00:01:12.040
+Eli Zaretsky, 1 of the current Emacs
+
+00:01:12.040 --> 00:01:13.820
+maintainers, and he and I sit down for an
+
+00:01:13.820 --> 00:01:17.160
+hour, and he just gives me his dump of what's
+
+00:01:17.160 --> 00:01:19.400
+been going on. So I'm sort of just the
+
+00:01:19.400 --> 00:01:22.200
+messenger here. But thanks to Eli for these
+
+00:01:22.200 --> 00:01:24.400
+notes and all of the efforts that he
+
+00:01:24.400 --> 00:01:27.400
+contributes. So what he's been telling me is
+
+00:01:27.400 --> 00:01:30.060
+that this Emacs 29 release that we had
+
+00:01:30.060 --> 00:01:31.720
+recently looks to have been very,
+
+00:01:31.720 --> 00:01:33.580
+very successful, which is some good news,
+
+00:01:33.580 --> 00:01:35.420
+because there were a lot of new features,
+
+00:01:35.660 --> 00:01:37.360
+and some of those features were actually
+
+00:01:37.360 --> 00:01:39.520
+quite radical. So far,
+
+00:01:39.520 --> 00:01:40.680
+it's been quite a success,
+
+00:01:40.680 --> 00:01:42.440
+no serious problems with it,
+
+00:01:42.440 --> 00:01:44.080
+and we have Emacs 29.2
+
+00:01:45.140 --> 00:01:46.740
+will be released very soon.
+
+00:01:47.260 --> 00:01:50.020
+They are thinking now about starting the
+
+00:01:50.020 --> 00:01:53.080
+Emacs 30 release cycle soon after 29.2
+
+00:01:53.520 --> 00:01:55.880
+is released, where the release branch,
+
+00:01:55.880 --> 00:01:58.120
+which is called Emacs-30 usually,
+
+00:01:59.060 --> 00:02:01.400
+will be cut and then development will become
+
+00:02:01.400 --> 00:02:03.960
+frozen with only bug fixes going into that
+
+00:02:03.960 --> 00:02:07.200
+branch. That may take quite some time until
+
+00:02:07.200 --> 00:02:09.639
+it actually comes to fruition as a release,
+
+00:02:09.639 --> 00:02:11.660
+but at least it means that the release is
+
+00:02:11.660 --> 00:02:13.860
+going to start taking shape in that branch
+
+00:02:13.860 --> 00:02:17.720
+soon. So, for now, Emacs 30 looks like maybe
+
+00:02:17.720 --> 00:02:19.540
+it's going to be a little less interesting
+
+00:02:19.600 --> 00:02:23.160
+than Emacs 29 was, meaning not a huge number
+
+00:02:23.160 --> 00:02:25.120
+of changing features. But there are still
+
+00:02:25.120 --> 00:02:26.820
+some new things going in.
+
+00:02:26.980 --> 00:02:29.960
+So 1 of them is that Emacs 30 is going to
+
+00:02:29.960 --> 00:02:32.300
+have Android support. So you will be able to
+
+00:02:32.300 --> 00:02:34.900
+run Emacs 30 on your Android devices.
+
+00:02:35.140 --> 00:02:37.120
+So if you've ever wanted to have native Emacs
+
+00:02:37.120 --> 00:02:39.500
+on a tablet, which I know I've always wanted,
+
+00:02:40.140 --> 00:02:42.940
+that will become possible with Emacs 30.
+
+00:02:43.140 --> 00:02:45.480
+There's also going to be much better support
+
+00:02:45.480 --> 00:02:46.780
+for touchscreen devices,
+
+00:02:47.440 --> 00:02:50.260
+coincidentally, both laptops and tablets.
+
+00:02:50.740 --> 00:02:53.240
+So that'll enhance that Android support.
+
+00:02:54.860 --> 00:02:57.180
+There will be some recently gained support
+
+00:02:57.240 --> 00:03:01.720
+for LLDB in GUD.dl. So if you're on a Mac OS
+
+00:03:01.720 --> 00:03:05.580
+machine or a machine that uses just LLVM as
+
+00:03:05.580 --> 00:03:07.060
+part of the compilation process,
+
+00:03:07.400 --> 00:03:10.180
+then you probably are familiar with LLDB as
+
+00:03:10.180 --> 00:03:11.380
+the command line debugger.
+
+00:03:11.720 --> 00:03:14.940
+And that support for using LLDB through a GUD
+
+00:03:15.040 --> 00:03:17.320
+will become possible in Emacs 30.
+
+00:03:17.320 --> 00:03:19.000
+I'm looking forward to this actually quite a
+
+00:03:19.000 --> 00:03:22.620
+bit as well. C Perl mode is being deprecated,
+
+00:03:23.200 --> 00:03:25.920
+and all future work now is only being put
+
+00:03:25.920 --> 00:03:30.660
+towards C Perl mode. Another 1 is that there
+
+00:03:30.660 --> 00:03:33.000
+are going to be some new major modes based on
+
+00:03:33.000 --> 00:03:35.780
+TreeSitter. They will be for the languages
+
+00:03:35.860 --> 00:03:38.160
+Lua, Elixir, and HTML.
+
+00:03:38.800 --> 00:03:39.980
+And if you're not familiar,
+
+00:03:40.160 --> 00:03:42.620
+I think TreeSitter was introduced in Emacs
+
+00:03:42.620 --> 00:03:46.660
+29. It's a library that allows you to specify
+
+00:03:47.460 --> 00:03:49.900
+the grammar of a programming language as a
+
+00:03:49.900 --> 00:03:53.300
+BNF file, and I think using JavaScript,
+
+00:03:53.540 --> 00:03:56.600
+and then with that file as input to Emacs,
+
+00:03:56.600 --> 00:03:59.840
+it is then able to do syntax highlighting,
+
+00:04:00.940 --> 00:04:03.080
+syntax discovery, all of those things within
+
+00:04:03.080 --> 00:04:06.140
+Emacs without having to use elisp and regexps
+
+00:04:06.460 --> 00:04:08.300
+to discover the structure of the language.
+
+00:04:08.300 --> 00:04:10.440
+It defers the structure gathering to
+
+00:04:10.440 --> 00:04:13.420
+TreeSitter and then uses that information to
+
+00:04:13.420 --> 00:04:14.560
+navigate the language.
+
+00:04:15.200 --> 00:04:17.300
+So, As time goes on, you'll see more and more
+
+00:04:17.300 --> 00:04:19.540
+languages taking on TreeSetter support.
+
+00:04:19.540 --> 00:04:21.160
+So the next 3 coming up,
+
+00:04:21.160 --> 00:04:22.660
+Lua, Elixir, and HTML.
+
+00:04:24.060 --> 00:04:26.680
+And then the last feature for Emacs 30 is
+
+00:04:26.680 --> 00:04:29.860
+that the byte compiler will now detect and
+
+00:04:29.860 --> 00:04:32.920
+warn about many more questionable constructs.
+
+00:04:33.340 --> 00:04:35.300
+Things like empty macro bodies,
+
+00:04:35.740 --> 00:04:37.160
+missing lexical constructs,
+
+00:04:37.580 --> 00:04:40.220
+or say, condition case without any handlers.
+
+00:04:40.580 --> 00:04:43.340
+Just silly stuff that might litter the code,
+
+00:04:43.340 --> 00:04:45.180
+but now you'll get a warning about it from
+
+00:04:45.180 --> 00:04:46.920
+the byte compiler to help you clean up the
+
+00:04:46.920 --> 00:04:49.160
+code and get rid of those potential sites of
+
+00:04:49.160 --> 00:04:52.740
+error. So this is the main thing that will be
+
+00:04:52.740 --> 00:04:55.160
+worked on for Emacs 30 and what's looked like
+
+00:04:55.160 --> 00:04:56.400
+shaping up for the release.
+
+00:04:56.680 --> 00:04:58.940
+And also, he wanted me to announce that
+
+00:04:58.940 --> 00:05:01.340
+Stefan Kongas is now a new co-maintainer.
+
+00:05:01.980 --> 00:05:03.260
+And Stefan is, I believe,
+
+00:05:03.260 --> 00:05:05.500
+here with us in the conference and he'll be
+
+00:05:05.500 --> 00:05:07.940
+able, I hope, to help me answer any questions
+
+00:05:08.080 --> 00:05:10.120
+about future Emacs development because I'm
+
+00:05:10.120 --> 00:05:12.240
+not in the heat of it and don't have all
+
+00:05:12.240 --> 00:05:13.600
+those answers at the moment.
+
+00:05:14.580 --> 00:05:17.180
+So That is all there is as far as a
+
+00:05:17.180 --> 00:05:18.840
+development update for now.
+
+00:05:19.340 --> 00:05:21.980
+And I am available to take any questions.
+
+00:05:24.860 --> 00:05:26.200
+All right. Thank you so much,
+
+00:05:26.200 --> 00:05:29.340
+Sean, for being the messenger of all this
+
+00:05:29.340 --> 00:05:31.820
+good news. I mean, you did start by saying
+
+00:05:31.820 --> 00:05:33.480
+this would not be as exciting,
+
+00:05:33.600 --> 00:05:36.280
+perhaps, as prior releases of Emacs,
+
+00:05:36.280 --> 00:05:38.980
+but you then proceeded to say a lot of stuff
+
+00:05:38.980 --> 00:05:40.760
+that it felt very exciting to me.
+
+00:05:40.760 --> 00:05:43.620
+So good, good. Glad to hear that.
+
+00:05:44.540 --> 00:05:47.180
+Right. So we do have questions coming in
+
+00:05:47.180 --> 00:05:50.380
+already and again people the link is on IRC
+
+00:05:50.380 --> 00:05:52.120
+and also on the talks page if you want to
+
+00:05:52.120 --> 00:05:53.260
+start asking questions.
+
+00:05:53.480 --> 00:05:54.840
+So John what I'm going to do I'm going to
+
+00:05:54.840 --> 00:05:56.580
+read you the questions and then you can
+
+00:05:56.580 --> 00:05:58.300
+answer them. Is that okay with you?
+
+00:05:58.320 --> 00:06:01.620
+Absolutely. So starting with the first
+
+00:06:01.620 --> 00:06:04.440
+question which changes in recent Emacs
+
+00:06:04.440 --> 00:06:06.540
+releases are you enjoying using?
+
+00:06:08.360 --> 00:06:11.820
+I have really liked the visual line mode.
+
+00:06:13.140 --> 00:06:15.060
+I'm not sure how recent that is.
+
+00:06:15.060 --> 00:06:16.820
+Some of these features I only discovered
+
+00:06:16.840 --> 00:06:19.580
+quite late, the new display line number
+
+00:06:19.700 --> 00:06:21.380
+functionality, where it's much,
+
+00:06:21.380 --> 00:06:23.040
+much, much faster, and of course,
+
+00:06:23.040 --> 00:06:25.320
+native compilation. Native compilation has
+
+00:06:25.320 --> 00:06:27.360
+been quite brilliant for some of the larger
+
+00:06:27.360 --> 00:06:29.480
+packages that I use. I do a lot of stuff in
+
+00:06:29.480 --> 00:06:31.820
+Emacs. I use GNU's, I use E-Shell,
+
+00:06:31.820 --> 00:06:33.540
+I use Org Mode quite a lot.
+
+00:06:33.580 --> 00:06:36.100
+So native compilation has brought the user
+
+00:06:36.100 --> 00:06:39.960
+experience much closer to a modern app than
+
+00:06:39.960 --> 00:06:42.180
+some of the lagging and slowness that I might
+
+00:06:42.180 --> 00:06:43.580
+have experienced in the past.
+
+00:06:44.340 --> 00:06:47.180
+Definitely. Moving on to the next question.
+
+00:06:47.260 --> 00:06:49.200
+What do you think the future in the area of
+
+00:06:49.200 --> 00:06:51.040
+artificial intelligence from the developer
+
+00:06:51.060 --> 00:06:53.580
+point of view? Could you say that 1 more
+
+00:06:53.580 --> 00:06:54.876
+time? Your voice broke up a little bit.
+
+00:06:54.876 --> 00:06:55.025
+Oh, sorry. What do you think the future in
+
+00:06:55.025 --> 00:06:55.141
+the area of artificial intelligence from the
+
+00:06:55.141 --> 00:06:55.208
+developer point of view?
+
+00:06:55.208 --> 00:06:55.324
+Could you say that 1 more time?
+
+00:06:55.324 --> 00:06:55.440
+Your voice broke up a little bit.
+
+00:06:55.440 --> 00:06:58.100
+Oh, sorry. What do you think the future in
+
+00:06:58.100 --> 00:07:00.580
+the area of artificial intelligence from the
+
+00:07:00.580 --> 00:07:01.560
+developer point of view?
+
+00:07:01.560 --> 00:07:02.860
+It's also a shaky question,
+
+00:07:02.860 --> 00:07:04.500
+I think, but you get the point.
+
+00:07:04.960 --> 00:07:09.220
+I do use chat-gpt-shell inside of Emacs quite
+
+00:07:09.220 --> 00:07:10.920
+a bit, actually, when doing development in
+
+00:07:10.920 --> 00:07:12.440
+other languages. Just the other day,
+
+00:07:12.440 --> 00:07:15.200
+I was working on my Ledger accounting
+
+00:07:15.220 --> 00:07:18.080
+program, and I haven't done a lot of C++ in
+
+00:07:18.080 --> 00:07:21.180
+recent years. So I had forgotten how to
+
+00:07:21.180 --> 00:07:23.760
+exactly compare 2 strings only up to the
+
+00:07:23.760 --> 00:07:25.020
+length of the shortest string.
+
+00:07:25.020 --> 00:07:26.940
+I know I could have cranked that out just
+
+00:07:26.940 --> 00:07:28.740
+writing it C style, but I didn't remember
+
+00:07:28.740 --> 00:07:30.800
+what the current state of the art is for C++
+
+00:07:30.940 --> 00:07:33.460
+and the STL. So I just asked chatGPT.
+
+00:07:33.680 --> 00:07:36.140
+I asked the exact question that I just said
+
+00:07:36.140 --> 00:07:38.220
+to you and sure enough it popped out the
+
+00:07:38.220 --> 00:07:40.080
+one-liner that was exactly what I needed.
+
+00:07:40.080 --> 00:07:42.240
+So I think in terms of developer assistance,
+
+00:07:42.800 --> 00:07:45.820
+not having to keep all of standard libraries
+
+00:07:45.860 --> 00:07:47.460
+or common idioms in memory.
+
+00:07:47.520 --> 00:07:49.460
+I don't know if other people are familiar
+
+00:07:49.480 --> 00:07:51.080
+with Rosetta Stone projects.
+
+00:07:51.460 --> 00:07:53.680
+They're projects where you have say a hundred
+
+00:07:53.680 --> 00:07:55.780
+different languages and there's a particular
+
+00:07:55.860 --> 00:07:58.640
+question, say, how do I read a file and copy
+
+00:07:58.640 --> 00:07:59.720
+it to another location?
+
+00:07:59.820 --> 00:08:01.880
+And then it has an instance of doing that
+
+00:08:01.880 --> 00:08:03.820
+activity for every 1 of those languages.
+
+00:08:04.180 --> 00:08:05.140
+That's a great database,
+
+00:08:05.140 --> 00:08:07.160
+and I've used them quite a bit in the past
+
+00:08:07.160 --> 00:08:09.260
+for remembering how to do certain things,
+
+00:08:09.440 --> 00:08:12.540
+say, converting a string to UTF-8.
+
+00:08:13.280 --> 00:08:15.660
+I think that AI does a great job of
+
+00:08:15.660 --> 00:08:17.780
+completely replacing the need for databases
+
+00:08:17.900 --> 00:08:19.920
+like that because you can just ask how do I
+
+00:08:19.920 --> 00:08:21.980
+copy a convert a string to UTF-8.
+
+00:08:23.760 --> 00:08:27.440
+Yeah exactly and you know especially with
+
+00:08:27.440 --> 00:08:30.480
+languages which are tried well tried you know
+
+00:08:30.480 --> 00:08:32.360
+it's very easy to get an answer that is
+
+00:08:32.360 --> 00:08:34.940
+correct. But sometimes what I find bothersome
+
+00:08:34.940 --> 00:08:37.460
+with this type of coding,
+
+00:08:37.460 --> 00:08:39.840
+I think it's AI-aided coding,
+
+00:08:39.840 --> 00:08:40.820
+but it's still coding,
+
+00:08:41.120 --> 00:08:43.140
+is that, especially with C languages,
+
+00:08:43.140 --> 00:08:44.240
+sometimes you're going to end up with
+
+00:08:44.240 --> 00:08:45.860
+undefined behaviors and stuff like this just
+
+00:08:45.860 --> 00:08:47.900
+because other people have been doing it,
+
+00:08:47.900 --> 00:08:50.860
+not because the algorithm or the model was
+
+00:08:50.860 --> 00:08:53.680
+trained with data that dates back to 10 years
+
+00:08:53.680 --> 00:09:00.060
+ago. At the time, C++ was a little different.
+
+00:09:00.060 --> 00:09:01.400
+Anyway, I'm not here to talk,
+
+00:09:01.400 --> 00:09:03.960
+you are here to talk. Moving on to the next
+
+00:09:03.960 --> 00:09:06.560
+question. People already get to hear my voice
+
+00:09:06.560 --> 00:09:09.640
+plenty, whereas yours are much sparser.
+
+00:09:10.520 --> 00:09:13.580
+All right. So, what is the future of Emacs on
+
+00:09:13.580 --> 00:09:16.080
+macOS? I understand that there are too few
+
+00:09:16.080 --> 00:09:17.420
+developers for the platform.
+
+00:09:17.440 --> 00:09:21.600
+Is that still true? That's a good question.
+
+00:09:21.600 --> 00:09:23.620
+I don't know what the current statistics are.
+
+00:09:23.620 --> 00:09:27.040
+I've been a user of Emacs on Mac OS for
+
+00:09:27.040 --> 00:09:29.920
+decades now. It feels like the,
+
+00:09:30.140 --> 00:09:33.480
+There's also that Mac port version of Emacs,
+
+00:09:33.480 --> 00:09:35.920
+which builds Emacs more directly using the
+
+00:09:35.920 --> 00:09:37.860
+GUI libraries on the platform.
+
+00:09:38.300 --> 00:09:40.320
+That continues to be updated with every
+
+00:09:40.320 --> 00:09:42.040
+single new release that comes out.
+
+00:09:42.620 --> 00:09:45.220
+So I'd say that the support may not be as
+
+00:09:45.220 --> 00:09:47.540
+great as it is on Linux and other platforms,
+
+00:09:47.640 --> 00:09:50.500
+but to this day I haven't suffered from being
+
+00:09:50.500 --> 00:09:55.220
+a Mac user. Great. The only thing I remember
+
+00:09:55.240 --> 00:10:00.480
+about Emacs on macOS was that emojis made it
+
+00:10:00.480 --> 00:10:03.540
+inside the GUI first before they did it
+
+00:10:03.540 --> 00:10:05.820
+anywhere else. That's the 1 anecdote that I
+
+00:10:05.820 --> 00:10:09.520
+have on MacOS. Right. And historically that
+
+00:10:09.520 --> 00:10:12.720
+feature was removed in order to prevent Mac
+
+00:10:12.720 --> 00:10:14.840
+from having features that Linux did not.
+
+00:10:15.160 --> 00:10:16.860
+I didn't want to go into that point.
+
+00:10:16.860 --> 00:10:18.340
+I just wanted to mention the beginning of the
+
+00:10:18.340 --> 00:10:19.840
+anecdote and people can find it out.
+
+00:10:19.840 --> 00:10:22.040
+But yes, that's also what it led to.
+
+00:10:24.020 --> 00:10:25.340
+Moving on to the next question.
+
+00:10:25.640 --> 00:10:28.120
+Why aren't you contributing to Emacs anymore?
+
+00:10:28.140 --> 00:10:29.360
+Lack of time, I guess?
+
+00:10:30.240 --> 00:10:31.840
+Lack of time, primarily.
+
+00:10:32.300 --> 00:10:33.840
+Work has been very consuming.
+
+00:10:33.900 --> 00:10:36.020
+There are a lot of other projects and things
+
+00:10:36.020 --> 00:10:39.000
+that I like doing. I still find Emacs Lisp
+
+00:10:39.000 --> 00:10:40.460
+very, very fun to write.
+
+00:10:40.840 --> 00:10:43.260
+Just the other day, I was hacking up some
+
+00:10:43.260 --> 00:10:45.760
+extension macros for myself for org mode.
+
+00:10:45.920 --> 00:10:48.900
+But to have the time needed to sit down and
+
+00:10:48.900 --> 00:10:51.580
+design a whole new mode and work on it.
+
+00:10:51.580 --> 00:10:53.660
+I've been spending a lot of my time now in
+
+00:10:53.660 --> 00:10:55.580
+functional languages, especially theorem
+
+00:10:55.580 --> 00:10:57.840
+provers. I just find that so intellectually
+
+00:10:58.100 --> 00:10:59.620
+satisfying and interesting.
+
+00:11:00.400 --> 00:11:01.860
+Plus it pays a lot better.
+
+00:11:01.860 --> 00:11:03.680
+Never had a paying job as an Emacs list
+
+00:11:03.680 --> 00:11:06.420
+developer. So when it comes to now just being
+
+00:11:06.420 --> 00:11:08.380
+a fun language or a hobby language,
+
+00:11:08.420 --> 00:11:10.680
+it is relegated to the time that I have free
+
+00:11:10.680 --> 00:11:13.680
+when it's available. Right.
+
+00:11:13.700 --> 00:11:15.420
+Well, the good thing is that it's kind of
+
+00:11:15.420 --> 00:11:16.360
+like riding a bicycle,
+
+00:11:16.360 --> 00:11:17.980
+you know, writing a major mode,
+
+00:11:17.980 --> 00:11:20.160
+it comes back relatively quickly and still
+
+00:11:20.160 --> 00:11:22.600
+enjoyable. You know, the other day,
+
+00:11:22.600 --> 00:11:25.200
+actually, I took notes on a mode that I
+
+00:11:25.200 --> 00:11:28.100
+wanted to write. There's an app I use on the
+
+00:11:28.100 --> 00:11:30.060
+Mac called drafts, and I really love it.
+
+00:11:30.060 --> 00:11:31.460
+I use it all the time.
+
+00:11:31.720 --> 00:11:34.600
+I wanted to mimic the interface of this app
+
+00:11:34.600 --> 00:11:37.620
+in Emacs. So I could use Emacs as my drafts
+
+00:11:37.680 --> 00:11:40.060
+application rather than this separate 1.
+
+00:11:40.440 --> 00:11:42.720
+So I noted down all the different user
+
+00:11:42.720 --> 00:11:44.580
+parameters and how it should function and
+
+00:11:44.580 --> 00:11:47.240
+everything to describe the app to myself as
+
+00:11:47.240 --> 00:11:50.320
+sort of notes to get me started on that work
+
+00:11:50.320 --> 00:11:52.460
+when I did have free time to work on it.
+
+00:11:52.540 --> 00:11:54.760
+Somebody out there on the internet just saw
+
+00:11:54.760 --> 00:11:57.040
+these notes, because I keep a lot of my stuff
+
+00:11:57.040 --> 00:11:59.680
+on GitHub. They fed it to chat GPT,
+
+00:12:00.280 --> 00:12:01.960
+going back to your AI question.
+
+00:12:02.220 --> 00:12:04.540
+And they actually sent back to me a mode that
+
+00:12:04.540 --> 00:12:06.640
+implemented everything that I had said,
+
+00:12:06.820 --> 00:12:07.740
+which was effectively,
+
+00:12:08.200 --> 00:12:10.960
+chat GPT, seeing that what I had described
+
+00:12:10.960 --> 00:12:14.500
+was clear enough for it to derive most of the
+
+00:12:14.500 --> 00:12:16.560
+code that I would have wanted to write.
+
+00:12:16.560 --> 00:12:19.200
+So maybe, maybe another thing that AI can do
+
+00:12:19.200 --> 00:12:20.880
+is it can increase the value,
+
+00:12:21.340 --> 00:12:23.400
+the efficiency of my free time.
+
+00:12:24.360 --> 00:12:26.820
+Exactly. I think that's a wonderful point.
+
+00:12:27.120 --> 00:12:29.540
+And phrasing it as efficiency of free time is
+
+00:12:29.540 --> 00:12:31.360
+great because you still have the expertise,
+
+00:12:31.360 --> 00:12:33.420
+obviously, that you're mobilizing into the
+
+00:12:33.420 --> 00:12:35.560
+design that you're formulating to charge DPT,
+
+00:12:35.860 --> 00:12:37.680
+but then this expertise is turned into
+
+00:12:37.680 --> 00:12:39.060
+something that actually works.
+
+00:12:40.080 --> 00:12:41.780
+Perhaps we're all going to become software
+
+00:12:41.780 --> 00:12:42.980
+architects at some point,
+
+00:12:42.980 --> 00:12:45.800
+and then the busy work of actually coding the
+
+00:12:45.800 --> 00:12:48.760
+library and the software will be relegated to
+
+00:12:48.760 --> 00:12:51.000
+AI. That's an interesting future where we
+
+00:12:51.000 --> 00:12:55.240
+still, however, need to acquire the skills to
+
+00:12:55.240 --> 00:12:56.660
+know what is code, I suppose.
+
+00:12:56.660 --> 00:12:58.880
+But that's an interesting future to think of.
+
+00:13:00.940 --> 00:13:02.060
+A fairly long question.
+
+00:13:02.060 --> 00:13:04.280
+So 1 of the tricky things about running Emacs
+
+00:13:04.280 --> 00:13:06.900
+on Android is do you use anything that
+
+00:13:06.900 --> 00:13:08.320
+requires extra packages?
+
+00:13:08.420 --> 00:13:11.600
+Example like PDF tools with new PDF or going
+
+00:13:11.600 --> 00:13:13.820
+with a database, playing music or video with
+
+00:13:13.820 --> 00:13:15.840
+MPD or MPV on Bonga, LFeed.
+
+00:13:16.320 --> 00:13:17.900
+Do you run Emacs Termex,
+
+00:13:18.040 --> 00:13:20.200
+Emacs APK, Emacs in virtual machine?
+
+00:13:20.200 --> 00:13:22.420
+This is also the case on Emacs for Windows to
+
+00:13:22.420 --> 00:13:23.980
+a lesser degree. So summarizing,
+
+00:13:24.280 --> 00:13:27.240
+how do you make Emacs work on Android if you
+
+00:13:27.240 --> 00:13:30.040
+do not have the synergy of stuff that you
+
+00:13:30.040 --> 00:13:32.560
+usually find on Linux systems like MPV and
+
+00:13:32.560 --> 00:13:34.420
+all the fancy applications like this?
+
+00:13:35.340 --> 00:13:38.380
+It's a good question. Since I'm not an
+
+00:13:38.380 --> 00:13:40.460
+Android user and I've never tried running
+
+00:13:40.460 --> 00:13:42.020
+Emacs on Android platforms,
+
+00:13:42.100 --> 00:13:44.920
+I'm not sure what's available out there to
+
+00:13:44.920 --> 00:13:46.440
+plug Emacs into. I mean,
+
+00:13:46.440 --> 00:13:48.160
+effectively, that question comes down to
+
+00:13:48.160 --> 00:13:50.420
+external dependencies and system support.
+
+00:13:50.940 --> 00:13:53.320
+That would be a great question for Stefan or
+
+00:13:53.320 --> 00:13:55.740
+somebody who has tried using Emacs,
+
+00:13:56.200 --> 00:13:58.600
+the development version of Emacs on Android.
+
+00:14:00.660 --> 00:14:03.980
+Great. We'll put a pin in this for Stéphane
+
+00:14:04.540 --> 00:14:07.580
+afterwards. Great, so moving on to the next
+
+00:14:07.580 --> 00:14:09.860
+question. Will Org Tech someday become the
+
+00:14:09.860 --> 00:14:11.320
+default tech mode in Emacs?
+
+00:14:11.320 --> 00:14:14.880
+And if so, when? Will Org what become?
+
+00:14:15.240 --> 00:14:17.980
+Org Tech, you know, the LaTeX mode.
+
+00:14:19.120 --> 00:14:24.840
+I do not know. It's been a while since I've
+
+00:14:24.840 --> 00:14:26.880
+done LaTeX. It must have been like 4 years,
+
+00:14:26.880 --> 00:14:30.280
+but it was a pretty, the major mode for
+
+00:14:30.280 --> 00:14:32.560
+editing documents, like the state of the art
+
+00:14:32.560 --> 00:14:34.840
+for editing latex documents in Emacs.
+
+00:14:34.940 --> 00:14:36.320
+And apparently it's not default.
+
+00:14:36.340 --> 00:14:38.360
+I assume there's latex mode or something that
+
+00:14:38.360 --> 00:14:41.580
+is doing it. So were you saying octech,
+
+00:14:41.760 --> 00:14:45.020
+like A-U-C tech? Oh, did I not pronounce the
+
+00:14:45.020 --> 00:14:48.140
+C? Octech, yes. I thought you said org tech.
+
+00:14:48.140 --> 00:14:49.620
+I wasn't familiar with that.
+
+00:14:50.280 --> 00:14:52.540
+Octech is the only 1 I've ever used.
+
+00:14:52.640 --> 00:14:55.360
+I know there is a built-in LaTeX mode,
+
+00:14:55.580 --> 00:14:57.240
+but I've never used it.
+
+00:14:57.240 --> 00:14:59.140
+I always just download whatever the latest
+
+00:14:59.140 --> 00:15:01.160
+version of Org Tech is and use that.
+
+00:15:01.280 --> 00:15:03.840
+I don't know why it's not a standard package.
+
+00:15:03.840 --> 00:15:07.360
+Becoming a standard package has its own costs
+
+00:15:07.360 --> 00:15:09.860
+for the development cycle because it slows
+
+00:15:09.860 --> 00:15:11.740
+down release cycle quite a bit.
+
+00:15:12.120 --> 00:15:14.680
+It's now you have to create PRs that are
+
+00:15:14.680 --> 00:15:17.240
+reviewed by the Emacs Devel mailing list.
+
+00:15:17.620 --> 00:15:19.340
+It is a little more inertia.
+
+00:15:19.340 --> 00:15:21.680
+Of course, it gets you more distribution
+
+00:15:21.940 --> 00:15:24.020
+because it's a default package now,
+
+00:15:24.020 --> 00:15:26.100
+and everybody can be using that.
+
+00:15:26.140 --> 00:15:28.600
+But it's not something every developer
+
+00:15:28.660 --> 00:15:31.400
+decides to do. It took a few years,
+
+00:15:31.400 --> 00:15:34.620
+in fact, to get usePackage into Emacs core.
+
+00:15:34.660 --> 00:15:37.200
+And that only happened after it was so stable
+
+00:15:37.200 --> 00:15:39.360
+that it really wasn't receiving many changes
+
+00:15:39.360 --> 00:15:44.760
+anymore. Yeah, yeah it's it's the thing when
+
+00:15:44.760 --> 00:15:46.720
+you move into core you lose a lot of your
+
+00:15:46.720 --> 00:15:49.280
+agility in terms of how you're writing the
+
+00:15:49.280 --> 00:15:50.940
+code or how you expand code.
+
+00:15:51.300 --> 00:15:54.220
+That's why you have this vibrant community on
+
+00:15:54.220 --> 00:15:57.680
+Melpa compared to core but you know it
+
+00:15:57.740 --> 00:15:59.480
+doesn't necessarily ought to be this way it
+
+00:15:59.480 --> 00:16:02.320
+could be a little different you know And it
+
+00:16:02.320 --> 00:16:04.580
+feels like there's this repetition between
+
+00:16:04.760 --> 00:16:06.820
+repartition, sorry, between people developing
+
+00:16:06.820 --> 00:16:08.600
+for the core of Emacs and people developing
+
+00:16:08.600 --> 00:16:10.760
+on Melpa, but at the end of the day those 2
+
+00:16:10.760 --> 00:16:13.020
+groups are constantly talking to 1 another
+
+00:16:13.180 --> 00:16:15.240
+and taking cues from 1 another as well.
+
+00:16:15.240 --> 00:16:17.540
+So that's great. And there's of course...
+
+00:16:18.820 --> 00:16:21.880
+May I jump in about this particular question
+
+00:16:21.900 --> 00:16:25.080
+because I think I mean You know,
+
+00:16:25.080 --> 00:16:27.540
+Org Mode doesn't really have any problems
+
+00:16:27.540 --> 00:16:29.380
+with releases Correct.
+
+00:16:29.380 --> 00:16:32.820
+Just because it's distributed with Emacs so
+
+00:16:32.860 --> 00:16:35.020
+there is a difference between being in the
+
+00:16:35.020 --> 00:16:37.960
+core proper and being distributed with Emacs.
+
+00:16:38.520 --> 00:16:40.080
+And for something like use packages,
+
+00:16:40.080 --> 00:16:42.280
+it's really necessary to be in the core.
+
+00:16:42.600 --> 00:16:44.840
+But for something like major mode,
+
+00:16:45.060 --> 00:16:48.740
+it's a bit easier. That's a very very good
+
+00:16:48.740 --> 00:16:50.400
+point. Yeah, I'd forgotten about that
+
+00:16:50.400 --> 00:16:53.000
+distinction. Org mode does advance pretty
+
+00:16:53.000 --> 00:16:55.900
+rapidly and then it makes releases into the
+
+00:16:55.900 --> 00:16:59.640
+core distribution. Gianni,
+
+00:16:59.640 --> 00:17:01.480
+I believe you also wanted to say something
+
+00:17:01.480 --> 00:17:03.840
+before someone started jumped in with a
+
+00:17:03.840 --> 00:17:08.700
+question do you happen to remember okay
+
+00:17:08.700 --> 00:17:12.020
+that's fine I lost her to lost to their time
+
+00:17:12.560 --> 00:17:14.560
+I'll be moving on to the next question then
+
+00:17:15.700 --> 00:17:17.460
+and by the way feel free to interrupt us you
+
+00:17:17.460 --> 00:17:19.619
+know The whole point of this discussion is
+
+00:17:19.619 --> 00:17:21.140
+for you to ask questions to John Wheatley.
+
+00:17:21.140 --> 00:17:23.520
+So whether it be via the other pad or via
+
+00:17:23.520 --> 00:17:26.180
+BBB, choose your weapon.
+
+00:17:27.260 --> 00:17:28.820
+All right, moving on to the next question in
+
+00:17:28.820 --> 00:17:30.520
+the meantime. And we have about 7 minutes
+
+00:17:30.520 --> 00:17:32.760
+left of Q&A and then we'll be moving on to
+
+00:17:32.760 --> 00:17:35.780
+Stéphane. So, do you use other IDEs for
+
+00:17:35.780 --> 00:17:38.040
+theorem proving work, notably VS Code for
+
+00:17:38.040 --> 00:17:42.340
+Lean? Which languages and provers can or do
+
+00:17:42.340 --> 00:17:45.920
+you use Emacs for? I've only used Emacs.
+
+00:17:46.120 --> 00:17:49.840
+I've used Emacs for working with ACL 2,
+
+00:17:49.960 --> 00:17:53.480
+Coq, Agda, and Lean, and I really love
+
+00:17:53.480 --> 00:17:55.680
+Proof-General. Coq is my favorite language to
+
+00:17:55.680 --> 00:17:57.740
+be working in. Agda has really great support
+
+00:17:57.740 --> 00:17:59.540
+as well, has a very nice Emacs mode.
+
+00:17:59.540 --> 00:18:02.920
+I'm only just now starting to get into Lean
+
+00:18:02.920 --> 00:18:05.140
+4. So I have everything installed,
+
+00:18:05.280 --> 00:18:07.240
+but I haven't really started coding in
+
+00:18:07.240 --> 00:18:08.800
+earnest. I'm still reading a lot of the
+
+00:18:08.800 --> 00:18:10.920
+tutorials and learning a bit about the
+
+00:18:10.920 --> 00:18:13.440
+language. There was a while there where I
+
+00:18:13.440 --> 00:18:17.540
+used a IDE for ACL 2 that was outside of
+
+00:18:17.540 --> 00:18:19.920
+Emacs, only because it was the same IDE all
+
+00:18:19.920 --> 00:18:22.040
+my co-workers were using and it was easier to
+
+00:18:22.040 --> 00:18:24.240
+share tips and tricks with them.
+
+00:18:24.520 --> 00:18:28.240
+But yeah, no, I found Emacs to be a great
+
+00:18:28.240 --> 00:18:29.860
+home for doing theorem proving.
+
+00:18:32.120 --> 00:18:36.580
+Right. Next question. Can we see that AI
+
+00:18:36.580 --> 00:18:40.760
+generated draft? You know what you mentioned
+
+00:18:40.760 --> 00:18:43.420
+before about the draft that you then fed into
+
+00:18:43.420 --> 00:18:45.480
+ChargPT? Do you happen to have this draft
+
+00:18:45.480 --> 00:18:51.440
+anywhere? Let me see if it's still on GitHub.
+
+00:18:51.760 --> 00:18:54.300
+Just take me 1 second to take a look here.
+
+00:18:55.260 --> 00:18:59.820
+Take your time. The problem is I don't quite
+
+00:18:59.820 --> 00:19:01.820
+remember where I made the note.
+
+00:19:04.700 --> 00:19:07.260
+But no, I don't see it on GitHub,
+
+00:19:07.340 --> 00:19:09.840
+so I don't have it readily at hand.
+
+00:19:10.580 --> 00:19:13.240
+Well, that's fine. We'll be able to...
+
+00:19:13.520 --> 00:19:15.060
+Well, if you happen to find it,
+
+00:19:15.060 --> 00:19:17.280
+we'll make sure to add it on the pad and then
+
+00:19:17.280 --> 00:19:20.940
+on the talks page. And I think we would all
+
+00:19:20.940 --> 00:19:22.440
+be interested to see what this design
+
+00:19:22.440 --> 00:19:27.160
+document that actually made something work
+
+00:19:27.160 --> 00:19:28.980
+afterwards in JudgeDPT with Elisp.
+
+00:19:28.980 --> 00:19:30.720
+I'm very interested to see what it would do
+
+00:19:30.720 --> 00:19:32.720
+because I tend to be very interested about
+
+00:19:32.720 --> 00:19:34.780
+this type of stuff I had generated but I
+
+00:19:34.780 --> 00:19:36.860
+never thought about doing it with Elisp
+
+00:19:37.040 --> 00:19:39.000
+because somehow it feels like 2 different
+
+00:19:39.000 --> 00:19:41.020
+worlds, like Elisp is kind of from the past,
+
+00:19:41.260 --> 00:19:44.040
+don't going me wrong, I love it and I use it
+
+00:19:44.140 --> 00:19:46.920
+every day But it's 2 different parts of my
+
+00:19:46.920 --> 00:19:48.820
+brain that I didn't think about linking.
+
+00:19:48.820 --> 00:19:51.100
+So I'd be very excited to see this as well.
+
+00:19:53.040 --> 00:19:54.640
+Moving on to the next question.
+
+00:19:54.640 --> 00:19:56.980
+Oh, go on, please. I did find it.
+
+00:19:57.260 --> 00:20:01.080
+I'm gonna have to give it to you as a link
+
+00:20:01.080 --> 00:20:03.380
+here. Sure, you can do it on the blue button
+
+00:20:03.380 --> 00:20:05.900
+and I'll put it on the pad.
+
+00:20:10.160 --> 00:20:12.540
+I put it into the public chat for Bibi.
+
+00:20:12.960 --> 00:20:15.920
+Yes. So if anyone is interested,
+
+00:20:15.920 --> 00:20:18.280
+I'm putting it right in the answer to the
+
+00:20:18.280 --> 00:20:20.200
+question right here on my screen.
+
+00:20:20.200 --> 00:20:22.120
+So feel free to click on it and explore it.
+
+00:20:22.120 --> 00:20:23.680
+I'm kind of curious, so I'm gonna...
+
+00:20:23.680 --> 00:20:25.560
+Can I click it on stream and can we look at
+
+00:20:25.560 --> 00:20:26.620
+it a little bit together?
+
+00:20:26.740 --> 00:20:29.020
+Sure, sure. I haven't tried running it,
+
+00:20:29.020 --> 00:20:31.680
+I can't say for its fitness,
+
+00:20:31.680 --> 00:20:34.220
+but it's definitely enough of the groundwork
+
+00:20:34.400 --> 00:20:36.660
+done that it's absolutely an assistance.
+
+00:20:38.100 --> 00:20:40.260
+Right. Okay, so it's loading up right now?
+
+00:20:41.540 --> 00:20:42.620
+You can see my webcam,
+
+00:20:42.620 --> 00:20:45.680
+right? I can see your browser attempting to
+
+00:20:45.680 --> 00:20:47.360
+load. There we go. Okay,
+
+00:20:47.360 --> 00:20:50.060
+cool. So I'm not sure what GitHub is doing.
+
+00:20:50.060 --> 00:20:51.460
+Let me give it a little more room.
+
+00:20:51.460 --> 00:20:54.360
+The reactive setup is not working too well.
+
+00:20:57.260 --> 00:20:58.840
+Oh, I see. You're viewing the...
+
+00:20:59.540 --> 00:21:02.220
+I see. Can I see the file then?
+
+00:21:02.220 --> 00:21:04.020
+I should be able to see the file.
+
+00:21:06.460 --> 00:21:09.060
+I think he just mentions the code in that
+
+00:21:09.060 --> 00:21:11.640
+comment. So if there's a way to view only the
+
+00:21:11.640 --> 00:21:14.897
+comment it would make it clear.
+
+00:21:14.897 --> 00:21:16.660
+Right. Okay. I'm loading the file separately.
+
+00:21:17.320 --> 00:21:18.500
+I'm checking the time.
+
+00:21:18.740 --> 00:21:21.340
+We have about 3 minutes left and I think we
+
+00:21:21.340 --> 00:21:22.900
+have a question. In the meantime,
+
+00:21:22.900 --> 00:21:25.760
+whilst I show this, I'm gonna launch another
+
+00:21:25.760 --> 00:21:28.820
+question, which was about Drafts.
+
+00:21:29.440 --> 00:21:30.740
+You are carrying, you're talking about
+
+00:21:30.740 --> 00:21:32.480
+Drafts, but does that mean you're not using
+
+00:21:32.480 --> 00:21:35.920
+org anymore? Oh, no, I use org all the time.
+
+00:21:35.920 --> 00:21:38.100
+In fact, the way that I've configured drafts
+
+00:21:38.160 --> 00:21:40.580
+is that after I type the thing in the note
+
+00:21:40.580 --> 00:21:43.260
+into drafts, I hit a key and it creates an
+
+00:21:43.260 --> 00:21:45.420
+org mode capture item for it.
+
+00:21:45.540 --> 00:21:48.560
+The reason why I use Drafts instead of Emacs
+
+00:21:48.560 --> 00:21:50.660
+is because it's always available.
+
+00:21:51.100 --> 00:21:53.960
+If Emacs is currently doing some job for me,
+
+00:21:53.960 --> 00:21:56.340
+say I'm running some long-running subshell
+
+00:21:57.060 --> 00:21:59.440
+and the UI is frozen up whatnot,
+
+00:21:59.700 --> 00:22:02.360
+Drafts is always 100% of the time instantly
+
+00:22:02.360 --> 00:22:04.900
+available. So that's why I tend to then lean
+
+00:22:04.900 --> 00:22:07.920
+on it a bit, but all of the destination of
+
+00:22:07.920 --> 00:22:10.240
+that data is still Org Mode and everything
+
+00:22:10.240 --> 00:22:12.460
+that I do gets tracked through Org Mode.
+
+00:22:13.080 --> 00:22:16.160
+That's also why I wanted to implement the UI
+
+00:22:16.160 --> 00:22:18.800
+scheme of drafts in Emacs so that I could
+
+00:22:18.800 --> 00:22:20.860
+drop the use of this external application.
+
+00:22:21.540 --> 00:22:23.160
+And then, I mean, I would still have the
+
+00:22:23.160 --> 00:22:25.580
+problem of sometimes Emacs being unavailable,
+
+00:22:26.060 --> 00:22:30.040
+but I would pay that price in order to have
+
+00:22:30.040 --> 00:22:32.700
+that good UI of drafts inside Emacs.
+
+00:22:34.640 --> 00:22:37.700
+Great. I think we have,
+
+00:22:38.420 --> 00:22:39.720
+we might be too tight on time.
+
+00:22:39.720 --> 00:22:41.640
+We only have about 2 minutes and I need to
+
+00:22:41.640 --> 00:22:44.180
+jump room to go into Stephane's room as well.
+
+00:22:44.440 --> 00:22:47.380
+So John, where I get to thank you so much for
+
+00:22:47.380 --> 00:22:53.160
+taking the time to answer our questions,
+
+00:22:53.260 --> 00:22:55.040
+but also doing a little bit of reporting on
+
+00:22:55.040 --> 00:22:58.380
+the state of Emacs. And now we'll get to
+
+00:22:58.380 --> 00:22:59.280
+continue this with Stéphane.
+
+00:22:59.280 --> 00:23:01.300
+So do you have any last words for everyone,
+
+00:23:01.300 --> 00:23:03.660
+John? No, no. I look forward to hearing
+
+00:23:03.660 --> 00:23:06.420
+Stéphane speak. Okay, great.
+
+00:23:06.420 --> 00:23:07.360
+And we'll look forward,
+
+00:23:07.360 --> 00:23:09.300
+potentially, to having you again next year,
+
+00:23:10.520 --> 00:23:12.680
+potentially still doing news like this,
+
+00:23:12.980 --> 00:23:15.920
+and, fingers crossed, maybe having you live
+
+00:23:15.920 --> 00:23:18.660
+again. Maybe, maybe let's see what happens.
+
+00:23:19.700 --> 00:23:20.860
+All right, John. Thank you so much.
+
+00:23:20.860 --> 00:23:22.280
+Bye bye. Bye bye.
diff --git a/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt
new file mode 100644
index 00000000..28d655f0
--- /dev/null
+++ b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt
@@ -0,0 +1,593 @@
+WEBVTT
+
+
+00:00:03.639 --> 00:00:04.019
+[Speaker 0]: Well, we have about, I think,
+
+00:00:06.339 --> 00:00:06.839
+10 or 15 minutes of on-stream Q&A time.
+
+00:00:10.320 --> 00:00:10.559
+But if there's more questions than that,
+
+00:00:11.420 --> 00:00:11.920
+people are welcome to stay.
+
+00:00:14.200 --> 00:00:14.639
+If Mike has the time to answer some more,
+
+00:00:15.060 --> 00:00:15.560
+then Awesome.
+
+00:00:20.920 --> 00:00:21.060
+[Speaker 1]: Yeah, I will be around for the rest of the
+
+00:00:22.440 --> 00:00:22.940
+conference. So I am spudpnds,
+
+00:00:26.580 --> 00:00:27.080
+which is spud upside down on IRC,
+
+00:00:29.640 --> 00:00:30.140
+if you want to hit me up on IRC.
+
+00:00:30.860 --> 00:00:31.360
+Nice.
+
+00:00:42.800 --> 00:00:43.300
+[Speaker 0]: I see we already have a question on the pad,
+
+00:00:45.920 --> 00:00:46.080
+and it is, did you develop a variant of your
+
+00:00:46.920 --> 00:00:47.420
+document for CentOS?
+
+00:00:52.840 --> 00:00:53.239
+[Speaker 1]: I did not. I have not messed with any other
+
+00:00:56.120 --> 00:00:56.620
+Red Hat distributions other than Fedora.
+
+00:00:59.960 --> 00:01:00.460
+I would like to expand the document out to
+
+00:01:05.740 --> 00:01:05.860
+Windows and to Mac OS as I think a lot of
+
+00:01:07.720 --> 00:01:07.960
+people really want to build Emacs on those
+
+00:01:09.840 --> 00:01:10.340
+platforms because it's much harder to get
+
+00:01:13.080 --> 00:01:13.580
+Emacs binaries running on those platforms.
+
+00:01:15.860 --> 00:01:16.080
+Although they're around on the internet it's
+
+00:01:17.320 --> 00:01:17.440
+not as bad as it used to be,
+
+00:01:19.280 --> 00:01:19.760
+but building Emacs is very,
+
+00:01:21.000 --> 00:01:21.160
+a very fun thing to do.
+
+00:01:22.760 --> 00:01:23.260
+And I encourage everybody to do that.
+
+00:01:46.160 --> 00:01:46.440
+[Speaker 0]: Right. We're also getting comments from folks
+
+00:01:46.800 --> 00:01:47.300
+here on BigBlueButton.
+
+00:01:49.640 --> 00:01:49.900
+EXC or Matt saying, great talk,
+
+00:01:51.140 --> 00:01:51.640
+good demonstration of what's possible.
+
+00:01:53.940 --> 00:01:54.240
+And Aaron thanking Mike,
+
+00:01:54.760 --> 00:01:55.260
+saying awesome presentation.
+
+00:01:56.880 --> 00:01:57.040
+And they missed the first few minutes and
+
+00:01:59.540 --> 00:01:59.720
+have to rewatch to get the portion that they
+
+00:01:59.720 --> 00:02:00.220
+missed.
+
+00:02:03.400 --> 00:02:03.700
+[Speaker 1]: I had a hard time cramming the entire talk
+
+00:02:08.220 --> 00:02:08.720
+into 40 minutes. So I spoke quickly.
+
+00:02:10.639 --> 00:02:10.919
+I have a feeling I may have left some folks
+
+00:02:12.540 --> 00:02:13.040
+behind who weren't paying close attention.
+
+00:02:16.020 --> 00:02:16.520
+So rewatching might help.
+
+00:02:18.920 --> 00:02:19.420
+[Speaker 0]: Oh, nice.
+
+00:02:24.920 --> 00:02:25.340
+[Speaker 1]: I noticed Matt said that he helps maintain
+
+00:02:27.440 --> 00:02:27.700
+the shell functionality or Babel and last
+
+00:02:30.240 --> 00:02:30.580
+March they added async evaluation into
+
+00:02:32.920 --> 00:02:33.340
+session code blocks. Very cool,
+
+00:02:34.680 --> 00:02:34.840
+especially when you're doing something that
+
+00:02:36.420 --> 00:02:36.820
+takes a long time. It would be nice if Emacs
+
+00:02:38.920 --> 00:02:39.060
+wasn't locked up. I will definitely have to
+
+00:02:50.220 --> 00:02:50.460
+check that out. I use this technique at work
+
+00:02:53.220 --> 00:02:53.360
+a lot, like when I write documents to how to
+
+00:02:55.900 --> 00:02:56.400
+explain things to coworkers and such.
+
+00:03:00.060 --> 00:03:00.300
+And 1 of the things I had to explain was how
+
+00:03:05.220 --> 00:03:05.720
+to build AWS MySQL databases and replicas,
+
+00:03:07.760 --> 00:03:08.260
+and how to build them with very specific
+
+00:03:09.960 --> 00:03:10.240
+parameters to work with the system called
+
+00:03:13.060 --> 00:03:13.320
+Vitesse. And when I was running that
+
+00:03:15.660 --> 00:03:16.160
+document, building these kinds of MySQL
+
+00:03:20.280 --> 00:03:20.640
+databases in AWS with lockup Emacs for 20,
+
+00:03:22.300 --> 00:03:22.800
+25 minutes at a time. So,
+
+00:03:26.060 --> 00:03:26.540
+yeah, I'm really excited about async
+
+00:03:26.540 --> 00:03:27.040
+evaluation.
+
+00:04:03.780 --> 00:04:04.020
+Totally. Oh yeah, Python mode I think has had
+
+00:04:05.600 --> 00:04:06.100
+async for shell blocks for a while.
+
+00:04:09.220 --> 00:04:09.720
+I think there's a third-party package at Elba
+
+00:04:11.260 --> 00:04:11.760
+that adds async support for that.
+
+00:04:16.360 --> 00:04:16.620
+But yeah, I explicitly wanted to make sure
+
+00:04:18.620 --> 00:04:18.959
+that it would work with super vanilla stuff.
+
+00:04:20.060 --> 00:04:20.560
+Oh, it's built in. I see.
+
+00:04:24.140 --> 00:04:24.280
+Yeah, I didn't realize it was built in for
+
+00:04:25.920 --> 00:04:26.420
+Python blocks. I'll have to check that out.
+
+00:04:27.800 --> 00:04:28.300
+There's so much Emacs.
+
+00:04:32.080 --> 00:04:32.240
+It's hard to wrap your head even around a
+
+00:04:34.900 --> 00:04:35.400
+tiny portion of it. It's such a deep topic.
+
+00:04:47.660 --> 00:04:48.160
+Looks like somebody in IRC said,
+
+00:04:50.220 --> 00:04:50.440
+I can't wait to add some of this stuff to my
+
+00:04:52.680 --> 00:04:53.180
+documents. And that really makes me happy.
+
+00:04:55.400 --> 00:04:55.640
+I hope people go out and write literate Org
+
+00:04:57.180 --> 00:04:57.680
+Mode documents that do amazing things.
+
+00:05:25.640 --> 00:05:26.040
+When's the next talk? We have like,
+
+00:05:30.900 --> 00:05:31.080
+[Speaker 0]: let's see. I think we have about 4 or 5
+
+00:05:32.960 --> 00:05:33.460
+minutes live on stream for Q&A.
+
+00:05:35.860 --> 00:05:36.360
+[Speaker 1]: Yeah, okay. Oh, here's the question.
+
+00:05:39.160 --> 00:05:39.320
+Blaine asks, are you running Emacs from the
+
+00:05:41.420 --> 00:05:41.760
+host machine? And yeah,
+
+00:05:43.940 --> 00:05:44.180
+so I'm running Emacs on the exact same
+
+00:05:46.560 --> 00:05:47.060
+machine that I'm building Emacs on.
+
+00:05:50.580 --> 00:05:50.900
+And I had first thought about doing that over
+
+00:05:53.440 --> 00:05:53.720
+Tramp. And I thought that would be a very
+
+00:05:55.360 --> 00:05:55.560
+cool demo to show how you could do that
+
+00:05:57.980 --> 00:05:58.180
+remotely on Tramp so you didn't need Emacs on
+
+00:06:03.160 --> 00:06:03.280
+the host machine. But I decided it would be a
+
+00:06:05.640 --> 00:06:05.780
+lot easier, and as I ran into a deadline to
+
+00:06:06.360 --> 00:06:06.860
+get the talk completed,
+
+00:06:08.900 --> 00:06:09.140
+I abandoned that notion for the
+
+00:06:09.880 --> 00:06:10.380
+straightforward approach.
+
+00:06:13.260 --> 00:06:13.760
+But ideally, I would spin up virtual machines
+
+00:06:16.980 --> 00:06:17.140
+and then using the Org Mode document and
+
+00:06:18.960 --> 00:06:19.440
+having Org Mode reach out to those machines
+
+00:06:20.440 --> 00:06:20.940
+via SSH and Tramp.
+
+00:06:33.400 --> 00:06:33.540
+Oh yeah, there's also a little bit of
+
+00:06:38.200 --> 00:06:38.440
+discussion on IRC about org macros and how
+
+00:06:39.720 --> 00:06:40.160
+they made their way into the document.
+
+00:06:42.540 --> 00:06:42.900
+And I remember when I first discovered org
+
+00:06:44.480 --> 00:06:44.980
+macros by reading the org mode documentation,
+
+00:06:47.360 --> 00:06:47.500
+I was really excited because I thought I
+
+00:06:49.860 --> 00:06:50.040
+could limit a lot of the boilerplate I end up
+
+00:06:51.900 --> 00:06:52.360
+typing. But as we discussed,
+
+00:06:54.760 --> 00:06:55.260
+ORD macros, I think, only work in 1 context
+
+00:06:56.380 --> 00:06:56.780
+in your ORD mode document,
+
+00:06:58.280 --> 00:06:58.780
+and I think that's in the pros section.
+
+00:07:03.740 --> 00:07:04.080
+So You can't resolve a macro inside a header
+
+00:07:06.600 --> 00:07:07.100
+arg, for example, or inside an options block.
+
+00:07:09.560 --> 00:07:09.960
+It would be awesome if macros worked
+
+00:07:12.280 --> 00:07:12.780
+everywhere, but I'm happy to have them just
+
+00:07:13.500 --> 00:07:14.000
+as they are now.
+
+00:07:22.960 --> 00:07:23.460
+[Speaker 0]: Indeed, they're very convenient.
+
+00:07:32.020 --> 00:07:32.260
+[Speaker 1]: And Blaine also says, thank you for showing
+
+00:07:33.420 --> 00:07:33.920
+what's possible with literate documentation.
+
+00:07:35.380 --> 00:07:35.660
+This is mind-blowing. Yeah,
+
+00:07:39.400 --> 00:07:39.640
+I think so too. I first saw this technique in
+
+00:07:41.020 --> 00:07:41.520
+Howard's video, Literate DevOps,
+
+00:07:44.720 --> 00:07:44.900
+and I remember I was just picking up parts of
+
+00:07:46.720 --> 00:07:47.040
+my mind after it exploded after having
+
+00:07:49.740 --> 00:07:49.860
+watched that video. So I wanted to do some of
+
+00:07:51.820 --> 00:07:52.040
+it myself, and that's where I came up with a
+
+00:07:54.020 --> 00:07:54.520
+couple different approaches to that.
+
+00:07:57.600 --> 00:07:57.800
+It's not just for, you know,
+
+00:07:59.060 --> 00:07:59.560
+making literate Emacs configurations.
+
+00:08:04.680 --> 00:08:04.920
+[Speaker 0]: For Sure. We have another remark slash
+
+00:08:07.260 --> 00:08:07.580
+question on the pad. Someone saying great
+
+00:08:09.800 --> 00:08:10.300
+presentation. The preparation is outstanding.
+
+00:08:12.520 --> 00:08:13.020
+And for someone like me that never touched
+
+00:08:14.040 --> 00:08:14.540
+the org-mux side of Emacs,
+
+00:08:17.040 --> 00:08:17.200
+What do you feel is the more complex part to
+
+00:08:19.120 --> 00:08:19.540
+tackle? You made it seem simple,
+
+00:08:20.500 --> 00:08:21.000
+but the complexity there.
+
+00:08:25.840 --> 00:08:26.340
+[Speaker 1]: Yeah. Just getting all of the configuration
+
+00:08:30.800 --> 00:08:31.300
+set up the way you want it is the hardest
+
+00:08:34.780 --> 00:08:35.280
+part. So some of the defaults are,
+
+00:08:37.120 --> 00:08:37.280
+you know, they don't look good when you
+
+00:08:39.320 --> 00:08:39.820
+render them out in LaTeX and finally PDF.
+
+00:08:42.039 --> 00:08:42.380
+And there's a lot of work to be done to tweak
+
+00:08:45.380 --> 00:08:45.780
+the LaTeX environment so it looks as pretty
+
+00:08:48.620 --> 00:08:48.940
+as you might want it. And then just Org Mode
+
+00:08:50.800 --> 00:08:51.300
+has a lot of knobs that you can tune,
+
+00:08:53.720 --> 00:08:54.020
+and they have a pretty large impact on how
+
+00:08:55.520 --> 00:08:56.020
+your document is exported.
+
+00:09:00.360 --> 00:09:00.680
+So I think the hardest part is just knowing
+
+00:09:03.820 --> 00:09:03.960
+what's possible and knowing where all the
+
+00:09:05.200 --> 00:09:05.700
+knobs are to tune and twist.
+
+00:09:10.240 --> 00:09:10.440
+[Speaker 0]: Got another question on the pad.
+
+00:09:12.040 --> 00:09:12.180
+And I think we have about a minute or so on
+
+00:09:13.740 --> 00:09:13.920
+the stream. So I'll read this question as
+
+00:09:15.160 --> 00:09:15.660
+well. But folks, you're welcome to continue
+
+00:09:17.560 --> 00:09:18.040
+on the pad or just come join here on BBB
+
+00:09:20.200 --> 00:09:20.320
+after myself and the stream move on to the
+
+00:09:23.100 --> 00:09:23.480
+next talk. Yeah, and the next question is,
+
+00:09:24.320 --> 00:09:24.720
+how do you normally debug,
+
+00:09:26.640 --> 00:09:27.100
+for example, view the logs or see failed
+
+00:09:29.440 --> 00:09:29.720
+statuses when the commands in the source
+
+00:09:32.020 --> 00:09:32.280
+blocks fail, especially if they output lots
+
+00:09:34.640 --> 00:09:34.780
+and lots of logs, and you need to see the
+
+00:09:35.640 --> 00:09:36.140
+full history of the build.
+
+00:09:39.520 --> 00:09:40.020
+[Speaker 1]: Yeah, so I see it in the messages buffer
+
+00:09:42.080 --> 00:09:42.580
+whenever I export a document.
+
+00:09:44.540 --> 00:09:44.700
+If there's a failure, that's typically where
+
+00:09:47.460 --> 00:09:47.640
+it's written to. And I will actually kill the
+
+00:09:49.960 --> 00:09:50.440
+messages buffer before I export so I know
+
+00:09:52.840 --> 00:09:53.200
+that only the messages in the buffer are for
+
+00:09:55.800 --> 00:09:55.960
+my given export and I mentioned that
+
+00:09:58.580 --> 00:09:58.780
+debugging trick where you name all of your
+
+00:10:00.720 --> 00:10:00.960
+org-mode source blocks So if there is a
+
+00:10:02.320 --> 00:10:02.820
+problem in 1 of the blocks,
+
+00:10:06.560 --> 00:10:07.060
+it'll actually tell you what the block,
+
+00:10:09.140 --> 00:10:09.640
+the name of the block the error occurred in.
+
+00:10:13.160 --> 00:10:13.360
+If you don't do that, it just gives you a
+
+00:10:14.800 --> 00:10:15.300
+position number in the buffer.
+
+00:10:18.620 --> 00:10:18.820
+And whenever I tried to convert those
+
+00:10:21.400 --> 00:10:21.540
+position numbers to actual places where the
+
+00:10:23.600 --> 00:10:23.760
+error occurred, it was never exactly where I
+
+00:10:24.640 --> 00:10:25.020
+suspected it would be.
+
+00:10:26.680 --> 00:10:27.180
+So I found that very difficult in debugging.
+
+00:10:29.800 --> 00:10:30.040
+So the only real debugging tip I have is name
+
+00:10:32.840 --> 00:10:33.120
+your source blocks, even if you don't refer
+
+00:10:33.480 --> 00:10:33.980
+to them later.
+
+00:10:39.860 --> 00:10:40.020
+[Speaker 0]: I think that's all the time we have on
+
+00:10:41.320 --> 00:10:41.520
+stream. And I also have to drop as well.
+
+00:10:42.540 --> 00:10:42.880
+But thanks again so much,
+
+00:10:46.160 --> 00:10:46.660
+Mike. And folks are welcome to come here and
+
+00:10:47.980 --> 00:10:48.480
+continue discussion here.
+
+00:10:52.600 --> 00:10:53.100
+Thanks again.
+
+00:21:45.060 --> 00:21:45.560
+[Speaker 1]: You
+
+00:22:00.060 --> 00:22:00.560
+Thank
+
+00:22:15.060 --> 00:22:15.560
+[Speaker 0]: you
+
+00:22:28.400 --> 00:22:28.900
+[Speaker 1]: for
+
+00:22:45.060 --> 00:22:45.560
+watching. You
+
+00:23:00.260 --> 00:23:00.760
+you
diff --git a/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt
new file mode 100644
index 00000000..33f318c5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt
@@ -0,0 +1,71 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:57.760
+Introduction
+
+00:00:57.760 --> 00:02:14.080
+Org Babel and literate programming
+
+00:02:14.080 --> 00:04:53.479
+This presentation
+
+00:04:53.480 --> 00:06:55.779
+Getting started
+
+00:06:55.780 --> 00:07:23.499
+README
+
+00:07:23.500 --> 00:08:10.459
+Writing a code block
+
+00:08:10.460 --> 00:08:40.319
+:results none
+
+00:08:40.320 --> 00:10:36.959
+Confirmation
+
+00:10:36.960 --> 00:13:52.600
+Running blocks automatically
+
+00:13:53.000 --> 00:16:05.699
+Export options
+
+00:16:05.700 --> 00:17:25.739
+Substituting constants
+
+00:17:25.740 --> 00:20:02.960
+Getting the properties
+
+00:20:03.060 --> 00:21:05.239
+Macros
+
+00:21:05.240 --> 00:22:09.019
+Properties in practice
+
+00:22:09.020 --> 00:23:42.009
+Using a prefix
+
+00:23:42.010 --> 00:27:14.149
+Switching distributions
+
+00:27:14.150 --> 00:30:16.199
+A tour
+
+00:30:16.200 --> 00:31:09.249
+TeX and LaTeX
+
+00:31:09.250 --> 00:32:00.059
+Other prerequisites
+
+00:32:00.060 --> 00:36:20.609
+Caching
+
+00:36:20.610 --> 00:39:29.439
+Looking at the PDF
+
+00:39:29.440 --> 00:42:31.989
+Errors
+
+00:42:31.990 --> 00:42:45.200
+Final thoughts
diff --git a/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt
new file mode 100644
index 00000000..71fa30f7
--- /dev/null
+++ b/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt
@@ -0,0 +1,2759 @@
+WEBVTT captioned by jc, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.320
+Hello, everyone.
+
+00:00:04.320 --> 00:00:07.280
+This talk is on literate documentation
+
+00:00:07.280 --> 00:00:10.320
+with Emacs and org-mode.
+
+00:00:10.320 --> 00:00:12.080
+I'm going to take just a moment here
+
+00:00:12.080 --> 00:00:14.279
+to unpack what I just said.
+
+00:00:14.280 --> 00:00:17.800
+Emacs, as most of us probably already know,
+
+00:00:17.800 --> 00:00:21.360
+is a powerful text editor and list programming environment
+
+00:00:21.360 --> 00:00:23.480
+from the 1970s.
+
+00:00:23.480 --> 00:00:25.800
+Chances are, if you're attending this talk,
+
+00:00:25.800 --> 00:00:28.819
+you already know a bit about Emacs.
+
+00:00:28.820 --> 00:00:32.640
+org-mode is an Emacs major mode and authoring tool
+
+00:00:32.640 --> 00:00:36.360
+that helps you write documents in a plain text markup
+
+00:00:36.360 --> 00:00:37.739
+language called Org.
+
+00:00:37.740 --> 00:00:40.200
+These Org documents can be exported
+
+00:00:40.200 --> 00:00:42.520
+to a number of different document formats,
+
+00:00:42.520 --> 00:00:48.520
+like HTML, PDF, ODT, Markdown, and more.
+
+00:00:48.520 --> 00:00:51.160
+org-mode has a lot of features.
+
+00:00:51.160 --> 00:00:54.240
+It can be an outliner, a to-do list manager,
+
+00:00:54.240 --> 00:00:57.760
+an agenda, organizer, and much more.
+
+NOTE Org Babel and literate programming
+
+00:00:57.760 --> 00:00:59.600
+Today, we're going to be demonstrating
+
+00:00:59.600 --> 00:01:03.360
+what I consider to be org-mode's killer feature called
+
+00:01:03.360 --> 00:01:04.840
+Org Babel.
+
+00:01:04.840 --> 00:01:07.879
+Babel allows you to take human language prose,
+
+00:01:07.880 --> 00:01:11.400
+computer language source code blocks, and their outputs
+
+00:01:11.400 --> 00:01:13.840
+and weave them together seamlessly
+
+00:01:13.840 --> 00:01:16.160
+to form a cohesive document.
+
+00:01:16.160 --> 00:01:19.080
+It is seriously cool.
+
+00:01:19.080 --> 00:01:21.880
+Literate documentation is a play on the term
+
+00:01:21.880 --> 00:01:25.280
+literate programming, popularized by Donald Knuth
+
+00:01:25.280 --> 00:01:27.379
+in the early 1980s.
+
+00:01:27.380 --> 00:01:29.280
+Knuth's literate programming idea
+
+00:01:29.280 --> 00:01:31.920
+was that computer programs could be
+
+00:01:31.920 --> 00:01:34.880
+expressed in a natural language and be
+
+00:01:34.880 --> 00:01:38.800
+human-readable documents rather than written exclusively
+
+00:01:38.800 --> 00:01:40.799
+for machines to read.
+
+00:01:40.800 --> 00:01:43.000
+In a traditional program, you might
+
+00:01:43.000 --> 00:01:45.680
+have a bunch of machine-readable source code
+
+00:01:45.680 --> 00:01:48.560
+and a handful of human-readable comments,
+
+00:01:48.560 --> 00:01:51.600
+which attempt to describe what the program is doing.
+
+00:01:51.600 --> 00:01:54.360
+Literate programming flips this on its head.
+
+00:01:54.360 --> 00:01:56.680
+A literate program is a document that
+
+00:01:56.680 --> 00:02:01.160
+describes how the program works with machine-readable source
+
+00:02:01.160 --> 00:02:02.880
+code blocks inside of it.
+
+00:02:02.880 --> 00:02:04.800
+These source code blocks are later
+
+00:02:04.800 --> 00:02:08.440
+tangled out of the document and submitted to the machine
+
+00:02:08.440 --> 00:02:14.080
+either to be compiled or interpreted and ultimately run.
+
+NOTE This presentation
+
+00:02:14.080 --> 00:02:15.600
+Throughout this presentation, you'll
+
+00:02:15.600 --> 00:02:19.400
+see my browser window here on the left side of the screen.
+
+00:02:19.400 --> 00:02:22.240
+And on the right side, I've got a terminal session
+
+00:02:22.240 --> 00:02:23.960
+running tmux.
+
+00:02:23.960 --> 00:02:28.039
+This allows us to have a virtual terminal window connected
+
+00:02:28.040 --> 00:02:35.040
+to two separate Linux machines, one running Ubuntu Server 2204
+
+00:02:35.040 --> 00:02:39.720
+and another running Fedora Server 38.
+
+00:02:39.720 --> 00:02:43.240
+I've specifically chosen these two distributions for my demo
+
+00:02:43.440 --> 00:02:46.720
+because they are representative of the two dominant flavors
+
+00:02:46.720 --> 00:02:49.880
+of GNU Linux, Debian and RedHat.
+
+00:02:49.880 --> 00:02:53.120
+In both cases, these are bare-bones server additions
+
+00:02:53.120 --> 00:02:55.440
+with the stock packages installed.
+
+00:02:55.440 --> 00:03:00.200
+I've manually installed a few packages like Git, emacs-noex
+
+00:03:00.200 --> 00:03:04.000
+to get the terminal version of emacs, and tmux.
+
+00:03:04.000 --> 00:03:06.000
+But otherwise, these Linux installs
+
+00:03:06.000 --> 00:03:08.719
+are what you'd get right out of the box.
+
+00:03:08.720 --> 00:03:12.480
+For this demo, I've created a literate org-mode document
+
+00:03:12.480 --> 00:03:16.360
+that describes how to build GNU Emacs from its source code
+
+00:03:16.360 --> 00:03:19.939
+on both Debian and RedHat-based systems.
+
+00:03:19.940 --> 00:03:22.920
+While both operating systems are very similar,
+
+00:03:22.920 --> 00:03:25.440
+they differ substantially on which packages
+
+00:03:25.440 --> 00:03:29.080
+are installed out of the box, how optional packages are
+
+00:03:29.080 --> 00:03:32.600
+named, searched, and installed, and of course,
+
+00:03:32.600 --> 00:03:34.240
+the distributions have different names,
+
+00:03:34.240 --> 00:03:36.800
+like Ubuntu or Fedora.
+
+00:03:36.800 --> 00:03:39.200
+I chose building Emacs from source
+
+00:03:39.200 --> 00:03:41.640
+as a topic for this demonstration
+
+00:03:41.640 --> 00:03:43.800
+because while the process is largely
+
+00:03:43.800 --> 00:03:46.880
+the same on both RedHat and Debian,
+
+00:03:46.880 --> 00:03:49.360
+there are a lot of minor little differences
+
+00:03:49.360 --> 00:03:52.680
+that need to be accounted for, which really prohibits you
+
+00:03:52.680 --> 00:03:57.120
+from hard coding names of packages and package management
+
+00:03:57.120 --> 00:04:01.200
+tools and distributions into your document.
+
+00:04:01.200 --> 00:04:05.320
+I suppose you could create two versions of the same document,
+
+00:04:05.320 --> 00:04:09.960
+one specifically for RedHat and one specifically for Debian,
+
+00:04:09.960 --> 00:04:13.280
+but that would be really tedious to maintain.
+
+00:04:13.280 --> 00:04:16.280
+Like if, for example, you updated some prose
+
+00:04:16.280 --> 00:04:18.720
+in one document, you'd have to remember
+
+00:04:18.720 --> 00:04:20.280
+to do it in the other one too.
+
+00:04:20.280 --> 00:04:22.920
+And if you weren't careful, the two documents
+
+00:04:22.920 --> 00:04:25.259
+could drift out of sync.
+
+00:04:25.260 --> 00:04:27.720
+In this demo, I'll show you techniques
+
+00:04:27.720 --> 00:04:30.960
+for creating dynamic, literate documents that
+
+00:04:30.960 --> 00:04:34.619
+can change based on parameters and constants embedded
+
+00:04:34.620 --> 00:04:38.439
+into the non-exported regions of the document.
+
+00:04:38.440 --> 00:04:41.800
+I'll show how with a single org-mode source document,
+
+00:04:41.800 --> 00:04:44.800
+you can press a couple of keys to configure
+
+00:04:44.800 --> 00:04:48.720
+it to export a RedHat-specific version of my building
+
+00:04:48.720 --> 00:04:53.479
+Emacs from source essay or a Debian-specific version.
+
+NOTE Getting started
+
+00:04:53.480 --> 00:04:55.320
+All right, let's get started.
+
+00:04:55.320 --> 00:04:58.720
+We'll begin by firing up a new terminal Emacs session
+
+00:04:58.720 --> 00:05:00.639
+on my Ubuntu machine.
+
+00:05:00.640 --> 00:05:04.600
+Now, I installed Emacs on this machine using apt-get.
+
+00:05:04.600 --> 00:05:07.960
+And doing that, you get version 27.1,
+
+00:05:07.960 --> 00:05:10.640
+which is, hey, only two major versions
+
+00:05:10.640 --> 00:05:13.010
+behind the current version of Emacs.
+
+00:05:13.011 --> 00:05:15.000
+This is another reason why I thought
+
+00:05:15.000 --> 00:05:18.080
+writing a guide on how to build Emacs from source code
+
+00:05:18.080 --> 00:05:19.719
+might be a good idea.
+
+00:05:19.720 --> 00:05:22.720
+You can get a much newer version of Emacs on Ubuntu
+
+00:05:22.720 --> 00:05:25.800
+if you install it via Snap, but, uh, Snaps.
+
+00:05:25.800 --> 00:05:28.239
+Don't get me started.
+
+00:05:28.240 --> 00:05:30.921
+Now, I wanted to use a completely vanilla
+
+00:05:30.922 --> 00:05:34.619
+terminal mode install of Emacs for this demonstration
+
+00:05:34.620 --> 00:05:38.040
+because my personal Emacs config has a ton of packages
+
+00:05:38.040 --> 00:05:41.199
+installed and is heavily modified.
+
+00:05:41.200 --> 00:05:43.640
+I want folks to be able to follow along
+
+00:05:43.640 --> 00:05:47.579
+with a bog-standard, out-of-the-box Emacs config.
+
+00:05:47.580 --> 00:05:49.520
+The Emacs config on this Ubuntu machine
+
+00:05:49.520 --> 00:05:51.200
+has just two settings.
+
+00:05:51.200 --> 00:05:55.240
+I require org-tempo because my fingers are hardwired
+
+00:05:55.240 --> 00:05:58.719
+to use some of the handy shortcuts that it provides.
+
+00:05:58.720 --> 00:06:00.520
+And I also turn off the menu bar
+
+00:06:00.520 --> 00:06:03.139
+because I just can't stand to look at it.
+
+00:06:03.140 --> 00:06:07.040
+Let's begin by opening a file called buildemacs.org,
+
+00:06:07.040 --> 00:06:08.480
+which will be the source code
+
+00:06:08.480 --> 00:06:11.079
+for our literate org-mode document.
+
+00:06:11.080 --> 00:06:12.840
+Now, in preparation for this talk,
+
+00:06:12.840 --> 00:06:14.960
+I've already written this document,
+
+00:06:14.960 --> 00:06:17.979
+and we'll take a look at the finished product
+
+00:06:17.980 --> 00:06:19.160
+here in a bit, but let's first take a look
+
+00:06:19.160 --> 00:06:22.408
+at how we might approach this task.
+
+00:06:22.409 --> 00:06:24.400
+We'll start at the top of the document
+
+00:06:24.400 --> 00:06:27.119
+by filling out some export keywords.
+
+00:06:27.120 --> 00:06:30.520
+These keywords are something that every backend exporter,
+
+00:06:30.520 --> 00:06:35.000
+be it LaTeX or plain text or ODT or whatever, understands,
+
+00:06:35.000 --> 00:06:38.120
+and they're essentially document metadata.
+
+00:06:38.120 --> 00:06:42.120
+As you can see, I'm typing `#+`
+
+00:06:42.120 --> 00:06:43.760
+followed by a couple characters
+
+00:06:43.760 --> 00:06:45.880
+and then `M-TAB` to auto-complete.
+
+00:06:45.880 --> 00:06:50.360
+If you hit #+ by itself and then M-TAB,
+
+00:06:50.360 --> 00:06:53.119
+you can see all the possible completions.
+
+00:06:53.120 --> 00:06:55.779
+And as you can see, there's a lot.
+
+NOTE README
+
+00:06:55.780 --> 00:06:58.520
+The next thing we're gonna do is make a README section
+
+00:06:58.520 --> 00:06:59.760
+at the top of this document.
+
+00:06:59.760 --> 00:07:02.240
+This section is intended for folks
+
+00:07:02.240 --> 00:07:04.280
+who are looking at the org-mode document,
+
+00:07:04.280 --> 00:07:06.679
+trying to figure out what it's for.
+
+00:07:06.680 --> 00:07:09.600
+We don't want to actually export the section heading,
+
+00:07:09.600 --> 00:07:13.859
+so we're gonna tag it with the :noexport: tag.
+
+00:07:13.860 --> 00:07:15.640
+And then here, we just write something quick
+
+00:07:15.640 --> 00:07:17.760
+to let folks know that this document
+
+00:07:17.760 --> 00:07:19.800
+can potentially execute code
+
+00:07:19.800 --> 00:07:23.499
+and just a little something about what the document is for.
+
+NOTE Writing a code block
+
+00:07:23.500 --> 00:07:26.059
+Okay, so now that we've written some text,
+
+00:07:26.060 --> 00:07:29.599
+let's try our hand at writing a code block.
+
+00:07:29.600 --> 00:07:31.288
+I'm getting pretty sick of looking at
+
+00:07:31.289 --> 00:07:32.939
+the default Emacs theme.
+
+00:07:32.940 --> 00:07:35.440
+All that blue and purple in the document
+
+00:07:35.440 --> 00:07:37.879
+makes it look bruised.
+
+00:07:37.880 --> 00:07:40.320
+Let's make an Emacs Lisp code block
+
+00:07:40.320 --> 00:07:41.400
+that switches the theme
+
+00:07:41.400 --> 00:07:44.560
+to one of my favorite built-in themes, Leuven.
+
+00:07:44.560 --> 00:07:48.400
+Leuven was created by my man, Fabrice Niessen,
+
+00:07:48.400 --> 00:07:52.120
+who I personally have learned a ton of org-mode stuff about
+
+00:07:52.120 --> 00:07:54.039
+just by studying his work.
+
+00:07:54.040 --> 00:07:56.360
+Now, if we cruise back up to the code block,
+
+00:07:56.360 --> 00:07:58.840
+we should be able to hit `C-c C-c`,
+
+00:07:58.840 --> 00:08:00.379
+and have it execute.
+
+00:08:00.380 --> 00:08:03.880
+And there you have it, a high-contrast color theme
+
+00:08:03.880 --> 00:08:06.979
+that was designed to look great in org-mode.
+
+00:08:06.980 --> 00:08:08.080
+So that's great and all,
+
+00:08:08.080 --> 00:08:10.459
+but there are a couple of things I don't like.
+
+NOTE :results none
+
+00:08:10.460 --> 00:08:13.599
+First of all, we don't need to see a #+RESULTS block here,
+
+00:08:13.600 --> 00:08:15.280
+and that's because we're not really interested
+
+00:08:15.280 --> 00:08:18.720
+in what the Emacs Lisp function `load-theme` returns.
+
+00:08:18.720 --> 00:08:22.200
+I mean, it's great it returned t and all to indicate success,
+
+00:08:22.200 --> 00:08:23.720
+we just don't need to see it.
+
+00:08:23.720 --> 00:08:26.560
+We can slap a `:results none` header arg
+
+00:08:26.560 --> 00:08:30.039
+on the code block to keep things nice and clean.
+
+00:08:30.040 --> 00:08:32.560
+There are a lot of different header args,
+
+00:08:32.560 --> 00:08:35.360
+and I often confuse and misremember them.
+
+00:08:35.360 --> 00:08:38.920
+So I'll always refer back to the org-mode manual
+
+00:08:38.920 --> 00:08:40.319
+when working with them.
+
+NOTE Confirmation
+
+00:08:40.320 --> 00:08:42.160
+The second thing I don't like is that
+
+00:08:42.160 --> 00:08:45.999
+when we hit C-c C-c to execute the block,
+
+00:08:46.000 --> 00:08:49.600
+Emacs prompted us if we really wanted to run the block.
+
+00:08:49.600 --> 00:08:52.040
+Emacs Lisp is Emacs' mother tongue,
+
+00:08:52.040 --> 00:08:53.920
+and I don't wanna be hassled when speaking
+
+00:08:53.920 --> 00:08:55.379
+my native language.
+
+00:08:55.380 --> 00:08:57.520
+There's a variable that controls this
+
+00:08:57.520 --> 00:09:00.680
+called `org-confirm-babel-evaluate`.
+
+00:09:00.680 --> 00:09:03.960
+And this can be either set to t or nil
+
+00:09:03.960 --> 00:09:06.840
+to either always confirm or never confirm.
+
+00:09:06.840 --> 00:09:10.920
+If however, you provided a lambda, an anonymous function,
+
+00:09:10.920 --> 00:09:14.560
+Org will call your function with the name of the language
+
+00:09:14.560 --> 00:09:16.840
+and the source block that it's about to run.
+
+00:09:16.840 --> 00:09:19.080
+And your function can make the decision
+
+00:09:19.080 --> 00:09:24.200
+about if Emacs should ask you for confirmation or not.
+
+00:09:24.200 --> 00:09:27.840
+What I'm doing here is setting `org-confirm-babel-evaluate`
+
+00:09:27.840 --> 00:09:30.539
+as a "file local variable".
+
+00:09:30.540 --> 00:09:33.320
+This means whenever the file is opened by Emacs,
+
+00:09:33.320 --> 00:09:38.059
+it'll set this variable to be a lambda that returns nil,
+
+00:09:38.060 --> 00:09:42.859
+meaning don't confirm, on Elisp code blocks.
+
+00:09:42.860 --> 00:09:45.920
+As you can see, the variable is currently set
+
+00:09:45.920 --> 00:09:50.879
+to its default value of t, meaning always confirm.
+
+00:09:50.880 --> 00:09:53.640
+Now if we save the buffer, exit Emacs,
+
+00:09:53.640 --> 00:09:55.040
+and pop back in again,
+
+00:09:55.040 --> 00:10:00.120
+`org-confirm-babel-evaluate` should be set how we like it.
+
+00:10:00.120 --> 00:10:02.640
+We were however prompted for confirmation
+
+00:10:02.640 --> 00:10:04.400
+on setting the file-local variable,
+
+00:10:04.400 --> 00:10:06.280
+which controls if we're prompted
+
+00:10:06.280 --> 00:10:09.699
+for Elisp source code block evaluation.
+
+00:10:09.700 --> 00:10:12.679
+I feel like there's a Yo Dawg joke here somewhere.
+
+00:10:12.680 --> 00:10:15.240
+When we were prompted, we hit the exclamation mark,
+
+00:10:15.240 --> 00:10:18.400
+which automatically marks this variable as being safe.
+
+00:10:18.400 --> 00:10:21.520
+So you won't be bothered the next time you open this file.
+
+00:10:21.520 --> 00:10:26.760
+This variable is called `safe-local-variable-values`
+
+00:10:26.760 --> 00:10:29.560
+and if we pop over to our .emacs file,
+
+00:10:29.560 --> 00:10:32.520
+you can see that Emacs' customize tooling
+
+00:10:32.520 --> 00:10:36.959
+helpfully updated this variable in our config file for us.
+
+NOTE Running blocks automatically
+
+00:10:36.960 --> 00:10:38.120
+Now that's great and all,
+
+00:10:38.120 --> 00:10:42.120
+but I really don't like having to hit `C-c C-c`
+
+00:10:42.120 --> 00:10:45.160
+on that source block every time I open this document
+
+00:10:45.160 --> 00:10:47.739
+just to bring up the Leuven theme.
+
+00:10:47.740 --> 00:10:50.520
+Let's have this source block run automatically
+
+00:10:50.520 --> 00:10:53.179
+every time the document is opened.
+
+00:10:53.180 --> 00:10:54.999
+Now I know what you're thinking.
+
+00:10:55.000 --> 00:10:57.640
+Shouldn't you just put all of this configuration stuff
+
+00:10:57.640 --> 00:11:01.159
+in your .emacs file and keep it out of the document?
+
+00:11:01.160 --> 00:11:04.760
+Well, that's what I've done with my personal Emacs config,
+
+00:11:04.760 --> 00:11:08.160
+but we want this document to be able to be used by folks
+
+00:11:08.160 --> 00:11:11.040
+with a completely vanilla Emacs setup,
+
+00:11:11.040 --> 00:11:13.440
+or even a completely tricked out Emacs setup,
+
+00:11:13.440 --> 00:11:16.059
+so we can't assume anything.
+
+00:11:16.060 --> 00:11:19.800
+The idea is if the Emacs user who opens the document
+
+00:11:19.800 --> 00:11:22.400
+agrees to setting all of the variables
+
+00:11:22.400 --> 00:11:24.359
+and running all of the code within,
+
+00:11:24.360 --> 00:11:26.560
+they'll be able to export the document
+
+00:11:26.560 --> 00:11:28.840
+as well as run all of the code blocks inside of it
+
+00:11:28.840 --> 00:11:30.799
+just as we intended.
+
+00:11:30.800 --> 00:11:33.880
+And the differences in base Emacs configuration
+
+00:11:33.880 --> 00:11:35.979
+will be completely minimized.
+
+00:11:35.980 --> 00:11:39.080
+Now it's worth pointing out that the file-local variables
+
+00:11:39.080 --> 00:11:43.023
+we're setting here are local, in this case, buffer-local.
+
+00:11:43.024 --> 00:11:45.280
+The configuration we use in this document
+
+00:11:45.280 --> 00:11:48.280
+won't override someone's carefully constructed
+
+00:11:48.280 --> 00:11:49.499
+org-mode setup.
+
+00:11:49.500 --> 00:11:50.800
+The first thing we're gonna wanna do
+
+00:11:51.000 --> 00:11:53.080
+in order to make this block execute
+
+00:11:53.080 --> 00:11:55.988
+when the document is loaded is to give it a name.
+
+00:11:55.989 --> 00:11:58.800
+It's always a good idea to give every source block
+
+00:11:58.800 --> 00:12:01.337
+you create in your document a unique name,
+
+00:12:01.338 --> 00:12:03.400
+even if you don't refer to it elsewhere.
+
+00:12:03.700 --> 00:12:06.960
+I do this because when I'm debugging my documents,
+
+00:12:07.160 --> 00:12:10.019
+Emacs will prompt me about running a block.
+
+00:12:10.020 --> 00:12:12.960
+If the block has a name, Emacs mentions it,
+
+00:12:12.960 --> 00:12:15.960
+and I know there's a problem with the result caching
+
+00:12:15.960 --> 00:12:17.840
+or something with the "foo" block.
+
+00:12:17.840 --> 00:12:20.280
+But if the block doesn't have a name,
+
+00:12:20.280 --> 00:12:22.160
+it can be really hard to figure out
+
+00:12:22.160 --> 00:12:24.579
+which block Emacs is complaining about.
+
+00:12:24.580 --> 00:12:27.459
+So I always name my blocks.
+
+00:12:27.460 --> 00:12:30.360
+Now we're gonna add another file local variable,
+
+00:12:30.360 --> 00:12:32.115
+but this one is special.
+
+00:12:32.116 --> 00:12:34.360
+If your "variable"
+
+00:12:34.360 --> 00:12:36.320
+just happens to be named "eval",
+
+00:12:36.320 --> 00:12:38.760
+it means that Emacs should evaluate
+
+00:12:38.760 --> 00:12:40.800
+the Lisp expression that follows.
+
+00:12:40.800 --> 00:12:43.240
+Here we'll use the progn function
+
+00:12:43.240 --> 00:12:46.040
+to sequentially run two elisp functions
+
+00:12:46.040 --> 00:12:48.760
+and return the value of the last one executed.
+
+00:12:48.760 --> 00:12:53.320
+The first function is `org-babel-goto-named-source-block`,
+
+00:12:53.320 --> 00:12:55.440
+which jumps us to the startup block.
+
+00:12:55.440 --> 00:12:59.280
+The second one is `org-babel-execute-src-block`,
+
+00:12:59.280 --> 00:13:02.092
+which executes the current source block.
+
+00:13:02.093 --> 00:13:03.630
+That should get the job done.
+
+00:13:03.631 --> 00:13:05.840
+Now all we have to do is save the document,
+
+00:13:05.840 --> 00:13:08.199
+exit Emacs, jump back in,
+
+00:13:08.200 --> 00:13:10.280
+and once we've confirmed that we're willing
+
+00:13:10.280 --> 00:13:14.239
+to run the new "eval" line in our file local variables,
+
+00:13:14.240 --> 00:13:15.859
+we're good to go.
+
+00:13:15.860 --> 00:13:18.480
+Now if we want to add new configuration stuff
+
+00:13:18.480 --> 00:13:21.839
+to the document, we can just add it to the startup block
+
+00:13:21.840 --> 00:13:24.880
+and not have to muck about with confirmations
+
+00:13:24.880 --> 00:13:28.679
+or adding new file-local variables or whatever.
+
+00:13:28.680 --> 00:13:31.960
+And just like before, we'll let Emacs' customize system
+
+00:13:31.960 --> 00:13:34.939
+save this decision to our .emacs file.
+
+00:13:34.940 --> 00:13:37.760
+Now that all that business with confirmations,
+
+00:13:37.760 --> 00:13:40.080
+file-local variables, and the startup block
+
+00:13:40.080 --> 00:13:41.120
+are out of the way,
+
+00:13:41.120 --> 00:13:44.120
+we can get on with writing our introduction.
+
+00:13:44.120 --> 00:13:47.880
+We'll create a new top level headline called introduction
+
+00:13:47.880 --> 00:13:51.440
+and explain to the reader of the exported document
+
+00:13:51.440 --> 00:13:52.600
+what this is all about.
+
+NOTE Export options
+
+00:13:53.000 --> 00:13:55.640
+Now as you can see, we've actually hard-coded
+
+00:13:55.640 --> 00:13:58.280
+the name of the Linux distro in our prose.
+
+00:13:58.280 --> 00:14:00.880
+I promised you a single document that could be
+
+00:14:00.880 --> 00:14:03.720
+for either RedHat or Debian distros,
+
+00:14:03.720 --> 00:14:05.319
+so we can't have this.
+
+00:14:05.320 --> 00:14:08.840
+Astute members in the audience have probably been uneasy
+
+00:14:08.840 --> 00:14:11.280
+ever since I hard coded the name "Debian"
+
+00:14:11.280 --> 00:14:13.859
+in the README section above.
+
+00:14:13.860 --> 00:14:17.520
+One way of solving this problem is by using exclude tags.
+
+00:14:17.520 --> 00:14:21.960
+Let's add the `#+EXCLUDE_TAGS` export keyword to our document.
+
+00:14:21.960 --> 00:14:24.200
+This keyword tells the exporter,
+
+00:14:24.200 --> 00:14:27.959
+"Hey, if you see a headline tagged with any of these tags,
+
+00:14:27.960 --> 00:14:29.600
+don't export it."
+
+00:14:29.600 --> 00:14:33.559
+By default, the tag `:noexport:` is excluded.
+
+00:14:33.560 --> 00:14:36.480
+And if you'll notice, we tagged our README section
+
+00:14:36.480 --> 00:14:38.360
+with that tag, so it doesn't show up
+
+00:14:38.360 --> 00:14:40.339
+in the exported document.
+
+00:14:40.340 --> 00:14:42.280
+We'll keep this tag in the list,
+
+00:14:42.280 --> 00:14:47.080
+but we'll also add the tag `:redhat:` as a tag to exclude.
+
+00:14:47.080 --> 00:14:50.400
+Now it's just a matter of creating two introduction
+
+00:14:50.400 --> 00:14:53.960
+sections, one for Debian, one for RedHat.
+
+00:14:53.960 --> 00:14:56.520
+And if you want the RedHat version of the document,
+
+00:14:56.520 --> 00:14:59.200
+you can just modify the `#+EXCLUDE_TAGS` line
+
+00:14:59.200 --> 00:15:00.440
+at the top of the document.
+
+00:15:00.440 --> 00:15:02.339
+Awesome, right?
+
+00:15:02.340 --> 00:15:03.539
+Right?
+
+00:15:03.540 --> 00:15:05.544
+OK, this is not that great.
+
+00:15:05.545 --> 00:15:07.387
+Well, it does work.
+
+00:15:07.388 --> 00:15:10.081
+And you can see if we export the document,
+
+00:15:10.082 --> 00:15:12.840
+we'll get something that only references Debian,
+
+00:15:12.840 --> 00:15:15.188
+and the `:noexport:` and `:redhat:`
+
+00:15:15.189 --> 00:15:17.450
+tagged headlines are omitted.
+
+00:15:17.451 --> 00:15:19.319
+This strategy would work great
+
+00:15:19.320 --> 00:15:22.120
+when the RedHat- and Debian-specific sections
+
+00:15:22.120 --> 00:15:24.400
+are substantially different, but that's not
+
+00:15:24.400 --> 00:15:26.198
+the case with the introduction.
+
+00:15:26.199 --> 00:15:28.640
+We definitely don't want to have to maintain
+
+00:15:28.640 --> 00:15:30.824
+two distinct introductions.
+
+00:15:30.825 --> 00:15:34.080
+I also noticed that the export tags are included
+
+00:15:34.080 --> 00:15:36.519
+in the exported document.
+
+00:15:36.520 --> 00:15:38.720
+That's a terrible default. We'll fix that,
+
+00:15:38.720 --> 00:15:42.040
+and we'll also ensure that my email address appears
+
+00:15:42.040 --> 00:15:43.371
+at the top of the document.
+
+00:15:43.372 --> 00:15:45.440
+Let's also take this opportunity to get rid
+
+00:15:45.440 --> 00:15:47.354
+of the table of contents.
+
+00:15:47.355 --> 00:15:48.867
+We don't need it.
+
+00:15:48.868 --> 00:15:51.120
+These are all export option settings
+
+00:15:51.120 --> 00:15:53.800
+and can be modified using the options keyword
+
+00:15:53.800 --> 00:15:55.508
+at the top of the doc.
+
+00:15:55.509 --> 00:15:57.480
+The manual is really your friend here,
+
+00:15:57.480 --> 00:16:00.979
+as there are a ton of export options.
+
+00:16:00.980 --> 00:16:03.120
+Now when we export the document again,
+
+00:16:03.120 --> 00:16:05.699
+it should look a lot better.
+
+NOTE Substituting constants
+
+00:16:05.700 --> 00:16:09.059
+Now that we've cleaned up the look of the exported document,
+
+00:16:09.060 --> 00:16:10.640
+we'll take a look at a better way
+
+00:16:10.640 --> 00:16:13.377
+of solving the problem with the introduction.
+
+00:16:13.378 --> 00:16:15.518
+Thinking like a programmer for a moment,
+
+00:16:15.519 --> 00:16:19.734
+what I really want here is a way of specifying a constant.
+
+00:16:19.735 --> 00:16:22.640
+Rather than hard-coding the name "Debian" or "RedHat"
+
+00:16:22.640 --> 00:16:24.569
+or whatever into my document,
+
+00:16:24.570 --> 00:16:28.234
+I want to substitute that text with a symbolic constant,
+
+00:16:28.235 --> 00:16:31.960
+named something like "distro", that can dynamically change
+
+00:16:31.960 --> 00:16:36.120
+to "Debian" or "RedHat" or "Slackware" or whatever,
+
+00:16:36.120 --> 00:16:38.689
+depending on how the document is configured.
+
+00:16:38.690 --> 00:16:41.640
+In the past, I've come up with some pretty cumbersome ways
+
+00:16:41.640 --> 00:16:44.640
+of doing this, but eventually I stumbled upon the idea
+
+00:16:44.640 --> 00:16:46.639
+of using Org-mode properties
+
+00:16:46.640 --> 00:16:49.409
+as a way of storing these constants.
+
+00:16:49.410 --> 00:16:53.059
+Like it says in the docs, properties are key-value pairs
+
+00:16:53.060 --> 00:16:55.169
+that are associated with an entry
+
+00:16:55.170 --> 00:16:58.379
+and they live in a collapsible properties drawer.
+
+00:16:58.380 --> 00:17:00.699
+Let's do a bit of cleanup on our document
+
+00:17:00.700 --> 00:17:02.600
+and we'll put things into sections.
+
+00:17:02.600 --> 00:17:14.000
+We'll also add a section for document constants.
+
+00:17:14.000 --> 00:17:19.560
+And that's where we'll put the properties drawer
+
+00:17:19.560 --> 00:17:25.739
+with the "distro" property.
+
+NOTE Getting the properties
+
+00:17:25.740 --> 00:17:27.120
+Now the question is,
+
+00:17:27.120 --> 00:17:30.099
+how do we reference these properties in the document?
+
+00:17:30.100 --> 00:17:32.520
+It turns out there's an Elisp function
+
+00:17:32.520 --> 00:17:35.440
+called `org-property-values`, which does what we want.
+
+00:17:35.440 --> 00:17:38.840
+If we run it and give it the name of our property,
+
+00:17:38.840 --> 00:17:42.679
+it returns a list with the string "Debian" in it.
+
+00:17:42.680 --> 00:17:45.919
+It's worth noting that this function is named
+
+00:17:45.920 --> 00:17:49.989
+`org-property-values` with values being plural.
+
+00:17:49.990 --> 00:17:52.889
+In org-mode, there could be a property named "foo"
+
+00:17:52.890 --> 00:17:55.880
+that has different values depending on which heading level
+
+00:17:55.880 --> 00:17:57.609
+you're at in the document,
+
+00:17:57.610 --> 00:17:59.720
+which is why the function returns a list.
+
+00:17:59.720 --> 00:18:01.289
+For our purposes though,
+
+00:18:01.290 --> 00:18:04.480
+we can just pull off the first value in the list with car
+
+00:18:04.480 --> 00:18:05.680
+and we're good to go.
+
+00:18:05.680 --> 00:18:10.040
+Now we'll make an Emacs Lisp list function called `get_prop`
+
+00:18:10.040 --> 00:18:11.440
+that does just that.
+
+00:18:11.440 --> 00:18:14.160
+This function takes one argument called `prop`,
+
+00:18:14.160 --> 00:18:15.920
+which is the property to look up
+
+00:18:15.920 --> 00:18:18.519
+and we'll give it a default value of "distro".
+
+00:18:18.520 --> 00:18:20.960
+So we can hit `C-c C-c` on the block
+
+00:18:20.960 --> 00:18:23.149
+to verify that it works.
+
+00:18:23.150 --> 00:18:25.480
+Now we just have to make an inline call
+
+00:18:25.480 --> 00:18:26.920
+to our `get_prop` function
+
+00:18:26.920 --> 00:18:29.559
+within the prose of the introduction section.
+
+00:18:29.560 --> 00:18:31.659
+And that should get us much closer
+
+00:18:31.660 --> 00:18:35.619
+to not hard coding distro names into our document.
+
+00:18:35.620 --> 00:18:36.869
+But before we do that,
+
+00:18:36.870 --> 00:18:39.849
+I need to clean up something that's been bothering me.
+
+00:18:39.850 --> 00:18:42.909
+By default, Emacs' `fill-column` variable
+
+00:18:42.910 --> 00:18:44.989
+is set to 70 characters,
+
+00:18:44.990 --> 00:18:47.720
+which may have been appropriate for 1970,
+
+00:18:47.720 --> 00:18:51.319
+but it's not great for 2023.
+
+00:18:51.320 --> 00:18:53.920
+We'll just cruise up to our startup block
+
+00:18:53.920 --> 00:18:56.539
+and set the variable there.
+
+00:18:56.540 --> 00:18:58.800
+We'll hit `C-c C-c`,
+
+00:18:58.800 --> 00:19:02.289
+and now our document will wrap at 100 columns,
+
+00:19:02.290 --> 00:19:05.829
+which for our purposes, I think is much more reasonable.
+
+00:19:05.830 --> 00:19:09.320
+The org-mode syntax for making an inline function call
+
+00:19:09.320 --> 00:19:13.059
+within the prose of your document is `call_`,
+
+00:19:13.060 --> 00:19:15.000
+followed by the name of the function,
+
+00:19:15.000 --> 00:19:17.040
+some optional header arguments,
+
+00:19:17.040 --> 00:19:19.719
+and then the function arguments.
+
+00:19:19.720 --> 00:19:21.680
+Now, when we export the document,
+
+00:19:21.680 --> 00:19:26.049
+we see that it's replaced our previously hard coded "Debian"
+
+00:19:26.050 --> 00:19:29.409
+with the value from the property. Huzzah!
+
+00:19:29.410 --> 00:19:32.959
+Now this is close to, but not exactly what we want.
+
+00:19:32.960 --> 00:19:36.720
+You can see that "Debian" is surrounded by a backtick
+
+00:19:36.720 --> 00:19:37.800
+and a single quote,
+
+00:19:37.800 --> 00:19:40.320
+which is the plain text exporters way
+
+00:19:40.320 --> 00:19:43.029
+of showing you verbatim text.
+
+00:19:43.030 --> 00:19:45.600
+In more sophisticated document backends,
+
+00:19:45.600 --> 00:19:49.379
+verbatim text is rendered in monospace.
+
+00:19:49.380 --> 00:19:54.080
+We can fix that by adding a ":results raw" header argument
+
+00:19:54.080 --> 00:19:56.459
+to the inline call.
+
+00:19:56.460 --> 00:19:58.239
+Now, when we export the document,
+
+00:19:58.240 --> 00:20:00.289
+it looks like what we'd expect.
+
+00:20:00.290 --> 00:20:02.960
+Now this is getting better, but it's still not great.
+
+NOTE Macros
+
+00:20:03.060 --> 00:20:05.840
+The `call_` syntax is pretty cumbersome,
+
+00:20:05.840 --> 00:20:08.560
+and it's a lot to type every time we want
+
+00:20:08.560 --> 00:20:09.849
+to reference a constant
+
+00:20:09.850 --> 00:20:13.219
+and not have it be marked up as verbatim.
+
+00:20:13.220 --> 00:20:17.169
+This is where org-mode macros come to our rescue.
+
+00:20:17.170 --> 00:20:19.469
+If we head to the top of the document,
+
+00:20:19.470 --> 00:20:21.480
+we can create a couple of macros
+
+00:20:21.480 --> 00:20:24.699
+using the `#+MACRO:` export keyword.
+
+00:20:24.700 --> 00:20:27.600
+We'll define two macros with short names.
+
+00:20:27.600 --> 00:20:30.240
+One named "p" for "property",
+
+00:20:30.240 --> 00:20:34.640
+and the other one named "pr" for "property raw".
+
+00:20:34.640 --> 00:20:39.160
+Org-mode macros are expanded when the document is exported,
+
+00:20:39.160 --> 00:20:41.640
+and any positional arguments provided
+
+00:20:41.640 --> 00:20:43.559
+are referenced by their number.
+
+00:20:43.860 --> 00:20:45.160
+Now in the introduction,
+
+00:20:45.160 --> 00:20:47.880
+we can use the macro replacement syntax,
+
+00:20:47.880 --> 00:20:49.800
+which is three curly braces,
+
+00:20:49.800 --> 00:20:52.760
+followed by the macro name and any arguments,
+
+00:20:52.760 --> 00:20:55.559
+and then three ending curly braces.
+
+00:20:55.560 --> 00:20:58.699
+You see why I kept the macro name short.
+
+00:20:58.700 --> 00:21:01.280
+That's six curly braces in total we're typing,
+
+00:21:01.280 --> 00:21:05.239
+which still takes up a fair amount of space.
+
+NOTE Properties in practice
+
+00:21:05.240 --> 00:21:07.120
+Now let's take a look at how we might use
+
+00:21:07.120 --> 00:21:09.159
+these properties in practice.
+
+00:21:09.160 --> 00:21:10.920
+Debian and RedHat distros differ
+
+00:21:11.120 --> 00:21:12.929
+on how they install packages.
+
+00:21:12.930 --> 00:21:16.120
+So we're gonna want an "install" property,
+
+00:21:16.120 --> 00:21:24.579
+where in Debian we use `sudo apt-get install -qq`,
+
+00:21:24.580 --> 00:21:26.939
+and on RedHat we'll use something like
+
+00:21:26.940 --> 00:21:33.119
+`sudo dnf install -y`.
+
+00:21:33.120 --> 00:21:35.329
+Now development packages
+
+00:21:35.330 --> 00:21:38.049
+also have a different naming convention.
+
+00:21:38.050 --> 00:21:40.760
+For example, the `ncurses` library on Debian
+
+00:21:40.760 --> 00:21:43.520
+is called `libncurses-dev`,
+
+00:21:43.520 --> 00:21:48.259
+where on RedHat it's called `ncurses-devel`.
+
+00:21:48.260 --> 00:21:49.640
+There are likely going to be
+
+00:21:49.640 --> 00:21:52.120
+many more little differences like this
+
+00:21:52.120 --> 00:21:55.339
+that we'll need to solve with properties.
+
+00:21:55.340 --> 00:21:58.609
+Now I already don't like where this is going.
+
+00:21:58.610 --> 00:22:00.880
+Switching between the Debian and RedHat
+
+00:22:00.880 --> 00:22:03.160
+versions of the document is gonna mean
+
+00:22:03.160 --> 00:22:05.200
+commenting and uncommenting out
+
+00:22:05.200 --> 00:22:06.989
+a bunch of different properties,
+
+00:22:06.990 --> 00:22:09.019
+which is pretty janky.
+
+NOTE Using a prefix
+
+00:22:09.020 --> 00:22:11.079
+Luckily we can solve this problem
+
+00:22:11.080 --> 00:22:14.439
+with a little bit of Emacs Lisp.
+
+00:22:14.440 --> 00:22:16.879
+We'll start by modifying our properties,
+
+00:22:16.880 --> 00:22:19.140
+so their property names are prefixed
+
+00:22:19.141 --> 00:22:23.119
+with either `deb_` or `rh_`
+
+00:22:23.120 --> 00:22:27.719
+to signify which distro the property applies to.`
+
+00:22:27.720 --> 00:22:31.160
+We'll also create a single property called "prefix",
+
+00:22:31.160 --> 00:22:34.589
+which will be prepended to the property name
+
+00:22:34.590 --> 00:22:36.529
+by the `get_prop` function
+
+00:22:36.530 --> 00:22:39.509
+if the requested property is not found.
+
+00:22:39.510 --> 00:22:42.200
+This way, when we want to switch between
+
+00:22:42.200 --> 00:22:45.349
+the Debian and RedHat versions of the document,
+
+00:22:45.350 --> 00:22:49.029
+we just need to change the prefix property.
+
+00:22:49.030 --> 00:22:51.379
+So now we'll change the Elisp code.
+
+00:22:51.380 --> 00:22:55.209
+So we'll use a let expression with two bound variables.
+
+00:22:55.210 --> 00:22:56.919
+The first one is called ret,
+
+00:22:56.920 --> 00:22:59.160
+which determines if the initial call
+
+00:22:59.160 --> 00:23:01.949
+to `org-property-values` succeeds.
+
+00:23:01.950 --> 00:23:04.039
+The second variable is called prefix,
+
+00:23:04.040 --> 00:23:06.219
+which is the prefix property.
+
+00:23:06.220 --> 00:23:09.120
+If the first call to `org-property-values` succeeds,
+
+00:23:09.120 --> 00:23:11.159
+we return it as normal.
+
+00:23:11.160 --> 00:23:14.249
+If not, we concatenate the property value
+
+00:23:14.250 --> 00:23:15.920
+that was passed into the function
+
+00:23:15.920 --> 00:23:18.969
+onto the prefix and try again.
+
+00:23:18.970 --> 00:23:23.800
+Now when we call the `get_prop` function with "distro"
+
+00:23:23.800 --> 00:23:26.360
+as the prop argument, it won't be found.
+
+00:23:26.360 --> 00:23:29.689
+So the code will slap our prefix tag on the front,
+
+00:23:29.690 --> 00:23:33.249
+making it something like `rh_distro`,
+
+00:23:33.250 --> 00:23:35.329
+and it will be found and returned.
+
+00:23:35.330 --> 00:23:39.999
+Let's see that in action.
+
+00:23:40.000 --> 00:23:42.009
+All right, now we're talking.
+
+NOTE Switching distributions
+
+00:23:42.010 --> 00:23:44.419
+This setup is starting to look pretty good,
+
+00:23:44.420 --> 00:23:46.040
+but there are just a few things
+
+00:23:46.040 --> 00:23:48.659
+that I want to add before we move on.
+
+00:23:48.660 --> 00:23:51.240
+First of all, I think the document should have a subtitle,
+
+00:23:51.240 --> 00:23:53.960
+something that tells you if you're looking at the RedHat
+
+00:23:53.960 --> 00:23:56.160
+or the Debian version of the document.
+
+00:23:56.160 --> 00:23:57.880
+I also think it would be great
+
+00:23:57.880 --> 00:24:00.520
+if the file name of the exported document
+
+00:24:00.520 --> 00:24:04.999
+reflected the distribution as well.
+
+00:24:05.000 --> 00:24:08.040
+I also want to add a quick Debian only section
+
+00:24:08.040 --> 00:24:11.799
+to the document that explains how it got its name.
+
+00:24:11.800 --> 00:24:17.739
+Now let's see what happens when we export the document.
+
+00:24:17.740 --> 00:24:20.439
+This did not work out as we wanted.
+
+00:24:20.440 --> 00:24:23.360
+As you can see, the macro we used in the subtitles
+
+00:24:23.360 --> 00:24:24.959
+didn't expand properly,
+
+00:24:24.960 --> 00:24:28.640
+and as a result, our subtitle didn't render right.
+
+00:24:28.640 --> 00:24:30.640
+Sadly, you can't use macros
+
+00:24:30.640 --> 00:24:32.909
+or inline function calls everywhere.
+
+00:24:32.910 --> 00:24:34.680
+And one place where they don't work
+
+00:24:34.680 --> 00:24:37.189
+is inside of certain export keywords.
+
+00:24:37.190 --> 00:24:43.219
+So we're gonna have to hard code them here.
+
+00:24:43.220 --> 00:24:46.320
+Another mistake that we made is we forgot to update
+
+00:24:46.320 --> 00:24:49.099
+the `#+EXCLUDE_TAGS` export keyword,
+
+00:24:49.100 --> 00:24:51.439
+because with the RedHat version of the document,
+
+00:24:51.440 --> 00:24:54.509
+we want to exclude the Debian tag.
+
+00:24:54.510 --> 00:24:56.400
+Now when we export the document,
+
+00:24:56.400 --> 00:24:57.839
+everything should be correct.
+
+00:24:57.840 --> 00:25:00.619
+The word RedHat should appear in the subtitle,
+
+00:25:00.620 --> 00:25:04.799
+and the Debian fun fact section should not be present.
+
+00:25:04.800 --> 00:25:06.960
+Now we just need to add a section to the README
+
+00:25:06.960 --> 00:25:09.280
+that explains the steps you need to take
+
+00:25:09.280 --> 00:25:11.000
+in order to switch the document
+
+00:25:11.000 --> 00:25:12.759
+from RedHat to Debian.
+
+00:25:12.760 --> 00:25:14.000
+Okay, let's see here.
+
+00:25:14.000 --> 00:25:18.309
+We have to change `#+SUBTITLE`, change the `#+EXCLUDE_TAGS`,
+
+00:25:18.310 --> 00:25:20.429
+change the `#+EXPORT_FILE_NAME`,
+
+00:25:20.430 --> 00:25:23.289
+and change the `prefix` property.
+
+00:25:23.290 --> 00:25:26.289
+This is OK, but it's not great.
+
+00:25:26.290 --> 00:25:29.429
+Emacs Lisp can once again come to our rescue.
+
+00:25:29.430 --> 00:25:32.080
+What we'll do is make an Elisp code block
+
+00:25:32.080 --> 00:25:35.480
+that will invite the user to hit `C-c C-c` on.
+
+00:25:35.480 --> 00:25:39.520
+And the code block will essentially make all these changes
+
+00:25:39.520 --> 00:25:40.919
+in the document for them.
+
+00:25:40.920 --> 00:25:43.280
+This code block, which we'll call `switch_distro`,
+
+00:25:43.280 --> 00:25:45.680
+takes one argument called `os`,
+
+00:25:45.680 --> 00:25:48.689
+which by default is set to "Debian".
+
+00:25:48.690 --> 00:25:50.760
+It starts out with a let expression
+
+00:25:50.760 --> 00:25:53.029
+that defines three bound variables.
+
+00:25:53.030 --> 00:25:55.969
+The `debian` variable is a boolean that is true
+
+00:25:55.970 --> 00:25:58.699
+if the distro we're switching to is Debian.
+
+00:25:58.700 --> 00:26:00.360
+Based on the value of this boolean,
+
+00:26:00.360 --> 00:26:04.169
+we'll set the `noexport` and `prefix` variables accordingly.
+
+00:26:04.170 --> 00:26:06.720
+The `save-excursion` block tells Emacs
+
+00:26:06.720 --> 00:26:09.199
+that we're going to be moving around in the document
+
+00:26:09.200 --> 00:26:11.680
+and to remember to put our point back where we started
+
+00:26:11.680 --> 00:26:13.429
+when the block finishes.
+
+00:26:13.430 --> 00:26:16.249
+After that, we essentially go to the top of the document
+
+00:26:16.250 --> 00:26:19.839
+and search and replace the subtitle, `exclude_tags`,
+
+00:26:19.840 --> 00:26:22.499
+`export_file_name`, and the `prefix`.
+
+00:26:22.500 --> 00:26:23.389
+Pretty cool.
+
+00:26:23.390 --> 00:26:25.029
+Let's see this in action.
+
+00:26:25.030 --> 00:26:27.869
+If we hit `C-c C-c` on this block,
+
+00:26:27.870 --> 00:26:30.480
+we should see the document automatically change a bit.
+
+00:26:30.480 --> 00:26:32.320
+And now when we export it,
+
+00:26:32.320 --> 00:26:36.089
+we get the Debian version of the doc.
+
+00:26:36.090 --> 00:26:37.629
+If we want to change it back,
+
+00:26:37.630 --> 00:26:39.880
+we can just head back over to the code block
+
+00:26:39.880 --> 00:26:43.149
+and change the default value for the os variable
+
+00:26:43.150 --> 00:26:47.619
+from "Debian" to "RedHat" and hit `C-c C-c` again.
+
+00:26:47.620 --> 00:26:49.919
+And now when we re-export,
+
+00:26:49.920 --> 00:26:52.909
+we're looking at the RedHat version of the document.
+
+00:26:52.910 --> 00:26:55.859
+Just as an aside, if you ever thought to yourself,
+
+00:26:55.860 --> 00:26:58.159
+"I should learn Emacs Lisp someday"
+
+00:26:58.160 --> 00:27:01.289
+Make it someday soon. You'll be happy you did.
+
+00:27:01.290 --> 00:27:03.769
+Not only is it a fun programming language,
+
+00:27:03.770 --> 00:27:06.679
+but you can do powerful things with it in Emacs,
+
+00:27:06.680 --> 00:27:12.149
+which I hope is a point that folks take away from this talk.
+
+00:27:12.150 --> 00:27:14.149
+All right, that was a lot.
+
+NOTE A tour
+
+00:27:14.150 --> 00:27:16.840
+Now that we've spent the past 20 minutes or so
+
+00:27:16.840 --> 00:27:19.409
+digging into some of the tips and tricks I used
+
+00:27:19.410 --> 00:27:22.879
+when creating my build Emacs from source document,
+
+00:27:22.880 --> 00:27:26.279
+we'll say goodbye to this document we've been working on
+
+00:27:26.280 --> 00:27:27.480
+and we'll start a tour
+
+00:27:27.480 --> 00:27:29.960
+of the actual literate document I wrote.
+
+00:27:29.960 --> 00:27:33.080
+A document that I'll demonstrate actually downloading
+
+00:27:33.080 --> 00:27:35.659
+and building a new Emacs when I export it
+
+00:27:35.660 --> 00:27:38.959
+on both my Ubuntu and RedHat virtual machines.
+
+00:27:38.960 --> 00:27:41.689
+I'll also show you how org-mode can generate
+
+00:27:41.690 --> 00:27:44.519
+slick professional looking PDF files
+
+00:27:44.520 --> 00:27:46.579
+through the power of LaTeX.
+
+00:27:46.580 --> 00:27:49.619
+We'll start here at the orgdemo2 directory,
+
+00:27:49.620 --> 00:27:51.229
+which I've cloned from GitLab.
+
+00:27:51.230 --> 00:27:55.599
+This repository has all the source materials for this talk.
+
+00:27:55.600 --> 00:27:59.040
+The buildemacs.org file is where most of the good stuff is.
+
+00:27:59.040 --> 00:28:01.479
+So that's where we'll start.
+
+00:28:01.480 --> 00:28:03.360
+There's a lot of file-local variables
+
+00:28:03.360 --> 00:28:04.800
+that we'll need to confirm.
+
+00:28:04.800 --> 00:28:06.439
+So we'll do that too.
+
+00:28:06.440 --> 00:28:07.560
+So the first thing we're gonna do
+
+00:28:07.560 --> 00:28:10.080
+is hit `C-u TAB` twice,
+
+00:28:10.780 --> 00:28:13.360
+which will give us a top-level overview
+
+00:28:13.360 --> 00:28:15.139
+of all of our headings.
+
+00:28:15.140 --> 00:28:16.600
+As you can see, we've got a lot
+
+00:28:16.600 --> 00:28:20.119
+of the same familiar export keywords we had before.
+
+00:28:20.120 --> 00:28:23.099
+`#+TITLE`, `#+SUBTITLE`, `#+AUTHOR`, `#+EMAIL`,
+
+00:28:23.100 --> 00:28:25.359
+plus a few we haven't seen before.
+
+00:28:25.360 --> 00:28:27.720
+For example, I've squirreled away
+
+00:28:27.720 --> 00:28:30.619
+a lot of the `#+LATEX_HEADER` export keywords
+
+00:28:30.620 --> 00:28:33.539
+in this file called latex.setup.
+
+00:28:33.540 --> 00:28:36.539
+And I did this just so they don't clutter up the document.
+
+00:28:36.540 --> 00:28:38.320
+Much of the LaTeX magic
+
+00:28:38.320 --> 00:28:40.909
+that makes the exported document look good
+
+00:28:40.910 --> 00:28:42.589
+is in these headers.
+
+00:28:42.590 --> 00:28:45.119
+LaTeX commands begin with a backslash.
+
+00:28:45.120 --> 00:28:49.679
+And a common one we use a lot here is `\usepackage`.
+
+00:28:49.680 --> 00:28:52.200
+This lets us bring in packages like geometry,
+
+00:28:52.200 --> 00:28:56.539
+svg for the cool SeaGL SVG logo,
+
+00:28:56.540 --> 00:28:58.440
+`fancyhdr` and fancy verbatim [`fancyvrb`]
+
+00:28:58.440 --> 00:29:00.689
+to keep things looking pretty fancy.
+
+00:29:00.690 --> 00:29:03.200
+Using a scalable vector image format
+
+00:29:03.200 --> 00:29:05.720
+makes it possible for us to do really cool things
+
+00:29:05.720 --> 00:29:09.269
+like having a scaled-down version of the SeaGL logo
+
+00:29:09.270 --> 00:29:11.979
+appear in the fancy footer below.
+
+00:29:11.980 --> 00:29:15.360
+I also include some macros in a separate file
+
+00:29:15.360 --> 00:29:18.120
+just to help keep things tidy in the main document.
+
+00:29:18.120 --> 00:29:20.600
+Here I've got the familiar macros
+
+00:29:20.600 --> 00:29:23.399
+we've seen before for `get_prop`.
+
+00:29:23.400 --> 00:29:25.520
+But here I use different permutations
+
+00:29:25.520 --> 00:29:28.160
+depending on if I want results raw
+
+00:29:28.160 --> 00:29:31.869
+or raw verbatim or just verbatim.
+
+00:29:31.870 --> 00:29:35.069
+I also have a couple of macros here at the top of the file
+
+00:29:35.070 --> 00:29:40.280
+that are for pulling strings out of results blocks
+
+00:29:40.280 --> 00:29:41.920
+and then trimming them
+
+00:29:41.920 --> 00:29:44.719
+so there's no white space on either side.
+
+00:29:44.720 --> 00:29:46.440
+Like in the version of the document
+
+00:29:46.440 --> 00:29:48.429
+we worked on at the start of this talk,
+
+00:29:48.430 --> 00:29:51.079
+the real document also has a README section
+
+00:29:51.080 --> 00:29:53.469
+marked with the `:noexport:` tag.
+
+00:29:53.470 --> 00:29:55.400
+It also has a section about choosing
+
+00:29:55.400 --> 00:29:57.909
+which version of the document to export
+
+00:29:57.910 --> 00:30:00.599
+and a code block on how to switch between them.
+
+00:30:00.600 --> 00:30:03.000
+It's also got a lot of helpful information in it
+
+00:30:03.000 --> 00:30:05.819
+like what OS and Emacs versions
+
+00:30:05.820 --> 00:30:09.559
+the document has been tested to "run" on,
+
+00:30:09.560 --> 00:30:12.329
+a section on the LaTeX prerequisites
+
+00:30:12.330 --> 00:30:14.080
+and the section on executing
+
+00:30:14.080 --> 00:30:16.199
+the document's various code blocks.
+
+NOTE TeX and LaTeX
+
+00:30:16.200 --> 00:30:19.199
+The latter two sections we'll take a look at now.
+
+00:30:19.200 --> 00:30:22.579
+Out of the box on Fedora and Ubuntu server distros,
+
+00:30:22.580 --> 00:30:24.709
+the TeX typesetting system
+
+00:30:24.710 --> 00:30:27.669
+also by noted computer scientist Donald Knuth
+
+00:30:27.670 --> 00:30:28.859
+is not installed.
+
+00:30:28.860 --> 00:30:31.719
+So we'll need to install some packages.
+
+00:30:31.720 --> 00:30:34.449
+Starting out we'll need the `texlive` package
+
+00:30:34.450 --> 00:30:37.459
+which gets you a fully featured TeX setup.
+
+00:30:37.460 --> 00:30:39.289
+This also gets you LaTeX
+
+00:30:39.290 --> 00:30:42.789
+which can be viewed as a distribution of TeX macros.
+
+00:30:42.790 --> 00:30:44.899
+You'll also need XeTeX.
+
+00:30:44.900 --> 00:30:49.779
+This gets you Unicode support and lets you use modern fonts.
+
+00:30:49.780 --> 00:30:52.809
+We'll also want to install pdfTeX.
+
+00:30:52.810 --> 00:30:57.209
+This gets us the ability to generate PDFs from TeX sources.
+
+00:30:57.210 --> 00:31:01.299
+And finally, we're gonna need to install latexmk
+
+00:31:01.300 --> 00:31:02.400
+which is a Perl script
+
+00:31:02.400 --> 00:31:05.139
+that knows how to run LaTeX multiple times
+
+00:31:05.140 --> 00:31:09.249
+in order to properly deal with intra-document links.
+
+NOTE Other prerequisites
+
+00:31:09.250 --> 00:31:11.069
+But wait, there's more.
+
+00:31:11.070 --> 00:31:12.960
+We're also gonna need Inkscape
+
+00:31:12.960 --> 00:31:15.520
+to rasterize our SeaGL vector logo
+
+00:31:15.520 --> 00:31:17.339
+at different resolutions.
+
+00:31:17.340 --> 00:31:20.360
+And we're gonna need the JetBrains Mono font
+
+00:31:20.360 --> 00:31:23.059
+to make our source code look snazzy.
+
+00:31:23.060 --> 00:31:24.680
+We'll also need the Inter font
+
+00:31:24.680 --> 00:31:28.039
+to make our prose look snazzy as well.
+
+00:31:28.040 --> 00:31:31.299
+I've helpfully added a bash code block in the README
+
+00:31:31.300 --> 00:31:35.739
+that you can hit C-c C-c on to install.
+
+00:31:35.740 --> 00:31:38.520
+This really does lock up Emacs for a few minutes
+
+00:31:38.520 --> 00:31:40.329
+and it's sort of annoying.
+
+00:31:40.330 --> 00:31:43.040
+When we export the document and turn off all caching
+
+00:31:43.040 --> 00:31:45.599
+and it actually builds Emacs for real,
+
+00:31:45.600 --> 00:31:48.769
+Emacs can be locked up for tens of minutes.
+
+00:31:48.770 --> 00:31:50.880
+There's a package called ob-async
+
+00:31:50.880 --> 00:31:54.259
+that I've been meaning to check out that might help here.
+
+00:31:54.260 --> 00:31:55.760
+But since I wanted this document
+
+00:31:55.760 --> 00:31:58.000
+to work on bog-standard Emacs setups,
+
+00:31:58.000 --> 00:32:00.059
+I didn't get around to it.
+
+NOTE Caching
+
+00:32:00.060 --> 00:32:03.139
+Before we get into talking about running the document,
+
+00:32:03.140 --> 00:32:06.449
+let's talk briefly about results caching.
+
+00:32:06.450 --> 00:32:08.839
+We'll take a look at the section of the document
+
+00:32:08.840 --> 00:32:13.139
+where we talk about Git tags for an example.
+
+00:32:13.140 --> 00:32:15.760
+The `num_tags` bash code block determines
+
+00:32:15.760 --> 00:32:19.039
+how many tags there are in the Emacs Git repo.
+
+00:32:19.040 --> 00:32:21.600
+And when I hit C-c C-c on that block
+
+00:32:21.600 --> 00:32:25.059
+several days ago, when I was first creating the document,
+
+00:32:25.060 --> 00:32:28.019
+that number was 183.
+
+00:32:28.020 --> 00:32:32.169
+That result has remained cached in the document since then.
+
+00:32:32.170 --> 00:32:34.899
+And you can see a snippet of the SHA1 hash
+
+00:32:34.900 --> 00:32:38.389
+of the contents of the source block below.
+
+00:32:38.390 --> 00:32:40.800
+You can see where I referenced the result
+
+00:32:40.800 --> 00:32:44.960
+using the `sr` for string raw macro in the prose below,
+
+00:32:44.960 --> 00:32:50.509
+and how it gets rendered in the exported PDF document.
+
+00:32:50.510 --> 00:32:52.880
+All the source blocks in the exported sections
+
+00:32:52.880 --> 00:32:56.559
+of the document include cached results like this.
+
+00:32:56.560 --> 00:33:01.389
+If I export the document now, it won't take that long to do
+
+00:33:01.390 --> 00:33:03.800
+because while there are a ton of code blocks
+
+00:33:03.800 --> 00:33:09.069
+in the exported sections, they're all cached.
+
+00:33:09.070 --> 00:33:11.560
+Now let's get back to the section of the README
+
+00:33:11.560 --> 00:33:14.909
+that explains how to execute the code in the document.
+
+00:33:14.910 --> 00:33:17.640
+Here I explain that if you want to build Emacs
+
+00:33:17.640 --> 00:33:20.189
+on your computer using this document,
+
+00:33:20.190 --> 00:33:22.019
+you've got a couple of options.
+
+00:33:22.020 --> 00:33:25.649
+The first option is to manually invalidate the caches
+
+00:33:25.650 --> 00:33:28.960
+and take C-c C-c on every code block
+
+00:33:28.960 --> 00:33:30.959
+in the main document.
+
+00:33:30.960 --> 00:33:33.160
+This lets you supervise the entire process,
+
+00:33:33.160 --> 00:33:36.939
+and it also creates new cached result blocks,
+
+00:33:36.940 --> 00:33:39.239
+but it's time consuming.
+
+00:33:39.240 --> 00:33:43.440
+There is also an internal link to the main document here,
+
+00:33:43.440 --> 00:33:47.379
+and you can jump to it with C-c C-o.
+
+00:33:47.380 --> 00:33:50.040
+This is one of those intra-document links
+
+00:33:50.040 --> 00:33:52.999
+that is really tricky to get right with LaTeX,
+
+00:33:53.000 --> 00:33:56.989
+and is why we opted to use the latexmk Perl script
+
+00:33:56.990 --> 00:34:00.049
+to build the PDF version of the document.
+
+00:34:00.050 --> 00:34:01.920
+I'm mentioning it specifically here
+
+00:34:01.920 --> 00:34:05.629
+because it took me forever to figure this out.
+
+00:34:05.630 --> 00:34:07.269
+The second option you've got
+
+00:34:07.270 --> 00:34:09.280
+is to change the default header arg
+
+00:34:09.280 --> 00:34:13.739
+from `:cache yes` to `:cache no` at the top of the document.
+
+00:34:13.740 --> 00:34:16.269
+If we cruise up to the top of the document,
+
+00:34:16.270 --> 00:34:19.129
+you can see that this header argument property
+
+00:34:19.130 --> 00:34:22.440
+basically says that unless a code block
+
+00:34:22.440 --> 00:34:24.160
+explicitly says otherwise,
+
+00:34:24.160 --> 00:34:27.118
+it's by default supposed to be cached.
+
+00:34:27.119 --> 00:34:29.440
+That's how we were able to export the document
+
+00:34:29.440 --> 00:34:31.558
+before so quickly.
+
+00:34:31.559 --> 00:34:34.819
+The code block named `no_cache_no_confirm`
+
+00:34:34.820 --> 00:34:38.618
+uses the `save-excursion` and regex replace trick
+
+00:34:38.619 --> 00:34:40.348
+that I demonstrated earlier
+
+00:34:40.349 --> 00:34:42.819
+to munch the default cache header arg
+
+00:34:42.820 --> 00:34:45.409
+from "cache yes" to "cache no".
+
+00:34:45.410 --> 00:34:49.299
+And it also turns off confirmations on bash code blocks.
+
+00:34:49.300 --> 00:34:51.939
+Let's do that now.
+
+00:34:51.940 --> 00:34:54.559
+Now we'll export the document to PDF,
+
+00:34:54.560 --> 00:34:57.439
+which will ignore the cache result blocks
+
+00:34:57.440 --> 00:35:00.319
+and clone the Git repository on Savannah,
+
+00:35:00.320 --> 00:35:01.760
+create a branch that points
+
+00:35:01.760 --> 00:35:05.459
+to the most recently tagged version of Emacs 29,
+
+00:35:05.460 --> 00:35:07.759
+run configure a handful of times,
+
+00:35:07.760 --> 00:35:10.720
+installing packages to fix missing dependencies
+
+00:35:10.720 --> 00:35:12.399
+along the way,
+
+00:35:12.400 --> 00:35:16.099
+build Emacs, install Emacs in our home directory,
+
+00:35:16.100 --> 00:35:19.339
+verify that it has successfully built a binary,
+
+00:35:19.340 --> 00:35:22.549
+run it in batch mode with some sample Elisp
+
+00:35:22.550 --> 00:35:26.869
+and show the file sizes and dates of the generated files.
+
+00:35:26.870 --> 00:35:28.339
+This is gonna take a while.
+
+00:35:28.340 --> 00:35:32.829
+And while it's running, we'll pop over to our Fedora box.
+
+00:35:32.830 --> 00:35:34.680
+All right, now we'll fire up Emacs,
+
+00:35:34.680 --> 00:35:39.280
+hit `C-c C-c` on the `configure_document` code block
+
+00:35:39.280 --> 00:35:41.849
+to configure the document for RedHat
+
+00:35:41.850 --> 00:35:45.709
+since Fedora here is a RedHat based distro.
+
+00:35:45.710 --> 00:35:47.040
+Then what we'll do is we'll pop down
+
+00:35:47.040 --> 00:35:49.589
+and hit `C-c C-c`
+
+00:35:49.590 --> 00:35:53.699
+on the `rh_install_latex` code block
+
+00:35:53.700 --> 00:35:56.229
+to install the LaTeX prerequisites
+
+00:35:56.230 --> 00:35:58.459
+for this Fedora virtual machine.
+
+00:35:58.460 --> 00:36:02.589
+Finally, we'll execute the `no_cache_no_confirm` block
+
+00:36:02.590 --> 00:36:05.049
+and then kick off the export.
+
+00:36:05.050 --> 00:36:07.280
+Then we'll go and check back on what's happening
+
+00:36:07.280 --> 00:36:09.529
+on the Ubuntu box.
+
+00:36:09.530 --> 00:36:11.240
+Ooh, top looks pretty quiet.
+
+00:36:11.240 --> 00:36:14.039
+I think the export is complete.
+
+00:36:14.040 --> 00:36:17.559
+Ooh, those are the words I love to see in the status area,
+
+00:36:17.560 --> 00:36:20.609
+PDF file produced!
+
+NOTE Looking at the PDF
+
+00:36:20.610 --> 00:36:22.600
+Now I can't use my web browser
+
+00:36:22.600 --> 00:36:24.959
+to take a look at this PDF file
+
+00:36:24.960 --> 00:36:27.080
+because I haven't set up a web server
+
+00:36:27.080 --> 00:36:30.759
+or anything like that on the Ubuntu virtual machine.
+
+00:36:30.760 --> 00:36:34.439
+I can, however, use TRAMP with the ssh method
+
+00:36:34.440 --> 00:36:36.560
+to poke around on the ubuntu host
+
+00:36:36.560 --> 00:36:39.120
+on my personal version of Emacs.
+
+00:36:39.120 --> 00:36:40.939
+So let's do that.
+
+00:36:40.940 --> 00:36:44.809
+Okay, so now if we go into the source directory
+
+00:36:44.810 --> 00:36:48.039
+and then we hop into the orgdemo2 directory
+
+00:36:48.040 --> 00:36:51.619
+and then we look at the deb version of the PDF,
+
+00:36:51.620 --> 00:36:54.149
+there she blows.
+
+00:36:54.150 --> 00:36:58.160
+Now, if we go down to the Building Emacs section,
+
+00:36:58.160 --> 00:37:00.129
+we can see that it built.
+
+00:37:00.130 --> 00:37:03.839
+And if we look in the bin directory,
+
+00:37:03.840 --> 00:37:06.779
+we can see that at 17:01,
+
+00:37:06.780 --> 00:37:11.379
+that's when all of those files got created.
+
+00:37:11.380 --> 00:37:15.589
+Also the file creation date on the PDF is 17:01.
+
+00:37:15.590 --> 00:37:18.720
+So all of this code executed roughly the same time
+
+00:37:18.720 --> 00:37:21.159
+the PDF was created.
+
+00:37:21.160 --> 00:37:25.339
+All right, so now let's head back over to the Fedora box
+
+00:37:25.340 --> 00:37:27.920
+and then we'll navigate to the source directory,
+
+00:37:27.920 --> 00:37:30.119
+the orgdemo2 directory,
+
+00:37:30.120 --> 00:37:35.719
+and there is our RedHat version of the built Emacs PDF.
+
+00:37:35.720 --> 00:37:38.219
+And Bob's your uncle.
+
+00:37:38.220 --> 00:37:42.549
+And you can see it is the RedHat version of the document
+
+00:37:42.550 --> 00:37:44.939
+because this is a RedHat box.
+
+00:37:44.940 --> 00:37:51.639
+And if we go over to the What did we install? section,
+
+00:37:51.640 --> 00:37:56.049
+you can see that these binaries were built at 17:35.
+
+00:37:56.050 --> 00:37:58.699
+And now if we pop open dired
+
+00:37:58.700 --> 00:38:00.739
+and we take a look at the PDF,
+
+00:38:00.740 --> 00:38:07.329
+we can see it also was created at 17:35.
+
+00:38:07.330 --> 00:38:10.039
+All right, in the couple minutes remaining,
+
+00:38:10.040 --> 00:38:11.640
+I thought it would be a good idea
+
+00:38:11.640 --> 00:38:15.739
+just to take a look at the document
+
+00:38:15.740 --> 00:38:19.000
+and maybe just go through some of what it actually does
+
+00:38:19.000 --> 00:38:22.579
+in explaining how to build Emacs from source.
+
+00:38:22.580 --> 00:38:27.139
+We'll look at the RedHat version since we're here.
+
+00:38:27.140 --> 00:38:28.160
+And the first thing you do is
+
+00:38:28.160 --> 00:38:31.539
+you have to get access to the source code.
+
+00:38:31.540 --> 00:38:32.840
+And before you can do anything,
+
+00:38:32.840 --> 00:38:35.419
+this is a RedHat-specific section
+
+00:38:35.420 --> 00:38:38.299
+where you need to install some development tools.
+
+00:38:38.300 --> 00:38:41.539
+And this development tools group actually has Git.
+
+00:38:41.540 --> 00:38:44.640
+Now I installed Git earlier, but if you didn't do that,
+
+00:38:44.640 --> 00:38:46.939
+that would be the first thing that you need to do.
+
+00:38:46.940 --> 00:38:50.039
+We create a source directory, we cd into it,
+
+00:38:50.040 --> 00:38:53.059
+we clone the repo from Savannah.
+
+00:38:53.060 --> 00:38:56.059
+And then we start to take a look at some of the Git tags.
+
+00:38:56.060 --> 00:38:58.560
+And we showed this before where we check out
+
+00:38:58.560 --> 00:39:00.369
+how many different tags there are.
+
+00:39:00.370 --> 00:39:02.400
+And then we run this kind of funky Git command
+
+00:39:02.400 --> 00:39:06.040
+to sort of list all the tags that begin with 'emacs-29',
+
+00:39:06.040 --> 00:39:08.759
+and we sort them by when they were tagged.
+
+00:39:08.760 --> 00:39:12.400
+So we can see that Emacs 29.1.pretest
+
+00:39:12.400 --> 00:39:14.439
+is the most recent version.
+
+00:39:14.440 --> 00:39:15.880
+So that's the one we grab
+
+00:39:15.880 --> 00:39:18.659
+and that's the one we decide to build.
+
+00:39:18.660 --> 00:39:22.779
+And then we create a branch that is based on this tag.
+
+00:39:22.780 --> 00:39:27.479
+And this is dynamically generated based on what we saw here.
+
+00:39:27.480 --> 00:39:29.439
+So that's what we use here.
+
+NOTE Errors
+
+00:39:29.440 --> 00:39:32.920
+In this case, we're piping standard error
+
+00:39:32.920 --> 00:39:35.099
+to where standard out goes.
+
+00:39:35.100 --> 00:39:36.069
+That's another trick.
+
+00:39:36.070 --> 00:39:39.559
+If you want to actually see an error get created,
+
+00:39:39.560 --> 00:39:44.119
+org-mode will capture any errors that code blocks produce,
+
+00:39:44.120 --> 00:39:46.819
+and it will show you the error message in a buffer.
+
+00:39:46.820 --> 00:39:49.240
+So if you actually wanna show what it looks like
+
+00:39:49.240 --> 00:39:53.059
+when something errors out, this is the trick you have to use.
+
+00:39:53.060 --> 00:39:56.200
+And then what we do is we look for a configure script
+
+00:39:56.200 --> 00:39:57.419
+and there isn't one.
+
+00:39:57.420 --> 00:39:58.599
+And then we realize,
+
+00:39:58.600 --> 00:40:00.909
+uh-oh, we're gonna have to deal with autotools.
+
+00:40:00.910 --> 00:40:05.560
+So, you know, we run the autogen script and it complains
+
+00:40:05.560 --> 00:40:08.679
+because we're missing some prerequisites.
+
+00:40:08.680 --> 00:40:11.349
+So we have to install autoconf,
+
+00:40:11.350 --> 00:40:13.019
+and then we run it again,
+
+00:40:13.020 --> 00:40:15.959
+and finally it generates a configure script.
+
+00:40:15.960 --> 00:40:19.019
+And this is another case where I pull this number
+
+00:40:19.020 --> 00:40:21.979
+right here into the actual prose.
+
+00:40:21.980 --> 00:40:24.840
+And I can see it's, oh, it's, you know, this how many bytes.
+
+00:40:24.840 --> 00:40:26.800
+When was the last time you wrote a shell script
+
+00:40:26.800 --> 00:40:29.579
+that was this many bytes long?
+
+00:40:29.580 --> 00:40:31.320
+And then we configure the build process.
+
+00:40:31.320 --> 00:40:33.760
+And, you know, it's not gonna work right away
+
+00:40:33.760 --> 00:40:36.699
+because we don't have GNU Texinfo installed.
+
+00:40:36.700 --> 00:40:41.439
+So we gotta do that, which we do with `dnf install` here.
+
+00:40:41.440 --> 00:40:44.320
+And then there's this section that is either RedHat-
+
+00:40:44.320 --> 00:40:48.919
+or Debian-specific that talks about, like,
+
+00:40:48.920 --> 00:40:51.240
+if you don't know the name of a package
+
+00:40:51.240 --> 00:40:55.160
+that contains a given file name, how do you query it?
+
+00:40:55.160 --> 00:40:59.519
+And in the RedHat world, you use `dnf provides makeinfo`.
+
+00:40:59.520 --> 00:41:02.289
+In the Debian world, you do something entirely different.
+
+00:41:02.290 --> 00:41:06.639
+And then we have to install the `ncurses` binary.
+
+00:41:06.640 --> 00:41:10.299
+And finally we get like a minimal configuration
+
+00:41:10.300 --> 00:41:13.699
+and you can see that there's a whole bunch of nos here.
+
+00:41:13.700 --> 00:41:15.200
+So, you know, we don't have cairo,
+
+00:41:15.200 --> 00:41:18.799
+we don't have imagemagick, we don't have dbus,
+
+00:41:18.800 --> 00:41:20.600
+you know, there's a whole bunch of stuff we don't have.
+
+00:41:20.600 --> 00:41:23.880
+We don't have X, we don't have libjansson, no tree-sitter.
+
+00:41:23.880 --> 00:41:25.960
+This is really a bare-bones Emacs
+
+00:41:25.960 --> 00:41:28.639
+that is strictly terminal mode.
+
+00:41:28.640 --> 00:41:30.800
+Then we actually build Emacs, which is, you know,
+
+00:41:30.800 --> 00:41:33.259
+kind of boring, we're just gonna type make
+
+00:41:33.260 --> 00:41:35.259
+and then make is gonna run successfully.
+
+00:41:35.260 --> 00:41:37.880
+And make is gonna spew a ton of output, right?
+
+00:41:37.880 --> 00:41:41.099
+So here's where I do that /dev/null trick,
+
+00:41:41.100 --> 00:41:42.600
+where I pipe everything to /dev/null
+
+00:41:42.600 --> 00:41:45.819
+and then I, or I pipe standard output to /dev/null
+
+00:41:45.820 --> 00:41:47.520
+and then I pipe standard error
+
+00:41:47.520 --> 00:41:50.239
+to wherever standard output's going.
+
+00:41:50.240 --> 00:41:52.799
+And then at the end to say that it ran successfully,
+
+00:41:52.800 --> 00:41:55.379
+I say "Make ran successfully!"
+
+00:41:55.380 --> 00:41:57.799
+Then we take a look at the Emacs binary
+
+00:41:57.800 --> 00:41:59.879
+and you know, it's an elf binary.
+
+00:41:59.880 --> 00:42:01.720
+And, you know, because this is running on my Mac,
+
+00:42:01.720 --> 00:42:06.619
+this is an ARM-based machine, this virtual machine is.
+
+00:42:06.620 --> 00:42:10.519
+Oops, and this is a bug.
+
+00:42:10.520 --> 00:42:12.200
+This really should be a macro call,
+
+00:42:12.200 --> 00:42:14.800
+but I think I have the wrong number of curly braces
+
+00:42:14.800 --> 00:42:16.159
+or something in there.
+
+00:42:16.160 --> 00:42:19.129
+I need to figure out why that's not right.
+
+00:42:19.130 --> 00:42:21.109
+I'll look into that later.
+
+00:42:21.110 --> 00:42:23.979
+And then we install Emacs and then we kind of show
+
+00:42:23.980 --> 00:42:27.719
+like the file sizes of everything in the home directory.
+
+00:42:27.720 --> 00:42:31.989
+And then we, you know, show the binaries that got installed.
+
+NOTE Final thoughts
+
+00:42:31.990 --> 00:42:35.599
+Anyway, so this is the final thoughts section.
+
+00:42:35.600 --> 00:42:39.219
+And my final thoughts are, is I hope you enjoyed this talk
+
+00:42:39.220 --> 00:42:42.379
+and I hope you actually learned a thing or two.
+
+00:42:42.380 --> 00:42:43.360
+All right, thanks everybody.
+
+00:42:43.360 --> 00:42:45.200
+And I'll see you all next time.
diff --git a/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt b/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt
new file mode 100644
index 00000000..ccc2126f
--- /dev/null
+++ b/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt
@@ -0,0 +1,244 @@
+WEBVTT captioned by sachac
+
+NOTE Intro
+
+00:00:00.000 --> 00:00:04.199
+Hello everyone. Welcome to my talk.
+
+00:00:04.200 --> 00:00:09.359
+I am Akib Azmain Turja and my talk is titled
+
+00:00:09.360 --> 00:00:11.519
+"Eat and Eat-powered Eshell:
+
+00:00:11.520 --> 00:00:15.439
+Fast, featureful terminal inside Emacs."
+
+NOTE Benchmarking
+
+00:00:15.440 --> 00:00:22.839
+So I just claimed that Eat is a fast terminal emulator.
+
+00:00:22.840 --> 00:00:33.279
+Let me show you that. I will print a 1-megabyte sized file
+
+00:00:33.280 --> 00:00:39.039
+in the terminal using this command.
+
+00:00:39.040 --> 00:00:47.359
+It takes 0.76 seconds. Now let's benchmark term-mode.
+
+00:00:47.360 --> 00:00:54.799
+I will be in term -mode. I use the same command,
+
+00:00:54.800 --> 00:01:06.599
+and it's clearly the loser.
+
+00:01:06.600 --> 00:01:18.319
+It took 12 seconds, more than an order of magnitude slower.
+
+00:01:18.320 --> 00:01:27.279
+Let's also measure the speed of return.
+
+00:01:27.280 --> 00:01:33.479
+And it took 0.79 seconds.
+
+00:01:33.480 --> 00:01:36.159
+But this is actually a little bit slower than Eat.
+
+00:01:36.160 --> 00:01:41.799
+Why? That shouldn't happen.
+
+00:01:41.800 --> 00:01:49.719
+Anyway, hopefully that shows how fast Eat is.
+
+NOTE Running programs
+
+00:01:49.720 --> 00:01:54.439
+So let's run some extra programs in Eat,
+
+00:01:54.440 --> 00:02:05.639
+like top. You can also run htop or even btop.
+
+00:02:05.640 --> 00:02:08.559
+There is a fancy version of top.
+
+00:02:08.560 --> 00:02:20.239
+And obviously you can run Emacs in it.
+
+00:02:20.240 --> 00:02:33.879
+There is mouse support, and there is true color support.
+
+00:02:33.880 --> 00:02:38.799
+You can show any color in the terminal
+
+00:02:38.800 --> 00:02:47.079
+as long as your main display supports it.
+
+NOTE Shell integration
+
+00:02:47.080 --> 00:02:50.359
+And then there is shell integration.
+
+00:02:50.360 --> 00:02:52.399
+For example, directory tracking.
+
+00:02:52.400 --> 00:03:07.479
+Like, I can switch to some other directory
+
+00:03:07.480 --> 00:03:11.919
+and Emacs follows the shell directory.
+
+NOTE Prompt annotation
+
+00:03:11.920 --> 00:03:16.439
+Then there is prompt annotation,
+
+00:03:16.440 --> 00:03:20.319
+this column. These zeros indicate
+
+00:03:20.320 --> 00:03:27.079
+that the command has executed successfully.
+
+00:03:27.080 --> 00:03:37.679
+Then you can navigate between commands like this.
+
+NOTE Message passing
+
+00:03:37.680 --> 00:03:39.399
+There is message passing.
+
+00:03:39.400 --> 00:03:44.119
+By message passing, I mean sending something
+
+00:03:44.120 --> 00:03:46.959
+from the terminal to the host Emacs.
+
+00:03:46.960 --> 00:03:52.119
+By host Emacs, I mean Emacs running the terminal.
+
+00:03:52.120 --> 00:03:57.439
+For example I can say "hi" and it's showing "hi"
+
+00:03:57.440 --> 00:04:03.519
+in this echo area of my Emacs.
+
+NOTE Shell integration
+
+00:04:03.520 --> 00:04:08.679
+Then let's show you the killer feature of Eat,
+
+00:04:08.680 --> 00:04:20.239
+Eat's shell integration.
+
+00:04:20.240 --> 00:04:37.839
+You can run any program in it. For example: top, btop,
+
+00:04:37.840 --> 00:04:52.159
+and obviously Emacs itself.
+
+NOTE Input modes
+
+00:04:52.160 --> 00:05:03.159
+So let's discuss how to use Eat. There are four input modes.
+
+00:05:03.160 --> 00:05:07.319
+The first one is semi-char mode. That is the default mode.
+
+00:05:07.320 --> 00:05:10.919
+This is like vterm. All keys are the same to your terminal
+
+00:05:10.920 --> 00:05:17.879
+except these keys: C-c, C-x, C-g, M-x, etc.
+
+00:05:17.880 --> 00:05:20.599
+And then there is char-mode, where all keys
+
+00:05:20.600 --> 00:05:26.919
+are same to your terminal, except this M-RET key
+
+00:05:26.920 --> 00:05:29.679
+which takes you back to the semi-char mode.
+
+00:05:29.680 --> 00:05:34.559
+Then there is Emacs mode where you can select
+
+00:05:34.560 --> 00:05:39.719
+and copy from the terminal buffer.
+
+00:05:39.720 --> 00:05:42.679
+And finally, there is line mode.
+
+00:05:42.680 --> 00:05:49.199
+You can use it to use your terminal like a comint buffer.
+
+00:05:49.200 --> 00:05:55.999
+All these input modes are available in both Eat
+
+00:05:56.000 --> 00:06:05.879
+and eat-eshell mode, except this line mode--
+
+00:06:05.880 --> 00:06:10.439
+it's only available on Eat.
+
+00:06:10.440 --> 00:06:13.959
+By "on Eat", I mean the terminal you get
+
+00:06:13.960 --> 00:06:20.159
+by this eat command. By eshell, I mean
+
+00:06:20.160 --> 00:06:23.144
+when eat-eshell integration is enabled
+
+00:06:23.145 --> 00:06:28.446
+inside the eshell buffer.
+
+NOTE Documentation
+
+00:06:33.760 --> 00:06:36.719
+There is an info manual,
+
+00:06:36.720 --> 00:06:51.599
+And also the README is quite informative
+
+00:06:51.600 --> 00:06:54.999
+for you to get started.
+
+00:06:55.000 --> 00:07:13.519
+If you hit any problem,
+
+00:07:13.520 --> 00:07:22.959
+there is a dedicated chapter for debugging that,
+
+00:07:22.960 --> 00:07:26.119
+a common problems chapter.
+
+00:07:26.120 --> 00:07:27.999
+If your problem is still not fixed,
+
+00:07:28.000 --> 00:07:29.519
+please report it to me.
+
+00:07:29.520 --> 00:07:36.119
+This helps me improve it for everyone.
+
+00:07:36.120 --> 00:07:40.359
+When you report, please read this chapter
+
+00:07:40.360 --> 00:07:53.159
+so that you can make a better bug report.
+
+00:07:53.160 --> 00:07:57.639
+I am really looking forward to how people use it
+
+00:07:57.640 --> 00:07:59.079
+in their workflow.
+
+00:07:59.080 --> 00:08:03.479
+I am excited about that.
+
+00:08:03.480 --> 00:08:10.759
+Hopefully you enjoyed my talk. That was all.
+
+00:08:10.760 --> 00:08:12.720
+Enjoy EmacsConf. Goodbye.
diff --git a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt
new file mode 100644
index 00000000..ecfdd018
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt
@@ -0,0 +1,8261 @@
+WEBVTT
+
+
+00:00:53.489 --> 00:00:53.989
+[Speaker 0]: All right. I have unmuted.
+
+00:00:59.860 --> 00:01:00.180
+It's been a while since I've actually done an
+
+00:01:05.360 --> 00:01:05.860
+actual presentation. Hi.
+
+00:01:08.979 --> 00:01:09.380
+Okay. I'm going to deafen myself and mumble
+
+00:01:12.540 --> 00:01:13.040
+so that I don't get distracted by backstage
+
+00:01:16.400 --> 00:01:16.900
+chatter. Hello, everyone! Okay,
+
+00:01:17.980 --> 00:01:18.480
+so where are we? Questions,
+
+00:01:20.800 --> 00:01:21.300
+questions, questions. Okay,
+
+00:01:23.400 --> 00:01:23.600
+how easy would it be for someone else to
+
+00:01:25.960 --> 00:01:26.120
+reuse the Emacs conf strips and config to do
+
+00:01:29.380 --> 00:01:29.640
+a conf of their own? Like everything else,
+
+00:01:32.220 --> 00:01:32.560
+I have no idea if things actually work until
+
+00:01:35.140 --> 00:01:35.600
+somebody does it for, you know,
+
+00:01:37.500 --> 00:01:37.680
+to get everything to run on a computer that
+
+00:01:40.080 --> 00:01:40.200
+isn't my computer and with assumptions that
+
+00:01:40.640 --> 00:01:41.120
+aren't my assumptions.
+
+00:01:42.840 --> 00:01:43.340
+So, I have no idea. But optimistically,
+
+00:01:46.000 --> 00:01:46.480
+I have put most of the EmacsConf things,
+
+00:01:48.760 --> 00:01:49.200
+like EmacsConf, the name of the conference
+
+00:01:50.120 --> 00:01:50.620
+and things like that in variables.
+
+00:01:53.160 --> 00:01:53.320
+So if theoretically someone were to run an
+
+00:01:56.040 --> 00:01:56.320
+org mode conference or something like that,
+
+00:01:58.440 --> 00:01:58.940
+it might be possible to reuse all this code.
+
+00:02:01.960 --> 00:02:02.080
+We'll see. I don't know if it's going to be
+
+00:02:03.480 --> 00:02:03.560
+easy. I don't even know if it's going to be
+
+00:02:04.760 --> 00:02:05.260
+possible, but it might be fun to try.
+
+00:02:09.840 --> 00:02:10.199
+What tools would I like to exist in Emacs
+
+00:02:11.720 --> 00:02:12.220
+land to help with preparing the conference
+
+00:02:15.880 --> 00:02:16.320
+next time? Well, I've already been thinking
+
+00:02:18.420 --> 00:02:18.600
+about adjustments that I want to make to
+
+00:02:21.220 --> 00:02:21.720
+sub-eds so that the audio synchronization
+
+00:02:24.340 --> 00:02:24.560
+issues that we sometimes have with FFmpeg can
+
+00:02:26.600 --> 00:02:27.040
+be something that I can flag and maybe fix
+
+00:02:29.060 --> 00:02:29.560
+even while I'm watching a video.
+
+00:02:32.960 --> 00:02:33.340
+But also as much as possible,
+
+00:02:36.820 --> 00:02:37.020
+I like to leave the actual FFMPEG audio and
+
+00:02:39.220 --> 00:02:39.440
+visual tinkering with to other people like
+
+00:02:41.320 --> 00:02:41.520
+Leo, whose patience is slightly more than
+
+00:02:44.680 --> 00:02:45.180
+mine, because audio is,
+
+00:02:47.080 --> 00:02:47.260
+I still don't have the patience to sit for
+
+00:02:48.620 --> 00:02:48.900
+it. You can tell I talk really,
+
+00:02:50.540 --> 00:02:50.860
+really quickly. I'm still trying to squeeze
+
+00:02:53.000 --> 00:02:53.160
+everything into however little focus time I
+
+00:02:56.140 --> 00:02:56.280
+actually have. So it would be kind of nice to
+
+00:03:00.820 --> 00:03:01.320
+use that. Emacs is already doing quite a ton
+
+00:03:04.740 --> 00:03:04.900
+and stuffing more multimedia processing and
+
+00:03:06.180 --> 00:03:06.300
+other fun things into it might be
+
+00:03:07.000 --> 00:03:07.260
+interesting. Who knows?
+
+00:03:09.280 --> 00:03:09.440
+Oh, the other thing that I would really love
+
+00:03:12.280 --> 00:03:12.720
+to have that people always ask for is a way
+
+00:03:15.360 --> 00:03:15.860
+from Emacs to interact with the Etherpad.
+
+00:03:18.900 --> 00:03:19.340
+The Etherpad API, it seems very granular.
+
+00:03:21.120 --> 00:03:21.180
+Like, you can set the HTML of a pad,
+
+00:03:22.920 --> 00:03:23.100
+but you can't actually just append stuff to
+
+00:03:24.640 --> 00:03:24.960
+it. And I was trying to get something that
+
+00:03:26.820 --> 00:03:26.980
+could take questions from IRC and
+
+00:03:28.480 --> 00:03:28.980
+automatically push them into the pad,
+
+00:03:30.920 --> 00:03:31.400
+even from an ERC bot or whatever,
+
+00:03:34.400 --> 00:03:34.900
+but no go. If someone were to figure out some
+
+00:03:38.860 --> 00:03:39.160
+CRDT thing where we can collaboratively edit
+
+00:03:41.280 --> 00:03:41.500
+the document, that I think is the number 1
+
+00:03:42.720 --> 00:03:43.140
+request that people always have around
+
+00:03:46.560 --> 00:03:46.760
+EmacsConf. That would be really cool to do
+
+00:03:48.900 --> 00:03:49.320
+more of the conference itself from within
+
+00:03:53.240 --> 00:03:53.740
+Emacs. I don't know if actually,
+
+00:03:55.360 --> 00:03:55.860
+well, we have an org file now that launches
+
+00:03:59.440 --> 00:03:59.940
+the MPV from Emacs. But if you want to have
+
+00:04:01.960 --> 00:04:02.300
+an ex-widget or something else watching the
+
+00:04:03.740 --> 00:04:04.240
+conference from within Emacs itself.
+
+00:04:05.640 --> 00:04:06.140
+I think that will also be really cool.
+
+00:04:09.480 --> 00:04:09.980
+Yes. And then other fun stuff.
+
+00:04:12.980 --> 00:04:13.220
+OK, how can speakers and viewers help make
+
+00:04:15.280 --> 00:04:15.540
+preparing for next year's Emacs Conf even
+
+00:04:16.300 --> 00:04:16.800
+more fun for the organizers?
+
+00:04:20.440 --> 00:04:20.899
+Well, I love it when not only do the speakers
+
+00:04:24.280 --> 00:04:24.780
+do all that work to prepare their talk,
+
+00:04:27.620 --> 00:04:28.040
+but lately people have actually even been
+
+00:04:29.780 --> 00:04:30.280
+volunteering to caption their own talks.
+
+00:04:33.600 --> 00:04:33.740
+And that's great because then they know the
+
+00:04:36.000 --> 00:04:36.500
+words that they use. And if I can show them
+
+00:04:39.140 --> 00:04:39.280
+the workflow that we have so that they can do
+
+00:04:41.920 --> 00:04:42.420
+it very efficiently, because there's all
+
+00:04:44.620 --> 00:04:44.860
+these wonderful things that I do now with
+
+00:04:48.340 --> 00:04:48.580
+Subweb Waveform and Aeneas for like the
+
+00:04:49.900 --> 00:04:50.400
+forced alignment so we can get timestamps
+
+00:04:53.100 --> 00:04:53.360
+from text and all these other fun things that
+
+00:04:55.520 --> 00:04:55.680
+make getting a transcript or editing the
+
+00:04:57.380 --> 00:04:57.880
+captions fun and easy.
+
+00:05:00.780 --> 00:05:01.000
+That makes it easier for not only speakers to
+
+00:05:02.800 --> 00:05:03.280
+contribute captions for their own talks,
+
+00:05:05.220 --> 00:05:05.720
+but also interested volunteers who,
+
+00:05:07.760 --> 00:05:07.920
+as mentioned, get early access to all the
+
+00:05:09.140 --> 00:05:09.640
+talks and can watch them at leisure.
+
+00:05:12.540 --> 00:05:12.800
+And it's, you know, nice prick there.
+
+00:05:13.700 --> 00:05:14.200
+Definitely should try that.
+
+00:05:19.400 --> 00:05:19.600
+I do have some sample videos of how we use
+
+00:05:21.500 --> 00:05:22.000
+subed. But of course, in the process of
+
+00:05:24.280 --> 00:05:24.780
+shoving like 30 or 40 talks,
+
+00:05:26.600 --> 00:05:27.100
+maybe 30 talks through it for EmacsConf,
+
+00:05:29.440 --> 00:05:29.640
+this is like the stress test season for
+
+00:05:30.340 --> 00:05:30.760
+subed, which is great,
+
+00:05:31.880 --> 00:05:32.380
+I ended up adding more features.
+
+00:05:36.260 --> 00:05:36.500
+So 1 of my big to-dos afterwards is I have to
+
+00:05:38.300 --> 00:05:38.600
+document the different workflows for things
+
+00:05:40.260 --> 00:05:40.760
+like, okay, you've got a script.
+
+00:05:43.520 --> 00:05:43.700
+You can use WDiff to get word diffs so you
+
+00:05:45.600 --> 00:05:45.760
+can take the subtitles and compare them with
+
+00:05:47.540 --> 00:05:47.720
+the original script and see where the
+
+00:05:48.880 --> 00:05:49.380
+misrecognized words are.
+
+00:05:52.960 --> 00:05:53.360
+And that's great. Or you can use SubWeb
+
+00:05:54.960 --> 00:05:55.440
+Waveform to start adjusting things.
+
+00:05:56.820 --> 00:05:57.320
+Or for example, if there's a synchronization
+
+00:06:01.320 --> 00:06:01.820
+issue, I can now middle click on a subtitle
+
+00:06:03.680 --> 00:06:04.000
+where I want the subtitle to actually start
+
+00:06:06.500 --> 00:06:06.680
+and then move all the subtitles to start at
+
+00:06:09.020 --> 00:06:09.280
+that point. So it's getting to be a really
+
+00:06:10.860 --> 00:06:11.000
+elaborate tool. And I definitely need to
+
+00:06:15.220 --> 00:06:15.520
+document that and stick all the blog post
+
+00:06:17.860 --> 00:06:18.040
+links into the readme so that people can find
+
+00:06:20.560 --> 00:06:20.740
+this in the future. So it's very,
+
+00:06:23.080 --> 00:06:23.320
+very nifty. And the reason why we do this is
+
+00:06:24.720 --> 00:06:25.220
+because, well, personally,
+
+00:06:26.820 --> 00:06:27.160
+I have a hard time sitting and watching
+
+00:06:28.940 --> 00:06:29.080
+videos. I like to be able to just jump to the
+
+00:06:31.540 --> 00:06:31.780
+interesting parts or watch it at 3 times
+
+00:06:33.400 --> 00:06:33.900
+speed, which MPV lets me do.
+
+00:06:36.160 --> 00:06:36.660
+And the text makes it a lot more searchable,
+
+00:06:38.960 --> 00:06:39.460
+which is fantastic. And also because,
+
+00:06:41.000 --> 00:06:41.480
+you know, if you've got all these interesting
+
+00:06:44.220 --> 00:06:44.720
+variable names and key bindings and whatever,
+
+00:06:47.360 --> 00:06:47.520
+and the automatic subtitles just don't do the
+
+00:06:49.540 --> 00:06:49.740
+right thing. So it's nice that people do the
+
+00:06:53.360 --> 00:06:53.480
+captioning. So, yeah, so that's 1 thing that
+
+00:06:55.080 --> 00:06:55.380
+people can help with. Captioning is always
+
+00:06:57.160 --> 00:06:57.280
+very interesting. And the other thing that
+
+00:07:00.600 --> 00:07:00.780
+people can do is take the inspiration that
+
+00:07:02.860 --> 00:07:03.340
+you get from EmacsConf and from the ideas
+
+00:07:04.640 --> 00:07:05.140
+that you have when you're working with Emacs,
+
+00:07:07.280 --> 00:07:07.780
+and suggest talks for next year's EmacsConf.
+
+00:07:09.760 --> 00:07:10.260
+And it doesn't have to be a super fancy,
+
+00:07:13.740 --> 00:07:14.060
+nobody else needs to go out and do a really
+
+00:07:14.920 --> 00:07:15.420
+professional-looking video.
+
+00:07:17.480 --> 00:07:17.640
+Even though Howard has set the bar this you
+
+00:07:19.640 --> 00:07:19.840
+know it's pretty high you don't have to do
+
+00:07:22.540 --> 00:07:22.660
+that kind of thing it can be just you in a
+
+00:07:24.860 --> 00:07:25.240
+screen or even just a screen and you talking
+
+00:07:27.340 --> 00:07:27.400
+about this cool thing that you learned and
+
+00:07:29.040 --> 00:07:29.340
+they could be a video or it could be a blog
+
+00:07:31.560 --> 00:07:31.940
+post it could be something else and that
+
+00:07:34.780 --> 00:07:35.020
+those those things are fantastic because they
+
+00:07:36.960 --> 00:07:37.200
+inspire people to see what's possible with
+
+00:07:39.440 --> 00:07:39.620
+Emacs. So that's another big thing that
+
+00:07:40.800 --> 00:07:41.300
+people can do to help.
+
+00:07:44.080 --> 00:07:44.480
+And then there's sharing the word about it.
+
+00:07:46.360 --> 00:07:46.840
+So if you saw something that you really like,
+
+00:07:48.760 --> 00:07:49.080
+if you write a blog post about it or a tweet
+
+00:07:51.220 --> 00:07:51.480
+or a toot or whatever else you want to do,
+
+00:07:52.480 --> 00:07:52.980
+you make a reaction video,
+
+00:07:55.280 --> 00:07:55.780
+that helps other people discover that stuff
+
+00:07:57.800 --> 00:07:58.080
+not just today, not just next week,
+
+00:08:00.340 --> 00:08:00.540
+but you know even later as they search for
+
+00:08:04.640 --> 00:08:05.140
+these words that as people search for ideas
+
+00:08:07.360 --> 00:08:07.760
+using words that are not necessarily the ones
+
+00:08:10.320 --> 00:08:10.560
+in the video, you describing things in other
+
+00:08:11.980 --> 00:08:12.400
+ways helps with the search engine
+
+00:08:13.500 --> 00:08:13.740
+optimization, you're not really,
+
+00:08:15.200 --> 00:08:15.700
+it's just people finding stuff,
+
+00:08:17.220 --> 00:08:17.500
+which is amazing. So yes,
+
+00:08:19.000 --> 00:08:19.500
+please write about the cool things that
+
+00:08:22.840 --> 00:08:23.040
+you've seen and what you'd like to tell other
+
+00:08:25.920 --> 00:08:26.280
+people about. Suggesting ideas for talks.
+
+00:08:30.040 --> 00:08:30.340
+Yes. Making talks. All sorts of wonderful
+
+00:08:35.220 --> 00:08:35.380
+things. OK. Could you elaborate on the
+
+00:08:37.080 --> 00:08:37.320
+workflow that goes on in your mind for when
+
+00:08:38.080 --> 00:08:38.320
+approaching these things?
+
+00:08:40.260 --> 00:08:40.460
+Do you start with an Emacs org solution right
+
+00:08:42.240 --> 00:08:42.340
+off the bat at this point when faced with a
+
+00:08:44.059 --> 00:08:44.340
+task? Are there some conscious steps involved
+
+00:08:46.200 --> 00:08:46.460
+from early ideas to automation of the kind
+
+00:08:48.740 --> 00:08:49.080
+you just showed? Mostly it starts with,
+
+00:08:50.740 --> 00:08:51.040
+okay, we got to do this thing.
+
+00:08:53.720 --> 00:08:54.220
+So I have this to-do. And sometimes,
+
+00:08:55.860 --> 00:08:56.200
+like in the week before the conference,
+
+00:08:57.440 --> 00:08:57.720
+I have to think, okay,
+
+00:09:00.740 --> 00:09:01.000
+is this a top priority thing that I can do
+
+00:09:01.460 --> 00:09:01.960
+before the conference,
+
+00:09:03.480 --> 00:09:03.980
+or is it something that I can,
+
+00:09:05.800 --> 00:09:06.160
+I, I, like we can still do the conference
+
+00:09:08.200 --> 00:09:08.360
+without doing so I have to just postpone it
+
+00:09:09.860 --> 00:09:10.360
+until afterwards? So some prioritization
+
+00:09:12.160 --> 00:09:12.280
+happens. But a lot of times it's like,
+
+00:09:13.140 --> 00:09:13.320
+okay, you know, like this,
+
+00:09:14.620 --> 00:09:14.820
+there's a thing that I need to do here.
+
+00:09:15.920 --> 00:09:16.360
+I don't know how to figure it out,
+
+00:09:18.840 --> 00:09:19.080
+let me start an org Babble block and start
+
+00:09:19.760 --> 00:09:20.240
+sketching out something,
+
+00:09:22.120 --> 00:09:22.620
+you know, custom function or whatever else,
+
+00:09:23.980 --> 00:09:24.200
+and then say okay, you know,
+
+00:09:25.380 --> 00:09:25.760
+hey, that looks kind of useful,
+
+00:09:27.180 --> 00:09:27.600
+let me see if I can generalize that,
+
+00:09:29.440 --> 00:09:29.640
+and then let me stick it into the library so
+
+00:09:30.820 --> 00:09:31.320
+that I can find it next year.
+
+00:09:33.200 --> 00:09:33.520
+And that's basically how it goes.
+
+00:09:35.500 --> 00:09:36.000
+It just goes, it just like,
+
+00:09:37.540 --> 00:09:38.040
+I have a thing that I need to do.
+
+00:09:40.080 --> 00:09:40.280
+If it's, if I'm going to do it more than
+
+00:09:42.440 --> 00:09:42.720
+once, or actually even if I'm going to do it,
+
+00:09:44.640 --> 00:09:44.800
+you know, once I tried to automate it just so
+
+00:09:46.000 --> 00:09:46.500
+that I can understand it and,
+
+00:09:47.700 --> 00:09:48.100
+and then I can, I can,
+
+00:09:50.280 --> 00:09:50.440
+I can squeeze it into like the 15 minutes I
+
+00:09:54.140 --> 00:09:54.280
+actually have and I can pause and I can pick
+
+00:09:56.240 --> 00:09:56.380
+it up again and the code is still there and
+
+00:09:57.160 --> 00:09:57.660
+my notes are still there?
+
+00:10:00.600 --> 00:10:00.760
+And then every little bit of the,
+
+00:10:03.540 --> 00:10:04.040
+every little step like that builds up.
+
+00:10:05.740 --> 00:10:06.100
+So I can write a short function today,
+
+00:10:07.680 --> 00:10:07.820
+and then tomorrow when the kid was asleep,
+
+00:10:09.240 --> 00:10:09.740
+I can write a little bit more of that.
+
+00:10:11.160 --> 00:10:11.660
+And so it just goes on from there.
+
+00:10:14.260 --> 00:10:14.760
+And then I just stuff that all in there.
+
+00:10:17.660 --> 00:10:17.900
+How well does this approach allow for other
+
+00:10:19.960 --> 00:10:20.140
+organisers to do individual customisations to
+
+00:10:21.500 --> 00:10:21.640
+their liking while still being able to
+
+00:10:22.120 --> 00:10:22.620
+collaborate effectively?
+
+00:10:25.960 --> 00:10:26.460
+We've actually split things up fairly neatly
+
+00:10:28.020 --> 00:10:28.260
+in the sense that for this year,
+
+00:10:30.620 --> 00:10:30.940
+for example, most everyone else was super
+
+00:10:34.400 --> 00:10:34.900
+busy, so I did all the heavy lifting up until
+
+00:10:37.420 --> 00:10:37.540
+people were available and then they jumped in
+
+00:10:38.240 --> 00:10:38.740
+with the audio normalization.
+
+00:10:39.600 --> 00:10:39.840
+Thank you very much, Leo,
+
+00:10:41.280 --> 00:10:41.780
+for doing all of that stuff and the hosting
+
+00:10:42.840 --> 00:10:43.340
+and all the other things.
+
+00:10:45.720 --> 00:10:46.040
+So I tend to do most of the Emacs list
+
+00:10:48.080 --> 00:10:48.360
+fiddling with and the shell scripting and
+
+00:10:49.960 --> 00:10:50.460
+stuff like that, aside from the FFmpeg
+
+00:10:53.100 --> 00:10:53.520
+incantations, which are too arcane for me to
+
+00:10:56.860 --> 00:10:57.040
+even think about. And then in the course of
+
+00:10:57.980 --> 00:10:58.180
+watching me deal with like,
+
+00:10:59.440 --> 00:10:59.640
+oh, no, this video is not playing.
+
+00:11:01.080 --> 00:11:01.280
+And then they see the commands that I'm
+
+00:11:04.240 --> 00:11:04.640
+using, like play and then,
+
+00:11:05.740 --> 00:11:06.240
+you know, play a world,
+
+00:11:08.760 --> 00:11:08.920
+which is the ideas of the talk that we were
+
+00:11:10.440 --> 00:11:10.940
+having a hard time with or MPD or whatever.
+
+00:11:13.520 --> 00:11:13.740
+Then the other organizers kind of just pick
+
+00:11:15.320 --> 00:11:15.480
+that up by osmosis, because We didn't even
+
+00:11:17.160 --> 00:11:17.360
+have time to do dry runs for training this
+
+00:11:20.540 --> 00:11:20.740
+year. So it's just there's not much
+
+00:11:22.500 --> 00:11:22.660
+collaboration in the sense that I'm just
+
+00:11:24.400 --> 00:11:24.740
+basically saying, OK, these are the scripts
+
+00:11:25.760 --> 00:11:26.260
+that I'm going to write for myself.
+
+00:11:28.980 --> 00:11:29.480
+And you all figure out how to work with that.
+
+00:11:34.780 --> 00:11:35.280
+What was the hardest problem you encountered
+
+00:11:37.040 --> 00:11:37.180
+in organizing or running the conference this
+
+00:11:38.540 --> 00:11:39.040
+year and how do you deal with it?
+
+00:11:40.680 --> 00:11:40.840
+Oh, the constant, constant problem with
+
+00:11:43.340 --> 00:11:43.820
+e-mails. There's so many amazing ideas.
+
+00:11:45.660 --> 00:11:46.160
+I want to fit into the time.
+
+00:11:46.920 --> 00:11:47.420
+And then afterwards, like,
+
+00:11:49.740 --> 00:11:49.960
+Sasha, do not mess with production the day
+
+00:11:50.440 --> 00:11:50.860
+before the conference.
+
+00:11:52.480 --> 00:11:52.680
+You're going to save that for after the
+
+00:11:54.440 --> 00:11:54.920
+conference, right? So that's the hardest
+
+00:11:56.140 --> 00:11:56.420
+part, is just saying, OK,
+
+00:11:58.620 --> 00:11:58.780
+yes, that's an idea. I'm going to put that in
+
+00:12:01.400 --> 00:12:01.680
+the inbox. We're going to maybe get to that
+
+00:12:03.120 --> 00:12:03.620
+next year. But right now,
+
+00:12:05.400 --> 00:12:05.560
+these are the things that I need to do in
+
+00:12:07.200 --> 00:12:07.700
+order to get the conference off the ground
+
+00:12:14.820 --> 00:12:15.320
+reasonably in a reasonable amount of time.
+
+00:12:17.140 --> 00:12:17.640
+So earlier in the conference,
+
+00:12:19.240 --> 00:12:19.740
+then I can be like, OK,
+
+00:12:21.900 --> 00:12:22.360
+what if we do this? What if we run everything
+
+00:12:24.360 --> 00:12:24.640
+off a crontab instead of using Emacs tramp
+
+00:12:25.680 --> 00:12:26.180
+timers? Wouldn't that be great?
+
+00:12:28.380 --> 00:12:28.840
+And then I can explore all those crazy ideas.
+
+00:12:30.440 --> 00:12:30.720
+But then as we get closer and closer to date,
+
+00:12:32.440 --> 00:12:32.720
+I'm like, okay, fine. I'm going to like just
+
+00:12:34.200 --> 00:12:34.700
+capture the idea and deal with it later.
+
+00:12:36.080 --> 00:12:36.580
+So that's really, really hard for me.
+
+00:12:39.520 --> 00:12:39.800
+Year to your growth in attendance and after
+
+00:12:40.760 --> 00:12:41.260
+the conference video watching.
+
+00:12:46.240 --> 00:12:46.740
+The growth, well, first thing,
+
+00:12:51.110 --> 00:12:51.610
+there is like absolute growth in the kind of
+
+00:12:53.520 --> 00:12:53.720
+the quantity of things that people are
+
+00:12:56.820 --> 00:12:57.180
+sharing. I have a blog post about this that
+
+00:12:59.440 --> 00:12:59.820
+talks about a number of minutes of talks,
+
+00:13:02.160 --> 00:13:02.360
+and it's going up. Last year,
+
+00:13:03.740 --> 00:13:03.960
+we did 2 tracks because I couldn't fit
+
+00:13:05.460 --> 00:13:05.720
+everything in 1 day. And this year,
+
+00:13:07.000 --> 00:13:07.240
+we did 2 tracks, but even then,
+
+00:13:08.000 --> 00:13:08.360
+everything was kind of squished,
+
+00:13:09.880 --> 00:13:10.040
+and I was trying to find space in the
+
+00:13:11.940 --> 00:13:12.160
+schedule. And if you make it so that next
+
+00:13:13.500 --> 00:13:14.000
+year, we have to figure out 3 tracks,
+
+00:13:15.760 --> 00:13:16.000
+I think We have another host now,
+
+00:13:16.840 --> 00:13:17.340
+so it might be doable,
+
+00:13:19.540 --> 00:13:19.820
+which is great. Who knows?
+
+00:13:23.600 --> 00:13:23.860
+We'll see. And the other interesting thing
+
+00:13:25.320 --> 00:13:25.520
+that I'm seeing in terms of growth is that
+
+00:13:27.440 --> 00:13:27.720
+people are starting to refer to the talks
+
+00:13:29.800 --> 00:13:30.300
+from previous conferences that inspired them.
+
+00:13:32.980 --> 00:13:33.220
+So the evil plan is working in that it is
+
+00:13:35.000 --> 00:13:35.160
+getting people to get cool stuff out of their
+
+00:13:37.020 --> 00:13:37.200
+heads and into videos that have like
+
+00:13:39.560 --> 00:13:39.720
+searchable transcripts and that people can
+
+00:13:41.980 --> 00:13:42.280
+refer to as for inspiration and for showing
+
+00:13:42.980 --> 00:13:43.200
+other people, hey, look,
+
+00:13:44.060 --> 00:13:44.560
+this is what it can do.
+
+00:13:46.360 --> 00:13:46.860
+So that is fantastic growth.
+
+00:13:49.400 --> 00:13:49.540
+The actual numbers, I'm intense to look at
+
+00:13:51.160 --> 00:13:51.660
+the number of simultaneous viewers.
+
+00:13:53.860 --> 00:13:53.980
+And every so often, it's kind of nice to go
+
+00:13:55.960 --> 00:13:56.360
+through the YouTube stats or whatever.
+
+00:13:57.560 --> 00:13:57.980
+But that's not so much as a,
+
+00:14:01.120 --> 00:14:01.320
+like, I don't really keep that in mind as
+
+00:14:05.060 --> 00:14:05.560
+much, just because as long as people are
+
+00:14:07.660 --> 00:14:07.880
+connecting to the ideas and getting stuff out
+
+00:14:13.120 --> 00:14:13.440
+there and being inspired to think around
+
+00:14:16.220 --> 00:14:16.720
+more, then it's doing the thing.
+
+00:14:21.300 --> 00:14:21.460
+Cognizant is working. So where are we now for
+
+00:14:22.640 --> 00:14:23.140
+questions? Ooh, I can actually,
+
+00:14:25.320 --> 00:14:25.820
+I have ERC here. I can find eventually.
+
+00:14:28.200 --> 00:14:28.700
+1 of my screens has Dev in it.
+
+00:14:30.780 --> 00:14:31.260
+Okay, here we are. What are the other
+
+00:14:34.900 --> 00:14:35.400
+questions? Probably, Probably an IRC.
+
+00:14:39.120 --> 00:14:39.520
+Where's IRC? Dove, dove,
+
+00:14:45.700 --> 00:14:46.200
+dove. I did try to record things more slowly,
+
+00:14:47.200 --> 00:14:47.520
+and I tried several times,
+
+00:14:49.920 --> 00:14:50.020
+but I really just speak very quickly when I
+
+00:14:53.300 --> 00:14:53.480
+get excited and Emacs is very fun so it is
+
+00:14:59.960 --> 00:15:00.460
+tough oh yes okay so 1 in once yes automated
+
+00:15:04.440 --> 00:15:04.540
+present workflows oh yeah okay so where are
+
+00:15:05.660 --> 00:15:05.840
+we now for time? Oh look,
+
+00:15:07.440 --> 00:15:07.900
+it's 4.30, should we do our closing remarks
+
+00:15:09.280 --> 00:15:09.440
+or like how are things going over in the
+
+00:15:11.840 --> 00:15:12.340
+other stream? I should find out.
+
+00:15:14.760 --> 00:15:14.860
+[Speaker 1]: Yeah, I've been keeping a close eye on the
+
+00:15:16.400 --> 00:15:16.900
+other 1, but yeah, I believe that-
+
+00:15:19.800 --> 00:15:20.300
+[Speaker 0]: Yay, look at that, good timing.
+
+00:15:22.880 --> 00:15:23.300
+Okay, I have managed to zoom through the
+
+00:15:26.660 --> 00:15:26.980
+questions and we can switch over to the
+
+00:15:31.240 --> 00:15:31.740
+closing remarks how do we do this yes okay
+
+00:15:35.060 --> 00:15:35.400
+okay we're gonna oh wait people okay people
+
+00:15:37.580 --> 00:15:37.760
+who wanted to ask questions how do you want
+
+00:15:39.120 --> 00:15:39.360
+to do this? Because there are a lot of people
+
+00:15:42.040 --> 00:15:42.240
+in this 1 here too. You want to go to the
+
+00:15:48.820 --> 00:15:49.320
+other 1? 0 no, they aren't done yet.
+
+00:15:51.180 --> 00:15:51.600
+Sorry, I forgot to turn on the con tab
+
+00:15:52.500 --> 00:15:53.000
+because of course I got excited.
+
+00:15:54.840 --> 00:15:55.200
+Okay, so Jacob is still answering questions,
+
+00:15:56.940 --> 00:15:57.440
+which means I get to still answer questions.
+
+00:15:59.880 --> 00:16:00.060
+Now I'll try to be quiet and let people in
+
+00:16:01.720 --> 00:16:02.220
+the BBB room speak up if we want to.
+
+00:16:12.040 --> 00:16:12.540
+Okay that means
+
+00:16:13.585 --> 00:16:13.650
+[Speaker 3]: are going to hear.
+
+00:16:13.715 --> 00:16:13.780
+[Speaker 1]: Some more
+
+00:16:15.660 --> 00:16:16.100
+[Speaker 2]: people in the chat ideas I had on the Emacs
+
+00:16:17.500 --> 00:16:18.000
+conferences you could have like a little
+
+00:16:21.300 --> 00:16:21.660
+Emacs starter config just for like the Emacs
+
+00:16:26.720 --> 00:16:27.040
+conference where you have emms playlist and
+
+00:16:29.540 --> 00:16:29.780
+IRC help cheer function to help get you into
+
+00:16:35.200 --> 00:16:35.320
+IRC into ERC and then the to-do states that I
+
+00:16:36.060 --> 00:16:36.560
+was talking about before.
+
+00:16:40.200 --> 00:16:40.380
+So you can say, I'm watching this 1,
+
+00:16:41.320 --> 00:16:41.480
+I want to re-watch this 1,
+
+00:16:42.780 --> 00:16:43.080
+but I'm going to skip it because I'm watching
+
+00:16:52.820 --> 00:16:53.220
+something else. I used the HyperBowl package
+
+00:16:55.680 --> 00:16:55.860
+to go straight to the web pages to all the
+
+00:16:59.600 --> 00:16:59.860
+either pads but you can also have some quick
+
+00:17:04.540 --> 00:17:04.960
+functions to go into a CRDT buffer hosted
+
+00:17:07.400 --> 00:17:07.900
+buffer, where all the org mode Etherpad
+
+00:17:14.220 --> 00:17:14.440
+documents would be. And then that would get
+
+00:17:15.280 --> 00:17:15.780
+everybody using Emacs,
+
+00:17:17.680 --> 00:17:17.839
+and then they could all be chatting with each
+
+00:17:23.480 --> 00:17:23.980
+other with CRDT, with controlling Emacs.
+
+00:17:25.440 --> 00:17:25.680
+I don't know how the sub stuff,
+
+00:17:27.160 --> 00:17:27.339
+I don't know if you can get the sub stuff in
+
+00:17:29.720 --> 00:17:30.060
+there working, but yeah,
+
+00:17:32.900 --> 00:17:33.160
+It could be a good way of getting it all
+
+00:17:34.920 --> 00:17:35.420
+wrapped up together. And also,
+
+00:17:38.040 --> 00:17:38.400
+Mkron, if you ever looked at that versus
+
+00:17:40.800 --> 00:17:41.300
+Kron, Mkron is configured in Elisp.
+
+00:17:43.320 --> 00:17:43.740
+Then you can also write some custom functions
+
+00:17:44.620 --> 00:17:45.120
+in the middle of your Kron.
+
+00:17:46.800 --> 00:17:47.280
+So maybe you could make some like conditional
+
+00:17:48.960 --> 00:17:49.460
+things where you can start or stop it.
+
+00:17:56.320 --> 00:17:56.440
+And like 1 of the differences is if your
+
+00:17:58.860 --> 00:17:59.100
+computer reboots, it can start up and say,
+
+00:18:01.780 --> 00:18:02.160
+oh, I'm supposed to run this cron job at this
+
+00:18:04.960 --> 00:18:05.200
+time and then just Do the correct thing
+
+00:18:08.100 --> 00:18:08.600
+rather than losing the state Randomly because
+
+00:18:10.440 --> 00:18:10.940
+your computer lost power
+
+00:18:15.700 --> 00:18:15.900
+[Speaker 0]: Thanks for those recommendations I will add
+
+00:18:17.640 --> 00:18:18.140
+mcron to my list of things to check out.
+
+00:18:23.640 --> 00:18:24.020
+And yeah, we finally remembered to publish
+
+00:18:25.160 --> 00:18:25.400
+all those schedules as org,
+
+00:18:27.540 --> 00:18:27.840
+and I decided to just spam all the time zones
+
+00:18:28.520 --> 00:18:29.020
+with them, which was fantastic.
+
+00:18:30.480 --> 00:18:30.620
+And other people have mentioned that this is
+
+00:18:32.720 --> 00:18:32.960
+useful. We get to figure out how to use this
+
+00:18:35.740 --> 00:18:35.900
+to teach people more about what you can do
+
+00:18:36.620 --> 00:18:37.120
+with org. As you mentioned,
+
+00:18:40.920 --> 00:18:41.280
+encouraging them to tag the stuff with things
+
+00:18:43.360 --> 00:18:43.860
+that they want to attend gives us the ability
+
+00:18:45.920 --> 00:18:46.240
+to set up an agenda view for them that has
+
+00:18:47.840 --> 00:18:48.340
+the talks that are tagged with those tags.
+
+00:18:48.580 --> 00:18:48.600
+[Speaker 3]: So I
+
+00:18:49.280 --> 00:18:49.780
+[Speaker 0]: was like, okay, let's,
+
+00:18:53.880 --> 00:18:54.340
+let's teach org mode and lisp in the process
+
+00:18:58.120 --> 00:18:58.380
+of doing things. Okay,
+
+00:19:00.860 --> 00:19:01.000
+there was a question about any chance of an
+
+00:19:02.720 --> 00:19:03.220
+in person EmacsConf again someday.
+
+00:19:05.580 --> 00:19:06.000
+And I was actually at the very first EMAX
+
+00:19:11.040 --> 00:19:11.400
+Conf, which was 2013 and organized in London
+
+00:19:12.980 --> 00:19:13.080
+to take advantage of the fact that I had a
+
+00:19:15.920 --> 00:19:16.160
+business shift there. It was fantastic being
+
+00:19:18.760 --> 00:19:19.120
+in a room with 100 other people who are all
+
+00:19:19.960 --> 00:19:20.460
+really interested in Emacs,
+
+00:19:23.400 --> 00:19:23.560
+but I'm not traveling like any time for the
+
+00:19:25.560 --> 00:19:25.680
+foreseeable future, so if other people are
+
+00:19:27.500 --> 00:19:27.800
+interested in organizing something like that,
+
+00:19:29.260 --> 00:19:29.760
+I am totally happy to spread the word.
+
+00:19:31.440 --> 00:19:31.860
+It doesn't fit with my current lifestyle,
+
+00:19:32.860 --> 00:19:33.360
+but it might fit somebody's.
+
+00:19:37.080 --> 00:19:37.580
+I don't know. We're still just here.
+
+00:19:38.800 --> 00:19:39.300
+And I like the virtual conference.
+
+00:19:41.880 --> 00:19:42.120
+I really like the fact that we can bring
+
+00:19:43.780 --> 00:19:44.280
+together people from all over the world.
+
+00:19:46.720 --> 00:19:46.840
+I can take a look at my schedule with all the
+
+00:19:47.540 --> 00:19:47.720
+time constraints. Okay,
+
+00:19:49.000 --> 00:19:49.300
+I need to put this person in the morning
+
+00:19:50.720 --> 00:19:50.800
+because they're in Australia and I need to
+
+00:19:52.160 --> 00:19:52.360
+put this person in the afternoon because
+
+00:19:56.120 --> 00:19:56.360
+they're from Vancouver or from somewhere else
+
+00:19:58.020 --> 00:19:58.520
+in the Pacific time zone.
+
+00:20:01.420 --> 00:20:01.920
+And it's just this breadth of people.
+
+00:20:04.140 --> 00:20:04.300
+But the other thing that I would love for
+
+00:20:06.220 --> 00:20:06.420
+people to start thinking about is if we could
+
+00:20:08.300 --> 00:20:08.560
+have a virtual conference in other time
+
+00:20:11.320 --> 00:20:11.580
+zones, so that's easier for people in Asia
+
+00:20:12.720 --> 00:20:13.220
+Pacific or Europe to attend.
+
+00:20:16.080 --> 00:20:16.580
+And as we're getting the hang of this,
+
+00:20:17.840 --> 00:20:18.080
+this crontab-based thing,
+
+00:20:20.140 --> 00:20:20.320
+I think we might almost be at the point where
+
+00:20:22.320 --> 00:20:22.540
+I can set it up to run even when I'm
+
+00:20:24.720 --> 00:20:25.080
+sleeping. And then other people can figure
+
+00:20:26.120 --> 00:20:26.520
+out, you know, the exception handling,
+
+00:20:27.780 --> 00:20:27.900
+oh, you know, this talk needs to be
+
+00:20:30.420 --> 00:20:30.780
+restarted. Okay, just play it again and scrub
+
+00:20:31.800 --> 00:20:32.300
+around to find the right part,
+
+00:20:34.500 --> 00:20:35.000
+which means we could have replays,
+
+00:20:37.060 --> 00:20:37.560
+or we can have like the Asia Pacific
+
+00:20:39.140 --> 00:20:39.440
+Alternate Event that we had the other time
+
+00:20:45.600 --> 00:20:45.780
+where some speakers came back online and did
+
+00:20:48.840 --> 00:20:49.040
+another Q&A session just for that kind of
+
+00:20:51.360 --> 00:20:51.660
+event. So those are other cool,
+
+00:20:52.960 --> 00:20:53.460
+fun things that would love to be,
+
+00:20:57.700 --> 00:20:58.140
+would be great. Satellite events,
+
+00:20:59.480 --> 00:20:59.980
+someone mentioned in the etherpad.
+
+00:21:03.280 --> 00:21:03.520
+Some people have been organizing these,
+
+00:21:05.020 --> 00:21:05.280
+which are great. Basically a bunch of people
+
+00:21:07.800 --> 00:21:08.080
+get together in a room or 2 rooms now because
+
+00:21:10.320 --> 00:21:10.820
+of the tracks and watch Emacs Conf together.
+
+00:21:12.940 --> 00:21:13.140
+So if you have a physical meetup or if you'd
+
+00:21:15.360 --> 00:21:15.760
+like to start 1, It's basically,
+
+00:21:17.860 --> 00:21:17.960
+you know, do this, maybe have stickers if you
+
+00:21:19.900 --> 00:21:20.200
+have stickers. You know,
+
+00:21:22.540 --> 00:21:22.800
+it's just have everyone come over and hang
+
+00:21:24.440 --> 00:21:24.680
+out and meet people. I don't know.
+
+00:21:27.540 --> 00:21:27.660
+It's a thing. Specifically how to do it,
+
+00:21:29.200 --> 00:21:29.700
+I have no idea how to organize these things.
+
+00:21:32.080 --> 00:21:32.580
+But Alain does. So talk to him.
+
+00:21:35.280 --> 00:21:35.580
+[Speaker 2]: Another way of adding multiple tracks is
+
+00:21:37.640 --> 00:21:38.140
+changing it to doing it like 2 times a year,
+
+00:21:39.760 --> 00:21:40.260
+in max confidence.
+
+00:21:44.340 --> 00:21:44.640
+[Speaker 0]: Yeah, yeah, people have mentioned something
+
+00:21:50.080 --> 00:21:50.320
+like that. Or the fact that org often has
+
+00:21:51.860 --> 00:21:52.280
+like a full day of talks by itself,
+
+00:21:53.800 --> 00:21:53.980
+and actually a little bit more than a day
+
+00:21:55.440 --> 00:21:55.640
+now, because I've been squeezing things into
+
+00:21:58.260 --> 00:21:58.760
+other tracks. There has been some potential
+
+00:22:00.060 --> 00:22:00.560
+interest in having an org conf.
+
+00:22:03.240 --> 00:22:03.480
+It could be a thing. And I'd love to see
+
+00:22:05.760 --> 00:22:06.240
+also, we'd love to experiment with other
+
+00:22:08.900 --> 00:22:09.240
+formats. So there could be a bug hunting
+
+00:22:13.740 --> 00:22:13.900
+session or let's use the breakout rooms to
+
+00:22:15.920 --> 00:22:16.120
+split up into little mentoring groups and see
+
+00:22:18.040 --> 00:22:18.240
+how that works. So lots of things that we can
+
+00:22:21.460 --> 00:22:21.760
+do. They've actually finished over in the Gen
+
+00:22:24.360 --> 00:22:24.620
+track so I don't know if people want to very
+
+00:22:26.480 --> 00:22:26.920
+quickly ask questions here or if we go there.
+
+00:22:31.000 --> 00:22:31.260
+Leo has come over here instead so okay he's
+
+00:22:32.560 --> 00:22:33.060
+joining over here on the other side.
+
+00:22:35.680 --> 00:22:36.180
+Okay, hello.
+
+00:22:38.060 --> 00:22:38.560
+[Speaker 3]: I
+
+00:22:43.260 --> 00:22:43.440
+[Speaker 1]: have 1 thing to add. Yeah,
+
+00:22:46.480 --> 00:22:46.720
+[Speaker 4]: No, no, no, I was just about to say I am not
+
+00:22:48.420 --> 00:22:48.680
+hosting anymore. You 2 do a wonderful job,
+
+00:22:49.640 --> 00:22:50.140
+and I'm happy to just watch.
+
+00:22:53.860 --> 00:22:54.000
+[Speaker 1]: go ahead. Cool. Yeah, I was going to add 1
+
+00:22:56.520 --> 00:22:56.660
+quick note about any potential suggestions or
+
+00:22:58.080 --> 00:22:58.240
+recommendations for hosting Emacs on
+
+00:23:00.160 --> 00:23:00.240
+satellites. Is that, I mean,
+
+00:23:01.800 --> 00:23:02.300
+given that we are an event centered around
+
+00:23:07.360 --> 00:23:07.440
+Emacs, and Emacs is backed by the Free
+
+00:23:09.160 --> 00:23:09.320
+Software Foundation, if you do reach out to
+
+00:23:11.180 --> 00:23:11.680
+them, they're usually pretty helpful in terms
+
+00:23:14.340 --> 00:23:14.840
+of sending goodies and stickers and such.
+
+00:23:16.880 --> 00:23:17.040
+So yeah, if you give them a heads up and
+
+00:23:17.900 --> 00:23:18.400
+reach out to them in advance,
+
+00:23:20.800 --> 00:23:20.880
+you might well end up with a whole bunch of
+
+00:23:22.800 --> 00:23:23.000
+swag on your hands that you could give out
+
+00:23:24.860 --> 00:23:25.360
+during the satellite. So that's the thing.
+
+00:23:35.500 --> 00:23:36.000
+[Speaker 5]: Well, I just wanted to note it felt kind of
+
+00:23:37.640 --> 00:23:37.840
+even smoother. I mean,
+
+00:23:39.720 --> 00:23:40.160
+you guys always run a nice conference,
+
+00:23:43.180 --> 00:23:43.460
+but it felt smoother this year than ever
+
+00:23:45.600 --> 00:23:45.980
+before, which listening to your talk,
+
+00:23:48.480 --> 00:23:48.900
+Sasha, All the automation that you're doing
+
+00:23:52.400 --> 00:23:52.740
+is pretty incredible. So I think it's paying
+
+00:23:52.740 --> 00:23:53.240
+off.
+
+00:23:58.180 --> 00:23:58.320
+[Speaker 0]: Yay! You know, it is very amusing to hear the
+
+00:23:59.240 --> 00:23:59.440
+host say, okay, you know,
+
+00:24:00.720 --> 00:24:01.000
+but we've got to wrap up in the next 30
+
+00:24:02.960 --> 00:24:03.040
+seconds because Sasha's contact is going to
+
+00:24:03.240 --> 00:24:03.740
+go yoink!
+
+00:24:12.800 --> 00:24:12.980
+[Speaker 5]: I have a person I work with who keeps the
+
+00:24:15.360 --> 00:24:15.860
+trains running on time shall we say and like
+
+00:24:18.940 --> 00:24:19.140
+cuts off every meeting like the second that
+
+00:24:21.140 --> 00:24:21.320
+it's supposed to end while somebody's in
+
+00:24:24.860 --> 00:24:25.080
+mid-sentence and I hope we don't get to that
+
+00:24:25.380 --> 00:24:25.880
+point here.
+
+00:24:34.560 --> 00:24:34.740
+[Speaker 0]: So do we have any more,
+
+00:24:36.080 --> 00:24:36.360
+[Speaker 4]: oh sorry I'm reverting to the hosting,
+
+00:24:37.440 --> 00:24:37.900
+Do we have any more questions for MaxConf?
+
+00:24:39.760 --> 00:24:39.960
+Although maybe we want to switch to the other
+
+00:24:41.580 --> 00:24:41.760
+room so that we don't struggle too much to
+
+00:24:44.340 --> 00:24:44.840
+find... Organize the stuff on BBB afterwards.
+
+00:24:46.360 --> 00:24:46.620
+[Speaker 0]: Oh, the recording. Well,
+
+00:24:48.340 --> 00:24:48.640
+this is a way to make sure the recording gets
+
+00:24:54.240 --> 00:24:54.640
+online. But we could do that too.
+
+00:24:55.760 --> 00:24:56.260
+I don't know. What do y'all think?
+
+00:25:00.580 --> 00:25:00.900
+[Speaker 4]: I'm personally fine. If we want to stay here
+
+00:25:02.720 --> 00:25:03.220
+right now, the development track is currently
+
+00:25:05.280 --> 00:25:05.780
+streaming this BBB room.
+
+00:25:08.760 --> 00:25:08.940
+So are we on Jen. So we're going to leave it
+
+00:25:10.760 --> 00:25:10.840
+at is and move into closing remarks if we
+
+00:25:10.840 --> 00:25:11.340
+want.
+
+00:25:14.720 --> 00:25:15.060
+[Speaker 1]: Oh, yeah, just, I guess,
+
+00:25:17.720 --> 00:25:17.920
+make sure that every 1 of the organizers are
+
+00:25:20.740 --> 00:25:21.060
+here. I see Flo here. Let's see,
+
+00:25:23.480 --> 00:25:23.860
+Corbyn, are you here? Can you maybe speak
+
+00:25:24.280 --> 00:25:24.780
+here on BBB?
+
+00:25:32.860 --> 00:25:33.000
+[Speaker 4]: We'll give some time for Corbyn to figure it
+
+00:25:33.840 --> 00:25:34.280
+out. He did figure it out eventually
+
+00:25:36.260 --> 00:25:36.420
+yesterday, so surely today will go
+
+00:25:36.420 --> 00:25:36.920
+swimmingly.
+
+00:25:47.420 --> 00:25:47.720
+Right. We're getting everything ready,
+
+00:25:47.720 --> 00:25:48.220
+folks.
+
+00:25:57.100 --> 00:25:57.600
+[Speaker 0]: Okay. So while we sort out Corwin,
+
+00:25:58.980 --> 00:25:59.280
+can someone tell him on mumble,
+
+00:26:00.480 --> 00:26:00.980
+I guess? Because I'm not sure if he's...
+
+00:26:05.060 --> 00:26:05.420
+Anyway. I also want to say that in the Emacs
+
+00:26:06.580 --> 00:26:06.740
+conference channel, people have been
+
+00:26:08.880 --> 00:26:09.060
+mentioning that the remote stuff has been
+
+00:26:10.840 --> 00:26:10.920
+working for them. And I really do like the
+
+00:26:12.720 --> 00:26:12.880
+way that this means we can have all the
+
+00:26:13.980 --> 00:26:14.480
+videos, you know, all prepared,
+
+00:26:16.020 --> 00:26:16.220
+they're captioned, you know,
+
+00:26:17.160 --> 00:26:17.580
+We can send them to people,
+
+00:26:19.000 --> 00:26:19.500
+we can post them on the website afterwards.
+
+00:26:21.540 --> 00:26:22.020
+We can bring all these people together who
+
+00:26:23.440 --> 00:26:23.880
+might not be able to convince their companies
+
+00:26:25.240 --> 00:26:25.680
+to fly them somewhere for an Emacs
+
+00:26:29.640 --> 00:26:29.760
+conference. And also I can do this kind of
+
+00:26:32.120 --> 00:26:32.620
+prep while having my now seven-year-old still
+
+00:26:34.480 --> 00:26:34.980
+be able to wander by and whatever.
+
+00:26:36.820 --> 00:26:37.320
+Travelling is really tough.
+
+00:26:39.220 --> 00:26:39.600
+So, this is fine. This is cool.
+
+00:26:40.760 --> 00:26:41.260
+I like this. We'll keep doing it.
+
+00:26:44.240 --> 00:26:44.740
+[Speaker 4]: It's definitely playing into the low-cost
+
+00:26:46.360 --> 00:26:46.820
+conference. To do it online,
+
+00:26:48.160 --> 00:26:48.400
+So many people can just access it very
+
+00:26:53.760 --> 00:26:54.220
+easily. All right, so we've messaged Colwyn.
+
+00:26:55.760 --> 00:26:56.040
+I guess we can get started with Dalim.
+
+00:26:57.720 --> 00:26:57.900
+It should maybe take a minute or 2 to join
+
+00:27:01.400 --> 00:27:01.640
+us. Should I get started with the Final words
+
+00:27:04.540 --> 00:27:04.900
+of the day? All right,
+
+00:27:05.740 --> 00:27:06.240
+cool. All right, folks,
+
+00:27:08.220 --> 00:27:08.440
+we made it. We are at the end of the second
+
+00:27:10.320 --> 00:27:10.820
+day of EmacsConf, the second of 2 days.
+
+00:27:12.620 --> 00:27:13.040
+And the first thing I want to say is first,
+
+00:27:15.360 --> 00:27:15.660
+thank you so much for joining us for this new
+
+00:27:19.020 --> 00:27:19.200
+edition. It's personally my fourth year doing
+
+00:27:22.000 --> 00:27:22.500
+the EmacsConf, but if you go to emacsconf-org
+
+00:27:24.660 --> 00:27:25.080
+and you see the different sessions,
+
+00:27:27.380 --> 00:27:27.660
+you will realize that the first 1 was in
+
+00:27:29.820 --> 00:27:30.300
+2013, which happens to be 10 years ago.
+
+00:27:33.340 --> 00:27:33.480
+So we are obviously very excited about all of
+
+00:27:35.420 --> 00:27:35.680
+this and we'll tell you perhaps a little more
+
+00:27:38.100 --> 00:27:38.300
+about what has changed over the last 10
+
+00:27:41.760 --> 00:27:42.260
+years. As usual, you know the pre-recorded
+
+00:27:44.540 --> 00:27:44.800
+talks are available right now on the talk
+
+00:27:46.640 --> 00:27:46.800
+page, at least for all those which were
+
+00:27:48.620 --> 00:27:48.760
+pre-recorded. All the ones which happened on
+
+00:27:50.200 --> 00:27:50.320
+the Google button, it will take us a little
+
+00:27:52.360 --> 00:27:52.780
+bit of time to figure out how to,
+
+00:27:54.320 --> 00:27:54.820
+well, when to put them available.
+
+00:27:56.480 --> 00:27:56.880
+We need to do subtitles and all this jazzy
+
+00:27:59.060 --> 00:27:59.440
+stuff. And we'll also upload them to YouTube
+
+00:28:01.500 --> 00:28:02.000
+and other places once we check the audio,
+
+00:28:02.700 --> 00:28:03.200
+especially for the Q&As.
+
+00:28:05.140 --> 00:28:05.280
+We need to clean up some of the audios and
+
+00:28:08.300 --> 00:28:08.680
+make sure that we do not publish any personal
+
+00:28:13.040 --> 00:28:13.220
+stuff. All the live talks and Q&As will do
+
+00:28:14.200 --> 00:28:14.700
+this in the weeks to come.
+
+00:28:16.680 --> 00:28:16.800
+Usually, it takes us about 1 to 2 months to
+
+00:28:17.480 --> 00:28:17.640
+try to get everything out,
+
+00:28:18.280 --> 00:28:18.680
+but if it takes longer,
+
+00:28:19.540 --> 00:28:20.040
+it's fine. Eventually,
+
+00:28:20.900 --> 00:28:21.180
+everything will be there.
+
+00:28:23.360 --> 00:28:23.860
+The 1 thing we can say is that by EmacsConf
+
+00:28:26.160 --> 00:28:26.660
+2024, when it comes around,
+
+00:28:28.680 --> 00:28:28.840
+everything should have been uploaded at some
+
+00:28:30.100 --> 00:28:30.600
+point. So that's a wide window.
+
+00:28:34.340 --> 00:28:34.700
+So again, and as usual,
+
+00:28:35.980 --> 00:28:36.480
+feel free to spread the word about EmacsConf
+
+00:28:38.860 --> 00:28:38.940
+because, you know, we've been doing this for
+
+00:28:42.100 --> 00:28:42.280
+a while and every year more people show up to
+
+00:28:43.980 --> 00:28:44.440
+these events and more people watch the videos
+
+00:28:46.620 --> 00:28:47.120
+on YouTube and it's wonderful to see,
+
+00:28:49.940 --> 00:28:50.220
+you know, our main goal which is to get cool
+
+00:28:51.400 --> 00:28:51.900
+ideas out of the head of people,
+
+00:28:53.860 --> 00:28:54.280
+shared and viewed by so many people.
+
+00:28:56.660 --> 00:28:57.160
+It's always amazing. Also,
+
+00:28:58.180 --> 00:28:58.680
+I would like to ask you personally,
+
+00:28:59.700 --> 00:29:00.060
+what did you like about this conference?
+
+00:29:01.780 --> 00:29:01.980
+Or what do you like, what do you feel was
+
+00:29:02.640 --> 00:29:02.860
+better than last year,
+
+00:29:05.440 --> 00:29:05.840
+because the feedback is very useful to us.
+
+00:29:07.340 --> 00:29:07.540
+We'd also like to know if you've got any
+
+00:29:08.940 --> 00:29:09.440
+ideas for making things even better.
+
+00:29:11.680 --> 00:29:12.180
+And we've got a general conference discussion
+
+00:29:13.900 --> 00:29:14.400
+slash notes slash community message board,
+
+00:29:14.920 --> 00:29:15.420
+which is pad.emaxconf.org
+
+00:29:19.280 --> 00:29:19.640
+slash 2023. And you can also just mention
+
+00:29:22.120 --> 00:29:22.300
+them. You know, we might open this room for
+
+00:29:24.080 --> 00:29:24.520
+people to join us and chat,
+
+00:29:25.480 --> 00:29:25.960
+although Flowy and myself,
+
+00:29:27.340 --> 00:29:27.540
+your up team, needs to go to bed.
+
+00:29:28.480 --> 00:29:28.680
+So please be mindful of this.
+
+00:29:29.760 --> 00:29:30.160
+If you ask a very interesting question,
+
+00:29:32.260 --> 00:29:32.560
+We will both have to make sacrifices to stay
+
+00:29:34.300 --> 00:29:34.680
+a while longer because you're too damn
+
+00:29:38.620 --> 00:29:39.080
+interesting. Now we'd like to move into
+
+00:29:41.000 --> 00:29:41.500
+thanking all the people who make EmacsConf
+
+00:29:42.660 --> 00:29:43.080
+possible. And obviously,
+
+00:29:45.060 --> 00:29:45.560
+first, we have to thank all the speakers,
+
+00:29:46.960 --> 00:29:47.460
+all the volunteers, the participants,
+
+00:29:49.960 --> 00:29:50.240
+and to all those other people in our lives
+
+00:29:51.660 --> 00:29:51.820
+who make it possible through time and
+
+00:29:53.920 --> 00:29:54.060
+support, thank you so much for allowing us to
+
+00:29:55.760 --> 00:29:55.960
+run EmacsCount. It wouldn't happen without
+
+00:29:57.160 --> 00:29:57.440
+you, and without us, I suppose,
+
+00:29:58.540 --> 00:29:59.040
+because we are included in this.
+
+00:30:01.720 --> 00:30:02.220
+This year's conference hosts are myself,
+
+00:30:03.400 --> 00:30:03.900
+Leo Vivier, Amine Bendali,
+
+00:30:05.860 --> 00:30:06.100
+and joining our team of hosts for the first
+
+00:30:07.080 --> 00:30:07.540
+time this year, Flobby Coder.
+
+00:30:08.200 --> 00:30:08.360
+Thank you so much, Flobby.
+
+00:30:09.340 --> 00:30:09.840
+You did a wonderful job.
+
+00:30:11.600 --> 00:30:12.100
+It's right there. No, dammit.
+
+00:30:15.180 --> 00:30:15.360
+No, I can't. I can never remember if BBB is
+
+00:30:17.120 --> 00:30:17.360
+flipping stuff, so either 1 of those
+
+00:30:19.600 --> 00:30:20.020
+directions. The streams this year,
+
+00:30:21.760 --> 00:30:22.200
+as last year, were managed by Sasha Schwa,
+
+00:30:24.400 --> 00:30:24.820
+obviously. And the check-ins by Flobby Coder,
+
+00:30:27.400 --> 00:30:27.740
+and I'm in with Miscellaneous running around
+
+00:30:30.020 --> 00:30:30.520
+by Corwin Brust, who will be joining us
+
+00:30:32.000 --> 00:30:32.500
+momentarily. Apparently,
+
+00:30:34.920 --> 00:30:35.140
+all his USB failed, so he will be with us as
+
+00:30:38.140 --> 00:30:38.640
+[Speaker 3]: Roost. Rhymes with Roost.
+
+00:30:41.040 --> 00:30:41.380
+Do I have audio now? Alright,
+
+00:30:42.380 --> 00:30:42.800
+I'll go to work on my camera.
+
+00:30:43.820 --> 00:30:44.320
+Hi. Hello?
+
+00:30:45.540 --> 00:30:45.980
+[Speaker 4]: soon as he can. It's Lovely.
+
+00:30:46.640 --> 00:30:47.140
+Okay, I'll keep going.
+
+00:30:49.120 --> 00:30:49.460
+I also need to thank, well,
+
+00:30:51.100 --> 00:30:51.480
+need, no, I want to thank all the captioning
+
+00:30:53.040 --> 00:30:53.400
+volunteers, the captioners as we call them.
+
+00:30:54.380 --> 00:30:54.880
+You've got Daniel Molina,
+
+00:30:57.160 --> 00:30:57.660
+Bala Ramadoui, Durai, sorry,
+
+00:30:59.140 --> 00:30:59.640
+Bhavin Gandhi, Amin Zayed,
+
+00:31:02.220 --> 00:31:02.440
+Yoni Rapkin, who presented 1 of the talk
+
+00:31:04.240 --> 00:31:04.740
+earlier, Daniel Alejandro Tapia,
+
+00:31:06.060 --> 00:31:06.560
+Hannah Miller, Ken Huang,
+
+00:31:07.200 --> 00:31:07.700
+Jean-Christophe Ellary,
+
+00:31:10.440 --> 00:31:10.800
+and James Howell. Also thanking
+
+00:31:11.320 --> 00:31:11.760
+Jean-Christophe Ellary,
+
+00:31:13.220 --> 00:31:13.680
+Colwyn, Quiliro, Kern,
+
+00:31:15.420 --> 00:31:15.800
+and Amin Bendali for helping with the early
+
+00:31:18.120 --> 00:31:18.620
+acceptance process. Sasha,
+
+00:31:21.180 --> 00:31:21.600
+do I read this 1? It's weird to think myself.
+
+00:31:22.740 --> 00:31:23.080
+I'm gonna pat myself on the back,
+
+00:31:24.780 --> 00:31:25.280
+I guess. Go on, Sasha.
+
+00:31:26.720 --> 00:31:26.920
+I'll do it. I'll do it.
+
+00:31:29.160 --> 00:31:29.340
+It's fine. Thanks to myself for fiddling with
+
+00:31:30.900 --> 00:31:31.400
+the audio to get things nicely synced,
+
+00:31:34.120 --> 00:31:34.340
+And thanks to myself again and other people,
+
+00:31:36.840 --> 00:31:37.340
+we kept the mailing list free from spam.
+
+00:31:39.320 --> 00:31:39.440
+Because I'm not sure what happened since May,
+
+00:31:41.820 --> 00:31:42.180
+but we've been receiving about 3 to 4 spam
+
+00:31:44.760 --> 00:31:45.040
+emails. And it just happened all of a sudden,
+
+00:31:46.400 --> 00:31:46.900
+and I was really weirded out by this process.
+
+00:31:51.380 --> 00:31:51.880
+Where was I? OK, thanks to Andrew Ducurty for
+
+00:31:53.000 --> 00:31:53.500
+helping with whisper processing.
+
+00:31:55.840 --> 00:31:56.200
+Thanks to Ashki Ghekwad for design
+
+00:31:57.540 --> 00:31:58.040
+contribution. Thanks to Yoshin,
+
+00:31:59.900 --> 00:32:00.040
+our grand changro for all the music that
+
+00:32:01.840 --> 00:32:01.960
+we've been using for the last 3 years at this
+
+00:32:04.740 --> 00:32:04.840
+point, I think. Also thanks to Rye for the
+
+00:32:06.820 --> 00:32:07.020
+server that we're using for OBS streaming and
+
+00:32:07.720 --> 00:32:08.220
+for processing videos.
+
+00:32:10.440 --> 00:32:10.800
+And also thanks to the free software
+
+00:32:12.540 --> 00:32:13.040
+foundation for obviously Emacs itself,
+
+00:32:14.340 --> 00:32:14.840
+the mailing list that we use,
+
+00:32:15.340 --> 00:32:15.840
+and the media.emacsconf-org
+
+00:32:19.540 --> 00:32:19.780
+server where all of the presentations are
+
+00:32:22.200 --> 00:32:22.580
+currently hosted. We'd also like to thank
+
+00:32:23.520 --> 00:32:24.020
+BigBlueButton, Etherpad,
+
+00:32:25.920 --> 00:32:26.420
+IceCast, OBS, The Lounge,
+
+00:32:28.480 --> 00:32:28.980
+Libre.chat, FFmpeg, OpenAI,
+
+00:32:31.300 --> 00:32:31.800
+Whisper, the E-N-E-S force alignment tool,
+
+00:32:34.640 --> 00:32:35.000
+Site Transfer, SubD, and contributors to all
+
+00:32:36.900 --> 00:32:37.020
+of the tools and services we used in the
+
+00:32:37.600 --> 00:32:38.000
+making of this conference.
+
+00:32:39.520 --> 00:32:39.960
+And obviously, all of them are free,
+
+00:32:41.480 --> 00:32:41.880
+as Sasha obviously told you,
+
+00:32:44.080 --> 00:32:44.260
+and as we will be telling you again for many
+
+00:32:47.700 --> 00:32:48.060
+years to come. We'd also like again to thank
+
+00:32:49.780 --> 00:32:50.140
+everyone for attending the conference and
+
+00:32:51.820 --> 00:32:52.320
+making EmacsConf what it is.
+
+00:32:54.000 --> 00:32:54.280
+And for those who were on the general track,
+
+00:32:56.540 --> 00:32:56.720
+you know Sasha did it in parallel to the last
+
+00:32:58.980 --> 00:32:59.340
+talk we had today. She did a wonderful talk
+
+00:33:01.680 --> 00:33:02.180
+on how EmacsConf is actually run.
+
+00:33:05.620 --> 00:33:06.060
+So there's her talk, there's also an entire
+
+00:33:07.760 --> 00:33:08.260
+page on our wiki about the infrastructure
+
+00:33:09.920 --> 00:33:10.400
+that we use. So if you're interested,
+
+00:33:11.880 --> 00:33:12.380
+especially in running an event of your own,
+
+00:33:14.340 --> 00:33:14.540
+you've got as much information as you want,
+
+00:33:15.600 --> 00:33:15.940
+and as Sacha probably told you,
+
+00:33:17.600 --> 00:33:18.100
+we are available for sharing the knowledge
+
+00:33:20.820 --> 00:33:20.940
+and enabling your dreams of making a
+
+00:33:24.220 --> 00:33:24.340
+conference. Amint, do you want to take it
+
+00:33:25.680 --> 00:33:26.180
+over with the fiscal sponsorship
+
+00:33:29.320 --> 00:33:29.480
+[Speaker 1]: Yeah, sure. Let's see.
+
+00:33:30.980 --> 00:33:31.480
+Can you please scroll down a little bit?
+
+00:33:33.520 --> 00:33:34.020
+Whoever is kindly sharing the screen.
+
+00:33:34.460 --> 00:33:34.960
+[Speaker 4]: announcements? Okay. Oh,
+
+00:33:36.140 --> 00:33:36.360
+I was scrolling on my end.
+
+00:33:36.360 --> 00:33:36.860
+Sorry.
+
+00:33:41.380 --> 00:33:41.780
+[Speaker 1]: Thanks, Sasha. Yeah, so kind of super excited
+
+00:33:43.080 --> 00:33:43.300
+to finally get into this.
+
+00:33:45.220 --> 00:33:45.300
+And this is something that we've been kind of
+
+00:33:46.960 --> 00:33:47.200
+hoping to get worked out for a long time
+
+00:33:48.280 --> 00:33:48.780
+actually and it's finally here.
+
+00:33:52.900 --> 00:33:53.140
+So people might have already seen this but as
+
+00:33:57.620 --> 00:33:58.120
+of this last Thursday we're actually fiscally
+
+00:33:59.440 --> 00:33:59.940
+sponsored by the Free Software Foundation.
+
+00:34:03.480 --> 00:34:03.740
+So we joined their Working Together for Free
+
+00:34:07.720 --> 00:34:07.840
+Software program. And DFSF published the
+
+00:34:08.540 --> 00:34:08.940
+announcement on their website.
+
+00:34:11.000 --> 00:34:11.500
+You're welcome to go and check it out there.
+
+00:34:14.060 --> 00:34:14.280
+But I just want to quickly get into a little
+
+00:34:17.900 --> 00:34:18.040
+bit about what it means and some of the
+
+00:34:21.719 --> 00:34:22.000
+benefits, I guess. So as part of this working
+
+00:34:23.300 --> 00:34:23.800
+together for a free software fund,
+
+00:34:26.580 --> 00:34:26.679
+the FSF provides fiscal sponsorship for a
+
+00:34:29.060 --> 00:34:29.320
+number of important free software and new
+
+00:34:30.900 --> 00:34:31.239
+technical projects, such as the new tool
+
+00:34:33.679 --> 00:34:33.840
+chain and Replicant, which is a free fork of
+
+00:34:36.340 --> 00:34:36.540
+Android. And starting this year,
+
+00:34:38.360 --> 00:34:38.800
+EmacsConf has joined the program as well.
+
+00:34:40.960 --> 00:34:41.440
+And as a fiscal sponsor,
+
+00:34:43.520 --> 00:34:44.020
+DFSF can assist us by providing services
+
+00:34:46.500 --> 00:34:46.940
+required by a legal entity,
+
+00:34:49.300 --> 00:34:49.460
+like signing contracts and receiving and
+
+00:34:53.080 --> 00:34:53.360
+processing payments. So to provide some
+
+00:34:56.820 --> 00:34:57.040
+context, eMAXConf is and always has been an
+
+00:34:58.740 --> 00:34:58.940
+independent initiative organized by a very
+
+00:34:59.700 --> 00:35:00.140
+small number of people,
+
+00:35:02.120 --> 00:35:02.560
+a small team of people without any corporate
+
+00:35:05.980 --> 00:35:06.220
+sponsors. And that's important in part
+
+00:35:08.880 --> 00:35:09.380
+because I believe part of our message is that
+
+00:35:11.860 --> 00:35:12.040
+we want to showcase that everybody can do
+
+00:35:14.200 --> 00:35:14.380
+this and organize a conference like this no
+
+00:35:17.200 --> 00:35:17.560
+matter how small your team is and how modest
+
+00:35:19.540 --> 00:35:19.900
+your resources are, which we will actually
+
+00:35:21.260 --> 00:35:21.560
+get into a little bit later in the closing
+
+00:35:25.760 --> 00:35:25.900
+remarks. But yeah, so now having the FSF as
+
+00:35:27.780 --> 00:35:28.020
+our fiscal sponsor, we're in a better
+
+00:35:30.200 --> 00:35:30.680
+position to accept donations as 1 potential
+
+00:35:33.360 --> 00:35:33.860
+way to contribute or help the conference.
+
+00:35:36.360 --> 00:35:36.860
+And just to clarify, we're currently not
+
+00:35:39.360 --> 00:35:39.520
+struggling at all to cover these costs of the
+
+00:35:41.000 --> 00:35:41.240
+servers and such, which we will get into
+
+00:35:44.720 --> 00:35:45.060
+again. But this is just 1 extra avenue if
+
+00:35:46.720 --> 00:35:46.880
+people are feeling generous and would like to
+
+00:35:47.880 --> 00:35:48.380
+help, it's much appreciated.
+
+00:35:54.400 --> 00:35:54.620
+And yeah, so having a 501c3 nonprofit like
+
+00:35:57.160 --> 00:35:57.660
+the FSF, as a fiscal sponsor,
+
+00:36:00.060 --> 00:36:00.340
+many donors will receive tax benefits that
+
+00:36:02.180 --> 00:36:02.360
+they otherwise wouldn't receive if they were
+
+00:36:04.540 --> 00:36:04.680
+to like donate to like individuals running a
+
+00:36:07.500 --> 00:36:07.720
+project directly. And also donors can know
+
+00:36:08.860 --> 00:36:09.140
+that, you know, the funds that they're
+
+00:36:10.920 --> 00:36:11.420
+donating are being handled by an accountable
+
+00:36:14.060 --> 00:36:14.540
+institution. And also importantly,
+
+00:36:16.020 --> 00:36:16.520
+when donating through the FSF,
+
+00:36:19.960 --> 00:36:20.460
+Let's see, text changing.
+
+00:36:23.320 --> 00:36:23.560
+Okay, yeah. People can donate without having
+
+00:36:24.600 --> 00:36:25.100
+to run any non-free JavaScript,
+
+00:36:27.380 --> 00:36:27.880
+which is nice. Because unfortunately,
+
+00:36:29.440 --> 00:36:29.540
+usually these days on the web when you do
+
+00:36:30.600 --> 00:36:30.880
+want to buy something or spend money,
+
+00:36:31.840 --> 00:36:32.340
+you have to run non-free JavaScript,
+
+00:36:35.020 --> 00:36:35.220
+which isn't the case when donating through
+
+00:36:37.720 --> 00:36:38.160
+the FSF. Yeah, so we just joined,
+
+00:36:39.000 --> 00:36:39.500
+as I said, on Thursday,
+
+00:36:43.020 --> 00:36:43.220
+and we've already received our very first
+
+00:36:45.400 --> 00:36:45.640
+donation, so we'd like to extend our thanks
+
+00:36:46.800 --> 00:36:47.300
+and gratitude to Scott Ranby,
+
+00:36:49.480 --> 00:36:49.980
+who is actually our first ever kind donor.
+
+00:36:51.820 --> 00:36:52.320
+They agreed to be thanked publicly.
+
+00:36:55.900 --> 00:36:56.200
+So thank you, Scott. And yeah,
+
+00:36:57.040 --> 00:36:57.540
+so this is a recent development.
+
+00:36:59.800 --> 00:36:59.980
+And we plan to add much more information and
+
+00:37:01.880 --> 00:37:02.020
+details about this whole situation to the
+
+00:37:04.200 --> 00:37:04.700
+wiki, including links to the announcements,
+
+00:37:06.280 --> 00:37:06.780
+some more information about the program,
+
+00:37:08.040 --> 00:37:08.540
+and our donation page of course,
+
+00:37:12.880 --> 00:37:13.140
+in the new future. And in the meantime I'm
+
+00:37:15.080 --> 00:37:15.240
+also happy to help answer any questions as
+
+00:37:17.900 --> 00:37:18.400
+best as I can, So feel free to ping me on IRC
+
+00:37:19.640 --> 00:37:20.140
+or just email me at bandalia.guinard.org.
+
+00:37:26.140 --> 00:37:26.640
+[Speaker 3]: Which gives me a chance to jump in and just
+
+00:37:29.060 --> 00:37:29.560
+point out 1 question that we know people have
+
+00:37:32.680 --> 00:37:32.960
+is just about how much of the money goes to
+
+00:37:35.660 --> 00:37:35.860
+FSF when you make a contribution through the
+
+00:37:36.860 --> 00:37:37.360
+fund toward EmacsConf?
+
+00:37:40.560 --> 00:37:40.760
+[Speaker 1]: Right, exactly. Yeah, and the answer to that
+
+00:37:44.540 --> 00:37:44.720
+is that it's 10%, which is for supporting the
+
+00:37:46.720 --> 00:37:46.960
+operation of the Working Together program and
+
+00:37:48.800 --> 00:37:49.300
+also the shared GNU infrastructure,
+
+00:37:52.040 --> 00:37:52.540
+which we as EmacsConf use and depend on,
+
+00:37:54.920 --> 00:37:55.420
+along with several hundred GNU packages.
+
+00:37:59.860 --> 00:38:00.060
+So, yeah, and it covers things like
+
+00:38:03.060 --> 00:38:03.480
+transaction costs that the FSF's payment
+
+00:38:04.000 --> 00:38:04.500
+processor charges?
+
+00:38:10.040 --> 00:38:10.240
+[Speaker 3]: And then again I'll come back to say this is
+
+00:38:12.280 --> 00:38:12.780
+a real fair price. I have some experience
+
+00:38:15.300 --> 00:38:15.540
+with working with payment processing and
+
+00:38:19.120 --> 00:38:19.440
+things like this and like 10% that's a that's
+
+00:38:22.440 --> 00:38:22.940
+something that you see in Bigger businesses
+
+00:38:25.900 --> 00:38:26.380
+that have a model around making money on that
+
+00:38:29.160 --> 00:38:29.280
+Transaction so to be able to do that as a
+
+00:38:31.400 --> 00:38:31.760
+nonprofit. We're taking advantage of a really
+
+00:38:32.400 --> 00:38:32.900
+awesome thing there.
+
+00:38:35.860 --> 00:38:36.060
+[Speaker 1]: Yeah, exactly. And yeah,
+
+00:38:36.820 --> 00:38:37.120
+just for a quick plug,
+
+00:38:38.860 --> 00:38:39.060
+the FSF is actually doing an end of year
+
+00:38:41.780 --> 00:38:42.020
+fundraiser right now. So if you want to go
+
+00:38:44.220 --> 00:38:44.700
+donate to them, or if you donate to us,
+
+00:38:47.760 --> 00:38:48.260
+a part of it will go to the FSF to support
+
+00:38:51.400 --> 00:38:51.900
+their work on free software,
+
+00:38:53.000 --> 00:38:53.500
+helping grow the movement,
+
+00:38:56.000 --> 00:38:56.120
+and spread the word about it.
+
+00:39:02.080 --> 00:39:02.360
+So, thank you. And I guess now is a good time
+
+00:39:05.380 --> 00:39:05.800
+for me to pass the baton to the next
+
+00:39:08.160 --> 00:39:08.320
+organizer who wants to talk about some of the
+
+00:39:11.040 --> 00:39:11.540
+specs of the servers that we use right now.
+
+00:39:14.720 --> 00:39:14.860
+[Speaker 0]: We actually don't have to go about this in
+
+00:39:16.560 --> 00:39:16.840
+detail. I just put it in there in case people
+
+00:39:19.280 --> 00:39:19.540
+were curious about how much it takes to run
+
+00:39:20.740 --> 00:39:21.240
+something like this. Not a lot.
+
+00:39:22.900 --> 00:39:23.100
+It's just really, you know,
+
+00:39:26.100 --> 00:39:26.260
+2 days of computing is not that expensive in
+
+00:39:29.060 --> 00:39:29.480
+today's world, and all the rest is just
+
+00:39:32.220 --> 00:39:32.640
+volunteer time and a heck of a lot of Emacs
+
+00:39:34.080 --> 00:39:34.280
+lists as previously discussed in our
+
+00:39:41.020 --> 00:39:41.180
+presentation. So, we'll just skip through
+
+00:39:42.280 --> 00:39:42.440
+that instead of reading all of it.
+
+00:39:43.580 --> 00:39:43.840
+Unless people are specifically curious,
+
+00:39:44.640 --> 00:39:45.140
+you can ask questions afterwards.
+
+00:39:46.320 --> 00:39:46.820
+But yes, happy birthday,
+
+00:39:49.200 --> 00:39:49.440
+EmacsConf, and here's another wonderful 10
+
+00:39:49.440 --> 00:39:49.940
+years.
+
+00:39:56.820 --> 00:39:57.040
+[Speaker 4]: All right, I think we are at the end of the
+
+00:39:58.820 --> 00:39:59.320
+closing remarks. Have I forgotten anything?
+
+00:40:00.060 --> 00:40:00.380
+We haven't had Flowy yet,
+
+00:40:03.340 --> 00:40:03.560
+I believe. Sorry for putting you on the spot
+
+00:40:03.560 --> 00:40:04.060
+again.
+
+00:40:07.940 --> 00:40:08.400
+[Speaker 6]: I guess I have nothing really to say besides
+
+00:40:09.280 --> 00:40:09.780
+what you have already said.
+
+00:40:12.560 --> 00:40:13.060
+So thank everybody to make a presentation,
+
+00:40:15.360 --> 00:40:15.640
+to do anything here. Thanks for all of you
+
+00:40:16.880 --> 00:40:17.080
+that I could be a part of it.
+
+00:40:17.880 --> 00:40:18.380
+I have to admit it also.
+
+00:40:21.020 --> 00:40:21.520
+So thank you all. And yeah,
+
+00:40:22.540 --> 00:40:23.040
+nothing to say probably.
+
+00:40:25.560 --> 00:40:25.840
+[Speaker 1]: And I also want to send the thanks to Flowy
+
+00:40:27.260 --> 00:40:27.380
+for, you know, stepping in.
+
+00:40:29.340 --> 00:40:29.480
+We kind of like throw this on you like at the
+
+00:40:31.560 --> 00:40:31.720
+last second, but Flowy actually stepped in
+
+00:40:33.840 --> 00:40:34.160
+and hosted graciously a couple of the talks
+
+00:40:34.920 --> 00:40:35.140
+on the Dev track today.
+
+00:40:36.880 --> 00:40:37.200
+So, which I think went very well.
+
+00:40:38.480 --> 00:40:38.980
+So congrats and thank you.
+
+00:40:39.720 --> 00:40:40.220
+[Speaker 6]: Thank you.
+
+00:40:41.420 --> 00:40:41.920
+[Speaker 4]: Speaking of which we were not monsters.
+
+00:40:43.420 --> 00:40:43.660
+We kindly asked Floey yesterday because
+
+00:40:44.540 --> 00:40:44.760
+everything was going so well.
+
+00:40:45.520 --> 00:40:45.600
+And now we can say it,
+
+00:40:46.840 --> 00:40:47.240
+you know, I can say things are going well.
+
+00:40:48.760 --> 00:40:48.880
+Usually it's a bad thing when you're doing a
+
+00:40:50.500 --> 00:40:50.740
+broadcast to say things are going well right
+
+00:40:53.080 --> 00:40:53.300
+now because it tends to backfires at some
+
+00:40:56.980 --> 00:40:57.480
+[Speaker 3]: Hours of notice, hours of notice.
+
+00:40:58.900 --> 00:40:59.400
+That, that's planning.
+
+00:41:02.420 --> 00:41:02.920
+[Speaker 4]: point. But yesterday- So hours of notice,
+
+00:41:04.840 --> 00:41:05.340
+Flowy didn't sleep all that much because we
+
+00:41:06.500 --> 00:41:06.980
+tasked him with hosting,
+
+00:41:08.440 --> 00:41:08.720
+so he was turning in his bed all night
+
+00:41:09.960 --> 00:41:10.460
+thinking, oh, I'm going to host MaxCons.
+
+00:41:13.660 --> 00:41:13.860
+But Flowy, you did a wonderful job and I am
+
+00:41:15.720 --> 00:41:15.940
+so glad that not only you were able to join
+
+00:41:17.760 --> 00:41:17.900
+us again this year, but that also you were
+
+00:41:19.760 --> 00:41:20.140
+able to host. Because last year,
+
+00:41:20.900 --> 00:41:21.140
+had we asked you to host,
+
+00:41:21.820 --> 00:41:22.320
+you would have said no.
+
+00:41:25.120 --> 00:41:25.580
+First time we asked you this year was yes,
+
+00:41:27.100 --> 00:41:27.600
+but give me some time to think about it.
+
+00:41:30.100 --> 00:41:30.600
+[Speaker 6]: Next year it is yes completely.
+
+00:41:32.780 --> 00:41:32.940
+[Speaker 4]: If we've done a good job,
+
+00:41:33.560 --> 00:41:34.060
+it will be yes directly.
+
+00:41:38.000 --> 00:41:38.080
+All right, so since we are at the end of the
+
+00:41:41.140 --> 00:41:41.320
+thankings and I did say europe team needs to
+
+00:41:43.580 --> 00:41:43.700
+go to bed in about 12 minutes that leaves us
+
+00:41:45.940 --> 00:41:46.440
+about 12 minutes to try to answer as many
+
+00:41:47.840 --> 00:41:48.340
+points as you'd like to raise.
+
+00:41:50.640 --> 00:41:50.940
+Sasha, I think the Q&A room is still open
+
+00:41:52.680 --> 00:41:53.100
+because we are technically still in the Emacs
+
+00:41:53.560 --> 00:41:54.020
+conference room currently.
+
+00:41:56.480 --> 00:41:56.660
+So, if you... We're going to put the link
+
+00:41:57.840 --> 00:41:58.000
+again if you need to find it.
+
+00:41:59.800 --> 00:42:00.300
+Otherwise, scroll up and find the 1 on there.
+
+00:42:04.400 --> 00:42:04.900
+[Speaker 0]: I think I can change the redirect.
+
+00:42:07.240 --> 00:42:07.740
+Maybe. I will go figure this out.
+
+00:42:08.600 --> 00:42:09.100
+Keep talking in the background.
+
+00:42:12.160 --> 00:42:12.280
+[Speaker 4]: Right. So, whilst we figure this out in the
+
+00:42:13.740 --> 00:42:13.860
+background, it would be nice if you could
+
+00:42:14.640 --> 00:42:15.040
+join us and ask questions,
+
+00:42:15.900 --> 00:42:16.020
+either by dropping them.
+
+00:42:18.080 --> 00:42:18.340
+I see plenty of people have already left some
+
+00:42:19.440 --> 00:42:19.840
+comments. We have 2 places,
+
+00:42:21.820 --> 00:42:22.240
+right now it's more about a chitchatting
+
+00:42:23.000 --> 00:42:23.360
+about the end of the conference.
+
+00:42:24.160 --> 00:42:24.660
+If you've got general feedback,
+
+00:42:26.160 --> 00:42:26.400
+we've mentioned it at the top,
+
+00:42:28.580 --> 00:42:28.780
+but if you want to write your general
+
+00:42:30.920 --> 00:42:31.080
+feedback here, it will find its way at some
+
+00:42:32.960 --> 00:42:33.160
+point in the years of the relevant people who
+
+00:42:33.920 --> 00:42:34.280
+can make things change.
+
+00:42:35.920 --> 00:42:36.040
+So don't worry too much about where you put
+
+00:42:37.120 --> 00:42:37.540
+your feedback, it'll be fine.
+
+00:42:40.240 --> 00:42:40.440
+But now, how about we start reading some of
+
+00:42:42.700 --> 00:42:43.080
+the notes that people have said or questions
+
+00:42:43.080 --> 00:42:43.260
+that
+
+00:42:47.094 --> 00:42:47.151
+[Speaker 3]: have been asked. So here's 1 for Amin.
+
+00:42:48.460 --> 00:42:48.820
+Do you have any stats on how many people
+
+00:42:52.200 --> 00:42:52.700
+watched for an IRC and BBB over the 2 days?
+
+00:42:58.140 --> 00:42:58.620
+[Speaker 1]: Right, yeah, so I guess for IceCast,
+
+00:43:00.040 --> 00:43:00.540
+which I can answer more readily,
+
+00:43:03.760 --> 00:43:04.260
+I think yesterday we were averaging around
+
+00:43:08.120 --> 00:43:08.620
+240, 250 concurrent viewers at a time.
+
+00:43:12.760 --> 00:43:13.260
+And today, so today it varied.
+
+00:43:16.300 --> 00:43:16.740
+I think the maximum was again like around 200
+
+00:43:19.600 --> 00:43:19.820
+to 20-ish with the average being more around
+
+00:43:24.960 --> 00:43:25.460
+180, 190 viewers. We've had a lot of hits to
+
+00:43:28.700 --> 00:43:29.180
+the actual web pages for the Emacs Conf Wiki
+
+00:43:31.720 --> 00:43:31.960
+or the pad, which are all being served on 1
+
+00:43:34.740 --> 00:43:35.140
+server. I pulled some numbers.
+
+00:43:36.140 --> 00:43:36.640
+I'm not sure if they're correct.
+
+00:43:38.480 --> 00:43:38.900
+So I'm like a little bit hesitant to discuss
+
+00:43:41.760 --> 00:43:41.980
+them. Safe to say they're easily in the tens
+
+00:43:44.380 --> 00:43:44.580
+of thousands, maybe in the hundreds of
+
+00:43:47.960 --> 00:43:48.420
+thousands of total visits over the past,
+
+00:43:52.540 --> 00:43:53.040
+[Speaker 0]: Maybe the pad makes a lot of small requests.
+
+00:43:53.940 --> 00:43:54.400
+[Speaker 1]: I guess, 48 hours. Right,
+
+00:43:57.040 --> 00:43:57.200
+okay. So, yeah, that's why I'm hesitant to
+
+00:43:59.240 --> 00:43:59.380
+say. But yeah, easily in the thousands or
+
+00:44:01.860 --> 00:44:02.020
+[Speaker 3]: You know
+
+00:44:02.980 --> 00:44:03.260
+[Speaker 4]: who you are anyway, the crowd,
+
+00:44:04.080 --> 00:44:04.240
+you know how many you are,
+
+00:44:05.340 --> 00:44:05.840
+you do not need exact numbers
+
+00:44:08.720 --> 00:44:09.220
+[Speaker 1]: tens of thousands. Yeah,
+
+00:44:11.000 --> 00:44:11.200
+so I don't have the exact numbers but I guess
+
+00:44:13.260 --> 00:44:13.460
+it's always kind of fun to maybe try to pull
+
+00:44:15.700 --> 00:44:15.840
+some numbers and look at it that way but you
+
+00:44:18.080 --> 00:44:18.580
+know of course we all know that what we do,
+
+00:44:19.720 --> 00:44:20.220
+every single person counts.
+
+00:44:24.320 --> 00:44:24.660
+So I don't know, trying to look at turning
+
+00:44:27.900 --> 00:44:28.400
+people into abstract numbers isn't,
+
+00:44:30.480 --> 00:44:30.820
+I don't know, inspiring to me very much,
+
+00:44:31.840 --> 00:44:32.340
+but it's cool. So.
+
+00:44:36.020 --> 00:44:36.140
+[Speaker 4]: All right. So how about we go into the
+
+00:44:37.640 --> 00:44:38.140
+questions. So Sasha is now in the viewport
+
+00:44:39.480 --> 00:44:39.780
+where we can see some questions.
+
+00:44:41.200 --> 00:44:41.700
+So how about we take some of them.
+
+00:44:43.900 --> 00:44:44.060
+I can read them or if anyone of the
+
+00:44:45.020 --> 00:44:45.520
+organizers wants to do this,
+
+00:44:46.720 --> 00:44:47.040
+feel free, especially those who haven't
+
+00:44:48.040 --> 00:44:48.540
+talked to a whole lot this year.
+
+00:44:53.000 --> 00:44:53.480
+Cohen, do you want to try it?
+
+00:44:54.760 --> 00:44:55.260
+[Speaker 3]: I didn't make my motive clear.
+
+00:44:59.220 --> 00:44:59.500
+I did and I'm done. I took the first
+
+00:45:01.120 --> 00:45:01.320
+question, I picked the bottom question off
+
+00:45:02.920 --> 00:45:03.120
+the list because I knew exactly who it was
+
+00:45:05.140 --> 00:45:05.500
+going for. The person who wants to answer or
+
+00:45:07.080 --> 00:45:07.580
+direct the next question is welcome.
+
+00:45:10.520 --> 00:45:10.760
+Sorry, I could have given a little better
+
+00:45:11.400 --> 00:45:11.680
+stage direction there.
+
+00:45:13.660 --> 00:45:14.160
+I'm not prepared to answer how many emaxers
+
+00:45:16.080 --> 00:45:16.560
+are from Nordic countries other than to say
+
+00:45:17.680 --> 00:45:18.180
+definitely yes and several.
+
+00:45:21.900 --> 00:45:22.080
+And I haven't looked close enough at the
+
+00:45:22.580 --> 00:45:23.080
+suggestion yet.
+
+00:45:27.280 --> 00:45:27.720
+[Speaker 4]: Right, okay. I can take the question about
+
+00:45:30.020 --> 00:45:30.060
+the BBB limitations. So it's the second 1,
+
+00:45:31.560 --> 00:45:32.060
+the red 1. Small suggestion,
+
+00:45:33.120 --> 00:45:33.520
+likely out of your control,
+
+00:45:36.340 --> 00:45:36.660
+but anyway, the blue button seems to work
+
+00:45:38.300 --> 00:45:38.560
+very well, but it would be a bit more
+
+00:45:40.680 --> 00:45:40.840
+watchable if the webcam frames were lined up
+
+00:45:42.660 --> 00:45:42.920
+vertically on 1 side, because it would allow
+
+00:45:44.760 --> 00:45:44.920
+the screen share frames to be larger and
+
+00:45:47.080 --> 00:45:47.560
+would make much better use of the viewable
+
+00:45:49.740 --> 00:45:50.240
+space. Maybe worth a bug report to upstream.
+
+00:45:53.080 --> 00:45:53.420
+And I agree, BBB has been really good.
+
+00:45:54.400 --> 00:45:54.900
+Amine, did you want to say something?
+
+00:45:55.120 --> 00:45:55.240
+[Speaker 3]: I'm going
+
+00:45:56.760 --> 00:45:56.880
+[Speaker 1]: to continue and then I'll add something at
+
+00:45:56.960 --> 00:45:57.460
+the end.
+
+00:45:59.960 --> 00:46:00.100
+[Speaker 4]: Okay, sure. So BBB has been really good for
+
+00:46:04.440 --> 00:46:04.940
+us. It allows us to have many parallel rooms
+
+00:46:07.700 --> 00:46:07.800
+which are all recording service side at the
+
+00:46:09.920 --> 00:46:10.120
+same time. And it's wonderful for us because
+
+00:46:11.260 --> 00:46:11.580
+we can gather. At some point,
+
+00:46:13.520 --> 00:46:13.820
+I think last year, we had 4 concurrent talks
+
+00:46:15.220 --> 00:46:15.360
+being recorded because people were just so
+
+00:46:17.040 --> 00:46:17.540
+interested in what was going on in rooms.
+
+00:46:19.040 --> 00:46:19.540
+And you know, we only,
+
+00:46:21.660 --> 00:46:22.160
+like this year, the co-organizers,
+
+00:46:23.720 --> 00:46:23.940
+it's the 5 people you see in a room
+
+00:46:26.760 --> 00:46:26.880
+currently. And if we had all of us to be in a
+
+00:46:28.440 --> 00:46:28.580
+separate room, having to record on the
+
+00:46:29.340 --> 00:46:29.640
+machine, it wouldn't work.
+
+00:46:32.120 --> 00:46:32.280
+So we are able to demultiply the amount of
+
+00:46:33.560 --> 00:46:34.060
+content that we produce thanks to BBB,
+
+00:46:37.540 --> 00:46:37.700
+but sadly, we are also quite limited by the
+
+00:46:39.560 --> 00:46:39.720
+interface of BBB. Another problem that is
+
+00:46:43.860 --> 00:46:44.360
+dear to me is that audio tends to be fairly
+
+00:46:46.240 --> 00:46:46.740
+bad at some points depending on the speakers
+
+00:46:50.080 --> 00:46:50.580
+because BBB has really funky audio correction
+
+00:46:51.500 --> 00:46:51.820
+stuff going in the background,
+
+00:46:52.540 --> 00:46:52.900
+and sometimes it works,
+
+00:46:53.760 --> 00:46:54.260
+sometimes it doesn't work,
+
+00:46:55.480 --> 00:46:55.980
+and especially on my machine,
+
+00:46:58.320 --> 00:46:58.480
+the specs are above in the document if you're
+
+00:47:02.040 --> 00:47:02.220
+interested, but BBB and OBS do not play well
+
+00:47:04.640 --> 00:47:04.820
+at all. You might have heard me speaking with
+
+00:47:06.120 --> 00:47:06.500
+some clicks in my voice at some point.
+
+00:47:07.600 --> 00:47:08.100
+That's another problem of BBB.
+
+00:47:09.240 --> 00:47:09.520
+Anyway, I mean, you wanted to add something
+
+00:47:09.720 --> 00:47:10.220
+as well.
+
+00:47:14.060 --> 00:47:14.340
+[Speaker 1]: Right, yeah, I kind of empathize and also
+
+00:47:17.220 --> 00:47:17.640
+emphasize the problems with audio on BBB
+
+00:47:19.860 --> 00:47:20.360
+sometimes, but about the specific suggestion
+
+00:47:22.540 --> 00:47:22.760
+here of like lighting things up at least
+
+00:47:24.780 --> 00:47:24.960
+visually, I think that's like much more
+
+00:47:26.940 --> 00:47:27.440
+doable even if you don't open a bug upstream.
+
+00:47:30.140 --> 00:47:30.520
+I believe the Free Software Foundation for
+
+00:47:31.360 --> 00:47:31.860
+their LibrePlanet conference,
+
+00:47:33.740 --> 00:47:34.200
+either last year or the year before,
+
+00:47:36.500 --> 00:47:36.760
+they had some custom, like clients signed
+
+00:47:38.000 --> 00:47:38.500
+into browser, custom CSS,
+
+00:47:40.520 --> 00:47:40.720
+where it would do exactly something like
+
+00:47:44.440 --> 00:47:44.820
+that. It would like enlarge the shared screen
+
+00:47:46.840 --> 00:47:47.000
+on the 1 side and then stack up all of the
+
+00:47:48.000 --> 00:47:48.280
+webcam feeds on 1 side.
+
+00:47:50.280 --> 00:47:50.440
+So we might be able to use something like
+
+00:47:50.440 --> 00:47:50.940
+that.
+
+00:47:53.040 --> 00:47:53.540
+[Speaker 3]: So I'll tack on to that.
+
+00:47:56.760 --> 00:47:56.880
+And now I feel like a heel as soon as I
+
+00:47:59.340 --> 00:47:59.500
+opened my mouth, because I think I almost get
+
+00:48:01.480 --> 00:48:01.720
+the sense Floyd wants to jump in here and
+
+00:48:03.680 --> 00:48:03.840
+we're all talking, everyone except Sasha who
+
+00:48:06.420 --> 00:48:06.660
+actually wrote OBS, you know,
+
+00:48:10.680 --> 00:48:10.920
+the OBS WebSocket plugin that is probably the
+
+00:48:12.100 --> 00:48:12.600
+answer to all the different questions
+
+00:48:13.360 --> 00:48:13.480
+everyone is bringing up.
+
+00:48:15.060 --> 00:48:15.420
+So I guess I'll leave my input at that And
+
+00:48:16.680 --> 00:48:16.800
+Chloe, did you have anything to say,
+
+00:48:17.720 --> 00:48:18.220
+or can we pick on Sasha?
+
+00:48:20.460 --> 00:48:20.960
+[Speaker 6]: Nothing to say.
+
+00:48:25.120 --> 00:48:25.320
+[Speaker 0]: I need to update the OBS WebSocket plugin for
+
+00:48:27.260 --> 00:48:27.440
+the protocol change, because I think the
+
+00:48:29.040 --> 00:48:29.540
+protocol change was from 4 to 5.
+
+00:48:32.080 --> 00:48:32.300
+It's 1 of those things that I haven't gotten
+
+00:48:35.280 --> 00:48:35.580
+[Speaker 1]: Cool. But
+
+00:48:37.120 --> 00:48:37.280
+[Speaker 0]: around to. yeah, so we'll try to solve it in
+
+00:48:41.240 --> 00:48:41.380
+CSS. So if I can tinker with the CSS or if
+
+00:48:44.160 --> 00:48:44.380
+somebody else would like to volunteer to move
+
+00:48:45.720 --> 00:48:46.220
+things around, then that would be fantastic
+
+00:48:48.040 --> 00:48:48.540
+because front-end should be things.
+
+00:48:53.480 --> 00:48:53.600
+Okay, oh, what order of magnitude hours do
+
+00:48:55.360 --> 00:48:55.520
+you each of you think you devote to the
+
+00:48:58.260 --> 00:48:58.580
+conference yearly? I have I expected someone
+
+00:48:59.540 --> 00:49:00.040
+would ask this question.
+
+00:49:07.840 --> 00:49:08.120
+So I have I have my the past 11 years of time
+
+00:49:11.000 --> 00:49:11.400
+analysis. This is my Emacs category,
+
+00:49:12.780 --> 00:49:13.280
+so it also includes Emacs news.
+
+00:49:15.660 --> 00:49:16.160
+So this is my Emacs hours by month and year.
+
+00:49:17.920 --> 00:49:18.420
+So you can see last year,
+
+00:49:21.140 --> 00:49:21.640
+it spiked up a lot. But this year,
+
+00:49:23.100 --> 00:49:23.440
+it has taken less time.
+
+00:49:26.260 --> 00:49:26.760
+So last month, it was about 93 hours.
+
+00:49:29.020 --> 00:49:29.520
+And the month before that was just about 87
+
+00:49:31.400 --> 00:49:31.880
+hours of prep. And this actually includes
+
+00:49:33.240 --> 00:49:33.740
+things like captioning and,
+
+00:49:36.260 --> 00:49:36.340
+and coordination. And then you can see a
+
+00:49:38.560 --> 00:49:38.940
+little bit of time here like the EMAX news
+
+00:49:42.040 --> 00:49:42.440
+and and harvesting q&a and adding chapter
+
+00:49:43.780 --> 00:49:44.280
+index indices and things like that.
+
+00:49:47.960 --> 00:49:48.460
+So I, I like it, it's it's my form of fun.
+
+00:49:50.540 --> 00:49:50.640
+And Otherwise, I'm mostly just,
+
+00:49:52.960 --> 00:49:53.460
+you know, helping the kiddo go to play dates
+
+00:49:54.320 --> 00:49:54.820
+and carrying things around.
+
+00:49:57.280 --> 00:49:57.500
+And, you know, so this is the stuff that I do
+
+00:49:58.260 --> 00:49:58.760
+to keep my brain happy.
+
+00:50:00.060 --> 00:50:00.320
+And if you're wondering,
+
+00:50:01.360 --> 00:50:01.860
+okay, well, do you sleep?
+
+00:50:03.520 --> 00:50:03.820
+That's the next question I expected people
+
+00:50:04.840 --> 00:50:05.060
+ask. The answer is yes,
+
+00:50:06.420 --> 00:50:06.660
+we still actually do manage to sleep,
+
+00:50:09.640 --> 00:50:09.800
+or at least I do. Less so now that I have a
+
+00:50:10.760 --> 00:50:11.260
+kid, this is like 2016,
+
+00:50:13.100 --> 00:50:13.260
+had a kiddo, and then suddenly much less
+
+00:50:14.640 --> 00:50:14.800
+sleep, but still a reasonable amount of
+
+00:50:16.780 --> 00:50:17.280
+sleep. So Emacs stuff happens,
+
+00:50:19.600 --> 00:50:20.100
+I can still sleep, and it's a lot of fun.
+
+00:50:23.260 --> 00:50:23.760
+[Speaker 4]: Now that's data for you folks.
+
+00:50:26.960 --> 00:50:27.460
+[Speaker 1]: Yeah, we can't top that at all.
+
+00:50:30.420 --> 00:50:30.820
+[Speaker 0]: It's a blog post also,
+
+00:50:30.820 --> 00:50:31.320
+yeah.
+
+00:50:33.160 --> 00:50:33.340
+[Speaker 4]: Especially, you start like this,
+
+00:50:36.540 --> 00:50:37.040
+how do you expect all of us to say anything
+
+00:50:38.680 --> 00:50:38.740
+after this? Whatever we say is not going to
+
+00:50:40.560 --> 00:50:40.680
+be backed up by data, it's not going to be as
+
+00:50:42.360 --> 00:50:42.520
+many hours, and it's not going to be as
+
+00:50:43.180 --> 00:50:43.680
+qualitative in general.
+
+00:50:53.640 --> 00:50:53.900
+I can remark on something because for me it's
+
+00:50:56.040 --> 00:50:56.540
+my fourth year helping to organize EmacsConf
+
+00:50:59.280 --> 00:50:59.780
+and there's a definite change this year.
+
+00:51:02.480 --> 00:51:02.980
+I did spend, usually I get into EmacsConf
+
+00:51:05.640 --> 00:51:06.040
+mode in late September when I start worrying
+
+00:51:07.900 --> 00:51:08.080
+about the CFP, the call for proposal is
+
+00:51:09.720 --> 00:51:10.080
+finishing, and then we need to start running
+
+00:51:12.580 --> 00:51:12.780
+after speakers to secure the proposals to
+
+00:51:13.860 --> 00:51:14.360
+make sure, oh, can you do this?
+
+00:51:16.500 --> 00:51:16.680
+Can you do maybe a 10-minute format instead
+
+00:51:17.400 --> 00:51:17.560
+of a 20-minute format,
+
+00:51:18.760 --> 00:51:19.260
+you know, all this jazzy stuff.
+
+00:51:21.820 --> 00:51:22.020
+And usually it kind of looks like Sasha for
+
+00:51:22.940 --> 00:51:23.400
+me in terms of involvement,
+
+00:51:24.900 --> 00:51:25.400
+or at least it did for the previous year.
+
+00:51:28.920 --> 00:51:29.300
+But this year, now that I've been gainfully
+
+00:51:30.220 --> 00:51:30.720
+employed as a software developer,
+
+00:51:33.760 --> 00:51:33.900
+I found it much harder to find the time to
+
+00:51:36.500 --> 00:51:36.660
+invest into MaxComp. But 1 of the things that
+
+00:51:39.520 --> 00:51:39.800
+allowed me to still stay efficient at my day
+
+00:51:42.100 --> 00:51:42.260
+job is the fact that I knew that Sasha and
+
+00:51:43.680 --> 00:51:44.180
+all the work that we did in previous years
+
+00:51:46.240 --> 00:51:46.560
+would come to help us organize this year's
+
+00:51:48.160 --> 00:51:48.560
+conference. And I'm not kidding,
+
+00:51:49.900 --> 00:51:50.140
+this year, I've been keeping an eye,
+
+00:51:51.300 --> 00:51:51.480
+obviously, and we've been chatting with all
+
+00:51:53.860 --> 00:51:54.340
+the organizers, but it's mostly been Sasha
+
+00:51:56.880 --> 00:51:57.080
+holding the fort from the end of the CFP in
+
+00:52:00.060 --> 00:52:00.560
+September to right about end of November.
+
+00:52:02.220 --> 00:52:02.720
+So I'll use the opportunity,
+
+00:52:04.780 --> 00:52:05.160
+as well my fellow co-organizers will,
+
+00:52:07.300 --> 00:52:07.480
+to thank you Sasha for putting so much time
+
+00:52:09.720 --> 00:52:09.900
+and energy into this. Not only Sasha from
+
+00:52:11.680 --> 00:52:11.920
+this year, but also Sasha from last year,
+
+00:52:12.840 --> 00:52:13.340
+and last year, and last year.
+
+00:52:19.920 --> 00:52:20.160
+And I will not be able to give you a figure
+
+00:52:20.840 --> 00:52:21.000
+of how much time it takes.
+
+00:52:22.920 --> 00:52:23.220
+I can tell you that the 2 days of Emacs Con
+
+00:52:28.180 --> 00:52:28.380
+are a bloody marathon because we cannot share
+
+00:52:31.060 --> 00:52:31.220
+our screens with you, but Sasha has given you
+
+00:52:32.220 --> 00:52:32.580
+a little bit of pointers about,
+
+00:52:34.080 --> 00:52:34.580
+you know, how much stuff we need to monitor.
+
+00:52:36.560 --> 00:52:36.820
+Sasha just switches constantly between
+
+00:52:38.860 --> 00:52:39.320
+workspaces. I just put everything on 1
+
+00:52:41.400 --> 00:52:41.900
+workspace and my screen looks absolutely
+
+00:52:44.480 --> 00:52:44.920
+mental. And then I wonder why my microphone
+
+00:52:46.020 --> 00:52:46.520
+is clipping on BVB, I suppose.
+
+00:52:47.400 --> 00:52:47.540
+All right, that's all for me.
+
+00:52:48.900 --> 00:52:49.040
+Anyone wants to say anything about how much
+
+00:52:49.920 --> 00:52:50.420
+time it takes? Sasha, please.
+
+00:52:52.800 --> 00:52:53.000
+[Speaker 0]: I have a nice setup this year because I
+
+00:52:55.840 --> 00:52:55.960
+actually have a Matthew Lent donated a
+
+00:52:57.440 --> 00:52:57.660
+computer to me that can handle the big
+
+00:53:00.240 --> 00:53:00.420
+monitor and I'm stealing my husband's big
+
+00:53:01.100 --> 00:53:01.280
+monitor over there. See,
+
+00:53:02.240 --> 00:53:02.740
+So this is my setup today.
+
+00:53:05.600 --> 00:53:06.020
+It's got like conference stuff on my laptop
+
+00:53:08.800 --> 00:53:09.240
+and then just IOC on the other big screen and
+
+00:53:10.640 --> 00:53:11.000
+the 480p so I can see,
+
+00:53:12.340 --> 00:53:12.840
+I can make sure it doesn't fall down.
+
+00:53:14.900 --> 00:53:15.400
+Yes, so I have a nice setup today.
+
+00:53:22.260 --> 00:53:22.400
+[Speaker 4]: Anyone wants to comment about how much time
+
+00:53:24.160 --> 00:53:24.360
+it takes for them to organize the MaxCon for
+
+00:53:25.440 --> 00:53:25.940
+2, you know, including everything,
+
+00:53:26.580 --> 00:53:27.080
+be it the brainstorming,
+
+00:53:28.940 --> 00:53:29.440
+the answering volunteers and stuff like this?
+
+00:53:31.320 --> 00:53:31.640
+Or we can move to another question,
+
+00:53:31.800 --> 00:53:32.300
+of course.
+
+00:53:34.600 --> 00:53:34.960
+[Speaker 1]: I mean, I know for myself,
+
+00:53:36.180 --> 00:53:36.580
+I kind of dropped the ball this year,
+
+00:53:38.940 --> 00:53:39.440
+somewhat unintentionally or unintentionally.
+
+00:53:41.640 --> 00:53:42.040
+Well, yeah, I didn't have any other choice,
+
+00:53:44.280 --> 00:53:44.780
+basically, at least in like September through
+
+00:53:46.940 --> 00:53:47.440
+like early November or mid November.
+
+00:53:51.100 --> 00:53:51.500
+But I think like, it sort of differs,
+
+00:53:52.480 --> 00:53:52.820
+I guess, from year to year.
+
+00:53:53.520 --> 00:53:54.020
+Sometimes life happens,
+
+00:53:57.900 --> 00:53:58.400
+and no matter how much you would love to put
+
+00:53:59.540 --> 00:53:59.880
+a ton of time into something,
+
+00:54:01.620 --> 00:54:01.820
+you just can't. And maybe next year you can
+
+00:54:04.340 --> 00:54:04.540
+do a lot more. So I'm optimistic I'll be able
+
+00:54:07.080 --> 00:54:07.260
+to put in much more time into things for
+
+00:54:09.580 --> 00:54:10.080
+EmacsConf next year, but that's just me.
+
+00:54:12.360 --> 00:54:12.560
+[Speaker 4]: I just want to say something before Robin
+
+00:54:13.900 --> 00:54:14.400
+drops in. Sasha, go please first.
+
+00:54:18.800 --> 00:54:19.120
+[Speaker 0]: And I think people shouldn't like feel bad
+
+00:54:20.280 --> 00:54:20.780
+about having those. I think designing
+
+00:54:24.120 --> 00:54:24.280
+conference systems or processes so that they
+
+00:54:26.800 --> 00:54:27.300
+can take advantage of little pockets of time
+
+00:54:30.460 --> 00:54:30.680
+is the way to go. I love the fact that we now
+
+00:54:33.200 --> 00:54:33.360
+have a system where hosts can show up on the
+
+00:54:35.280 --> 00:54:35.680
+day of and just rock it,
+
+00:54:36.880 --> 00:54:37.380
+right? So this is great.
+
+00:54:41.580 --> 00:54:42.080
+It is good that we can get by with less time
+
+00:54:43.940 --> 00:54:44.120
+throughout the process and just take
+
+00:54:45.660 --> 00:54:46.160
+advantage of whatever time people have.
+
+00:54:46.960 --> 00:54:47.180
+Whether it's, you know,
+
+00:54:49.120 --> 00:54:49.280
+they've got 2 hours, they want to caption a
+
+00:54:51.560 --> 00:54:52.040
+talk, that sort of stuff is already totally
+
+00:54:52.040 --> 00:54:52.540
+awesome.
+
+00:54:57.480 --> 00:54:57.980
+[Speaker 3]: And yeah, you both, thank you.
+
+00:55:00.820 --> 00:55:01.020
+Yeah, you both stole my Thunder and then put
+
+00:55:03.880 --> 00:55:04.120
+a quarterback in me. I couldn't agree more
+
+00:55:04.920 --> 00:55:05.280
+with everything you said.
+
+00:55:09.020 --> 00:55:09.220
+That's something that just typifies what is
+
+00:55:10.360 --> 00:55:10.860
+amazing about this conference,
+
+00:55:12.340 --> 00:55:12.840
+right? It's a kind of accessibility,
+
+00:55:17.120 --> 00:55:17.500
+isn't it? Having some work I can give you
+
+00:55:19.380 --> 00:55:19.880
+that helps you give back to your community
+
+00:55:21.340 --> 00:55:21.840
+that is at your level,
+
+00:55:23.300 --> 00:55:23.800
+that fits your time budget,
+
+00:55:26.960 --> 00:55:27.120
+that is something that you're willing to go
+
+00:55:28.280 --> 00:55:28.780
+care about because it intersects,
+
+00:55:31.400 --> 00:55:31.780
+you know, the world you live in in some
+
+00:55:34.240 --> 00:55:34.540
+practical way and therefore you can make time
+
+00:55:37.360 --> 00:55:37.860
+for it. We all live in a lot of different
+
+00:55:40.520 --> 00:55:40.600
+trenches and making them intersect is 1 of
+
+00:55:42.500 --> 00:55:43.000
+the things Emacs does in a technical way
+
+00:55:43.820 --> 00:55:44.020
+[Speaker 5]: and
+
+00:55:47.260 --> 00:55:47.580
+[Speaker 3]: through this conference at least in a very
+
+00:55:51.100 --> 00:55:51.340
+community way. Okay, and it brings me back
+
+00:55:52.360 --> 00:55:52.680
+also on the OBS front.
+
+00:55:54.080 --> 00:55:54.240
+And I think that's what really excited me
+
+00:55:56.260 --> 00:55:56.580
+too. When I think about the potential that's
+
+00:55:59.440 --> 00:55:59.940
+out there and getting a bunch of people
+
+00:56:01.960 --> 00:56:02.080
+looking at the work you've already done with
+
+00:56:03.960 --> 00:56:04.440
+OBS WebSocket and thinking about,
+
+00:56:06.660 --> 00:56:06.960
+you know, oh, we want more timers that count
+
+00:56:09.280 --> 00:56:09.340
+things down and we want each organizer to be
+
+00:56:10.680 --> 00:56:11.040
+able to have a little palette of them,
+
+00:56:12.780 --> 00:56:12.940
+some of which are gonna be handed to you by
+
+00:56:14.620 --> 00:56:14.760
+the conference director and some of which you
+
+00:56:16.800 --> 00:56:17.240
+can add yourself because they help you and
+
+00:56:19.600 --> 00:56:20.020
+that's right. And, you know,
+
+00:56:21.780 --> 00:56:22.120
+have, you know, keeping things really fast
+
+00:56:24.120 --> 00:56:24.620
+and loose so we can make the artistic
+
+00:56:26.880 --> 00:56:27.340
+decisions on the fly that make our conference
+
+00:56:30.340 --> 00:56:30.840
+what it is, but then making,
+
+00:56:33.480 --> 00:56:33.740
+you know, a simple automated tool chain that
+
+00:56:36.380 --> 00:56:36.560
+anyone can learn and that we know how to
+
+00:56:37.700 --> 00:56:38.200
+execute the steps of manually.
+
+00:56:41.000 --> 00:56:41.280
+That's the actual design pattern that you've
+
+00:56:42.980 --> 00:56:43.480
+implemented here that's working so well.
+
+00:56:47.460 --> 00:56:47.580
+So the
+
+00:56:50.080 --> 00:56:50.540
+[Speaker 4]: 1 thing I wanted to ask about Amin saying,
+
+00:56:51.600 --> 00:56:52.100
+oh, I've dropped the ball this year.
+
+00:56:53.600 --> 00:56:53.940
+Amin's, just to be clear with everyone,
+
+00:56:55.380 --> 00:56:55.520
+Amin's definition of dropping the ball is
+
+00:56:56.940 --> 00:56:57.360
+securing a sponsorship with the FSF.
+
+00:56:58.680 --> 00:56:59.180
+So that's dropping the ball for you.
+
+00:57:02.320 --> 00:57:02.720
+[Speaker 3]: Well attending a weekly meeting,
+
+00:57:04.480 --> 00:57:04.640
+We take 1 week off a month where we
+
+00:57:08.400 --> 00:57:08.720
+coordinate infrastructure issues between this
+
+00:57:13.200 --> 00:57:13.440
+and other FSF supported projects using quote
+
+00:57:14.320 --> 00:57:14.820
+unquote GNU infrastructure.
+
+00:57:16.860 --> 00:57:17.360
+That's kind of a, GNU is really an umbrella
+
+00:57:19.220 --> 00:57:19.720
+term once you get kind of close to it.
+
+00:57:22.220 --> 00:57:22.400
+You know, it's like GNU is all of the
+
+00:57:25.020 --> 00:57:25.240
+volunteers helping with this vision we have
+
+00:57:25.840 --> 00:57:26.340
+of user rights.
+
+00:57:31.380 --> 00:57:31.560
+[Speaker 4]: 1 last thing I wanted to add about how much
+
+00:57:32.220 --> 00:57:32.480
+time we spend on this.
+
+00:57:33.900 --> 00:57:34.400
+It's just the fact that we've experimented
+
+00:57:36.180 --> 00:57:36.380
+over the 4 years I've been part of this.
+
+00:57:38.480 --> 00:57:38.760
+You know, the first year we had so many
+
+00:57:40.720 --> 00:57:40.840
+meetings because we thought this would be the
+
+00:57:42.640 --> 00:57:42.800
+way to know 1 another and this would be the
+
+00:57:44.280 --> 00:57:44.780
+way to create qualitative notes.
+
+00:57:46.520 --> 00:57:46.560
+And we've come back to this.
+
+00:57:48.180 --> 00:57:48.340
+[Speaker 3]: That is what I saw. I can't help but
+
+00:57:49.940 --> 00:57:50.440
+interrupt you again. This is all I do.
+
+00:57:52.080 --> 00:57:52.580
+Leo This is why I keep off the microphone
+
+00:57:54.060 --> 00:57:54.440
+until the last 20 minutes of the conference
+
+00:57:56.580 --> 00:57:56.760
+once everybody already wants to hang up Then
+
+00:57:58.940 --> 00:57:59.080
+I know you'll be honest with me But I have to
+
+00:58:01.880 --> 00:58:02.240
+say when I looked at that table of data all I
+
+00:58:05.280 --> 00:58:05.440
+saw was 200 hours of Sasha's life that she
+
+00:58:06.940 --> 00:58:07.240
+spent talking to the, you know,
+
+00:58:08.360 --> 00:58:08.680
+all many of us were involved.
+
+00:58:10.960 --> 00:58:11.320
+It's not just the 4 or 5 of us that,
+
+00:58:13.160 --> 00:58:13.460
+you know, that have done this last 2 years
+
+00:58:14.440 --> 00:58:14.940
+convention, right? It's,
+
+00:58:17.120 --> 00:58:17.260
+you know, there's been many people that have
+
+00:58:19.340 --> 00:58:19.780
+come in, shared wise thoughts,
+
+00:58:22.120 --> 00:58:22.420
+helping us form the, I don't know,
+
+00:58:24.400 --> 00:58:24.620
+ethos or all of the things that we're
+
+00:58:26.680 --> 00:58:27.180
+carrying forward into 2024.
+
+00:58:31.460 --> 00:58:31.960
+Sorry, Leo.
+
+00:58:32.640 --> 00:58:32.880
+[Speaker 1]: No, no,
+
+00:58:33.560 --> 00:58:33.940
+[Speaker 4]: you're fine, You're fine.
+
+00:58:35.980 --> 00:58:36.060
+I mean, you pretty much continued with what I
+
+00:58:37.500 --> 00:58:38.000
+was going to talk about.
+
+00:58:41.040 --> 00:58:41.540
+So I'm looking at the time and I've already
+
+00:58:44.640 --> 00:58:44.700
+extended by 5 minutes the amount of time I
+
+00:58:46.640 --> 00:58:46.800
+was supposed to stay and Flowy is looking at
+
+00:58:50.320 --> 00:58:50.660
+me with very teary eyes because he's thinking
+
+00:58:51.900 --> 00:58:52.280
+about the meeting he's going to have at 9am
+
+00:58:53.440 --> 00:58:53.940
+tomorrow, as will I by the way.
+
+00:58:54.720 --> 00:58:54.920
+Yeah, don't you have to
+
+00:58:56.380 --> 00:58:56.760
+[Speaker 3]: be commuting like right now Flowy?
+
+00:58:58.200 --> 00:58:58.700
+I mean aren't you supposed to be...
+
+00:59:01.560 --> 00:59:01.840
+I hope you get to sleep before work.
+
+00:59:04.820 --> 00:59:04.960
+Thank you so much for your awesome work this
+
+00:59:04.960 --> 00:59:05.460
+year.
+
+00:59:07.360 --> 00:59:07.680
+[Speaker 6]: I mean, I didn't do so much at the Emojis
+
+00:59:09.100 --> 00:59:09.600
+Conference, so I'm just here like from
+
+00:59:13.180 --> 00:59:13.320
+Friday. At first, I was looking at the
+
+00:59:14.760 --> 00:59:15.060
+website, which talks we're having,
+
+00:59:17.860 --> 00:59:18.040
+So it's all fine. So maybe next year or the
+
+00:59:19.740 --> 00:59:19.960
+coming year, I can do a little bit more
+
+00:59:19.960 --> 00:59:20.460
+privacy.
+
+00:59:23.260 --> 00:59:23.760
+[Speaker 4]: A little more, like again,
+
+00:59:25.920 --> 00:59:26.420
+like with Amin, Flowy's definition of doing,
+
+00:59:30.240 --> 00:59:30.400
+not having done much is hosting 1 of many of
+
+00:59:34.120 --> 00:59:34.240
+the Dev talks. So you could be kind of
+
+00:59:35.680 --> 00:59:36.140
+worried about it. All right,
+
+00:59:38.480 --> 00:59:38.720
+folks, considering the question that we have
+
+00:59:40.440 --> 00:59:40.640
+right now, we still see people adding
+
+00:59:42.260 --> 00:59:42.620
+questions, but I think we are all pretty
+
+00:59:44.960 --> 00:59:45.060
+tired and we need to get on with the rest of
+
+00:59:46.280 --> 00:59:46.780
+our weekends or nights.
+
+00:59:49.740 --> 00:59:50.080
+So do I go into parting words now everyone?
+
+00:59:50.720 --> 00:59:51.220
+Are we okay with this?
+
+00:59:55.280 --> 00:59:55.680
+I'll take this for a yes.
+
+00:59:56.780 --> 00:59:57.280
+I'll ask Sasha, yeah?
+
+01:00:00.780 --> 01:00:01.080
+[Speaker 0]: Oh I think I basically have until the kiddo
+
+01:00:03.560 --> 01:00:03.760
+yells at me to come for dinner so I can hang
+
+01:00:04.440 --> 01:00:04.940
+out with people after.
+
+01:00:09.240 --> 01:00:09.740
+and do the wrapping up.
+
+01:00:09.920 --> 01:00:10.080
+[Speaker 3]: But I
+
+01:00:10.080 --> 01:00:10.440
+[Speaker 4]: All right, splendid. Go ahead know,
+
+01:00:12.100 --> 01:00:12.600
+right, I'll do the wrapping up for the
+
+01:00:13.860 --> 01:00:14.040
+perhaps the stream. We might leave it up
+
+01:00:16.360 --> 01:00:16.700
+because there's no impetus for us to close
+
+01:00:20.100 --> 01:00:20.280
+it. But at least to officially close while
+
+01:00:22.340 --> 01:00:22.840
+we're still there, EmacsConf 2023,
+
+01:00:25.480 --> 01:00:25.900
+I will have again to thank everyone,
+
+01:00:28.200 --> 01:00:28.700
+all the speakers, all my co-organizers for
+
+01:00:31.020 --> 01:00:31.160
+making this possible. You've seen all the
+
+01:00:32.120 --> 01:00:32.260
+care that we put into it,
+
+01:00:34.900 --> 01:00:35.320
+and we are glad every year that all this work
+
+01:00:37.940 --> 01:00:38.440
+is doing something in terms of community
+
+01:00:41.420 --> 01:00:41.600
+building, in terms of leading more people to
+
+01:00:42.880 --> 01:00:43.380
+join us every year as speakers,
+
+01:00:45.040 --> 01:00:45.540
+or just join us as a user of Emacs.
+
+01:00:49.940 --> 01:00:50.100
+And it's always a pleasure to organize the
+
+01:00:51.140 --> 01:00:51.640
+conference, to host it,
+
+01:00:53.360 --> 01:00:53.620
+and to work with everyone in the room
+
+01:00:56.840 --> 01:00:57.340
+currently. Corwin and I are constantly joking
+
+01:00:59.640 --> 01:01:00.140
+when we are backstage making jokes.
+
+01:01:03.540 --> 01:01:03.840
+I think it's Corwin we said last year during
+
+01:01:06.620 --> 01:01:06.900
+the closing remarks that there was no other
+
+01:01:09.000 --> 01:01:09.500
+place they'd rather be than in the backstage.
+
+01:01:12.800 --> 01:01:12.940
+And for me, even though many things have
+
+01:01:15.040 --> 01:01:15.360
+changed in my life over the last year,
+
+01:01:16.240 --> 01:01:16.740
+many good things have happened,
+
+01:01:19.640 --> 01:01:19.860
+it's good to come back to Emacs Cons as this
+
+01:01:22.080 --> 01:01:22.580
+milestone and say, oh yeah,
+
+01:01:23.960 --> 01:01:24.220
+I'm exactly where I want to be,
+
+01:01:25.320 --> 01:01:25.820
+with the people I want to be with,
+
+01:01:29.020 --> 01:01:29.220
+and I see myself and I cannot wait to see
+
+01:01:30.660 --> 01:01:31.080
+myself again in the situation next year.
+
+01:01:32.080 --> 01:01:32.580
+So thank you so much everyone.
+
+01:01:34.440 --> 01:01:34.640
+If you want to join us,
+
+01:01:36.100 --> 01:01:36.180
+ask questions, we'll still be here for a
+
+01:01:37.360 --> 01:01:37.640
+while. Floey might drop out,
+
+01:01:39.520 --> 01:01:40.020
+I might drop out, Sasha might drop out,
+
+01:01:41.600 --> 01:01:41.880
+but we'll be here to answer as many questions
+
+01:01:43.140 --> 01:01:43.640
+as you want for as long as we can.
+
+01:01:46.120 --> 01:01:46.280
+Bye bye everyone and let's get started with
+
+01:01:46.800 --> 01:01:47.300
+the after show now.
+
+01:01:51.540 --> 01:01:52.040
+[Speaker 0]: Bye Leo, bye Chloe! I'll drop out eventually
+
+01:01:53.000 --> 01:01:53.500
+when the kiddo yells at me.
+
+01:01:56.200 --> 01:01:56.440
+[Speaker 3]: I can't tell you how much fun this is,
+
+01:01:58.260 --> 01:01:58.440
+yeah. The way to remember what I said,
+
+01:02:00.400 --> 01:02:00.700
+Leo, it's 100% true. Oh man,
+
+01:02:01.380 --> 01:02:01.640
+turning off your lights,
+
+01:02:02.880 --> 01:02:03.220
+I'm doing it. I'm doing it too.
+
+01:02:04.600 --> 01:02:04.900
+Sorry y'all. Oh, yeah,
+
+01:02:05.380 --> 01:02:05.880
+bye-bye lights
+
+01:02:10.440 --> 01:02:10.760
+[Speaker 4]: Yeah, that's every year that's how we finish
+
+01:02:12.340 --> 01:02:12.500
+we just turn off the the big lights that we
+
+01:02:14.240 --> 01:02:14.440
+have in our faces all the day especially the
+
+01:02:14.440 --> 01:02:14.940
+hosts
+
+01:02:19.120 --> 01:02:19.460
+[Speaker 3]: and Tell me if there's too much back chatter
+
+01:02:22.700 --> 01:02:23.200
+[Speaker 5]: get off my headphones,
+
+01:02:24.280 --> 01:02:24.720
+too, so I can
+
+01:02:25.260 --> 01:02:25.760
+[Speaker 3]: when I hear you in the room.
+
+01:02:28.860 --> 01:02:29.360
+Can I hear you now? Yeah.
+
+01:02:31.960 --> 01:02:32.460
+Is it feeding back pretty bad?
+
+01:02:34.480 --> 01:02:34.980
+[Speaker 1]: Hello? there is some echo.
+
+01:02:37.460 --> 01:02:37.960
+[Speaker 4]: Yeah, there is some echo.
+
+01:02:41.200 --> 01:02:41.380
+[Speaker 3]: I think Okay. Fine. I can live with my
+
+01:02:42.160 --> 01:02:42.660
+headset a little longer.
+
+01:02:44.860 --> 01:02:45.360
+I give 1 ear a break at a time.
+
+01:02:47.140 --> 01:02:47.640
+[Speaker 1]: Thanks for your sacrifice.
+
+01:02:50.060 --> 01:02:50.560
+[Speaker 3]: Oh, well, you know, it's a small,
+
+01:02:53.080 --> 01:02:53.360
+small, small price to pay to get to smooth
+
+01:02:56.600 --> 01:02:56.820
+with y'all. Yeah, I was just looking at that
+
+01:02:58.580 --> 01:02:58.820
+chart and I was thinking about all of those
+
+01:03:01.360 --> 01:03:01.560
+meetings that we had like 18 months we were
+
+01:03:05.900 --> 01:03:06.400
+just on this death march to organize this and
+
+01:03:09.240 --> 01:03:09.520
+it's just such an amazing accomplishment that
+
+01:03:11.960 --> 01:03:12.140
+you you have here Sasha like I'm sorry to
+
+01:03:14.540 --> 01:03:14.760
+pick on you personally but the work that you
+
+01:03:16.680 --> 01:03:17.180
+put in keep being able to keep it the whole
+
+01:03:18.760 --> 01:03:19.260
+technical project in your mind,
+
+01:03:21.580 --> 01:03:21.760
+all the way down to presenting it at this
+
+01:03:24.100 --> 01:03:24.480
+year's conference and like kind of spoon
+
+01:03:26.380 --> 01:03:26.520
+feeding it to people that want to run off in
+
+01:03:27.900 --> 01:03:28.260
+their own damn direction and then handing
+
+01:03:31.480 --> 01:03:31.880
+them an org is the 1 that people keep bugging
+
+01:03:33.440 --> 01:03:33.940
+us about. So if you're looking for a project,
+
+01:03:37.340 --> 01:03:37.840
+here it is. Just really well done.
+
+01:03:43.540 --> 01:03:43.980
+I no longer feel like we wasted a lot of time
+
+01:03:46.460 --> 01:03:46.680
+there. I mean, you remember I enjoyed so much
+
+01:03:48.600 --> 01:03:49.100
+all of our check ins and all of that stuff.
+
+01:03:51.420 --> 01:03:51.920
+But we had so many ideas,
+
+01:03:53.480 --> 01:03:53.980
+you can imagine that I wondered,
+
+01:03:56.980 --> 01:03:57.160
+you know, I wondered if we should have had
+
+01:03:58.520 --> 01:03:58.700
+more focused meetings and all that.
+
+01:04:01.100 --> 01:04:01.360
+And I was glad when we stopped having like
+
+01:04:04.240 --> 01:04:04.540
+weekly meetings, because you know what I mean
+
+01:04:06.980 --> 01:04:07.120
+To keep this much power in the room once a
+
+01:04:08.160 --> 01:04:08.660
+week, it feels creepy.
+
+01:04:10.560 --> 01:04:11.060
+This much intellectual power.
+
+01:04:18.525 --> 01:04:18.820
+Anyway, that's it. I think that's it for me.
+
+01:04:19.600 --> 01:04:19.760
+[Speaker 1]: Yeah, and I'll say, I mean,
+
+01:04:22.280 --> 01:04:22.540
+I can't obviously speak for Sash or anyone
+
+01:04:24.840 --> 01:04:24.940
+else. Yeah, the regular meetings were a
+
+01:04:26.980 --> 01:04:27.180
+little bit intense than we had the year
+
+01:04:29.540 --> 01:04:29.680
+before, but I'm kind of also super glad that
+
+01:04:31.840 --> 01:04:32.040
+we did do them. And, you know,
+
+01:04:34.840 --> 01:04:34.960
+in a way, it did help us sort of connect and
+
+01:04:38.180 --> 01:04:38.360
+get to know each other much more regularly or
+
+01:04:41.200 --> 01:04:41.440
+much more which is great and I see thumbs up
+
+01:04:44.900 --> 01:04:45.060
+from Leo and Corwin so yeah happy we did
+
+01:04:49.080 --> 01:04:49.280
+them. Might want to have some kind of
+
+01:04:51.820 --> 01:04:52.040
+actually irregular ones every once in a while
+
+01:04:53.400 --> 01:04:53.860
+if we have to decide on something.
+
+01:04:55.240 --> 01:04:55.520
+But if like this year,
+
+01:04:57.400 --> 01:04:57.600
+everything can be worked out pretty much ad
+
+01:04:58.780 --> 01:04:59.020
+hoc, whenever needs be,
+
+01:05:00.480 --> 01:05:00.980
+like over asynchronous communications.
+
+01:05:03.640 --> 01:05:04.140
+I see Sasha nodding very excitedly.
+
+01:05:07.820 --> 01:05:08.320
+This also works. So yeah.
+
+01:05:10.920 --> 01:05:11.420
+And I also see some questions coming in here
+
+01:05:14.580 --> 01:05:15.040
+in BBB. If other folks want to join,
+
+01:05:16.280 --> 01:05:16.780
+please feel free to do that as well.
+
+01:05:18.800 --> 01:05:19.300
+Yeah, I don't think we have an issue tracker
+
+01:05:22.440 --> 01:05:22.860
+right now, but our whole website is a wiki.
+
+01:05:24.780 --> 01:05:25.280
+So if you wanna like create a new page or
+
+01:05:26.180 --> 01:05:26.480
+there might be a page,
+
+01:05:28.640 --> 01:05:28.780
+I don't know. You can of course go in and
+
+01:05:29.760 --> 01:05:30.260
+edit it to your heart's content.
+
+01:05:36.540 --> 01:05:37.040
+[Speaker 3]: Yeah. Hilarious, I couldn't,
+
+01:05:39.440 --> 01:05:39.600
+like I almost managed to type that as fast as
+
+01:05:40.760 --> 01:05:41.260
+you could say it, you know.
+
+01:05:43.840 --> 01:05:43.940
+That's fine. I get the same answer in the
+
+01:05:46.620 --> 01:05:46.800
+chat. Yep. Our website's a wiki and we
+
+01:05:48.060 --> 01:05:48.260
+definitely use ideas here.
+
+01:05:50.280 --> 01:05:50.540
+If you want to implement them or you know
+
+01:05:53.100 --> 01:05:53.440
+document them enough that even Corwin can
+
+01:05:55.240 --> 01:05:55.740
+code it then you know I'll do that.
+
+01:05:58.220 --> 01:05:58.380
+[Speaker 0]: Also I'll go through all the etherpads at
+
+01:06:00.240 --> 01:06:00.480
+some point to harvest them and I think I have
+
+01:06:02.240 --> 01:06:02.480
+yeah I have an Emacs list function that does
+
+01:06:05.020 --> 01:06:05.280
+this for me. So that I can go through that
+
+01:06:06.820 --> 01:06:07.280
+thing and include that in our organizers
+
+01:06:09.060 --> 01:06:09.280
+notebooks, lessons learned and ideas for next
+
+01:06:09.280 --> 01:06:09.780
+year.
+
+01:06:11.120 --> 01:06:11.620
+[Speaker 3]: Yeah.
+
+01:06:15.010 --> 01:06:15.060
+[Speaker 4]: Yeah, because something that you know,
+
+01:06:16.280 --> 01:06:16.720
+We were talking about the different models
+
+01:06:18.680 --> 01:06:18.840
+between having many, many meetings and how it
+
+01:06:20.280 --> 01:06:20.760
+paid off eventually. The thing is,
+
+01:06:22.160 --> 01:06:22.660
+this year we had no meetings.
+
+01:06:27.440 --> 01:06:27.660
+We met Friday morning on Mumble and we were
+
+01:06:29.540 --> 01:06:29.720
+ready to go. We did chat things up a little
+
+01:06:30.180 --> 01:06:30.660
+bit on ISE, obviously,
+
+01:06:31.780 --> 01:06:32.120
+but no meeting this year.
+
+01:06:33.420 --> 01:06:33.640
+So I'm tempted to say that,
+
+01:06:34.800 --> 01:06:35.080
+yes, we could have off-hand meetings,
+
+01:06:36.360 --> 01:06:36.480
+but I think it's mostly because we want to
+
+01:06:38.240 --> 01:06:38.680
+see 1 another, not because we need
+
+01:06:40.680 --> 01:06:41.160
+necessarily for those meetings to prepare
+
+01:06:45.480 --> 01:06:45.660
+Emacs cons. But what I wanted to say as well
+
+01:06:49.740 --> 01:06:50.200
+is that I think it's a testament to the bets
+
+01:06:52.940 --> 01:06:53.140
+that Sasha took last year to automatize a lot
+
+01:06:54.520 --> 01:06:54.720
+of things. I mean, we'd already been
+
+01:06:55.760 --> 01:06:56.120
+automatizing a lot of stuff,
+
+01:06:58.260 --> 01:06:58.760
+like writing scripts for every single thing
+
+01:07:02.220 --> 01:07:02.600
+in ESPire, but last year we made a big bet to
+
+01:07:04.600 --> 01:07:04.920
+say, what if we had OBS in the cloud?
+
+01:07:06.580 --> 01:07:06.760
+What if we had a streaming platform that was
+
+01:07:08.680 --> 01:07:08.860
+running on a machine? And this is what
+
+01:07:11.660 --> 01:07:12.100
+allowed us to very smoothly have 2 tracks,
+
+01:07:13.380 --> 01:07:13.880
+the general track and the dev track.
+
+01:07:16.640 --> 01:07:16.980
+And I think the beauty of this system is
+
+01:07:19.680 --> 01:07:19.840
+that, obviously, because we get more and more
+
+01:07:20.720 --> 01:07:21.220
+speakers submitting talks,
+
+01:07:22.800 --> 01:07:23.100
+we are starting to think maybe we actually
+
+01:07:26.480 --> 01:07:26.740
+need a third track or something and no 1 is
+
+01:07:28.580 --> 01:07:29.080
+stressed in the room when Sasha says this.
+
+01:07:31.100 --> 01:07:31.360
+You know, there's not the reaction that's
+
+01:07:32.320 --> 01:07:32.540
+like, oh no it's gonna be tough,
+
+01:07:33.200 --> 01:07:33.620
+we're gonna need more hosts,
+
+01:07:34.480 --> 01:07:34.980
+organizers, it's just a calm...
+
+01:07:37.580 --> 01:07:38.040
+[Speaker 3]: Now, point of order, Now Flowy is stressed
+
+01:07:39.000 --> 01:07:39.500
+when Sasha says this.
+
+01:07:44.640 --> 01:07:45.060
+[Speaker 4]: That was just a-
+
+01:07:46.640 --> 01:07:46.800
+[Speaker 0]: I didn't know, Colin, we could put you in the
+
+01:07:47.720 --> 01:07:47.880
+spot next year. You'd be like,
+
+01:07:49.200 --> 01:07:49.400
+you know, hey, Colin, what do you feel about
+
+01:07:49.400 --> 01:07:49.900
+hosting?
+
+01:07:53.300 --> 01:07:53.800
+[Speaker 3]: You know, I'm happy to do it.
+
+01:07:56.960 --> 01:07:57.260
+And I feel, I mean, just to jump in there and
+
+01:07:59.540 --> 01:08:00.040
+say, yes, exactly. No,
+
+01:08:01.400 --> 01:08:01.560
+there's no concern on the part of the
+
+01:08:03.220 --> 01:08:03.720
+organizer committee that we could expand
+
+01:08:06.000 --> 01:08:06.180
+this. If you said we needed to expand to 4
+
+01:08:08.400 --> 01:08:08.900
+tracks, I think we would gulp and consider
+
+01:08:10.080 --> 01:08:10.360
+it, you know, from there,
+
+01:08:11.040 --> 01:08:11.540
+it gets a little crazy,
+
+01:08:13.980 --> 01:08:14.260
+but strictly because there aren't that many
+
+01:08:16.399 --> 01:08:16.899
+people that we know want to commit.
+
+01:08:18.120 --> 01:08:18.399
+What did we see there?
+
+01:08:20.600 --> 01:08:20.939
+80 hours of potential work that,
+
+01:08:23.000 --> 01:08:23.200
+you know, that could go into organizing next
+
+01:08:25.439 --> 01:08:25.580
+year's conference if you find that it's a
+
+01:08:26.979 --> 01:08:27.399
+rabbit hole for you and being a streamer
+
+01:08:28.979 --> 01:08:29.140
+means you want to read every email and
+
+01:08:31.500 --> 01:08:31.819
+respond to every, as Sasha has done this last
+
+01:08:34.439 --> 01:08:34.819
+year, right? So when I look at her numbers
+
+01:08:35.359 --> 01:08:35.859
+for total participation,
+
+01:08:38.000 --> 01:08:38.500
+that's really a high watermark.
+
+01:08:43.439 --> 01:08:43.939
+Sasha really took care of this convention,
+
+01:08:46.680 --> 01:08:47.180
+you know, like a producer might.
+
+01:08:52.240 --> 01:08:52.660
+And the fact that what used to take 200 hours
+
+01:08:56.000 --> 01:08:56.260
+before, I mean, I can't harp enough on the
+
+01:08:57.720 --> 01:08:57.979
+story that that's telling you,
+
+01:09:00.399 --> 01:09:00.800
+right? And as I think about it with a project
+
+01:09:01.800 --> 01:09:02.080
+manager hat on, right?
+
+01:09:02.960 --> 01:09:03.160
+I'm saying, okay, well,
+
+01:09:07.080 --> 01:09:07.580
+that's, you know, that work can potentially
+
+01:09:09.800 --> 01:09:09.960
+be amplified to many thousands of hours of
+
+01:09:11.800 --> 01:09:11.920
+work, considering the automation and the
+
+01:09:13.279 --> 01:09:13.439
+potential for bringing people in.
+
+01:09:14.540 --> 01:09:14.800
+So if you thought about it as a money-making
+
+01:09:16.319 --> 01:09:16.520
+thing, If we were trying to make money by
+
+01:09:16.960 --> 01:09:17.460
+having these conventions,
+
+01:09:19.040 --> 01:09:19.540
+you would think we have a very profitable
+
+01:09:23.760 --> 01:09:24.000
+business here because we can amplify the
+
+01:09:25.640 --> 01:09:25.939
+talent that walks in the door really
+
+01:09:28.140 --> 01:09:28.640
+effectively, if that makes sense,
+
+01:09:29.800 --> 01:09:30.300
+through the tools and the training.
+
+01:09:33.800 --> 01:09:33.960
+[Speaker 0]: So we should clarify that if anyone wants to
+
+01:09:35.920 --> 01:09:36.180
+volunteer as a host or just check in,
+
+01:09:38.300 --> 01:09:38.380
+let's just talk host. It's really just a
+
+01:09:40.080 --> 01:09:40.580
+matter of showing up, making sure your BVB
+
+01:09:42.160 --> 01:09:42.439
+works so you can talk.
+
+01:09:43.260 --> 01:09:43.620
+If you want to share your webcam,
+
+01:09:44.899 --> 01:09:45.040
+you can. You can skip it if you don't want
+
+01:09:46.359 --> 01:09:46.859
+to. You can share the screen with the pad.
+
+01:09:48.640 --> 01:09:48.800
+And then you just sit there and you chat with
+
+01:09:51.260 --> 01:09:51.399
+a speaker and you read the questions off the
+
+01:09:53.240 --> 01:09:53.399
+pad in case they don't read the questions off
+
+01:09:56.740 --> 01:09:57.240
+themselves. So it can be a very low effort,
+
+01:09:59.440 --> 01:09:59.940
+low stress way to get into it and just there
+
+01:10:02.840 --> 01:10:03.000
+kind of helping the speaker have somebody to
+
+01:10:05.540 --> 01:10:05.820
+talk to. It doesn't have to take 80 hours.
+
+01:10:08.220 --> 01:10:08.720
+It can take 2 hours and that's cool.
+
+01:10:10.680 --> 01:10:10.840
+[Speaker 3]: And the same, and that's just like the
+
+01:10:11.820 --> 01:10:12.040
+transcription task. Yeah,
+
+01:10:13.700 --> 01:10:13.980
+sorry, I probably missed the lead there,
+
+01:10:16.080 --> 01:10:16.360
+right? Every individual part of this is
+
+01:10:19.160 --> 01:10:19.660
+really easy. So it's an open-ended commitment
+
+01:10:22.360 --> 01:10:22.860
+to come and kind of meet a part of the
+
+01:10:24.840 --> 01:10:25.340
+committee, a part of the community,
+
+01:10:27.040 --> 01:10:27.540
+right? To come in and say,
+
+01:10:29.440 --> 01:10:29.940
+maybe you're really excited about org,
+
+01:10:33.420 --> 01:10:33.600
+you could review talks and just review the
+
+01:10:35.420 --> 01:10:35.660
+org ones. There's not an obligation that says
+
+01:10:37.440 --> 01:10:37.800
+you're going to look at every talk that's
+
+01:10:40.520 --> 01:10:40.640
+submitted, right? Share your thoughts on the
+
+01:10:42.500 --> 01:10:42.660
+talks that you have a chance to review the
+
+01:10:44.440 --> 01:10:44.900
+proposals. That's the submissions review
+
+01:10:48.040 --> 01:10:48.540
+part, right? So there's a way to help with
+
+01:10:51.820 --> 01:10:52.120
+almost any appetite for I'd like a little
+
+01:10:54.520 --> 01:10:54.780
+extra work in the Emacs department here like
+
+01:10:56.480 --> 01:10:56.640
+if you want to feel like you're part of the
+
+01:10:59.600 --> 01:10:59.800
+team this this team is really easy to get
+
+01:11:02.440 --> 01:11:02.710
+[Speaker 7]: think that's
+
+01:11:03.680 --> 01:11:03.840
+[Speaker 3]: involved with. I I mean,
+
+01:11:04.280 --> 01:11:04.440
+please. Go ahead,
+
+01:11:06.820 --> 01:11:07.320
+[Speaker 4]: No, no, please. I've talked enough.
+
+01:11:08.940 --> 01:11:09.100
+[Speaker 1]: sort of the... Leo. Well,
+
+01:11:10.380 --> 01:11:10.660
+I don't get tired of hearing you talk,
+
+01:11:13.000 --> 01:11:13.500
+but yeah, I was going to say,
+
+01:11:16.920 --> 01:11:17.320
+Yeah, I feel like that's the general message
+
+01:11:19.600 --> 01:11:19.920
+here is that we're all just a bunch of people
+
+01:11:21.360 --> 01:11:21.860
+who are interested in this.
+
+01:11:24.060 --> 01:11:24.560
+And of course, being humans,
+
+01:11:26.120 --> 01:11:26.280
+each of us have different kinds of lives and
+
+01:11:27.560 --> 01:11:27.720
+different kinds of availabilities and
+
+01:11:28.260 --> 01:11:28.760
+different kinds of interests.
+
+01:11:29.860 --> 01:11:30.360
+And there is something for everybody,
+
+01:11:34.300 --> 01:11:34.540
+both in terms of the kinds of tasks that you
+
+01:11:37.480 --> 01:11:37.760
+need doing, but also in terms of the amount
+
+01:11:39.980 --> 01:11:40.480
+of time that you want or are able to put in.
+
+01:11:43.780 --> 01:11:44.080
+So yes, if you do think this is something
+
+01:11:46.240 --> 01:11:46.700
+that you might be interested in helping with
+
+01:11:47.980 --> 01:11:48.400
+for future additions and such,
+
+01:11:51.140 --> 01:11:51.340
+or even some of the post-conference work that
+
+01:11:52.300 --> 01:11:52.800
+needs doing after this year.
+
+01:11:55.800 --> 01:11:55.960
+Please reach out there's something for
+
+01:11:57.440 --> 01:11:57.940
+everybody and I would love to have
+
+01:12:03.020 --> 01:12:03.360
+[Speaker 6]: you. I can confirm there was an easy access
+
+01:12:06.260 --> 01:12:06.500
+so I came here last year just doing some
+
+01:12:08.600 --> 01:12:09.100
+checking in and the process of getting,
+
+01:12:10.840 --> 01:12:11.120
+it's called a trained in was really,
+
+01:12:12.520 --> 01:12:12.620
+really short. There was a lot of
+
+01:12:13.700 --> 01:12:14.200
+documentation how to do something.
+
+01:12:17.720 --> 01:12:17.920
+I mean, there's a pad that gets sent and what
+
+01:12:20.540 --> 01:12:20.660
+to do, when to do, and what to ask is like
+
+01:12:22.160 --> 01:12:22.660
+really incredible. So thank you for that.
+
+01:12:26.320 --> 01:12:26.820
+Just come here, write an email,
+
+01:12:28.860 --> 01:12:29.200
+join us. It's really, really cool.
+
+01:12:30.920 --> 01:12:31.420
+And it's a great experience to be honest.
+
+01:12:35.680 --> 01:12:35.900
+[Speaker 4]: Thank you. And while Sasha is speaking about
+
+01:12:36.820 --> 01:12:37.280
+the update of the wiki,
+
+01:12:38.320 --> 01:12:38.820
+oh Coleman did you want to say something?
+
+01:12:41.140 --> 01:12:41.600
+[Speaker 3]: No I was just I was just gonna embarrass
+
+01:12:44.240 --> 01:12:44.740
+Floey Coder further but you go ahead.
+
+01:12:51.000 --> 01:12:51.200
+I was just gonna say I think you're pretty
+
+01:12:52.420 --> 01:12:52.900
+quick, you're pretty quick,
+
+01:12:55.320 --> 01:12:55.820
+you took to it really quickly or you show
+
+01:12:57.240 --> 01:12:57.740
+just kind of a reflexive calm.
+
+01:12:59.340 --> 01:12:59.720
+Like you know how to not talk over people.
+
+01:13:01.200 --> 01:13:01.700
+You're already better at it than I am.
+
+01:13:06.500 --> 01:13:07.000
+Now, you know, I think,
+
+01:13:09.000 --> 01:13:09.280
+yeah, I hope you're enjoying the new stuff
+
+01:13:10.600 --> 01:13:10.720
+that you're starting to take on because you
+
+01:13:12.040 --> 01:13:12.540
+seem to be doing great with it.
+
+01:13:14.220 --> 01:13:14.500
+And yeah, I hope you're not sitting there
+
+01:13:15.720 --> 01:13:16.080
+thinking that you're taking,
+
+01:13:17.960 --> 01:13:18.340
+you know, that you're coming on,
+
+01:13:19.700 --> 01:13:19.920
+that you're not taking on enough
+
+01:13:21.420 --> 01:13:21.680
+responsibility or anything like that,
+
+01:13:23.100 --> 01:13:23.600
+or I don't know, maybe.
+
+01:13:26.040 --> 01:13:26.240
+I picked up like a little undercurrent of
+
+01:13:28.100 --> 01:13:28.380
+like, I don't do that much,
+
+01:13:31.440 --> 01:13:31.940
+and I hope you don't feel that way because I
+
+01:13:33.719 --> 01:13:34.219
+just enjoyed really having your help the last
+
+01:13:38.680 --> 01:13:39.180
+couple of years. Thank you very much.
+
+01:13:47.640 --> 01:13:47.720
+[Speaker 4]: Yeah, that's how they get you,
+
+01:13:48.560 --> 01:13:48.680
+you know, they just tell you,
+
+01:13:49.340 --> 01:13:49.840
+oh, could you do check-ins?
+
+01:13:51.820 --> 01:13:52.180
+Like I showed up for 4 years ago saying,
+
+01:13:54.660 --> 01:13:55.080
+oh, I'd like to help and look at me now.
+
+01:13:56.780 --> 01:13:57.040
+I think I did I host on the first year?
+
+01:13:57.800 --> 01:13:58.300
+I'm pretty sure I did.
+
+01:14:00.020 --> 01:14:00.420
+Like it took 2 months basically of onboarding
+
+01:14:02.960 --> 01:14:03.160
+to convince me to do some of the hosting and
+
+01:14:06.820 --> 01:14:07.000
+back then oh it was so tough for us to do the
+
+01:14:08.440 --> 01:14:08.680
+hosting because we didn't have all the fancy
+
+01:14:10.320 --> 01:14:10.680
+setup we have this year and we were
+
+01:14:13.680 --> 01:14:14.180
+struggling with OBS with bid rates with
+
+01:14:18.160 --> 01:14:18.340
+sharing scenes I'm glad we are where we are
+
+01:14:20.460 --> 01:14:20.760
+today, where I don't have to worry as much
+
+01:14:21.880 --> 01:14:22.120
+about this. But it's also nice,
+
+01:14:24.440 --> 01:14:24.580
+it's also 1 thing, we do have a culture of
+
+01:14:25.760 --> 01:14:26.260
+documentation as Sasha exemplified,
+
+01:14:28.140 --> 01:14:28.640
+and like Flo mentioned,
+
+01:14:29.540 --> 01:14:29.820
+documentation on the roles.
+
+01:14:33.060 --> 01:14:33.560
+Yes, We did do this to help people join us.
+
+01:14:39.360 --> 01:14:39.840
+But really, I'm the host of General,
+
+01:14:41.660 --> 01:14:41.840
+but it could be just anyone else because we
+
+01:14:43.780 --> 01:14:44.020
+have so much documentation on how to do
+
+01:14:46.560 --> 01:14:46.780
+things. Obviously, when a co-organizer is
+
+01:14:48.740 --> 01:14:48.900
+doing a role, we tend to have an eye on how
+
+01:14:49.740 --> 01:14:50.160
+the infrastructure is going.
+
+01:14:51.820 --> 01:14:52.320
+But really, if you want to join us,
+
+01:14:54.720 --> 01:14:54.940
+we will make sure that the jobs that you
+
+01:14:57.240 --> 01:14:57.500
+have, first, you like them and it's something
+
+01:14:59.440 --> 01:14:59.640
+that interests you, and we will also make
+
+01:15:04.180 --> 01:15:04.400
+sure that on our end, everything goes well
+
+01:15:06.140 --> 01:15:06.640
+for you. Like we'll be monitoring the streams
+
+01:15:08.540 --> 01:15:09.040
+and every time we have a new person join us,
+
+01:15:13.500 --> 01:15:14.000
+it is as much energy and mental availability
+
+01:15:17.780 --> 01:15:18.220
+to invest into, oh, maybe we could do this.
+
+01:15:19.800 --> 01:15:19.940
+Oh, 0, we have a fire going out because the
+
+01:15:21.320 --> 01:15:21.820
+speaker hasn't checked in yet.
+
+01:15:24.060 --> 01:15:24.560
+So it's all about sharing expertise,
+
+01:15:27.180 --> 01:15:27.260
+it's all about making people level up in
+
+01:15:28.520 --> 01:15:29.020
+terms of skills that are really useful.
+
+01:15:34.120 --> 01:15:34.280
+I will attribute a lot of my success in
+
+01:15:35.920 --> 01:15:36.120
+public speaking to the work I do with
+
+01:15:38.620 --> 01:15:39.120
+EmacsConf, and I'm sure plenty of people
+
+01:15:43.420 --> 01:15:43.620
+would gain from joining us and learning these
+
+01:15:47.440 --> 01:15:47.940
+skills. All right, It's about 30 minutes past
+
+01:15:49.740 --> 01:15:49.920
+the official time. Do we want to go a little
+
+01:15:51.180 --> 01:15:51.680
+longer? Are we still available to go?
+
+01:15:55.180 --> 01:15:55.680
+All right, well, let's keep going.
+
+01:16:00.443 --> 01:16:00.486
+I don't see any more people joining us on the
+
+01:16:00.660 --> 01:16:00.703
+[Speaker 1]: We have Bob,
+
+01:16:01.240 --> 01:16:01.720
+[Speaker 4]: Blue Button. who was 1 of the speakers today
+
+01:16:03.940 --> 01:16:04.200
+in the room. Bob, do you want to maybe unmute
+
+01:16:05.400 --> 01:16:05.900
+yourself and ask us some questions?
+
+01:16:08.420 --> 01:16:08.720
+Or just thank us. I mean,
+
+01:16:09.480 --> 01:16:09.840
+I'm just begging for something.
+
+01:16:10.920 --> 01:16:11.420
+But I know you've been very helpful.
+
+01:16:15.340 --> 01:16:15.720
+[Speaker 5]: Yes. How are you? No, I've really had fun.
+
+01:16:18.340 --> 01:16:18.600
+No, I'm exhausted. I'm exhausted for you,
+
+01:16:22.800 --> 01:16:23.300
+I think. So I learned something.
+
+01:16:25.040 --> 01:16:25.460
+Everybody wants to record their videos,
+
+01:16:26.460 --> 01:16:26.940
+which of course, is great,
+
+01:16:28.380 --> 01:16:28.480
+and then you have the subtitles and
+
+01:16:31.560 --> 01:16:32.040
+everything. But I saved a lot of time by
+
+01:16:35.600 --> 01:16:35.740
+doing it live this year and not going in and
+
+01:16:38.040 --> 01:16:38.200
+tweaking and doing all the editing and
+
+01:16:39.440 --> 01:16:39.860
+spending all the time that we do.
+
+01:16:42.480 --> 01:16:42.720
+And it was kind of fun to do it that way too.
+
+01:16:44.900 --> 01:16:45.400
+So just a little note there.
+
+01:16:48.340 --> 01:16:48.640
+But I look forward to seeing 1 of my talks
+
+01:16:53.760 --> 01:16:53.940
+subtitled someday. So no,
+
+01:16:55.240 --> 01:16:55.740
+I love what you do. It's fun.
+
+01:16:57.660 --> 01:16:57.900
+I've only seen part of Sasha's talk,
+
+01:17:00.660 --> 01:17:01.000
+so I'll go and review that about how you're
+
+01:17:03.840 --> 01:17:04.340
+automating all this. You know,
+
+01:17:06.560 --> 01:17:06.680
+it's a little sad for me personally that of
+
+01:17:09.080 --> 01:17:09.580
+course, Org gets all the attention,
+
+01:17:14.060 --> 01:17:14.340
+but you know, we're exposing hyperbole more
+
+01:17:16.820 --> 01:17:17.240
+now and There's definitely a growing interest
+
+01:17:18.800 --> 01:17:19.020
+on Reddit and you know,
+
+01:17:20.140 --> 01:17:20.640
+I think it's kind of like EmacsConf.
+
+01:17:23.680 --> 01:17:23.900
+Give it a few years. We went away for a long
+
+01:17:24.840 --> 01:17:25.340
+time and then we came back.
+
+01:17:30.420 --> 01:17:30.880
+We'll start to see it permeate the Emacs
+
+01:17:33.160 --> 01:17:33.660
+first. But I was thinking that,
+
+01:17:36.720 --> 01:17:36.960
+you know, I think people who like Emacs and
+
+01:17:38.340 --> 01:17:38.840
+stuff, they read things online,
+
+01:17:40.920 --> 01:17:41.420
+they come to this conference,
+
+01:17:43.620 --> 01:17:43.940
+but we're always hearing about,
+
+01:17:44.620 --> 01:17:45.120
+well, the next generation.
+
+01:17:47.260 --> 01:17:47.500
+We have to deal with that.
+
+01:17:50.000 --> 01:17:50.160
+And I think a lot of people get exposed to
+
+01:17:52.900 --> 01:17:53.120
+Emacs in college. Now a professor turns them
+
+01:17:55.080 --> 01:17:55.460
+on to it and makes them use it,
+
+01:17:57.100 --> 01:17:57.600
+and then they go out into the real world,
+
+01:17:59.720 --> 01:18:00.220
+and there's no encouragement anymore,
+
+01:18:01.460 --> 01:18:01.960
+and they just drop it.
+
+01:18:05.600 --> 01:18:05.980
+And with all of what you're putting together
+
+01:18:09.280 --> 01:18:09.720
+here, it seems like if there was some reach
+
+01:18:14.120 --> 01:18:14.620
+out to universities and college students,
+
+01:18:18.600 --> 01:18:19.100
+You know, we might get a whole new big crowd
+
+01:18:22.360 --> 01:18:22.580
+of people coming in. You know,
+
+01:18:25.200 --> 01:18:25.320
+just as I think OREG has really attracted a
+
+01:18:26.840 --> 01:18:27.340
+lot of people in the sciences,
+
+01:18:30.060 --> 01:18:30.440
+since that's what it was originally developed
+
+01:18:32.500 --> 01:18:32.860
+for. So just a thought,
+
+01:18:35.740 --> 01:18:35.900
+you know, maybe if you get any volunteers who
+
+01:18:38.440 --> 01:18:38.940
+can help in the reach out or just,
+
+01:18:40.320 --> 01:18:40.560
+you know, sending things around to
+
+01:18:43.780 --> 01:18:44.020
+universities that might really extend who
+
+01:18:45.060 --> 01:18:45.560
+gets exposed to this stuff.
+
+01:18:49.240 --> 01:18:49.480
+[Speaker 1]: Yeah, I think that's a great and very
+
+01:18:51.960 --> 01:18:52.020
+interesting idea. And it sort of touches on a
+
+01:18:52.600 --> 01:18:53.000
+couple of different things.
+
+01:18:53.640 --> 01:18:54.140
+Sort of like you mentioned,
+
+01:18:56.180 --> 01:18:56.400
+well, with org, it sort of really drew into
+
+01:19:00.060 --> 01:19:00.560
+sciences, folks. It would be interesting to
+
+01:19:03.280 --> 01:19:03.780
+see other parts of Emacs doing that for other
+
+01:19:05.740 --> 01:19:06.240
+kinds of communities, but also specifically,
+
+01:19:08.920 --> 01:19:09.420
+I guess, for colleges and universities.
+
+01:19:14.220 --> 01:19:14.680
+Yeah, it would be cool if we had local groups
+
+01:19:17.140 --> 01:19:17.300
+or local meetups, because so far right now,
+
+01:19:20.140 --> 01:19:20.420
+I think the most common ones are like by city
+
+01:19:22.280 --> 01:19:22.440
+like for example a Toronto Emacs meetup or
+
+01:19:25.320 --> 01:19:25.760
+something like that yeah if you could maybe
+
+01:19:28.820 --> 01:19:29.320
+encourage or help foster a university level
+
+01:19:32.200 --> 01:19:32.520
+type of thing you know University of blah
+
+01:19:35.360 --> 01:19:35.860
+blah Emacs group or something like that and
+
+01:19:39.860 --> 01:19:40.080
+you know seeing what their needs would be or
+
+01:19:42.860 --> 01:19:43.360
+trying to think also what features of Emacs
+
+01:19:46.260 --> 01:19:46.560
+would be very useful in an academic slash
+
+01:19:48.680 --> 01:19:48.920
+educational setting. Yeah,
+
+01:19:50.460 --> 01:19:50.840
+lots of food for thought there.
+
+01:19:52.120 --> 01:19:52.620
+So thank you for mentioning this.
+
+01:20:02.420 --> 01:20:02.920
+[Speaker 5]: Sure. And I guess, yeah,
+
+01:20:04.400 --> 01:20:04.900
+OBS is coming up here.
+
+01:20:06.820 --> 01:20:07.040
+I worked with that a bit,
+
+01:20:08.920 --> 01:20:09.240
+yes, last year. You know,
+
+01:20:12.040 --> 01:20:12.540
+another powerful piece of software with a
+
+01:20:15.240 --> 01:20:15.740
+sort of, I think, a weak user interface,
+
+01:20:20.080 --> 01:20:20.540
+you know, for the newbies coming along on it.
+
+01:20:23.200 --> 01:20:23.700
+And maybe, you know, if there's,
+
+01:20:25.920 --> 01:20:26.420
+if that's kind of what people use,
+
+01:20:29.540 --> 01:20:29.700
+figuring out or putting some information in
+
+01:20:32.740 --> 01:20:33.240
+the wiki about how to do that,
+
+01:20:34.900 --> 01:20:35.400
+you know, work with it or...
+
+01:20:36.300 --> 01:20:36.800
+[Speaker 4]: Oh, good idea.
+
+01:20:43.140 --> 01:20:43.340
+[Speaker 3]: I can comment. It is definitely the
+
+01:20:46.420 --> 01:20:46.920
+preeminent streamer software out there,
+
+01:20:49.120 --> 01:20:49.620
+well beyond the free software community.
+
+01:20:54.120 --> 01:20:54.500
+It's used by most streamers on Twitch and
+
+01:20:59.680 --> 01:20:59.960
+other like commercial for-profit things but
+
+01:21:01.780 --> 01:21:02.220
+of course those companies are making money
+
+01:21:04.480 --> 01:21:04.700
+off people trying to give money to the
+
+01:21:07.200 --> 01:21:07.440
+streamers. Those streamers aren't getting any
+
+01:21:10.160 --> 01:21:10.660
+software help. So actually most of them are
+
+01:21:13.900 --> 01:21:14.400
+dependent for their income on free software
+
+01:21:18.680 --> 01:21:18.900
+like OBS and OBS in specific or by some kind
+
+01:21:23.100 --> 01:21:23.600
+of forked brand name is the primary tool.
+
+01:21:28.660 --> 01:21:28.820
+[Speaker 4]: If I'm not mistaken I believe Stefan has
+
+01:21:29.860 --> 01:21:30.360
+joined us right now in the room.
+
+01:21:33.240 --> 01:21:33.420
+I'm putting you on the spot,
+
+01:21:34.480 --> 01:21:34.760
+if you want to stay muted you can.
+
+01:21:35.640 --> 01:21:36.140
+Oh, you have unmuted yourself.
+
+01:21:38.400 --> 01:21:38.900
+[Speaker 7]: I managed to click the unmute button.
+
+01:21:41.180 --> 01:21:41.680
+Yes, I'm here. How are you guys doing?
+
+01:21:43.840 --> 01:21:44.200
+[Speaker 4]: Doing good, surviving here.
+
+01:21:44.200 --> 01:21:44.700
+[Speaker 1]: Congratulations.
+
+01:21:45.480 --> 01:21:45.980
+[Speaker 4]: Late in your time.
+
+01:21:50.040 --> 01:21:50.220
+[Speaker 7]: Really amazing work organizing the
+
+01:21:51.960 --> 01:21:52.460
+conference. I really have to congratulate
+
+01:21:56.120 --> 01:21:56.480
+everyone. So I just hopped on here to sort of
+
+01:21:58.140 --> 01:21:58.640
+say that I'm extremely impressed.
+
+01:22:04.240 --> 01:22:04.540
+And I think this is an example to follow for
+
+01:22:07.040 --> 01:22:07.440
+other conferences and for Emacs in general.
+
+01:22:09.400 --> 01:22:09.900
+I think we need more of this community-type
+
+01:22:12.940 --> 01:22:13.380
+organizing and just getting people interested
+
+01:22:15.960 --> 01:22:16.240
+and involved on all kinds of levels can only
+
+01:22:20.200 --> 01:22:20.340
+help Emacs. Because we are in this for the
+
+01:22:22.540 --> 01:22:23.040
+long haul. That's it.
+
+01:22:25.280 --> 01:22:25.780
+[Speaker 3]: Oh, what a great point.
+
+01:22:28.500 --> 01:22:28.740
+If I can comment, that's 1 of the things that
+
+01:22:30.720 --> 01:22:31.020
+drew me to trying to contribute to free
+
+01:22:32.580 --> 01:22:32.960
+software when I was a kid,
+
+01:22:35.580 --> 01:22:36.080
+like we're talking now 30 plus years ago,
+
+01:22:38.360 --> 01:22:38.860
+the idea like, and I recognized it from
+
+01:22:42.180 --> 01:22:42.620
+Stallman's initial manifestos on the topic,
+
+01:22:45.060 --> 01:22:45.360
+right? He was clearly in this for the long
+
+01:22:47.040 --> 01:22:47.540
+haul. Like I am building the library of
+
+01:22:50.500 --> 01:22:50.740
+Alexandria here and like linking the work
+
+01:22:52.420 --> 01:22:52.580
+that we're trying to do to community that I
+
+01:22:54.640 --> 01:22:54.900
+don't know how you could touch my heart you
+
+01:22:57.620 --> 01:22:57.840
+know more surely because that's that's
+
+01:22:59.440 --> 01:22:59.940
+exactly what we want to do not necessarily
+
+01:23:03.800 --> 01:23:04.300
+any given talk or comment but the idea that
+
+01:23:07.960 --> 01:23:08.460
+we have to get together and share our ideas
+
+01:23:10.900 --> 01:23:11.400
+and the place that we do that has to be just
+
+01:23:14.380 --> 01:23:14.880
+has to be a buffet and not a crucible.
+
+01:23:17.620 --> 01:23:17.800
+[Speaker 7]: And look, we're standing on the shoulders of
+
+01:23:19.400 --> 01:23:19.840
+giants, really, when we're looking at Emacs
+
+01:23:21.100 --> 01:23:21.600
+and sort of what we have achieved.
+
+01:23:24.680 --> 01:23:24.840
+And the galaxy of talent that exists in the
+
+01:23:27.040 --> 01:23:27.540
+Emacs community is also like truly
+
+01:23:30.800 --> 01:23:31.300
+impressive, I think. So There's a lot of work
+
+01:23:34.280 --> 01:23:34.780
+to be done, but we've also achieved some
+
+01:23:37.120 --> 01:23:37.480
+pretty impressive things so far.
+
+01:23:38.620 --> 01:23:39.120
+So let's just keep at it.
+
+01:23:43.200 --> 01:23:43.700
+I'm sure we'll have a fantastic future for
+
+01:23:44.180 --> 01:23:44.680
+Emacs.
+
+01:23:52.540 --> 01:23:53.040
+[Speaker 5]: You know, I'm kind of interested in what
+
+01:23:56.540 --> 01:23:57.040
+Stefan's here. You know,
+
+01:24:00.400 --> 01:24:00.900
+just the common tropes that go around.
+
+01:24:05.320 --> 01:24:05.740
+I just hear it so much on the net,
+
+01:24:07.540 --> 01:24:08.040
+you know, is Emacs still alive?
+
+01:24:09.960 --> 01:24:10.460
+Do people still use it?
+
+01:24:11.120 --> 01:24:11.480
+You know, and of course,
+
+01:24:13.620 --> 01:24:14.100
+it's like you have an older piece of software
+
+01:24:15.200 --> 01:24:15.700
+that started so long ago,
+
+01:24:17.540 --> 01:24:17.720
+people don't realize that it's still up,
+
+01:24:20.320 --> 01:24:20.820
+but it's also because of the trends,
+
+01:24:22.900 --> 01:24:23.400
+right? You know, we've got the electron-based
+
+01:24:28.580 --> 01:24:28.740
+development and Visual Studio is slick out of
+
+01:24:32.720 --> 01:24:33.220
+the box. So what's in the core Emacs
+
+01:24:36.260 --> 01:24:36.540
+developers realm, obviously you guys are
+
+01:24:38.160 --> 01:24:38.660
+taking this longer term perspective,
+
+01:24:44.060 --> 01:24:44.380
+which makes sense, but what do you think
+
+01:24:48.480 --> 01:24:48.980
+about this issue, the shorter term and how to
+
+01:24:52.200 --> 01:24:52.540
+alleviate those concerns that some people
+
+01:24:52.540 --> 01:24:53.040
+represent?
+
+01:24:54.820 --> 01:24:55.040
+[Speaker 7]: Of course, yes. I mean,
+
+01:24:55.840 --> 01:24:56.160
+this is something that,
+
+01:24:59.340 --> 01:24:59.600
+I mean, clearly people are discussing and as
+
+01:25:01.480 --> 01:25:01.800
+you say, It's almost like a trope at this
+
+01:25:04.200 --> 01:25:04.700
+point. And it's been discussed on EmacsDevil,
+
+01:25:07.800 --> 01:25:07.960
+what can we do to promote Emacs more and to
+
+01:25:10.240 --> 01:25:10.740
+what extent should we care about that?
+
+01:25:15.100 --> 01:25:15.600
+And I mean, my reply to that is usually just,
+
+01:25:19.120 --> 01:25:19.620
+the rumors of my death are very accurate.
+
+01:25:24.720 --> 01:25:25.220
+And I think this is true also for Emacs.
+
+01:25:29.240 --> 01:25:29.700
+So we are very much here.
+
+01:25:31.960 --> 01:25:32.460
+I think what has happened also is reflective
+
+01:25:34.960 --> 01:25:35.220
+of basically that there are just more
+
+01:25:36.580 --> 01:25:37.080
+programmers on the planet,
+
+01:25:38.040 --> 01:25:38.240
+[Speaker 3]: And we
+
+01:25:39.920 --> 01:25:40.420
+[Speaker 7]: right? haven't been able to sort of catch
+
+01:25:41.960 --> 01:25:42.460
+that segment as it's been growing,
+
+01:25:44.680 --> 01:25:45.060
+but also we have more Emacs users I think
+
+01:25:47.500 --> 01:25:47.860
+today than probably ever before.
+
+01:25:48.420 --> 01:25:48.920
+We have more packages,
+
+01:25:50.540 --> 01:25:51.040
+we have more stuff going on.
+
+01:25:55.580 --> 01:25:55.980
+So I think it's a challenge as well,
+
+01:25:58.200 --> 01:25:58.440
+like to what extent do we wanna be like a
+
+01:26:00.260 --> 01:26:00.420
+niche and to what extent do we wanna be the
+
+01:26:03.280 --> 01:26:03.780
+text editor for programmers.
+
+01:26:06.420 --> 01:26:06.720
+And I think there's a tension there because
+
+01:26:09.780 --> 01:26:09.960
+we want to stay true to what Emacs is and to
+
+01:26:12.440 --> 01:26:12.940
+its sort of core values of what makes Emacs
+
+01:26:16.720 --> 01:26:16.880
+great, but can we still make some changes to
+
+01:26:18.340 --> 01:26:18.760
+sort of stay relevant.
+
+01:26:21.060 --> 01:26:21.340
+And I think that's a huge win.
+
+01:26:24.800 --> 01:26:24.960
+And clearly these discussions are going on on
+
+01:26:26.980 --> 01:26:27.280
+the Emacs level and in the minds of core
+
+01:26:29.340 --> 01:26:29.640
+developers, I think, every day.
+
+01:26:32.040 --> 01:26:32.540
+Even though, I mean, most of our work is just
+
+01:26:35.320 --> 01:26:35.820
+trying to keep adding new features,
+
+01:26:38.220 --> 01:26:38.720
+make sure that we have that sort of core
+
+01:26:40.060 --> 01:26:40.400
+infrastructure in place,
+
+01:26:42.280 --> 01:26:42.500
+which is part of the reason why I gave the
+
+01:26:44.260 --> 01:26:44.680
+talk I did yesterday, to invite more people
+
+01:26:46.920 --> 01:26:46.960
+to come on board. Because I see a lot of
+
+01:26:48.200 --> 01:26:48.700
+people have opinions about Emacs,
+
+01:26:50.700 --> 01:26:51.200
+which is amazing, and we need more of that.
+
+01:26:54.160 --> 01:26:54.660
+But I think, let's say,
+
+01:26:56.280 --> 01:26:56.780
+patches speak louder than words.
+
+01:27:01.300 --> 01:27:01.780
+Software. And it's definitely true in Emacs
+
+01:27:01.780 --> 01:27:02.280
+development.
+
+01:27:04.680 --> 01:27:04.960
+[Speaker 3]: I want to just piggyback on,
+
+01:27:06.820 --> 01:27:06.940
+like attack the premise of the question a
+
+01:27:09.800 --> 01:27:09.960
+little bit, right? Remember that we are sort
+
+01:27:11.880 --> 01:27:12.380
+of in a trench warfare with commercial
+
+01:27:15.160 --> 01:27:15.660
+interests that are dependent on dominating
+
+01:27:20.660 --> 01:27:21.160
+software ecosystems in order to exploit users
+
+01:27:24.600 --> 01:27:24.760
+for money. Like that is a necessary thing to
+
+01:27:26.020 --> 01:27:26.420
+a lot of people's business model.
+
+01:27:30.060 --> 01:27:30.560
+And so we live in a world where software is
+
+01:27:32.760 --> 01:27:33.260
+more than tools. It is clothing.
+
+01:27:38.480 --> 01:27:38.840
+And so when I put on my Mac and I put on my
+
+01:27:42.860 --> 01:27:43.180
+UI skin, I'm not just choosing whether I like
+
+01:27:46.640 --> 01:27:46.960
+sliders or radio buttons or check boxes or
+
+01:27:49.840 --> 01:27:50.340
+the other UI mechanics that give that
+
+01:27:53.920 --> 01:27:54.160
+heuristic and make it make me think it's easy
+
+01:27:55.440 --> 01:27:55.940
+to use, easy to learn to use,
+
+01:27:59.160 --> 01:27:59.340
+right? I'm also choosing a whole line of
+
+01:28:02.080 --> 01:28:02.580
+implementation detail that I'm being actively
+
+01:28:06.040 --> 01:28:06.540
+trained not to try to understand by,
+
+01:28:08.720 --> 01:28:09.020
+you know, kind of the dark side of the force
+
+01:28:11.780 --> 01:28:12.100
+over here. So when I think about,
+
+01:28:14.380 --> 01:28:14.880
+you know, make Emacs more like Toaster,
+
+01:28:18.860 --> 01:28:19.060
+[Speaker 1]: you know,
+
+01:28:21.340 --> 01:28:21.560
+[Speaker 3]: I, 1 of my responses is every time that
+
+01:28:22.740 --> 01:28:22.960
+question asks, you know,
+
+01:28:24.160 --> 01:28:24.480
+an angel grows, gets asked,
+
+01:28:25.440 --> 01:28:25.720
+an angel grows its wings.
+
+01:28:27.040 --> 01:28:27.540
+A developer submits a patch,
+
+01:28:30.040 --> 01:28:30.240
+a bug gets opened that we can,
+
+01:28:31.840 --> 01:28:32.320
+you know, with enough information to actually
+
+01:28:33.240 --> 01:28:33.740
+do something about it,
+
+01:28:34.920 --> 01:28:35.280
+the ecosystem gets better,
+
+01:28:38.100 --> 01:28:38.600
+right? Whether a new user comes or not,
+
+01:28:40.680 --> 01:28:41.040
+like somebody's actually asking a question
+
+01:28:42.780 --> 01:28:42.900
+that's going to lead them someday to pick a
+
+01:28:43.260 --> 01:28:43.760
+better tool.
+
+01:28:47.620 --> 01:28:48.120
+[Speaker 7]: Yeah, it's true. I mean,
+
+01:28:50.000 --> 01:28:50.280
+we have powerful enemies and they are not
+
+01:28:52.540 --> 01:28:52.720
+working for us. And when they are working on
+
+01:28:54.960 --> 01:28:55.160
+improving VS code, you can't be under any
+
+01:28:56.640 --> 01:28:56.720
+illusion that they are doing that in the
+
+01:28:57.340 --> 01:28:57.660
+interest of the users.
+
+01:28:59.760 --> 01:29:00.060
+They're doing that in their interest of the
+
+01:29:02.620 --> 01:29:02.780
+corporate owners. So this is the reality that
+
+01:29:04.640 --> 01:29:04.900
+we have to face and Emacs is just not like
+
+01:29:07.920 --> 01:29:08.040
+that. And this is of course part of the
+
+01:29:09.960 --> 01:29:10.460
+reason why it's so important that we continue
+
+01:29:14.040 --> 01:29:14.260
+this work for the future of being able to do
+
+01:29:17.640 --> 01:29:17.800
+computing in a free way and in a way that is
+
+01:29:20.220 --> 01:29:20.380
+actually, you know, supports the types of
+
+01:29:21.740 --> 01:29:22.240
+workflows that we know and love.
+
+01:29:26.720 --> 01:29:26.920
+[Speaker 4]: Something that I'd like to add to this is
+
+01:29:29.680 --> 01:29:30.060
+that, you know, you've mentioned we need more
+
+01:29:30.640 --> 01:29:31.140
+programmers in the world.
+
+01:29:33.240 --> 01:29:33.340
+And in light of what we're doing with
+
+01:29:35.140 --> 01:29:35.220
+EmacsConf, perhaps we need more people to be
+
+01:29:36.580 --> 01:29:36.960
+at EmacsConf talking, not necessarily
+
+01:29:38.100 --> 01:29:38.600
+programmers, but just people apprehending
+
+01:29:40.520 --> 01:29:40.940
+Emacs and talking about it.
+
+01:29:42.720 --> 01:29:43.180
+It feels like we've got different missions
+
+01:29:44.440 --> 01:29:44.700
+that we're trying to accomplish with this.
+
+01:29:45.820 --> 01:29:46.320
+We are... Okay, you...
+
+01:29:47.780 --> 01:29:48.280
+Go ahead, Colin.
+
+01:29:49.600 --> 01:29:49.940
+[Speaker 3]: I can't leave that alone.
+
+01:29:52.120 --> 01:29:52.420
+I almost came in there on the previous point.
+
+01:29:55.020 --> 01:29:55.240
+Yeah, I actually Completely agree with that
+
+01:29:58.900 --> 01:29:59.140
+Leo. That's something that and I mean to be
+
+01:30:02.780 --> 01:30:03.240
+fair. I owe a good I owe dev al a good email
+
+01:30:05.800 --> 01:30:06.160
+on this topic, but we desperately need more
+
+01:30:07.840 --> 01:30:08.340
+project managers, more solutions architect,
+
+01:30:10.380 --> 01:30:10.880
+more business process analysts,
+
+01:30:12.660 --> 01:30:13.160
+more systems analysts,
+
+01:30:15.100 --> 01:30:15.560
+more, you know, and the best tech,
+
+01:30:17.900 --> 01:30:18.400
+you know, some of the best threads start with
+
+01:30:23.100 --> 01:30:23.420
+quite a bit of an analytical work done on the
+
+01:30:24.940 --> 01:30:25.440
+part of an engineer who's come along.
+
+01:30:29.320 --> 01:30:29.680
+But actually, Larry Wall has this quote,
+
+01:30:31.640 --> 01:30:32.140
+right? Where he says, consider 3 solutions
+
+01:30:34.120 --> 01:30:34.300
+and build 1. And I think we struggle with
+
+01:30:36.760 --> 01:30:37.260
+that as a community because getting a patch
+
+01:30:39.920 --> 01:30:40.120
+is a lot of work and a lot to ask for
+
+01:30:42.900 --> 01:30:43.080
+somebody. So asking 3 people to submit a
+
+01:30:45.200 --> 01:30:45.260
+patch means you're saying no to a lot of
+
+01:30:47.280 --> 01:30:47.560
+blood, sweat and tears on the part of like 2
+
+01:30:48.960 --> 01:30:49.460
+people, maybe 2 teams of people.
+
+01:30:55.520 --> 01:30:56.020
+[Speaker 5]: And 1 thing I think is a big expansion is
+
+01:31:02.020 --> 01:31:02.520
+usability and user experience design.
+
+01:31:05.560 --> 01:31:05.900
+I think, and not in the sense like,
+
+01:31:08.260 --> 01:31:08.760
+you know, CUA mode or,
+
+01:31:12.440 --> 01:31:12.560
+you know, people don't realize that Emacs key
+
+01:31:13.680 --> 01:31:14.180
+bindings are actually ergonomic,
+
+01:31:16.720 --> 01:31:17.220
+but more, you know, like for myself,
+
+01:31:20.240 --> 01:31:20.740
+I did a lot of work in sort of bringing out
+
+01:31:24.480 --> 01:31:24.880
+Emacs features and did a lot of things
+
+01:31:26.240 --> 01:31:26.740
+creating this info doc,
+
+01:31:28.940 --> 01:31:29.100
+you know, which is sort of like Space Max or
+
+01:31:30.300 --> 01:31:30.800
+something in the old days.
+
+01:31:33.900 --> 01:31:34.200
+But the process, yeah,
+
+01:31:38.600 --> 01:31:39.100
+kept a lot of that from ever making it into
+
+01:31:40.460 --> 01:31:40.680
+CoreDMX and, you know,
+
+01:31:44.180 --> 01:31:44.680
+just a lack of time on my part to follow up.
+
+01:31:46.560 --> 01:31:47.060
+But if you had somebody,
+
+01:31:51.220 --> 01:31:51.500
+you know, who sort of coalesced all the
+
+01:31:52.820 --> 01:31:53.260
+technical work on like,
+
+01:31:56.280 --> 01:31:56.480
+here's how we can put it together and make it
+
+01:32:01.320 --> 01:32:01.820
+more accessible, I've seen that go a long way
+
+01:32:02.800 --> 01:32:03.300
+in certain environments.
+
+01:32:06.100 --> 01:32:06.340
+And I imagine, you know,
+
+01:32:08.160 --> 01:32:08.660
+it's just not the experience of,
+
+01:32:11.180 --> 01:32:11.680
+you know, most people on the core team.
+
+01:32:14.620 --> 01:32:15.060
+[Speaker 7]: Yeah, for sure. I mean,
+
+01:32:16.160 --> 01:32:16.560
+We don't have, I mean,
+
+01:32:18.760 --> 01:32:18.900
+we're mostly a bunch, we're a bunch of
+
+01:32:20.080 --> 01:32:20.280
+programmers. That's what we are,
+
+01:32:22.640 --> 01:32:22.800
+right? We don't have graphical signers or any
+
+01:32:24.320 --> 01:32:24.620
+of the stuff that you're talking about.
+
+01:32:28.380 --> 01:32:28.580
+So we don't have really any UX experts on
+
+01:32:30.380 --> 01:32:30.800
+board. So perhaps that would be welcome.
+
+01:32:35.460 --> 01:32:35.960
+But then again, how do you even fit the EMAX
+
+01:32:38.880 --> 01:32:39.280
+paradigm into what is typically taught and
+
+01:32:40.840 --> 01:32:41.120
+discussed in UX? I mean,
+
+01:32:43.220 --> 01:32:43.380
+maybe there is a way. I'm sure there are
+
+01:32:45.640 --> 01:32:45.920
+general principles and a lot that we could
+
+01:32:47.880 --> 01:32:48.380
+learn, But then there is also like this,
+
+01:32:52.240 --> 01:32:52.440
+we have to stay true to what Emacs is to some
+
+01:32:53.940 --> 01:32:54.400
+extent and what does that look like
+
+01:32:56.320 --> 01:32:56.580
+concretely. There are discussions to be had
+
+01:32:58.620 --> 01:32:59.120
+for sure, but we would definitely benefit
+
+01:33:02.900 --> 01:33:03.400
+from that type of specific input.
+
+01:33:04.360 --> 01:33:04.480
+[Speaker 3]: Well, I
+
+01:33:06.940 --> 01:33:07.240
+[Speaker 5]: mean, like a simple example today is I looked
+
+01:33:09.720 --> 01:33:09.900
+at the conference guidelines I always stay in
+
+01:33:13.160 --> 01:33:13.420
+dark mode and it said well use light mode for
+
+01:33:16.220 --> 01:33:16.420
+your presentation so okay I'll switch to
+
+01:33:19.280 --> 01:33:19.480
+light mode let me load a theme so I go into
+
+01:33:21.280 --> 01:33:21.780
+all the default themes and,
+
+01:33:23.900 --> 01:33:24.400
+you know, start going through the light ones
+
+01:33:28.080 --> 01:33:28.580
+and then I check all the faces and,
+
+01:33:31.120 --> 01:33:31.620
+you know, there are at least 3 to 5 faces
+
+01:33:35.160 --> 01:33:35.600
+that have nearly invisible text as a result
+
+01:33:38.480 --> 01:33:38.980
+of the background highlighting on them.
+
+01:33:40.080 --> 01:33:40.460
+And I'm like, you know,
+
+01:33:43.380 --> 01:33:43.680
+so there's low hanging fruit like that where
+
+01:33:46.840 --> 01:33:47.020
+people would deal with the structure of the
+
+01:33:49.400 --> 01:33:49.900
+menus, the actual faces,
+
+01:33:53.120 --> 01:33:53.620
+the themes, that don't have to do anything
+
+01:33:57.840 --> 01:33:58.060
+affecting core Emacs except make the
+
+01:33:59.960 --> 01:34:00.460
+presentation much better.
+
+01:34:03.380 --> 01:34:03.640
+[Speaker 7]: Yeah, definitely. If people want to send such
+
+01:34:06.160 --> 01:34:06.660
+polishing patches for various aspects,
+
+01:34:09.280 --> 01:34:09.520
+I spent some time making a new help screen.
+
+01:34:10.520 --> 01:34:10.960
+I don't know if you noticed,
+
+01:34:12.740 --> 01:34:13.040
+I don't know how many people press Control H,
+
+01:34:14.160 --> 01:34:14.660
+Control H on their keyboards,
+
+01:34:17.540 --> 01:34:17.720
+But it's like with new sections and it's
+
+01:34:18.480 --> 01:34:18.980
+sorted a little bit better.
+
+01:34:20.500 --> 01:34:20.640
+It didn't take much. I mean,
+
+01:34:21.660 --> 01:34:22.060
+it took a time obviously,
+
+01:34:23.940 --> 01:34:24.440
+but it's not like it required some fantastic
+
+01:34:28.140 --> 01:34:28.260
+technical knowledge or deep expertise in
+
+01:34:29.200 --> 01:34:29.700
+Emacs Lisp to do that.
+
+01:34:31.480 --> 01:34:31.980
+It's Basically anyone can do stuff like that.
+
+01:34:34.200 --> 01:34:34.340
+So definitely if you're interested in doing
+
+01:34:37.440 --> 01:34:37.680
+that type of work, start discussing with us.
+
+01:34:41.040 --> 01:34:41.440
+Let's talk about what we can do and get doing
+
+01:34:41.820 --> 01:34:42.320
+it, really.
+
+01:34:44.960 --> 01:34:45.140
+[Speaker 4]: Yeah, this is exactly in line with your
+
+01:34:45.800 --> 01:34:46.240
+presentation from yesterday,
+
+01:34:47.720 --> 01:34:47.920
+Stefan, as well, because you were just
+
+01:34:50.160 --> 01:34:50.320
+inviting people who are not contributing to
+
+01:34:51.380 --> 01:34:51.740
+the core of Emacs to do so.
+
+01:34:53.200 --> 01:34:53.360
+You were talking to package developer on
+
+01:34:55.120 --> 01:34:55.440
+MailPub, but you were also talking just about
+
+01:34:58.200 --> 01:34:58.380
+the average Joe or Jane just doing their own
+
+01:34:59.580 --> 01:35:00.080
+things or encountering a problem.
+
+01:35:01.120 --> 01:35:01.280
+Now, yes, we talked about,
+
+01:35:02.800 --> 01:35:02.960
+oh, you need to build master and all this,
+
+01:35:03.920 --> 01:35:04.420
+but at the end of the day,
+
+01:35:06.680 --> 01:35:06.960
+low-hanging fruits like the ones Bob just
+
+01:35:09.840 --> 01:35:10.120
+described. If everyone does this at the end,
+
+01:35:11.280 --> 01:35:11.780
+you end up with something that is extremely
+
+01:35:13.520 --> 01:35:13.620
+polished. Perhaps you do not need to have a
+
+01:35:14.900 --> 01:35:15.140
+UX specialist to tell you that,
+
+01:35:18.220 --> 01:35:18.340
+oh, those 2 colors are actually very close to
+
+01:35:21.220 --> 01:35:21.600
+1 another. I think it's kind of a discussion
+
+01:35:23.580 --> 01:35:24.020
+about same defaults as well that you had
+
+01:35:25.080 --> 01:35:25.580
+yesterday. Ultimately,
+
+01:35:27.340 --> 01:35:27.600
+we do not need... Yes,
+
+01:35:28.780 --> 01:35:29.040
+we need more programmers in the world.
+
+01:35:30.480 --> 01:35:30.980
+We want more people to use Emacs.
+
+01:35:33.740 --> 01:35:34.240
+But you don't know. Like,
+
+01:35:36.220 --> 01:35:36.500
+is it going to be someone in computer science
+
+01:35:38.420 --> 01:35:38.620
+that's going to be the next giant on whose
+
+01:35:39.580 --> 01:35:39.880
+shoulders we're going to stand?
+
+01:35:41.003 --> 01:35:41.010
+[Speaker 3]: computer science? Is it going to be someone
+
+01:35:41.066 --> 01:35:41.074
+in computer science that's going to be the
+
+01:35:41.082 --> 01:35:41.090
+next giant
+
+01:35:41.137 --> 01:35:41.145
+[Speaker 1]: on whose shoulders we're going to stand?
+
+01:35:41.184 --> 01:35:41.192
+Is it someone who did not
+
+01:35:41.192 --> 01:35:41.200
+[Speaker 4]: Is it someone who did not study study
+
+01:35:42.660 --> 01:35:42.980
+computer science? Is it going to be someone
+
+01:35:44.060 --> 01:35:44.560
+who did something completely different?
+
+01:35:46.960 --> 01:35:47.120
+We do not know the prototypical user of
+
+01:35:49.280 --> 01:35:49.640
+Emacs. We have some idea about the fact that
+
+01:35:51.760 --> 01:35:51.940
+they might be using you know,
+
+01:35:52.580 --> 01:35:53.080
+Emacs for their programming,
+
+01:35:55.560 --> 01:35:55.680
+but more and more, and as is evidenced by the
+
+01:35:56.420 --> 01:35:56.920
+talks we received with EmacsConf,
+
+01:36:01.020 --> 01:36:01.360
+it's just people doing writing or taking
+
+01:36:01.920 --> 01:36:02.420
+notes for their classes.
+
+01:36:06.340 --> 01:36:06.540
+So it's really interesting to see how and to
+
+01:36:09.400 --> 01:36:09.480
+explore for us how we can give back to the
+
+01:36:11.180 --> 01:36:11.600
+core of Emacs in a way that is mutually
+
+01:36:12.360 --> 01:36:12.700
+constructive because again,
+
+01:36:14.440 --> 01:36:14.940
+to go back to the philosophy or the political
+
+01:36:17.400 --> 01:36:17.640
+agenda that we have is for more people to use
+
+01:36:19.700 --> 01:36:20.200
+software that is not the liberties.
+
+01:36:20.500 --> 01:36:21.000
+Exactly.
+
+01:36:24.140 --> 01:36:24.280
+[Speaker 3]: So right. Yeah. I mean,
+
+01:36:25.840 --> 01:36:26.100
+that's a good spot for me to come right back
+
+01:36:27.380 --> 01:36:27.720
+in. And that's exactly where I do.
+
+01:36:30.200 --> 01:36:30.420
+Right. Because that's that's what it's all
+
+01:36:33.040 --> 01:36:33.540
+about. In the In terms of a tool user,
+
+01:36:36.600 --> 01:36:37.100
+you know, the evolution of using tools as,
+
+01:36:38.620 --> 01:36:39.120
+you know, these creatures have fought,
+
+01:36:42.820 --> 01:36:43.220
+Emacs is fire. Emacs is the ability to learn
+
+01:36:45.920 --> 01:36:46.320
+languages, the ability to manipulate other
+
+01:36:48.140 --> 01:36:48.640
+tools. I mean, it's almost like,
+
+01:36:50.680 --> 01:36:51.140
+you know, God Emperor of Dune level,
+
+01:36:53.720 --> 01:36:54.140
+you know, some Frank Herbert type of powers
+
+01:36:56.480 --> 01:36:56.680
+that you have over your computer and you are
+
+01:36:58.460 --> 01:36:58.740
+not required to understand how all those
+
+01:37:02.440 --> 01:37:02.940
+things work. So from a support standpoint
+
+01:37:04.540 --> 01:37:04.840
+that puts us in a challenging position,
+
+01:37:06.300 --> 01:37:06.720
+right? I spend a lot of time on Pound Emacs
+
+01:37:07.760 --> 01:37:08.040
+and the questions that go by there,
+
+01:37:09.840 --> 01:37:09.960
+I feel bad for people that feel like they
+
+01:37:12.600 --> 01:37:12.720
+have to answer every question that goes by in
+
+01:37:14.060 --> 01:37:14.500
+the channel because no 1 could.
+
+01:37:16.640 --> 01:37:17.080
+No 1 can give an intelligent answer to the,
+
+01:37:18.040 --> 01:37:18.540
+you know, everything from,
+
+01:37:21.260 --> 01:37:21.440
+Hey, how do I change my default font on this
+
+01:37:23.520 --> 01:37:24.020
+operating system? You've never heard of to,
+
+01:37:26.140 --> 01:37:26.480
+you know, how do you know this list code?
+
+01:37:28.040 --> 01:37:28.340
+That's 40 lines long doesn't work.
+
+01:37:30.040 --> 01:37:30.260
+And I think it was a recent change that was
+
+01:37:31.720 --> 01:37:32.220
+made to the P case macro.
+
+01:37:39.480 --> 01:37:39.980
+Do you agree? Right? And as deep as that,
+
+01:37:42.740 --> 01:37:43.240
+well is, if you turn it 90 degrees,
+
+01:37:45.040 --> 01:37:45.200
+the Emacs is that kind of tool to the
+
+01:37:46.080 --> 01:37:46.400
+operating system level.
+
+01:37:48.800 --> 01:37:49.280
+It's letting me walk across to other systems,
+
+01:37:51.360 --> 01:37:51.780
+multi-hop, become the super user,
+
+01:37:55.120 --> 01:37:55.620
+right? And, you know, the just the power,
+
+01:37:57.600 --> 01:37:58.020
+the amplification of power there,
+
+01:38:02.320 --> 01:38:02.820
+it's like the lever combined with the magnet,
+
+01:38:08.140 --> 01:38:08.640
+etc, etc. I mean, just,
+
+01:38:14.760 --> 01:38:14.960
+yeah, I don't know. So I guess where we kind
+
+01:38:16.260 --> 01:38:16.640
+of jump off, where that gets stuck,
+
+01:38:18.580 --> 01:38:18.740
+right, is trying to change something like the
+
+01:38:19.760 --> 01:38:20.260
+defaults in the user experience.
+
+01:38:22.740 --> 01:38:23.240
+So I imagine, you know,
+
+01:38:26.580 --> 01:38:26.920
+we don't get 1 great idea about user
+
+01:38:28.020 --> 01:38:28.520
+experience, we'll get 3,
+
+01:38:30.240 --> 01:38:30.480
+right? And then Once again,
+
+01:38:32.980 --> 01:38:33.400
+we have to send our brave developers off to
+
+01:38:36.220 --> 01:38:36.440
+build 1 to 3 patches, some of which won't see
+
+01:38:41.040 --> 01:38:41.140
+the light of day. I think that's where the
+
+01:38:41.920 --> 01:38:42.420
+breakthrough is needed.
+
+01:38:46.680 --> 01:38:47.180
+Another evolution in the packaging thought,
+
+01:38:48.620 --> 01:38:49.120
+or maybe it's not packaging.
+
+01:38:50.920 --> 01:38:51.380
+Maybe it's the compilation step.
+
+01:38:52.800 --> 01:38:53.220
+Maybe it's the distribution step.
+
+01:38:56.120 --> 01:38:56.280
+Maybe we want the Debians of the world to
+
+01:38:59.220 --> 01:38:59.540
+deliver Emacs as 2 different pieces now.
+
+01:39:03.540 --> 01:39:03.700
+And there's a UX piece that we want you to
+
+01:39:05.280 --> 01:39:05.780
+package each 1 that you package,
+
+01:39:09.060 --> 01:39:09.240
+each 1 per window manager that you support or
+
+01:39:11.380 --> 01:39:11.660
+at the intersection of each window manager
+
+01:39:12.940 --> 01:39:13.300
+and display manager you port.
+
+01:39:15.200 --> 01:39:15.300
+And the other one's just the server and you
+
+01:39:17.040 --> 01:39:17.280
+don't even have to package that if I'm only
+
+01:39:19.680 --> 01:39:20.020
+offering the CLI or there's a you know like
+
+01:39:21.960 --> 01:39:22.280
+I'm making all this up and I can't code a
+
+01:39:23.760 --> 01:39:24.260
+single thing like what I just said,
+
+01:39:26.920 --> 01:39:27.420
+but I think that there's a technical
+
+01:39:31.640 --> 01:39:32.140
+opportunity. Pretty high level for technical
+
+01:39:35.020 --> 01:39:35.520
+there of just thinking about a way to accept
+
+01:39:40.560 --> 01:39:40.680
+contributions of experience with maybe a
+
+01:39:43.780 --> 01:39:44.280
+little less rigor and a little less ground
+
+01:39:44.900 --> 01:39:45.400
+into the marble.
+
+01:39:50.400 --> 01:39:50.800
+[Speaker 5]: Yeah it makes me think of somebody at work
+
+01:39:54.220 --> 01:39:54.340
+just brought up pair programming and he's in
+
+01:39:58.080 --> 01:39:58.580
+love with it. He wants to pair up and do it,
+
+01:40:01.120 --> 01:40:01.620
+which is not true of all programmers.
+
+01:40:05.800 --> 01:40:06.300
+But I said, okay, so you spearhead that.
+
+01:40:10.680 --> 01:40:10.900
+If we, I think it is a very high barrier to
+
+01:40:13.580 --> 01:40:13.780
+get your patches in because of course they
+
+01:40:15.420 --> 01:40:15.860
+need to meet the quality standard of Emacs.
+
+01:40:20.800 --> 01:40:21.300
+So if people who are doing day-to-day
+
+01:40:24.200 --> 01:40:24.700
+understand that process and can do it well,
+
+01:40:28.200 --> 01:40:28.540
+could work with some of the people who can't
+
+01:40:30.040 --> 01:40:30.540
+quite contribute at that level,
+
+01:40:35.020 --> 01:40:35.240
+but have ideas that are on the level that
+
+01:40:39.780 --> 01:40:40.280
+should go in, pairing them up could really
+
+01:40:41.420 --> 01:40:41.920
+move a lot of that forward.
+
+01:40:46.000 --> 01:40:46.500
+Like Lars, I don't know what his,
+
+01:40:50.000 --> 01:40:50.500
+I get the feeling maybe he's retired.
+
+01:40:54.960 --> 01:40:55.380
+So, you know, maybe he has some time,
+
+01:40:58.300 --> 01:40:58.640
+you know, and he's really good at going back
+
+01:41:00.320 --> 01:41:00.480
+in and saying, you know,
+
+01:41:02.400 --> 01:41:02.480
+these areas haven't gotten attention in a
+
+01:41:05.660 --> 01:41:05.900
+while, so I'm going to go kill some bugs and
+
+01:41:08.160 --> 01:41:08.660
+look at them and fix them up.
+
+01:41:13.640 --> 01:41:13.840
+So I would think he would be good to do that
+
+01:41:15.340 --> 01:41:15.480
+with someone. But you know,
+
+01:41:22.400 --> 01:41:22.740
+Again, I've got years of code that would just
+
+01:41:25.320 --> 01:41:25.760
+require somebody to work through it to update
+
+01:41:28.340 --> 01:41:28.660
+to the latest code base and diff against it.
+
+01:41:30.080 --> 01:41:30.480
+But it does things like,
+
+01:41:32.960 --> 01:41:33.420
+I mean, like if anybody used RMAIL anymore,
+
+01:41:36.200 --> 01:41:36.700
+I made the summary mode of RMAIL exactly
+
+01:41:40.080 --> 01:41:40.580
+compatible key-wise with the main buffer,
+
+01:41:43.140 --> 01:41:43.260
+which it never was, and fixed a number of
+
+01:41:46.120 --> 01:41:46.620
+other features. Dured made operations
+
+01:41:49.340 --> 01:41:49.480
+reversible, where you mark something and you
+
+01:41:51.420 --> 01:41:51.920
+unmark it, and you can go up and down.
+
+01:41:53.160 --> 01:41:53.480
+And there are all these little
+
+01:41:56.260 --> 01:41:56.760
+incompatibilities that kind of add up across
+
+01:42:00.120 --> 01:42:00.620
+time, and they never seem to get addressed.
+
+01:42:06.180 --> 01:42:06.480
+We could just fix them and people would start
+
+01:42:09.400 --> 01:42:09.640
+to say, oh, this is smoother and they are
+
+01:42:12.580 --> 01:42:12.820
+getting more of that experience because it
+
+01:42:15.060 --> 01:42:15.560
+feels like the systems maybe 80,
+
+01:42:20.740 --> 01:42:21.240
+85% of the way there in a lot of thoughtful
+
+01:42:26.040 --> 01:42:26.200
+design. But that last 15% could be the
+
+01:42:29.640 --> 01:42:30.100
+difference between an iPhone and an Android
+
+01:42:32.260 --> 01:42:32.760
+phone of usability-wise.
+
+01:42:38.720 --> 01:42:38.940
+So that's a thought. That's a
+
+01:42:41.100 --> 01:42:41.240
+[Speaker 3]: brilliant idea, and it probably can be
+
+01:42:42.840 --> 01:42:43.340
+applied far wider than emacs.
+
+01:42:46.060 --> 01:42:46.320
+That's something that that FSF should
+
+01:42:48.480 --> 01:42:48.980
+consider suggesting across,
+
+01:42:49.920 --> 01:42:50.420
+you know, GNU packages,
+
+01:42:54.280 --> 01:42:54.600
+for example, like a matchmaking project seems
+
+01:42:56.520 --> 01:42:56.880
+like something that FSF community teams
+
+01:43:04.020 --> 01:43:04.110
+should think about. Yeah,
+
+01:43:04.360 --> 01:43:04.520
+I was going
+
+01:43:04.920 --> 01:43:05.420
+[Speaker 1]: That's so... to say also,
+
+01:43:08.080 --> 01:43:08.140
+I noticed that the name Debian came up a
+
+01:43:09.840 --> 01:43:10.260
+while ago and now we were talking about
+
+01:43:14.540 --> 01:43:15.040
+programming and such and Mentoring maybe and
+
+01:43:17.960 --> 01:43:18.320
+Debian has this service or part of their site
+
+01:43:19.600 --> 01:43:20.100
+or community called Mentors.
+
+01:43:22.120 --> 01:43:22.620
+They have a website, mentors.debian.net,
+
+01:43:26.920 --> 01:43:27.100
+where the idea is that people who want to get
+
+01:43:28.100 --> 01:43:28.480
+into contributing to Debian,
+
+01:43:29.580 --> 01:43:30.080
+for example, to package things,
+
+01:43:33.200 --> 01:43:33.480
+but obviously don't have upload rights right
+
+01:43:35.720 --> 01:43:36.000
+away. This is where they can go to,
+
+01:43:38.460 --> 01:43:38.760
+and this is separate from their mailing list
+
+01:43:42.340 --> 01:43:42.580
+or bug trackers. They can basically build
+
+01:43:44.760 --> 01:43:45.260
+their changed packages and upload them here,
+
+01:43:48.220 --> 01:43:48.480
+and then Debian developers who have commit or
+
+01:43:51.380 --> 01:43:51.620
+upload rights to the Debian archive can go
+
+01:43:55.960 --> 01:43:56.120
+and review and give them feedback or ask them
+
+01:43:57.620 --> 01:43:58.120
+to change something or if it's good,
+
+01:44:01.620 --> 01:44:01.920
+then just easily upload the package right
+
+01:44:04.200 --> 01:44:04.440
+from there. And I wonder if it might make
+
+01:44:07.760 --> 01:44:08.000
+sense to have something kind of like that in
+
+01:44:10.360 --> 01:44:10.840
+like the context of Emacs or the GNU project
+
+01:44:13.360 --> 01:44:13.660
+as a whole, where we have like some kind of
+
+01:44:15.520 --> 01:44:16.020
+a, like loosely defined mentoring thing,
+
+01:44:18.840 --> 01:44:19.120
+where we could pair up people who are more
+
+01:44:20.500 --> 01:44:21.000
+experienced, who, for example,
+
+01:44:22.540 --> 01:44:22.740
+have commit rights in the Emacs core
+
+01:44:27.080 --> 01:44:27.240
+repository to match them up with someone who
+
+01:44:29.080 --> 01:44:29.260
+is just making your very first patches or
+
+01:44:31.640 --> 01:44:31.960
+contributions to Emacs or whatever other GNU
+
+01:44:34.000 --> 01:44:34.200
+package. Just some food for thought,
+
+01:44:38.040 --> 01:44:38.540
+[Speaker 5]: Yeah, sounds good.
+
+01:44:44.340 --> 01:44:44.600
+[Speaker 1]: I guess. Yeah, and then I guess 1 feature of
+
+01:44:47.360 --> 01:44:47.860
+such a system which would be nice is that it,
+
+01:44:49.200 --> 01:44:49.340
+at least in terms of, you know,
+
+01:44:50.380 --> 01:44:50.580
+the mentors that Debbie and that,
+
+01:44:52.200 --> 01:44:52.700
+that it has a web UI, which,
+
+01:44:56.040 --> 01:44:56.200
+is nice because mailing lists might be
+
+01:44:58.140 --> 01:44:58.380
+intimidating for someone who is just getting
+
+01:44:59.340 --> 01:44:59.840
+started, like in these communities.
+
+01:45:03.960 --> 01:45:04.200
+Or, you know, just making patches like that,
+
+01:45:05.440 --> 01:45:05.940
+or just have a series of concrete
+
+01:45:08.100 --> 01:45:08.320
+instructions. Like with mentors at
+
+01:45:11.100 --> 01:45:11.200
+Devian.net, I feel like you can't go wrong in
+
+01:45:13.820 --> 01:45:14.240
+terms of finding the steps of figuring out
+
+01:45:16.260 --> 01:45:16.500
+what you need to do to put together some
+
+01:45:19.040 --> 01:45:19.240
+change. Which I think the same idea could
+
+01:45:20.280 --> 01:45:20.740
+apply to Emacs, for example,
+
+01:45:20.860 --> 01:45:21.360
+as well.
+
+01:45:24.560 --> 01:45:24.960
+[Speaker 7]: I think this is a good point about lowering
+
+01:45:27.440 --> 01:45:27.620
+barriers, and how email is a barrier to
+
+01:45:28.860 --> 01:45:29.240
+people. I mean, so on the 1 hand,
+
+01:45:31.100 --> 01:45:31.320
+you have us guys on Emacs level,
+
+01:45:32.860 --> 01:45:33.360
+we're very used to the email workflow.
+
+01:45:35.140 --> 01:45:35.500
+Like we're not just using it for fun.
+
+01:45:37.040 --> 01:45:37.160
+You know what I mean? Like this is a
+
+01:45:38.320 --> 01:45:38.820
+workhorse. It really is.
+
+01:45:41.400 --> 01:45:41.840
+And it's tried, it's battled,
+
+01:45:42.900 --> 01:45:43.300
+tested. It has some quirks,
+
+01:45:45.140 --> 01:45:45.340
+but we know them extremely well on the other
+
+01:45:48.060 --> 01:45:48.380
+hand. So, but still we want more people
+
+01:45:50.700 --> 01:45:50.880
+involved, right? And we realized that,
+
+01:45:52.760 --> 01:45:52.960
+you know, times are changing as well.
+
+01:45:54.720 --> 01:45:54.900
+And people are more used to doing stuff from
+
+01:45:55.640 --> 01:45:56.140
+the web browser, perhaps.
+
+01:46:00.040 --> 01:46:00.320
+So we do want to move to a forge,
+
+01:46:01.920 --> 01:46:02.420
+or at least start looking into that.
+
+01:46:03.560 --> 01:46:04.060
+But there are some obstacles.
+
+01:46:06.060 --> 01:46:06.280
+So we are looking for volunteers to do that
+
+01:46:07.360 --> 01:46:07.580
+work. I'm not just saying it,
+
+01:46:08.640 --> 01:46:09.140
+like we are very serious.
+
+01:46:11.660 --> 01:46:11.760
+I'm very seriously asking people in the
+
+01:46:12.520 --> 01:46:13.020
+community to consider,
+
+01:46:14.920 --> 01:46:15.280
+hey, could you dedicate some time?
+
+01:46:18.660 --> 01:46:18.900
+I mean, it will take some dedication for sure
+
+01:46:20.600 --> 01:46:20.820
+it will take some time and it will take some
+
+01:46:23.040 --> 01:46:23.300
+describe probably even you know Be prepared
+
+01:46:24.760 --> 01:46:25.260
+to be frustrated at times right,
+
+01:46:26.980 --> 01:46:27.180
+but if you're serious about doing that type
+
+01:46:28.040 --> 01:46:28.260
+of work, okay now
+
+01:46:32.520 --> 01:46:32.900
+[Speaker 3]: I believe you Well, I'm just I'm just teasing
+
+01:46:35.900 --> 01:46:36.140
+but but but yes exactly any I mean it's it's
+
+01:46:38.560 --> 01:46:39.060
+not even a joke right Any serious undertaking
+
+01:46:41.420 --> 01:46:41.920
+having to do with any free software project,
+
+01:46:45.300 --> 01:46:45.600
+just because we are open to the entire world
+
+01:46:47.760 --> 01:46:48.160
+and we pride ourselves on trying to take
+
+01:46:50.020 --> 01:46:50.460
+seriously all input. And if it's a logical
+
+01:46:51.940 --> 01:46:52.040
+argument, then we'll go ahead and take the
+
+01:46:53.000 --> 01:46:53.200
+time to combat with you,
+
+01:46:54.960 --> 01:46:55.180
+even though the maintainer has 300 other
+
+01:46:57.260 --> 01:46:57.760
+things to do. Like, man,
+
+01:46:58.280 --> 01:46:58.740
+this
+
+01:47:00.020 --> 01:47:00.280
+[Speaker 7]: is just the way it is,
+
+01:47:02.840 --> 01:47:03.160
+right? It just, It's not like Emacs is way
+
+01:47:06.960 --> 01:47:07.460
+harder to change than any other project of
+
+01:47:08.680 --> 01:47:09.180
+its longevity and size.
+
+01:47:10.800 --> 01:47:11.100
+It's just these things take time.
+
+01:47:13.420 --> 01:47:13.920
+Try getting a change into Debian.
+
+01:47:15.060 --> 01:47:15.460
+That's an uphill battle.
+
+01:47:16.960 --> 01:47:17.460
+I don't even know where to start with that.
+
+01:47:19.540 --> 01:47:20.040
+That's huge, right? And I have tremendous
+
+01:47:21.640 --> 01:47:21.820
+respect for the people doing that type of
+
+01:47:22.760 --> 01:47:23.260
+work because it takes dedication,
+
+01:47:26.280 --> 01:47:26.440
+it takes effort. So we really need someone to
+
+01:47:27.180 --> 01:47:27.600
+step up from the community,
+
+01:47:29.760 --> 01:47:30.060
+I think, to be a champion for something like
+
+01:47:33.160 --> 01:47:33.600
+this and work together with us on Emacs Devil
+
+01:47:37.800 --> 01:47:38.200
+and off Emacs Devil, probably with me and Eli
+
+01:47:40.320 --> 01:47:40.600
+and perhaps some other people that could be
+
+01:47:41.820 --> 01:47:42.280
+in the mail thread, and we could coordinate
+
+01:47:44.620 --> 01:47:44.960
+this type of work. I would be super excited
+
+01:47:46.560 --> 01:47:47.060
+if someone wanted to get the ball rolling.
+
+01:47:48.480 --> 01:47:48.980
+I can't do everything.
+
+01:47:51.100 --> 01:47:51.340
+I wish I could. Like, I thought about it.
+
+01:47:52.840 --> 01:47:53.000
+Should I just put everything to the side and
+
+01:47:53.860 --> 01:47:54.000
+do this? But then, I mean,
+
+01:47:54.800 --> 01:47:55.080
+there are some, there are other
+
+01:47:56.040 --> 01:47:56.400
+responsibilities as well.
+
+01:47:57.740 --> 01:47:58.040
+So we need someone to step up.
+
+01:47:58.520 --> 01:47:59.020
+We need help here.
+
+01:48:03.220 --> 01:48:03.460
+[Speaker 3]: you're gonna speak. I was totally gonna pick
+
+01:48:04.120 --> 01:48:04.620
+on you. Go ahead.
+
+01:48:05.540 --> 01:48:05.820
+[Speaker 1]: Yeah, so. Oh, good, Thanks,
+
+01:48:06.540 --> 01:48:06.860
+yeah, I was just gonna say,
+
+01:48:08.460 --> 01:48:08.960
+yeah, I echo Stefan's sentiments.
+
+01:48:11.680 --> 01:48:11.960
+And that, yeah, in terms of like maybe
+
+01:48:14.020 --> 01:48:14.080
+experimenting with a different Forge or a
+
+01:48:15.280 --> 01:48:15.600
+better Forge and like,
+
+01:48:16.124 --> 01:48:16.296
+you know, supplementing Savannah.
+
+01:48:16.640 --> 01:48:17.140
+And supplementing Savannah.
+
+01:48:20.860 --> 01:48:20.920
+I actually did some initial work a couple of
+
+01:48:23.240 --> 01:48:23.740
+months ago to get a SourceFed instance
+
+01:48:24.860 --> 01:48:25.360
+installed for the new project.
+
+01:48:28.440 --> 01:48:28.660
+And I've done some work on and off,
+
+01:48:29.340 --> 01:48:29.760
+but then life happens,
+
+01:48:32.140 --> 01:48:32.640
+especially from September onwards.
+
+01:48:35.240 --> 01:48:35.500
+But even from earlier in the year,
+
+01:48:36.460 --> 01:48:36.960
+the project has been semi-dormant,
+
+01:48:38.740 --> 01:48:39.240
+but I have been meaning to get to that.
+
+01:48:42.740 --> 01:48:42.900
+So I'm like 1 such person who's interested in
+
+01:48:44.760 --> 01:48:44.960
+that type of work and driving it forward and
+
+01:48:47.640 --> 01:48:47.880
+I would love you know if anyone's and anyone
+
+01:48:50.820 --> 01:48:50.980
+else has the kind of time and energy and the
+
+01:48:52.760 --> 01:48:53.260
+interest to help with something like that.
+
+01:48:55.280 --> 01:48:55.780
+Yes, please reach out to all of us,
+
+01:48:56.880 --> 01:48:57.380
+to Emacs core developers,
+
+01:48:58.100 --> 01:48:58.600
+of course, and to myself.
+
+01:49:01.840 --> 01:49:02.340
+This is something that could be very useful,
+
+01:49:04.960 --> 01:49:05.460
+not just for GNU Emacs and Emacs developers,
+
+01:49:09.760 --> 01:49:10.240
+but also for any other GNU package as well.
+
+01:49:13.040 --> 01:49:13.480
+So yeah, that's 1 area of potential
+
+01:49:15.660 --> 01:49:16.060
+contribution and 1 thing that we sort of,
+
+01:49:17.860 --> 01:49:18.340
+I guess, regularly meet with the FSF
+
+01:49:20.140 --> 01:49:20.640
+sysadmins to discuss these kinds of projects
+
+01:49:22.120 --> 01:49:22.620
+and things as Corwin would know.
+
+01:49:24.520 --> 01:49:24.720
+[Speaker 3]: Yeah, that's kind of, I mean,
+
+01:49:26.280 --> 01:49:26.420
+you knew exactly where I was going to,
+
+01:49:27.960 --> 01:49:28.420
+and I'm glad that you volunteered yourself
+
+01:49:30.040 --> 01:49:30.540
+personally because that's the best choice.
+
+01:49:32.320 --> 01:49:32.820
+If you're hearing this and you're thinking,
+
+01:49:35.760 --> 01:49:36.260
+you know, maybe I should do some sysop stuff,
+
+01:49:38.200 --> 01:49:38.700
+literally reach out to Amin.
+
+01:49:41.040 --> 01:49:41.420
+And because it's complicated,
+
+01:49:43.040 --> 01:49:43.320
+there are a lot of projects to volunteer for.
+
+01:49:44.120 --> 01:49:44.620
+They're all very worthy.
+
+01:49:48.760 --> 01:49:49.020
+And it's sort of political to figure out what
+
+01:49:52.760 --> 01:49:53.000
+we're gonna try to change for whom first to
+
+01:49:55.940 --> 01:49:56.260
+demonstrate we can do all the things we wanna
+
+01:49:58.320 --> 01:49:58.440
+do to make it better without losing all the
+
+01:50:00.340 --> 01:50:00.540
+things that are important about how it is
+
+01:50:04.040 --> 01:50:04.480
+today. And we'll do it in a measured way like
+
+01:50:06.500 --> 01:50:06.760
+everybody's just like room full of rocking
+
+01:50:09.640 --> 01:50:09.780
+chairs everybody's got a long tail it's a
+
+01:50:12.340 --> 01:50:12.620
+hard project but you will do something that
+
+01:50:15.380 --> 01:50:15.540
+just a lot like as a Savannah hacker which I
+
+01:50:17.920 --> 01:50:18.240
+am with Amin So that's how I know about his
+
+01:50:20.080 --> 01:50:20.340
+work on that project. We worked together on
+
+01:50:22.300 --> 01:50:22.800
+the Savannah Forge. I'm aware of his work
+
+01:50:26.660 --> 01:50:26.980
+piloting SourceHut recently and just with a
+
+01:50:29.020 --> 01:50:29.240
+working group there to look at the next
+
+01:50:30.540 --> 01:50:31.040
+generation of forges for GNU.
+
+01:50:34.160 --> 01:50:34.340
+Emacs of course as a GNU package could go do
+
+01:50:36.540 --> 01:50:36.820
+its own thing. FFS would most likely give
+
+01:50:38.360 --> 01:50:38.560
+cash to go do its own thing,
+
+01:50:39.720 --> 01:50:39.860
+even if it didn't like it.
+
+01:50:41.140 --> 01:50:41.520
+We know, you know, as a,
+
+01:50:42.800 --> 01:50:43.260
+like if I put on, I'm not FSF,
+
+01:50:44.260 --> 01:50:44.600
+but if I put on that hat,
+
+01:50:45.800 --> 01:50:46.300
+I imagine that we must know.
+
+01:50:50.020 --> 01:50:50.200
+Emacs is a flagship thing that people in the
+
+01:50:52.420 --> 01:50:52.800
+real world depend on. If I get this ancient
+
+01:50:55.320 --> 01:50:55.820
+computer, I get a working Linux distribution
+
+01:50:59.340 --> 01:50:59.500
+and Emacs. Maybe it's not Microsoft Word as a
+
+01:51:00.800 --> 01:51:01.300
+word processor, but you guys,
+
+01:51:03.080 --> 01:51:03.580
+you can learn a language on it for sure,
+
+01:51:05.600 --> 01:51:05.800
+you know And you can do your homework on it
+
+01:51:08.300 --> 01:51:08.680
+and you know It's it makes your you can edit
+
+01:51:10.580 --> 01:51:10.960
+things and then you can edit your system
+
+01:51:13.900 --> 01:51:14.340
+files and teach yourself how to manage a GNU
+
+01:51:17.860 --> 01:51:18.040
+system and you can You know so Emacs is
+
+01:51:19.540 --> 01:51:19.840
+really powerful as a practical tool.
+
+01:51:21.560 --> 01:51:21.720
+Like I keep coming back to that point when I
+
+01:51:25.040 --> 01:51:25.320
+think about Emacs, like I really put it as
+
+01:51:27.380 --> 01:51:27.880
+like, it's an important tool on the like
+
+01:51:31.780 --> 01:51:32.080
+humans inventing tools level just because it
+
+01:51:35.080 --> 01:51:35.280
+lets me make this editor into whatever I need
+
+01:51:37.580 --> 01:51:38.080
+it to be to get my actual work done.
+
+01:51:39.520 --> 01:51:39.860
+Whether that's getting the length,
+
+01:51:41.460 --> 01:51:41.600
+maybe that's making the font big enough that
+
+01:51:43.260 --> 01:51:43.380
+I can see it, or making it easy enough to
+
+01:51:44.760 --> 01:51:45.060
+change from this font to that font,
+
+01:51:45.920 --> 01:51:46.420
+changing the background colors,
+
+01:51:47.960 --> 01:51:48.460
+like your basic vision,
+
+01:51:49.960 --> 01:51:50.460
+accessibility issues, right?
+
+01:51:52.740 --> 01:51:53.120
+All, you know, solved,
+
+01:51:55.080 --> 01:51:55.320
+I can bake that customization in and I can
+
+01:51:56.320 --> 01:51:56.580
+pretty much depend on,
+
+01:51:57.900 --> 01:51:58.400
+no matter what we change in Emacs,
+
+01:51:59.760 --> 01:52:00.140
+I'm gonna accept the new version,
+
+01:52:01.920 --> 01:52:02.220
+it's gonna be on the next computer I get,
+
+01:52:03.840 --> 01:52:04.000
+I'm going to install the package and my
+
+01:52:05.920 --> 01:52:06.100
+configuration that sets all that up will be
+
+01:52:10.960 --> 01:52:11.100
+there for me. Right? It's like back to
+
+01:52:13.300 --> 01:52:13.780
+Stefan's point, what, 6 and a half hours ago,
+
+01:52:16.120 --> 01:52:16.620
+I mean, you know, 20 minutes ago about
+
+01:52:23.680 --> 01:52:24.180
+just... Oh gosh, I lost it.
+
+01:52:27.980 --> 01:52:28.260
+Boy, I really thought I had handed that
+
+01:52:29.020 --> 01:52:29.520
+neatly back to you.
+
+01:52:36.040 --> 01:52:36.220
+[Speaker 1]: No problem, Yeah, I think we're in general in
+
+01:52:36.220 --> 01:52:36.720
+agreement.
+
+01:52:41.980 --> 01:52:42.480
+[Speaker 4]: If we are now in the realm of Concord,
+
+01:52:44.800 --> 01:52:44.960
+of harmony, and the realm of midnight in
+
+01:52:47.560 --> 01:52:47.720
+Europe, Should we bring this discussion to a
+
+01:52:49.200 --> 01:52:49.460
+close or we could go all night,
+
+01:52:51.180 --> 01:52:51.500
+but I'll need to explain to my employer why
+
+01:52:52.720 --> 01:52:53.220
+my eyes are barely open tomorrow.
+
+01:52:56.600 --> 01:52:57.100
+[Speaker 1]: Yeah, I think that's probably a good idea.
+
+01:52:59.960 --> 01:53:00.460
+I see some folks starting to slowly sign off.
+
+01:53:02.740 --> 01:53:03.060
+[Speaker 0]: Yeah, also, you know, Leo,
+
+01:53:04.680 --> 01:53:05.180
+you could leave and just miss out.
+
+01:53:05.460 --> 01:53:05.960
+What?
+
+01:53:13.620 --> 01:53:13.820
+[Speaker 7]: Hey, Sasha, can I say something like what an
+
+01:53:15.880 --> 01:53:16.020
+amazing job with everything you're doing in
+
+01:53:16.960 --> 01:53:17.300
+the community over the years?
+
+01:53:18.820 --> 01:53:19.240
+I'm so impressed with Emacs News.
+
+01:53:22.020 --> 01:53:22.160
+What a great resource to stay up to date in
+
+01:53:24.720 --> 01:53:24.760
+Emacs. Just really hats off to you for a
+
+01:53:25.080 --> 01:53:25.580
+whole lot.
+
+01:53:26.680 --> 01:53:26.880
+[Speaker 3]: Thank you
+
+01:53:29.440 --> 01:53:29.700
+[Speaker 0]: very much. It actually turned out to be quite
+
+01:53:31.840 --> 01:53:32.220
+timely that John Wheatley had suggested it
+
+01:53:35.020 --> 01:53:35.140
+back when he was maintainer because when I
+
+01:53:36.980 --> 01:53:37.200
+had the kiddo, I suddenly had 0 time to
+
+01:53:38.000 --> 01:53:38.440
+actually write new things.
+
+01:53:39.560 --> 01:53:39.840
+But reading things is fine.
+
+01:53:41.820 --> 01:53:42.040
+I can just speed read all the Reddit things
+
+01:53:43.160 --> 01:53:43.660
+and put the links together.
+
+01:53:45.800 --> 01:53:46.300
+So I'm very glad that Emacs news is helpful.
+
+01:53:49.080 --> 01:53:49.580
+[Speaker 7]: it really is, yeah.
+
+01:53:55.380 --> 01:53:55.880
+[Speaker 3]: It is, So, okay, now let's try to go for our
+
+01:54:00.040 --> 01:54:00.480
+closing thoughts here while Leo's still here.
+
+01:54:01.740 --> 01:54:02.140
+And then if we wanna keep rolling,
+
+01:54:04.760 --> 01:54:05.260
+even after Leo drops, we won't tell him,
+
+01:54:06.420 --> 01:54:06.920
+we'll tell him we're stuck.
+
+01:54:12.380 --> 01:54:12.540
+[Speaker 4]: I guess that was a beacon to me to perhaps go
+
+01:54:14.140 --> 01:54:14.440
+for the second close of the day I've already
+
+01:54:18.080 --> 01:54:18.380
+done it I can do it again But I will prove
+
+01:54:19.300 --> 01:54:19.480
+Sasha wrong this time.
+
+01:54:21.020 --> 01:54:21.520
+I will miss out if need be because really,
+
+01:54:24.160 --> 01:54:24.660
+I have been very impressed with the sleep
+
+01:54:28.700 --> 01:54:29.120
+record that you had and I am very envious
+
+01:54:32.040 --> 01:54:32.220
+right now of your past ability to sleep more
+
+01:54:33.160 --> 01:54:33.380
+than 9 hours per night.
+
+01:54:35.440 --> 01:54:35.560
+And I wish I would be able to go back to
+
+01:54:37.300 --> 01:54:37.800
+this. But anyway, folks,
+
+01:54:38.560 --> 01:54:39.060
+I'm going to drop out.
+
+01:54:40.520 --> 01:54:40.680
+People might hang out for a little while
+
+01:54:42.360 --> 01:54:42.520
+longer. Bear in mind that Sasha might get
+
+01:54:44.480 --> 01:54:44.980
+called at any point to go take care of Kido.
+
+01:54:47.220 --> 01:54:47.720
+So this might wrap up very fast afterwards.
+
+01:54:49.780 --> 01:54:49.920
+But at any rate, it was my pleasure to be the
+
+01:54:51.420 --> 01:54:51.820
+host today. Stefan, thank you for joining.
+
+01:54:53.520 --> 01:54:54.020
+Bob, thank you for joining and interacting
+
+01:54:56.040 --> 01:54:56.320
+with us and making this a little more
+
+01:54:58.860 --> 01:54:59.020
+interactive and more plural than just the
+
+01:55:01.260 --> 01:55:01.760
+co-organizers. And on that note,
+
+01:55:03.640 --> 01:55:03.900
+I will be leaving. So have a wonderful night,
+
+01:55:05.860 --> 01:55:06.020
+everyone. And we'll see you next year for the
+
+01:55:06.740 --> 01:55:07.240
+next edition, potentially.
+
+01:55:09.560 --> 01:55:10.060
+[Speaker 3]: Thank you, Leo. You're my hero.
+
+01:55:11.580 --> 01:55:12.040
+I take everything I said on mumble back.
+
+01:55:12.280 --> 01:55:12.780
+You're amazing.
+
+01:55:14.840 --> 01:55:15.340
+[Speaker 4]: bye everyone.
+
+01:55:16.400 --> 01:55:16.680
+[Speaker 1]: All right, Thank you all.
+
+01:55:17.960 --> 01:55:18.220
+Take care. Bye. I will
+
+01:55:20.200 --> 01:55:20.580
+[Speaker 6]: also say bye bye. I also need to go to bed.
+
+01:55:22.200 --> 01:55:22.700
+Thank you all for this cool conference and
+
+01:55:24.920 --> 01:55:25.080
+hopefully we're here through the year and at
+
+01:55:25.900 --> 01:55:26.400
+least in 1 year.
+
+01:55:30.900 --> 01:55:31.400
+[Speaker 3]: You've probably made the rest of the rest of
+
+01:55:34.440 --> 01:55:34.700
+the victorious. You really stepped up.
+
+01:55:38.300 --> 01:55:38.800
+[Speaker 5]: your contributions.
+
+01:55:38.980 --> 01:55:39.220
+[Speaker 3]: Thanks so much for Yeah,
+
+01:55:40.580 --> 01:55:40.960
+[Speaker 1]: thanks so much for being a part of it,
+
+01:55:41.720 --> 01:55:42.100
+specifically you, Floey,
+
+01:55:43.480 --> 01:55:43.980
+and just everyone. Thank you all.
+
+01:55:48.180 --> 01:55:48.420
+[Speaker 6]: Have a nice day or night and we'll hear each
+
+01:55:48.740 --> 01:55:49.240
+other. Bye!
+
+01:55:51.220 --> 01:55:51.420
+[Speaker 1]: See you. Okay, well,
+
+01:55:51.880 --> 01:55:52.360
+[Speaker 3]: Thanks, Zen. I'll go next.
+
+01:55:53.800 --> 01:55:54.300
+I'm the next newest, I think.
+
+01:55:59.640 --> 01:56:00.140
+Well, I want to say also,
+
+01:56:01.800 --> 01:56:02.300
+you know, Bob and Stefan,
+
+01:56:03.660 --> 01:56:03.760
+thank you so much for jumping in and
+
+01:56:04.860 --> 01:56:05.360
+participating in the closing remarks.
+
+01:56:06.700 --> 01:56:07.200
+I too think it's a lot of,
+
+01:56:08.560 --> 01:56:08.960
+like, it's fun to just,
+
+01:56:10.760 --> 01:56:11.260
+like, share the buzz after the convention.
+
+01:56:13.260 --> 01:56:13.460
+We've got all these millions of ideas and
+
+01:56:16.120 --> 01:56:16.480
+then to have a group, a little group think
+
+01:56:18.960 --> 01:56:19.460
+about what we're walking away from that with.
+
+01:56:22.360 --> 01:56:22.540
+What is the temperature of the fire in your
+
+01:56:24.360 --> 01:56:24.860
+belly? And it's just...
+
+01:56:28.440 --> 01:56:28.740
+I mean, this is 1 of the highlights of my
+
+01:56:30.200 --> 01:56:30.700
+year in a way that it's just...
+
+01:56:31.780 --> 01:56:31.970
+I don't think other people...
+
+01:56:33.880 --> 01:56:34.120
+I don't think I dare explain it to other
+
+01:56:35.880 --> 01:56:36.020
+people. I think my wife understands and I
+
+01:56:40.600 --> 01:56:40.860
+will do. So thank you very much for this
+
+01:56:42.340 --> 01:56:42.840
+conference and the opportunity to participate
+
+01:56:45.540 --> 01:56:46.040
+in it. You know, just the conversation,
+
+01:56:48.540 --> 01:56:49.040
+how vibrant the chat is on IRC,
+
+01:56:52.080 --> 01:56:52.580
+how the variety of talks,
+
+01:56:54.140 --> 01:56:54.640
+some of the talks that look like television
+
+01:56:59.380 --> 01:56:59.540
+content to me and others that look a lot like
+
+01:57:03.840 --> 01:57:03.960
+my talk. And working through your slides and
+
+01:57:06.100 --> 01:57:06.280
+doing it live and you know I appreciate that
+
+01:57:10.240 --> 01:57:10.380
+we make a place for all those levels and and
+
+01:57:12.720 --> 01:57:13.220
+show people how to improve our craft as well.
+
+01:57:26.140 --> 01:57:26.460
+I'm not actually dropping or going anywhere.
+
+01:57:29.040 --> 01:57:29.220
+I'll continue to talk about eMAX until I get
+
+01:57:30.860 --> 01:57:31.000
+the dinner time bell. I've probably got an
+
+01:57:40.240 --> 01:57:40.580
+hour here. I'll tell you what will happen
+
+01:57:42.040 --> 01:57:42.160
+though is I'm guaranteed to light a
+
+01:57:43.780 --> 01:57:43.940
+cigarette. You can already see me kind of
+
+01:57:45.860 --> 01:57:46.160
+hovering about my room because I'm trying to
+
+01:57:47.440 --> 01:57:47.780
+avoid like smoking on camera.
+
+01:57:49.300 --> 01:57:49.540
+I don't know where that came from.
+
+01:57:52.360 --> 01:57:52.860
+I'm giving it up in approximately 5 seconds.
+
+01:57:58.980 --> 01:57:59.480
+[Speaker 7]: Yeah I'm gonna hop off.
+
+01:58:00.800 --> 01:58:01.300
+It's possibly right here.
+
+01:58:02.220 --> 01:58:02.720
+I'll work tomorrow.
+
+01:58:06.200 --> 01:58:06.380
+[Speaker 3]: I took the next 2 days off.
+
+01:58:07.320 --> 01:58:07.820
+I'm actually going camping,
+
+01:58:11.040 --> 01:58:11.280
+Stefan. I know I've learned that this
+
+01:58:12.800 --> 01:58:13.300
+conference leaves me completely emotionally
+
+01:58:16.360 --> 01:58:16.860
+exhausted. I just like,
+
+01:58:18.700 --> 01:58:19.140
+I don't know, I watch all,
+
+01:58:20.820 --> 01:58:21.320
+I feel like I just connect with all the,
+
+01:58:23.440 --> 01:58:23.640
+like it's this time where I connect with all
+
+01:58:25.260 --> 01:58:25.580
+these people that spend as much time thinking
+
+01:58:26.580 --> 01:58:27.080
+about Emacs as I do.
+
+01:58:31.480 --> 01:58:31.760
+[Speaker 0]: All right, so maybe we should wrap up before
+
+01:58:32.440 --> 01:58:32.940
+you have like, you know,
+
+01:58:35.380 --> 01:58:35.880
+that overflow error and just...
+
+01:58:38.000 --> 01:58:38.500
+[Speaker 3]: In buster thrill, okay.
+
+01:58:41.720 --> 01:58:41.980
+Thank you
+
+01:58:45.200 --> 01:58:45.440
+[Speaker 0]: so much, everyone. Let us actually wrap up
+
+01:58:47.360 --> 01:58:47.440
+then. Everyone can find the recordings if you
+
+01:58:48.640 --> 01:58:49.140
+want to keep the conversation going.
+
+01:58:51.900 --> 01:58:52.120
+There are meetups, there are people's blog
+
+01:58:54.240 --> 01:58:54.520
+posts and video channels and mailing lists
+
+01:58:55.320 --> 01:58:55.820
+and all those other things.
+
+01:58:58.820 --> 01:58:59.180
+I often I list a lot of meetups in Emacs news
+
+01:59:00.680 --> 01:59:01.080
+so that's another great way to stay connected
+
+01:59:02.560 --> 01:59:03.060
+through the year and we hope to see everybody
+
+01:59:04.740 --> 01:59:05.240
+next year at EmacsConf 2024.
+
+01:59:11.260 --> 01:59:11.420
+[Speaker 4]: Thanks Sasha for the send off and goodbye to
+
+01:59:16.740 --> 01:59:16.940
+everyone. Oh Sasha I think you were muted but
+
+01:59:18.340 --> 01:59:18.520
+yes I was still there I assume that's what
+
+01:59:21.220 --> 01:59:21.720
+you just said. I lied.
+
+01:59:23.680 --> 01:59:23.920
+I was staying around like Corwin was.
+
+01:59:25.440 --> 01:59:25.580
+I just said goodbye, but then I wait in the
+
+01:59:26.520 --> 01:59:27.020
+bushes, waiting for the ambush.
+
+01:59:29.340 --> 01:59:29.840
+[Speaker 3]: Well I'm personally surprised,
+
+01:59:32.780 --> 01:59:33.040
+speaking for myself. I wouldn't have guessed
+
+01:59:36.040 --> 01:59:36.340
+that would happen. All right,
+
+01:59:36.340 --> 01:59:36.580
+[Speaker 4]: The perfect moment. well,
+
+01:59:37.360 --> 01:59:37.680
+I guess that's a wrap then.
+
+01:59:39.060 --> 01:59:39.560
+Thank you, everyone, and see you next year.
+
+01:59:43.440 --> 01:59:43.740
+[Speaker 3]: I thought we were clear like 10 minutes ago.
+
+01:59:45.340 --> 01:59:45.840
+Are we not? We are, right?
+
+01:59:47.400 --> 01:59:47.780
+We're definitely clear.
+
+01:59:48.040 --> 01:59:48.220
+[Speaker 5]: OK, I'm
+
+01:59:49.240 --> 01:59:49.440
+[Speaker 3]: hanging up now. Good night.
+
+01:59:50.640 --> 01:59:51.140
+It was wonderful to meet you.
+
+01:59:51.900 --> 01:59:52.400
+[Speaker 7]: Take care Corwin
+
+01:59:56.520 --> 01:59:57.020
+[Speaker 4]: Bye Stefan. Bye. Bye all
diff --git a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt
new file mode 100644
index 00000000..2a53cea7
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt
@@ -0,0 +1,53 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:16.579
+Intro
+
+00:00:16.580 --> 00:01:09.399
+Reasons
+
+00:01:09.400 --> 00:02:09.159
+Information
+
+00:02:09.160 --> 00:03:53.119
+Properties
+
+00:03:53.120 --> 00:04:29.719
+Timezones
+
+00:04:29.720 --> 00:05:41.779
+Scheduling
+
+00:05:41.780 --> 00:06:48.399
+Templates
+
+00:06:48.400 --> 00:08:04.379
+Wiki
+
+00:08:04.380 --> 00:08:28.199
+Etherpad
+
+00:08:28.200 --> 00:09:05.919
+E-mail
+
+00:09:05.920 --> 00:10:08.120
+BigBlueButton web conferences
+
+00:10:08.121 --> 00:10:36.699
+Shortcuts
+
+00:10:36.700 --> 00:11:03.679
+Logbook
+
+00:11:03.680 --> 00:12:13.219
+Captions
+
+00:12:13.220 --> 00:13:11.279
+Crontabs and playing the talks
+
+00:13:11.280 --> 00:13:49.879
+Transitions
+
+00:13:49.880 --> 00:15:05.200
+Wrapping up
diff --git a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt
new file mode 100644
index 00000000..cbec1bb1
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt
@@ -0,0 +1,1076 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Intro
+
+00:00:00.000 --> 00:00:04.839
+Hi, I'm Sacha Chua. This presentation is a quick tour
+
+00:00:04.840 --> 00:00:07.959
+of some of the things we do to run EmacsConf.
+
+00:00:07.960 --> 00:00:12.239
+Since 2019, we've run it as an entirely online conference,
+
+00:00:12.240 --> 00:00:14.699
+and we do as much of the organization as possible
+
+00:00:14.700 --> 00:00:16.579
+within Emacs itself.
+
+NOTE Reasons
+
+00:00:16.580 --> 00:00:19.759
+I have three reasons for making this presentation.
+
+00:00:19.760 --> 00:00:22.759
+The first is entirely selfish: I need to figure out
+
+00:00:22.760 --> 00:00:25.359
+all the stuff I built for last year's EmacsConf,
+
+00:00:25.360 --> 00:00:28.079
+since it was a bit of a crazy scramble.
+
+00:00:28.080 --> 00:00:30.159
+The second is that I want to show people
+
+00:00:30.160 --> 00:00:33.239
+the process of thinking about a complex project,
+
+00:00:33.240 --> 00:00:35.879
+looking for little things to automate in Emacs,
+
+00:00:35.880 --> 00:00:38.439
+and building things up from small pieces.
+
+00:00:38.440 --> 00:00:39.799
+Maybe you'll get some ideas
+
+00:00:39.800 --> 00:00:42.759
+and start building tools for yourself, too.
+
+00:00:42.760 --> 00:00:47.039
+The third is that you find any of these little tools interesting,
+
+00:00:47.040 --> 00:00:49.439
+I want to point you to blog posts and source code
+
+00:00:49.440 --> 00:00:51.239
+where you can find out more.
+
+00:00:51.240 --> 00:00:52.559
+That way, you don't need to try
+
+00:00:52.560 --> 00:00:55.399
+to read and understand everything quickly.
+
+00:00:55.400 --> 00:00:57.719
+You can find this presentation and other links
+
+00:00:57.720 --> 00:01:04.439
+on the talk page at emacsconf.org/2023/talks/emacsconf.
+
+00:01:04.440 --> 00:01:06.319
+There are a lot of different parts,
+
+00:01:06.320 --> 00:01:09.399
+so I'll try to use this map to help make sense of it all.
+
+NOTE Information
+
+00:01:09.400 --> 00:01:11.199
+There's so much information to work with,
+
+00:01:11.200 --> 00:01:14.919
+so it probably doesn't surprise you that we use Org Mode a lot.
+
+00:01:14.920 --> 00:01:17.999
+Most of the conference coordination happens over e-mail,
+
+00:01:18.000 --> 00:01:20.639
+which I can quickly search with notmuch.
+
+00:01:20.640 --> 00:01:22.359
+Some of the information is private,
+
+00:01:22.360 --> 00:01:24.519
+like emergency contact numbers.
+
+00:01:24.520 --> 00:01:28.079
+We store the talk information in a private Org file.
+
+00:01:28.080 --> 00:01:30.079
+I try to put as much as possible
+
+00:01:30.080 --> 00:01:32.319
+into our public organizers' notebook
+
+00:01:32.320 --> 00:01:35.359
+so that processes and decisions are documented.
+
+00:01:35.360 --> 00:01:36.919
+We need a public website.
+
+00:01:36.920 --> 00:01:39.039
+We use Ikiwiki to make the webpages
+
+00:01:39.040 --> 00:01:41.119
+because we can work with plain text files
+
+00:01:41.120 --> 00:01:42.599
+in a Git repository.
+
+00:01:42.600 --> 00:01:45.399
+We also make a few static HTML pages
+
+00:01:45.400 --> 00:01:48.119
+for things where Ikiwiki is a little awkward.
+
+00:01:48.120 --> 00:01:50.519
+We post announcements to mailing lists.
+
+00:01:50.520 --> 00:01:53.159
+We also receive submissions in a private mailing list
+
+00:01:53.160 --> 00:01:55.639
+so that a number of people can review them.
+
+00:01:55.640 --> 00:01:56.839
+We have a backstage area
+
+00:01:56.840 --> 00:01:59.959
+for sharing files with volunteers and speakers.
+
+00:01:59.960 --> 00:02:03.119
+We share those files publicly when the talk goes live.
+
+00:02:03.120 --> 00:02:06.319
+And there's all the other stuff that goes into running EmacsConf,
+
+00:02:06.320 --> 00:02:09.159
+like shell scripts and configuration files.
+
+NOTE Properties
+
+00:02:09.160 --> 00:02:12.319
+First, speakers propose a talk by sending an e-mail.
+
+00:02:12.320 --> 00:02:15.799
+We take the info from that e-mail and store it in Org properties
+
+00:02:15.800 --> 00:02:18.199
+so that we can work with it later.
+
+00:02:18.200 --> 00:02:20.599
+Every talk is identified with an ID,
+
+00:02:20.600 --> 00:02:24.119
+but since `:ID:` and `:CUSTOM_ID:` have special meanings for Org,
+
+00:02:24.120 --> 00:02:25.399
+I use `:SLUG:` as the keyword.
+
+00:02:25.600 --> 00:02:27.759
+Speakers' names go into the `:NAME:` property,
+
+00:02:27.760 --> 00:02:29.799
+and a short version goes into `:NAME_SHORT:`
+
+00:02:29.800 --> 00:02:32.199
+so that we can include that in a greeting.
+
+00:02:32.200 --> 00:02:34.439
+If people follow the template closely...
+
+00:02:34.440 --> 00:02:38.039
+...we can even automatically fill in the Org subtree for their talk.
+
+00:02:38.040 --> 00:02:40.799
+We can use regular expressions to recognize the text
+
+00:02:40.800 --> 00:02:42.879
+and extract the properties.
+
+00:02:42.880 --> 00:02:45.359
+Other properties need to be set by hand.
+
+00:02:45.360 --> 00:02:47.559
+I often mess things up when I retype them.
+
+00:02:47.560 --> 00:02:51.039
+To avoid typos, I have a function that sets a property
+
+00:02:51.040 --> 00:02:56.039
+based on the current region. I bind that to `C-c C-x p`.
+
+00:02:56.040 --> 00:02:58.599
+That makes it much easier to set properties
+
+00:02:58.600 --> 00:03:01.239
+that couldn't automatically be recognized.
+
+00:03:01.240 --> 00:03:04.519
+Sometimes it makes sense to dynamically generate a property
+
+00:03:04.520 --> 00:03:07.679
+and then edit it, like with filenames.
+
+00:03:07.680 --> 00:03:10.399
+We like to name all the talk files the same way,
+
+00:03:10.400 --> 00:03:14.439
+but sometimes special characters in talk titles or speaker names
+
+00:03:14.440 --> 00:03:17.839
+need a little tweaking. I'll put that in a `:FILE_PREFIX:` property
+
+00:03:17.840 --> 00:03:19.439
+so I can edit it.
+
+00:03:19.440 --> 00:03:22.799
+An Org property match can map over all the talk entries
+
+00:03:22.800 --> 00:03:25.439
+that don't have `:FILE_PREFIX:` defined.
+
+00:03:25.440 --> 00:03:29.199
+We can use that `:FILE_PREFIX:` to rename files from Emacs.
+
+00:03:29.200 --> 00:03:32.639
+With that property, we can then rename files using that prefix,
+
+00:03:32.640 --> 00:03:35.639
+some extra text, and the file extension.
+
+00:03:35.640 --> 00:03:38.879
+Sometimes it's easier to work with the data outside Emacs,
+
+00:03:38.880 --> 00:03:42.119
+like when I want to rename files with a shell script.
+
+00:03:42.120 --> 00:03:45.319
+If I export a subset of the data as JSON
+
+00:03:45.320 --> 00:03:48.959
+or JavaScript Object Notation, using `json-encode`...
+
+00:03:48.960 --> 00:03:51.119
+... then I can extract the data with `jq`
+
+00:03:51.120 --> 00:03:53.119
+and use it in shell scripts.
+
+NOTE Timezones
+
+00:03:53.120 --> 00:03:55.639
+Another example of semi-structured information
+
+00:03:55.640 --> 00:03:57.299
+is speaker availability.
+
+00:03:57.300 --> 00:03:59.619
+We have speakers from all over the world,
+
+00:03:59.620 --> 00:04:03.019
+so we try to schedule live Q&A sessions when they're around.
+
+00:04:03.020 --> 00:04:05.019
+That means working with timezones.
+
+00:04:05.020 --> 00:04:08.439
+Completion makes it much easier to set the timezone property
+
+00:04:08.440 --> 00:04:10.599
+without worrying about typos.
+
+00:04:10.600 --> 00:04:14.359
+We can take advantage of the timezone list from the tzc package,
+
+00:04:14.360 --> 00:04:17.159
+which works with Unix timezone definitions.
+
+00:04:17.160 --> 00:04:19.919
+Then we can convert times using Emacs.
+
+00:04:19.920 --> 00:04:22.639
+Using a standard format to encode the availability
+
+00:04:22.640 --> 00:04:24.399
+makes it easier to parse.
+
+00:04:24.400 --> 00:04:27.439
+I can use those availability constraints to report errors
+
+00:04:27.440 --> 00:04:29.719
+when I'm experimenting with the schedule.
+
+NOTE Scheduling
+
+00:04:29.720 --> 00:04:31.679
+Now that I have the availability information,
+
+00:04:31.680 --> 00:04:33.940
+I can think about scheduling.
+
+00:04:33.941 --> 00:04:38.239
+When we were planning EmacsConf 2022, the schedule was so full,
+
+00:04:38.240 --> 00:04:40.839
+I wanted to see if we could make it more manageable
+
+00:04:40.840 --> 00:04:43.039
+by splitting it up into two tracks.
+
+00:04:43.040 --> 00:04:45.919
+It was hard to think about times with just a table.
+
+00:04:45.920 --> 00:04:48.199
+I was able to turn the schedule information
+
+00:04:48.200 --> 00:04:51.279
+into an SVG to convince the other organizers
+
+00:04:51.280 --> 00:04:53.359
+to get on board with this crazy plan.
+
+00:04:53.360 --> 00:04:54.959
+And the nice thing about SVGs is that
+
+00:04:54.960 --> 00:04:57.519
+they can even be clickable on the wiki.
+
+00:04:57.520 --> 00:05:00.639
+Being able to quickly make SVGs of different schedules
+
+00:05:00.640 --> 00:05:04.199
+also helped me test scheduling ideas and think out loud.
+
+00:05:04.200 --> 00:05:06.879
+I could change the time between talks, the order of the talks,
+
+00:05:06.880 --> 00:05:08.939
+and even what tracks the talks were in.
+
+00:05:08.940 --> 00:05:10.719
+This was helpful when I needed to include
+
+00:05:10.720 --> 00:05:13.239
+some late submissions or availability changes
+
+00:05:13.240 --> 00:05:15.599
+and I wanted to ask speakers what they thought.
+
+00:05:15.600 --> 00:05:18.799
+They could see the different schedule options themselves.
+
+00:05:18.800 --> 00:05:22.679
+It's really nice to have Emacs Lisp support for working with SVGs.
+
+00:05:22.680 --> 00:05:25.399
+I also love how I can have an Emacs Lisp block
+
+00:05:25.400 --> 00:05:28.599
+in an Org Mode document that updates an SVG
+
+00:05:28.600 --> 00:05:31.999
+that I can view right there in my text editor.
+
+00:05:32.000 --> 00:05:34.799
+Setting the timezone lets me automatically translate times
+
+00:05:34.800 --> 00:05:37.819
+to the speaker's local timezone when I e-mail them.
+
+00:05:37.820 --> 00:05:41.779
+That's mostly a matter of using `format-time-string` with a timezone.
+
+NOTE Templates
+
+00:05:41.780 --> 00:05:43.159
+There's a lot of text to work with,
+
+00:05:43.160 --> 00:05:45.699
+which means templates are super handy.
+
+00:05:45.700 --> 00:05:48.119
+There are a number of templating functions for Emacs Lisp,
+
+00:05:48.120 --> 00:05:52.959
+like the built-in `tempo.el` or `s-lex-format` from `s.el`.
+
+00:05:52.960 --> 00:05:54.439
+I ended up writing something
+
+00:05:54.440 --> 00:05:58.019
+that works with property lists (plists) instead,
+
+00:05:58.020 --> 00:06:02.199
+since we use plists all over the emacsconf-el library.
+
+00:06:02.200 --> 00:06:03.999
+All it does is replace `${variable}`
+
+00:06:04.000 --> 00:06:05.519
+with the value from a property list.
+
+00:06:05.520 --> 00:06:07.559
+I use this mostly because I have a hard time
+
+00:06:07.560 --> 00:06:11.079
+keeping track of which `%s` is which when I use `format`,
+
+00:06:11.080 --> 00:06:14.299
+and it's hard to get an overall view if I just use `concat`.
+
+00:06:14.300 --> 00:06:17.599
+The code looks for the properties and replaces them with the values.
+
+00:06:17.600 --> 00:06:21.299
+I just find it a little easier to think about sometimes.
+
+00:06:21.300 --> 00:06:24.079
+Getting all the information is just a matter of going over
+
+00:06:24.080 --> 00:06:27.399
+all the talk entries using `org-map-entries`.
+
+00:06:27.400 --> 00:06:30.699
+This builds the talk info by running a bunch of functions.
+
+00:06:30.700 --> 00:06:33.819
+Some functions get the information from the Org file.
+
+00:06:33.820 --> 00:06:36.959
+Other functions use the info already collected.
+
+00:06:36.960 --> 00:06:39.259
+This can take a while to do again and again.
+
+00:06:39.260 --> 00:06:41.739
+It's useful to `memoize` this function
+
+00:06:41.740 --> 00:06:43.499
+when I know I'll be using it a lot,
+
+00:06:43.500 --> 00:06:45.959
+like when I export the organizers notebook.
+
+00:06:45.960 --> 00:06:48.399
+Memoize caches recent values.
+
+NOTE Wiki
+
+00:06:48.400 --> 00:06:50.239
+We combine this templating function
+
+00:06:50.240 --> 00:06:51.479
+with the talk information
+
+00:06:51.480 --> 00:06:53.439
+to fill in the conference wiki,
+
+00:06:53.440 --> 00:06:56.479
+since that's a matter of writing templated strings to files.
+
+00:06:56.480 --> 00:06:58.279
+The talk pages are generated once
+
+00:06:58.280 --> 00:07:00.279
+and then left alone for manual editing,
+
+00:07:00.280 --> 00:07:02.399
+while the navigation is regenerated
+
+00:07:02.400 --> 00:07:04.659
+every time we change the details.
+
+00:07:04.660 --> 00:07:05.799
+Here are some examples
+
+00:07:05.800 --> 00:07:07.919
+of how we fill in the conference wiki.
+
+00:07:07.920 --> 00:07:10.959
+We put in the format of the talk, how Q&A works,
+
+00:07:10.960 --> 00:07:12.319
+and what the status is.
+
+00:07:12.320 --> 00:07:14.959
+Once the talk is live, we include the video
+
+00:07:14.960 --> 00:07:17.079
+and the links to the files, too.
+
+00:07:17.080 --> 00:07:18.719
+The code is a little bit long,
+
+00:07:18.720 --> 00:07:20.079
+but the important part is that
+
+00:07:20.080 --> 00:07:22.879
+we fill in a plist with the values we calculate,
+
+00:07:22.880 --> 00:07:26.379
+and then we can use `emacsconf-replace-plist-in-string`
+
+00:07:26.380 --> 00:07:28.019
+to put that all together.
+
+00:07:28.020 --> 00:07:30.279
+The schedule is a little more complicated.
+
+00:07:30.280 --> 00:07:32.079
+I wrote an Ikiwiki directive
+
+00:07:32.080 --> 00:07:34.019
+so that the markup is more manageable,
+
+00:07:34.020 --> 00:07:36.519
+and the Emacs Lisp function uses that.
+
+00:07:36.520 --> 00:07:40.619
+The Ikiwiki directive takes all the data and turns it into HTML...
+
+00:07:40.620 --> 00:07:42.959
+...so we can use Emacs Lisp to iterate over
+
+00:07:42.960 --> 00:07:44.819
+a slightly smaller property list
+
+00:07:44.820 --> 00:07:47.779
+and put them into the format Ikiwiki expects.
+
+00:07:47.780 --> 00:07:50.079
+It's nice to be able to navigate between talks
+
+00:07:50.080 --> 00:07:52.839
+without going back to the schedule page each time.
+
+00:07:52.840 --> 00:07:55.579
+This is handled by keeping two extra copies of the list:
+
+00:07:55.580 --> 00:07:57.559
+one with the first talk popped off,
+
+00:07:57.560 --> 00:08:00.359
+and one with an extra element added to the beginning.
+
+00:08:00.360 --> 00:08:02.439
+Then we can use the heads of those lists
+
+00:08:02.440 --> 00:08:04.379
+for next/previous links.
+
+NOTE Etherpad
+
+00:08:04.380 --> 00:08:06.679
+Links to the next talks are also handy
+
+00:08:06.680 --> 00:08:08.639
+on the collaborative Etherpad documents
+
+00:08:08.640 --> 00:08:12.039
+that we use for collecting questions, answers, and notes
+
+00:08:12.040 --> 00:08:12.839
+during each talk.
+
+00:08:12.840 --> 00:08:15.299
+Etherpad has an API...
+
+00:08:15.300 --> 00:08:17.319
+...so I can start the pads off with a template
+
+00:08:17.320 --> 00:08:18.939
+before the conference.
+
+00:08:18.940 --> 00:08:21.239
+I don't want to accidentally overwrite a pad
+
+00:08:21.240 --> 00:08:22.939
+that has been manually edited.
+
+00:08:22.940 --> 00:08:25.719
+We can save the timestamp of the last modification
+
+00:08:25.720 --> 00:08:28.199
+and then compare it before overwriting.
+
+NOTE E-mail
+
+00:08:28.200 --> 00:08:31.239
+Templates are also very handy when it comes to e-mail.
+
+00:08:31.240 --> 00:08:33.599
+Sometimes we send e-mails one at a time,
+
+00:08:33.600 --> 00:08:35.199
+like when we let a speaker know
+
+00:08:35.200 --> 00:08:36.879
+that we've received their proposal.
+
+00:08:36.880 --> 00:08:39.559
+That's mostly a matter of plugging the talk's properties
+
+00:08:39.560 --> 00:08:41.559
+into the right places in the template.
+
+00:08:41.560 --> 00:08:45.019
+Sometimes we send e-mails to lots of speakers at the same time,
+
+00:08:45.020 --> 00:08:48.299
+like when we send them instructions for uploading their files.
+
+00:08:48.300 --> 00:08:51.619
+Instead of sending one e-mail and Bcc-ing everyone,
+
+00:08:51.620 --> 00:08:53.479
+or sending people multiple e-mails
+
+00:08:53.480 --> 00:08:55.139
+because they have multiple talks,
+
+00:08:55.140 --> 00:08:57.559
+I like to draft these as individual e-mails
+
+00:08:57.560 --> 00:08:59.799
+to each speaker (or group of speakers,
+
+00:08:59.800 --> 00:09:02.599
+if more than one person is associated with a talk).
+
+00:09:02.600 --> 00:09:05.919
+That gives me an opportunity to personalize it further.
+
+NOTE BigBlueButton web conferences
+
+00:09:05.920 --> 00:09:08.119
+Many speakers answer questions live
+
+00:09:08.120 --> 00:09:10.039
+in BigBlueButton web conference rooms.
+
+00:09:10.440 --> 00:09:12.639
+Setting up one room per group of speakers
+
+00:09:12.640 --> 00:09:15.199
+makes it easy to give the speakers the details
+
+00:09:15.400 --> 00:09:18.719
+and associate the recorded video with the talk afterwards.
+
+00:09:18.720 --> 00:09:20.599
+For EmacsConf 2023,
+
+00:09:20.600 --> 00:09:25.079
+I used Spookfox to control Mozilla Firefox from Emacs
+
+00:09:25.080 --> 00:09:27.479
+so that I could automate creating the rooms
+
+00:09:27.480 --> 00:09:30.919
+and adding the URLs to the talk properties in my Org file.
+
+00:09:30.957 --> 00:09:33.959
+Then I can use mail merge to send each speaker
+
+00:09:33.960 --> 00:09:36.899
+the check-in instructions for their specific room.
+
+00:09:36.900 --> 00:09:39.139
+Some speakers will take questions by e-mail
+
+00:09:39.140 --> 00:09:41.619
+after the conference instead of attending live,
+
+00:09:41.620 --> 00:09:43.359
+so we send them shorter instructions
+
+00:09:43.360 --> 00:09:45.539
+just in case they want to drop by.
+
+00:09:45.540 --> 00:09:47.799
+[Live Q&A sessions]: After the first rush of questions,
+
+00:09:47.800 --> 00:09:50.579
+we can open it up for other people to join.
+
+00:09:50.580 --> 00:09:53.039
+This is handled by changing the public page
+
+00:09:53.040 --> 00:09:55.119
+from one that just refreshes in a loop
+
+00:09:55.120 --> 00:09:58.820
+to one that redirects to the actual web conference room.
+
+00:09:58.821 --> 00:10:00.079
+Just in case, we also
+
+00:10:00.080 --> 00:10:02.159
+generate static copies of those redirects
+
+00:10:02.160 --> 00:10:04.299
+so that we can copy them if needed.
+
+00:10:04.300 --> 00:10:06.679
+That way, I don't have to count on Emacs being able to
+
+00:10:06.680 --> 00:10:08.120
+publish them over TRAMP.
+
+NOTE Shortcuts
+
+00:10:08.121 --> 00:10:11.659
+During the conference, I'm often jumping from talk to talk.
+
+00:10:11.660 --> 00:10:13.199
+Instead of going to the Org file
+
+00:10:13.200 --> 00:10:14.519
+and then searching for the talk,
+
+00:10:14.520 --> 00:10:17.239
+I've made a little Hydra with keyboard shortcuts.
+
+00:10:17.240 --> 00:10:19.079
+One of these shortcuts lets me
+
+00:10:19.080 --> 00:10:20.959
+jump to a talk with completion
+
+00:10:20.960 --> 00:10:24.259
+so that I can just type in part of the talk ID,
+
+00:10:24.260 --> 00:10:26.399
+title, or speaker name.
+
+00:10:26.400 --> 00:10:28.679
+I've also defined some Embark actions
+
+00:10:28.680 --> 00:10:32.079
+so that I can act on a talk right from the completion menu.
+
+00:10:32.080 --> 00:10:35.079
+For example, I might want to jump to the wiki page
+
+00:10:35.080 --> 00:10:36.699
+or e-mail the speaker.
+
+NOTE Logbook
+
+00:10:36.700 --> 00:10:40.099
+I can also add notes to a talk while looking at an email,
+
+00:10:40.100 --> 00:10:41.639
+like when a speaker lets me know
+
+00:10:41.640 --> 00:10:43.279
+that their video will be late.
+
+00:10:43.280 --> 00:10:45.799
+Making it easy to add a note turns Emacs into
+
+00:10:45.800 --> 00:10:49.959
+a very basic contact relationship management system, or CRM.
+
+00:10:49.960 --> 00:10:52.439
+The way this works is that we have a function
+
+00:10:52.440 --> 00:10:55.459
+that lists all the email addresses associated with a talk.
+
+00:10:55.460 --> 00:10:57.919
+We can then map that over the list of talks,
+
+00:10:57.920 --> 00:10:59.959
+look up the author of the current email,
+
+00:10:59.960 --> 00:11:03.679
+prompt the user for the talk to add the note to, and add the note.
+
+NOTE Captions
+
+00:11:03.680 --> 00:11:04.679
+On to captions.
+
+00:11:04.680 --> 00:11:07.239
+We've been doing captions for the last couple of years,
+
+00:11:07.240 --> 00:11:10.419
+and now we have a small army of volunteer captioners.
+
+00:11:10.420 --> 00:11:12.679
+They get early access to the recorded talks
+
+00:11:12.680 --> 00:11:16.159
+and fix up misrecognized words, format keyboard shortcuts
+
+00:11:16.160 --> 00:11:19.579
+to follow Emacs conventions, spell names correctly,
+
+00:11:19.580 --> 00:11:21.839
+and do all sorts of other wonderful things.
+
+00:11:21.840 --> 00:11:24.399
+One of our evil plans with EmacsConf
+
+00:11:24.400 --> 00:11:28.359
+is to get cool stuff out of people's heads into videos
+
+00:11:28.360 --> 00:11:32.039
+and also make captions so that those videos can be searched.
+
+00:11:32.040 --> 00:11:34.999
+To make that possible, we first need a backstage area
+
+00:11:35.000 --> 00:11:36.919
+where volunteers can get the files.
+
+00:11:36.920 --> 00:11:39.839
+This is just a simple password-protected directory
+
+00:11:39.840 --> 00:11:43.739
+with a static HTML page that lists the talks by status
+
+00:11:43.740 --> 00:11:46.379
+and shows the files related to each talk.
+
+00:11:46.380 --> 00:11:49.899
+As a talk moves through the process, I update its TODO state
+
+00:11:49.900 --> 00:11:51.359
+and republish this index.
+
+00:11:51.360 --> 00:11:54.519
+Talks that are ready to be captioned show up in that section,
+
+00:11:54.520 --> 00:11:58.179
+and volunteers can call dibs on the talk they're interested in.
+
+00:11:58.180 --> 00:12:00.979
+That's all done with a function that formats the information
+
+00:12:00.980 --> 00:12:04.319
+and uses TRAMP to save the file directly to the server.
+
+00:12:04.320 --> 00:12:06.679
+You can find more details on our captioning process
+
+00:12:06.680 --> 00:12:09.039
+at emacsconf.org/captioning.
+
+00:12:09.040 --> 00:12:13.219
+I like using subed to edit subtitles within Emacs.
+
+NOTE Crontabs and playing the talks
+
+00:12:13.220 --> 00:12:16.059
+Let's talk about actually playing the talks.
+
+00:12:16.060 --> 00:12:19.559
+For EmacsConf 2022, we tried using Emacs timers
+
+00:12:19.560 --> 00:12:20.939
+to run the talks.
+
+00:12:20.940 --> 00:12:24.079
+It turns out that you can't call TRAMP from a timer
+
+00:12:24.080 --> 00:12:26.719
+when you're already using TRAMP from another timer
+
+00:12:26.720 --> 00:12:27.799
+at the same time.
+
+00:12:27.800 --> 00:12:29.719
+I thought about just tweaking the schedule
+
+00:12:29.720 --> 00:12:31.799
+so that we always start things at different times,
+
+00:12:31.800 --> 00:12:35.119
+but I figured there's probably a more elegant way to do this.
+
+00:12:35.120 --> 00:12:37.519
+This year, I'm planning to experiment with using cron
+
+00:12:37.520 --> 00:12:39.599
+to start talks on autopilot.
+
+00:12:39.600 --> 00:12:42.479
+The shell scripts will take care of playing the videos...
+
+00:12:42.480 --> 00:12:44.839
+... figuring out the appropriate Q&A...
+
+00:12:44.840 --> 00:12:47.579
+... and joining the web conference if needed.
+
+00:12:47.580 --> 00:12:49.599
+We just need to format the information...
+
+00:12:49.600 --> 00:12:52.219
+...and install it as the track's crontab.
+
+00:12:52.220 --> 00:12:54.079
+It's useful to be able to switch tracks
+
+00:12:54.080 --> 00:12:55.879
+to manual mode independently,
+
+00:12:55.880 --> 00:12:57.899
+just in case things go haywire.
+
+00:12:57.900 --> 00:13:00.119
+Then we can start everything manually.
+
+00:13:00.120 --> 00:13:02.799
+I can also manually update a talk's status,
+
+00:13:02.800 --> 00:13:06.519
+like when the host tells me that it's okay to open up the Q&A.
+
+00:13:06.520 --> 00:13:08.719
+The shell scripts we run from the crontab
+
+00:13:08.720 --> 00:13:11.279
+can also update the talk status themselves.
+
+NOTE Transitions
+
+00:13:11.280 --> 00:13:14.319
+Then a bunch of things automatically happen based on
+
+00:13:14.320 --> 00:13:15.599
+the talk status changes.
+
+00:13:15.600 --> 00:13:18.959
+This uses `org-after-todo-state-change-hook`.
+
+00:13:18.960 --> 00:13:20.359
+We get the talk information
+
+00:13:20.360 --> 00:13:22.519
+and pass it to a list of functions.
+
+00:13:22.520 --> 00:13:26.279
+Internet Relay Chat or IRC is an easy way for people
+
+00:13:26.280 --> 00:13:29.139
+to join the conversation around EmacsConf.
+
+00:13:29.140 --> 00:13:31.799
+We announce a talk whenever it changes state.
+
+00:13:31.800 --> 00:13:33.599
+For example, when a talk starts,
+
+00:13:33.600 --> 00:13:36.039
+we post the URLs to the talk webpage
+
+00:13:36.040 --> 00:13:39.439
+and the Etherpad for questions. We change the topic as well,
+
+00:13:39.440 --> 00:13:41.879
+so anyone can see the current talk's information
+
+00:13:41.880 --> 00:13:43.039
+even if they're a little late.
+
+00:13:43.180 --> 00:13:45.799
+This is easy to do with a little bit of Emacs Lisp
+
+00:13:45.800 --> 00:13:48.519
+because (of course!) Emacs has an IRC client.
+
+00:13:48.520 --> 00:13:49.879
+In fact, it has several.
+
+NOTE Wrapping up
+
+00:13:49.880 --> 00:13:53.139
+It seems like a lot of automation and Emacs Lisp,
+
+00:13:53.140 --> 00:13:56.899
+but really, all of this was just built up little by little.
+
+00:13:56.900 --> 00:13:59.279
+And tinkering with this is *fun*, you know?
+
+00:13:59.280 --> 00:14:01.259
+It's like always being able to ask,
+
+00:14:01.260 --> 00:14:03.300
+"Hey, wouldn't it be cool if..."
+
+00:14:03.301 --> 00:14:05.279
+and then actually being able to go and do it.
+
+00:14:05.280 --> 00:14:07.999
+Sometimes it feels like EmacsConf is an excuse
+
+00:14:08.000 --> 00:14:10.199
+for me to play with Emacs.
+
+00:14:10.200 --> 00:14:11.999
+It's pretty amazing what you can do
+
+00:14:12.000 --> 00:14:13.799
+by combining a bunch of pieces.
+
+00:14:13.800 --> 00:14:16.719
+A way to store slightly-structured information.
+
+00:14:16.720 --> 00:14:18.879
+A way to get it out again. Templates.
+
+00:14:18.880 --> 00:14:20.679
+TRAMP, for working with remote files
+
+00:14:20.680 --> 00:14:21.919
+and running remote commands.
+
+00:14:21.920 --> 00:14:23.839
+A way to talk to a web browser.
+
+00:14:23.840 --> 00:14:25.399
+A way to work with SVGs.
+
+00:14:25.400 --> 00:14:27.759
+An email client. A chat client.
+
+00:14:27.760 --> 00:14:29.639
+You can smoosh them all together
+
+00:14:29.640 --> 00:14:32.699
+in a way that you couldn't if they were all separate things.
+
+00:14:32.700 --> 00:14:36.279
+The code is in the emacsconf-el repository.
+
+00:14:36.280 --> 00:14:39.119
+It's a bit of a tangle because it's accumulating organically
+
+00:14:39.120 --> 00:14:40.879
+and I haven't really had the brainspace
+
+00:14:40.880 --> 00:14:42.579
+to step back and clean it up.
+
+00:14:42.580 --> 00:14:45.919
+But if you spotted anything interesting in this presentation,
+
+00:14:45.920 --> 00:14:48.619
+you can go check it out and see what you can scavenge.
+
+00:14:48.620 --> 00:14:50.999
+The link and this presentation are available
+
+00:14:51.000 --> 00:14:59.119
+from this talk's webpage at emacsconf.org/2023/talks/emacsconf .
+
+00:14:59.120 --> 00:15:05.200
+Let's figure out how to make Emacsconf even awesomer next year!
diff --git a/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt
new file mode 100644
index 00000000..4f89a184
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt
@@ -0,0 +1,3803 @@
+WEBVTT
+
+
+00:00:00.040 --> 00:00:00.540
+[Speaker 0]: Here.
+
+00:00:05.140 --> 00:00:05.440
+[Speaker 1]: All right. Yeah. So thanks,
+
+00:00:06.279 --> 00:00:06.779
+Fermin, for the great talk.
+
+00:00:08.039 --> 00:00:08.540
+People have questions,
+
+00:00:12.179 --> 00:00:12.380
+please post them on the pad or the IRC as
+
+00:00:13.259 --> 00:00:13.759
+well and we'll take them up.
+
+00:00:17.240 --> 00:00:17.480
+[Speaker 2]: Thank you very much. The guests will be here
+
+00:00:21.720 --> 00:00:22.220
+to answer questions. Let's see.
+
+00:00:23.560 --> 00:00:24.060
+Yep.
+
+00:00:28.080 --> 00:00:28.220
+[Speaker 1]: And also, Fermin, if you later want to
+
+00:00:30.660 --> 00:00:31.160
+clarify anything or fix any URLs or such,
+
+00:00:32.860 --> 00:00:33.000
+you're always welcome to do that either like
+
+00:00:36.000 --> 00:00:36.140
+on the Wiki page, or if you like email any of
+
+00:00:37.560 --> 00:00:37.840
+the organizers, they should be able to help
+
+00:00:38.400 --> 00:00:38.900
+with that as well.
+
+00:00:41.000 --> 00:00:41.500
+[Speaker 2]: Okay. Yeah, I put the wrong URL.
+
+00:00:46.020 --> 00:00:46.360
+Yeah, not a big deal really,
+
+00:00:48.480 --> 00:00:48.980
+if you look it up. Yeah,
+
+00:00:50.940 --> 00:00:51.440
+that's really better. Thank you very much.
+
+00:00:56.920 --> 00:00:57.420
+Checking, no questions.
+
+00:00:58.780 --> 00:00:59.280
+Very good to be in touch.
+
+00:01:17.220 --> 00:01:17.360
+[Speaker 1]: Oh, we have a question here in the big blue
+
+00:01:17.720 --> 00:01:18.220
+button chat.
+
+00:01:21.820 --> 00:01:22.320
+[Speaker 2]: Oh, public chat. I see.
+
+00:01:26.380 --> 00:01:26.600
+Is LEM an acronym? I think it is,
+
+00:01:32.960 --> 00:01:33.080
+but I never remember. The complete name is
+
+00:01:36.160 --> 00:01:36.660
+like something... It's also a circle,
+
+00:01:38.940 --> 00:01:39.440
+like, you know, a self-referencing,
+
+00:01:41.320 --> 00:01:41.820
+you know, recursive name.
+
+00:01:42.900 --> 00:01:43.400
+I never remember it, sorry.
+
+00:01:45.860 --> 00:01:46.360
+It's like... Yeah, someone...
+
+00:01:50.580 --> 00:01:51.080
+Okay, someone asked about the DEM community,
+
+00:01:56.200 --> 00:01:56.700
+how big it is. So I don't remember,
+
+00:01:57.500 --> 00:01:57.720
+to answer the question,
+
+00:01:58.440 --> 00:01:58.740
+I don't remember the acronym,
+
+00:02:00.640 --> 00:02:01.140
+but it is an acronym. I just never...
+
+00:02:04.700 --> 00:02:05.060
+And it's not written anywhere,
+
+00:02:06.380 --> 00:02:06.880
+I think, or someone...
+
+00:02:09.340 --> 00:02:09.840
+I never check it. So I...
+
+00:02:12.720 --> 00:02:13.220
+[Speaker 0]: I forgot.
+
+00:02:15.360 --> 00:02:15.820
+[Speaker 2]: My maintainer told me once and then So,
+
+00:02:17.540 --> 00:02:17.900
+whole large, does Leia have a package
+
+00:02:19.800 --> 00:02:20.300
+manager? We do have a package manager,
+
+00:02:21.900 --> 00:02:22.400
+funnily enough. We use the QuickLisp
+
+00:02:26.200 --> 00:02:26.700
+infrastructure to get packages,
+
+00:02:29.580 --> 00:02:30.080
+so it's very easy to install packages.
+
+00:02:33.340 --> 00:02:33.840
+So basically, we don't have a package manager
+
+00:02:35.740 --> 00:02:36.240
+as in Emacs, half a packet.l.
+
+00:02:39.140 --> 00:02:39.400
+We're using the same common list
+
+00:02:41.180 --> 00:02:41.460
+infrastructure to provide the different
+
+00:02:45.560 --> 00:02:46.060
+packages. We also have a talk with the
+
+00:02:47.360 --> 00:02:47.620
+Ultralisp, which is like a,
+
+00:02:48.640 --> 00:02:48.900
+you know, QuickLisp is like,
+
+00:02:50.020 --> 00:02:50.520
+you can think quickly of Melpa.
+
+00:02:52.540 --> 00:02:53.040
+Ultralisp is like a fast Melpa,
+
+00:02:54.440 --> 00:02:54.900
+very fast Melpa, that every,
+
+00:02:58.460 --> 00:02:58.660
+I think every day you can get a package from
+
+00:03:01.720 --> 00:03:01.880
+them. And We have a tag system that you can
+
+00:03:02.920 --> 00:03:03.420
+submit a package and get a tag,
+
+00:03:08.180 --> 00:03:08.360
+and Theory can download those packages with
+
+00:03:13.140 --> 00:03:13.640
+the lem tag. So the thing is,
+
+00:03:17.040 --> 00:03:17.440
+it's not yet, it doesn't have a user
+
+00:03:18.400 --> 00:03:18.900
+interface to install packages.
+
+00:03:22.020 --> 00:03:22.520
+Still, it's 2 external packages.
+
+00:03:25.520 --> 00:03:25.920
+For now, imagine this is like the early
+
+00:03:27.560 --> 00:03:27.960
+Emacs, right? Everything is going to the core
+
+00:03:29.040 --> 00:03:29.540
+for now, because we need that functionality.
+
+00:03:32.360 --> 00:03:32.680
+In the future, we probably will split it up
+
+00:03:37.120 --> 00:03:37.620
+way more. But let me first answer a question
+
+00:03:42.440 --> 00:03:42.740
+in the other part. How large is the LEN
+
+00:03:44.440 --> 00:03:44.720
+community? Hope it's a chance of survival
+
+00:03:47.360 --> 00:03:47.860
+long term. So we are a very small community,
+
+00:03:51.260 --> 00:03:51.760
+mostly because Sasaki-san,
+
+00:03:54.120 --> 00:03:54.620
+the main developers of the community,
+
+00:03:57.160 --> 00:03:57.440
+are from Japan and some of them,
+
+00:03:58.620 --> 00:03:59.120
+or most of them, don't know English.
+
+00:04:01.640 --> 00:04:01.960
+At the beginning, LEM was a very
+
+00:04:05.020 --> 00:04:05.220
+Japanese-centric tooling because barrier of
+
+00:04:06.960 --> 00:04:07.460
+language, most of the users are from Japan.
+
+00:04:08.640 --> 00:04:09.140
+So different communities.
+
+00:04:12.040 --> 00:04:12.260
+And also, I don't know why,
+
+00:04:13.100 --> 00:04:13.520
+but the main maintainer,
+
+00:04:17.740 --> 00:04:18.079
+which is Asaki-san, very good guy and a very,
+
+00:04:19.079 --> 00:04:19.579
+very talented developer.
+
+00:04:21.779 --> 00:04:22.280
+He doesn't like to, you know,
+
+00:04:24.640 --> 00:04:25.020
+at first the project was all in Japanese,
+
+00:04:27.100 --> 00:04:27.260
+so he doesn't care if someone uses the
+
+00:04:28.520 --> 00:04:29.020
+project or not. He's more focused on the,
+
+00:04:32.080 --> 00:04:32.560
+I guess, quality of the features of it.
+
+00:04:35.740 --> 00:04:36.240
+So that creates a problem that doesn't really
+
+00:04:38.680 --> 00:04:39.000
+mind the community. So the community doesn't
+
+00:04:41.640 --> 00:04:41.760
+mind in a good way. It's to focus more on
+
+00:04:43.440 --> 00:04:43.940
+technicality rather than the user,
+
+00:04:46.300 --> 00:04:46.800
+which I mean, I cannot blame him.
+
+00:04:49.540 --> 00:04:49.700
+It's very hard work to build an Emacs and
+
+00:04:52.540 --> 00:04:53.040
+editor from scratch. It's not a trivial task.
+
+00:04:56.160 --> 00:04:56.660
+So yeah, we're a very small community.
+
+00:04:58.660 --> 00:04:58.940
+But I think the chance of survival is very
+
+00:05:01.440 --> 00:05:01.640
+good because LEM is written in ANSI Common
+
+00:05:04.540 --> 00:05:05.040
+Lisp, so it should be used in any...
+
+00:05:07.440 --> 00:05:07.940
+Well, it works in a lot of Common Lisp
+
+00:05:10.400 --> 00:05:10.900
+implementation. For people who don't know,
+
+00:05:12.180 --> 00:05:12.400
+Common Lisp is a language that was
+
+00:05:13.140 --> 00:05:13.640
+standardized in the 94.
+
+00:05:14.640 --> 00:05:14.840
+I explained that in the talk,
+
+00:05:15.660 --> 00:05:16.160
+but I'll say it again.
+
+00:05:18.080 --> 00:05:18.580
+So, if Common Lisp exists,
+
+00:05:21.200 --> 00:05:21.700
+in theory, LEM should also exist.
+
+00:05:24.340 --> 00:05:24.840
+And also if nCursor doesn't break or doesn't
+
+00:05:27.560 --> 00:05:28.060
+stop to exist, which is even less likely.
+
+00:05:30.400 --> 00:05:30.900
+So that's the main idea.
+
+00:05:33.460 --> 00:05:33.740
+And you can use LEM for very good Common Lisp
+
+00:05:36.380 --> 00:05:36.600
+development already. If Common Lisp doesn't
+
+00:05:39.440 --> 00:05:39.940
+change that much, it should disappear.
+
+00:05:42.720 --> 00:05:43.220
+We are not bound to any company or any...
+
+00:05:46.040 --> 00:05:46.540
+Even Sasaki-san, God forbid,
+
+00:05:47.720 --> 00:05:48.220
+disappears instantaneously.
+
+00:05:50.280 --> 00:05:50.740
+There are a few people,
+
+00:05:52.260 --> 00:05:52.440
+me included, that know very well the code
+
+00:05:54.020 --> 00:05:54.520
+base and we can continue the development.
+
+00:05:56.320 --> 00:05:56.720
+So it's not like 1, there's no one-man
+
+00:05:58.860 --> 00:05:59.360
+project. Maybe a four-man project or 5,
+
+00:06:04.280 --> 00:06:04.640
+but not 1. Okay, I'll answer the 1 in the
+
+00:06:08.100 --> 00:06:08.600
+chat, on the blue button.
+
+00:06:10.520 --> 00:06:10.840
+Is it best to learn Common Lisp before
+
+00:06:13.100 --> 00:06:13.600
+learning to use LEM? I think this is similar
+
+00:06:15.780 --> 00:06:16.280
+to Emacs and EmacLisp,
+
+00:06:18.740 --> 00:06:19.080
+right? Should you use EmacLisp before using
+
+00:06:20.160 --> 00:06:20.460
+Emacs? Doesn't make too much sense,
+
+00:06:23.360 --> 00:06:23.860
+right? You see Emacs and then you go learning
+
+00:06:28.620 --> 00:06:29.060
+Common Lisp. I think it's the same,
+
+00:06:30.800 --> 00:06:31.300
+sorry, EmacsLisp. And it's the same with LEM.
+
+00:06:32.800 --> 00:06:33.300
+You can start using LEM with a non-common
+
+00:06:37.800 --> 00:06:38.040
+Lisp, which is fine. You can use it to edit
+
+00:06:39.020 --> 00:06:39.520
+your things. It's like an editor.
+
+00:06:42.900 --> 00:06:43.040
+But like Emacs, LEM puts a lot of focus on
+
+00:06:46.820 --> 00:06:46.960
+extensibility. So it's very probable that you
+
+00:06:49.920 --> 00:06:50.420
+will learn how to write Common Lisp.
+
+00:06:53.440 --> 00:06:53.600
+I have to say that a lot of people that use
+
+00:06:56.000 --> 00:06:56.440
+LEM, well, me and most of the people,
+
+00:06:59.060 --> 00:06:59.440
+come from Emacs. So if you come from Emacs
+
+00:07:00.620 --> 00:07:01.120
+and you know a little bit of Emac Lisp,
+
+00:07:04.820 --> 00:07:05.320
+Common Lisp is like an uncle or cousin
+
+00:07:07.120 --> 00:07:07.620
+distance that shares some similarities.
+
+00:07:09.820 --> 00:07:10.020
+So you will... Well, it's not going to be
+
+00:07:12.520 --> 00:07:13.020
+that. I can show... Sorry about that.
+
+00:07:14.960 --> 00:07:15.460
+For example, I show that in the...
+
+00:07:21.780 --> 00:07:22.280
+I can show... So the...
+
+00:07:27.080 --> 00:07:27.540
+It's not that different from Emacs regarding
+
+00:07:28.940 --> 00:07:29.440
+configuration. So for example,
+
+00:07:31.020 --> 00:07:31.520
+this command doesn't exist on LEM.
+
+00:07:35.020 --> 00:07:35.520
+And Sasaki-san didn't want to copy one-to-one
+
+00:07:36.360 --> 00:07:36.860
+the command from Emacs,
+
+00:07:39.660 --> 00:07:39.860
+the airgrip, the cursor grip command of
+
+00:07:41.120 --> 00:07:41.620
+Emacs. And I said, okay,
+
+00:07:43.080 --> 00:07:43.440
+then I'm going to implement it myself.
+
+00:07:44.240 --> 00:07:44.740
+And it's something like this,
+
+00:07:47.960 --> 00:07:48.080
+which is you will do something similar to
+
+00:07:50.320 --> 00:07:50.500
+Emacs, right? This will be like things at
+
+00:07:52.280 --> 00:07:52.780
+point symbol or something like that.
+
+00:07:54.740 --> 00:07:55.240
+And then you have a prompt,
+
+00:07:59.060 --> 00:07:59.440
+very prompt for directory with Emacs would be
+
+00:08:01.260 --> 00:08:01.560
+something similar. And then you then launch
+
+00:08:02.960 --> 00:08:03.460
+grep with the command that you want.
+
+00:08:06.340 --> 00:08:06.780
+This is not that far from Emacs,
+
+00:08:10.680 --> 00:08:10.840
+this, really. If you don't know neither of
+
+00:08:12.740 --> 00:08:13.240
+those, you can still use LEM,
+
+00:08:16.560 --> 00:08:17.060
+though as with Emacs, extensibility will be,
+
+00:08:22.440 --> 00:08:22.760
+well, you couldn't extend it if you don't
+
+00:08:28.700 --> 00:08:29.100
+know combo disp. Should I answer the question
+
+00:08:33.280 --> 00:08:33.780
+on the etherpad writing it at the same time?
+
+00:08:36.580 --> 00:08:36.760
+[Speaker 1]: You're welcome to, but you don't have to.
+
+00:08:38.000 --> 00:08:38.500
+You can just answer here on stream,
+
+00:08:40.440 --> 00:08:40.940
+[Speaker 2]: on the Google button. Okay.
+
+00:08:43.140 --> 00:08:43.640
+Okay. Are there any Lisp machine capabilities
+
+00:08:45.020 --> 00:08:45.280
+you're trying to provide that GNU image
+
+00:08:46.920 --> 00:08:47.040
+lacks? The type objects capability in the
+
+00:08:47.560 --> 00:08:48.060
+editor, as an example.
+
+00:08:53.840 --> 00:08:54.340
+I mean, there were a few discussions about
+
+00:08:59.920 --> 00:09:00.060
+the Lisp machines and LEM and all the big
+
+00:09:03.080 --> 00:09:03.280
+projects that tries to get some capability of
+
+00:09:05.180 --> 00:09:05.680
+it. But we don't really...
+
+00:09:09.840 --> 00:09:10.340
+We try to improve the development experience
+
+00:09:12.800 --> 00:09:13.300
+for Common Lisp and for LEM,
+
+00:09:18.460 --> 00:09:18.660
+imitating a lot of things that the Lisp
+
+00:09:21.560 --> 00:09:22.060
+machine had. I'm going to try to do a thing
+
+00:09:23.400 --> 00:09:23.900
+that I don't know if it's going to work.
+
+00:09:26.880 --> 00:09:27.380
+So to explain this, let's see.
+
+00:09:35.680 --> 00:09:36.180
+I'm going to recompile them now live.
+
+00:09:42.040 --> 00:09:42.540
+Let's see how it works.
+
+00:09:47.860 --> 00:09:48.240
+And compiling the, yes,
+
+00:09:51.780 --> 00:09:52.280
+it doesn't work. OK. What if I do?
+
+00:09:53.900 --> 00:09:54.220
+No, it doesn't work. OK.
+
+00:09:55.280 --> 00:09:55.760
+I was trying to compile the SDL2,
+
+00:09:57.540 --> 00:09:58.040
+but I do have the codebase modifier.
+
+00:10:00.360 --> 00:10:00.860
+I should be able to compile this.
+
+00:10:05.640 --> 00:10:06.140
+Oh, that was really bad.
+
+00:10:13.320 --> 00:10:13.580
+What about example? I have the code base,
+
+00:10:17.220 --> 00:10:17.720
+so let me check. I'm going to do this.
+
+00:10:19.080 --> 00:10:19.580
+Oh, yeah, I have this modified.
+
+00:10:31.120 --> 00:10:31.620
+I stash this. OK. I have this modified.
+
+00:10:33.280 --> 00:10:33.780
+Now it should work. OK.
+
+00:10:42.480 --> 00:10:42.820
+Sorry. I was going to show the writing
+
+00:10:45.620 --> 00:10:45.900
+capabilities of it, similar to the Lisp
+
+00:10:47.800 --> 00:10:48.300
+machine of navigating of classes.
+
+00:10:52.000 --> 00:10:52.500
+So the answer of that question is,
+
+00:10:57.040 --> 00:10:57.180
+not really. We don't try to emulate this
+
+00:10:58.440 --> 00:10:58.940
+machine, nor any like of that.
+
+00:11:05.500 --> 00:11:06.000
+But yeah. Let me, I'm going to try to,
+
+00:11:07.120 --> 00:11:07.620
+okay, now I'm back at them.
+
+00:11:12.180 --> 00:11:12.500
+Okay. So what about using them for things
+
+00:11:13.260 --> 00:11:13.760
+other than common, common,
+
+00:11:16.160 --> 00:11:16.500
+that markets? Okay. So yes,
+
+00:11:18.280 --> 00:11:18.480
+we do have, so I'm going to show the code
+
+00:11:20.280 --> 00:11:20.780
+base a little bit. Like I said before,
+
+00:11:25.120 --> 00:11:25.600
+we don't have yet too much external packages
+
+00:11:26.500 --> 00:11:27.000
+because of the size of the community.
+
+00:11:30.720 --> 00:11:30.940
+I have a question. Go ahead,
+
+00:11:32.160 --> 00:11:32.660
+you can write it, Michael.
+
+00:11:37.840 --> 00:11:38.300
+Yeah. So, yes, as you can see here,
+
+00:11:43.900 --> 00:11:44.340
+this is almost all, or 99% of the major modes
+
+00:11:46.160 --> 00:11:46.620
+we have. We use the same terminology of
+
+00:11:47.640 --> 00:11:48.140
+SkinnyMemax in that way.
+
+00:11:49.120 --> 00:11:49.440
+For example, the C mode,
+
+00:11:51.460 --> 00:11:51.580
+if you go inside, you see that this is the
+
+00:11:53.600 --> 00:11:53.980
+fine major mode. So in that regard,
+
+00:11:54.800 --> 00:11:55.300
+it's very similar to Emacs.
+
+00:11:56.600 --> 00:11:57.100
+And we have something called a JIT,
+
+00:11:58.320 --> 00:11:58.820
+which is like a maggot.
+
+00:12:00.280 --> 00:12:00.780
+And you can edit files.
+
+00:12:02.500 --> 00:12:02.980
+You can use not only for common lists.
+
+00:12:06.820 --> 00:12:07.320
+In my configuration, which is written,
+
+00:12:11.140 --> 00:12:11.640
+I will post that later,
+
+00:12:15.480 --> 00:12:15.640
+but if you go to my code burg you can see my
+
+00:12:16.460 --> 00:12:16.960
+configuration which is,
+
+00:12:20.460 --> 00:12:20.640
+which I do have. So for example you can use
+
+00:12:22.260 --> 00:12:22.760
+it for a scheme. We have a swank server.
+
+00:12:24.240 --> 00:12:24.340
+This is the configuration to use it.
+
+00:12:25.900 --> 00:12:26.040
+You can use it for JavaScript because we have
+
+00:12:28.180 --> 00:12:28.680
+a native LSP client written in.
+
+00:12:29.540 --> 00:12:29.800
+And we have Dired. Yeah,
+
+00:12:33.820 --> 00:12:34.320
+this is Dired. We have Dired indeed.
+
+00:12:35.560 --> 00:12:35.740
+No, it's not Dired, you know.
+
+00:12:36.260 --> 00:12:36.760
+It's called directory.
+
+00:12:38.860 --> 00:12:39.360
+Sasaki-san, which is the main maintainer,
+
+00:12:43.100 --> 00:12:43.600
+doesn't like to copy one-to-one Emacs names,
+
+00:12:48.700 --> 00:12:49.200
+but we are the same. We also have projects,
+
+00:12:51.780 --> 00:12:52.280
+which is like projectile.
+
+00:12:55.120 --> 00:12:55.240
+So, you know, they're very similar but not
+
+00:12:56.940 --> 00:12:57.440
+the same. We also have a VI configuration,
+
+00:12:59.220 --> 00:12:59.380
+as you can see. I'm using the VI commands and
+
+00:13:00.100 --> 00:13:00.600
+stuff, and it's very good.
+
+00:13:03.940 --> 00:13:04.120
+I will say not as good as an evil because it
+
+00:13:06.680 --> 00:13:07.180
+still needs some polish,
+
+00:13:08.000 --> 00:13:08.500
+but it's getting there.
+
+00:13:13.780 --> 00:13:13.860
+So we can also program in JavaScript and a
+
+00:13:16.160 --> 00:13:16.660
+lot of LSP things, and Elixir,
+
+00:13:18.600 --> 00:13:19.100
+which was recently added by myself.
+
+00:13:21.580 --> 00:13:22.080
+And yeah, it's very fun to add new modes.
+
+00:13:27.440 --> 00:13:27.940
+OK, what else next? What about user-level
+
+00:13:28.440 --> 00:13:28.940
+things other than coding?
+
+00:13:31.720 --> 00:13:31.880
+What about using this in conjunction with
+
+00:13:34.340 --> 00:13:34.840
+Nix? Oh, so there's a big,
+
+00:13:36.980 --> 00:13:37.480
+so like I said before,
+
+00:13:40.080 --> 00:13:40.200
+there were like an issue that 3 main common
+
+00:13:40.960 --> 00:13:41.460
+list project were talking,
+
+00:13:46.920 --> 00:13:47.420
+some of the users. So the 3 main projects are
+
+00:13:49.340 --> 00:13:49.840
+LEM, probably, Nixed, and then StamWM,
+
+00:13:52.600 --> 00:13:53.000
+the 3 main, well, 3 big,
+
+00:13:55.280 --> 00:13:55.440
+common list projects that are trying to
+
+00:13:57.720 --> 00:13:58.040
+emulate an Emacs experience in different
+
+00:14:00.100 --> 00:14:00.340
+fields. 1 is Editor, the other 1 is Window
+
+00:14:01.720 --> 00:14:02.220
+Manager, and the 1 is the browser.
+
+00:14:06.560 --> 00:14:06.820
+The problem is that the design of the 3 are
+
+00:14:11.680 --> 00:14:11.960
+very different. So Nix is very focused on the
+
+00:14:14.900 --> 00:14:15.060
+browser. You can connect to Nix.
+
+00:14:16.720 --> 00:14:16.920
+So given that they're both a common list,
+
+00:14:18.940 --> 00:14:19.160
+you can connect to Nix from them and vice
+
+00:14:21.420 --> 00:14:21.600
+versa. And you can send commands and you can,
+
+00:14:22.580 --> 00:14:23.080
+so you have this kind of interoperability
+
+00:14:31.420 --> 00:14:31.580
+with both. But no, you cannot combine both to
+
+00:14:35.280 --> 00:14:35.780
+have 1 LEMNIX. That would be very sick.
+
+00:14:39.400 --> 00:14:39.600
+I would love it. But the effort is just too
+
+00:14:41.000 --> 00:14:41.280
+much. Keep in mind we are a very small
+
+00:14:44.960 --> 00:14:45.060
+community. The LEM, like I said,
+
+00:14:49.920 --> 00:14:50.140
+we are like 345 developers that write
+
+00:14:51.880 --> 00:14:52.380
+packages and answer questions and stuff.
+
+00:14:55.380 --> 00:14:55.880
+Now we need users in that way to test things.
+
+00:14:58.480 --> 00:14:58.820
+So what is the license of LEM?
+
+00:15:00.480 --> 00:15:00.980
+The license of LEM is MAT.
+
+00:15:02.860 --> 00:15:03.180
+We have some components of all the various
+
+00:15:04.480 --> 00:15:04.980
+licenses, but the main 1 is MAT.
+
+00:15:07.160 --> 00:15:07.660
+I didn't choose the license of it.
+
+00:15:11.320 --> 00:15:11.820
+I would highly prefer a more like GPL 1,
+
+00:15:13.500 --> 00:15:14.000
+but like I said I'm not a maintainer,
+
+00:15:15.860 --> 00:15:16.360
+so the license is MAT.
+
+00:15:19.820 --> 00:15:20.320
+This question, I realize,
+
+00:15:22.120 --> 00:15:22.200
+how far is LEM from being able to remove a
+
+00:15:26.500 --> 00:15:26.940
+list libraries? OK, that's a big question
+
+00:15:30.660 --> 00:15:30.920
+indeed. And Funny enough,
+
+00:15:31.800 --> 00:15:32.300
+2 years ago in the EmacsConf,
+
+00:15:34.340 --> 00:15:34.700
+I talk about this, not with LEM,
+
+00:15:36.340 --> 00:15:36.480
+but with Common Lisp and Emacs Lisp in
+
+00:15:41.880 --> 00:15:42.100
+general. So I'm not the only 1 thinking about
+
+00:15:44.100 --> 00:15:44.240
+this. In fact, I'm talking with someone that
+
+00:15:46.740 --> 00:15:46.960
+is trying to write like a Emacs Lisp
+
+00:15:48.120 --> 00:15:48.620
+interpreter to work with them.
+
+00:15:52.240 --> 00:15:52.740
+The thing is that Emaclist libraries,
+
+00:15:55.080 --> 00:15:55.580
+so the API is just very different.
+
+00:15:57.720 --> 00:15:58.220
+That's the main problem.
+
+00:15:58.940 --> 00:15:59.440
+That's really the problem.
+
+00:16:02.320 --> 00:16:02.820
+You can, so you can, let me see.
+
+00:16:13.380 --> 00:16:13.880
+So, you can have an Emacs list buffer of LEM.
+
+00:16:15.420 --> 00:16:15.920
+This is an Emacs list rebel.
+
+00:16:21.380 --> 00:16:21.560
+I wrote an LRSP client so you can connect to
+
+00:16:23.140 --> 00:16:23.560
+Emacs and send things and stuff.
+
+00:16:25.160 --> 00:16:25.660
+So you're friends that we share stuff.
+
+00:16:28.340 --> 00:16:28.840
+But having a complete Emacless implementation
+
+00:16:37.400 --> 00:16:37.600
+with LEM and work with both API will be a
+
+00:16:42.240 --> 00:16:42.600
+huge work. Very like, it's even if they share
+
+00:16:43.680 --> 00:16:44.180
+very similar thing, in fact,
+
+00:16:46.480 --> 00:16:46.980
+API in some places is very similar.
+
+00:16:48.540 --> 00:16:49.040
+Down the line infrastructure,
+
+00:16:52.220 --> 00:16:52.720
+so the code is, so it's completely different.
+
+00:16:56.680 --> 00:16:56.840
+It will be very hard. We do have a clone of
+
+00:16:58.940 --> 00:16:59.440
+maggot that works, more or less.
+
+00:17:01.440 --> 00:17:01.940
+Well, it does work, but maggot's just better.
+
+00:17:03.340 --> 00:17:03.820
+But it's getting there.
+
+00:17:05.020 --> 00:17:05.460
+So like I said, we're trying to,
+
+00:17:06.220 --> 00:17:06.720
+not to copy one-to-one,
+
+00:17:09.640 --> 00:17:10.140
+but to adapting each tool to LEM.
+
+00:17:13.260 --> 00:17:13.760
+How are LEM buffer designs similar to Emacs?
+
+00:17:19.700 --> 00:17:20.020
+So yeah, that would be,
+
+00:17:21.260 --> 00:17:21.760
+so how a blend buffer design,
+
+00:17:24.780 --> 00:17:25.280
+similar to Emacs. So similar in what way,
+
+00:17:26.319 --> 00:17:26.819
+actually with properties.
+
+00:17:29.180 --> 00:17:29.480
+I think that you've seen,
+
+00:17:31.220 --> 00:17:31.560
+so you do have like a font lock,
+
+00:17:32.420 --> 00:17:32.920
+different kind of properties,
+
+00:17:37.820 --> 00:17:38.040
+but it's not exactly how Emac does it with
+
+00:17:41.740 --> 00:17:42.180
+overlays and stuff. You can,
+
+00:17:43.080 --> 00:17:43.580
+so if you're very interested,
+
+00:17:45.300 --> 00:17:45.800
+I don't want to go too much deep into the,
+
+00:17:51.500 --> 00:17:51.720
+let me go to, I don't want to go too much
+
+00:17:55.380 --> 00:17:55.760
+deep into the technicality of things now,
+
+00:17:57.920 --> 00:17:58.080
+but you can go. So LEM is written 100% in
+
+00:18:00.040 --> 00:18:00.380
+Common Lisp. So if you know Common Lisp,
+
+00:18:03.900 --> 00:18:04.040
+you can go to buffer. You can check all the
+
+00:18:08.520 --> 00:18:09.020
+codes here. Always we have,
+
+00:18:12.780 --> 00:18:13.280
+we also have this, which is like StreamX.
+
+00:18:17.860 --> 00:18:18.360
+Sorry to that, I don't.
+
+00:18:21.900 --> 00:18:22.400
+But yeah, So you can see.
+
+00:18:24.440 --> 00:18:24.940
+So yeah, if you go to the code base,
+
+00:18:26.780 --> 00:18:27.280
+maybe some of you can check this problem.
+
+00:18:28.500 --> 00:18:29.000
+Well, not problem, but yeah.
+
+00:18:30.340 --> 00:18:30.840
+That's this Japanese comment.
+
+00:18:35.560 --> 00:18:36.060
+You can see here why it's very,
+
+00:18:38.000 --> 00:18:38.300
+you have to translate and stuff,
+
+00:18:39.560 --> 00:18:40.060
+which is sometimes a little bit annoying.
+
+00:18:44.540 --> 00:18:45.040
+But yeah, some of them are in English.
+
+00:18:47.020 --> 00:18:47.440
+So this play is not the same.
+
+00:18:48.800 --> 00:18:49.200
+So if you're interested,
+
+00:18:51.200 --> 00:18:51.400
+you can go to the buffer and check it out for
+
+00:18:53.480 --> 00:18:53.600
+yourself. But I think it uses the overlay in
+
+00:18:58.620 --> 00:18:58.900
+a different way. So the implementation is
+
+00:19:04.800 --> 00:19:05.020
+different that way. Oh,
+
+00:19:10.875 --> 00:19:11.375
+[Speaker 0]: This module. Oh, this is very low.
+
+00:19:12.560 --> 00:19:13.060
+[Speaker 2]: this is fairly low. What other things or
+
+00:19:15.559 --> 00:19:15.600
+experiences that I can show you?
+
+00:19:15.920 --> 00:19:16.420
+Just like you show you.
+
+00:19:18.120 --> 00:19:18.620
+Any marks?
+
+00:19:32.860 --> 00:19:33.360
+Okay, very interesting question.
+
+00:19:34.000 --> 00:19:34.500
+What are the things...
+
+00:19:37.460 --> 00:19:37.960
+So that's interesting.
+
+00:19:42.720 --> 00:19:43.220
+Let me see. So forgive me,
+
+00:19:49.660 --> 00:19:49.760
+you answered this. I talked briefly in the
+
+00:19:53.560 --> 00:19:53.780
+talk about this, but basically I like
+
+00:19:55.840 --> 00:19:56.340
+Komaldisp, I have the mascot here.
+
+00:19:58.040 --> 00:19:58.540
+[Speaker 3]: a very
+
+00:20:04.740 --> 00:20:04.840
+[Speaker 2]: It's Italian thing. I like Common Lisp and I
+
+00:20:08.640 --> 00:20:08.800
+think GmagLisp is a very good friend of
+
+00:20:10.240 --> 00:20:10.520
+Common Lisp in the way that Serious Software
+
+00:20:11.840 --> 00:20:12.340
+Analysis is a very good uncle.
+
+00:20:18.800 --> 00:20:19.300
+Let me answer first the 1.
+
+00:20:24.140 --> 00:20:24.620
+So I like to extend it in Common Lisp.
+
+00:20:25.640 --> 00:20:26.140
+I like the Common Lisp libraries.
+
+00:20:30.100 --> 00:20:30.360
+And I think them have a better design in
+
+00:20:31.220 --> 00:20:31.720
+terms of its 1 language,
+
+00:20:33.480 --> 00:20:33.980
+which I think is a nice strength.
+
+00:20:36.580 --> 00:20:36.660
+Like, 1 of the things that put me off when I
+
+00:20:38.680 --> 00:20:39.020
+was using Emacs, I love to extend the editor
+
+00:20:40.600 --> 00:20:41.100
+and to go inside and stuff.
+
+00:20:43.360 --> 00:20:43.520
+And 1 of the things that I'm not a big fan of
+
+00:20:44.820 --> 00:20:45.020
+C. If you're a fan of C,
+
+00:20:47.040 --> 00:20:47.240
+you will be very pleasant with finding C
+
+00:20:50.440 --> 00:20:50.660
+stuff, but I don't. So when I'm trying to
+
+00:20:52.340 --> 00:20:52.840
+hack an Emacs and go inside the things,
+
+00:20:54.140 --> 00:20:54.640
+I will control C code.
+
+00:20:56.200 --> 00:20:56.660
+That's not that interactive as the Emaclist
+
+00:20:59.340 --> 00:20:59.840
+1, and that would be like a fuzzball for me.
+
+00:21:03.740 --> 00:21:04.080
+I was always dreaming about that stuff,
+
+00:21:05.320 --> 00:21:05.820
+having like everything in 1 language.
+
+00:21:08.000 --> 00:21:08.160
+The thing that LEM does to me is like it
+
+00:21:12.100 --> 00:21:12.560
+allows me to extend the editor to modify
+
+00:21:14.160 --> 00:21:14.660
+also, to modify in Common Lisp.
+
+00:21:17.660 --> 00:21:18.160
+Also, I like the language and technology.
+
+00:21:19.600 --> 00:21:19.900
+It's a bold thing, right?
+
+00:21:21.480 --> 00:21:21.980
+It's a world language that I love,
+
+00:21:23.740 --> 00:21:24.240
+and Emacs that I love.
+
+00:21:25.380 --> 00:21:25.880
+Emacs, I'm a big fan of,
+
+00:21:27.160 --> 00:21:27.520
+or a user of GNU Emacs.
+
+00:21:29.380 --> 00:21:29.880
+And LEM is like Emacs plus Common Lisp,
+
+00:21:30.600 --> 00:21:30.900
+but with a different design.
+
+00:21:32.360 --> 00:21:32.860
+I don't want to, It's not a clone.
+
+00:21:37.800 --> 00:21:38.040
+I want to get this very clear that LEM is not
+
+00:21:40.760 --> 00:21:41.140
+a clone of Emacs. The sign is very different
+
+00:21:43.180 --> 00:21:43.500
+in a lot of ways. But it's very inspired,
+
+00:21:44.380 --> 00:21:44.880
+and that cannot be denied.
+
+00:21:48.280 --> 00:21:48.780
+[Speaker 1]: I can jump in for a second.
+
+00:21:51.120 --> 00:21:51.360
+I think we're like 15 minutes into the lunch
+
+00:21:52.660 --> 00:21:53.040
+break, but you're welcome to continue
+
+00:21:55.600 --> 00:21:55.760
+answering questions. But if anyone on the
+
+00:21:57.500 --> 00:21:58.000
+stream or folks want to go grab lunch,
+
+00:21:59.760 --> 00:21:59.860
+feel free to do that. I'm probably going to
+
+00:22:01.880 --> 00:22:02.040
+do that as well. But yeah,
+
+00:22:03.760 --> 00:22:03.920
+we can either continue keeping this on the
+
+00:22:06.180 --> 00:22:06.440
+stream, or if people would like to come join
+
+00:22:08.600 --> 00:22:09.100
+here on BigBlueButton and talk to Fermin,
+
+00:22:11.040 --> 00:22:11.540
+like folks have already done that,
+
+00:22:12.440 --> 00:22:12.940
+yeah, you're welcome to.
+
+00:22:14.620 --> 00:22:15.120
+[Speaker 2]: Yeah, go ahead. No problem.
+
+00:22:16.500 --> 00:22:17.000
+Thank you. Thank you, Vitaliy.
+
+00:22:25.160 --> 00:22:25.280
+Cheers. Cheers. So finishing the answer to
+
+00:22:30.080 --> 00:22:30.380
+the question, I think LEM does tries to fix
+
+00:22:31.880 --> 00:22:32.380
+some Emacs problems, can we fix problems
+
+00:22:35.200 --> 00:22:35.700
+regarding the internal API,
+
+00:22:37.200 --> 00:22:37.480
+which makes sense, right?
+
+00:22:39.060 --> 00:22:39.560
+Emacs have like 40 years,
+
+00:22:42.280 --> 00:22:42.780
+which is a lot. And yeah,
+
+00:22:44.760 --> 00:22:45.060
+which is, that's what makes me happy.
+
+00:22:47.480 --> 00:22:47.720
+I use both now. I use Maggis and Emacs for
+
+00:22:50.200 --> 00:22:50.460
+some languages and then I use LEM for Common
+
+00:22:51.100 --> 00:22:51.600
+Lisp and other languages.
+
+00:22:55.240 --> 00:22:55.740
+You can also use LEM for EmacLisp,
+
+00:22:59.760 --> 00:22:59.960
+which makes LEM the second best editor for
+
+00:23:02.360 --> 00:23:02.860
+EmacLisp. It was a funny thing to do.
+
+00:23:05.980 --> 00:23:06.100
+OK, so do you think LEM will continue to have
+
+00:23:06.760 --> 00:23:07.260
+a lot of Japanese documentation?
+
+00:23:11.720 --> 00:23:12.180
+So there's not that many Japanese
+
+00:23:12.780 --> 00:23:13.280
+documentation, really.
+
+00:23:18.280 --> 00:23:18.480
+So there's a few comments here and there,
+
+00:23:20.800 --> 00:23:20.920
+but it's not full. We have a web page with a
+
+00:23:22.020 --> 00:23:22.520
+lot of documentation in English.
+
+00:23:25.380 --> 00:23:25.880
+So you can take a look at that.
+
+00:23:29.080 --> 00:23:29.580
+But we do have to improve the documentation
+
+00:23:30.260 --> 00:23:30.760
+and translate it to English.
+
+00:23:32.220 --> 00:23:32.440
+Sasaki-san is up to it,
+
+00:23:35.460 --> 00:23:35.960
+but he just doesn't feel that comfortable
+
+00:23:36.600 --> 00:23:37.100
+translating it himself.
+
+00:23:38.680 --> 00:23:39.180
+So yeah.
+
+00:23:42.720 --> 00:23:43.220
+[Speaker 3]: So, this is Peter on BigBlueWem.
+
+00:23:49.620 --> 00:23:50.120
+Yeah, it's neat that Wem even exists,
+
+00:23:55.520 --> 00:23:55.940
+because there's always chatter on the Emacs
+
+00:23:58.980 --> 00:23:59.280
+mailing list to rewrite Emacs and some other
+
+00:24:03.920 --> 00:24:04.120
+language. And to see that it's already to see
+
+00:24:05.320 --> 00:24:05.820
+that I mean, you have an implementation
+
+00:24:08.360 --> 00:24:08.560
+sitting there and, and the thing I was
+
+00:24:10.600 --> 00:24:10.960
+wondering while I was listening in on the,
+
+00:24:14.060 --> 00:24:14.460
+on the Q and A was do you have Dured?
+
+00:24:15.400 --> 00:24:15.700
+Do you have Maggot? And some,
+
+00:24:17.100 --> 00:24:17.600
+somebody else wrote that question into,
+
+00:24:20.460 --> 00:24:20.640
+into Etherpad. But I was happy to see that
+
+00:24:22.800 --> 00:24:23.000
+you have Dured or something like it
+
+00:24:24.960 --> 00:24:25.440
+implemented. Because I think that's like the,
+
+00:24:27.040 --> 00:24:27.180
+for me, that's the most important thing in
+
+00:24:30.800 --> 00:24:31.000
+Emacs because that gets me around in my
+
+00:24:35.200 --> 00:24:35.380
+[Speaker 2]: BRODINKOVICH Yeah, for me too.
+
+00:24:35.740 --> 00:24:36.240
+For me too.
+
+00:24:37.100 --> 00:24:37.260
+[Speaker 0]: Go ahead.
+
+00:24:37.740 --> 00:24:37.940
+[Speaker 3]: system. VICTOR Sorry. Yeah,
+
+00:24:39.680 --> 00:24:40.160
+so I may try it out sometime,
+
+00:24:42.040 --> 00:24:42.540
+but probably won't be for like 3 or 6 months,
+
+00:24:45.060 --> 00:24:45.240
+because there's always a backlog of other
+
+00:24:46.560 --> 00:24:47.060
+things to try out.
+
+00:24:49.800 --> 00:24:50.300
+[Speaker 4]: I'm the 1 who wrote that question.
+
+00:24:54.020 --> 00:24:54.520
+And do you use, I think you have bookmarks
+
+00:24:55.380 --> 00:24:55.800
+and registers, I imagine,
+
+00:24:55.800 --> 00:24:56.300
+right?
+
+00:24:59.700 --> 00:25:00.060
+[Speaker 2]: I think you have. I never tried bookmarks
+
+00:25:01.220 --> 00:25:01.400
+because I don't use it that much.
+
+00:25:02.560 --> 00:25:03.060
+But I think you have something like that.
+
+00:25:05.420 --> 00:25:05.840
+I mean, I don't. There's a few features that
+
+00:25:07.360 --> 00:25:07.540
+I don't know about them because I don't use
+
+00:25:08.680 --> 00:25:08.980
+it much. Some features,
+
+00:25:11.580 --> 00:25:11.840
+I mean. But yeah, I think you have.
+
+00:25:13.100 --> 00:25:13.380
+Let me check. We can check,
+
+00:25:16.620 --> 00:25:17.120
+probably. Things in extensions,
+
+00:25:23.140 --> 00:25:23.480
+just directory. VNXT. Directory mode.
+
+00:25:28.950 --> 00:25:29.450
+So there is. So this is the Tyrant's friend.
+
+00:25:31.780 --> 00:25:32.230
+I won't say clone. Very inspired.
+
+00:25:36.580 --> 00:25:36.900
+[Speaker 4]: What about like on the note-taking front,
+
+00:25:38.440 --> 00:25:38.940
+like org mode,
+
+00:25:41.040 --> 00:25:41.380
+[Speaker 2]: You know. note... Yes,
+
+00:25:50.440 --> 00:25:50.940
+so... EMMS... Yes, so someone did some MMS.
+
+00:25:58.380 --> 00:25:58.620
+So not MMS, not much. So package for LEM that
+
+00:26:00.060 --> 00:26:00.400
+is now in a pull request,
+
+00:26:03.800 --> 00:26:04.300
+I think. But yeah, no.
+
+00:26:06.800 --> 00:26:07.300
+The thing is I don't use R mode that much.
+
+00:26:11.980 --> 00:26:12.480
+We don't have a heavy R mode user to provide
+
+00:26:15.020 --> 00:26:15.300
+some major mode and stuff.
+
+00:26:18.160 --> 00:26:18.600
+So we don't have that implemented yet.
+
+00:26:20.580 --> 00:26:20.900
+The thing is, my plans for,
+
+00:26:22.360 --> 00:26:22.860
+I do have plans for our mode.
+
+00:26:24.020 --> 00:26:24.520
+They're a little bit evil,
+
+00:26:26.200 --> 00:26:26.700
+but there's plans for it.
+
+00:26:27.800 --> 00:26:28.040
+So I'm planning to use,
+
+00:26:30.000 --> 00:26:30.060
+so rewriting our mode is a big task that I
+
+00:26:34.200 --> 00:26:34.700
+don't want to do. So I'm going to use Emacs
+
+00:26:39.020 --> 00:26:39.520
+for our mode in 2.11. I wrote a recipe,
+
+00:26:45.060 --> 00:26:45.380
+no, a remote procedural RPC that I'm using
+
+00:26:46.860 --> 00:26:47.360
+for the Red Bull and stuff.
+
+00:26:51.000 --> 00:26:51.200
+And I'm planning to have an Emacs Puppet to
+
+00:26:54.720 --> 00:26:55.220
+provide me the functionality for Org Mode.
+
+00:26:59.380 --> 00:26:59.760
+[Speaker 4]: I know for me, when I write notes,
+
+00:27:01.640 --> 00:27:01.940
+I like to note more than Org Roam just
+
+00:27:06.340 --> 00:27:06.840
+because I feel Org Mode is great and all,
+
+00:27:08.920 --> 00:27:09.060
+but if all my notes are in it,
+
+00:27:10.260 --> 00:27:10.760
+I kind of feel trapped by it.
+
+00:27:14.460 --> 00:27:14.960
+I did the talk journaling in KOutline,
+
+00:27:17.800 --> 00:27:18.040
+and I like that package better for some
+
+00:27:21.040 --> 00:27:21.260
+things and it's like if I want to put like
+
+00:27:24.280 --> 00:27:24.780
+the tags on PDF file names and so it's like
+
+00:27:28.940 --> 00:27:29.100
+Yeah, it's great and all but it's also Is
+
+00:27:31.560 --> 00:27:31.740
+that part of the motivation of wanting to use
+
+00:27:34.620 --> 00:27:35.120
+lamb is so you feel less entrapped by emacs
+
+00:27:38.445 --> 00:27:38.840
+No, I will say I don't no.
+
+00:27:40.620 --> 00:27:41.120
+[Speaker 2]: No, no. I was very happy trapping to Emacs.
+
+00:27:47.100 --> 00:27:47.560
+To be fair. The thing is I don't use Hormel
+
+00:27:48.600 --> 00:27:49.100
+that much. That's just the reality.
+
+00:27:52.120 --> 00:27:52.580
+Org Mode for me is a very good markup
+
+00:27:54.660 --> 00:27:54.810
+language, but not that much really.
+
+00:27:56.920 --> 00:27:57.420
+I know that Org Mode has a lot of people and
+
+00:27:58.740 --> 00:27:59.060
+it's used by a lot of people.
+
+00:28:00.060 --> 00:28:00.560
+And there's very interesting packages.
+
+00:28:03.700 --> 00:28:04.200
+[Speaker 4]: What about org mode versus markdown versus
+
+00:28:05.800 --> 00:28:06.300
+plain text versus latex then?
+
+00:28:08.480 --> 00:28:08.860
+[Speaker 2]: I like org mode because of the Emacs
+
+00:28:10.380 --> 00:28:10.880
+functionality. I think if you take that away,
+
+00:28:15.600 --> 00:28:16.100
+you plain or mode versus Markdown,
+
+00:28:17.720 --> 00:28:18.080
+I don't think there's that much difference,
+
+00:28:19.960 --> 00:28:20.460
+if you take the Emacs functionality away.
+
+00:28:24.560 --> 00:28:24.880
+I like the
+
+00:28:27.260 --> 00:28:27.760
+[Speaker 4]: Yeah. Emacs syntax more than Markdown.
+
+00:28:29.640 --> 00:28:29.900
+Like, for instance, you have the double
+
+00:28:31.720 --> 00:28:31.960
+square brackets, which is simpler for me to
+
+00:28:32.500 --> 00:28:33.000
+look at, but.
+
+00:28:35.820 --> 00:28:36.060
+[Speaker 2]: Yeah, I guess it's a matter of,
+
+00:28:38.400 --> 00:28:38.640
+I mean, we don't have yet a major mode of R
+
+00:28:39.800 --> 00:28:40.300
+mode, which will be quite trivial.
+
+00:28:42.660 --> 00:28:43.160
+Well, you know, a simple syntax highlights,
+
+00:28:46.040 --> 00:28:46.540
+you know, R mode in LEM,
+
+00:28:52.460 --> 00:28:52.960
+because no 1 wrote it.
+
+00:28:55.320 --> 00:28:55.640
+I mean, that's the way with this project,
+
+00:29:00.060 --> 00:29:00.360
+right? If you need people to be motivated to
+
+00:29:04.120 --> 00:29:04.620
+do that. And with LEM,
+
+00:29:06.540 --> 00:29:07.040
+someone asked about the Japanese.
+
+00:29:11.320 --> 00:29:11.820
+I think they're interested about that.
+
+00:29:15.040 --> 00:29:15.420
+LEM does have a thing,
+
+00:29:16.030 --> 00:29:16.095
+[Speaker 0]: If the it would be good.
+
+00:29:16.800 --> 00:29:17.160
+[Speaker 4]: I'd be able to do more,
+
+00:29:18.000 --> 00:29:18.500
+but that's what I
+
+00:29:19.370 --> 00:29:19.870
+[Speaker 0]: was doing.
+
+00:29:22.420 --> 00:29:22.820
+[Speaker 2]: they think True. So, for example,
+
+00:29:24.240 --> 00:29:24.740
+we're using another big fan of...
+
+00:29:27.840 --> 00:29:28.080
+I mean, I know that the main people that may
+
+00:29:30.280 --> 00:29:30.780
+use in the future LEM are EMACLIS people.
+
+00:29:33.080 --> 00:29:33.580
+A lot of them. It's very similar.
+
+00:29:37.540 --> 00:29:37.940
+And Sasaki-san and the LEM community mainly
+
+00:29:43.260 --> 00:29:43.760
+uses Discord for chat and stuff.
+
+00:29:46.980 --> 00:29:47.480
+I mean, we do have matrix,
+
+00:29:48.540 --> 00:29:48.640
+and I should connect to it,
+
+00:29:54.960 --> 00:29:55.320
+by the way. But we mainly use Discord,
+
+00:29:58.080 --> 00:29:58.580
+which I don't think is a good thing.
+
+00:30:01.900 --> 00:30:02.300
+I mean, to have the main communication
+
+00:30:05.020 --> 00:30:05.520
+channels, Discord. Because,
+
+00:30:09.020 --> 00:30:09.520
+well, it's Discord. It's a closed source
+
+00:30:13.180 --> 00:30:13.440
+application that is easy for some people,
+
+00:30:14.340 --> 00:30:14.840
+but for some people it's a tailbreak.
+
+00:30:17.040 --> 00:30:17.080
+[Speaker 0]: are in
+
+00:30:17.580 --> 00:30:18.080
+[Speaker 2]: Especially people that the Emacs community
+
+00:30:20.080 --> 00:30:20.580
+that very like free software.
+
+00:30:22.800 --> 00:30:23.300
+[Speaker 4]: The only good thing about Molesley is it's
+
+00:30:26.000 --> 00:30:26.380
+popular, but as soon as you break out of that
+
+00:30:28.380 --> 00:30:28.520
+mold, all of a sudden it becomes a lot
+
+00:30:30.400 --> 00:30:30.900
+harder. For instance, they don't have...
+
+00:30:33.820 --> 00:30:34.320
+All the third-party clients are unofficial
+
+00:30:37.340 --> 00:30:37.500
+and according to their terms of service they
+
+00:30:40.380 --> 00:30:40.600
+can just can you. Which is not a nice
+
+00:30:44.020 --> 00:30:44.180
+position to be in if you're trying to use it
+
+00:30:47.200 --> 00:30:47.700
+and you wanted to be a moderator using some
+
+00:30:50.600 --> 00:30:51.100
+side tools that weren't Discord.
+
+00:30:55.320 --> 00:30:55.560
+[Speaker 2]: I agree 100% and in fact I'm not a big fan,
+
+00:30:56.400 --> 00:30:56.900
+I don't like Discord.
+
+00:31:03.860 --> 00:31:04.360
+[Speaker 5]: You mentioned the RPC you did between Emacs
+
+00:31:06.200 --> 00:31:06.700
+and the LEM. Do you have it published
+
+00:31:06.720 --> 00:31:07.220
+somewhere?
+
+00:31:13.520 --> 00:31:14.020
+[Speaker 2]: Yes, it's in the LEM project.
+
+00:31:15.820 --> 00:31:16.320
+I'll copy that in the chat.
+
+00:31:19.000 --> 00:31:19.340
+[Speaker 5]: Okay, because I'm always interested in how
+
+00:31:21.560 --> 00:31:22.060
+you do like the communication with other
+
+00:31:24.020 --> 00:31:24.320
+programs with Emacs because that's
+
+00:31:24.320 --> 00:31:24.820
+interesting.
+
+00:31:30.140 --> 00:31:30.640
+[Speaker 2]: I'm only using the porthole package,
+
+00:31:32.460 --> 00:31:32.960
+I'm not writing it from scratch,
+
+00:31:34.340 --> 00:31:34.840
+not that much as a developer.
+
+00:31:37.540 --> 00:31:37.960
+[Speaker 5]: So I don't know this package.
+
+00:31:39.140 --> 00:31:39.640
+Maybe that's the thing I can learn.
+
+00:31:40.840 --> 00:31:41.140
+[Speaker 2]: Oh yeah, probably if you,
+
+00:31:42.360 --> 00:31:42.740
+yeah. Yeah. If you want to,
+
+00:31:43.860 --> 00:31:44.360
+so I didn't see this 1,
+
+00:31:46.420 --> 00:31:46.920
+this package for the RSP,
+
+00:31:48.620 --> 00:31:49.120
+which make is monthly automatically.
+
+00:31:53.200 --> 00:31:53.600
+[Speaker 5]: And how do you do, how do you plan to
+
+00:31:59.180 --> 00:31:59.440
+integrate Org Mode? Because Org Mode needs to
+
+00:31:59.760 --> 00:32:00.260
+work on.
+
+00:32:03.340 --> 00:32:03.540
+[Speaker 2]: This way? Yes, so I'm planning to have like a
+
+00:32:08.260 --> 00:32:08.760
+Emacs puppet and to have like a clone buffer
+
+00:32:11.320 --> 00:32:11.820
+from the buffer that you do in LEM and then
+
+00:32:16.880 --> 00:32:17.380
+the command sent into the Emacs hidden buffer
+
+00:32:19.820 --> 00:32:20.140
+and then the changes go back to LEM to change
+
+00:32:22.660 --> 00:32:23.160
+the buffer of LEM. That's my idea.
+
+00:32:24.960 --> 00:32:25.460
+[Speaker 5]: Okay, that's all. It's interesting.
+
+00:32:28.320 --> 00:32:28.540
+Would be interesting to see what comes from
+
+00:32:28.540 --> 00:32:29.040
+it.
+
+00:32:32.280 --> 00:32:32.780
+[Speaker 2]: It's a bit, it's a hackish 100%.
+
+00:32:35.200 --> 00:32:35.320
+It's not, you have to duplicate the
+
+00:32:36.020 --> 00:32:36.520
+information and stuff,
+
+00:32:38.940 --> 00:32:39.140
+which is, oh, by the way,
+
+00:32:40.320 --> 00:32:40.820
+I'm going to pass the Lemington,
+
+00:32:43.380 --> 00:32:43.880
+which is the name of the RSP clone.
+
+00:32:45.980 --> 00:32:46.480
+Sorry, the integration with Emacs,
+
+00:32:48.900 --> 00:32:49.400
+which is LEM with a mustache.
+
+00:32:54.400 --> 00:32:54.600
+[Speaker 4]: They had good news where it would do the same
+
+00:32:56.360 --> 00:32:56.860
+thing, where it would open up a slave Emacs,
+
+00:33:00.020 --> 00:33:00.520
+because it was such a performance hog for
+
+00:33:02.140 --> 00:33:02.640
+retrieving all the emails.
+
+00:33:06.940 --> 00:33:07.360
+[Speaker 2]: No. I mean, Emacs have a server,
+
+00:33:08.559 --> 00:33:08.860
+right? I can, in fact,
+
+00:33:11.200 --> 00:33:11.700
+I'm using that for, I'm already puppeting.
+
+00:33:13.340 --> 00:33:13.620
+Well, not puppeting. I'm already using
+
+00:33:15.700 --> 00:33:16.200
+Maggots. So I have this.
+
+00:33:17.400 --> 00:33:17.900
+Actually, let me copy.
+
+00:33:25.600 --> 00:33:25.920
+I have this, which is usually a little bit,
+
+00:33:28.080 --> 00:33:28.420
+I'm launching the Emacs daemon and then I'm
+
+00:33:31.500 --> 00:33:31.740
+launching Leviton. And then this is the kill
+
+00:33:32.300 --> 00:33:32.700
+and this is the status,
+
+00:33:33.440 --> 00:33:33.940
+which is basically saying,
+
+00:33:36.680 --> 00:33:37.180
+run this and this is this,
+
+00:33:42.040 --> 00:33:42.540
+which is run maggot in this file.
+
+00:33:43.940 --> 00:33:44.340
+If you put it side by side,
+
+00:33:48.680 --> 00:33:48.800
+you will check instantly that this is the
+
+00:33:50.900 --> 00:33:51.400
+buffer directory, LEM home,
+
+00:33:54.020 --> 00:33:54.520
+and then the current file.
+
+00:33:58.860 --> 00:33:59.360
+Because I'm launching it with the file.
+
+00:34:03.940 --> 00:34:04.240
+So buffer directory, which is the directory
+
+00:34:09.239 --> 00:34:09.739
+of the buffer. So I'm already using maggot as
+
+00:34:13.600 --> 00:34:14.080
+a tool outside of LEM,
+
+00:34:14.960 --> 00:34:15.060
+because I really like maggot.
+
+00:34:16.920 --> 00:34:17.420
+And this is very easy to check.
+
+00:34:22.719 --> 00:34:23.219
+Launch Emacs daemon. Okay.
+
+00:34:28.580 --> 00:34:29.080
+And then I go to local projects.
+
+00:34:31.719 --> 00:34:32.219
+Let's go to another 1 that is not LEM.
+
+00:34:37.199 --> 00:34:37.400
+[Speaker 4]: You actually have weird ideas like running it
+
+00:34:39.639 --> 00:34:39.860
+in daemon mode so you don't ever have to
+
+00:34:40.840 --> 00:34:41.340
+restart it or the images,
+
+00:34:43.100 --> 00:34:43.600
+I guess, that LEM has.
+
+00:34:46.800 --> 00:34:47.300
+[Speaker 2]: LEM does not have this kind of,
+
+00:34:53.719 --> 00:34:54.060
+I will call it, it doesn't have like a demon
+
+00:34:56.280 --> 00:34:56.780
+mode, so you have control separately,
+
+00:34:58.860 --> 00:34:59.360
+but keep in mind that LEM,
+
+00:35:01.260 --> 00:35:01.680
+it's a common list program.
+
+00:35:03.340 --> 00:35:03.840
+So if you use slime or Sly,
+
+00:35:10.080 --> 00:35:10.580
+you can easily connect to them to hack on it.
+
+00:35:12.380 --> 00:35:12.880
+[Speaker 4]: ever use that functionality,
+
+00:35:14.060 --> 00:35:14.560
+like using it from another computer?
+
+00:35:16.400 --> 00:35:16.900
+[Speaker 2]: Do you Another computer,
+
+00:35:17.600 --> 00:35:18.100
+I think the same computer,
+
+00:35:21.460 --> 00:35:21.620
+or maybe Sage, but yeah,
+
+00:35:21.820 --> 00:35:22.320
+it's very...
+
+00:35:24.520 --> 00:35:25.020
+[Speaker 4]: Or from like your window,
+
+00:35:26.640 --> 00:35:27.140
+if you were using the window...
+
+00:35:28.260 --> 00:35:28.580
+I can't remember the name of the window
+
+00:35:30.100 --> 00:35:30.600
+manager. Or if you were using...
+
+00:35:36.460 --> 00:35:36.960
+What? Yeah, yeah. Or using like stump,
+
+00:35:40.680 --> 00:35:40.760
+calling it from like stump WM or how often do
+
+00:35:41.500 --> 00:35:42.000
+you use that REPL?
+
+00:35:43.740 --> 00:35:43.940
+[Speaker 2]: SPCL? No. ThumbWM? I use it quite a lot.
+
+00:35:44.700 --> 00:35:45.200
+I connect to a museum,
+
+00:35:49.400 --> 00:35:49.760
+some WM right now, and I use LEM to connect
+
+00:35:52.240 --> 00:35:52.740
+to it, but I was using Emacs before.
+
+00:35:55.800 --> 00:35:55.960
+And you can use Sly or Slime to connect to
+
+00:35:58.260 --> 00:35:58.520
+LEM. So the thing that is in Common List
+
+00:36:00.900 --> 00:36:01.400
+makes it this kind of already out-of-the-box
+
+00:36:04.000 --> 00:36:04.280
+connectivity between different...
+
+00:36:06.960 --> 00:36:07.460
+[Speaker 4]: How many window managers have you used?
+
+00:36:11.120 --> 00:36:11.400
+I've used that before.
+
+00:36:13.440 --> 00:36:13.780
+I've also used, like right now I'm using
+
+00:36:14.720 --> 00:36:15.220
+Sway. I've used Xmonad,
+
+00:36:16.260 --> 00:36:16.760
+DWM.
+
+00:36:23.040 --> 00:36:23.540
+[Speaker 2]: This is awesome. What is the other 1?
+
+00:36:25.680 --> 00:36:26.180
+I can't remember the name.
+
+00:36:27.900 --> 00:36:28.380
+But it was like a few years ago.
+
+00:36:30.800 --> 00:36:31.020
+I've been doing some DWM for like the last
+
+00:36:36.260 --> 00:36:36.760
+[Speaker 4]: I remember that. Go ahead.
+
+00:36:37.740 --> 00:36:38.240
+[Speaker 2]: year, I think. Or 3. know,
+
+00:36:41.940 --> 00:36:42.440
+it's that I was... I don't know.
+
+00:36:43.440 --> 00:36:43.520
+[Speaker 0]: I don't a couple
+
+00:36:44.040 --> 00:36:44.540
+[Speaker 2]: I'd like to have of days of my...
+
+00:36:48.280 --> 00:36:48.400
+[Speaker 4]: I remember that that window manager seemed to
+
+00:36:53.300 --> 00:36:53.600
+have some unique ideas that weren't
+
+00:36:56.280 --> 00:36:56.780
+necessarily available on like EWM and XMLNAD.
+
+00:37:02.540 --> 00:37:03.040
+[Speaker 2]: So SoundLM, it's an interesting project.
+
+00:37:05.140 --> 00:37:05.460
+But for example, I'll change...
+
+00:37:06.720 --> 00:37:07.080
+So I don't have in this computer,
+
+00:37:08.240 --> 00:37:08.680
+but in my other computer,
+
+00:37:13.840 --> 00:37:14.320
+I change the mod line or bar,
+
+00:37:18.220 --> 00:37:18.720
+top bar, whatever, because the ThunderLVM
+
+00:37:21.500 --> 00:37:22.000
+doesn't only update it when you click,
+
+00:37:25.280 --> 00:37:25.680
+or you do some events or happen 1 minute.
+
+00:37:27.560 --> 00:37:27.980
+So you can see here, this is not changing
+
+00:37:28.320 --> 00:37:28.820
+until I click.
+
+00:37:33.500 --> 00:37:33.720
+[Speaker 0]: That's it.
+
+00:37:34.360 --> 00:37:34.600
+[Speaker 3]: AUDIENCE 1 Matthew, sorry.
+
+00:37:36.160 --> 00:37:36.660
+I have a quick question for Matthew.
+
+00:37:43.520 --> 00:37:43.640
+So is your talk going to be posted or did you
+
+00:37:47.420 --> 00:37:47.920
+[Speaker 4]: Go ahead. I gave them a recording.
+
+00:37:50.140 --> 00:37:50.640
+My talk was the K outline for journaling
+
+00:37:53.080 --> 00:37:53.240
+[Speaker 3]: give it live? right right it was I woke up
+
+00:37:54.020 --> 00:37:54.520
+too late for it Sorry,
+
+00:37:58.420 --> 00:37:58.920
+so I came in and I just saw Bob Weiner
+
+00:38:03.240 --> 00:38:03.340
+answering questions So is your talk going to
+
+00:38:06.560 --> 00:38:07.060
+be on the page for your talk?
+
+00:38:07.740 --> 00:38:07.960
+I don't
+
+00:38:08.560 --> 00:38:09.060
+[Speaker 0]: see it there.
+
+00:38:11.940 --> 00:38:12.380
+[Speaker 4]: I could give you a link to it,
+
+00:38:17.480 --> 00:38:17.640
+because I had, I hosted it on Mega to give it
+
+00:38:18.840 --> 00:38:19.020
+to them, because when I emailed it,
+
+00:38:22.080 --> 00:38:22.200
+[Speaker 3]: Oh, okay. Is it
+
+00:38:22.360 --> 00:38:22.840
+[Speaker 4]: it didn't work. on a monkey?
+
+00:38:23.600 --> 00:38:24.100
+Download and watch it.
+
+00:38:29.440 --> 00:38:29.920
+I'm probably going to post it on YouTube
+
+00:38:33.600 --> 00:38:33.760
+later. I, I had my face record with it,
+
+00:38:36.020 --> 00:38:36.520
+but I never got it edited together in time
+
+00:38:40.320 --> 00:38:40.640
+[Speaker 3]: Okay, if you could if you can put the link
+
+00:38:43.140 --> 00:38:43.340
+onto the onto the ether pad or something or
+
+00:38:46.000 --> 00:38:46.160
+onto the wiki then then I can find it and
+
+00:38:49.920 --> 00:38:50.140
+check it out. All right,
+
+00:38:53.040 --> 00:38:53.480
+thanks. Sorry to interrupt your time,
+
+00:38:56.300 --> 00:38:56.440
+Fermin, but I figure we're heavily into the
+
+00:38:57.260 --> 00:38:57.760
+break anyways. FERMIN GENZIERIA-CHAPMANI
+
+00:39:00.920 --> 00:39:01.160
+[Speaker 2]: No problem. I'm in an EMAX conference talking
+
+00:39:02.860 --> 00:39:03.040
+about all that I mean I'm already doing
+
+00:39:04.280 --> 00:39:04.780
+blasphemy so I
+
+00:39:24.600 --> 00:39:24.800
+think that's oh yeah notes so the thing is
+
+00:39:26.640 --> 00:39:27.140
+then as my point of view,
+
+00:39:28.860 --> 00:39:29.360
+and the point of view probably of Sasaki-san,
+
+00:39:30.240 --> 00:39:30.740
+just a moment, I think,
+
+00:39:34.960 --> 00:39:35.220
+is very focused on an IDE more than a
+
+00:39:40.580 --> 00:39:41.080
+node-taking editor. More like an integrated
+
+00:39:41.540 --> 00:39:42.040
+development environment.
+
+00:39:45.040 --> 00:39:45.540
+So node is like a second thing.
+
+00:39:51.500 --> 00:39:52.000
+So not exactly the main focus.
+
+00:39:54.440 --> 00:39:54.780
+And I know that Emacs does have a very strong
+
+00:39:58.440 --> 00:39:58.940
+community of Ormode users that use Emacs for
+
+00:40:00.140 --> 00:40:00.244
+Ormode, which is the killer feature,
+
+00:40:01.080 --> 00:40:01.360
+1 of I'll do a feature.
+
+00:40:04.456 --> 00:40:04.956
+I'll do a feature of Emacs.
+
+00:40:09.160 --> 00:40:09.660
+So I'm not the maintainer of porthole.
+
+00:40:20.220 --> 00:40:20.580
+I'm sorry. I did add it to so I don't
+
+00:40:22.700 --> 00:40:23.040
+maintain the remote. I'm sorry,
+
+00:40:27.400 --> 00:40:27.840
+I'll pothole the USB. I'm only using it on
+
+00:40:31.120 --> 00:40:31.620
+the Lamington. I cannot change anything.
+
+00:40:39.520 --> 00:40:39.760
+[Speaker 4]: What are some interesting things you have
+
+00:40:40.760 --> 00:40:41.260
+with your window manager?
+
+00:40:43.780 --> 00:40:44.280
+I do have elsewhere.
+
+00:40:49.400 --> 00:40:49.600
+[Speaker 2]: I can connect to it and hack it from my
+
+00:40:53.040 --> 00:40:53.540
+editor, which I think is really fun.
+
+00:40:56.820 --> 00:40:57.220
+The way I can write, so I wrote a few
+
+00:40:58.500 --> 00:40:59.000
+packages for Soundallium.
+
+00:41:06.740 --> 00:41:07.240
+So 1 of them is Proton,
+
+00:41:10.360 --> 00:41:10.860
+which basically launches like a...
+
+00:41:18.480 --> 00:41:18.900
+So Proton is like this wine thing that Valve
+
+00:41:22.000 --> 00:41:22.500
+[Speaker 4]: Yeah, I'm a user.
+
+00:41:24.140 --> 00:41:24.640
+[Speaker 2]: did. OK, so this basically,
+
+00:41:26.480 --> 00:41:26.980
+you have like a list of,
+
+00:41:32.280 --> 00:41:32.540
+let me check. No, we're just,
+
+00:41:38.780 --> 00:41:39.020
+sorry. This, So these all games are bought by
+
+00:41:41.280 --> 00:41:41.780
+me. They're not pirates in any way.
+
+00:41:45.800 --> 00:41:46.300
+I can use this to to launch it.
+
+00:41:50.700 --> 00:41:51.200
+[Speaker 4]: Was that Dmenu or was that StumpWM menu?
+
+00:41:54.800 --> 00:41:55.240
+[Speaker 2]: This is Dmenu. So I have,
+
+00:42:02.300 --> 00:42:02.560
+I also contribute the Dmenu integration into
+
+00:42:05.820 --> 00:42:06.320
+StumwM. So I use Dmenu.
+
+00:42:07.480 --> 00:42:07.980
+So like this, right?
+
+00:42:13.300 --> 00:42:13.800
+[Speaker 4]: Yeah that's pretty cool.
+
+00:42:15.720 --> 00:42:15.940
+You don't know how nice those things are
+
+00:42:16.880 --> 00:42:17.380
+until you start using those.
+
+00:42:21.280 --> 00:42:21.780
+[Speaker 2]: The menu is very interesting and very...
+
+00:42:24.060 --> 00:42:24.560
+Also I was using RoFi,
+
+00:42:25.680 --> 00:42:26.000
+but...
+
+00:42:29.100 --> 00:42:29.540
+[Speaker 4]: I was also more... The other thing I was more
+
+00:42:31.240 --> 00:42:31.740
+mentioning is that also,
+
+00:42:32.860 --> 00:42:33.340
+being able to use D-Menu,
+
+00:42:34.800 --> 00:42:35.300
+but being able to just have keyboard
+
+00:42:38.680 --> 00:42:39.180
+oriented? Everything fuzzy search narrowed
+
+00:42:45.420 --> 00:42:45.480
+and No tabs no status bars like all of a
+
+00:42:47.160 --> 00:42:47.600
+sudden your mental model on how your computer
+
+00:42:51.420 --> 00:42:51.560
+operates goes through the roof and a lot of
+
+00:42:57.900 --> 00:42:58.400
+Emacs users Know what that is like Especially
+
+00:43:01.240 --> 00:43:01.740
+In conjunction with a window manager?
+
+00:43:06.740 --> 00:43:07.200
+[Speaker 2]: Yeah, I think so. I remember when I was...
+
+00:43:11.320 --> 00:43:11.820
+So for me, I tried the Emacs window manager,
+
+00:43:16.840 --> 00:43:17.340
+but it wasn't for me. Having a single thread
+
+00:43:18.460 --> 00:43:18.960
+window manager is scary.
+
+00:43:22.500 --> 00:43:22.840
+And also games and some stuff wasn't working
+
+00:43:25.040 --> 00:43:25.240
+correctly, which it makes sense in some
+
+00:43:27.340 --> 00:43:27.840
+regards, using Emacs for window manager.
+
+00:43:30.660 --> 00:43:31.160
+Oh
+
+00:43:34.480 --> 00:43:34.980
+[Speaker 4]: I've used it before I found that it wasn't as
+
+00:43:39.240 --> 00:43:39.740
+like it. It's not as bad in practice because
+
+00:43:43.020 --> 00:43:43.260
+The paper cuts you don't like to hit them
+
+00:43:45.800 --> 00:43:46.000
+every day So you make sure So you make sure
+
+00:43:48.080 --> 00:43:48.400
+your Emacs config is a lot nicer and doesn't
+
+00:43:51.040 --> 00:43:51.300
+have those slowdowns. Or you avoid those
+
+00:43:54.440 --> 00:43:54.780
+things. It forces you to make your Emacs
+
+00:43:59.440 --> 00:43:59.940
+config a lot more robust to speed.
+
+00:44:02.040 --> 00:44:02.300
+[Speaker 2]: Yeah, yeah. That's true,
+
+00:44:04.200 --> 00:44:04.440
+yeah. The thing, yeah,
+
+00:44:05.600 --> 00:44:06.020
+but still, I don't know,
+
+00:44:08.680 --> 00:44:09.060
+[Speaker 4]: You'll still get the paper cuts,
+
+00:44:09.060 --> 00:44:09.560
+but...
+
+00:44:12.360 --> 00:44:12.660
+[Speaker 2]: like... Yeah, and my experience was not
+
+00:44:16.500 --> 00:44:16.880
+great. I'm not a person,
+
+00:44:17.860 --> 00:44:18.360
+like, I don't want to have...
+
+00:44:19.960 --> 00:44:20.460
+Not with LEM or Emacs.
+
+00:44:22.660 --> 00:44:23.160
+I like to have different programs.
+
+00:44:25.840 --> 00:44:26.120
+I don't want to like, I never was in like
+
+00:44:28.040 --> 00:44:28.540
+Emacs or you know, only Emacs.
+
+00:44:30.480 --> 00:44:30.800
+I really love Emacs, GNU Emacs,
+
+00:44:33.920 --> 00:44:34.140
+but only Emacs? No, no,
+
+00:44:35.300 --> 00:44:35.540
+I like my browser, I like my,
+
+00:44:37.500 --> 00:44:38.000
+you know, my Windows Manager,
+
+00:44:41.280 --> 00:44:41.780
+my, you know, I wasn't Emacs only.
+
+00:44:45.520 --> 00:44:46.000
+Emacs is my OS. Some people are,
+
+00:44:48.600 --> 00:44:49.100
+which is good. Different kind of a...
+
+00:44:51.600 --> 00:44:52.100
+I have to say that I come from Vim,
+
+00:44:57.340 --> 00:44:57.720
+like a long time ago. But I come from Vim,
+
+00:44:58.660 --> 00:44:58.980
+so I'm using Evil Mode.
+
+00:45:00.280 --> 00:45:00.780
+And I maybe have this kind of a...
+
+00:45:05.700 --> 00:45:06.200
+Yeah. So regarding Summoner.vm,
+
+00:45:10.080 --> 00:45:10.580
+it's... I like it because it's common Lisp,
+
+00:45:13.940 --> 00:45:14.440
+but it don't have some,
+
+00:45:18.120 --> 00:45:18.620
+this, I removed this. So I'm using another
+
+00:45:21.040 --> 00:45:21.340
+model line because the model line is not
+
+00:45:24.440 --> 00:45:24.720
+great. Everything else is a little bit weird
+
+00:45:28.940 --> 00:45:29.440
+because you have frames similar to Emacs.
+
+00:45:33.560 --> 00:45:34.060
+You have a frame. You have this window,
+
+00:45:35.600 --> 00:45:36.100
+and then there's no nothing here.
+
+00:45:37.700 --> 00:45:38.100
+[Speaker 4]: Yeah, I've used it before.
+
+00:45:39.720 --> 00:45:40.220
+That was definitely weird.
+
+00:45:41.680 --> 00:45:42.180
+It's also nice to be able to just...
+
+00:45:43.660 --> 00:45:44.160
+Can't you put multiple windows?
+
+00:45:46.100 --> 00:45:46.600
+Can't you duplicate windows?
+
+00:45:48.040 --> 00:45:48.540
+Show the same window in 2 frames?
+
+00:45:48.560 --> 00:45:49.060
+NIGEL
+
+00:45:51.020 --> 00:45:51.520
+[Speaker 2]: GANSZELA-WALSH Never tried that.
+
+00:45:54.400 --> 00:45:54.900
+Never occurred to me that.
+
+00:45:57.840 --> 00:45:58.020
+I don't know. Never tried that,
+
+00:46:01.480 --> 00:46:01.980
+to be honest. Let me check.
+
+00:46:07.280 --> 00:46:07.780
+No idea. Item? I think so.
+
+00:46:10.080 --> 00:46:10.320
+Because when you try to,
+
+00:46:11.520 --> 00:46:11.980
+at least not in an easy way.
+
+00:46:13.940 --> 00:46:14.260
+When you try to, so if I try to put a window
+
+00:46:16.020 --> 00:46:16.520
+here, let me move it so it,
+
+00:46:20.060 --> 00:46:20.540
+and if I try to like, so it's,
+
+00:46:21.680 --> 00:46:21.890
+yeah, no other window.
+
+00:46:24.100 --> 00:46:24.360
+[Speaker 4]: So can you open the, what is that,
+
+00:46:25.080 --> 00:46:25.440
+discord or your browser?
+
+00:46:26.840 --> 00:46:27.340
+Could you open that in both your frames?
+
+00:46:34.620 --> 00:46:35.120
+[Speaker 2]: I can I Side by side, but not the same
+
+00:46:37.740 --> 00:46:37.920
+[Speaker 0]: I mean I do I can I can have I know
+
+00:46:38.400 --> 00:46:38.600
+[Speaker 4]: can't your frames? 2 browsers you can do that
+
+00:46:42.600 --> 00:46:43.100
+[Speaker 2]: browser I never occurred to me that,
+
+00:46:46.300 --> 00:46:46.800
+[Speaker 4]: in DWM? You can't do that in XMLNet,
+
+00:46:48.560 --> 00:46:49.060
+at least I don't know what configuration
+
+00:46:50.820 --> 00:46:51.020
+you'd have to do to get to be able to do that
+
+00:46:51.140 --> 00:46:51.640
+in XMONAD.
+
+00:46:54.060 --> 00:46:54.560
+[Speaker 2]: wow. Interesting. Maybe you can.
+
+00:46:57.700 --> 00:46:58.200
+I never tried. Maybe you can?
+
+00:47:03.240 --> 00:47:03.640
+No idea. The interesting thing that I never
+
+00:47:05.860 --> 00:47:06.360
+use is that floating windows.
+
+00:47:09.520 --> 00:47:09.960
+Never use floating windows,
+
+00:47:13.480 --> 00:47:13.780
+but normal windows. You know,
+
+00:47:17.780 --> 00:47:18.160
+not. And SoundWM does have a weird support
+
+00:47:24.720 --> 00:47:25.220
+for it. Now it works. But I don't like it.
+
+00:47:26.680 --> 00:47:27.180
+For me, it was a little bit rough,
+
+00:47:29.480 --> 00:47:29.980
+the use of floating windows in SoundWM.
+
+00:47:32.480 --> 00:47:32.980
+I think they're way better now.
+
+00:47:36.580 --> 00:47:37.080
+I think, but yeah, I don't use it so...
+
+00:47:40.600 --> 00:47:41.100
+But there is.
+
+00:47:43.520 --> 00:47:43.940
+[Speaker 4]: You know, for me with the,
+
+00:47:45.060 --> 00:47:45.480
+like, Emacs doing everything,
+
+00:47:46.880 --> 00:47:47.380
+it's like, you got like Emacs,
+
+00:47:50.320 --> 00:47:50.740
+you got shell, and then you got the gooey
+
+00:47:56.520 --> 00:47:56.760
+Wild West. Yeah. Like,
+
+00:47:58.940 --> 00:47:59.440
+with Emacs, I know, I'll generally get,
+
+00:48:01.280 --> 00:48:01.780
+oh, this is going to be configured in?
+
+00:48:04.160 --> 00:48:04.660
+It's either gonna be shell script,
+
+00:48:06.180 --> 00:48:06.340
+Python or Emacs. Oh wait,
+
+00:48:07.000 --> 00:48:07.500
+no, it's gonna be Emacs.
+
+00:48:09.680 --> 00:48:10.180
+Variable's gonna be written in SecQ,
+
+00:48:10.380 --> 00:48:10.880
+period.
+
+00:48:16.640 --> 00:48:17.140
+[Speaker 2]: Well, I don't use too much scripting,
+
+00:48:18.260 --> 00:48:18.540
+but I'd like to, for example,
+
+00:48:21.540 --> 00:48:22.040
+I had to do a, so the automatic installer
+
+00:48:26.000 --> 00:48:26.500
+for, for Debian base, Debian stuff for Linux
+
+00:48:30.340 --> 00:48:30.840
+for, for LEM. I was thinking of doing in bash
+
+00:48:32.520 --> 00:48:33.020
+and I say, I don't want to do it in Bash.
+
+00:48:35.380 --> 00:48:35.880
+So I just did it in SVC and Commodisp,
+
+00:48:37.660 --> 00:48:38.100
+which does have like a scripting feature.
+
+00:48:40.920 --> 00:48:41.040
+You can put a script and it will create your
+
+00:48:41.160 --> 00:48:41.660
+own script.
+
+00:48:45.860 --> 00:48:46.280
+[Speaker 4]: 1 of the main people behind Next,
+
+00:48:50.760 --> 00:48:50.880
+he did a talk on using Common Lisp as a
+
+00:48:51.720 --> 00:48:52.220
+replacement for a shell.
+
+00:48:58.700 --> 00:48:59.200
+[Speaker 2]: Yes, it was... I know him.
+
+00:49:00.680 --> 00:49:01.180
+I know that he exists.
+
+00:49:04.600 --> 00:49:04.900
+Next, I think it's a main maintainer of Nix,
+
+00:49:09.140 --> 00:49:09.620
+[Speaker 4]: Yeah, although his website's kind of,
+
+00:49:10.380 --> 00:49:10.880
+I think he took it down.
+
+00:49:12.280 --> 00:49:12.780
+[Speaker 2]: Ambrevar. Yeah, I think he,
+
+00:49:14.480 --> 00:49:14.980
+yeah, he took it down.
+
+00:49:17.360 --> 00:49:17.680
+[Speaker 4]: So if you want to, you can look at it in Time
+
+00:49:17.680 --> 00:49:18.180
+Machine.
+
+00:49:23.940 --> 00:49:24.440
+[Speaker 2]: Yeah, I do have that article in my bookmarks,
+
+00:49:26.740 --> 00:49:27.240
+I think, somewhere. I remember reading that.
+
+00:49:30.360 --> 00:49:30.840
+So also, I would like to keep separated
+
+00:49:32.880 --> 00:49:33.380
+things in that way to have shell and then
+
+00:49:37.940 --> 00:49:38.440
+Emacs or LEM. Like for Emacs I use Viter.
+
+00:49:40.760 --> 00:49:41.260
+I don't like that it has different,
+
+00:49:41.760 --> 00:49:42.260
+you know.
+
+00:49:44.900 --> 00:49:45.060
+[Speaker 4]: On the same time though,
+
+00:49:46.960 --> 00:49:47.120
+I also don't like my terminal not to be able
+
+00:49:52.340 --> 00:49:52.600
+to click URLs and I like I like my terminal
+
+00:49:54.560 --> 00:49:55.060
+to have history and you know to scroll
+
+00:49:58.040 --> 00:49:58.200
+position copy paste You can do some of that
+
+00:50:00.020 --> 00:50:00.160
+stuff, but you know how that stuff go on the
+
+00:50:01.960 --> 00:50:02.080
+killer ring I kind of view it as like an
+
+00:50:02.800 --> 00:50:03.300
+alternative to shell.
+
+00:50:06.940 --> 00:50:07.080
+[Speaker 2]: Fair enough, but I think when some for my
+
+00:50:08.720 --> 00:50:09.220
+terminal, I only use it for navigate,
+
+00:50:11.280 --> 00:50:11.780
+remove stuff, so basic stuff.
+
+00:50:14.280 --> 00:50:14.640
+When I have to like, I don't know,
+
+00:50:17.640 --> 00:50:18.140
+edit something, just open the...
+
+00:50:22.120 --> 00:50:22.400
+[Speaker 4]: I like to use completion and narrowing to
+
+00:50:24.480 --> 00:50:24.720
+find my files. I kind of wish I could do that
+
+00:50:26.320 --> 00:50:26.600
+[Speaker 0]: on the shell or like if you use
+
+00:50:27.400 --> 00:50:27.640
+[Speaker 4]: more D-Menu to do that.
+
+00:50:28.440 --> 00:50:28.760
+That would be, I'm sure,
+
+00:50:28.760 --> 00:50:29.260
+nicer.
+
+00:50:38.140 --> 00:50:38.240
+[Speaker 2]: There's a lot of tools for terminals to do
+
+00:50:39.800 --> 00:50:39.880
+that, right? But you have to configure all of
+
+00:50:41.580 --> 00:50:41.780
+them. Beam users are very aware of those
+
+00:50:46.980 --> 00:50:47.300
+tools. You know, having very good fuzzy
+
+00:50:49.240 --> 00:50:49.440
+finding of files and then all by the
+
+00:50:53.680 --> 00:50:54.100
+terminal. I do have a friend who is a user of
+
+00:50:56.820 --> 00:50:57.320
+the Forbidden Editor, he's good,
+
+00:51:01.900 --> 00:51:02.400
+that does have a lot of small,
+
+00:51:09.480 --> 00:51:09.980
+like fuzzy finding, and so complete commands,
+
+00:51:12.240 --> 00:51:12.740
+and call those images in the terminal,
+
+00:51:14.300 --> 00:51:14.800
+all sorts of crazy stuff.
+
+00:51:16.120 --> 00:51:16.620
+That I think are not overkill,
+
+00:51:20.380 --> 00:51:20.560
+but I mean, if you want to use it,
+
+00:51:29.540 --> 00:51:30.040
+go ahead. So yeah. The thing is that,
+
+00:51:32.360 --> 00:51:32.860
+So trickling back a little bit to LEM,
+
+00:51:35.600 --> 00:51:35.860
+I think an interesting thought that I have
+
+00:51:37.280 --> 00:51:37.780
+about LEM and I can do Emacs.
+
+00:51:40.680 --> 00:51:41.180
+Not now, because LEM is a very small,
+
+00:51:43.740 --> 00:51:44.240
+like literally people,
+
+00:51:46.000 --> 00:51:46.500
+at least developers and users,
+
+00:51:50.280 --> 00:51:50.780
+I don't know, maybe 10 less.
+
+00:51:56.780 --> 00:51:57.280
+But people may think, split the community,
+
+00:51:58.740 --> 00:51:58.900
+right? That's the main thing that should come
+
+00:51:59.960 --> 00:52:00.460
+to my mind, split the community,
+
+00:52:01.840 --> 00:52:02.140
+maybe you, because that's true.
+
+00:52:04.000 --> 00:52:04.280
+I mean, I'm not developing that much in Nui
+
+00:52:06.260 --> 00:52:06.760
+MacLisp because I'm developing them.
+
+00:52:12.080 --> 00:52:12.580
+That's not that I'm a force that you might
+
+00:52:13.360 --> 00:52:13.860
+think exists or anything,
+
+00:52:17.220 --> 00:52:17.400
+but you know, you're splitting a very small
+
+00:52:21.600 --> 00:52:21.760
+community. Not that LEM wants to do that or
+
+00:52:24.160 --> 00:52:24.360
+anything, or will be able to in any way,
+
+00:52:25.280 --> 00:52:25.780
+but you know what I mean.
+
+00:52:32.360 --> 00:52:32.780
+I thought about that, And I think it's an
+
+00:52:40.600 --> 00:52:40.800
+interesting concern. But that concern also
+
+00:52:42.180 --> 00:52:42.680
+stops innovation in some way.
+
+00:52:46.960 --> 00:52:47.460
+[Speaker 4]: I think you can, if you look at the example
+
+00:52:50.200 --> 00:52:50.680
+of how many EMAX talks are related to
+
+00:52:54.760 --> 00:52:54.960
+knowledge management and not all and like for
+
+00:52:57.840 --> 00:52:58.100
+instance denote and Orgrim don't really work
+
+00:53:01.740 --> 00:53:01.880
+together all that well they split the
+
+00:53:03.740 --> 00:53:03.960
+community so to say I don't think they make
+
+00:53:04.720 --> 00:53:05.220
+it weaker at all, though.
+
+00:53:08.560 --> 00:53:08.800
+I think you were saying competition is good,
+
+00:53:10.000 --> 00:53:10.500
+but yeah, competition is good.
+
+00:53:12.100 --> 00:53:12.360
+[Speaker 2]: Yeah, I agree on that.
+
+00:53:13.280 --> 00:53:13.780
+I want to put it in the...
+
+00:53:15.400 --> 00:53:15.900
+But, you know, I'm doing the devil's advocate
+
+00:53:18.252 --> 00:53:18.271
+[Speaker 0]: something, that's... The developer gates in
+
+00:53:18.308 --> 00:53:18.327
+this regard. Like
+
+00:53:18.327 --> 00:53:18.346
+[Speaker 2]: in this regard. If someone wants to say if
+
+00:53:19.280 --> 00:53:19.780
+someone wants to like say something that
+
+00:53:22.920 --> 00:53:23.160
+maybe, you know, because some people still
+
+00:53:30.800 --> 00:53:30.940
+remember the Emacs versus X Emacs thing in
+
+00:53:34.860 --> 00:53:35.360
+the past, you know, that the split of the and
+
+00:53:38.100 --> 00:53:38.240
+That was good in some way but also bad in
+
+00:53:39.800 --> 00:53:39.960
+others like the compatibility was a little
+
+00:53:42.560 --> 00:53:43.040
+bit of a hell You know at the end Emacs
+
+00:53:46.160 --> 00:53:46.440
+failed, no Emacs But at that time it wasn't
+
+00:53:50.140 --> 00:53:50.500
+that clear and some people like it wasn't
+
+00:53:53.200 --> 00:53:53.360
+there. And I can understand that kind of a
+
+00:53:53.360 --> 00:53:53.860
+feeling.
+
+00:53:58.820 --> 00:53:59.040
+[Speaker 4]: Well sometimes the steps forward you end up
+
+00:54:02.640 --> 00:54:02.760
+going Like you're on a hill and you want to
+
+00:54:05.820 --> 00:54:06.000
+[Speaker 0]: the way the path to get up to
+
+00:54:06.440 --> 00:54:06.720
+[Speaker 4]: get to a higher hill, but that higher hill
+
+00:54:10.920 --> 00:54:11.280
+goes down and up. It doesn't mean that even
+
+00:54:12.240 --> 00:54:12.600
+if you know you're going down,
+
+00:54:13.840 --> 00:54:14.340
+it doesn't mean that it was a mistake.
+
+00:54:19.740 --> 00:54:20.020
+[Speaker 2]: Okay, fair enough. And also another
+
+00:54:22.120 --> 00:54:22.360
+interesting thing that I want to envision in
+
+00:54:25.520 --> 00:54:25.720
+the future, if I have time or someone wants
+
+00:54:28.400 --> 00:54:28.740
+to help me with, is I want them to have
+
+00:54:30.240 --> 00:54:30.740
+different language for extension,
+
+00:54:32.560 --> 00:54:33.060
+different Lisp for extension,
+
+00:54:36.340 --> 00:54:36.840
+not only common Lisp, but Scheme closure.
+
+00:54:39.680 --> 00:54:40.080
+And maybe not EmacLisp probably,
+
+00:54:46.500 --> 00:54:47.000
+[Speaker 4]: that what Guile Emacs is trying to do?
+
+00:54:47.860 --> 00:54:48.080
+[Speaker 2]: but yeah. And funny enough- Isn't Guile Emacs
+
+00:54:50.060 --> 00:54:50.560
+tried to add Guile support to,
+
+00:54:52.040 --> 00:54:52.540
+but Guile is not scheme.
+
+00:54:53.560 --> 00:54:53.800
+Well, it's kind of scheme,
+
+00:54:54.440 --> 00:54:54.940
+but it's not all schemes,
+
+00:54:58.580 --> 00:54:58.780
+which is, you know, and it was just to
+
+00:55:02.540 --> 00:55:03.040
+replace EmacLisp with Gile.
+
+00:55:06.940 --> 00:55:07.260
+You have 2 both. It was similar in that way,
+
+00:55:12.100 --> 00:55:12.340
+but the thing is, Common Lisp does have a lot
+
+00:55:12.900 --> 00:55:13.220
+of interesting things.
+
+00:55:16.120 --> 00:55:16.620
+So someone wrote a closure in Common Lisp.
+
+00:55:20.640 --> 00:55:21.140
+Which is called Cloture.
+
+00:55:29.720 --> 00:55:29.860
+Someone wrote, well it's on the way but it's
+
+00:55:35.440 --> 00:55:35.740
+getting there, a standard scheme in Common
+
+00:55:39.440 --> 00:55:39.940
+Lisp. So to add support to LEM,
+
+00:55:44.440 --> 00:55:44.940
+will be as easy as import package,
+
+00:55:46.360 --> 00:55:46.860
+and you have, And if that language,
+
+00:55:49.640 --> 00:55:50.060
+which usually does, supports very well
+
+00:55:51.740 --> 00:55:51.900
+interaction between the host language and the
+
+00:55:52.920 --> 00:55:53.420
+language that tries to provide,
+
+00:55:57.040 --> 00:55:57.180
+you will mostly automatically have new
+
+00:55:58.060 --> 00:55:58.560
+language for the editor.
+
+00:56:05.640 --> 00:56:06.100
+[Speaker 4]: I think the more interesting hanging fruit
+
+00:56:09.280 --> 00:56:09.780
+would be like using Next to scrape websites,
+
+00:56:12.500 --> 00:56:13.000
+download CSV bank statements,
+
+00:56:15.940 --> 00:56:16.440
+integrating with like password managers and
+
+00:56:27.880 --> 00:56:28.180
+or using... yeah you could still do with
+
+00:56:30.120 --> 00:56:30.620
+[Speaker 2]: But isn't that more like next thing oh yeah
+
+00:56:31.460 --> 00:56:31.580
+yeah I
+
+00:56:32.400 --> 00:56:32.520
+[Speaker 4]: common list though mean what's your your
+
+00:56:34.760 --> 00:56:35.260
+other options would be Selenium,
+
+00:56:41.200 --> 00:56:41.580
+JavaScript, Next already gives you the REPL
+
+00:56:47.940 --> 00:56:48.300
+for that. Or when you had that Ambryvar talk,
+
+00:56:50.060 --> 00:56:50.220
+when he, I don't know if you watched it,
+
+00:56:52.920 --> 00:56:53.420
+but when you use a shell and a command takes
+
+00:56:56.060 --> 00:56:56.200
+takes a while It just automatically takes you
+
+00:56:58.440 --> 00:56:58.580
+back into your shell and says I'll just let
+
+00:57:00.520 --> 00:57:00.800
+this run in the background or being able to
+
+00:57:02.760 --> 00:57:03.260
+more easily run commands in parallel.
+
+00:57:13.620 --> 00:57:13.880
+[Speaker 2]: But that's not like Nix stuff,
+
+00:57:18.740 --> 00:57:19.140
+[Speaker 4]: The Ambrivar, the shell 1,
+
+00:57:21.540 --> 00:57:21.900
+[Speaker 2]: right? Not like? When he did it,
+
+00:57:23.380 --> 00:57:23.580
+he. Because 1
+
+00:57:25.340 --> 00:57:25.440
+[Speaker 4]: wasn't. of the things He did in that when he
+
+00:57:30.040 --> 00:57:30.160
+was using the repl in place of the shell is 1
+
+00:57:31.240 --> 00:57:31.740
+of the things in there was if,
+
+00:57:33.720 --> 00:57:34.120
+let's say you were compiling a program,
+
+00:57:36.820 --> 00:57:37.040
+that takes a while. If it took longer than
+
+00:57:40.240 --> 00:57:40.440
+like 3 seconds or something along those
+
+00:57:42.560 --> 00:57:42.740
+lines, it would kick you back into the shell
+
+00:57:44.260 --> 00:57:44.660
+and say, oh, we're waiting for this program
+
+00:57:48.160 --> 00:57:48.380
+[Speaker 2]: Oh, interesting. And
+
+00:57:48.840 --> 00:57:49.340
+[Speaker 4]: to run, to finish. then you could,
+
+00:57:51.200 --> 00:57:51.600
+and then it had back reference support.
+
+00:57:55.260 --> 00:57:55.520
+So you could say, Oh, app search for this
+
+00:57:58.480 --> 00:57:58.820
+program. And then with the,
+
+00:58:00.780 --> 00:58:01.220
+with the shell, I, when I want to search,
+
+00:58:04.460 --> 00:58:04.640
+I'll then grep through that list to narrow it
+
+00:58:06.900 --> 00:58:07.180
+down even further, but I do a whole new
+
+00:58:08.400 --> 00:58:08.900
+search. It just says, oh,
+
+00:58:10.600 --> 00:58:11.100
+just grep through what I already searched.
+
+00:58:14.180 --> 00:58:14.680
+Just grep through the results of the command
+
+00:58:15.940 --> 00:58:16.440
+that's 3 commands ago.
+
+00:58:17.980 --> 00:58:18.180
+[Speaker 2]: Interesting. So it
+
+00:58:23.880 --> 00:58:24.380
+[Speaker 4]: runs instantly. Or look for my build errors
+
+00:58:25.840 --> 00:58:26.340
+in my compilation output,
+
+00:58:29.700 --> 00:58:30.060
+[Speaker 0]: rather than trying to build it again grepping
+
+00:58:30.360 --> 00:58:30.860
+for the errors.
+
+00:58:33.640 --> 00:58:34.120
+[Speaker 2]: I was checking, so where's that project?
+
+00:58:36.420 --> 00:58:36.920
+I was looking for it. You know,
+
+00:58:44.540 --> 00:58:45.040
+the... Yeah, I want to check the,
+
+00:58:48.000 --> 00:58:48.500
+[Speaker 4]: There was a talk. I also had a webpage.
+
+00:58:55.080 --> 00:58:55.580
+[Speaker 2]: you know... This red bull?
+
+00:58:58.260 --> 00:58:58.760
+No, this is not what I meant.
+
+00:59:34.174 --> 00:59:34.674
+[Speaker 0]: What is it? What is it?
+
+00:59:47.664 --> 00:59:48.164
+I cannot find the... I was trying to find
+
+00:59:54.180 --> 00:59:54.680
+[Speaker 2]: the repo for... It's C-L-E-S-H,
+
+00:59:59.640 --> 00:59:59.840
+like a unit shell for interface with for
+
+01:00:02.080 --> 01:00:02.580
+common Lisp? Is that the thing?
+
+01:00:09.000 --> 01:00:09.160
+[Speaker 0]: I don't know. I'm
+
+01:00:12.260 --> 01:00:12.760
+[Speaker 4]: trying to find the link to his old,
+
+01:00:16.560 --> 01:00:17.060
+no longer website. Website.
+
+01:00:21.500 --> 01:00:22.000
+[Speaker 2]: Skip. Technical issues.
+
+01:00:23.400 --> 01:00:23.900
+Maybe this 1.
+
+01:00:35.820 --> 01:00:36.320
+I cannot find it.
+
+01:00:37.800 --> 01:00:38.300
+[Speaker 4]: I got it.
+
+01:00:51.140 --> 01:00:51.640
+[Speaker 0]: Go to that link. Okay.
+
+01:01:02.020 --> 01:01:02.220
+[Speaker 4]: There's also a FOSDM target associated with
+
+01:01:02.380 --> 01:01:02.880
+it too.
+
+01:01:07.600 --> 01:01:08.100
+[Speaker 2]: Oh yeah, interesting. Clash and CH.
+
+01:01:13.520 --> 01:01:14.020
+CH. Oh, I was looking at the clesh.
+
+01:01:18.640 --> 01:01:19.140
+Clish, so the, let's check for it.
+
+01:01:23.560 --> 01:01:23.860
+The other 1 is shell and camel.
+
+01:01:24.120 --> 01:01:24.620
+This 1.
+
+01:01:37.505 --> 01:01:38.005
+[Speaker 0]: Interesting. Oops. Close Oops.
+
+01:01:40.900 --> 01:01:41.400
+[Speaker 2]: Oh, it's a GNU project.
+
+01:01:44.660 --> 01:01:45.160
+Oh, interesting.
+
+01:01:51.400 --> 01:01:51.680
+[Speaker 4]: The other thing that was interesting there is
+
+01:01:52.760 --> 01:01:53.260
+you use those disk images,
+
+01:02:00.140 --> 01:02:00.520
+LISP images, to have some of your common LISP
+
+01:02:05.920 --> 01:02:06.100
+utilities or programming libraries that you
+
+01:02:07.660 --> 01:02:08.040
+utilize in tandem with your REPL.
+
+01:02:13.700 --> 01:02:14.200
+So you can easily pull up a more featureful
+
+01:02:18.160 --> 01:02:18.400
+or a REPL that has more tools in it than by
+
+01:02:18.400 --> 01:02:18.900
+default.
+
+01:02:21.740 --> 01:02:22.240
+[Speaker 2]: Interesting. So yeah, that's,
+
+01:02:24.380 --> 01:02:24.880
+yeah, I mean, that will be,
+
+01:02:26.800 --> 01:02:27.100
+it will be fairly, no,
+
+01:02:28.700 --> 01:02:29.200
+no, easy. Well, easy, but not,
+
+01:02:33.080 --> 01:02:33.580
+But this can be integrated into LEM probably.
+
+01:02:36.060 --> 01:02:36.200
+Very, you know, not that easy because you
+
+01:02:38.520 --> 01:02:39.020
+have to change the few things.
+
+01:02:43.780 --> 01:02:44.280
+But this can be, you know.
+
+01:02:47.100 --> 01:02:47.600
+[Speaker 4]: Well, as example, he just...
+
+01:02:49.360 --> 01:02:49.860
+Well, 1 of the things that was in the talk,
+
+01:02:51.080 --> 01:02:51.300
+1 of the main ideas was,
+
+01:02:56.160 --> 01:02:56.380
+let's just, rather than trying to make the
+
+01:02:57.600 --> 01:02:58.040
+shell closer to a REPL,
+
+01:03:00.780 --> 01:03:01.280
+let's make a REPL closer to a shell,
+
+01:03:03.380 --> 01:03:03.760
+make it to where we can easily run Linux
+
+01:03:07.280 --> 01:03:07.420
+programs in it, and then use the rest of the
+
+01:03:10.120 --> 01:03:10.620
+REPL goodness, make it to where parentheses
+
+01:03:12.080 --> 01:03:12.580
+are easy to use, like paraedit,
+
+01:03:20.920 --> 01:03:21.420
+And then all of a sudden you have a nicer
+
+01:03:24.320 --> 01:03:24.640
+shell. Not really shell,
+
+01:03:24.640 --> 01:03:25.140
+but.
+
+01:03:30.020 --> 01:03:30.520
+[Speaker 2]: Oh, this is huge.
+
+01:03:33.520 --> 01:03:33.960
+[Speaker 6]: Hi, folks. Sorry for the interruption.
+
+01:03:35.200 --> 01:03:35.700
+It's Leo from the general track.
+
+01:03:39.380 --> 01:03:39.600
+We are about to go back live on the
+
+01:03:41.880 --> 01:03:42.040
+development track, so you can continue the
+
+01:03:43.080 --> 01:03:43.480
+discussion. You know, we are recording
+
+01:03:45.200 --> 01:03:45.360
+everything and you seem to be having a great
+
+01:03:47.520 --> 01:03:47.840
+amount of fun to issue the need for lunch,
+
+01:03:49.080 --> 01:03:49.580
+at least for the people in the US.
+
+01:03:51.160 --> 01:03:51.360
+I just want to let you know,
+
+01:03:53.680 --> 01:03:53.860
+in 2 minutes' time, we will be moving back to
+
+01:03:54.840 --> 01:03:55.340
+the rest of the talk for the afternoon,
+
+01:03:56.840 --> 01:03:57.040
+but feel free to stay in a room and keep
+
+01:03:57.760 --> 01:03:58.260
+discussing. All right?
+
+01:04:01.160 --> 01:04:01.660
+[Speaker 2]: Thank you. All right.
+
+01:04:03.640 --> 01:04:03.940
+[Speaker 6]: It might be a little brutal in 2 minutes,
+
+01:04:07.920 --> 01:04:08.240
+so if you have your watch synchronized at 7
+
+01:04:09.080 --> 01:04:09.520
+sharps, so in 2 minutes,
+
+01:04:10.040 --> 01:04:10.540
+it'll cut off.
+
+01:04:19.600 --> 01:04:20.100
+[Speaker 2]: Okay. Bye-bye. Bye. Oh my.
+
+01:04:23.860 --> 01:04:24.360
+Yeah. Interesting stuff indeed.
+
+01:04:29.380 --> 01:04:29.540
+[Speaker 4]: to listen to it after you're done with the
+
+01:04:32.380 --> 01:04:32.540
+[Speaker 0]: I guess you have Have you
+
+01:04:33.480 --> 01:04:33.980
+[Speaker 4]: comp. ever listened to that talk before?
+
+01:04:38.320 --> 01:04:38.800
+The 1 that's in that webpage,
+
+01:04:39.380 --> 01:04:39.880
+the FOSDEM 1.
+
+01:04:40.840 --> 01:04:41.340
+[Speaker 2]: Which 1? Sorry? 0 yeah,
+
+01:04:44.480 --> 01:04:44.980
+I in fact saw him live in the FOSDEM 2020.
+
+01:04:50.053 --> 01:04:50.091
+[Speaker 0]: So I a little bit. 2020.
+
+01:04:50.166 --> 01:04:50.204
+So we him
+
+01:04:51.760 --> 01:04:51.980
+[Speaker 2]: talked with him a little bit The first time
+
+01:04:55.760 --> 01:04:56.260
+is here in well here in Europe here in
+
+01:05:01.320 --> 01:05:01.440
+Brussels like 3 hours away or 2 hours away in
+
+01:05:02.320 --> 01:05:02.820
+plane from where I am.
+
+01:05:05.320 --> 01:05:05.800
+[Speaker 0]: 1 of the things that's kind of interesting
+
+01:05:06.900 --> 01:05:07.040
+with, you have some of
+
+01:05:09.060 --> 01:05:09.160
+[Speaker 4]: the people who come from Europe to the US and
+
+01:05:11.820 --> 01:05:11.980
+they're like, oh, I want to visit all the
+
+01:05:13.780 --> 01:05:14.060
+corners of the US in a couple of days.
+
+01:05:17.920 --> 01:05:18.420
+And it's like, No, US is the size of Europe.
+
+01:05:19.740 --> 01:05:19.960
+[Speaker 0]: The
+
+01:05:21.160 --> 01:05:21.660
+[Speaker 4]: states are the size of their countries.
+
+01:05:23.140 --> 01:05:23.400
+You don't...
+
+01:05:27.100 --> 01:05:27.600
+[Speaker 2]: I know. I know. It's very...
+
+01:05:30.660 --> 01:05:31.080
+It's huge. And it's like 6 hours different
+
+01:05:32.280 --> 01:05:32.780
+from coast to coast, something like that.
+
+01:05:38.000 --> 01:05:38.240
+[Speaker 4]: Yeah, and that's driving as fast as you can
+
+01:05:39.960 --> 01:05:40.140
+on the freeway, on the best roads that you
+
+01:05:41.160 --> 01:05:41.660
+possibly can, not taking...
+
+01:05:45.700 --> 01:05:46.200
+[Speaker 2]: Yeah, that would be...
+
+01:05:53.400 --> 01:05:53.900
+So the thing that I try to do also with LEM
+
+01:05:57.880 --> 01:05:58.140
+is to move my workflow from LEM to Emax,
+
+01:06:01.620 --> 01:06:02.120
+so for Emax to LEM, use it more.
+
+01:06:07.080 --> 01:06:07.580
+And I hope to, we still have a long way to go
+
+01:06:08.440 --> 01:06:08.940
+in terms of usability,
+
+01:06:10.600 --> 01:06:11.100
+in terms of other things,
+
+01:06:12.640 --> 01:06:13.140
+because we need more power.
+
+01:06:18.420 --> 01:06:18.620
+So This is also my attempt to do some
+
+01:06:20.320 --> 01:06:20.820
+publicity to the Blend project itself,
+
+01:06:23.100 --> 01:06:23.600
+to need to add more users,
+
+01:06:26.200 --> 01:06:26.700
+to be willing to try and to fail trying,
+
+01:06:29.640 --> 01:06:30.140
+because we still have some rough edges.
+
+01:06:38.320 --> 01:06:38.820
+Yeah, just trying to do that,
+
+01:06:41.720 --> 01:06:42.220
+which is, and I apologize to the Emaclist
+
+01:06:43.580 --> 01:06:43.740
+community, which I'm part of,
+
+01:06:44.660 --> 01:06:45.140
+but I don't want to like,
+
+01:06:47.020 --> 01:06:47.520
+disencourage the use of getting Emacs anyway.
+
+01:06:48.960 --> 01:06:49.460
+I think both are awesome.
+
+01:06:51.300 --> 01:06:51.800
+I want to anyone to get a real impression.
+
+01:06:57.040 --> 01:06:57.100
+[Speaker 0]: What do
+
+01:06:57.740 --> 01:06:58.240
+[Speaker 2]: you think? PlasmaStrike,
+
+01:07:01.560 --> 01:07:02.060
+you have a very powerful name.
+
+01:07:07.580 --> 01:07:07.840
+[Speaker 4]: I don't think that's something to worry
+
+01:07:09.660 --> 01:07:10.160
+about. I don't personally,
+
+01:07:15.380 --> 01:07:15.760
+but I'm going to watch the EMMS talk.
+
+01:07:17.360 --> 01:07:17.560
+That's something that I don't really use too
+
+01:07:20.800 --> 01:07:21.220
+much on my Emacs config.
+
+01:07:22.600 --> 01:07:23.100
+So I'm going to let you go.
+
+01:07:24.440 --> 01:07:24.720
+[Speaker 2]: OK, yeah, I'm going to go.
+
+01:07:26.320 --> 01:07:26.760
+I'm going to maybe watch the garbage
+
+01:07:27.800 --> 01:07:28.300
+collector talk, which is interesting.
+
+01:07:32.540 --> 01:07:33.040
+So thank you all very much.
+
+01:07:35.860 --> 01:07:36.080
+I'm gonna go. Thanks for the questions and
+
+01:07:40.811 --> 01:07:41.288
+all that. I think I hope I answered correctly
+
+01:07:47.040 --> 01:07:47.540
+[Speaker 4]: is part of the value of being part of this is
+
+01:07:50.580 --> 01:07:50.740
+[Speaker 2]: all of them. Yeah, I figure this that's a way
+
+01:07:52.540 --> 01:07:53.040
+[Speaker 4]: conversations. So of saying thank you for
+
+01:07:54.480 --> 01:07:54.980
+people sharing interesting talks.
+
+01:07:57.780 --> 01:07:57.940
+[Speaker 2]: Indeed. Thank you all very much for going to
+
+01:08:02.380 --> 01:08:02.880
+the Emacs conf and to watch me.
+
+01:08:06.440 --> 01:08:06.940
+So thank you all very much.
+
+01:08:09.360 --> 01:08:09.860
+I'm going to go do that.
+
+01:08:10.640 --> 01:08:10.890
+[Speaker 0]: See you.
diff --git a/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt
new file mode 100644
index 00000000..875539c5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt
@@ -0,0 +1,35 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:16.999
+Introduction
+
+00:00:17.000 --> 00:01:26.639
+Why Lisp matters
+
+00:01:26.640 --> 00:02:54.840
+Why Emacs Lisp was chosen
+
+00:02:54.841 --> 00:03:38.580
+Other "Emacsen"
+
+00:03:38.581 --> 00:06:39.119
+Why not Common Lisp?
+
+00:06:39.120 --> 00:08:30.079
+Common Lisp is still not dead or is always dead
+
+00:08:30.080 --> 00:08:58.259
+Lem is a nice Emacsen implementation
+
+00:08:58.260 --> 00:10:31.079
+Why not just use GNU Emacs?
+
+00:10:31.080 --> 00:14:03.079
+Why Lem
+
+00:14:03.080 --> 00:15:49.599
+Similarities and differences
+
+00:15:49.600 --> 00:18:27.560
+Demo
diff --git a/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt
new file mode 100644
index 00000000..b078c281
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt
@@ -0,0 +1,1079 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:03.199
+Hello, my name is Fermin.
+
+00:00:03.200 --> 00:00:06.959
+Today, I'm going to talk about the Emacsen family,
+
+00:00:06.960 --> 00:00:11.159
+the design of an Emacs, and the importance of Lisp.
+
+00:00:11.160 --> 00:00:13.519
+So we're going to talk about Lisp.
+
+00:00:13.520 --> 00:00:16.999
+I want to start from the end.
+
+NOTE Why Lisp matters
+
+00:00:17.000 --> 00:00:19.039
+The first question I want to ask is
+
+00:00:19.040 --> 00:00:21.399
+why I think Lisp matters.
+
+00:00:21.400 --> 00:00:22.879
+When I'm talking about Lisp here,
+
+00:00:22.880 --> 00:00:27.559
+I'm talking about the idea of Lisp,
+
+00:00:27.560 --> 00:00:30.119
+so the family of languages that are Lisp.
+
+00:00:30.120 --> 00:00:34.719
+But given that there's no formal specification of Lisp,
+
+00:00:34.720 --> 00:00:40.599
+so the opinion might vary. I will expect that Lisp,
+
+00:00:40.600 --> 00:00:44.439
+most of the Lisp have these kind of features.
+
+00:00:44.440 --> 00:00:46.239
+The first one is homoiconic:
+
+00:00:46.240 --> 00:00:49.799
+the code is data, basically.
+
+00:00:49.800 --> 00:00:52.559
+They also have a REPL: read-eval-print loop.
+
+00:00:52.560 --> 00:00:57.759
+That is very powerful and can help in development.
+
+00:00:57.760 --> 00:01:00.359
+Also, I think a good Lisp
+
+00:01:00.360 --> 00:01:03.319
+should have a powerful macro system.
+
+00:01:03.320 --> 00:01:05.759
+I'm good with compile-time macros,
+
+00:01:05.760 --> 00:01:07.599
+but read-time is also interesting.
+
+00:01:07.600 --> 00:01:10.279
+There's a lot of Lisp that you can choose.
+
+00:01:10.280 --> 00:01:11.999
+There's the main three ones, of course,
+
+00:01:12.000 --> 00:01:13.839
+with Scheme, Common Lisp, and Clojure.
+
+00:01:13.840 --> 00:01:19.674
+Scheme by Guile, Common Lisp by Common Lisp,
+
+00:01:19.675 --> 00:01:26.639
+and Clojure by Clojure or ClojureScript.
+
+NOTE Why Emacs Lisp was chosen
+
+00:01:26.640 --> 00:01:28.079
+So let's talk about Emacs Lisp.
+
+00:01:28.080 --> 00:01:29.679
+I didn't mention Emacs Lisp.
+
+00:01:29.680 --> 00:01:32.519
+I'm going to talk about why Emacs Lisp
+
+00:01:32.520 --> 00:01:35.599
+was chosen for an Emacs editor.
+
+00:01:35.600 --> 00:01:39.159
+We're going to explore this kind of design of the Emacs.
+
+00:01:39.160 --> 00:01:42.279
+And Emacs Lisp is the main language of it. Why?
+
+00:01:42.280 --> 00:01:44.959
+Given that there were a few alternatives at the time,
+
+00:01:44.960 --> 00:01:48.159
+why Emacs Lisp was chosen?
+
+00:01:48.160 --> 00:01:51.919
+So RMS, Richard Stallman, needed a Lisp,
+
+00:01:51.920 --> 00:01:54.279
+and there wasn't one available at the time.
+
+00:01:54.280 --> 00:01:57.039
+Keep in mind, this was the early 80s.
+
+00:01:57.040 --> 00:02:03.240
+Stallman was writing at that point the GCC, I think,
+
+00:02:03.241 --> 00:02:07.974
+and he was writing the core components
+
+00:02:07.975 --> 00:02:10.440
+of what is going to become GNU.
+
+00:02:10.441 --> 00:02:15.499
+He needed an editor. He wanted Lisp. He wanted Emacs.
+
+00:02:15.500 --> 00:02:20.280
+So he wrote Emacs Lisp. So at that time,
+
+00:02:20.281 --> 00:02:24.599
+the functionality was more important than "perfection."
+
+00:02:24.600 --> 00:02:26.639
+What I mean [by] "perfection" is: we programmers
+
+00:02:26.640 --> 00:02:33.359
+sometimes like to make everything good
+
+00:02:33.360 --> 00:02:36.479
+or very, very good when sometimes, indeed,
+
+00:02:36.480 --> 00:02:39.119
+it's more important that it works
+
+00:02:39.120 --> 00:02:42.919
+to do the task that it should.
+
+00:02:42.920 --> 00:02:44.199
+And it's not a bad language.
+
+00:02:44.200 --> 00:02:50.239
+It's not that bad. At that time, it was mostly nice.
+
+00:02:50.240 --> 00:02:54.840
+Today, it's good enough, I think.
+
+NOTE Other "Emacsen"
+
+00:02:54.841 --> 00:02:59.460
+He wasn't the first one, the GNU Emacs,
+
+00:02:59.461 --> 00:03:02.540
+nor the only one, of course.
+
+00:03:02.541 --> 00:03:06.439
+There were others: Hemlock, Zmacs, and Climacs...
+
+00:03:06.440 --> 00:03:08.980
+Two of them, I think, were written in Common Lisp,
+
+00:03:08.981 --> 00:03:14.479
+and Zmacs was written in a Lisp from a Lisp machine,
+
+00:03:14.480 --> 00:03:16.639
+so it was an implementation of Emacs.
+
+00:03:16.640 --> 00:03:19.039
+Not GNU Emacs, but the original idea
+
+00:03:19.040 --> 00:03:22.079
+of Emacs for a Lisp machine.
+
+00:03:22.080 --> 00:03:23.759
+So Hemlock was written in Common Lisp,
+
+00:03:23.760 --> 00:03:26.079
+but it's no longer used and no longer developed,
+
+00:03:26.080 --> 00:03:28.999
+as far as I know. And Climacs, it was developed,
+
+00:03:29.000 --> 00:03:31.519
+but it was abandoned, I think.
+
+00:03:31.520 --> 00:03:33.639
+So three of them failed for different reasons.
+
+00:03:33.640 --> 00:03:37.879
+Zmacs was because of the Lisp machine market crash,
+
+00:03:37.880 --> 00:03:38.580
+and yeah, it also failed.
+
+NOTE Why not Common Lisp?
+
+00:03:38.581 --> 00:03:44.039
+So Emacs got alone. And in the 90s, interesting to explore,
+
+00:03:44.040 --> 00:03:46.479
+some people suggest that why
+
+00:03:46.480 --> 00:03:49.679
+now that we have a standard Lisp, right,
+
+00:03:49.680 --> 00:03:52.559
+because Common Lisp was standardized in '94,
+
+00:03:52.560 --> 00:03:56.719
+why don't we change Emacs Lisp to Common Lisp?
+
+00:03:56.720 --> 00:03:58.999
+These are the other reasons I think are important,
+
+00:03:59.000 --> 00:04:01.159
+because that's why Stallman didn't choose Common Lisp.
+
+00:04:01.160 --> 00:04:02.039
+But I think the main one
+
+00:04:02.040 --> 00:04:03.759
+that I didn't write here
+
+00:04:03.760 --> 00:04:09.039
+is that Stallman wasn't a big fan of Common Lisp,
+
+00:04:09.040 --> 00:04:12.679
+and he was at the time the main developer
+
+00:04:12.680 --> 00:04:14.040
+and maintainer, of course, for Emacs.
+
+00:04:14.041 --> 00:04:16.439
+So he chose not to move to Common Lisp.
+
+00:04:16.440 --> 00:04:18.479
+But other reasons may be why...
+
+00:04:18.480 --> 00:04:22.919
+Because he had a late and painful standardization.
+
+00:04:22.920 --> 00:04:28.039
+Keep in mind, the first book that Guy Steele wrote
+
+00:04:28.040 --> 00:04:32.239
+was in 1984. The standardization finished in 19--
+
+00:04:32.240 --> 00:04:38.279
+sorry, in 1984 was the first book
+
+00:04:38.280 --> 00:04:44.420
+and the standardization finished in 1994.
+
+00:04:44.421 --> 00:04:48.119
+So, like, 10 years of difference from one to the other.
+
+00:04:48.120 --> 00:04:51.879
+10 years of a lot of talk, a lot of money,
+
+00:04:51.880 --> 00:04:56.399
+and a lot of pain probably.
+
+00:04:56.400 --> 00:04:59.199
+The Lisp usage declined in the 90s
+
+00:04:59.200 --> 00:05:00.959
+due to the AI winter.
+
+00:05:00.960 --> 00:05:03.359
+We all know about the Lisp machine market crash.
+
+00:05:03.360 --> 00:05:08.839
+And the failure of commercial Lisp machine was
+
+00:05:08.840 --> 00:05:12.239
+inevitable at that point.
+
+00:05:12.240 --> 00:05:17.160
+So all the potential Emacs friends died.
+
+00:05:17.161 --> 00:05:21.279
+And also a lot of Emacs Lisp was already available.
+
+00:05:21.280 --> 00:05:24.559
+Emacs was already an amateur utility.
+
+00:05:24.560 --> 00:05:29.959
+Unix won the war of the operating system, as we know,
+
+00:05:29.960 --> 00:05:33.839
+and Emacs Lisp was available in Unix,
+
+00:05:33.840 --> 00:05:36.919
+or in GNU/Linux, as we know,
+
+00:05:36.920 --> 00:05:40.479
+which is the most successful implementation of Unix.
+
+00:05:40.480 --> 00:05:44.207
+Sorry, BSD. Okay.
+
+00:05:44.208 --> 00:05:48.399
+So Emacs won by being the "better" alternative.
+
+00:05:48.400 --> 00:05:49.999
+I'm quoting "better" here because
+
+00:05:50.000 --> 00:05:53.699
+I think Emacs does have a better design
+
+00:05:53.700 --> 00:05:56.959
+and, well, it was the one that survived, right?
+
+00:05:56.960 --> 00:06:00.039
+Which is the more important thing for a software or,
+
+00:06:00.040 --> 00:06:05.159
+you know... So Emacs won by being free,
+
+00:06:05.160 --> 00:06:08.399
+also in price, which I think the Lisp machine wasn't.
+
+00:06:08.400 --> 00:06:11.519
+So that was also very good. It was included.
+
+00:06:11.520 --> 00:06:14.559
+It had, and it still has, of course,
+
+00:06:14.560 --> 00:06:15.879
+a nice collection of packages
+
+00:06:15.880 --> 00:06:20.679
+that improve the standard functionality.
+
+00:06:20.680 --> 00:06:23.479
+It was easy to extend because of the nature of Lisp.
+
+00:06:23.480 --> 00:06:26.039
+And it has a very good integration with GNU/Linux,
+
+00:06:26.040 --> 00:06:29.399
+of course. It was created to write it.
+
+00:06:29.400 --> 00:06:31.079
+It makes sense that it's very good
+
+00:06:31.080 --> 00:06:39.119
+for a system administration perspective.
+
+NOTE Common Lisp is still not dead or is always dead
+
+00:06:39.120 --> 00:06:43.319
+But I think Common Lisp is not dead yet.
+
+00:06:43.320 --> 00:06:45.719
+Or some people say that it's always dead,
+
+00:06:45.720 --> 00:06:48.399
+so you cannot kill the something that is always dead.
+
+00:06:48.400 --> 00:06:50.719
+So I don't always code in C,
+
+00:06:50.720 --> 00:06:54.199
+but when I do, it's Lisp. I'm not a big fan of C
+
+00:06:54.200 --> 00:06:58.599
+for a lot of things, but yeah.
+
+00:06:58.600 --> 00:07:02.439
+Why I think Common Lisp is still relevant
+
+00:07:02.440 --> 00:07:05.399
+and can be used for all kind of application,
+
+00:07:05.400 --> 00:07:09.279
+both commercially and non-commercially.
+
+00:07:09.280 --> 00:07:11.839
+The first one is the main implementation
+
+00:07:11.840 --> 00:07:16.799
+of Common Lisp, which is called SBCL, which is awesome.
+
+00:07:16.800 --> 00:07:19.399
+It's fast. It's a very good extension.
+
+00:07:19.400 --> 00:07:21.639
+Basically, it's the reference one today.
+
+00:07:21.640 --> 00:07:25.559
+The namespaces of common Lisp,
+
+00:07:25.560 --> 00:07:26.879
+I really like the implementation.
+
+00:07:26.880 --> 00:07:28.719
+Some people don't like it. It's a matter of taste.
+
+00:07:28.720 --> 00:07:29.639
+But I think it's really good.
+
+00:07:29.640 --> 00:07:32.919
+I have a timeless standard. So it was standardized
+
+00:07:32.920 --> 00:07:35.979
+in the 90s, as I said.
+
+00:07:35.980 --> 00:07:38.880
+And it doesn't really need a new standard.
+
+00:07:38.881 --> 00:07:44.119
+Some people say it does need, but I don't think so.
+
+00:07:44.120 --> 00:07:45.999
+Also it does have macro readers,
+
+00:07:46.000 --> 00:07:49.159
+which I think is a very nice feature of Common Lisp
+
+00:07:49.160 --> 00:07:51.239
+that other Lisp doesn't seem to have,
+
+00:07:51.240 --> 00:07:56.719
+or a lot of them don't: in my mind, Emacs Lisp and Clojure.
+
+00:07:56.720 --> 00:07:58.199
+Also, it's image-based development,
+
+00:07:58.200 --> 00:08:00.399
+which is also quite unique to Common Lisp.
+
+00:08:00.400 --> 00:08:04.359
+I don't know all the Lisp that does have this.
+
+00:08:04.360 --> 00:08:05.359
+Basically, you develop a REPL
+
+00:08:05.360 --> 00:08:10.159
+and then you dump the entire REPL into an image.
+
+00:08:10.160 --> 00:08:12.079
+Java would be like a core dump.
+
+00:08:12.080 --> 00:08:14.159
+And you create an executable.
+
+00:08:14.160 --> 00:08:17.159
+Which at the time, I guess in the 90s,
+
+00:08:17.160 --> 00:08:18.199
+was a huge one, right?
+
+00:08:18.200 --> 00:08:20.679
+Because you have the entire language, and the REPL,
+
+00:08:20.680 --> 00:08:23.799
+and the code. But today are like 20 MB,
+
+00:08:23.800 --> 00:08:26.599
+which in today's standard is nothing.
+
+00:08:26.600 --> 00:08:30.079
+There's pictures in your phone larger than 20 MB.
+
+NOTE Lem is a nice Emacsen implementation
+
+00:08:30.080 --> 00:08:39.239
+So there's a new Emacs in town--well, Emacs, not Emacs,
+
+00:08:39.240 --> 00:08:43.439
+Which is Lem. I think it's a very good Emacs implementation.
+
+00:08:43.440 --> 00:08:46.679
+What I mean by "Emacs" here is not a clone of GNU Emacs,
+
+00:08:46.680 --> 00:08:51.559
+but an Emacs-inspired editor with similar characteristics,
+
+00:08:51.560 --> 00:08:53.519
+and written in a Lisp,
+
+00:08:53.520 --> 00:08:58.259
+which is why I said that Lisp was very important.
+
+NOTE Why not just use GNU Emacs?
+
+00:08:58.260 --> 00:09:01.559
+So first, I'm going to address the elephant in the room,
+
+00:09:01.560 --> 00:09:05.039
+and the question that maybe most
+
+00:09:05.040 --> 00:09:06.159
+of you are now thinking.
+
+00:09:06.160 --> 00:09:12.919
+Why not just use GNU Emacs? It's the project.
+
+00:09:12.920 --> 00:09:15.759
+It's the main one, right? Why choose another one?
+
+00:09:15.760 --> 00:09:18.199
+So Lem is relatively new, 2018.
+
+00:09:18.200 --> 00:09:20.199
+And it can explore different ideas.
+
+00:09:20.200 --> 00:09:21.679
+It was developed by Sasaki-san.
+
+00:09:21.680 --> 00:09:26.719
+Basically, it was mostly a one-month project,
+
+00:09:26.720 --> 00:09:31.940
+but we are getting there. I'm not the maintainer.
+
+00:09:31.941 --> 00:09:36.959
+I'm a developer of Lem. So given that it's
+
+00:09:36.960 --> 00:09:39.239
+relatively new, it can explore different ideas.
+
+00:09:39.240 --> 00:09:43.519
+You're not bound to a community or backwards compatibility.
+
+00:09:43.520 --> 00:09:45.439
+You can explore different ideas,
+
+00:09:45.440 --> 00:09:46.199
+and I think that's always nice.
+
+00:09:46.200 --> 00:09:49.839
+Having multiple options creates competition,
+
+00:09:49.840 --> 00:09:52.639
+which benefits the community. So Emacs and Vim,
+
+00:09:52.640 --> 00:09:54.839
+the competition between the two
+
+00:09:54.840 --> 00:09:59.119
+always create nice packages like evil or, you know...
+
+00:09:59.120 --> 00:10:03.719
+It's really good to have some kind of a competition,
+
+00:10:03.720 --> 00:10:06.159
+healthy competition.
+
+00:10:06.160 --> 00:10:08.199
+And it doesn't share any code base with GNU Emacs.
+
+00:10:08.200 --> 00:10:12.879
+I want to clarify this because some people think that
+
+00:10:12.880 --> 00:10:16.119
+Lem is kind of a, you know, Spacemacs or Doom.
+
+00:10:16.120 --> 00:10:19.959
+No, it doesn't share any code.
+
+00:10:19.960 --> 00:10:27.759
+It has zero Emacs. So that's it.
+
+00:10:27.760 --> 00:10:29.199
+Getting this out of the way.
+
+00:10:29.200 --> 00:10:31.079
+Why I think Lem is interesting.
+
+NOTE Why Lem
+
+00:10:31.080 --> 00:10:32.359
+I'm going to show why Lem.
+
+00:10:32.360 --> 00:10:37.759
+Why? You can try Lem, and maybe you like it.
+
+00:10:37.760 --> 00:10:41.319
+First thing, these are the features
+
+00:10:41.320 --> 00:10:42.799
+that I really like from it.
+
+00:10:42.800 --> 00:10:45.574
+Can be different from person to person,
+
+00:10:45.575 --> 00:10:48.279
+but I think these are the main ideas
+
+00:10:48.280 --> 00:10:49.999
+it brings to the table and are really interesting.
+
+00:10:50.000 --> 00:10:53.119
+I want to say that Lem is not a research project.
+
+00:10:53.120 --> 00:10:55.719
+It's not like some people did that
+
+00:10:55.720 --> 00:10:57.239
+and it's still in development. No, no.
+
+00:10:57.240 --> 00:11:00.039
+This is a usable product that can be used
+
+00:11:00.040 --> 00:11:02.039
+to [do] day-to-day programming
+
+00:11:02.040 --> 00:11:04.559
+in a very good experience.
+
+00:11:04.560 --> 00:11:06.279
+This is not like--I want to clarify this
+
+00:11:06.280 --> 00:11:08.719
+because some people bring some exploratory projects.
+
+00:11:08.720 --> 00:11:10.799
+This is not that one. This is finished.
+
+00:11:10.800 --> 00:11:14.719
+Well, finished in the way that you can use it.
+
+00:11:14.720 --> 00:11:17.799
+It's not, you know, have everything in place.
+
+00:11:17.800 --> 00:11:20.639
+So let's continue.
+
+00:11:20.640 --> 00:11:22.159
+It's written 100% in Common Lisp.
+
+00:11:22.160 --> 00:11:23.839
+I say this because Emacs is not
+
+00:11:23.840 --> 00:11:26.279
+100% in Emacs Lisp.
+
+00:11:26.280 --> 00:11:28.359
+You have to modify the C code,
+
+00:11:28.360 --> 00:11:31.839
+I think, well, if you... You don't have to,
+
+00:11:31.840 --> 00:11:33.999
+but if you want to change the internals, you do.
+
+00:11:34.000 --> 00:11:38.879
+I think that given that Lem does not care
+
+00:11:38.880 --> 00:11:41.199
+about the implementation of the language itself--
+
+00:11:41.200 --> 00:11:44.039
+so for example, Lem doesn't have to deal with
+
+00:11:44.040 --> 00:11:48.199
+how Common Lisp works, it just used the language, right?
+
+00:11:48.200 --> 00:11:50.799
+It's on top of the language.
+
+00:11:50.800 --> 00:11:53.879
+You can say that. Emacs Lisp is Emacs and Emacs Lisp,
+
+00:11:53.880 --> 00:11:56.079
+so you have to, you have both in the same place,
+
+00:11:56.080 --> 00:12:00.319
+which is, well, it's a double-edged sword, right?
+
+00:12:00.320 --> 00:12:03.319
+Then you have the both--similar to Emacs--
+
+00:12:03.320 --> 00:12:05.639
+you have ncurses and SDL2 frontends.
+
+00:12:05.640 --> 00:12:08.719
+One is terminal-based and the other is graphical
+
+00:12:08.720 --> 00:12:10.399
+using the SDL2 library,
+
+00:12:10.400 --> 00:12:13.759
+which you can do a lot of crazy things.
+
+00:12:13.760 --> 00:12:16.159
+Of course, it's meant to program games and stuff,
+
+00:12:16.160 --> 00:12:19.679
+but Lem uses, and it works fairly well.
+
+00:12:19.680 --> 00:12:21.879
+You can program games if you want.
+
+00:12:21.880 --> 00:12:27.559
+Not that you need to or anything, but we have Tetris.
+
+00:12:27.560 --> 00:12:28.999
+So there's that.
+
+00:12:29.000 --> 00:12:31.719
+Also, separate front-end interface.
+
+00:12:31.720 --> 00:12:34.159
+So like I said, you have two, but you can create more.
+
+00:12:34.160 --> 00:12:36.439
+In the past, had an electron one,
+
+00:12:36.440 --> 00:12:41.319
+but it got abandoned for obvious reasons, I think. Sorry.
+
+00:12:41.320 --> 00:12:45.839
+This idea is taken from Neovim that had a lot of frontends.
+
+00:12:45.840 --> 00:12:48.119
+In fact, we don't have that many,
+
+00:12:48.120 --> 00:12:49.639
+but not that many people we have two.
+
+00:12:49.640 --> 00:12:51.674
+That works fairly well.
+
+00:12:51.675 --> 00:12:56.679
+We have superb development experience thanks to SLIME.
+
+00:12:56.680 --> 00:13:01.319
+So we have Micro,
+
+00:13:01.320 --> 00:13:04.039
+which is a SLIME version for Lem, basically.
+
+00:13:04.040 --> 00:13:08.999
+SLIME is awesome and Micro is also awesome.
+
+00:13:09.000 --> 00:13:12.319
+We have a very strong development experience
+
+00:13:12.320 --> 00:13:15.399
+that we don't have for a Lisp,
+
+00:13:15.400 --> 00:13:17.399
+which I think is very important.
+
+00:13:17.400 --> 00:13:20.319
+If you want someone to develop packages or to use your tool,
+
+00:13:20.320 --> 00:13:22.719
+your Emacs at least,
+
+00:13:22.720 --> 00:13:28.759
+you need to have a very good development experience,
+
+00:13:28.760 --> 00:13:34.039
+which enhance the extensions for the editor.
+
+00:13:34.040 --> 00:13:36.719
+So we have also Vim-like integration.
+
+00:13:36.720 --> 00:13:39.399
+This for me was mostly mandatory
+
+00:13:39.400 --> 00:13:44.439
+because I'm an evil-mode user, and I think it's really good.
+
+00:13:44.440 --> 00:13:49.479
+Because evil-mode is very good and the VMode,
+
+00:13:49.480 --> 00:13:51.719
+which it's called, even though it's more like Vim mode,
+
+00:13:51.720 --> 00:13:54.159
+it's called VMode. It's written by
+
+00:13:54.160 --> 00:13:59.159
+Fukamachi-san and it's really good.
+
+00:13:59.160 --> 00:14:01.959
+So yeah, that's the thing that I think Lem brings to
+
+00:14:01.960 --> 00:14:03.079
+the table and that's really interesting.
+
+NOTE Similarities and differences
+
+00:14:03.080 --> 00:14:10.519
+So I'm going to do a small demo of Lem, a Emacs example.
+
+00:14:10.520 --> 00:14:11.679
+First, the similarities,
+
+00:14:11.680 --> 00:14:14.119
+the nomenclature is very similar: modes, buffers,
+
+00:14:14.120 --> 00:14:17.439
+commands... The commands are very similar in nature.
+
+00:14:17.440 --> 00:14:20.039
+It was written with GNU Emacs in mind
+
+00:14:20.040 --> 00:14:24.359
+to mimic a lot of things.
+
+00:14:24.360 --> 00:14:29.079
+I think GNU Emacs is the best Emacs implementation
+
+00:14:29.080 --> 00:14:33.719
+in that way. So why not just take what is working, right?
+
+00:14:33.720 --> 00:14:35.599
+I have similar command,
+
+00:14:35.600 --> 00:14:39.399
+but flexible to add other default ones.
+
+00:14:39.400 --> 00:14:42.399
+It's not like Emacs that you have Emacs commands.
+
+00:14:42.400 --> 00:14:45.159
+Lem has Emacs command by default,
+
+00:14:45.160 --> 00:14:47.759
+but you can easily change that
+
+00:14:47.760 --> 00:14:49.919
+with other default ones, right?
+
+00:14:49.920 --> 00:14:52.159
+It's like, you can think of it like a major mode, right?
+
+00:14:52.160 --> 00:14:54.439
+Well, more like a global mode,
+
+00:14:54.440 --> 00:14:57.960
+sorry. That's a global mode of Emacs commands,
+
+00:14:57.961 --> 00:14:59.360
+or something like that.
+
+00:14:59.361 --> 00:15:01.519
+In general, the feeling is really close.
+
+00:15:01.520 --> 00:15:05.919
+So you will tell that it's really close to how both work,
+
+00:15:05.920 --> 00:15:07.839
+similar commands, and that shows.
+
+00:15:07.840 --> 00:15:12.359
+Differences, Common Lisp is not Emacs Lisp,
+
+00:15:12.360 --> 00:15:13.919
+it's similar in the surface.
+
+00:15:13.920 --> 00:15:16.279
+So it uses `defun`, you know, have parentheses
+
+00:15:16.280 --> 00:15:18.719
+and yada, yada, but it's not the same language, really,
+
+00:15:18.720 --> 00:15:20.839
+and sometimes you will find
+
+00:15:20.840 --> 00:15:22.639
+that the differences are substantial.
+
+00:15:23.260 --> 00:15:24.859
+The internals are completely different,
+
+00:15:24.860 --> 00:15:27.479
+of course, nothing, well, completely.
+
+00:15:27.480 --> 00:15:29.719
+They have a buffer implementation and other things,
+
+00:15:29.720 --> 00:15:32.359
+but in general, yeah, aside from that,
+
+00:15:32.360 --> 00:15:34.079
+it's completely different.
+
+00:15:34.080 --> 00:15:36.199
+And it's true that GNU Emacs
+
+00:15:36.200 --> 00:15:37.479
+has a better documentation tutorial.
+
+00:15:37.480 --> 00:15:39.719
+So GNU Emacs for me, I think it's
+
+00:15:39.720 --> 00:15:41.759
+one of the best-documented software ever.
+
+00:15:41.760 --> 00:15:49.599
+We're trying to go there, but we're still not there.
+
+NOTE Demo
+
+00:15:49.600 --> 00:15:54.079
+Let's do the demo. So to open Lem, you compile it,
+
+00:15:54.080 --> 00:15:55.759
+and then you have it available,
+
+00:15:55.760 --> 00:15:57.719
+and you open Lem. As you can see,
+
+00:15:57.720 --> 00:16:00.839
+we have the temporary buffer. On the top left is the mode--
+
+00:16:00.840 --> 00:16:03.279
+not mode,
+
+00:16:03.280 --> 00:16:07.239
+the beam, insert, normal, visual. This is the V mode, right?
+
+00:16:07.240 --> 00:16:10.279
+In the top right corner, we have fundamental,
+
+00:16:10.280 --> 00:16:11.599
+which is the major mode, then paredit,
+
+00:16:11.600 --> 00:16:15.079
+which is like the minor mode, but you know,
+
+00:16:15.080 --> 00:16:16.079
+this is like the paredit for Emacs.
+
+00:16:16.080 --> 00:16:19.199
+In the top left buffer,
+
+00:16:19.200 --> 00:16:22.479
+you have the current buffer.
+
+00:16:22.480 --> 00:16:26.479
+So let's open the... Emacs, we all know how to do this.
+
+00:16:26.480 --> 00:16:29.319
+This is a command, like explore this command,
+
+00:16:29.320 --> 00:16:31.479
+like `open-init-file`. This opens the init file,
+
+00:16:31.480 --> 00:16:34.319
+which is in this directory, in `~/.lem/init.lisp`.
+
+00:16:34.320 --> 00:16:38.239
+As you can see, this is very similar, right?
+
+00:16:38.240 --> 00:16:40.279
+You define a command, which is not interactive,
+
+00:16:40.280 --> 00:16:42.959
+and then you get the buffer, right?
+
+00:16:42.960 --> 00:16:44.919
+This is a... So my personal command...
+
+00:16:44.920 --> 00:16:48.879
+Let's go to the one that I just opened. Init file, right?
+
+00:16:48.880 --> 00:16:52.159
+So this is a command that I did,
+
+00:16:52.160 --> 00:16:53.439
+which is `find-file`.
+
+00:16:53.440 --> 00:16:56.599
+This is very similar to [??], but just `find-file`.
+
+00:16:56.600 --> 00:16:58.399
+As you can see, very similar.
+
+00:16:58.400 --> 00:17:01.759
+This is the way that you program in Lem.
+
+00:17:01.760 --> 00:17:04.839
+This is the major mode, which is Lisp,
+
+00:17:04.840 --> 00:17:06.959
+that we're seeing at the top, right?
+
+00:17:06.960 --> 00:17:10.479
+And we can connect if we `slime-self-connect`.
+
+00:17:10.480 --> 00:17:14.119
+This is the prompt. This is the REPL.
+
+00:17:14.120 --> 00:17:17.959
+So if we... Keep in mind that this is Common Lisp,
+
+00:17:17.960 --> 00:17:20.439
+so this has different things.
+
+00:17:20.440 --> 00:17:22.719
+So we have to go to the Lem package,
+
+00:17:22.720 --> 00:17:26.199
+which is very important. This has namespaces, right?
+
+00:17:26.200 --> 00:17:29.039
+It's not the same. And we can say, okay,
+
+00:17:29.040 --> 00:17:32.319
+`current-buffer`. We get the buffer.
+
+00:17:32.320 --> 00:17:35.199
+We can explore everything that is in it, right?
+
+00:17:35.200 --> 00:17:38.559
+We have all this stuff. This is... If you're familiar
+
+00:17:38.560 --> 00:17:41.159
+with SLIME or Sly, this is it.
+
+00:17:41.160 --> 00:17:46.279
+It's just that we can say, buffer, I think it's `buffer-name`.
+
+00:17:46.280 --> 00:17:49.159
+Yes. And we can take this,
+
+00:17:49.160 --> 00:17:50.799
+and then we'll give you the name.
+
+00:17:50.800 --> 00:17:54.359
+So as you can see, the development experience
+
+00:17:54.360 --> 00:17:57.639
+is really powerful. We can also `lisp-scratch`,
+
+00:17:57.640 --> 00:18:00.679
+which transform... basically apply
+
+00:18:00.680 --> 00:18:02.639
+the major mode of Lisp to the temporary buffer.
+
+00:18:02.640 --> 00:18:06.719
+This is very similar to Emacs.
+
+00:18:06.720 --> 00:18:11.999
+Let's go back to the theme. I think that's it.
+
+00:18:12.000 --> 00:18:13.879
+Thank you all very much for listening to me.
+
+00:18:13.880 --> 00:18:15.239
+I think I point out
+
+00:18:15.240 --> 00:18:16.999
+the Emacsen family is really interesting.
+
+00:18:17.000 --> 00:18:19.279
+Lisp is really good, and GNU Emacs is really good,
+
+00:18:19.280 --> 00:18:21.199
+and I think Lem is also pretty awesome.
+
+00:18:21.200 --> 00:18:23.119
+So thank you all very much.
+
+00:18:23.120 --> 00:18:27.560
+I'll be answering the question now. And happy hacking.
diff --git a/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt
new file mode 100644
index 00000000..ad378f78
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt
@@ -0,0 +1,1829 @@
+WEBVTT
+
+
+00:00:06.140 --> 00:00:06.640
+[Speaker 0]: And I think we are live.
+
+00:00:07.580 --> 00:00:08.080
+Hi, Yanny, how are you doing?
+
+00:00:10.460 --> 00:00:10.760
+[Speaker 1]: Excellent, excellent. Doing very well,
+
+00:00:10.960 --> 00:00:11.460
+thank you.
+
+00:00:13.980 --> 00:00:14.480
+[Speaker 0]: So that was a wonderful presentation.
+
+00:00:17.440 --> 00:00:17.940
+I first want to commend you on your ability
+
+00:00:22.040 --> 00:00:22.200
+to both do the how the user encounters the
+
+00:00:24.960 --> 00:00:25.460
+MMS, how the developer might be interested
+
+00:00:28.680 --> 00:00:28.920
+about how it works, and I feel like you've
+
+00:00:30.720 --> 00:00:31.200
+done a wonderful job of talking to absolutely
+
+00:00:31.800 --> 00:00:32.200
+everyone in our audience,
+
+00:00:32.840 --> 00:00:33.120
+whatever their skill level.
+
+00:00:34.120 --> 00:00:34.620
+So thank you so much for this.
+
+00:00:37.800 --> 00:00:38.300
+[Speaker 1]: Yeah, that of course runs the risk of being,
+
+00:00:41.580 --> 00:00:41.940
+you know, good for some,
+
+00:00:42.980 --> 00:00:43.480
+but excellent for none.
+
+00:00:46.960 --> 00:00:47.280
+But hopefully the result is that people can
+
+00:00:48.380 --> 00:00:48.880
+get something out of it.
+
+00:00:51.820 --> 00:00:52.080
+I think it's very important to make sure that
+
+00:00:55.680 --> 00:00:55.900
+everyone feels that they have access to
+
+00:00:57.239 --> 00:00:57.739
+Emacs, they have access to EMMS,
+
+00:01:00.640 --> 00:01:01.140
+that they can do this in whatever capacity
+
+00:01:02.800 --> 00:01:03.300
+they want. It's for everyone.
+
+00:01:05.440 --> 00:01:05.940
+I really believe that.
+
+00:01:09.440 --> 00:01:09.720
+[Speaker 0]: Yeah, and I understand this risk about having
+
+00:01:10.680 --> 00:01:11.180
+a talk that is kind of a jack-of-all-trades,
+
+00:01:14.440 --> 00:01:14.940
+but frankly you've done a wonderful job of
+
+00:01:16.560 --> 00:01:17.060
+making it interesting for everyone,
+
+00:01:19.540 --> 00:01:19.900
+because also I think the parts worked really
+
+00:01:21.820 --> 00:01:22.000
+well, and people always had something to look
+
+00:01:24.240 --> 00:01:24.479
+forward in terms of their expertise of what
+
+00:01:25.360 --> 00:01:25.680
+particularly spoke to them.
+
+00:01:27.560 --> 00:01:27.720
+So thank you again. What I'm going to do,
+
+00:01:29.440 --> 00:01:29.940
+we have about 14 minutes of Q&A,
+
+00:01:30.760 --> 00:01:31.080
+So I'll invite people,
+
+00:01:33.400 --> 00:01:33.520
+as I usually do, to add their questions in
+
+00:01:35.320 --> 00:01:35.760
+the other pad that you can find on the talks
+
+00:01:38.560 --> 00:01:38.760
+or on IRC. You can also join us in the
+
+00:01:40.200 --> 00:01:40.320
+discussion. I will make sure this time to
+
+00:01:42.180 --> 00:01:42.680
+ping Sasha to open the Q&A.
+
+00:01:44.680 --> 00:01:45.180
+Can you open, I-V-E-M-M-S.
+
+00:01:48.700 --> 00:01:49.200
+All right, and in the meantime,
+
+00:01:50.940 --> 00:01:51.040
+whilst we wait for people to join us in the
+
+00:01:52.360 --> 00:01:52.540
+room, I will start reading some of the
+
+00:01:53.960 --> 00:01:54.460
+questions off the pad.
+
+00:01:57.180 --> 00:01:57.520
+So we had the first question about the music
+
+00:01:58.780 --> 00:01:59.280
+that we played during the launch break,
+
+00:02:01.320 --> 00:02:01.560
+and It's 1 of our dear friends,
+
+00:02:05.200 --> 00:02:05.700
+Shoshin Ganshangroh, a free album,
+
+00:02:09.360 --> 00:02:09.720
+Basement Dazed. I've put the link in the pad
+
+00:02:12.520 --> 00:02:12.660
+and we've been using Shoshin's music for the
+
+00:02:13.420 --> 00:02:13.920
+last 3 years, I think,
+
+00:02:15.060 --> 00:02:15.560
+and everyone, people are so excited.
+
+00:02:17.220 --> 00:02:17.360
+Some people say, why is it so noisy in the
+
+00:02:18.480 --> 00:02:18.800
+background? But it's just because there's 1
+
+00:02:20.940 --> 00:02:21.420
+part of the different tracks that sounds like
+
+00:02:24.280 --> 00:02:24.520
+static and it always gets people.
+
+00:02:25.900 --> 00:02:26.040
+We should probably do something about this,
+
+00:02:27.520 --> 00:02:28.020
+but frankly it makes me laugh every time.
+
+00:02:30.460 --> 00:02:30.920
+Starting with the first actual question,
+
+00:02:32.640 --> 00:02:33.140
+well actually it's a bit of a meme question,
+
+00:02:34.340 --> 00:02:34.640
+for the next Emacs Con,
+
+00:02:37.280 --> 00:02:37.440
+could we have an eMMS playlist to follow the
+
+00:02:37.760 --> 00:02:38.260
+talks along?
+
+00:02:43.940 --> 00:02:44.060
+[Speaker 1]: Oh that sounds like an excellent idea but I
+
+00:02:46.560 --> 00:02:46.720
+guess I'm wondering what they mean exactly by
+
+00:02:48.960 --> 00:02:49.280
+that. Is that a shareable playlist that we
+
+00:02:54.560 --> 00:02:54.720
+can pass along and just have people go to a
+
+00:02:56.320 --> 00:02:56.600
+URL and just be able to play that?
+
+00:02:58.620 --> 00:02:59.060
+I think that's an excellent idea.
+
+00:03:00.660 --> 00:03:01.160
+It should be a relatively low bandwidth
+
+00:03:01.780 --> 00:03:02.280
+process.
+
+00:03:06.580 --> 00:03:06.740
+[Speaker 0]: And it's typically the type of stuff that is
+
+00:03:10.840 --> 00:03:11.000
+right of our alley. I'm thinking about the
+
+00:03:15.480 --> 00:03:15.980
+ICS file that we produce for all the events
+
+00:03:17.020 --> 00:03:17.320
+that are related to Emacs.
+
+00:03:18.820 --> 00:03:19.240
+You know the workshop that happened in Paris
+
+00:03:22.360 --> 00:03:22.500
+or in New York, LA? Sasha compiles a list of
+
+00:03:23.560 --> 00:03:23.920
+all the events and when they happen,
+
+00:03:25.360 --> 00:03:25.760
+and then we provide this to everyone.
+
+00:03:27.040 --> 00:03:27.160
+And we can do very much the same with
+
+00:03:29.380 --> 00:03:29.580
+EmacsConf. You could have a playlist for
+
+00:03:31.980 --> 00:03:32.420
+EmacsConf 2023, where you get all the talks
+
+00:03:34.760 --> 00:03:34.900
+and perhaps also the Q&A sessions so that you
+
+00:03:36.780 --> 00:03:36.960
+can relieve the 16 hours of content that
+
+00:03:37.800 --> 00:03:38.200
+we're producing. That'd be great,
+
+00:03:39.240 --> 00:03:39.740
+that's a great idea I think.
+
+00:03:43.660 --> 00:03:44.160
+[Speaker 1]: Absolutely, and if there are any limitations
+
+00:03:48.060 --> 00:03:48.420
+in the Emacs playlist structure that things
+
+00:03:49.640 --> 00:03:50.140
+are missing in the playlist structure,
+
+00:03:53.040 --> 00:03:53.480
+then it would be a great impetus to implement
+
+00:03:55.080 --> 00:03:55.520
+those and extend the playlist structure.
+
+00:03:57.380 --> 00:03:57.860
+Because after all, it's Lisp,
+
+00:04:01.360 --> 00:04:01.620
+it really is data and functions all mixed
+
+00:04:03.160 --> 00:04:03.580
+together, so we can do that.
+
+00:04:06.180 --> 00:04:06.360
+It would be very interesting to dive into it
+
+00:04:07.000 --> 00:04:07.420
+and see what's missing.
+
+00:04:10.020 --> 00:04:10.240
+That would be even more informative than what
+
+00:04:10.680 --> 00:04:11.180
+it can do.
+
+00:04:14.900 --> 00:04:15.060
+[Speaker 0]: Great. All right, moving on to the next
+
+00:04:17.000 --> 00:04:17.480
+question. I like to use music and audiobooks
+
+00:04:18.279 --> 00:04:18.740
+in very different ways.
+
+00:04:21.440 --> 00:04:21.600
+With music, I like shuffling by artists and
+
+00:04:23.300 --> 00:04:23.800
+with audiobooks, I want to read sequentially
+
+00:04:27.260 --> 00:04:27.380
+and pick the same playlist over a couple of
+
+00:04:29.240 --> 00:04:29.540
+days or weeks. Do you have any tips for using
+
+00:04:30.860 --> 00:04:31.360
+these 2 opposing media's workflow?
+
+00:04:38.520 --> 00:04:38.940
+[Speaker 1]: Yes, so I have similar situations where I
+
+00:04:43.920 --> 00:04:44.420
+have very long endurance races that I watch,
+
+00:04:47.160 --> 00:04:47.440
+which I do all my media consumption is done
+
+00:04:50.720 --> 00:04:51.220
+via EMMS. I also listened to music.
+
+00:04:54.020 --> 00:04:54.520
+And so there's also a middle in between.
+
+00:04:57.980 --> 00:04:58.480
+There's 1 end in which you have popular
+
+00:05:01.560 --> 00:05:02.020
+music. These are standalone songs that are
+
+00:05:04.860 --> 00:05:05.080
+typically 3 to 4 minute long and they are
+
+00:05:07.900 --> 00:05:08.400
+best consumed in a random you know order
+
+00:05:09.780 --> 00:05:10.280
+because they are designed around,
+
+00:05:12.080 --> 00:05:12.580
+you know, a commercial radio distribution.
+
+00:05:15.140 --> 00:05:15.580
+I guess I'm dating myself by saying radio,
+
+00:05:17.120 --> 00:05:17.620
+but you know all the that.
+
+00:05:20.940 --> 00:05:21.440
+In the middle there are longer works like
+
+00:05:26.100 --> 00:05:26.600
+musicals and classical where these are units
+
+00:05:30.200 --> 00:05:30.360
+where they might be very long but you would
+
+00:05:33.160 --> 00:05:33.420
+have several tracks that you do want to have
+
+00:05:35.600 --> 00:05:35.800
+1 after the other, and you want to be able to
+
+00:05:38.360 --> 00:05:38.860
+stop and go to the next track.
+
+00:05:40.760 --> 00:05:41.260
+And then at the very, very other end,
+
+00:05:44.020 --> 00:05:44.520
+you have extremely long format,
+
+00:05:46.360 --> 00:05:46.860
+which is included in a single file,
+
+00:05:47.920 --> 00:05:48.420
+such as an audio book,
+
+00:05:51.400 --> 00:05:51.900
+a movie, a tutorial that you're watching,
+
+00:05:54.100 --> 00:05:54.320
+or in my case, you know,
+
+00:05:56.580 --> 00:05:57.040
+a 24 hour, the 24 hours of Le Mans,
+
+00:05:58.040 --> 00:05:58.440
+just the 24 hour race,
+
+00:06:01.120 --> 00:06:01.620
+which, you know, that's 1 heck of a file.
+
+00:06:07.380 --> 00:06:07.660
+So that is 1 of the reasons eMMS has a number
+
+00:06:10.160 --> 00:06:10.640
+of elements such as the meta playlist mode
+
+00:06:11.260 --> 00:06:11.760
+and multiple playlists.
+
+00:06:16.160 --> 00:06:16.480
+So I would say that they would open a number
+
+00:06:19.540 --> 00:06:19.680
+of playlists in eMMS, generate a number of
+
+00:06:26.040 --> 00:06:26.540
+playlists that have each class of media.
+
+00:06:28.940 --> 00:06:29.320
+So the shorter form songs,
+
+00:06:33.580 --> 00:06:34.080
+the more pop songs you have in 1 playlist
+
+00:06:35.920 --> 00:06:36.140
+where you can sort, shuffle it,
+
+00:06:37.800 --> 00:06:38.300
+you know, save it, do whatever you want.
+
+00:06:41.980 --> 00:06:42.360
+Then a separate playlist for the long form
+
+00:06:44.340 --> 00:06:44.840
+stuff. Sometimes that playlist will have even
+
+00:06:48.960 --> 00:06:49.460
+only 1 file in it if it's long enough,
+
+00:06:52.120 --> 00:06:52.300
+then have a key combination which takes you
+
+00:06:55.280 --> 00:06:55.780
+directly to 1 playlist or the other,
+
+00:06:57.340 --> 00:06:57.840
+and within the long-form playlist,
+
+00:07:01.980 --> 00:07:02.480
+looking at the bookmarking function of EMMS,
+
+00:07:06.560 --> 00:07:06.660
+which is designed around being able to save a
+
+00:07:10.080 --> 00:07:10.580
+particular stopping point or multiple
+
+00:07:12.240 --> 00:07:12.540
+stopping points, bookmarks in the audio,
+
+00:07:15.300 --> 00:07:15.800
+and being able to jump back into that audio.
+
+00:07:18.600 --> 00:07:19.100
+The point to remember about the bookmarking
+
+00:07:23.720 --> 00:07:24.220
+feature is that sometimes it really depends
+
+00:07:25.960 --> 00:07:26.460
+on you have to have the right back end.
+
+00:07:28.900 --> 00:07:29.400
+Not all back ends with replaying,
+
+00:07:33.120 --> 00:07:33.220
+not all types of media work well with a
+
+00:07:36.200 --> 00:07:36.660
+bookmarking function, and bug reports
+
+00:07:38.960 --> 00:07:39.460
+welcome. But also there are other backends
+
+00:07:44.820 --> 00:07:45.140
+such as MPV where you can configure it that
+
+00:07:49.860 --> 00:07:50.360
+when you quit playing the song or the media
+
+00:07:55.080 --> 00:07:55.580
+with, you know, cue internally.
+
+00:07:58.140 --> 00:07:58.640
+So sometimes the back end has to continue
+
+00:08:04.400 --> 00:08:04.700
+playing that song. That's what I do in order
+
+00:08:07.560 --> 00:08:08.060
+to, on 1 hand, switch over to a...
+
+00:08:09.620 --> 00:08:10.000
+I want to hear... I'm coding,
+
+00:08:10.800 --> 00:08:11.240
+I want to hear some music,
+
+00:08:12.860 --> 00:08:13.360
+I go to my playlist of short songs,
+
+00:08:16.280 --> 00:08:16.560
+then I'm sitting back and I want to watch a
+
+00:08:20.340 --> 00:08:20.540
+long form something from where I left off and
+
+00:08:22.420 --> 00:08:22.740
+there I go to the other playlist and use
+
+00:08:26.140 --> 00:08:26.380
+bookmarks or the features of the back end
+
+00:08:26.780 --> 00:08:27.280
+that I'm using.
+
+00:08:31.200 --> 00:08:31.700
+[Speaker 0]: Okay, thank you for the answer.
+
+00:08:34.440 --> 00:08:34.679
+We have about 7 minutes and we have more
+
+00:08:35.280 --> 00:08:35.780
+questions, so that's great.
+
+00:08:37.440 --> 00:08:37.940
+Moving on to the next 1.
+
+00:08:40.080 --> 00:08:40.240
+Is there a way to search a music selection by
+
+00:08:42.080 --> 00:08:42.240
+lyrics? Assuming those lyrics are in the
+
+00:08:43.580 --> 00:08:44.080
+metadata or are available elsewhere,
+
+00:08:46.300 --> 00:08:46.400
+it would be neat to call songs up from the
+
+00:08:48.660 --> 00:08:49.160
+lyrics to the song. Perhaps is this
+
+00:08:50.860 --> 00:08:51.360
+implemented so that you can all aliases,
+
+00:08:54.560 --> 00:08:54.720
+so they can use aliases for the song that you
+
+00:08:56.640 --> 00:08:57.100
+like, defining those aliases or shortcuts
+
+00:08:58.200 --> 00:08:58.680
+either inside or outside eMMS?
+
+00:08:59.760 --> 00:09:00.060
+Okay, so I think you've got 2 questions.
+
+00:09:01.500 --> 00:09:02.000
+First about the lyrics and then the aliases.
+
+00:09:08.360 --> 00:09:08.560
+[Speaker 1]: Yeah, so it's effectively not possible to do
+
+00:09:10.880 --> 00:09:11.120
+right now. There's a sense in which it is,
+
+00:09:14.820 --> 00:09:15.020
+but not really. What actually needs to
+
+00:09:18.840 --> 00:09:19.320
+happen? The problem is that the caching
+
+00:09:21.780 --> 00:09:22.280
+system is extremely naive.
+
+00:09:24.800 --> 00:09:24.960
+It's just really a hash that's written to
+
+00:09:30.560 --> 00:09:31.060
+disk. And maybe now with SQLite integration
+
+00:09:35.200 --> 00:09:35.380
+or other or just the fact that computers have
+
+00:09:39.220 --> 00:09:39.440
+a lot more speed and space than they used to
+
+00:09:43.340 --> 00:09:43.580
+have, we need to expand the cache to be a lot
+
+00:09:47.020 --> 00:09:47.520
+more greedy and a lot more flexible so that
+
+00:09:52.580 --> 00:09:52.860
+we can store things such as lyrics in as part
+
+00:09:56.000 --> 00:09:56.200
+of the metadata. There's no reason not to do
+
+00:10:02.220 --> 00:10:02.440
+that. Unless your collection would have to be
+
+00:10:06.560 --> 00:10:07.060
+truly enormous in order to slow things down.
+
+00:10:09.860 --> 00:10:10.200
+We wouldn't even need to compress the lyrics
+
+00:10:11.320 --> 00:10:11.820
+in order to store them like that.
+
+00:10:15.920 --> 00:10:16.120
+But that is a goal. So our rewrite of the
+
+00:10:17.840 --> 00:10:18.340
+cache is currently in progress,
+
+00:10:21.680 --> 00:10:21.940
+and the goal is to have a system where you
+
+00:10:24.920 --> 00:10:25.420
+can put any related information,
+
+00:10:30.060 --> 00:10:30.220
+including lyrics, and map that to a
+
+00:10:31.400 --> 00:10:31.900
+particular piece of the media,
+
+00:10:36.900 --> 00:10:37.060
+be it a URL or a... So you could have in a
+
+00:10:40.080 --> 00:10:40.240
+sense, you could have a URL to a lecture and
+
+00:10:44.440 --> 00:10:44.800
+the metadata associated would be some text,
+
+00:10:47.600 --> 00:10:48.100
+some notes or something else like that.
+
+00:10:51.140 --> 00:10:51.380
+[Speaker 0]: Right, so that was about the lyrics.
+
+00:10:53.040 --> 00:10:53.260
+I'm not sure how it answers the question
+
+00:10:54.560 --> 00:10:54.960
+about the aliases. I mean you can still
+
+00:10:56.380 --> 00:10:56.880
+filter what you've mentioned about the cache.
+
+00:10:59.240 --> 00:10:59.440
+I think it's... Do we consider the aliases to
+
+00:11:01.120 --> 00:11:01.620
+be anything within the metadata?
+
+00:11:08.040 --> 00:11:08.540
+[Speaker 1]: No, you're right. That is a separate
+
+00:11:12.380 --> 00:11:12.540
+question. I don't have a great answer for
+
+00:11:12.980 --> 00:11:13.480
+that right now.
+
+00:11:16.280 --> 00:11:16.500
+[Speaker 0]: Okay, great. Well, we'll put a pin on this
+
+00:11:17.440 --> 00:11:17.940
+and we can return to it.
+
+00:11:19.690 --> 00:11:19.840
+You can return to it at a later stage.
+
+00:11:21.880 --> 00:11:22.080
+Yeah. All right, moving on to the next
+
+00:11:22.800 --> 00:11:23.160
+question, then. I'll just,
+
+00:11:25.180 --> 00:11:25.680
+we'll put a pin on this.
+
+00:11:26.420 --> 00:11:26.920
+All right, next question.
+
+00:11:29.020 --> 00:11:29.220
+Are there plans for managing metadata with
+
+00:11:30.040 --> 00:11:30.540
+online resource backends,
+
+00:11:32.020 --> 00:11:32.440
+i.e. Discogs or music brains?
+
+00:11:34.360 --> 00:11:34.540
+What about something like Beats and Emacs or
+
+00:11:34.920 --> 00:11:35.420
+part of the EMMS?
+
+00:11:40.520 --> 00:11:40.640
+[Speaker 1]: Yeah, so that's an active discussion on the
+
+00:11:42.140 --> 00:11:42.640
+mailing list right now.
+
+00:11:47.340 --> 00:11:47.840
+We don't want to replicate what Beats does
+
+00:11:49.680 --> 00:11:50.180
+very, very well in eMMS.
+
+00:11:53.860 --> 00:11:54.360
+We don't want a clunky interface with Beats.
+
+00:11:57.440 --> 00:11:57.940
+We do want some kind of,
+
+00:12:00.100 --> 00:12:00.300
+and so it's hard to tell exactly where to
+
+00:12:03.160 --> 00:12:03.460
+draw that line. So the big answer is yes,
+
+00:12:04.960 --> 00:12:05.460
+absolutely, there is a plan to do that.
+
+00:12:09.760 --> 00:12:10.000
+The details become complicated because for 1
+
+00:12:15.900 --> 00:12:16.200
+thing, the backend, the database that
+
+00:12:18.140 --> 00:12:18.640
+MusicBrain uses, AcoustID,
+
+00:12:21.500 --> 00:12:21.820
+I don't remember if AcoustID is the binary or
+
+00:12:25.680 --> 00:12:25.960
+the database, but that's actually for
+
+00:12:27.500 --> 00:12:28.000
+non-commercial use only.
+
+00:12:31.320 --> 00:12:31.500
+So not only do you need to compile a piece of
+
+00:12:35.280 --> 00:12:35.760
+software on your computer as a shim,
+
+00:12:37.540 --> 00:12:37.680
+which is what you need to do in order to set
+
+00:12:39.180 --> 00:12:39.680
+up beats to do fingerprinting.
+
+00:12:44.720 --> 00:12:45.220
+But it also crosses this line between
+
+00:12:47.660 --> 00:12:47.900
+completely free software to completely free
+
+00:12:49.400 --> 00:12:49.900
+software interfacing with a non-commercial
+
+00:12:56.000 --> 00:12:56.420
+only service. So a lot of the discussion
+
+00:12:58.660 --> 00:12:59.160
+that's going on now is what is the contour?
+
+00:13:02.160 --> 00:13:02.660
+Where would be where we would be effective
+
+00:13:08.720 --> 00:13:09.220
+for EMMS to do management and where not?
+
+00:13:11.600 --> 00:13:12.100
+For 1 thing, I would love to be able to...
+
+00:13:13.980 --> 00:13:14.100
+1 thing that we definitely would love to be
+
+00:13:18.340 --> 00:13:18.540
+able to do is when you hit E on a file and
+
+00:13:21.540 --> 00:13:22.040
+you get all the metadata to be able to then
+
+00:13:23.000 --> 00:13:23.200
+give a command to say,
+
+00:13:25.320 --> 00:13:25.520
+hey, play to music brains and see if you can
+
+00:13:26.200 --> 00:13:26.700
+improve that metadata.
+
+00:13:29.020 --> 00:13:29.520
+Do you have better metadata,
+
+00:13:33.400 --> 00:13:33.680
+more complete metadata to complete that?
+
+00:13:35.840 --> 00:13:36.340
+That is definitely in the pipeline.
+
+00:13:40.900 --> 00:13:41.400
+How best to do it, that's a discussion.
+
+00:13:45.460 --> 00:13:45.840
+[Speaker 0]: Okay, Yoni, we have about 2 minutes until we
+
+00:13:46.960 --> 00:13:47.460
+need to go to the next talk.
+
+00:13:52.960 --> 00:13:53.080
+Okay, I'll risk it. 1 more question and a
+
+00:13:53.800 --> 00:13:54.300
+short answer if you can.
+
+00:13:57.440 --> 00:13:57.860
+Have the developers considered using Emacs
+
+00:13:59.060 --> 00:13:59.560
+customized functionality to persistently
+
+00:14:01.720 --> 00:14:02.120
+store settings when using eMMS setup discover
+
+00:14:02.120 --> 00:14:02.620
+players?
+
+00:14:08.000 --> 00:14:08.460
+[Speaker 1]: Yes, absolutely. That's another active place,
+
+00:14:11.840 --> 00:14:12.340
+especially with the discover players.
+
+00:14:14.440 --> 00:14:14.940
+How to do it exactly without annoying people
+
+00:14:17.840 --> 00:14:18.340
+and clobbering their own settings,
+
+00:14:20.360 --> 00:14:20.680
+we just need to be very careful about that.
+
+00:14:23.040 --> 00:14:23.540
+Yes, that's in the coming releases.
+
+00:14:26.520 --> 00:14:26.940
+[Speaker 0]: All right, well, Younif,
+
+00:14:27.900 --> 00:14:28.400
+thank you so much for your time.
+
+00:14:29.440 --> 00:14:29.640
+Feel free to stay in the room.
+
+00:14:30.920 --> 00:14:31.240
+I see that some people have started joining
+
+00:14:33.720 --> 00:14:34.220
+on BBB. If you have more questions,
+
+00:14:36.780 --> 00:14:37.020
+feel free to unmute yourself and ask them
+
+00:14:39.520 --> 00:14:39.900
+live. Younid, I could ask you also to perhaps
+
+00:14:41.600 --> 00:14:41.760
+answer the question. I've put the link to the
+
+00:14:43.980 --> 00:14:44.480
+pad in the BBB chat, so if you look at the...
+
+00:14:47.220 --> 00:14:47.640
+Here, I think, we're not mirrored on BBB.
+
+00:14:49.080 --> 00:14:49.280
+If you look at the left you should be able to
+
+00:14:51.500 --> 00:14:51.580
+see the chat and the questions and if you
+
+00:14:52.720 --> 00:14:52.840
+could just answer the last question that
+
+00:14:55.440 --> 00:14:55.640
+would be great. For us on the general track
+
+00:14:57.980 --> 00:14:58.180
+we will be moving to the next talk and
+
+00:14:59.700 --> 00:14:59.820
+Yannick do you have any last thing to say in
+
+00:15:02.720 --> 00:15:02.900
+[Speaker 1]: Thank everyone who put together the
+
+00:15:04.320 --> 00:15:04.820
+conference and thank you to everyone who
+
+00:15:06.680 --> 00:15:07.180
+helps with the EMMS.
+
+00:15:08.160 --> 00:15:08.440
+[Speaker 0]: 10 seconds? All right,
+
+00:15:09.160 --> 00:15:09.440
+well, thank you so much,
+
+00:15:10.940 --> 00:15:11.440
+Yoni. We'll probably see you later.
+
+00:15:17.720 --> 00:15:17.860
+Bye-bye. Wonderful. And I think we are off
+
+00:15:18.620 --> 00:15:18.760
+air. Thank you so much,
+
+00:15:20.800 --> 00:15:20.920
+Juni. I need to step out and go take care of
+
+00:15:23.260 --> 00:15:23.760
+[Speaker 1]: Okay, wonderful. Thank you very much.
+
+00:15:24.080 --> 00:15:24.520
+[Speaker 0]: the next talk. Bye-bye.
+
+00:15:25.520 --> 00:15:25.760
+And just to, I forgot to mention,
+
+00:15:27.160 --> 00:15:27.260
+but you can still talk here and everything is
+
+00:15:28.320 --> 00:15:28.620
+still being recorded. So,
+
+00:15:28.880 --> 00:15:28.940
+I'll see you later.
+
+00:15:32.320 --> 00:15:32.820
+[Speaker 2]: Excellent. Bye-bye. Bye.
+
+00:15:35.600 --> 00:15:36.100
+[Speaker 3]: Oh, hello.
+
+00:15:40.600 --> 00:15:41.100
+[Speaker 1]: Wait, you're still, I cannot hear you yet.
+
+00:15:42.900 --> 00:15:43.080
+[Speaker 4]: You are currently the only person in this
+
+00:15:43.080 --> 00:15:43.580
+conference.
+
+00:16:12.600 --> 00:16:12.780
+[Speaker 2]: Okay.
+
+00:16:18.120 --> 00:16:18.400
+[Speaker 3]: Can you hear me now? I just wanted to say hi
+
+00:16:19.840 --> 00:16:20.320
+and thank you. My name's Grant.
+
+00:16:23.740 --> 00:16:24.220
+I've, you helped me contribute to EMMS maybe
+
+00:16:26.820 --> 00:16:26.980
+2 or 3 years ago. I was trying to do the
+
+00:16:28.480 --> 00:16:28.980
+[Speaker 2]: So,
+
+00:16:29.340 --> 00:16:29.840
+[Speaker 3]: track tag stuff. yeah.
+
+00:16:32.148 --> 00:16:32.571
+So I just wanted to say thank you.
+
+00:16:35.400 --> 00:16:35.680
+[Speaker 1]: Thank you for continuing and going through
+
+00:16:38.560 --> 00:16:38.680
+that entire process. I know that 1 of the
+
+00:16:40.380 --> 00:16:40.520
+things that happens is that people want to
+
+00:16:43.940 --> 00:16:44.440
+contribute, but it's not as slick as GitHub
+
+00:16:46.080 --> 00:16:46.580
+and stuff like that, especially with the
+
+00:16:53.400 --> 00:16:53.900
+copper assignment. And objectively,
+
+00:16:56.920 --> 00:16:57.420
+it's not that. It's just harder than what
+
+00:16:58.680 --> 00:16:59.180
+they imagine it might be.
+
+00:17:01.500 --> 00:17:01.680
+[Speaker 3]: Yeah. Well, I appreciate it.
+
+00:17:03.340 --> 00:17:03.440
+I think you're doing a wonderful job as a
+
+00:17:07.200 --> 00:17:07.660
+maintainer. I still hang out on the list and
+
+00:17:09.380 --> 00:17:09.880
+enjoy listening in on the discussions.
+
+00:17:09.960 --> 00:17:10.460
+So.
+
+00:17:14.240 --> 00:17:14.626
+[Speaker 2]: Yeah. But that's it. I think that's it.
+
+00:17:16.700 --> 00:17:17.200
+I think that's it. And I think that's it.
+
+00:17:17.640 --> 00:17:17.890
+And I think that's it.
+
+00:17:23.339 --> 00:17:23.660
+I appreciate it. And I'll leave you to all of
+
+00:17:27.781 --> 00:17:27.811
+you to go on from being a product.
+
+00:17:28.088 --> 00:17:28.118
+And that she valued to all of us long term
+
+00:17:28.180 --> 00:17:28.680
+being a project.
+
+00:17:31.460 --> 00:17:31.960
+[Speaker 1]: If you're not super duper active,
+
+00:17:33.420 --> 00:17:33.720
+being there long term,
+
+00:17:37.360 --> 00:17:37.860
+people tend to find it easier trying to
+
+00:17:40.840 --> 00:17:41.060
+continue contributing to the project if
+
+00:17:42.360 --> 00:17:42.620
+there's a consistency there,
+
+00:17:43.520 --> 00:17:44.020
+if there isn't a churn,
+
+00:17:47.720 --> 00:17:48.160
+if there is a kind of a core group.
+
+00:17:52.440 --> 00:17:52.940
+I guess it's like, you think it's constant.
+
+00:17:58.280 --> 00:17:58.780
+Eliezer Etzke and RMS,
+
+00:18:00.420 --> 00:18:00.920
+whatever on the next mailing list,
+
+00:18:03.040 --> 00:18:03.540
+You know, okay, there are certain people that
+
+00:18:05.600 --> 00:18:05.800
+I think so. So thank you for that.
+
+00:18:06.340 --> 00:18:06.840
+That's very important.
+
+00:18:07.540 --> 00:18:08.040
+That helps.
+
+00:18:12.560 --> 00:18:12.940
+[Speaker 3]: Yeah, I'm, I feel like when I started using
+
+00:18:14.180 --> 00:18:14.540
+EMMS several years ago,
+
+00:18:16.500 --> 00:18:16.820
+it's, it's improved a lot since then.
+
+00:18:19.540 --> 00:18:20.040
+And I notice your focus on helping new users
+
+00:18:22.540 --> 00:18:22.800
+get started quickly. And I think the talk
+
+00:18:23.840 --> 00:18:24.160
+today will help with that too.
+
+00:18:24.160 --> 00:18:24.660
+So
+
+00:18:32.380 --> 00:18:32.700
+[Speaker 1]: yeah, I want to put you know,
+
+00:18:33.860 --> 00:18:34.360
+the, especially the TLDR,
+
+00:18:37.500 --> 00:18:37.640
+like how to start it on the link that to the
+
+00:18:44.080 --> 00:18:44.380
+website, find somehow that we can get on to
+
+00:18:52.900 --> 00:18:53.400
+prepare for that. And this together.
+
+00:18:54.700 --> 00:18:55.200
+Now, question for you,
+
+00:18:58.260 --> 00:18:58.620
+Where would you like to see EMMS go?
+
+00:18:59.440 --> 00:18:59.820
+Where do you see it landing?
+
+00:19:02.780 --> 00:19:02.900
+What do you feel like this is what this is
+
+00:19:04.540 --> 00:19:05.040
+we're sorely missing these things?
+
+00:19:09.740 --> 00:19:10.240
+[Speaker 3]: I don't know. I mean, I picked it up,
+
+00:19:13.540 --> 00:19:13.940
+because I both use it to play my music
+
+00:19:17.100 --> 00:19:17.320
+collection, but also, like I record my own
+
+00:19:20.140 --> 00:19:20.320
+music. And I wanted to be able to edit my
+
+00:19:23.500 --> 00:19:24.000
+metadata in Emacs, because editing metadata
+
+00:19:29.100 --> 00:19:29.220
+elsewhere sucks. And so that's kind of why I
+
+00:19:30.280 --> 00:19:30.560
+got involved with that.
+
+00:19:33.440 --> 00:19:33.940
+And I was like, being able to edit metadata,
+
+00:19:37.580 --> 00:19:37.900
+especially for content that maybe you're
+
+00:19:41.760 --> 00:19:42.180
+creating or because I have a bunch of files
+
+00:19:44.340 --> 00:19:44.700
+of just unlabeled stuff I've recorded on,
+
+00:19:45.340 --> 00:19:45.780
+you know, different quarters,
+
+00:19:47.440 --> 00:19:47.520
+things like that. So that's kind of where I
+
+00:19:50.320 --> 00:19:50.740
+was focusing on it. It's the only media tool
+
+00:19:52.540 --> 00:19:52.720
+that lets me do that, you know,
+
+00:19:54.520 --> 00:19:54.940
+I can play the music back and have quick
+
+00:19:58.260 --> 00:19:58.380
+editing. So I know there was a couple of
+
+00:20:00.860 --> 00:20:01.120
+things we had talked about in terms of maybe
+
+00:20:03.260 --> 00:20:03.480
+improving kind of the user interface for the
+
+00:20:05.440 --> 00:20:05.940
+tag editor, things like that.
+
+00:20:09.300 --> 00:20:09.600
+So I don't have any grand visions for where
+
+00:20:15.660 --> 00:20:15.800
+EMMS should go. I know pretty much all the
+
+00:20:16.920 --> 00:20:17.420
+things I've heard about it already.
+
+00:20:20.200 --> 00:20:20.700
+You can hook up to GNU FM,
+
+00:20:21.940 --> 00:20:22.440
+the Scrabbling Service,
+
+00:20:23.200 --> 00:20:23.700
+and all that kind of stuff.
+
+00:20:26.920 --> 00:20:27.180
+I don't really feel like it's missing much,
+
+00:20:29.020 --> 00:20:29.280
+especially being able to choose the back
+
+00:20:31.880 --> 00:20:32.320
+ends. I guess, if anything,
+
+00:20:34.960 --> 00:20:35.220
+it's the interface. How can it be even more
+
+00:20:38.160 --> 00:20:38.660
+intuitive for users? And I think that,
+
+00:20:41.500 --> 00:20:41.820
+you know, we need more people playing around
+
+00:20:43.380 --> 00:20:43.880
+with it, I guess. Yeah.
+
+00:20:46.220 --> 00:20:46.420
+[Speaker 2]: I think a really good
+
+00:20:47.520 --> 00:20:47.800
+[Speaker 1]: Well, yeah. example of that is,
+
+00:20:49.240 --> 00:20:49.600
+because I'm sure there are lots of people
+
+00:20:50.440 --> 00:20:50.740
+playing around with it,
+
+00:20:51.460 --> 00:20:51.960
+arriving at a conclusion,
+
+00:20:53.860 --> 00:20:54.360
+keeping it to themselves and moving on.
+
+00:20:59.160 --> 00:20:59.300
+Yeah. Which, and I know that a lot of bits of
+
+00:21:01.820 --> 00:21:02.160
+software put a send a bug report feature in
+
+00:21:04.660 --> 00:21:05.020
+and stuff like that and no 1 uses those
+
+00:21:07.600 --> 00:21:08.000
+either. So that's the frictional cost.
+
+00:21:10.440 --> 00:21:10.940
+I think the context switch for people between
+
+00:21:16.120 --> 00:21:16.360
+this doesn't work to actually formulating in
+
+00:21:17.840 --> 00:21:18.340
+words what didn't work,
+
+00:21:21.380 --> 00:21:21.600
+that is a very expensive context which most
+
+00:21:24.800 --> 00:21:24.980
+people will not do. And we're poorer for
+
+00:21:32.220 --> 00:21:32.660
+that. So, I think that when we integrate
+
+00:21:34.740 --> 00:21:35.240
+music brains and other things like that into.
+
+00:21:37.460 --> 00:21:37.960
+Now, of course, music brains will probably,
+
+00:21:41.200 --> 00:21:41.380
+it would be very funny if you pull up your
+
+00:21:43.480 --> 00:21:43.660
+stuff, right? Something that you wrote and
+
+00:21:46.080 --> 00:21:46.280
+you say, hey, music brains match this and
+
+00:21:48.600 --> 00:21:49.000
+it's not there, then it'll probably suggest
+
+00:21:51.720 --> 00:21:52.220
+[Speaker 3]: Yeah, I've heard that.
+
+00:21:52.660 --> 00:21:52.940
+[Speaker 1]: some wild things. Yeah,
+
+00:21:58.260 --> 00:21:58.400
+because there are, there was a system I was
+
+00:22:02.060 --> 00:22:02.220
+looking at its code for researching stuff for
+
+00:22:04.480 --> 00:22:04.700
+EMS And I'm trying to remember what it's
+
+00:22:05.720 --> 00:22:06.040
+named. It begins with a J,
+
+00:22:07.160 --> 00:22:07.660
+it's this media player,
+
+00:22:13.780 --> 00:22:13.940
+free floss media player that it's like a
+
+00:22:17.020 --> 00:22:17.520
+media server that can cast to a television
+
+00:22:20.940 --> 00:22:21.220
+and stuff like that. And I asked it to
+
+00:22:24.280 --> 00:22:24.780
+automatically label things and the results
+
+00:22:28.180 --> 00:22:28.380
+were horrible. It thought that half of my
+
+00:22:32.960 --> 00:22:33.400
+songs were movies. It thought that JPEGs were
+
+00:22:35.800 --> 00:22:36.220
+songs. It just, it did some,
+
+00:22:40.520 --> 00:22:41.020
+it did incredibly, it's not a solved problem,
+
+00:22:44.660 --> 00:22:45.160
+I think. So the, what I'm thinking with
+
+00:22:49.340 --> 00:22:49.540
+MusicBrainz and those services is that you
+
+00:22:51.840 --> 00:22:52.240
+hit a button and you have you get another
+
+00:22:57.040 --> 00:22:57.240
+pane with a suggestion and you either and you
+
+00:22:59.060 --> 00:22:59.240
+can copy through you can say okay copy this
+
+00:23:01.560 --> 00:23:01.760
+and this in this field over or reject the
+
+00:23:03.960 --> 00:23:04.460
+suggestion and maybe get another 1.
+
+00:23:04.940 --> 00:23:05.280
+So,
+
+00:23:07.360 --> 00:23:07.660
+[Speaker 3]: Yeah, I like that a lot.
+
+00:23:09.160 --> 00:23:09.480
+That's more like a diff,
+
+00:23:11.280 --> 00:23:11.640
+right? Like you get the diff between the 2
+
+00:23:13.540 --> 00:23:14.040
+and you can apply which changes you like.
+
+00:23:15.580 --> 00:23:16.080
+Yeah. Was it Jellyfin?
+
+00:23:18.220 --> 00:23:18.720
+Is that... Jellyfin? Yeah,
+
+00:23:19.460 --> 00:23:19.960
+[Speaker 1]: Jellyfin, yes.
+
+00:23:22.340 --> 00:23:22.840
+[Speaker 3]: Yeah, And when that happened,
+
+00:23:24.960 --> 00:23:25.460
+did it clobber all your metadata?
+
+00:23:27.440 --> 00:23:27.940
+Or does it just label stuff?
+
+00:23:28.860 --> 00:23:29.360
+[Speaker 2]: No, it...
+
+00:23:38.240 --> 00:23:38.740
+[Speaker 1]: Escalate things somewhere inside it and to
+
+00:23:49.020 --> 00:23:49.340
+looking for really, not allow me to do very
+
+00:23:54.640 --> 00:23:55.080
+easily. So I was, so, you know,
+
+00:23:56.660 --> 00:23:56.960
+on 1 hand, it makes me feel,
+
+00:23:58.980 --> 00:23:59.120
+oh, we're not the only ones dealing with
+
+00:24:00.680 --> 00:24:00.840
+this. We're not the only ones struggling with
+
+00:24:01.440 --> 00:24:01.800
+this. On the other hand,
+
+00:24:05.660 --> 00:24:05.820
+it would be nice if that's a paragon that we
+
+00:24:08.460 --> 00:24:08.680
+can look to and say, this is a wonderful way
+
+00:24:11.320 --> 00:24:11.540
+of doing it. Let's incorporate as much of
+
+00:24:15.180 --> 00:24:15.520
+[Speaker 3]: Yeah, it's a tricky problem,
+
+00:24:18.220 --> 00:24:18.620
+especially if you're modifying people's media
+
+00:24:19.780 --> 00:24:20.280
+files you know so
+
+00:24:23.040 --> 00:24:23.420
+[Speaker 1]: that as we can. yeah I'm also very convinced
+
+00:24:31.560 --> 00:24:32.060
+that so I'm not a mainframe for MMS because
+
+00:24:35.020 --> 00:24:35.520
+I'm old and curmudgeonly essentially in my,
+
+00:24:37.660 --> 00:24:37.900
+in the way they do it.
+
+00:24:40.080 --> 00:24:40.520
+And honestly, I rarely ever,
+
+00:24:42.780 --> 00:24:43.180
+I use the MMS browser when I need to debug
+
+00:24:44.240 --> 00:24:44.660
+the MS browser. I don't,
+
+00:24:48.740 --> 00:24:49.240
+I use very simple commands and I even rarely
+
+00:24:50.440 --> 00:24:50.940
+look at the playlists.
+
+00:24:53.940 --> 00:24:54.220
+That was 1 of the things because when I got
+
+00:24:56.680 --> 00:24:57.100
+into MMS originally when my eyesight started
+
+00:24:59.640 --> 00:25:00.140
+going so I had to rely less and less on GUI
+
+00:25:02.800 --> 00:25:03.300
+interfaces. So that was,
+
+00:25:06.340 --> 00:25:06.840
+so to this day that's how I use EMMS.
+
+00:25:08.560 --> 00:25:09.060
+[Speaker 3]: Yeah, it's interesting.
+
+00:25:13.260 --> 00:25:13.760
+I remember running into a browser bug because
+
+00:25:15.480 --> 00:25:15.980
+I think just my age, like,
+
+00:25:18.120 --> 00:25:18.340
+I want to be able to tab through and like
+
+00:25:20.060 --> 00:25:20.560
+that was a huge that that changed recently
+
+00:25:22.640 --> 00:25:22.800
+right where you tab and it unfolds in the
+
+00:25:27.620 --> 00:25:27.980
+browser but yeah I realized that people use
+
+00:25:30.600 --> 00:25:31.100
+emms in so many different ways just like any
+
+00:25:36.020 --> 00:25:36.220
+piece of emacs there's there's many ways to
+
+00:25:39.960 --> 00:25:40.440
+do it but appreciate your time I'm gonna
+
+00:25:41.880 --> 00:25:42.260
+actually put together this Christmas tree
+
+00:25:43.400 --> 00:25:43.900
+[Speaker 0]: So. Wonderful.
+
+00:25:45.260 --> 00:25:45.660
+[Speaker 3]: behind me. Yeah, just wanted to say hi,
+
+00:25:50.900 --> 00:25:51.400
+meet you in person. But yeah.
+
+00:25:54.340 --> 00:25:54.840
+[Speaker 1]: Yeah, excellent. I appreciate it a lot and we
+
+00:25:55.080 --> 00:25:55.580
+generate
+
+00:25:59.960 --> 00:26:00.260
+[Speaker 2]: some interesting questions.
+
+00:26:00.780 --> 00:26:01.280
+Yeah, thank you.
+
+00:26:03.760 --> 00:26:03.960
+[Speaker 4]: You are currently the only person in this
+
+00:26:03.960 --> 00:26:04.460
+conference.
+
+00:26:13.480 --> 00:26:13.980
+[Speaker 1]: I'm going to have a look at the questions
+
+00:26:14.060 --> 00:26:14.560
+here.
+
+00:26:29.440 --> 00:26:29.940
+Let's see. Let's see. So there is,
+
+00:26:32.900 --> 00:26:33.260
+okay. There's a question here.
+
+00:26:34.540 --> 00:26:34.680
+I like what you said about balancing the
+
+00:26:36.140 --> 00:26:36.380
+concern for software freedom with the worry
+
+00:26:38.360 --> 00:26:38.560
+that this might alienate the package user.
+
+00:26:39.960 --> 00:26:40.120
+I wonder if you have advice for other
+
+00:26:41.720 --> 00:26:41.820
+maintainers how to communicate this sort of
+
+00:26:43.660 --> 00:26:44.120
+thing diplomatically? Yes,
+
+00:26:45.660 --> 00:26:46.160
+when you have to deny implementing a feature
+
+00:26:48.480 --> 00:26:48.980
+for a freedom reason. This in fact happens
+
+00:26:56.140 --> 00:26:56.320
+all the time. A recent example of this was a
+
+00:26:58.380 --> 00:26:58.580
+YouTube download, right,
+
+00:26:59.540 --> 00:27:00.040
+the YouTube download feature.
+
+00:27:04.040 --> 00:27:04.540
+At the time, okay, so stepping back,
+
+00:27:07.440 --> 00:27:07.940
+the request was to have a YouTube download
+
+00:27:11.940 --> 00:27:12.440
+feature integrated strongly into eMMS so that
+
+00:27:16.260 --> 00:27:16.640
+you put in a YouTube URL and you can download
+
+00:27:17.640 --> 00:27:18.140
+the video and play it.
+
+00:27:22.080 --> 00:27:22.280
+And the question isn't really whether you can
+
+00:27:24.660 --> 00:27:25.120
+chain YouTube Downloader or 1 of those things
+
+00:27:26.600 --> 00:27:27.100
+into your EMMS configuration.
+
+00:27:28.140 --> 00:27:28.520
+You can do whatever you want.
+
+00:27:30.840 --> 00:27:31.340
+But the question is, does EMMS actually
+
+00:27:33.340 --> 00:27:33.740
+integrate with it really,
+
+00:27:35.740 --> 00:27:36.040
+really strongly to the extent where it tells
+
+00:27:37.800 --> 00:27:38.140
+you oh you don't need to download install
+
+00:27:40.320 --> 00:27:40.820
+please go ahead and install that or whatever
+
+00:27:43.740 --> 00:27:44.180
+and at the time we checked it we found out
+
+00:27:45.800 --> 00:27:46.120
+that you know the version that we were
+
+00:27:49.280 --> 00:27:49.780
+looking at of the YouTube download or YTDLP
+
+00:27:51.720 --> 00:27:52.220
+or whatever it was called,
+
+00:27:56.200 --> 00:27:56.580
+actually downloaded a good amount of
+
+00:27:59.200 --> 00:27:59.540
+proprietary JavaScript onto your machine and
+
+00:28:02.300 --> 00:28:02.480
+ran it, just as if you were going on to the
+
+00:28:06.560 --> 00:28:06.880
+YouTube page, which is not for me to tell
+
+00:28:09.980 --> 00:28:10.480
+people not to do if they want to do that,
+
+00:28:16.240 --> 00:28:16.460
+but it's absolutely for me not to cause to
+
+00:28:18.540 --> 00:28:19.040
+happen on the user's machine without them.
+
+00:28:21.480 --> 00:28:21.660
+1 of the last thing that I want to do in the
+
+00:28:25.980 --> 00:28:26.180
+world is have a user inside Emacs press a
+
+00:28:29.760 --> 00:28:30.160
+button and have proprietary software get
+
+00:28:32.300 --> 00:28:32.540
+downloaded behind their back and run on their
+
+00:28:38.240 --> 00:28:38.420
+machine that would be disastrous so we had to
+
+00:28:41.380 --> 00:28:41.600
+say no we had to say that's I'm sorry that's
+
+00:28:47.060 --> 00:28:47.380
+beyond the pale and in fact in doing so some
+
+00:28:51.100 --> 00:28:51.420
+people who were using this system said,
+
+00:28:53.900 --> 00:28:54.400
+actually I had no idea it was doing this
+
+00:28:56.660 --> 00:28:57.040
+behind my back. I thought it was just magic.
+
+00:28:58.860 --> 00:28:59.360
+I thought it was a YouTube video without any
+
+00:29:01.580 --> 00:29:01.780
+freedom issues. I'm going to look into it or
+
+00:29:03.120 --> 00:29:03.620
+I'm going to stop using it.
+
+00:29:11.180 --> 00:29:11.680
+So my advice would be Stand firm and just be
+
+00:29:15.040 --> 00:29:15.380
+Not not preachy. Don't tell people what they
+
+00:29:19.580 --> 00:29:19.960
+need to do be very clear about what you stand
+
+00:29:21.900 --> 00:29:22.400
+for and what the project stands for,
+
+00:29:28.660 --> 00:29:28.940
+and so they very clearly know where you
+
+00:29:30.460 --> 00:29:30.960
+stand. And I think that people actually
+
+00:29:36.540 --> 00:29:37.040
+appreciate that more than a political answer,
+
+00:29:43.540 --> 00:29:44.040
+right? That has been my experience.
+
+00:29:49.800 --> 00:29:50.000
+Now, excuse me, taking into account that 1 or
+
+00:29:52.200 --> 00:29:52.700
+2 people will tell you,
+
+00:29:54.960 --> 00:29:55.440
+this is terrible. I'm leaving.
+
+00:30:00.550 --> 00:30:00.625
+[Speaker 2]: If you do this,
+
+00:30:01.460 --> 00:30:01.620
+[Speaker 1]: This is useless. you're free software or
+
+00:30:03.400 --> 00:30:03.900
+whatever, and just leave.
+
+00:30:05.860 --> 00:30:06.360
+But some people are ornery.
+
+00:30:09.360 --> 00:30:09.620
+That's not necessarily something bad that you
+
+00:30:11.680 --> 00:30:12.180
+did. But that has happened.
+
+00:30:14.200 --> 00:30:14.700
+There are multiple stories.
+
+00:30:16.840 --> 00:30:17.080
+Because the MMS is so old,
+
+00:30:20.080 --> 00:30:20.580
+there are multiple points in which non-free
+
+00:30:23.940 --> 00:30:24.140
+software intersected with the EMS because of
+
+00:30:28.580 --> 00:30:28.820
+multimedia and we had to go the other
+
+00:30:33.300 --> 00:30:33.800
+direction and so far it has served EMS well
+
+00:30:38.240 --> 00:30:38.740
+like the project has died as a result.
+
+00:30:39.800 --> 00:30:40.200
+Of course, can't prove a negative,
+
+00:30:42.040 --> 00:30:42.540
+don't know where we would be if we had taken,
+
+00:30:44.760 --> 00:30:44.860
+gone down that route. I'm pretty sure we
+
+00:30:46.100 --> 00:30:46.600
+would need a new ELPA,
+
+00:30:50.860 --> 00:30:51.360
+and I think being so clearly integrated with
+
+00:30:55.040 --> 00:30:55.540
+emacs is a huge benefit to eMMS because it's
+
+00:30:57.660 --> 00:30:58.160
+it allows people to install it very easily.
+
+00:31:08.760 --> 00:31:09.020
+And those are all the questions that I can
+
+00:31:09.020 --> 00:31:09.520
+see.
+
+00:31:15.060 --> 00:31:15.560
+[Speaker 2]: You
diff --git a/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt
new file mode 100644
index 00000000..f183a115
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt
@@ -0,0 +1,80 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:03.319
+Introduction
+
+00:01:03.320 --> 00:01:21.319
+The structure of this talk
+
+00:01:21.320 --> 00:08:04.239
+Introduction to Emms: The practical part
+
+00:08:04.240 --> 00:11:01.199
+The modeline
+
+00:11:01.200 --> 00:11:29.859
+Meta-playlist mode
+
+00:11:29.860 --> 00:13:19.919
+The browser
+
+00:13:19.920 --> 00:16:23.819
+How Emms works: The technical part
+
+00:16:23.820 --> 00:16:36.439
+The Emms core
+
+00:16:36.440 --> 00:17:18.459
+Tracks
+
+00:17:18.460 --> 00:18:22.079
+Playlist
+
+00:18:22.080 --> 00:19:22.159
+Sources
+
+00:19:22.160 --> 00:20:20.519
+Players
+
+00:20:20.520 --> 00:21:36.659
+Info
+
+00:21:36.660 --> 00:22:51.619
+The cache
+
+00:22:51.620 --> 00:23:31.559
+Healthy back and forth: mpv, mpd, and GNU.FM
+
+00:23:31.560 --> 00:24:47.469
+MPV
+
+00:24:47.470 --> 00:26:07.439
+MPD
+
+00:26:07.440 --> 00:27:12.559
+GNU FM and Libre FM
+
+00:27:12.560 --> 00:28:52.589
+How we work: Emms development
+
+00:28:52.590 --> 00:29:06.079
+The Rime Of The Ancient Maintainer
+
+00:29:06.080 --> 00:31:24.079
+The life and times of an Emms patch
+
+00:31:24.080 --> 00:32:23.399
+Let It Go: The release process
+
+00:32:23.400 --> 00:34:44.848
+It Is Not In Our Stars, But In Ourselves: Future directions
+
+00:34:44.849 --> 00:36:05.979
+Development policies: Interface language
+
+00:36:05.980 --> 00:38:12.369
+Development policies: Freedom
+
+00:38:12.370 --> 00:38:38.040
+Acknowledgements
diff --git a/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt
new file mode 100644
index 00000000..ecbed3fb
--- /dev/null
+++ b/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt
@@ -0,0 +1,2048 @@
+WEBVTT captioned by yoni, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:05.399
+The Sound of Emacs, Emms, The Emacs Multimedia System.
+
+00:00:05.400 --> 00:00:09.159
+Hi, I'm Yoni Rabkin and I'll be talking about Emms;
+
+00:00:09.160 --> 00:00:11.519
+the Emacs Multimedia System.
+
+00:00:11.520 --> 00:00:14.559
+What is Emms?
+
+00:00:14.560 --> 00:00:18.119
+Emms displays and plays media from within Emacs
+
+00:00:18.120 --> 00:00:20.519
+using a variety of external players
+
+00:00:20.520 --> 00:00:23.539
+and from different media sources.
+
+00:00:23.540 --> 00:00:26.679
+Emms can run as a minimalistic player
+
+00:00:26.680 --> 00:00:28.559
+which is controlled with no more than
+
+00:00:28.560 --> 00:00:31.119
+a handful of simple M-x commands,
+
+00:00:31.120 --> 00:00:36.059
+or as a fully-fledged interactive media browser and player.
+
+00:00:36.060 --> 00:00:40.639
+Emms can display album art, play streaming audio,
+
+00:00:40.640 --> 00:00:43.439
+tag music files, search for lyrics,
+
+00:00:43.440 --> 00:00:46.679
+provide MPD connectivity, control the volume,
+
+00:00:46.680 --> 00:00:49.619
+and more. Much more.
+
+00:00:49.620 --> 00:00:53.879
+The Emms project acts like Emacs in microcosm.
+
+00:00:53.880 --> 00:00:56.559
+It slowly but surely grows bigger
+
+00:00:56.560 --> 00:00:58.479
+and gets ever more features.
+
+00:00:58.480 --> 00:01:03.319
+Perhaps Emms will one day even have a text editor.
+
+NOTE The structure of this talk
+
+00:01:03.320 --> 00:01:05.599
+The structure of this talk:
+
+00:01:05.600 --> 00:01:08.159
+We'll start with an introduction to Emms.
+
+00:01:08.160 --> 00:01:10.559
+This is the practical part.
+
+00:01:10.560 --> 00:01:15.879
+Then, a bit about how Emms works. That's the technical part.
+
+00:01:15.880 --> 00:01:21.319
+Finally, how we work. All about Emms development.
+
+NOTE Introduction to Emms: The practical part
+
+00:01:21.320 --> 00:01:25.020
+Introduction to Emms: The practical part:
+
+00:01:25.021 --> 00:01:28.679
+I want this talk to be of immediate use to people,
+
+00:01:28.680 --> 00:01:33.519
+so I'm going to present a quick TL;DR of the Emms manual
+
+00:01:33.520 --> 00:01:36.399
+concerning installation and use.
+
+00:01:36.400 --> 00:01:38.439
+By the end of this part you should be able to
+
+00:01:38.440 --> 00:01:45.279
+install, configure, and use Emms in a variety of ways.
+
+00:01:45.280 --> 00:01:48.119
+Where can I get Emms?
+
+00:01:48.120 --> 00:01:54.319
+Emms is distributed primarily via GNU ELPA.
+
+00:01:54.320 --> 00:02:02.079
+So it's really only a M-x list-packages away at any moment.
+
+00:02:02.080 --> 00:02:07.719
+There's also a website hosted at gnu.org.
+
+00:02:07.720 --> 00:02:11.019
+Among other things on the website, you'll find
+
+00:02:11.020 --> 00:02:21.279
+a copy of the friendly, robust, and up-to-date user manual.
+
+00:02:21.280 --> 00:02:25.919
+Installing Emms has become progressively easier over time
+
+00:02:25.920 --> 00:02:28.719
+and will continue to get easier.
+
+00:02:28.720 --> 00:02:32.559
+In the bad old days, it required downloading a tarball
+
+00:02:32.560 --> 00:02:35.059
+and compiling a C language shim
+
+00:02:35.060 --> 00:02:38.919
+to enable reading metadata from media files.
+
+00:02:38.920 --> 00:02:43.359
+But those days are long gone, and installing Emms is now
+
+00:02:43.360 --> 00:02:47.039
+as easy as invoking M-x list-packages,
+
+00:02:47.040 --> 00:02:51.839
+installing the Emms package, and placing as few as
+
+00:02:51.840 --> 00:02:57.719
+2 or 3 lines of configuration in your Emacs initialization.
+
+00:02:57.720 --> 00:03:02.839
+So after the package is installed via ELPA,
+
+00:03:02.840 --> 00:03:08.439
+you can add these few lines.
+
+00:03:08.440 --> 00:03:12.359
+`emms-all` will make available all of the stable features
+
+00:03:12.360 --> 00:03:15.739
+which are shipped with Emms.
+
+00:03:15.740 --> 00:03:20.839
+The `emms-player-list` variable is a list of players
+
+00:03:20.840 --> 00:03:25.599
+like MPV, MPlayer, VLC, etc.
+
+00:03:25.600 --> 00:03:29.399
+Emms will call and control these external players
+
+00:03:29.400 --> 00:03:31.999
+to play your media.
+
+00:03:32.000 --> 00:03:36.659
+The variable `emms-info-functions` is a list of ways
+
+00:03:36.660 --> 00:03:40.959
+for Emms to read the metadata in your media files
+
+00:03:40.960 --> 00:03:45.279
+so that Emms can display song title, artist name,
+
+00:03:45.280 --> 00:03:49.479
+year of production, etc.
+
+00:03:49.480 --> 00:03:55.199
+The `emms-info-native` feature in the setup example
+
+00:03:55.200 --> 00:03:58.159
+is the built-in metadata reader
+
+00:03:58.160 --> 00:04:01.799
+written entirely in Emacs Lisp.
+
+00:04:01.800 --> 00:04:04.239
+But there are also other backends
+
+00:04:04.240 --> 00:04:07.719
+which can call external programs for info
+
+00:04:07.720 --> 00:04:14.719
+such as TinyTag, the TagLib library, exiftool, and so on.
+
+00:04:14.720 --> 00:04:17.559
+You can then old-school restart your Emacs
+
+00:04:17.560 --> 00:04:22.799
+or simply evaluate the above couple of lines to get going.
+
+00:04:22.800 --> 00:04:26.279
+Now that we have Emms installed and configured,
+
+00:04:26.280 --> 00:04:29.239
+we should load some media for player.
+
+00:04:29.240 --> 00:04:32.719
+There are multiple ways to load media into Emms for playing.
+
+00:04:32.720 --> 00:04:36.279
+They can be directories with local files,
+
+00:04:36.280 --> 00:04:38.519
+synchronized from a remote instance of
+
+00:04:38.520 --> 00:04:44.719
+a music player daemon, PLS or M3U playlists,
+
+00:04:44.720 --> 00:04:47.439
+a list of URLs for streaming,
+
+00:04:47.440 --> 00:04:51.119
+or even Emms' own native playlist format
+
+00:04:51.120 --> 00:04:57.199
+which is unsurprisingly a just serialized Emacs Lisp.
+
+00:04:57.200 --> 00:05:00.199
+No matter how you add tracks to Emms,
+
+00:05:00.200 --> 00:05:03.879
+you'll end up with a playlist.
+
+00:05:03.880 --> 00:05:08.959
+A fundamental strength of Emms is that each playlist
+
+00:05:08.960 --> 00:05:13.479
+is a regular Emacs buffer and the track listing therein
+
+00:05:13.480 --> 00:05:17.859
+is nothing more than text lines with property overlays.
+
+00:05:17.860 --> 00:05:21.359
+This means that you can navigate, search, copy,
+
+00:05:21.360 --> 00:05:24.879
+and edit an Emms playlist buffer
+
+00:05:24.880 --> 00:05:28.679
+just as you would any Emacs buffer.
+
+00:05:28.680 --> 00:05:31.319
+If you want to reorganize the tracks in the playlist,
+
+00:05:31.320 --> 00:05:33.959
+then you can simply kill yank the tracks
+
+00:05:33.960 --> 00:05:36.759
+just as you would any buffer with lines of text,
+
+00:05:36.760 --> 00:05:42.959
+and the same can be done between multiple playlist buffers.
+
+00:05:42.960 --> 00:05:46.119
+One of the most straightforward ways to add media
+
+00:05:46.120 --> 00:05:51.939
+is to invoke a command like `M-x emms-add-directory-tree`.
+
+00:05:51.940 --> 00:05:55.679
+You can point it to the top of a set of directories
+
+00:05:55.680 --> 00:06:00.279
+with playable files for Emms to traverse.
+
+00:06:00.280 --> 00:06:05.199
+Another rather convenient method is to mark files in Dired
+
+00:06:05.200 --> 00:06:09.679
+and to invoke `emms-add-dired`.
+
+00:06:09.680 --> 00:06:11.679
+I definitely use this one a lot.
+
+00:06:11.680 --> 00:06:16.119
+The Emms playlist mode binds
+
+00:06:16.120 --> 00:06:19.879
+a number of useful keys and commands.
+
+00:06:19.880 --> 00:06:23.959
+It's highly recommended that you either
+
+00:06:23.960 --> 00:06:25.959
+read the friendly manual
+
+00:06:25.960 --> 00:06:32.319
+or hit "C-h m" in a playlist buffer to discover them.
+
+00:06:32.320 --> 00:06:35.959
+Now we have a playlist buffer with a number of tracks,
+
+00:06:35.960 --> 00:06:40.819
+so the next step is going to be playback.
+
+00:06:40.820 --> 00:06:44.399
+Emms can be used as a minimalistic player
+
+00:06:44.400 --> 00:06:48.319
+with nothing more than a handful of commands.
+
+00:06:48.320 --> 00:06:51.359
+Once there is a current Emms playlist,
+
+00:06:51.360 --> 00:06:57.559
+invoking emms-start will begin playing the current track.
+
+00:06:57.560 --> 00:07:00.039
+Now of course in a new playlist
+
+00:07:00.040 --> 00:07:02.579
+that would be the first track.
+
+00:07:02.580 --> 00:07:07.199
+Now emms-next, emms-pause, and emms-stop
+
+00:07:07.200 --> 00:07:11.259
+do exactly what you think they do.
+
+00:07:11.260 --> 00:07:13.199
+To visit the current playlist,
+
+00:07:13.200 --> 00:07:17.639
+you can invoke M-x emms-playlist-mode-go,
+
+00:07:17.640 --> 00:07:22.699
+which is a long command I personally bind to "M-f12".
+
+00:07:22.700 --> 00:07:25.319
+You'll be taken to the current playlist buffer.
+
+00:07:25.320 --> 00:07:29.239
+While you can have multiple playlist buffers,
+
+00:07:29.240 --> 00:07:35.779
+only one is current for the purposes of playback commands.
+
+00:07:35.780 --> 00:07:38.119
+The playlist buffer has keys bound
+
+00:07:38.120 --> 00:07:39.919
+to control the media being played.
+
+00:07:39.920 --> 00:07:44.199
+`emms-seek-forward` and `emms-seek-backwards` allow you
+
+00:07:44.200 --> 00:07:49.039
+to scrub along the media being played.
+
+00:07:49.040 --> 00:07:51.719
+Which commands are available is a function of
+
+00:07:51.720 --> 00:07:54.199
+the player backend being employed.
+
+00:07:54.200 --> 00:07:56.599
+The simplest of players may have nothing more
+
+00:07:56.600 --> 00:07:59.559
+than the ability to play, stop, and seek,
+
+00:07:59.560 --> 00:08:04.239
+but others may implement a plethora of commands.
+
+NOTE The modeline
+
+00:08:04.240 --> 00:08:08.879
+The Modeline: Emms will by default display
+
+00:08:08.880 --> 00:08:11.839
+the name of the currently playing track in the mode line
+
+00:08:11.840 --> 00:08:14.999
+with information such as playing time.
+
+00:08:15.000 --> 00:08:15.559
+The mode line format is controlled
+
+00:08:15.560 --> 00:08:20.639
+via the `emms-mode-line-format` variable
+
+00:08:20.640 --> 00:08:27.139
+and the `emms-mode-line-playlist-current` function.
+
+00:08:27.140 --> 00:08:31.039
+Metadata and the cache.
+
+00:08:31.040 --> 00:08:34.799
+It would be sufficient for emms to simply list
+
+00:08:34.800 --> 00:08:38.619
+the file names or urls of each piece of media,
+
+00:08:38.620 --> 00:08:40.999
+but unless you name your music and media
+
+00:08:41.000 --> 00:08:43.939
+with obsessive consistency and precision,
+
+00:08:43.940 --> 00:08:46.679
+not that there is anything wrong with that
+
+00:08:46.680 --> 00:08:50.859
+then the resulting list will be a bit of an eyesore.
+
+00:08:50.860 --> 00:08:54.119
+Moreover, there are a lot of other useful metadata
+
+00:08:54.120 --> 00:08:58.619
+in the media files, including cool stuff like album art.
+
+00:08:58.620 --> 00:09:01.919
+So instead of just files, Emms will try
+
+00:09:01.920 --> 00:09:04.399
+to extract metadata from each track
+
+00:09:04.400 --> 00:09:08.219
+and display a nicely-formatted track listing.
+
+00:09:08.220 --> 00:09:10.799
+The format can be controlled by customizing
+
+00:09:10.800 --> 00:09:15.459
+the variable `emms-track-description-function`.
+
+00:09:15.460 --> 00:09:19.639
+Emms uses so-called info methods to extract
+
+00:09:19.640 --> 00:09:22.439
+the metadata from each file.
+
+00:09:22.440 --> 00:09:25.679
+`emms-info-native`, which I mentioned before,
+
+00:09:25.680 --> 00:09:30.359
+is the built-in metadata reader written in Emacs Lisp.
+
+00:09:30.360 --> 00:09:37.659
+It provides support for Ogg Vorbis, Ogg Opus, FLAC, and MP3.
+
+00:09:37.660 --> 00:09:40.359
+However, if you have media in other formats,
+
+00:09:40.360 --> 00:09:42.439
+you can also add info methods
+
+00:09:42.440 --> 00:09:45.239
+to the `emms-info-functions` list,
+
+00:09:45.240 --> 00:09:48.699
+which call external programs such as exiftool,
+
+00:09:48.700 --> 00:09:55.419
+the LibTag library, tiny-tag, etc. to read file metadata.
+
+00:09:55.420 --> 00:09:58.199
+Since reading metadata takes time
+
+00:09:58.200 --> 00:10:01.339
+and that metadata doesn't change very often,
+
+00:10:01.340 --> 00:10:04.079
+Emms builds a cache as it extracts
+
+00:10:04.080 --> 00:10:06.859
+the information from each file.
+
+00:10:06.860 --> 00:10:09.879
+The first time loading of thousands of tracks
+
+00:10:09.880 --> 00:10:13.259
+into the emms cache may take a while,
+
+00:10:13.260 --> 00:10:16.999
+but as is the nature of caching, subsequent loads
+
+00:10:17.000 --> 00:10:20.059
+will be nearly instantaneous.
+
+00:10:20.060 --> 00:10:22.719
+To ease loading huge media collections,
+
+00:10:22.720 --> 00:10:26.519
+emms also can populate the cache asynchronously,
+
+00:10:26.520 --> 00:10:30.519
+so that your emacs isn't locked up in the interim.
+
+00:10:30.520 --> 00:10:33.779
+Let's talk about streams and URLs.
+
+00:10:33.780 --> 00:10:37.619
+Not all playlist entries need to be associated with files.
+
+00:10:37.620 --> 00:10:39.839
+It's possible to add streaming playlists
+
+00:10:39.840 --> 00:10:42.639
+and URLs to any playlist.
+
+00:10:42.640 --> 00:10:46.119
+Emms also comes with a built-in eclectic list
+
+00:10:46.120 --> 00:10:50.039
+of streaming audio stations to get you started.
+
+00:10:50.040 --> 00:10:52.639
+Any playlist entry can be a URL,
+
+00:10:52.640 --> 00:10:56.719
+and that URL will be passed on to the media player backend,
+
+00:10:56.720 --> 00:11:01.199
+which can play it, if any.
+
+NOTE Meta-playlist mode
+
+00:11:01.200 --> 00:11:03.679
+Meta-playlist mode:
+
+00:11:03.680 --> 00:11:08.299
+Emms also has meta-playlist mode
+
+00:11:08.300 --> 00:11:11.959
+to help manage multiple playlists.
+
+00:11:11.960 --> 00:11:13.879
+When you invoke meta-playlist mode,
+
+00:11:13.880 --> 00:11:16.959
+you will see a listing of all of the current Emms playlists,
+
+00:11:16.960 --> 00:11:21.999
+and this mode binds a handful of useful keybindings
+
+00:11:22.000 --> 00:11:29.859
+to help manage those playlists.
+
+NOTE The browser
+
+00:11:29.860 --> 00:11:31.759
+The Browser:
+
+00:11:31.760 --> 00:11:35.439
+Music doesn't always lend itself to being viewed
+
+00:11:35.440 --> 00:11:38.199
+as a series of discrete files.
+
+00:11:38.200 --> 00:11:41.559
+While there may be a good taxonomy of music
+
+00:11:41.560 --> 00:11:45.459
+that can be reflected using directories and filenames,
+
+00:11:45.460 --> 00:11:49.099
+there are other aspects which cannot.
+
+00:11:49.100 --> 00:11:51.599
+This is especially true when you consider that
+
+00:11:51.600 --> 00:11:55.299
+unlike many computer file taxonomies,
+
+00:11:55.300 --> 00:11:56.719
+music files may contain
+
+00:11:56.720 --> 00:11:58.759
+a lot of self-descriptive information
+
+00:11:58.760 --> 00:12:00.619
+in the form of metadata,
+
+00:12:00.620 --> 00:12:04.279
+such as the year a work was published, the composer,
+
+00:12:04.280 --> 00:12:07.519
+the performing artist, etc.
+
+00:12:07.520 --> 00:12:11.079
+Therefore, it makes sense for Emms to enable
+
+00:12:11.080 --> 00:12:13.199
+a different view into a media collection
+
+00:12:13.200 --> 00:12:17.059
+which is based on the cached metadata.
+
+00:12:17.060 --> 00:12:19.839
+The browser interface binds a host of keys
+
+00:12:19.840 --> 00:12:22.079
+to help navigate the tree structure
+
+00:12:22.080 --> 00:12:24.539
+of the metadata information.
+
+00:12:24.540 --> 00:12:25.839
+Since browser display
+
+00:12:25.840 --> 00:12:28.279
+is not predicated upon directory structure,
+
+00:12:28.280 --> 00:12:32.939
+you can invoke functions such as `emms-browse-by-album`,
+
+00:12:32.940 --> 00:12:35.639
+or `emms-browse-by-artist`, etc.
+
+00:12:35.640 --> 00:12:42.179
+to view the collection in different ways.
+
+00:12:42.180 --> 00:12:43.759
+Emms can do a lot more,
+
+00:12:43.760 --> 00:12:46.319
+but covering it all would take too much time.
+
+00:12:47.020 --> 00:12:50.239
+I do recommend opening the fine Emms manual
+
+00:12:50.240 --> 00:12:52.319
+and getting to know some additional features
+
+00:12:52.320 --> 00:12:54.999
+such as sorting tracks in playlists,
+
+00:12:55.000 --> 00:12:57.199
+sorting and filtering in the browser,
+
+00:12:57.200 --> 00:12:59.079
+editing track information,
+
+00:12:59.080 --> 00:13:01.919
+deriving a new playlist from an existing playlist,
+
+00:13:01.920 --> 00:13:07.039
+the music player daemon, lyrics display, volume control,
+
+00:13:07.040 --> 00:13:13.359
+bookmarks, GNU FM, and Dbus/Mpris support.
+
+00:13:13.360 --> 00:13:19.919
+I hope this was a useful introduction to Emms.
+
+NOTE How Emms works: The technical part
+
+00:13:19.920 --> 00:13:23.219
+How Emms Works: The technical part:
+
+00:13:23.220 --> 00:13:26.819
+This part is an overview of how Emms works.
+
+00:13:26.820 --> 00:13:29.759
+By the end of this, you should be familiar enough
+
+00:13:29.760 --> 00:13:34.739
+with Emms internals to hack on it. Hint hint.
+
+00:13:34.740 --> 00:13:37.679
+A short history of Emms
+
+00:13:37.680 --> 00:13:42.939
+Emms is 20 years old as of the time of writing.
+
+00:13:42.940 --> 00:13:45.399
+Old enough to drink in many countries.
+
+00:13:45.400 --> 00:13:48.879
+This means it was developed back in 2003
+
+00:13:48.880 --> 00:13:53.439
+for emacs 21.2 or thereabouts.
+
+00:13:53.440 --> 00:13:56.279
+As developers, we don't go around looking to
+
+00:13:56.280 --> 00:13:58.839
+replace code just because it's old.
+
+00:13:58.840 --> 00:14:01.839
+On the other hand, some parts were inadequate
+
+00:14:01.840 --> 00:14:04.919
+or just didn't age gracefully.
+
+00:14:04.920 --> 00:14:10.359
+And we have been partially or completely rewriting those.
+
+00:14:10.360 --> 00:14:13.719
+I became the maintainer of Emms about a decade ago,
+
+00:14:13.720 --> 00:14:16.099
+but I didn't start the project.
+
+00:14:16.100 --> 00:14:21.019
+Jorgen Schäfer started the project.
+
+00:14:21.020 --> 00:14:22.519
+I reached out to Jorgen
+
+00:14:22.520 --> 00:14:25.619
+and he kindly shared some of his recollections.
+
+00:14:25.620 --> 00:14:28.199
+Jorgen states that Emms was born back
+
+00:14:28.200 --> 00:14:31.279
+when the music format wars raged.
+
+00:14:31.280 --> 00:14:38.699
+MP3 was the standard, but overshadowed with patent issues.
+
+00:14:38.700 --> 00:14:42.479
+In fact, Technicolor and Fraunhofer IIS
+
+00:14:42.480 --> 00:14:45.559
+only stopped licensing their patents for MP3
+
+00:14:45.560 --> 00:14:49.359
+as recently as April of 2017.
+
+00:14:49.360 --> 00:14:53.539
+Jorgen said that, and I quote,
+
+00:14:53.540 --> 00:14:56.079
+"I needed a tool that was player agnostic
+
+00:14:56.080 --> 00:14:59.439
+and that could deal with a large collection of music files.
+
+00:14:59.440 --> 00:15:02.799
+And I did not want any of the GUI music players
+
+00:15:02.800 --> 00:15:04.039
+that existed back then.
+
+00:15:04.040 --> 00:15:07.519
+Primarily, actually, because I did not want
+
+00:15:07.520 --> 00:15:11.399
+to be switching windows to skip to the next song.
+
+00:15:11.400 --> 00:15:12.879
+If I remember correctly,
+
+00:15:12.880 --> 00:15:16.279
+I had just a shell script before that.
+
+00:15:16.280 --> 00:15:20.159
+But I figured I lived in Emacs, so why not write a tool
+
+00:15:20.160 --> 00:15:23.039
+that I can control my music from Emacs
+
+00:15:23.040 --> 00:15:27.759
+without ever having to leave Emacs?" Unquote.
+
+00:15:27.760 --> 00:15:32.119
+We can see that Jorgen's motivations were of the best kind,
+
+00:15:32.120 --> 00:15:35.319
+to stay in Emacs.
+
+00:15:35.320 --> 00:15:40.679
+Emms, an architecture of sensible abstractions.
+
+00:15:40.680 --> 00:15:44.039
+Emms can be divided into a number of parts.
+
+00:15:44.040 --> 00:15:48.119
+The core, tracks, playlists, sources, players,
+
+00:15:48.120 --> 00:15:51.759
+info, cache, and ancillary.
+
+00:15:51.760 --> 00:15:53.679
+Now David J. Wheeler once said
+
+00:15:53.680 --> 00:15:55.999
+that all problems in computer science
+
+00:15:56.000 --> 00:15:59.799
+can be solved by another level of indirection,
+
+00:15:59.800 --> 00:16:01.639
+except of course for the problem
+
+00:16:01.640 --> 00:16:04.419
+of too many layers of indirection.
+
+00:16:04.420 --> 00:16:06.999
+Emms core has survived this long
+
+00:16:07.000 --> 00:16:11.619
+because it makes sensible and flexible coding abstractions.
+
+00:16:11.620 --> 00:16:15.499
+Keep this in mind as we explore the implementation.
+
+00:16:15.500 --> 00:16:18.879
+This following part of the talk will also be invaluable
+
+00:16:18.880 --> 00:16:21.559
+if you want to hack on Emacs.
+
+00:16:21.560 --> 00:16:23.819
+Another hint.
+
+NOTE The Emms core
+
+00:16:23.820 --> 00:16:25.359
+The Emms core.
+
+00:16:25.360 --> 00:16:29.079
+The core defines tracks, playlists,
+
+00:16:29.080 --> 00:16:31.759
+a way to start and stop playback,
+
+00:16:31.760 --> 00:16:36.439
+as well as ways to proceed to the next track.
+
+NOTE Tracks
+
+00:16:36.440 --> 00:16:38.459
+Tracks:
+
+00:16:38.460 --> 00:16:44.779
+Emms tracks consist of a list whose CAR is the symbol track,
+
+00:16:44.780 --> 00:16:47.079
+and CADR is an alist starting with
+
+00:16:47.080 --> 00:16:50.639
+the association of `type'.
+
+00:16:50.640 --> 00:16:56.739
+Type can be something like file, streamlist, URL, etc.
+
+00:16:56.740 --> 00:17:00.079
+A track of classical music from Bach's Art of Fugue
+
+00:17:00.080 --> 00:17:04.379
+may look something like this.
+
+00:17:04.380 --> 00:17:07.599
+While a track may contain many associations,
+
+00:17:07.600 --> 00:17:11.079
+the number of associations remains a small constant
+
+00:17:11.080 --> 00:17:14.199
+from the perspective of computational steps required
+
+00:17:14.200 --> 00:17:18.459
+to find any particular association.
+
+NOTE Playlist
+
+00:17:18.460 --> 00:17:20.619
+Playlist:
+
+00:17:20.620 --> 00:17:23.479
+An Emms playlist consists of an Emacs buffer
+
+00:17:23.480 --> 00:17:26.459
+with a buffer-local non-nil variable,
+
+00:17:26.460 --> 00:17:29.819
+`emms-playlist-buffer-p`.
+
+00:17:29.820 --> 00:17:33.719
+The buffer can contain anything, any amount or type of text,
+
+00:17:33.720 --> 00:17:35.959
+or anything else.
+
+00:17:35.960 --> 00:17:40.499
+Emms tracks are stored in text properties within the buffer,
+
+00:17:40.500 --> 00:17:46.399
+with the unimaginatively named text property `emms-track`.
+
+00:17:46.400 --> 00:17:49.239
+For Emms, to go to the next track consists of
+
+00:17:49.240 --> 00:17:52.839
+nothing more than looking for the next text property change
+
+00:17:52.840 --> 00:17:57.179
+containing `emms-track`, wherever that is.
+
+00:17:57.180 --> 00:18:00.239
+That means that there is a healthy decoupling between
+
+00:18:00.540 --> 00:18:03.839
+the visual representation of a playlist
+
+00:18:03.840 --> 00:18:08.259
+and its contents as far as Emms is concerned.
+
+00:18:08.260 --> 00:18:11.599
+This decoupling allows Emms playlist buffers
+
+00:18:11.600 --> 00:18:15.319
+to look like anything as long as that anything consists of
+
+00:18:15.320 --> 00:18:22.079
+one or more `emms-track` text properties.
+
+NOTE Sources
+
+00:18:22.080 --> 00:18:23.579
+Sources:
+
+00:18:23.580 --> 00:18:25.839
+A source is how you tell Emms:
+
+00:18:25.840 --> 00:18:29.779
+"Go and get those things and turn them into tracks."
+
+00:18:29.780 --> 00:18:34.479
+More specifically, an Emms source is a function called in
+
+00:18:34.480 --> 00:18:37.259
+a playlist buffer in order to add tracks.
+
+00:18:37.260 --> 00:18:40.199
+And even more specifically, a source is really
+
+00:18:40.200 --> 00:18:42.679
+a family of related functions
+
+00:18:42.680 --> 00:18:47.679
+defined by the macro `define-emms-source`.
+
+00:18:47.680 --> 00:18:49.959
+A straightforward example
+
+00:18:49.960 --> 00:18:52.959
+is the function `emms-add-directory`,
+
+00:18:52.960 --> 00:18:55.879
+which adds an entire directory of files
+
+00:18:55.880 --> 00:18:57.439
+to the current playlist.
+
+00:18:57.440 --> 00:19:02.319
+It accepts, or interactively queries for, a directory
+
+00:19:02.320 --> 00:19:06.119
+and iterates over each file in that directory,
+
+00:19:06.120 --> 00:19:10.759
+adding them as tracks to the playlist buffer as it goes.
+
+00:19:10.760 --> 00:19:15.039
+Emms comes with sources for files, directories, URLs,
+
+00:19:15.040 --> 00:19:17.319
+playlists of various formats,
+
+00:19:17.320 --> 00:19:22.159
+files from dired mode, and etc.
+
+NOTE Players
+
+00:19:22.160 --> 00:19:24.879
+Players:
+
+00:19:24.880 --> 00:19:28.959
+An Emms player is, at its simplest, a data structure
+
+00:19:28.960 --> 00:19:30.839
+with three functions.
+
+00:19:30.840 --> 00:19:34.519
+One to start playing, one to stop,
+
+00:19:34.520 --> 00:19:38.179
+and one which returns true if the player knows
+
+00:19:38.180 --> 00:19:41.279
+how to play a given track.
+
+00:19:41.280 --> 00:19:44.759
+However, if your player also knows how to pause, resume,
+
+00:19:44.760 --> 00:19:48.279
+seek, etc, then additional functions can be added
+
+00:19:48.280 --> 00:19:51.319
+to the player data structure.
+
+00:19:51.320 --> 00:19:55.399
+This is abstract enough to be able to, for example,
+
+00:19:55.400 --> 00:19:58.839
+define a simple player for images with the help of
+
+00:19:58.840 --> 00:20:04.579
+the `define-emms-simple-player` macro.
+
+00:20:04.580 --> 00:20:09.559
+The above will define a player called `emms-player-display`,
+
+00:20:09.560 --> 00:20:12.959
+which would call ImageMagick's `display` command
+
+00:20:12.960 --> 00:20:15.639
+on each file in our playlist
+
+00:20:15.640 --> 00:20:20.519
+with the image file extension we listed.
+
+NOTE Info
+
+00:20:20.520 --> 00:20:23.059
+Info:
+
+00:20:23.060 --> 00:20:28.019
+As previously described, Emms comes with info methods,
+
+00:20:28.020 --> 00:20:29.639
+which are functions to add
+
+00:20:29.640 --> 00:20:32.339
+descriptive information to tracks.
+
+00:20:32.340 --> 00:20:34.639
+Emms is set up so that
+
+00:20:34.640 --> 00:20:37.719
+the hook `emms-track-initialize-functions` is called
+
+00:20:37.720 --> 00:20:41.639
+when a track is created, and that ends up calling
+
+00:20:41.640 --> 00:20:46.279
+the info methods listed in the `emms-info-functions` list.
+
+00:20:46.280 --> 00:20:51.199
+These will modify the track data structure to add metadata.
+
+00:20:51.200 --> 00:20:54.319
+One of the coolest recent features of Emms
+
+00:20:54.320 --> 00:20:58.699
+is `emms-info-native`, written by Petteri Hintsanen;
+
+00:20:58.700 --> 00:21:01.325
+again, sorry for the pronunciation.
+
+00:21:01.326 --> 00:21:06.519
+`emms-info-native` is a purely Emacs Lisp implementation
+
+00:21:06.520 --> 00:21:11.439
+which reads Ogg Vorbis, Ogg Opus, FLAC, and MP3 files
+
+00:21:11.440 --> 00:21:14.679
+and parses out the metadata.
+
+00:21:14.680 --> 00:21:17.519
+This is in comparison with other info readers
+
+00:21:17.520 --> 00:21:20.559
+which Emms supports, which all involve calling out
+
+00:21:20.560 --> 00:21:25.619
+to external processes and parsing the values returned.
+
+00:21:25.620 --> 00:21:29.319
+`emms-info-native` works by unpacking and examining
+
+00:21:29.320 --> 00:21:32.039
+the binary data in the media file headers
+
+00:21:32.040 --> 00:21:36.659
+and parsing the data layout specifications.
+
+NOTE The cache
+
+00:21:36.660 --> 00:21:38.879
+The Cache:
+
+00:21:38.880 --> 00:21:43.279
+The Emms cache is a mapping between a full path name
+
+00:21:43.280 --> 00:21:45.719
+and its associated information.
+
+00:21:45.720 --> 00:21:48.199
+Once information is extracted from a file
+
+00:21:48.200 --> 00:21:50.759
+using an info method, that information is then
+
+00:21:50.760 --> 00:21:53.979
+associated with that file in the cache.
+
+00:21:53.980 --> 00:21:57.159
+One thing to bear in mind is that the caching system
+
+00:21:57.160 --> 00:21:58.359
+was originally written back
+
+00:21:58.360 --> 00:22:00.759
+when slow spinning disks were common.
+
+00:22:00.760 --> 00:22:07.519
+A 32GB SSD drive cost close to $700 in 2006,
+
+00:22:07.520 --> 00:22:10.279
+which is the equivalent of about $1,000
+
+00:22:10.280 --> 00:22:12.439
+at the time of writing.
+
+00:22:12.440 --> 00:22:15.259
+But despite the speed of modern drives,
+
+00:22:15.260 --> 00:22:17.439
+the caching system is still worth using
+
+00:22:17.440 --> 00:22:19.679
+for larger music collections.
+
+00:22:19.680 --> 00:22:22.439
+The caching system is also a prerequisite
+
+00:22:22.440 --> 00:22:26.599
+for being able to use the Emms browser.
+
+00:22:26.600 --> 00:22:30.379
+The cache implementation is relatively naive.
+
+00:22:30.380 --> 00:22:33.199
+For instance, moving a file will invalidate
+
+00:22:33.200 --> 00:22:35.799
+that cache entry for that file
+
+00:22:35.800 --> 00:22:37.579
+and will require a refresh.
+
+00:22:37.580 --> 00:22:40.599
+However, relatively little work has been done
+
+00:22:40.600 --> 00:22:42.779
+to the cache implementation over the years
+
+00:22:42.780 --> 00:22:44.999
+since it has proven to be good enough
+
+00:22:45.000 --> 00:22:47.059
+for the majority of situations.
+
+00:22:47.060 --> 00:22:51.619
+Which is to say, nobody complained.
+
+NOTE Healthy back and forth: mpv, mpd, and GNU.FM
+
+00:22:51.620 --> 00:22:56.239
+Healthy back and forth. MPV, MPD, GNU.FM
+
+00:22:56.240 --> 00:23:00.119
+Process communication with a simple media player
+
+00:23:00.120 --> 00:23:01.759
+can be as straightforward
+
+00:23:01.760 --> 00:23:03.799
+as starting an asynchronous process
+
+00:23:03.800 --> 00:23:05.799
+and waiting for that process to complete
+
+00:23:05.800 --> 00:23:07.919
+in order to move to the next track.
+
+00:23:08.620 --> 00:23:10.879
+This is how the example above
+
+00:23:10.880 --> 00:23:13.359
+with ImageMagick's display binary worked.
+
+00:23:13.760 --> 00:23:17.439
+However, Emms also handles asynchronous
+
+00:23:17.440 --> 00:23:20.299
+two-way communication with processes.
+
+00:23:20.300 --> 00:23:23.959
+A simple example of this would be sending strings
+
+00:23:23.960 --> 00:23:31.559
+to a running process such as the pause command to VLC.
+
+NOTE MPV
+
+00:23:31.560 --> 00:23:33.379
+MPV:
+
+00:23:33.380 --> 00:23:37.039
+MPV is a popular media player forked
+
+00:23:37.040 --> 00:23:39.899
+in a roundabout way from mplayer.
+
+00:23:39.900 --> 00:23:42.079
+One of its most notable features is
+
+00:23:42.080 --> 00:23:46.599
+support for a robust client API.
+
+00:23:46.600 --> 00:23:52.959
+Mike Kazantsev has been working since 2018
+
+00:23:52.960 --> 00:23:58.349
+to develop the excellent `emms-player-mpv.el'.
+
+00:23:58.350 --> 00:24:01.999
+It can communicate with a long running MPV process
+
+00:24:02.000 --> 00:24:07.179
+via Unix sockets or IP sockets.
+
+00:24:07.180 --> 00:24:11.169
+This allows for MPV to do things
+
+00:24:11.170 --> 00:24:14.889
+like update ICY metadata for streaming audio.
+
+00:24:14.890 --> 00:24:17.639
+So that, for example, when a song changes
+
+00:24:17.640 --> 00:24:22.049
+while you're listening to a streaming audio via Emms,
+
+00:24:22.050 --> 00:24:24.679
+the song title displayed in the mode line
+
+00:24:24.680 --> 00:24:28.329
+and track listing can update as well.
+
+00:24:28.330 --> 00:24:30.399
+This means that deep inside the code
+
+00:24:30.400 --> 00:24:35.629
+there is an Emacs `make-network-process` call.
+
+00:24:35.630 --> 00:24:37.919
+The fact that Mike has put this together
+
+00:24:37.920 --> 00:24:42.639
+in fewer than 1,000 lines of legible Emacs Lisp
+
+00:24:42.640 --> 00:24:47.469
+is a testament to some serious coding ability.
+
+NOTE MPD
+
+00:24:47.470 --> 00:24:49.609
+MPD:
+
+00:24:49.610 --> 00:24:52.399
+Similar to MPV but potentially
+
+00:24:52.400 --> 00:24:54.119
+on a completely different machine
+
+00:24:54.120 --> 00:24:58.459
+is Emms support for the Music Player Daemon.
+
+00:24:58.460 --> 00:25:01.519
+Music Player Daemon or MPD is a media player
+
+00:25:01.520 --> 00:25:03.959
+with an explicit client-server design
+
+00:25:03.960 --> 00:25:09.949
+and communicates with Emms via a network process.
+
+00:25:09.950 --> 00:25:16.089
+Unfortunately, MPD support has never been all that great.
+
+00:25:16.090 --> 00:25:20.469
+But this isn't the emms developers fault!
+
+00:25:20.470 --> 00:25:25.599
+Because unlike every other media player
+
+00:25:25.600 --> 00:25:29.729
+that Emms interfaces with MPD is designed around
+
+00:25:29.730 --> 00:25:31.929
+its own internal playlist database.
+
+00:25:31.930 --> 00:25:35.269
+This is a surprising design decision
+
+00:25:35.270 --> 00:25:37.649
+on the MPD developers' part
+
+00:25:37.650 --> 00:25:41.749
+since it goes against the client-server mindset.
+
+00:25:41.750 --> 00:25:45.959
+A consequence is that we end up having to try and coordinate
+
+00:25:45.960 --> 00:25:51.399
+and harmonize the MPD playlist with the Emms playlist.
+
+00:25:51.400 --> 00:25:56.689
+I can foresee writing a completely new MPD mode for Emms
+
+00:25:56.690 --> 00:26:01.509
+which is designed to be a true pure MPD client.
+
+00:26:01.510 --> 00:26:05.339
+Unless of course someone volunteers to beat me to it.
+
+00:26:05.340 --> 00:26:07.439
+Hint hint.
+
+NOTE GNU FM and Libre FM
+
+00:26:07.440 --> 00:26:10.959
+GNU FM and Libre FM:
+
+00:26:10.960 --> 00:26:13.639
+Libre FM is a music community which allows you
+
+00:26:13.640 --> 00:26:17.449
+to share your listening habits with other users of the site.
+
+00:26:17.450 --> 00:26:21.269
+A kind of online listening party.
+
+00:26:21.270 --> 00:26:25.649
+In the case of `emms-librefm-scrobber.el`
+
+00:26:25.650 --> 00:26:28.639
+we use Emacs' `url-retrieve` function
+
+00:26:28.640 --> 00:26:32.449
+to asynchronously send to a URL
+
+00:26:32.450 --> 00:26:40.049
+and then fire a callback function to process the response.
+
+00:26:40.050 --> 00:26:42.679
+This represents numerous challenges
+
+00:26:42.680 --> 00:26:45.089
+to implement within Emacs.
+
+00:26:45.090 --> 00:26:47.399
+The primary issue being that Emacs itself
+
+00:26:47.400 --> 00:26:50.099
+is pretty weak at doing anything
+
+00:26:50.100 --> 00:26:54.219
+truly and really asynchronously.
+
+00:26:54.220 --> 00:26:56.399
+I can say with confident sarcasm
+
+00:26:56.400 --> 00:26:59.529
+and with tongue firmly planted in cheek
+
+00:26:59.530 --> 00:27:02.879
+that it is almost as if the original designers
+
+00:27:02.880 --> 00:27:05.839
+of Emacs didn't foresee their text editor
+
+00:27:05.840 --> 00:27:07.039
+needing to play music
+
+00:27:07.040 --> 00:27:09.819
+while interacting with a remote network server.
+
+00:27:09.820 --> 00:27:12.559
+How myopic!
+
+NOTE How we work: Emms development
+
+00:27:12.560 --> 00:27:15.699
+How we work: Emms development:
+
+00:27:15.700 --> 00:27:19.619
+This part is an overview of how Emms is developed.
+
+00:27:19.620 --> 00:27:23.899
+By the end of this part you should be able to understand
+
+00:27:23.900 --> 00:27:28.719
+how we hacked this project, and how you can too.
+
+00:27:28.720 --> 00:27:29.949
+Where it's at.
+
+00:27:29.950 --> 00:27:32.369
+How to find our forge.
+
+00:27:32.370 --> 00:27:36.499
+Emms has been hosted at the FSF's forge, Savannah,
+
+00:27:36.500 --> 00:27:39.839
+since around 2003.
+
+00:27:39.840 --> 00:27:46.229
+Emms is distributed via GNU ELPA and integrated into Emacs.
+
+00:27:46.230 --> 00:27:49.799
+Before ELPA it was distributed as a tarball
+
+00:27:49.800 --> 00:27:55.139
+via ftp.gnu.org but that stopped back in 2020.
+
+00:27:55.140 --> 00:27:58.719
+I was initially resistant to ELPA but around the time
+
+00:27:58.720 --> 00:28:03.849
+when the thousandth person asked me why Emms isn't on ELPA,
+
+00:28:03.850 --> 00:28:07.209
+I realized that it had to happen.
+
+00:28:07.210 --> 00:28:10.599
+Emms can also be found in other places
+
+00:28:10.600 --> 00:28:16.079
+such as Melpa or GitHub but we, the developers of Emms,
+
+00:28:16.080 --> 00:28:17.999
+have nothing to do with that
+
+00:28:18.000 --> 00:28:21.759
+and we don't monitor those channels.
+
+00:28:21.760 --> 00:28:26.299
+If you want the source straight from, well, the source,
+
+00:28:26.300 --> 00:28:30.369
+then go to the Savannah Git repository.
+
+00:28:30.370 --> 00:28:34.989
+Look who's talking: Where development discussion happens.
+
+00:28:34.990 --> 00:28:37.999
+If you want to talk to us, discussions all happen
+
+00:28:38.000 --> 00:28:41.429
+on emms-help@gnu.org.
+
+00:28:41.430 --> 00:28:45.559
+We used to use emms-patches@gnu.org
+
+00:28:45.560 --> 00:28:48.279
+but didn't feel like the volume of incoming patches
+
+00:28:48.280 --> 00:28:52.589
+justified a separate mailing list.
+
+NOTE The Rime Of The Ancient Maintainer
+
+00:28:52.590 --> 00:28:55.719
+The Rime Of The Ancient Maintainer:
+
+00:28:55.720 --> 00:28:57.479
+There are a number of activities
+
+00:28:57.480 --> 00:29:00.099
+particular to being a maintainer.
+
+00:29:00.100 --> 00:29:03.389
+These are all part of a project's lifecycle.
+
+00:29:03.390 --> 00:29:06.079
+Let's review some of them.
+
+NOTE The life and times of an Emms patch
+
+00:29:06.080 --> 00:29:09.999
+The life and times of an Emms patch:
+
+00:29:10.000 --> 00:29:13.239
+A maintainer needs to be able to accept, critique,
+
+00:29:13.240 --> 00:29:17.559
+and integrate patches from contributors and developers.
+
+00:29:17.560 --> 00:29:20.559
+This means, among other things, that the maintainer
+
+00:29:20.560 --> 00:29:24.469
+needs to keep on top of copyright issues.
+
+00:29:24.470 --> 00:29:29.359
+Before being able to add Emms to GNU/ELPA,
+
+00:29:29.360 --> 00:29:31.879
+we had to make sure that the copyright situation
+
+00:29:31.880 --> 00:29:33.849
+was in order.
+
+00:29:33.850 --> 00:29:37.519
+This long process required reaching out to people
+
+00:29:37.520 --> 00:29:39.959
+and having them assign the copyright
+
+00:29:39.960 --> 00:29:42.509
+for their work to the FSF,
+
+00:29:42.510 --> 00:29:45.199
+or even removing their code entirely
+
+00:29:45.200 --> 00:29:47.969
+if they couldn't be reached.
+
+00:29:47.970 --> 00:29:50.629
+The experience left me with the conviction
+
+00:29:50.630 --> 00:29:52.399
+that the easiest way to fix
+
+00:29:52.400 --> 00:29:54.519
+the copyright situation of your package
+
+00:29:54.520 --> 00:30:00.639
+is to ensure that it never gets broken in the first place.
+
+00:30:00.640 --> 00:30:04.439
+Often a person will write in to the emms-help mailing list,
+
+00:30:04.440 --> 00:30:08.029
+or perhaps raise an issue on IRC.
+
+00:30:08.030 --> 00:30:11.679
+If it's a bug report or feature request, we'll discuss it,
+
+00:30:11.680 --> 00:30:14.159
+and when it's fixed, we'll ask the reporter
+
+00:30:14.160 --> 00:30:17.639
+to test the result and provide feedback.
+
+00:30:17.640 --> 00:30:22.039
+If it's a patch, then we'll typically go one of three ways.
+
+00:30:22.040 --> 00:30:24.799
+A trivial patch, such as fixing a typo
+
+00:30:24.800 --> 00:30:27.279
+or corrections on a single line of code,
+
+00:30:27.280 --> 00:30:32.039
+will simply be applied by one of the developers.
+
+00:30:32.040 --> 00:30:34.519
+A non-trivial, but one-time patch,
+
+00:30:34.520 --> 00:30:37.989
+will have to be cleared from a copyright perspective.
+
+00:30:37.990 --> 00:30:42.419
+This means assigning copyright for the changes to the FSF.
+
+00:30:42.420 --> 00:30:46.319
+Once that's cleared, then the patch will be applied.
+
+00:30:46.320 --> 00:30:49.879
+Finally, if it's a non-trivial patch,
+
+00:30:49.880 --> 00:30:52.079
+which looks like it would be the start
+
+00:30:52.080 --> 00:30:56.009
+of a long-term development work (my favorite),
+
+00:30:56.010 --> 00:30:57.879
+then after copyright is cleared,
+
+00:30:57.880 --> 00:31:00.799
+that person will be offered to be added
+
+00:31:00.800 --> 00:31:05.019
+to the members with Git repo access on Savannah.
+
+00:31:05.020 --> 00:31:08.199
+From there, we usually use a dedicated branch
+
+00:31:08.200 --> 00:31:09.639
+to do all the playing around
+
+00:31:09.640 --> 00:31:13.629
+before merging it with the main Git repo.
+
+00:31:13.630 --> 00:31:16.879
+If you have ever sent a patch, feature request,
+
+00:31:16.880 --> 00:31:24.079
+or bug report into Emms (small or large), we thank you.
+
+NOTE Let It Go: The release process
+
+00:31:24.080 --> 00:31:27.789
+Let It Go, The Release Process:
+
+00:31:27.790 --> 00:31:31.609
+The maintainer is responsible for the release process.
+
+00:31:31.610 --> 00:31:35.129
+I found that a consistent schedule works well,
+
+00:31:35.130 --> 00:31:39.379
+which is not to say that we have to release on schedule,
+
+00:31:39.380 --> 00:31:42.759
+but that aiming for a consistent release schedule
+
+00:31:42.760 --> 00:31:46.049
+provides structure and a goal.
+
+00:31:46.050 --> 00:31:50.159
+The main Git branch in the repository is stable
+
+00:31:50.160 --> 00:31:53.239
+and more often than not of release quality.
+
+00:31:53.240 --> 00:31:56.649
+Releases are done about every three months.
+
+00:31:56.650 --> 00:31:58.999
+And with such a stable main branch,
+
+00:31:59.000 --> 00:32:02.319
+the process of releasing often involves little more
+
+00:32:02.320 --> 00:32:05.059
+than writing a NEWS entry.
+
+00:32:05.060 --> 00:32:08.439
+As a consequence, new and wonderful features
+
+00:32:08.440 --> 00:32:11.439
+which aren't quite ready for prime time
+
+00:32:11.440 --> 00:32:13.499
+when a release comes around,
+
+00:32:13.500 --> 00:32:18.199
+will remain safely in their branch on the Git repo
+
+00:32:18.200 --> 00:32:23.399
+until after the ELPA release.
+
+NOTE It Is Not In Our Stars, But In Ourselves: Future directions
+
+00:32:23.400 --> 00:32:29.629
+It Is Not In Our Stars, But In Ourselves; Future Directions:
+
+00:32:29.630 --> 00:32:34.899
+One aspect of Emms that needs to improve is ease of setup.
+
+00:32:34.900 --> 00:32:37.719
+Now that might surprise you, since at the time of writing,
+
+00:32:37.720 --> 00:32:40.069
+it's already pretty easy.
+
+00:32:40.070 --> 00:32:43.879
+But my ideal is that the user would need to do
+
+00:32:43.880 --> 00:32:46.839
+nothing at all after installation.
+
+00:32:46.840 --> 00:32:49.359
+And with that, as a goal in mind,
+
+00:32:49.360 --> 00:32:52.749
+there is more work to be done.
+
+00:32:52.750 --> 00:32:55.499
+We are working on a player discovery feature.
+
+00:32:55.500 --> 00:32:57.039
+The idea is simple.
+
+00:32:57.040 --> 00:33:00.079
+The code looks for binaries of popular media players
+
+00:33:00.080 --> 00:33:01.639
+on the user's machine,
+
+00:33:01.640 --> 00:33:04.519
+and for each one found, it asks the user
+
+00:33:04.520 --> 00:33:07.519
+if they want the associated Emms player backend
+
+00:33:07.520 --> 00:33:09.809
+to be configured.
+
+00:33:09.810 --> 00:33:12.589
+In effect, this code is already working,
+
+00:33:12.590 --> 00:33:16.289
+but currently an undocumented, unofficial feature.
+
+00:33:16.290 --> 00:33:17.719
+You can try it for yourself with
+
+00:33:17.720 --> 00:33:21.079
+`emms-setup-discover-players`.
+
+00:33:21.080 --> 00:33:22.969
+So what's the holdup?
+
+00:33:22.970 --> 00:33:26.039
+`emms-setup-discover-players` currently configures
+
+00:33:26.040 --> 00:33:27.839
+the `emms-player-list` variable,
+
+00:33:27.840 --> 00:33:29.899
+but doesn't write it to disk.
+
+00:33:29.900 --> 00:33:31.679
+And that means that the configuration
+
+00:33:31.680 --> 00:33:35.039
+isn't preserved between Emacs sessions.
+
+00:33:35.040 --> 00:33:36.899
+The question then becomes,
+
+00:33:36.900 --> 00:33:40.309
+what is the best way to preserve this setting?
+
+00:33:40.310 --> 00:33:42.599
+I personally don't like anything
+
+00:33:42.600 --> 00:33:46.199
+to edit my .emacs except me,
+
+00:33:46.200 --> 00:33:49.279
+and I wouldn't do that to anyone else.
+
+00:33:49.280 --> 00:33:55.959
+Now we already write state to the .emacs.d/emms/ directory,
+
+00:33:55.960 --> 00:33:58.359
+but that would require care not to
+
+00:33:58.360 --> 00:34:01.909
+clobber a user's existing setup.
+
+00:34:01.910 --> 00:34:04.719
+Having the user set up their system in one place,
+
+00:34:04.720 --> 00:34:08.839
+such as a .emacs or a .emmsrc,
+
+00:34:08.840 --> 00:34:11.419
+while saving state to a different place
+
+00:34:11.420 --> 00:34:14.209
+is asking for confusion.
+
+00:34:14.210 --> 00:34:16.719
+This is a good example which I bring up
+
+00:34:16.720 --> 00:34:18.399
+of where a maintainer needs to
+
+00:34:18.400 --> 00:34:21.308
+solicit opinions from developers,
+
+00:34:21.309 --> 00:34:23.899
+both the Emacs developers,
+
+00:34:23.900 --> 00:34:28.169
+asking them where packages should save state,
+
+00:34:28.170 --> 00:34:33.169
+and the Emms developers, and also users.
+
+00:34:33.170 --> 00:34:35.439
+Then, the maintainer needs to
+
+00:34:35.440 --> 00:34:38.019
+carefully choose a path forward.
+
+00:34:38.020 --> 00:34:41.559
+It is typical of the kind of issue you have to have in mind
+
+00:34:41.560 --> 00:34:44.848
+when you're maintaining a package.
+
+NOTE Development policies: Interface language
+
+00:34:44.849 --> 00:34:49.159
+Development Policies: Interface Language.
+
+00:34:49.160 --> 00:34:52.359
+A maintainer of an interactive program such as Emms
+
+00:34:52.360 --> 00:34:55.359
+needs to think about user interaction.
+
+00:34:55.360 --> 00:34:58.399
+Emms doesn't use key bindings which are familiar
+
+00:34:58.400 --> 00:35:02.719
+to people who are used to GUI media players,
+
+00:35:02.720 --> 00:35:06.559
+and that can, and has, caused friction.
+
+00:35:06.560 --> 00:35:09.959
+Some new users are confused when they press the spacebar
+
+00:35:09.960 --> 00:35:12.529
+on an entry in the Emms browser,
+
+00:35:12.530 --> 00:35:15.459
+only to find that nothing starts playing.
+
+00:35:15.460 --> 00:35:18.679
+Indeed, all that does is to expand the browser tree
+
+00:35:18.680 --> 00:35:20.469
+at that point.
+
+00:35:20.470 --> 00:35:22.999
+Then they might press RET on the same entry,
+
+00:35:23.000 --> 00:35:28.259
+and be further frustrated at the continuing silence.
+
+00:35:28.260 --> 00:35:33.399
+Since what return does is just to add that entry at point
+
+00:35:33.400 --> 00:35:36.169
+to the current playlist.
+
+00:35:36.170 --> 00:35:37.759
+The discussion then arises
+
+00:35:37.760 --> 00:35:41.819
+about how Emms should handle that situation.
+
+00:35:41.820 --> 00:35:45.559
+On one hand, we want to make it as easy as possible
+
+00:35:45.560 --> 00:35:48.819
+for new users to learn Emms,
+
+00:35:48.820 --> 00:35:52.759
+and adopt a do-what-I-mean interface approach.
+
+00:35:52.760 --> 00:35:56.749
+On the other hand, this is an Emacs project.
+
+00:35:56.750 --> 00:35:59.439
+It isn't a stand-alone GUI media player,
+
+00:35:59.440 --> 00:36:01.399
+and should integrate into Emacs,
+
+00:36:01.400 --> 00:36:05.979
+and serve Emacs users first and foremost.
+
+NOTE Development policies: Freedom
+
+00:36:05.980 --> 00:36:10.289
+Development policies: Freedom.
+
+00:36:10.290 --> 00:36:14.999
+Another maintainer job is to think of Emms' posture
+
+00:36:15.000 --> 00:36:17.379
+in regards to software freedom.
+
+00:36:17.380 --> 00:36:19.729
+Here are a few examples.
+
+00:36:19.730 --> 00:36:23.759
+Back with MP3 was still a patent encumbered format,
+
+00:36:23.760 --> 00:36:26.080
+we pushed hard for Vorbis everywhere
+
+00:36:26.081 --> 00:36:29.639
+along with the PlayOgg campaign.
+
+00:36:29.640 --> 00:36:32.699
+A then popular music streaming service,
+
+00:36:32.700 --> 00:36:34.929
+which will remain unnamed,
+
+00:36:34.930 --> 00:36:38.619
+changed their stance towards third-party applications,
+
+00:36:38.620 --> 00:36:43.129
+and required individual API keys which could not be shared.
+
+00:36:43.130 --> 00:36:45.399
+We stood firm, said "no",
+
+00:36:45.400 --> 00:36:48.669
+and removed support for that service.
+
+00:36:48.670 --> 00:36:51.359
+A recent suggestion to add support for YouTube
+
+00:36:51.360 --> 00:36:53.889
+was also nixed,
+
+00:36:53.890 --> 00:36:55.679
+because the particular backend
+
+00:36:55.680 --> 00:36:58.959
+was found to download and run proprietary javascript
+
+00:36:58.960 --> 00:37:01.849
+on the user's machine.
+
+00:37:01.850 --> 00:37:05.399
+Saying no to potentially useful or wanted features
+
+00:37:05.400 --> 00:37:07.919
+because it involves non-free software
+
+00:37:07.920 --> 00:37:13.489
+is often an unpopular decision and can alienate people.
+
+00:37:13.490 --> 00:37:15.559
+A maintainer needs to think carefully
+
+00:37:15.560 --> 00:37:17.399
+about each of these decisions,
+
+00:37:17.400 --> 00:37:21.919
+as they are rarely straightforward and one-sided.
+
+00:37:21.920 --> 00:37:25.839
+And as you see above, they also change over time
+
+00:37:25.840 --> 00:37:30.299
+and need to be re-evaluated.
+
+00:37:30.300 --> 00:37:32.999
+One of the most useful things a maintainer can do
+
+00:37:33.000 --> 00:37:35.519
+is to coordinate the development effort
+
+00:37:35.520 --> 00:37:39.229
+and help new people join the project.
+
+00:37:39.230 --> 00:37:41.839
+In light of that, if you want to work on a project
+
+00:37:41.840 --> 00:37:44.059
+which has a bit of everything,
+
+00:37:44.060 --> 00:37:47.809
+you could do worse than hacking on Emms.
+
+00:37:47.810 --> 00:37:49.719
+There is inter-process communication,
+
+00:37:49.720 --> 00:37:52.479
+displaying graphics, parsing binary files,
+
+00:37:52.480 --> 00:37:56.529
+caching, asynchronous processes, user interface design.
+
+00:37:56.530 --> 00:37:59.599
+We also are a project that insists on
+
+00:37:59.600 --> 00:38:02.959
+keeping a well-written and up-to-date manual.
+
+00:38:02.960 --> 00:38:06.759
+If you can write English or hack Emacs Lisp at all,
+
+00:38:06.760 --> 00:38:09.939
+chances are that there is something you can do for Emms.
+
+00:38:09.940 --> 00:38:12.369
+Just saying.
+
+NOTE Acknowledgements
+
+00:38:12.370 --> 00:38:14.189
+Acknowledgements:
+
+00:38:14.190 --> 00:38:18.079
+I'd like to express my deep gratitude for all of the people
+
+00:38:18.080 --> 00:38:19.559
+who have hacked on Emms
+
+00:38:19.560 --> 00:38:23.169
+during my time as a maintainer and before it.
+
+00:38:23.170 --> 00:38:25.759
+It is often the case that I'm just the person
+
+00:38:25.760 --> 00:38:28.559
+holding the rudder and steering the ship,
+
+00:38:28.560 --> 00:38:30.039
+with all of these developers
+
+00:38:30.040 --> 00:38:33.179
+rowing furiously to provide the power
+
+00:38:33.180 --> 00:38:36.369
+which actually moves the ship forward.
+
+00:38:36.370 --> 00:38:38.040
+Thank you to all.
diff --git a/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt
new file mode 100644
index 00000000..01b7ca18
--- /dev/null
+++ b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt
@@ -0,0 +1,20 @@
+WEBVTT
+
+
+00:00:04.880 --> 00:00:35.989
+Introduction
+
+00:00:35.989 --> 00:03:35.809
+The wonders of C-x C-e
+
+00:03:35.809 --> 00:04:51.143
+An overview of REPL Driven Development
+
+00:04:51.143 --> 00:07:28.029
+REPL Driven Development with Java
+
+00:07:28.029 --> 00:07:59.669
+Bring your own Read Protocol
+
+00:07:59.669 --> 00:09:37.029
+Use Case: RDD & Job Interviews
diff --git a/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt
new file mode 100644
index 00000000..a0242577
--- /dev/null
+++ b/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt
@@ -0,0 +1,607 @@
+WEBVTT captioned by bhavin192
+
+NOTE Introduction
+
+00:00:04.880 --> 00:00:10.000
+Hello, and welcome to EmacsConf 2023!
+
+00:00:10.001 --> 00:00:12.109
+My name is Musa Al-hassy,
+
+00:00:12.109 --> 00:00:15.549
+and I will be talking about "REPL-driven development."
+
+00:00:15.549 --> 00:00:18.269
+I like programming languages so much.
+
+00:00:18.269 --> 00:00:20.269
+I want to use them all over the place.
+
+00:00:20.269 --> 00:00:23.069
+I got a PhD in the topic.
+
+00:00:23.069 --> 00:00:25.349
+So let's just dive in.
+
+00:00:25.349 --> 00:00:27.949
+This is a lightning talk,
+
+00:00:27.949 --> 00:00:31.309
+so the details will be available in the repository.
+
+00:00:31.309 --> 00:00:33.469
+Links to longer videos and GIFs
+
+00:00:33.469 --> 00:00:35.989
+for those who are interested.
+
+NOTE The wonders of C-x C-e
+
+00:00:35.989 --> 00:00:37.309
+So the wonderful thing about Emacs
+
+00:00:37.309 --> 00:00:40.589
+is that you can execute Lisp anywhere.
+
+00:00:40.589 --> 00:00:42.829
+For example, I can go to this piece of Lisp,
+
+00:00:42.829 --> 00:00:45.576
+press Ctrl-x Ctrl-e (`C-x C-e`)
+
+00:00:45.576 --> 00:00:47.549
+and get a little pop-up.
+
+00:00:47.549 --> 00:00:49.669
+Alright, so here I pressed `C-x C-e`
+
+00:00:49.669 --> 00:00:51.389
+and this is what it ran.
+
+00:00:51.389 --> 00:00:52.776
+And what this package gives you
+
+00:00:52.776 --> 00:00:54.509
+is the same ability
+
+00:00:54.509 --> 00:00:56.909
+for any language of your choosing.
+
+00:00:56.909 --> 00:00:59.229
+So for example, here is some Java,
+
+00:00:59.229 --> 00:01:02.469
+and I bound it to Ctrl-x, Ctrl-j (`C-x C-j`).
+
+00:01:02.469 --> 00:01:07.149
+So I say `C-x C-j`, and this runs some code,
+
+00:01:07.149 --> 00:01:13.709
+and over here I get a little pop-up.
+
+00:01:13.709 --> 00:01:15.069
+The wonderful thing about
+
+00:01:15.069 --> 00:01:16.829
+being able to run code from anywhere
+
+00:01:16.829 --> 00:01:19.029
+is that you can keep it in normal text files
+
+00:01:19.029 --> 00:01:20.629
+or any kind of file you like.
+
+00:01:20.629 --> 00:01:23.669
+For example, you can have hyperlinks,
+
+00:01:23.669 --> 00:01:25.109
+as it were…, like this one.
+
+00:01:25.109 --> 00:01:28.549
+`C-x C-e`, and now we can see this down here.
+
+00:01:28.549 --> 00:01:30.789
+Learn about it.
+
+00:01:30.789 --> 00:01:34.189
+But being able to run other languages besides Emacs
+
+00:01:34.189 --> 00:01:36.149
+lets us do some interesting things.
+
+00:01:36.149 --> 00:01:39.589
+For example, in the middle of a JavaScript program,
+
+00:01:39.589 --> 00:01:43.429
+you might write a line like this. `C-x C-n`.
+
+00:01:43.429 --> 00:01:45.229
+And that says down here
+
+00:01:45.229 --> 00:01:47.269
+`javascript-eval` in the mode line,
+
+00:01:47.269 --> 00:01:49.643
+and so this just checks that some endpoint
+
+00:01:49.643 --> 00:01:51.189
+is working as intended.
+
+00:01:51.189 --> 00:01:52.749
+So you don't need to use an external tool
+
+00:01:52.749 --> 00:01:53.589
+to check endpoints.
+
+00:01:53.589 --> 00:01:57.469
+You can just use Emacs in your favorite language.
+
+00:01:57.469 --> 00:01:59.629
+You know, you can keep your spirit up.
+
+00:01:59.629 --> 00:02:03.709
+So, `C-x C-a` runs `applescript-eval`.
+
+00:02:03.709 --> 00:02:06.376
+[Computer]: You can do it, buddy.
+
+00:02:06.376 --> 00:02:13.269
+[Musa]: Maybe you heard that in the background?
+
+00:02:13.269 --> 00:02:15.389
+The cool thing is, your code immediately takes form.
+
+00:02:15.389 --> 00:02:18.469
+Right away, you see it doing things, you know,
+
+00:02:18.469 --> 00:02:20.349
+altering your environment.
+
+00:02:20.349 --> 00:02:24.429
+For example, this is JavaScript,
+
+00:02:24.429 --> 00:02:28.349
+and JavaScript here is gonna change Emacs for us.
+
+00:02:28.349 --> 00:02:32.109
+So `C-x C-n`. And you can see down here
+
+00:02:32.109 --> 00:02:34.669
+`javascript-eval` was invoked.
+
+00:02:34.669 --> 00:02:38.789
+It returned true, and this line of JavaScript
+
+00:02:38.789 --> 00:02:41.709
+altered our Emacs. So that's really nice.
+
+00:02:41.709 --> 00:02:43.749
+So you don't need to use just Emacs Lisp if you like.
+
+00:02:43.749 --> 00:02:46.149
+You can use other systems.
+
+00:02:46.149 --> 00:02:50.069
+As you saw, the output is shown in overlays.
+
+00:02:50.069 --> 00:02:52.869
+So here's, for example, `C-x C-p` to run
+
+00:02:52.869 --> 00:02:54.109
+some Python code.
+
+00:02:54.109 --> 00:02:55.476
+Notice it blinked in red
+
+00:02:55.476 --> 00:02:56.869
+because I thought red was nice.
+
+00:02:56.869 --> 00:02:58.389
+You can configure as you like.
+
+00:02:58.389 --> 00:02:59.409
+And if you hover over it,
+
+00:02:59.409 --> 00:03:01.869
+you can see the solution there,
+
+00:03:01.869 --> 00:03:04.669
+and you can see it in a variety of familiar ways
+
+00:03:04.669 --> 00:03:08.709
+if you use `C-x C-e` regularly.
+
+00:03:08.709 --> 00:03:09.989
+You can insert the results.
+
+00:03:09.989 --> 00:03:14.269
+You can find documentation about them.
+
+00:03:14.269 --> 00:03:15.989
+The idea here is that
+
+00:03:15.989 --> 00:03:20.389
+you have this familiar Lisp workflow
+
+00:03:20.389 --> 00:03:24.989
+with `C-x C-e`, and this package ports it over
+
+00:03:24.989 --> 00:03:27.069
+to your favorite language out.
+
+00:03:27.069 --> 00:03:28.343
+So you can eval things,
+
+00:03:28.343 --> 00:03:30.789
+you can insert them, and do as you like.
+
+00:03:30.789 --> 00:03:35.809
+I think that's really neat.
+
+NOTE An overview of REPL Driven Development
+
+00:03:35.809 --> 00:03:37.209
+This package allows you to do
+
+00:03:37.209 --> 00:03:39.109
+REPL driven development.
+
+00:03:39.109 --> 00:03:42.309
+In that, you can use it to grow your program.
+
+00:03:42.309 --> 00:03:43.709
+You don't need to restart it.
+
+00:03:43.709 --> 00:03:45.549
+You can see changes live.
+
+00:03:45.549 --> 00:03:50.149
+So here's, for example, this is in a Java runtime.
+
+00:03:50.149 --> 00:03:52.869
+You can see some balls bouncing around.
+
+00:03:52.869 --> 00:03:54.509
+I don't really know which one is the second one,
+
+00:03:54.509 --> 00:03:57.229
+but let's increase its size. `C-x C-j`.
+
+00:03:57.229 --> 00:04:00.189
+And this one increased in size,
+
+00:04:00.189 --> 00:04:02.189
+and you can see down here I pressed `C-x C-j`.
+
+00:04:02.189 --> 00:04:05.549
+Let's change the color to blue,
+
+00:04:05.549 --> 00:04:09.309
+`C-x C-j`, the color is blue.
+
+00:04:09.309 --> 00:04:12.376
+So all these changes are happening live.
+
+00:04:12.376 --> 00:04:14.429
+Three balls isn't really a ball pit.
+
+00:04:14.429 --> 00:04:18.989
+Let's go to 50 balls. There you go.
+
+00:04:18.989 --> 00:04:21.469
+So it's nice that you can do this
+
+00:04:21.469 --> 00:04:23.209
+without leaving your environment,
+
+00:04:23.209 --> 00:04:26.189
+without building, you can rapidly modify and see.
+
+00:04:26.189 --> 00:04:29.776
+I think that's nice.
+
+00:04:29.776 --> 00:04:32.829
+Unfortunately, I'm at the halfway point,
+
+00:04:32.829 --> 00:04:35.309
+so I won't be able to work through
+
+00:04:35.309 --> 00:04:37.109
+some of these nice problems,
+
+00:04:37.109 --> 00:04:38.676
+but you can see the videos
+
+00:04:38.676 --> 00:04:41.509
+or GIFs on the associated repo.
+
+00:04:41.509 --> 00:04:42.709
+Likewise for this one.
+
+00:04:42.709 --> 00:04:43.909
+This one would have been a lot of fun,
+
+00:04:43.909 --> 00:04:46.509
+but unfortunately, we're running short on time.
+
+00:04:46.509 --> 00:04:51.143
+Apologies.
+
+NOTE REPL Driven Development with Java
+
+00:04:51.143 --> 00:04:56.209
+The neat thing here is: this package tries to
+
+00:04:56.209 --> 00:05:00.269
+bring the feeling of Lisp to other languages.
+
+00:05:00.269 --> 00:05:03.509
+So the idea of a REPL, or a Read Eval Print Loop
+
+00:05:03.509 --> 00:05:06.949
+is R and P are data interchange protocols.
+
+00:05:06.949 --> 00:05:09.869
+Unfortunately, not every language has those,
+
+00:05:09.869 --> 00:05:12.709
+but this package kind of encourages us to
+
+00:05:12.709 --> 00:05:14.643
+implement them if we don't have them.
+
+00:05:14.643 --> 00:05:16.909
+Let me show you an example.
+
+00:05:16.909 --> 00:05:20.589
+What do I mean here?
+
+00:05:20.589 --> 00:05:22.709
+This is a Java file.
+
+00:05:22.709 --> 00:05:25.189
+I've loaded this definition in.
+
+00:05:25.189 --> 00:05:28.543
+We can press `C-x C-j`,
+
+00:05:28.543 --> 00:05:30.909
+and you see it's a list of person.
+
+00:05:30.909 --> 00:05:33.829
+I didn't give this a name, so its name is $59.
+
+00:05:33.829 --> 00:05:40.829
+If I hover over it, we can see the definition again.
+
+00:05:40.829 --> 00:05:44.429
+So it's a person called Hamid, age 5,
+
+00:05:44.429 --> 00:05:46.229
+another person called Jaafar, age 6.
+
+00:05:46.229 --> 00:05:52.229
+This pretty printing is nice for me as a human,
+
+00:05:52.229 --> 00:05:56.349
+but I can't execute this. This isn't valid Java.
+
+00:05:56.349 --> 00:06:00.609
+So I could do `C-u C-x C-j`.
+
+00:06:00.609 --> 00:06:05.109
+If I have the help of a read protocol inserted.
+
+00:06:05.109 --> 00:06:09.469
+Sorry, `C-x C-j`. There it is.
+
+00:06:09.469 --> 00:06:12.549
+So look, it gives me a `new Person`
+
+00:06:12.549 --> 00:06:14.349
+with the construction everything.
+
+00:06:14.349 --> 00:06:16.549
+Now I can work with.
+
+00:06:16.549 --> 00:06:17.949
+Java can work with this.
+
+00:06:17.949 --> 00:06:21.709
+So this can be quite useful for regression testing
+
+00:06:21.709 --> 00:06:25.749
+or just to find out what your method spits out.
+
+00:06:25.749 --> 00:06:29.869
+We can do the same thing. Here's a bigger example.
+
+00:06:29.869 --> 00:06:32.389
+Trying to see it in the overlay is a bit cramped.
+
+00:06:32.389 --> 00:06:34.589
+We can say `C-u C-x C-j`.
+
+00:06:34.589 --> 00:06:38.669
+All right, and now we have executable code.
+
+00:06:38.669 --> 00:06:40.876
+Okay, this is neat.
+
+00:06:40.876 --> 00:06:42.389
+If you want to do something with it.
+
+00:06:42.389 --> 00:06:45.789
+I'm not really interested. I have four new persons.
+
+00:06:45.789 --> 00:06:49.309
+If I really want to look at this,
+
+00:06:49.309 --> 00:06:55.649
+I can say `M-x java-eval-navigate-output`,
+
+00:06:55.649 --> 00:07:00.829
+and now I see my output as this hierarchical tree.
+
+00:07:00.829 --> 00:07:03.589
+I go down, I can see what's inside these,
+
+00:07:03.589 --> 00:07:06.709
+what's the type of this thing, what's in there.
+
+00:07:06.709 --> 00:07:09.349
+All right, so that's nice.
+
+00:07:09.349 --> 00:07:14.189
+The idea is that we're not limited to
+
+00:07:14.189 --> 00:07:15.629
+just textual output.
+
+00:07:15.629 --> 00:07:19.589
+We can render output,
+
+00:07:19.589 --> 00:07:22.229
+thanks to the power of Emacs, in any way we want.
+
+00:07:22.229 --> 00:07:26.749
+In a browser, in a LaTeX file, in an Org mode (file),
+
+00:07:26.749 --> 00:07:28.029
+however we really desire.
+
+NOTE Bring your own Read Protocol
+
+00:07:28.029 --> 00:07:32.989
+And if our language doesn't have an easy protocol,
+
+00:07:32.989 --> 00:07:36.143
+so what I did for Java in particular was:
+
+00:07:36.143 --> 00:07:38.643
+you take a blob, and you use some
+
+00:07:38.643 --> 00:07:43.149
+parsing expression grammars, or if you really want
+
+00:07:43.149 --> 00:07:44.949
+regular expression pattern matching,
+
+00:07:44.949 --> 00:07:46.829
+and you get some property list out,
+
+00:07:46.829 --> 00:07:51.349
+and then you construct an executable expression
+
+00:07:51.349 --> 00:07:53.149
+out of that. Like this `new Person`.
+
+00:07:53.149 --> 00:07:56.749
+It's nice that you can do these kind of things
+
+00:07:56.749 --> 00:07:59.669
+and that this software encourages you to do them.
+
+NOTE Use Case: RDD & Job Interviews
+
+00:07:59.669 --> 00:08:07.549
+So one use case I actually use
+
+00:08:07.549 --> 00:08:10.909
+besides learning things is…
+
+00:08:10.909 --> 00:08:14.776
+oops oops oopsies oopsies showing you metadata
+
+00:08:14.776 --> 00:08:15.509
+you shouldn't be looking at.
+
+00:08:15.509 --> 00:08:19.409
+Don't look at my metadata. Sorry about that.
+
+00:08:19.409 --> 00:08:23.209
+One place I actually use this besides learning
+
+00:08:23.209 --> 00:08:25.029
+and trying new libraries and APIs
+
+00:08:25.029 --> 00:08:26.776
+and stuff like that is,
+
+00:08:26.776 --> 00:08:29.509
+for example, when I interviewed for jobs
+
+00:08:29.509 --> 00:08:33.229
+last year (I was changing jobs),
+
+00:08:33.229 --> 00:08:34.676
+I would share my screen,
+
+00:08:34.676 --> 00:08:37.869
+and if the interviewer gave me
+
+00:08:37.869 --> 00:08:39.949
+some inputs and outputs to play with,
+
+00:08:39.949 --> 00:08:41.576
+I could do essentially
+
+00:08:41.576 --> 00:08:42.976
+some sort of test driven development
+
+00:08:42.976 --> 00:08:45.149
+and constantly evaluate things
+
+00:08:45.149 --> 00:08:46.589
+right in front of the interviewer.
+
+00:08:46.589 --> 00:08:49.949
+For some design questions
+
+00:08:49.949 --> 00:08:53.909
+rather than sketching out my ideas in a Google Doc,
+
+00:08:53.909 --> 00:08:55.509
+I would share my screen and be like,
+
+00:08:55.509 --> 00:08:57.989
+"Hey, here's actual executable code,
+
+00:08:57.989 --> 00:08:59.229
+we can stub some things out
+
+00:08:59.229 --> 00:09:00.576
+and have some types,"
+
+00:09:00.576 --> 00:09:03.476
+and the idea is we can still check things
+
+00:09:03.476 --> 00:09:05.643
+and run them right there and then,
+
+00:09:05.643 --> 00:09:08.143
+which I thought was quite nice, and it helps to
+
+00:09:08.143 --> 00:09:10.309
+clarify your thought process, I guess.
+
+00:09:10.309 --> 00:09:15.149
+Anyhow, so that's my time,
+
+00:09:15.149 --> 00:09:19.829
+I hope you've enjoyed this little package,
+
+00:09:19.829 --> 00:09:22.869
+and again, sorry for the rush,
+
+00:09:22.869 --> 00:09:24.149
+it's a lightning talk.
+
+00:09:24.149 --> 00:09:29.069
+Feel free to find everything on the associated repo.
+
+00:09:29.069 --> 00:09:34.389
+And have a wonderful December Saturday.
+
+00:09:34.389 --> 00:09:37.029
+Take care! Bye bye, everyone.
diff --git a/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt b/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt
new file mode 100644
index 00000000..5d17e1de
--- /dev/null
+++ b/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt
@@ -0,0 +1,755 @@
+WEBVTT
+
+
+00:00:01.880 --> 00:00:02.380
+That's how I came into this.
+
+00:00:10.120 --> 00:00:10.480
+Finally, the next big thing was starting
+
+00:00:16.100 --> 00:00:16.600
+2005, I went fully Linux and then for Mac OS,
+
+00:00:19.540 --> 00:00:20.040
+and I switched to vanilla self-compiled
+
+00:00:25.279 --> 00:00:25.779
+versions of Emacs. So what do I want to show?
+
+00:00:30.540 --> 00:00:30.920
+Couple of time ago in the development list
+
+00:00:34.540 --> 00:00:34.760
+there was a short exchange about the nil and
+
+00:00:38.400 --> 00:00:38.900
+the flood button, flood button button styles,
+
+00:00:42.480 --> 00:00:42.700
+saying that it was equivalent and they are
+
+00:00:45.480 --> 00:00:45.980
+not. So instead of starting a Flame Wars,
+
+00:00:49.220 --> 00:00:49.720
+I thought it was better to go and publicize
+
+00:00:54.520 --> 00:00:55.020
+the goodies you get with Flood Button.
+
+00:00:57.260 --> 00:00:57.440
+And this is what I'm going to be showing you
+
+00:01:00.140 --> 00:01:00.640
+practically. Why Flood Button?
+
+00:01:06.020 --> 00:01:06.500
+2005, more or less, I came across DOOM Emacs,
+
+00:01:07.660 --> 00:01:08.160
+which was nice. And I,
+
+00:01:12.180 --> 00:01:12.600
+especially I liked the DOOM mode line,
+
+00:01:13.740 --> 00:01:14.040
+which was, I think it is,
+
+00:01:15.560 --> 00:01:16.060
+it is, and it was cool at that time.
+
+00:01:20.280 --> 00:01:20.500
+I was using other themes and it was not that
+
+00:01:23.760 --> 00:01:24.020
+easy to adapt for these other themes and even
+
+00:01:26.080 --> 00:01:26.280
+less when you are in an environment with
+
+00:01:30.060 --> 00:01:30.560
+dynamic themes like mine because I tend to
+
+00:01:36.500 --> 00:01:36.680
+adapt the theme to the light conditions in my
+
+00:01:40.520 --> 00:01:40.760
+working place. So what I did at the end was
+
+00:01:44.540 --> 00:01:44.820
+coming up with a style for faces called flood
+
+00:01:49.020 --> 00:01:49.140
+button for boxes, called flood button as a
+
+00:01:52.640 --> 00:01:53.140
+simple way to get modern looking buttons and
+
+00:01:59.160 --> 00:01:59.380
+bars. So flood button is a face style for
+
+00:02:02.380 --> 00:02:02.740
+boxes within buttons that automatically sets
+
+00:02:05.240 --> 00:02:05.440
+the border color to the background of the
+
+00:02:08.440 --> 00:02:08.880
+face, as opposed to nil,
+
+00:02:10.440 --> 00:02:10.940
+which uses the foreground.
+
+00:02:14.380 --> 00:02:14.880
+And this produces a very doom mode line-ish
+
+00:02:18.400 --> 00:02:18.640
+look and feel. And if you want to know where
+
+00:02:21.580 --> 00:02:21.780
+I use it, basically for the mode line and I'm
+
+00:02:24.720 --> 00:02:25.200
+using tab line for a long time now.
+
+00:02:28.480 --> 00:02:28.680
+So for the mode line and for tab line to
+
+00:02:35.080 --> 00:02:35.280
+organize my windows. And since an image is
+
+00:02:37.160 --> 00:02:37.660
+worth more than a thousand words,
+
+00:02:40.860 --> 00:02:41.160
+I'm just going to stop this and start sharing
+
+00:02:44.120 --> 00:02:44.360
+a small Emacs environment I have ready for
+
+00:02:47.020 --> 00:02:47.220
+this talk where I'm going to show you a flat
+
+00:02:50.220 --> 00:02:50.720
+button in real life. So if you hold with me,
+
+00:02:56.100 --> 00:02:56.600
+I'm going to share a window.
+
+00:02:58.840 --> 00:02:59.340
+It's going to be this 1.
+
+00:03:01.386 --> 00:03:01.430
+Share and share. Here we are.
+
+00:03:01.780 --> 00:03:02.280
+And share. Here we are.
+
+00:03:08.040 --> 00:03:08.540
+So this is an Emacs which is recent,
+
+00:03:13.460 --> 00:03:13.740
+reasonably recent. Nothing especially it was
+
+00:03:14.900 --> 00:03:15.400
+compiled, it's Emacs 30.
+
+00:03:18.480 --> 00:03:18.780
+And I think what I have here is something
+
+00:03:19.900 --> 00:03:20.400
+that I compiled last weekend.
+
+00:03:24.940 --> 00:03:25.140
+I was tempted to use something compiled this
+
+00:03:28.080 --> 00:03:28.580
+morning, but I saw a patch by Ellie regarding
+
+00:03:30.640 --> 00:03:31.140
+something in the faces and I didn't want to
+
+00:03:34.160 --> 00:03:34.440
+live a too risky life here,
+
+00:03:36.220 --> 00:03:36.720
+so I'm going to use this.
+
+00:03:40.740 --> 00:03:41.240
+I'm not starting the ZMAC from the normal
+
+00:03:44.160 --> 00:03:44.660
+Emacs directory. I have my own,
+
+00:03:49.440 --> 00:03:49.840
+I have a special customization directory for
+
+00:03:51.560 --> 00:03:52.060
+Emacs, and this is this 1.
+
+00:03:57.760 --> 00:03:58.100
+And here what I have is basically an early
+
+00:04:01.880 --> 00:04:02.220
+init and an init. So the early init,
+
+00:04:03.680 --> 00:04:03.900
+which is quite stupid as you see,
+
+00:04:07.800 --> 00:04:08.300
+the only thing that it does is getting rid of
+
+00:04:10.640 --> 00:04:10.800
+most of the things that I'm not going to be
+
+00:04:12.740 --> 00:04:13.240
+using here. So I have no toolbar,
+
+00:04:15.700 --> 00:04:16.200
+no scroll bar, no tool tips.
+
+00:04:20.560 --> 00:04:20.760
+I don't like global highlighting my line art,
+
+00:04:21.720 --> 00:04:22.040
+so I'm not using that.
+
+00:04:22.800 --> 00:04:23.300
+I'm not using dialogues.
+
+00:04:25.560 --> 00:04:26.060
+And to start up easier,
+
+00:04:29.440 --> 00:04:29.940
+I don't inhibit, I don't use any startups
+
+00:04:34.540 --> 00:04:35.020
+screen. So just to make sure that everything
+
+00:04:41.360 --> 00:04:41.860
+is correct, that everything is as I want,
+
+00:04:44.840 --> 00:04:45.340
+just to show you my Emacs.
+
+00:04:49.240 --> 00:04:49.740
+As you see the Emacs 30,
+
+00:04:53.900 --> 00:04:54.100
+which was built on the 26th of November which
+
+00:04:55.520 --> 00:04:56.020
+was not very long ago.
+
+00:04:57.880 --> 00:04:58.380
+And now here comes the real magic.
+
+00:05:00.540 --> 00:05:01.040
+My init and my init file.
+
+00:05:04.020 --> 00:05:04.520
+Maybe I go to my init file here.
+
+00:05:11.880 --> 00:05:12.040
+What I have is just a variable saying that I
+
+00:05:15.880 --> 00:05:16.380
+want an extra 8 pixels for my mode line.
+
+00:05:18.240 --> 00:05:18.740
+And I have 2 functions.
+
+00:05:23.800 --> 00:05:24.300
+1 is modifying the mode line,
+
+00:05:25.920 --> 00:05:26.420
+both the active and the inactive,
+
+00:05:32.180 --> 00:05:32.680
+using the nil style with this line width of 8
+
+00:05:36.380 --> 00:05:36.600
+pixels and to compare with it what I have
+
+00:05:39.140 --> 00:05:39.640
+here is another function which will customize
+
+00:05:42.400 --> 00:05:42.780
+the face for mode line and instead of using
+
+00:05:44.960 --> 00:05:45.460
+nil I'm using here flat button.
+
+00:05:49.440 --> 00:05:49.940
+So this is my all the magic that I need.
+
+00:05:53.240 --> 00:05:53.500
+I'm going to copy that and I'm going to go to
+
+00:05:57.340 --> 00:05:57.520
+the scratch buffer which is always the best
+
+00:05:58.780 --> 00:05:59.280
+way of checking these things.
+
+00:06:05.660 --> 00:06:06.100
+When I normally work with themes,
+
+00:06:09.320 --> 00:06:09.520
+what I do is if I want to further modify the
+
+00:06:13.620 --> 00:06:14.120
+themes, I add an advice to load a theme after
+
+00:06:17.800 --> 00:06:18.040
+the theme is loaded. In this first case,
+
+00:06:21.280 --> 00:06:21.540
+what I'm going to be doing is adding the nil
+
+00:06:22.680 --> 00:06:23.180
+sign so that you can see it.
+
+00:06:30.240 --> 00:06:30.740
+And once this is done,
+
+00:06:33.000 --> 00:06:33.500
+I'm going to load 1 of the Modo Soprandi
+
+00:06:42.600 --> 00:06:43.100
+themes, the tinted 1. Here we are.
+
+00:06:56.400 --> 00:06:56.900
+And as you can see, when I loaded the theme,
+
+00:07:01.880 --> 00:07:02.160
+what I see here is my mode line with the
+
+00:07:05.320 --> 00:07:05.580
+x-ray pixels using since I'm using the nil
+
+00:07:09.520 --> 00:07:09.720
+style it's using the background color and
+
+00:07:12.620 --> 00:07:13.120
+this gives you this thick black line there
+
+00:07:17.080 --> 00:07:17.240
+furthermore if you have the inactive line you
+
+00:07:20.660 --> 00:07:21.040
+see that it is grayed out so it's always
+
+00:07:22.800 --> 00:07:23.300
+using the foreground color.
+
+00:07:33.300 --> 00:07:33.480
+So now what I'm going to do is to load the
+
+00:07:35.200 --> 00:07:35.700
+models we have any which is the dark theme
+
+00:07:40.080 --> 00:07:40.400
+and this case what you see is the love deal
+
+00:07:43.220 --> 00:07:43.720
+the lines always using the foreground color
+
+00:07:49.200 --> 00:07:49.700
+use the Give you an extra 8 pixels of a white
+
+00:07:53.000 --> 00:07:53.500
+color here, which is not what we really want.
+
+00:07:58.900 --> 00:07:59.240
+At least not what I wanted to have.
+
+00:08:01.560 --> 00:08:02.060
+So what I'm going to do now is I'm going to
+
+00:08:08.940 --> 00:08:09.440
+remove this advice and add the flat style
+
+00:08:12.800 --> 00:08:13.260
+thing, flat style function,
+
+00:08:15.480 --> 00:08:15.920
+so that we're going to do the same.
+
+00:08:18.380 --> 00:08:18.540
+But now when I load the themes I'm going to
+
+00:08:20.760 --> 00:08:21.040
+have a flat button style for the mode line
+
+00:08:21.880 --> 00:08:22.380
+and you'll see the difference.
+
+00:08:29.480 --> 00:08:29.980
+So if I now load Modo Software Andy theme,
+
+00:08:35.380 --> 00:08:35.640
+tint it, what I get here is as you see I get
+
+00:08:40.520 --> 00:08:40.760
+a solid mode line which is a bit more which
+
+00:08:49.240 --> 00:08:49.400
+is wider than the normal mode line And if I
+
+00:08:53.140 --> 00:08:53.480
+go to the dark theme, I am going to see,
+
+00:08:55.440 --> 00:08:55.920
+you're going to see that now the theme
+
+00:08:59.860 --> 00:09:00.360
+changes and I have a mode line which is,
+
+00:09:02.700 --> 00:09:03.080
+if not the doom mode line,
+
+00:09:08.260 --> 00:09:08.760
+quite close to the Doom mode line.
+
+00:09:11.200 --> 00:09:11.700
+Where do I use this? Personally,
+
+00:09:15.280 --> 00:09:15.580
+I use it for the mode line and for the tab
+
+00:09:18.960 --> 00:09:19.460
+line, as I've said. And it gives me this
+
+00:09:27.040 --> 00:09:27.340
+clean themes with thicker mode line and tab
+
+00:09:33.620 --> 00:09:34.120
+lines which at least in my personal feeling
+
+00:09:40.160 --> 00:09:40.660
+look quite modern. And this will be my
+
+00:09:43.820 --> 00:09:44.200
+demonstration. So I'm going to stop sharing
+
+00:09:46.820 --> 00:09:46.960
+the screen and I'm going to try and see if
+
+00:09:49.400 --> 00:09:49.900
+there's anything on the on the chat.
+
+00:09:57.040 --> 00:09:57.360
+And I just wanted to know if there are any
+
+00:10:01.240 --> 00:10:01.740
+questions. Thank you Pedro.
+
+00:10:05.000 --> 00:10:05.180
+Yeah We are now into the Q&A portion of the
+
+00:10:06.420 --> 00:10:06.920
+talk. So if folks have questions,
+
+00:10:10.080 --> 00:10:10.240
+please post them on IRC or on the pad and
+
+00:10:11.040 --> 00:10:11.540
+we'll take them up here.
+
+00:10:25.400 --> 00:10:25.900
+Okay, I see a question here saying,
+
+00:10:28.520 --> 00:10:28.860
+do you plan to upstream the style into
+
+00:10:32.580 --> 00:10:32.900
+core-remix? It's part of core-remix since
+
+00:10:35.800 --> 00:10:36.300
+Emacs 29, so you have it.
+
+00:10:49.060 --> 00:10:49.540
+How difficult to...I mean,
+
+00:10:54.320 --> 00:10:54.620
+you already have the flat button style in
+
+00:10:57.660 --> 00:10:57.940
+Core Remax. And you've seen that the main
+
+00:11:00.740 --> 00:11:00.980
+thing is, if you want to have a thing like
+
+00:11:06.660 --> 00:11:06.940
+that, you just have to customize the face.
+
+00:11:10.920 --> 00:11:11.420
+I don't think it's too difficult to do.
+
+00:11:13.380 --> 00:11:13.880
+It's adding the style that you want.
+
+00:11:17.360 --> 00:11:17.860
+So if you want to see it again,
+
+00:11:20.860 --> 00:11:21.160
+I'm going to go and share the screen once
+
+00:11:23.980 --> 00:11:24.160
+again and show you the only thing that you
+
+00:11:31.740 --> 00:11:32.240
+really need to do. And control X 1,
+
+00:11:34.680 --> 00:11:35.180
+control X buffer to init.
+
+00:11:41.040 --> 00:11:41.320
+So this is what you would have to do to get
+
+00:11:48.880 --> 00:11:49.020
+your mode line or mode line inactive with a
+
+00:11:52.360 --> 00:11:52.660
+flat button style. So what you do is you get
+
+00:11:56.120 --> 00:11:56.280
+your face like this, the face that you want
+
+00:11:59.640 --> 00:12:00.060
+to modify. You say that you inherit from the
+
+00:12:02.920 --> 00:12:03.200
+original face and what you do is that you add
+
+00:12:06.820 --> 00:12:07.000
+a box with the line width that you want and
+
+00:12:08.040 --> 00:12:08.540
+the style plug button.
+
+00:12:10.900 --> 00:12:11.400
+I don't think it's too difficult to do.
+
+00:12:23.100 --> 00:12:23.600
+How much work was involved in implementing
+
+00:12:27.360 --> 00:12:27.780
+this style? It is not 1 of the biggest
+
+00:12:28.940 --> 00:12:29.440
+patches you have in Emacs.
+
+00:12:32.260 --> 00:12:32.640
+It was my first patch,
+
+00:12:34.500 --> 00:12:34.960
+so it was like 20 liners.
+
+00:12:40.280 --> 00:12:40.780
+It's not too much. Yes,
+
+00:12:44.540 --> 00:12:45.040
+I am going to go and...
+
+00:12:54.733 --> 00:12:54.800
+Oops. SKB and... There you are.
+
+00:12:58.660 --> 00:12:58.900
+And there you are. I've checked it for copy
+
+00:13:05.440 --> 00:13:05.580
+and paste. Of course, then what you have to
+
+00:13:09.440 --> 00:13:09.760
+do is to add an advice and add this thing
+
+00:13:16.680 --> 00:13:16.980
+after the add this code after the well after
+
+00:13:17.760 --> 00:13:18.260
+you've loaded the theme.
+
+00:13:22.420 --> 00:13:22.920
+It says, ModeLine and ModeLineInactive.
+
+00:13:27.400 --> 00:13:27.720
+I'm also using it for TabLine and
+
+00:13:29.820 --> 00:13:30.060
+TabLineInactive and all this kind of things.
+
+00:13:30.060 --> 00:13:30.560
+Thanks.
+
+00:14:00.660 --> 00:14:01.160
+Thanks. Any other questions?
+
+00:14:35.020 --> 00:14:35.520
+Reactions? Thank you. Thank you.
+
+00:15:04.160 --> 00:15:04.340
+Okay, I think we still have about 6 or 7 more
+
+00:15:05.840 --> 00:15:06.220
+minutes of live Q&A on stream,
+
+00:15:07.400 --> 00:15:07.900
+so if folks have any more questions,
+
+00:15:09.940 --> 00:15:10.440
+please do feel free to post them on the pad.
+
+00:15:30.060 --> 00:15:30.560
+Silence. Silence. Silence.
+
+00:16:02.280 --> 00:16:02.780
+Well, do you teach eMAX to any of your
+
+00:16:04.700 --> 00:16:05.200
+university students? As such,
+
+00:16:08.080 --> 00:16:08.580
+there's no course that we teach,
+
+00:16:12.800 --> 00:16:13.300
+but in tutorships and in tutoring sessions,
+
+00:16:15.460 --> 00:16:15.800
+when we do practical things,
+
+00:16:21.100 --> 00:16:21.300
+and I do a lot, I tend to use Emacs for all
+
+00:16:24.480 --> 00:16:24.960
+the tasks so that the students get involved
+
+00:16:28.220 --> 00:16:28.380
+in it. I also have a small introduction to
+
+00:16:29.640 --> 00:16:30.110
+Emacs that I share with my students.
+
+00:16:33.400 --> 00:16:33.900
+So So every year I have 2 or 3 new adepts.
+
+00:17:43.900 --> 00:17:44.400
+We have a question on IRC.
+
+00:17:46.920 --> 00:17:47.080
+Someone asking can you please show what the
+
+00:17:53.160 --> 00:17:53.660
+tab line looks like? Just a second.
+
+00:17:56.880 --> 00:17:57.380
+This would be like this.
+
+00:18:03.096 --> 00:18:03.193
+For that I'm going to use my regular Emacs.
+
+00:18:06.220 --> 00:18:06.560
+Just my my regular emacs so just let me fire
+
+00:18:09.220 --> 00:18:09.720
+it up. Sure.
+
+00:18:23.540 --> 00:18:24.040
+And
+
+00:18:39.760 --> 00:18:40.120
+That's my current situation with the tab
+
+00:18:42.660 --> 00:18:43.140
+line. I do have a couple of functions.
+
+00:18:44.680 --> 00:18:45.180
+So this is 1 of the things that I use.
+
+00:18:51.500 --> 00:18:51.600
+As you see, both the tab line here and the
+
+00:18:57.040 --> 00:18:57.340
+mode line change. And the other thing is I
+
+00:19:00.520 --> 00:19:01.020
+can, this is for some situations,
+
+00:19:03.600 --> 00:19:03.940
+not currently because it's just later,
+
+00:19:06.420 --> 00:19:06.680
+it's a bit too dark. But this is for light
+
+00:19:10.260 --> 00:19:10.760
+days. I have like 3 or 4 themes that I can
+
+00:19:15.020 --> 00:19:15.140
+switch to these are the themes that I
+
+00:19:18.120 --> 00:19:18.620
+normally use This is how the tab line looks.
+
+00:19:22.660 --> 00:19:23.160
+This is how the tab line here looks with the
+
+00:19:28.280 --> 00:19:28.780
+with a flat button style.
+
+00:19:35.640 --> 00:19:36.140
+Looks great, Thank you for sharing.
+
+00:19:37.200 --> 00:19:37.700
+You're welcome.
+
+00:19:50.720 --> 00:19:51.220
+Okay, I think we have 2 or 3 more minutes.
+
+00:19:53.600 --> 00:19:54.100
+So if folks, if you have any final questions
+
+00:19:55.480 --> 00:19:55.980
+for Pedro, please post them in.
+
+00:20:37.360 --> 00:20:37.860
+Okay. Okay.
+
+00:20:54.260 --> 00:20:54.760
+Okay.
+
+00:21:34.540 --> 00:21:34.700
+No further questions. Yeah,
+
+00:21:36.380 --> 00:21:36.880
+it seems we don't have any further questions.
+
+00:21:39.100 --> 00:21:39.480
+Just another audience member also thanking
+
+00:21:44.060 --> 00:21:44.200
+you on the chat. So with that,
+
+00:21:45.320 --> 00:21:45.480
+I'll say Thank you very much,
+
+00:21:47.080 --> 00:21:47.580
+Pedro, for your great talk and for the Q&A,
+
+00:21:50.220 --> 00:21:50.320
+for your work and for helping spreading the
+
+00:21:52.360 --> 00:21:52.860
+joy of Emacs. Okay, thanks.
+
+00:21:56.140 --> 00:21:56.640
+Thank you. Bye-bye. It was a nice experience
+
+00:21:59.200 --> 00:21:59.700
+here. Very nice tool. Cheers.
+
+00:22:01.640 --> 00:22:01.920
+Awesome. Take care. Bye.
+
+00:22:02.720 --> 00:22:03.220
+Bye. Bye.
diff --git a/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt
new file mode 100644
index 00000000..71a15554
--- /dev/null
+++ b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt
@@ -0,0 +1,1049 @@
+WEBVTT
+
+
+00:00:01.620 --> 00:00:02.120
+[Speaker 0]: And then, hi everyone.
+
+00:00:03.760 --> 00:00:04.150
+Thank you for your nice talk,
+
+00:00:05.900 --> 00:00:06.400
+I can say it's the Emacs GC.
+
+00:00:09.280 --> 00:00:09.519
+We have some questions on the pad and maybe
+
+00:00:11.580 --> 00:00:11.820
+before I would like to ask you something to
+
+00:00:12.780 --> 00:00:13.280
+the last 1 you have said,
+
+00:00:15.200 --> 00:00:15.700
+concerning changing the GC strategy,
+
+00:00:18.500 --> 00:00:18.840
+that it's unlikely that it will be happening
+
+00:00:20.380 --> 00:00:20.740
+in the next time. Yeah.
+
+00:00:22.760 --> 00:00:22.940
+Is there any discussion going on or why does
+
+00:00:24.320 --> 00:00:24.820
+the case it's not changing the strategy?
+
+00:00:26.640 --> 00:00:27.140
+[Speaker 1]: It's mostly because it's difficult.
+
+00:00:29.439 --> 00:00:29.860
+I think, yesterday you heard from,
+
+00:00:33.400 --> 00:00:33.900
+1 of the dev talks that like there was 1
+
+00:00:34.980 --> 00:00:35.220
+small, short comment that,
+
+00:00:36.780 --> 00:00:37.280
+oh yeah, it would be nice to change this
+
+00:00:39.059 --> 00:00:39.559
+algorithm but it's hard.
+
+00:00:40.760 --> 00:00:40.840
+[Speaker 0]: So I
+
+00:00:43.260 --> 00:00:43.700
+[Speaker 1]: mean it's hard not because the algorithm is
+
+00:00:45.400 --> 00:00:45.720
+that hard but because it's a very low level
+
+00:00:48.000 --> 00:00:48.500
+code and it must be like very carefully
+
+00:00:49.960 --> 00:00:50.460
+weighted. So that can be,
+
+00:00:53.239 --> 00:00:53.640
+it needs to be made sure that the carousel
+
+00:00:55.280 --> 00:00:55.780
+will work. It's all bugs.
+
+00:00:57.440 --> 00:00:57.600
+If you have bugs and you can see that,
+
+00:00:58.660 --> 00:00:59.160
+so it's nothing to work anymore.
+
+00:01:00.720 --> 00:01:01.200
+[Speaker 0]: So We have a lot of RAM usage.
+
+00:01:02.240 --> 00:01:02.740
+Yeah. Maybe sometime.
+
+00:01:06.180 --> 00:01:06.500
+[Speaker 1]: There was like years ago,
+
+00:01:09.640 --> 00:01:10.140
+there was a branch on generational DC,
+
+00:01:11.100 --> 00:01:11.600
+if I remember correctly,
+
+00:01:13.380 --> 00:01:13.880
+but they didn't go anywhere,
+
+00:01:14.760 --> 00:01:15.260
+unfortunately.
+
+00:01:18.900 --> 00:01:19.240
+[Speaker 0]: That's a pity. But let's come to the
+
+00:01:21.500 --> 00:01:22.000
+questions on the pad. So the first 1 is,
+
+00:01:24.340 --> 00:01:24.840
+are the GC duration statistics correlated
+
+00:01:27.340 --> 00:01:27.660
+with users? I mean, does the same user
+
+00:01:29.440 --> 00:01:29.940
+experience GC of various durations?
+
+00:01:32.900 --> 00:01:33.400
+Or Do some users experience GC of a greater
+
+00:01:36.680 --> 00:01:36.960
+0.26 exclusively, while others never
+
+00:01:40.440 --> 00:01:40.940
+experience them? So is it correlated to user
+
+00:01:43.780 --> 00:01:44.280
+behavior? I guess you said it in your talk.
+
+00:01:46.160 --> 00:01:46.660
+[Speaker 1]: Well, If you talk formally,
+
+00:01:49.340 --> 00:01:49.540
+then almost every user has like 1 or 2
+
+00:01:51.500 --> 00:01:52.000
+occasions when GC takes more than 0.2
+
+00:01:53.040 --> 00:01:53.540
+seconds, but it's like,
+
+00:01:56.720 --> 00:01:57.040
+maybe something else is using CPU and that's
+
+00:02:00.720 --> 00:02:00.920
+why, but in practice, there are users who
+
+00:02:04.200 --> 00:02:04.540
+don't have problem. Half of them that that's
+
+00:02:05.800 --> 00:02:06.300
+who that's what I looked from statistics.
+
+00:02:10.240 --> 00:02:10.440
+And dry users who have like really big
+
+00:02:12.520 --> 00:02:13.020
+problems, like 1 second GC time.
+
+00:02:17.280 --> 00:02:17.520
+[Speaker 0]: This is dependent on you make some comments
+
+00:02:19.960 --> 00:02:20.460
+on us in the talk, but could you like extract
+
+00:02:23.000 --> 00:02:23.200
+on if it's a package, that's a problem or we
+
+00:02:24.780 --> 00:02:25.280
+as a user behavior are there.
+
+00:02:30.720 --> 00:02:31.220
+[Speaker 1]: Usually it's something that is,
+
+00:02:33.760 --> 00:02:33.960
+okay. I'm sharing my screen now,
+
+00:02:37.580 --> 00:02:38.080
+[Speaker 0]: It's coming on, give it like 2 to 3 seconds.
+
+00:02:41.480 --> 00:02:41.980
+[Speaker 1]: right? Yeah. So I can just click through
+
+00:02:42.940 --> 00:02:43.440
+different user statistics.
+
+00:02:48.840 --> 00:02:49.080
+So like you can see this duration for each
+
+00:02:49.960 --> 00:02:50.460
+individual user basically.
+
+00:02:54.240 --> 00:02:54.740
+So you can see like here for example it's
+
+00:02:56.320 --> 00:02:56.820
+like averages around 0.25
+
+00:03:00.040 --> 00:03:00.420
+seconds which is noticeable and here is like
+
+00:03:03.640 --> 00:03:03.960
+0.1 like someone is all over the place,
+
+00:03:09.560 --> 00:03:10.060
+probably some. Then like,
+
+00:03:11.520 --> 00:03:12.020
+what else can we see here?
+
+00:03:15.140 --> 00:03:15.640
+Yeah, some users like have sub 0.1,
+
+00:03:23.320 --> 00:03:23.560
+no problem at all. And I have seen some that
+
+00:03:30.180 --> 00:03:30.240
+really, really bad. I mean,
+
+00:03:31.880 --> 00:03:32.240
+[Speaker 0]: if it's noticeable, it's all bad.
+
+00:03:36.960 --> 00:03:37.460
+[Speaker 1]: So yeah. For example, here it's like 0.8
+
+00:03:41.680 --> 00:03:42.040
+seconds, 0.5 seconds. I don't know how that
+
+00:03:48.600 --> 00:03:49.100
+guy uses ZMax. Yeah. you can see it varies.
+
+00:03:51.160 --> 00:03:51.660
+[Speaker 0]: So It varies quite a lot.
+
+00:03:52.760 --> 00:03:53.000
+[Speaker 1]: What it depends on, like,
+
+00:03:54.120 --> 00:03:54.620
+usually the number of packages,
+
+00:03:58.440 --> 00:03:58.620
+like all kinds of timers going on under the
+
+00:04:01.720 --> 00:04:02.220
+hood. I think I tried to list...
+
+00:04:12.520 --> 00:04:12.800
+I'll go through this. I briefly outlined some
+
+00:04:15.440 --> 00:04:15.940
+important parts. Here,
+
+00:04:18.480 --> 00:04:18.980
+when you have something like an org agenda,
+
+00:04:20.680 --> 00:04:21.180
+it will most likely trigger a lot of GCs.
+
+00:04:23.900 --> 00:04:24.400
+When you have a lot of timers,
+
+00:04:27.800 --> 00:04:27.980
+when you have something calculated on
+
+00:04:29.700 --> 00:04:30.200
+modline, it will be frequently triggered.
+
+00:04:30.900 --> 00:04:31.240
+[Speaker 0]: Well,
+
+00:04:34.080 --> 00:04:34.260
+[Speaker 1]: yeah. When you have so many packages and
+
+00:04:35.760 --> 00:04:36.260
+these packages are using a lot of memory.
+
+00:04:41.120 --> 00:04:41.540
+Like I remember I was surprised by this,
+
+00:04:44.640 --> 00:04:45.020
+package, home org that was,
+
+00:04:46.560 --> 00:04:47.060
+caching all the results.
+
+00:04:48.960 --> 00:04:49.280
+And for large org files,
+
+00:04:51.540 --> 00:04:51.720
+it was like several hundred megabytes of
+
+00:04:55.160 --> 00:04:55.660
+data. Well, it just becomes slower.
+
+00:04:55.900 --> 00:04:56.280
+Yeah.
+
+00:05:00.020 --> 00:05:00.340
+[Speaker 0]: Yeah. Maybe, maybe a short side note.
+
+00:05:02.600 --> 00:05:02.760
+Someone asks, what software you're using for
+
+00:05:03.480 --> 00:05:03.980
+flipping through the PNGs.
+
+00:05:06.660 --> 00:05:07.160
+Maybe you could shortly throws it in.
+
+00:05:08.800 --> 00:05:09.280
+[Speaker 1]: What do you mean? Here,
+
+00:05:11.000 --> 00:05:11.500
+[Speaker 0]: I guess it was just simply,
+
+00:05:13.480 --> 00:05:13.980
+[Speaker 1]: this, It's it's far. Yeah.
+
+00:05:16.660 --> 00:05:17.160
+So
+
+00:05:23.900 --> 00:05:24.400
+[Speaker 0]: yeah. So, question 1 and 2 answered.
+
+00:05:35.740 --> 00:05:36.040
+To 1 statement you have made,
+
+00:05:37.500 --> 00:05:38.000
+there was a question concerning the timings.
+
+00:05:41.180 --> 00:05:41.680
+So you said, okay, everything above 0.1
+
+00:05:45.800 --> 00:05:46.120
+second is fine. Maybe There's a short story
+
+00:05:48.480 --> 00:05:48.980
+of someone who asked a question.
+
+00:05:50.380 --> 00:05:50.800
+[Speaker 1]: I see the question is about scrolling,
+
+00:05:51.820 --> 00:05:52.320
+[Speaker 0]: Yeah, exactly.
+
+00:05:55.580 --> 00:05:55.760
+[Speaker 1]: right? Again, there's not much you can do in
+
+00:05:58.620 --> 00:05:58.860
+terms of trying to adjust the GC time.
+
+00:06:02.320 --> 00:06:02.820
+I mean, if you make GCs less frequent,
+
+00:06:07.540 --> 00:06:08.000
+you increase the individual GC time.
+
+00:06:08.860 --> 00:06:09.280
+If you make them more frequent,
+
+00:06:11.280 --> 00:06:11.520
+you decrease the individual GC time,
+
+00:06:12.400 --> 00:06:12.740
+but then they are more frequent.
+
+00:06:15.920 --> 00:06:16.200
+So what is the point? I think the way to go
+
+00:06:19.940 --> 00:06:20.080
+here is you can rise to see the short for the
+
+00:06:20.740 --> 00:06:21.240
+duration of scrolling,
+
+00:06:22.500 --> 00:06:22.860
+like just for a comment.
+
+00:06:26.320 --> 00:06:26.740
+I think it's a recommendation from Emacs
+
+00:06:31.480 --> 00:06:31.660
+devs. So like You do something along the
+
+00:06:31.660 --> 00:06:32.160
+lines.
+
+00:06:53.480 --> 00:06:53.800
+Yeah, I'm surely doing something on my screen
+
+00:06:55.680 --> 00:06:56.180
+and I forgot that I'm not sharing anything.
+
+00:06:56.680 --> 00:06:57.180
+[Speaker 0]: Exactly.
+
+00:07:00.700 --> 00:07:01.200
+[Speaker 1]: Simply something like this.
+
+00:07:08.140 --> 00:07:08.460
+So, basically, if you have some command that
+
+00:07:10.920 --> 00:07:11.180
+is very important that it should run very
+
+00:07:13.860 --> 00:07:14.120
+quickly. You temporary increase that
+
+00:07:15.740 --> 00:07:16.240
+threshold, you run that comment,
+
+00:07:19.940 --> 00:07:20.140
+then that's all. That's probably the best.
+
+00:07:21.660 --> 00:07:22.000
+So basically, the best you can do is to delay
+
+00:07:23.760 --> 00:07:24.260
+it after the command.
+
+00:07:27.500 --> 00:07:27.700
+[Speaker 0]: So afterwards, it takes a lot of time to do
+
+00:07:36.140 --> 00:07:36.500
+its stuff. OK. The third 1 has been already
+
+00:07:40.520 --> 00:07:40.780
+answered, but I just want to get your
+
+00:07:42.780 --> 00:07:43.280
+information from it. Opinions on the GCMH
+
+00:07:43.940 --> 00:07:44.440
+mode.
+
+00:07:48.280 --> 00:07:48.640
+[Speaker 1]: Okay. Yeah, I see that problem,
+
+00:07:49.920 --> 00:07:50.420
+but that's more like a technical problem.
+
+00:07:52.360 --> 00:07:52.860
+But there's another problem there.
+
+00:07:57.340 --> 00:07:57.840
+Yeah, I prepared a small snippet here.
+
+00:08:02.160 --> 00:08:02.660
+So if you look at the GCMH mode,
+
+00:08:05.800 --> 00:08:06.040
+it has this concept of low threshold and high
+
+00:08:08.200 --> 00:08:08.560
+threshold and most of the time it's running
+
+00:08:14.120 --> 00:08:14.620
+high threshold and then when Emacs is idle,
+
+00:08:17.320 --> 00:08:17.480
+it falls back to lower threshold and then it
+
+00:08:19.400 --> 00:08:19.900
+does the GC while Emacs is not used.
+
+00:08:22.040 --> 00:08:22.360
+That's a good idea, of course.
+
+00:08:24.380 --> 00:08:24.880
+That's the core idea of GCMH mode.
+
+00:08:30.520 --> 00:08:30.720
+Unfortunately, the most annoying GC is when
+
+00:08:31.760 --> 00:08:32.260
+you're actively using max.
+
+00:08:37.120 --> 00:08:37.419
+And then you have this huge value of GC
+
+00:08:38.799 --> 00:08:39.299
+counter show and look at the doc stream.
+
+00:08:41.760 --> 00:08:42.080
+This would be sector value that makes GC
+
+00:08:43.980 --> 00:08:44.480
+unlikely but does not cost OSP Asian.
+
+00:08:46.480 --> 00:08:46.880
+So yeah, no wonder like if you don't do GC,
+
+00:08:49.640 --> 00:08:50.140
+your arm usage will skyrocket.
+
+00:08:54.360 --> 00:08:54.860
+So they don't, they cannot put it too much,
+
+00:08:57.720 --> 00:08:58.220
+but this is like already like,
+
+00:08:59.220 --> 00:08:59.720
+how much was it?
+
+00:09:10.800 --> 00:09:10.860
+1 gigabyte, that's the default.
+
+00:09:15.220 --> 00:09:15.720
+And the problem is when you have 1 gigabyte
+
+00:09:18.680 --> 00:09:19.000
+to garbage collect, it causes really long GC
+
+00:09:22.040 --> 00:09:22.480
+time. So in GC image mode,
+
+00:09:23.560 --> 00:09:24.060
+when you're actually using Emacs,
+
+00:09:28.860 --> 00:09:29.360
+really heavily, the GCs become terrible,
+
+00:09:34.640 --> 00:09:34.860
+terribly slow. So it may help in case you
+
+00:09:37.200 --> 00:09:37.540
+don't have too much problems with GC,
+
+00:09:39.280 --> 00:09:39.720
+but I will say that in such situation,
+
+00:09:41.920 --> 00:09:42.420
+you can simply increase GC cost percentage,
+
+00:09:44.540 --> 00:09:45.040
+as I recommend, and it should do it.
+
+00:09:48.480 --> 00:09:48.640
+But in case of really big problems with
+
+00:09:50.080 --> 00:09:50.540
+garbage collection, no,
+
+00:09:51.740 --> 00:09:52.240
+I don't think that will help much.
+
+00:09:54.800 --> 00:09:54.960
+I used it myself and it didn't help much for
+
+00:09:55.200 --> 00:09:55.700
+my stuff.
+
+00:09:59.680 --> 00:10:00.180
+[Speaker 0]: All right. The next question is concerning
+
+00:10:04.600 --> 00:10:04.820
+freeing up memory. Is there some way to free
+
+00:10:07.200 --> 00:10:07.420
+up memory such as via unload feature on
+
+00:10:09.960 --> 00:10:10.120
+Emacs? Often I only need a package loaded for
+
+00:10:12.240 --> 00:10:12.400
+a single task or short period by the
+
+00:10:13.320 --> 00:10:13.820
+persistent memory afterwards.
+
+00:10:19.780 --> 00:10:19.940
+[Speaker 1]: So the packages are usually not that much of
+
+00:10:22.060 --> 00:10:22.560
+a problem. I mean, the libraries,
+
+00:10:25.280 --> 00:10:25.780
+the problem is some extra,
+
+00:10:30.060 --> 00:10:30.340
+like some variable contents or some
+
+00:10:31.800 --> 00:10:32.300
+histories, some caches.
+
+00:10:35.280 --> 00:10:35.780
+That's what's eating most of the memory.
+
+00:10:40.240 --> 00:10:40.740
+There is a package called memory usage and
+
+00:10:45.440 --> 00:10:45.940
+built in MX memory report.
+
+00:10:50.900 --> 00:10:51.100
+They allow to see which variables take a lot
+
+00:10:56.000 --> 00:10:56.500
+of memory. And that way you can try to see
+
+00:10:58.520 --> 00:10:59.020
+which packages are actually problematic.
+
+00:11:03.340 --> 00:11:03.840
+So for example, I recall,
+
+00:11:05.640 --> 00:11:06.140
+and that was not exactly,
+
+00:11:09.720 --> 00:11:09.880
+I remember there was a package that was
+
+00:11:11.040 --> 00:11:11.260
+literally in command line,
+
+00:11:14.020 --> 00:11:14.240
+like prompt history. I think it was in
+
+00:11:17.540 --> 00:11:18.040
+command. And when you do like,
+
+00:11:20.440 --> 00:11:20.940
+when you save every message in your chart
+
+00:11:25.280 --> 00:11:25.780
+into prompt history, that can grow very fast
+
+00:11:29.220 --> 00:11:29.600
+and can go to several hundred megabytes just
+
+00:11:31.720 --> 00:11:32.020
+in that history. And that can cause major
+
+00:11:37.960 --> 00:11:38.360
+problems. So, yes, profiling the largest
+
+00:11:41.200 --> 00:11:41.600
+variables with the largest buffers that might
+
+00:11:42.660 --> 00:11:42.900
+give some clues. Again,
+
+00:11:43.740 --> 00:11:44.240
+there is no silver bullet.
+
+00:11:49.080 --> 00:11:49.320
+[Speaker 0]: Right. I think the last question on the
+
+00:11:51.000 --> 00:11:51.500
+patterns. At first, very nice presentation.
+
+00:11:51.620 --> 00:11:51.780
+[Speaker 1]: I can
+
+00:11:53.980 --> 00:11:54.480
+[Speaker 0]: also only agree with that.
+
+00:11:56.480 --> 00:11:56.640
+I just experienced with a threshold and
+
+00:11:58.200 --> 00:11:58.700
+lowered my GCE lapse from 1.1
+
+00:12:01.440 --> 00:12:01.940
+to 0.06 seconds during startup.
+
+00:12:03.600 --> 00:12:04.100
+Interestingly, going to 10 megabytes
+
+00:12:06.100 --> 00:12:06.340
+increased the time. 4 megabytes was a sweet
+
+00:12:07.800 --> 00:12:08.300
+spot for my system. What is the recommended
+
+00:12:10.840 --> 00:12:11.260
+way to lower the value back to the default
+
+00:12:12.340 --> 00:12:12.840
+value after startup is completed?
+
+00:12:16.160 --> 00:12:16.660
+[Speaker 1]: I think you just use after init hook.
+
+00:12:23.940 --> 00:12:24.440
+[Speaker 0]: This was a relatively fast answer.
+
+00:12:29.180 --> 00:12:29.480
+[Speaker 1]: So basically for example Doom does this,
+
+00:12:31.940 --> 00:12:32.220
+it temporary writes a gcconcert hold during
+
+00:12:37.260 --> 00:12:37.760
+startup and yeah after init hook the code is
+
+00:12:39.880 --> 00:12:40.380
+like it's 1 of the commonly suggested
+
+00:12:43.940 --> 00:12:44.440
+approaches and is I believe it's the right 1.
+
+00:12:49.180 --> 00:12:49.680
+[Speaker 0]: Right. To have joined us 1 was a microphone.
+
+00:12:52.200 --> 00:12:52.360
+So Peter, do you have any questions that you
+
+00:12:55.240 --> 00:12:55.640
+want to question? And maybe as a side note,
+
+00:12:57.380 --> 00:12:57.740
+we only have 4 minutes left and afterwards
+
+00:12:59.240 --> 00:12:59.480
+this happy weekend will still be open,
+
+00:13:01.400 --> 00:13:01.900
+but we will switch back to the talks.
+
+00:13:05.380 --> 00:13:05.820
+[Speaker 2]: Yeah, no more questions on garbage
+
+00:13:07.640 --> 00:13:08.140
+collection, but I just wanted to thank Ihor
+
+00:13:10.440 --> 00:13:10.940
+for his engagement in the community.
+
+00:13:15.300 --> 00:13:15.480
+And especially with, I'm a co-maintainer on
+
+00:13:17.600 --> 00:13:18.100
+orgnotor and he's helped us a lot with
+
+00:13:21.680 --> 00:13:21.820
+getting us up to date with newer versions of
+
+00:13:22.680 --> 00:13:22.960
+org and stuff like that.
+
+00:13:24.680 --> 00:13:25.140
+So just wanted to thank you in person.
+
+00:13:25.140 --> 00:13:25.640
+[Speaker 1]: Right.
+
+00:13:33.540 --> 00:13:33.800
+[Speaker 0]: Maybe 1 question for me,
+
+00:13:35.460 --> 00:13:35.760
+you had some bit talked about memory
+
+00:13:40.640 --> 00:13:40.800
+fragmentation. So is there any way to or is
+
+00:13:42.080 --> 00:13:42.580
+it fixed by Emacs itself?
+
+00:13:43.740 --> 00:13:43.940
+So you have like
+
+00:13:46.520 --> 00:13:46.980
+[Speaker 1]: a chunk of memory fragmentation is basically
+
+00:13:51.420 --> 00:13:51.600
+your OS. Yeah, Emacs releases the memory and
+
+00:13:55.020 --> 00:13:55.200
+then OS can rearrange it depending on the
+
+00:13:58.320 --> 00:13:58.820
+implementation of its memory manager.
+
+00:14:01.520 --> 00:14:01.720
+[Speaker 0]: Okay, so the GC just releases it really and
+
+00:14:04.400 --> 00:14:04.900
+not so it could be that a mix is like
+
+00:14:07.420 --> 00:14:07.840
+[Speaker 1]: doing it. You have like memory pages,
+
+00:14:09.560 --> 00:14:09.760
+right? Yeah. And you see,
+
+00:14:12.140 --> 00:14:12.600
+can release a part of this page just like
+
+00:14:14.760 --> 00:14:15.060
+here and there. And depending on the exact
+
+00:14:17.720 --> 00:14:18.220
+situation is your arm at each moment of time,
+
+00:14:20.240 --> 00:14:20.640
+or as may or may not be able to arrange
+
+00:14:25.160 --> 00:14:25.640
+[Speaker 0]: so
+
+00:14:27.620 --> 00:14:27.940
+[Speaker 1]: things. So, how the exact the data you cannot
+
+00:14:30.160 --> 00:14:30.320
+really predict it. It really varies like you
+
+00:14:31.120 --> 00:14:31.480
+use Windows, you use Linux,
+
+00:14:33.240 --> 00:14:33.740
+you use like malloc, something else,
+
+00:14:36.260 --> 00:14:36.600
+but it has nothing to do with Emacs.
+
+00:14:38.040 --> 00:14:38.540
+It's just something you have to deal with.
+
+00:14:41.780 --> 00:14:41.940
+[Speaker 0]: Yeah, but my question was in the way that we
+
+00:14:43.460 --> 00:14:43.860
+are giving the memory back to the operating
+
+00:14:46.020 --> 00:14:46.440
+system, not just holding it as used and then
+
+00:14:49.960 --> 00:14:50.140
+to our own memory, like stuff as Emacs that
+
+00:14:51.680 --> 00:14:52.120
+we do not need to interact with the operating
+
+00:14:56.040 --> 00:14:56.540
+[Speaker 1]: Yeah. Emacs does not really hold anything.
+
+00:14:59.160 --> 00:14:59.580
+[Speaker 0]: system. That was the question.
+
+00:15:01.920 --> 00:15:02.220
+[Speaker 1]: Okay. I was really hoping it does,
+
+00:15:02.760 --> 00:15:03.260
+but yeah, unfortunately,
+
+00:15:05.640 --> 00:15:06.140
+because nothing much can be done on Emacs.
+
+00:15:08.800 --> 00:15:08.940
+[Speaker 0]: Okay. it's not Probably a lot faster if it's
+
+00:15:10.580 --> 00:15:10.800
+just holding it and when it needs more,
+
+00:15:12.380 --> 00:15:12.880
+then just get more from the OS.
+
+00:15:14.220 --> 00:15:14.620
+[Speaker 1]: There are certain caveats,
+
+00:15:16.720 --> 00:15:17.220
+for example, there's something called image
+
+00:15:20.560 --> 00:15:20.740
+cache. And because Emacs stores images in
+
+00:15:23.720 --> 00:15:23.800
+uncompressed format, it can occupy quite a
+
+00:15:25.020 --> 00:15:25.320
+lot of memory. In particular,
+
+00:15:26.520 --> 00:15:27.020
+when you will like view PDFs,
+
+00:15:30.140 --> 00:15:30.640
+like you open 10, like 20 PDFs in 1 session,
+
+00:15:33.460 --> 00:15:33.820
+you may have like some image cache blowing
+
+00:15:36.720 --> 00:15:37.220
+up, But that's not common for people.
+
+00:15:41.420 --> 00:15:41.920
+[Speaker 0]: So, guess we are on our time exactly.
+
+00:15:43.580 --> 00:15:44.080
+So in the next
+
+00:15:46.680 --> 00:15:47.180
+[Speaker 1]: I think I was not exactly accurate.
+
+00:15:49.200 --> 00:15:49.640
+This 1 command, which is,
+
+00:15:53.500 --> 00:15:54.000
+I think, Nemax 30, is called a malloc trim.
+
+00:15:57.520 --> 00:15:58.020
+A max malloc trim. It's interactive.
+
+00:16:04.080 --> 00:16:04.580
+So that can help to release some memory.
+
+00:16:08.200 --> 00:16:08.700
+I think the way it works is like forces OS to
+
+00:16:12.040 --> 00:16:12.540
+make use of the released memory.
+
+00:16:14.960 --> 00:16:15.460
+[Speaker 0]: Okay. That would be like,
+
+00:16:18.420 --> 00:16:18.640
+we are by the way, switch back to the next
+
+00:16:21.420 --> 00:16:21.680
+talk. But
+
+00:16:24.220 --> 00:16:24.400
+[Speaker 1]: so basically what happens here is that OS may
+
+00:16:27.440 --> 00:16:27.720
+not release like, even Emacs says,
+
+00:16:28.740 --> 00:16:29.240
+okay, this memory is free,
+
+00:16:30.060 --> 00:16:30.560
+depending on the implementation,
+
+00:16:32.760 --> 00:16:32.980
+I might think, okay, but I still hold that
+
+00:16:34.860 --> 00:16:35.080
+memory associated with Emacs just in case
+
+00:16:35.800 --> 00:16:36.180
+Emacs needs more memories,
+
+00:16:38.940 --> 00:16:39.180
+and I can immediately put the data there
+
+00:16:41.420 --> 00:16:41.920
+without like more arrangement to allocate
+
+00:16:45.480 --> 00:16:45.980
+more. And this analog stream basically forces
+
+00:16:48.740 --> 00:16:49.240
+the OS to release it, like no matter what.
+
+00:16:52.360 --> 00:16:52.860
+[Speaker 0]: Because most people, when they are using
+
+00:16:54.320 --> 00:16:54.620
+Emacs, I have the feeling they are only using
+
+00:16:56.160 --> 00:16:56.480
+Emacs. So it would be kind of interesting if
+
+00:16:57.880 --> 00:16:58.140
+you just take like, I don't know,
+
+00:17:00.060 --> 00:17:00.560
+2 gigabytes or something of memory and Emacs
+
+00:17:02.900 --> 00:17:03.160
+like does what it wants on that and the OS
+
+00:17:04.079 --> 00:17:04.540
+cannot really take it back.
+
+00:17:05.920 --> 00:17:06.040
+This was my idea when I
+
+00:17:08.000 --> 00:17:08.319
+[Speaker 1]: was So when you see 2 gigabytes in OS,
+
+00:17:10.359 --> 00:17:10.859
+it doesn't mean that OS cannot take it back.
+
+00:17:13.859 --> 00:17:14.359
+It may still like allocate certain portion,
+
+00:17:15.640 --> 00:17:16.140
+even technically free,
+
+00:17:20.940 --> 00:17:21.319
+but just for future. So this is where Malloc
+
+00:17:22.339 --> 00:17:22.579
+Dream works. It's like,
+
+00:17:25.319 --> 00:17:25.540
+it says, yes, OS, I really not going to hold
+
+00:17:26.500 --> 00:17:27.000
+this for this free memory.
+
+00:17:31.700 --> 00:17:31.860
+For sure. If you try this MX Malloc Gene,
+
+00:17:33.960 --> 00:17:34.140
+you will see like a few times to hundreds of
+
+00:17:35.200 --> 00:17:35.700
+megabytes of read immediately.
+
+00:17:38.560 --> 00:17:39.060
+[Speaker 0]: Have a look when I have the time.
+
+00:17:41.480 --> 00:17:41.600
+[Speaker 1]: I
+
+00:17:43.260 --> 00:17:43.680
+[Speaker 0]: guess if nobody has any questions,
+
+00:17:45.660 --> 00:17:46.160
+I guess on the pad, there was Nothing else.
+
+00:17:47.900 --> 00:17:48.340
+I guess we can just close it.
+
+00:17:49.140 --> 00:17:49.600
+Thanks for the discussion.
+
+00:17:50.640 --> 00:17:51.140
+Thanks for answering the questions.
+
+00:17:56.020 --> 00:17:56.520
+[Speaker 1]: Thank you for the great conference.
+
+00:17:59.340 --> 00:17:59.840
+And yeah, for your volunteer work.
+
+00:18:02.230 --> 00:18:02.241
+And yeah, for quietly panicking in the
+
+00:18:02.262 --> 00:18:02.273
+background, right? Yeah,
+
+00:18:02.337 --> 00:18:02.348
+I mean... You have to be quiet,
+
+00:18:02.560 --> 00:18:03.060
+you're panicking in the background.
diff --git a/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt
new file mode 100644
index 00000000..d1e2a5f6
--- /dev/null
+++ b/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt
@@ -0,0 +1,1780 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.639
+Hello everyone, my name is Ihor Radchenko,
+
+00:00:04.640 --> 00:00:07.599
+and you may know me from Org Mailing List.
+
+00:00:07.600 --> 00:00:09.799
+However, today I'm not going to talk about Org Mode.
+
+00:00:09.800 --> 00:00:11.919
+Today I'm going to talk about
+
+00:00:11.920 --> 00:00:14.959
+Emacs performance and how it's affected
+
+00:00:14.960 --> 00:00:19.039
+by its memory management code.
+
+00:00:19.040 --> 00:00:21.639
+First, I will introduce the basic concepts
+
+00:00:21.640 --> 00:00:26.439
+of Emacs memory management and what garbage collection is.
+
+00:00:26.440 --> 00:00:30.559
+Then I will show you user statistics
+
+00:00:30.560 --> 00:00:34.959
+collected from volunteer users over the last half year
+
+00:00:34.960 --> 00:00:39.319
+and I will end with some guidelines
+
+00:00:39.320 --> 00:00:44.719
+on how to tweak Emacs garbage collection customizations
+
+00:00:44.720 --> 00:00:47.479
+to optimize Emacs performance
+
+00:00:47.480 --> 00:00:51.079
+and when it's necessary or not to do.
+
+NOTE About garbage collection in Emacs
+
+00:00:51.080 --> 00:00:54.519
+Let's begin. What is garbage collection?
+
+00:00:54.520 --> 00:00:56.519
+To understand what is garbage collection,
+
+00:00:56.520 --> 00:00:59.039
+we need to realize that anything you do in Emacs
+
+00:00:59.040 --> 00:01:02.119
+is some kind of command. Any command is most likely
+
+00:01:02.120 --> 00:01:05.839
+running some Elisp code. Every time you run Elisp code,
+
+00:01:05.840 --> 00:01:09.239
+you most likely need to locate certain memory in RAM.
+
+00:01:09.240 --> 00:01:12.879
+Some of this memory is retained for a long time
+
+00:01:12.880 --> 00:01:15.559
+and some of this memory is transient.
+
+00:01:15.560 --> 00:01:19.119
+Of course, Emacs has to clear this transient memory
+
+00:01:19.120 --> 00:01:21.439
+from time to time, to not occupy all the possible RAM
+
+00:01:21.440 --> 00:01:21.447
+in the computer. In this small example,
+
+00:01:21.448 --> 00:01:28.639
+we have one global variable
+
+00:01:28.640 --> 00:01:31.279
+that is assigned a value,
+
+00:01:31.280 --> 00:01:33.079
+but when assigning the value,
+
+00:01:33.080 --> 00:01:35.679
+we first allocate a temporary variable
+
+00:01:35.680 --> 00:01:37.119
+and then a temporary list
+
+00:01:37.120 --> 00:01:40.079
+and only retain some part of this list
+
+00:01:40.080 --> 00:01:42.079
+in this global variable.
+
+00:01:42.080 --> 00:01:44.799
+In terms of memory graph
+
+00:01:44.800 --> 00:01:50.359
+we can represent this as two variable slots,
+
+00:01:50.360 --> 00:01:53.159
+one transient, one permanent,
+
+00:01:53.160 --> 00:01:56.199
+and then a list of three cons cells,
+
+00:01:56.200 --> 00:02:01.959
+part of which is retained as a global variable
+
+00:02:01.960 --> 00:02:04.999
+but part of it which is a temporary variable symbol.
+
+00:02:05.000 --> 00:02:07.679
+The first term of the list is not used
+
+00:02:07.680 --> 00:02:09.759
+and it might be cleared at some point.
+
+NOTE Garbage collection in Emacs
+
+00:02:09.760 --> 00:02:12.239
+So that's what Emacs does.
+
+00:02:12.240 --> 00:02:15.919
+Every now and then, Emacs goes through all the memory
+
+00:02:15.920 --> 00:02:19.119
+and identifies which part of the memory are not used
+
+00:02:19.120 --> 00:02:23.759
+and then clear them so that it can free up the RAM.
+
+00:02:23.760 --> 00:02:25.919
+This process is called garbage collection
+
+00:02:25.920 --> 00:02:28.919
+and Emacs uses a very simple and old algorithm
+
+00:02:28.920 --> 00:02:30.559
+which is called Mark & Sweep.
+
+00:02:30.560 --> 00:02:33.759
+So doing this mark and sweep process
+
+00:02:33.760 --> 00:02:34.879
+is basically two stages.
+
+00:02:34.880 --> 00:02:40.039
+First, Emacs scans all the memory that is allocated
+
+00:02:40.040 --> 00:02:42.759
+and then identifies which memory is still in use
+
+00:02:42.760 --> 00:02:45.519
+which is linked to some variables, for example,
+
+00:02:45.520 --> 00:02:47.599
+and which memory is not used anymore
+
+00:02:47.600 --> 00:02:49.559
+even though it was allocated in the past.
+
+00:02:49.560 --> 00:02:52.999
+The second stage [??] whenever a memory is not,
+
+00:02:53.000 --> 00:02:59.319
+that is not allocated. During the process
+
+00:02:59.320 --> 00:03:00.759
+Emacs cannot do anything now.
+
+00:03:00.760 --> 00:03:04.159
+So basically, every time Emacs scans the memory,
+
+00:03:04.160 --> 00:03:07.199
+it freezes up and doesn't respond to anything,
+
+00:03:07.200 --> 00:03:10.959
+and if it takes too much time so that users can notice it,
+
+00:03:10.960 --> 00:03:13.399
+then of course Emacs is not responsive at all,
+
+00:03:13.400 --> 00:03:19.439
+and if this garbage collection is triggered too frequently,
+
+00:03:19.440 --> 00:03:22.399
+then it's not just not responsive every now and then.
+
+00:03:22.400 --> 00:03:24.679
+It's also not responsive all the time,
+
+00:03:24.680 --> 00:03:26.079
+almost all the time,
+
+00:03:26.080 --> 00:03:27.679
+so it cannot even normally type or stuff
+
+00:03:27.680 --> 00:03:32.439
+or do some normal commands.
+
+00:03:32.440 --> 00:03:36.719
+This mark and sweep algorithm is taking longer
+
+00:03:36.720 --> 00:03:40.199
+the more memory Emacs uses. So basically,
+
+00:03:40.200 --> 00:03:44.439
+the more buffers you open, the more packages you load,
+
+00:03:44.440 --> 00:03:48.319
+the more complex commands you run, the more memory is used,
+
+00:03:48.320 --> 00:03:52.279
+and basically, the longer Emacs takes
+
+00:03:52.280 --> 00:03:57.919
+to perform a single garbage collection.
+
+00:03:57.920 --> 00:04:02.279
+Of course, Emacs being Emacs
+
+00:04:02.280 --> 00:04:06.039
+this garbage collection can be tweaked.
+
+00:04:06.040 --> 00:04:08.279
+In particular users can tweak
+
+00:04:08.280 --> 00:04:10.639
+how frequently Emacs does garbage collection
+
+00:04:10.640 --> 00:04:13.879
+using two basic variables: `gc-cons-threshold`
+
+00:04:13.880 --> 00:04:15.519
+and `gc-cons-percentage`.
+
+00:04:15.520 --> 00:04:21.599
+`gc-cons-threshold` is the raw number of kilobytes
+
+00:04:21.600 --> 00:04:22.479
+Emacs needs to allocate
+
+00:04:22.480 --> 00:04:25.959
+before triggering another garbage collection,
+
+00:04:25.960 --> 00:04:27.799
+and the `gc-cons-percentage` is similar,
+
+00:04:27.800 --> 00:04:30.399
+but it's defined in terms of fraction
+
+00:04:30.400 --> 00:04:34.759
+of already-allocated memory.
+
+00:04:34.760 --> 00:04:38.239
+If you follow various Emacs forums,
+
+00:04:38.240 --> 00:04:41.959
+you may be familiar with people complaining about
+
+00:04:41.960 --> 00:04:46.479
+garbage collection. There are many many suggestions
+
+00:04:46.480 --> 00:04:48.039
+about what to do with it.
+
+00:04:48.040 --> 00:04:54.079
+Most frequently, you see `gc-cons-threshold`
+
+00:04:54.080 --> 00:04:56.879
+recommended to be increased,
+
+00:04:56.880 --> 00:05:01.439
+and a number of pre-packaged Emacs distributions
+
+00:05:01.440 --> 00:05:04.319
+like Doom Emacs do increase it.
+
+00:05:04.320 --> 00:05:07.279
+I have seen suggestions which are actually horrible
+
+00:05:07.280 --> 00:05:10.479
+to disable garbage collection temporarily
+
+00:05:10.480 --> 00:05:14.359
+or for a long time.
+
+00:05:14.360 --> 00:05:17.519
+Which is nice... You can see it quite frequently,
+
+00:05:17.520 --> 00:05:19.399
+which indicates there might be some problem.
+
+00:05:19.400 --> 00:05:23.959
+However, every time one user poses about this problem,
+
+00:05:23.960 --> 00:05:26.879
+it's just one data point and it doesn't mean
+
+00:05:26.880 --> 00:05:28.879
+that everyone actually suffers from it.
+
+00:05:28.880 --> 00:05:33.719
+It doesn't mean that everyone should do it.
+
+00:05:33.720 --> 00:05:35.919
+So in order to understand if this garbage collection
+
+00:05:35.920 --> 00:05:39.959
+is really a problem which is a common problem
+
+00:05:39.960 --> 00:05:44.919
+we do need some kind of statistics
+
+00:05:44.920 --> 00:05:46.919
+and only using the actual statistics
+
+00:05:46.920 --> 00:05:52.759
+we can understand if it should be recommended for everyone
+
+00:05:52.760 --> 00:05:54.999
+to tweak the defaults or like whether
+
+00:05:55.000 --> 00:05:57.159
+it should be recommended for certain users
+
+00:05:57.160 --> 00:05:59.479
+or maybe it should be asked Emacs devs
+
+00:05:59.480 --> 00:06:01.559
+to do something about the defaults.
+
+00:06:01.560 --> 00:06:07.959
+And what I did some time ago is exactly this.
+
+00:06:07.960 --> 00:06:09.959
+I tried to collect the user statistics.
+
+00:06:09.960 --> 00:06:14.519
+So I wrote a small package on Elp
+
+00:06:14.520 --> 00:06:18.159
+and some users installed this package
+
+00:06:18.160 --> 00:06:22.119
+and then reported back these statistics
+
+00:06:22.120 --> 00:06:24.279
+of the garbage collection for their particular use.
+
+00:06:24.280 --> 00:06:30.799
+By now we have obtained 129 user submissions
+
+00:06:30.800 --> 00:06:34.039
+with over 1 million GC records in there.
+
+00:06:34.040 --> 00:06:38.119
+So like some of these submissions
+
+00:06:38.120 --> 00:06:43.159
+used default GC settings without any customizations.
+
+00:06:43.160 --> 00:06:46.039
+Some used increased GC cost threshold
+
+00:06:46.040 --> 00:06:47.799
+and GC cost percentage.
+
+00:06:47.800 --> 00:06:53.319
+So using this data we can try to draw
+
+00:06:53.320 --> 00:06:56.879
+some reliable conclusions on what should be done
+
+00:06:56.880 --> 00:06:59.919
+and whether should anything be done about garbage collection
+
+00:06:59.920 --> 00:07:02.639
+on Emacs dev level or at least on user level.
+
+00:07:02.640 --> 00:07:05.639
+Of course we need to keep in mind
+
+00:07:05.640 --> 00:07:07.279
+that there's some kind of bias
+
+00:07:07.280 --> 00:07:08.999
+because it's more likely
+
+00:07:09.000 --> 00:07:11.719
+that users already have problems with GC
+
+00:07:11.720 --> 00:07:13.239
+or they think they have problems with GC
+
+00:07:13.240 --> 00:07:15.919
+will report and submit the data.
+
+00:07:15.920 --> 00:07:19.999
+But anyway having s statistics is much more useful
+
+00:07:20.000 --> 00:07:22.079
+than just having anecdotal evidences
+
+00:07:22.080 --> 00:07:25.519
+from one or other reddit posts.
+
+00:07:25.520 --> 00:07:28.759
+And just one thing I will do
+
+00:07:28.760 --> 00:07:30.879
+during the rest of my presentation
+
+00:07:30.880 --> 00:07:32.839
+is that for all the statistics
+
+00:07:32.840 --> 00:07:35.679
+I will normalize user data
+
+00:07:35.680 --> 00:07:37.879
+so that every user contributes equally.
+
+00:07:37.880 --> 00:07:40.279
+For example if one user submits like
+
+00:07:40.280 --> 00:07:43.119
+100 hours Emacs uptime statistics
+
+00:07:43.120 --> 00:07:46.279
+and other users submit one hour Emacs uptime
+
+00:07:46.280 --> 00:07:52.879
+then I will anyway make it so that they contribute equally.
+
+00:07:52.880 --> 00:07:56.359
+Let's start from one of the most obvious things
+
+00:07:56.360 --> 00:07:57.679
+we can look into is
+
+00:07:57.680 --> 00:08:00.599
+which is the time it takes for garbage collection
+
+00:08:00.600 --> 00:08:05.879
+to single garbage collection process.
+
+00:08:05.880 --> 00:08:11.839
+Here you see frequency distribution of GC duration
+
+00:08:11.840 --> 00:08:14.999
+for all the 129 users we got
+
+00:08:15.000 --> 00:08:22.279
+and you can see that most of the garbage collections
+
+00:08:22.280 --> 00:08:26.999
+are done quite quickly in less than 0.1 second
+
+00:08:27.000 --> 00:08:32.199
+and less than 0.1 second is usually just not noticeable.
+
+00:08:32.200 --> 00:08:34.519
+So even though there is garbage collection
+
+00:08:34.520 --> 00:08:39.639
+it will not interrupt the work in Emacs.
+
+00:08:39.640 --> 00:08:43.279
+However there is a fraction of users
+
+00:08:43.280 --> 00:08:45.279
+who experience garbage collection
+
+00:08:45.280 --> 00:08:48.399
+it takes like 0.2, 0.3 or even half a second
+
+00:08:48.400 --> 00:08:50.399
+which will be quite noticeable.
+
+00:08:50.400 --> 00:08:55.279
+For the purposes of this study
+
+00:08:55.280 --> 00:08:59.399
+I will consider that anything that is less than 0.1 second
+
+00:08:59.400 --> 00:09:02.639
+which is insignificant so like you will not notice it
+
+00:09:02.640 --> 00:09:04.159
+and it's like obviously
+
+00:09:04.160 --> 00:09:07.479
+all the Emacs usage will be just normal.
+
+00:09:07.480 --> 00:09:11.639
+But if it's more than 0.1 or 0.2 seconds
+
+00:09:11.640 --> 00:09:13.799
+then it will be very noticeable
+
+00:09:13.800 --> 00:09:16.079
+and you will see that Emacs hang for a little while
+
+00:09:16.080 --> 00:09:21.319
+or not so little while. In terms of numbers
+
+00:09:21.320 --> 00:09:26.239
+it's better to plot the statistics not as a distribution
+
+00:09:26.240 --> 00:09:28.199
+but as a cumulative distribution.
+
+00:09:28.200 --> 00:09:31.559
+So like at every point of this graph
+
+00:09:31.560 --> 00:09:37.159
+you'll see like for example here 0.4 seconds
+
+00:09:37.160 --> 00:09:42.279
+you have this percent of like almost 90% of users
+
+00:09:42.280 --> 00:09:49.279
+have no more than 0.4 gc duration.
+
+00:09:49.280 --> 00:09:53.239
+So like we can look here if we take one
+
+00:09:53.240 --> 00:09:56.879
+gc critical gc duration which is 0.1 second
+
+00:09:56.880 --> 00:10:00.279
+0.1 second and look at how many users have
+
+00:10:00.280 --> 00:10:02.439
+it so we have 56% which is like
+
+00:10:02.440 --> 00:10:09.439
+44% users have less than 0.1 second gc duration
+
+00:10:09.440 --> 00:10:12.839
+and the rest 56% have more than 0.1 second.
+
+00:10:12.840 --> 00:10:16.279
+So you can see like more than half of users
+
+00:10:16.280 --> 00:10:20.559
+actually have noticeable gc delay
+
+00:10:20.560 --> 00:10:22.999
+so the Emacs freezes for some noticeable time
+
+00:10:23.000 --> 00:10:27.479
+and a quarter of users actually have very noticeable
+
+00:10:27.480 --> 00:10:31.799
+so like Emacs freezes such that you see an actual delay
+
+00:10:31.800 --> 00:10:36.879
+that Emacs actually has
+
+00:10:36.880 --> 00:10:44.079
+which is quite significant and important point.
+
+00:10:44.080 --> 00:10:47.719
+But apart from the duration of each individual gc
+
+00:10:47.720 --> 00:10:49.839
+it is important to see how frequent it is
+
+00:10:49.840 --> 00:10:52.879
+because even if you do notice a delay
+
+00:10:52.880 --> 00:10:54.959
+even a few seconds delay
+
+00:10:54.960 --> 00:10:56.999
+it doesn't matter if it happens once
+
+00:10:57.000 --> 00:10:59.199
+during the whole Emacs session.
+
+00:10:59.200 --> 00:11:05.039
+So if you look into frequency distribution again here
+
+00:11:05.040 --> 00:11:13.639
+I plot time between subsequent garbage collections
+
+00:11:13.640 --> 00:11:17.959
+versus how frequent it is and we have very clear trend
+
+00:11:17.960 --> 00:11:21.799
+that most of the garbage collections are quite frequent
+
+00:11:21.800 --> 00:11:25.159
+like we talk about every few seconds a few tens of seconds.
+
+00:11:25.160 --> 00:11:30.039
+There's a few outliers which are at very round numbers
+
+00:11:30.040 --> 00:11:35.839
+like 60 seconds, 120 seconds, 300 seconds.
+
+00:11:35.840 --> 00:11:37.879
+These are usually timers so like
+
+00:11:37.880 --> 00:11:40.319
+you have something running on timer
+
+00:11:40.320 --> 00:11:43.599
+and then it is complex command
+
+00:11:43.600 --> 00:11:45.079
+and it triggers garbage collection
+
+00:11:45.080 --> 00:11:48.079
+but it's not the majority.
+
+00:11:48.080 --> 00:11:51.279
+Again to run the numbers
+
+00:11:51.280 --> 00:11:53.679
+it's better to look into cumulative distribution
+
+00:11:53.680 --> 00:11:56.039
+and see that 50% of garbage collections
+
+00:11:56.040 --> 00:11:58.279
+are basically less than 10 seconds apart.
+
+00:11:58.280 --> 00:12:02.359
+And we can combine it with previous data
+
+00:12:02.360 --> 00:12:07.479
+and we look into whatever garbage collection
+
+00:12:07.480 --> 00:12:09.959
+takes less than 10 seconds from each other
+
+00:12:09.960 --> 00:12:13.119
+and also takes more than say 0.1 seconds.
+
+00:12:13.120 --> 00:12:15.319
+So and then we see that
+
+00:12:15.320 --> 00:12:17.639
+one quarter of all garbage collections
+
+00:12:17.640 --> 00:12:21.039
+are just noticeable and also frequent
+
+00:12:21.040 --> 00:12:23.679
+and 9% are not like
+
+00:12:23.680 --> 00:12:27.199
+more than 0.2% very noticeable and also frequent.
+
+00:12:27.200 --> 00:12:30.079
+So basically it constitutes Emacs freezing.
+
+00:12:30.080 --> 00:12:33.559
+So 9% of all the garbage collection Emacs freezing.
+
+00:12:33.560 --> 00:12:37.319
+Of course if you remember there is a bias
+
+00:12:37.320 --> 00:12:40.519
+but 9% is quite significant number.
+
+00:12:40.520 --> 00:12:44.319
+So garbage collection can really slow down things
+
+00:12:44.320 --> 00:12:48.239
+not for everyone but for significant fraction of users.
+
+00:12:48.240 --> 00:12:52.159
+Another thing I'd like to look into
+
+00:12:52.160 --> 00:12:55.399
+is what I call agglomerated GCs.
+
+00:12:55.400 --> 00:12:57.959
+What I mean by agglomerated is
+
+00:12:57.960 --> 00:13:00.359
+when you have one garbage collection
+
+00:13:00.360 --> 00:13:02.999
+and then another garbage immediately after it.
+
+00:13:03.000 --> 00:13:05.559
+So in terms of numbers I took
+
+00:13:05.560 --> 00:13:08.719
+every subsequent garbage collection
+
+00:13:08.720 --> 00:13:10.399
+which is either immediately after
+
+00:13:10.400 --> 00:13:13.039
+or no more than one second after each.
+
+00:13:13.040 --> 00:13:16.159
+So from point of view of users is like
+
+00:13:16.160 --> 00:13:19.999
+multiple garbage collection they add up together
+
+00:13:20.000 --> 00:13:22.999
+into one giant garbage collection.
+
+00:13:23.000 --> 00:13:25.839
+And if you look into numbers
+
+00:13:25.840 --> 00:13:29.559
+of how many agglomerated garbage collections there are
+
+00:13:29.560 --> 00:13:32.119
+you can see even numbers over 100.
+
+00:13:32.120 --> 00:13:35.479
+So 100 garbage collection going one after another.
+
+00:13:35.480 --> 00:13:39.159
+Even if you think about each garbage collection
+
+00:13:39.160 --> 00:13:42.719
+taking 0.1 second we look into 100 of them
+
+00:13:42.720 --> 00:13:44.639
+it's total 10 seconds.
+
+00:13:44.640 --> 00:13:46.839
+It's like Emacs hanging forever
+
+00:13:46.840 --> 00:13:53.519
+or like a significant number is also 10.
+
+00:13:53.520 --> 00:13:55.999
+So again this would be very annoying to meet such thing.
+
+00:13:56.000 --> 00:13:57.879
+How frequently does it happen?
+
+00:13:57.880 --> 00:14:00.279
+Again we can plot cumulative distribution
+
+00:14:00.280 --> 00:14:03.879
+and we see that 20 percent like 19 percent
+
+00:14:03.880 --> 00:14:07.199
+of all the garbage collection are at least two together
+
+00:14:07.200 --> 00:14:13.679
+and 8 percent like more than 10. So like you think about oh
+
+00:14:13.680 --> 00:14:15.639
+each garbage collection is not taking much time
+
+00:14:15.640 --> 00:14:24.479
+but when you have 10 of them yeah that becomes a problem.
+
+00:14:24.480 --> 00:14:29.919
+Another thing is to answer a question
+
+00:14:29.920 --> 00:14:32.959
+that some people complain about is that
+
+00:14:32.960 --> 00:14:35.799
+longer you use Emacs the slower Emacs become.
+
+00:14:35.800 --> 00:14:43.039
+Of course it may be caused by garbage collection
+
+00:14:43.040 --> 00:14:48.519
+and I wanted to look into how garbage collection time
+
+00:14:48.520 --> 00:14:49.679
+and other statistics,
+
+00:14:49.680 --> 00:14:53.199
+other parameters are evolving over time.
+
+00:14:53.200 --> 00:14:58.559
+And what I can see here is a cumulative distribution
+
+00:14:58.560 --> 00:15:03.719
+of GC duration for like first 10 minutes of Emacs uptime
+
+00:15:03.720 --> 00:15:06.479
+first 100 minutes first 1000 minutes.
+
+00:15:06.480 --> 00:15:10.199
+And if you look closer then you see
+
+00:15:10.200 --> 00:15:14.519
+that each individual garbage collection on average
+
+00:15:14.520 --> 00:15:18.959
+takes longer as you use Emacs longer.
+
+00:15:18.960 --> 00:15:24.039
+However this longer is not much it's like maybe 10 percent
+
+00:15:24.040 --> 00:15:29.479
+like basically garbage collection gets like
+
+00:15:29.480 --> 00:15:34.719
+slow Emacs down more as you use Emacs more but not much.
+
+00:15:34.720 --> 00:15:38.359
+So basically if you do you see Emacs
+
+00:15:38.360 --> 00:15:40.639
+being slower and slower over time
+
+00:15:40.640 --> 00:15:43.159
+it's probably not really garbage collection
+
+00:15:43.160 --> 00:15:45.839
+because it doesn't change too much.
+
+00:15:45.840 --> 00:15:48.119
+And if you look into time
+
+00:15:48.120 --> 00:15:50.839
+between individual garbage collections
+
+00:15:50.840 --> 00:15:53.719
+and you see that the time actually increases
+
+00:15:53.720 --> 00:15:56.719
+as you use Emacs longer which makes sense
+
+00:15:56.720 --> 00:15:58.839
+because initially like first few minutes
+
+00:15:58.840 --> 00:16:01.479
+you have all kind of packages loading
+
+00:16:01.480 --> 00:16:04.239
+like all the port loading and then later
+
+00:16:04.240 --> 00:16:07.239
+everything is loaded and things become more stable.
+
+00:16:07.240 --> 00:16:12.879
+So the conclusion on this part is that
+
+00:16:12.880 --> 00:16:16.399
+if Emacs becomes slower in a long session
+
+00:16:16.400 --> 00:16:18.479
+it's probably not caused by garbage collection.
+
+00:16:18.480 --> 00:16:23.679
+And one word of warning of course is that
+
+00:16:23.680 --> 00:16:27.919
+it's all nice and all when I present the statistics
+
+00:16:27.920 --> 00:16:29.279
+but it's only an average
+
+00:16:29.280 --> 00:16:34.079
+and if you are an actual user like here is one example
+
+00:16:34.080 --> 00:16:37.159
+which shows a total garbage collection time
+
+00:16:37.160 --> 00:16:40.119
+like accumulated together over Emacs uptime
+
+00:16:40.120 --> 00:16:43.199
+and you see different lines
+
+00:16:43.200 --> 00:16:45.559
+which correspond to different sessions of one user
+
+00:16:45.560 --> 00:16:48.679
+and you see they are wildly different
+
+00:16:48.680 --> 00:16:51.439
+like one time there is almost no garbage collection
+
+00:16:51.440 --> 00:16:54.679
+another time you see garbage collection
+
+00:16:54.680 --> 00:16:56.999
+because probably Emacs is used more early
+
+00:16:57.000 --> 00:16:59.599
+or like different pattern of usage
+
+00:16:59.600 --> 00:17:03.159
+and even during a single Emacs session
+
+00:17:03.160 --> 00:17:04.599
+you see a different slope
+
+00:17:04.600 --> 00:17:06.439
+of this curve which means that
+
+00:17:06.440 --> 00:17:09.279
+sometimes garbage collection is infrequent
+
+00:17:09.280 --> 00:17:11.479
+and sometimes it's much more frequent
+
+00:17:11.480 --> 00:17:14.479
+so it's probably much more noticeable one time
+
+00:17:14.480 --> 00:17:15.639
+and less noticeable other time.
+
+00:17:15.640 --> 00:17:19.719
+So if you think about these statistics of course
+
+00:17:19.720 --> 00:17:23.359
+they only represent an average usage
+
+00:17:23.360 --> 00:17:26.359
+but sometimes it can get worse sometimes it can get better.
+
+00:17:26.360 --> 00:17:33.759
+The last parameter I'd like to talk about is
+
+00:17:33.760 --> 00:17:35.799
+garbage collection during Emacs init.
+
+00:17:35.800 --> 00:17:40.439
+Basically if you think about what happens during Emacs init
+
+00:17:40.440 --> 00:17:41.919
+like when Emacs just starting up
+
+00:17:41.920 --> 00:17:44.479
+then whatever garbage collection
+
+00:17:44.480 --> 00:17:46.759
+there it's one or it's several times
+
+00:17:46.760 --> 00:17:51.239
+it all contributes to Emacs taking longer to start.
+
+00:17:51.240 --> 00:17:56.559
+And again we can look into the statistic
+
+00:17:56.560 --> 00:18:01.159
+and see what is the total GC duration after Emacs init
+
+00:18:01.160 --> 00:18:06.159
+and we see that 50% of all the submissions
+
+00:18:06.160 --> 00:18:10.279
+garbage collection adds up more than one second
+
+00:18:10.280 --> 00:18:14.919
+to Emacs init time and for 20% of users
+
+00:18:14.920 --> 00:18:17.079
+it's extra three seconds Emacs start time
+
+00:18:17.080 --> 00:18:18.479
+which is very significant
+
+00:18:18.480 --> 00:18:21.479
+especially for people who are used to Vim
+
+00:18:21.480 --> 00:18:23.919
+which can start in like a fraction of a second
+
+00:18:23.920 --> 00:18:26.239
+and here it just does garbage collection
+
+00:18:26.240 --> 00:18:27.439
+because garbage collection is not
+
+00:18:27.440 --> 00:18:29.239
+everything Emacs does during startup
+
+00:18:29.240 --> 00:18:31.999
+adds up more to the load.
+
+00:18:32.000 --> 00:18:36.119
+Okay that's all nice and all
+
+00:18:36.120 --> 00:18:38.679
+but what can we do about these statistics
+
+00:18:38.680 --> 00:18:40.159
+can we draw any conclusions
+
+00:18:40.160 --> 00:18:43.239
+and the answer is of course
+
+00:18:43.240 --> 00:18:46.079
+like the most important conclusion here is that
+
+00:18:46.080 --> 00:18:49.439
+yes garbage collection can slow down Emacs
+
+00:18:49.440 --> 00:18:52.679
+at least for some people and what to do about it
+
+00:18:52.680 --> 00:18:55.319
+there are two variables which you can tweak
+
+00:18:55.320 --> 00:18:58.719
+it's because gcconce threshold gcconce percentage
+
+00:18:58.720 --> 00:19:03.159
+and having the statistics I can at least look a little bit
+
+00:19:03.160 --> 00:19:08.879
+into what is the effect of increasing these variables
+
+00:19:08.880 --> 00:19:12.439
+like most people just increase gcconce threshold
+
+00:19:12.440 --> 00:19:16.959
+and like all the submissions people did increase
+
+00:19:16.960 --> 00:19:19.919
+and doesn't make much sense to decrease it
+
+00:19:19.920 --> 00:19:21.079
+like to make things worse
+
+00:19:21.080 --> 00:19:27.639
+of course for these statistics
+
+00:19:27.640 --> 00:19:31.559
+the exact values of this increased thresholds
+
+00:19:31.560 --> 00:19:33.839
+are not always the same
+
+00:19:33.840 --> 00:19:36.479
+but at least we can look into some trends
+
+00:19:36.480 --> 00:19:44.759
+so first and obvious thing we can observe
+
+00:19:44.760 --> 00:19:46.759
+is when we compare
+
+00:19:46.760 --> 00:19:50.399
+the standard gc settings standard thresholds
+
+00:19:50.400 --> 00:19:53.999
+and increased thresholds for time between
+
+00:19:54.000 --> 00:19:57.479
+subsequent gcs and as one may expect
+
+00:19:57.480 --> 00:19:59.559
+if you increase the threshold
+
+00:19:59.560 --> 00:20:02.679
+Emacs will do garbage collection less frequently
+
+00:20:02.680 --> 00:20:05.279
+so the spacing between garbage collection increases
+
+00:20:05.280 --> 00:20:07.599
+okay the only thing is that
+
+00:20:07.600 --> 00:20:10.719
+if garbage collection is less frequent
+
+00:20:10.720 --> 00:20:14.079
+then each individual garbage collection becomes longer
+
+00:20:14.080 --> 00:20:18.159
+so if you think about increasing
+
+00:20:18.160 --> 00:20:22.239
+garbage collection thresholds be prepared
+
+00:20:22.240 --> 00:20:26.519
+that in each individual time Emacs freezes will take longer
+
+00:20:26.520 --> 00:20:31.599
+this is one caveat when we talk about
+
+00:20:31.600 --> 00:20:34.079
+this agglomerated gcs which are one after other
+
+00:20:34.080 --> 00:20:36.759
+like if you increase the threshold sufficiently
+
+00:20:36.760 --> 00:20:42.319
+then whatever happened that garbage collections
+
+00:20:42.320 --> 00:20:44.399
+were like done one after other
+
+00:20:44.400 --> 00:20:47.599
+we can now make it so that they are actually separated
+
+00:20:47.600 --> 00:20:51.559
+so like you don't see one giant freeze caused by
+
+00:20:51.560 --> 00:20:52.919
+like 10 gcs in a row
+
+00:20:52.920 --> 00:20:55.759
+instead you can make it so that they are separated
+
+00:20:55.760 --> 00:20:59.079
+and in statistics it's very clear
+
+00:20:59.080 --> 00:21:02.959
+that the number of agglomerated garbage collections
+
+00:21:02.960 --> 00:21:06.919
+decreases dramatically when you increase the thresholds
+
+00:21:06.920 --> 00:21:11.759
+it's particularly evident when we look into startup time
+
+00:21:11.760 --> 00:21:17.279
+if you look at gc duration during Emacs startup
+
+00:21:17.280 --> 00:21:19.159
+and if we look into what happens
+
+00:21:19.160 --> 00:21:20.879
+when you increase the thresholds
+
+00:21:20.880 --> 00:21:23.799
+it's very clear that Emacs startup become faster
+
+00:21:23.800 --> 00:21:26.279
+when you increase gc thresholds
+
+00:21:26.280 --> 00:21:33.359
+so that's all for actual user statistics
+
+00:21:33.360 --> 00:21:35.439
+and now let's try to run into
+
+00:21:35.440 --> 00:21:38.079
+some like actual recommendations
+
+00:21:38.080 --> 00:21:42.639
+on what numbers to set and before we start
+
+00:21:42.640 --> 00:21:44.399
+let me explain a little bit about
+
+00:21:44.400 --> 00:21:46.479
+the difference between these two variables
+
+00:21:46.480 --> 00:21:48.879
+which is gc constant threshold and gc constant percentage
+
+00:21:48.880 --> 00:21:52.359
+so if you think about Emacs memory
+
+00:21:52.360 --> 00:21:55.239
+like there's a certain memory allocated by Emacs
+
+00:21:55.240 --> 00:21:58.479
+and then as you run commands and turn using Emacs
+
+00:21:58.480 --> 00:22:00.079
+there is more memory allocated
+
+00:22:00.080 --> 00:22:04.639
+and Emacs decides when to do garbage collection
+
+00:22:04.640 --> 00:22:06.079
+according these two variables
+
+00:22:06.080 --> 00:22:08.759
+and actually what it does it chooses the larger one
+
+00:22:08.760 --> 00:22:12.119
+so say you have you are late in Emacs session
+
+00:22:12.120 --> 00:22:14.039
+you have a lot of Emacs memory allocated
+
+00:22:14.040 --> 00:22:17.119
+then you have gc constant percentage
+
+00:22:17.120 --> 00:22:19.919
+which is percent of the already allocated memory
+
+00:22:19.920 --> 00:22:25.119
+and that percent is probably going to be the largest
+
+00:22:25.120 --> 00:22:28.319
+because you have more memory
+
+00:22:28.320 --> 00:22:32.559
+and memory means that percent of it is larger
+
+00:22:32.560 --> 00:22:36.359
+so like you have a larger number cost
+
+00:22:36.360 --> 00:22:37.719
+by gc constant percentage
+
+00:22:37.720 --> 00:22:43.079
+so in this scenario when Emacs session is already running
+
+00:22:43.080 --> 00:22:45.319
+for a long time and there is a lot of memory allocated
+
+00:22:45.320 --> 00:22:50.119
+you have gc constant percentage
+
+00:22:50.120 --> 00:22:52.279
+controlling the garbage collection
+
+00:22:52.280 --> 00:22:54.999
+while early in Emacs there is not much memory placed
+
+00:22:55.000 --> 00:22:58.719
+Emacs just starting up then gc constant threshold
+
+00:22:58.720 --> 00:23:01.639
+is controlling how frequently garbage collection happens
+
+00:23:01.640 --> 00:23:04.799
+because smaller allocated memory
+
+00:23:04.800 --> 00:23:06.839
+means its percentage will be a small number
+
+00:23:06.840 --> 00:23:12.319
+so in terms of default values at least
+
+00:23:12.320 --> 00:23:14.239
+gc constant threshold is 800 kilobytes
+
+00:23:14.240 --> 00:23:18.799
+and gc constant percentage is 10
+
+00:23:18.800 --> 00:23:24.159
+so gc constant percentage becomes larger than that threshold
+
+00:23:24.160 --> 00:23:28.919
+when you have more than eight megabytes of allocated memory
+
+00:23:28.920 --> 00:23:31.039
+by Emacs which is quite early
+
+00:23:31.040 --> 00:23:34.279
+and it will probably hold just during the startup
+
+00:23:34.280 --> 00:23:36.799
+and once you start using your maximum
+
+00:23:36.800 --> 00:23:38.919
+and once you load all the histories
+
+00:23:38.920 --> 00:23:42.039
+all the kinds of buffers it's probably going to take
+
+00:23:42.040 --> 00:23:43.959
+more than much more than eight megabytes
+
+00:23:43.960 --> 00:23:50.639
+so now we understand this
+
+00:23:50.640 --> 00:23:53.279
+we can draw certain recommendations
+
+00:23:53.280 --> 00:23:57.279
+about tweaking the gc thresholds
+
+00:23:57.280 --> 00:24:01.159
+so first of all I need to emphasize
+
+00:24:01.160 --> 00:24:03.639
+that any time you increase gc threshold
+
+00:24:03.640 --> 00:24:07.199
+an individual garbage collection time increases
+
+00:24:07.200 --> 00:24:08.759
+so it's not free at all
+
+00:24:08.760 --> 00:24:10.999
+if you don't have problems with garbage collection
+
+00:24:11.000 --> 00:24:13.519
+which is half of the users don't have much problem
+
+00:24:13.520 --> 00:24:15.079
+you don't need to tweak anything
+
+00:24:15.080 --> 00:24:19.359
+only when gc is frequent and slow
+
+00:24:19.360 --> 00:24:23.399
+when Emacs is really really present frequently
+
+00:24:23.400 --> 00:24:27.119
+you may consider increasing gc thresholds only
+
+00:24:27.120 --> 00:24:31.479
+and in particular I recommend
+
+00:24:31.480 --> 00:24:33.279
+increasing gc constant percentage
+
+00:24:33.280 --> 00:24:36.359
+because that's what mostly controls gc
+
+00:24:36.360 --> 00:24:40.079
+when Emacs is running for long session
+
+00:24:40.080 --> 00:24:43.039
+and the numbers are probably like
+
+00:24:43.040 --> 00:24:46.519
+yeah we can estimate the effect of these numbers
+
+00:24:46.520 --> 00:24:49.679
+like for example if you have a default value of 0.1 percent
+
+00:24:49.680 --> 00:24:52.759
+for gc constant percentage 0.1 which is 10 percent
+
+00:24:52.760 --> 00:24:55.039
+and then increase it twice
+
+00:24:55.040 --> 00:24:58.639
+obviously you get twice less frequent gcs
+
+00:24:58.640 --> 00:25:02.559
+but it will come at the cost of extra 10 percent gc time
+
+00:25:02.560 --> 00:25:05.839
+and if you increase 10 times you can think about
+
+00:25:05.840 --> 00:25:08.719
+10 less 10 x less frequent gcs
+
+00:25:08.720 --> 00:25:12.199
+but almost twice longer individual garbage collection time
+
+00:25:12.200 --> 00:25:16.919
+so probably you want to set the number closer to 0.1
+
+00:25:16.920 --> 00:25:23.399
+another part of the users may actually
+
+00:25:23.400 --> 00:25:28.359
+try to optimize Emacs startup time
+
+00:25:28.360 --> 00:25:30.759
+which is quite frequent problem
+
+00:25:30.760 --> 00:25:34.919
+in this case it's probably better to increase gc constant
+
+00:25:34.920 --> 00:25:38.199
+but not too much so like
+
+00:25:38.200 --> 00:25:40.239
+first of all it makes sense to check
+
+00:25:40.240 --> 00:25:43.319
+whether garbage collection is a problem at all
+
+00:25:43.320 --> 00:25:45.999
+during startup and there are two variables
+
+00:25:46.000 --> 00:25:50.199
+which can show what is happening this garbage collection
+
+00:25:50.200 --> 00:25:53.719
+so gc done is a variable that shows
+
+00:25:53.720 --> 00:25:55.039
+how many garbage collection
+
+00:25:55.040 --> 00:26:00.159
+like what is the number of garbage collections triggered
+
+00:26:00.160 --> 00:26:02.599
+like when you check the value
+
+00:26:02.600 --> 00:26:04.039
+or right after you start Emacs
+
+00:26:04.040 --> 00:26:04.799
+you will see that
+
+00:26:04.800 --> 00:26:08.519
+number and gc elapsed variable
+
+00:26:08.520 --> 00:26:11.599
+which gives you a number of seconds
+
+00:26:11.600 --> 00:26:14.959
+which Emacs spent in doing garbage collection
+
+00:26:14.960 --> 00:26:16.879
+so this is probably the most important variable
+
+00:26:16.880 --> 00:26:20.719
+and if you see it's large then you may consider tweaking it
+
+00:26:20.720 --> 00:26:26.799
+for the Emacs startup we can estimate some bounds
+
+00:26:26.800 --> 00:26:30.039
+because in the statistics I never saw anything
+
+00:26:30.040 --> 00:26:32.439
+that is more than 10 seconds extra
+
+00:26:32.440 --> 00:26:34.439
+which even 10 seconds is probably like
+
+00:26:34.440 --> 00:26:39.119
+a really really hard upper bound so
+
+00:26:39.120 --> 00:26:44.479
+or say if you want to decrease the gc contribution
+
+00:26:44.480 --> 00:26:47.479
+like order of magnitude or like two orders of magnitudes
+
+00:26:47.480 --> 00:26:50.879
+let's say like as a really hard top estimate
+
+00:26:50.880 --> 00:26:55.079
+then it corresponds to 80 megabytes gc constant
+
+00:26:55.080 --> 00:26:58.959
+and probably much less so like
+
+00:26:58.960 --> 00:27:00.679
+there's no point setting it
+
+00:27:00.680 --> 00:27:04.159
+to a few hundred megabytes of course
+
+00:27:04.160 --> 00:27:08.439
+there's one caveat which is important to keep in
+
+00:27:08.440 --> 00:27:14.039
+mind though that increasing the gc thresholds
+
+00:27:14.040 --> 00:27:16.399
+is not just increasing individual gc time
+
+00:27:16.400 --> 00:27:20.399
+there's also an actual real impact on the RAM usage
+
+00:27:20.400 --> 00:27:23.839
+so like if you increase gc threshold
+
+00:27:23.840 --> 00:27:26.879
+it increases the RAM usage of Emacs
+
+00:27:26.880 --> 00:27:29.639
+and you shouldn't think that like okay
+
+00:27:29.640 --> 00:27:33.159
+I increased the threshold by like 100 megabytes
+
+00:27:33.160 --> 00:27:37.119
+then 100 megabytes extra RAM usage doesn't matter
+
+00:27:37.120 --> 00:27:38.679
+it's not 100 megabytes
+
+00:27:38.680 --> 00:27:42.319
+because less frequent garbage collection means
+
+00:27:42.320 --> 00:27:45.639
+it will lead to memory fragmentation
+
+00:27:45.640 --> 00:27:50.439
+so in practice if you increase the thresholds
+
+00:27:50.440 --> 00:27:52.799
+to tens or hundreds of megabytes
+
+00:27:52.800 --> 00:27:55.919
+we are talking about gigabytes extra RAM usage
+
+00:27:55.920 --> 00:27:59.719
+for me personally when I tried to play with gc thresholds
+
+00:27:59.720 --> 00:28:02.879
+I have seen Emacs taking two gigabytes like
+
+00:28:02.880 --> 00:28:05.519
+compared to several times less
+
+00:28:05.520 --> 00:28:09.039
+when with default settings so it's not free at all
+
+00:28:09.040 --> 00:28:13.639
+and only like either when you have a lot of free RAM
+
+00:28:13.640 --> 00:28:16.839
+and you don't care or when your Emacs is really slow
+
+00:28:16.840 --> 00:28:19.559
+then you may need to consider this
+
+00:28:19.560 --> 00:28:23.239
+tweaking these defaults so again don't tweak defaults
+
+00:28:23.240 --> 00:28:24.239
+if you don't really have a problem
+
+00:28:24.240 --> 00:28:29.839
+and of course this RAM problem is a big big deal
+
+00:28:29.840 --> 00:28:35.679
+for Emacs devs because from from the point of single user
+
+00:28:35.680 --> 00:28:38.839
+you have like normal laptop most likely like normal PC
+
+00:28:38.840 --> 00:28:42.079
+with a lot of RAM you don't care about these things too much
+
+00:28:42.080 --> 00:28:48.999
+but Emacs in general can run on like all kinds of machines
+
+00:28:49.000 --> 00:28:51.679
+including low-end machines with very limited RAM
+
+00:28:51.680 --> 00:28:55.359
+and anytime Emacs developers consider increasing
+
+00:28:55.360 --> 00:28:57.959
+the defaults for garbage collection
+
+00:28:57.960 --> 00:29:01.479
+it's like they always have to consider
+
+00:29:01.480 --> 00:29:02.959
+if you increase them too much
+
+00:29:02.960 --> 00:29:07.919
+then Emacs may just stop running on certain platforms
+
+00:29:07.920 --> 00:29:14.439
+so that's a very big consideration in terms
+
+00:29:14.440 --> 00:29:16.639
+of the global defaults for everyone
+
+00:29:16.640 --> 00:29:22.199
+although I have to I would say that it might be related
+
+00:29:22.200 --> 00:29:24.479
+to the safe to increase GCCons threshold
+
+00:29:24.480 --> 00:29:27.919
+because it mostly affects startup and during startup
+
+00:29:27.920 --> 00:29:31.279
+it's probably not the peak usage of Emacs
+
+00:29:31.280 --> 00:29:35.599
+and like as Emacs runs for longer
+
+00:29:35.600 --> 00:29:38.199
+it's probably where most of RAM will be used later
+
+00:29:38.200 --> 00:29:44.399
+on the other hand GCCons percentage is much more debating
+
+00:29:44.400 --> 00:29:46.159
+because it has pros and cons
+
+00:29:46.160 --> 00:29:47.719
+it will increase the RAM usage
+
+00:29:47.720 --> 00:29:50.999
+it will increase the individual GC time so
+
+00:29:51.000 --> 00:29:56.119
+if we consider changing it it's much more tricky
+
+00:29:56.120 --> 00:29:59.479
+and we have discussing probably measure the impact on users
+
+00:29:59.480 --> 00:30:05.799
+and a final note on or from the point of view
+
+00:30:05.800 --> 00:30:07.319
+of Emacs development is
+
+00:30:07.320 --> 00:30:11.039
+that this simple mark-and-sweep algorithm
+
+00:30:11.040 --> 00:30:14.119
+is like a very old and not the state-of-the-art algorithm
+
+00:30:14.120 --> 00:30:17.799
+there are variants of garbage collection
+
+00:30:17.800 --> 00:30:19.479
+that are like totally non-blocking
+
+00:30:19.480 --> 00:30:22.479
+so Emacs just doesn't have to freeze
+
+00:30:22.480 --> 00:30:24.279
+during the garbage collection
+
+00:30:24.280 --> 00:30:26.839
+or there are variants of garbage collection algorithm
+
+00:30:26.840 --> 00:30:30.079
+that do not scan all the memory just fraction of it
+
+00:30:30.080 --> 00:30:33.439
+and scan another fraction less frequently
+
+00:30:33.440 --> 00:30:36.999
+so there are actually ways just to change
+
+00:30:37.000 --> 00:30:39.799
+the garbage collection algorithm to make things much faster
+
+00:30:39.800 --> 00:30:44.199
+of course like just changing the numbers of variables
+
+00:30:44.200 --> 00:30:47.079
+like the numbers of variable values
+
+00:30:47.080 --> 00:30:50.079
+is much more tricky and one has to implement it
+
+00:30:50.080 --> 00:30:52.239
+obviously it would be nice if someone implements it
+
+00:30:52.240 --> 00:30:55.639
+but so far it's not happening so yeah it would be nice
+
+00:30:55.640 --> 00:30:59.359
+but maybe not not so quickly
+
+00:30:59.360 --> 00:31:02.159
+there is more chance to change the defaults here
+
+00:31:02.160 --> 00:31:07.479
+to conclude let me reiterate the most important points
+
+00:31:07.480 --> 00:31:11.919
+so from point of view of users you need to understand that
+
+00:31:11.920 --> 00:31:14.479
+yes garbage collection may be a problem
+
+00:31:14.480 --> 00:31:16.679
+but not for everyone so like
+
+00:31:16.680 --> 00:31:21.079
+you should only think about changing the variables
+
+00:31:21.080 --> 00:31:23.559
+when you really know that garbage collection
+
+00:31:23.560 --> 00:31:27.479
+is the problem for you so if you have slow Emacs startup
+
+00:31:27.480 --> 00:31:30.919
+slow Emacs startup and you know that it's caused by
+
+00:31:30.920 --> 00:31:32.479
+garbage collection like by
+
+00:31:32.480 --> 00:31:35.999
+you can check the GC elapsed variable
+
+00:31:36.000 --> 00:31:39.679
+then you may increase GC count threshold
+
+00:31:39.680 --> 00:31:42.119
+like to few tens of megabytes not more
+
+00:31:42.120 --> 00:31:44.479
+it doesn't make sense to increase it much more
+
+00:31:44.480 --> 00:31:48.239
+and if you really have major problems
+
+00:31:48.240 --> 00:31:49.759
+with Emacs being slaggy
+
+00:31:49.760 --> 00:31:52.519
+then you can increase GC count percentage
+
+00:31:52.520 --> 00:31:55.999
+to like 0.2 0.3 maybe
+
+00:31:56.000 --> 00:31:57.679
+one is probably overkill
+
+00:31:57.680 --> 00:32:02.759
+but do watch your Emacs ROM usage it may be really impacted
+
+00:32:02.760 --> 00:32:09.719
+for Emacs developers I'd like to emphasize
+
+00:32:09.720 --> 00:32:12.439
+that there is a real problem with garbage collection
+
+00:32:12.440 --> 00:32:17.959
+and nine percent of all the garbage collection
+
+00:32:17.960 --> 00:32:22.079
+data points we have correspond
+
+00:32:22.080 --> 00:32:24.959
+to really slow noticeable Emacs precision
+
+00:32:24.960 --> 00:32:28.039
+and really frequent less than 10 seconds
+
+00:32:28.040 --> 00:32:32.319
+I'd say that it's really worth
+
+00:32:32.320 --> 00:32:35.279
+increasing GC count threshold at least during startup
+
+00:32:35.280 --> 00:32:40.159
+because it really impacts the Emacs startup time
+
+00:32:40.160 --> 00:32:41.519
+making Emacs startup much faster
+
+00:32:41.520 --> 00:32:44.799
+ideally we need to reimplement
+
+00:32:44.800 --> 00:32:48.599
+the garbage collection algorithm of course it's not easy
+
+00:32:48.600 --> 00:32:50.159
+but it would be really nice
+
+00:32:50.160 --> 00:32:56.399
+and for GC count percentage defaults it's hard to say
+
+00:32:56.400 --> 00:33:00.759
+we may consider changing it but it's up to discussion
+
+00:33:00.760 --> 00:33:03.119
+and we probably need to be conservative here
+
+00:33:03.120 --> 00:33:06.039
+so we came to the end of my talk
+
+00:33:06.040 --> 00:33:09.319
+and this presentation
+
+00:33:09.320 --> 00:33:11.839
+all the data will be available publicly
+
+00:33:11.840 --> 00:33:17.079
+and you can reproduce all the statistic graphs if you wish
+
+00:33:17.080 --> 00:33:21.920
+and thank you for attention
diff --git a/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt
new file mode 100644
index 00000000..e6ae083a
--- /dev/null
+++ b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt
@@ -0,0 +1,4022 @@
+WEBVTT
+
+
+00:00:01.719 --> 00:00:02.600
+[Speaker 0]: 5 seconds. Oh, actually,
+
+00:00:07.279 --> 00:00:08.320
+[Speaker 1]: Sorry, I keep delaying.
+
+00:00:08.320 --> 00:00:09.559
+I keep forgetting that we have an
+
+00:00:09.559 --> 00:00:11.639
+introduction now. The introduction is flying.
+
+00:00:02.600 --> 00:00:18.883
+[Speaker 0]: a little more. You're going to give a
+
+00:00:22.260 --> 00:00:24.320
+[Speaker 1]: Well, it's about 5 seconds now.
+
+00:00:19.675 --> 00:00:27.560
+[Speaker 0]: 30-second, right? Just say go when you want
+
+00:00:29.060 --> 00:00:31.280
+[Speaker 1]: Sure. You'll hear me anyway.
+
+00:00:27.560 --> 00:00:32.299
+[Speaker 0]: me to go. Okay.
+
+00:00:33.260 --> 00:00:35.220
+[Speaker 1]: All right, I think we are live now.
+
+00:00:35.220 --> 00:00:36.100
+So hi again, everyone.
+
+00:00:36.100 --> 00:00:37.900
+I promised you we would be back in about 30
+
+00:00:37.900 --> 00:00:39.940
+seconds. I lied, it was actually 1 minute,
+
+00:00:40.160 --> 00:00:41.760
+but we are here with Bob.
+
+00:00:41.760 --> 00:00:42.840
+Hi, Bob, how are you doing?
+
+00:00:43.380 --> 00:00:46.940
+[Speaker 0]: Hi, doing great. Glad to
+
+00:00:46.940 --> 00:00:50.600
+[Speaker 1]: be with you. Yeah, glad to be here,
+
+00:00:50.600 --> 00:00:52.580
+and so are we. We're glad to have you again
+
+00:00:52.580 --> 00:00:54.440
+this year. So what we're going to do,
+
+00:00:54.440 --> 00:00:56.140
+we're not going to waste any time right now
+
+00:00:56.140 --> 00:00:57.880
+with chit-chats. What we're going to do,
+
+00:00:57.880 --> 00:00:59.059
+we're going to move straight into your
+
+00:00:59.059 --> 00:01:01.120
+presentation, Bob, so that you have as much
+
+00:01:01.120 --> 00:01:04.239
+time as you can. I'm going to recede into the
+
+00:01:04.239 --> 00:01:07.440
+background. I am going to full screen your
+
+00:01:07.440 --> 00:01:08.979
+presentation on a stream.
+
+00:01:09.860 --> 00:01:11.680
+And Bob, the floor is all yours.
+
+00:01:12.940 --> 00:01:14.720
+[Speaker 0]: Thank you very much, Leo.
+
+00:01:15.040 --> 00:01:18.400
+Glad to be here. I hope everybody has an idea
+
+00:01:18.400 --> 00:01:22.780
+of what Hyperbole is, but it's a broad
+
+00:01:22.900 --> 00:01:25.880
+information management system inside Emacs
+
+00:01:26.400 --> 00:01:28.540
+that works in all major modes.
+
+00:01:28.860 --> 00:01:31.760
+It's a global minor mode that you can turn on
+
+00:01:31.760 --> 00:01:34.760
+and off very rapidly so that you can just get
+
+00:01:34.760 --> 00:01:36.160
+in and out of hyperbole.
+
+00:01:36.760 --> 00:01:40.940
+And it works mostly from a mini buffer menu
+
+00:01:41.400 --> 00:01:44.040
+that if we just hit ctrl H H we see at the
+
+00:01:44.040 --> 00:01:47.420
+bottom of the screen here and as you see in
+
+00:01:47.420 --> 00:01:48.980
+some of this text right here,
+
+00:01:51.040 --> 00:01:55.680
+Dee will show you a demo with all these video
+
+00:01:55.680 --> 00:01:57.680
+links of Hyperbole now.
+
+00:01:57.900 --> 00:02:01.780
+But let's just get into the top 10 reasons to
+
+00:02:01.780 --> 00:02:08.840
+use Hyperbole. Number 10 is a key series
+
+00:02:10.160 --> 00:02:12.600
+curly braces. So you just put curly braces
+
+00:02:12.600 --> 00:02:17.620
+around any set of key sequences that you want
+
+00:02:19.760 --> 00:02:22.440
+and hyperbole magically turns that into what
+
+00:02:22.440 --> 00:02:25.640
+we call an implicit button a hyper button and
+
+00:02:25.640 --> 00:02:28.580
+any kind of text that you have so if we go
+
+00:02:28.580 --> 00:02:35.760
+down here and we just click click here we see
+
+00:02:35.820 --> 00:02:40.220
+it that was a complex button that said let's
+
+00:02:40.400 --> 00:02:43.200
+start a shell, let's set an environment
+
+00:02:43.320 --> 00:02:45.140
+variable as you see the command right up
+
+00:02:45.140 --> 00:02:47.420
+there, and then let's do a grep over the
+
+00:02:47.420 --> 00:02:50.680
+hyperbole code and find all instances of a
+
+00:02:50.680 --> 00:02:55.360
+particular label. So if we hit made a return,
+
+00:02:55.400 --> 00:02:57.260
+that's called the action key.
+
+00:02:57.280 --> 00:02:59.340
+That's what you use throughout hyperbole when
+
+00:02:59.340 --> 00:03:01.900
+you just want to activate any kind of button.
+
+00:03:02.020 --> 00:03:06.380
+So you see it jumped to the grep output and
+
+00:03:06.380 --> 00:03:08.440
+this is in a shell buffer it's not in a
+
+00:03:08.440 --> 00:03:11.180
+compilation buffer so anywhere that you have
+
+00:03:11.180 --> 00:03:13.760
+this sort of thing it's also an implicit
+
+00:03:13.780 --> 00:03:17.040
+button and any sort of grep output or
+
+00:03:17.040 --> 00:03:20.780
+compiler output you can just jump to with the
+
+00:03:22.120 --> 00:03:23.580
+same key, made a return.
+
+00:03:23.960 --> 00:03:29.240
+So that's key series, the first part.
+
+00:03:29.440 --> 00:03:33.880
+And then just to note that you can also just
+
+00:03:33.880 --> 00:03:39.000
+do a, well I'll just do it here and show you
+
+00:03:39.000 --> 00:03:43.380
+that you can do a recursive grep with this
+
+00:03:43.380 --> 00:03:45.840
+hyperbole command, HYPBR grep.
+
+00:03:46.060 --> 00:03:49.000
+And if you're in an Emacs list buffer,
+
+00:03:50.860 --> 00:03:54.740
+it will only grep across the Emacs list.
+
+00:03:54.760 --> 00:03:58.340
+So a very handy way to just go through your
+
+00:03:58.340 --> 00:04:01.040
+code very rapidly and then jump to various
+
+00:04:01.040 --> 00:04:04.280
+points in it. So we have a lot to cover
+
+00:04:04.280 --> 00:04:05.800
+today, so I'm going to go through this
+
+00:04:05.800 --> 00:04:07.560
+rapidly. This isn't a tutorial,
+
+00:04:07.800 --> 00:04:10.340
+it's just to get you interested in some of
+
+00:04:10.340 --> 00:04:13.060
+the features, and then there's a ton of
+
+00:04:13.060 --> 00:04:15.920
+reference material and videos now available
+
+00:04:15.980 --> 00:04:18.860
+for Hyperlink. So let's go to number 9.
+
+00:04:20.019 --> 00:04:22.360
+Path names become implicit buttons.
+
+00:04:22.500 --> 00:04:24.060
+You don't even have to quote them.
+
+00:04:24.060 --> 00:04:26.920
+You can add environment variables or elist
+
+00:04:26.920 --> 00:04:29.200
+variables with the syntax right here.
+
+00:04:29.380 --> 00:04:32.180
+So here we have a shell script that's
+
+00:04:32.180 --> 00:04:33.500
+somewhere on our path.
+
+00:04:33.680 --> 00:04:36.380
+And notice path is an environment variable
+
+00:04:36.380 --> 00:04:39.140
+with many different paths within it,
+
+00:04:39.140 --> 00:04:42.600
+right? But Hyperbole knows that and it
+
+00:04:42.600 --> 00:04:44.980
+searches the path, gets the first match,
+
+00:04:45.600 --> 00:04:48.620
+finds it, and finds the actual shell script.
+
+00:04:48.660 --> 00:04:50.420
+So you can just embed that anywhere.
+
+00:04:50.540 --> 00:04:52.160
+Here we have a list variable,
+
+00:04:52.280 --> 00:04:54.360
+hyperbdur, which is the home directory for
+
+00:04:54.360 --> 00:04:58.120
+hyperbole, and then a markdown file,
+
+00:04:58.320 --> 00:05:01.680
+and a link to a direct section in the file,
+
+00:05:01.780 --> 00:05:05.220
+and the 5 colon 5 means go to line 5 within
+
+00:05:05.220 --> 00:05:07.260
+that section and column 5.
+
+00:05:07.380 --> 00:05:09.400
+So let's just try it. Boom,
+
+00:05:09.420 --> 00:05:11.500
+we're right there, and we're on another link
+
+00:05:11.500 --> 00:05:13.220
+that we could activate as well.
+
+00:05:13.420 --> 00:05:17.960
+So notice the next line is the same link but
+
+00:05:17.960 --> 00:05:20.280
+this is how you normally have to do it in a
+
+00:05:20.280 --> 00:05:23.160
+markdown file. You have to change the section
+
+00:05:23.160 --> 00:05:25.640
+header to have dashes but with hyperbole you
+
+00:05:25.640 --> 00:05:28.120
+don't have to. You can just put it exactly
+
+00:05:28.140 --> 00:05:29.840
+like you see it in your file.
+
+00:05:30.540 --> 00:05:34.660
+Here the pound syntax for sections is really
+
+00:05:34.660 --> 00:05:36.640
+a generic syntax in the hyperbole.
+
+00:05:37.360 --> 00:05:39.840
+And so it works in all different kinds of
+
+00:05:39.840 --> 00:05:41.500
+files, your programming files.
+
+00:05:42.100 --> 00:05:45.240
+Here's a shell script and we said let's just
+
+00:05:45.240 --> 00:05:49.120
+go to the first comment that has alias in it.
+
+00:05:49.120 --> 00:05:51.700
+Notice we didn't have to say the whole line,
+
+00:05:51.700 --> 00:05:53.160
+just the first part of it.
+
+00:05:53.160 --> 00:05:58.140
+And it matched to it. Here we have a link to
+
+00:05:58.140 --> 00:06:01.680
+our hyperbole structured outliner called the
+
+00:06:01.680 --> 00:06:04.660
+K Outliner. And you can see it auto-numbers
+
+00:06:05.080 --> 00:06:08.000
+all these cells. But in addition to just
+
+00:06:08.000 --> 00:06:10.640
+displaying, you can also add a pipe symbol
+
+00:06:10.640 --> 00:06:14.900
+near the end and use this view syntax to clip
+
+00:06:14.900 --> 00:06:17.500
+to 2 lines and show blank lines.
+
+00:06:17.500 --> 00:06:19.920
+So let's see if each node gets clipped to 2
+
+00:06:19.920 --> 00:06:22.680
+lines. So you see they're all just 2 now with
+
+00:06:22.680 --> 00:06:25.280
+the ellipses and then we can expand them.
+
+00:06:25.320 --> 00:06:28.760
+So a lot of power there just with path names.
+
+00:06:29.380 --> 00:06:31.120
+Let's continue to number 8.
+
+00:06:31.120 --> 00:06:32.940
+[Speaker 1]: Can I just interrupt you just a bit?
+
+00:06:33.420 --> 00:06:33.920
+[Speaker 0]: Yes.
+
+00:06:34.740 --> 00:06:37.720
+[Speaker 1]: I think your phone, so we have your phone set
+
+00:06:37.720 --> 00:06:40.460
+up in case your internet misbehaves and we've
+
+00:06:40.640 --> 00:06:42.080
+set this up before we started,
+
+00:06:42.100 --> 00:06:44.380
+but I think the vibration is a little loud
+
+00:06:44.380 --> 00:06:46.160
+whenever it does. Can you maybe move it a
+
+00:06:46.160 --> 00:06:50.380
+little bit? I think so.
+
+00:06:50.380 --> 00:06:51.880
+It will have to vibrate again.
+
+00:06:47.740 --> 00:06:54.220
+[Speaker 0]: Is that okay? No, my phone...
+
+00:06:54.380 --> 00:06:56.880
+Okay. It shouldn't have been vibrating.
+
+00:06:59.480 --> 00:07:01.260
+[Speaker 1]: have been another device,
+
+00:07:01.280 --> 00:07:02.800
+but definitely we had vibration.
+
+00:07:02.800 --> 00:07:04.500
+Anyway, carry on. Sorry for the interruption.
+
+00:06:57.640 --> 00:07:06.920
+[Speaker 0]: It could be me. It might So number 8,
+
+00:07:07.800 --> 00:07:10.520
+special prefixes. There are 3 prefixes you
+
+00:07:10.520 --> 00:07:11.820
+can attach to path names.
+
+00:07:11.820 --> 00:07:13.680
+The first, if you want to load,
+
+00:07:13.820 --> 00:07:16.040
+instead of just finding a file,
+
+00:07:16.620 --> 00:07:19.460
+an ELIST file, you can actually load it.
+
+00:07:19.540 --> 00:07:22.060
+And so I can just hit made a return on this,
+
+00:07:22.200 --> 00:07:24.300
+and you see in the mini buffer,
+
+00:07:25.200 --> 00:07:27.100
+it loaded it as compiled e-list.
+
+00:07:27.240 --> 00:07:29.340
+I could put a .el on here,
+
+00:07:29.500 --> 00:07:33.500
+a .elc, .gz, all of that'll work,
+
+00:07:33.580 --> 00:07:36.420
+and just put a dash in front to load it.
+
+00:07:36.580 --> 00:07:38.720
+If you want to run a shell command,
+
+00:07:38.720 --> 00:07:41.040
+just put an exclamation mark in front of
+
+00:07:41.040 --> 00:07:42.540
+something and again you can have the
+
+00:07:42.540 --> 00:07:44.620
+environment variable. So here we're saying
+
+00:07:44.620 --> 00:07:47.220
+run the program date and you see,
+
+00:07:48.400 --> 00:07:50.040
+let's see, let's do it again.
+
+00:07:50.160 --> 00:07:53.240
+There we go. It ran date and you see the
+
+00:07:53.240 --> 00:07:55.680
+output right there. And what if you want to
+
+00:07:55.680 --> 00:07:58.040
+run a graphical program on your system?
+
+00:07:58.620 --> 00:08:01.760
+Well here, we want to open a PDF file and I'm
+
+00:08:01.760 --> 00:08:05.340
+just using XDG Open on Linux,
+
+00:08:05.660 --> 00:08:09.440
+you could use Open on Mac and you just put an
+
+00:08:09.440 --> 00:08:12.840
+ampersand in front and there's the Hyperbole
+
+00:08:14.120 --> 00:08:15.840
+manual instantly displayed.
+
+00:08:16.120 --> 00:08:18.620
+So lots of power there and all of that
+
+00:08:18.820 --> 00:08:22.360
+actually .pdf's and many other file types are
+
+00:08:22.360 --> 00:08:25.080
+automatically linked to various programs by
+
+00:08:25.080 --> 00:08:27.340
+Hyperbole. So you could just use the path
+
+00:08:27.340 --> 00:08:29.340
+name itself and it would probably behave the
+
+00:08:29.340 --> 00:08:34.440
+same way. Number 7, bookmarks on steroids.
+
+00:08:35.460 --> 00:08:37.419
+So Hyperbole gives you a personal button
+
+00:08:37.419 --> 00:08:40.340
+file, which is on the menu you see here under
+
+00:08:40.400 --> 00:08:42.280
+button files, and then personal.
+
+00:08:43.039 --> 00:08:45.360
+So here we'll just display it.
+
+00:08:45.480 --> 00:08:47.720
+And you can put whatever you want in here,
+
+00:08:47.720 --> 00:08:49.860
+these implicit buttons of any type.
+
+00:08:49.860 --> 00:08:52.660
+You can name them the way here and you can
+
+00:08:52.660 --> 00:08:55.560
+activate either the name with MetaReturn or
+
+00:08:55.560 --> 00:08:56.920
+the button itself. So,
+
+00:08:56.920 --> 00:08:59.400
+of course, if we did MetaReturn here,
+
+00:08:59.860 --> 00:09:03.220
+we'd just display that in a web browser.
+
+00:09:03.940 --> 00:09:05.520
+I'll just do a few of these.
+
+00:09:05.540 --> 00:09:07.200
+So here's a section of line.
+
+00:09:07.200 --> 00:09:08.580
+Let's just jump there.
+
+00:09:09.120 --> 00:09:11.400
+But these can be all sorts of different
+
+00:09:11.400 --> 00:09:13.140
+actions that are going on.
+
+00:09:13.140 --> 00:09:16.040
+And you just, whatever cross references you
+
+00:09:16.040 --> 00:09:17.840
+want, you put in here.
+
+00:09:17.840 --> 00:09:20.400
+And the neat thing is that this then becomes
+
+00:09:20.940 --> 00:09:23.420
+a list of what we call global buttons.
+
+00:09:23.620 --> 00:09:26.540
+So when I go into the menu and I go control
+
+00:09:26.540 --> 00:09:30.640
+HHGA to activate a global button,
+
+00:09:30.720 --> 00:09:33.220
+you can see that all the names from this file
+
+00:09:33.220 --> 00:09:36.100
+appear here. So only the name buttons appear,
+
+00:09:36.160 --> 00:09:40.240
+and I could like go to the hyperbole to-do
+
+00:09:40.240 --> 00:09:42.260
+list and things like that.
+
+00:09:42.500 --> 00:09:45.660
+So very, very quick access to all your
+
+00:09:45.660 --> 00:09:47.440
+information whenever you need it.
+
+00:09:47.440 --> 00:09:49.600
+And that could be an org file as well if you
+
+00:09:49.600 --> 00:09:53.500
+prefer that. So we just took care of that.
+
+00:09:53.540 --> 00:09:57.000
+Number 6, instant test case running and
+
+00:09:57.000 --> 00:09:59.420
+debugging. This is a fairly new feature.
+
+00:10:00.100 --> 00:10:02.240
+What we're seeing here is a pre-release of
+
+00:10:02.240 --> 00:10:04.440
+version 9, which should be out within the
+
+00:10:04.440 --> 00:10:07.560
+next week. But the instructions at the
+
+00:10:07.560 --> 00:10:10.680
+beginning of the presentation tell you how to
+
+00:10:10.680 --> 00:10:13.720
+get the development version of HyperBlade,
+
+00:10:14.040 --> 00:10:15.560
+which is right now 8.01
+
+00:10:15.880 --> 00:10:19.040
+pre, but that's virtually the same as what 9
+
+00:10:19.120 --> 00:10:23.060
+will be. So you can grab that as of today.
+
+00:10:24.140 --> 00:10:27.540
+So let's just jump to a test file.
+
+00:10:27.700 --> 00:10:30.300
+What you see here is called an explicit
+
+00:10:30.360 --> 00:10:33.020
+button. You can actually make buttons where
+
+00:10:33.120 --> 00:10:35.820
+similar to org, where you just see a bit of
+
+00:10:35.820 --> 00:10:38.500
+the button and all of the metadata is hidden.
+
+00:10:39.060 --> 00:10:42.040
+I can say control A J and I see all about
+
+00:10:42.040 --> 00:10:43.940
+that button, exactly what it's going to do
+
+00:10:43.940 --> 00:10:47.200
+before I activate it and even who created it
+
+00:10:47.200 --> 00:10:50.680
+or last modified it. Then just queue out of
+
+00:10:50.680 --> 00:10:52.580
+here and you're back where you were.
+
+00:10:52.700 --> 00:10:56.820
+So now, what this did is link us to an ERT
+
+00:10:56.920 --> 00:10:59.920
+test. If you write tests in Emacs,
+
+00:10:59.920 --> 00:11:02.060
+you probably use ERT tests.
+
+00:11:02.220 --> 00:11:05.220
+So if I hit made a return on here it'll just
+
+00:11:05.220 --> 00:11:08.520
+run the test tell me it passed great okay but
+
+00:11:08.520 --> 00:11:11.760
+maybe I had a problem so let me use control
+
+00:11:11.760 --> 00:11:17.080
+you made a return and that will e-debug the
+
+00:11:17.080 --> 00:11:20.080
+test instantly. So now I'll step through it
+
+00:11:20.080 --> 00:11:22.200
+and it says, well, let's,
+
+00:11:23.000 --> 00:11:25.580
+this single line actually creates that
+
+00:11:25.580 --> 00:11:27.800
+explicit button. You see we have an empty
+
+00:11:27.800 --> 00:11:29.480
+buffer here that we're in.
+
+00:11:29.480 --> 00:11:31.780
+Now I step through that and now there's the
+
+00:11:31.780 --> 00:11:34.160
+explicit button that got put in there.
+
+00:11:34.160 --> 00:11:36.940
+Now the next line I step through it and this
+
+00:11:36.940 --> 00:11:39.160
+is going to check if we have the right action
+
+00:11:39.160 --> 00:11:42.260
+type and it returns true so that's good and
+
+00:11:42.260 --> 00:11:45.220
+now we should be it should be associated with
+
+00:11:45.220 --> 00:11:48.680
+the temp buffer returns true good And that's
+
+00:11:48.680 --> 00:11:51.360
+why what you saw before is this passed.
+
+00:11:51.720 --> 00:11:52.760
+The whole thing passed.
+
+00:11:53.000 --> 00:11:54.740
+So lots of power there.
+
+00:11:55.080 --> 00:11:57.600
+Simple to use. You're just using your made a
+
+00:11:57.600 --> 00:11:59.360
+return and prefix arguments.
+
+00:12:00.040 --> 00:12:03.240
+It's something everybody who develops should
+
+00:12:03.240 --> 00:12:07.640
+have. So number, let's go on.
+
+00:12:07.640 --> 00:12:09.720
+I think we're making pretty good time here,
+
+00:12:09.720 --> 00:12:11.240
+but I turned off my timer.
+
+00:12:13.000 --> 00:12:15.800
+Let's go to number 5. This is a very new
+
+00:12:15.800 --> 00:12:17.660
+feature, which is very cool too.
+
+00:12:17.720 --> 00:12:20.420
+You used to have to use the mouse probably
+
+00:12:20.440 --> 00:12:23.880
+and you could drag across windows to go from
+
+00:12:23.880 --> 00:12:26.820
+a source to a referent buffer and that would
+
+00:12:26.820 --> 00:12:28.340
+create a hyperlink for you.
+
+00:12:28.340 --> 00:12:30.880
+But now we've installed it and made it even
+
+00:12:30.880 --> 00:12:34.140
+easier on, we've installed it on a,
+
+00:12:34.860 --> 00:12:36.540
+on the hyperbole menus.
+
+00:12:37.040 --> 00:12:40.180
+So let's just go back to our presentation
+
+00:12:40.680 --> 00:12:43.660
+here and say we want to link to this line
+
+00:12:43.660 --> 00:12:46.160
+that we're on there. And I'll just create the
+
+00:12:46.160 --> 00:12:48.480
+button in our scratch buffer here so it
+
+00:12:48.480 --> 00:12:50.660
+doesn't really mess anything up.
+
+00:12:50.900 --> 00:12:53.980
+So I just put my point in where I want the
+
+00:12:53.980 --> 00:12:56.920
+button to appear and then I put point where I
+
+00:12:56.920 --> 00:13:00.060
+want it to link to in the other the other
+
+00:13:00.060 --> 00:13:02.800
+buffer and then I just say control HH to get
+
+00:13:02.800 --> 00:13:05.260
+my menu, I for implicit button,
+
+00:13:05.380 --> 00:13:07.940
+and then L for link. Boom,
+
+00:13:07.960 --> 00:13:09.980
+it inserts it, right at point.
+
+00:13:10.680 --> 00:13:12.880
+What did it do? It knew that this was in the
+
+00:13:12.880 --> 00:13:15.080
+hyperbole directory and I have a variable for
+
+00:13:15.080 --> 00:13:17.780
+that, so that if you sent this link to your
+
+00:13:17.780 --> 00:13:19.180
+friend who uses Hyperbole,
+
+00:13:19.440 --> 00:13:21.440
+it would still work right because they have a
+
+00:13:21.440 --> 00:13:22.860
+different hyperbole there.
+
+00:13:23.100 --> 00:13:27.380
+And then I want to go directly to line 116.
+
+00:13:28.360 --> 00:13:30.360
+So boom, it just took me there.
+
+00:13:30.820 --> 00:13:33.900
+So that's it. And Hyperbole is doing all this
+
+00:13:33.900 --> 00:13:36.420
+for you. You just say I want a link to this
+
+00:13:36.420 --> 00:13:38.940
+thing and it figures out what's at point and
+
+00:13:38.940 --> 00:13:42.240
+it determines the right type of implicit link
+
+00:13:42.240 --> 00:13:45.520
+to put there. And that's the whole point is
+
+00:13:45.520 --> 00:13:47.320
+that you're just working like when you're
+
+00:13:47.320 --> 00:13:50.500
+programming or you're writing an article and
+
+00:13:50.500 --> 00:13:53.520
+you just hit made a return or or pull up a
+
+00:13:53.520 --> 00:13:57.180
+menu and hit a key binding and you're off to
+
+00:13:57.180 --> 00:14:02.400
+the races. So that was implicit linking We
+
+00:14:02.400 --> 00:14:05.260
+can also create those explicit link buttons,
+
+00:14:06.200 --> 00:14:07.760
+and as well as the global link,
+
+00:14:07.760 --> 00:14:09.580
+where we would just give it a name,
+
+00:14:09.580 --> 00:14:11.640
+and it would automatically put it in our
+
+00:14:11.640 --> 00:14:14.640
+global button file without us even having
+
+00:14:14.640 --> 00:14:18.380
+that on screen. So lots of power there as
+
+00:14:18.380 --> 00:14:19.660
+well, lots of consistency.
+
+00:14:21.900 --> 00:14:25.040
+Now let's take a look at the K Outliner a
+
+00:14:25.040 --> 00:14:28.040
+little more. I'm just going to show you 1
+
+00:14:28.040 --> 00:14:29.820
+feature actually. I don't have time to show
+
+00:14:29.820 --> 00:14:31.580
+you the K Outliner in detail,
+
+00:14:31.800 --> 00:14:34.220
+but it's a really cool structured outliner
+
+00:14:34.280 --> 00:14:36.400
+that even if you love Org Mode,
+
+00:14:36.580 --> 00:14:39.280
+you should try it. And this is 1 thing that
+
+00:14:39.280 --> 00:14:41.060
+you can't get with Org Mode,
+
+00:14:41.320 --> 00:14:45.100
+is let's say Hyperlink comes with an example
+
+00:14:45.100 --> 00:14:48.580
+file which teaches you about the K Outliner.
+
+00:14:48.960 --> 00:14:50.940
+So we'll just use that right here.
+
+00:14:51.180 --> 00:14:53.040
+And when you're in the K Outliner,
+
+00:14:53.080 --> 00:14:55.820
+you can bring up and go into the K Outliner
+
+00:14:55.900 --> 00:14:57.540
+menu right here at the bottom.
+
+00:14:58.200 --> 00:15:00.360
+And there's a format menu there.
+
+00:15:00.360 --> 00:15:02.600
+You always take the first letter of a menu,
+
+00:15:02.600 --> 00:15:05.100
+the first capital letter of a menu item.
+
+00:15:05.240 --> 00:15:08.720
+So F for format and then D for display in
+
+00:15:08.720 --> 00:15:11.700
+browser. So just let's do it.
+
+00:15:12.740 --> 00:15:17.220
+We have with 1 button or 1 key we've produced
+
+00:15:17.780 --> 00:15:23.660
+the entire outline in a collapsible outline
+
+00:15:23.720 --> 00:15:26.260
+in HTML. So I can go here.
+
+00:15:27.620 --> 00:15:29.240
+I just have to use my mouse.
+
+00:15:29.600 --> 00:15:33.300
+So I can expand and collapse these trees live
+
+00:15:34.220 --> 00:15:39.520
+with very basic coding.
+
+00:15:39.760 --> 00:15:42.680
+We tried to keep this as simple as possible.
+
+00:15:42.880 --> 00:15:45.580
+But you see it maintains the structure of the
+
+00:15:45.580 --> 00:15:47.880
+outline and even tables.
+
+00:15:55.120 --> 00:15:57.620
+So all the formatting is maintained and again
+
+00:15:57.620 --> 00:16:00.100
+it's instant. Or you can just export it to a
+
+00:16:00.100 --> 00:16:01.920
+file without displaying it.
+
+00:16:03.900 --> 00:16:05.880
+Very efficient kinds of operations.
+
+00:16:06.420 --> 00:16:10.960
+So that was number 4. Number 3 is a
+
+00:16:10.960 --> 00:16:13.400
+subsystem, another subsystem in Hyperbole
+
+00:16:13.440 --> 00:16:16.080
+called Hycontrol, which is for window and
+
+00:16:16.080 --> 00:16:18.600
+frame management. And I just wanted to show
+
+00:16:18.600 --> 00:16:20.920
+you 1 thing in there. It's got a lot of
+
+00:16:20.920 --> 00:16:24.400
+capabilities. But I always had the problem
+
+00:16:24.480 --> 00:16:28.340
+that Emacs wouldn't let me scale my fonts,
+
+00:16:28.380 --> 00:16:30.780
+all of my faces at the same time.
+
+00:16:30.840 --> 00:16:33.680
+I wanted to zoom. I didn't want to increase
+
+00:16:33.680 --> 00:16:36.260
+the default font size and all the others stay
+
+00:16:36.260 --> 00:16:40.660
+the same. So let's just display our faces
+
+00:16:41.260 --> 00:16:45.200
+right here and then we have a choice of
+
+00:16:45.200 --> 00:16:47.860
+either controlling frames or windows.
+
+00:16:47.920 --> 00:16:50.240
+So let's start by controlling frames.
+
+00:16:50.460 --> 00:16:52.760
+So you get another submenu when you're in
+
+00:16:52.760 --> 00:16:56.020
+high control to tell you what to do here.
+
+00:16:56.320 --> 00:16:59.480
+And there's just lowercase z and uppercase z.
+
+00:16:59.480 --> 00:17:03.400
+So let's try it. So it's scaling the entire
+
+00:17:03.400 --> 00:17:06.020
+frame. And you can see from the list of faces
+
+00:17:06.260 --> 00:17:08.500
+that they're all scaling at the same time.
+
+00:17:08.599 --> 00:17:10.220
+And I can go back down.
+
+00:17:10.760 --> 00:17:13.619
+Now if I switch to window mode,
+
+00:17:13.619 --> 00:17:16.099
+and there's a special fast way to do that,
+
+00:17:16.099 --> 00:17:18.819
+just hit T to toggle. And if you look at the
+
+00:17:18.819 --> 00:17:21.819
+bottom menu it says frames right now now it
+
+00:17:21.819 --> 00:17:25.599
+says windows when I hit T so now if I do the
+
+00:17:25.599 --> 00:17:30.640
+same Z to increase it's just this window and
+
+00:17:30.640 --> 00:17:36.800
+but it's you know it's the faces in there so
+
+00:17:37.200 --> 00:17:40.680
+a lot of power again but I just haven't found
+
+00:17:40.680 --> 00:17:43.220
+anywhere else that you can get that kind of
+
+00:17:43.220 --> 00:17:45.820
+control over your faces very rapidly.
+
+00:17:45.920 --> 00:17:51.640
+So that's number 3. Now number 2,
+
+00:17:55.360 --> 00:17:56.780
+let's put that in there.
+
+00:17:58.340 --> 00:18:03.320
+So the HiROLO is the final subsystem in
+
+00:18:03.320 --> 00:18:06.240
+Hyperbole and this has gotten much cooler.
+
+00:18:06.500 --> 00:18:08.680
+So it started off as a contact management
+
+00:18:08.680 --> 00:18:11.540
+system, but it's really just a hierarchical
+
+00:18:11.880 --> 00:18:15.060
+record management system that lets you have
+
+00:18:15.060 --> 00:18:18.020
+as many files, directories as you want,
+
+00:18:18.120 --> 00:18:20.280
+and you can search across all of them without
+
+00:18:20.280 --> 00:18:23.240
+any external utilities necessary,
+
+00:18:23.960 --> 00:18:26.240
+just what's built into Emacs and Hyperlink.
+
+00:18:26.760 --> 00:18:29.920
+So as you can see, we've expanded it to
+
+00:18:29.920 --> 00:18:31.820
+handle org files, markdown,
+
+00:18:32.300 --> 00:18:34.620
+K outlines, Emacs outlines.
+
+00:18:34.780 --> 00:18:36.820
+So what I'm going to do is just say,
+
+00:18:36.820 --> 00:18:40.680
+I want to search using my Hyberlo file list.
+
+00:18:40.680 --> 00:18:43.140
+You just set that to what you wanted to
+
+00:18:43.140 --> 00:18:44.820
+search. But now you have all this
+
+00:18:44.820 --> 00:18:46.520
+flexibility. You can use environment
+
+00:18:46.620 --> 00:18:48.840
+variables in it. You can just specify a
+
+00:18:48.840 --> 00:18:51.340
+directory and it will find all those matching
+
+00:18:51.340 --> 00:18:53.540
+files below that directory recursively.
+
+00:18:55.240 --> 00:18:58.460
+You can give it the markdown file here and
+
+00:18:58.460 --> 00:19:01.160
+you can use file wildcards as well.
+
+00:19:01.160 --> 00:19:04.340
+I mean, look at this. It's got a list
+
+00:19:04.340 --> 00:19:06.140
+variable in it and a wildcard,
+
+00:19:06.540 --> 00:19:09.840
+and it's just all I'm gonna do is I change
+
+00:19:09.840 --> 00:19:13.380
+this from a Lisp expression to make it a
+
+00:19:13.380 --> 00:19:15.380
+hyper button. You just change the outer
+
+00:19:15.380 --> 00:19:16.920
+parens to angle brackets,
+
+00:19:17.120 --> 00:19:19.620
+and then it's automatically an implicit
+
+00:19:21.040 --> 00:19:22.840
+button that you can activate with made a
+
+00:19:22.840 --> 00:19:26.340
+return so just ran that and now I've set my
+
+00:19:26.800 --> 00:19:29.440
+file list so now let's do a search it would
+
+00:19:29.440 --> 00:19:34.620
+be ctrl H H roll it X R and then S for search
+
+00:19:34.820 --> 00:19:36.680
+But I'll just do it this way.
+
+00:19:37.200 --> 00:19:40.320
+And boom, it found everything that fast.
+
+00:19:41.060 --> 00:19:42.940
+And I can just get like,
+
+00:19:43.180 --> 00:19:45.520
+show the top items in there.
+
+00:19:45.520 --> 00:19:48.260
+So I kind of have outlining in this buffer.
+
+00:19:48.340 --> 00:19:51.940
+I can just move to each match that I hit.
+
+00:19:51.980 --> 00:19:53.680
+And notice, although everything was
+
+00:19:53.680 --> 00:19:55.580
+collapsed, it's expanding here.
+
+00:19:55.640 --> 00:19:58.540
+When I move in and out of each of the entry
+
+00:19:58.540 --> 00:20:02.380
+matches, it expands or collapses as I move to
+
+00:20:02.380 --> 00:20:06.220
+the next 1. So a lot of power there.
+
+00:20:06.820 --> 00:20:09.120
+What else? So just tabbing through these
+
+00:20:09.120 --> 00:20:11.200
+things. And you notice that it's working
+
+00:20:11.200 --> 00:20:13.300
+across all of these different types,
+
+00:20:13.340 --> 00:20:16.220
+and it's telling you which file everything
+
+00:20:16.360 --> 00:20:17.840
+came from right up here.
+
+00:20:17.840 --> 00:20:19.940
+So I could just made a return here,
+
+00:20:20.220 --> 00:20:23.500
+should work. Yes, revisit the file normally.
+
+00:20:23.800 --> 00:20:25.760
+And it just pulls it right up.
+
+00:20:25.920 --> 00:20:28.400
+So everything is live and hyperbole.
+
+00:20:28.580 --> 00:20:30.120
+You've got hyperlinks everywhere.
+
+00:20:31.300 --> 00:20:33.740
+Let's just get rid of that.
+
+00:20:34.020 --> 00:20:41.600
+Go back to our demo. So if you are fans of
+
+00:20:41.600 --> 00:20:46.560
+Vertico and Consult, you can now use that
+
+00:20:46.560 --> 00:20:49.300
+with the High Rollo. So all you have to do is
+
+00:20:49.300 --> 00:20:51.440
+let's just format our windows,
+
+00:20:51.760 --> 00:20:55.720
+and then I'll say, let's use ConsultGrep over
+
+00:20:55.720 --> 00:20:58.880
+the Rolodex. Now, it found all the matches
+
+00:20:58.940 --> 00:21:02.060
+there, and I can just move live through them
+
+00:21:02.220 --> 00:21:04.640
+in the buffer like you may be used to or I
+
+00:21:04.640 --> 00:21:08.600
+can filter back down and say using orderless
+
+00:21:10.240 --> 00:21:13.700
+joystick or anything that has joy in it just
+
+00:21:13.700 --> 00:21:17.160
+match to those lines and then I can you know
+
+00:21:17.160 --> 00:21:20.020
+either jump there or quit out of here.
+
+00:21:20.020 --> 00:21:22.080
+I'll just quit out of it right now.
+
+00:21:22.540 --> 00:21:25.240
+So very cool. And all of that is using
+
+00:21:25.240 --> 00:21:28.640
+whatever you personally set as the set of
+
+00:21:28.640 --> 00:21:30.560
+files and directories you want to search.
+
+00:21:31.380 --> 00:21:35.940
+And finally, our number 1 feature of
+
+00:21:35.940 --> 00:21:40.440
+Hyperbole is you can customize this to give
+
+00:21:40.440 --> 00:21:43.460
+you these kinds of implicit buttons,
+
+00:21:44.660 --> 00:21:46.080
+whatever kind you want.
+
+00:21:46.560 --> 00:21:49.140
+And there are 3 levels of doing this.
+
+00:21:49.540 --> 00:21:51.140
+The first is for non-programmers.
+
+00:21:51.900 --> 00:21:53.700
+You can just set a string,
+
+00:21:54.400 --> 00:21:57.040
+like a URL with a parameter in it.
+
+00:21:57.180 --> 00:21:59.440
+So the %s represents the parameter,
+
+00:21:59.680 --> 00:22:01.440
+and This is how you do a search on
+
+00:22:01.440 --> 00:22:04.060
+DuckDuckGo. So all I have to do is evaluate
+
+00:22:04.320 --> 00:22:07.180
+this defal for action link.
+
+00:22:07.800 --> 00:22:11.020
+And now I have a new implicit button type
+
+00:22:11.040 --> 00:22:13.380
+that I can put between angle brackets.
+
+00:22:13.740 --> 00:22:15.640
+And I just give it that name,
+
+00:22:16.020 --> 00:22:18.000
+DDG, and some parameter,
+
+00:22:18.280 --> 00:22:20.040
+whatever I want to search for,
+
+00:22:20.080 --> 00:22:23.040
+and this is a button that does that search.
+
+00:22:25.320 --> 00:22:28.680
+Very cool, right? So you can embed these.
+
+00:22:28.680 --> 00:22:31.040
+This could be a hyperlink in,
+
+00:22:32.140 --> 00:22:35.120
+you know, a comment in a programming file.
+
+00:22:35.320 --> 00:22:38.160
+Anything on the entire web that you want to
+
+00:22:38.160 --> 00:22:42.320
+link to, whatever kind of compact notation
+
+00:22:42.840 --> 00:22:44.800
+you want to give it. So that's what we're
+
+00:22:44.800 --> 00:22:47.140
+going to learn as we get more advanced here
+
+00:22:47.140 --> 00:22:49.400
+you can give it even more compact notations.
+
+00:22:49.840 --> 00:22:52.380
+So as you get more advanced you can say,
+
+00:22:52.380 --> 00:22:54.240
+well I don't like this angle bracket,
+
+00:22:54.240 --> 00:22:57.020
+I want to have an implicit button that uses
+
+00:22:57.280 --> 00:22:59.620
+these square brackets and then an angle
+
+00:22:59.620 --> 00:23:02.080
+bracket inside it. So then you need the
+
+00:23:02.080 --> 00:23:05.200
+defile for implicit link.
+
+00:23:06.040 --> 00:23:08.860
+This lets you specify your start and end
+
+00:23:08.860 --> 00:23:12.180
+delimiters for your new type and and then you
+
+00:23:12.180 --> 00:23:14.840
+can give it a function that you wanted to run
+
+00:23:15.040 --> 00:23:18.320
+and that will take the text of whatever is in
+
+00:23:18.320 --> 00:23:19.780
+the button, in this case,
+
+00:23:19.900 --> 00:23:23.760
+test release here, and feed it to the
+
+00:23:23.760 --> 00:23:26.080
+function that I gave here.
+
+00:23:26.080 --> 00:23:29.540
+So what this function does is grep over my
+
+00:23:29.540 --> 00:23:33.420
+git log and find any commits that include the
+
+00:23:33.420 --> 00:23:35.360
+term test release in it.
+
+00:23:35.360 --> 00:23:38.200
+So let's try it. First I have to add the
+
+00:23:38.200 --> 00:23:41.740
+button type and that's all it takes and it
+
+00:23:41.740 --> 00:23:44.800
+defined it now. So anywhere in Emacs now I
+
+00:23:44.800 --> 00:23:46.920
+can use this button type essentially.
+
+00:23:47.180 --> 00:23:48.980
+So let me try to activate it.
+
+00:23:49.200 --> 00:23:52.760
+Okay, and it says yeah let's save it.
+
+00:23:53.080 --> 00:23:55.940
+Okay so now it's running a git log command.
+
+00:23:56.320 --> 00:23:59.440
+It found all the commits and now of course if
+
+00:23:59.440 --> 00:24:02.980
+I had made a return on this commit it
+
+00:24:02.980 --> 00:24:05.500
+recognizes it as an implicit link,
+
+00:24:05.680 --> 00:24:09.300
+and if I search for what was a test release,
+
+00:24:09.600 --> 00:24:11.960
+there it is. So this commit had that in
+
+00:24:11.960 --> 00:24:14.180
+there. So all these matches,
+
+00:24:14.180 --> 00:24:16.280
+so I don't know how other people do this,
+
+00:24:16.280 --> 00:24:20.040
+but for me this makes it a lot simpler.
+
+00:24:21.280 --> 00:24:24.800
+So a lot of power that any programmer can
+
+00:24:24.800 --> 00:24:27.500
+use. And finally, if you've mastered Emacs
+
+00:24:27.500 --> 00:24:29.360
+Lisp, or you're starting to,
+
+00:24:29.440 --> 00:24:33.740
+you can look in the hib types file in
+
+00:24:33.740 --> 00:24:37.320
+Hyperbole and see all sorts of uses of defib,
+
+00:24:37.500 --> 00:24:39.440
+which is defined implicit button.
+
+00:24:39.660 --> 00:24:42.660
+And that's the full power of e-LISP when you
+
+00:24:42.660 --> 00:24:45.060
+want to define 1. So what we're going to do
+
+00:24:45.060 --> 00:24:46.780
+here is I wanted to know,
+
+00:24:47.080 --> 00:24:49.700
+given a date, what the day of the week is.
+
+00:24:49.900 --> 00:24:53.040
+And because the date primitives weren't quite
+
+00:24:53.040 --> 00:24:54.640
+written the way I might like,
+
+00:24:55.080 --> 00:24:57.520
+it's a little longer than some.
+
+00:24:57.520 --> 00:25:00.400
+But I'm just going to evaluate this list.
+
+00:25:00.720 --> 00:25:06.100
+And I've now defined DOW as an action type.
+
+00:25:06.140 --> 00:25:08.500
+Now, how do I know I'm doing that?
+
+00:25:08.500 --> 00:25:10.700
+So I can always say Control-H,
+
+00:25:11.000 --> 00:25:13.580
+capital A here to see what a button's going
+
+00:25:13.580 --> 00:25:15.840
+to do. And it tells me When I'm there,
+
+00:25:15.840 --> 00:25:18.140
+I'm at a hyperbole button,
+
+00:25:18.400 --> 00:25:23.440
+and the type is from category DOW.
+
+00:25:24.000 --> 00:25:25.120
+And what's it gonna do?
+
+00:25:25.120 --> 00:25:27.420
+It takes a mark, it's gonna do a message
+
+00:25:27.440 --> 00:25:29.880
+action. Okay, so let's try it.
+
+00:25:31.300 --> 00:25:32.800
+It tells me that's a date,
+
+00:25:32.800 --> 00:25:34.220
+and it falls on a Sunday,
+
+00:25:34.220 --> 00:25:35.820
+which is today. That's correct.
+
+00:25:36.100 --> 00:25:39.020
+So 2 days from today is a Tuesday.
+
+00:25:39.800 --> 00:25:43.400
+Beautiful. So we've just totally transformed
+
+00:25:44.840 --> 00:25:46.860
+what we can do with text.
+
+00:25:46.980 --> 00:25:48.900
+You notice there's no markup here.
+
+00:25:49.000 --> 00:25:53.440
+And this is working with all of the other
+
+00:25:53.440 --> 00:25:55.600
+implicit types that we have everywhere in
+
+00:25:55.600 --> 00:25:57.920
+Emacs. It's only going to match to this kind
+
+00:25:57.920 --> 00:26:00.560
+of pattern and anywhere else,
+
+00:26:00.720 --> 00:26:02.820
+you know, it just won't trigger that type.
+
+00:26:03.460 --> 00:26:06.480
+So lots of power. You just need to get
+
+00:26:06.480 --> 00:26:07.700
+started with Hyperbole.
+
+00:26:07.960 --> 00:26:10.860
+There's great documentation both inside the
+
+00:26:10.860 --> 00:26:12.180
+code and in the manual.
+
+00:26:12.520 --> 00:26:15.460
+There's a fast demo that you can start with
+
+00:26:15.520 --> 00:26:17.800
+and there's about 10 different videos.
+
+00:26:18.260 --> 00:26:21.220
+There'll be 3 presentations on hyperbole here
+
+00:26:21.560 --> 00:26:25.660
+at the conference, and I hope you've enjoyed
+
+00:26:25.760 --> 00:26:28.200
+this presentation. I'd love to answer your
+
+00:26:28.200 --> 00:26:31.200
+questions and get some new users for
+
+00:26:31.200 --> 00:26:36.040
+Hyperbole. So lastly, I'd like to thank my
+
+00:26:36.040 --> 00:26:38.040
+co-maintainer, Matt, who's going to speak
+
+00:26:38.040 --> 00:26:42.040
+later about the extensive test protocols we
+
+00:26:42.040 --> 00:26:45.920
+have in Hyperbole. Hyperbole works on every
+
+00:26:46.120 --> 00:26:47.860
+version of Emacs from 27.1
+
+00:26:48.480 --> 00:26:52.600
+up, and every operating system and Windows
+
+00:26:52.600 --> 00:26:56.120
+system that you use. And thanks so much to
+
+00:26:56.120 --> 00:26:58.680
+the volunteers and the speakers at EmacsConf.
+
+00:26:59.200 --> 00:27:02.000
+You do a great job, and we're all really
+
+00:27:02.000 --> 00:27:04.400
+appreciative that you take all the time that
+
+00:27:04.400 --> 00:27:06.240
+you do to make this happen.
+
+00:27:06.540 --> 00:27:07.620
+Thank you very much.
+
+00:27:09.960 --> 00:27:11.400
+[Speaker 1]: And thank you so much Bob.
+
+00:27:11.400 --> 00:27:14.680
+So I'll let you do the gymnastics to join us
+
+00:27:14.680 --> 00:27:16.440
+back on BBB and put your webcam.
+
+00:27:17.020 --> 00:27:18.840
+In the meantime, I'll invite people,
+
+00:27:19.120 --> 00:27:20.740
+as Sasha told you in the introduction,
+
+00:27:21.060 --> 00:27:23.600
+to go put your question in the pad.
+
+00:27:23.600 --> 00:27:25.900
+The link is on the talks page and also on
+
+00:27:25.900 --> 00:27:28.220
+IRC. So take your time.
+
+00:27:28.320 --> 00:27:29.900
+We've already got some people who've asked
+
+00:27:29.900 --> 00:27:33.060
+questions. You can also start joining the
+
+00:27:33.060 --> 00:27:35.140
+room. Let me just ping Sasha.
+
+00:27:35.540 --> 00:27:38.440
+Ping to open ID HyperAmp.
+
+00:27:39.280 --> 00:27:41.120
+So, you'll be able to join us on
+
+00:27:41.120 --> 00:27:43.260
+BigBlueButton as well to go chat with Bob
+
+00:27:43.260 --> 00:27:45.020
+more directly. I'm not sure if people have
+
+00:27:45.020 --> 00:27:46.480
+joined already. Not yet.
+
+00:27:50.220 --> 00:27:51.060
+So, Bob, what I'll do,
+
+00:27:51.060 --> 00:27:52.280
+we already have 4 questions.
+
+00:27:52.280 --> 00:27:54.080
+I'm gonna read them to you and you can take
+
+00:27:54.080 --> 00:27:54.900
+your time answering them,
+
+00:27:54.900 --> 00:27:57.340
+but we do have about 7 minutes until we go to
+
+00:27:57.340 --> 00:27:59.080
+the next talk, so we need to be a little bit
+
+00:28:00.420 --> 00:28:00.920
+[Speaker 0]: Okay.
+
+00:27:59.080 --> 00:28:03.260
+[Speaker 1]: chop-chop. All right, so reading the first
+
+00:28:03.260 --> 00:28:05.460
+questions, and I'm also going to display them
+
+00:28:05.460 --> 00:28:06.920
+for the stream to see,
+
+00:28:07.580 --> 00:28:09.740
+do buttons keep their metadata within the
+
+00:28:09.740 --> 00:28:12.380
+same file? E.g., would I see it if I change
+
+00:28:12.380 --> 00:28:13.940
+to fundamental mode, for instance?
+
+00:28:15.820 --> 00:28:19.340
+[Speaker 0]: So all of the things that I was showing you,
+
+00:28:19.340 --> 00:28:21.300
+implicit buttons have no metadata.
+
+00:28:21.900 --> 00:28:23.800
+That's the great thing about them,
+
+00:28:23.800 --> 00:28:27.400
+is you just type them in the buffer and what
+
+00:28:27.400 --> 00:28:30.020
+you see is all there is to that button and
+
+00:28:30.020 --> 00:28:33.300
+hyperbole generates all the smarts associated
+
+00:28:33.320 --> 00:28:35.780
+with them. When you create an explicit
+
+00:28:35.940 --> 00:28:38.680
+button, which I showed you 1 or 2 examples
+
+00:28:38.760 --> 00:28:42.720
+of, that metadata is, there is metadata with
+
+00:28:42.720 --> 00:28:45.860
+that, and that is stored in a separate file
+
+00:28:45.860 --> 00:28:47.860
+in the same directory called .hypb.
+
+00:28:49.240 --> 00:28:51.500
+So it's hidden away and it doesn't affect the
+
+00:28:51.500 --> 00:28:53.700
+format of the buffer that it's in.
+
+00:28:53.940 --> 00:28:56.540
+So again, what you see is what you get.
+
+00:28:56.600 --> 00:28:58.740
+You just see the delimiters around the
+
+00:28:58.740 --> 00:29:01.140
+explicit button and that's it.
+
+00:29:01.840 --> 00:29:04.500
+So Hyperbole takes care of all that for you.
+
+00:29:04.860 --> 00:29:08.360
+However, if you embed them into like a mail
+
+00:29:08.360 --> 00:29:09.440
+message, which you can,
+
+00:29:09.440 --> 00:29:12.180
+you can mail buttons, then there is a hidden
+
+00:29:12.180 --> 00:29:14.760
+area at the end of the mail message that
+
+00:29:14.760 --> 00:29:17.120
+encodes the metadata for the explicit
+
+00:29:17.120 --> 00:29:17.620
+buttons.
+
+00:29:19.540 --> 00:29:21.640
+[Speaker 1]: Ok, great. Next question.
+
+00:29:21.980 --> 00:29:24.560
+Is it possible to link to a file by its ID,
+
+00:29:24.720 --> 00:29:27.340
+like the node, org ID or some similar unique
+
+00:29:27.340 --> 00:29:28.120
+string inside?
+
+00:29:29.380 --> 00:29:32.620
+[Speaker 0]: Yes, In fact, that's 1 of the new features in
+
+00:29:33.280 --> 00:29:37.800
+9. You just made a return on an ID and it
+
+00:29:37.800 --> 00:29:40.780
+takes you right to the org node,
+
+00:29:40.840 --> 00:29:44.880
+works with org Rome and org straight out of
+
+00:29:44.880 --> 00:29:47.900
+the box. We're looking at ways to make it
+
+00:29:47.900 --> 00:29:50.040
+easier to just insert those in places,
+
+00:29:50.040 --> 00:29:52.840
+but since you have word keys that do that
+
+00:29:52.840 --> 00:29:55.600
+already, you can just insert them in any
+
+00:29:55.600 --> 00:29:58.360
+documents and Hyperbole will recognize them.
+
+00:29:58.360 --> 00:30:02.620
+I think In some cases you may need to put ID
+
+00:30:02.680 --> 00:30:05.400
+colon in front of the ID as well.
+
+00:30:05.740 --> 00:30:06.920
+Generally it works.
+
+00:30:08.560 --> 00:30:11.560
+[Speaker 1]: Ok, great. Moving on to the next question.
+
+00:30:12.120 --> 00:30:13.760
+Regarding the frames example,
+
+00:30:14.240 --> 00:30:16.320
+any thoughts or considerations for a
+
+00:30:16.320 --> 00:30:19.020
+transient interface or is this something 1
+
+00:30:19.020 --> 00:30:22.280
+could already toggle? Are you familiar with
+
+00:30:22.280 --> 00:30:23.160
+transient interface?
+
+00:30:23.560 --> 00:30:26.700
+[Speaker 0]: Yes, we don't use transient because we,
+
+00:30:26.720 --> 00:30:30.140
+you know, Hyperbole started out in 1991,
+
+00:30:30.520 --> 00:30:34.300
+though it's had much much work since then so
+
+00:30:34.300 --> 00:30:37.940
+we predate a lot of newer things in Emacs and
+
+00:30:37.940 --> 00:30:41.400
+then we just use them as as they Become
+
+00:30:41.400 --> 00:30:45.480
+useful too hyperbole We think the The mini
+
+00:30:45.480 --> 00:30:46.720
+buffer menu is pretty good.
+
+00:30:46.720 --> 00:30:48.780
+We could rewrite stuff in transient,
+
+00:30:48.900 --> 00:30:51.600
+but we haven't seen the need yet.
+
+00:30:52.760 --> 00:30:54.960
+Maybe high control, that might be a good
+
+00:30:54.960 --> 00:30:58.480
+candidate, because there are so many keys in
+
+00:30:58.480 --> 00:31:00.480
+it. So we'll think about that.
+
+00:31:00.480 --> 00:31:03.060
+But it would be a while before we got to it.
+
+00:31:04.780 --> 00:31:07.120
+[Speaker 1]: Right. Moving on to the next question.
+
+00:31:07.120 --> 00:31:08.760
+Sorry I got really confused because there's a
+
+00:31:08.760 --> 00:31:10.620
+French salut, you know,
+
+00:31:10.660 --> 00:31:12.940
+in the text of it. Is someone saying hi to me
+
+00:31:12.940 --> 00:31:14.380
+or something? All right,
+
+00:31:14.380 --> 00:31:16.960
+next question. Regarding multi-file search
+
+00:31:16.960 --> 00:31:22.080
+functionality, why not implement it within
+
+00:31:22.080 --> 00:31:24.920
+the existing framework of MetaX grep or
+
+00:31:24.920 --> 00:31:26.180
+similar built-in commands?
+
+00:31:26.360 --> 00:31:28.620
+Yet another search interface sounds a bit
+
+00:31:28.620 --> 00:31:29.120
+redundant.
+
+00:31:30.920 --> 00:31:34.120
+[Speaker 0]: Multi-file search, so HiRolo I guess you're
+
+00:31:34.120 --> 00:31:36.380
+talking about. I think what you missed there
+
+00:31:36.380 --> 00:31:39.440
+is that High Rollo matches to records,
+
+00:31:40.080 --> 00:31:42.860
+multi-line records, so it's not a
+
+00:31:42.860 --> 00:31:45.360
+line-oriented match, it's a record-oriented
+
+00:31:45.820 --> 00:31:50.760
+match. So Grep, you can say maybe give me 3
+
+00:31:50.760 --> 00:31:52.960
+lines of context, but what if I have a
+
+00:31:52.960 --> 00:31:56.100
+20-line record? I want to see the whole
+
+00:31:56.100 --> 00:31:59.060
+thing. And so, it's a full-text search
+
+00:31:59.060 --> 00:32:03.480
+interface, which lets you have any size
+
+00:32:04.220 --> 00:32:07.260
+entries or nodes in the match buffer.
+
+00:32:07.540 --> 00:32:10.760
+So that's 1 reason. MADAX grep works with
+
+00:32:10.760 --> 00:32:13.260
+hyperbole. I mean, you use it if you want and
+
+00:32:13.260 --> 00:32:16.080
+then you can hit MADA return on grep lines.
+
+00:32:16.480 --> 00:32:20.140
+So we basically take everything from POSIX
+
+00:32:20.320 --> 00:32:24.920
+and everything in Emacs and we try to make a
+
+00:32:24.920 --> 00:32:26.680
+lot of it simpler to use.
+
+00:32:26.680 --> 00:32:28.960
+We don't take away any of the functionality,
+
+00:32:29.480 --> 00:32:31.040
+we just augment it.
+
+00:32:32.780 --> 00:32:35.200
+[Speaker 1]: Right, and I think that's the logic for a lot
+
+00:32:35.200 --> 00:32:36.300
+of the packages, you know,
+
+00:32:36.300 --> 00:32:38.440
+the philosophy is just you create your little
+
+00:32:38.440 --> 00:32:40.280
+bit, your little island where you do your
+
+00:32:40.280 --> 00:32:42.160
+stuff. And if you can resonate with other
+
+00:32:42.160 --> 00:32:43.280
+islands so much the better.
+
+00:32:43.280 --> 00:32:45.600
+And it feels like between those islands,
+
+00:32:45.700 --> 00:32:48.380
+you know, hyperbole is a great way to connect
+
+00:32:48.380 --> 00:32:49.980
+things that are just text.
+
+00:32:50.140 --> 00:32:51.880
+So it's always been a lovely philosophy.
+
+00:32:52.200 --> 00:32:53.620
+There's always been a lovely philosophy
+
+00:32:53.620 --> 00:32:54.360
+behind it.
+
+00:32:55.240 --> 00:32:58.200
+[Speaker 0]: 1 other point I'd make there is that the
+
+00:32:58.200 --> 00:33:01.460
+Hyrolo also contains logical search
+
+00:33:01.460 --> 00:33:04.940
+operators. So when I typed in that string you
+
+00:33:04.940 --> 00:33:07.360
+could just as well type with like Lisp
+
+00:33:07.360 --> 00:33:09.140
+expressions, semi Lisp expressions.
+
+00:33:09.480 --> 00:33:13.460
+You can say open paren and word 1,
+
+00:33:13.940 --> 00:33:17.240
+word 2, close paren. You know you can have or
+
+00:33:17.240 --> 00:33:22.360
+and XOR and not and it'll do the search and
+
+00:33:22.360 --> 00:33:24.260
+just retrieve the entries,
+
+00:33:24.720 --> 00:33:27.620
+again, multi-line entries that match all of
+
+00:33:27.620 --> 00:33:29.660
+the criteria that you specified there.
+
+00:33:29.760 --> 00:33:31.120
+So that's fairly unique,
+
+00:33:31.120 --> 00:33:33.320
+I think. So you basically got a full text
+
+00:33:33.320 --> 00:33:35.840
+search platform with logical operators,
+
+00:33:36.380 --> 00:33:38.580
+instantly, you know, fast moving,
+
+00:33:38.680 --> 00:33:42.720
+rapid keys that you can control everything
+
+00:33:42.720 --> 00:33:45.280
+with and it's all integrated into this larger
+
+00:33:45.280 --> 00:33:45.780
+framework.
+
+00:33:47.780 --> 00:33:49.060
+[Speaker 1]: Okay, great. Well, Bob,
+
+00:33:49.060 --> 00:33:50.520
+you have 2 more questions,
+
+00:33:50.820 --> 00:33:53.760
+but there's a big 1 about what inspired you
+
+00:33:53.760 --> 00:33:56.440
+to write it back. It's being hyperbole around
+
+00:33:56.440 --> 00:33:57.360
+the time of its birth,
+
+00:33:57.360 --> 00:33:59.680
+but sadly, we only have about 1 more minute.
+
+00:34:00.040 --> 00:34:01.320
+So what I'm going to ask you to do,
+
+00:34:01.320 --> 00:34:02.780
+feel free to answer the question.
+
+00:34:02.800 --> 00:34:05.220
+If you go on BBB, I've pasted the link to the
+
+00:34:05.220 --> 00:34:06.980
+other pad. I think you can see it on your
+
+00:34:08.420 --> 00:34:11.020
+[Speaker 0]: I have the ether pad up.
+
+00:34:06.980 --> 00:34:11.820
+[Speaker 1]: computer as well. Right,
+
+00:34:11.820 --> 00:34:13.100
+so what are we going to do?
+
+00:34:14.860 --> 00:34:16.679
+I'm Sorry, I'm just a little bit pressed by
+
+00:34:16.679 --> 00:34:18.280
+time because it's not me controlling when we
+
+00:34:18.280 --> 00:34:19.340
+move on to the next talk,
+
+00:34:19.340 --> 00:34:21.679
+as was evidenced yesterday when we got yonked
+
+00:34:21.719 --> 00:34:24.000
+to the next talk. So Bob,
+
+00:34:24.000 --> 00:34:25.679
+feel free to take all the time you want to
+
+00:34:25.679 --> 00:34:26.580
+answer questions. People,
+
+00:34:26.580 --> 00:34:28.360
+if you wanna join the Big Blue Button room,
+
+00:34:28.360 --> 00:34:30.239
+the links are available and open on the talk
+
+00:34:30.239 --> 00:34:31.960
+page. You can join and ask as many questions
+
+00:34:31.960 --> 00:34:33.679
+as you want to Bob. And for us,
+
+00:34:33.679 --> 00:34:35.560
+with a live stream, we'll be moving on to the
+
+00:34:35.560 --> 00:34:37.280
+next talk in about 30 seconds.
+
+00:34:37.280 --> 00:34:39.400
+So Bob, all that's left is for me to thank
+
+00:34:39.400 --> 00:34:41.580
+you for your presentation again this year and
+
+00:34:43.520 --> 00:34:44.560
+[Speaker 0]: Thank you, Leo.
+
+00:34:41.580 --> 00:34:45.820
+[Speaker 1]: for all your answers. All right.
+
+00:34:45.820 --> 00:34:47.699
+Bye bye, Bob. And we'll be moving on to the
+
+00:34:47.699 --> 00:34:49.080
+next talk in about 10 seconds.
+
+00:34:49.080 --> 00:34:53.800
+See you in a bit. All right,
+
+00:34:53.800 --> 00:34:56.139
+Bob, we are off air I think now.
+
+00:34:56.139 --> 00:34:57.720
+Thank you so much. I need to get moving for
+
+00:34:59.320 --> 00:35:02.320
+[Speaker 0]: Okay, is somebody gonna keep writing answers
+
+00:35:02.500 --> 00:35:04.540
+in here or I need to type them in?
+
+00:34:57.720 --> 00:35:06.260
+[Speaker 1]: the next talk. It's probably best now if you
+
+00:35:06.260 --> 00:35:09.440
+read the questions on your own and answer
+
+00:35:09.440 --> 00:35:11.040
+them. We'll collate everything together,
+
+00:35:11.040 --> 00:35:12.480
+we'd just like to have your answers.
+
+00:35:15.060 --> 00:35:17.180
+[Speaker 0]: I hope some people will join the BBB.
+
+00:35:19.000 --> 00:35:21.380
+[Speaker 1]: it in my... All right,
+
+00:35:21.380 --> 00:35:21.880
+bye-bye.
+
+00:35:17.780 --> 00:35:23.300
+[Speaker 0]: But I'll start. I'll put Bye-bye.
+
+00:35:24.220 --> 00:35:28.580
+So let me take a second here to see what
+
+00:35:28.580 --> 00:35:32.980
+questions we have. Did we cover that?
+
+00:35:36.240 --> 00:35:42.900
+OK. The point is why not upstream search
+
+00:35:42.980 --> 00:35:46.580
+interface? Could you clarify that question?
+
+00:35:46.840 --> 00:35:51.380
+I don't quite know what that means.
+
+00:35:51.380 --> 00:35:53.760
+So I'll go on to the next 1 and come back to
+
+00:35:53.760 --> 00:35:57.680
+that. Hyperlinks been around for a number of
+
+00:35:57.680 --> 00:35:59.820
+years now. What inspired you to write it back
+
+00:35:59.820 --> 00:36:01.500
+around the time of its birth?
+
+00:36:01.800 --> 00:36:03.140
+Well, that's a great question.
+
+00:36:04.700 --> 00:36:07.360
+It was born before the World Wide Web,
+
+00:36:07.360 --> 00:36:09.300
+actually. And it was right before.
+
+00:36:10.120 --> 00:36:13.100
+I remember we were in the midst of a version
+
+00:36:13.840 --> 00:36:16.300
+when the first version of the web occurred.
+
+00:36:16.560 --> 00:36:19.840
+And I was thinking that there was going to be
+
+00:36:19.840 --> 00:36:22.700
+an information explosion of unstructured
+
+00:36:22.960 --> 00:36:27.140
+information. And like we needed to have much
+
+00:36:27.140 --> 00:36:30.920
+better tools to be able to manage say like
+
+00:36:30.920 --> 00:36:36.740
+5,000 email messages coming in and all sorts
+
+00:36:36.740 --> 00:36:39.260
+of non-database-oriented information
+
+00:36:39.480 --> 00:36:42.020
+structures. So I said we need an advanced
+
+00:36:42.180 --> 00:36:46.080
+interactive hypertext system and it needs to
+
+00:36:46.080 --> 00:36:49.320
+work with all the general capabilities that
+
+00:36:49.320 --> 00:36:54.100
+we use like email and our document production
+
+00:36:54.240 --> 00:36:58.500
+systems. So I was doing research at the time
+
+00:36:58.500 --> 00:37:04.200
+at a university And I decided to work on
+
+00:37:04.200 --> 00:37:06.140
+something that we called personalized
+
+00:37:06.420 --> 00:37:07.520
+information environments.
+
+00:37:07.900 --> 00:37:10.120
+And there's a paper about this out there if
+
+00:37:10.120 --> 00:37:12.040
+you want to dig it out on the web.
+
+00:37:12.900 --> 00:37:15.360
+So Pies, as they were called,
+
+00:37:16.320 --> 00:37:20.040
+was an architecture which would have a bunch
+
+00:37:20.040 --> 00:37:24.100
+of managers, like Hyperbole was 1 of the
+
+00:37:24.100 --> 00:37:25.820
+managers, the hypertext manager,
+
+00:37:26.520 --> 00:37:29.440
+and then a bunch of point tools that would
+
+00:37:29.440 --> 00:37:30.720
+leverage the managers,
+
+00:37:30.800 --> 00:37:33.580
+like an email reader would be a point tool
+
+00:37:33.680 --> 00:37:36.140
+that would leverage the hypertext manager.
+
+00:37:36.780 --> 00:37:39.480
+And so the first, I did in fact write
+
+00:37:39.480 --> 00:37:40.520
+something called PyMail,
+
+00:37:41.460 --> 00:37:43.840
+which was very much Gmail-like,
+
+00:37:44.660 --> 00:37:47.640
+before Gmail. And so inside,
+
+00:37:48.100 --> 00:37:51.300
+and I did a, it was like our mail in a way,
+
+00:37:51.680 --> 00:37:54.020
+but inside your our mail summaries,
+
+00:37:54.100 --> 00:37:57.180
+for example, you could have explicit buttons
+
+00:37:57.180 --> 00:38:01.120
+embedded and that were drawn from the subject
+
+00:38:01.120 --> 00:38:02.300
+of your email message,
+
+00:38:02.400 --> 00:38:06.180
+and they'd work just like the regular button.
+
+00:38:06.300 --> 00:38:07.540
+So it was very flexible,
+
+00:38:07.700 --> 00:38:11.660
+and it had rule-based processing and things.
+
+00:38:11.820 --> 00:38:13.520
+So Hyperbole came out of that,
+
+00:38:13.520 --> 00:38:15.040
+and it's come a long way,
+
+00:38:15.200 --> 00:38:20.360
+but it's still a very useful core hypertext
+
+00:38:20.480 --> 00:38:22.040
+system, hypermedia system,
+
+00:38:22.040 --> 00:38:26.580
+I should say. Are you familiar with the
+
+00:38:26.580 --> 00:38:28.780
+Embark package? I am a bit.
+
+00:38:28.820 --> 00:38:30.520
+I've just started using it.
+
+00:38:30.520 --> 00:38:31.900
+I think there's some overlapping
+
+00:38:32.040 --> 00:38:34.200
+functionality with hyperbole.
+
+00:38:34.340 --> 00:38:39.360
+Yes, we've found that people over time have
+
+00:38:39.360 --> 00:38:41.600
+enjoyed hyperbole and have started
+
+00:38:41.600 --> 00:38:43.940
+replicating some of its features,
+
+00:38:43.940 --> 00:38:45.880
+you know, small amounts of the features.
+
+00:38:47.680 --> 00:38:51.340
+I talked to, I hope I don't miss his name,
+
+00:38:51.340 --> 00:38:56.000
+but O'Adam who writes that once in a while we
+
+00:38:56.000 --> 00:38:59.480
+dialogue and I think Embark is great,
+
+00:38:59.480 --> 00:39:04.500
+you know, I'll give him some pointers too and
+
+00:39:04.500 --> 00:39:08.040
+he thinks that Embark and hyperbole are quite
+
+00:39:08.040 --> 00:39:10.740
+compatible too, just like organ hyperbole.
+
+00:39:11.120 --> 00:39:13.080
+So that's how we like to keep it.
+
+00:39:14.540 --> 00:39:18.160
+Some people prefer just a small package of
+
+00:39:18.160 --> 00:39:21.100
+mBARC, and it does different things than what
+
+00:39:21.100 --> 00:39:23.800
+Hyperbole does. So I think you use all of
+
+00:39:23.800 --> 00:39:27.540
+these tools together, and they can work very
+
+00:39:27.540 --> 00:39:33.960
+well together. Any other questions?
+
+00:39:34.280 --> 00:39:38.300
+Anybody still here? If not,
+
+00:39:38.440 --> 00:39:41.180
+probably people are off to another talk.
+
+00:39:41.940 --> 00:39:47.160
+So thank you very much And again look for
+
+00:39:47.160 --> 00:39:51.840
+Hyperbole version 9 in the next week.
+
+00:39:53.740 --> 00:39:56.880
+Thanks very much. Bye.
+
+00:40:00.620 --> 00:40:07.120
+Should I leave BBB? Oh Alpha Papa's here.
+
+00:40:07.120 --> 00:40:16.040
+Hey. Good to see you. Alright,
+
+00:40:16.040 --> 00:40:22.740
+well... Well, I'll stay for another minute,
+
+00:40:22.820 --> 00:40:27.280
+but I think I'm going to go off video 2 and
+
+00:40:27.280 --> 00:40:29.780
+start listening to another talk.
+
+00:40:30.660 --> 00:40:31.480
+Thanks, everyone. Thanks everyone.
+
+00:40:56.040 --> 00:40:56.960
+Yes, I can hear you. Yes,
+
+00:40:58.860 --> 00:41:00.060
+[Speaker 1]: Have you been answering questions?
+
+00:40:56.960 --> 00:41:03.700
+[Speaker 0]: I can hear you. finished answering the
+
+00:41:03.700 --> 00:41:05.200
+questions. We're all done.
+
+00:41:00.060 --> 00:41:07.360
+[Speaker 1]: I Okay, cool. Well, what I'm going to do,
+
+00:41:07.360 --> 00:41:09.140
+I'm going to close the room unless you want
+
+00:41:09.140 --> 00:41:10.140
+to go a little longer,
+
+00:41:10.140 --> 00:41:11.880
+because this talk that we're playing right
+
+00:41:11.880 --> 00:41:13.940
+now is finishing really quick and we don't
+
+00:41:13.940 --> 00:41:15.140
+have a Q&A afterwards.
+
+00:41:15.300 --> 00:41:19.040
+So, do you want to stay on air or something?
+
+00:41:19.440 --> 00:41:21.680
+[Speaker 0]: Yeah, if you let people know to come back,
+
+00:41:21.680 --> 00:41:23.320
+because someone went to go hear that
+
+00:41:23.320 --> 00:41:24.900
+presentation, I can stay.
+
+00:41:25.920 --> 00:41:27.880
+[Speaker 1]: Sure, I'll make an announcement then.
+
+00:41:27.880 --> 00:41:29.680
+And you can stay, we'll just put on BBB.
+
+00:41:29.680 --> 00:41:31.840
+You can stay muted until people join,
+
+00:41:31.840 --> 00:41:33.840
+but this way it opens up menus for people to
+
+00:41:33.840 --> 00:41:36.060
+join and if no 1 shows up in 5 minutes we'll
+
+00:41:36.060 --> 00:41:38.080
+all go on break. Does that sound okay?
+
+00:41:38.680 --> 00:41:40.020
+[Speaker 0]: Great, thank you.
+
+00:41:40.520 --> 00:41:44.340
+[Speaker 1]: Cool, I'll go back to the management in the
+
+00:41:44.340 --> 00:41:45.660
+background and I'll let you know.
+
+00:43:25.760 --> 00:43:27.540
+Okay, Bob, I've won the stream.
+
+00:43:27.660 --> 00:43:28.940
+We are joining it now.
+
+00:43:28.940 --> 00:43:30.380
+We've got about 5 seconds.
+
+00:43:41.940 --> 00:43:43.580
+And I think we are back.
+
+00:43:49.240 --> 00:43:51.300
+so we are gone, Bob, please.
+
+00:43:45.340 --> 00:43:53.260
+[Speaker 0]: Hi. So, yeah, I was going to say,
+
+00:43:54.100 --> 00:43:57.160
+can we see if anybody comes back in the room?
+
+00:43:57.160 --> 00:43:58.120
+How do you tell?
+
+00:44:01.380 --> 00:44:03.740
+[Speaker 1]: You should be able to show on the left,
+
+00:44:03.740 --> 00:44:04.920
+you've got on BbBlueButton,
+
+00:44:04.920 --> 00:44:06.380
+you've got a button, I'm showing it on the
+
+00:44:06.380 --> 00:44:08.440
+screen, but you've got a little button that
+
+00:44:08.440 --> 00:44:10.420
+allows you to show the people joining.
+
+00:44:10.840 --> 00:44:15.380
+So, hello everyone. Let's see if you had more
+
+00:44:15.380 --> 00:44:17.080
+question on your pad that we could be taking
+
+00:44:17.080 --> 00:44:19.040
+in the meantime, just give me a second to
+
+00:44:19.040 --> 00:44:19.240
+find
+
+00:44:19.240 --> 00:44:23.500
+[Speaker 0]: your pad. Here we go, an error occurred.
+
+00:44:31.820 --> 00:44:33.220
+[Speaker 1]: All right, it's loading up.
+
+00:44:25.680 --> 00:44:37.840
+[Speaker 0]: Okay. Wow. Feels like there's an AI writing
+
+00:44:37.960 --> 00:44:39.760
+this stuff on the pad.
+
+00:44:41.120 --> 00:44:44.740
+Has it? Is this the last pad?
+
+00:44:45.600 --> 00:44:47.080
+Oh no, this is a different 1,
+
+00:44:49.840 --> 00:44:51.520
+[Speaker 1]: Which question are you looking at now?
+
+00:44:47.080 --> 00:44:53.820
+[Speaker 0]: sorry. It was a different pad,
+
+00:44:55.840 --> 00:44:56.460
+[Speaker 1]: Oh right.
+
+00:44:53.820 --> 00:44:57.109
+[Speaker 0]: that was the problem. Okay,
+
+00:44:57.260 --> 00:44:59.540
+here we go. Okay, I'm back.
+
+00:45:00.540 --> 00:45:01.860
+So, yeah, it looks like...
+
+00:45:02.260 --> 00:45:03.980
+Is anybody back? Send,
+
+00:45:04.120 --> 00:45:07.180
+if you're here, send a chat message.
+
+00:45:08.520 --> 00:45:10.020
+[Speaker 1]: Yeah, because it's been something.
+
+00:45:10.640 --> 00:45:14.240
+You have, apparently, whenever we leave those
+
+00:45:14.320 --> 00:45:18.220
+BBB chat room open, the moment we go off air,
+
+00:45:18.260 --> 00:45:20.280
+people start joining and asking a lot of very
+
+00:45:20.280 --> 00:45:22.200
+interesting questions and you know that's all
+
+00:45:22.200 --> 00:45:24.280
+well and good, we'll be able to put them on
+
+00:45:24.280 --> 00:45:26.280
+the page later on. But it'd be great if you
+
+00:45:26.280 --> 00:45:28.260
+could also have those discussions when we are
+
+00:45:28.260 --> 00:45:30.140
+live because a lot of people would benefit
+
+00:45:30.140 --> 00:45:32.120
+from the brilliance that goes on in this
+
+00:45:32.120 --> 00:45:34.740
+room. So please don't be shy,
+
+00:45:37.340 --> 00:45:39.900
+[Speaker 0]: So we're on the general stream now?
+
+00:45:34.740 --> 00:45:41.780
+[Speaker 1]: join and talk. Yep, we are back on the
+
+00:45:41.780 --> 00:45:46.080
+general stream. We have about until 10 of the
+
+00:45:46.080 --> 00:45:48.180
+next hour, which is 19 minutes.
+
+00:45:48.760 --> 00:45:52.540
+[Speaker 0]: Just- Why don't you and I talk?
+
+00:45:52.540 --> 00:45:56.180
+So have you ever tried hyperbole,
+
+00:45:56.400 --> 00:45:56.900
+Leo?
+
+00:45:58.180 --> 00:46:00.220
+[Speaker 1]: I have never, but You know,
+
+00:46:00.220 --> 00:46:03.380
+it feels like every year when you present
+
+00:46:03.380 --> 00:46:05.140
+something, it feels like I already know so
+
+00:46:05.140 --> 00:46:07.580
+much. Because of the buttons,
+
+00:46:08.040 --> 00:46:10.080
+it feels like it's also something that we've
+
+00:46:10.080 --> 00:46:12.440
+reinvented many times in Emacs.
+
+00:46:12.440 --> 00:46:13.940
+It's like conversion to evolution,
+
+00:46:14.020 --> 00:46:16.540
+except you're the 1 who started ahead of
+
+00:46:16.540 --> 00:46:17.420
+everyone else.
+
+00:46:17.860 --> 00:46:19.700
+[Speaker 0]: Well, that's a good point because,
+
+00:46:19.940 --> 00:46:23.200
+you know, we have, Emacs itself has push
+
+00:46:23.200 --> 00:46:25.520
+buttons, which you see like in the help
+
+00:46:25.520 --> 00:46:27.540
+buffers. And those used to,
+
+00:46:27.540 --> 00:46:29.840
+we didn't really do anything with those,
+
+00:46:30.040 --> 00:46:32.780
+but now we've subsumed them as implicit
+
+00:46:32.800 --> 00:46:35.340
+buttons as well. So you're made a return,
+
+00:46:35.580 --> 00:46:38.500
+we'll work on those anywhere too.
+
+00:46:38.740 --> 00:46:41.820
+So, we're trying to get,
+
+00:46:42.260 --> 00:46:45.920
+you use 1 key, right? To control every type
+
+00:46:45.920 --> 00:46:47.080
+of button that you have.
+
+00:46:47.080 --> 00:46:48.420
+It works on org links,
+
+00:46:48.560 --> 00:46:51.800
+org buttons anywhere, or URLs.
+
+00:46:53.240 --> 00:46:54.440
+Because it's so simple.
+
+00:46:54.520 --> 00:46:58.820
+All you need is like 5 to 10 lines of code to
+
+00:46:58.820 --> 00:47:02.760
+map. You map the pattern that represents a
+
+00:47:02.760 --> 00:47:05.080
+concept, right? And then you can create an
+
+00:47:05.080 --> 00:47:07.720
+infinite number of those buttons from that
+
+00:47:07.720 --> 00:47:09.520
+type. That's what's really cool about
+
+00:47:09.520 --> 00:47:13.060
+Hyperbole, is say I have a 500 page document
+
+00:47:13.280 --> 00:47:15.600
+and it uses a really weird format for
+
+00:47:15.600 --> 00:47:17.060
+cross-referencing, right?
+
+00:47:17.220 --> 00:47:22.320
+I write my 3 lines of pattern match to work
+
+00:47:22.320 --> 00:47:24.200
+with that. And then everywhere throughout
+
+00:47:24.200 --> 00:47:25.960
+that document and the hundreds of other
+
+00:47:25.960 --> 00:47:27.680
+documents that will be created with that
+
+00:47:27.680 --> 00:47:30.900
+format, they're all live buttons instantly.
+
+00:47:31.280 --> 00:47:33.240
+Nothing changed about the document.
+
+00:47:34.220 --> 00:47:35.500
+That's really cool. You know,
+
+00:47:35.500 --> 00:47:37.860
+word mode, we have global word buttons,
+
+00:47:37.940 --> 00:47:42.040
+but mostly it has to be embedded within an
+
+00:47:42.040 --> 00:47:44.760
+org file, right? And follow that syntax.
+
+00:47:45.580 --> 00:47:51.900
+With hyperbole, it's like we can adapt as the
+
+00:47:51.900 --> 00:47:55.300
+world adapts around us to whatever formats
+
+00:47:55.320 --> 00:47:56.940
+people want to use that day.
+
+00:47:56.940 --> 00:47:59.380
+And you can even change things to look the
+
+00:47:59.380 --> 00:48:02.200
+way you want, right, and have your own
+
+00:48:02.440 --> 00:48:04.860
+cross-references. There's something built
+
+00:48:04.860 --> 00:48:07.560
+into Hyperbole that's not really active,
+
+00:48:08.220 --> 00:48:13.120
+which was sort of along the Zettelkasten way.
+
+00:48:13.780 --> 00:48:15.440
+We wrote this a long time ago.
+
+00:48:15.440 --> 00:48:16.960
+It's called hib-doc.el,
+
+00:48:19.120 --> 00:48:22.200
+and it's a card catalog notion.
+
+00:48:22.200 --> 00:48:25.820
+So it uses the high rollo in the background
+
+00:48:26.160 --> 00:48:30.180
+but it lets you create these forms that are
+
+00:48:30.180 --> 00:48:32.800
+cards that you fill out with whatever kind of
+
+00:48:32.800 --> 00:48:35.360
+data you want and then it gives you the full
+
+00:48:35.360 --> 00:48:38.520
+text searching across the cards and each card
+
+00:48:38.520 --> 00:48:41.760
+has a unique ID that you can reference
+
+00:48:41.820 --> 00:48:45.240
+similar to org IDs but these are human
+
+00:48:45.240 --> 00:48:49.860
+readable and human typable and so you can you
+
+00:48:49.860 --> 00:48:52.940
+can just have a cross-reference to any doc ID
+
+00:48:52.960 --> 00:48:56.100
+and essentially create what Engelbart used to
+
+00:48:56.100 --> 00:49:00.520
+call a journal, which is all these IDs on
+
+00:49:00.520 --> 00:49:03.220
+documents that point you directly to the
+
+00:49:03.220 --> 00:49:05.640
+document archive so that you could have like
+
+00:49:05.640 --> 00:49:10.020
+your internal publishing system and you know
+
+00:49:10.020 --> 00:49:12.940
+it's very simple to do and it's just 1 module
+
+00:49:13.420 --> 00:49:14.660
+added on to Hyperbole.
+
+00:49:15.920 --> 00:49:19.140
+[Speaker 1]: Yeah it's especially interesting for me you
+
+00:49:19.140 --> 00:49:21.140
+know because coming back to the side of
+
+00:49:21.140 --> 00:49:23.400
+convergent evolutions it's funny because the
+
+00:49:23.400 --> 00:49:24.880
+parameters are a little different.
+
+00:49:24.920 --> 00:49:26.260
+For us with org buttons,
+
+00:49:26.260 --> 00:49:29.340
+we're very happy. A lot of the stuff during
+
+00:49:29.340 --> 00:49:31.360
+EmacsConf is run with org mode,
+
+00:49:31.360 --> 00:49:34.340
+like we have Elisp going everywhere to
+
+00:49:34.540 --> 00:49:37.320
+compile a lot of org properties,
+
+00:49:38.080 --> 00:49:39.640
+like speaker information,
+
+00:49:39.660 --> 00:49:41.480
+for instance, how long the talk is,
+
+00:49:41.480 --> 00:49:42.800
+the title, and all this.
+
+00:49:42.800 --> 00:49:44.760
+We have all of this in an org file,
+
+00:49:44.760 --> 00:49:46.020
+which we use as a database,
+
+00:49:46.220 --> 00:49:47.800
+but then we can do so much stuff.
+
+00:49:47.800 --> 00:49:50.740
+We can send email and we can update the
+
+00:49:50.740 --> 00:49:52.200
+schedule. By the way, if you're interested in
+
+00:49:52.200 --> 00:49:54.280
+this, we'll have a talk on the DevTrack in
+
+00:49:54.280 --> 00:49:56.640
+the afternoon today that Sacha did and it's
+
+00:49:56.640 --> 00:49:58.140
+wonderful. I'm just teasing it.
+
+00:49:58.140 --> 00:49:59.040
+[Speaker 0]: Oh, that's great.
+
+00:50:00.060 --> 00:50:01.140
+[Speaker 1]: But coming back to Hyperbole,
+
+00:50:01.640 --> 00:50:04.000
+for you, it feels like the parameters were
+
+00:50:04.000 --> 00:50:06.560
+slightly different because the feeling was,
+
+00:50:06.560 --> 00:50:09.020
+I just want a tunnel that can work between
+
+00:50:09.020 --> 00:50:10.440
+any type of files. Now,
+
+00:50:10.440 --> 00:50:11.740
+it's all well and good.
+
+00:50:11.740 --> 00:50:14.540
+Org-Rome, D-Note, and all the stuff like
+
+00:50:14.540 --> 00:50:16.860
+this, they create bidirectional links.
+
+00:50:17.080 --> 00:50:19.540
+But it's only between org-mode files.
+
+00:50:19.840 --> 00:50:22.040
+Whereas what you're achieving with Hyperbole,
+
+00:50:22.260 --> 00:50:24.720
+and you've done it much earlier than everyone
+
+00:50:24.720 --> 00:50:27.420
+else, is that you have this concept
+
+00:50:27.660 --> 00:50:29.440
+regardless of the type of file that you're
+
+00:50:29.440 --> 00:50:32.520
+using. And I find this to be beautiful.
+
+00:50:32.900 --> 00:50:35.280
+Like 5 years ago, whenever you were talking
+
+00:50:35.280 --> 00:50:37.280
+about hyperbole, I did not have a concrete
+
+00:50:37.280 --> 00:50:38.540
+idea of what was happening.
+
+00:50:38.640 --> 00:50:40.360
+But ever since I've gone through the journey
+
+00:50:40.360 --> 00:50:42.380
+of really understanding what the El Caster
+
+00:50:42.380 --> 00:50:45.000
+method were about, it feels like you were
+
+00:50:45.720 --> 00:50:46.980
+foreigners in the topic.
+
+00:50:46.980 --> 00:50:48.540
+Obviously, you've mentioned the mother of all
+
+00:50:48.540 --> 00:50:50.240
+demos by Edward Engelbart,
+
+00:50:50.740 --> 00:50:54.100
+but those ideas are not novel,
+
+00:50:54.340 --> 00:50:56.820
+but it feels like only now are they starting
+
+00:50:56.820 --> 00:50:58.520
+to be appropriated by people,
+
+00:50:58.520 --> 00:50:59.800
+especially in free software,
+
+00:50:59.800 --> 00:51:01.200
+and it's really good to see.
+
+00:51:01.280 --> 00:51:02.440
+I'm really excited to,
+
+00:51:02.440 --> 00:51:04.600
+well, have my small part to play in this.
+
+00:51:04.600 --> 00:51:06.980
+And I'm also excited to be able to chat with
+
+00:51:06.980 --> 00:51:10.140
+you and people like Bastien and other people
+
+00:51:10.240 --> 00:51:11.400
+about all those topics.
+
+00:51:12.340 --> 00:51:13.780
+[Speaker 0]: Yeah, I think, you know,
+
+00:51:13.940 --> 00:51:16.640
+it's fun that we can laugh now about when
+
+00:51:16.640 --> 00:51:20.020
+people say people are still using Emacs,
+
+00:51:20.020 --> 00:51:22.800
+you know, is because they're not used,
+
+00:51:22.800 --> 00:51:24.160
+certain people aren't using it.
+
+00:51:24.160 --> 00:51:26.880
+They have no idea of how far it's come and
+
+00:51:26.880 --> 00:51:28.720
+how powerful it is. And,
+
+00:51:28.780 --> 00:51:31.520
+you know, we're leveraging Elisp heavily,
+
+00:51:31.560 --> 00:51:33.940
+obviously, but if you look at the definition
+
+00:51:34.300 --> 00:51:37.800
+of our types, they look exactly like DIP
+
+00:51:37.800 --> 00:51:41.180
+funds in ELisp. And we've been able to do
+
+00:51:41.180 --> 00:51:42.780
+that because of Lisp macros.
+
+00:51:43.860 --> 00:51:46.400
+You know, we so we basically have our own
+
+00:51:46.400 --> 00:51:48.300
+domain specific language there,
+
+00:51:48.420 --> 00:51:51.240
+but there's almost nothing to learn because
+
+00:51:51.340 --> 00:51:53.460
+it's just like what you know from UList.
+
+00:51:54.200 --> 00:51:57.120
+So again, you know, taking the concept and
+
+00:51:57.120 --> 00:51:59.700
+leveraging it, abstracting it and leveraging
+
+00:51:59.760 --> 00:52:02.980
+it multiple times gives you a lot of power.
+
+00:52:03.660 --> 00:52:06.060
+And people, you know, somebody said the other
+
+00:52:06.060 --> 00:52:07.500
+day, and I said, finally,
+
+00:52:07.760 --> 00:52:10.360
+this quote happened. He said,
+
+00:52:11.000 --> 00:52:15.060
+there's so many things that I do with
+
+00:52:15.060 --> 00:52:17.200
+hyperbole every day that I forget that I'm
+
+00:52:17.200 --> 00:52:21.440
+using hyperbole. Because it's just so
+
+00:52:21.440 --> 00:52:23.580
+embedded in this guy's workflow.
+
+00:52:23.680 --> 00:52:25.440
+And that's really how I use it.
+
+00:52:25.440 --> 00:52:27.380
+You know, there are features in there,
+
+00:52:27.440 --> 00:52:29.060
+can't use everything, right?
+
+00:52:29.060 --> 00:52:31.860
+So there are features that I don't use,
+
+00:52:32.040 --> 00:52:35.580
+but I use a lot of things and it's all like
+
+00:52:35.580 --> 00:52:37.580
+muscle memory, just like the keyboard,
+
+00:52:38.200 --> 00:52:39.740
+the Emacs key bindings.
+
+00:52:39.960 --> 00:52:42.180
+So it's very exciting to get to that level.
+
+00:52:42.180 --> 00:52:44.320
+And now, you know, we haven't started with
+
+00:52:44.320 --> 00:52:46.940
+the chatbots or any of the AI integration,
+
+00:52:47.300 --> 00:52:49.480
+but I'm starting to think about that a little
+
+00:52:49.480 --> 00:52:53.480
+bit and how we'll interface to that world and
+
+00:52:53.480 --> 00:52:55.320
+I think it's going to be very exciting.
+
+00:52:56.040 --> 00:52:58.340
+[Speaker 1]: Yeah, likewise and I think it harks back to
+
+00:52:58.340 --> 00:53:00.660
+what we were talking about before when we
+
+00:53:00.660 --> 00:53:03.700
+mentioned Hyperbole being a package inside of
+
+00:53:03.700 --> 00:53:05.300
+an ecosystem that is Emacs.
+
+00:53:05.860 --> 00:53:08.040
+But it's not because something is well
+
+00:53:08.040 --> 00:53:10.560
+circumscribed in terms of feature set that it
+
+00:53:10.560 --> 00:53:12.880
+does not influence everything around it.
+
+00:53:12.880 --> 00:53:15.060
+Like Hyperbole can be used with something
+
+00:53:15.060 --> 00:53:18.080
+completely at the opposite end of what it was
+
+00:53:18.080 --> 00:53:21.380
+intended for, just because it provides a good
+
+00:53:21.380 --> 00:53:23.860
+set of tools that can be used wherever else
+
+00:53:23.860 --> 00:53:26.100
+you want in Emacs. And it's the same thing
+
+00:53:26.100 --> 00:53:27.980
+with Org Mode, it's the same thing with many,
+
+00:53:27.980 --> 00:53:29.280
+many different things.
+
+00:53:29.440 --> 00:53:32.820
+And it feels like integrating AIs,
+
+00:53:33.400 --> 00:53:36.920
+or generative AIs, into Emacs would provide
+
+00:53:39.620 --> 00:53:42.340
+such a tool that could apply to any kind of
+
+00:53:42.340 --> 00:53:45.060
+other major mode or any kind of other use.
+
+00:53:45.060 --> 00:53:46.640
+So I'm also excited to see this.
+
+00:53:46.640 --> 00:53:50.280
+It feels like we are sitting at the brink of
+
+00:53:50.280 --> 00:53:52.580
+a revolution. I'm not going to say the acne
+
+00:53:52.580 --> 00:53:54.440
+stuff, but it definitely feels like right
+
+00:53:54.440 --> 00:53:57.560
+now, by trying to see what we can do with AI,
+
+00:53:57.560 --> 00:53:59.380
+it's definitely going to change the way not
+
+00:53:59.380 --> 00:54:01.560
+only we program, but also the way we take
+
+00:54:01.560 --> 00:54:03.160
+notes and the way we design stuff,
+
+00:54:03.160 --> 00:54:05.220
+arcing back to what John Wigley said
+
+00:54:05.220 --> 00:54:08.660
+yesterday about his draft program on macOS.
+
+00:54:09.800 --> 00:54:10.940
+Bob, if you don't mind,
+
+00:54:11.040 --> 00:54:13.100
+I see people typing questions and I also see
+
+00:54:13.100 --> 00:54:14.820
+people joining on people buttons,
+
+00:54:14.820 --> 00:54:16.920
+so I'm going to read you the 2 questions that
+
+00:54:16.920 --> 00:54:18.260
+have been added. Is that okay?
+
+00:54:19.200 --> 00:54:20.580
+[Speaker 0]: Great, go for it.
+
+00:54:21.240 --> 00:54:23.140
+[Speaker 1]: Cool, so first question.
+
+00:54:23.320 --> 00:54:25.240
+Wow, what you're describing now,
+
+00:54:25.240 --> 00:54:27.520
+and that's when you were talking about the
+
+00:54:27.520 --> 00:54:31.840
+bi-directional links and especially the last
+
+00:54:31.840 --> 00:54:33.080
+question in its entirety,
+
+00:54:33.540 --> 00:54:35.440
+What you're describing now reminds me a lot
+
+00:54:35.440 --> 00:54:37.440
+about HyperCard that I grew up on.
+
+00:54:37.440 --> 00:54:39.220
+Do you know if Hyperbole inspired Bill
+
+00:54:39.220 --> 00:54:41.040
+Atkinson or if you were inspired by
+
+00:54:41.040 --> 00:54:43.040
+HyperCard? Or were there just a lot of
+
+00:54:43.040 --> 00:54:44.860
+thoughts about hyper-contextuality around
+
+00:54:44.860 --> 00:54:45.520
+that time?
+
+00:54:46.780 --> 00:54:50.100
+[Speaker 0]: Alright, well this is another interesting
+
+00:54:50.320 --> 00:54:52.360
+anecdote. I don't know if it's true or not,
+
+00:54:52.360 --> 00:54:57.880
+but I think HyperCard predated our stuff.
+
+00:54:57.880 --> 00:55:00.480
+It was right around the same time when
+
+00:55:00.480 --> 00:55:02.420
+Hyperbole was starting out.
+
+00:55:02.540 --> 00:55:05.100
+But when I was doing the Pi research,
+
+00:55:06.040 --> 00:55:08.800
+I worked at, when I left school,
+
+00:55:08.800 --> 00:55:11.280
+I worked at Motorola, and we did a lot of
+
+00:55:11.280 --> 00:55:13.040
+work with Apple back then.
+
+00:55:13.180 --> 00:55:15.480
+And somebody came back and he said,
+
+00:55:15.480 --> 00:55:18.000
+you know, the people over there have seen
+
+00:55:19.120 --> 00:55:21.940
+your Pi research and they really liked it a
+
+00:55:21.940 --> 00:55:26.020
+lot. And so they were leveraging that when
+
+00:55:26.020 --> 00:55:28.440
+they decided to create the division that they
+
+00:55:28.440 --> 00:55:33.280
+called Apple Pi, which was the originator of
+
+00:55:33.280 --> 00:55:36.500
+the Newton which eventually led to the
+
+00:55:36.500 --> 00:55:40.960
+iPhone. So it all kind of is interconnected
+
+00:55:41.360 --> 00:55:44.380
+just like the impact that free software has
+
+00:55:44.380 --> 00:55:47.240
+had around the world. So you never know where
+
+00:55:47.240 --> 00:55:49.840
+your stuff is gonna go or end up.
+
+00:55:51.180 --> 00:55:53.400
+[Speaker 1]: Right. All right, moving on to the next
+
+00:55:53.400 --> 00:55:55.840
+question. Is it possible to only use 1
+
+00:55:55.840 --> 00:55:57.740
+feature of hyperbole without the others,
+
+00:55:57.740 --> 00:56:00.580
+i.e. Using only the implicit explicit buttons
+
+00:56:00.580 --> 00:56:03.580
+without I control I roller or without having
+
+00:56:03.580 --> 00:56:05.920
+to rewrite part of the code in hyperbole in
+
+00:56:05.920 --> 00:56:08.040
+order to be able to load a smaller hyperbole.
+
+00:56:08.200 --> 00:56:09.140
+Does it make sense?
+
+00:56:10.260 --> 00:56:12.640
+[Speaker 0]: Yes we get asked this all the time.
+
+00:56:12.900 --> 00:56:16.560
+So you can use any little bit that you want
+
+00:56:16.560 --> 00:56:19.620
+anywhere right you can even just call code
+
+00:56:19.940 --> 00:56:23.660
+from Hyperbole. I mean you don't use
+
+00:56:23.680 --> 00:56:25.080
+everything in Emacs, right?
+
+00:56:25.080 --> 00:56:27.740
+But you still install Emacs on your machine.
+
+00:56:28.180 --> 00:56:30.080
+It's exactly the same thing.
+
+00:56:30.860 --> 00:56:33.280
+Those libraries don't take up any memory,
+
+00:56:33.280 --> 00:56:36.380
+they take up a little disk space and it's so
+
+00:56:36.380 --> 00:56:38.520
+trivial compared to the amount of disk we
+
+00:56:38.520 --> 00:56:41.780
+have today. So a lot of things are not loaded
+
+00:56:41.920 --> 00:56:43.760
+unless you activate them.
+
+00:56:45.040 --> 00:56:48.940
+And so I know that you do have to build all
+
+00:56:48.940 --> 00:56:51.360
+those things. So maybe that's what bothers
+
+00:56:51.360 --> 00:56:56.060
+people. It takes 2 minutes if you're using,
+
+00:56:56.320 --> 00:56:58.400
+it depends how fast your computer is.
+
+00:56:58.400 --> 00:57:01.160
+But you build it once on install like every
+
+00:57:01.160 --> 00:57:04.600
+other package. And it used to be that there
+
+00:57:04.600 --> 00:57:06.620
+would be a lot of warnings just because of
+
+00:57:06.620 --> 00:57:09.020
+the way we wrote the code and we didn't
+
+00:57:09.020 --> 00:57:11.120
+really have to deal with some of those
+
+00:57:11.120 --> 00:57:13.080
+warnings. But with this new release,
+
+00:57:13.080 --> 00:57:15.120
+we've gotten rid of almost all of them,
+
+00:57:15.200 --> 00:57:19.800
+including the native compiler messages.
+
+00:57:20.020 --> 00:57:22.620
+So it should be a very clean install now,
+
+00:57:22.900 --> 00:57:26.620
+and just use 1 part at a time.
+
+00:57:26.880 --> 00:57:29.820
+But the other parts are there in case you
+
+00:57:29.820 --> 00:57:32.080
+make a link to something and you use a
+
+00:57:32.080 --> 00:57:34.600
+facility just like I was showing as I went
+
+00:57:34.600 --> 00:57:36.360
+across subsystems today.
+
+00:57:36.600 --> 00:57:38.000
+It may take you a year,
+
+00:57:38.000 --> 00:57:40.120
+but then all of a sudden you find the use
+
+00:57:40.120 --> 00:57:42.340
+case for Hyrule and you say,
+
+00:57:42.340 --> 00:57:44.040
+oh, I'm glad I have it there.
+
+00:57:44.440 --> 00:57:47.540
+And yes, some of these things could be split
+
+00:57:47.540 --> 00:57:49.540
+into sub packages like you do in the org
+
+00:57:49.540 --> 00:57:52.500
+ecosystem. But given our limited resources on
+
+00:57:52.500 --> 00:57:56.400
+the team, we find having them all in 1 gives
+
+00:57:56.400 --> 00:57:59.040
+us a higher level of quality and lets us
+
+00:57:59.040 --> 00:58:02.840
+deliver a better integrated system for your
+
+00:58:02.840 --> 00:58:03.340
+use.
+
+00:58:04.740 --> 00:58:06.300
+[Speaker 1]: Yeah, exactly. And I think,
+
+00:58:06.300 --> 00:58:09.120
+you know, it's, it's not a monolith.
+
+00:58:10.080 --> 00:58:12.540
+I mean, it's usually easier,
+
+00:58:12.540 --> 00:58:14.620
+easy, more easy, more easy.
+
+00:58:14.620 --> 00:58:16.500
+Sorry, I was right on the first try.
+
+00:58:16.560 --> 00:58:20.580
+It's usually easier to maintain a monolith
+
+00:58:20.860 --> 00:58:23.140
+that contains many bits of functionality like
+
+00:58:23.140 --> 00:58:25.280
+org. You have plenty of people using org
+
+00:58:25.280 --> 00:58:27.180
+mode, not using org-agenda,
+
+00:58:27.340 --> 00:58:29.142
+for instance, or you've got plenty of people
+
+00:58:29.142 --> 00:58:31.560
+using org-mode and barely using Babel because
+
+00:58:31.560 --> 00:58:34.740
+it doesn't really translate to their use.
+
+00:58:35.460 --> 00:58:37.720
+And I feel like I very much agree with you.
+
+00:58:37.720 --> 00:58:39.520
+It's okay to install a package and only use
+
+00:58:39.520 --> 00:58:40.420
+some of the functions.
+
+00:58:40.600 --> 00:58:43.580
+I was reminded, as you were discussing this,
+
+00:58:43.580 --> 00:58:45.140
+of the consults package,
+
+00:58:45.380 --> 00:58:46.920
+which is part of the VertiCo,
+
+00:58:48.220 --> 00:58:51.060
+mbark and marginalia and all this.
+
+00:58:51.340 --> 00:58:54.960
+Consult, it replaces a lot of the Emacs
+
+00:58:54.960 --> 00:58:56.980
+built-in commands like for finding your
+
+00:58:56.980 --> 00:58:59.900
+buffers or finding text inside of your
+
+00:58:59.900 --> 00:59:03.960
+buffer. It's great. And you do not need to
+
+00:59:04.120 --> 00:59:06.300
+completely move to consult as you get
+
+00:59:06.300 --> 00:59:09.080
+started. You can start colonizing 1 step at a
+
+00:59:09.080 --> 00:59:11.540
+time the function that you usually use.
+
+00:59:12.620 --> 00:59:15.580
+And I highly recommend to people to not let
+
+00:59:15.580 --> 00:59:18.560
+the size of a project deter them from trying
+
+00:59:18.560 --> 00:59:20.580
+it out because, again,
+
+00:59:20.980 --> 00:59:22.800
+in Emacs, everything is horizontal.
+
+00:59:23.100 --> 00:59:28.180
+If somehow you want to use something that was
+
+00:59:28.180 --> 00:59:29.640
+not intended primarily for this,
+
+00:59:29.640 --> 00:59:32.220
+or if you only want to use 10% of a package,
+
+00:59:32.300 --> 00:59:35.500
+well, do it. An example that I have for me is
+
+00:59:35.500 --> 00:59:39.840
+that Lispy is the minor mode that I use for
+
+00:59:39.840 --> 00:59:42.380
+editing Elisp documents,
+
+00:59:42.740 --> 00:59:45.380
+and it's great. Elisp provides similar
+
+00:59:45.380 --> 00:59:46.260
+functions to ParaEdit,
+
+00:59:46.260 --> 00:59:47.720
+which might be a little more popular,
+
+00:59:47.780 --> 00:59:50.320
+which allows you to have modal editing when
+
+00:59:50.320 --> 00:59:52.840
+you are on specific parts of a file,
+
+00:59:52.840 --> 00:59:55.080
+like the opening parenthesis or the closing
+
+00:59:55.080 --> 00:59:56.480
+parenthesis. It's great,
+
+00:59:56.480 --> 00:59:58.320
+it provides modal editing for those modes,
+
+00:59:58.320 --> 01:00:01.340
+but I certainly do not know everything,
+
+01:00:02.220 --> 01:00:04.240
+every modal command associated to it.
+
+01:00:04.240 --> 01:00:06.180
+I just use the 1 that makes the most sense to
+
+01:00:06.180 --> 01:00:08.200
+me. So feel free to explore.
+
+01:00:11.040 --> 01:00:13.680
+[Speaker 0]: I'll just say we get this so much.
+
+01:00:13.740 --> 01:00:16.520
+It's not that large. I mean there's a fair
+
+01:00:16.520 --> 01:00:19.680
+number of files but it's just like 1 major
+
+01:00:19.680 --> 01:00:22.340
+directory and then the KOutliner directory.
+
+01:00:24.080 --> 01:00:25.560
+And when you look at these things,
+
+01:00:25.560 --> 01:00:27.140
+you install web applications,
+
+01:00:27.440 --> 01:00:30.420
+everything else, just when you download the
+
+01:00:30.420 --> 01:00:31.820
+source code, it's much,
+
+01:00:31.820 --> 01:00:34.040
+much smaller than any of that.
+
+01:00:34.140 --> 01:00:37.360
+So I don't know why people you know accept
+
+01:00:37.360 --> 01:00:39.660
+that it's larger than your typical package.
+
+01:00:39.960 --> 01:00:41.900
+Why there's really an issue there.
+
+01:00:43.080 --> 01:00:45.080
+[Speaker 1]: I think it's because people tend to assume
+
+01:00:46.240 --> 01:00:48.480
+that a paradigm like the 1 you're describing,
+
+01:00:48.480 --> 01:00:51.560
+which seems to be changing the way you use
+
+01:00:51.560 --> 01:00:53.480
+Emacs in a way because you're no longer
+
+01:00:53.480 --> 01:00:56.000
+thinking of as buffers as separate entities,
+
+01:00:56.000 --> 01:00:57.980
+you can tunnel between them.
+
+01:00:57.980 --> 01:01:00.180
+You know, it feels like a huge paradigm shift
+
+01:01:00.180 --> 01:01:02.300
+and you assume that the code behind it is
+
+01:01:02.300 --> 01:01:04.080
+going to be humongous as well,
+
+01:01:04.080 --> 01:01:05.380
+but it's usually not the case.
+
+01:01:05.380 --> 01:01:07.640
+It's just that the idea is very pure at the
+
+01:01:07.640 --> 01:01:10.060
+start, and the paradigm shift that it allows
+
+01:01:10.320 --> 01:01:14.120
+is also magnificent. But at the end of the
+
+01:01:14.120 --> 01:01:16.200
+day, the code is fairly simple,
+
+01:01:16.320 --> 01:01:18.360
+because it does 1 thing and it does it well.
+
+01:01:19.780 --> 01:01:21.180
+[Speaker 0]: 1 thing I noticed too,
+
+01:01:21.180 --> 01:01:23.760
+I mean I'm a big believer in turnkey kind of
+
+01:01:23.760 --> 01:01:27.180
+systems. In fact a long time ago when I built
+
+01:01:27.180 --> 01:01:31.160
+an IDE on Emacs called InfoDoc that was
+
+01:01:31.160 --> 01:01:32.480
+delivered pre-compiled.
+
+01:01:33.760 --> 01:01:35.980
+So it's like you download it like every other
+
+01:01:35.980 --> 01:01:39.480
+app and you run it. And so I think
+
+01:01:39.480 --> 01:01:42.480
+eliminating all the friction that occurs,
+
+01:01:42.740 --> 01:01:46.360
+and you know, I just got going recently with
+
+01:01:46.380 --> 01:01:49.160
+the wonderful packages that you just
+
+01:01:49.160 --> 01:01:51.460
+mentioned, VertiCo and Consult,
+
+01:01:51.460 --> 01:01:55.360
+but they don't have a manual that covers all
+
+01:01:55.360 --> 01:01:57.780
+that. They use sort of like a cookbook,
+
+01:01:58.260 --> 01:02:02.220
+a wiki online to answer a lot of the
+
+01:02:02.220 --> 01:02:04.600
+questions that people have and everybody has
+
+01:02:04.600 --> 01:02:07.640
+to figure out their configurations you know
+
+01:02:07.640 --> 01:02:11.380
+to make these things all work together.
+
+01:02:12.800 --> 01:02:16.460
+We'd like to do that engineering and say here
+
+01:02:16.460 --> 01:02:18.560
+it is you know it's like if you want to
+
+01:02:18.560 --> 01:02:20.320
+configure it and make it your own,
+
+01:02:20.320 --> 01:02:23.500
+you can do it. But there is a default
+
+01:02:23.760 --> 01:02:26.880
+configuration that handles all the typical
+
+01:02:26.880 --> 01:02:29.940
+use cases and you can just load it up and run
+
+01:02:30.060 --> 01:02:31.660
+because it's made to use,
+
+01:02:32.840 --> 01:02:36.500
+you don't have to hack it to make it useful
+
+01:02:36.500 --> 01:02:37.260
+for you.
+
+01:02:37.900 --> 01:02:40.560
+[Speaker 1]: Yeah, it reminds me of the discussion we had
+
+01:02:40.560 --> 01:02:42.740
+with Stéphane yesterday about sane defaults.
+
+01:02:43.320 --> 01:02:45.520
+And I think the question was,
+
+01:02:46.500 --> 01:02:49.080
+Emacs should probably ship with sane defaults
+
+01:02:49.080 --> 01:02:51.740
+for people. And Stéphane's answer was,
+
+01:02:51.740 --> 01:02:53.860
+well, my sane defaults might not be the same
+
+01:02:53.860 --> 01:02:55.220
+thing as your sane defaults.
+
+01:02:55.960 --> 01:02:57.560
+And that's why I think it's important,
+
+01:02:57.560 --> 01:02:59.340
+really, to have a core set of features,
+
+01:02:59.340 --> 01:03:01.300
+be it with hyperbole of org mode,
+
+01:03:01.360 --> 01:03:02.580
+that is well-documented,
+
+01:03:02.880 --> 01:03:05.460
+as you mentioned. But what I like about this
+
+01:03:05.460 --> 01:03:07.260
+in a way, and I think hyperbole is perhaps
+
+01:03:07.260 --> 01:03:09.340
+taking more benefits of this than Org Mode,
+
+01:03:09.340 --> 01:03:12.280
+is that the self-documentation aspect of it
+
+01:03:12.540 --> 01:03:14.540
+feels like it's easier with hyperbole because
+
+01:03:14.540 --> 01:03:17.320
+you're not bound by Org Mode buffers.
+
+01:03:17.320 --> 01:03:19.340
+You can link to just about everything.
+
+01:03:19.940 --> 01:03:24.240
+And for me, this ability to self-document is,
+
+01:03:24.240 --> 01:03:26.140
+well, first, very true to the philosophy of
+
+01:03:26.140 --> 01:03:27.480
+Emacs in the first place,
+
+01:03:27.500 --> 01:03:31.900
+but also opens up those resonance cycles
+
+01:03:32.020 --> 01:03:34.200
+where, oh, you get interested and then you
+
+01:03:34.200 --> 01:03:35.820
+start reading up and then the documentation
+
+01:03:35.820 --> 01:03:38.320
+is so good that it feeds into your practice
+
+01:03:38.320 --> 01:03:41.040
+and then it goes nuclear and you gain so much
+
+01:03:41.040 --> 01:03:42.540
+knowledge as a result of this.
+
+01:03:42.620 --> 01:03:44.480
+All right, Bob, we are about out of time.
+
+01:03:44.480 --> 01:03:46.280
+We only have about 1 minute until we go to
+
+01:03:46.280 --> 01:03:48.220
+the next talk. Do you have any passing words?
+
+01:03:50.180 --> 01:03:53.860
+[Speaker 0]: I do. I think, you know,
+
+01:03:54.280 --> 01:03:56.880
+the world's complex, it's getting more
+
+01:03:57.440 --> 01:04:00.520
+complex. I think that's why people use Emacs
+
+01:04:00.520 --> 01:04:02.560
+in the first place, because it's a big
+
+01:04:02.560 --> 01:04:04.920
+system. You wouldn't use it unless you wanted
+
+01:04:04.920 --> 01:04:06.600
+it to simplify your life.
+
+01:04:07.580 --> 01:04:10.760
+Hyperbole is built with the same idea in
+
+01:04:10.760 --> 01:04:13.640
+mind. You may not get it just like Lisp.
+
+01:04:13.740 --> 01:04:15.720
+A lot of people don't understand when they
+
+01:04:15.720 --> 01:04:17.420
+first encounter it, but when they do
+
+01:04:17.420 --> 01:04:19.580
+understand it, they're blown away.
+
+01:04:19.960 --> 01:04:21.360
+It changes their life.
+
+01:04:22.040 --> 01:04:25.020
+You know, when you really understand implicit
+
+01:04:25.120 --> 01:04:28.100
+buttons, I think that's 1 of the things in
+
+01:04:28.100 --> 01:04:30.860
+hyperbole that can change your Emacs working
+
+01:04:30.860 --> 01:04:34.080
+life. So just give that a try and I think
+
+01:04:34.080 --> 01:04:36.660
+you'll be pleasantly surprised across time.
+
+01:04:39.220 --> 01:04:40.920
+[Speaker 1]: you so much Bob. We'll be moving on to the
+
+01:04:40.920 --> 01:04:42.980
+next talk in about 20 seconds so everyone see
+
+01:04:42.980 --> 01:04:44.940
+you in a bit and Bob thank you so much again.
+
+01:04:37.040 --> 01:04:46.100
+[Speaker 0]: Thanks very much. And thank Thank you.
+
+01:04:51.140 --> 01:04:53.040
+[Speaker 1]: All right I think we are off here now.
+
+01:04:53.040 --> 01:04:53.940
+So thank you so much, Bob.
+
+01:04:53.940 --> 01:04:55.440
+I'm going to need to step out and get ready
+
+01:04:56.609 --> 01:04:59.240
+[Speaker 0]: Yeah, do your thing. You do a great job at
+
+01:04:59.240 --> 01:05:01.760
+it. But I wanted to ask you where in London
+
+01:04:55.440 --> 01:05:04.780
+[Speaker 1]: for the next talk. I'm not in London,
+
+01:05:05.280 --> 01:05:07.940
+I'm in France, and I just moved to London.
+
+01:05:01.760 --> 01:05:10.740
+[Speaker 0]: you are. Oh, okay, got it.
+
+01:05:11.200 --> 01:05:12.680
+Sorry, I thought you were.
+
+01:05:13.000 --> 01:05:13.720
+Take care.
+
+01:05:14.340 --> 01:05:15.060
+[Speaker 1]: All right, bye-bye, Bob.
+
+01:05:15.060 --> 01:05:15.750
+Thanks a lot. Bye-bye.
+
+01:05:15.750 --> 01:05:16.250
+Bye-bye.
diff --git a/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt
new file mode 100644
index 00000000..adc0d11e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt
@@ -0,0 +1,4625 @@
+WEBVTT
+
+
+00:00:09.400 --> 00:00:09.519
+[Speaker 0]: 5 seconds. I keep forgetting we have an
+
+00:00:11.120 --> 00:00:11.620
+introduction now. The introduction is flying.
+
+00:00:20.560 --> 00:00:20.900
+[Speaker 1]: You're going to give a 30 second,
+
+00:00:23.820 --> 00:00:24.320
+[Speaker 0]: Well, it's about 5 seconds now.
+
+00:00:27.900 --> 00:00:28.400
+[Speaker 1]: right? Just say go when you want me to go.
+
+00:00:30.780 --> 00:00:31.280
+[Speaker 0]: Sure. You'll hear me anyway.
+
+00:00:31.800 --> 00:00:32.299
+[Speaker 1]: Okay.
+
+00:00:34.900 --> 00:00:35.220
+[Speaker 0]: All right, I think we are live now.
+
+00:00:35.800 --> 00:00:36.100
+So hi again, everyone.
+
+00:00:37.680 --> 00:00:37.900
+I promised you we would be back in about 30
+
+00:00:39.440 --> 00:00:39.940
+seconds. I lied, it was actually 1 minute,
+
+00:00:41.320 --> 00:00:41.760
+but we are here with Bob.
+
+00:00:42.340 --> 00:00:42.840
+Hi, Bob, how are you doing?
+
+00:00:46.780 --> 00:00:46.940
+[Speaker 1]: Hi, doing great. Glad to
+
+00:00:50.220 --> 00:00:50.600
+[Speaker 0]: be with you. Yeah, glad to be here,
+
+00:00:52.340 --> 00:00:52.580
+and so are we. We're glad to have you again
+
+00:00:54.280 --> 00:00:54.400
+this year. So what we're going to do,
+
+00:00:55.920 --> 00:00:56.140
+we're not going to waste any time right now
+
+00:00:57.739 --> 00:00:57.880
+with chit-chats. What we're going to do,
+
+00:00:58.940 --> 00:00:59.059
+we're going to move straight into your
+
+00:01:00.860 --> 00:01:01.120
+presentation, Bob, so that you have as much
+
+00:01:04.080 --> 00:01:04.239
+time as you can. I'm going to recede into the
+
+00:01:07.280 --> 00:01:07.440
+background. I am going to full screen your
+
+00:01:08.479 --> 00:01:08.979
+presentation on a stream.
+
+00:01:11.180 --> 00:01:11.680
+And Bob, the floor is all yours.
+
+00:01:14.220 --> 00:01:14.720
+[Speaker 1]: Thank you very much, Leo.
+
+00:01:18.000 --> 00:01:18.400
+Glad to be here. I hope everybody has an idea
+
+00:01:22.280 --> 00:01:22.780
+of what Hyperbole is, but it's a broad
+
+00:01:25.380 --> 00:01:25.880
+information management system inside Emacs
+
+00:01:28.040 --> 00:01:28.540
+that works in all major modes.
+
+00:01:31.560 --> 00:01:31.760
+It's a global minor mode that you can turn on
+
+00:01:34.540 --> 00:01:34.760
+and off very rapidly so that you can just get
+
+00:01:35.660 --> 00:01:36.160
+in and out of hyperbole.
+
+00:01:40.440 --> 00:01:40.940
+And it works mostly from a mini buffer menu
+
+00:01:43.940 --> 00:01:44.040
+that if we just hit ctrl H H we see at the
+
+00:01:47.220 --> 00:01:47.420
+bottom of the screen here and as you see in
+
+00:01:48.480 --> 00:01:48.980
+some of this text right here,
+
+00:01:55.280 --> 00:01:55.680
+Dee will show you a demo with all these video
+
+00:01:57.180 --> 00:01:57.680
+links of Hyperbole now.
+
+00:02:01.560 --> 00:02:01.780
+But let's just get into the top 10 reasons to
+
+00:02:08.340 --> 00:02:08.840
+use Hyperbole. Number 10 is a key series
+
+00:02:12.100 --> 00:02:12.600
+curly braces. So you just put curly braces
+
+00:02:17.120 --> 00:02:17.620
+around any set of key sequences that you want
+
+00:02:22.200 --> 00:02:22.440
+and hyperbole magically turns that into what
+
+00:02:25.440 --> 00:02:25.640
+we call an implicit button a hyper button and
+
+00:02:28.340 --> 00:02:28.580
+any kind of text that you have so if we go
+
+00:02:35.260 --> 00:02:35.760
+down here and we just click click here we see
+
+00:02:39.720 --> 00:02:40.220
+it that was a complex button that said let's
+
+00:02:42.700 --> 00:02:43.200
+start a shell, let's set an environment
+
+00:02:44.960 --> 00:02:45.140
+variable as you see the command right up
+
+00:02:47.220 --> 00:02:47.420
+there, and then let's do a grep over the
+
+00:02:50.500 --> 00:02:50.680
+hyperbole code and find all instances of a
+
+00:02:54.860 --> 00:02:55.360
+particular label. So if we hit made a return,
+
+00:02:56.760 --> 00:02:57.260
+that's called the action key.
+
+00:02:59.120 --> 00:02:59.340
+That's what you use throughout hyperbole when
+
+00:03:01.400 --> 00:03:01.900
+you just want to activate any kind of button.
+
+00:03:06.200 --> 00:03:06.380
+So you see it jumped to the grep output and
+
+00:03:08.260 --> 00:03:08.440
+this is in a shell buffer it's not in a
+
+00:03:10.900 --> 00:03:11.180
+compilation buffer so anywhere that you have
+
+00:03:13.260 --> 00:03:13.760
+this sort of thing it's also an implicit
+
+00:03:16.560 --> 00:03:17.040
+button and any sort of grep output or
+
+00:03:20.280 --> 00:03:20.780
+compiler output you can just jump to with the
+
+00:03:23.080 --> 00:03:23.580
+same key, made a return.
+
+00:03:28.740 --> 00:03:29.240
+So that's key series, the first part.
+
+00:03:33.520 --> 00:03:33.880
+And then just to note that you can also just
+
+00:03:38.760 --> 00:03:39.000
+do a, well I'll just do it here and show you
+
+00:03:43.040 --> 00:03:43.380
+that you can do a recursive grep with this
+
+00:03:45.340 --> 00:03:45.840
+hyperbole command, HYPBR grep.
+
+00:03:48.500 --> 00:03:49.000
+And if you're in an Emacs list buffer,
+
+00:03:54.240 --> 00:03:54.740
+it will only grep across the Emacs list.
+
+00:03:58.100 --> 00:03:58.340
+So a very handy way to just go through your
+
+00:04:00.600 --> 00:04:01.040
+code very rapidly and then jump to various
+
+00:04:03.960 --> 00:04:04.280
+points in it. So we have a lot to cover
+
+00:04:05.600 --> 00:04:05.800
+today, so I'm going to go through this
+
+00:04:07.060 --> 00:04:07.560
+rapidly. This isn't a tutorial,
+
+00:04:10.200 --> 00:04:10.340
+it's just to get you interested in some of
+
+00:04:12.900 --> 00:04:13.060
+the features, and then there's a ton of
+
+00:04:15.420 --> 00:04:15.920
+reference material and videos now available
+
+00:04:18.360 --> 00:04:18.860
+for Hyperlink. So let's go to number 9.
+
+00:04:21.860 --> 00:04:22.360
+Path names become implicit buttons.
+
+00:04:23.700 --> 00:04:24.060
+You don't even have to quote them.
+
+00:04:26.460 --> 00:04:26.920
+You can add environment variables or elist
+
+00:04:28.700 --> 00:04:29.200
+variables with the syntax right here.
+
+00:04:31.820 --> 00:04:32.180
+So here we have a shell script that's
+
+00:04:33.000 --> 00:04:33.500
+somewhere on our path.
+
+00:04:35.940 --> 00:04:36.380
+And notice path is an environment variable
+
+00:04:39.000 --> 00:04:39.140
+with many different paths within it,
+
+00:04:42.100 --> 00:04:42.600
+right? But Hyperbole knows that and it
+
+00:04:44.480 --> 00:04:44.980
+searches the path, gets the first match,
+
+00:04:48.120 --> 00:04:48.620
+finds it, and finds the actual shell script.
+
+00:04:49.920 --> 00:04:50.420
+So you can just embed that anywhere.
+
+00:04:51.660 --> 00:04:52.160
+Here we have a list variable,
+
+00:04:54.120 --> 00:04:54.360
+hyperbdur, which is the home directory for
+
+00:04:57.620 --> 00:04:58.120
+hyperbole, and then a markdown file,
+
+00:05:01.180 --> 00:05:01.680
+and a link to a direct section in the file,
+
+00:05:04.880 --> 00:05:05.220
+and the 5 colon 5 means go to line 5 within
+
+00:05:06.760 --> 00:05:07.260
+that section and column 5.
+
+00:05:08.900 --> 00:05:09.400
+So let's just try it. Boom,
+
+00:05:11.240 --> 00:05:11.500
+we're right there, and we're on another link
+
+00:05:12.720 --> 00:05:13.220
+that we could activate as well.
+
+00:05:17.620 --> 00:05:17.960
+So notice the next line is the same link but
+
+00:05:20.120 --> 00:05:20.280
+this is how you normally have to do it in a
+
+00:05:22.680 --> 00:05:23.160
+markdown file. You have to change the section
+
+00:05:25.480 --> 00:05:25.640
+header to have dashes but with hyperbole you
+
+00:05:27.620 --> 00:05:28.120
+don't have to. You can just put it exactly
+
+00:05:29.340 --> 00:05:29.840
+like you see it in your file.
+
+00:05:34.440 --> 00:05:34.660
+Here the pound syntax for sections is really
+
+00:05:36.140 --> 00:05:36.640
+a generic syntax in the hyperbole.
+
+00:05:39.660 --> 00:05:39.840
+And so it works in all different kinds of
+
+00:05:41.000 --> 00:05:41.500
+files, your programming files.
+
+00:05:45.040 --> 00:05:45.240
+Here's a shell script and we said let's just
+
+00:05:48.680 --> 00:05:49.120
+go to the first comment that has alias in it.
+
+00:05:51.300 --> 00:05:51.700
+Notice we didn't have to say the whole line,
+
+00:05:52.700 --> 00:05:53.160
+just the first part of it.
+
+00:05:57.880 --> 00:05:58.140
+And it matched to it. Here we have a link to
+
+00:06:01.560 --> 00:06:01.680
+our hyperbole structured outliner called the
+
+00:06:04.160 --> 00:06:04.660
+K Outliner. And you can see it auto-numbers
+
+00:06:07.560 --> 00:06:08.000
+all these cells. But in addition to just
+
+00:06:10.280 --> 00:06:10.640
+displaying, you can also add a pipe symbol
+
+00:06:14.440 --> 00:06:14.900
+near the end and use this view syntax to clip
+
+00:06:17.160 --> 00:06:17.500
+to 2 lines and show blank lines.
+
+00:06:19.760 --> 00:06:19.920
+So let's see if each node gets clipped to 2
+
+00:06:22.480 --> 00:06:22.680
+lines. So you see they're all just 2 now with
+
+00:06:24.780 --> 00:06:25.280
+the ellipses and then we can expand them.
+
+00:06:28.260 --> 00:06:28.760
+So a lot of power there just with path names.
+
+00:06:30.780 --> 00:06:31.120
+Let's continue to number 8.
+
+00:06:32.440 --> 00:06:32.940
+[Speaker 0]: Can I just interrupt you just a bit?
+
+00:06:33.420 --> 00:06:33.920
+[Speaker 1]: Yes.
+
+00:06:37.540 --> 00:06:37.720
+[Speaker 0]: I think your phone, so we have your phone set
+
+00:06:39.960 --> 00:06:40.460
+up in case your internet misbehaves and we've
+
+00:06:41.580 --> 00:06:42.080
+set this up before we started,
+
+00:06:44.060 --> 00:06:44.380
+but I think the vibration is a little loud
+
+00:06:46.060 --> 00:06:46.160
+whenever it does. Can you maybe move it a
+
+00:06:50.020 --> 00:06:50.380
+little bit? I think so.
+
+00:06:51.380 --> 00:06:51.880
+It will have to vibrate again.
+
+00:06:53.720 --> 00:06:54.220
+[Speaker 1]: Is that okay? No, my phone...
+
+00:06:56.380 --> 00:06:56.880
+Okay. It shouldn't have been vibrating.
+
+00:07:00.760 --> 00:07:01.260
+[Speaker 0]: It might have been another device,
+
+00:07:02.360 --> 00:07:02.800
+but definitely we had vibration.
+
+00:07:04.000 --> 00:07:04.500
+Anyway, carry on. Sorry for the interruption.
+
+00:07:06.420 --> 00:07:06.920
+[Speaker 1]: It could be me. So number 8,
+
+00:07:10.320 --> 00:07:10.520
+special prefixes. There are 3 prefixes you
+
+00:07:11.440 --> 00:07:11.820
+can attach to path names.
+
+00:07:13.180 --> 00:07:13.680
+The first, if you want to load,
+
+00:07:15.540 --> 00:07:16.040
+instead of just finding a file,
+
+00:07:18.960 --> 00:07:19.460
+an ELIST file, you can actually load it.
+
+00:07:21.560 --> 00:07:22.060
+And so I can just hit made a return on this,
+
+00:07:23.800 --> 00:07:24.300
+and you see in the mini buffer,
+
+00:07:26.600 --> 00:07:27.100
+it loaded it as compiled e-list.
+
+00:07:28.840 --> 00:07:29.340
+I could put a .el on here,
+
+00:07:33.000 --> 00:07:33.500
+a .elc, .gz, all of that'll work,
+
+00:07:35.920 --> 00:07:36.420
+and just put a dash in front to load it.
+
+00:07:38.300 --> 00:07:38.720
+If you want to run a shell command,
+
+00:07:40.900 --> 00:07:41.040
+just put an exclamation mark in front of
+
+00:07:42.380 --> 00:07:42.540
+something and again you can have the
+
+00:07:44.340 --> 00:07:44.620
+environment variable. So here we're saying
+
+00:07:46.720 --> 00:07:47.220
+run the program date and you see,
+
+00:07:49.540 --> 00:07:50.040
+let's see, let's do it again.
+
+00:07:53.040 --> 00:07:53.240
+There we go. It ran date and you see the
+
+00:07:55.320 --> 00:07:55.680
+output right there. And what if you want to
+
+00:07:57.540 --> 00:07:58.040
+run a graphical program on your system?
+
+00:08:01.560 --> 00:08:01.760
+Well here, we want to open a PDF file and I'm
+
+00:08:04.840 --> 00:08:05.340
+just using XDG Open on Linux,
+
+00:08:09.320 --> 00:08:09.440
+you could use Open on Mac and you just put an
+
+00:08:12.340 --> 00:08:12.840
+ampersand in front and there's the Hyperbole
+
+00:08:15.340 --> 00:08:15.840
+manual instantly displayed.
+
+00:08:18.120 --> 00:08:18.620
+So lots of power there and all of that
+
+00:08:22.120 --> 00:08:22.360
+actually .pdf's and many other file types are
+
+00:08:24.860 --> 00:08:25.080
+automatically linked to various programs by
+
+00:08:27.080 --> 00:08:27.340
+Hyperbole. So you could just use the path
+
+00:08:29.200 --> 00:08:29.340
+name itself and it would probably behave the
+
+00:08:33.940 --> 00:08:34.440
+same way. Number 7, bookmarks on steroids.
+
+00:08:37.059 --> 00:08:37.419
+So Hyperbole gives you a personal button
+
+00:08:39.840 --> 00:08:40.340
+file, which is on the menu you see here under
+
+00:08:41.780 --> 00:08:42.280
+button files, and then personal.
+
+00:08:44.860 --> 00:08:45.360
+So here we'll just display it.
+
+00:08:47.480 --> 00:08:47.720
+And you can put whatever you want in here,
+
+00:08:49.360 --> 00:08:49.860
+these implicit buttons of any type.
+
+00:08:52.460 --> 00:08:52.660
+You can name them the way here and you can
+
+00:08:55.280 --> 00:08:55.560
+activate either the name with MetaReturn or
+
+00:08:56.760 --> 00:08:56.920
+the button itself. So,
+
+00:08:58.900 --> 00:08:59.400
+of course, if we did MetaReturn here,
+
+00:09:02.720 --> 00:09:03.220
+we'd just display that in a web browser.
+
+00:09:05.020 --> 00:09:05.520
+I'll just do a few of these.
+
+00:09:06.760 --> 00:09:07.200
+So here's a section of line.
+
+00:09:08.080 --> 00:09:08.580
+Let's just jump there.
+
+00:09:11.100 --> 00:09:11.400
+But these can be all sorts of different
+
+00:09:12.900 --> 00:09:13.140
+actions that are going on.
+
+00:09:15.840 --> 00:09:16.040
+And you just, whatever cross references you
+
+00:09:17.360 --> 00:09:17.840
+want, you put in here.
+
+00:09:19.900 --> 00:09:20.400
+And the neat thing is that this then becomes
+
+00:09:22.920 --> 00:09:23.420
+a list of what we call global buttons.
+
+00:09:26.040 --> 00:09:26.540
+So when I go into the menu and I go control
+
+00:09:30.140 --> 00:09:30.640
+HHGA to activate a global button,
+
+00:09:32.800 --> 00:09:33.220
+you can see that all the names from this file
+
+00:09:35.600 --> 00:09:36.100
+appear here. So only the name buttons appear,
+
+00:09:39.780 --> 00:09:40.240
+and I could like go to the hyperbole to-do
+
+00:09:41.760 --> 00:09:42.260
+list and things like that.
+
+00:09:45.480 --> 00:09:45.660
+So very, very quick access to all your
+
+00:09:47.080 --> 00:09:47.440
+information whenever you need it.
+
+00:09:49.440 --> 00:09:49.600
+And that could be an org file as well if you
+
+00:09:53.000 --> 00:09:53.500
+prefer that. So we just took care of that.
+
+00:09:56.880 --> 00:09:57.000
+Number 6, instant test case running and
+
+00:09:58.920 --> 00:09:59.420
+debugging. This is a fairly new feature.
+
+00:10:02.080 --> 00:10:02.240
+What we're seeing here is a pre-release of
+
+00:10:04.280 --> 00:10:04.440
+version 9, which should be out within the
+
+00:10:07.440 --> 00:10:07.560
+next week. But the instructions at the
+
+00:10:10.460 --> 00:10:10.680
+beginning of the presentation tell you how to
+
+00:10:13.220 --> 00:10:13.720
+get the development version of HyperBlade,
+
+00:10:15.060 --> 00:10:15.560
+which is right now 8.01
+
+00:10:18.540 --> 00:10:19.040
+pre, but that's virtually the same as what 9
+
+00:10:22.560 --> 00:10:23.060
+will be. So you can grab that as of today.
+
+00:10:27.040 --> 00:10:27.540
+So let's just jump to a test file.
+
+00:10:29.800 --> 00:10:30.300
+What you see here is called an explicit
+
+00:10:32.520 --> 00:10:33.020
+button. You can actually make buttons where
+
+00:10:35.600 --> 00:10:35.820
+similar to org, where you just see a bit of
+
+00:10:38.000 --> 00:10:38.500
+the button and all of the metadata is hidden.
+
+00:10:41.800 --> 00:10:42.040
+I can say control A J and I see all about
+
+00:10:43.740 --> 00:10:43.940
+that button, exactly what it's going to do
+
+00:10:46.980 --> 00:10:47.200
+before I activate it and even who created it
+
+00:10:50.580 --> 00:10:50.680
+or last modified it. Then just queue out of
+
+00:10:52.080 --> 00:10:52.580
+here and you're back where you were.
+
+00:10:56.320 --> 00:10:56.820
+So now, what this did is link us to an ERT
+
+00:10:59.440 --> 00:10:59.920
+test. If you write tests in Emacs,
+
+00:11:01.560 --> 00:11:02.060
+you probably use ERT tests.
+
+00:11:04.920 --> 00:11:05.220
+So if I hit made a return on here it'll just
+
+00:11:08.300 --> 00:11:08.520
+run the test tell me it passed great okay but
+
+00:11:11.320 --> 00:11:11.760
+maybe I had a problem so let me use control
+
+00:11:16.820 --> 00:11:17.080
+you made a return and that will e-debug the
+
+00:11:19.720 --> 00:11:20.080
+test instantly. So now I'll step through it
+
+00:11:21.700 --> 00:11:22.200
+and it says, well, let's,
+
+00:11:25.400 --> 00:11:25.580
+this single line actually creates that
+
+00:11:27.440 --> 00:11:27.800
+explicit button. You see we have an empty
+
+00:11:29.060 --> 00:11:29.480
+buffer here that we're in.
+
+00:11:31.640 --> 00:11:31.780
+Now I step through that and now there's the
+
+00:11:33.740 --> 00:11:34.160
+explicit button that got put in there.
+
+00:11:36.760 --> 00:11:36.940
+Now the next line I step through it and this
+
+00:11:38.720 --> 00:11:39.160
+is going to check if we have the right action
+
+00:11:42.040 --> 00:11:42.260
+type and it returns true so that's good and
+
+00:11:45.060 --> 00:11:45.220
+now we should be it should be associated with
+
+00:11:48.400 --> 00:11:48.680
+the temp buffer returns true good And that's
+
+00:11:50.860 --> 00:11:51.360
+why what you saw before is this passed.
+
+00:11:52.260 --> 00:11:52.760
+The whole thing passed.
+
+00:11:54.240 --> 00:11:54.740
+So lots of power there.
+
+00:11:57.380 --> 00:11:57.600
+Simple to use. You're just using your made a
+
+00:11:58.860 --> 00:11:59.360
+return and prefix arguments.
+
+00:12:02.980 --> 00:12:03.240
+It's something everybody who develops should
+
+00:12:07.280 --> 00:12:07.640
+have. So number, let's go on.
+
+00:12:09.440 --> 00:12:09.720
+I think we're making pretty good time here,
+
+00:12:10.740 --> 00:12:11.240
+but I turned off my timer.
+
+00:12:15.540 --> 00:12:15.800
+Let's go to number 5. This is a very new
+
+00:12:17.160 --> 00:12:17.660
+feature, which is very cool too.
+
+00:12:19.920 --> 00:12:20.420
+You used to have to use the mouse probably
+
+00:12:23.680 --> 00:12:23.880
+and you could drag across windows to go from
+
+00:12:26.580 --> 00:12:26.820
+a source to a referent buffer and that would
+
+00:12:27.880 --> 00:12:28.340
+create a hyperlink for you.
+
+00:12:30.600 --> 00:12:30.880
+But now we've installed it and made it even
+
+00:12:33.640 --> 00:12:34.140
+easier on, we've installed it on a,
+
+00:12:36.040 --> 00:12:36.540
+on the hyperbole menus.
+
+00:12:39.680 --> 00:12:40.180
+So let's just go back to our presentation
+
+00:12:43.340 --> 00:12:43.660
+here and say we want to link to this line
+
+00:12:45.980 --> 00:12:46.160
+that we're on there. And I'll just create the
+
+00:12:48.340 --> 00:12:48.480
+button in our scratch buffer here so it
+
+00:12:50.160 --> 00:12:50.660
+doesn't really mess anything up.
+
+00:12:53.800 --> 00:12:53.980
+So I just put my point in where I want the
+
+00:12:56.780 --> 00:12:56.920
+button to appear and then I put point where I
+
+00:12:59.700 --> 00:13:00.060
+want it to link to in the other the other
+
+00:13:02.600 --> 00:13:02.800
+buffer and then I just say control HH to get
+
+00:13:04.760 --> 00:13:05.260
+my menu, I for implicit button,
+
+00:13:07.440 --> 00:13:07.940
+and then L for link. Boom,
+
+00:13:09.480 --> 00:13:09.980
+it inserts it, right at point.
+
+00:13:12.720 --> 00:13:12.880
+What did it do? It knew that this was in the
+
+00:13:14.900 --> 00:13:15.080
+hyperbole directory and I have a variable for
+
+00:13:17.600 --> 00:13:17.780
+that, so that if you sent this link to your
+
+00:13:18.680 --> 00:13:19.180
+friend who uses Hyperbole,
+
+00:13:21.300 --> 00:13:21.440
+it would still work right because they have a
+
+00:13:22.360 --> 00:13:22.860
+different hyperbole there.
+
+00:13:26.880 --> 00:13:27.380
+And then I want to go directly to line 116.
+
+00:13:29.860 --> 00:13:30.360
+So boom, it just took me there.
+
+00:13:33.680 --> 00:13:33.900
+So that's it. And Hyperbole is doing all this
+
+00:13:36.220 --> 00:13:36.420
+for you. You just say I want a link to this
+
+00:13:38.760 --> 00:13:38.940
+thing and it figures out what's at point and
+
+00:13:41.920 --> 00:13:42.240
+it determines the right type of implicit link
+
+00:13:45.360 --> 00:13:45.520
+to put there. And that's the whole point is
+
+00:13:47.120 --> 00:13:47.320
+that you're just working like when you're
+
+00:13:50.280 --> 00:13:50.500
+programming or you're writing an article and
+
+00:13:53.360 --> 00:13:53.520
+you just hit made a return or or pull up a
+
+00:13:57.040 --> 00:13:57.200
+menu and hit a key binding and you're off to
+
+00:14:02.220 --> 00:14:02.400
+the races. So that was implicit linking We
+
+00:14:04.760 --> 00:14:05.260
+can also create those explicit link buttons,
+
+00:14:07.440 --> 00:14:07.760
+and as well as the global link,
+
+00:14:09.140 --> 00:14:09.580
+where we would just give it a name,
+
+00:14:11.380 --> 00:14:11.640
+and it would automatically put it in our
+
+00:14:14.200 --> 00:14:14.640
+global button file without us even having
+
+00:14:18.240 --> 00:14:18.380
+that on screen. So lots of power there as
+
+00:14:19.160 --> 00:14:19.660
+well, lots of consistency.
+
+00:14:24.860 --> 00:14:25.040
+Now let's take a look at the K Outliner a
+
+00:14:27.780 --> 00:14:28.040
+little more. I'm just going to show you 1
+
+00:14:29.620 --> 00:14:29.820
+feature actually. I don't have time to show
+
+00:14:31.080 --> 00:14:31.580
+you the K Outliner in detail,
+
+00:14:33.720 --> 00:14:34.220
+but it's a really cool structured outliner
+
+00:14:35.900 --> 00:14:36.400
+that even if you love Org Mode,
+
+00:14:39.060 --> 00:14:39.280
+you should try it. And this is 1 thing that
+
+00:14:40.560 --> 00:14:41.060
+you can't get with Org Mode,
+
+00:14:44.620 --> 00:14:45.100
+is let's say Hyperlink comes with an example
+
+00:14:48.080 --> 00:14:48.580
+file which teaches you about the K Outliner.
+
+00:14:50.440 --> 00:14:50.940
+So we'll just use that right here.
+
+00:14:52.540 --> 00:14:53.040
+And when you're in the K Outliner,
+
+00:14:55.320 --> 00:14:55.820
+you can bring up and go into the K Outliner
+
+00:14:57.040 --> 00:14:57.540
+menu right here at the bottom.
+
+00:14:59.920 --> 00:15:00.360
+And there's a format menu there.
+
+00:15:02.220 --> 00:15:02.600
+You always take the first letter of a menu,
+
+00:15:04.600 --> 00:15:05.100
+the first capital letter of a menu item.
+
+00:15:08.540 --> 00:15:08.720
+So F for format and then D for display in
+
+00:15:11.200 --> 00:15:11.700
+browser. So just let's do it.
+
+00:15:16.720 --> 00:15:17.220
+We have with 1 button or 1 key we've produced
+
+00:15:23.160 --> 00:15:23.660
+the entire outline in a collapsible outline
+
+00:15:25.760 --> 00:15:26.260
+in HTML. So I can go here.
+
+00:15:28.740 --> 00:15:29.240
+I just have to use my mouse.
+
+00:15:32.800 --> 00:15:33.300
+So I can expand and collapse these trees live
+
+00:15:39.020 --> 00:15:39.520
+with very basic coding.
+
+00:15:42.180 --> 00:15:42.680
+We tried to keep this as simple as possible.
+
+00:15:45.420 --> 00:15:45.580
+But you see it maintains the structure of the
+
+00:15:47.380 --> 00:15:47.880
+outline and even tables.
+
+00:15:57.320 --> 00:15:57.620
+So all the formatting is maintained and again
+
+00:15:59.960 --> 00:16:00.100
+it's instant. Or you can just export it to a
+
+00:16:01.420 --> 00:16:01.920
+file without displaying it.
+
+00:16:05.380 --> 00:16:05.880
+Very efficient kinds of operations.
+
+00:16:10.760 --> 00:16:10.960
+So that was number 4. Number 3 is a
+
+00:16:12.900 --> 00:16:13.400
+subsystem, another subsystem in Hyperbole
+
+00:16:15.920 --> 00:16:16.080
+called Hycontrol, which is for window and
+
+00:16:18.340 --> 00:16:18.600
+frame management. And I just wanted to show
+
+00:16:20.760 --> 00:16:20.920
+you 1 thing in there. It's got a lot of
+
+00:16:23.920 --> 00:16:24.420
+capabilities. But I always had the problem
+
+00:16:27.840 --> 00:16:28.340
+that Emacs wouldn't let me scale my fonts,
+
+00:16:30.280 --> 00:16:30.780
+all of my faces at the same time.
+
+00:16:33.220 --> 00:16:33.680
+I wanted to zoom. I didn't want to increase
+
+00:16:36.020 --> 00:16:36.260
+the default font size and all the others stay
+
+00:16:40.160 --> 00:16:40.660
+the same. So let's just display our faces
+
+00:16:45.040 --> 00:16:45.200
+right here and then we have a choice of
+
+00:16:47.360 --> 00:16:47.860
+either controlling frames or windows.
+
+00:16:49.740 --> 00:16:50.240
+So let's start by controlling frames.
+
+00:16:52.600 --> 00:16:52.760
+So you get another submenu when you're in
+
+00:16:55.520 --> 00:16:56.020
+high control to tell you what to do here.
+
+00:16:59.280 --> 00:16:59.480
+And there's just lowercase z and uppercase z.
+
+00:17:02.980 --> 00:17:03.400
+So let's try it. So it's scaling the entire
+
+00:17:05.520 --> 00:17:06.020
+frame. And you can see from the list of faces
+
+00:17:08.000 --> 00:17:08.500
+that they're all scaling at the same time.
+
+00:17:09.720 --> 00:17:10.220
+And I can go back down.
+
+00:17:13.280 --> 00:17:13.619
+Now if I switch to window mode,
+
+00:17:15.839 --> 00:17:16.099
+and there's a special fast way to do that,
+
+00:17:18.599 --> 00:17:18.819
+just hit T to toggle. And if you look at the
+
+00:17:21.619 --> 00:17:21.819
+bottom menu it says frames right now now it
+
+00:17:25.319 --> 00:17:25.599
+says windows when I hit T so now if I do the
+
+00:17:30.540 --> 00:17:30.640
+same Z to increase it's just this window and
+
+00:17:36.300 --> 00:17:36.800
+but it's you know it's the faces in there so
+
+00:17:40.400 --> 00:17:40.680
+a lot of power again but I just haven't found
+
+00:17:43.080 --> 00:17:43.220
+anywhere else that you can get that kind of
+
+00:17:45.320 --> 00:17:45.820
+control over your faces very rapidly.
+
+00:17:51.140 --> 00:17:51.640
+So that's number 3. Now number 2,
+
+00:17:56.280 --> 00:17:56.780
+let's put that in there.
+
+00:18:02.980 --> 00:18:03.320
+So the HiROLO is the final subsystem in
+
+00:18:05.740 --> 00:18:06.240
+Hyperbole and this has gotten much cooler.
+
+00:18:08.180 --> 00:18:08.680
+So it started off as a contact management
+
+00:18:11.040 --> 00:18:11.540
+system, but it's really just a hierarchical
+
+00:18:14.800 --> 00:18:15.060
+record management system that lets you have
+
+00:18:17.520 --> 00:18:18.020
+as many files, directories as you want,
+
+00:18:19.860 --> 00:18:20.280
+and you can search across all of them without
+
+00:18:22.740 --> 00:18:23.240
+any external utilities necessary,
+
+00:18:25.740 --> 00:18:26.240
+just what's built into Emacs and Hyperlink.
+
+00:18:29.640 --> 00:18:29.920
+So as you can see, we've expanded it to
+
+00:18:31.320 --> 00:18:31.820
+handle org files, markdown,
+
+00:18:34.120 --> 00:18:34.620
+K outlines, Emacs outlines.
+
+00:18:36.440 --> 00:18:36.820
+So what I'm going to do is just say,
+
+00:18:40.240 --> 00:18:40.680
+I want to search using my Hyberlo file list.
+
+00:18:42.920 --> 00:18:43.140
+You just set that to what you wanted to
+
+00:18:44.640 --> 00:18:44.820
+search. But now you have all this
+
+00:18:46.020 --> 00:18:46.520
+flexibility. You can use environment
+
+00:18:48.680 --> 00:18:48.840
+variables in it. You can just specify a
+
+00:18:50.860 --> 00:18:51.340
+directory and it will find all those matching
+
+00:18:53.100 --> 00:18:53.600
+files below that directory recursively.
+
+00:18:58.260 --> 00:18:58.460
+You can give it the markdown file here and
+
+00:19:00.840 --> 00:19:01.160
+you can use file wildcards as well.
+
+00:19:04.020 --> 00:19:04.360
+I mean, look at this. It's got a list
+
+00:19:05.640 --> 00:19:06.140
+variable in it and a wildcard,
+
+00:19:09.360 --> 00:19:09.840
+and it's just all I'm gonna do is I change
+
+00:19:13.260 --> 00:19:13.380
+this from a Lisp expression to make it a
+
+00:19:15.040 --> 00:19:15.380
+hyper button. You just change the outer
+
+00:19:16.420 --> 00:19:16.920
+parens to angle brackets,
+
+00:19:19.120 --> 00:19:19.620
+and then it's automatically an implicit
+
+00:19:22.680 --> 00:19:22.840
+button that you can activate with made a
+
+00:19:25.840 --> 00:19:26.340
+return so just ran that and now I've set my
+
+00:19:29.220 --> 00:19:29.480
+file list so now let's do a search it would
+
+00:19:34.080 --> 00:19:34.580
+be ctrl H H roll it X R and then S for search
+
+00:19:36.180 --> 00:19:36.680
+But I'll just do it this way.
+
+00:19:39.820 --> 00:19:40.320
+And boom, it found everything that fast.
+
+00:19:42.440 --> 00:19:42.940
+And I can just get like,
+
+00:19:45.140 --> 00:19:45.520
+show the top items in there.
+
+00:19:47.760 --> 00:19:48.260
+So I kind of have outlining in this buffer.
+
+00:19:51.440 --> 00:19:51.940
+I can just move to each match that I hit.
+
+00:19:53.480 --> 00:19:53.680
+And notice, although everything was
+
+00:19:55.080 --> 00:19:55.580
+collapsed, it's expanding here.
+
+00:19:58.100 --> 00:19:58.520
+When I move in and out of each of the entry
+
+00:20:02.220 --> 00:20:02.400
+matches, it expands or collapses as I move to
+
+00:20:05.740 --> 00:20:06.240
+the next 1. So a lot of power there.
+
+00:20:09.120 --> 00:20:09.620
+What else? Just tabbing through these things.
+
+00:20:11.840 --> 00:20:12.120
+And you notice that it's working across all
+
+00:20:12.840 --> 00:20:13.340
+of these different types.
+
+00:20:15.720 --> 00:20:16.220
+And it's telling you which file everything
+
+00:20:17.540 --> 00:20:17.840
+came from right up here.
+
+00:20:19.440 --> 00:20:19.940
+So I could just made a return here,
+
+00:20:23.000 --> 00:20:23.500
+should work. Yes, revisit the file normally.
+
+00:20:25.260 --> 00:20:25.760
+And it just pulls it right up.
+
+00:20:27.900 --> 00:20:28.400
+So everything is live and hyperbole.
+
+00:20:29.620 --> 00:20:30.120
+You've got hyperlinks everywhere.
+
+00:20:33.240 --> 00:20:33.740
+Let's just get rid of that.
+
+00:20:41.420 --> 00:20:41.600
+Go back to our demo. So if you are fans of
+
+00:20:46.200 --> 00:20:46.560
+Vertico and Consult, you can now use that
+
+00:20:49.120 --> 00:20:49.300
+with the High Rollo. So all you have to do is
+
+00:20:50.940 --> 00:20:51.440
+let's just format our windows,
+
+00:20:55.400 --> 00:20:55.720
+and then I'll say, let's use ConsultGrep over
+
+00:20:58.380 --> 00:20:58.880
+the Rolodex. Now, it found all the matches
+
+00:21:01.560 --> 00:21:02.060
+there, and I can just move live through them
+
+00:21:04.540 --> 00:21:04.640
+in the buffer like you may be used to or I
+
+00:21:08.100 --> 00:21:08.600
+can filter back down and say using orderless
+
+00:21:13.480 --> 00:21:13.700
+joystick or anything that has joy in it just
+
+00:21:16.940 --> 00:21:17.160
+match to those lines and then I can you know
+
+00:21:19.680 --> 00:21:20.020
+either jump there or quit out of here.
+
+00:21:21.580 --> 00:21:22.080
+I'll just quit out of it right now.
+
+00:21:24.880 --> 00:21:25.240
+So very cool. And all of that is using
+
+00:21:28.380 --> 00:21:28.640
+whatever you personally set as the set of
+
+00:21:30.060 --> 00:21:30.560
+files and directories you want to search.
+
+00:21:35.740 --> 00:21:35.940
+And finally, our number 1 feature of
+
+00:21:40.120 --> 00:21:40.400
+Hyperbole is you can customize this to give
+
+00:21:42.960 --> 00:21:43.460
+you these kinds of implicit buttons,
+
+00:21:45.580 --> 00:21:46.080
+whatever kind you want.
+
+00:21:48.640 --> 00:21:49.140
+And there are 3 levels of doing this.
+
+00:21:50.640 --> 00:21:51.140
+The first is for non-programmers.
+
+00:21:53.180 --> 00:21:53.680
+You can just set a string,
+
+00:21:56.540 --> 00:21:57.040
+like a URL with a parameter in it.
+
+00:21:58.940 --> 00:21:59.440
+So the %s represents the parameter,
+
+00:22:01.240 --> 00:22:01.440
+and This is how you do a search on
+
+00:22:03.560 --> 00:22:04.060
+DuckDuckGo. So all I have to do is evaluate
+
+00:22:06.660 --> 00:22:07.160
+this defal for action link.
+
+00:22:10.520 --> 00:22:11.020
+And now I have a new implicit button type
+
+00:22:12.900 --> 00:22:13.400
+that I can put between angle brackets.
+
+00:22:15.080 --> 00:22:15.580
+And I just give it that name,
+
+00:22:17.500 --> 00:22:18.000
+ddg, and some parameter,
+
+00:22:19.540 --> 00:22:20.040
+whatever I want to search for,
+
+00:22:22.540 --> 00:22:23.040
+and this is a button that does that search.
+
+00:22:28.320 --> 00:22:28.700
+Very cool, right? So you can embed these.
+
+00:22:30.540 --> 00:22:31.040
+This could be a hyperlink in,
+
+00:22:34.620 --> 00:22:35.120
+you know, a comment in a programming file.
+
+00:22:38.040 --> 00:22:38.160
+Anything on the entire web that you want to
+
+00:22:41.820 --> 00:22:42.320
+link to, whatever kind of compact notation
+
+00:22:44.600 --> 00:22:44.800
+you want to give it. So that's what we're
+
+00:22:46.680 --> 00:22:47.140
+going to learn as we get more advanced here
+
+00:22:48.900 --> 00:22:49.400
+you can give it even more compact notations.
+
+00:22:51.940 --> 00:22:52.420
+So as you get more advanced you can say,
+
+00:22:53.760 --> 00:22:54.240
+well I don't like this angle bracket,
+
+00:22:56.520 --> 00:22:57.020
+I want to have an implicit button that uses
+
+00:22:59.340 --> 00:22:59.620
+these square brackets and then an angle
+
+00:23:01.960 --> 00:23:02.080
+bracket inside it. So then you need the
+
+00:23:04.680 --> 00:23:05.180
+defile for implicit link.
+
+00:23:08.600 --> 00:23:08.860
+This lets you specify your start and end
+
+00:23:11.980 --> 00:23:12.180
+delimiters for your new type and and then you
+
+00:23:14.340 --> 00:23:14.840
+can give it a function that you wanted to run
+
+00:23:18.120 --> 00:23:18.320
+and that will take the text of whatever is in
+
+00:23:19.280 --> 00:23:19.780
+the button, in this case,
+
+00:23:23.560 --> 00:23:23.760
+test release here, and feed it to the
+
+00:23:25.580 --> 00:23:26.060
+function that I gave here.
+
+00:23:29.100 --> 00:23:29.540
+So what this function does is grep over my
+
+00:23:33.260 --> 00:23:33.420
+git log and find any commits that include the
+
+00:23:34.940 --> 00:23:35.360
+term test release in it.
+
+00:23:38.000 --> 00:23:38.200
+So let's try it. First I have to add the
+
+00:23:41.540 --> 00:23:41.740
+button type and that's all it takes and it
+
+00:23:44.620 --> 00:23:44.800
+defined it now. So anywhere in Emacs now I
+
+00:23:46.440 --> 00:23:46.940
+can use this button type essentially.
+
+00:23:48.480 --> 00:23:48.980
+So let me try to activate it.
+
+00:23:52.260 --> 00:23:52.760
+Okay and it says yeah let's save it.
+
+00:23:55.440 --> 00:23:55.940
+Okay so now it's running a git log command.
+
+00:23:59.240 --> 00:23:59.440
+It found all the commits and now of course if
+
+00:24:02.720 --> 00:24:02.980
+I had made a return on this commit it
+
+00:24:05.000 --> 00:24:05.500
+recognizes it as an implicit link,
+
+00:24:08.800 --> 00:24:09.300
+and if I search for what was a test release,
+
+00:24:11.760 --> 00:24:11.960
+there it is. So this commit had that in
+
+00:24:13.740 --> 00:24:14.180
+there. So all these matches,
+
+00:24:16.000 --> 00:24:16.280
+so I don't know how other people do this,
+
+00:24:19.540 --> 00:24:20.040
+but for me this makes it a lot simpler.
+
+00:24:24.600 --> 00:24:24.800
+So a lot of power that any programmer can
+
+00:24:27.100 --> 00:24:27.520
+use. And finally, if you've mastered Emacs
+
+00:24:28.860 --> 00:24:29.360
+Lisp, or you're starting to,
+
+00:24:33.480 --> 00:24:33.740
+you can look in the hib types file in
+
+00:24:36.820 --> 00:24:37.320
+Hyperbole and see all sorts of uses of defib,
+
+00:24:38.940 --> 00:24:39.440
+which is defined implicit button.
+
+00:24:42.500 --> 00:24:42.660
+And that's the full power of e-LISP when you
+
+00:24:44.680 --> 00:24:45.060
+want to define 1. So what we're going to do
+
+00:24:46.280 --> 00:24:46.780
+here is I wanted to know,
+
+00:24:49.160 --> 00:24:49.660
+given a date, what the day of the week is.
+
+00:24:52.660 --> 00:24:53.040
+And because the date primitives weren't quite
+
+00:24:54.140 --> 00:24:54.640
+written the way I might like,
+
+00:24:57.040 --> 00:24:57.500
+it's a little longer than some.
+
+00:24:59.860 --> 00:25:00.360
+But I'm just going to evaluate this list.
+
+00:25:05.600 --> 00:25:06.100
+And I've now defined DOW as an action type.
+
+00:25:08.220 --> 00:25:08.520
+Now, how do I know I'm doing that?
+
+00:25:10.200 --> 00:25:10.700
+So I can always say Control-H,
+
+00:25:13.440 --> 00:25:13.580
+capital A here to see what a button's going
+
+00:25:15.360 --> 00:25:15.860
+to do. And it tells me When I'm there,
+
+00:25:17.640 --> 00:25:18.140
+I'm at a hyperbole button,
+
+00:25:22.940 --> 00:25:23.440
+and the type is from category DOW.
+
+00:25:24.920 --> 00:25:25.120
+And what's it gonna do?
+
+00:25:26.920 --> 00:25:27.420
+It takes a mark, it's gonna do a message
+
+00:25:29.380 --> 00:25:29.880
+action. Okay, so let's try it.
+
+00:25:32.320 --> 00:25:32.780
+It tells me that's a date,
+
+00:25:33.840 --> 00:25:34.220
+and it falls on a Sunday,
+
+00:25:35.320 --> 00:25:35.820
+which is today. That's correct.
+
+00:25:38.520 --> 00:25:39.020
+So 2 days from today is a Tuesday.
+
+00:25:42.960 --> 00:25:43.460
+Beautiful. So we've just totally transformed
+
+00:25:46.340 --> 00:25:46.840
+what we can do with text.
+
+00:25:48.400 --> 00:25:48.900
+You notice there's no markup here.
+
+00:25:53.200 --> 00:25:53.440
+And this is working with all of the other
+
+00:25:55.440 --> 00:25:55.600
+implicit types that we have everywhere in
+
+00:25:57.720 --> 00:25:57.920
+Emacs. It's only going to match to this kind
+
+00:26:00.060 --> 00:26:00.560
+of pattern and anywhere else,
+
+00:26:02.320 --> 00:26:02.820
+you know, it just won't trigger that type.
+
+00:26:06.180 --> 00:26:06.440
+So lots of power. You just need to get
+
+00:26:07.200 --> 00:26:07.700
+started with Hyperbole.
+
+00:26:10.640 --> 00:26:10.880
+There's great documentation both inside the
+
+00:26:13.820 --> 00:26:14.060
+code in the manual. There's a fast demo that
+
+00:26:16.620 --> 00:26:16.880
+you can start with and there's about 10
+
+00:26:19.000 --> 00:26:19.500
+different videos. There'll be 3 presentations
+
+00:26:21.940 --> 00:26:22.440
+on hyperbole here at the conference,
+
+00:26:26.000 --> 00:26:26.500
+and I hope you've enjoyed this presentation.
+
+00:26:29.740 --> 00:26:30.040
+I'd love to answer your questions and get
+
+00:26:31.200 --> 00:26:31.700
+some new users for Hyperbole.
+
+00:26:35.820 --> 00:26:36.020
+So lastly, I'd like to thank my
+
+00:26:37.680 --> 00:26:38.040
+co-maintainer, Matt, who's going to speak
+
+00:26:41.820 --> 00:26:42.040
+later about the extensive test protocols we
+
+00:26:45.420 --> 00:26:45.920
+have in Hyperbole. Hyperbole works on every
+
+00:26:47.360 --> 00:26:47.860
+version of Emacs from 27.1
+
+00:26:52.180 --> 00:26:52.600
+up, and every operating system and Windows
+
+00:26:55.960 --> 00:26:56.120
+system that you use. And thanks so much to
+
+00:26:58.140 --> 00:26:58.640
+the volunteers and the speakers at EmacsConf.
+
+00:27:01.720 --> 00:27:02.000
+You do a great job, and we're all really
+
+00:27:04.200 --> 00:27:04.400
+appreciative that you take all the time that
+
+00:27:05.720 --> 00:27:06.220
+you do to make this happen.
+
+00:27:07.120 --> 00:27:07.620
+Thank you very much.
+
+00:27:10.900 --> 00:27:11.400
+[Speaker 0]: And thank you so much Bob.
+
+00:27:14.540 --> 00:27:14.680
+So I'll let you do the gymnastics to join us
+
+00:27:15.920 --> 00:27:16.420
+back on BBB and put your webcam.
+
+00:27:18.340 --> 00:27:18.840
+In the meantime, I'll invite people,
+
+00:27:20.240 --> 00:27:20.740
+as Sasha told you in the introduction,
+
+00:27:23.300 --> 00:27:23.600
+to go put your question in the pad.
+
+00:27:25.680 --> 00:27:25.880
+The link is on the talks page and also on
+
+00:27:27.720 --> 00:27:28.220
+IRC. So take your time.
+
+00:27:29.700 --> 00:27:29.900
+We've already got some people who've asked
+
+00:27:32.860 --> 00:27:33.060
+questions. You can also start joining the
+
+00:27:34.640 --> 00:27:35.140
+room. Let me just ping Sasha.
+
+00:27:37.940 --> 00:27:38.440
+Ping to open ID HyperAmp.
+
+00:27:40.920 --> 00:27:41.120
+So, you'll be able to join us on
+
+00:27:43.000 --> 00:27:43.260
+BigBlueButton as well to go chat with Bob
+
+00:27:44.900 --> 00:27:45.040
+more directly. I'm not sure if people have
+
+00:27:45.980 --> 00:27:46.480
+joined already. Not yet.
+
+00:27:50.920 --> 00:27:51.060
+So, Bob, what I'll do,
+
+00:27:51.880 --> 00:27:52.280
+we already have 4 questions.
+
+00:27:53.920 --> 00:27:54.080
+I'm gonna read them to you and you can take
+
+00:27:54.720 --> 00:27:54.900
+your time answering them,
+
+00:27:57.180 --> 00:27:57.340
+but we do have about 7 minutes until we go to
+
+00:27:58.940 --> 00:27:59.120
+the next talk, so we need to be a little bit
+
+00:28:00.420 --> 00:28:00.920
+[Speaker 1]: Okay.
+
+00:28:02.920 --> 00:28:03.240
+[Speaker 0]: chop-chop. All right, so reading the first
+
+00:28:05.000 --> 00:28:05.460
+questions, and I'm also going to display them
+
+00:28:06.400 --> 00:28:06.900
+for the stream to see,
+
+00:28:09.600 --> 00:28:09.760
+do buttons keep their metadata within the
+
+00:28:12.100 --> 00:28:12.380
+same file? E.g., would I see it if I change
+
+00:28:13.440 --> 00:28:13.940
+to fundamental mode, for instance?
+
+00:28:19.060 --> 00:28:19.340
+[Speaker 1]: So all of the things that I was showing you,
+
+00:28:20.800 --> 00:28:21.300
+implicit buttons have no metadata.
+
+00:28:23.400 --> 00:28:23.800
+That's the great thing about them,
+
+00:28:27.140 --> 00:28:27.400
+is you just type them in the buffer and what
+
+00:28:29.800 --> 00:28:30.020
+you see is all there is to that button and
+
+00:28:32.800 --> 00:28:33.300
+hyperbole generates all the smarts associated
+
+00:28:35.280 --> 00:28:35.780
+with them. When you create an explicit
+
+00:28:38.160 --> 00:28:38.660
+button, which I showed you 1 or 2 examples
+
+00:28:42.520 --> 00:28:42.720
+of, that metadata is, there is metadata with
+
+00:28:45.420 --> 00:28:45.860
+that, and that is stored in a separate file
+
+00:28:47.360 --> 00:28:47.860
+in the same directory called .hypb.
+
+00:28:51.300 --> 00:28:51.500
+So it's hidden away and it doesn't affect the
+
+00:28:53.200 --> 00:28:53.700
+format of the buffer that it's in.
+
+00:28:56.040 --> 00:28:56.540
+So again, what you see is what you get.
+
+00:28:58.520 --> 00:28:58.740
+You just see the delimiters around the
+
+00:29:00.640 --> 00:29:01.140
+explicit button and that's it.
+
+00:29:04.000 --> 00:29:04.500
+So Hyperbole takes care of all that for you.
+
+00:29:08.080 --> 00:29:08.360
+However, if you embed them into a mail
+
+00:29:09.200 --> 00:29:09.480
+message, which you can,
+
+00:29:11.920 --> 00:29:12.180
+you can mail buttons, then there is a hidden
+
+00:29:14.440 --> 00:29:14.700
+area at the end of the mail message that
+
+00:29:16.640 --> 00:29:17.120
+encodes the metadata for the explicit
+
+00:29:17.120 --> 00:29:17.620
+buttons.
+
+00:29:21.140 --> 00:29:21.640
+[Speaker 0]: Ok, great. Next question.
+
+00:29:24.060 --> 00:29:24.560
+Is it possible to link to a file by its ID,
+
+00:29:26.980 --> 00:29:27.340
+like the node, org ID or some similar unique
+
+00:29:27.620 --> 00:29:28.120
+string inside?
+
+00:29:32.120 --> 00:29:32.620
+[Speaker 1]: Yes, In fact, that's 1 of the new features in
+
+00:29:37.640 --> 00:29:37.840
+9. You just made a return on an ID and it
+
+00:29:40.280 --> 00:29:40.780
+takes you right to the org node,
+
+00:29:44.760 --> 00:29:44.900
+works with org Rome and org straight out of
+
+00:29:47.680 --> 00:29:47.900
+the box. We're looking at ways to make it
+
+00:29:49.640 --> 00:29:50.040
+easier to just insert those in places,
+
+00:29:52.580 --> 00:29:52.800
+but since you have word keys that do that
+
+00:29:55.320 --> 00:29:55.600
+already, you can just insert them in any
+
+00:29:58.180 --> 00:29:58.420
+documents and Hyperbole will recognize them.
+
+00:30:02.080 --> 00:30:02.580
+I think In some cases you may need to put id
+
+00:30:04.900 --> 00:30:05.400
+colon in front of the id as well.
+
+00:30:06.420 --> 00:30:06.920
+Generally it works.
+
+00:30:11.060 --> 00:30:11.560
+[Speaker 0]: Ok, great. Moving on to the next question.
+
+00:30:13.260 --> 00:30:13.760
+Regarding the frames example,
+
+00:30:16.160 --> 00:30:16.320
+any thoughts or considerations for a
+
+00:30:18.760 --> 00:30:19.020
+transient interface or is this something 1
+
+00:30:22.120 --> 00:30:22.280
+could already toggle? Are you familiar with
+
+00:30:22.660 --> 00:30:23.160
+transient interface?
+
+00:30:26.200 --> 00:30:26.700
+[Speaker 1]: Yes, we don't use transient because we,
+
+00:30:29.640 --> 00:30:30.140
+you know, Hyperbole started out in 1991,
+
+00:30:34.020 --> 00:30:34.280
+though it's had much much work since then so
+
+00:30:37.740 --> 00:30:37.940
+we predate a lot of newer things in Emacs and
+
+00:30:41.040 --> 00:30:41.400
+then we just use them as as they Become
+
+00:30:45.180 --> 00:30:45.480
+useful too hyperbole We think the the mini
+
+00:30:46.480 --> 00:30:46.720
+buffer menu is pretty good.
+
+00:30:48.280 --> 00:30:48.780
+We could rewrite stuff in transient,
+
+00:30:51.100 --> 00:30:51.600
+but we haven't seen the need yet.
+
+00:30:54.760 --> 00:30:54.960
+Maybe high control, that might be a good
+
+00:30:58.260 --> 00:30:58.480
+candidate, because there are so many keys in
+
+00:31:00.240 --> 00:31:00.440
+it. So we'll think about that.
+
+00:31:02.560 --> 00:31:03.060
+But it would be a while before we got to it.
+
+00:31:06.840 --> 00:31:07.060
+[Speaker 0]: Moving on to the next question,
+
+00:31:08.620 --> 00:31:08.800
+sorry I got really confused because there's a
+
+00:31:10.760 --> 00:31:11.260
+French salut in the text.
+
+00:31:13.100 --> 00:31:13.600
+Is someone saying hi to me or something?
+
+00:31:14.600 --> 00:31:15.100
+All right, next question.
+
+00:31:16.920 --> 00:31:17.420
+Regarding multi-file search functionality,
+
+00:31:22.260 --> 00:31:22.740
+why not implement it within the existing
+
+00:31:25.280 --> 00:31:25.680
+framework of MetaX grep or similar built-in
+
+00:31:28.020 --> 00:31:28.260
+commands? Yet another search interface sounds
+
+00:31:28.620 --> 00:31:29.120
+a bit redundant.
+
+00:31:33.660 --> 00:31:33.900
+[Speaker 1]: Multi-file search, so High Rollo I guess
+
+00:31:35.640 --> 00:31:35.940
+you're talking about. I think what you missed
+
+00:31:38.940 --> 00:31:39.440
+there is that High Rollo matches to records,
+
+00:31:42.620 --> 00:31:42.880
+multi-line records, so it's not a
+
+00:31:44.860 --> 00:31:45.360
+line-oriented match, it's a record-oriented
+
+00:31:50.520 --> 00:31:50.760
+match. So Grep, you can say maybe give me 3
+
+00:31:52.800 --> 00:31:53.000
+lines of context, but what if I have a
+
+00:31:55.860 --> 00:31:56.100
+20-line record? I want to see the whole
+
+00:31:58.580 --> 00:31:59.060
+thing. And so, it's a full-text search
+
+00:32:02.980 --> 00:32:03.480
+interface, which lets you have any size
+
+00:32:06.760 --> 00:32:07.260
+entries or nodes in the match buffer.
+
+00:32:10.520 --> 00:32:10.760
+So that's 1 reason. MADAX grep works with
+
+00:32:12.720 --> 00:32:12.880
+hyperbole. I mean, you just use it if you
+
+00:32:15.240 --> 00:32:15.580
+want and then you can hit MADA return on grep
+
+00:32:19.400 --> 00:32:19.640
+lines. So we basically take everything from
+
+00:32:24.240 --> 00:32:24.400
+POSIX and everything in Emacs and we try to
+
+00:32:26.200 --> 00:32:26.680
+make a lot of it simpler to use.
+
+00:32:28.440 --> 00:32:28.940
+We don't take away any of the functionality,
+
+00:32:30.540 --> 00:32:31.040
+we just augment it.
+
+00:32:35.020 --> 00:32:35.220
+[Speaker 0]: Right, and I think that's the logic for a lot
+
+00:32:37.000 --> 00:32:37.200
+of the packages you know the philosophy is
+
+00:32:38.940 --> 00:32:39.220
+just you create your little bit your little
+
+00:32:41.180 --> 00:32:41.420
+island where you do your stuff and if you can
+
+00:32:42.800 --> 00:32:42.940
+resonate with other islands so much the
+
+00:32:44.860 --> 00:32:45.080
+better and it feels like between those
+
+00:32:47.720 --> 00:32:47.900
+islands you know hyperbole is a great way to
+
+00:32:49.480 --> 00:32:49.980
+connect things that are just text.
+
+00:32:51.380 --> 00:32:51.880
+So it's always been a lovely philosophy.
+
+00:32:53.160 --> 00:32:53.620
+There's always been a lovely philosophy
+
+00:32:53.860 --> 00:32:54.360
+behind it.
+
+00:32:58.020 --> 00:32:58.200
+[Speaker 1]: 1 other point I'd make there is that the
+
+00:33:01.060 --> 00:33:01.480
+Hyrolo also contains logical search
+
+00:33:04.740 --> 00:33:04.940
+operators. So when I typed in that string you
+
+00:33:06.900 --> 00:33:07.360
+could just as well type with like Lisp
+
+00:33:08.640 --> 00:33:09.140
+expressions, semi Lisp expressions.
+
+00:33:12.980 --> 00:33:13.480
+You can say open paren and word 1,
+
+00:33:16.800 --> 00:33:17.280
+word 2, close paren. You know you can have or
+
+00:33:22.200 --> 00:33:22.360
+and XOR and not and it'll do the search and
+
+00:33:23.720 --> 00:33:24.220
+just retrieve the entries,
+
+00:33:27.440 --> 00:33:27.600
+again, multi-line entries that match all of
+
+00:33:29.200 --> 00:33:29.700
+the criteria that you specified there.
+
+00:33:30.720 --> 00:33:31.120
+So that's fairly unique,
+
+00:33:33.000 --> 00:33:33.320
+I think. So you basically got a full text
+
+00:33:35.340 --> 00:33:35.840
+search platform with logical operators,
+
+00:33:38.080 --> 00:33:38.580
+instantly, you know, fast moving,
+
+00:33:42.280 --> 00:33:42.720
+rapid keys that you can control everything
+
+00:33:44.920 --> 00:33:45.280
+with and it's all integrated into this larger
+
+00:33:45.280 --> 00:33:45.780
+framework.
+
+00:33:48.800 --> 00:33:49.060
+[Speaker 0]: Okay, great. Well, Bob,
+
+00:33:50.020 --> 00:33:50.520
+you have 2 more questions,
+
+00:33:53.600 --> 00:33:53.740
+but there's a big 1 about what inspired you
+
+00:33:56.120 --> 00:33:56.440
+to write it back. It's being hyperbole around
+
+00:33:56.980 --> 00:33:57.360
+the time of its birth,
+
+00:33:59.180 --> 00:33:59.680
+but sadly, we only have about 1 more minute.
+
+00:34:01.000 --> 00:34:01.320
+So what I'm going to ask you to do,
+
+00:34:02.240 --> 00:34:02.720
+feel free to answer the question.
+
+00:34:05.020 --> 00:34:05.140
+If you go on BBB, I've pasted the link to the
+
+00:34:06.820 --> 00:34:06.960
+other pad, I think you can see it on your
+
+00:34:10.520 --> 00:34:11.020
+[Speaker 1]: I have the ether pad up.
+
+00:34:12.560 --> 00:34:13.060
+[Speaker 0]: computer as well. So what are we going to do?
+
+00:34:16.679 --> 00:34:16.880
+Sorry, I'm just a little bit pressed by time
+
+00:34:18.280 --> 00:34:18.480
+because it's not me controlling when we move
+
+00:34:19.699 --> 00:34:20.199
+on to the next talk, as was evidenced
+
+00:34:22.000 --> 00:34:22.179
+yesterday when we got yonked to the next
+
+00:34:25.020 --> 00:34:25.159
+talk. So Bob, feel free to take all the time
+
+00:34:25.840 --> 00:34:26.280
+you want to answer questions.
+
+00:34:27.719 --> 00:34:28.040
+People, if you wanna join the Big Blue Button
+
+00:34:29.960 --> 00:34:30.060
+room, the links are available and open on the
+
+00:34:31.480 --> 00:34:31.719
+talk page. You can join and ask as many
+
+00:34:32.560 --> 00:34:33.060
+questions as you want to Bob.
+
+00:34:34.199 --> 00:34:34.440
+And for us, with a live stream,
+
+00:34:36.219 --> 00:34:36.500
+we'll be moving on to the next talk in about
+
+00:34:38.940 --> 00:34:39.060
+30 seconds. So Bob, all that's left is for me
+
+00:34:40.679 --> 00:34:40.900
+to thank you for your presentation again this
+
+00:34:42.100 --> 00:34:42.600
+year and for all your answers.
+
+00:34:44.060 --> 00:34:44.560
+[Speaker 1]: Thank you, Leo.
+
+00:34:46.159 --> 00:34:46.440
+[Speaker 0]: All right. Bye bye, Bob.
+
+00:34:48.080 --> 00:34:48.239
+And we'll be moving on to the next talk in
+
+00:34:49.900 --> 00:34:50.400
+about 10 seconds. See you in a bit.
+
+00:34:55.860 --> 00:34:56.139
+All right, Bob, we are off air I think now.
+
+00:34:57.540 --> 00:34:57.720
+Thank you so much. I need to get moving for
+
+00:35:01.820 --> 00:35:02.320
+[Speaker 1]: Okay, is somebody gonna keep writing answers
+
+00:35:04.040 --> 00:35:04.540
+in here or I need to type them in?
+
+00:35:06.000 --> 00:35:06.280
+[Speaker 0]: the next talk. It's probably best now if you
+
+00:35:09.160 --> 00:35:09.480
+read the questions on your own and answer
+
+00:35:10.680 --> 00:35:11.000
+them. We'll collate everything together,
+
+00:35:11.980 --> 00:35:12.480
+we'd just like to have your answers.
+
+00:35:16.680 --> 00:35:17.180
+[Speaker 1]: I hope some people will join the BBB.
+
+00:35:21.140 --> 00:35:21.340
+[Speaker 0]: it in my... All right,
+
+00:35:21.340 --> 00:35:21.840
+bye-bye.
+
+00:35:22.800 --> 00:35:23.300
+[Speaker 1]: But I'll start. I'll put Bye-bye.
+
+00:35:28.360 --> 00:35:28.580
+So let me take a second here to see what
+
+00:35:32.480 --> 00:35:32.980
+questions we have. Did we cover that?
+
+00:35:42.400 --> 00:35:42.900
+OK. The point is why not upstream search
+
+00:35:46.100 --> 00:35:46.600
+interface? Could you clarify that question?
+
+00:35:50.980 --> 00:35:51.420
+I don't quite know what that means.
+
+00:35:53.620 --> 00:35:53.800
+So I'll go on to the next 1 and come back to
+
+00:35:57.520 --> 00:35:57.660
+that. Hyperlinks been around for a number of
+
+00:35:59.620 --> 00:35:59.860
+years now. What inspired you to write it back
+
+00:36:00.960 --> 00:36:01.460
+around the time of its birth?
+
+00:36:02.640 --> 00:36:03.140
+Well, that's a good question.
+
+00:36:06.940 --> 00:36:07.360
+It was born before the World Wide Web,
+
+00:36:08.760 --> 00:36:09.260
+actually. And it was right before.
+
+00:36:12.600 --> 00:36:13.100
+I remember we were in the midst of a version
+
+00:36:15.800 --> 00:36:16.300
+when the first version of the web occurred.
+
+00:36:19.640 --> 00:36:19.820
+And I was thinking that there was going to be
+
+00:36:22.200 --> 00:36:22.700
+an information explosion of unstructured
+
+00:36:26.920 --> 00:36:27.140
+information. And like we needed to have much
+
+00:36:30.660 --> 00:36:30.920
+better tools to be able to manage say like
+
+00:36:36.300 --> 00:36:36.740
+5,000 email messages coming in and all sorts
+
+00:36:38.760 --> 00:36:39.260
+of non-database-oriented information
+
+00:36:41.500 --> 00:36:42.000
+structures. So I said we need an advanced
+
+00:36:45.860 --> 00:36:46.080
+interactive hypertext system and it needs to
+
+00:36:49.160 --> 00:36:49.320
+work with all the general capabilities that
+
+00:36:53.600 --> 00:36:54.100
+we use like email and our document production
+
+00:36:58.180 --> 00:36:58.500
+systems. So I was doing research at the time
+
+00:37:03.960 --> 00:37:04.200
+at a university And I decided to work on
+
+00:37:05.640 --> 00:37:06.140
+something that we called personalized
+
+00:37:07.020 --> 00:37:07.520
+information environments.
+
+00:37:09.960 --> 00:37:10.120
+And there's a paper about this out there if
+
+00:37:11.540 --> 00:37:12.040
+you want to dig it out on the web.
+
+00:37:14.860 --> 00:37:15.360
+So Pies, as they were called,
+
+00:37:19.620 --> 00:37:20.040
+was an architecture which would have a bunch
+
+00:37:23.940 --> 00:37:24.100
+of managers, like Hyperbole was 1 of the
+
+00:37:25.320 --> 00:37:25.820
+managers, the hypertext manager,
+
+00:37:29.060 --> 00:37:29.440
+and then a bunch of point tools that would
+
+00:37:30.220 --> 00:37:30.720
+leverage the managers,
+
+00:37:33.080 --> 00:37:33.580
+like an email reader would be a point tool
+
+00:37:35.640 --> 00:37:36.140
+that would leverage the hypertext manager.
+
+00:37:39.200 --> 00:37:39.480
+And so the first, I did in fact write
+
+00:37:39.960 --> 00:37:40.460
+something called PyMail,
+
+00:37:43.340 --> 00:37:43.840
+which was very much Gmail-like,
+
+00:37:47.140 --> 00:37:47.640
+before Gmail. And so inside,
+
+00:37:50.800 --> 00:37:51.300
+and I did a, it was like our mail in a way,
+
+00:37:53.520 --> 00:37:54.020
+but inside your our mail summaries,
+
+00:37:56.720 --> 00:37:57.180
+for example, you could have explicit buttons
+
+00:38:00.680 --> 00:38:01.120
+embedded and that were drawn from the subject
+
+00:38:01.800 --> 00:38:02.300
+of your email message,
+
+00:38:05.640 --> 00:38:06.140
+and they'd work just like the regular button.
+
+00:38:09.520 --> 00:38:10.020
+So it was very flexible and it had rule-based
+
+00:38:11.140 --> 00:38:11.640
+processing and things.
+
+00:38:14.180 --> 00:38:14.340
+So Hyperbole came out of that and it's come a
+
+00:38:19.020 --> 00:38:19.520
+long way, But it's still a very useful core
+
+00:38:22.200 --> 00:38:22.440
+hypertext system, hypermedia system I should
+
+00:38:26.520 --> 00:38:26.920
+say. Are you familiar with the Embark
+
+00:38:29.760 --> 00:38:30.060
+package? I am a bit. I've just started using
+
+00:38:31.400 --> 00:38:31.900
+it. I think there's some overlapping
+
+00:38:33.700 --> 00:38:34.200
+functionality with hyperbole.
+
+00:38:39.140 --> 00:38:39.360
+Yes, we've found that people over time have
+
+00:38:41.160 --> 00:38:41.600
+enjoyed hyperbole and have started
+
+00:38:43.460 --> 00:38:43.960
+replicating some of its features,
+
+00:38:45.380 --> 00:38:45.880
+small amounts of the features.
+
+00:38:51.120 --> 00:38:51.340
+I talked to, I hope I don't miss his name,
+
+00:38:55.760 --> 00:38:56.000
+but O'Adam who writes that once in a while we
+
+00:38:59.040 --> 00:38:59.480
+dialogue and I think Embark is great,
+
+00:39:04.080 --> 00:39:04.500
+you know, I'll give him some pointers too and
+
+00:39:07.740 --> 00:39:08.040
+he thinks that Embark and hyperbole are quite
+
+00:39:10.240 --> 00:39:10.740
+compatible too, just like organ hyperbole.
+
+00:39:12.580 --> 00:39:13.080
+So that's how we like to keep it.
+
+00:39:17.940 --> 00:39:18.140
+Some people prefer just a small package of
+
+00:39:20.920 --> 00:39:21.100
+MBARC, and it does different things than what
+
+00:39:23.600 --> 00:39:23.800
+Hyperbole does. So I think you use all of
+
+00:39:27.280 --> 00:39:27.540
+these tools together, and they can work very
+
+00:39:33.460 --> 00:39:33.960
+well together. Any other questions?
+
+00:39:37.800 --> 00:39:38.300
+Anybody still here? If not,
+
+00:39:40.680 --> 00:39:41.180
+probably people are off to another talk.
+
+00:39:47.160 --> 00:39:47.660
+So thank you very much and look for Hyperbole
+
+00:39:51.340 --> 00:39:51.840
+version 9 in the next week.
+
+00:39:56.380 --> 00:39:56.880
+Thanks very much. Bye.
+
+00:40:06.660 --> 00:40:07.120
+Should I leave BBB? Oh Alpha Papa's here.
+
+00:40:15.840 --> 00:40:16.040
+Hey. Good to see you. Alright,
+
+00:40:22.240 --> 00:40:22.740
+well... Well, I'll stay for another minute,
+
+00:40:26.920 --> 00:40:27.280
+but I think I'm going to go off video 2 and
+
+00:40:29.280 --> 00:40:29.780
+start listening to another talk.
+
+00:40:30.720 --> 00:40:30.980
+Thanks, everyone. Thanks,
+
+00:40:30.980 --> 00:40:31.480
+everyone.
+
+00:40:56.920 --> 00:40:56.960
+Yes, I can hear you. Yes,
+
+00:40:59.720 --> 00:41:00.040
+[Speaker 0]: Have you been answering questions?
+
+00:41:03.540 --> 00:41:03.700
+[Speaker 1]: I can hear you. finished answering the
+
+00:41:04.700 --> 00:41:05.200
+questions. We're all done.
+
+00:41:07.200 --> 00:41:07.280
+[Speaker 0]: I Okay, cool. Well, what I'm going to do,
+
+00:41:08.100 --> 00:41:08.400
+I'm going to close the room,
+
+00:41:09.720 --> 00:41:10.160
+unless you want to go a little longer,
+
+00:41:11.640 --> 00:41:11.880
+because this talk that we're playing right
+
+00:41:13.180 --> 00:41:13.480
+now is finishing really quick,
+
+00:41:14.620 --> 00:41:15.120
+and we don't have a Q&A afterwards.
+
+00:41:18.540 --> 00:41:19.040
+So, do you want to stay on air or something?
+
+00:41:21.240 --> 00:41:21.740
+[Speaker 1]: Yeah, if you let people know to come back,
+
+00:41:23.140 --> 00:41:23.320
+because some went to go hear that
+
+00:41:24.400 --> 00:41:24.900
+presentation, I can stay.
+
+00:41:27.440 --> 00:41:27.880
+[Speaker 0]: Sure, I'll make an announcement then.
+
+00:41:29.240 --> 00:41:29.680
+And you can stay, we'll just put on BBB.
+
+00:41:31.400 --> 00:41:31.840
+You can stay muted until people join.
+
+00:41:33.440 --> 00:41:33.640
+But this way it opens up avenues for people
+
+00:41:35.580 --> 00:41:35.980
+to join. And if no 1 shows up in 5 minutes,
+
+00:41:36.560 --> 00:41:37.060
+we'll all go on break.
+
+00:41:40.560 --> 00:41:41.060
+Does that sound okay? Cool,
+
+00:41:44.180 --> 00:41:44.320
+I'll go back to the management in the
+
+00:41:45.280 --> 00:41:45.780
+background and I'll let you know.
+
+00:41:47.000 --> 00:41:47.240
+[Speaker 1]: Great, thank you. Where are you?
+
+00:41:47.700 --> 00:41:48.200
+Oh yeah, okay.
+
+00:41:50.400 --> 00:41:50.740
+[Speaker 0]: So sorry, I kind of need to run.
+
+00:41:51.880 --> 00:41:52.380
+I'll be back in about 2 minutes.
+
+00:42:05.740 --> 00:42:06.240
+Okay, bye. Bye.
+
+00:43:27.040 --> 00:43:27.540
+Okay, Bob, I've won the stream.
+
+00:43:28.660 --> 00:43:28.940
+We are joining it now.
+
+00:43:29.880 --> 00:43:30.380
+We've got about 5 seconds.
+
+00:43:43.080 --> 00:43:43.580
+And I think we are back.
+
+00:43:50.760 --> 00:43:51.260
+so we are gone, Bob, please.
+
+00:43:52.800 --> 00:43:53.300
+[Speaker 1]: Hi. So, yeah, I was going to say,
+
+00:43:56.720 --> 00:43:57.160
+can we see if anybody comes back in the room?
+
+00:43:57.620 --> 00:43:58.120
+How do you tell?
+
+00:44:03.420 --> 00:44:03.740
+[Speaker 0]: You should be able to show on the left,
+
+00:44:04.440 --> 00:44:04.920
+you've got on BbBlueButton,
+
+00:44:06.300 --> 00:44:06.380
+you've got a button, I'm showing it on the
+
+00:44:08.200 --> 00:44:08.440
+screen, but you've got a little button that
+
+00:44:09.880 --> 00:44:10.380
+allows you to show the people joining.
+
+00:44:15.140 --> 00:44:15.340
+So, hello everyone. Let's see if you had more
+
+00:44:16.760 --> 00:44:17.080
+question on your pad that we could be taking
+
+00:44:18.920 --> 00:44:19.040
+in the meantime, just give me a second to
+
+00:44:23.000 --> 00:44:23.500
+[Speaker 1]: your pad. Here we go, an error occurred.
+
+00:44:32.720 --> 00:44:33.220
+[Speaker 0]: find Okay. All right, it's loading up.
+
+00:44:37.960 --> 00:44:38.440
+[Speaker 1]: Wow. Feels like there's an AI writing this
+
+00:44:41.180 --> 00:44:41.680
+stuff on the pad. Has it?
+
+00:44:45.820 --> 00:44:46.060
+Is this the last pad? Oh no,
+
+00:44:46.880 --> 00:44:47.080
+this is a different 1,
+
+00:44:51.020 --> 00:44:51.520
+[Speaker 0]: Which question are you looking at now?
+
+00:44:53.460 --> 00:44:53.820
+[Speaker 1]: sorry. It was a different pad,
+
+00:44:55.940 --> 00:44:56.440
+[Speaker 0]: Oh right.
+
+00:44:57.260 --> 00:44:57.380
+[Speaker 2]: Okay, here
+
+00:44:57.560 --> 00:44:58.060
+[Speaker 1]: that was the problem. we go.
+
+00:45:00.660 --> 00:45:00.900
+Okay, I'm back. So, yeah,
+
+00:45:03.000 --> 00:45:03.480
+it looks like... Is anybody back?
+
+00:45:06.680 --> 00:45:07.180
+Send, if you're here, send a chat message.
+
+00:45:09.520 --> 00:45:10.020
+[Speaker 0]: Yeah, because it's been something.
+
+00:45:13.740 --> 00:45:14.240
+You have, apparently, whenever we leave those
+
+00:45:17.720 --> 00:45:18.220
+BBB chat room open, the moment we go off air,
+
+00:45:20.080 --> 00:45:20.280
+people start joining and asking a lot of very
+
+00:45:21.980 --> 00:45:22.240
+interesting questions and you know that's all
+
+00:45:24.140 --> 00:45:24.280
+well and good, we'll be able to put them on
+
+00:45:26.160 --> 00:45:26.280
+the page later on. But it'd be great if you
+
+00:45:28.040 --> 00:45:28.260
+could also have those discussions when we are
+
+00:45:29.640 --> 00:45:30.140
+live because a lot of people would benefit
+
+00:45:31.960 --> 00:45:32.120
+from the brilliance that goes on in this
+
+00:45:34.400 --> 00:45:34.760
+room. So please don't be shy,
+
+00:45:39.400 --> 00:45:39.900
+[Speaker 1]: So we're on the general stream now?
+
+00:45:41.660 --> 00:45:41.760
+[Speaker 0]: join and talk. Yep, we are back on the
+
+00:45:45.940 --> 00:45:46.060
+general stream. We have about until 10 of the
+
+00:45:47.680 --> 00:45:48.180
+next hour, which is 19 minutes.
+
+00:45:55.640 --> 00:45:56.140
+[Speaker 1]: Just- Why So have you ever tried hyperbole,
+
+00:45:56.380 --> 00:45:56.880
+Leo?
+
+00:45:58.780 --> 00:45:59.280
+[Speaker 0]: don't you and I talk? I have never,
+
+00:46:02.440 --> 00:46:02.840
+but You know, it feels like every year when
+
+00:46:03.380 --> 00:46:03.740
+you present something,
+
+00:46:05.140 --> 00:46:05.640
+it feels like I already know so much.
+
+00:46:07.080 --> 00:46:07.580
+Because of the buttons,
+
+00:46:09.600 --> 00:46:10.080
+it feels like it's also something that we've
+
+00:46:11.980 --> 00:46:12.440
+reinvented many times in Emacs.
+
+00:46:13.440 --> 00:46:13.940
+It's like conversion to evolution,
+
+00:46:16.400 --> 00:46:16.560
+except you're the 1 who started ahead of
+
+00:46:16.920 --> 00:46:17.420
+everyone else.
+
+00:46:19.200 --> 00:46:19.700
+[Speaker 1]: Well, that's a good point because,
+
+00:46:22.840 --> 00:46:23.200
+you know, we have, Emacs itself has push
+
+00:46:25.240 --> 00:46:25.520
+buttons, which you see like in the help
+
+00:46:27.220 --> 00:46:27.540
+buffers. And those used to,
+
+00:46:29.340 --> 00:46:29.840
+we didn't really do anything with those,
+
+00:46:32.280 --> 00:46:32.780
+but now we've subsumed them as implicit
+
+00:46:34.840 --> 00:46:35.340
+buttons as well. So you're made a return,
+
+00:46:38.000 --> 00:46:38.500
+we'll work on those anywhere too.
+
+00:46:41.320 --> 00:46:41.820
+So, we're trying to get,
+
+00:46:45.660 --> 00:46:45.920
+you use 1 key, right? To control every type
+
+00:46:46.800 --> 00:46:47.080
+of button that you have.
+
+00:46:47.920 --> 00:46:48.420
+It works on org links,
+
+00:46:51.300 --> 00:46:51.800
+org buttons anywhere, or URLs.
+
+00:46:53.940 --> 00:46:54.440
+Because it's so simple.
+
+00:46:58.480 --> 00:46:58.820
+All you need is like 5 to 10 lines of code to
+
+00:47:02.560 --> 00:47:02.760
+map. You map the pattern that represents a
+
+00:47:04.900 --> 00:47:05.060
+concept, right? And then you can create an
+
+00:47:07.500 --> 00:47:07.700
+infinite number of those buttons from that
+
+00:47:09.240 --> 00:47:09.520
+type. That's what's really cool about
+
+00:47:12.560 --> 00:47:13.060
+Hyperbole is say I have a 500 page document
+
+00:47:15.400 --> 00:47:15.600
+and it uses a really weird format for
+
+00:47:16.560 --> 00:47:17.060
+cross-referencing, right?
+
+00:47:21.960 --> 00:47:22.320
+I write my 3 lines of pattern match to work
+
+00:47:23.860 --> 00:47:24.200
+with that, and then everywhere throughout
+
+00:47:25.760 --> 00:47:25.960
+that document and the hundreds of other
+
+00:47:27.480 --> 00:47:27.680
+documents that will be created with that
+
+00:47:30.380 --> 00:47:30.880
+format, they're all live buttons instantly.
+
+00:47:32.740 --> 00:47:33.240
+Nothing changed about the document.
+
+00:47:35.280 --> 00:47:35.540
+That's really cool. You know,
+
+00:47:37.360 --> 00:47:37.860
+word mode, we have global word buttons,
+
+00:47:41.860 --> 00:47:42.040
+but mostly it has to be embedded within an
+
+00:47:44.260 --> 00:47:44.760
+org file, right? And follow that syntax.
+
+00:47:51.660 --> 00:47:51.900
+With hyperbole, it's like we can adapt as the
+
+00:47:54.800 --> 00:47:55.300
+world adapts around us to whatever formats
+
+00:47:56.440 --> 00:47:56.940
+people want to use that day.
+
+00:47:59.240 --> 00:47:59.380
+And you can even change things to look the
+
+00:48:01.700 --> 00:48:02.200
+way you want, right, and have your own
+
+00:48:04.540 --> 00:48:04.860
+cross-references. There's something built
+
+00:48:07.060 --> 00:48:07.560
+into Hyperbole that's not really active,
+
+00:48:12.620 --> 00:48:13.120
+which was sort of along the Zettelkasten way.
+
+00:48:15.200 --> 00:48:15.420
+We wrote this a long time ago.
+
+00:48:16.460 --> 00:48:16.960
+It's called hib-doc.el,
+
+00:48:21.720 --> 00:48:22.200
+and it's a card catalog notion.
+
+00:48:25.320 --> 00:48:25.820
+So it uses the high rollo in the background
+
+00:48:29.900 --> 00:48:30.180
+but it lets you create these forms that are
+
+00:48:32.660 --> 00:48:32.800
+cards that you fill out with whatever kind of
+
+00:48:35.080 --> 00:48:35.380
+data you want and then it gives you the full
+
+00:48:38.040 --> 00:48:38.520
+text searching across the cards and each card
+
+00:48:41.260 --> 00:48:41.760
+has a unique ID that you can reference
+
+00:48:44.920 --> 00:48:45.240
+similar to org IDs but these are human
+
+00:48:49.700 --> 00:48:49.860
+readable and human typable and so you can you
+
+00:48:52.460 --> 00:48:52.960
+can just have a cross-reference to any doc ID
+
+00:48:55.940 --> 00:48:56.100
+and essentially create what Engelbart used to
+
+00:49:00.180 --> 00:49:00.480
+call a journal, which is all these IDs on
+
+00:49:02.980 --> 00:49:03.220
+documents that point you directly to the
+
+00:49:05.460 --> 00:49:05.640
+document archive so that you could have like
+
+00:49:09.780 --> 00:49:10.020
+your internal publishing system and you know
+
+00:49:12.440 --> 00:49:12.940
+it's very simple to do and it's just 1 module
+
+00:49:14.160 --> 00:49:14.660
+added on to Hyperbole.
+
+00:49:19.020 --> 00:49:19.140
+[Speaker 0]: Yeah it's especially interesting for me you
+
+00:49:20.960 --> 00:49:21.140
+know because coming back to the side of
+
+00:49:23.240 --> 00:49:23.400
+convergent evolutions it's funny because the
+
+00:49:24.380 --> 00:49:24.880
+parameters are a little different.
+
+00:49:25.760 --> 00:49:26.260
+For us with org buttons,
+
+00:49:29.060 --> 00:49:29.340
+we're very happy. A lot of the stuff during
+
+00:49:31.020 --> 00:49:31.360
+EmacsConf is run with org mode,
+
+00:49:33.840 --> 00:49:34.340
+like we have Elisp going everywhere to
+
+00:49:36.820 --> 00:49:37.320
+compile a lot of org properties,
+
+00:49:39.140 --> 00:49:39.640
+like speaker information,
+
+00:49:41.120 --> 00:49:41.480
+for instance, how long the talk is,
+
+00:49:42.500 --> 00:49:42.800
+the title, and all this.
+
+00:49:44.540 --> 00:49:44.760
+We have all of this in an org file,
+
+00:49:45.520 --> 00:49:46.020
+which we use as a database,
+
+00:49:47.480 --> 00:49:47.800
+but then we can do so much stuff.
+
+00:49:50.500 --> 00:49:50.740
+We can send email and we can update the
+
+00:49:52.080 --> 00:49:52.200
+schedule. By the way, if you're interested in
+
+00:49:54.160 --> 00:49:54.280
+this, we'll have a talk on the DevTrack in
+
+00:49:56.320 --> 00:49:56.640
+the afternoon today that Sacha did and it's
+
+00:49:57.800 --> 00:49:58.140
+wonderful. I'm just teasing it.
+
+00:49:58.540 --> 00:49:59.040
+[Speaker 1]: Oh, that's great.
+
+00:50:00.640 --> 00:50:01.140
+[Speaker 0]: But coming back to Hyperbole,
+
+00:50:03.840 --> 00:50:04.000
+for you, it feels like the parameters were
+
+00:50:06.140 --> 00:50:06.560
+slightly different because the feeling was,
+
+00:50:08.600 --> 00:50:09.000
+I just want a tunnel that can work between
+
+00:50:11.100 --> 00:50:11.240
+any type of files. Now it's all well and
+
+00:50:13.100 --> 00:50:13.580
+good, Org-Rome, D-Note,
+
+00:50:14.480 --> 00:50:14.760
+and all this stuff like this,
+
+00:50:16.360 --> 00:50:16.860
+they create bidirectional links,
+
+00:50:19.040 --> 00:50:19.540
+but it's only between org-mode files.
+
+00:50:21.540 --> 00:50:22.040
+Whereas what you're achieving with Hyperbole,
+
+00:50:24.360 --> 00:50:24.760
+and you've done it much earlier than everyone
+
+00:50:26.940 --> 00:50:27.440
+else, is that you have this concept
+
+00:50:29.260 --> 00:50:29.440
+regardless of the type of file that you're
+
+00:50:32.020 --> 00:50:32.520
+using. And I find this to be beautiful.
+
+00:50:34.900 --> 00:50:35.240
+Like 5 years ago, whenever you were talking
+
+00:50:36.900 --> 00:50:37.280
+about hyperbole, I did not have a concrete
+
+00:50:38.040 --> 00:50:38.540
+idea of what was happening.
+
+00:50:40.000 --> 00:50:40.360
+But ever since I've gone through the journey
+
+00:50:42.040 --> 00:50:42.380
+of really understanding what the El Caster
+
+00:50:44.500 --> 00:50:45.000
+method were about, it feels like you were
+
+00:50:46.600 --> 00:50:46.980
+foreigners in the topic.
+
+00:50:48.340 --> 00:50:48.540
+Obviously, you've mentioned the mother of all
+
+00:50:49.740 --> 00:50:50.240
+demos by Edward Engelbart,
+
+00:50:53.600 --> 00:50:54.100
+but those ideas are not novel,
+
+00:50:56.520 --> 00:50:56.820
+but it feels like only now are they starting
+
+00:50:58.140 --> 00:50:58.520
+to be appropriated by people,
+
+00:50:59.340 --> 00:50:59.800
+especially in free software,
+
+00:51:00.700 --> 00:51:01.200
+and it's really good to see.
+
+00:51:02.200 --> 00:51:02.440
+I'm really excited to,
+
+00:51:04.280 --> 00:51:04.600
+well, have my small part to play in this.
+
+00:51:06.760 --> 00:51:06.960
+And I'm also excited to be able to chat with
+
+00:51:09.640 --> 00:51:10.140
+you and people like Bastien and other people
+
+00:51:10.900 --> 00:51:11.400
+about all those topics.
+
+00:51:13.280 --> 00:51:13.780
+[Speaker 1]: Yeah, I think, you know,
+
+00:51:16.400 --> 00:51:16.640
+it's fun that we can laugh now about when
+
+00:51:19.540 --> 00:51:20.000
+people say people are still using Emacs,
+
+00:51:22.440 --> 00:51:22.800
+you know, is because they're not used,
+
+00:51:23.960 --> 00:51:24.160
+certain people aren't using it.
+
+00:51:26.640 --> 00:51:26.880
+They have no idea of how far it's come and
+
+00:51:28.260 --> 00:51:28.760
+how powerful it is. And,
+
+00:51:31.020 --> 00:51:31.520
+you know, we're leveraging Elisp heavily,
+
+00:51:33.440 --> 00:51:33.940
+obviously, but if you look at the definition
+
+00:51:37.480 --> 00:51:37.980
+of our types, they look exactly like defunds
+
+00:51:41.160 --> 00:51:41.420
+in ELisp. And we've been able to do that
+
+00:51:42.280 --> 00:51:42.780
+because of Lisp macros.
+
+00:51:46.420 --> 00:51:46.920
+So we basically have our own domain-specific
+
+00:51:49.920 --> 00:51:50.160
+language there. But there's almost nothing to
+
+00:51:52.500 --> 00:51:52.740
+learn because it's just like what you know
+
+00:51:55.440 --> 00:51:55.680
+from UList. So again, you know,
+
+00:51:57.720 --> 00:51:57.980
+taking the concept and leveraging it,
+
+00:52:00.060 --> 00:52:00.520
+abstracting it and leveraging it multiple
+
+00:52:02.440 --> 00:52:02.940
+times gives you a lot of power.
+
+00:52:05.820 --> 00:52:06.040
+And people, you know, somebody said the other
+
+00:52:07.000 --> 00:52:07.500
+day, and I said, finally,
+
+00:52:09.860 --> 00:52:10.360
+this quote happened. He said,
+
+00:52:14.820 --> 00:52:15.060
+there's so many things that I do with
+
+00:52:16.960 --> 00:52:17.200
+hyperbole every day that I forget that I'm
+
+00:52:21.220 --> 00:52:21.440
+using hyperbole. Because it's just so
+
+00:52:23.080 --> 00:52:23.580
+embedded in this guy's workflow.
+
+00:52:25.240 --> 00:52:25.440
+And that's really how I use it.
+
+00:52:26.880 --> 00:52:27.380
+You know, there are features in there,
+
+00:52:28.580 --> 00:52:29.060
+can't use everything, right?
+
+00:52:31.360 --> 00:52:31.860
+So there are features that I don't use,
+
+00:52:35.380 --> 00:52:35.580
+but I use a lot of things and it's all like
+
+00:52:37.080 --> 00:52:37.580
+muscle memory, just like the keyboard,
+
+00:52:39.240 --> 00:52:39.740
+the Emacs key bindings.
+
+00:52:41.780 --> 00:52:42.180
+So it's very exciting to get to that level.
+
+00:52:44.120 --> 00:52:44.300
+And now, you know, we haven't started with
+
+00:52:46.440 --> 00:52:46.940
+the chatbots or any of the AI integration,
+
+00:52:49.240 --> 00:52:49.440
+but I'm starting to think about that a little
+
+00:52:53.140 --> 00:52:53.520
+bit and how we'll interface to that world and
+
+00:52:54.820 --> 00:52:55.320
+I think it's going to be very exciting.
+
+00:52:58.180 --> 00:52:58.340
+[Speaker 0]: Yeah, likewise and I think it harks back to
+
+00:53:00.520 --> 00:53:00.660
+what we were talking about before when we
+
+00:53:03.560 --> 00:53:03.700
+mentioned Hyperbole being a package inside of
+
+00:53:04.800 --> 00:53:05.300
+an ecosystem that is Emacs.
+
+00:53:07.740 --> 00:53:08.040
+But it's not because something is well
+
+00:53:10.320 --> 00:53:10.560
+circumscribed in terms of feature set that it
+
+00:53:12.500 --> 00:53:12.880
+does not influence everything around it.
+
+00:53:14.680 --> 00:53:15.060
+Like Hyperbole can be used with something
+
+00:53:17.900 --> 00:53:18.080
+completely at the opposite end of what it was
+
+00:53:21.180 --> 00:53:21.380
+intended for, just because it provides a good
+
+00:53:23.480 --> 00:53:23.860
+set of tools that can be used wherever else
+
+00:53:25.900 --> 00:53:26.100
+you want in Emacs. And it's the same thing
+
+00:53:27.720 --> 00:53:27.980
+with Org Mode, it's the same thing with many,
+
+00:53:28.780 --> 00:53:29.280
+many different things.
+
+00:53:32.320 --> 00:53:32.820
+And it feels like integrating AIs,
+
+00:53:36.420 --> 00:53:36.920
+or generative AIs, into Emacs would provide
+
+00:53:42.160 --> 00:53:42.340
+such a tool that could apply to any kind of
+
+00:53:44.540 --> 00:53:45.040
+other major mode or any kind of other use.
+
+00:53:46.460 --> 00:53:46.640
+So I'm also excited to see this.
+
+00:53:49.900 --> 00:53:50.220
+It feels like we are sitting at the brink of
+
+00:53:51.980 --> 00:53:52.480
+a revolution. I'm not going to say the acne
+
+00:53:54.200 --> 00:53:54.440
+stuff, but it definitely feels like right
+
+00:53:57.100 --> 00:53:57.560
+now, by trying to see what we can do with AI,
+
+00:53:59.160 --> 00:53:59.380
+it's definitely going to change the way not
+
+00:54:01.360 --> 00:54:01.560
+only we program, but also the way we take
+
+00:54:02.720 --> 00:54:03.160
+notes and the way we design stuff,
+
+00:54:04.940 --> 00:54:05.220
+arcing back to what John Wigley said
+
+00:54:08.160 --> 00:54:08.660
+yesterday about his draft program on macOS.
+
+00:54:10.440 --> 00:54:10.940
+Bob, if you don't mind,
+
+00:54:12.880 --> 00:54:13.080
+I see people typing questions and I also see
+
+00:54:14.540 --> 00:54:14.820
+people joining on people buttons,
+
+00:54:16.720 --> 00:54:16.920
+so I'm going to read you the 2 questions that
+
+00:54:17.760 --> 00:54:18.260
+have been added. Is that okay?
+
+00:54:20.080 --> 00:54:20.580
+[Speaker 1]: Great, go for it.
+
+00:54:22.600 --> 00:54:23.100
+[Speaker 0]: Cool, so first question.
+
+00:54:24.880 --> 00:54:25.240
+Wow, what you're describing now,
+
+00:54:27.320 --> 00:54:27.520
+and that's when you were talking about the
+
+00:54:31.580 --> 00:54:31.840
+bi-directional links and especially the last
+
+00:54:32.540 --> 00:54:33.040
+question in its entirety,
+
+00:54:35.220 --> 00:54:35.440
+What you're describing now reminds me a lot
+
+00:54:37.040 --> 00:54:37.440
+about HyperCard that I grew up on.
+
+00:54:39.000 --> 00:54:39.220
+Do you know if Hyperbole inspired Bill
+
+00:54:40.840 --> 00:54:41.040
+Atkinson or if you were inspired by
+
+00:54:42.880 --> 00:54:43.040
+HyperCard? Or were there just a lot of
+
+00:54:44.580 --> 00:54:44.820
+thoughts about hyper-contextuality around
+
+00:54:45.020 --> 00:54:45.520
+that time?
+
+00:54:49.600 --> 00:54:50.100
+[Speaker 1]: Alright, well this is another interesting
+
+00:54:52.120 --> 00:54:52.360
+anecdote. I don't know if it's true or not,
+
+00:54:57.340 --> 00:54:57.840
+but I think HyperCard predated our stuff.
+
+00:55:00.180 --> 00:55:00.480
+It was right around the same time when
+
+00:55:01.920 --> 00:55:02.420
+Hyperbole was starting out.
+
+00:55:04.540 --> 00:55:05.040
+But when I was doing the Pi research,
+
+00:55:08.460 --> 00:55:08.800
+I worked at, when I left school,
+
+00:55:11.200 --> 00:55:11.280
+I worked at Motorola, and we did a lot of
+
+00:55:12.540 --> 00:55:13.040
+work with Apple back then.
+
+00:55:15.060 --> 00:55:15.480
+And somebody came back and he said,
+
+00:55:17.540 --> 00:55:18.040
+you know, the people over there have seen
+
+00:55:21.900 --> 00:55:21.940
+your Pi research and they really liked it a
+
+00:55:25.840 --> 00:55:26.020
+lot. And so they were leveraging that when
+
+00:55:28.280 --> 00:55:28.440
+they decided to create the division that they
+
+00:55:33.120 --> 00:55:33.280
+called Apple Pi, which was the originator of
+
+00:55:36.300 --> 00:55:36.500
+the Newton which eventually led to the
+
+00:55:40.440 --> 00:55:40.940
+iPhone. So it all kind of is interconnected
+
+00:55:44.120 --> 00:55:44.380
+just like the impact that free software has
+
+00:55:46.800 --> 00:55:47.240
+had around the world. So you never know where
+
+00:55:49.360 --> 00:55:49.860
+your stuff is gonna go or end up.
+
+00:55:53.160 --> 00:55:53.400
+[Speaker 0]: Right. All right, moving on to the next
+
+00:55:55.600 --> 00:55:55.840
+question. Is it possible to only use 1
+
+00:55:57.340 --> 00:55:57.800
+feature of hyperbole without the others,
+
+00:56:00.140 --> 00:56:00.580
+i.e. Using only the implicit explicit buttons
+
+00:56:03.340 --> 00:56:03.580
+without I control I roller or without having
+
+00:56:05.860 --> 00:56:05.920
+to rewrite part of the code in hyperbole in
+
+00:56:07.540 --> 00:56:08.040
+order to be able to load a smaller hyperbole.
+
+00:56:08.660 --> 00:56:09.160
+Does it make sense?
+
+00:56:12.140 --> 00:56:12.640
+[Speaker 1]: Yes we get asked this all the time.
+
+00:56:16.100 --> 00:56:16.560
+So you can use any little bit that you want
+
+00:56:19.120 --> 00:56:19.620
+anywhere right you can even just call code
+
+00:56:23.160 --> 00:56:23.660
+from Hyperbole. I mean you don't use
+
+00:56:24.720 --> 00:56:25.080
+everything in Emacs, right?
+
+00:56:27.180 --> 00:56:27.680
+But you still install Emacs on your machine.
+
+00:56:29.580 --> 00:56:30.080
+It's exactly the same thing.
+
+00:56:32.900 --> 00:56:33.280
+Those libraries don't take up any memory,
+
+00:56:36.140 --> 00:56:36.380
+they take up a little disk space and it's so
+
+00:56:38.360 --> 00:56:38.520
+trivial compared to the amount of disk we
+
+00:56:41.280 --> 00:56:41.780
+have today. So a lot of things are not loaded
+
+00:56:43.240 --> 00:56:43.740
+unless you activate them.
+
+00:56:48.720 --> 00:56:48.900
+And so I know that you do have to build all
+
+00:56:50.860 --> 00:56:51.340
+those things. So maybe that's what bothers
+
+00:56:55.520 --> 00:56:56.020
+people. It takes 2 minutes if you're using,
+
+00:56:57.920 --> 00:56:58.400
+it depends how fast your computer is.
+
+00:57:00.920 --> 00:57:01.160
+But you build it once on install like every
+
+00:57:04.440 --> 00:57:04.600
+other package. And it used to be that there
+
+00:57:06.460 --> 00:57:06.620
+would be a lot of warnings just because of
+
+00:57:08.740 --> 00:57:09.020
+the way we wrote the code and we didn't
+
+00:57:10.920 --> 00:57:11.120
+really have to deal with some of those
+
+00:57:12.620 --> 00:57:13.080
+warnings. But with this new release,
+
+00:57:14.640 --> 00:57:15.140
+we've gotten rid of almost all of them,
+
+00:57:19.280 --> 00:57:19.780
+including the native compiler messages.
+
+00:57:22.120 --> 00:57:22.620
+So it should be a very clean install now,
+
+00:57:26.120 --> 00:57:26.620
+and just use 1 part at a time.
+
+00:57:29.580 --> 00:57:29.820
+But the other parts are there in case you
+
+00:57:31.960 --> 00:57:32.080
+make a link to something and you use a
+
+00:57:34.360 --> 00:57:34.600
+facility just like I was showing as I went
+
+00:57:35.860 --> 00:57:36.360
+across subsystems today.
+
+00:57:37.640 --> 00:57:38.040
+It may take you a year,
+
+00:57:39.880 --> 00:57:40.120
+but then all of a sudden you find the use
+
+00:57:42.100 --> 00:57:42.340
+case for Hyrule and you say,
+
+00:57:43.520 --> 00:57:44.020
+oh, I'm glad I have it there.
+
+00:57:47.140 --> 00:57:47.540
+And yes, some of these things could be split
+
+00:57:49.320 --> 00:57:49.540
+into sub packages like you do in the org
+
+00:57:52.320 --> 00:57:52.500
+ecosystem. But given our limited resources on
+
+00:57:56.120 --> 00:57:56.420
+the team, we find having them all in 1 gives
+
+00:57:57.440 --> 00:57:57.940
+us a higher level of quality,
+
+00:58:00.480 --> 00:58:00.980
+and lets us deliver a better integrated
+
+00:58:02.800 --> 00:58:03.300
+system for your use.
+
+00:58:06.040 --> 00:58:06.300
+[Speaker 0]: Yeah, exactly. And I think,
+
+00:58:08.600 --> 00:58:09.100
+you know, it's, it's not a monolith.
+
+00:58:12.240 --> 00:58:12.540
+I mean, it's usually easier,
+
+00:58:14.340 --> 00:58:14.620
+easy, more easy, more easy.
+
+00:58:16.000 --> 00:58:16.480
+Sorry, I was right on the first try.
+
+00:58:20.140 --> 00:58:20.640
+It's usually easier to maintain a monolith
+
+00:58:22.780 --> 00:58:23.140
+that contains many bits of functionality like
+
+00:58:25.060 --> 00:58:25.280
+org. You have plenty of people using org
+
+00:58:26.680 --> 00:58:27.180
+mode, not using org-agenda,
+
+00:58:28.780 --> 00:58:28.980
+for instance, or you've got plenty of people
+
+00:58:31.320 --> 00:58:31.560
+using org-mode and barely using Babel because
+
+00:58:34.240 --> 00:58:34.740
+it doesn't really translate to their use.
+
+00:58:37.500 --> 00:58:37.720
+And I feel like I very much agree with you.
+
+00:58:39.320 --> 00:58:39.520
+It's okay to install a package and only use
+
+00:58:39.920 --> 00:58:40.420
+some of the functions.
+
+00:58:43.080 --> 00:58:43.580
+I was reminded, as you were discussing this,
+
+00:58:44.640 --> 00:58:45.140
+of the consults package,
+
+00:58:46.420 --> 00:58:46.920
+which is part of the VertiCo,
+
+00:58:50.540 --> 00:58:51.040
+mbark and marginalia and all this.
+
+00:58:54.520 --> 00:58:54.960
+Consult, it replaces a lot of the Emacs
+
+00:58:56.820 --> 00:58:56.980
+built-in commands like for finding your
+
+00:58:59.760 --> 00:58:59.900
+buffers or finding text inside of your
+
+00:59:03.480 --> 00:59:03.980
+buffer. It's great. And you do not need to
+
+00:59:06.140 --> 00:59:06.300
+completely move to consult as you get
+
+00:59:08.940 --> 00:59:09.080
+started. You can start colonizing 1 step at a
+
+00:59:11.040 --> 00:59:11.540
+time the function that you usually use.
+
+00:59:15.580 --> 00:59:16.060
+I highly recommend to people to not let the
+
+00:59:18.560 --> 00:59:18.700
+size of a project deter them from trying it
+
+00:59:21.140 --> 00:59:21.640
+out because, again, in Emacs,
+
+00:59:22.300 --> 00:59:22.800
+everything is horizontal.
+
+00:59:27.980 --> 00:59:28.180
+If somehow you want to do something that was
+
+00:59:29.440 --> 00:59:29.640
+not intended primarily for this,
+
+00:59:31.720 --> 00:59:32.220
+or if you only want to use 10% of a package,
+
+00:59:35.160 --> 00:59:35.540
+well, do it. An example that I have for me is
+
+00:59:39.660 --> 00:59:39.840
+that Lispy is the minor mode that I use for
+
+00:59:41.880 --> 00:59:42.380
+editing Elisp documents,
+
+00:59:45.140 --> 00:59:45.380
+and it's great. Elisp provides similar
+
+00:59:46.840 --> 00:59:47.040
+functions to Paredit, which might be a little
+
+00:59:48.960 --> 00:59:49.300
+more popular, which allows you to have modal
+
+00:59:52.400 --> 00:59:52.540
+editing when you are on specific parts of a
+
+00:59:54.480 --> 00:59:54.620
+file, like the opening parenthesis or the
+
+00:59:56.040 --> 00:59:56.480
+closing parenthesis. It's great,
+
+00:59:58.080 --> 00:59:58.320
+it provides modal editing for those modes,
+
+01:00:00.840 --> 01:00:01.340
+but I certainly do not know everything,
+
+01:00:04.040 --> 01:00:04.280
+every modal command associated to it.
+
+01:00:06.000 --> 01:00:06.180
+I just use the 1 that makes the most sense to
+
+01:00:07.680 --> 01:00:08.180
+me. So feel free to explore.
+
+01:00:13.200 --> 01:00:13.700
+[Speaker 1]: I'll just say, we get this so much.
+
+01:00:15.360 --> 01:00:15.660
+It's not that large. I mean,
+
+01:00:16.960 --> 01:00:17.360
+there's a fair number of files,
+
+01:00:20.600 --> 01:00:20.820
+but it's just like 1 major directory and then
+
+01:00:21.840 --> 01:00:22.340
+the KOutliner directory.
+
+01:00:25.120 --> 01:00:25.560
+And when you look at these things,
+
+01:00:26.640 --> 01:00:27.140
+you install web applications,
+
+01:00:30.240 --> 01:00:30.440
+everything else, just when you download the
+
+01:00:31.700 --> 01:00:31.820
+source code, it's much,
+
+01:00:33.480 --> 01:00:33.980
+much smaller than any of that.
+
+01:00:37.120 --> 01:00:37.360
+So I don't know why people you know accept
+
+01:00:39.140 --> 01:00:39.640
+that it's larger than your typical package.
+
+01:00:41.400 --> 01:00:41.900
+Why there's really an issue there.
+
+01:00:44.580 --> 01:00:45.080
+[Speaker 0]: I think it's because people tend to assume
+
+01:00:47.980 --> 01:00:48.480
+that a paradigm like the 1 you're describing,
+
+01:00:51.360 --> 01:00:51.560
+which seems to be changing the way you use
+
+01:00:53.200 --> 01:00:53.480
+Emacs in a way because you're no longer
+
+01:00:55.520 --> 01:00:56.000
+thinking of as buffers as separate entities,
+
+01:00:57.520 --> 01:00:57.980
+you can tunnel between them.
+
+01:00:59.820 --> 01:01:00.180
+You know, it feels like a huge paradigm shift
+
+01:01:02.120 --> 01:01:02.320
+and you assume that the code behind it is
+
+01:01:03.880 --> 01:01:04.080
+going to be humongous as well,
+
+01:01:05.080 --> 01:01:05.380
+but it's usually not the case.
+
+01:01:07.480 --> 01:01:07.640
+It's just that the idea is very pure at the
+
+01:01:09.560 --> 01:01:10.060
+start, and the paradigm shift that it allows
+
+01:01:14.020 --> 01:01:14.120
+is also magnificent. But at the end of the
+
+01:01:15.700 --> 01:01:16.200
+day, the code is fairly simple,
+
+01:01:17.860 --> 01:01:18.360
+because it does 1 thing and it does it well.
+
+01:01:20.860 --> 01:01:21.180
+[Speaker 1]: 1 thing I noticed too,
+
+01:01:23.560 --> 01:01:23.760
+I mean I'm a big believer in turnkey kind of
+
+01:01:26.780 --> 01:01:27.180
+systems. In fact a long time ago when I built
+
+01:01:28.680 --> 01:01:29.180
+an IDE on Emacs called InfoDoc,
+
+01:01:31.980 --> 01:01:32.480
+that was delivered pre-compiled.
+
+01:01:35.760 --> 01:01:35.940
+So it's like you download it like every other
+
+01:01:39.140 --> 01:01:39.440
+app and you run it. And so I think
+
+01:01:41.980 --> 01:01:42.480
+eliminating all the friction that occurs,
+
+01:01:45.860 --> 01:01:46.360
+and you know, I just got going recently with
+
+01:01:48.860 --> 01:01:49.160
+the wonderful packages that you just
+
+01:01:50.980 --> 01:01:51.460
+mentioned, VertiCo and Consult,
+
+01:01:55.120 --> 01:01:55.320
+but they don't have a manual that covers all
+
+01:01:57.280 --> 01:01:57.780
+that. They use sort of like a cookbook,
+
+01:02:02.020 --> 01:02:02.220
+a wiki online to answer a lot of the
+
+01:02:04.380 --> 01:02:04.600
+questions that people have and everybody has
+
+01:02:05.860 --> 01:02:06.360
+to figure out their configurations,
+
+01:02:10.640 --> 01:02:10.880
+you know, to make these things all work
+
+01:02:14.180 --> 01:02:14.680
+together. We'd like to do that engineering
+
+01:02:17.080 --> 01:02:17.440
+and say here it is, you know,
+
+01:02:19.240 --> 01:02:19.500
+it's like if you want to configure it and
+
+01:02:20.920 --> 01:02:21.420
+make it your own, you can do it.
+
+01:02:24.860 --> 01:02:25.160
+But there is a default configuration that
+
+01:02:28.180 --> 01:02:28.380
+handles all the typical use cases and you can
+
+01:02:30.940 --> 01:02:31.220
+just load it up and run because it's made to
+
+01:02:35.860 --> 01:02:36.020
+use, you don't have to hack it to make it
+
+01:02:36.760 --> 01:02:37.260
+useful for you.
+
+01:02:40.380 --> 01:02:40.560
+[Speaker 0]: Yeah, it reminds me of the discussion we had
+
+01:02:42.240 --> 01:02:42.740
+with Stéphane yesterday about sane defaults.
+
+01:02:45.080 --> 01:02:45.580
+And I think the question was,
+
+01:02:48.580 --> 01:02:49.080
+Emacs should probably ship with sane defaults
+
+01:02:51.360 --> 01:02:51.740
+for people. And Stéphane's answer was,
+
+01:02:53.620 --> 01:02:53.800
+well, my sane defaults might not be the same
+
+01:02:54.720 --> 01:02:55.220
+thing as your sane defaults.
+
+01:02:57.160 --> 01:02:57.560
+And that's why I think it's important,
+
+01:02:59.020 --> 01:02:59.340
+really, to have a core set of features,
+
+01:03:00.800 --> 01:03:01.300
+be it with hyperbole of org mode,
+
+01:03:02.020 --> 01:03:02.520
+that is well-documented,
+
+01:03:05.220 --> 01:03:05.500
+as you mentioned. But what I like about this
+
+01:03:06.900 --> 01:03:07.260
+in a way, and I think hyperbole is perhaps
+
+01:03:08.800 --> 01:03:09.300
+taking more benefits of this than Org Mode,
+
+01:03:11.780 --> 01:03:12.280
+is that the self-documentation aspect of it
+
+01:03:14.340 --> 01:03:14.540
+feels like it's easier with hyperbole because
+
+01:03:16.820 --> 01:03:17.300
+you're not bound by Org Mode buffers.
+
+01:03:18.840 --> 01:03:19.340
+You can link to just about everything.
+
+01:03:23.940 --> 01:03:24.240
+And for me, this ability to self-document is
+
+01:03:26.040 --> 01:03:26.140
+well, first, very true to the philosophy of
+
+01:03:27.040 --> 01:03:27.540
+Emacs in the first place,
+
+01:03:31.400 --> 01:03:31.900
+but also opens up those resonance cycles
+
+01:03:34.040 --> 01:03:34.180
+where, oh, you get interested and then you
+
+01:03:35.320 --> 01:03:35.820
+start reading up and then the documentation
+
+01:03:37.860 --> 01:03:38.320
+is so good that it feeds into your practice
+
+01:03:40.840 --> 01:03:41.040
+and then it goes nuclear and you gain so much
+
+01:03:42.040 --> 01:03:42.540
+knowledge as a result of this.
+
+01:03:44.280 --> 01:03:44.440
+All right, Bob, we are about out of time.
+
+01:03:46.120 --> 01:03:46.280
+We only have about 1 minute until we go to
+
+01:03:47.720 --> 01:03:48.220
+the next talk. Do you have any parting words?
+
+01:03:53.360 --> 01:03:53.860
+[Speaker 1]: I do. I think, you know,
+
+01:03:56.380 --> 01:03:56.880
+the world's complex, it's getting more
+
+01:03:59.980 --> 01:04:00.480
+complex. I think that's why people use Emacs
+
+01:04:02.080 --> 01:04:02.560
+in the first place, because it's a big
+
+01:04:04.600 --> 01:04:04.920
+system. You wouldn't use it unless you wanted
+
+01:04:06.100 --> 01:04:06.600
+it to simplify your life.
+
+01:04:10.580 --> 01:04:10.760
+Hyperbole is built with the same idea in
+
+01:04:14.020 --> 01:04:14.180
+mind. You may not get it just like a lot of
+
+01:04:15.720 --> 01:04:16.020
+people don't understand when they first
+
+01:04:17.900 --> 01:04:18.400
+encounter it, but when they do understand it,
+
+01:04:20.860 --> 01:04:21.360
+they're blown away. It changes their life.
+
+01:04:24.520 --> 01:04:25.020
+You know, when you really understand implicit
+
+01:04:27.880 --> 01:04:28.100
+buttons, I think that's 1 of the things in
+
+01:04:30.480 --> 01:04:30.820
+hyperbole that can change your Emacs working
+
+01:04:33.840 --> 01:04:34.060
+life. So just give that a try and I think
+
+01:04:36.140 --> 01:04:36.640
+you'll be pleasantly surprised across time.
+
+01:04:39.720 --> 01:04:39.860
+[Speaker 0]: And thank you so much Bob.
+
+01:04:41.400 --> 01:04:41.600
+We'll be moving on to the next talk in about
+
+01:04:43.480 --> 01:04:43.620
+20 seconds so everyone see you in a bit and
+
+01:04:44.440 --> 01:04:44.940
+Bob thank you so much again.
+
+01:04:45.560 --> 01:04:46.060
+[Speaker 1]: Thanks very much. Thank you.
+
+01:04:52.800 --> 01:04:53.000
+[Speaker 0]: All right I think we are off here now,
+
+01:04:53.800 --> 01:04:53.980
+so thank you so much Bob.
+
+01:04:55.380 --> 01:04:55.540
+I'm gonna need to step out and get ready for
+
+01:04:59.100 --> 01:04:59.240
+[Speaker 1]: Yeah, do your thing. You do a great job at
+
+01:05:01.400 --> 01:05:01.760
+it. But I wanted to ask you where in London
+
+01:05:04.280 --> 01:05:04.780
+[Speaker 0]: the next talk. I'm not in London,
+
+01:05:07.360 --> 01:05:07.480
+I'm in France and I just know the time in
+
+01:05:10.240 --> 01:05:10.740
+[Speaker 1]: you are. Oh, okay, got it.
+
+01:05:12.180 --> 01:05:12.680
+Sorry, I thought you were,
+
+01:05:15.020 --> 01:05:15.520
+[Speaker 0]: London. All right, bye-bye Bob.
+
+01:05:15.860 --> 01:05:16.360
+[Speaker 1]: take care. Bye.
+
+01:05:45.080 --> 01:05:45.580
+[Speaker 0]: Silence.
+
+01:06:00.060 --> 01:06:00.560
+You
+
+01:07:00.180 --> 01:07:00.680
+[Speaker 1]: 311.
+
+01:08:15.060 --> 01:08:15.560
+[Speaker 0]: Silence.
+
+01:10:20.580 --> 01:10:20.700
+[Speaker 2]: We will read the input from yesterday and we
+
+01:10:23.560 --> 01:10:24.060
+will continue the evaluation with a different
+
+01:10:25.380 --> 01:10:25.880
+I provided in this input.
+
+01:10:32.420 --> 01:10:32.660
+So let's try to type some arbitrary value And
+
+01:10:37.920 --> 01:10:38.100
+[Speaker 0]: this value. And at the same
+
+01:10:38.100 --> 01:10:38.380
+[Speaker 2]: you see that the loop continued with time,
+
+01:10:40.580 --> 01:10:41.080
+it could easily interrupt.
+
+01:10:45.720 --> 01:10:45.980
+OK, what most annoying thing that I had
+
+01:10:47.240 --> 01:10:47.560
+previously with the usual regular
+
+01:10:50.320 --> 01:10:50.820
+implementation, then I have a quite nice
+
+01:10:53.660 --> 01:10:54.160
+Geeks API where I can build packages,
+
+01:10:55.380 --> 01:10:55.880
+systems, and other stuff.
+
+01:10:59.640 --> 01:11:00.140
+But if I evaluate this expression,
+
+01:11:05.140 --> 01:11:05.640
+I will get an error. OK.
+
+01:11:11.500 --> 01:11:11.740
+I will get an error because I don't have an
+
+01:11:12.980 --> 01:11:13.480
+appropriate environment.
+
+01:11:16.640 --> 01:11:16.800
+But what I can do, I can connect to the
+
+01:11:22.360 --> 01:11:22.660
+remote label by creating a server with
+
+01:11:25.440 --> 01:11:25.920
+xlabelListen command and connecting to it
+
+01:11:27.100 --> 01:11:27.600
+with etherconnect command.
+
+01:11:28.580 --> 01:11:28.740
+And now I
+
+01:11:29.540 --> 01:11:30.040
+[Speaker 0]: can emulate this expression.
+
+01:11:32.780 --> 01:11:33.280
+Right? Wow. Right. Whoa.
+
+01:11:39.800 --> 01:11:40.300
+Okay.
+
+01:11:46.240 --> 01:11:46.740
+[Speaker 2]: It actually doesn't matter for my example.
+
+01:11:51.820 --> 01:11:52.320
+I will explain how it doesn't work easily.
+
+01:11:54.940 --> 01:11:55.400
+This is a long running process which prints
+
+01:11:57.980 --> 01:11:58.280
+something and it can take up to a few
+
+01:12:00.980 --> 01:12:01.160
+minutes. And for the whole few minutes I
+
+01:12:04.960 --> 01:12:05.440
+don't see any results the same as with this
+
+01:12:07.760 --> 01:12:08.000
+infinite loop, which brings the STD out,
+
+01:12:09.960 --> 01:12:10.460
+but I don't see anything interactive.
+
+01:12:15.720 --> 01:12:16.120
+And with array, I can run the evaluation of
+
+01:12:22.120 --> 01:12:22.620
+the same expression. And you will see
+
+01:12:27.040 --> 01:12:27.440
+instantly that STTR output is presented here
+
+01:12:29.060 --> 01:12:29.560
+in slightly yellowish color.
+
+01:12:32.200 --> 01:12:32.560
+And I can interrupt the evaluation if I don't
+
+01:12:35.080 --> 01:12:35.580
+want to wait until it's finished.
+
+01:12:39.560 --> 01:12:39.920
+And just after that, I can evaluate another
+
+01:12:48.340 --> 01:12:48.840
+[Speaker 0]: that's
+
+01:12:54.520 --> 01:12:55.020
+[Speaker 2]: value. So cool. And let's see 1 more thing.
+
+01:12:56.320 --> 01:12:56.820
+We have an infinite loop.
+
+01:12:59.060 --> 01:12:59.560
+And we have some completion here.
+
+01:13:00.700 --> 01:13:01.200
+And completion still works.
+
+01:13:05.740 --> 01:13:05.900
+Very nice. While the infinite loop is
+
+01:13:12.160 --> 01:13:12.440
+[Speaker 0]: OK. Actually, it took
+
+01:13:15.060 --> 01:13:15.560
+[Speaker 2]: running. me around 2 months of full-time work
+
+01:13:19.540 --> 01:13:19.740
+under my own savings. And you can support and
+
+01:13:22.800 --> 01:13:23.040
+help to the project using WebIn Collective or
+
+01:13:24.160 --> 01:13:24.660
+by contributing on SourceHub.
+
+01:13:30.180 --> 01:13:30.420
+The future steps for the project includes an
+
+01:13:32.980 --> 01:13:33.120
+experimental workflow where you have a
+
+01:13:35.580 --> 01:13:36.060
+multiple simultaneous evaluation in different
+
+01:13:37.060 --> 01:13:37.560
+contexts. For example,
+
+01:13:40.640 --> 01:13:41.140
+you have fibers, you have goblins,
+
+01:13:45.720 --> 01:13:46.000
+you have some HTTP server or some other
+
+01:13:48.340 --> 01:13:48.840
+thing, and you want to run all of them
+
+01:13:54.140 --> 01:13:54.640
+independently in slightly isolated sessions,
+
+01:13:59.280 --> 01:13:59.540
+and you want to have ability to still
+
+01:14:00.320 --> 01:14:00.720
+interact with them. For example,
+
+01:14:03.340 --> 01:14:03.800
+if they require standard input or something
+
+01:14:07.540 --> 01:14:08.040
+else you want to be able to provide.
+
+01:14:12.040 --> 01:14:12.320
+You want to see the STD out of those
+
+01:14:13.780 --> 01:14:14.280
+long-running processors and so on.
+
+01:14:19.780 --> 01:14:20.280
+The second thing is 3D integration for better
+
+01:14:22.000 --> 01:14:22.500
+syntax highlighting, code navigation,
+
+01:14:26.680 --> 01:14:27.180
+and other features. And after that,
+
+01:14:30.140 --> 01:14:30.640
+probably we will do a full-fledged debugger
+
+01:14:35.760 --> 01:14:36.020
+so you can jump expressions 1 by 1 and see
+
+01:14:39.380 --> 01:14:39.880
+the results and see some intermediate values
+
+01:14:41.880 --> 01:14:42.380
+during the evaluation.
+
+01:14:44.960 --> 01:14:45.020
+And it's very possible because nrecl is a
+
+01:14:46.760 --> 01:14:46.960
+very extensible protocol and you can
+
+01:14:49.480 --> 01:14:49.980
+implement whatever you want on top of it.
+
+01:14:55.380 --> 01:14:55.860
+I will answer 2 probably very frequent
+
+01:14:57.660 --> 01:14:58.000
+questions. Does it support other Scheme
+
+01:15:00.520 --> 01:15:01.020
+implementations? At the moment,
+
+01:15:04.200 --> 01:15:04.360
+it doesn't. But the Scheme implementation is
+
+01:15:07.340 --> 01:15:07.840
+not restricted. You have a server which
+
+01:15:09.520 --> 01:15:09.920
+implemented in your language,
+
+01:15:10.640 --> 01:15:11.140
+and you have a client,
+
+01:15:16.320 --> 01:15:16.620
+in our case, Array, which communicates with
+
+01:15:19.860 --> 01:15:20.280
+this protocol. So if you implement an Ripple
+
+01:15:21.300 --> 01:15:21.800
+server in a different language,
+
+01:15:25.460 --> 01:15:25.840
+it should work with already implemented Array
+
+01:15:32.180 --> 01:15:32.500
+client. And is it possible to use the same
+
+01:15:34.200 --> 01:15:34.640
+functionality in other text editors,
+
+01:15:35.920 --> 01:15:36.340
+for example, in VS Code,
+
+01:15:41.200 --> 01:15:41.420
+Vim, whatever, yes, it's possible and the
+
+01:15:43.860 --> 01:15:44.240
+case is similar here. You have already
+
+01:15:46.920 --> 01:15:47.220
+implemented an EnableServer and you can write
+
+01:15:50.500 --> 01:15:51.000
+your own and it will work.
+
+01:15:55.020 --> 01:15:55.260
+I would like to thank the authors and
+
+01:15:57.260 --> 01:15:57.760
+maintainers and contributors of Kyle,
+
+01:15:59.200 --> 01:15:59.700
+Geyser, Cider, Closure,
+
+01:16:03.260 --> 01:16:03.760
+and Emacs, and all other people who somehow
+
+01:16:07.360 --> 01:16:07.860
+related to the work on those projects
+
+01:16:10.240 --> 01:16:10.740
+involved in this talk.
+
+01:16:13.320 --> 01:16:13.480
+And I hope the scheme programming will be
+
+01:16:16.320 --> 01:16:16.820
+enjoyable. If you want to contact me,
+
+01:16:19.600 --> 01:16:19.900
+join TrojanRC channel at RepairerChat or drop
+
+01:16:21.820 --> 01:16:22.260
+me a message via email or feed the words
+
+01:16:26.600 --> 01:16:26.820
+using Andrew at TrojanHackle and I will see
+
+01:16:28.680 --> 01:16:29.180
+you in a bit in Kuwait session.
+
+01:16:57.220 --> 01:16:57.440
+[Speaker 3]: Hey folks. So this was a great talk by Andrew
+
+01:16:58.860 --> 01:16:59.340
+Tropan. Unfortunately,
+
+01:17:02.280 --> 01:17:02.780
+Andrew isn't around just yet.
+
+01:17:04.480 --> 01:17:04.680
+We are still waiting for him if he does show
+
+01:17:08.180 --> 01:17:08.680
+up but in the meantime please do feel free to
+
+01:17:11.480 --> 01:17:11.980
+continue posting your questions on the path
+
+01:17:14.580 --> 01:17:15.080
+and if Andrew does show up here of course
+
+01:17:17.340 --> 01:17:17.640
+We'll take them otherwise we will forward
+
+01:17:19.700 --> 01:17:19.920
+them to Andrew so that he could answer them
+
+01:17:21.360 --> 01:17:21.860
+after the conference. Thank you
+
+01:17:45.060 --> 01:17:45.560
+[Speaker 0]: You
+
+01:18:00.080 --> 01:18:00.580
+Silence.
+
+01:18:15.060 --> 01:18:15.560
+Silence. Silence.
+
+01:19:07.760 --> 01:19:08.260
+[Speaker 3]: I see 2 questions on the panel already.
+
+01:19:14.280 --> 01:19:14.600
+Let's see. 1 asking how much Android uses
+
+01:19:17.720 --> 01:19:18.040
+these repos remotely or versus on their
+
+01:19:20.640 --> 01:19:20.800
+desktop. And now they're asking if this can
+
+01:19:22.760 --> 01:19:23.260
+be integrated with EGLOT.
+
+01:19:26.400 --> 01:19:26.580
+And I will note that it is very cool that
+
+01:19:28.200 --> 01:19:28.700
+this year we've had so many talks on repos.
+
+01:19:32.320 --> 01:19:32.680
+Just goes to show how powerful Emacs is and
+
+01:19:34.540 --> 01:19:34.640
+just how much or how far you can push it and
+
+01:19:44.760 --> 01:19:45.020
+how much you can do So see someone asking on
+
+01:19:49.660 --> 01:19:50.160
+IRC If or how many people use Given Geeks
+
+01:19:52.960 --> 01:19:53.460
+Since we are talking about scheme,
+
+01:19:56.980 --> 01:19:57.260
+GivenGeeks is a great platform slash
+
+01:20:01.520 --> 01:20:01.700
+operating system or distro for for your
+
+01:20:03.480 --> 01:20:03.980
+desktops but also for servers and such.
+
+01:20:04.920 --> 01:20:05.380
+They do some impressive,
+
+01:20:09.400 --> 01:20:09.900
+amazing work. And it's pretty much all done
+
+01:20:10.900 --> 01:20:11.400
+in the Google Cloud schema.
+
+01:20:13.120 --> 01:20:13.620
+So very cool stuff.
+
+01:20:55.520 --> 01:20:56.020
+[Speaker 0]: Silence. Silence.
+
+01:21:11.040 --> 01:21:11.540
+Silence.
+
+01:21:30.060 --> 01:21:30.560
+You
+
+01:22:11.520 --> 01:22:11.680
+[Speaker 3]: I see another interesting question on the
+
+01:22:15.020 --> 01:22:15.520
+pad. How hard is it to add support for
+
+01:22:16.560 --> 01:22:17.060
+something relevant in Guile?
+
+01:22:19.600 --> 01:22:19.760
+And if it makes sense to contribute at this
+
+01:22:20.500 --> 01:22:21.000
+early stage of development.
+
+01:22:23.520 --> 01:22:23.860
+They said that they've written several
+
+01:22:25.080 --> 01:22:25.440
+packages for chicken skin before,
+
+01:22:26.960 --> 01:22:27.460
+and they would like to try this 1 as well.
+
+01:23:00.260 --> 01:23:00.760
+[Speaker 0]: You you
+
+01:23:46.380 --> 01:23:46.880
+[Speaker 3]: Okay.
+
+01:24:17.980 --> 01:24:18.480
+I guess since Andrew isn't still here,
+
+01:24:20.740 --> 01:24:21.100
+and there was some chatter about Giddu Geeks
+
+01:24:23.960 --> 01:24:24.460
+in the chat, maybe it might be nice for me to
+
+01:24:26.980 --> 01:24:27.100
+share my screen and plug Giddu Geeks for a
+
+01:24:29.600 --> 01:24:29.700
+little bit and introduce it,
+
+01:24:32.420 --> 01:24:32.600
+or at least show its website to folks who may
+
+01:24:34.400 --> 01:24:34.600
+not have seen it yet. So I'm going to try and
+
+01:24:35.000 --> 01:24:35.500
+do that now.
+
+01:25:11.320 --> 01:25:11.820
+OK, let's see if this works.
+
+01:25:25.080 --> 01:25:25.580
+OK, so this is GnuGeeks' website.
+
+01:25:26.580 --> 01:25:27.080
+You can go to geeks.gnu.org
+
+01:25:30.320 --> 01:25:30.800
+and they introduce it at the top.
+
+01:25:35.020 --> 01:25:35.520
+So it's a wholly free operating system or
+
+01:25:38.600 --> 01:25:38.780
+distribution of Gini Linux Meaning that it
+
+01:25:41.680 --> 01:25:41.920
+only has free software packaged and no
+
+01:25:44.220 --> 01:25:44.440
+non-free packages. So it is endorsed by the
+
+01:25:47.900 --> 01:25:48.040
+FSF on the Gini project As someone said in
+
+01:25:49.320 --> 01:25:49.820
+the chat, it's kind of like Nix,
+
+01:25:52.960 --> 01:25:53.460
+but instead built on GigaGallop scheme.
+
+01:25:56.880 --> 01:25:57.380
+It has transactional upgrades and rollbacks,
+
+01:26:01.780 --> 01:26:01.940
+so if you do upgrade your system and let's
+
+01:26:02.720 --> 01:26:02.980
+say in the middle of it,
+
+01:26:04.740 --> 01:26:05.240
+your hardware fails or your power goes out,
+
+01:26:08.080 --> 01:26:08.240
+the likelihood of things being corrupted is
+
+01:26:10.400 --> 01:26:10.900
+very low because the upgrade is essentially
+
+01:26:13.220 --> 01:26:13.720
+prepared like in the background.
+
+01:26:15.660 --> 01:26:16.160
+And then pretty much atomically,
+
+01:26:18.340 --> 01:26:18.840
+the system is switched to it.
+
+01:26:22.840 --> 01:26:23.080
+And also if there is some kind of Sorry,
+
+01:26:23.940 --> 01:26:24.440
+I'm losing my voice here.
+
+01:26:26.320 --> 01:26:26.660
+If there is some kind of issue that makes
+
+01:26:27.340 --> 01:26:27.840
+your system unbootable,
+
+01:26:31.100 --> 01:26:31.460
+you could always go back to booting the
+
+01:26:34.440 --> 01:26:34.640
+previously, the previous revision of your
+
+01:26:37.200 --> 01:26:37.360
+system when you restart in the
+
+01:26:47.360 --> 01:26:47.800
+GrubBootLoader. So they have a nice blog
+
+01:26:50.280 --> 01:26:50.500
+where they regularly post updates and what's
+
+01:26:52.360 --> 01:26:52.540
+new in the project. You can go check that
+
+01:26:57.160 --> 01:26:57.660
+out. They also have a packages archive where
+
+01:27:00.480 --> 01:27:00.660
+you can see a list of all the software that
+
+01:27:02.380 --> 01:27:02.880
+has been packaged for Pinookies.
+
+01:27:05.140 --> 01:27:05.640
+It is an impressive list.
+
+01:28:44.460 --> 01:28:44.960
+[Speaker 0]: You
+
+01:30:30.060 --> 01:30:30.560
+Silence.
+
+01:32:40.080 --> 01:32:40.580
+And obviously you can run kines in it.
+
+01:32:50.640 --> 01:32:51.140
+There is mouse support.
+
+01:33:02.580 --> 01:33:03.080
+And there is true color support,
+
+01:33:08.040 --> 01:33:08.180
+so you can show any color in a tagline as
+
+01:33:09.900 --> 01:33:10.400
+long as your main display supports it.
+
+01:33:17.660 --> 01:33:18.160
+And then there is shell integration.
+
+01:33:20.740 --> 01:33:21.240
+For example, directory tracking.
+
+01:33:28.697 --> 01:33:29.197
+Like if I can switch to some other directory
+
+01:33:31.420 --> 01:33:31.920
+and Thank you.
diff --git a/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt
new file mode 100644
index 00000000..2f7b316a
--- /dev/null
+++ b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt
@@ -0,0 +1,1595 @@
+WEBVTT
+
+
+00:00:12.660 --> 00:00:13.160
+[Speaker 0]: I guess we are now live.
+
+00:00:15.360 --> 00:00:15.860
+So Joseph, thanks for being here.
+
+00:00:16.960 --> 00:00:17.460
+Thanks for talking to the hyperdrive.
+
+00:00:22.240 --> 00:00:22.440
+We already had some, or we already have a lot
+
+00:00:24.360 --> 00:00:24.619
+of questions here. And I guess I would start
+
+00:00:26.040 --> 00:00:26.540
+with, let's call it the difficult,
+
+00:00:29.119 --> 00:00:29.439
+the most difficult 1. So when you were
+
+00:00:30.820 --> 00:00:31.320
+developing hyperdrive for your colleague,
+
+00:00:34.760 --> 00:00:34.920
+what do you, or what have you learned the
+
+00:00:34.920 --> 00:00:35.420
+most?
+
+00:00:43.080 --> 00:00:43.320
+[Speaker 1]: I have learned how much faster and more
+
+00:00:46.360 --> 00:00:46.620
+enjoyable the development of this project can
+
+00:00:51.540 --> 00:00:52.040
+be with talented people working by my side,
+
+00:00:55.960 --> 00:00:56.260
+like Jonas and Adam and Prat and Mo,
+
+00:00:58.100 --> 00:00:58.260
+it's been really a pleasure to work with
+
+00:00:58.440 --> 00:00:58.940
+these folks.
+
+00:01:04.959 --> 00:01:05.140
+[Speaker 0]: So you have started at first on your own and
+
+00:01:07.400 --> 00:01:07.760
+then probably pushed it somewhere in open
+
+00:01:10.320 --> 00:01:10.820
+source or how did it develop,
+
+00:01:11.740 --> 00:01:12.240
+your development experience?
+
+00:01:15.920 --> 00:01:16.160
+[Speaker 1]: A few years ago, we started looking into
+
+00:01:21.960 --> 00:01:22.200
+using peer-to-peer technology for sharing all
+
+00:01:25.080 --> 00:01:25.360
+kinds of information. And we came across Move
+
+00:01:29.280 --> 00:01:29.440
+SignWeaver, who was recommended to us by a
+
+00:01:32.560 --> 00:01:32.720
+mutual friend. And we started working with
+
+00:01:33.840 --> 00:01:34.340
+Move, and then about a year ago,
+
+00:01:37.060 --> 00:01:37.560
+we started looking into using Emacs,
+
+00:01:40.020 --> 00:01:40.460
+the peer-to-peer software,
+
+00:01:43.520 --> 00:01:43.780
+so that we could make use of all of the
+
+00:01:46.340 --> 00:01:46.500
+powerful things that Emacs already does with
+
+00:01:47.780 --> 00:01:48.280
+org mode and other packages.
+
+00:01:51.560 --> 00:01:51.760
+And then we started working with Adam and
+
+00:01:52.320 --> 00:01:52.820
+Pratt and Jonas.
+
+00:01:54.280 --> 00:01:54.780
+[Speaker 2]: Yes.
+
+00:01:59.880 --> 00:02:00.380
+[Speaker 0]: So we are skipping to the next question.
+
+00:02:03.700 --> 00:02:04.200
+So to read it out, I use multiple computers
+
+00:02:06.200 --> 00:02:06.480
+and my partner also would like access to my
+
+00:02:08.680 --> 00:02:09.139
+notes. So, 2 questions at first.
+
+00:02:12.440 --> 00:02:12.720
+First 1, how well would this work with using
+
+00:02:15.060 --> 00:02:15.300
+this to edit my Zettelkasten hyperdrive using
+
+00:02:15.660 --> 00:02:16.160
+multiple computers?
+
+00:02:21.260 --> 00:02:21.760
+[Speaker 1]: Hyperdrive is single writer currently.
+
+00:02:24.140 --> 00:02:24.280
+So what that means is that if you have a
+
+00:02:25.080 --> 00:02:25.580
+hyperdrive that you've created,
+
+00:02:28.320 --> 00:02:28.820
+you're the only 1 who can make changes to it.
+
+00:02:31.560 --> 00:02:32.060
+And that's limited right now to editing 1
+
+00:02:33.240 --> 00:02:33.740
+hyperdrive from 1 machine.
+
+00:02:38.240 --> 00:02:38.740
+In theory, you could use the same private key
+
+00:02:40.240 --> 00:02:40.680
+and write to it from multiple machines,
+
+00:02:43.520 --> 00:02:44.020
+but you would have to make sure that you sync
+
+00:02:46.300 --> 00:02:46.520
+it on both machines and didn't make
+
+00:02:48.160 --> 00:02:48.480
+concurrent writes because then you would fork
+
+00:02:49.840 --> 00:02:50.340
+the history of your hyperdrive,
+
+00:02:51.020 --> 00:02:51.520
+and that would be bad.
+
+00:02:57.740 --> 00:02:57.980
+But we've spent a lot of time making links to
+
+00:02:59.780 --> 00:03:00.280
+hyperdrives work well,
+
+00:03:02.160 --> 00:03:02.360
+relative links within hyperdrives to other
+
+00:03:03.560 --> 00:03:03.840
+files inside of your drive.
+
+00:03:05.520 --> 00:03:06.020
+So you should be able to,
+
+00:03:10.120 --> 00:03:10.520
+with some exceptions, just take your personal
+
+00:03:13.360 --> 00:03:13.780
+information management set of org files or
+
+00:03:14.760 --> 00:03:15.260
+whatever it is that you have,
+
+00:03:18.160 --> 00:03:18.260
+and upload them into a hyperdrive if all of
+
+00:03:22.740 --> 00:03:23.100
+that is publicly available or would be good
+
+00:03:27.260 --> 00:03:27.400
+to share publicly. And you can make that
+
+00:03:28.940 --> 00:03:29.440
+available for other people to link to.
+
+00:03:30.640 --> 00:03:30.840
+So you can have multiple different
+
+00:03:32.040 --> 00:03:32.540
+hyperdrives that link to 1 another.
+
+00:03:35.600 --> 00:03:36.100
+[Speaker 0]: So it's like a huge network of hyperdrives
+
+00:03:38.000 --> 00:03:38.500
+connected to each other in some way.
+
+00:03:39.140 --> 00:03:39.640
+[Speaker 1]: Yeah.
+
+00:03:41.120 --> 00:03:41.620
+[Speaker 0]: So that's kind of neat and kind of cool.
+
+00:03:44.240 --> 00:03:44.480
+There was a follow-up question or the second
+
+00:03:46.780 --> 00:03:47.100
+part of the question. Okay,
+
+00:03:48.860 --> 00:03:49.200
+then using the same hyperdrive is probably
+
+00:03:51.820 --> 00:03:52.060
+not possible, but interlinking would be the
+
+00:03:57.500 --> 00:03:57.840
+best way to do it. There was a question
+
+00:03:59.540 --> 00:03:59.820
+concerning how they should install it.
+
+00:04:01.160 --> 00:04:01.440
+So What would be a good way of getting
+
+00:04:03.580 --> 00:04:04.080
+hyperdrives if you do not want to install npm
+
+00:04:06.460 --> 00:04:06.740
+and have a binary? Could you compile it with
+
+00:04:08.300 --> 00:04:08.800
+denner or rusk or zig or go?
+
+00:04:10.960 --> 00:04:11.120
+CLI alternative tool, I would prefer to
+
+00:04:11.840 --> 00:04:12.340
+download a single binary.
+
+00:04:17.420 --> 00:04:17.720
+[Speaker 1]: There's something that Jonas was playing
+
+00:04:20.459 --> 00:04:20.800
+around with using Geeks to install Hyper
+
+00:04:22.860 --> 00:04:23.360
+Gateway. So the way that HyperDrive.el,
+
+00:04:26.880 --> 00:04:27.380
+the Emacs package, works right now is similar
+
+00:04:30.300 --> 00:04:30.720
+to the way that the transmission Emacs client
+
+00:04:34.200 --> 00:04:34.640
+for BitTorrent works, where you have a client
+
+00:04:37.320 --> 00:04:37.480
+in Emacs that connects to a daemon that is a
+
+00:04:39.120 --> 00:04:39.280
+separate process that's running on your
+
+00:04:41.820 --> 00:04:42.320
+machine, the transmission daemon.
+
+00:04:43.500 --> 00:04:44.000
+But in this case, we have HyperGateway,
+
+00:04:46.060 --> 00:04:46.560
+which is running as a daemon on your machine.
+
+00:04:48.180 --> 00:04:48.680
+And then hyperdrive.el
+
+00:04:51.020 --> 00:04:51.520
+connects to that daemon and sends requests,
+
+00:04:53.520 --> 00:04:53.620
+and all of the hyperdrive stuff under the
+
+00:04:55.880 --> 00:04:56.380
+hood happens with her gateway.
+
+00:04:57.940 --> 00:04:58.440
+But so that package can,
+
+00:05:00.280 --> 00:05:00.460
+or hypergateway, the program can be
+
+00:05:02.900 --> 00:05:03.080
+installed, The easiest way is to just
+
+00:05:04.400 --> 00:05:04.900
+download it from the GitHub releases.
+
+00:05:07.060 --> 00:05:07.560
+You could also use NPM to install it.
+
+00:05:09.520 --> 00:05:09.680
+And then the third option that we've been
+
+00:05:12.920 --> 00:05:13.040
+playing around with is Jonas was writing a
+
+00:05:14.540 --> 00:05:15.040
+little script to install it using Geeks,
+
+00:05:18.340 --> 00:05:18.840
+since Geeks now comes with Node 18.
+
+00:05:20.740 --> 00:05:20.940
+And so you should be able to install it using
+
+00:05:20.940 --> 00:05:21.440
+Geeks.
+
+00:05:25.320 --> 00:05:25.520
+[Speaker 0]: Right, thank you. We have 2 people here
+
+00:05:26.100 --> 00:05:26.600
+joined with microphone.
+
+00:05:30.240 --> 00:05:30.560
+Do we have now any question to Joseph or just
+
+00:05:32.060 --> 00:05:32.560
+here for chilling out.
+
+00:05:41.820 --> 00:05:42.260
+I guess it's a no. Plasma,
+
+00:05:42.260 --> 00:05:42.760
+yeah.
+
+00:05:46.120 --> 00:05:46.260
+[Speaker 3]: What about using, having some of the
+
+00:05:47.960 --> 00:05:48.460
+information being private in the hyperdrives.
+
+00:05:54.240 --> 00:05:54.400
+[Speaker 1]: That's not what we have been focusing on at
+
+00:05:55.240 --> 00:05:55.640
+this point. At this point,
+
+00:05:57.340 --> 00:05:57.660
+what we've been working on is mainly using
+
+00:06:02.180 --> 00:06:02.680
+hyperdrives for a public forum type tool.
+
+00:06:06.420 --> 00:06:06.560
+But you could encrypt those files if you
+
+00:06:09.340 --> 00:06:09.840
+wanted to. You can also just,
+
+00:06:13.660 --> 00:06:14.160
+a poor man's security would just be to share
+
+00:06:16.660 --> 00:06:16.960
+your HyperDrive link only with those people
+
+00:06:19.060 --> 00:06:19.560
+that you want to have access to your drive.
+
+00:06:21.820 --> 00:06:22.240
+But the way that it works right now is anyone
+
+00:06:23.800 --> 00:06:24.280
+who has the link to a hyperdrive can access
+
+00:06:26.040 --> 00:06:26.420
+its content. So long as there are peers
+
+00:06:28.740 --> 00:06:28.900
+available on the network who can serve it to
+
+00:06:28.900 --> 00:06:29.400
+you.
+
+00:06:37.440 --> 00:06:37.660
+[Speaker 0]: Any follow up question from your side,
+
+00:06:37.660 --> 00:06:38.160
+Plasma?
+
+00:06:46.720 --> 00:06:47.220
+[Speaker 3]: I had 1, I'll just have to re-remember it.
+
+00:06:55.240 --> 00:06:55.600
+[Speaker 0]: If you remember it, just feel free to
+
+00:06:56.000 --> 00:06:56.500
+interrupt me.
+
+00:06:58.980 --> 00:06:59.220
+[Speaker 3]: What about working? I've looked at this
+
+00:07:03.120 --> 00:07:03.480
+before. What about, if I remember correctly,
+
+00:07:04.920 --> 00:07:05.220
+it doesn't do as well with large files,
+
+00:07:09.060 --> 00:07:09.520
+so if you're going to store 200 gigs of video
+
+00:07:12.180 --> 00:07:12.520
+files, stuff like IPFS works a lot better,
+
+00:07:15.200 --> 00:07:15.480
+or BitTorrent. This is,
+
+00:07:17.120 --> 00:07:17.620
+are you, were you using the,
+
+00:07:21.980 --> 00:07:22.300
+any way of using multiple protocols for stuff
+
+00:07:25.560 --> 00:07:25.800
+like that? Or what were you doing with,
+
+00:07:27.340 --> 00:07:27.480
+or were you just doing the small files with
+
+00:07:28.680 --> 00:07:29.180
+the same protocol? Or
+
+00:07:34.440 --> 00:07:34.920
+[Speaker 1]: I would love to see an IPFS client in Emacs
+
+00:07:37.260 --> 00:07:37.700
+as well that could interface with Kubo or
+
+00:07:40.040 --> 00:07:40.240
+some other IPFS daemon and I think that those
+
+00:07:41.120 --> 00:07:41.620
+could work really well together.
+
+00:07:45.680 --> 00:07:45.860
+We mostly have been playing around with
+
+00:07:47.240 --> 00:07:47.740
+sharing relatively small files,
+
+00:07:52.120 --> 00:07:52.240
+up to hundreds of megabytes or maybe a
+
+00:07:55.240 --> 00:07:55.640
+gigabyte. We haven't played around yet with
+
+00:07:57.380 --> 00:07:57.880
+hyperdrive.el, the Emacs client,
+
+00:07:59.240 --> 00:07:59.740
+testing that with HyperGateway.
+
+00:08:04.020 --> 00:08:04.160
+But there may be other experiments that have
+
+00:08:05.880 --> 00:08:06.380
+been done that show that that works well.
+
+00:08:10.880 --> 00:08:11.320
+The main thing is that IPFS uses content
+
+00:08:14.820 --> 00:08:15.060
+addressability to reduce duplication of the
+
+00:08:16.620 --> 00:08:17.120
+content. Whereas in HyperDrive,
+
+00:08:20.140 --> 00:08:20.320
+if you upload the same file with the same
+
+00:08:23.160 --> 00:08:23.620
+contents twice, now you have double the
+
+00:08:25.120 --> 00:08:25.580
+content being stored in your HyperDrive.
+
+00:08:26.040 --> 00:08:26.540
+It's not deduplicated.
+
+00:08:30.800 --> 00:08:31.300
+You can always clear out part of the history
+
+00:08:36.340 --> 00:08:36.659
+of your hyperdrive But IPFS has really good
+
+00:08:39.140 --> 00:08:39.640
+built-in deduplication whereas hyperdrive
+
+00:08:39.860 --> 00:08:40.360
+does not
+
+00:08:44.159 --> 00:08:44.540
+[Speaker 4]: I have a question.
+
+00:08:47.440 --> 00:08:47.580
+[Speaker 3]: What about like commenting on other like if
+
+00:08:50.140 --> 00:08:50.600
+you have a couple of different Hypercore
+
+00:08:53.900 --> 00:08:54.220
+blogs, what about like commenting between
+
+00:08:56.680 --> 00:08:57.040
+them? Like you have some people who have a
+
+00:08:59.280 --> 00:08:59.640
+commenting form on Reddit for their blog
+
+00:08:59.640 --> 00:09:00.140
+posts.
+
+00:09:04.640 --> 00:09:04.760
+[Speaker 1]: So Move SignWeaver has been doing a lot of
+
+00:09:07.880 --> 00:09:08.380
+work recently with the distributed press API
+
+00:09:12.040 --> 00:09:12.540
+to integrate ActivityPub with these
+
+00:09:14.120 --> 00:09:14.620
+peer-to-peer technologies.
+
+00:09:17.980 --> 00:09:18.240
+Move can give you more information about
+
+00:09:22.120 --> 00:09:22.440
+that. But there is another feature that we'd
+
+00:09:23.400 --> 00:09:23.900
+like to add to hyperdrive.el,
+
+00:09:29.140 --> 00:09:29.640
+which is peer discovery using the swarming
+
+00:09:30.600 --> 00:09:31.100
+feature that HyperCore,
+
+00:09:34.600 --> 00:09:35.100
+HyperSWARM offers, where you'd be able to say
+
+00:09:38.500 --> 00:09:38.660
+that my node, my peer-to-peer node is
+
+00:09:41.640 --> 00:09:41.840
+interested in Emacs and free software as
+
+00:09:43.100 --> 00:09:43.320
+topics. And those would be 2 different
+
+00:09:45.060 --> 00:09:45.300
+topics. I would advertise on the network that
+
+00:09:46.240 --> 00:09:46.740
+I'm interested in those topics.
+
+00:09:49.120 --> 00:09:49.480
+And I would be able to discover other peers
+
+00:09:52.040 --> 00:09:52.200
+on the network who have also advertised that
+
+00:09:53.440 --> 00:09:53.940
+they're interested in those same topics.
+
+00:09:56.040 --> 00:09:56.320
+And then they would tell me,
+
+00:09:59.260 --> 00:09:59.760
+hey, here's the public key of my hyperdrive.
+
+00:10:01.820 --> 00:10:02.320
+Come check it out. I have posted information
+
+00:10:04.300 --> 00:10:04.540
+about those topics. And so in that way,
+
+00:10:06.860 --> 00:10:07.360
+you'd be able to, in a distributed fashion,
+
+00:10:09.660 --> 00:10:09.800
+discover other peers on the network who are
+
+00:10:11.240 --> 00:10:11.600
+interested in topics that you're interested
+
+00:10:11.600 --> 00:10:12.100
+in.
+
+00:10:16.780 --> 00:10:16.960
+[Speaker 3]: Something that would be useful in addition to
+
+00:10:19.600 --> 00:10:20.100
+that idea is like if you had your emacs
+
+00:10:25.560 --> 00:10:25.680
+Zettelkasten Publish like let's say you have
+
+00:10:27.860 --> 00:10:28.140
+some private data You make sure that that's
+
+00:10:29.800 --> 00:10:30.060
+scrubbed out before it goes to your hyper
+
+00:10:31.760 --> 00:10:32.260
+core and then you have another part of it
+
+00:10:35.540 --> 00:10:35.940
+that gets turned into a website for it's also
+
+00:10:38.040 --> 00:10:38.240
+given to other hyper core clients but you'd
+
+00:10:40.120 --> 00:10:40.620
+rather get the emacs users the org documents
+
+00:10:44.760 --> 00:10:44.920
+then you also publish some of them on a
+
+00:10:48.680 --> 00:10:48.840
+website so everybody as much people can get
+
+00:10:53.560 --> 00:10:53.960
+it as possible. And then a way of figuring
+
+00:10:55.640 --> 00:10:56.140
+out who you'd want to do,
+
+00:10:57.780 --> 00:10:58.180
+or if you're an Emacs user,
+
+00:10:59.860 --> 00:11:00.040
+maybe figure out that they're all related to
+
+00:11:01.440 --> 00:11:01.640
+each other, but you want to get the art mode
+
+00:11:03.080 --> 00:11:03.580
+documents because you're using EMAX.
+
+00:11:05.900 --> 00:11:06.400
+Yeah.
+
+00:11:10.360 --> 00:11:10.760
+[Speaker 0]: Maybe a side note, we have 4 minutes here on
+
+00:11:12.040 --> 00:11:12.400
+before we switch into the next track,
+
+00:11:13.200 --> 00:11:13.700
+just to let you know.
+
+00:11:17.900 --> 00:11:18.400
+[Speaker 1]: Thank you. So the hyper drive mirror feature
+
+00:11:21.220 --> 00:11:21.720
+that we added, would allow you to selectively
+
+00:11:24.840 --> 00:11:24.960
+choose which files you want to share in a
+
+00:11:28.500 --> 00:11:28.780
+hyperdrive. So, with Prot's denote file
+
+00:11:30.660 --> 00:11:31.000
+naming scheme or Carl Voigt's file tags
+
+00:11:33.600 --> 00:11:33.760
+naming scheme, you could just specify a
+
+00:11:35.940 --> 00:11:36.140
+regular expression. And you could say,
+
+00:11:40.140 --> 00:11:40.460
+I want to share out of my directory of org
+
+00:11:42.560 --> 00:11:42.740
+files, I want to share only those files that
+
+00:11:44.220 --> 00:11:44.720
+have been tagged as public,
+
+00:11:47.320 --> 00:11:47.520
+or only those files that have been tagged as
+
+00:11:49.680 --> 00:11:49.840
+emacs and then only those ones would get
+
+00:11:50.720 --> 00:11:51.220
+uploaded into your hyperdrive
+
+00:11:54.280 --> 00:11:54.560
+[Speaker 3]: or exclude all in any of the ones that say
+
+00:11:54.560 --> 00:11:55.060
+private
+
+00:12:01.620 --> 00:12:02.120
+[Speaker 0]: yep mike had a question
+
+00:12:05.220 --> 00:12:05.720
+[Speaker 4]: yeah I have a question for the hyperdrive.
+
+00:12:08.520 --> 00:12:08.940
+So I just maybe I missed it and you haven't
+
+00:12:09.340 --> 00:12:09.840
+put a link.
+
+00:12:16.200 --> 00:12:16.700
+[Speaker 1]: Oh, Mikhail, we can't hear you.
+
+00:12:22.660 --> 00:12:23.160
+[Speaker 3]: Heard you for a second.
+
+00:12:28.440 --> 00:12:28.940
+[Speaker 1]: Yes?
+
+00:12:29.640 --> 00:12:30.040
+[Speaker 4]: Can someone hear me? Okay,
+
+00:12:31.200 --> 00:12:31.400
+I have no idea what happened to my
+
+00:12:32.480 --> 00:12:32.980
+microphone, but now it's back.
+
+00:12:34.760 --> 00:12:34.920
+[Speaker 3]: Now we can. You can see the microphone on the
+
+00:12:35.840 --> 00:12:36.340
+top of the screen. So
+
+00:12:38.940 --> 00:12:39.080
+[Speaker 4]: yes, thank you. Okay. I have a question to
+
+00:12:41.520 --> 00:12:41.720
+hyperdrive. Is the hyperdrive a find on the
+
+00:12:46.160 --> 00:12:46.320
+hole punch point, point T O hole Or is it
+
+00:12:47.020 --> 00:12:47.520
+just another hyperdrive?
+
+00:12:51.260 --> 00:12:51.760
+[Speaker 1]: That's exactly the project that we're using.
+
+00:12:54.520 --> 00:12:55.020
+So the HolePunch team has released hyperdrive
+
+00:12:59.340 --> 00:12:59.620
+and other hyper core libraries as free
+
+00:13:01.880 --> 00:13:02.380
+software libraries that you can use.
+
+00:13:03.940 --> 00:13:04.440
+And so MoV SignWeaver,
+
+00:13:07.080 --> 00:13:07.440
+the project that MoV is working on,
+
+00:13:11.120 --> 00:13:11.620
+HyperGateway, depends on those libraries and
+
+00:13:15.520 --> 00:13:15.880
+it makes it easy for you to build other
+
+00:13:17.200 --> 00:13:17.700
+clients like hyperdrive.el
+
+00:13:20.600 --> 00:13:21.100
+which connect to the hyperdrive network.
+
+00:13:22.800 --> 00:13:23.300
+I hope that answers your question.
+
+00:13:25.140 --> 00:13:25.440
+[Speaker 4]: Yes it does, thank you.
+
+00:13:28.380 --> 00:13:28.620
+And what did make you choose hyperdrive for
+
+00:13:29.380 --> 00:13:29.880
+this Emacs project?
+
+00:13:34.400 --> 00:13:34.900
+[Speaker 1]: Mainly the fact that the drives are mutable,
+
+00:13:37.660 --> 00:13:38.160
+which makes it distinct from IPFS or
+
+00:13:40.800 --> 00:13:41.020
+BitTorrent, where when you share some piece
+
+00:13:44.760 --> 00:13:45.060
+of content, you're stuck with that static
+
+00:13:46.800 --> 00:13:47.020
+piece of content, which works well for some
+
+00:13:49.600 --> 00:13:50.100
+cases, but if you say you have a Zettelkasten
+
+00:13:52.300 --> 00:13:52.500
+or you have a set of org files that you want
+
+00:13:56.120 --> 00:13:56.580
+to share with people, you want to be able to
+
+00:13:58.860 --> 00:13:59.160
+update those files and have other people pull
+
+00:13:59.960 --> 00:14:00.360
+those updates from you.
+
+00:14:02.300 --> 00:14:02.720
+And so HyperDrive allows you to have these
+
+00:14:05.340 --> 00:14:05.820
+mutable sets of files that you can share and
+
+00:14:08.440 --> 00:14:08.600
+use the same link for other peers to pull the
+
+00:14:09.440 --> 00:14:09.800
+latest changes from you.
+
+00:14:11.660 --> 00:14:11.960
+Also, it's versioned, as we showed in the
+
+00:14:15.200 --> 00:14:15.700
+video, which is really helpful for having
+
+00:14:17.500 --> 00:14:17.900
+community deliberations and community
+
+00:14:19.400 --> 00:14:19.600
+discussions where you want to be able to
+
+00:14:22.420 --> 00:14:22.700
+reference some something that somebody said
+
+00:14:26.120 --> 00:14:26.320
+in the past and not have it get deleted or
+
+00:14:26.860 --> 00:14:27.360
+changed or something.
+
+00:14:30.600 --> 00:14:31.100
+[Speaker 0]: We are now switching to talk So just for
+
+00:14:32.720 --> 00:14:33.200
+letting you know if you want to say something
+
+00:14:37.640 --> 00:14:37.840
+now. Too late. The BB room is still open,
+
+00:14:38.480 --> 00:14:38.860
+so you can still discuss.
+
+00:14:41.480 --> 00:14:41.980
+There's also a lot going on on the pad.
+
+00:14:47.980 --> 00:14:48.480
+But you can also discuss here inside and
+
+00:14:49.760 --> 00:14:50.260
+answer the pet questions maybe later.
+
+00:14:52.800 --> 00:14:53.300
+[Speaker 1]: Yeah, there are good questions.
+
+00:14:58.680 --> 00:14:59.180
+I'll go ahead, please.
+
+00:15:01.120 --> 00:15:01.620
+[Speaker 3]: continuing here on the pad?
+
+00:15:04.540 --> 00:15:05.040
+[Speaker 1]: Are we I can hear you.
+
+00:15:07.540 --> 00:15:08.040
+[Speaker 5]: Yeah, so the question I had on the pad was,
+
+00:15:10.760 --> 00:15:10.900
+would it make sense in any sense to put a
+
+00:15:13.820 --> 00:15:13.940
+FUSE interface or put the POSIX semantics in
+
+00:15:14.960 --> 00:15:15.460
+front of this at some point?
+
+00:15:17.800 --> 00:15:18.080
+[Speaker 1]: Yeah, that would be cool.
+
+00:15:20.680 --> 00:15:21.060
+It's kind of a similar question to any plans
+
+00:15:21.680 --> 00:15:22.180
+for a Tramp interface.
+
+00:15:25.440 --> 00:15:25.940
+There was a project that the HyperCore
+
+00:15:31.160 --> 00:15:31.500
+HolePunch team was working on a year or more
+
+00:15:34.320 --> 00:15:34.820
+ago that provided a FUSE interface.
+
+00:15:39.560 --> 00:15:40.060
+And I think it didn't pan out.
+
+00:15:43.580 --> 00:15:43.940
+But it's a good idea. Same with the Tramp
+
+00:15:46.560 --> 00:15:46.720
+interface. It seems like a good idea that
+
+00:15:51.900 --> 00:15:52.260
+would make it possible to more easily hook
+
+00:15:55.520 --> 00:15:56.020
+into the built-in Emacs functionality for,
+
+00:16:01.340 --> 00:16:01.840
+for example, like incremental file name
+
+00:16:03.680 --> 00:16:03.960
+completion, which we don't currently support
+
+00:16:09.800 --> 00:16:10.260
+in Hyperdrive.el. So I'd love to have
+
+00:16:12.720 --> 00:16:13.220
+feedback and design ideas for those projects.
+
+00:16:15.860 --> 00:16:16.020
+[Speaker 5]: Yeah, there's just Everything in Emacs just
+
+00:16:17.980 --> 00:16:18.280
+sort of assumes the file system is there and
+
+00:16:20.940 --> 00:16:21.440
+usable in that way. That's all.
+
+00:16:23.980 --> 00:16:24.480
+[Speaker 1]: Yeah, it's a good idea.
+
+00:16:28.180 --> 00:16:28.680
+[Speaker 3]: An idea for the privacy type thing is
+
+00:16:33.160 --> 00:16:33.380
+Syncthing links. Because I think you can set
+
+00:16:36.100 --> 00:16:36.480
+up Syncthing in such a way that you have the
+
+00:16:38.560 --> 00:16:38.900
+private networks that other people can't
+
+00:16:40.240 --> 00:16:40.740
+actually get access to.
+
+00:16:45.540 --> 00:16:45.700
+[Speaker 1]: I did not know that that was possible with
+
+00:16:47.120 --> 00:16:47.620
+Syncthing. I'll have to look into that.
+
+00:16:48.840 --> 00:16:49.200
+[Speaker 3]: At least I think it is anyway,
+
+00:16:53.000 --> 00:16:53.500
+because yeah, there's ways you can explicitly
+
+00:16:56.780 --> 00:16:57.280
+authorize devices. Yeah,
+
+00:17:00.240 --> 00:17:00.400
+right. I think you could actually set it up
+
+00:17:03.480 --> 00:17:03.960
+in such a way that you can have private stuff
+
+00:17:06.300 --> 00:17:06.480
+and links, and then that might be a way that
+
+00:17:10.119 --> 00:17:10.619
+you can get a completely distributed
+
+00:17:12.720 --> 00:17:13.220
+Zettelcast and with private notes.
+
+00:17:22.339 --> 00:17:22.599
+[Speaker 1]: Yeah. Good idea. There's a question in the
+
+00:17:26.280 --> 00:17:26.380
+pad about DATRS, a Rust version of
+
+00:17:28.660 --> 00:17:29.160
+HyperDrive. I had not heard of that,
+
+00:17:30.260 --> 00:17:30.760
+so I'll have to look into that.
+
+00:17:33.040 --> 00:17:33.460
+If you had your druthers,
+
+00:17:34.820 --> 00:17:35.320
+what would make your work on hyperdrive.dl
+
+00:17:40.240 --> 00:17:40.740
+easier? It's been a lot of fun.
+
+00:17:42.480 --> 00:17:42.980
+I would love to have more user feedback.
+
+00:17:45.660 --> 00:17:46.160
+That would be my wish.
+
+00:17:50.500 --> 00:17:51.000
+I tried putting a git repo in HyperDrive.
+
+00:17:53.320 --> 00:17:53.500
+Does it work well? I don't think that would
+
+00:17:56.880 --> 00:17:57.100
+work well because, as I mentioned a moment a
+
+00:18:00.060 --> 00:18:00.220
+few moments ago, the data that you put into a
+
+00:18:00.920 --> 00:18:01.420
+hyperdrive is duplicated.
+
+00:18:06.300 --> 00:18:06.800
+So if you had the whole work tree in
+
+00:18:08.800 --> 00:18:08.960
+hyperdrive every time you made a change and
+
+00:18:12.340 --> 00:18:12.840
+saved it, it would be duplicated.
+
+00:18:15.240 --> 00:18:15.740
+If you had just a bare repository,
+
+00:18:18.240 --> 00:18:18.740
+I don't know, try it.
+
+00:18:21.140 --> 00:18:21.540
+[Speaker 3]: They're trying to solve the same problem,
+
+00:18:23.560 --> 00:18:24.060
+but 1 of the optimizations they have for
+
+00:18:25.520 --> 00:18:25.900
+being able to view a whole bunch of people's
+
+00:18:28.780 --> 00:18:28.980
+data is they made shallow clones a lot
+
+00:18:34.640 --> 00:18:35.140
+[Speaker 1]: Would you phrase that again,
+
+00:18:35.140 --> 00:18:35.640
+please?
+
+00:18:39.780 --> 00:18:40.280
+[Speaker 3]: easier. Right? So like Git and Hypercore,
+
+00:18:42.720 --> 00:18:43.220
+1 of the things they do is they allow you to
+
+00:18:46.160 --> 00:18:46.660
+have a whole history of every single change
+
+00:18:51.880 --> 00:18:52.380
+for a dataset Zettelkasten project.
+
+00:18:56.400 --> 00:18:56.600
+But 1 of the optimizations Hypercore did to
+
+00:19:02.020 --> 00:19:02.220
+make it more network web friendly is they
+
+00:19:04.540 --> 00:19:04.700
+made the shallow clones work a lot better and
+
+00:19:07.040 --> 00:19:07.240
+a lot... Yeah, they made that work a lot
+
+00:19:08.760 --> 00:19:09.060
+better so you don't have to download every
+
+00:19:11.340 --> 00:19:11.840
+single thing for every single project.
+
+00:19:14.860 --> 00:19:15.100
+And because they both are implementing the
+
+00:19:17.800 --> 00:19:18.040
+delta upgrades, I don't see how they could
+
+00:19:19.000 --> 00:19:19.500
+work really well together.
+
+00:19:21.780 --> 00:19:22.280
+At least from what it looked like to me.
+
+00:19:25.640 --> 00:19:26.140
+It can't hurt to experiment.
+
+00:19:28.980 --> 00:19:29.480
+[Speaker 1]: But yeah, I would agree with you.
+
+00:19:35.020 --> 00:19:35.180
+Is data transferred between nodes in the
+
+00:19:38.800 --> 00:19:39.060
+clear or encrypted? That's a good question.
+
+00:19:41.640 --> 00:19:42.140
+I don't know how it's encrypted.
+
+00:19:47.440 --> 00:19:47.940
+I don't, I wouldn't recommend sharing
+
+00:19:53.400 --> 00:19:53.900
+sensitive data with hyperdrive right now?
+
+00:19:55.680 --> 00:19:55.800
+I would recommend if you want to play with
+
+00:19:57.240 --> 00:19:57.520
+it, have it be something where you're
+
+00:20:00.660 --> 00:20:01.160
+expecting the data to be shared.
+
+00:20:03.460 --> 00:20:03.960
+Is there a searchable catalog?
+
+00:20:06.700 --> 00:20:06.980
+[Speaker 3]: It's also the data in transport versus data
+
+00:20:08.480 --> 00:20:08.800
+at rest. I'm pretty sure the data at rest
+
+00:20:09.960 --> 00:20:10.460
+would not be encrypted.
+
+00:20:14.440 --> 00:20:14.640
+Right. You can separate that into those 2
+
+00:20:14.640 --> 00:20:15.140
+questions.
+
+00:20:19.920 --> 00:20:20.420
+[Speaker 1]: Right. Right. Is there a searchable catalog
+
+00:20:23.000 --> 00:20:23.320
+of hyper drives? So that's a thing,
+
+00:20:32.980 --> 00:20:33.480
+an idea that we've been a distributed trust
+
+00:20:38.200 --> 00:20:38.700
+network for discovering peers that are
+
+00:20:41.260 --> 00:20:41.760
+trusted for a particular topic.
+
+00:20:47.220 --> 00:20:47.440
+And we actually made a demo video of a
+
+00:20:51.760 --> 00:20:51.900
+previous prototype that's available on the
+
+00:20:54.580 --> 00:20:55.080
+Ashen hyperdrive that you can watch that
+
+00:20:58.980 --> 00:20:59.280
+shows the basic idea. But the idea is just
+
+00:21:02.980 --> 00:21:03.480
+that you would have a list of peers that you
+
+00:21:07.120 --> 00:21:07.620
+think are worth listening to or worth reading
+
+00:21:09.400 --> 00:21:09.880
+for a particular topic.
+
+00:21:11.980 --> 00:21:12.180
+And those peers would have peers that they
+
+00:21:14.640 --> 00:21:14.920
+think are worth listening to for that same
+
+00:21:16.600 --> 00:21:16.720
+topic. And so you would say,
+
+00:21:17.560 --> 00:21:17.900
+if I'm interested in Emacs,
+
+00:21:21.220 --> 00:21:21.660
+I want to see all the peers that I trust for
+
+00:21:23.700 --> 00:21:24.200
+the topic Emacs. And if,
+
+00:21:27.340 --> 00:21:27.640
+say, Adam Porter shows up in my list and Adam
+
+00:21:30.340 --> 00:21:30.840
+Porter trusts Jonas and Jonas trusts Pratt,
+
+00:21:33.420 --> 00:21:33.920
+I would be able to read hyperdrive
+
+00:21:36.760 --> 00:21:37.260
+information from all of those people by
+
+00:21:41.600 --> 00:21:41.800
+looking at the indirect relationships that I
+
+00:21:43.260 --> 00:21:43.760
+have by following the chain of relationships,
+
+00:21:44.760 --> 00:21:45.260
+kind of like a web of trust.
+
+00:21:49.640 --> 00:21:49.860
+And so it would also allow you to have a
+
+00:21:53.480 --> 00:21:53.980
+network of peers that you trust to block
+
+00:21:54.900 --> 00:21:55.400
+other people on your behalf.
+
+00:21:57.660 --> 00:21:58.160
+So it would be useful for subjective
+
+00:22:02.220 --> 00:22:02.520
+moderation where you can remove spam and bad
+
+00:22:04.920 --> 00:22:05.420
+actors from the people that you follow
+
+00:22:08.940 --> 00:22:09.440
+without having to delegate that powerful
+
+00:22:13.260 --> 00:22:13.380
+responsibility to some third party in a
+
+00:22:15.260 --> 00:22:15.720
+permanent way where that third party might
+
+00:22:23.040 --> 00:22:23.320
+abuse that power. So it allows you to share
+
+00:22:26.120 --> 00:22:26.260
+your list of trusted peers and your list of
+
+00:22:29.180 --> 00:22:29.280
+blocked peers with other people in a
+
+00:22:29.860 --> 00:22:30.360
+peer-to-peer way.
+
+00:22:38.080 --> 00:22:38.580
+[Speaker 3]: Have you ever looked at GNUnet?
+
+00:22:40.200 --> 00:22:40.700
+It kind of does some...
+
+00:22:45.660 --> 00:22:45.800
+It's trying to do something weird with the
+
+00:22:47.520 --> 00:22:47.600
+internet where it redesigns it from the
+
+00:22:51.040 --> 00:22:51.540
+ground up to be peer-to-peer,
+
+00:22:53.680 --> 00:22:54.180
+local first, or something like that.
+
+00:22:58.380 --> 00:22:58.880
+[Speaker 1]: I would like to know more about GNUnet.
+
+00:23:01.800 --> 00:23:01.960
+Yes. I have heard of it,
+
+00:23:03.620 --> 00:23:04.120
+but I haven't really researched it.
+
+00:23:09.060 --> 00:23:09.560
+If you edit a file on the hyperdrive,
+
+00:23:12.400 --> 00:23:12.900
+then edit the same file on the local mirror,
+
+00:23:15.480 --> 00:23:15.640
+how is the conflict handled when you sync the
+
+00:23:21.140 --> 00:23:21.280
+mirror again? So I think if I understand the
+
+00:23:29.160 --> 00:23:29.620
+question, the answer is that you can't edit
+
+00:23:32.280 --> 00:23:32.780
+the file in 2 different places,
+
+00:23:36.860 --> 00:23:37.360
+I think is the answer to the question.
+
+00:23:41.220 --> 00:23:41.720
+If you were to manually copy the private key
+
+00:23:44.040 --> 00:23:44.540
+from 1 machine onto another machine,
+
+00:23:51.820 --> 00:23:52.320
+then you could cause a conflict,
+
+00:23:54.400 --> 00:23:54.900
+like a merge conflict,
+
+00:23:58.100 --> 00:23:58.240
+but you would have to go out of your way to
+
+00:24:00.520 --> 00:24:00.900
+do that. And It's not handled.
+
+00:24:03.580 --> 00:24:03.820
+I think the Hypercore Hole Punch team has
+
+00:24:05.600 --> 00:24:05.860
+another project that they're working on that
+
+00:24:07.200 --> 00:24:07.700
+would, it's called AutoBase,
+
+00:24:09.560 --> 00:24:10.060
+that would merge those conflicts.
+
+00:24:13.200 --> 00:24:13.680
+But we're not using that right now.
+
+00:24:16.260 --> 00:24:16.760
+And I think it's in early development still.
+
+00:24:19.860 --> 00:24:20.360
+So there might be a solution in the future.
+
+00:24:32.240 --> 00:24:32.740
+[Speaker 3]: What's a surprising change of thoughts or
+
+00:24:36.900 --> 00:24:37.180
+what's the most interesting thing you weren't
+
+00:24:39.060 --> 00:24:39.560
+expecting to discover while developing this?
+
+00:24:44.640 --> 00:24:44.800
+Like change of thoughts on how you write or I
+
+00:24:45.020 --> 00:24:45.520
+don't know.
+
+00:24:59.060 --> 00:24:59.540
+[Speaker 1]: Well, I'm relatively new to Emacs and to Lisp
+
+00:25:01.200 --> 00:25:01.700
+and really to programming in general.
+
+00:25:04.160 --> 00:25:04.540
+And so it's been a fantastic learning
+
+00:25:08.480 --> 00:25:08.900
+experience. Adam, Alpha Papa,
+
+00:25:11.320 --> 00:25:11.520
+Adam and I have been doing a lot of pair
+
+00:25:12.960 --> 00:25:13.460
+programming sessions where we work together
+
+00:25:15.380 --> 00:25:15.880
+and I get to learn from him.
+
+00:25:19.540 --> 00:25:19.940
+And we've had meetings with Jonas and Prat
+
+00:25:23.560 --> 00:25:23.800
+and meetings with Mauve where it's a
+
+00:25:25.520 --> 00:25:26.020
+fantastic learning experience for me to
+
+00:25:30.660 --> 00:25:30.800
+discover how to build software in an
+
+00:25:32.820 --> 00:25:33.320
+efficient and intelligent way.
+
+00:25:40.580 --> 00:25:40.920
+It's a huge pleasure. If there are no more
+
+00:25:43.320 --> 00:25:43.820
+questions, I just wanted to encourage
+
+00:25:48.380 --> 00:25:48.620
+everyone to try it out and to let us know
+
+00:25:50.380 --> 00:25:50.560
+what you think. It would be really helpful to
+
+00:25:54.960 --> 00:25:55.320
+have some feedback from people who are using
+
+00:25:57.240 --> 00:25:57.600
+it in new and creative ways that we haven't
+
+00:25:57.600 --> 00:25:58.100
+anticipated.
+
+00:26:02.120 --> 00:26:02.300
+[Speaker 6]: Hi, I'd just like to say that I tried this
+
+00:26:02.980 --> 00:26:03.480
+new thing called hyperdrive.el
+
+00:26:05.880 --> 00:26:06.380
+today, and I think it's pretty cool.
+
+00:26:12.540 --> 00:26:12.800
+[Speaker 2]: Sorry, that was somebody else.
+
+00:26:13.440 --> 00:26:13.940
+Hey Joseph, how's it going?
+
+00:26:15.080 --> 00:26:15.580
+Oh, talk today.
+
+00:26:16.420 --> 00:26:16.580
+[Speaker 3]: Oh, thanks. Wonderful.
+
+00:26:19.200 --> 00:26:19.700
+[Speaker 1]: Who's that? Oh, hey. Well,
+
+00:26:34.060 --> 00:26:34.560
+I'm going to say goodbye.
+
+00:26:37.040 --> 00:26:37.540
+Thank you. And thank you for your questions,
+
+00:26:39.680 --> 00:26:39.840
+[Speaker 3]: I know that
+
+00:26:40.380 --> 00:26:40.880
+[Speaker 1]: PlasmaStrike. I've met you before.
+
+00:26:42.340 --> 00:26:42.720
+Appreciate your questions,
+
+00:26:42.880 --> 00:26:43.380
+your thoughts.
+
+00:26:50.380 --> 00:26:50.880
+[Speaker 2]: Oh, by the way, Joseph,
+
+00:26:53.000 --> 00:26:53.500
+we have our, our first,
+
+00:26:55.120 --> 00:26:55.480
+I don't know if our first new user,
+
+00:26:57.280 --> 00:26:57.780
+but we have the first link being shared,
+
+00:27:01.160 --> 00:27:01.480
+to hyperdrive file in the chat and I loaded
+
+00:27:03.080 --> 00:27:03.240
+it and it works. And it's funny too.
+
+00:27:03.880 --> 00:27:04.000
+It's worth looking at.
+
+00:27:09.140 --> 00:27:09.640
+So. Oh, I think it's frozen.
+
+00:27:11.580 --> 00:27:12.080
+I don't know if anybody can hear me.
+
+00:27:12.720 --> 00:27:13.220
+[Speaker 3]: I can.
+
+00:27:15.200 --> 00:27:15.620
+[Speaker 2]: Okay, cool. The browser is frozen.
+
+00:27:19.020 --> 00:27:19.520
+It's it's not, okay. Just unfroze.
+
+00:27:21.740 --> 00:27:22.100
+Anyway. All right. Well,
+
+00:27:24.000 --> 00:27:24.440
+By the way, I enjoyed your talks about
+
+00:27:26.260 --> 00:27:26.480
+hyperbole. I'm going to rewatch those later
+
+00:27:28.040 --> 00:27:28.260
+when I get a chance. It was nice to meet you,
+
+00:27:31.100 --> 00:27:31.240
+too. Bob is a really great guy to work with.
+
+00:27:38.800 --> 00:27:39.300
+[Speaker 3]: Definitely a lot of interesting people.
+
+00:27:40.200 --> 00:27:40.700
+[Speaker 2]: I owe him 1. Yes, sir.
+
+00:27:41.580 --> 00:27:41.760
+All right, you have a good day,
+
+00:27:45.140 --> 00:27:45.640
+[Speaker 3]: Will do, I like the insistence on local
+
+00:27:48.740 --> 00:27:48.940
+first. Feels like it's a good dovetail with
+
+00:27:49.540 --> 00:27:50.040
+the hyper core
+
+00:27:51.180 --> 00:27:51.680
+[Speaker 2]: enjoy the conference. Yeah,
+
+00:27:54.960 --> 00:27:55.120
+yeah, I think there's a lot of a lot of
+
+00:27:57.980 --> 00:27:58.180
+interesting possibilities to build on this we
+
+00:28:01.340 --> 00:28:01.600
+have some plans that we Will get to you later
+
+00:28:05.600 --> 00:28:05.820
+this well in the coming year And we'll see
+
+00:28:07.480 --> 00:28:07.900
+where the hyperdrive people,
+
+00:28:09.920 --> 00:28:10.040
+you know, upstream how they develop it as
+
+00:28:14.340 --> 00:28:14.840
+well and yeah, so exciting times.
diff --git a/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt
new file mode 100644
index 00000000..c1376f19
--- /dev/null
+++ b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt
@@ -0,0 +1,2274 @@
+WEBVTT captioned by bhavin192, checked by sachac
+
+00:00.000 --> 00:00:02.600
+Hello, I'm Joseph Turner.
+
+00:00:02.600 --> 00:00:05.107
+This talk is about hyperdrive.el,
+
+00:00:05.107 --> 00:00:09.099
+peer-to-peer file system in Emacs.
+
+00:00:09.100 --> 00:00:11.479
+Hyperdrive is a JavaScript library
+
+00:00:11.480 --> 00:00:13.359
+developed by the Holepunch team
+
+00:00:13.360 --> 00:00:16.499
+for sharing files on a peer-to-peer network.
+
+00:00:16.500 --> 00:00:19.839
+It's released under the Apache 2.0 license.
+
+NOTE Hyperdrives introduction
+
+00:00:19.840 --> 00:00:21.639
+Here's how it works.
+
+00:00:21.640 --> 00:00:24.580
+To participate as a peer, you run a node,
+
+00:00:24.581 --> 00:00:27.280
+a lightweight local server that allows you
+
+00:00:27.281 --> 00:00:29.959
+to connect with other nodes on the network.
+
+00:00:29.960 --> 00:00:33.123
+You can create a hyperdrive or multiple hyperdrives,
+
+00:00:33.123 --> 00:00:36.219
+and you can author files within them.
+
+00:00:36.220 --> 00:00:38.699
+Each hyperdrive is automatically assigned
+
+00:00:38.700 --> 00:00:40.906
+a globally unique link
+
+00:00:40.906 --> 00:00:44.579
+that starts with `hyper://`.
+
+00:00:44.580 --> 00:00:47.019
+When you share that link with someone,
+
+00:00:47.020 --> 00:00:49.159
+they have access to your hyperdrive.
+
+00:00:49.160 --> 00:00:52.819
+Anyone who has that link can load the hyperdrive
+
+00:00:52.820 --> 00:00:56.000
+from the network and view its content.
+
+00:56.000 --> 00:00:59.019
+When you load a Hyperdrive file from the network,
+
+00:00:59.020 --> 00:01:02.019
+your node caches that data locally
+
+00:01:02.020 --> 00:01:04.133
+and automatically begins seeding it
+
+00:01:04.133 --> 00:01:05.219
+back to the network,
+
+00:01:05.220 --> 00:01:12.619
+making it available for others to download from you.
+
+00:01:12.620 --> 00:01:14.519
+Hyperdrives are single writer.
+
+00:01:14.520 --> 00:01:16.879
+This means that when you create a new drive,
+
+00:01:16.880 --> 00:01:19.719
+you are the only one who can make changes to it.
+
+00:01:19.720 --> 00:01:21.267
+Others can view it
+
+00:01:21.267 --> 00:01:23.799
+and can seed it back to the network,
+
+00:01:23.800 --> 00:01:27.339
+but you're the only one who can modify it.
+
+00:01:27.340 --> 00:01:29.739
+Hyperdrives are offline first.
+
+00:01:29.740 --> 00:01:32.999
+This means that when you load data from the network,
+
+00:01:33.000 --> 00:01:34.900
+it's stored locally on your machine
+
+00:01:34.900 --> 00:01:36.179
+for you to view later,
+
+00:01:36.180 --> 00:01:38.799
+even when you're disconnected from other peers.
+
+00:01:38.800 --> 00:01:40.799
+You can also create new drives
+
+00:01:40.800 --> 00:01:43.600
+and modify your drives when you're offline,
+
+00:01:43.600 --> 00:01:44.999
+and then share those changes
+
+00:01:45.000 --> 00:01:47.919
+once you connect with peers later.
+
+00:01:47.920 --> 00:01:50.299
+Hyperdrives are local first.
+
+00:01:50.300 --> 00:01:52.400
+This means that when you are connected with
+
+00:01:52.400 --> 00:01:54.739
+other peers on a local area network,
+
+00:01:54.740 --> 00:01:56.939
+even if none of the peers involved
+
+00:01:56.940 --> 00:01:58.979
+are connected to the broader Internet,
+
+00:01:58.980 --> 00:02:02.059
+you can still share files.
+
+00:02:02.060 --> 00:02:04.799
+Hyperdrives are sparsely replicated.
+
+00:02:04.800 --> 00:02:07.479
+This means that you can download individual files
+
+00:02:07.479 --> 00:02:10.020
+from a hyperdrive without having to download
+
+00:02:10.020 --> 00:02:11.719
+the whole thing.
+
+00:02:11.720 --> 00:02:15.471
+This saves on disk space and also allows you
+
+00:02:15.471 --> 00:02:17.233
+to quickly load just the files
+
+00:02:17.233 --> 00:02:20.539
+that you're interested in.
+
+00:02:20.540 --> 00:02:22.467
+Hyperdrives are mutable.
+
+00:02:22.467 --> 00:02:25.499
+You can add files, change files,
+
+00:02:25.500 --> 00:02:28.119
+remove files from a hyperdrive.
+
+00:02:28.120 --> 00:02:30.667
+And when peers load your drive
+
+00:02:30.667 --> 00:02:32.559
+using the very same link,
+
+00:02:32.560 --> 00:02:34.025
+they will be able to load
+
+00:02:34.025 --> 00:02:37.319
+the latest changes that you've published.
+
+00:02:37.320 --> 00:02:39.459
+Hyperdrives are versioned.
+
+00:02:39.460 --> 00:02:42.429
+This means that when you make changes to a file,
+
+00:02:42.429 --> 00:02:46.000
+the previous versions of those files are not lost.
+
+02:46.000 --> 00:02:49.359
+Peers can load the old versions of a file
+
+00:02:49.360 --> 00:02:52.439
+that was changed or deleted, for example,
+
+00:02:52.440 --> 00:02:55.067
+simply by specifying the version number
+
+00:02:55.067 --> 00:02:58.167
+of the hyperdrive when the file still existed
+
+00:02:58.167 --> 00:03:04.599
+or existed in a previous state.
+
+NOTE About USHIN and the contributors
+
+00:03:04.600 --> 00:03:07.379
+I'm presenting this talk on behalf of USHIN.
+
+00:03:07.380 --> 00:03:10.679
+USHIN is a tiny nonprofit whose mission is to
+
+00:03:10.680 --> 00:03:14.032
+promote personal, community and global health
+
+00:03:14.032 --> 00:03:17.367
+through free and open universal shared information
+
+00:03:17.367 --> 00:03:19.699
+for everybody.
+
+00:03:19.700 --> 00:03:21.551
+USHIN was founded in the early 90s
+
+00:03:21.551 --> 00:03:24.859
+by Paula Maas, Steve Nash and others
+
+00:03:24.860 --> 00:03:26.399
+with the goal of creating
+
+00:03:26.400 --> 00:03:29.131
+a distributed health information network
+
+00:03:29.131 --> 00:03:33.429
+that would allow people to find, share, compare
+
+00:03:33.429 --> 00:03:35.667
+and deliberate health information
+
+00:03:35.667 --> 00:03:37.779
+from a variety of sources.
+
+00:03:37.780 --> 00:03:40.699
+Since then, the scope of the project has broadened
+
+00:03:40.700 --> 00:03:43.259
+to include all kinds of information.
+
+00:03:43.260 --> 00:03:45.779
+And in recent years, we've been focusing on
+
+00:03:45.780 --> 00:03:49.499
+building with peer-to-peer software.
+
+00:03:49.500 --> 00:03:50.534
+About three years ago,
+
+00:03:50.534 --> 00:03:52.634
+we started working with Mauve Signweaver,
+
+00:03:52.634 --> 00:03:54.767
+who has since then been our steadfast
+
+00:03:54.767 --> 00:03:58.259
+peer-to-peer explorer and guide.
+
+00:03:58.260 --> 00:04:00.079
+This year, we started working on
+
+00:04:00.080 --> 00:04:02.799
+this hyperdrive.el Emacs package,
+
+00:04:02.800 --> 00:04:05.059
+and Adam has been the powerhouse
+
+00:04:05.060 --> 00:04:08.079
+behind the Emacs Lisp development.
+
+00:04:08.080 --> 00:04:08.967
+About a month ago,
+
+00:04:08.967 --> 00:04:11.099
+Jonas Bernoulli started joining with us,
+
+00:04:11.100 --> 00:04:14.419
+and he has been offering his expertise
+
+00:04:14.420 --> 00:04:15.639
+in the realm of user interface design
+
+00:04:15.640 --> 00:04:18.000
+using his Transient library.
+
+04:18.000 --> 00:04:22.139
+And Protesilaos Stavrou has been not only valuable
+
+00:04:22.140 --> 00:04:25.000
+in terms of user design and feedback,
+
+00:04:25.000 --> 00:04:27.119
+but he created a wonderful
+
+00:04:27.120 --> 00:04:32.099
+basic introduction to Hyperdrive. Take a look.
+
+NOTE Basic introduction to Hyperdrive
+
+00:04:32.646 --> 00:04:33.585
+[Prot]: Hello everyone!
+
+00:04:33.586 --> 00:04:36.365
+My name is Protesilaos, also known as Prot.
+
+00:04:36.366 --> 00:04:37.805
+In this video, I want to show you
+
+00:04:37.806 --> 00:04:40.746
+the basics of hyperdrive.el.
+
+00:04:40.746 --> 00:04:44.012
+This is a package for Emacs that lets us connect to
+
+00:04:44.013 --> 00:04:47.832
+the Hyperdrive peer-to-peer network.
+
+00:04:47.833 --> 00:04:51.572
+We can browse existing drives on the network,
+
+00:04:51.573 --> 00:04:53.879
+meaning existing file systems,
+
+00:04:53.880 --> 00:04:59.052
+or create and maintain our own hyperdrive,
+
+00:04:59.053 --> 00:05:03.473
+to which we can add, remove or edit files.
+
+00:05:03.473 --> 00:05:05.473
+We will see this together.
+
+00:05:05.473 --> 00:05:08.732
+What I have here in front of me is a basic
+
+00:05:08.733 --> 00:05:12.972
+use-package declaration for hyperdrive.el.
+
+00:05:12.973 --> 00:05:16.992
+All I am doing is binding `hyperdrive-menu`
+
+00:05:16.993 --> 00:05:19.792
+to a key and also activating
+
+00:05:19.793 --> 00:05:23.612
+the menu bar entry of hyperdrive.
+
+00:05:23.613 --> 00:05:26.812
+Let me show you very quickly, `hyperdrive-menu`.
+
+00:05:26.813 --> 00:05:31.292
+And this is the sort of interface that it brings up.
+
+00:05:31.293 --> 00:05:33.473
+We will take a closer look at it.
+
+00:05:33.473 --> 00:05:35.992
+As for the menu bar,
+
+00:05:35.993 --> 00:05:41.072
+we have `hyperdrive-menu` over here,
+
+00:05:41.073 --> 00:05:44.192
+and we will take a look at this as well.
+
+00:05:44.193 --> 00:05:45.692
+Suffice to say that
+
+00:05:45.693 --> 00:05:48.272
+you can get the same functionality
+
+00:05:48.273 --> 00:05:51.992
+with the menu bar or with `hyperdrive-menu`,
+
+00:05:51.993 --> 00:05:55.892
+as well as by calling the commands directly
+
+00:05:55.893 --> 00:06:00.052
+with `M-x` or their respective key bindings.
+
+00:06:00.053 --> 00:06:02.979
+I won't cover everything in that regard,
+
+00:06:02.980 --> 00:06:06.132
+but please bear this fact in mind.
+
+NOTE Managing files with Hyperdrive.el
+
+00:06:06.133 --> 00:06:09.212
+Let's start then with what I have here
+
+00:06:09.213 --> 00:06:13.852
+in this other tab, which is a set of files.
+
+00:06:13.853 --> 00:06:18.473
+I have prepared in my local file system - a hyperdrive.
+
+00:06:18.473 --> 00:06:20.332
+This contains a set of files
+
+00:06:20.333 --> 00:06:22.652
+that I ultimately want to share
+
+00:06:22.653 --> 00:06:24.352
+on the peer-to-peer network,
+
+00:06:24.353 --> 00:06:28.052
+meaning that I want this to eventually be
+
+00:06:28.053 --> 00:06:31.473
+reflected in my own hyperdrive.
+
+00:06:31.473 --> 00:06:34.053
+What I did to get started is
+
+00:06:34.054 --> 00:06:36.492
+I invoked `hyperdrive-menu`.
+
+00:06:36.493 --> 00:06:38.572
+The very first thing you need to do
+
+00:06:38.573 --> 00:06:40.992
+to get started with Hyperdrive,
+
+00:06:40.993 --> 00:06:43.632
+either to browse or to create,
+
+00:06:43.633 --> 00:06:46.013
+is to start the gateway,
+
+00:06:46.013 --> 00:06:48.692
+meaning to be able to connect to
+
+00:06:48.693 --> 00:06:50.473
+the peer-to-peer network.
+
+00:06:50.473 --> 00:06:53.492
+You see here in `hyperdrive-menu` that there is
+
+00:06:53.493 --> 00:06:56.292
+an indicator next to the "Gateway" heading
+
+00:06:56.293 --> 00:06:59.473
+telling me that the gateway is on.
+
+00:06:59.473 --> 00:07:04.672
+I started it with `G` and then `s`.
+
+00:07:04.673 --> 00:07:06.572
+Once you start it,
+
+00:07:06.573 --> 00:07:10.152
+you can type `h` to visit an existing drive,
+
+00:07:10.153 --> 00:07:12.112
+`N` to create a drive,
+
+00:07:12.113 --> 00:07:17.473
+or `L` to open a link to an existing hyperdrive.
+
+00:07:17.473 --> 00:07:21.153
+You may get this link via email, for example.
+
+00:07:21.154 --> 00:07:24.932
+In this case, let me be over here
+
+00:07:24.933 --> 00:07:27.972
+and let me just kill this buffer.
+
+00:07:27.973 --> 00:07:32.952
+What I want in this case is to select a hyperdrive.
+
+00:07:32.953 --> 00:07:35.452
+You see here I have my own hyperdrive
+
+00:07:35.453 --> 00:07:37.812
+and also the hyperdrive of USHIN,
+
+00:07:37.813 --> 00:07:41.332
+the developers of hyperdrive.el.
+
+00:07:41.333 --> 00:07:43.972
+What I want to do in this case,
+
+00:07:43.973 --> 00:07:46.852
+you see there are various options available.
+
+00:07:46.853 --> 00:07:50.212
+I want to type `v` to view a file.
+
+00:07:50.213 --> 00:07:50.972
+And in this case,
+
+00:07:50.973 --> 00:07:53.632
+I will just type the forward slash,
+
+00:07:53.633 --> 00:07:56.992
+which means to view the root directory
+
+00:07:56.993 --> 00:08:00.852
+of this hyperdrive. And I am here.
+
+00:08:00.853 --> 00:08:04.219
+It is an empty drive apart from
+
+00:08:04.220 --> 00:08:06.512
+my credentials over here.
+
+00:08:06.513 --> 00:08:10.112
+There is nothing more really to see.
+
+00:08:10.113 --> 00:08:12.092
+But what I want to do is
+
+00:08:12.093 --> 00:08:15.352
+to start adding files to this drive.
+
+00:08:15.353 --> 00:08:18.332
+Let me use the menu bar for this.
+
+00:08:18.333 --> 00:08:21.052
+I will hover over to the menu bar,
+
+00:08:21.053 --> 00:08:24.772
+and I will find the "Hyperdrive" submenu.
+
+00:08:24.773 --> 00:08:27.912
+Then I will go find where the drives are.
+
+00:08:27.913 --> 00:08:30.672
+And you see that there are writable drives,
+
+00:08:30.673 --> 00:08:32.812
+meaning drives that I manage,
+
+00:08:32.813 --> 00:08:37.352
+and read-only drives, meaning drives of other users.
+
+00:08:37.353 --> 00:08:40.332
+In this case, USHIN is read-only, of course,
+
+00:08:40.333 --> 00:08:42.972
+and Protesilaos is writable.
+
+00:08:42.973 --> 00:08:48.352
+So what I want to do is upload a file to Protesilaos.
+
+00:08:48.353 --> 00:08:52.473
+And it prompts me in the Minibuffer for a file.
+
+00:08:52.473 --> 00:08:55.292
+I will just add the README.
+
+00:08:55.293 --> 00:08:58.173
+It is asking me, "Where do you want to add it?"
+
+00:08:58.173 --> 00:09:00.552
+And in square brackets, the default is to add it
+
+00:09:00.553 --> 00:09:03.812
+to the root directory of the hyperdrive.
+
+00:09:03.813 --> 00:09:07.012
+So I will just type `RET` to select the default.
+
+00:09:07.013 --> 00:09:11.392
+And there it is. It is already in the drive.
+
+00:09:11.393 --> 00:09:14.072
+Let me add the COPYING file as well,
+
+00:09:14.073 --> 00:09:16.673
+using the same method.
+
+00:09:16.673 --> 00:09:21.392
+I will go find my drive. "Upload File."
+
+00:09:21.393 --> 00:09:23.852
+And let's add the COPYING.
+
+00:09:23.853 --> 00:09:29.432
+And I also want to add it to the root directory.
+
+00:09:29.433 --> 00:09:30.632
+So already I have two files.
+
+00:09:30.633 --> 00:09:31.952
+This is looking good.
+
+00:09:31.953 --> 00:09:37.013
+Now I am opening the file inside of hyperdrive.
+
+00:09:37.014 --> 00:09:39.032
+This is not the same file
+
+00:09:39.033 --> 00:09:42.673
+as I have in my local directory.
+
+00:09:42.673 --> 00:09:47.432
+What I can do here, for example, is I can...
+
+00:09:47.433 --> 00:09:49.892
+Let me open another file here, the COPYING.
+
+00:09:49.893 --> 00:09:52.112
+I can create an Org link.
+
+00:09:52.113 --> 00:09:54.332
+Notice that these are Org files.
+
+00:09:54.333 --> 00:09:58.852
+So I will use the standard `org-store-link` command.
+
+00:09:58.853 --> 00:10:01.172
+You can see the key binding I invoked
+
+00:10:01.173 --> 00:10:03.532
+and the command it calls
+
+00:10:03.533 --> 00:10:05.892
+on the top right corner of my screen.
+
+00:10:05.893 --> 00:10:07.412
+So what I did is
+
+00:10:07.413 --> 00:10:11.992
+I copied a link to this hyperdrive file.
+
+00:10:11.993 --> 00:10:15.352
+And in this other file over here,
+
+00:10:15.353 --> 00:10:22.152
+I want to say "Free/libre."
+
+00:10:22.153 --> 00:10:27.072
+So I am editing my hyperdrive terms:
+
+00:10:27.073 --> 00:10:35.352
+"Check the," and I will paste the link here,
+
+00:10:35.353 --> 00:10:40.072
+"for how to use my files."
+
+00:10:40.073 --> 00:10:44.812
+If we check what is here,
+
+00:10:44.813 --> 00:10:47.812
+you will see that this is a link
+
+00:10:47.813 --> 00:10:50.879
+inside of the hyperdrive.
+
+00:10:50.880 --> 00:10:52.712
+And it's pointing specifically
+
+00:10:52.713 --> 00:10:54.992
+to that heading over there,
+
+00:10:54.993 --> 00:10:58.172
+which has this unique identifier,
+
+00:10:58.173 --> 00:11:00.512
+as you can see over here.
+
+00:11:00.513 --> 00:11:03.072
+So this is wonderful.
+
+00:11:03.073 --> 00:11:09.712
+I want to rename it to "Check the COPYING
+
+00:11:09.713 --> 00:11:11.952
+for how to use my files."
+
+00:11:11.953 --> 00:11:13.932
+I will save this.
+
+00:11:13.933 --> 00:11:16.839
+And now what I want to do is,
+
+00:11:16.840 --> 00:11:20.492
+I want to invoke `hyperdrive-menu`.
+
+00:11:20.493 --> 00:11:23.152
+And you will see now the menu, unlike earlier,
+
+00:11:23.153 --> 00:11:27.212
+has more commands, more stuff we can do with it.
+
+00:11:27.213 --> 00:11:31.792
+For example, I can type `w` to copy a URL.
+
+00:11:31.793 --> 00:11:34.499
+And by typing `w`, you will notice...
+
+00:11:34.500 --> 00:11:37.332
+Let me go to the `*scratch*` buffer to paste this in.
+
+00:11:37.333 --> 00:11:40.092
+You will notice what the URL is.
+
+00:11:40.093 --> 00:11:44.132
+It is my hyperdrive, my unique identifier,
+
+00:11:44.133 --> 00:11:47.512
+and then forward slash, meaning the root directory,
+
+00:11:47.513 --> 00:11:49.672
+and then README.org.
+
+00:11:49.673 --> 00:11:54.092
+That is the file I was editing.
+
+00:11:54.093 --> 00:11:56.572
+Let's do `hyperdrive-menu` again.
+
+00:11:56.573 --> 00:11:58.132
+Let's remove the `*scratch*` buffer.
+
+00:11:58.133 --> 00:11:59.932
+And let's do `hyperdrive-menu`.
+
+00:11:59.933 --> 00:12:02.379
+And you will notice that there are options
+
+00:12:02.380 --> 00:12:05.132
+to download the file, for example.
+
+00:12:05.133 --> 00:12:07.212
+If you are reading somebody else's file,
+
+00:12:07.213 --> 00:12:10.012
+you can download it to your own file system.
+
+00:12:10.013 --> 00:12:12.012
+Let me do that. "Download."
+
+00:12:12.013 --> 00:12:14.752
+And it is asking me, "Where do you want to save this?"
+
+00:12:14.753 --> 00:12:20.673
+For now, I will save it in the `/tmp/`, like this.
+
+00:12:20.673 --> 00:12:23.212
+Let's call it test.org.
+
+00:12:23.213 --> 00:12:25.052
+Okay, `/tmp/test.org`.
+
+00:12:25.053 --> 00:12:29.092
+Let me go and visit `test.org`.
+
+00:12:29.093 --> 00:12:30.279
+And there it is.
+
+00:12:30.280 --> 00:12:32.652
+It downloaded it just like that.
+
+00:12:32.653 --> 00:12:35.372
+This is how you can, for example,
+
+00:12:35.373 --> 00:12:38.472
+download the pictures and videos
+
+00:12:38.473 --> 00:12:42.332
+that I will eventually share on my hyperdrive.
+
+00:12:42.333 --> 00:12:44.712
+Let's invoke `hyperdrive-menu` again.
+
+00:12:44.713 --> 00:12:48.052
+And let's go up to the parent, you see,
+
+00:12:48.053 --> 00:12:50.512
+with the caret (`^`) sign.
+
+00:12:50.513 --> 00:12:53.172
+This will take me to the parent directory,
+
+00:12:53.173 --> 00:12:56.572
+in this case, the root directory of my hyperdrive.
+
+NOTE Dired like interface
+
+00:12:56.573 --> 00:12:58.352
+Let me do it a bit differently.
+
+00:12:58.353 --> 00:13:00.192
+The same idea, a bit differently.
+
+00:13:00.193 --> 00:13:02.732
+For those of you who are familiar with
+
+00:13:02.733 --> 00:13:05.912
+Dired and the `dired-jump` command,
+
+00:13:05.913 --> 00:13:08.752
+Dired is the standard file manager of Emacs.
+
+00:13:08.753 --> 00:13:13.172
+And `dired-jump` is a command that lets you jump
+
+00:13:13.173 --> 00:13:14.592
+from the current file
+
+00:13:14.593 --> 00:13:18.652
+to the directory that contains that file.
+
+00:13:18.653 --> 00:13:20.732
+So you see, I am here.
+
+00:13:20.733 --> 00:13:22.552
+The `dired-jump` command, by default,
+
+00:13:22.553 --> 00:13:25.232
+is bound to Ctrl-x, Ctrl-j (`C-x C-j`).
+
+00:13:25.233 --> 00:13:29.432
+So if I do `C-x C-j`, in this case,
+
+00:13:29.433 --> 00:13:30.772
+it invokes a command.
+
+00:13:30.773 --> 00:13:33.712
+You can see the name of it, `hyperdrive-up`,
+
+00:13:33.713 --> 00:13:37.732
+which is functionally equivalent to `dired-jump`.
+
+00:13:37.733 --> 00:13:41.332
+It does the same thing, meaning that it took me
+
+00:13:41.333 --> 00:13:45.252
+to the parent directory of this file.
+
+00:13:45.253 --> 00:13:48.252
+I think this is very helpful.
+
+00:13:48.253 --> 00:13:50.692
+This listing over here, in general,
+
+00:13:50.693 --> 00:13:55.272
+tries to mimic or to reuse
+
+00:13:55.273 --> 00:13:58.552
+the knowledge you already have of Dired.
+
+00:13:58.553 --> 00:14:01.072
+For example, if you type `o`,
+
+00:14:01.073 --> 00:14:05.312
+it will open the file at point in the other window,
+
+00:14:05.313 --> 00:14:07.092
+same as in Dired.
+
+00:14:07.093 --> 00:14:08.992
+Whereas if you type `RET`,
+
+00:14:08.993 --> 00:14:11.912
+it would open it in the current window.
+
+00:14:11.913 --> 00:14:16.252
+Again, same as what you will do in Dired.
+
+00:14:16.253 --> 00:14:18.013
+Let's see over here.
+
+00:14:18.014 --> 00:14:21.643
+You have options to jump with `j`,
+
+00:14:21.643 --> 00:14:26.232
+which is using Minibuffer completion to go to a file.
+
+00:14:26.233 --> 00:14:28.432
+Right now, I only have two files,
+
+00:14:28.433 --> 00:14:32.099
+but the idea is the same.
+
+00:14:32.100 --> 00:14:34.012
+It's, again, what you would do in Dired
+
+00:14:34.013 --> 00:14:37.332
+if you type `j` with the default key bindings, though,
+
+00:14:37.333 --> 00:14:40.292
+not with Evil mode or something else.
+
+00:14:40.293 --> 00:14:42.912
+Let's see again what we have over here.
+
+00:14:42.913 --> 00:14:45.933
+You can create a bookmark, and this will work,
+
+00:14:45.934 --> 00:14:48.553
+but no need to show you everything.
+
+00:14:48.554 --> 00:14:50.693
+The idea is that you create a bookmark
+
+00:14:50.694 --> 00:14:53.213
+the way you create any Emacs bookmark,
+
+00:14:53.214 --> 00:14:54.932
+to a file, to a directory.
+
+00:14:54.933 --> 00:14:55.993
+It doesn't matter.
+
+00:14:55.994 --> 00:14:57.733
+And then you can jump to it,
+
+00:14:57.734 --> 00:15:01.233
+the way bookmarks in Emacs always work.
+
+NOTE History in hyperdrive
+
+00:15:01.234 --> 00:15:02.892
+What I want to show you now
+
+00:15:02.893 --> 00:15:06.312
+a little bit is the history.
+
+00:15:06.313 --> 00:15:09.012
+History in Hyperdrive
+
+00:15:09.013 --> 00:15:11.433
+has to do with the drive itself.
+
+00:15:11.434 --> 00:15:13.613
+Meaning that individual files
+
+00:15:13.614 --> 00:15:15.313
+do not have their own history,
+
+00:15:15.314 --> 00:15:18.673
+but the drive as such has a history.
+
+00:15:18.674 --> 00:15:22.013
+Whenever you add a file, you remove a file,
+
+00:15:22.014 --> 00:15:25.672
+or you edit a file, you are incrementing
+
+00:15:25.673 --> 00:15:29.132
+the versioning of the hyperdrive by one.
+
+00:15:29.133 --> 00:15:34.573
+So each action corresponds to one unit of history.
+
+00:15:34.574 --> 00:15:37.832
+If you add a file, remove a file, and edit a file,
+
+00:15:37.833 --> 00:15:40.992
+this means that you are up three versions.
+
+00:15:40.993 --> 00:15:44.712
+So whatever your version number is, plus three.
+
+00:15:44.713 --> 00:15:48.912
+I am on version 24* over here. [* latest, not version 24]
+
+00:15:48.913 --> 00:15:55.932
+Let me go to this file now,
+
+00:15:55.933 --> 00:15:59.792
+and let me do `V h`
+
+00:15:59.793 --> 00:16:02.173
+to see a history of it.
+
+00:16:02.173 --> 00:16:07.552
+You will notice that between versions 23 and 24,
+
+00:16:07.553 --> 00:16:09.972
+this file was constant.
+
+00:16:09.973 --> 00:16:12.632
+But in version 25, we have a change.
+
+00:16:12.633 --> 00:16:14.352
+When you are in this buffer over here,
+
+00:16:14.353 --> 00:16:17.212
+you can type the equals sign (`=`),
+
+00:16:17.213 --> 00:16:22.373
+which is a key binding that will bring up the diff.
+
+00:16:22.373 --> 00:16:24.472
+So the set of changes between
+
+00:16:24.473 --> 00:16:27.032
+the previous version and the current version.
+
+00:16:27.033 --> 00:16:32.512
+And you see here, between versions 23 and 25,
+
+00:16:32.513 --> 00:16:35.092
+I have this addition.
+
+00:16:35.093 --> 00:16:38.372
+I think this is wonderful because now
+
+00:16:38.373 --> 00:16:41.172
+you can always go and check
+
+00:16:41.173 --> 00:16:42.412
+what is the state of this file.
+
+00:16:42.413 --> 00:16:43.852
+What is this person up to?
+
+00:16:43.853 --> 00:16:46.312
+What have they been changing?
+
+00:16:46.313 --> 00:16:50.792
+And with Hyperdrive, you can also visit…
+
+00:16:50.793 --> 00:16:58.513
+Let me go to the parent here.
+
+00:16:58.514 --> 00:17:02.412
+You can always visit a previous history.
+
+00:17:02.413 --> 00:17:06.012
+So, for example, I will go to the previous history,
+
+00:17:06.013 --> 00:17:08.032
+and let me see this file again
+
+00:17:08.033 --> 00:17:09.553
+in its previous history.
+
+00:17:09.554 --> 00:17:11.093
+I am looking at the file,
+
+00:17:11.094 --> 00:17:15.153
+but notice that the file now is not editable
+
+00:17:15.154 --> 00:17:17.353
+because this is in the past.
+
+00:17:17.354 --> 00:17:19.313
+I cannot rewrite history.
+
+00:17:19.314 --> 00:17:23.413
+I can only go to the present and then modify it
+
+00:17:23.414 --> 00:17:27.213
+and then create a new history, a new version.
+
+00:17:27.214 --> 00:17:31.213
+But this helps me see the state of the file
+
+00:17:31.214 --> 00:17:35.973
+at that version of the hyperdrive.
+
+00:17:35.973 --> 00:17:39.973
+So this is the basic idea of it, folks.
+
+NOTE Use case of sharing large files
+
+00:17:39.973 --> 00:17:42.233
+What I want to do then is
+
+00:17:42.234 --> 00:17:46.253
+continue with my process here.
+
+00:17:46.254 --> 00:17:51.973
+Let me actually do it like this so that you can see.
+
+00:17:51.973 --> 00:17:54.373
+Continue with the process of
+
+00:17:54.374 --> 00:17:56.493
+publishing all those files
+
+00:17:56.494 --> 00:17:59.753
+that I have on my hyperdrive.
+
+00:17:59.754 --> 00:18:02.853
+For example, this is a picture of a flower
+
+00:18:02.854 --> 00:18:04.113
+that I have taken.
+
+00:18:04.114 --> 00:18:05.733
+I think it's very nice.
+
+00:18:05.734 --> 00:18:08.032
+And this is a video of an eagle
+
+00:18:08.033 --> 00:18:09.593
+that was flying above me.
+
+00:18:09.594 --> 00:18:13.773
+And I will share this on the Hyperdrive network.
+
+00:18:13.774 --> 00:18:15.732
+From the network, by the way,
+
+00:18:15.733 --> 00:18:18.452
+you can also stream video as well.
+
+00:18:18.453 --> 00:18:20.693
+It is described in the hyperdrive.el manual,
+
+00:18:20.694 --> 00:18:24.252
+but I cannot show you everything right now.
+
+00:18:24.253 --> 00:18:26.512
+I think you get the idea.
+
+00:18:26.513 --> 00:18:29.712
+The gist is, you have a file system
+
+00:18:29.713 --> 00:18:31.912
+that you can share with the world
+
+00:18:31.913 --> 00:18:34.132
+using peer-to-peer technology.
+
+00:18:34.133 --> 00:18:38.519
+And for me, this is a powerful tool.
+
+00:18:38.520 --> 00:18:41.912
+This is a valuable proposition
+
+00:18:41.913 --> 00:18:45.012
+because I can share these large files I have,
+
+00:18:45.013 --> 00:18:47.432
+these pictures or videos,
+
+00:18:47.433 --> 00:18:49.712
+which I cannot post on my website
+
+00:18:49.713 --> 00:18:52.712
+due to bandwidth considerations.
+
+00:18:52.713 --> 00:18:55.592
+And this way, I can still share with the world
+
+00:18:55.593 --> 00:18:59.073
+something that I consider interesting.
+
+00:18:59.073 --> 00:19:00.212
+That's all for today, folks.
+
+00:19:00.213 --> 00:19:01.893
+Thank you very much for your attention.
+
+00:19:01.894 --> 00:19:05.513
+Remember that hyperdrive.el is still in development
+
+00:19:05.514 --> 00:19:07.393
+and things may change.
+
+00:19:07.394 --> 00:19:10.312
+But the fundamentals are in place
+
+00:19:10.313 --> 00:19:13.073
+and will remain constant.
+
+00:19:13.073 --> 00:19:19.460
+That's all for today. Take care. Goodbye.
+
+00:19:19.461 --> 00:19:20.793
+[Joseph]: Thank you, Prot.
+
+NOTE Drive creation with hyperdrive.el
+
+00:19:20.913 --> 00:19:23.852
+Another fundamental feature of hyperdrive.el
+
+00:19:23.980 --> 00:19:26.319
+is drive creation.
+
+00:19:26.319 --> 00:19:28.338
+The first step, as always,
+
+00:19:28.339 --> 00:19:30.858
+is to make sure that the gateway is running.
+
+00:19:30.859 --> 00:19:35.118
+So I'll open up `hyperdrive-menu` with `C-c h`.
+
+00:19:35.119 --> 00:19:36.778
+By the way, my key presses,
+
+00:19:36.779 --> 00:19:38.698
+as well as the commands that they run,
+
+00:19:38.699 --> 00:19:42.438
+can be seen at the top right of my screen.
+
+00:19:42.439 --> 00:19:44.618
+Down here, I see that the gateway is off.
+
+00:19:44.619 --> 00:19:49.138
+So I'll start it with `G s`.
+
+00:19:49.139 --> 00:19:50.559
+Now, it takes a few moments
+
+00:19:50.560 --> 00:19:52.219
+for the gateway to spin up.
+
+00:19:52.219 --> 00:19:54.298
+So to refresh the menu,
+
+00:19:54.299 --> 00:19:58.398
+I will close it and open it again.
+
+00:19:58.399 --> 00:20:01.218
+And now we see that the gateway is on.
+
+00:20:01.219 --> 00:20:05.919
+I'll press `N` to create a new drive.
+
+00:20:05.919 --> 00:20:09.758
+Now it's prompting me for a new hyperdrive seed.
+
+00:20:09.759 --> 00:20:12.938
+A seed is a string of characters
+
+00:20:12.939 --> 00:20:14.998
+that will be used to generate,
+
+00:20:14.999 --> 00:20:18.298
+in tandem with my secret master key,
+
+00:20:18.299 --> 00:20:21.338
+a new public key that will globally,
+
+00:20:21.339 --> 00:20:24.878
+uniquely identify this drive.
+
+00:20:24.879 --> 00:20:31.758
+So I'll type in "emacsconf".
+
+00:20:31.759 --> 00:20:32.658
+And after a moment,
+
+00:20:32.659 --> 00:20:36.998
+we see the newly created, empty drive.
+
+00:20:36.999 --> 00:20:40.098
+So I'll open up `hyperdrive-menu` once more.
+
+00:20:40.099 --> 00:20:43.798
+And I'll press `h` to open the sub-menu that shows
+
+00:20:43.799 --> 00:20:45.978
+more information about this hyperdrive,
+
+00:20:45.979 --> 00:20:50.878
+as well as commands related to this drive.
+
+00:20:50.879 --> 00:20:54.918
+In blue here, we see the seed that I just entered
+
+00:20:54.919 --> 00:21:00.219
+as well as the public key that it generated.
+
+00:21:00.219 --> 00:21:02.198
+We also see that the petname
+
+00:21:02.199 --> 00:21:06.539
+is also set to emacsconf.
+
+00:21:06.540 --> 00:21:09.038
+The petname is different from the seed.
+
+00:21:09.039 --> 00:21:13.078
+The petname is my personal, local identifier
+
+00:21:13.079 --> 00:21:14.678
+for this drive.
+
+00:21:14.679 --> 00:21:16.819
+I can change it whenever I want.
+
+00:21:16.819 --> 00:21:19.738
+And while it's not a secret,
+
+00:21:19.739 --> 00:21:23.998
+it's not displayed to other users.
+
+00:21:23.999 --> 00:21:26.359
+So I will leave it for now.
+
+00:21:26.360 --> 00:21:28.138
+"emacsconf" is fine.
+
+00:21:28.139 --> 00:21:30.858
+But when I go to share this drive,
+
+00:21:30.859 --> 00:21:34.158
+I'll want to display something more memorable
+
+00:21:34.159 --> 00:21:36.878
+than this long public key.
+
+00:21:36.879 --> 00:21:39.219
+And that's what the nickname is for.
+
+00:21:39.219 --> 00:21:42.518
+I'll change that by pressing `n`,
+
+00:21:42.519 --> 00:21:48.219
+and I'll type in "Emacs Conference".
+
+00:21:48.219 --> 00:21:51.358
+Now, when other peers load this hyperdrive
+
+00:21:51.359 --> 00:21:57.058
+by its URL, which I can copy by pressing `w`,
+
+00:21:57.059 --> 00:21:59.498
+they will see the nickname
+
+00:21:59.499 --> 00:22:02.018
+in addition to the public key.
+
+00:22:02.019 --> 00:22:05.720
+So if hyperdrive.el is like a phone book,
+
+00:22:05.720 --> 00:22:09.419
+the public keys are akin to phone numbers,
+
+00:22:09.419 --> 00:22:13.938
+the nickname is like the name that your contacts
+
+00:22:13.939 --> 00:22:16.298
+give you when they introduce themselves,
+
+00:22:16.299 --> 00:22:18.318
+and the petname is the name
+
+00:22:18.319 --> 00:22:22.298
+that you actually write down in your phone book.
+
+00:22:22.299 --> 00:22:25.298
+I'll show you what nicknames and petnames look like
+
+00:22:25.299 --> 00:22:29.619
+for drives that are not writable to me.
+
+00:22:29.619 --> 00:22:32.478
+I'll press `C-g` to close this submenu,
+
+00:22:32.479 --> 00:22:34.638
+and now I'm back at the main menu.
+
+00:22:34.639 --> 00:22:39.998
+I'll press `C-u h` to choose a hyperdrive,
+
+00:22:39.999 --> 00:22:44.558
+and I'll look at Prot's hyperdrive here.
+
+00:22:44.559 --> 00:22:46.298
+And here we see that the nickname
+
+00:22:46.299 --> 00:22:49.838
+of Prot's hyperdrive is "Protesilaos".
+
+00:22:49.839 --> 00:22:50.918
+Now, it's grayed out,
+
+00:22:50.919 --> 00:22:53.238
+which means that I can't change it.
+
+00:22:53.239 --> 00:22:56.418
+I can't change it because it's not my hyperdrive.
+
+00:22:56.419 --> 00:22:58.538
+But I can change the petname if I want it
+
+00:22:58.539 --> 00:23:00.538
+to show up under a different name.
+
+00:23:00.539 --> 00:23:02.438
+So I'll press `p`,
+
+00:23:02.439 --> 00:23:06.678
+and I'll type in "Prot", and hit Enter.
+
+00:23:06.679 --> 00:23:11.319
+Now I'll open his hyperdrive by pressing `f`.
+
+00:23:11.319 --> 00:23:13.898
+And I'll pick a path, I'll just hit `RET`
+
+00:23:13.899 --> 00:23:16.758
+to open the root directory.
+
+00:23:16.759 --> 00:23:19.458
+And now, when Prot's hyperdrive shows up,
+
+00:23:19.459 --> 00:23:20.538
+at the top of the screen,
+
+00:23:20.539 --> 00:23:26.198
+I see that it's identified with the petname "Prot."
+
+NOTE hyperdrive-mirror
+
+00:23:26.199 --> 00:23:28.719
+Now I'll show off `hyperdrive-mirror`.
+
+00:23:28.719 --> 00:23:32.158
+`hyperdrive-mirror` is like `hyperdrive-upload-file`,
+
+00:23:32.159 --> 00:23:33.878
+except that it allows you to upload
+
+00:23:33.879 --> 00:23:37.918
+an entire directory full of files recursively.
+
+00:23:37.919 --> 00:23:40.038
+For this example, I will upload
+
+00:23:40.039 --> 00:23:44.819
+the contents of the emacsconf-mirror directory.
+
+00:23:44.819 --> 00:23:48.918
+First step is to open the menu. I'll press H,
+
+00:23:48.919 --> 00:23:53.378
+and then I will choose the emacsconf drive.
+
+00:23:53.379 --> 00:23:57.718
+In the bottom here, we see the Mirror group.
+
+00:23:57.719 --> 00:23:59.478
+The first option that I can change
+
+00:23:59.479 --> 00:24:01.819
+is the source directory.
+
+00:24:01.819 --> 00:24:04.618
+The source directory is the directory on my local
+
+00:24:04.619 --> 00:24:08.819
+machine from which files will be uploaded.
+
+00:24:08.819 --> 00:24:11.198
+By default, the source directory
+
+00:24:11.199 --> 00:24:17.059
+is set to the current directory of the main buffer.
+
+00:24:17.060 --> 00:24:19.419
+This is good for now, so I'll leave it.
+
+00:24:19.419 --> 00:24:22.198
+The target directory is the directory
+
+00:24:22.199 --> 00:24:25.418
+in the hyperdrive where the files will end up.
+
+00:24:25.419 --> 00:24:28.838
+By default, it's the root directory,
+
+00:24:28.839 --> 00:24:30.358
+but for this example,
+
+00:24:30.359 --> 00:24:36.358
+I'll put these files in a subdirectory called notes.
+
+00:24:36.359 --> 00:24:40.298
+The filter is the rule that allows you
+
+00:24:40.299 --> 00:24:43.378
+to programmatically determine which files
+
+00:24:43.379 --> 00:24:46.578
+in the local directory will be uploaded
+
+00:24:46.579 --> 00:24:50.338
+into the hyperdrive, and which ones won't.
+
+00:24:50.339 --> 00:24:54.718
+By default, all files are mirrored, but in this case,
+
+00:24:54.719 --> 00:24:58.498
+let's say that I want to upload only the Org files,
+
+00:24:58.499 --> 00:25:01.358
+these first three, and I want to exclude
+
+00:25:01.359 --> 00:25:05.419
+the markdown file, solar-oven-notes.md.
+
+00:25:05.419 --> 00:25:10.378
+So I'll press `m f`, and I will choose
+
+00:25:10.379 --> 00:25:13.419
+the regular expression string option.
+
+00:25:13.419 --> 00:25:16.278
+If I wanted to, I could choose a named function
+
+00:25:16.279 --> 00:25:22.198
+or a lambda, but I won't demo that here.
+
+00:25:22.199 --> 00:25:26.338
+I'll type in `org$`, which will match against
+
+00:25:26.339 --> 00:25:31.658
+the files that end with "org."
+
+00:25:31.659 --> 00:25:35.898
+The filter is here, and I'll leave confirmation on.
+
+00:25:35.899 --> 00:25:39.718
+The confirmation step just allows me to review
+
+00:25:39.719 --> 00:25:42.138
+the list of files that are going to be uploaded
+
+00:25:42.139 --> 00:25:45.898
+into the drive before it happens.
+
+00:25:45.899 --> 00:25:52.878
+So I'll press `m m` to mirror them, and I see here
+
+00:25:52.879 --> 00:25:58.438
+that these three files are going to be uploaded.
+
+00:25:58.439 --> 00:26:05.558
+Looks good. I'll press `C-c C-c` to confirm the mirror.
+
+00:26:05.559 --> 00:26:07.738
+Now it says three files have been uploaded,
+
+00:26:07.739 --> 00:26:11.378
+and here they are in the drive.
+
+00:26:11.379 --> 00:26:15.818
+Good, so now I will modify the
+
+00:26:15.819 --> 00:26:19.938
+fermented-overnight-oats file in the hyperdrive.
+
+00:26:19.939 --> 00:26:24.339
+So I've loaded it, and I'll add here:
+
+00:26:24.340 --> 00:26:31.818
+"or other grains - cook them in advance if you want to,"
+
+00:26:31.819 --> 00:26:33.778
+and I'll save it.
+
+00:26:33.779 --> 00:26:37.778
+Now this file, fermented-overnight-oats.org,
+
+00:26:37.779 --> 00:26:40.678
+has been modified on the hyperdrive
+
+00:26:40.679 --> 00:26:44.538
+more recently than on the file system.
+
+00:26:44.539 --> 00:26:48.899
+The file system file has not been modified.
+
+00:26:48.900 --> 00:26:53.818
+So I'll go back to my local directory,
+
+00:26:53.819 --> 00:26:56.538
+and I'll modify a different file.
+
+00:26:56.539 --> 00:27:00.458
+In this case, I'll add another hoedown
+
+00:27:00.459 --> 00:27:04.619
+to the fiddle-tunes.org file.
+
+00:27:04.619 --> 00:27:09.619
+"Tom and Jerry." That's a good hoedown.
+
+00:27:09.619 --> 00:27:14.119
+And now I'll mirror again.
+
+00:27:14.119 --> 00:27:16.778
+So I'll open the menu, and I'll press `h`,
+
+00:27:16.779 --> 00:27:20.578
+and then I'll open up the emacsconf demo drive.
+
+00:27:20.579 --> 00:27:22.958
+And now I've also decided that
+
+00:27:22.959 --> 00:27:26.718
+I want to include the solar-oven-notes.md file.
+
+00:27:26.719 --> 00:27:28.498
+So I'll remove the filter
+
+00:27:28.499 --> 00:27:32.119
+so that it's no longer excluded.
+
+00:27:32.119 --> 00:27:34.078
+I'll leave the rest of the settings the same,
+
+00:27:34.079 --> 00:27:38.778
+and I'll press `m m` again.
+
+00:27:38.779 --> 00:27:40.018
+And now we see that the
+
+00:27:40.019 --> 00:27:43.538
+`*hyperdrive-mirror*` buffer looks different.
+
+00:27:43.539 --> 00:27:47.378
+So, there are two main groups.
+
+00:27:47.379 --> 00:27:49.986
+These are the files that are going to be uploaded,
+
+00:27:49.986 --> 00:27:52.898
+and these are the files that are ignored.
+
+00:27:52.899 --> 00:27:56.538
+They're not going to be uploaded.
+
+00:27:56.539 --> 00:28:00.519
+The first subgroup is the files that are new locally.
+
+00:28:00.519 --> 00:28:04.898
+So the solar-oven-notes.md file is new on my machine,
+
+00:28:04.899 --> 00:28:07.319
+and it doesn't exist in the hyperdrive.
+
+00:28:07.319 --> 00:28:10.038
+So the mirror command is going to take that file
+
+00:28:10.039 --> 00:28:13.758
+and add it to the hyperdrive.
+
+00:28:13.759 --> 00:28:17.519
+This group contains the files that are newer locally.
+
+00:28:17.519 --> 00:28:19.778
+So the fiddle-tunes.org file
+
+00:28:19.779 --> 00:28:23.358
+has been modified on my local machine,
+
+00:28:23.359 --> 00:28:26.718
+but it hasn't been modified on the hyperdrive.
+
+00:28:26.719 --> 00:28:28.858
+So `hyperdrive-mirror` is going to take the
+
+00:28:28.859 --> 00:28:33.858
+updated version and put it on the hyperdrive.
+
+00:28:33.859 --> 00:28:35.958
+Now, the first group that's going to be ignored
+
+00:28:35.959 --> 00:28:39.358
+are the files that are older locally.
+
+00:28:39.359 --> 00:28:42.978
+So the fermented oats file has been modified
+
+00:28:42.979 --> 00:28:45.298
+on the hyperdrive more recently
+
+00:28:45.299 --> 00:28:47.538
+than on my local file system.
+
+00:28:47.539 --> 00:28:51.058
+So `hyperdrive-mirror` isn't going to overwrite
+
+00:28:51.059 --> 00:28:53.518
+the version of the file in my hyperdrive
+
+00:28:53.519 --> 00:28:57.278
+with the older local version.
+
+00:28:57.279 --> 00:29:00.778
+And finally, the emacsconf-preparation.org file
+
+00:29:00.779 --> 00:29:05.498
+hasn't been modified on either the hyperdrive
+
+00:29:05.499 --> 00:29:07.438
+or my local file system,
+
+00:29:07.439 --> 00:29:09.718
+and the timestamp is identical.
+
+00:29:09.719 --> 00:29:11.278
+So `hyperdrive-mirror` is going to
+
+00:29:11.279 --> 00:29:13.818
+ignore this file as well.
+
+00:29:13.819 --> 00:29:15.298
+So the only two files that are going
+
+00:29:15.299 --> 00:29:19.318
+to be uploaded now are the solar-oven-notes.md file
+
+00:29:19.319 --> 00:29:21.638
+and the fiddle-tunes.org file.
+
+00:29:21.639 --> 00:29:25.378
+I'll confirm that with `C-c C-c`.
+
+00:29:25.379 --> 00:29:26.578
+And now in my hyperdrive
+
+00:29:26.579 --> 00:29:28.518
+we see that there are four files.
+
+00:29:28.519 --> 00:29:31.678
+The solar-oven-notes.md file has been uploaded,
+
+00:29:31.679 --> 00:29:35.519
+and if I open the fiddle-tunes.org file,
+
+00:29:35.519 --> 00:29:39.478
+we see that it now contains the line "Tom and Jerry,"
+
+00:29:39.479 --> 00:29:41.658
+which means that it was updated based on
+
+00:29:41.659 --> 00:29:47.098
+the change to the file on my local file system.
+
+00:29:47.099 --> 00:29:50.558
+This `hyperdrive-mirror` command is the command
+
+00:29:50.559 --> 00:29:54.138
+that we use to periodically update
+
+00:29:54.139 --> 00:29:56.598
+the USHIN hyperdrive with
+
+00:29:56.599 --> 00:30:00.318
+the contents of the USHIN website.
+
+00:30:00.319 --> 00:30:03.018
+There's going to be a link to the USHIN hyperdrive
+
+00:30:03.019 --> 00:30:06.818
+as well as the website at the end of the video.
+
+NOTE hyperdrive history
+
+00:30:06.819 --> 00:30:09.078
+Now I'll go into a little more detail
+
+00:30:09.079 --> 00:30:11.218
+about the Hyperdrive history buffer
+
+00:30:11.219 --> 00:30:15.818
+by showing off the README file in Prot's hyperdrive.
+
+00:30:15.819 --> 00:30:19.018
+I'll press `C-c h` to open the menu,
+
+00:30:19.019 --> 00:30:22.198
+`C-u h` to be prompted for a drive.
+
+00:30:22.199 --> 00:30:24.238
+I'll select Prot's drive,
+
+00:30:24.239 --> 00:30:26.738
+then I'll press `f` to jump to a file
+
+00:30:26.739 --> 00:30:28.738
+inside of Prot's drive,
+
+00:30:28.739 --> 00:30:32.398
+and then `RET` to go to the root directory.
+
+00:30:32.399 --> 00:30:35.338
+From here, I'll press `j` to jump to
+
+00:30:35.339 --> 00:30:37.298
+an item in his directory.
+
+00:30:37.299 --> 00:30:42.378
+I'll press `RET` on the README to load it.
+
+00:30:42.379 --> 00:30:44.118
+And then finally, I'll open up
+
+00:30:44.119 --> 00:30:49.578
+`C-c h` to look at the menu.
+
+00:30:49.579 --> 00:30:50.978
+Here, I see that I'm looking at
+
+00:30:50.979 --> 00:30:56.858
+the latest version of Prot's README.org file.
+
+00:30:56.859 --> 00:30:58.738
+I also see that the previous version
+
+00:30:58.739 --> 00:31:02.418
+of README.org is unknown.
+
+00:31:02.419 --> 00:31:05.358
+It's unknown because hyperdrives
+
+00:31:05.359 --> 00:31:07.818
+are sparsely replicated.
+
+00:31:07.819 --> 00:31:09.998
+That means that when my node loaded this
+
+00:31:09.999 --> 00:31:12.358
+README.org file, it didn't bother
+
+00:31:12.359 --> 00:31:13.998
+to load anything else.
+
+00:31:13.999 --> 00:31:16.058
+It didn't load the previous history
+
+00:31:16.059 --> 00:31:18.658
+or any other file in his drive.
+
+00:31:18.659 --> 00:31:20.758
+But now that I want to check out whether
+
+00:31:20.759 --> 00:31:26.198
+there is a previous version, I'll press `V p`.
+
+00:31:26.199 --> 00:31:28.918
+And when it loads, I see in the mode line down here
+
+00:31:28.919 --> 00:31:33.318
+that I'm now looking at version 25 of this drive.
+
+00:31:33.319 --> 00:31:36.498
+That means that I'm looking at the README.org file
+
+00:31:36.499 --> 00:31:39.458
+at version 25 of this drive.
+
+00:31:39.459 --> 00:31:42.018
+I'll open the menu again, and I see
+
+00:31:42.019 --> 00:31:47.718
+that the same version number is displayed here.
+
+00:31:47.719 --> 00:31:50.478
+The previous version, before version 25,
+
+00:31:50.479 --> 00:31:53.558
+is also unknown because we haven't bothered
+
+00:31:53.559 --> 00:31:56.858
+to load anything before version 25.
+
+00:31:56.859 --> 00:32:00.478
+I also see that the next version, after version 25,
+
+00:32:00.479 --> 00:32:02.418
+is the latest version.
+
+00:32:02.419 --> 00:32:06.718
+So I'll open that up by pressing `V n`.
+
+00:32:06.719 --> 00:32:10.998
+And now we are back where we started,
+
+00:32:10.999 --> 00:32:12.918
+at the latest version.
+
+00:32:12.919 --> 00:32:15.078
+But now we see that the previous version,
+
+00:32:15.079 --> 00:32:18.998
+the version before the latest version, is version 25.
+
+00:32:18.999 --> 00:32:24.299
+Because now that our node has loaded the previous version,
+
+00:32:24.300 --> 00:32:28.619
+it can display that information to us.
+
+00:32:28.620 --> 00:32:31.639
+From here, I'll open up the history buffer.
+
+00:32:31.640 --> 00:32:35.319
+I'll press `V h`.
+
+00:32:35.320 --> 00:32:40.319
+And I can see that there are two known existent
+
+00:32:40.320 --> 00:32:46.119
+ranges in Prot's README.org history.
+
+00:32:46.119 --> 00:32:50.119
+This means that the latest version of README.org
+
+00:32:50.120 --> 00:32:54.419
+was modified at version 39.
+
+00:32:54.420 --> 00:32:57.479
+And that Prot made four changes
+
+00:32:57.480 --> 00:33:00.319
+to other files in his hyperdrive
+
+00:33:00.320 --> 00:33:04.279
+besides the README.org file since then.
+
+00:33:04.280 --> 00:33:08.659
+Before that, the time that Prot modified
+
+00:33:08.660 --> 00:33:11.839
+the README.org file was at version 25.
+
+00:33:11.840 --> 00:33:15.199
+And then he made 13 other changes to other files
+
+00:33:15.200 --> 00:33:18.579
+inside of this drive.
+
+00:33:18.580 --> 00:33:20.258
+Before that, we don't know.
+
+00:33:20.259 --> 00:33:21.858
+We haven't loaded the history.
+
+00:33:21.859 --> 00:33:23.178
+But since we're curious,
+
+00:33:23.179 --> 00:33:27.919
+I'll hit `RET` on the unknown line.
+
+00:33:27.920 --> 00:33:32.139
+And now we see that in Prot's hyperdrive,
+
+00:33:32.140 --> 00:33:34.939
+the README.org file didn't exist
+
+00:33:34.940 --> 00:33:39.019
+for the first 22 revisions of his drive.
+
+00:33:39.020 --> 00:33:43.779
+Then Prot created it at version 23.
+
+00:33:43.780 --> 00:33:46.919
+Then again, at 25, made a change.
+
+00:33:46.920 --> 00:33:50.559
+And then made another change at 39.
+
+00:33:50.560 --> 00:33:54.419
+For good measure, I'll show you the diffs.
+
+00:33:54.420 --> 00:33:58.179
+The first diff just contains the entire file
+
+00:33:58.180 --> 00:34:05.119
+because the file didn't exist before version 23.
+
+00:34:05.119 --> 00:34:08.619
+Then, at version 25, Prot added a link
+
+00:34:08.620 --> 00:34:13.119
+to the COPYING.org file.
+
+00:34:13.119 --> 00:34:14.219
+And then, at 39,
+
+00:34:14.220 --> 00:34:17.339
+Prot changed the link to his own hyperdrive
+
+00:34:17.340 --> 00:34:20.879
+to be a relative link.
+
+NOTE Streaming video from hyperdrive
+
+00:34:20.880 --> 00:34:24.299
+Now, I'll stream a video from the USHIN hyperdrive
+
+00:34:24.300 --> 00:34:27.899
+that shows off a prototype interface we created
+
+00:34:27.900 --> 00:34:31.719
+for exploring networks of sources of information.
+
+00:34:31.720 --> 00:34:33.939
+I'll open up `hyperdrive-menu`.
+
+00:34:33.940 --> 00:34:37.219
+Press `C-u h` to be prompted for a drive.
+
+00:34:37.220 --> 00:34:39.739
+I'll select the USHIN drive.
+
+00:34:39.740 --> 00:34:41.939
+Press `f` to jump to a file in it.
+
+00:34:41.940 --> 00:34:46.559
+And then I'll jump to the media directory.
+
+00:34:46.560 --> 00:34:50.179
+Once it loads, I'll press `RET` on the video
+
+00:34:50.180 --> 00:34:54.559
+that I want to stream.
+
+00:34:54.560 --> 00:34:56.686
+[Voice from the video]: This is a demonstration
+
+00:34:56.686 --> 00:34:57.838
+of the subjective trust interface
+
+00:34:57.839 --> 00:35:02.499
+that the USHIN team built for the u4u.io web app.
+
+00:35:02.500 --> 00:35:04.079
+[Joseph]: There it is.
+
+00:35:04.080 --> 00:35:07.119
+Streaming a video from Hyperdrive.
+
+NOTE hyperdrive.el under the hood
+
+00:35:08.746 --> 00:35:13.026
+Here's how hyperdrive.el works under the hood.
+
+00:35:13.027 --> 00:35:14.726
+It uses plz [Please],
+
+00:35:14.727 --> 00:35:18.079
+the HTTP library that Adam Porter wrote,
+
+00:35:18.080 --> 00:35:22.719
+to send requests via curl to hyper-gateway.
+
+00:35:22.720 --> 00:35:26.579
+hyper-gateway is a program that Mauve Signweaver wrote,
+
+00:35:26.580 --> 00:35:30.759
+which runs a hyperdrive node under the hood.
+
+00:35:30.760 --> 00:35:34.039
+It also runs a local HTTP server,
+
+00:35:34.040 --> 00:35:38.459
+which accepts requests to control the node.
+
+00:35:38.460 --> 00:35:43.479
+For example, if hyperdrive.el wants to show a file
+
+00:35:43.480 --> 00:35:45.219
+from someone's hyperdrive,
+
+00:35:45.220 --> 00:35:49.119
+it sends the appropriate link via curl
+
+00:35:49.120 --> 00:35:52.959
+as a GET request to hyper-gateway.
+
+00:35:52.960 --> 00:35:57.239
+hyper-gateway then fetches the data from the network
+
+00:35:57.240 --> 00:35:59.339
+and returns it via curl,
+
+00:35:59.340 --> 00:36:03.939
+via plz, back to hyperdrive.el.
+
+00:36:03.940 --> 00:36:07.419
+If hyper-gateway already has a locally cached copy,
+
+00:36:07.420 --> 00:36:09.239
+it doesn't bother checking the network.
+
+00:36:09.240 --> 00:36:12.559
+It just sends it straight away.
+
+00:36:12.560 --> 00:36:15.879
+Likewise, if hyperdrive.el wants to add a file
+
+00:36:15.880 --> 00:36:20.199
+to a hyperdrive, it sends a PUT request.
+
+00:36:20.200 --> 00:36:24.979
+hyper-gateway is not installed as part of hyperdrive.el.
+
+00:36:24.980 --> 00:36:26.659
+It needs to be installed
+
+00:36:26.660 --> 00:36:35.739
+as a separate, executable program.
+
+00:36:35.740 --> 00:36:39.459
+We have plans to switch from using hyper-gateway
+
+00:36:39.460 --> 00:36:42.458
+to another program that Mauve Signweaver
+
+00:36:42.459 --> 00:36:47.838
+is working on, called hyper-sdk-rpc.
+
+00:36:47.839 --> 00:36:52.019
+hyper-sdk-rpc will give us more fine-grained control
+
+00:36:52.020 --> 00:36:54.699
+over the underlying Hyperdrive node,
+
+00:36:54.700 --> 00:36:56.819
+which will open up some new features.
+
+00:36:56.820 --> 00:37:00.899
+For example, we'll be able to rename files atomically,
+
+00:37:00.900 --> 00:37:03.419
+diff directories between versions,
+
+00:37:03.420 --> 00:37:11.219
+and list the peers that we're currently connected to.
+
+00:37:11.220 --> 00:37:13.359
+Here are some of the Emacs libraries
+
+00:37:13.360 --> 00:37:17.539
+that hyperdrive.el depends on.
+
+00:37:17.540 --> 00:37:22.399
+Hyperdrive.el uses plz to send HTTP requests
+
+00:37:22.400 --> 00:37:25.698
+to hyper-gateway. Check it out.
+
+00:37:25.699 --> 00:37:28.559
+It's on GNU ELPA.
+
+00:37:28.560 --> 00:37:33.639
+ewoc.el is a built-in library that's documented
+
+00:37:33.640 --> 00:37:37.339
+in the Emacs Lisp manual under the rather cryptic
+
+00:37:37.340 --> 00:37:41.599
+heading "Abstract Display Functions."
+
+00:37:41.600 --> 00:37:44.519
+Really, what it does is it allows you
+
+00:37:44.520 --> 00:37:49.999
+to map a data model to some display.
+
+00:37:50.000 --> 00:37:53.859
+What we do with it in hyperdrive.el is,
+
+00:37:53.860 --> 00:38:02.049
+in the directory view, we map directory entry items,
+
+00:38:02.049 --> 00:38:04.239
+files and directories, to display items.
+
+00:38:04.240 --> 00:38:08.700
+And ewoc.el makes it easy to update the display
+
+00:38:08.701 --> 00:38:14.760
+whenever the underlying data changes.
+
+00:38:14.761 --> 00:38:21.279
+Hyperdrive.el uses persist.el to store
+
+00:38:21.280 --> 00:38:25.639
+Hyperdrive metadata about known hyperdrives
+
+00:38:25.640 --> 00:38:29.480
+as well as version history between sessions,
+
+00:38:29.481 --> 00:38:32.120
+so that the data is cached
+
+00:38:32.121 --> 00:38:34.960
+when you log out and log back in.
+
+00:38:34.961 --> 00:38:38.720
+If you're going to be developing a program in Emacs
+
+00:38:38.721 --> 00:38:41.960
+for Emacs 29 or later,
+
+00:38:41.961 --> 00:38:44.940
+I recommend looking at multisession.el,
+
+00:38:44.941 --> 00:38:50.160
+because it's built-in, and it has some features
+
+00:38:50.161 --> 00:38:57.540
+that persist.el doesn't have.
+
+NOTE Next steps
+
+00:38:57.541 --> 00:39:00.000
+Thank you for listening to this talk.
+
+00:39:00.001 --> 00:39:03.680
+I hope you get a chance to try out hyperdrive.el.
+
+00:39:03.681 --> 00:39:08.620
+Here is a link to the hyperdrive.el manual
+
+00:39:08.621 --> 00:39:11.560
+in the USHIN hyperdrive.
+
+00:39:11.561 --> 00:39:14.980
+When you go to paste this link in,
+
+00:39:14.981 --> 00:39:18.920
+you'll need to combine it back into one line.
+
+00:39:18.921 --> 00:39:22.500
+This link is available in the hyperdrive.el manual,
+
+00:39:22.501 --> 00:39:26.660
+which is available from within a browser,
+
+00:39:26.661 --> 00:39:29.820
+at this link on the USHIN website.
+
+00:39:29.821 --> 00:39:32.960
+We also have a public conference room that you can join.
+
+00:39:32.961 --> 00:39:35.520
+It's an XMPP multi-user chat
+
+00:39:35.521 --> 00:39:39.780
+that the Sopranica team graciously makes available
+
+00:39:39.781 --> 00:39:41.620
+for us to use.
+
+00:39:41.621 --> 00:39:43.900
+There's also a Matrix bridge,
+
+00:39:43.901 --> 00:39:48.659
+if that's more your cup of tea.
+
+00:39:48.660 --> 00:39:52.820
+Thank you to the EmacsConf organizers.
+
+00:39:52.821 --> 00:39:55.160
+It's been a pleasure to participate,
+
+00:39:55.161 --> 00:39:57.613
+and I look forward to hearing the rest of the talks.
+
+00:39:57.614 --> 00:40:02.859
+Have a good day.
diff --git a/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt b/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt
new file mode 100644
index 00000000..7d2db739
--- /dev/null
+++ b/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt
@@ -0,0 +1,353 @@
+WEBVTT
+
+
+00:00:03.340 --> 00:00:03.480
+Today I will share a nice workflow I have
+
+00:00:04.400 --> 00:00:04.900
+developed for stream of consciousness
+
+00:00:06.560 --> 00:00:06.759
+journaling. The goal of stream of
+
+00:00:08.080 --> 00:00:08.240
+consciousness journaling is to get your
+
+00:00:09.960 --> 00:00:10.080
+thoughts on the screen as effectively and
+
+00:00:10.679 --> 00:00:11.040
+efficiently as possible.
+
+00:00:12.780 --> 00:00:12.980
+These 2 features when combined reinforce each
+
+00:00:14.860 --> 00:00:15.060
+other and let you hear yourself think in a
+
+00:00:15.960 --> 00:00:16.460
+very efficient manner,
+
+00:00:17.220 --> 00:00:17.580
+increasing the number,
+
+00:00:18.960 --> 00:00:19.160
+quality, and types of thoughts you can get
+
+00:00:21.100 --> 00:00:21.260
+out of it. The tools I will be using for this
+
+00:00:22.680 --> 00:00:23.099
+are Emacs, KL line from the Hyperbolt
+
+00:00:24.080 --> 00:00:24.279
+package, centered cursor mode,
+
+00:00:25.119 --> 00:00:25.619
+Olivetti mode, and optionally,
+
+00:00:26.820 --> 00:00:27.240
+voice to text. Additionally,
+
+00:00:28.939 --> 00:00:29.119
+you can see my commands and key bindings on
+
+00:00:31.500 --> 00:00:31.680
+the right. I will start off by showing a
+
+00:00:32.119 --> 00:00:32.619
+typing demo
+
+00:00:48.120 --> 00:00:48.620
+about how my day went.
+
+00:01:12.900 --> 00:01:13.180
+There are certain functionalities for stream
+
+00:01:14.640 --> 00:01:14.960
+of consciousness journaling that are desired
+
+00:01:15.900 --> 00:01:16.320
+or detrimental to the process.
+
+00:01:17.040 --> 00:01:17.540
+Stream of thought functionalities,
+
+00:01:26.000 --> 00:01:26.240
+things I want. The ability to optionally use
+
+00:01:27.720 --> 00:01:28.020
+speech to text. I do this by using
+
+00:01:29.380 --> 00:01:29.880
+Nerdictation, a Python program.
+
+00:01:32.320 --> 00:01:32.480
+I am still experimenting with this as it
+
+00:01:34.120 --> 00:01:34.200
+changes the quality and types of thoughts you
+
+00:01:35.280 --> 00:01:35.720
+can get out of stream of consciousness
+
+00:01:37.680 --> 00:01:37.880
+journaling. I am still looking for better
+
+00:01:39.900 --> 00:01:40.240
+ways of doing this. The ability to easily
+
+00:01:41.680 --> 00:01:41.880
+organize and split off my thoughts by
+
+00:01:43.040 --> 00:01:43.540
+creating and manipulating outlines.
+
+00:01:46.280 --> 00:01:46.560
+Creating them in real time is needed for live
+
+00:01:48.240 --> 00:01:48.720
+journaling and allows for later editing
+
+00:01:53.140 --> 00:01:53.300
+really easily. I showed off some of these
+
+00:01:56.479 --> 00:01:56.740
+commands before. To just write words without
+
+00:01:57.540 --> 00:01:58.040
+worrying about format.
+
+00:02:00.160 --> 00:02:00.480
+To not worry about scrolling,
+
+00:02:01.640 --> 00:02:02.140
+I use centered cursor mode.
+
+00:02:05.200 --> 00:02:05.660
+To not worry about lines,
+
+00:02:06.960 --> 00:02:07.460
+I use the KOutline auto-filling
+
+00:02:09.360 --> 00:02:09.800
+functionality. To not worry about pressing
+
+00:02:11.400 --> 00:02:11.720
+Enter, and to have a nice looking journal
+
+00:02:12.660 --> 00:02:13.160
+with hard returns afterwards.
+
+00:02:19.060 --> 00:02:19.320
+Manually filling is needed with spacing when
+
+00:02:22.160 --> 00:02:22.660
+it is wrong. I do that with metaJ.
+
+00:02:30.680 --> 00:02:31.180
+Counterproductive functionality.
+
+00:02:33.480 --> 00:02:33.680
+Spell checking. While this is useful for
+
+00:02:35.500 --> 00:02:35.680
+editing, it is not useful for stream of
+
+00:02:36.220 --> 00:02:36.720
+consciousness journaling.
+
+00:02:39.020 --> 00:02:39.140
+Having this on or off conditionally while you
+
+00:02:40.760 --> 00:02:40.940
+are live journaling is a killer feature of
+
+00:02:48.040 --> 00:02:48.460
+Emacs. Reading slash editing the journal.
+
+00:02:50.240 --> 00:02:50.380
+Part of the value proposition of this is to
+
+00:02:51.420 --> 00:02:51.820
+listen to what you are thinking,
+
+00:02:52.680 --> 00:02:53.180
+so this is needed functionality.
+
+00:02:55.580 --> 00:02:55.680
+You cannot listen very well when you are
+
+00:02:57.360 --> 00:02:57.720
+speaking, and the converse is true as well.
+
+00:02:59.240 --> 00:02:59.440
+You cannot speak very well when you are
+
+00:03:01.280 --> 00:03:01.440
+listening, decreasing what you can get out of
+
+00:03:04.120 --> 00:03:04.240
+it. Features when editing or listening to
+
+00:03:05.200 --> 00:03:05.700
+your journal. Spell checking.
+
+00:03:07.780 --> 00:03:08.280
+I use the Spackage Spellfoo,
+
+00:03:20.740 --> 00:03:20.980
+but there are others. I use multiple panes to
+
+00:03:25.040 --> 00:03:25.440
+read and edit. I use a combination of follow
+
+00:03:27.940 --> 00:03:28.440
+mode and some of my custom functions.
+
+00:03:31.860 --> 00:03:32.360
+These are what I use right here.
+
+00:03:53.360 --> 00:03:53.480
+The ability to change the view specs of the
+
+00:03:59.340 --> 00:03:59.840
+document. Stuff like, toggling blank lines.
+
+00:04:08.300 --> 00:04:08.800
+Show the first heading of everything.
+
+00:04:18.620 --> 00:04:18.839
+You can also export the KOutline pages to
+
+00:04:21.560 --> 00:04:21.779
+HTML for other people to read or another way
+
+00:04:29.440 --> 00:04:29.940
+to look at it. Easy manipulation of cells.
+
+00:04:34.040 --> 00:04:34.160
+You use the Alt and arrow keys just like in
+
+00:04:37.200 --> 00:04:37.700
+Orm mode to delete cells easily.
+
+00:04:47.020 --> 00:04:47.180
+The ability to manually reformat KL9 cells in
+
+00:04:49.540 --> 00:04:49.760
+addition to auto formatting of the cells for
+
+00:04:50.860 --> 00:04:51.180
+when spacing looks off.
+
+00:04:53.900 --> 00:04:54.080
+MetaJ is nice, and auto-filling is also nice
+
+00:04:54.920 --> 00:04:55.420
+for having multiple pages.
+
+00:04:58.660 --> 00:04:59.020
+Why do I use these tools versus other common
+
+00:05:06.060 --> 00:05:06.200
+tools? K-Outline vs. Playtext Writing in
+
+00:05:08.460 --> 00:05:08.600
+outlines helps me easily structure my
+
+00:05:09.960 --> 00:05:10.280
+thoughts in a way that is easy to write,
+
+00:05:12.500 --> 00:05:12.800
+read, and edit. Org Mode vs.
+
+00:05:15.360 --> 00:05:15.600
+K-Outline Org Mode gives me lots of ways to
+
+00:05:17.120 --> 00:05:17.620
+structure my journal slash document.
+
+00:05:19.600 --> 00:05:20.100
+While this is great for a lot of things,
+
+00:05:21.540 --> 00:05:22.040
+for stream of consciousness journaling,
+
+00:05:24.960 --> 00:05:25.140
+this causes decision fatigue and loss of
+
+00:05:30.320 --> 00:05:30.720
+concentration. Types of questions I get when
+
+00:05:31.960 --> 00:05:32.460
+structuring an org-mode document?
+
+00:05:35.080 --> 00:05:35.400
+Do I keep everything in a heading or below
+
+00:05:36.100 --> 00:05:36.600
+the heading in paragraphs?
+
+00:05:38.080 --> 00:05:38.240
+How do I handle new lines?
+
+00:05:40.240 --> 00:05:40.520
+Do I just use visual line mode with no hard
+
+00:05:42.520 --> 00:05:42.880
+returns? Or if I make hard returns,
+
+00:05:44.800 --> 00:05:45.300
+on what line number do I do them?
+
+00:05:50.080 --> 00:05:50.460
+More visual line nodes in org-mode documents
+
+00:05:52.660 --> 00:05:53.160
+like a potential org ID in your property
+
+00:05:57.720 --> 00:05:57.940
+stores. While a lot of the above is really
+
+00:05:59.880 --> 00:06:00.060
+nice if you are making something like a
+
+00:06:01.640 --> 00:06:02.060
+website to present to other people,
+
+00:06:04.080 --> 00:06:04.340
+these features are counterproductive to
+
+00:06:05.040 --> 00:06:05.540
+stream-of-thought journaling.
+
+00:06:08.900 --> 00:06:09.200
+Org mode is also top-notch for other things
+
+00:06:11.780 --> 00:06:12.280
+such as GTD. I don't think org mode has
+
+00:06:13.820 --> 00:06:14.280
+bindings to create child,
+
+00:06:15.460 --> 00:06:15.960
+same-level, and parent cells.
+
+00:06:19.340 --> 00:06:19.600
+Centered cursor mode versus scroll lock mode
+
+00:06:22.640 --> 00:06:22.960
+built-in. Scroll lock mode changes its place
+
+00:06:28.180 --> 00:06:28.380
+when you move the cursor from the bottom or
+
+00:06:30.080 --> 00:06:30.280
+the top of the page. Centered cursor mode
+
+00:06:33.420 --> 00:06:33.680
+will reliably fix itself to the center when
+
+00:06:36.280 --> 00:06:36.780
+the cursor position is not there.
diff --git a/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt
new file mode 100644
index 00000000..d48cc06d
--- /dev/null
+++ b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt
@@ -0,0 +1,1910 @@
+WEBVTT
+
+
+00:00:13.099 --> 00:00:13.599
+[Speaker 0]: Okay. Hello, everyone.
+
+00:00:16.560 --> 00:00:17.060
+I think this is the start of the Q&A session.
+
+00:00:25.119 --> 00:00:25.599
+So people can just ask me questions here.
+
+00:00:28.259 --> 00:00:28.380
+Or I think maybe these questions are going to
+
+00:00:30.560 --> 00:00:30.980
+be read by someone. Yes,
+
+00:00:34.680 --> 00:00:35.060
+thank you. Should I start doing that?
+
+00:00:39.280 --> 00:00:39.400
+I also know that there's questions in the
+
+00:00:41.320 --> 00:00:41.480
+either pad room, so I could start out
+
+00:00:42.280 --> 00:00:42.780
+answering those as well.
+
+00:00:45.020 --> 00:00:45.300
+[Speaker 1]: Right, sure. Whichever way you prefer.
+
+00:00:46.860 --> 00:00:47.220
+If you prefer to read the questions yourself,
+
+00:00:48.940 --> 00:00:49.080
+by all means, or if you would prefer me to
+
+00:00:50.080 --> 00:00:50.280
+read them to you, that also works.
+
+00:00:50.580 --> 00:00:50.920
+[Speaker 2]: Oh, I see.
+
+00:00:51.600 --> 00:00:51.760
+[Speaker 0]: Why don't you read them to me?
+
+00:00:53.260 --> 00:00:53.760
+I think it'll just be more interesting then.
+
+00:00:56.820 --> 00:00:57.160
+[Speaker 1]: Sure. OK, let's see. The first question is,
+
+00:00:58.360 --> 00:00:58.860
+what is your use case for embedding,
+
+00:01:00.060 --> 00:01:00.560
+mainly for searching?
+
+00:01:06.180 --> 00:01:06.340
+[Speaker 0]: Yeah, I mean, I think the use case really is
+
+00:01:12.100 --> 00:01:12.320
+searching. And I think it is very useful when
+
+00:01:15.060 --> 00:01:15.320
+you're searching for something in a vague
+
+00:01:18.280 --> 00:01:18.780
+way. Just to give you an example,
+
+00:01:23.860 --> 00:01:24.360
+I have a note system called EKG.
+
+00:01:25.760 --> 00:01:26.260
+I type all my notes on it.
+
+00:01:28.620 --> 00:01:29.120
+You can find it on GitHub and Melba.
+
+00:01:34.140 --> 00:01:34.400
+But I wrote something at some point a year
+
+00:01:35.840 --> 00:01:36.020
+ago or something. I wrote something that I
+
+00:01:36.600 --> 00:01:36.980
+just vaguely remembered.
+
+00:01:38.800 --> 00:01:38.940
+Oh, this was about a certain kind of
+
+00:01:41.580 --> 00:01:41.760
+communication. I wanted communicating to
+
+00:01:43.280 --> 00:01:43.479
+large audiences. There's some interesting tip
+
+00:01:44.700 --> 00:01:45.060
+that I wrote down that was really cool.
+
+00:01:49.920 --> 00:01:50.080
+And I was like, well, I need to find it.
+
+00:01:52.260 --> 00:01:52.640
+So I did an embedding search for something
+
+00:01:55.479 --> 00:01:55.979
+like, you know, tips for communicating.
+
+00:01:58.979 --> 00:01:59.100
+Like those words may not have been in what I
+
+00:02:00.020 --> 00:02:00.520
+was trying to find at all,
+
+00:02:02.680 --> 00:02:03.180
+But it was able to find it.
+
+00:02:05.840 --> 00:02:06.260
+And that is something that's very hard to do
+
+00:02:07.200 --> 00:02:07.360
+in other ways. Like, you know,
+
+00:02:08.520 --> 00:02:08.720
+if you had to do this with normal search,
+
+00:02:09.199 --> 00:02:09.660
+you have to do synonyms.
+
+00:02:10.940 --> 00:02:11.200
+And like maybe those synonyms wouldn't cover
+
+00:02:11.960 --> 00:02:12.340
+it. Like with embedding,
+
+00:02:13.940 --> 00:02:14.160
+you can basically get at like the vague
+
+00:02:14.960 --> 00:02:15.460
+sentiment. You're like,
+
+00:02:17.320 --> 00:02:17.560
+you know, you're, you know,
+
+00:02:19.520 --> 00:02:19.700
+you can really query on like what things are
+
+00:02:21.760 --> 00:02:22.260
+about as opposed to what words they have.
+
+00:02:25.600 --> 00:02:26.100
+Also, it's super good for similarity search.
+
+00:02:27.720 --> 00:02:27.900
+So you could say, look,
+
+00:02:30.040 --> 00:02:30.240
+I have a bunch of things that are encoded
+
+00:02:31.400 --> 00:02:31.900
+with embeddings that I want to show.
+
+00:02:34.120 --> 00:02:34.280
+For example, you can make an embedding for
+
+00:02:35.220 --> 00:02:35.380
+every buffer. You'd be like,
+
+00:02:37.060 --> 00:02:37.200
+well, show me buffers that are similar to
+
+00:02:38.740 --> 00:02:38.980
+this buffer. That doesn't sound super useful,
+
+00:02:40.440 --> 00:02:40.940
+but this is the kind of thing you could do.
+
+00:02:45.300 --> 00:02:45.480
+And so if you have a bunch of notes or
+
+00:02:46.720 --> 00:02:46.920
+something else that you want to search on,
+
+00:02:48.240 --> 00:02:48.740
+you'd be like, what's similar to this buffer?
+
+00:02:51.500 --> 00:02:51.760
+Or what notes are similar to each other?
+
+00:02:53.040 --> 00:02:53.540
+What buffers are similar to each other?
+
+00:02:55.380 --> 00:02:55.880
+It's super good for this sort of thing.
+
+00:03:00.780 --> 00:03:01.280
+And it's also good for this kind of retrieval
+
+00:03:03.080 --> 00:03:03.520
+augmented generation, where you sort of,
+
+00:03:05.080 --> 00:03:05.280
+you retrieve things and the purpose is not
+
+00:03:06.600 --> 00:03:06.880
+for you to see them, but then you pass that
+
+00:03:12.040 --> 00:03:12.180
+to the LLM. And then it's able to be a little
+
+00:03:14.340 --> 00:03:14.800
+bit more accurate because it has the actual
+
+00:03:15.760 --> 00:03:16.260
+text that you're trying to,
+
+00:03:18.960 --> 00:03:19.180
+that is relevant, and it can cite from and
+
+00:03:20.720 --> 00:03:20.820
+things like that. And then it could give you
+
+00:03:22.260 --> 00:03:22.660
+a much better answer that's kind of,
+
+00:03:25.520 --> 00:03:25.680
+you know, not just from its own little neural
+
+00:03:26.320 --> 00:03:26.820
+nets and memory.
+
+00:03:31.920 --> 00:03:32.120
+[Speaker 1]: Cool, thanks. Let's see,
+
+00:03:35.740 --> 00:03:36.100
+next question. What do you think about embed
+
+00:03:40.160 --> 00:03:40.660
+Emacs manual versus GPT's Emacs manual?
+
+00:03:45.480 --> 00:03:45.660
+[Speaker 0]: I'm not exactly sure what this question is
+
+00:03:46.980 --> 00:03:47.480
+trying to say. So I mean,
+
+00:03:51.000 --> 00:03:51.140
+if someone wrote that and wants to expand on
+
+00:03:55.080 --> 00:03:55.320
+it a little bit, but I think that maybe
+
+00:03:58.420 --> 00:03:58.920
+you're saying like you could embed,
+
+00:04:00.280 --> 00:04:00.780
+have embeddings for like various,
+
+00:04:02.520 --> 00:04:02.720
+like every paragraph or something of the
+
+00:04:04.540 --> 00:04:04.680
+Emacs manual. But it's also the case that
+
+00:04:06.500 --> 00:04:07.000
+like GPT is already for sure already read it,
+
+00:04:09.760 --> 00:04:09.960
+right? And so you could ask questions that
+
+00:04:13.460 --> 00:04:13.780
+are about Emacs and our ELISP or whatever
+
+00:04:15.200 --> 00:04:15.700
+part of the manual you want to find.
+
+00:04:19.760 --> 00:04:20.240
+And it will do a reasonably good job,
+
+00:04:22.280 --> 00:04:22.780
+especially the better models will do a
+
+00:04:24.620 --> 00:04:24.940
+reasonably good job of saying you something
+
+00:04:26.040 --> 00:04:26.540
+that is vaguely accurate.
+
+00:04:29.440 --> 00:04:29.860
+But if you do this retrieval augmented
+
+00:04:30.580 --> 00:04:31.080
+generation with embeddings,
+
+00:04:32.640 --> 00:04:33.140
+you can get something that is very accurate.
+
+00:04:36.700 --> 00:04:36.960
+At least I think. I haven't tried it,
+
+00:04:38.760 --> 00:04:39.020
+but this is a technique that works in other
+
+00:04:43.040 --> 00:04:43.260
+similar cases. So you can also imagine like,
+
+00:04:44.320 --> 00:04:44.500
+oh, this whole thing I said,
+
+00:04:47.860 --> 00:04:48.120
+like, oh, you can query for vague things and
+
+00:04:49.140 --> 00:04:49.600
+get parts of the manual,
+
+00:04:52.680 --> 00:04:53.000
+perhaps. I'm not exactly sure if that would
+
+00:04:55.120 --> 00:04:55.520
+be useful, but maybe. Usually when I'm
+
+00:04:57.040 --> 00:04:57.180
+looking things up in the Emacs manual or
+
+00:04:58.320 --> 00:04:58.780
+Elist manual, I have something extremely
+
+00:05:00.020 --> 00:05:00.300
+specific and I kind of know where to look.
+
+00:05:02.960 --> 00:05:03.080
+But having other ways to get at this
+
+00:05:04.000 --> 00:05:04.500
+information is always good.
+
+00:05:10.240 --> 00:05:10.740
+[Speaker 1]: Right. Looks like they added a clarification
+
+00:05:12.280 --> 00:05:12.720
+if you would like to read that yourself,
+
+00:05:14.180 --> 00:05:14.680
+or would you like me to read it for you?
+
+00:05:17.640 --> 00:05:18.140
+[Speaker 0]: Yeah. Yes, OK. It says,
+
+00:05:20.460 --> 00:05:20.740
+I've never tried. Yeah,
+
+00:05:21.500 --> 00:05:21.820
+the question is like OK,
+
+00:05:23.100 --> 00:05:23.240
+there is a difference between the kind of
+
+00:05:23.860 --> 00:05:24.360
+thing as I just described.
+
+00:05:26.200 --> 00:05:26.600
+I have not tried the difference with the EMAX
+
+00:05:31.560 --> 00:05:31.980
+manual itself. It'd be interesting to see
+
+00:05:33.700 --> 00:05:33.960
+what this is, but I would expect like these
+
+00:05:35.140 --> 00:05:35.600
+techniques, the retrieval augmented
+
+00:05:38.840 --> 00:05:39.340
+generation is generally pretty good.
+
+00:05:41.240 --> 00:05:41.740
+And I suspect it would,
+
+00:05:43.580 --> 00:05:43.780
+I would bet money on the fact that it's gonna
+
+00:05:45.820 --> 00:05:46.240
+give you, you know, better results than just,
+
+00:05:48.160 --> 00:05:48.360
+you know, doing a free form query without any
+
+00:05:49.440 --> 00:05:49.940
+retrieval augmented generation.
+
+00:05:54.240 --> 00:05:54.640
+[Speaker 1]: Cool. Let's see. Next question.
+
+00:05:56.380 --> 00:05:56.880
+When deferring commit messages to an LLM,
+
+00:05:59.700 --> 00:05:59.920
+what, if anything, do you find you might have
+
+00:06:02.940 --> 00:06:03.440
+[Speaker 0]: lost? Yeah, it's a good question.
+
+00:06:06.060 --> 00:06:06.560
+When deferring anything to a computer,
+
+00:06:08.860 --> 00:06:09.360
+like, you know, I used to have to remember
+
+00:06:11.200 --> 00:06:11.700
+how to get places, and now,
+
+00:06:14.540 --> 00:06:15.040
+you know, on the few occasions which I drive,
+
+00:06:16.560 --> 00:06:16.720
+like, It could just tell me how to get
+
+00:06:21.960 --> 00:06:22.280
+places. So similar things could occur here
+
+00:06:24.960 --> 00:06:25.460
+where like, okay, I'm just leaving the LLM.
+
+00:06:27.380 --> 00:06:27.680
+And so I'm kind of missing out on some
+
+00:06:30.040 --> 00:06:30.220
+opportunity to think coherently about a
+
+00:06:32.440 --> 00:06:32.680
+particular commit. Particular commits are
+
+00:06:36.140 --> 00:06:36.540
+kind of low level. I don't think it's usually
+
+00:06:39.340 --> 00:06:39.840
+relatively obvious and what they're doing.
+
+00:06:42.600 --> 00:06:42.800
+And in this case, I think there's not much
+
+00:06:44.220 --> 00:06:44.540
+loss. But for sure, in other cases,
+
+00:06:46.400 --> 00:06:46.900
+if you're starting to get into situations
+
+00:06:48.640 --> 00:06:48.800
+where it's writing your emails and all this
+
+00:06:52.920 --> 00:06:53.300
+stuff. First of all, it's in 1 sense,
+
+00:06:55.580 --> 00:06:56.040
+I'm not sure you might be losing something by
+
+00:06:57.520 --> 00:06:57.780
+delegating things. On the other hand,
+
+00:06:59.120 --> 00:06:59.280
+you know, when you're interacting with these
+
+00:07:01.280 --> 00:07:01.560
+LLMs, you have to be extremely specific about
+
+00:07:03.120 --> 00:07:03.240
+what you want, or else it's just not going to
+
+00:07:07.540 --> 00:07:07.680
+do a good job. And that might actually be a
+
+00:07:09.440 --> 00:07:09.860
+good thing. So the question might be that
+
+00:07:11.820 --> 00:07:12.240
+maybe you might gain things by using an LLM
+
+00:07:13.860 --> 00:07:14.060
+to do your work. It might not actually even
+
+00:07:15.060 --> 00:07:15.400
+save you that much time,
+
+00:07:18.480 --> 00:07:18.640
+at least initially, because you have to kind
+
+00:07:20.460 --> 00:07:20.660
+of practice again super specific about what
+
+00:07:22.740 --> 00:07:22.900
+you want to get out of the output it's going
+
+00:07:26.940 --> 00:07:26.980
+to give you so like oh I'm you know maybe you
+
+00:07:29.600 --> 00:07:29.820
+know you're on the emacs devel mailing list
+
+00:07:31.780 --> 00:07:31.980
+and you're like okay write this email about
+
+00:07:34.000 --> 00:07:34.140
+this about this And here's what I want to
+
+00:07:35.370 --> 00:07:35.460
+say. And here's the kind of tone I want to
+
+00:07:36.020 --> 00:07:36.420
+use. And here's the like,
+
+00:07:37.660 --> 00:07:38.160
+oh, you might want to specify like everything
+
+00:07:39.620 --> 00:07:40.120
+that you kind of want to get into this.
+
+00:07:42.180 --> 00:07:42.680
+Usually it's easier just to write the email.
+
+00:07:45.600 --> 00:07:46.100
+But I think that practice of kind of
+
+00:07:48.080 --> 00:07:48.420
+understanding what you want is not something
+
+00:07:52.680 --> 00:07:53.180
+you normally do. And I think it's going to be
+
+00:07:56.040 --> 00:07:56.480
+an interesting exercise that will help people
+
+00:07:57.280 --> 00:07:57.540
+understand. That said,
+
+00:07:58.860 --> 00:07:59.020
+I haven't done that much of that,
+
+00:07:59.900 --> 00:08:00.040
+so I can't say, oh, yeah,
+
+00:08:01.080 --> 00:08:01.440
+I've done this and it works for me.
+
+00:08:03.000 --> 00:08:03.120
+Maybe. I think it's an interesting thing to
+
+00:08:03.120 --> 00:08:03.620
+explore.
+
+00:08:07.720 --> 00:08:08.220
+[Speaker 1]: Sure. Thanks. Let's see.
+
+00:08:10.840 --> 00:08:11.140
+Let's see. Can you share your font settings
+
+00:08:13.440 --> 00:08:13.740
+in your Emacs config? Those are some nice
+
+00:08:14.200 --> 00:08:14.700
+fonts for reading.
+
+00:08:18.900 --> 00:08:19.200
+[Speaker 0]: Yeah, I think I was using Menlo at the time.
+
+00:08:20.840 --> 00:08:20.980
+Unfortunately, I don't save those kinds of
+
+00:08:21.940 --> 00:08:22.200
+things, like a history of this.
+
+00:08:24.000 --> 00:08:24.500
+I've kind of switched now to,
+
+00:08:27.340 --> 00:08:27.540
+what was that? I think I wrote it down in
+
+00:08:29.440 --> 00:08:29.940
+the, I switched to MunaSpace,
+
+00:08:31.920 --> 00:08:32.420
+which just came out like a week or 2 ago,
+
+00:08:33.340 --> 00:08:33.840
+and is also pretty cool.
+
+00:08:35.440 --> 00:08:35.940
+So I think it's Menlo.
+
+00:08:37.380 --> 00:08:37.760
+The internal question,
+
+00:08:38.400 --> 00:08:38.900
+what font are you using?
+
+00:08:42.020 --> 00:08:42.340
+[Speaker 1]: Indeed, yeah. It looks like someone guessed
+
+00:08:43.780 --> 00:08:44.280
+as well that it might be Menlo.
+
+00:08:47.680 --> 00:08:48.040
+OK, Cool. Yeah, next question.
+
+00:08:48.900 --> 00:08:49.400
+In terms of standardization,
+
+00:08:53.260 --> 00:08:53.520
+do you see a need for the medium to large
+
+00:08:55.840 --> 00:08:56.160
+scale effort needed? And then they also
+
+00:08:56.960 --> 00:08:57.460
+elaborate about it.
+
+00:09:03.600 --> 00:09:04.100
+[Speaker 0]: Yeah, I mean, I do think,
+
+00:09:06.040 --> 00:09:06.300
+I don't know if it's large scale,
+
+00:09:08.000 --> 00:09:08.500
+but at least it's probably medium scale.
+
+00:09:10.320 --> 00:09:10.520
+There's a lot of things that are missing that
+
+00:09:12.260 --> 00:09:12.400
+we don't have right now in emacs when you're
+
+00:09:13.660 --> 00:09:14.160
+dealing with LLMs. 1 is,
+
+00:09:18.240 --> 00:09:18.420
+a prompting system. And by that,
+
+00:09:21.820 --> 00:09:22.020
+I mean, you know, prompts are just like big
+
+00:09:24.520 --> 00:09:24.720
+blocks of text, but there's also senses that
+
+00:09:28.260 --> 00:09:28.420
+like prompts need to be composable and you
+
+00:09:30.480 --> 00:09:30.660
+need to be able to iterate on parts of the
+
+00:09:36.600 --> 00:09:37.100
+prompt. And so it's also customizable.
+
+00:09:38.940 --> 00:09:39.060
+Users might want to customize it.
+
+00:09:41.260 --> 00:09:41.360
+On the other hand, it's not super easy to
+
+00:09:43.820 --> 00:09:44.320
+write the prompt. So you want really good
+
+00:09:47.900 --> 00:09:48.040
+defaults. So the whole prompt system is kind
+
+00:09:51.360 --> 00:09:51.460
+of complicated. That needs to be kind of
+
+00:09:52.580 --> 00:09:52.760
+standardized, because I don't think there's
+
+00:09:54.380 --> 00:09:54.720
+any tools for doing something like that right
+
+00:09:58.380 --> 00:09:58.880
+now. I personally use my system,
+
+00:10:00.220 --> 00:10:00.600
+my note system for EKG.
+
+00:10:01.720 --> 00:10:01.920
+I don't think that's appropriate for
+
+00:10:02.800 --> 00:10:03.120
+everyone, but it does,
+
+00:10:04.480 --> 00:10:04.640
+I did write it to have some of these
+
+00:10:06.540 --> 00:10:06.760
+capabilities of composability that I think
+
+00:10:08.360 --> 00:10:08.860
+are useful for a prompt generation.
+
+00:10:11.940 --> 00:10:12.280
+It'd be nice to have a system like that,
+
+00:10:15.660 --> 00:10:16.160
+but for general use. I don't,
+
+00:10:17.840 --> 00:10:18.060
+this is something I've been meaning to think
+
+00:10:18.840 --> 00:10:19.000
+about, like how to do it,
+
+00:10:19.760 --> 00:10:19.920
+but like this, you know,
+
+00:10:21.260 --> 00:10:21.660
+if someone's interested in getting this area,
+
+00:10:26.120 --> 00:10:26.420
+like, I would love to chat about that or,
+
+00:10:27.600 --> 00:10:27.980
+you know, I think there's a lot of
+
+00:10:31.020 --> 00:10:31.260
+interesting ideas that we could have to have
+
+00:10:34.080 --> 00:10:34.540
+a system that allows us to make progress
+
+00:10:38.860 --> 00:10:39.360
+here. And also, I think there's more to
+
+00:10:40.520 --> 00:10:40.900
+standardization to be done.
+
+00:10:42.820 --> 00:10:43.140
+1 thing I'd also like to see that we haven't
+
+00:10:47.020 --> 00:10:47.220
+done yet is a system for standardizing on
+
+00:10:48.060 --> 00:10:48.560
+getting structured output.
+
+00:10:49.640 --> 00:10:50.140
+This is gonna be super useful.
+
+00:10:52.280 --> 00:10:52.780
+I have this for open AIs API,
+
+00:10:53.560 --> 00:10:54.060
+cause they support it.
+
+00:10:55.940 --> 00:10:56.040
+And it's really nice, cause then you can
+
+00:10:57.440 --> 00:10:57.660
+write elist functions that like,
+
+00:10:59.380 --> 00:10:59.880
+okay, I'm going to call the LLM.
+
+00:11:00.760 --> 00:11:01.000
+I'm gonna get structured output.
+
+00:11:02.040 --> 00:11:02.160
+I know what that structure is going to be.
+
+00:11:03.480 --> 00:11:03.680
+It's not going to be just a big block of
+
+00:11:05.660 --> 00:11:06.040
+text. I could turn it into a,
+
+00:11:07.000 --> 00:11:07.480
+you know, a P list or something.
+
+00:11:09.280 --> 00:11:09.480
+And then I could get the values out of that P
+
+00:11:11.880 --> 00:11:12.260
+list. And I know that way I could do,
+
+00:11:14.220 --> 00:11:14.720
+I could write actual apps that are,
+
+00:11:18.300 --> 00:11:18.720
+you know, very, very sort of,
+
+00:11:20.200 --> 00:11:20.680
+you know, useful for very specific purposes
+
+00:11:21.900 --> 00:11:22.400
+and not just for text generation.
+
+00:11:24.000 --> 00:11:24.320
+And I think that's 1 of the most important
+
+00:11:27.100 --> 00:11:27.540
+things we want to do. And I have some ideas
+
+00:11:28.840 --> 00:11:29.160
+about how to do it. I just haven't pursued
+
+00:11:31.640 --> 00:11:32.040
+those yet. But if other people have ideas,
+
+00:11:34.340 --> 00:11:34.540
+I think this would be really interesting to
+
+00:11:35.520 --> 00:11:36.020
+add to the LLM package.
+
+00:11:37.260 --> 00:11:37.760
+So contact me there.
+
+00:11:42.100 --> 00:11:42.600
+[Speaker 1]: Awesome. Quick note before we continue.
+
+00:11:44.440 --> 00:11:44.540
+So I'm not sure how long we're going to be on
+
+00:11:46.040 --> 00:11:46.280
+stream for, because this is the last talk
+
+00:11:48.640 --> 00:11:49.120
+before the break. If we are on the stream
+
+00:11:49.840 --> 00:11:50.200
+long-term, then great.
+
+00:11:51.820 --> 00:11:52.300
+But if not, folks are welcome to continue
+
+00:11:53.320 --> 00:11:53.680
+writing questions on the pad.
+
+00:11:55.140 --> 00:11:55.280
+And hopefully, Andrew will get to them at
+
+00:11:58.020 --> 00:11:58.280
+some point. Or if Andrew maybe has some extra
+
+00:11:59.960 --> 00:12:00.140
+time available and wants to stay on
+
+00:12:01.640 --> 00:12:01.920
+BigBlueButton here, then folks are also
+
+00:12:03.940 --> 00:12:04.340
+welcome to join here and chat with Andrew
+
+00:12:08.940 --> 00:12:09.240
+directly as well. Okay,
+
+00:12:10.740 --> 00:12:10.900
+awesome. So yeah, the next question is,
+
+00:12:12.040 --> 00:12:12.400
+what are your thoughts on the carbon
+
+00:12:14.060 --> 00:12:14.560
+footprint of LLM usage?
+
+00:12:17.200 --> 00:12:17.700
+[Speaker 0]: Yeah, it's a really interesting question.
+
+00:12:23.180 --> 00:12:23.360
+I don't have any particular knowledge or
+
+00:12:25.440 --> 00:12:25.580
+opinions about that. It's something I think
+
+00:12:26.980 --> 00:12:27.180
+we should all be educating ourselves more
+
+00:12:32.240 --> 00:12:32.380
+about. It is really, I mean,
+
+00:12:33.040 --> 00:12:33.220
+there's 2 parts of this,
+
+00:12:35.380 --> 00:12:35.500
+right? They take a, there's a huge amount of
+
+00:12:37.160 --> 00:12:37.360
+carbon footprint involved in training these
+
+00:12:38.720 --> 00:12:39.220
+things. Then running them is relatively
+
+00:12:42.540 --> 00:12:42.880
+lightweight. So the question is not
+
+00:12:44.440 --> 00:12:44.920
+necessarily like once it's trained,
+
+00:12:46.480 --> 00:12:46.640
+like I don't feel like it's a big deal to
+
+00:12:48.280 --> 00:12:48.560
+keep using it, but like training these things
+
+00:12:50.680 --> 00:12:51.180
+is kind of like the big carbon cost of it.
+
+00:12:53.680 --> 00:12:54.160
+But like right now, the way everything's
+
+00:12:56.040 --> 00:12:56.260
+going, like every, you know,
+
+00:12:59.060 --> 00:12:59.560
+all, you know, the top 5 or 6 tech companies
+
+00:13:00.900 --> 00:13:01.400
+are all training their LLMs,
+
+00:13:03.580 --> 00:13:03.740
+and this is all costing a giant amount of
+
+00:13:06.820 --> 00:13:07.060
+carbon probably. On the other hand these same
+
+00:13:08.560 --> 00:13:08.680
+companies are pretty good about using the
+
+00:13:10.260 --> 00:13:10.440
+least amount of carbon necessary you know
+
+00:13:12.340 --> 00:13:12.740
+they have their own their tricks for doing
+
+00:13:13.260 --> 00:13:13.760
+things very efficiently.
+
+00:13:22.100 --> 00:13:22.360
+[Speaker 1]: Cool next question, LLMs are slow and
+
+00:13:24.000 --> 00:13:24.340
+responding. Do you think Emacs should provide
+
+00:13:26.680 --> 00:13:27.180
+more async primitives to keep it responsive?
+
+00:13:29.380 --> 00:13:29.880
+Like the URL retrieve is quite bad at
+
+00:13:31.720 --> 00:13:31.760
+building API clients with it.
+
+00:13:31.920 --> 00:13:32.420
+Building API clients with it?
+
+00:13:36.400 --> 00:13:36.900
+[Speaker 0]: Yeah. Well, OK, so first of all,
+
+00:13:40.240 --> 00:13:40.740
+people should be using the LLM client.
+
+00:13:48.740 --> 00:13:48.900
+And So right now, 1 thing I should have
+
+00:13:50.220 --> 00:13:50.440
+mentioned at the top is that there are new
+
+00:13:52.500 --> 00:13:52.640
+packages that I recorded this talk that you
+
+00:13:54.480 --> 00:13:54.920
+just saw several months ago.
+
+00:13:57.780 --> 00:13:58.180
+And so like Elama, there's this package Elama
+
+00:13:59.700 --> 00:14:00.080
+that came out that is using the LM package.
+
+00:14:02.440 --> 00:14:02.680
+And so for example, it doesn't need to worry
+
+00:14:05.140 --> 00:14:05.580
+about this sort of thing because it just uses
+
+00:14:07.560 --> 00:14:07.920
+LLM and package and the LLM package worries
+
+00:14:11.680 --> 00:14:11.820
+about this. And while I'm on the subject of
+
+00:14:12.540 --> 00:14:12.720
+things I forgot to mention,
+
+00:14:15.140 --> 00:14:15.340
+I also should just mention very quickly that
+
+00:14:17.020 --> 00:14:17.520
+there is now an open source model,
+
+00:14:21.680 --> 00:14:21.960
+Mistral. And so that's kind of this new thing
+
+00:14:23.860 --> 00:14:24.240
+on the scene that happened after I recorded
+
+00:14:26.240 --> 00:14:26.420
+my talk. And I think it's super important to
+
+00:14:28.660 --> 00:14:28.820
+the community and important that we have the
+
+00:14:30.620 --> 00:14:31.120
+opportunity to use that if we want to.
+
+00:14:33.160 --> 00:14:33.660
+Okay, but to answer the actual question,
+
+00:14:37.660 --> 00:14:38.100
+there has been some talk about the problems
+
+00:14:40.680 --> 00:14:40.840
+with URL retrieve in the URL package in
+
+00:14:42.200 --> 00:14:42.700
+general in EmacsDevEl.
+
+00:14:46.760 --> 00:14:47.080
+It's not great. I would like to have better
+
+00:14:50.900 --> 00:14:51.040
+primitives. And I've asked the author of
+
+00:14:54.060 --> 00:14:54.560
+Please PLZ to kind of provide some necessary
+
+00:14:56.120 --> 00:14:56.620
+callbacks. I think that's a great library.
+
+00:15:00.280 --> 00:15:00.360
+And I'd like to see that kind of like,
+
+00:15:01.320 --> 00:15:01.680
+It's nice that we have options,
+
+00:15:03.340 --> 00:15:03.520
+and that is an option that uses curl on the
+
+00:15:05.140 --> 00:15:05.640
+back end, and that has some benefits.
+
+00:15:09.060 --> 00:15:09.280
+So there's this big debate about whether we
+
+00:15:10.600 --> 00:15:11.100
+should have primitives or just use curl.
+
+00:15:13.340 --> 00:15:13.420
+I'm not exactly sure what the right call is,
+
+00:15:15.320 --> 00:15:15.820
+but there has been discussions about this.
+
+00:15:19.540 --> 00:15:20.040
+[Speaker 1]: Excellent. And someone commented that GPTEL
+
+00:15:21.820 --> 00:15:22.200
+is async and apparently very good at tracking
+
+00:15:22.300 --> 00:15:22.800
+the point.
+
+00:15:26.680 --> 00:15:27.180
+[Speaker 0]: Yes, yes, GPTEL has similar functionalities
+
+00:15:29.800 --> 00:15:30.040
+to LLM, although I believe it's going to move
+
+00:15:33.040 --> 00:15:33.540
+to LLM itself sometime soon.
+
+00:15:39.480 --> 00:15:39.860
+[Speaker 1]: Next question, speaking of which,
+
+00:15:42.440 --> 00:15:42.560
+anyone trained or fine-tuned or prompted a
+
+00:15:44.680 --> 00:15:44.760
+model with their org data yet and applied it
+
+00:15:46.560 --> 00:15:47.040
+to interesting use cases like planning,
+
+00:15:47.920 --> 00:15:48.340
+scheduling, et cetera,
+
+00:15:49.320 --> 00:15:49.820
+and maybe care to comment?
+
+00:15:54.620 --> 00:15:55.120
+[Speaker 0]: I don't know anyone who is doing that.
+
+00:15:55.860 --> 00:15:56.360
+I think it is interesting.
+
+00:15:57.800 --> 00:15:58.300
+Like this is what I kind of mentioned at the
+
+00:16:01.060 --> 00:16:01.300
+very end of the talk. There is a lot of stuff
+
+00:16:02.440 --> 00:16:02.540
+there like you could you know if you
+
+00:16:04.760 --> 00:16:04.920
+especially mean an LLM can kind of work as
+
+00:16:07.940 --> 00:16:08.160
+sort of like a secretary kind of person that
+
+00:16:12.180 --> 00:16:12.440
+could help you prioritize Still it's a
+
+00:16:14.760 --> 00:16:14.920
+slightly unclear how what the best way to use
+
+00:16:16.480 --> 00:16:16.720
+it is So I think there's more of a question
+
+00:16:18.340 --> 00:16:18.480
+for the community about like what people have
+
+00:16:21.140 --> 00:16:21.320
+been trying. I see someone has mentioned that
+
+00:16:23.400 --> 00:16:23.900
+they are using it for weekly review.
+
+00:16:26.940 --> 00:16:27.180
+And it's kind of nice to like,
+
+00:16:29.060 --> 00:16:29.380
+maybe you could read your agenda or maybe
+
+00:16:30.480 --> 00:16:30.780
+this for like weekly review.
+
+00:16:32.040 --> 00:16:32.240
+It could like read all the stuff you've done
+
+00:16:33.340 --> 00:16:33.480
+and ask you questions about it.
+
+00:16:35.020 --> 00:16:35.280
+And like, what should happen next?
+
+00:16:36.520 --> 00:16:36.780
+Or like, is this going to cause a problem?
+
+00:16:39.060 --> 00:16:39.280
+Like, I can, I can understand if that could
+
+00:16:40.860 --> 00:16:41.180
+happen? That's like, that's kind of nice.
+
+00:16:43.660 --> 00:16:44.160
+And this kind of people have had good success
+
+00:16:48.540 --> 00:16:48.760
+out of using these LLMs to bounce ideas off
+
+00:16:49.920 --> 00:16:50.420
+of are, you know, for,
+
+00:16:52.680 --> 00:16:52.800
+you know, I've seen people say that like they
+
+00:16:55.360 --> 00:16:55.600
+want, they use it for reading and they kind
+
+00:16:58.520 --> 00:16:58.740
+of dialogue with the LM to kind of like do
+
+00:16:59.500 --> 00:17:00.000
+sort of active reading.
+
+00:17:02.500 --> 00:17:02.860
+So you can imagine doing something similar
+
+00:17:04.400 --> 00:17:04.740
+with your tasks where it's sort of you're
+
+00:17:06.560 --> 00:17:06.760
+engaged in dialogue about like planning your
+
+00:17:08.880 --> 00:17:09.000
+tax with some with a alum that could kind of
+
+00:17:10.800 --> 00:17:11.180
+understand what those are and ask you some
+
+00:17:13.780 --> 00:17:13.940
+questions I think it. You know,
+
+00:17:16.839 --> 00:17:17.040
+if it'd be nice. So, the problem is like
+
+00:17:18.480 --> 00:17:18.980
+there's no great way to share all this stuff.
+
+00:17:20.720 --> 00:17:21.220
+I guess if you have something like this,
+
+00:17:23.300 --> 00:17:23.720
+put it on Reddit. If you don't have Reddit,
+
+00:17:24.599 --> 00:17:24.880
+I don't know what to do.
+
+00:17:26.000 --> 00:17:26.500
+I would say put it somewhere.
+
+00:17:28.840 --> 00:17:29.020
+At the very least, I could maybe open up like
+
+00:17:31.320 --> 00:17:31.820
+an LLM discussion session on the LLM package
+
+00:17:34.000 --> 00:17:34.500
+GitHub, But not everyone likes to use GitHub.
+
+00:17:36.100 --> 00:17:36.180
+I don't know. It'd be nice if there's a
+
+00:17:38.940 --> 00:17:39.060
+mailing list or IRC chat for this sort of
+
+00:17:40.840 --> 00:17:41.340
+thing. But there isn't at the moment.
+
+00:17:46.560 --> 00:17:46.720
+[Speaker 1]: All right. Let's see. I think that's the end
+
+00:17:48.080 --> 00:17:48.580
+of the questions on the pad so far.
+
+00:17:51.020 --> 00:17:51.180
+There was also some discussion or some
+
+00:17:52.260 --> 00:17:52.760
+chatter, I believe, on IRC.
+
+00:17:54.560 --> 00:17:54.820
+I'm not sure. Andrew, are you on IRC right
+
+00:18:00.060 --> 00:18:00.260
+[Speaker 0]: I am, but I don't think I'm on any place that
+
+00:18:01.400 --> 00:18:01.640
+has the chatter. So if there's chatter,
+
+00:18:02.440 --> 00:18:02.940
+then I'm not seeing it.
+
+00:18:04.600 --> 00:18:05.100
+[Speaker 1]: now? Okay. Yeah, it was in the emacsconf-dev
+
+00:18:06.760 --> 00:18:07.260
+channel.
+
+00:18:09.600 --> 00:18:10.100
+[Speaker 0]: Okay, let me see if I can.
+
+00:18:25.600 --> 00:18:25.840
+Oh, yes. I mean, I could see the channel,
+
+00:18:27.520 --> 00:18:27.840
+but I missed whatever came before.
+
+00:18:29.340 --> 00:18:29.480
+So if there's anything you want to kind of
+
+00:18:30.840 --> 00:18:31.340
+call out, I can try to answer it here.
+
+00:18:35.320 --> 00:18:35.640
+[Speaker 1]: OK, cool. I believe at least 2 other folks
+
+00:18:37.500 --> 00:18:38.000
+who are participating in the discussion there
+
+00:18:40.120 --> 00:18:40.620
+who have also joined here on BigBlueButton,
+
+00:18:42.440 --> 00:18:42.940
+Codin Quark and AeonTurn92.
+
+00:18:47.000 --> 00:18:47.480
+So you folks, if Andrew is still available
+
+00:18:50.460 --> 00:18:50.640
+and has time, you're welcome to chat here and
+
+00:18:53.000 --> 00:18:53.320
+ask questions or discuss here as well.
+
+00:18:55.580 --> 00:18:55.840
+[Speaker 0]: 1 Thank you. Thank you for your help,
+
+00:18:57.740 --> 00:18:58.080
+and thank you for reading all the questions.
+
+00:18:59.700 --> 00:18:59.820
+[Speaker 1]: AUDIENCE 2 Cheers, and thanks to you for a
+
+00:19:00.540 --> 00:19:01.040
+great talk and the discussion.
+
+00:19:01.880 --> 00:19:02.380
+[Speaker 0]: AUDIENCE AUDIENCE 1 Thank you.
+
+00:19:03.140 --> 00:19:03.640
+[Speaker 1]: AUDIENCE 2 Cheers.
+
+00:19:07.900 --> 00:19:08.040
+[Speaker 0]: So I'll just, I will wait here and see if
+
+00:19:08.320 --> 00:19:08.760
+there's any questions.
+
+00:19:10.760 --> 00:19:11.260
+If not, I will log off after a few minutes.
+
+00:19:15.900 --> 00:19:16.080
+[Speaker 2]: Well, I guess since we were mentioned that
+
+00:19:18.480 --> 00:19:18.980
+there was a small chat about local alarms.
+
+00:19:22.640 --> 00:19:23.000
+Because chat dpt is nice,
+
+00:19:25.600 --> 00:19:26.100
+no, but privacy concerns,
+
+00:19:27.380 --> 00:19:27.880
+and it's not free and stuff.
+
+00:19:31.000 --> 00:19:31.500
+Which, so The question is,
+
+00:19:36.960 --> 00:19:37.460
+what is the promise for local models?
+
+00:19:39.660 --> 00:19:40.160
+[Speaker 0]: Yeah, so local is definitely...
+
+00:19:41.380 --> 00:19:41.880
+[Speaker 2]: Or at least open source.
+
+00:19:45.680 --> 00:19:46.120
+[Speaker 0]: Yeah, so there is a local open source model,
+
+00:19:47.960 --> 00:19:48.460
+Misral, which you could run.
+
+00:19:51.340 --> 00:19:51.840
+The LLM package allows you to use,
+
+00:19:56.120 --> 00:19:56.260
+I think there's 3 kind of local things you
+
+00:19:58.100 --> 00:19:58.440
+could use. Like many of these things,
+
+00:20:00.220 --> 00:20:00.480
+there's like many kind of ways to do the same
+
+00:20:03.960 --> 00:20:04.460
+sort of thing. So LLM is supporting OLAMMA
+
+00:20:10.240 --> 00:20:10.520
+and LLAMMA-CPP. And let's see,
+
+00:20:12.240 --> 00:20:12.740
+1 other. Which 1 is it?
+
+00:20:18.420 --> 00:20:18.700
+And maybe that's it. Maybe the,
+
+00:20:21.820 --> 00:20:21.940
+oh, GPT for all. So each 1 of these kind of
+
+00:20:23.100 --> 00:20:23.600
+has slightly different functionality.
+
+00:20:26.820 --> 00:20:27.180
+For example, I think GPT for all doesn't
+
+00:20:31.780 --> 00:20:32.280
+support embeddings. And I hear that Olama's
+
+00:20:33.740 --> 00:20:34.240
+embeddings are kind of currently broken.
+
+00:20:35.920 --> 00:20:36.420
+But basically they should support everything.
+
+00:20:39.100 --> 00:20:39.600
+And the open source models are,
+
+00:20:43.180 --> 00:20:43.380
+so the local models are reasonably good.
+
+00:20:44.760 --> 00:20:44.900
+Like I don't think you'd use them and be
+
+00:20:46.200 --> 00:20:46.639
+like, what is this horrible nonsense?
+
+00:20:50.200 --> 00:20:50.380
+Like it's, it gives you relatively good
+
+00:20:51.820 --> 00:20:52.120
+results. Like it's not gonna be at the level
+
+00:20:56.060 --> 00:20:56.320
+of like GPT 3.5 or 4, but it's not far away
+
+00:20:57.720 --> 00:20:58.220
+from GPT 3.5, I think.
+
+00:21:02.380 --> 00:21:02.880
+[Speaker 2]: I'm just saying that Olam has like a presets
+
+00:21:05.940 --> 00:21:06.300
+for connecting the actual working servers for
+
+00:21:06.300 --> 00:21:06.800
+Olama?
+
+00:21:08.560 --> 00:21:08.760
+[Speaker 0]: So, I'll try. Yeah, so you could,
+
+00:21:09.860 --> 00:21:10.040
+what you could do is you could like for
+
+00:21:11.940 --> 00:21:12.100
+example you could download Olama which is
+
+00:21:15.780 --> 00:21:15.940
+just a way of setting up local models and
+
+00:21:17.320 --> 00:21:17.780
+running local models on your machine.
+
+00:21:18.580 --> 00:21:18.820
+So typically what it does,
+
+00:21:19.720 --> 00:21:20.020
+you like download a program,
+
+00:21:23.720 --> 00:21:23.800
+let's say Olama. Then Olama will have the
+
+00:21:24.940 --> 00:21:25.440
+ability to download models.
+
+00:21:27.240 --> 00:21:27.360
+And so you could choose from just a host of
+
+00:21:29.280 --> 00:21:29.440
+different models. Each 1 of these things has
+
+00:21:30.200 --> 00:21:30.440
+a bunch of different models.
+
+00:21:31.920 --> 00:21:32.080
+So it downloads all these things to your
+
+00:21:36.600 --> 00:21:37.020
+machine. But I would say that the key problem
+
+00:21:40.200 --> 00:21:40.580
+here is that it requires a fairly beefy
+
+00:21:40.580 --> 00:21:41.080
+machine.
+
+00:21:42.600 --> 00:21:43.100
+[Speaker 2]: So. Yeah, yeah, of course.
+
+00:21:45.060 --> 00:21:45.300
+Why I was asking, because you briefly
+
+00:21:46.440 --> 00:21:46.880
+mentioned that there are some Israeli
+
+00:21:52.300 --> 00:21:52.440
+servers. I understand that they run it like a
+
+00:21:53.680 --> 00:21:54.000
+government or stuff like that?
+
+00:21:55.440 --> 00:21:55.940
+No, no, sorry. People want everyone?
+
+00:21:59.340 --> 00:21:59.620
+[Speaker 0]: I don't, I mean, maybe you've said something
+
+00:22:00.620 --> 00:22:01.020
+that sounded like Israeli servers.
+
+00:22:01.620 --> 00:22:02.120
+[Speaker 2]: Okay, okay.
+
+00:22:04.920 --> 00:22:05.080
+[Speaker 0]: I think- There's no government LLMs as far as
+
+00:22:06.820 --> 00:22:07.280
+I know. Although, I'm sure the governments
+
+00:22:08.200 --> 00:22:08.700
+are working on their own LLMs,
+
+00:22:10.980 --> 00:22:11.480
+et cetera. But yeah, basically your choices
+
+00:22:15.060 --> 00:22:15.220
+are spend a, I mean, if you use open AI or
+
+00:22:16.080 --> 00:22:16.580
+something or anything else,
+
+00:22:17.960 --> 00:22:18.460
+you're really not spending any money.
+
+00:22:20.560 --> 00:22:20.840
+Like I've never been able to spend any money
+
+00:22:23.680 --> 00:22:24.020
+on OpenAI. Like unless you're doing something
+
+00:22:25.840 --> 00:22:26.280
+very intensive and really are using it to,
+
+00:22:28.000 --> 00:22:28.180
+you know, if you're using it for your
+
+00:22:29.620 --> 00:22:29.780
+personal use, it's just hard to spend any
+
+00:22:31.720 --> 00:22:31.960
+money. But on the other hand,
+
+00:22:32.780 --> 00:22:32.860
+it's not free. So you can,
+
+00:22:33.040 --> 00:22:33.540
+you know,
+
+00:22:36.300 --> 00:22:36.680
+[Speaker 2]: Actually, it's rather cheap.
+
+00:22:37.680 --> 00:22:38.180
+There's no question about that.
+
+00:22:40.580 --> 00:22:40.920
+The problem is that it has a bad track record
+
+00:22:41.580 --> 00:22:42.080
+on privacy.
+
+00:22:45.540 --> 00:22:46.040
+[Speaker 0]: Yes, that's, I think that is a key problem.
+
+00:22:48.120 --> 00:22:48.280
+This is probably the number 1 reason why you
+
+00:22:51.840 --> 00:22:52.340
+might want to use a local AI,
+
+00:22:54.720 --> 00:22:55.220
+a local LLM. Another 1 is like,
+
+00:22:57.400 --> 00:22:57.900
+you may not agree with the decisions.
+
+00:23:00.360 --> 00:23:00.820
+You know, there's a lot of trust and safety
+
+00:23:05.140 --> 00:23:05.440
+stuff that these companies have to do.
+
+00:23:09.020 --> 00:23:09.240
+Like they don't want like the LMs to kind of
+
+00:23:11.400 --> 00:23:11.640
+like give you, like tell you how you can make
+
+00:23:13.180 --> 00:23:13.580
+meth or how you can make a bomb,
+
+00:23:14.960 --> 00:23:15.460
+which they would do. They would totally do
+
+00:23:19.580 --> 00:23:20.080
+it. So, But each time you kind of restrict
+
+00:23:22.540 --> 00:23:22.680
+what is happening with what you can get out
+
+00:23:23.860 --> 00:23:24.360
+of the LM, it gets a little worse.
+
+00:23:24.960 --> 00:23:25.440
+So some people
+
+00:23:27.040 --> 00:23:27.540
+[Speaker 2]: want to have local. That's expected.
+
+00:23:31.080 --> 00:23:31.400
+I guess even open source language modules
+
+00:23:33.540 --> 00:23:34.040
+will soon have HR spaces because it's simply
+
+00:23:34.720 --> 00:23:35.220
+a legal issue.
+
+00:23:40.760 --> 00:23:41.140
+[Speaker 0]: I think that's true. I also think that there
+
+00:23:42.880 --> 00:23:43.040
+probably will be, although I don't know of
+
+00:23:45.060 --> 00:23:45.300
+any offhand, that will are completely
+
+00:23:46.960 --> 00:23:47.200
+uncensored. I know people are interested and
+
+00:23:48.240 --> 00:23:48.480
+are running uncensored models.
+
+00:23:49.440 --> 00:23:49.940
+I don't know how to do it.
+
+00:23:52.280 --> 00:23:52.780
+I think it's a little bit dubious,
+
+00:23:54.960 --> 00:23:55.040
+but some people do want to do it.
+
+00:23:56.280 --> 00:23:56.780
+There's another reason for using local
+
+00:24:02.280 --> 00:24:02.780
+servers. Do you have any recommendation for
+
+00:24:05.500 --> 00:24:05.720
+models to run locally and also comments on
+
+00:24:06.780 --> 00:24:07.280
+whether a GPU is required?
+
+00:24:14.040 --> 00:24:14.160
+Usually a GPU, well, you can run it without a
+
+00:24:16.960 --> 00:24:17.460
+GPU, but it does run much better.
+
+00:24:19.480 --> 00:24:19.980
+Like for example, I think when I used,
+
+00:24:22.560 --> 00:24:23.060
+Lama is sort of like a standard.
+
+00:24:27.160 --> 00:24:27.320
+This was the model for that Facebook came out
+
+00:24:31.380 --> 00:24:31.880
+with for local use. And It was,
+
+00:24:37.260 --> 00:24:37.760
+yeah, it's good. It's,
+
+00:24:40.400 --> 00:24:40.900
+but it's now it's I think,
+
+00:24:44.620 --> 00:24:44.920
+Mistral is kind of like has a better
+
+00:24:46.480 --> 00:24:46.800
+performance, But there's also different model
+
+00:24:51.000 --> 00:24:51.500
+sizes. There's 7B, like the Lama 7B is OK.
+
+00:24:52.940 --> 00:24:53.440
+The Mistral 7B, 7 billion,
+
+00:24:54.800 --> 00:24:55.300
+are like, basically it'll take like,
+
+00:24:58.380 --> 00:24:58.880
+you can run it with like 16 gigs of RAM,
+
+00:25:02.720 --> 00:25:03.040
+is pretty good. It's probably about as equal
+
+00:25:06.900 --> 00:25:07.000
+to the LLAMA13B. Those are the number of
+
+00:25:08.360 --> 00:25:08.860
+parameters, if I remember correctly.
+
+00:25:10.680 --> 00:25:11.180
+And then there's a 7B,
+
+00:25:12.340 --> 00:25:12.840
+which I've never been able to run.
+
+00:25:16.120 --> 00:25:16.620
+And even if the 7B, if you run it without a
+
+00:25:19.640 --> 00:25:20.140
+GPU, it takes quite a while to answer.
+
+00:25:22.080 --> 00:25:22.580
+I think I've had experiences where it took
+
+00:25:23.940 --> 00:25:24.440
+literally like several,
+
+00:25:26.480 --> 00:25:26.780
+like 5 minutes before it even started
+
+00:25:28.880 --> 00:25:29.100
+responding, but you do eventually get
+
+00:25:32.220 --> 00:25:32.580
+something. And it could be that like things
+
+00:25:33.840 --> 00:25:33.960
+have gotten better since the last time I
+
+00:25:35.440 --> 00:25:35.940
+tried this, because things are moving fast.
+
+00:25:38.360 --> 00:25:38.860
+But it is super recommended to have a GPU.
+
+00:25:42.440 --> 00:25:42.620
+This is the problem. It's kind of like,
+
+00:25:43.840 --> 00:25:44.180
+yes, free software is great.
+
+00:25:46.880 --> 00:25:47.120
+But if free software is requiring that you
+
+00:25:50.460 --> 00:25:50.760
+have these kind of beefy servers and have all
+
+00:25:52.000 --> 00:25:52.500
+this hardware, that's not great.
+
+00:25:53.600 --> 00:25:54.100
+I think there's a case to be made.
+
+00:25:55.680 --> 00:25:56.180
+[Speaker 1]: a hardware
+
+00:25:59.040 --> 00:25:59.540
+[Speaker 0]: with slots instead of a laptop.
+
+00:26:01.560 --> 00:26:02.060
+Yeah, yeah, that's right.
+
+00:26:03.660 --> 00:26:03.960
+[Speaker 2]: Ideally, you can have Ideally,
+
+00:26:07.400 --> 00:26:07.660
+it would be nice if FSL for all things could
+
+00:26:12.040 --> 00:26:12.540
+run something for open source model.
+
+00:26:16.320 --> 00:26:16.640
+And not free, but the key point is that it's
+
+00:26:16.640 --> 00:26:17.140
+Libre?
+
+00:26:22.580 --> 00:26:23.080
+[Speaker 0]: Yes, so actually I think Google does do that.
+
+00:26:24.720 --> 00:26:24.800
+I'll have to look it up,
+
+00:26:27.560 --> 00:26:27.820
+but I haven't explored this yet.
+
+00:26:31.220 --> 00:26:31.720
+But Google's server, which LLM does support,
+
+00:26:33.800 --> 00:26:34.300
+supports arbitrary models.
+
+00:26:36.420 --> 00:26:36.600
+So you can run LLMA or things like that.
+
+00:26:38.940 --> 00:26:39.200
+The problem is that even if you're running
+
+00:26:40.320 --> 00:26:40.820
+Mistral, which has no restrictions.
+
+00:26:42.940 --> 00:26:43.140
+So this is the kind of thing that like the
+
+00:26:44.900 --> 00:26:45.060
+Free Software Foundation cares a lot about.
+
+00:26:47.240 --> 00:26:47.740
+Like you want it to be like no restrictions,
+
+00:26:49.740 --> 00:26:49.840
+legal restrictions on you as you run the
+
+00:26:52.080 --> 00:26:52.580
+model. So even if it's running Mistral,
+
+00:26:54.800 --> 00:26:55.300
+just by using the server,
+
+00:26:58.460 --> 00:26:58.660
+the company server, it will impose some
+
+00:26:59.440 --> 00:26:59.900
+restrictions on you probably,
+
+00:27:02.320 --> 00:27:02.480
+right? There's gonna be some license that you
+
+00:27:04.760 --> 00:27:05.260
+have to, or something you have to abide by.
+
+00:27:08.480 --> 00:27:08.600
+So I think, yes, it depends on how much you
+
+00:27:09.280 --> 00:27:09.780
+care about it, I guess.
+
+00:27:19.500 --> 00:27:19.640
+I should find out more about that and make
+
+00:27:21.580 --> 00:27:22.080
+sure that it's a good point that I should,
+
+00:27:23.980 --> 00:27:24.180
+you know, people should be able to run free
+
+00:27:25.920 --> 00:27:26.280
+models over the server.
+
+00:27:28.320 --> 00:27:28.440
+So I should make sure we support that in the
+
+00:27:40.360 --> 00:27:40.860
+LLM package. So, is there any other questions
+
+00:27:48.240 --> 00:27:48.740
+Or is otherwise we can end the session.
+
+00:28:00.800 --> 00:28:01.040
+Yeah, all right. Thank you.
+
+00:28:02.440 --> 00:28:02.940
+Thank you. Thank you everyone who listened.
+
+00:28:04.540 --> 00:28:05.040
+I'm super happy like I,
+
+00:28:06.560 --> 00:28:07.060
+the interest is great.
+
+00:28:08.900 --> 00:28:09.220
+I think there's great stuff to be done here
+
+00:28:10.960 --> 00:28:11.140
+and I'm kind of super excited what we're
+
+00:28:11.940 --> 00:28:12.160
+going to do in the next year,
+
+00:28:13.140 --> 00:28:13.440
+so hopefully, like next year,
+
+00:28:14.600 --> 00:28:14.760
+and the conference we have something even
+
+00:28:16.440 --> 00:28:16.560
+more exciting to say about LLM and how they
+
+00:28:17.320 --> 00:28:17.820
+can be used with Emacs.
+
+00:28:19.620 --> 00:28:20.120
+So thank
+
+00:28:30.060 --> 00:28:30.560
+you
diff --git a/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt
new file mode 100644
index 00000000..858d0fdb
--- /dev/null
+++ b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:25.079
+Intro to the Talk
+
+00:00:25.080 --> 00:01:56.359
+What are LLMs?
+
+00:01:56.360 --> 00:03:32.239
+Power of LLMs (Magit Demo)
+
+00:03:32.240 --> 00:05:20.119
+Drawbacks of LLMs (regex demo)
+
+00:05:20.120 --> 00:07:32.799
+Embeddings
+
+00:07:32.800 --> 00:08:48.479
+Image Generation
+
+00:08:48.480 --> 00:11:05.679
+Fine-tuning
+
+00:11:08.160 --> 00:12:02.519
+Open Source
+
+00:12:02.840 --> 00:14:04.159
+The Future
+
+00:14:08.200 --> 00:18:14.439
+LLMs in Emacs - existing packages
+
+00:18:15.960 --> 00:19:04.079
+Abstracting LLM challenges
+
+00:19:04.080 --> 00:20:01.599
+Emacs is the ideal interface for LLMs
+
+00:20:01.960 --> 00:20:26.160
+Outro
diff --git a/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt
new file mode 100644
index 00000000..3ac4b34c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt
@@ -0,0 +1,1377 @@
+WEBVTT captioned by bala, checked by sachac
+
+NOTE Intro to the Talk
+
+00:00:00.000 --> 00:00:04.159
+Hello, I'm Andrew Hyatt and I'm going to talk to you
+
+00:00:04.160 --> 00:00:06.439
+about large language models and how
+
+00:00:06.440 --> 00:00:11.079
+they relate to Emacs.
+
+00:00:11.080 --> 00:00:14.919
+And I'm going to talk to you about the technology
+
+00:00:14.920 --> 00:00:18.279
+and how we're going to use it in Emacs.
+
+00:00:18.280 --> 00:00:21.159
+There'll be demos and there'll be talks about,
+
+00:00:21.160 --> 00:00:22.879
+I'll finish up by kind of talking about where
+
+00:00:22.880 --> 00:00:25.079
+I think this should go in the future.
+
+NOTE What are LLMs?
+
+00:00:25.080 --> 00:00:28.239
+So to start off with, let's just talk like,
+
+00:00:28.240 --> 00:00:29.759
+I just want to make sure everyone's on the same page.
+
+00:00:29.760 --> 00:00:30.919
+What are large language models?
+
+00:00:30.920 --> 00:00:34.639
+Not everyone may be caught up on this.
+
+00:00:34.640 --> 00:00:38.999
+Large language models are a way... Basically,
+
+00:00:39.000 --> 00:00:42.999
+the current versions of large language models
+
+00:00:43.000 --> 00:00:44.479
+are all based on the similar architecture
+
+00:00:44.480 --> 00:00:45.279
+called the transformer.
+
+00:00:45.280 --> 00:00:48.719
+It's just an efficient way to train and produce output.
+
+00:00:48.720 --> 00:00:51.919
+So these things are basically models
+
+00:00:51.920 --> 00:00:58.079
+that predict the next word or something like that.
+
+00:00:58.080 --> 00:01:02.119
+And they're trained on an enormous corpus of information
+
+00:01:02.120 --> 00:01:04.319
+and they get extremely good
+
+00:01:04.320 --> 00:01:06.079
+at predicting the next word.
+
+00:01:06.080 --> 00:01:09.679
+And from that basic ability, you can train
+
+00:01:09.680 --> 00:01:12.439
+through further tuning from human input,
+
+00:01:12.440 --> 00:01:13.959
+human ratings and things like that.
+
+00:01:13.960 --> 00:01:17.479
+You can train different models based on that
+
+00:01:17.480 --> 00:01:18.759
+that will do question answering.
+
+00:01:18.760 --> 00:01:22.519
+And this is how basically ChatGPT works.
+
+00:01:22.520 --> 00:01:25.599
+There's a base LLM, like GPT.
+
+00:01:25.600 --> 00:01:27.799
+And then you have a chat version of that,
+
+00:01:27.800 --> 00:01:29.959
+which is just trained to just... You give
+
+00:01:29.960 --> 00:01:32.199
+it a prompt, like what do you want it to do?
+
+00:01:32.200 --> 00:01:37.279
+And it gives you an output that does what you told it to do,
+
+00:01:37.280 --> 00:01:39.919
+or at least attempts to do it.
+
+00:01:39.920 --> 00:01:42.079
+Those are the power of large language models is
+
+00:01:42.080 --> 00:01:45.639
+they're extremely, extremely impressive.
+
+00:01:45.640 --> 00:01:47.199
+Certainly this is, in AI,
+
+00:01:47.200 --> 00:01:49.079
+this has been the biggest thing to happen
+
+00:01:49.080 --> 00:01:51.559
+probably in my lifetime,
+
+00:01:51.560 --> 00:01:56.359
+or at least my lifetime as my working lifetime.
+
+NOTE Power of LLMs (Magit Demo)
+
+00:01:56.360 --> 00:02:02.559
+So let me give you a demonstration of
+
+00:02:02.560 --> 00:02:06.679
+what kinds of stuff it could do in Emacs.
+
+00:02:06.680 --> 00:02:09.039
+So here I have a Emacs file.
+
+00:02:09.040 --> 00:02:12.479
+So this is my Emacs init file.
+
+00:02:12.480 --> 00:02:13.599
+I have a change.
+
+00:02:13.600 --> 00:02:16.879
+Let's commit that change.
+
+00:02:16.880 --> 00:02:19.439
+And, you know, I don't like writing commit messages,
+
+00:02:19.440 --> 00:02:23.039
+so I can generate it.
+
+00:02:23.040 --> 00:02:27.479
+And it did an actually just looking.
+
+00:02:27.480 --> 00:02:29.759
+So all it does is it's looking, it's just reading the diff.
+
+00:02:29.760 --> 00:02:32.479
+I'm just feeding it the diff with some instructions.
+
+00:02:32.480 --> 00:02:37.759
+And it is this a incredible commit message?
+
+00:02:37.760 --> 00:02:39.399
+It's not bad, actually.
+
+00:02:39.400 --> 00:02:42.319
+You can see that it actually has really extracted
+
+00:02:42.320 --> 00:02:46.439
+the meaning of what I'm doing and has written
+
+00:02:46.440 --> 00:02:48.879
+a reasonably good commit message.
+
+00:02:48.880 --> 00:02:53.159
+Now I have to edit it because this is not quite correct.
+
+00:02:53.160 --> 00:02:55.159
+But it's kind of impressive how good it is.
+
+00:02:55.160 --> 00:03:00.039
+And my editing, it's kind of easier for me to edit this
+
+00:03:00.040 --> 00:03:01.879
+than just to write a new one.
+
+00:03:01.880 --> 00:03:04.479
+And quite often it's good enough to just submit as is.
+
+00:03:04.480 --> 00:03:08.119
+So this is kind of, you know, you could say
+
+00:03:08.120 --> 00:03:09.359
+this is just commit messages.
+
+00:03:09.360 --> 00:03:10.719
+You could respond to emails.
+
+00:03:10.720 --> 00:03:15.319
+You could, you know, using your own custom instructions
+
+00:03:15.320 --> 00:03:17.839
+about what you want your email to say.
+
+00:03:17.840 --> 00:03:19.039
+It'll write the email for you.
+
+00:03:19.040 --> 00:03:19.839
+It could do like this
+
+00:03:19.840 --> 00:03:22.519
+Emacs is a way to interact with buffers.
+
+00:03:22.520 --> 00:03:24.199
+This could basically just output text.
+
+00:03:24.200 --> 00:03:27.759
+So it's super useful for
+
+00:03:27.760 --> 00:03:30.319
+understanding something and outputting text based on that,
+
+00:03:30.320 --> 00:03:32.239
+which is just useful for Emacs.
+
+NOTE Drawbacks of LLMs (regex demo)
+
+00:03:32.240 --> 00:03:39.919
+So the drawback is, yeah, it's good,
+
+00:03:39.920 --> 00:03:43.359
+but it's not that reliable.
+
+00:03:43.360 --> 00:03:45.679
+And you'd think it's very easy to get caught up in like,
+
+00:03:45.680 --> 00:03:47.639
+oh my gosh, like this is so powerful.
+
+00:03:47.640 --> 00:03:50.599
+I bet it could work this, whatever idea could work.
+
+00:03:50.600 --> 00:03:52.919
+And these ideas, like they almost can.
+
+00:03:52.920 --> 00:03:55.639
+For example, I was thinking, you know what I could do?
+
+00:03:55.640 --> 00:03:57.239
+I don't like writing regexes.
+
+00:03:57.240 --> 00:04:01.199
+Why can't I have a regex replace that's powered by LLMs?
+
+00:04:01.200 --> 00:04:03.439
+And that way I could give just an instruction
+
+00:04:03.440 --> 00:04:07.399
+to regex replace.
+
+00:04:07.400 --> 00:04:12.079
+And so for example, I could do Emacs LLM regex replace.
+
+00:04:12.080 --> 00:04:12.879
+This is not checked in anywhere.
+
+00:04:12.880 --> 00:04:17.199
+These are just my own kind of private functions.
+
+00:04:17.200 --> 00:04:19.239
+My description lowercase all the org headings.
+
+00:04:19.240 --> 00:04:20.439
+Let's see if it works.
+
+00:04:20.440 --> 00:04:21.039
+It might work.
+
+00:04:21.040 --> 00:04:22.959
+No, it doesn't work.
+
+00:04:22.960 --> 00:04:26.159
+So if I, I'm not going to bother to show you
+
+00:04:26.160 --> 00:04:28.159
+what it actually came up with, but it's something,
+
+00:04:28.160 --> 00:04:29.879
+if you looked at it, it'd be like, wow,
+
+00:04:29.880 --> 00:04:31.639
+this is very close to being...
+
+00:04:31.640 --> 00:04:34.239
+It looks like it should work, but it doesn't.
+
+00:04:34.240 --> 00:04:35.839
+Okay.
+
+00:04:35.840 --> 00:04:38.719
+It's not quite good enough to get it right.
+
+00:04:38.720 --> 00:04:41.599
+And it's possible that perhaps by giving it
+
+00:04:41.600 --> 00:04:43.639
+a few examples of, or explaining more
+
+00:04:43.640 --> 00:04:46.439
+what makes Emacs regexes different.
+
+00:04:46.440 --> 00:04:47.959
+It could do a better job
+
+00:04:47.960 --> 00:04:49.279
+and maybe could solve these problems,
+
+00:04:49.280 --> 00:04:50.679
+but it's always a little bit random.
+
+00:04:50.680 --> 00:04:52.359
+You're never quite sure what you're going to get.
+
+00:04:52.360 --> 00:04:54.839
+So this is the drawback.
+
+00:04:54.840 --> 00:04:58.479
+Like there's a lot of things that look like you could do it,
+
+00:04:58.480 --> 00:05:00.999
+but when it actually comes down to trying it,
+
+00:05:01.000 --> 00:05:03.399
+it's surprisingly hard.
+
+00:05:03.400 --> 00:05:06.319
+And, you know, and whatever you're doing,
+
+00:05:06.320 --> 00:05:08.999
+it's surprisingly hard to get something
+
+00:05:09.000 --> 00:05:13.879
+that is repeatably, that's, that is always good.
+
+00:05:13.880 --> 00:05:20.119
+So yeah, that's currently the problem.
+
+NOTE Embeddings
+
+00:05:20.120 --> 00:05:23.399
+So I want to talk about embeddings.
+
+00:05:23.400 --> 00:05:26.919
+They're another thing that LLMs offer
+
+00:05:26.920 --> 00:05:28.599
+and that are extremely useful.
+
+00:05:28.600 --> 00:05:33.119
+They are, what they do is they encode from
+
+00:05:33.120 --> 00:05:38.959
+a input text that could be a word, a sentence,
+
+00:05:38.960 --> 00:05:42.159
+a small document.
+
+00:05:42.160 --> 00:05:45.399
+It encodes a vector about what the meaning,
+
+00:05:45.400 --> 00:05:46.919
+the semantic meaning of that is.
+
+00:05:46.920 --> 00:05:51.079
+That means you could, something that is,
+
+00:05:51.080 --> 00:05:52.279
+uses completely different words,
+
+00:05:52.280 --> 00:05:54.159
+but is basically talking about the same thing,
+
+00:05:54.160 --> 00:05:57.839
+perhaps in a different language, should be pretty close
+
+00:05:57.840 --> 00:06:01.999
+as a vector to the other vector.
+
+00:06:02.000 --> 00:06:05.399
+You know, as long as they're similarly semantic things,
+
+00:06:05.400 --> 00:06:12.239
+like the words
+
+00:06:12.240 --> 00:06:18.959
+highway and Camino are two different words.
+
+00:06:18.960 --> 00:06:19.639
+They mean the same thing.
+
+00:06:19.640 --> 00:06:21.319
+They should have very similar embeddings.
+
+00:06:21.320 --> 00:06:25.119
+So it is a way to kind of encode this
+
+00:06:25.120 --> 00:06:26.199
+and then you could use this for search.
+
+00:06:26.200 --> 00:06:28.919
+For example, I haven't tried to do this yet,
+
+00:06:28.920 --> 00:06:31.479
+but you could probably just make an embedding
+
+00:06:31.480 --> 00:06:33.919
+for every paragraph in the Emacs manual
+
+00:06:33.920 --> 00:06:36.239
+and the Elisp manual.
+
+00:06:36.240 --> 00:06:39.439
+And then, and then there's a very standard technique.
+
+00:06:39.440 --> 00:06:43.439
+You just... You find that you have a query,
+
+00:06:43.440 --> 00:06:45.799
+oh, how do I do whatever, whatever in Emacs again?
+
+00:06:45.800 --> 00:06:49.479
+And you could, you just find that 20 things
+
+00:06:49.480 --> 00:06:50.319
+that are closest to whatever you're
+
+00:06:50.320 --> 00:06:51.839
+trying to... the embedding of your query.
+
+00:06:51.840 --> 00:06:55.279
+You send those things to the LLM, as you know,
+
+00:06:55.280 --> 00:06:57.799
+with the original query,
+
+00:06:57.800 --> 00:06:59.919
+and you're basically telling the--asking the LLM,
+
+00:06:59.920 --> 00:07:01.279
+look, the user is trying to do this.
+
+00:07:01.280 --> 00:07:03.039
+Here's what I found in the Emacs manual.
+
+00:07:03.040 --> 00:07:04.639
+That's on the Elisp manual.
+
+00:07:04.640 --> 00:07:07.439
+That's close to what they're trying to do.
+
+00:07:07.440 --> 00:07:12.159
+So can you kind of just tell the user what to do?
+
+00:07:12.160 --> 00:07:14.479
+And from this, and you could say,
+
+00:07:14.480 --> 00:07:17.639
+just use things from this, you know, that I give you.
+
+00:07:17.640 --> 00:07:20.679
+Don't just make up your own idea.
+
+00:07:20.680 --> 00:07:21.839
+You know, don't use your own ideas,
+
+00:07:21.840 --> 00:07:23.799
+because sometimes it likes to do that
+
+00:07:23.800 --> 00:07:24.359
+and those things are wrong.
+
+00:07:24.360 --> 00:07:26.719
+So you could try to, you know, do this and you get,
+
+00:07:26.720 --> 00:07:28.719
+you could get quite good results using this.
+
+00:07:28.720 --> 00:07:29.999
+So no one has done this yet,
+
+00:07:30.000 --> 00:07:32.799
+but that should not be hard to do.
+
+NOTE Image Generation
+
+00:07:32.800 --> 00:07:34.879
+Image generation is something that's, you know,
+
+00:07:34.880 --> 00:07:38.479
+it's not quite an LLM in the sense of...
+
+00:07:38.480 --> 00:07:43.079
+These are... It's a different technology,
+
+00:07:43.080 --> 00:07:48.439
+but these things are kind of packaged together
+
+00:07:48.440 --> 00:07:49.039
+in a sense.
+
+00:07:49.040 --> 00:07:51.639
+And you'll see that when I talk about Emacs packages,
+
+00:07:51.640 --> 00:07:54.279
+a lot of them bundle image generation
+
+00:07:54.280 --> 00:07:55.439
+and large language models.
+
+00:07:55.440 --> 00:07:59.039
+You know, the APIs are often bundled together by providers.
+
+00:07:59.040 --> 00:08:02.679
+And the general idea is it's kind of similar
+
+00:08:02.680 --> 00:08:04.399
+because it's very similar to large, you know,
+
+00:08:04.400 --> 00:08:06.559
+doing a chat thing where you, you know,
+
+00:08:06.560 --> 00:08:09.760
+the chat is like, you give it a text request,
+
+00:08:09.761 --> 00:08:12.759
+like write me a sonnet about, you know,
+
+00:08:12.760 --> 00:08:14.879
+the battle between Emacs and vi.
+
+00:08:14.880 --> 00:08:15.839
+And it could, it could do it.
+
+00:08:15.840 --> 00:08:17.159
+It could do a very good job of that.
+
+00:08:17.160 --> 00:08:22.519
+But you could also say, you know,
+
+00:08:22.520 --> 00:08:27.599
+draw me a picture of Emacs and vi as boxers,
+
+00:08:27.600 --> 00:08:30.359
+as a character-character boxing in a ring,
+
+00:08:30.360 --> 00:08:32.239
+like a, you know, political cartoon style.
+
+00:08:32.240 --> 00:08:34.999
+And it can do that as well.
+
+00:08:35.000 --> 00:08:37.679
+And so you could basically think of this
+
+00:08:37.680 --> 00:08:39.439
+as just sort of... it's kind of the
+
+00:08:39.440 --> 00:08:42.399
+same thing with what you're doing
+
+00:08:42.400 --> 00:08:43.359
+with large language models,
+
+00:08:43.360 --> 00:08:44.799
+but instead of outputting a text,
+
+00:08:44.800 --> 00:08:48.479
+you're outputting a picture.
+
+NOTE Fine-tuning
+
+00:08:48.480 --> 00:08:51.079
+There's also, I want to mention the concept of fine-tuning.
+
+00:08:51.080 --> 00:08:55.199
+Fine-tuning is a way to take your--
+
+00:08:55.200 --> 00:08:59.759
+take a corpus of inputs and outputs and just from
+
+00:08:59.760 --> 00:09:01.599
+a large language model, you're like, okay,
+
+00:09:01.600 --> 00:09:03.599
+given this base large language model,
+
+00:09:03.600 --> 00:09:06.679
+I want to make sure that when I give you input,
+
+00:09:06.680 --> 00:09:08.479
+you give me something like output.
+
+00:09:08.480 --> 00:09:10.119
+And this is what I'm just going to
+
+00:09:10.120 --> 00:09:11.799
+train you further on these,
+
+00:09:11.800 --> 00:09:14.879
+these mappings between input and output.
+
+00:09:14.880 --> 00:09:16.399
+And for example, you could do this. Like,
+
+00:09:16.400 --> 00:09:18.039
+let's say you wanted to fix that regex demo
+
+00:09:18.040 --> 00:09:20.999
+I had to make it good.
+
+00:09:21.000 --> 00:09:23.479
+I don't think it, I think it'd be
+
+00:09:23.480 --> 00:09:25.039
+relatively effective to train,
+
+00:09:25.040 --> 00:09:27.039
+to have regex descriptions
+
+00:09:27.040 --> 00:09:30.119
+and regex examples, Emacs regex examples
+
+00:09:30.120 --> 00:09:31.239
+as inputs and outputs.
+
+00:09:31.240 --> 00:09:33.999
+You could get, you know, maybe a hundred,
+
+00:09:34.000 --> 00:09:35.359
+a few hundreds of these things.
+
+00:09:35.360 --> 00:09:38.639
+You could train it.
+
+00:09:38.640 --> 00:09:40.759
+I think that is a reasonable way to,
+
+00:09:40.760 --> 00:09:43.879
+let's just say, I don't know how well it would work,
+
+00:09:43.880 --> 00:09:46.839
+but these things definitely work some of the time
+
+00:09:46.840 --> 00:09:47.999
+and produce pretty good results.
+
+00:09:48.000 --> 00:09:53.039
+And you could do this on your own machine.
+
+00:09:53.040 --> 00:09:58.999
+Corporations like OpenAI offer APIs with, you know,
+
+00:09:59.000 --> 00:10:01.519
+to build your fine tunes on top of OpenAI.
+
+00:10:01.520 --> 00:10:04.159
+And I think, I'm not a hundred percent sure,
+
+00:10:04.160 --> 00:10:05.719
+but I think then you can share your model
+
+00:10:05.720 --> 00:10:06.519
+with other people.
+
+00:10:06.520 --> 00:10:08.519
+But if not, then you just, you know,
+
+00:10:08.520 --> 00:10:10.839
+you could use your model for your own specialized purposes.
+
+00:10:10.840 --> 00:10:14.039
+But in the world of models that you could run,
+
+00:10:14.040 --> 00:10:16.874
+for example, based on Llama, which is like...
+
+00:10:16.875 --> 00:10:22.240
+Llama is this model you can run on your own machine from Meta.
+
+00:10:23.580 --> 00:10:26.880
+There's many fine-tuned models that you could download
+
+00:10:26.881 --> 00:10:28.960
+and you could run on your own.
+
+00:10:28.961 --> 00:10:30.839
+They can do very different things too.
+
+00:10:30.840 --> 00:10:33.399
+Some output Python programs, for example,
+
+00:10:33.400 --> 00:10:34.279
+that you could just run.
+
+00:10:34.280 --> 00:10:37.959
+So you just say...
+
+00:10:37.960 --> 00:10:40.639
+Tell me how old... Let's just say
+
+00:10:40.640 --> 00:10:41.999
+you have a random task, like
+
+00:10:42.000 --> 00:10:48.119
+tell me how old these five cities are in minutes,
+
+00:10:48.120 --> 00:10:49.799
+based on historical evidence.
+
+00:10:49.800 --> 00:10:53.639
+It's kind of a weird query, but it probably can figure,
+
+00:10:53.640 --> 00:10:55.119
+it could probably run that for you.
+
+00:10:55.120 --> 00:10:57.239
+It'll encode its knowledge into whatever
+
+00:10:57.240 --> 00:10:59.599
+the Python program, then use the Python program
+
+00:10:59.600 --> 00:11:01.039
+to do the correct calculations.
+
+00:11:01.040 --> 00:11:05.679
+So pretty, pretty useful stuff.
+
+NOTE Open Source
+
+00:11:08.160 --> 00:11:10.399
+So I also want to mention open source
+
+00:11:10.400 --> 00:11:12.679
+and basically free software here.
+
+00:11:12.680 --> 00:11:17.599
+These LLMs are mostly not free software.
+
+00:11:17.600 --> 00:11:19.159
+They're sometimes open source,
+
+00:11:19.160 --> 00:11:21.959
+but they're generally not free
+
+00:11:21.960 --> 00:11:23.799
+without restrictions to use.
+
+00:11:23.800 --> 00:11:27.279
+Most of these things, even Llama,
+
+00:11:27.280 --> 00:11:28.679
+which you can use on your own machine,
+
+00:11:28.680 --> 00:11:31.439
+have restrictions that you cannot use it
+
+00:11:31.440 --> 00:11:32.519
+to train your own model.
+
+00:11:32.520 --> 00:11:35.119
+This is something that, you know,
+
+00:11:35.120 --> 00:11:37.519
+it costs millions and millions of dollars
+
+00:11:37.520 --> 00:11:40.759
+to train and produce these models.
+
+00:11:40.760 --> 00:11:42.319
+And that's just computation costs.
+
+00:11:42.320 --> 00:11:45.519
+They do not want you
+
+00:11:45.520 --> 00:11:47.839
+stealing all that work by training your own models
+
+00:11:47.840 --> 00:11:48.799
+based on their output.
+
+00:11:48.800 --> 00:11:55.359
+But there are research LLMs that do, I believe,
+
+00:11:55.360 --> 00:11:57.999
+conform to free software principles.
+
+00:11:58.000 --> 00:11:59.519
+They're just not as good yet.
+
+00:11:59.520 --> 00:12:02.519
+And I think that might change in the future.
+
+NOTE The Future
+
+00:12:02.840 --> 00:12:04.119
+So speaking of the future,
+
+00:12:04.120 --> 00:12:07.519
+one of the things I'd like to point out
+
+00:12:07.520 --> 00:12:09.639
+is that like the demos I showed you are based on,
+
+00:12:09.640 --> 00:12:13.519
+I'm using OpenAI 3.5 model.
+
+00:12:13.520 --> 00:12:16.439
+That's more than, well, no,
+
+00:12:16.440 --> 00:12:18.199
+it's like a year old basically at this point.
+
+00:12:18.200 --> 00:12:21.079
+And things are moving fast.
+
+00:12:21.080 --> 00:12:22.039
+They came out with 4.0.
+
+00:12:22.040 --> 00:12:23.319
+4.0 is significantly better.
+
+00:12:23.320 --> 00:12:24.319
+I don't have access to it.
+
+00:12:24.320 --> 00:12:30.839
+Even though I'm using the API and I'm paying money for it,
+
+00:12:30.840 --> 00:12:33.639
+you only can get access to 4.0
+
+00:12:33.640 --> 00:12:34.439
+if you can spend a dollar.
+
+00:12:34.440 --> 00:12:36.319
+And I've never been able to spend,
+
+00:12:36.320 --> 00:12:38.199
+use so much API use that I've spent a dollar.
+
+00:12:38.200 --> 00:12:44.479
+So I have, I don't have 4.0, but I've tried it
+
+00:12:44.480 --> 00:12:46.639
+because I do pay for this
+
+00:12:46.640 --> 00:12:48.340
+so I could get access to 4.0
+
+00:12:48.341 --> 00:12:49.599
+and it is substantially better.
+
+00:12:49.600 --> 00:12:50.519
+By all reports, it's,
+
+00:12:50.520 --> 00:12:53.839
+the difference is extremely significant.
+
+00:12:53.840 --> 00:12:55.159
+I would not be surprised
+
+00:12:55.160 --> 00:12:59.759
+if some of the limitations and drawbacks I described
+
+00:12:59.760 --> 00:13:02.039
+mostly went away with 4.0.
+
+00:13:02.040 --> 00:13:06.679
+We're probably at a stage
+
+00:13:06.680 --> 00:13:09.239
+where regexes will work maybe 5% of the time
+
+00:13:09.240 --> 00:13:10.119
+if you try them.
+
+00:13:10.120 --> 00:13:13.639
+But with 4.0, it could work like 80% of the time.
+
+00:13:13.640 --> 00:13:14.559
+Now, is that good enough?
+
+00:13:14.560 --> 00:13:17.279
+Probably not, but it's a,
+
+00:13:17.280 --> 00:13:20.319
+I wouldn't be surprised if you got results like that.
+
+00:13:20.320 --> 00:13:22.919
+And in a year's time, in two years time,
+
+00:13:22.920 --> 00:13:26.679
+no one knows how much this is going to play out
+
+00:13:26.680 --> 00:13:27.519
+before progress stalls,
+
+00:13:27.520 --> 00:13:32.319
+but there are a lot of interesting research.
+
+00:13:32.320 --> 00:13:34.279
+I don't think, research wise,
+
+00:13:34.280 --> 00:13:35.759
+I don't think things have slowed down.
+
+00:13:35.760 --> 00:13:38.719
+You're still seeing a lot of advances.
+
+00:13:38.720 --> 00:13:40.999
+You're still seeing a lot of models coming out
+
+00:13:41.000 --> 00:13:41.839
+and that will come out.
+
+00:13:41.840 --> 00:13:46.279
+That will be each one, one upping the other one
+
+00:13:46.280 --> 00:13:49.959
+in terms of quality.
+
+00:13:49.960 --> 00:13:52.759
+It'll be really interesting to see how this all plays out.
+
+00:13:52.760 --> 00:13:55.919
+I think that message here is that
+
+00:13:55.920 --> 00:13:57.999
+we're at the beginning here.
+
+00:13:58.000 --> 00:14:01.239
+This is why I think this talk is important.
+
+00:14:01.240 --> 00:14:02.279
+I think this is why we should be
+
+00:14:02.280 --> 00:14:04.159
+paying attention to this stuff.
+
+NOTE LLMs in Emacs - existing packages
+
+00:14:08.200 --> 00:14:11.039
+Let's talk about the existing packages.
+
+00:14:11.040 --> 00:14:13.199
+Because there's a lot out there, people have,
+
+00:14:13.200 --> 00:14:17.039
+I think people have been integrating with
+
+00:14:17.040 --> 00:14:21.239
+these LLMs that often have a relatively easy to use API.
+
+00:14:21.240 --> 00:14:24.039
+So it's kind of natural that people
+
+00:14:24.040 --> 00:14:25.679
+have already put out a lot of packages.
+
+00:14:25.680 --> 00:14:28.319
+Coming off this problem from a lot of different angles,
+
+00:14:28.320 --> 00:14:30.639
+I don't have time to go through
+
+00:14:30.640 --> 00:14:31.959
+all of these packages.
+
+00:14:31.960 --> 00:14:33.559
+These are great packages though.
+
+00:14:33.560 --> 00:14:35.279
+If you're not familiar with them,
+
+00:14:35.280 --> 00:14:37.679
+please check them out.
+
+00:14:37.680 --> 00:14:40.999
+And they all are doing slightly different things.
+
+00:14:41.000 --> 00:14:43.959
+Some of these are relatively straightforward.
+
+00:14:43.960 --> 00:14:47.919
+Interactions, just a way to
+
+00:14:47.920 --> 00:14:52.679
+almost in a comment sort of way to kind of
+
+00:14:52.680 --> 00:14:54.199
+have just an interaction,
+
+00:14:54.200 --> 00:14:55.479
+long running interaction with an LLM
+
+00:14:55.480 --> 00:14:59.039
+where you kind of build off previous responses,
+
+00:14:59.040 --> 00:15:01.799
+kind of like the OpenAI's UI.
+
+00:15:01.800 --> 00:15:08.559
+Two very more Emacsy things where you can sort of
+
+00:15:08.560 --> 00:15:13.679
+embed these LLM responses within a org-mode block
+
+00:15:13.680 --> 00:15:15.239
+using the org-mode's context.
+
+00:15:15.240 --> 00:15:20.959
+Or GitHub Copilot integration where you can use it
+
+00:15:20.960 --> 00:15:23.319
+for auto completion in a very powerful,
+
+00:15:23.320 --> 00:15:27.319
+you know, this stuff is very useful if it could figure out
+
+00:15:27.320 --> 00:15:29.199
+what you're trying to do based on the context.
+
+00:15:29.200 --> 00:15:31.839
+It's quite effective.
+
+00:15:31.840 --> 00:15:36.359
+But I want to kind of call out one thing
+
+00:15:36.360 --> 00:15:38.239
+that I'd like to see change.
+
+00:15:38.240 --> 00:15:42.599
+Which is that users right now,
+
+00:15:42.600 --> 00:15:45.199
+not all of these have a choice of,
+
+00:15:45.200 --> 00:15:47.959
+first of all, there's a lot of them.
+
+00:15:47.960 --> 00:15:49.639
+Each one of them is doing their own calls.
+
+00:15:49.640 --> 00:15:53.999
+And each one of them is, so each one of them
+
+00:15:54.000 --> 00:15:55.239
+has their own interfaces.
+
+00:15:55.240 --> 00:15:57.719
+They're rewriting the interface to OpenAI or wherever.
+
+00:15:57.720 --> 00:16:00.119
+And they're not, they don't, most of these
+
+00:16:00.120 --> 00:16:05.119
+do not make it that configurable or at all configurable
+
+00:16:05.120 --> 00:16:06.599
+what LLM use.
+
+00:16:06.600 --> 00:16:07.239
+This is not good.
+
+00:16:07.240 --> 00:16:09.679
+It is important that we use,
+
+00:16:09.680 --> 00:16:15.679
+we give the user a way to change the LLM they use.
+
+00:16:15.680 --> 00:16:21.079
+And that is because you might not be comfortable
+
+00:16:21.080 --> 00:16:24.439
+sending your requests over to a private corporation
+
+00:16:24.440 --> 00:16:27.799
+where you don't get to see how they use their data.
+
+00:16:27.800 --> 00:16:29.799
+Your data, really.
+
+00:16:29.800 --> 00:16:33.319
+That's especially true with things like embeddings
+
+00:16:33.320 --> 00:16:35.039
+where you might be sending over your documents.
+
+00:16:35.040 --> 00:16:37.519
+You're just giving them your documents, basically.
+
+00:16:37.520 --> 00:16:40.759
+And, you know, that does happen.
+
+00:16:40.760 --> 00:16:43.599
+I don't think really that there's a reason
+
+00:16:43.600 --> 00:16:44.639
+to be uncomfortable with this,
+
+00:16:44.640 --> 00:16:51.439
+but that, you know, people are uncomfortable and that's okay.
+
+00:16:51.440 --> 00:16:53.239
+People might want to use a local machine,
+
+00:16:53.240 --> 00:16:58.359
+a local LLM for maximum privacy.
+
+00:16:58.360 --> 00:17:00.639
+That's something we should allow.
+
+00:17:00.640 --> 00:17:04.519
+People might want to especially use free software.
+
+00:17:04.520 --> 00:17:05.839
+That's something we should definitely allow.
+
+00:17:05.840 --> 00:17:07.279
+This is Emacs.
+
+00:17:07.280 --> 00:17:08.239
+We need to encourage that.
+
+00:17:08.240 --> 00:17:12.159
+But right now, as most of these things are written,
+
+00:17:12.160 --> 00:17:13.959
+you can't do it.
+
+00:17:13.960 --> 00:17:17.839
+And they're spending precious time
+
+00:17:17.840 --> 00:17:18.879
+just doing things themselves.
+
+00:17:18.880 --> 00:17:20.839
+This is why I wrote LLM, which is...
+
+00:17:20.840 --> 00:17:23.039
+it will just make that connection to the LLM for you
+
+00:17:23.040 --> 00:17:26.719
+and it will connect to, you know, it has plugins.
+
+00:17:26.720 --> 00:17:30.279
+So if you can, the user can configure what plugin
+
+00:17:30.280 --> 00:17:31.359
+it actually goes to.
+
+00:17:31.360 --> 00:17:32.399
+Does it go to OpenAI?
+
+00:17:32.400 --> 00:17:35.239
+Does it go to Google Cloud Vertex?
+
+00:17:35.240 --> 00:17:36.999
+Does it go to Llama on your machine?
+
+00:17:37.000 --> 00:17:38.399
+We're using Ollama,
+
+00:17:38.400 --> 00:17:40.999
+which is just a way to run Llama locally.
+
+00:17:41.000 --> 00:17:47.959
+And more things in the future, I hope.
+
+00:17:47.960 --> 00:17:52.079
+So this is, I'm hoping that we use this.
+
+00:17:52.080 --> 00:17:54.839
+It's designed to be sort of maximally usable.
+
+00:17:54.840 --> 00:17:56.279
+You don't need to install anything.
+
+00:17:56.280 --> 00:17:58.359
+It's on GNU ELPA.
+
+00:17:58.360 --> 00:17:59.879
+So even if you write something
+
+00:17:59.880 --> 00:18:01.079
+that you want to contribute to GNU ELPA,
+
+00:18:01.080 --> 00:18:02.879
+you can use it because it's on GNU ELPA.
+
+00:18:02.880 --> 00:18:06.439
+It's part of the Emacs package, Emacs core packages.
+
+00:18:06.440 --> 00:18:09.879
+So, but it has no functionality.
+
+00:18:09.880 --> 00:18:11.719
+It's really just there as a library
+
+00:18:11.720 --> 00:18:14.439
+to use by other things offering functionality. Okay.
+
+NOTE Abstracting LLM challenges
+
+00:18:15.960 --> 00:18:19.839
+And it's a little bit difficult to abstract.
+
+00:18:19.840 --> 00:18:21.159
+I want to point this out
+
+00:18:21.160 --> 00:18:23.599
+because I think it's an important point
+
+00:18:23.600 --> 00:18:29.519
+is that the, it's, some of these LLMs, for example,
+
+00:18:29.520 --> 00:18:30.439
+have image generation.
+
+00:18:30.440 --> 00:18:31.279
+Some do not.
+
+00:18:31.280 --> 00:18:35.319
+Some of them have very large context windows, even for chat.
+
+00:18:35.320 --> 00:18:36.999
+You say, okay, all these things can do chat.
+
+00:18:37.000 --> 00:18:37.319
+Okay.
+
+00:18:37.320 --> 00:18:38.079
+Yeah, kind of.
+
+00:18:38.080 --> 00:18:39.999
+Some of these things you could pass a book to,
+
+00:18:40.000 --> 00:18:41.239
+like Anthropic's API.
+
+00:18:41.240 --> 00:18:43.039
+Most, you cannot.
+
+00:18:43.040 --> 00:18:45.559
+So there really are big differences
+
+00:18:45.560 --> 00:18:46.399
+in how these things work.
+
+00:18:46.400 --> 00:18:51.539
+I hope those differences diminish in the future.
+
+00:18:51.540 --> 00:18:53.800
+But it's just one of the challenges
+
+00:18:53.801 --> 00:18:57.520
+that I hope we can work through in the LLM library.
+
+00:18:57.521 --> 00:19:02.160
+So it's compatible, but there's definitely
+
+00:19:02.161 --> 00:19:04.079
+limits to that compatibility.
+
+NOTE Emacs is the ideal interface for LLMs
+
+00:19:04.080 --> 00:19:06.160
+I want to point out just to finish off,
+
+00:19:06.161 --> 00:19:12.879
+Emacs is the, Emacs has real power here
+
+00:19:12.880 --> 00:19:15.679
+that nothing else I think in the industry is offering.
+
+00:19:15.680 --> 00:19:19.279
+First of all, people that use Emacs
+
+00:19:19.280 --> 00:19:20.439
+tend to do a lot of things in Emacs.
+
+00:19:20.440 --> 00:19:22.159
+We have our to-dos in Emacs with the org mode.
+
+00:19:22.160 --> 00:19:22.999
+We have mail.
+
+00:19:23.000 --> 00:19:25.719
+We, you know, we might read email and we might,
+
+00:19:25.720 --> 00:19:27.679
+and respond to email in Emacs.
+
+00:19:27.680 --> 00:19:29.199
+We might have notes in Emacs.
+
+00:19:29.200 --> 00:19:31.359
+This is very powerful.
+
+00:19:31.360 --> 00:19:34.159
+Using... there's not other stuff like that.
+
+00:19:34.160 --> 00:19:35.759
+And you could feed this stuff to an LLM.
+
+00:19:35.760 --> 00:19:37.039
+You could do interesting things
+
+00:19:37.040 --> 00:19:38.559
+using a combination of all this data.
+
+00:19:38.560 --> 00:19:40.399
+No one else could do this.
+
+00:19:40.400 --> 00:19:41.759
+We need to start thinking about it.
+
+00:19:41.760 --> 00:19:45.039
+Secondly, Emacs can execute commands.
+
+00:19:45.040 --> 00:19:46.239
+This might be a bad idea.
+
+00:19:46.240 --> 00:19:48.399
+This might be how the robots take over,
+
+00:19:48.400 --> 00:19:51.799
+but you could have the LLMs respond with Emacs
+
+00:19:51.800 --> 00:19:54.199
+commands and run those Emacs commands
+
+00:19:54.200 --> 00:19:57.079
+and tell the LLM the response and have it do things
+
+00:19:57.080 --> 00:19:58.679
+as your agent in the editor.
+
+00:19:58.680 --> 00:20:01.599
+I think we need to explore ideas like this.
+
+NOTE Outro
+
+00:20:01.960 --> 00:20:04.279
+And I think we need to share these ideas
+
+00:20:04.280 --> 00:20:07.039
+and we need to make sure that we're pushing the
+
+00:20:07.040 --> 00:20:10.519
+envelope for Emacs and actually, you know, doing things,
+
+00:20:10.520 --> 00:20:12.959
+sharing ideas, sharing progress,
+
+00:20:12.960 --> 00:20:15.199
+and kind of seeing how far we can push this stuff.
+
+00:20:15.200 --> 00:20:20.639
+Let's really help Emacs out, be sort of,
+
+00:20:20.640 --> 00:20:24.519
+take advantage of this super powerful technique.
+
+00:20:24.520 --> 00:20:26.160
+Thank you for listening.
diff --git a/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt
new file mode 100644
index 00000000..277f3dd1
--- /dev/null
+++ b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt
@@ -0,0 +1,1019 @@
+WEBVTT
+
+
+00:00:03.540 --> 00:00:03.939
+[Speaker 0]: I would invite all on the,
+
+00:00:04.600 --> 00:00:04.960
+who are currently watching,
+
+00:00:06.819 --> 00:00:07.200
+who have questions, put them into the pad
+
+00:00:08.940 --> 00:00:09.440
+that I can ask them. I'm kind of monitoring
+
+00:00:16.320 --> 00:00:16.720
+the IRC concurrently. So the first question
+
+00:00:18.640 --> 00:00:18.800
+that we have on the pad is concerning why you
+
+00:00:19.600 --> 00:00:20.100
+have switched from OCaml.
+
+00:00:22.420 --> 00:00:22.800
+Maybe the person has missed it in the talk,
+
+00:00:23.480 --> 00:00:23.980
+if you've mentioned it.
+
+00:00:25.080 --> 00:00:25.320
+Why have you switched from OCaml to,
+
+00:00:25.920 --> 00:00:26.180
+in this case, I guess,
+
+00:00:26.180 --> 00:00:26.680
+Rust?
+
+00:00:30.960 --> 00:00:31.080
+[Speaker 1]: Yeah, I mentioned like with writing a
+
+00:00:34.280 --> 00:00:34.440
+language server that I wrote mine for my
+
+00:00:36.900 --> 00:00:37.120
+company in OCaml But I wouldn't recommend it
+
+00:00:38.960 --> 00:00:39.220
+just in general unless like you're doing
+
+00:00:41.720 --> 00:00:42.040
+something specific with OCaml And the reason
+
+00:00:44.180 --> 00:00:44.340
+for that and I recommended Rust or like
+
+00:00:45.780 --> 00:00:46.100
+TypeScript is like OCaml is great.
+
+00:00:49.080 --> 00:00:49.360
+It's very performant but it's cross
+
+00:00:50.739 --> 00:00:51.100
+compilation story is not great.
+
+00:00:54.100 --> 00:00:54.340
+It's like really hard to cross compile like
+
+00:00:55.840 --> 00:00:56.320
+from 1 platform to another.
+
+00:00:58.120 --> 00:00:58.540
+And then like the ecosystem and its standard
+
+00:01:00.380 --> 00:01:00.880
+library is also not great.
+
+00:01:03.460 --> 00:01:03.640
+And like Rust, its cross compilation is
+
+00:01:05.820 --> 00:01:06.320
+great. Its ecosystem is great.
+
+00:01:08.720 --> 00:01:09.060
+OCaml is great if you need to use it,
+
+00:01:10.880 --> 00:01:11.380
+but it's just it's not ideal.
+
+00:01:14.220 --> 00:01:14.340
+And there's just also no good examples of a
+
+00:01:15.240 --> 00:01:15.740
+language server in OCaml.
+
+00:01:19.119 --> 00:01:19.619
+There's the official like OCaml language
+
+00:01:22.920 --> 00:01:23.420
+server, But they use a ton of super advanced
+
+00:01:27.380 --> 00:01:27.540
+language features, like module functors and a
+
+00:01:28.440 --> 00:01:28.700
+bunch of other random stuff.
+
+00:01:29.479 --> 00:01:29.979
+So it's not really readable.
+
+00:01:31.860 --> 00:01:32.300
+But Rust, there's Rust analyzer,
+
+00:01:33.340 --> 00:01:33.780
+which is readable. In TypeScript,
+
+00:01:34.860 --> 00:01:35.360
+there's like a million different ones.
+
+00:01:39.340 --> 00:01:39.660
+So it's less of a, not OCaml is like,
+
+00:01:40.920 --> 00:01:41.280
+it's not that OCaml isn't great.
+
+00:01:43.320 --> 00:01:43.440
+It's more of a, these other languages would
+
+00:01:44.160 --> 00:01:44.660
+probably just be easier.
+
+00:01:45.280 --> 00:01:45.780
+So.
+
+00:01:48.619 --> 00:01:48.920
+[Speaker 0]: I guess since the integration to,
+
+00:01:50.820 --> 00:01:51.000
+for example, like NeoVim or some other
+
+00:01:53.320 --> 00:01:53.460
+editors are just revenue fine because of the
+
+00:01:56.920 --> 00:01:57.420
+[Speaker 1]: Sorry, can you say that again?
+
+00:01:58.580 --> 00:01:59.080
+[Speaker 0]: LSP, I guess. The LSP,
+
+00:02:01.979 --> 00:02:02.100
+so it's a standard LSP specification that
+
+00:02:03.080 --> 00:02:03.400
+you're using. So you can also,
+
+00:02:04.920 --> 00:02:05.340
+for instance, use it and other editors,
+
+00:02:06.660 --> 00:02:07.160
+like for instance, new them or so.
+
+00:02:08.680 --> 00:02:08.940
+[Speaker 1]: Yeah. Yeah. You can use it.
+
+00:02:11.680 --> 00:02:11.920
+It's most, most editors nowadays support it.
+
+00:02:13.280 --> 00:02:13.780
+Like obviously Emacs, NeoVim,
+
+00:02:16.420 --> 00:02:16.840
+Sublime, VS code, Intel,
+
+00:02:17.700 --> 00:02:18.200
+all the IntelliJ ones.
+
+00:02:21.560 --> 00:02:21.960
+So yeah, that's, that's the fun part.
+
+00:02:23.440 --> 00:02:23.760
+You don't have to write 10 different
+
+00:02:26.500 --> 00:02:27.000
+languages to get a bunch of editor support.
+
+00:02:30.200 --> 00:02:30.300
+[Speaker 0]: Also experience writing it.
+
+00:02:33.820 --> 00:02:34.040
+So I didn't have really time to hear into
+
+00:02:36.300 --> 00:02:36.560
+your talk. So I'm sorry if I ask you
+
+00:02:38.100 --> 00:02:38.600
+questions that you have already said.
+
+00:02:41.400 --> 00:02:41.900
+How was the experience of writing an LSP?
+
+00:02:44.340 --> 00:02:44.480
+So have you any knowledge beforehand or do
+
+00:02:45.600 --> 00:02:46.100
+you just read it all on yourself?
+
+00:02:49.200 --> 00:02:49.700
+[Speaker 1]: Yeah, there's not a ton of documentation,
+
+00:02:53.440 --> 00:02:53.940
+which is what motivated me to do this talk.
+
+00:02:56.380 --> 00:02:56.580
+Basically, I just looked at the
+
+00:02:58.820 --> 00:02:58.980
+specification, and I knew Rust Analyzer was
+
+00:03:00.240 --> 00:03:00.740
+cool. And so I looked at Rust Analyzer,
+
+00:03:01.600 --> 00:03:02.100
+and I looked at PyRite.
+
+00:03:04.200 --> 00:03:04.700
+And I just went from there.
+
+00:03:07.920 --> 00:03:08.420
+I found out about all this because I already
+
+00:03:10.240 --> 00:03:10.440
+using Emacs, I already knew about it.
+
+00:03:12.160 --> 00:03:12.660
+I was like, this is going to be easier than
+
+00:03:15.020 --> 00:03:15.480
+something else. So yeah,
+
+00:03:17.720 --> 00:03:18.220
+there's the experience is fine.
+
+00:03:21.060 --> 00:03:21.300
+It's just a lot of wiring stuff up.
+
+00:03:24.100 --> 00:03:24.320
+It's not a lot of like hard thinking until
+
+00:03:26.200 --> 00:03:26.700
+you get to like performance heavy stuff.
+
+00:03:27.740 --> 00:03:28.080
+Like, so for some graph,
+
+00:03:30.760 --> 00:03:31.260
+like we're doing a ton of like code parsing
+
+00:03:32.980 --> 00:03:33.480
+and like analyzing. And so that's,
+
+00:03:35.760 --> 00:03:36.260
+it takes up like a ton of processing power.
+
+00:03:37.280 --> 00:03:37.600
+So like for stuff like that,
+
+00:03:39.620 --> 00:03:39.840
+like now you have to think about caching and
+
+00:03:43.980 --> 00:03:44.380
+like ordering things. So that part's hard,
+
+00:03:47.180 --> 00:03:47.420
+but that's more of a, like very much
+
+00:03:48.640 --> 00:03:49.140
+application specific thing.
+
+00:03:58.320 --> 00:03:58.620
+[Speaker 0]: Right. Anything in the IRC chat.
+
+00:04:01.840 --> 00:04:02.340
+I think not. It's nothing I can see.
+
+00:04:13.380 --> 00:04:13.520
+No questions, that's kind of odd to be
+
+00:04:17.440 --> 00:04:17.860
+honest. I cannot really ask questions
+
+00:04:18.680 --> 00:04:19.180
+concerning LSP specific.
+
+00:04:22.400 --> 00:04:22.900
+[Speaker 1]: Yeah, no worries.
+
+00:04:31.460 --> 00:04:31.960
+[Speaker 0]: Good question, what could be asked?
+
+00:04:35.740 --> 00:04:36.140
+Let's call, let's ask something very
+
+00:04:38.260 --> 00:04:38.680
+unspecific concerning the Emacs usage.
+
+00:04:39.340 --> 00:04:39.760
+And when have you started?
+
+00:04:41.580 --> 00:04:41.780
+How did you came through it and stuff like
+
+00:04:41.780 --> 00:04:42.280
+this?
+
+00:04:46.560 --> 00:04:46.960
+[Speaker 1]: Yeah. I like and when I was in high school,
+
+00:04:48.480 --> 00:04:48.980
+me and my friends just were like,
+
+00:04:51.820 --> 00:04:52.320
+got obsessed with Linux for whatever reason.
+
+00:04:53.940 --> 00:04:54.140
+And then like we traveled down like the,
+
+00:04:55.560 --> 00:04:56.060
+like the free software,
+
+00:04:57.700 --> 00:04:57.940
+like we just thought that was like very
+
+00:05:00.040 --> 00:05:00.160
+entertaining and like interesting to read
+
+00:05:01.200 --> 00:05:01.700
+about all the free software stuff.
+
+00:05:03.120 --> 00:05:03.480
+They were like, yeah, that's cool.
+
+00:05:04.540 --> 00:05:05.040
+And so we all started using Linux.
+
+00:05:06.960 --> 00:05:07.200
+And I'm like, well, if I'm using free
+
+00:05:08.300 --> 00:05:08.740
+software, I'm going to use Emacs.
+
+00:05:12.280 --> 00:05:12.440
+And so I started using Emacs just to try it
+
+00:05:13.940 --> 00:05:14.440
+out. And then I kind of got,
+
+00:05:16.880 --> 00:05:17.380
+I feel like, Stockholm syndrome into it.
+
+00:05:18.720 --> 00:05:19.220
+And now I've realized like,
+
+00:05:21.860 --> 00:05:22.360
+I don't know, now that I've done the like
+
+00:05:23.880 --> 00:05:24.340
+actual work to get into Emacs,
+
+00:05:26.280 --> 00:05:26.480
+it's just, there's so much more I can do with
+
+00:05:30.300 --> 00:05:30.800
+it. But yeah, it was somewhat unintentional.
+
+00:05:36.100 --> 00:05:36.420
+[Speaker 0]: I probably have the same course I've started
+
+00:05:37.780 --> 00:05:38.280
+like 2 years ago using Emacs.
+
+00:05:42.720 --> 00:05:42.940
+And also just, oh, there's at first some cool
+
+00:05:45.020 --> 00:05:45.340
+people on YouTube, so systems crafters and
+
+00:05:46.300 --> 00:05:46.800
+people like this. And also,
+
+00:05:49.440 --> 00:05:49.740
+ah, VS Code, I used a lot of VS Code
+
+00:05:53.560 --> 00:05:53.860
+beforehand and then VS Codium because open
+
+00:05:55.640 --> 00:05:55.860
+source and then oh are there any other
+
+00:05:58.020 --> 00:05:58.180
+alternatives and I came to like Neovim and
+
+00:06:01.160 --> 00:06:01.440
+Emacs and often switching around but I stick
+
+00:06:03.220 --> 00:06:03.720
+to Emacs at some point to be honest.
+
+00:06:07.180 --> 00:06:07.540
+[Speaker 1]: Yeah, I think Emacs also just looks really
+
+00:06:08.500 --> 00:06:09.000
+cool. I will say that.
+
+00:06:14.240 --> 00:06:14.640
+And also just like I like Vim.
+
+00:06:16.960 --> 00:06:17.240
+Vim is cool but like being able to like write
+
+00:06:19.240 --> 00:06:19.540
+lists and like modify your editor on the fly
+
+00:06:20.920 --> 00:06:21.420
+is just like very appealing to me.
+
+00:06:23.860 --> 00:06:24.140
+I don't know, Emacs was tough at first
+
+00:06:25.520 --> 00:06:25.680
+because like all the like default key
+
+00:06:28.380 --> 00:06:28.440
+bindings are just kind of like and then and
+
+00:06:29.860 --> 00:06:30.040
+then I read somewhere someone was like yeah
+
+00:06:33.220 --> 00:06:33.460
+well Richard Stallman uses evil mode so it's
+
+00:06:36.220 --> 00:06:36.460
+okay. I was like alright I can that's like
+
+00:06:38.000 --> 00:06:38.200
+blessing enough for me Like I'm just gonna
+
+00:06:39.520 --> 00:06:39.720
+switch to evil mode. And I was like,
+
+00:06:42.160 --> 00:06:42.360
+this is way, way better as far as key
+
+00:06:42.920 --> 00:06:43.420
+bindings go.
+
+00:06:46.720 --> 00:06:47.020
+[Speaker 0]: Kind of relates. So I switched for,
+
+00:06:49.900 --> 00:06:50.040
+I think, half a year to the default key
+
+00:06:51.300 --> 00:06:51.800
+bindings from Vim beforehand.
+
+00:06:54.960 --> 00:06:55.240
+I switched back to Evil and now I'm losing
+
+00:06:56.100 --> 00:06:56.600
+some kind of hybrid styles.
+
+00:07:01.000 --> 00:07:01.120
+It's kind of weird. But we have a question on
+
+00:07:03.260 --> 00:07:03.700
+the pad. So what are the corner cases,
+
+00:07:05.380 --> 00:07:05.880
+limitations, and other issues you encountered
+
+00:07:08.860 --> 00:07:09.020
+in implementing an LSP server with client in
+
+00:07:09.940 --> 00:07:10.440
+Emacs that were surprising?
+
+00:07:13.680 --> 00:07:13.860
+[Speaker 1]: Yeah, I would say the corner cases and
+
+00:07:15.280 --> 00:07:15.780
+limitations are definitely like,
+
+00:07:16.960 --> 00:07:17.220
+once again, they're going to be very
+
+00:07:18.960 --> 00:07:19.160
+application specific, but it's usually just
+
+00:07:22.420 --> 00:07:22.680
+the performance part. So like I was saying
+
+00:07:24.680 --> 00:07:24.900
+before, right, in general if you're doing
+
+00:07:26.120 --> 00:07:26.620
+language tooling, you're gonna be doing
+
+00:07:29.760 --> 00:07:30.080
+either parsing or interpreting or something
+
+00:07:31.560 --> 00:07:31.880
+like that, which is very just like
+
+00:07:34.740 --> 00:07:35.080
+computationally heavy and so if you're trying
+
+00:07:36.900 --> 00:07:37.060
+to like do that stuff while someone is
+
+00:07:38.520 --> 00:07:39.000
+editing a file right like every keystrokes
+
+00:07:42.660 --> 00:07:42.840
+every like 1 to 2 seconds if they have a fast
+
+00:07:44.240 --> 00:07:44.540
+computer that's great but a lot of people
+
+00:07:46.400 --> 00:07:46.560
+don't have like that fast of a computer that
+
+00:07:49.480 --> 00:07:49.740
+they can go and like do compilation every
+
+00:07:51.680 --> 00:07:52.180
+single keystroke. So like,
+
+00:07:54.080 --> 00:07:54.580
+I would say, I would say the like limitation
+
+00:07:56.920 --> 00:07:57.080
+is just how fast your computer is and how
+
+00:07:59.140 --> 00:07:59.340
+good you are at like implementing caching for
+
+00:08:01.020 --> 00:08:01.520
+like whatever you're doing.
+
+00:08:04.080 --> 00:08:04.280
+That's also just the main issues I've run
+
+00:08:08.080 --> 00:08:08.580
+into is just it's a constant uphill battle.
+
+00:08:12.120 --> 00:08:12.560
+People will somehow find larger and larger
+
+00:08:14.580 --> 00:08:15.080
+files. You'll end up with files that are like
+
+00:08:17.320 --> 00:08:17.680
+thousands, like tens of thousands of lines
+
+00:08:18.700 --> 00:08:18.940
+long and you think yeah,
+
+00:08:21.340 --> 00:08:21.840
+surely no 1 would expect like instantaneous
+
+00:08:25.440 --> 00:08:25.640
+response for like like editing a file that
+
+00:08:26.820 --> 00:08:27.040
+has like tens of thousands of lines,
+
+00:08:30.000 --> 00:08:30.180
+but then they do. As far as corner cases go,
+
+00:08:31.960 --> 00:08:32.459
+I would say the corner case is like,
+
+00:08:37.760 --> 00:08:37.919
+just in general is actually distributing the
+
+00:08:41.039 --> 00:08:41.200
+language server. Cause like writing the
+
+00:08:42.340 --> 00:08:42.840
+language server is fine.
+
+00:08:44.540 --> 00:08:44.900
+Like wiring everything up is fine.
+
+00:08:47.180 --> 00:08:47.300
+But then like, once you actually have to go
+
+00:08:47.960 --> 00:08:48.120
+and distribute it, well,
+
+00:08:49.200 --> 00:08:49.700
+now you're distributing in a binary.
+
+00:08:51.660 --> 00:08:52.160
+Like I was saying before with OCaml,
+
+00:08:53.940 --> 00:08:54.440
+doesn't have great cross compilation.
+
+00:08:58.840 --> 00:08:59.340
+So for some graph for our language server,
+
+00:09:01.560 --> 00:09:02.060
+we target Linux and Mac OS,
+
+00:09:03.840 --> 00:09:04.340
+and we have a ton of people who use Windows,
+
+00:09:06.960 --> 00:09:07.440
+but compiling OCaml for Windows is basically
+
+00:09:10.080 --> 00:09:10.440
+impossible. So our corner case there,
+
+00:09:11.980 --> 00:09:12.480
+the way we solved it was now we're
+
+00:09:14.160 --> 00:09:14.660
+transpiling OCaml to JavaScript,
+
+00:09:17.080 --> 00:09:17.560
+which is a huge can of worms.
+
+00:09:18.840 --> 00:09:19.040
+Like it's a lot of fun.
+
+00:09:19.400 --> 00:09:19.900
+It's very interesting,
+
+00:09:22.860 --> 00:09:23.360
+but like it's not ideal.
+
+00:09:24.340 --> 00:09:24.720
+And so that's what I was saying before.
+
+00:09:26.360 --> 00:09:26.580
+I recommend like Rust or TypeScript because
+
+00:09:29.580 --> 00:09:29.820
+those are way more portable and a lot easier
+
+00:09:31.280 --> 00:09:31.780
+to install. And you don't have to worry about
+
+00:09:33.600 --> 00:09:34.100
+any of that weird packaging stuff.
+
+00:09:37.600 --> 00:09:38.080
+So yeah, I would say that's like the main
+
+00:09:40.260 --> 00:09:40.760
+corner case and the main limitation is just
+
+00:09:41.720 --> 00:09:42.220
+speed and caching.
+
+00:09:47.160 --> 00:09:47.640
+[Speaker 0]: You mentioned this obscure large file so
+
+00:09:49.000 --> 00:09:49.160
+someone doesn't want to refactor or
+
+00:09:51.760 --> 00:09:52.200
+something. How did you start?
+
+00:09:54.480 --> 00:09:54.620
+So did you have any way to still be
+
+00:09:56.320 --> 00:09:56.580
+relatively performant when they have big
+
+00:09:58.020 --> 00:09:58.520
+files or is it just not supported?
+
+00:09:58.920 --> 00:09:59.420
+I don't care.
+
+00:10:03.140 --> 00:10:03.640
+[Speaker 1]: Yeah, no, we, so we support larger files now
+
+00:10:05.460 --> 00:10:05.960
+And the way we ended up doing that,
+
+00:10:11.480 --> 00:10:11.980
+so SemGrep is like you write this generic
+
+00:10:14.540 --> 00:10:14.900
+pattern. You kind of write the language,
+
+00:10:17.160 --> 00:10:17.320
+but then there's these other symbols and
+
+00:10:18.760 --> 00:10:19.160
+stuff that are included in that,
+
+00:10:19.760 --> 00:10:20.260
+this like meta language.
+
+00:10:22.420 --> 00:10:22.580
+And so what happens is,
+
+00:10:23.600 --> 00:10:24.100
+is most languages get,
+
+00:10:27.720 --> 00:10:27.900
+they get parsed and then into a syntax tree,
+
+00:10:29.180 --> 00:10:29.600
+right? Like whatever the language is syntax
+
+00:10:30.620 --> 00:10:31.120
+tree is, and then they get,
+
+00:10:33.800 --> 00:10:34.000
+the syntax tree gets converted into this,
+
+00:10:35.860 --> 00:10:36.360
+like, we call it like an abstract syntax
+
+00:10:38.080 --> 00:10:38.300
+tree, which is like abstract from like any,
+
+00:10:39.860 --> 00:10:40.360
+like languages specific syntax tree.
+
+00:10:41.940 --> 00:10:42.380
+And so then we can cache that,
+
+00:10:44.480 --> 00:10:44.760
+which is really good because like if someone
+
+00:10:47.700 --> 00:10:47.920
+types something like we don't have to go
+
+00:10:50.280 --> 00:10:50.440
+through and do like the full parsing and like
+
+00:10:51.560 --> 00:10:51.760
+converting, we only have to do it
+
+00:10:54.960 --> 00:10:55.200
+incrementally. And so that's,
+
+00:10:56.100 --> 00:10:56.420
+that's how we dealt with that.
+
+00:10:58.140 --> 00:10:58.640
+Or the other option is that we just,
+
+00:11:00.720 --> 00:11:01.180
+we just cache whatever the previous results
+
+00:11:03.460 --> 00:11:03.960
+are, and then run it asynchronously,
+
+00:11:04.960 --> 00:11:05.460
+and they might get it delayed.
+
+00:11:08.200 --> 00:11:08.700
+But we've ended up doing more AST caching,
+
+00:11:09.880 --> 00:11:10.380
+which is fun and cool.
+
+00:11:15.600 --> 00:11:15.900
+[Speaker 0]: Sounds good. So we have here a question from
+
+00:11:18.240 --> 00:11:18.540
+Blaine. If Eaglet is a subset of LSP mode,
+
+00:11:21.680 --> 00:11:21.840
+can EGLOT conflict with LSP mode if both are
+
+00:11:23.400 --> 00:11:23.900
+present in your initial .el
+
+00:11:24.280 --> 00:11:24.780
+file?
+
+00:11:27.740 --> 00:11:28.240
+[Speaker 1]: Yeah, so I haven't played around with EGLOT
+
+00:11:30.580 --> 00:11:30.960
+mode a ton, so I'm not 100% sure.
+
+00:11:33.920 --> 00:11:34.420
+I think all of the key bindings and commands,
+
+00:11:36.320 --> 00:11:36.820
+if you just install it out of the box,
+
+00:11:39.020 --> 00:11:39.520
+I Think they're different.
+
+00:11:41.440 --> 00:11:41.840
+So I don't think there's like any like
+
+00:11:44.760 --> 00:11:45.040
+overlap as far as that stuff goes but you
+
+00:11:47.520 --> 00:11:47.900
+will have the overlap of like you entered,
+
+00:11:49.780 --> 00:11:49.960
+like you started a major mode for like some
+
+00:11:51.500 --> 00:11:51.720
+language, like they'll both probably start
+
+00:11:53.040 --> 00:11:53.540
+the language server and provide diagnostics
+
+00:11:55.320 --> 00:11:55.580
+and everything. And so then now you're
+
+00:11:58.180 --> 00:11:58.320
+getting like, you're just like doubling the
+
+00:11:59.340 --> 00:11:59.680
+work your computer is doing.
+
+00:12:00.480 --> 00:12:00.980
+So there's that conflict.
+
+00:12:04.160 --> 00:12:04.360
+But if you prefer EGLOT mode or LSP mode for
+
+00:12:05.200 --> 00:12:05.700
+like 1 language or framework,
+
+00:12:09.060 --> 00:12:09.440
+like 1 major mode and LSP mode for the other,
+
+00:12:10.600 --> 00:12:11.100
+I think you should be fine.
+
+00:12:14.680 --> 00:12:14.860
+[Speaker 0]: All right. Just to let you know,
+
+00:12:20.460 --> 00:12:20.640
+we have like 1 minute on the stream and then
+
+00:12:22.540 --> 00:12:23.040
+we'll switch back and to the pre-recorded
+
+00:12:24.000 --> 00:12:24.500
+stuff I guess.
+
+00:12:27.440 --> 00:12:27.740
+[Speaker 2]: Yeah yeah yeah let's hi sorry for the rude
+
+00:12:29.440 --> 00:12:29.620
+interruption but I'm just doing a little bit
+
+00:12:31.700 --> 00:12:32.060
+of time keeping so thank you so much Austin
+
+00:12:34.340 --> 00:12:34.540
+sadly I wasn't able to follow the Q&A because
+
+00:12:36.280 --> 00:12:36.780
+I was in the other track answering questions.
+
+00:12:39.960 --> 00:12:40.360
+If, Austin, you want to stay and answer some
+
+00:12:41.580 --> 00:12:42.080
+more questions, feel free to do so.
+
+00:12:45.920 --> 00:12:46.220
+People tend to start talking as soon as we go
+
+00:12:48.400 --> 00:12:48.740
+off air, And I wouldn't be surprised with LSP
+
+00:12:49.540 --> 00:12:50.040
+that people would do the same.
+
+00:12:52.800 --> 00:12:53.040
+We're gonna move on for this track.
+
+00:12:54.840 --> 00:12:55.040
+We're gonna move on in 20 seconds to the next
+
+00:12:56.920 --> 00:12:57.420
+1. So Floey, thank you for hosting.
+
+00:12:58.680 --> 00:12:59.180
+Austin, thank you for all your answers.
+
+00:13:01.460 --> 00:13:01.960
+And We'll see you in a bit.
+
+00:13:04.740 --> 00:13:05.140
+[Speaker 1]: Cool. Thanks. See you.
+
+00:13:06.700 --> 00:13:07.200
+[Speaker 0]: Thanks for the Q&A.
+
+00:13:10.120 --> 00:13:10.440
+[Speaker 2]: All right. All right. You are now off air.
+
+00:13:11.400 --> 00:13:11.720
+Thank you so much, Austin.
+
+00:13:13.100 --> 00:13:13.200
+I'm going to go back running in the
+
+00:13:13.940 --> 00:13:14.100
+background. And thank you,
+
+00:13:14.700 --> 00:13:15.200
+Flowey, for everything.
+
+00:13:20.900 --> 00:13:21.400
+[Speaker 0]: And thanks. Yeah. Have a nice,
+
+00:13:23.160 --> 00:13:23.660
+probably a nice day at your work.
+
+00:13:24.140 --> 00:13:24.240
+[Speaker 1]: Yeah, no worries. Yeah.
+
+00:13:26.380 --> 00:13:26.680
+Yeah, it's still it's like lunchtime for me.
+
+00:13:28.100 --> 00:13:28.600
+[Speaker 0]: So okay, here, it's like,
+
+00:13:34.380 --> 00:13:34.700
+09:00. 9pm. Thanks for the talk.
+
+00:13:36.300 --> 00:13:36.600
+Sorry for the inconvenience was not having
+
+00:13:37.540 --> 00:13:38.040
+any, any questions, really.
+
+00:13:39.000 --> 00:13:39.380
+[Speaker 1]: So yeah. Oh yeah, no worries.
+
+00:13:41.100 --> 00:13:41.280
+It's like, there's like no documentation on
+
+00:13:42.940 --> 00:13:43.380
+any of this stuff. So I didn't really expect
+
+00:13:43.380 --> 00:13:43.880
+any.
+
+00:13:47.220 --> 00:13:47.560
+[Speaker 0]: Yeah, I was kind of interested when I jumped
+
+00:13:51.000 --> 00:13:51.140
+into NeoVim. I write it 1 or 2 things on my
+
+00:13:53.140 --> 00:13:53.320
+own, but never really got really deep into
+
+00:13:54.520 --> 00:13:54.960
+it. And you're gonna see with like compiler
+
+00:13:55.920 --> 00:13:56.140
+design and stuff like this,
+
+00:13:57.400 --> 00:13:57.900
+but not really specific.
+
+00:13:58.320 --> 00:13:58.820
+So I was
+
+00:14:00.860 --> 00:14:01.240
+[Speaker 1]: kind of- Yeah, that's the hard part.
+
+00:14:02.440 --> 00:14:02.880
+It's like, it's, LSP is cool,
+
+00:14:05.020 --> 00:14:05.200
+but then you have to like deal with all the
+
+00:14:06.760 --> 00:14:07.200
+like compiler stuff and programming language
+
+00:14:07.200 --> 00:14:07.700
+theory.
+
+00:14:10.600 --> 00:14:10.800
+[Speaker 0]: So yeah. So it's, it shouldn't be too
+
+00:14:13.280 --> 00:14:13.660
+complicated. I had not really a question,
+
+00:14:14.700 --> 00:14:15.140
+so, but it worked out fine.
+
+00:14:16.500 --> 00:14:17.000
+Thanks for the Q and A.
+
+00:14:18.560 --> 00:14:19.060
+And if I have any questions to Oak Hamill,
+
+00:14:20.640 --> 00:14:21.140
+Elderspeak will get an email from you.
+
+00:14:21.560 --> 00:14:22.060
+[Speaker 1]: Oh yeah, definitely.
+
+00:14:23.500 --> 00:14:24.000
+[Speaker 0]: Dan?
diff --git a/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt
new file mode 100644
index 00000000..93edc9fb
--- /dev/null
+++ b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:16.539
+Introduction
+
+00:00:16.540 --> 00:00:40.719
+What is Semgrep?
+
+00:00:40.720 --> 00:01:37.879
+How do we show security bugs early?
+
+00:01:37.880 --> 00:02:29.039
+What is the Language Server Protocol?
+
+00:02:29.040 --> 00:03:42.759
+Case study: Rust Analyzer
+
+00:03:42.760 --> 00:04:09.959
+Rust Analyzer in action
+
+00:04:09.960 --> 00:05:36.219
+Why is this useful?
+
+00:05:36.220 --> 00:06:40.699
+So what about Emacs?
+
+00:06:40.700 --> 00:07:58.759
+Technical part - Brief communication overview
+
+00:07:58.760 --> 00:08:03.379
+Example request
+
+00:08:03.380 --> 00:09:23.379
+LSP capabilities
+
+00:09:23.380 --> 00:11:03.479
+Tips on writing a LS
+
+00:11:03.480 --> 00:12:05.999
+Supporting a LS through LSP mode in Emacs
+
+00:12:06.000 --> 00:13:07.299
+Create a client
+
+00:13:07.300 --> 00:14:11.679
+Add to list of client packages
+
+00:14:11.680 --> 00:14:17.879
+Add documentation!
+
+00:14:17.880 --> 00:15:01.359
+Adding commands and custom capabilities
+
+00:15:01.360 --> 00:16:03.920
+Thanks for listening
diff --git a/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt
new file mode 100644
index 00000000..cce4f460
--- /dev/null
+++ b/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt
@@ -0,0 +1,1180 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:01.839
+Hi, I'm Austin Theriault,
+
+00:00:01.840 --> 00:00:04.159
+and this is writing a language server in OCaml
+
+00:00:04.160 --> 00:00:07.639
+for Emacs, fun, and profit.
+
+00:00:07.640 --> 00:00:08.919
+Real quick, who am I?
+
+00:00:08.920 --> 00:00:10.919
+Well, I'm a software engineer at Semgrep.
+
+00:00:10.920 --> 00:00:13.239
+I work on our editor integrations,
+
+00:00:13.240 --> 00:00:15.359
+and I love working on programming languages, editors,
+
+00:00:15.360 --> 00:00:16.539
+and cryptography.
+
+NOTE What is Semgrep?
+
+00:00:16.540 --> 00:00:17.799
+What is Semgrep?
+
+00:00:17.800 --> 00:00:20.039
+We're a small cybersecurity startup
+
+00:00:20.040 --> 00:00:21.919
+whose core product is a SaaS tool,
+
+00:00:21.920 --> 00:00:24.759
+which is static application security testing.
+
+00:00:24.760 --> 00:00:27.799
+You can think of it as like a security linter.
+
+00:00:27.800 --> 00:00:30.119
+Normal linters will say, hey,
+
+00:00:30.120 --> 00:00:31.919
+you wrote ugly code, fix it.
+
+00:00:31.920 --> 00:00:35.079
+We'll say, hey, you wrote a SQL injection, fix that.
+
+00:00:35.080 --> 00:00:36.959
+We support 30+ languages,
+
+00:00:36.960 --> 00:00:39.319
+and we have lots of customers all using different IDEs.
+
+00:00:39.320 --> 00:00:40.719
+Why does that matter?
+
+NOTE How do we show security bugs early?
+
+00:00:40.720 --> 00:00:42.779
+Well, our goal is to show security bugs
+
+00:00:42.780 --> 00:00:45.239
+as early as possible in the development cycle.
+
+00:00:45.240 --> 00:00:48.479
+In the industry, we call this shifting left.
+
+00:00:48.480 --> 00:00:52.959
+And so how far left can we shift? The editor.
+
+00:00:52.960 --> 00:00:53.619
+So that's why it matters
+
+00:00:53.620 --> 00:00:56.079
+that our customers have different editors.
+
+00:00:56.080 --> 00:00:58.919
+Our goal is to have Semgrep and the editor
+
+00:00:58.920 --> 00:01:01.319
+show up like other language tooling.
+
+00:01:01.320 --> 00:01:05.199
+And what I mean by that is I wrote some bad OCaml up here,
+
+00:01:05.200 --> 00:01:07.599
+and the editor gave me that red squiggly and said,
+
+00:01:07.600 --> 00:01:12.199
+fix your OCaml, and we want Semgrep to do something similar.
+
+00:01:12.200 --> 00:01:15.519
+And so our goal then is to provide a similar experience
+
+00:01:15.520 --> 00:01:16.919
+to normal language checking.
+
+00:01:16.920 --> 00:01:18.999
+And then since we're a small startup,
+
+00:01:19.000 --> 00:01:22.079
+and there's a ton of different IDEs that our customers use,
+
+00:01:22.080 --> 00:01:24.919
+ideally, we don't want to have to rewrite a plugin
+
+00:01:24.920 --> 00:01:27.559
+for every single type of editor out there.
+
+00:01:27.560 --> 00:01:29.159
+Our other goal is abstract away
+
+00:01:29.160 --> 00:01:32.119
+editing and language features for editors to one code base.
+
+00:01:32.120 --> 00:01:33.879
+Ideally, we write it once
+
+00:01:33.880 --> 00:01:35.799
+and then plug it into all of them.
+
+00:01:35.800 --> 00:01:37.879
+So how can we do that, though?
+
+NOTE What is the Language Server Protocol?
+
+00:01:37.880 --> 00:01:40.679
+Well, in the process of working on this stuff,
+
+00:01:40.680 --> 00:01:42.999
+I found out about
+
+00:01:43.000 --> 00:01:44.879
+the Language Server Protocol.
+
+00:01:44.880 --> 00:01:47.279
+And what's great about the Language Server Protocol is
+
+00:01:47.280 --> 00:01:50.319
+it's a specification that defines all the ways
+
+00:01:50.320 --> 00:01:52.679
+that these language tools might interact
+
+00:01:52.680 --> 00:01:56.879
+with a development tool. And by development tool,
+
+00:01:56.880 --> 00:02:01.599
+I mean like VS Code, Sublime, Emacs, any of those.
+
+00:02:01.600 --> 00:02:07.279
+And by language tool, I mean something like PyRight, MyPy.
+
+00:02:07.280 --> 00:02:09.319
+So what's cool about LSP is that
+
+00:02:09.320 --> 00:02:12.999
+you can separate out those tools into language servers
+
+00:02:13.000 --> 00:02:15.519
+and the development tools into language clients.
+
+00:02:15.520 --> 00:02:18.079
+And because they share this common specification,
+
+00:02:18.080 --> 00:02:20.359
+they can now interact without knowing each other.
+
+00:02:20.360 --> 00:02:22.799
+So it's this great abstraction that means
+
+00:02:22.800 --> 00:02:25.439
+all you have to do is go write one language server
+
+00:02:25.440 --> 00:02:27.439
+and you can hook it up to a bunch of language clients
+
+00:02:27.440 --> 00:02:29.039
+and it'll just work.
+
+NOTE Case study: Rust Analyzer
+
+00:02:29.040 --> 00:02:34.039
+So let's do a quick case study on language servers in LSP,
+
+00:02:34.040 --> 00:02:37.239
+just so you get an idea of why this is super cool.
+
+00:02:37.240 --> 00:02:40.439
+So there's this language server called Rust Analyzer.
+
+00:02:40.440 --> 00:02:42.879
+It's a language server for the Rust language.
+
+00:02:42.880 --> 00:02:44.119
+If you've ever developed in Rust,
+
+00:02:44.120 --> 00:02:46.959
+you'll know that takes a really long time to compile,
+
+00:02:46.960 --> 00:02:50.359
+but the compiler gives you fantastic feedback.
+
+00:02:50.360 --> 00:02:52.359
+Rust has a lot of advanced language features,
+
+00:02:52.360 --> 00:02:55.439
+so that feedback is super important for developing.
+
+00:02:55.440 --> 00:02:58.919
+And so Rust Analyzer will give you that feedback instantly.
+
+00:02:58.920 --> 00:03:01.119
+Here's a ton of things that it gives you.
+
+00:03:01.120 --> 00:03:05.079
+Code completion, fixes, compiler errors, warnings,
+
+00:03:05.080 --> 00:03:08.679
+type signatures. Rust has a pretty strong type system.
+
+00:03:08.680 --> 00:03:12.199
+It also has this thing called lifetimes.
+
+00:03:12.200 --> 00:03:15.079
+A bunch of advanced language features in Rust Analyzer
+
+00:03:15.080 --> 00:03:16.199
+helps you manage all that
+
+00:03:16.200 --> 00:03:17.439
+and gives you all that info
+
+00:03:17.440 --> 00:03:19.219
+without having to wait for it to compile.
+
+00:03:19.220 --> 00:03:21.519
+Developing with the Rust Analyzer
+
+00:03:21.520 --> 00:03:24.319
+is just orders of magnitude easier
+
+00:03:24.320 --> 00:03:26.519
+than just trying to write Rust straight.
+
+00:03:26.520 --> 00:03:30.919
+Rust Analyzer, fantastic. They went and they developed it,
+
+00:03:30.920 --> 00:03:33.639
+and now you can go use that in Emacs, NeoVim,
+
+00:03:33.640 --> 00:03:35.239
+VS Code, wherever.
+
+00:03:35.240 --> 00:03:39.079
+So you can develop Rust in a way that's relatively efficient
+
+00:03:39.080 --> 00:03:42.759
+without having to give up your favorite editor.
+
+NOTE Rust Analyzer in action
+
+00:03:42.760 --> 00:03:44.399
+So here's a quick little demo
+
+00:03:44.400 --> 00:03:46.319
+of all the cool things it can do.
+
+00:03:46.320 --> 00:03:48.119
+So you can see I typed an error.
+
+00:03:48.120 --> 00:03:50.719
+It tells me that I wrote an error.
+
+00:03:50.720 --> 00:03:52.519
+I used the incorrect lifetime,
+
+00:03:52.520 --> 00:03:54.159
+which is some advanced language feature,
+
+00:03:54.160 --> 00:03:55.159
+and it'll let me know that.
+
+00:03:55.160 --> 00:03:57.519
+I expanded a Rust macro just there,
+
+00:03:57.520 --> 00:03:59.239
+which is similar to Lisp macros,
+
+00:03:59.240 --> 00:04:01.359
+and then I ran a single unit test,
+
+00:04:01.360 --> 00:04:04.639
+and that's really cool because I ran a single unit test
+
+00:04:04.640 --> 00:04:05.439
+from my editor.
+
+00:04:05.440 --> 00:04:07.839
+I didn't have to go and type any commands or anything.
+
+00:04:07.840 --> 00:04:09.959
+It just worked.
+
+NOTE Why is this useful?
+
+00:04:09.960 --> 00:04:13.399
+So why is this just useful in general for a user?
+
+00:04:13.400 --> 00:04:15.799
+Well, you get the same experience across editors.
+
+00:04:15.800 --> 00:04:17.119
+Like I was saying, you don't have to give up
+
+00:04:17.120 --> 00:04:18.359
+one editor for another
+
+00:04:18.360 --> 00:04:21.719
+so you get some sort of cool language feature.
+
+00:04:21.720 --> 00:04:23.559
+You can easily set up and use language servers
+
+00:04:23.560 --> 00:04:24.599
+made for other editors
+
+00:04:24.600 --> 00:04:27.859
+if developers don't support your editor of choice.
+
+00:04:27.860 --> 00:04:31.239
+Performance is not dependent on the editor.
+
+00:04:31.240 --> 00:04:35.439
+That's fantastic because to do all that Rust stuff,
+
+00:04:35.440 --> 00:04:37.439
+it takes a lot of CPU power,
+
+00:04:37.440 --> 00:04:40.499
+and so that's going to be slow
+
+00:04:40.500 --> 00:04:43.679
+if your editor language is not great, not fast.
+
+00:04:43.680 --> 00:04:47.799
+And then bug fixes, updates, all that,
+
+00:04:47.800 --> 00:04:50.119
+it all comes out at the same time.
+
+00:04:50.120 --> 00:04:53.399
+And then from the developer perspective, well,
+
+00:04:53.400 --> 00:04:55.359
+adding new editors is quick and easy.
+
+00:04:55.360 --> 00:04:58.699
+For reference, when I wrote the Semgrep language server,
+
+00:04:58.700 --> 00:05:00.519
+it took me maybe two or three weeks,
+
+00:05:00.520 --> 00:05:03.999
+but then actually going and setting it up for VS Code,
+
+00:05:04.000 --> 00:05:06.439
+that took an hour. For Emacs, 30 minutes.
+
+00:05:06.440 --> 00:05:08.359
+IntelliJ, maybe another hour.
+
+00:05:08.360 --> 00:05:10.399
+So it took me a day to add support
+
+00:05:10.400 --> 00:05:11.879
+for three different editors,
+
+00:05:11.880 --> 00:05:14.799
+which was I think something like 75% of the market share
+
+00:05:14.800 --> 00:05:16.319
+or something crazy like that.
+
+00:05:16.320 --> 00:05:20.179
+So very quick. You only need one mental model.
+
+00:05:20.180 --> 00:05:21.079
+You don't have to figure out
+
+00:05:21.080 --> 00:05:23.959
+all these different extension mental models,
+
+00:05:23.960 --> 00:05:26.519
+how those editors work, anything like that.
+
+00:05:26.520 --> 00:05:28.639
+And another thing that's cool is
+
+00:05:28.640 --> 00:05:30.399
+you only have to write tests for the language server,
+
+00:05:30.400 --> 00:05:31.959
+not necessarily for the editor.
+
+00:05:31.960 --> 00:05:33.839
+It's great to have just one set of tests
+
+00:05:33.840 --> 00:05:36.219
+that you have to pass.
+
+NOTE So what about Emacs?
+
+00:05:36.220 --> 00:05:40.159
+So why does a language server protocol matter with Emacs?
+
+00:05:40.160 --> 00:05:42.379
+Well, like I was saying before,
+
+00:05:42.380 --> 00:05:45.479
+Emacs gets the benefit from work put into other editors.
+
+00:05:45.480 --> 00:05:47.759
+So we get all this language support,
+
+00:05:47.760 --> 00:05:51.119
+and no one actually has to go and write the list for it
+
+00:05:51.120 --> 00:05:53.199
+or write those tools specific to Emacs.
+
+00:05:53.200 --> 00:05:54.919
+You get the language tooling,
+
+00:05:54.920 --> 00:05:56.759
+the CPU-intensive part of the editors.
+
+00:05:56.760 --> 00:05:58.559
+It can be written in something else.
+
+00:05:58.560 --> 00:06:01.319
+Lisp is fast. It's not that fast.
+
+00:06:01.320 --> 00:06:04.719
+Having that speed is fantastic. It's all asynchronous.
+
+00:06:04.720 --> 00:06:06.439
+It won't slow down Emacs.
+
+00:06:06.440 --> 00:06:08.919
+And then there's this package called `lsp-mode`,
+
+00:06:08.920 --> 00:06:11.359
+which is an LSP client commonly included
+
+00:06:11.360 --> 00:06:13.319
+in popular Emacs distributions.
+
+00:06:13.320 --> 00:06:15.159
+So a lot of people already have that.
+
+00:06:15.160 --> 00:06:18.679
+If you're using Emacs 29 or greater, you have `eglot-mode`,
+
+00:06:18.680 --> 00:06:21.679
+which is a lighter weight version of `lsp-mode`.
+
+00:06:21.680 --> 00:06:24.239
+It's just another LSP client.
+
+00:06:24.240 --> 00:06:26.359
+When I wrote the Semgrep language server,
+
+00:06:26.360 --> 00:06:28.319
+Emacs 29 hadn't come out yet.
+
+00:06:28.320 --> 00:06:31.479
+I'm not going to talk too much about `eglot-mode`
+
+00:06:31.480 --> 00:06:33.299
+because I did everything in `lsp-mode`,
+
+00:06:33.300 --> 00:06:37.779
+but I would imagine a lot of this stuff is very similar.
+
+00:06:37.780 --> 00:06:40.699
+Here's a list of some supported languages.
+
+NOTE Technical part - Brief communication overview
+
+00:06:40.700 --> 00:06:42.639
+Now let's get into the technical part.
+
+00:06:42.640 --> 00:06:45.039
+How does LSP actually work?
+
+00:06:45.040 --> 00:06:47.159
+So let's go over how it communicates first.
+
+00:06:47.160 --> 00:06:49.759
+It uses JSONRPC,
+
+00:06:49.760 --> 00:06:51.959
+which is just kind of like HTTP,
+
+00:06:51.960 --> 00:06:54.619
+but instead of sending plain text, you're sending JSON.
+
+00:06:54.620 --> 00:06:56.439
+So it's just sending JSON back and forth.
+
+00:06:56.440 --> 00:06:58.539
+It's great because it's a way
+
+00:06:58.540 --> 00:06:59.959
+for two programs to communicate
+
+00:06:59.960 --> 00:07:02.839
+without sharing a common programming language.
+
+00:07:02.840 --> 00:07:04.959
+Transport platform agnostic,
+
+00:07:04.960 --> 00:07:07.079
+so it could be stdin, stdout,
+
+00:07:07.080 --> 00:07:09.399
+sockets, whatever. It's just JSON.
+
+00:07:09.400 --> 00:07:11.139
+You can send it over whatever.
+
+00:07:11.140 --> 00:07:12.719
+There's two different types of messages,
+
+00:07:12.720 --> 00:07:15.839
+a request, which requires a response from the other party,
+
+00:07:15.840 --> 00:07:19.259
+and a notification, which does not expect a response.
+
+00:07:19.260 --> 00:07:21.759
+So just a quick little example,
+
+00:07:21.760 --> 00:07:23.759
+a user might open a document,
+
+00:07:23.760 --> 00:07:28.079
+and then it'll send like a text document did open
+
+00:07:28.080 --> 00:07:30.199
+and what document it was to the language server,
+
+00:07:30.200 --> 00:07:31.079
+and then they'll change it.
+
+00:07:31.080 --> 00:07:35.079
+Maybe they edit some code and introduce a syntax error.
+
+00:07:35.080 --> 00:07:37.159
+The changes will be sent to the language server,
+
+00:07:37.160 --> 00:07:39.219
+and then the language server will publish diagnostics,
+
+00:07:39.220 --> 00:07:41.199
+which is those red squigglies
+
+00:07:41.200 --> 00:07:42.559
+I was talking about earlier,
+
+00:07:42.560 --> 00:07:45.459
+and say, hey, syntax error or whatever here,
+
+00:07:45.460 --> 00:07:46.919
+or maybe the user says,
+
+00:07:46.920 --> 00:07:49.159
+I want to go to the definition of this function,
+
+00:07:49.160 --> 00:07:51.239
+and then the language server will spit back,
+
+00:07:51.240 --> 00:07:53.799
+hey, this is where that function lives.
+
+00:07:53.800 --> 00:07:55.399
+All very useful,
+
+00:07:55.400 --> 00:07:57.719
+and the communication is relatively simple,
+
+00:07:57.720 --> 00:07:58.759
+which is great.
+
+NOTE Example request
+
+00:07:58.760 --> 00:08:01.239
+This is what it looks like, what a request looks like.
+
+00:08:01.240 --> 00:08:03.379
+Notifications look somewhat similar.
+
+NOTE LSP capabilities
+
+00:08:03.380 --> 00:08:05.879
+So now we know how LSP communication works,
+
+00:08:05.880 --> 00:08:09.859
+but how does the actual protocol work?
+
+00:08:09.860 --> 00:08:12.399
+Well, almost all of the protocol is opt-in,
+
+00:08:12.400 --> 00:08:15.839
+meaning you don't have to support the entire specification,
+
+00:08:15.840 --> 00:08:17.399
+you can just pick and choose.
+
+00:08:17.400 --> 00:08:19.839
+Servers and clients will then communicate
+
+00:08:19.840 --> 00:08:21.679
+what part of the protocol they both support,
+
+00:08:21.680 --> 00:08:22.679
+so they'll both say, hey,
+
+00:08:22.680 --> 00:08:26.359
+we support being notified when a user opens a document,
+
+00:08:26.360 --> 00:08:28.879
+or if they're looking for documentation.
+
+00:08:28.880 --> 00:08:33.799
+And so then once they agree upon what they'll both support,
+
+00:08:33.800 --> 00:08:35.199
+then they'll send that stuff,
+
+00:08:35.200 --> 00:08:38.579
+those notifications and requests back and forth.
+
+00:08:38.580 --> 00:08:41.319
+Things like opening and closing files, diagnostics,
+
+00:08:41.320 --> 00:08:46.039
+code completion, hovering over stuff, type signatures,
+
+00:08:46.040 --> 00:08:48.559
+all of that. And what's cool is
+
+00:08:48.560 --> 00:08:50.239
+even though the specification is huge
+
+00:08:50.240 --> 00:08:52.039
+and probably has everything you need,
+
+00:08:52.040 --> 00:08:54.479
+you can go ahead and add custom capabilities
+
+00:08:54.480 --> 00:08:55.519
+if you really want to.
+
+00:08:55.520 --> 00:08:57.979
+So you can just define a custom method,
+
+00:08:57.980 --> 00:09:01.359
+and then now that works for you,
+
+00:09:01.360 --> 00:09:03.519
+and now you can have that in all your editors.
+
+00:09:03.520 --> 00:09:04.559
+For example, Rust Analyzer
+
+00:09:04.560 --> 00:09:06.199
+has structural search and replace,
+
+00:09:06.200 --> 00:09:08.159
+which is like find and replace,
+
+00:09:08.160 --> 00:09:11.599
+but with respect to the structure of the code.
+
+00:09:11.600 --> 00:09:13.639
+And if you choose to go down this route
+
+00:09:13.640 --> 00:09:15.159
+with the custom capabilities,
+
+00:09:15.160 --> 00:09:16.659
+you do have to remember you're going to have to
+
+00:09:16.660 --> 00:09:18.699
+implement it in every client.
+
+00:09:18.700 --> 00:09:20.399
+And that's a little bit more work,
+
+00:09:20.400 --> 00:09:23.379
+but it's better than where we were without LSP.
+
+NOTE Tips on writing a LS
+
+00:09:23.380 --> 00:09:25.439
+So some quick tips on writing a language server.
+
+00:09:25.440 --> 00:09:27.479
+I'm not going to get too into this
+
+00:09:27.480 --> 00:09:30.799
+because it's very application-specific.
+
+00:09:30.800 --> 00:09:32.759
+I wrote Semgrep's in OCaml
+
+00:09:32.760 --> 00:09:35.119
+since our code base was almost all OCaml already,
+
+00:09:35.120 --> 00:09:36.599
+and I wanted to leverage that.
+
+00:09:36.600 --> 00:09:38.039
+Would not recommend
+
+00:09:38.040 --> 00:09:41.559
+unless you also have a code base all in OCaml.
+
+00:09:41.560 --> 00:09:43.639
+Structure is similar to a Rust server,
+
+00:09:43.640 --> 00:09:45.739
+so a bunch of independent endpoints.
+
+00:09:45.740 --> 00:09:48.639
+I would do everything functionally if I were you.
+
+00:09:48.640 --> 00:09:49.919
+This is EmacsConf.
+
+00:09:49.920 --> 00:09:53.399
+We're all hopefully used to writing functional Lisp.
+
+00:09:53.400 --> 00:09:56.239
+I would recommend TypeScript or Rust, though,
+
+00:09:56.240 --> 00:09:58.319
+depending on your level of performance
+
+00:09:58.320 --> 00:10:00.839
+that you really need or whatever language
+
+00:10:00.840 --> 00:10:02.254
+you're trying to support ideally.
+
+00:10:02.255 --> 00:10:03.399
+Most languages have
+
+00:10:03.400 --> 00:10:06.499
+some sort of language server protocol already.
+
+00:10:06.500 --> 00:10:09.199
+But if they don't, then it might be easier
+
+00:10:09.200 --> 00:10:10.159
+to do it in that language.
+
+00:10:10.160 --> 00:10:12.799
+TypeScript has a lot of support, a lot of documentation,
+
+00:10:12.800 --> 00:10:14.159
+a lot of examples out there
+
+00:10:14.160 --> 00:10:17.679
+because it was what Microsoft originally intended
+
+00:10:17.680 --> 00:10:20.919
+the language server protocol to be for, for VS Code,
+
+00:10:20.920 --> 00:10:22.079
+which is written in TypeScript.
+
+00:10:22.080 --> 00:10:24.439
+Rust is fast, it's going to take more effort,
+
+00:10:24.440 --> 00:10:28.519
+but it's very fast, and Rust Analyzer has a great library
+
+00:10:28.520 --> 00:10:30.279
+that they use and that they support.
+
+00:10:30.280 --> 00:10:32.799
+So support there, examples there are great.
+
+00:10:32.800 --> 00:10:35.839
+The hard part is not really the language server protocol,
+
+00:10:35.840 --> 00:10:38.999
+but the actual logic. So, like, if you're doing, like,
+
+00:10:39.000 --> 00:10:40.199
+language tooling, you're going to have to do
+
+00:10:40.200 --> 00:10:42.679
+analysis on the code, so you need to do parsing,
+
+00:10:42.680 --> 00:10:46.999
+possibly compiling, all these different advanced features,
+
+00:10:47.000 --> 00:10:48.959
+all these advanced different things.
+
+00:10:48.960 --> 00:10:52.519
+For example, Rust Analyzer will do incremental compilation,
+
+00:10:52.520 --> 00:10:54.319
+which is really, really cool,
+
+00:10:54.320 --> 00:10:58.119
+but that's, like, a whole separate talk.
+
+00:10:58.120 --> 00:11:00.319
+If you're adapting an existing language tool,
+
+00:11:00.320 --> 00:11:01.679
+this stuff is really easy.
+
+00:11:01.680 --> 00:11:03.479
+You're basically just wiring stuff up.
+
+NOTE Supporting a LS through LSP mode in Emacs
+
+00:11:03.480 --> 00:11:08.359
+But, yeah. So, now we know all about
+
+00:11:08.360 --> 00:11:10.799
+LSP and language servers.
+
+00:11:10.800 --> 00:11:11.879
+Say you want to actually
+
+00:11:11.880 --> 00:11:14.079
+add support for a language server in Emacs.
+
+00:11:14.080 --> 00:11:19.159
+How do you do that? Well, let's look at LSP mode,
+
+00:11:19.160 --> 00:11:21.519
+because, like I said, this is what I'm most familiar with.
+
+00:11:21.520 --> 00:11:24.259
+I'm sure `eglot-mode` is pretty similar.
+
+00:11:24.260 --> 00:11:27.479
+So, `lsp-mode`'s repository is on GitHub,
+
+00:11:27.480 --> 00:11:31.499
+like everything, and it has a ton of different clients
+
+00:11:31.500 --> 00:11:34.439
+for a ton of different languages and frameworks and tools,
+
+00:11:34.440 --> 00:11:37.039
+like Semgrep, and these are available
+
+00:11:37.040 --> 00:11:39.739
+to anyone who installs LSP mode.
+
+00:11:39.740 --> 00:11:42.239
+Alternatively, you can make a separate package
+
+00:11:42.240 --> 00:11:43.679
+and just use LSP mode as a library,
+
+00:11:43.680 --> 00:11:45.479
+but I'm not going to focus on this,
+
+00:11:45.480 --> 00:11:47.879
+because there's already a ton of resources out there
+
+00:11:47.880 --> 00:11:50.799
+on packaging and Emacs.
+
+00:11:50.800 --> 00:11:54.559
+So, our steps, very quickly, are going to look like
+
+00:11:54.560 --> 00:11:58.299
+adding an Emacs Lisp file that contains some logic,
+
+00:11:58.300 --> 00:12:01.319
+add an entry somewhere, so we added a new client
+
+00:12:01.320 --> 00:12:03.719
+to the list of clients, and then do some documentation,
+
+00:12:03.720 --> 00:12:05.999
+because documentation's great.
+
+NOTE Create a client
+
+00:12:06.000 --> 00:12:07.639
+First, creating a client.
+
+00:12:07.640 --> 00:12:09.639
+In the `clients/` folder in `lsp-mode/`,
+
+00:12:09.640 --> 00:12:12.919
+literally just add, like, `lsp-` whatever it is,
+
+00:12:12.920 --> 00:12:15.759
+`require` the library, and register a client.
+
+00:12:15.760 --> 00:12:18.039
+Registering a client just means, like,
+
+00:12:18.040 --> 00:12:19.559
+saying what kind of connection it is.
+
+00:12:19.560 --> 00:12:21.479
+It's most likely going to be standard I/O,
+
+00:12:21.480 --> 00:12:24.359
+because that's pretty easy to implement,
+
+00:12:24.360 --> 00:12:26.839
+and then you just pass it the executable
+
+00:12:26.840 --> 00:12:29.559
+that you actually want to run.
+
+00:12:29.560 --> 00:12:31.719
+Say what the activation function is,
+
+00:12:31.720 --> 00:12:33.319
+so this is when the client should start,
+
+00:12:33.320 --> 00:12:36.239
+so you can specify the language
+
+00:12:36.240 --> 00:12:38.279
+or the major mode or whatever,
+
+00:12:38.760 --> 00:12:43.099
+and now your client will start whenever that's triggered,
+
+00:12:43.100 --> 00:12:45.639
+and then finally provide just a server ID,
+
+00:12:45.640 --> 00:12:48.579
+so that way it's easy to keep track of,
+
+00:12:48.580 --> 00:12:52.759
+and then run this LSP consistency check function.
+
+00:12:52.760 --> 00:12:56.579
+This just makes sure everything up there is good.
+
+00:12:56.580 --> 00:12:59.519
+You can do more advanced stuff with making an LSP client
+
+00:12:59.520 --> 00:13:01.199
+that I'm not going to get into,
+
+00:13:01.200 --> 00:13:03.799
+but just know that these aren't your only options,
+
+00:13:03.800 --> 00:13:07.299
+and then finally provide your client.
+
+NOTE Add to list of client packages
+
+00:13:07.300 --> 00:13:09.799
+Next, you just have to add your client
+
+00:13:09.800 --> 00:13:12.159
+to the list of clients that `lsp-mode` supports,
+
+00:13:12.160 --> 00:13:15.639
+and now you've added support for a whole new language,
+
+00:13:15.640 --> 00:13:17.719
+whole new framework, whole new tool to Emacs,
+
+00:13:17.720 --> 00:13:20.219
+and it's taking you, what, like, what is that,
+
+00:13:20.220 --> 00:13:23.639
+20 lines of Lisp? No, not even, like, 15.
+
+00:13:23.640 --> 00:13:26.639
+15 lines of Lisp, whole new language for Emacs.
+
+00:13:26.640 --> 00:13:31.599
+It's really exciting. Now that you have your client,
+
+00:13:31.600 --> 00:13:35.119
+let's do some documentation. Go fill out this, like, name,
+
+00:13:35.120 --> 00:13:37.919
+where the repository, the source code is,
+
+00:13:37.920 --> 00:13:39.599
+because free software is great,
+
+00:13:39.600 --> 00:13:42.179
+and you should open source your stuff.
+
+00:13:42.180 --> 00:13:44.199
+Specify the installation command.
+
+00:13:44.200 --> 00:13:45.399
+What's cool about this is
+
+00:13:45.400 --> 00:13:48.059
+this can be run automatically from Emacs,
+
+00:13:48.060 --> 00:13:50.319
+so if it's, like, `pip install pyright`, right,
+
+00:13:50.320 --> 00:13:53.399
+you can put that there, and Emacs will ask you,
+
+00:13:53.400 --> 00:13:55.279
+do you want to install the language server,
+
+00:13:55.280 --> 00:13:56.199
+and you can hit yes
+
+00:13:56.200 --> 00:13:59.539
+and users will just have it installed for them,
+
+00:13:59.540 --> 00:14:01.879
+and then you can say whether or not it's a debugger.
+
+00:14:01.880 --> 00:14:03.159
+This is completely separate,
+
+00:14:03.160 --> 00:14:05.119
+so there's this thing called DAP,
+
+00:14:05.120 --> 00:14:07.319
+which is the debugger adapter protocol,
+
+00:14:07.320 --> 00:14:09.679
+and it's similar to LSP but for debuggers,
+
+00:14:09.680 --> 00:14:11.679
+which is very cool,
+
+NOTE Add documentation!
+
+00:14:11.680 --> 00:14:14.599
+and then finally link to your documentation.
+
+00:14:14.600 --> 00:14:17.879
+Please, please document your stuff.
+
+NOTE Adding commands and custom capabilities
+
+00:14:17.880 --> 00:14:20.479
+If you want to add, like, a custom Emacs function
+
+00:14:20.480 --> 00:14:22.679
+or custom capabilities, it's super easy.
+
+00:14:22.680 --> 00:14:27.639
+It's literally just, like, calling a normal Emacs function.
+
+00:14:27.640 --> 00:14:30.559
+For example, Semgrep normally only scans files
+
+00:14:30.560 --> 00:14:34.199
+when you open them, but we added a Emacs function
+
+00:14:34.200 --> 00:14:36.719
+that will scan your entire project, right,
+
+00:14:36.720 --> 00:14:40.959
+and so that was just a client notification.
+
+00:14:40.960 --> 00:14:44.119
+It was just `lsp-notify` and then a custom method,
+
+00:14:44.120 --> 00:14:46.719
+and it's great because now you can just scan your project
+
+00:14:46.720 --> 00:14:48.719
+from a simple Emacs function.
+
+00:14:48.720 --> 00:14:52.119
+Requests, very similar to notifications.
+
+00:14:52.120 --> 00:14:56.079
+You send it and then pass it a lambda
+
+00:14:56.080 --> 00:14:58.459
+and do something with the result,
+
+00:14:58.460 --> 00:15:01.359
+and so that's adding custom capabilities.
+
+NOTE Thanks for listening
+
+00:15:01.360 --> 00:15:04.319
+That's pretty much it. Thank you for listening.
+
+00:15:04.320 --> 00:15:05.639
+Some resources here.
+
+00:15:05.640 --> 00:15:08.239
+These links are clickable if you get the PDF,
+
+00:15:08.240 --> 00:15:10.919
+if you get the slides. Semgrep: we're hiring!
+
+00:15:10.920 --> 00:15:12.119
+If you want to work on, like,
+
+00:15:12.120 --> 00:15:13.719
+programming language theory stuff,
+
+00:15:13.720 --> 00:15:18.119
+compilers, parsers, editors,
+
+00:15:18.120 --> 00:15:22.119
+email me or go look at our jobs.
+
+00:15:22.120 --> 00:15:25.119
+The LSP specification, this is, like, the holy Bible.
+
+00:15:25.120 --> 00:15:28.339
+It has all the specs, all the types, everything.
+
+00:15:28.340 --> 00:15:30.419
+`lsp-mode` and the docs.
+
+00:15:30.420 --> 00:15:33.279
+`lsp-mode`, right, that's where you want to add your client.
+
+00:15:33.280 --> 00:15:36.099
+The docs are great, super useful.
+
+00:15:36.100 --> 00:15:38.079
+Rust Analyzer is just a great reference
+
+00:15:38.080 --> 00:15:39.919
+for language servers in general
+
+00:15:39.920 --> 00:15:42.119
+if you want to write one or if you just want to, like,
+
+00:15:42.120 --> 00:15:45.399
+see how they work. It's all just really well done.
+
+00:15:45.400 --> 00:15:47.039
+It's great code, very readable.
+
+00:15:47.040 --> 00:15:50.479
+And then down here is just a long video tutorial,
+
+00:15:50.480 --> 00:15:54.699
+a longer video tutorial, not by me,
+
+00:15:54.700 --> 00:15:58.439
+by someone else, on how to add a language client to Emacs,
+
+00:15:58.440 --> 00:16:00.679
+but hopefully this is sufficient for y'all,
+
+00:16:01.480 --> 00:16:03.920
+and now it's time for some Q&A.
diff --git a/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt
new file mode 100644
index 00000000..80483399
--- /dev/null
+++ b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt
@@ -0,0 +1,17 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:40.719
+Introduction
+
+00:01:40.720 --> 00:02:23.599
+What is an LLM?
+
+00:02:23.600 --> 00:05:11.700
+Using this library
+
+00:05:11.701 --> 00:08:00.159
+Further instructions
+
+00:08:00.160 --> 00:09:33.480
+Room for improvement
diff --git a/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt
new file mode 100644
index 00000000..a01ffd80
--- /dev/null
+++ b/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt
@@ -0,0 +1,602 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:03.039
+Hi, my name is Abhinav and I'm going to talk about
+
+00:00:03.040 --> 00:00:06.199
+this tool that I've been working on called MatplotLLM.
+
+00:00:06.200 --> 00:00:09.519
+MatplotLLM is a natural language interface
+
+00:00:09.520 --> 00:00:12.479
+over matplotlib, which is a library I use a lot
+
+00:00:12.480 --> 00:00:14.439
+for making visualizations.
+
+00:00:14.440 --> 00:00:18.679
+It's a pretty common Python library used a lot everywhere
+
+00:00:18.680 --> 00:00:22.479
+where there's need of plotting and graphing.
+
+00:00:22.480 --> 00:00:25.359
+I usually use it in reports.
+
+00:00:25.360 --> 00:00:27.359
+Whenever I'm writing a report in org mode,
+
+00:00:27.360 --> 00:00:31.559
+I tend to write a code block which is in Python.
+
+00:00:31.560 --> 00:00:34.079
+And then that code block has usage of matplotlib
+
+00:00:34.080 --> 00:00:35.999
+to produce some reports.
+
+00:00:36.000 --> 00:00:38.319
+That works really well.
+
+00:00:38.320 --> 00:00:39.999
+But at times what happens is
+
+00:00:40.000 --> 00:00:43.959
+I have to make a very custom graph, let's say.
+
+00:00:43.960 --> 00:00:46.919
+And then while I'm writing a report,
+
+00:00:46.920 --> 00:00:50.679
+it's kind of a huge leap of abstraction
+
+00:00:50.680 --> 00:00:51.519
+when I'm working on text
+
+00:00:51.520 --> 00:00:54.879
+versus going into actual low-level matplotlib code
+
+00:00:54.880 --> 00:00:56.239
+to do that graphing.
+
+00:00:56.240 --> 00:00:59.679
+So that's something I don't want to do.
+
+00:00:59.680 --> 00:01:00.479
+Here's an example.
+
+00:01:00.480 --> 00:01:03.999
+This is a graph which is... I think it was made
+
+00:01:04.000 --> 00:01:05.839
+like five or six years back.
+
+00:01:05.840 --> 00:01:08.399
+And then there are some common things
+
+00:01:08.400 --> 00:01:09.959
+like scatter plot here,
+
+00:01:09.960 --> 00:01:12.239
+the dots that you can see here scattered.
+
+00:01:12.240 --> 00:01:16.279
+Then... But there are a few things which, to do them,
+
+00:01:16.280 --> 00:01:19.159
+to make them, you will actually have to go--at least me,
+
+00:01:19.160 --> 00:01:20.839
+I have to go to the documentation
+
+00:01:20.840 --> 00:01:24.119
+and figure out how to do it. Which is fine,
+
+00:01:24.120 --> 00:01:26.519
+but I don't want to do this, you know,
+
+00:01:26.520 --> 00:01:29.199
+spend so much time here, when I'm working on
+
+00:01:29.200 --> 00:01:32.319
+a tight deadline for a report.
+
+00:01:32.320 --> 00:01:33.919
+That's the motivation for this tool.
+
+00:01:33.920 --> 00:01:35.199
+This tool basically allows me
+
+00:01:35.200 --> 00:01:38.479
+to get rid of the complexity of the library
+
+00:01:38.480 --> 00:01:40.719
+by working via an LLM.
+
+NOTE What is an LLM?
+
+00:01:40.720 --> 00:01:43.399
+So an LLM is a large language model.
+
+00:01:43.400 --> 00:01:45.079
+These are models which are
+
+00:01:45.080 --> 00:01:49.399
+trained to produce text, generate text.
+
+00:01:49.400 --> 00:01:51.519
+And just by doing that,
+
+00:01:51.520 --> 00:01:55.079
+they actually end up learning a lot of common patterns.
+
+00:01:55.080 --> 00:01:56.799
+For example, if you ask a question,
+
+00:01:56.800 --> 00:01:58.919
+you can actually get a reasonable response.
+
+00:01:58.920 --> 00:02:00.759
+If you ask to write a code for something,
+
+00:02:00.760 --> 00:02:01.879
+you'll actually get code
+
+00:02:01.880 --> 00:02:04.759
+which can also be very reasonable.
+
+00:02:04.760 --> 00:02:06.599
+So this tool is basically a wrapper
+
+00:02:06.600 --> 00:02:10.999
+that uses an LLM. For the current version,
+
+00:02:11.000 --> 00:02:13.919
+we use GPT-4, which is OpenAI's model.
+
+00:02:13.920 --> 00:02:17.919
+It's not open in the sense of open source.
+
+00:02:17.920 --> 00:02:21.119
+So that's a problem that it has.
+
+00:02:21.120 --> 00:02:23.599
+But for this version, we are going to use that.
+
+NOTE Using this library
+
+00:02:23.600 --> 00:02:25.479
+Using this library is pretty simple.
+
+00:02:25.480 --> 00:02:27.399
+You basically require the library
+
+00:02:27.400 --> 00:02:30.719
+and then you set up your OpenAI API key here.
+
+00:02:30.720 --> 00:02:33.359
+Then you get a code block
+
+00:02:33.360 --> 00:02:35.759
+where you can specify the language as `matplotllm`.
+
+00:02:35.760 --> 00:02:38.279
+And then what you can do is,
+
+00:02:38.280 --> 00:02:40.799
+you can basically describe what you want
+
+00:02:40.800 --> 00:02:41.799
+in natural language.
+
+00:02:41.800 --> 00:02:45.279
+I'll take this example of this data set.
+
+00:02:45.280 --> 00:02:48.599
+It's called the Health and Wealth of Nations.
+
+00:02:48.600 --> 00:02:49.639
+I think that was
+
+00:02:49.640 --> 00:02:51.399
+the name of a visualization where it was used.
+
+00:02:51.400 --> 00:02:53.399
+This is basically life expectancy,
+
+00:02:53.400 --> 00:02:59.279
+GDP of various countries starting from 1800.
+
+00:02:59.280 --> 00:03:02.719
+I think it goes up to 2000 somewhere.
+
+00:03:02.720 --> 00:03:07.479
+So earlier, I would try to write code which reads this CSV
+
+00:03:07.480 --> 00:03:09.839
+and then does a lot of matplotlib stuff
+
+00:03:09.840 --> 00:03:11.679
+and then finally produces a graph.
+
+00:03:11.680 --> 00:03:13.879
+But with this tool, what I'll do is
+
+00:03:13.880 --> 00:03:17.679
+I'll just provide instructions in two forms.
+
+00:03:17.680 --> 00:03:18.879
+So the first thing I'll do is
+
+00:03:18.880 --> 00:03:21.359
+I'll just describe how the data looks like.
+
+00:03:21.360 --> 00:03:29.039
+So I'll say data is in a file called `data.csv`,
+
+00:03:29.040 --> 00:03:33.159
+which is this file, by the way, on the right.
+
+00:03:33.160 --> 00:03:39.799
+It looks like the following.
+
+00:03:39.800 --> 00:03:44.359
+I just pasted a few lines from the top, which is enough.
+
+00:03:44.360 --> 00:03:47.119
+Since it's a CSV, there's already a structure to it.
+
+00:03:47.120 --> 00:03:50.079
+But let's say if you have a log file
+
+00:03:50.080 --> 00:03:53.759
+where there's more complexities to be parsed and all,
+
+00:03:53.760 --> 00:03:55.039
+that also works out really well.
+
+00:03:55.040 --> 00:03:58.079
+You just have to describe how the data looks like
+
+00:03:58.080 --> 00:04:01.159
+and the system will figure out how to work with this.
+
+00:04:01.160 --> 00:04:06.404
+Now, let's do the plotting. So what I can do is...
+
+00:04:06.405 --> 00:04:09.559
+Let's start from a very basic plot
+
+00:04:09.560 --> 00:04:11.620
+between life expectancy and GDP per capita.
+
+00:04:11.621 --> 00:04:13.800
+I'll just do this.
+
+00:04:13.801 --> 00:04:17.280
+"Can you make a scatter plot
+
+00:04:17.281 --> 00:04:26.399
+for life expectancy and GDP per capita?"
+
+00:04:26.400 --> 00:04:29.639
+Now, you can see there are some typos,
+
+00:04:29.640 --> 00:04:31.719
+and probably there will be some grammatical mistakes
+
+00:04:31.720 --> 00:04:32.919
+also coming through.
+
+00:04:32.920 --> 00:04:37.119
+But that's all OK, because the models are supposed to
+
+00:04:37.120 --> 00:04:40.559
+handle those kinds of situations really well.
+
+00:04:40.560 --> 00:04:43.239
+So I send the request to the model.
+
+00:04:43.240 --> 00:04:47.119
+Since it's a large model--GPT-4 is really large--
+
+00:04:47.120 --> 00:04:50.519
+it actually takes a lot of time to get the response back.
+
+00:04:50.520 --> 00:04:53.359
+So this specific response took 17 seconds,
+
+00:04:53.360 --> 00:04:54.239
+which is huge.
+
+00:04:54.240 --> 00:04:57.439
+It's not something you would expect
+
+00:04:57.440 --> 00:04:59.599
+in a local file running on a computer.
+
+00:04:59.600 --> 00:05:01.879
+But I've got what I wanted. Right.
+
+00:05:01.880 --> 00:05:04.119
+So there's a scatter plot here, as you can see below,
+
+00:05:04.120 --> 00:05:08.879
+which is plotting what I specified it to do,
+
+00:05:08.880 --> 00:05:11.700
+though it looks a little dense.
+
+NOTE Further instructions
+
+00:05:11.701 --> 00:05:12.640
+What I can do is
+
+00:05:12.641 --> 00:05:16.000
+I can provide further instructions as feedback.
+
+00:05:16.001 --> 00:05:18.400
+I try to feed back on this. So I can say,
+
+00:05:18.401 --> 00:05:30.599
+"Can you only show points where year is the multiple of 50?"
+
+00:05:30.600 --> 00:05:33.519
+So since it's starting from 1800, the data points,
+
+00:05:33.520 --> 00:05:34.719
+there are too many years,
+
+00:05:34.720 --> 00:05:37.239
+so I'll just try to thin them down a little.
+
+00:05:37.240 --> 00:05:40.199
+Now what's happening in the background
+
+00:05:40.200 --> 00:05:42.719
+is that everything below this last instruction
+
+00:05:42.720 --> 00:05:45.719
+is going out as the context to the model
+
+00:05:45.720 --> 00:05:47.399
+along with the code that it wrote till now.
+
+00:05:47.400 --> 00:05:50.079
+And then this instruction is added on top of it
+
+00:05:50.080 --> 00:05:53.079
+so that it basically modifies the code to make it work
+
+00:05:53.080 --> 00:05:55.079
+according to this instruction.
+
+00:05:55.080 --> 00:05:58.439
+As you can see now, the data points are much fewer.
+
+00:05:58.440 --> 00:06:01.519
+This is what I wanted also.
+
+00:06:01.520 --> 00:06:02.799
+Let's also do a few more things.
+
+00:06:02.800 --> 00:06:05.439
+I want to see the progression through time.
+
+00:06:05.440 --> 00:06:13.079
+So maybe I'll do something like, color more recent years
+
+00:06:13.080 --> 00:06:15.439
+with a darker shade of...
+
+00:06:15.440 --> 00:06:21.719
+Let's change the color map also.
+
+00:06:21.720 --> 00:06:24.159
+Now, this again goes back to the model.
+
+00:06:24.160 --> 00:06:26.799
+Again, everything below before this line
+
+00:06:26.800 --> 00:06:29.119
+is the context along with the current code,
+
+00:06:29.120 --> 00:06:31.799
+and then this instruction is going to the model
+
+00:06:31.800 --> 00:06:37.039
+to make the changes. So now this should happen, I guess.
+
+00:06:37.040 --> 00:06:41.319
+Once this happens. Yeah. So. OK.
+
+00:06:41.320 --> 00:06:44.599
+So we have this new color map,
+
+00:06:44.600 --> 00:06:46.599
+and there's also this change of color.
+
+00:06:46.600 --> 00:06:51.719
+And also there's this range of color from 1800 to 2000,
+
+00:06:51.720 --> 00:06:53.399
+which is a nice addition.
+
+00:06:53.400 --> 00:06:55.839
+Kind of smart. I didn't expect...
+
+00:06:55.840 --> 00:06:58.959
+I didn't exactly ask for it, but it's nice.
+
+00:06:58.960 --> 00:07:00.959
+So there's a couple more things.
+
+00:07:00.960 --> 00:07:07.759
+Let's make it more minimal. "Let's make it more minimal.
+
+00:07:07.760 --> 00:07:17.319
+Can you remove the bounding box?"
+
+00:07:17.320 --> 00:07:21.399
+Also, let's annotate a few points.
+
+00:07:21.400 --> 00:07:23.719
+So I want to annotate the point
+
+00:07:23.720 --> 00:07:25.839
+which has the highest GDP per capita.
+
+00:07:25.840 --> 00:07:33.599
+"Also annotate the point with highest GDP per capita
+
+00:07:33.600 --> 00:07:36.999
+with the country and year."
+
+00:07:37.000 --> 00:07:41.599
+So again, forget about the grammar.
+
+00:07:41.600 --> 00:07:43.599
+The language model works out well.
+
+00:07:43.600 --> 00:07:46.159
+Usually it takes care of
+
+00:07:46.160 --> 00:07:47.439
+all those complexities for you.
+
+00:07:47.440 --> 00:07:53.119
+This is what we have got after that.
+
+00:07:53.120 --> 00:07:55.719
+As you can see, there's the annotation, which is here.
+
+00:07:55.720 --> 00:07:56.679
+I think it's still overlapping,
+
+00:07:56.680 --> 00:07:58.559
+so probably it could be done better,
+
+00:07:58.560 --> 00:08:00.159
+but the box is removed.
+
+NOTE Room for improvement
+
+00:08:00.160 --> 00:08:03.359
+Now, as you can see, the system is...
+
+00:08:03.360 --> 00:08:04.879
+You will be able to see this
+
+00:08:04.880 --> 00:08:07.479
+that the system is not really robust.
+
+00:08:07.480 --> 00:08:10.079
+So the GitHub repository has some examples
+
+00:08:10.080 --> 00:08:12.119
+where it fails miserably,
+
+00:08:12.120 --> 00:08:13.679
+and you'll actually have to go into the code
+
+00:08:13.680 --> 00:08:14.999
+to figure out what's happening.
+
+00:08:15.000 --> 00:08:17.879
+But we do expect that to improve slowly,
+
+00:08:17.880 --> 00:08:21.039
+because the models are improving greatly in performance.
+
+00:08:21.040 --> 00:08:22.479
+This is a very general model.
+
+00:08:22.480 --> 00:08:24.479
+This is not even tuned for this use case.
+
+00:08:24.480 --> 00:08:26.639
+The other thing is that
+
+00:08:26.640 --> 00:08:29.639
+while I was trying to provide feedback,
+
+00:08:29.640 --> 00:08:32.199
+I was still using text here all the time,
+
+00:08:32.200 --> 00:08:34.559
+but it can be made more natural.
+
+00:08:34.560 --> 00:08:36.159
+So, for example, if I have to annotate
+
+00:08:36.160 --> 00:08:37.439
+this particular point,
+
+00:08:37.440 --> 00:08:42.239
+I actually can just point my cursor to it.
+
+00:08:42.240 --> 00:08:44.519
+Emacs has a way to figure out
+
+00:08:44.520 --> 00:08:45.799
+where your mouse pointer is.
+
+00:08:45.800 --> 00:08:49.620
+And with that, you can actually go back into the code
+
+00:08:49.621 --> 00:08:51.960
+and then see which primitive
+
+00:08:51.961 --> 00:08:54.480
+is being drawn here in Matplotlib.
+
+00:08:54.481 --> 00:08:55.719
+So that there is a way to do that.
+
+00:08:55.720 --> 00:08:58.439
+And then, if you do that, then it's really nice to
+
+00:08:58.440 --> 00:09:01.319
+just be able to say
+
+00:09:01.320 --> 00:09:04.279
+put your cursor here and then say something like,
+
+00:09:04.280 --> 00:09:04.999
+"Can you make this?
+
+00:09:05.000 --> 00:09:06.599
+Can you annotate this point?"
+
+00:09:06.600 --> 00:09:10.719
+Because text is, you know... There are limitations to text.
+
+00:09:10.720 --> 00:09:12.479
+And if you're producing an image,
+
+00:09:12.480 --> 00:09:13.959
+you should be able to do that, too.
+
+00:09:13.960 --> 00:09:16.399
+So I do expect that to happen soonish.
+
+00:09:16.400 --> 00:09:19.839
+If not, from the model side, the hack that I mentioned
+
+00:09:19.840 --> 00:09:21.359
+could be made to work.
+
+00:09:21.360 --> 00:09:24.439
+So that will come in in a later version, probably.
+
+00:09:24.440 --> 00:09:27.599
+Anyway, so that's the end of my talk.
+
+00:09:27.600 --> 00:09:29.759
+You can find more details in the repository link.
+
+00:09:29.760 --> 00:09:33.480
+Thank you for listening. Goodbye.
diff --git a/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt b/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt
new file mode 100644
index 00000000..3fc25b4e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt
@@ -0,0 +1,4486 @@
+WEBVTT
+
+
+00:00:09.480 --> 00:00:09.880
+[Speaker 0]: 2 seconds. And I think we are live.
+
+00:00:10.760 --> 00:00:11.260
+Hi, Jeremy, how are you doing?
+
+00:00:11.840 --> 00:00:12.040
+[Speaker 1]: All right. I'm doing all right.
+
+00:00:12.380 --> 00:00:12.880
+How about you?
+
+00:00:14.759 --> 00:00:15.060
+[Speaker 0]: I'm doing great as well.
+
+00:00:16.480 --> 00:00:16.640
+I'm really happy to see all the talk that
+
+00:00:18.600 --> 00:00:19.100
+we're having. And I was particularly excited
+
+00:00:21.880 --> 00:00:22.240
+when I got your proposal for this talk
+
+00:00:24.080 --> 00:00:24.279
+because mentoring, as I was telling you
+
+00:00:25.040 --> 00:00:25.540
+during the check-in process,
+
+00:00:27.360 --> 00:00:27.779
+is a subject dear to my heart.
+
+00:00:28.700 --> 00:00:29.200
+So I'm really excited,
+
+00:00:30.640 --> 00:00:30.920
+not only for the talk that you've just done,
+
+00:00:32.200 --> 00:00:32.360
+but also for the question that people are
+
+00:00:32.880 --> 00:00:33.380
+going to ask you.
+
+00:00:35.760 --> 00:00:36.020
+[Speaker 1]: Yeah, I'm looking forward to answering some
+
+00:00:39.600 --> 00:00:39.880
+questions. Mentoring is also something near
+
+00:00:43.860 --> 00:00:44.320
+and dear. Something I did not mention is when
+
+00:00:45.620 --> 00:00:45.820
+folks would ask me, like,
+
+00:00:47.000 --> 00:00:47.460
+what was your most important class?
+
+00:00:48.920 --> 00:00:49.199
+Or I said, oh, easy, easy,
+
+00:00:50.180 --> 00:00:50.680
+easy, high school English.
+
+00:00:54.160 --> 00:00:54.480
+Like, it's my whatever your primary written
+
+00:00:56.320 --> 00:00:56.820
+and spoken languages I think is the most
+
+00:00:58.860 --> 00:00:59.360
+useful skill as a programmer
+
+00:01:05.379 --> 00:01:05.580
+[Speaker 0]: right so as usual people if you want to ask
+
+00:01:09.520 --> 00:01:09.660
+questions to Jeremy, feel free to find the
+
+00:01:11.440 --> 00:01:11.940
+link to the other pad either on the talk page
+
+00:01:15.440 --> 00:01:15.720
+or on IRC. We're also going to open the chat
+
+00:01:17.320 --> 00:01:17.720
+so that people can join us and ask questions.
+
+00:01:20.380 --> 00:01:20.660
+Let me just make sure that I tell Sasha can
+
+00:01:25.440 --> 00:01:25.580
+you open ID Mentor. All right so in the
+
+00:01:27.320 --> 00:01:27.520
+meantime what we'll do is that I'll be
+
+00:01:29.660 --> 00:01:29.860
+reading questions of the pad and Jeremy will
+
+00:01:31.400 --> 00:01:31.480
+be answering them whilst we wait for you to
+
+00:01:32.800 --> 00:01:33.280
+join. Now just to be clear with the time,
+
+00:01:34.640 --> 00:01:34.820
+we have a little bit of time now,
+
+00:01:36.040 --> 00:01:36.540
+a little more time than before.
+
+00:01:39.520 --> 00:01:39.720
+We have 22 minutes, so until 10 of the next
+
+00:01:41.260 --> 00:01:41.400
+hours to answer as many questions as
+
+00:01:42.520 --> 00:01:42.900
+possible. And believe me,
+
+00:01:45.040 --> 00:01:45.200
+if you people watching right now are not
+
+00:01:47.280 --> 00:01:47.440
+asking questions, I will be asking plenty of
+
+00:01:49.840 --> 00:01:50.340
+them. So please, save Jeremy from my
+
+00:01:53.800 --> 00:01:54.300
+[Speaker 1]: I look forward to it.
+
+00:01:55.320 --> 00:01:55.820
+[Speaker 0]: inquisitive mind. All right.
+
+00:01:56.960 --> 00:01:57.460
+Starting with the first question,
+
+00:01:59.240 --> 00:01:59.680
+a very trivial 1, perhaps,
+
+00:02:01.720 --> 00:02:01.920
+but always 1 that I ask myself when I look at
+
+00:02:03.840 --> 00:02:04.340
+a keyboard. Regarding super key,
+
+00:02:05.980 --> 00:02:06.480
+which key do you bind to super?
+
+00:02:09.620 --> 00:02:10.120
+[Speaker 1]: Yeah, so my left command,
+
+00:02:12.180 --> 00:02:12.680
+which is on a Mac keyboard,
+
+00:02:16.620 --> 00:02:17.120
+so the key right to the left of the space bar
+
+00:02:20.860 --> 00:02:21.000
+is super. And the key immediately to the
+
+00:02:23.000 --> 00:02:23.400
+right of spacebar, which is the right command
+
+00:02:24.320 --> 00:02:24.820
+key, is bound to hyper,
+
+00:02:28.140 --> 00:02:28.640
+which opens up a whole new suite of keys.
+
+00:02:31.080 --> 00:02:31.280
+And I thought it would take a little bit to
+
+00:02:33.160 --> 00:02:33.660
+get used to, but it's been amazing.
+
+00:02:37.800 --> 00:02:38.300
+So I definitely recommend having a hyper
+
+00:02:38.440 --> 00:02:38.940
+binding.
+
+00:02:42.440 --> 00:02:42.720
+[Speaker 0]: I will, yes. I was also going to say super
+
+00:02:43.860 --> 00:02:44.160
+binding. No, it's a hyper binding.
+
+00:02:44.800 --> 00:02:45.040
+We already have super.
+
+00:02:47.120 --> 00:02:47.280
+It's your Windows key or your Linux key or
+
+00:02:48.240 --> 00:02:48.740
+whatever you want to call it.
+
+00:02:51.140 --> 00:02:51.640
+But I will warn people though,
+
+00:02:57.720 --> 00:02:58.200
+it's the gateway into fancy keyboard setups
+
+00:03:00.900 --> 00:03:01.400
+because it starts, it's the Trojan horse of
+
+00:03:02.700 --> 00:03:03.140
+fancy keyboard setup. Just,
+
+00:03:04.320 --> 00:03:04.820
+oh I wish I could have another modifier.
+
+00:03:06.960 --> 00:03:07.280
+And then many years later,
+
+00:03:09.160 --> 00:03:09.280
+you find yourself with this little thing that
+
+00:03:11.260 --> 00:03:11.760
+I'm showing, which is a fully customized QMK
+
+00:03:12.100 --> 00:03:12.600
+keyboard.
+
+00:03:13.540 --> 00:03:14.040
+[Speaker 2]: All right.
+
+00:03:18.200 --> 00:03:18.700
+[Speaker 1]: Following on that, then meta is to the left
+
+00:03:21.880 --> 00:03:22.080
+of super, and then control is to the left of
+
+00:03:26.720 --> 00:03:26.940
+meta. And also, caps lock maps to control as
+
+00:03:31.380 --> 00:03:31.620
+well. Definitely tried a bunch of tap for
+
+00:03:35.460 --> 00:03:35.940
+this and that on a programmable keyboard,
+
+00:03:39.280 --> 00:03:39.520
+but I have settled on keep it simple and use
+
+00:03:41.580 --> 00:03:41.780
+something like carabiner elements to do most
+
+00:03:46.400 --> 00:03:46.640
+[Speaker 0]: Right. It's good that you were able to stop
+
+00:03:48.480 --> 00:03:48.760
+there. I wish I'd stopped there at some point
+
+00:03:50.940 --> 00:03:51.340
+[Speaker 1]: of the mapping. It was a terrible moment
+
+00:03:52.900 --> 00:03:53.000
+where I'm like, oh, what have I done when I
+
+00:03:53.760 --> 00:03:54.200
+was trying to type once?
+
+00:03:57.500 --> 00:03:58.000
+[Speaker 0]: in my life. All right,
+
+00:03:58.920 --> 00:03:59.420
+moving on to the next question.
+
+00:04:01.360 --> 00:04:01.560
+Great talk. What's the package you used to
+
+00:04:02.120 --> 00:04:02.620
+make the org slide?
+
+00:04:03.280 --> 00:04:03.740
+[Speaker 1]: So yeah, it's great. Yeah,
+
+00:04:13.680 --> 00:04:13.940
+so I am using Protz Logos and have,
+
+00:04:15.660 --> 00:04:16.160
+I think, like, Olivet mode.
+
+00:04:19.959 --> 00:04:20.140
+I'll post a link to the configuration for
+
+00:04:21.019 --> 00:04:21.260
+turning it on and off.
+
+00:04:24.280 --> 00:04:24.680
+But it's basically narrow region to an org
+
+00:04:27.940 --> 00:04:28.220
+heading, which is, I find that to be super
+
+00:04:30.300 --> 00:04:30.800
+helpful. Don't have to fiddle with it.
+
+00:04:32.900 --> 00:04:33.120
+[Speaker 0]: Right, just to be clear,
+
+00:04:34.920 --> 00:04:35.140
+it's Olivetti, right? I think that's the...
+
+00:04:36.460 --> 00:04:36.960
+[Speaker 1]: Oh yeah, Olivetti, yeah.
+
+00:04:39.960 --> 00:04:40.120
+[Speaker 0]: A typical Italian word that is really tough
+
+00:04:42.720 --> 00:04:42.880
+to pronounce between Europeans and people in
+
+00:04:46.080 --> 00:04:46.400
+[Speaker 1]: Yeah, I had a... For some reason I dropped
+
+00:04:48.940 --> 00:04:49.440
+the I at the end. So in my head
+
+00:04:52.660 --> 00:04:52.800
+[Speaker 0]: the US. Yeah, moving to the next question if
+
+00:04:54.440 --> 00:04:54.800
+people do get interested in picking up emacs
+
+00:04:56.520 --> 00:04:56.680
+because of what they see you do How do you
+
+00:04:58.260 --> 00:04:58.440
+recommend they say they get into it?
+
+00:04:58.440 --> 00:04:58.940
+Oh
+
+00:05:05.600 --> 00:05:06.020
+[Speaker 1]: Yeah, so I've been I think a lot of it comes
+
+00:05:09.620 --> 00:05:09.780
+down to what are the problems that they're
+
+00:05:11.600 --> 00:05:11.880
+trying to solve. And so I walked them through
+
+00:05:15.460 --> 00:05:15.660
+my journey. I worked in TextMate for a long
+
+00:05:16.980 --> 00:05:17.480
+time, then Sublime, then Atom.
+
+00:05:20.220 --> 00:05:20.720
+And then in 2020, I hopped over to Emacs,
+
+00:05:25.080 --> 00:05:25.580
+started writing in it and I chose Space Max
+
+00:05:26.680 --> 00:05:27.180
+and then I chose Doom.
+
+00:05:28.140 --> 00:05:28.640
+And then I was like, wait,
+
+00:05:33.080 --> 00:05:33.280
+start over, erase everything and just do the
+
+00:05:36.620 --> 00:05:36.760
+tutorial. So I did the tutorial and then I
+
+00:05:37.800 --> 00:05:38.000
+started writing and I was like,
+
+00:05:39.520 --> 00:05:40.020
+oh, I really want this functionality.
+
+00:05:43.380 --> 00:05:43.580
+And so I went and I looked for it and I
+
+00:05:44.060 --> 00:05:44.560
+installed the package.
+
+00:05:46.060 --> 00:05:46.560
+And then I got the functionality,
+
+00:05:47.960 --> 00:05:48.120
+went back to writing, and I'm like,
+
+00:05:49.920 --> 00:05:50.080
+oh, my editor should really be able to do
+
+00:05:52.000 --> 00:05:52.500
+this. And I thought about it.
+
+00:05:55.380 --> 00:05:55.520
+So a lot of it came down to the experience of
+
+00:05:56.320 --> 00:05:56.820
+what they're trying to accomplish.
+
+00:06:00.900 --> 00:06:01.260
+And really helping ask them that.
+
+00:06:04.600 --> 00:06:04.900
+I had 1 mentee had used Vim for a long time
+
+00:06:07.700 --> 00:06:07.940
+and then was exploring using Evil Mode and
+
+00:06:13.100 --> 00:06:13.260
+Emacs and we had conversations and it was
+
+00:06:16.840 --> 00:06:17.220
+like go back to Vim like you were using VS
+
+00:06:19.040 --> 00:06:19.280
+Code just go back to Vim and they went back
+
+00:06:20.980 --> 00:06:21.420
+to Vim and then they started writing,
+
+00:06:22.760 --> 00:06:23.260
+well, they went to NeoVim and they started
+
+00:06:27.620 --> 00:06:27.900
+writing Lua plugins for stuff and it just
+
+00:06:29.480 --> 00:06:29.980
+helped free them and they gained that
+
+00:06:31.320 --> 00:06:31.820
+ownership in their text editor.
+
+00:06:37.520 --> 00:06:37.660
+So I try to have them think through what are
+
+00:06:40.160 --> 00:06:40.440
+the common tasks that they're trying to
+
+00:06:44.180 --> 00:06:44.440
+accomplish and then thinking in terms of
+
+00:06:46.320 --> 00:06:46.480
+that. So instead of going and finding a
+
+00:06:48.340 --> 00:06:48.560
+solution, understand the problems they're
+
+00:06:52.180 --> 00:06:52.320
+experiencing, which tends to be what we
+
+00:06:53.360 --> 00:06:53.860
+should do in software development.
+
+00:06:57.720 --> 00:06:58.220
+Instead of implementing the solve a problem.
+
+00:07:02.000 --> 00:07:02.500
+Sometimes It's fun to implement an idea.
+
+00:07:04.840 --> 00:07:05.220
+[Speaker 0]: Yeah, I think it's really the crux,
+
+00:07:06.740 --> 00:07:07.120
+really, when it comes to software
+
+00:07:08.760 --> 00:07:09.060
+development, because what is at the crux of
+
+00:07:09.520 --> 00:07:09.960
+any kind of engineering?
+
+00:07:11.680 --> 00:07:11.840
+Well, it's the problem you're trying to
+
+00:07:13.480 --> 00:07:13.680
+solve. If you've got 2 islands and you need
+
+00:07:14.440 --> 00:07:14.860
+to join them up together,
+
+00:07:15.840 --> 00:07:16.340
+well, I need to build a bridge.
+
+00:07:17.160 --> 00:07:17.660
+Now, obviously with software,
+
+00:07:19.800 --> 00:07:19.940
+we have problems that defy the law of
+
+00:07:21.600 --> 00:07:21.840
+physics, which is great because we get very
+
+00:07:23.520 --> 00:07:23.720
+complex problems that are very exciting to
+
+00:07:26.380 --> 00:07:26.880
+solve. But when it comes to onboarding people
+
+00:07:28.180 --> 00:07:28.680
+into those ways of solving problems,
+
+00:07:29.540 --> 00:07:30.040
+well, I think mentoring,
+
+00:07:32.980 --> 00:07:33.480
+The key behind mentoring is that together,
+
+00:07:35.280 --> 00:07:35.460
+we're going to look at a problem and we're
+
+00:07:37.200 --> 00:07:37.680
+going to try to see how high would fix it.
+
+00:07:40.240 --> 00:07:40.740
+And you're going to try to appreciate whether
+
+00:07:42.280 --> 00:07:42.440
+this is something you would do as well or
+
+00:07:43.260 --> 00:07:43.760
+would like to do.
+
+00:07:50.080 --> 00:07:50.580
+[Speaker 1]: Yep, Absolutely. Yeah,
+
+00:07:54.340 --> 00:07:54.480
+it's really taking time to walk with them on
+
+00:07:56.500 --> 00:07:57.000
+the journey to understand what's frustrating
+
+00:07:59.700 --> 00:08:00.040
+them. I have a coworker we've been working
+
+00:08:01.240 --> 00:08:01.740
+together for a very long time.
+
+00:08:05.280 --> 00:08:05.780
+She is not a fast navigator of her editor,
+
+00:08:08.860 --> 00:08:09.200
+but as we've talked, that's not where she's
+
+00:08:09.960 --> 00:08:10.460
+looking to get better.
+
+00:08:17.380 --> 00:08:17.680
+She's looking to get better at asking the
+
+00:08:20.500 --> 00:08:20.740
+questions of the clients early so that we
+
+00:08:23.160 --> 00:08:23.660
+don't go down long paths of implementation.
+
+00:08:27.940 --> 00:08:28.320
+So it's been great because she's not looking
+
+00:08:29.820 --> 00:08:30.060
+to get better at her text editor.
+
+00:08:32.500 --> 00:08:33.000
+She's adequate for how she navigates.
+
+00:08:34.700 --> 00:08:34.900
+Other people look and they're like,
+
+00:08:35.740 --> 00:08:36.179
+man, I want to do it faster.
+
+00:08:36.820 --> 00:08:37.120
+I want to do it different.
+
+00:08:37.840 --> 00:08:38.340
+I want to do it better.
+
+00:08:39.480 --> 00:08:39.980
+And then we have a different conversation.
+
+00:08:44.480 --> 00:08:44.720
+[Speaker 0]: Right. All right. Moving on to the next
+
+00:08:46.960 --> 00:08:47.320
+question. I've been using Emacs for about 30
+
+00:08:49.120 --> 00:08:49.240
+years and I find it really difficult to
+
+00:08:50.860 --> 00:08:51.200
+figure out how to help people get started
+
+00:08:54.400 --> 00:08:54.600
+with it So I guess my question is the same as
+
+00:08:55.680 --> 00:08:55.900
+the green question right about it.
+
+00:08:57.900 --> 00:08:58.100
+I think it's slightly different though You
+
+00:09:00.860 --> 00:09:01.360
+could it is more about well go on please.
+
+00:09:01.500 --> 00:09:02.000
+Yeah
+
+00:09:06.900 --> 00:09:07.400
+[Speaker 1]: so My wife a while ago,
+
+00:09:10.680 --> 00:09:11.180
+talked about the idea of,
+
+00:09:15.860 --> 00:09:16.260
+relative to anybody, I am an expert or
+
+00:09:19.020 --> 00:09:19.200
+slightly more informed on a topic than the
+
+00:09:20.380 --> 00:09:20.880
+person quote behind me.
+
+00:09:22.360 --> 00:09:22.600
+And there's a person ahead of me who's
+
+00:09:24.240 --> 00:09:24.740
+slightly more informed than I am.
+
+00:09:27.880 --> 00:09:28.120
+And so what we're looking at is perhaps with
+
+00:09:28.820 --> 00:09:29.320
+30 years of experience,
+
+00:09:32.580 --> 00:09:32.780
+introducing someone to Emacs might be
+
+00:09:35.780 --> 00:09:35.920
+difficult because you've you're too much of
+
+00:09:41.120 --> 00:09:41.320
+an expert. So maybe the there's a an idea of
+
+00:09:42.380 --> 00:09:42.880
+like what are the principles of pedagogy.
+
+00:09:45.180 --> 00:09:45.360
+I know we that was talked about yesterday in
+
+00:09:47.180 --> 00:09:47.300
+a presentation about like here's a
+
+00:09:49.160 --> 00:09:49.280
+constraint, you're using Emacs for the
+
+00:09:54.660 --> 00:09:54.880
+course. But so it's that idea of sharing what
+
+00:09:56.880 --> 00:09:57.380
+you have, where you're at,
+
+00:10:00.220 --> 00:10:00.720
+will, I think by nature,
+
+00:10:03.360 --> 00:10:03.860
+move the entire queue of people,
+
+00:10:04.940 --> 00:10:05.380
+like they don't really exist.
+
+00:10:06.380 --> 00:10:06.680
+I mean, they do, but they don't.
+
+00:10:08.600 --> 00:10:09.100
+Behind you, it'll help move them together
+
+00:10:10.320 --> 00:10:10.820
+forward just a little bit.
+
+00:10:13.440 --> 00:10:13.940
+And maybe we all move the condition together.
+
+00:10:17.760 --> 00:10:18.240
+So It's not a only 1 person kind of thing.
+
+00:10:22.120 --> 00:10:22.540
+It's a mindset of improving shared
+
+00:10:22.540 --> 00:10:23.040
+understanding.
+
+00:10:26.520 --> 00:10:26.640
+[Speaker 0]: Exactly, and I'd like to come back on
+
+00:10:28.180 --> 00:10:28.680
+something that you mentioned in your answer,
+
+00:10:30.940 --> 00:10:31.440
+because it's, you know,
+
+00:10:33.060 --> 00:10:33.460
+what the person asking the question
+
+00:10:35.240 --> 00:10:35.740
+mentioned, 30 years of advance,
+
+00:10:36.620 --> 00:10:36.860
+basically, on starting Emacs.
+
+00:10:37.900 --> 00:10:38.400
+You know, that's a lot of time,
+
+00:10:40.600 --> 00:10:41.020
+And you tend to equate this to a massive gap
+
+00:10:42.440 --> 00:10:42.940
+in terms of skills between the 2 people.
+
+00:10:47.600 --> 00:10:47.840
+And whilst it's obvious that would be a gap
+
+00:10:50.280 --> 00:10:50.460
+of skills. You know, I find that learning in
+
+00:10:54.960 --> 00:10:55.460
+terms of pedagogy works best when the person
+
+00:10:58.180 --> 00:10:58.320
+doing the teaching is very close in terms of
+
+00:11:00.380 --> 00:11:00.880
+skill levels to the person being taught.
+
+00:11:02.620 --> 00:11:03.120
+Why is it the case? It's because it's much
+
+00:11:05.660 --> 00:11:05.800
+fresher in their memory what are the
+
+00:11:08.100 --> 00:11:08.300
+different elements that they have to go
+
+00:11:09.440 --> 00:11:09.940
+through to acquire a particular skill.
+
+00:11:12.440 --> 00:11:12.940
+To go a little bit into the theory,
+
+00:11:14.640 --> 00:11:15.060
+I'm not sure if you're familiar with Vygotsky
+
+00:11:16.380 --> 00:11:16.860
+or at least the I plus 1.
+
+00:11:17.640 --> 00:11:17.860
+Are you familiar with this,
+
+00:11:20.540 --> 00:11:21.040
+[Speaker 1]: I am not, go on.
+
+00:11:22.600 --> 00:11:23.000
+[Speaker 0]: Jeremy? So I used to be a teacher before,
+
+00:11:24.520 --> 00:11:24.960
+and it's 1 of the things they taught us.
+
+00:11:26.920 --> 00:11:27.340
+It's about the fact that when you are trying
+
+00:11:28.900 --> 00:11:29.400
+to make someone acquire a skill,
+
+00:11:31.840 --> 00:11:32.340
+I represents the current knowledge,
+
+00:11:34.960 --> 00:11:35.160
+and plus 1 is the thing that you should be
+
+00:11:38.920 --> 00:11:39.060
+teaching them and the theory behind it is
+
+00:11:41.820 --> 00:11:42.040
+that it's much easier to teach someone to
+
+00:11:44.260 --> 00:11:44.500
+teach something to someone when they only
+
+00:11:46.100 --> 00:11:46.460
+have to focus on plus 1 i.e.
+
+00:11:48.460 --> 00:11:48.900
+Something that is very close nearby to them
+
+00:11:50.580 --> 00:11:50.840
+If you go with something that is I plus 2,
+
+00:11:53.240 --> 00:11:53.740
+I plus 3, or god forbid I plus 10,
+
+00:11:55.760 --> 00:11:55.960
+it's going to be much harder for them to get
+
+00:11:58.100 --> 00:11:58.360
+to the understanding because the distance is
+
+00:12:01.720 --> 00:12:01.960
+much greater. And that's why I think
+
+00:12:05.000 --> 00:12:05.320
+mentoring can be taken in 2 ways.
+
+00:12:07.740 --> 00:12:07.860
+It could be a mentor who's merely ahead of
+
+00:12:10.380 --> 00:12:10.760
+you by plus 1, or it could be a mentor that
+
+00:12:12.040 --> 00:12:12.440
+is ahead of you by plus 10,
+
+00:12:14.380 --> 00:12:14.640
+but who has the understanding of what plus 1,
+
+00:12:15.800 --> 00:12:16.300
+plus 2, and plus 3 is.
+
+00:12:22.680 --> 00:12:23.160
+[Speaker 1]: Yeah, and it can be very challenging to
+
+00:12:27.400 --> 00:12:27.540
+unwind that. I know if we think about all of
+
+00:12:33.540 --> 00:12:33.740
+our hands or input methods have a memory of
+
+00:12:35.920 --> 00:12:36.120
+something that I honestly couldn't tell you
+
+00:12:38.440 --> 00:12:38.940
+what it is. Right? Like,
+
+00:12:40.240 --> 00:12:40.740
+I know how to do it on a keyboard,
+
+00:12:43.480 --> 00:12:43.980
+right? We've internalized so much.
+
+00:12:47.900 --> 00:12:48.040
+And so, yeah, how to walk backward is a
+
+00:12:51.940 --> 00:12:52.200
+distinct challenge and being curious with
+
+00:12:55.600 --> 00:12:56.100
+them and close to them and not asking,
+
+00:13:00.300 --> 00:13:00.800
+trying to diffuse questions and not ask like
+
+00:13:03.120 --> 00:13:03.620
+leading, not overly leading.
+
+00:13:09.280 --> 00:13:09.780
+An example, early on in my mentoring career,
+
+00:13:11.260 --> 00:13:11.760
+I was working in a community project,
+
+00:13:14.280 --> 00:13:14.480
+and I really wanted to go in and say to
+
+00:13:18.000 --> 00:13:18.500
+everybody, why do we suck at sharing code?
+
+00:13:21.020 --> 00:13:21.520
+But instead I said, wait a minute,
+
+00:13:24.880 --> 00:13:25.080
+what would be the question I could ask the
+
+00:13:27.680 --> 00:13:28.180
+group in which I could then ask my question?
+
+00:13:30.320 --> 00:13:30.720
+So instead I went into the group and I said,
+
+00:13:32.560 --> 00:13:33.060
+how are we doing about sharing code?
+
+00:13:37.120 --> 00:13:37.620
+And collectively, we were able to establish
+
+00:13:39.200 --> 00:13:39.700
+we didn't feel very good about it.
+
+00:13:42.740 --> 00:13:43.240
+And that conversation now 9 years ago,
+
+00:13:47.020 --> 00:13:47.300
+helped move a process along for the last,
+
+00:13:50.220 --> 00:13:50.380
+like it gave it energy for 9 years of how
+
+00:13:51.560 --> 00:13:52.060
+we're sharing and how we're approaching
+
+00:13:58.260 --> 00:13:58.760
+stuff. So yeah, the curious questions are
+
+00:14:00.060 --> 00:14:00.560
+super helpful.
+
+00:14:04.440 --> 00:14:04.940
+[Speaker 0]: All right, lovely way to finish this point.
+
+00:14:06.940 --> 00:14:07.200
+We have about 10 more minutes so I'm glad
+
+00:14:08.600 --> 00:14:08.800
+that we have a little bit of extra time to
+
+00:14:10.640 --> 00:14:10.920
+answer the questions because we have a little
+
+00:14:13.740 --> 00:14:13.940
+more. All right, I'm gonna switch to the next
+
+00:14:15.160 --> 00:14:15.480
+question we can come back to people reacting
+
+00:14:16.720 --> 00:14:17.220
+to what you just said a little bit later.
+
+00:14:17.440 --> 00:14:17.640
+[Speaker 2]: Sure.
+
+00:14:20.640 --> 00:14:20.860
+[Speaker 0]: All right, have you encountered anyone that
+
+00:14:23.760 --> 00:14:24.000
+are being negative about the fact that you're
+
+00:14:26.400 --> 00:14:26.600
+using Emacs, assuming that they just don't
+
+00:14:28.740 --> 00:14:28.940
+know or have misconceptions about Emacs and
+
+00:14:30.340 --> 00:14:30.700
+nothing malicious? If so,
+
+00:14:32.220 --> 00:14:32.720
+how do you handle these kinds of people?
+
+00:14:40.640 --> 00:14:40.840
+[Speaker 1]: Sure, So at work, I get a gentle elbowing of
+
+00:14:42.720 --> 00:14:43.220
+like, oh, Jeremy's going to talk about Emacs
+
+00:14:45.900 --> 00:14:46.400
+again. So it's not entirely...
+
+00:14:50.600 --> 00:14:51.100
+Maybe it's a little dismissive,
+
+00:14:56.840 --> 00:14:57.340
+but I don't actually care because like it's
+
+00:15:00.160 --> 00:15:00.240
+like being, I don't know,
+
+00:15:02.360 --> 00:15:02.480
+it's like being made fun of for using a
+
+00:15:03.560 --> 00:15:04.060
+particular type of pen.
+
+00:15:05.680 --> 00:15:06.180
+Like goal is to write something,
+
+00:15:09.080 --> 00:15:09.580
+right? And I'm using a pen that gives me joy.
+
+00:15:11.740 --> 00:15:12.240
+When I talk with my mentees,
+
+00:15:14.240 --> 00:15:14.440
+like I want to meet them exactly where
+
+00:15:16.980 --> 00:15:17.200
+they're at with their code and like what
+
+00:15:20.860 --> 00:15:21.260
+they're comfortable with and help them remove
+
+00:15:23.100 --> 00:15:23.600
+any of that potential like inadequacy,
+
+00:15:27.800 --> 00:15:27.980
+sense of inadequacy or imposter syndrome or
+
+00:15:32.980 --> 00:15:33.480
+any of those things because The goal is to,
+
+00:15:36.380 --> 00:15:36.880
+for me, to be better at computering.
+
+00:15:39.800 --> 00:15:40.300
+Like hop on my computer.
+
+00:15:45.060 --> 00:15:45.220
+I want to be able to use it at a speed of
+
+00:15:47.680 --> 00:15:47.800
+thought that doesn't introduce a lot of
+
+00:15:50.660 --> 00:15:51.160
+friction. Another speaker talked about that
+
+00:15:54.000 --> 00:15:54.200
+using HyperBowl and a couple of plugins to
+
+00:15:55.260 --> 00:15:55.760
+write stream of consciousness.
+
+00:15:57.980 --> 00:15:58.480
+And that was an important consideration.
+
+00:16:01.060 --> 00:16:01.380
+I want my text editor to flow with me.
+
+00:16:02.160 --> 00:16:02.420
+And so I'm like, well,
+
+00:16:03.560 --> 00:16:04.060
+Emacs flows with me smooth.
+
+00:16:08.220 --> 00:16:08.720
+Like you can deride it all you want.
+
+00:16:09.960 --> 00:16:10.360
+It doesn't thread very well,
+
+00:16:12.080 --> 00:16:12.580
+but it's just me on this machine.
+
+00:16:14.120 --> 00:16:14.440
+I don't need it to overly thread,
+
+00:16:15.720 --> 00:16:16.220
+at least for my use cases.
+
+00:16:22.340 --> 00:16:22.600
+[Speaker 0]: Yeah, I can only agree 100% with what you've
+
+00:16:25.800 --> 00:16:26.300
+just said. And it's very easy to dismiss
+
+00:16:28.860 --> 00:16:29.160
+stuff like Vim or Emacs based on the very
+
+00:16:31.260 --> 00:16:31.760
+trite sentences that everyone use.
+
+00:16:32.440 --> 00:16:32.640
+But at the end of the day,
+
+00:16:33.540 --> 00:16:34.040
+I really like what you said.
+
+00:16:36.280 --> 00:16:36.780
+Those are just pencil that we're using to
+
+00:16:39.000 --> 00:16:39.280
+express ourselves. And we're doing something
+
+00:16:41.820 --> 00:16:42.080
+a little more fancy than just writing words
+
+00:16:43.680 --> 00:16:44.180
+on a page. But ultimately,
+
+00:16:46.480 --> 00:16:46.880
+It's just text at the very bottom.
+
+00:16:48.560 --> 00:16:49.060
+So whatever helps us write this test,
+
+00:16:50.540 --> 00:16:51.040
+this text more easily,
+
+00:16:52.960 --> 00:16:53.460
+you know, it's always good.
+
+00:16:56.680 --> 00:16:56.980
+Yeah. All right. Moving on to the next
+
+00:16:59.360 --> 00:16:59.820
+question. I love the attitudes and worldview
+
+00:17:02.980 --> 00:17:03.160
+that infuse your blog post and your talk this
+
+00:17:05.400 --> 00:17:05.900
+weekend. Learn something every week.
+
+00:17:08.400 --> 00:17:08.680
+It's cumulative. English class was the most
+
+00:17:11.319 --> 00:17:11.520
+important. What other advice do you have and
+
+00:17:13.680 --> 00:17:13.859
+how is it generalizable to those of us who
+
+00:17:14.440 --> 00:17:14.940
+are not devs?
+
+00:17:26.280 --> 00:17:26.780
+[Speaker 1]: Sure. So I think 1 of the really big changes
+
+00:17:29.140 --> 00:17:29.320
+for me, and I talked about this in the
+
+00:17:34.700 --> 00:17:35.200
+writing Q&A, is switching my blog from a
+
+00:17:38.160 --> 00:17:38.480
+topical 1 about role-playing games and board
+
+00:17:43.320 --> 00:17:43.480
+games into anything that I think I want to
+
+00:17:47.220 --> 00:17:47.440
+write. And that shift happened about the time
+
+00:17:50.380 --> 00:17:50.560
+that I was really exploring using Emacs for
+
+00:17:54.060 --> 00:17:54.560
+writing. And so previously I had,
+
+00:17:57.860 --> 00:17:58.360
+I would write blog posts in Markdown using,
+
+00:18:00.560 --> 00:18:01.060
+or I would write it in the web interface.
+
+00:18:06.820 --> 00:18:07.060
+And getting to the point where my writing was
+
+00:18:08.480 --> 00:18:08.980
+the same as my coding,
+
+00:18:12.040 --> 00:18:12.540
+was the same as my RSS consumption,
+
+00:18:15.060 --> 00:18:15.560
+was the same of a lot of these things,
+
+00:18:21.260 --> 00:18:21.560
+freed up my general interests so that they
+
+00:18:23.860 --> 00:18:24.360
+all can kind of play in that space.
+
+00:18:27.660 --> 00:18:27.940
+So and that's the, I think,
+
+00:18:33.080 --> 00:18:33.540
+Feynman said, like, his notes are his
+
+00:18:35.860 --> 00:18:36.360
+thoughts. It's not him thinking,
+
+00:18:38.480 --> 00:18:38.980
+I mean, they are him thinking as well.
+
+00:18:40.680 --> 00:18:41.180
+So it's really framing it that way.
+
+00:18:44.180 --> 00:18:44.680
+And then for not devs,
+
+00:18:49.060 --> 00:18:49.240
+My daughter has been doing screenwriting and
+
+00:18:53.180 --> 00:18:53.480
+she just had her school license for the tool
+
+00:18:54.720 --> 00:18:55.220
+that they use for writing screenplays.
+
+00:18:57.400 --> 00:18:57.660
+She had to pay for it on her own.
+
+00:18:59.540 --> 00:18:59.680
+And I was like, hey, let's take a look at
+
+00:19:01.000 --> 00:19:01.500
+Emacs. There's a package for this.
+
+00:19:03.320 --> 00:19:03.820
+Maybe it makes sense to you.
+
+00:19:09.520 --> 00:19:09.720
+So I think the, really to summarize it is
+
+00:19:12.280 --> 00:19:12.780
+like the broad curiosity in like,
+
+00:19:14.320 --> 00:19:14.820
+I have a liberal arts degree,
+
+00:19:20.920 --> 00:19:21.420
+I have barely any computer science classwork
+
+00:19:23.940 --> 00:19:24.400
+practice. I have a lot of practical
+
+00:19:26.200 --> 00:19:26.700
+experience doing software development,
+
+00:19:28.320 --> 00:19:28.820
+but theory is minimal.
+
+00:19:32.400 --> 00:19:32.520
+Instead, I look to things like Lord of the
+
+00:19:35.340 --> 00:19:35.840
+Rings or role-playing games or poetry or
+
+00:19:40.520 --> 00:19:41.020
+history or whatever and be curious and Then
+
+00:19:47.260 --> 00:19:47.760
+be playful The introduction of git locally
+
+00:19:51.060 --> 00:19:51.340
+where I can just have a Git repo means my
+
+00:19:56.960 --> 00:19:57.340
+text is recoverable. I don't,
+
+00:19:59.060 --> 00:19:59.320
+I can play. I'll just break it,
+
+00:20:00.320 --> 00:20:00.800
+I'll change it. It's software,
+
+00:20:02.860 --> 00:20:03.360
+let it be soft. It's not hard.
+
+00:20:05.740 --> 00:20:06.100
+It can be hard to work with it,
+
+00:20:08.080 --> 00:20:08.520
+but let it be soft. Let it be pruned,
+
+00:20:09.780 --> 00:20:10.120
+let it go away, let it die,
+
+00:20:11.200 --> 00:20:11.700
+let it come back.
+
+00:20:16.360 --> 00:20:16.800
+[Speaker 0]: Yeah, That's a lovely attitude to have.
+
+00:20:20.980 --> 00:20:21.160
+I mean, I've already talked about my past as
+
+00:20:23.680 --> 00:20:23.860
+an English major in 1 of the EmacsConf talks,
+
+00:20:26.520 --> 00:20:26.780
+but just like you, I don't have a comp sci
+
+00:20:30.140 --> 00:20:30.200
+education. I just started with needing a
+
+00:20:32.120 --> 00:20:32.620
+better pen, and that was about 10 years ago.
+
+00:20:36.660 --> 00:20:37.020
+And now I find myself hosting Emacs Cons,
+
+00:20:38.760 --> 00:20:39.140
+but it was a very incremental process,
+
+00:20:40.160 --> 00:20:40.660
+a very cumulative process,
+
+00:20:42.720 --> 00:20:43.220
+to reuse the word that we used before.
+
+00:20:48.480 --> 00:20:48.740
+And What I also like about people outside of
+
+00:20:49.640 --> 00:20:50.140
+CompSight using Emacs,
+
+00:20:53.300 --> 00:20:53.480
+and we've got plenty of such examples in the
+
+00:20:54.940 --> 00:20:55.320
+presentations we've had this year,
+
+00:20:57.720 --> 00:20:57.940
+but also last year, is that you get so many
+
+00:21:00.540 --> 00:21:00.920
+different windows into how people are using
+
+00:21:03.400 --> 00:21:03.480
+Emacs, and it kind of harks back to what I
+
+00:21:06.340 --> 00:21:06.560
+was saying before about Emacs being a
+
+00:21:08.380 --> 00:21:08.880
+platform with many horizontal packages
+
+00:21:10.560 --> 00:21:11.060
+permitting any kind of workflow imaginable
+
+00:21:13.580 --> 00:21:14.080
+and some people are going to gravitate
+
+00:21:16.280 --> 00:21:16.640
+towards old mode. I think it was your sister
+
+00:21:18.520 --> 00:21:19.020
+that you mentioned that was looking into
+
+00:21:20.760 --> 00:21:21.260
+packages for writing screenplays.
+
+00:21:23.220 --> 00:21:23.520
+Well, we've got such a thing in Emacs.
+
+00:21:26.260 --> 00:21:26.760
+I mean, a screenplay is just a monospace font
+
+00:21:27.900 --> 00:21:28.400
+with some fancy formatting.
+
+00:21:29.300 --> 00:21:29.800
+It's not very complicated.
+
+00:21:32.460 --> 00:21:32.960
+And if you can get behind,
+
+00:21:36.280 --> 00:21:36.720
+you know, someone using such a stable format
+
+00:21:38.480 --> 00:21:38.940
+for writing screenplay with many rules,
+
+00:21:40.680 --> 00:21:40.840
+but ultimately all the screenplay look the
+
+00:21:42.520 --> 00:21:42.780
+same, well, Emacs is kind of just the same.
+
+00:21:45.060 --> 00:21:45.480
+It's about standardizing the way you edit
+
+00:21:47.760 --> 00:21:48.000
+text. So I think your sister was already half
+
+00:21:51.420 --> 00:21:51.760
+[Speaker 1]: Yeah, it was my it was my my daughter.
+
+00:21:52.720 --> 00:21:52.840
+I'm trying to sell her on.
+
+00:21:53.320 --> 00:21:53.800
+[Speaker 0]: on the idea. Oh, no, sorry.
+
+00:21:56.200 --> 00:21:56.640
+[Speaker 1]: Yeah, she also picked up programming just 1
+
+00:21:58.140 --> 00:21:58.640
+day and was like, I forget that.
+
+00:22:01.360 --> 00:22:01.860
+Like she was playing with a stage manager
+
+00:22:03.420 --> 00:22:03.580
+programming thing or like have a little
+
+00:22:04.640 --> 00:22:05.140
+avatars moving around.
+
+00:22:11.280 --> 00:22:11.480
+And so she's got a predisposition to like the
+
+00:22:15.620 --> 00:22:16.020
+craft of things. And I think that's another
+
+00:22:18.320 --> 00:22:18.820
+aspect is like, I'm not,
+
+00:22:21.080 --> 00:22:21.580
+I mean, I appreciate science.
+
+00:22:23.040 --> 00:22:23.540
+I'm here for a scientific approach,
+
+00:22:27.940 --> 00:22:28.440
+but I also Really enjoy the craft of things
+
+00:22:32.500 --> 00:22:33.000
+Playing with it Like this is my playground.
+
+00:22:36.000 --> 00:22:36.180
+I love kind of hacking on it and looking at
+
+00:22:39.160 --> 00:22:39.360
+packages and Seeing how I might use it pick
+
+00:22:42.120 --> 00:22:42.340
+it up for a little bit and then maybe I
+
+00:22:42.880 --> 00:22:43.380
+forget about it
+
+00:22:47.940 --> 00:22:48.440
+[Speaker 0]: Right, well Jeremy I think that was Lovely
+
+00:22:49.860 --> 00:22:50.180
+finish. Oh, sorry plasma.
+
+00:22:51.380 --> 00:22:51.760
+Oh, sorry. I thought he was someone on Mumble
+
+00:22:54.640 --> 00:22:54.780
+talking to me. I'm actually going to have to
+
+00:22:56.200 --> 00:22:56.600
+be sorry because we only have about 50
+
+00:22:58.000 --> 00:22:58.320
+seconds until we move on to the next talk.
+
+00:22:59.600 --> 00:23:00.040
+But please, Plasma Strike,
+
+00:23:01.120 --> 00:23:01.560
+If you want to ask your question to Jeremy,
+
+00:23:02.720 --> 00:23:03.220
+by all means, stay in the room.
+
+00:23:04.120 --> 00:23:04.620
+[Speaker 1]: Yep, I'll be here.
+
+00:23:07.640 --> 00:23:07.900
+[Speaker 0]: And we'll be recording all of this and we'll
+
+00:23:09.440 --> 00:23:09.940
+put this later on the talk page.
+
+00:23:12.440 --> 00:23:12.560
+So Jeremy, I'll have to say bye now because I
+
+00:23:13.660 --> 00:23:14.160
+need to prepare the next room.
+
+00:23:16.320 --> 00:23:16.440
+But It was lovely talking with you and thank
+
+00:23:17.040 --> 00:23:17.540
+you for all your answers.
+
+00:23:19.040 --> 00:23:19.540
+[Speaker 1]: Absolutely. Thank you.
+
+00:23:21.220 --> 00:23:21.720
+[Speaker 0]: Bye-bye. Bye.
+
+NOTE Start of section to review
+
+00:23:26.400 --> 00:23:26.580
+[Speaker 2]: See you. Hello. One of the things with Emacs is
+
+00:23:28.740 --> 00:23:28.900
+it's not... It's like when you change the
+
+00:23:30.860 --> 00:23:31.260
+file management, you just change very,
+
+00:23:33.480 --> 00:23:33.980
+very small amounts of what exactly you need,
+
+00:23:38.040 --> 00:23:38.360
+you want to change. Like you go from text
+
+00:23:43.440 --> 00:23:43.860
+editing to your file manager,
+
+00:23:44.720 --> 00:23:45.220
+you're not changing your theme,
+
+00:23:46.680 --> 00:23:47.180
+you're not changing your font.
+
+00:23:49.940 --> 00:23:50.060
+[Speaker 3]: And you
+
+00:23:52.360 --> 00:23:52.500
+[Speaker 2]: use your bookmarks, you use your bookmarks in
+
+00:23:54.340 --> 00:23:54.840
+your emails, you use your bookmarks in your
+
+00:23:59.380 --> 00:23:59.880
+org-mod documents, you use it in E-dub,
+
+00:24:02.460 --> 00:24:02.960
+W-W buffers if you use that,
+
+00:24:06.760 --> 00:24:06.940
+but it's just the, Yeah,
+
+00:24:10.080 --> 00:24:10.580
+it's just the least amount of Incremental
+
+00:24:10.940 --> 00:24:11.440
+changes
+
+00:24:14.620 --> 00:24:14.900
+[Speaker 1]: yeah, you're when you were talking about like
+
+00:24:18.480 --> 00:24:18.980
+the Reducing friction like turn off editing
+
+00:24:22.280 --> 00:24:22.480
+or not editing, but auto correct while you're
+
+00:24:25.440 --> 00:24:25.940
+typing, it's absolutely spot on.
+
+00:24:29.800 --> 00:24:30.300
+You're wanting to get whatever is flowing
+
+00:24:31.280 --> 00:24:31.720
+needs to keep flowing,
+
+00:24:33.700 --> 00:24:34.200
+like as a programmer or as a creative,
+
+00:24:38.100 --> 00:24:38.600
+anytime I can hit flow is my goal.
+
+00:24:42.240 --> 00:24:42.740
+And so paying attention to what removes flow
+
+00:24:48.480 --> 00:24:48.980
+or hinders it or saps energy and that unified
+
+00:24:52.800 --> 00:24:53.080
+environment of Emacs is really helpful to
+
+00:24:57.260 --> 00:24:57.760
+maintain that. So yeah.
+
+00:25:02.300 --> 00:25:02.580
+[Speaker 2]: I think it's about speed and then once after
+
+00:25:04.040 --> 00:25:04.540
+you get some of that, then you're like,
+
+00:25:06.420 --> 00:25:06.920
+well, yeah, it's important,
+
+00:25:09.320 --> 00:25:09.820
+but this is like the last thing I care about.
+
+00:25:14.280 --> 00:25:14.780
+[Speaker 1]: Right. Speed is all like,
+
+00:25:19.700 --> 00:25:20.200
+Yeah, there's a quote that I love called,
+
+00:25:22.940 --> 00:25:23.440
+I forget the author. It's,
+
+00:25:30.060 --> 00:25:30.260
+there is a connection between slowness and
+
+00:25:33.960 --> 00:25:34.460
+remembering and fastness and forgetting.
+
+00:25:39.680 --> 00:25:40.180
+And the slowness is an interesting,
+
+00:25:43.520 --> 00:25:43.840
+like it's, I am moving fast in Emacs because
+
+00:25:46.020 --> 00:25:46.520
+I've forgotten how I'm doing it.
+
+00:25:47.920 --> 00:25:48.420
+I just do it now, right?
+
+00:25:52.120 --> 00:25:52.360
+And then the slowness of like being in my
+
+00:25:57.540 --> 00:25:57.720
+thought and staying on that stream is where I
+
+00:26:01.700 --> 00:26:02.200
+want to be and ride whatever that pathway is.
+
+00:26:07.540 --> 00:26:07.680
+And a text editor is still hard to do that
+
+00:26:10.260 --> 00:26:10.520
+because if I were using a pen and paper it's
+
+00:26:11.600 --> 00:26:12.100
+more cumbersome to auto-edit.
+
+00:26:18.620 --> 00:26:18.800
+But I can't get it out without losing my
+
+00:26:21.180 --> 00:26:21.440
+thinking. And so I ended up having to type
+
+00:26:21.440 --> 00:26:21.940
+it.
+
+00:26:25.440 --> 00:26:25.640
+[Speaker 3]: Something I've been experimenting with is
+
+00:26:26.600 --> 00:26:27.100
+using, well, recording.
+
+00:26:29.440 --> 00:26:29.700
+Some other people are using dictation for
+
+00:26:31.760 --> 00:26:32.260
+this to just get the blur out of the ideas
+
+00:26:35.280 --> 00:26:35.500
+and you can go back and glean some of that
+
+00:26:36.200 --> 00:26:36.700
+stuff out of it.
+
+00:26:41.320 --> 00:26:41.680
+[Speaker 1]: Yeah, what I will do when I'm capturing like
+
+00:26:44.760 --> 00:26:45.260
+quotes or epigraphs is I will almost always
+
+00:26:47.760 --> 00:26:47.960
+turn on dictation because I got a book in 1
+
+00:26:52.020 --> 00:26:52.520
+hand. So I'm like, on goes the typing.
+
+00:26:56.640 --> 00:26:56.940
+And yeah, that is, there's a,
+
+00:26:59.900 --> 00:27:00.180
+I'm really thankful that that exists as well.
+
+00:27:01.260 --> 00:27:01.760
+Like my mother is blind.
+
+00:27:05.020 --> 00:27:05.520
+And so having that helps her and me
+
+00:27:08.560 --> 00:27:09.060
+communicate Through text because we're both
+
+00:27:12.900 --> 00:27:13.400
+able to appreciate it And use it in a way
+
+00:27:15.480 --> 00:27:15.980
+that is accessible for both of us
+
+00:27:19.120 --> 00:27:19.620
+[Speaker 3]: Go ahead
+
+00:27:23.100 --> 00:27:23.600
+[Speaker 2]: There's the L feet to package which will
+
+00:27:25.160 --> 00:27:25.200
+which will allow you to both of us.
+
+00:27:25.400 --> 00:27:25.440
+There's the ElfieTube package which will
+
+00:27:28.320 --> 00:27:28.820
+allow you to subscribe to a YouTube channel
+
+00:27:32.500 --> 00:27:33.000
+and then download the subtitles and give you
+
+00:27:36.760 --> 00:27:36.940
+remote control access to the MPV player to
+
+00:27:37.700 --> 00:27:38.200
+watch the YouTube thing.
+
+00:27:41.420 --> 00:27:41.920
+And considering you have a really big
+
+00:27:44.580 --> 00:27:44.680
+subtitle thing that you can click at the
+
+00:27:45.480 --> 00:27:45.660
+various different places,
+
+00:27:47.860 --> 00:27:48.280
+it's really surprising about how different
+
+00:27:49.300 --> 00:27:49.800
+that makes YouTube feel.
+
+00:27:50.680 --> 00:27:51.180
+[Speaker 1]: Yeah I've...
+
+00:27:54.140 --> 00:27:54.340
+[Speaker 2]: And then on top of that about how much like
+
+00:27:57.660 --> 00:27:57.800
+if you've used it why would you never have
+
+00:27:59.160 --> 00:27:59.660
+thought about that before because it's...
+
+00:28:00.720 --> 00:28:01.220
+Right. It's even better.
+
+00:28:04.840 --> 00:28:05.340
+[Speaker 1]: Right absolutely. Sasha?
+
+00:28:10.080 --> 00:28:10.440
+[Speaker 3]: Oh I would say I do use the caption slot also
+
+00:28:11.580 --> 00:28:12.040
+when I'm skimming through stuff for Emacs
+
+00:28:13.740 --> 00:28:14.240
+News. But for books specifically,
+
+00:28:18.420 --> 00:28:18.600
+I often use Google Lens to just capture the
+
+00:28:21.900 --> 00:28:22.200
+text and copy it so that I don't have to deal
+
+00:28:24.140 --> 00:28:24.640
+with recognition errors or whatever.
+
+00:28:25.760 --> 00:28:26.260
+really useful.
+
+00:28:31.780 --> 00:28:32.280
+[Speaker 1]: It's just So 1 of my hobbies is role-playing
+
+00:28:35.980 --> 00:28:36.100
+games and the tabular data that is in the
+
+00:28:38.940 --> 00:28:39.440
+role-playing books is never in correct,
+
+00:28:43.160 --> 00:28:43.380
+like copy it out. And so I was like this is
+
+00:28:46.260 --> 00:28:46.680
+really annoying And I ended up taking
+
+00:28:47.720 --> 00:28:48.220
+screenshots on my machine,
+
+00:28:50.280 --> 00:28:50.780
+running Tesseract to pipe it in,
+
+00:28:53.480 --> 00:28:53.980
+and then using Emacs to like edit it because
+
+00:28:57.940 --> 00:28:58.100
+Tesseract adheres to the column format that
+
+00:29:00.520 --> 00:29:00.680
+I'm looking for. And I'm really thankful that
+
+00:29:05.680 --> 00:29:06.100
+we're at a place where the OCR is in good
+
+00:29:09.720 --> 00:29:10.120
+shape. That's part of my day job is working
+
+00:29:14.180 --> 00:29:14.680
+on some old documents that OCR is good,
+
+00:29:18.100 --> 00:29:18.600
+but not great because of like their 19th
+
+00:29:23.720 --> 00:29:23.920
+century documents, but having that ability to
+
+00:29:28.080 --> 00:29:28.220
+me is really powerful because we're gonna be
+
+00:29:32.580 --> 00:29:32.900
+able to share that text And also then once
+
+00:29:35.860 --> 00:29:36.360
+it's understood in what it's ASCII or UTF-8
+
+00:29:39.000 --> 00:29:39.500
+encoding is, it can be translated as well.
+
+00:29:41.960 --> 00:29:42.460
+So we can make it even more generally
+
+00:29:46.480 --> 00:29:46.720
+available, which I think is a nice thing to
+
+00:29:46.720 --> 00:29:47.220
+have.
+
+00:29:51.820 --> 00:29:52.320
+[Speaker 3]: I wanted to go back to the topic of mentoring
+
+00:29:54.000 --> 00:29:54.240
+since that's something that I'm very much
+
+00:29:55.940 --> 00:29:56.400
+interested in figuring out how to facilitate
+
+00:29:56.980 --> 00:29:57.480
+in the Emacs community.
+
+00:30:00.520 --> 00:30:00.720
+Other people have been working on kind of
+
+00:30:03.440 --> 00:30:03.900
+remote mentoring initiatives with Emacs
+
+00:30:07.640 --> 00:30:07.860
+Buddy. And there are meetups as well that
+
+00:30:09.140 --> 00:30:09.340
+kind of get that sense of like,
+
+00:30:10.680 --> 00:30:10.840
+you know, what people are doing things and
+
+00:30:12.040 --> 00:30:12.500
+then somebody can look over their shoulder
+
+00:30:14.060 --> 00:30:14.260
+and say, hey, have you ever thought about
+
+00:30:15.060 --> 00:30:15.560
+[Speaker 1]: Right.
+
+00:30:17.780 --> 00:30:18.040
+[Speaker 3]: this? Is there any things that you can can
+
+00:30:20.320 --> 00:30:20.820
+suggest specifically in the context of this
+
+00:30:23.180 --> 00:30:23.680
+kind of mentoring over a distance?
+
+00:30:25.680 --> 00:30:26.180
+Any chance you've thought about it?
+
+00:30:30.800 --> 00:30:30.920
+[Speaker 1]: I'm on the Emacs buddy repo and I've had a
+
+00:30:32.600 --> 00:30:33.100
+handful of people reach out to me.
+
+00:30:37.700 --> 00:30:37.920
+Most often we start with email and every so
+
+00:30:38.980 --> 00:30:39.320
+often it'll be like, hey,
+
+00:30:44.340 --> 00:30:44.840
+let's hop on some kind of video or audio,
+
+00:30:47.320 --> 00:30:47.820
+even just done phone calls.
+
+00:30:53.140 --> 00:30:53.480
+Yeah, I haven't done any of the like shared
+
+00:30:57.220 --> 00:30:57.500
+buffer stuff. I know like at work we have
+
+00:30:59.700 --> 00:31:00.200
+replit where we can use that.
+
+00:31:02.500 --> 00:31:03.000
+Seeing the presentation on CDRT,
+
+00:31:04.440 --> 00:31:04.940
+I was like, oh, that's really great.
+
+00:31:10.760 --> 00:31:11.140
+But what I found is being able to see
+
+00:31:15.280 --> 00:31:15.720
+someone, I don't get to see them typing,
+
+00:31:17.640 --> 00:31:17.840
+but I get to see the results of what they're
+
+00:31:18.840 --> 00:31:19.340
+doing on the computer.
+
+00:31:22.840 --> 00:31:23.040
+You know paying attention to that is the big
+
+00:31:26.040 --> 00:31:26.540
+1 to help them think of a different way.
+
+00:31:28.940 --> 00:31:29.160
+Depending on where they're at when they're
+
+00:31:32.960 --> 00:31:33.460
+writing if they are like at a pause point,
+
+00:31:35.160 --> 00:31:35.460
+if I'm at my best, I'll be like,
+
+00:31:37.920 --> 00:31:38.360
+so what are you thinking?
+
+00:31:40.640 --> 00:31:41.140
+Where are you stuck? Cause maybe they're
+
+00:31:43.040 --> 00:31:43.280
+trying to navigate somewhere and that starts
+
+00:31:46.500 --> 00:31:46.720
+to create a point for a conversation of like,
+
+00:31:48.280 --> 00:31:48.780
+how do I go from here to there?
+
+00:31:57.340 --> 00:31:57.520
+And so it's looking for those moments is
+
+00:31:58.840 --> 00:31:59.340
+where I try to operate.
+
+00:32:03.740 --> 00:32:04.240
+[Speaker 3]: And sometimes, you know,
+
+00:32:05.380 --> 00:32:05.600
+so there's kind of like,
+
+00:32:06.760 --> 00:32:07.120
+how do you go from here to there?
+
+00:32:08.000 --> 00:32:08.500
+And sometimes even the,
+
+00:32:12.380 --> 00:32:12.540
+what there should I be going for is a
+
+00:32:15.060 --> 00:32:15.160
+challenge, right? Because especially with
+
+00:32:16.480 --> 00:32:16.980
+Emacs newbies, they might not necessarily
+
+00:32:19.340 --> 00:32:19.540
+know what's possible or what's nearby in
+
+00:32:21.200 --> 00:32:21.700
+terms of what their current knowledge is.
+
+00:32:23.760 --> 00:32:24.120
+And that's an interesting thing to map out.
+
+00:32:25.960 --> 00:32:26.400
+Is that something that you've thought about
+
+00:32:29.020 --> 00:32:29.280
+and as you're conversing with all these
+
+00:32:29.280 --> 00:32:29.780
+people?
+
+00:32:37.680 --> 00:32:37.840
+[Speaker 1]: The main thing, the main function that I do
+
+00:32:38.720 --> 00:32:38.940
+talk, I talked about this,
+
+00:32:41.240 --> 00:32:41.740
+I think in the, I did in the talk where it's,
+
+00:32:46.320 --> 00:32:46.660
+I need to jump between the test and the
+
+00:32:50.900 --> 00:32:51.400
+implementation. And since 2005,
+
+00:32:56.200 --> 00:32:56.480
+I've had that. And I watch folks not have
+
+00:32:57.880 --> 00:32:58.100
+that. I'm just like, Oh,
+
+00:33:00.380 --> 00:33:00.540
+my goodness, like there's a convention in the
+
+00:33:02.500 --> 00:33:02.720
+language we work in. Let's get that
+
+00:33:04.080 --> 00:33:04.580
+installed. Let's get it going.
+
+00:33:07.600 --> 00:33:07.840
+Like that's 1 thing, that's 1 access I know
+
+00:33:11.740 --> 00:33:11.880
+they're gonna go to. Another 1 is the jump to
+
+00:33:14.280 --> 00:33:14.600
+definition. And I've never gotten like C
+
+00:33:16.680 --> 00:33:16.960
+tags. I haven't really spent time on that,
+
+00:33:18.600 --> 00:33:19.100
+but with the advent of LSP,
+
+00:33:21.040 --> 00:33:21.540
+it works a lot better.
+
+00:33:24.520 --> 00:33:25.020
+And so I try to get people to use that.
+
+00:33:30.200 --> 00:33:30.640
+And what I've noticed weirdly is like VS
+
+00:33:34.200 --> 00:33:34.400
+code, it doesn't work as well as I would have
+
+00:33:36.340 --> 00:33:36.500
+thought. And there's lots of like errors and
+
+00:33:38.100 --> 00:33:38.560
+warnings popping up in the bottom corner.
+
+00:33:41.120 --> 00:33:41.280
+So I'm like, well, you gotta pay attention to
+
+00:33:45.640 --> 00:33:46.140
+that. But I try not to get into anybody's
+
+00:33:47.720 --> 00:33:48.120
+business about like, I'm like,
+
+00:33:48.900 --> 00:33:49.120
+maybe we could fix that.
+
+00:33:50.020 --> 00:33:50.280
+Maybe we can clean it up,
+
+00:33:51.740 --> 00:33:52.240
+but it's your, you know,
+
+00:33:54.440 --> 00:33:54.940
+it's your car you're driving.
+
+00:33:56.320 --> 00:33:56.760
+I'm just long for a ride.
+
+00:33:57.620 --> 00:33:58.120
+It's safe, we're fine.
+
+00:34:01.360 --> 00:34:01.860
+So yeah, that jumped to definition.
+
+00:34:07.940 --> 00:34:08.440
+And then the, I mean, search in project,
+
+00:34:10.080 --> 00:34:10.580
+like everybody understanding that.
+
+00:34:15.219 --> 00:34:15.380
+But I feel that the, like I mentioned in the
+
+00:34:17.980 --> 00:34:18.480
+talk, the advent of orderless is just huge.
+
+00:34:21.400 --> 00:34:21.659
+I did not realize how much I loved it because
+
+00:34:24.159 --> 00:34:24.480
+I don't have to think about things and can
+
+00:34:28.080 --> 00:34:28.580
+have slightly more forgiving default
+
+00:34:34.340 --> 00:34:34.840
+searches. Yeah, it's hard.
+
+00:34:39.159 --> 00:34:39.440
+The principles of organizing 10 things versus
+
+00:34:41.040 --> 00:34:41.540
+100 versus 1,000 versus 10,000
+
+00:34:44.440 --> 00:34:44.940
+are just, they're not the same.
+
+00:34:52.360 --> 00:34:52.540
+[Speaker 2]: A common hang up for, that would easily make
+
+00:34:54.320 --> 00:34:54.820
+you skip off of Emacs,
+
+00:35:00.920 --> 00:35:01.040
+Org Mode, Hyperbole is if you go into any of
+
+00:35:03.680 --> 00:35:04.040
+those with the mindset of I'm going to master
+
+00:35:05.080 --> 00:35:05.580
+it all before I use it.
+
+00:35:06.640 --> 00:35:07.140
+That's not going to work.
+
+00:35:13.660 --> 00:35:13.860
+[Speaker 1]: Absolutely. I was terrified of org mode when
+
+00:35:14.760 --> 00:35:15.060
+I started because I'm like,
+
+00:35:16.720 --> 00:35:17.040
+I don't need to organize my life.
+
+00:35:20.460 --> 00:35:20.960
+I need to like type. And then that,
+
+00:35:24.520 --> 00:35:25.020
+yes, incremental. What did I find helpful?
+
+00:35:28.580 --> 00:35:29.080
+[Speaker 2]: It's for the, for the Linux CLI toolbox,
+
+00:35:30.860 --> 00:35:31.360
+but you have to look at them as more of just,
+
+00:35:34.640 --> 00:35:35.140
+I have a whole bunch of tools available to me
+
+00:35:39.140 --> 00:35:39.360
+and I'll just pick them up as I have a
+
+00:35:42.480 --> 00:35:42.680
+problem and as I, and as the tool can be
+
+00:35:44.440 --> 00:35:44.940
+useful for this problem and incrementally.
+
+00:35:47.700 --> 00:35:48.200
+[Speaker 1]: Yeah. It's
+
+00:35:54.760 --> 00:35:55.080
+[Speaker 3]: actually, so, in fact,
+
+00:35:56.180 --> 00:35:56.400
+when when I'm mentoring people,
+
+00:35:58.440 --> 00:35:58.580
+I have to take a step back and say,
+
+00:36:00.520 --> 00:36:00.760
+OK, what are we with the note taking thing
+
+00:36:01.640 --> 00:36:02.140
+that you mentioned in your talk.
+
+00:36:03.120 --> 00:36:03.480
+How do you like to take notes?
+
+00:36:04.840 --> 00:36:05.140
+How do you like to keep track of the things
+
+00:36:06.480 --> 00:36:06.600
+that you want to work on when you have an
+
+00:36:07.540 --> 00:36:08.040
+idea? Where does it go?
+
+00:36:10.320 --> 00:36:10.820
+Because if you improve that practice,
+
+00:36:12.840 --> 00:36:13.180
+and especially if you can sneak some literate
+
+00:36:14.540 --> 00:36:15.040
+programming in without them really noticing,
+
+00:36:17.860 --> 00:36:18.160
+then it becomes the thing that they can use
+
+00:36:18.900 --> 00:36:19.400
+to learn more efficiently.
+
+00:36:23.200 --> 00:36:23.700
+[Speaker 1]: Yeah. I was presenting at,
+
+00:36:26.600 --> 00:36:27.100
+I wasn't presenting at this seminar,
+
+00:36:30.560 --> 00:36:30.920
+but I attended it and it was a crash course
+
+00:36:31.800 --> 00:36:32.300
+in command line tools.
+
+00:36:35.520 --> 00:36:36.020
+And I didn't, I mean, I went there to listen
+
+00:36:38.660 --> 00:36:38.800
+and there was a point where the people were
+
+00:36:40.560 --> 00:36:41.060
+like, I use this command line tool.
+
+00:36:42.360 --> 00:36:42.860
+I'm not a programmer, I'm a librarian,
+
+00:36:45.040 --> 00:36:45.060
+I'm an archivist. I use it,
+
+00:36:47.080 --> 00:36:47.580
+I'm like, great, I'm gonna remember this.
+
+00:36:49.640 --> 00:36:49.820
+And then I forget about it and I might use it
+
+00:36:54.340 --> 00:36:54.520
+6 months from now. And so I tried to
+
+00:36:56.880 --> 00:36:57.380
+encourage everybody, like come up with,
+
+00:37:00.580 --> 00:37:00.740
+like you have a degree in knowledge and
+
+00:37:02.320 --> 00:37:02.820
+information, management and organization,
+
+00:37:06.160 --> 00:37:06.660
+introspect, right? Spend some time on it.
+
+00:37:09.740 --> 00:37:10.240
+Think about what is a way that I can do this
+
+00:37:13.180 --> 00:37:13.360
+and ask questions to get to the point where
+
+00:37:18.960 --> 00:37:19.240
+you can create a discoverable inventory of
+
+00:37:22.500 --> 00:37:23.000
+the tools you've used and what that means.
+
+00:37:26.160 --> 00:37:26.660
+And my answer was, I use literate programming
+
+00:37:30.800 --> 00:37:31.300
+or I shove it in my bin directory in GitHub
+
+00:37:34.080 --> 00:37:34.300
+and like, I don't know if I'll remember it,
+
+00:37:35.860 --> 00:37:36.020
+but I can go there every now and then and be
+
+00:37:37.120 --> 00:37:37.620
+like, oh yeah, that command.
+
+00:37:44.220 --> 00:37:44.720
+So note taking is the most critical component
+
+00:37:46.620 --> 00:37:47.120
+of any number of work.
+
+00:37:51.960 --> 00:37:52.360
+[Speaker 3]: Sometimes I wonder if we can maybe
+
+00:37:54.000 --> 00:37:54.500
+externalize some of all this mentoring
+
+00:37:57.520 --> 00:37:57.720
+insight and kind of like this choose your own
+
+00:37:59.700 --> 00:37:59.920
+adventure thing, where the person says,
+
+00:38:01.200 --> 00:38:01.700
+OK, this is what I got at the moment.
+
+00:38:03.460 --> 00:38:03.960
+And then through a series of diagnostic
+
+00:38:05.740 --> 00:38:06.220
+questions, we can figure out what hurts,
+
+00:38:08.040 --> 00:38:08.220
+right? Where is the thing that they would
+
+00:38:08.980 --> 00:38:09.240
+like to learn more about?
+
+00:38:09.960 --> 00:38:10.460
+And then, okay, if that hurts,
+
+00:38:12.620 --> 00:38:13.120
+try this and keep that manageable.
+
+00:38:15.720 --> 00:38:15.880
+And if there's only a way to also be able to
+
+00:38:17.280 --> 00:38:17.720
+capture each person's state,
+
+00:38:19.360 --> 00:38:19.840
+the things that they know about and have
+
+00:38:20.980 --> 00:38:21.480
+absorbed into their habits.
+
+00:38:22.800 --> 00:38:23.200
+So you can say, right,
+
+00:38:25.440 --> 00:38:25.760
+you know, my recommendation for someone who's
+
+00:38:28.580 --> 00:38:28.940
+brand new to org is not the same as somebody
+
+00:38:30.060 --> 00:38:30.480
+who's like, okay, they've got their agendas
+
+00:38:31.400 --> 00:38:31.800
+and everything set up already.
+
+00:38:33.680 --> 00:38:34.180
+Just how do we represent that as like WISPs?
+
+00:38:39.520 --> 00:38:39.720
+[Speaker 1]: I've given up on trying to map that.
+
+00:38:43.180 --> 00:38:43.440
+I like the one-on-one conversations and
+
+00:38:47.480 --> 00:38:47.980
+discovery. And I think that's the part where
+
+00:38:51.980 --> 00:38:52.120
+you're looking at, you're asking about how do
+
+00:38:55.920 --> 00:38:56.320
+we make the process and like I heard,
+
+00:38:58.860 --> 00:38:59.040
+like how do we help equip those who want to
+
+00:39:01.560 --> 00:39:01.960
+mentor as well, right?
+
+00:39:05.900 --> 00:39:05.970
+Making that, reducing the barrier in a way.
+
+00:39:06.040 --> 00:39:06.180
+[Speaker 2]: I don't
+
+00:39:08.240 --> 00:39:08.740
+[Speaker 3]: know, I think what you said about enjoying
+
+00:39:10.440 --> 00:39:10.680
+the conversation and the fact that it is
+
+00:39:12.080 --> 00:39:12.580
+really unique for each person,
+
+00:39:14.760 --> 00:39:15.260
+each situation that comes up.
+
+00:39:18.480 --> 00:39:18.840
+I suspect what it just comes down to is more
+
+00:39:21.560 --> 00:39:22.020
+like capturing the good stuff of each
+
+00:39:23.160 --> 00:39:23.660
+mentoring session or whatever.
+
+00:39:25.840 --> 00:39:26.120
+Maybe it's getting the mentees to write very
+
+00:39:27.700 --> 00:39:27.900
+short blog posts about what they learned this
+
+00:39:28.780 --> 00:39:29.280
+week or whatever else.
+
+00:39:30.900 --> 00:39:31.400
+And then, oh, yeah, you know,
+
+00:39:33.700 --> 00:39:33.900
+we ran into the same problem 3 months ago.
+
+00:39:36.280 --> 00:39:36.440
+Let me go look it up. And then that becomes a
+
+00:39:37.080 --> 00:39:37.580
+reusable segment.
+
+00:39:41.280 --> 00:39:41.780
+[Speaker 1]: Yeah, when I worked at a coding bootcamp,
+
+00:39:46.420 --> 00:39:46.720
+they tried to encourage the mentors to say,
+
+00:39:49.320 --> 00:39:49.820
+like write a blog posts for the mentees.
+
+00:39:57.160 --> 00:39:57.380
+And that was, some of them did,
+
+00:40:01.980 --> 00:40:02.140
+but it was intimidating because like they
+
+00:40:03.260 --> 00:40:03.760
+didn't wanna, I don't know.
+
+00:40:06.900 --> 00:40:07.360
+Are we enculturated in an education system
+
+00:40:09.800 --> 00:40:09.920
+where we can't get it wrong or we need to
+
+00:40:11.760 --> 00:40:11.980
+look like we're more of an expert than we
+
+00:40:15.720 --> 00:40:16.220
+are? I don't know. I have a lot of like,
+
+00:40:17.720 --> 00:40:17.960
+I'm a middle aged white guy,
+
+00:40:20.140 --> 00:40:20.640
+I've got a lot of background and privilege in
+
+00:40:25.440 --> 00:40:25.680
+my career. So like, it's not as scary to put
+
+00:40:28.620 --> 00:40:28.860
+something forward for myself as it might be
+
+00:40:31.080 --> 00:40:31.240
+as like a woman in tech or a minority in
+
+00:40:35.400 --> 00:40:35.900
+tech, because that's a different place.
+
+00:40:38.900 --> 00:40:39.400
+And I want to really get done with that.
+
+00:40:40.760 --> 00:40:41.260
+I don't like that at all.
+
+00:40:43.820 --> 00:40:44.320
+And I would love our, like,
+
+00:40:46.640 --> 00:40:47.140
+just write. And it doesn't have to be public,
+
+00:40:48.540 --> 00:40:49.040
+right? You don't have to make it public,
+
+00:40:51.880 --> 00:40:52.380
+but if you make it discoverable to yourself,
+
+00:40:58.320 --> 00:40:58.820
+that's the big thing. And 1 of my coworkers,
+
+00:41:04.840 --> 00:41:05.020
+She doesn't blog, but she definitely has a
+
+00:41:07.200 --> 00:41:07.480
+large knowledge base of stuff that she
+
+00:41:08.980 --> 00:41:09.140
+references because she's pulling out all
+
+00:41:10.520 --> 00:41:10.760
+kinds of stuff and I'm like whatever you're
+
+00:41:11.120 --> 00:41:11.620
+doing is working.
+
+00:41:17.920 --> 00:41:18.420
+[Speaker 2]: I'm trying to have something.
+
+00:41:23.680 --> 00:41:24.180
+There's a good opportunity with the Emacs
+
+00:41:25.680 --> 00:41:26.180
+conference to accomplish this.
+
+00:41:28.420 --> 00:41:28.920
+So like if you make like a,
+
+00:41:31.640 --> 00:41:32.140
+because 1 of the things with it is,
+
+00:41:36.600 --> 00:41:37.080
+Sasha, you do a really good job of using all.
+
+00:41:38.800 --> 00:41:39.000
+You're the 1 who has the Emacs buffer with
+
+00:41:39.780 --> 00:41:40.080
+the time on it, right?
+
+00:41:41.820 --> 00:41:41.980
+Is that your screen that's being recorded for
+
+00:41:45.860 --> 00:41:46.360
+that? Because you have a really good example
+
+00:41:50.400 --> 00:41:50.600
+of a really consolidated emacs workflow that
+
+00:41:53.440 --> 00:41:53.920
+works really good with the Emacs conference
+
+00:41:56.520 --> 00:41:56.800
+so if you had like a page that described how
+
+00:42:00.100 --> 00:42:00.460
+you did all that stuff in the emacs
+
+00:42:04.280 --> 00:42:04.360
+conference like on that and then we then you
+
+00:42:06.140 --> 00:42:06.380
+did even more stuff with that.
+
+00:42:09.560 --> 00:42:10.060
+Like you do the org mode file that you can
+
+00:42:12.140 --> 00:42:12.340
+just put straight into your agenda for your
+
+00:42:14.720 --> 00:42:14.940
+time zone. I used that.
+
+00:42:17.540 --> 00:42:17.800
+That was really nice, just because it allowed
+
+00:42:19.600 --> 00:42:19.900
+me to reorganize and see how all the talks
+
+00:42:21.580 --> 00:42:21.880
+would work together, and which ones I wanted
+
+00:42:25.840 --> 00:42:26.060
+to do. You could add Org Mode to do tags with
+
+00:42:31.020 --> 00:42:31.520
+that, to say, plan to watch,
+
+00:42:36.080 --> 00:42:36.360
+I want to re-watch but I have to skip it
+
+00:42:37.540 --> 00:42:38.000
+because there's another talk I'm watching,
+
+00:42:40.760 --> 00:42:41.260
+you know, like a couple tags don't care about
+
+00:42:43.940 --> 00:42:44.200
+so that people can easily tag all the talks
+
+00:42:47.360 --> 00:42:47.860
+that they care about on top of that.
+
+00:42:52.660 --> 00:42:53.160
+And then with, I'm going to try to email
+
+00:42:54.660 --> 00:42:54.900
+these ideas on it too,
+
+00:42:57.980 --> 00:42:58.480
+but then you can also,
+
+00:43:00.940 --> 00:43:01.440
+you have the either pad questions,
+
+00:43:03.960 --> 00:43:04.440
+you could put all those in org-mode documents
+
+00:43:08.300 --> 00:43:08.760
+with crdt.el, post all those in the Emacs
+
+00:43:11.400 --> 00:43:11.600
+conference and then people could use that to
+
+00:43:13.820 --> 00:43:13.980
+edit all the documents at the same time so
+
+00:43:15.160 --> 00:43:15.660
+then everybody's actually collaboratively
+
+00:43:20.180 --> 00:43:20.440
+editing. And then people have all the
+
+00:43:24.520 --> 00:43:25.020
+scaffolding for if you do the Emacs meetings,
+
+00:43:27.760 --> 00:43:27.940
+buddy meetings, because they know exactly how
+
+00:43:29.820 --> 00:43:30.180
+to set it all up with that.
+
+00:43:34.040 --> 00:43:34.540
+And then you combine it with any number of
+
+00:43:38.040 --> 00:43:38.360
+whatever chat video program so that people
+
+00:43:39.780 --> 00:43:40.280
+can talk and watch each other.
+
+00:43:45.420 --> 00:43:45.920
+[Speaker 3]: I have a presentation later on EmacsConf
+
+00:43:48.920 --> 00:43:49.200
+infrastructure and I will capture the note
+
+00:43:51.380 --> 00:43:51.600
+And maybe I can include a mini tutorial in
+
+00:43:53.460 --> 00:43:53.800
+the schedule org so that people can be like,
+
+00:43:55.440 --> 00:43:55.680
+hey, by the way, you could refile these
+
+00:43:58.860 --> 00:43:59.120
+things into your own org files or tag them
+
+00:44:01.520 --> 00:44:01.720
+and here's a list thingy that filters your
+
+00:44:03.420 --> 00:44:03.740
+agenda by your tag or whatever,
+
+00:44:04.940 --> 00:44:05.200
+it'll be fine. But it's,
+
+00:44:06.100 --> 00:44:06.600
+you know, it's, it's kind of like,
+
+00:44:09.640 --> 00:44:09.800
+it is, you're right. It is an opportunity to
+
+00:44:12.440 --> 00:44:12.800
+expose people to more things that they could
+
+00:44:14.620 --> 00:44:15.120
+do in kind of a scaffolded way.
+
+00:44:16.600 --> 00:44:16.880
+That's interesting stuff,
+
+00:44:18.780 --> 00:44:19.040
+but I, your point actually driving also going
+
+00:44:21.180 --> 00:44:21.680
+back to previous parts of conversation about,
+
+00:44:24.340 --> 00:44:24.546
+it's difficult for people to share.
+
+00:44:26.420 --> 00:44:26.720
+When you realize, like I keep telling
+
+00:44:28.380 --> 00:44:28.880
+everyone, hey, if you blog about Emacs,
+
+00:44:30.720 --> 00:44:30.920
+you'll not only learn things for yourself and
+
+00:44:31.440 --> 00:44:31.920
+make things more searchable,
+
+00:44:33.520 --> 00:44:33.740
+other people will come by and tell you even
+
+00:44:34.840 --> 00:44:35.340
+better ways of doing things,
+
+00:44:36.940 --> 00:44:37.080
+which is something that always happens to me
+
+00:44:37.800 --> 00:44:37.960
+too, and I'm posting this.
+
+00:44:38.400 --> 00:44:38.900
+Has that ever happened?
+
+00:44:39.960 --> 00:44:40.460
+I'm sure that happens to you.
+
+00:44:45.020 --> 00:44:45.520
+[Speaker 1]: It's great. I love getting those things like,
+
+00:44:49.360 --> 00:44:49.700
+yeah, Howard's presentation on the game
+
+00:44:51.720 --> 00:44:52.000
+stuff. I'm like, I'm going to go explore that
+
+00:44:54.560 --> 00:44:55.060
+now. Because it's my little house.
+
+00:44:57.280 --> 00:44:57.780
+[Speaker 3]: You just have to make it less intimidating,
+
+00:45:00.600 --> 00:45:01.100
+right? And kind of change people's perception
+
+00:45:03.420 --> 00:45:03.540
+that, oh, blogging or sharing tutorials or
+
+00:45:05.460 --> 00:45:05.860
+whatever, that's then when you're an expert,
+
+00:45:06.340 --> 00:45:06.840
+when you're an experienced,
+
+00:45:09.480 --> 00:45:09.720
+to rather working out loud,
+
+00:45:11.520 --> 00:45:11.740
+thinking out loud, this is just that I'm
+
+00:45:12.800 --> 00:45:13.300
+learning along the way.
+
+00:45:15.840 --> 00:45:16.000
+And it might not be the most efficient way to
+
+00:45:17.720 --> 00:45:17.880
+do things, but this is what I'm doing right
+
+00:45:17.880 --> 00:45:18.380
+now.
+
+00:45:23.940 --> 00:45:24.180
+[Speaker 1]: Yeah. And I had a handful of times where I
+
+00:45:25.760 --> 00:45:26.000
+posted something and someone was like,
+
+00:45:27.620 --> 00:45:27.900
+Oh yeah, this is, this would have you tried
+
+00:45:30.060 --> 00:45:30.420
+this? Or I'm like, I didn't even know that
+
+00:45:32.440 --> 00:45:32.940
+existed. That makes this easier.
+
+00:45:37.540 --> 00:45:37.740
+[Speaker 3]: I've written this like little hack and I'm
+
+00:45:38.860 --> 00:45:39.140
+very proud of it because it's clever.
+
+00:45:39.760 --> 00:45:39.920
+And then someone's like,
+
+00:45:41.000 --> 00:45:41.240
+Oh yeah, there's a package for that.
+
+00:45:42.720 --> 00:45:43.220
+It's called this. Right?
+
+00:45:43.660 --> 00:45:44.160
+[Speaker 1]: Thank you. Right? Yeah.
+
+00:45:49.380 --> 00:45:49.880
+It's just it's Yeah, it the fantastic part
+
+00:45:54.140 --> 00:45:54.240
+it. I played Legos as a kid and me and my
+
+00:45:55.760 --> 00:45:56.260
+friends would play Legos at the house.
+
+00:46:00.800 --> 00:46:01.300
+And Emacs has this like feeling of playing
+
+00:46:04.360 --> 00:46:04.540
+Legos with a group of people across the
+
+00:46:06.120 --> 00:46:06.620
+world. In fact, 1 of my current,
+
+00:46:09.080 --> 00:46:09.580
+well, 1 of my best friends now,
+
+00:46:14.040 --> 00:46:14.540
+we met a year ago. And it turns out we both
+
+00:46:18.460 --> 00:46:18.620
+love Emacs. We talk every Thursday and we
+
+00:46:19.920 --> 00:46:20.420
+hang out and we talk poetry.
+
+00:46:23.500 --> 00:46:24.000
+We talk Tom Petty. We talk Emacs.
+
+00:46:24.920 --> 00:46:25.420
+We talk software development.
+
+00:46:26.840 --> 00:46:27.340
+He does Python. I do Ruby.
+
+00:46:29.860 --> 00:46:30.360
+Just anything and everything.
+
+00:46:36.660 --> 00:46:36.820
+And it's also we both are curious because we
+
+00:46:38.100 --> 00:46:38.600
+don't use it the same way.
+
+00:46:43.920 --> 00:46:44.420
+And we like how we accomplish a task.
+
+00:46:47.020 --> 00:46:47.220
+I think that's the fascinating part to me is
+
+00:46:50.140 --> 00:46:50.580
+we each get to explore our way to interact
+
+00:46:54.060 --> 00:46:54.560
+with the computer uniquely by whatever
+
+00:46:55.860 --> 00:46:56.360
+pathways are in our brain.
+
+00:46:58.340 --> 00:46:58.520
+We see stuff, we pick it up,
+
+00:47:00.060 --> 00:47:00.240
+and we're like, that doesn't quite work for
+
+00:47:01.960 --> 00:47:02.460
+me, or, oh, that worked really well.
+
+00:47:06.660 --> 00:47:07.160
+Fascinating, like, I don't know,
+
+00:47:08.200 --> 00:47:08.700
+shared art installation.
+
+00:47:13.740 --> 00:47:14.020
+[Speaker 3]: I think you're onto something that I also
+
+00:47:15.460 --> 00:47:15.640
+resonate with. 1 of the things that
+
+00:47:18.820 --> 00:47:19.060
+fascinates me about Emacs is all these
+
+00:47:21.220 --> 00:47:21.720
+people's configuration jobs are crystallized
+
+00:47:24.960 --> 00:47:25.080
+workflows. And it's really when you talk to
+
+00:47:26.580 --> 00:47:27.080
+them and you see how they're using it,
+
+00:47:29.200 --> 00:47:29.540
+and you understand a little bit of their
+
+00:47:32.140 --> 00:47:32.320
+story and things that they need,
+
+00:47:33.160 --> 00:47:33.660
+the ideas they've had,
+
+00:47:35.640 --> 00:47:36.140
+that's really fascinating.
+
+00:47:37.580 --> 00:47:37.800
+And I think that's 1 of the things that makes
+
+00:47:39.840 --> 00:47:40.080
+it possible to be perpetually curious about
+
+00:47:42.660 --> 00:47:43.160
+Emacs, because it's not just the,
+
+00:47:43.820 --> 00:47:44.060
+you know, this is the,
+
+00:47:45.520 --> 00:47:45.920
+these are all the Lego pieces there are,
+
+00:47:47.760 --> 00:47:47.920
+but you have this community of people who are
+
+00:47:50.320 --> 00:47:50.820
+using these Lego bricks in such fascinating
+
+00:47:53.440 --> 00:47:53.940
+ways and always inventing new things for it.
+
+00:47:56.100 --> 00:47:56.600
+[Speaker 1]: Yeah, new colors, new shapes,
+
+00:47:59.640 --> 00:48:00.140
+they show up. It's great.
+
+00:48:03.200 --> 00:48:03.400
+[Speaker 2]: It's like powered twice or something like
+
+00:48:06.040 --> 00:48:06.220
+that because it's like you can use Emacs with
+
+00:48:09.720 --> 00:48:10.220
+a thousand different customizations and then
+
+00:48:12.340 --> 00:48:12.720
+you can interact with people who can each
+
+00:48:16.540 --> 00:48:17.040
+also Use Emacs in a thousand different ways
+
+00:48:17.520 --> 00:48:17.800
+[Speaker 1]: Mm-hmm, Right,
+
+00:48:20.200 --> 00:48:20.280
+[Speaker 2]: Then you can both learn from each other and
+
+00:48:21.720 --> 00:48:22.040
+that can go a thousand different ways.
+
+00:48:24.000 --> 00:48:24.500
+So it's like, it's like powering your
+
+00:48:25.240 --> 00:48:25.680
+[Speaker 3]: Yep.
+
+00:48:27.400 --> 00:48:27.700
+[Speaker 2]: Something along those lines with each other
+
+00:48:30.720 --> 00:48:30.920
+and like how different and how much you can
+
+00:48:31.560 --> 00:48:32.060
+learn from it.
+
+00:48:38.480 --> 00:48:38.980
+[Speaker 1]: Yeah, the kind of touching back to the mentee
+
+00:48:41.920 --> 00:48:42.380
+that I have who went, he had originally
+
+00:48:44.480 --> 00:48:44.980
+started in Vim and then did VS code.
+
+00:48:47.420 --> 00:48:47.600
+And then we were talking and he was gonna go
+
+00:48:50.420 --> 00:48:50.860
+into Emacs and I didn't have a,
+
+00:48:52.000 --> 00:48:52.360
+I mean, sure, that'd be great.
+
+00:48:53.860 --> 00:48:54.060
+But he's like, I don't have a lot of time.
+
+00:48:56.120 --> 00:48:56.620
+And I'm like, well, go back to the place that
+
+00:48:57.840 --> 00:48:58.340
+you have that experience.
+
+00:49:01.000 --> 00:49:01.280
+And he did, And then he started writing Lua
+
+00:49:02.960 --> 00:49:03.340
+plugins. He was like, this is so much fun.
+
+00:49:05.380 --> 00:49:05.880
+I'm like, good, you're on the right path.
+
+00:49:10.840 --> 00:49:11.340
+Like maybe there'll be space like over time,
+
+00:49:13.860 --> 00:49:14.360
+how Lua plugins and Emacs,
+
+00:49:16.840 --> 00:49:17.260
+you know, who knows? I know that Lua,
+
+00:49:19.040 --> 00:49:19.540
+you can use Fennel to write Lisp.
+
+00:49:24.240 --> 00:49:24.740
+In you write Lisp and it will transpile
+
+00:49:29.060 --> 00:49:29.560
+Fennel to Lua. I forget how that plays out,
+
+00:49:31.880 --> 00:49:32.080
+but we're not too far away from those 2
+
+00:49:34.480 --> 00:49:34.980
+things being able to play.
+
+00:49:39.020 --> 00:49:39.520
+But I guess the question is,
+
+00:49:41.980 --> 00:49:42.480
+does it need to? I don't know.
+
+00:49:44.540 --> 00:49:45.040
+[Speaker 3]: Yeah, I mean, even without direct code
+
+00:49:47.620 --> 00:49:48.120
+translation, the cross-pollination of ideas
+
+00:49:51.460 --> 00:49:51.960
+is certainly enough. I love the fact that
+
+00:49:54.720 --> 00:49:54.840
+people are borrowing ideas from VS Code and
+
+00:49:57.840 --> 00:49:58.040
+from Vim and people look at Emacs videos and
+
+00:49:58.840 --> 00:49:59.020
+other things and say, hey,
+
+00:49:59.860 --> 00:50:00.060
+that's a cool thing in Emacs,
+
+00:50:01.240 --> 00:50:01.680
+but I don't want to ever use Emacs.
+
+00:50:03.240 --> 00:50:03.740
+I'm going to do that whole thing in Vim.
+
+00:50:04.600 --> 00:50:05.100
+And I think that's fantastic.
+
+00:50:07.480 --> 00:50:07.820
+[Speaker 1]: Absolutely. Yeah. I mean,
+
+00:50:10.640 --> 00:50:11.140
+monocultures die. They just do.
+
+00:50:16.840 --> 00:50:17.340
+And computer software and computer industry
+
+00:50:24.120 --> 00:50:24.280
+pushes towards monoculture because of it
+
+00:50:26.660 --> 00:50:27.160
+wants the highest efficiency.
+
+00:50:31.440 --> 00:50:31.780
+And I'm like, I'm not,
+
+00:50:33.640 --> 00:50:34.140
+I mean, sometimes I'm here for that,
+
+00:50:35.600 --> 00:50:35.980
+but most of the time I'm like,
+
+00:50:37.120 --> 00:50:37.620
+I want the bumps and the warts.
+
+00:50:40.680 --> 00:50:41.180
+I want the art, the human interaction,
+
+00:50:42.720 --> 00:50:43.220
+the like, why are we trying to accomplish
+
+00:50:43.360 --> 00:50:43.860
+this?
+
+00:50:46.440 --> 00:50:46.620
+[Speaker 2]: It determines, It depends on how you
+
+00:50:49.640 --> 00:50:50.140
+determine efficiency because Emacs is far
+
+00:50:52.840 --> 00:50:53.240
+Even if Emacs isn't multi-threaded is far
+
+00:50:56.980 --> 00:50:57.480
+more efficient because because of the mental
+
+00:51:00.060 --> 00:51:00.220
+model shifts because you're able to play and
+
+00:51:04.440 --> 00:51:04.600
+tweak with it and then have as much of a
+
+00:51:07.160 --> 00:51:07.360
+mental model shift for each task change that
+
+00:51:10.760 --> 00:51:11.260
+you want. Like, yeah, I want my file manager
+
+00:51:16.260 --> 00:51:16.760
+to not be an editable text buffer.
+
+00:51:18.660 --> 00:51:19.120
+Although sometimes when I want to rename
+
+00:51:20.320 --> 00:51:20.820
+files, I want it to be that.
+
+00:51:23.800 --> 00:51:24.300
+[Speaker 1]: Right. Yeah, and really,
+
+00:51:26.640 --> 00:51:27.040
+like, to be clear, I like the idea of Emacs
+
+00:51:29.060 --> 00:51:29.340
+as a projection of, like,
+
+00:51:30.320 --> 00:51:30.660
+how I think about stuff.
+
+00:51:33.780 --> 00:51:33.960
+So it's that whatever my neurons have made a
+
+00:51:37.040 --> 00:51:37.280
+good pathway for, I can have Emacs flow with
+
+00:51:41.660 --> 00:51:42.160
+me. That efficiency side is I want a factory,
+
+00:51:43.080 --> 00:51:43.480
+I want to stamp out widgets,
+
+00:51:44.540 --> 00:51:44.720
+I want them to be the same,
+
+00:51:45.400 --> 00:51:45.650
+chop, chop, chop, chop,
+
+00:51:51.860 --> 00:51:52.360
+chop, chop. That emacs runs in its spirit
+
+00:51:57.180 --> 00:51:57.440
+along with vim contrary to that and I like
+
+00:51:57.440 --> 00:51:57.940
+that
+
+00:52:00.530 --> 00:52:00.720
+[Speaker 2]: emacs is a 1 of the things with the like the
+
+00:52:03.480 --> 00:52:03.680
+mental model of Emacs is you should look at
+
+00:52:06.180 --> 00:52:06.660
+Emacs like this is probably something that
+
+00:52:08.100 --> 00:52:08.320
+people should think about when they are
+
+00:52:10.440 --> 00:52:10.940
+introducing Emacs to other people is Emacs is
+
+00:52:15.720 --> 00:52:15.900
+a treasure trove of conflicting ways of
+
+00:52:18.080 --> 00:52:18.580
+solving the same problem so you get,
+
+00:52:22.040 --> 00:52:22.280
+so you can individuate yourself on how you
+
+00:52:23.520 --> 00:52:24.020
+actually want to solve that problem.
+
+00:52:25.440 --> 00:52:25.600
+[Speaker 3]: Do you
+
+00:52:26.700 --> 00:52:27.200
+[Speaker 2]: want Vim bindings or not?
+
+00:52:30.200 --> 00:52:30.580
+You get to choose. Or do you want Meow
+
+00:52:31.900 --> 00:52:32.400
+bindings? You can choose.
+
+00:52:34.780 --> 00:52:35.280
+[Speaker 1]: Yep. Absolutely. Yeah.
+
+00:52:38.780 --> 00:52:39.040
+I, I came, I'm, I consider my,
+
+00:52:42.380 --> 00:52:42.660
+I, I lament because in 2005 I almost picked
+
+00:52:46.100 --> 00:52:46.240
+up Emacs and it wasn't until 2020 that I
+
+00:52:49.040 --> 00:52:49.440
+picked it up. And fortunately I picked it up
+
+00:52:54.000 --> 00:52:54.500
+when I did because I was able to look at
+
+00:52:58.020 --> 00:52:58.520
+things I had previously accomplished and find
+
+00:53:05.140 --> 00:53:05.420
+analogs And things like Helm and Ivy were
+
+00:53:08.940 --> 00:53:09.440
+both 2 different ways of doing it and consult
+
+00:53:11.600 --> 00:53:12.100
+and then, or Selectrum and then consult,
+
+00:53:15.860 --> 00:53:16.060
+like they all had these different ways And it
+
+00:53:18.900 --> 00:53:19.400
+felt great because I could find the thing
+
+00:53:24.520 --> 00:53:25.020
+that worked for me. And they're close,
+
+00:53:27.680 --> 00:53:27.840
+but then they also like branch out and do
+
+00:53:30.360 --> 00:53:30.860
+things differently. And it was so fascinating
+
+00:53:34.860 --> 00:53:35.020
+to explore each of those and spend an hour or
+
+00:53:39.100 --> 00:53:39.360
+2 on a primary task in seeing where that
+
+00:53:42.040 --> 00:53:42.540
+little thread went. It's great.
+
+00:53:47.200 --> 00:53:47.600
+[Speaker 3]: So tell me a bit more about how you got into
+
+00:53:51.040 --> 00:53:51.300
+Emacs. What pulled you
+
+00:53:55.120 --> 00:53:55.620
+[Speaker 1]: in? Yeah, this is a great little moment.
+
+00:53:59.680 --> 00:54:00.180
+I started in TextMate,
+
+00:54:03.280 --> 00:54:03.420
+That's kind of where I would say the
+
+00:54:06.460 --> 00:54:06.660
+beginning for coding for open source and
+
+00:54:07.840 --> 00:54:08.340
+using open source software.
+
+00:54:11.760 --> 00:54:11.920
+Sorry, using open source frameworks and
+
+00:54:14.540 --> 00:54:15.040
+languages. So TextMate to Sublime,
+
+00:54:18.260 --> 00:54:18.580
+basically TextMate couldn't search very well
+
+00:54:20.740 --> 00:54:21.060
+at the time. It was getting bogged down.
+
+00:54:21.640 --> 00:54:22.080
+So I moved to Sublime,
+
+00:54:23.260 --> 00:54:23.760
+which solved it, felt well,
+
+00:54:27.900 --> 00:54:28.400
+carried the same UI look with me.
+
+00:54:30.680 --> 00:54:31.180
+And then when I was at a conference,
+
+00:54:34.540 --> 00:54:34.860
+there was a talk about using an open source
+
+00:54:36.600 --> 00:54:36.880
+editor. I was like, yeah,
+
+00:54:38.720 --> 00:54:39.220
+I need to do that. I really need to.
+
+00:54:43.080 --> 00:54:43.260
+And Adam was viable. I was like,
+
+00:54:44.320 --> 00:54:44.820
+Oh, this is really close.
+
+00:54:47.120 --> 00:54:47.360
+I'll use it. And I didn't think too much
+
+00:54:49.540 --> 00:54:49.680
+about it. And then the writing was on the
+
+00:54:51.120 --> 00:54:51.620
+wall, that Adam is going away.
+
+00:54:55.760 --> 00:54:56.040
+And I was like, I need to find an open source
+
+00:54:57.100 --> 00:54:57.600
+editor that speaks to me.
+
+00:54:59.200 --> 00:54:59.440
+And I said, all right,
+
+00:55:00.760 --> 00:55:01.260
+Vim, This is my fifth time.
+
+00:55:06.300 --> 00:55:06.800
+I will try. And I gave an earnest 2 weeks.
+
+00:55:09.060 --> 00:55:09.440
+And I'm just like, I cannot get this mental
+
+00:55:11.600 --> 00:55:11.840
+model in my head. So I'm like,
+
+00:55:12.800 --> 00:55:13.200
+all right, I set it down.
+
+00:55:14.540 --> 00:55:15.040
+I can use Vim, I'm comfortable.
+
+00:55:15.940 --> 00:55:16.360
+I think it's a great tool,
+
+00:55:19.000 --> 00:55:19.500
+but my mental model doesn't map well there.
+
+00:55:21.040 --> 00:55:21.420
+And I'm like, all right,
+
+00:55:24.780 --> 00:55:25.280
+here we go, VS code. All right,
+
+00:55:28.280 --> 00:55:28.520
+you're fine. But I feel like I might
+
+00:55:31.340 --> 00:55:31.500
+accidentally charge my credit card in the
+
+00:55:33.000 --> 00:55:33.500
+text editor on the default installation.
+
+00:55:38.680 --> 00:55:39.180
+And that was alluded to by in 1 of the talks,
+
+00:55:46.120 --> 00:55:46.620
+I forget who he German about mandating Emacs
+
+00:55:48.000 --> 00:55:48.500
+in his computer science classes.
+
+00:55:51.020 --> 00:55:51.220
+He mentioned like the Microsoft Office or
+
+00:55:54.060 --> 00:55:54.560
+Microsoft Marketplace felt like it was there.
+
+00:55:58.860 --> 00:55:59.060
+So that was 1, but the moment where I was
+
+00:56:02.380 --> 00:56:02.880
+like, oh, hell no, VS Code.
+
+00:56:08.520 --> 00:56:08.940
+Or I wanted to use a commit from the command
+
+00:56:12.280 --> 00:56:12.780
+palette, and it brought up an HTML text input
+
+00:56:15.060 --> 00:56:15.560
+area, and it was 30 characters.
+
+00:56:23.000 --> 00:56:23.500
+And in that moment, I saw several things.
+
+00:56:27.040 --> 00:56:27.140
+1, I'm like, no, that's terrible because I
+
+00:56:28.100 --> 00:56:28.600
+want to write something meaningful.
+
+00:56:33.640 --> 00:56:33.900
+2, this is the behavior that this tool is
+
+00:56:38.960 --> 00:56:39.240
+modeling. That tells me that history and like
+
+00:56:41.320 --> 00:56:41.820
+how it is built is not important.
+
+00:56:47.160 --> 00:56:47.320
+And yes, I can fix it and get around it.
+
+00:56:49.240 --> 00:56:49.740
+And I kind of did. And I was like,
+
+00:56:51.440 --> 00:56:51.860
+the principles are just,
+
+00:56:53.680 --> 00:56:54.180
+they're there. And then also understanding
+
+00:56:56.100 --> 00:56:56.600
+like there's a bunch of telemetry underneath
+
+00:56:58.860 --> 00:56:59.360
+it. So I used VS Codium,
+
+00:57:00.240 --> 00:57:00.740
+there's still telemetry.
+
+00:57:03.340 --> 00:57:03.840
+And I was like, all right,
+
+00:57:07.380 --> 00:57:07.880
+2005 Jeremy, let's go try Emacs,
+
+00:57:08.940 --> 00:57:09.440
+let's see if we can do it.
+
+00:57:13.860 --> 00:57:14.360
+And I hopped in, I grabbed Space Max.
+
+00:57:16.640 --> 00:57:17.020
+I was Like, yeah, this works pretty well.
+
+00:57:18.740 --> 00:57:18.960
+Like, I don't know how to use the keys very
+
+00:57:20.880 --> 00:57:21.380
+well. I'm figuring it out.
+
+00:57:26.040 --> 00:57:26.400
+And. And I was like, you know what?
+
+00:57:27.340 --> 00:57:27.840
+Why don't I do the tutorial?
+
+00:57:30.860 --> 00:57:31.360
+And it was the tutorial that hooked me.
+
+00:57:36.820 --> 00:57:37.320
+Not because everything made 100% sense
+
+00:57:42.440 --> 00:57:42.620
+because Emacs is old. It had a lot of
+
+00:57:45.420 --> 00:57:45.920
+language that was hard to internalize,
+
+00:57:50.500 --> 00:57:50.740
+but it presented it in a conversational I'm
+
+00:57:52.360 --> 00:57:52.600
+gonna meet you where you're at and we're
+
+00:57:53.440 --> 00:57:53.940
+gonna walk with it together.
+
+00:57:56.480 --> 00:57:56.980
+And then when I was done with the tutorial,
+
+00:57:58.420 --> 00:57:58.740
+I said, you know, Space Max,
+
+00:57:59.760 --> 00:58:00.060
+I don't understand it.
+
+00:58:00.920 --> 00:58:01.420
+And it's got some performance.
+
+00:58:04.180 --> 00:58:04.300
+It looks like there's like extra stuff that I
+
+00:58:08.420 --> 00:58:08.920
+may not need. So I went vanilla,
+
+00:58:11.780 --> 00:58:12.280
+nothing Emacs and just started working.
+
+00:58:14.060 --> 00:58:14.560
+I was like, well, how do you do this?
+
+00:58:17.280 --> 00:58:17.460
+[Speaker 2]: Although 5 minutes of Space Max or any of
+
+00:58:19.600 --> 00:58:20.100
+those Emacs distribution shows you
+
+00:58:22.360 --> 00:58:22.860
+unequivocally how different it can be.
+
+00:58:25.880 --> 00:58:26.380
+[Speaker 1]: It was, it was, it was so amazing,
+
+00:58:31.600 --> 00:58:32.100
+and it was so good. But I knew my nature was,
+
+00:58:34.780 --> 00:58:35.140
+I was frustrated in, like I wrote an Atom
+
+00:58:37.780 --> 00:58:38.280
+package, and that was awful.
+
+00:58:42.860 --> 00:58:43.360
+It was so terrible. But I knew what I wanted.
+
+00:58:48.280 --> 00:58:48.480
+And then I wrote, I started writing a VS code
+
+00:58:49.640 --> 00:58:49.840
+and I'm like, oh no, no,
+
+00:58:50.800 --> 00:58:51.300
+no, we're not here for this.
+
+00:58:55.520 --> 00:58:55.800
+And so, yeah, SpaceMax showed me like this
+
+00:59:00.600 --> 00:59:00.760
+can look and feel like a space that I used to
+
+00:59:03.920 --> 00:59:04.420
+be in. And then it has more functionality,
+
+00:59:07.440 --> 00:59:07.940
+more stuff. It's gonna be great.
+
+00:59:09.960 --> 00:59:10.380
+And then I just was like,
+
+00:59:11.880 --> 00:59:12.380
+I'm gonna go find my own.
+
+00:59:15.920 --> 00:59:16.200
+I'm really happy that I took the path because
+
+00:59:19.300 --> 00:59:19.640
+I just worked, wrote, and I'm like,
+
+00:59:21.000 --> 00:59:21.380
+I bet you this, I bet you the tool,
+
+00:59:22.540 --> 00:59:22.960
+I know it can do this because it,
+
+00:59:24.620 --> 00:59:25.120
+you know, text me, did this or Adam,
+
+00:59:27.800 --> 00:59:28.300
+I'm gonna go, I went on to Melpa and I found
+
+00:59:29.440 --> 00:59:29.940
+a couple different things.
+
+00:59:31.120 --> 00:59:31.440
+I'm like, all right, let's try them.
+
+00:59:32.320 --> 00:59:32.640
+I'm like, that's the 1,
+
+00:59:34.480 --> 00:59:34.980
+great. Roll it in, keep working.
+
+00:59:36.000 --> 00:59:36.500
+I know it can do this.
+
+00:59:39.800 --> 00:59:40.160
+Find a package. And so I built up this sense
+
+00:59:46.060 --> 00:59:46.160
+of the packages and my strategy was go to
+
+00:59:49.680 --> 00:59:49.940
+Melpa, look at, that was the 1 that showed
+
+00:59:52.540 --> 00:59:53.040
+up, look at the number of downloads.
+
+00:59:54.520 --> 00:59:54.960
+So I'm like, what's the high stuff?
+
+00:59:55.900 --> 00:59:56.400
+What really gets used?
+
+00:59:57.680 --> 00:59:58.180
+There's something there.
+
+01:00:00.320 --> 01:00:00.760
+And then also look at what was most recently
+
+01:00:03.420 --> 01:00:03.580
+updated. So kind of pivot on those along with
+
+01:00:06.960 --> 01:00:07.260
+a keyword search and I found the tools that
+
+01:00:17.780 --> 01:00:18.100
+worked well. But it really came down to like
+
+01:00:19.960 --> 01:00:20.460
+that VS Code I was almost in,
+
+01:00:24.400 --> 01:00:24.640
+but I've been around long enough to know what
+
+01:00:25.560 --> 01:00:26.060
+Microsoft will do.
+
+01:00:32.240 --> 01:00:32.540
+[Speaker 2]: For me, I was always like customizing things.
+
+01:00:34.600 --> 01:00:35.100
+I think I saw some interesting emacs videos.
+
+01:00:42.320 --> 01:00:42.720
+I wanted to try Well, I wanted to try working
+
+01:00:44.500 --> 01:00:44.720
+more with the keyboard and not need I think
+
+01:00:46.800 --> 01:00:47.300
+[Speaker 1]: mm-hmm
+
+01:00:51.180 --> 01:00:51.680
+[Speaker 2]: the mouse on a laptop And so I was looking
+
+01:00:54.380 --> 01:00:54.520
+explicitly for ways to just work on the
+
+01:00:56.920 --> 01:00:57.400
+keyboard only, which meant that I wasn't
+
+01:00:59.060 --> 01:00:59.560
+looking for programs that followed Cua,
+
+01:01:04.400 --> 01:01:04.900
+which really leaves you like 2 options,
+
+01:01:10.960 --> 01:01:11.380
+Vim and Emacs. And when I looked at the 2,
+
+01:01:13.940 --> 01:01:14.100
+I saw 1 of the big differentiating factors I
+
+01:01:15.660 --> 01:01:16.020
+saw was Tramp, which was,
+
+01:01:18.480 --> 01:01:18.600
+oh, you mean I get a SSH into a machine and
+
+01:01:19.840 --> 01:01:20.340
+have my customizations too?
+
+01:01:22.740 --> 01:01:23.240
+[Speaker 1]: Yep. Yeah.
+
+01:01:29.140 --> 01:01:29.540
+[Speaker 2]: And then I started using Emacs more and more.
+
+01:01:34.440 --> 01:01:34.860
+Eventually I combined that with a tiling
+
+01:01:36.400 --> 01:01:36.900
+window manager, NixOS,
+
+01:01:40.840 --> 01:01:41.040
+and started banishing as much of the GUI as I
+
+01:01:44.060 --> 01:01:44.560
+possibly could, running MPV or VLC,
+
+01:01:49.180 --> 01:01:49.400
+so I could edit so that my config files could
+
+01:01:53.720 --> 01:01:54.020
+be keyboard oriented. My settings config
+
+01:01:55.920 --> 01:01:56.420
+menus are now keyboard oriented.
+
+01:02:00.860 --> 01:02:01.080
+And yeah, that was the incremental process of
+
+01:02:04.400 --> 01:02:04.900
+just, yeah, making the computer nicer,
+
+01:02:06.680 --> 01:02:06.860
+more efficient, and then you figure out all
+
+01:02:08.080 --> 01:02:08.580
+the other advantages of the...
+
+01:02:13.440 --> 01:02:13.780
+[Speaker 1]: Yeah. How did you get in to it,
+
+01:02:18.940 --> 01:02:19.440
+[Speaker 2]: Oh, you're lost.
+
+01:02:21.840 --> 01:02:22.340
+[Speaker 1]: Sasha? Your sound is gone.
+
+01:02:27.345 --> 01:02:27.845
+[Speaker 3]: Sorry, my face mute button.
+
+01:02:29.600 --> 01:02:29.800
+Okay, I'll tell you that story,
+
+01:02:30.840 --> 01:02:31.080
+I get thought out of my head,
+
+01:02:32.780 --> 01:02:33.240
+so I forget it. But what you described,
+
+01:02:34.900 --> 01:02:35.080
+Jerry, about kind of starting with the
+
+01:02:37.340 --> 01:02:37.540
+distribution and then pulling back and
+
+01:02:39.140 --> 01:02:39.520
+starting with vanilla and building up,
+
+01:02:41.040 --> 01:02:41.320
+kind of close the stories that I've heard
+
+01:02:42.980 --> 01:02:43.480
+from a lot of people in the community where
+
+01:02:46.600 --> 01:02:46.800
+the distribution gives them kind of an end
+
+01:02:48.140 --> 01:02:48.640
+goal, at least work requirements,
+
+01:02:50.280 --> 01:02:50.600
+So get the stuff done and they're not
+
+01:02:52.260 --> 01:02:52.760
+slugging through the weeds around the start.
+
+01:02:55.440 --> 01:02:55.760
+I have a hard time modifying it because
+
+01:02:57.440 --> 01:02:57.720
+modifying the distribution itself is very
+
+01:02:59.140 --> 01:02:59.640
+different from the tools they see.
+
+01:03:01.520 --> 01:03:01.740
+They feel like they want to understand the
+
+01:03:02.320 --> 01:03:02.820
+different possible part.
+
+01:03:04.240 --> 01:03:04.540
+And so then they pull back and say,
+
+01:03:06.300 --> 01:03:06.800
+okay, I've got this thing that can use
+
+01:03:08.360 --> 01:03:08.680
+everything to just get some quick work done,
+
+01:03:10.380 --> 01:03:10.760
+but I have this thing that I can call,
+
+01:03:13.500 --> 01:03:13.680
+that's mine. And I understand because I'm
+
+01:03:15.960 --> 01:03:16.460
+building it up from the ground up.
+
+01:03:19.540 --> 01:03:19.640
+Okay, so that's like, oh,
+
+01:03:21.500 --> 01:03:21.660
+interesting, there's a lot of people who are
+
+01:03:23.940 --> 01:03:24.280
+like that, and it really helps them to both
+
+01:03:27.240 --> 01:03:27.620
+have that insight, which is see through
+
+01:03:29.540 --> 01:03:29.780
+distributions and also videos of other
+
+01:03:32.060 --> 01:03:32.220
+people's workflows and press kind of
+
+01:03:34.080 --> 01:03:34.500
+conference presentations often about
+
+01:03:35.140 --> 01:03:35.540
+completely different topics,
+
+01:03:37.540 --> 01:03:37.700
+right? So someone whizzing through Ruby on
+
+01:03:39.920 --> 01:03:40.420
+Rails or whatever else and doing all of this.
+
+01:03:43.580 --> 01:03:44.040
+But also having 1 help them break out,
+
+01:03:46.560 --> 01:03:46.760
+okay, well, there's a lot of work from where
+
+01:03:47.900 --> 01:03:48.160
+I am to where that is.
+
+01:03:49.740 --> 01:03:50.240
+How do I do it without being overwhelmed?
+
+01:03:51.400 --> 01:03:52.960
+Because if they try to learn everything,
+
+01:03:55.520 --> 01:03:55.760
+they'll go crazy. And then they'll fall.
+
+01:03:57.500 --> 01:03:58.000
+And the brain is super important.
+
+01:04:01.500 --> 01:04:01.860
+And how I got into this whole eMac thing was
+
+01:04:03.520 --> 01:04:03.780
+I was reading all the computer science books
+
+01:04:06.180 --> 01:04:06.480
+in the university library and 1 of the Unix
+
+01:04:09.160 --> 01:04:09.360
+power tools had a chapter on Emacs and had
+
+01:04:11.040 --> 01:04:11.320
+them you know well there's another type of
+
+01:04:14.440 --> 01:04:14.760
+whatever. Okay that's interesting so I went
+
+01:04:17.080 --> 01:04:17.320
+and tried it out But the reason I really got
+
+01:04:19.280 --> 01:04:19.780
+into it was because I was using John Wigley's
+
+01:04:23.520 --> 01:04:23.760
+Planner Mode. This was before Org Mode came
+
+01:04:25.320 --> 01:04:25.600
+about. So Planner Mode was a link.
+
+01:04:27.040 --> 01:04:27.540
+I said, hey, this is great.
+
+01:04:29.380 --> 01:04:29.880
+I'm looking for ways to help out.
+
+01:04:31.560 --> 01:04:32.060
+If you need help verifying any bugs,
+
+01:04:34.160 --> 01:04:34.660
+you know, send it to me and I'll do the
+
+01:04:37.540 --> 01:04:37.840
+figuring out. He's an author and an inventor.
+
+01:04:37.960 --> 01:04:38.100
+[Speaker 2]: And then
+
+01:04:39.480 --> 01:04:39.980
+[Speaker 3]: he made me the miniature for it.
+
+01:04:42.720 --> 01:04:42.880
+So I'm like, okay. And then that's how I got
+
+01:04:44.680 --> 01:04:45.140
+to know this wonderful community of people
+
+01:04:46.840 --> 01:04:47.340
+who customize emacs so much.
+
+01:04:51.680 --> 01:04:52.180
+And it just goes there because really,
+
+01:04:54.100 --> 01:04:54.240
+when you see all these different ways that
+
+01:04:55.860 --> 01:04:56.360
+people use in all these different stories
+
+01:05:00.060 --> 01:05:00.480
+that you get send off because they're using
+
+01:05:03.960 --> 01:05:04.460
+it to bake sourdough bread and do knitting
+
+01:05:06.700 --> 01:05:06.880
+and all the crazy things that people come up
+
+01:05:08.900 --> 01:05:09.400
+with. I've been using it as an audio editor.
+
+01:05:11.000 --> 01:05:11.500
+It's just weird. It's just fun.
+
+01:05:13.100 --> 01:05:13.600
+[Speaker 1]: Yeah, that's great.
+
+01:05:19.640 --> 01:05:20.020
+[Speaker 2]: Yeah. Every, Sasha, like 2 things that I was
+
+01:05:22.900 --> 01:05:23.040
+meaning to say is every time I see the on the
+
+01:05:26.140 --> 01:05:26.580
+EMAX conference the time that the scratch
+
+01:05:29.900 --> 01:05:30.400
+buffer with the big clock that is ticking
+
+01:05:34.980 --> 01:05:35.480
+down as and the multi multiple sized fonts As
+
+01:05:37.720 --> 01:05:37.900
+I always think wow, that's really cool.
+
+01:05:38.980 --> 01:05:39.280
+I didn't know Emacs could do that.
+
+01:05:40.440 --> 01:05:40.940
+Wait, no, I saw that last year.
+
+01:05:43.860 --> 01:05:44.060
+How do you do, now, how do I do that?
+
+01:05:45.360 --> 01:05:45.480
+Cause that's not, and that's not something I
+
+01:05:46.920 --> 01:05:47.420
+normally even think about Emacs doing.
+
+01:05:48.080 --> 01:05:48.580
+[Speaker 1]: Right.
+
+01:05:51.220 --> 01:05:51.720
+[Speaker 2]: I'll think about putting
+
+01:05:55.760 --> 01:05:56.260
+[Speaker 3]: There's an EmacsConf-stream.el
+
+01:05:59.760 --> 01:06:00.260
+in the EmacsConf-el repository.
+
+01:06:03.960 --> 01:06:04.160
+Grab the link and open but you can grab the
+
+01:06:07.940 --> 01:06:08.260
+code from there. It's basically the text
+
+01:06:08.260 --> 01:06:08.760
+property.
+
+01:06:15.020 --> 01:06:15.480
+[Speaker 2]: But it's a thought that has repeated multiple
+
+01:06:17.140 --> 01:06:17.460
+years. Like, I didn't know we could do that
+
+01:06:18.220 --> 01:06:18.720
+way. I thought about that.
+
+01:06:21.260 --> 01:06:21.600
+I had this exact thought last year when I saw
+
+01:06:21.600 --> 01:06:22.100
+it.
+
+01:06:28.260 --> 01:06:28.480
+[Speaker 1]: It's, we're like, I'm at the point where it's
+
+01:06:31.220 --> 01:06:31.620
+like I have memories of remembering doing
+
+01:06:34.540 --> 01:06:35.040
+something. I don't have memories of doing it.
+
+01:06:36.680 --> 01:06:37.180
+Like all of the things.
+
+01:06:40.560 --> 01:06:41.060
+Like so it's again, we,
+
+01:06:45.240 --> 01:06:45.740
+Emacs helps expose like the,
+
+01:06:48.640 --> 01:06:49.140
+like it's, anything's possible.
+
+01:06:53.300 --> 01:06:53.560
+And we see how it becomes possible through
+
+01:06:55.640 --> 01:06:56.120
+other people. And then it gets our brains
+
+01:06:57.780 --> 01:06:58.140
+thinking about other ways of doing stuff.
+
+01:06:59.920 --> 01:07:00.420
+And I think that's the exciting part.
+
+01:07:02.360 --> 01:07:02.860
+Dog who wants to go play Frisbee.
+
+01:07:07.900 --> 01:07:08.080
+[Speaker 3]: And that's actually 1 of the reasons why I
+
+01:07:11.060 --> 01:07:11.320
+want to encourage people to not only talk
+
+01:07:12.840 --> 01:07:12.980
+about Emacs and write Emacs blog posts,
+
+01:07:15.380 --> 01:07:15.520
+but also actually demonstrate Emacs in the
+
+01:07:16.560 --> 01:07:17.060
+sense of doing something else.
+
+01:07:20.220 --> 01:07:20.720
+So for example, we can match people at Emacs
+
+01:07:23.560 --> 01:07:24.000
+if you're presenting about Ruby on Rails and
+
+01:07:27.040 --> 01:07:27.440
+you're doing all of your and education and
+
+01:07:30.240 --> 01:07:30.480
+things while you're presenting Rails,
+
+01:07:32.900 --> 01:07:33.400
+you reach all these people who are interested
+
+01:07:34.400 --> 01:07:34.780
+in Rails, developer Rails,
+
+01:07:36.260 --> 01:07:36.760
+but might not have even considered Emacs.
+
+01:07:41.920 --> 01:07:42.420
+And here, you know, you probably would.
+
+01:07:44.860 --> 01:07:45.060
+I would probably have a hard time writing an
+
+01:07:47.040 --> 01:07:47.540
+entire talk about adding text properties,
+
+01:07:49.540 --> 01:07:49.760
+but the fact that there's a thing here that
+
+01:07:50.800 --> 01:07:51.300
+shows, hey, this is possible,
+
+01:07:53.000 --> 01:07:53.300
+Emacs can get people to think,
+
+01:07:54.880 --> 01:07:55.380
+okay, so how do I get from here to there?
+
+01:07:57.440 --> 01:07:57.940
+Just showing the possible.
+
+01:08:02.120 --> 01:08:02.360
+Yeah. Which source code is in the,
+
+01:08:02.360 --> 01:08:02.860
+whatchamacallit.
+
+01:08:04.600 --> 01:08:05.100
+[Speaker 1]: Right, yeah. Yeah, I just saw that.
+
+01:08:08.240 --> 01:08:08.740
+[Speaker 2]: There's a weird interesting thing how Emacs
+
+01:08:12.540 --> 01:08:12.720
+dovetails with people who are interested in
+
+01:08:15.940 --> 01:08:16.439
+making their own local first Zettelkasten,
+
+01:08:17.720 --> 01:08:18.220
+because look at how many Zettelkasten
+
+01:08:21.300 --> 01:08:21.600
+packages you have. Especially with how much,
+
+01:08:23.800 --> 01:08:24.100
+like it feels like, it seems like Emacs has
+
+01:08:27.439 --> 01:08:27.939
+more than Vim, but Vim is bigger or VS,
+
+01:08:30.140 --> 01:08:30.420
+feels like it has more than Vim or VS Code,
+
+01:08:31.920 --> 01:08:32.319
+and VS Code's bigger. I'm not sure,
+
+01:08:36.819 --> 01:08:37.319
+but it feels like it. Same thing with that
+
+01:08:39.920 --> 01:08:40.420
+HyperCore. That HyperCore felt more like a
+
+01:08:42.540 --> 01:08:43.040
+local first peer-to-peer system.
+
+01:08:48.240 --> 01:08:48.640
+So there's a weird dovetail where they want
+
+01:08:52.279 --> 01:08:52.779
+the knowledge bases that are local first,
+
+01:08:58.260 --> 01:08:58.359
+comprehensive, because 1 of the properties of
+
+01:09:03.500 --> 01:09:03.740
+the Zettelkasten or Org Mode agendas is that
+
+01:09:07.359 --> 01:09:07.819
+it's all your notes in 1 place.
+
+01:09:14.439 --> 01:09:14.760
+It's not, you know, your notes in either pad
+
+01:09:19.540 --> 01:09:20.040
+and your notes in Google Calendar,
+
+01:09:23.180 --> 01:09:23.680
+your notes in 20 different places,
+
+01:09:24.520 --> 01:09:25.020
+your notes in Evernote.
+
+01:09:28.700 --> 01:09:29.060
+It's your notes in 1 program in 1 place
+
+01:09:30.840 --> 01:09:31.080
+because you have to deal with them And
+
+01:09:32.600 --> 01:09:32.800
+they're going to be in files on your hard
+
+01:09:34.279 --> 01:09:34.779
+drive, and you're going to have packages
+
+01:09:37.080 --> 01:09:37.359
+there. That's the other weird thing too,
+
+01:09:40.240 --> 01:09:40.600
+is how many, like, you install an Emacs
+
+01:09:41.399 --> 01:09:41.899
+package, 1 of the guarantees,
+
+01:09:43.439 --> 01:09:43.640
+some of the guarantees you seem to get with
+
+01:09:46.260 --> 01:09:46.680
+it is if it does use an external program,
+
+01:09:48.399 --> 01:09:48.580
+it's going to have a lot of configuration in
+
+01:09:51.020 --> 01:09:51.520
+Emacs. It's going to be installed.
+
+01:09:53.760 --> 01:09:54.260
+It's going to be local first.
+
+01:09:56.780 --> 01:09:57.100
+Cause like you have flow bits,
+
+01:09:59.340 --> 01:09:59.840
+but how many programs like are,
+
+01:10:05.140 --> 01:10:05.280
+are cloud first. And it feels like most of
+
+01:10:06.820 --> 01:10:07.320
+those are like org Trello,
+
+01:10:10.160 --> 01:10:10.520
+where it's like, I want to use org mode,
+
+01:10:12.040 --> 01:10:12.540
+but other people use Trello.
+
+01:10:15.460 --> 01:10:15.780
+So I'm going to be grudgingly using this org
+
+01:10:17.400 --> 01:10:17.660
+Trello to be a bridge between the 2,
+
+01:10:19.200 --> 01:10:19.640
+not because I wanted to use org,
+
+01:10:21.240 --> 01:10:21.360
+not because I wanted to use Trello in the
+
+01:10:23.200 --> 01:10:23.320
+first place or I started off with Trello and
+
+01:10:24.280 --> 01:10:24.780
+now I wanna use org mode.
+
+01:10:27.680 --> 01:10:28.180
+[Speaker 1]: Right, no, you're that local first.
+
+01:10:37.020 --> 01:10:37.400
+The Thought I have is with the 2022 interest
+
+01:10:43.080 --> 01:10:43.580
+rates going up, the era of free money,
+
+01:10:46.520 --> 01:10:47.020
+or even like getting money for more,
+
+01:10:49.960 --> 01:10:50.180
+more money than it actually costs Like it was
+
+01:10:55.600 --> 01:10:56.100
+minting money. We are going to be seeing how
+
+01:10:59.440 --> 01:10:59.940
+these organizations that had financial
+
+01:11:01.840 --> 01:11:02.340
+runways, all of these cloud services,
+
+01:11:06.760 --> 01:11:07.020
+what's not gonna last because there's no
+
+01:11:12.440 --> 01:11:12.880
+funding. And like the durability of our local
+
+01:11:16.400 --> 01:11:16.900
+first plain text, free open source stuff.
+
+01:11:21.320 --> 01:11:21.820
+Like I won't have to do a content migration
+
+01:11:24.320 --> 01:11:24.740
+unless I get a B of my bonnet and want to
+
+01:11:27.700 --> 01:11:27.880
+like change from org mode to markdown for
+
+01:11:30.660 --> 01:11:30.920
+some reason. Like I have it and Then I can
+
+01:11:32.980 --> 01:11:33.480
+send it out. So there's also like that posse
+
+01:11:36.400 --> 01:11:36.900
+principle publish on-site syndicate
+
+01:11:41.660 --> 01:11:41.820
+everywhere Is what emacs and vim like they
+
+01:11:42.780 --> 01:11:43.280
+allow for us to do?
+
+01:11:46.440 --> 01:11:46.620
+[Speaker 2]: Well, that's part of the individuation is you
+
+01:11:48.900 --> 01:11:49.080
+have multiple options of doing something so
+
+01:11:51.580 --> 01:11:51.820
+you can choose something so you can take
+
+01:11:54.360 --> 01:11:54.860
+ownership of your data in the way you want.
+
+01:12:00.220 --> 01:12:00.380
+It all dovetails into each other and I think
+
+01:12:02.840 --> 01:12:03.260
+that's something worth thinking about,
+
+01:12:05.540 --> 01:12:05.800
+especially in relation with who should learn
+
+01:12:08.040 --> 01:12:08.440
+and how should you introduce Emacs to people,
+
+01:12:14.180 --> 01:12:14.420
+because like, with the idea of people should
+
+01:12:16.560 --> 01:12:16.800
+try an Emacs distribution and then start
+
+01:12:17.240 --> 01:12:17.740
+their own from scratch,
+
+01:12:18.880 --> 01:12:19.120
+just so that they, like,
+
+01:12:20.280 --> 01:12:20.640
+if you use it for 10 minutes,
+
+01:12:24.400 --> 01:12:24.820
+you'll gain so much because you use your 3
+
+01:12:25.760 --> 01:12:26.260
+and then all of a sudden you realize,
+
+01:12:29.180 --> 01:12:29.440
+you also know how malleable Emacs can be.
+
+01:12:30.520 --> 01:12:30.960
+And then you start saying,
+
+01:12:32.000 --> 01:12:32.160
+now, how do I do that?
+
+01:12:33.240 --> 01:12:33.740
+So I get to make those choices?
+
+01:12:34.840 --> 01:12:35.340
+[Speaker 1]: Yeah.
+
+01:12:39.340 --> 01:12:39.520
+[Speaker 2]: Or you might say, this person did it well
+
+01:12:40.320 --> 01:12:40.820
+enough, I don't have to.
+
+01:12:43.500 --> 01:12:43.900
+[Speaker 3]: That reminded me of something that I also
+
+01:12:45.360 --> 01:12:45.860
+wanted to mention, shocking word,
+
+01:12:49.040 --> 01:12:49.280
+as in malleability. Another tip I came
+
+01:12:50.600 --> 01:12:50.900
+across, don't know from whom,
+
+01:12:51.500 --> 01:12:51.700
+might have been from you,
+
+01:12:53.440 --> 01:12:53.940
+I don't know, is to define aliases,
+
+01:12:56.320 --> 01:12:56.460
+because we use different words from what the
+
+01:12:58.680 --> 01:12:59.180
+functions are. It's 1 of those little meta
+
+01:13:00.420 --> 01:13:00.720
+things that, you know,
+
+01:13:02.080 --> 01:13:02.580
+If you keep calling it something else,
+
+01:13:05.900 --> 01:13:06.020
+just define it so that you can call it like
+
+01:13:06.760 --> 01:13:07.260
+commencing your words.
+
+01:13:12.440 --> 01:13:12.740
+[Speaker 1]: it's interesting. Anyway,
+
+01:13:14.020 --> 01:13:14.240
+[Speaker 3]: Yeah. Yeah, gotta go disappear and get ready
+
+01:13:17.220 --> 01:13:17.360
+for my dog. Okay, I'll listen to what you
+
+01:13:18.120 --> 01:13:18.280
+say. All right, I
+
+01:13:20.020 --> 01:13:20.520
+[Speaker 1]: I need to take my dogs out and play Frisbee.
+
+01:13:21.780 --> 01:13:22.280
+They have been so patient.
+
+01:13:26.040 --> 01:13:26.200
+So it was great talking with all of you and
+
+01:13:29.640 --> 01:13:30.040
+Sasha, thanks for the organizing energy
+
+01:13:31.680 --> 01:13:32.120
+you've put into this. Plasma Strike,
+
+01:13:32.800 --> 01:13:33.300
+thank you for your presentation.
+
+01:13:34.860 --> 01:13:35.360
+I love this conference.
+
+01:13:36.660 --> 01:13:37.160
+So thank you very much.
+
+01:13:41.760 --> 01:13:42.260
+And now have a good rest of your Sunday.
+
+01:13:43.100 --> 01:13:43.600
+Bye.
diff --git a/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt b/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt
new file mode 100644
index 00000000..fb2f1603
--- /dev/null
+++ b/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt
@@ -0,0 +1,696 @@
+WEBVTT captioned by hannah, checked by sachac
+
+NOTE Introduction
+
+00:00:01.380 --> 00:00:06.319
+Hi everyone, my name is Jeremy Friesen, pronouns are he/him,
+
+00:00:06.320 --> 00:00:07.879
+and today I'll be talking about
+
+00:00:07.880 --> 00:00:11.519
+mentoring VS Coders as an Emacs-ian.
+
+00:00:11.520 --> 00:00:14.999
+A little bit of background, since 2015, I've mentored
+
+00:00:15.000 --> 00:00:16.559
+about 40 software developers,
+
+00:00:16.560 --> 00:00:19.239
+many of them in career-transitioning roles,
+
+00:00:19.240 --> 00:00:21.739
+oftentimes from boot camps.
+
+00:00:21.740 --> 00:00:26.739
+I've also managed a couple of small software development teams.
+
+NOTE Framing approaches
+
+00:00:26.740 --> 00:00:30.599
+So I want to think about mentoring and the framing approaches.
+
+00:00:30.600 --> 00:00:32.939
+We all don't know what we don't know.
+
+00:00:32.940 --> 00:00:36.419
+So while mentoring, I like to be curious---asking questions,
+
+00:00:36.420 --> 00:00:37.659
+I like to be visible,
+
+00:00:37.660 --> 00:00:41.939
+and I also like to pair so that we can share.
+
+NOTE What are you looking to learn?
+
+00:00:41.940 --> 00:00:45.299
+When I start, I like to ask the following type of question:
+
+00:00:45.300 --> 00:00:47.119
+"What have you been wanting to learn more of,
+
+00:00:47.120 --> 00:00:49.359
+get better at, and improve on?"
+
+00:00:49.360 --> 00:00:52.939
+Then I like to ask further questions to get an understanding
+
+00:00:52.940 --> 00:00:55.159
+of where they've been, where they're going,
+
+00:00:55.160 --> 00:00:57.279
+and what they'd like to achieve.
+
+00:00:57.280 --> 00:01:00.139
+Later I'll ask coaching questions, "what's going well,"
+
+00:01:00.140 --> 00:01:01.419
+"where are you getting stuck,"
+
+00:01:01.420 --> 00:01:05.999
+and "if you change one thing, what would it be?"
+
+NOTE Make the work visible
+
+00:01:06.000 --> 00:01:09.839
+So like many people, I shifted to remote work in 2020,
+
+00:01:09.840 --> 00:01:13.159
+and I've noticed a higher collaboration in remote work,
+
+00:01:13.160 --> 00:01:15.919
+when folks make their work visible.
+
+00:01:15.920 --> 00:01:18.199
+So to do that I host office hours,
+
+00:01:18.200 --> 00:01:20.679
+I try to attend other people's office hours,
+
+00:01:20.680 --> 00:01:23.439
+and I'll open up a Slack huddle and just code by myself,
+
+00:01:23.440 --> 00:01:29.319
+but let folks know, please hop in.
+
+NOTE Hop in and be curious
+
+00:01:29.320 --> 00:01:32.039
+I like to pay attention to other huddles that start.
+
+00:01:32.040 --> 00:01:35.239
+If they're going still for, like, 45 minutes or so,
+
+00:01:35.240 --> 00:01:36.799
+I'll hop in and say hello.
+
+00:01:36.800 --> 00:01:39.399
+It's even odds that they're moving along just fine
+
+00:01:39.400 --> 00:01:40.799
+or that they're stuck.
+
+00:01:40.800 --> 00:01:43.279
+So by hopping into the Slack huddle,
+
+00:01:43.280 --> 00:01:45.479
+I'm helping with a common problem.
+
+00:01:45.480 --> 00:01:47.199
+How do you know when you're stuck?
+
+00:01:47.200 --> 00:01:50.639
+This is something that---as a manager---folks want to know,
+
+00:01:50.640 --> 00:01:53.439
+how can I get unstuck faster?
+
+00:01:53.440 --> 00:01:57.119
+As a human, it can be frustrating to be stuck for a long time,
+
+00:01:57.120 --> 00:01:58.599
+but you also learn stuff
+
+00:01:58.600 --> 00:02:00.759
+when you're dealing with the hard things.
+
+00:02:00.760 --> 00:02:03.219
+So you really need to balance that time,
+
+00:02:03.220 --> 00:02:07.159
+and I find hopping in, just being a gentle presence,
+
+00:02:07.160 --> 00:02:10.359
+with yes... an agenda, but just to say hi,
+
+00:02:10.360 --> 00:02:15.879
+is crucial to help the team members move along.
+
+NOTE Pairing is for sharing
+
+00:02:15.880 --> 00:02:17.239
+Pairing is for sharing.
+
+00:02:17.240 --> 00:02:19.919
+When I pair, I like to let others drive.
+
+00:02:19.920 --> 00:02:22.239
+They're typing and working to resolve the problem.
+
+00:02:22.240 --> 00:02:24.599
+I'm giving guidance, asking questions,
+
+00:02:24.600 --> 00:02:27.119
+maybe thinking through a refactor.
+
+00:02:27.120 --> 00:02:31.159
+I'm also spending time observing how they interact with their editor.
+
+00:02:31.160 --> 00:02:35.839
+In the moment, I try to limit advice to, like, one concept.
+
+00:02:35.840 --> 00:02:37.799
+A lot of folks don't know that `Control-a`
+
+00:02:37.800 --> 00:02:39.719
+will take you to the beginning of line.
+
+00:02:39.720 --> 00:02:42.679
+Just sharing that is huge sometimes.
+
+00:02:42.680 --> 00:02:46.919
+Just gently do it and let it float there.
+
+00:02:46.920 --> 00:02:48.919
+And assuming we have a regular mentoring session,
+
+00:02:48.920 --> 00:02:50.399
+I'll make sure to ask how they're feeling
+
+00:02:50.400 --> 00:02:52.679
+about using their tools afterwards.
+
+00:02:52.680 --> 00:02:55.679
+I would love to get to the point where they ask,
+
+00:02:55.680 --> 00:02:58.759
+"You saw me using my editor, what is something
+
+00:02:58.760 --> 00:03:00.959
+I could learn?"
+
+00:03:00.960 --> 00:03:03.859
+I'm working on getting to that point.
+
+NOTE Editor functions
+
+00:03:03.860 --> 00:03:05.199
+While pairing, I like to pay attention
+
+00:03:05.200 --> 00:03:07.439
+to how folks handle the following.
+
+00:03:07.440 --> 00:03:08.559
+Where do they want to go?
+
+00:03:08.560 --> 00:03:10.759
+How do they get there?
+
+00:03:10.760 --> 00:03:12.079
+Here they are, now what?
+
+00:03:12.080 --> 00:03:13.599
+How do they summarize?
+
+00:03:13.600 --> 00:03:15.239
+I know what I can do in Emacs,
+
+00:03:15.240 --> 00:03:17.399
+and I assume that VS Code can do something similar.
+
+00:03:17.400 --> 00:03:23.239
+It's a matter of helping the mentees find those packages and plugins.
+
+NOTE Where do they want to go?
+
+00:03:23.240 --> 00:03:24.239
+Where to go?
+
+00:03:24.240 --> 00:03:25.759
+Search within a project.
+
+00:03:25.760 --> 00:03:27.999
+Everybody knows about this, but one thing
+
+00:03:28.000 --> 00:03:29.799
+that has been really critical for me
+
+00:03:29.800 --> 00:03:31.959
+has been the arrival of `Orderless`.
+
+00:03:31.960 --> 00:03:34.759
+A little quick demonstration.
+
+00:03:34.760 --> 00:03:40.719
+If I look, and I have this "chicken" and I do "spell",
+
+00:03:40.720 --> 00:03:42.200
+I have found one, and they don't have
+
+00:03:42.201 --> 00:03:43.380
+to be in the right order.
+
+00:03:43.381 --> 00:03:48.039
+In fact, I can go back, and "spell" is there.
+
+00:03:48.040 --> 00:03:52.759
+Super easy, helpful, so I don't have to think about it, the order.
+
+00:03:52.760 --> 00:03:54.719
+Search across projects.
+
+00:03:54.720 --> 00:03:59.519
+Cross-repository searching is super-simple in Emacs,
+
+00:03:59.520 --> 00:04:02.739
+and I've never seen anyone do it in VS Code.
+
+00:04:02.740 --> 00:04:05.639
+I'm also trying to introduce folks to command-line tools
+
+00:04:05.640 --> 00:04:07.959
+such as RipGrep and SilverSearcher,
+
+00:04:07.960 --> 00:04:10.639
+not just to look in the project, but to go one directory up
+
+00:04:10.640 --> 00:04:11.999
+and look across projects
+
+00:04:12.000 --> 00:04:15.059
+because sometimes when you're working on lots of different projects,
+
+00:04:15.060 --> 00:04:19.959
+there might be solutions or ideas that come from there.
+
+00:04:19.960 --> 00:04:23.239
+Also notice that a lot of people use directory trees to navigate,
+
+00:04:23.240 --> 00:04:25.599
+but I favor the fuzzy text.
+
+00:04:25.600 --> 00:04:27.759
+So I can do something like `Command-t`
+
+00:04:27.760 --> 00:04:31.279
+and start looking for things in there.
+
+00:04:31.280 --> 00:04:33.759
+I just type the name of the file.
+
+00:04:33.760 --> 00:04:35.319
+I use `consult-projectile`,
+
+00:04:35.320 --> 00:04:39.539
+which has a lot of really cool functionality.
+
+00:04:39.540 --> 00:04:43.079
+The big one being I can type `r`, recent file.
+
+00:04:43.080 --> 00:04:47.719
+I can type `p` and jump to a different project,
+
+00:04:47.720 --> 00:04:53.439
+so it's a quick navigation tool that I've not seen in VS Code.
+
+NOTE How do they get there?
+
+00:04:53.440 --> 00:04:56.519
+Next up is how do they get there?
+
+00:04:56.520 --> 00:04:58.959
+I like to use LSP for the languages,
+
+00:04:58.960 --> 00:05:02.879
+and I bound `M-.` to this
+
+00:05:02.880 --> 00:05:05.519
+and jump back and forth to definitions.
+
+00:05:05.520 --> 00:05:09.439
+I just showed `projectile` or `consult-projectile`
+
+00:05:09.440 --> 00:05:12.859
+and its super-amazing multifunction finder.
+
+00:05:12.860 --> 00:05:15.519
+Also another one that I am very avid about
+
+00:05:15.520 --> 00:05:19.519
+is the jump between definition and test.
+
+00:05:19.520 --> 00:05:22.839
+I bind that to `Super-.`
+
+00:05:22.840 --> 00:05:25.839
+and it helps me jump back and forth
+
+00:05:25.840 --> 00:05:28.519
+between my production code and my test code---
+
+00:05:28.520 --> 00:05:32.119
+especially in Ruby, there's an idiom for that.
+
+00:05:32.120 --> 00:05:36.639
+There is plugins in VS Code that does this correctly.
+
+NOTE Here they are, now what?
+
+00:05:36.640 --> 00:05:39.399
+Next up, now I'm here, what do I do?
+
+00:05:39.400 --> 00:05:44.599
+Word completion, Emacs just knocks everything out of the park:
+
+00:05:44.600 --> 00:05:48.199
+`dabbrev`, `templates`, `hippie-expand`, `completion-at-point`.
+
+00:05:48.200 --> 00:05:52.079
+Sometimes it just hurts to watch people type stuff
+
+00:05:52.080 --> 00:05:54.319
+that they could quickly expand
+
+00:05:54.320 --> 00:05:56.299
+because there are words within the code.
+
+00:05:56.300 --> 00:05:57.919
+Another one is auto-formatting.
+
+00:05:57.920 --> 00:06:00.039
+Tree sitter...its arrival is great.
+
+00:06:00.040 --> 00:06:01.479
+I assume this is going to get better.
+
+00:06:01.480 --> 00:06:04.919
+I love highlighting a region, hitting `TAB`, and it's just formatted.
+
+00:06:04.920 --> 00:06:08.760
+I've seen a lot of VS Coders... that doesn't work for them.
+
+00:06:08.761 --> 00:06:11.079
+Don't know why, trying to get them to see it.
+
+00:06:11.080 --> 00:06:12.900
+Multi-cursor [`multiple-cursors`] and `iedit`...
+
+00:06:12.901 --> 00:06:14.799
+took me a long time to explore `iedit`,
+
+00:06:14.800 --> 00:06:17.839
+but the practice... but practicing was huge,
+
+00:06:17.840 --> 00:06:21.479
+and it has transformed my approach to coding and typing.
+
+00:06:21.480 --> 00:06:24.519
+Folks know about multi-cursor editing and editing-in-region
+
+00:06:24.520 --> 00:06:27.919
+but make sure that they are aware of it.
+
+00:06:27.920 --> 00:06:29.719
+It's important.
+
+00:06:29.720 --> 00:06:32.619
+Next up is inline searching.
+
+00:06:32.620 --> 00:06:35.199
+My beloved Textmate... it was the first thing.
+
+00:06:35.200 --> 00:06:38.439
+In fact, it was why I chose not to use Emacs in 2005
+
+00:06:38.440 --> 00:06:41.679
+and went with Textmate.
+
+00:06:41.680 --> 00:06:43.759
+This is something quite simple.
+
+00:06:43.760 --> 00:06:49.999
+I can do `search` within here, and I can see "introduced",
+
+00:06:50.000 --> 00:06:52.239
+and it will show me the line.
+
+00:06:52.240 --> 00:06:54.119
+What I like about that is when I'm in code,
+
+00:06:54.120 --> 00:06:56.319
+I can see the neighborhood of other things
+
+00:06:56.320 --> 00:06:58.359
+and get a good idea of what's around.
+
+00:06:58.360 --> 00:07:01.639
+Yes, there is `occur-mode` that can be super useful,
+
+00:07:01.640 --> 00:07:03.839
+but I'm used to the Textmate in it.
+
+00:07:03.840 --> 00:07:06.639
+I just love it.
+
+NOTE How do they summarize?
+
+00:07:06.640 --> 00:07:08.679
+Next up is how they summarize.
+
+00:07:08.680 --> 00:07:11.719
+I've seen a lot of bootcamp graduates write commit messages
+
+00:07:11.720 --> 00:07:14.379
+by going to the command line.
+
+00:07:14.380 --> 00:07:17.039
+In my experience, commit messages written in the command line
+
+00:07:17.040 --> 00:07:18.199
+tend to be terse.
+
+00:07:18.200 --> 00:07:19.159
+They miss something.
+
+00:07:19.160 --> 00:07:23.479
+So I try to really quickly shift folks to use their text editor,
+
+00:07:23.480 --> 00:07:24.399
+encourage them and
+
+00:07:24.400 --> 00:07:28.039
+teach them about `$GIT_EDITOR` and `$EDITOR` for the environment variables
+
+00:07:28.040 --> 00:07:30.999
+so they can make their commits from the command line.
+
+00:07:31.000 --> 00:07:34.199
+And if not there, help them improve how they do VS Code.
+
+00:07:34.200 --> 00:07:35.919
+My little screed at the top:
+
+00:07:35.920 --> 00:07:38.959
+the interface for VS Code's commit is trash.
+
+00:07:38.960 --> 00:07:44.439
+It is why I stepped away from VS Code when I was exploring editors.
+
+NOTE General strategies
+
+00:07:44.440 --> 00:07:48.439
+Next up, my goal is to encourage folks to use editors for writing,
+
+00:07:48.440 --> 00:07:52.059
+to think about owning that tool.
+
+NOTE Commit to one item of learning each week
+
+00:07:52.060 --> 00:07:54.679
+I have them try to learn one thing a week.
+
+00:07:54.680 --> 00:07:55.919
+Maybe they aren't going to learn it,
+
+00:07:55.920 --> 00:07:57.799
+but just not to overwhelm them
+
+00:07:57.800 --> 00:07:59.879
+and find those high-value things.
+
+00:07:59.880 --> 00:08:03.719
+Jump to spec, jump to code... super-valuable
+
+00:08:03.720 --> 00:08:06.519
+because I see folks doing it a lot during the day,
+
+00:08:06.520 --> 00:08:10.079
+and it can really speed up the transition time
+
+00:08:10.080 --> 00:08:12.759
+and keep the focus between the test...
+
+00:08:12.760 --> 00:08:15.479
+what you're trying to test and what you're trying to define,
+
+00:08:15.480 --> 00:08:18.959
+which can get lost if you do the tree navigation.
+
+NOTE Practice within your knowledge domain
+
+00:08:18.960 --> 00:08:22.879
+Also I encourage people to practice their domain knowledge.
+
+00:08:22.880 --> 00:08:27.159
+I learned a lot about programming by doing a bunch of things
+
+00:08:27.160 --> 00:08:30.019
+related to RPGs---role-playing games.
+
+00:08:30.020 --> 00:08:33.119
+I did this previously in Ruby---dice rollers, note takers,
+
+00:08:33.120 --> 00:08:35.879
+random table lookups---and now I'm doing it in Emacs.
+
+00:08:35.880 --> 00:08:40.519
+Knowing the domain helps me set aside the problem space
+
+00:08:40.520 --> 00:08:41.999
+and then explore how I code
+
+00:08:42.000 --> 00:08:47.119
+and how I can implement things differently.
+
+NOTE Note-taking
+
+00:08:47.120 --> 00:08:51.239
+Note-taking: pay attention to how folks create a fleeting note.
+
+00:08:51.240 --> 00:08:54.639
+It can be excruciating as they try to figure out
+
+00:08:54.640 --> 00:08:55.599
+"where am I going to put this?"
+
+00:08:55.600 --> 00:08:56.159
+"What file?"
+
+00:08:56.160 --> 00:08:57.659
+"Where does it go?"
+
+00:08:57.660 --> 00:09:01.759
+Emacs, we have the *scratch* buffer or anything else,
+
+00:09:01.760 --> 00:09:07.119
+but ask them about their note-taking habits
+
+NOTE Help them navigate the proprietary software tar pits
+
+00:09:07.120 --> 00:09:11.639
+and help them navigate the proprietary software tar pits.
+
+00:09:11.640 --> 00:09:14.359
+We know that anything that is venture-capital funded
+
+00:09:14.360 --> 00:09:16.039
+will eventually collapse.
+
+00:09:16.040 --> 00:09:20.919
+We know that things that don't have a sustainable business model
+
+00:09:20.920 --> 00:09:22.399
+without surveillance capitalism
+
+00:09:22.400 --> 00:09:25.299
+is going to also have problems.
+
+00:09:25.300 --> 00:09:28.559
+Encourage folks to think about how they're owning their notes.
+
+00:09:28.560 --> 00:09:30.639
+Do they place true value on those,
+
+00:09:30.640 --> 00:09:33.119
+or are they things that are kind of ephemeral?
+
+00:09:33.120 --> 00:09:38.519
+And then help them find the thing that makes sense for them.
+
+NOTE Help show the joy of holisting computering
+
+00:09:38.520 --> 00:09:43.239
+Put another way, I want people to think holistically
+
+00:09:43.240 --> 00:09:47.739
+about their generalized "computering" environment.
+
+NOTE Playing is for staying
+
+00:09:47.740 --> 00:09:50.079
+And I also think about the reason why
+
+00:09:50.080 --> 00:09:53.679
+I've stayed a software developer for 25-years plus
+
+00:09:53.680 --> 00:09:57.999
+is because I approach all of this as play and storytelling.
+
+00:09:58.000 --> 00:10:02.439
+Sometimes happy byproduct is that I ship features and documentation
+
+00:10:02.440 --> 00:10:05.199
+and help people get stuff done.
+
+00:10:05.200 --> 00:10:07.959
+Yet I don't tell folks to use Emacs.
+
+00:10:07.960 --> 00:10:10.719
+Instead, I'm doing my best to show a myriad of reasons
+
+00:10:10.720 --> 00:10:14.899
+for why folks should consider Emacs.
+
+NOTE Conclusion
+
+00:10:14.900 --> 00:10:18.739
+In conclusion, ask questions.
+
+00:10:18.740 --> 00:10:22.399
+Find a person who is a VS Coder and just say,
+
+00:10:22.400 --> 00:10:23.879
+"hey, I learned something new."
+
+00:10:23.880 --> 00:10:26.719
+We play this game all the time, me and my coworker Kirk.
+
+00:10:26.720 --> 00:10:27.699
+I love it.
+
+00:10:27.700 --> 00:10:31.479
+Another goal is showing the malleability of Emacs,
+
+00:10:31.480 --> 00:10:34.399
+how easy it is to extend.
+
+00:10:34.400 --> 00:10:36.679
+And obviously there's so much more than what I've highlighted,
+
+00:10:36.680 --> 00:10:38.719
+but then again, that's Emacs.
+
+00:10:38.720 --> 00:10:44.200
+Thank you, and I look forward to your questions.
diff --git a/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt
new file mode 100644
index 00000000..20053853
--- /dev/null
+++ b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt
@@ -0,0 +1,680 @@
+WEBVTT
+
+
+00:00:03.560 --> 00:00:04.059
+[Speaker 0]: About 3
+
+00:00:16.020 --> 00:00:16.400
+seconds. And I believe we are live.
+
+00:00:17.280 --> 00:00:17.780
+Hi Edmund, how are you doing?
+
+00:00:19.240 --> 00:00:19.540
+[Speaker 1]: Hi, how's it going Leo?
+
+00:00:20.279 --> 00:00:20.560
+I'm doing well, thanks.
+
+00:00:20.560 --> 00:00:21.060
+Yourself?
+
+00:00:24.480 --> 00:00:24.640
+[Speaker 0]: I'm also doing well. So Edmund doesn't have
+
+00:00:26.980 --> 00:00:27.259
+his webcam on but he will be able to answer
+
+00:00:29.960 --> 00:00:30.360
+questions that you ask inside of the Azure
+
+00:00:32.159 --> 00:00:32.659
+pad that I've shared again on IRC.
+
+00:00:35.440 --> 00:00:35.560
+By the way, we only have 1 question and we
+
+00:00:37.120 --> 00:00:37.620
+have about 40 minutes of question time,
+
+00:00:40.380 --> 00:00:40.520
+so feel free to add as many questions as you
+
+00:00:41.940 --> 00:00:42.340
+want and in the meantime,
+
+00:00:43.380 --> 00:00:43.660
+we'll get started on the first 1.
+
+00:00:45.020 --> 00:00:45.060
+Unless, Edmond, do you have anything to say
+
+00:00:45.920 --> 00:00:46.420
+after your presentation?
+
+00:00:48.280 --> 00:00:48.780
+[Speaker 1]: No, we can jump in.
+
+00:00:51.560 --> 00:00:52.060
+[Speaker 0]: Okay, lovely. So first question,
+
+00:00:54.940 --> 00:00:55.200
+is the index, sorry, does the index really
+
+00:00:57.840 --> 00:00:58.100
+matter here? I mean his colleague is also
+
+00:01:00.380 --> 00:01:00.560
+using some A4 paper and you think that the
+
+00:01:02.400 --> 00:01:02.900
+index card is the most important thing here?
+
+00:01:04.540 --> 00:01:04.920
+[Speaker 1]: That's a great question.
+
+00:01:08.000 --> 00:01:08.200
+I mean, I think you can do anything with a
+
+00:01:09.520 --> 00:01:09.720
+larger piece of paper that you can do with a
+
+00:01:10.240 --> 00:01:10.460
+smaller piece of paper.
+
+00:01:12.280 --> 00:01:12.479
+But I actually encourage you to try this out.
+
+00:01:14.820 --> 00:01:15.020
+I did, not for research for this talk,
+
+00:01:17.040 --> 00:01:17.160
+but just when I read about Nabokov and his
+
+00:01:18.160 --> 00:01:18.400
+index cards to begin with,
+
+00:01:20.380 --> 00:01:20.660
+I kind of tried it out a little bit and wrote
+
+00:01:22.480 --> 00:01:22.720
+some shorter things on index cards and so on
+
+00:01:24.640 --> 00:01:25.120
+and there really is something about the size
+
+00:01:27.940 --> 00:01:28.440
+and the kind of ability to manipulate them.
+
+00:01:30.200 --> 00:01:30.360
+You really can bundle them and move them
+
+00:01:33.420 --> 00:01:33.720
+around easier and I think that that I think
+
+00:01:35.800 --> 00:01:35.920
+he enjoyed that. So sure I mean I think you
+
+00:01:37.540 --> 00:01:37.660
+can do anything with a4 paper that you could
+
+00:01:38.860 --> 00:01:39.140
+do with index cards but I think there's
+
+00:01:40.760 --> 00:01:41.200
+something about that form that lends itself
+
+00:01:43.840 --> 00:01:44.160
+to the especially to the reorganization maybe
+
+00:01:45.540 --> 00:01:45.820
+to the focus as well just because it's
+
+00:01:47.060 --> 00:01:47.220
+smaller but but definitely to the
+
+00:01:47.220 --> 00:01:47.720
+reorganization.
+
+00:01:53.600 --> 00:01:53.940
+[Speaker 0]: Definitely So we have a lot more questions
+
+00:01:54.640 --> 00:01:54.960
+now. So thank you, everyone,
+
+00:01:56.479 --> 00:01:56.979
+for answering my plea for more questions.
+
+00:01:59.760 --> 00:02:00.060
+Next question. How do you explore the second
+
+00:02:01.880 --> 00:02:02.080
+level headings, i.e. The scenes in this
+
+00:02:03.600 --> 00:02:04.100
+example, without the heading itself,
+
+00:02:05.740 --> 00:02:06.240
+just the content? Is that clear enough?
+
+00:02:09.240 --> 00:02:09.740
+[Speaker 1]: Great question. Yeah, so I've tried 2 ways,
+
+00:02:13.280 --> 00:02:13.440
+sorry, 3 ways with this and landed on 1 that
+
+00:02:16.080 --> 00:02:16.480
+I like. Originally I used the OX package.
+
+00:02:20.080 --> 00:02:20.220
+There's an OX ignore thing in there where you
+
+00:02:23.240 --> 00:02:23.420
+can add an ignore tag to where you don't want
+
+00:02:24.720 --> 00:02:25.140
+the headings, but you do want the content
+
+00:02:26.920 --> 00:02:27.240
+exported. I found that a little bit annoying,
+
+00:02:27.940 --> 00:02:28.280
+just visually annoying,
+
+00:02:31.320 --> 00:02:31.820
+when I'm, again, My theme here is navigating
+
+00:02:34.840 --> 00:02:35.160
+100,000 word documents effectively and having
+
+00:02:36.900 --> 00:02:37.400
+that extra visual noise was kind of a pain.
+
+00:02:40.520 --> 00:02:40.760
+So I ended up, first I just did like a dumb
+
+00:02:43.040 --> 00:02:43.180
+ox script as part of my publication kind of
+
+00:02:47.720 --> 00:02:47.980
+pipeline that removed headlines at the scene
+
+00:02:48.940 --> 00:02:49.240
+level. And then actually,
+
+00:02:50.980 --> 00:02:51.220
+because I ended up leaning so heavily on
+
+00:02:53.680 --> 00:02:53.880
+Pandoc, and Pandoc, for those of you who have
+
+00:02:56.200 --> 00:02:56.700
+not looked at recent versions of Pandoc,
+
+00:03:00.920 --> 00:03:01.300
+they've got a really fantastic way to use Lua
+
+00:03:02.420 --> 00:03:02.920
+at this point to write filters.
+
+00:03:04.940 --> 00:03:05.140
+So you can kind of take the AST of your
+
+00:03:07.120 --> 00:03:07.400
+document and run these very simple Lua
+
+00:03:09.140 --> 00:03:09.620
+filters over it. They used to be in Haskell,
+
+00:03:11.780 --> 00:03:12.120
+which I'm not smart enough to write Haskell
+
+00:03:13.140 --> 00:03:13.500
+is 1 of the things that I've discovered.
+
+00:03:14.440 --> 00:03:14.760
+I keep bouncing off of it,
+
+00:03:16.360 --> 00:03:16.720
+but I'm just smart enough to write Lua.
+
+00:03:19.480 --> 00:03:19.840
+And so I use a Lua filter now,
+
+00:03:21.180 --> 00:03:21.380
+which I'm happy to publish to anyone who's
+
+00:03:22.880 --> 00:03:23.380
+interested. That basically lets me say,
+
+00:03:27.440 --> 00:03:27.560
+you know, what level headings to get rid of
+
+00:03:28.740 --> 00:03:29.120
+the heading, but publish the content.
+
+00:03:30.320 --> 00:03:30.480
+And part of the reason that's been useful is
+
+00:03:31.920 --> 00:03:32.040
+that some of the other novels I'm working on
+
+00:03:33.540 --> 00:03:33.680
+for example have different levels of
+
+00:03:35.640 --> 00:03:35.740
+hierarchy where maybe there's a part and then
+
+00:03:37.260 --> 00:03:37.640
+you know at the top level and then chapter
+
+00:03:39.160 --> 00:03:39.520
+and then scene and it's now the third level
+
+00:03:41.400 --> 00:03:41.580
+instead of the second and it's much easier in
+
+00:03:43.840 --> 00:03:44.060
+the Lua to just be like remove the third
+
+00:03:45.400 --> 00:03:45.700
+level headings or the second level headings
+
+00:03:47.680 --> 00:03:47.860
+or whatever it is so that's been that's been
+
+00:03:47.860 --> 00:03:48.360
+helpful.
+
+00:03:53.040 --> 00:03:53.540
+[Speaker 0]: Great, Moving on to the next question,
+
+00:03:58.120 --> 00:03:58.260
+slightly off topic, where can we see your
+
+00:03:58.260 --> 00:03:58.760
+novels?
+
+00:04:01.060 --> 00:04:01.560
+[Speaker 1]: Oh well yeah, you can,
+
+00:04:05.500 --> 00:04:05.560
+they're on Amazon, there's 2 of them and a
+
+00:04:06.160 --> 00:04:06.660
+book of short stories.
+
+00:04:10.120 --> 00:04:10.440
+I think the short stories and the second
+
+00:04:11.960 --> 00:04:12.280
+novel, which is called World Enough in Time,
+
+00:04:13.940 --> 00:04:14.160
+which is the 1 that kind of prompted this
+
+00:04:16.160 --> 00:04:16.660
+talk, are probably of more interest to this,
+
+00:04:18.320 --> 00:04:18.820
+to the Emacs focused group.
+
+00:04:20.380 --> 00:04:20.740
+The first one's like a philosophical murder
+
+00:04:25.240 --> 00:04:25.440
+mystery, but the World Enough in Time is a
+
+00:04:29.820 --> 00:04:30.320
+kind of Douglas Adams inspired sci-fi comedy
+
+00:04:34.440 --> 00:04:34.940
+about kind of hijinks on a relativistic speed
+
+00:04:37.360 --> 00:04:37.480
+space cruiser, which was a lot of fun to
+
+00:04:38.980 --> 00:04:39.480
+write. It has a lot of twisty subplots,
+
+00:04:42.500 --> 00:04:42.720
+which is where I developed that technique of
+
+00:04:46.560 --> 00:04:46.780
+being able to filter down to tags and see a
+
+00:04:47.840 --> 00:04:48.340
+reduced version of the novel,
+
+00:04:51.560 --> 00:04:51.960
+which was very handy when trying to juggle 13
+
+00:04:53.520 --> 00:04:54.020
+subplots. So yeah, check it out.
+
+00:04:57.240 --> 00:04:57.340
+[Speaker 0]: Great, we'll make sure that you have the
+
+00:04:59.860 --> 00:05:00.360
+links available on the talk page afterwards.
+
+00:05:03.420 --> 00:05:03.740
+Right now I sadly have to host so I cannot
+
+00:05:05.680 --> 00:05:05.820
+look up the links but we'll make sure or if
+
+00:05:08.100 --> 00:05:08.600
+[Speaker 1]: I put it in there for you.
+
+00:05:09.020 --> 00:05:09.520
+[Speaker 0]: anyone in the chat... Oh you did?
+
+00:05:13.800 --> 00:05:13.940
+Yeah. In the meantime we'll move on to the
+
+00:05:16.560 --> 00:05:17.060
+next question. Have you looked at the Denote
+
+00:05:19.700 --> 00:05:20.080
+signature features? The hierarchical nature
+
+00:05:23.180 --> 00:05:23.520
+of Lumen's ideas and index cards works well
+
+00:05:24.100 --> 00:05:24.600
+with Denote signatures.
+
+00:05:26.120 --> 00:05:26.620
+So are you familiar with Denote first?
+
+00:05:28.740 --> 00:05:28.840
+[Speaker 1]: I am not. No, it sounds like something that I
+
+00:05:29.240 --> 00:05:29.740
+should check out.
+
+00:05:33.080 --> 00:05:33.420
+[Speaker 0]: Yeah, Denote is a way to work with slip
+
+00:05:35.460 --> 00:05:35.640
+boxes. We talked a little bit about it
+
+00:05:37.240 --> 00:05:37.740
+earlier today. We talked about Orgroam,
+
+00:05:40.600 --> 00:05:40.900
+we talked about Denote as well as a lighter
+
+00:05:41.580 --> 00:05:42.080
+alternative to Orgroam.
+
+00:05:45.520 --> 00:05:45.920
+And yeah, the organization with index cards
+
+00:05:47.360 --> 00:05:47.720
+feels like it's something that would highly
+
+00:05:50.740 --> 00:05:50.900
+benefit from linking and back links and any
+
+00:05:53.880 --> 00:05:54.380
+kind of UX functionality for relating pieces
+
+00:05:56.680 --> 00:05:56.980
+of information. So yeah,
+
+00:05:57.620 --> 00:05:58.120
+definitely look it up.
+
+00:06:00.040 --> 00:06:00.460
+[Speaker 1]: Yeah, I'm a heavy org-roam user.
+
+00:06:03.280 --> 00:06:03.680
+I use org-roam for a lot of different stuff
+
+00:06:05.740 --> 00:06:05.860
+and I would love, I will definitely check out
+
+00:06:06.740 --> 00:06:07.240
+Denote as an alternative.
+
+00:06:09.520 --> 00:06:09.960
+[Speaker 0]: Sure, I'm not particularly personally
+
+00:06:11.720 --> 00:06:12.180
+familiar with what Signature is within Denote
+
+00:06:13.940 --> 00:06:14.060
+and it'd be great if the person who asked the
+
+00:06:15.580 --> 00:06:15.980
+question could perhaps provide more details
+
+00:06:17.980 --> 00:06:18.180
+so that Edmund could get a little more
+
+00:06:20.000 --> 00:06:20.500
+information when he returns to the document.
+
+00:06:21.480 --> 00:06:21.980
+But yeah, if you're using Org-ROM,
+
+00:06:25.140 --> 00:06:25.280
+you're already within the mindset that you
+
+00:06:27.180 --> 00:06:27.500
+need, and perhaps you'd gain a little bit
+
+00:06:29.260 --> 00:06:29.760
+extra stuff from using Dino's signature,
+
+00:06:32.920 --> 00:06:33.240
+I assume. We have 8 minutes.
+
+00:06:34.040 --> 00:06:34.540
+We're still good on time.
+
+00:06:36.500 --> 00:06:36.980
+Next question, do you have a workflow
+
+00:06:39.020 --> 00:06:39.360
+combining handwritten index cards and org
+
+00:06:39.360 --> 00:06:39.860
+mode?
+
+00:06:42.400 --> 00:06:42.900
+[Speaker 1]: Great question. I do not.
+
+00:06:46.620 --> 00:06:47.120
+I do write by hand when I get,
+
+00:06:49.120 --> 00:06:49.280
+I don't know what a good term for it is,
+
+00:06:51.420 --> 00:06:51.580
+I'll call it like editorial paralysis or
+
+00:06:53.100 --> 00:06:53.320
+something when I find it very hard to move
+
+00:06:54.720 --> 00:06:54.880
+forward in something because I keep going
+
+00:06:56.940 --> 00:06:57.240
+back and tweaking. And I will handwrite stuff
+
+00:06:58.520 --> 00:06:58.660
+at that point and then type it in because
+
+00:07:02.120 --> 00:07:02.540
+it's so much harder to get stuck in editing
+
+00:07:04.480 --> 00:07:04.600
+mode when you have to move forward on the
+
+00:07:07.360 --> 00:07:07.860
+page. I don't use index cards.
+
+00:07:11.680 --> 00:07:12.080
+In the blog article that I link in my talk,
+
+00:07:14.400 --> 00:07:14.900
+the ewj.io slash emacs 1,
+
+00:07:18.240 --> 00:07:18.740
+I did try using handwritten or spreadsheet
+
+00:07:22.360 --> 00:07:22.720
+outlines at 1 point and found them very,
+
+00:07:27.640 --> 00:07:27.840
+very clumsy for novel writing just because I
+
+00:07:29.820 --> 00:07:30.320
+do so much, I mean, I do so much revision
+
+00:07:32.600 --> 00:07:32.720
+that moving things around meant that I had to
+
+00:07:34.480 --> 00:07:34.760
+keep 2 things in sync with each other,
+
+00:07:35.440 --> 00:07:35.660
+the pros and the outline.
+
+00:07:37.540 --> 00:07:38.040
+And that was what really led me to Org Mode
+
+00:07:39.800 --> 00:07:40.080
+as a way to keep the, again,
+
+00:07:42.040 --> 00:07:42.180
+I think part of the key for me is keeping the
+
+00:07:44.580 --> 00:07:45.060
+outline and the pros right next to each other
+
+00:07:46.440 --> 00:07:46.940
+in a way that they move around which is just
+
+00:07:48.800 --> 00:07:49.000
+really, I don't know, for me really really
+
+00:07:49.000 --> 00:07:49.500
+powerful.
+
+00:07:54.280 --> 00:07:54.480
+[Speaker 0]: Okay great, so we finished the list of
+
+00:07:55.840 --> 00:07:56.340
+questions available on the pad,
+
+00:07:58.260 --> 00:07:58.440
+but I see that some people have joined us on
+
+00:08:01.100 --> 00:08:01.300
+BBB, so hi everyone. If you have any
+
+00:08:03.340 --> 00:08:03.600
+questions feel free to unmute yourself and
+
+00:08:06.560 --> 00:08:06.820
+ask them. Otherwise, we might go on a break.
+
+00:08:08.360 --> 00:08:08.520
+So I'm going to give you about 10 seconds to
+
+00:08:14.480 --> 00:08:14.760
+unmute yourself. Or if you just want to add
+
+00:08:15.660 --> 00:08:15.860
+more questions on the pad,
+
+00:08:17.680 --> 00:08:17.920
+that's also fine. And that'll give you about
+
+00:08:19.540 --> 00:08:19.860
+30 seconds. Otherwise,
+
+00:08:20.660 --> 00:08:21.160
+we'll need to go on a break.
+
+00:08:24.020 --> 00:08:24.520
+And in the meantime, I'll thank you,
+
+00:08:25.600 --> 00:08:26.100
+Edmund, for your presentation,
+
+00:08:27.880 --> 00:08:28.100
+because it's always nice,
+
+00:08:31.400 --> 00:08:31.900
+you know, we The reason why we have 2 tracks,
+
+00:08:34.200 --> 00:08:34.280
+and we've been having 2 tracks for the last 2
+
+00:08:36.039 --> 00:08:36.260
+or 3 editions of EmacsConf is because it's
+
+00:08:38.799 --> 00:08:39.299
+really nice to have those talks which are
+
+00:08:43.500 --> 00:08:43.840
+still related to Emacs and to far distance
+
+00:08:45.440 --> 00:08:45.700
+developments because we are obviously using
+
+00:08:48.160 --> 00:08:48.400
+packages. But it's really nice to see when we
+
+00:08:51.960 --> 00:08:52.200
+foray into other areas like writing or any
+
+00:08:53.400 --> 00:08:53.900
+kind of academia-based topics.
+
+00:08:55.440 --> 00:08:55.840
+So thank you, it's really nice.
+
+00:09:01.500 --> 00:09:01.720
+It brings different colors to the spectrum of
+
+00:09:03.580 --> 00:09:03.900
+what EmacsConf is and what ultimately Emacs
+
+00:09:04.680 --> 00:09:05.180
+is as well. Thank you.
+
+00:09:06.960 --> 00:09:07.200
+[Speaker 1]: Well thanks to everyone who tuned in and Leo
+
+00:09:08.160 --> 00:09:08.560
+thanks to you and all the other organizers
+
+00:09:09.060 --> 00:09:09.340
+for putting this together.
+
+00:09:09.720 --> 00:09:10.220
+Appreciate it.
+
+00:09:12.720 --> 00:09:12.840
+[Speaker 0]: Thank you. All right I think we're going to
+
+00:09:14.380 --> 00:09:14.540
+go on a little break for 5 minutes because I
+
+00:09:16.060 --> 00:09:16.560
+don't see other questions being asked.
+
+00:09:18.900 --> 00:09:19.160
+So everyone we'll see you again in 5 minutes
+
+00:09:19.900 --> 00:09:20.400
+and thank you again, Edmund.
+
+00:09:20.720 --> 00:09:21.220
+[Speaker 1]: Cheers.
diff --git a/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt
new file mode 100644
index 00000000..0dc31572
--- /dev/null
+++ b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt
@@ -0,0 +1,17 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:45.759
+Introduction
+
+00:00:45.760 --> 00:02:24.079
+Nabokov's process of writing novels
+
+00:02:24.080 --> 00:04:46.559
+Three practical problems novelists face
+
+00:04:46.560 --> 00:08:55.599
+Org mode for writing novels
+
+00:08:55.600 --> 00:09:50.840
+Takeaways and next steps
diff --git a/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt
new file mode 100644
index 00000000..9bf4de03
--- /dev/null
+++ b/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt
@@ -0,0 +1,767 @@
+WEBVTT captioned by bhavin192, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:05.239
+Hello, fellow Emacs enthusiasts.
+
+00:00:05.240 --> 00:00:06.799
+My name is Edmund Jorgensen.
+
+00:00:06.800 --> 00:00:08.519
+I'm a software engineer by day,
+
+00:00:08.520 --> 00:00:10.599
+but by night I love to write novels,
+
+00:00:10.600 --> 00:00:11.774
+and I lean on Emacs heavily
+
+00:00:11.774 --> 00:00:13.759
+for both of these activities.
+
+00:00:13.760 --> 00:00:15.879
+Today, I would like to talk to you about how Emacs,
+
+00:00:15.880 --> 00:00:17.319
+specifically with Org mode,
+
+00:00:17.320 --> 00:00:18.440
+has helped me manage some of the practical
+
+00:00:18.840 --> 00:00:20.940
+difficulties of writing long-form prose,
+
+00:00:20.940 --> 00:00:22.039
+novels in my case,
+
+00:00:22.040 --> 00:00:24.319
+and I'd like to get at this by talking about how
+
+00:00:24.320 --> 00:00:26.439
+another, much more famous novelist managed
+
+00:00:26.440 --> 00:00:28.359
+some of those same difficulties in a way
+
+00:00:28.360 --> 00:00:30.874
+that makes me suspect he might well use Emacs
+
+00:00:30.874 --> 00:00:31.959
+and Org mode himself
+
+00:00:31.960 --> 00:00:34.519
+if he were still alive and writing today.
+
+00:00:34.520 --> 00:00:35.599
+This talk will probably be
+
+00:00:35.600 --> 00:00:36.959
+of the most interest to listeners
+
+00:00:36.960 --> 00:00:39.239
+who either already write long-form prose in Emacs
+
+00:00:39.240 --> 00:00:40.879
+or are considering doing so,
+
+00:00:40.880 --> 00:00:42.039
+but I think that anyone
+
+00:00:42.040 --> 00:00:44.079
+with an interest in literature or Emacs
+
+00:00:44.080 --> 00:00:45.759
+will find something to take away.
+
+NOTE Nabokov's process of writing novels
+
+00:00:45.760 --> 00:00:51.119
+So let's get to it.
+
+00:00:51.120 --> 00:00:53.919
+Here's a picture of a man lying on a bed,
+
+00:00:53.920 --> 00:00:55.999
+writing something on an index card.
+
+00:00:56.000 --> 00:00:57.519
+If we didn't know any better,
+
+00:00:57.520 --> 00:00:58.959
+we might think that he was just jotting down
+
+00:00:58.960 --> 00:01:01.679
+a recipe for beef stew or something like that.
+
+00:01:01.680 --> 00:01:03.839
+But in fact, this is not just any old man.
+
+00:01:03.840 --> 00:01:06.174
+This is Vladimir Nabokov, one of the most
+
+00:01:06.174 --> 00:01:08.079
+celebrated novelists of the 20th century,
+
+00:01:08.080 --> 00:01:09.279
+and he's not jotting down
+
+00:01:09.280 --> 00:01:11.479
+a recipe for beef stew in this picture.
+
+00:01:11.480 --> 00:01:12.759
+He's actually hard at work here,
+
+00:01:12.760 --> 00:01:15.007
+composing a classic of English literature
+
+00:01:15.007 --> 00:01:16.559
+on an index card.
+
+00:01:16.560 --> 00:01:18.799
+That's how he wrote all his novels, in fact,
+
+00:01:18.800 --> 00:01:20.159
+on index cards.
+
+00:01:20.160 --> 00:01:22.759
+I don't mean that he just took notes on these cards
+
+00:01:22.760 --> 00:01:24.159
+or wrote outlines on them.
+
+00:01:24.160 --> 00:01:25.679
+He did both of those things as well,
+
+00:01:25.680 --> 00:01:28.919
+but he also wrote the actual prose of his novels,
+
+00:01:28.920 --> 00:01:32.799
+word by word, sentence by sentence, on index cards.
+
+00:01:32.800 --> 00:01:37.359
+Let's see what that looked like at scale.
+
+00:01:37.360 --> 00:01:39.440
+This box you see here,
+
+00:01:39.440 --> 00:01:41.239
+full of groups of bundled cards,
+
+00:01:41.240 --> 00:01:43.919
+is what a novel in progress looked like for Nabokov.
+
+00:01:43.920 --> 00:01:46.079
+If you squint, you can see that these cards
+
+00:01:46.080 --> 00:01:47.639
+were from the composition of Lolita,
+
+00:01:47.640 --> 00:01:50.559
+probably his most famous novel.
+
+00:01:50.560 --> 00:01:53.719
+So why did he write novels on index cards?
+
+00:01:53.720 --> 00:01:56.039
+It's not necessarily an obvious choice.
+
+00:01:56.040 --> 00:01:58.999
+Yes, sadly, Emacs wasn't available to him at the time,
+
+00:01:59.000 --> 00:02:01.239
+but most writers in his day,
+
+00:02:01.240 --> 00:02:02.640
+if they weren't using typewriters,
+
+00:02:02.640 --> 00:02:03.919
+which were available,
+
+00:02:03.920 --> 00:02:05.999
+were using notebooks or loose-leaf sheets
+
+00:02:06.000 --> 00:02:07.359
+or something like that.
+
+00:02:07.360 --> 00:02:09.959
+Not these tiny little index cards.
+
+00:02:09.960 --> 00:02:11.919
+But Nabokov loved index cards.
+
+00:02:11.920 --> 00:02:14.359
+He swore by them because they represented
+
+00:02:14.360 --> 00:02:15.199
+an elegant solution
+
+00:02:15.200 --> 00:02:17.999
+to three of the most pressing practical problems
+
+00:02:18.000 --> 00:02:24.079
+that every novelist faces.
+
+NOTE Three practical problems novelists face
+
+00:02:24.080 --> 00:02:25.307
+Writing a good novel
+
+00:02:25.307 --> 00:02:27.479
+is artistically difficult, of course.
+
+00:02:27.480 --> 00:02:28.959
+You have to write something interesting
+
+00:02:28.960 --> 00:02:30.107
+with a good story,
+
+00:02:30.107 --> 00:02:31.919
+something that people want to read.
+
+00:02:31.920 --> 00:02:33.519
+But writing any novel at all,
+
+00:02:33.520 --> 00:02:34.999
+whether it's good or bad,
+
+00:02:35.000 --> 00:02:37.719
+is brutally, practically difficult.
+
+00:02:37.720 --> 00:02:39.919
+You're hacking something like 100,000 words
+
+00:02:39.920 --> 00:02:42.440
+into unified shape over a long period of time,
+
+00:02:42.440 --> 00:02:43.799
+months or years.
+
+00:02:43.800 --> 00:02:45.719
+There are organizational challenges
+
+00:02:45.720 --> 00:02:46.959
+inherent in that process,
+
+00:02:46.960 --> 00:02:48.919
+and each writer needs practical techniques
+
+00:02:48.920 --> 00:02:51.079
+to manage those challenges.
+
+00:02:51.080 --> 00:02:53.399
+The most basic challenge, of course, is that,
+
+00:02:53.400 --> 00:02:55.359
+unless you're trying to bring back
+
+00:02:55.360 --> 00:02:57.040
+the Homeric Bard tradition
+
+00:02:57.040 --> 00:02:59.599
+of reciting books from memory in firelit halls,
+
+00:02:59.600 --> 00:03:01.199
+you need to actually set down
+
+00:03:01.200 --> 00:03:03.319
+those 100,000 words on some medium.
+
+00:03:03.320 --> 00:03:05.839
+In Nabokov's case, index cards worked fine for this.
+
+00:03:05.840 --> 00:03:08.439
+A little cramped, maybe, but workable.
+
+00:03:08.440 --> 00:03:09.679
+Secondly, as you're writing,
+
+00:03:09.680 --> 00:03:11.719
+you're bound to think of little but important things
+
+00:03:11.720 --> 00:03:13.919
+about the story that you want to record.
+
+00:03:13.920 --> 00:03:16.207
+I'm not talking here about big thematic notes
+
+00:03:16.207 --> 00:03:19.039
+or research that can go in a separate document,
+
+00:03:19.040 --> 00:03:21.159
+but smaller, more contextual notes
+
+00:03:21.160 --> 00:03:23.879
+that belong right along the prose that they refer to.
+
+00:03:23.880 --> 00:03:26.639
+These might be reminders, like,
+
+00:03:26.640 --> 00:03:28.519
+"Remember to clean up this sentence,"
+
+00:03:28.520 --> 00:03:29.707
+or questions for yourself
+
+00:03:29.707 --> 00:03:31.907
+to consider during rewrites, like,
+
+00:03:31.907 --> 00:03:33.239
+"Why does Shirley feel this way here?"
+
+00:03:33.240 --> 00:03:35.599
+Nabokov recorded these notes
+
+00:03:35.600 --> 00:03:37.559
+in the margins of his cards or on the backs.
+
+00:03:37.560 --> 00:03:39.999
+Paper, in general, is great for this kind of
+
+00:03:40.000 --> 00:03:41.039
+intertextual note-taking.
+
+00:03:41.040 --> 00:03:44.599
+That's not particular to index cards.
+
+00:03:44.600 --> 00:03:47.919
+But what Nabokov really loved about index cards
+
+00:03:47.920 --> 00:03:49.519
+was how they solved the novelist's
+
+00:03:49.520 --> 00:03:52.119
+third and most difficult practical problem,
+
+00:03:52.120 --> 00:03:54.279
+which is imposing some kind of structure
+
+00:03:54.280 --> 00:03:55.599
+on this mountain of words.
+
+00:03:55.600 --> 00:03:58.519
+To have any hope of wrangling a novel into being,
+
+00:03:58.520 --> 00:04:00.119
+you need some way to break it down
+
+00:04:00.120 --> 00:04:03.639
+into parts, chapters, scenes, snatches of dialogue.
+
+00:04:03.640 --> 00:04:05.839
+You need some kind of higher-level outline
+
+00:04:05.840 --> 00:04:07.999
+that you can read, navigate, and rearrange
+
+00:04:08.000 --> 00:04:09.919
+as you consider and reconsider your story.
+
+00:04:09.920 --> 00:04:11.919
+You need structure.
+
+00:04:11.920 --> 00:04:14.879
+Index cards gave Nabokov a really powerful way
+
+00:04:14.880 --> 00:04:16.239
+to impose this structure
+
+00:04:16.240 --> 00:04:18.559
+because they created small, independent
+
+00:04:18.560 --> 00:04:18.999
+chunks of prose
+
+00:04:19.000 --> 00:04:21.359
+that he could bundle together into groups,
+
+00:04:21.360 --> 00:04:22.759
+like we saw in the box.
+
+00:04:22.760 --> 00:04:31.959
+This let him navigate his novel in progress quickly.
+
+00:04:31.960 --> 00:04:33.799
+He could just flip through those bundles,
+
+00:04:33.800 --> 00:04:36.119
+bundle by bundle, instead of card by card.
+
+00:04:36.120 --> 00:04:38.240
+He could also impose on
+
+00:04:38.240 --> 00:04:40.079
+and modify the structure of his novel
+
+00:04:40.080 --> 00:04:41.999
+just by shuffling those bundles around.
+
+00:04:42.000 --> 00:04:45.307
+So that's why Nabokov loved index cards
+
+00:04:45.307 --> 00:04:46.559
+for writing novels.
+
+NOTE Org mode for writing novels
+
+00:04:46.560 --> 00:04:48.759
+Now I'd love to talk about
+
+00:04:48.760 --> 00:04:51.279
+why I love Org mode so much for writing novels
+
+00:04:51.280 --> 00:04:53.999
+and how it helps me tackle those same challenges.
+
+00:04:54.000 --> 00:05:01.759
+The first practical challenge,
+
+00:05:01.760 --> 00:05:03.759
+recording your words on some medium,
+
+00:05:03.760 --> 00:05:04.774
+is pretty simple.
+
+00:05:04.774 --> 00:05:06.439
+Org mode is a part of Emacs,
+
+00:05:06.440 --> 00:05:09.199
+a text editor, so you can just type in your text.
+
+00:05:09.200 --> 00:05:10.919
+We're not going to spend any more time on that.
+
+00:05:10.920 --> 00:05:13.439
+For the second practical challenge,
+
+00:05:13.440 --> 00:05:16.039
+recording small intertextual notes,
+
+00:05:16.040 --> 00:05:19.039
+Org mode offers comments, like this one here.
+
+00:05:19.040 --> 00:05:21.959
+The comment, "maybe I need to say which store?",
+
+00:05:21.960 --> 00:05:23.239
+with the leading pound sign there.
+
+00:05:23.240 --> 00:05:25.874
+I think that comments are generally
+
+00:05:25.874 --> 00:05:28.240
+underappreciated outside of coding.
+
+00:05:28.240 --> 00:05:29.799
+When writing fiction, for example,
+
+00:05:29.800 --> 00:05:32.359
+I love that Org mode lets me keep these comments
+
+00:05:32.360 --> 00:05:33.959
+close to the prose they refer to.
+
+00:05:33.960 --> 00:05:37.159
+I can see right here that I'm talking about
+
+00:05:37.160 --> 00:05:39.119
+saying which store in this first line,
+
+00:05:39.120 --> 00:05:40.599
+"One day, Bob went to the store."
+
+00:05:40.600 --> 00:05:43.999
+I get to keep these things close to
+
+00:05:44.000 --> 00:05:44.999
+the prose they refer to
+
+00:05:45.000 --> 00:05:46.519
+without ever having to worry that
+
+00:05:46.520 --> 00:05:48.479
+they'll accidentally be exported to a reader.
+
+00:05:48.480 --> 00:05:50.540
+That's great.
+
+00:05:50.540 --> 00:05:52.807
+So let's talk about how Org Mode handles the third
+
+00:05:52.807 --> 00:06:00.919
+and most brutal challenge of all, which is structure.
+
+00:06:00.920 --> 00:06:03.039
+Here we've taken the same text
+
+00:06:03.040 --> 00:06:04.879
+and we've imposed some structure on it.
+
+00:06:04.880 --> 00:06:07.807
+Like index cards,
+
+00:06:07.807 --> 00:06:09.639
+this is where Org mode really shines.
+
+00:06:09.640 --> 00:06:11.999
+Org mode extends outline mode,
+
+00:06:12.000 --> 00:06:14.359
+which is built around the concept of header lines,
+
+00:06:14.360 --> 00:06:15.959
+with different levels denoted by
+
+00:06:15.960 --> 00:06:18.079
+different numbers of leading asterisks (`*`).
+
+00:06:18.080 --> 00:06:20.674
+Personally, I tend to use top line headers
+
+00:06:20.974 --> 00:06:23.359
+as chapters and second line headers as scenes.
+
+00:06:23.360 --> 00:06:26.079
+You can see that here, where chapter one says
+
+00:06:26.080 --> 00:06:27.319
+"Bob and Shirley meet."
+
+00:06:27.320 --> 00:06:29.599
+Here's a scene, "Bob goes to the store."
+
+00:06:29.600 --> 00:06:32.639
+And here below is chapter two, yet unwritten,
+
+00:06:32.640 --> 00:06:34.319
+where Bob goes to work.
+
+00:06:34.320 --> 00:06:39.679
+Pretty exciting. Since Org mode supports folding,
+
+00:06:39.680 --> 00:06:42.159
+I can read quickly through a summary of my novel
+
+00:06:42.160 --> 00:06:44.079
+at either the chapter or the scene level
+
+00:06:44.080 --> 00:06:46.040
+just by flipping through different levels of
+
+00:06:46.240 --> 00:06:48.799
+visibility, just like Nabokov could flip through
+
+00:06:48.800 --> 00:06:51.307
+different bundles of cards.
+
+00:06:51.307 --> 00:06:52.599
+So here's the chapter level.
+
+00:06:52.600 --> 00:06:54.719
+I can see at a chapter level,
+
+00:06:54.720 --> 00:06:56.679
+"Bob and Shirley meet", "Bob goes to work."
+
+00:06:56.680 --> 00:06:59.079
+And then I can get one level more specific
+
+00:06:59.080 --> 00:07:01.159
+and see the various scenes in the chapter
+
+00:07:01.160 --> 00:07:02.959
+at the second header level.
+
+00:07:02.960 --> 00:07:03.999
+And I can, if I want,
+
+00:07:04.000 --> 00:07:10.359
+I can go all the way back to the prose level.
+
+00:07:10.360 --> 00:07:12.774
+And just like Nabokov shuffling
+
+00:07:12.774 --> 00:07:13.940
+his index cards around,
+
+00:07:14.040 --> 00:07:16.759
+I can move scenes around as logical units.
+
+00:07:16.760 --> 00:07:18.199
+Let's say, for example,
+
+00:07:18.200 --> 00:07:20.399
+that we wanted to move Bob's thoughts about life,
+
+00:07:20.400 --> 00:07:22.919
+which are down here, up further.
+
+00:07:22.920 --> 00:07:26.959
+Well, I can grab "Bob thinks about life,"
+
+00:07:26.960 --> 00:07:30.479
+and I can move it up or down as a logical unit.
+
+00:07:30.480 --> 00:07:34.719
+But Org mode offers some even more powerful tricks
+
+00:07:34.720 --> 00:07:36.519
+for structuring and navigating your novel,
+
+00:07:36.520 --> 00:07:38.559
+beyond what even index cards can do.
+
+00:07:38.560 --> 00:07:41.974
+For example, you can use tags
+
+00:07:41.974 --> 00:07:44.479
+on your scene headings. You can see these here.
+
+00:07:44.480 --> 00:07:46.599
+They're the prominent colon separated words
+
+00:07:46.600 --> 00:07:47.559
+on the header lines.
+
+00:07:47.560 --> 00:07:49.839
+In this case, I'm using `bob` and `shirley`.
+
+00:07:49.840 --> 00:07:52.719
+These tags can represent characters
+
+00:07:52.720 --> 00:07:53.674
+who appear in the scene,
+
+00:07:53.674 --> 00:07:54.239
+which is what I'm doing here,
+
+00:07:54.640 --> 00:07:57.207
+or locations in which the scenes occur,
+
+00:07:57.207 --> 00:07:59.159
+or plot lines that the scenes further,
+
+00:07:59.160 --> 00:08:00.479
+really anything that you want.
+
+00:08:00.480 --> 00:08:04.239
+And you can then use Org mode's sparse view features
+
+00:08:04.240 --> 00:08:07.559
+to query a set of tags and trim your novel down to
+
+00:08:07.560 --> 00:08:09.519
+a subset of related scenes.
+
+00:08:09.520 --> 00:08:12.559
+For example, let's say we want to filter down to
+
+00:08:12.560 --> 00:08:14.799
+only the scenes in which Shirley appears.
+
+00:08:14.800 --> 00:08:25.759
+This could allow us to read quickly through
+
+00:08:25.760 --> 00:08:27.439
+just a subset of the prose,
+
+00:08:27.440 --> 00:08:29.599
+the prose that referred to Shirley in some way.
+
+00:08:29.600 --> 00:08:31.359
+Maybe we want to do that
+
+00:08:31.360 --> 00:08:33.279
+to check continuity for her character,
+
+00:08:33.280 --> 00:08:35.519
+or make sure that her character develops
+
+00:08:35.520 --> 00:08:36.999
+along a compelling arc,
+
+00:08:37.000 --> 00:08:38.319
+or even just to get a sense
+
+00:08:38.320 --> 00:08:40.399
+of how much airtime she gets in the novel.
+
+00:08:44.040 --> 00:08:49.759
+Thanks for listening to this whirlwind exploration
+
+00:08:49.760 --> 00:08:51.879
+of some of the practical challenges of writing
+
+00:08:51.880 --> 00:08:53.599
+novels and other long-form prose,
+
+00:08:53.600 --> 00:08:55.599
+and how Org mode can help tackle them.
+
+NOTE Takeaways and next steps
+
+00:08:55.600 --> 00:08:57.879
+I'd like to leave you with a couple takeaways
+
+00:08:57.880 --> 00:08:59.759
+and next steps for those who are interested.
+
+00:08:59.760 --> 00:09:01.907
+First, if you're writing a novel
+
+00:09:01.907 --> 00:09:02.840
+or other long-form prose,
+
+00:09:02.841 --> 00:09:04.874
+or even considering doing so,
+
+00:09:04.874 --> 00:09:06.107
+take a look at Org mode,
+
+00:09:06.108 --> 00:09:08.374
+especially if you're already familiar with Emacs.
+
+00:09:08.375 --> 00:09:10.474
+It won't solve the artistic problem
+
+00:09:10.475 --> 00:09:11.874
+of writing an interesting book for you,
+
+00:09:11.875 --> 00:09:13.907
+not even with a ChatGPT plugin,
+
+00:09:13.908 --> 00:09:15.874
+but it's a fantastic tool for managing
+
+00:09:15.875 --> 00:09:16.874
+some of the practical challenges
+
+00:09:16.875 --> 00:09:19.840
+that come with hacking 100,000 words into shape
+
+00:09:19.841 --> 00:09:22.740
+over the months or years that that process takes.
+
+00:09:22.741 --> 00:09:25.839
+Second, if you're interested in learning more
+
+00:09:25.840 --> 00:09:27.959
+about some of the advanced features of Org mode
+
+00:09:27.960 --> 00:09:29.519
+and how they can help in this process,
+
+00:09:29.520 --> 00:09:32.319
+I wrote a long blog post about my difficulties
+
+00:09:32.320 --> 00:09:34.879
+writing a novel with 13 interconnected subplots,
+
+00:09:34.880 --> 00:09:37.759
+and how Emacs and Org mode saved it from imploding.
+
+00:09:37.760 --> 00:09:43.999
+I'll put a link here below. [ewj.io/emacs]
+
+00:09:44.000 --> 00:09:50.840
+Thanks for listening, and Emacs on!
diff --git a/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt
new file mode 100644
index 00000000..9a1888a0
--- /dev/null
+++ b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt
@@ -0,0 +1,1472 @@
+WEBVTT
+
+
+00:00:00.459 --> 00:00:05.460
+[Speaker 0]: So, will you, when I'm looking at my,
+
+00:00:06.279 --> 00:00:08.480
+the other screen, I don't see the chat,
+
+00:00:08.480 --> 00:00:10.380
+so maybe someone can tell me.
+
+00:00:11.259 --> 00:00:12.360
+[Speaker 1]: It's fine, don't worry about it,
+
+00:00:12.360 --> 00:00:14.320
+and we are live. So hi again everyone.
+
+00:00:15.060 --> 00:00:16.140
+Hi Tony, how are you doing?
+
+00:00:17.040 --> 00:00:18.420
+[Speaker 0]: Really well, and you?
+
+00:00:19.440 --> 00:00:21.040
+[Speaker 1]: I am doing fantastically,
+
+00:00:21.380 --> 00:00:23.460
+as fantastically as I can be doing,
+
+00:00:24.099 --> 00:00:25.820
+having to put out fire in the background
+
+00:00:30.140 --> 00:00:30.640
+[Speaker 0]: Cool!
+
+00:00:25.840 --> 00:00:31.520
+[Speaker 1]: during MaxConf. But I'm doing great! Alright,
+
+00:00:31.640 --> 00:00:34.900
+Let me just try to set up everything so that
+
+00:00:34.960 --> 00:00:37.260
+I can show the questions and all this.
+
+00:00:37.260 --> 00:00:38.600
+Do you mind if I read you the question?
+
+00:00:38.600 --> 00:00:39.960
+It might be a little more interactive and
+
+00:00:39.960 --> 00:00:42.760
+this way you can focus on either presenting
+
+00:00:42.800 --> 00:00:43.760
+stuff on your end.
+
+00:00:44.059 --> 00:00:48.680
+[Speaker 0]: Yes, tell me what are the questions and what
+
+00:00:48.680 --> 00:00:50.940
+to do and I will do that.
+
+00:00:53.420 --> 00:00:56.400
+[Speaker 1]: Okay great so what I'll do,
+
+00:00:56.400 --> 00:00:58.580
+I'll invite people to go to the pad and ask
+
+00:00:58.580 --> 00:01:00.060
+questions because it was a very interesting
+
+00:01:00.060 --> 00:01:01.480
+talk and I'm sure you have plenty of
+
+00:01:01.480 --> 00:01:03.460
+questions but I only see 1 right now.
+
+00:01:03.460 --> 00:01:05.360
+Do we have people on BigBlueButton?
+
+00:01:05.640 --> 00:01:08.580
+Yes we do have people joining right now.
+
+00:01:11.000 --> 00:01:12.620
+So reading the first question then.
+
+00:01:12.620 --> 00:01:14.380
+So what's the main motivation for this new
+
+00:01:14.380 --> 00:01:16.100
+package? I used to use org.yugo
+
+00:01:16.280 --> 00:01:18.340
+and use GitHub Actions to build a blog.
+
+00:01:18.340 --> 00:01:20.600
+So can you go in a little bit of details on
+
+00:01:20.600 --> 00:01:21.100
+this?
+
+00:01:21.540 --> 00:01:25.780
+[Speaker 0]: Yes, OK. So the main goal,
+
+00:01:30.900 --> 00:01:33.570
+I didn't want to have,
+
+00:01:33.805 --> 00:01:37.440
+to, I will push that here.
+
+00:01:38.040 --> 00:01:44.940
+So my goal was to not have to rely on another
+
+00:01:45.060 --> 00:01:49.920
+static site generator to produce my website.
+
+00:01:49.920 --> 00:01:54.780
+So if you use a Yugo, that means that you
+
+00:01:54.780 --> 00:02:01.060
+take, so this is the website that we've seen
+
+00:02:01.960 --> 00:02:07.880
+in the talk, this 1. And I didn't want to
+
+00:02:07.880 --> 00:02:13.320
+have to use a piece of software in Emacs that
+
+00:02:13.320 --> 00:02:16.960
+translate to some other files to be feed to
+
+00:02:16.960 --> 00:02:20.680
+another statistic generator because this way
+
+00:02:20.680 --> 00:02:23.680
+I have 2 things to understand.
+
+00:02:23.680 --> 00:02:26.620
+I have to understand how that software
+
+00:02:26.780 --> 00:02:32.440
+translates my files into the other files and
+
+00:02:32.440 --> 00:02:36.960
+then I have to understand how Hugo works.
+
+00:02:37.060 --> 00:02:39.480
+So if I want to change something I need to
+
+00:02:39.480 --> 00:02:43.660
+understand Hugo. So at some point I need to
+
+00:02:43.660 --> 00:02:46.200
+work with Hugo. So if I need to work with
+
+00:02:46.200 --> 00:02:49.700
+Hugo, maybe I can work with it directly.
+
+00:02:51.800 --> 00:02:56.600
+And I wanted also something that was purely
+
+00:02:56.960 --> 00:03:03.080
+Emacs-centric and working on it,
+
+00:03:03.700 --> 00:03:05.560
+I found out about that solution.
+
+00:03:05.600 --> 00:03:10.740
+And I wanted also something that we have only
+
+00:03:11.780 --> 00:03:15.140
+1 file that have all the entries.
+
+00:03:15.560 --> 00:03:18.620
+And when I thought about that,
+
+00:03:19.140 --> 00:03:22.720
+finally I found a way that maybe we can just
+
+00:03:22.720 --> 00:03:30.360
+use 1 or 3 to pass it the information of the
+
+00:03:30.360 --> 00:03:33.405
+website. And if you look,
+
+00:03:33.405 --> 00:03:37.660
+If you just try to work with Gatsby,
+
+00:03:37.920 --> 00:03:40.020
+Ugo or all those websites,
+
+00:03:40.940 --> 00:03:45.680
+when you start, you download 10,
+
+00:03:46.240 --> 00:03:52.280
+20, 30, thousand for hundreds of dependencies
+
+00:03:53.440 --> 00:03:59.620
+to do. Just to me, I'm a small guy and I just
+
+00:03:59.620 --> 00:04:02.720
+want to have some documentation on the
+
+00:04:02.720 --> 00:04:05.200
+website like this 1. It just,
+
+00:04:05.460 --> 00:04:08.980
+it shouldn't need that much of a dependency.
+
+00:04:09.160 --> 00:04:11.460
+And if you look at the website,
+
+00:04:11.460 --> 00:04:13.180
+if you want to hack on something,
+
+00:04:13.540 --> 00:04:17.320
+you need a lot of to understand how the
+
+00:04:17.320 --> 00:04:19.459
+config files work. So you need to,
+
+00:04:19.459 --> 00:04:21.060
+how does it work this config file?
+
+00:04:21.060 --> 00:04:23.320
+But I want, it's always happened that you
+
+00:04:23.320 --> 00:04:26.420
+want to add 1 thing or to add that things.
+
+00:04:26.420 --> 00:04:27.760
+What do you have to do?
+
+00:04:27.780 --> 00:04:30.340
+You have to, you can't because it's not
+
+00:04:30.340 --> 00:04:34.040
+offered by the configuration file.
+
+00:04:34.380 --> 00:04:37.980
+With that solution that I built for me first,
+
+00:04:38.920 --> 00:04:41.580
+I don't care if I need something else.
+
+00:04:42.020 --> 00:04:47.600
+I just have to go in that file.
+
+00:04:49.840 --> 00:04:52.440
+It doesn't need to be that file because as I
+
+00:04:52.440 --> 00:04:55.980
+am in Emacs if the render functions are
+
+00:04:56.120 --> 00:04:58.940
+already evaluated they exist and I can use it
+
+00:04:58.940 --> 00:05:02.520
+but I just have to change that file so if I
+
+00:05:02.520 --> 00:05:07.860
+want something more I just I go there let's
+
+00:05:07.860 --> 00:05:10.920
+say so does it answer the question or I
+
+00:05:10.920 --> 00:05:12.780
+continue to show something?
+
+00:05:14.320 --> 00:05:16.060
+[Speaker 1]: It's up to you, I think you are answering the
+
+00:05:16.060 --> 00:05:17.600
+question. I think you veered off a little bit
+
+00:05:17.600 --> 00:05:19.940
+from just why not you go but then you kind of
+
+00:05:19.940 --> 00:05:21.840
+redid part of your presentation to justify
+
+00:05:23.480 --> 00:05:26.360
+[Speaker 0]: own system. But stop me if I go because I
+
+00:05:26.360 --> 00:05:29.920
+used to want to show more things than what
+
+00:05:29.920 --> 00:05:30.900
+there is in the question.
+
+00:05:21.940 --> 00:05:32.080
+[Speaker 1]: why you had to roll your Yeah that's fine.
+
+00:05:32.080 --> 00:05:33.340
+Just for people who do not know,
+
+00:05:33.340 --> 00:05:35.500
+we tend to restrict speakers when they submit
+
+00:05:35.500 --> 00:05:36.620
+a presentation. We tell them,
+
+00:05:36.620 --> 00:05:39.000
+oh, you can do a flash talk in 10 minutes or
+
+00:05:39.000 --> 00:05:41.100
+a bit of a longer talk in 20 minutes or 40
+
+00:05:41.100 --> 00:05:43.180
+minutes. And usually, because we have a lot
+
+00:05:43.180 --> 00:05:46.260
+of speakers, we have to kind of coerce people
+
+00:05:46.260 --> 00:05:48.340
+into going to shorter formats and sometimes
+
+00:05:48.340 --> 00:05:50.260
+it's a lot about killing your darlings.
+
+00:05:51.100 --> 00:05:52.360
+But just to reassure you,
+
+00:05:52.360 --> 00:05:54.560
+we're just about to go on a launch break in
+
+00:05:54.560 --> 00:05:56.840
+about 10 minutes, so you've got the full 10
+
+00:05:56.840 --> 00:05:58.320
+minutes to use however you want,
+
+00:05:58.320 --> 00:05:59.340
+but I'll just tell you,
+
+00:05:59.340 --> 00:06:01.080
+you have a lot of questions so you might want
+
+00:06:01.080 --> 00:06:03.400
+to perhaps move on to the next 1 as soon as
+
+00:06:03.400 --> 00:06:04.060
+you can.
+
+00:06:04.540 --> 00:06:08.240
+[Speaker 0]: Yes okay so tell me the next 1 and if people
+
+00:06:08.940 --> 00:06:13.160
+want to stay more I can also stay more.
+
+00:06:14.240 --> 00:06:17.220
+Right. I understand if people need to go to
+
+00:06:17.220 --> 00:06:19.020
+lunch, they can, but people that want to
+
+00:06:19.020 --> 00:06:20.240
+stay, if it's possible,
+
+00:06:20.340 --> 00:06:22.860
+I'm here to answer any question.
+
+00:06:24.060 --> 00:06:26.240
+[Speaker 1]: Splendid. All right, so moving on to the next
+
+00:06:26.240 --> 00:06:29.180
+question. Is it possible to include the
+
+00:06:29.180 --> 00:06:31.560
+include org tag to add content from other
+
+00:06:31.560 --> 00:06:33.620
+files. Do you see what I'm talking about?
+
+00:06:35.200 --> 00:06:39.060
+[Speaker 0]: Yes, so it's not included.
+
+00:06:39.380 --> 00:06:45.240
+So the idea was really to have only 1 file
+
+00:06:45.720 --> 00:06:49.760
+and have no options. So if you look at the,
+
+00:06:49.760 --> 00:06:52.240
+let's go into, so the answer is no,
+
+00:06:52.240 --> 00:06:56.320
+but if you want, you can write the code that
+
+00:06:56.320 --> 00:07:00.520
+do it. But let's just go into one.n,
+
+00:07:02.280 --> 00:07:07.900
+so that files. So this is the files where you
+
+00:07:07.900 --> 00:07:11.440
+have everything, and there is only 2
+
+00:07:11.440 --> 00:07:13.980
+dependencies. Maybe we can see that at the
+
+00:07:13.980 --> 00:07:18.080
+top so which are htmlis on the Jack and the
+
+00:07:18.080 --> 00:07:19.840
+other are Augment. So for me,
+
+00:07:19.840 --> 00:07:21.760
+they're not dependencies because they come
+
+00:07:21.820 --> 00:07:25.440
+with Emacs. But the question is,
+
+00:07:25.440 --> 00:07:27.440
+can I add other things?
+
+00:07:27.440 --> 00:07:31.640
+If you look at that, you don't see the orange
+
+00:07:31.640 --> 00:07:33.220
+color which are viable,
+
+00:07:33.600 --> 00:07:38.080
+it's because I didn't want any configuration
+
+00:07:38.440 --> 00:07:41.060
+nor option. So there is no,
+
+00:07:41.960 --> 00:07:45.660
+if you think about, you are used to use org
+
+00:07:45.660 --> 00:07:49.540
+export normally and to use all the options
+
+00:07:49.540 --> 00:07:52.000
+that are possible on all the things they are
+
+00:07:52.000 --> 00:08:00.600
+not included. You can add them because when
+
+00:08:04.900 --> 00:08:06.500
+you are in a render function.
+
+00:08:07.060 --> 00:08:08.940
+So this is the render function that I showed
+
+00:08:08.940 --> 00:08:11.980
+in the theme. You have a page tree so you
+
+00:08:11.980 --> 00:08:18.358
+have the information but in the global I
+
+00:08:18.358 --> 00:08:20.440
+think, yes in global, you can pass anything
+
+00:08:21.020 --> 00:08:24.720
+you want and if you want you can pass the
+
+00:08:24.720 --> 00:08:27.540
+parse tree of the whole file.
+
+00:08:28.080 --> 00:08:30.840
+So if you pass the parse tree of the whole
+
+00:08:30.840 --> 00:08:34.580
+file, what you can do is that you can get it
+
+00:08:35.400 --> 00:08:38.659
+there. So I don't have it right now,
+
+00:08:38.659 --> 00:08:43.980
+but you might have your include stuff and you
+
+00:08:43.980 --> 00:08:48.040
+get it with a node property that target
+
+00:08:48.580 --> 00:08:50.940
+something in the global variable.
+
+00:08:50.940 --> 00:08:54.740
+So if we look just to be short but those 3
+
+00:08:55.320 --> 00:08:57.180
+parts, the first 1 is page tree.
+
+00:08:57.180 --> 00:08:59.160
+So it's this page that you are on the right,
+
+00:08:59.160 --> 00:09:02.220
+pages are a list of all the pages and global
+
+00:09:02.840 --> 00:09:06.240
+is something that you can set and reset once
+
+00:09:06.580 --> 00:09:10.840
+and you have the whole part street.
+
+00:09:10.840 --> 00:09:13.400
+So anything that you add in your op-files
+
+00:09:15.040 --> 00:09:16.840
+could go in global if you want,
+
+00:09:16.840 --> 00:09:18.060
+but it's not included.
+
+00:09:20.600 --> 00:09:23.140
+[Speaker 1]: All right. I think that's also answering the
+
+00:09:23.140 --> 00:09:24.840
+question. Can this generate a single file
+
+00:09:24.840 --> 00:09:26.420
+from different sources like blog.org,
+
+00:09:26.880 --> 00:09:28.820
+videos.org? I think you've just answered
+
+00:09:30.040 --> 00:09:31.280
+[Speaker 0]: Yes, I think yes.
+
+00:09:28.820 --> 00:09:32.660
+[Speaker 1]: this, right? Right. Okay.
+
+00:09:32.660 --> 00:09:34.340
+So moving on to the other question.
+
+00:09:34.660 --> 00:09:37.200
+Do you have pre-made templates already along
+
+00:09:37.200 --> 00:09:38.820
+with the 1.el package?
+
+00:09:41.680 --> 00:09:47.940
+[Speaker 0]: So, yes and no. So, The answer is if we go to
+
+00:09:49.960 --> 00:09:55.520
+1.n, so this file, so the first are blah,
+
+00:09:55.520 --> 00:10:01.780
+blah, blah. How it works,
+
+00:10:01.780 --> 00:10:06.480
+so, okay, so you have the 1-hocs,
+
+00:10:07.200 --> 00:10:11.980
+which is what can translate the org parse
+
+00:10:11.980 --> 00:10:16.180
+tree into HTML. So this is for the content of
+
+00:10:16.260 --> 00:10:18.140
+each page. So this is very useful.
+
+00:10:18.480 --> 00:10:22.660
+Then we have a bunch of functions that help
+
+00:10:22.660 --> 00:10:24.360
+to render the function,
+
+00:10:26.040 --> 00:10:30.260
+each page. And you have a bunch of...
+
+00:10:31.360 --> 00:10:33.920
+Everything that starts with dash default is a
+
+00:10:33.920 --> 00:10:36.140
+render function. So there's no template,
+
+00:10:37.480 --> 00:10:40.520
+but each page that if you want,
+
+00:10:42.240 --> 00:10:46.400
+so that 1, the home, you can use 1 default
+
+00:10:46.400 --> 00:10:48.620
+home. So, if you want to list the page,
+
+00:10:48.740 --> 00:10:53.220
+you have that 1. For a page with no table of
+
+00:10:53.220 --> 00:10:55.840
+content, you use that thing.
+
+00:10:55.840 --> 00:10:58.260
+And if you go back to be short,
+
+00:10:58.260 --> 00:11:02.660
+if we go there, I put this like that.
+
+00:11:03.900 --> 00:11:09.880
+So this that we see here is the first inline
+
+00:11:09.960 --> 00:11:14.440
+of 1.org. By the way, it doesn't have to be
+
+00:11:14.440 --> 00:11:17.120
+called 1.org. It's just as you want,
+
+00:11:17.160 --> 00:11:19.380
+but maybe we can call it.
+
+00:11:20.740 --> 00:11:23.000
+So default, what was the other 1?
+
+00:11:23.220 --> 00:11:28.280
+Default with sidebar. Or is it default with
+
+00:11:28.280 --> 00:11:30.080
+sidebar or default? Yes,
+
+00:11:30.080 --> 00:11:35.380
+with sidebar. Sidebar,
+
+00:11:36.400 --> 00:11:37.740
+if it's worked correctly.
+
+00:11:39.140 --> 00:11:46.620
+Okay, so, okay, so I don't know why the CSS
+
+00:11:46.760 --> 00:11:49.700
+is not working correctly.
+
+00:11:50.740 --> 00:11:53.860
+[Speaker 1]: It's okay. It wouldn't be a live demo without
+
+00:11:53.860 --> 00:11:55.440
+problems occurring at some point.
+
+00:11:55.440 --> 00:11:55.940
+Okay.
+
+00:11:56.980 --> 00:12:01.240
+[Speaker 0]: But so maybe we can use this 1.
+
+00:12:02.940 --> 00:12:06.980
+Or we stuck. So we are going to use this 1,
+
+00:12:06.980 --> 00:12:16.020
+we've talked this 1, but maybe better in this
+
+00:12:16.020 --> 00:12:20.240
+1 that add something. So we build it again
+
+00:12:20.340 --> 00:12:32.180
+and now, oh, come on. We have it and we have
+
+00:12:32.180 --> 00:12:36.140
+the, sorry, if we have just default,
+
+00:12:37.820 --> 00:12:41.120
+we rebuild and now this is the default layer
+
+00:12:41.120 --> 00:12:44.360
+that if we do with table of content,
+
+00:12:46.060 --> 00:12:48.580
+you have it, you have the default content.
+
+00:12:48.620 --> 00:12:53.640
+So how to change, and they are not template.
+
+00:12:53.940 --> 00:12:57.760
+They are render functions that takes your
+
+00:13:00.300 --> 00:13:05.720
+page as a tree and render HTML string.
+
+00:13:06.260 --> 00:13:09.200
+So you can build any function that you want.
+
+00:13:10.600 --> 00:13:12.280
+So yes, I think that answers the question.
+
+00:13:12.280 --> 00:13:16.400
+There is no template like in other systems.
+
+00:13:17.780 --> 00:13:18.920
+[Speaker 1]: Cool, that makes sense.
+
+00:13:19.020 --> 00:13:21.000
+We have 2 more questions and then we'll need
+
+00:13:21.000 --> 00:13:22.200
+to go on a lunch break.
+
+00:13:22.200 --> 00:13:23.740
+I don't see anyone join the room.
+
+00:13:23.740 --> 00:13:25.640
+Remember, Tony has said that he would be
+
+00:13:25.640 --> 00:13:27.500
+willing to answer more questions during the
+
+00:13:27.500 --> 00:13:29.120
+lunch break, perhaps because it's not lunch
+
+00:13:29.120 --> 00:13:30.980
+break for you. Are you in Europe right now?
+
+00:13:32.360 --> 00:13:34.600
+So that's why for us, also for me it's very
+
+00:13:34.600 --> 00:13:37.660
+dark, but it's not lunch break for us,
+
+00:13:37.660 --> 00:13:39.440
+it's going to be dinner break soon actually.
+
+00:13:31.280 --> 00:13:42.840
+[Speaker 0]: Yes. Yes, exactly, so I'm just,
+
+00:13:44.020 --> 00:13:44.700
+I'm okay.
+
+00:13:45.580 --> 00:13:49.200
+[Speaker 1]: Right, Okay, so moving on to 1 of the last 2
+
+00:13:49.200 --> 00:13:51.680
+questions. What additional features are there
+
+00:13:51.680 --> 00:13:53.660
+that you would like to add to 1.EL
+
+00:13:53.960 --> 00:13:54.780
+in the future?
+
+00:13:56.120 --> 00:14:00.440
+[Speaker 0]: Yes, there's only 1, which is a full text
+
+00:14:00.560 --> 00:14:05.500
+search done in a simple way.
+
+00:14:06.540 --> 00:14:10.020
+So I don't meet what simple way means,
+
+00:14:10.320 --> 00:14:12.380
+but when I see something complicated,
+
+00:14:12.620 --> 00:14:15.140
+it doesn't enter in 1 to me.
+
+00:14:15.400 --> 00:14:18.840
+So, but really, if you see that,
+
+00:14:19.120 --> 00:14:22.260
+I would like to have some way.
+
+00:14:22.300 --> 00:14:25.080
+So, this is the documentation and I would
+
+00:14:25.080 --> 00:14:27.480
+like to have some way to just have another
+
+00:14:27.500 --> 00:14:30.740
+function because we are not talking about
+
+00:14:31.300 --> 00:14:33.800
+those websites on the 1.L.
+
+00:14:34.440 --> 00:14:39.520
+It's not made for a big company or of your
+
+00:14:39.520 --> 00:14:42.440
+things, it's just for a random guy that have
+
+00:14:42.440 --> 00:14:46.200
+a blog or a few blogs and If you are a great
+
+00:14:46.200 --> 00:14:52.280
+blogger, maybe you are going to write 100 or
+
+00:14:53.040 --> 00:14:57.240
+200 or 300 pages in many years.
+
+00:14:57.240 --> 00:15:00.060
+So this enter in that category.
+
+00:15:00.060 --> 00:15:03.580
+So it's small. So I think it can,
+
+00:15:04.080 --> 00:15:07.580
+we could find a way to make a full text
+
+00:15:07.580 --> 00:15:10.160
+search. And that is simple.
+
+00:15:10.240 --> 00:15:12.780
+I don't need to, to go with,
+
+00:15:13.520 --> 00:15:16.620
+with solution like Algolia that is,
+
+00:15:16.620 --> 00:15:17.900
+that works super fine.
+
+00:15:17.900 --> 00:15:21.100
+But this is something that I don't control
+
+00:15:21.600 --> 00:15:26.200
+and I have to give them the data and I'm not
+
+00:15:26.200 --> 00:15:29.320
+against that but it's just that I think with
+
+00:15:29.320 --> 00:15:32.800
+a bit of work something can be done with full
+
+00:15:32.800 --> 00:15:35.600
+textile. But this is the only thing that I
+
+00:15:35.600 --> 00:15:36.980
+would like to add.
+
+00:15:38.720 --> 00:15:41.300
+[Speaker 1]: Very clear answer. Next question.
+
+00:15:41.580 --> 00:15:44.380
+Can you create navbars on a website and fancy
+
+00:15:44.380 --> 00:15:46.380
+things like carousels using 1.EL?
+
+00:15:46.800 --> 00:15:48.220
+Now carousels is just,
+
+00:15:48.260 --> 00:15:51.820
+I think, a fancy way to display pictures and
+
+00:15:51.820 --> 00:15:53.800
+please correct me whoever asked this
+
+00:15:53.800 --> 00:15:55.440
+question. Otherwise I see you taking notes
+
+00:15:55.440 --> 00:15:56.820
+for the answers, thank you very much.
+
+00:15:56.820 --> 00:15:58.740
+But if you could specify maybe carousels so
+
+00:15:58.740 --> 00:16:01.900
+that Tony and I may get a better idea.
+
+00:16:01.920 --> 00:16:03.340
+But still, first part of the question,
+
+00:16:03.340 --> 00:16:04.940
+can you create navbars on a website?
+
+00:16:05.980 --> 00:16:10.860
+[Speaker 0]: Yes. So if, for instance,
+
+00:16:10.900 --> 00:16:14.600
+you see there, to me, it's not a,
+
+00:16:14.600 --> 00:16:19.040
+it's a navbar. So you already have it.
+
+00:16:19.860 --> 00:16:23.080
+I didn't show that in the talk,
+
+00:16:23.080 --> 00:16:27.440
+but the CSS for the default function that
+
+00:16:27.440 --> 00:16:31.100
+works is responsive. So,
+
+00:16:31.720 --> 00:16:34.400
+out of the box, if you are using something,
+
+00:16:34.600 --> 00:16:37.540
+you will have an app bar done for you with
+
+00:16:37.540 --> 00:16:38.680
+all the pages that you have.
+
+00:16:38.680 --> 00:16:40.240
+So, if we go to install,
+
+00:16:40.920 --> 00:16:44.900
+we have that. And if we no longer have that,
+
+00:16:44.900 --> 00:16:49.960
+we have that sidebar there.
+
+00:16:50.220 --> 00:16:51.840
+And how it's done. So,
+
+00:16:52.660 --> 00:16:56.380
+the same way. I like simple fields that are
+
+00:16:56.380 --> 00:16:58.580
+flexible and I didn't want configuration
+
+00:16:58.860 --> 00:17:01.280
+because if you want to write the code to
+
+00:17:01.280 --> 00:17:03.480
+change something you just have to write code.
+
+00:17:03.480 --> 00:17:05.720
+So any function, render function,
+
+00:17:05.859 --> 00:17:08.760
+is yours. So you can do whatever you want and
+
+00:17:08.760 --> 00:17:11.520
+you enter the html that you want to render.
+
+00:17:11.520 --> 00:17:17.800
+So let's see how do we get that navigation
+
+00:17:17.920 --> 00:17:20.920
+bar that we have when we do that this is a
+
+00:17:20.920 --> 00:17:23.079
+CSS stuff. But when we click,
+
+00:17:23.099 --> 00:17:25.819
+this is a JS stuff that,
+
+00:17:27.040 --> 00:17:32.320
+so let's go to one.l And maybe this is a
+
+00:17:32.320 --> 00:17:35.660
+sidebar. Why that function because,
+
+00:17:36.300 --> 00:17:40.360
+okay. So when that function,
+
+00:17:40.680 --> 00:17:45.340
+so 1 default sidebar is 1 that is used to do
+
+00:17:45.340 --> 00:17:47.120
+some of the things at some point,
+
+00:17:47.120 --> 00:17:52.120
+what we return is a JackHTML that take a data
+
+00:17:52.120 --> 00:17:54.340
+structure and return a string.
+
+00:17:54.340 --> 00:17:57.280
+So this is your HTML. So you can see at the
+
+00:17:57.280 --> 00:18:00.780
+top you have the end, then you have the body,
+
+00:18:01.120 --> 00:18:06.080
+and if we go at the end we can add a script
+
+00:18:06.080 --> 00:18:08.640
+thing. So what we've seen with the sidebar
+
+00:18:08.920 --> 00:18:11.820
+it's just that much line of JavaScript.
+
+00:18:11.920 --> 00:18:17.440
+So this is the only JavaScript that there is
+
+00:18:17.440 --> 00:18:23.640
+to get what we have here when we do that.
+
+00:18:25.360 --> 00:18:29.500
+So you can add whatever you want.
+
+00:18:29.500 --> 00:18:33.420
+It's code and you're the master of that code.
+
+00:18:35.280 --> 00:18:38.600
+[Speaker 1]: Splendid, great. So to specify the carousel
+
+00:18:38.800 --> 00:18:39.860
+stuff that we mentioned before,
+
+00:18:39.860 --> 00:18:42.520
+it's pictures rolling or sliding from 1 to
+
+00:18:42.520 --> 00:18:44.620
+the other. It's kind of like having a
+
+00:18:44.620 --> 00:18:47.540
+gallery, imagine a fancy dynamic gallery
+
+00:18:47.540 --> 00:18:48.740
+where you can scroll pictures.
+
+00:18:48.740 --> 00:18:50.220
+Do you see what I'm talking about?
+
+00:18:50.380 --> 00:18:53.600
+[Speaker 0]: Yes, so that things would just be I think
+
+00:18:53.620 --> 00:18:57.620
+some javascript added somewhere and I can
+
+00:18:57.620 --> 00:18:59.280
+show you another website.
+
+00:18:59.440 --> 00:19:04.200
+So for instance if we go because there are
+
+00:19:04.200 --> 00:19:08.160
+not all the data of the website are not all
+
+00:19:08.160 --> 00:19:10.140
+public, but the website they are.
+
+00:19:10.140 --> 00:19:12.020
+So for instance, a mini-buffer,
+
+00:19:14.480 --> 00:19:18.880
+it's not a carousel, but at the home page,
+
+00:19:19.140 --> 00:19:20.900
+we can do whatever we want.
+
+00:19:22.660 --> 00:19:24.560
+Still those pages, still,
+
+00:19:24.560 --> 00:19:28.980
+this is only 1 file for each page.
+
+00:19:28.980 --> 00:19:31.580
+So if we click, we can get those things.
+
+00:19:31.720 --> 00:19:33.140
+It's just that when we,
+
+00:19:33.420 --> 00:19:35.040
+for the home page for instance,
+
+00:19:35.860 --> 00:19:38.040
+when we go back on that home page,
+
+00:19:38.160 --> 00:19:40.580
+we have the list at that point.
+
+00:19:40.580 --> 00:19:45.360
+So let's go back to that function that we're,
+
+00:19:45.540 --> 00:19:47.740
+so not that 1, maybe the 1,
+
+00:19:47.740 --> 00:19:50.760
+1 different, it's better because that 1 is
+
+00:19:50.760 --> 00:19:52.980
+simpler. So almost nothing happened.
+
+00:19:53.620 --> 00:19:55.520
+We have the list of the pages.
+
+00:19:56.240 --> 00:19:59.680
+So I can do whatever I want with that list.
+
+00:20:00.360 --> 00:20:05.400
+I can loop over and we can see that 1,
+
+00:20:06.340 --> 00:20:08.600
+that default home list of pages,
+
+00:20:08.600 --> 00:20:10.060
+so that list of the pages,
+
+00:20:10.260 --> 00:20:12.160
+and we see where is the list.
+
+00:20:13.200 --> 00:20:16.160
+Okay, so this is a, here we have a function
+
+00:20:17.680 --> 00:20:21.100
+that just, we want the pages,
+
+00:20:21.100 --> 00:20:24.100
+but I think we, but the home page,
+
+00:20:24.620 --> 00:20:28.120
+and we have that list,
+
+00:20:28.300 --> 00:20:33.020
+and then here we do that.
+
+00:20:37.740 --> 00:20:40.460
+And we get something listed,
+
+00:20:40.680 --> 00:20:44.060
+But then as you control everything that you
+
+00:20:44.060 --> 00:20:51.820
+do, you can pass any CSS class that you want
+
+00:20:51.820 --> 00:20:53.620
+to do those things. So,
+
+00:20:53.620 --> 00:20:55.020
+for instance, that div,
+
+00:20:55.260 --> 00:21:00.660
+add the class either. Yes,
+
+00:21:00.660 --> 00:21:02.840
+you can do. I don't remember the question,
+
+00:21:02.840 --> 00:21:05.660
+but I think I was answering the right 1.
+
+00:21:05.860 --> 00:21:07.260
+[Speaker 1]: No, no, you were answering it.
+
+00:21:07.260 --> 00:21:09.720
+It was about carousels and about having fancy
+
+00:21:09.720 --> 00:21:11.720
+display for image galleries.
+
+00:21:11.720 --> 00:21:12.660
+And I think you've answered.
+
+00:21:12.660 --> 00:21:14.120
+Basically, you just put your JavaScript,
+
+00:21:14.160 --> 00:21:16.100
+you embed it inside the code.
+
+00:21:16.620 --> 00:21:17.120
+[Speaker 0]: Exactly.
+
+00:21:18.620 --> 00:21:20.220
+[Speaker 1]: So, other question. Would there be an
+
+00:21:20.220 --> 00:21:22.860
+automated way to convert an existing HTML
+
+00:21:22.860 --> 00:21:24.880
+document into a JackHTML form?
+
+00:21:28.180 --> 00:21:32.060
+[Speaker 0]: Okay, so that 1, I don't have 1.
+
+00:21:32.200 --> 00:21:35.580
+It's another topic, but maybe there are some
+
+00:21:35.660 --> 00:21:37.940
+kind of session because some people that
+
+00:21:37.940 --> 00:21:41.620
+know, that are used to Lisp,
+
+00:21:43.080 --> 00:21:45.580
+common Lisp or Clojure or other,
+
+00:21:46.300 --> 00:21:49.460
+Jack-html, that function,
+
+00:21:50.740 --> 00:21:53.680
+is something classic, but I didn't find,
+
+00:21:53.680 --> 00:22:00.840
+So I wrote it because I didn't find it
+
+00:22:00.840 --> 00:22:04.520
+already done the way I want for Emacs.
+
+00:22:06.040 --> 00:22:08.980
+And this is something for E-cup closure.
+
+00:22:09.640 --> 00:22:13.260
+So really I take, it's not that I take my
+
+00:22:13.260 --> 00:22:15.060
+impression, just that when you have something
+
+00:22:15.060 --> 00:22:20.140
+that exists and you look at how it's done.
+
+00:22:20.640 --> 00:22:22.720
+So you have a eCup for Crusher,
+
+00:22:25.160 --> 00:22:26.640
+does the same thing that HTML.
+
+00:22:26.660 --> 00:22:32.140
+It's more that I do a Jack HTML do what eCup
+
+00:22:32.440 --> 00:22:37.160
+does, but maybe they do it a better way.
+
+00:22:37.800 --> 00:22:41.600
+So I think maybe in that community,
+
+00:22:42.320 --> 00:22:46.320
+it might already exist something that go from
+
+00:22:46.320 --> 00:22:52.440
+HTML to Jack. So you can see,
+
+00:22:53.640 --> 00:22:56.620
+is it big enough? I will make it big enough.
+
+00:22:57.626 --> 00:22:59.060
+[Speaker 1]: It's good enough, don't worry.
+
+00:22:56.820 --> 00:23:01.420
+[Speaker 0]: So if you see- So you have the hash HTML and
+
+00:23:01.420 --> 00:23:04.200
+you see those things. There are things that I
+
+00:23:04.200 --> 00:23:05.460
+couldn't do, for instance,
+
+00:23:05.460 --> 00:23:09.280
+for the ID, I couldn't use the hash in the
+
+00:23:09.280 --> 00:23:14.760
+name of, of how do we name that,
+
+00:23:14.760 --> 00:23:18.480
+of the keywords, because it's used for
+
+00:23:18.480 --> 00:23:21.180
+something else in a Emacs Lisp.
+
+00:23:21.180 --> 00:23:25.020
+So, I use... Anyway, so you see that you have
+
+00:23:25.520 --> 00:23:30.260
+that things but in Emacs we don't have the
+
+00:23:30.260 --> 00:23:34.960
+map with that syntax. We have a hash map but
+
+00:23:34.960 --> 00:23:37.120
+they are not with that syntax and I wanted
+
+00:23:37.120 --> 00:23:46.080
+that syntax so we use only list and Here we
+
+00:23:46.080 --> 00:23:48.660
+have an array with a hash map.
+
+00:23:49.200 --> 00:23:52.120
+So let me just say, so the question was,
+
+00:23:52.360 --> 00:23:54.100
+does it exist something?
+
+00:23:55.240 --> 00:23:58.680
+I think not, but it could be built or maybe
+
+00:23:58.680 --> 00:24:01.600
+exist for E-Cups, you are interested.
+
+00:24:03.240 --> 00:24:04.860
+[Speaker 1]: Okay, great. I think that answers the
+
+00:24:04.860 --> 00:24:07.840
+question perfectly. And our final question,
+
+00:24:08.440 --> 00:24:12.160
+does this or you use any other Emacs packages
+
+00:24:12.240 --> 00:24:14.180
+for your packages slash website,
+
+00:24:14.840 --> 00:24:16.740
+example, or publish? Like,
+
+00:24:17.020 --> 00:24:17.960
+rephrasing the question,
+
+00:24:17.960 --> 00:24:20.820
+do you use it for your own personal usage or
+
+00:24:20.820 --> 00:24:22.320
+do you interact with other packages?
+
+00:24:24.120 --> 00:24:26.180
+[Speaker 0]: I'm not sure I understand the question.
+
+00:24:26.640 --> 00:24:28.960
+Can you please repeat the question?
+
+00:24:29.820 --> 00:24:32.460
+[Speaker 1]: Yes, I will reread it as it is written and I
+
+00:24:32.460 --> 00:24:34.760
+will leave you interpret it however you want.
+
+00:24:34.760 --> 00:24:39.220
+Thank you. Does this or you use any other
+
+00:24:39.220 --> 00:24:43.060
+Emacs packages for your package slash website
+
+00:24:43.840 --> 00:24:45.100
+like org-publish?
+
+00:24:46.620 --> 00:24:49.340
+[Speaker 0]: No, no, no. I don't use nothing.
+
+00:24:49.660 --> 00:24:54.640
+I just accept dependency of 1.n.
+
+00:24:57.660 --> 00:25:01.000
+So, we are in 1.n and we go at the top and we
+
+00:25:01.000 --> 00:25:03.980
+see that those are the dependencies.
+
+00:25:04.820 --> 00:25:09.520
+I use nothing. So what I do is that I
+
+00:25:09.520 --> 00:25:12.420
+publish, I just generate the public
+
+00:25:12.620 --> 00:25:15.040
+directory. So if we go to public,
+
+00:25:16.500 --> 00:25:18.240
+this 1, no, I don't want this 1.
+
+00:25:18.240 --> 00:25:23.240
+I want to go to the website of the video.
+
+00:25:23.620 --> 00:25:27.400
+If we see here, everything is rendered in the
+
+00:25:27.400 --> 00:25:36.360
+public. Any services, if you use your own
+
+00:25:37.380 --> 00:25:39.280
+server and you save those files,
+
+00:25:39.280 --> 00:25:40.460
+you have your website.
+
+00:25:40.580 --> 00:25:42.580
+So I don't use anything else.
+
+00:25:42.580 --> 00:25:49.700
+I just git push and I'm using Netlify as a
+
+00:25:49.700 --> 00:25:52.320
+service to run to save my files,
+
+00:25:52.580 --> 00:25:54.860
+but you can use anything you want.
+
+00:25:55.900 --> 00:25:58.620
+Because your website is really what is into a
+
+00:25:58.620 --> 00:26:00.460
+public. So, this is another,
+
+00:26:01.360 --> 00:26:03.340
+It's not the concern of 1.L
+
+00:26:04.860 --> 00:26:07.180
+to answer. I'm not using org.publish.
+
+00:26:08.960 --> 00:26:10.900
+[Speaker 1]: Cool, great. Well, thank you.
+
+00:26:10.900 --> 00:26:13.000
+I think the question was also about other
+
+00:26:13.000 --> 00:26:16.500
+things, but I think If the person wants a
+
+00:26:16.500 --> 00:26:18.340
+more clear answer to their question,
+
+00:26:18.820 --> 00:26:21.260
+feel free to clarify the question and Tony
+
+00:26:21.260 --> 00:26:22.960
+might be able to answer it later on.
+
+00:26:22.960 --> 00:26:24.220
+Alright Tony, I think that's all the
+
+00:26:24.220 --> 00:26:25.760
+questions we had. Thank you so much for
+
+00:26:25.760 --> 00:26:27.680
+taking the time not only to present Adimax
+
+00:26:27.680 --> 00:26:29.240
+Kant, but also for answering all the
+
+00:26:29.240 --> 00:26:30.460
+questions people had.
+
+00:26:31.220 --> 00:26:34.080
+[Speaker 0]: Thank you to everybody participating,
+
+00:26:34.540 --> 00:26:38.000
+organizing and thank you for all those
+
+00:26:38.000 --> 00:26:42.180
+questions and you can send me any emails if
+
+00:26:42.180 --> 00:26:45.120
+you have a question and open the issues if
+
+00:26:45.180 --> 00:26:47.720
+it's not working the way it should work for
+
+00:26:47.720 --> 00:26:49.840
+you. Please send me those things.
+
+00:26:49.840 --> 00:26:50.900
+Thank you, everybody.
+
+00:26:51.940 --> 00:26:54.260
+[Speaker 1]: Splendid, thank you. And before,
+
+00:26:54.280 --> 00:26:56.140
+so right now we're gonna go on a lunch break.
+
+00:26:56.140 --> 00:26:58.660
+We'll be back in about 40 minutes for the
+
+00:26:58.660 --> 00:27:01.240
+talk called Emacs Turbocharges My Writing.
+
+00:27:01.300 --> 00:27:02.540
+And I will not tell you more.
+
+00:27:02.540 --> 00:27:04.280
+You can look at the talk page to see a little
+
+00:27:04.280 --> 00:27:06.340
+bit of a synopsis but otherwise keep the
+
+00:27:06.340 --> 00:27:08.900
+surprise. So have a good lunch or have a good
+
+00:27:08.900 --> 00:27:11.760
+dinner if you are in dinner-friendly times
+
+00:27:11.880 --> 00:27:13.180
+and I will see you afterwards.
+
+00:27:13.180 --> 00:27:14.180
+Thank you again, Tony.
+
+00:27:14.860 --> 00:27:15.600
+[Speaker 0]: See you.
+
+00:27:17.960 --> 00:27:20.320
+[Speaker 1]: All right. Let me just close everything.
+
+00:27:29.080 --> 00:27:30.480
+All right, got it. OK,
+
+00:27:30.480 --> 00:27:31.400
+so thank you so much, Tony.
+
+00:27:31.400 --> 00:27:33.520
+I just had to clear everything up on the
+
+00:27:33.520 --> 00:27:35.240
+stream. I'm going to need to...
+
+00:27:36.160 --> 00:27:39.000
+Sorry. I'm going to stop.
diff --git a/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt
new file mode 100644
index 00000000..ce9fc468
--- /dev/null
+++ b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:23.999
+Introduction
+
+00:00:24.000 --> 00:02:02.199
+Documentation
+
+00:02:02.200 --> 00:02:27.399
+Starting a new project
+
+00:02:27.400 --> 00:03:19.759
+Building
+
+00:03:19.760 --> 00:04:32.159
+Side by side
+
+00:04:32.160 --> 00:05:44.679
+Writing a render function
+
+00:05:44.680 --> 00:06:41.719
+New page
+
+00:06:41.720 --> 00:08:39.999
+Linking between pages
+
+00:08:40.000 --> 00:10:23.159
+CSS
+
+00:10:23.160 --> 00:19:03.199
+How to write a render function
+
+00:19:03.200 --> 00:20:37.159
+Rendering content
+
+00:20:37.160 --> 00:22:17.840
+Rendering CSS
diff --git a/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt
new file mode 100644
index 00000000..b6e0dfd6
--- /dev/null
+++ b/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt
@@ -0,0 +1,1102 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.159
+Hi, everybody. Welcome to the EmacsConf 2023.
+
+00:00:04.160 --> 00:00:06.399
+I hope you're doing well and you're having fun.
+
+00:00:06.400 --> 00:00:08.359
+I'm Tony Aldon, and in this talk,
+
+00:00:08.360 --> 00:00:11.159
+we are going to see how to build a static website
+
+00:00:11.160 --> 00:00:14.519
+with the package one.el that I wrote.
+
+00:00:14.520 --> 00:00:17.599
+But before we start, I'd like to thank
+
+00:00:17.600 --> 00:00:20.559
+all the people who organized that conference,
+
+00:00:20.560 --> 00:00:23.999
+so thank you all for the great work.
+
+NOTE Documentation
+
+00:00:24.000 --> 00:00:27.719
+Now let's jump into the documentation of one.el,
+
+00:00:27.720 --> 00:00:31.679
+which is built with one.el. In the install page,
+
+00:00:31.680 --> 00:00:33.079
+we can see that we have a sidebar
+
+00:00:33.080 --> 00:00:35.559
+with all of the pages in the documentation,
+
+00:00:35.560 --> 00:00:39.039
+some buttons to switch between pages,
+
+00:00:39.040 --> 00:00:41.959
+and we also have a table of contents
+
+00:00:41.960 --> 00:00:45.119
+for some of the pages if we need it.
+
+00:00:45.120 --> 00:00:49.439
+Now let's jump into one.el repository
+
+00:00:49.440 --> 00:00:52.559
+and see why I like how it is implemented,
+
+00:00:52.560 --> 00:00:53.839
+because the website that we've seen,
+
+00:00:53.840 --> 00:00:55.959
+the documentation, is just one file.
+
+00:00:55.960 --> 00:01:00.719
+So this is that file, with the headline of level 1
+
+00:01:00.720 --> 00:01:03.279
+being the web pages.
+
+00:01:03.280 --> 00:01:06.079
+There needs to be a web page to have the property,
+
+00:01:06.080 --> 00:01:09.239
+the Org property `:ONE:`, set to a render function.
+
+00:01:09.240 --> 00:01:11.799
+We are going to see how they work after.
+
+00:01:11.800 --> 00:01:14.639
+And the `:CUSTOM_ID:`, the value of the `:CUSTOM_ID:`,
+
+00:01:14.640 --> 00:01:17.519
+is the path of the page. So really,
+
+00:01:17.520 --> 00:01:20.079
+the website that we have on the left
+
+00:01:20.080 --> 00:01:24.639
+is this file. So to me, this is something simple like that
+
+00:01:24.640 --> 00:01:25.919
+that I wanted.
+
+00:01:25.920 --> 00:01:29.839
+And another thing is that when we want to
+
+00:01:29.840 --> 00:01:33.559
+change something with one.el,
+
+00:01:33.560 --> 00:01:36.679
+we don't change configuration
+
+00:01:36.680 --> 00:01:38.879
+or write JavaScript or anything else.
+
+00:01:38.880 --> 00:01:43.479
+We just write Emacs Lisp code or a bit of CSS.
+
+00:01:43.480 --> 00:01:45.919
+So this is what we have with a minibuffer website
+
+00:01:45.920 --> 00:01:47.959
+that is built with one.el,
+
+00:01:47.960 --> 00:01:50.279
+and the only thing that I had to do
+
+00:01:50.280 --> 00:01:51.919
+is to write Emacs Lisp code.
+
+00:01:51.920 --> 00:01:55.119
+So those are two things: the content in one file,
+
+00:01:55.120 --> 00:01:58.679
+and if we want to change the layout, CSS and Emacs Lisp.
+
+00:01:58.680 --> 00:02:02.199
+This is one.el.
+
+NOTE Starting a new project
+
+00:02:02.200 --> 00:02:03.879
+Now let's go to our node,
+
+00:02:03.880 --> 00:02:07.159
+and we are going to start a new project.
+
+00:02:07.160 --> 00:02:09.599
+How do we do that?
+
+00:02:09.600 --> 00:02:11.359
+In a new empty directory,
+
+00:02:11.360 --> 00:02:15.159
+so new project directory,
+
+00:02:15.160 --> 00:02:19.559
+we call the function `one-default-new-project`.
+
+00:02:19.560 --> 00:02:22.319
+We have that project, which is one file with the
+
+00:02:22.320 --> 00:02:25.759
+five default type of pages that we have,
+
+00:02:25.760 --> 00:02:27.399
+and one CSS file.
+
+NOTE Building
+
+00:02:27.400 --> 00:02:29.439
+How to build that website?
+
+00:02:29.440 --> 00:02:32.839
+Okay, so we call the function `one-build`.
+
+00:02:32.840 --> 00:02:33.959
+This builds the website.
+
+00:02:33.960 --> 00:02:36.799
+We jump into a terminal, and now if we run tree,
+
+00:02:36.800 --> 00:02:39.799
+we can see that the website
+
+00:02:39.800 --> 00:02:42.679
+has been built in the public directory
+
+00:02:42.680 --> 00:02:45.559
+with the information in the Org properties
+
+00:02:45.560 --> 00:02:50.159
+and the content of one.org files. Okay, cool.
+
+00:02:50.160 --> 00:02:53.919
+Now we are going to render that in the browser
+
+00:02:53.920 --> 00:02:58.079
+to serve that, and to do that
+
+00:02:58.080 --> 00:03:01.159
+we can use browser-sync utility,
+
+00:03:01.160 --> 00:03:02.559
+which is cool with that,
+
+00:03:02.560 --> 00:03:06.419
+in that each time we are going to...
+
+00:03:06.420 --> 00:03:07.860
+So we go into public...
+
+00:03:07.861 --> 00:03:11.759
+Each time we are going to change and rebuild the website,
+
+00:03:11.760 --> 00:03:14.319
+this will be reloaded in the browser.
+
+00:03:14.320 --> 00:03:19.759
+So one, this is that website, is now this one.
+
+NOTE Side by side
+
+00:03:19.760 --> 00:03:22.559
+So let's put them side by side.
+
+00:03:22.560 --> 00:03:26.319
+We go there, and we may do something like that.
+
+00:03:26.320 --> 00:03:30.239
+So one.el, the home page, so our custom ID
+
+00:03:30.240 --> 00:03:31.999
+with the value just a /,
+
+00:03:32.000 --> 00:03:36.079
+is rendered with that function `one-default-home`,
+
+00:03:36.080 --> 00:03:37.239
+which is a render function,
+
+00:03:37.240 --> 00:03:41.559
+and the first argument of that function is the headline,
+
+00:03:41.560 --> 00:03:45.599
+this current headline. So, parsed with the Org parser,
+
+00:03:45.600 --> 00:03:48.359
+and then we do the thing that we want to do,
+
+00:03:48.360 --> 00:03:52.079
+and the render function returns an HTML string
+
+00:03:52.080 --> 00:03:57.199
+that is used to build the pages at the custom ID.
+
+00:03:57.200 --> 00:04:03.279
+Now we can go to another web page, the second web page,
+
+00:04:03.280 --> 00:04:05.799
+and we see that there is a different value
+
+00:04:05.800 --> 00:04:10.119
+for the `:ONE:` property, so another render function,
+
+00:04:10.120 --> 00:04:13.999
+and the custom ID at the path of that page.
+
+00:04:14.000 --> 00:04:16.399
+So we can see that in the browser.
+
+00:04:16.400 --> 00:04:19.599
+So this is `/blog/default-home-list-pages`.
+
+00:04:19.600 --> 00:04:23.479
+So this is that. Now there are three other pages,
+
+00:04:23.480 --> 00:04:25.679
+but we can list that like that.
+
+00:04:25.680 --> 00:04:28.359
+We do a grep in that files,
+
+00:04:28.360 --> 00:04:32.159
+and we see the different default render function.
+
+NOTE Writing a render function
+
+00:04:32.160 --> 00:04:34.839
+In the second part of that talk,
+
+00:04:34.840 --> 00:04:38.399
+we are going to write a render function.
+
+00:04:38.400 --> 00:04:41.079
+So we are going to see that after.
+
+00:04:41.080 --> 00:04:47.079
+Now maybe we can go to the default page,
+
+00:04:47.080 --> 00:04:50.959
+and let's modify that default page.
+
+00:04:50.960 --> 00:04:54.639
+We see that this uses `one-default` render function,
+
+00:04:54.640 --> 00:04:56.999
+and now let's write "foo bar baz".
+
+00:04:57.000 --> 00:05:00.599
+We want to modify the content. We save.
+
+00:05:00.600 --> 00:05:10.439
+We call again one-build distribute,
+
+00:05:10.440 --> 00:05:16.199
+and we see here we have it: foo bar baz in the default page.
+
+00:05:16.200 --> 00:05:19.759
+Now we can use... When we use one-build,
+
+00:05:19.760 --> 00:05:23.799
+this also copies the files in the asset directory
+
+00:05:23.800 --> 00:05:25.919
+into the public directory.
+
+00:05:25.920 --> 00:05:28.039
+This is not always what we want to do.
+
+00:05:28.040 --> 00:05:29.879
+Sometimes we just change the content,
+
+00:05:29.880 --> 00:05:34.079
+and for that we can use `one-render-page-at-point`.
+
+00:05:34.080 --> 00:05:39.479
+If we use that one, this just renders the current page.
+
+00:05:39.480 --> 00:05:44.679
+So we see that we have again "foo bar baz" in the page.
+
+NOTE New page
+
+00:05:44.680 --> 00:05:47.919
+Now let's add a new page. To add a new page,
+
+00:05:47.920 --> 00:05:52.199
+we just have to copy one of them, maybe the default page.
+
+00:05:52.200 --> 00:05:58.319
+We are going to call it maybe emacsconf-2023.
+
+00:05:58.320 --> 00:06:01.839
+We still use one default render function to render it,
+
+00:06:01.840 --> 00:06:04.519
+but we want to change the path.
+
+00:06:04.520 --> 00:06:08.519
+So the custom ID, we are going to give it /blog
+
+00:06:08.520 --> 00:06:12.639
+and emacsconf-2023 with a slash at the end,
+
+00:06:12.640 --> 00:06:18.359
+and the content... We no longer want this one,
+
+00:06:18.360 --> 00:06:22.039
+but maybe "We're having a lot of fun".
+
+00:06:22.040 --> 00:06:28.599
+So we save that, we rebuild with `one-build` this,
+
+00:06:28.600 --> 00:06:33.599
+and now we can look at the top
+
+00:06:33.600 --> 00:06:39.279
+and pass it the path `/blog/emacsconf-2023/.
+
+00:06:39.280 --> 00:06:41.719
+So we have that new page.
+
+NOTE Linking between pages
+
+00:06:41.720 --> 00:06:44.159
+Now, how to link between pages?
+
+00:06:44.160 --> 00:06:46.079
+So we are going to write a link
+
+00:06:46.080 --> 00:06:47.999
+that links to the last page,
+
+00:06:48.000 --> 00:06:50.519
+so a page with the table of contents.
+
+00:06:50.520 --> 00:06:54.399
+To do that, we just have to use the value of the custom ID,
+
+00:06:54.400 --> 00:06:58.479
+and to link to a custom ID inside Org mode,
+
+00:06:58.480 --> 00:07:03.079
+we use the hashtag. We pass it here,
+
+00:07:03.080 --> 00:07:07.279
+then we pass it in the description,
+
+00:07:07.280 --> 00:07:09.799
+so TOC and sidebar,
+
+00:07:09.800 --> 00:07:12.799
+and now if we press RET inside Emacs,
+
+00:07:12.800 --> 00:07:15.839
+we jump to that page. So this is cool.
+
+00:07:15.840 --> 00:07:17.719
+Now we build again,
+
+00:07:17.720 --> 00:07:19.919
+and we see that we are going to have
+
+00:07:19.920 --> 00:07:22.279
+the link to the page in the browser.
+
+00:07:22.280 --> 00:07:26.999
+So this link to the default page with a table of contents,
+
+00:07:27.000 --> 00:07:29.879
+fine, but maybe what we want to do
+
+00:07:29.880 --> 00:07:32.999
+is to link to the "Headline foo" in that page.
+
+00:07:33.000 --> 00:07:34.679
+How do we do that?
+
+00:07:34.680 --> 00:07:36.919
+We do that by adding a custom id.
+
+00:07:36.920 --> 00:07:41.639
+We keep the first part,
+
+00:07:41.640 --> 00:07:43.759
+which is the page where we are,
+
+00:07:43.760 --> 00:07:46.359
+and we added hash with foo,
+
+00:07:46.360 --> 00:07:50.799
+so that Headline foo will have the ID "foo"
+
+00:07:50.800 --> 00:07:57.599
+in its H2 tag, HTML tag,
+
+00:07:57.600 --> 00:08:05.080
+and now we can link it here with still custom ID, so "foo",
+
+00:08:05.081 --> 00:08:10.539
+and now it's headline... headline with what?
+
+00:08:10.540 --> 00:08:14.799
+Headline foo in TOC page. So we have that.
+
+00:08:14.800 --> 00:08:19.159
+If we press RET, we jump to that headline in Emacs.
+
+00:08:19.160 --> 00:08:20.919
+So this is super cool.
+
+00:08:20.920 --> 00:08:23.559
+And now, if we call `one-build`,
+
+00:08:23.560 --> 00:08:25.799
+we see in the browser
+
+00:08:25.800 --> 00:08:26.799
+that we have a new link,
+
+00:08:26.800 --> 00:08:30.319
+and this link linked to that specific headline.
+
+00:08:30.320 --> 00:08:34.439
+So this is cool. So we have the link between pages
+
+00:08:34.440 --> 00:08:36.319
+that works inside Emacs
+
+00:08:36.320 --> 00:08:39.999
+and that works well also in the browser.
+
+NOTE CSS
+
+00:08:40.000 --> 00:08:44.519
+Now let's say that we want to change the CSS.
+
+00:08:44.520 --> 00:08:50.719
+So we've added a page with specific content,
+
+00:08:50.720 --> 00:08:51.719
+and we've done some links.
+
+00:08:51.720 --> 00:08:55.599
+Now we want to modify the CSS file
+
+00:08:55.600 --> 00:09:00.279
+which is in the asset directory, the one.css.
+
+00:09:00.280 --> 00:09:02.959
+Each time we change it,
+
+00:09:02.960 --> 00:09:05.199
+we want to have live reload
+
+00:09:05.200 --> 00:09:10.799
+that copy that file into the public directory,
+
+00:09:10.800 --> 00:09:14.659
+so the same. We go back here,
+
+00:09:14.660 --> 00:09:18.879
+and there is a utility called `entr`, e-n-t-r.
+
+00:09:18.880 --> 00:09:26.559
+Yes, this one, and using that, so a new terminal,
+
+00:09:26.560 --> 00:09:28.679
+we are at the beginning.
+
+00:09:28.680 --> 00:09:32.359
+This will watch the changing in what.css,
+
+00:09:32.360 --> 00:09:35.519
+and `entr` will copy it into the public directory
+
+00:09:35.520 --> 00:09:38.519
+each time this changes. Let's go back to Org mode,
+
+00:09:38.520 --> 00:09:43.319
+because I chose some color that is cool,
+
+00:09:43.320 --> 00:09:47.799
+and now we go back to the CSS files.
+
+00:09:47.800 --> 00:09:53.639
+We put them side by side, and maybe we go to the new page
+
+00:09:53.640 --> 00:09:55.639
+that we were changing,
+
+00:09:55.640 --> 00:10:00.999
+and we are going to change the body,
+
+00:10:01.000 --> 00:10:03.959
+the background color, and maybe we can change
+
+00:10:03.960 --> 00:10:06.119
+with the color that we've just taken.
+
+00:10:06.120 --> 00:10:10.219
+So we save, and we see the changing happening.
+
+00:10:10.220 --> 00:10:14.679
+We can do it again with the color
+
+00:10:14.680 --> 00:10:16.119
+that we have at the beginning,
+
+00:10:16.120 --> 00:10:18.879
+and this is the user experience
+
+00:10:18.880 --> 00:10:23.159
+that we have with one.el and the default function.
+
+NOTE How to write a render function
+
+00:10:23.160 --> 00:10:26.279
+Now that we've seen that,
+
+00:10:26.280 --> 00:10:30.460
+we've done all of that part,
+
+00:10:30.461 --> 00:10:31.919
+and now we are going to see
+
+00:10:31.920 --> 00:10:34.279
+how to write a render function.
+
+00:10:34.280 --> 00:10:36.759
+So let's go. The render function,
+
+00:10:36.760 --> 00:10:41.479
+so one.org, we remember these are the functions
+
+00:10:41.480 --> 00:10:43.399
+that are in the `:ONE:` Org property.
+
+00:10:43.400 --> 00:10:45.599
+So we are going to remove that part.
+
+00:10:45.600 --> 00:10:49.439
+We no longer want that one. We don't want this.
+
+00:10:49.440 --> 00:10:52.439
+We just keep that. `one-default`,
+
+00:10:52.440 --> 00:10:55.839
+we want this to be the home of our website.
+
+00:10:55.840 --> 00:10:57.659
+We have that. We rebuild,
+
+00:10:57.660 --> 00:11:05.079
+and now we just have one page, and we have that page.
+
+00:11:05.080 --> 00:11:10.679
+We are going to add another page that we call "foo",
+
+00:11:10.680 --> 00:11:15.519
+and here we pass it the render function foo
+
+00:11:15.520 --> 00:11:20.319
+that doesn't exist yet, and we are going to write it.
+
+00:11:20.320 --> 00:11:27.159
+So maybe with some content, and we copy, copy.
+
+00:11:27.160 --> 00:11:33.159
+We have that. We call it "bar" to have something to show.
+
+00:11:33.160 --> 00:11:39.959
+So here we are. If we build that, so we build it,
+
+00:11:39.960 --> 00:11:42.599
+and we see in the echo area at the bottom
+
+00:11:42.600 --> 00:11:43.719
+that we have an error "void",
+
+00:11:43.720 --> 00:11:46.799
+which is because the function foo doesn't exist.
+
+00:11:46.800 --> 00:11:48.799
+So now we are going to write that function,
+
+00:11:48.800 --> 00:11:53.359
+and we write it in the onerc.el
+
+00:11:53.360 --> 00:11:57.199
+where we put any Elisp code
+
+00:11:57.200 --> 00:11:58.359
+that we want to be run
+
+00:11:58.360 --> 00:12:03.479
+each time we build the website or render the pages.
+
+00:12:03.480 --> 00:12:06.519
+So we want a render function called foo.
+
+00:12:06.520 --> 00:12:09.999
+So that takes three arguments: page-tree, pages, and global.
+
+00:12:10.000 --> 00:12:16.639
+We are going to look at the page-tree in our case,
+
+00:12:16.640 --> 00:12:19.759
+and the render function return an HTML string.
+
+00:12:19.760 --> 00:12:22.319
+This is the thing that we want from them.
+
+00:12:22.320 --> 00:12:25.159
+So maybe foo, bar, and baz.
+
+00:12:25.160 --> 00:12:28.159
+Now this is something well-defined,
+
+00:12:28.160 --> 00:12:34.199
+and with one.org here, the file, we rebuild this,
+
+00:12:34.200 --> 00:12:39.619
+and we can see now in the browser,
+
+00:12:39.620 --> 00:12:42.959
+if we go to the page foo, that we have "foo bar baz".
+
+00:12:42.960 --> 00:12:45.459
+So this is exactly what we have rendered
+
+00:12:45.460 --> 00:12:47.879
+by the render function that is set,
+
+00:12:47.880 --> 00:12:51.599
+we see at the bottom in the one.org file,
+
+00:12:51.600 --> 00:12:56.119
+in the `:ONE:` property. Now this is HTML, so we can pass it,
+
+00:12:56.120 --> 00:13:00.879
+for instance, h1, the tag h1.
+
+00:13:00.880 --> 00:13:06.039
+We save that file. We go in the one.org file,
+
+00:13:06.040 --> 00:13:10.399
+we build again, and now we see that we have an h1.
+
+00:13:10.400 --> 00:13:14.839
+Okay, this is interesting, but if we would have to
+
+00:13:14.840 --> 00:13:18.119
+build this function with a string like that,
+
+00:13:18.120 --> 00:13:22.319
+this is boring and not the best way.
+
+00:13:22.320 --> 00:13:24.639
+So we can use the library Jack,
+
+00:13:24.640 --> 00:13:27.588
+which offers function `jack-html`
+
+00:13:27.589 --> 00:13:31.580
+that takes some data structure,
+
+00:13:31.581 --> 00:13:34.179
+for instance, an h1, a nested list
+
+00:13:34.180 --> 00:13:38.479
+that represents the HTML that we want to render,
+
+00:13:38.480 --> 00:13:41.039
+and transform it into an HTML string.
+
+00:13:41.040 --> 00:13:43.959
+So we have that, we saved,
+
+00:13:43.960 --> 00:13:48.279
+we rebuild in the one.org file with `one-build`,
+
+00:13:48.280 --> 00:13:55.399
+and we see now that this has been built using `jack-html`.
+
+00:13:55.400 --> 00:13:59.159
+Now what do we want to do?
+
+00:13:59.160 --> 00:14:01.999
+Okay, see, the thing that we want to do
+
+00:14:02.000 --> 00:14:04.999
+is to understand page-tree. So what is page-tree?
+
+00:14:05.000 --> 00:14:07.599
+page-tree is when we go to one.org,
+
+00:14:07.600 --> 00:14:09.479
+this is really for foo,
+
+00:14:09.480 --> 00:14:17.919
+this is the parsed data of that headline, that page.
+
+00:14:17.920 --> 00:14:23.119
+So this is done with, no, not this one, we use,
+
+00:14:23.120 --> 00:14:27.879
+so in the mini-buffer, we use `one-parse-buffer`,
+
+00:14:27.880 --> 00:14:29.999
+and we see this is the data
+
+00:14:30.000 --> 00:14:33.359
+that we have with that function, first headline,
+
+00:14:33.360 --> 00:14:34.439
+and the second headline,
+
+00:14:34.440 --> 00:14:38.199
+this is the parse tree that we have there.
+
+00:14:38.200 --> 00:14:40.719
+This is that data that is passed to
+
+00:14:40.720 --> 00:14:45.279
+the `foo` render function. One thing that is cool,
+
+00:14:45.280 --> 00:14:51.599
+so I see here, is that as we are dealing with data,
+
+00:14:51.600 --> 00:14:53.359
+we have all the data of the website,
+
+00:14:53.360 --> 00:14:57.360
+we can show them in the web page. Now, why not?
+
+00:14:57.361 --> 00:15:00.079
+It's great to write the website
+
+00:15:00.080 --> 00:15:02.839
+and also to debug if we need to debug at some point.
+
+00:15:02.840 --> 00:15:10.279
+So let's render page-tree directly in the page, one.org,
+
+00:15:10.280 --> 00:15:15.679
+and we rebuild, we reload, and we see this is what we have,
+
+00:15:15.680 --> 00:15:17.159
+this is the data that we have, okay?
+
+00:15:17.160 --> 00:15:20.599
+And we have, for instance, the `:raw-value` with this "foo",
+
+00:15:20.600 --> 00:15:22.519
+which is the headline,
+
+00:15:22.520 --> 00:15:27.039
+the content of the headline in a raw format,
+
+00:15:27.040 --> 00:15:29.719
+and we also have custom,
+
+00:15:29.720 --> 00:15:33.839
+so here we have the `:CUSTOM_ID: foo` and `:ONE: foo`,
+
+00:15:33.840 --> 00:15:34.999
+which are the properties,
+
+00:15:35.000 --> 00:15:40.359
+and when we are inside those render functions,
+
+00:15:40.360 --> 00:15:43.240
+we have access to this.
+
+00:15:43.241 --> 00:15:46.799
+So let's, what can we do now, is to,
+
+00:15:46.800 --> 00:15:48.639
+let's get the row value.
+
+00:15:48.640 --> 00:15:51.759
+So we no longer need that.
+
+00:15:51.760 --> 00:15:54.839
+Maybe we can do something like that.
+
+00:15:54.840 --> 00:16:03.999
+We create now HTML. In HTML, we want the body,
+
+00:16:04.000 --> 00:16:08.039
+we want an h1 tag, and we are going to pass it
+
+00:16:08.040 --> 00:16:10.559
+a title, and in the title,
+
+00:16:10.560 --> 00:16:13.839
+this is something that we let-bind here,
+
+00:16:13.840 --> 00:16:15.599
+so the value of the title,
+
+00:16:15.600 --> 00:16:24.719
+we get it with `org-element-property`,
+
+00:16:24.720 --> 00:16:29.759
+and the `:raw-value`, so this is the property that we want,
+
+00:16:29.760 --> 00:16:34.039
+so `raw-value`, and from which data we want that,
+
+00:16:34.040 --> 00:16:40.599
+to page-tree. So now, let's have one.org at the bottom,
+
+00:16:40.600 --> 00:16:46.039
+we build again, and now we reload,
+
+00:16:46.040 --> 00:16:50.839
+and we see that we get a foo. This is that title,
+
+00:16:50.840 --> 00:16:56.559
+the value of that variable in that data structure.
+
+00:16:56.560 --> 00:17:00.319
+Now, let's get those two properties.
+
+00:17:00.320 --> 00:17:03.039
+How do we get those two properties?
+
+00:17:03.040 --> 00:17:07.199
+The same way, `:ONE:` that we call one, so raw-value,
+
+00:17:07.200 --> 00:17:11.639
+we change that for `:ONE`, the other raw-value
+
+00:17:11.640 --> 00:17:19.359
+for `:CUSTOM_ID`, we change the title for `custom-id`,
+
+00:17:19.360 --> 00:17:23.559
+and what we want now is for instance,
+
+00:17:23.560 --> 00:17:30.159
+yes, h1 again, and org properties.
+
+00:17:30.160 --> 00:17:34.799
+We add the org properties, and let's do a list,
+
+00:17:34.800 --> 00:17:39.799
+another list, with li element, one,
+
+00:17:39.800 --> 00:17:43.159
+we want that value, and that value will be
+
+00:17:43.160 --> 00:17:45.759
+the value of the variable one.
+
+00:17:45.760 --> 00:17:52.479
+We can do that with also custom-id,
+
+00:17:52.480 --> 00:17:56.119
+and now, in the one that we have to save,
+
+00:17:56.120 --> 00:17:59.439
+and in one of our files, not like that,
+
+00:17:59.440 --> 00:18:03.199
+we rebuild that, and we see
+
+00:18:03.200 --> 00:18:05.799
+that we can get those properties.
+
+00:18:05.800 --> 00:18:06.999
+This is super cool.
+
+00:18:07.000 --> 00:18:09.159
+As we are dealing with data,
+
+00:18:09.160 --> 00:18:11.719
+and we have the information of the whole website,
+
+00:18:11.720 --> 00:18:14.039
+we can do whatever we want,
+
+00:18:14.040 --> 00:18:16.599
+because we have access to that data.
+
+00:18:16.600 --> 00:18:23.839
+Let's, for instance, add a date, the date of 2023,
+
+00:18:23.840 --> 00:18:28.319
+so I think this is 02, when there is the conference, see,
+
+00:18:28.320 --> 00:18:32.759
+and we can get access to that `one` again,
+
+00:18:32.760 --> 00:18:37.954
+here, so `date`, and we go,
+
+00:18:37.955 --> 00:18:42.359
+we change the `:CUSTOM_ID` with the `:DATE`,
+
+00:18:42.360 --> 00:18:46.639
+and in the list here,
+
+00:18:46.640 --> 00:18:53.359
+so we want in the list, this to be the date,
+
+00:18:53.360 --> 00:18:56.559
+and we build again that,
+
+00:18:56.560 --> 00:18:58.799
+and we have access to the date.
+
+00:18:58.800 --> 00:19:03.199
+Really, we can do whatever we want.
+
+NOTE Rendering content
+
+00:19:03.200 --> 00:19:06.759
+Now, we want the content. So far,
+
+00:19:06.760 --> 00:19:11.599
+we get the property, but what about the content,
+
+00:19:11.600 --> 00:19:17.039
+so h1, and now we put "Org content",
+
+00:19:17.040 --> 00:19:21.359
+and this is going to be something in the variable content,
+
+00:19:21.360 --> 00:19:25.079
+and we have to add that variable,
+
+00:19:25.080 --> 00:19:27.999
+so in the let binding, we write our content,
+
+00:19:28.000 --> 00:19:30.639
+we are going to have that content from the page-tree.
+
+00:19:30.640 --> 00:19:33.679
+To do that, we use `org-export`,
+
+00:19:33.680 --> 00:19:36.119
+so we need to export something into HTML,
+
+00:19:36.120 --> 00:19:37.599
+we export the data with the backend.
+
+00:19:37.600 --> 00:19:40.239
+So the data that we want is page-tree,
+
+00:19:40.240 --> 00:19:42.239
+but we don't want the first headline,
+
+00:19:42.240 --> 00:19:46.759
+so we use `org-element-contents`,
+
+00:19:46.760 --> 00:19:50.519
+and we pass it `page-tree`, so this is that.
+
+00:19:50.520 --> 00:19:53.119
+But for the exported, we need to pass it,
+
+00:19:53.120 --> 00:20:00.599
+and also, how do we call that, we call that an Org backend.
+
+00:20:00.600 --> 00:20:06.759
+So `one-ox` is our backend provided by one.el,
+
+00:20:06.760 --> 00:20:09.519
+and the last argument is nil.
+
+00:20:09.520 --> 00:20:14.079
+We are almost done. Now with one.org,
+
+00:20:14.080 --> 00:20:18.879
+we build the website, and we see that we have an error,
+
+00:20:18.880 --> 00:20:22.079
+it's because this is not a content,
+
+00:20:22.080 --> 00:20:27.039
+so there.. No, okay,
+
+00:20:27.040 --> 00:20:32.839
+there was this `org-element-contents`, I think,
+
+00:20:32.840 --> 00:20:37.159
+and now we build it, and we must see it here.
+
+NOTE Rendering CSS
+
+00:20:37.160 --> 00:20:39.959
+So we have the content,
+
+00:20:39.960 --> 00:20:43.319
+we have the Org values,
+
+00:20:43.320 --> 00:20:48.399
+and last thing that we can do maybe is to put some CSS.
+
+00:20:48.400 --> 00:20:51.919
+Let's have a look to `one-default` function.
+
+00:20:51.920 --> 00:20:56.399
+We can see in one.el file that we have a lot of
+
+00:20:56.400 --> 00:21:01.919
+default functions that we can use to take inspiration.
+
+00:21:01.920 --> 00:21:05.599
+The last thing that we need
+
+00:21:05.600 --> 00:21:07.999
+is to link to the one.css file,
+
+00:21:08.000 --> 00:21:14.919
+so we are going to do that `onerc` file.
+
+00:21:14.920 --> 00:21:20.319
+This is here, so `html` we don't need,
+
+00:21:20.320 --> 00:21:26.479
+we have that one, we want the head to be here,
+
+00:21:26.480 --> 00:21:37.319
+and we pass it a class, which is a title,
+
+00:21:37.320 --> 00:21:42.239
+a div with the class content. We have that.
+
+00:21:42.240 --> 00:21:46.159
+Now with one.org, we build it again,
+
+00:21:46.160 --> 00:21:50.599
+and we should see the website render with the CSS,
+
+00:21:50.600 --> 00:21:56.759
+the property, and all the content,
+
+00:21:56.760 --> 00:22:01.519
+and we've done that just with that Emacs Lisp file,
+
+00:22:01.520 --> 00:22:08.959
+so this is all I wanted to show you today with one.el,
+
+00:22:08.960 --> 00:22:14.879
+I hope you enjoyed the talk, and have a nice day,
+
+00:22:14.880 --> 00:22:17.840
+and a nice conference.
diff --git a/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt
new file mode 100644
index 00000000..2f2e9a1a
--- /dev/null
+++ b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt
@@ -0,0 +1,638 @@
+WEBVTT
+
+
+00:00:02.899 --> 00:00:03.399
+[Speaker 0]: Out here or also you can continue discussing
+
+00:00:06.200 --> 00:00:06.700
+on IRC.
+
+00:00:23.200 --> 00:00:23.320
+So I see 2 questions coming in already on the
+
+00:00:24.400 --> 00:00:24.619
+pad. So the first question is,
+
+00:00:26.759 --> 00:00:27.040
+how did you draw the under braces and over
+
+00:00:38.360 --> 00:00:38.559
+braces? Sorry, Jeff, you're muted on the blue
+
+00:00:38.559 --> 00:00:39.059
+button.
+
+00:00:43.340 --> 00:00:43.680
+[Speaker 1]: I'm sorry for some reason I'm seeing
+
+00:00:45.960 --> 00:00:46.420
+everything twice. I'm hearing everything
+
+00:00:48.420 --> 00:00:48.600
+twice. So it's, it's about with about a 5
+
+00:00:53.400 --> 00:00:53.900
+[Speaker 0]: Probably my stream turned on
+
+00:00:57.340 --> 00:00:57.620
+[Speaker 1]: second delay. It's straight Oh,
+
+00:01:03.820 --> 00:01:04.000
+you're right Thank you so much I MPB is
+
+00:01:07.340 --> 00:01:07.840
+showing the the big blue button Okay,
+
+00:01:09.060 --> 00:01:09.380
+sorry everyone. Okay now.
+
+00:01:12.180 --> 00:01:12.260
+I'm together now Let's see How did I draw the
+
+00:01:13.140 --> 00:01:13.640
+over braces and under braces?
+
+00:01:17.120 --> 00:01:17.620
+LaTeX. That is a, that's a,
+
+00:01:25.020 --> 00:01:25.380
+yeah, and a SVG, I think,
+
+00:01:29.160 --> 00:01:29.460
+produced by LaTeX through a separate file.
+
+00:01:31.960 --> 00:01:32.460
+I tried to do like a LaTeX code block and
+
+00:01:33.940 --> 00:01:34.160
+didn't get around to it.
+
+00:01:36.900 --> 00:01:37.260
+Also, the code to produce it in TickSet was
+
+00:01:39.800 --> 00:01:39.940
+really, really long. So I didn't put it in
+
+00:01:47.300 --> 00:01:47.540
+[Speaker 0]: The next question is, you've got a nice
+
+00:01:48.840 --> 00:01:49.340
+sounding keyboard. What kind is it?
+
+00:01:50.380 --> 00:01:50.600
+[Speaker 1]: the notes. GARY ILLYES-CHAKRABARTYTT I'm so
+
+00:01:55.960 --> 00:01:56.180
+sorry. It is an Ergodox split keyboard for my
+
+00:01:59.700 --> 00:02:00.180
+wrists. Sorry about the noise.
+
+00:02:01.020 --> 00:02:01.280
+[Speaker 0]: Awesome. Yeah, no worries.
+
+00:02:02.220 --> 00:02:02.440
+I mean, I like to hear it.
+
+00:02:03.900 --> 00:02:04.400
+We like to hear it. I think a lot of us do.
+
+00:02:07.080 --> 00:02:07.580
+[Speaker 1]: Do we have anything on IRC?
+
+00:02:15.880 --> 00:02:16.380
+Let's see. Someone's asking for ligatures.
+
+00:02:23.420 --> 00:02:23.860
+Do you have any questions,
+
+00:02:26.100 --> 00:02:26.600
+Ben? Charles?
+
+00:02:35.280 --> 00:02:35.440
+[Speaker 0]: I see a bunch on the path that I can read for
+
+00:02:36.980 --> 00:02:37.480
+[Speaker 1]: Oh, yeah, please do.
+
+00:02:39.960 --> 00:02:40.140
+[Speaker 0]: now. Sure. So next question is,
+
+00:02:41.580 --> 00:02:42.080
+do you find that the invasive,
+
+00:02:44.540 --> 00:02:44.680
+quote unquote, 3-formatting interferes with
+
+00:02:44.680 --> 00:02:45.180
+navigation?
+
+00:02:48.700 --> 00:02:49.200
+[Speaker 1]: Yes, it does. That is true.
+
+00:03:01.300 --> 00:03:01.800
+Let me see. Yeah, it's weird.
+
+00:03:04.120 --> 00:03:04.340
+The good news is that,
+
+00:03:06.260 --> 00:03:06.500
+oh, you know what? The first thing I did,
+
+00:03:07.600 --> 00:03:08.100
+my first attempt at this,
+
+00:03:11.140 --> 00:03:11.480
+I actually made all of the incoming text
+
+00:03:13.440 --> 00:03:13.660
+invisible and just replaced it with my own
+
+00:03:15.440 --> 00:03:15.940
+text. And that was actually a lot worse.
+
+00:03:21.420 --> 00:03:21.680
+The more of the input that is removed or made
+
+00:03:23.600 --> 00:03:23.960
+invisible, the harder the navigation becomes.
+
+00:03:26.520 --> 00:03:26.880
+So the fact that now I'm just inserting line
+
+00:03:29.440 --> 00:03:29.640
+breaks and spaces makes it a lot easier.
+
+00:03:30.540 --> 00:03:30.920
+And I can still search.
+
+00:03:34.600 --> 00:03:34.760
+And when I get to the destination of the
+
+00:03:38.300 --> 00:03:38.800
+search, I'm still in proper normal text.
+
+00:03:41.980 --> 00:03:42.160
+So it got a little better by changing my
+
+00:03:43.740 --> 00:03:43.940
+strategy a bit, but it's still a little bit
+
+00:03:50.180 --> 00:03:50.680
+of a problem. Let's see.
+
+00:03:51.720 --> 00:03:52.220
+I'll go look at the etherpad.
+
+00:03:55.080 --> 00:03:55.520
+Where is it?
+
+00:03:57.260 --> 00:03:57.440
+[Speaker 0]: I can read the questions from etherpad if
+
+00:04:00.660 --> 00:04:00.860
+you'd like me to. And then If at any point
+
+00:04:02.720 --> 00:04:03.180
+you want to take the questions from IRC,
+
+00:04:04.320 --> 00:04:04.820
+then feel free to do that as well.
+
+00:04:07.240 --> 00:04:07.600
+[Speaker 1]: I found it. Can you show us the key bindings
+
+00:04:08.940 --> 00:04:09.440
+of your minor map for editing overlays?
+
+00:04:15.860 --> 00:04:16.360
+Well, I have a minor mode key map for
+
+00:04:21.720 --> 00:04:22.220
+increasing or decreasing the level of detail.
+
+00:04:24.640 --> 00:04:25.140
+And the key bindings are like,
+
+00:04:31.840 --> 00:04:32.340
+I can't remember what it is.
+
+00:04:34.080 --> 00:04:34.200
+If you go and you look at the source on
+
+00:04:35.640 --> 00:04:36.140
+GitHub, you can see it there.
+
+00:04:37.600 --> 00:04:38.100
+I forgot what I bound them to.
+
+00:04:40.320 --> 00:04:40.820
+Something that I'm allowed to do.
+
+00:04:45.860 --> 00:04:46.220
+They have restrictions on what key bindings
+
+00:04:47.200 --> 00:04:47.700
+you can make in minor modes.
+
+00:04:49.300 --> 00:04:49.640
+And I carefully followed the directions.
+
+00:04:50.580 --> 00:04:50.820
+I don't remember what it was.
+
+00:04:54.220 --> 00:04:54.720
+It's like Control-C-P or something like that.
+
+00:05:00.600 --> 00:05:01.100
+Or yeah. Sorry. Your examples were with C++
+
+00:05:02.640 --> 00:05:03.140
+if you experiment with any other languages.
+
+00:05:07.460 --> 00:05:07.960
+I haven't. I guess this is just a perennial
+
+00:05:10.440 --> 00:05:10.940
+pain point for C++ programmers.
+
+00:05:13.480 --> 00:05:13.860
+So that's kind of why my,
+
+00:05:15.680 --> 00:05:16.000
+and I am 1, and I guess that's why my focus
+
+00:05:17.880 --> 00:05:18.080
+was there. You probably have to rewrite some
+
+00:05:20.520 --> 00:05:21.020
+of the parsers to use something else.
+
+00:05:24.060 --> 00:05:24.160
+Would it be possible to include overlays in
+
+00:05:25.080 --> 00:05:25.580
+the source file itself?
+
+00:05:30.860 --> 00:05:31.360
+I actually don't understand this question.
+
+00:05:33.120 --> 00:05:33.440
+In the source file itself,
+
+00:05:35.160 --> 00:05:35.660
+there are language modes that do this.
+
+00:05:41.580 --> 00:05:41.740
+No, I'm not certain I understand that
+
+00:05:43.520 --> 00:05:43.700
+question. Maybe you could edit it a little
+
+00:05:45.360 --> 00:05:45.860
+bit more, overlays in the source file.
+
+00:05:48.840 --> 00:05:49.340
+What are your plans for TSP in the future?
+
+00:05:54.560 --> 00:05:55.060
+It's a little fragile.
+
+00:06:00.020 --> 00:06:00.520
+So it might be nice to investigate.
+
+00:06:02.600 --> 00:06:02.920
+I think you can get the compiler to output
+
+00:06:04.120 --> 00:06:04.620
+error messages in different formats,
+
+00:06:07.320 --> 00:06:07.800
+which might be more parsable or the parsing
+
+00:06:08.360 --> 00:06:08.860
+might be more maintainable.
+
+00:06:10.280 --> 00:06:10.520
+That might be an interesting thing to
+
+00:06:15.460 --> 00:06:15.960
+investigate. And the other thing is I have
+
+00:06:19.200 --> 00:06:19.700
+just 1 way of reformatting the output where
+
+00:06:21.360 --> 00:06:21.820
+everything on the same level is vertically
+
+00:06:23.920 --> 00:06:24.160
+aligned. But I think some people might want
+
+00:06:26.920 --> 00:06:27.040
+to make more use of the horizontal space on
+
+00:06:30.920 --> 00:06:31.260
+the screen and take the sort of sibling parts
+
+00:06:34.860 --> 00:06:35.360
+of the type and line them up straight across
+
+00:06:39.140 --> 00:06:39.640
+and take up a little bit less vertical space.
+
+00:06:47.560 --> 00:06:48.040
+Enriched mode. I don't know what enriched
+
+00:06:51.240 --> 00:06:51.500
+mode is. Interesting. Oh,
+
+00:06:52.720 --> 00:06:53.220
+what's my repository link?
+
+00:06:56.400 --> 00:06:56.900
+Let me get that then. I don't know how to
+
+00:07:00.620 --> 00:07:01.120
+format this properly, but it's just troll
+
+00:07:03.820 --> 00:07:04.320
+slash tspute. Yeah, it's on GitHub.
+
+00:07:14.820 --> 00:07:15.160
+Something like that. Let's see.
+
+00:07:16.120 --> 00:07:16.620
+This looks like the Etherpad.
+
+00:07:19.640 --> 00:07:20.140
+It looks like all the Etherpad questions.
+
+00:07:22.120 --> 00:07:22.620
+We have 1 here from Charles.
+
+00:07:24.960 --> 00:07:25.120
+Can overlays work as hypertext so you can
+
+00:07:26.680 --> 00:07:27.180
+link an error message back to the source?
+
+00:07:30.720 --> 00:07:30.920
+Yeah, actually, that's done by default in
+
+00:07:32.680 --> 00:07:33.120
+compilation mode. That's 1 of the features
+
+00:07:36.160 --> 00:07:36.660
+you get, which has been around for literally
+
+00:07:41.280 --> 00:07:41.520
+decades. Oh, yeah. Is it already there?
+
+00:07:42.240 --> 00:07:42.740
+Yes, it's already there.
+
+00:07:45.960 --> 00:07:46.460
+Let's see. Do we have anything on IRC?
+
+00:07:56.680 --> 00:07:56.880
+Let me see. OK, looks like it seems like
+
+00:07:58.000 --> 00:07:58.480
+we've run out of questions.
+
+00:07:58.860 --> 00:07:59.360
+Is that true?
+
+00:08:04.440 --> 00:08:04.640
+[Speaker 0]: Yeah, it seems so. It seems so,
+
+00:08:06.820 --> 00:08:07.200
+although we still have a couple more minutes,
+
+00:08:09.000 --> 00:08:09.480
+like maybe 3, 4 minutes on the stream.
+
+00:08:13.780 --> 00:08:14.240
+So yeah. And then, of course,
+
+00:08:15.800 --> 00:08:16.020
+once the stream does move on to the next
+
+00:08:19.120 --> 00:08:19.440
+talk. Folks are welcome to join Jeff here on
+
+00:08:22.340 --> 00:08:22.500
+BigBlueButton. If Jeff still has a few more
+
+00:08:24.640 --> 00:08:24.960
+minutes to just chat here or ask questions
+
+00:08:25.800 --> 00:08:26.300
+here, that works as well.
+
+00:08:26.920 --> 00:08:27.240
+[Speaker 1]: JEFF CROSSMAN-WILSONEY-PORTMAN Yeah,
+
+00:08:29.640 --> 00:08:30.140
+if anyone's excited about the tool.
+
+00:08:38.460 --> 00:08:38.880
+Are the notes are available online,
+
+00:08:42.100 --> 00:08:42.360
+right? I uploaded an org file that was my
+
+00:08:43.700 --> 00:08:43.940
+talk, and I actually included some
+
+00:08:48.900 --> 00:08:49.300
+references. Like at the end,
+
+00:08:50.860 --> 00:08:51.360
+there's some links and stuff like that.
+
+00:08:54.620 --> 00:08:54.820
+Whenever you see like a underlined thing in
+
+00:08:56.840 --> 00:08:56.980
+my presentation, it's like I was kind of
+
+00:08:58.520 --> 00:08:59.020
+thinking people would have access to the
+
+00:09:00.920 --> 00:09:01.160
+actual presentation itself so they could go
+
+00:09:04.640 --> 00:09:05.140
+and see what it was I was linking to some PDF
+
+00:09:07.540 --> 00:09:08.000
+somewhere. How annoying is this for multiple
+
+00:09:09.600 --> 00:09:09.960
+compilers? It's annoying,
+
+00:09:15.620 --> 00:09:15.860
+Ben. I basically have separate parsers for
+
+00:09:18.600 --> 00:09:18.760
+Clang and GCC, and I'm not supporting MSVC at
+
+00:09:23.540 --> 00:09:23.940
+the moment. So yeah, that's where I do worry
+
+00:09:26.520 --> 00:09:26.680
+about its fragility, about the way I'm kind
+
+00:09:27.720 --> 00:09:28.220
+of parsing these error messages,
+
+00:09:29.340 --> 00:09:29.840
+which are idiosyncratic.
+
+00:09:38.440 --> 00:09:38.680
+Oh, yeah, great. Thank you,
+
+00:09:49.060 --> 00:09:49.220
+Amin. That's good. Should just follow that
+
+00:09:49.600 --> 00:09:50.100
+link, I guess.
+
+00:09:56.420 --> 00:09:56.720
+[Speaker 0]: Well, yeah, it's so that you have to scroll
+
+00:09:59.020 --> 00:09:59.380
+down a little bit underneath the video
+
+00:10:00.460 --> 00:10:00.960
+embedding itself. There's timestamps.
+
+00:10:01.880 --> 00:10:02.380
+And then below the timestamps,
+
+00:10:03.240 --> 00:10:03.740
+I see a bunch of links,
+
+00:10:06.140 --> 00:10:06.640
+including 1 that says download.org.
+
+00:10:09.800 --> 00:10:10.020
+[Speaker 1]: Yeah, let's see what that is.
+
+00:10:13.080 --> 00:10:13.320
+Is that the right 1? Yeah,
+
+00:10:14.780 --> 00:10:15.280
+that's it. That's the 1.
+
+00:10:19.280 --> 00:10:19.540
+Yeah, you can also see all of my hacks to Org
+
+00:10:20.740 --> 00:10:21.240
+Present are in there as well.
+
+00:10:25.760 --> 00:10:25.920
+I followed the System Crafters thing and made
+
+00:10:27.160 --> 00:10:27.660
+a bunch of my own modifications.
+
+00:10:33.120 --> 00:10:33.420
+Org Present has this problem where every
+
+00:10:35.760 --> 00:10:36.060
+heading is a slide, which I don't like.
+
+00:10:37.080 --> 00:10:37.580
+I kind of want hierarchy.
+
+00:10:41.040 --> 00:10:41.540
+You know? Oh, no. Sorry.
+
+00:10:43.440 --> 00:10:43.940
+Every level 1 heading is a slide.
+
+00:10:46.360 --> 00:10:46.720
+And I kind of want hierarchy among the
+
+00:10:51.440 --> 00:10:51.640
+slides. And I had to sort of invent it in
+
+00:10:54.320 --> 00:10:54.820
+that system myself through navigation.
+
+00:11:03.800 --> 00:11:04.300
+It looks like things have quieted down.
+
+00:11:09.520 --> 00:11:10.020
+Shall we call it?
+
+00:11:14.020 --> 00:11:14.120
+[Speaker 0]: Yeah, sure. So yeah, thanks again for the
+
+00:11:17.780 --> 00:11:18.120
+great talk, Jeff. And also to the audience
+
+00:11:18.960 --> 00:11:19.460
+for questions and discussions.
+
+00:11:21.720 --> 00:11:21.900
+People are welcome to stay here on BBB if
+
+00:11:24.060 --> 00:11:24.160
+Jeff has time to continue the discussions and
+
+00:11:25.320 --> 00:11:25.520
+ask any questions they might have.
+
+00:11:26.820 --> 00:11:27.320
+Otherwise, yeah, we can wrap it.
+
+00:11:29.200 --> 00:11:29.380
+[Speaker 1]: Sure. Thank you so much.
+
+00:11:30.400 --> 00:11:30.880
+And I love this conference.
+
+00:11:33.900 --> 00:11:34.120
+I've been a happy attendee since like 2015 or
+
+00:11:36.760 --> 00:11:37.120
+something. So yeah, it's great.
+
+00:11:37.760 --> 00:11:38.260
+Thank you for your work.
+
+00:11:41.040 --> 00:11:41.260
+[Speaker 0]: Thank you. Cheers. I mean,
+
+00:11:43.080 --> 00:11:43.260
+in large part, thanks to awesome people like
+
+00:11:44.280 --> 00:11:44.540
+you who give these amazing talks.
+
+00:11:45.420 --> 00:11:45.920
+So Thank you as well.
+
+00:14:30.260 --> 00:14:30.460
+[Speaker 1]: You are currently the only person in this
+
+00:14:30.460 --> 00:14:30.960
+conference.
+
+00:21:15.260 --> 00:21:15.760
+You
+
+00:21:37.760 --> 00:21:38.260
+1
+
+00:22:23.260 --> 00:22:23.760
+1 1 1 1 2 1 2 1 2 1 1 3 4 1 2 4 1 1 3 4 1 1 2
+
+00:22:28.100 --> 00:22:28.600
+3 3 4 1 2 1
+
+00:24:41.445 --> 00:24:41.945
+You
diff --git a/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt
new file mode 100644
index 00000000..dfafd866
--- /dev/null
+++ b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt
@@ -0,0 +1,80 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:33.560
+Introduction
+
+00:00:33.560 --> 00:02:02.500
+Overlays and what they can do
+
+00:02:02.500 --> 00:02:35.700
+Simple overlay example - creating an overlay
+
+00:02:35.700 --> 00:03:10.940
+Adding properties
+
+00:03:10.940 --> 00:03:24.660
+Deleting an overlay
+
+00:03:24.660 --> 00:03:59.340
+Setting fonts the right way
+
+00:03:59.540 --> 00:04:12.580
+More properties
+
+00:04:12.580 --> 00:04:49.780
+Visibility
+
+00:04:49.780 --> 00:05:27.820
+Adding text
+
+00:05:27.820 --> 00:05:45.380
+Custom properties
+
+00:05:45.380 --> 00:06:36.100
+Notes on properties
+
+00:06:36.100 --> 00:08:17.680
+Improving C++ compiler output
+
+00:08:17.680 --> 00:08:30.240
+The problem with C++ error messages
+
+00:08:30.240 --> 00:08:47.520
+Many standard class templates have default arguments
+
+00:08:47.520 --> 00:09:20.960
+Some types are aliases for longer things, too
+
+00:09:20.960 --> 00:10:18.240
+Reporting type information accurately means long lines
+
+00:10:18.240 --> 00:11:49.320
+Emacs can help - Treat C++ type names as just another kind of balanced expression
+
+00:11:49.320 --> 00:12:22.400
+Add overlays to improve readability
+
+00:12:22.400 --> 00:12:59.500
+Create a minor mode that runs during compilation
+
+00:12:59.500 --> 00:14:16.100
+Parsing types as balanced expressions
+
+00:14:16.100 --> 00:14:52.260
+Indent and fill with overlays - Use ancient "pretty printing" algorithms"
+
+00:14:52.260 --> 00:15:14.520
+Overlays can mimic line breaks and indentation
+
+00:15:14.520 --> 00:17:12.660
+Hiding details - Marking depths with overlays
+
+00:17:12.660 --> 00:18:04.900
+Hiding to a target depth
+
+00:18:04.900 --> 00:20:10.220
+Demo
+
+00:20:10.220 --> 00:20:51.220
+Conclusion
diff --git a/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt
new file mode 100644
index 00000000..772f4b59
--- /dev/null
+++ b/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt
@@ -0,0 +1,1319 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00.000 --> 00:00:04.897
+Hi, I'm Jeff Trull, and today I'm going to talk to you
+
+00:00:04.898 --> 00:00:08.460
+about improving C++ compiler diagnostics
+
+00:08.460 --> 00:13.600
+using overlays and other features from Emacs.
+
+00:13.600 --> 00:15.840
+First an overview of my talk.
+
+00:15.840 --> 00:00:17.656
+I'm going to cover what overlays are
+
+00:00:17.657 --> 00:00:19.325
+and how you can use them in code,
+
+00:00:19.326 --> 00:00:21.478
+then I'm going to talk about C++
+
+00:00:21.479 --> 00:00:24.480
+and why its compiler errors can be so onerous.
+
+00:24.480 --> 00:00:26.750
+Finally, we'll take that information
+
+00:00:26.751 --> 00:00:28.447
+and build a new minor mode
+
+00:00:28.448 --> 00:00:33.560
+using overlays and other Emacs features.
+
+NOTE Overlays and what they can do
+
+00:33.560 --> 00:35.520
+First of all, overlays.
+
+00:35.520 --> 00:36.680
+What are they?
+
+00:36.680 --> 00:00:39.124
+They are objects consisting of a buffer range
+
+00:00:39.125 --> 00:00:40.400
+and a set of properties.
+
+00:40.400 --> 00:43.120
+That means that they cover a region in a buffer.
+
+00:43.120 --> 00:00:45.533
+The properties can be a certain set
+
+00:00:45.534 --> 00:00:47.344
+of special property names,
+
+00:00:47.345 --> 00:00:50.288
+in which case they can be used to cause
+
+00:00:50.289 --> 00:00:52.569
+special effects in the buffer,
+
+00:00:52.570 --> 00:00:55.660
+but they never change the underlying text.
+
+00:55.660 --> 00:59.900
+You can use them for things like hiding things.
+
+00:59.900 --> 00:01:02.886
+So, for example, overlays are working right now
+
+00:01:02.887 --> 00:01:04.660
+in this window. `org-present`,
+
+00:01:04.661 --> 00:01:07.595
+the technology I'm using for this presentation,
+
+00:01:07.596 --> 00:01:10.031
+is hiding the asterisk before every headline,
+
+00:01:10.032 --> 00:01:12.520
+as well as the things called emphasis markers;
+
+00:01:12.521 --> 00:01:16.269
+that is, those things that make things look
+
+00:01:16.270 --> 00:01:20.700
+monospaced for verbatim, or italic, or bold.
+
+01:20.700 --> 00:01:24.421
+The special characters we use to mark off those sections
+
+00:01:24.422 --> 00:01:28.940
+are also hidden by `org-present` using overlays.
+
+01:28.940 --> 00:01:30.601
+But those things are still in the buffer
+
+00:01:30.602 --> 00:01:31.980
+and they're still visible to code.
+
+01:31.980 --> 00:01:34.921
+So if I run this little snippet of code down here,
+
+00:01:34.922 --> 00:01:37.403
+it's going to go up to the headline "Overlays
+
+00:01:37.404 --> 00:01:40.051
+and what they can do," and it's going to tell us
+
+00:01:40.052 --> 00:01:41.540
+what's there in the buffer.
+
+01:41.540 --> 01:45.100
+Let's go down and run this.
+
+01:45.100 --> 00:01:48.957
+So according to this code, the contents of the buffer
+
+00:01:48.958 --> 00:01:51.990
+to the left of the headline is a star in a space,
+
+00:01:51.991 --> 00:01:55.204
+which means that even though we can't see that star,
+
+00:01:55.205 --> 00:01:58.220
+it's still there, because it's hidden by an overlay.
+
+01:58.220 --> 02:02.500
+And that's kind of the essence of what overlays are.
+
+NOTE Simple overlay example - creating an overlay
+
+02:02.500 --> 02:04.780
+Let's do a simple overlay example.
+
+02:04.780 --> 00:02:06.719
+We have some text on the right here,
+
+00:02:06.720 --> 00:02:09.340
+which is a famous poem by William Carlos Williams,
+
+02:09.340 --> 02:12.180
+which has been the subject of many memes.
+
+02:12.180 --> 02:17.860
+Let's create an overlay that covers it.
+
+02:17.860 --> 02:20.700
+I'll go down here and use this snippet of code here.
+
+02:20.700 --> 00:02:25.918
+We'll go up to the top, and we'll mark everything
+
+00:02:25.919 --> 00:02:29.540
+between `#+BEGIN_VERSE` and `#+END_VERSE`.
+
+02:29.540 --> 00:02:33.276
+You can see we've created an overlay
+
+00:02:33.277 --> 00:02:35.700
+from position 74 to 224.
+
+NOTE Adding properties
+
+02:35.700 --> 00:02:38.063
+Now we can take that overlay that we already created
+
+00:02:38.064 --> 00:02:41.211
+and add a property, in this case a `face` property,
+
+00:02:41.212 --> 00:02:43.540
+to change the appearance of the text.
+
+02:43.540 --> 00:02:46.279
+This is a poem, and it's currently using
+
+00:02:46.280 --> 00:02:48.083
+a face that is monospaced,
+
+00:02:48.084 --> 00:02:50.491
+and so it looks like a computer program,
+
+00:02:50.492 --> 00:02:51.900
+even though it's a poem.
+
+02:51.900 --> 00:02:54.585
+I think it would be nicer to use something
+
+00:02:54.586 --> 00:02:57.980
+with variable-width font, maybe with some serifs.
+
+02:57.980 --> 03:01.140
+So let's give that a try.
+
+03:01.140 --> 03:03.700
+Now you can see that the poem looks quite a bit different.
+
+03:03.700 --> 03:10.940
+It looks more like what we'd see in a book.
+
+NOTE Deleting an overlay
+
+03:10.940 --> 03:13.100
+We can also delete overlays.
+
+03:13.100 --> 03:15.140
+So I've named this one.
+
+03:15.140 --> 00:03:17.765
+So we can just go down and run `delete-overlay`
+
+00:03:17.766 --> 00:03:20.048
+and get rid of it, and it'll go back to
+
+00:03:20.049 --> 00:03:22.660
+the appearance it had before.
+
+03:22.660 --> 03:23.660
+And there it is.
+
+03:23.660 --> 03:24.660
+It's back to normal.
+
+NOTE Setting fonts the right way
+
+03:24.660 --> 00:03:28.473
+Now, if you're interested in changing all of the verses
+
+00:03:28.474 --> 00:03:31.108
+inside an Org Mode file to a different face
+
+00:03:31.109 --> 00:03:32.785
+or a different font family,
+
+00:03:32.786 --> 00:03:35.060
+this isn't the way you'd really do it.
+
+03:35.060 --> 03:37.520
+I'll just show you that real quick.
+
+03:37.520 --> 00:03:43.471
+The right way is probably to change the `org-verse` face,
+
+00:03:43.472 --> 00:03:48.868
+which is the face used for all of the verse blocks
+
+00:03:48.869 --> 00:03:51.620
+inside your Org Mode file.
+
+03:51.620 --> 03:55.100
+And so this is how you do it here:
+
+03:55.100 --> 03:56.100
+`face-remap-add-relative`.
+
+03:56.100 --> 03:58.340
+Let's give it a try.
+
+03:58.340 --> 03:59.340
+It worked!
+
+NOTE More properties
+
+03:59.540 --> 00:04:01.805
+There are more advanced things that you can do
+
+00:04:01.806 --> 00:04:03.300
+other than just changing fonts.
+
+04:03.300 --> 00:04:05.543
+There's a whole long list of them in the manual,
+
+00:04:05.544 --> 00:04:12.580
+but let's talk about the ones we're going to use today.
+
+NOTE Visibility
+
+04:12.580 --> 04:17.380
+You can make text invisible, just like `org-present` did.
+
+04:17.380 --> 04:21.820
+The simplest way is to set the `invisible` property to true,
+
+04:21.820 --> 04:24.500
+so here's a code snippet that will do that.
+
+04:24.500 --> 00:04:26.159
+What we're going to do is
+
+00:04:26.160 --> 00:04:28.966
+go and find the word "plums" inside the poem,
+
+00:04:28.967 --> 00:04:31.284
+and then we're going to make it invisible
+
+00:04:31.285 --> 00:04:33.436
+by creating an overlay that covers it,
+
+00:04:33.437 --> 00:04:36.820
+and then setting the invisible property to true.
+
+04:36.820 --> 04:37.940
+Boom!
+
+04:37.940 --> 04:38.940
+It's gone.
+
+04:38.940 --> 04:39.940
+We've eaten the plums.
+
+04:39.940 --> 04:42.180
+Visibility is a huge topic and very complicated.
+
+04:42.180 --> 04:44.220
+There are powerful mechanisms for using it.
+
+04:44.220 --> 00:04:46.626
+I suggest reading the manual
+
+00:04:46.627 --> 00:04:49.780
+if you'd like to know more about that.
+
+NOTE Adding text
+
+04:49.780 --> 00:04:52.117
+Another thing we can do with properties
+
+00:04:52.118 --> 00:04:54.980
+is to add text either before or after an overlay.
+
+04:54.980 --> 00:04:57.347
+Since we've made the word "plums" invisible,
+
+00:04:57.348 --> 00:05:00.574
+or anything that you make invisible in the buffer,
+
+00:05:00.575 --> 00:05:02.662
+if you add text then afterwards,
+
+00:05:02.663 --> 00:05:05.700
+it looks like you've replaced the original words
+
+05:05.700 --> 05:08.220
+with new words.
+
+05:08.220 --> 00:05:12.046
+So let's add a property, a `before-string` property,
+
+00:05:12.047 --> 00:05:14.193
+to the overlay that we used before
+
+00:05:14.194 --> 00:05:17.137
+to make it seem as though we're eating cherries
+
+00:05:17.138 --> 00:05:18.180
+instead of plums.
+
+05:18.180 --> 05:19.180
+Boom!
+
+05:19.580 --> 05:22.020
+There it is.
+
+05:22.020 --> 05:27.820
+So that's how you can replace words using overlays.
+
+NOTE Custom properties
+
+05:27.820 --> 00:05:29.760
+You can also have custom properties
+
+00:05:29.761 --> 00:05:31.700
+that you name and then use yourself.
+
+05:31.700 --> 05:35.320
+For example, you can use it to mark regions in the buffer.
+
+05:35.320 --> 00:05:38.008
+You can also use it to add information
+
+00:05:38.009 --> 00:05:41.180
+to regions in the buffer for your own tracking
+
+05:41.180 --> 05:45.380
+in a minor mode or something like that, which we will use.
+
+NOTE Notes on properties
+
+05:45.380 --> 05:49.620
+Finally, two notes on properties.
+
+05:49.620 --> 00:05:51.950
+We've been talking about overlay properties,
+
+00:05:51.951 --> 00:05:54.540
+but there's also something called text properties.
+
+05:54.540 --> 05:57.460
+Text properties are attached to text in a buffer.
+
+05:57.460 --> 06:00.900
+When you copy that text, the properties come along with it.
+
+06:00.900 --> 00:06:03.056
+If you modify the properties,
+
+00:06:03.057 --> 00:06:05.500
+the buffer is considered modified.
+
+06:05.500 --> 06:08.460
+Org Mode makes heavy use of text properties,
+
+06:08.460 --> 00:06:11.677
+as we can see by running this little code snippet here,
+
+00:06:11.678 --> 00:06:14.060
+which is going to tell us the properties
+
+06:14.060 --> 00:06:16.565
+and the string attached
+
+00:06:16.566 --> 00:06:20.740
+to the "Some poetry" headline on the right.
+
+06:20.740 --> 06:23.660
+There's also some controversy regarding performance.
+
+06:23.660 --> 00:06:25.520
+It may be that text properties
+
+00:06:25.521 --> 00:06:27.860
+perform better than overlay properties,
+
+06:27.860 --> 00:06:28.892
+so do some research
+
+00:06:28.893 --> 00:06:31.060
+if you're going to make heavy use of them.
+
+06:31.060 --> 06:36.100
+I prefer overlays because they're just easier to use.
+
+NOTE Improving C++ compiler output
+
+06:36.100 --> 06:37.540
+C++ compiler output.
+
+06:37.540 --> 00:06:41.170
+So my day job is C++ programmer,
+
+00:06:41.171 --> 00:06:46.560
+and although I've been an Emacser for many years,
+
+00:06:46.561 --> 00:06:52.860
+it can be a little bit of a chore dealing with errors.
+
+06:52.860 --> 00:06:55.680
+The error messages that come out of the compiler
+
+00:06:55.681 --> 00:06:57.580
+can be pretty hard to understand.
+
+06:57.580 --> 00:07:00.537
+This has often been a barrier,
+
+00:07:00.538 --> 00:07:04.640
+particularly for people who are new to C++.
+
+07:04.640 --> 07:09.040
+So let's see what that's like.
+
+07:09.040 --> 00:07:10.559
+I have an example
+
+00:07:10.560 --> 00:07:14.780
+which is generously supplied by Ben Deane of Intel.
+
+07:14.780 --> 00:07:17.082
+So let's see what it looks like
+
+00:07:17.083 --> 00:07:19.313
+when you compile a C++ program
+
+00:07:19.314 --> 00:07:24.400
+that has a difficult error in it.
+
+07:24.400 --> 07:27.400
+Okay.
+
+07:28.400 --> 07:31.400
+Okay.
+
+07:31.400 --> 07:35.680
+So you see we have a lot of fairly verbose messages.
+
+07:35.680 --> 07:39.400
+The most verbose one I think is probably here.
+
+07:39.400 --> 07:41.000
+This one here.
+
+07:41.000 --> 07:42.000
+These are pretty bad.
+
+07:42.000 --> 07:43.000
+I think there might be bigger ones.
+
+07:43.000 --> 00:07:43.720
+Oh, yeah. Here we go.
+
+00:07:43.721 --> 00:07:44.960
+Here's my favorite one.
+
+00:07:44.961 --> 00:07:51.063
+You can see... Let's look for specialization... Basically,
+
+00:07:51.064 --> 00:07:55.178
+this whole section of the buffer here,
+
+00:07:55.179 --> 00:07:58.228
+that is specifying the specific types
+
+00:07:58.229 --> 00:08:02.000
+that a function template was instantiated with.
+
+08:02.000 --> 08:04.000
+And it's a lot there.
+
+08:04.000 --> 00:08:05.473
+So if you're trying to figure out
+
+00:08:05.474 --> 00:08:06.817
+what's wrong with your program
+
+00:08:06.818 --> 00:08:08.884
+and you're looking at something like this,
+
+00:08:08.885 --> 00:08:11.000
+it can be really, really hard to understand.
+
+08:11.000 --> 08:12.000
+Okay.
+
+08:12.000 --> 08:17.680
+Back to our presentation.
+
+NOTE The problem with C++ error messages
+
+08:17.680 --> 00:08:20.063
+So it's often this way in C++
+
+00:08:20.064 --> 00:08:23.400
+because we compose types from other types.
+
+08:23.400 --> 00:08:26.216
+They can be long to begin with,
+
+00:08:26.217 --> 00:08:30.240
+but then a couple of other factors come into play.
+
+NOTE Many standard class templates have default arguments
+
+08:30.240 --> 08:33.280
+First of all, we can have default template arguments.
+
+08:33.280 --> 00:08:35.363
+These are arguments you didn't write,
+
+00:08:35.364 --> 00:08:37.008
+but that are implicitly there
+
+00:08:37.009 --> 00:08:38.325
+and can sometimes refer
+
+00:08:38.326 --> 00:08:40.300
+to the arguments that you did write,
+
+00:08:40.301 --> 00:08:42.440
+which causes them to get a bit bigger,
+
+00:08:42.441 --> 00:08:47.520
+such as these allocator arguments here and here.
+
+NOTE Some types are aliases for longer things, too
+
+08:47.520 --> 08:49.360
+Then there are type aliases.
+
+08:49.360 --> 00:08:54.014
+For example, `std::string` here expands to
+
+00:08:54.015 --> 00:08:58.320
+a type with three template arguments.
+
+08:58.320 --> 00:09:01.940
+So you can imagine, when we combine
+
+00:09:01.941 --> 00:09:04.733
+those two things together,
+
+00:09:04.734 --> 00:09:09.763
+our simple vector of maps from strings to ints
+
+00:09:09.764 --> 00:09:14.257
+becomes this humongous thing here, which...
+
+00:09:14.258 --> 00:09:17.360
+Let's run the comparison.
+
+09:18.360 --> 09:20.960
+Yeah.
+
+NOTE Reporting type information accurately means long lines
+
+09:20.960 --> 00:09:24.924
+So in summary, to properly understand an error
+
+00:09:24.925 --> 00:09:27.370
+when you're a C++ programmer
+
+00:09:27.371 --> 00:09:29.718
+requires knowing the exact types
+
+00:09:29.719 --> 00:09:32.280
+that were supplied to your function.
+
+09:32.280 --> 00:09:34.430
+And types are built recursively,
+
+00:09:34.431 --> 00:09:36.646
+and therefore the types can--
+
+00:09:36.647 --> 00:09:40.513
+the correct exact name for the type
+
+00:09:40.514 --> 00:09:42.776
+can just be really huge
+
+00:09:42.777 --> 00:09:46.360
+and have many levels and layers to it.
+
+09:46.360 --> 00:09:48.113
+So when I was trying to understand
+
+00:09:48.114 --> 00:09:49.466
+the things I'd done wrong,
+
+00:09:49.467 --> 00:09:52.401
+especially when I was a newer C++ programmer,
+
+00:09:52.402 --> 00:09:54.570
+but honestly still even recently,
+
+00:09:54.571 --> 00:09:57.440
+if I was having a really intractable problem,
+
+09:57.440 --> 00:10:00.123
+I would just copy the entire error message out,
+
+00:10:00.124 --> 00:10:01.735
+stick it in the scratch buffer,
+
+00:10:01.736 --> 00:10:03.649
+and then manually reformat it
+
+00:10:03.650 --> 00:10:05.563
+so I could see what it was telling me
+
+00:10:05.564 --> 00:10:07.261
+I'd actually called the function
+
+00:10:07.262 --> 00:10:09.320
+or whatever it was with, the exact type.
+
+10:09.320 --> 00:10:11.311
+I had to sit there
+
+00:10:11.312 --> 00:10:13.240
+and go through the whole thing.
+
+10:13.240 --> 10:15.240
+But there's a better way.
+
+10:15.240 --> 10:18.240
+Now, anyway.
+
+NOTE Emacs can help - Treat C++ type names as just another kind of balanced expression
+
+10:18.240 --> 10:23.960
+So what can Emacs do to help us with this problem?
+
+10:23.960 --> 00:10:28.870
+First of all, if you think about a type name,
+
+00:10:28.871 --> 00:10:33.080
+it's a lot like what we call S-expressions
+
+10:33.080 --> 10:35.480
+or balanced expressions.
+
+10:35.480 --> 10:38.400
+Lisp code itself is an S-expression.
+
+10:38.400 --> 00:10:41.464
+It's basically things with parentheses
+
+00:10:41.465 --> 00:10:44.214
+and little atoms or symbols in it,
+
+00:10:44.215 --> 00:10:46.520
+or strings or numbers.
+
+10:46.520 --> 00:10:50.231
+But parenthesized balanced expressions
+
+00:10:50.232 --> 00:10:55.800
+are things that Emacs was actually built to deal with.
+
+10:55.800 --> 00:10:58.944
+They were... I found an old manual from 1981,
+
+00:10:58.945 --> 00:11:02.160
+and the two major modes that they recommended
+
+11:02.160 --> 00:11:05.765
+or that they actually documented in the manual were
+
+00:11:05.766 --> 00:11:08.400
+one, assembly language, and two, Lisp.
+
+11:08.400 --> 00:11:10.652
+They mentioned that there were other modes,
+
+00:11:10.653 --> 00:11:12.700
+but they didn't say anything about them.
+
+11:12.700 --> 00:11:14.625
+So Lisp is something
+
+00:11:14.626 --> 00:11:17.440
+with a really long history with Emacs.
+
+11:17.440 --> 00:11:19.976
+Balanced expressions and manipulating them
+
+00:11:19.977 --> 00:11:21.434
+and doing them efficiently
+
+00:11:21.435 --> 00:11:24.155
+is just a thing that Emacs knows how to do,
+
+00:11:24.156 --> 00:11:25.640
+and Emacs is good at it.
+
+11:25.640 --> 00:11:27.705
+There's just a legacy
+
+00:11:27.706 --> 00:11:31.320
+of algorithms and functions for doing it.
+
+11:31.320 --> 00:11:33.182
+So we take types,
+
+00:11:33.183 --> 00:11:37.839
+and we take the angle brackets in the types,
+
+00:11:37.840 --> 00:11:40.840
+and we get the symbols right.
+
+11:40.840 --> 00:11:41.814
+Then we can treat them
+
+00:11:41.815 --> 00:11:44.312
+as though they were balanced expressions or S-expressions,
+
+00:11:44.313 --> 00:11:49.320
+the same kind that Emacs is really good at handling.
+
+NOTE Add overlays to improve readability
+
+11:49.320 --> 00:11:51.979
+Secondly, we can use overlays
+
+00:11:51.980 --> 00:11:55.260
+to improve the readability of errors.
+
+11:55.260 --> 00:11:58.012
+We can take long lines and break and indent them
+
+00:11:58.013 --> 00:12:00.160
+using `before-string`s, so the same thing
+
+12:00.200 --> 12:03.440
+I used to add "cherries" into the poem.
+
+12:03.440 --> 00:12:06.611
+We can use that to insert new lines
+
+00:12:06.612 --> 00:12:08.725
+followed by indentation
+
+00:12:08.726 --> 00:12:15.160
+and produce a much nicer-looking listing of a type.
+
+12:15.160 --> 00:12:19.641
+We can also use the `invisible` property
+
+00:12:19.642 --> 00:12:22.400
+to hide unwanted detail.
+
+NOTE Create a minor mode that runs during compilation
+
+12:22.400 --> 12:24.960
+Last of all, we can create a minor mode.
+
+12:24.960 --> 00:12:27.854
+When we're compiling things in Emacs,
+
+00:12:27.855 --> 00:12:30.140
+we often use `compilation-mode`.
+
+12:30.140 --> 00:12:32.097
+`compilation-mode` allows you to install
+
+00:12:32.098 --> 00:12:33.553
+compilation filters that run
+
+00:12:33.554 --> 00:12:36.434
+when the compiler is producing output,
+
+00:12:36.435 --> 00:12:39.980
+and at that time, then, we can add our overlays.
+
+12:39.980 --> 00:12:42.868
+We can also add in minor-mode commands
+
+00:12:42.869 --> 00:12:45.757
+that do whatever we want to the keymap.
+
+00:12:45.758 --> 00:12:48.321
+In this case, we're going to show and hide
+
+00:12:48.322 --> 00:12:50.176
+lower-level details interactively
+
+00:12:50.177 --> 00:12:53.906
+so that we can see a simplified version
+
+00:12:53.907 --> 00:12:59.500
+or a more detailed version of a type, depending on our needs.
+
+NOTE Parsing types as balanced expressions
+
+12:59.500 --> 13:03.980
+First of all, parsing types as balanced expressions.
+
+13:03.980 --> 00:13:05.686
+We need to be able to quickly locate
+
+00:13:05.687 --> 00:13:07.162
+the boundaries and the contents
+
+00:13:07.163 --> 00:13:08.500
+of parenthesized expressions,
+
+13:08.500 --> 13:12.100
+or in this case, expressions in angle brackets.
+
+13:12.100 --> 00:13:14.995
+We use a syntax table inside Emacs
+
+00:13:14.996 --> 00:13:18.800
+to allow movement functions like `forward-list`
+
+00:13:18.801 --> 00:13:21.100
+to jump between matching angle brackets.
+
+13:21.100 --> 13:23.460
+By default, they're just parentheses.
+
+13:23.460 --> 13:25.900
+First of all, let's look at our syntax table.
+
+13:25.900 --> 00:13:29.189
+We're going to add here syntax entries
+
+00:13:29.190 --> 00:13:33.900
+to handle angle brackets as though they were parentheses.
+
+13:33.900 --> 00:13:37.247
+Then we have a lot of types
+
+00:13:37.248 --> 00:13:42.980
+that have colons in them, and those are namespaces in C++.
+
+13:42.980 --> 00:13:45.766
+By default, Emacs does not recognize them
+
+00:13:45.767 --> 00:13:49.134
+as parts of symbols, so we're going to tell Emacs
+
+00:13:49.135 --> 00:13:52.839
+that a colon is something called a symbol constituent,
+
+00:13:52.840 --> 00:13:54.860
+that it can be part of a name.
+
+13:54.860 --> 00:13:57.613
+Once we do that, then we can use our functions
+
+00:13:57.614 --> 00:13:59.442
+like `forward-list`, `backward-word`,
+
+00:13:59.443 --> 00:14:03.288
+all of the navigation and movement functions that we have
+
+00:14:03.289 --> 00:14:06.623
+that do things, that do more complicated things
+
+00:14:06.624 --> 00:14:08.707
+like S-expressions and so on,
+
+00:14:08.708 --> 00:14:11.485
+can be used now with our angle brackets
+
+00:14:11.486 --> 00:14:16.100
+and inside of our types.
+
+NOTE Indent and fill with overlays - Use ancient "pretty printing" algorithms"
+
+14:16.100 --> 00:14:18.462
+The next thing we can do is
+
+00:14:18.463 --> 00:14:21.540
+perform indent and fill with overlays.
+
+14:21.540 --> 00:14:23.735
+We're going to use `before-string` properties
+
+00:14:23.736 --> 00:14:25.630
+to break lines and create indentation
+
+00:14:25.631 --> 00:14:28.900
+to make the output look a little better.
+
+14:28.900 --> 14:35.320
+Today, we fill mostly text and we indent mostly code.
+
+14:35.320 --> 00:14:37.307
+We fill text in order to prevent it
+
+00:14:37.308 --> 00:14:39.902
+from running off the side of the right margin,
+
+00:14:39.903 --> 00:14:43.940
+and we indent code to line up syntactic elements.
+
+14:43.940 --> 14:47.080
+Back in the day, they had algorithms that could do both.
+
+14:47.080 --> 14:52.260
+Those are what we're going to leverage.
+
+NOTE Overlays can mimic line breaks and indentation
+
+14:52.260 --> 00:14:54.582
+We can use the `before-string` property
+
+00:14:54.583 --> 00:14:57.760
+to insert a new line in the correct number of spaces
+
+14:57.760 --> 15:00.240
+to emulate indentation.
+
+15:00.240 --> 00:15:03.525
+As a simplified example, here's some code
+
+00:15:03.526 --> 00:15:07.280
+that will indent 4 upon each open angle bracket.
+
+15:07.280 --> 15:14.520
+Let's give it a try.
+
+NOTE Hiding details - Marking depths with overlays
+
+15:14.520 --> 15:18.280
+The next thing we're going to need to do is hide details.
+
+15:18.280 --> 00:15:22.688
+So we have nested types, and the user is going to want to
+
+00:15:22.689 --> 00:15:27.371
+be able to reveal lower-level or hide lower-level parts
+
+00:15:27.372 --> 00:15:30.131
+of the nested type interactively
+
+00:15:30.132 --> 00:15:35.480
+once we've already reformatted the error messages.
+
+15:35.480 --> 15:40.440
+Let's see how we can do that using invisible properties.
+
+15:40.440 --> 00:15:43.992
+The first thing we're going to do is
+
+00:15:43.993 --> 00:15:46.680
+mark depths within the type.
+
+15:46.680 --> 00:15:49.328
+When we're originally analyzing and formatting
+
+00:15:49.329 --> 00:15:51.920
+and doing the indentation and the line breaks,
+
+15:51.920 --> 00:15:55.071
+at the same time, we're going to go through
+
+00:15:55.072 --> 00:15:58.817
+and mark the nested levels inside the type names,
+
+00:15:58.818 --> 00:16:00.840
+just as this diagram shows.
+
+16:00.840 --> 00:16:03.573
+So depth 1, for example, will be everything
+
+00:16:03.574 --> 00:16:06.120
+inside the first level of angle brackets.
+
+16:06.120 --> 00:16:09.038
+Depth 2 will be everything inside the second level,
+
+00:16:09.039 --> 00:16:09.600
+and so on.
+
+16:09.760 --> 00:16:12.070
+And then later on, when the users request it,
+
+00:16:12.071 --> 00:16:16.303
+we can go and look at the depth that they've selected
+
+00:16:16.304 --> 00:16:19.360
+and then mark those sections invisible.
+
+16:19.360 --> 16:20.520
+Let's see how that might work.
+
+16:20.520 --> 00:16:24.022
+First of all, let's delete the overlays
+
+00:16:24.023 --> 00:16:28.400
+that we already have that created the indentation.
+
+16:28.400 --> 00:16:32.419
+Now we're going to go and do that marking
+
+00:16:32.420 --> 00:16:35.740
+with the custom depth properties here.
+
+16:35.740 --> 00:16:38.760
+To prove that I didn't pull a fast one,
+
+00:16:38.761 --> 00:16:42.082
+let's go and see what `describe-char` tells us
+
+00:16:42.083 --> 00:16:44.660
+about the depths inside here.
+
+16:44.660 --> 16:46.460
+Let's start here.
+
+16:46.460 --> 16:52.820
+Okay, so inside this part here, `std::string`,
+
+16:52.820 --> 16:54.980
+There are two overlays.
+
+16:54.980 --> 00:16:57.780
+One of them is of depth 1, and the other is of depth 2,
+
+00:16:57.781 --> 00:17:00.601
+which makes sense, because depth 1 is going to be
+
+00:17:00.602 --> 00:17:02.011
+from about here to here,
+
+00:17:02.012 --> 00:17:07.660
+and depth 2 is going to be from about here to this area.
+
+17:07.660 --> 00:17:10.829
+So it's reasonable that there should be two,
+
+00:17:10.830 --> 00:17:12.660
+and that's what we expect.
+
+NOTE Hiding to a target depth
+
+17:12.660 --> 00:17:17.353
+Now that we've marked the nested types with their depths,
+
+00:17:17.354 --> 00:17:21.380
+let's experiment with hiding details.
+
+17:21.380 --> 00:17:26.773
+This fragment of code takes a user-supplied depth,
+
+00:17:26.774 --> 00:17:29.085
+in this case 2, and will hide,
+
+00:17:29.086 --> 00:17:30.875
+based on those markings
+
+00:17:30.876 --> 00:17:33.932
+that we've already made on the overlays,
+
+00:17:33.933 --> 00:17:36.020
+the custom depth properties.
+
+17:36.020 --> 17:40.020
+We'll take those and apply your requested level of detail.
+
+17:40.020 --> 17:42.020
+So let's try it out.
+
+17:42.020 --> 17:43.020
+Depth 2.
+
+17:43.020 --> 00:17:46.005
+All right, that hid everything under the `std::map`,
+
+00:17:46.006 --> 00:17:47.260
+so the deepest level.
+
+17:47.260 --> 17:52.140
+If we make it 1, we should get a level higher than that.
+
+17:52.140 --> 17:54.540
+So now level 1 and below are hidden.
+
+17:54.540 --> 17:59.660
+Now if we put it back to 3, it should reveal everything.
+
+17:59.660 --> 18:04.900
+So that's what we're going to use in our minor mode.
+
+NOTE Demo
+
+18:04.900 --> 18:05.900
+Let's have a demo.
+
+18:05.900 --> 00:18:08.538
+We're going to revisit the initial example
+
+00:18:08.539 --> 00:18:10.380
+with the minor mode installed.
+
+18:10.380 --> 00:18:12.101
+Now we're going to have a compilation filter
+
+00:18:12.102 --> 00:18:13.593
+that will run on every chunk of output
+
+00:18:13.594 --> 00:18:15.780
+produced by the compiler.
+
+18:15.780 --> 00:18:17.849
+It's going to add those overlays
+
+00:18:17.850 --> 00:18:20.420
+with the line breaks and the indentation.
+
+18:20.420 --> 00:18:22.206
+It's also going to add overlays
+
+00:18:22.207 --> 00:18:23.880
+that mark up the nested types
+
+00:18:23.881 --> 00:18:26.220
+with the depths for each region.
+
+18:26.220 --> 18:31.580
+Let's add the hook for `tspew-mode`.
+
+18:31.580 --> 18:37.220
+And now we can compile again.
+
+18:38.220 --> 00:18:41.503
+All right, we can already see
+
+00:18:41.504 --> 00:18:47.195
+that these things are formatted a little bit better
+
+00:18:47.196 --> 00:18:49.180
+than they were before.
+
+18:49.180 --> 18:50.180
+They're not all on one line.
+
+18:50.180 --> 18:53.580
+Things are getting kind of lined up here.
+
+18:53.580 --> 19:05.620
+Here's a good example.
+
+19:05.620 --> 00:19:08.637
+And here's our big ugly one from before
+
+00:19:08.638 --> 00:19:10.900
+with all the characters in it.
+
+19:10.900 --> 19:14.500
+Let's try hiding some of this information.
+
+19:14.500 --> 00:19:17.431
+We'll just slowly decrease the level of detail
+
+00:19:17.432 --> 00:19:19.740
+and you can see how it works.
+
+19:19.740 --> 00:19:22.333
+Over here, where there's these ellipses
+
+00:19:22.334 --> 00:19:25.460
+next to string constant, the "..." there,
+
+19:25.460 --> 00:19:30.386
+that's where we are starting to hide information
+
+00:19:30.387 --> 00:19:32.900
+and go to the next level.
+
+19:32.900 --> 19:36.460
+Hiding more, hiding more, hiding more.
+
+19:36.460 --> 19:38.220
+Now we can go back and start adding it back.
+
+19:38.220 --> 00:19:42.736
+You can see here now we just have about four layers,
+
+00:19:42.737 --> 00:19:45.540
+which is a lot easier to understand.
+
+19:45.540 --> 00:19:47.733
+And if we start understanding what it is
+
+00:19:47.734 --> 00:19:52.180
+and we need more detail, we can just increase detail again.
+
+19:52.180 --> 00:19:55.402
+And every time we increase or decrease detail,
+
+00:19:55.403 --> 00:19:58.900
+it reformats so it still stays kind of consolidated
+
+19:58.900 --> 19:59.900
+and nice looking.
+
+19:59.900 --> 20:01.980
+Let's increase it a little bit more.
+
+20:02.060 --> 20:04.540
+Okay, so you can see how that worked.
+
+20:04.540 --> 20:08.340
+Let's go back to our presentation.
+
+20:08.340 --> 20:10.220
+All right.
+
+NOTE Conclusion
+
+20:10.220 --> 00:20:12.996
+In conclusion, we saw how we could solve
+
+00:20:12.997 --> 00:20:15.367
+a real problem for C++ programmers
+
+00:20:15.368 --> 00:20:18.534
+by combining several Emacs features: overlays,
+
+00:20:18.535 --> 00:20:20.489
+compilation mode extensions,
+
+00:20:20.490 --> 00:20:25.700
+and balanced expression navigation using syntax tables.
+
+20:25.700 --> 00:20:27.978
+Emacs is often compared unfavorably
+
+00:20:27.979 --> 00:20:31.460
+to newer IDEs and editors with slicker user interfaces.
+
+20:32.220 --> 00:20:36.386
+What Emacs has that they don't is powerful abstractions,
+
+00:20:36.387 --> 00:20:38.862
+tons of libraries, and decades of work
+
+00:20:38.863 --> 00:20:42.100
+by some of the luminaries in the field of software.
+
+20:42.100 --> 00:20:45.343
+I think that this project would have been much harder to do
+
+00:20:45.344 --> 00:20:48.020
+in a prettier but less powerful environment.
+
+20:48.020 --> 20:50.860
+In short, there's plenty of hope for Emacs.
+
+20:50.860 --> 20:51.220
+Thank you.
diff --git a/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt
new file mode 100644
index 00000000..0fc2d8ef
--- /dev/null
+++ b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt
@@ -0,0 +1,767 @@
+WEBVTT
+
+
+00:00:08.620 --> 00:00:09.120
+[Speaker 0]: And I think we are live.
+
+00:00:09.620 --> 00:00:09.960
+Hello again, everyone.
+
+00:00:10.940 --> 00:00:11.440
+And hi, Lovro. How are you doing?
+
+00:00:15.339 --> 00:00:15.839
+[Speaker 1]: Just a second. Should I join the other room?
+
+00:00:18.460 --> 00:00:18.740
+[Speaker 0]: Oh, no, no, you can stay here.
+
+00:00:20.860 --> 00:00:21.360
+[Speaker 1]: I can stay in the backstage.
+
+00:00:24.140 --> 00:00:24.320
+[Speaker 0]: Everything is fine. I don't think you are
+
+00:00:25.520 --> 00:00:25.760
+technically in the backstage right now you're
+
+00:00:26.750 --> 00:00:26.820
+just in Big Blue Button with us.
+
+00:00:30.040 --> 00:00:30.160
+[Speaker 1]: Oh thanks. Oh because I have 2 of them open I
+
+00:00:30.920 --> 00:00:31.280
+thought there were 2 different rooms.
+
+00:00:32.720 --> 00:00:33.220
+1 is the backstage and the other,
+
+00:00:38.239 --> 00:00:38.360
+[Speaker 0]: whichever, I can hear you and so can the
+
+00:00:39.840 --> 00:00:40.080
+stream, so don't worry too much about which
+
+00:00:41.140 --> 00:00:41.220
+is the backstage and which is the front page.
+
+00:00:41.540 --> 00:00:41.760
+[Speaker 1]: I have no idea. Well, great,
+
+00:00:43.660 --> 00:00:43.940
+great. Okay, yeah. Yeah,
+
+00:00:45.280 --> 00:00:45.480
+I'm doing great, just to answer your
+
+00:00:45.480 --> 00:00:45.980
+question.
+
+00:00:47.379 --> 00:00:47.640
+[Speaker 0]: Okay, great, great, Okay,
+
+00:00:49.900 --> 00:00:50.280
+well splendid. So, I've pasted a link again
+
+00:00:51.520 --> 00:00:51.760
+on IRC if you want to ask your questions,
+
+00:00:53.000 --> 00:00:53.200
+and I'd invite you to do so,
+
+00:00:54.620 --> 00:00:55.040
+because we have about 9 minutes of laborious
+
+00:00:56.580 --> 00:00:57.080
+time to answer as many of them as possible.
+
+00:00:58.360 --> 00:00:58.860
+And I'm going to start with the first 1.
+
+00:01:01.100 --> 00:01:01.600
+This looks great and was very well-presented.
+
+00:01:03.240 --> 00:01:03.420
+Do you have plans to upstream this
+
+00:01:04.239 --> 00:01:04.739
+functionality into Emacs?
+
+00:01:08.000 --> 00:01:08.200
+[Speaker 1]: That's a good idea. That's something we
+
+00:01:08.860 --> 00:01:09.360
+thought about as well.
+
+00:01:11.640 --> 00:01:12.140
+Currently, we haven't really contacted anyone
+
+00:01:16.160 --> 00:01:16.660
+to do this. Also, the current implementation,
+
+00:01:19.760 --> 00:01:20.080
+so as I mentioned in the presentation towards
+
+00:01:22.120 --> 00:01:22.300
+the end, so we use a little bit of advice to
+
+00:01:24.240 --> 00:01:24.520
+sort of patch some functionality of query
+
+00:01:26.479 --> 00:01:26.600
+replace because not everything was easy to
+
+00:01:28.680 --> 00:01:29.180
+implement. The core functionality luckily
+
+00:01:32.220 --> 00:01:32.340
+was, But there's a couple of fixes we need to
+
+00:01:34.200 --> 00:01:34.340
+apply to the message function in order to
+
+00:01:36.380 --> 00:01:36.820
+display a nice message in the echo buffer
+
+00:01:39.140 --> 00:01:39.320
+because this doesn't happen on its own when
+
+00:01:41.100 --> 00:01:41.580
+we're using this trick with this big regex
+
+00:01:45.360 --> 00:01:45.720
+and whatnot. So I don't think that the code
+
+00:01:47.080 --> 00:01:47.580
+as it is would be upstreamable.
+
+00:01:50.600 --> 00:01:51.100
+I think probably if we wanted to upstream it,
+
+00:01:54.140 --> 00:01:54.280
+we would have to do some proper work on
+
+00:01:57.180 --> 00:01:57.340
+refactoring query place itself in order to
+
+00:01:58.780 --> 00:01:58.979
+integrate all of this functionality just
+
+00:02:01.880 --> 00:02:02.380
+directly without any patching left and right.
+
+00:02:05.680 --> 00:02:06.120
+But yeah, definitely something I've given
+
+00:02:10.080 --> 00:02:10.259
+some thought, but so far no progress on it.
+
+00:02:11.640 --> 00:02:11.980
+I haven't actually started doing anything
+
+00:02:12.240 --> 00:02:12.740
+about it.
+
+00:02:17.440 --> 00:02:17.780
+[Speaker 0]: Right, So I'm curious now,
+
+00:02:19.640 --> 00:02:19.900
+you developed the feature and then you moved
+
+00:02:21.600 --> 00:02:21.740
+on to the presentation or did you want to do
+
+00:02:23.080 --> 00:02:23.200
+a presentation for EmacsConf and then you
+
+00:02:24.140 --> 00:02:24.640
+worked on something like this?
+
+00:02:26.360 --> 00:02:26.860
+Which was it first, the chicken or the egg?
+
+00:02:28.220 --> 00:02:28.720
+[Speaker 1]: Yeah, it was the former.
+
+00:02:31.320 --> 00:02:31.820
+So this is a problem I've been aware of for,
+
+00:02:33.340 --> 00:02:33.840
+I mean, probably a couple of years.
+
+00:02:35.280 --> 00:02:35.640
+And, you know, I talked to my friend
+
+00:02:37.600 --> 00:02:37.840
+Valentino about it and we had like a little
+
+00:02:39.240 --> 00:02:39.740
+discussion, you know, how would we do this?
+
+00:02:41.880 --> 00:02:42.380
+And then I remember back when I was
+
+00:02:44.140 --> 00:02:44.260
+researching about this problem and the
+
+00:02:45.100 --> 00:02:45.600
+various Emacs Lisp solutions,
+
+00:02:47.780 --> 00:02:47.960
+all I could find were these solutions that
+
+00:02:49.400 --> 00:02:49.600
+would, you know, just shy away from
+
+00:02:50.640 --> 00:02:50.920
+implementing the RegEx case,
+
+00:02:52.340 --> 00:02:52.840
+which is a really complicated 1.
+
+00:02:54.720 --> 00:02:55.220
+And, after some discussion,
+
+00:02:56.140 --> 00:02:56.580
+my friend and I decided,
+
+00:02:58.080 --> 00:02:58.320
+okay, what the hell? Let's,
+
+00:02:59.280 --> 00:02:59.480
+let's try and implement this.
+
+00:03:01.800 --> 00:03:02.300
+How hard can it be? And yeah,
+
+00:03:03.280 --> 00:03:03.780
+basically in 1 afternoon,
+
+00:03:06.300 --> 00:03:06.500
+the idea, our little trick and the whole
+
+00:03:07.440 --> 00:03:07.940
+implementation was born.
+
+00:03:11.480 --> 00:03:11.680
+And then I think that was maybe around a year
+
+00:03:12.540 --> 00:03:13.040
+ago, maybe a bit less.
+
+00:03:14.480 --> 00:03:14.680
+And then through the months,
+
+00:03:15.920 --> 00:03:16.420
+we just thought, oh yeah,
+
+00:03:17.420 --> 00:03:17.640
+maybe we could present this,
+
+00:03:18.960 --> 00:03:19.200
+maybe it would be interesting for people to
+
+00:03:20.660 --> 00:03:20.920
+see and that's how we came up with the idea
+
+00:03:22.440 --> 00:03:22.940
+to present at EmacsConf.
+
+00:03:27.900 --> 00:03:28.180
+[Speaker 0]: Okay, great. I don't see other people asking
+
+00:03:30.240 --> 00:03:30.540
+questions. So people, it's nice if I ask
+
+00:03:31.100 --> 00:03:31.600
+questions but you know,
+
+00:03:33.160 --> 00:03:33.340
+the point is kind of for you to ask the
+
+00:03:35.140 --> 00:03:35.280
+questions. I see someone who's joined us on
+
+00:03:36.780 --> 00:03:37.120
+BBB. Peter, would you like to ask a question
+
+00:03:41.720 --> 00:03:41.980
+maybe? Otherwise I see another person writing
+
+00:03:43.040 --> 00:03:43.260
+a question on the pad,
+
+00:03:44.540 --> 00:03:44.700
+so we can either move for this 1.
+
+00:03:46.640 --> 00:03:46.800
+So I'll leave Peter to figure out if they
+
+00:03:47.680 --> 00:03:47.960
+want to ask a question.
+
+00:03:49.160 --> 00:03:49.660
+So I'm moving on to the next question.
+
+00:03:57.900 --> 00:03:58.180
+[Speaker 2]: I can jump in. That's a really well done talk
+
+00:04:01.780 --> 00:04:02.120
+and you really clearly laid out the problem
+
+00:04:03.000 --> 00:04:03.500
+and the solution there.
+
+00:04:05.600 --> 00:04:05.740
+While I was watching it,
+
+00:04:10.740 --> 00:04:11.040
+I was thinking maybe the nice way to name it
+
+00:04:13.140 --> 00:04:13.440
+is just to name it query replace and query
+
+00:04:15.700 --> 00:04:16.019
+replace regext, you know,
+
+00:04:18.480 --> 00:04:18.980
+overloading the original functions and then
+
+00:04:23.000 --> 00:04:23.460
+using a prefix number,
+
+00:04:26.880 --> 00:04:27.380
+like control number to indicate how many
+
+00:04:29.280 --> 00:04:29.780
+replacements you're going to do.
+
+00:04:31.640 --> 00:04:32.140
+But maybe that doesn't work with the
+
+00:04:36.680 --> 00:04:37.120
+recursive editing stuff,
+
+00:04:37.960 --> 00:04:38.180
+which I don't use much.
+
+00:04:40.440 --> 00:04:40.940
+So I don't have a good method.
+
+00:04:43.260 --> 00:04:43.760
+[Speaker 1]: I think it would definitely work.
+
+00:04:46.260 --> 00:04:46.440
+Well, the question is,
+
+00:04:47.880 --> 00:04:48.380
+if we just overwrite the definitions,
+
+00:04:51.700 --> 00:04:52.200
+then, oh, well, I guess we could do that.
+
+00:04:53.410 --> 00:04:53.560
+Nothing stops us. I mean,
+
+00:04:54.800 --> 00:04:54.880
+we're in Emacs. We could definitely do that.
+
+00:04:55.680 --> 00:04:55.920
+And then if you give, like,
+
+00:04:57.540 --> 00:04:57.720
+a prefix argument, maybe it just drops you
+
+00:04:59.060 --> 00:04:59.560
+back to the original query replace.
+
+00:05:01.000 --> 00:05:01.160
+Yeah, that's an idea. For now,
+
+00:05:02.440 --> 00:05:02.920
+we decided, OK, let's just keep everything
+
+00:05:05.000 --> 00:05:05.240
+explicitly separate just to avoid any
+
+00:05:05.240 --> 00:05:05.740
+confusion.
+
+00:05:09.220 --> 00:05:09.400
+[Speaker 2]: Yeah, I think that's the right thing to do
+
+00:05:11.820 --> 00:05:12.320
+for now. What I'm actually thinking is that
+
+00:05:13.620 --> 00:05:13.940
+when you do query replace,
+
+00:05:15.600 --> 00:05:16.100
+it just does the regular query replace.
+
+00:05:17.220 --> 00:05:17.440
+And if you're going to do,
+
+00:05:20.140 --> 00:05:20.640
+say, 3 parallel replacements,
+
+00:05:21.340 --> 00:05:21.840
+then you do Control-U,
+
+00:05:25.580 --> 00:05:26.080
+query replace. Sorry. Control-3,
+
+00:05:28.580 --> 00:05:28.860
+query replace. And then that way you don't
+
+00:05:33.400 --> 00:05:33.760
+have The final prompt that you give nothing
+
+00:05:33.760 --> 00:05:34.260
+to.
+
+00:05:36.880 --> 00:05:37.380
+[Speaker 1]: Exactly, that's actually not a bad idea.
+
+00:05:39.720 --> 00:05:40.080
+I think I like that. Yeah,
+
+00:05:40.800 --> 00:05:41.300
+that's not a bad idea.
+
+00:05:44.760 --> 00:05:44.920
+[Speaker 0]: It's always a quagmire whether to ask for an
+
+00:05:47.080 --> 00:05:47.580
+argument or to use the universal argument.
+
+00:05:51.060 --> 00:05:51.380
+When you're working with Emacs and especially
+
+00:05:52.640 --> 00:05:52.960
+the UX side of things in the package,
+
+00:05:54.900 --> 00:05:55.020
+it's so complicated to figure out which 1 you
+
+00:05:56.880 --> 00:05:57.380
+want to do. In this particular case,
+
+00:06:00.340 --> 00:06:00.840
+I think it's the better option to use the
+
+00:06:02.800 --> 00:06:03.120
+universal argument or any kind of argument
+
+00:06:04.040 --> 00:06:04.540
+with a control number before.
+
+00:06:10.240 --> 00:06:10.440
+All right, we have about 3 more minutes of
+
+00:06:12.440 --> 00:06:12.720
+questions. Peter, if you don't mind,
+
+00:06:14.440 --> 00:06:14.940
+I'll keep reading the questions in the chat.
+
+00:06:19.440 --> 00:06:19.940
+Did you use pair programming while developing
+
+00:06:21.100 --> 00:06:21.600
+it, it being a package,
+
+00:06:22.440 --> 00:06:22.940
+or did you work independently,
+
+00:06:24.840 --> 00:06:25.340
+alternating and reviewing with Valentino?
+
+00:06:28.320 --> 00:06:28.440
+[Speaker 1]: It was definitely a pair programming kind of
+
+00:06:29.440 --> 00:06:29.940
+thing. So if I remember correctly,
+
+00:06:32.760 --> 00:06:33.260
+I was sitting at the computer and Valentino
+
+00:06:36.020 --> 00:06:36.520
+was in front of a whiteboard and we were just
+
+00:06:38.400 --> 00:06:38.900
+dissecting this regex and a bunch of examples
+
+00:06:41.680 --> 00:06:41.820
+and trying to get these capture groups and
+
+00:06:44.240 --> 00:06:44.440
+stuff that we have to remap internally to get
+
+00:06:46.560 --> 00:06:46.880
+these offsets right and avoid off by 1 error
+
+00:06:48.160 --> 00:06:48.420
+and stuff like that. So yeah,
+
+00:06:49.280 --> 00:06:49.780
+definitely a team effort.
+
+00:06:53.660 --> 00:06:54.160
+[Speaker 0]: Okay, great. Moving on to the next question.
+
+00:06:55.240 --> 00:06:55.740
+What is your background in programming?
+
+00:06:57.440 --> 00:06:57.620
+Was it difficult to implement following the
+
+00:06:59.700 --> 00:07:00.040
+same API and architecture as what is already
+
+00:07:00.200 --> 00:07:00.700
+in Emacs?
+
+00:07:05.400 --> 00:07:05.680
+[Speaker 1]: So maybe just a quick back story.
+
+00:07:06.960 --> 00:07:07.440
+Both Valentino and I are actually PhD
+
+00:07:08.300 --> 00:07:08.680
+students in computer science,
+
+00:07:09.960 --> 00:07:10.460
+and we literally share an office.
+
+00:07:12.960 --> 00:07:13.180
+So that's how we even started talking about
+
+00:07:14.480 --> 00:07:14.900
+this whole thing. And we both use Emacs,
+
+00:07:18.380 --> 00:07:18.640
+of course. But I don't think this was too
+
+00:07:20.740 --> 00:07:20.880
+hard to implement because luckily all of the
+
+00:07:22.300 --> 00:07:22.540
+interactive functionality like this
+
+00:07:23.600 --> 00:07:24.100
+complicated undo, skipping,
+
+00:07:25.680 --> 00:07:26.180
+execute until the end and so on,
+
+00:07:27.980 --> 00:07:28.380
+all of this is really just already provided
+
+00:07:29.860 --> 00:07:30.360
+by the Emacs queer replace implementation.
+
+00:07:34.160 --> 00:07:34.360
+So sort of what we do is we just invoke it as
+
+00:07:36.080 --> 00:07:36.220
+a function and delegate to it.
+
+00:07:37.800 --> 00:07:38.000
+And we came up with this clever trick to
+
+00:07:42.380 --> 00:07:42.560
+basically delegate this multi-replacement to
+
+00:07:45.160 --> 00:07:45.660
+this 1 single function that's already there.
+
+00:07:47.980 --> 00:07:48.480
+So it wasn't too complicated.
+
+00:07:54.780 --> 00:07:54.960
+[Speaker 0]: Alright. And we have about 2 minutes of time
+
+00:07:55.560 --> 00:07:56.040
+for the last question.
+
+00:07:58.040 --> 00:07:58.260
+What did you learn about Emacs programming or
+
+00:08:00.020 --> 00:08:00.100
+programming in general while working on this
+
+00:08:02.320 --> 00:08:02.820
+project? A very wide question for me.
+
+00:08:05.840 --> 00:08:06.340
+[Speaker 1]: Maybe 1 thing I would like to add to the
+
+00:08:09.220 --> 00:08:09.440
+previous just answer is I don't want to say
+
+00:08:10.160 --> 00:08:10.660
+like you know we're PhDs,
+
+00:08:12.780 --> 00:08:13.260
+a PhD is required for this or anything,
+
+00:08:15.800 --> 00:08:15.920
+not at all. It's mostly just for a little bit
+
+00:08:19.220 --> 00:08:19.720
+of context, but I think obviously,
+
+00:08:20.640 --> 00:08:21.020
+even if you're not a PhD,
+
+00:08:22.360 --> 00:08:22.540
+I mean, you don't even require like
+
+00:08:24.960 --> 00:08:25.460
+university, you know, education or anything.
+
+00:08:27.540 --> 00:08:28.040
+It wasn't overly difficult to implement,
+
+00:08:30.680 --> 00:08:31.080
+sort of just read some code that's already
+
+00:08:33.539 --> 00:08:34.039
+there and you know follow what you see and
+
+00:08:35.860 --> 00:08:36.020
+poke Emacs a little bit and do a little bit
+
+00:08:38.140 --> 00:08:38.320
+of debugging on the internals and you can
+
+00:08:40.280 --> 00:08:40.440
+definitely get it. So definitely not a
+
+00:08:42.240 --> 00:08:42.400
+prerequisite to have a degree or anything to
+
+00:08:45.480 --> 00:08:45.600
+do any of this stuff. Okay so Coming back to
+
+00:08:48.420 --> 00:08:48.560
+[Speaker 0]: Yeah, I'm going to amend a little bit the
+
+00:08:49.680 --> 00:08:49.960
+question because we only have 1 minute.
+
+00:08:51.600 --> 00:08:52.100
+So just 1 thing in 10 seconds,
+
+00:08:52.490 --> 00:08:52.540
+[Speaker 2]: what did you
+
+00:08:53.040 --> 00:08:53.540
+[Speaker 0]: learn about this?
+
+00:08:54.240 --> 00:08:54.380
+[Speaker 1]: your last question. What did I learn about
+
+00:08:56.420 --> 00:08:56.920
+Emacs programming? That Emacs is so flexible
+
+00:08:59.160 --> 00:08:59.360
+that I can go and I can patch literally its
+
+00:09:01.480 --> 00:09:01.880
+message function. And that is how we achieve
+
+00:09:03.680 --> 00:09:04.180
+the nice message function in the echo buffer.
+
+00:09:06.720 --> 00:09:06.980
+So I can literally go and patch something as
+
+00:09:07.560 --> 00:09:08.060
+crucial as message.
+
+00:09:09.920 --> 00:09:10.420
+[Speaker 0]: It's great. That's a lovely 1.
+
+00:09:12.260 --> 00:09:12.380
+And I think, again, we're going back to the
+
+00:09:13.660 --> 00:09:13.780
+philosophy of Emacs. Everything is
+
+00:09:15.200 --> 00:09:15.520
+programmable and even changing the message
+
+00:09:16.640 --> 00:09:16.800
+function is great. All right,
+
+00:09:17.440 --> 00:09:17.640
+well, thank you so much,
+
+00:09:19.540 --> 00:09:19.660
+Lovro, and thanks to Valentino as well,
+
+00:09:21.820 --> 00:09:21.960
+who's not here, but who's contributed to this
+
+00:09:23.900 --> 00:09:24.400
+talk. Any last word?
+
+00:09:29.540 --> 00:09:29.800
+[Speaker 1]: Well, just if you're gonna build any
+
+00:09:31.980 --> 00:09:32.160
+solutions, try to make them as foolproof and
+
+00:09:34.360 --> 00:09:34.540
+as 100% as possible so we get more of these
+
+00:09:36.280 --> 00:09:36.420
+goodies that are nice and robust for
+
+00:09:37.000 --> 00:09:37.500
+everybody to use.
+
+00:09:39.400 --> 00:09:39.620
+[Speaker 0]: All right, lovely. Well,
+
+00:09:40.240 --> 00:09:40.580
+thank you so much, Lover,
+
+00:09:41.940 --> 00:09:42.380
+for your presentation and your answer.
+
+00:09:44.340 --> 00:09:44.640
+We'll be moving on to the next talk in just
+
+00:09:47.260 --> 00:09:47.720
+about 5 seconds, and I'll see you after.
+
+00:09:47.900 --> 00:09:48.400
+Bye, Lovro!
+
+00:09:49.760 --> 00:09:50.260
+[Speaker 1]: Yep, bye bye!
+
+00:10:01.440 --> 00:10:01.560
+[Speaker 0]: So I'm just waiting to make sure my VNC is a
+
+00:10:02.840 --> 00:10:03.000
+little slow. Okay, we switch to the next
+
+00:10:03.480 --> 00:10:03.740
+talk. All right, Lover,
+
+00:10:04.960 --> 00:10:05.460
+I'm gonna need to go get ready now.
+
+00:10:09.060 --> 00:10:09.560
+Yep. Bye-bye, and thanks for your talk.
+
+00:10:11.160 --> 00:10:11.660
+[Speaker 1]: Bye, thank you, see you.
+
+00:10:15.060 --> 00:10:15.560
+[Speaker 2]: You
diff --git a/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt
new file mode 100644
index 00000000..359a1228
--- /dev/null
+++ b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt
@@ -0,0 +1,49 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:23.340
+Introduction
+
+00:00:23.440 --> 00:01:12.260
+Problem: Goal
+
+00:01:12.360 --> 00:01:34.100
+Problem: Naive Multi-pass
+
+00:01:34.200 --> 00:01:57.620
+Problem: Clever Multi-pass
+
+00:01:57.720 --> 00:03:03.340
+Problem: Terminology
+
+00:03:04.440 --> 00:03:54.820
+Problem: Scaling Multi-pass
+
+00:03:55.920 --> 00:04:17.140
+Solution: Single-pass
+
+00:04:18.240 --> 00:06:28.180
+Solution: Existing
+
+00:06:29.080 --> 00:06:54.140
+Solution: query-replace-parallel
+
+00:06:55.240 --> 00:07:51.020
+Demonstration: Swap
+
+00:07:53.970 --> 00:08:46.100
+Demonstration: LaTeX
+
+00:08:48.700 --> 00:09:31.220
+Demonstration: Regex
+
+00:09:36.320 --> 00:10:52.340
+Demonstration: Order
+
+00:10:54.440 --> 00:12:26.620
+Demonstration: Fun
+
+00:12:29.120 --> 00:14:17.140
+Implementation
+
+00:14:18.740 --> 00:14:45.560
+End
diff --git a/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt
new file mode 100644
index 00000000..ba813a81
--- /dev/null
+++ b/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt
@@ -0,0 +1,972 @@
+WEBVTT captioned by Lovro
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:01.540
+Hi everyone!
+
+00:00:01.640 --> 00:00:04.540
+Welcome to our talk on Parallel Text Replacement.
+
+00:00:04.640 --> 00:00:06.940
+My name is Lovro, and I'll be telling you about an
+
+00:00:07.040 --> 00:00:09.260
+interesting problem that my friend Valentino and I
+
+00:00:09.360 --> 00:00:11.660
+set out to solve one afternoon.
+
+00:00:11.760 --> 00:00:13.580
+We will describe the problem, take a look at some
+
+00:00:13.680 --> 00:00:16.780
+of the existing work and then present our solution.
+
+00:00:16.880 --> 00:00:18.980
+Afterwards, we will show some demos and conclude
+
+00:00:19.080 --> 00:00:21.420
+with a quick overview of the implementation.
+
+00:00:21.520 --> 00:00:23.340
+Let's get straight into it!
+
+NOTE Problem: Goal
+
+00:00:23.440 --> 00:00:25.700
+Here is a problem that most of us have dealt with
+
+00:00:25.800 --> 00:00:26.940
+at some point.
+
+00:00:27.040 --> 00:00:29.780
+Assume we have a piece of code such as the following.
+
+00:00:29.880 --> 00:00:32.420
+We use a code example here, but in general what we're
+
+00:00:32.520 --> 00:00:35.500
+about to discuss can be applied to any piece of text.
+
+00:00:35.600 --> 00:00:37.540
+After a bit of thinking, we decide that the names of
+
+00:00:37.640 --> 00:00:39.860
+the two variables, "foo" and "bar", should actually be
+
+00:00:39.960 --> 00:00:40.780
+swapped.
+
+00:00:40.880 --> 00:00:43.460
+That is, "foo" should be replaced with "bar", and "bar"
+
+00:00:43.560 --> 00:00:44.940
+should be replaced with "foo".
+
+00:00:45.040 --> 00:00:48.980
+The question is: what is a good way to achieve this?
+
+00:00:49.080 --> 00:00:51.660
+We could perform the edits manually if the code is
+
+00:00:51.760 --> 00:00:53.780
+small enough, and we might even be done reasonably
+
+00:00:53.880 --> 00:00:54.620
+quickly.
+
+00:00:54.720 --> 00:00:56.620
+However, consider two things.
+
+00:00:56.720 --> 00:00:58.860
+Imagine the usual case where there's just too much
+
+00:00:58.960 --> 00:01:00.660
+code to edit by hand.
+
+00:01:00.760 --> 00:01:03.580
+We have no other option than to automate the task.
+
+00:01:03.680 --> 00:01:06.020
+More importantly though, we have a whole programmable
+
+00:01:06.120 --> 00:01:08.180
+text editor right at our fingertips.
+
+00:01:08.280 --> 00:01:10.180
+We should object to doing things that the computer
+
+00:01:10.280 --> 00:01:12.260
+can do for us.
+
+NOTE Problem: Naive Multi-pass
+
+00:01:12.360 --> 00:01:15.460
+So, one way to automate it is by using our old friend
+
+00:01:15.560 --> 00:01:18.940
+query-replace (M-%) multiple times in a sequence.
+
+00:01:19.040 --> 00:01:22.140
+We first do a pass where we replace "foo" with "bar",
+
+00:01:22.240 --> 00:01:25.540
+then we do another pass where we replace "bar" with "foo".
+
+00:01:25.640 --> 00:01:26.860
+But that's clearly not right.
+
+00:01:26.960 --> 00:01:29.060
+We all know that this naive multi-pass approach
+
+00:01:29.160 --> 00:01:31.460
+doesn't work because it results in interference
+
+00:01:31.560 --> 00:01:34.100
+between the two replacements.
+
+NOTE Problem: Clever Multi-pass
+
+00:01:34.200 --> 00:01:36.700
+Instead, we have to be a bit more clever.
+
+00:01:36.800 --> 00:01:39.740
+We should first replace "foo" with a temporary string,
+
+00:01:39.840 --> 00:01:42.020
+in this case "oof", that we will call a "token".
+
+00:01:42.120 --> 00:01:45.380
+To avoid interference, we must be careful to ensure
+
+00:01:45.480 --> 00:01:48.020
+that the token does not contain whatever we're about
+
+00:01:48.120 --> 00:01:49.500
+to replace next.
+
+00:01:49.600 --> 00:01:52.620
+Then we do a second pass to replace "bar" with "foo",
+
+00:01:52.720 --> 00:01:55.980
+and finally a third pass to replace the token with "bar".
+
+00:01:56.080 --> 00:01:57.620
+This gives us the result we want.
+
+NOTE Problem: Terminology
+
+00:01:57.720 --> 00:02:01.820
+Putting the implementation aside for a moment, this style
+
+00:02:01.920 --> 00:02:05.500
+of text replacement, where we replace multiple sources
+
+00:02:05.600 --> 00:02:08.940
+with their targets, without running into interference
+
+00:02:09.040 --> 00:02:11.660
+issues between replacement pairs, is what we call
+
+00:02:11.760 --> 00:02:12.740
+a "parallel replacement".
+
+00:02:12.840 --> 00:02:16.260
+This is the essence of the problem we're trying to solve.
+
+00:02:16.360 --> 00:02:18.580
+The examples with swapping that we've shown so far
+
+00:02:18.680 --> 00:02:21.220
+are really just one of the many use cases that are
+
+00:02:21.320 --> 00:02:23.740
+supported by a general parallel replacement utility.
+
+00:02:25.040 --> 00:02:28.660
+To avoid confusion, let us clarify that the word "parallel"
+
+00:02:28.760 --> 00:02:31.660
+is not in reference to hardware parallelization, but
+
+00:02:31.760 --> 00:02:34.780
+rather comes from analogy with the Lisp let operator,
+
+00:02:34.880 --> 00:02:38.060
+where the bindings of variables are performed in parallel,
+
+00:02:38.160 --> 00:02:40.100
+rather than sequentially as in let*.
+
+00:02:40.200 --> 00:02:43.580
+Parallel in this context means that none of the bindings
+
+00:02:43.680 --> 00:02:46.780
+are in scope within any of the initial value forms.
+
+00:02:46.880 --> 00:02:50.100
+In other words, just like a let's initialization form
+
+00:02:50.200 --> 00:02:53.620
+cannot refer to any of the earlier bindings, a
+
+00:02:53.720 --> 00:02:56.660
+replacement pair's source should not be able to replace
+
+00:02:56.760 --> 00:03:00.100
+the previously substituted targets of any other pair.
+
+00:03:00.200 --> 00:03:03.340
+This is what we mean by "no interference".
+
+NOTE Problem: Scaling Multi-pass
+
+00:03:04.440 --> 00:03:07.900
+However, manually invoking multiple carefully chosen
+
+00:03:08.000 --> 00:03:11.420
+query-replace commands gets old very quickly.
+
+00:03:11.520 --> 00:03:14.100
+Say we scaled up the problem and wanted to perform n
+
+00:03:14.200 --> 00:03:18.220
+swaps instead of just two, e.g. to swap, or rather,
+
+00:03:18.320 --> 00:03:22.060
+rotate, "foo" to "bar", "bar" to "baz", "baz" to "quux"
+
+00:03:22.160 --> 00:03:23.700
+and "quux" to "foo".
+
+00:03:23.800 --> 00:03:26.260
+We would first have to perform n - 1 additional
+
+00:03:26.360 --> 00:03:29.140
+replacements to introduce the necessary tokens,
+
+00:03:29.240 --> 00:03:32.140
+effectively doubling the number of steps.
+
+00:03:32.240 --> 00:03:34.700
+Even if we tried to automate this, think about what
+
+00:03:34.800 --> 00:03:37.580
+tokens the code would have to generate if we had no
+
+00:03:37.680 --> 00:03:40.420
+prior knowledge of the replacement pairs given by the
+
+00:03:40.520 --> 00:03:41.460
+user.
+
+00:03:41.560 --> 00:03:44.060
+We would have to program defensively and use long
+
+00:03:44.160 --> 00:03:47.460
+randomly-generated strings that, one, hopefully do
+
+00:03:47.560 --> 00:03:50.180
+not interfere with any of the replacement pairs,
+
+00:03:50.280 --> 00:03:53.380
+and two, might slow down the search if they're overly long.
+
+00:03:53.480 --> 00:03:54.820
+Can we do better?
+
+NOTE Solution: Single-pass
+
+00:03:55.920 --> 00:03:56.740
+Yes we can!
+
+00:03:56.840 --> 00:03:59.580
+We can actually perform just a single pass.
+
+00:03:59.680 --> 00:04:02.180
+The trick is to alternate between the replacement
+
+00:04:02.280 --> 00:04:05.900
+pairs, replacing whichever source occurs the earliest,
+
+00:04:06.000 --> 00:04:08.340
+and making sure to continue scanning after the end
+
+00:04:08.440 --> 00:04:12.180
+of the substituted target in order to avoid interference.
+
+00:04:12.280 --> 00:04:14.420
+This interleaving of replacements is not something
+
+00:04:14.520 --> 00:04:17.140
+that's easy to do by hand with query-replace.
+
+NOTE Solution: Existing
+
+00:04:18.240 --> 00:04:20.860
+Since this is Emacs we're talking about, of course
+
+00:04:20.960 --> 00:04:23.460
+there already exist solutions that implement this idea.
+
+00:04:23.560 --> 00:04:25.860
+Here are few that we could find.
+
+00:04:25.960 --> 00:04:28.700
+The EmacsWiki has a page dedicated to this problem.
+
+00:04:28.800 --> 00:04:31.460
+Stack Overflow has an old post where a couple of
+
+00:04:31.560 --> 00:04:33.860
+users provided their solutions.
+
+00:04:33.960 --> 00:04:36.820
+Mastering Emacs also gives a method along with other
+
+00:04:36.920 --> 00:04:38.900
+interesting query-replace-regexp (C-M-%) patterns.
+
+00:04:39.000 --> 00:04:42.260
+More recently, Tony Zorman made a blogpost providing
+
+00:04:42.360 --> 00:04:44.980
+a solution with an interface based on query-replace.
+
+00:04:45.080 --> 00:04:47.540
+I encourage you to take a look at these solutions if
+
+00:04:47.640 --> 00:04:48.940
+you're interested in the details.
+
+00:04:50.040 --> 00:04:52.940
+But while a step in the right direction, these solutions
+
+00:04:53.040 --> 00:04:55.340
+are not satisfactory because they all lack one or
+
+00:04:55.440 --> 00:04:56.820
+more of the following.
+
+00:04:56.920 --> 00:04:59.900
+One, they are not completely automated and require
+
+00:05:00.000 --> 00:05:02.500
+the user to come up with a relatively complicated
+
+00:05:02.600 --> 00:05:05.380
+and verbose query-replace-regexp invocation.
+
+00:05:06.080 --> 00:05:08.940
+Two, they are restricted to performing only 2-element
+
+00:05:09.040 --> 00:05:11.780
+swaps rather than general parallel replacements.
+
+00:05:12.680 --> 00:05:15.060
+Three, they don't provide any sort of interactivity
+
+00:05:15.160 --> 00:05:17.820
+during replacement and instead perform it in one shot.
+
+00:05:18.620 --> 00:05:21.300
+Four, they don't attempt to integrate with the familiar
+
+00:05:21.400 --> 00:05:24.900
+query-replace interface, which supports skipping, undo,
+
+00:05:25.000 --> 00:05:28.340
+history and more advanced features like Lisp expressions
+
+00:05:28.440 --> 00:05:29.900
+and recursive query edits.
+
+00:05:30.700 --> 00:05:33.700
+Most importantly however, five, none of them were
+
+00:05:33.800 --> 00:05:36.380
+designed with regular expressions in mind and instead
+
+00:05:36.480 --> 00:05:38.460
+only ever consider literal strings.
+
+00:05:39.560 --> 00:05:43.060
+In fact, the only one that comes close is the
+
+00:05:43.160 --> 00:05:46.420
+half-automated solution that invokes query-replace-regexp
+
+00:05:46.520 --> 00:05:48.100
+with a specially crafted replacement.
+
+00:05:48.800 --> 00:05:51.660
+As an example, here's how you would use this technique
+
+00:05:51.760 --> 00:05:54.340
+to perform a 3-element parallel regex replacement.
+
+00:05:54.440 --> 00:05:57.740
+It uses the backslash-comma Lisp expression feature
+
+00:05:57.840 --> 00:06:01.180
+in order to choose the appropriate target to substitute.
+
+00:06:01.280 --> 00:06:03.700
+Aside from being very clumsy and tedious to write out,
+
+00:06:03.800 --> 00:06:06.860
+this approach makes it really hard to use more complex
+
+00:06:06.960 --> 00:06:09.260
+regular expressions that make use of capture groups
+
+00:06:09.360 --> 00:06:10.600
+themselves.
+
+00:06:10.800 --> 00:06:12.200
+This was the biggest limitation that we wanted
+
+00:06:12.200 --> 00:06:15.020
+to get rid of and the main motivation for our work.
+
+00:06:15.720 --> 00:06:19.820
+So, as an alternative to the existing zoo of 80% solutions,
+
+00:06:19.920 --> 00:06:24.140
+we aim to provide a 100% solution, one that handles
+
+00:06:24.240 --> 00:06:27.020
+regexes and consolidates all of the existing ideas
+
+00:06:27.120 --> 00:06:28.180
+into a single package.
+
+NOTE Solution: query-replace-parallel
+
+00:06:29.080 --> 00:06:31.260
+We call it query-replace-parallel.
+
+00:06:31.360 --> 00:06:34.060
+The package is free and open-source and can currently
+
+00:06:34.160 --> 00:06:37.300
+be found on GitHub under hokomo/query-replace-parallel.
+
+00:06:37.400 --> 00:06:40.140
+The name is not yet finalized and we're open to any
+
+00:06:40.240 --> 00:06:41.170
+suggestions.
+
+00:06:41.503 --> 00:06:43.180
+We hope to get it published on an Elisp
+
+00:06:43.280 --> 00:06:45.780
+package archive in the near future, but for now you
+
+00:06:45.880 --> 00:06:48.300
+can just download and load the main Elisp file manually.
+
+00:06:48.900 --> 00:06:51.300
+With all of that said, let's go through a few demos
+
+00:06:51.400 --> 00:06:54.140
+to illustrate some use cases and see how to use the package.
+
+NOTE Demonstration: Swap
+
+00:06:55.240 --> 00:06:57.460
+Our first demo is a simple swap, like the one we
+
+00:06:57.560 --> 00:06:59.140
+showed at the beginning of the presentation.
+
+00:06:59.240 --> 00:07:02.060
+This chunk of text is actually one of the tests
+
+00:07:02.160 --> 00:07:03.140
+from our package's code.
+
+00:07:03.840 --> 00:07:06.420
+Assuming we have loaded the package, we can execute
+
+00:07:06.520 --> 00:07:09.580
+the query-replace-parallel command, a parallel version
+
+00:07:09.680 --> 00:07:11.220
+of the standard query-replace.
+
+00:07:11.320 --> 00:07:13.940
+This command works with literal strings and will
+
+00:07:14.040 --> 00:07:15.900
+ask for each source and target in turn.
+
+00:07:16.000 --> 00:07:21.260
+Our goal is to replace "foo" with "bar"
+
+00:07:21.360 --> 00:07:22.180
+and "bar" with "foo".
+
+00:07:24.680 --> 00:07:26.940
+After inputting our replacements, we terminate the
+
+00:07:27.040 --> 00:07:29.060
+prompt by pressing enter with empty input.
+
+00:07:29.860 --> 00:07:32.500
+At this point, everything functions the same as in
+
+00:07:32.600 --> 00:07:34.380
+a standard query-replace invocation.
+
+00:07:35.280 --> 00:07:37.300
+The echo area shows the match and the replacement
+
+00:07:37.400 --> 00:07:38.603
+we're about to make.
+
+00:07:38.703 --> 00:07:40.220
+We can perform replacements,
+
+00:07:43.920 --> 00:07:46.403
+undo them,
+
+00:07:46.503 --> 00:07:49.103
+skip them,
+
+00:07:49.203 --> 00:07:50.140
+execute them until the end,
+
+00:07:50.240 --> 00:07:51.020
+and so on.
+
+NOTE Demonstration: LaTeX
+
+00:07:53.970 --> 00:07:56.180
+The second demo shows our first regex use case.
+
+00:07:56.280 --> 00:07:58.620
+Imagine we have the following LaTeX code.
+
+00:07:58.720 --> 00:08:01.380
+We realize that we haven't been completely consistent
+
+00:08:01.480 --> 00:08:03.940
+in our use and naming of macros, so we decide to
+
+00:08:04.040 --> 00:08:04.660
+fix the problem.
+
+00:08:05.536 --> 00:08:08.300
+This time we execute query-replace-parallel-regexp
+
+00:08:08.400 --> 00:08:10.900
+because we want to work with regex instead of literal
+
+00:08:11.000 --> 00:08:11.500
+strings.
+
+00:08:12.000 --> 00:08:13.420
+We want to achieve two things.
+
+00:08:13.520 --> 00:08:16.860
+First, we want to wrap all usages of the variable n
+
+00:08:16.960 --> 00:08:17.980
+with the natvar macro.
+
+00:08:18.080 --> 00:08:20.940
+Using the backslash-less-than and blackslash-greater-than
+
+00:08:21.040 --> 00:08:23.740
+constructs allows us to only match letters n not
+
+00:08:23.840 --> 00:08:25.260
+appearing as part of a larger word.
+
+00:08:25.360 --> 00:08:29.460
+Second, we want to rename natvar to intvar because
+
+00:08:29.560 --> 00:08:32.180
+the variables a, b and c are integers and not natural
+
+00:08:32.280 --> 00:08:32.700
+numbers.
+
+00:08:33.300 --> 00:08:35.660
+We enter empty input to terminate the prompt and can
+
+00:08:35.760 --> 00:08:37.180
+now perform the replacements.
+
+00:08:42.280 --> 00:08:44.380
+There we go, the fixes are done and we didn't have
+
+00:08:44.480 --> 00:08:46.100
+to think about in which order to apply them.
+
+NOTE Demonstration: Regex
+
+00:08:48.700 --> 00:08:50.900
+We now take a look at a more complicated regex
+
+00:08:51.000 --> 00:08:53.580
+example to demonstrate that even advanced query-replace
+
+00:08:53.680 --> 00:08:54.300
+features are supported.
+
+00:08:55.100 --> 00:08:57.340
+Each "foo" and "bar" in this example is followed by
+
+00:08:57.440 --> 00:08:57.740
+a number.
+
+00:08:58.440 --> 00:09:01.280
+The goal is to not only swap "foo" and "bar", but
+
+00:09:01.380 --> 00:09:03.620
+also increase or decrease the corresponding number.
+
+00:09:03.720 --> 00:09:06.500
+We first match "foo" and capture the number that
+
+00:09:06.600 --> 00:09:07.100
+follows it.
+
+00:09:07.200 --> 00:09:09.900
+For the target, we make use of the backslash-comma
+
+00:09:10.000 --> 00:09:12.500
+Lisp expression feature in order to replace the
+
+00:09:12.600 --> 00:09:14.940
+match with "bar" followed by the number's successor.
+
+00:09:15.540 --> 00:09:17.540
+We do the same thing for "bar", except that we
+
+00:09:17.640 --> 00:09:19.140
+replace the number with its predecessor.
+
+00:09:27.040 --> 00:09:29.020
+Performing the replacements, we can see how each
+
+00:09:29.120 --> 00:09:31.220
+number is incremented or decremented appropriately.
+
+NOTE Demonstration: Order
+
+00:09:36.320 --> 00:09:38.660
+We haven't covered it explicitly so some of you may
+
+00:09:38.760 --> 00:09:41.260
+be wondering how parallel replacement deals with
+
+00:09:41.360 --> 00:09:43.740
+overlapping matches and whether the order of the
+
+00:09:43.840 --> 00:09:45.380
+replacement pairs is significant.
+
+00:09:45.480 --> 00:09:47.860
+This demo will clarify the exact behavior.
+
+00:09:48.960 --> 00:09:51.700
+The first example has the sources "watch" and "stopwatch".
+
+00:09:57.500 --> 00:10:00.500
+Conceptually, the matches overlap, but the rule is
+
+00:10:00.600 --> 00:10:02.900
+that matches are always processed earliest first,
+
+00:10:03.000 --> 00:10:05.940
+regardless of their length or the ordering of the pairs.
+
+00:10:06.040 --> 00:10:08.980
+Therefore it is "stopwatch" that gets replaced,
+
+00:10:09.080 --> 00:10:10.940
+and not its substring "watch".
+
+00:10:16.040 --> 00:10:19.540
+The second example uses the sources "watch" and "watchword".
+
+00:10:19.640 --> 00:10:22.540
+Both of the matches now conceptually start at the same
+
+00:10:22.640 --> 00:10:23.020
+position.
+
+00:10:23.720 --> 00:10:26.300
+In situations like these the order of the pairs does
+
+00:10:26.400 --> 00:10:29.460
+matter, and ties are broken by prefering the pair that
+
+00:10:29.560 --> 00:10:32.180
+was entered first, which is behavior that is inherited
+
+00:10:32.280 --> 00:10:33.460
+from the Elisp regex engine.
+
+00:10:34.460 --> 00:10:37.380
+So, the substring "watch" in "watchword" is what gets
+
+00:10:37.480 --> 00:10:38.460
+replaced in this case.
+
+00:10:39.460 --> 00:10:41.740
+Situations where the order of the pairs is significant
+
+00:10:41.840 --> 00:10:44.740
+are not very common however, so the user generally
+
+00:10:44.840 --> 00:10:46.660
+doesn't have to worry about this edge case.
+
+00:10:46.760 --> 00:10:49.860
+The order only matters when two or more sources
+
+00:10:49.960 --> 00:10:52.340
+share the same prefix, as in this example.
+
+NOTE Demonstration: Fun
+
+00:10:54.440 --> 00:10:56.860
+The final demo tests the limits of the package and
+
+00:10:56.960 --> 00:10:59.660
+shows that it fully integrates with query-replace.
+
+00:10:59.760 --> 00:11:02.940
+It is really just for fun and can even serve as a
+
+00:11:03.040 --> 00:11:04.140
+small Emacs brainteaser.
+
+00:11:04.240 --> 00:11:05.460
+See if you can keep up!
+
+00:11:06.360 --> 00:11:09.060
+We open a directory and enter Writable Dired mode
+
+00:11:09.160 --> 00:11:11.780
+in order to rename the directories "foo" and "bar".
+
+00:11:11.880 --> 00:11:14.660
+Instead of doing it quickly by hand, we decide to
+
+00:11:14.760 --> 00:11:17.260
+show off and use query-replace-parallel-regexp.
+
+00:11:17.360 --> 00:11:19.900
+We enter our pairs and make use of the
+
+00:11:20.000 --> 00:11:22.380
+backslash-question-mark query edit feature.
+
+00:11:25.080 --> 00:11:27.820
+Now whenever we perform a replacement, the query
+
+00:11:27.920 --> 00:11:30.740
+edit makes Emacs stop and prompt us for additional
+
+00:11:30.840 --> 00:11:32.180
+input to use as the target.
+
+00:11:36.680 --> 00:11:39.140
+We confirm the renames and now enter the "bar-lib"
+
+00:11:39.240 --> 00:11:41.900
+directory in order to perform the same kind of
+
+00:11:42.000 --> 00:11:43.900
+replacement on "baz" and "quux".
+
+00:11:44.500 --> 00:11:47.820
+Rather than save time, we decide to be extra lazy
+
+00:11:47.920 --> 00:11:48.820
+and take the long route.
+
+00:11:48.920 --> 00:11:52.220
+We recall the first pair and initiate a recursive
+
+00:11:52.320 --> 00:11:54.460
+invocation of query-replace-parallel-regexp.
+
+00:11:54.560 --> 00:11:57.020
+We are now replacing the replacement.
+
+00:12:01.020 --> 00:12:04.540
+We apply our fixes and then do the same thing again
+
+00:12:04.640 --> 00:12:05.870
+with the second pair.
+
+00:12:05.970 --> 00:12:07.500
+Recall and recurse.
+
+00:12:16.300 --> 00:12:19.860
+We confirm the prompt and finally rename our directories.
+
+00:12:25.360 --> 00:12:26.620
+Wow, that really paid off.
+
+NOTE Implementation
+
+00:12:29.120 --> 00:12:31.380
+Before we finish, a few quick words about the
+
+00:12:31.480 --> 00:12:32.900
+implementation for the curious.
+
+00:12:33.300 --> 00:12:36.380
+Both query-replace-parallel and query-replace-parallel-regexp
+
+00:12:36.480 --> 00:12:39.140
+delegate to the complex perform-replace function
+
+00:12:39.240 --> 00:12:41.780
+which is the workhorse of query-replace's interactive
+
+00:12:41.880 --> 00:12:42.420
+mechanism.
+
+00:12:43.120 --> 00:12:45.420
+The way we achieve multiple interleaved replacements
+
+00:12:45.520 --> 00:12:49.020
+is by providing perform-replace with a big "matcher regex"
+
+00:12:49.120 --> 00:12:50.380
+and a special replacement function.
+
+00:12:50.480 --> 00:12:54.300
+Essentially, a complex parallel replacement like this
+
+00:12:54.400 --> 00:12:57.420
+is transformed into a standard replacement like this.
+
+00:12:57.520 --> 00:13:00.100
+This is similar to the trick shown earlier in the
+
+00:13:00.200 --> 00:13:00.780
+presentation.
+
+00:13:00.880 --> 00:13:03.820
+Each source is put in its own capture group to allow
+
+00:13:03.920 --> 00:13:06.340
+the replacement function to determine which one matched
+
+00:13:06.440 --> 00:13:08.380
+and return the appropriate target.
+
+00:13:08.980 --> 00:13:11.580
+However, we now take care to support arbitrary
+
+00:13:11.680 --> 00:13:13.380
+regular expressions as sources.
+
+00:13:13.480 --> 00:13:16.980
+We achieve this by converting each source regex into
+
+00:13:17.080 --> 00:13:19.820
+an equivalent one for which we can guarantee that its
+
+00:13:19.920 --> 00:13:22.820
+capture groups will not clash with our matcher regex.
+
+00:13:22.920 --> 00:13:25.900
+Information about this conversion is stored, and
+
+00:13:26.000 --> 00:13:28.220
+once the replacement function is called it has
+
+00:13:28.320 --> 00:13:30.260
+enough data to apply the replacement from the
+
+00:13:30.360 --> 00:13:32.020
+viewpoint of the original regex.
+
+00:13:32.720 --> 00:13:34.900
+The regex transformation is reliable because it
+
+00:13:35.000 --> 00:13:38.420
+uses the rx library, allowing us to treat regexes
+
+00:13:38.520 --> 00:13:41.940
+as s-expressions and avoid any nasty manual parsing.
+
+00:13:42.640 --> 00:13:46.540
+In fact, rx itself is based on one of Olin Shivers'
+
+00:13:46.640 --> 00:13:48.336
+100% solutions:
+
+00:13:48.436 --> 00:13:51.220
+SRE, or the S-expression regex notation.
+
+00:13:51.320 --> 00:13:54.340
+We all stand on the shoulders of many giants, so
+
+00:13:54.440 --> 00:13:56.500
+let's strive to design good solutions that we can
+
+00:13:56.600 --> 00:13:59.140
+all benefit from, many years into the future!
+
+00:13:59.240 --> 00:14:02.900
+Finally, because query-replace's core is not completely
+
+00:14:03.000 --> 00:14:06.060
+customizable, we did have to sprinkle in some advice
+
+00:14:06.160 --> 00:14:07.500
+to get certain things working.
+
+00:14:07.600 --> 00:14:11.060
+This concerns only minor cosmetic fixes and not the
+
+00:14:11.160 --> 00:14:13.940
+core replacement functionality, but we have nontheless
+
+00:14:14.040 --> 00:14:16.580
+tried to do it in the simplest and least intrusive way
+
+00:14:16.680 --> 00:14:17.140
+possible.
+
+NOTE End
+
+00:14:18.740 --> 00:14:21.580
+In conclusion, go download and play with the package.
+
+00:14:21.680 --> 00:14:24.460
+Even if you're not performing overlapping replacements,
+
+00:14:24.560 --> 00:14:26.780
+you can still use query-replace-parallel for the
+
+00:14:26.880 --> 00:14:29.620
+peace of mind knowing that things won't go wrong if
+
+00:14:29.720 --> 00:14:31.860
+you perform more than one replacement at a time.
+
+00:14:32.460 --> 00:14:34.540
+Feel free to let us know about any interesting or
+
+00:14:34.640 --> 00:14:37.460
+crazy use cases you might come up with, as well as
+
+00:14:37.560 --> 00:14:40.540
+improvements or bugs that make it only a 99% solution.
+
+00:14:40.640 --> 00:14:45.560
+Thanks for listening and have a great EmacsConf!
diff --git a/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt b/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt
new file mode 100644
index 00000000..8622eb0d
--- /dev/null
+++ b/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt
@@ -0,0 +1,1973 @@
+WEBVTT
+
+
+00:00:07.299 --> 00:00:07.799
+I think it's still going up.
+
+00:00:11.200 --> 00:00:11.700
+All right. I think we should be live now.
+
+00:00:12.900 --> 00:00:13.139
+So hi, everyone. And hi,
+
+00:00:13.780 --> 00:00:14.280
+Michael. How are you doing?
+
+00:00:18.080 --> 00:00:18.340
+Hi. Hello, EmacsConf. I'm pretty excited to
+
+00:00:22.420 --> 00:00:22.800
+be live at this year's EmacsConf and getting
+
+00:00:25.640 --> 00:00:25.960
+a chance to talk about my favorite program or
+
+00:00:29.140 --> 00:00:29.439
+our favorite program. Well,
+
+00:00:30.439 --> 00:00:30.820
+yeah, I'm doing pretty fine,
+
+00:00:32.680 --> 00:00:32.900
+and I'm excited. Well,
+
+00:00:35.020 --> 00:00:35.520
+so are we. So without further ado,
+
+00:00:37.640 --> 00:00:37.760
+the floor is yours. Present for as much as
+
+00:00:39.200 --> 00:00:39.700
+you want. We've already discussed the timings
+
+00:00:41.380 --> 00:00:41.880
+so I'll let you on your own.
+
+00:00:44.059 --> 00:00:44.380
+Okay so let's get started.
+
+00:00:46.560 --> 00:00:46.760
+The topic of the talk is the browser in a
+
+00:00:49.920 --> 00:00:50.420
+buffer or Poltus, a periodic web weaver.
+
+00:00:53.540 --> 00:00:53.700
+Poltus is a kind of spider and the name of
+
+00:00:55.680 --> 00:00:56.180
+the project I'm going to show you.
+
+00:01:01.400 --> 00:01:01.900
+But first let's set the stage for this
+
+00:01:04.940 --> 00:01:05.440
+project. Here we have Emacs I'm presenting
+
+00:01:07.240 --> 00:01:07.740
+from and here we have Firefox.
+
+00:01:09.600 --> 00:01:09.960
+I'm inside and there's a video.
+
+00:01:12.720 --> 00:01:13.220
+Okay, let's do this. Don't do the inception.
+
+00:01:14.900 --> 00:01:15.400
+Put it over there somewhere.
+
+00:01:17.940 --> 00:01:18.440
+Okay. So here's Firefox.
+
+00:01:20.760 --> 00:01:21.260
+It's not, it's, It's in a buffer,
+
+00:01:23.560 --> 00:01:24.060
+but it's pretty disconnected from Emacs.
+
+00:01:27.700 --> 00:01:28.200
+It's in an XWM buffer.
+
+00:01:30.880 --> 00:01:31.320
+So you can use it from inside Emacs,
+
+00:01:35.320 --> 00:01:35.440
+but they don't talk. Emacs doesn't talk to
+
+00:01:36.860 --> 00:01:37.120
+the browser and the browser doesn't talk
+
+00:01:40.320 --> 00:01:40.820
+back. And I'm going to show you something
+
+00:01:42.720 --> 00:01:43.220
+that changes this. But first,
+
+00:01:45.100 --> 00:01:45.280
+I think for many of you,
+
+00:01:47.080 --> 00:01:47.200
+it's the same, like there's Emacs and the
+
+00:01:49.120 --> 00:01:49.620
+other important program is the browser.
+
+00:01:55.340 --> 00:01:55.840
+So how do you do something?
+
+00:01:57.880 --> 00:01:58.180
+Let's continue with the stage.
+
+00:01:59.640 --> 00:02:00.140
+We have some research session.
+
+00:02:03.400 --> 00:02:03.680
+We have this EmacsConf we found this year and
+
+00:02:04.960 --> 00:02:05.460
+there are a lot of talks.
+
+00:02:07.500 --> 00:02:07.700
+This is the 1 we're watching right now and
+
+00:02:09.520 --> 00:02:10.020
+let's have a look. What else is interesting?
+
+00:02:11.980 --> 00:02:12.480
+Ah, this was yesterday.
+
+00:02:15.060 --> 00:02:15.560
+So have a look at today.
+
+00:02:17.980 --> 00:02:18.480
+There is a world of possibilities.
+
+00:02:20.320 --> 00:02:20.600
+That sounds great. Oh,
+
+00:02:23.340 --> 00:02:23.840
+that is right now. So greetings to you.
+
+00:02:27.800 --> 00:02:28.080
+Yes, the browser and the buffer and other
+
+00:02:30.200 --> 00:02:30.700
+stuff. So now we have a lot of talks,
+
+00:02:35.900 --> 00:02:36.080
+tabs open and we're going to go back to
+
+00:02:40.800 --> 00:02:41.300
+Emacs. I can't switch buffers in a dedicated
+
+00:02:43.580 --> 00:02:43.940
+window. So apparently I can't do that.
+
+00:02:50.500 --> 00:02:50.600
+Here's Emacs again. Now I'm in Emacs and I
+
+00:02:51.900 --> 00:02:52.400
+want to have something from my browser,
+
+00:02:56.080 --> 00:02:56.200
+maybe like the open tabs or I want to
+
+00:02:59.180 --> 00:02:59.380
+annotate them. I'm in org mode right now,
+
+00:03:02.400 --> 00:03:02.900
+so I would like to do it from Org Mode maybe.
+
+00:03:05.380 --> 00:03:05.740
+How do I get the tab? Okay,
+
+00:03:08.940 --> 00:03:09.440
+let's tap back. I want to annotate this page.
+
+00:03:11.860 --> 00:03:12.360
+Let's get the link, put it here.
+
+00:03:13.660 --> 00:03:13.940
+Oh, that wasn't a link.
+
+00:03:15.420 --> 00:03:15.920
+That was something totally different.
+
+00:03:19.540 --> 00:03:19.960
+So let's use the mouse.
+
+00:03:22.540 --> 00:03:23.040
+There's the link. Now we could put a title
+
+00:03:30.060 --> 00:03:30.560
+and so on. What I'm showing you here is it is
+
+00:03:34.160 --> 00:03:34.640
+pretty, no it's not too difficult,
+
+00:03:36.680 --> 00:03:36.820
+but it could be easier interacting with the
+
+00:03:40.380 --> 00:03:40.580
+browser. And there are helpers to do
+
+00:03:41.980 --> 00:03:42.480
+something like this. I had,
+
+00:03:46.440 --> 00:03:46.640
+for example, I used for a long time this
+
+00:03:50.400 --> 00:03:50.660
+extension. It's called export tabs URLs and
+
+00:03:53.000 --> 00:03:53.400
+you got a list of your tabs and you can just
+
+00:03:54.280 --> 00:03:54.780
+copy them to clipboard.
+
+00:03:55.900 --> 00:03:56.280
+So now we have the tabs,
+
+00:03:58.620 --> 00:03:58.940
+copy them to clipboard and there they are.
+
+00:04:00.640 --> 00:04:01.140
+So now we can do something with the tabs,
+
+00:04:03.240 --> 00:04:03.740
+rearrange them, take notes and so on.
+
+00:04:14.320 --> 00:04:14.640
+Okay. And there's even other stuff for while
+
+00:04:17.519 --> 00:04:18.019
+researching for this talk on this extension,
+
+00:04:21.060 --> 00:04:21.260
+I found this tab session manager where you
+
+00:04:23.080 --> 00:04:23.300
+can have a look at your tabs it does
+
+00:04:26.540 --> 00:04:27.040
+snapshots it exports it in Brazilian
+
+00:04:29.820 --> 00:04:30.320
+different formats and yeah that's even more
+
+00:04:35.600 --> 00:04:35.740
+luxurious no better but it's still not an
+
+00:04:41.380 --> 00:04:41.880
+emacs okay so how could we get it into Emacs?
+
+00:04:44.040 --> 00:04:44.540
+Maybe this thing called Pultus could help.
+
+00:04:49.000 --> 00:04:49.180
+The theme is from a browser extension and a
+
+00:04:52.440 --> 00:04:52.760
+manual workflow. As I showed you right now,
+
+00:04:54.400 --> 00:04:54.860
+we want to go to an interactive Emacs
+
+00:04:57.620 --> 00:04:57.800
+interface. How to deal with the browser and
+
+00:04:59.280 --> 00:04:59.780
+its tabs from inside Emacs.
+
+00:05:05.860 --> 00:05:06.360
+And we're gonna do just that right now.
+
+00:05:08.880 --> 00:05:09.340
+So we had this research session over there.
+
+00:05:10.320 --> 00:05:10.820
+So now it's demo time.
+
+00:05:12.620 --> 00:05:13.120
+We had this research session.
+
+00:05:14.620 --> 00:05:15.120
+Let's open it again. Here is it.
+
+00:05:18.340 --> 00:05:18.840
+And now we want to do it from inside Emacs.
+
+00:05:22.940 --> 00:05:23.300
+We say please Emacs insert this or please
+
+00:05:28.000 --> 00:05:28.200
+Poltis insert this. And now we have the
+
+00:05:30.020 --> 00:05:30.040
+browser session inside Emacs.
+
+00:05:35.280 --> 00:05:35.760
+It's a little bit roomy so you can see it
+
+00:05:40.200 --> 00:05:40.380
+over the internet. And we learned that
+
+00:05:44.120 --> 00:05:44.280
+BigBooplotten doesn't set a title or has a
+
+00:05:46.160 --> 00:05:46.360
+new line in it. I'm not actually sure what
+
+00:05:49.740 --> 00:05:50.120
+happened here. So let's have this browser
+
+00:05:51.940 --> 00:05:52.440
+session and what can we do with it?
+
+00:05:57.860 --> 00:05:58.320
+For once you can just copy stuff here,
+
+00:06:01.560 --> 00:06:01.720
+you can take notes and it updates with the
+
+00:06:03.900 --> 00:06:04.040
+browser. If you change something in the
+
+00:06:06.020 --> 00:06:06.420
+browser, maybe switch these tabs,
+
+00:06:07.720 --> 00:06:08.220
+they switch over there.
+
+00:06:12.340 --> 00:06:12.560
+Or you say, okay, I don't want to have
+
+00:06:17.340 --> 00:06:17.500
+HyperDrive in here. And I don't need the
+
+00:06:19.440 --> 00:06:19.540
+instructions for speakers because I'm not a
+
+00:06:22.500 --> 00:06:22.800
+speaker so I have a live sync to Emacs from
+
+00:06:29.440 --> 00:06:29.640
+the browser in this Org Mode interface and we
+
+00:06:31.180 --> 00:06:31.420
+can do more stuff with it,
+
+00:06:37.640 --> 00:06:37.800
+for example we could I already showed you how
+
+00:06:41.880 --> 00:06:42.380
+to rearrange stuff. We can open new tabs.
+
+00:06:46.220 --> 00:06:46.720
+We can have a look at let's say emacs-conf
+
+00:06:53.480 --> 00:06:53.680
+again and they're just updating and now it
+
+00:06:57.040 --> 00:06:57.540
+says a new tab, add another 1,
+
+00:07:02.000 --> 00:07:02.500
+okay. So I think you get the gist.
+
+00:07:05.220 --> 00:07:05.720
+Now let's take a note on this.
+
+00:07:11.460 --> 00:07:11.960
+This conference sounds interesting.
+
+00:07:20.820 --> 00:07:21.140
+Have a look. Maybe thumbs up.
+
+00:07:23.420 --> 00:07:23.920
+Okay I can do this. So now there's a link,
+
+00:07:30.920 --> 00:07:31.420
+not a link, a note. If I close it and reopen
+
+00:07:33.900 --> 00:07:34.400
+it, There's the note again.
+
+00:07:39.000 --> 00:07:39.500
+So we have persistent notes for browser tabs
+
+00:07:42.040 --> 00:07:42.400
+or not actually browser tabs,
+
+00:07:46.240 --> 00:07:46.560
+it's actually URLs. Use the browser tab.
+
+00:07:49.600 --> 00:07:50.100
+I'm gonna open another URL.
+
+00:07:51.500 --> 00:07:52.000
+Now it's not without a node.
+
+00:07:54.480 --> 00:07:54.980
+Going back, the node is back there.
+
+00:08:01.260 --> 00:08:01.760
+That's how far I can show you Politis because
+
+00:08:05.720 --> 00:08:06.220
+the interface isn't finished otherwise.
+
+00:08:11.680 --> 00:08:12.100
+But the backend is pretty cool and I'm gonna
+
+00:08:13.180 --> 00:08:13.580
+tell you more about that.
+
+00:08:15.360 --> 00:08:15.860
+The interface is right now just browser
+
+00:08:18.640 --> 00:08:18.940
+interaction 1 way from the browser into org
+
+00:08:22.240 --> 00:08:22.740
+mode, an org mode interface and it has nodes.
+
+00:08:25.080 --> 00:08:25.580
+But it's not too difficult to imagine,
+
+00:08:30.420 --> 00:08:30.920
+for example, adding tags or...
+
+00:08:32.020 --> 00:08:32.500
+I just remembered Or I just remembered
+
+00:08:39.400 --> 00:08:39.900
+something. Okay. So for example,
+
+00:08:45.060 --> 00:08:45.220
+adding texts or scheduling information or
+
+00:08:47.360 --> 00:08:47.720
+what else, all the stuff you do with org
+
+00:08:51.920 --> 00:08:52.420
+mode. Or go the other way around and sync
+
+00:08:54.920 --> 00:08:55.320
+from the org mode buffer to the browser.
+
+00:09:01.440 --> 00:09:01.560
+So I could delete this heading or rename it
+
+00:09:03.280 --> 00:09:03.420
+or stuff like that. So it's reflected in the
+
+00:09:04.840 --> 00:09:05.000
+browser. I'm not going to do it right now
+
+00:09:05.640 --> 00:09:06.140
+because it's not implemented.
+
+00:09:10.240 --> 00:09:10.440
+But just to give you an outlook of the
+
+00:09:14.960 --> 00:09:15.200
+possibilities. Good. So let's leave this
+
+00:09:24.000 --> 00:09:24.500
+browser session here. Browser session below.
+
+00:09:35.280 --> 00:09:35.500
+Okay. Change the outline structure or stuff
+
+00:09:39.380 --> 00:09:39.880
+like this. So get the browser back,
+
+00:09:43.420 --> 00:09:43.740
+debugging. Yep, this talks,
+
+00:09:44.800 --> 00:09:45.060
+I could change something here,
+
+00:09:47.920 --> 00:09:48.420
+go back to the talks page and still working.
+
+00:09:56.920 --> 00:09:57.120
+Now I showed you what it does and what can
+
+00:10:01.560 --> 00:10:01.720
+you use it for or What is it intended to be
+
+00:10:02.660 --> 00:10:03.040
+used for if it's finished,
+
+00:10:04.640 --> 00:10:05.140
+because it isn't finished as I said.
+
+00:10:07.240 --> 00:10:07.740
+Manage your open tabs.
+
+00:10:12.340 --> 00:10:12.840
+So for example my use case is I do something,
+
+00:10:16.080 --> 00:10:16.580
+have a big collection of tabs open And then I
+
+00:10:22.800 --> 00:10:22.940
+need RAM. This PC here has just 4 GB of it,
+
+00:10:25.080 --> 00:10:25.580
+so sometimes I need to close the browser too.
+
+00:10:27.260 --> 00:10:27.760
+I don't have to close the PC.
+
+00:10:32.540 --> 00:10:32.740
+And in this case I'd like to save the
+
+00:10:37.240 --> 00:10:37.740
+session. So far I just copied this clipboard
+
+00:10:40.380 --> 00:10:40.880
+thing I showed you earlier in an org mode and
+
+00:10:44.640 --> 00:10:44.900
+Captured it away and this should be the
+
+00:10:48.120 --> 00:10:48.300
+future for this workflow You just capture the
+
+00:10:49.520 --> 00:10:49.700
+browser session rearrange it.
+
+00:10:51.760 --> 00:10:51.860
+However, you like it and then you make make
+
+00:10:54.160 --> 00:10:54.520
+it offline. So this is the thing I didn't
+
+00:10:57.840 --> 00:10:58.340
+show you. You can, if you were looking here
+
+00:11:04.020 --> 00:11:04.160
+you can you see that this heading is open in
+
+00:11:08.560 --> 00:11:09.060
+tab 37, window 1. So if you would remove
+
+00:11:14.120 --> 00:11:14.480
+this, it's offline. And you keep just the org
+
+00:11:16.300 --> 00:11:16.700
+structure. It's a simple text file then.
+
+00:11:25.940 --> 00:11:26.100
+And the plan future feature is to go back to
+
+00:11:27.540 --> 00:11:28.040
+the online state. So you have a session,
+
+00:11:28.900 --> 00:11:29.400
+maybe a browser window,
+
+00:11:30.920 --> 00:11:31.420
+you save it to Org Mode,
+
+00:11:34.600 --> 00:11:34.960
+close the window and some days later or weeks
+
+00:11:38.080 --> 00:11:38.580
+later you return to this research session,
+
+00:11:40.240 --> 00:11:40.740
+maybe something about Emacs or whatever
+
+00:11:43.740 --> 00:11:44.180
+spikes your interest, and you can just reopen
+
+00:11:46.500 --> 00:11:46.920
+it from the browser, from Org Mode.
+
+00:11:48.820 --> 00:11:49.000
+So Org Mode becomes the controller of the
+
+00:11:50.320 --> 00:11:50.820
+browser. And it's not,
+
+00:11:52.440 --> 00:11:52.680
+it doesn't have to be Org Mode,
+
+00:11:53.860 --> 00:11:54.360
+but for the demo purpose,
+
+00:11:58.260 --> 00:11:58.760
+Org Mode was the most easy interface.
+
+00:12:02.540 --> 00:12:02.800
+That easy. I don't know if you're doing more
+
+00:12:05.600 --> 00:12:05.860
+complex interactive stuff in Org Mode,
+
+00:12:08.640 --> 00:12:09.140
+but there's some tricky edge cases.
+
+00:12:12.560 --> 00:12:12.920
+I just finished this demo half an hour ago,
+
+00:12:15.360 --> 00:12:15.520
+maybe an hour ago, and I'm really lucky that
+
+00:12:18.580 --> 00:12:19.080
+it worked in the end. Org mode,
+
+00:12:23.000 --> 00:12:23.400
+pretty great. So maybe you could do another
+
+00:12:25.200 --> 00:12:25.700
+interface, does not matter.
+
+00:12:29.760 --> 00:12:30.260
+Easy access to more info from inside Emacs.
+
+00:12:32.360 --> 00:12:32.580
+Yeah, Of course, you can imagine like we have
+
+00:12:34.700 --> 00:12:35.200
+just the title URL here,
+
+00:12:39.160 --> 00:12:39.360
+but you could even get at the text of the
+
+00:12:41.120 --> 00:12:41.280
+buffer. I'd show you in the,
+
+00:12:42.340 --> 00:12:42.840
+in the, how is it done section,
+
+00:12:44.540 --> 00:12:44.960
+manage and research session,
+
+00:12:48.460 --> 00:12:48.620
+tab groups. I already showed you this and
+
+00:12:49.240 --> 00:12:49.740
+browse all your links.
+
+00:12:54.780 --> 00:12:54.960
+I also showed you. So let's go over to how is
+
+00:12:57.340 --> 00:12:57.840
+it done. How is it done then?
+
+00:13:08.760 --> 00:13:08.940
+It should be quite apparent that somehow the
+
+00:13:11.660 --> 00:13:11.820
+browser has to sync its state to Emacs and
+
+00:13:13.680 --> 00:13:14.180
+Emacs has to know about the browser and
+
+00:13:15.660 --> 00:13:16.120
+there's like a bidirectional state
+
+00:13:17.560 --> 00:13:18.060
+synchronization going on here.
+
+00:13:21.480 --> 00:13:21.980
+And there's a browser side and an Emacs side.
+
+00:13:28.080 --> 00:13:28.580
+The browser side is a add-on,
+
+00:13:31.080 --> 00:13:31.580
+a web extension add-on.
+
+00:13:38.940 --> 00:13:39.380
+I first tried to use WebDriver by DIY.
+
+00:13:40.760 --> 00:13:41.040
+I don't know if you know it,
+
+00:13:43.440 --> 00:13:43.780
+you open a web socket and then you can talk
+
+00:13:47.460 --> 00:13:47.860
+to the browser, but It was so frustrating to
+
+00:13:50.440 --> 00:13:50.940
+actually get it to do what I wanted to do
+
+00:13:54.000 --> 00:13:54.280
+that I changed to the web extension and this
+
+00:13:55.580 --> 00:13:56.080
+wasn't that much better,
+
+00:13:58.520 --> 00:13:58.840
+but I finally had all the features I needed
+
+00:14:02.660 --> 00:14:02.780
+because WebDriver is like all in flux and you
+
+00:14:04.200 --> 00:14:04.540
+have to look at the Firefox bug tracker.
+
+00:14:05.860 --> 00:14:06.360
+Do they have implemented this already?
+
+00:14:09.900 --> 00:14:10.400
+And no, most often they don't.
+
+00:14:13.580 --> 00:14:13.940
+So now it's a web extension add-on and it
+
+00:14:16.280 --> 00:14:16.480
+just tells Emacs little facts about the
+
+00:14:20.060 --> 00:14:20.560
+browser. And for you to make,
+
+00:14:23.500 --> 00:14:23.720
+to, that this facts make more sense for you,
+
+00:14:27.180 --> 00:14:27.680
+I think I have to explain how the Emacs side
+
+00:14:31.560 --> 00:14:32.060
+of this works. So the Emacs side,
+
+00:14:37.160 --> 00:14:37.460
+at first I thought I make it quite simple and
+
+00:14:38.800 --> 00:14:39.300
+then I over engineered it.
+
+00:14:42.040 --> 00:14:42.540
+And now it's great, but also not finished.
+
+00:14:44.540 --> 00:14:45.040
+So the Emacs site is a database.
+
+00:14:52.580 --> 00:14:53.080
+It's a triple store or RDF database.
+
+00:14:57.800 --> 00:14:58.300
+It stores all information in triples.
+
+00:14:58.980 --> 00:14:59.480
+So you have a subject,
+
+00:15:04.280 --> 00:15:04.780
+subject, predicate, and an object.
+
+00:15:10.440 --> 00:15:10.940
+And you can query this database.
+
+00:15:14.920 --> 00:15:15.060
+For those of you who watched last year's talk
+
+00:15:19.740 --> 00:15:20.240
+of Andrew Hyatt about SQL in Emacs.
+
+00:15:23.100 --> 00:15:23.300
+He presented such a database if you want to
+
+00:15:24.960 --> 00:15:25.380
+have a closer look. And sorry,
+
+00:15:26.520 --> 00:15:27.020
+Andrew, I didn't use yours.
+
+00:15:29.540 --> 00:15:29.860
+I had to make my own. I'm not sure it's
+
+00:15:31.320 --> 00:15:31.820
+better, but it was fun.
+
+00:15:36.220 --> 00:15:36.720
+And it has some different design decisions.
+
+00:15:41.040 --> 00:15:41.200
+For those of you who don't know what's up
+
+00:15:42.440 --> 00:15:42.940
+with a database like this,
+
+00:15:47.020 --> 00:15:47.360
+maybe you know web apps like all this new Org
+
+00:15:51.960 --> 00:15:52.460
+Mode clones. How are they called?
+
+00:15:56.480 --> 00:15:56.820
+Obsidian, Roam, and so on and so on.
+
+00:15:58.260 --> 00:15:58.760
+All of these are possible because,
+
+00:16:01.300 --> 00:16:01.640
+I don't know if Obsidian too,
+
+00:16:04.360 --> 00:16:04.540
+but stuff like Roam is possible because they
+
+00:16:07.760 --> 00:16:08.000
+have a triple store in the browser and use
+
+00:16:10.520 --> 00:16:11.020
+this to power their knowledge base.
+
+00:16:14.280 --> 00:16:14.540
+And if you have had a look at Org Rome,
+
+00:16:17.160 --> 00:16:17.400
+you know it's uses a database too,
+
+00:16:19.340 --> 00:16:19.640
+because if this knowledge gets bigger,
+
+00:16:21.360 --> 00:16:21.860
+database is better to handle.
+
+00:16:27.860 --> 00:16:28.360
+And now here's a triplet store or a database
+
+00:16:31.920 --> 00:16:32.420
+to manage your browser session inside Emacs,
+
+00:16:34.240 --> 00:16:34.740
+but it's not limited to browser session.
+
+00:16:37.440 --> 00:16:37.940
+You could do nodes and stuff.
+
+00:16:40.900 --> 00:16:41.120
+I don't have a project for this,
+
+00:16:52.620 --> 00:16:53.120
+but you can look at this project from Andrew
+
+00:16:56.380 --> 00:16:56.880
+Hyatt. Has a pretty interesting notes
+
+00:16:59.620 --> 00:17:00.120
+project. So here is it in Emacs.
+
+00:17:03.960 --> 00:17:04.460
+There's the link. You can have a look.
+
+00:17:09.560 --> 00:17:10.060
+Okay. So now we have this database in Emacs.
+
+00:17:12.319 --> 00:17:12.440
+It's possible to do something like this in
+
+00:17:15.800 --> 00:17:16.300
+Emacs now because the database has Emacs
+
+00:17:21.220 --> 00:17:21.700
+SQLite integrated And the browser logs inside
+
+00:17:22.900 --> 00:17:23.359
+into this database via Emacs.
+
+00:17:26.579 --> 00:17:26.839
+It sends Emacs, it connects to Emacs via
+
+00:17:32.380 --> 00:17:32.580
+WebSocket. Emacs is a WebSocket server and
+
+00:17:35.580 --> 00:17:35.800
+then it sends little snippets like this
+
+00:17:46.420 --> 00:17:46.920
+window shows these tabs or this tab shows
+
+00:17:51.060 --> 00:17:51.300
+this URL And Emacs has triggers in this
+
+00:17:53.600 --> 00:17:53.760
+database. It can install Elisp triggers and
+
+00:17:58.420 --> 00:17:58.920
+the trigger powered the org mode frontend.
+
+00:18:06.040 --> 00:18:06.540
+Okay, so that's how it's done.
+
+00:18:08.780 --> 00:18:09.280
+It's not finished, but it does something.
+
+00:18:13.540 --> 00:18:13.820
+Now I want to do some closing remarks and
+
+00:18:14.440 --> 00:18:14.940
+maybe some more remarks.
+
+00:18:17.120 --> 00:18:17.400
+First off, an interesting concept I thought
+
+00:18:23.240 --> 00:18:23.680
+up while implementing this is cheesy garbage
+
+00:18:28.100 --> 00:18:28.580
+collect. For all you fans of dynamic
+
+00:18:31.000 --> 00:18:31.340
+languages, you know what garbage collect is.
+
+00:18:33.720 --> 00:18:34.220
+And Emacs users probably know it.
+
+00:18:38.060 --> 00:18:38.380
+Cleans up after you. You are using this Emacs
+
+00:18:40.280 --> 00:18:40.780
+and you are making lots of little objects and
+
+00:18:42.540 --> 00:18:42.920
+after some time Emacs says,
+
+00:18:45.260 --> 00:18:45.580
+okay, I'm doing some cleanup for you.
+
+00:18:46.260 --> 00:18:46.760
+That's garbage collect.
+
+00:18:49.040 --> 00:18:49.360
+And I thought why not have garbage collect
+
+00:18:52.000 --> 00:18:52.500
+for the browser? You're doing this browsing
+
+00:18:55.120 --> 00:18:55.320
+and opening all these tabs and after some
+
+00:18:58.020 --> 00:18:58.200
+time there are lots of tabs and someone has
+
+00:19:00.660 --> 00:19:01.160
+to close them. So there's the C programmers,
+
+00:19:03.160 --> 00:19:03.340
+they do all the closing themselves and
+
+00:19:03.960 --> 00:19:04.460
+they're really meticulous,
+
+00:19:06.060 --> 00:19:06.560
+but it takes some time.
+
+00:19:08.520 --> 00:19:09.020
+And there's like my style,
+
+00:19:12.880 --> 00:19:13.100
+I just let it collect stuff and after some
+
+00:19:16.220 --> 00:19:16.720
+time I close the browser and start a new 1.
+
+00:19:19.080 --> 00:19:19.280
+And now there's the garbage collect that
+
+00:19:20.800 --> 00:19:21.180
+says, let it collect the browser,
+
+00:19:22.640 --> 00:19:23.000
+let the browser collect and then garbage
+
+00:19:25.520 --> 00:19:25.960
+collect. Let's say every morning the browser
+
+00:19:28.140 --> 00:19:28.480
+closes, Emacs closes all the browser tabs,
+
+00:19:30.520 --> 00:19:30.860
+but it keeps the information And it keeps
+
+00:19:32.840 --> 00:19:33.340
+text. Maybe you said like a tag yesterday
+
+00:19:36.340 --> 00:19:36.840
+like reading. I want to read this.
+
+00:19:39.720 --> 00:19:39.960
+And next time and then after that it's in the
+
+00:19:42.720 --> 00:19:43.140
+reading list. So garbage collector
+
+00:19:45.020 --> 00:19:45.520
+compaction. However you want to know this.
+
+00:19:50.740 --> 00:19:51.240
+1 thing I thought of while doing this is
+
+00:19:57.380 --> 00:19:57.620
+also, oh my time's up,
+
+00:19:59.120 --> 00:19:59.620
+so we're almost at Q&A.
+
+00:20:04.120 --> 00:20:04.620
+1 last thing, this whole project or program
+
+00:20:06.360 --> 00:20:06.660
+works via the Emacs event loop.
+
+00:20:08.720 --> 00:20:08.880
+So there's a server listening for the
+
+00:20:11.840 --> 00:20:12.340
+browser, waiting for infos from it.
+
+00:20:16.320 --> 00:20:16.820
+It works quite fine. I wasn't sure how much
+
+00:20:20.940 --> 00:20:21.440
+performance it will cost the browser,
+
+00:20:23.120 --> 00:20:23.440
+Emacs, but it works fine.
+
+00:20:26.920 --> 00:20:27.240
+But I wonder what's the limits of Emacs event
+
+00:20:31.880 --> 00:20:32.280
+loop. Like, can I go on forever adding server
+
+00:20:34.440 --> 00:20:34.940
+stuff? How big a server can Emacs get?
+
+00:20:43.580 --> 00:20:44.080
+I don't know. So that's some open questions
+
+00:20:47.120 --> 00:20:47.620
+to ponder. With that, thank you for listening
+
+00:20:49.860 --> 00:20:50.360
+and for your interest.
+
+00:20:54.380 --> 00:20:54.640
+I'd be pretty delighted to take some
+
+00:20:57.740 --> 00:20:57.980
+questions now. Great! Well,
+
+00:20:58.680 --> 00:20:59.160
+thank you so much, Michael.
+
+00:21:01.280 --> 00:21:01.400
+Thanks for the talk. And also thanks for
+
+00:21:02.960 --> 00:21:03.460
+going a little more in depth at the end.
+
+00:21:05.800 --> 00:21:06.040
+Is that what the extra stuff that you wanted
+
+00:21:08.000 --> 00:21:08.500
+to mention? Is it what you've done just now?
+
+00:21:11.400 --> 00:21:11.900
+Sorry, I didn't understand your last,
+
+00:21:14.700 --> 00:21:14.860
+your question. When we were preparing for
+
+00:21:15.820 --> 00:21:16.320
+your presentation with Sliv,
+
+00:21:18.340 --> 00:21:18.420
+you told me that you wanted to go perhaps a
+
+00:21:20.380 --> 00:21:20.740
+little more in-depth into the garbage
+
+00:21:22.500 --> 00:21:22.640
+collection. Is it what you wanted to do or do
+
+00:21:24.080 --> 00:21:24.580
+you still have some more to tell us about?
+
+00:21:27.080 --> 00:21:27.580
+I could tell more in-depth.
+
+00:21:29.540 --> 00:21:30.040
+Yes, garbage collection is just an idea.
+
+00:21:35.740 --> 00:21:36.240
+It's maybe... I don't know.
+
+00:21:39.140 --> 00:21:39.480
+Are there questions? There are questions,
+
+00:21:41.720 --> 00:21:41.880
+that's why. We have about 13 minutes to
+
+00:21:43.380 --> 00:21:43.880
+answer as many questions as possible.
+
+00:21:46.960 --> 00:21:47.120
+By the way, Sorry for the people who were
+
+00:21:47.560 --> 00:21:48.040
+watching the presentation.
+
+00:21:49.040 --> 00:21:49.540
+There's been a little bit of manipulation
+
+00:21:51.820 --> 00:21:52.040
+trying to get all the screens in order,
+
+00:21:53.860 --> 00:21:54.360
+but it's because I've got a very shitty ping
+
+00:21:56.360 --> 00:21:56.600
+to the streaming server that we use
+
+00:21:59.380 --> 00:21:59.860
+currently. So everything is like composite
+
+00:22:00.360 --> 00:22:00.600
+everything, But don't worry,
+
+00:22:02.240 --> 00:22:02.440
+Michael, everything will be very clean once
+
+00:22:03.160 --> 00:22:03.660
+we publish it afterwards.
+
+00:22:05.140 --> 00:22:05.640
+So what I'm going to do...
+
+00:22:09.660 --> 00:22:10.160
+Sorry, could you repeat?
+
+00:22:13.020 --> 00:22:13.380
+So it was not at my end because my internet
+
+00:22:15.560 --> 00:22:16.060
+connection is not the best 1 either.
+
+00:22:17.800 --> 00:22:18.080
+No, absolutely not. Oh,
+
+00:22:19.640 --> 00:22:19.840
+by the way, this reminds me as I am
+
+00:22:20.740 --> 00:22:21.180
+compositing the windows,
+
+00:22:23.000 --> 00:22:23.300
+you might remember in the talk by Bob earlier
+
+00:22:25.380 --> 00:22:25.880
+today, I said, oh, there's a phone vibrating.
+
+00:22:28.680 --> 00:22:28.840
+I thought it was coming from the big blue
+
+00:22:30.600 --> 00:22:30.760
+button, like the room in which we are right
+
+00:22:32.960 --> 00:22:33.080
+now. And I wasn't hallucinating just to be
+
+00:22:34.440 --> 00:22:34.940
+clear. It's just that 1 of the co-organizers
+
+00:22:37.320 --> 00:22:37.820
+behind on mumble had their phone vibrating
+
+00:22:38.720 --> 00:22:39.160
+and I was very confused.
+
+00:22:41.440 --> 00:22:41.600
+Anyway that's for the Okay,
+
+00:22:42.440 --> 00:22:42.600
+so everything is set up now.
+
+00:22:43.280 --> 00:22:43.500
+So what I'm gonna do, Michael,
+
+00:22:44.760 --> 00:22:45.040
+I'm gonna... If you're okay with this,
+
+00:22:46.560 --> 00:22:46.960
+Can I read you the question from the pad and
+
+00:22:48.780 --> 00:22:48.960
+can you answer them? Yes,
+
+00:22:50.160 --> 00:22:50.660
+of course. I would love to.
+
+00:22:53.740 --> 00:22:53.940
+Okay, lovely. I'm going to try my best to
+
+00:22:56.380 --> 00:22:56.720
+display the questions on the stream.
+
+00:22:58.140 --> 00:22:58.440
+Give me just a second and in the meantime
+
+00:22:59.440 --> 00:22:59.940
+I'll read you the first 1.
+
+00:23:02.180 --> 00:23:02.680
+So, have you seen the next browser?
+
+00:23:05.020 --> 00:23:05.240
+It is the Emacs of web browsers and would
+
+00:23:07.540 --> 00:23:07.940
+probably be easier to work with as it matches
+
+00:23:08.900 --> 00:23:09.400
+a lot closer to Emacs.
+
+00:23:11.400 --> 00:23:11.640
+I think you can tag your browser tabs for
+
+00:23:16.880 --> 00:23:17.380
+example. I saw it, I never tried it.
+
+00:23:20.940 --> 00:23:21.360
+I think you can do all the stuff and I think
+
+00:23:23.620 --> 00:23:23.940
+it's pretty good idea to use it if you want
+
+00:23:26.480 --> 00:23:26.980
+because have a look at this.
+
+00:23:30.700 --> 00:23:31.200
+This lovely thing is JavaScript and it's the
+
+00:23:35.080 --> 00:23:35.320
+browser side. It was quite tricky to get
+
+00:23:40.180 --> 00:23:40.680
+working so maybe it's easier if you use Nixt
+
+00:23:47.460 --> 00:23:47.660
+but I like to use Firefox and yeah there has
+
+00:23:49.820 --> 00:23:50.000
+to be a solution for Firefox too,
+
+00:23:53.040 --> 00:23:53.480
+I think. So next question,
+
+00:23:55.900 --> 00:23:56.320
+please. Lovely. All right,
+
+00:23:59.480 --> 00:23:59.980
+so nice ideas. Needs a better name though,
+
+00:24:00.840 --> 00:24:01.280
+to attract people to it.
+
+00:24:02.920 --> 00:24:03.420
+What about Browsys or Webnote?
+
+00:24:08.400 --> 00:24:08.900
+Browsys spelled B-R-O-W-S-Y-S or Webnote?
+
+00:24:12.720 --> 00:24:13.220
+Clearer this 1. Webnote and Browsys?
+
+00:24:17.260 --> 00:24:18.300
+With a Y, yes. So instead of an IAY.
+
+00:24:21.140 --> 00:24:21.420
+Ah, okay. Yes, why not?
+
+00:24:25.240 --> 00:24:25.520
+I take note. The name is maybe a little bit
+
+00:24:28.020 --> 00:24:28.460
+confusing. It's the name of a spider.
+
+00:24:30.860 --> 00:24:31.160
+It's like a spider that does an orb web.
+
+00:24:31.920 --> 00:24:32.420
+I found it via Wikipedia.
+
+00:24:34.360 --> 00:24:34.480
+I just wanted to have like something with the
+
+00:24:37.640 --> 00:24:37.840
+web because it's weaving something and
+
+00:24:38.680 --> 00:24:39.180
+there's also the web involved.
+
+00:24:41.600 --> 00:24:41.980
+I'm not set on the name.
+
+00:24:44.640 --> 00:24:45.040
+I'm not even set on the project yet how it
+
+00:24:47.360 --> 00:24:47.520
+will turn out. So what you're seeing now is
+
+00:24:49.760 --> 00:24:49.940
+something else than what I imagined when I
+
+00:24:51.060 --> 00:24:51.560
+was planning this talk.
+
+00:24:54.880 --> 00:24:55.280
+Yeah. That's right. Keep an open mind.
+
+00:24:56.880 --> 00:24:57.140
+Next question. You know what I'm going to say
+
+00:24:58.900 --> 00:24:59.340
+about the marketing of project names?
+
+00:24:59.900 --> 00:25:00.400
+You know, they're not,
+
+00:25:01.640 --> 00:25:02.040
+they don't make sense and they're not popular
+
+00:25:02.880 --> 00:25:03.340
+until they actually are.
+
+00:25:06.040 --> 00:25:06.260
+Like what would have predestined maggots to
+
+00:25:07.680 --> 00:25:08.180
+work as a name? Perhaps nothing.
+
+00:25:10.940 --> 00:25:11.420
+I mean it felt close to magic or maggots
+
+00:25:12.540 --> 00:25:12.880
+depending on the people you ask.
+
+00:25:16.000 --> 00:25:16.160
+So you know maybe your name Pultis will be a
+
+00:25:18.160 --> 00:25:18.280
+household name give or take 6 months or a
+
+00:25:23.120 --> 00:25:23.260
+year? Yes, maybe. Because- All right,
+
+00:25:23.980 --> 00:25:24.340
+moving on to the next question.
+
+00:25:25.400 --> 00:25:25.900
+Oh, unless you wanna add something.
+
+00:25:28.740 --> 00:25:29.240
+To expand a little bit on this name,
+
+00:25:33.140 --> 00:25:33.640
+I'm not sure where it stops.
+
+00:25:35.460 --> 00:25:35.600
+Like, is it really, it's just about the
+
+00:25:37.740 --> 00:25:38.240
+browser, What I just built is something more?
+
+00:25:42.340 --> 00:25:42.580
+So I'm not sure if I should limit the name
+
+00:25:44.380 --> 00:25:44.880
+here. Okay, now let's go on.
+
+00:25:47.440 --> 00:25:47.700
+You know what? You know what they say about
+
+00:25:48.700 --> 00:25:49.180
+programming, there's only 1 fundamental
+
+00:25:50.720 --> 00:25:51.220
+problem, no sorry, 2 fundamental problems,
+
+00:25:53.400 --> 00:25:53.860
+garbage collection and naming things.
+
+00:25:55.200 --> 00:25:55.320
+So you're stuck in the second 1 and you
+
+00:25:56.200 --> 00:25:56.700
+mentioned the first 1 as well.
+
+00:25:59.580 --> 00:26:00.080
+Alright, moving on to the next question.
+
+00:26:01.860 --> 00:26:02.080
+Can you use browser extensions with this,
+
+00:26:03.700 --> 00:26:03.840
+for example uBlock, SponsorBlock or
+
+00:26:06.780 --> 00:26:07.120
+Darkreader? Yes, of course.
+
+00:26:09.020 --> 00:26:09.320
+I think someone was maybe a little bit
+
+00:26:11.140 --> 00:26:11.640
+confused that the browser is inside Emacs.
+
+00:26:14.540 --> 00:26:15.040
+This is something totally normal for us ex-WM
+
+00:26:18.040 --> 00:26:18.220
+users. It's like every program for me is
+
+00:26:21.040 --> 00:26:21.540
+inside Emacs. This is just a normal Firefox.
+
+00:26:24.320 --> 00:26:24.640
+It just doesn't have like the window
+
+00:26:26.580 --> 00:26:27.080
+decoration. So there's of course there's,
+
+00:26:31.360 --> 00:26:31.860
+no, This is the ad blocker.
+
+00:26:33.840 --> 00:26:34.340
+I don't know why it's not working here.
+
+00:26:38.560 --> 00:26:39.060
+But you can have all you have in Firefox.
+
+00:26:44.820 --> 00:26:44.920
+OK. OK, lovely. Are you ready to move on to
+
+00:26:45.920 --> 00:26:46.080
+the next question? Or do you want to add
+
+00:26:47.600 --> 00:26:48.100
+something else? Yes, next question please.
+
+00:26:51.100 --> 00:26:51.600
+All right. So are there any inherent security
+
+00:26:53.000 --> 00:26:53.500
+issues with this, like bidirectional
+
+00:26:55.640 --> 00:26:55.960
+synchronization? Sounds like a possible
+
+00:26:57.120 --> 00:26:57.620
+issue. How are they solved?
+
+00:27:00.660 --> 00:27:00.760
+Can a malicious website impact Emacs or the
+
+00:27:10.520 --> 00:27:11.020
+host system? No, the website has no intro.
+
+00:27:15.120 --> 00:27:15.620
+It can do little stuff.
+
+00:27:20.200 --> 00:27:20.700
+There's this, it's a web extension,
+
+00:27:22.880 --> 00:27:23.300
+it's a browser extension inside the browser
+
+00:27:24.800 --> 00:27:25.300
+and it has like a limited interface.
+
+00:27:27.440 --> 00:27:27.920
+It uses a web extension API,
+
+00:27:30.980 --> 00:27:31.480
+there's a tabs API, you can listen on tabs,
+
+00:27:33.820 --> 00:27:34.320
+here you can tabs, browser tabs,
+
+00:27:36.340 --> 00:27:36.820
+Please notify me if there's 1 created,
+
+00:27:37.600 --> 00:27:38.040
+updated, moved, detached,
+
+00:27:40.240 --> 00:27:40.520
+attached, removed. So the people I think
+
+00:27:44.020 --> 00:27:44.440
+working at Google Chrome put some thought
+
+00:27:49.540 --> 00:27:49.920
+into it and at least this part seems quite
+
+00:27:52.960 --> 00:27:53.300
+well designed. Okay, next question,
+
+00:27:56.880 --> 00:27:57.100
+please. All right. So when do you think
+
+00:27:57.880 --> 00:27:58.380
+you'll make a first release?
+
+00:28:00.220 --> 00:28:00.420
+I hate needing browser extensions and would
+
+00:28:01.680 --> 00:28:02.180
+love to control my tabs in Emacs.
+
+00:28:07.340 --> 00:28:07.540
+Yes, I don't know. I would like to do it
+
+00:28:09.400 --> 00:28:09.900
+soon, but I have stuff to do.
+
+00:28:13.260 --> 00:28:13.760
+This is not the simplest project.
+
+00:28:18.660 --> 00:28:19.020
+What I can tell you, I will put the code
+
+00:28:20.480 --> 00:28:20.980
+online in the next days,
+
+00:28:25.080 --> 00:28:25.360
+maybe even next week, because it's not
+
+00:28:27.980 --> 00:28:28.080
+pretty, but it's also not bad and there's a
+
+00:28:28.940 --> 00:28:29.440
+lot of stuff there already.
+
+00:28:32.120 --> 00:28:32.620
+And For those who don't mind looking at
+
+00:28:35.500 --> 00:28:36.000
+unfinished things for inspiration or maybe
+
+00:28:39.320 --> 00:28:39.820
+their own work, I want to put it online.
+
+00:28:43.620 --> 00:28:44.020
+And if it's released, I will do some bigger
+
+00:28:46.560 --> 00:28:46.860
+announcement. And if it's getting released,
+
+00:28:48.840 --> 00:28:49.040
+can you write it back in Emacs console or
+
+00:28:51.760 --> 00:28:51.940
+conf, of course? Well,
+
+00:28:53.440 --> 00:28:53.600
+no pressure. Next year you need to have it
+
+00:28:55.320 --> 00:28:55.580
+released and you'll need to give us a GitHub
+
+00:28:59.900 --> 00:29:00.060
+page. Alright, moving on to the next
+
+00:29:01.560 --> 00:29:01.880
+question. What happened to the Sway
+
+00:29:03.040 --> 00:29:03.540
+compositor you showed last year?
+
+00:29:06.720 --> 00:29:07.220
+Yeah, that's like, this is the perfect
+
+00:29:10.680 --> 00:29:11.180
+question for like after the last 1.
+
+00:29:12.600 --> 00:29:13.100
+It's also not finished.
+
+00:29:16.960 --> 00:29:17.120
+And it's also not finished Because while I
+
+00:29:19.160 --> 00:29:19.660
+did a tech demo like I did this time,
+
+00:29:20.740 --> 00:29:21.220
+I'm sorry it's not finished,
+
+00:29:23.480 --> 00:29:23.600
+but I don't have that big a need for it and
+
+00:29:25.080 --> 00:29:25.580
+it's a lot of work to get it finished.
+
+00:29:28.140 --> 00:29:28.640
+Because it's a similar architecture,
+
+00:29:31.940 --> 00:29:32.440
+like this different server clients
+
+00:29:35.640 --> 00:29:35.980
+architecture stuff and Emacs is still in the
+
+00:29:42.140 --> 00:29:42.640
+callback hell time as you call it.
+
+00:29:46.260 --> 00:29:46.440
+So it's not that easy to get it working and I
+
+00:29:49.540 --> 00:29:49.920
+don't have that much need for a valent window
+
+00:29:52.720 --> 00:29:52.920
+manager because the other 1 still works and
+
+00:29:54.520 --> 00:29:55.020
+there's more interesting stuff to do.
+
+00:29:58.020 --> 00:29:58.180
+But also I know it has a lot of potential if
+
+00:30:00.840 --> 00:30:01.000
+it works and if it is released And I know a
+
+00:30:02.320 --> 00:30:02.520
+lot of people are waiting for it,
+
+00:30:04.200 --> 00:30:04.700
+so I have it in the back of my mind.
+
+00:30:06.720 --> 00:30:07.220
+And if someone else feels compelled,
+
+00:30:10.460 --> 00:30:10.680
+please take a look at the code and do
+
+00:30:12.980 --> 00:30:13.340
+something. Yeah, whoever asked the question,
+
+00:30:14.120 --> 00:30:14.620
+this is your task now.
+
+00:30:17.580 --> 00:30:17.900
+All right, moving on to the last question.
+
+00:30:18.900 --> 00:30:19.140
+We have about 4 minutes left,
+
+00:30:20.160 --> 00:30:20.660
+so it looks like we are...
+
+00:30:22.660 --> 00:30:22.760
+By the way, Michael was worried that he
+
+00:30:24.200 --> 00:30:24.700
+wouldn't have many questions to answer,
+
+00:30:27.380 --> 00:30:27.560
+and I am very proud to say and to prove you
+
+00:30:29.540 --> 00:30:30.040
+wrong. All right, next question.
+
+00:30:31.920 --> 00:30:32.080
+Does the browser have to be Firefox for
+
+00:30:33.480 --> 00:30:33.980
+syncing or is there a choice there?
+
+00:30:39.020 --> 00:30:39.340
+I think it's not. There's a choice.
+
+00:30:42.180 --> 00:30:42.440
+You can use any browser who supports web
+
+00:30:43.940 --> 00:30:44.440
+extensions. I think it's like a standardized
+
+00:30:49.900 --> 00:30:50.080
+interface. You can use any browser who does
+
+00:30:52.440 --> 00:30:52.640
+it. Chrome does it. But they're moving to a
+
+00:30:55.260 --> 00:30:55.760
+new web extension API to block ad blockers.
+
+00:30:59.680 --> 00:31:00.040
+I don't know if that does any turmoil for my
+
+00:31:02.860 --> 00:31:03.360
+extension and I frankly don't care that much.
+
+00:31:05.680 --> 00:31:06.180
+All right, fair answer.
+
+00:31:09.960 --> 00:31:10.280
+I don't see anyone who's joined us on BBB,
+
+00:31:11.940 --> 00:31:12.080
+by the way, we're going to move on with the
+
+00:31:13.020 --> 00:31:13.480
+stream to the next talk.
+
+00:31:15.380 --> 00:31:15.660
+But if you've got any questions for Michael,
+
+00:31:17.320 --> 00:31:17.480
+Feel free to join on BBB and ask your
+
+00:31:19.280 --> 00:31:19.440
+questions. I've said before that people tend
+
+00:31:22.420 --> 00:31:22.860
+to be shy and only join when the stream goes
+
+00:31:25.900 --> 00:31:26.040
+to a next talk. But I like to remind those
+
+00:31:27.720 --> 00:31:27.880
+people, eventually those talks are going to
+
+00:31:28.280 --> 00:31:28.620
+be published. Obviously,
+
+00:31:30.480 --> 00:31:30.680
+we'll make sure that nothing private was
+
+00:31:31.720 --> 00:31:32.220
+divulged during these discussions.
+
+00:31:34.640 --> 00:31:34.760
+But, you know, it's, if you can muster up the
+
+00:31:35.580 --> 00:31:35.740
+courage to go on the scene,
+
+00:31:38.940 --> 00:31:39.160
+it's always nice to have people join and ask
+
+00:31:41.100 --> 00:31:41.400
+questions. Michael, we have about 3 minutes
+
+00:31:43.080 --> 00:31:43.580
+left. Do you have any last words on perhaps
+
+00:31:45.860 --> 00:31:46.240
+anything to add on what you've presented
+
+00:31:49.780 --> 00:31:50.160
+today? Yeah, I just thought about maybe I
+
+00:31:55.260 --> 00:31:55.760
+show something. But there's this portals.
+
+00:32:00.140 --> 00:32:00.380
+Another thing, if someone has some more
+
+00:32:02.540 --> 00:32:02.920
+names, I would be quite interested because
+
+00:32:03.900 --> 00:32:04.400
+naming stuff is difficult.
+
+00:32:11.600 --> 00:32:12.100
+And this defines the database.
+
+00:32:14.200 --> 00:32:14.700
+There's the database definition.
+
+00:32:16.440 --> 00:32:16.920
+I call the database thingy,
+
+00:32:19.600 --> 00:32:19.760
+it's called Sponti. So I don't know what
+
+00:32:20.840 --> 00:32:21.340
+you're thinking about this name.
+
+00:32:23.220 --> 00:32:23.720
+So I think I want to have a database,
+
+00:32:25.360 --> 00:32:25.860
+it's called, it's this database.
+
+00:32:28.360 --> 00:32:28.740
+And then I define the database and I define
+
+00:32:29.820 --> 00:32:30.060
+the subject predicate object.
+
+00:32:31.060 --> 00:32:31.560
+So I have a browser session,
+
+00:32:32.520 --> 00:32:33.020
+browser session has tabs,
+
+00:32:36.820 --> 00:32:37.320
+a tab has, it comes from another tab maybe,
+
+00:32:39.860 --> 00:32:40.360
+or it shows an URL. A window,
+
+00:32:42.180 --> 00:32:42.680
+a session can also have a window,
+
+00:32:44.600 --> 00:32:44.760
+a window shows tabs. And then you can
+
+00:32:46.120 --> 00:32:46.380
+annotate stuff. You can say,
+
+00:32:49.920 --> 00:32:50.100
+okay, I have a node or a URL and I can tag it
+
+00:32:51.600 --> 00:32:52.100
+with a title, date, tag,
+
+00:32:54.940 --> 00:32:55.440
+or with another node or with body text.
+
+00:32:58.640 --> 00:32:58.780
+And I have an environment that's like a
+
+00:33:01.420 --> 00:33:01.840
+machine, the PC that's running on or Emacs
+
+00:33:03.640 --> 00:33:03.840
+itself. And then you have stuff about the
+
+00:33:04.900 --> 00:33:05.280
+machine and you have a client,
+
+00:33:06.660 --> 00:33:07.160
+this is the process session actually.
+
+00:33:08.680 --> 00:33:09.180
+So maybe I should change this.
+
+00:33:17.680 --> 00:33:18.180
+Okay. And 1 last thing.
+
+00:33:20.020 --> 00:33:20.220
+I have something I wanted to show you,
+
+00:33:21.600 --> 00:33:22.100
+but it didn't finish in time.
+
+00:33:23.240 --> 00:33:23.480
+Okay, Michael, just to be clear,
+
+00:33:24.720 --> 00:33:25.220
+you've got only 1 minute left.
+
+00:33:27.880 --> 00:33:28.380
+Yes, it's not that difficult.
+
+00:33:30.140 --> 00:33:30.640
+I wanted to integrate highlight.
+
+00:33:32.300 --> 00:33:32.780
+You just go to a web page,
+
+00:33:35.660 --> 00:33:35.800
+highlight stuff, do a right click and then it
+
+00:33:39.320 --> 00:33:39.820
+says save to Emacs. And you saved it to Emacs
+
+00:33:42.500 --> 00:33:42.940
+and it's there inside the node.
+
+00:33:45.400 --> 00:33:45.900
+But no, this 1 is not finished yet.
+
+00:33:47.960 --> 00:33:48.240
+You could do it live but there's no time
+
+00:33:49.540 --> 00:33:50.040
+left. So thank you for watching.
+
+00:33:51.960 --> 00:33:52.180
+Yes, and thank you so much,
+
+00:33:54.000 --> 00:33:54.280
+Michael, for taking the time to present and
+
+00:33:54.960 --> 00:33:55.460
+to answer the questions.
+
+00:33:57.340 --> 00:33:57.540
+The stream is going to move to the next talk
+
+00:34:00.680 --> 00:34:01.080
+in about 45 seconds. It's a talk by Wasem
+
+00:34:02.680 --> 00:34:03.180
+Masa, which I'm very excited about.
+
+00:34:05.740 --> 00:34:06.240
+And other than that, Michael,
+
+00:34:08.239 --> 00:34:08.460
+I'm looking forward to seeing you again next
+
+00:34:10.760 --> 00:34:11.000
+year with new GitHub repositories to share
+
+00:34:12.500 --> 00:34:13.000
+with us. Right? No pressure.
+
+00:34:17.500 --> 00:34:17.900
+And on that note, I wish you a very good day
+
+00:34:19.400 --> 00:34:19.600
+and I'll see you next time,
+
+00:34:21.820 --> 00:34:22.199
+I suppose. Yes, of course.
+
+00:34:24.080 --> 00:34:24.580
+I would like to do it next time again.
+
+00:34:25.679 --> 00:34:26.179
+It's a lot of fun. All right.
+
+00:34:27.280 --> 00:34:27.780
+Okay. Bye-bye, Michael.
+
+00:34:33.580 --> 00:34:34.080
+Bye-bye and thanks. All right.
+
+00:34:35.540 --> 00:34:35.880
+I think, yes. Okay. We finished.
+
+00:34:36.460 --> 00:34:36.600
+So, thank you so much,
+
+00:34:38.199 --> 00:34:38.400
+Michael. I need to get ready for the next
+
+00:34:39.340 --> 00:34:39.840
+talk. So I'll see you later.
+
+00:34:40.920 --> 00:34:41.420
+I'll see you later, sorry.
+
+00:34:45.060 --> 00:34:45.560
+Yes, see you. Bye-bye.
+
+00:34:47.280 --> 00:34:47.560
+You are currently the only person in this
+
+00:34:47.560 --> 00:34:48.060
+conference.
diff --git a/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt
new file mode 100644
index 00000000..a61c9cd3
--- /dev/null
+++ b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt
@@ -0,0 +1,20 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:02:06.040
+Introduction
+
+00:02:06.040 --> 00:03:14.919
+Tip about completion frameworks
+
+00:03:14.920 --> 00:05:39.320
+References file overview
+
+00:05:39.320 --> 00:08:02.719
+The Emacs Lisp code
+
+00:08:02.720 --> 00:11:41.539
+Example reference to Elfeed article
+
+00:11:41.540 --> 00:15:04.320
+Searching the references
diff --git a/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt
new file mode 100644
index 00000000..f678c7ed
--- /dev/null
+++ b/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt
@@ -0,0 +1,808 @@
+WEBVTT captioned by bhavin192, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.940
+Hello, this is Christopher Howard,
+
+00:00:04.940 --> 00:00:06.520
+and welcome to my talk,
+
+00:00:06.520 --> 00:00:08.800
+"Informal Reference Tracking."
+
+00:00:08.800 --> 00:00:10.574
+This is a workflow talk,
+
+00:00:10.574 --> 00:00:12.240
+so I need to explain a little bit about
+
+00:00:12.240 --> 00:00:14.840
+what my needs were.
+
+00:00:14.840 --> 00:00:18.760
+I am not a professional scholar or academic,
+
+00:00:18.760 --> 00:00:20.200
+but there are a number of subjects
+
+00:00:20.200 --> 00:00:21.607
+that I'm interested in,
+
+00:00:21.607 --> 00:00:23.240
+and I occasionally like to write
+
+00:00:23.240 --> 00:00:25.600
+gemlog posts about them.
+
+00:00:25.600 --> 00:00:28.680
+So I needed some way to keep track of references.
+
+00:00:28.680 --> 00:00:32.960
+References to webpage articles, references to books,
+
+00:00:32.960 --> 00:00:37.280
+pages in books, and notes about them.
+
+00:00:37.280 --> 00:00:39.480
+Something that was searchable,
+
+00:00:39.480 --> 00:00:42.440
+but also something that was quick and easy to use,
+
+00:00:42.440 --> 00:00:45.200
+and something that I could set up quickly.
+
+00:00:45.200 --> 00:00:47.360
+And the approach I took, it only took me
+
+00:00:47.360 --> 00:00:49.520
+about an hour or two to figure out
+
+00:00:49.520 --> 00:00:52.160
+how to put it together.
+
+00:00:52.160 --> 00:00:53.840
+I do want to emphasize
+
+00:00:53.840 --> 00:00:56.520
+that there are better ways to do this.
+
+00:00:56.520 --> 00:00:58.960
+I'm not recommending you use my code
+
+00:00:58.960 --> 00:01:02.120
+or follow my exact approach.
+
+00:01:02.120 --> 00:01:05.940
+In particular, what I'm doing was meant to be done
+
+00:01:05.940 --> 00:01:09.240
+with Org's built-in capture
+
+00:01:09.240 --> 00:01:11.800
+and templates functionality,
+
+00:01:11.800 --> 00:01:14.907
+so that's something that's more flexible,
+
+00:01:14.907 --> 00:01:21.440
+programmable, and there's also a lot of add-ins
+
+00:01:21.440 --> 00:01:23.960
+that can be tied into that.
+
+00:01:23.960 --> 00:01:31.320
+For example, tools that allow you to search for,
+
+00:01:31.320 --> 00:01:34.480
+you know, feed in a URL, and it automatically
+
+00:01:34.480 --> 00:01:38.240
+pulls all the reference data for you.
+
+00:01:38.240 --> 00:01:39.760
+And there's tools out there
+
+00:01:39.760 --> 00:01:43.120
+that are really meant for scientific writing,
+
+00:01:43.120 --> 00:01:46.760
+so if you do this professionally,
+
+00:01:46.760 --> 00:01:49.960
+you may need to keep track of dozens of details
+
+00:01:49.960 --> 00:01:51.080
+for each reference
+
+00:01:51.080 --> 00:01:55.320
+and then have some fancy system to generate that
+
+00:01:55.320 --> 00:02:00.800
+into your, or output that into your paper.
+
+00:02:00.800 --> 00:02:02.440
+So there are better systems,
+
+00:02:02.440 --> 00:02:06.040
+but this is what worked for me and what was easy.
+
+NOTE Tip about completion frameworks
+
+00:02:06.040 --> 00:02:11.320
+I do want to emphasize that if you haven't,
+
+00:02:11.320 --> 00:02:14.640
+you really want to learn how to use helm-mode
+
+00:02:14.640 --> 00:02:20.440
+H-E-L-M, or one of the similar systems in Emacs
+
+00:02:20.440 --> 00:02:26.440
+that does fuzzy search on Emacs commands.
+
+00:02:26.440 --> 00:02:29.340
+For example, in Helm here,
+
+00:02:29.340 --> 00:02:39.007
+I input one keychord, and then I just have to remember
+
+00:02:39.007 --> 00:02:40.720
+a few characters of some command,
+
+00:02:40.720 --> 00:02:43.479
+and they don't even have to be right next to each other,
+
+00:02:43.480 --> 00:02:47.640
+like H-O-C will bring up `helm-occur`.
+
+00:02:47.640 --> 00:02:51.360
+That's based on its algorithms
+
+00:02:51.360 --> 00:02:53.000
+of what I most likely meant
+
+00:02:53.000 --> 00:02:55.160
+and the ones that I've used in the past.
+
+00:02:55.160 --> 00:02:57.920
+So it usually brings up the command that I want,
+
+00:02:57.920 --> 00:02:59.579
+or the one that I want
+
+00:02:59.580 --> 00:03:03.080
+is one or two spots away in the entry.
+
+00:03:03.080 --> 00:03:05.074
+That just saves me a lot of time
+
+00:03:05.074 --> 00:03:06.960
+[and] a lot of memorization.
+
+00:03:06.960 --> 00:03:09.120
+So if you haven't learned Helm
+
+00:03:09.120 --> 00:03:14.919
+or a similar system for Emacs, you really want to.
+
+NOTE References file overview
+
+00:03:14.920 --> 00:03:18.240
+So what is my approach?
+
+00:03:18.240 --> 00:03:24.880
+Well, basically, what it comes down to is really
+
+00:03:24.880 --> 00:03:27.307
+fundamentally nothing more than just a list
+
+00:03:27.307 --> 00:03:30.640
+of Org entries in a file.
+
+00:03:30.640 --> 00:03:35.579
+And there's one entry per reference.
+
+00:03:35.580 --> 00:03:37.207
+Fundamentally, that's all it is.
+
+00:03:37.207 --> 00:03:39.207
+But I'll go over the parts.
+
+00:03:39.207 --> 00:03:43.080
+You can see there's the title for the entry,
+
+00:03:43.080 --> 00:03:44.800
+and that's not necessarily
+
+00:03:44.800 --> 00:03:47.400
+the title of the book or the article,
+
+00:03:47.400 --> 00:03:50.840
+but that's my perspective on it,
+
+00:03:50.840 --> 00:03:52.720
+that's what I want to remember about it,
+
+00:03:52.720 --> 00:03:54.560
+and what I'll be looking for later
+
+00:03:54.560 --> 00:03:56.560
+when I do a search on my references.
+
+00:03:56.560 --> 00:04:06.659
+There's also in here the use of Org's tags
+
+00:04:06.660 --> 00:04:08.274
+here to the right of the title,
+
+00:04:08.274 --> 00:04:12.040
+very handy for searching for entries later.
+
+00:04:12.040 --> 00:04:18.160
+I use some Org properties attached to each entry.
+
+00:04:18.160 --> 00:04:21.740
+I automatically add in here an ID
+
+00:04:21.740 --> 00:04:24.074
+that can be useful if you want to
+
+00:04:24.074 --> 00:04:27.800
+link entries together later.
+
+00:04:27.800 --> 00:04:30.400
+I automatically add in here the date
+
+00:04:30.400 --> 00:04:31.840
+that the entry was created,
+
+00:04:31.840 --> 00:04:35.699
+which can be useful to me if things
+
+00:04:35.700 --> 00:04:38.360
+got sorted in a different order at some point,
+
+00:04:38.360 --> 00:04:39.940
+I could still look through
+
+00:04:39.940 --> 00:04:42.507
+the most recent entries that I had made
+
+00:04:42.507 --> 00:04:45.040
+if I wanted to do that for some reason.
+
+00:04:45.040 --> 00:04:48.640
+And sometimes I add in this publication year field
+
+00:04:48.640 --> 00:04:52.720
+with the idea that one day I might want to do
+
+00:04:52.720 --> 00:04:55.840
+a search for entries based on the publication year
+
+00:04:55.840 --> 00:04:57.360
+of the book or the article,
+
+00:04:57.360 --> 00:05:00.774
+say, only to use recent references
+
+00:05:00.774 --> 00:05:03.080
+or something like that.
+
+00:05:03.080 --> 00:05:05.360
+And then down here below the properties
+
+00:05:05.360 --> 00:05:10.080
+is where I paste in the URL to the webpage, or
+
+00:05:10.080 --> 00:05:13.007
+type in the title and author of the book
+
+00:05:13.007 --> 00:05:16.959
+on the pages, maybe the pages that were relevant,
+
+00:05:16.960 --> 00:05:21.640
+the pages of the periodical, or something like that.
+
+00:05:21.640 --> 00:05:23.920
+And I could put anything that I want down here,
+
+00:05:23.920 --> 00:05:25.840
+some other notes about what's important
+
+00:05:25.840 --> 00:05:29.939
+about this article to me.
+
+00:05:29.940 --> 00:05:32.200
+So fundamentally, that's all it is.
+
+00:05:32.200 --> 00:05:35.240
+Of course, I've added in a bit of convenience code
+
+00:05:35.240 --> 00:05:37.080
+to make this go a lot faster
+
+00:05:37.080 --> 00:05:39.320
+rather than typing all this out.
+
+NOTE The Emacs Lisp code
+
+00:05:39.320 --> 00:05:45.879
+For that, I'll switch back to my init.el file.
+
+00:05:45.880 --> 00:05:49.480
+There's really just five functions.
+
+00:05:49.480 --> 00:05:52.840
+The first two here are ones
+
+00:05:52.840 --> 00:05:54.560
+that I've adapted off the Internet.
+
+00:05:54.560 --> 00:05:56.160
+Honestly, I can't remember
+
+00:05:56.160 --> 00:05:58.239
+exactly where that I got them from,
+
+00:05:58.240 --> 00:06:00.240
+but basically, they're just some functions
+
+00:06:00.240 --> 00:06:04.240
+for making a block of text writable or readable.
+
+00:06:04.240 --> 00:06:09.299
+Writable or not writable, I should say.
+
+00:06:09.300 --> 00:06:12.200
+The idea there is that
+
+00:06:12.200 --> 00:06:13.480
+when I'm creating a new entry,
+
+00:06:13.480 --> 00:06:16.307
+I don't want to accidentally delete
+
+00:06:16.307 --> 00:06:18.960
+or write over some earlier entries that I've made.
+
+00:06:18.960 --> 00:06:24.880
+So I use a little bit of Emacs functionality for that.
+
+00:06:24.880 --> 00:06:29.440
+And then here are the three reference functions
+
+00:06:29.440 --> 00:06:32.440
+that I've actually written.
+
+00:06:32.440 --> 00:06:35.040
+Really trivial, basic stuff here.
+
+00:06:35.040 --> 00:06:41.800
+The core of it is the `new-reference` function.
+
+00:06:41.800 --> 00:06:44.840
+Basically, what that does is
+
+00:06:44.840 --> 00:06:47.560
+it opens up the references file,
+
+00:06:47.560 --> 00:06:52.040
+jumps to the end of the reference file,
+
+00:06:52.040 --> 00:06:57.440
+starts a new entry, inserts the asterisk.
+
+00:06:57.440 --> 00:07:01.520
+It jumps back to the previous text,
+
+00:07:01.520 --> 00:07:03.474
+and whatever previous text there is,
+
+00:07:03.474 --> 00:07:04.880
+it makes that read-only.
+
+00:07:04.880 --> 00:07:08.120
+Again, so that I don't accidentally delete that,
+
+00:07:08.120 --> 00:07:10.800
+or cut, or type over it, or something
+
+00:07:10.800 --> 00:07:14.579
+when I'm making a new reference.
+
+00:07:14.580 --> 00:07:17.680
+Then it goes back to the new reference,
+
+00:07:17.680 --> 00:07:21.339
+automatically adds in a unique ID for that,
+
+00:07:21.340 --> 00:07:25.360
+and then automatically stamps it with
+
+00:07:25.360 --> 00:07:28.999
+the date the entry was created — today's date.
+
+00:07:29.000 --> 00:07:32.760
+Now, I've got two other functions here.
+
+00:07:32.760 --> 00:07:34.540
+One is `view-references`,
+
+00:07:34.540 --> 00:07:37.807
+which does nothing but open up the reference file
+
+00:07:37.807 --> 00:07:39.400
+and switch to that buffer
+
+00:07:39.400 --> 00:07:42.539
+if you're not already on it.
+
+00:07:42.540 --> 00:07:45.880
+And then there's one other here, `edit-references`,
+
+00:07:45.880 --> 00:07:50.159
+which does the exact same thing except for
+
+00:07:50.160 --> 00:07:53.560
+it also goes over all the text in the buffer
+
+00:07:53.560 --> 00:07:55.040
+and makes it writable.
+
+00:07:55.040 --> 00:07:58.120
+So if I really do want to edit those other references,
+
+00:07:58.120 --> 00:08:02.719
+I've got a function to quickly make that possible.
+
+NOTE Example reference to Elfeed article
+
+00:08:02.720 --> 00:08:07.499
+Let me give an example of this.
+
+00:08:07.500 --> 00:08:13.979
+I type in here, new reference.
+
+00:08:13.980 --> 00:08:16.440
+Now I've jumped to the end of my references file.
+
+00:08:16.440 --> 00:08:19.080
+See, it's ready to take the title.
+
+00:08:19.080 --> 00:08:21.720
+Well, I guess I need to have something,
+
+00:08:21.720 --> 00:08:23.659
+some content, to put in here.
+
+00:08:23.660 --> 00:08:28.879
+Let's say I was looking through Elfeed,
+
+00:08:28.880 --> 00:08:31.600
+and let's say I found this interesting article
+
+00:08:31.600 --> 00:08:38.219
+about Mars earthquakes.
+
+00:08:38.220 --> 00:08:40.007
+Let's say I open it up [and]
+
+00:08:40.007 --> 00:08:41.159
+I read through the article.
+
+00:08:41.160 --> 00:08:43.840
+First, I'd figure out what it is
+
+00:08:43.840 --> 00:08:47.259
+that I find interesting about this, what it is that
+
+00:08:47.260 --> 00:08:51.579
+I'm going to want to remember and look up later.
+
+00:08:51.580 --> 00:08:57.479
+So I come up with a quick title based on that.
+
+00:08:57.480 --> 00:09:01.899
+Let's go back to the references with `view-reference`.
+
+00:09:01.900 --> 00:09:05.674
+And, let's just call it
+
+00:09:05.674 --> 00:09:13.879
+"Study of Mars Earthquake."
+
+00:09:13.880 --> 00:09:18.199
+Now I'm going to also want to put in some tags.
+
+00:09:18.200 --> 00:09:21.107
+On my system, that's done with
+
+00:09:21.107 --> 00:09:23.639
+Control C, Control Q (`C-c C-q`).
+
+00:09:23.640 --> 00:09:25.520
+And I can put in some tags.
+
+00:09:25.520 --> 00:09:29.160
+I like to go ahead and insert the colons.
+
+00:09:29.160 --> 00:09:30.799
+You can leave those out,
+
+00:09:30.800 --> 00:09:32.560
+but they're going to get added anyway,
+
+00:09:32.560 --> 00:09:36.779
+so I'm in the habit of using them.
+
+00:09:36.780 --> 00:09:41.120
+Let's say we'll call this 'Astronomy' as one tag,
+
+00:09:41.120 --> 00:09:47.059
+and the next tag could be 'Planets'.
+
+00:09:47.060 --> 00:09:48.400
+If I wanted to use a tag
+
+00:09:48.400 --> 00:09:50.400
+that was more than one word in the tag,
+
+00:09:50.400 --> 00:09:53.540
+I'd need to use underscores or something like that.
+
+00:09:53.540 --> 00:10:00.499
+If I wanted a tag that was 'Mars Earthquakes',
+
+00:10:00.500 --> 00:10:05.059
+I could do it like that, but that's kind of silly.
+
+00:10:05.060 --> 00:10:08.659
+Now I try not to be too clever with the tags.
+
+00:10:08.660 --> 00:10:10.600
+I don't spend a lot of time thinking about them.
+
+00:10:10.600 --> 00:10:13.107
+I just come up with some general buckets
+
+00:10:13.107 --> 00:10:15.019
+to throw things in.
+
+00:10:15.020 --> 00:10:16.880
+You can see the tags were added there,
+
+00:10:16.880 --> 00:10:19.379
+to the right of the title.
+
+00:10:19.380 --> 00:10:23.399
+Now you can see down here under PROPERTIES,
+
+00:10:23.400 --> 00:10:25.320
+the ID has already been added,
+
+00:10:25.320 --> 00:10:27.040
+the Date_Created has been added.
+
+00:10:27.040 --> 00:10:30.200
+Sometimes, I'll like to put in the publication year,
+
+00:10:30.200 --> 00:10:38.139
+and for that, I use the `org-set-property` command.
+
+00:10:38.140 --> 00:10:43.439
+Publication_Year, this year in this case.
+
+00:10:43.440 --> 00:10:46.679
+And then I just need to paste in the URL.
+
+00:10:46.680 --> 00:10:48.080
+I do that manually.
+
+00:10:48.080 --> 00:10:53.480
+I use Org's bracket format for that.
+
+00:10:53.480 --> 00:10:57.639
+So I start that, go back to the article,
+
+00:10:57.640 --> 00:11:02.099
+copy the URL, paste that in.
+
+00:11:02.100 --> 00:11:04.480
+If I want, I can add it in the title
+
+00:11:04.480 --> 00:11:07.459
+with the second pair of brackets here.
+
+00:11:07.460 --> 00:11:14.200
+Don't have to, but often like to.
+
+00:11:14.200 --> 00:11:18.560
+Close that off, and there it is.
+
+00:11:18.560 --> 00:11:20.879
+That was really it.
+
+00:11:20.880 --> 00:11:22.120
+I add a return on the end here,
+
+00:11:22.120 --> 00:11:26.619
+just so the next entry comes out with the right spacing.
+
+00:11:26.620 --> 00:11:28.307
+But really, that's it,
+
+00:11:28.307 --> 00:11:31.000
+and typically, when I'm not explaining it,
+
+00:11:31.000 --> 00:11:37.499
+that only takes 20 seconds or so, or 30 seconds.
+
+00:11:37.500 --> 00:11:41.539
+Pretty quick. Pretty easy.
+
+NOTE Searching the references
+
+00:11:41.540 --> 00:11:45.539
+What about searching later?
+
+00:11:45.540 --> 00:11:50.474
+Well, often the easiest thing is just do a simple,
+
+00:11:50.474 --> 00:11:54.639
+boring incremental search.
+
+00:11:54.640 --> 00:11:55.880
+I usually know roughly
+
+00:11:55.880 --> 00:11:58.499
+what it is that I'm looking for already.
+
+00:11:58.500 --> 00:12:02.379
+If I was looking for that wildflower article,
+
+00:12:02.380 --> 00:12:06.000
+I could just do an incremental search for wildflowers
+
+00:12:06.000 --> 00:12:07.920
+and jump through that. It's pretty simple.
+
+00:12:07.920 --> 00:12:13.200
+Not very impressive, but honestly, most of the time
+
+00:12:13.200 --> 00:12:16.439
+that gets me there pretty quick.
+
+00:12:16.440 --> 00:12:20.360
+Sometimes I find it useful to do an Occur search,
+
+00:12:20.360 --> 00:12:23.240
+more specifically a Helm Occur search.
+
+00:12:23.240 --> 00:12:31.259
+If I use the `helm-occur` command,
+
+00:12:31.260 --> 00:12:34.680
+then I like to use this to search by tag.
+
+00:12:34.680 --> 00:12:36.760
+That's where it really becomes handy.
+
+00:12:36.760 --> 00:12:39.207
+Let's say I want to narrow it down
+
+00:12:39.207 --> 00:12:42.640
+to all my astronomy references
+
+00:12:42.640 --> 00:12:50.039
+and then narrow it down a little bit more to planets.
+
+00:12:50.040 --> 00:12:54.119
+I can put spaces in between and it still works.
+
+00:12:54.120 --> 00:12:57.199
+You can see here in one window,
+
+00:12:57.200 --> 00:13:00.239
+it gives me the bottom window there.
+
+00:13:00.240 --> 00:13:03.479
+It's giving…, just because of the way
+
+00:13:03.480 --> 00:13:06.440
+the tags are formatted with the title, it gives me
+
+00:13:06.440 --> 00:13:09.519
+a list of all the titles that have those tags.
+
+00:13:09.520 --> 00:13:11.520
+And I usually find what I want pretty quick
+
+00:13:11.520 --> 00:13:13.400
+by just tapping through here.
+
+00:13:13.400 --> 00:13:16.499
+Once I find the one that I think I want,
+
+00:13:16.500 --> 00:13:24.139
+I press enter, and now I'm focused on just that entry.
+
+00:13:24.140 --> 00:13:26.960
+There is some advanced functionality, I believe,
+
+00:13:26.960 --> 00:13:29.960
+that I used in the past where you could search
+
+00:13:29.960 --> 00:13:33.119
+based on the property fields.
+
+00:13:33.120 --> 00:13:37.880
+So do something like search for publication —
+
+00:13:37.880 --> 00:13:42.439
+the most recent publications in the last 10 years.
+
+00:13:42.440 --> 00:13:46.200
+There's some kind of advanced syntax for that,
+
+00:13:46.200 --> 00:13:48.219
+which I used once or twice.
+
+00:13:48.220 --> 00:13:51.400
+Honestly, I use that so infrequently
+
+00:13:51.400 --> 00:13:54.840
+that I have to go back to the Emacs manual
+
+00:13:54.840 --> 00:13:57.739
+and figure it out each time, and figure out again
+
+00:13:57.740 --> 00:13:59.880
+how I did that the last time.
+
+00:13:59.880 --> 00:14:02.000
+But since I do it only once
+
+00:14:02.000 --> 00:14:06.679
+every three or four months, it's not a problem.
+
+00:14:06.680 --> 00:14:11.519
+So I'm not going to go over that today.
+
+00:14:11.520 --> 00:14:16.479
+That's pretty much it in a nutshell.
+
+00:14:16.480 --> 00:14:19.974
+Again, the code that I wrote, this specific approach
+
+00:14:19.974 --> 00:14:24.279
+is not really what I'm recommending.
+
+00:14:24.280 --> 00:14:31.160
+But here it is if you really do want to use it.
+
+00:14:31.160 --> 00:14:36.239
+Maybe I can make a link to the URL
+
+00:14:36.240 --> 00:14:40.059
+and share that in the chat room or something.
+
+00:14:40.060 --> 00:14:46.759
+But I consider this to be trivial code.
+
+00:14:46.760 --> 00:14:49.799
+So just use that if you want to use it.
+
+00:14:49.800 --> 00:14:53.440
+I should be signing off here now.
+
+00:14:53.440 --> 00:14:58.259
+I should be in the chat room, in the IRC chat room,
+
+00:14:58.260 --> 00:15:01.920
+or you can reach out to me by email if you'd like.
+
+00:15:01.920 --> 00:15:04.320
+Thank you very much.
diff --git a/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt
new file mode 100644
index 00000000..1179c72e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt
@@ -0,0 +1,44 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:21.560
+Intro
+
+00:00:21.560 --> 00:01:02.560
+Diagrams
+
+00:01:03.320 --> 00:02:51.360
+eev
+
+00:02:51.360 --> 00:08:52.560
+Another figure
+
+00:08:52.560 --> 00:10:44.240
+eev-wconfig, magic, and black boxes
+
+00:10:44.240 --> 00:16:10.960
+Lua
+
+00:16:10.960 --> 00:19:19.822
+Object orientation in Lua
+
+00:19:19.823 --> 00:20:31.000
+My init file
+
+00:20:31.000 --> 00:25:28.280
+LaTeX and LuaLaTeX
+
+00:25:28.280 --> 00:26:30.879
+Manim
+
+00:26:30.880 --> 00:31:03.240
+Generating diagrams from REPLs
+
+00:31:03.240 --> 00:39:03.200
+Parsers
+
+00:39:03.200 --> 00:50:04.160
+ELpeg1.lua
+
+00:50:04.160 --> 00:59:26.040
+Building lists
diff --git a/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..723fc45a
--- /dev/null
+++ b/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt
@@ -0,0 +1,3324 @@
+WEBVTT captioned by eduardo
+Kind: captions
+Language: en-GB
+
+NOTE Intro
+
+00:00:00.000 --> 00:00:03.079
+Hi! My name is Eduardo Ochs
+
+00:00:03.080 --> 00:00:05.519
+and the title of this talk is: REPLs
+
+00:00:05.520 --> 00:00:09.399
+in strange places - Lua, LateX, LPeg, LPegRex,
+
+00:00:09.400 --> 00:00:12.119
+and TikZ. I'm the author of an Emacs
+
+00:00:12.120 --> 00:00:14.879
+package called eev, and this is a talk
+
+00:00:14.880 --> 00:00:18.479
+at the EmacsConf 2023, that is happening in
+
+00:00:18.480 --> 00:00:22.519
+December 2023, at the internets.
+
+NOTE Diagrams
+
+00:00:22.520 --> 00:00:23.079
+This is one of the
+
+00:00:23.080 --> 00:00:24.919
+examples of diagrams that we are
+
+00:00:24.920 --> 00:00:27.639
+going to see - let me show how I generate
+
+00:00:27.640 --> 00:00:30.599
+it... one second,
+
+00:00:30.600 --> 00:00:35.799
+I have to use a smaller font here...
+
+00:00:35.800 --> 00:00:39.159
+this is a file called ParseTree2.lua...
+
+00:00:39.160 --> 00:00:42.919
+let me go back to this block of tests again...
+
+00:00:42.920 --> 00:00:43.879
+and now if I run
+
+00:00:43.880 --> 00:00:47.759
+this...
+
+00:00:47.760 --> 00:00:50.159
+we get these outputs here at the
+
+00:00:50.160 --> 00:00:53.959
+right, and then in this line here it
+
+00:00:53.960 --> 00:00:58.119
+generates a PDF, and if I type f8 here it
+
+00:00:58.120 --> 00:01:03.919
+shows the PDF in the lower right window.
+
+NOTE eev
+
+00:01:03.920 --> 00:01:06.079
+Let me start by explaining
+
+00:01:06.080 --> 00:01:09.839
+briefly what is eev.
+
+00:01:09.840 --> 00:01:12.239
+First: it is something that
+
+00:01:12.240 --> 00:01:14.759
+appeared by accident in the mid-90s - I
+
+00:01:14.760 --> 00:01:16.799
+explained this story in my
+
+00:01:16.800 --> 00:01:20.159
+presentation at the EmacsConf 2019...
+
+00:01:20.160 --> 00:01:23.159
+it's a package... it's an Emacs
+
+00:01:23.160 --> 00:01:26.519
+package that is part of ELPA... it has at
+
+00:01:26.520 --> 00:01:29.679
+least 10 users - those are the ones
+
+00:01:29.680 --> 00:01:32.559
+that I know by name...
+
+00:01:32.560 --> 00:01:38.439
+eev means `emacs-execute-verbosely'...
+
+00:01:38.440 --> 00:01:40.959
+eev is something that treats eval-last-sexp
+
+00:01:40.960 --> 00:01:43.999
+as the central feature of Emacs...
+
+00:01:44.000 --> 00:01:45.599
+eev blurs the distinction between
+
+00:01:45.600 --> 00:01:48.919
+programmers and users, and it replaces
+
+00:01:48.920 --> 00:01:51.679
+the slogan "users should not be forced to
+
+00:01:51.680 --> 00:01:53.679
+see Lisp", that is something that Richard
+
+00:01:53.680 --> 00:01:57.559
+Stallman told me once, by "users should see
+
+00:01:57.560 --> 00:02:00.479
+Lisp instead of buttons" and "new users
+
+00:02:00.480 --> 00:02:03.999
+should see Lisp in the first 5 minutes"...
+
+00:02:04.000 --> 00:02:05.279
+I'm going to show
+
+00:02:05.280 --> 00:02:08.959
+some examples of that soon.
+
+00:02:08.960 --> 00:02:11.959
+Eev uses code in comments a lot,
+
+00:02:11.960 --> 00:02:15.119
+and also tests in comments...
+
+00:02:15.120 --> 00:02:17.679
+I changed my way of presenting it
+
+00:02:17.680 --> 00:02:19.679
+and it became very REPL-centric
+
+00:02:19.680 --> 00:02:22.319
+in the last few years, in the
+
+00:02:22.320 --> 00:02:24.399
+sense that I start by explaining its
+
+00:02:24.400 --> 00:02:28.679
+main features by its support for REPLs...
+
+00:02:28.680 --> 00:02:31.079
+eev supposes
+
+00:02:31.080 --> 00:02:32.639
+that we want to keep
+
+00:02:32.640 --> 00:02:35.199
+executable notes of everything - I'm also
+
+00:02:35.200 --> 00:02:37.159
+going to show examples of this in a
+
+00:02:37.160 --> 00:02:40.479
+second... eev has lots of "videos for
+
+00:02:40.480 --> 00:02:43.559
+people who hate videos", and it tries to
+
+00:02:43.560 --> 00:02:46.159
+do everything with very little magic and
+
+00:02:46.160 --> 00:02:48.839
+without black boxes - I'm going to explain
+
+00:02:48.840 --> 00:02:50.319
+many of these things very soon.
+
+NOTE Another figure
+
+00:02:50.320 --> 00:02:52.799
+This is a figure that that I'm going
+
+00:02:52.800 --> 00:02:57.119
+to show in details soon, that is
+
+00:02:57.120 --> 00:02:59.959
+about something important about Lua...
+
+00:02:59.960 --> 00:03:03.959
+the font is very bad now, so let me
+
+00:03:03.960 --> 00:03:07.559
+change the font... the figure is this one...
+
+00:03:07.560 --> 00:03:08.239
+and...
+
+00:03:08.240 --> 00:03:12.519
+what most people do when they
+
+00:03:12.520 --> 00:03:14.479
+visit a file with something
+
+00:03:14.480 --> 00:03:16.479
+interesting on it is that they just go
+
+00:03:16.480 --> 00:03:18.679
+there and they set a bookmark there, or
+
+00:03:18.680 --> 00:03:21.959
+they put the position in a register...
+
+00:03:21.960 --> 00:03:26.959
+but I prefer to keep
+
+00:03:26.960 --> 00:03:29.199
+links to everything that is interesting
+
+00:03:29.200 --> 00:03:32.119
+as elisp hyperlinks. So, for example, this is
+
+00:03:32.120 --> 00:03:35.079
+an elisp hyperlink to a file, that goes
+
+00:03:35.080 --> 00:03:37.599
+to this anchor here, and to this string
+
+00:03:37.600 --> 00:03:41.439
+after this anchor... this is a variant
+
+00:03:41.440 --> 00:03:44.239
+that opens that file in the window
+
+00:03:44.240 --> 00:03:45.479
+at the right -
+
+00:03:45.480 --> 00:03:48.879
+here... and this is
+
+00:03:48.880 --> 00:03:53.279
+a sexp that changes the font. I
+
+00:03:53.280 --> 00:03:56.679
+have a command with a very short name
+
+00:03:56.680 --> 00:03:59.439
+that does that, but I
+
+00:03:59.440 --> 00:04:02.959
+prefer to keep that as a one-liner.
+
+00:04:02.960 --> 00:04:06.919
+About the videos... we can see
+
+00:04:06.920 --> 00:04:10.079
+the list of first-class videos of eev
+
+00:04:10.080 --> 00:04:14.759
+by executing this, M-x find-1stclassvideos,
+
+00:04:14.760 --> 00:04:18.639
+or by running this alias here, M-x 1c...
+
+00:04:18.640 --> 00:04:20.679
+and then what we see is this...
+
+00:04:20.680 --> 00:04:24.239
+the first sexp here
+
+00:04:24.240 --> 00:04:26.959
+regenerates this buffer - so we can make a
+
+00:04:26.960 --> 00:04:29.399
+mess here and then run this and the
+
+00:04:29.400 --> 00:04:33.519
+original buffer is regenerated again in
+
+00:04:33.520 --> 00:04:34.959
+a clean way...
+
+00:04:34.960 --> 00:04:36.919
+each of these things here
+
+00:04:36.920 --> 00:04:40.879
+opens a buffer with information about
+
+00:04:40.880 --> 00:04:43.999
+a video... let me take a specific
+
+00:04:44.000 --> 00:04:49.159
+example here... this video here is about
+
+00:04:49.160 --> 00:04:51.039
+one of the ancestors of this talk, that
+
+00:04:51.040 --> 00:04:53.479
+is a library that I wrote
+
+00:04:53.480 --> 00:04:58.479
+for creating diagrams in LaTeX using
+
+00:04:58.480 --> 00:05:03.519
+a package called Pict2e using REPLs...
+
+00:05:03.520 --> 00:05:03.959
+anyway...
+
+00:05:03.960 --> 00:05:06.599
+the thing is that if we
+
+00:05:06.600 --> 00:05:11.599
+run a sexp like this one and we don't
+
+00:05:11.600 --> 00:05:14.679
+have a local copy of the video eev
+
+00:05:14.680 --> 00:05:17.599
+will try to download to the local copy -
+
+00:05:17.600 --> 00:05:20.119
+and instead of doing that by asking
+
+00:05:20.120 --> 00:05:21.719
+something like "do you want me
+
+00:05:21.720 --> 00:05:23.999
+to download the local copy? Blah
+
+00:05:24.000 --> 00:05:27.999
+blah blah blah blah..." it simply opens a
+
+00:05:28.000 --> 00:05:30.719
+buffer like this, I mean, if we don't
+
+00:05:30.720 --> 00:05:33.359
+have a local copy yet it will open a
+
+00:05:33.360 --> 00:05:36.359
+buffer like this one, in which these
+
+00:05:36.360 --> 00:05:39.199
+things here in comments are links to the
+
+00:05:39.200 --> 00:05:43.839
+documentation... I mean, this thing here
+
+00:05:43.840 --> 00:05:46.159
+explains the idea of local copies
+
+00:05:46.160 --> 00:05:48.759
+of files from the internet...
+
+00:05:48.760 --> 00:05:54.759
+there are more details here, and here...
+
+00:05:54.760 --> 00:05:57.159
+and this is a script that we
+
+00:05:57.160 --> 00:06:00.519
+can execute line by line, so instead of
+
+00:06:00.520 --> 00:06:02.359
+this script being hidden behind the
+
+00:06:02.360 --> 00:06:06.119
+button that we just press after a
+
+00:06:06.120 --> 00:06:08.399
+question like "Do you want me to do
+
+00:06:08.400 --> 00:06:10.239
+something blah blah blah? Yes or no?"
+
+00:06:10.240 --> 00:06:13.639
+the script is visible here and we can
+
+00:06:13.640 --> 00:06:17.599
+execute it step by step... it creates a
+
+00:06:17.600 --> 00:06:20.799
+terminal with a shell here in the
+
+00:06:20.800 --> 00:06:24.799
+right window, and when we type f8 in
+
+00:06:24.800 --> 00:06:26.839
+one of these lines here the lines are
+
+00:06:26.840 --> 00:06:29.119
+sent... (...) so this is going
+
+00:06:29.120 --> 00:06:31.759
+to download a copy of the video... the
+
+00:06:31.760 --> 00:06:36.639
+wget says that I already have a copy of
+
+00:06:36.640 --> 00:06:39.479
+the video and its subtitles... and so on.
+
+00:06:39.480 --> 00:06:43.879
+And after getting a copy of the video
+
+00:06:43.880 --> 00:06:48.159
+we can run this sexp here and it displays
+
+00:06:48.160 --> 00:06:49.919
+the video.
+
+00:06:49.920 --> 00:06:55.399
+I said that eev has lots of
+
+00:06:55.400 --> 00:06:58.399
+"videos for people who hate videos", and
+
+00:06:58.400 --> 00:06:59.679
+the idea is that very few
+
+00:06:59.680 --> 00:07:02.039
+people are going to watch the videos in
+
+00:07:02.040 --> 00:07:06.559
+real time... and most of the people that
+
+00:07:06.560 --> 00:07:08.279
+I know - or: most of the people that
+
+00:07:08.280 --> 00:07:10.639
+are interested in eev in some
+
+00:07:10.640 --> 00:07:13.479
+way... they are going to watch just
+
+00:07:13.480 --> 00:07:16.319
+small sections of the video, and most of
+
+00:07:16.320 --> 00:07:17.559
+the time they're just going to read the
+
+00:07:17.560 --> 00:07:20.799
+subtitles of the video. So, for each
+
+00:07:20.800 --> 00:07:23.479
+one of the videos we have a page
+
+00:07:23.480 --> 00:07:27.039
+about the video... let me see if I
+
+00:07:27.040 --> 00:07:29.999
+have internet here... yes. This is a
+
+00:07:30.000 --> 00:07:32.879
+page...
+
+00:07:32.880 --> 00:07:38.999
+and usually these pages have a link
+
+00:07:39.000 --> 00:07:40.759
+to another page that
+
+00:07:40.760 --> 00:07:43.239
+has all the subtitles of the
+
+00:07:43.240 --> 00:07:46.639
+video... uh, wherever... in this one
+
+00:07:46.640 --> 00:07:48.319
+it's not so visible...
+
+00:07:48.320 --> 00:07:50.599
+but anyway, there are several
+
+00:07:50.600 --> 00:07:52.479
+ways of accessing the subtitles of the
+
+00:07:52.480 --> 00:07:56.239
+video, and one of the ways is by running
+
+00:07:56.240 --> 00:07:57.519
+this sexp here,
+
+00:07:57.520 --> 00:08:01.559
+that opens a file in Lua that is
+
+00:08:01.560 --> 00:08:03.319
+what I use to generate the
+
+00:08:03.320 --> 00:08:04.479
+subtitles.
+
+00:08:04.480 --> 00:08:08.519
+Anyway... by the way, these things... each
+
+00:08:08.520 --> 00:08:12.039
+one of these things here is a hyperlink
+
+00:08:12.040 --> 00:08:15.239
+to a position of the video, so if I type
+
+00:08:15.240 --> 00:08:18.879
+this the right way it goes to that
+
+00:08:18.880 --> 00:08:24.119
+position. Anyway, let me go back...
+
+00:08:24.120 --> 00:08:27.279
+also, the tutorials of eev... the
+
+00:08:27.280 --> 00:08:31.359
+"intros" of eev, that start with "find-" and
+
+00:08:31.360 --> 00:08:34.279
+end with "-intro", they have lots of blocks
+
+00:08:34.280 --> 00:08:39.039
+that say "[Video links:]", like this one, and
+
+00:08:39.040 --> 00:08:41.359
+these blocks have links to positions
+
+00:08:41.360 --> 00:08:43.879
+in videos, and if we don't have a local
+
+00:08:43.880 --> 00:08:47.919
+copy of the video yet the thing shows
+
+00:08:47.920 --> 00:08:49.799
+us a script that lets us download the
+
+00:08:49.800 --> 00:08:50.599
+local copy.
+
+00:08:50.600 --> 00:08:54.399
+Anyway, I said that I was going
+
+00:08:54.400 --> 00:08:58.759
+to explain what I mean by "magic" and
+
+00:08:58.760 --> 00:08:59.639
+"black boxes".
+
+00:08:59.640 --> 00:09:03.119
+this is something that I've been
+
+00:09:03.120 --> 00:09:05.119
+trying to explain for a long time, and I
+
+00:09:05.120 --> 00:09:07.319
+think that I got a very good explanation
+
+00:09:07.320 --> 00:09:09.839
+about that in a video that I made
+
+00:09:09.840 --> 00:09:13.199
+about something called eev-wconfig, that
+
+00:09:13.200 --> 00:09:14.999
+is a tool for configuring eev on
+
+00:09:15.000 --> 00:09:19.199
+Windows without "magic" - without buttons
+
+00:09:19.200 --> 00:09:22.479
+that do things without explaining what
+
+00:09:22.480 --> 00:09:22.879
+they're doing.
+
+00:09:22.880 --> 00:09:25.799
+This is a part of the subtitles
+
+00:09:25.800 --> 00:09:28.039
+of the video, let me read that...
+
+00:09:28.040 --> 00:09:32.319
+eev-wconfig is an attempt to solve the
+
+00:09:32.320 --> 00:09:35.039
+problem of how to install these things
+
+00:09:35.040 --> 00:09:37.279
+on Windows both without magic and with
+
+00:09:37.280 --> 00:09:37.879
+very little
+
+00:09:37.880 --> 00:09:41.679
+magic. Remember this slogan: "any
+
+00:09:41.680 --> 00:09:44.359
+sufficiently advanced technology is
+
+00:09:44.360 --> 00:09:45.399
+indistinguishable from
+
+00:09:45.400 --> 00:09:49.679
+magic". Here in this video I'm going to
+
+00:09:49.680 --> 00:09:52.199
+use the term magic as a shorthand
+
+00:09:52.200 --> 00:09:55.239
+for sufficiently advanced technology,
+
+00:09:55.240 --> 00:09:57.799
+that is something that is complex and
+
+00:09:57.800 --> 00:10:00.199
+non-obvious and that is
+
+00:10:00.200 --> 00:10:02.119
+indistinguishable from magic in the
+
+00:10:02.120 --> 00:10:04.119
+sense of being almost impossible to
+
+00:10:04.120 --> 00:10:07.439
+understand. And I'm also going to use a
+
+00:10:07.440 --> 00:10:10.279
+the term "black box" as a near-synonym for
+
+00:10:10.280 --> 00:10:13.079
+magic, and sometimes the term
+
+00:10:13.080 --> 00:10:16.039
+"black box" is more convenient even though
+
+00:10:16.040 --> 00:10:17.919
+it's a bit longer - it has more
+
+00:10:17.920 --> 00:10:20.159
+letters - because when I use the term
+
+00:10:20.160 --> 00:10:22.599
+black box it invites us to use
+
+00:10:22.600 --> 00:10:25.479
+expressions like "opening the black box",
+
+00:10:25.480 --> 00:10:26.639
+and I'm going to use that
+
+00:10:26.640 --> 00:10:28.039
+expression a lot.
+
+00:10:28.040 --> 00:10:37.399
+Now let me try to explain what is...
+
+00:10:37.400 --> 00:10:41.039
+sorry, let me change the font...
+
+00:10:41.040 --> 00:10:45.479
+what is Lua. Lua is a minimalistic
+
+00:10:45.480 --> 00:10:49.999
+language, in the sense of
+
+00:10:50.000 --> 00:10:53.679
+"batteries not included"... it uses
+
+00:10:53.680 --> 00:10:55.999
+associative tables for most of its data
+
+00:10:56.000 --> 00:10:56.799
+structures...
+
+00:10:56.800 --> 00:11:00.239
+and it is so minimalistic
+
+00:11:00.240 --> 00:11:03.999
+that its default print function, when
+
+00:11:04.000 --> 00:11:06.679
+we tell... when we create an associative
+
+00:11:06.680 --> 00:11:09.559
+table and we ask it to print...
+
+00:11:09.560 --> 00:11:13.319
+when we ask "print" to print an
+
+00:11:13.320 --> 00:11:15.719
+associative table it just prints the
+
+00:11:15.720 --> 00:11:17.879
+address of the table. Here are some
+
+00:11:17.880 --> 00:11:21.599
+examples... here is a table, and when we
+
+00:11:21.600 --> 00:11:24.679
+ask "print" to print it it just says
+
+00:11:24.680 --> 00:11:26.839
+that it's the table at this address here.
+
+00:11:26.840 --> 00:11:30.119
+So, one of things that that most
+
+00:11:30.120 --> 00:11:32.919
+people do when they start using Lua is
+
+00:11:32.920 --> 00:11:35.239
+that either they download a package with
+
+00:11:35.240 --> 00:11:37.079
+a pretty-printing function or they write
+
+00:11:37.080 --> 00:11:39.359
+their own pretty-printing functions. My
+
+00:11:39.360 --> 00:11:41.519
+own pretty-printing function is called
+
+00:11:41.520 --> 00:11:46.159
+PP, with upper case letters, and it works
+
+00:11:46.160 --> 00:11:47.679
+like this...
+
+00:11:47.680 --> 00:11:50.279
+and it prints associative tables
+
+00:11:50.280 --> 00:11:53.839
+in a way like this. It says that for
+
+00:11:53.840 --> 00:11:57.479
+the key 1 the the value associated to
+
+00:11:57.480 --> 00:12:00.039
+it is 2, for the key 2 the value is
+
+00:12:00.040 --> 00:12:04.959
+3, and for the key 3 the value is 5.
+
+00:12:04.960 --> 00:12:11.079
+When I started using Lua one of my
+
+00:12:11.080 --> 00:12:13.839
+favorite languages was also a language
+
+00:12:13.840 --> 00:12:15.639
+that used associative tables a lot -
+
+00:12:15.640 --> 00:12:16.839
+it was called Icon...
+
+00:12:16.840 --> 00:12:21.039
+and I had to write my own
+
+00:12:21.040 --> 00:12:23.839
+pretty-printing functions for Icon, so
+
+00:12:23.840 --> 00:12:27.319
+I just had to port my pretty-printing
+
+00:12:27.320 --> 00:12:29.719
+functions to Lua... and my first
+
+00:12:29.720 --> 00:12:32.239
+version looked at something like this... it
+
+00:12:32.240 --> 00:12:35.999
+just had some some global functions... lots
+
+00:12:36.000 --> 00:12:39.639
+of them, actually...
+
+00:12:39.640 --> 00:12:42.279
+and after a while I rewrote it, and I
+
+00:12:42.280 --> 00:12:44.599
+rewrote it again, and again, and again, and
+
+00:12:44.600 --> 00:12:47.279
+this is one of the versions of that,
+
+00:12:47.280 --> 00:12:49.879
+is not even the default at this
+
+00:12:49.880 --> 00:12:51.559
+point...
+
+00:12:51.560 --> 00:12:54.119
+"Tos" is for "to string"...
+
+00:12:54.120 --> 00:12:58.279
+and this is a demo...
+
+00:12:58.280 --> 00:13:01.919
+it's very modular, so it's easy to replace
+
+00:13:01.920 --> 00:13:05.639
+parts of it, or to toggle flags... and this
+
+00:13:05.640 --> 00:13:08.119
+is an example. If I try to print the
+
+00:13:08.120 --> 00:13:09.999
+table of methods for a certain
+
+00:13:10.000 --> 00:13:14.359
+class... I will need a smaller font...
+
+00:13:14.360 --> 00:13:16.799
+it prints the table like this, with the
+
+00:13:16.800 --> 00:13:20.039
+names of the methods and then links to
+
+00:13:20.040 --> 00:13:21.719
+the source code of the functions...
+
+00:13:21.720 --> 00:13:25.399
+these links only make sense in Emacs and
+
+00:13:25.400 --> 00:13:25.959
+in eev...
+
+00:13:25.960 --> 00:13:30.359
+and when we run a link like this one...
+
+00:13:30.360 --> 00:13:32.039
+it shows the source code in the
+
+00:13:32.040 --> 00:13:35.079
+window at the right. So, for some
+
+00:13:35.080 --> 00:13:37.879
+functions the source code is three lines,
+
+00:13:37.880 --> 00:13:39.999
+for other ones it's one line... and
+
+00:13:40.000 --> 00:13:44.879
+whatever. Anyway, let me go
+
+00:13:44.880 --> 00:13:47.039
+back... Lua can be used in many different
+
+00:13:47.040 --> 00:13:50.359
+styles... most people hate other people's
+
+00:13:50.360 --> 00:13:53.839
+styles... when I started using it in the
+
+00:13:53.840 --> 00:13:57.679
+year 2000 I learned most of the basic
+
+00:13:57.680 --> 00:13:59.839
+language in a single day - it was very
+
+00:13:59.840 --> 00:14:02.119
+similar to things that I was already
+
+00:14:02.120 --> 00:14:05.639
+using... and then I rewrote the the mini-
+
+00:14:05.640 --> 00:14:10.279
+language that I was using to
+
+00:14:10.280 --> 00:14:13.559
+generate the HTML for my pages
+
+00:14:13.560 --> 00:14:16.199
+in Lua... actually I had to rewrite it
+
+00:14:16.200 --> 00:14:18.079
+many times, but the first version I
+
+00:14:18.080 --> 00:14:21.519
+certainly did in my first weeks or first
+
+00:14:21.520 --> 00:14:22.519
+months using Lua...
+
+00:14:22.520 --> 00:14:27.279
+In the beginning I was just using
+
+00:14:27.280 --> 00:14:30.159
+it for writing programs that either
+
+00:14:30.160 --> 00:14:32.759
+didn't take any input at all - because
+
+00:14:32.760 --> 00:14:35.079
+the input was already in the source file -
+
+00:14:35.080 --> 00:14:40.599
+or that worked as Unix programs,
+
+00:14:40.600 --> 00:14:43.199
+that would read files
+
+00:14:43.200 --> 00:14:45.279
+and process these files in some way
+
+00:14:45.280 --> 00:14:48.999
+and output something.
+
+00:14:49.000 --> 00:14:52.319
+I mentioned the "basic language" here...
+
+00:14:52.320 --> 00:14:54.719
+I only learned how to use closures,
+
+00:14:54.720 --> 00:14:58.479
+metatables, and coroutines many years later...
+
+00:14:58.480 --> 00:15:02.399
+in the beginning, when I started using Lua,
+
+00:15:02.400 --> 00:15:04.199
+it didn't have a package manager...
+
+00:15:04.200 --> 00:15:06.799
+it appeared later, it is called
+
+00:15:06.800 --> 00:15:10.119
+Luarocks... it has had this package
+
+00:15:10.120 --> 00:15:13.279
+manager for several years, most
+
+00:15:13.280 --> 00:15:15.719
+of the rocks for Luarocks are poorly
+
+00:15:15.720 --> 00:15:18.959
+documented and hacker-unfriendly,
+
+00:15:18.960 --> 00:15:21.199
+so you can't rely just on the
+
+00:15:21.200 --> 00:15:23.679
+documentation and you can't rely just on the
+
+00:15:23.680 --> 00:15:26.719
+source code, because, I mean... if you are
+
+00:15:26.720 --> 00:15:29.159
+a genius of course you can, but for
+
+00:15:29.160 --> 00:15:31.479
+people who are either lazy, or dumb, or
+
+00:15:31.480 --> 00:15:34.279
+whatever, like me, or unfocused...
+
+00:15:34.280 --> 00:15:36.759
+the source code is hard to
+
+00:15:36.760 --> 00:15:38.959
+understand and hard to tinker with.
+
+00:15:38.960 --> 00:15:43.319
+Some rocks are excellent. The
+
+00:15:43.320 --> 00:15:46.599
+best rocks are well documented
+
+00:15:46.600 --> 00:15:48.719
+but they are hacker-unfriendly
+
+00:15:48.720 --> 00:15:50.999
+in a sense that I hope that
+
+00:15:51.000 --> 00:15:52.879
+I'll be able to explain soon.
+
+00:15:52.880 --> 00:15:54.999
+The best rocks use local
+
+00:15:55.000 --> 00:15:58.799
+variables and metatables a lot -
+
+00:15:58.800 --> 00:16:02.519
+so if you are beginner
+
+00:16:02.520 --> 00:16:03.799
+learning Lua you're not going to
+
+00:16:03.800 --> 00:16:06.159
+understand what their source code do...
+
+00:16:06.160 --> 00:16:08.519
+they use lots of dirty tricks.
+
+NOTE Object orientation in Lua
+
+00:16:08.520 --> 00:16:12.479
+Let me talk a bit about object
+
+00:16:12.480 --> 00:16:14.959
+orientation in Lua. It can be done in
+
+00:16:14.960 --> 00:16:15.879
+many ways...
+
+00:16:15.880 --> 00:16:18.999
+the main book about Lua, called
+
+00:16:19.000 --> 00:16:21.439
+"Programming in Lua", by one of the authors
+
+00:16:21.440 --> 00:16:23.959
+of the language, Roberto Ierusalimschy,
+
+00:16:23.960 --> 00:16:26.679
+presents several ways of doing
+
+00:16:26.680 --> 00:16:29.279
+object orientation in Lua... I hated all
+
+00:16:29.280 --> 00:16:33.199
+of these ways - and also the ways that I
+
+00:16:33.200 --> 00:16:34.519
+tried from the rocks.
+
+00:16:34.520 --> 00:16:38.559
+And then I wrote my own way
+
+00:16:38.560 --> 00:16:40.639
+of doing object orientation in Lua... it's
+
+00:16:40.640 --> 00:16:43.559
+very minimalistic, it's in this file here,
+
+00:16:43.560 --> 00:16:48.679
+eoo.lua... the main code is just this five
+
+00:16:48.680 --> 00:16:49.639
+lines here...
+
+00:16:49.640 --> 00:16:53.439
+and here's an example of how it works.
+
+00:16:53.440 --> 00:16:58.439
+Here we define the class Vector,
+
+00:16:58.440 --> 00:17:02.719
+with some metamethods...
+
+00:17:02.720 --> 00:17:05.959
+this metamethod here will tell Lua
+
+00:17:05.960 --> 00:17:08.319
+what to do when the
+
+00:17:08.320 --> 00:17:12.639
+user asks to add two vectors, this one
+
+00:17:12.640 --> 00:17:15.919
+here tells Lua what to do when the user
+
+00:17:15.920 --> 00:17:18.479
+asks Lua to convert a vector to a string,
+
+00:17:18.480 --> 00:17:21.439
+and... whatever, this one is
+
+00:17:21.440 --> 00:17:24.039
+something that I'm going to explain in a
+
+00:17:24.040 --> 00:17:27.479
+second. So, here we create a vector with
+
+00:17:27.480 --> 00:17:30.279
+these coordinates, 3 and 4... here we create
+
+00:17:30.280 --> 00:17:33.319
+another Vector... if we "print" here then Lua
+
+00:17:33.320 --> 00:17:36.439
+uses this function here, in the __tostring...
+
+00:17:36.440 --> 00:17:39.759
+if we add the two vectors it uses this
+
+00:17:39.760 --> 00:17:43.479
+function here, in the __add metamethod, and
+
+00:17:43.480 --> 00:17:45.359
+if we run the method :norm...
+
+00:17:45.360 --> 00:17:49.959
+it is defined here, in the table __index.
+
+00:17:49.960 --> 00:17:57.999
+Anyway...
+
+00:17:58.000 --> 00:18:02.439
+Even this thing being so small I used
+
+00:18:02.440 --> 00:18:04.719
+to forget how its innards worked all
+
+00:18:04.720 --> 00:18:08.119
+the time. Actually I always forget how
+
+00:18:08.120 --> 00:18:09.759
+things work and I have to remember them
+
+00:18:09.760 --> 00:18:12.479
+somehow... and I have to have
+
+00:18:12.480 --> 00:18:15.959
+tricks for remembering, and tricks for
+
+00:18:15.960 --> 00:18:18.719
+summarizing things, and diagrams, and so
+
+00:18:18.720 --> 00:18:22.199
+on. And every time that I forgot how this
+
+00:18:22.200 --> 00:18:24.799
+thing worked I went back to the
+
+00:18:24.800 --> 00:18:26.879
+source code, and then I looked at the
+
+00:18:26.880 --> 00:18:29.039
+diagrams... or, of course, in the
+
+00:18:29.040 --> 00:18:31.719
+first times I had to draw the diagrams...
+
+00:18:31.720 --> 00:18:35.239
+and I run the examples, and of course in
+
+00:18:35.240 --> 00:18:36.479
+in the beginning I thought that the code
+
+00:18:36.480 --> 00:18:39.119
+was clear and my examples were very
+
+00:18:39.120 --> 00:18:41.559
+brief, and so I had to rewrite the
+
+00:18:41.560 --> 00:18:44.719
+examples many times until they became,
+
+00:18:44.720 --> 00:18:45.639
+let's say...
+
+00:18:45.640 --> 00:18:47.759
+perfect.
+
+00:18:47.760 --> 00:18:52.599
+I was saying that Lua can be used in
+
+00:18:52.600 --> 00:18:56.359
+many ways, and in my way of using Lua - in
+
+00:18:56.360 --> 00:18:59.439
+my favorite way - everything can be
+
+00:18:59.440 --> 00:19:02.159
+inspected and modified from REPLs,
+
+00:19:02.160 --> 00:19:06.319
+like we can do in Emacs and in SmallTalk,
+
+00:19:06.320 --> 00:19:08.519
+or sort of. So, in my
+
+00:19:08.520 --> 00:19:10.239
+favorite way of using Lua there's no
+
+00:19:10.240 --> 00:19:12.679
+security at all, everything can be
+
+00:19:12.680 --> 00:19:14.919
+changed at all times.
+
+00:19:14.920 --> 00:19:19.119
+Of course most people hate that...
+
+NOTE My init file
+
+00:19:19.120 --> 00:19:22.599
+My init file has lots of classes... by the
+
+00:19:22.600 --> 00:19:26.079
+way, instead of keeping many small files
+
+00:19:26.080 --> 00:19:29.639
+with many things I put lots of stuff
+
+00:19:29.640 --> 00:19:31.279
+in just one big init file.
+
+00:19:31.280 --> 00:19:34.599
+My init file has lots of classes,
+
+00:19:34.600 --> 00:19:37.959
+and lots of global functions, and
+
+00:19:37.960 --> 00:19:41.799
+lots of cruft - and people hate that,
+
+00:19:41.800 --> 00:19:44.559
+of course. This is an example...
+
+00:19:44.560 --> 00:19:46.439
+this is the index at the top
+
+00:19:46.440 --> 00:19:48.359
+of my init file,
+
+00:19:48.360 --> 00:19:53.119
+the classes start here, and then
+
+00:19:53.120 --> 00:19:59.119
+we have some functions, and
+
+00:19:59.120 --> 00:20:01.199
+then we have functions that load
+
+00:20:01.200 --> 00:20:03.839
+certain packages, and then we have... cruft.
+
+00:20:03.840 --> 00:20:04.919
+Whatever.
+
+00:20:04.920 --> 00:20:08.119
+Most people think that my style
+
+00:20:08.120 --> 00:20:10.279
+of using Lua is dirty, and dangerous...
+
+00:20:10.280 --> 00:20:12.959
+and they wouldn't touch my Lua code
+
+00:20:12.960 --> 00:20:15.479
+with a 10 feet pole... but most of the
+
+00:20:15.480 --> 00:20:18.599
+things that I'm going to present here in
+
+00:20:18.600 --> 00:20:23.199
+this presentation are ideas that should
+
+00:20:23.200 --> 00:20:28.159
+be easy to port to other environments
+
+00:20:28.160 --> 00:20:32.279
+and other languages, especially the
+
+00:20:32.280 --> 00:20:35.279
+diagrams... so the code is not so important.
+
+NOTE LaTeX and LuaLaTeX
+
+00:20:35.280 --> 00:20:39.039
+Now let me talk a bit about LuaLaTeX,
+
+00:20:39.040 --> 00:20:41.359
+that is LaTeX with a Lua interpreter
+
+00:20:41.360 --> 00:20:44.559
+embedded inside, and two ways
+
+00:20:44.560 --> 00:20:48.839
+of generating pictures in LaTeX: TikZ,
+
+00:20:48.840 --> 00:20:54.439
+that is very famous, and Pict2e, that is not
+
+00:20:54.440 --> 00:20:57.359
+very famous and that is very low level...
+
+00:20:57.360 --> 00:21:02.359
+and I think that not many people use it.
+
+00:21:02.360 --> 00:21:04.119
+I said before that when I
+
+00:21:04.120 --> 00:21:06.919
+learned Lua I realized that it was
+
+00:21:06.920 --> 00:21:09.199
+very good for writing little
+
+00:21:09.200 --> 00:21:14.919
+languages. I was doing my PhD at the
+
+00:21:14.920 --> 00:21:19.839
+time and typesetting the diagrams for
+
+00:21:19.840 --> 00:21:24.039
+my PhD thesis was very boring, so
+
+00:21:24.040 --> 00:21:29.879
+one of the things that I did was that I
+
+00:21:29.880 --> 00:21:34.439
+created a little language for typesetting
+
+00:21:34.440 --> 00:21:36.359
+the diagrams for me. it was
+
+00:21:36.360 --> 00:21:38.879
+called Dednat because initially
+
+00:21:38.880 --> 00:21:41.039
+it only generated diagrams for
+
+00:21:41.040 --> 00:21:43.759
+Natural Deduction, and then it had
+
+00:21:43.760 --> 00:21:45.119
+several versions...
+
+00:21:45.120 --> 00:21:46.679
+these are the slides for my
+
+00:21:46.680 --> 00:21:52.159
+presentation about Dednat6... "Dednat6 is
+
+00:21:52.160 --> 00:21:56.159
+an extensible semi-preprocessor for
+
+00:21:56.160 --> 00:22:01.159
+LuaLaTeX that understands diagrams in
+
+00:22:01.160 --> 00:22:05.359
+ASCII art"... in the sense that when I have
+
+00:22:05.360 --> 00:22:11.399
+a .tex file that has this, and when
+
+00:22:11.400 --> 00:22:13.279
+Dednat6 is loaded,
+
+00:22:13.280 --> 00:22:15.039
+when I give the right commands
+
+00:22:15.040 --> 00:22:19.559
+Dednat6 interprets this block here as
+
+00:22:19.560 --> 00:22:22.559
+something that defines this
+
+00:22:22.560 --> 00:22:28.239
+diagram... oops, sorry, it interprets this
+
+00:22:28.240 --> 00:22:30.599
+diagram here, this diagram in
+
+00:22:30.600 --> 00:22:34.879
+comments here, as something that defines
+
+00:22:34.880 --> 00:22:39.759
+a diagram called foo... a deduction called
+
+00:22:39.760 --> 00:22:41.439
+foo, and it generates this code here...
+
+00:22:41.440 --> 00:22:44.239
+so that we can just invoke
+
+00:22:44.240 --> 00:22:45.519
+the definition of the
+
+00:22:45.520 --> 00:22:47.719
+deduction by typing \ded{foo}.
+
+00:22:47.720 --> 00:22:50.759
+And Dednat6 also
+
+00:22:50.760 --> 00:22:57.159
+supports another language for typesetting
+
+00:22:57.160 --> 00:22:59.639
+bidimensional diagrams with
+
+00:22:59.640 --> 00:23:05.399
+arrows and stuff for category Theory and
+
+00:23:05.400 --> 00:23:08.519
+blah blah blah... the specifications of
+
+00:23:08.520 --> 00:23:12.039
+these diagrams look like this...
+
+00:23:12.040 --> 00:23:14.559
+here is a... sorry, here is a very good
+
+00:23:14.560 --> 00:23:16.719
+example, this is a huge diagram...
+
+00:23:16.720 --> 00:23:18.599
+sorry, one second...
+
+00:23:18.600 --> 00:23:20.399
+so, the source code that generates
+
+00:23:20.400 --> 00:23:25.119
+this diagram here is just this thing at
+
+00:23:25.120 --> 00:23:32.039
+the left, so it's very visual... we can
+
+00:23:32.040 --> 00:23:35.679
+typeset the diagram in ASCII art here and
+
+00:23:35.680 --> 00:23:38.759
+then in this part here we tell how
+
+00:23:38.760 --> 00:23:41.279
+the nodes are to be joined, which
+
+00:23:41.280 --> 00:23:43.799
+arrows have to to have annotations, and
+
+00:23:43.800 --> 00:23:45.039
+so on...
+
+00:23:45.040 --> 00:23:46.799
+and this language is extensible in
+
+00:23:46.800 --> 00:23:48.679
+the sense that... uh, where's that...
+
+00:23:48.680 --> 00:23:52.559
+here: comments that start with "%:"
+
+00:23:52.560 --> 00:23:54.119
+are interpreted as
+
+00:23:54.120 --> 00:23:56.079
+definitions for tree diagrams,
+
+00:23:56.080 --> 00:23:58.559
+lines that start with "%D"
+
+00:23:58.560 --> 00:24:00.639
+define 2D diagrams with arrows and
+
+00:24:00.640 --> 00:24:04.279
+stuff, and lines that start with "%L"
+
+00:24:04.280 --> 00:24:06.759
+contain blocks of Lua code
+
+00:24:06.760 --> 00:24:09.479
+that we can use to extend the interpreter
+
+00:24:09.480 --> 00:24:10.439
+on-the-fly...
+
+00:24:10.440 --> 00:24:12.679
+anyway, here are some recent
+
+00:24:12.680 --> 00:24:15.319
+examples of diagrams that I used
+
+00:24:15.320 --> 00:24:19.839
+Dednat6 to typeset... this diagram
+
+00:24:19.840 --> 00:24:21.919
+here was generated by this
+
+00:24:21.920 --> 00:24:22.879
+specification here...
+
+00:24:22.880 --> 00:24:27.239
+and this diagram here with the
+
+00:24:27.240 --> 00:24:30.719
+curved arrows was generated by this
+
+00:24:30.720 --> 00:24:32.719
+specification here.
+
+00:24:32.720 --> 00:24:39.079
+So, Dednat6 was very easy to extend,
+
+00:24:39.080 --> 00:24:41.879
+and at some point I started to use it
+
+00:24:41.880 --> 00:24:44.679
+to generate diagrams using Pict2e -
+
+00:24:44.680 --> 00:24:47.359
+mainly for the classes that I give
+
+00:24:47.360 --> 00:24:50.079
+at the University... I teach mathematics and
+
+00:24:50.080 --> 00:24:57.239
+whatever... in a bad place. Whatever...
+
+00:24:57.240 --> 00:25:00.039
+Let me show an animation... here is a
+
+00:25:00.040 --> 00:25:02.479
+diagram that I generated with Dednat6,
+
+00:25:02.480 --> 00:25:06.319
+and it is a flip book animation, like... we
+
+00:25:06.320 --> 00:25:09.279
+type PgUp and PgDn and we go
+
+00:25:09.280 --> 00:25:11.119
+to the next page of the book and to the
+
+00:25:11.120 --> 00:25:12.439
+previous page of the book...
+
+00:25:12.440 --> 00:25:16.279
+and here is the source code that generates
+
+00:25:16.280 --> 00:25:19.159
+that. This source code is not very visual,
+
+00:25:19.160 --> 00:25:22.559
+so it's quite clumsy to edit that
+
+00:25:22.560 --> 00:25:27.519
+diagram directly in the .tex file like
+
+00:25:27.520 --> 00:25:28.079
+that...
+
+NOTE Manim
+
+00:25:28.080 --> 00:25:30.199
+These diagrams were inspired
+
+00:25:30.200 --> 00:25:33.039
+by something called my Manim, that...
+
+00:25:33.040 --> 00:25:37.559
+I forgot the name of the guy, but
+
+00:25:37.560 --> 00:25:41.479
+it's a guy that makes many videos about
+
+00:25:41.480 --> 00:25:44.839
+Mathematics, and he created this library
+
+00:25:44.840 --> 00:25:48.599
+called Manim for generating his
+
+00:25:48.600 --> 00:25:51.839
+animations, and other people adapted
+
+00:25:51.840 --> 00:25:55.919
+his library to make it more accessible...
+
+00:25:55.920 --> 00:25:59.359
+I tried to learn it, but
+
+00:25:59.360 --> 00:26:01.199
+each animation, even an animation
+
+00:26:01.200 --> 00:26:03.679
+that has very few frames... each
+
+00:26:03.680 --> 00:26:07.319
+animation took ages to render, so it
+
+00:26:07.320 --> 00:26:11.159
+wasn't fun... and animations in PDFs can
+
+00:26:11.160 --> 00:26:13.639
+be rendered in seconds. So these
+
+00:26:13.640 --> 00:26:18.679
+things were fun for me, because my laptop
+
+00:26:18.680 --> 00:26:24.359
+is very very slow, and my Manim was not fun.
+
+NOTE Generating diagrams from REPLs
+
+00:26:24.360 --> 00:26:27.359
+Anyway, writing code like this
+
+00:26:27.360 --> 00:26:32.719
+inside a .tex file was not very
+
+00:26:32.720 --> 00:26:35.519
+fun because it was hard to
+
+00:26:35.520 --> 00:26:38.719
+debug... so in 2022 I started to play
+
+00:26:38.720 --> 00:26:41.319
+with ways of generating these
+
+00:26:41.320 --> 00:26:43.839
+diagrams from REPLs, and I found a
+
+00:26:43.840 --> 00:26:47.319
+way for Pict2e and a way for TikZ...
+
+00:26:47.320 --> 00:26:50.159
+each one of these ways became a video...
+
+00:26:50.160 --> 00:26:53.679
+if you go to the list of first-class
+
+00:26:53.680 --> 00:26:57.719
+videos of eev you're going to see
+
+00:26:57.720 --> 00:26:59.919
+that there's a video about Pict2e here
+
+00:26:59.920 --> 00:27:03.399
+here and a video about TikZ...
+
+00:27:03.400 --> 00:27:05.759
+here you have some some information
+
+00:27:05.760 --> 00:27:09.839
+like length, an explanation, etc...
+
+00:27:09.840 --> 00:27:11.719
+and here are the pages for these videos.
+
+00:27:11.720 --> 00:27:15.999
+My page about the video about Pict2e
+
+00:27:16.000 --> 00:27:20.079
+looks like this, it has some diagrams...
+
+00:27:20.080 --> 00:27:23.919
+whatever... and this one is much
+
+00:27:23.920 --> 00:27:26.679
+nicer, and a lot of people
+
+00:27:26.680 --> 00:27:30.599
+watched that video... I mean, I think
+
+00:27:30.600 --> 00:27:33.719
+that 250 people watched it - for me that's
+
+00:27:33.720 --> 00:27:35.599
+a million of people...
+
+00:27:35.600 --> 00:27:39.159
+and this video is about how to
+
+00:27:39.160 --> 00:27:44.079
+extract diagrams from the manual... from
+
+00:27:44.080 --> 00:27:46.599
+the TikZ manual and how to run those
+
+00:27:46.600 --> 00:27:49.759
+examples in a REPL and modify
+
+00:27:49.760 --> 00:27:53.159
+them bit by bit... this is a a
+
+00:27:53.160 --> 00:27:57.439
+screenshot... but let me go back.
+
+00:27:57.440 --> 00:28:00.959
+At that point these things were just
+
+00:28:00.960 --> 00:28:03.239
+prototypes, the code was not very nice...
+
+00:28:03.240 --> 00:28:07.519
+and in this year I wrote... I was able
+
+00:28:07.520 --> 00:28:12.399
+to unify those two ways of generating PDFs,
+
+00:28:12.400 --> 00:28:16.039
+the one for TikZ and the one for Pict2e,
+
+00:28:16.040 --> 00:28:18.719
+and I unified them with many other
+
+00:28:18.720 --> 00:28:20.879
+things that generated diagrams.
+
+00:28:20.880 --> 00:28:24.279
+The basis of these things is
+
+00:28:24.280 --> 00:28:29.319
+something called Show2.lua... I'm not going
+
+00:28:29.320 --> 00:28:35.759
+to show its details now, but its
+
+00:28:35.760 --> 00:28:39.079
+extension that generates TikZ code
+
+00:28:39.080 --> 00:28:43.039
+is just this, so we can specify a
+
+00:28:43.040 --> 00:28:45.799
+diagram with just a block like this,
+
+00:28:45.800 --> 00:28:49.079
+and then uh if we
+
+00:28:49.080 --> 00:28:54.239
+run :show00() it returns a string
+
+00:28:54.240 --> 00:28:56.199
+that is just the body... the inner
+
+00:28:56.200 --> 00:29:00.279
+body of the .tex file, if we run this we
+
+00:29:00.280 --> 00:29:02.999
+see the whole .tex file, and if we run
+
+00:29:03.000 --> 00:29:05.119
+this we save the .tex file and we
+
+00:29:05.120 --> 00:29:08.119
+compile the .tex file to generate a PDF...
+
+00:29:08.120 --> 00:29:10.959
+and if we run this we show the PDF in
+
+00:29:10.960 --> 00:29:14.239
+the lower right window.
+
+00:29:14.240 --> 00:29:17.759
+And that's the same thing for all
+
+00:29:17.760 --> 00:29:20.199
+my recent programs that generate
+
+00:29:20.200 --> 00:29:22.439
+PDFs - they are all
+
+00:29:22.440 --> 00:29:26.199
+integrated... here is the one that...
+
+00:29:26.200 --> 00:29:29.359
+the basis for all my modules that generate
+
+00:29:29.360 --> 00:29:30.719
+diagrams with Pict2e...
+
+00:29:30.720 --> 00:29:34.879
+its demos are not very interesting,
+
+00:29:34.880 --> 00:29:36.799
+so let me show some demos of
+
+00:29:36.800 --> 00:29:39.759
+extensions that do interesting things...
+
+00:29:39.760 --> 00:29:45.319
+so, this is a diagram that I created
+
+00:29:45.320 --> 00:29:47.479
+by editing it in a REPL...
+
+00:29:47.480 --> 00:29:51.279
+I create several Pict objects here...
+
+00:29:51.280 --> 00:29:54.479
+and if I execute this it
+
+00:29:54.480 --> 00:29:59.959
+compiles an object, generates a PDF, and
+
+00:29:59.960 --> 00:30:04.759
+if I tap this... here is the PDF.
+
+00:30:04.760 --> 00:30:07.599
+And if I just ask Lua to
+
+00:30:07.600 --> 00:30:10.079
+display what is "pux", here,
+
+00:30:10.080 --> 00:30:15.719
+it shows the source code in Pict2e
+
+00:30:15.720 --> 00:30:17.999
+of the diagram... and the
+
+00:30:18.000 --> 00:30:20.959
+nice thing is that it is indented, so
+
+00:30:20.960 --> 00:30:23.599
+it's easy to debug the Pict2e code.
+
+00:30:23.600 --> 00:30:25.919
+If anyone is interested the
+
+00:30:25.920 --> 00:30:28.639
+module that does the tricks for
+
+00:30:28.640 --> 00:30:31.879
+indentation is very easy to understand...
+
+00:30:31.880 --> 00:30:35.959
+it has lots of tests and test blocks,
+
+00:30:35.960 --> 00:30:38.599
+and I think that its data
+
+00:30:38.600 --> 00:30:42.079
+structures are easy to understand.
+
+00:30:42.080 --> 00:30:44.359
+Anyway... here is another
+
+00:30:44.360 --> 00:30:51.359
+example. The :show() is
+
+00:30:51.360 --> 00:30:56.439
+here... it generates a 3D diagram.
+
+NOTE Parsers
+
+00:30:56.440 --> 00:31:06.279
+Now let me talk about parsers and
+
+00:31:06.280 --> 00:31:09.559
+REPLs in VERY strange places... I mean,
+
+00:31:09.560 --> 00:31:13.359
+using REPLs to build parsers step by step
+
+00:31:13.360 --> 00:31:17.959
+and" replacing parts by more complex
+
+00:31:17.960 --> 00:31:23.039
+parts. So, I said that Lua is very
+
+00:31:23.040 --> 00:31:28.279
+minimalistic, and everybody knows that
+
+00:31:28.280 --> 00:31:30.759
+implementations of regular expressions
+
+00:31:30.760 --> 00:31:32.479
+are big and complex..
+
+00:31:32.480 --> 00:31:34.679
+so, instead of coming with
+
+00:31:34.680 --> 00:31:37.439
+full regular expressions Lua comes with
+
+00:31:37.440 --> 00:31:39.879
+something called "patterns" and a
+
+00:31:39.880 --> 00:31:43.839
+library function called "string.match".
+
+00:31:43.840 --> 00:31:44.599
+Here is
+
+00:31:44.600 --> 00:31:50.319
+a copy of the part of the manual that
+
+00:31:50.320 --> 00:31:53.399
+explains the syntax... a part of the
+
+00:31:53.400 --> 00:31:57.159
+syntax of of patterns... here's how
+
+00:31:57.160 --> 00:31:59.279
+string.match is described in the
+
+00:31:59.280 --> 00:32:03.199
+manual - it's just this... "looks for
+
+00:32:03.200 --> 00:32:05.359
+the first match of pattern in the string
+
+00:32:05.360 --> 00:32:08.039
+as blah blah blah"... and then we have to
+
+00:32:08.040 --> 00:32:10.159
+go to the other section of the menual
+
+00:32:10.160 --> 00:32:11.479
+that explains patterns.
+
+00:32:11.480 --> 00:32:20.079
+Lua patterns are so simple,
+
+00:32:20.080 --> 00:32:23.159
+so limited, that they don't even
+
+00:32:23.160 --> 00:32:26.519
+have the the alternation operator...
+
+00:32:26.520 --> 00:32:29.759
+here is how it is described in the
+
+00:32:29.760 --> 00:32:31.599
+elisp manual -
+
+00:32:31.600 --> 00:32:36.039
+backslash-pipe specifies
+
+00:32:36.040 --> 00:32:40.359
+an alternative, blah blah blah.
+
+00:32:40.360 --> 00:32:42.879
+When we want to to build more
+
+00:32:42.880 --> 00:32:45.319
+complex... regular expressions,
+
+00:32:45.320 --> 00:32:49.199
+patterns, grammars, etc... we have to use
+
+00:32:49.200 --> 00:32:52.679
+an external library for that... no,
+
+00:32:52.680 --> 00:32:56.279
+sorry, a library that is external
+
+00:32:56.280 --> 00:32:58.239
+but that was written by one of the
+
+00:32:58.240 --> 00:33:00.879
+authors of Lua itself. This library
+
+00:33:00.880 --> 00:33:05.879
+is called Lpeg, and its manual says...
+
+00:33:05.880 --> 00:33:09.599
+"Lpeg is a new pattern matching library for
+
+00:33:09.600 --> 00:33:12.039
+Lua based on Parsing Expression Grammars
+
+00:33:12.040 --> 00:33:18.759
+(PEGs)". The manual is very terse, I
+
+00:33:18.760 --> 00:33:21.559
+found it incredibly hard to read... it
+
+00:33:21.560 --> 00:33:25.439
+doesn't have any diagrams - it has some
+
+00:33:25.440 --> 00:33:29.759
+examples, though... and the Lua Wiki
+
+00:33:29.760 --> 00:33:33.879
+has a big page called Lpeg Tutorial
+
+00:33:33.880 --> 00:33:35.359
+with lots of examples...
+
+00:33:35.360 --> 00:33:38.879
+but it it also doesn't have
+
+00:33:38.880 --> 00:33:41.199
+diagrams and I found some things
+
+00:33:41.200 --> 00:33:42.719
+incredibly hard to understand.
+
+00:33:42.720 --> 00:33:45.879
+For example, this is something that is in
+
+00:33:45.880 --> 00:33:48.879
+the the manual of Lpeg that I saw and I
+
+00:33:48.880 --> 00:33:51.639
+thought: "Wow, great! This makes all sense
+
+00:33:51.640 --> 00:33:53.159
+and is going to be very useful!"...
+
+00:33:53.160 --> 00:33:54.199
+it's a way to to build
+
+00:33:54.200 --> 00:33:57.199
+grammars that can be recursive,
+
+00:33:57.200 --> 00:34:01.359
+and they sort of can encode BNF
+
+00:34:01.360 --> 00:34:03.439
+grammars... we just have to translate the
+
+00:34:03.440 --> 00:34:06.479
+BNF a bit to get rid of some
+
+00:34:06.480 --> 00:34:08.079
+recursions and to translate them to
+
+00:34:08.080 --> 00:34:08.999
+something else.
+
+00:34:09.000 --> 00:34:11.919
+And the manual also has some things
+
+00:34:11.920 --> 00:34:15.159
+that I thought: "Oh, no! I don't have any
+
+00:34:15.160 --> 00:34:18.359
+idea of what this thing does"... and in fact
+
+00:34:18.360 --> 00:34:20.399
+I saw these things for the first
+
+00:34:20.400 --> 00:34:22.359
+time more than 10 years ago and they
+
+00:34:22.360 --> 00:34:26.079
+only started to make sense one year ago.
+
+00:34:26.080 --> 00:34:30.519
+One example is group captures.
+
+00:34:30.520 --> 00:34:36.359
+Lpeg also comes with a
+
+00:34:36.360 --> 00:34:38.719
+module called the Re module... let me
+
+00:34:38.720 --> 00:34:41.719
+pronounce as it in Portuguese - the Re
+
+00:34:41.720 --> 00:34:45.759
+module... its manual says: "The Re
+
+00:34:45.760 --> 00:34:48.199
+module (provided by the file re.lua in the
+
+00:34:48.200 --> 00:34:51.159
+distribution) supports a somewhat conventional
+
+00:34:51.160 --> 00:34:56.239
+regular expression syntax for pattern usage
+
+00:34:56.240 --> 00:34:58.679
+within lpeg"... and
+
+00:34:58.680 --> 00:35:03.519
+this is a quick reference... this
+
+00:35:03.520 --> 00:35:06.319
+thing is very brief, it has some nice
+
+00:35:06.320 --> 00:35:08.919
+examples but it's hard to understand anyway...
+
+00:35:08.920 --> 00:35:13.199
+and here are some comments about
+
+00:35:13.200 --> 00:35:17.279
+my attempts to learn Re.lua. This is
+
+00:35:17.280 --> 00:35:20.639
+a class... in this case it's a very small
+
+00:35:20.640 --> 00:35:24.839
+class... this file implements a :pm()
+
+00:35:24.840 --> 00:35:28.679
+method - I'm going to show examples of
+
+00:35:28.680 --> 00:35:32.239
+other :pm() methods very soon - so, this is
+
+00:35:32.240 --> 00:35:35.799
+a :pm() method for Re.lua that lets us
+
+00:35:35.800 --> 00:35:38.719
+compare the syntax of Lua patterns, Lpeg,
+
+00:35:38.720 --> 00:35:43.999
+and Re... let's see this example here... so,
+
+00:35:44.000 --> 00:35:47.319
+if we run this it loads my version of
+
+00:35:47.320 --> 00:35:52.799
+lpeg... no, sorry, my version of lpegrex...
+
+00:35:52.800 --> 00:35:57.119
+and it shows that when we apply
+
+00:35:57.120 --> 00:36:01.199
+the :pm() method to this Lua pattern, this
+
+00:36:01.200 --> 00:36:04.879
+lpeg pattern, and this Re pattern
+
+00:36:04.880 --> 00:36:07.999
+they all give the same results. So we can
+
+00:36:08.000 --> 00:36:10.799
+use this thing... this kind of thing here
+
+00:36:10.800 --> 00:36:14.119
+to show how to translate from Lua
+
+00:36:14.120 --> 00:36:16.519
+patterns, that are familiar because
+
+00:36:16.520 --> 00:36:18.519
+they're similar to regular expressions,
+
+00:36:18.520 --> 00:36:20.199
+only weaker...
+
+00:36:20.200 --> 00:36:24.799
+to lpeg, that is super weird
+
+00:36:24.800 --> 00:36:27.759
+and to Re, that is not so weird.
+
+00:36:27.760 --> 00:36:35.159
+Anyway, the comment says that in 2012
+
+00:36:35.160 --> 00:36:37.519
+I had a project that needed a
+
+00:36:37.520 --> 00:36:40.479
+precedence passer that could parse
+
+00:36:40.480 --> 00:36:43.239
+arithmetical expressions with the right
+
+00:36:43.240 --> 00:36:46.639
+precedences... and at that point I was
+
+00:36:46.640 --> 00:36:49.919
+still struggling with pure lpeg, and I
+
+00:36:49.920 --> 00:36:52.359
+couldn't do much with it, so I tried to
+
+00:36:52.360 --> 00:36:55.519
+learn Re.lua instead, and I wrote this old
+
+00:36:55.520 --> 00:36:56.319
+class here...
+
+00:36:56.320 --> 00:37:01.039
+that allowed me to use a preprocessor
+
+00:37:01.040 --> 00:37:03.279
+on patterns for Lua. And the thing is that
+
+00:37:03.280 --> 00:37:04.879
+with this preprocessor I could
+
+00:37:04.880 --> 00:37:07.839
+specify precedence grammars using this
+
+00:37:07.840 --> 00:37:11.879
+thing here, that worked, but was super
+
+00:37:11.880 --> 00:37:15.999
+clumsy... and I gave up after a few attempts.
+
+00:37:16.000 --> 00:37:21.879
+and in 2022 I heard about something
+
+00:37:21.880 --> 00:37:23.239
+called lpegrex,
+
+00:37:23.240 --> 00:37:29.799
+that was a... a kind of extension or Re,
+
+00:37:29.800 --> 00:37:32.879
+and it was much more powerful than re.lua,
+
+00:37:32.880 --> 00:37:34.919
+but after a while I realized that it
+
+00:37:34.920 --> 00:37:37.639
+had the same defects as re.lua...
+
+00:37:37.640 --> 00:37:40.839
+and let me explain that, because
+
+00:37:40.840 --> 00:37:44.439
+it has all to do with the things about
+
+00:37:44.440 --> 00:37:48.039
+black boxes and magic that I told in the
+
+00:37:48.040 --> 00:37:52.919
+beginning. Both... I mean, sorry, neither
+
+00:37:52.920 --> 00:37:57.199
+re.lua or lpegrex had some features that
+
+00:37:57.200 --> 00:38:00.799
+I needed... they didn't let us explore...
+
+00:38:00.800 --> 00:38:03.679
+sorry, they received a pattern that was
+
+00:38:03.680 --> 00:38:06.839
+specified as a string, and it converted
+
+00:38:06.840 --> 00:38:09.679
+that into an lpeg pattern, but it didn't
+
+00:38:09.680 --> 00:38:12.559
+let us explore the the lpeg patterns
+
+00:38:12.560 --> 00:38:15.159
+that it generated...
+
+00:38:15.160 --> 00:38:18.759
+their code was written in a way
+
+00:38:18.760 --> 00:38:21.319
+that was REPL-unfriendly - I
+
+00:38:21.320 --> 00:38:24.279
+couldn't modify parts of the code
+
+00:38:24.280 --> 00:38:28.399
+bit by bit in a REPL and try to change
+
+00:38:28.400 --> 00:38:31.719
+the code without changing the
+
+00:38:31.720 --> 00:38:34.199
+original file... the code was very
+
+00:38:34.200 --> 00:38:36.839
+hard to explore, to hack, and to extend -
+
+00:38:36.840 --> 00:38:39.159
+in my opinion... the documentation was not
+
+00:38:39.160 --> 00:38:43.319
+very clear... and I sent one or two messages
+
+00:38:43.320 --> 00:38:47.159
+to the the developer of lpegrex and...
+
+00:38:47.160 --> 00:38:50.759
+he was too busy to help me. He
+
+00:38:50.760 --> 00:38:53.959
+answered it very briefly, and, uh, to be
+
+00:38:53.960 --> 00:38:56.599
+honest I felt... rejected. I felt that I
+
+00:38:56.600 --> 00:38:58.679
+wasn't doing anything interesting...
+
+00:38:58.680 --> 00:39:03.399
+whatever, whatever...
+
+00:39:03.400 --> 00:39:09.239
+So, in 2022 I was trying to learn lpegrex
+
+00:39:09.240 --> 00:39:11.559
+because I was thinking that it would
+
+00:39:11.560 --> 00:39:13.719
+solve my problems - but it didn't...
+
+00:39:13.720 --> 00:39:16.479
+it didn't have the features that I needed,
+
+00:39:16.480 --> 00:39:20.919
+it was hard to extend, hard to explore,
+
+00:39:20.920 --> 00:39:23.279
+and hard to debug, and I
+
+00:39:23.280 --> 00:39:25.039
+decided to rewrite it in a more
+
+00:39:25.040 --> 00:39:30.639
+hacker-friendly way - in the sense that...
+
+00:39:30.640 --> 00:39:33.759
+was modular, and I could replace any
+
+00:39:33.760 --> 00:39:35.399
+part of the module from a REPL...
+
+NOTE ELpeg1.lua
+
+00:39:35.400 --> 00:39:43.679
+My version of it was called ELpeg1.lua...
+
+00:39:43.680 --> 00:39:47.679
+and I decided that in my version I
+
+00:39:47.680 --> 00:39:49.639
+wouldn't have the part that
+
+00:39:49.640 --> 00:39:54.879
+receives a grammar specified as a string
+
+00:39:54.880 --> 00:39:57.519
+and converts that to lpeg... I would
+
+00:39:57.520 --> 00:40:00.959
+just have the backend part, that are the
+
+00:40:00.960 --> 00:40:03.999
+functions in lpeg that let us specify
+
+00:40:04.000 --> 00:40:05.479
+powerful grammars.
+
+00:40:05.480 --> 00:40:11.759
+Let me go back. Let me explain a
+
+00:40:11.760 --> 00:40:15.519
+bit about lpeg... Lua has
+
+00:40:15.520 --> 00:40:21.599
+coercions: the + expects to receive
+
+00:40:21.600 --> 00:40:23.999
+true numbers, and if one of its arguments,
+
+00:40:24.000 --> 00:40:26.999
+or both of them, are strings, it converts
+
+00:40:27.000 --> 00:40:29.839
+the string... the strings to numbers so in
+
+00:40:29.840 --> 00:40:33.519
+this case here, 2+"3",
+
+00:40:33.520 --> 00:40:36.159
+it returns the number 5,
+
+00:40:36.160 --> 00:40:39.359
+and this is the concatenation
+
+00:40:39.360 --> 00:40:42.119
+operator... it expects to receive
+
+00:40:42.120 --> 00:40:44.999
+strings, so in this case it will
+
+00:40:45.000 --> 00:40:47.359
+convert the number 2 to the string "2",
+
+00:40:47.360 --> 00:40:50.279
+and the concatenation of thes two
+
+00:40:50.280 --> 00:40:54.479
+things will be 23... oops, sorry, "23"
+
+00:40:54.480 --> 00:40:56.279
+as a string.
+
+00:40:56.280 --> 00:40:58.519
+Lpeg also has some coercions.
+
+00:40:58.520 --> 00:41:01.759
+I usually set these
+
+00:41:01.760 --> 00:41:05.799
+globals to let me write my grammars
+
+00:41:05.800 --> 00:41:09.719
+in a very compact way, so instead
+
+00:41:09.720 --> 00:41:14.759
+of lpeg.B, lpeg.C, etc I use these globals,
+
+00:41:14.760 --> 00:41:18.359
+like uppercase B, uppercase C, and so on...
+
+00:41:18.360 --> 00:41:21.679
+and with these globals I can write
+
+00:41:21.680 --> 00:41:26.759
+things like this: C(1)*"_"...
+
+00:41:26.760 --> 00:41:33.199
+and lpeg knows that lpeg.C...
+
+00:41:33.200 --> 00:41:38.879
+it sort of expands this to lpeg.C,
+
+00:41:38.880 --> 00:41:42.039
+but lpeg.C expects to receive
+
+00:41:42.040 --> 00:41:44.839
+an lpeg pattern, and 1 is not yet an
+
+00:41:44.840 --> 00:41:47.879
+lpeg pattern, so it is coerced into an
+
+00:41:47.880 --> 00:41:51.799
+lpeg pattern by calling lpeg.P,
+
+00:41:51.800 --> 00:41:55.679
+so this short thing here becomes
+
+00:41:55.680 --> 00:42:03.399
+equivalent to lpeg.C(lpeg.P(1)), and the
+
+00:42:03.400 --> 00:42:07.399
+multiplication, when at least one of its
+
+00:42:07.400 --> 00:42:10.759
+arguments is an lpeg pattern... it expects
+
+00:42:10.760 --> 00:42:13.199
+to receive two lpeg patterns, and in
+
+00:42:13.200 --> 00:42:15.239
+this case the one at the right is
+
+00:42:15.240 --> 00:42:18.319
+just a string, so it is coerced to an lpeg
+
+00:42:18.320 --> 00:42:20.079
+pattern by using lpeg.P.
+
+00:42:20.080 --> 00:42:25.599
+With this idea we can sort of
+
+00:42:25.600 --> 00:42:28.439
+understand the comparison here. I mean,
+
+00:42:28.440 --> 00:42:31.719
+let me run it again... this first part is
+
+00:42:31.720 --> 00:42:34.679
+very similar to a regular expression
+
+00:42:34.680 --> 00:42:35.359
+here at the left...
+
+00:42:35.360 --> 00:42:39.759
+and when we apply this... Lua pattern
+
+00:42:39.760 --> 00:42:43.639
+to this subject here the result
+
+00:42:43.640 --> 00:42:47.799
+is this thing here, this thing, this
+
+00:42:47.800 --> 00:42:54.319
+thing and this thing... I'm going to
+
+00:42:54.320 --> 00:42:56.119
+call each one of these results
+
+00:42:56.120 --> 00:42:59.519
+"captures", so each of these things
+
+00:42:59.520 --> 00:43:03.319
+between parentheses "captures" a substring
+
+00:43:03.320 --> 00:43:06.039
+of the original string and these
+
+00:43:06.040 --> 00:43:08.559
+captured substrings are returned in a
+
+00:43:08.560 --> 00:43:11.839
+certain order. Here is how to express the
+
+00:43:11.840 --> 00:43:12.759
+same thing in lpeg...
+
+00:43:12.760 --> 00:43:15.919
+it's very cryptic but it's a
+
+00:43:15.920 --> 00:43:20.719
+good way to understand the some basic
+
+00:43:20.720 --> 00:43:23.879
+operators of lpeg, I mean we can look at
+
+00:43:23.880 --> 00:43:26.479
+the manual and understand and
+
+00:43:26.480 --> 00:43:30.519
+what C, S and R do, and also
+
+00:43:30.520 --> 00:43:37.959
+exponentiation... and this strange thing
+
+00:43:37.960 --> 00:43:41.319
+here receives this string here, runs
+
+00:43:41.320 --> 00:43:43.279
+a function that I have defined, that
+
+00:43:43.280 --> 00:43:46.039
+converts it to an object of a certain
+
+00:43:46.040 --> 00:43:47.759
+class, and that class
+
+00:43:47.760 --> 00:43:52.399
+represents Re patterns, so this thing
+
+00:43:52.400 --> 00:43:54.479
+is treated as a pattern for re.lua,
+
+00:43:54.480 --> 00:43:56.479
+and it is matched against the string,
+
+00:43:56.480 --> 00:43:59.439
+and it returns the same thing as the
+
+00:43:59.440 --> 00:44:02.559
+other one.
+
+00:44:02.560 --> 00:44:05.519
+Also, this thing here also has a
+
+00:44:05.520 --> 00:44:08.479
+comparison with lpegrex, but these
+
+00:44:08.480 --> 00:44:11.559
+patterns are very trivial, they
+
+00:44:11.560 --> 00:44:13.359
+don't do anything very strange...
+
+00:44:13.360 --> 00:44:15.759
+so let's go back and see what
+
+00:44:15.760 --> 00:44:18.239
+kinds of very strange things there are.
+
+00:44:18.240 --> 00:44:26.559
+Here is the page of lpegrex at github,
+
+00:44:26.560 --> 00:44:29.719
+here's the documentation...
+
+00:44:29.720 --> 00:44:32.439
+it's relatively brief,
+
+00:44:32.440 --> 00:44:35.239
+it explains lpegrex as being an
+
+00:44:35.240 --> 00:44:39.719
+extension of Re.lua, so it explains
+
+00:44:39.720 --> 00:44:42.879
+mainly the additional features... here is a
+
+00:44:42.880 --> 00:44:45.119
+quick reference that explains only the
+
+00:44:45.120 --> 00:44:46.359
+additional features...
+
+00:44:46.360 --> 00:44:49.639
+some of the these things
+
+00:44:49.640 --> 00:44:50.919
+I was able to understand
+
+00:44:50.920 --> 00:44:57.559
+by struggling a lot, and some I wasn't
+
+00:44:57.560 --> 00:45:02.439
+able to even by spending several evenings
+
+00:45:02.440 --> 00:45:04.319
+try to to build examples...
+
+00:45:04.320 --> 00:45:12.879
+and this is something very nice. Lpegrex
+
+00:45:12.880 --> 00:45:15.879
+comes with some example parsers... and
+
+00:45:15.880 --> 00:45:18.679
+here is a parser that parses the Lua
+
+00:45:18.680 --> 00:45:22.479
+grammar - I mean, this is the the grammar
+
+00:45:22.480 --> 00:45:25.959
+for Lua 5.4 at the end of the
+
+00:45:25.960 --> 00:45:31.199
+reference manual... it's just this... this
+
+00:45:31.200 --> 00:45:34.799
+is in a kind of BNF, and this is the BNF
+
+00:45:34.800 --> 00:45:35.599
+translated
+
+00:45:35.600 --> 00:45:39.919
+to the language of lpegrex, so this
+
+00:45:39.920 --> 00:45:43.039
+thing uses many constructions that are
+
+00:45:43.040 --> 00:45:47.999
+in re.lua and some extra constructions that
+
+00:45:48.000 --> 00:45:50.959
+are described here... and with these
+
+00:45:50.960 --> 00:45:54.239
+examples I was able to to understand
+
+00:45:54.240 --> 00:45:55.159
+some of the...
+
+00:45:55.160 --> 00:45:58.079
+of these things here that are
+
+00:45:58.080 --> 00:46:00.239
+described here in the quick
+
+00:46:00.240 --> 00:46:04.719
+reference - but not all.
+
+00:46:04.720 --> 00:46:11.279
+So, I wasn't able to use lpegrex
+
+00:46:11.280 --> 00:46:14.279
+by itself, because some things didn't
+
+00:46:14.280 --> 00:46:16.199
+make much sense, and I decided to
+
+00:46:16.200 --> 00:46:18.759
+reimplement it in my own style,
+
+00:46:18.760 --> 00:46:23.679
+because that would be a way to map...
+
+00:46:23.680 --> 00:46:26.839
+to at the very least map what I had
+
+00:46:26.840 --> 00:46:29.559
+understood and what I didn't, learn
+
+00:46:29.560 --> 00:46:32.999
+one feature at a time, do comparisons, and
+
+00:46:33.000 --> 00:46:35.319
+so on.
+
+00:46:35.320 --> 00:46:38.799
+Here I pointed to two features of lpeg...
+
+00:46:38.800 --> 00:46:41.679
+in one I said "Oh, great! This thing can
+
+00:46:41.680 --> 00:46:44.319
+be used to to define grammars, even
+
+00:46:44.320 --> 00:46:45.959
+recursive grammars", and so on...
+
+00:46:45.960 --> 00:46:49.759
+and this is an "Oh, no!" feature - one
+
+00:46:49.760 --> 00:46:51.759
+thing that didn't make any sense at all...
+
+00:46:51.760 --> 00:46:56.439
+group captures. One thing that I did to
+
+00:46:56.440 --> 00:46:59.039
+understand group captures was to
+
+00:46:59.040 --> 00:47:02.319
+represent them as diagrams. Of course in
+
+00:47:02.320 --> 00:47:05.359
+the beginning I was drawing these
+
+00:47:05.360 --> 00:47:08.919
+diagrams by hand, but then I realized
+
+00:47:08.920 --> 00:47:11.559
+that I could use the bits of lpeg
+
+00:47:11.560 --> 00:47:14.759
+that I already knew to build a grammar
+
+00:47:14.760 --> 00:47:17.479
+that would parse a little language and
+
+00:47:17.480 --> 00:47:20.999
+generate these diagrams in LaTeX, and I was
+
+00:47:21.000 --> 00:47:21.919
+able to make this.
+
+00:47:21.920 --> 00:47:25.279
+In this diagram here
+
+00:47:25.280 --> 00:47:30.719
+this thing above the arrow is Lua code...
+
+00:47:30.720 --> 00:47:33.759
+a piece of Lua code that
+
+00:47:33.760 --> 00:47:37.119
+specifies an lpeg pattern... this
+
+00:47:37.120 --> 00:47:39.559
+thing here at the top is the string that
+
+00:47:39.560 --> 00:47:43.039
+is being matched, and the things below
+
+00:47:43.040 --> 00:47:46.599
+the underbraces are the captures that
+
+00:47:46.600 --> 00:47:50.639
+each thing... sorry, that each thing
+
+00:47:50.640 --> 00:47:51.319
+captures.
+
+00:47:51.320 --> 00:47:58.479
+For example, this underbrace here
+
+00:47:58.480 --> 00:48:00.279
+corresponds to this pattern here,
+
+00:48:00.280 --> 00:48:02.879
+that parses a single character but
+
+00:48:02.880 --> 00:48:05.559
+doesn't return any captures, this thing
+
+00:48:05.560 --> 00:48:08.119
+here parses a single "b" and doesn't
+
+00:48:08.120 --> 00:48:11.239
+return any captures, this thing here
+
+00:48:11.240 --> 00:48:14.399
+parses a single character and captures
+
+00:48:14.400 --> 00:48:16.879
+it, and this thing here parses the
+
+00:48:16.880 --> 00:48:21.319
+character "d" and captures it... and this
+
+00:48:21.320 --> 00:48:24.439
+other thing here transforms this
+
+00:48:24.440 --> 00:48:27.279
+pattern into another pattern...
+
+00:48:27.280 --> 00:48:33.119
+returns first a capture with all
+
+00:48:33.120 --> 00:48:35.079
+the string that was parsed by this
+
+00:48:35.080 --> 00:48:37.399
+pattern here, and then all the captures
+
+00:48:37.400 --> 00:48:41.079
+returned by this thing here before
+
+00:48:41.080 --> 00:48:42.959
+the ":".
+
+00:48:42.960 --> 00:48:45.479
+So, this was a way to build
+
+00:48:45.480 --> 00:48:48.599
+concrete examples for things that the
+
+00:48:48.600 --> 00:48:52.159
+lpag manual was explaining in a very terse
+
+00:48:52.160 --> 00:48:55.799
+way, and it worked for me - some things
+
+00:48:55.800 --> 00:48:56.999
+that were very
+
+00:48:57.000 --> 00:48:59.839
+mysterious started to make sense, and I
+
+00:48:59.840 --> 00:49:03.199
+started to have intelligent questions
+
+00:49:03.200 --> 00:49:06.079
+to ask in the mailing list.
+
+00:49:06.080 --> 00:49:10.959
+And with that I was able to
+
+00:49:10.960 --> 00:49:12.959
+understand what are group captures,
+
+00:49:12.960 --> 00:49:17.879
+and group captures that receive a name...
+
+00:49:17.880 --> 00:49:22.719
+Well, let me explain what this does.
+
+00:49:22.720 --> 00:49:27.119
+This thing here captures... sorry, parses
+
+00:49:27.120 --> 00:49:29.359
+the empty string and returns this as a
+
+00:49:29.360 --> 00:49:32.959
+constant... so, this is something that
+
+00:49:32.960 --> 00:49:35.799
+doesn't exist in regular expressions...
+
+00:49:35.800 --> 00:49:38.639
+it parses nothing and
+
+00:49:38.640 --> 00:49:41.839
+returns this as a capture... then this
+
+00:49:41.840 --> 00:49:44.599
+thing here returns these two
+
+00:49:44.600 --> 00:49:47.159
+constants here, and parses the empty
+
+00:49:47.160 --> 00:49:51.279
+string, and this thing here converts
+
+00:49:51.280 --> 00:49:54.159
+the results of this thing here into a
+
+00:49:54.160 --> 00:49:57.639
+group capture, and stores it in the label
+
+00:49:57.640 --> 00:50:03.279
+"d"... and then here's another constant
+
+00:50:03.280 --> 00:50:03.719
+capture.
+
+NOTE Building lists
+
+00:50:03.720 --> 00:50:05.679
+And I realized that these things
+
+00:50:05.680 --> 00:50:08.599
+here were similar to how Lua
+
+00:50:08.600 --> 00:50:09.839
+specifies building lists...
+
+00:50:09.840 --> 00:50:16.239
+when we build... sorry, tables. When
+
+00:50:16.240 --> 00:50:18.759
+we build a table, and we say that the
+
+00:50:18.760 --> 00:50:21.879
+first element of the table is here, this
+
+00:50:21.880 --> 00:50:23.559
+element is put at the end of the table...
+
+00:50:23.560 --> 00:50:29.399
+when after the that would say d=42...
+
+00:50:29.400 --> 00:50:31.199
+we are putting the 42
+
+00:50:31.200 --> 00:50:34.559
+in the the slot whose key is "d".
+
+00:50:34.560 --> 00:50:38.999
+This was happening with lpeg captures,
+
+00:50:39.000 --> 00:50:43.359
+but there was something very strange...
+
+00:50:43.360 --> 00:50:46.199
+these group captures could hold
+
+00:50:46.200 --> 00:50:49.199
+more than one capture - more than one
+
+00:50:49.200 --> 00:50:51.759
+value... so there was something between
+
+00:50:51.760 --> 00:50:58.039
+lists and tables. I started to use this
+
+00:50:58.040 --> 00:51:00.479
+notation to...
+
+00:51:00.480 --> 00:51:04.959
+explain in my notation what they
+
+00:51:04.960 --> 00:51:08.159
+were doing... many things started
+
+00:51:08.160 --> 00:51:10.239
+to make sense, many mysterious
+
+00:51:10.240 --> 00:51:12.879
+sentences in the manual started to
+
+00:51:12.880 --> 00:51:14.439
+make sense... but some didn't...
+
+00:51:14.440 --> 00:51:19.679
+but at least I was able to send
+
+00:51:19.680 --> 00:51:22.319
+some intelligent questions to the
+
+00:51:22.320 --> 00:51:25.199
+mailing lis,t and the author of Lua and
+
+00:51:25.200 --> 00:51:27.359
+lpeg answered some of them...
+
+00:51:27.360 --> 00:51:31.519
+he was not very happy about my
+
+00:51:31.520 --> 00:51:34.959
+questions - he... told me that those
+
+00:51:34.960 --> 00:51:37.679
+diagrams were a waste of time, the
+
+00:51:37.680 --> 00:51:40.559
+manual was perfectly clear, and so on...
+
+00:51:40.560 --> 00:51:44.919
+whatever - but I was able to...
+
+00:51:44.920 --> 00:51:48.879
+so, it was weird, but I was able to
+
+00:51:48.880 --> 00:51:51.799
+understand lots of things from his
+
+00:51:51.800 --> 00:51:56.519
+answers. This is a copy of one of
+
+00:51:56.520 --> 00:51:58.239
+my messages, then there's another one,
+
+00:51:58.240 --> 00:52:01.239
+another one, some of them had diagrams...
+
+00:52:01.240 --> 00:52:04.359
+then he complained about these diagrams,
+
+00:52:04.360 --> 00:52:08.439
+he said that these things here, that look
+
+00:52:08.440 --> 00:52:11.119
+like table constructors, "do not exist"...
+
+00:52:11.120 --> 00:52:17.199
+whatever... anyway, once I understood
+
+00:52:17.200 --> 00:52:20.679
+group captures many features
+
+00:52:20.680 --> 00:52:23.359
+were very easy to understand
+
+00:52:23.360 --> 00:52:26.039
+and I started to be able to use lpeg to
+
+00:52:26.040 --> 00:52:28.159
+to build some very interesting things...
+
+00:52:28.160 --> 00:52:33.039
+I was able to reproduce some
+
+00:52:33.040 --> 00:52:36.359
+of the features that I saw in lpegrex -
+
+00:52:36.360 --> 00:52:41.079
+remember that this... where is that?
+
+00:52:41.080 --> 00:52:46.119
+this is the syntax of Lua... here -
+
+00:52:46.120 --> 00:52:48.959
+I was able to understand
+
+00:52:48.960 --> 00:52:52.479
+how these things here were translated to
+
+00:52:52.480 --> 00:52:55.359
+lpeg code... to lpeg patterns
+
+00:52:55.360 --> 00:52:58.239
+by using group captures in a certain
+
+00:52:58.240 --> 00:53:03.039
+way... I was able to implement them
+
+00:53:03.040 --> 00:53:04.759
+in ELpeg1.lua...
+
+00:53:04.760 --> 00:53:08.719
+and after some time I was able to use
+
+00:53:08.720 --> 00:53:12.879
+ELpeg1.lua to build grammars that
+
+00:53:12.880 --> 00:53:14.159
+were able to parse
+
+00:53:14.160 --> 00:53:18.679
+arithmetical expressions with the
+
+00:53:18.680 --> 00:53:20.959
+right precedence... and here's an example
+
+00:53:20.960 --> 00:53:23.319
+in which I built the grammar step by step...
+
+00:53:23.320 --> 00:53:29.239
+and I test the current grammar, and I
+
+00:53:29.240 --> 00:53:35.079
+replace a bit, and then I test the new
+
+00:53:35.080 --> 00:53:36.599
+grammar and so on...
+
+00:53:36.600 --> 00:53:39.079
+and you can see that the result is
+
+00:53:39.080 --> 00:53:43.359
+always a tree that is drawn in a
+
+00:53:43.360 --> 00:53:44.239
+nice two dimensional way...
+
+00:53:44.240 --> 00:53:48.919
+At this point these powers here
+
+00:53:48.920 --> 00:53:50.559
+are returned as a list,
+
+00:53:50.560 --> 00:53:53.119
+as an operation "pow"
+
+00:53:53.120 --> 00:53:57.559
+with several arguments, here... and then
+
+00:53:57.560 --> 00:54:00.519
+I apply a kind of parsing combinator,
+
+00:54:00.520 --> 00:54:03.719
+here... that transforms these trees into
+
+00:54:03.720 --> 00:54:08.199
+other trees and with these combinators
+
+00:54:08.200 --> 00:54:12.199
+here I can specify that the "^" is
+
+00:54:12.200 --> 00:54:14.639
+associative in a certain direction...
+
+00:54:14.640 --> 00:54:17.519
+that the "/" is associative in
+
+00:54:17.520 --> 00:54:20.119
+another direction... the "-" uses
+
+00:54:20.120 --> 00:54:23.079
+the same direction as a the "/",
+
+00:54:23.080 --> 00:54:26.079
+and so on... and they have the
+
+00:54:26.080 --> 00:54:29.679
+right precedences.
+
+00:54:29.680 --> 00:54:34.559
+So, here are the tests...
+
+00:54:34.560 --> 00:54:38.119
+here is my file ELpeg1.lua... it has
+
+00:54:38.120 --> 00:54:41.719
+several classes, each class has tests
+
+00:54:41.720 --> 00:54:42.279
+after it...
+
+00:54:42.280 --> 00:54:46.239
+I was able to implement something
+
+00:54:46.240 --> 00:54:50.519
+that lpegrex has, that is called
+
+00:54:50.520 --> 00:54:53.519
+"keywords", that is very useful for parsing
+
+00:54:53.520 --> 00:54:56.479
+programs in programming languages...
+
+00:54:56.480 --> 00:54:59.439
+I was able to implement something
+
+00:54:59.440 --> 00:55:02.639
+similar to the debugger... to the
+
+00:55:02.640 --> 00:55:07.999
+lpeg debugger lpeg uses... I was
+
+00:55:08.000 --> 00:55:11.399
+frustrated by some limitations of
+
+00:55:11.400 --> 00:55:16.839
+the lpeg debugger, and I implemented
+
+00:55:16.840 --> 00:55:23.439
+my own that is, uh... much better!...
+
+00:55:23.440 --> 00:55:24.759
+Let me show something else... I was
+
+00:55:24.760 --> 00:55:27.119
+able to translate a good part of the
+
+00:55:27.120 --> 00:55:33.039
+Lua parser, here, to ELpeg1.lua... I haven't
+
+00:55:33.040 --> 00:55:38.399
+finished yet, but I have most of the
+
+00:55:38.400 --> 00:55:39.719
+the translation here...
+
+00:55:39.720 --> 00:55:47.279
+and after having all that I was able to
+
+00:55:47.280 --> 00:55:50.319
+build other grammars very quickly...
+
+00:55:50.320 --> 00:55:55.239
+writing new parsers finally became fun.
+
+00:55:55.240 --> 00:55:58.719
+And here's one example that I showed in the
+
+00:55:58.720 --> 00:56:00.639
+beginning.
+
+00:56:00.640 --> 00:56:05.799
+If I remember correctly...
+
+00:56:05.800 --> 00:56:10.639
+I took a figure from the Wikipedia...
+
+00:56:10.640 --> 00:56:12.439
+I don't have its link now...
+
+00:56:12.440 --> 00:56:17.079
+but I specified a grammar that parses
+
+00:56:17.080 --> 00:56:20.119
+exactly the example that appears
+
+00:56:20.120 --> 00:56:20.839
+in the Wikipedia...
+
+00:56:20.840 --> 00:56:24.679
+so, with my grammar, considering that
+
+00:56:24.680 --> 00:56:28.719
+the top level entry is "Stmt", when I
+
+00:56:28.720 --> 00:56:30.679
+parse this string here
+
+00:56:30.680 --> 00:56:36.599
+the result is this tree...
+
+00:56:36.600 --> 00:56:41.119
+and I can do some operations on that,
+
+00:56:41.120 --> 00:56:44.039
+I can define how this thing is to be
+
+00:56:44.040 --> 00:56:45.639
+converted into LaTeX,
+
+00:56:45.640 --> 00:56:49.399
+I can define other operations
+
+00:56:49.400 --> 00:56:52.999
+that convert trees into other trees, and
+
+00:56:53.000 --> 00:56:54.879
+here are some tests of these operations...
+
+00:56:54.880 --> 00:57:00.359
+This is what I showed in the beginning...
+
+00:57:00.360 --> 00:57:02.759
+I'm not going to explain all the details
+
+00:57:02.760 --> 00:57:03.999
+of this thing now...
+
+00:57:04.000 --> 00:57:09.199
+this :show() converts this thing
+
+00:57:09.200 --> 00:57:11.919
+into LaTeX in the way specified by these
+
+00:57:11.920 --> 00:57:16.159
+instructions here, that says that...
+
+00:57:16.160 --> 00:57:25.239
+well, whatever...
+
+00:57:25.240 --> 00:57:32.959
+and here's the result - the LaTeXed result...
+
+00:57:32.960 --> 00:57:41.759
+and these diagrams here are generated by
+
+00:57:41.760 --> 00:57:46.719
+this file here, that defines a simple
+
+00:57:46.720 --> 00:57:48.479
+grammar that parses this thing here,
+
+00:57:48.480 --> 00:57:51.999
+and then LaTeXes it in a certain way, and
+
+00:57:52.000 --> 00:57:56.399
+and also tests to check if this code here...
+
+00:57:56.400 --> 00:58:01.999
+this Lua code that generates an lpeg grammar...
+
+00:58:02.000 --> 00:58:05.799
+parses this subject here and
+
+00:58:05.800 --> 00:58:08.599
+returns the expected result...
+
+00:58:08.600 --> 00:58:12.239
+So: this is the code that I
+
+00:58:12.240 --> 00:58:16.719
+wanted to show. I wanted to show many
+
+00:58:16.720 --> 00:58:19.919
+more things but I wasn't able to prepare
+
+00:58:19.920 --> 00:58:23.919
+them before the conference... and I hope
+
+00:58:23.920 --> 00:58:27.519
+that soon - for some value of "soon" -
+
+00:58:27.520 --> 00:58:30.399
+I'll be able to create REPL-based
+
+00:58:30.400 --> 00:58:33.919
+tutorials for lpeg, Re, and ELpeg1.lua...
+
+00:58:33.920 --> 00:58:36.319
+where lpeg is something very famous,
+
+00:58:36.320 --> 00:58:39.199
+Re is a module of lpeg...
+
+00:58:39.200 --> 00:58:42.399
+I could also do something like this
+
+00:58:42.400 --> 00:58:47.799
+for lpegrex... and ELpeg1.lua is
+
+00:58:47.800 --> 00:58:51.159
+the thing that I wrote, the one that
+
+00:58:51.160 --> 00:58:56.799
+has test in comments, and the tests
+
+00:58:56.800 --> 00:58:59.519
+usually generate trees, and sometimes
+
+00:58:59.520 --> 00:59:00.879
+they generate TeX code.
+
+00:59:00.880 --> 00:59:04.959
+Yeah, so that's it! I wanted to
+
+00:59:04.960 --> 00:59:07.159
+present much more but I wasn't able to
+
+00:59:07.160 --> 00:59:10.480
+prepare it... so: sorry, thanks, bye! =)
diff --git a/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt b/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt
new file mode 100644
index 00000000..9398d5f8
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt
@@ -0,0 +1,503 @@
+WEBVTT
+
+
+00:00:05.200 --> 00:00:06.359
+[Speaker 0]: Session is being recorded.
+
+00:00:06.819 --> 00:00:08.860
+Just waiting for Corwin and Leo.
+
+00:00:16.359 --> 00:00:17.960
+Great. Corwin, would you like to share your
+
+00:00:17.960 --> 00:00:18.460
+screen?
+
+00:00:37.620 --> 00:00:39.840
+Let's see the audio through BBB so we don't
+
+00:00:39.840 --> 00:00:41.720
+have to splice it in afterwards because it's
+
+00:00:41.720 --> 00:00:43.680
+annoying to splice things.
+
+00:00:43.680 --> 00:00:47.020
+I mean, Leo will be taking care of it,
+
+00:00:47.020 --> 00:00:50.560
+not me, so. Okay, he's going to finish up.
+
+00:00:52.720 --> 00:00:55.320
+[Speaker 1]: So, in the meantime, it's been a long day,
+
+00:00:55.320 --> 00:00:57.080
+people. Thanks for sticking around.
+
+00:00:57.180 --> 00:00:58.739
+And we're going to do a little bit of jazz
+
+00:00:58.739 --> 00:01:00.060
+handing until Corwin comes back.
+
+00:01:00.060 --> 00:01:07.650
+Smack. I
+
+00:01:14.240 --> 00:01:16.020
+[Speaker 2]: can't imagine an Emacs con without getting to
+
+00:01:16.020 --> 00:01:17.920
+enjoy Leo's famous jazz hands.
+
+00:01:21.420 --> 00:01:23.080
+[Speaker 1]: I can tell you it's a lot easier...
+
+00:01:23.160 --> 00:01:25.760
+Hello? I can tell you it's a lot easier to do
+
+00:01:25.760 --> 00:01:30.740
+jazz hands at 9am EST than it is at 5pm EST,
+
+00:01:30.860 --> 00:01:34.160
+because for me it's 11 and I've barely seen
+
+00:01:34.160 --> 00:01:39.720
+this 1 today. Okay Corwin,
+
+00:01:39.720 --> 00:01:41.880
+do you have a presentation right now?
+
+00:01:45.480 --> 00:01:47.440
+We do not seem to be able to hear you,
+
+00:01:47.440 --> 00:01:55.240
+Corwin. Okay, just bear with us,
+
+00:01:55.240 --> 00:01:57.380
+folks. We're gonna figure out this 1.
+
+00:01:57.380 --> 00:01:58.660
+This is the last bug of the day,
+
+00:01:58.660 --> 00:02:00.640
+and then we're clear until tomorrow.
+
+00:02:05.820 --> 00:02:07.700
+[Speaker 2]: I just heard you, but I don't know if it was
+
+00:02:07.700 --> 00:02:12.100
+here or via mumble. Okay.
+
+00:02:14.540 --> 00:02:17.360
+[Speaker 1]: Can we figure out? Whenever there's a problem
+
+00:02:17.360 --> 00:02:19.340
+like this, like Sash and myself are furiously
+
+00:02:19.460 --> 00:02:20.640
+typing in the background,
+
+00:02:20.640 --> 00:02:22.380
+we say, oh, can we fix this slide?
+
+00:02:22.740 --> 00:02:24.180
+But here, I'm stumped.
+
+00:02:33.180 --> 00:02:36.760
+[Speaker 2]: I think Corbin is in the GenTrack on Mumble.
+
+00:02:40.520 --> 00:02:43.680
+[Speaker 1]: Okay, so let's all switch to GenTrack and
+
+00:02:43.780 --> 00:02:46.860
+we'll be able to figure out the way.
+
+00:03:18.420 --> 00:03:21.540
+[Speaker 0]: Okay, well, while Corwin figures out how to
+
+00:03:21.540 --> 00:03:23.940
+get started, we might as well maybe do a
+
+00:03:23.940 --> 00:03:25.380
+little bit of closing remarks,
+
+00:03:25.380 --> 00:03:27.220
+and then you can jump in whenever you want.
+
+00:03:29.440 --> 00:03:30.420
+[Speaker 1]: Sounds good to me.
+
+00:03:31.980 --> 00:03:34.459
+[Speaker 0]: Okay. Thank you, everyone,
+
+00:03:34.459 --> 00:03:36.160
+for coming to Emacs Conf 2023.
+
+00:03:37.120 --> 00:03:38.980
+We made it to the end of the first day!
+
+00:03:39.140 --> 00:03:40.440
+Hooray! We're going to keep these closing
+
+00:03:40.440 --> 00:03:42.880
+remarks short because it's a long day.
+
+00:03:42.880 --> 00:03:44.920
+It's almost midnight and Leah will turn into
+
+00:03:44.920 --> 00:03:48.340
+a pumpkin very soon. So before that happens,
+
+00:03:48.580 --> 00:03:50.560
+we just want to say hello and thanks.
+
+00:03:50.640 --> 00:03:54.980
+And pre-recorded talks are already up.
+
+00:03:55.260 --> 00:03:56.520
+They're on the talk pages,
+
+00:03:56.520 --> 00:03:57.320
+they're on media.emaxcontent.org.
+
+00:03:58.860 --> 00:04:00.620
+We'll work on extracting the live talks,
+
+00:04:00.620 --> 00:04:01.920
+but it'll take a few weeks.
+
+00:04:01.920 --> 00:04:02.220
+[Speaker 3]: Maybe, you
+
+00:04:02.220 --> 00:04:03.660
+[Speaker 0]: know, we'll see how it goes.
+
+00:04:04.540 --> 00:04:06.100
+Please feel free to spread the word,
+
+00:04:06.100 --> 00:04:07.700
+because you know some people didn't actually
+
+00:04:07.720 --> 00:04:09.380
+know there was EmacsConf this weekend,
+
+00:04:09.380 --> 00:04:11.400
+so let them know, because it's a lot of fun.
+
+00:04:11.400 --> 00:04:15.020
+More talks tomorrow. And if you've got ideas
+
+00:04:15.020 --> 00:04:15.900
+for making things better,
+
+00:04:15.900 --> 00:04:17.500
+or If you'd like to tell us what's working
+
+00:04:17.500 --> 00:04:18.660
+well and what you'd like,
+
+00:04:18.940 --> 00:04:21.180
+please put them in the conference pad at
+
+00:04:21.180 --> 00:04:26.580
+pad.emaxconf.org. Anything anyone want to
+
+00:04:26.580 --> 00:04:27.080
+add?
+
+00:04:30.060 --> 00:04:30.860
+[Speaker 1]: I'm all good.
+
+00:04:32.900 --> 00:04:35.260
+[Speaker 2]: Let's see if Corwin can get his mic to work.
+
+00:04:37.740 --> 00:04:38.800
+No, it's not.
+
+00:04:43.520 --> 00:04:45.140
+[Speaker 1]: Well, I mean, did you want to say something
+
+00:04:45.140 --> 00:04:47.220
+as well? Because people have heard you talk
+
+00:04:47.220 --> 00:04:49.120
+all day long on the Dev track,
+
+00:04:49.120 --> 00:04:50.240
+but not on the general track,
+
+00:04:50.240 --> 00:04:51.540
+actually. It's the first time they hear you
+
+00:04:51.540 --> 00:04:52.040
+today.
+
+00:04:52.540 --> 00:04:55.580
+[Speaker 2]: Right. Oh, well, way to put me on the spot,
+
+00:04:56.540 --> 00:04:58.040
+but more seriously, thanks.
+
+00:04:58.040 --> 00:04:59.760
+So yeah, it's a lot of fun.
+
+00:05:00.340 --> 00:05:03.760
+You know, it's, we sort of keep coming back
+
+00:05:03.760 --> 00:05:05.580
+every year and doing this conference.
+
+00:05:06.300 --> 00:05:08.720
+It's always been fun. And we keep doing it
+
+00:05:08.720 --> 00:05:11.320
+thanks to, you know, all the people who
+
+00:05:11.320 --> 00:05:13.860
+submit all these amazing talks with these
+
+00:05:14.600 --> 00:05:16.560
+amazing sessions. And of course the audience
+
+00:05:16.560 --> 00:05:19.940
+as well. I don't have a lot to say I guess
+
+00:05:19.940 --> 00:05:21.500
+for today because I think we're hoping to
+
+00:05:21.500 --> 00:05:23.180
+keep it kind of short and sweet.
+
+00:05:24.400 --> 00:05:25.920
+So yeah, I think that's about it for me.
+
+00:05:25.920 --> 00:05:28.380
+I guess we'll maybe wait another minute or so
+
+00:05:28.380 --> 00:05:30.180
+to see if Cormen can make it.
+
+00:05:30.580 --> 00:05:32.140
+But yeah, that's all for me.
+
+00:05:34.820 --> 00:05:37.920
+[Speaker 1]: All right, great. Speaking of putting people
+
+00:05:37.920 --> 00:05:41.600
+on the spot, you might see a face in the room
+
+00:05:41.600 --> 00:05:43.680
+that you might have seen last year,
+
+00:05:43.840 --> 00:05:45.700
+but we've got Flobby Koda in the room as
+
+00:05:45.700 --> 00:05:49.400
+well, who you might not have heard of him but
+
+00:05:49.400 --> 00:05:51.140
+he's been doing a lot of the check-ins today
+
+00:05:51.140 --> 00:05:53.360
+for most of the speakers and he's been doing
+
+00:05:53.360 --> 00:05:54.520
+a wonderful job at it.
+
+00:05:54.520 --> 00:05:56.560
+Florian, do you want to say a word if only to
+
+00:05:56.560 --> 00:05:58.140
+say you're being put on the spot?
+
+00:06:00.620 --> 00:06:02.840
+[Speaker 4]: I have nothing prepared really but I just
+
+00:06:02.840 --> 00:06:05.100
+want to thank everybody who could,
+
+00:06:05.380 --> 00:06:07.260
+with who I could talk in between.
+
+00:06:07.360 --> 00:06:10.420
+So I had like wonderful 20 to 30 minute talks
+
+00:06:10.580 --> 00:06:12.900
+with every speaker before they get into the
+
+00:06:12.900 --> 00:06:15.100
+live Q&A or the live presentation.
+
+00:06:15.780 --> 00:06:16.920
+Thanks a lot for everybody,
+
+00:06:16.920 --> 00:06:19.640
+I learned quite a lot and also thank you for
+
+00:06:19.640 --> 00:06:22.360
+all of you guys and everyone for having such
+
+00:06:22.360 --> 00:06:24.060
+a beautiful experience here.
+
+00:06:25.960 --> 00:06:28.060
+[Speaker 1]: Well, thank you. We're glad to have you.
+
+00:06:29.180 --> 00:06:31.120
+Okay, Sasha, Unless you've got anything else
+
+00:06:31.120 --> 00:06:33.880
+to add, and Corwin, have you fixed your
+
+00:06:33.880 --> 00:06:38.400
+microphone? Yes, we can hear you Corwin.
+
+00:06:38.400 --> 00:06:39.160
+Okay, well let's start again.
+
+00:06:39.160 --> 00:06:40.440
+Let's forget everything you've heard for the
+
+00:06:40.440 --> 00:06:41.640
+last 20 minutes. We'll start again.
+
+00:06:41.640 --> 00:06:42.540
+I'm just kidding.
+
+00:06:35.280 --> 00:06:45.560
+[Speaker 3]: You tell me. No, I mean,
+
+00:06:45.560 --> 00:06:47.760
+I don't know what I could possibly add to all
+
+00:06:47.760 --> 00:06:50.200
+that. I think we absolutely should get some
+
+00:06:50.200 --> 00:06:51.500
+rest, save it for tomorrow.
+
+00:06:52.540 --> 00:06:55.240
+I was just looking through these notes in the
+
+00:06:55.240 --> 00:06:57.480
+couple of minutes that I had between my own
+
+00:06:57.480 --> 00:06:59.980
+talk. Thank you for your help with that.
+
+00:07:00.720 --> 00:07:02.420
+But also, especially you,
+
+00:07:02.420 --> 00:07:08.040
+Sasha, and Leo, and everybody in the IRC over
+
+00:07:08.040 --> 00:07:10.440
+the months here, just encouraging me to keep
+
+00:07:10.440 --> 00:07:12.460
+going when it was just seemed futile.
+
+00:07:13.580 --> 00:07:15.780
+Even though it just really turned into a
+
+00:07:15.780 --> 00:07:18.120
+brain dump, I appreciate getting the chance
+
+00:07:18.120 --> 00:07:20.320
+of feeling like that process is more
+
+00:07:20.320 --> 00:07:22.540
+documented now than it was before I did it.
+
+00:07:22.540 --> 00:07:23.440
+Hey, that's not nothing,
+
+00:07:23.440 --> 00:07:25.440
+right? And that's why we all do this.
+
+00:07:25.440 --> 00:07:28.360
+And I don't know, Floey really said it
+
+00:07:28.360 --> 00:07:30.520
+perfect. Like, I appreciate the chance to get
+
+00:07:30.520 --> 00:07:31.560
+to work on this with you.
+
+00:07:31.560 --> 00:07:32.700
+I learned so much.
+
+00:07:36.400 --> 00:07:38.980
+[Speaker 1]: Amazing. Well, you know what?
+
+00:07:39.020 --> 00:07:41.380
+Without further ado, I believe it's time for
+
+00:07:41.380 --> 00:07:42.840
+us to say goodbye for day 1.
+
+00:07:42.840 --> 00:07:45.340
+We will obviously be seeing you tomorrow at 9
+
+00:07:45.340 --> 00:07:48.740
+a.m. I think the schedule is actually stating
+
+00:07:48.740 --> 00:07:49.840
+we're starting at 8.59am.
+
+00:07:50.500 --> 00:07:51.220
+Is it correct?
+
+00:07:51.220 --> 00:07:53.980
+[Speaker 0]: Yes, I think the chrono tab will kick in.
+
+00:07:54.020 --> 00:07:56.020
+The video is like 6 minutes long.
+
+00:07:57.620 --> 00:07:58.660
+Actually, maybe I should,
+
+00:07:58.660 --> 00:08:00.640
+I'll give it an extra minute for safety,
+
+00:08:00.660 --> 00:08:03.660
+I think. Yeah, yeah. I'll tweak the timing.
+
+00:08:04.340 --> 00:08:06.420
+[Speaker 1]: I think that'd be wise for people we do not
+
+00:08:06.420 --> 00:08:08.460
+know basically 8.59 is when I brush my teeth
+
+00:08:08.460 --> 00:08:10.680
+before going live so we might be in a very
+
+00:08:10.680 --> 00:08:12.740
+awkward spot for me to introduce the talk if
+
+00:08:12.740 --> 00:08:15.420
+it happens. Well anyway folks thank you very
+
+00:08:15.420 --> 00:08:18.500
+much for watching and we'll see you tomorrow.
+
+00:08:19.360 --> 00:08:31.320
+Bye-bye! All right, I have closed the bbb oh
+
+00:08:31.320 --> 00:08:34.780
+it's restarting apparently oh it's we're back
+
+00:08:34.780 --> 00:08:37.480
+on the q and a between stephan and let's
+
+00:08:37.480 --> 00:08:47.420
+close this hey we are off
+
+00:08:44.700 --> 00:08:52.540
+[Speaker 3]: we are clear I am pausing the recording I
+
+00:08:52.540 --> 00:08:54.280
+don't have permission to do that in this
+
+00:08:54.280 --> 00:08:54.780
+room.
diff --git a/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt b/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt
new file mode 100644
index 00000000..96dac2e5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt
@@ -0,0 +1,364 @@
+WEBVTT captioned by sachac, checked by sachac
+
+00:00:00.000 --> 00:00:04.558
+Welcome to EmacsConf 2023, where we get to find out
+
+00:00:04.559 --> 00:00:07.697
+just how much we can do with a text editor.
+
+00:00:07.698 --> 00:00:10.316
+Just like last year, we have two tracks.
+
+00:00:10.317 --> 00:00:12.655
+There's a General track and a Development track,
+
+00:00:12.656 --> 00:00:14.234
+but really, you'll probably find
+
+00:00:14.235 --> 00:00:15.953
+interesting things on both tracks
+
+00:00:15.954 --> 00:00:18.492
+no matter what your level of experience is,
+
+00:00:18.493 --> 00:00:21.151
+so don't feel limited to one or the other.
+
+00:00:21.152 --> 00:00:24.710
+For Saturday, it's mostly Org Mode talks on the General track.
+
+00:00:24.711 --> 00:00:26.869
+The doc talk on the development track
+
+00:00:26.870 --> 00:00:30.128
+is about literate documentation with Emacs and Org Mode,
+
+00:00:30.129 --> 00:00:31.687
+and it's a general-audience talk
+
+00:00:31.688 --> 00:00:33.606
+even though it's in the Development track.
+
+00:00:33.607 --> 00:00:35.265
+I just ran out of space in the schedule.
+
+00:00:35.266 --> 00:00:38.504
+The best parts of EmacsConf are the conversations.
+
+00:00:38.505 --> 00:00:41.263
+The wiki has a page on how to watch and participate,
+
+00:00:41.264 --> 00:00:44.042
+and I'll give you a quick overview as well.
+
+00:00:44.043 --> 00:00:47.521
+You can watch both streams at live.emacsconf.org
+
+00:00:47.522 --> 00:00:50.400
+using free and open source software.
+
+00:00:50.401 --> 00:00:52.819
+Using a streaming media player like mpv
+
+00:00:52.820 --> 00:00:56.218
+seems to be the best way to watch in terms of performance
+
+00:00:56.219 --> 00:00:57.817
+but there are also web-based players
+
+00:00:57.818 --> 00:01:00.296
+just in case that's all you've got.
+
+00:01:00.297 --> 00:01:02.295
+The schedule shows the General track on top
+
+00:01:02.296 --> 00:01:03.974
+and the Development track on the bottom,
+
+00:01:03.975 --> 00:01:06.593
+so you can see what else is going on.
+
+00:01:06.594 --> 00:01:07.792
+As you're watching the talks,
+
+00:01:07.793 --> 00:01:10.691
+you can refer to the schedule in another window.
+
+00:01:10.692 --> 00:01:13.710
+Hover over the boxes to see the times and titles,
+
+00:01:13.711 --> 00:01:15.609
+and click on the boxes in the schedule
+
+00:01:15.610 --> 00:01:18.388
+to jump to the talk's page for more details.
+
+00:01:18.389 --> 00:01:20.927
+You can also get the schedule as an iCalendar file
+
+00:01:20.928 --> 00:01:23.186
+or as an Org file in different time zones.
+
+00:01:23.187 --> 00:01:24.685
+Many talks will be followed by
+
+00:01:24.686 --> 00:01:27.344
+live Q&A web conferences with the speaker,
+
+00:01:27.345 --> 00:01:30.423
+which will be done in BigBlueButton or BBB.
+
+00:01:30.424 --> 00:01:33.422
+These are indicated with a solid border on the schedule
+
+00:01:33.423 --> 00:01:36.581
+and by Q&A: BBB on the schedule page.
+
+00:01:36.582 --> 00:01:38.280
+You can join the web conference room
+
+00:01:38.281 --> 00:01:39.899
+by clicking on the BBB link
+
+00:01:39.900 --> 00:01:42.838
+on the schedule page or the talk's webpage.
+
+00:01:42.839 --> 00:01:45.757
+Then you can ask your questions yourself when the Q&A starts.
+
+00:01:45.758 --> 00:01:48.216
+To improve performance, please keep your webcam off
+
+00:01:48.217 --> 00:01:50.955
+and stay muted until it's your turn to talk.
+
+00:01:50.956 --> 00:01:53.574
+This year we're experimenting with automatically switching
+
+00:01:53.575 --> 00:01:55.933
+between talks and Q&A sessions,
+
+00:01:55.934 --> 00:01:59.132
+so the transitions on the stream might be a little sudden,
+
+00:01:59.133 --> 00:02:00.891
+but people in the BigBlueButton room
+
+00:02:00.892 --> 00:02:02.570
+can continue the conversation
+
+00:02:02.571 --> 00:02:05.409
+even after the talk moves off-stream.
+
+00:02:05.410 --> 00:02:08.768
+Other talks will have Q&A via Etherpad or IRC,
+
+00:02:08.769 --> 00:02:11.087
+depending on what the speakers prefer.
+
+00:02:11.088 --> 00:02:14.106
+This is indicated in the schedule with a dashed border
+
+00:02:14.107 --> 00:02:16.825
+and on the schedule page as well.
+
+00:02:16.826 --> 00:02:19.264
+Please ask your questions in the recommended places
+
+00:02:19.265 --> 00:02:21.783
+so that the speakers can easily see them.
+
+00:02:21.784 --> 00:02:24.502
+Some talks will have the Q&A after the event,
+
+00:02:24.503 --> 00:02:27.361
+so you can add your questions to their Etherpad.
+
+00:02:27.362 --> 00:02:29.460
+We'll e-mail the speakers afterwards
+
+00:02:29.461 --> 00:02:32.359
+and update the talk pages when they answer.
+
+00:02:32.360 --> 00:02:35.498
+The schedule pages and track pages have quick shortcuts
+
+00:02:35.499 --> 00:02:38.977
+so that you can find out more about talks, open the Etherpads,
+
+00:02:38.978 --> 00:02:42.536
+and join the Q&A sessions. The watch page has more tips
+
+00:02:42.537 --> 00:02:45.235
+on how to make the most of Q&A.
+
+00:02:45.236 --> 00:02:48.014
+If you can, please add notes and ask questions
+
+00:02:48.015 --> 00:02:51.173
+in the Etherpad for the talk. That makes it easier
+
+00:02:51.174 --> 00:02:52.832
+for everyone to share their notes,
+
+00:02:52.833 --> 00:02:55.771
+and speakers and hosts can read the questions from there.
+
+00:02:55.772 --> 00:02:59.790
+We'll copy the notes to the talk pages afterwards.
+
+00:02:59.791 --> 00:03:01.849
+We have one pad for each talk,
+
+00:03:01.850 --> 00:03:03.968
+so you can follow the links to get to the next one
+
+00:03:03.969 --> 00:03:07.127
+or go back to the schedule and get the link from there.
+
+00:03:07.128 --> 00:03:08.766
+If you have general feedback about
+
+00:03:08.767 --> 00:03:10.925
+the conference itself, please put it in
+
+00:03:10.926 --> 00:03:16.384
+pad.emacsconf.org/2023 , which is linked on each pad.
+
+00:03:16.385 --> 00:03:19.043
+You can also use this as a general community message board
+
+00:03:19.044 --> 00:03:22.182
+for things like Help Wanted.
+
+00:03:22.183 --> 00:03:25.319
+Internet Relay Chat or IRC can be another great way
+
+00:03:25.320 --> 00:03:27.960
+to be part of lots of conversations.
+
+00:03:27.961 --> 00:03:31.679
+You can use chat.emacsconf.org to join the IRC channels
+
+00:03:31.680 --> 00:03:34.518
+through your web browser. The tabs on the left can help you
+
+00:03:34.519 --> 00:03:37.077
+switch between the different channels.
+
+00:03:37.078 --> 00:03:40.339
+There's #emacsconf-gen for the General track
+
+00:03:40.340 --> 00:03:43.695
+and #emacsconf-dev for the Development track.
+
+00:03:43.696 --> 00:03:47.414
+If you need to reach us, you can join #emacsconf-org
+
+00:03:47.415 --> 00:03:52.393
+or e-mail emacsconf-org-private@gnu.org.
+
+00:03:52.394 --> 00:03:55.672
+You can use #emacsconf for hallway conversations.
+
+00:03:55.673 --> 00:03:57.791
+Of course, you can join any of these channels
+
+00:03:57.792 --> 00:04:00.070
+with your favourite IRC client.
+
+00:04:00.071 --> 00:04:03.909
+We're on the libera.chat network.
+
+00:04:03.910 --> 00:04:06.548
+Once again, we're going to be streaming with open captions
+
+00:04:06.549 --> 00:04:09.627
+for most of the talks this year, thanks to our speakers and
+
+00:04:09.628 --> 00:04:12.986
+captioning volunteers. The captioned talks are indicated
+
+00:04:12.987 --> 00:04:15.705
+on the schedule, and with any luck, we'll be posting
+
+00:04:15.706 --> 00:04:19.204
+transcripts on talk pages shortly after the talks start.
+
+00:04:19.205 --> 00:04:21.023
+If you need additional accommodations,
+
+00:04:21.024 --> 00:04:23.783
+please let us know in #emacsconf-org
+
+00:04:23.784 --> 00:04:25.682
+and we'll see if we can make things happen.
+
+00:04:25.683 --> 00:04:29.921
+If something goes down, we'll update status.emacsconf.org.
+
+00:04:29.922 --> 00:04:31.780
+If it doesn't look like we've noticed yet,
+
+00:04:31.781 --> 00:04:35.219
+please let us know in the #emacsconf-org IRC channel,
+
+00:04:35.220 --> 00:04:37.378
+where we will be quietly panicking.
+
+00:04:37.379 --> 00:04:40.077
+In all of these conversations, please keep in mind
+
+00:04:40.078 --> 00:04:43.076
+our guidelines for conduct. You can find them on the wiki,
+
+00:04:43.077 --> 00:04:46.556
+They basically boil down to: please be nice.
+
+00:04:46.557 --> 00:04:48.995
+If all goes well, the prerecorded talks and transcripts
+
+00:04:48.996 --> 00:04:50.994
+should be available from the talk pages
+
+00:04:50.995 --> 00:04:52.733
+shortly after they start playing,
+
+00:04:52.734 --> 00:04:54.632
+and we'll post the recordings of live talks
+
+00:04:54.633 --> 00:04:57.751
+and Q&A sessions within the next month or so.
+
+00:04:57.752 --> 00:05:00.270
+If you'd like to get an update, you can subscribe to
+
+00:05:00.271 --> 00:05:03.569
+the emacsconf-discuss mailing list.
+
+00:05:03.570 --> 00:05:05.128
+All right, let's get going.
+
+00:05:05.129 --> 00:05:07.528
+Leo Vivier is hosting the general track,
+
+00:05:07.529 --> 00:05:10.647
+and Amin Bandali hosting the development track.
+
+00:05:10.648 --> 00:05:13.366
+The other volunteers and I will run around mostly backstage,
+
+00:05:13.367 --> 00:05:15.445
+and you'll probably meet us in the closing remarks.
+
+00:05:15.446 --> 00:05:17.084
+That's also where we get to thank
+
+00:05:17.085 --> 00:05:18.723
+all the people and organizations
+
+00:05:18.724 --> 00:05:21.762
+who make EmacsConf even possible.
+
+00:05:21.763 --> 00:05:24.637
+Thanks for coming to EmacsConf 2023.
diff --git a/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt
new file mode 100644
index 00000000..b681859e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt
@@ -0,0 +1,371 @@
+WEBVTT
+
+
+00:00:16.200 --> 00:00:16.700
+[Speaker 0]: I see 2 questions on the panel already.
+
+00:00:22.660 --> 00:00:23.040
+Let's see, 1 asking how much Andrew uses
+
+00:00:26.320 --> 00:00:26.480
+these ripples remotely or versus on their own
+
+00:00:29.240 --> 00:00:29.740
+desktop. And another asking if this can be
+
+00:00:31.160 --> 00:00:31.660
+integrated with EGLOT.
+
+00:00:34.840 --> 00:00:35.060
+And I will note that it is very cool that
+
+00:00:36.580 --> 00:00:37.080
+this year we've had so many talks on Ripples.
+
+00:00:40.920 --> 00:00:41.140
+Just goes to show how powerful Emacs is and
+
+00:00:42.980 --> 00:00:43.140
+just how much or how far you can push it and
+
+00:00:44.040 --> 00:00:44.540
+how much you can do with it.
+
+00:00:53.460 --> 00:00:53.960
+And so see someone asking on IRC,
+
+00:00:57.780 --> 00:00:58.280
+if or how many people use GnuGeeks.
+
+00:01:01.400 --> 00:01:01.900
+Since we are talking about Scheme,
+
+00:01:05.740 --> 00:01:06.220
+GnuGeeks is a great platform slash operating
+
+00:01:10.380 --> 00:01:10.640
+system or distro for your test house,
+
+00:01:11.920 --> 00:01:12.420
+but also for servers and such.
+
+00:01:13.320 --> 00:01:13.780
+They do some impressive,
+
+00:01:15.240 --> 00:01:15.720
+amazing work. And it's all,
+
+00:01:19.400 --> 00:01:19.900
+pretty much all done in Gindugal's scheme.
+
+00:01:30.260 --> 00:01:30.760
+So very cool stuff. Bye.
+
+00:01:45.260 --> 00:01:45.760
+You
+
+00:03:19.940 --> 00:03:20.140
+I see another interesting question on the
+
+00:03:23.440 --> 00:03:23.940
+pad. How hard is it to add support for
+
+00:03:24.960 --> 00:03:25.460
+something other than Guile?
+
+00:03:28.040 --> 00:03:28.200
+And if it makes sense to contribute at this
+
+00:03:28.940 --> 00:03:29.440
+early stage of development?
+
+00:03:31.960 --> 00:03:32.220
+They said that they've written several
+
+00:03:34.000 --> 00:03:34.140
+packages for chicken skin before and they
+
+00:03:35.400 --> 00:03:35.900
+would like to try this 1 as well.
+
+00:05:26.380 --> 00:05:26.880
+I guess since Andrew isn't still here,
+
+00:05:29.480 --> 00:05:29.640
+and there was some chatter about GnuGeeks in
+
+00:05:32.400 --> 00:05:32.900
+the chat, maybe it might be nice for me to
+
+00:05:35.520 --> 00:05:35.800
+share my screen and plug Inukis for a little
+
+00:05:38.800 --> 00:05:39.000
+bit and introduce it or at least show its
+
+00:05:41.720 --> 00:05:41.980
+website to folks who may not have seen it yet
+
+00:05:43.380 --> 00:05:43.880
+so I'm going to try and do that now.
+
+00:05:45.260 --> 00:05:45.760
+You
+
+00:06:19.760 --> 00:06:20.260
+Okay, let's see if this works.
+
+00:06:33.540 --> 00:06:34.040
+Okay, so this is GNU Geeks' website.
+
+00:06:35.000 --> 00:06:35.500
+You can go to geeks.gnu.org.
+
+00:06:38.820 --> 00:06:39.180
+And they introduced it at the top.
+
+00:06:43.480 --> 00:06:43.980
+So it's a wholly free operating system or
+
+00:06:45.100 --> 00:06:45.600
+distribution of GNU Linux.
+
+00:06:48.600 --> 00:06:49.040
+Meaning that it only has free software
+
+00:06:50.840 --> 00:06:51.340
+packaged and no non-free packages,
+
+00:06:53.560 --> 00:06:53.940
+so it is endorsed by the FSF and the GNU
+
+00:06:56.640 --> 00:06:56.920
+project. As someone said in the chat,
+
+00:06:57.740 --> 00:06:58.240
+it's kind of like Nix,
+
+00:07:01.360 --> 00:07:01.860
+but instead built on GNU Gallop scheme.
+
+00:07:05.320 --> 00:07:05.820
+It has transactional upgrades and rollbacks.
+
+00:07:10.160 --> 00:07:10.380
+So if you do upgrade your system and let's
+
+00:07:11.180 --> 00:07:11.420
+say in the middle of it,
+
+00:07:13.200 --> 00:07:13.700
+your hardware fails or your power goes out,
+
+00:07:16.560 --> 00:07:16.720
+the likelihood of things being corrupted is
+
+00:07:18.840 --> 00:07:19.340
+very low because the upgrade is essentially
+
+00:07:21.560 --> 00:07:22.060
+prepared like in the background.
+
+00:07:24.140 --> 00:07:24.640
+And then pretty much atomically,
+
+00:07:26.780 --> 00:07:27.280
+the system is switched to it.
+
+00:07:30.400 --> 00:07:30.900
+And also if there is some kind of,
+
+00:07:32.400 --> 00:07:32.900
+sorry, I'm losing my voice here.
+
+00:07:34.840 --> 00:07:35.140
+If there is some kind of issue that makes
+
+00:07:35.800 --> 00:07:36.300
+your system unbootable,
+
+00:07:41.480 --> 00:07:41.660
+you could always go back to booting the
+
+00:07:44.600 --> 00:07:44.760
+previous revision of your system when you
+
+00:07:46.100 --> 00:07:46.600
+restart in the Grub bootloader.
+
+00:07:56.740 --> 00:07:57.180
+Yeah, so they have a nice blog where they
+
+00:07:59.340 --> 00:07:59.540
+regularly post updates and what's new in the
+
+00:08:01.000 --> 00:08:01.500
+project. You can go check that out.
+
+00:08:07.240 --> 00:08:07.500
+We also have a packages archive where you can
+
+00:08:09.360 --> 00:08:09.560
+see a list of all the software that has been
+
+00:08:11.060 --> 00:08:11.560
+packaged for GNU Geeks.
+
+00:08:13.620 --> 00:08:14.120
+It is an impressive list.
+
+00:08:16.440 --> 00:08:16.560
+I don't know how many tens of thousands of
+
+00:08:19.720 --> 00:08:20.220
+packages there are. Geeks has been growing
+
+00:08:22.360 --> 00:08:22.840
+very well. And you can search the packages
+
+00:08:29.380 --> 00:08:29.540
+here. And yeah, all kinds of things are
+
+00:08:31.800 --> 00:08:32.299
+packaged. Of course, GNU Emacs is packaged,
+
+00:08:37.260 --> 00:08:37.760
+along with many extensions or packages,
+
+00:08:41.039 --> 00:08:41.260
+GNU Emacs packages that are packaged as
+
+00:08:42.840 --> 00:08:43.340
+system packages for Geeks.
+
+00:08:46.960 --> 00:08:47.460
+Yeah, so definitely go check it out.
+
+00:08:55.680 --> 00:08:56.180
+You can use Geeks both as a standalone
+
+00:08:59.340 --> 00:08:59.840
+package manager, let's say on a Debian-based
+
+00:09:00.780 --> 00:09:01.280
+distribution like Triscale,
+
+00:09:06.180 --> 00:09:06.340
+for example, or you could install it like as
+
+00:09:08.900 --> 00:09:09.400
+a complete system distribution on its own.
+
+00:09:15.560 --> 00:09:16.000
+So the former is useful if you want to maybe
+
+00:09:18.080 --> 00:09:18.420
+get a taste for Geeks and try it out before
+
+00:09:21.140 --> 00:09:21.300
+fully committing to it and switching to it as
+
+00:09:24.620 --> 00:09:24.800
+your main distro. You can try it on top of
+
+00:09:27.720 --> 00:09:27.900
+any other distro pretty much and then you can
+
+00:09:31.080 --> 00:09:31.200
+of course install it on its own as well as a
+
+00:09:31.560 --> 00:09:32.060
+system distribution.
+
+00:09:50.940 --> 00:09:51.140
+Yeah, there are a bunch of manuals and
+
+00:09:53.040 --> 00:09:53.300
+reference cards and videos that you're
+
+00:09:55.920 --> 00:09:56.280
+welcome to watch. They have several mailing
+
+00:09:59.240 --> 00:09:59.440
+lists. It sounds like they have a wiki now as
+
+00:10:04.020 --> 00:10:04.400
+well. And the development is done on Gnu
+
+00:10:09.680 --> 00:10:10.180
+Savannah. If we go to savannah.gnu.org
+
+00:10:12.780 --> 00:10:13.280
+slash projects slash geeks,
+
+00:10:18.640 --> 00:10:18.820
+Yeah, the project is developed here and they
+
+00:10:21.300 --> 00:10:21.500
+have a bunch of repositories including the
+
+00:10:24.340 --> 00:10:24.840
+main 1 which is geeks.git
+
+00:10:28.200 --> 00:10:28.380
+itself. So yeah, folks are welcome to go
+
+00:10:32.380 --> 00:10:32.880
+check it out. Let's see,
+
+00:10:35.860 --> 00:10:36.260
+maybe we can go have a look at some package
+
+00:10:37.540 --> 00:10:37.840
+definitions, although I think we're almost
+
+00:10:38.940 --> 00:10:39.440
+out of time on the live stream.
+
+00:10:42.600 --> 00:10:43.100
+So, yeah, just quickly.
+
+00:10:45.280 --> 00:10:45.780
+Emacs to the CM has all the,
+
+00:10:48.640 --> 00:10:49.140
+Emacs packages or Emacs itself.
+
+00:10:52.120 --> 00:10:52.620
+And Emacs-xyz is where you'll find all the
+
+00:10:54.480 --> 00:10:54.980
+Emacs like ELPA packages,
+
+00:10:57.980 --> 00:10:58.260
+but package for use on GNU Geeks system or
+
+00:11:01.220 --> 00:11:01.360
+with GNU Geeks. And I think that's all the
+
+00:11:04.080 --> 00:11:04.580
+time that we have. So yeah,
+
+00:11:06.000 --> 00:11:06.300
+thanks for tuning in, folks.
+
+00:11:07.800 --> 00:11:08.300
+Please post your questions on the pad.
+
+00:11:09.280 --> 00:11:09.780
+We'll pass them on to Andrew.
+
+00:11:12.400 --> 00:11:12.720
+And yeah, hope you enjoy this.
+
+00:11:15.140 --> 00:11:15.360
+Definitely go check out Andrew's work and Gnu
+
+00:11:25.320 --> 00:11:25.580
+geeks as well. You are currently the only
+
+00:11:26.280 --> 00:11:26.780
+person in this conference.
diff --git a/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt
new file mode 100644
index 00000000..15bb79f9
--- /dev/null
+++ b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt
@@ -0,0 +1,68 @@
+WEBVTT
+
+
+00:00:02.120 --> 00:00:23.279
+Introduction
+
+00:00:23.280 --> 00:01:18.179
+Interactive development
+
+00:01:18.180 --> 00:02:53.719
+REPL: Read Eval Print Loop
+
+00:02:53.720 --> 00:04:07.599
+Long-lasting loops
+
+00:04:07.600 --> 00:05:23.159
+Not interruptible
+
+00:05:23.160 --> 00:05:51.479
+No protocol
+
+00:05:51.480 --> 00:07:25.859
+Not scalable
+
+00:07:25.860 --> 00:09:01.739
+nREPL
+
+00:09:01.740 --> 00:10:34.179
+Arei, Ares, and how to try
+
+00:10:34.180 --> 00:11:27.639
+Demo
+
+00:11:27.640 --> 00:12:32.459
+Continuations
+
+00:12:32.460 --> 00:13:33.419
+Reading from stdin
+
+00:13:33.420 --> 00:15:13.159
+Fancy example with continuations
+
+00:15:13.160 --> 00:17:42.059
+Guix API
+
+00:17:42.060 --> 00:17:57.019
+Support
+
+00:17:57.020 --> 00:18:46.219
+Future steps - Multiple simultaneous evaluations in different contexts
+
+00:18:46.220 --> 00:18:56.879
+Tree-sitter integration
+
+00:18:56.880 --> 00:19:22.759
+Full-fledged debugger
+
+00:19:22.760 --> 00:19:58.379
+FAQ - Does it support other Scheme implementations?
+
+00:19:58.380 --> 00:20:22.120
+Is it possible to use it with other text editors?
+
+00:20:22.121 --> 00:20:45.879
+Conclusion
+
+00:20:45.880 --> 00:21:00.680
+Contacts
diff --git a/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt
new file mode 100644
index 00000000..7037754b
--- /dev/null
+++ b/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt
@@ -0,0 +1,1044 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:02.120 --> 00:00:07.399
+Hello and welcome everyone on EmacsConf 2023.
+
+00:00:07.400 --> 00:00:08.719
+I'm Andrew Tropin.
+
+00:00:08.720 --> 00:00:11.919
+I work on operating systems and programming languages.
+
+00:00:11.920 --> 00:00:16.639
+Today, we discuss Lisps, Schemes, REPLs,
+
+00:00:16.640 --> 00:00:18.139
+interactive development,
+
+00:00:18.140 --> 00:00:23.279
+and how to make your own cozy development environment.
+
+NOTE Interactive development
+
+00:00:23.280 --> 00:00:26.319
+Let's start from interactive development.
+
+00:00:26.320 --> 00:00:29.519
+Lisps are famous for a nice
+
+00:00:29.520 --> 00:00:32.479
+Interactive Development Experience.
+
+00:00:32.480 --> 00:00:33.999
+They have REPLs.
+
+00:00:34.000 --> 00:00:40.119
+Emacs Lisp has its own Lisp machine,
+
+00:00:40.120 --> 00:00:44.719
+and a lot of cool IDE with different functionality
+
+00:00:44.720 --> 00:00:47.879
+is already here and providing
+
+00:00:47.880 --> 00:00:51.619
+a nice and pleasant experience.
+
+00:00:51.620 --> 00:00:56.839
+The question is, is it enough?
+
+00:00:56.840 --> 00:00:59.920
+In most cases, yes, but for some languages,
+
+00:00:59.921 --> 00:01:04.839
+we have some white spaces, some missing pieces.
+
+00:01:04.840 --> 00:01:08.299
+And for example, in Scheme world,
+
+00:01:08.300 --> 00:01:10.879
+we already have a few tools.
+
+00:01:10.880 --> 00:01:14.599
+We have REPL, we have integration for REPL in Emacs,
+
+00:01:14.600 --> 00:01:16.679
+but is it enough?
+
+00:01:16.680 --> 00:01:18.179
+Let's see.
+
+NOTE REPL: Read Eval Print Loop
+
+00:01:18.180 --> 00:01:22.839
+We know that Emacs is very good for Lisps and REPL.
+
+00:01:22.840 --> 00:01:26.039
+Lisp and Emacs should be a perfect setup.
+
+00:01:26.040 --> 00:01:30.079
+But let's see how REPL basically works.
+
+00:01:30.080 --> 00:01:34.799
+It's an event loop which does three things.
+
+00:01:34.800 --> 00:01:37.279
+It reads an expression, it evaluates the expression,
+
+00:01:37.280 --> 00:01:40.739
+and it prints the result.
+
+00:01:40.740 --> 00:01:47.279
+We can take a simple expression, input it into REPL,
+
+00:01:47.280 --> 00:01:48.959
+and evaluate it and see the result.
+
+00:01:48.960 --> 00:01:50.819
+Very nice, very convenient.
+
+00:01:50.820 --> 00:01:55.339
+You can experiment and see immediately what is happening.
+
+00:01:55.340 --> 00:01:57.759
+You can even run a long-running process
+
+00:01:57.760 --> 00:01:58.919
+which does something.
+
+00:01:58.920 --> 00:02:07.199
+You can interrupt it and everything will be okay.
+
+00:02:07.200 --> 00:02:08.639
+But the problem appears
+
+00:02:08.640 --> 00:02:11.659
+when you start to develop a bigger project.
+
+00:02:11.660 --> 00:02:14.039
+And in most cases, you don't do
+
+00:02:14.240 --> 00:02:16.399
+your whole development in REPL.
+
+00:02:16.400 --> 00:02:18.460
+You do only a small part of it.
+
+00:02:18.461 --> 00:02:20.679
+In most cases, you just write
+
+00:02:20.680 --> 00:02:22.919
+the source code in text files,
+
+00:02:22.920 --> 00:02:26.399
+and after that, you run those snippets of code
+
+00:02:26.400 --> 00:02:30.520
+from those text files, or run the whole project.
+
+00:02:30.721 --> 00:02:33.719
+It's not very convenient to copy and paste
+
+00:02:33.720 --> 00:02:36.039
+every time the snippets of code to the REPL,
+
+00:02:36.040 --> 00:02:38.879
+see the result, modify the snippet of code,
+
+00:02:38.880 --> 00:02:41.199
+copy it again, and so on.
+
+00:02:41.200 --> 00:02:44.039
+So people invented some integration
+
+00:02:44.040 --> 00:02:46.079
+between REPL and your text editor.
+
+00:02:46.080 --> 00:02:51.599
+So you can evaluate expressions inside your text editor
+
+00:02:51.600 --> 00:02:53.719
+and see the result here.
+
+NOTE Long-lasting loops
+
+00:02:53.720 --> 00:02:56.679
+Works good so far, but what happens
+
+00:02:56.680 --> 00:03:02.299
+if we run a long-lasting loop,
+
+00:03:02.300 --> 00:03:04.999
+which does a lot of operations.
+
+00:03:05.000 --> 00:03:07.839
+As you can see here with a simple example,
+
+00:03:07.840 --> 00:03:13.599
+the output of the function,
+
+00:03:13.600 --> 00:03:16.759
+stdout of the function is presented here,
+
+00:03:16.760 --> 00:03:18.799
+and the resulting value is here.
+
+00:03:18.800 --> 00:03:22.359
+If you run a long-running process,
+
+00:03:22.360 --> 00:03:24.639
+you don't see anything happening.
+
+00:03:24.640 --> 00:03:29.259
+And you see there's a watch instead of my cursor.
+
+00:03:29.260 --> 00:03:33.719
+Maybe you don't see it, but nothing actually happens,
+
+00:03:33.720 --> 00:03:36.379
+at least from the point of view of the user.
+
+00:03:36.380 --> 00:03:38.399
+But if we interrupt the evaluation,
+
+00:03:38.400 --> 00:03:41.439
+we will see that some process in the background
+
+00:03:41.440 --> 00:03:44.239
+was launched, but we didn't see anything.
+
+00:03:44.240 --> 00:03:51.039
+Because the REPL is a single-threaded blocking process,
+
+00:03:51.040 --> 00:03:54.319
+which reads stdin and prints stdout,
+
+00:03:54.320 --> 00:03:55.679
+make the integration
+
+00:03:55.680 --> 00:03:58.540
+between the REPL and your text editor
+
+00:03:58.541 --> 00:04:02.919
+is not an easy task.
+
+00:04:02.920 --> 00:04:04.320
+And even if you do it,
+
+00:04:04.321 --> 00:04:07.599
+you have a lot of downsides, usually.
+
+NOTE Not interruptible
+
+00:04:07.600 --> 00:04:13.679
+First of all, the process is not interruptible.
+
+00:04:13.680 --> 00:04:18.479
+If you have a remote process which listens on the socket
+
+00:04:18.480 --> 00:04:21.939
+to which you connect from your development environment,
+
+00:04:21.940 --> 00:04:25.479
+and you run some infinite loop, for example,
+
+00:04:25.480 --> 00:04:28.299
+you can't interrupt it.
+
+00:04:28.300 --> 00:04:31.239
+Because interruption is done via signals,
+
+00:04:31.240 --> 00:04:35.039
+and signals to remote processes are not usually
+
+00:04:35.040 --> 00:04:38.759
+the thing in such integrations.
+
+NOTE Output is not interactive
+
+00:04:38.760 --> 00:04:41.159
+Output is also not interactive.
+
+00:04:41.160 --> 00:04:45.319
+Usually, for example, here you can see
+
+00:04:45.320 --> 00:04:47.799
+when I evaluate the expression,
+
+00:04:47.800 --> 00:04:51.119
+the output is captured on the evaluation side,
+
+00:04:51.120 --> 00:04:53.719
+and after that, after the whole evaluation
+
+00:04:53.720 --> 00:04:56.179
+of the whole expression finished,
+
+00:04:56.180 --> 00:05:06.759
+I get the result, all the stdout at once.
+
+00:05:06.760 --> 00:05:09.919
+And if I run the process which evaluates for 5 seconds,
+
+00:05:09.920 --> 00:05:13.780
+I will see the first signs of the life
+
+00:05:13.781 --> 00:05:17.039
+only after 5 seconds of evaluation.
+
+00:05:17.040 --> 00:05:23.159
+Okay, what else?
+
+NOTE No protocol
+
+00:05:23.160 --> 00:05:26.119
+When you do such integrations, you have no protocol,
+
+00:05:26.120 --> 00:05:29.759
+you have just stdin and stdout.
+
+00:05:29.760 --> 00:05:32.919
+You print to stdin from your text editor.
+
+00:05:32.920 --> 00:05:36.679
+You read from stdout of the process.
+
+00:05:36.680 --> 00:05:40.339
+It's hard to tell if evaluation is finished,
+
+00:05:40.340 --> 00:05:47.319
+if it requires stdin, and how to extend the REPL
+
+00:05:47.320 --> 00:05:51.479
+to make it more featureful, and so on.
+
+NOTE Not scalable
+
+00:05:51.480 --> 00:05:57.359
+And also, such integrations are usually not very scalable.
+
+00:05:57.360 --> 00:06:14.699
+For example, if you want to have a completion,
+
+00:06:14.700 --> 00:06:17.460
+you type something, you have the completion. Cool.
+
+00:06:17.461 --> 00:06:22.039
+But if you run the process and at the same time
+
+00:06:22.040 --> 00:06:24.620
+try to have a completion, you don't have it,
+
+00:06:24.621 --> 00:06:29.799
+because the evaluation is in progress,
+
+00:06:29.800 --> 00:06:33.279
+and you can't calculate the completion candidates
+
+00:06:33.280 --> 00:06:35.519
+at the same time. To make it more obvious,
+
+00:06:35.520 --> 00:06:41.019
+I will start a completion here.
+
+00:06:41.020 --> 00:06:43.279
+You see the completion pop-ups.
+
+00:06:43.280 --> 00:06:46.159
+I start the evaluation process,
+
+00:06:46.160 --> 00:06:49.859
+and when I try to complete something,
+
+00:06:49.860 --> 00:06:53.119
+the evaluation freezes and there is no completion.
+
+00:06:53.120 --> 00:06:55.479
+Not very convenient.
+
+00:06:55.480 --> 00:06:58.119
+Usually, you have some long-running processes
+
+00:06:58.120 --> 00:07:01.399
+and you want them to continue while you have
+
+00:07:01.400 --> 00:07:08.579
+your go to definition, completion, and other things.
+
+00:07:08.580 --> 00:07:13.659
+Overall, those issues make it quite inconvenient
+
+00:07:13.660 --> 00:07:18.419
+to integrate REPL in text editors or development environments,
+
+00:07:18.420 --> 00:07:21.379
+so you need something else
+
+00:07:21.380 --> 00:07:25.859
+to make the work comfortable.
+
+NOTE nREPL
+
+00:07:25.860 --> 00:07:28.979
+There is already a solution called nREPL.
+
+00:07:28.980 --> 00:07:31.119
+It's a synchronous protocol which allows
+
+00:07:31.120 --> 00:07:34.019
+to send operations to the server
+
+00:07:34.020 --> 00:07:37.759
+and receive responses in a synchronous manner.
+
+00:07:37.760 --> 00:07:42.159
+And here is a simple example of a few operations.
+
+00:07:42.160 --> 00:07:45.079
+First one is cloning the existing session,
+
+00:07:45.080 --> 00:07:49.240
+and as a response you will get a new session.
+
+00:07:49.241 --> 00:07:52.099
+Also you send the evaluation request with code
+
+00:07:52.100 --> 00:07:55.639
+that you want to evaluate, and you get two responses.
+
+00:07:55.640 --> 00:08:00.600
+First one says that output is captured
+
+00:08:00.601 --> 00:08:02.839
+and it's equal to "hi\n",
+
+00:08:02.840 --> 00:08:06.560
+and after that, you receive an "Evaluation completed",
+
+00:08:06.561 --> 00:08:12.439
+the value of this expression.
+
+00:08:12.440 --> 00:08:14.079
+This protocol was developed
+
+00:08:14.080 --> 00:08:15.879
+for CIDER development environment.
+
+00:08:15.880 --> 00:08:18.759
+It's a Clojure development environment for Emacs.
+
+00:08:18.760 --> 00:08:22.859
+It's very cool, featureful, reliable,
+
+00:08:22.860 --> 00:08:26.899
+and I would say production-ready.
+
+00:08:26.900 --> 00:08:31.499
+A lot of professional Clojure developers use it.
+
+00:08:31.500 --> 00:08:33.239
+The nREPL protocol is very simple.
+
+00:08:33.240 --> 00:08:38.219
+It has a few operations out of the box,
+
+00:08:38.220 --> 00:08:46.479
+and you can extend it with any arbitrary operation you want.
+
+00:08:46.480 --> 00:08:53.819
+I work a lot on Guix codebase and other Scheme projects,
+
+00:08:53.820 --> 00:08:57.299
+so the experience I had previously with nREPL
+
+00:08:57.300 --> 00:08:59.399
+was not satisfying. I decided
+
+00:08:59.400 --> 00:09:01.739
+to just implement nREPL protocol.
+
+NOTE Arei, Ares, and how to try
+
+00:09:01.740 --> 00:09:05.719
+First of all, I implemented nREPL server in Guile.
+
+00:09:05.720 --> 00:09:11.339
+I called it `guile-ares-rs`, and used it
+
+00:09:11.340 --> 00:09:13.959
+with a generic nREPL client for Emacs.
+
+00:09:13.960 --> 00:09:14.719
+It worked.
+
+00:09:14.720 --> 00:09:18.639
+It had some rough edges, but overall it was okay.
+
+00:09:18.640 --> 00:09:21.639
+And after that, to add more features
+
+00:09:21.640 --> 00:09:25.079
+to make the implementation more complete,
+
+00:09:25.080 --> 00:09:33.219
+I wrote my own nREPL client for Emacs and called it `arei`.
+
+00:09:33.220 --> 00:09:40.179
+And I got almost complete Guile IDE in two months.
+
+00:09:40.180 --> 00:09:45.319
+So `ares-rs` is nREPL server implementation.
+
+00:09:45.320 --> 00:09:49.679
+`arei` is Emacs client, which uses the same nREPL protocol.
+
+00:09:49.680 --> 00:09:54.439
+It utilizes `sesman` package for managing sessions,
+
+00:09:54.440 --> 00:10:00.079
+the association of buffers with nREPL connection.
+
+00:10:00.080 --> 00:10:04.379
+It has some roots.
+
+00:10:04.380 --> 00:10:06.639
+The implementation has some roots
+
+00:10:06.640 --> 00:10:09.979
+in Geiser, CIDER, Monroe, and Rail.
+
+00:10:09.980 --> 00:10:15.279
+I took small snippets for some parts of functionality.
+
+00:10:15.280 --> 00:10:19.479
+I used the CAPF and xref infrastructure
+
+00:10:19.480 --> 00:10:23.079
+for completion at point and cross-reference capabilities.
+
+00:10:23.080 --> 00:10:27.679
+And by the time of conference, I hope
+
+00:10:27.680 --> 00:10:30.199
+that README will be complete enough
+
+00:10:30.200 --> 00:10:34.179
+so you will be able to try it yourself.
+
+NOTE Demo
+
+00:10:34.180 --> 00:10:42.679
+Let's see what is possible with it already.
+
+00:10:42.680 --> 00:10:46.719
+Let's connect to nREPL server.
+
+00:10:51.900 --> 00:10:56.280
+After that, you can evaluate the expression.
+
+00:10:56.281 --> 00:11:02.319
+And you see the stdout and the result.
+
+00:11:02.320 --> 00:11:04.719
+Very nice, very convenient.
+
+00:11:04.720 --> 00:11:08.659
+You have different expression, you evaluate it,
+
+00:11:08.660 --> 00:11:10.359
+you get the value of the evaluation.
+
+00:11:10.360 --> 00:11:12.279
+You can run an infinite loop
+
+00:11:12.280 --> 00:11:15.639
+which prints to stderr and stdout
+
+00:11:15.640 --> 00:11:18.599
+and you see all necessary stuff.
+
+00:11:18.600 --> 00:11:19.299
+Very cool.
+
+00:11:19.300 --> 00:11:21.959
+But also, you can interrupt the evaluation,
+
+00:11:21.960 --> 00:11:25.159
+which is very convenient if you accidentally
+
+00:11:25.160 --> 00:11:27.639
+run an infinite loop.
+
+NOTE Continuations
+
+00:11:27.640 --> 00:11:32.939
+Also, do you remember here we have a few more examples
+
+00:11:32.940 --> 00:11:34.079
+that we didn't try yet?
+
+00:11:34.080 --> 00:11:39.159
+For example, on usual REPL implementation,
+
+00:11:39.160 --> 00:11:47.599
+if I evaluate this expression, I get return value.
+
+00:11:47.600 --> 00:11:50.759
+I make a continuation and save it to this variable
+
+00:11:50.760 --> 00:11:52.859
+and I try to call this evaluation
+
+00:11:52.860 --> 00:11:55.339
+and I get an exception,
+
+00:11:55.340 --> 00:11:58.399
+because the environment in which this continuation
+
+00:11:58.400 --> 00:12:03.479
+was created was different and it has redefined
+
+00:12:03.480 --> 00:12:06.159
+stdout and stderr to capture it.
+
+00:12:06.160 --> 00:12:08.979
+But when I run it one more time,
+
+00:12:08.980 --> 00:12:12.199
+when I resume the continuation,
+
+00:12:12.200 --> 00:12:15.799
+the environment changed and it doesn't work.
+
+00:12:15.800 --> 00:12:17.419
+What happens in `arei`?
+
+00:12:17.420 --> 00:12:21.759
+I define continuation, I save the continuation
+
+00:12:21.760 --> 00:12:23.479
+for the simple expression
+
+00:12:23.480 --> 00:12:27.279
+and I resume the continuation with a new argument,
+
+00:12:27.280 --> 00:12:30.139
+and you can see at the top of the screen
+
+00:12:30.140 --> 00:12:32.459
+that it works perfectly fine.
+
+NOTE Reading from stdin
+
+00:12:32.460 --> 00:12:35.559
+Also, with a usual REPL implementation,
+
+00:12:35.560 --> 00:12:40.319
+let's see what happens when we have a process
+
+00:12:40.320 --> 00:12:41.919
+which reads from stdin.
+
+00:12:41.920 --> 00:12:48.099
+I evaluate the expression and nothing visible happens.
+
+00:12:48.100 --> 00:12:52.999
+I can try to type `C-g`, `C-c`,
+
+00:12:53.000 --> 00:12:56.559
+and after some time it will say user interrupt.
+
+00:12:56.560 --> 00:13:00.439
+What actually I expect in such a case
+
+00:13:00.440 --> 00:13:04.679
+to have a minibuffer which prompts me for the input.
+
+00:13:04.680 --> 00:13:10.019
+When I evaluate the same expression in the `arei`,
+
+00:13:10.020 --> 00:13:12.199
+you see the prompt at the minibuffer
+
+00:13:12.200 --> 00:13:21.899
+and here I can tell, "Hello I'm a message from minibuffer".
+
+00:13:21.900 --> 00:13:26.099
+Cool. You will see that this message is printed to stdout,
+
+00:13:26.100 --> 00:13:28.679
+and unspecified was returned
+
+00:13:28.680 --> 00:13:33.419
+as a result of this expression.
+
+NOTE Fancy example with continuations
+
+00:13:33.420 --> 00:13:37.319
+Let's make some fancy example with continuations.
+
+00:13:37.320 --> 00:13:45.079
+Continuations is a very cool mechanism
+
+00:13:45.080 --> 00:13:47.999
+which is not the topic of today's talk,
+
+00:13:48.000 --> 00:13:50.999
+but you can find a lot of interesting information
+
+00:13:51.000 --> 00:13:54.439
+in Scheme documentation or in related books,
+
+00:13:54.440 --> 00:13:58.339
+and I advise you to do it because it's really nice thing
+
+00:13:58.340 --> 00:14:00.119
+that is actually applicable
+
+00:14:00.120 --> 00:14:03.519
+in many different programming languages.
+
+00:14:03.520 --> 00:14:05.199
+Here you can see the infinite loop
+
+00:14:05.200 --> 00:14:09.159
+which just prints values increasing one by one.
+
+00:14:09.160 --> 00:14:13.299
+And here we save a continuation on each iteration.
+
+00:14:13.300 --> 00:14:18.059
+I can call the continuation
+
+00:14:18.060 --> 00:14:21.939
+and it will resume from the previous saved step.
+
+00:14:21.940 --> 00:14:27.679
+And you can see, it resumed from the same step
+
+00:14:27.680 --> 00:14:31.640
+we interrupted earlier, but we provided a new value for it.
+another value for it.
+
+00:14:31.641 --> 00:14:33.920
+We can provide another value
+
+00:14:33.921 --> 00:14:39.199
+and it resumed from the same spot it was saved earlier.
+
+00:14:39.200 --> 00:14:42.579
+But I also can provide a `read-i` value
+
+00:14:42.580 --> 00:14:45.199
+and if I provide `read-i` value,
+
+00:14:45.200 --> 00:14:50.779
+the infinite loop will read the input from stdin
+
+00:14:50.780 --> 00:14:53.319
+and will continue the evaluation
+
+00:14:53.320 --> 00:14:56.679
+with a different `i` provided in this input.
+
+00:14:56.680 --> 00:15:03.039
+So let's try to type some arbitrary value
+
+00:15:03.040 --> 00:15:07.519
+and you see that the loop continued with this value.
+
+00:15:07.520 --> 00:15:08.039
+Very nice.
+
+00:15:08.040 --> 00:15:13.159
+And every time we could easily interrupt it.
+
+NOTE Guix API
+
+00:15:13.160 --> 00:15:17.319
+Okay, what most annoying thing that I had previously
+
+00:15:17.320 --> 00:15:19.339
+with the usual REPL implementation
+
+00:15:19.340 --> 00:15:22.759
+that I have a quite nice Guix API
+
+00:15:22.760 --> 00:15:27.579
+where I can build packages, systems and other stuff.
+
+00:15:27.580 --> 00:15:35.359
+But if I evaluate this expression, I will get an error.
+
+00:15:35.360 --> 00:15:38.039
+Okay. I will get an error
+
+00:15:38.040 --> 00:15:44.479
+because I don't have an appropriate environment.
+
+00:15:44.480 --> 00:15:51.579
+But what I can do, I can connect to the remote REPL
+
+00:15:51.580 --> 00:15:55.059
+by creating a server with `guix repl --listen` command
+
+00:15:55.060 --> 00:15:58.619
+and connecting to it with `geiser-connect` command.
+
+00:15:58.620 --> 00:16:01.819
+And now I can evaluate this expression.
+
+00:16:01.820 --> 00:16:03.359
+Right?
+
+00:16:03.360 --> 00:16:10.479
+Wow.
+
+00:16:10.480 --> 00:16:14.339
+Okay.
+
+00:16:14.340 --> 00:16:19.039
+It actually doesn't matter for my example.
+
+00:16:19.040 --> 00:16:22.879
+I will explain how it doesn't work easily.
+
+00:16:22.880 --> 00:16:26.519
+This is a long-running process which prints something
+
+00:16:26.520 --> 00:16:29.579
+and it can take up to a few minutes.
+
+00:16:29.580 --> 00:16:33.359
+And for the whole few minutes I don't see any results,
+
+00:16:33.360 --> 00:16:38.719
+the same as with this infinite loop which prints to stdout
+
+00:16:38.720 --> 00:16:42.199
+but I don't see anything interactively.
+
+00:16:42.200 --> 00:16:45.619
+With `arei`, I can run
+
+00:16:45.620 --> 00:16:47.920
+the evaluation of the same expression,
+
+00:16:51.440 --> 00:16:54.119
+and you will see instantly
+
+00:16:54.120 --> 00:17:00.200
+that stdout is presented here in slightly yellowish color.
+
+00:17:00.201 --> 00:17:02.920
+I can interrupt the evaluation
+
+00:17:02.921 --> 00:17:06.039
+if I don't want to wait until it's finished,
+
+00:17:06.040 --> 00:17:15.779
+and just after that, I can evaluate another value.
+
+00:17:15.780 --> 00:17:23.359
+So that's cool.
+
+00:17:23.360 --> 00:17:25.959
+And let's see one more thing.
+
+00:17:25.960 --> 00:17:30.339
+We have an infinite loop and we have some completion here.
+
+00:17:30.340 --> 00:17:32.579
+And completion still works,
+
+00:17:32.580 --> 00:17:33.659
+very nice,
+
+00:17:33.660 --> 00:17:40.259
+while the infinite loop is running.
+
+00:17:40.260 --> 00:17:42.059
+Okay.
+
+NOTE Support
+
+00:17:42.060 --> 00:17:44.919
+Actually it took me around two months
+
+00:17:44.920 --> 00:17:48.039
+of full-time work funded by my own savings,
+
+00:17:48.040 --> 00:17:51.599
+and you can support and help to the project
+
+00:17:51.600 --> 00:17:57.019
+using OpenCollective or by contributing on SourceHut.
+
+NOTE Future steps - Multiple simultaneous evaluations in different contexts
+
+00:17:57.020 --> 00:17:58.699
+The future steps for the project
+
+00:17:58.700 --> 00:18:03.674
+include an experimental workflow where you have
+
+00:18:03.675 --> 00:18:07.539
+multiple simultaneous evaluation in different contexts.
+
+00:18:07.540 --> 00:18:11.959
+For example, you have Fibers, you have Goblins,
+
+00:18:11.960 --> 00:18:16.919
+you have some HTTP server or some other thing,
+
+00:18:16.920 --> 00:18:22.119
+and you want to run all of them independently
+
+00:18:22.120 --> 00:18:25.319
+in slightly isolated sessions,
+
+00:18:25.320 --> 00:18:29.799
+and you want to have the ability
+
+00:18:29.800 --> 00:18:30.959
+to still interact with them.
+
+00:18:30.960 --> 00:18:33.979
+For example, if they require standard input
+
+00:18:33.980 --> 00:18:39.239
+or something else, you want to be able to provide it.
+
+00:18:39.240 --> 00:18:42.519
+You want to see the stderr and stdout
+
+00:18:42.520 --> 00:18:46.219
+of those long-running processes and so on.
+
+NOTE Tree-sitter integration
+
+00:18:46.220 --> 00:18:50.239
+The second thing is tree-sitter integration
+
+00:18:50.240 --> 00:18:53.399
+for better syntax highlighting, code navigation,
+
+00:18:53.400 --> 00:18:56.879
+and other features.
+
+NOTE Full-fledged debugger
+
+00:18:56.880 --> 00:19:01.399
+And after that, probably we will do a full-fledged debugger
+
+00:19:01.400 --> 00:19:06.239
+so you can jump expressions one by one
+
+00:19:06.240 --> 00:19:10.779
+and see the results and see some intermediate values
+
+00:19:10.780 --> 00:19:13.079
+during the evaluation.
+
+00:19:13.080 --> 00:19:14.479
+And it's very possible
+
+00:19:14.480 --> 00:19:17.079
+because nREPL is a very extensible protocol
+
+00:19:17.080 --> 00:19:18.199
+and you can implement
+
+00:19:18.200 --> 00:19:22.759
+whatever you want on top of it.
+
+NOTE FAQ - Does it support other Scheme implementations?
+
+00:19:22.760 --> 00:19:27.079
+I will answer two probably very frequent questions.
+
+00:19:27.080 --> 00:19:30.499
+Does it support other Scheme implementations?
+
+00:19:30.500 --> 00:19:32.279
+At the moment, it doesn't,
+
+00:19:32.280 --> 00:19:36.519
+but the Scheme implementation is not restricted.
+
+00:19:36.520 --> 00:19:40.639
+You have a server which is implemented in your language
+
+00:19:40.640 --> 00:19:43.974
+and you have a client--in our case, `arei`--
+
+00:19:43.975 --> 00:19:48.319
+which communicates with this protocol.
+
+00:19:48.320 --> 00:19:52.359
+So if you implement nREPL server in a different language,
+
+00:19:52.360 --> 00:19:58.379
+it should work with already implemented `arei` client.
+
+NOTE Is it possible to use it with other text editors?
+
+00:19:58.380 --> 00:20:04.079
+And is it possible to use the same functionality
+
+00:20:04.080 --> 00:20:06.999
+in other text editors, for example in VS Code,
+
+00:20:07.000 --> 00:20:08.679
+Vim, whatever?
+
+00:20:08.680 --> 00:20:13.799
+Yes, it's possible and the case is similar here.
+
+00:20:13.800 --> 00:20:16.599
+You have already implemented nREPL server
+
+00:20:16.600 --> 00:20:19.359
+and you can write your own nREPL client
+
+00:20:19.360 --> 00:20:22.120
+in a different text editor and it will work.
+
+NOTE Conclusion
+
+00:20:22.121 --> 00:20:26.759
+I would like to thank the authors and maintainers
+
+00:20:26.760 --> 00:20:30.439
+and contributors of Guile, Geiser, CIDER, Clojure,
+
+00:20:30.440 --> 00:20:33.359
+and Emacs, and all other people
+
+00:20:33.360 --> 00:20:38.779
+who are somehow related to the work on those projects
+
+00:20:38.780 --> 00:20:42.079
+involved in this talk.
+
+00:20:42.080 --> 00:20:45.879
+And I hope the Scheme programming will be enjoyable.
+
+NOTE Contacts
+
+00:20:45.880 --> 00:20:47.239
+If you want to contact me,
+
+00:20:47.240 --> 00:20:49.799
+join #tropin IRC channel at libera.chat,
+
+00:20:49.800 --> 00:20:53.039
+or drop me a message via email or feediverse
+
+00:20:53.040 --> 00:20:55.879
+using `andrew@trop.in` handle.
+
+00:20:55.880 --> 00:21:00.680
+I will see you in a bit in Q&A session.
diff --git a/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt
new file mode 100644
index 00000000..2c35ee7e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt
@@ -0,0 +1,1871 @@
+WEBVTT
+
+
+00:00:05.940 --> 00:00:06.060
+[Speaker 1]: Yeah, we're live. So whoever's in the
+
+00:00:08.240 --> 00:00:08.380
+background might be able to see you live in
+
+00:00:09.900 --> 00:00:10.080
+about 10 seconds as soon as the stream
+
+00:00:11.380 --> 00:00:11.880
+catches up. Hi Jacob, how are you doing?
+
+00:00:12.360 --> 00:00:12.540
+[Speaker 0]: Got that? We're live. I'm doing well.
+
+00:00:13.080 --> 00:00:13.580
+How are you doing today?
+
+00:00:16.200 --> 00:00:16.400
+[Speaker 1]: I am doing well and this is the very last
+
+00:00:17.960 --> 00:00:18.160
+talk of the day so I'm very excited not
+
+00:00:20.020 --> 00:00:20.279
+because it finishes but because I am tired
+
+00:00:22.080 --> 00:00:22.580
+[Speaker 0]: Yeah very understandable.
+
+00:00:23.860 --> 00:00:24.320
+Well thanks for all of your hard work.
+
+00:00:26.180 --> 00:00:26.320
+We all really appreciate it and all the other
+
+00:00:26.320 --> 00:00:26.820
+organizers.
+
+00:00:28.980 --> 00:00:29.160
+[Speaker 1]: and need some sleep. Well on behalf of all
+
+00:00:30.980 --> 00:00:31.220
+the organizers thank you but you know it all
+
+00:00:33.840 --> 00:00:34.120
+it makes it all worthwhile when we see the
+
+00:00:36.280 --> 00:00:36.400
+valuable contribution that every single 1 of
+
+00:00:37.160 --> 00:00:37.660
+our speakers are making,
+
+00:00:39.559 --> 00:00:39.920
+not only for recording their talks,
+
+00:00:42.180 --> 00:00:42.380
+which is a tough demand on people to say,
+
+00:00:43.420 --> 00:00:43.920
+oh, if you want to go to EmacsConf,
+
+00:00:45.480 --> 00:00:45.980
+you might want to record your talk.
+
+00:00:48.960 --> 00:00:49.120
+But then almost all of you do it and you
+
+00:00:50.440 --> 00:00:50.640
+spend a lot of time with us answering
+
+00:00:51.580 --> 00:00:51.940
+questions. So we couldn't do it.
+
+00:00:53.680 --> 00:00:53.900
+You know, we wouldn't be spending as much
+
+00:00:54.960 --> 00:00:55.460
+energy, half as much energy,
+
+00:00:58.320 --> 00:00:58.660
+if we didn't believe that it was worth it.
+
+00:01:01.120 --> 00:01:01.320
+So now it's me thanking you on behalf of all
+
+00:01:01.480 --> 00:01:01.980
+the speakers.
+
+00:01:03.900 --> 00:01:04.200
+[Speaker 0]: Well thank you that's part of what I wanted
+
+00:01:06.040 --> 00:01:06.340
+to get across in my talk was that coming
+
+00:01:08.800 --> 00:01:09.000
+together and sharing ourselves and you know
+
+00:01:11.140 --> 00:01:11.320
+not just putting little little essays out
+
+00:01:13.020 --> 00:01:13.380
+there and single videos but coming together
+
+00:01:15.720 --> 00:01:15.940
+as a community you know sharing ourselves our
+
+00:01:18.640 --> 00:01:18.800
+faces our voices you know it really brings us
+
+00:01:19.840 --> 00:01:20.340
+together and makes everyone stronger.
+
+00:01:22.940 --> 00:01:23.400
+[Speaker 1]: Exactly, and I think it's been a recurring
+
+00:01:27.280 --> 00:01:27.440
+theme. Most of the talks we have at
+
+00:01:28.840 --> 00:01:29.200
+EmacsConf, they're usually about sharing,
+
+00:01:30.580 --> 00:01:30.800
+obviously, sharing the knowledge that they've
+
+00:01:32.960 --> 00:01:33.340
+acquired, either writing a package or
+
+00:01:35.860 --> 00:01:36.040
+learning how to use Emacs as a professor in
+
+00:01:37.200 --> 00:01:37.700
+academia or stuff like this.
+
+00:01:39.380 --> 00:01:39.600
+But what I particularly like this year about
+
+00:01:41.720 --> 00:01:41.960
+the different talks we've had is that they've
+
+00:01:44.479 --> 00:01:44.979
+really made the sharing even more obvious.
+
+00:01:46.720 --> 00:01:46.840
+We've had the mentoring this afternoon and we
+
+00:01:49.640 --> 00:01:49.740
+have your talk about using videos as a
+
+00:01:51.100 --> 00:01:51.600
+different medium to get into something.
+
+00:01:54.020 --> 00:01:54.520
+And I really think in terms of accessibility
+
+00:01:58.780 --> 00:01:58.940
+to Emacs, all of you who talked about this
+
+00:01:59.960 --> 00:02:00.180
+topic are doing a wonderful job.
+
+00:02:01.400 --> 00:02:01.900
+So, thank you again for all of this.
+
+00:02:04.080 --> 00:02:04.240
+[Speaker 0]: Thank you. Yeah, do we have any questions to
+
+00:02:04.360 --> 00:02:04.860
+be answering?
+
+00:02:08.199 --> 00:02:08.560
+[Speaker 1]: Yeah, so only 1 for now and I'll invite
+
+00:02:10.860 --> 00:02:11.200
+people as usual to please add their question
+
+00:02:12.720 --> 00:02:13.220
+to the pad or to join us on BBB.
+
+00:02:15.920 --> 00:02:16.080
+Now the chat is open if you want to join us
+
+00:02:17.480 --> 00:02:17.980
+on BBB and ask your questions directly.
+
+00:02:20.520 --> 00:02:20.740
+And in the meantime, I will read the first
+
+00:02:22.700 --> 00:02:23.200
+question. So, Kroting,
+
+00:02:25.040 --> 00:02:25.520
+are you using OxReveal to make your slides?
+
+00:02:26.520 --> 00:02:26.960
+If not, what are you using?
+
+00:02:27.740 --> 00:02:28.240
+They look very elegant,
+
+00:02:28.820 --> 00:02:29.320
+and I concur.
+
+00:02:32.920 --> 00:02:33.420
+[Speaker 0]: That's true. I am using OxReveal.
+
+00:02:35.320 --> 00:02:35.580
+I have a whole entire video on it.
+
+00:02:36.020 --> 00:02:36.520
+So if you're interested,
+
+00:02:37.840 --> 00:02:38.000
+feel free to take a look.
+
+00:02:39.960 --> 00:02:40.340
+It's very simple to get started with.
+
+00:02:42.560 --> 00:02:42.780
+There are a lot of different packages to use
+
+00:02:45.640 --> 00:02:46.140
+Reveal.js and Emacs. OxReveal or OrgReveal
+
+00:02:47.320 --> 00:02:47.820
+seems to be pretty easy to use.
+
+00:02:48.840 --> 00:02:49.020
+So try that 1 out. Yeah,
+
+00:02:49.440 --> 00:02:49.940
+it's really nice.
+
+00:02:54.020 --> 00:02:54.160
+[Speaker 1]: Awesome. I'm going to give a little bit of
+
+00:02:55.840 --> 00:02:56.200
+time for the other people to finish writing
+
+00:02:56.980 --> 00:02:57.260
+their answer. In the meantime,
+
+00:02:58.260 --> 00:02:58.660
+I'll ask you 1 of my own.
+
+00:02:59.620 --> 00:02:59.960
+So you said you were in college,
+
+00:03:01.500 --> 00:03:01.780
+right? In com sci. Sorry,
+
+00:03:02.980 --> 00:03:03.480
+[Speaker 0]: Yeah.
+
+00:03:07.240 --> 00:03:07.460
+[Speaker 1]: computer science. I think it's great to find
+
+00:03:08.860 --> 00:03:09.360
+people in computer science who have,
+
+00:03:11.780 --> 00:03:12.280
+from the get-go, as soon as their bachelor,
+
+00:03:16.220 --> 00:03:16.360
+an appetite for sharing and vulgarizing a lot
+
+00:03:17.780 --> 00:03:17.900
+of knowledge. Because it feels like if you
+
+00:03:18.540 --> 00:03:18.760
+get started like this,
+
+00:03:20.580 --> 00:03:20.740
+you're gonna have a well over time as you
+
+00:03:21.500 --> 00:03:21.820
+progress with the learning.
+
+00:03:23.720 --> 00:03:23.860
+So I'm very excited to see what you do in the
+
+00:03:24.720 --> 00:03:25.220
+coming years because of this.
+
+00:03:26.420 --> 00:03:26.920
+[Speaker 0]: Thank you, thank you, yeah.
+
+00:03:29.700 --> 00:03:29.860
+And Emacs has been like very central to my
+
+00:03:32.100 --> 00:03:32.300
+education as well. It's a great way to sort
+
+00:03:34.460 --> 00:03:34.640
+of organize myself and also it's a good way
+
+00:03:36.040 --> 00:03:36.220
+to share with other people with Org Mode.
+
+00:03:38.000 --> 00:03:38.500
+I can export my code, I can export notes.
+
+00:03:39.340 --> 00:03:39.840
+It makes it so simple.
+
+00:03:42.240 --> 00:03:42.720
+My peers are also impressed by my PDF
+
+00:03:44.260 --> 00:03:44.440
+documents and whatever I can produce with
+
+00:03:48.040 --> 00:03:48.160
+[Speaker 1]: Oh yeah. If only they knew how much time it
+
+00:03:49.840 --> 00:03:50.340
+takes us to get LaTeX to behave properly.
+
+00:03:52.680 --> 00:03:52.860
+[Speaker 0]: Emacs. Right, right. I see some more
+
+00:03:53.980 --> 00:03:54.480
+questions coming in I can answer.
+
+00:03:56.940 --> 00:03:57.100
+[Speaker 1]: Sure, I'll read it for you so that it's a
+
+00:03:57.440 --> 00:03:57.940
+little more interactive.
+
+00:03:59.920 --> 00:04:00.160
+So, second question. Videos can be very
+
+00:04:01.820 --> 00:04:02.320
+inspirational to learn about something by
+
+00:04:04.860 --> 00:04:05.360
+watching it used. I often find it,
+
+00:04:07.080 --> 00:04:07.440
+I often find that I need to do some research
+
+00:04:09.120 --> 00:04:09.440
+after watching a video to learn more.
+
+00:04:10.640 --> 00:04:11.040
+Do you give people links to relevant
+
+00:04:11.820 --> 00:04:12.320
+resources or etc?
+
+00:04:15.060 --> 00:04:15.300
+[Speaker 0]: Yeah, that's something I could definitely do
+
+00:04:17.800 --> 00:04:18.300
+more of. When I make a video I try to combine
+
+00:04:20.459 --> 00:04:20.600
+all the relevant resources and make 1 sort of
+
+00:04:23.600 --> 00:04:24.100
+cohesive video. I like to think of my video
+
+00:04:26.580 --> 00:04:26.980
+as a jumping off point to the Emacs manuals
+
+00:04:30.040 --> 00:04:30.160
+because the manuals are so so full but you
+
+00:04:31.360 --> 00:04:31.800
+need to have a sort of a cursory
+
+00:04:33.800 --> 00:04:34.120
+understanding to get started with them.
+
+00:04:35.440 --> 00:04:35.600
+And then yeah, if there are other sort of
+
+00:04:36.880 --> 00:04:37.000
+GitHub links or something like that,
+
+00:04:38.220 --> 00:04:38.720
+I like to put those in the description.
+
+00:04:42.720 --> 00:04:42.980
+[Speaker 1]: Good question. Right. And I think it's arcing
+
+00:04:44.820 --> 00:04:45.320
+back also. I keep using the word arcing back.
+
+00:04:47.420 --> 00:04:47.580
+I'm sorry. It's my... Every EmacsConf I have
+
+00:04:49.440 --> 00:04:49.640
+1 word or 1 phrase that I keep saying over
+
+00:04:51.220 --> 00:04:51.360
+and over again and this 1 is not leaving but
+
+00:04:53.000 --> 00:04:53.240
+don't worry we only have about 1 more hour
+
+00:04:54.640 --> 00:04:55.140
+and then you're done with me arcing out,
+
+00:04:59.060 --> 00:04:59.540
+arcing back to stuff. I think this is
+
+00:05:03.740 --> 00:05:03.960
+reminding me of both the mentoring talk we've
+
+00:05:06.760 --> 00:05:07.120
+had today about onboarding people basically
+
+00:05:08.480 --> 00:05:08.600
+so that they can have a well of a time on
+
+00:05:11.040 --> 00:05:11.240
+their own on Emacs and I'd agree with you,
+
+00:05:13.180 --> 00:05:13.460
+you know, as much as we like to rave about
+
+00:05:15.140 --> 00:05:15.640
+Emacs as a self-documenting editor,
+
+00:05:17.700 --> 00:05:17.860
+about how complete the documentation is,
+
+00:05:18.940 --> 00:05:19.240
+As you've mentioned in your talk,
+
+00:05:21.220 --> 00:05:21.720
+it's not accessible directly to the people.
+
+00:05:23.620 --> 00:05:23.800
+We can yell as much as we want to people on
+
+00:05:26.600 --> 00:05:26.880
+IRC, you just need to RTFM or you just need
+
+00:05:29.280 --> 00:05:29.780
+to do Ctrl-H-V for the variable or Ctrl-H-F.
+
+00:05:32.040 --> 00:05:32.420
+What is a variable? I am not for computer
+
+00:05:33.240 --> 00:05:33.540
+science. What does it mean?
+
+00:05:36.580 --> 00:05:36.780
+It is really blocking a lot of people right
+
+00:05:40.800 --> 00:05:40.960
+from the get-go. And I think the element of
+
+00:05:42.340 --> 00:05:42.520
+interactivity, as you've mentioned in your
+
+00:05:45.360 --> 00:05:45.800
+talk, that is introduced by video just makes
+
+00:05:47.520 --> 00:05:48.020
+the hand-holding that much easier.
+
+00:05:50.940 --> 00:05:51.440
+And it's great to do it like this.
+
+00:05:53.400 --> 00:05:53.680
+All right, I think we've got another
+
+00:05:56.120 --> 00:05:56.320
+questions. What are your fellow codes of
+
+00:05:57.500 --> 00:05:58.000
+students using for their editors?
+
+00:06:00.200 --> 00:06:00.540
+What kinds of feedback do you get from them
+
+00:06:01.960 --> 00:06:02.460
+when they learn about you using Emacs?
+
+00:06:05.080 --> 00:06:05.580
+[Speaker 0]: That's a great question.
+
+00:06:10.360 --> 00:06:10.760
+I think professors want to make things,
+
+00:06:12.240 --> 00:06:12.740
+the entry as simple as possible.
+
+00:06:15.540 --> 00:06:15.700
+So for the first computer science course and
+
+00:06:16.640 --> 00:06:17.140
+the second, at least at Columbia,
+
+00:06:20.380 --> 00:06:20.880
+They use Codeo, which is 1 of those online
+
+00:06:25.740 --> 00:06:26.040
+whole IDEs. Now in the third course,
+
+00:06:27.520 --> 00:06:27.680
+which is sort of more the weed out as they
+
+00:06:29.820 --> 00:06:30.040
+call it, the professor gives you a choice and
+
+00:06:33.320 --> 00:06:33.820
+he says you can use Emacs or you can use Vim.
+
+00:06:36.340 --> 00:06:36.680
+And everyone uses Vim.
+
+00:06:38.720 --> 00:06:39.220
+Not a single person I know is using Emacs,
+
+00:06:43.380 --> 00:06:43.520
+simply because the professor's using Vim and
+
+00:06:45.080 --> 00:06:45.320
+that's what he shows on screen and that's
+
+00:06:46.640 --> 00:06:47.140
+just what everyone else falls into.
+
+00:06:50.220 --> 00:06:50.320
+And it's also, like, they're totally in the
+
+00:06:52.120 --> 00:06:52.320
+terminal, and that can be a big barrier of
+
+00:06:54.640 --> 00:06:55.140
+entry. So I think they see Emacs as like
+
+00:06:59.760 --> 00:07:00.060
+something like Vim, but it's not sort of the
+
+00:07:01.560 --> 00:07:01.960
+same idea. It's not what everyone uses
+
+00:07:03.840 --> 00:07:03.960
+because it's not what's being shown up on
+
+00:07:05.220 --> 00:07:05.660
+screen. So if you're not following,
+
+00:07:06.460 --> 00:07:06.880
+like if you're a new learner,
+
+00:07:08.300 --> 00:07:08.680
+if you're not following with Vim,
+
+00:07:10.320 --> 00:07:10.600
+you might have a little bit of a harder time
+
+00:07:12.740 --> 00:07:12.940
+in these classes because everyone else is
+
+00:07:14.060 --> 00:07:14.560
+also using Vim.
+
+00:07:19.640 --> 00:07:19.920
+[Speaker 1]: Right. And I'm kind of reminded again,
+
+00:07:21.260 --> 00:07:21.640
+it feels like this is the last talk,
+
+00:07:24.020 --> 00:07:24.280
+so I'm reminiscing of all the different talks
+
+00:07:25.680 --> 00:07:26.000
+we've had on the general chat,
+
+00:07:28.340 --> 00:07:28.580
+at least. And you know,
+
+00:07:30.800 --> 00:07:31.020
+it feels like we had, you know,
+
+00:07:34.160 --> 00:07:34.660
+this 1 talk, I can't remember the first name
+
+00:07:36.340 --> 00:07:36.680
+at the presentation, but it was about forcing
+
+00:07:38.760 --> 00:07:38.940
+people to use Emacs and not giving them the
+
+00:07:41.860 --> 00:07:42.040
+choice to do this. And I found it to be such
+
+00:07:45.060 --> 00:07:45.420
+a powerful move to do because usually people,
+
+00:07:47.440 --> 00:07:47.720
+maybe some classes are actually forcing Vim
+
+00:07:49.540 --> 00:07:49.920
+because it's a little more palatable I guess.
+
+00:07:51.020 --> 00:07:51.520
+Do you have something to say on this?
+
+00:07:53.760 --> 00:07:53.940
+[Speaker 0]: Yeah let me actually, I've remembered 1
+
+00:07:55.380 --> 00:07:55.720
+thing, I know there's another course,
+
+00:07:58.880 --> 00:07:59.060
+a fourth course you'd say in assembly and the
+
+00:08:00.960 --> 00:08:01.460
+professor suggests Emacs.
+
+00:08:04.240 --> 00:08:04.340
+However I know that's just 1 professor so I
+
+00:08:06.740 --> 00:08:06.980
+think broadly Vim is more of the standard and
+
+00:08:08.360 --> 00:08:08.480
+yeah what were you, can you repeat what you
+
+00:08:09.880 --> 00:08:10.380
+said about Vim being more sort of friendly?
+
+00:08:12.880 --> 00:08:13.260
+[Speaker 1]: Yeah, because it's not,
+
+00:08:14.960 --> 00:08:15.200
+okay, I'm quoting the opinions of other,
+
+00:08:17.040 --> 00:08:17.540
+you know, I would hate to insult Emacs and
+
+00:08:19.400 --> 00:08:19.840
+give myself a bad rep at Emacs comfortable
+
+00:08:23.200 --> 00:08:23.660
+things. But it feels like because modal
+
+00:08:26.280 --> 00:08:26.520
+editing is usually something that people hear
+
+00:08:28.260 --> 00:08:28.420
+from when it starts looking into how to be
+
+00:08:30.460 --> 00:08:30.920
+more efficient when they read text.
+
+00:08:32.220 --> 00:08:32.720
+It feels like the first door,
+
+00:08:35.140 --> 00:08:35.640
+the closest door to this is Vim.
+
+00:08:36.380 --> 00:08:36.880
+And so a lot of professors,
+
+00:08:39.720 --> 00:08:40.220
+because there's very little on-boarding,
+
+00:08:41.600 --> 00:08:41.980
+I mean, I'm going to say the word on-boarding
+
+00:08:42.720 --> 00:08:43.140
+and then I'm going to modulate,
+
+00:08:44.600 --> 00:08:44.760
+but there's very little on-boarding to get
+
+00:08:47.040 --> 00:08:47.480
+into modal editing. You just have your H's
+
+00:08:50.080 --> 00:08:50.380
+and your J's and your K's and your L's and
+
+00:08:51.020 --> 00:08:51.180
+everything works. You know,
+
+00:08:52.360 --> 00:08:52.680
+it does something, yes,
+
+00:08:53.640 --> 00:08:53.960
+the arrows are in weird places,
+
+00:08:55.080 --> 00:08:55.580
+but it does something that is vaguely
+
+00:08:58.260 --> 00:08:58.760
+logical. Whereas with Ctrl-Meta,
+
+00:09:03.380 --> 00:09:03.560
+Hyper, Super, J and then Ctrl-C and Meta 4
+
+00:09:04.560 --> 00:09:05.060
+for good measure, you know,
+
+00:09:08.000 --> 00:09:08.140
+It already feels a little more opaque in
+
+00:09:09.960 --> 00:09:10.460
+terms of how people are going to use this.
+
+00:09:13.780 --> 00:09:13.940
+So, I think it's also 1 good thing about the
+
+00:09:15.860 --> 00:09:16.020
+videos is that people can see you're not
+
+00:09:17.900 --> 00:09:18.400
+contorting your hands in very difficult
+
+00:09:20.920 --> 00:09:21.420
+shapes to use Emacs as the bad rep usually
+
+00:09:24.440 --> 00:09:24.620
+is. But yeah, to come back to what I was
+
+00:09:26.600 --> 00:09:27.040
+saying about Vim, I just feel like they've
+
+00:09:30.460 --> 00:09:30.760
+won the battle in terms of looking very
+
+00:09:33.840 --> 00:09:34.340
+accessible. And for us with Emacs,
+
+00:09:37.080 --> 00:09:37.580
+from the top of our ivory tower,
+
+00:09:39.940 --> 00:09:40.440
+we see the ease of getting into Vim,
+
+00:09:43.320 --> 00:09:43.660
+but we always think, but Vim script is shit,
+
+00:09:44.700 --> 00:09:45.040
+we've got Elisp for us,
+
+00:09:46.320 --> 00:09:46.820
+We can do so many things on our end.
+
+00:09:51.180 --> 00:09:51.340
+So yeah, does that evoke anything to you with
+
+00:09:52.960 --> 00:09:53.160
+regards to Vim versus Emacs in terms of
+
+00:09:53.160 --> 00:09:53.660
+apprehension?
+
+00:09:56.820 --> 00:09:57.040
+[Speaker 0]: Yeah, I think that Emacs might be more
+
+00:09:59.320 --> 00:09:59.540
+straightforward if you just plop someone down
+
+00:10:01.360 --> 00:10:01.780
+in front of their computer because you press
+
+00:10:03.800 --> 00:10:04.300
+H, you're going to see an H on the screen,
+
+00:10:06.780 --> 00:10:07.280
+right? And Vim is a whole new modal mindset.
+
+00:10:09.960 --> 00:10:10.380
+So for a student who wants to like gain
+
+00:10:13.540 --> 00:10:13.740
+efficiency, then yes, I think that Vim is
+
+00:10:15.160 --> 00:10:15.360
+definitely like, it feels like a more
+
+00:10:16.280 --> 00:10:16.760
+friendly introduction.
+
+00:10:18.340 --> 00:10:18.600
+But I think that Emacs doesn't get enough
+
+00:10:20.580 --> 00:10:20.680
+credit around here. And I'd like to see it
+
+00:10:23.000 --> 00:10:23.460
+more often, because a lot of students,
+
+00:10:25.640 --> 00:10:26.140
+they're not looking to fix the efficiencies
+
+00:10:28.080 --> 00:10:28.580
+in their text editing.
+
+00:10:31.620 --> 00:10:31.780
+They're looking to fix the efficiencies in
+
+00:10:33.620 --> 00:10:34.120
+how they do homework or how they do their
+
+00:10:34.640 --> 00:10:35.140
+programming assignments,
+
+00:10:37.280 --> 00:10:37.540
+and they would save time if they,
+
+00:10:39.320 --> 00:10:39.820
+or at least the mentality for a student,
+
+00:10:42.500 --> 00:10:42.720
+is that if you can just get it done more
+
+00:10:43.980 --> 00:10:44.160
+quickly, like it's more,
+
+00:10:45.540 --> 00:10:45.720
+you know, you do what you're used to,
+
+00:10:49.120 --> 00:10:49.300
+and Vim is just a barrier towards you know
+
+00:10:51.040 --> 00:10:51.180
+getting your work done like how do I copy and
+
+00:10:52.800 --> 00:10:52.960
+paste something it's a whole new set of
+
+00:10:55.080 --> 00:10:55.280
+challenges to learn so I think both have
+
+00:10:56.920 --> 00:10:57.420
+their deficiencies and abilities.
+
+00:11:00.760 --> 00:11:00.920
+[Speaker 1]: Yeah it's funny because I'm just 1 last thing
+
+00:11:03.440 --> 00:11:03.680
+on this it feels like modal editing because
+
+00:11:05.360 --> 00:11:05.860
+it is already weird from the get-go,
+
+00:11:08.260 --> 00:11:08.640
+perhaps it might do a better job of making
+
+00:11:10.640 --> 00:11:10.760
+people uneasy. You know how we say that
+
+00:11:11.600 --> 00:11:12.100
+constraints breeds creativity.
+
+00:11:14.820 --> 00:11:15.180
+Well, Vim constrains you from the get-go.
+
+00:11:16.160 --> 00:11:16.620
+If you do not press I,
+
+00:11:18.120 --> 00:11:18.420
+nothing is going to show up in the buffer
+
+00:11:19.040 --> 00:11:19.540
+that you're currently editing.
+
+00:11:21.840 --> 00:11:22.000
+Whereas Emacs give you this full sense of
+
+00:11:24.000 --> 00:11:24.500
+security by when you press J,
+
+00:11:27.860 --> 00:11:28.360
+[Speaker 0]: Yeah, true.
+
+00:11:29.480 --> 00:11:29.760
+[Speaker 1]: it actually inputs J. All right,
+
+00:11:30.540 --> 00:11:30.840
+moving on to another question.
+
+00:11:32.040 --> 00:11:32.540
+And by the way, we've got some time.
+
+00:11:34.740 --> 00:11:35.240
+We have technically about 6 more minutes,
+
+00:11:38.640 --> 00:11:38.940
+but I see Sasha on the other track is already
+
+00:11:40.400 --> 00:11:40.640
+answering questions that I'm in about
+
+00:11:42.840 --> 00:11:43.320
+EmacsConf. So we can go a little longer,
+
+00:11:44.760 --> 00:11:45.040
+as long as I let the organizers know.
+
+00:11:46.000 --> 00:11:46.200
+So we've got about, let's say,
+
+00:11:48.120 --> 00:11:48.320
+6 minutes for now. And we'll see if more
+
+00:11:50.020 --> 00:11:50.220
+questions crop up. All right,
+
+00:11:51.040 --> 00:11:51.540
+moving on to the next question.
+
+00:11:53.400 --> 00:11:53.760
+Did you start those university classes using
+
+00:11:55.180 --> 00:11:55.680
+Emacs, I suppose, in your first year?
+
+00:12:01.640 --> 00:12:01.780
+[Speaker 0]: Yes, yeah, I did. I started with Emacs 2
+
+00:12:02.780 --> 00:12:03.120
+years before entering college,
+
+00:12:04.280 --> 00:12:04.780
+so my junior year of high school.
+
+00:12:09.220 --> 00:12:09.480
+And I've basically over time built up a
+
+00:12:11.180 --> 00:12:11.680
+workflow of how I will take my notes,
+
+00:12:12.900 --> 00:12:13.400
+how I will organize my classes.
+
+00:12:16.280 --> 00:12:16.780
+And now that I'm taking programming classes
+
+00:12:18.280 --> 00:12:18.780
+where Emacs might be more acceptable.
+
+00:12:21.500 --> 00:12:22.000
+It's even enhanced my workflow.
+
+00:12:24.760 --> 00:12:25.260
+Taking notes in Ouro for program assists,
+
+00:12:27.540 --> 00:12:27.720
+everyone talks about it,
+
+00:12:30.640 --> 00:12:30.880
+but from the source, It doesn't get better
+
+00:12:32.860 --> 00:12:33.080
+than that, being able to write with
+
+00:12:34.280 --> 00:12:34.780
+highlighting, with syntax highlighting,
+
+00:12:38.360 --> 00:12:38.720
+with easy exports, running inline code
+
+00:12:40.960 --> 00:12:41.380
+blocks. And a lot of these programming
+
+00:12:42.960 --> 00:12:43.460
+classes, they make you code on a server.
+
+00:12:45.080 --> 00:12:45.320
+And they just say, oh,
+
+00:12:46.500 --> 00:12:46.980
+SSH, and you can use Vim.
+
+00:12:48.560 --> 00:12:49.040
+I can use Tramp, and I can use Emacs,
+
+00:12:50.440 --> 00:12:50.940
+and I'm perfectly at home.
+
+00:12:52.760 --> 00:12:53.260
+It's just such a seamless transition.
+
+00:12:55.380 --> 00:12:55.760
+It's a really amazing way to do school.
+
+00:12:58.260 --> 00:12:58.580
+Professors, you know, all they want is a PDF
+
+00:12:59.220 --> 00:12:59.340
+at the end of the day.
+
+00:13:00.520 --> 00:13:01.020
+They just want the paper on their desk.
+
+00:13:03.420 --> 00:13:03.560
+They're not so picky about how you get it
+
+00:13:04.840 --> 00:13:05.340
+there. They just want it in their hands.
+
+00:13:07.120 --> 00:13:07.540
+So, so Emacs is, it's very usable.
+
+00:13:08.040 --> 00:13:08.540
+It's very doable.
+
+00:13:11.280 --> 00:13:11.580
+[Speaker 1]: Right. I've got a little anecdote on this
+
+00:13:13.740 --> 00:13:13.860
+because you're speaking about the topic of
+
+00:13:16.120 --> 00:13:16.280
+Emacs at university from the perspective of
+
+00:13:17.600 --> 00:13:18.100
+someone who is in computer science.
+
+00:13:19.840 --> 00:13:20.340
+But for me, in the humanities,
+
+00:13:22.900 --> 00:13:23.080
+I just remember those professors who just
+
+00:13:24.940 --> 00:13:25.440
+required you not to use your laptop.
+
+00:13:28.580 --> 00:13:28.780
+And I started with Emacs roughly at the same
+
+00:13:32.460 --> 00:13:32.700
+age as you did. And I was just using it for
+
+00:13:33.160 --> 00:13:33.580
+absolutely everything,
+
+00:13:35.240 --> 00:13:35.740
+for my organization, for producing papers.
+
+00:13:37.860 --> 00:13:38.000
+And to be told that I could not use Emacs for
+
+00:13:38.680 --> 00:13:39.180
+a class for my note-taking,
+
+00:13:43.660 --> 00:13:43.860
+I felt utterly naked in the face of what I
+
+00:13:46.500 --> 00:13:46.720
+needed to do. And yeah,
+
+00:13:47.800 --> 00:13:48.120
+it's great to see those different
+
+00:13:49.120 --> 00:13:49.540
+experiences. And it just,
+
+00:13:50.440 --> 00:13:50.800
+you're always going to be weird.
+
+00:13:53.000 --> 00:13:53.120
+Like I was the weird guy using Emacs in the
+
+00:13:54.720 --> 00:13:55.080
+humanities, but I would have been weird using
+
+00:13:58.440 --> 00:13:58.940
+Vim or any kind of computers with fancy
+
+00:13:59.060 --> 00:13:59.560
+editing.
+
+00:14:02.200 --> 00:14:02.580
+[Speaker 0]: Oh yeah, yeah. And I'm in humanities classes
+
+00:14:03.840 --> 00:14:04.340
+as well, I'm not in a strictly engineering,
+
+00:14:06.720 --> 00:14:06.880
+so people will see me writing an essay about,
+
+00:14:07.780 --> 00:14:08.080
+you know, a philosophy essay,
+
+00:14:09.820 --> 00:14:09.960
+I was working on an essay about Plato and
+
+00:14:11.180 --> 00:14:11.680
+Aristotle, and they say,
+
+00:14:13.840 --> 00:14:14.040
+what are you coding, why are you coding your
+
+00:14:16.620 --> 00:14:16.880
+essay? And I say, well it's just the font
+
+00:14:17.560 --> 00:14:18.060
+looks a little bit different.
+
+00:14:19.300 --> 00:14:19.640
+Everything else is the same words,
+
+00:14:20.800 --> 00:14:21.100
+just the font looks a little different.
+
+00:14:22.160 --> 00:14:22.660
+This is how I like to do it.
+
+00:14:25.600 --> 00:14:25.760
+[Speaker 1]: Oh, those pesky monospace fonts are making us
+
+00:14:27.880 --> 00:14:28.020
+pass as hackers. But for everyone who is
+
+00:14:29.060 --> 00:14:29.560
+behind us, looking at our monitors.
+
+00:14:30.040 --> 00:14:30.540
+[Speaker 0]: Exactly.
+
+00:14:33.900 --> 00:14:34.280
+[Speaker 1]: All right. A little bit of a remark,
+
+00:14:35.760 --> 00:14:36.020
+I guess, towards me and what I said about
+
+00:14:37.480 --> 00:14:37.860
+Vim. So, quoting, before NeoVim,
+
+00:14:39.140 --> 00:14:39.640
+you had to do as much or more configuration
+
+00:14:41.280 --> 00:14:41.760
+to get basic editing done than in Emacs.
+
+00:14:43.520 --> 00:14:43.780
+It's also slower with modal editing compared
+
+00:14:45.440 --> 00:14:45.520
+to Emacs key bindings because you have to
+
+00:14:47.360 --> 00:14:47.640
+press escape and 2 keys to get things done.
+
+00:14:49.120 --> 00:14:49.540
+While in Emacs, you only have to press Ctrl
+
+00:14:52.120 --> 00:14:52.360
+or Meta something to move or search or
+
+00:14:53.400 --> 00:14:53.900
+whatever, and then write.
+
+00:14:55.960 --> 00:14:56.460
+And I tend to agree, I'm not familiar with
+
+00:14:59.260 --> 00:14:59.760
+the ages before NeoVim,
+
+00:15:03.120 --> 00:15:03.620
+But I think we are mostly talking in terms of
+
+00:15:04.900 --> 00:15:05.400
+reputation and communication,
+
+00:15:08.360 --> 00:15:08.480
+like how is Vim considered nowadays or for
+
+00:15:10.760 --> 00:15:11.260
+the last 10 years in the mindset of people
+
+00:15:13.740 --> 00:15:14.240
+choosing or about to choose an editor.
+
+00:15:17.620 --> 00:15:17.860
+And, You know, I keep spitting the fact about
+
+00:15:19.340 --> 00:15:19.480
+VimScript being bad, but I'm going to be
+
+00:15:20.800 --> 00:15:20.980
+honest, I've never actually written any
+
+00:15:24.180 --> 00:15:24.400
+VimScript. I'm just parroting whatever the
+
+00:15:26.760 --> 00:15:26.960
+giants with shoulders I'm standing have been
+
+00:15:28.260 --> 00:15:28.740
+saying to me. And it's not very intelligent,
+
+00:15:31.080 --> 00:15:31.280
+I know, but We also have a very limited pool
+
+00:15:34.340 --> 00:15:34.540
+of time, and I also think that this is a
+
+00:15:36.460 --> 00:15:36.960
+point that your talk addresses in a way.
+
+00:15:40.240 --> 00:15:40.740
+Yes, we could be starting the massive quest
+
+00:15:42.740 --> 00:15:43.180
+of reading the Emacs manual or the ELISP
+
+00:15:45.100 --> 00:15:45.480
+introductory guide or the ELISP complete
+
+00:15:47.620 --> 00:15:48.120
+guide. A lot of people are trying,
+
+00:15:48.940 --> 00:15:49.440
+very highly motivated,
+
+00:15:51.140 --> 00:15:51.220
+I'm going to get started on Emacs and I'm
+
+00:15:51.940 --> 00:15:52.440
+going to do things right.
+
+00:15:53.760 --> 00:15:54.260
+But the fact of the matter is,
+
+00:15:56.580 --> 00:15:56.820
+it's not necessarily a good use of your time
+
+00:15:57.740 --> 00:15:58.240
+to get started like this,
+
+00:16:00.680 --> 00:16:00.840
+because there are so many things you're not
+
+00:16:03.320 --> 00:16:03.660
+going to understand, it kind of goes back,
+
+00:16:04.640 --> 00:16:04.920
+didn't say iBug this time,
+
+00:16:07.700 --> 00:16:08.200
+I stopped myself, it kind of goes back to
+
+00:16:11.040 --> 00:16:11.240
+this I plus 1 Vigoski proximals on
+
+00:16:12.740 --> 00:16:12.940
+development stuff that I was talking about
+
+00:16:16.020 --> 00:16:16.520
+before. The manual is I plus 999.
+
+00:16:20.940 --> 00:16:21.140
+Your video might be I plus 3 or I plus 2 and
+
+00:16:23.240 --> 00:16:23.480
+the hand-holding really does wonders for
+
+00:16:26.120 --> 00:16:26.400
+people to eventually get closer to reading
+
+00:16:27.540 --> 00:16:28.040
+the manuals and stuff like this.
+
+00:16:31.000 --> 00:16:31.500
+[Speaker 0]: Yeah it's a great way just something about
+
+00:16:33.160 --> 00:16:33.660
+giving someone those practical
+
+00:16:35.000 --> 00:16:35.240
+demonstrations, that's something I really
+
+00:16:36.860 --> 00:16:37.080
+appreciate. A lot of these really nice
+
+00:16:38.520 --> 00:16:39.020
+presentations we've had today and yesterday
+
+00:16:41.920 --> 00:16:42.100
+show real life use cases and we get to see
+
+00:16:44.240 --> 00:16:44.480
+people typing and they're working how they
+
+00:16:46.680 --> 00:16:46.920
+would normally work. And that's a great way
+
+00:16:49.040 --> 00:16:49.200
+to begin to understand how you can apply a
+
+00:16:50.680 --> 00:16:50.800
+tool to yourself because at the end of the
+
+00:16:52.040 --> 00:16:52.360
+day Emacs is a tool for us.
+
+00:16:53.760 --> 00:16:54.060
+You know we might take joy in it,
+
+00:16:54.960 --> 00:16:55.440
+it helps us be more productive,
+
+00:16:58.040 --> 00:16:58.540
+it's fun but we're using it for a certain end
+
+00:17:00.880 --> 00:17:01.080
+and you know if we how we can understand to
+
+00:17:03.080 --> 00:17:03.280
+get to those ends and what those ends might
+
+00:17:05.740 --> 00:17:06.240
+even be. It's just great to see other people
+
+00:17:07.440 --> 00:17:07.940
+bring that forth for you.
+
+00:17:12.380 --> 00:17:12.619
+[Speaker 1]: Okay, great. Well, I don't see any more
+
+00:17:13.980 --> 00:17:14.480
+questions in the chat currently,
+
+00:17:17.020 --> 00:17:17.160
+and I don't see anyone who's joined us on the
+
+00:17:19.599 --> 00:17:19.760
+blue button. We are near the time that I said
+
+00:17:22.420 --> 00:17:22.920
+we've got about 40 seconds to go until we
+
+00:17:24.060 --> 00:17:24.400
+were due to end. Jacob,
+
+00:17:26.099 --> 00:17:26.240
+I kind of want to give you the microphone for
+
+00:17:27.339 --> 00:17:27.500
+the end. Do you have anything to say?
+
+00:17:28.359 --> 00:17:28.680
+Like you've talked about your YouTube
+
+00:17:30.480 --> 00:17:30.720
+channel, we've already ensured that the links
+
+00:17:31.960 --> 00:17:32.360
+will be everywhere on the talk page,
+
+00:17:34.280 --> 00:17:34.640
+in the pad, on IRC. But is there anything
+
+00:17:35.540 --> 00:17:35.740
+else you'd like to add?
+
+00:17:37.120 --> 00:17:37.620
+Because you're the last speaker of EmacsCon,
+
+00:17:39.640 --> 00:17:40.140
+and you've got the tough responsibility of
+
+00:17:42.040 --> 00:17:42.540
+finishing it.
+
+00:17:45.440 --> 00:17:45.920
+[Speaker 0]: Oh, well, that's not tough at all when we've
+
+00:17:47.640 --> 00:17:47.960
+had 2 days. I mean, so many people,
+
+00:17:51.300 --> 00:17:51.440
+so many presenters coming together and like I
+
+00:17:52.640 --> 00:17:53.140
+said right at the beginning to Leo,
+
+00:17:54.920 --> 00:17:55.200
+putting your face out there,
+
+00:17:56.180 --> 00:17:56.680
+putting your voice out there,
+
+00:17:57.620 --> 00:17:58.120
+putting yourself out there,
+
+00:18:00.060 --> 00:18:00.380
+it's such a great way to come together
+
+00:18:02.080 --> 00:18:02.580
+because Emacs is not the standard.
+
+00:18:04.540 --> 00:18:04.820
+You know, I've tried to teach my friends
+
+00:18:06.040 --> 00:18:06.540
+Emacs, I've tried to show it to them.
+
+00:18:08.360 --> 00:18:08.480
+You know, some people you get it or you
+
+00:18:10.320 --> 00:18:10.600
+don't. And the people who get it,
+
+00:18:11.740 --> 00:18:12.240
+we're not all in the same place.
+
+00:18:13.440 --> 00:18:13.940
+And it's great.
+
+00:18:15.720 --> 00:18:15.860
+[Speaker 1]: I'm interrupting you for a second because I
+
+00:18:17.960 --> 00:18:18.460
+think we were supposed to kill the the cron
+
+00:18:20.220 --> 00:18:20.720
+which starts the next meeting and it hasn't.
+
+00:18:22.640 --> 00:18:22.940
+Let me try to fix it. I'll talk to production
+
+00:18:25.360 --> 00:18:25.860
+[Speaker 0]: Do I wait or keep going?
+
+00:18:27.360 --> 00:18:27.560
+[Speaker 1]: in a second. Just wait a bit.
+
+00:18:29.260 --> 00:18:29.440
+I'm very sorry. I've given you the mic and
+
+00:18:35.280 --> 00:18:35.440
+then it just... Okay let me just check your
+
+00:18:35.440 --> 00:18:35.940
+production.
+
+00:18:59.660 --> 00:18:59.720
+What? All right, Jason.
+
+00:19:00.880 --> 00:19:01.120
+All right, Jacob, I'm going to put us
+
+00:19:02.080 --> 00:19:02.320
+manually back on track.
+
+00:19:03.080 --> 00:19:03.580
+So give me just a second.
+
+00:19:04.220 --> 00:19:04.720
+[Speaker 0]: Right.
+
+00:19:09.240 --> 00:19:09.740
+[Speaker 1]: I'm going to manually type the URL,
+
+00:19:12.440 --> 00:19:12.720
+because it's a janky setup that we've got
+
+00:19:13.980 --> 00:19:14.440
+right now, when whenever it's not working.
+
+00:19:20.400 --> 00:19:20.900
+All right. So tps slash slash bbb emacs first
+
+00:19:23.000 --> 00:19:23.500
+dot org html. No, that's not the 1.
+
+00:19:27.180 --> 00:19:27.440
+Let me try to type it.
+
+00:19:27.900 --> 00:19:28.400
+Probably. Bbbemaxfirst.
+
+00:19:42.700 --> 00:19:43.180
+L5H, R5D, BH0 Okay, we're getting back Okay,
+
+00:19:44.380 --> 00:19:44.740
+sorry folks about this We are,
+
+00:19:45.360 --> 00:19:45.860
+Jacob, We're back online.
+
+00:19:46.800 --> 00:19:47.080
+I'm really sorry about this.
+
+00:19:49.040 --> 00:19:49.540
+It's just that Sasha's script kicked in.
+
+00:19:51.140 --> 00:19:51.280
+I did tell you we were supposed to finish at
+
+00:19:53.940 --> 00:19:54.060
+30. And because Sasha is busy presenting in
+
+00:19:54.940 --> 00:19:55.320
+the other room, sadly,
+
+00:19:57.100 --> 00:19:57.400
+we got yanked again. So Jacob,
+
+00:19:58.280 --> 00:19:58.780
+I'm very sorry for the interruption.
+
+00:20:01.220 --> 00:20:01.560
+And you were retelling people about something
+
+00:20:02.320 --> 00:20:02.820
+you told me during the check-ins.
+
+00:20:04.440 --> 00:20:04.940
+Do you mind restarting this?
+
+00:20:09.440 --> 00:20:09.660
+[Speaker 0]: Yeah, sure. Well, you said I have the no
+
+00:20:12.180 --> 00:20:12.480
+small task of making the last words from
+
+00:20:14.440 --> 00:20:14.640
+presenters and not the organizers at
+
+00:20:16.260 --> 00:20:16.500
+EmacsConf. And I said,
+
+00:20:17.880 --> 00:20:18.380
+well, that's not hard at all.
+
+00:20:20.540 --> 00:20:20.760
+How many speakers have we had?
+
+00:20:24.480 --> 00:20:24.860
+30? And it's so incredible these past,
+
+00:20:26.880 --> 00:20:27.080
+you know, today and yesterday to have all
+
+00:20:29.700 --> 00:20:29.960
+been able to come together and not just share
+
+00:20:33.920 --> 00:20:34.420
+our ideas and our code and how we do things,
+
+00:20:38.000 --> 00:20:38.300
+but to share our faces and our voices and our
+
+00:20:39.780 --> 00:20:40.120
+lives, you know a little bit of our lives.
+
+00:20:42.100 --> 00:20:42.380
+You know to have the passion to even spend
+
+00:20:44.900 --> 00:20:45.400
+the time to on your weekend to watch this
+
+00:20:47.440 --> 00:20:47.660
+means that you have some sort of care about
+
+00:20:49.160 --> 00:20:49.660
+Emacs and it adds to your life.
+
+00:20:51.820 --> 00:20:52.080
+And you know those Emacs people aren't
+
+00:20:53.620 --> 00:20:53.980
+everywhere. I've tried to bring my friends
+
+00:20:56.040 --> 00:20:56.320
+onto Emacs and it seems like you know you're
+
+00:20:58.900 --> 00:20:59.220
+an Emacs person or you're not really an Emacs
+
+00:21:02.360 --> 00:21:02.640
+person. And those Emacs people can be really
+
+00:21:04.840 --> 00:21:05.000
+spread out. So it's great that we're able to
+
+00:21:07.900 --> 00:21:08.000
+come together and share a little bit of
+
+00:21:09.760 --> 00:21:10.260
+ourselves, a little bit of how we do things.
+
+00:21:12.440 --> 00:21:12.720
+And like I said in my talk,
+
+00:21:15.660 --> 00:21:15.880
+just increase our own joy in Emacs by coming
+
+00:21:19.360 --> 00:21:19.540
+together and being able to share our joy in
+
+00:21:21.760 --> 00:21:21.900
+Emacs. And of course, thank you to all the
+
+00:21:25.000 --> 00:21:25.120
+organizers and everyone who's contributed in
+
+00:21:27.980 --> 00:21:28.380
+any way. It means a lot to even the smallest
+
+00:21:29.700 --> 00:21:30.200
+member, the biggest member of our community.
+
+00:21:33.480 --> 00:21:33.700
+We're all really glad to be able to come
+
+00:21:36.300 --> 00:21:36.520
+together like this and share and meet each
+
+00:21:37.820 --> 00:21:38.320
+other and give nice talks.
+
+00:21:40.200 --> 00:21:40.440
+[Speaker 1]: Well, thank you so much,
+
+00:21:42.340 --> 00:21:42.780
+Jacob. And perhaps to reassure people,
+
+00:21:44.900 --> 00:21:45.060
+because yes, right now it feels like we are
+
+00:21:47.040 --> 00:21:47.300
+legions, all of us here in the same room
+
+00:21:47.960 --> 00:21:48.400
+watching the same thing.
+
+00:21:50.740 --> 00:21:50.900
+We are the Emacs' and that's a very good
+
+00:21:52.540 --> 00:21:52.840
+feeling to have. But you know,
+
+00:21:54.640 --> 00:21:55.140
+first, there's 1 thing that is certain,
+
+00:21:58.380 --> 00:21:58.660
+almost 99% certain, it's the fact that next
+
+00:22:00.300 --> 00:22:00.800
+year there'll probably be another EmacsConf
+
+00:22:02.920 --> 00:22:03.340
+and there will be more Emacs versions,
+
+00:22:04.540 --> 00:22:04.940
+there will be more augmented versions,
+
+00:22:07.300 --> 00:22:07.480
+there will be more people doing cool stuff on
+
+00:22:11.640 --> 00:22:12.040
+Melpa, on ELPA, etc. So it is still a vibrant
+
+00:22:14.200 --> 00:22:14.700
+community. But in case you're craving this
+
+00:22:17.260 --> 00:22:17.760
+little extra in-person stuff,
+
+00:22:20.280 --> 00:22:20.500
+Sash and myself, we are maintaining a list of
+
+00:22:21.560 --> 00:22:21.820
+all the Emacs user group.
+
+00:22:22.680 --> 00:22:23.080
+This is on the Emacs wiki.
+
+00:22:24.140 --> 00:22:24.440
+This is what I'm sharing on my screen
+
+00:22:27.500 --> 00:22:27.720
+currently. And we try to organize them by
+
+00:22:30.100 --> 00:22:30.340
+regional region, sorry,
+
+00:22:31.560 --> 00:22:32.020
+parts of the world like North America,
+
+00:22:32.640 --> 00:22:33.120
+South America, Europe,
+
+00:22:36.300 --> 00:22:36.680
+Africa, Asia. And we have a list of upcoming
+
+00:22:39.000 --> 00:22:39.500
+events and a lot of them are still online.
+
+00:22:41.420 --> 00:22:41.920
+Ever since we had the entire pandemic stuff,
+
+00:22:46.940 --> 00:22:47.440
+a lot of the workshops moved online and,
+
+00:22:49.960 --> 00:22:50.320
+sorry, I had someone whispering in my ear.
+
+00:22:53.100 --> 00:22:53.400
+A lot of them moved online and they are still
+
+00:22:54.960 --> 00:22:55.080
+online now because they've realized it's a
+
+00:22:57.100 --> 00:22:57.280
+very great way to get more people in the same
+
+00:22:59.640 --> 00:22:59.960
+place. And whilst it's great to have
+
+00:23:01.560 --> 00:23:01.920
+in-person meetings, We do this with Emacs
+
+00:23:05.140 --> 00:23:05.340
+Paris. Emacs Paris actually is happening is
+
+00:23:07.640 --> 00:23:07.840
+it? I think, oh I'm going to need to tell
+
+00:23:10.200 --> 00:23:10.280
+Sasha that apparently yes we do not have the
+
+00:23:12.380 --> 00:23:12.600
+next event for Emacs Paris which is next
+
+00:23:14.700 --> 00:23:15.140
+Tuesday and it is in person but for everyone
+
+00:23:18.580 --> 00:23:18.740
+and including you Jacob if you find a
+
+00:23:20.460 --> 00:23:20.640
+workshop in North America that is working for
+
+00:23:22.540 --> 00:23:23.020
+you, I'm thinking about Emacs SF,
+
+00:23:24.660 --> 00:23:24.940
+which I've attended multiple times,
+
+00:23:27.980 --> 00:23:28.220
+and Emacs Austin as well,
+
+00:23:29.060 --> 00:23:29.340
+that I've been to once,
+
+00:23:31.640 --> 00:23:31.780
+I think, It would be a lovely experience and
+
+00:23:34.160 --> 00:23:34.540
+a way to, most of them are every month,
+
+00:23:36.040 --> 00:23:36.160
+it would be a good way for you to stay in
+
+00:23:39.240 --> 00:23:39.440
+touch and to continue this sense of
+
+00:23:40.580 --> 00:23:41.080
+in-person-ness about Emacs.
+
+00:23:46.560 --> 00:23:46.800
+[Speaker 0]: Wonderful. All right, thank you so much.
+
+00:23:48.900 --> 00:23:49.400
+Should I drop off of our call now and let you
+
+00:23:50.000 --> 00:23:50.500
+close things up?
+
+00:23:52.600 --> 00:23:52.760
+[Speaker 1]: Yeah, we're probably gonna close thing up.
+
+00:23:53.600 --> 00:23:53.940
+Let me just check on Sasha.
+
+00:23:55.380 --> 00:23:55.560
+Sasha is obviously answering many many
+
+00:23:57.180 --> 00:23:57.660
+questions about how we are organizing
+
+00:23:59.540 --> 00:23:59.640
+EmacsConf. So Jacob, I'm gonna let you go.
+
+00:24:01.440 --> 00:24:01.680
+Thank you so much for your presentation and
+
+00:24:03.720 --> 00:24:03.920
+your answers. And maybe we'll see you next
+
+00:24:05.020 --> 00:24:05.240
+year. Or maybe a workshop.
+
+00:24:06.820 --> 00:24:07.320
+[Speaker 0]: Who knows? I'm so lucky I got you as my Q&A.
+
+00:24:10.440 --> 00:24:10.760
+When I saw you at my first Emacs Conf 2 years
+
+00:24:12.740 --> 00:24:13.240
+ago, I thought, maybe this guy will do mine.
+
+00:24:18.840 --> 00:24:19.240
+[Speaker 1]: Very nice. Thank you. I'm glad I was able to
+
+00:24:19.920 --> 00:24:20.280
+generate such a feeling.
+
+00:24:21.600 --> 00:24:22.100
+All right, I'll get going now.
+
+00:24:23.260 --> 00:24:23.760
+Jacob, have a wonderful evening.
+
+00:24:23.940 --> 00:24:24.140
+[Speaker 0]: And here you are. You too,
+
+00:24:24.400 --> 00:24:24.900
+see you later.
+
+00:24:28.140 --> 00:24:28.320
+[Speaker 1]: Bye-bye. And folks, what are we going to do
+
+00:24:30.300 --> 00:24:30.520
+right now? I'm going to set everything up so
+
+00:24:32.520 --> 00:24:33.020
+that we can get Sasha finished on the talk.
+
+00:24:34.840 --> 00:24:35.060
+If you're watching, squinting with both
+
+00:24:37.720 --> 00:24:38.080
+streams, you can go to Sasha's room,
+
+00:24:39.520 --> 00:24:40.020
+I mean, the development track,
+
+00:24:42.180 --> 00:24:42.680
+to maybe catch some of the answers by Sasha.
+
+00:24:45.040 --> 00:24:45.160
+Otherwise, we'll be back in roughly 5 to 10
+
+00:24:46.960 --> 00:24:47.120
+minutes to do the closing remarks on this
+
+00:24:47.720 --> 00:24:48.040
+channel. In the meantime,
+
+00:24:48.840 --> 00:24:49.340
+I'll put on some music.
+
+00:24:51.300 --> 00:24:51.800
+So bear with us and I'll see you shortly.
+
+00:25:15.660 --> 00:25:16.160
+And closing here. This BBB recording.
+
+00:25:16.360 --> 00:25:16.860
+Yay!
diff --git a/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt
new file mode 100644
index 00000000..99fe789d
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:48.999
+Introduction
+
+00:00:49.000 --> 00:04:03.399
+My journey of learning
+
+00:04:03.400 --> 00:05:32.119
+Straightforward Emacs
+
+00:05:32.120 --> 00:07:16.399
+Videos
+
+00:07:16.400 --> 00:08:10.359
+Clarity
+
+00:08:10.360 --> 00:09:15.919
+High-quality and accessible content
+
+00:09:15.920 --> 00:11:48.119
+The personal aspect
+
+00:11:48.120 --> 00:16:34.120
+Unity
diff --git a/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt
new file mode 100644
index 00000000..1e7d942e
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt
@@ -0,0 +1,1148 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:02.439
+Hello everyone, I'm Jacob Boxerman.
+
+00:00:02.440 --> 00:00:04.319
+I'm a sophomore at Columbia University
+
+00:00:04.320 --> 00:00:06.139
+studying computer science.
+
+00:00:06.140 --> 00:00:08.519
+I'm so excited to be here today
+
+00:00:08.520 --> 00:00:11.259
+right at the end of EmacsConf 2023.
+
+00:00:11.260 --> 00:00:13.719
+So glad to be able to share with everyone today.
+
+00:00:13.720 --> 00:00:16.746
+EmacsConf is really the epitome for me
+
+00:00:16.747 --> 00:00:20.099
+of sharing and of learning about Emacs.
+
+NOTE Today's talk
+
+00:00:20.100 --> 00:00:21.539
+And in my closing keynote
+
+00:00:21.540 --> 00:00:24.419
+titled "Sharing Emacs is Caring Emacs,"
+
+00:00:24.420 --> 00:00:25.819
+I want to drive that home,
+
+00:00:25.820 --> 00:00:27.259
+and I want to make every day
+
+00:00:27.260 --> 00:00:31.419
+a day for learning and for sharing in our community.
+
+00:00:31.420 --> 00:00:33.259
+I'd like to share my own journey
+
+00:00:33.260 --> 00:00:34.979
+of sharing the joy of Emacs
+
+00:00:34.980 --> 00:00:38.459
+and convince you that sharing the ways we share
+
+00:00:38.460 --> 00:00:41.179
+and how we participate in our Emacs community,
+
+00:00:41.180 --> 00:00:42.419
+those are the most important things
+
+00:00:42.420 --> 00:00:44.339
+to both grow our community
+
+00:00:44.340 --> 00:00:48.899
+and to increase our own personal joy in Emacs.
+
+NOTE My history with Emacs
+
+00:00:48.900 --> 00:00:52.459
+My journey of sharing begins with my journey of learning.
+
+00:00:52.460 --> 00:00:55.299
+So I'll start by spending a bit of time on that.
+
+00:00:55.300 --> 00:00:57.779
+I use Emacs every day for personal organization
+
+00:00:57.780 --> 00:01:00.179
+and to-dos -- you know, schoolwork, projects,
+
+00:01:00.180 --> 00:01:03.299
+exams, readings. I use Org Mode for that,
+
+00:01:03.300 --> 00:01:05.979
+write essays, make presentations like this one.
+
+00:01:05.980 --> 00:01:08.419
+I also write in various programming languages
+
+00:01:08.420 --> 00:01:10.219
+including Java, C, Python,
+
+00:01:10.220 --> 00:01:13.139
+locally and also remotely for projects, classes,
+
+00:01:13.140 --> 00:01:14.699
+other responsibilities.
+
+00:01:14.700 --> 00:01:17.579
+I really started with Emacs during the pandemic.
+
+00:01:17.580 --> 00:01:20.059
+I had tried Emacs before, but at the time
+
+00:01:20.060 --> 00:01:22.379
+all I knew it for was `M-x tetris`.
+
+00:01:22.380 --> 00:01:25.459
+But then its power and its configurability even then
+
+00:01:25.460 --> 00:01:27.059
+especially spoke to me.
+
+00:01:27.060 --> 00:01:28.899
+So from those little humble beginnings,
+
+00:01:28.900 --> 00:01:31.459
+trying different preconfigured distros,
+
+00:01:31.460 --> 00:01:33.059
+I slowly made my way to building
+
+00:01:33.060 --> 00:01:36.339
+my own 2000+ line configuration,
+
+00:01:36.340 --> 00:01:39.219
+which actually surprisingly has about 70 stars,
+
+00:01:39.220 --> 00:01:40.539
+a few watchers, a few forks on GitHub.
+
+00:01:40.540 --> 00:01:42.379
+Pretty straightforward.
+
+NOTE Self-exploration vs learning from others
+
+00:01:42.380 --> 00:01:46.419
+But what exactly was that learning process like?
+
+00:01:46.420 --> 00:01:49.459
+Now, Emacs was such a beast to me at first.
+
+00:01:49.460 --> 00:01:51.059
+I was familiar with Python,
+
+00:01:51.060 --> 00:01:52.579
+with C, Java, languages like that.
+
+00:01:52.580 --> 00:01:55.339
+I was no stranger to the shell configuration,
+
+00:01:55.340 --> 00:01:56.579
+anything like that.
+
+00:01:56.580 --> 00:02:01.179
+But the absolute infinity of possibility with Emacs
+
+00:02:01.180 --> 00:02:02.739
+was a bit overwhelming.
+
+00:02:02.740 --> 00:02:04.739
+I find a sentiment in the community
+
+00:02:04.740 --> 00:02:06.939
+that exploring on one's own
+
+00:02:06.940 --> 00:02:11.019
+was greater than exploring and learning from others.
+
+00:02:11.020 --> 00:02:14.459
+And now I see why people say that and it's true in a sense,
+
+00:02:14.460 --> 00:02:17.219
+but it might not be fully understood.
+
+00:02:17.220 --> 00:02:21.179
+At a certain point, we need to all create our own paths.
+
+00:02:21.180 --> 00:02:24.159
+And I think that's just one of the ways Emacs is built.
+
+00:02:24.160 --> 00:02:27.739
+The minute possibilities of configurability are so vast,
+
+00:02:27.740 --> 00:02:29.899
+it's like a fingerprint or a snowflake --
+
+00:02:29.900 --> 00:02:32.179
+there are so many options to create
+
+00:02:32.180 --> 00:02:35.419
+a totally unique Emacs experience.
+
+00:02:35.420 --> 00:02:37.779
+Of course that can't be found from somebody else --
+
+00:02:37.780 --> 00:02:38.699
+It has to come from you.
+
+00:02:38.700 --> 00:02:42.339
+Still, building a strong foundation
+
+00:02:42.340 --> 00:02:45.539
+is much, much better when we have others.
+
+00:02:45.540 --> 00:02:48.579
+Expanding on that foundation is, too, actually.
+
+00:02:48.580 --> 00:02:50.299
+My own process started
+
+00:02:50.300 --> 00:02:53.219
+with a lot of Googling, blog posts, YouTube, and Reddit.
+
+NOTE Learning process
+
+00:02:53.220 --> 00:02:55.419
+I actually found Emacs on YouTube.
+
+00:02:55.420 --> 00:02:58.139
+Seeing how other people used it
+
+00:02:58.140 --> 00:03:01.419
+was what really convinced me to try it for myself.
+
+00:03:01.420 --> 00:03:03.739
+At a certain point when my confidence grew,
+
+00:03:03.740 --> 00:03:07.059
+my trial and error became less error and more success.
+
+00:03:07.060 --> 00:03:09.979
+I was also able to take what I saw other people do,
+
+00:03:09.980 --> 00:03:13.859
+learn from it, and expand, making it my own.
+
+00:03:13.860 --> 00:03:17.019
+And through that time, I learned Emacs.
+
+NOTE Emacs learning (not just learning Emacs)
+
+00:03:17.020 --> 00:03:21.019
+But I also participated in Emacs learning.
+
+00:03:21.020 --> 00:03:22.579
+What's the difference?
+
+00:03:22.580 --> 00:03:24.219
+We often discuss the former,
+
+00:03:24.220 --> 00:03:27.579
+grappling with key binds, commands.
+
+00:03:27.580 --> 00:03:31.619
+But Emacs learning goes beyond these technicalities.
+
+00:03:31.620 --> 00:03:35.859
+It's a mindset. It thrives on collaboration.
+
+00:03:35.860 --> 00:03:37.579
+It's not a solo endeavor;
+
+00:03:37.580 --> 00:03:41.139
+it flourishes best when we do it together.
+
+00:03:41.140 --> 00:03:44.099
+This involves collaborating together,
+
+00:03:44.100 --> 00:03:46.179
+creating a collaborative mindset,
+
+00:03:46.180 --> 00:03:47.979
+sharing effective strategies,
+
+00:03:47.980 --> 00:03:49.075
+lifting each other
+
+00:03:49.076 --> 00:03:51.639
+through our collective pool of knowledge.
+
+00:03:51.640 --> 00:03:55.299
+Together, we contribute to the growth of each member
+
+00:03:55.300 --> 00:03:56.979
+within our vibrant community.
+
+00:03:56.980 --> 00:04:00.259
+Emacs learning is much, much harder to do alone.
+
+00:04:00.260 --> 00:04:03.299
+And I wanted to help with that.
+
+NOTE My YouTube journey
+
+00:04:03.300 --> 00:04:05.739
+So this brings me to the second part of my talk,
+
+00:04:05.740 --> 00:04:08.659
+my Emacs journey, how I got started
+
+00:04:08.660 --> 00:04:11.459
+and where I am today with my YouTube channel,
+
+00:04:11.460 --> 00:04:14.819
+my Straightforward Emacs series with nearly 200,000 views.
+
+NOTE Why not just read the manual?
+
+00:04:14.820 --> 00:04:18.219
+The Emacs Manual is often pushed
+
+00:04:18.220 --> 00:04:20.379
+as the best way to learn Emacs.
+
+00:04:20.380 --> 00:04:21.859
+It's an all-encompassing tome.
+
+00:04:21.860 --> 00:04:23.979
+And as amazing as I think it is,
+
+00:04:23.980 --> 00:04:25.179
+I don't think it's reasonable
+
+00:04:25.180 --> 00:04:27.579
+to push the Emacs manual so hard,
+
+00:04:27.580 --> 00:04:29.059
+which is something I felt at first.
+
+00:04:29.060 --> 00:04:31.599
+It can be really daunting. It's dense.
+
+00:04:31.600 --> 00:04:32.779
+There's a lot there.
+
+00:04:32.780 --> 00:04:34.539
+It's just a bit too much for a beginner,
+
+00:04:34.540 --> 00:04:37.419
+or even someone with a little bit of experience.
+
+00:04:37.420 --> 00:04:40.259
+These qualities, I feel,
+
+00:04:40.260 --> 00:04:43.179
+apply to many of the Emacs resources we can find out there.
+
+00:04:43.180 --> 00:04:45.179
+The best word for them is heavy.
+
+00:04:45.180 --> 00:04:48.099
+They look, they feel, they come across as heavy
+
+00:04:48.100 --> 00:04:50.739
+regardless of what they may actually be.
+
+00:04:50.740 --> 00:04:53.379
+It's not even that people are too lazy,
+
+00:04:53.380 --> 00:04:56.519
+or not capable enough (because that's never true).
+
+00:04:56.520 --> 00:05:00.539
+It's just a mental block that takes some getting over,
+
+00:05:00.540 --> 00:05:03.159
+and that's okay -- so we need other things, too.
+
+00:05:03.160 --> 00:05:04.859
+For me, that was video.
+
+00:05:04.860 --> 00:05:07.539
+I wanted someone to tell and show me
+
+00:05:07.540 --> 00:05:08.939
+what I wanted to know,
+
+00:05:08.940 --> 00:05:11.739
+as well as things I didn't even know were possible.
+
+00:05:11.740 --> 00:05:15.419
+I realized this once I'd progressed a little further
+
+00:05:15.420 --> 00:05:18.019
+in my Emacs journey. I wanted to do my part.
+
+00:05:18.020 --> 00:05:20.979
+I care about Emacs. I started to really care about Emacs.
+
+NOTE Why video for Emacs
+
+00:05:20.980 --> 00:05:24.319
+So I wanted to share about Emacs.
+
+00:05:24.320 --> 00:05:27.339
+So at that point, I refocused my work with Emacs
+
+00:05:27.340 --> 00:05:30.739
+beyond just myself. I wanted to help others
+
+00:05:30.740 --> 00:05:32.719
+feel the excitement that I did.
+
+00:05:32.720 --> 00:05:35.299
+So where did I turn, and why?
+
+00:05:35.300 --> 00:05:37.779
+It's so trite, but they say that
+
+00:05:37.780 --> 00:05:40.159
+a picture is worth a thousand words.
+
+00:05:40.160 --> 00:05:41.859
+So how much is a video worth?
+
+00:05:41.860 --> 00:05:44.219
+Everyone learns differently, and that's okay.
+
+00:05:44.220 --> 00:05:46.139
+But it's absolutely certain to me
+
+00:05:46.140 --> 00:05:48.319
+that you need to see something to believe it.
+
+00:05:48.320 --> 00:05:50.499
+So for that, I turned to video.
+
+00:05:50.500 --> 00:05:54.419
+And it turns out that seeing is believing.
+
+NOTE Straightforward Emacs
+
+00:05:54.420 --> 00:05:56.899
+I made a short video showing off Emacs Org Mode.
+
+00:05:56.900 --> 00:05:58.959
+I didn't even have a voiceover.
+
+00:05:58.960 --> 00:06:01.699
+That video, less than five minutes long,
+
+00:06:01.700 --> 00:06:04.339
+but still incorporating some of my core principles,
+
+00:06:04.340 --> 00:06:06.899
+now has over 55,000 views and counting.
+
+00:06:06.900 --> 00:06:09.459
+So, something must have been right.
+
+00:06:09.460 --> 00:06:11.219
+And the positive reception to that video
+
+00:06:11.220 --> 00:06:12.979
+made me want to continue.
+
+00:06:12.980 --> 00:06:14.939
+I decided to continue with the videos
+
+00:06:14.940 --> 00:06:18.779
+in a series I titled "Straightforward Emacs."
+
+00:06:18.780 --> 00:06:20.939
+And I'm asked: who is the target audience
+
+00:06:20.940 --> 00:06:23.899
+for Straightforward Emacs? It's me.
+
+00:06:23.900 --> 00:06:27.599
+They're the videos I wish I had existed
+
+00:06:27.600 --> 00:06:28.659
+when I was figuring out
+
+00:06:28.660 --> 00:06:32.699
+Emacs' numerous and wonderful features.
+
+NOTE Challenges and benefits of video
+
+00:06:32.700 --> 00:06:36.619
+Video does, I admit, come with its own set of challenges.
+
+00:06:36.620 --> 00:06:40.399
+Complaints that video is less accessible, it's valid.
+
+00:06:40.400 --> 00:06:42.459
+They're more time consuming, it's valid too.
+
+00:06:42.460 --> 00:06:45.059
+It's harder to skim a video than a blog post,
+
+00:06:45.060 --> 00:06:47.499
+and referring back can be a little annoying.
+
+00:06:47.500 --> 00:06:48.419
+To try and solve this,
+
+00:06:48.420 --> 00:06:50.739
+I make video notes available as best I can though.
+
+00:06:50.740 --> 00:06:54.399
+It's not perfect. Despite these valid claims,
+
+00:06:54.400 --> 00:06:57.379
+I believe video offers a sense of personality
+
+00:06:57.380 --> 00:06:59.219
+that written content just can't.
+
+00:06:59.220 --> 00:07:00.779
+And that makes it well worth it.
+
+00:07:00.780 --> 00:07:03.259
+My first two videos in the series
+
+00:07:03.260 --> 00:07:06.259
+received a combined 35,000 views.
+
+00:07:06.260 --> 00:07:08.019
+I still get kind comments today
+
+00:07:08.020 --> 00:07:10.459
+from viewers thanking me, asking questions.
+
+00:07:10.460 --> 00:07:12.779
+So I must have done something right,
+
+00:07:12.780 --> 00:07:14.499
+to outweigh those cons of video,
+
+00:07:14.500 --> 00:07:16.299
+to outweigh those common complaints.
+
+NOTE Crafting tutorials that work
+
+00:07:16.300 --> 00:07:21.659
+What was it? I covered topics that had been done before.
+
+00:07:21.660 --> 00:07:24.019
+But I wanted to present them in my way.
+
+00:07:24.020 --> 00:07:26.659
+In the way that I knew people would appreciate,
+
+00:07:26.660 --> 00:07:28.299
+because it's what I would have appreciated
+
+00:07:28.300 --> 00:07:30.919
+when I started my Emacs journey.
+
+00:07:30.920 --> 00:07:34.479
+In writing, I navigated towards clarity.
+
+00:07:34.480 --> 00:07:38.179
+Crystal clear, step-by-step instructions.
+
+00:07:38.180 --> 00:07:40.699
+Fully scripted, recorded in multiple parts and
+
+00:07:40.700 --> 00:07:43.179
+spliced together. That allowed me
+
+00:07:43.180 --> 00:07:48.599
+to achieve my second goal: no wasted time, or word,
+
+00:07:48.600 --> 00:07:51.819
+or thought. I meticulously cut my videos
+
+00:07:51.820 --> 00:07:54.079
+to create smooth dialogue.
+
+00:07:54.080 --> 00:07:57.499
+I cut out large blocks of typing if not explained.
+
+00:07:57.500 --> 00:07:59.259
+Though this does vary video to video.
+
+00:07:59.260 --> 00:08:03.259
+Less scripted, more personal video receives less editing.
+
+00:08:03.260 --> 00:08:05.659
+Like this talk itself, it's not edited at all.
+
+00:08:05.660 --> 00:08:08.259
+And though prerecorded, I wanted to present
+
+00:08:08.260 --> 00:08:11.719
+my unfiltered, raw self.
+
+NOTE High-quality and accessible content
+
+00:08:11.720 --> 00:08:15.939
+Another goal of mine is high quality and accessible content.
+
+00:08:15.940 --> 00:08:18.579
+I speak carefully and I tune my volume,
+
+00:08:18.580 --> 00:08:20.679
+making it easier to listen to,
+
+00:08:20.680 --> 00:08:23.399
+and improving YouTube's auto-captioning.
+
+00:08:23.400 --> 00:08:24.899
+Something I didn't consider at first,
+
+00:08:24.900 --> 00:08:28.399
+but was mentioned to me in a comment, was color scheme.
+
+00:08:28.400 --> 00:08:29.859
+Now I try to select a scheme
+
+00:08:29.860 --> 00:08:33.279
+with good contrast and a readable font.
+
+00:08:33.280 --> 00:08:35.739
+Content-wise, I design my tutorials
+
+00:08:35.740 --> 00:08:38.219
+to ensure they cater to various skill levels,
+
+00:08:38.220 --> 00:08:40.099
+as well as learning preferences.
+
+00:08:40.100 --> 00:08:42.999
+My videos assume basic Emacs knowledge
+
+00:08:43.000 --> 00:08:44.519
+but not too much more.
+
+00:08:44.520 --> 00:08:47.199
+Importantly, they're configuration agnostic.
+
+00:08:47.200 --> 00:08:50.319
+However you feel about Emacs' 'distributions',
+
+00:08:50.320 --> 00:08:53.119
+Doom, Spacemacs, etc, they're out there,
+
+00:08:53.120 --> 00:08:57.919
+and beginners often don't distinguish.
+
+00:08:57.920 --> 00:09:02.039
+I admit it can be a bit frustrating to see a Reddit post
+
+00:09:02.040 --> 00:09:04.599
+asking a question about unexpected behavior,
+
+00:09:04.600 --> 00:09:06.179
+without mention of the fact that they have
+
+00:09:06.180 --> 00:09:09.659
+literally thousands of lines of non-standard configuration
+
+00:09:09.660 --> 00:09:12.219
+in the form of an Emacs distribution.
+
+00:09:12.220 --> 00:09:14.899
+So I do my best to mention different possible keybindings
+
+00:09:14.900 --> 00:09:17.919
+a viewer might be using.
+
+NOTE Most crucial aspect of my videos
+
+00:09:17.920 --> 00:09:19.939
+There was one thing, though, that turned out to be
+
+00:09:19.940 --> 00:09:23.299
+the most crucial part of my videos and series.
+
+00:09:23.300 --> 00:09:25.459
+And it's one of the reasons itself for this talk.
+
+00:09:25.460 --> 00:09:27.879
+You may have already picked up on it.
+
+00:09:27.880 --> 00:09:31.119
+It's the personal aspect. Sharing myself.
+
+00:09:31.120 --> 00:09:33.659
+Incorporating relatable examples,
+
+00:09:33.660 --> 00:09:36.579
+scenarios that resonate with my audience.
+
+00:09:36.580 --> 00:09:39.139
+Seeing personal use cases, examples,
+
+00:09:39.140 --> 00:09:41.459
+and demonstrations of real life Emacs use
+
+00:09:41.460 --> 00:09:44.059
+is really what began to build a community.
+
+00:09:44.060 --> 00:09:47.219
+Because that's the stuff that can jump out of the video
+
+00:09:47.220 --> 00:09:50.219
+and into the comments.
+
+NOTE A broadening community
+
+00:09:50.220 --> 00:09:53.199
+The idea for this talk started
+
+00:09:53.200 --> 00:09:55.239
+as a story of my YouTube journey.
+
+00:09:55.240 --> 00:09:57.539
+I wanted to share how I began sharing Emacs
+
+00:09:57.540 --> 00:10:00.959
+and why I like it. And I think I've done that.
+
+00:10:00.960 --> 00:10:03.719
+Thanks to the EmacsConf organizers, though,
+
+00:10:03.720 --> 00:10:06.199
+I started to see a larger vision.
+
+00:10:06.200 --> 00:10:08.259
+Each video I made took a lot of effort,
+
+00:10:08.260 --> 00:10:11.139
+from research and planning to script writing,
+
+00:10:11.140 --> 00:10:14.399
+filming and editing. But those comments made it worth it --
+
+00:10:14.400 --> 00:10:16.839
+people saying that straightforward Emacs
+
+00:10:16.840 --> 00:10:17.619
+was just what they were looking for,
+
+00:10:17.620 --> 00:10:20.719
+and that they appreciated my sharing.
+
+00:10:20.720 --> 00:10:22.419
+That's what made me want to continue.
+
+00:10:22.420 --> 00:10:25.699
+And what made me want to continue even more
+
+00:10:25.700 --> 00:10:28.499
+was the community I was building.
+
+00:10:28.500 --> 00:10:30.099
+I'd start to see repeat viewers
+
+00:10:30.100 --> 00:10:32.639
+who'd come back for my latest upload.
+
+00:10:32.640 --> 00:10:34.859
+It's hard for me to find time to produce videos.
+
+00:10:34.860 --> 00:10:38.419
+But whether it was two weeks or four months later
+
+00:10:38.420 --> 00:10:40.259
+when I finally got around to uploading,
+
+00:10:40.260 --> 00:10:43.279
+those same commenters would be there for me.
+
+00:10:43.280 --> 00:10:47.459
+And I found real joy in actively engaging with my audience.
+
+00:10:47.460 --> 00:10:49.499
+It was amazing to see how my videos --
+
+00:10:49.500 --> 00:10:51.259
+me sharing useful Emacs tips,
+
+00:10:51.260 --> 00:10:55.119
+sharing the way I do things -- sparked broader discussions.
+
+00:10:55.120 --> 00:10:56.979
+On any chat form out there, there's no doubt
+
+00:10:56.980 --> 00:10:59.719
+you'll find some sort of cross discourse.
+
+00:10:59.720 --> 00:11:02.199
+I'd see viewers replying to other commenters,
+
+00:11:02.200 --> 00:11:04.419
+and my videos were no exception. Seeing how
+
+00:11:04.420 --> 00:11:06.099
+my videos sparked conversation,
+
+00:11:06.100 --> 00:11:10.779
+debate and further interest was incredible.
+
+NOTE Sharing Emacs
+
+00:11:10.780 --> 00:11:13.999
+We've had two amazing days of sharing Emacs,
+
+00:11:14.000 --> 00:11:17.379
+putting ourselves out there, and sharing in a community.
+
+00:11:17.380 --> 00:11:19.059
+I want to emphasize how amazing
+
+00:11:19.060 --> 00:11:22.339
+a strong community with the right values is,
+
+00:11:22.340 --> 00:11:24.659
+and to inspire each and every one of us
+
+00:11:24.660 --> 00:11:27.699
+to do our part to strengthen that community.
+
+00:11:27.700 --> 00:11:30.259
+The point of my talk isn't to tell you
+
+00:11:30.260 --> 00:11:33.119
+to pick up your microphone and produce a YouTube video,
+
+00:11:33.120 --> 00:11:34.559
+though that wouldn't hurt.
+
+00:11:34.560 --> 00:11:37.779
+We're not all interested in that, and that's okay.
+
+00:11:37.780 --> 00:11:41.059
+First, I want everybody to pat themselves on the back
+
+00:11:41.060 --> 00:11:44.139
+for the mere fact that we are here together.
+
+00:11:44.140 --> 00:11:48.019
+Then let's turn to the potential within our community.
+
+NOTE Platforms
+
+00:11:48.020 --> 00:11:50.139
+First, though, I'll briefly note
+
+00:11:50.140 --> 00:11:52.339
+that everyone has their opinions about platforms,
+
+00:11:52.340 --> 00:11:53.459
+and I'm not here to make judgments,
+
+00:11:53.460 --> 00:11:56.059
+but freedom, equity, and accessibility are important,
+
+00:11:56.060 --> 00:11:57.921
+but reach is, too.
+
+NOTE Achieving unity
+
+00:11:57.922 --> 00:12:00.539
+Regardless of the platform,
+
+00:12:00.540 --> 00:12:02.699
+one thing remains certain:
+
+00:12:02.700 --> 00:12:05.399
+our strength lies in unity.
+
+00:12:05.400 --> 00:12:08.739
+Like any online community, this calls for unique ways
+
+00:12:08.740 --> 00:12:13.779
+to come together and share. How can we achieve this unity?
+
+00:12:13.780 --> 00:12:15.099
+The key is finding avenues
+
+00:12:15.100 --> 00:12:18.799
+where our collective knowledge and our support can flourish,
+
+00:12:18.800 --> 00:12:21.779
+while each person can find a place for themselves,
+
+00:12:21.780 --> 00:12:25.679
+creating a more connected and empowered Emacs community.
+
+00:12:25.680 --> 00:12:29.099
+From uplifting others with positive contributions
+
+00:12:29.100 --> 00:12:31.219
+to engaging on platforms like Reddit,
+
+00:12:31.220 --> 00:12:35.199
+both idealistic and concrete approaches are really valuable.
+
+00:12:35.200 --> 00:12:36.859
+We can continue lively debate
+
+00:12:36.860 --> 00:12:38.899
+on community forums and discussion boards,
+
+00:12:38.900 --> 00:12:41.619
+encouraging a positive and inclusive atmosphere
+
+00:12:41.620 --> 00:12:44.659
+for asking questions and seeking help.
+
+00:12:44.660 --> 00:12:48.259
+We can leverage social media platforms to share quick tips,
+
+00:12:48.260 --> 00:12:51.479
+tricks, or interesting discoveries related to Emacs.
+
+00:12:51.480 --> 00:12:52.579
+Those who enjoy writing
+
+00:12:52.580 --> 00:12:54.859
+can contribute to blogs and newsletters,
+
+00:12:54.860 --> 00:12:57.499
+sharing personal expertise and experiences
+
+00:12:57.500 --> 00:12:59.239
+with a larger audience.
+
+00:12:59.240 --> 00:13:02.959
+Let's also not underestimate the value of online video,
+
+00:13:02.960 --> 00:13:05.659
+as I've said, and learning platforms too.
+
+00:13:05.660 --> 00:13:07.539
+Creating and sharing tutorials
+
+00:13:07.540 --> 00:13:10.259
+on platforms like YouTube or educational websites
+
+00:13:10.260 --> 00:13:14.019
+addresses specific aspects of Emacs and benefits learners,
+
+00:13:14.020 --> 00:13:17.419
+while contributing a personal touch.
+
+00:13:17.420 --> 00:13:20.579
+Participating in or organizing Emacs-related courses
+
+00:13:20.580 --> 00:13:22.539
+also fosters a structured learning
+
+00:13:22.540 --> 00:13:24.259
+environment where there's so much room
+
+00:13:24.260 --> 00:13:26.079
+for mentorship and support,
+
+00:13:26.080 --> 00:13:29.999
+which is valuable for everyone involved.
+
+NOTE Every contribution is valuable
+
+00:13:30.000 --> 00:13:32.579
+We can also call on our open source [* free software] values
+
+00:13:32.580 --> 00:13:34.939
+and focus on collaborative projects,
+
+00:13:34.940 --> 00:13:38.239
+from coding projects where we can contribute and learn
+
+00:13:38.240 --> 00:13:41.019
+to building shared documentation and guides
+
+00:13:41.020 --> 00:13:44.339
+that compile collective knowledge on specific topics --
+
+00:13:44.340 --> 00:13:46.459
+the Emacs Wiki is a great place
+
+00:13:46.460 --> 00:13:49.599
+to start and continue that work as well.
+
+00:13:49.600 --> 00:13:51.659
+Especially for those who might be less willing
+
+00:13:51.660 --> 00:13:53.099
+to put themselves out there,
+
+00:13:53.100 --> 00:13:56.199
+it's essential to recognize that every contribution,
+
+00:13:56.200 --> 00:13:59.519
+regardless of its scale, adds value to our community.
+
+00:13:59.520 --> 00:14:02.119
+Documentation contributions, however small,
+
+00:14:02.120 --> 00:14:04.459
+can go a long way. So do translations,
+
+00:14:04.460 --> 00:14:07.379
+for those who are able to increase accessibility,
+
+00:14:07.380 --> 00:14:09.539
+as well as testing and bug reporting.
+
+00:14:09.540 --> 00:14:11.379
+Reporting issues to package maintainers
+
+00:14:11.380 --> 00:14:14.019
+in their desired format -- speaking as one myself,
+
+00:14:14.020 --> 00:14:16.819
+I appreciate when users give helpful feedback.
+
+00:14:16.820 --> 00:14:20.479
+There are options for everybody, big and small.
+
+00:14:20.480 --> 00:14:22.539
+Remember, the strength of our community
+
+00:14:22.540 --> 00:14:25.339
+lies in its ability to share, collaborate,
+
+00:14:25.340 --> 00:14:29.379
+and learn together. Whether through collaborative projects,
+
+00:14:29.380 --> 00:14:32.899
+sharing insights on forums, or leveraging social media,
+
+00:14:32.900 --> 00:14:34.659
+by embracing these ideas, we can build
+
+00:14:34.660 --> 00:14:40.299
+a more connected and empowered Emacs community.
+
+NOTE Conclusion
+
+00:14:40.300 --> 00:14:43.759
+Now Emacs is so very personal.
+
+00:14:43.760 --> 00:14:44.939
+Those of us who have our own
+
+00:14:44.940 --> 00:14:47.679
+carefully manicured configurations understand --
+
+00:14:47.680 --> 00:14:50.859
+Emacs molds to our liking and our person.
+
+00:14:50.860 --> 00:14:53.219
+Our configurations and use-cases
+
+00:14:53.220 --> 00:14:56.379
+are a reflection of our individuality.
+
+00:14:56.380 --> 00:14:59.319
+Nonetheless, the richness of our community
+
+00:14:59.320 --> 00:15:04.619
+lies in collaboration, sharing, and learning together.
+
+00:15:04.620 --> 00:15:06.099
+There's a lot of talk in the community
+
+00:15:06.100 --> 00:15:09.559
+about how to ensure Emacs' longevity.
+
+00:15:09.560 --> 00:15:11.139
+I agree it's important.
+
+00:15:11.140 --> 00:15:13.819
+We care because of passion, excitement,
+
+00:15:13.820 --> 00:15:16.099
+and utility. We want to share
+
+00:15:16.100 --> 00:15:19.259
+and we want to have others love what we love.
+
+00:15:19.260 --> 00:15:21.099
+We also want a stronger community
+
+00:15:21.100 --> 00:15:23.899
+that fosters new innovation.
+
+00:15:23.900 --> 00:15:26.539
+I used to buy into complaints I'd read online
+
+00:15:26.540 --> 00:15:29.499
+that Emacs' defaults are too unapproachable.
+
+00:15:29.500 --> 00:15:33.419
+The default color scheme and the font is unappealing.
+
+00:15:33.420 --> 00:15:35.699
+Fix that and people will flock.
+
+00:15:35.700 --> 00:15:37.739
+Sounds fair, I'd think.
+
+00:15:37.740 --> 00:15:40.639
+Turns out, it's not what we need.
+
+00:15:40.640 --> 00:15:42.679
+Emacs is bigger than that.
+
+00:15:42.680 --> 00:15:45.779
+What we need is like what we've done here this weekend.
+
+00:15:45.780 --> 00:15:49.659
+Like EmacsConf. It's the absolute epitome
+
+00:15:49.660 --> 00:15:53.899
+of sharing about and caring about Emacs.
+
+00:15:53.900 --> 00:15:56.859
+We are here both working to grow our community,
+
+00:15:56.860 --> 00:16:00.139
+and to strengthen what we already have.
+
+00:16:00.140 --> 00:16:02.579
+We're here because we find joy in Emacs,
+
+00:16:02.580 --> 00:16:05.859
+and that joy is amplified by sharing it
+
+00:16:05.860 --> 00:16:07.679
+with and among others.
+
+00:16:07.680 --> 00:16:10.219
+So let's continue this journey together,
+
+00:16:10.220 --> 00:16:13.459
+navigating Emacs with a spirit of collaboration,
+
+00:16:13.460 --> 00:16:17.259
+because in unity, we find not just strength
+
+00:16:17.260 --> 00:16:22.059
+but the enduring legacy of a tool that we hold very dear.
+
+00:16:22.060 --> 00:16:23.339
+Thank you to everybody here
+
+00:16:23.340 --> 00:16:26.499
+for being part of this shared adventure.
+
+00:16:26.500 --> 00:16:34.120
+Let's go forth and share, together.
diff --git a/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt
new file mode 100644
index 00000000..edf50d33
--- /dev/null
+++ b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt
@@ -0,0 +1,1304 @@
+WEBVTT
+
+
+00:00:02.899 --> 00:00:03.260
+[Speaker 0]: Right. Okay, so hi everyone.
+
+00:00:04.540 --> 00:00:04.839
+We are now live. Hi Howard,
+
+00:00:06.339 --> 00:00:06.839
+how are you doing? Great.
+
+00:00:09.960 --> 00:00:10.460
+Lovely to hear. As usual,
+
+00:00:11.980 --> 00:00:12.480
+it's always a pleasure to see your
+
+00:00:14.440 --> 00:00:14.599
+presentation and the amount of time and
+
+00:00:15.360 --> 00:00:15.780
+energy you put into it.
+
+00:00:17.680 --> 00:00:17.860
+Slightly sorry about the shoppiness of the
+
+00:00:18.680 --> 00:00:19.119
+broadcast. Do not worry,
+
+00:00:22.700 --> 00:00:23.200
+the talk will be in its full 30 fps quality
+
+00:00:24.779 --> 00:00:25.160
+on the website after the conference.
+
+00:00:26.759 --> 00:00:26.939
+Actually, right now. It's available right
+
+00:00:30.099 --> 00:00:30.279
+now. As usual, feel free to ask your
+
+00:00:31.560 --> 00:00:31.920
+questions in the in the pad.
+
+00:00:34.200 --> 00:00:34.360
+We've linked it both on the talk page and on
+
+00:00:38.400 --> 00:00:38.760
+IRC. I think I am on the right 1,
+
+00:00:40.080 --> 00:00:40.580
+right? This is a solo.
+
+00:00:42.660 --> 00:00:43.160
+Guys, questions, where are they?
+
+00:00:45.060 --> 00:00:45.300
+Oh, we do have questions,
+
+00:00:46.920 --> 00:00:47.240
+it's just that they're not in the right part.
+
+00:00:47.960 --> 00:00:48.340
+Okay, so I'm going to start,
+
+00:00:49.739 --> 00:00:49.920
+I'm going to read the questions to Howard and
+
+00:00:50.860 --> 00:00:51.260
+Howard will be answering them.
+
+00:00:52.960 --> 00:00:53.220
+And if you are interested in asking questions
+
+00:00:54.620 --> 00:00:54.860
+directly to Howard, I see a lot of people
+
+00:00:55.640 --> 00:00:56.140
+have joined us on BBB,
+
+00:00:58.540 --> 00:00:58.780
+so we'll first go through the questions on
+
+00:01:00.800 --> 00:01:01.020
+the pad and then we'll move on to the people
+
+00:01:03.340 --> 00:01:03.560
+on BBB. So Howard, starting with the first
+
+00:01:06.300 --> 00:01:06.460
+question, does table data allow for
+
+00:01:08.640 --> 00:01:08.800
+recursion, e.g. The result that returns they
+
+00:01:10.600 --> 00:01:10.940
+are random monster haunting the cavern
+
+00:01:14.060 --> 00:01:14.280
+entrance and we roll on random monster and
+
+00:01:16.420 --> 00:01:16.700
+inject them, inject into the result?
+
+00:01:17.920 --> 00:01:18.420
+Sorry a little bit of a complicated question.
+
+00:01:21.900 --> 00:01:22.200
+Do you want me to read it again,
+
+00:01:23.620 --> 00:01:24.120
+perhaps? Yeah, I think so.
+
+00:01:25.240 --> 00:01:25.740
+I didn't quite catch that.
+
+00:01:28.860 --> 00:01:29.060
+Okay, so does the table data allow for
+
+00:01:30.180 --> 00:01:30.550
+recursion? So I think...
+
+00:01:31.560 --> 00:01:31.880
+[Speaker 1]: Oh, yeah, yeah, yeah, yeah.
+
+00:01:33.960 --> 00:01:34.240
+No, it does. I put a little,
+
+00:01:35.440 --> 00:01:35.940
+you know, there's some code that could,
+
+00:01:38.660 --> 00:01:38.940
+so you could, yeah, you get a random value
+
+00:01:41.040 --> 00:01:41.380
+that gets inserted and that random value
+
+00:01:43.280 --> 00:01:43.580
+could refer to another table and it can keep
+
+00:01:46.000 --> 00:01:46.500
+on going. I have not pushed that that hard
+
+00:01:48.320 --> 00:01:48.820
+because obviously it's,
+
+00:01:50.880 --> 00:01:50.980
+it might be a little on the heavyweight side.
+
+00:01:52.540 --> 00:01:52.760
+I can't imagine it to go too deep,
+
+00:01:52.760 --> 00:01:53.260
+though.
+
+00:01:56.820 --> 00:01:56.979
+[Speaker 0]: I'm pretty sure Emacs would be complaining if
+
+00:01:57.940 --> 00:01:58.320
+you go a little too deep.
+
+00:01:59.979 --> 00:02:00.479
+We have something as Mike's list recursion,
+
+00:02:01.420 --> 00:02:01.840
+and stuff like this. So don't worry.
+
+00:02:03.440 --> 00:02:03.940
+Go willy nilly with your recursions.
+
+00:02:07.120 --> 00:02:07.240
+We've got comments about the fact that it's a
+
+00:02:09.180 --> 00:02:09.680
+really cool project and I feel like everyone
+
+00:02:10.680 --> 00:02:11.180
+watching would be agreeing.
+
+00:02:14.100 --> 00:02:14.340
+You've got a question about where you can get
+
+00:02:16.620 --> 00:02:16.780
+this. Do you have a github repository with
+
+00:02:17.080 --> 00:02:17.580
+all of this?
+
+00:02:20.440 --> 00:02:20.600
+[Speaker 1]: Yeah, and at the well at the end of the
+
+00:02:22.840 --> 00:02:22.960
+presentation I kind of display that and I
+
+00:02:25.920 --> 00:02:26.420
+think I put it at the top of the the pad
+
+00:02:35.220 --> 00:02:35.720
+[Speaker 2]: Yeah, there's a
+
+00:02:36.760 --> 00:02:37.260
+[Speaker 0]: Yes. I don't go Gone please.
+
+00:02:38.680 --> 00:02:38.820
+[Speaker 1]: Nothing there. There's a lot of stuff that
+
+00:02:40.080 --> 00:02:40.580
+needs to be reformatted.
+
+00:02:46.820 --> 00:02:46.940
+This is all Aflacode, so obviously it's a
+
+00:02:49.180 --> 00:02:49.480
+personal hack. So people should just steal
+
+00:02:51.880 --> 00:02:52.160
+the code as opposed to looking at a real
+
+00:02:52.760 --> 00:02:53.260
+project to use.
+
+00:03:00.420 --> 00:03:00.660
+[Speaker 0]: Right, lovely. So this game plus CRDT should
+
+00:03:01.960 --> 00:03:02.460
+be great for non-solid plays.
+
+00:03:03.640 --> 00:03:04.140
+Are you familiar with CRDT?
+
+00:03:08.160 --> 00:03:08.360
+[Speaker 1]: Well, so I used to use Flubits once upon a
+
+00:03:11.880 --> 00:03:12.160
+time and after seeing the previous talk on
+
+00:03:14.060 --> 00:03:14.340
+CRDT it's like, oh, I like that,
+
+00:03:16.000 --> 00:03:16.500
+and yes, I think that would be a fun idea.
+
+00:03:19.860 --> 00:03:20.080
+[Speaker 0]: I think I remember, so I did something much
+
+00:03:21.040 --> 00:03:21.300
+more humble than you did.
+
+00:03:24.660 --> 00:03:24.960
+I did a little bit, a little package in Org
+
+00:03:27.940 --> 00:03:28.080
+Mode for rolling dice and you had like a
+
+00:03:31.560 --> 00:03:31.780
+little formula like you could write 60 20 and
+
+00:03:34.740 --> 00:03:35.240
+it would throw 6 dice with 20 faces,
+
+00:03:39.060 --> 00:03:39.560
+60 sorry, 6 die, Frenchmen here in the room,
+
+00:03:43.660 --> 00:03:43.980
+20 faces and it would average them out or
+
+00:03:45.140 --> 00:03:45.640
+provide you any kind of stats needed.
+
+00:03:48.800 --> 00:03:49.020
+And this type of stuff works really well over
+
+00:03:52.540 --> 00:03:53.040
+CRDT because it's 1 edit inside of a file.
+
+00:03:55.900 --> 00:03:56.320
+If you start making edits in different parts
+
+00:03:58.780 --> 00:03:59.040
+of your file, it starts becoming a little
+
+00:04:02.060 --> 00:04:02.260
+more complicated because CRDT struggles when
+
+00:04:04.480 --> 00:04:04.640
+you're making many discrete changes inside of
+
+00:04:05.640 --> 00:04:06.140
+the same file. Does that make sense?
+
+00:04:07.640 --> 00:04:08.140
+[Speaker 1]: It does, it does. Interesting.
+
+00:04:10.120 --> 00:04:10.280
+Okay, yeah, no, I have not played with it
+
+00:04:10.280 --> 00:04:10.780
+yet.
+
+00:04:14.280 --> 00:04:14.540
+[Speaker 0]: Well, feel free to play with it and if you've
+
+00:04:16.320 --> 00:04:16.820
+got any kind of... If it works,
+
+00:04:17.720 --> 00:04:18.120
+it works and it's amazing,
+
+00:04:20.200 --> 00:04:20.380
+but if it doesn't, feel free to send us
+
+00:04:21.180 --> 00:04:21.680
+messages because Shantan,
+
+00:04:23.240 --> 00:04:23.740
+who's the maintainer of CRDT,
+
+00:04:25.840 --> 00:04:26.000
+we've been looking into options to make it a
+
+00:04:28.380 --> 00:04:28.880
+little more resilient and work elsewhere for
+
+00:04:31.360 --> 00:04:31.860
+securely. Excellent. All right,
+
+00:04:34.600 --> 00:04:35.080
+Great. I'm going back to the previous
+
+00:04:37.160 --> 00:04:37.500
+question. So does the current version also
+
+00:04:39.020 --> 00:04:39.520
+have some utilities for doing multiplayer,
+
+00:04:41.140 --> 00:04:41.640
+like either physically or digitally,
+
+00:04:42.520 --> 00:04:43.020
+like we've done with CRUT?
+
+00:04:45.060 --> 00:04:45.300
+The question is because you mentioned you
+
+00:04:47.360 --> 00:04:47.860
+previously did multiplayer session as well?
+
+00:04:51.180 --> 00:04:51.680
+[Speaker 1]: Yeah, I mean, I was using the table,
+
+00:04:55.940 --> 00:04:56.060
+the random table at a random entry kind of
+
+00:04:58.460 --> 00:04:58.960
+thing. I was using that at my table.
+
+00:05:00.780 --> 00:05:01.280
+So, I'm an eternal DM.
+
+00:05:02.920 --> 00:05:03.420
+So I would always use that.
+
+00:05:05.020 --> 00:05:05.220
+Like somebody says, what's the name of that
+
+00:05:07.160 --> 00:05:07.400
+shopkeep? And I could just hit a key,
+
+00:05:08.440 --> 00:05:08.660
+and it'd come up with the name,
+
+00:05:10.120 --> 00:05:10.620
+and I'd just read it off.
+
+00:05:14.440 --> 00:05:14.940
+But it was still me generating it.
+
+00:05:17.120 --> 00:05:17.540
+So it wasn't something that people would see
+
+00:05:19.540 --> 00:05:19.640
+necessarily, but I would keep notes in it and
+
+00:05:20.520 --> 00:05:21.020
+then publish those notes.
+
+00:05:24.240 --> 00:05:24.620
+But yes, I don't know.
+
+00:05:25.440 --> 00:05:25.940
+This sounds all kind of,
+
+00:05:27.260 --> 00:05:27.760
+this sounds all intriguing.
+
+00:05:28.840 --> 00:05:29.340
+I think this would be fun.
+
+00:05:32.220 --> 00:05:32.720
+I think I need to get a group of like-minded
+
+00:05:35.880 --> 00:05:36.380
+Emacs people who want to play online.
+
+00:05:39.860 --> 00:05:40.120
+[Speaker 0]: I'm sure you've got plenty of people not only
+
+00:05:41.580 --> 00:05:42.080
+watching but also here in BBB.
+
+00:05:44.660 --> 00:05:44.800
+So we only have about 14 minutes until we go
+
+00:05:46.120 --> 00:05:46.360
+to the next talk and it might be a little
+
+00:05:48.200 --> 00:05:48.700
+short for a campaign, but we might just...
+
+00:05:53.220 --> 00:05:53.720
+Moving on to the next question,
+
+00:05:56.480 --> 00:05:56.920
+how does 1 become super awesome like Howard
+
+00:05:58.200 --> 00:05:58.620
+Abrams? And I very much agree.
+
+00:05:58.700 --> 00:05:59.140
+[Speaker 1]: Sure, yes. That's kind,
+
+00:06:04.460 --> 00:06:04.600
+[Speaker 0]: That's not a secret, You're not giving your
+
+00:06:09.360 --> 00:06:09.800
+[Speaker 1]: too kind, too kind. There's no trade secrets.
+
+00:06:10.580 --> 00:06:11.080
+Just follow your passions.
+
+00:06:14.540 --> 00:06:15.040
+[Speaker 0]: trade secrets. I can only conquer.
+
+00:06:16.160 --> 00:06:16.660
+All right, moving on to the next question.
+
+00:06:18.740 --> 00:06:19.200
+Please talk a little about how you produced
+
+00:06:20.460 --> 00:06:20.960
+such a slick presentation video.
+
+00:06:22.800 --> 00:06:23.300
+Everything looked completely professional,
+
+00:06:25.120 --> 00:06:25.620
+and I'd agree. So tell us more.
+
+00:06:29.260 --> 00:06:29.760
+[Speaker 1]: OK, so as you've seen my previous
+
+00:06:32.680 --> 00:06:33.180
+presentations, It's all just Emacs screen.
+
+00:06:35.920 --> 00:06:36.060
+I just felt like, oh, what I really want to
+
+00:06:39.360 --> 00:06:39.560
+talk about is how much fun I'm having and the
+
+00:06:43.680 --> 00:06:43.840
+little introduction. So my son actually is a
+
+00:06:44.980 --> 00:06:45.240
+YouTuber. So I asked him,
+
+00:06:47.200 --> 00:06:47.360
+and it's like, oh, I'll take care of your
+
+00:06:49.940 --> 00:06:50.440
+dad. And so he's the 1 that kind of prompted
+
+00:06:51.280 --> 00:06:51.780
+me. So I had a director.
+
+00:06:53.720 --> 00:06:54.220
+Don't know if that translates,
+
+00:06:58.940 --> 00:06:59.340
+[Speaker 0]: I mean, that translates amazingly.
+
+00:07:02.560 --> 00:07:03.060
+[Speaker 1]: though, but. Very good.
+
+00:07:06.900 --> 00:07:07.400
+You know, very over the top.
+
+00:07:09.440 --> 00:07:09.940
+I've never done something like this before.
+
+00:07:10.460 --> 00:07:10.600
+[Speaker 0]: I mean, the results at the end is No,
+
+00:07:11.680 --> 00:07:12.040
+but it fits you so well.
+
+00:07:14.820 --> 00:07:14.980
+I think this over the top-ness combined with
+
+00:07:15.800 --> 00:07:16.300
+the editing, it just...
+
+00:07:18.900 --> 00:07:19.200
+[Speaker 1]: I might have to keep doing it because it was
+
+00:07:20.600 --> 00:07:21.100
+fun. It was fun to do.
+
+00:07:23.160 --> 00:07:23.300
+[Speaker 0]: You've set a standard that you'll need to
+
+00:07:24.520 --> 00:07:24.860
+meet for following Emax.
+
+00:07:28.360 --> 00:07:28.860
+[Speaker 1]: I'll have to keep paying them then.
+
+00:07:30.820 --> 00:07:31.320
+[Speaker 0]: Oh no! Alright, Yes! Alright,
+
+00:07:32.360 --> 00:07:32.860
+moving on to the next question.
+
+00:07:35.380 --> 00:07:35.540
+Does table data, no sorry that's the 1 we did
+
+00:07:37.360 --> 00:07:37.680
+on recursion and we're not going to struggle
+
+00:07:38.900 --> 00:07:39.400
+through the reading of it again.
+
+00:07:41.280 --> 00:07:41.780
+Alright so with your toolkits,
+
+00:07:43.940 --> 00:07:44.060
+a list of good books would be nice to be
+
+00:07:45.300 --> 00:07:45.800
+included, example D&D,
+
+00:07:48.400 --> 00:07:48.900
+space, steampunk, cyberpunk settings.
+
+00:07:49.800 --> 00:07:50.300
+Do you have such a plan?
+
+00:07:56.120 --> 00:07:56.360
+[Speaker 1]: 00I mean, I could definitely publish a
+
+00:07:59.640 --> 00:08:00.140
+bibliography of things I'm using and reading,
+
+00:08:03.640 --> 00:08:04.140
+But I don't know if I'd be writing anything.
+
+00:08:07.420 --> 00:08:07.640
+[Speaker 0]: Oh come on, don't tell yourself short.
+
+00:08:09.000 --> 00:08:09.140
+You've already proven you were amazing in
+
+00:08:10.640 --> 00:08:11.140
+very different, very varied topics.
+
+00:08:12.840 --> 00:08:13.340
+I'm sure you should give it 1 more try.
+
+00:08:15.460 --> 00:08:15.740
+[Speaker 1]: I don't know. I've got a sabbatical coming
+
+00:08:17.580 --> 00:08:17.840
+up. I'm toying with writing something,
+
+00:08:19.860 --> 00:08:20.360
+but I don't know if it'd ever leave the Emacs
+
+00:08:20.440 --> 00:08:20.940
+buffer.
+
+00:08:23.680 --> 00:08:24.180
+[Speaker 0]: All right, I like this.
+
+00:08:28.140 --> 00:08:28.260
+Next question. Hi Howard and thanks for an
+
+00:08:28.860 --> 00:08:29.360
+outstanding presentation.
+
+00:08:31.640 --> 00:08:31.800
+What did you use to create the graphics in
+
+00:08:34.280 --> 00:08:34.440
+your presentation? Didn't we cover this 1
+
+00:08:35.059 --> 00:08:35.380
+already? I can't remember.
+
+00:08:35.740 --> 00:08:35.860
+No, that was
+
+00:08:41.980 --> 00:08:42.240
+[Speaker 1]: a good 1. So the graphics actually were just
+
+00:08:43.179 --> 00:08:43.679
+kind of hacked together.
+
+00:08:45.020 --> 00:08:45.340
+But then I just gave them to my son.
+
+00:08:47.200 --> 00:08:47.520
+And it's like, can you put the graphic right
+
+00:08:50.140 --> 00:08:50.640
+here and he goes no problem there it is like
+
+00:08:56.280 --> 00:08:56.640
+[Speaker 0]: okay great so 1 more 1 more reason to keep
+
+00:08:57.060 --> 00:08:57.560
+paying your son
+
+00:08:59.820 --> 00:09:00.180
+[Speaker 1]: perfect yeah yeah exactly so if you can get
+
+00:09:02.760 --> 00:09:03.260
+get yourself a YouTuber who knows how to use
+
+00:09:05.800 --> 00:09:06.300
+all the tools. I think he was using DaVinci,
+
+00:09:08.860 --> 00:09:09.360
+but he's got quite a few going.
+
+00:09:12.700 --> 00:09:12.900
+[Speaker 0]: Right. Alright, moving on to the next
+
+00:09:15.040 --> 00:09:15.220
+question. Any plans to borrow tables from
+
+00:09:17.980 --> 00:09:18.240
+Dungeon World or Iron Sword Starforge and
+
+00:09:20.460 --> 00:09:20.960
+publish in a TK repository?
+
+00:09:22.360 --> 00:09:22.860
+Not sure what TK is.
+
+00:09:25.380 --> 00:09:25.880
+[Speaker 1]: Yeah, yeah, okay. So yeah,
+
+00:09:30.320 --> 00:09:30.820
+so that would be fun and I'd love that.
+
+00:09:33.840 --> 00:09:34.340
+And I was just reading a way to render PDFs
+
+00:09:38.080 --> 00:09:38.480
+that you might own into Markdown format.
+
+00:09:39.140 --> 00:09:39.560
+And if it's in Markdown,
+
+00:09:41.440 --> 00:09:41.940
+it'd be easy to pull into Org Mode.
+
+00:09:43.680 --> 00:09:44.180
+So all of the Iron Sworn,
+
+00:09:45.280 --> 00:09:45.780
+that role-playing game,
+
+00:09:48.780 --> 00:09:49.280
+Since it's all under the Creative License,
+
+00:09:51.380 --> 00:09:51.600
+I think even the Star Forge is.
+
+00:09:53.940 --> 00:09:54.280
+So I think I could grab the Star Forge 1.
+
+00:09:56.820 --> 00:09:57.100
+I don't know about Dungeon World and their
+
+00:09:59.220 --> 00:09:59.380
+tables. But yeah, a lot of people are
+
+00:10:01.060 --> 00:10:01.500
+starting to publish those kind of tables.
+
+00:10:03.760 --> 00:10:04.180
+So yeah, that'd be fun.
+
+00:10:07.160 --> 00:10:07.400
+I'd like to render all those in text files
+
+00:10:08.560 --> 00:10:09.060
+that I could pull up like that.
+
+00:10:13.180 --> 00:10:13.580
+[Speaker 0]: Lovely. I think that's all for the questions
+
+00:10:15.820 --> 00:10:16.320
+we had in the pad. We still have 9 minutes.
+
+00:10:18.280 --> 00:10:18.760
+I see plenty of people have joined us,
+
+00:10:21.060 --> 00:10:21.560
+including 1 person with a microphone on BBB.
+
+00:10:23.160 --> 00:10:23.500
+PlasmaStrike, do you have a question?
+
+00:10:24.920 --> 00:10:25.180
+And would you like to unmute yourself and ask
+
+00:10:28.440 --> 00:10:28.940
+it? I'm also going to check the chat.
+
+00:10:31.640 --> 00:10:31.920
+[Speaker 1]: Oh, yeah. StarsWithoutNumber is another great
+
+00:10:33.640 --> 00:10:34.140
+1 that's got some great tables in it.
+
+00:10:37.720 --> 00:10:37.960
+Sorry, I'm just looking at the questions that
+
+00:10:38.940 --> 00:10:39.440
+are popping up here, too.
+
+00:10:42.740 --> 00:10:43.180
+[Speaker 0]: Sure. So I don't see anyone unmuting
+
+00:10:44.540 --> 00:10:44.800
+themselves. I see people typing away
+
+00:10:45.220 --> 00:10:45.400
+questions. By the way,
+
+00:10:46.120 --> 00:10:46.560
+if you're going to type questions,
+
+00:10:48.240 --> 00:10:48.680
+perhaps do not put them on BBB,
+
+00:10:50.460 --> 00:10:50.600
+put them in the pad. It's a little easier for
+
+00:10:52.380 --> 00:10:52.880
+us to archive them afterwards.
+
+00:10:56.160 --> 00:10:56.580
+I'm going to give a little bit of time.
+
+00:10:58.360 --> 00:10:58.860
+I feel bad about going on break when I have
+
+00:11:00.940 --> 00:11:01.160
+you available and ready to answer more
+
+00:11:02.680 --> 00:11:03.180
+questions. Oh, you're too kind.
+
+00:11:07.360 --> 00:11:07.860
+[Speaker 2]: How have you, as this changed,
+
+00:11:09.520 --> 00:11:09.960
+how's your visualization of the books,
+
+00:11:11.260 --> 00:11:11.760
+or of your games at all?
+
+00:11:15.180 --> 00:11:15.680
+[Speaker 1]: Sorry, can you ask that 1 more time?
+
+00:11:16.700 --> 00:11:17.200
+I didn't catch the first part.
+
+00:11:20.140 --> 00:11:20.600
+[Speaker 2]: How has this impacted,
+
+00:11:23.080 --> 00:11:23.300
+like, your imagination on the scenes and
+
+00:11:28.240 --> 00:11:28.360
+stuff like that because it's partly open and
+
+00:11:30.720 --> 00:11:30.920
+closed because you had that chart where you
+
+00:11:32.880 --> 00:11:33.380
+had that where you put it in the center of
+
+00:11:37.240 --> 00:11:37.400
+constrained by algorithms to enhance your
+
+00:11:39.780 --> 00:11:40.020
+creativity, you write it but it's not all
+
+00:11:42.700 --> 00:11:42.900
+freeform to where you have writer's block as
+
+00:11:42.900 --> 00:11:43.400
+much.
+
+00:11:46.800 --> 00:11:47.080
+[Speaker 1]: You hit the, You hit it on the head.
+
+00:11:49.640 --> 00:11:50.040
+That's exactly it. That's why I've been doing
+
+00:11:53.940 --> 00:11:54.440
+this. Creativity is a hard thing to foster.
+
+00:11:57.520 --> 00:11:57.700
+And having little prompts that you have to
+
+00:11:58.340 --> 00:11:58.840
+kind of work together,
+
+00:12:03.660 --> 00:12:04.160
+like twisty language, what does that mean?
+
+00:12:06.560 --> 00:12:06.900
+Oh, you have to kind of work with that.
+
+00:12:08.800 --> 00:12:09.160
+So yeah, that's 1 of the reasons why I got
+
+00:12:11.800 --> 00:12:12.300
+into doing the solo version of it,
+
+00:12:14.120 --> 00:12:14.600
+just because you kind of,
+
+00:12:15.980 --> 00:12:16.480
+it does really foster the creativity.
+
+00:12:23.540 --> 00:12:24.040
+Did that answer the question?
+
+00:12:28.520 --> 00:12:28.780
+[Speaker 2]: Yeah well has it kind of has it improved over
+
+00:12:30.060 --> 00:12:30.280
+time though of using it like
+
+00:12:33.200 --> 00:12:33.700
+[Speaker 1]: oh yeah oh yeah I would definitely say so
+
+00:12:36.420 --> 00:12:36.920
+While I'm still not ready to publish my files
+
+00:12:40.240 --> 00:12:40.740
+at all, but the first ones were much worse.
+
+00:12:46.160 --> 00:12:46.320
+[Speaker 2]: That was an example like after you play for
+
+00:12:47.800 --> 00:12:48.080
+like 2 months or something like that,
+
+00:12:50.320 --> 00:12:50.440
+like, could you close your eyes and see the
+
+00:12:51.420 --> 00:12:51.920
+rooms a lot better versus...
+
+00:12:54.720 --> 00:12:55.220
+[Speaker 1]: Yeah, I think so. I think so.
+
+00:13:02.150 --> 00:13:02.500
+And, you know, there's 1 solo game called A
+
+00:13:03.340 --> 00:13:03.840
+Thousand-Year-Old Vampire.
+
+00:13:05.740 --> 00:13:06.100
+I don't know if you've seen that 1 or not,
+
+00:13:08.440 --> 00:13:08.940
+but it's quite creative.
+
+00:13:09.720 --> 00:13:10.220
+It's very interesting.
+
+00:13:13.180 --> 00:13:13.680
+It's got a great setup to use.
+
+00:13:17.200 --> 00:13:17.320
+And When I was looking through it,
+
+00:13:19.320 --> 00:13:19.820
+it's like, I'm thinking of a typical vampire
+
+00:13:20.720 --> 00:13:21.220
+and this sort of thing.
+
+00:13:25.760 --> 00:13:26.040
+But then there's this YouTuber named Seth
+
+00:13:27.880 --> 00:13:28.180
+Skalkarski, if I can pronounce his name
+
+00:13:30.020 --> 00:13:30.060
+right. He was describing it.
+
+00:13:32.040 --> 00:13:32.540
+And he came up with a completely different
+
+00:13:34.540 --> 00:13:34.940
+vampire scene. And it's like,
+
+00:13:37.560 --> 00:13:37.880
+oh, I could see how people can kind of start
+
+00:13:40.600 --> 00:13:41.000
+working on these things and really see things
+
+00:13:43.080 --> 00:13:43.260
+differently. And the creativity and all that
+
+00:13:44.340 --> 00:13:44.840
+sort of stuff just really blossoms.
+
+00:13:48.040 --> 00:13:48.540
+[Speaker 2]: And then I guess as an extension of that,
+
+00:13:53.680 --> 00:13:53.920
+how has the stories changed after using this
+
+00:13:58.140 --> 00:13:58.640
+toolkit or the solo games for 2 months?
+
+00:14:00.200 --> 00:14:00.700
+Like the scenes, like how you,
+
+00:14:02.440 --> 00:14:02.940
+like the stories that you'd start generating?
+
+00:14:05.980 --> 00:14:06.460
+[Speaker 1]: Yeah, yeah, yeah. Yeah,
+
+00:14:09.000 --> 00:14:09.200
+I mean, a lot depends on just how much you're
+
+00:14:10.140 --> 00:14:10.440
+willing to put into it.
+
+00:14:13.980 --> 00:14:14.340
+But yeah, I've definitely had a lot of fun.
+
+00:14:16.360 --> 00:14:16.760
+And it's just been a lot more enjoyable and
+
+00:14:17.680 --> 00:14:18.180
+just more interesting.
+
+00:14:21.960 --> 00:14:22.120
+[Speaker 2]: Well I mean like has the types and quality of
+
+00:14:23.940 --> 00:14:24.440
+the stories changed a lot?
+
+00:14:25.240 --> 00:14:25.740
+Or more than that?
+
+00:14:30.280 --> 00:14:30.620
+[Speaker 1]: I think so, you know, but obviously the proof
+
+00:14:34.000 --> 00:14:34.500
+is if somebody else is doing the evaluation
+
+00:14:39.060 --> 00:14:39.280
+and I'm not letting that out But I think so,
+
+00:14:42.040 --> 00:14:42.500
+but I think so so but I think your mileage
+
+00:14:44.340 --> 00:14:44.840
+may vary. So yeah, try it out
+
+00:14:47.360 --> 00:14:47.860
+[Speaker 2]: Have you seen the game Dwarf Fortress?
+
+00:14:50.880 --> 00:14:51.140
+Because it's supposed to be a video game
+
+00:14:53.040 --> 00:14:53.260
+that's in a similar spirit to that,
+
+00:14:55.080 --> 00:14:55.580
+where it helps you generate stories.
+
+00:14:56.820 --> 00:14:57.320
+Dwarf Fortress, RimWorld,
+
+00:15:00.420 --> 00:15:00.920
+Kenshi is another 1.
+
+00:15:03.400 --> 00:15:03.720
+[Speaker 1]: Yeah, no, I've looked at the Dwarf Fortress,
+
+00:15:04.640 --> 00:15:04.900
+but I haven't played it.
+
+00:15:08.160 --> 00:15:08.480
+But that 1 seems a little bit more
+
+00:15:10.640 --> 00:15:10.920
+structured, but still could be a lot of fun
+
+00:15:13.700 --> 00:15:13.860
+too. And then others, it's like,
+
+00:15:15.240 --> 00:15:15.260
+how far do you want to take it?
+
+00:15:18.280 --> 00:15:18.780
+Like I just picked up this 1 called Broken
+
+00:15:21.820 --> 00:15:21.980
+Cask. There it is, where you generate a
+
+00:15:25.240 --> 00:15:25.640
+little bar tavern, and then you start rolling
+
+00:15:29.180 --> 00:15:29.540
+events. Now, it gives a lot more stuff coming
+
+00:15:30.780 --> 00:15:31.060
+out of it. It's like, oh,
+
+00:15:32.700 --> 00:15:32.980
+this person's showing up and this is what's
+
+00:15:34.700 --> 00:15:34.840
+happening, but you can elaborate on it as
+
+00:15:36.660 --> 00:15:36.880
+much as you want. And that's what I'm
+
+00:15:39.600 --> 00:15:39.840
+thinking I might do. Hi,
+
+00:15:40.600 --> 00:15:41.100
+Mike, you got a question?
+
+00:15:47.680 --> 00:15:48.180
+[Speaker 3]: Hi, Howard. Yeah, I do have a question.
+
+00:15:50.940 --> 00:15:51.440
+I'm a big fan of your work on literate DevOps
+
+00:15:53.120 --> 00:15:53.620
+and your essay and video on that topic.
+
+00:15:56.040 --> 00:15:56.260
+I'm just wondering if you still use that
+
+00:15:59.640 --> 00:15:59.820
+workflow at work and have you changed how
+
+00:16:02.160 --> 00:16:02.420
+that process works or has it evolved over
+
+00:16:04.720 --> 00:16:05.220
+time since that video and essay were written?
+
+00:16:06.840 --> 00:16:07.340
+[Speaker 1]: That's a good question.
+
+00:16:12.440 --> 00:16:12.600
+Yes, I still do it. It varies depending on
+
+00:16:13.500 --> 00:16:14.000
+the project and whatnot.
+
+00:16:16.400 --> 00:16:16.900
+But I still am using it.
+
+00:16:20.280 --> 00:16:20.520
+Yeah, yeah. In fact, I'm doing it with a lot
+
+00:16:22.760 --> 00:16:23.260
+of other things. Like all my configuration
+
+00:16:27.660 --> 00:16:28.160
+files are all in a literate style for Emacs.
+
+00:16:31.160 --> 00:16:31.660
+And even all the code that's in Ironsworn,
+
+00:16:35.060 --> 00:16:35.560
+the repo, if you go to the repo,
+
+00:16:37.440 --> 00:16:37.640
+it's the readme file. And yeah,
+
+00:16:39.720 --> 00:16:40.140
+that's just being rendered out to the Emacs
+
+00:16:41.660 --> 00:16:42.160
+file. So it is still all literate.
+
+00:16:43.440 --> 00:16:43.940
+[Speaker 3]: Very cool.
+
+00:16:46.500 --> 00:16:46.780
+[Speaker 1]: Yeah, because I don't know.
+
+00:16:48.120 --> 00:16:48.620
+Some things are just a little too complicated
+
+00:16:49.320 --> 00:16:49.820
+to just type up.
+
+00:16:56.040 --> 00:16:56.200
+[Speaker 0]: All right, sorry to be the bearer of bad
+
+00:16:58.220 --> 00:16:58.720
+news, but we have only about 3 more minutes
+
+00:16:59.840 --> 00:17:00.060
+of lifetime. By the way,
+
+00:17:02.920 --> 00:17:03.120
+feel free to stay and discuss any of the
+
+00:17:07.540 --> 00:17:08.040
+topic of today's session after we go off air
+
+00:17:10.579 --> 00:17:10.859
+and we'll be able to keep all of the nice
+
+00:17:12.260 --> 00:17:12.540
+discussion and put them on the talks page
+
+00:17:16.560 --> 00:17:17.060
+afterwards. Great. Howard,
+
+00:17:20.020 --> 00:17:20.280
+I would like to ask you if you have any last
+
+00:17:21.760 --> 00:17:21.900
+words regarding the presentation or the
+
+00:17:23.040 --> 00:17:23.540
+questions you've had. Well,
+
+00:17:24.520 --> 00:17:25.020
+the last question we had,
+
+00:17:27.500 --> 00:17:27.720
+actually, we had Mike come and ask it live.
+
+00:17:29.440 --> 00:17:29.720
+But do you have any parting words before we
+
+00:17:31.720 --> 00:17:32.220
+leave you? Okay.
+
+00:17:37.560 --> 00:17:38.000
+[Speaker 1]: I think the last thing is go and hack
+
+00:17:41.420 --> 00:17:41.720
+something. I mean, this Lisp stuff is a lot
+
+00:17:43.860 --> 00:17:44.360
+of fun. And I hope that came across.
+
+00:17:47.240 --> 00:17:47.420
+It's like, the project I made is just a
+
+00:17:50.220 --> 00:17:50.720
+personal thing and it was fun for me to make,
+
+00:17:53.100 --> 00:17:53.400
+but everybody's probably got some fun thing
+
+00:17:54.320 --> 00:17:54.820
+they could make as well.
+
+00:17:56.200 --> 00:17:56.700
+And just, I don't know,
+
+00:17:58.460 --> 00:17:58.960
+hack it yourself because all the,
+
+00:18:01.920 --> 00:18:02.420
+you know, think about adding multi-threading
+
+00:18:04.480 --> 00:18:04.740
+to Emacs. Maybe we don't want that,
+
+00:18:06.000 --> 00:18:06.360
+because that'll just complicate things.
+
+00:18:08.200 --> 00:18:08.700
+This is your own personal hacking sandbox,
+
+00:18:09.520 --> 00:18:10.020
+so go have fun.
+
+00:18:14.220 --> 00:18:14.380
+[Speaker 0]: Great. I was just going to say we were
+
+00:18:15.060 --> 00:18:15.560
+talking about Dwarf Fortress.
+
+00:18:18.680 --> 00:18:19.180
+In Dwarf Fortress, it's a very CPU intensive
+
+00:18:21.020 --> 00:18:21.240
+game because it needs to compute every single
+
+00:18:23.480 --> 00:18:23.860
+thing in the world and there's such a thing
+
+00:18:27.700 --> 00:18:27.780
+as the CPU death of the world where basically
+
+00:18:29.340 --> 00:18:29.500
+you've got too many cats that are just
+
+00:18:31.320 --> 00:18:31.440
+breeding constantly with 1 another and it
+
+00:18:33.760 --> 00:18:34.000
+creates so many entities that it just
+
+00:18:36.760 --> 00:18:36.940
+crashes, and the time it takes for the day to
+
+00:18:38.440 --> 00:18:38.940
+finish it, it just never finish.
+
+00:18:40.680 --> 00:18:41.180
+So I was going to say maybe multi-threading
+
+00:18:43.180 --> 00:18:43.660
+might be useful in this case for Emacs.
+
+00:18:46.100 --> 00:18:46.600
+So, wanting to foray into the future.
+
+00:18:48.800 --> 00:18:49.300
+[Speaker 1]: All right. Thank you.
+
+00:18:50.900 --> 00:18:51.180
+[Speaker 0]: And thank you so much,
+
+00:18:52.360 --> 00:18:52.540
+Howard, and thank you Plasma Strike for your
+
+00:18:53.320 --> 00:18:53.560
+question, as well as Mike,
+
+00:18:55.760 --> 00:18:55.900
+who joined us. We're going to go live with
+
+00:18:57.440 --> 00:18:57.940
+the next talk in about 1 minute,
+
+00:19:00.400 --> 00:19:00.580
+and until then, well, I'm not going to put
+
+00:19:02.040 --> 00:19:02.400
+music, You can wait 50 seconds without music,
+
+00:19:03.960 --> 00:19:04.460
+you Zoomers. We'll be back in a bit.
+
+00:19:05.280 --> 00:19:05.780
+[Speaker 2]: Bye-bye.
+
+00:19:09.620 --> 00:19:09.860
+[Speaker 0]: Bye, Howard. All right,
+
+00:19:11.120 --> 00:19:11.280
+we are off. Thank you so much,
+
+00:19:11.980 --> 00:19:12.480
+Howard. I need to dash.
+
+00:19:13.940 --> 00:19:14.440
+And oh, I think he's already gone.
+
+00:19:16.360 --> 00:19:16.860
+So Bye everyone, I'll see you later.
diff --git a/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt
new file mode 100644
index 00000000..53987434
--- /dev/null
+++ b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:20.679
+Introduction
+
+00:01:20.680 --> 00:02:47.439
+Solo RPGs
+
+00:02:47.440 --> 00:04:11.759
+Demo
+
+00:04:11.760 --> 00:05:31.959
+Randomization
+
+00:05:31.960 --> 00:06:03.639
+Moves
+
+00:06:03.640 --> 00:06:34.679
+Reference
+
+00:06:34.680 --> 00:07:48.679
+Story arcs
+
+00:07:48.680 --> 00:09:02.959
+Using different stats
+
+00:09:02.960 --> 00:09:34.799
+Dice rolls
+
+00:09:34.800 --> 00:10:19.679
+Dangers
+
+00:10:19.680 --> 00:11:49.679
+A strong success
+
+00:11:49.680 --> 00:13:04.719
+Other solo RPGs
+
+00:13:04.720 --> 00:14:35.920
+Conclusion
diff --git a/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt
new file mode 100644
index 00000000..9e8147a4
--- /dev/null
+++ b/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt
@@ -0,0 +1,834 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:05.559
+Hi there, I'm Howard Abrams. You may remember me
+
+00:00:05.560 --> 00:00:07.719
+from past conference talks
+
+00:00:07.720 --> 00:00:10.519
+as "Literate DevOps and the Temple of Doom"
+
+00:00:10.520 --> 00:00:13.399
+and "Using Eshell for Fun and Profit".
+
+00:00:13.400 --> 00:00:16.599
+I'm here to talk to you about my latest Emacs project:
+
+00:00:16.600 --> 00:00:19.479
+playing games, solo role-playing games.
+
+00:00:19.480 --> 00:00:23.159
+I started playing RPGs when I got my first copy
+
+00:00:23.160 --> 00:00:25.599
+of Dungeons & Dragons when I was 12.
+
+00:00:25.600 --> 00:00:28.279
+Yes, my original copy burned
+
+00:00:28.280 --> 00:00:30.559
+in the Great Satanic Panic of the 1980s,
+
+00:00:30.560 --> 00:00:32.359
+but that's another story.
+
+00:00:32.360 --> 00:00:37.919
+I started playing other RPGs like GURPS.
+
+00:00:37.920 --> 00:00:39.999
+These are some of my notes.
+
+00:00:40.000 --> 00:00:42.559
+Back then, I was typing them in Emacs,
+
+00:00:42.560 --> 00:00:46.079
+but I formatted them with LaTeX.
+
+00:00:46.080 --> 00:00:49.079
+Later, when I was introducing my kids
+
+00:00:49.080 --> 00:00:50.839
+to role-playing games,
+
+00:00:50.840 --> 00:00:53.580
+I actually typed them up still in Emacs,
+
+00:00:53.581 --> 00:00:57.599
+but now formatted them for a tablet.
+
+00:00:57.600 --> 00:00:59.319
+I wrote a little JavaScript code
+
+00:00:59.320 --> 00:01:03.119
+that allowed me to click on it, and it would roll dice,
+
+00:01:03.120 --> 00:01:06.679
+generate random events, keep track of turn order,
+
+00:01:06.680 --> 00:01:07.479
+you know, everything,
+
+00:01:07.480 --> 00:01:10.119
+so I didn't have to slow down the action of the game.
+
+00:01:10.120 --> 00:01:12.999
+Well, when my kids got older,
+
+00:01:13.000 --> 00:01:15.599
+I still managed to sneak in a game of D&D
+
+00:01:15.600 --> 00:01:17.319
+once a week at lunch.
+
+00:01:17.320 --> 00:01:20.679
+This pastime came to a screeching halt with the pandemic.
+
+NOTE Solo RPGs
+
+00:01:20.680 --> 00:01:23.639
+I turned to playing role-playing games by myself
+
+00:01:23.640 --> 00:01:27.999
+to get my fix. Playing these silly elf games in solo mode
+
+00:01:28.000 --> 00:01:29.879
+has been part of the game for many years,
+
+00:01:29.880 --> 00:01:32.559
+but with so many of us stuck at home,
+
+00:01:32.560 --> 00:01:35.119
+solo role-playing games really expanded,
+
+00:01:35.120 --> 00:01:40.279
+creative people releasing some amazing ideas.
+
+00:01:40.280 --> 00:01:44.399
+What's a solo RPG like? Well, it's somewhere in the middle
+
+00:01:44.400 --> 00:01:47.519
+of writing your own story, where anything's possible,
+
+00:01:47.520 --> 00:01:50.159
+but you've got to do all the imaginative work;
+
+00:01:50.160 --> 00:01:52.999
+or reading a choose-your-own-adventure book,
+
+00:01:53.000 --> 00:01:55.239
+where the text is given to you,
+
+00:01:55.240 --> 00:01:59.079
+and you have free, a few predetermined paths;
+
+00:01:59.080 --> 00:02:01.039
+and tactical battle games,
+
+00:02:01.040 --> 00:02:03.159
+where dice determines everything.
+
+00:02:03.160 --> 00:02:05.799
+It kind of fits in the sweet spot between those.
+
+00:02:05.800 --> 00:02:08.879
+While I started removing the Game Master
+
+00:02:08.880 --> 00:02:12.119
+using the Mythic GM Emulator,
+
+00:02:12.120 --> 00:02:15.319
+Ironsworn really captivated me.
+
+00:02:15.320 --> 00:02:19.199
+I began with dice, pencils, notebooks, you know,
+
+00:02:19.200 --> 00:02:23.359
+just like when I was a kid. But taking notes on paper?
+
+00:02:23.360 --> 00:02:27.999
+Yeah, you know me. That's not my jam. Org mode is.
+
+00:02:28.000 --> 00:02:31.159
+And, you know, notes have to be in Org,
+
+00:02:31.160 --> 00:02:35.159
+well, why not write a little dice roller in Lisp?
+
+00:02:35.160 --> 00:02:38.799
+Well, when Shawn Tomkin released his Ironsworn
+
+00:02:38.800 --> 00:02:41.879
+under the Creative Commons, well,
+
+00:02:41.880 --> 00:02:43.919
+I could just download the entire text.
+
+00:02:43.920 --> 00:02:47.439
+I figured I could just render the entire game in Emacs.
+
+NOTE Demo
+
+00:02:47.440 --> 00:02:51.239
+All right, enough talk. Let's get some Emacs action here,
+
+00:02:51.240 --> 00:02:55.199
+while I show you a bit of my game.
+
+00:02:55.200 --> 00:02:57.519
+When playing a solo RPG,
+
+00:02:57.520 --> 00:02:59.759
+I jot down the story notes in an Org file.
+
+00:02:59.760 --> 00:03:02.759
+I mean, did you expect anything less from me?
+
+00:03:02.760 --> 00:03:07.759
+I alternate between lengthy prose and short notes.
+
+00:03:07.760 --> 00:03:10.519
+As I'm both the writer and the audience,
+
+00:03:10.520 --> 00:03:11.999
+the goal is just enjoyment.
+
+00:03:12.000 --> 00:03:16.999
+So, this document is both a record log of my game sessions,
+
+00:03:17.000 --> 00:03:20.959
+as well as my character's character sheet.
+
+00:03:20.960 --> 00:03:24.519
+In most RPGs, a player's focus is a character sheet
+
+00:03:24.520 --> 00:03:26.999
+that lists all the attributes, the stats, equipment,
+
+00:03:27.000 --> 00:03:28.759
+powers, you know, that sort of thing.
+
+00:03:28.760 --> 00:03:32.959
+For my game, I wanted the focus to be the prose,
+
+00:03:32.960 --> 00:03:34.559
+or at least the notes.
+
+00:03:34.560 --> 00:03:38.199
+So, I put down all the stats as Org mode properties.
+
+00:03:38.200 --> 00:03:40.799
+Now, I can collapse a property drawer
+
+00:03:40.800 --> 00:03:42.119
+and have functions
+
+00:03:42.120 --> 00:03:45.759
+that just grab values from these properties.
+
+00:03:45.760 --> 00:03:50.079
+All right, let's play. While not important to my talk,
+
+00:03:50.080 --> 00:03:52.679
+I'm in the middle of a game. My character, Tegan,
+
+00:03:52.680 --> 00:03:54.959
+promised to help a village by tracking down
+
+00:03:54.960 --> 00:03:59.239
+the son of a village chief. A less-than-stellar roll
+
+00:03:59.240 --> 00:04:01.199
+meant I didn't catch him before he entered
+
+00:04:01.200 --> 00:04:03.879
+the mysterious underground structure
+
+00:04:03.880 --> 00:04:06.399
+of a relic of an ancient people.
+
+00:04:06.400 --> 00:04:08.399
+I just finished playing out the journey,
+
+00:04:08.400 --> 00:04:11.759
+and he's about to enter into the Catacombs of Svala's Blood.
+
+NOTE Randomization
+
+00:04:11.760 --> 00:04:15.199
+Why that name? Well, that was actually what came up
+
+00:04:15.200 --> 00:04:19.639
+from an extensive random number generator that I wrote.
+
+00:04:19.640 --> 00:04:21.959
+As I wrote more and more functions
+
+00:04:21.960 --> 00:04:23.279
+to help me play this game,
+
+00:04:23.280 --> 00:04:25.919
+and since I don't play all the time,
+
+00:04:25.920 --> 00:04:30.359
+I created hydra. I can roll dice,
+
+00:04:30.360 --> 00:04:34.079
+I can roll dice challenges against the character stats,
+
+00:04:34.080 --> 00:04:38.199
+I can adjust stats. Lots of random generators
+
+00:04:38.200 --> 00:04:39.479
+come from this oracle section.
+
+00:04:39.480 --> 00:04:43.159
+For instance, are footprints going through the door?
+
+00:04:43.160 --> 00:04:46.479
+I press `c`, and I'm prompted with how likely.
+
+00:04:46.480 --> 00:04:51.079
+Since the villagers gave Tegan vague directions,
+
+00:04:51.080 --> 00:04:53.239
+and he didn't see any signs the contrary,
+
+00:04:53.240 --> 00:04:58.479
+I chose "likely". And, well, it originally said yes,
+
+00:04:58.480 --> 00:05:01.599
+and that's why I jotted this information down.
+
+00:05:01.600 --> 00:05:03.479
+Now, this is different than my character's ability
+
+00:05:03.480 --> 00:05:07.639
+to notice the prints. This is about generating the story,
+
+00:05:07.640 --> 00:05:10.279
+something that the game master would do
+
+00:05:10.280 --> 00:05:12.479
+in a typical role-playing game.
+
+00:05:12.480 --> 00:05:14.719
+Now, if I wanted to name something,
+
+00:05:14.720 --> 00:05:16.039
+or even the current weather,
+
+00:05:16.040 --> 00:05:20.399
+I have random tables with the `C` keystroke.
+
+00:05:20.400 --> 00:05:27.279
+Hmm, weather. Oh, it's summer, so hey,
+
+00:05:27.280 --> 00:05:31.959
+it's nice and clear. All right, let's play.
+
+NOTE Moves
+
+00:05:31.960 --> 00:05:34.239
+The action in Ironsworn,
+
+00:05:34.240 --> 00:05:37.039
+like other Powered by the Apocalypse games,
+
+00:05:37.040 --> 00:05:44.359
+is driven by moves. So, I hit the `m` key,
+
+00:05:44.360 --> 00:05:46.879
+and all the moves show up.
+
+00:05:46.880 --> 00:05:49.479
+Now, I don't think I need to espouse
+
+00:05:49.480 --> 00:05:52.679
+the virtues of completing-read enhancements like Ivy.
+
+00:05:52.680 --> 00:05:55.559
+Here, I'm using orderless with vertico
+
+00:05:55.560 --> 00:05:57.719
+to help me find my choices.
+
+00:05:57.720 --> 00:06:03.639
+Since I've discovered a site, let's play that move.
+
+NOTE Reference
+
+00:06:03.640 --> 00:06:06.479
+I seldom remember the details for the moves,
+
+00:06:06.480 --> 00:06:09.159
+so I figured, why not put the text of the book
+
+00:06:09.160 --> 00:06:11.799
+in an Org file and show it in a side window?
+
+00:06:11.800 --> 00:06:15.439
+The prompt at the bottom, asking for a name,
+
+00:06:15.440 --> 00:06:18.199
+is driven by the content in the displayed Org file.
+
+00:06:18.200 --> 00:06:21.119
+This allows me to enhance my game without
+
+00:06:21.120 --> 00:06:25.159
+changing the original code. So, let's call this story arc,
+
+00:06:25.160 --> 00:06:31.839
+Exploring the Catacombs of Svala's Blood.
+
+00:06:31.840 --> 00:06:34.679
+Ooh, sounds epic.
+
+NOTE Story arcs
+
+00:06:34.680 --> 00:06:37.239
+Ironsworn tracks the beats of a narrative,
+
+00:06:37.240 --> 00:06:40.799
+so major plot points take up more room in the fiction
+
+00:06:40.800 --> 00:06:42.759
+than minor plot points.
+
+00:06:42.760 --> 00:06:45.039
+Similar games like Blades in the Dark
+
+00:06:45.040 --> 00:06:48.199
+use numbers to track these, so you can say something like,
+
+00:06:48.200 --> 00:06:51.079
+we're three quarters of the way through this story arc.
+
+00:06:51.080 --> 00:06:53.119
+Ironsworn just uses labels,
+
+00:06:53.120 --> 00:06:55.839
+and while I want this particular story arc
+
+00:06:55.840 --> 00:06:59.519
+to be significant, I really just want to get in,
+
+00:06:59.520 --> 00:07:00.959
+find this person, and get out.
+
+00:07:00.960 --> 00:07:04.039
+So, I'm going to call this "short".
+
+00:07:04.040 --> 00:07:09.279
+Next, it's asking about an Org mode header placement.
+
+00:07:09.280 --> 00:07:12.199
+While I originally wanted my Org files
+
+00:07:12.200 --> 00:07:13.799
+to be completely flexible,
+
+00:07:13.800 --> 00:07:15.919
+one thing I noticed in playing
+
+00:07:15.920 --> 00:07:17.999
+is that a pattern always emerged.
+
+00:07:18.000 --> 00:07:22.639
+The story became a tree. You see, story arcs
+
+00:07:22.640 --> 00:07:25.559
+were just a series of montages or scenes,
+
+00:07:25.560 --> 00:07:27.919
+and each of those were made of a series of events
+
+00:07:27.920 --> 00:07:29.119
+and challenges to overcome.
+
+00:07:29.120 --> 00:07:32.799
+So, each Org mode header has a track,
+
+00:07:32.800 --> 00:07:35.719
+which often becomes the number of subheadings.
+
+00:07:35.720 --> 00:07:40.639
+At any point, I can see how much track is being made.
+
+00:07:40.640 --> 00:07:47.239
+So, for instance, this one seems to be
+
+00:07:47.240 --> 00:07:48.679
+about a third of the way through.
+
+NOTE Using different stats
+
+00:07:48.680 --> 00:07:52.599
+So, let's dive into this ancient place.
+
+00:07:52.600 --> 00:07:55.719
+Since I've been walking through a misty forest,
+
+00:07:55.720 --> 00:07:59.319
+I can imagine vines hiding an immense door
+
+00:07:59.320 --> 00:08:01.959
+and a humid, earthy smell as I peer inside.
+
+00:08:01.960 --> 00:08:04.319
+But I don't have to write that stuff down,
+
+00:08:04.320 --> 00:08:06.919
+or if I want to practice my writing, I can.
+
+00:08:06.920 --> 00:08:09.359
+I can imagine the place is dark,
+
+00:08:09.360 --> 00:08:10.839
+so Tegan lights a torch
+
+00:08:10.840 --> 00:08:13.039
+before peering into this obscure world.
+
+00:08:13.040 --> 00:08:15.799
+As this move mentions,
+
+00:08:15.800 --> 00:08:20.279
+the next move to make is called Delve the Depths.
+
+00:08:20.280 --> 00:08:26.159
+As soon as I select this move,
+
+00:08:26.160 --> 00:08:31.319
+it shows up on the side window, and explains that,
+
+00:08:31.320 --> 00:08:34.399
+depending on how you're moving through
+
+00:08:34.400 --> 00:08:36.239
+this ancient catacombs,
+
+00:08:36.240 --> 00:08:38.759
+is what kind of stat I roll against,
+
+00:08:38.760 --> 00:08:41.039
+and those stats show up at the bottom.
+
+00:08:41.040 --> 00:08:45.479
+You know, if I'm sneaking around, you roll against "shadow".
+
+00:08:45.480 --> 00:08:47.719
+If you're trying to go as fast as you can, it's "edge".
+
+00:08:47.720 --> 00:08:51.679
+But I kind of imagine that he's thinking through,
+
+00:08:51.680 --> 00:08:53.679
+being very careful about it.
+
+00:08:53.680 --> 00:08:55.759
+So, I'm going to select "wits".
+
+00:08:55.760 --> 00:08:57.719
+And I don't have any modifiers.
+
+00:08:57.720 --> 00:08:59.559
+Just about every one of my stats prompts me
+
+00:08:59.560 --> 00:09:02.959
+if I want to add or subtract any values.
+
+NOTE Dice rolls
+
+00:09:02.960 --> 00:09:09.879
+A miss. I should explain how the dice roll in this game.
+
+00:09:09.880 --> 00:09:13.399
+The downside to Ironsworn is that
+
+00:09:13.400 --> 00:09:16.839
+the dice mechanics are more cumbersome than other games.
+
+00:09:16.840 --> 00:09:20.199
+You roll a 6-sided die, add to it your relevant stat,
+
+00:09:20.200 --> 00:09:24.599
+plus any modifiers. Next, you roll two 10-sided die
+
+00:09:24.600 --> 00:09:25.799
+and see how it compares.
+
+00:09:25.800 --> 00:09:28.679
+Of course, I programmed this in Lisp,
+
+00:09:28.680 --> 00:09:31.599
+but when I displayed it, I wanted to see all the dice.
+
+00:09:31.600 --> 00:09:34.799
+And I also just wanted to see the end results.
+
+NOTE Dangers
+
+00:09:34.800 --> 00:09:37.479
+So I colored it. I rolled a miss,
+
+00:09:37.480 --> 00:09:39.799
+which means I need to reveal a danger.
+
+00:09:39.800 --> 00:09:43.519
+Sure, I could imagine all sorts of dangers,
+
+00:09:43.520 --> 00:09:44.359
+but this is a game.
+
+00:09:44.360 --> 00:09:48.359
+I've already made a random generator for dangers.
+
+00:09:48.360 --> 00:09:51.719
+In fact, I've made a random generator
+
+00:09:51.720 --> 00:09:55.479
+for dangers in an ancient underkeep.
+
+00:09:55.480 --> 00:10:00.879
+Discovery undermines or complicates the quest.
+
+00:10:00.880 --> 00:10:09.719
+Hmm, a complication for finding the chief's son?
+
+00:10:09.720 --> 00:10:13.319
+What about a labyrinth full of hallways and levels
+
+00:10:13.320 --> 00:10:16.599
+with lots of choices and almost no way of finding them?
+
+00:10:16.600 --> 00:10:19.679
+Yeah, that sounds like it fits pretty well.
+
+NOTE A strong success
+
+00:10:19.680 --> 00:10:26.959
+Time for another move. This time, we're going to
+
+00:10:26.960 --> 00:10:28.799
+gather information,
+
+00:10:28.800 --> 00:10:32.279
+see if we can figure out which way to go.
+
+00:10:32.280 --> 00:10:34.719
+A strong hit. Excellent.
+
+00:10:34.720 --> 00:10:38.399
+I imagine Tegan noticing footprints in the dust
+
+00:10:38.400 --> 00:10:40.439
+and knowing where to go.
+
+00:10:40.440 --> 00:10:44.319
+The game suggests that when you get a strong success,
+
+00:10:44.320 --> 00:10:45.799
+you can increase your momentum.
+
+00:10:45.800 --> 00:10:48.879
+These game mechanics
+
+00:10:48.880 --> 00:10:51.754
+come into play later, but this function here
+
+00:10:51.755 --> 00:10:57.880
+allows me to adjust that stat +2.
+
+00:10:57.881 --> 00:11:01.460
+I don't even have to scroll to the top of the buffer
+
+00:11:01.461 --> 00:11:04.820
+and edit that value in my properties.
+
+00:11:04.821 --> 00:11:08.159
+At any point, I can take a look at those stats
+
+00:11:08.160 --> 00:11:10.439
+and see how they measure up.
+
+00:11:10.440 --> 00:11:13.159
+Again, I don't have to scroll up
+
+00:11:13.160 --> 00:11:14.879
+and take a look at my properties
+
+00:11:14.880 --> 00:11:16.559
+at the top of the Org mode file.
+
+00:11:16.560 --> 00:11:19.239
+That's how I play the game.
+
+00:11:19.240 --> 00:11:24.639
+It's just a recursive loop of playing a move,
+
+00:11:24.640 --> 00:11:27.319
+rolling some dice to see how it works,
+
+00:11:27.320 --> 00:11:30.159
+trying to answer the question
+
+00:11:30.160 --> 00:11:33.679
+based on your own imagination or random tables,
+
+00:11:33.680 --> 00:11:35.599
+which the game calls oracles,
+
+00:11:35.600 --> 00:11:41.199
+and play creatively until you decide to take a break
+
+00:11:41.200 --> 00:11:42.399
+and pick it up another time.
+
+00:11:42.400 --> 00:11:46.999
+I think you get the gist of how I play
+
+00:11:47.000 --> 00:11:49.679
+this dice and pencil game in Org Mode.
+
+NOTE Other solo RPGs
+
+00:11:49.680 --> 00:11:54.039
+However, I found more solo RPGs to play.
+
+00:11:54.040 --> 00:11:57.319
+And of course, I want to render them in Emacs too.
+
+00:11:57.320 --> 00:12:00.799
+This code for Ironsworn was a bit too specific,
+
+00:12:00.800 --> 00:12:04.759
+so I decided to create a role-playing game toolkit.
+
+00:12:04.760 --> 00:12:09.599
+This project is still in the early stages,
+
+00:12:09.600 --> 00:12:12.199
+but I've created some functions
+
+00:12:12.200 --> 00:12:16.719
+for mimicking rolling dice, including a mini-DSL for
+
+00:12:16.720 --> 00:12:19.799
+making dice mechanics
+
+00:12:19.800 --> 00:12:22.839
+typical of many role-playing game systems.
+
+00:12:22.840 --> 00:12:26.519
+I've also ported over the random table system.
+
+00:12:26.520 --> 00:12:30.479
+A text file can just list entries to be displayed at random.
+
+00:12:30.480 --> 00:12:33.959
+I love that I can put dice expression
+
+00:12:33.960 --> 00:12:35.799
+and word choices in the entries.
+
+00:12:35.800 --> 00:12:39.439
+One type of random table allows you
+
+00:12:39.440 --> 00:12:41.559
+to essentially copy and paste a table
+
+00:12:41.560 --> 00:12:43.799
+from a published game into a text file.
+
+00:12:43.800 --> 00:12:47.879
+A frequency table is what I'm calling
+
+00:12:47.880 --> 00:12:50.879
+a list of random entries where some entries show up
+
+00:12:50.880 --> 00:12:55.959
+more often than others. I'm working on generalizing
+
+00:12:55.960 --> 00:12:59.959
+the character sheet attributes as Org properties,
+
+00:12:59.960 --> 00:13:04.719
+so if you're interested, check out the project at Codeberg.
+
+NOTE Conclusion
+
+00:13:04.720 --> 00:13:10.359
+The point of my presentation is not to show off Ironsworn,
+
+00:13:10.360 --> 00:13:14.079
+how I programmed it, or even this new toolkit.
+
+00:13:14.080 --> 00:13:17.559
+You see, most engineers,
+
+00:13:17.560 --> 00:13:20.479
+when they get an idea for a game like mine,
+
+00:13:20.480 --> 00:13:24.079
+would make a web app. Nothing wrong with it.
+
+00:13:24.080 --> 00:13:25.959
+More people can play it,
+
+00:13:25.960 --> 00:13:28.199
+but web apps suffer from text entry.
+
+00:13:28.200 --> 00:13:30.959
+And don't tell me you prefer the keyboard interface
+
+00:13:30.960 --> 00:13:35.959
+to Google Docs. Oh, and the JavaScript framework du jour?
+
+00:13:35.960 --> 00:13:40.399
+Oh, I mean, that's a huge barrier of entry
+
+00:13:40.400 --> 00:13:42.039
+when all you want to do
+
+00:13:42.040 --> 00:13:44.359
+is have a bit of fun prototyping a game.
+
+00:13:44.360 --> 00:13:48.479
+What I'd like to impress upon you
+
+00:13:48.480 --> 00:13:53.999
+is that hacking Emacs to make personal games is a trip.
+
+00:13:54.000 --> 00:13:57.359
+Learning Lisp is, it's easy.
+
+00:13:57.360 --> 00:14:00.919
+And more, Emacs Lisp has some, well sure,
+
+00:14:00.920 --> 00:14:04.519
+it has some cruft. But really, some of those features
+
+00:14:04.520 --> 00:14:07.599
+that I would hate at a distributed system at work,
+
+00:14:07.600 --> 00:14:10.919
+like global variables, makes hacking easier
+
+00:14:10.920 --> 00:14:14.719
+when you just want to have some fun in your own system.
+
+00:14:14.720 --> 00:14:19.599
+So, grab your laptop, sink into your comfy chair,
+
+00:14:19.600 --> 00:14:21.599
+pour yourself a glass of scotch,
+
+00:14:21.600 --> 00:14:24.719
+and craft yourself an enjoyable evening.
+
+00:14:24.720 --> 00:14:35.920
+Happy hacking, my friends.
diff --git a/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt b/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt
new file mode 100644
index 00000000..c3f0d9a2
--- /dev/null
+++ b/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt
@@ -0,0 +1,1033 @@
+WEBVTT captioned by Daniel Alejandro Tapia
+
+00:00:00.660 --> 00:00:03.839
+Stenotypy is a system of typing
+
+00:00:03.840 --> 00:00:07.339
+where you press multiple keys at the same time,
+
+00:00:07.340 --> 00:00:13.359
+letting you send more than one letter at a time.
+
+00:00:13.360 --> 00:00:16.939
+This is a video from the 1920s.
+
+00:00:16.940 --> 00:00:23.059
+The man is holding a stenotype, a device used for stenotypy.
+
+00:00:23.060 --> 00:00:26.359
+This particular one is called Grandjean.
+
+00:00:26.360 --> 00:00:30.067
+It's made for the French language.
+
+00:00:30.068 --> 00:00:31.739
+In this demonstration,
+
+00:00:31.740 --> 00:00:34.899
+the man is going to be dictating a passage,
+
+00:00:34.900 --> 00:00:38.759
+first, slowly and then quickly.
+
+00:00:38.760 --> 00:00:42.419
+The lady on the left doesn't have trouble keeping up.
+
+00:00:42.420 --> 00:00:44.859
+She's using stenotypy.
+
+00:00:44.860 --> 00:00:48.319
+The lady on the right is a good typist,
+
+00:00:48.320 --> 00:01:13.299
+but she can't keep up when the dictation gets faster.
+
+00:01:13.300 --> 00:01:16.019
+I'm nowhere near as fast as this lady.
+
+00:01:16.020 --> 00:01:18.779
+She's extremely skilled.
+
+00:01:18.780 --> 00:01:24.539
+I'm not even a tenth of what she is.
+
+00:01:24.540 --> 00:01:28.399
+I don't use Grandjean, I use Melani,
+
+00:01:28.400 --> 00:01:33.319
+which is a system for Castilian and Italian.
+
+00:01:33.320 --> 00:01:39.539
+If I want to make the word solo, I press S, O, L,
+
+00:01:39.540 --> 00:01:43.319
+which is made by two keys, and O.
+
+00:01:43.320 --> 00:01:45.599
+Here's what that looks like.
+
+00:01:45.600 --> 00:01:50.799
+The hyphen between S and O means that
+
+00:01:50.800 --> 00:01:52.519
+the S is on the left side,
+
+00:01:52.520 --> 00:01:57.039
+and the rest of the letters are on the right side.
+
+00:01:57.040 --> 00:01:59.999
+If I want to write the word sólo,
+
+00:02:00.000 --> 00:02:02.439
+which is just like the previous word,
+
+00:02:02.440 --> 00:02:05.479
+but with the first O accented,
+
+00:02:05.480 --> 00:02:08.259
+I would press the asterisk key.
+
+00:02:08.260 --> 00:02:11.959
+In Melani, the asterisk is used
+
+00:02:11.960 --> 00:02:20.299
+to put an accent on a letter.
+
+00:02:20.300 --> 00:02:22.039
+If you speak English,
+
+00:02:22.040 --> 00:02:25.039
+then you would likely use the Ireland system.
+
+00:02:25.040 --> 00:02:28.779
+S-E-T makes the word set.
+
+00:02:28.780 --> 00:02:32.379
+In Ireland, you can make a long vowel sound
+
+00:02:32.380 --> 00:02:34.259
+by pressing the two thumb keys
+
+00:02:34.260 --> 00:02:41.699
+on the other side of the vowel you want to make long.
+
+00:02:41.700 --> 00:02:44.120
+S-long-E-T makes the word seat.
+
+00:02:50.200 --> 00:02:52.659
+This is me programming.
+
+00:02:52.660 --> 00:02:56.480
+After a few lines, I'll explain what's going on.
+
+00:03:19.580 --> 00:03:23.379
+In GNU Emacs, you can create abbreviations
+
+00:03:23.380 --> 00:03:25.539
+that expand to strings.
+
+00:03:25.540 --> 00:03:31.359
+For example, you can create an abbrev, like btwx,
+
+00:03:31.360 --> 00:03:33.979
+that will expand to "by the way"
+
+00:03:33.980 --> 00:03:40.359
+when you succeed btwx with a space or some punctuation.
+
+00:03:40.360 --> 00:03:42.439
+Here that's what I'm doing.
+
+00:03:42.440 --> 00:03:48.139
+I type d and then emacs, which expands to this.
+
+00:03:48.140 --> 00:03:50.659
+But this is a different kind of expansion
+
+00:03:50.660 --> 00:03:54.339
+from a simple string like by the way.
+
+00:03:54.340 --> 00:03:56.639
+This one has structure.
+
+00:03:56.640 --> 00:04:00.679
+It has interesting points that I can jump to.
+
+00:04:00.680 --> 00:04:01.919
+It's called a skeleton.
+
+00:04:03.740 --> 00:04:05.939
+This is the skeleton.
+
+00:04:05.940 --> 00:04:10.559
+The part that I want you to focus on is the @ symbols.
+
+00:04:10.560 --> 00:04:15.739
+Those are the interesting points that I jump to.
+
+00:04:15.740 --> 00:04:18.259
+So, at one interesting point,
+
+00:04:18.260 --> 00:04:20.699
+I can write the name of the function,
+
+00:04:20.700 --> 00:04:24.359
+at another interesting point, the arguments
+
+00:04:24.360 --> 00:04:28.619
+if the function will need them, the doc string,
+
+00:04:28.620 --> 00:04:31.799
+and finally the body.
+
+00:04:31.800 --> 00:04:34.939
+When I get to the body, I use stenotypy
+
+00:04:34.940 --> 00:04:39.059
+to write the words of the functions I'm looking for.
+
+00:04:39.060 --> 00:04:41.639
+Then I call a completion framework
+
+00:04:41.640 --> 00:04:45.059
+to choose from a list of candidates.
+
+00:04:45.060 --> 00:04:47.859
+This completion framework doesn't care
+
+00:04:47.860 --> 00:04:52.519
+what order the words are in or how many words I use.
+
+00:04:52.520 --> 00:04:56.219
+This completion framework is called Corfu,
+
+00:04:56.220 --> 00:05:00.459
+which stands for COmpletion in Region FUnction.
+
+00:05:00.460 --> 00:05:03.279
+And I'm using a package called Orderless
+
+00:05:03.280 --> 00:05:04.439
+to make it stronger.
+
+00:05:51.460 --> 00:05:57.199
+Here, I use another skeleton, the same one as before.
+
+00:05:57.200 --> 00:06:00.879
+This time, it has an argument.
+
+00:06:00.880 --> 00:06:07.239
+Then, when I get to the body, I write another skeleton,
+
+00:06:07.240 --> 00:06:12.359
+one that has an interesting point between the quotes
+
+00:06:12.360 --> 00:06:14.919
+and creates a new line
+
+00:06:14.920 --> 00:06:17.499
+right underneath it.
+
+00:06:17.500 --> 00:06:20.319
+I typed i and then emacs,
+
+00:06:20.320 --> 00:06:22.359
+and I got the interactive skeleton.
+
+00:07:16.120 --> 00:07:18.899
+Now, I use another skeleton,
+
+00:07:18.900 --> 00:07:20.479
+but these ones differ
+
+00:07:20.480 --> 00:07:23.039
+because it prompts me for a string,
+
+00:07:23.040 --> 00:07:27.299
+and I can make the skeleton as long as I want.
+
+00:07:27.300 --> 00:07:29.799
+If I keep entering text in the prompt,
+
+00:07:29.800 --> 00:07:33.839
+then Emacs will keep making the skeleton bigger.
+
+00:07:33.840 --> 00:07:37.999
+When I enter an empty string, it knows to stop asking,
+
+00:07:38.000 --> 00:07:39.999
+and it sends me to the point
+
+00:07:40.000 --> 00:07:44.619
+I've designated to go to when a skeleton is created.
+
+00:07:44.620 --> 00:07:46.439
+That's what the underscore means.
+
+00:07:48.260 --> 00:07:54.119
+I type c and then Emacs, and I get the condition skeleton.
+
+00:07:54.120 --> 00:08:00.059
+And then I use Corfu and Orderless to program.
+
+00:08:00.060 --> 00:08:03.819
+On two functions, I use a dabbrev.
+
+00:08:03.820 --> 00:08:09.499
+A dabbrev is a dynamic abbreviation.
+
+00:08:09.500 --> 00:08:11.439
+Here's how it works.
+
+00:08:11.440 --> 00:08:12.899
+If I have three strings
+
+00:08:12.900 --> 00:08:17.819
+that begin with S-T, string, strawberry, and stop,
+
+00:08:17.820 --> 00:08:22.179
+I can write S-T and then call dabbrev expand.
+
+00:08:22.180 --> 00:08:24.379
+First, this will give me stop
+
+00:08:24.380 --> 00:08:27.119
+because I'm nearest to the word stop.
+
+00:08:27.120 --> 00:08:30.499
+Then when I call it again, I'll get strawberry.
+
+00:08:30.500 --> 00:08:35.459
+And if I call it a third time, I'll get string.
+
+00:08:35.460 --> 00:08:40.139
+If I start off with S-T-R, then I'll get strawberry first
+
+00:08:40.140 --> 00:08:42.279
+and then string.
+
+00:08:42.280 --> 00:08:45.999
+I used dabbrev twice in this function.
+
+00:08:46.000 --> 00:08:48.079
+If you read the top of the screen,
+
+00:08:48.080 --> 00:08:52.000
+you can see which commands I use and how I invoke them.
+
+00:09:00.240 --> 00:09:03.119
+Finally, I use one last skeleton
+
+00:09:03.120 --> 00:09:07.039
+to map the function I just wrote to a hotkey.
+
+00:09:07.040 --> 00:09:09.500
+In this case, C-o.
+
+00:09:15.580 --> 00:09:19.219
+Here we can see what the function I just wrote does.
+
+00:09:19.220 --> 00:09:22.239
+It opens a line with the line below indented
+
+00:09:22.240 --> 00:09:23.800
+if it isn't blank.
+
+00:09:23.801 --> 00:09:29.039
+I've kept the old behavior with an argument of zero
+
+00:09:29.040 --> 00:09:33.599
+and done something for when I use a negative argument.
+
+00:09:33.600 --> 00:09:36.899
+You can see the interesting points.
+
+00:09:36.900 --> 00:09:40.980
+I could jump to any of them or cycle through them.
+
+00:09:50.000 --> 00:09:54.619
+I normally use a 9-to-16 setup.
+
+00:09:54.620 --> 00:09:58.119
+To me, Emacs, and computing in general,
+
+00:09:58.120 --> 00:10:00.880
+is much more pleasant to use that way.
+
+00:10:07.680 --> 00:10:09.620
+When I stenotype a word,
+
+00:10:10.000 --> 00:10:14.179
+a space is sent immediately afterwards.
+
+00:10:14.180 --> 00:10:17.799
+Orderless treats spaces as delimiters.
+
+00:10:17.800 --> 00:10:19.379
+This is very helpful
+
+00:10:19.380 --> 00:10:23.459
+because I can enter commands with stenotypy,
+
+00:10:23.460 --> 00:10:25.219
+without having to worry about
+
+00:10:25.220 --> 00:10:27.060
+whether words are in the right order.
+
+00:10:29.320 --> 00:10:34.219
+Lem, spelled L-E-M, is another Emacs.
+
+00:10:34.220 --> 00:10:35.900
+It's extremely powerful.
+
+00:10:35.901 --> 00:10:40.060
+But Lem doesn't have skeletons, not yet at least.
+
+00:10:40.061 --> 00:10:40.359
+So I'm going to program the traditional way.
+
+00:10:43.740 --> 00:10:47.580
+Nothing fancy, just left-to-right programming.
+
+00:11:38.800 --> 00:11:41.520
+With Plover, you have dictionaries.
+
+00:11:41.521 --> 00:11:44.860
+I added Fibonacci to my dictionary.
+
+00:11:44.861 --> 00:11:47.939
+I made my own dictionary from scratch.
+
+00:11:47.940 --> 00:11:49.780
+But if you don't want to do that,
+
+00:11:49.781 --> 00:11:52.260
+there are free dictionaries available
+
+00:11:52.261 --> 00:11:55.120
+that have many words already in them,
+
+00:11:55.121 --> 00:11:56.720
+saving you lots of time.
+
+00:11:56.721 --> 00:12:00.279
+The reason I made my dictionary from scratch
+
+00:12:00.280 --> 00:12:03.559
+is because I wanted to know my system inside and out.
+
+00:12:03.560 --> 00:12:07.960
+On one stroke, I typed T.
+
+00:12:07.961 --> 00:12:12.740
+And, on the next stroke, I stenotyped coalton.
+
+00:12:12.741 --> 00:12:16.460
+And then I got (coalton-toplevel and a new line.
+
+00:12:16.461 --> 00:12:19.519
+It's similar to what I did in GNU Emacs
+
+00:12:19.520 --> 00:12:22.579
+when I expanded a skeleton.
+
+00:12:22.580 --> 00:12:25.179
+This is actually not stenotypy,
+
+00:12:25.180 --> 00:12:29.820
+but a different kind of steno, known as serial steno.
+
+00:12:29.821 --> 00:12:32.940
+Plover is capable of this as well.
+
+00:12:32.941 --> 00:12:36.840
+Here are some things that Plover can do.
+
+00:12:36.841 --> 00:12:38.920
+Plover can glue words,
+
+00:12:38.921 --> 00:12:41.460
+like if you need to make a compound word.
+
+00:12:41.461 --> 00:12:44.360
+It can break a compound word.
+
+00:12:44.361 --> 00:12:48.060
+You can press keys to turn off Plover
+
+00:12:48.061 --> 00:12:50.120
+or to turn it back on.
+
+00:12:50.121 --> 00:12:52.720
+You can case words the way you want,
+
+00:12:52.721 --> 00:12:55.760
+uppercase, lowercase, capitalize.
+
+00:12:55.761 --> 00:12:58.820
+You can change your stenotype layout,
+
+00:12:58.821 --> 00:13:02.380
+like, say, if you want to use Grandjean for French,
+
+00:13:02.381 --> 00:13:06.379
+Melani for Castilian, and Ireland for English.
+
+00:13:06.380 --> 00:13:08.020
+All of that's possible.
+
+00:13:10.480 --> 00:13:14.619
+Here I should note that I'm using a Plover plugin
+
+00:13:14.620 --> 00:13:17.520
+called Full Keyboard Steno.
+
+00:13:17.521 --> 00:13:22.180
+It makes my entire keyboard into a stenotype.
+
+00:13:26.800 --> 00:13:30.700
+Lem also has a completion feature built in.
+
+00:13:30.701 --> 00:13:35.100
+But I didn't need it for the code that I wrote.
+
+00:13:35.101 --> 00:13:37.900
+It's quite good.
+
+00:13:38.720 --> 00:13:42.280
+In summary, if you add in the symbols
+
+00:13:42.281 --> 00:13:45.120
+that you're going to need when you're programming,
+
+00:13:45.121 --> 00:13:46.440
+you'll be fine.
+
+00:13:46.441 --> 00:13:48.620
+Even without skeletons,
+
+00:13:48.621 --> 00:13:51.400
+Plover is nice to use for programming.
+
+00:14:00.920 --> 00:14:05.620
+The search tool is the primary way of navigating in Emacs.
+
+00:14:05.621 --> 00:14:08.040
+Every Emacser can be measured
+
+00:14:08.041 --> 00:14:11.639
+by their skill with the search tool.
+
+00:14:11.640 --> 00:14:14.820
+C-s begins a forward search.
+
+00:14:14.821 --> 00:14:17.880
+The s stands for search.
+
+00:14:18.420 --> 00:14:20.740
+I'm reading Aesop's Fables,
+
+00:14:20.741 --> 00:14:23.640
+and I want to look for the word fox.
+
+00:14:23.641 --> 00:14:28.200
+So I press C-s and type fox.
+
+00:14:28.201 --> 00:14:31.599
+If I want to go back to the beginning of the word fox,
+
+00:14:31.600 --> 00:14:37.500
+I press C-r, which stands for reverse search.
+
+00:14:37.501 --> 00:14:42.320
+With Stenotypy, spaces are added to the end of words,
+
+00:14:42.740 --> 00:14:45.520
+so sometimes that causes problems.
+
+00:14:49.060 --> 00:14:52.120
+We can remedy that by changing the way
+
+00:14:52.121 --> 00:14:54.880
+Emacs interprets our whitespace.
+
+00:14:55.360 --> 00:14:57.960
+When I press C-M-s [alt control s],
+
+00:14:57.961 --> 00:15:01.300
+whitespace is interpreted as a wildcard.
+
+00:15:01.301 --> 00:15:04.159
+It's a function I made myself.
+
+00:15:04.160 --> 00:15:09.159
+fox mask will take me to the fox and the mask.
+
+00:15:09.160 --> 00:15:12.180
+The whitespace is a wildcard.
+
+00:15:12.181 --> 00:15:16.760
+For me, Ctrl-s makes the whitespace literal.
+
+00:15:16.761 --> 00:15:20.539
+I like having both options available to me:
+
+00:15:20.540 --> 00:15:25.219
+literal whitespace and wildcard whitespace.
+
+00:15:29.420 --> 00:15:32.180
+Say I want to find the cat and the fox,
+
+00:15:32.620 --> 00:15:34.859
+one of my favorite fables.
+
+00:15:34.860 --> 00:15:39.419
+I write cat fox, but I don't get what I want.
+
+00:15:39.420 --> 00:15:42.119
+I've written a function that reverses
+
+00:15:42.120 --> 00:15:44.739
+the order of my search query.
+
+00:15:45.260 --> 00:15:47.179
+Now I get what I want.
+
+00:15:47.880 --> 00:15:50.939
+Searching like this is very convenient.
+
+00:15:55.340 --> 00:15:58.539
+In Lem, we can do something similar.
+
+00:15:58.540 --> 00:16:01.419
+I want to read The Fox and the Lion.
+
+00:16:01.420 --> 00:16:08.379
+I search for Lion Fox. Notice those words are capitalized.
+
+00:16:08.380 --> 00:16:11.780
+Now I'm going to transform the last two words
+
+00:16:11.781 --> 00:16:14.299
+into a regular expression
+
+00:16:14.300 --> 00:16:18.479
+so that the order doesn't matter.
+
+00:16:18.480 --> 00:16:21.859
+And now I can find the fable I'm looking for.
+
+00:16:27.220 --> 00:16:31.899
+I did this with a plugin called Retro Stringop,
+
+00:16:31.900 --> 00:16:34.259
+op meaning operation.
+
+00:16:34.260 --> 00:16:40.059
+I can perform any operation on the last n words.
+
+00:16:40.060 --> 00:16:42.319
+Let's look at that.
+
+00:16:42.320 --> 00:16:44.699
+The 2 means that I want to do something
+
+00:16:44.700 --> 00:16:46.939
+to the last two words.
+
+00:16:46.940 --> 00:16:50.899
+The operation I'm performing is Python code.
+
+00:16:50.900 --> 00:16:54.059
+To be honest, I don't know any Python,
+
+00:16:54.060 --> 00:16:57.619
+but string manipulation is easy to understand.
+
+00:16:57.620 --> 00:17:01.700
+If you do know Python, then you can make your own plugins
+
+00:17:01.701 --> 00:17:04.939
+and even help with the development of Plover.
+
+00:17:07.820 --> 00:17:09.899
+A feature I like in Lem is that
+
+00:17:09.900 --> 00:17:15.779
+when you gracefully exit search with Enter or C-m,
+
+00:17:15.780 --> 00:17:18.499
+what you searched for is highlighted.
+
+00:17:18.500 --> 00:17:23.240
+You can cycle through the results, the highlights,
+
+00:17:23.241 --> 00:17:26.619
+and you can toggle the highlights on or off.
+
+00:17:30.160 --> 00:17:34.480
+1978, John Kulp designs a keyboard
+
+00:17:34.481 --> 00:17:37.179
+known as the Space Cadet Keyboard.
+
+00:17:37.180 --> 00:17:40.339
+This keyboard has many distinctive qualities,
+
+00:17:40.340 --> 00:17:44.419
+one being the modifiers, numbering seven in total:
+
+00:17:44.420 --> 00:17:51.139
+Shift, Control, Meta, Super, Hyper, Greek, and Top.
+
+00:17:51.900 --> 00:17:56.019
+This keyboard influences the development of Emacs.
+
+00:17:56.860 --> 00:18:02.659
+2000, designer Kiyoshi Kimura and programmer Yoji Hagia
+
+00:18:02.660 --> 00:18:07.399
+release SandS, a program that lets you turn your spacebar
+
+00:18:07.400 --> 00:18:09.659
+into a dual-function key,
+
+00:18:09.660 --> 00:18:11.499
+sending space on tap
+
+00:18:11.500 --> 00:18:15.139
+and acting as the Shift modifier on hold.
+
+00:18:16.220 --> 00:18:18.500
+This idea, the dual-function key,
+
+00:18:18.501 --> 00:18:21.379
+later revolutionizes typing.
+
+00:18:22.060 --> 00:18:25.640
+These two concepts, the space cadet modifiers
+
+00:18:25.641 --> 00:18:29.579
+and the dual-function key, can be combined.
+
+00:18:29.580 --> 00:18:32.439
+I use a program called Kanata
+
+00:18:32.440 --> 00:18:36.659
+to put all the modifiers on my homerow.
+
+00:18:36.660 --> 00:18:40.099
+When I tap the letter a, I get an a.
+
+00:18:40.100 --> 00:18:43.419
+If I hold it down for longer than 200 milliseconds,
+
+00:18:43.420 --> 00:18:46.739
+it acts as the Meta modifier,
+
+00:18:46.740 --> 00:18:48.059
+and really I can add
+
+00:18:48.060 --> 00:18:52.399
+as many layers to my keyboard as I want.
+
+00:18:52.400 --> 00:18:55.499
+I don't use a little stenotype.
+
+00:18:55.500 --> 00:18:59.139
+Thanks to Full Keyboard Steno, the Plover plugin,
+
+00:18:59.140 --> 00:19:02.019
+I use my whole keyboard.
+
+00:19:02.020 --> 00:19:05.439
+I have an alternative keyboard layout on it,
+
+00:19:05.440 --> 00:19:08.699
+so, even when I'm typing in the traditional way,
+
+00:19:08.700 --> 00:19:10.379
+it feels amazing.
+
+00:19:10.380 --> 00:19:15.699
+My layout is called Kuron, and I lay it over Melani
+
+00:19:15.700 --> 00:19:19.619
+so that I have both available to me at all times.
+
+00:19:19.620 --> 00:19:24.399
+I don't get them confused because I set them off
+
+00:19:24.400 --> 00:19:26.939
+with the way I press keys.
+
+00:19:26.940 --> 00:19:29.319
+If I press one key at a time,
+
+00:19:29.320 --> 00:19:32.419
+I'm using Kuron, my keyboard layout.
+
+00:19:32.420 --> 00:19:35.399
+If I press multiple keys at the same time
+
+00:19:35.400 --> 00:19:37.339
+and let them go quickly,
+
+00:19:37.340 --> 00:19:41.419
+then I'm using stenotypy, in my case Melani.
+
+00:19:41.420 --> 00:19:45.240
+And if I hold one key longer than 200 milliseconds,
+
+00:19:45.241 --> 00:19:51.339
+then I'm activating it as a modifier key or a layer key.
+
+00:19:51.340 --> 00:19:56.799
+I always know what state I'm in by the way I press my keys.
+
+00:19:56.800 --> 00:19:59.619
+It's impossible for me to get confused.
+
+00:20:03.800 --> 00:20:07.859
+Holding multiple modifiers is not a problem
+
+00:20:07.860 --> 00:20:13.439
+because the keycaps used for stenotypy are flat and square.
+
+00:20:13.440 --> 00:20:15.979
+Pressing two or more keys at once
+
+00:20:15.980 --> 00:20:18.899
+with the same finger is easy.
+
+00:20:18.900 --> 00:20:21.899
+Notice how close they are to each other.
+
+00:20:21.900 --> 00:20:25.659
+In stenotypy, the homerow is the border
+
+00:20:25.660 --> 00:20:28.139
+between the two rows of keys.
+
+00:20:28.560 --> 00:20:31.259
+It took me a while to get used to it,
+
+00:20:31.260 --> 00:20:35.259
+but now that I am used to it, I quite like it.
+
+00:20:35.640 --> 00:20:38.219
+So if I have to press a hotkey
+
+00:20:38.220 --> 00:20:43.979
+with all six modifiers, Shift, Control, Meta,
+
+00:20:43.980 --> 00:20:50.899
+Alt, Hyper, Super, it's easy.
+
+00:20:50.900 --> 00:20:54.659
+Thanks to Kanata, I have a Greek layer on my board.
+
+00:20:54.660 --> 00:20:58.799
+Additionally, I have alpha, beta, and gamma layers
+
+00:20:58.800 --> 00:21:03.319
+that send sequences of keys that I can use as hotkeys
+
+00:21:03.320 --> 00:21:06.539
+in both GNU Emacs and Lem.
+
+00:21:06.540 --> 00:21:10.419
+Maybe you noticed a few while I was programming.
+
+00:21:10.420 --> 00:21:12.959
+Now it's possible to bring the Space Cadet
+
+00:21:12.960 --> 00:21:17.219
+to any keyboard and to build on its wonderful ideas.
+
+00:21:20.920 --> 00:21:24.459
+Here I'll note that another Emacser, Excalamus,
+
+00:21:24.460 --> 00:21:27.539
+has made a page called Plover with Emacs,
+
+00:21:27.540 --> 00:21:30.639
+with information on how to use Emacs
+
+00:21:30.640 --> 00:21:32.539
+with the standard stenotype,
+
+00:21:32.540 --> 00:21:34.519
+the one that has two rows,
+
+00:21:34.520 --> 00:21:37.439
+the one I call a little stenotype.
+
+00:21:37.440 --> 00:21:39.599
+While I use my full keyboard,
+
+00:21:39.600 --> 00:21:43.199
+I understand how a small board can be useful.
+
+00:21:43.200 --> 00:21:46.159
+Finger movement is greatly reduced,
+
+00:21:46.160 --> 00:21:49.439
+leading to a very ergonomic typing experience.
+
+00:21:49.440 --> 00:21:53.239
+In fact, all of the speed records
+
+00:21:53.240 --> 00:21:57.239
+are set with this stenotype, the standard stenotype.
+
+00:21:58.840 --> 00:22:01.479
+There are many great ideas on this page.
+
+00:22:01.480 --> 00:22:04.319
+Thank you, Excalamus.
+
+00:22:06.800 --> 00:22:09.159
+Special thanks to Richard Stallman,
+
+00:22:09.160 --> 00:22:13.119
+the creator of GNU Emacs and the Free Software Foundation,
+
+00:22:13.420 --> 00:22:16.919
+Sasaki Ryosuke, first name Ryosuke,
+
+00:22:16.920 --> 00:22:19.599
+the creator and lead developer of Lem,
+
+00:22:20.120 --> 00:22:24.279
+Mirabai Knight, the creator of the Open Steno Project,
+
+00:22:24.280 --> 00:22:26.839
+which oversees the development of Plover,
+
+00:22:26.840 --> 00:22:31.159
+and jtroo, the creator and lead developer of Kanata.
+
+00:22:32.700 --> 00:22:36.999
+The views expressed in this talk are solely my own.
+
+00:22:37.000 --> 00:22:41.159
+I have no connection to any of the parties mentioned herein
+
+00:22:41.160 --> 00:22:43.479
+and therefore cannot be seen
+
+00:22:43.480 --> 00:22:45.359
+as representing them in any capacity.
+
+00:22:45.360 --> 00:22:49.199
+What I've said cannot be taken as medical advice.
+
+00:22:50.860 --> 00:22:54.759
+I used the TranSide theme for GNU Emacs in this talk.
+
+00:22:54.760 --> 00:22:57.199
+It's beautiful and functional.
+
+00:22:57.900 --> 00:23:01.639
+I love how the code looks, and I can read the comments.
+
+00:23:03.560 --> 00:23:05.759
+In Lem, I used Gruber.
+
+00:23:05.760 --> 00:23:10.399
+Again, the comments are readable, and the code looks nice.
+
+00:23:11.200 --> 00:23:13.839
+When I first started using Emacs,
+
+00:23:13.840 --> 00:23:16.199
+I used the Wheatgrass theme.
+
+00:23:19.980 --> 00:23:23.879
+Another theme that I love is os1.
+
+00:23:24.520 --> 00:23:28.239
+It's a light, warm, modern theme for Emacs
+
+00:23:28.240 --> 00:23:30.439
+inspired by film palettes.
+
+00:23:35.040 --> 00:23:38.499
+Regarding typography, for programming,
+
+00:23:38.500 --> 00:23:42.879
+I used JuliaMono, which was designed by Cormullion.
+
+00:23:43.520 --> 00:23:46.919
+It's extensive, and it's beautiful.
+
+00:23:48.000 --> 00:23:51.039
+For graphics, I used PromptFont,
+
+00:23:51.380 --> 00:23:53.959
+which was made by Yukari Hafner.
+
+00:23:54.840 --> 00:23:56.479
+She's very talented.
+
+00:23:56.480 --> 00:23:59.639
+I really like her work, including this font.
+
+00:24:01.180 --> 00:24:04.679
+There are so many packages that I love in Emacs.
+
+00:24:05.520 --> 00:24:07.639
+If I talked about all of them,
+
+00:24:07.640 --> 00:24:09.799
+my talk would last for days,
+
+00:24:09.800 --> 00:24:11.959
+so I'm only going to mention three.
+
+00:24:12.580 --> 00:24:14.079
+Keycast.
+
+00:24:14.400 --> 00:24:15.519
+At the top of the screen,
+
+00:24:15.520 --> 00:24:18.039
+you can see the commands I'm executing
+
+00:24:18.040 --> 00:24:20.559
+and how I'm invoking those commands.
+
+00:24:20.560 --> 00:24:21.919
+That's Keycast.
+
+00:24:21.920 --> 00:24:24.879
+Rainbow Delimiters is another one I like.
+
+00:24:25.540 --> 00:24:27.519
+It lets me know visually
+
+00:24:27.520 --> 00:24:29.919
+when my parentheses are out of balance.
+
+00:24:30.480 --> 00:24:33.199
+Very helpful when I'm programming in Lisp.
+
+00:24:35.900 --> 00:24:37.879
+Moodline is another.
+
+00:24:37.880 --> 00:24:42.899
+The modeline is where I can see relevant information
+
+00:24:42.900 --> 00:24:44.879
+about the file I'm working on.
+
+00:24:46.840 --> 00:24:50.759
+Moodline only gives me the information I want.
+
+00:24:50.760 --> 00:24:55.460
+I'm not really worried about too many things, just
+
+00:24:55.461 --> 00:25:07.160
+the file name, the mode I'm in, and where I am in the file.
diff --git a/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt b/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt
new file mode 100644
index 00000000..11cfd65f
--- /dev/null
+++ b/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt
@@ -0,0 +1,355 @@
+WEBVTT captioned by sachac, checked by sachac
+
+00:00:00.000 --> 00:00:04.519
+Welcome to the second day of EmacsConf 2023.
+
+00:00:04.520 --> 00:00:06.858
+There's a General track and a Development track,
+
+00:00:06.859 --> 00:00:08.437
+but really, you'll probably find
+
+00:00:08.438 --> 00:00:10.156
+interesting things on both tracks
+
+00:00:10.157 --> 00:00:12.695
+no matter what your level of experience is,
+
+00:00:12.696 --> 00:00:15.354
+so don't feel limited to one or the other.
+
+00:00:15.355 --> 00:00:17.093
+Please note that the hyperdrive talk
+
+00:00:17.094 --> 00:00:21.172
+(titled "hyperdrive.el: Peer-to-peer filesystem in Emacs")
+
+00:00:21.173 --> 00:00:23.491
+on the Development track in the afternoon
+
+00:00:23.492 --> 00:00:25.231
+is actually a general-audience talk,
+
+00:00:25.232 --> 00:00:28.091
+I just didn't have space elsewhere in the schedule.
+
+00:00:28.092 --> 00:00:31.330
+The best parts of EmacsConf are the conversations.
+
+00:00:31.331 --> 00:00:34.089
+The wiki has a page on how to watch and participate,
+
+00:00:34.090 --> 00:00:36.868
+and I'll give you a quick overview as well.
+
+00:00:36.869 --> 00:00:40.347
+You can watch both streams at live.emacsconf.org
+
+00:00:40.348 --> 00:00:43.226
+using free and open source software.
+
+00:00:43.227 --> 00:00:45.645
+Using a streaming media player like mpv
+
+00:00:45.646 --> 00:00:49.044
+seems to be the best way to watch in terms of performance
+
+00:00:49.045 --> 00:00:50.643
+but there are also web-based players
+
+00:00:50.644 --> 00:00:53.122
+just in case that's all you've got.
+
+00:00:53.123 --> 00:00:55.121
+The schedule shows the General track on top
+
+00:00:55.122 --> 00:00:56.800
+and the Development track on the bottom,
+
+00:00:56.801 --> 00:00:59.419
+so you can see what else is going on.
+
+00:00:59.420 --> 00:01:00.618
+As you're watching the talks,
+
+00:01:00.619 --> 00:01:03.517
+you can refer to the schedule in another window.
+
+00:01:03.518 --> 00:01:06.536
+Hover over the boxes to see the times and titles,
+
+00:01:06.537 --> 00:01:08.435
+and click on the boxes in the schedule
+
+00:01:08.436 --> 00:01:11.214
+to jump to the talk's page for more details.
+
+00:01:11.215 --> 00:01:13.753
+You can also get the schedule as an iCalendar file
+
+00:01:13.754 --> 00:01:16.012
+or as an Org file in different time zones.
+
+00:01:16.013 --> 00:01:17.511
+Many talks will be followed by
+
+00:01:17.512 --> 00:01:20.170
+live Q&A web conferences with the speaker,
+
+00:01:20.171 --> 00:01:23.249
+which will be done in BigBlueButton or BBB.
+
+00:01:23.250 --> 00:01:26.248
+These are indicated with a solid border on the schedule
+
+00:01:26.249 --> 00:01:29.407
+and by Q&A: BBB on the schedule page.
+
+00:01:29.408 --> 00:01:31.106
+You can join the web conference room
+
+00:01:31.107 --> 00:01:32.725
+by clicking on the BBB link
+
+00:01:32.726 --> 00:01:35.664
+on the schedule page or the talk's webpage.
+
+00:01:35.665 --> 00:01:38.583
+Then you can ask your questions yourself when the Q&A starts.
+
+00:01:38.584 --> 00:01:41.042
+To improve performance, please keep your webcam off
+
+00:01:41.043 --> 00:01:43.781
+and stay muted until it's your turn to talk.
+
+00:01:43.782 --> 00:01:46.400
+This year we're experimenting with automatically switching
+
+00:01:46.401 --> 00:01:48.759
+between talks and Q&A sessions,
+
+00:01:48.760 --> 00:01:51.958
+so the transitions on the stream might be a little sudden,
+
+00:01:51.959 --> 00:01:53.717
+but people in the BigBlueButton room
+
+00:01:53.718 --> 00:01:55.396
+can continue the conversation
+
+00:01:55.397 --> 00:01:58.235
+even after the talk moves off-stream.
+
+00:01:58.236 --> 00:02:01.594
+Other talks will have Q&A via Etherpad or IRC,
+
+00:02:01.595 --> 00:02:03.913
+depending on what the speakers prefer.
+
+00:02:03.914 --> 00:02:06.932
+This is indicated in the schedule with a dashed border
+
+00:02:06.933 --> 00:02:09.651
+and on the schedule page as well.
+
+00:02:09.652 --> 00:02:12.090
+Please ask your questions in the recommended places
+
+00:02:12.091 --> 00:02:14.609
+so that the speakers can easily see them.
+
+00:02:14.610 --> 00:02:17.328
+Some talks will have the Q&A after the event,
+
+00:02:17.329 --> 00:02:20.187
+so you can add your questions to their Etherpad.
+
+00:02:20.188 --> 00:02:21.919
+We'll e-mail the speakers afterwards
+
+00:02:21.920 --> 00:02:25.185
+and update the talk pages when they answer.
+
+00:02:25.186 --> 00:02:28.324
+The schedule pages and track pages have quick shortcuts
+
+00:02:28.325 --> 00:02:31.803
+so that you can find out more about talks, open the Etherpads,
+
+00:02:31.804 --> 00:02:35.362
+and join the Q&A sessions. The watch page has more tips
+
+00:02:35.363 --> 00:02:38.061
+on how to make the most of Q&A.
+
+00:02:38.062 --> 00:02:40.840
+If you can, please add notes and ask questions
+
+00:02:40.841 --> 00:02:43.839
+in the Etherpad for the talk. That makes it easier
+
+00:02:43.840 --> 00:02:45.658
+for everyone to share their notes,
+
+00:02:45.659 --> 00:02:48.597
+and speakers and hosts can read the questions from there.
+
+00:02:48.598 --> 00:02:52.616
+We'll copy the notes to the talk pages afterwards.
+
+00:02:52.617 --> 00:02:54.675
+We have one pad for each talk,
+
+00:02:54.676 --> 00:02:56.794
+so you can follow the links to get to the next one
+
+00:02:56.795 --> 00:02:59.953
+or go back to the schedule and get the link from there.
+
+00:02:59.954 --> 00:03:01.592
+If you have general feedback about
+
+00:03:01.593 --> 00:03:03.751
+the conference itself, please put it in
+
+00:03:03.752 --> 00:03:09.210
+pad.emacsconf.org/2023 , which is linked on each pad.
+
+00:03:09.211 --> 00:03:11.869
+You can also use this as a general community message board
+
+00:03:11.870 --> 00:03:15.008
+for things like Help Wanted.
+
+00:03:15.009 --> 00:03:18.259
+Internet Relay Chat or IRC can be another great way
+
+00:03:18.260 --> 00:03:20.786
+to be part of lots of conversations.
+
+00:03:20.787 --> 00:03:24.505
+You can use chat.emacsconf.org to join the IRC channels
+
+00:03:24.506 --> 00:03:27.344
+through your web browser. The tabs on the left can help you
+
+00:03:27.345 --> 00:03:29.903
+switch between the different channels.
+
+00:03:29.904 --> 00:03:32.959
+There's #emacsconf-gen for the General track
+
+00:03:32.960 --> 00:03:36.521
+and #emacsconf-dev for the Development track.
+
+00:03:36.522 --> 00:03:40.240
+If you need to reach us, you can join #emacsconf-org
+
+00:03:40.241 --> 00:03:45.219
+or e-mail emacsconf-org-private@gnu.org.
+
+00:03:45.220 --> 00:03:48.498
+You can use #emacsconf for hallway conversations.
+
+00:03:48.499 --> 00:03:50.617
+Of course, you can join any of these channels
+
+00:03:50.618 --> 00:03:52.759
+with your favourite IRC client.
+
+00:03:52.760 --> 00:03:56.735
+We're on the libera.chat network.
+
+00:03:56.736 --> 00:03:59.374
+Once again, we're going to be streaming with open captions
+
+00:03:59.375 --> 00:04:02.453
+for most of the talks this year, thanks to our speakers and
+
+00:04:02.454 --> 00:04:05.812
+captioning volunteers. The captioned talks are indicated
+
+00:04:05.813 --> 00:04:08.531
+on the schedule, and with any luck, we'll be posting
+
+00:04:08.532 --> 00:04:12.030
+transcripts on talk pages shortly after the talks start.
+
+00:04:12.031 --> 00:04:13.849
+If you need additional accommodations,
+
+00:04:13.850 --> 00:04:16.609
+please let us know in #emacsconf-org
+
+00:04:16.610 --> 00:04:18.508
+and we'll see if we can make things happen.
+
+00:04:18.509 --> 00:04:22.747
+If something goes down, we'll update status.emacsconf.org.
+
+00:04:22.748 --> 00:04:24.606
+If it doesn't look like we've noticed yet,
+
+00:04:24.607 --> 00:04:28.045
+please let us know in the #emacsconf-org IRC channel,
+
+00:04:28.046 --> 00:04:30.204
+where we will be quietly panicking.
+
+00:04:30.205 --> 00:04:32.903
+In all of these conversations, please keep in mind
+
+00:04:32.904 --> 00:04:35.902
+our guidelines for conduct. You can find them on the wiki,
+
+00:04:35.903 --> 00:04:39.382
+They basically boil down to: please be nice.
+
+00:04:39.383 --> 00:04:41.821
+If all goes well, the prerecorded talks and transcripts
+
+00:04:41.822 --> 00:04:43.820
+should be available from the talk pages
+
+00:04:43.821 --> 00:04:45.559
+shortly after they start playing,
+
+00:04:45.560 --> 00:04:47.458
+and we'll post the recordings of live talks
+
+00:04:47.459 --> 00:04:50.577
+and Q&A sessions within the next month or so.
+
+00:04:50.578 --> 00:04:53.096
+If you'd like to get an update, you can subscribe to
+
+00:04:53.097 --> 00:04:56.395
+the emacsconf-discuss mailing list.
+
+00:04:56.396 --> 00:04:57.954
+All right, let's get going.
+
+00:04:57.955 --> 00:05:00.354
+Leo Vivier is hosting the general track,
+
+00:05:00.355 --> 00:05:03.473
+and Amin Bandali hosting the development track.
+
+00:05:03.474 --> 00:05:06.192
+The other volunteers and I will run around mostly backstage,
+
+00:05:06.193 --> 00:05:08.271
+and you'll probably meet us in the closing remarks.
+
+00:05:08.272 --> 00:05:09.910
+That's also where we get to thank
+
+00:05:09.911 --> 00:05:11.549
+all the people and organizations
+
+00:05:11.550 --> 00:05:14.588
+who make EmacsConf even possible.
+
+00:05:14.589 --> 00:05:17.463
+Thanks for coming to EmacsConf 2023.
diff --git a/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt b/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt
new file mode 100644
index 00000000..c2a49049
--- /dev/null
+++ b/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt
@@ -0,0 +1,649 @@
+WEBVTT captioned by daniel molina, checked by sachac
+
+NOTE Introduction
+
+00:00:01.360 --> 00:00:03.079
+Welcome everybody. My name is Daniel Molina
+
+00:00:03.080 --> 00:00:05.060
+and I'm going to give this talk
+
+00:00:05.061 --> 00:00:08.063
+"Who needs Excel? Managing your students' qualifications
+
+00:00:08.064 --> 00:00:08.959
+with Org-table".
+
+00:00:08.960 --> 00:00:10.559
+I'm a professor. I work every day.
+
+00:00:10.560 --> 00:00:12.519
+I have to qualify my students.
+
+00:00:12.520 --> 00:00:15.079
+While most would consider normal in this situation,
+
+00:00:15.080 --> 00:00:17.719
+would be to use Excel or LibreOffice
+
+00:00:17.720 --> 00:00:18.599
+for doing that.
+
+00:00:18.600 --> 00:00:21.179
+However, I think that approaching it from Emacs
+
+00:00:21.180 --> 00:00:24.479
+has several interesting advantages.
+
+00:00:24.480 --> 00:00:27.659
+First, I would like to write the qualification
+
+00:00:27.660 --> 00:00:33.599
+next to the justification, next to the student error,
+
+00:00:33.600 --> 00:00:36.639
+and in the Excel format, it's not comfortable to do that.
+
+00:00:36.640 --> 00:00:38.839
+Actually, I always prefer to write in Emacs
+
+00:00:38.840 --> 00:00:42.719
+for many reasons, as many of you.
+
+00:00:42.720 --> 00:00:46.679
+Also, I love text format because I can compare versions
+
+00:00:46.680 --> 00:00:50.279
+using a control version system like Git and easily change.
+
+00:00:50.280 --> 00:00:52.759
+This is very useful for the revision period
+
+00:00:52.760 --> 00:00:55.479
+in which a student visits me
+
+00:00:55.480 --> 00:01:01.039
+and maybe I can change the qualification for any reason.
+
+00:01:01.040 --> 00:01:03.439
+I also can export the results directly to PDF
+
+00:01:03.440 --> 00:01:08.679
+to publish them in my online campus for the student.
+
+00:01:08.680 --> 00:01:11.359
+I have many tools for doing that.
+
+00:01:11.360 --> 00:01:13.199
+I already knew about Org-table formula.
+
+00:01:13.200 --> 00:01:15.199
+I thought it was very cool and useful
+
+00:01:15.200 --> 00:01:16.159
+to use Emacs for that,
+
+00:01:16.160 --> 00:01:19.239
+and I have actually found a package `orgtbl-aggregate`
+
+00:01:19.240 --> 00:01:22.859
+that seemed adequate for doing that.
+
+00:01:22.860 --> 00:01:26.319
+Unfortunately, I didn't see a lot of information
+
+00:01:26.320 --> 00:01:29.159
+about how to do that in a painless way.
+
+00:01:29.160 --> 00:01:31.759
+So, I have to learn, training and testing,
+
+00:01:31.760 --> 00:01:34.999
+and then prepare these tools to solve that problem
+
+00:01:35.000 --> 00:01:36.639
+and to help other teachers.
+
+00:01:36.640 --> 00:01:39.959
+Anyway, it could be used not only for teaching
+
+00:01:39.960 --> 00:01:41.959
+but for more contexts.
+
+NOTE Demonstration
+
+00:01:41.960 --> 00:01:44.799
+Well, let's start.
+
+00:01:44.800 --> 00:01:46.459
+First, I have two sections,
+
+00:01:46.460 --> 00:01:53.399
+the comments and the section of the table, or results.
+
+00:01:53.400 --> 00:01:56.479
+I have... The comment for each student
+
+00:01:56.480 --> 00:01:57.559
+is in a different headline.
+
+00:01:57.560 --> 00:02:05.439
+It's very useful to check with a note.
+
+00:02:05.440 --> 00:02:10.159
+I can go directly using your helm or ivy
+
+00:02:10.160 --> 00:02:12.999
+or consult to go directly to the section.
+
+00:02:13.000 --> 00:02:14.559
+So it's very nice.
+
+00:02:14.560 --> 00:02:22.879
+Then I put the comment, right, completely wrong,
+
+00:02:22.880 --> 00:02:30.599
+it answers other questions.
+
+00:02:30.600 --> 00:02:35.839
+I put other comments here that I could send to the student,
+
+00:02:35.840 --> 00:02:37.480
+you can imagine, and then
+
+00:02:37.481 --> 00:02:40.159
+I can put the qualification, the score for each student.
+
+00:02:40.160 --> 00:02:43.159
+The thing with that is, initially,
+
+00:02:43.160 --> 00:02:46.219
+when I started doing that, I put, I don't know,
+
+00:02:46.220 --> 00:02:50.719
+the exception and a qualification with that.
+
+00:02:50.720 --> 00:02:55.679
+Okay, that's one point, this a three,
+
+00:02:55.680 --> 00:03:06.679
+and use a column total with something like that.
+
+00:03:06.680 --> 00:03:08.319
+Okay, that's nice.
+
+NOTE Range
+
+00:03:08.320 --> 00:03:11.639
+But then, when I started getting more and more parts,
+
+00:03:11.640 --> 00:03:17.081
+I considered it more useful to use,
+
+00:03:17.082 --> 00:03:20.699
+to put for each part,
+
+00:03:20.700 --> 00:03:20.700
+which is the maximum qualification,
+
+00:03:20.300 --> 00:03:22.919
+on the range of the qualification.
+
+00:03:22.920 --> 00:03:25.559
+In that case, I'm going to put,
+
+00:03:25.560 --> 00:03:28.679
+the first one is two scores, the second three points,
+
+00:03:28.680 --> 00:03:34.999
+the third one is one point, and the last one, four points.
+
+00:03:35.000 --> 00:03:37.799
+And instead of putting that in that way,
+
+00:03:37.800 --> 00:03:41.027
+I like to put one is completely right,
+
+00:03:41.028 --> 00:03:47.319
+zero is completely wrong, or maybe some intermediate values for that.
+
+00:03:47.320 --> 00:03:50.999
+Of course, I have to change the qualification,
+
+00:03:51.000 --> 00:03:54.439
+the formula, so it's very simple.
+
+00:03:54.440 --> 00:03:56.479
+I only have to put,
+
+00:03:56.480 --> 00:04:08.299
+multiply the values of the second line with that.
+
+00:04:08.300 --> 00:04:11.899
+So, it's very useful for doing that.
+
+NOTE More qualifications
+
+00:04:11.900 --> 00:04:16.639
+Okay, that's the first part, so I can put the comment,
+
+00:04:16.640 --> 00:04:19.959
+I can go to the section, I can create...
+
+00:04:19.960 --> 00:04:24.919
+I'm going to put more qualifications.
+
+00:04:24.920 --> 00:04:27.639
+Now I'm going to put the table.
+
+00:04:27.640 --> 00:04:30.459
+First I'm going to change, rename the column name,
+
+00:04:30.460 --> 00:04:39.039
+because it's easier when there is only one word.
+
+00:04:39.040 --> 00:04:47.159
+And it's very simple to use. You only have to put
+
+00:04:47.160 --> 00:04:51.439
+the name, aggregate, the name of the table,
+
+00:04:51.440 --> 00:04:54.659
+in that case group A,
+
+00:04:54.660 --> 00:04:57.199
+and in another string, the columns.
+
+00:04:57.200 --> 00:05:03.799
+For instance, name, surname, total.
+
+00:05:03.800 --> 00:05:07.439
+And you can see that you can get a lesson list
+
+00:05:07.440 --> 00:05:09.119
+with all the students,
+
+00:05:09.120 --> 00:05:16.759
+but only with the final score to publish them.
+
+00:05:16.760 --> 00:05:17.679
+Okay?
+
+00:05:17.680 --> 00:05:20.679
+Even you can update the name of the column,
+
+00:05:20.680 --> 00:05:21.800
+not in the original table,
+
+00:05:21.801 --> 00:05:29.559
+but in the lesson table using that format.
+
+00:05:29.560 --> 00:05:32.099
+Okay?
+
+00:05:32.100 --> 00:05:34.239
+That is a good option.
+
+NOTE Subsets
+
+00:05:34.240 --> 00:05:38.499
+Now we are going to see how can we use that
+
+00:05:38.500 --> 00:05:44.359
+to make a subset of the students.
+
+00:05:44.360 --> 00:05:47.839
+For instance, imagine, this is me,
+
+00:05:47.840 --> 00:05:54.799
+I'm going to put the bad, I change, now I can update,
+
+00:05:54.800 --> 00:06:02.759
+you can see this, but also I'm going to put a list
+
+00:06:02.760 --> 00:06:10.960
+with the students that have failed the exam.
+
+00:06:10.961 --> 00:06:21.259
+It's simple, because this package has the option `:cond`.
+
+00:06:21.260 --> 00:06:26.199
+I'm going to put first to see it better,
+
+00:06:26.200 --> 00:06:28.599
+I'm going to put a condition
+
+00:06:28.600 --> 00:06:37.519
+in which we aggregate less than a half, 5,
+
+00:06:37.520 --> 00:06:44.179
+and I have to use a `string-to-number` total.
+
+00:06:44.180 --> 00:06:47.259
+In that way, I can see that this is the student
+
+00:06:47.260 --> 00:06:48.839
+that has failed the exam,
+
+00:06:48.840 --> 00:06:54.079
+I could use that to make another table,
+
+00:06:54.080 --> 00:07:08.299
+this is the people that passed the exam.
+
+NOTE Sorting
+
+00:07:08.300 --> 00:07:10.980
+Another interesting feature is that
+
+00:07:10.981 --> 00:07:15.620
+I can... the lesson table can be sorted automatically.
+
+00:07:15.621 --> 00:07:20.100
+It's simple. You only have to put this symbol (`^`),
+
+00:07:20.101 --> 00:07:23.360
+and you can put next to the column you want
+
+00:07:23.361 --> 00:07:26.999
+to use for the sort, and then you can put
+
+00:07:27.000 --> 00:07:30.679
+`a` if you want to sort alphabetically,
+
+00:07:30.680 --> 00:07:33.879
+in uppercase if you want to reverse the sort,
+
+00:07:33.880 --> 00:07:38.919
+and `n` if you want to sort numerically.
+
+00:07:38.920 --> 00:07:40.759
+For instance, I can put that
+
+00:07:40.760 --> 00:07:43.959
+from the lesser score to the best score,
+
+00:07:43.960 --> 00:07:46.639
+or here from the best score to the lesser score.
+
+00:07:46.640 --> 00:07:48.960
+And this sort is completely independent
+
+00:07:48.961 --> 00:07:51.640
+to the sort of the original table.
+
+NOTE New table
+
+00:07:51.641 --> 00:07:54.520
+Now I'm going to do another different thing,
+
+00:07:54.521 --> 00:08:02.799
+we are going to put a new table,
+
+00:08:02.800 --> 00:08:07.559
+I'm going to put a new table
+
+00:08:07.560 --> 00:08:09.639
+in which I'm going to put
+
+00:08:09.640 --> 00:08:14.319
+the number of passed students, failed students
+
+00:08:14.320 --> 00:08:16.519
+and the ratio of students. It's simple.
+
+00:08:16.520 --> 00:08:26.559
+I'm going to put the pass, in that case, as column,
+
+00:08:26.560 --> 00:08:32.919
+I can put the count, of course, I can put the count,
+
+00:08:32.920 --> 00:08:35.799
+the number of students
+
+00:08:35.800 --> 00:08:42.079
+that have passed, so I'm going to put in that way, ok?
+
+00:08:42.080 --> 00:08:58.479
+I'm going to put pass, count, failed, ratio.
+
+00:08:58.480 --> 00:08:59.739
+You can see, ok?
+
+00:08:59.740 --> 00:09:01.859
+But this only the count,
+
+00:09:01.860 --> 00:09:04.519
+you are going to put the number wrong.
+
+00:09:04.520 --> 00:09:08.359
+So, it's true, but you can actually put formula here.
+
+00:09:08.360 --> 00:09:10.079
+For instance, you can say,
+
+00:09:10.080 --> 00:09:12.399
+I know that I have 3 students,
+
+00:09:12.400 --> 00:09:18.799
+so the number of failed is 3 minus the passed student.
+
+00:09:18.800 --> 00:09:24.959
+And also, I can put the formula, is the people,
+
+00:09:24.960 --> 00:09:27.719
+the students that passed,
+
+00:09:27.720 --> 00:09:36.079
+divide into the number total of students, ok?
+
+00:09:36.080 --> 00:09:41.379
+Let's go to put that in that way,
+
+00:09:41.380 --> 00:09:44.399
+is the people that passed, it is better in that way,
+
+00:09:44.400 --> 00:09:48.359
+and also I can put directly the number of,
+
+00:09:48.360 --> 00:09:50.919
+the ratio of students.
+
+00:09:50.920 --> 00:09:55.739
+So, in that way, I can have a table
+
+00:09:55.740 --> 00:09:57.519
+with the students that passed,
+
+00:09:57.520 --> 00:09:58.559
+the students that failed
+
+00:09:58.560 --> 00:10:01.279
+and the ratio of people that passed.
+
+NOTE Statistics
+
+00:10:01.280 --> 00:10:04.819
+Sometimes this type of qualification will be useful for me,
+
+00:10:04.820 --> 00:10:08.079
+to see how much has been the sound,
+
+00:10:08.080 --> 00:10:12.239
+how much good has been the exercise.
+
+00:10:12.240 --> 00:10:14.879
+Now, I'm going to put a new table.
+
+00:10:14.880 --> 00:10:22.421
+This new table is going to go some statistics,
+
+00:10:22.422 --> 00:10:32.379
+`statistics_score`, `begin: aggregate :table "final"`.
+
+00:10:32.380 --> 00:10:43.919
+In this case, I'm going to use not the original table,
+
+00:10:43.920 --> 00:10:54.019
+but a final, I'm going to put `final_group`,
+
+00:10:54.020 --> 00:11:01.399
+`final_p1`, `final_p2`, ok?
+
+00:11:01.400 --> 00:11:06.119
+And as `:cols`, I'm going to put directly
+
+00:11:06.120 --> 00:11:13.579
+how many results I have, I put number,
+
+00:11:13.580 --> 00:11:19.199
+I'm going to put also the mean.
+
+00:11:19.200 --> 00:11:21.400
+You can see that mean total is not working
+
+00:11:21.401 --> 00:11:24.519
+because I'm using this table and I renamed,
+
+00:11:24.520 --> 00:11:26.079
+the column name was renamed,
+
+00:11:26.080 --> 00:11:36.679
+so it's `mean(Score)`, mean,
+
+00:11:36.680 --> 00:12:05.919
+and then the score. You can obtain `stdiv` -- `sdev`,
+
+00:12:05.920 --> 00:12:08.959
+sorry, there was an error about that,
+
+00:12:08.960 --> 00:12:12.639
+and two decimal,
+
+00:12:12.640 --> 00:12:17.799
+and that is another interesting score.
+
+NOTE Combining
+
+00:12:17.800 --> 00:12:23.239
+Now, I'm going to finish showing how we can use.
+
+00:12:23.240 --> 00:12:25.839
+To finish it, we are going to see
+
+00:12:25.840 --> 00:12:28.299
+how we can combine several tables
+
+00:12:28.300 --> 00:12:32.479
+or even an aggregated table in a new table.
+
+00:12:32.480 --> 00:12:36.259
+For instance, you can have a table for the practice 1,
+
+00:12:36.260 --> 00:12:38.199
+you can have a table for the practice 2,
+
+00:12:38.200 --> 00:12:40.359
+so I'm going to do that.
+
+00:12:40.360 --> 00:12:48.180
+I'm going to move this table. You can copy or remove,
+
+00:12:48.181 --> 00:12:49.759
+doesn't matter the order,
+
+00:12:49.760 --> 00:12:59.519
+I'm going to put this to identify the result of practice 2,
+
+00:12:59.520 --> 00:13:03.321
+Org create an ID (`org-id-get-create`),
+
+00:13:03.322 --> 00:13:07.479
+then we have a previous result,
+
+00:13:07.480 --> 00:13:10.199
+and I have a final table.
+
+00:13:10.200 --> 00:13:11.839
+The final table could be complicated,
+
+00:13:11.840 --> 00:13:17.439
+but it's not so much complicated, it's only that,
+
+00:13:17.440 --> 00:13:21.959
+I'm going to put something that the formula wants.
+
+00:13:21.960 --> 00:13:26.588
+The formula is to make
+
+00:13:26.589 --> 00:13:34.400
+an `org-lookup-first` of the second name,
+
+00:13:34.401 --> 00:13:41.540
+considering that it's unique,
+
+00:13:41.541 --> 00:13:53.439
+`remote` of the surname,
+
+00:13:53.440 --> 00:14:05.559
+and let's say another `remote` of the `$3` element,
+
+00:14:05.560 --> 00:14:15.119
+ok, that's an error because I don't put yet the ID,
+
+00:14:15.120 --> 00:14:19.759
+so I'm going to copy -- mark and copy --
+
+00:14:19.760 --> 00:14:28.519
+and paste the unique ID generated,
+
+00:14:28.520 --> 00:14:38.519
+I'm going to put that... I think there is missing one.
+
+00:14:38.520 --> 00:14:43.399
+Finally. Okay, that's right.
+
+00:14:43.400 --> 00:14:49.579
+So imagine that I change something here, for instance,
+
+00:14:49.580 --> 00:14:56.700
+I put... I change that,
+
+00:14:56.701 --> 00:15:02.199
+actually, this is changed also, and this is changed.
+
+00:15:02.200 --> 00:15:08.599
+This is a good way to divide the classification
+
+00:15:08.600 --> 00:15:10.200
+in several files, one for the practice 1,
+
+00:15:10.201 --> 00:15:15.039
+one for the practice 2, and one final practice
+
+00:15:15.040 --> 00:15:27.639
+that I can finally export in a final table.
+
+00:15:27.640 --> 00:15:31.119
+Of course you can make it a lot more pretty,
+
+00:15:31.120 --> 00:15:33.359
+but this is all I want to show you.
+
+00:15:33.360 --> 00:15:34.799
+I hope with this talk
+
+00:15:34.800 --> 00:15:37.679
+you have learned a lot more about Org formula,
+
+00:15:37.680 --> 00:15:39.688
+[orgtbl-aggregate] package,
+
+00:15:39.689 --> 00:15:42.279
+and how you can use all this techniques
+
+00:15:42.280 --> 00:15:45.599
+to improve your qualification of a student,
+
+00:15:45.600 --> 00:15:50.480
+or for whatever you want.
diff --git a/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt
new file mode 100644
index 00000000..9852485c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt
@@ -0,0 +1,2654 @@
+WEBVTT
+
+
+00:00:00.599 --> 00:00:04.140
+[Speaker 0]: Again, second only live Q&A of the day.
+
+00:00:04.339 --> 00:00:06.339
+So, things are still a bit rusty,
+
+00:00:06.339 --> 00:00:08.379
+but believe me, by the end of the morning,
+
+00:00:08.380 --> 00:00:12.259
+we will be well-oiled machinery.
+
+00:00:12.340 --> 00:00:13.940
+So, hi Marcus, how are you doing?
+
+00:00:14.540 --> 00:00:15.860
+[Speaker 1]: I'm fine, Thank you.
+
+00:00:17.500 --> 00:00:20.020
+[Speaker 0]: I really liked, most people might have
+
+00:00:20.020 --> 00:00:22.180
+forgotten, but you started your presentation
+
+00:00:22.360 --> 00:00:26.340
+with the, in a very dark room and with this
+
+00:00:26.680 --> 00:00:29.340
+typical note of dry German humor that I
+
+00:00:29.340 --> 00:00:30.900
+particularly liked.
+
+00:00:31.640 --> 00:00:34.280
+[Speaker 1]: Whereas I told you we're born without humour
+
+00:00:34.280 --> 00:00:38.300
+so any sense of humour is the result of very
+
+00:00:38.300 --> 00:00:39.059
+hard work.
+
+00:00:40.940 --> 00:00:44.280
+[Speaker 0]: Well I can confirm therefore that your work
+
+00:00:44.280 --> 00:00:46.600
+is evident in this particular remark.
+
+00:00:47.780 --> 00:00:50.879
+So as we did before and perhaps this time
+
+00:00:50.940 --> 00:00:54.320
+more punctiliously, terrible adverb,
+
+00:00:54.320 --> 00:00:58.100
+that's why I'm an English major we will be
+
+00:00:58.100 --> 00:01:00.420
+taking questions first from the pad and then
+
+00:01:00.420 --> 00:01:03.740
+we'll be moving on to people in the BBV room.
+
+00:01:03.740 --> 00:01:05.540
+Let me just check if we have some people.
+
+00:01:05.540 --> 00:01:06.720
+We do have some people.
+
+00:01:06.960 --> 00:01:08.860
+All right, so Markus, I'm gonna ask you the
+
+00:01:08.860 --> 00:01:11.200
+questions in the pad unless you have
+
+00:01:11.200 --> 00:01:12.600
+something to remark first.
+
+00:01:13.080 --> 00:01:15.060
+[Speaker 1]: Yes, oh no, no, I don't have nothing to
+
+00:01:15.060 --> 00:01:17.800
+remark. I mean, only that we're coming to the
+
+00:01:17.800 --> 00:01:20.200
+end of the term here, and I think in the
+
+00:01:20.200 --> 00:01:24.140
+paper that I wrote, I expressed doubt that
+
+00:01:24.140 --> 00:01:25.560
+Emacs was good for beginners,
+
+00:01:25.560 --> 00:01:31.720
+but I've now gone back to an interactive
+
+00:01:31.780 --> 00:01:34.020
+notebook in the class without Emacs,
+
+00:01:34.080 --> 00:01:37.500
+and I've just missed it terribly the whole
+
+00:01:37.500 --> 00:01:39.220
+term. And I think I saw you walk too,
+
+00:01:39.220 --> 00:01:40.540
+so that's kind of interesting.
+
+00:01:41.380 --> 00:01:42.160
+That's it.
+
+00:01:42.270 --> 00:01:43.580
+[Speaker 0]: Right. All right, well,
+
+00:01:43.580 --> 00:01:45.040
+let's get started with the questions because
+
+00:01:45.040 --> 00:01:47.940
+I'm a little worried that we might acquire
+
+00:01:48.340 --> 00:01:50.580
+debt because of the time that we have.
+
+00:01:50.580 --> 00:01:53.040
+And just to be clear, so that you also know
+
+00:01:53.040 --> 00:01:54.479
+the time at which we're supposed to be
+
+00:01:54.479 --> 00:01:57.240
+finishing, the next talk here on this track
+
+00:01:57.240 --> 00:01:59.560
+is supposed to be at 10.40,
+
+00:01:59.700 --> 00:02:01.740
+which is in 13 minutes from now.
+
+00:02:01.800 --> 00:02:03.220
+All right, with that said,
+
+00:02:03.240 --> 00:02:04.500
+starting with the first questions.
+
+00:02:05.000 --> 00:02:07.300
+What tools do you use for making your slides?
+
+00:02:07.300 --> 00:02:09.440
+They are very nice and I concur.
+
+00:02:17.680 --> 00:02:18.180
+OrgReveal?
+
+00:02:12.280 --> 00:02:22.600
+[Speaker 1]: I use OrgReveal. It's a package,
+
+00:02:22.980 --> 00:02:26.380
+OrgReveal. I don't have the link right now,
+
+00:02:26.380 --> 00:02:31.560
+but it's an org mode package where You create
+
+00:02:31.560 --> 00:02:35.400
+some meta information and I think it's
+
+00:02:35.400 --> 00:02:39.900
+basically JavaScript, JavaScript package that
+
+00:02:39.900 --> 00:02:41.620
+will work from a bunch of different
+
+00:02:45.580 --> 00:02:49.540
+platforms, but it works particularly well
+
+00:02:49.540 --> 00:02:52.120
+from Emacs. So you use that a lot.
+
+00:02:53.740 --> 00:02:55.440
+[Speaker 0]: Right, yeah, I think it is definitely
+
+00:02:55.440 --> 00:02:57.120
+interacting with JavaScript in the background
+
+00:02:57.120 --> 00:02:59.120
+and it makes for a very clean presentation
+
+00:02:59.440 --> 00:03:01.380
+right from Emacs. I mean,
+
+00:03:01.380 --> 00:03:04.340
+it's not opened in Emacs unless you use a web
+
+00:03:04.340 --> 00:03:06.480
+browser in Emacs that supports such
+
+00:03:06.480 --> 00:03:09.400
+compositing but it's pretty convenient and I
+
+00:03:09.400 --> 00:03:10.780
+recommend looking into it.
+
+00:03:15.140 --> 00:03:19.540
+[Speaker 1]: I'm just going to share the URL here.
+
+00:03:20.080 --> 00:03:21.400
+So if anybody's interested.
+
+00:03:22.300 --> 00:03:24.140
+[Speaker 0]: Right, and we'll be putting all the links
+
+00:03:24.140 --> 00:03:25.600
+right now. So obviously right now,
+
+00:03:25.600 --> 00:03:28.180
+Marcus is writing inside of his own Emacs,
+
+00:03:28.180 --> 00:03:29.340
+but we also have the pad.
+
+00:03:29.340 --> 00:03:31.020
+We'll make sure that you have all the links
+
+00:03:31.020 --> 00:03:32.520
+accessible a little bit later.
+
+00:03:32.660 --> 00:03:34.340
+Okay, moving on to the next question,
+
+00:03:34.460 --> 00:03:35.360
+why MDPI?
+
+00:03:36.820 --> 00:03:40.520
+[Speaker 1]: Oh yeah, well that's a little bit of a longer
+
+00:03:40.520 --> 00:03:42.600
+answer, kind of boring I suppose.
+
+00:03:42.840 --> 00:03:44.680
+So when I came here to the US,
+
+00:03:45.560 --> 00:03:47.960
+I used to teach a lot of graduate courses and
+
+00:03:47.960 --> 00:03:49.280
+I had to suddenly teach a lot of
+
+00:03:49.280 --> 00:03:50.460
+undergraduate courses,
+
+00:03:50.500 --> 00:03:53.100
+which partly motivated this move because it
+
+00:03:53.100 --> 00:03:55.640
+made me realize, as I said in the
+
+00:03:55.640 --> 00:03:58.020
+presentation, how little the students
+
+00:03:58.020 --> 00:03:59.780
+understand of the underlying infrastructure
+
+00:04:00.040 --> 00:04:01.920
+and how important it is for them to work with
+
+00:04:01.920 --> 00:04:06.440
+an IDE that doesn't make coding especially
+
+00:04:06.540 --> 00:04:09.140
+convenient, but that teaches them a lot of
+
+00:04:09.140 --> 00:04:10.840
+the stuff on the side,
+
+00:04:10.840 --> 00:04:13.080
+you know, while still presenting a very
+
+00:04:13.440 --> 00:04:17.380
+smooth environment, which developers
+
+00:04:17.480 --> 00:04:22.120
+appreciate as well. So I came here and I used
+
+00:04:22.120 --> 00:04:24.520
+to publish like 4 or 5 research papers per
+
+00:04:24.520 --> 00:04:26.140
+year, but I didn't have the time.
+
+00:04:26.520 --> 00:04:28.760
+So I was contacted by MDPI.
+
+00:04:30.060 --> 00:04:34.340
+And it's 1 of those research paper mills,
+
+00:04:34.700 --> 00:04:37.160
+which seem to be springing up where authors
+
+00:04:37.200 --> 00:04:40.840
+can, really the institutions of the authors
+
+00:04:40.840 --> 00:04:42.560
+have to pay so that they can publish,
+
+00:04:42.560 --> 00:04:44.440
+right? So it's not really,
+
+00:04:44.440 --> 00:04:46.400
+and I checked them out and they seem to be
+
+00:04:46.400 --> 00:04:47.680
+proper peer review publishing,
+
+00:04:47.680 --> 00:04:49.120
+but to be absolutely sure I said,
+
+00:04:49.120 --> 00:04:50.460
+well, you can have my article,
+
+00:04:51.220 --> 00:04:52.540
+but of course for free,
+
+00:04:52.540 --> 00:04:55.080
+I'm not going to pay for you to publish it.
+
+00:04:55.080 --> 00:04:57.700
+And so that's what they did.
+
+00:04:57.880 --> 00:05:01.160
+They invited me and I submitted the paper and
+
+00:05:01.160 --> 00:05:02.240
+it was a very good process.
+
+00:05:02.240 --> 00:05:04.540
+That was a very, it was a good peer review
+
+00:05:04.540 --> 00:05:06.760
+critique. So I changed the paper quite a bit.
+
+00:05:06.760 --> 00:05:07.940
+It's still not a great paper.
+
+00:05:07.940 --> 00:05:09.320
+It's just a small case study.
+
+00:05:09.320 --> 00:05:12.100
+That's the kind of thing that you have a lot
+
+00:05:12.100 --> 00:05:14.800
+in medical research where also people don't
+
+00:05:14.800 --> 00:05:17.720
+have a lot of time to do research,
+
+00:05:17.720 --> 00:05:19.480
+proper research, which takes a very long
+
+00:05:19.480 --> 00:05:21.520
+time. And so that's why MDPI.
+
+00:05:21.820 --> 00:05:24.660
+And they are in the most of the relevant
+
+00:05:24.800 --> 00:05:27.780
+citation indices. So they are reputable
+
+00:05:27.900 --> 00:05:30.920
+enough. I mean, normally I would say for
+
+00:05:30.920 --> 00:05:33.060
+anybody who does anything like this,
+
+00:05:33.260 --> 00:05:36.420
+you might not even want to bother with the
+
+00:05:36.420 --> 00:05:37.640
+journal these days anymore.
+
+00:05:37.640 --> 00:05:39.260
+You just go straight to ArcSci,
+
+00:05:40.520 --> 00:05:41.620
+put out your preprint.
+
+00:05:41.980 --> 00:05:44.540
+And in fact, what will happen if you're on
+
+00:05:44.540 --> 00:05:46.440
+ArcSci, if somebody finds it interesting,
+
+00:05:46.440 --> 00:05:49.900
+they're going to reach out to you to capture
+
+00:05:49.900 --> 00:05:54.280
+your paper and have it published under their
+
+00:05:54.280 --> 00:05:56.120
+heading. Oh yeah, actually the other reason
+
+00:05:56.120 --> 00:05:58.660
+why I wanted MDPI is because there were open
+
+00:05:58.660 --> 00:05:59.980
+access from the start.
+
+00:06:00.720 --> 00:06:02.660
+And I really like, if you go to the paper,
+
+00:06:02.660 --> 00:06:04.200
+I really like the way it's presented.
+
+00:06:04.200 --> 00:06:07.340
+So I looked at a few papers and I thought
+
+00:06:07.340 --> 00:06:12.140
+it's a really nice online access,
+
+00:06:12.160 --> 00:06:13.980
+online open access solution.
+
+00:06:15.920 --> 00:06:17.220
+That's the long answer,
+
+00:06:17.220 --> 00:06:17.720
+sorry.
+
+00:06:18.740 --> 00:06:21.060
+[Speaker 0]: No, that was perfectly fine and you provided
+
+00:06:21.060 --> 00:06:23.760
+many details so it was far from a boring
+
+00:06:23.760 --> 00:06:25.420
+answer, let me reassure you.
+
+00:06:26.140 --> 00:06:27.100
+Moving on to the question,
+
+00:06:27.100 --> 00:06:29.120
+we only have about 8 minutes left so I'd like
+
+00:06:29.120 --> 00:06:31.500
+to finish those 2 questions and let people in
+
+00:06:31.500 --> 00:06:34.460
+the audience speak. So do you think immersion
+
+00:06:35.280 --> 00:06:37.500
+can be achieved on teaching other students
+
+00:06:37.500 --> 00:06:38.600
+with different backgrounds?
+
+00:06:39.340 --> 00:06:42.180
+[Speaker 1]: Oh yeah, that's a really good question.
+
+00:06:45.740 --> 00:06:48.380
+I had actually a discussion last night with
+
+00:06:48.380 --> 00:06:49.920
+my wife in bed about this,
+
+00:06:49.920 --> 00:06:52.860
+about the use of textbooks which are famously
+
+00:06:53.000 --> 00:06:55.840
+non-immersive because they're consumed away
+
+00:06:55.840 --> 00:06:58.640
+from the class. Very rarely you sit in class
+
+00:06:58.660 --> 00:07:00.540
+like people used to do and read something
+
+00:07:00.540 --> 00:07:02.420
+together. Maybe they did that in English.
+
+00:07:02.420 --> 00:07:04.700
+And that is of course instantly immersive.
+
+00:07:05.240 --> 00:07:06.700
+But in computer science,
+
+00:07:06.700 --> 00:07:08.180
+many other topics, psychology,
+
+00:07:08.360 --> 00:07:10.300
+you know, biology and so on,
+
+00:07:10.680 --> 00:07:12.260
+you cannot get immersion,
+
+00:07:12.260 --> 00:07:14.240
+at least not in a lecture theater.
+
+00:07:15.040 --> 00:07:16.960
+You get it in a lab because people solve the
+
+00:07:16.960 --> 00:07:18.920
+problem and then they're immersed in it.
+
+00:07:18.920 --> 00:07:20.660
+So, but my answer would be,
+
+00:07:20.660 --> 00:07:22.680
+yes, I can think totally immersion can be
+
+00:07:22.680 --> 00:07:25.520
+achieved anywhere, but what you have to do is
+
+00:07:25.520 --> 00:07:29.500
+you have to not lecture and you have to let
+
+00:07:29.500 --> 00:07:31.640
+students do work as you go along.
+
+00:07:31.640 --> 00:07:33.840
+So I used to lecture quite a bit because I
+
+00:07:33.840 --> 00:07:38.220
+was an insecure young professor and just read
+
+00:07:38.220 --> 00:07:41.400
+all my slides and my notes as I used to use,
+
+00:07:41.400 --> 00:07:43.540
+as everybody uses to when they start.
+
+00:07:44.200 --> 00:07:46.100
+But as I went along, I realized,
+
+00:07:46.100 --> 00:07:48.240
+you know, I've got such a grasp of the topic
+
+00:07:48.240 --> 00:07:51.080
+that I really everything I do now is prepared
+
+00:07:51.080 --> 00:07:53.720
+in Emacs in an interactive way so I start
+
+00:07:53.800 --> 00:07:55.480
+saying a few words and then the students
+
+00:07:55.480 --> 00:07:58.000
+immediately we get to work and they seem to
+
+00:07:58.000 --> 00:07:59.840
+love that because in most of the other
+
+00:07:59.840 --> 00:08:01.680
+classes people just talk at them they take
+
+00:08:01.680 --> 00:08:03.500
+their stuff home and work at home,
+
+00:08:03.600 --> 00:08:05.140
+which is of course is super.
+
+00:08:05.380 --> 00:08:06.680
+But most of the students,
+
+00:08:06.680 --> 00:08:08.600
+if they have, in at least in a liberal arts
+
+00:08:08.600 --> 00:08:10.220
+college, they have 5 other classes,
+
+00:08:10.440 --> 00:08:13.520
+they do not take a lot of time to do the work
+
+00:08:13.520 --> 00:08:16.880
+at home. So it's, you know,
+
+00:08:16.880 --> 00:08:18.840
+yeah, It's kind of different.
+
+00:08:18.840 --> 00:08:20.020
+It's kind of risky, yeah,
+
+00:08:20.020 --> 00:08:22.360
+but the main point I was trying to make is
+
+00:08:22.360 --> 00:08:26.740
+Emacs and Org Mode really helped me to boil
+
+00:08:26.740 --> 00:08:29.220
+that interactive session down to something
+
+00:08:29.220 --> 00:08:30.800
+that will work in the classroom.
+
+00:08:30.800 --> 00:08:32.559
+I don't have to jump around between
+
+00:08:32.559 --> 00:08:33.740
+platforms. For example,
+
+00:08:33.840 --> 00:08:35.799
+this term, and I didn't use Emacs in the
+
+00:08:35.799 --> 00:08:36.919
+class with the students,
+
+00:08:37.159 --> 00:08:40.240
+I had to render using a package.
+
+00:08:40.760 --> 00:08:42.299
+It's actually a very nice package called,
+
+00:08:42.299 --> 00:08:46.100
+what's it called? Ox, what's it called?
+
+00:08:46.100 --> 00:08:50.520
+Ox, Ox IPNB. It's called Ox IPNB.
+
+00:08:50.580 --> 00:08:53.360
+So what it does is it renders in the usual
+
+00:08:53.360 --> 00:08:55.580
+way with Emacs, Org Mode does,
+
+00:08:55.600 --> 00:08:58.700
+renders interactive notebook files in
+
+00:08:58.700 --> 00:09:01.060
+Jupyter. And that took me a lot of time.
+
+00:09:01.320 --> 00:09:03.840
+And I immediately noticed as soon as the
+
+00:09:03.840 --> 00:09:06.180
+teacher has to fight platforms themselves,
+
+00:09:06.660 --> 00:09:09.920
+they take the ball off the immersion task,
+
+00:09:09.920 --> 00:09:12.340
+you know, to keep the student on the problem.
+
+00:09:16.000 --> 00:09:18.560
+[Speaker 0]: Yeah. Oh, go on, please.
+
+00:09:19.400 --> 00:09:22.840
+Yeah. I was going to remark that.
+
+00:09:12.980 --> 00:09:23.260
+[Speaker 1]: So yeah, absolutely. Yeah,
+
+00:09:23.260 --> 00:09:25.120
+I suppose it might be MIT style.
+
+00:09:25.120 --> 00:09:26.140
+Big difference though,
+
+00:09:26.140 --> 00:09:27.900
+my classes are very, very short,
+
+00:09:27.900 --> 00:09:30.060
+small. So I have like between 10 and 15
+
+00:09:30.060 --> 00:09:32.180
+students per class. 1 of the reasons why I
+
+00:09:32.180 --> 00:09:35.080
+went to this college is because I was fed up
+
+00:09:35.080 --> 00:09:36.940
+teaching, trying to teach hundreds of
+
+00:09:36.940 --> 00:09:40.580
+students. Okay, sorry,
+
+00:09:40.580 --> 00:09:42.520
+do some of your students nag you about using
+
+00:09:42.520 --> 00:09:43.460
+VS Code? Yes, they do,
+
+00:09:43.460 --> 00:09:45.300
+but their arguments aren't very good.
+
+00:09:46.800 --> 00:09:48.740
+They hadn't really compared Emacs and VS
+
+00:09:48.740 --> 00:09:51.800
+Code. And what I do, actually I use RStudio
+
+00:09:51.980 --> 00:09:53.860
+as well, demonstrate VS Code,
+
+00:09:53.860 --> 00:10:01.060
+RStudio and Emacs. And I think it's very easy
+
+00:10:01.060 --> 00:10:02.840
+for them to see. And there are some videos
+
+00:10:02.840 --> 00:10:05.020
+about that as well, how much easier it is to
+
+00:10:05.020 --> 00:10:08.520
+get into Emacs to limit your investments to
+
+00:10:08.520 --> 00:10:09.820
+what you actually wanna do.
+
+00:10:09.820 --> 00:10:11.840
+When the problem with VS Code is it comes at
+
+00:10:11.840 --> 00:10:14.280
+you with this sort of Microsoft store
+
+00:10:14.440 --> 00:10:17.280
+ideology, like a gazillion plugins,
+
+00:10:17.420 --> 00:10:18.840
+which if you're a developer,
+
+00:10:18.900 --> 00:10:20.140
+you know what you want.
+
+00:10:21.040 --> 00:10:24.120
+And I mean, it's a bit like VS Code is like
+
+00:10:24.960 --> 00:10:27.940
+Google search for as if you were programming
+
+00:10:27.980 --> 00:10:30.820
+in Google search, a complete waste of time.
+
+00:10:31.220 --> 00:10:33.280
+Having said that, I've also seen some videos
+
+00:10:33.280 --> 00:10:36.180
+with people who really know how to use VS
+
+00:10:36.180 --> 00:10:37.420
+Code. And of course, you know,
+
+00:10:37.420 --> 00:10:41.180
+if somebody gets on the inside of a tool and
+
+00:10:41.180 --> 00:10:44.480
+spends upwards of a thousand hours in the
+
+00:10:44.480 --> 00:10:45.840
+tool, they'll be great.
+
+00:10:45.920 --> 00:10:47.580
+But that's not true for beginners.
+
+00:10:48.960 --> 00:10:50.780
+So hold on, there's another 1.
+
+00:10:51.020 --> 00:10:52.320
+I'm reading them, sorry.
+
+00:10:52.840 --> 00:10:55.420
+Leo, I can see the questions,
+
+00:10:55.680 --> 00:10:58.000
+but you may wanna turn them around.
+
+00:10:59.700 --> 00:11:00.720
+[Speaker 0]: No, No, no, please, please,
+
+00:11:00.720 --> 00:11:01.560
+you're free to read them.
+
+00:11:01.560 --> 00:11:02.900
+I'm on your fasted computer.
+
+00:11:02.960 --> 00:11:04.600
+[Speaker 1]: Some of you, too, that's the nagging.
+
+00:11:04.600 --> 00:11:06.100
+I teach simple programming at a vocational
+
+00:11:06.100 --> 00:11:07.700
+school, and even after showing the students
+
+00:11:07.700 --> 00:11:09.520
+Vim, Vim, of course, is a contender,
+
+00:11:09.520 --> 00:11:11.260
+and now I'm telling them I prefer Emacs.
+
+00:11:12.180 --> 00:11:14.260
+They still all choose VS Code as their
+
+00:11:14.260 --> 00:11:17.460
+editor. Well, okay, what I did is mandatory.
+
+00:11:17.720 --> 00:11:19.140
+I didn't let them choose.
+
+00:11:19.840 --> 00:11:21.980
+That's what I did. And I thought that was
+
+00:11:21.980 --> 00:11:23.800
+quite risky, but in the end,
+
+00:11:23.860 --> 00:11:26.400
+it turns out that the best students loved it
+
+00:11:26.400 --> 00:11:28.580
+and keep using Emacs in their jobs.
+
+00:11:28.580 --> 00:11:32.640
+I hear that now. The students in the middle
+
+00:11:33.160 --> 00:11:35.860
+were probably the ones who would pick VS Code
+
+00:11:35.860 --> 00:11:38.400
+because every tutorial they see,
+
+00:11:38.600 --> 00:11:40.440
+they learn a lot through YouTube and so
+
+00:11:40.440 --> 00:11:42.260
+everything they see is in VS Code.
+
+00:11:42.260 --> 00:11:44.180
+If there were more tutorials in Emacs,
+
+00:11:44.180 --> 00:11:45.600
+I'm trying to make some,
+
+00:11:45.700 --> 00:11:47.620
+then of course that would be different.
+
+00:11:49.280 --> 00:11:53.940
+But I think it's partly brainwashing and
+
+00:11:53.940 --> 00:11:55.840
+partly, of course, the other reason is there
+
+00:11:55.840 --> 00:12:00.320
+is no online Emacs. They use VS Code Dev,
+
+00:12:00.500 --> 00:12:02.460
+right? And that's, of course,
+
+00:12:03.340 --> 00:12:05.140
+they use an online cloud solution.
+
+00:12:05.420 --> 00:12:07.040
+Like most of the students in the high school,
+
+00:12:07.040 --> 00:12:09.360
+I teach Python in the high school right now,
+
+00:12:09.480 --> 00:12:11.600
+and the students only get Chromebooks that
+
+00:12:11.600 --> 00:12:14.160
+are completely cut down to nothing.
+
+00:12:15.060 --> 00:12:17.420
+They cannot have Linux on their Chromebooks.
+
+00:12:18.260 --> 00:12:19.900
+So what are they supposed to do?
+
+00:12:19.900 --> 00:12:21.580
+Their only choice really is Repl.
+
+00:12:21.760 --> 00:12:24.240
+Repl.com is a possibility for them to do
+
+00:12:24.240 --> 00:12:27.540
+that. But, you know, or they use code spaces,
+
+00:12:27.660 --> 00:12:29.560
+which is VS Code in GitHub.
+
+00:12:31.400 --> 00:12:32.640
+[Speaker 0]: Marcus, sorry for the interruption.
+
+00:12:32.640 --> 00:12:34.040
+We only have about 2 minutes left.
+
+00:12:34.040 --> 00:12:35.380
+So if you could take 1 question,
+
+00:12:35.380 --> 00:12:36.760
+that would be great. Sorry.
+
+00:12:30.660 --> 00:12:38.100
+[Speaker 1]: So. I'm observing the same behavior.
+
+00:12:38.100 --> 00:12:40.080
+Any more tutorials will be most welcome.
+
+00:12:40.080 --> 00:12:43.660
+Yes, I I'd love to. I spent the rest of my
+
+00:12:43.660 --> 00:12:46.100
+days on this earth making Emacs tutorials if
+
+00:12:48.263 --> 00:12:49.267
+[Speaker 0]: tutorials if I can.
+
+00:12:46.100 --> 00:12:49.769
+[Speaker 1]: I can. Thank you. DMAX Thank you.
+
+00:12:49.769 --> 00:12:51.040
+Approach to handling EDA.
+
+00:12:51.140 --> 00:12:52.700
+Oh yeah, with white data sets.
+
+00:12:56.760 --> 00:12:58.940
+Well, that's a good point.
+
+00:13:01.500 --> 00:13:03.260
+[Speaker 0]: So Markus, I don't want to put you under too
+
+00:13:03.840 --> 00:13:06.680
+[Speaker 1]: answer the question. The handling EDA,
+
+00:13:07.080 --> 00:13:08.760
+I don't know, if you look at the comments,
+
+00:13:08.760 --> 00:13:09.960
+I think these are on YouTube,
+
+00:13:09.960 --> 00:13:11.340
+right, at some point, Leo?
+
+00:13:03.260 --> 00:13:12.600
+[Speaker 0]: much pressure to Oh yes,
+
+00:13:12.600 --> 00:13:13.860
+they will definitely be on YouTube.
+
+00:13:14.200 --> 00:13:14.540
+answer the
+
+00:13:13.860 --> 00:13:15.580
+[Speaker 1]: I'm going to question you asked about the
+
+00:13:15.580 --> 00:13:17.560
+EDA, that's too long to go into right now,
+
+00:13:17.560 --> 00:13:21.100
+plus my cat is here. So I'm going to answer
+
+00:13:21.100 --> 00:13:22.620
+that in the comments, all right?
+
+00:13:23.000 --> 00:13:24.160
+Start up the conversation.
+
+00:13:24.960 --> 00:13:27.800
+Yes, I'm going to post that in the comments
+
+00:13:27.800 --> 00:13:28.480
+as well.
+
+00:13:29.320 --> 00:13:31.500
+[Speaker 0]: Sure, but Also, just to be clear,
+
+00:13:31.500 --> 00:13:32.640
+Marcus, you're going to continue the
+
+00:13:32.640 --> 00:13:35.440
+discussion. It's just a stream that will be
+
+00:13:35.440 --> 00:13:37.160
+moving on to the next talk in about 50
+
+00:13:37.160 --> 00:13:39.380
+seconds. Marcus, feel free to keep answering
+
+00:13:39.380 --> 00:13:40.760
+questions inside this room.
+
+00:13:40.760 --> 00:13:42.780
+You also have people, we're going to check
+
+00:13:42.840 --> 00:13:44.540
+aside with the stream,
+
+00:13:44.540 --> 00:13:46.280
+we have a number of people in the room.
+
+00:13:46.280 --> 00:13:48.300
+You can see them on the left on the button
+
+00:13:48.640 --> 00:13:51.360
+who are probably going to unmute themselves
+
+00:13:51.460 --> 00:13:52.580
+and ask you questions.
+
+00:13:52.740 --> 00:13:54.440
+So feel free to stay in the room,
+
+00:13:54.720 --> 00:13:57.100
+answer as lengthy as you want the questions
+
+00:13:57.100 --> 00:13:58.700
+because that's more content for us and we
+
+00:13:58.700 --> 00:14:01.640
+love it obviously. But it's just that I
+
+00:14:01.640 --> 00:14:03.760
+personally will be leaving to take care of
+
+00:14:03.760 --> 00:14:04.860
+the rest of the talks.
+
+00:14:04.960 --> 00:14:06.880
+So, Markus, do you have any last words before
+
+00:14:06.880 --> 00:14:07.740
+we move on?
+
+00:14:08.000 --> 00:14:09.680
+[Speaker 1]: No, just thank you for this wonderful...
+
+00:14:09.680 --> 00:14:11.080
+I'm going to copy this.
+
+00:14:11.660 --> 00:14:13.280
+I don't think I listened to the talk by
+
+00:14:13.280 --> 00:14:15.200
+Sascha yet, but I'm going to do that because
+
+00:14:15.200 --> 00:14:18.080
+I really want to copy this conference format.
+
+00:14:18.080 --> 00:14:19.860
+I think that is the conference format of the
+
+00:14:19.860 --> 00:14:21.820
+future, using volunteers to put together
+
+00:14:21.820 --> 00:14:23.100
+conferences. So I can't wait.
+
+00:14:23.100 --> 00:14:24.720
+Nobody wants to come to Batesville where I
+
+00:14:24.720 --> 00:14:25.840
+am, but thank you so much.
+
+00:14:25.840 --> 00:14:27.180
+That was really super professional.
+
+00:14:27.180 --> 00:14:28.040
+I love that.
+
+00:14:28.980 --> 00:14:32.420
+[Speaker 0]: Great. Okay, we are almost perfectly on time.
+
+00:14:32.420 --> 00:14:35.420
+I think we caught up about 1 or 2 seconds
+
+00:14:35.420 --> 00:14:37.200
+into the last sentence you said but otherwise
+
+00:14:37.200 --> 00:14:38.960
+we were splendidly on time.
+
+00:14:38.960 --> 00:14:40.260
+So thank you so much Marcus.
+
+00:14:40.440 --> 00:14:43.140
+[Speaker 1]: You're welcome. So I wanted to say a little
+
+00:14:43.140 --> 00:14:46.660
+bit about that question about handling EDA.
+
+00:14:51.220 --> 00:14:52.960
+[Speaker 0]: Can you see the chat on the left?
+
+00:14:52.960 --> 00:14:54.720
+Because people have started asking questions
+
+00:14:54.720 --> 00:14:56.180
+on the left. Can you see the chat?
+
+00:14:49.460 --> 00:14:56.866
+[Speaker 1]: I mean I used email. Sorry,
+
+00:14:58.860 --> 00:15:00.820
+[Speaker 0]: So you've got multiple avenues for questions.
+
+00:15:01.020 --> 00:15:01.166
+[Speaker 2]: You can
+
+00:15:01.166 --> 00:15:02.380
+[Speaker 0]: still answer questions in the chat.
+
+00:14:57.053 --> 00:15:03.760
+[Speaker 1]: sorry, sorry. Okay, I'm just going to go into
+
+00:15:03.760 --> 00:15:05.240
+that. Yeah, that's fine.
+
+00:15:05.240 --> 00:15:06.760
+[Speaker 0]: Sure, I'll need to go now.
+
+00:15:06.760 --> 00:15:08.560
+So Marcus, have a great day and I'll probably
+
+00:15:08.560 --> 00:15:09.360
+see you later.
+
+00:15:10.160 --> 00:15:12.280
+[Speaker 1]: Yeah, thank you. Sorry.
+
+00:15:13.140 --> 00:15:15.620
+Bye bye. There was a question about the,
+
+00:15:15.620 --> 00:15:17.560
+I wanted to ask the answer the question about
+
+00:15:17.560 --> 00:15:21.760
+EDA, large data sets. So,
+
+00:15:21.760 --> 00:15:24.660
+I mean, I teach undergraduate now,
+
+00:15:25.080 --> 00:15:28.100
+so there's a limited number of courses,
+
+00:15:28.660 --> 00:15:32.360
+like where I use, actually have big data
+
+00:15:32.360 --> 00:15:36.100
+issues. And I mean I'm not saying that I'm
+
+00:15:36.100 --> 00:15:38.760
+not that I don't run into performance issues
+
+00:15:38.760 --> 00:15:40.580
+with Emacs. I obviously do.
+
+00:15:40.680 --> 00:15:43.680
+But like the performance issues in Emacs are
+
+00:15:43.680 --> 00:15:45.780
+comparable to performance issues for example
+
+00:15:45.780 --> 00:15:49.580
+when using R. In R everything is in memory So
+
+00:15:49.640 --> 00:15:52.700
+you are limited to the available,
+
+00:15:52.840 --> 00:15:56.020
+what is it, 2 gigabyte or whatever memory of
+
+00:15:56.020 --> 00:15:58.180
+your computer. So you would have to find
+
+00:15:58.180 --> 00:16:00.360
+other infrastructure solutions anyway.
+
+00:16:00.660 --> 00:16:05.860
+The advantage of using Emacs is that I can,
+
+00:16:05.860 --> 00:16:07.620
+within 1 Org Mode file,
+
+00:16:08.140 --> 00:16:10.220
+connect to an external database.
+
+00:16:11.760 --> 00:16:13.840
+I can even, as probably most of you know,
+
+00:16:13.840 --> 00:16:17.860
+I can even use it as a text-based web browser
+
+00:16:17.860 --> 00:16:20.640
+if I want to. So I could look at individual
+
+00:16:22.940 --> 00:16:26.820
+files. And the other point of EDA of course
+
+00:16:26.820 --> 00:16:30.640
+is that you're not supposed to look at the
+
+00:16:30.640 --> 00:16:33.260
+tables. You're supposed to get the basic
+
+00:16:38.620 --> 00:16:41.300
+frame of your data. Is there a header?
+
+00:16:41.460 --> 00:16:43.780
+What's the approximate size and stuff like
+
+00:16:43.780 --> 00:16:45.940
+that? And then you're supposed to import it
+
+00:16:45.940 --> 00:16:47.580
+into a data frame ideally,
+
+00:16:47.960 --> 00:16:51.260
+at least in portions. And I don't think,
+
+00:16:53.240 --> 00:16:56.260
+yeah, so that's it. But the full answer is
+
+00:16:56.260 --> 00:16:59.980
+that I have not done big data analysis in
+
+00:16:59.980 --> 00:17:02.280
+Emacs. So that's actually a really nice
+
+00:17:02.380 --> 00:17:06.060
+extension. I'm going to write that down as a
+
+00:17:06.060 --> 00:17:08.260
+thing to talk about in some future talk.
+
+00:17:08.260 --> 00:17:10.819
+Okay, so ADA with big data.
+
+00:17:11.599 --> 00:17:13.940
+Even though interesting would be to know what
+
+00:17:13.940 --> 00:17:16.560
+kind of size of data you're actually talking
+
+00:17:16.560 --> 00:17:19.300
+about. So I don't know,
+
+00:17:20.920 --> 00:17:25.940
+what is it, upwards of 1 terabyte or
+
+00:17:25.940 --> 00:17:27.520
+something like that, I don't know.
+
+00:17:27.520 --> 00:17:29.020
+That'd be interesting to know.
+
+00:17:31.560 --> 00:17:34.940
+Haven't done that in class.
+
+00:17:39.240 --> 00:17:40.460
+So there's another question.
+
+00:17:41.240 --> 00:17:43.020
+Proportion of students that you think would
+
+00:17:43.020 --> 00:17:44.820
+keep on using Emacs after your course?
+
+00:17:44.820 --> 00:17:46.000
+That's not a difficult question,
+
+00:17:46.000 --> 00:17:47.880
+because as I said, I have very small classes.
+
+00:17:47.880 --> 00:17:49.200
+I've been here since 2 years.
+
+00:17:49.200 --> 00:17:51.540
+So I'm in touch with almost all the students.
+
+00:17:51.580 --> 00:17:54.760
+In fact, I'm getting them work after school.
+
+00:17:54.760 --> 00:17:55.980
+So that's really cool.
+
+00:17:56.200 --> 00:18:00.660
+And everybody who took to Emacs really
+
+00:18:00.660 --> 00:18:03.900
+seriously, so probably about 25% or so keep
+
+00:18:03.900 --> 00:18:06.160
+using Emacs after, afterwards.
+
+00:18:06.560 --> 00:18:08.360
+I mean, even in the job,
+
+00:18:08.360 --> 00:18:10.080
+right, in the professional field.
+
+00:18:10.680 --> 00:18:13.080
+Who, those who keep using Emacs after the
+
+00:18:13.080 --> 00:18:15.180
+course, I think the number is greater,
+
+00:18:15.180 --> 00:18:16.920
+but I have not followed up on that.
+
+00:18:16.920 --> 00:18:23.140
+I have to, my guess is more than half,
+
+00:18:23.140 --> 00:18:25.360
+I would say, half or more than half.
+
+00:18:26.660 --> 00:18:27.880
+Oh, Aaron, thank you so much.
+
+00:18:27.880 --> 00:18:31.320
+That's very sweet. But I didn't think the
+
+00:18:31.320 --> 00:18:32.300
+presentation was great.
+
+00:18:32.300 --> 00:18:33.840
+I was thinking about redoing it,
+
+00:18:33.840 --> 00:18:35.700
+but this is actually the first take.
+
+00:18:36.280 --> 00:18:38.860
+It was late, I had lots of other stuff to do.
+
+00:18:40.840 --> 00:18:44.700
+I think what I'm more interested in than
+
+00:18:44.700 --> 00:18:47.260
+papers is probably this idea of making
+
+00:18:48.320 --> 00:18:51.020
+Emacs-based data science videos because there
+
+00:18:51.020 --> 00:18:52.120
+aren't many out there.
+
+00:18:52.120 --> 00:18:53.600
+Most of the people who do,
+
+00:18:54.920 --> 00:18:57.240
+and computer science, most people who do that
+
+00:18:57.240 --> 00:18:59.240
+are not either developers and certainly not
+
+00:18:59.240 --> 00:19:02.080
+teachers. So I think that's a good idea.
+
+00:19:02.080 --> 00:19:03.740
+I'm gonna pick that up.
+
+00:19:03.860 --> 00:19:15.540
+So to do more Remax based data science videos
+
+00:19:19.120 --> 00:19:20.200
+Is there anything else?
+
+00:19:20.800 --> 00:19:22.360
+More people. There are some people here in
+
+00:19:22.360 --> 00:19:23.300
+the room still.
+
+00:19:23.800 --> 00:19:26.100
+[Speaker 2]: If you do a PSVL on work.
+
+00:19:27.040 --> 00:19:31.140
+What? Or wiki. What's my YouTube channel?
+
+00:19:34.460 --> 00:19:36.220
+[Speaker 1]: Oh, yeah, I'm going to give you the,
+
+00:19:36.560 --> 00:19:38.520
+I've got a bunch of different YouTube
+
+00:19:38.520 --> 00:19:40.720
+channels. I'm going to put them in the
+
+00:19:40.720 --> 00:19:43.240
+comments to my talk. Hold on,
+
+00:19:43.660 --> 00:19:46.500
+the 1 where I have the latest Emacs videos,
+
+00:19:46.640 --> 00:19:48.740
+you find my name, there's nobody in the world
+
+00:19:48.740 --> 00:19:51.060
+with my name. So if you look for Gerten Krag
+
+00:19:52.120 --> 00:19:55.740
+on YouTube, then you will find it.
+
+00:19:59.120 --> 00:20:00.300
+But I got a bunch of them.
+
+00:20:00.300 --> 00:20:01.900
+Hold on, I'm going to give you the...
+
+00:20:13.260 --> 00:20:20.040
+My channel. Okay, This 1 has only got a few
+
+00:20:20.220 --> 00:20:24.300
+videos. But so there's 1 with a lot more.
+
+00:20:25.380 --> 00:20:32.720
+Few recent videos. And I'm going to post
+
+00:20:32.740 --> 00:20:41.320
+more. Other ones in the comments of this
+
+00:20:41.320 --> 00:20:44.320
+video. Okay, what else?
+
+00:20:48.780 --> 00:20:51.140
+I'm trying to find my way back to the button.
+
+00:20:55.440 --> 00:20:59.200
+Okay, cool. Oh, yes, thank you.
+
+00:20:59.200 --> 00:21:01.500
+I will. That's very good.
+
+00:21:01.500 --> 00:21:03.120
+Thank you so much. Of course,
+
+00:21:03.120 --> 00:21:05.940
+I use Vork. I hadn't even thought of it.
+
+00:21:06.360 --> 00:21:15.140
+Very good. It's interesting,
+
+00:21:15.860 --> 00:21:18.020
+that's something that comes to my mind.
+
+00:21:18.120 --> 00:21:19.700
+When I was a young student,
+
+00:21:19.740 --> 00:21:24.020
+right, people who used Emacs and the web
+
+00:21:24.020 --> 00:21:25.920
+wasn't particularly large.
+
+00:21:25.960 --> 00:21:29.440
+So the volunteers would automatically make
+
+00:21:29.440 --> 00:21:31.420
+videos but not for commercial purposes.
+
+00:21:31.560 --> 00:21:34.740
+Now you have an army of people who make
+
+00:21:34.740 --> 00:21:37.700
+commercial videos and the videos are usually
+
+00:21:38.240 --> 00:21:41.020
+good for the first 10% of every content,
+
+00:21:41.040 --> 00:21:42.540
+but as soon as it gets a little more
+
+00:21:42.540 --> 00:21:44.760
+difficult, they either don't know what to do
+
+00:21:44.760 --> 00:21:48.600
+anymore or they don't do it because it's not
+
+00:21:48.600 --> 00:21:50.980
+commercially viable. The number of people who
+
+00:21:50.980 --> 00:21:53.720
+move on is gets smaller and smaller and
+
+00:21:53.720 --> 00:21:55.740
+smaller. So there's no commerce anymore.
+
+00:21:55.960 --> 00:21:57.840
+But when I was a student,
+
+00:21:58.740 --> 00:22:01.020
+pretty much all the documentation everywhere
+
+00:22:01.100 --> 00:22:02.360
+was created by volunteers,
+
+00:22:02.500 --> 00:22:04.840
+just like this conference or like anything in
+
+00:22:04.840 --> 00:22:09.520
+org mode. And that doesn't seem to be much of
+
+00:22:09.520 --> 00:22:12.760
+a trend anymore, but maybe we can resurrect
+
+00:22:12.860 --> 00:22:22.960
+it. So yes, I'm definitely gonna contribute
+
+00:22:22.960 --> 00:22:26.760
+to that. Multiple people are typing here.
+
+00:22:30.280 --> 00:22:36.180
+Oh, sorry. Yes. Thank you so much.
+
+00:22:37.060 --> 00:22:40.920
+I'm gonna put that, I'm gonna rectify that in
+
+00:22:40.920 --> 00:22:45.260
+the comment. Having said that,
+
+00:22:45.260 --> 00:22:49.820
+I am not 100% sure that I didn't lie here.
+
+00:22:50.500 --> 00:22:52.760
+May just be because I didn't have much time
+
+00:22:52.760 --> 00:22:54.340
+to put the presentation together.
+
+00:22:54.340 --> 00:22:56.820
+And it's perfectly possible that that's
+
+00:22:56.820 --> 00:22:59.760
+actually Google slides and not all reveal.
+
+00:23:00.040 --> 00:23:02.360
+In the classroom when I present and just do
+
+00:23:02.360 --> 00:23:04.100
+lectures, I always do reveal,
+
+00:23:04.600 --> 00:23:07.900
+but most of the time I do a tree slide.
+
+00:23:08.640 --> 00:23:10.840
+That's the quickest way to do it for me.
+
+00:23:10.840 --> 00:23:15.060
+So, so presentation. Hold on,
+
+00:23:15.060 --> 00:23:16.580
+Let me just copy this 1.
+
+00:23:17.960 --> 00:23:20.780
+Make sure that this doesn't get lost.
+
+00:23:21.880 --> 00:23:23.220
+Thank you so much for that.
+
+00:23:24.280 --> 00:23:26.100
+And presentations in class.
+
+00:23:28.780 --> 00:23:30.320
+I use sometimes org-present,
+
+00:23:30.660 --> 00:23:32.860
+but there are issues with the font sometimes.
+
+00:23:33.740 --> 00:23:36.960
+I use Treeslide most of the time and Org
+
+00:23:44.240 --> 00:23:44.740
+[Speaker 2]: tool.
+
+00:23:36.960 --> 00:23:46.780
+[Speaker 1]: Reveal. But this 1 is my top Of course,
+
+00:23:46.780 --> 00:23:49.140
+this is not org, so forget about that.
+
+00:24:02.660 --> 00:24:08.220
+Okay. Yeah, so you can send me your,
+
+00:24:10.680 --> 00:24:12.160
+you've got my email, I think,
+
+00:24:12.160 --> 00:24:14.060
+on the end, if you're interested in following
+
+00:24:14.060 --> 00:24:16.360
+up or letting me know about your stuff.
+
+00:24:16.680 --> 00:24:18.220
+It might be interesting to,
+
+00:24:18.480 --> 00:24:20.040
+I don't know, might be interesting to put
+
+00:24:20.040 --> 00:24:22.040
+together a conference or a little seminar
+
+00:24:22.040 --> 00:24:22.980
+just for educators.
+
+00:24:37.500 --> 00:24:39.025
+DF is still typing, I'm waiting.
+
+00:24:39.025 --> 00:24:39.780
+I'm waiting.
+
+00:24:44.840 --> 00:24:46.400
+[Speaker 2]: Actually, our mod maintainer,
+
+00:24:46.700 --> 00:24:52.340
+Bastien, was talking about possibility to
+
+00:24:52.340 --> 00:24:54.120
+have just org mod conference.
+
+00:24:55.760 --> 00:24:59.180
+But the question is, is it worth making a
+
+00:24:54.780 --> 00:25:02.940
+[Speaker 1]: Yeah. A whole separate 1 what?
+
+00:24:59.180 --> 00:25:05.020
+[Speaker 2]: whole separate 1? A whole separate org
+
+00:25:07.120 --> 00:25:09.600
+[Speaker 1]: Oh, I see. Yeah, probably would be.
+
+00:25:10.840 --> 00:25:11.340
+Actually.
+
+00:25:05.020 --> 00:25:13.940
+[Speaker 2]: dedicated conference. It's just like you see
+
+00:25:13.940 --> 00:25:15.980
+how EmacsConf is well done.
+
+00:25:16.800 --> 00:25:19.340
+So it's like creating anything that has good
+
+00:25:22.500 --> 00:25:25.540
+[Speaker 1]: Yes. No, I think that's a good idea.
+
+00:25:25.640 --> 00:25:26.620
+Yeah, I mean.
+
+00:25:19.340 --> 00:25:30.480
+[Speaker 2]: is tricky. I mean, Okay,
+
+00:25:30.480 --> 00:25:32.920
+it's anywhere, like half of Emacs is anywhere
+
+00:25:32.920 --> 00:25:36.880
+remote. So it's almost the same.
+
+00:25:37.500 --> 00:25:40.200
+[Speaker 1]: Yeah. Well, I suppose at this point,
+
+00:25:40.200 --> 00:25:41.520
+I don't know if that's what you mean.
+
+00:25:41.520 --> 00:25:45.020
+Org Mode is probably what attracts people to
+
+00:25:45.020 --> 00:25:47.040
+Emacs in the first place.
+
+00:25:47.040 --> 00:25:51.040
+Like, I suppose Org Roam is the,
+
+00:25:51.260 --> 00:25:54.600
+maybe the biggest 1 for people even outside
+
+00:25:54.600 --> 00:25:58.080
+of computer science. I use Org.ROM
+
+00:25:58.280 --> 00:26:02.760
+for everything. But there are...
+
+00:26:04.760 --> 00:26:05.840
+I mean, the thresholds...
+
+00:26:06.220 --> 00:26:07.900
+I think that the maintainer or maybe the
+
+00:26:07.900 --> 00:26:10.520
+creator of Org.MODE has claimed and said for
+
+00:26:10.520 --> 00:26:13.140
+many years that Org Mode itself doesn't
+
+00:26:13.140 --> 00:26:14.680
+actually necessarily need Emacs.
+
+00:26:14.680 --> 00:26:17.360
+You can have it as a completely separate
+
+00:26:17.360 --> 00:26:19.740
+application as well. But I,
+
+00:26:19.760 --> 00:26:21.040
+for a number of reasons,
+
+00:26:21.040 --> 00:26:23.440
+I don't like that. I really like the idea to
+
+00:26:28.434 --> 00:26:30.620
+[Speaker 2]: why- The current strategy is that It has to
+
+00:26:30.620 --> 00:26:33.580
+be Emacs because the configurability is 1 of
+
+00:26:33.580 --> 00:26:35.140
+the strong points anyway.
+
+00:26:23.440 --> 00:26:35.820
+[Speaker 1]: have it inside Emacs. The reason That's true.
+
+00:26:35.820 --> 00:26:37.620
+[Speaker 2]: You cannot make a separate application.
+
+00:26:37.840 --> 00:26:38.080
+No,
+
+00:26:38.080 --> 00:26:39.800
+[Speaker 1]: that's true. I was going to say that.
+
+00:26:39.800 --> 00:26:41.500
+The thing is you use the flexibility.
+
+00:26:41.680 --> 00:26:43.220
+Plus, you also use the,
+
+00:26:43.440 --> 00:26:46.080
+I don't know if that's the right word,
+
+00:26:46.080 --> 00:26:48.760
+but you use there's something about the free
+
+00:26:48.760 --> 00:26:52.600
+ideology of Emacs that is what attracted me
+
+00:26:52.600 --> 00:26:56.260
+to it in the first place when I was younger
+
+00:26:56.460 --> 00:27:00.290
+and that I find even more important now.
+
+00:27:00.765 --> 00:27:03.520
+So what they say the community aspect,
+
+00:27:06.220 --> 00:27:08.800
+the reason, the main reason why Python is so
+
+00:27:08.800 --> 00:27:13.100
+big today, really. So yeah.
+
+00:27:15.060 --> 00:27:17.860
+[Speaker 2]: But in terms of going out of Emacs,
+
+00:27:17.860 --> 00:27:21.300
+it's org syntax that is supposed to be like
+
+00:27:21.820 --> 00:27:23.260
+breaking out of Emacs.
+
+00:27:24.960 --> 00:27:28.860
+So like there's a plan to lay out the actual
+
+00:27:28.860 --> 00:27:31.420
+standard document so that you can register
+
+00:27:31.440 --> 00:27:32.540
+the format officially.
+
+00:27:23.860 --> 00:27:34.760
+[Speaker 1]: Yeah. Yeah, I think I've heard that too.
+
+00:27:34.760 --> 00:27:36.560
+I've not followed up on it much.
+
+00:27:36.880 --> 00:27:39.320
+I don't know what the,
+
+00:27:39.400 --> 00:27:41.260
+I mean, that probably would,
+
+00:27:41.480 --> 00:27:43.040
+it would strength, very likely,
+
+00:27:43.040 --> 00:27:45.100
+if you do that, it would at least for a short
+
+00:27:45.100 --> 00:27:47.660
+time, strengthen org mode and weaken emacs.
+
+00:27:49.420 --> 00:27:50.880
+I don't know what other examples,
+
+00:27:51.580 --> 00:27:54.660
+if there are other examples of applications
+
+00:27:55.120 --> 00:27:57.840
+pulled out of IDEs like that.
+
+00:27:57.840 --> 00:27:59.480
+I'm not aware of any others.
+
+00:28:00.300 --> 00:28:02.680
+[Speaker 2]: Actually, people are trying to make
+
+00:28:02.680 --> 00:28:04.920
+three-seater drama. People are trying to make
+
+00:28:04.920 --> 00:28:06.240
+like some external parsers,
+
+00:28:06.460 --> 00:28:10.320
+a lot of them. And a lot of stuff is done on
+
+00:28:10.320 --> 00:28:12.940
+mobile part. I can draw it to iOS,
+
+00:28:13.440 --> 00:28:17.780
+especially recently. So things that are Emacs
+
+00:28:17.780 --> 00:28:19.780
+independent are demanded.
+
+00:28:20.660 --> 00:28:23.040
+[Speaker 1]: Okay, yeah. I have no doubt that there is a
+
+00:28:25.440 --> 00:28:26.620
+[Speaker 2]: Especially in the environment,
+
+00:28:27.040 --> 00:28:28.040
+like every time.
+
+00:28:23.040 --> 00:28:30.680
+[Speaker 1]: demand. Yeah. I mean, I didn't get into that
+
+00:28:30.680 --> 00:28:35.020
+very much. I have some of my students have 0
+
+00:28:35.020 --> 00:28:36.900
+affinity with computers.
+
+00:28:38.240 --> 00:28:39.900
+They really don't know their way around their
+
+00:28:39.900 --> 00:28:44.320
+computers at all. And so for them,
+
+00:28:46.860 --> 00:28:51.440
+It is quite important to learn how to find
+
+00:28:51.440 --> 00:28:56.520
+your way around Emacs because it's like a
+
+00:28:56.520 --> 00:28:57.820
+little operating system,
+
+00:28:57.920 --> 00:29:00.300
+but it's not. It's an operating system
+
+00:29:00.300 --> 00:29:03.960
+without much of the obscurity.
+
+00:29:05.080 --> 00:29:07.960
+And the alternative to that would be to
+
+00:29:07.960 --> 00:29:10.520
+simply let them work only on the command
+
+00:29:10.520 --> 00:29:12.480
+line, which is another possibility.
+
+00:29:13.480 --> 00:29:16.160
+But, you know, there of course you are
+
+00:29:16.160 --> 00:29:20.540
+limited with regard to if you want to swap
+
+00:29:20.540 --> 00:29:23.500
+languages. So for example,
+
+00:29:23.940 --> 00:29:26.000
+quite often I find myself in the situation I
+
+00:29:26.000 --> 00:29:28.780
+teach data science in R and Python and in
+
+00:29:28.780 --> 00:29:31.520
+Emacs org mode I can demonstrate both of
+
+00:29:31.520 --> 00:29:35.100
+these side by side in the same file.
+
+00:29:35.280 --> 00:29:38.700
+And that's a great advantage.
+
+00:29:39.800 --> 00:29:42.540
+Not to overburden the students when they are
+
+00:29:43.060 --> 00:29:45.100
+at the beginning with things that you don't
+
+00:29:45.100 --> 00:29:47.620
+want them to necessarily learn about.
+
+00:29:48.480 --> 00:29:51.000
+And plus the thing what I like as a graduate
+
+00:29:51.000 --> 00:29:54.440
+student when I stepped onto Emacs was that it
+
+00:29:54.440 --> 00:30:00.140
+was infinite possibilities to lose myself in
+
+00:30:00.140 --> 00:30:03.060
+Emacs and you know go on and learn more stuff
+
+00:30:03.060 --> 00:30:06.680
+about it. But it's such a long time ago that
+
+00:30:07.300 --> 00:30:10.360
+I barely dare to mention it anymore.
+
+00:30:11.600 --> 00:30:12.880
+[Speaker 2]: For command line, actually,
+
+00:30:12.880 --> 00:30:17.080
+it's since the Jupyter notebooks and that
+
+00:30:17.080 --> 00:30:19.400
+Google thing they are running.
+
+00:30:20.820 --> 00:30:23.820
+It's getting so popular that it's clear that
+
+00:30:23.820 --> 00:30:26.760
+command line is just losing in popularity in
+
+00:30:28.580 --> 00:30:31.920
+[Speaker 1]: well, yes and no. I mean,
+
+00:30:26.760 --> 00:30:33.360
+[Speaker 2]: this. Yeah, of course,
+
+00:30:36.100 --> 00:30:38.400
+Not the usage. People are still using it,
+
+00:30:38.400 --> 00:30:38.900
+obviously.
+
+00:30:39.520 --> 00:30:41.020
+[Speaker 1]: I mean, in Google Colab,
+
+00:30:41.200 --> 00:30:43.620
+only the paid version allows you to go to the
+
+00:30:43.620 --> 00:30:45.460
+terminal and use the command line.
+
+00:30:46.620 --> 00:30:48.580
+But of course, the traction,
+
+00:30:48.580 --> 00:30:50.140
+and I think that's kind of interesting,
+
+00:30:50.660 --> 00:30:54.680
+1 of the reasons why IPython or any of the
+
+00:30:54.680 --> 00:30:56.960
+Jupyter notebooks are so cool is because you
+
+00:30:56.960 --> 00:30:59.940
+can use a lot of shell commands from the
+
+00:31:00.240 --> 00:31:05.080
+IPython shell. There's a whole bunch of magic
+
+00:31:05.080 --> 00:31:07.000
+commands which are quite powerful.
+
+00:31:07.040 --> 00:31:10.020
+I mean the the 1 that comes to mind is time.
+
+00:31:10.680 --> 00:31:12.940
+The time command for example you know gives
+
+00:31:12.940 --> 00:31:15.720
+you a really nice performance quick
+
+00:31:15.720 --> 00:31:17.660
+performance check. There's a bunch of
+
+00:31:17.660 --> 00:31:19.780
+different, I think probably close to a
+
+00:31:19.780 --> 00:31:22.340
+hundred magic commands that you can use in
+
+00:31:22.340 --> 00:31:25.600
+Jupyter. But I don't know JupyterLab too
+
+00:31:25.600 --> 00:31:28.840
+well, but I noticed that the companies that
+
+00:31:28.840 --> 00:31:31.080
+do online training, And they are usually the
+
+00:31:31.080 --> 00:31:34.920
+ones that are closest to what beginners want,
+
+00:31:34.920 --> 00:31:36.100
+especially in business.
+
+00:31:36.280 --> 00:31:38.220
+And what those companies do is they,
+
+00:31:38.560 --> 00:31:41.720
+you know, they take, they take JupyterLab and
+
+00:31:41.720 --> 00:31:43.740
+turn it into a presentation of their own.
+
+00:31:43.740 --> 00:31:45.320
+Another 1 is Notable, notable.io.
+
+00:31:46.840 --> 00:31:49.900
+That's another 1. They took JupyterLab and
+
+00:31:49.900 --> 00:31:51.320
+turned it into something commercial.
+
+00:31:51.340 --> 00:31:52.920
+It's boosted up a little bit.
+
+00:31:55.840 --> 00:32:00.480
+And so the shell inside the JupyterLab has
+
+00:32:00.480 --> 00:32:03.120
+some of the most more important shell
+
+00:32:03.120 --> 00:32:05.440
+properties. And so people still use the
+
+00:32:05.440 --> 00:32:07.080
+command line without knowing that they use
+
+00:32:07.080 --> 00:32:13.100
+the command line. But I also like doing,
+
+00:32:13.680 --> 00:32:15.300
+how do I use org-roam?
+
+00:32:19.360 --> 00:32:22.020
+Well, I use it, I do not have not used it
+
+00:32:22.020 --> 00:32:23.000
+with the students yet,
+
+00:32:23.000 --> 00:32:25.020
+only the best students have sort of seen me
+
+00:32:25.020 --> 00:32:29.780
+use it and copied it. But I use it probably
+
+00:32:29.780 --> 00:32:32.000
+in a very naive, trivial way.
+
+00:32:32.000 --> 00:32:33.620
+I can't say that I am,
+
+00:32:34.300 --> 00:32:36.960
+that I have a very sophisticated use.
+
+00:32:37.200 --> 00:32:39.640
+I basically, I like the fact that,
+
+00:32:39.640 --> 00:32:43.100
+I mean, it's built on the original concept of
+
+00:32:43.100 --> 00:32:44.540
+the, with the German word,
+
+00:32:44.540 --> 00:32:48.280
+Zettelkasten, right? Which is that you do not
+
+00:32:48.280 --> 00:32:50.940
+have to think about a taxonomy because as you
+
+00:32:50.940 --> 00:32:53.800
+move along, your taxonomy changes all the
+
+00:32:53.800 --> 00:32:55.580
+time. You know, what you think is important
+
+00:32:55.580 --> 00:32:57.320
+at the beginning, your root node,
+
+00:32:57.440 --> 00:32:58.940
+as you go along, you realize,
+
+00:32:58.940 --> 00:33:00.680
+oh, that's not the root node at all.
+
+00:33:00.680 --> 00:33:02.640
+There's a higher level and a higher level.
+
+00:33:02.640 --> 00:33:04.740
+And some of the lower levels are at the lower
+
+00:33:04.740 --> 00:33:06.300
+level, actually the higher level.
+
+00:33:06.320 --> 00:33:10.460
+So you're beginning to create hierarchies
+
+00:33:10.760 --> 00:33:14.340
+that are out of date as soon as you create
+
+00:33:14.340 --> 00:33:16.360
+the hierarchy. So what is the idea of the
+
+00:33:16.360 --> 00:33:18.480
+tittle custom is that anything that comes to
+
+00:33:18.480 --> 00:33:21.100
+your mind you can throw in the custom the box
+
+00:33:21.160 --> 00:33:26.580
+it literally means Box of notes and That's
+
+00:33:26.580 --> 00:33:27.740
+what I appreciate about it.
+
+00:33:27.740 --> 00:33:32.920
+So I create a I create a note pretty much for
+
+00:33:32.920 --> 00:33:35.780
+anything I do, but I've only used it for
+
+00:33:35.860 --> 00:33:38.160
+about a year and a half or so,
+
+00:33:38.220 --> 00:33:39.740
+or grown, maybe a year.
+
+00:33:40.680 --> 00:33:43.700
+So I can see that I'm coming up against the
+
+00:33:43.700 --> 00:33:46.980
+Zettelkasten or note box problems,
+
+00:33:47.120 --> 00:33:50.860
+which is that I've got so many notes now that
+
+00:33:50.860 --> 00:33:52.960
+unless I have clever aliases,
+
+00:33:54.180 --> 00:33:56.680
+there is a chance that I might forget that I
+
+00:33:58.820 --> 00:34:00.400
+[Speaker 2]: That's why you need meta notes.
+
+00:33:56.680 --> 00:34:01.600
+[Speaker 1]: have a note. So I need a- Yes,
+
+00:34:02.780 --> 00:34:04.920
+[Speaker 2]: In other words, a summarization is important,
+
+00:34:04.940 --> 00:34:06.800
+no matter what system you use.
+
+00:34:01.740 --> 00:34:09.739
+[Speaker 1]: yes. But what I'm trying to say is that's a
+
+00:34:09.739 --> 00:34:11.260
+different approach than hierarchies,
+
+00:34:11.480 --> 00:34:13.620
+right? It's the same, it's the same,
+
+00:34:13.620 --> 00:34:15.960
+it's the same principle as a relational
+
+00:34:16.080 --> 00:34:18.719
+database versus a hierarchical database.
+
+00:34:19.120 --> 00:34:23.360
+Same thing. So, yeah, and I've not used that.
+
+00:34:23.360 --> 00:34:25.400
+I've not really used, actually I have cut
+
+00:34:25.400 --> 00:34:27.020
+meta notes, of course I do.
+
+00:34:27.100 --> 00:34:29.000
+So notes that point to other notes.
+
+00:34:29.487 --> 00:34:34.924
+Yes, of course. I use those.
+
+00:34:35.412 --> 00:34:38.800
+I have not taught that part to the students
+
+00:34:38.880 --> 00:34:42.860
+because I do project work with the students,
+
+00:34:45.040 --> 00:34:46.320
+but there's only so much time.
+
+00:34:46.320 --> 00:34:48.219
+I'm already, I mean, already,
+
+00:34:48.340 --> 00:34:51.000
+I don't think there's any class that where I
+
+00:34:51.000 --> 00:34:55.860
+am able to use more than 30% of my material.
+
+00:34:55.880 --> 00:34:57.620
+And the reason is that when the students come
+
+00:34:57.620 --> 00:34:59.220
+to class, which is I pointed out in the
+
+00:34:59.220 --> 00:35:01.100
+video, they know so little.
+
+00:35:01.840 --> 00:35:03.720
+And most of the students,
+
+00:35:03.720 --> 00:35:04.960
+at least in liberal arts,
+
+00:35:04.960 --> 00:35:10.280
+spend just too little time outside of class,
+
+00:35:10.760 --> 00:35:11.600
+getting there, you know,
+
+00:35:11.600 --> 00:35:13.040
+drilling down into the,
+
+00:35:13.040 --> 00:35:14.640
+into the, into the infrastructure,
+
+00:35:14.860 --> 00:35:17.060
+into the work. Only, only the best students
+
+00:35:17.060 --> 00:35:19.320
+do that. The ones that really catch fire.
+
+00:35:20.080 --> 00:35:22.280
+[Speaker 2]: Don't you have something like a course
+
+00:35:22.280 --> 00:35:23.760
+project at the end?
+
+00:35:24.140 --> 00:35:25.760
+[Speaker 1]: Yes, I have course, not at the end.
+
+00:35:25.760 --> 00:35:27.720
+I use Scrum. Maybe I shouldn't,
+
+00:35:27.720 --> 00:35:29.640
+but I've used Scrum for many years.
+
+00:35:30.040 --> 00:35:32.600
+So I have course projects that start at the
+
+00:35:32.600 --> 00:35:35.280
+beginning and they do sprint reviews every 3
+
+00:35:35.280 --> 00:35:40.640
+or 4 weeks. So term end projects I find
+
+00:35:40.640 --> 00:35:43.080
+completely useless because the students do
+
+00:35:43.080 --> 00:35:45.060
+the work at the very end of the term.
+
+00:35:46.220 --> 00:35:49.600
+[Speaker 2]: no, by determined I mean they don't start at
+
+00:35:49.600 --> 00:35:51.880
+the end, they just report at the end.
+
+00:35:45.060 --> 00:35:52.960
+[Speaker 1]: And so I... Oh I use the IMRAD,
+
+00:35:52.960 --> 00:35:54.300
+I use the IMRAD method.
+
+00:35:54.340 --> 00:35:58.160
+So I use IMRAD, basically IMRAD plus,
+
+00:35:58.700 --> 00:36:00.300
+plus Scrum, right? So,
+
+00:36:00.300 --> 00:36:02.220
+So the first sprint review is introductory,
+
+00:36:02.500 --> 00:36:03.480
+the research proposal,
+
+00:36:03.540 --> 00:36:05.040
+the second 1 is about methodology,
+
+00:36:05.060 --> 00:36:06.360
+the third 1 about results,
+
+00:36:06.360 --> 00:36:08.040
+and the last 1 is their final presentation.
+
+00:36:09.000 --> 00:36:11.100
+And so that's the way I manage the projects,
+
+00:36:11.160 --> 00:36:16.040
+but that's about as much as I can do with
+
+00:36:16.040 --> 00:36:17.640
+them. It's a good idea.
+
+00:36:17.640 --> 00:36:19.780
+I hadn't even thought about using Org-ROM
+
+00:36:19.900 --> 00:36:22.760
+with them, but to teach them that might be a
+
+00:36:22.760 --> 00:36:24.180
+good idea, actually.
+
+00:36:25.360 --> 00:36:27.220
+[Speaker 2]: Well, for Org-ROM, actually,
+
+00:36:27.400 --> 00:36:32.360
+what I found useful during my graduate is for
+
+00:36:32.360 --> 00:36:34.740
+literature review. Yes.
+
+00:36:34.960 --> 00:36:37.360
+The other part of our program that is not
+
+00:36:37.360 --> 00:36:40.580
+about your like noting down your thoughts is
+
+00:36:40.580 --> 00:36:42.900
+about writing about literature notes.
+
+00:36:43.780 --> 00:36:45.480
+[Speaker 1]: Yeah, that's a good idea actually.
+
+00:36:45.480 --> 00:36:46.320
+And of course, I mean,
+
+00:36:46.320 --> 00:36:48.180
+there's more stuff that they should learn,
+
+00:36:48.180 --> 00:36:50.140
+you know, like another 1,
+
+00:36:50.140 --> 00:36:51.780
+since you mentioned literature,
+
+00:36:52.420 --> 00:36:54.640
+you know, latex and Bibtech is another
+
+00:36:55.760 --> 00:36:57.840
+obvious extension of that.
+
+00:36:58.780 --> 00:37:01.120
+But that is actually a good idea because the
+
+00:37:01.120 --> 00:37:03.080
+literature is what they have the hardest time
+
+00:37:04.640 --> 00:37:06.980
+[Speaker 2]: Yeah, like when you need to read like 50
+
+00:37:06.980 --> 00:37:07.480
+papers.
+
+00:37:03.080 --> 00:37:12.480
+[Speaker 1]: with. Last term, since you mentioned that,
+
+00:37:12.480 --> 00:37:16.220
+I had a really nice experience because 1 of
+
+00:37:16.220 --> 00:37:18.300
+our librarians, our digital librarian,
+
+00:37:18.420 --> 00:37:19.920
+came along and talked to the students,
+
+00:37:19.920 --> 00:37:21.580
+and he taught me about a tool called
+
+00:37:21.580 --> 00:37:23.540
+litmap.com, which is basically,
+
+00:37:24.140 --> 00:37:25.420
+I don't know how it's implemented,
+
+00:37:25.460 --> 00:37:27.180
+but it's basically a graph,
+
+00:37:28.140 --> 00:37:31.620
+a graph representation of papers organized by
+
+00:37:31.620 --> 00:37:35.580
+citation. It's very, very cool.
+
+00:37:35.900 --> 00:37:38.480
+And the students who used to only find,
+
+00:37:38.480 --> 00:37:41.080
+I don't know, 1 paper and otherwise,
+
+00:37:41.180 --> 00:37:44.880
+of course, 15 YouTube videos and 100 blogs,
+
+00:37:45.380 --> 00:37:49.360
+suddenly started finding and reading
+
+00:37:49.540 --> 00:37:52.120
+scientific papers. It was only because of
+
+00:37:52.120 --> 00:37:54.900
+this presentation. So you should take the,
+
+00:37:55.640 --> 00:37:57.580
+I think, I hope that is the right,
+
+00:37:58.320 --> 00:37:59.560
+that's the right mode,
+
+00:38:00.280 --> 00:38:02.380
+litmaps. Okay, it's not litmap,
+
+00:38:02.380 --> 00:38:05.640
+it's called Litmaps. I'm gonna give you an
+
+00:38:05.640 --> 00:38:09.000
+example. I don't know if I can share this,
+
+00:38:09.000 --> 00:38:10.240
+if you can look at that.
+
+00:38:10.240 --> 00:38:13.640
+But basically you create a,
+
+00:38:13.860 --> 00:38:16.580
+1 can use 1 of your papers as a seed,
+
+00:38:16.800 --> 00:38:18.840
+and then it will create a graph,
+
+00:38:19.660 --> 00:38:21.760
+graph representation of it for you.
+
+00:38:21.960 --> 00:38:25.220
+And this is a powerful tool in itself.
+
+00:38:25.400 --> 00:38:27.600
+But what I'm saying is that the students
+
+00:38:27.620 --> 00:38:30.900
+suddenly, their use of literature and that
+
+00:38:30.900 --> 00:38:32.560
+citation goes to the roof.
+
+00:38:33.080 --> 00:38:35.680
+And I've been waiting for that for probably
+
+00:38:36.140 --> 00:38:38.300
+15 years since I've started teaching.
+
+00:38:38.760 --> 00:38:43.420
+It's crazy. That's really cool.
+
+00:38:46.500 --> 00:38:47.720
+[Speaker 2]: Here is the same tool,
+
+00:38:47.720 --> 00:38:49.400
+it's called connected papers.
+
+00:38:49.440 --> 00:38:53.540
+It's based on the open source citation data.
+
+00:38:54.140 --> 00:38:56.340
+[Speaker 1]: Yeah, I know that as well,
+
+00:38:56.500 --> 00:38:57.180
+I think.
+
+00:39:00.060 --> 00:39:01.560
+[Speaker 2]: It's actually very useful when you just start
+
+00:39:01.560 --> 00:39:03.960
+learning the topic. It's like you find 1
+
+00:39:03.960 --> 00:39:05.800
+paper, then you look into the connections.
+
+00:39:05.800 --> 00:39:08.260
+You can quickly narrow down to the most
+
+00:39:08.260 --> 00:39:09.500
+cited, the core papers.
+
+00:39:10.840 --> 00:39:12.500
+[Speaker 1]: Of course. And that is exactly their
+
+00:39:12.500 --> 00:39:14.800
+situation, you know, and they're always at
+
+00:39:14.800 --> 00:39:16.740
+the beginning. As you go on,
+
+00:39:17.280 --> 00:39:18.680
+you develop different ways,
+
+00:39:18.680 --> 00:39:20.140
+but for these complete beginners,
+
+00:39:20.200 --> 00:39:22.680
+that's a good idea. Thank you so much for
+
+00:39:22.680 --> 00:39:30.520
+that. Okay, guys, anything else?
+
+00:39:31.240 --> 00:39:32.440
+I've enjoyed the conversation,
+
+00:39:32.920 --> 00:39:33.960
+so you should definitely,
+
+00:39:36.000 --> 00:39:37.940
+I'm going to take some of these things away.
+
+00:39:38.800 --> 00:39:42.340
+Thank you so much for that.
+
+00:39:42.340 --> 00:39:45.740
+Have you done, Yanta, have you done org mode
+
+00:39:46.300 --> 00:39:48.200
+documentations yourself on WOC?
+
+00:39:48.900 --> 00:39:52.120
+Or do you have a sort of a favorite 1?
+
+00:39:52.120 --> 00:39:53.600
+I mean, I often on walk,
+
+00:39:53.600 --> 00:39:56.740
+I often use the documentation for code
+
+00:39:56.740 --> 00:39:59.620
+blocks. I used to when I started doing that
+
+00:40:00.760 --> 00:40:02.800
+[Speaker 2]: Yeah, because it's only on work.
+
+00:40:02.800 --> 00:40:04.260
+It's not part of the manual.
+
+00:39:59.620 --> 00:40:05.280
+[Speaker 1]: for the first time. Yeah,
+
+00:40:05.280 --> 00:40:07.440
+yeah. And so I've used that a lot.
+
+00:40:07.780 --> 00:40:09.560
+[Speaker 2]: Have I done? Not really,
+
+00:40:09.720 --> 00:40:11.460
+mostly fixing the errors.
+
+00:40:12.260 --> 00:40:12.760
+Okay.
+
+00:40:14.280 --> 00:40:16.100
+[Speaker 1]: Yeah, I think that's a really good idea.
+
+00:40:16.440 --> 00:40:19.780
+All right. Well, thank you very much.
+
+00:40:19.960 --> 00:40:22.360
+And it's great to be at this conference.
+
+00:40:22.360 --> 00:40:24.440
+I think I'm going to get on.
+
+00:40:27.660 --> 00:40:29.240
+[Speaker 2]: Thanks for answering all the questions.
+
+00:40:29.840 --> 00:40:32.560
+And for the talk, It was quite interesting to
+
+00:40:32.560 --> 00:40:35.660
+see our modules in actual teaching.
+
+00:40:36.200 --> 00:40:38.600
+[Speaker 1]: Yes, thank you. And I got to thank Daniel
+
+00:40:38.600 --> 00:40:40.840
+German from Canada, the 1 of,
+
+00:40:40.840 --> 00:40:43.660
+I had him on 1 of the slides because he,
+
+00:40:43.660 --> 00:40:45.380
+he inspired me to do that.
+
+00:40:45.380 --> 00:40:47.540
+And, and I wouldn't be at the conference if I
+
+00:40:47.540 --> 00:40:49.480
+hadn't contacted him and said oh here's my
+
+00:40:49.480 --> 00:40:50.980
+paper and he said oh you should come to the
+
+00:40:50.980 --> 00:40:52.680
+conference and so that's why I came to the
+
+00:40:52.680 --> 00:40:58.480
+conference. Thank you very much and as they
+
+00:40:58.480 --> 00:41:04.100
+say keep in touch. You're welcome.
+
+00:41:04.100 --> 00:41:05.060
+Okay bye-bye. You're welcome.
+
+00:41:05.060 --> 00:41:15.820
+Okay, bye-bye. Take a copy of the chat before
+
+00:41:15.820 --> 00:41:22.360
+you go, if you can. Happy weekend to just bye
+
+00:41:22.360 --> 00:41:22.860
+bye.
+
+00:41:34.920 --> 00:41:36.840
+[Speaker 0]: You are currently the only person in this
+
+00:41:36.840 --> 00:41:37.340
+conference.
+
+00:42:00.060 --> 00:42:00.560
+[Speaker 1]: You
diff --git a/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt
new file mode 100644
index 00000000..6674a23c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt
@@ -0,0 +1,53 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:54.159
+Introduction
+
+00:00:54.160 --> 00:02:08.039
+My interest in this topic
+
+00:02:08.040 --> 00:03:47.639
+What is data science?
+
+00:03:47.640 --> 00:04:52.839
+Computer science is a craft
+
+00:04:52.840 --> 00:05:36.559
+The problem
+
+00:05:36.560 --> 00:06:24.119
+The solution: Emacs + Org-mode
+
+00:06:24.120 --> 00:07:30.359
+Emacs configuration file
+
+00:07:30.360 --> 00:08:22.039
+Story + code = source + documentation
+
+00:08:22.040 --> 00:09:59.879
+What is literate programming?
+
+00:09:59.880 --> 00:11:18.959
+Emacs as a literate programming tool
+
+00:11:18.960 --> 00:12:11.279
+Case study: basic setup
+
+00:12:11.280 --> 00:12:45.799
+Emacs + Org-mode notebooks
+
+00:12:45.800 --> 00:13:40.839
+Onboarding: simplified Emacs tutorial
+
+00:13:40.840 --> 00:14:48.719
+Instruction + interaction
+
+00:14:48.720 --> 00:16:15.279
+Assignments + projects
+
+00:16:15.280 --> 00:18:19.799
+Overall results positive
+
+00:18:19.800 --> 00:19:27.280
+Conclusion & outlook
diff --git a/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt
new file mode 100644
index 00000000..560be0c6
--- /dev/null
+++ b/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt
@@ -0,0 +1,1193 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.519
+Welcome to my talk, which is pre-recorded,
+
+00:00:04.520 --> 00:00:06.959
+so please don't blame me if I come across
+
+00:00:06.960 --> 00:00:08.599
+as wooden and humorless.
+
+00:00:08.600 --> 00:00:11.319
+It's hard to work up any emotion
+
+00:00:11.320 --> 00:00:13.879
+when looking at a mechanical eye.
+
+00:00:13.880 --> 00:00:15.039
+Of course, I am German,
+
+00:00:15.040 --> 00:00:18.639
+so I am pretty wooden and humorless to begin with.
+
+00:00:18.640 --> 00:00:20.439
+What else do you need to know about me?
+
+00:00:20.440 --> 00:00:23.319
+Not much, I suppose, except that I have been
+
+00:00:23.320 --> 00:00:25.199
+an Emacs user on and off
+
+00:00:25.200 --> 00:00:26.919
+since my days as a graduate student
+
+00:00:26.920 --> 00:00:30.079
+in theoretical physics in the 1990s.
+
+00:00:30.080 --> 00:00:34.679
+I picked Emacs and Org Mode up again
+
+00:00:34.680 --> 00:00:36.239
+for teaching during COVID
+
+00:00:36.240 --> 00:00:38.039
+when I had a lot of time on my hands,
+
+00:00:38.040 --> 00:00:40.359
+and when the teaching and learning needs shifted
+
+00:00:40.360 --> 00:00:44.239
+because of the exclusive online teaching.
+
+00:00:44.240 --> 00:00:48.199
+Now I'm going to take my picture away.
+
+00:00:48.200 --> 00:00:49.559
+You had a good look at me.
+
+00:00:49.560 --> 00:00:54.159
+I think that's just going to be in the way.
+
+NOTE My interest in this topic
+
+00:00:54.160 --> 00:00:57.279
+So my interest in this topic began with
+
+00:00:57.280 --> 00:00:59.279
+an Emacs talk given by Daniel German
+
+00:00:59.280 --> 00:01:04.119
+from the University of Victoria in Canada in 2021.
+
+00:01:04.120 --> 00:01:06.439
+Daniel demonstrated in detail
+
+00:01:06.440 --> 00:01:09.199
+how he uses Emacs and Org Mode
+
+00:01:09.200 --> 00:01:12.119
+to prepare and deliver lectures
+
+00:01:12.120 --> 00:01:14.199
+on different programming languages.
+
+00:01:14.200 --> 00:01:16.319
+This gave me the idea to try the same thing
+
+00:01:16.320 --> 00:01:19.999
+with my students with an important alteration.
+
+00:01:20.000 --> 00:01:23.559
+I wanted to force them to use Emacs and Org Mode
+
+00:01:23.560 --> 00:01:25.959
+just as most computer science instructors
+
+00:01:25.960 --> 00:01:29.079
+force their students to use whatever they are using
+
+00:01:29.080 --> 00:01:32.359
+when they develop their material.
+
+00:01:32.360 --> 00:01:36.839
+I carried my plan out and mandated Emacs and Org Mode
+
+00:01:36.840 --> 00:01:40.359
+as the only programming platform and IDE
+
+00:01:40.360 --> 00:01:43.639
+for three consecutive terms in all my courses,
+
+00:01:43.640 --> 00:01:45.919
+nine courses in total.
+
+00:01:45.920 --> 00:01:47.799
+I will give more details later.
+
+00:01:47.800 --> 00:01:49.919
+I published my results as a case study
+
+00:01:49.920 --> 00:01:52.279
+in September of this year,
+
+00:01:52.280 --> 00:01:53.639
+and it contains the missing bits
+
+00:01:53.640 --> 00:01:56.159
+that I will not talk about today for lack of time,
+
+00:01:56.160 --> 00:01:58.639
+especially regarding the methodology,
+
+00:01:58.640 --> 00:02:00.119
+the assessment, et cetera.
+
+00:02:00.120 --> 00:02:04.999
+Please also use the Q&A to inquire about such details
+
+00:02:05.000 --> 00:02:08.039
+if they interest you.
+
+NOTE What is data science?
+
+00:02:08.040 --> 00:02:12.799
+I probably don't have to explain what computer science is,
+
+00:02:12.800 --> 00:02:16.359
+but not everyone may know what data science does.
+
+00:02:16.360 --> 00:02:18.239
+I teach courses in both disciplines
+
+00:02:18.240 --> 00:02:20.559
+and the boundaries between them are blurred,
+
+00:02:20.560 --> 00:02:22.639
+so much of what I'm saying about data science
+
+00:02:22.640 --> 00:02:24.719
+will also be relevant for computer science.
+
+00:02:24.720 --> 00:02:29.359
+Conceptually, data science is an interdisciplinary affair
+
+00:02:29.360 --> 00:02:31.999
+that intersects with computer science
+
+00:02:32.000 --> 00:02:34.959
+and with whatever it is that the data scientist
+
+00:02:34.960 --> 00:02:39.159
+or his or her clients know very well; their domain.
+
+00:02:39.160 --> 00:02:42.679
+Because of this interdisciplinary character,
+
+00:02:42.680 --> 00:02:45.399
+and because their focus is on the data
+
+00:02:45.400 --> 00:02:48.119
+rather than only on algorithms or mathematics,
+
+00:02:48.120 --> 00:02:52.719
+successful data scientists need to be more broadly educated
+
+00:02:52.720 --> 00:02:56.199
+than specialists in computer science or statistics.
+
+00:02:56.200 --> 00:03:00.519
+In particular, there's a need to master
+
+00:03:00.520 --> 00:03:03.479
+the entire so-called data science pipeline:
+
+00:03:03.480 --> 00:03:06.079
+from data cleaning, which you see
+
+00:03:06.080 --> 00:03:08.879
+on the very left in this slide,
+
+00:03:08.880 --> 00:03:12.119
+over coding, to statistical modeling,
+
+00:03:12.120 --> 00:03:14.719
+and to data storytelling through visualization,
+
+00:03:14.720 --> 00:03:17.159
+which you see on the very right.
+
+00:03:17.160 --> 00:03:19.079
+This is why until recently,
+
+00:03:19.080 --> 00:03:22.119
+data science was a graduate-level education
+
+00:03:22.120 --> 00:03:25.879
+only for software engineers, computer scientists,
+
+00:03:25.880 --> 00:03:31.679
+statisticians, psychologists, biologists, business people,
+
+00:03:31.680 --> 00:03:34.279
+or for whoever took a special fancy
+
+00:03:34.280 --> 00:03:37.719
+to data in their chosen field.
+
+00:03:37.720 --> 00:03:40.039
+Only with a growing interest in machine learning,
+
+00:03:40.040 --> 00:03:41.999
+this has changed.
+
+00:03:42.000 --> 00:03:45.599
+And now we train--or try to train--data scientists
+
+00:03:45.600 --> 00:03:47.639
+in undergraduate programs as well.
+
+NOTE Computer science is a craft
+
+00:03:47.640 --> 00:03:52.399
+Now, what I'm saying here, I think is true
+
+00:03:52.400 --> 00:03:54.199
+for all areas of computing,
+
+00:03:54.200 --> 00:03:56.959
+from software engineering to data science.
+
+00:03:56.960 --> 00:04:00.639
+They are mostly taught and learned like a craft
+
+00:04:00.640 --> 00:04:03.679
+rather than a science, not through research,
+
+00:04:03.680 --> 00:04:04.679
+but through drill.
+
+00:04:04.680 --> 00:04:07.799
+The elements of this drill can be illustrated
+
+00:04:07.800 --> 00:04:09.959
+by learning how to fix cars.
+
+00:04:09.960 --> 00:04:12.759
+They include taking a problem apart
+
+00:04:12.760 --> 00:04:14.119
+with the tools you already know,
+
+00:04:14.120 --> 00:04:18.239
+learn a lot more tools in the process of doing that,
+
+00:04:18.240 --> 00:04:20.639
+then solve many, many problems
+
+00:04:20.640 --> 00:04:22.199
+of increasing difficulty
+
+00:04:22.200 --> 00:04:25.719
+while being or getting more literate, as it were,
+
+00:04:25.720 --> 00:04:27.919
+about the mechanics of computing,
+
+00:04:27.920 --> 00:04:30.759
+including the hardware, the infrastructure,
+
+00:04:30.760 --> 00:04:32.639
+and finally develop a way of thinking
+
+00:04:32.640 --> 00:04:35.519
+that allows the learner to identify patterns
+
+00:04:35.520 --> 00:04:39.719
+to solve new problems better and faster.
+
+00:04:39.720 --> 00:04:42.479
+Unlike learning how to fix cars,
+
+00:04:42.480 --> 00:04:44.439
+all of the objects of our interest--
+
+00:04:44.440 --> 00:04:48.719
+both hardware and software--are evolving rapidly.
+
+00:04:48.720 --> 00:04:51.519
+In this field, radical innovation is the rule,
+
+00:04:51.520 --> 00:04:52.839
+not the exception.
+
+NOTE The problem
+
+00:04:52.840 --> 00:04:58.679
+The problem that I identified is that students,
+
+00:04:58.680 --> 00:05:00.799
+especially undergraduate students
+
+00:05:00.800 --> 00:05:02.399
+in computer and data science,
+
+00:05:02.400 --> 00:05:06.439
+often do no longer understand the infrastructure.
+
+00:05:06.440 --> 00:05:08.919
+Here are a few examples of the problems
+
+00:05:08.920 --> 00:05:10.079
+that the students seem to have.
+
+00:05:10.080 --> 00:05:13.599
+They do not understand computer architecture,
+
+00:05:13.600 --> 00:05:14.599
+except in theory.
+
+00:05:14.600 --> 00:05:18.519
+They cannot navigate their way around their own computers.
+
+00:05:18.520 --> 00:05:22.319
+They don't understand the value or the issues of networks.
+
+00:05:22.320 --> 00:05:25.079
+They are often more interested in convenience
+
+00:05:25.080 --> 00:05:28.279
+than in customization of the environment.
+
+00:05:28.280 --> 00:05:31.839
+As a result, the machines which we're meant to control
+
+00:05:31.840 --> 00:05:35.079
+have all the power--though passively,
+
+00:05:35.080 --> 00:05:36.559
+of course, for now anyway.
+
+NOTE The solution: Emacs + Org-mode
+
+00:05:36.560 --> 00:05:43.679
+Enter Emacs, the self-extensible operating system
+
+00:05:43.680 --> 00:05:45.999
+disguised as a text editor.
+
+00:05:46.000 --> 00:05:50.999
+You're at EmacsConf, so of course I don't have to tell you
+
+00:05:51.000 --> 00:05:52.199
+what Emacs can do.
+
+00:05:52.200 --> 00:05:54.319
+Here's a rundown on the right-hand side
+
+00:05:54.320 --> 00:05:56.759
+of some of its most important properties,
+
+00:05:56.760 --> 00:05:58.959
+and an Org Mode file excerpt
+
+00:05:58.960 --> 00:06:00.519
+from one of my classes on the left.
+
+00:06:00.520 --> 00:06:05.239
+What you may not know is how to onboard students who have,
+
+00:06:05.240 --> 00:06:07.439
+at the start, no interest whatsoever
+
+00:06:07.440 --> 00:06:08.919
+in leaving their comfort zone,
+
+00:06:08.920 --> 00:06:12.399
+which is defined by a lifetime of Windows,
+
+00:06:12.400 --> 00:06:16.319
+pre-configured graphical interfaces, and software bloat.
+
+00:06:16.320 --> 00:06:19.679
+In fact, when I started this, I wasn't very hopeful,
+
+00:06:19.680 --> 00:06:22.399
+but the results have made me even more optimistic
+
+00:06:22.400 --> 00:06:24.119
+than I already am by nature.
+
+NOTE Emacs configuration file
+
+00:06:24.120 --> 00:06:28.839
+So to rein in your expectations,
+
+00:06:28.840 --> 00:06:31.839
+you cannot do entirely without
+
+00:06:31.840 --> 00:06:33.799
+configuring the student's experience.
+
+00:06:33.800 --> 00:06:35.279
+An important part of this
+
+00:06:35.280 --> 00:06:37.999
+is the initial Emacs configuration shown here.
+
+00:06:38.000 --> 00:06:40.639
+The minimal configuration file,
+
+00:06:40.640 --> 00:06:42.199
+which you can see on the right-hand side,
+
+00:06:42.200 --> 00:06:46.679
+allows the students to run code in C and C++, R, SQL,
+
+00:06:46.680 --> 00:06:48.599
+SQLite, Python, and Bash.
+
+00:06:48.600 --> 00:06:52.559
+It will allow them to update Emacs packages
+
+00:06:52.560 --> 00:06:55.039
+from the stable Melpa repository,
+
+00:06:55.040 --> 00:06:58.599
+and it will allow them to create code blocks easily
+
+00:06:58.600 --> 00:07:01.919
+using skeleton commands for code blocks,
+
+00:07:01.920 --> 00:07:06.279
+and to auto-load the Emacs Speaks Statistics package,
+
+00:07:06.280 --> 00:07:09.759
+which you particularly need when you run R in Emacs,
+
+00:07:09.760 --> 00:07:14.399
+and lastly, to disable toolbar and graphical menu bars.
+
+00:07:14.400 --> 00:07:18.999
+To do that encourages the exclusive use of the keyboard
+
+00:07:19.000 --> 00:07:23.199
+to control Emacs, and to stop the students
+
+00:07:23.200 --> 00:07:25.839
+from flicking all the time to the mouse;
+
+00:07:25.840 --> 00:07:30.359
+seems to be an essential part of getting used to Emacs.
+
+NOTE Story + code = source + documentation
+
+00:07:30.360 --> 00:07:38.839
+Now Org Mode was included in Emacs in 2006 as a major mode,
+
+00:07:38.840 --> 00:07:41.959
+and as you know, it's a structured plain text format
+
+00:07:41.960 --> 00:07:45.039
+with notebook live code execution.
+
+00:07:45.040 --> 00:07:47.839
+It's an ideal platform for literate programming,
+
+00:07:47.840 --> 00:07:52.359
+which is a term for programming that intermingles code,
+
+00:07:52.360 --> 00:07:55.839
+documentation, and output within a single document,
+
+00:07:55.840 --> 00:07:59.519
+and that can, as you can see here from an org file,
+
+00:07:59.520 --> 00:08:02.559
+either be tangled into source code
+
+00:08:02.560 --> 00:08:06.999
+or woven into a documentation file, which could be PDF,
+
+00:08:07.000 --> 00:08:11.039
+could be Markdown, could be OpenOffice,
+
+00:08:11.040 --> 00:08:13.919
+could be a notebook format.
+
+00:08:13.920 --> 00:08:18.479
+This methodology was conceived by Donald Knuth in 1984,
+
+00:08:18.480 --> 00:08:22.039
+and it is therefore even older than Emacs itself.
+
+NOTE What is literate programming?
+
+00:08:22.040 --> 00:08:27.199
+The main purpose of literate programming is not only
+
+00:08:27.200 --> 00:08:31.119
+to make code or documentation or output more manageable,
+
+00:08:31.120 --> 00:08:34.759
+but to allow humans to create a data story with ease
+
+00:08:34.760 --> 00:08:37.199
+from a single source.
+
+00:08:37.200 --> 00:08:40.359
+So what you see on the slide on the left-hand side
+
+00:08:40.360 --> 00:08:45.479
+is the story and code inside a Org Mode file.
+
+00:08:45.480 --> 00:08:49.479
+The file starts with some documentation,
+
+00:08:49.480 --> 00:08:52.519
+then with the white background is the code,
+
+00:08:52.520 --> 00:08:56.239
+and at the bottom you see an output file,
+
+00:08:56.240 --> 00:09:00.159
+which is not shown here on the slide itself.
+
+00:09:00.160 --> 00:09:02.839
+In the middle, you have the source code,
+
+00:09:02.840 --> 00:09:05.759
+which is the result of tangling
+
+00:09:05.760 --> 00:09:10.799
+or of opening a buffer inside org-mode.
+
+00:09:10.800 --> 00:09:16.119
+And on the very right-hand side, you have a PDF--
+
+00:09:16.120 --> 00:09:20.159
+actually this HTML rendering of the very same file
+
+00:09:20.160 --> 00:09:22.599
+that you see on the very left.
+
+00:09:22.600 --> 00:09:26.479
+So the humans look at some of this code,
+
+00:09:26.480 --> 00:09:29.879
+and the machines will look at other parts of the code.
+
+00:09:29.880 --> 00:09:33.359
+I actually did all my programming in a literate way
+
+00:09:33.360 --> 00:09:35.959
+even in the early 1990s, not using org-mode,
+
+00:09:35.960 --> 00:09:36.799
+which didn't exist yet,
+
+00:09:36.800 --> 00:09:40.319
+but using Norman Ramsey's Noweb preprocessor.
+
+00:09:40.320 --> 00:09:43.399
+And I still use it inside org-mode today.
+
+00:09:43.400 --> 00:09:47.439
+This preprocessor, Noweb, allows you to tangle code
+
+00:09:47.440 --> 00:09:50.079
+from within an org-mode file that's a self-standing file,
+
+00:09:50.080 --> 00:09:52.799
+much like org-mode's edit functions,
+
+00:09:52.800 --> 00:09:55.639
+which export code blocks into buffers
+
+00:09:55.640 --> 00:09:59.879
+in whatever language the code block is written.
+
+NOTE Emacs as a literate programming tool
+
+00:09:59.880 --> 00:10:02.719
+In data science, these interactive notebooks
+
+00:10:02.720 --> 00:10:05.999
+in one of the interpreted languages like Julia,
+
+00:10:06.000 --> 00:10:07.839
+Python, or R dominate.
+
+00:10:07.840 --> 00:10:10.239
+The basis technology,
+
+00:10:10.240 --> 00:10:12.759
+is that of Jupyter notebooks, which take their name
+
+00:10:12.760 --> 00:10:14.439
+from Julia, Python, and R.
+
+00:10:14.440 --> 00:10:19.199
+And these notebooks use a spruced-up shell (for example,
+
+00:10:19.200 --> 00:10:23.079
+IPython for Python) with an option to add SQL cells.
+
+00:10:23.080 --> 00:10:28.079
+Org Mode inside Emacs has a large number of advantages--
+
+00:10:28.080 --> 00:10:31.479
+some of them are listed here--over these notebooks.
+
+00:10:31.480 --> 00:10:33.679
+Two of these stand out particularly.
+
+00:10:33.680 --> 00:10:39.439
+Different languages can be mixed, as shown in the image,
+
+00:10:39.440 --> 00:10:43.439
+while in Jupyter notebooks, a notebook is limited to
+
+00:10:43.440 --> 00:10:45.639
+running a kernel in one language only.
+
+00:10:45.640 --> 00:10:48.159
+So the content of the notebook--
+
+00:10:48.160 --> 00:10:50.319
+its document code or output part--
+
+00:10:50.320 --> 00:10:52.879
+can be exported in a variety of formats,
+
+00:10:52.880 --> 00:10:55.479
+which makes it much easier to share with others
+
+00:10:55.480 --> 00:10:58.479
+and to use one's work in different reporting formats;
+
+00:10:58.480 --> 00:11:02.399
+for example, to read it out into a LaTeX publication.
+
+00:11:02.400 --> 00:11:08.319
+Actually, to come back to this,
+
+00:11:08.320 --> 00:11:11.039
+the file does not show different languages.
+
+00:11:11.040 --> 00:11:14.159
+That is something you can see in a paper of mine,
+
+00:11:14.160 --> 00:11:18.959
+in one of the figures.
+
+NOTE Case study: basic setup
+
+00:11:18.960 --> 00:11:22.719
+Now, coming to the case study itself,
+
+00:11:22.720 --> 00:11:25.039
+here are some of the overall results of the case study.
+
+00:11:25.040 --> 00:11:29.039
+Now, the courses ranged from introductory to advanced,
+
+00:11:29.040 --> 00:11:32.039
+as you can see here in the table on the left-hand side.
+
+00:11:32.040 --> 00:11:37.199
+The topics covered different programming applications.
+
+00:11:37.200 --> 00:11:38.679
+The courses were taught
+
+00:11:38.680 --> 00:11:41.039
+over a period of three consecutive terms.
+
+00:11:41.040 --> 00:11:45.839
+There was between 6 and 28 participants per course.
+
+00:11:45.840 --> 00:11:49.239
+I used a few other tools besides Emacs:
+
+00:11:49.240 --> 00:11:51.919
+GitHub as the main repository for all the material,
+
+00:11:51.920 --> 00:11:55.239
+Datacamp for structured online lessons and exercises,
+
+00:11:55.240 --> 00:11:57.359
+Canvas as a learning management system,
+
+00:11:57.360 --> 00:12:00.919
+and Zoom to record the sessions for later use.
+
+00:12:00.920 --> 00:12:03.279
+Now, the material for all these courses
+
+00:12:03.280 --> 00:12:05.399
+is openly available on GitHub,
+
+00:12:05.400 --> 00:12:11.279
+and the address is on the slide at the bottom.
+
+NOTE Emacs + Org-mode notebooks
+
+00:12:11.280 --> 00:12:15.879
+I'm now going to briefly comment on
+
+00:12:15.880 --> 00:12:18.799
+the most important aspects of using Emacs and Org Mode
+
+00:12:18.800 --> 00:12:20.119
+in and outside of class.
+
+00:12:20.120 --> 00:12:24.039
+Essentially, these two--Emacs and Org Mode--
+
+00:12:24.040 --> 00:12:26.239
+were used all the time for almost everything
+
+00:12:26.240 --> 00:12:29.239
+that the students were doing in and outside of class.
+
+00:12:29.240 --> 00:12:32.319
+The only exception were multiple choice tests
+
+00:12:32.320 --> 00:12:34.039
+and online assignments
+
+00:12:34.040 --> 00:12:35.599
+on the Datacamp learning platform
+
+00:12:35.600 --> 00:12:37.199
+in the data science courses.
+
+00:12:37.200 --> 00:12:39.999
+But everything else--code-along lectures, home assignments,
+
+00:12:40.000 --> 00:12:42.439
+student projects, practice in class--
+
+00:12:42.440 --> 00:12:45.799
+was done with these two tools.
+
+NOTE Onboarding: simplified Emacs tutorial
+
+00:12:45.800 --> 00:12:47.999
+To facilitate the onboarding,
+
+00:12:48.000 --> 00:12:50.999
+so to get students used to Emacs in the first place,
+
+00:12:51.000 --> 00:12:53.279
+I developed a simplified Emacs tutorial,
+
+00:12:53.280 --> 00:12:56.519
+which was focused on the basics of literate programming.
+
+00:12:56.520 --> 00:12:59.999
+It included navigation in major modes,
+
+00:13:00.000 --> 00:13:02.839
+managing files and buffers, customizing the interface,
+
+00:13:02.840 --> 00:13:04.039
+and keyboard shortcuts.
+
+00:13:04.040 --> 00:13:06.319
+It was considerably shorter;
+
+00:13:06.320 --> 00:13:12.879
+about a quarter of the size of the standard Emacs tutorial,
+
+00:13:12.880 --> 00:13:14.319
+which contains a lot more stuff.
+
+00:13:14.320 --> 00:13:16.759
+As a result of this onboarding,
+
+00:13:16.760 --> 00:13:18.279
+by the end of the second week,
+
+00:13:18.280 --> 00:13:19.919
+most students were able
+
+00:13:19.920 --> 00:13:22.639
+to use Emacs and Org Mode competently
+
+00:13:22.640 --> 00:13:25.079
+for their assignments in and outside of class,
+
+00:13:25.080 --> 00:13:29.639
+completely independent of their previous exposure
+
+00:13:29.640 --> 00:13:31.199
+to any of these tools.
+
+00:13:31.200 --> 00:13:35.399
+Most of the students, in fact, had never heard of Emacs.
+
+00:13:35.400 --> 00:13:40.839
+All the classes were taught physically in a computer lab.
+
+NOTE Instruction + interaction
+
+00:13:40.840 --> 00:13:42.759
+Emacs with Org Mode
+
+00:13:42.760 --> 00:13:45.479
+and the necessary languages for the class
+
+00:13:45.480 --> 00:13:47.359
+were pre-installed on the computers.
+
+00:13:47.360 --> 00:13:50.199
+The computers ran Windows, unfortunately,
+
+00:13:50.200 --> 00:13:52.759
+like most of the students' personal computers.
+
+00:13:52.760 --> 00:13:57.479
+A typical class involved a lecture delivered by me
+
+00:13:57.480 --> 00:13:59.159
+in Emacs as a code-along.
+
+00:13:59.160 --> 00:14:01.559
+The students would get an Org Mode file
+
+00:14:01.560 --> 00:14:03.399
+with all the code removed.
+
+00:14:03.400 --> 00:14:04.599
+You can see an example here
+
+00:14:04.600 --> 00:14:06.799
+on the slide on the right-hand side.
+
+00:14:06.800 --> 00:14:12.239
+This example is actually only one line of code in blue,
+
+00:14:12.240 --> 00:14:15.039
+visible at the bottom for an award file.
+
+00:14:15.040 --> 00:14:17.919
+Then the students submitted home assignments
+
+00:14:17.920 --> 00:14:21.159
+also as Org Mode files, complete with documentation,
+
+00:14:21.160 --> 00:14:23.479
+code and sample output.
+
+00:14:23.480 --> 00:14:26.999
+Working this way makes the classes highly interactive.
+
+00:14:27.000 --> 00:14:28.879
+So the students are busy coding
+
+00:14:28.880 --> 00:14:31.639
+and they learn to control their environment better
+
+00:14:31.640 --> 00:14:34.919
+all the time.
+
+00:14:34.920 --> 00:14:38.599
+In my classes, the students have to complete
+
+00:14:38.600 --> 00:14:41.359
+an independent, agile research project
+
+00:14:41.360 --> 00:14:44.239
+using an adaptation of Scrum as a methodology.
+
+00:14:44.240 --> 00:14:48.079
+You can find examples of these rather high-octane projects
+
+00:14:48.080 --> 00:14:48.719
+in my paper.
+
+NOTE Assignments + projects
+
+00:14:48.720 --> 00:14:52.679
+Now, using literate programming for the projects
+
+00:14:52.680 --> 00:14:54.399
+provided some unique benefits.
+
+00:14:54.400 --> 00:14:57.959
+By having to continuously interweave documentation,
+
+00:14:57.960 --> 00:15:01.599
+references and output alongside functional code,
+
+00:15:01.600 --> 00:15:04.319
+the students learn to communicate their work
+
+00:15:04.320 --> 00:15:05.599
+throughout the term
+
+00:15:05.600 --> 00:15:07.559
+in various stages of completion,
+
+00:15:07.560 --> 00:15:09.839
+from the research question at the start,
+
+00:15:09.840 --> 00:15:12.879
+over the prototype to the finished product.
+
+00:15:12.880 --> 00:15:14.999
+And here on the right-hand side,
+
+00:15:15.000 --> 00:15:17.479
+you can see one of those assignments
+
+00:15:17.480 --> 00:15:18.839
+that the students received,
+
+00:15:18.840 --> 00:15:24.959
+including some of the metadata for their Org Mode files
+
+00:15:24.960 --> 00:15:26.159
+in the beginning of the course.
+
+00:15:26.160 --> 00:15:32.599
+Here are two graphs that I created early on
+
+00:15:32.600 --> 00:15:34.319
+when I started doing this.
+
+00:15:34.320 --> 00:15:36.439
+They show how the test results of the students
+
+00:15:36.440 --> 00:15:39.639
+in two different courses, actually three courses,
+
+00:15:39.640 --> 00:15:41.719
+changed from before to after
+
+00:15:41.720 --> 00:15:45.919
+introducing literate programming with Emacs and Org Mode.
+
+00:15:45.920 --> 00:15:49.559
+So you see the before and after
+
+00:15:49.560 --> 00:15:53.479
+introducing literate programming in the red curve before
+
+00:15:53.480 --> 00:15:54.919
+and the blue curve afterwards.
+
+00:15:54.920 --> 00:15:58.519
+And the improvement, especially on the right-hand side,
+
+00:15:58.520 --> 00:15:59.719
+is quite significant.
+
+00:15:59.720 --> 00:16:01.999
+It was this performance improvement,
+
+00:16:02.000 --> 00:16:05.119
+apart from the students who were voicing their support,
+
+00:16:05.120 --> 00:16:07.999
+that made me extend the Emacs experiment
+
+00:16:08.000 --> 00:16:09.159
+after the first term
+
+00:16:09.160 --> 00:16:15.279
+and continue for the following two terms.
+
+NOTE Overall results positive
+
+00:16:15.280 --> 00:16:18.839
+The courses... Coming to the result, the overall result...
+
+00:16:18.840 --> 00:16:20.999
+The courses were formally and informally
+
+00:16:21.000 --> 00:16:23.119
+also evaluated by the students,
+
+00:16:23.120 --> 00:16:24.599
+but you need to look at my paper
+
+00:16:24.600 --> 00:16:27.039
+for some explicit student comments,
+
+00:16:27.040 --> 00:16:28.199
+which you will find there.
+
+00:16:28.200 --> 00:16:29.879
+Here, I'm giving you only the summary.
+
+00:16:29.880 --> 00:16:34.519
+So first of all, Emacs proved to be hard to learn for some,
+
+00:16:34.520 --> 00:16:37.839
+but all students succeeded in all courses,
+
+00:16:37.840 --> 00:16:39.519
+independent of the level of
+
+00:16:39.520 --> 00:16:40.959
+their previous knowledge and skill.
+
+00:16:40.960 --> 00:16:45.919
+The documentation practices remained pretty uneven.
+
+00:16:45.920 --> 00:16:49.639
+So some students wrote a lot, others wrote little.
+
+00:16:49.640 --> 00:16:52.999
+But they were overall much higher than in classes
+
+00:16:53.000 --> 00:16:57.279
+without the use of Emacs and Org Mode.
+
+00:16:57.280 --> 00:16:59.559
+The interactivity enabled through Emacs
+
+00:16:59.560 --> 00:17:01.599
+was highly praised by the students
+
+00:17:01.600 --> 00:17:05.039
+and always identified on the evaluations.
+
+00:17:05.040 --> 00:17:08.559
+And lastly and most importantly, given the problems
+
+00:17:08.560 --> 00:17:13.279
+that I identified earlier, the computing file
+
+00:17:13.280 --> 00:17:15.079
+and data handling competence
+
+00:17:15.080 --> 00:17:18.279
+of the students who worked with Emacs throughout
+
+00:17:18.280 --> 00:17:23.399
+opening Emacs shells, running programs through Emacs,
+
+00:17:23.400 --> 00:17:26.999
+these skills increased massively.
+
+00:17:27.000 --> 00:17:30.599
+In the published paper, I have expressed
+
+00:17:30.600 --> 00:17:32.839
+a little more doubt than you see on this slide.
+
+00:17:32.840 --> 00:17:38.359
+But now, actually, I'm feeling quite hopeful again,
+
+00:17:38.360 --> 00:17:41.879
+especially because recently for one term,
+
+00:17:41.880 --> 00:17:47.679
+I have returned to Jupyter notebooks.
+
+00:17:47.680 --> 00:17:50.599
+In the current term, I abandoned Emacs again
+
+00:17:50.600 --> 00:17:53.119
+for online Jupyter notebook installations.
+
+00:17:53.120 --> 00:17:55.679
+The reason is that these Jupyter notebooks
+
+00:17:55.680 --> 00:18:00.159
+that I use from DataCamp have generative AI support
+
+00:18:00.160 --> 00:18:03.439
+from ChatGPT integrated into the notebook.
+
+00:18:03.440 --> 00:18:04.919
+And I wanted to try that.
+
+00:18:04.920 --> 00:18:08.519
+But after one term without Emacs,
+
+00:18:08.520 --> 00:18:10.199
+I regret that decision now.
+
+00:18:10.200 --> 00:18:13.199
+The AI advantage does not make up
+
+00:18:13.200 --> 00:18:15.119
+for the loss of the immersion
+
+00:18:15.120 --> 00:18:19.799
+that Emacs and Org Mode deliver.
+
+NOTE Conclusion & outlook
+
+00:18:19.800 --> 00:18:21.399
+And here's the summary.
+
+00:18:21.400 --> 00:18:23.759
+When learning computer and data science,
+
+00:18:23.760 --> 00:18:25.679
+immersion is everything.
+
+00:18:25.680 --> 00:18:29.479
+The best students will aim at immersion anyway.
+
+00:18:29.480 --> 00:18:31.239
+But for the majority of students,
+
+00:18:31.240 --> 00:18:33.679
+immersion must happen in class.
+
+00:18:33.680 --> 00:18:39.839
+Emacs and Org Mode performed throughout very well
+
+00:18:39.840 --> 00:18:42.319
+as the central literary programming platform.
+
+00:18:42.320 --> 00:18:45.959
+And the pre-configuring and the onboarding,
+
+00:18:45.960 --> 00:18:48.959
+which I showed to you, were very important
+
+00:18:48.960 --> 00:18:50.359
+to train the students quickly.
+
+00:18:50.360 --> 00:18:54.479
+In the paper, I also speculated on the impact
+
+00:18:54.480 --> 00:18:57.919
+of low-code, no-code, and AI coding assistance.
+
+00:18:57.920 --> 00:19:00.239
+And my general view on this is that
+
+00:19:00.240 --> 00:19:01.799
+the arrival of these tools
+
+00:19:01.800 --> 00:19:04.319
+make literary programming as an immersive technique
+
+00:19:04.320 --> 00:19:08.399
+focused on teaching a broad range of skills
+
+00:19:08.400 --> 00:19:09.719
+even more important.
+
+00:19:09.720 --> 00:19:13.079
+So even with AI--or especially with AI--
+
+00:19:13.080 --> 00:19:16.799
+this kind of approach, I think, could be critical.
+
+00:19:16.800 --> 00:19:18.439
+And that's it.
+
+00:19:18.440 --> 00:19:19.839
+I'm at the end of my presentation.
+
+00:19:19.840 --> 00:19:21.719
+Thank you very much for your attention.
+
+00:19:21.720 --> 00:19:22.839
+And I'm looking forward to the Q&A.
+
+00:19:22.840 --> 00:19:27.280
+Thank you.
diff --git a/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt
new file mode 100644
index 00000000..bc1bfff5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt
@@ -0,0 +1,1406 @@
+WEBVTT
+
+
+00:00:08.740 --> 00:00:09.240
+[Speaker 0]: Do we have any listeners?
+
+00:00:13.340 --> 00:00:13.840
+It's you and I. I have a question.
+
+00:00:16.420 --> 00:00:16.640
+How many tests do you have for hyperbole and
+
+00:00:18.800 --> 00:00:19.279
+How would you rate the test coverage compared
+
+00:00:21.279 --> 00:00:21.500
+to other packages? Well,
+
+00:00:28.279 --> 00:00:28.700
+that's a tricky 1. Shall I spell it out loud
+
+00:00:31.100 --> 00:00:31.600
+and then maybe type it at the same time?
+
+00:00:36.420 --> 00:00:36.920
+So, I believe it's around like more than 300
+
+00:00:43.660 --> 00:00:44.059
+test cases now. But I cannot compare the test
+
+00:00:45.220 --> 00:00:45.720
+coverage to any other
+
+00:01:00.020 --> 00:01:00.520
+other package. Maybe I can type that later.
+
+00:01:01.560 --> 00:01:02.060
+What do you say, Badal?
+
+00:01:02.660 --> 00:01:02.900
+[Speaker 1]: package. I have no knowledge of any Yeah,
+
+00:01:03.840 --> 00:01:04.239
+sure, yeah, that's totally fine.
+
+00:01:05.660 --> 00:01:06.160
+Feel free to just answer them with voice.
+
+00:01:08.720 --> 00:01:09.220
+[Speaker 0]: Yeah, yeah. There's another question.
+
+00:01:10.520 --> 00:01:10.920
+1 small suggestion to me,
+
+00:01:11.440 --> 00:01:11.940
+should means optional,
+
+00:01:13.660 --> 00:01:14.160
+where shall or must means required.
+
+00:01:15.940 --> 00:01:16.220
+Not sure if it is too late to make a major
+
+00:01:17.220 --> 00:01:17.540
+grammar change like that.
+
+00:01:18.080 --> 00:01:18.580
+Very nice presentation.
+
+00:01:19.840 --> 00:01:20.340
+So thanks for presentation,
+
+00:01:24.380 --> 00:01:24.780
+but the package ERT, well,
+
+00:01:27.920 --> 00:01:28.080
+it's not something that we have come up with.
+
+00:01:28.920 --> 00:01:29.340
+It's a standard package.
+
+00:01:32.320 --> 00:01:32.560
+So I believe it has been around for a long
+
+00:01:37.760 --> 00:01:38.000
+time. So, but please feel free to make
+
+00:01:39.680 --> 00:01:40.180
+suggestions and maybe you can,
+
+00:01:43.660 --> 00:01:43.860
+you know, like do a copy or like an alias for
+
+00:01:46.080 --> 00:01:46.200
+that. If you believe it makes more sense for
+
+00:01:48.080 --> 00:01:48.580
+your test cases to have that instead.
+
+00:01:53.540 --> 00:01:53.720
+And then we have another question here.
+
+00:01:55.540 --> 00:01:55.680
+For your info, you may find this helpful for
+
+00:01:58.780 --> 00:01:59.020
+running MX test lint both from a command line
+
+00:02:01.220 --> 00:02:01.720
+and from within MX with a transit menu.
+
+00:02:03.600 --> 00:02:04.040
+GitHub alpha papa make sure,
+
+00:02:06.760 --> 00:02:07.100
+yes. It also works on remote CI.
+
+00:02:08.240 --> 00:02:08.740
+Yeah, thank you, Alpha Papa.
+
+00:02:10.580 --> 00:02:11.080
+I think I've looked into that,
+
+00:02:13.440 --> 00:02:13.940
+but we haven't made any use of that.
+
+00:02:17.920 --> 00:02:18.080
+But maybe you'll inspire me to give it
+
+00:02:18.400 --> 00:02:18.900
+another look.
+
+00:02:29.260 --> 00:02:29.760
+[Speaker 2]: Hey guys.
+
+00:02:34.120 --> 00:02:34.460
+[Speaker 0]: I remember, I recognize that voice.
+
+00:02:37.160 --> 00:02:37.660
+Hi, Bob. Hey, how are you?
+
+00:02:40.240 --> 00:02:40.580
+Congratulations, man. Thanks,
+
+00:02:43.020 --> 00:02:43.320
+Hugh. Thank you. I have another question
+
+00:02:45.520 --> 00:02:45.900
+here. It is easy to run ad hoc tests inside
+
+00:02:48.400 --> 00:02:48.600
+an Emacs session given the command line
+
+00:02:51.180 --> 00:02:51.560
+scripts you need to run to get the batch test
+
+00:02:54.960 --> 00:02:55.120
+session running? You said it's to run an
+
+00:03:05.680 --> 00:03:05.920
+ad-hoc test. I'm not sure I understand that
+
+00:03:14.440 --> 00:03:14.940
+question. Yes, please.
+
+00:03:15.660 --> 00:03:16.160
+[Speaker 1]: Maybe I can rephrase. Sure.
+
+00:03:19.900 --> 00:03:20.400
+So I think what I understand is that since
+
+00:03:22.540 --> 00:03:23.040
+you have to use some of these command lines
+
+00:03:25.440 --> 00:03:25.940
+scripts to get a batch test session running,
+
+00:03:28.780 --> 00:03:29.180
+is it easy to run ad hoc tests in an Emacs
+
+00:03:30.700 --> 00:03:30.900
+session or does that, like in your
+
+00:03:32.040 --> 00:03:32.540
+experience, has that been difficult?
+
+00:03:36.820 --> 00:03:37.320
+[Speaker 0]: Well, from the command line,
+
+00:03:38.660 --> 00:03:38.940
+if you look at the command line,
+
+00:03:44.160 --> 00:03:44.340
+you'll see that it's only like a few image
+
+00:03:46.480 --> 00:03:46.980
+functions to call to get that behavior to run
+
+00:03:55.080 --> 00:03:55.240
+the batch tests. So I think we made some
+
+00:03:57.100 --> 00:03:57.600
+support function for that in hyperbole.
+
+00:04:02.800 --> 00:04:02.960
+So it's not, I don't think it's possible out
+
+00:04:05.540 --> 00:04:06.040
+of the box to do it, but it's not complicated
+
+00:04:08.060 --> 00:04:08.560
+to do it.
+
+00:04:12.190 --> 00:04:12.340
+[Speaker 2]: You can define a test anytime,
+
+00:04:14.780 --> 00:04:15.280
+right? Just like a new function.
+
+00:04:18.899 --> 00:04:19.240
+So that's ad hoc. You just write your test
+
+00:04:20.019 --> 00:04:20.519
+and you can run it.
+
+00:04:22.900 --> 00:04:23.400
+[Speaker 0]: Yeah, yeah, I mean, of course,
+
+00:04:25.900 --> 00:04:26.180
+but I got the impression it was about running
+
+00:04:28.620 --> 00:04:29.060
+all your tests like we did with the command
+
+00:04:35.740 --> 00:04:36.020
+line. Well, so the question is more about how
+
+00:04:38.260 --> 00:04:38.600
+would you run all your test cases from within
+
+00:04:44.860 --> 00:04:45.140
+Emacs? And the easy answer to that is
+
+00:04:48.420 --> 00:04:48.860
+actually you load all your test case files,
+
+00:04:51.760 --> 00:04:52.080
+and then you run ERT with the T as the test
+
+00:04:53.600 --> 00:04:53.880
+selector and then it will run all your test
+
+00:04:53.880 --> 00:04:54.380
+cases.
+
+00:05:01.780 --> 00:05:01.960
+[Speaker 1]: Right. And I think they have expanded on
+
+00:05:03.180 --> 00:05:03.520
+their question a little bit as well,
+
+00:05:04.960 --> 00:05:05.220
+clarifying that. In other words,
+
+00:05:07.200 --> 00:05:07.360
+can you tweak tests in an Emacs session and
+
+00:05:08.860 --> 00:05:09.360
+run them right away? Which I believe,
+
+00:05:11.400 --> 00:05:11.640
+if I understand correctly what Bob was
+
+00:05:13.820 --> 00:05:14.320
+saying, you can basically define or redefine
+
+00:05:15.920 --> 00:05:16.080
+functions on the fly and then have them be
+
+00:05:16.440 --> 00:05:16.940
+run, right?
+
+00:05:22.200 --> 00:05:22.360
+[Speaker 0]: Yes, yes. You just go into that test case and
+
+00:05:24.120 --> 00:05:24.620
+you just change it and you run it again.
+
+00:05:29.060 --> 00:05:29.200
+And either you have to sort of load it or you
+
+00:05:31.560 --> 00:05:32.060
+can use like the commercial thing I did.
+
+00:05:36.140 --> 00:05:36.340
+You use hyperbole and just hit meta return on
+
+00:05:38.560 --> 00:05:38.860
+the test case and it will load it and run the
+
+00:05:42.240 --> 00:05:42.360
+test case again. So that's of course what you
+
+00:05:44.220 --> 00:05:44.720
+normally do when you're defining a test or
+
+00:05:47.440 --> 00:05:47.940
+debug a test case or develop a test case.
+
+00:05:49.960 --> 00:05:50.460
+Just start with something small,
+
+00:05:52.700 --> 00:05:53.200
+just make sure maybe you can prepare the test
+
+00:05:55.320 --> 00:05:55.680
+properly and run it again and again and again
+
+00:05:56.720 --> 00:05:57.220
+until you're ready with it.
+
+00:05:59.760 --> 00:05:59.960
+That's a good point. You can definitely do
+
+00:06:02.800 --> 00:06:03.280
+that and that's part of how I normally
+
+00:06:06.420 --> 00:06:06.920
+develop the test cases that I mean start with
+
+00:06:09.160 --> 00:06:09.400
+something small so I can see that I get there
+
+00:06:12.180 --> 00:06:12.240
+maybe the right input in the buffer that I
+
+00:06:14.180 --> 00:06:14.340
+want to test on or something and I expand on
+
+00:06:18.160 --> 00:06:18.400
+that more and more and add more and more more
+
+00:06:18.460 --> 00:06:18.960
+and more more
+
+00:06:31.040 --> 00:06:31.540
+[Speaker 2]: tests to it. You might tell them a bit about
+
+00:06:33.280 --> 00:06:33.480
+how many test cases you have.
+
+00:06:36.020 --> 00:06:36.440
+I guess you commented on that and like what
+
+00:06:40.320 --> 00:06:40.820
+happens, you know, with the CICD pipeline,
+
+00:06:43.780 --> 00:06:44.020
+every time we commit, you know,
+
+00:06:46.360 --> 00:06:46.560
+across all the versions and what you have set
+
+00:06:48.760 --> 00:06:49.040
+up there because you know I wish people could
+
+00:06:53.940 --> 00:06:54.140
+see it. You can go and check on GitHub and
+
+00:06:57.440 --> 00:06:57.720
+you can see the logs right of any of the
+
+00:06:59.760 --> 00:06:59.960
+builds and but tell them a bit about that
+
+00:07:01.080 --> 00:07:01.320
+Mats because I think that's pretty
+
+00:07:01.320 --> 00:07:01.820
+impressive.
+
+00:07:07.280 --> 00:07:07.760
+[Speaker 0]: Well, that's part of more the CI,
+
+00:07:11.760 --> 00:07:12.160
+CD, part of how we developed this using
+
+00:07:15.460 --> 00:07:15.580
+GitHub and workflows that you get out of the
+
+00:07:20.740 --> 00:07:20.900
+box from there. So this more than 300 test
+
+00:07:23.440 --> 00:07:23.720
+cases on our round for I think 5 different
+
+00:07:26.480 --> 00:07:26.980
+versions of Emacs when we do a pull request
+
+00:07:33.900 --> 00:07:34.400
+or a commit. So that's a good way to ensure
+
+00:07:38.040 --> 00:07:38.540
+that it works from version 27.2
+
+00:07:42.240 --> 00:07:42.740
+up to the latest master version because
+
+00:07:45.860 --> 00:07:46.360
+there's some changes in Emacs over different
+
+00:07:48.940 --> 00:07:49.340
+versions that can affect your functions or
+
+00:07:49.600 --> 00:07:50.100
+your code.
+
+00:07:56.580 --> 00:07:56.720
+[Speaker 2]: They all run in parallel and so typically in
+
+00:08:00.580 --> 00:08:00.780
+under 60 seconds I think you've got all of
+
+00:08:03.960 --> 00:08:04.460
+them run so you've got pretty extensive
+
+00:08:08.860 --> 00:08:09.240
+testing which does catch interesting bugs
+
+00:08:09.760 --> 00:08:10.260
+here and there, right?
+
+00:08:13.320 --> 00:08:13.820
+[Speaker 0]: Yes, of course it does.
+
+00:08:18.060 --> 00:08:18.560
+I mean, you normally develop with 1 version
+
+00:08:20.280 --> 00:08:20.540
+and then you think everything is okay.
+
+00:08:21.720 --> 00:08:21.820
+But then when you're tested with the
+
+00:08:23.460 --> 00:08:23.960
+different versions, you find out that there
+
+00:08:26.080 --> 00:08:26.580
+are some changes and there are things you
+
+00:08:30.140 --> 00:08:30.400
+might not sort of keep track of what's
+
+00:08:34.340 --> 00:08:34.640
+happening also. So that's a way to get
+
+00:08:38.559 --> 00:08:38.940
+noticed that the core developers of Emacs
+
+00:08:41.120 --> 00:08:41.480
+have changed something that you sort of based
+
+00:08:44.380 --> 00:08:44.840
+your code on. Now I got another question
+
+00:08:47.900 --> 00:08:48.160
+here. Did you have to change hyperbole code
+
+00:08:50.580 --> 00:08:50.760
+and design to be more readily testable as you
+
+00:08:52.160 --> 00:08:52.660
+were increasing your test coverage?
+
+00:08:55.520 --> 00:08:56.020
+Well, we haven't done that to a lot,
+
+00:09:00.160 --> 00:09:00.320
+to a big degree, although I believe that that
+
+00:09:03.760 --> 00:09:04.260
+is an important thing for sort of the future
+
+00:09:06.020 --> 00:09:06.500
+to do that because some of the hyperbolic
+
+00:09:08.520 --> 00:09:08.720
+functions are very complicated and long and
+
+00:09:10.640 --> 00:09:11.140
+that makes testing them rather difficult.
+
+00:09:14.660 --> 00:09:14.900
+So, at a few places we have sort of broken up
+
+00:09:17.260 --> 00:09:17.720
+functions in smaller pieces so it'd be easier
+
+00:09:20.280 --> 00:09:20.660
+to do like unit tests of the different parts
+
+00:09:27.740 --> 00:09:27.980
+of it. But there's a lot of more work that
+
+00:09:28.680 --> 00:09:29.180
+has to be done there.
+
+00:09:33.820 --> 00:09:34.020
+[Speaker 2]: 1 of the nice things is you know the great
+
+00:09:36.760 --> 00:09:36.820
+environment in Lisp where we're able to do a
+
+00:09:40.520 --> 00:09:40.900
+lot of interactive bottom-up testing before
+
+00:09:42.840 --> 00:09:43.280
+we even get to lighting tech pieces.
+
+00:09:48.740 --> 00:09:49.140
+So it does tend to be more higher level bugs,
+
+00:09:51.140 --> 00:09:51.640
+I think, that get caught in cross-functional
+
+00:09:55.940 --> 00:09:56.100
+interaction. We had 1 recently that was an
+
+00:09:58.100 --> 00:09:58.600
+Emacs version change. It had been a function
+
+00:10:01.100 --> 00:10:01.600
+that had existed for a long time.
+
+00:10:03.340 --> 00:10:03.840
+It had an and rest in it,
+
+00:10:05.740 --> 00:10:06.240
+in its argument list, so it would assemble
+
+00:10:08.600 --> 00:10:09.100
+the list of arguments from individual
+
+00:10:10.320 --> 00:10:10.820
+arguments that you would give it,
+
+00:10:13.100 --> 00:10:13.600
+and they decided in a recent version,
+
+00:10:15.200 --> 00:10:15.700
+I think with Stefan's input,
+
+00:10:19.400 --> 00:10:19.840
+to change that to a list and allow the prior
+
+00:10:22.740 --> 00:10:22.900
+behavior, but it would issue a warning if you
+
+00:10:23.620 --> 00:10:24.060
+use the prior behavior.
+
+00:10:25.560 --> 00:10:25.840
+So all of a sudden, the way you were supposed
+
+00:10:27.180 --> 00:10:27.680
+to do it became semi-invalid.
+
+00:10:30.440 --> 00:10:30.940
+And so we started getting the warning,
+
+00:10:32.760 --> 00:10:33.040
+and we've tried to eliminate all those
+
+00:10:35.600 --> 00:10:36.060
+warnings in recent hyperbole developments.
+
+00:10:37.120 --> 00:10:37.620
+So we're like, what do we do?
+
+00:10:39.020 --> 00:10:39.440
+You know, because we wanted to be backward
+
+00:10:42.140 --> 00:10:42.640
+compatible to where you couldn't use a list.
+
+00:10:44.620 --> 00:10:45.120
+It required you to use individual arguments.
+
+00:10:48.380 --> 00:10:48.560
+And now it's sort of requiring you to do
+
+00:10:51.660 --> 00:10:51.820
+that. And all of that was caused by the
+
+00:10:52.940 --> 00:10:53.440
+automatic testing on it.
+
+00:11:08.680 --> 00:11:08.860
+So you said, Max, you were going to tell us
+
+00:11:12.740 --> 00:11:13.220
+what you learned. So what are the major
+
+00:11:15.368 --> 00:11:15.396
+things that you learned in doing all of this
+
+00:11:15.680 --> 00:11:16.180
+work? All of this work?
+
+00:11:26.520 --> 00:11:26.740
+[Speaker 0]: Well, I tried to cover some of it in the
+
+00:11:29.380 --> 00:11:29.800
+presentation, but as I was going along,
+
+00:11:33.420 --> 00:11:33.920
+the presentation became like twice as long as
+
+00:11:36.180 --> 00:11:36.680
+fitted into the time we had so I had to cut
+
+00:11:42.380 --> 00:11:42.880
+it out. But I think some of the core things
+
+00:11:44.340 --> 00:11:44.840
+still is in the presentation.
+
+00:11:49.560 --> 00:11:50.060
+From a personal perspective,
+
+00:11:52.440 --> 00:11:52.940
+And this might not be hard to realize,
+
+00:11:56.960 --> 00:11:57.460
+but forcing yourself to test functions,
+
+00:12:02.900 --> 00:12:03.060
+test code really forces you to understand the
+
+00:12:05.080 --> 00:12:05.280
+code a little bit better in a way that sort
+
+00:12:07.300 --> 00:12:07.400
+of makes it easier than just to read the
+
+00:12:11.460 --> 00:12:11.960
+code. I don't know how it is for the rest
+
+00:12:13.780 --> 00:12:13.980
+listening to this, but for me it works so
+
+00:12:16.580 --> 00:12:17.080
+that if I just read the code then I don't
+
+00:12:20.140 --> 00:12:20.320
+sort of become as sharp as I should be but if
+
+00:12:22.500 --> 00:12:22.640
+I try to write the test case for it then I
+
+00:12:24.680 --> 00:12:24.880
+really need to understand better of all the
+
+00:12:27.660 --> 00:12:28.160
+edge cases and all the sort of states and etc
+
+00:12:30.060 --> 00:12:30.320
+that is involved and I think that's That's
+
+00:12:33.080 --> 00:12:33.200
+what's sort of 1 of the learning things I
+
+00:12:34.960 --> 00:12:35.280
+wanted to communicate as well that I don't
+
+00:12:38.940 --> 00:12:39.080
+think I covered in detail in the
+
+00:12:41.480 --> 00:12:41.980
+presentation. Maybe all this,
+
+00:12:48.060 --> 00:12:48.340
+but try it. 1 other sort of more from the fun
+
+00:12:50.740 --> 00:12:51.000
+side is that I really think it's fun to write
+
+00:12:55.080 --> 00:12:55.440
+the test. So if you haven't tests in your
+
+00:12:58.020 --> 00:12:58.520
+package, you should start doing that because
+
+00:13:05.740 --> 00:13:06.080
+it is fun. It might feel like some extra
+
+00:13:08.080 --> 00:13:08.580
+work, but it really pays off in the long run,
+
+00:13:10.320 --> 00:13:10.760
+especially if you have it in like a pipeline
+
+00:13:12.520 --> 00:13:12.980
+and where you can run it regularly when you
+
+00:13:13.940 --> 00:13:14.380
+do new commits, et cetera.
+
+00:13:16.560 --> 00:13:17.060
+So, I mean, that's maybe obvious from,
+
+00:13:19.160 --> 00:13:19.440
+if you look from the commercial side or your
+
+00:13:21.080 --> 00:13:21.340
+work side to do it like that.
+
+00:13:22.260 --> 00:13:22.660
+But even for your hobby project,
+
+00:13:26.260 --> 00:13:26.760
+it can be very sort of pay off really well.
+
+00:13:32.900 --> 00:13:33.160
+[Speaker 2]: It's worked really well when we're adding new
+
+00:13:35.020 --> 00:13:35.180
+functionality or we're changing some of the
+
+00:13:36.560 --> 00:13:37.060
+plumbing in the system.
+
+00:13:40.400 --> 00:13:40.580
+You know, you go and you do some surgery and
+
+00:13:41.320 --> 00:13:41.820
+then you run the tests.
+
+00:13:45.400 --> 00:13:45.900
+And sometimes 6 to 10 tests will fail.
+
+00:13:48.260 --> 00:13:48.420
+And you find there, you know,
+
+00:13:50.460 --> 00:13:50.660
+it tends to be they're all interconnected and
+
+00:13:52.920 --> 00:13:53.320
+it leads you back to the single source.
+
+00:13:56.660 --> 00:13:56.980
+You fix that and you know it could be an edge
+
+00:14:00.560 --> 00:14:00.760
+case and off by 1 or Sometimes it's an
+
+00:14:03.520 --> 00:14:03.800
+assumption about the way something is used
+
+00:14:05.980 --> 00:14:06.480
+and it's not actually always true.
+
+00:14:09.520 --> 00:14:10.020
+And so, Matt's just really good at
+
+00:14:13.540 --> 00:14:14.040
+identifying some of those scenarios and
+
+00:14:17.480 --> 00:14:17.980
+keeping us honest, I guess I would say.
+
+00:14:22.900 --> 00:14:23.400
+So I love, I run it as much as I before,
+
+00:14:26.400 --> 00:14:26.900
+you know, even before I commit something.
+
+00:14:29.960 --> 00:14:30.060
+So I get to see, you know,
+
+00:14:30.940 --> 00:14:31.440
+if anything has progressed.
+
+00:14:39.480 --> 00:14:39.920
+So yeah, I really recommend this process to
+
+00:14:42.120 --> 00:14:42.620
+people. I haven't seen it done.
+
+00:14:45.720 --> 00:14:46.080
+I don't think that, I don't know any other
+
+00:14:47.800 --> 00:14:48.300
+package that has done it to this level.
+
+00:14:51.560 --> 00:14:51.820
+And it's been working really great for us.
+
+00:14:55.440 --> 00:14:55.640
+And I think, well, we'll see too when we
+
+00:14:56.780 --> 00:14:57.280
+release to the general public.
+
+00:15:04.380 --> 00:15:04.540
+[Speaker 0]: But Bob, also, maybe the test part of
+
+00:15:06.400 --> 00:15:06.560
+different packages is not the first thing you
+
+00:15:08.900 --> 00:15:09.100
+look at. So I know there are packages that
+
+00:15:10.960 --> 00:15:11.380
+have testing, a lot of testing,
+
+00:15:13.860 --> 00:15:14.160
+but how much, much testing they have or not,
+
+00:15:16.060 --> 00:15:16.220
+I don't know. It's not what you normally look
+
+00:15:17.900 --> 00:15:18.400
+into when you look at someone's else code.
+
+00:15:20.600 --> 00:15:20.820
+You look maybe on the functionality side but
+
+00:15:22.760 --> 00:15:23.000
+not on how they've done the sort of the
+
+00:15:26.540 --> 00:15:26.760
+quality side. So there could be other
+
+00:15:28.780 --> 00:15:29.280
+packages out there that are well equipped.
+
+00:15:31.800 --> 00:15:32.300
+[Speaker 2]: I hope so. I hope so.
+
+00:15:39.860 --> 00:15:40.180
+[Speaker 0]: What's the craziest bug you found when
+
+00:15:44.700 --> 00:15:45.200
+writing these tests? Well,
+
+00:15:50.760 --> 00:15:50.940
+What springs to my mind just now is that we
+
+00:15:52.760 --> 00:15:52.960
+were doing some tests or I would do some
+
+00:15:55.920 --> 00:15:56.420
+tests for when you narrow,
+
+00:15:57.940 --> 00:15:58.440
+what do you say that? When you,
+
+00:16:04.500 --> 00:16:05.000
+in outlining, when you sort of compress
+
+00:16:06.480 --> 00:16:06.980
+things in an outline, so you just,
+
+00:16:08.540 --> 00:16:09.040
+sorry Bob, maybe you have it,
+
+00:16:12.100 --> 00:16:12.600
+[Speaker 2]: When you hide text.
+
+00:16:12.740 --> 00:16:13.240
+[Speaker 0]: What I'm looking for? Yeah,
+
+00:16:15.580 --> 00:16:15.920
+when you hide. So I was doing some cursor
+
+00:16:17.780 --> 00:16:17.980
+movement over that. And I always assume that
+
+00:16:22.540 --> 00:16:22.900
+if you do like a prefix argument to like a
+
+00:16:23.800 --> 00:16:24.240
+simple cursor movement,
+
+00:16:26.420 --> 00:16:26.920
+like control F moving 1 character position,
+
+00:16:28.340 --> 00:16:28.840
+and you would give it the,
+
+00:16:36.580 --> 00:16:37.080
+and then the prefix, like you want to move
+
+00:16:39.140 --> 00:16:39.640
+like 2 or 3 positions,
+
+00:16:43.040 --> 00:16:43.140
+you would do like control U 3 and then
+
+00:16:44.240 --> 00:16:44.740
+control F and you move 3.
+
+00:16:46.560 --> 00:16:46.960
+I always assumed that that would be exactly
+
+00:16:49.240 --> 00:16:49.440
+the same as if you just hit the key control F
+
+00:16:50.740 --> 00:16:51.240
+3 times, but it's not.
+
+00:16:53.160 --> 00:16:53.560
+So it's not the bug, it's a feature,
+
+00:16:54.620 --> 00:16:55.080
+but that was the craziest thing.
+
+00:16:58.180 --> 00:16:58.360
+I spent the night trying to figure out why
+
+00:17:00.720 --> 00:17:01.000
+our code was wrong, but It turns out that's
+
+00:17:03.560 --> 00:17:04.060
+how Emacs behaves. Try it out yourself.
+
+00:17:07.920 --> 00:17:08.300
+Try to move over the 3 dots at the end of
+
+00:17:09.140 --> 00:17:09.640
+that and see what happens.
+
+00:17:14.060 --> 00:17:14.240
+Do it with cursor hitting the key or using a
+
+00:17:16.260 --> 00:17:16.680
+prefix argument and you see it behaves
+
+00:17:18.720 --> 00:17:19.220
+differently. That was the craziest thing.
+
+00:17:21.960 --> 00:17:22.339
+I think there was some other crazy thing or
+
+00:17:24.280 --> 00:17:24.480
+deep learning also, but I can't come up with
+
+00:17:26.599 --> 00:17:26.760
+it at the moment. So maybe I can write it in
+
+00:17:27.900 --> 00:17:28.400
+the Q&A later.
+
+00:17:31.200 --> 00:17:31.440
+[Speaker 1]: I think we're out of time on the stream,
+
+00:17:33.360 --> 00:17:33.600
+but people are welcome to join Mats and Bob
+
+00:17:35.280 --> 00:17:35.640
+here on BigBlueButton to further discuss
+
+00:17:36.480 --> 00:17:36.980
+this. Thank you both.
+
+00:17:38.674 --> 00:17:38.792
+[Speaker 0]: Okay, thank you. Thanks,
+
+00:17:46.100 --> 00:17:46.600
+Makaay. Thank you. I don't know,
+
+00:17:48.740 --> 00:17:49.240
+Is it only me and Bob here?
+
+00:17:50.680 --> 00:17:51.180
+So Bob, do you want to say something?
+
+00:17:57.440 --> 00:17:57.940
+[Speaker 2]: Well, I think it's been a great day.
+
+00:18:00.720 --> 00:18:01.220
+And I'm glad we did this.
+
+00:18:02.280 --> 00:18:02.780
+It takes a lot of energy.
+
+00:18:15.140 --> 00:18:15.640
+I'm just really excited about the progress
+
+00:18:20.580 --> 00:18:20.740
+that this, and we're actually doing a lot of
+
+00:18:23.940 --> 00:18:24.160
+QA at work and my professional software work
+
+00:18:28.500 --> 00:18:28.840
+and looking at you know how we can do more
+
+00:18:32.980 --> 00:18:33.480
+test driven development and so everybody's
+
+00:18:35.980 --> 00:18:36.200
+talking about this you know we've got AI over
+
+00:18:37.540 --> 00:18:38.040
+here that can generate test cases.
+
+00:18:40.200 --> 00:18:40.700
+But, you know, strangely enough,
+
+00:18:43.100 --> 00:18:43.380
+with the rapidity of development and web
+
+00:18:46.720 --> 00:18:47.220
+applications, I think the level of testing
+
+00:18:50.140 --> 00:18:50.280
+has gone down in recent years compared to
+
+00:18:51.500 --> 00:18:51.780
+where it used to be, right?
+
+00:18:53.040 --> 00:18:53.540
+Because the pace has gone up.
+
+00:18:57.340 --> 00:18:57.840
+And so I think it's starting to turn again
+
+00:18:58.740 --> 00:18:59.240
+where people are saying,
+
+00:19:01.940 --> 00:19:02.440
+we can't just release crap into the
+
+00:19:08.120 --> 00:19:08.620
+Webisphere and we have to better ourselves.
+
+00:19:13.620 --> 00:19:13.820
+And with all these advanced tool sets that
+
+00:19:16.100 --> 00:19:16.600
+you have, that you can do CICD testing,
+
+00:19:19.860 --> 00:19:20.180
+you know, I just, I just see it coming
+
+00:19:21.900 --> 00:19:22.100
+around, you know, as people develop new
+
+00:19:24.000 --> 00:19:24.160
+things. So That's kind of exciting to me
+
+00:19:26.980 --> 00:19:27.480
+because I came from a manufacturing culture
+
+00:19:30.300 --> 00:19:30.780
+originally where we, our company actually
+
+00:19:33.800 --> 00:19:34.300
+started a lot of the manufacturing quality
+
+00:19:37.420 --> 00:19:37.920
+efforts that you saw in Japan and elsewhere
+
+00:19:40.600 --> 00:19:40.740
+in America for a long time and that was you
+
+00:19:42.040 --> 00:19:42.540
+know entirely through testing.
+
+00:19:46.640 --> 00:19:47.020
+We used to just build incredible test cases
+
+00:19:49.120 --> 00:19:49.320
+because we were combining software with
+
+00:19:51.100 --> 00:19:51.380
+hardware. And if, you know,
+
+00:19:53.460 --> 00:19:53.600
+the hardware doesn't work and you ship a
+
+00:19:55.080 --> 00:19:55.520
+million units, you're,
+
+00:19:57.340 --> 00:19:57.840
+you're in trouble. So,
+
+00:20:00.260 --> 00:20:00.760
+that was just something we had to do.
+
+00:20:04.280 --> 00:20:04.780
+And so it's nice to start to see that curve
+
+00:20:07.020 --> 00:20:07.520
+come around. And I think,
+
+00:20:10.380 --> 00:20:10.880
+you know, Matt Vance is very modest,
+
+00:20:16.680 --> 00:20:16.920
+but I think he's really the 1 that started us
+
+00:20:20.400 --> 00:20:20.580
+down this path and really made it into a
+
+00:20:24.620 --> 00:20:24.840
+reality. So everybody else just gets to
+
+00:20:25.760 --> 00:20:26.260
+benefit from that work.
+
+00:20:27.540 --> 00:20:28.040
+So thanks.
+
+00:20:32.760 --> 00:20:33.260
+[Speaker 1]: That's awesome.
+
+00:20:39.960 --> 00:20:40.460
+[Speaker 0]: Thanks. Okay. Yeah. So if there's nothing
+
+00:20:43.200 --> 00:20:43.520
+more here, then maybe we should just close
+
+00:20:45.440 --> 00:20:45.940
+this and I go over to write in the etherpad
+
+00:20:47.960 --> 00:20:48.460
+the replies we had.
+
+00:20:51.900 --> 00:20:52.120
+[Speaker 1]: Right, yeah, I think, let's see,
+
+00:20:53.520 --> 00:20:53.760
+I see 1 other person here,
+
+00:20:55.080 --> 00:20:55.580
+I believe Ihor just joined us.
+
+00:20:58.780 --> 00:20:59.060
+Yeah. Yeah, so if you do want to discuss with
+
+00:21:00.220 --> 00:21:00.480
+Mats and Bob, you're welcome to,
+
+00:21:02.200 --> 00:21:02.700
+otherwise, yeah, we can close the room now.
+
+00:21:05.800 --> 00:21:06.020
+[Speaker 3]: Well, I think I missed most of the talk
+
+00:21:06.900 --> 00:21:07.400
+because I had power outage,
+
+00:21:12.180 --> 00:21:12.440
+but the part I heard was about the mock
+
+00:21:16.860 --> 00:21:17.220
+library. And you mentioned that you don't
+
+00:21:20.200 --> 00:21:20.700
+like CL-let, but instead you use mock.
+
+00:21:29.700 --> 00:21:29.800
+[Speaker 0]: Yeah, I was more saying that you have to do a
+
+00:21:31.560 --> 00:21:32.040
+lot more work when you use the CL letdef.
+
+00:21:34.540 --> 00:21:34.780
+It's for more ambitious and maybe more
+
+00:21:37.000 --> 00:21:37.500
+complicated cases where you want to really
+
+00:21:38.840 --> 00:21:39.340
+make a new implementation,
+
+00:21:41.940 --> 00:21:42.440
+test implementation. If you use the mock,
+
+00:21:44.380 --> 00:21:44.880
+you get a lot of things out of the box,
+
+00:21:47.440 --> 00:21:47.940
+verifying that you actually,
+
+00:21:50.820 --> 00:21:51.040
+like the mock was actually called for
+
+00:21:53.320 --> 00:21:53.820
+instance, whereas if you do with the CLLatf,
+
+00:21:56.520 --> 00:21:56.780
+you would have to take correct track of that
+
+00:22:02.020 --> 00:22:02.520
+yourself. And so, so a lot of more work.
+
+00:22:03.760 --> 00:22:04.260
+Oh yeah.
+
+00:22:07.940 --> 00:22:08.200
+[Speaker 3]: I'm saying that most of the time CLLess is
+
+00:22:09.720 --> 00:22:10.220
+used for simple cases actually.
+
+00:22:12.320 --> 00:22:12.820
+Because, just for example,
+
+00:22:15.100 --> 00:22:15.600
+the function always returns the same.
+
+00:22:17.980 --> 00:22:18.420
+And it tends to be simple lambda that ignores
+
+00:22:19.040 --> 00:22:19.540
+all the input arguments.
+
+00:22:23.000 --> 00:22:23.480
+So that's really trivial most of the time but
+
+00:22:25.520 --> 00:22:25.920
+I actually thought the opposite that mock is
+
+00:22:27.640 --> 00:22:28.140
+supposed to be used for non-trivial cases.
+
+00:22:32.280 --> 00:22:32.520
+[Speaker 0]: Sorry, what was the question?
+
+00:22:35.280 --> 00:22:35.780
+Mock was supposed to be used for non-trivial.
+
+00:22:47.680 --> 00:22:48.180
+Yeah I mean I don't know how to explain this.
+
+00:22:50.140 --> 00:22:50.640
+I mean, CLF can be used for non-trivial
+
+00:22:54.400 --> 00:22:54.840
+definitely. You can define then any behavior
+
+00:22:56.180 --> 00:22:56.680
+you want. You can write your own function,
+
+00:22:58.440 --> 00:22:58.660
+but you need to keep track of whether that
+
+00:22:59.620 --> 00:23:00.100
+function is called or not,
+
+00:23:06.260 --> 00:23:06.380
+for instance. So you have to make note of
+
+00:23:08.440 --> 00:23:08.940
+that the function was called so you can fire
+
+00:23:12.440 --> 00:23:12.800
+sort of an error in case your function wasn't
+
+00:23:16.960 --> 00:23:17.440
+called because that would be 1 error case.
+
+00:23:20.660 --> 00:23:20.860
+[Speaker 3]: So you mean the mock fires an error if the
+
+00:23:22.580 --> 00:23:23.080
+mocked function was actually not called?
+
+00:23:30.060 --> 00:23:30.560
+[Speaker 0]: Yes, it does. Yes. So if your assumptions,
+
+00:23:33.900 --> 00:23:34.120
+you sort of document with the mock also your
+
+00:23:37.080 --> 00:23:37.220
+assumptions how your code is going to be
+
+00:23:40.020 --> 00:23:40.380
+called. And if those are wrong,
+
+00:23:41.120 --> 00:23:41.540
+you will get an error.
+
+00:23:43.680 --> 00:23:44.060
+So you would, so if the implementation would
+
+00:23:44.840 --> 00:23:45.100
+maybe change, for instance,
+
+00:23:46.640 --> 00:23:47.140
+and not call the thing you're mocking,
+
+00:23:50.460 --> 00:23:50.960
+then you will notice that.
+
+00:23:53.100 --> 00:23:53.560
+But if you see a letdef,
+
+00:23:54.840 --> 00:23:55.040
+then you will have to keep track of that
+
+00:23:57.560 --> 00:23:58.060
+yourself. Okay, I see.
+
+00:23:58.260 --> 00:23:58.760
+I see.
+
+00:24:01.240 --> 00:24:01.740
+[Speaker 3]: And you know, our mode also uses a lot of
+
+00:24:09.340 --> 00:24:09.620
+test. In our mode, we have a lot of tests
+
+00:24:13.940 --> 00:24:14.440
+[Speaker 0]: Ah, okay. Yeah. Yeah. I'm sure I have.
+
+00:24:15.900 --> 00:24:16.400
+[Speaker 3]: also. We rely on CLLatF for,
+
+00:24:19.220 --> 00:24:19.720
+we don't use third-party libraries at all.
+
+00:24:22.140 --> 00:24:22.640
+[Speaker 0]: Oh, you use CLLatF, okay.
+
+00:24:26.680 --> 00:24:27.180
+Yeah. Yeah. Yeah. At First I found it very
+
+00:24:29.480 --> 00:24:29.700
+powerful to use that, but then I sort of,
+
+00:24:32.120 --> 00:24:32.320
+I learned more about how we can use the
+
+00:24:34.340 --> 00:24:34.840
+mocking library for what I needed.
+
+00:24:36.900 --> 00:24:37.400
+And I prefer that at the moment.
+
+00:24:40.560 --> 00:24:41.060
+[Speaker 3]: I see, that is interesting.
+
+00:24:42.500 --> 00:24:42.700
+Because I had seen it,
+
+00:24:45.440 --> 00:24:45.600
+but I didn't consider that it's gonna be
+
+00:24:46.800 --> 00:24:47.300
+useful even in simple cases.
+
+00:24:52.640 --> 00:24:53.140
+[Speaker 0]: It has its limitations.
+
+00:24:58.260 --> 00:24:58.760
+So it's like life, how you turn depends.
+
+00:25:03.740 --> 00:25:04.020
+But maybe I should look more into the org
+
+00:25:05.880 --> 00:25:06.100
+mode and the test case to learn more about
+
+00:25:07.480 --> 00:25:07.980
+that. So thanks for pointing that out.
+
+00:25:14.620 --> 00:25:15.120
+[Speaker 3]: We are trying to cover as much as we can.
+
+00:25:17.520 --> 00:25:17.740
+It's almost impossible for org.
+
+00:25:20.500 --> 00:25:21.000
+But yeah, we keep adding more tests.
+
+00:25:22.780 --> 00:25:23.280
+[Speaker 0]: That's great.
+
+00:25:52.720 --> 00:25:53.200
+Someone's typing. I don't know.
+
+00:25:54.340 --> 00:25:54.840
+Any more questions? No?
+
+00:26:01.060 --> 00:26:01.560
+Okay, then I'll go back and try to document
+
+00:26:05.200 --> 00:26:05.360
+this in the etherpad. Thank you everybody for
+
+00:26:08.860 --> 00:26:09.160
+[Speaker 1]: Thank you guys. Great work.
+
+00:26:09.400 --> 00:26:09.900
+[Speaker 0]: joining. Great. Thank you.
+
+00:26:11.100 --> 00:26:11.600
+Take care. Bye-bye.
+
+00:26:15.060 --> 00:26:15.560
+[Speaker 1]: Take care. Bye. Silence.
diff --git a/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt
new file mode 100644
index 00000000..ea8a679b
--- /dev/null
+++ b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt
@@ -0,0 +1,68 @@
+WEBVTT
+
+
+00:00:03.120 --> 00:03:11.159
+Introduction
+
+00:03:11.160 --> 00:04:14.359
+ERT: Emacs Lisp Regression Testing
+
+00:04:14.360 --> 00:04:56.919
+Assertions with `should`
+
+00:04:56.920 --> 00:06:54.559
+Running a test case
+
+00:06:54.560 --> 00:07:46.960
+Debug a test
+
+00:07:50.380 --> 00:09:10.479
+Commercial break: Hyperbole
+
+00:09:10.480 --> 00:10:39.119
+Instrument function on the fly
+
+00:10:39.120 --> 00:14:41.239
+Mocking
+
+00:14:41.240 --> 00:15:24.099
+cl-letf
+
+00:15:24.100 --> 00:15:55.719
+Hooks
+
+00:15:55.720 --> 00:17:05.099
+Side effects and initial buffer state
+
+00:17:05.100 --> 00:17:16.519
+with-temp-buffer
+
+00:17:16.520 --> 00:17:33.287
+make-temp-file
+
+00:17:33.288 --> 00:18:09.919
+buffer-string
+
+00:18:09.920 --> 00:18:51.979
+buffer-name
+
+00:18:51.980 --> 00:19:02.679
+major-mode
+
+00:19:02.680 --> 00:20:15.099
+unwind-protect
+
+00:20:15.100 --> 00:21:38.459
+Input, with-simulated-input
+
+00:21:38.460 --> 00:23:03.219
+Running all tests
+
+00:23:03.220 --> 00:24:05.059
+Batch mode
+
+00:24:05.060 --> 00:26:05.160
+Skipping tests
+
+00:26:08.460 --> 00:26:55.240
+Conclusion
diff --git a/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt
new file mode 100644
index 00000000..d07b8201
--- /dev/null
+++ b/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt
@@ -0,0 +1,1371 @@
+WEBVTT captioned by sachac, checked by sachac
+
+NOTE Introduction
+
+00:00:03.120 --> 00:00:07.439
+Hi everyone! I'm Mats Lidell.
+
+00:00:07.440 --> 00:00:09.879
+I'm going to talk about my journey
+
+00:00:09.880 --> 00:00:12.480
+writing test cases for GNU Hyperbole
+
+00:00:12.481 --> 00:00:19.399
+and what I learned on the way.
+
+00:00:19.400 --> 00:00:24.079
+So, why write tests for GNU Hyperbole?
+
+00:00:24.080 --> 00:00:25.679
+There is some background.
+
+00:00:25.680 --> 00:00:27.959
+I'm the co-maintainer of GNU Hyperbole
+
+00:00:27.960 --> 00:00:33.479
+together with Bob Weiner. Bob is the author of the package.
+
+00:00:33.480 --> 00:00:34.680
+The package is available through
+
+00:00:34.681 --> 00:00:38.799
+the Emacs package manager and GNU Elpa
+
+00:00:38.800 --> 00:00:42.599
+if you would want to try it out.
+
+00:00:42.600 --> 00:00:46.359
+The package has some age. I think it dates back to
+
+00:00:46.360 --> 00:00:50.119
+a first release around 1993, which is also
+
+00:00:50.120 --> 00:00:54.799
+when I got in contact with the package the first time.
+
+00:00:54.800 --> 00:00:58.239
+I was a user of the package for many years.
+
+00:00:58.240 --> 00:01:03.119
+Later, I became the maintainer of the package for the FSF.
+
+00:01:03.120 --> 00:01:04.679
+That was although I did not have
+
+00:01:04.680 --> 00:01:09.039
+much knowledge of Emacs Lisp,
+
+00:01:09.040 --> 00:01:12.679
+and I still have a lot to learn.
+
+00:01:12.680 --> 00:01:15.959
+A few years ago, we started to work actively on the package,
+
+00:01:15.960 --> 00:01:20.839
+with setting up goals and having meetings.
+
+00:01:20.840 --> 00:01:24.959
+So my starting point is that I had experience
+
+00:01:24.960 --> 00:01:27.439
+with test automation from development
+
+00:01:27.440 --> 00:01:30.599
+in C++, Java and Python
+
+00:01:30.600 --> 00:01:37.239
+using different x-unit frameworks like cppunit, junit.
+
+00:01:37.240 --> 00:01:40.039
+That was in my daytime work where
+
+00:01:40.040 --> 00:01:41.959
+the technique of using pull requests
+
+00:01:41.960 --> 00:01:46.719
+with changes backed up by tests were the daily routine.
+
+00:01:46.720 --> 00:01:49.199
+It was really a requirement for a change to go in
+
+00:01:49.200 --> 00:01:52.159
+to have supporting test cases.
+
+00:01:52.160 --> 00:01:58.559
+I believe, a quite common setup and requirement these days.
+
+00:01:58.560 --> 00:02:02.039
+I also had been an Emacs user for many years,
+
+00:02:02.040 --> 00:02:04.279
+but with focus on being a user.
+
+00:02:04.280 --> 00:02:09.839
+So as I mentioned, I have limited Emacs Lisp knowledge.
+
+00:02:09.840 --> 00:02:11.359
+When we decided to start
+
+00:02:11.360 --> 00:02:13.959
+to work actively on Hyperbole again,
+
+00:02:13.960 --> 00:02:15.519
+it was natural for me to look into
+
+00:02:15.520 --> 00:02:18.679
+raising the quality by adding unit tests.
+
+00:02:18.680 --> 00:02:20.679
+This also goes hand in hand
+
+00:02:20.680 --> 00:02:25.239
+with running these regularly as part of a build process.
+
+00:02:25.240 --> 00:02:28.439
+All in all, following the current best practice
+
+00:02:28.440 --> 00:02:31.359
+of software development.
+
+00:02:31.360 --> 00:02:36.479
+But since Hyperbole had no tests at all,
+
+00:02:36.480 --> 00:02:38.719
+it would not be enough just to add tests
+
+00:02:38.720 --> 00:02:41.799
+for new or changed functionality.
+
+00:02:41.800 --> 00:02:44.639
+We wanted to add it even broader; ideally, everywhere.
+
+00:02:44.640 --> 00:02:48.399
+So work started with adding tests here and there
+
+00:02:48.400 --> 00:02:52.039
+based on our gut feeling where it would be most useful.
+
+00:02:52.040 --> 00:02:55.799
+This work is still ongoing.
+
+00:02:55.800 --> 00:02:58.119
+So this is where my journey starts
+
+00:02:58.120 --> 00:03:00.759
+with much functionality to test,
+
+00:03:00.760 --> 00:03:03.359
+no knowledge of what testing frameworks existed,
+
+00:03:03.360 --> 00:03:11.159
+and not really knowing a lot about Emacs Lisp at all.
+
+NOTE ERT: Emacs Lisp Regression Testing
+
+00:03:11.160 --> 00:03:13.799
+Luckily there is a package for writing tests in Emacs.
+
+00:03:13.800 --> 00:03:17.919
+It is called ERT: Emacs Lisp Regression Testing.
+
+00:03:17.920 --> 00:03:20.959
+It contains both support for defining tests and running them.
+
+00:03:20.960 --> 00:03:24.639
+Defining a test is done with the macro `ert-deftest`.
+
+00:03:24.640 --> 00:03:28.919
+In its simplest form, a test has a name, a doc string, and a body.
+
+00:03:28.920 --> 00:03:31.439
+The doc string is where you typically can give
+
+00:03:31.440 --> 00:03:33.799
+a detailed description of the test
+
+00:03:33.800 --> 00:03:35.559
+and has space for more info
+
+00:03:35.560 --> 00:03:42.279
+than what can be given in the test name.
+
+00:03:42.280 --> 00:03:45.239
+The body is where all the interesting things happen.
+
+00:03:45.240 --> 00:03:51.959
+It is here you prepare the test, run it and verify the outcome.
+
+00:03:51.960 --> 00:03:54.239
+Schematically, it looks like this.
+
+00:03:54.240 --> 00:04:00.239
+You have the ert-deftest, you have the test name,
+
+00:04:00.240 --> 00:04:02.799
+and the doc string, and then the body.
+
+00:04:02.800 --> 00:04:06.559
+It is in the body where everything interesting happens.
+
+00:04:06.560 --> 00:04:09.759
+The test is prepared, the function of the test is executed,
+
+00:04:09.760 --> 00:04:13.119
+and the outcome of the test is evaluated.
+
+00:04:13.120 --> 00:04:14.359
+Did the test succeed or not?
+
+NOTE Assertions with `should`
+
+00:04:14.360 --> 00:04:18.479
+The verification of a test is performed with
+
+00:04:18.480 --> 00:04:21.479
+one or more so-called assertions.
+
+00:04:21.480 --> 00:04:24.999
+In ERT, they are implemented
+
+00:04:25.000 --> 00:04:26.599
+with the macro `should`
+
+00:04:26.600 --> 00:04:33.559
+together with a set of related macros.
+
+00:04:33.560 --> 00:04:35.519
+`should` takes a form as argument,
+
+00:04:35.520 --> 00:04:37.839
+and if the form evaluates to nil,
+
+00:04:37.840 --> 00:04:48.580
+the test has failed. So let's look at an example.
+
+00:04:48.581 --> 00:04:51.919
+This simple test verifies that the function `+`
+
+00:04:51.920 --> 00:04:56.919
+can add the numbers 2 and 3 and get the result 5.
+
+NOTE Running a test case
+
+00:04:56.920 --> 00:05:01.959
+So now we have defined a test case. How do we run it?
+
+00:05:01.960 --> 00:05:03.919
+The ERT package has the function (or
+
+00:05:03.920 --> 00:05:09.519
+rather convenience alias) `ert`. It takes a test selector.
+
+00:05:09.520 --> 00:05:19.759
+The test name works as a selector for running just one test.
+
+00:05:19.760 --> 00:05:27.900
+So here we have the example. Let's evaluate it.
+
+00:05:27.901 --> 00:05:34.519
+We define it and then we run it using ERT.
+
+00:05:34.520 --> 00:05:42.399
+As you see, we get prompted for a test selector
+
+00:05:42.400 --> 00:05:46.319
+but we only have one test case defined at the moment.
+
+00:05:46.320 --> 00:05:55.919
+It's the example 0. So let's hit RET.
+
+00:05:55.920 --> 00:05:58.959
+As you see here, we get some output
+
+00:05:58.960 --> 00:06:01.359
+describing what we have just done.
+
+00:06:01.360 --> 00:06:04.839
+There is one test case it has passed, zero failed,
+
+00:06:04.840 --> 00:06:07.839
+zero skipped, total 1 of 1 test case
+
+00:06:07.840 --> 00:06:14.439
+and some time stamps for the execution.
+
+00:06:14.440 --> 00:06:18.519
+We also see this green mark here indicating one test case
+
+00:06:18.520 --> 00:06:23.039
+and that it was successful.
+
+00:06:23.040 --> 00:06:29.659
+For inspecting the test, we can hit the letter `l`
+
+00:06:29.660 --> 00:06:32.839
+which shows all the `should` forms
+
+00:06:32.840 --> 00:06:37.779
+that was executed during this test case.
+
+00:06:37.780 --> 00:06:39.919
+So here we see that we have the `should`,
+
+00:06:39.920 --> 00:06:47.999
+one `should` executed, and we see the form equals to 2,
+
+00:06:48.000 --> 00:06:49.799
+and it was 5 equals to 5.
+
+00:06:49.800 --> 00:06:54.559
+So a good example of a successful test case.
+
+NOTE Debug a test
+
+00:06:54.560 --> 00:06:57.919
+So now we've seen how we can run a test case.
+
+00:06:57.920 --> 00:07:03.799
+Can we debug it? Yes. For debugging a test case,
+
+00:07:03.800 --> 00:07:07.939
+the `ert-deftest` can be set up using `edebug-defun`,
+
+00:07:07.940 --> 00:07:10.319
+just as a function or macro is set up
+
+00:07:10.320 --> 00:07:18.819
+or instrumented for debugging. So let's try that.
+
+00:07:18.820 --> 00:07:24.119
+So we try `edebug-defun` here.
+
+00:07:24.120 --> 00:07:28.279
+Now it's instrumented for debugging.
+
+00:07:28.280 --> 00:07:35.659
+And we run it, `ert`, and we're inside the debugger,
+
+00:07:35.660 --> 00:07:40.679
+and we can inspect here what's happening.
+
+00:07:40.680 --> 00:07:46.960
+Step through it and yes it succeeded just as before.
+
+NOTE Commercial break: Hyperbole
+
+00:07:50.380 --> 00:07:56.879
+It's time for a commercial break!
+
+00:07:56.880 --> 00:08:00.079
+Hyperbole itself can help with running tests
+
+00:08:00.080 --> 00:08:03.639
+and also help with running them in debug mode.
+
+00:08:03.640 --> 00:08:08.519
+That is because hyperbole identifies the `ert-deftest`
+
+00:08:08.520 --> 00:08:12.679
+as an implicit button. An implicit button is basically
+
+00:08:12.680 --> 00:08:13.759
+a string or pattern
+
+00:08:13.760 --> 00:08:16.799
+that Hyperbole has assigned some meaning to.
+
+00:08:16.800 --> 00:08:19.959
+For the string `ert-deftest`, it is to run the test case.
+
+00:08:19.960 --> 00:08:24.559
+You activate the button with the action-key.
+
+00:08:24.560 --> 00:08:27.079
+The standard binding is the middle mouse button,
+
+00:08:27.080 --> 00:08:33.040
+or from the keyboard, M-RET.
+
+00:08:33.041 --> 00:08:34.799
+So let's try that.
+
+00:08:34.800 --> 00:08:42.219
+We move the cursor here and then we type M-RET.
+
+00:08:42.220 --> 00:08:47.959
+And boom, the test case was executed.
+
+00:08:47.960 --> 00:08:54.479
+And to run it in debug mode we type C-u M-RET
+
+00:08:54.480 --> 00:08:57.719
+to get the assist key, and then we're in the debugger.
+
+00:08:57.720 --> 00:09:10.479
+So that's pretty useful and convenient.
+
+NOTE Instrument function on the fly
+
+00:09:10.480 --> 00:09:13.719
+A related useful feature here is the step-in functionality
+
+00:09:13.720 --> 00:09:16.399
+bound to the letter i in `debug-mode`.
+
+00:09:16.400 --> 00:09:18.119
+It allows you to step into a function
+
+00:09:18.120 --> 00:09:20.479
+and continue debugging from there.
+
+00:09:20.480 --> 00:09:22.839
+For the cases where your test does not do what you want,
+
+00:09:22.840 --> 00:09:25.119
+looking at what happens in the function of the test
+
+00:09:25.120 --> 00:09:37.259
+can be really useful. Let's try that with another example.
+
+00:09:37.260 --> 00:09:43.359
+So here we have two helper functions, one `f1-add`,
+
+00:09:43.360 --> 00:09:47.439
+that use the built-in `+` function
+
+00:09:47.440 --> 00:09:52.239
+and then we have `my-add` that uses that function.
+
+00:09:52.240 --> 00:09:59.399
+So we're going to test myadd.
+
+00:09:59.400 --> 00:10:02.919
+And then let's run this.
+
+00:10:02.920 --> 00:10:05.959
+Let's run this using hyperbole in debug mode
+
+00:10:05.960 --> 00:10:10.079
+C-u M-RET. We're in the debugger again,
+
+00:10:10.080 --> 00:10:15.639
+and let's step up front to my function under test
+
+00:10:15.640 --> 00:10:19.359
+and then press `i` for getting it instrumented
+
+00:10:19.360 --> 00:10:23.019
+and going into it for debugging.
+
+00:10:23.020 --> 00:10:25.139
+And here we can expect that it's getting
+
+00:10:25.140 --> 00:10:26.559
+the arguments 1 and 3,
+
+00:10:26.560 --> 00:10:30.999
+and it returns the result 4 as expected.
+
+00:10:31.000 --> 00:10:39.119
+And yes, of course, our test case will then succeed.
+
+NOTE Mocking
+
+00:10:39.120 --> 00:10:41.839
+The next tool in our toolbox is mocking.
+
+00:10:41.840 --> 00:10:46.239
+Mocking is needed when we want to simulate the response
+
+00:10:46.240 --> 00:10:49.279
+from a function used by the function under test.
+
+00:10:49.280 --> 00:10:53.139
+That is the implementation of the function.
+
+00:10:53.140 --> 00:10:56.119
+This could be for various reasons.
+
+00:10:56.120 --> 00:11:00.879
+One example could be because it would be hard or impossible
+
+00:11:00.880 --> 00:11:04.199
+in the test setup to get the behavior you want to test for,
+
+00:11:04.200 --> 00:11:06.279
+like an external error case.
+
+00:11:06.280 --> 00:11:08.679
+But the mock can also be used to verify
+
+00:11:08.680 --> 00:11:11.619
+that the function is called with a specific argument.
+
+00:11:11.620 --> 00:11:14.559
+We can view it as a way to isolate the function on the test
+
+00:11:14.560 --> 00:11:16.719
+from its dependencies.
+
+00:11:16.720 --> 00:11:18.959
+So in order to test the function in isolation,
+
+00:11:18.960 --> 00:11:22.079
+we need to cut out any dependencies to external behavior.
+
+00:11:22.080 --> 00:11:25.839
+Most obvious would be dependencies to external resources,
+
+00:11:25.840 --> 00:11:27.639
+such as web pages. As an example:
+
+00:11:27.640 --> 00:11:30.639
+Hyperbole contains functionality to link you to
+
+00:11:30.640 --> 00:11:34.239
+social media resources and other resources on the net.
+
+00:11:34.240 --> 00:11:37.899
+Testing that would require the test system to call out
+
+00:11:37.900 --> 00:11:39.639
+to the social media resources
+
+00:11:39.640 --> 00:11:43.539
+and would depend on it being available, etc.
+
+00:11:43.540 --> 00:11:45.479
+Nothing technically stops a test case
+
+00:11:45.480 --> 00:11:47.239
+to depend on the external resources,
+
+00:11:47.240 --> 00:11:51.319
+but would, if nothing else, be flaky or slow.
+
+00:11:51.320 --> 00:11:53.759
+It could be part of an end-to-end suite
+
+00:11:53.760 --> 00:11:57.179
+where we want to test that it works all the way.
+
+00:11:57.180 --> 00:11:59.719
+In this case, we want to look at the isolated case
+
+00:11:59.720 --> 00:12:04.099
+that can be run with no dependency on external resources.
+
+00:12:04.100 --> 00:12:06.679
+What you want to do is to replace the function with a mock
+
+00:12:06.680 --> 00:12:10.339
+that behaves as the real function would do.
+
+00:12:10.340 --> 00:12:11.639
+The package I have found
+
+00:12:11.640 --> 00:12:14.319
+and have used for mocking is `el-mock`.
+
+00:12:14.320 --> 00:12:21.839
+The workhorse in this package is the `with-mock` macro.
+
+00:12:21.840 --> 00:12:26.519
+It looks like this: `with-mock` followed by a body.
+
+00:12:26.520 --> 00:12:30.439
+In the execution of the body, stubs and mocks
+
+00:12:30.440 --> 00:12:32.899
+defined in the body is respected.
+
+00:12:32.900 --> 00:12:39.199
+Let's look at some examples to make that clearer.
+
+00:12:39.200 --> 00:12:42.079
+In this case, we have the macro `with-mock`.
+
+00:12:42.080 --> 00:12:43.959
+It works so that the expression
+
+00:12:43.960 --> 00:12:48.639
+`stub + => 10` is interpreted
+
+00:12:48.640 --> 00:12:51.919
+so that the function `+` will be replaced with the stub.
+
+00:12:51.920 --> 00:12:56.779
+The stub will return 10 regardless how it is called.
+
+00:12:56.780 --> 00:12:58.119
+Note that the stub function
+
+00:12:58.120 --> 00:13:00.199
+does not have to be called at this level
+
+00:13:00.200 --> 00:13:02.799
+but could be called at any level in the call chain.
+
+00:13:02.800 --> 00:13:07.479
+By knowing how the function under test is implemented
+
+00:13:07.480 --> 00:13:09.319
+and how the implementation works,
+
+00:13:09.320 --> 00:13:11.959
+you can find function calls you want to mock
+
+00:13:11.960 --> 00:13:14.999
+to force certain behavior that you want to test,
+
+00:13:15.000 --> 00:13:18.999
+or to avoid calls to external resources, slow calls, etc.
+
+00:13:19.000 --> 00:13:21.959
+Simply isolate the function under test
+
+00:13:21.960 --> 00:13:26.119
+and simulate its environment.
+
+00:13:26.120 --> 00:13:28.639
+Mock is a little bit more sophisticated
+
+00:13:28.640 --> 00:13:30.079
+and depends on the arguments
+
+00:13:30.080 --> 00:13:31.479
+that the mock function is called with.
+
+00:13:31.480 --> 00:13:33.847
+Or more precise, it is checked
+
+00:13:33.848 --> 00:13:35.519
+after the `with-mock` clause
+
+00:13:35.520 --> 00:13:38.079
+that the arguments match the arguments it was called with
+
+00:13:38.080 --> 00:13:39.759
+or even if it was called at all.
+
+00:13:39.760 --> 00:13:41.839
+If it is called with other arguments
+
+00:13:41.840 --> 00:13:43.719
+there will be an error,
+
+00:13:43.720 --> 00:13:46.479
+and if it's not called, it is also an error.
+
+00:13:46.480 --> 00:13:48.359
+So this way, we are sure that the function
+
+00:13:48.360 --> 00:13:51.319
+we were expected to be called actually was called.
+
+00:13:51.320 --> 00:13:53.399
+An important piece of the testing.
+
+00:13:53.400 --> 00:13:56.239
+So we are sure that the mock we have provided
+
+00:13:56.240 --> 00:14:03.999
+actually is triggered by the test case.
+
+00:14:04.000 --> 00:14:08.159
+So here we have an example of `with-mock`
+
+00:14:08.160 --> 00:14:18.879
+where the `f1-add` function is mocked,
+
+00:14:18.880 --> 00:14:21.999
+so that if it's called with 2 and 3 as arguments,
+
+00:14:22.000 --> 00:14:24.919
+it will return 10. Then we have a test case
+
+00:14:24.920 --> 00:14:27.999
+where we try the `my-add` function,
+
+00:14:28.000 --> 00:14:30.319
+as you might remember, and call that with 2 and 3
+
+00:14:30.320 --> 00:14:32.799
+and see that it should also then return 10
+
+00:14:32.800 --> 00:14:41.239
+because it's using `f1-add`.
+
+NOTE cl-letf
+
+00:14:41.240 --> 00:14:44.559
+Moving over to `cl-letf`.
+
+00:14:44.560 --> 00:14:47.679
+In rare occasions, the limitations of `el-mock` means
+
+00:14:47.680 --> 00:14:50.239
+you would want to implement a full-fledged function
+
+00:14:50.240 --> 00:14:52.979
+to be used under test.
+
+00:14:52.980 --> 00:14:55.439
+Then the macro `cl-letf` can be useful.
+
+00:14:55.440 --> 00:14:57.879
+However, you need to handle the case yourself
+
+00:14:57.880 --> 00:15:00.099
+if the function was not called.
+
+00:15:00.100 --> 00:15:03.519
+Looking through the test cases where I have used `cl-letf`,
+
+00:15:03.520 --> 00:15:06.119
+I think most can be implemented using plain mocking.
+
+00:15:06.120 --> 00:15:11.239
+Cases left is where the args to the mock might be different
+
+00:15:11.240 --> 00:15:13.739
+due to environment issues.
+
+00:15:13.740 --> 00:15:24.099
+In that case, a static mock will not work.
+
+NOTE Hooks
+
+00:15:24.100 --> 00:15:30.719
+Another trick is that functions that uses hooks.
+
+00:15:30.720 --> 00:15:35.639
+You can overload or replace the hooks to do the testing.
+
+00:15:35.640 --> 00:15:40.759
+So you can use the hook function just to do the verification
+
+00:15:40.760 --> 00:15:43.119
+and not do anything useful in the hook.
+
+00:15:43.120 --> 00:15:45.079
+Also, here you need to be careful
+
+00:15:45.080 --> 00:15:55.719
+to make sure the test handler is called and nothing else.
+
+NOTE Side effects and initial buffer state
+
+00:15:55.720 --> 00:15:57.679
+So far we have been talking about testing
+
+00:15:57.680 --> 00:15:59.039
+and what the function returns.
+
+00:15:59.040 --> 00:16:01.119
+In the best of words, we have a pure function
+
+00:16:01.120 --> 00:16:02.959
+that only depends on its arguments
+
+00:16:02.960 --> 00:16:04.939
+and produces no side effects.
+
+00:16:04.940 --> 00:16:06.899
+Many operations produce side effects
+
+00:16:06.900 --> 00:16:09.479
+or operate on the contents of buffers
+
+00:16:09.480 --> 00:16:12.379
+such as writing a message in the message buffer,
+
+00:16:12.380 --> 00:16:15.659
+change the state of a buffer, move point etc.
+
+00:16:15.660 --> 00:16:18.859
+Hyperbole is not an exception. Quite the contrary.
+
+00:16:18.860 --> 00:16:20.839
+Much of the functions creating links
+
+00:16:20.840 --> 00:16:24.420
+are just about updating buffers.
+
+00:16:24.421 --> 00:16:28.559
+This poses a special problem for tests.
+
+00:16:28.560 --> 00:16:29.839
+The test gets longer
+
+00:16:29.840 --> 00:16:31.919
+since you need to create buffers and files,
+
+00:16:31.920 --> 00:16:33.279
+initialize the contents.
+
+00:16:33.280 --> 00:16:35.159
+Verifying the outcome becomes trickier
+
+00:16:35.160 --> 00:16:39.019
+since you need to make sure you look at the right place.
+
+00:16:39.020 --> 00:16:41.039
+At the end of the test, you need to clean up,
+
+00:16:41.040 --> 00:16:43.439
+both for not leaving a lot of garbage
+
+00:16:43.440 --> 00:16:45.279
+in buffers and files around,
+
+00:16:45.280 --> 00:16:48.479
+and even worse, not cause later tests
+
+00:16:48.480 --> 00:16:50.959
+to depend on the leftovers from the other tests.
+
+00:16:50.960 --> 00:16:53.079
+Here are some functions and variables
+
+00:16:53.080 --> 00:17:05.099
+I have found useful for this.
+
+NOTE with-temp-buffer
+
+00:17:05.100 --> 00:17:09.199
+For creating tests: `with-temp-buffer`:
+
+00:17:09.200 --> 00:17:11.919
+it provides you a temp buffer that you visit,
+
+00:17:11.920 --> 00:17:13.719
+and afterwards, there is no need to clean up.
+
+00:17:13.720 --> 00:17:16.519
+This is the first choice if that is all you need.
+
+NOTE make-temp-file
+
+00:17:16.520 --> 00:17:20.519
+`make-temp-file`: If you need a file,
+
+00:17:20.520 --> 00:17:21.959
+this is the function to use.
+
+00:17:21.960 --> 00:17:24.279
+It creates a temp file or a directory.
+
+00:17:24.280 --> 00:17:26.959
+The file can be filled with initial contents.
+
+00:17:26.960 --> 00:17:31.019
+This needs to be cleaned up after a test.
+
+00:17:31.020 --> 00:17:33.287
+Moving on to verifying and debugging:
+
+NOTE buffer-string
+
+00:17:33.288 --> 00:17:38.247
+`buffer-string`: returns the full contents
+
+00:17:38.248 --> 00:17:39.499
+of the buffer as a string.
+
+00:17:39.500 --> 00:17:41.399
+That can sound a bit voluminous,
+
+00:17:41.400 --> 00:17:46.139
+but since tests are normally small, this often works well.
+
+00:17:46.140 --> 00:17:48.439
+I have in particular found good use of comparing
+
+00:17:48.440 --> 00:17:50.399
+the contents of buffers with the empty string.
+
+00:17:50.400 --> 00:17:53.359
+That would give an error, but as we have seen
+
+00:17:53.360 --> 00:17:56.079
+with the output produced by the `should` assertion,
+
+00:17:56.080 --> 00:17:58.079
+this is almost like a print statement
+
+00:17:58.080 --> 00:18:01.199
+and can be compared with the good old technique
+
+00:18:01.200 --> 00:18:04.399
+of debugging with print statements.
+
+00:18:04.400 --> 00:18:06.247
+There might be other ways to do the same
+
+00:18:06.248 --> 00:18:09.919
+as we saw with debugging.
+
+NOTE buffer-name
+
+00:18:09.920 --> 00:18:13.719
+buffer-name: Getting the buffer name is good
+
+00:18:13.720 --> 00:18:16.239
+to verify what buffer we are looking at.
+
+00:18:16.240 --> 00:18:18.359
+I often found it useful to check
+
+00:18:18.360 --> 00:18:21.119
+that my assumptions on what buffer I am acting on
+
+00:18:21.120 --> 00:18:23.399
+is correct by adding `should` clauses
+
+00:18:23.400 --> 00:18:25.399
+in the middle of the test execution
+
+00:18:25.400 --> 00:18:27.399
+or after preparing the test input.
+
+00:18:27.400 --> 00:18:31.679
+Sometimes Emacs can switch buffers in strange ways,
+
+00:18:31.680 --> 00:18:34.199
+maybe because the test case is badly written,
+
+00:18:34.200 --> 00:18:37.239
+and making sure your assumptions are correct
+
+00:18:37.240 --> 00:18:40.339
+is a good sanity check.
+
+00:18:40.340 --> 00:18:42.239
+Even the ert package does
+
+00:18:42.240 --> 00:18:44.879
+some buffer and windows manipulation for its reporting
+
+00:18:44.880 --> 00:18:47.487
+that I have not fully learned how to master,
+
+00:18:47.488 --> 00:18:51.979
+so assertion for checking the sanity of the test is good.
+
+NOTE major-mode
+
+00:18:51.980 --> 00:18:55.679
+Finally, `major-mode`: Verify the buffer has the proper mode.
+
+00:18:55.680 --> 00:19:02.679
+Can also be very useful and is a good sanity check.
+
+NOTE unwind-protect
+
+00:19:02.680 --> 00:19:06.599
+Finally, cleaning up. `unwind-protect`.
+
+00:19:06.600 --> 00:19:09.039
+The tool for cleaning up is the `unwind-protect` form
+
+00:19:09.040 --> 00:19:12.479
+which ensures that the unwind forms
+
+00:19:12.480 --> 00:19:15.439
+always are executed regardless of the outcome of the body.
+
+00:19:15.440 --> 00:19:20.419
+So if your test fails, you are sure the cleanup is executed.
+
+00:19:20.420 --> 00:19:22.759
+Let's look at unwind-protect together with
+
+00:19:22.760 --> 00:19:30.519
+the temporary file example. Many tests look like this.
+
+00:19:30.520 --> 00:19:35.279
+You create some resource, you call `unwind-protect`,
+
+00:19:35.280 --> 00:19:42.759
+you do the test, and then afterwards you do the cleanup.
+
+00:19:42.760 --> 00:19:46.359
+The cleanup for a file and a buffer is so common,
+
+00:19:46.360 --> 00:19:50.999
+so I have created a helper for that.
+
+00:19:51.000 --> 00:19:56.559
+It looks like this.
+
+00:19:56.560 --> 00:19:59.179
+The trick with the `buffer-modified` flag
+
+00:19:59.180 --> 00:20:00.719
+is to avoid getting prompted
+
+00:20:00.720 --> 00:20:03.219
+for killing a buffer that is not saved.
+
+00:20:03.220 --> 00:20:05.439
+The test buffers are often in the state
+
+00:20:05.440 --> 00:20:15.099
+where they have not been saved but modified.
+
+NOTE Input, with-simulated-input
+
+00:20:15.100 --> 00:20:19.679
+Another problem for tests are input.
+
+00:20:19.680 --> 00:20:21.559
+In the middle of execution a function
+
+00:20:21.560 --> 00:20:24.039
+might want to have some interaction with the user.
+
+00:20:24.040 --> 00:20:26.959
+Testing this poses a problem, not only in that
+
+00:20:26.960 --> 00:20:31.199
+the input matters, but also as how even to get the test case
+
+00:20:31.200 --> 00:20:34.079
+to recognize the input!?
+
+00:20:34.080 --> 00:20:36.039
+Ideally the tests are run in batch mode,
+
+00:20:36.040 --> 00:20:38.919
+which in some sense means no user interaction.
+
+00:20:38.920 --> 00:20:42.999
+In batch mode, there is no event loop running.
+
+00:20:43.000 --> 00:20:47.179
+Fortunately, there is a package `with-simulated-input`
+
+00:20:47.180 --> 00:20:53.259
+that gets you around these issues.
+
+00:20:53.260 --> 00:20:55.399
+This is a macro that allows us
+
+00:20:55.400 --> 00:20:56.999
+to define a set of characters
+
+00:20:57.000 --> 00:20:59.079
+that will be read by the function under the test,
+
+00:20:59.080 --> 00:21:02.579
+and all of this works in batch mode. It looks like this.
+
+00:21:02.580 --> 00:21:04.159
+We have `with-simulated-input`,
+
+00:21:04.160 --> 00:21:09.839
+and then a string of characters, and then a body.
+
+00:21:09.840 --> 00:21:11.647
+The form takes a string of keys
+
+00:21:11.648 --> 00:21:13.119
+and runs the rest of the body,
+
+00:21:13.120 --> 00:21:15.439
+and if there are input required,
+
+00:21:15.440 --> 00:21:18.119
+it is picked from the string of keys.
+
+00:21:18.120 --> 00:21:20.421
+In our example, the `read-string` call
+
+00:21:20.422 --> 00:21:21.719
+will read up until RET,
+
+00:21:21.720 --> 00:21:26.119
+and then return the characters read.
+
+00:21:26.120 --> 00:21:29.639
+As you see in the example, space needs to be provided
+
+00:21:29.640 --> 00:21:38.459
+by the string SPC, as return by the string RET.
+
+NOTE Running all tests
+
+00:21:38.460 --> 00:21:40.799
+So now we have seen ways to create test cases
+
+00:21:40.800 --> 00:21:43.219
+and even make it possible to run some of them
+
+00:21:43.220 --> 00:21:44.679
+that has I/O in batch mode.
+
+00:21:44.680 --> 00:21:47.279
+But the initial goal was to run them all at once.
+
+00:21:47.280 --> 00:21:48.919
+How do you do that?
+
+00:21:48.920 --> 00:21:51.759
+Let's go back to the `ert` command.
+
+00:21:51.760 --> 00:21:53.799
+It prompts for a test selector.
+
+00:21:53.800 --> 00:21:56.279
+If we give it the selector `t`,
+
+00:21:56.280 --> 00:21:59.259
+it will run all tests we have currently defined.
+
+00:21:59.260 --> 00:22:05.779
+Let's try that with the subset of the Hyperbole tests.
+
+00:22:05.780 --> 00:22:09.559
+Here is the test folder in the Hyperbole directory.
+
+00:22:09.560 --> 00:22:18.819
+Let's go up here and load all the demo tests.
+
+00:22:18.820 --> 00:22:21.207
+And then try to run `ert`.
+
+00:22:21.208 --> 00:22:26.119
+Now we see that we have a bunch of test cases.
+
+00:22:26.120 --> 00:22:27.919
+We can all run them individually,
+
+00:22:27.920 --> 00:22:31.719
+but we can run them with `t` instead.
+
+00:22:31.720 --> 00:22:35.459
+We will run them all at once.
+
+00:22:35.460 --> 00:22:51.419
+So now, ert is executing all our test cases.
+
+00:22:51.420 --> 00:22:57.079
+So here we have a nice green display
+
+00:22:57.080 --> 00:23:03.219
+with all the test cases.
+
+NOTE Batch mode
+
+00:23:03.220 --> 00:23:08.159
+So that was fine, but we were still running it manually
+
+00:23:08.160 --> 00:23:11.980
+by calling ert. How could we run it from the command line?
+
+00:23:17.180 --> 00:23:21.499
+Ert comes with functions for running it in batch mode.
+
+00:23:21.500 --> 00:23:25.639
+For Hyperbole, we use `make` for repetitive tasks.
+
+00:23:25.640 --> 00:23:27.119
+So we have a make target
+
+00:23:27.120 --> 00:23:29.279
+that uses the ert batch functionality,
+
+00:23:29.280 --> 00:23:33.259
+and this is the line from the Makefile.
+
+00:23:33.260 --> 00:23:35.479
+This is a bit detailed,
+
+00:23:35.480 --> 00:23:37.539
+but you see that we have a part here
+
+00:23:37.540 --> 00:23:40.779
+where we load the test dependencies.
+
+00:23:40.780 --> 00:23:43.520
+For getting the packages
+
+00:23:43.521 --> 00:23:48.459
+such as `el-mock` and `with-simulated-input` etc. loaded.
+
+00:23:48.460 --> 00:23:53.559
+We also have... I also want to point out here the call to
+
+00:23:53.560 --> 00:23:58.159
+or the setting of `auto-save-default` to `nil`
+
+00:23:58.160 --> 00:24:02.439
+to get away with the prompt for excessive backup files
+
+00:24:02.440 --> 00:24:05.059
+that can pile up after running the tests a few times.
+
+NOTE Skipping tests
+
+00:24:05.060 --> 00:24:06.879
+Even with the help of simulated input,
+
+00:24:06.880 --> 00:24:08.919
+not all tests can be run in batch mode.
+
+00:24:08.920 --> 00:24:10.559
+They would simply not work there
+
+00:24:10.560 --> 00:24:12.439
+and have to be run in an interactive Emacs
+
+00:24:12.440 --> 00:24:14.179
+with the running event loop.
+
+00:24:14.180 --> 00:24:17.919
+One trick still to be able to use batch mode for automation
+
+00:24:17.920 --> 00:24:20.319
+is to put the guard at the top of each test case
+
+00:24:20.320 --> 00:24:22.559
+as the first thing to be executed,
+
+00:24:22.560 --> 00:24:25.719
+so that it kicks in before anything else and stops Emacs
+
+00:24:25.720 --> 00:24:27.199
+to try to run the test case.
+
+00:24:27.200 --> 00:24:35.519
+Now, it looks like this: `(skip-unless (not noninteractive))`.
+
+00:24:35.520 --> 00:24:38.639
+So when ert sees that the test should be skipped, it skips it
+
+00:24:38.640 --> 00:24:40.439
+and makes a note of that,
+
+00:24:40.440 --> 00:24:44.579
+so you will see how many tests that have been skipped.
+
+00:24:44.580 --> 00:24:47.559
+Too bad. We have a number of test cases defined,
+
+00:24:47.560 --> 00:24:51.359
+and to run them, we need to run them manually. Well sort of.
+
+00:24:51.360 --> 00:24:53.807
+Not being able to run all tests easily
+
+00:24:53.808 --> 00:24:58.419
+is a bit counterproductive
+
+00:24:58.420 --> 00:25:00.999
+since our goal is to run all tests.
+
+00:25:01.000 --> 00:25:04.719
+There is however no ert function to run tests in batch mode
+
+00:25:04.720 --> 00:25:06.779
+with an interactive Emacs.
+
+00:25:06.780 --> 00:25:08.479
+The closest I have got is either
+
+00:25:08.480 --> 00:25:10.079
+to start the Emacs from the command line
+
+00:25:10.080 --> 00:25:12.439
+calling the ert function as we just have seen,
+
+00:25:12.440 --> 00:25:14.799
+and then killing it manually when done;
+
+00:25:14.800 --> 00:25:19.599
+or add a function to extract the contents of the ERT buffer
+
+00:25:19.600 --> 00:25:24.599
+when done and echo it to standard output.
+
+00:25:24.600 --> 00:25:27.800
+This is how it looks in the Makefile
+
+00:25:27.801 --> 00:25:31.207
+to get the behavior of cutting and paste,
+
+00:25:31.208 --> 00:25:34.580
+getting the ERT output into a file
+
+00:25:34.581 --> 00:25:36.239
+so we can then kill Emacs
+
+00:25:36.240 --> 00:25:44.799
+and spit out the content of the ERT buffer.
+
+00:25:44.800 --> 00:25:47.739
+One final word here is that
+
+00:25:47.740 --> 00:25:54.559
+when you run this in a continuous integration pipeline,
+
+00:25:54.560 --> 00:25:59.399
+you might not have a TTY for getting Emacs to start,
+
+00:25:59.400 --> 00:26:03.200
+and that is then another problem
+
+00:26:03.201 --> 00:26:05.160
+with getting the interactive mode.
+
+NOTE Conclusion
+
+00:26:08.460 --> 00:26:11.120
+We have reached the end of the talk.
+
+00:26:11.121 --> 00:26:14.159
+If you have any new ideas
+
+00:26:14.160 --> 00:26:16.759
+or have some suggestions for improvements,
+
+00:26:16.760 --> 00:26:18.239
+feel free to reach out
+
+00:26:18.240 --> 00:26:21.100
+because I am still on the learning curve of writing,
+
+00:26:21.101 --> 00:26:25.299
+how to write good test cases.
+
+00:26:25.300 --> 00:26:27.639
+If you look at the test cases we have in Hyperbole
+
+00:26:27.640 --> 00:26:29.799
+and you think they might contradict what I am saying here,
+
+00:26:29.800 --> 00:26:32.579
+it is OK. It is probably right.
+
+00:26:32.580 --> 00:26:34.599
+I have changed the style as I go
+
+00:26:34.600 --> 00:26:36.639
+and we have not yet refactored all tests
+
+00:26:36.640 --> 00:26:38.579
+to benefit from new designs.
+
+00:26:38.580 --> 00:26:40.599
+That is also the beauty of the test case.
+
+00:26:40.600 --> 00:26:43.319
+As long as it serves its purpose, it is not terrible
+
+00:26:43.320 --> 00:26:47.799
+if it is not optimal or not having the best style.
+
+00:26:47.800 --> 00:26:55.240
+And yes, thanks for listening. Bye.
diff --git a/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt b/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt
new file mode 100644
index 00000000..a10fafef
--- /dev/null
+++ b/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt
@@ -0,0 +1,788 @@
+WEBVTT
+
+
+00:00:01.220 --> 00:00:03.580
+Hello, I'm Alexey Bychkadov,
+
+00:00:03.740 --> 00:00:06.899
+and I'm talking about unentangling projects
+
+00:00:06.899 --> 00:00:09.679
+and repositories, or maybe entangling them,
+
+00:00:09.679 --> 00:00:11.340
+depending on how you look at that.
+
+00:00:12.980 --> 00:00:15.740
+So there's going to be a short workflow note.
+
+00:00:16.619 --> 00:00:19.460
+I work as a researcher,
+
+00:00:19.940 --> 00:00:23.380
+So there are 3 main components to my work,
+
+00:00:23.680 --> 00:00:26.000
+I guess. First, I think,
+
+00:00:26.000 --> 00:00:28.140
+so I try to come up with a new ideas that
+
+00:00:28.140 --> 00:00:31.580
+usually results in some collection of notes I
+
+00:00:31.580 --> 00:00:33.760
+have. Second, I try things out.
+
+00:00:33.760 --> 00:00:36.180
+So it usually means that I write code.
+
+00:00:36.820 --> 00:00:38.540
+And third, I communicate.
+
+00:00:38.739 --> 00:00:40.739
+So I prepare papers, presentations,
+
+00:00:41.260 --> 00:00:43.160
+memos, and so on and so forth.
+
+00:00:44.120 --> 00:00:47.940
+And so The workflow problem I had is
+
+00:00:49.160 --> 00:00:53.000
+sometimes all this does not really fit into a
+
+00:00:53.000 --> 00:00:56.180
+concept of a single repository per project.
+
+00:00:56.200 --> 00:00:57.540
+So I might want to have,
+
+00:00:58.180 --> 00:01:01.160
+for example, a source code in 1 repository
+
+00:01:01.320 --> 00:01:03.480
+and then I would like to have a paper in
+
+00:01:03.480 --> 00:01:05.200
+another 1 and then I want to have a
+
+00:01:05.200 --> 00:01:08.620
+collection of notes somewhere unrelated to
+
+00:01:08.620 --> 00:01:12.500
+those 2. Emacs is pretty good at supporting
+
+00:01:12.500 --> 00:01:15.840
+your workflows and I figured I should share
+
+00:01:16.240 --> 00:01:18.100
+what I used and what works for me.
+
+00:01:20.560 --> 00:01:24.900
+So, from the technical perspective,
+
+00:01:26.479 --> 00:01:27.940
+things are pretty easy.
+
+00:01:27.940 --> 00:01:30.720
+So I use a collection of pretty standard
+
+00:01:30.720 --> 00:01:33.240
+components of Emacs. So it's a projectile org
+
+00:01:33.240 --> 00:01:35.360
+mode with this capture templates and other
+
+00:01:35.360 --> 00:01:38.100
+things. Then I sustained a collection of
+
+00:01:38.100 --> 00:01:40.360
+nodes in something that is called org-roam,
+
+00:01:40.680 --> 00:01:43.520
+which is essentially it's a glorified
+
+00:01:43.580 --> 00:01:45.580
+collection of org mode files.
+
+00:01:46.100 --> 00:01:48.160
+Then I used directory local variables,
+
+00:01:48.260 --> 00:01:51.140
+maybe a C text to jump through the source
+
+00:01:51.140 --> 00:01:54.920
+code and very, very little LELisp glue to
+
+00:01:54.920 --> 00:01:57.620
+make this all work, but that's not really
+
+00:01:58.620 --> 00:02:00.400
+rocket science. So that's the workflow I
+
+00:02:00.400 --> 00:02:02.180
+would like to talk about today.
+
+00:02:04.860 --> 00:02:07.120
+So what I mean by all that,
+
+00:02:07.960 --> 00:02:10.280
+it's pretty straightforward to make Emacs,
+
+00:02:10.680 --> 00:02:12.720
+to make it easy to jump around a single
+
+00:02:12.720 --> 00:02:14.980
+repository in Emacs. So if I,
+
+00:02:15.060 --> 00:02:16.640
+Now I have Doom Emacs,
+
+00:02:16.640 --> 00:02:18.740
+but that's not really specific to a Doom
+
+00:02:19.120 --> 00:02:23.160
+that'll work in any Emacs configuration.
+
+00:02:23.400 --> 00:02:27.720
+Well, key bindings might be different,
+
+00:02:27.720 --> 00:02:28.820
+but that's not the point,
+
+00:02:28.820 --> 00:02:29.940
+I guess, for the workflow.
+
+00:02:30.060 --> 00:02:31.960
+So if I hit space 2 times,
+
+00:02:31.960 --> 00:02:34.640
+I have all the list of files within my
+
+00:02:34.640 --> 00:02:38.200
+project, right? So if I create a couple of
+
+00:02:38.200 --> 00:02:42.780
+custom shortcuts, so if I press a magic
+
+00:02:42.780 --> 00:02:45.280
+button, hyper-OP, don't worry about
+
+00:02:45.280 --> 00:02:47.460
+hyper-key. So I want it to have a modifier
+
+00:02:47.560 --> 00:02:50.140
+key all to myself, so that would,
+
+00:02:50.320 --> 00:02:53.200
+no program on my computer would use that
+
+00:02:53.200 --> 00:02:55.680
+except Emacs. Emacs would use that only when
+
+00:02:55.680 --> 00:02:57.540
+I tell it to, so I have a hyper key instead
+
+00:02:57.540 --> 00:03:00.720
+of caps lock. That's pretty easy to do in GNU
+
+00:03:00.720 --> 00:03:04.940
+Linux system. So when I press this magic
+
+00:03:04.940 --> 00:03:07.400
+keys, I have a menu that's a normal key
+
+00:03:07.400 --> 00:03:09.940
+binding. Yeah, essentially an Emacs.
+
+00:03:10.240 --> 00:03:12.260
+And if I hit, for example,
+
+00:03:12.540 --> 00:03:15.200
+R, I end up in a readme file within this
+
+00:03:15.200 --> 00:03:17.320
+specific repository I was sitting in,
+
+00:03:17.320 --> 00:03:19.000
+right? So if I want to document something
+
+00:03:19.000 --> 00:03:21.420
+real quick, I go to the readme file.
+
+00:03:21.680 --> 00:03:25.280
+Then I could go to a change log file,
+
+00:03:25.280 --> 00:03:27.440
+right? So I have a list of changes and the
+
+00:03:27.440 --> 00:03:29.480
+way it works usually, for example,
+
+00:03:29.480 --> 00:03:31.140
+if I'm working in some code,
+
+00:03:32.220 --> 00:03:34.280
+I created a couple of dummy files in there,
+
+00:03:34.280 --> 00:03:36.560
+so I'm working in some code and then I
+
+00:03:36.560 --> 00:03:41.780
+implemented something and I can just use the
+
+00:03:42.020 --> 00:03:46.860
+org mode capture mechanisms to keep track of
+
+00:03:46.860 --> 00:03:48.880
+what I want to discuss with colleagues next
+
+00:03:48.880 --> 00:03:52.160
+time. For example, I could just hit capture
+
+00:03:52.440 --> 00:03:56.200
+repo specific changelog entry and I
+
+00:03:56.200 --> 00:04:02.620
+implemented a feature and I can continue
+
+00:04:02.620 --> 00:04:04.340
+working without this context switching.
+
+00:04:04.340 --> 00:04:06.500
+And then if I want to go to the change log,
+
+00:04:06.880 --> 00:04:11.320
+well, it is there. And next time I talk to
+
+00:04:11.320 --> 00:04:12.720
+the colleagues about the source code,
+
+00:04:12.720 --> 00:04:14.340
+I can open the change log and go through
+
+00:04:14.340 --> 00:04:16.800
+entries 1 by 1 and discuss what I haven't
+
+00:04:16.800 --> 00:04:18.980
+implemented last time.
+
+00:04:19.540 --> 00:04:22.580
+I could go to project specific,
+
+00:04:24.100 --> 00:04:26.320
+sorry, to repo specific to-do list.
+
+00:04:26.320 --> 00:04:29.020
+And I have list of to-dos that would leave
+
+00:04:29.020 --> 00:04:31.320
+within a repository. And for example,
+
+00:04:31.320 --> 00:04:34.020
+I could have a high level structure here,
+
+00:04:34.640 --> 00:04:36.460
+work distribution between team members and
+
+00:04:36.460 --> 00:04:39.380
+other things that sort of face outer world,
+
+00:04:39.380 --> 00:04:41.260
+so to speak. And of course,
+
+00:04:42.840 --> 00:04:45.400
+there are very many ways to jump through the
+
+00:04:45.400 --> 00:04:46.420
+source code conveniently.
+
+00:04:46.560 --> 00:04:49.960
+I ended up not using language servers I use a
+
+00:04:49.960 --> 00:04:53.320
+special program called ctags and so the way
+
+00:04:53.320 --> 00:04:56.420
+it works is just I call projectile regenerate
+
+00:04:56.680 --> 00:05:00.460
+tags and it creates the special tags file
+
+00:05:00.460 --> 00:05:05.260
+within the repository and then I can again
+
+00:05:06.240 --> 00:05:11.260
+run it I usually just hit a single keystroke
+
+00:05:11.520 --> 00:05:14.060
+and here is all the symbols that are there in
+
+00:05:14.060 --> 00:05:17.160
+my source code, regardless of the language,
+
+00:05:17.160 --> 00:05:19.540
+right? So I can jump to the main function and
+
+00:05:19.540 --> 00:05:21.020
+that'll be a C++ file.
+
+00:05:21.020 --> 00:05:22.740
+Or I could go to the super function,
+
+00:05:22.740 --> 00:05:25.340
+which I had in my Python file.
+
+00:05:25.380 --> 00:05:27.120
+And this comes in pretty convenient if I have
+
+00:05:27.120 --> 00:05:28.220
+a mixture of languages.
+
+00:05:28.360 --> 00:05:30.800
+Sometimes I can have some algorithm specific
+
+00:05:30.800 --> 00:05:33.000
+code in Julia, and then I can have some
+
+00:05:33.280 --> 00:05:35.380
+Python glue within the same source code
+
+00:05:35.380 --> 00:05:37.940
+repository, it makes it really convenient to
+
+00:05:39.720 --> 00:05:41.780
+jump between all of those.
+
+00:05:43.080 --> 00:05:46.980
+But I have a few problems here.
+
+00:05:47.360 --> 00:05:49.800
+So just to give you a little bit of context,
+
+00:05:49.860 --> 00:05:53.100
+for example, here is a real project that
+
+00:05:53.100 --> 00:05:54.440
+corresponds to real paper.
+
+00:05:55.840 --> 00:05:59.060
+I have a single note about that project where
+
+00:05:59.060 --> 00:06:01.780
+I keep all the things related to that project
+
+00:06:01.780 --> 00:06:03.260
+here, but that's a private note.
+
+00:06:03.260 --> 00:06:04.860
+So for example, again,
+
+00:06:04.860 --> 00:06:08.040
+I hit a special key that invokes my org-roam
+
+00:06:08.640 --> 00:06:12.680
+function that gives me a menu of my notes.
+
+00:06:13.080 --> 00:06:15.200
+And so here is the paper,
+
+00:06:15.200 --> 00:06:17.500
+essentially. And I can have a paper timeline,
+
+00:06:17.900 --> 00:06:21.180
+and I can have a list of all the dates what
+
+00:06:21.180 --> 00:06:23.940
+happened to the paper with links to my email,
+
+00:06:24.060 --> 00:06:27.700
+right? So for example if I hit this link that
+
+00:06:27.700 --> 00:06:30.160
+will open a specific email and that doesn't
+
+00:06:30.160 --> 00:06:31.280
+work outside of my computer,
+
+00:06:31.280 --> 00:06:33.140
+doesn't make any sense to keep it in the
+
+00:06:33.340 --> 00:06:35.500
+outer world facing repository,
+
+00:06:35.500 --> 00:06:37.360
+for example. So that's something to myself,
+
+00:06:37.360 --> 00:06:41.420
+right? Sometimes I want to have like this
+
+00:06:41.480 --> 00:06:43.940
+list of working notes,
+
+00:06:43.940 --> 00:06:45.780
+right, that contain like,
+
+00:06:45.780 --> 00:06:49.200
+for example, yeah, I might produce this kind
+
+00:06:49.200 --> 00:06:50.620
+of things for internal discussion,
+
+00:06:50.640 --> 00:06:52.500
+right? It has some marks,
+
+00:06:52.500 --> 00:06:54.620
+it has some margin notes and things like
+
+00:06:54.620 --> 00:06:57.620
+that. Maybe again, health-based ideas that
+
+00:06:57.620 --> 00:07:00.300
+may or may not end up in a repository,
+
+00:07:01.020 --> 00:07:03.220
+in the final paper or in a source code,
+
+00:07:03.220 --> 00:07:05.880
+but still I want to have it somewhere.
+
+00:07:07.120 --> 00:07:08.600
+And well, long story short,
+
+00:07:08.800 --> 00:07:11.680
+I need a project folder that would be
+
+00:07:11.680 --> 00:07:16.120
+unrelated to the source code or to the source
+
+00:07:16.120 --> 00:07:19.440
+code repository or to the paper itself or a
+
+00:07:19.440 --> 00:07:22.780
+final report, right? And 1 way,
+
+00:07:22.960 --> 00:07:24.720
+as usual, there are multiple ways to achieve
+
+00:07:24.720 --> 00:07:27.660
+that, I suppose. And 1 way to do that is,
+
+00:07:29.040 --> 00:07:33.160
+so I create a special folder within my
+
+00:07:33.160 --> 00:07:38.100
+org-roam storage. So it's a special folder
+
+00:07:38.240 --> 00:07:40.940
+outside of Henry Postories that got backed up
+
+00:07:40.940 --> 00:07:43.940
+to my hard drive with certain redundancy,
+
+00:07:44.080 --> 00:07:46.720
+but I don't really need like version control,
+
+00:07:46.720 --> 00:07:48.280
+full blown version control for that.
+
+00:07:48.280 --> 00:07:49.760
+I'm okay with just having a couple of
+
+00:07:49.760 --> 00:07:52.900
+backups, right? So this is the folder you see
+
+00:07:52.900 --> 00:07:55.320
+here. So PKB stands for personal knowledge
+
+00:07:55.320 --> 00:07:58.020
+base, and I have a folder project notes in
+
+00:07:58.020 --> 00:08:01.520
+there, right? So, and How does it work?
+
+00:08:01.680 --> 00:08:04.940
+So I have a folder per project in there,
+
+00:08:05.020 --> 00:08:07.900
+essentially. And here I can have all the
+
+00:08:07.900 --> 00:08:11.480
+stuff that kind of belongs to me and I do not
+
+00:08:11.480 --> 00:08:14.180
+publish it anywhere. And then,
+
+00:08:15.420 --> 00:08:20.280
+For example, a source code repository knows
+
+00:08:20.460 --> 00:08:23.240
+about that folder and a paper repository
+
+00:08:23.460 --> 00:08:25.120
+knows about that folder.
+
+00:08:25.120 --> 00:08:26.820
+And anything else that might leave in
+
+00:08:26.820 --> 00:08:28.820
+separate places all over my system can know
+
+00:08:28.820 --> 00:08:30.800
+about that folder. How do I achieve that?
+
+00:08:30.940 --> 00:08:33.539
+Well, essentially this is 1 of the use cases
+
+00:08:34.400 --> 00:08:35.940
+for the directory local variables,
+
+00:08:36.360 --> 00:08:39.100
+right? So for example,
+
+00:08:39.520 --> 00:08:41.539
+how does it work from the user perspective?
+
+00:08:41.580 --> 00:08:43.760
+So if I hit a special key,
+
+00:08:44.380 --> 00:08:46.900
+oh, sorry, if I hit a special key,
+
+00:08:48.280 --> 00:08:51.060
+that would be open project.
+
+00:08:51.680 --> 00:08:55.920
+And then for example, org mode file,
+
+00:08:55.920 --> 00:08:58.260
+right? So this is my personal notes about the
+
+00:08:58.260 --> 00:09:01.260
+maxconf, not specifically about this very
+
+00:09:01.260 --> 00:09:02.580
+talk, but I can have, you know,
+
+00:09:02.580 --> 00:09:04.580
+the house baked ideas here again,
+
+00:09:04.760 --> 00:09:06.680
+presentation tools and things like that.
+
+00:09:07.440 --> 00:09:09.860
+And how does that happen?
+
+00:09:09.940 --> 00:09:13.080
+If we try to like look at the code,
+
+00:09:13.080 --> 00:09:14.660
+the e-list magic here,
+
+00:09:15.040 --> 00:09:17.560
+what is happening is it's just a couple of
+
+00:09:17.560 --> 00:09:18.720
+lines of code, in fact,
+
+00:09:18.720 --> 00:09:21.100
+so let me just press Control,
+
+00:09:22.540 --> 00:09:28.140
+help key. And so the key I was pressing is
+
+00:09:28.140 --> 00:09:30.220
+open project or my file.
+
+00:09:30.480 --> 00:09:32.220
+And so what we see here,
+
+00:09:32.220 --> 00:09:34.760
+there is a single, so it's just a call to a
+
+00:09:34.760 --> 00:09:37.200
+find file function. So I opened that file and
+
+00:09:37.200 --> 00:09:40.580
+there is a special function that figures out
+
+00:09:40.580 --> 00:09:44.620
+what is the like umbrella project nose file
+
+00:09:44.620 --> 00:09:46.600
+and that's, again, that's very easy.
+
+00:09:47.380 --> 00:09:51.420
+So essentially if a variable describing this,
+
+00:09:51.820 --> 00:09:54.860
+the name for that project is defined,
+
+00:09:54.860 --> 00:09:57.440
+then I use that as my project folder name.
+
+00:09:57.440 --> 00:09:59.700
+If not, I take the project name from the
+
+00:10:00.480 --> 00:10:03.340
+project tile. Well, that's pretty much it.
+
+00:10:03.340 --> 00:10:08.800
+And how do I define this variable?
+
+00:10:09.280 --> 00:10:12.500
+Is essentially there is this magical file in
+
+00:10:12.500 --> 00:10:14.160
+a folder called dear locals,
+
+00:10:14.440 --> 00:10:17.380
+elist. And I just put it there.
+
+00:10:17.440 --> 00:10:20.380
+And then whenever I go into that folder or
+
+00:10:20.380 --> 00:10:22.300
+any of its children folders,
+
+00:10:22.300 --> 00:10:23.860
+I get this variable defined.
+
+00:10:24.840 --> 00:10:26.260
+And that's pretty much it.
+
+00:10:26.280 --> 00:10:28.880
+That's how it works for me.
+
+00:10:31.860 --> 00:10:34.620
+I guess 1 thing that I wanted to emphasize
+
+00:10:35.380 --> 00:10:37.360
+specifically about that is of course,
+
+00:10:37.940 --> 00:10:39.720
+it is a time tracking,
+
+00:10:39.720 --> 00:10:42.260
+right? So what is I find especially important
+
+00:10:42.260 --> 00:10:44.280
+when I work in something and I want to clock
+
+00:10:44.340 --> 00:10:47.620
+time, I usually do not want this information
+
+00:10:47.800 --> 00:10:50.340
+to be in a source code repository or in a
+
+00:10:50.340 --> 00:10:52.600
+paper repository because other people I work
+
+00:10:52.600 --> 00:10:54.840
+with will not be particularly happy about
+
+00:10:54.840 --> 00:10:57.540
+that, especially if most of them do not use
+
+00:10:57.540 --> 00:11:00.720
+Emacs and they'll see this long list of org
+
+00:11:00.720 --> 00:11:03.820
+clocked data and that doesn't look nice in a
+
+00:11:03.820 --> 00:11:07.540
+plain text format. So what I usually do if I
+
+00:11:07.540 --> 00:11:10.240
+want to clock in some time and then later
+
+00:11:10.240 --> 00:11:12.560
+analyze what I've been spending time on,
+
+00:11:12.560 --> 00:11:16.880
+so I go to my org mode file and I go to the,
+
+00:11:16.880 --> 00:11:21.820
+my current project to-dos and I clock in
+
+00:11:21.820 --> 00:11:23.940
+there. And that's how it works.
+
+00:11:23.940 --> 00:11:28.860
+So again, what comes in handy,
+
+00:11:28.860 --> 00:11:31.500
+if I hit Control O, I just go back to the
+
+00:11:31.500 --> 00:11:34.240
+file I jumped in into and that's I jumped
+
+00:11:34.240 --> 00:11:35.900
+from so that's also pretty handy.
+
+00:11:36.220 --> 00:11:38.800
+So again no no rocket science in there.
+
+00:11:40.380 --> 00:11:42.660
+So I create a directory local variable that
+
+00:11:42.660 --> 00:11:46.100
+helps me to figure out what umbrella project
+
+00:11:46.620 --> 00:11:49.720
+does this particular folder belongs to.
+
+00:11:49.940 --> 00:11:53.260
+And this way I make Emacs aware of,
+
+00:11:53.260 --> 00:11:54.480
+for example, facts like,
+
+00:11:54.480 --> 00:11:56.740
+so this source code belongs to that project.
+
+00:11:56.740 --> 00:11:59.080
+And this paper, this repository with a paper
+
+00:11:59.180 --> 00:12:00.640
+also belongs to that project.
+
+00:12:01.060 --> 00:12:04.040
+And I can have capture templates that would
+
+00:12:04.060 --> 00:12:07.580
+save my notes into the my private notes file
+
+00:12:07.800 --> 00:12:10.460
+and my to-dos and go to my private note files
+
+00:12:10.920 --> 00:12:12.260
+and so on and so forth.
+
+00:12:12.260 --> 00:12:15.520
+So I find it pretty simple but that really
+
+00:12:15.520 --> 00:12:19.540
+helps to reduce this context switching.
+
+00:12:19.600 --> 00:12:22.040
+And I don't believe it allows me to save
+
+00:12:22.040 --> 00:12:26.260
+time, but that probably helps me to stay
+
+00:12:26.260 --> 00:12:28.420
+focused. And this is what is really
+
+00:12:28.420 --> 00:12:31.400
+important, I believe. So thank you very much.
+
+00:12:31.400 --> 00:12:33.220
+And if you have any comments or suggestions
+
+00:12:33.320 --> 00:12:35.940
+to that, please do jump into the discussion.
+
+00:12:37.120 --> 00:12:38.900
+Yeah, after the talk, thank you.
diff --git a/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt
new file mode 100644
index 00000000..0b52ec59
--- /dev/null
+++ b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt
@@ -0,0 +1,1202 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:01.839
+[Speaker 0]: You can hear us. Can you perhaps do it for
+
+00:00:01.839 --> 00:00:03.740
+me? Great. The little angels in the
+
+00:00:03.740 --> 00:00:05.140
+background have done it for me.
+
+00:00:05.240 --> 00:00:07.759
+So now finally that everything is ready.
+
+00:00:07.759 --> 00:00:09.099
+Hi James, how are you doing?
+
+00:00:13.780 --> 00:00:14.599
+Good morning. Hello. Well,
+
+00:00:14.599 --> 00:00:16.320
+thank you for your talk and sorry for the
+
+00:00:16.320 --> 00:00:19.240
+little hiccup at the middle we had to pull
+
+00:00:19.240 --> 00:00:20.900
+out a fire with the audio going out in the
+
+00:00:20.900 --> 00:00:22.580
+middle and sorry about this.
+
+00:00:23.140 --> 00:00:24.040
+[Speaker 1]: It's no trouble.
+
+00:00:25.240 --> 00:00:28.680
+[Speaker 0]: So James, you've obviously told us about your
+
+00:00:28.680 --> 00:00:30.220
+very fancy setup with the green screen and
+
+00:00:30.220 --> 00:00:32.840
+I'm sad to see that you haven't put out the
+
+00:00:32.840 --> 00:00:35.579
+green screen for your BBB session right now.
+
+00:00:35.579 --> 00:00:37.060
+Do you have it in the background just for
+
+00:00:37.060 --> 00:00:40.400
+you? Right, okay, it wasn't that far.
+
+00:00:40.600 --> 00:00:44.180
+Great. So I'm just going to ask,
+
+00:00:44.180 --> 00:00:47.440
+so this is the first live Q&A that we have
+
+00:00:47.440 --> 00:00:49.300
+for the session so things might be coming
+
+00:00:49.300 --> 00:00:51.600
+into place so pardon us if we take a little
+
+00:00:51.600 --> 00:00:54.340
+bit of time to put the questions on the
+
+00:00:54.340 --> 00:00:55.780
+screen and all of this.
+
+00:00:56.400 --> 00:00:57.940
+What I'm going to do, I'm just going to load
+
+00:00:57.940 --> 00:01:02.660
+up the pad. I would invite James to also open
+
+00:01:02.660 --> 00:01:04.200
+the pad on his hand. So yeah,
+
+00:01:04.200 --> 00:01:05.740
+I've got people talking in my ears and it's
+
+00:01:05.740 --> 00:01:07.740
+been a while since I've last had this.
+
+00:01:08.260 --> 00:01:11.979
+And okay, so opening the talks right now,
+
+00:01:12.100 --> 00:01:14.120
+opening the pad if I can find it.
+
+00:01:14.120 --> 00:01:19.020
+Open up the pad. Okay.
+
+00:01:19.200 --> 00:01:21.240
+So have you got a pad open on your end,
+
+00:01:21.240 --> 00:01:22.800
+James? So I can read the question.
+
+00:01:23.119 --> 00:01:26.740
+So, okay, great. Opening it on my end as
+
+00:01:26.740 --> 00:01:28.360
+well. What I'm going to do,
+
+00:01:28.360 --> 00:01:30.360
+folks, I see some of you have joined us.
+
+00:01:39.900 --> 00:01:42.500
+I'm going to start doing is first taking
+
+00:01:42.500 --> 00:01:44.220
+questions in the other part because it's a
+
+00:01:44.220 --> 00:01:46.200
+little faster to ask questions like this.
+
+00:01:46.520 --> 00:01:48.160
+And then as soon as we've finished,
+
+00:01:48.160 --> 00:01:49.920
+feel free to unmute yourself and ask your
+
+00:01:49.920 --> 00:01:54.180
+questions. All right so I've got some
+
+00:01:54.180 --> 00:01:57.660
+reactions about OBS being cool and yes both
+
+00:01:57.660 --> 00:01:59.340
+James and I will be able to tell you that
+
+00:01:59.340 --> 00:02:01.720
+it's very cool we do very fancy stuff like
+
+00:02:04.060 --> 00:02:05.640
+when I need to talk to production in the
+
+00:02:05.640 --> 00:02:07.540
+background and all the stuff obviously that
+
+00:02:07.540 --> 00:02:09.160
+James has been able to show you with a green
+
+00:02:09.160 --> 00:02:12.800
+screen. So I don't see a whole lot of
+
+00:02:12.800 --> 00:02:15.560
+questions so far. I see a lot of reactions on
+
+00:02:16.020 --> 00:02:17.760
+publishing lectures book and of a classic
+
+00:02:17.760 --> 00:02:19.700
+example is John Kitchens obviously.
+
+00:02:20.900 --> 00:02:22.180
+Pedagogy first developments.
+
+00:02:23.360 --> 00:02:24.660
+Macros are a cool idea.
+
+00:02:25.680 --> 00:02:28.820
+Okay questions. So how do you overlap
+
+00:02:28.820 --> 00:02:30.160
+yourself with a presentation.
+
+00:02:30.420 --> 00:02:34.680
+It's so cool. It's quite simple.
+
+00:02:36.420 --> 00:02:40.200
+[Speaker 1]: OBS provides filters for every...
+
+00:02:40.200 --> 00:02:42.440
+You can have a separate filter for each video
+
+00:02:42.440 --> 00:02:44.960
+feed and 1 of the filters that's available is
+
+00:02:44.960 --> 00:02:47.840
+chroma key. You just choose a color to make
+
+00:02:47.840 --> 00:02:52.020
+transparent and just make sure that the
+
+00:02:52.020 --> 00:02:56.140
+webcam is at the top of the composition.
+
+00:02:57.180 --> 00:03:00.900
+And the thing that surprised me the most was
+
+00:03:00.900 --> 00:03:05.420
+how quickly my brain was able to mirror
+
+00:03:05.420 --> 00:03:07.360
+everything and control my body from a
+
+00:03:07.360 --> 00:03:10.720
+separate point of view like the way weather
+
+00:03:10.720 --> 00:03:15.300
+broadcasts are done. It took seconds to be
+
+00:03:15.300 --> 00:03:16.980
+able to do that. Well,
+
+00:03:16.980 --> 00:03:20.200
+and now I have years of practice because that
+
+00:03:20.320 --> 00:03:22.740
+set up that you saw that I used to record
+
+00:03:22.740 --> 00:03:26.960
+this video. I used for years during the
+
+00:03:26.960 --> 00:03:32.180
+pandemic for 4 or 5 semesters to because my
+
+00:03:32.180 --> 00:03:33.760
+courses are all have 2,
+
+00:03:33.760 --> 00:03:36.440
+3, 400 students, except for the English
+
+00:03:36.440 --> 00:03:38.200
+class, which has, you know,
+
+00:03:38.200 --> 00:03:41.100
+30 students. And so during the pandemic,
+
+00:03:41.200 --> 00:03:44.040
+and even after lockdowns were no longer
+
+00:03:44.040 --> 00:03:46.160
+mandated, I taught online just because I
+
+00:03:46.160 --> 00:03:48.340
+didn't want to have so many students in the
+
+00:03:48.340 --> 00:03:49.500
+room at the same time.
+
+00:03:49.600 --> 00:03:53.680
+So I've yeah, I'm it. I have a lot of
+
+00:03:53.680 --> 00:03:54.840
+practice doing that.
+
+00:03:56.120 --> 00:03:58.300
+[Speaker 0]: But it pays off because it looks so natural,
+
+00:03:58.300 --> 00:04:00.140
+you know, it feels like it's the same thing
+
+00:04:00.140 --> 00:04:01.520
+with weathercasters, you know,
+
+00:04:01.520 --> 00:04:03.940
+it sounds very it looks very easy to do,
+
+00:04:03.940 --> 00:04:05.780
+but it also takes quite a bit of practice.
+
+00:04:07.020 --> 00:04:08.300
+1 of the things that you also need to
+
+00:04:08.300 --> 00:04:10.160
+remember if you're using a chroma key that
+
+00:04:10.160 --> 00:04:11.880
+James has explained is that you need to have
+
+00:04:11.880 --> 00:04:14.360
+very good lighting, basically for the color
+
+00:04:14.440 --> 00:04:16.320
+to pop out in the background and for your
+
+00:04:16.320 --> 00:04:18.360
+body to be easily highlightable.
+
+00:04:19.399 --> 00:04:21.240
+Okay, were you finished with this question?
+
+00:04:23.240 --> 00:04:24.980
+[Speaker 1]: Yeah, let's take another 1.
+
+00:04:25.640 --> 00:04:28.580
+[Speaker 0]: Sure. So how do you deal with video in Beam?
+
+00:04:28.700 --> 00:04:30.720
+I found it so hard to do that.
+
+00:04:30.720 --> 00:04:33.060
+PPT on the other end is easier to achieve.
+
+00:04:36.380 --> 00:04:41.480
+[Speaker 1]: Yeah, so remember that the slides get
+
+00:04:41.480 --> 00:04:46.960
+produced from Org Mode as PDFs.
+
+00:04:47.540 --> 00:04:50.080
+Well, and in fact, I even before when I was
+
+00:04:50.080 --> 00:04:52.540
+using other software to produce slides,
+
+00:04:52.580 --> 00:04:54.220
+I produced them as PDFs,
+
+00:04:54.720 --> 00:04:56.840
+precisely because I wanted to be able to mark
+
+00:04:56.840 --> 00:05:00.040
+them up on on the screen with the stylus.
+
+00:05:02.100 --> 00:05:05.960
+And so I don't do video in the slides.
+
+00:05:06.140 --> 00:05:09.140
+I use OBS to switch from static slides that I
+
+00:05:09.140 --> 00:05:12.540
+mark up with the stylus over to some kind of
+
+00:05:12.840 --> 00:05:15.360
+video viewer and then back.
+
+00:05:15.620 --> 00:05:17.820
+And again, that's how I can use Firefox.
+
+00:05:17.900 --> 00:05:21.880
+I use OBS to switch between Firefox and video
+
+00:05:22.360 --> 00:05:26.380
+and the Shornell plus plus program where I
+
+00:05:26.380 --> 00:05:31.060
+can mark up slides. So those functionalities
+
+00:05:31.160 --> 00:05:35.140
+are that's why I use different software and
+
+00:05:35.140 --> 00:05:37.440
+pull it all together with OBS so that I can
+
+00:05:37.440 --> 00:05:41.700
+have lots of functional flexibility.
+
+00:05:44.660 --> 00:05:47.700
+[Speaker 0]: Great. Do you ever use things like
+
+00:05:47.700 --> 00:05:50.960
+org-present and stay for the PowerPoint
+
+00:05:51.060 --> 00:05:53.200
+slides? I'm not sure exactly how to read this
+
+00:05:53.200 --> 00:05:54.860
+particular question but at least we can focus
+
+00:05:54.860 --> 00:05:56.840
+on org-present. Are you familiar with what it
+
+00:05:56.840 --> 00:05:57.340
+is?
+
+00:05:58.080 --> 00:06:01.920
+[Speaker 1]: I have played around with org-present and
+
+00:06:02.380 --> 00:06:07.640
+again I guess you could use org-present to
+
+00:06:07.640 --> 00:06:12.160
+show images and to show headings as slides.
+
+00:06:13.140 --> 00:06:17.680
+But again, because I'm it's such a crucial
+
+00:06:18.100 --> 00:06:21.520
+functionality to be able to mark them up with
+
+00:06:22.120 --> 00:06:25.760
+stylus. I didn't really show this very much,
+
+00:06:25.760 --> 00:06:27.780
+but I also highlight things the way I would
+
+00:06:27.780 --> 00:06:30.080
+highlight using a laser pointer on the
+
+00:06:30.080 --> 00:06:36.300
+screen. And again, I don't see Emacs being
+
+00:06:36.300 --> 00:06:38.500
+able to do that for another couple of
+
+00:06:38.560 --> 00:06:42.800
+generations. So really the only thing I use
+
+00:06:42.800 --> 00:06:47.360
+Emacs for during presentations is to narrow
+
+00:06:48.940 --> 00:06:52.100
+headings that we can focus on particular text
+
+00:06:52.600 --> 00:06:53.100
+excerpts.
+
+00:06:55.680 --> 00:06:59.200
+[Speaker 0]: Right. Yeah. A lot of our presentation at
+
+00:06:59.200 --> 00:07:00.420
+EmacsConf are usually,
+
+00:07:00.420 --> 00:07:02.260
+especially the Org Mode ones are done with
+
+00:07:02.260 --> 00:07:06.740
+OrgPresent. And. Sorry,
+
+00:07:06.740 --> 00:07:08.920
+I had again someone talk to me in a year.
+
+00:07:09.240 --> 00:07:11.440
+You know, the problem with EmacsConf is that
+
+00:07:11.680 --> 00:07:13.440
+every year, you know, you have to relearn a
+
+00:07:13.440 --> 00:07:16.780
+lot of skills. And by the time we finished by
+
+00:07:16.780 --> 00:07:19.900
+Sunday evening we are masters of it and then
+
+00:07:19.900 --> 00:07:21.820
+we forget everything by the time the next
+
+00:07:21.820 --> 00:07:24.280
+year comes around. What I was going to say is
+
+00:07:24.280 --> 00:07:26.780
+that org-present is often used by people
+
+00:07:27.440 --> 00:07:30.940
+inside Emacs conf presenting about org-mode
+
+00:07:31.100 --> 00:07:32.800
+but yeah whenever you need to do something a
+
+00:07:32.800 --> 00:07:34.340
+little more visual, it gets a little more
+
+00:07:34.340 --> 00:07:36.540
+complicated. Some people have tried to do
+
+00:07:36.540 --> 00:07:39.200
+fancy stuff with SVG, which is probably the
+
+00:07:39.200 --> 00:07:41.180
+path forward for this type of stuff.
+
+00:07:41.400 --> 00:07:43.220
+But yeah, if you need to draw,
+
+00:07:43.380 --> 00:07:44.480
+if you need to highlight,
+
+00:07:44.760 --> 00:07:46.360
+it is pretty complicated.
+
+00:07:46.820 --> 00:07:48.340
+Perhaps something that you might want to be
+
+00:07:48.340 --> 00:07:50.940
+interested, James, in checking out is PDF
+
+00:07:50.940 --> 00:07:56.040
+tools, which is a way to open up a PDF in
+
+00:07:56.040 --> 00:07:59.440
+Emacs. And this allows you to have basic PDF
+
+00:07:59.440 --> 00:08:01.560
+annotations, like putting a little bit of a
+
+00:08:01.560 --> 00:08:04.160
+Nikon on it. Perhaps you've already played
+
+00:08:04.160 --> 00:08:04.900
+with it.
+
+00:08:06.260 --> 00:08:09.980
+[Speaker 1]: I have used that. PDF tools is an incredible
+
+00:08:10.080 --> 00:08:14.560
+package but until it allows me to make a mark
+
+00:08:14.560 --> 00:08:18.280
+on the screen that shows up in a video
+
+00:08:18.280 --> 00:08:21.000
+compositor. It's not going to replace
+
+00:08:21.420 --> 00:08:21.920
+Shortenel.
+
+00:08:23.240 --> 00:08:24.600
+[Speaker 0]: Definitely. All right.
+
+00:08:24.600 --> 00:08:25.940
+Moving on to the next question.
+
+00:08:26.400 --> 00:08:28.900
+Is the triple-accolade syntax an Org Mode
+
+00:08:28.900 --> 00:08:31.360
+core feature that I missed so far or did you
+
+00:08:31.360 --> 00:08:33.120
+program that and thank you for the great
+
+00:08:33.120 --> 00:08:33.620
+talk.
+
+00:08:36.659 --> 00:08:38.360
+[Speaker 1]: Thank you very much. No,
+
+00:08:38.360 --> 00:08:43.220
+it's just part of all of the export backends.
+
+00:08:43.299 --> 00:08:45.060
+Actually, I think the way it works is it
+
+00:08:45.060 --> 00:08:47.040
+precedes all of the export backends.
+
+00:08:47.040 --> 00:08:50.280
+When you export, the first thing that happens
+
+00:08:50.280 --> 00:08:52.360
+is expansion of macros.
+
+00:08:52.720 --> 00:08:56.260
+And that's a built-in org mode feature.
+
+00:08:56.640 --> 00:08:59.690
+It's definitely beyond my Emacs Lisp powers
+
+00:08:59.690 --> 00:09:01.360
+to be able to have made something that
+
+00:09:01.360 --> 00:09:06.920
+powerful. That's right.
+
+00:09:07.020 --> 00:09:08.540
+I have come a long way.
+
+00:09:02.640 --> 00:09:11.500
+[Speaker 0]: For now. You know, we always,
+
+00:09:11.720 --> 00:09:13.380
+you know, most of the people who show up to
+
+00:09:13.380 --> 00:09:15.480
+Max Conf. Especially talking about stuff that
+
+00:09:15.480 --> 00:09:18.160
+has to do with presentations or what they do
+
+00:09:18.260 --> 00:09:19.160
+in academia. You know,
+
+00:09:19.160 --> 00:09:20.520
+they always say, oh, but,
+
+00:09:20.600 --> 00:09:22.589
+you know, I couldn't have done all this,
+
+00:09:22.589 --> 00:09:24.260
+you know, it's just far away.
+
+00:09:24.260 --> 00:09:26.320
+And then they come back 1 year or 2 years
+
+00:09:26.320 --> 00:09:27.980
+later and then, oh, I've made my entire
+
+00:09:27.980 --> 00:09:29.680
+library for presentation and stuff like this.
+
+00:09:29.680 --> 00:09:32.980
+So Be hopeful about what the future holds for
+
+00:09:32.980 --> 00:09:34.960
+you in terms of coming up with crazy new
+
+00:09:34.960 --> 00:09:36.720
+features for the entire ecosystem.
+
+00:09:37.740 --> 00:09:39.100
+[Speaker 1]: Well, let me tell you,
+
+00:09:39.560 --> 00:09:42.540
+since the pandemic, I have written,
+
+00:09:42.980 --> 00:09:44.760
+I wrote my first major mode.
+
+00:09:44.760 --> 00:09:47.000
+It's trivial, but it provides functionality
+
+00:09:47.220 --> 00:09:52.660
+that is very useful to me and it's it's going
+
+00:09:52.660 --> 00:09:54.380
+to sound like I'm just trying to butter
+
+00:09:54.380 --> 00:09:57.260
+everyone up but seeing a lot of the names in
+
+00:09:57.260 --> 00:10:00.820
+the IRC channel people who have taught me so
+
+00:10:00.820 --> 00:10:05.220
+much on their YouTube channels and in their
+
+00:10:05.220 --> 00:10:07.920
+blog posts and on Reddit and on Mastodon.
+
+00:10:09.600 --> 00:10:12.220
+Without many of the people who are here today
+
+00:10:12.620 --> 00:10:15.300
+watching my talk, it's very fun to have
+
+00:10:15.820 --> 00:10:18.160
+people who have helped me learn so much about
+
+00:10:18.160 --> 00:10:20.140
+Emacs. So thanks to all of you.
+
+00:10:21.580 --> 00:10:24.140
+[Speaker 0]: Well, and yeah, and now you're becoming part
+
+00:10:24.140 --> 00:10:27.380
+of this crew of people inspiring others to do
+
+00:10:27.380 --> 00:10:29.160
+very much the same. So thank you for joining
+
+00:10:31.460 --> 00:10:32.520
+[Speaker 1]: Thank you very much.
+
+00:10:29.160 --> 00:10:35.020
+[Speaker 0]: the crew. Great. Moving on to the 2 last
+
+00:10:35.020 --> 00:10:36.660
+questions and then we'll open up the mic to
+
+00:10:36.660 --> 00:10:38.340
+other people on Big Blue Button.
+
+00:10:39.160 --> 00:10:40.900
+What kind of comparative feedback are
+
+00:10:40.900 --> 00:10:42.740
+students giving you regarding your approach?
+
+00:10:44.960 --> 00:10:48.340
+[Speaker 1]: Oh, my gosh. Students were ready to during
+
+00:10:48.340 --> 00:10:53.040
+the pandemic especially when most of the
+
+00:10:53.040 --> 00:10:55.880
+courses were just being taught over zoom by
+
+00:10:55.880 --> 00:10:57.340
+people sharing their screen.
+
+00:10:57.340 --> 00:10:58.660
+[Speaker 0]: Just a second. Sorry. Sorry for the
+
+00:10:58.660 --> 00:10:59.800
+interruption. Very rude interruption.
+
+00:10:59.800 --> 00:11:01.220
+We've got the intro for the next talk playing
+
+00:11:01.220 --> 00:11:02.520
+and I'm not sure what's going on.
+
+00:11:02.520 --> 00:11:03.580
+Give me just a second.
+
+00:11:04.440 --> 00:11:04.940
+Sasha.
+
+00:11:05.060 --> 00:11:05.560
+[Speaker 1]: Okay.
+
+00:11:19.320 --> 00:11:24.290
+Yeah, I think it's started.
+
+00:11:26.716 --> 00:11:31.740
+Okay so yeah I think it's not a
+
+00:11:34.860 --> 00:11:37.760
+[Speaker 0]: sure 1 I got the times wrong apparently
+
+00:11:37.760 --> 00:11:40.240
+because of the little delay we had getting
+
+00:11:40.240 --> 00:11:43.740
+the audio fixed up. The good news is that
+
+00:11:43.740 --> 00:11:45.880
+we're still recording the talk right now and
+
+00:11:45.880 --> 00:11:47.140
+we still have James around.
+
+00:11:47.180 --> 00:11:49.740
+Obviously James you're no longer on being
+
+00:11:49.740 --> 00:11:53.040
+broadcast on General but if you want to keep
+
+00:11:53.040 --> 00:11:55.800
+answering questions or if you want to anyone
+
+00:11:55.800 --> 00:11:57.340
+in the room right now wants to ask you
+
+00:11:57.340 --> 00:11:58.940
+questions feel free to do so.
+
+00:11:59.440 --> 00:12:01.060
+I'm going to need to hop off because I need
+
+00:12:01.060 --> 00:12:03.020
+to get other things ready for the next talks
+
+00:12:04.280 --> 00:12:06.780
+[Speaker 1]: But James, thank you so much.
+
+00:12:03.080 --> 00:12:10.020
+[Speaker 0]: sadly. Right and so sorry I'm a little tense
+
+00:12:10.020 --> 00:12:12.660
+obviously because I was not expecting this to
+
+00:12:12.660 --> 00:12:15.960
+happen and that led to a very abrupt end to
+
+00:12:15.960 --> 00:12:18.480
+this discussion but people afterwards on
+
+00:12:18.480 --> 00:12:21.980
+emacsmo.org slash 2023 slash talks will be
+
+00:12:21.980 --> 00:12:24.020
+able to find all the content here.
+
+00:12:24.020 --> 00:12:25.420
+So I'll have to leave now.
+
+00:12:25.840 --> 00:12:28.020
+Thank you so much James for doing the
+
+00:12:28.020 --> 00:12:30.060
+difficult task of opening up EmacsConf and
+
+00:12:30.060 --> 00:12:31.980
+I'll probably see you later.
+
+00:12:32.780 --> 00:12:35.260
+[Speaker 1]: Thank you, Leo. Bye bye.
+
+00:12:52.020 --> 00:12:57.440
+[Speaker 2]: On your journal program.
+
+00:12:58.360 --> 00:13:03.500
+Yes. You are using the tablet as a monitor,
+
+00:13:03.520 --> 00:13:05.940
+right? Touch screen monitor with that?
+
+00:13:06.480 --> 00:13:08.800
+[Speaker 1]: That's exactly right. So it's a tablet so you
+
+00:13:08.800 --> 00:13:11.980
+know I can. It has a touch screen and so.
+
+00:13:13.080 --> 00:13:15.580
+So basically the functionality that that
+
+00:13:15.580 --> 00:13:20.580
+program provides is to be able to just mark
+
+00:13:20.580 --> 00:13:22.160
+up PDFs with a stylus,
+
+00:13:23.360 --> 00:13:25.280
+you know, in the way that you would use any
+
+00:13:25.280 --> 00:13:30.600
+other tablet. And to be able to take that
+
+00:13:30.600 --> 00:13:33.420
+video signal and put it into another machine.
+
+00:13:33.840 --> 00:13:36.100
+That was the that was the key.
+
+00:13:36.100 --> 00:13:37.340
+That's the killer app.
+
+00:13:39.340 --> 00:13:41.880
+[Speaker 2]: I've thought about grabbing 1 for the purpose
+
+00:13:41.940 --> 00:13:45.460
+of like changing my laptop into a tablet to
+
+00:13:45.460 --> 00:13:49.640
+read manga, browse the web and kind of
+
+00:13:49.640 --> 00:13:51.840
+curious if it works well like as a wireless
+
+00:13:52.300 --> 00:13:57.440
+monitor with a tablet or how well it like you
+
+00:13:57.440 --> 00:14:01.920
+can use Emacs with it in a tablet mode or
+
+00:14:02.080 --> 00:14:03.000
+were you just
+
+00:14:03.820 --> 00:14:10.800
+[Speaker 1]: or you just use the tablet that I use is this
+
+00:14:10.800 --> 00:14:14.340
+is it it's just a Microsoft Surface and so it
+
+00:14:14.340 --> 00:14:17.780
+comes with a keyboard so you can take the
+
+00:14:17.780 --> 00:14:20.940
+keyboard off. Yeah, but I use it.
+
+00:14:20.940 --> 00:14:23.240
+I use it with the keyboard as well.
+
+00:14:24.560 --> 00:14:25.660
+And I just.
+
+00:14:30.060 --> 00:14:31.420
+[Speaker 2]: You're cutting off right now
+
+00:14:53.880 --> 00:15:27.671
+[Speaker 1]: Audio Your audio is cutting off right now.
+
+00:15:32.680 --> 00:15:34.580
+I bumped the mute button on the mic.
+
+00:15:36.820 --> 00:15:38.300
+Yeah. So again, this is,
+
+00:15:38.500 --> 00:15:41.540
+[Speaker 2]: is the 16 mute buttons you use.
+
+00:15:38.300 --> 00:15:45.660
+[Speaker 1]: this It's just the surface pro 3 that I got
+
+00:15:45.660 --> 00:15:48.920
+used and it runs Emacs.
+
+00:15:49.280 --> 00:15:54.300
+I mean it runs. You know Linux really well.
+
+00:15:54.940 --> 00:15:59.720
+And the trouble is that the hard drive you
+
+00:15:59.720 --> 00:16:02.920
+know the SSE drive is small and the RAM is
+
+00:16:02.920 --> 00:16:06.920
+small, but it works for the purposes.
+
+00:16:07.580 --> 00:16:10.080
+Basically, if I had a couple thousand
+
+00:16:10.080 --> 00:16:13.860
+dollars, I could probably buy a touchscreen
+
+00:16:14.280 --> 00:16:17.680
+machine where I could run everything on it
+
+00:16:17.680 --> 00:16:21.360
+and do the streaming and do the video capture
+
+00:16:21.380 --> 00:16:25.460
+and do the PDF markup.
+
+00:16:26.020 --> 00:16:28.480
+But since both of these are so,
+
+00:16:28.860 --> 00:16:31.980
+the hardware that I use is so old and cheap
+
+00:16:31.980 --> 00:16:33.800
+and weak I have to split it across 2
+
+00:16:33.800 --> 00:16:34.300
+machines.
+
+00:16:35.020 --> 00:16:37.660
+[Speaker 2]: There's also a beauty in making the stuff
+
+00:16:37.660 --> 00:16:40.080
+having specific purposes for specific things
+
+00:16:40.080 --> 00:16:46.020
+where it's just not. Yeah it's like I don't
+
+00:16:46.020 --> 00:16:49.840
+want a smart TV that plays Netflix I want a
+
+00:16:50.140 --> 00:16:53.860
+smart TV that has all the smarts that I turn
+
+00:16:53.860 --> 00:16:58.780
+my smart TV into a TV monitor I don't want to
+
+00:16:58.780 --> 00:16:59.280
+yeah
+
+00:17:02.200 --> 00:17:08.539
+[Speaker 1]: I totally feel that ethic I totally I totally
+
+00:17:08.659 --> 00:17:11.640
+feel that ethic. Oh, on
+
+00:17:11.760 --> 00:17:15.300
+[Speaker 2]: the some other things like if you want you to
+
+00:17:15.300 --> 00:17:17.300
+do highlighting in an org mode document.
+
+00:17:17.300 --> 00:17:19.060
+You can use org web tools.
+
+00:17:19.060 --> 00:17:20.020
+I wrote this in the notes,
+
+00:17:20.020 --> 00:17:21.940
+but you can use org web tools to download a
+
+00:17:21.940 --> 00:17:25.400
+web page and then you can use org remark to
+
+00:17:25.400 --> 00:17:28.860
+start highlighting in the org mode web page
+
+00:17:28.860 --> 00:17:30.860
+and then because an org mode document now you
+
+00:17:30.860 --> 00:17:32.180
+can just edit it directly.
+
+00:17:35.600 --> 00:17:38.240
+If you want other people to join in on an
+
+00:17:38.240 --> 00:17:40.680
+Emacs session you could use a package like
+
+00:17:40.680 --> 00:17:45.040
+what's it called? CRDT.EL
+
+00:17:47.020 --> 00:17:50.160
+that will allow 2 people with 2 different
+
+00:17:50.160 --> 00:17:52.820
+Emacs configurations to edit the same buffer.
+
+00:17:54.140 --> 00:17:58.980
+And you have a host that can host a buffer
+
+00:17:58.980 --> 00:18:05.960
+too. It works with, and they have 1 optional
+
+00:18:06.000 --> 00:18:08.180
+extension for org mode that will synchronize
+
+00:18:08.680 --> 00:18:10.600
+the folding of the org drawers.
+
+00:18:12.320 --> 00:18:14.720
+[Speaker 1]: Interesting. I will look into that.
+
+00:18:15.060 --> 00:18:15.560
+Like
+
+00:18:19.660 --> 00:18:22.720
+[Speaker 2]: having I don't like if you want students like
+
+00:18:22.720 --> 00:18:25.740
+you have each highlight line mode these are
+
+00:18:25.740 --> 00:18:27.620
+just some ideas like you can have like
+
+00:18:27.620 --> 00:18:30.060
+highlight line mode so people can easily see
+
+00:18:30.060 --> 00:18:35.040
+which line you're on cursor tracking and then
+
+00:18:35.040 --> 00:18:38.680
+you can have other people join in students or
+
+00:18:43.180 --> 00:18:45.300
+[Speaker 1]: yeah that's just a possible idea.
+
+00:18:45.300 --> 00:18:49.680
+Is there anyone else in the in the big blue
+
+00:18:49.680 --> 00:18:52.180
+button room who has a question?
+
+00:19:01.360 --> 00:19:03.280
+All right, I'm going to go over to the pad
+
+00:19:03.280 --> 00:19:05.280
+and see if there are any pending questions I
+
+00:19:05.280 --> 00:19:07.560
+can address. Thanks, Plasma Strike.
+
+00:19:27.500 --> 00:19:33.140
+[Speaker 3]: Yep. Which could be PDF,
+
+00:19:33.340 --> 00:19:36.680
+could be Markdown, could be OpenOffice,
+
+00:19:38.560 --> 00:19:40.100
+could be a notebook format.
+
+00:19:40.960 --> 00:19:43.340
+This methodology was conceived by Donald
+
+00:19:43.340 --> 00:19:51.980
+Knuth in 1984. The main purpose of literal
+
+00:19:51.980 --> 00:19:54.700
+programming is not only to make code or
+
+00:19:54.700 --> 00:19:57.220
+documentation or output more manageable,
+
+00:19:57.800 --> 00:20:01.240
+but to allow humans to create a data story to
+
+00:20:01.240 --> 00:20:03.420
+be used from a single source.
+
+00:20:04.540 --> 00:20:06.300
+What you see on the slide on the left-hand
+
+00:20:06.300 --> 00:20:09.400
+side is the story and code inside an org-mod
+
+00:20:09.400 --> 00:20:14.440
+file. The file starts with some
+
+00:20:14.440 --> 00:20:17.720
+documentation, then you write back down this
+
+00:20:18.420 --> 00:20:22.060
+code, and at the bottom you see the output
+
+00:20:22.060 --> 00:20:26.540
+file, which is not shown in the slide itself.
+
+00:20:26.800 --> 00:20:28.440
+In the middle you have the source code,
+
+00:20:28.440 --> 00:20:33.980
+which is the result of tangling or opening a
+
+00:20:33.980 --> 00:20:36.880
+buffer inside offload.
+
+00:20:37.660 --> 00:20:42.380
+On the very right hand side we have a PDF,
+
+00:20:42.580 --> 00:20:47.740
+actually this HTML, very same file that you
+
+00:20:47.740 --> 00:20:48.960
+see in memory language.
+
+00:20:49.600 --> 00:20:53.080
+So the humans look at some of this code and
+
+00:20:53.080 --> 00:20:55.400
+the machines look at other parts of the code.
+
+00:20:56.260 --> 00:20:58.320
+I actually did all my programming in the
+
+00:20:58.320 --> 00:21:00.260
+literary world even in the early 1990s,
+
+00:21:00.920 --> 00:21:03.040
+not using Org Mode, which didn't exist yet,
+
+00:21:03.040 --> 00:21:06.160
+but using Norman Ramsey's Norep preprocessor.
+
+00:21:07.240 --> 00:21:09.720
+They still use it inside the Org-Mode today.
+
+00:21:10.400 --> 00:21:11.920
+This preprocessor, Norep,
+
+00:21:11.920 --> 00:21:14.240
+allows you to tangle code from within an
+
+00:21:14.240 --> 00:21:16.360
+Org-Mode file that is self-standing file,
+
+00:21:16.360 --> 00:21:18.820
+much like Org-mode's edit functions,
+
+00:21:19.540 --> 00:21:21.900
+which export code blocks into buffers in
+
+00:21:21.900 --> 00:21:23.540
+whatever language the code blocks.
+
+00:21:25.940 --> 00:21:28.760
+In data science, these interactive notebooks,
+
+00:21:29.640 --> 00:21:32.776
+in 1 of the interpreted languages like Julia,
+
+00:21:32.776 --> 00:21:34.680
+Python, or R dominating?
+
+00:21:34.680 --> 00:21:37.420
+The basic technology is that of Jupyter
+
+00:21:37.420 --> 00:21:39.840
+notebooks, which take their name from Julia,
+
+00:21:39.860 --> 00:21:43.040
+Python, and R. And these notebooks use a
+
+00:21:43.040 --> 00:21:44.880
+spruce-dark shell, for example,
+
+00:21:44.920 --> 00:21:49.240
+IPython, and an option to add SQL cells.
+
+00:21:50.460 --> 00:21:53.340
+All good inside Emacs has a large number of
+
+00:21:53.340 --> 00:21:56.800
+advantages. Some of them are listed here over
+
+00:21:56.800 --> 00:21:59.180
+these notebooks. 2 of these stand out
+
+00:21:59.180 --> 00:22:02.860
+particularly. Different languages can be
+
+00:22:02.860 --> 00:22:05.640
+mixed as shown in the image.
+
+00:22:06.460 --> 00:22:07.700
+While in Jupyter notebooks,
+
+00:22:07.920 --> 00:22:10.900
+a notebook is limited to running a kernel in
+
+00:22:10.900 --> 00:22:14.440
+1 language only. The content of the notebook,
+
+00:22:14.440 --> 00:22:16.980
+its document code or output part can be
+
+00:22:16.980 --> 00:22:19.020
+exported in a variety of forms.
diff --git a/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt
new file mode 100644
index 00000000..e626f55f
--- /dev/null
+++ b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt
@@ -0,0 +1,47 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:12.439
+Introduction
+
+00:01:12.440 --> 00:01:47.819
+Presenting
+
+00:01:47.820 --> 00:04:46.609
+Hardware
+
+00:04:46.610 --> 00:05:30.518
+Example setup
+
+00:05:30.520 --> 00:07:05.949
+Presentation software: flexibility in function
+
+00:07:05.950 --> 00:07:59.849
+Live demonstration
+
+00:07:59.850 --> 00:10:26.059
+OBS
+
+00:10:26.060 --> 00:10:51.399
+Animation
+
+00:10:55.790 --> 00:11:42.259
+Emacs
+
+00:11:42.260 --> 00:13:22.679
+Making slides and handouts with Org Mode
+
+00:13:22.680 --> 00:16:17.789
+Pedagogy first
+
+00:16:17.790 --> 00:19:38.249
+org-teach
+
+00:19:38.330 --> 00:19:47.369
+Blank slides
+
+00:19:50.050 --> 00:20:19.269
+Animations
+
+00:20:19.270 --> 00:20:53.169
+Conclusion
diff --git a/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt
new file mode 100644
index 00000000..f03826a8
--- /dev/null
+++ b/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt
@@ -0,0 +1,1557 @@
+WEBVTT captioned by James Howell, checked by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:01.939
+Hello everyone. I'm James Howell.
+
+00:00:01.940 --> 00:00:03.539
+I teach biochemistry and
+
+00:00:03.540 --> 00:00:07.219
+molecular biology at Penn State University.
+
+00:00:07.220 --> 00:00:08.879
+I'm going to talk today
+
+00:00:08.880 --> 00:00:11.479
+about using Emacs to make all of
+
+00:00:11.480 --> 00:00:13.619
+the materials for presenting
+
+00:00:13.620 --> 00:00:15.679
+course meetings in my courses.
+
+00:00:15.680 --> 00:00:18.819
+Everything that you're going to see today is
+
+00:00:18.820 --> 00:00:20.439
+what I've made using
+
+00:00:20.440 --> 00:00:23.519
+the methods that I'm going to describe.
+
+00:00:26.200 --> 00:00:29.719
+The main point is that you can take
+
+00:00:29.720 --> 00:00:32.079
+an Org document and
+
+00:00:32.080 --> 00:00:34.469
+with a single Emacs document,
+
+00:00:34.470 --> 00:00:39.079
+make both a pretty text document
+
+00:00:39.080 --> 00:00:40.379
+that a student can have
+
+00:00:40.380 --> 00:00:42.039
+on the desk and take notes on.
+
+00:00:42.040 --> 00:00:44.439
+And also, I hope,
+
+00:00:44.440 --> 00:00:49.039
+fairly useful and attractive slides
+
+00:00:49.040 --> 00:00:51.339
+like the ones that I'm presenting right now.
+
+00:00:51.340 --> 00:00:52.859
+Both of these
+
+00:00:52.860 --> 00:00:56.659
+from a single source document.
+
+00:00:56.660 --> 00:00:59.259
+Okay. If you'd like
+
+00:00:59.260 --> 00:01:00.919
+to see the handout that goes along with this,
+
+00:01:00.920 --> 00:01:02.799
+you can download it
+
+00:01:02.800 --> 00:01:04.059
+at the [Sourcehut] repository where
+
+00:01:04.060 --> 00:01:05.959
+I've put— everything's here.
+
+00:01:05.960 --> 00:01:07.819
+So if you'd like to go look at it,
+
+00:01:07.820 --> 00:01:09.939
+you can follow with the handout.
+
+00:01:09.940 --> 00:01:11.239
+So I promised to talk about
+
+00:01:11.240 --> 00:01:12.439
+both authoring and presenting.
+
+NOTE Presenting
+
+00:01:12.440 --> 00:01:14.619
+And first I'm going to talk about presenting.
+
+00:01:14.620 --> 00:01:16.599
+I'm not the only one who does this.
+
+00:01:16.600 --> 00:01:19.299
+You might have seen System Crafters [David Wilson]
+
+00:01:19.300 --> 00:01:20.639
+or Prot's [Protesilaos Stavrou's] channel or
+
+00:01:20.640 --> 00:01:23.059
+Mike Zemansky's channel on Youtube.
+
+00:01:23.060 --> 00:01:26.679
+(Prot actually is going to be presenting tomorrow.)
+
+00:01:26.680 --> 00:01:28.419
+Maybe you've seen this
+
+00:01:28.420 --> 00:01:30.179
+chemical engineer at Carnegie Mellon,
+
+00:01:30.180 --> 00:01:32.159
+John Kitchin or Eric Fraga
+
+00:01:32.160 --> 00:01:34.139
+or Olivier Berger all have made
+
+00:01:34.140 --> 00:01:36.519
+blog posts about using Org mode
+
+00:01:36.520 --> 00:01:39.419
+to produce course materials.
+
+00:01:39.420 --> 00:01:41.459
+This pair Ro and Namkoon
+
+00:01:41.460 --> 00:01:43.739
+actually published a peer reviewed paper.
+
+00:01:43.740 --> 00:01:45.739
+There's prior art here
+
+00:01:45.740 --> 00:01:47.819
+that I'd like to acknowledge.
+
+NOTE Hardware
+
+00:01:47.820 --> 00:01:50.839
+Let me talk about my practices:
+
+00:01:50.840 --> 00:01:51.518
+First, the hardware.
+
+00:01:51.520 --> 00:01:55.339
+This is the hardware that I'm using to
+
+00:01:55.340 --> 00:01:59.738
+record this recording at the very moment,
+
+00:01:59.740 --> 00:02:01.259
+but also I carry these
+
+00:02:01.260 --> 00:02:05.059
+into every course meeting.
+
+00:02:05.060 --> 00:02:07.119
+I've done this for quite a while,
+
+00:02:07.120 --> 00:02:09.618
+this entire semester,
+
+00:02:09.620 --> 00:02:11.438
+and a few previous semesters
+
+00:02:11.440 --> 00:02:14.239
+where everything fits in a backpack.
+
+00:02:14.240 --> 00:02:18.459
+I do every meeting with this tablet—
+
+00:02:18.460 --> 00:02:20.839
+it's a Microsoft Surface that I put
+
+00:02:20.840 --> 00:02:26.599
+a Linux distribution on—and this laptop.
+
+00:02:26.600 --> 00:02:29.599
+I've got a bag full of
+
+00:02:29.600 --> 00:02:34.078
+dongles and connectors and so forth.
+
+00:02:34.080 --> 00:02:35.339
+It all fits in a backpack.
+
+00:02:35.340 --> 00:02:36.259
+This is very mobile.
+
+00:02:36.260 --> 00:02:38.179
+I can set it up and tear it down
+
+00:02:38.180 --> 00:02:39.699
+before and after every class
+
+00:02:39.700 --> 00:02:41.219
+with just a couple minutes.
+
+00:02:41.220 --> 00:02:42.739
+There's the laptop and the
+
+00:02:42.740 --> 00:02:45.018
+tablet with a stylus.
+
+00:02:45.020 --> 00:02:46.579
+Where's my stylus?
+
+00:02:46.580 --> 00:02:51.498
+So that I can draw...
+
+00:02:51.500 --> 00:02:52.519
+... which is very useful.
+
+00:02:52.520 --> 00:02:55.858
+Obviously, I need a camera.
+
+00:02:55.860 --> 00:02:57.459
+Today, I'm using a desk mic,
+
+00:02:57.460 --> 00:02:59.099
+but when I'm remote,
+
+00:02:59.100 --> 00:03:01.738
+I use a lapel mic.
+
+00:03:01.740 --> 00:03:02.899
+and a video converter,
+
+00:03:02.900 --> 00:03:04.379
+and I'll show you why that's important.
+
+00:03:04.380 --> 00:03:09.018
+And then all of the ancillary equipment.
+
+00:03:09.020 --> 00:03:11.139
+One thing that's nice about using
+
+00:03:11.140 --> 00:03:14.019
+a completely free software stack is
+
+00:03:14.020 --> 00:03:15.219
+that it tends to run
+
+00:03:15.220 --> 00:03:18.318
+on underpowered hardware,
+
+00:03:18.320 --> 00:03:20.539
+and none of the software cost anything.
+
+00:03:20.540 --> 00:03:23.219
+I could have spent much less than this
+
+00:03:23.220 --> 00:03:25.459
+on a used computer and
+
+00:03:25.460 --> 00:03:28.199
+a used tablet. And everything else,
+
+00:03:28.200 --> 00:03:30.299
+these are high estimates.
+
+00:03:30.300 --> 00:03:31.679
+I spent way less than
+
+00:03:31.680 --> 00:03:34.019
+$1,000 for all of this equipment.
+
+00:03:34.020 --> 00:03:35.619
+And it's my equipment,
+
+00:03:35.620 --> 00:03:37.259
+so I have hardware
+
+00:03:37.260 --> 00:03:38.959
+and software control over it,
+
+00:03:38.960 --> 00:03:41.099
+Which is nice.
+
+00:03:41.100 --> 00:03:43.239
+If you have an attitude of upcycling and building,
+
+00:03:43.240 --> 00:03:45.189
+and [if] this is a hobby anyway,
+
+00:03:45.190 --> 00:03:47.129
+this is an easy way—
+
+00:03:47.130 --> 00:03:48.649
+what I'm saying is—
+
+00:03:48.650 --> 00:03:51.369
+the entry into using these things,
+
+00:03:51.370 --> 00:03:58.018
+there's certainly a very low cost barrier.
+
+00:03:58.020 --> 00:04:01.429
+Because the hardware is so weak,
+
+00:04:01.430 --> 00:04:05.249
+I have the tablet for doing tablet stuff,
+
+00:04:05.250 --> 00:04:06.629
+and then I use the laptop to
+
+00:04:06.630 --> 00:04:08.909
+do all of the streaming and recording.
+
+00:04:08.910 --> 00:04:11.609
+I take the video output
+
+00:04:11.610 --> 00:04:13.829
+of the tablet and convert it to
+
+00:04:13.830 --> 00:04:19.898
+USB input into the laptop.
+
+00:04:19.900 --> 00:04:21.929
+Just to give you a diagram here,
+
+00:04:21.930 --> 00:04:23.709
+there's a laptop and there's a tablet.
+
+00:04:23.710 --> 00:04:25.929
+The tablet has a stylus.
+
+00:04:25.930 --> 00:04:29.449
+They both run GNU/Linux distributions.
+
+00:04:29.450 --> 00:04:30.949
+You've got a webcam that
+
+00:04:30.950 --> 00:04:32.129
+goes into the laptop.
+
+00:04:32.130 --> 00:04:33.618
+You've got video output
+
+00:04:33.620 --> 00:04:37.889
+from the tablet that goes into the laptop.
+
+00:04:37.890 --> 00:04:39.349
+There's a microphone that
+
+00:04:39.350 --> 00:04:40.469
+goes into the laptop,
+
+00:04:40.470 --> 00:04:43.209
+and then audio and video come out of
+
+00:04:43.210 --> 00:04:44.409
+the laptop and go into
+
+00:04:44.410 --> 00:04:46.609
+some AV system or another.
+
+NOTE Example setup
+
+00:04:46.610 --> 00:04:49.069
+Okay. This was Wednesday,
+
+00:04:49.070 --> 00:04:51.069
+teaching microbiology.
+
+00:04:51.070 --> 00:04:53.229
+There's the tablet, there's the laptop.
+
+00:04:53.230 --> 00:04:55.369
+There's the external screen
+
+00:04:55.370 --> 00:04:57.209
+in the podium here you can
+
+00:04:57.210 --> 00:04:59.549
+plug into the AV system.
+
+00:05:00.470 --> 00:05:04.209
+There it is. From where I stand,
+
+00:05:04.210 --> 00:05:06.009
+this is what the screen looks like.
+
+00:05:06.010 --> 00:05:08.224
+This is what students are seeing,
+
+00:05:08.225 --> 00:05:09.459
+on the live stream
+
+00:05:09.460 --> 00:05:10.779
+and later on the recording.
+
+00:05:10.780 --> 00:05:11.719
+And students in the room
+
+00:05:11.720 --> 00:05:12.639
+can see this as well.
+
+00:05:12.640 --> 00:05:15.099
+So you notice this is kind of meta,
+
+00:05:15.100 --> 00:05:17.139
+but the camera and
+
+00:05:17.140 --> 00:05:18.759
+the contents of the screen are
+
+00:05:18.760 --> 00:05:20.499
+there when I wander around,
+
+00:05:20.500 --> 00:05:22.219
+and when I stand in front of the screen,
+
+00:05:22.220 --> 00:05:23.939
+the students who aren't in the room can
+
+00:05:23.940 --> 00:05:27.398
+still see what I'm pointing to on the screen.
+
+00:05:27.400 --> 00:05:30.518
+Nobody gets left out.
+
+NOTE Presentation software: flexibility in function
+
+00:05:30.520 --> 00:05:31.479
+Let's talk about
+
+00:05:31.480 --> 00:05:33.579
+the software that I use.
+
+00:05:33.900 --> 00:05:35.979
+There's a lot of different things that
+
+00:05:35.980 --> 00:05:37.639
+I want to be able to show.
+
+00:05:37.640 --> 00:05:39.299
+And so I need a few different
+
+00:05:39.300 --> 00:05:42.399
+software packages— besides Emacs.
+
+00:05:42.400 --> 00:05:45.079
+For drawing on the tablet, I use
+
+00:05:45.080 --> 00:05:48.359
+(I don't know quite how this is pronounced:
+
+00:05:48.360 --> 00:05:51.139
+I think it's) Xournal++
+
+00:05:51.200 --> 00:05:54.039
+I use the web quite a bit,
+
+00:05:54.040 --> 00:05:55.719
+especially if I want to just
+
+00:05:55.720 --> 00:05:57.759
+spontaneously look something up.
+
+00:05:57.760 --> 00:05:59.679
+Often I use video,
+
+00:05:59.680 --> 00:06:01.499
+especially molecular animations.
+
+00:06:01.500 --> 00:06:04.699
+And that's incredibly powerful.
+
+00:06:04.700 --> 00:06:06.939
+And then now and again, I want to look at text.
+
+00:06:06.940 --> 00:06:08.059
+Especially in
+
+00:06:08.060 --> 00:06:09.799
+the English course that I teach,
+
+00:06:09.800 --> 00:06:11.839
+there's quite a bit of text.
+
+00:06:11.840 --> 00:06:14.239
+I'll use Emacs for that.
+
+00:06:15.000 --> 00:06:18.439
+The video compositor, the thing that
+
+00:06:18.440 --> 00:06:22.479
+puts this video and me in the green screen.
+
+00:06:22.480 --> 00:06:25.419
+and all of this stuff together, is called
+
+00:06:25.420 --> 00:06:34.818
+OBS Studio—and that also does recording.
+
+00:06:34.820 --> 00:06:37.509
+It's ALMOST a completely free software stack.
+
+00:06:37.510 --> 00:06:38.749
+I use Zoom to do
+
+00:06:38.750 --> 00:06:39.929
+the streaming and video
+
+00:06:39.930 --> 00:06:41.029
+conferencing because all of
+
+00:06:41.030 --> 00:06:42.409
+the students are forced to use it for
+
+00:06:42.410 --> 00:06:44.218
+their other classes and
+
+00:06:44.220 --> 00:06:45.409
+I've gone along with it.
+
+00:06:45.410 --> 00:06:46.669
+But a good alternative is
+
+00:06:46.670 --> 00:06:48.858
+Jitsi Meet. There are others.
+
+00:06:48.860 --> 00:06:50.729
+Okay. Again, here's
+
+00:06:50.730 --> 00:06:53.789
+the hardware setup. On the tablet,
+
+00:06:53.790 --> 00:06:56.589
+I'm running Xournal++. On the laptop,
+
+00:06:56.590 --> 00:07:00.229
+I've got Firefox and VLC, and Emacs.
+
+00:07:00.230 --> 00:07:02.889
+OBS is compositing that together.
+
+00:07:02.890 --> 00:07:05.949
+And I use Zoom, but you could use Jitsi.
+
+NOTE Live demonstration
+
+00:07:05.950 --> 00:07:07.929
+All right, let's
+
+00:07:07.930 --> 00:07:09.689
+demonstrate this live. Here we go.
+
+00:07:09.690 --> 00:07:13.609
+Here goes, nothing. The drawing program
+
+00:07:13.610 --> 00:07:15.049
+is really good because I can draw
+
+00:07:15.050 --> 00:07:17.529
+with the stylus on a tablet.
+
+00:07:17.970 --> 00:07:20.089
+It's a remarkable thing—
+
+00:07:20.090 --> 00:07:22.409
+I teach in these big lecture halls,
+
+00:07:22.410 --> 00:07:24.409
+and I guess they want them to be fancy?
+
+00:07:24.410 --> 00:07:25.969
+And so they don't have blackboards and
+
+00:07:25.970 --> 00:07:29.009
+whiteboards! If I want to be able to draw,
+
+00:07:29.010 --> 00:07:32.169
+if I want to do anything approaching analog,
+
+00:07:32.170 --> 00:07:34.769
+it has to be with this software!
+
+00:07:35.290 --> 00:07:37.809
+In this presentation, I
+
+00:07:37.810 --> 00:07:39.489
+don't have very many diagrams,
+
+00:07:39.490 --> 00:07:41.509
+but in my courses, most of
+
+00:07:41.510 --> 00:07:44.249
+the slides are complicated diagrams.
+
+00:07:44.250 --> 00:07:45.809
+Being able to annotate them
+
+00:07:45.810 --> 00:07:47.549
+is really important.
+
+00:07:47.550 --> 00:07:50.629
+This is why I don't use Emacs for
+
+00:07:50.630 --> 00:07:54.529
+presenting these kinds of documents,
+
+00:07:54.530 --> 00:07:55.809
+because I want to be able
+
+00:07:55.810 --> 00:07:57.449
+to mark them up visually.
+
+00:07:57.450 --> 00:07:59.849
+I can show you what that looks like.
+
+NOTE OBS
+
+00:07:59.850 --> 00:08:02.829
+By the way, here's how OBS works:
+
+00:08:02.830 --> 00:08:04.469
+I can go from different "scenes"
+
+00:08:04.470 --> 00:08:06.069
+So I can just do just me,
+
+00:08:06.070 --> 00:08:08.129
+or I can show you the slides,
+
+00:08:08.130 --> 00:08:10.789
+or I can show you what I see on the tablet.
+
+00:08:10.790 --> 00:08:12.269
+On the tablet, I can go
+
+00:08:12.270 --> 00:08:14.229
+through all of the— notice here,
+
+00:08:14.230 --> 00:08:16.129
+I'm scrolling through all
+
+00:08:16.130 --> 00:08:17.349
+of the different slides.
+
+00:08:17.350 --> 00:08:19.989
+I've got all kinds of different markup tools,
+
+00:08:19.990 --> 00:08:23.169
+and tools for controlling
+
+00:08:23.170 --> 00:08:24.829
+zoom and what page I'm on,
+
+00:08:24.830 --> 00:08:27.189
+but you don't have to see that.
+
+NOTE Firefox
+
+00:08:27.190 --> 00:08:32.389
+Okay. Firefox, boy, I do a lot of this.
+
+00:08:32.390 --> 00:08:36.789
+All of the quizzes,
+
+00:08:36.790 --> 00:08:38.459
+quizzes and exams in my courses
+
+00:08:38.460 --> 00:08:40.129
+are online on this
+
+00:08:40.130 --> 00:08:43.369
+web platform called Canvas,
+
+00:08:43.370 --> 00:08:45.429
+which is good enough.
+
+00:08:45.430 --> 00:08:49.589
+It's based on a GPL3 package,
+
+00:08:49.590 --> 00:08:53.069
+but this one is proprietary for Penn State.
+
+00:08:53.070 --> 00:08:55.129
+Notice that there's a quiz
+
+00:08:55.130 --> 00:08:57.049
+every day, and this quiz,
+
+00:08:57.050 --> 00:08:59.469
+every quiz has a recording from
+
+00:08:59.470 --> 00:09:00.629
+that day and you notice
+
+00:09:00.630 --> 00:09:01.889
+there's a picture of me teaching,
+
+00:09:01.890 --> 00:09:05.029
+pointing to the slides.
+
+00:09:05.030 --> 00:09:06.969
+There's the slides themselves.
+
+00:09:06.970 --> 00:09:09.589
+I use OBS to composite in
+
+00:09:09.590 --> 00:09:12.769
+the Zoom chat because I teach this hybrid.
+
+00:09:12.770 --> 00:09:13.709
+There's people in the room
+
+00:09:13.710 --> 00:09:14.569
+and there's people at
+
+00:09:14.570 --> 00:09:17.629
+other campuses who are in this course.
+
+00:09:17.630 --> 00:09:19.389
+Having the Zoom chat in
+
+00:09:19.390 --> 00:09:22.649
+the live feed is very useful.
+
+00:09:22.650 --> 00:09:25.729
+Then the quiz—
+
+00:09:25.730 --> 00:09:26.669
+at the next class meeting,
+
+00:09:26.670 --> 00:09:27.889
+we'll go through this quiz.
+
+00:09:27.890 --> 00:09:30.049
+Here's some experimental data
+
+00:09:30.050 --> 00:09:31.649
+and here's a question where they're
+
+00:09:31.650 --> 00:09:36.589
+supposed to interpret these data.
+
+00:09:36.590 --> 00:09:38.849
+We can in class together,
+
+00:09:38.850 --> 00:09:41.629
+we can review those.
+
+00:09:41.630 --> 00:09:45.369
+That's why Firefox is useful.
+
+00:09:47.970 --> 00:09:50.569
+Being able to inhabit,
+
+00:09:50.570 --> 00:09:52.829
+being able to inhabit
+
+00:09:52.830 --> 00:09:56.869
+figures like this is incredibly powerful.
+
+00:09:56.870 --> 00:09:59.349
+This is the silver lining of being
+
+00:09:59.350 --> 00:10:02.129
+forced to teach online during the pandemic,
+
+00:10:02.130 --> 00:10:03.069
+because I couldn't do
+
+00:10:03.070 --> 00:10:05.759
+this before I had a green screen.
+
+00:10:05.760 --> 00:10:09.539
+But even more powerful than this—
+
+00:10:09.540 --> 00:10:10.819
+For years, I showed students
+
+00:10:10.820 --> 00:10:12.339
+this figure by standing in front
+
+00:10:12.340 --> 00:10:13.699
+of it or by having a
+
+00:10:13.700 --> 00:10:15.239
+projector screen above me.
+
+00:10:15.240 --> 00:10:18.459
+And I said, "This is the B form of DNA."
+
+00:10:18.460 --> 00:10:20.379
+"This is the most common form of DNA."
+
+00:10:20.380 --> 00:10:22.579
+"You see here that there's this minor groove."
+
+00:10:22.580 --> 00:10:23.419
+"And then this feature
+
+00:10:23.420 --> 00:10:24.419
+is called the major groove."
+
+00:10:24.420 --> 00:10:26.059
+And students couldn't see it.
+
+NOTE Animation
+
+00:10:26.060 --> 00:10:29.439
+But if you animate it—
+
+00:10:29.440 --> 00:10:30.279
+if you just have it
+
+00:10:30.280 --> 00:10:33.319
+move, the apparent movement,
+
+00:10:33.320 --> 00:10:34.399
+It's not really movement,
+
+00:10:34.400 --> 00:10:35.379
+it's apparent movement.
+
+00:10:35.380 --> 00:10:37.819
+And it tricks your visual cortex into
+
+00:10:37.820 --> 00:10:40.319
+adding three dimensional structure to this.
+
+00:10:40.620 --> 00:10:42.579
+You can see this feature is
+
+00:10:42.580 --> 00:10:45.339
+the major groove and that feature
+
+00:10:45.340 --> 00:10:47.219
+is the minor groove. And a static
+
+00:10:47.220 --> 00:10:48.319
+image just can't provide
+
+00:10:48.320 --> 00:10:51.399
+that understanding, while moving image can.
+
+NOTE Emacs
+
+00:10:55.790 --> 00:10:58.179
+I use Emacs to look at text.
+
+00:10:58.180 --> 00:11:02.519
+Where's Emacs? Here's Emacs! We read
+
+00:11:02.520 --> 00:11:04.279
+Vonnegut in this English class that I
+
+00:11:04.280 --> 00:11:07.759
+teach and I'm going to tab over to Emacs.
+
+00:11:07.760 --> 00:11:09.859
+It's nice to be able
+
+00:11:09.860 --> 00:11:12.419
+to have text jump
+
+00:11:12.420 --> 00:11:14.159
+around and be dynamic, right?
+
+00:11:14.160 --> 00:11:16.859
+If you, if you want to look
+
+00:11:16.860 --> 00:11:18.039
+at this passage and I'll
+
+00:11:18.040 --> 00:11:19.259
+have somebody read it aloud.
+
+00:11:19.260 --> 00:11:20.819
+And then we talk about why he chose
+
+00:11:20.820 --> 00:11:22.499
+this word and why he chose that word,
+
+00:11:22.500 --> 00:11:25.179
+and the cadence, and the alliteration.
+
+00:11:25.180 --> 00:11:30.839
+Then we can go to another particular excerpt
+
+00:11:30.840 --> 00:11:33.439
+and pick that apart on the screen together.
+
+00:11:33.440 --> 00:11:34.899
+That would be difficult to do with
+
+00:11:34.900 --> 00:11:36.819
+other software that would be very tedious
+
+00:11:36.820 --> 00:11:39.399
+to do on the chalkboard.
+
+00:11:39.400 --> 00:11:42.259
+So Emacs is really good for that sort of thing.
+
+NOTE Making slides and handouts with Org Mode
+
+00:11:42.260 --> 00:11:45.379
+Mostly what I use Emacs for is not to
+
+00:11:45.380 --> 00:11:50.339
+present but to make slides and handouts.
+
+00:11:50.340 --> 00:11:52.359
+Okay. Again, the thing that I want to
+
+00:11:52.360 --> 00:11:54.219
+stress is that the slides
+
+00:11:54.220 --> 00:11:56.739
+and the handouts can be produced from
+
+00:11:56.740 --> 00:12:01.179
+a single Org mode document.
+
+00:12:01.180 --> 00:12:04.059
+This entire presentation
+
+00:12:04.060 --> 00:12:05.699
+was assembled in Emacs.
+
+00:12:05.700 --> 00:12:07.939
+I'll show you how I did that.
+
+00:12:08.420 --> 00:12:11.619
+I think everybody
+
+00:12:11.620 --> 00:12:13.159
+probably knows what Org mode is.
+
+00:12:13.160 --> 00:12:14.639
+But for our purposes, it's a way
+
+00:12:14.640 --> 00:12:16.119
+to write documents in plain text.
+
+00:12:16.120 --> 00:12:19.839
+That's very important because one of
+
+00:12:19.840 --> 00:12:22.019
+the biggest advantages of this is
+
+00:12:22.020 --> 00:12:24.739
+being able to do version control.
+
+00:12:24.740 --> 00:12:27.779
+I don't have Powerpoint decks
+
+00:12:27.780 --> 00:12:29.359
+everywhere with slides that
+
+00:12:29.360 --> 00:12:31.239
+there's no way to keep track of them.
+
+00:12:31.240 --> 00:12:32.459
+Having these be plain text
+
+00:12:32.460 --> 00:12:33.579
+means that I can just put them in
+
+00:12:33.580 --> 00:12:36.139
+a git repository.
+
+00:12:36.140 --> 00:12:37.899
+Very clean and human readable markup
+
+00:12:37.900 --> 00:12:41.159
+including handling tables
+
+00:12:41.160 --> 00:12:43.339
+which is just incredibly powerful.
+
+00:12:43.340 --> 00:12:45.459
+You can manage projects and tasks.
+
+00:12:45.460 --> 00:12:47.299
+But the fact that it's an outline
+
+00:12:47.300 --> 00:12:48.979
+that you can produce a document that's
+
+00:12:48.980 --> 00:12:51.279
+hierarchical and fold and
+
+00:12:51.280 --> 00:12:52.979
+reveal different parts of it.
+
+00:12:52.980 --> 00:12:57.119
+But to produce a book length lectures for
+
+00:12:57.120 --> 00:12:58.919
+an entire semester and use
+
+00:12:58.920 --> 00:13:01.399
+those to produce both slides and handouts,
+
+00:13:01.400 --> 00:13:03.179
+that's very powerful,
+
+00:13:03.180 --> 00:13:04.999
+at least for my brain. To be able to
+
+00:13:05.000 --> 00:13:06.779
+put it all together and have it be
+
+00:13:06.780 --> 00:13:08.399
+discursive rather
+
+00:13:08.400 --> 00:13:09.919
+than having to be graphical.
+
+00:13:09.920 --> 00:13:11.879
+You can export to
+
+00:13:11.880 --> 00:13:15.059
+a million different formats including
+
+00:13:15.060 --> 00:13:16.999
+PDF documents like the handouts as
+
+00:13:17.000 --> 00:13:22.679
+LaTeX, and slides like these through Beamer export.
+
+NOTE Pedagogy first
+
+00:13:22.680 --> 00:13:24.919
+The approach is to think
+
+00:13:24.920 --> 00:13:26.899
+about pedagogy rather than thinking
+
+00:13:26.900 --> 00:13:28.279
+about software or thinking
+
+00:13:28.280 --> 00:13:30.999
+about graphic design.
+
+00:13:31.000 --> 00:13:32.599
+To think about how can
+
+00:13:32.600 --> 00:13:34.379
+I make the best argument?
+
+00:13:34.380 --> 00:13:35.979
+How can I make the best,
+
+00:13:35.980 --> 00:13:40.879
+the most effective sequence of ideas?
+
+00:13:40.880 --> 00:13:44.999
+All I've done is make a few tweaks to
+
+00:13:45.000 --> 00:13:47.979
+the export backends for LaTeX and
+
+00:13:47.980 --> 00:13:49.979
+Beamer to customize them
+
+00:13:49.980 --> 00:13:51.499
+for my particular needs.
+
+00:13:51.500 --> 00:13:54.599
+And I'll show you what I've done.
+
+00:13:54.600 --> 00:13:58.059
+You've seen this already. I'll put
+
+00:13:58.060 --> 00:14:00.899
+one idea in big text on the screen.
+
+00:14:00.900 --> 00:14:04.619
+I find it to be effective to
+
+00:14:04.620 --> 00:14:09.119
+make a single idea explicit at one time.
+
+00:14:09.120 --> 00:14:12.259
+Now, some concepts can
+
+00:14:12.260 --> 00:14:14.799
+be explained with words or text,
+
+00:14:14.800 --> 00:14:20.259
+but many ideas are best just illustrated.
+
+00:14:20.260 --> 00:14:22.539
+In contrast, we've
+
+00:14:22.540 --> 00:14:23.979
+all used Powerpoint, right?
+
+00:14:23.980 --> 00:14:25.699
+And Edward Tufte has taught us
+
+00:14:25.700 --> 00:14:27.479
+about how Powerpoint is so
+
+00:14:27.480 --> 00:14:29.239
+terrible from a cognitive point of
+
+00:14:29.240 --> 00:14:31.799
+view and from a communications point of view.
+
+00:14:31.800 --> 00:14:35.398
+So using Org mode is much better.
+
+00:14:35.400 --> 00:14:36.759
+How is it better?
+
+00:14:36.760 --> 00:14:41.479
+Well, Tufte also tells us that
+
+00:14:42.040 --> 00:14:49.049
+any oral presentation that is substantive at all
+
+00:14:49.050 --> 00:14:52.629
+has to have some physical handout
+
+00:14:52.630 --> 00:14:55.709
+that the audience can use to take notes on.
+
+00:14:55.710 --> 00:14:58.749
+Slides are terrible handouts.
+
+00:14:59.030 --> 00:15:02.129
+And notes are usually terrible slides.
+
+00:15:02.130 --> 00:15:03.689
+Having one document where you
+
+00:15:03.690 --> 00:15:05.849
+can produce both and have them be,
+
+00:15:05.850 --> 00:15:08.409
+have the same organization,
+
+00:15:08.410 --> 00:15:10.349
+but different structures and
+
+00:15:10.350 --> 00:15:14.749
+different visual organization is
+
+00:15:14.750 --> 00:15:16.609
+something that I wanted
+
+00:15:16.610 --> 00:15:18.629
+for a long time and I can only do it
+
+00:15:18.630 --> 00:15:20.019
+with Emacs.
+
+00:15:20.020 --> 00:15:21.409
+Being able
+
+00:15:21.410 --> 00:15:22.729
+also for my brain to
+
+00:15:22.730 --> 00:15:25.309
+separate the work of writing and developing
+
+00:15:25.310 --> 00:15:28.469
+ideas and developing explanations
+
+00:15:28.470 --> 00:15:30.049
+and developing arguments
+
+00:15:30.050 --> 00:15:31.429
+and scaffolding them.
+
+00:15:31.430 --> 00:15:33.689
+That's jargon in pedagogy
+
+00:15:33.690 --> 00:15:36.889
+for bringing the student along.
+
+00:15:36.890 --> 00:15:41.349
+Separate that work from wrangling slides.
+
+00:15:41.350 --> 00:15:44.529
+That's super helpful for me.
+
+00:15:44.530 --> 00:15:46.709
+Again, you have
+
+00:15:46.710 --> 00:15:48.229
+an Org document that makes
+
+00:15:48.230 --> 00:15:51.369
+both the handouts and the slides.
+
+00:15:51.370 --> 00:15:53.449
+What's beautiful about it is
+
+00:15:53.450 --> 00:15:54.649
+that everything is an outline.
+
+00:15:54.650 --> 00:15:56.429
+And again, it's very discursive.
+
+00:15:56.430 --> 00:15:59.109
+Here's Tufte's famous poster where he's making
+
+00:15:59.110 --> 00:16:02.009
+fun of the psychology of Powerpoint.
+
+00:16:02.010 --> 00:16:05.749
+I don't know about you, but I have the kind of brain
+
+00:16:05.750 --> 00:16:07.609
+and I'm in the kind of job
+
+00:16:07.610 --> 00:16:09.909
+and I'm at the age where I don't have extra
+
+00:16:09.910 --> 00:16:12.049
+cognitive function! You know?
+
+00:16:12.050 --> 00:16:15.729
+So streamlining this workflow
+
+00:16:15.730 --> 00:16:17.789
+has been really helpful.
+
+NOTE org-teach
+
+00:16:17.790 --> 00:16:19.309
+All right, so let me show
+
+00:16:19.310 --> 00:16:21.649
+you what I've developed.
+
+00:16:21.650 --> 00:16:24.489
+Let's look at the Org doc.
+
+00:16:24.490 --> 00:16:25.829
+Okay. So what you see is you have
+
+00:16:25.830 --> 00:16:30.769
+a typical Org mode buffer.
+
+00:16:30.770 --> 00:16:32.849
+There's two headings here.
+
+00:16:32.850 --> 00:16:35.529
+One of them is stuff that I've deleted and
+
+00:16:35.530 --> 00:16:39.269
+the other is the talk.
+
+00:16:39.270 --> 00:16:43.109
+And so all of these subheadings have
+
+00:16:43.110 --> 00:16:46.389
+various things underneath including
+
+00:16:46.390 --> 00:16:48.969
+these macros that I wrote like `include-slide`,
+
+00:16:48.970 --> 00:16:51.229
+`impact-slide`, `subsection-slide`,
+
+00:16:51.230 --> 00:16:54.909
+et cetera, and then a bunch of stuff.
+
+00:16:54.950 --> 00:16:59.309
+Then I've got this include
+
+00:16:59.310 --> 00:17:01.629
+file that just has
+
+00:17:01.630 --> 00:17:03.289
+the macros that I've written.
+
+00:17:03.290 --> 00:17:05.449
+You can look at this on the repo.
+
+00:17:05.450 --> 00:17:06.289
+I'm not going to take
+
+00:17:06.290 --> 00:17:07.569
+the time to walk through it and
+
+00:17:07.570 --> 00:17:10.369
+explain what all the LaTeX means.
+
+00:17:10.370 --> 00:17:16.509
+But the upshot is
+
+00:17:16.510 --> 00:17:20.549
+that by including that file
+
+00:17:20.550 --> 00:17:22.429
+that has all the macro definitions,
+
+00:17:22.430 --> 00:17:25.649
+you get things like this macro pause
+
+00:17:25.650 --> 00:17:27.689
+or newline or whitespace-break,
+
+00:17:27.690 --> 00:17:30.809
+which just allow—
+
+00:17:30.810 --> 00:17:33.009
+pause splits a slide into two frames,
+
+00:17:33.010 --> 00:17:34.569
+so you can get these overlays,
+
+00:17:34.570 --> 00:17:36.309
+so you can go through paragraphs one by one.
+
+00:17:36.310 --> 00:17:38.629
+These just put
+
+00:17:38.630 --> 00:17:42.649
+white space in.
+
+00:17:44.650 --> 00:17:47.109
+Text-slides: This thing here, this title
+
+00:17:47.110 --> 00:17:49.169
+is level three heading.
+
+00:17:49.170 --> 00:17:50.189
+Figure-slides:
+
+00:17:50.190 --> 00:17:52.049
+the same thing are level three headings.
+
+00:17:52.050 --> 00:17:54.009
+One of the most powerful things
+
+00:17:54.010 --> 00:17:56.229
+is that I can take other files,
+
+00:17:56.230 --> 00:18:00.149
+I can take other Org files that have level
+
+00:18:00.150 --> 00:18:02.789
+three headings that are slides and those can
+
+00:18:02.790 --> 00:18:06.209
+be in some other repository.
+
+00:18:06.210 --> 00:18:08.509
+I only need to have one version of
+
+00:18:08.510 --> 00:18:09.909
+that slide that I
+
+00:18:09.910 --> 00:18:12.749
+can use in multiple courses.
+
+00:18:13.230 --> 00:18:17.109
+Just that functionality is
+
+00:18:17.110 --> 00:18:19.909
+incredibly helpful for keeping
+
+00:18:19.910 --> 00:18:22.809
+track of work from a few years ago.
+
+00:18:22.810 --> 00:18:24.269
+All of these I'm going to
+
+00:18:24.270 --> 00:18:25.929
+explain in the next few slides.
+
+00:18:25.930 --> 00:18:27.709
+The section slides
+
+00:18:27.710 --> 00:18:29.909
+correspond to course modules.
+
+00:18:29.910 --> 00:18:31.129
+Each of these is going to
+
+00:18:31.130 --> 00:18:32.549
+be a few weeks of a course.
+
+00:18:32.550 --> 00:18:34.629
+This is a major division of a course.
+
+00:18:34.630 --> 00:18:36.909
+I have some macros so that I can decorate
+
+00:18:36.910 --> 00:18:41.389
+this with relevant information.
+
+00:18:41.390 --> 00:18:43.469
+Then for every subsection,
+
+00:18:43.470 --> 00:18:45.569
+level two headline, that
+
+00:18:45.570 --> 00:18:46.729
+corresponds to a major
+
+00:18:46.730 --> 00:18:48.589
+course topic in the module.
+
+00:18:48.590 --> 00:18:50.209
+Then text slides, again,
+
+00:18:50.210 --> 00:18:52.849
+level three headlines become
+
+00:18:52.850 --> 00:18:53.969
+titles for the slide,
+
+00:18:53.970 --> 00:18:58.859
+and level four headlines become text elements.
+
+00:18:58.900 --> 00:19:01.679
+Most of my slides look like this.
+
+00:19:01.680 --> 00:19:03.139
+They're figures.
+
+00:19:03.140 --> 00:19:05.859
+Here's the glycolytic pathway.
+
+00:19:06.020 --> 00:19:09.979
+Level three gives you the title.
+
+00:19:11.420 --> 00:19:14.279
+It's missing here actually,
+
+00:19:14.280 --> 00:19:16.719
+but there's a way you can put in captions.
+
+00:19:16.720 --> 00:19:18.959
+This line here just tells
+
+00:19:18.960 --> 00:19:21.039
+the LaTeX export backend
+
+00:19:21.040 --> 00:19:24.219
+how big you want it and stuff like that.
+
+00:19:24.220 --> 00:19:29.139
+Impact slides, they have to go under H1 or H2.
+
+00:19:29.140 --> 00:19:32.179
+And they just give you one of these text slides.
+
+00:19:32.450 --> 00:19:35.649
+For an entire slide being an image,
+
+00:19:35.650 --> 00:19:38.249
+you can use this image-slide macro.
+
+NOTE Blank slides
+
+00:19:38.330 --> 00:19:41.129
+I often put in blank slides to
+
+00:19:41.130 --> 00:19:43.269
+remind myself that this is a time to stop.
+
+00:19:43.270 --> 00:19:44.789
+Often there's something for me to
+
+00:19:44.790 --> 00:19:47.369
+draw here with the stylus.
+
+NOTE Animations
+
+00:19:50.050 --> 00:19:53.149
+I often use— it used to be Powerpoint,
+
+00:19:53.150 --> 00:19:56.069
+now I use LibreOffice Impress—to make
+
+00:19:56.070 --> 00:19:58.309
+multi slide animations like
+
+00:19:58.310 --> 00:20:01.309
+the sphere and the donut and the GI tract.
+
+00:20:01.310 --> 00:20:03.249
+And this hardware thing
+
+00:20:03.250 --> 00:20:05.269
+that I did for you today,
+
+00:20:05.270 --> 00:20:07.949
+I export those animations as PDFs.
+
+00:20:07.950 --> 00:20:14.469
+Then I can just slurp them up into the slides.
+
+00:20:14.470 --> 00:20:16.669
+Just into the slides, not into
+
+00:20:16.670 --> 00:20:19.269
+the handouts with this macro.
+
+NOTE Conclusion
+
+00:20:19.270 --> 00:20:21.489
+I hope that you find this useful.
+
+00:20:21.490 --> 00:20:22.449
+I hope you share it with
+
+00:20:22.450 --> 00:20:24.089
+other educators that you know.
+
+00:20:24.090 --> 00:20:27.149
+Here is the sourcehut repo,
+
+00:20:27.150 --> 00:20:29.069
+here's how to get in touch with me.
+
+00:20:29.070 --> 00:20:32.569
+I look forward to addressing your questions.
+
+00:20:32.690 --> 00:20:34.989
+I want to say thank you
+
+00:20:34.990 --> 00:20:36.609
+to Sacha [Chua] and the organizers,
+
+00:20:36.610 --> 00:20:38.449
+and to everyone who made this possible and
+
+00:20:38.450 --> 00:20:40.689
+to all of you in the community.
+
+00:20:40.690 --> 00:20:42.769
+Because as we all know,
+
+00:20:42.770 --> 00:20:47.429
+that that's what makes Emacs such a strong
+
+00:20:47.430 --> 00:20:50.089
+and powerful package is
+
+00:20:50.090 --> 00:20:51.329
+all of the people behind it.
+
+00:20:51.330 --> 00:20:53.169
+Thanks everybody.
diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt
new file mode 100644
index 00000000..034faf8b
--- /dev/null
+++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt
@@ -0,0 +1,3361 @@
+WEBVTT
+
+
+00:00:00.480 --> 00:00:00.980
+[Speaker 0]: Dictation.
+
+00:00:06.020 --> 00:00:06.520
+[Speaker 1]: Right. All right I think we are live now.
+
+00:00:08.980 --> 00:00:09.179
+The stream is here. So folks if you would
+
+00:00:11.320 --> 00:00:11.820
+please post your questions on the pad and
+
+00:00:13.259 --> 00:00:13.759
+we'll take them up here.
+
+00:00:20.500 --> 00:00:21.000
+[Speaker 0]: Boy so I don't have myself set up with the
+
+00:00:25.140 --> 00:00:25.279
+[Speaker 1]: Oh, I can read the questions to you if you
+
+00:00:26.939 --> 00:00:27.439
+[Speaker 0]: pad. That would be fantastic.
+
+00:00:27.900 --> 00:00:28.400
+Thank you.
+
+00:00:28.779 --> 00:00:29.220
+[Speaker 1]: would prefer that. Sure.
+
+00:00:29.220 --> 00:00:29.720
+Thanks.
+
+00:00:58.380 --> 00:00:58.500
+[Speaker 0]: Well, for the purpose of breaking the ice a
+
+00:01:01.400 --> 00:01:01.620
+little bit, I can provide a live
+
+00:01:03.840 --> 00:01:04.340
+demonstration of the use of this Voice In
+
+00:01:06.300 --> 00:01:06.800
+plugin for Google Chrome.
+
+00:01:11.080 --> 00:01:11.580
+So I have, let's see, say new sentence.
+
+00:01:20.400 --> 00:01:20.900
+I'm on a website that is called 750 words.
+
+00:01:25.080 --> 00:01:25.520
+It provides a text area where without any
+
+00:01:30.580 --> 00:01:30.760
+other distracting icons for the purpose of
+
+00:01:34.040 --> 00:01:34.200
+writing and I'm using it for the purpose of
+
+00:01:38.680 --> 00:01:38.960
+capturing my words that I'm dictating and I
+
+00:01:42.979 --> 00:01:43.420
+have enabled the Voice In plugin by hitting
+
+00:01:48.280 --> 00:01:48.780
+the option L command. New sentence.
+
+00:01:54.479 --> 00:01:54.960
+So it interpreted that command new sentence
+
+00:01:56.260 --> 00:01:56.760
+even though I didn't pronounce it correctly,
+
+00:01:59.440 --> 00:01:59.820
+which is a pretty good demonstration of its
+
+00:02:00.920 --> 00:02:01.420
+accuracy. New sentence.
+
+00:02:06.420 --> 00:02:06.820
+Oops, that didn't work.
+
+00:02:15.040 --> 00:02:15.200
+Undo. New sentence. So new sentence is a
+
+00:02:16.040 --> 00:02:16.540
+combination of 2 commands,
+
+00:02:23.820 --> 00:02:24.080
+period and new line. So I've found it more
+
+00:02:25.840 --> 00:02:26.260
+convenient just to say new sentence than
+
+00:02:28.440 --> 00:02:28.940
+having to say period and new line.
+
+00:02:33.900 --> 00:02:34.220
+You can see that it's able to keep up with
+
+00:02:41.840 --> 00:02:42.340
+most of my speech, and it has to interpret
+
+00:02:44.760 --> 00:02:45.140
+the sounds that I'm making and convert those
+
+00:02:47.600 --> 00:02:47.860
+into words, so there's always going to be a
+
+00:02:59.580 --> 00:03:00.080
+lag. New sentence. But I've found that I can
+
+00:03:02.720 --> 00:03:03.220
+generate about 2,000, up to 2,000
+
+00:03:07.040 --> 00:03:07.540
+words an hour as I gather my thoughts and
+
+00:03:10.960 --> 00:03:11.460
+talk in my rather slow fashion of speaking.
+
+00:03:15.860 --> 00:03:16.220
+New sentence, if you're a really fast
+
+00:03:18.560 --> 00:03:19.060
+speaker, it might have trouble keeping up.
+
+00:03:30.860 --> 00:03:31.080
+New sentence. I like to write When I'm using
+
+00:03:34.360 --> 00:03:34.860
+the keyboard with 1 sentence per line,
+
+00:03:38.520 --> 00:03:39.020
+so that when I copy my text and paste it into
+
+00:03:43.680 --> 00:03:43.840
+Emacs, for example, I can resort the
+
+00:03:47.300 --> 00:03:47.600
+sentences very easily by just selecting 1
+
+00:03:50.600 --> 00:03:51.100
+line at a time. I like to keep the sentences
+
+00:03:53.480 --> 00:03:53.980
+unwrapped in that fashion because that
+
+00:03:56.320 --> 00:03:56.820
+greatly eases the rewriting phase.
+
+00:04:01.120 --> 00:04:01.580
+And I'm almost have sort of a hybrid reverse
+
+00:04:03.160 --> 00:04:03.660
+outlining approach by doing that.
+
+00:04:14.340 --> 00:04:14.680
+New sentence. Looks like I have gotten ahead
+
+00:04:18.079 --> 00:04:18.579
+of it a bit and it has not kept up.
+
+00:04:21.560 --> 00:04:22.060
+But generally, it does keep up pretty well.
+
+00:04:26.180 --> 00:04:26.680
+[Speaker 1]: Nice. Thanks for the demo.
+
+00:04:30.380 --> 00:04:30.880
+Let's see. I think we have.
+
+00:04:31.480 --> 00:04:31.980
+Yeah, sorry.
+
+00:04:33.520 --> 00:04:34.020
+[Speaker 0]: You're welcome. Go ahead.
+
+00:04:42.380 --> 00:04:42.880
+You can see that it has this EN means English
+
+00:04:46.880 --> 00:04:47.180
+and then dash US. There's actually about 40
+
+00:04:48.000 --> 00:04:48.500
+languages that it supports,
+
+00:04:52.280 --> 00:04:52.720
+including several variants of German and
+
+00:04:54.640 --> 00:04:55.140
+about a dozen English dialects.
+
+00:05:05.200 --> 00:05:05.380
+[Speaker 1]: Nice. Let's see, I think we have some
+
+00:05:06.860 --> 00:05:07.360
+comments and questions trickling in.
+
+00:05:11.160 --> 00:05:11.320
+So someone is saying that there is a text to
+
+00:05:14.700 --> 00:05:15.200
+command application or utility called Clipia,
+
+00:05:19.395 --> 00:05:19.472
+C-L-I-P-I-A, that they think is awesome.
+
+00:05:19.860 --> 00:05:20.360
+Clipia that they think is awesome.
+
+00:05:24.960 --> 00:05:25.460
+And someone else is also saying that Sox,
+
+00:05:27.180 --> 00:05:27.680
+S-O-X is another good alternative.
+
+00:05:34.560 --> 00:05:34.920
+[Speaker 0]: I've not explored those yet.
+
+00:05:36.740 --> 00:05:37.240
+So thank you very much for the suggestions.
+
+00:05:42.700 --> 00:05:43.000
+[Speaker 1]: So I'll... I just dropped a link to the pad
+
+00:05:45.360 --> 00:05:45.520
+page here in the chat and on the big blue
+
+00:05:47.320 --> 00:05:47.820
+button if you'd like to open that up as well.
+
+00:05:50.280 --> 00:05:50.460
+But I'll continue reading the comments and
+
+00:05:54.340 --> 00:05:54.640
+questions. So the first question,
+
+00:05:56.420 --> 00:05:56.920
+I guess, is that could you comment on how
+
+00:06:01.800 --> 00:06:02.080
+speaking versus typing affects your logic or
+
+00:06:03.260 --> 00:06:03.760
+the content, quote unquote,
+
+00:06:05.020 --> 00:06:05.520
+that you write?
+
+00:06:10.320 --> 00:06:10.820
+[Speaker 0]: I find that this is like the difference
+
+00:06:15.600 --> 00:06:16.080
+between writing your thoughts down on a blank
+
+00:06:18.640 --> 00:06:19.140
+piece of printer paper versus paper bound
+
+00:06:21.100 --> 00:06:21.600
+with a leather notebook.
+
+00:06:24.300 --> 00:06:24.800
+I don't think there's any real difference.
+
+00:06:27.980 --> 00:06:28.380
+I know that some people believe there is a
+
+00:06:29.540 --> 00:06:30.040
+solid certain difference,
+
+00:06:32.580 --> 00:06:32.980
+But this is for the purpose,
+
+00:06:34.540 --> 00:06:35.040
+I'm using this for the purpose of generating
+
+00:06:40.340 --> 00:06:40.720
+the first draft because my skills with using
+
+00:06:44.160 --> 00:06:44.440
+my voice to edit my text is still not very
+
+00:06:46.240 --> 00:06:46.740
+well developed. I'm still more efficient
+
+00:06:49.120 --> 00:06:49.620
+using the keyboard for that stage.
+
+00:06:52.200 --> 00:06:52.700
+So the hardest part about writing generally
+
+00:06:55.160 --> 00:06:55.660
+is getting the first crappy draft written.
+
+00:07:00.040 --> 00:07:00.160
+And so I have found that dictation is
+
+00:07:01.480 --> 00:07:01.980
+perfectly fine for that phase.
+
+00:07:07.060 --> 00:07:07.200
+And I find it actually very conducive for
+
+00:07:09.480 --> 00:07:09.980
+just getting the text out.
+
+00:07:13.500 --> 00:07:13.680
+The biggest problem that most of us have is
+
+00:07:15.080 --> 00:07:15.580
+applying our internal editor.
+
+00:07:20.280 --> 00:07:20.460
+And that inhibits us from generating words in
+
+00:07:21.600 --> 00:07:22.100
+a free-flowing fashion.
+
+00:07:26.000 --> 00:07:26.500
+So I generally do my generative writing.
+
+00:07:28.740 --> 00:07:28.940
+So actually I divide my writing into 2
+
+00:07:30.240 --> 00:07:30.740
+categories, generative writing,
+
+00:07:32.320 --> 00:07:32.820
+generating the first crappy draft,
+
+00:07:35.920 --> 00:07:36.300
+and then rewriting. Rewriting is probably 80,
+
+00:07:38.520 --> 00:07:39.020
+90% of writing where you go back and rework
+
+00:07:40.600 --> 00:07:41.100
+the order of the sentences,
+
+00:07:43.840 --> 00:07:43.980
+order of paragraphs, the order of words in a
+
+00:07:44.700 --> 00:07:45.060
+sentence and so forth.
+
+00:07:47.540 --> 00:07:47.860
+The really hard work. That's best done later
+
+00:07:49.740 --> 00:07:50.240
+in the day when I'm more awake.
+
+00:07:52.880 --> 00:07:52.960
+I do my general writing first thing in the
+
+00:07:55.320 --> 00:07:55.820
+morning when I feel horrible.
+
+00:07:59.440 --> 00:07:59.940
+I'm not very alert. That's when my internal
+
+00:08:03.340 --> 00:08:03.700
+editor is not very awake and I can get more
+
+00:08:05.760 --> 00:08:06.260
+words out, more words past that gatekeeper.
+
+00:08:09.280 --> 00:08:09.480
+And so I can do this sitting down,
+
+00:08:10.640 --> 00:08:10.920
+I can do this standing up,
+
+00:08:12.800 --> 00:08:13.180
+I can do this 20 feet away from my computer
+
+00:08:15.440 --> 00:08:15.600
+looking out the window to give my eyes a
+
+00:08:19.540 --> 00:08:20.040
+break. So I find it's actually very enjoyable
+
+00:08:21.440 --> 00:08:21.940
+to use it in this fashion.
+
+00:08:29.640 --> 00:08:30.140
+And the downside is that I wind up generating
+
+00:08:32.720 --> 00:08:32.919
+3 times as much text, and that makes for 3
+
+00:08:35.140 --> 00:08:35.640
+times as much work when it comes to rewriting
+
+00:08:39.780 --> 00:08:39.940
+the text. And that means I'm using the
+
+00:08:45.040 --> 00:08:45.200
+keyboard a lot later on in the day and I
+
+00:08:47.720 --> 00:08:47.920
+haven't made any progress on recovering from
+
+00:08:49.760 --> 00:08:50.260
+my own repetitive stress injury.
+
+00:08:56.880 --> 00:08:57.240
+I hope that I will add the use of voice
+
+00:08:59.720 --> 00:09:00.220
+commands, speech to commands,
+
+00:09:02.800 --> 00:09:03.300
+for editing the text in the future.
+
+00:09:06.880 --> 00:09:07.040
+And I'll eventually give my hands more of a
+
+00:09:07.040 --> 00:09:07.540
+break.
+
+00:09:12.280 --> 00:09:12.600
+[Speaker 1]: Right. Thanks. Yeah, that sounds like a nice
+
+00:09:15.360 --> 00:09:15.640
+flow of sort of being able to get your words
+
+00:09:18.740 --> 00:09:18.940
+out while your internal editor is still not
+
+00:09:21.220 --> 00:09:21.720
+inhibiting things. And then later in the day
+
+00:09:25.320 --> 00:09:25.520
+or days, get back to the actual rewriting and
+
+00:09:25.520 --> 00:09:26.020
+editing.
+
+00:09:31.320 --> 00:09:31.720
+[Speaker 0]: Cool. So this allows you to actually separate
+
+00:09:33.640 --> 00:09:34.140
+those 2 activities, not only by time.
+
+00:09:36.840 --> 00:09:37.200
+So many professional writers will spend
+
+00:09:39.000 --> 00:09:39.140
+several hours in the morning doing the
+
+00:09:41.040 --> 00:09:41.120
+generative part and then they'll spend the
+
+00:09:41.920 --> 00:09:42.420
+rest of the day rewriting.
+
+00:09:46.000 --> 00:09:46.500
+So they have separated those 2 activities
+
+00:09:49.340 --> 00:09:49.540
+temporally. What most people actually do is,
+
+00:09:51.540 --> 00:09:51.700
+you know, they do the generative part and
+
+00:09:53.300 --> 00:09:53.560
+then they write 1 sentence and they apply
+
+00:09:55.460 --> 00:09:55.640
+that internal editor right away because they
+
+00:09:57.720 --> 00:09:58.220
+want to write the first draft in a perfect,
+
+00:10:02.400 --> 00:10:02.560
+as a perfect version as the final draft And
+
+00:10:03.840 --> 00:10:04.340
+that slows them down dramatically.
+
+00:10:08.160 --> 00:10:08.400
+But this also allows you to separate these 2
+
+00:10:10.320 --> 00:10:10.820
+activities in terms of modality.
+
+00:10:13.940 --> 00:10:14.120
+You're going to do the generative writing by
+
+00:10:16.560 --> 00:10:17.060
+voice and the rewriting by keyboard.
+
+00:10:22.200 --> 00:10:22.480
+So I think this is 1 way that many people can
+
+00:10:26.040 --> 00:10:26.540
+get into using speech to text in a productive
+
+00:10:26.640 --> 00:10:27.140
+way.
+
+00:10:30.480 --> 00:10:30.980
+[Speaker 1]: Nice. Yeah, that sounds great.
+
+00:10:33.940 --> 00:10:34.200
+Let's see. I think we have about 3 or 4
+
+00:10:37.840 --> 00:10:37.960
+minutes live. So I think we have time for at
+
+00:10:38.560 --> 00:10:39.060
+least another question.
+
+00:10:41.920 --> 00:10:42.180
+Have you tried the chat GPT voice chat
+
+00:10:44.540 --> 00:10:44.760
+interface? And if so, how has been your
+
+00:10:47.020 --> 00:10:47.180
+experience of it? As someone experienced with
+
+00:10:48.640 --> 00:10:48.860
+voice control, interested to hear your
+
+00:10:51.940 --> 00:10:52.180
+thoughts, performance relative to the free
+
+00:10:52.960 --> 00:10:53.460
+software tools in particular?
+
+00:10:57.180 --> 00:10:57.380
+[Speaker 0]: I don't have much experience with that
+
+00:11:01.320 --> 00:11:01.500
+particular software. I have used Whisper a
+
+00:11:03.400 --> 00:11:03.900
+little bit. And so that's related.
+
+00:11:10.260 --> 00:11:10.460
+And of course you have this problem of lag so
+
+00:11:12.800 --> 00:11:13.300
+I find that it's a whisper is good for
+
+00:11:16.380 --> 00:11:16.560
+spitting out a sentence you know maybe for a
+
+00:11:20.160 --> 00:11:20.660
+doc string in a programming file.
+
+00:11:26.060 --> 00:11:26.260
+But I find that it's very prone to
+
+00:11:30.060 --> 00:11:30.300
+hallucinations. And I find myself spending
+
+00:11:32.720 --> 00:11:33.220
+half my time deleting the hallucinations,
+
+00:11:38.700 --> 00:11:38.860
+I feel like the net gain is diminished as a
+
+00:11:41.580 --> 00:11:41.720
+result. There's not much of a net gain in
+
+00:11:43.340 --> 00:11:43.820
+terms of what I'm getting out of it.
+
+00:11:45.800 --> 00:11:45.980
+Whereas I really appreciate the high level of
+
+00:11:48.780 --> 00:11:49.280
+accuracy that I'm getting from voice-in.
+
+00:11:53.400 --> 00:11:53.900
+I would use Talon Voice for dictation,
+
+00:11:56.680 --> 00:11:57.180
+but at this point, there's a significant
+
+00:12:00.440 --> 00:12:00.740
+difference between the level of accuracy of
+
+00:12:02.040 --> 00:12:02.540
+voice-in versus Talon voice.
+
+00:12:06.260 --> 00:12:06.560
+It's large enough of a difference that I'll
+
+00:12:08.860 --> 00:12:09.020
+probably use voice-in for a while until I can
+
+00:12:12.700 --> 00:12:13.140
+figure out how to get town voice to generate
+
+00:12:15.080 --> 00:12:15.580
+more accurate text.
+
+00:12:25.400 --> 00:12:25.680
+[Speaker 1]: Cool. Thank you. I think we have at least
+
+00:12:26.580 --> 00:12:26.940
+another 2 or 3 minutes.
+
+00:12:29.100 --> 00:12:29.380
+So if folks have any other questions Please
+
+00:12:31.080 --> 00:12:31.400
+feel free to post them on the pad and I'll
+
+00:12:32.560 --> 00:12:33.060
+check IRC now as well.
+
+00:12:44.340 --> 00:12:44.840
+Right, so I see 1 question on IRC asking,
+
+00:12:47.080 --> 00:12:47.360
+Are any of these voice command slash
+
+00:12:49.600 --> 00:12:50.100
+dictating dictation tools free Libre
+
+00:12:52.260 --> 00:12:52.760
+software? They cannot find that information
+
+00:12:54.840 --> 00:12:55.080
+Which I think is part of it.
+
+00:12:55.320 --> 00:12:55.820
+You just mentioned
+
+00:12:57.280 --> 00:12:57.780
+[Speaker 0]: the voice in software.
+
+00:13:03.260 --> 00:13:03.760
+There's It's a freemium so The answer is no
+
+00:13:05.640 --> 00:13:06.140
+To be able to add the commands,
+
+00:13:09.000 --> 00:13:09.160
+the custom commands, you have to pay $48 a
+
+00:13:12.040 --> 00:13:12.540
+year. The Talon Voice software is free.
+
+00:13:20.080 --> 00:13:20.320
+And the only limitation there is access to
+
+00:13:23.560 --> 00:13:23.820
+the language model. If you want to get the
+
+00:13:26.720 --> 00:13:26.880
+beta version, you need to subscribe to
+
+00:13:30.820 --> 00:13:31.320
+Patreon to help support the developer.
+
+00:13:36.180 --> 00:13:36.460
+And I found, I did do that and I really
+
+00:13:37.400 --> 00:13:37.900
+didn't find much of an improvement.
+
+00:13:43.620 --> 00:13:43.780
+So I really don't intend to do that in the
+
+00:13:47.100 --> 00:13:47.600
+future. But otherwise,
+
+00:13:50.680 --> 00:13:51.180
+Town Voice, everything is open and free,
+
+00:13:54.380 --> 00:13:54.880
+and the Slack community is incredibly
+
+00:13:58.340 --> 00:13:58.820
+welcoming. The parallels with the Emacs
+
+00:14:00.060 --> 00:14:00.560
+community are pretty striking.
+
+00:14:09.520 --> 00:14:09.720
+[Speaker 1]: Excellent, thank you. Okay,
+
+00:14:11.800 --> 00:14:11.980
+I think we have about another minute on the
+
+00:14:13.780 --> 00:14:13.980
+live stream, but I believe the big blue
+
+00:14:16.560 --> 00:14:16.920
+button room here is open and will be open,
+
+00:14:19.860 --> 00:14:20.340
+So if folks want to join,
+
+00:14:21.840 --> 00:14:22.120
+if Blaine maybe has a couple of extra
+
+00:14:24.680 --> 00:14:24.840
+minutes. Awesome. Yeah,
+
+00:14:26.580 --> 00:14:26.760
+then you're welcome to join and chat with
+
+00:14:28.980 --> 00:14:29.480
+Blaine and ask any further questions or just
+
+00:14:30.060 --> 00:14:30.560
+do general chatting. Chatting.
+
+00:14:44.020 --> 00:14:44.380
+[Speaker 0]: So I see a question. How good is Talon
+
+00:14:53.040 --> 00:14:53.520
+compared to Whisper? So with Talon,
+
+00:14:55.380 --> 00:14:55.880
+I find that the first part of the sentence
+
+00:15:00.620 --> 00:15:00.820
+will be fairly accurate and then when I'm
+
+00:15:03.480 --> 00:15:03.980
+doing dictation And then towards the end,
+
+00:15:05.640 --> 00:15:06.140
+the errors start to accumulate.
+
+00:15:09.520 --> 00:15:09.720
+So in general, I think it's error rate is
+
+00:15:12.880 --> 00:15:13.100
+about 5 words out of a hundred or so will be
+
+00:15:17.560 --> 00:15:18.040
+wrong. And whisper, Whisper is wonderful
+
+00:15:21.000 --> 00:15:21.500
+because it will insert punctuation for you.
+
+00:15:26.120 --> 00:15:26.320
+But I guess its errors are longer and that
+
+00:15:28.740 --> 00:15:29.240
+it'll hallucinate full sentences for you.
+
+00:15:35.460 --> 00:15:35.960
+So they both have significant error rates.
+
+00:15:37.280 --> 00:15:37.780
+They're just different kinds of errors.
+
+00:15:42.340 --> 00:15:42.840
+[Speaker 1]: Interesting.
+
+00:15:49.000 --> 00:15:49.500
+[Speaker 0]: Hopefully both will improve over time.
+
+00:15:50.740 --> 00:15:51.240
+Right.
+
+00:16:04.620 --> 00:16:05.120
+Let's see. There's a question.
+
+00:16:09.060 --> 00:16:09.560
+Are the green block the author for this talk?
+
+00:16:13.380 --> 00:16:13.880
+Not sure what that question means.
+
+00:16:19.180 --> 00:16:19.300
+[Speaker 1]: Well, there is a green block of text that's I
+
+00:16:22.540 --> 00:16:23.040
+think being generated from voice to text,
+
+00:16:25.560 --> 00:16:25.680
+speech to text. At the top of the pad,
+
+00:16:26.500 --> 00:16:27.000
+I think that's the question.
+
+00:16:40.060 --> 00:16:40.280
+[Speaker 0]: So I have this Voicens software operating on
+
+00:16:43.080 --> 00:16:43.580
+this GitHub, on this 750words.com
+
+00:16:51.960 --> 00:16:52.120
+site where I do my generative writing at the
+
+00:16:57.340 --> 00:16:57.720
+start of the day. And it just provides a text
+
+00:16:59.600 --> 00:17:00.100
+area that's free of distractions.
+
+00:17:03.220 --> 00:17:03.480
+And you can see the text that's being
+
+00:17:08.440 --> 00:17:08.540
+recorded as I talk. I haven't been saying the
+
+00:17:12.440 --> 00:17:12.700
+command new sentence, so there isn't any
+
+00:17:15.980 --> 00:17:16.480
+punctuation over our discourse.
+
+00:17:24.380 --> 00:17:24.880
+1 thing that I do at the start of the day is
+
+00:17:27.440 --> 00:17:27.940
+I like to write in LaTeX.
+
+00:17:33.600 --> 00:17:34.100
+Ultimately, that's how I store my writing.
+
+00:17:37.500 --> 00:17:38.000
+So new sentence, new sentence.
+
+00:17:51.680 --> 00:17:52.180
+See, insert start day.
+
+00:17:58.960 --> 00:17:59.460
+So This is an example of a chunk of LaTeX
+
+00:18:02.620 --> 00:18:03.120
+code. So I have some reflections on,
+
+00:18:04.640 --> 00:18:04.920
+you know, what did I wake up this morning?
+
+00:18:08.000 --> 00:18:08.160
+And how do I feel? I have reflections on the
+
+00:18:10.680 --> 00:18:10.840
+prior day in terms of what did I get done
+
+00:18:12.240 --> 00:18:12.440
+yesterday? Do I remember what I did
+
+00:18:14.140 --> 00:18:14.640
+yesterday? What happened last night?
+
+00:18:16.940 --> 00:18:17.440
+Focus of today. What's to be done today?
+
+00:18:23.180 --> 00:18:23.680
+And so on. So I actually,
+
+00:18:24.840 --> 00:18:25.340
+I think I have more down here.
+
+00:18:31.420 --> 00:18:31.680
+Then I've set up these lists so that I can
+
+00:18:33.760 --> 00:18:34.260
+expand them easily. If I say item,
+
+00:18:40.720 --> 00:18:40.900
+then the cursor shows up at the start of an
+
+00:18:45.600 --> 00:18:46.100
+item. And I have it coded so that that new
+
+00:18:48.700 --> 00:18:49.200
+phrase that I speak will start with a capital
+
+00:18:52.480 --> 00:18:52.980
+letter. As you can see,
+
+00:18:54.520 --> 00:18:55.020
+so capitalize the word and.
+
+00:19:02.860 --> 00:19:03.360
+So in spite of its rather limited command
+
+00:19:06.000 --> 00:19:06.380
+syntax, There's some, it's enough to get
+
+00:19:08.000 --> 00:19:08.400
+started and maybe in the future,
+
+00:19:09.360 --> 00:19:09.860
+they'll add more features.
+
+00:19:14.540 --> 00:19:15.040
+[Speaker 1]: Cool, that's neat.
+
+00:19:21.440 --> 00:19:21.940
+[Speaker 0]: So I think this is very helpful for,
+
+00:19:28.840 --> 00:19:29.040
+you know, doing things like expanding the
+
+00:19:32.780 --> 00:19:32.980
+names of people. So you can do set up
+
+00:19:36.100 --> 00:19:36.600
+commands like expand the name of a colleague
+
+00:19:40.520 --> 00:19:40.800
+to go from their first name to their full
+
+00:19:42.900 --> 00:19:43.260
+name with a proper spelling of their last
+
+00:19:45.240 --> 00:19:45.360
+name, which, you know,
+
+00:19:47.420 --> 00:19:47.640
+you can wind up spending a lot of time trying
+
+00:19:53.400 --> 00:19:53.640
+to look that up. And so this voice in with
+
+00:19:57.560 --> 00:19:57.880
+the custom commands enables you to store hard
+
+00:19:59.540 --> 00:20:00.040
+to remember information like that.
+
+00:20:08.040 --> 00:20:08.540
+[Speaker 1]: Great. I see another question.
+
+00:20:11.140 --> 00:20:11.580
+How good is Talon compared to Whisper?
+
+00:20:13.140 --> 00:20:13.480
+I think you might have answered that already,
+
+00:20:14.380 --> 00:20:14.880
+at least partially, but...
+
+00:20:19.860 --> 00:20:20.080
+[Speaker 0]: Right, yeah. I talked about how it seems that
+
+00:20:22.580 --> 00:20:23.080
+Whisperer will carry out hallucinations,
+
+00:20:26.280 --> 00:20:26.780
+so it will generate long tracks of error,
+
+00:20:30.340 --> 00:20:30.580
+whereas Talon will tend to generate more
+
+00:20:31.960 --> 00:20:32.460
+errors towards the ends of sentences,
+
+00:20:36.820 --> 00:20:36.960
+in my experience. And the errors are
+
+00:20:37.960 --> 00:20:38.460
+generally shorter in extent.
+
+00:20:42.180 --> 00:20:42.680
+It doesn't hallucinate for long tracks.
+
+00:20:50.660 --> 00:20:51.040
+[Speaker 1]: Great. Okay, I think that's all the questions
+
+00:20:51.760 --> 00:20:52.260
+that we have on the pad.
+
+00:20:54.720 --> 00:20:55.020
+If folks want to join here on Big Blue Button
+
+00:20:56.680 --> 00:20:57.180
+for a few minutes and chat with Blaine,
+
+00:21:00.260 --> 00:21:00.480
+that also works. Let's see,
+
+00:21:02.080 --> 00:21:02.240
+I'm probably going to have to drop in a few
+
+00:21:03.900 --> 00:21:04.400
+minutes to catch the next speaker.
+
+00:21:07.860 --> 00:21:08.100
+But many thanks, Blaine,
+
+00:21:09.520 --> 00:21:09.900
+for a great talk and for the interesting
+
+00:21:11.180 --> 00:21:11.680
+demos and the question and answer.
+
+00:21:14.700 --> 00:21:15.200
+[Speaker 0]: Thank you very much for hosting this.
+
+00:21:16.640 --> 00:21:17.140
+[Speaker 1]: I appreciate it. glad to have you.
+
+00:21:25.680 --> 00:21:25.960
+[Speaker 0]: Cheers, Yeah, this is really amazing to hold
+
+00:21:28.740 --> 00:21:29.020
+this conference with people from all around
+
+00:21:34.660 --> 00:21:34.940
+the world connected together through web
+
+00:21:34.940 --> 00:21:35.440
+browsers.
+
+00:21:41.020 --> 00:21:41.260
+[Speaker 1]: Yeah, it's very neat what technology can do
+
+00:21:42.400 --> 00:21:42.900
+if and when it's working correctly.
+
+00:21:47.680 --> 00:21:47.860
+[Speaker 0]: I know it can be a little frustrating at
+
+00:21:48.760 --> 00:21:49.120
+times, but when it's working,
+
+00:21:54.740 --> 00:21:55.240
+it's wonderful. Yep.
+
+NOTE Start of section to review
+
+00:21:59.540 --> 00:21:59.700
+[Speaker 2]: Good purpose of computers is all the
+
+00:22:01.100 --> 00:22:01.600
+computers run the same code,
+
+00:22:03.460 --> 00:22:03.860
+so that people, you know,
+
+00:22:05.740 --> 00:22:06.240
+a lot of people work on the same thing and
+
+00:22:08.360 --> 00:22:08.860
+build upon each other's works.
+
+00:22:16.460 --> 00:22:16.960
+For journaling I found 1 good compromise
+
+00:22:18.204 --> 00:22:18.428
+between editing and stream-of-thought
+
+00:22:19.548 --> 00:22:19.772
+journaling. 1 good compromise between editing
+
+00:22:20.680 --> 00:22:21.180
+and stream of thought journaling.
+
+00:22:23.940 --> 00:22:24.120
+1 good compromise between editing and being
+
+00:22:26.980 --> 00:22:27.480
+able to do it again and just kind of helps me
+
+00:22:31.160 --> 00:22:31.320
+do my thoughts even when I do it is when you
+
+00:22:33.180 --> 00:22:33.340
+do org mode and you have the bullets it kind
+
+00:22:35.280 --> 00:22:35.680
+of allows you to naturally chart your
+
+00:22:38.800 --> 00:22:39.300
+thoughts in a way that's really easy to edit
+
+00:22:41.880 --> 00:22:42.380
+reorder I saw you kind of did that with your
+
+00:22:47.160 --> 00:22:47.280
+mac la tech macro where you said item and it
+
+00:22:48.680 --> 00:22:49.180
+would put you down to the next item.
+
+00:22:56.500 --> 00:22:57.000
+Does... How much do you do stuff like that?
+
+00:23:00.720 --> 00:23:01.000
+How much do you do stuff like that where you
+
+00:23:04.700 --> 00:23:05.200
+use like org mode headings and then you
+
+00:23:07.000 --> 00:23:07.200
+reorder them because like I did that with
+
+00:23:10.080 --> 00:23:10.460
+also the K outline from HyperBolt package for
+
+00:23:15.140 --> 00:23:15.420
+the for Emacs org mode later on after the
+
+00:23:21.880 --> 00:23:22.060
+[Speaker 0]: stream. Yes. So I could actually set this up
+
+00:23:26.800 --> 00:23:27.300
+so I have a lot of snippets for Org Mode.
+
+00:23:30.720 --> 00:23:31.160
+I could have Org Mode version of my insert
+
+00:23:34.600 --> 00:23:34.780
+start day snippet and carry things out in org
+
+00:23:39.920 --> 00:23:40.420
+mode. So I use org mode from time to time.
+
+00:23:43.480 --> 00:23:43.980
+I often use it for the purpose of writing
+
+00:23:47.780 --> 00:23:48.060
+readme files for projects to outline the
+
+00:23:48.700 --> 00:23:49.200
+purpose of the project,
+
+00:23:54.900 --> 00:23:55.320
+and say for a director that contains a coding
+
+00:24:01.620 --> 00:24:02.120
+project. And I think this would,
+
+00:24:07.300 --> 00:24:07.700
+so the main limitation of VoiceIn is it only
+
+00:24:10.600 --> 00:24:10.760
+works in a web page and you have to have an
+
+00:24:14.180 --> 00:24:14.640
+Internet connection, whereas Talon voice is
+
+00:24:17.220 --> 00:24:17.720
+perfect for something like org mode in that
+
+00:24:20.200 --> 00:24:20.460
+you don't need an internet connection and it
+
+00:24:22.940 --> 00:24:23.100
+will operate anywhere that you can place a
+
+00:24:24.840 --> 00:24:24.960
+cursor. I haven't found a place where it
+
+00:24:26.760 --> 00:24:27.260
+doesn't work. It's amazing.
+
+00:24:28.860 --> 00:24:29.360
+So as you saw my talk,
+
+00:24:35.400 --> 00:24:35.560
+perhaps You can run it in a terminal or a
+
+00:24:38.320 --> 00:24:38.760
+remote computer. You can run it in a virtual
+
+00:24:44.120 --> 00:24:44.380
+[Speaker 2]: Oh yeah, it's definitely.
+
+00:24:45.760 --> 00:24:46.260
+[Speaker 0]: machine. If you can put your cursor there,
+
+00:24:50.820 --> 00:24:51.320
+it will work. And so as you might imagine,
+
+00:24:52.720 --> 00:24:53.220
+if you use bash aliases,
+
+00:24:55.920 --> 00:24:56.200
+I've worked for, 1 of the first things I did
+
+00:25:00.720 --> 00:25:00.920
+was map Talend commands to bash aliases so
+
+00:25:02.800 --> 00:25:03.300
+that I can do all kinds of crazy things
+
+00:25:04.200 --> 00:25:04.700
+inside of the terminal.
+
+00:25:12.040 --> 00:25:12.260
+And there are, you know,
+
+00:25:15.260 --> 00:25:15.660
+there's some support already for using Talon
+
+00:25:20.280 --> 00:25:20.780
+in Emacs. There's some Emacs functionality
+
+00:25:21.960 --> 00:25:22.460
+that's built into Talon.
+
+00:25:25.160 --> 00:25:25.660
+So when you are in Emacs,
+
+00:25:27.100 --> 00:25:27.600
+there's some features that are automatically
+
+00:25:30.520 --> 00:25:31.020
+available. And then others have developed or
+
+00:25:32.320 --> 00:25:32.820
+are developing packages,
+
+00:25:34.920 --> 00:25:35.080
+which I don't think are available yet in
+
+00:25:40.240 --> 00:25:40.680
+ELPA. There's 1 that does the font locking or
+
+00:25:42.780 --> 00:25:43.280
+syntax highlighting of Talon files,
+
+00:25:46.240 --> 00:25:46.720
+and another that adds some additional
+
+00:25:50.380 --> 00:25:50.880
+functionality that I'm regrettably not yet
+
+00:25:51.440 --> 00:25:51.940
+familiar with.
+
+00:25:55.680 --> 00:25:55.940
+[Speaker 2]: Well, as an example with like how the
+
+00:25:56.760 --> 00:25:57.100
+sharding of the thoughts,
+
+00:25:59.800 --> 00:26:00.140
+like let's say, oh, how has my day went?
+
+00:26:01.980 --> 00:26:03.080
+It's went good for reasons 123,
+
+00:26:04.860 --> 00:26:05.740
+and bad for reasons ABC.
+
+00:26:07.828 --> 00:26:07.872
+And then later on, I might think,
+
+00:26:08.460 --> 00:26:08.860
+oh, there's an, I also,
+
+00:26:10.520 --> 00:26:11.780
+my day went good for reasons 456,
+
+00:26:14.540 --> 00:26:14.880
+then you, I can, then you jump up.
+
+00:26:18.520 --> 00:26:18.820
+And so the, like I found like,
+
+00:26:19.760 --> 00:26:20.260
+yeah, the org mode subheadings,
+
+00:26:21.980 --> 00:26:22.480
+because you're able to jump around,
+
+00:26:25.040 --> 00:26:25.540
+easily reorder them after the fact,
+
+00:26:32.520 --> 00:26:32.860
+the very streamlined approach to the stream
+
+00:26:33.620 --> 00:26:34.120
+of thought and the editing.
+
+00:26:38.800 --> 00:26:39.300
+[Speaker 0]: That's right, extremely powerful.
+
+00:26:41.200 --> 00:26:41.500
+[Speaker 2]: And even with the stream of thought,
+
+00:26:44.060 --> 00:26:44.480
+just because like, even when you're editing
+
+00:26:45.200 --> 00:26:45.380
+that in real time, like,
+
+00:26:47.320 --> 00:26:47.800
+oh, wait a minute, I thought of another
+
+00:26:48.960 --> 00:26:49.200
+reason that my day went good,
+
+00:26:50.640 --> 00:26:50.820
+even though I was talking about how it was
+
+00:26:52.760 --> 00:26:53.260
+going bad now. So you jump up.
+
+00:26:55.680 --> 00:26:56.180
+And then you do that. And then you have it.
+
+00:26:59.540 --> 00:27:00.040
+You easily summarize your thoughts and
+
+00:27:00.060 --> 00:27:00.560
+whatnot.
+
+00:27:07.200 --> 00:27:07.600
+[Speaker 0]: That's right. And I think org mode is really
+
+00:27:11.680 --> 00:27:12.180
+ideal for that kind of interact.
+
+00:27:15.240 --> 00:27:15.480
+So yeah, I see your point in terms of that
+
+00:27:18.760 --> 00:27:19.260
+sort of a blend of generative writing and
+
+00:27:23.440 --> 00:27:23.940
+editing. And it's also kind of parallel to
+
+00:27:27.240 --> 00:27:27.660
+mind mapping. I use this mind mapping
+
+00:27:32.660 --> 00:27:33.160
+software called iThoughtsX where I'll
+
+00:27:36.760 --> 00:27:37.260
+generate all these children items,
+
+00:27:40.040 --> 00:27:40.540
+and then I'll drag them around and resort
+
+00:27:46.680 --> 00:27:47.180
+them. And they can have children of their own
+
+00:27:48.940 --> 00:27:49.400
+and grandchildren and so on,
+
+00:27:50.800 --> 00:27:51.300
+in terms of the levels of the nodes.
+
+00:27:54.920 --> 00:27:55.240
+And it's pretty much the same sort of thing
+
+00:27:57.560 --> 00:27:57.960
+with a nested hierarchy that you can have
+
+00:28:02.660 --> 00:28:03.040
+with org mode. I think having several
+
+00:28:09.900 --> 00:28:10.120
+alternate modes or modalities of playing with
+
+00:28:13.100 --> 00:28:13.300
+thoughts is useful. So sometimes I'll hit a
+
+00:28:17.180 --> 00:28:17.680
+wall and we're just not really generating
+
+00:28:21.260 --> 00:28:21.760
+anything in a text mode.
+
+00:28:25.000 --> 00:28:25.500
+But if I switch to using the mind mapping,
+
+00:28:30.040 --> 00:28:30.420
+just seeing it arranged with the connecting
+
+00:28:34.920 --> 00:28:35.280
+lines plays on a different part of the brain,
+
+00:28:37.640 --> 00:28:38.140
+I think, and it can be incredibly
+
+00:28:40.600 --> 00:28:40.800
+stimulatory. It can stimulate a lot of new
+
+00:28:43.480 --> 00:28:43.780
+[Speaker 2]: That's something that I haven't messed around
+
+00:28:45.400 --> 00:28:45.900
+too much with is the mind mapping software,
+
+00:28:45.980 --> 00:28:46.480
+but...
+
+00:28:51.600 --> 00:28:51.760
+[Speaker 0]: thoughts. Because the closest thing that we
+
+00:28:56.400 --> 00:28:56.600
+have to it in Emacs is Orgrimm in the in
+
+00:29:00.860 --> 00:29:01.360
+terms of like the 3D visualization of with
+
+00:29:03.720 --> 00:29:04.220
+Orgrimm GUI or
+
+00:29:10.120 --> 00:29:10.620
+[Speaker 2]: UI. As well as being able to generate SVG
+
+00:29:12.800 --> 00:29:13.100
+diagrams and stuff like that,
+
+00:29:16.980 --> 00:29:17.260
+I think those 2 things would allow you stuff
+
+00:29:20.240 --> 00:29:20.740
+like Orgrimm or denote And then the diagrams
+
+00:29:23.160 --> 00:29:23.300
+would be the good ways of doing that in
+
+00:29:25.200 --> 00:29:25.600
+Emacs, but they don't have the mind map
+
+00:29:27.160 --> 00:29:27.660
+programs as well.
+
+00:29:30.140 --> 00:29:30.640
+[Speaker 0]: They're not as well developed.
+
+00:29:32.740 --> 00:29:33.240
+There are a couple mind mapping packages,
+
+00:29:37.200 --> 00:29:37.700
+but they're not as advanced.
+
+00:29:41.920 --> 00:29:42.180
+[Speaker 2]: The best ones were JavaScript web page that
+
+00:29:43.840 --> 00:29:44.340
+it that Emacs interacted with.
+
+00:29:46.180 --> 00:29:46.680
+Very well. And so they kind of,
+
+00:29:49.120 --> 00:29:49.620
+you know, worked around and had a little.
+
+00:29:51.620 --> 00:29:51.820
+Integration with the 2.
+
+00:29:53.420 --> 00:29:53.920
+So when you be jumping around your.
+
+00:29:56.200 --> 00:29:56.380
+When you'd be clicking on the web page it
+
+00:29:59.300 --> 00:29:59.480
+would be pointing you to different places and
+
+00:30:07.060 --> 00:30:07.400
+buffers okay like those are those the There's
+
+00:30:11.480 --> 00:30:11.680
+an like org-roam node program where it kind
+
+00:30:13.360 --> 00:30:13.860
+of shows the looks like a mind map.
+
+00:30:17.820 --> 00:30:18.040
+You can click and drag them a little bit,
+
+00:30:18.680 --> 00:30:19.180
+so it's a little interactive.
+
+00:30:27.980 --> 00:30:28.480
+[Speaker 0]: Yeah, I'm not familiar with that.
+
+00:30:30.160 --> 00:30:30.660
+I'll have to look into that.
+
+00:30:32.240 --> 00:30:32.740
+That sounds very interesting.
+
+00:30:36.820 --> 00:30:37.200
+[Speaker 2]: I found that I didn't know better,
+
+00:30:38.560 --> 00:30:39.060
+though, than Org-ROM, so it doesn't.
+
+00:30:43.320 --> 00:30:43.820
+[Speaker 0]: Why is that?
+
+00:30:47.080 --> 00:30:47.580
+[Speaker 2]: Well, 1 of the things I'm,
+
+00:30:51.600 --> 00:30:51.760
+I want to be able to, I don't like the
+
+00:30:53.200 --> 00:30:53.700
+feeling of being trapped inside org-mode
+
+00:30:56.040 --> 00:30:56.540
+documents. Like I want to be able to write,
+
+00:30:58.940 --> 00:30:59.060
+even though I don't really use Markdown and I
+
+00:31:00.800 --> 00:31:01.020
+like org-mode better than that.
+
+00:31:02.720 --> 00:31:03.220
+Like for instance, I also use the Koutline
+
+00:31:04.280 --> 00:31:04.780
+from the Hyperbole package.
+
+00:31:08.160 --> 00:31:08.360
+That's what my I got a talk on the stream of
+
+00:31:12.620 --> 00:31:12.700
+thought journaling for with Koutline and I
+
+00:31:14.060 --> 00:31:14.160
+was like, I just don't like the feeling of
+
+00:31:18.480 --> 00:31:18.700
+being tracked in 1 document and denote has
+
+00:31:21.300 --> 00:31:21.800
+the ability to it renames the file so you get
+
+00:31:26.020 --> 00:31:26.520
+keywords in like a PDF file so you can take
+
+00:31:28.100 --> 00:31:28.380
+so you can link to that with your notes
+
+00:31:30.540 --> 00:31:30.700
+without it all disappearing because it's not
+
+00:31:36.340 --> 00:31:36.440
+an org mode document. Plus the ability of
+
+00:31:38.520 --> 00:31:38.940
+having it run on multiple computers or with
+
+00:31:42.660 --> 00:31:43.160
+multiple people, the database kind of gets
+
+00:31:46.480 --> 00:31:46.720
+screwed up when you try running it under sync
+
+00:31:50.500 --> 00:31:51.000
+thing. Sync. More fragile.
+
+00:31:56.000 --> 00:31:56.500
+[Speaker 0]: Very interesting. Yeah.
+
+00:32:03.260 --> 00:32:03.680
+How far are you? So are you a regular
+
+00:32:06.480 --> 00:32:06.980
+practitioner of the Zettelkasten approach?
+
+00:32:12.180 --> 00:32:12.680
+[Speaker 2]: Trying to be. Incrementally improving it.
+
+00:32:16.780 --> 00:32:16.980
+I partly work too much like testing out the
+
+00:32:20.760 --> 00:32:21.000
+org-roam versus the notes to use it too much.
+
+00:32:23.300 --> 00:32:23.500
+So part of it is I just tweak with it too
+
+00:32:24.800 --> 00:32:25.300
+much before using it and then.
+
+00:32:28.740 --> 00:32:29.240
+[Speaker 0]: Oh, it's so fun to tweak it.
+
+00:32:32.580 --> 00:32:32.840
+[Speaker 2]: I think mostly it's as I have these tools,
+
+00:32:33.640 --> 00:32:34.140
+I know where they are.
+
+00:32:35.760 --> 00:32:35.980
+So whenever I do need them,
+
+00:32:37.680 --> 00:32:38.180
+I can use them, even though I don't always
+
+00:32:38.440 --> 00:32:38.940
+use them.
+
+00:32:43.680 --> 00:32:43.940
+[Speaker 0]: So I have about a thousand notes in my org
+
+00:32:47.720 --> 00:32:48.040
+room. Zettelkasten. I've actually,
+
+00:32:50.140 --> 00:32:50.320
+it's kind of cool that you can export it and
+
+00:32:51.460 --> 00:32:51.960
+move it into other programs.
+
+00:32:56.320 --> 00:32:56.520
+I have moved it to Obsidian and played with
+
+00:32:57.720 --> 00:32:58.180
+it in Obsidian for a while,
+
+00:32:59.820 --> 00:33:00.320
+maybe added to it in Obsidian,
+
+00:33:01.480 --> 00:33:01.980
+moved it back to Orgrim.
+
+00:33:07.080 --> 00:33:07.580
+But I'm not convinced.
+
+00:33:10.680 --> 00:33:11.180
+I mean, that I think that Nicholas Luhmann
+
+00:33:13.360 --> 00:33:13.700
+was very successful with it because he spent
+
+00:33:15.920 --> 00:33:16.420
+5 hours a day or whatever working with it.
+
+00:33:18.560 --> 00:33:19.060
+And I think I would have to do,
+
+00:33:21.180 --> 00:33:21.600
+put in a similar amount of effort to get this
+
+00:33:23.600 --> 00:33:24.100
+kind of benefits that he gained from it.
+
+00:33:26.480 --> 00:33:26.980
+I'm waiting for somebody to do a scientific
+
+00:33:29.200 --> 00:33:29.700
+study, controlled trials to see,
+
+00:33:31.720 --> 00:33:32.220
+to prove whether there's a real benefit.
+
+00:33:37.900 --> 00:33:38.400
+[Speaker 2]: Oh, yeah. So with the Zettelkasten,
+
+00:33:41.120 --> 00:33:41.320
+one of the things where you have the 1 for the
+
+00:33:42.180 --> 00:33:42.680
+sections, and then the 1.1,
+
+00:33:47.160 --> 00:33:47.480
+or you know how the notes that it does that's
+
+00:33:48.740 --> 00:33:49.240
+different. The denote,
+
+00:33:52.880 --> 00:33:53.380
+it has the ability to use a hierarchy manage,
+
+00:33:55.480 --> 00:33:55.640
+which Org-ROM does everything it can to
+
+00:33:57.380 --> 00:33:57.560
+eliminate. But you can use them both in
+
+00:33:59.140 --> 00:33:59.640
+tandem. They call it signatures.
+
+00:34:04.820 --> 00:34:05.160
+And to me, 1 of the cool features of denote
+
+00:34:06.820 --> 00:34:07.120
+would be being able to use like the
+
+00:34:09.780 --> 00:34:10.280
+signatures for the things that make sense.
+
+00:34:13.440 --> 00:34:13.860
+Like 1 of the ideas is if you don't exactly
+
+00:34:14.960 --> 00:34:15.100
+know where this is, but you know,
+
+00:34:15.920 --> 00:34:16.239
+it goes to the section,
+
+00:34:17.060 --> 00:34:17.560
+you can just use the signature.
+
+00:34:19.760 --> 00:34:20.080
+Maybe don't even have too much of a file
+
+00:34:22.679 --> 00:34:23.179
+name. Like oh, this is just another thought
+
+00:34:28.199 --> 00:34:28.420
+on, well you wouldn't use it for this,
+
+00:34:30.360 --> 00:34:30.719
+but like my day went good for reasons 1,
+
+00:34:33.040 --> 00:34:33.380
+2, 3, 4, 5, and you could just use the denote
+
+00:34:34.639 --> 00:34:34.920
+signature to do 1, 2, 3,
+
+00:34:37.659 --> 00:34:37.800
+4, 5, just as you have new ideas on like a
+
+00:34:41.840 --> 00:34:42.040
+subject, or like cars are cars are not this
+
+00:34:43.659 --> 00:34:44.580
+car is nice because of reasons XYZ,
+
+00:34:46.920 --> 00:34:47.219
+or these types of four-wheelers are nice
+
+00:34:48.940 --> 00:34:49.080
+because of XYZ. And you could just keep on
+
+00:34:50.760 --> 00:34:50.980
+doing that rather than having to get a new
+
+00:34:52.120 --> 00:34:52.620
+name for each 1 of those files.
+
+00:34:55.280 --> 00:34:55.520
+Or you could choose not to have it,
+
+00:34:57.780 --> 00:34:58.280
+but the ability to have it optionally in,
+
+00:35:01.020 --> 00:35:01.520
+to me, sounds like a really nice combo.
+
+00:35:03.000 --> 00:35:03.200
+Because then you
+
+00:35:06.140 --> 00:35:06.420
+[Speaker 0]: could read. I agree. Yeah,
+
+00:35:08.800 --> 00:35:09.020
+I've actually imposed a hierarchy in my
+
+00:35:10.320 --> 00:35:10.820
+Zettelkasten and Orgrim.
+
+00:35:17.680 --> 00:35:18.180
+I just, I can't imagine having random ideas.
+
+00:35:21.200 --> 00:35:21.700
+They need some kind of structure.
+
+00:35:27.500 --> 00:35:27.840
+Always have some kind of parent node to
+
+00:35:28.420 --> 00:35:28.920
+attach them to.
+
+00:35:32.740 --> 00:35:32.960
+[Speaker 2]: With the workflow I'm trying to develop with
+
+00:35:34.440 --> 00:35:34.840
+it, part of it is I'm just trying to optimize
+
+00:35:36.820 --> 00:35:37.080
+the workflow before it feels really,
+
+00:35:38.480 --> 00:35:38.560
+really, really good, and I don't want to
+
+00:35:39.720 --> 00:35:40.220
+tweak with it, or I don't know.
+
+00:35:42.480 --> 00:35:42.980
+Or maybe I don't always need the tool,
+
+00:35:45.780 --> 00:35:46.020
+but some of the distinctions it seems like
+
+00:35:52.400 --> 00:35:52.580
+that I want is, I want a daily journal For
+
+00:35:53.100 --> 00:35:53.600
+your stream of thoughts,
+
+00:35:56.000 --> 00:35:56.480
+then I want a separate 1 for your to do list
+
+00:35:57.980 --> 00:35:58.480
+because what you like.
+
+00:36:01.240 --> 00:36:01.440
+You want very different properties for each
+
+00:36:03.040 --> 00:36:03.540
+of those. Like for to-do lists,
+
+00:36:04.820 --> 00:36:05.320
+you want hierarchical,
+
+00:36:11.260 --> 00:36:11.760
+limited. But if you have more than 3 priority
+
+00:36:13.660 --> 00:36:13.820
+items, you don't have a priority item and
+
+00:36:14.820 --> 00:36:15.040
+it's not a good to-do list.
+
+00:36:18.480 --> 00:36:18.980
+It's just unordered thoughts.
+
+00:36:23.480 --> 00:36:23.680
+[Speaker 0]: it's a wishful list, because you won't get
+
+00:36:26.000 --> 00:36:26.500
+most of those things done beyond the first 3.
+
+00:36:28.180 --> 00:36:28.380
+[Speaker 2]: You're trying to- So And then when you're
+
+00:36:30.600 --> 00:36:31.100
+trying to do the other stuff,
+
+00:36:31.980 --> 00:36:32.480
+the stream of thoughts,
+
+00:36:34.640 --> 00:36:35.080
+all that stuff I probably don't want to go
+
+00:36:36.720 --> 00:36:36.900
+straight into like my Zettelkasten because
+
+00:36:37.440 --> 00:36:37.940
+some of those problems,
+
+00:36:42.660 --> 00:36:43.160
+like it's noisy, it might be redundant,
+
+00:36:45.300 --> 00:36:45.520
+you don't know how it fits into it because
+
+00:36:46.920 --> 00:36:47.080
+you haven't done that processing on it.
+
+00:36:47.960 --> 00:36:48.460
+This hasn't been refined.
+
+00:36:53.000 --> 00:36:53.140
+So, like, you don't want to refine it.
+
+00:36:54.960 --> 00:36:55.320
+Like, I find that spell checking is
+
+00:36:56.680 --> 00:36:56.920
+detrimental to me. I don't want spell
+
+00:36:58.520 --> 00:36:58.840
+checking. I don't want spell checking.
+
+00:37:00.200 --> 00:37:00.600
+I don't want syntax highlighting.
+
+00:37:04.040 --> 00:37:04.540
+I just want to talk or to just write.
+
+00:37:07.020 --> 00:37:07.520
+If I have mistakes, I can turn on that later,
+
+00:37:08.800 --> 00:37:09.220
+do it. Because otherwise,
+
+00:37:13.340 --> 00:37:13.740
+it will distract me and makes that process
+
+00:37:20.140 --> 00:37:20.280
+[Speaker 0]: Yep, yep, definitely interferes with the
+
+00:37:20.280 --> 00:37:20.780
+flow.
+
+00:37:24.840 --> 00:37:25.080
+[Speaker 2]: worse. So yeah, when you're so yeah when
+
+00:37:28.080 --> 00:37:28.440
+you're doing the getting things done like
+
+00:37:30.040 --> 00:37:30.240
+that's why I want them would be want would
+
+00:37:32.360 --> 00:37:32.600
+want them in separate files is that you want
+
+00:37:34.160 --> 00:37:34.660
+them like ordered, numbered lists,
+
+00:37:38.980 --> 00:37:39.480
+smaller. And then with the other,
+
+00:37:40.440 --> 00:37:40.800
+with the stream of thought,
+
+00:37:42.340 --> 00:37:42.840
+with journaling, you'd want it just
+
+00:37:45.240 --> 00:37:45.740
+unordered. Thoughts land wherever they may.
+
+00:37:49.140 --> 00:37:49.640
+Maybe not even like machine-generated
+
+00:37:51.400 --> 00:37:51.660
+timestamps, So you don't even have to worry
+
+00:37:52.440 --> 00:37:52.940
+about the names of it,
+
+00:37:55.080 --> 00:37:55.380
+as an example. So yeah,
+
+00:37:56.960 --> 00:37:57.160
+very different properties for what you want
+
+00:37:58.260 --> 00:37:58.760
+for both of those modalities.
+
+00:38:06.340 --> 00:38:06.440
+[Speaker 0]: So you saw, perhaps, in that snippet that I
+
+00:38:07.860 --> 00:38:08.360
+had that at, you know,
+
+00:38:10.440 --> 00:38:10.580
+working on my to-do list at the start of the
+
+00:38:13.080 --> 00:38:13.580
+day, but in a certain sense that is not ideal
+
+00:38:20.320 --> 00:38:20.820
+time. I really haven't optimized the timing
+
+00:38:22.640 --> 00:38:23.040
+of assembly of the to-do list,
+
+00:38:24.020 --> 00:38:24.520
+I think, in retrospect.
+
+00:38:27.540 --> 00:38:27.880
+It's just by lifelong habit.
+
+00:38:29.060 --> 00:38:29.560
+I do that at the beginning of the day,
+
+00:38:32.860 --> 00:38:33.000
+but probably would be better to do it at
+
+00:38:34.360 --> 00:38:34.860
+night or the night before.
+
+00:38:38.000 --> 00:38:38.500
+And so you sort of prime your brain to go,
+
+00:38:41.180 --> 00:38:41.680
+just get up and go, go after those items.
+
+00:38:46.360 --> 00:38:46.680
+You were, you maybe you want to revise the
+
+00:38:49.120 --> 00:38:49.620
+items a little bit after sleeping on it,
+
+00:38:52.360 --> 00:38:52.820
+but after your subconscious has worked on
+
+00:38:57.500 --> 00:38:57.660
+those items. Do you have a daily routine that
+
+00:38:59.680 --> 00:38:59.900
+you follow in terms of generating those kind
+
+00:39:00.020 --> 00:39:00.520
+of lists?
+
+00:39:05.660 --> 00:39:06.160
+[Speaker 2]: No. As I said, mostly I just got scaffolding
+
+00:39:08.040 --> 00:39:08.300
+for this stuff when I want to do it.
+
+00:39:10.520 --> 00:39:10.760
+I enjoy building the scaffolding and I know
+
+00:39:12.340 --> 00:39:12.600
+where the tools are when I need it.
+
+00:39:14.540 --> 00:39:14.760
+And I start using them when I need it,
+
+00:39:17.040 --> 00:39:17.540
+but I don't have it too consistent.
+
+00:39:29.720 --> 00:39:30.220
+[Speaker 0]: So OK, so you've looked so far at denote and
+
+00:39:35.300 --> 00:39:35.800
+org-roam, and you're using k-outline.
+
+00:39:39.520 --> 00:39:39.840
+And are there other tools that you've
+
+00:39:39.840 --> 00:39:40.340
+explored?
+
+00:39:44.380 --> 00:39:44.880
+[Speaker 2]: I've tried using whisper.el
+
+00:39:50.720 --> 00:39:50.920
+and nerd dictation to do What your talk was
+
+00:39:53.560 --> 00:39:53.760
+about? Speaking speech to text to see how
+
+00:39:56.720 --> 00:39:56.840
+that changes Because it does change what you
+
+00:40:01.020 --> 00:40:01.120
+think What you write down when you speak it
+
+00:40:05.080 --> 00:40:05.500
+rather than write it. Same thing as when
+
+00:40:07.420 --> 00:40:07.540
+you're thinking about when you eliminate the
+
+00:40:08.940 --> 00:40:09.440
+editing, it changes the way you write.
+
+00:40:11.900 --> 00:40:12.260
+When you have the spell checking,
+
+00:40:14.100 --> 00:40:14.340
+it changes the way you write to a much
+
+00:40:20.280 --> 00:40:20.600
+smaller degree. But that's the stuff I really
+
+00:40:23.560 --> 00:40:24.060
+haven't gotten working as well,
+
+00:40:25.120 --> 00:40:25.620
+or underdeveloped.
+
+00:40:30.160 --> 00:40:30.660
+[Speaker 0]: So the dictated text winds up,
+
+00:40:37.740 --> 00:40:37.900
+I'll move it in. Often I move it into on
+
+00:40:40.920 --> 00:40:41.200
+Overleaf, this website for a lot of tech
+
+00:40:44.080 --> 00:40:44.580
+documents. I have a plug-in for Rightful,
+
+00:40:50.520 --> 00:40:51.020
+And I use that to clean up my word choices
+
+00:40:56.160 --> 00:40:56.660
+and some grammar. And I use Grammarly.
+
+00:41:00.920 --> 00:41:01.080
+I'll copy and paste. It just depends on the
+
+00:41:01.680 --> 00:41:02.080
+nature of the writing,
+
+00:41:05.720 --> 00:41:06.220
+how serious it is, how polished it has to be.
+
+00:41:12.620 --> 00:41:13.080
+If I, if it's really vital,
+
+00:41:14.440 --> 00:41:14.800
+like for a grant application or something,
+
+00:41:16.880 --> 00:41:17.380
+I'll paste that into Grammarly and work on
+
+00:41:22.160 --> 00:41:22.540
+trying to get the writing level to the lowest
+
+00:41:26.100 --> 00:41:26.280
+possible grade level to make it as clear as
+
+00:41:30.040 --> 00:41:30.220
+possible to as wide of an audience as
+
+00:41:34.740 --> 00:41:34.900
+possible. 1 of the things I kind
+
+00:41:38.000 --> 00:41:38.500
+[Speaker 2]: of wish with all the spell checking grammarly
+
+00:41:40.440 --> 00:41:40.940
+is I kind of wish you could say,
+
+00:41:48.620 --> 00:41:49.120
+hey, what would the subtle cast in person
+
+00:41:52.120 --> 00:41:52.620
+think of what I wrote who what would einstein
+
+00:41:54.200 --> 00:41:54.400
+think of what I wrote because rather than
+
+00:41:57.340 --> 00:41:57.660
+just trying to make 1 uniform way of talking
+
+00:41:59.960 --> 00:42:00.440
+it's like people talk differently and that's
+
+00:42:04.080 --> 00:42:04.240
+an advantage and I can't I really wish like
+
+00:42:07.440 --> 00:42:07.820
+you maybe these GPT programs could do well.
+
+00:42:10.840 --> 00:42:11.000
+I really wish it could help you with the
+
+00:42:16.160 --> 00:42:16.420
+grammar, that maybe give you thoughts on what
+
+00:42:18.460 --> 00:42:18.720
+your notes are. What does this person think
+
+00:42:20.220 --> 00:42:20.380
+of your thoughts? What does this person think
+
+00:42:20.457 --> 00:42:20.464
+of your thoughts? Well,
+
+00:42:20.640 --> 00:42:20.940
+does this person think of your thoughts?
+
+00:42:22.280 --> 00:42:22.540
+Well, does this person think of your
+
+00:42:22.540 --> 00:42:23.040
+thoughts?
+
+00:42:27.720 --> 00:42:28.140
+[Speaker 0]: That's true. Yeah, I could probably do that
+
+00:42:31.560 --> 00:42:32.060
+even through chat GDP now.
+
+00:42:35.140 --> 00:42:35.640
+I haven't spent time trying that out.
+
+00:42:39.820 --> 00:42:40.320
+But I bet that capabilities are already.
+
+00:42:44.340 --> 00:42:44.480
+It would be nice if it was like built in to
+
+00:42:46.240 --> 00:42:46.740
+Emacs, right? It's a package.
+
+00:42:49.020 --> 00:42:49.520
+Yeah. That'd be very cool.
+
+00:42:52.260 --> 00:42:52.660
+[Speaker 2]: Grammarly have some sort of,
+
+00:42:55.040 --> 00:42:55.320
+like, the grammar where they help you the way
+
+00:42:57.660 --> 00:42:58.040
+you write. Like, for instance,
+
+00:42:59.080 --> 00:42:59.580
+removing redundant words.
+
+00:43:02.720 --> 00:43:03.220
+And Yeah, it's supposed to be like beyond
+
+00:43:04.820 --> 00:43:05.320
+just spell checking, right?
+
+00:43:08.240 --> 00:43:08.740
+[Speaker 0]: Right. So, and there's actually a Grammarly
+
+00:43:13.300 --> 00:43:13.520
+package for Emacs, and you get some of the
+
+00:43:14.540 --> 00:43:15.040
+functionality out of it.
+
+00:43:17.420 --> 00:43:17.560
+I've paid for the subscription to get the
+
+00:43:21.240 --> 00:43:21.460
+advanced features, but I've maybe I don't
+
+00:43:23.300 --> 00:43:23.800
+have my configuration set up correctly.
+
+00:43:27.280 --> 00:43:27.780
+I just found it was easier to copy and paste
+
+00:43:31.780 --> 00:43:32.280
+a paragraph at a time into the desktop
+
+00:43:36.460 --> 00:43:36.780
+application and it will go through and find
+
+00:43:38.900 --> 00:43:39.400
+those redundancies, junk English.
+
+00:43:48.080 --> 00:43:48.580
+[Speaker 2]: It would be really interesting trying to have
+
+00:43:52.640 --> 00:43:52.760
+1 of these That was my problem with a lot of
+
+00:43:55.840 --> 00:43:56.120
+the grammarly type Programs is I'm I want
+
+00:43:57.620 --> 00:43:57.900
+something that would do that like be real
+
+00:43:59.720 --> 00:43:59.980
+interesting seeing 1 that's like an old
+
+00:44:03.840 --> 00:44:03.960
+English type thing or like Lumen person where
+
+00:44:06.540 --> 00:44:07.040
+it's just like how does this person write and
+
+00:44:09.960 --> 00:44:10.160
+Because it would be it would spit out
+
+00:44:11.160 --> 00:44:11.660
+something a lot different.
+
+00:44:13.440 --> 00:44:13.680
+Just different. Like, yeah,
+
+00:44:14.440 --> 00:44:14.940
+you put different people.
+
+00:44:17.760 --> 00:44:17.900
+[Speaker 0]: Most definitely, yes. They would have a
+
+00:44:20.280 --> 00:44:20.740
+completely different thinking and writing
+
+00:44:28.740 --> 00:44:28.940
+style. And so the purpose of doing that would
+
+00:44:34.300 --> 00:44:34.640
+be to stimulate A new way of thinking or
+
+00:44:36.340 --> 00:44:36.840
+writing I guess on your part
+
+00:44:40.600 --> 00:44:40.960
+[Speaker 2]: the purpose of writing is to communicate It
+
+00:44:43.540 --> 00:44:43.740
+and writing you know 1 of the targets for
+
+00:44:47.020 --> 00:44:47.320
+that could be yourself so it's like I'd much
+
+00:44:50.380 --> 00:44:50.880
+rather have a comprehensible sentence than a
+
+00:44:57.500 --> 00:44:57.720
+truly correct 1. 1 of those is far more
+
+00:45:00.780 --> 00:45:01.280
+valuable and far more correct English or
+
+00:45:06.560 --> 00:45:07.060
+[Speaker 0]: Yeah, one's more effective at communicating
+
+00:45:08.860 --> 00:45:09.360
+to yourself. Yes.
+
+00:45:11.320 --> 00:45:11.720
+[Speaker 2]: language. Well, one's using the tool,
+
+00:45:15.300 --> 00:45:15.520
+one's the other you're trying to be used by
+
+00:45:19.080 --> 00:45:19.580
+the tool. And they're not the same thing.
+
+00:45:29.780 --> 00:45:30.280
+[Speaker 0]: That's true. Well, I view myself as being
+
+00:45:35.140 --> 00:45:35.640
+responsible for my writing and being the
+
+00:45:40.200 --> 00:45:40.520
+final judge of it and as a scientist I have
+
+00:45:49.060 --> 00:45:49.300
+to my mantra is it's got to be clear and then
+
+00:45:52.600 --> 00:45:53.100
+precise and then concise in that order.
+
+00:45:56.580 --> 00:45:56.760
+And I claim that, you know,
+
+00:45:58.440 --> 00:45:58.780
+that's the order with which I go through
+
+00:46:01.500 --> 00:46:01.780
+doing revisions. Clarity is,
+
+00:46:02.500 --> 00:46:02.880
+you know, if it's not clear,
+
+00:46:05.420 --> 00:46:05.600
+it's useless. It's got to be clear to me,
+
+00:46:08.240 --> 00:46:08.740
+but it's got to be clear to a lot of people
+
+00:46:10.920 --> 00:46:11.420
+for whom English is not a first language.
+
+00:46:15.520 --> 00:46:15.720
+And then after that, I got to worry about
+
+00:46:19.020 --> 00:46:19.520
+precision and then conciseness,
+
+00:46:24.140 --> 00:46:24.280
+but those can't be done at the expense of
+
+00:46:27.720 --> 00:46:28.220
+clarity. So it's quite a battle.
+
+00:46:32.320 --> 00:46:32.640
+[Speaker 2]: That goes back on the to-do list,
+
+00:46:35.440 --> 00:46:35.860
+where it's like if you have more than 3 items
+
+00:46:39.480 --> 00:46:39.660
+like here the purpose of doing that is to
+
+00:46:43.080 --> 00:46:43.580
+help or grant of a to-do list is help is to
+
+00:46:45.480 --> 00:46:45.680
+Have you help choose what you're going to do
+
+00:46:47.680 --> 00:46:47.840
+for the day. Which is why if you have more
+
+00:46:50.660 --> 00:46:50.860
+than 3 items, if you have 50 items on there,
+
+00:46:52.860 --> 00:46:53.320
+you're not going to get 50 of those items
+
+00:46:55.920 --> 00:46:56.040
+done. So maybe you pick the easiest ones to
+
+00:46:58.620 --> 00:46:59.020
+do, not necessarily the ones that you want or
+
+00:47:03.340 --> 00:47:03.580
+need to be done. So it's like the process of
+
+00:47:06.200 --> 00:47:06.380
+choosing those, like, I don't know,
+
+00:47:07.640 --> 00:47:08.140
+like I found that a very good rules,
+
+00:47:10.800 --> 00:47:11.300
+like up to 3 priority items if you,
+
+00:47:13.260 --> 00:47:13.440
+and then also when you look back and you see
+
+00:47:14.440 --> 00:47:14.940
+that you did those 3 items,
+
+00:47:18.460 --> 00:47:18.680
+Who cares about this? I'd rather get those 3
+
+00:47:20.080 --> 00:47:20.580
+items done than any number of secondary
+
+00:47:20.640 --> 00:47:21.140
+tasks.
+
+00:47:26.320 --> 00:47:26.820
+[Speaker 0]: Yes, I, yeah, you're very,
+
+00:47:28.440 --> 00:47:28.940
+very right about that.
+
+00:47:32.380 --> 00:47:32.640
+I don't, I used to, you know,
+
+00:47:36.400 --> 00:47:36.900
+use a pattern of assigning letters.
+
+00:47:39.440 --> 00:47:39.720
+And so you have like, you know,
+
+00:47:41.280 --> 00:47:41.780
+based on like a hierarchy of,
+
+00:47:43.340 --> 00:47:43.840
+you've got the urgent and important,
+
+00:47:47.300 --> 00:47:47.800
+of course, that you got to deal with those.
+
+00:47:50.280 --> 00:47:50.780
+And then the next thing down is the important
+
+00:48:00.060 --> 00:48:00.300
+and so on. But I tend to just generate these
+
+00:48:03.600 --> 00:48:04.000
+terribly long lists that most of those items
+
+00:48:06.260 --> 00:48:06.760
+would go on what is known as a grass catchers
+
+00:48:09.180 --> 00:48:09.680
+list of things that you may get to someday,
+
+00:48:11.780 --> 00:48:12.280
+but there's no way you can get to them today.
+
+00:48:16.120 --> 00:48:16.620
+But I feel compelled, I need to capture them.
+
+00:48:18.260 --> 00:48:18.760
+I may want to do them eventually.
+
+00:48:20.920 --> 00:48:21.420
+They wind up on my list.
+
+00:48:24.660 --> 00:48:24.800
+[Speaker 2]: Oh yeah, my idea on that is like with a
+
+00:48:26.480 --> 00:48:26.980
+Zettelkasten where you have the day thoughts
+
+00:48:29.380 --> 00:48:29.580
+and the day journal, then you have your
+
+00:48:31.800 --> 00:48:32.160
+Zettelkasten which I don't think should have
+
+00:48:34.740 --> 00:48:34.960
+too close of a connection because one's a lot
+
+00:48:37.940 --> 00:48:38.440
+more, what's the word?
+
+00:48:40.080 --> 00:48:40.580
+[Speaker 0]: It's a knowledge base.
+
+00:48:43.940 --> 00:48:44.440
+[Speaker 2]: Optimized. Yes, one's more processed.
+
+00:48:45.280 --> 00:48:45.760
+Yeah, that's the word.
+
+00:48:47.040 --> 00:48:47.440
+Yeah, one's actually much more processed.
+
+00:48:50.220 --> 00:48:50.640
+The other is you don't want that process
+
+00:48:52.840 --> 00:48:53.240
+because you want it to flow from your head
+
+00:48:54.480 --> 00:48:54.980
+with as little friction as possible.
+
+00:48:59.440 --> 00:48:59.940
+The other 1 you want to be processed so that
+
+00:49:01.800 --> 00:49:02.120
+when you look it up and stuff like that's
+
+00:49:04.840 --> 00:49:05.280
+more efficient Same thing with your to-do
+
+00:49:06.380 --> 00:49:06.680
+things. So like oh, yeah,
+
+00:49:09.440 --> 00:49:09.640
+I guess there's 1 more Category like I
+
+00:49:11.780 --> 00:49:11.980
+thought I found my 3 favorite way rather than
+
+00:49:15.720 --> 00:49:16.220
+like priority 123 is primary tasks which
+
+00:49:17.960 --> 00:49:18.280
+basically generally goes up to 3,
+
+00:49:20.380 --> 00:49:20.460
+secondary tasks, and then I like to have a
+
+00:49:22.540 --> 00:49:23.040
+third category, unplanned tasks,
+
+00:49:25.840 --> 00:49:26.180
+and I just have those wrote down in a heading
+
+00:49:28.520 --> 00:49:28.900
+in an org mode file, and then I put the tasks
+
+00:49:32.160 --> 00:49:32.660
+in there, rather than using the agenda,
+
+00:49:33.800 --> 00:49:34.040
+like too much, I don't know,
+
+00:49:40.240 --> 00:49:40.740
+just I found that that was my favorite way of
+
+00:49:43.480 --> 00:49:43.820
+doing it and then you have like another file
+
+00:49:47.840 --> 00:49:48.000
+that would just be your dump of anything you
+
+00:49:51.440 --> 00:49:51.660
+want to do and that would be like that you
+
+00:49:57.040 --> 00:49:57.540
+could pull from to get your day or I guess
+
+00:49:59.240 --> 00:49:59.440
+something that's actually better than a day
+
+00:50:01.560 --> 00:50:01.720
+is doing it all by a week at a time I found
+
+00:50:03.160 --> 00:50:03.660
+that that's actually a lot nicer because
+
+00:50:06.600 --> 00:50:06.840
+thinking about what you do in a week seems
+
+00:50:09.480 --> 00:50:09.840
+like a nicer unit, where you have a week,
+
+00:50:10.520 --> 00:50:11.020
+then you have your day,
+
+00:50:13.360 --> 00:50:13.780
+and then you have the 3 categories of
+
+00:50:16.500 --> 00:50:17.000
+priority, secondary, and unplanned.
+
+00:50:20.860 --> 00:50:20.920
+At least that's been my favorite iteration on
+
+00:50:30.840 --> 00:50:31.340
+[Speaker 0]: thought process workflow.
+
+00:50:31.500 --> 00:50:31.640
+[Speaker 2]: the week of the to-do I had
+
+00:50:33.820 --> 00:50:34.320
+[Speaker 0]: a colleague that was very effective at
+
+00:50:37.280 --> 00:50:37.780
+planning on a weekly basis and he would just
+
+00:50:41.580 --> 00:50:41.900
+get his weekly list of things to get done and
+
+00:50:43.640 --> 00:50:43.860
+he was very good at pounding through that
+
+00:50:45.380 --> 00:50:45.880
+list and getting them done.
+
+00:50:49.400 --> 00:50:49.740
+I have been too much of a day-oriented person
+
+00:50:54.020 --> 00:50:54.200
+and a week-oriented person to adapt his
+
+00:50:56.760 --> 00:50:57.260
+approach, but I've been considering that too.
+
+00:51:03.080 --> 00:51:03.520
+I think what I don't do enough of is pulling
+
+00:51:05.640 --> 00:51:06.140
+back to the month level,
+
+00:51:08.100 --> 00:51:08.600
+semester level, year level,
+
+00:51:10.900 --> 00:51:11.400
+5 year level, 10 year level.
+
+00:51:11.880 --> 00:51:12.380
+And...
+
+00:51:16.000 --> 00:51:16.200
+[Speaker 2]: That's the advantage of finding it by a week
+
+00:51:17.960 --> 00:51:18.120
+is like you can have like so you'd have your
+
+00:51:20.060 --> 00:51:20.560
+week and then maybe you have like 1 section
+
+00:51:24.440 --> 00:51:24.660
+after Friday or last day of the week and this
+
+00:51:27.660 --> 00:51:28.160
+is like your this is just your like staging
+
+00:51:30.300 --> 00:51:30.460
+so this is where you stage all the tasks and
+
+00:51:32.560 --> 00:51:32.720
+then what like you can just stay in your
+
+00:51:37.020 --> 00:51:37.280
+staging write them all down and then use alt
+
+00:51:39.860 --> 00:51:40.040
+and your arrow keys to quickly reorder all of
+
+00:51:43.340 --> 00:51:43.640
+them in the week and then when you're looking
+
+00:51:45.800 --> 00:51:46.300
+at 1 day and you're just looking at ordering
+
+00:51:48.820 --> 00:51:48.960
+everything well it makes a lot of sense when
+
+00:51:51.720 --> 00:51:51.960
+you just say, I don't really want to do that.
+
+00:51:53.160 --> 00:51:53.660
+Like I want this done this week.
+
+00:51:56.260 --> 00:51:56.500
+I don't necessarily want it done on this day.
+
+00:51:58.520 --> 00:51:58.740
+So it just, that's why I found that the week
+
+00:52:00.280 --> 00:52:00.780
+approach works a lot nicer even.
+
+00:52:09.920 --> 00:52:10.260
+[Speaker 0]: of a staging time you like schedule some time
+
+00:52:11.880 --> 00:52:12.380
+in your week to do the staging.
+
+00:52:14.620 --> 00:52:14.960
+[Speaker 2]: Yeah. Is that way The staging is more of just
+
+00:52:16.840 --> 00:52:16.960
+like, these are the things I would like to
+
+00:52:19.440 --> 00:52:19.940
+get done. And then when you schedule it,
+
+00:52:23.360 --> 00:52:23.800
+then you kind of schedule it by just using
+
+00:52:26.240 --> 00:52:26.740
+the Alt-Left key, the Alt-Arrow keys to just,
+
+00:52:28.380 --> 00:52:28.580
+oh, I want this done. It looks like this
+
+00:52:29.860 --> 00:52:30.040
+would work really good on this day.
+
+00:52:31.620 --> 00:52:32.120
+This 1 looks like it would work on this day.
+
+00:52:38.800 --> 00:52:39.300
+[Speaker 0]: A, you still utilize org agenda?
+
+00:52:45.140 --> 00:52:45.640
+[Speaker 2]: I try to, I don't know,
+
+00:52:49.120 --> 00:52:49.540
+I found that it works at least better without
+
+00:52:52.120 --> 00:52:52.620
+it. Yeah, that's fine.
+
+00:52:54.020 --> 00:52:54.340
+Because that way I also get a log of
+
+00:53:00.020 --> 00:53:00.140
+everything I've done, which I can't find a
+
+00:53:03.240 --> 00:53:03.400
+way that, it seems easier to just make new
+
+00:53:06.380 --> 00:53:06.760
+files for it. And rather than,
+
+00:53:08.160 --> 00:53:08.660
+like you could use it with Org Agenda,
+
+00:53:11.540 --> 00:53:12.040
+but like 1 of the things that you want is
+
+00:53:14.040 --> 00:53:14.540
+with it is to look back at it,
+
+00:53:18.380 --> 00:53:18.880
+reflect. And so like if you have the,
+
+00:53:23.360 --> 00:53:23.640
+if you have, if you open up the file with 2
+
+00:53:25.580 --> 00:53:25.760
+levels or 3 levels of headings to where you
+
+00:53:26.780 --> 00:53:27.040
+just see the priority task,
+
+00:53:29.800 --> 00:53:30.300
+you can get a very nice overview of saying,
+
+00:53:33.860 --> 00:53:34.360
+I did my priority task this day.
+
+00:53:38.760 --> 00:53:39.100
+So you get the numbers next to the things.
+
+00:53:40.200 --> 00:53:40.700
+And so you can easily just say,
+
+00:53:41.820 --> 00:53:41.980
+I've done this. I mean,
+
+00:53:43.360 --> 00:53:43.520
+it would be nice if I could figure out a way
+
+00:53:45.240 --> 00:53:45.740
+of doing agenda to give me percentages.
+
+00:53:50.680 --> 00:53:51.180
+But I haven't figured that out.
+
+00:53:54.280 --> 00:53:54.780
+Seeing the granular level,
+
+00:53:57.100 --> 00:53:57.340
+I can easily scan that with my eyes.
+
+00:53:59.720 --> 00:53:59.900
+So I just did it by hand rather than the
+
+00:53:59.900 --> 00:54:00.400
+agenda.
+
+00:54:06.420 --> 00:54:06.600
+[Speaker 0]: Yeah, I've, I've tried to use agenda a few
+
+00:54:10.400 --> 00:54:10.900
+times and pretty seriously,
+
+00:54:14.800 --> 00:54:15.060
+but I keep bouncing off it.
+
+00:54:17.920 --> 00:54:18.160
+I think I get too many things built in or
+
+00:54:21.200 --> 00:54:21.700
+scheduled and I just don't get to them.
+
+00:54:26.000 --> 00:54:26.500
+I feel bad about it and I wind up abandoning
+
+00:54:31.220 --> 00:54:31.500
+it. So that's 1 area where there's probably
+
+00:54:34.820 --> 00:54:35.040
+some potential for optimizing and making that
+
+00:54:40.260 --> 00:54:40.440
+work better. There's a lot of customizing you
+
+00:54:42.280 --> 00:54:42.780
+can do with Agenda. It's amazing.
+
+00:54:44.540 --> 00:54:45.040
+[Speaker 2]: For me, it was though,
+
+00:54:48.480 --> 00:54:48.980
+I wanted there to be a separation between the
+
+00:54:52.120 --> 00:54:52.420
+daily to-do lists and like your grab bag
+
+00:54:54.480 --> 00:54:54.600
+which I think agenda works a lot better for a
+
+00:54:58.040 --> 00:54:58.440
+grab bag. I want a nice way of looking back
+
+00:55:01.560 --> 00:55:02.060
+at my to-do daily to-do logs.
+
+00:55:05.980 --> 00:55:06.340
+So I kind of want them to be separated,
+
+00:55:08.480 --> 00:55:08.980
+so I just did them separate.
+
+00:55:12.540 --> 00:55:12.680
+With the agenda, I could never figure out
+
+00:55:14.060 --> 00:55:14.560
+exactly how I want that to work,
+
+00:55:15.620 --> 00:55:16.120
+how the files would look,
+
+00:55:18.580 --> 00:55:18.960
+and how all the Emacs settings would interact
+
+00:55:21.300 --> 00:55:21.660
+with it. I mean, I'm sure I could,
+
+00:55:28.780 --> 00:55:29.160
+but that's why I opted for weekly files.
+
+00:55:34.960 --> 00:55:35.140
+Or at least That's my most refined idea on
+
+00:55:35.280 --> 00:55:35.780
+the process.
+
+00:55:41.000 --> 00:55:41.400
+[Speaker 0]: That's a good idea. So I've taken my approach
+
+00:55:43.940 --> 00:55:44.440
+is a little different that I'm generating
+
+00:55:46.760 --> 00:55:46.960
+this text on a daily basis and popping it
+
+00:55:52.660 --> 00:55:52.900
+into this to 1 document file per day and a
+
+00:55:59.020 --> 00:55:59.300
+like a diary on Overleaf as a big so it winds
+
+00:56:01.950 --> 00:56:02.450
+[Speaker 2]: sections
+
+00:56:05.440 --> 00:56:05.600
+[Speaker 0]: up being 365 and where every month is a
+
+00:56:11.400 --> 00:56:11.640
+chapter and it's compiled quickly enough even
+
+00:56:13.100 --> 00:56:13.480
+though it's often up to 1,000
+
+00:56:14.780 --> 00:56:15.280
+pages long by the end of the year.
+
+00:56:17.220 --> 00:56:17.500
+And I have all these, of course,
+
+00:56:19.240 --> 00:56:19.700
+with the PDF, I can search through it.
+
+00:56:22.540 --> 00:56:22.760
+So that's not as you can't do the kind of
+
+00:56:24.380 --> 00:56:24.560
+really sophisticated searching that you can
+
+00:56:29.340 --> 00:56:29.840
+do with Org Mode. But just doing that,
+
+00:56:33.620 --> 00:56:33.800
+It sure has been very helpful in digging up
+
+00:56:39.440 --> 00:56:39.680
+information, like the little protocols on how
+
+00:56:42.960 --> 00:56:43.460
+I attack, accomplish a certain task that I
+
+00:56:45.420 --> 00:56:45.920
+have to do a year later,
+
+00:56:50.440 --> 00:56:50.540
+or to have a record of what I did on a
+
+00:56:54.220 --> 00:56:54.400
+certain day and then somebody above me might
+
+00:56:57.100 --> 00:56:57.340
+be trying to hold me to account what got
+
+00:56:59.580 --> 00:57:00.080
+done. I can look that up pretty very quickly.
+
+00:57:05.140 --> 00:57:05.320
+It's documented. I find that to be just any
+
+00:57:09.520 --> 00:57:09.840
+kind of thorough documentation system is very
+
+00:57:16.080 --> 00:57:16.320
+[Speaker 2]: I also mess with having it all in 1 file
+
+00:57:17.440 --> 00:57:17.940
+rather than by a weak file.
+
+00:57:20.140 --> 00:57:20.640
+[Speaker 0]: useful. And at least what I did.
+
+00:57:21.820 --> 00:57:22.320
+I ran into trouble with,
+
+00:57:25.380 --> 00:57:25.880
+like, once you get a lot of items,
+
+00:57:27.040 --> 00:57:27.540
+like if you have 1,000
+
+00:57:30.580 --> 00:57:30.780
+items, headings, I've had org files with
+
+00:57:33.680 --> 00:57:34.180
+1,000 headings. It can be so hard to scroll
+
+00:57:38.960 --> 00:57:39.280
+through. Maybe it's some limitations I'm run
+
+00:57:42.240 --> 00:57:42.740
+into with the Emacs being single threaded.
+
+00:57:49.120 --> 00:57:49.620
+[Speaker 2]: At least with, yeah. Yeah.
+
+00:57:52.420 --> 00:57:52.920
+It was like, that's 1 of the things is like,
+
+00:57:54.240 --> 00:57:54.520
+how exactly do you want this,
+
+00:57:55.920 --> 00:57:56.120
+the information structured because it can
+
+00:57:56.820 --> 00:57:57.320
+change how it's retrieved.
+
+00:58:00.260 --> 00:58:00.760
+[Speaker 0]: Ooh, most definitely. Most definitely.
+
+00:58:08.200 --> 00:58:08.560
+[Speaker 2]: So as an example, when I was doing the daily
+
+00:58:14.760 --> 00:58:14.960
+logs and I put it all in the date and then
+
+00:58:15.700 --> 00:58:16.200
+the priority, secondary,
+
+00:58:21.980 --> 00:58:22.100
+unplanned tasks, and then I had it stay at
+
+00:58:24.940 --> 00:58:25.120
+that, get auto expanded by that level by
+
+00:58:27.280 --> 00:58:27.780
+default so I didn't see the individual task
+
+00:58:30.720 --> 00:58:30.860
+and you and then I had a but And then it
+
+00:58:33.120 --> 00:58:33.420
+would say like I complete 205 or something
+
+00:58:34.440 --> 00:58:34.940
+like that of secondary tasks.
+
+00:58:38.000 --> 00:58:38.400
+And then just being able just to quickly scan
+
+00:58:39.740 --> 00:58:40.240
+all the days and say, oh,
+
+00:58:42.960 --> 00:58:43.260
+it just, the feedback you get from that is
+
+00:58:46.300 --> 00:58:46.500
+worth a lot. And I don't think it's
+
+00:58:47.920 --> 00:58:48.120
+something, it's not something I could think
+
+00:58:49.320 --> 00:58:49.820
+of how you do an agenda.
+
+00:58:53.300 --> 00:58:53.540
+Even though I got done in the text files just
+
+00:58:57.260 --> 00:58:57.400
+because you get that doesn't expand all the
+
+00:58:59.580 --> 00:58:59.800
+way so you so you can quickly just see on
+
+00:59:01.940 --> 00:59:02.140
+this day I did this well on this day I did
+
+00:59:05.800 --> 00:59:06.300
+this well all within and 4 lines per day.
+
+00:59:11.040 --> 00:59:11.420
+So it's not, that doesn't,
+
+00:59:12.920 --> 00:59:13.420
+that's not very visually verbose.
+
+00:59:16.920 --> 00:59:17.080
+Probably about as visually verbose as you
+
+00:59:18.640 --> 00:59:19.140
+want it. They're not super long.
+
+00:59:23.000 --> 00:59:23.200
+You easily see the 2 of 3 and stuff like that
+
+00:59:24.920 --> 00:59:25.420
+that you get done so you can quickly and say,
+
+00:59:29.380 --> 00:59:29.600
+oh well, these are the days where I got my
+
+00:59:31.300 --> 00:59:31.800
+primary tasks done or this week,
+
+00:59:36.340 --> 00:59:36.500
+and this day I didn't do it well and you
+
+00:59:38.300 --> 00:59:38.740
+could helps you correlate like your feelings
+
+00:59:42.440 --> 00:59:42.620
+with your to-do lists and journals and
+
+00:59:42.620 --> 00:59:43.120
+whatnot.
+
+00:59:48.940 --> 00:59:49.440
+[Speaker 0]: Yeah I think that's very powerful.
+
+00:59:53.300 --> 00:59:53.800
+Because it's summarizing capability.
+
+00:59:57.560 --> 00:59:58.060
+It allows you to, you know,
+
+01:00:00.656 --> 01:00:00.784
+pull back and get an overview.
+
+01:00:01.040 --> 01:00:01.540
+Get an overview.
+
+01:00:07.580 --> 01:00:08.080
+[Speaker 2]: And yeah, as I said, it's like the feedback
+
+01:00:10.600 --> 01:00:10.760
+from that almost when I did that,
+
+01:00:12.620 --> 01:00:12.800
+it feels like half the reason or should be
+
+01:00:14.580 --> 01:00:14.900
+like half the reason is and it's something
+
+01:00:19.120 --> 01:00:19.340
+that I don't if you use the agenda as it is,
+
+01:00:21.220 --> 01:00:21.360
+you wouldn't, I don't know how you would get
+
+01:00:23.160 --> 01:00:23.360
+it, like saying, like looking at the week by
+
+01:00:25.080 --> 01:00:25.580
+week basis, breakdowns,
+
+01:00:27.120 --> 01:00:27.620
+you might be able to get like percentages,
+
+01:00:30.400 --> 01:00:30.900
+which would be nice. Like I did this well,
+
+01:00:33.700 --> 01:00:34.120
+or like habit, I don't,
+
+01:00:35.640 --> 01:00:35.920
+there might be things that could offer you
+
+01:00:39.700 --> 01:00:40.200
+but. Yeah,
+
+01:00:46.780 --> 01:00:47.280
+[Speaker 0]: so I'm pretty obsessed about tracking effort
+
+01:00:48.560 --> 01:00:49.060
+on various kinds of projects,
+
+01:00:52.020 --> 01:00:52.520
+or various kinds of activities,
+
+01:00:57.880 --> 01:00:58.360
+and to get some feedback in that regard.
+
+01:00:59.500 --> 01:01:00.000
+And then you, but you got the,
+
+01:01:02.040 --> 01:01:02.540
+So I define a project as anything that
+
+01:01:06.300 --> 01:01:06.780
+requires work at different points in time,
+
+01:01:07.040 --> 01:01:07.540
+more than 1
+
+01:01:15.300 --> 01:01:15.520
+[Speaker 2]: time. I'll email you my org mode template
+
+01:01:17.560 --> 01:01:18.060
+that I made that demonstrates that.
+
+01:01:22.200 --> 01:01:22.700
+I don't know if you, do you have your email
+
+01:01:24.520 --> 01:01:25.020
+in your talk notes or anything?
+
+01:01:29.380 --> 01:01:29.700
+[Speaker 0]: Okay. I think I should have it on the first
+
+01:01:31.560 --> 01:01:32.060
+slide. There should be my email address.
+
+01:01:40.560 --> 01:01:41.060
+I can add it to my talk notes.
+
+01:01:46.920 --> 01:01:47.040
+[Speaker 2]: Okay. Would you want me to show it to you at
+
+01:01:48.940 --> 01:01:49.440
+[Speaker 0]: that'd be great.
+
+01:01:52.600 --> 01:01:53.100
+[Speaker 2]: all? Sure, All right, let's see.
+
+01:02:20.842 --> 01:02:20.905
+I'm going to share screen button,
+
+01:02:21.220 --> 01:02:21.520
+right? There's a share screen button,
+
+01:02:21.520 --> 01:02:22.020
+right?
+
+01:02:26.160 --> 01:02:26.660
+[Speaker 0]: Yeah, so, let's see.
+
+01:02:59.243 --> 01:02:59.743
+[Speaker 2]: Yeah, I'm all. That's the right button.
+
+01:03:04.640 --> 01:03:05.140
+Can you not share the screen on this?
+
+01:03:08.860 --> 01:03:09.360
+[Speaker 0]: I have something going here.
+
+01:03:13.900 --> 01:03:14.400
+Let's see. I have, I see some stuff on here.
+
+01:03:18.160 --> 01:03:18.660
+Wonder if I'm still active.
+
+01:03:21.180 --> 01:03:21.680
+It shows share screen.
+
+01:03:22.280 --> 01:03:22.780
+Cancel.
+
+01:03:28.260 --> 01:03:28.760
+[Speaker 2]: Maybe they just did it through OBS.
+
+01:03:47.280 --> 01:03:47.780
+[Speaker 0]: Maybe I only have permission to share.
+
+01:03:53.900 --> 01:03:54.400
+I can put my email address in the chat.
+
+01:03:59.440 --> 01:03:59.620
+[Speaker 2]: I guess I'll just email it to you,
+
+01:04:06.600 --> 01:04:06.840
+but Let's see. Yeah, I think the way that
+
+01:04:11.260 --> 01:04:11.460
+they did it on the Any of the other videos if
+
+01:04:13.780 --> 01:04:14.020
+they shared the screen they just shared the
+
+01:04:17.440 --> 01:04:17.560
+webcam they just took over the webcam with
+
+01:04:20.380 --> 01:04:20.880
+OBS and shared what they wanted with it.
+
+01:04:22.760 --> 01:04:23.260
+[Speaker 0]: Oh, okay.
+
+01:04:24.720 --> 01:04:25.180
+[Speaker 2]: At least I'm guessing.
+
+01:04:26.960 --> 01:04:27.460
+Yeah, I'll give that to you.
+
+01:04:31.080 --> 01:04:31.240
+Okay. I guess I'll let you go watch the rest
+
+01:04:32.240 --> 01:04:32.740
+of the Emacs videos.
+
+01:04:34.640 --> 01:04:35.140
+[Speaker 0]: This has been a great conversation.
+
+01:04:37.280 --> 01:04:37.780
+Thank you very much. I appreciate your
+
+01:04:39.620 --> 01:04:39.840
+willingness to share your thoughts on this
+
+01:04:42.980 --> 01:04:43.480
+matter. This is vital,
+
+01:04:48.260 --> 01:04:48.440
+time management. It's a kind of key aspect of
+
+01:04:48.440 --> 01:04:48.940
+life.
+
+01:04:54.680 --> 01:04:55.180
+[Speaker 2]: Oh yeah. The way the how the function.
+
+01:05:03.320 --> 01:05:03.820
+Reasons to use emacs is to use the keyboard
+
+01:05:08.240 --> 01:05:08.420
+is. It's not to speed you up.
+
+01:05:09.520 --> 01:05:10.020
+Like, yeah, that's nice.
+
+01:05:12.280 --> 01:05:12.780
+But it keeps you in the stream,
+
+01:05:25.400 --> 01:05:25.760
+keeps you in the flow state and which then
+
+01:05:32.780 --> 01:05:32.900
+just makes you think better and yeah and the
+
+01:05:35.540 --> 01:05:35.780
+thing with that is you I have you I have no
+
+01:05:37.480 --> 01:05:37.980
+idea what the limits of that would be.
+
+01:05:39.680 --> 01:05:40.020
+Because you think, because yes,
+
+01:05:42.740 --> 01:05:42.900
+it's not about beating up how many words you
+
+01:05:44.860 --> 01:05:45.060
+say a minute. I mean that's nice and all,
+
+01:05:46.680 --> 01:05:46.920
+But when you start doing that,
+
+01:05:48.340 --> 01:05:48.840
+when you start removing all these friction
+
+01:05:52.500 --> 01:05:53.000
+points, all of a sudden the number,
+
+01:05:57.800 --> 01:05:58.300
+quality, and types of thoughts you get start
+
+01:06:01.620 --> 01:06:02.120
+[Speaker 0]: That's right.
+
+01:06:03.480 --> 01:06:03.980
+[Speaker 2]: increasing. Which is the goal.
+
+01:06:14.960 --> 01:06:15.460
+[Speaker 0]: Okay. Well, thank you very much.
+
+01:06:17.760 --> 01:06:18.260
+Enjoy the rest of the meeting.
+
+01:06:19.280 --> 01:06:19.780
+[Speaker 2]: Will do.
diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt
new file mode 100644
index 00000000..aac6f54c
--- /dev/null
+++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt
@@ -0,0 +1,53 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:37.399
+Introduction
+
+00:00:37.400 --> 00:01:02.559
+Three activities in voice computing
+
+00:01:02.560 --> 00:01:53.519
+Talk is not about ... and about ...
+
+00:01:53.520 --> 00:03:33.239
+Motivations
+
+00:03:33.240 --> 00:03:58.679
+Data
+
+00:03:58.680 --> 00:04:25.627
+Voice In in the Chrome Store
+
+00:04:25.628 --> 00:05:16.879
+Works in web pages with text areas
+
+00:05:16.880 --> 00:06:41.739
+Built-in commands in Voice In Plus
+
+00:06:41.740 --> 00:08:14.759
+Common errors made by Voice In
+
+00:08:14.760 --> 00:09:59.419
+Custom speech-to-text commands
+
+00:09:59.420 --> 00:10:37.539
+Custom speech-to-commands
+
+00:10:37.540 --> 00:12:28.399
+Introducing Talon Voice
+
+00:12:28.400 --> 00:14:02.539
+Talon GUI
+
+00:14:02.540 --> 00:15:34.014
+Talon file with web scope
+
+00:15:34.015 --> 00:16:52.499
+Terminals on remote and virtual machines
+
+00:16:52.500 --> 00:18:17.719
+Recommendations
+
+00:18:17.720 --> 00:18:48.880
+Acknowledgements
diff --git a/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt
new file mode 100644
index 00000000..5ff59fdc
--- /dev/null
+++ b/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt
@@ -0,0 +1,890 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.359
+Hi, I'm Blaine Mooers. I'm an associate professor
+
+00:00:04.360 --> 00:00:06.519
+of biochemistry at the University of Oklahoma
+
+00:00:06.520 --> 00:00:09.319
+Health Sciences Center in Oklahoma City.
+
+00:00:09.320 --> 00:00:12.959
+My lab studies the role of RNA structure in RNA editing.
+
+00:00:12.960 --> 00:00:17.199
+We use X-ray crystallography to study the structures
+
+00:00:17.200 --> 00:00:19.919
+of these RNAs. We spend a lot of time in the lab
+
+00:00:19.920 --> 00:00:22.719
+preparing our samples for structural studies,
+
+00:00:22.720 --> 00:00:26.719
+and then we also spend a lot of time at the computer
+
+00:00:26.720 --> 00:00:29.719
+analyzing the resulting data.
+
+00:00:29.720 --> 00:00:33.039
+I was seeking ways of using voice computing
+
+00:00:33.040 --> 00:00:37.399
+to try to enhance my productivity.
+
+NOTE Three activities in voice computing
+
+00:00:37.400 --> 00:00:41.319
+I divide voice computing into three activities,
+
+00:00:41.320 --> 00:00:44.959
+speech-to-text or dictation, speech-to-commands,
+
+00:00:44.960 --> 00:00:47.639
+and speech-to-code. I'll be talking about
+
+00:00:47.640 --> 00:00:50.159
+speech-to-text and speech-to-commands today
+
+00:00:50.160 --> 00:00:55.079
+because these are two activities
+
+00:00:55.080 --> 00:00:57.319
+that are probably most broadly applicable
+
+00:00:57.320 --> 00:01:02.559
+to the workflows of people attending this conference.
+
+NOTE Talk is not about ... and about ...
+
+00:01:02.560 --> 00:01:06.799
+This talk will not be about Emacspeak.
+
+00:01:06.800 --> 00:01:11.359
+This is a venerated program for converting text to speech.
+
+00:01:11.360 --> 00:01:13.319
+We're talking about the flow of information
+
+00:01:13.320 --> 00:01:16.519
+in the opposite direction, speech-to-text.
+
+00:01:16.520 --> 00:01:20.599
+We need an Emacs Listens. We don't have one,
+
+00:01:20.600 --> 00:01:25.479
+so I had to seek help from outside the Emacs world
+
+00:01:25.480 --> 00:01:30.639
+via the Voice In Plus. This runs in
+
+00:01:30.640 --> 00:01:33.639
+the Google Chrome web browser,
+
+00:01:33.640 --> 00:01:36.719
+and it's very good for speech-to-text
+
+00:01:36.720 --> 00:01:39.519
+and very easy to learn how to use.
+
+00:01:39.520 --> 00:01:41.999
+It also has some speech-to-commands.
+
+00:01:42.000 --> 00:01:44.799
+However, Talon Voice is much better
+
+00:01:44.800 --> 00:01:47.559
+with the speech-to-commands,
+
+00:01:47.560 --> 00:01:53.519
+and it's also great at speech-to-code.
+
+NOTE Motivations
+
+00:01:53.520 --> 00:01:57.239
+The motivations are, obviously, as I mentioned already,
+
+00:01:57.240 --> 00:01:59.159
+for improved productivity.
+
+00:01:59.160 --> 00:02:00.399
+So, if you're a fast typist
+
+00:02:00.400 --> 00:02:05.199
+who types faster than they can speak,
+
+00:02:05.200 --> 00:02:07.079
+then nonetheless you might still benefit
+
+00:02:07.080 --> 00:02:09.279
+from voice computing when you grow tired of
+
+00:02:09.280 --> 00:02:12.199
+using the keyboard. On the other hand,
+
+00:02:12.200 --> 00:02:15.199
+you might be a slow typist who talks faster
+
+00:02:15.200 --> 00:02:17.519
+than they can type.
+
+00:02:17.520 --> 00:02:19.759
+In this case, you're definitely going to
+
+00:02:19.760 --> 00:02:22.859
+benefit from dictation because you'll be able to
+
+00:02:22.860 --> 00:02:29.359
+encode more words in text documents in a given day.
+
+00:02:29.360 --> 00:02:33.639
+If you're a coder, then you may get a kick out of
+
+00:02:33.640 --> 00:02:36.999
+opening programs and websites and coding projects
+
+00:02:37.000 --> 00:02:39.279
+by using your voice.
+
+00:02:39.280 --> 00:02:41.719
+Then there are health-related reasons.
+
+00:02:41.720 --> 00:02:44.599
+You may have impaired use of your hands, eyes, or both
+
+00:02:44.600 --> 00:02:49.199
+due to accident or disease, or you may suffer from
+
+00:02:49.200 --> 00:02:53.519
+a repetitive stress injury. Many of us have this
+
+00:02:53.520 --> 00:02:55.759
+in a mild but chronic form of it.
+
+00:02:55.760 --> 00:02:59.039
+We can't take a three-month sabbatical from the keyboard
+
+00:02:59.040 --> 00:03:05.519
+without losing our jobs, so these injuries tend to persist.
+
+00:03:05.520 --> 00:03:06.679
+And then you may have learned
+
+00:03:06.680 --> 00:03:09.959
+that it's not good for your health to sit
+
+00:03:09.960 --> 00:03:11.919
+for prolonged periods of time
+
+00:03:11.920 --> 00:03:14.919
+with your staring at a computer screen.
+
+00:03:14.920 --> 00:03:21.799
+You can actually dictate to your computer from 20 feet away
+
+00:03:21.800 --> 00:03:24.999
+while looking out the window,
+
+00:03:25.000 --> 00:03:27.779
+thereby giving your lower body a break
+
+00:03:27.780 --> 00:03:33.239
+and your eyes a break.
+
+NOTE Data
+
+00:03:33.240 --> 00:03:35.639
+I'm not God, so I have to bring data.
+
+00:03:35.640 --> 00:03:38.039
+I have two data points here,
+
+00:03:38.040 --> 00:03:42.399
+the number of words that I wrote in June and July this year
+
+00:03:42.400 --> 00:03:45.159
+and in September and October.
+
+00:03:45.160 --> 00:03:49.519
+I adopted the use of voice computing
+
+00:03:49.520 --> 00:03:53.919
+in the middle of August. As you can see,
+
+00:03:53.920 --> 00:03:58.679
+I got an over three-fold increase in my output.
+
+NOTE Voice In in the Chrome Store
+
+00:03:58.680 --> 00:04:07.119
+So this is the Chrome store website for voice-in.
+
+00:04:07.120 --> 00:04:11.119
+It's only available for Google Chrome.
+
+00:04:11.120 --> 00:04:13.239
+You just hit the install button to install it.
+
+00:04:13.240 --> 00:04:16.639
+To configure it, you need to select a language.
+
+00:04:16.640 --> 00:04:19.559
+It has support for 40 languages
+
+00:04:19.560 --> 00:04:23.119
+and it supports about a dozen different dialects of English,
+
+00:04:23.120 --> 00:04:25.627
+including Australian.
+
+NOTE Works in web pages with text areas
+
+00:04:25.628 --> 00:04:29.959
+It works on web pages with text areas,
+
+00:04:29.960 --> 00:04:33.319
+so it works. I use it regularly
+
+00:04:33.320 --> 00:04:37.879
+on Overleaf and 750words.com,
+
+00:04:37.880 --> 00:04:42.279
+a distraction-free environment for writing.
+
+00:04:42.280 --> 00:04:46.239
+It also works in webmails. It works in Google.
+
+00:04:46.780 --> 00:04:51.319
+It works in Jupyter Lab, of course,
+
+00:04:51.320 --> 00:04:52.879
+because that runs in the browser.
+
+00:04:52.880 --> 00:04:57.999
+It also works in Jupyter Notebook and Colab Notebook.
+
+00:04:58.000 --> 00:05:01.319
+It should work in Cloudmacs.
+
+00:05:01.320 --> 00:05:04.159
+I've mapped option-L to opening Voice In
+
+00:05:04.160 --> 00:05:09.119
+when the cursor is on a web page that has a text area.
+
+00:05:09.120 --> 00:05:16.879
+So [the presence of a text area is] the main limiting factor.
+
+NOTE Built-in commands in Voice In Plus
+
+00:05:16.880 --> 00:05:19.159
+[Voice In] has a number of built-in commands.
+
+00:05:19.160 --> 00:05:24.879
+You can turn it off by saying "stop dictation".
+
+00:05:24.880 --> 00:05:26.119
+It doesn't distinguish between
+
+00:05:26.120 --> 00:05:28.799
+a command mode and a dictation mode.
+
+00:05:28.800 --> 00:05:33.599
+It has undo command. You use the command
+
+00:05:33.600 --> 00:05:36.919
+"copy that" to copy a selection.
+
+00:05:36.920 --> 00:05:40.079
+The "press" commands are used in the browser.
+
+00:05:40.080 --> 00:05:44.839
+You [say] "press enter" to issue a command or [submit] text
+
+00:05:44.840 --> 00:05:50.319
+that has been written in a web form,
+
+00:05:50.320 --> 00:05:55.279
+and then "press tab" will open up the next tab
+
+00:05:55.280 --> 00:05:58.599
+in a web browser. The scroll up and down
+
+00:05:58.600 --> 00:06:02.379
+will allow you to navigate a web page.
+
+00:06:02.380 --> 00:06:05.819
+I've put together a quiz about these commands
+
+00:06:05.820 --> 00:06:09.559
+so that you can go through this quiz several times
+
+00:06:09.560 --> 00:06:14.699
+until you get at least 90 percent of them correct,
+
+00:06:14.700 --> 00:06:16.679
+90 percent of the questions correct.
+
+00:06:16.680 --> 00:06:20.599
+In order to boost your recall of the commands,
+
+00:06:20.600 --> 00:06:23.799
+I have a Python script that you can probably
+
+00:06:23.800 --> 00:06:26.559
+pound through the quiz with
+
+00:06:26.560 --> 00:06:32.159
+in less than a minute, once you know the commands.
+
+00:06:32.160 --> 00:06:35.599
+I also provide an Elisp version of this quiz,
+
+00:06:35.600 --> 00:06:41.739
+but it's a little slower to operate.
+
+NOTE Common errors made by Voice In
+
+00:06:41.740 --> 00:06:43.399
+These are some common errors
+
+00:06:43.400 --> 00:06:45.399
+that I've run into with Voice In.
+
+00:06:45.400 --> 00:06:50.319
+It likes to contract statements like "I will" into "I'll".
+
+00:06:50.320 --> 00:06:55.599
+Contractions are not used in formal writing,
+
+00:06:55.600 --> 00:07:00.359
+and most of my writing is formal writing, so this annoys me.
+
+00:07:00.360 --> 00:07:04.759
+I will show you how I corrected for that problem.
+
+00:07:04.760 --> 00:07:10.039
+It also drops the first word in sentences quite often.
+
+00:07:10.040 --> 00:07:13.359
+This might be some speech issue that I have.
+
+00:07:13.360 --> 00:07:17.599
+It inserts the wrong word because it's not in the dictionary
+
+00:07:17.600 --> 00:07:22.619
+that was used to train it. So, for example,
+
+00:07:22.620 --> 00:07:26.919
+the word PyMOL is the name of a molecular graphics program
+
+00:07:26.920 --> 00:07:31.639
+that we use in our field. It doesn't recognize PyMOL.
+
+00:07:31.640 --> 00:07:34.239
+Instead, it substitutes in the word "primal".
+
+00:07:34.240 --> 00:07:38.399
+Since I don't use "primal" very often,
+
+00:07:38.400 --> 00:07:42.299
+I've mapped the word "primal" to "PyMOL"
+
+00:07:42.300 --> 00:07:45.659
+in some custom commands I'll talk about in a minute.
+
+00:07:45.660 --> 00:07:50.439
+Then there's a problem that the commands that exist
+
+00:07:50.440 --> 00:07:54.439
+might get executed when you speak them when, in fact,
+
+00:07:54.440 --> 00:07:58.839
+you wanted to use the words in those commands
+
+00:07:58.840 --> 00:08:01.439
+during your dictation.
+
+00:08:01.440 --> 00:08:07.119
+So this is a problem, a pitfall of Voice In,
+
+00:08:07.120 --> 00:08:08.919
+in that it doesn't have a command mode
+
+00:08:08.920 --> 00:08:14.759
+that's separate from a dictation mode.
+
+NOTE Custom speech-to-text commands
+
+00:08:14.760 --> 00:08:20.319
+You can set up through a very easy-to-use GUI
+
+00:08:20.320 --> 00:08:26.959
+custom voice commands mapped to what you want inserted,
+
+00:08:26.960 --> 00:08:32.399
+so this is how misinterpreted words can be corrected.
+
+00:08:32.400 --> 00:08:35.759
+You just map the misinterpreted word to the intended word.
+
+00:08:35.760 --> 00:08:42.839
+You can also map the contractions to their expansions.
+
+00:08:42.840 --> 00:08:46.959
+I did this for 94 English contractions,
+
+00:08:46.960 --> 00:08:50.139
+and you can find these on GitHub.
+
+00:08:50.140 --> 00:08:56.079
+You can also insert acronyms and expand those acronyms.
+
+00:08:56.080 --> 00:09:00.239
+I apply the same approach to the first names of colleagues.
+
+00:09:00.240 --> 00:09:03.759
+I say "expand Fred", for example,
+
+00:09:03.760 --> 00:09:06.999
+to get Fred's first and last name
+
+00:09:07.000 --> 00:09:12.599
+with the [correct] spelling of his very long German name.
+
+00:09:12.600 --> 00:09:19.399
+You can also insert other trivia like favorite URLs.
+
+00:09:19.400 --> 00:09:24.559
+You can insert LaTeX snippets.
+
+00:09:24.560 --> 00:09:34.799
+It handles correctly multi-line snippets.
+
+00:09:34.800 --> 00:09:39.419
+You just have to enclose them in double quotes.
+
+00:09:39.420 --> 00:09:45.039
+You can even insert BibTeX cite keys for references
+
+00:09:45.040 --> 00:09:46.879
+that you use frequently. All fields
+
+00:09:46.880 --> 00:09:59.419
+have certain key references for certain methods or topics.
+
+NOTE Custom speech-to-commands
+
+00:09:59.420 --> 00:10:05.079
+Then it has a set of commands that you can customize
+
+00:10:05.080 --> 00:10:08.199
+for the purpose of speech-to-commands
+
+00:10:08.200 --> 00:10:09.679
+to get the computer to do something
+
+00:10:09.680 --> 00:10:15.399
+like open up a specific website or save the current writing.
+
+00:10:15.400 --> 00:10:23.540
+In this case, we have "press: command-s"
+
+00:10:23.541 --> 00:10:27.759
+for saving current writing.
+
+00:10:27.760 --> 00:10:28.099
+You can change the language [with "lang:"],
+
+00:10:28.100 --> 00:10:37.539
+and you can change the case of the text [with "case:"].
+
+NOTE Introducing Talon Voice
+
+00:10:37.540 --> 00:10:41.039
+But the speech-to-command repertoire is quite limited
+
+00:10:41.040 --> 00:10:49.759
+in Voice In, so it's now time to pick up on Talon Voice.
+
+00:10:49.760 --> 00:10:54.119
+This is an open source project. It's free.
+
+00:10:54.120 --> 00:10:57.399
+It is highly configurable via TalonScript,
+
+00:10:57.400 --> 00:10:58.959
+which is a subset of Python.
+
+00:10:58.960 --> 00:11:03.039
+You can use either TalonScript or Python to configure it,
+
+00:11:03.040 --> 00:11:06.279
+but it's easier to code up your configuration
+
+00:11:06.280 --> 00:11:08.399
+in TalonScript.
+
+00:11:08.400 --> 00:11:10.759
+It has a Python interpreter embedded in it,
+
+00:11:10.760 --> 00:11:12.999
+so you don't have to mess around with installing
+
+00:11:13.000 --> 00:11:14.559
+yet another Python interpreter.
+
+00:11:14.560 --> 00:11:21.519
+It runs on all platforms, and it has a dictation mode
+
+00:11:21.520 --> 00:11:24.599
+that's separate from a command mode.
+
+00:11:24.600 --> 00:11:25.599
+You can activate it,
+
+00:11:25.600 --> 00:11:31.359
+and it'll be in a listening state asleep.
+
+00:11:31.360 --> 00:11:36.279
+You just bark out "Talon Wake" to start to wake it up,
+
+00:11:36.280 --> 00:11:43.799
+and "Talon Sleep" to have it go into a listening state.
+
+00:11:43.800 --> 00:11:47.919
+It has a very welcoming community
+
+00:11:47.920 --> 00:11:50.919
+in the Talon Slack channel.
+
+00:11:50.920 --> 00:11:56.399
+Then I need to point out that there's several packages
+
+00:11:56.400 --> 00:11:59.199
+that others have developed that run on top of Talon,
+
+00:11:59.200 --> 00:12:03.079
+but one of particular note is by Pokey Rule.
+
+00:12:03.080 --> 00:12:08.119
+He has on his website some really well-done videos
+
+00:12:08.120 --> 00:12:11.479
+that demonstrate how he uses Cursorless
+
+00:12:11.480 --> 00:12:17.239
+to move the cursor around using voice commands.
+
+00:12:17.240 --> 00:12:20.559
+This, however, runs on VS Code.
+
+00:12:20.560 --> 00:12:23.359
+At least that's the text editor
+
+00:12:23.360 --> 00:12:28.399
+for which he's primarily developing Cursorless.
+
+NOTE Talon GUI
+
+00:12:28.400 --> 00:12:35.519
+I followed the [install] protocol outlined by Tara Roys.
+
+00:12:35.520 --> 00:12:38.759
+She has a collection of tutorials
+
+00:12:38.760 --> 00:12:44.599
+on YouTube as well as on GitHub that are quite helpful.
+
+00:12:44.600 --> 00:12:49.479
+I followed her tutorial for installing
+
+00:12:49.480 --> 00:12:51.359
+Talon on macOS without any issues,
+
+00:12:51.360 --> 00:12:55.319
+but allow for half an hour to an hour
+
+00:12:55.320 --> 00:12:57.719
+to go through the process. When you're done,
+
+00:12:57.720 --> 00:13:02.199
+you'll have this Talon icon appear in the toolbar
+
+00:13:02.200 --> 00:13:06.119
+on the Mac. When it has this diagonal line across it,
+
+00:13:06.120 --> 00:13:09.539
+that means it's in the sleep state.
+
+00:13:09.540 --> 00:13:13.519
+So, this leads to cascading pull-down menus.
+
+00:13:13.520 --> 00:13:19.639
+This is it for the GUI.
+
+00:13:19.640 --> 00:13:26.519
+One of your first tasks is to select
+
+00:13:26.520 --> 00:13:30.439
+a language model that will be used to interpret
+
+00:13:30.440 --> 00:13:35.179
+the sounds that you generate as words.
+
+00:13:35.180 --> 00:13:38.959
+And the other kind of key feature is that there's a,
+
+00:13:38.960 --> 00:13:43.399
+under scripting, there's a view log pull-down
+
+00:13:43.400 --> 00:13:48.399
+that opens up a window displaying the log file.
+
+00:13:48.400 --> 00:13:52.879
+Whenever you make a change in a Talon configuration file,
+
+00:13:52.880 --> 00:13:55.079
+that change is implemented immediately.
+
+00:13:55.080 --> 00:13:57.599
+You do not have to restart Talon
+
+00:13:57.600 --> 00:14:02.539
+to get the change to take effect.
+
+NOTE Talon file with web scope
+
+00:14:02.540 --> 00:14:04.759
+This is an example of a Talon file.
+
+00:14:04.760 --> 00:14:10.499
+It has two components. It has a header above the dash that describes
+
+00:14:10.500 --> 00:14:14.919
+the scope of the commands contained below the dash.
+
+00:14:14.920 --> 00:14:19.739
+Each command is separated by a blank line.
+
+00:14:19.740 --> 00:14:24.239
+If a voice command is mapped to multiple actions,
+
+00:14:24.240 --> 00:14:30.999
+these are listed separately on indented lines
+
+00:14:31.000 --> 00:14:33.599
+below the first line.
+
+00:14:33.600 --> 00:14:39.419
+The words that are in square brackets are optional.
+
+00:14:39.420 --> 00:14:44.319
+So, I have mapped the word toggle voice in,
+
+00:14:44.320 --> 00:14:46.319
+or the phrase toggle voice in,
+
+00:14:46.320 --> 00:14:51.279
+to the keyboard shortcut Alt L
+
+00:14:51.280 --> 00:14:54.999
+in order to toggle on or off voice in.
+
+00:14:55.000 --> 00:14:57.879
+If I toggle voice in on,
+
+00:14:57.880 --> 00:15:01.759
+I need to immediately toggle off Talon,
+
+00:15:01.760 --> 00:15:09.079
+and this is done through this key command for Control T,
+
+00:15:09.080 --> 00:15:11.079
+which is mapped to speech toggle.
+
+00:15:11.080 --> 00:15:20.399
+Speech toggle. Then there are,
+
+00:15:20.400 --> 00:15:24.079
+there's a couple other examples.
+
+00:15:24.080 --> 00:15:26.439
+So, if there's no header present,
+
+00:15:26.440 --> 00:15:29.599
+it's an optional feature of Talon files,
+
+00:15:29.600 --> 00:15:32.639
+then the commands in the file will apply in all situations,
+
+00:15:32.640 --> 00:15:34.014
+in all modes.
+
+NOTE Terminals on remote and virtual machines
+
+00:15:34.015 --> 00:15:36.959
+Here we have two restrictions.
+
+00:15:36.960 --> 00:15:38.959
+These commands will only work
+
+00:15:38.960 --> 00:15:42.959
+when using the iTerm2 [ccc] terminal emulator for the Mac,
+
+00:15:42.960 --> 00:15:48.239
+and then only when the title of the window in iTerm2
+
+00:15:48.240 --> 00:15:52.439
+has this particular address,
+
+00:15:52.440 --> 00:15:55.559
+which is what appears when I've logged into
+
+00:15:55.560 --> 00:16:00.059
+the supercomputer at the University of Oklahoma.
+
+00:16:00.060 --> 00:16:03.479
+One of the commands in this file is checkjobs.
+
+00:16:03.480 --> 00:16:05.539
+It's mapped to an alias,
+
+00:16:05.540 --> 00:16:10.919
+a bash alias called cj for "check jobs",
+
+00:16:10.920 --> 00:16:17.079
+which in turn is mapped to a script called checkjobs.sh
+
+00:16:17.080 --> 00:16:20.399
+that, when it's run, returns a listing
+
+00:16:20.400 --> 00:16:23.219
+of the pending and running jobs on the supercomputer
+
+00:16:23.220 --> 00:16:26.080
+in a format that I find pleasing.
+
+00:16:26.081 --> 00:16:34.559
+This `\n` after cj, the new line character,
+
+00:16:34.560 --> 00:16:39.839
+enters the command, so I don't have to do that
+
+00:16:39.840 --> 00:16:43.799
+as an additional step. Likewise,
+
+00:16:43.800 --> 00:16:46.799
+here's a similar setup for interacting with
+
+00:16:46.800 --> 00:16:52.499
+a Ubuntu virtual machine.
+
+NOTE Recommendations
+
+00:16:52.500 --> 00:16:55.919
+In terms of picking up voice computing,
+
+00:16:55.920 --> 00:16:57.479
+these are my recommendations.
+
+00:16:57.480 --> 00:16:59.759
+You're going to run into more errors
+
+00:16:59.760 --> 00:17:01.479
+than you may like initially,
+
+00:17:01.480 --> 00:17:07.839
+and so you need some patience in dealing with those.
+
+00:17:07.840 --> 00:17:09.919
+And also, it'll take you a while
+
+00:17:09.920 --> 00:17:16.799
+to get your head wrapped around Talon and how it works.
+
+00:17:16.800 --> 00:17:19.439
+You'll definitely want to use these custom commands
+
+00:17:19.440 --> 00:17:21.479
+to correct the errors or shortcomings
+
+00:17:21.480 --> 00:17:26.919
+of the language models. And you've seen how,
+
+00:17:26.920 --> 00:17:29.879
+by opening up projects by voice commands,
+
+00:17:29.880 --> 00:17:31.359
+you can reduce friction
+
+00:17:31.360 --> 00:17:36.659
+in terms of restarting work on a project.
+
+00:17:36.660 --> 00:17:40.399
+You've seen how Voice In is preferred
+
+00:17:40.400 --> 00:17:44.879
+for more accurate dictation.
+
+00:17:44.880 --> 00:17:48.079
+I think my error rate is about 1 to 2 percent.
+
+00:17:48.080 --> 00:17:53.879
+That is, 1 to 2 out of 100 words are incorrect
+
+00:17:53.880 --> 00:17:56.319
+versus Talon Voice where I think
+
+00:17:56.320 --> 00:17:59.879
+the error rate is closer to 5 percent.
+
+00:18:00.840 --> 00:18:03.507
+I have put together [a library of English] contractions
+
+00:18:03.508 --> 00:18:04.880
+[and their expansion] for Talon [too],
+
+00:18:04.881 --> 00:18:07.479
+and they can be found here on GitHub.
+
+00:18:07.480 --> 00:18:12.959
+And I also have [posted] a quiz of 600 questions
+
+00:18:12.960 --> 00:18:17.719
+about some basic Talon commands.
+
+NOTE Acknowledgements
+
+00:18:17.720 --> 00:18:20.999
+I'd like to thank the people who've helped me out
+
+00:18:21.000 --> 00:18:22.159
+on the Talon Slack channel
+
+00:18:22.160 --> 00:18:25.799
+and members of the Oklahoma Data Science Workshop
+
+00:18:25.800 --> 00:18:29.879
+where I gave an hour-long talk on this topic
+
+00:18:29.880 --> 00:18:30.959
+several weeks ago.
+
+00:18:30.960 --> 00:18:34.159
+I'd like to thank my friends
+
+00:18:34.160 --> 00:18:37.399
+at the Berlin and Austin Emacs Meetup
+
+00:18:37.400 --> 00:18:42.659
+and at the M-x research Slack channel.
+
+00:18:42.660 --> 00:18:45.119
+And I thank these grant funding agencies
+
+00:18:45.120 --> 00:18:48.880
+for supporting my work. I'll be happy to take any questions.
diff --git a/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt
new file mode 100644
index 00000000..552148f9
--- /dev/null
+++ b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt
@@ -0,0 +1,779 @@
+WEBVTT
+
+
+00:00:04.740 --> 00:00:05.140
+[Speaker 0]: 2 seconds. And I think we are live.
+
+00:00:05.980 --> 00:00:06.480
+Hi Yuchen, how are you doing?
+
+00:00:08.720 --> 00:00:09.220
+[Speaker 1]: I'm gonna just walk off.
+
+00:00:10.840 --> 00:00:11.120
+I'm not sure if I... Yeah,
+
+00:00:13.440 --> 00:00:13.740
+I mean, brain not working well at this
+
+00:00:14.660 --> 00:00:15.160
+moment. How about you?
+
+00:00:18.420 --> 00:00:18.760
+[Speaker 2]: Well, mine is about to get fried because
+
+00:00:21.040 --> 00:00:21.260
+EmacsConf is a very taxing process and I can
+
+00:00:24.599 --> 00:00:25.080
+tell you we could have a race to know who's
+
+00:00:26.720 --> 00:00:26.920
+more more tired right now between you and
+
+00:00:29.480 --> 00:00:29.619
+myself but I guess we'll find out at the end
+
+00:00:32.080 --> 00:00:32.580
+[Speaker 1]: All right, sounds good.
+
+00:00:34.200 --> 00:00:34.700
+[Speaker 2]: of the Q&A. And thank you for...
+
+00:00:37.760 --> 00:00:37.900
+How late or how early I should say is it for
+
+00:00:39.480 --> 00:00:39.640
+you right now? It should be like 6am or
+
+00:00:43.860 --> 00:00:44.059
+[Speaker 1]: Thanks. It's 7.45 but I normally get up at
+
+00:00:45.020 --> 00:00:45.520
+like 8.30 or something.
+
+00:00:46.560 --> 00:00:46.860
+[Speaker 2]: something? Right, okay.
+
+00:00:48.380 --> 00:00:48.880
+Well, anyway, thank you for the sacrifice
+
+00:00:50.200 --> 00:00:50.700
+just to answer some of the questions.
+
+00:00:56.160 --> 00:00:56.320
+All right, so I'll be displaying the
+
+00:00:59.180 --> 00:00:59.680
+questions. I'll be, let me just maximize this
+
+00:01:01.440 --> 00:01:01.720
+on the stream so that people can read
+
+00:01:02.280 --> 00:01:02.640
+everything on my screen.
+
+00:01:03.400 --> 00:01:03.480
+So what I'm going to do,
+
+00:01:05.340 --> 00:01:05.740
+Yuchen, as usual, I'm going to start reading
+
+00:01:06.540 --> 00:01:06.720
+the questions on the pad.
+
+00:01:12.160 --> 00:01:12.660
+I'm going to ask Sasha to open the Q&A.
+
+00:01:13.620 --> 00:01:13.940
+Yes, it's already open.
+
+00:01:15.280 --> 00:01:15.479
+Cool. So if you want to join us,
+
+00:01:19.360 --> 00:01:19.540
+people, Feel free to click on the link on the
+
+00:01:21.820 --> 00:01:21.940
+talk or on IRC to join us on BBB and to ask
+
+00:01:23.440 --> 00:01:23.560
+your questions. Otherwise just leave them on
+
+00:01:24.320 --> 00:01:24.720
+the pad. Alright, Yuchen,
+
+00:01:25.440 --> 00:01:25.940
+starting with the first question.
+
+00:01:28.260 --> 00:01:28.620
+I like the idea of using org-mode to display
+
+00:01:30.300 --> 00:01:30.640
+data from the web. Are there many different
+
+00:01:33.220 --> 00:01:33.580
+packages that do not, I assume.
+
+00:01:35.560 --> 00:01:35.720
+I'm new to Emacs, so maybe this is obvious to
+
+00:01:36.040 --> 00:01:36.540
+everyone else.
+
+00:01:43.860 --> 00:01:44.360
+[Speaker 1]: Yeah, I think so. I mean...
+
+00:01:49.240 --> 00:01:49.440
+[Speaker 2]: Yeah, I think it's a little complicated to
+
+00:01:51.480 --> 00:01:51.660
+specify what is it to display data from the
+
+00:01:53.360 --> 00:01:53.560
+web. Just reading it like this,
+
+00:01:55.900 --> 00:01:56.200
+I'm reminded of Adam, Arthur Pappa,
+
+00:01:58.260 --> 00:01:58.520
+I mean, Code All Capture Web,
+
+00:02:00.860 --> 00:02:01.060
+which technically captures the web and allows
+
+00:02:02.120 --> 00:02:02.500
+you to embed it in the page,
+
+00:02:04.280 --> 00:02:04.400
+but is it really displaying data from the
+
+00:02:06.340 --> 00:02:06.840
+web? Are we implying live transmission?
+
+00:02:07.720 --> 00:02:08.220
+Do you see what I'm talking about?
+
+00:02:10.680 --> 00:02:11.180
+[Speaker 1]: Yeah, I suspect the question is asking,
+
+00:02:17.040 --> 00:02:17.540
+like, having Emacs as a client that's sort of
+
+00:02:19.740 --> 00:02:20.240
+getting data from the web and then displays
+
+00:02:25.120 --> 00:02:25.620
+in Emacs, like using API or using web script.
+
+00:02:35.220 --> 00:02:35.440
+So yeah, like the hreader package or a few
+
+00:02:37.580 --> 00:02:38.080
+packages mentioned in my talk.
+
+00:02:39.920 --> 00:02:40.180
+Yeah, that's a good question.
+
+00:02:46.220 --> 00:02:46.720
+I mean, I really don't know how many.
+
+00:02:48.060 --> 00:02:48.560
+So from my experience,
+
+00:02:55.960 --> 00:02:56.460
+maybe I use like 10, less than 10 packages
+
+00:03:01.220 --> 00:03:01.460
+that do these things. And among these
+
+00:03:03.840 --> 00:03:04.120
+packages, maybe it's half of them are org,
+
+00:03:09.480 --> 00:03:09.980
+[Speaker 2]: So you mean half of them are org-based?
+
+00:03:10.840 --> 00:03:11.340
+Is that what you said?
+
+00:03:11.840 --> 00:03:12.340
+[Speaker 1]: half of them don't. Yeah,
+
+00:03:16.920 --> 00:03:17.420
+but that's just based on the packages I use.
+
+00:03:22.440 --> 00:03:22.940
+I haven't done a survey about this.
+
+00:03:25.520 --> 00:03:25.680
+[Speaker 2]: I think it's okay, you don't need to have all
+
+00:03:26.880 --> 00:03:27.340
+the answers. I mean, you already demonstrate
+
+00:03:29.380 --> 00:03:29.480
+a lot of competence and you talk about all
+
+00:03:31.100 --> 00:03:31.520
+the things you approach with your particular
+
+00:03:33.040 --> 00:03:33.240
+setup, So you don't need to have all the
+
+00:03:36.040 --> 00:03:36.280
+answers. Okay. All right,
+
+00:03:37.160 --> 00:03:37.660
+moving on to the next question.
+
+00:03:39.340 --> 00:03:39.720
+Have you tried EAF, i.e.
+
+00:03:41.680 --> 00:03:41.840
+The Emacs application framework and its
+
+00:03:43.940 --> 00:03:44.120
+browser? If yes, what is your opinion about
+
+00:03:44.120 --> 00:03:44.620
+it?
+
+00:03:47.520 --> 00:03:48.020
+[Speaker 1]: Oh, I haven't tried it.
+
+00:03:53.760 --> 00:03:54.260
+I try to remember why I haven't tried it.
+
+00:04:03.520 --> 00:04:04.020
+It has a browser. I assume the browser
+
+00:04:06.840 --> 00:04:07.340
+executes JavaScript by default.
+
+00:04:12.320 --> 00:04:12.820
+I have to check. Emacs.daf
+
+00:04:15.820 --> 00:04:16.320
+slash daf browser.
+
+00:04:25.520 --> 00:04:25.840
+[Speaker 2]: It's also OK if you want to have a look later
+
+00:04:27.380 --> 00:04:27.560
+and you know whenever you want to report to
+
+00:04:28.940 --> 00:04:29.220
+the pad you know you write a little blurb
+
+00:04:34.700 --> 00:04:34.860
+[Speaker 1]: Yeah sure yeah so yeah I know about EAF but I
+
+00:04:35.460 --> 00:04:35.960
+haven't tried it.
+
+00:04:38.060 --> 00:04:38.340
+[Speaker 2]: about it. Okay well that's already an answer
+
+00:04:41.400 --> 00:04:41.580
+that's cool. We're gonna move on to a
+
+00:04:42.720 --> 00:04:43.040
+question that is a little bit off topic,
+
+00:04:44.700 --> 00:04:44.860
+but I've also been interested about your
+
+00:04:47.420 --> 00:04:47.800
+nickname on IRC. This is not really relevant
+
+00:04:48.900 --> 00:04:49.340
+to the talk, quoting the question,
+
+00:04:50.400 --> 00:04:50.900
+but I'm curious about your nickname.
+
+00:04:52.020 --> 00:04:52.520
+You have some connection to Norway.
+
+00:04:54.480 --> 00:04:54.640
+Your nick indicates an interest in the
+
+00:04:56.040 --> 00:04:56.200
+architectural style inspired by the
+
+00:04:58.280 --> 00:04:58.700
+decoration on Viking ships that was popular
+
+00:05:00.460 --> 00:05:00.700
+in the early 20th century because
+
+00:05:01.880 --> 00:05:02.380
+Dragonsteel, I assume in Norwegian,
+
+00:05:04.860 --> 00:05:05.360
+is Dragon style. Are you familiar with this?
+
+00:05:10.760 --> 00:05:11.260
+[Speaker 1]: Yeah, it's just my favorite architecture
+
+00:05:15.560 --> 00:05:16.060
+style, I think. I mean,
+
+00:05:19.040 --> 00:05:19.540
+I lived in Sweden for like 2,
+
+00:05:25.900 --> 00:05:26.320
+1 half years and yeah I went to Norway once
+
+00:05:32.520 --> 00:05:33.020
+and I saw like this church in Lofoten Island,
+
+00:05:36.766 --> 00:05:36.780
+[Speaker 0]: was amazing. In Luton Island,
+
+00:05:36.820 --> 00:05:36.833
+on Luton Island. Right.
+
+00:05:36.833 --> 00:05:36.846
+[Speaker 1]: on Lofoten Island. Yeah it Yeah,
+
+00:05:40.280 --> 00:05:40.560
+it was amazing. So, yeah,
+
+00:05:43.780 --> 00:05:44.060
+that's exactly why I chose that as my
+
+00:05:46.520 --> 00:05:46.940
+nickname, because it's my favorite
+
+00:05:47.540 --> 00:05:48.040
+architecture style.
+
+00:05:51.940 --> 00:05:52.080
+[Speaker 2]: Okay, well, that was a very astute remark by
+
+00:05:54.760 --> 00:05:54.960
+the viewers, so I hope you feel validated in
+
+00:05:58.480 --> 00:05:58.660
+[Speaker 0]: assumptions. Moving on
+
+00:05:58.980 --> 00:05:59.480
+[Speaker 2]: your to another question.
+
+00:06:01.960 --> 00:06:02.360
+Yuchen, do you have any thoughts about Nixed,
+
+00:06:03.880 --> 00:06:04.380
+about its name, its approach,
+
+00:06:08.560 --> 00:06:09.060
+its relevance? About Nixed,
+
+00:06:11.500 --> 00:06:11.720
+the browser, N-Y-X-T. Oh,
+
+00:06:11.720 --> 00:06:12.220
+Nixed.
+
+00:06:17.220 --> 00:06:17.720
+[Speaker 1]: About what? Yeah, I have tried it.
+
+00:06:21.360 --> 00:06:21.860
+Well, I mean, it's not Emacs.
+
+00:06:26.140 --> 00:06:26.380
+It's kind of similar. I think it tries to do
+
+00:06:27.440 --> 00:06:27.900
+something similar to Emacs,
+
+00:06:33.860 --> 00:06:34.240
+but The problem with Nix is that very early
+
+00:06:37.180 --> 00:06:37.680
+on I encountered an issue with keybinding.
+
+00:06:43.040 --> 00:06:43.240
+So the first thing I want to do is to make
+
+00:06:44.300 --> 00:06:44.800
+all its keybindings emax-y.
+
+00:06:46.920 --> 00:06:47.420
+So that's obviously...
+
+00:06:51.200 --> 00:06:51.580
+So what was the problem?
+
+00:06:53.040 --> 00:06:53.500
+So yeah, I couldn't even do that.
+
+00:06:56.120 --> 00:06:56.620
+I thought, I was expecting that it could...
+
+00:07:02.660 --> 00:07:02.860
+There shouldn't be any issues with setting up
+
+00:07:03.960 --> 00:07:04.440
+whatever key binding you want.
+
+00:07:08.680 --> 00:07:09.180
+So I, the, the issue was that when I tried to
+
+00:07:15.400 --> 00:07:15.660
+do when I tried to bind Ctrl S Ctrl R to the
+
+00:07:17.380 --> 00:07:17.600
+prompt going up and down,
+
+00:07:22.900 --> 00:07:23.140
+so I use I was I complete and I'm used to
+
+00:07:26.760 --> 00:07:27.260
+like the control S and control R to go,
+
+00:07:28.980 --> 00:07:29.480
+to cycle through the selections.
+
+00:07:35.560 --> 00:07:35.760
+And so I want it the same in next in its
+
+00:07:38.460 --> 00:07:38.960
+prompt like when, for example,
+
+00:07:43.620 --> 00:07:44.120
+typing a URL and get completion from history.
+
+00:07:48.900 --> 00:07:49.400
+But it has a conflict with the...
+
+00:07:55.680 --> 00:07:56.180
+And also, I try to bind the hint.
+
+00:08:00.440 --> 00:08:00.940
+So when I want to follow a link,
+
+00:08:05.800 --> 00:08:06.300
+So I press a hint key and then like all these
+
+00:08:10.120 --> 00:08:10.320
+links are highlighted with like little
+
+00:08:13.660 --> 00:08:13.860
+letters that I can like choose which 1 I want
+
+00:08:14.820 --> 00:08:15.320
+which link I want to follow.
+
+00:08:20.140 --> 00:08:20.640
+So I try to bind that 1 to J sort of like
+
+00:08:23.560 --> 00:08:24.060
+Control C, Control J, or mode.
+
+00:08:28.780 --> 00:08:29.180
+But apparently there's a conflict here.
+
+00:08:33.320 --> 00:08:33.820
+So when I do both these prompt mode binding
+
+00:08:36.260 --> 00:08:36.760
+and the document mode binding,
+
+00:08:39.960 --> 00:08:40.460
+Yeah, the prompt no longer works.
+
+00:08:43.840 --> 00:08:44.340
+And I reported the bug to Nixt.
+
+00:08:50.500 --> 00:08:50.600
+And yeah, and there was response but there
+
+00:08:52.580 --> 00:08:53.000
+are so many bugs there,
+
+00:08:55.640 --> 00:08:55.940
+and I don't think that bug is very high
+
+00:09:00.540 --> 00:09:00.860
+priority. So yeah, I basically stopped trying
+
+00:09:03.500 --> 00:09:03.660
+that because key mining is very important to
+
+00:09:07.600 --> 00:09:08.100
+[Speaker 2]: Right, but, sorry, please finish.
+
+00:09:15.620 --> 00:09:15.740
+[Speaker 1]: me. Yeah, so I mean, yeah,
+
+00:09:17.320 --> 00:09:17.820
+without key bindings I can't like,
+
+00:09:23.940 --> 00:09:24.440
+I won't. So, okay, I feel this is a very
+
+00:09:29.280 --> 00:09:29.440
+basic functionality. I'm kind of reluctant to
+
+00:09:31.220 --> 00:09:31.560
+[Speaker 2]: Without key bindings, they are.
+
+00:09:32.020 --> 00:09:32.520
+[Speaker 1]: continue trying what These are pieces.
+
+00:09:34.200 --> 00:09:34.540
+[Speaker 2]: It reminds me of 2 points.
+
+00:09:35.840 --> 00:09:36.100
+So yesterday with Stefan we were talking
+
+00:09:37.540 --> 00:09:37.860
+about sane defaults and when he was sleeping
+
+00:09:39.440 --> 00:09:39.600
+today we talked about it again with a
+
+00:09:41.400 --> 00:09:41.900
+speaker. We did the mentor talk.
+
+00:09:43.020 --> 00:09:43.520
+Feel free to re-watch it afterwards.
+
+00:09:48.320 --> 00:09:48.440
+But it's funny how, you know,
+
+00:09:50.920 --> 00:09:51.360
+regardless of how big the package actually
+
+00:09:54.520 --> 00:09:54.820
+is, they always provide some kind of sane
+
+00:09:55.640 --> 00:09:55.960
+default and with Nixed,
+
+00:09:58.620 --> 00:09:59.120
+obviously, it's built with a Vim mentality
+
+00:10:02.020 --> 00:10:02.520
+and modality of key bindings.
+
+00:10:05.860 --> 00:10:06.060
+And for us, we are more used to the Emacs way
+
+00:10:08.040 --> 00:10:08.540
+of doing things. It's a complete blocker.
+
+00:10:10.320 --> 00:10:10.560
+No matter how great the pieces of
+
+00:10:12.280 --> 00:10:12.780
+functionality behind Nixed are,
+
+00:10:15.060 --> 00:10:15.300
+just the fact that UX-wise we cannot get into
+
+00:10:18.220 --> 00:10:18.340
+it or we cannot have it behave nicely with
+
+00:10:20.280 --> 00:10:20.440
+what we do. It's a massive block that is
+
+00:10:22.040 --> 00:10:22.540
+preventing appropriation of such tools.
+
+00:10:25.940 --> 00:10:26.040
+So it might seem very basic to bounce a
+
+00:10:28.300 --> 00:10:28.800
+package at the level of key bindings but
+
+00:10:29.620 --> 00:10:30.120
+that's what we all do.
+
+00:10:32.800 --> 00:10:33.300
+[Speaker 1]: Yeah, I totally agree.
+
+00:10:36.180 --> 00:10:36.600
+[Speaker 2]: Right, if I can just interrupt,
+
+00:10:38.520 --> 00:10:38.680
+we have about 2 more minutes of questions and
+
+00:10:40.940 --> 00:10:41.320
+I see people are writing more questions.
+
+00:10:42.180 --> 00:10:42.440
+Did you want to add something,
+
+00:10:43.780 --> 00:10:44.280
+Yucheng? On what we're saying?
+
+00:10:47.620 --> 00:10:48.120
+[Speaker 1]: No, no, no, Let's continue.
+
+00:10:51.340 --> 00:10:51.660
+[Speaker 2]: had plenty of time. Okay,
+
+00:10:53.100 --> 00:10:53.260
+I'm going to ask you to be quick about this
+
+00:10:53.860 --> 00:10:54.060
+1. I'm going to read the question,
+
+00:10:54.620 --> 00:10:54.840
+which is slightly long,
+
+00:10:56.320 --> 00:10:56.400
+and you're going to have about 30 seconds to
+
+00:10:57.720 --> 00:10:58.220
+answer it. Do you feel capable of this?
+
+00:10:59.860 --> 00:11:00.360
+[Speaker 1]: I thought we Yeah, let's try it.
+
+00:11:02.860 --> 00:11:03.360
+[Speaker 2]: Let's try it. At least try it.
+
+00:11:05.208 --> 00:11:05.352
+Okay, so quoting, I find the JavaScript trap
+
+00:11:06.680 --> 00:11:06.820
+almost impossible to avoid since I like to
+
+00:11:10.360 --> 00:11:10.860
+buy used stuff online and use my online bank.
+
+00:11:13.140 --> 00:11:13.460
+How do you deal with a JavaScript trap?
+
+00:11:15.400 --> 00:11:15.640
+I use NoScript and compromise on a few things
+
+00:11:16.760 --> 00:11:17.260
+I really feel I cannot live without.
+
+00:11:19.080 --> 00:11:19.440
+EWW is nice for a lot of things,
+
+00:11:21.260 --> 00:11:21.660
+especially with R for less noise,
+
+00:11:23.760 --> 00:11:24.220
+but I need Firefox for those GS and trapped
+
+00:11:25.760 --> 00:11:26.260
+pages. So do you have a quick answer to this?
+
+00:11:29.500 --> 00:11:29.800
+[Speaker 1]: Yeah, I don't have a good answer,
+
+00:11:30.640 --> 00:11:31.140
+but I have a quick answer.
+
+00:11:38.140 --> 00:11:38.640
+So I use VPN and like a more,
+
+00:11:41.680 --> 00:11:42.180
+what do you call it, move out the Swedish VPN
+
+00:11:43.480 --> 00:11:43.980
+browser, move out browser.
+
+00:11:48.960 --> 00:11:49.160
+Yeah, so I unfortunately I have to use
+
+00:11:50.660 --> 00:11:50.980
+JavaScript in these cases as well,
+
+00:11:53.800 --> 00:11:54.020
+but I try to minimize the use of these
+
+00:11:54.020 --> 00:11:54.520
+things.
+
+00:11:56.920 --> 00:11:57.040
+[Speaker 2]: How long do you think it will take for us to
+
+00:11:58.140 --> 00:11:58.480
+save the world with Emacs,
+
+00:11:59.340 --> 00:11:59.760
+or save the web at least?
+
+00:12:01.360 --> 00:12:01.560
+5 years, 10 years, maybe a little less than
+
+00:12:01.560 --> 00:12:02.060
+this?
+
+00:12:06.600 --> 00:12:07.000
+[Speaker 1]: Well I think it's, unfortunately it's
+
+00:12:08.300 --> 00:12:08.800
+probably independent of Emacs,
+
+00:12:12.180 --> 00:12:12.680
+like it will only be saved when,
+
+00:12:14.860 --> 00:12:14.970
+like it's saved on like the normal,
+
+00:12:18.960 --> 00:12:19.460
+the more popular browsers like Firefox.
+
+00:12:23.680 --> 00:12:24.060
+I have no clue how long it will take for,
+
+00:12:25.120 --> 00:12:25.620
+I don't know, for example,
+
+00:12:28.660 --> 00:12:29.140
+Tala to pick up so that you can buy things
+
+00:12:30.020 --> 00:12:30.520
+without running JavaScript.
+
+00:12:33.220 --> 00:12:33.340
+[Speaker 2]: Right. Well, I guess we'll have to cross our
+
+00:12:35.380 --> 00:12:35.740
+fingers then for Firefox to save the world.
+
+00:12:37.260 --> 00:12:37.500
+All right Yuchen, we're about out of time,
+
+00:12:38.800 --> 00:12:39.080
+we're moving on to the next talk in 20
+
+00:12:40.200 --> 00:12:40.360
+seconds. Thank you so much for your
+
+00:12:41.940 --> 00:12:42.100
+presentation and for waking up early and
+
+00:12:42.540 --> 00:12:42.780
+answering the question,
+
+00:12:44.820 --> 00:12:45.060
+and I can tell you, you were very alert and
+
+00:12:47.020 --> 00:12:47.520
+definitely more energetic than I was.
+
+00:12:52.600 --> 00:12:53.100
+All right, see you later.
+
+00:12:53.940 --> 00:12:54.440
+[Speaker 1]: Thank you. See you.
+
+00:12:58.400 --> 00:12:58.900
+[Speaker 2]: Bye. And we go to the next talk right now.
+
+00:13:02.620 --> 00:13:03.120
+[Speaker 0]: You are currently
+
+00:13:15.260 --> 00:13:15.760
+you
diff --git a/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt
new file mode 100644
index 00000000..f94dbab5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:35.679
+Overview
+
+00:00:35.680 --> 00:05:31.939
+Background problems
+
+00:05:31.940 --> 00:09:46.380
+Solutions outside of Emacs
+
+00:09:46.480 --> 00:09:54.599
+Emacs solutions
+
+00:09:54.600 --> 00:12:43.020
+Free clients in Emacs
+
+00:12:43.021 --> 00:16:52.379
+Web browsers in Emacs
+
+00:16:52.380 --> 00:17:30.379
+emacs-web-server - overview
+
+00:17:30.380 --> 00:18:17.579
+emacs-web-server - hello emacs!
+
+00:18:17.580 --> 00:23:06.439
+emacs-web-server - yolo
+
+00:23:07.940 --> 00:29:40.419
+emacs-web-server - emacs web framework
+
+00:29:40.420 --> 00:31:25.359
+Firefox with emacs for extensions
+
+00:31:25.360 --> 00:31:31.440
+Thank you
diff --git a/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt
new file mode 100644
index 00000000..60bafffd
--- /dev/null
+++ b/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt
@@ -0,0 +1,1629 @@
+WEBVTT captioned by ken, checked by sachac
+
+NOTE Overview
+
+00:00:00.000 --> 00:00:03.199
+Hello, I am Yuchen, and I will be talking about
+
+00:00:03.200 --> 00:00:06.839
+how Emacs may be used to save user freedom on the web.
+
+00:00:06.840 --> 00:00:09.679
+I will begin by describing the background issues,
+
+00:00:09.680 --> 00:00:12.359
+followed by solutions outside of Emacs.
+
+00:00:12.360 --> 00:00:14.879
+Then I will move into the main business of describing
+
+00:00:14.880 --> 00:00:17.799
+several ways to address the issues using Emacs,
+
+00:00:17.800 --> 00:00:20.599
+including free clients in Emacs, web browsers,
+
+00:00:20.600 --> 00:00:23.399
+also known as universal clients in Emacs,
+
+00:00:23.400 --> 00:00:27.119
+approaches using Emacs web server and Emacs web framework,
+
+00:00:27.120 --> 00:00:29.319
+which allows one to write an Emacs package
+
+00:00:29.320 --> 00:00:30.759
+and get a web app for free,
+
+00:00:30.760 --> 00:00:35.679
+as well as using Emacs as a Firefox extension.
+
+NOTE Background problems
+
+00:00:35.680 --> 00:00:37.159
+OK, let's now move on to
+
+00:00:37.160 --> 00:00:39.559
+the background issues for this topic.
+
+00:00:39.560 --> 00:00:42.639
+Many of you probably already know what is free software.
+
+00:00:42.640 --> 00:00:45.480
+It is software that respects four user freedoms,
+
+00:00:45.481 --> 00:00:48.999
+including freedom 0, which is the freedom to use,
+
+00:00:49.000 --> 00:00:52.179
+freedom 1 is the freedom to study and modify a program,
+
+00:00:52.279 --> 00:00:53.988
+freedom 2 is the freedom to
+
+00:00:54.488 --> 00:00:57.239
+distribute exact copies of a program,
+
+00:00:57.240 --> 00:01:01.679
+and freedom 3 is the freedom to distribute modified copies.
+
+00:01:01.680 --> 00:01:04.039
+Different environments have different norms
+
+00:01:04.040 --> 00:01:06.819
+with regards to user freedom.
+
+00:01:06.820 --> 00:01:11.239
+For example, GNU/Linux distributions
+
+00:01:11.240 --> 00:01:13.439
+default to free software,
+
+00:01:13.440 --> 00:01:15.519
+even though the official kernel Linux
+
+00:01:15.520 --> 00:01:18.419
+contains non-free code, like non-free firmware.
+
+00:01:18.420 --> 00:01:23.059
+What I mean is, people generally expect free software
+
+00:01:23.060 --> 00:01:25.759
+in these environments.
+
+00:01:25.760 --> 00:01:27.359
+There's plenty of free software
+
+00:01:27.360 --> 00:01:29.039
+built on other free software,
+
+00:01:29.040 --> 00:01:31.219
+so generally people can accomplish tasks
+
+00:01:31.220 --> 00:01:33.599
+using free software only.
+
+00:01:33.600 --> 00:01:37.279
+Emacs, by comparison, is even better.
+
+00:01:37.280 --> 00:01:41.219
+It has freedom built-in, as it is highly customizable
+
+00:01:41.220 --> 00:01:44.679
+with self-documenting configurations.
+
+00:01:44.680 --> 00:01:49.599
+When a Lisp form is evaluated by the user in Emacs,
+
+00:01:49.600 --> 00:01:53.159
+the change is instantly reflected in the environment.
+
+00:01:53.160 --> 00:01:56.719
+Thus, it converts users to hackers effortlessly.
+
+00:01:56.720 --> 00:01:58.439
+From writing setq statements,
+
+00:01:58.440 --> 00:02:00.639
+which is similar to configurations
+
+00:02:00.640 --> 00:02:01.959
+in the majority of other programs,
+
+00:02:01.960 --> 00:02:03.399
+to writing functions,
+
+00:02:03.400 --> 00:02:05.439
+which are building blocks of Elisp features,
+
+00:02:05.440 --> 00:02:08.139
+to writing features and publishing packages,
+
+00:02:08.140 --> 00:02:09.799
+it is a natural progression.
+
+00:02:10.099 --> 00:02:15.039
+In this sense, Emacs perhaps has
+
+00:02:15.040 --> 00:02:18.839
+the most gentle learning curve for hackers.
+
+00:02:18.840 --> 00:02:21.099
+On the other hand, the default license
+
+00:02:21.100 --> 00:02:22.599
+in the Emacs community
+
+00:02:22.600 --> 00:02:26.100
+is GNU General Public License version 3 or later,
+
+00:02:26.200 --> 00:02:29.039
+which is the best free software license
+
+00:02:29.040 --> 00:02:32.299
+apart from the Affero license.
+
+00:02:32.300 --> 00:02:35.019
+Now let's move on to web browsers,
+
+00:02:35.020 --> 00:02:39.239
+which by contrast does not default to freedom.
+
+00:02:39.240 --> 00:02:42.199
+For one thing, free software JavaScript projects
+
+00:02:42.200 --> 00:02:45.779
+default to Expat license,
+
+00:02:45.780 --> 00:02:49.399
+which is also commonly known as the MIT license,
+
+00:02:49.400 --> 00:02:53.279
+which is a lax permissive license that could be exploited
+
+00:02:53.280 --> 00:02:55.919
+as developers could write non-free derivatives
+
+00:02:55.920 --> 00:02:59.679
+and subjugate user freedom.
+
+00:02:59.680 --> 00:03:03.159
+This also contributes to the JavaScript trap.
+
+00:03:03.160 --> 00:03:06.719
+Most popular web browsers nowadays simply download and run
+
+00:03:06.720 --> 00:03:10.819
+any JavaScript code requested by the web page.
+
+00:03:10.820 --> 00:03:15.319
+Generally speaking, there are two camps on this issue.
+
+00:03:15.320 --> 00:03:19.039
+One side would say JavaScript is simply part of life,
+
+00:03:19.040 --> 00:03:22.039
+and an integral part of the so-called modern web.
+
+00:03:22.040 --> 00:03:25.299
+Just accept it, and there is no point in fighting it.
+
+00:03:25.300 --> 00:03:28.288
+Indeed, it can be frustrating when greeted by
+
+00:03:28.388 --> 00:03:31.799
+"This page requires JavaScript and cookies to continue,"
+
+00:03:31.800 --> 00:03:34.719
+or even a blank page when opening a web page
+
+00:03:34.720 --> 00:03:38.439
+while disabling JavaScript.
+
+00:03:38.440 --> 00:03:42.159
+The other camp takes a more principled position
+
+00:03:42.160 --> 00:03:44.839
+and says JavaScript is unnecessary.
+
+00:03:44.840 --> 00:03:47.279
+I mean, people use the web mainly for
+
+00:03:47.280 --> 00:03:48.519
+database-like operations
+
+00:03:48.520 --> 00:03:51.679
+to interact with data stored on other people's computers,
+
+00:03:51.680 --> 00:03:55.359
+like querying, creating, updating, deleting.
+
+00:03:55.360 --> 00:03:58.959
+I mean, 99% of the things happen in getting data,
+
+00:03:58.960 --> 00:04:01.239
+including reading news, watching videos,
+
+00:04:01.240 --> 00:04:03.339
+downloading images, etc.,
+
+00:04:03.340 --> 00:04:06.079
+and posting data, including publishing
+
+00:04:06.080 --> 00:04:10.479
+this sort of materials, publishing news comments, videos.
+
+00:04:10.480 --> 00:04:12.399
+Why does this need any programs
+
+00:04:12.400 --> 00:04:16.199
+to do funny computations, right?
+
+00:04:16.200 --> 00:04:18.980
+Modern web browsers are also a pain to use.
+
+00:04:19.080 --> 00:04:20.980
+They are the opposite to Emacs
+
+00:04:21.080 --> 00:04:26.759
+in terms of customization capabilities.
+
+00:04:26.760 --> 00:04:29.359
+Such problems on the client side
+
+00:04:29.360 --> 00:04:31.919
+is the main focus of this talk.
+
+00:04:31.920 --> 00:04:34.319
+On the server side, the issue is known as SaaSS,
+
+00:04:34.320 --> 00:04:38.460
+service as a software substitute.
+
+00:04:38.760 --> 00:04:42.420
+It is about doing computing for users
+
+00:04:42.421 --> 00:04:44.540
+on other people's computers,
+
+00:04:44.541 --> 00:04:48.439
+which the user has no visibility, let alone control.
+
+00:04:48.440 --> 00:04:51.940
+Examples include translation or photo editing
+
+00:04:51.941 --> 00:04:55.359
+in so-called web applications.
+
+00:04:55.360 --> 00:04:59.919
+Another example would be web applications
+
+00:04:59.920 --> 00:05:02.159
+make recommendations based on user data
+
+00:05:02.160 --> 00:05:05.959
+and suggest what the users read or watch next.
+
+00:05:05.960 --> 00:05:09.959
+On the one hand, SaaSS is an intractable problem
+
+00:05:09.960 --> 00:05:11.799
+because free software is all about user freedom
+
+00:05:11.800 --> 00:05:13.759
+on one's own computer,
+
+00:05:13.760 --> 00:05:16.079
+not someone else's computer.
+
+00:05:16.080 --> 00:05:18.780
+On the other hand, this is also a lesser problem
+
+00:05:18.880 --> 00:05:21.599
+because it has trivial solutions,
+
+00:05:21.600 --> 00:05:25.839
+which is self-hosting and keeping computations local.
+
+00:05:25.840 --> 00:05:28.679
+Wouldn't it be nice to use a photo editing web application,
+
+00:05:28.680 --> 00:05:31.939
+but without the web?
+
+NOTE Solutions outside of Emacs
+
+00:05:31.940 --> 00:05:36.400
+Right, now let's move on to solutions outside of Emacs
+
+00:05:36.401 --> 00:05:39.039
+that tackle these problems.
+
+00:05:39.040 --> 00:05:42.959
+There are generally two ways to fix this issue.
+
+00:05:42.960 --> 00:05:45.399
+One is blocking non-free JavaScript,
+
+00:05:45.400 --> 00:05:48.979
+and the other is substituting with free programs.
+
+00:05:48.980 --> 00:05:50.439
+Let's start with blocking.
+
+00:05:50.440 --> 00:05:54.859
+LibreJS, for example, is a Firefox extension
+
+00:05:54.860 --> 00:05:56.919
+blocking non-free, non-trivial JavaScript.
+
+00:05:56.920 --> 00:05:59.820
+It works by intercepting, filtering
+
+00:05:59.821 --> 00:06:01.759
+all requests for JavaScript,
+
+00:06:01.760 --> 00:06:05.599
+recognizing the ones that are trivial or free,
+
+00:06:05.600 --> 00:06:10.999
+and blocking the execution of the others.
+
+00:06:11.000 --> 00:06:13.879
+As an experiment, I logged the LibreJS output
+
+00:06:13.880 --> 00:06:15.559
+for about two weeks,
+
+00:06:15.560 --> 00:06:19.739
+and during which, of all the web pages I loaded,
+
+00:06:19.740 --> 00:06:25.000
+23 domains have at least some LibreJS-compliant scripts.
+
+00:06:25.001 --> 00:06:28.679
+That is not much, though I did use other means
+
+00:06:28.680 --> 00:06:30.819
+to reduce the scenarios
+
+00:06:30.920 --> 00:06:35.399
+where I need to load web pages with JavaScript in Firefox,
+
+00:06:35.400 --> 00:06:40.719
+like using a text browser like Lynx.
+
+00:06:40.720 --> 00:06:44.239
+Then there's also NoScript, which is like LibreJS,
+
+00:06:44.240 --> 00:06:49.499
+but it blocks all scripts, whether free or non-free,
+trivial or non-trivial.
+
+00:06:49.500 --> 00:06:54.359
+So the problem with blocking is that
+
+00:06:54.360 --> 00:06:57.559
+blocking with certain scripts and accepting others,
+
+00:06:57.560 --> 00:07:00.579
+there are like... I can think of two problems.
+
+00:07:00.679 --> 00:07:02.779
+One is that it does not help with Freedom 1,
+
+00:07:02.879 --> 00:07:07.959
+which is the freedom to allow users to modify a program
+
+00:07:07.960 --> 00:07:13.079
+and use it in place of the original program.
+
+00:07:13.080 --> 00:07:15.839
+And also it does not help
+
+00:07:15.840 --> 00:07:18.859
+when the non-free JavaScript is mandatory
+
+00:07:18.860 --> 00:07:20.719
+for the functioning of the web page.
+
+00:07:20.720 --> 00:07:22.839
+For example, some pages are blank
+
+00:07:22.840 --> 00:07:27.079
+when non-free JavaScript is not executed.
+
+00:07:27.080 --> 00:07:35.180
+So now let's move on to the substitution, the other method.
+
+00:07:36.280 --> 00:07:38.919
+Let's start with userscript.
+
+00:07:38.920 --> 00:07:41.760
+It is a script, it is a user-specified JavaScript
+
+00:07:41.761 --> 00:07:43.039
+injected to a web page.
+
+00:07:43.040 --> 00:07:48.480
+A typical example of userscript tool is GreaseMonkey.
+
+00:07:48.481 --> 00:07:53.159
+Another idea is a proxy that replaces scripts in place,
+
+00:07:53.160 --> 00:07:55.819
+that is, sending user-specified scripts
+
+00:07:55.919 --> 00:08:00.899
+as a response to requests for such scripts.
+
+00:08:00.900 --> 00:08:04.759
+So one example would be Haketilo, however you pronounce it.
+
+00:08:04.760 --> 00:08:09.619
+It's a tool that's built on top of mitmproxy.
+
+00:08:09.620 --> 00:08:11.719
+It is supposed to do this.
+
+00:08:11.720 --> 00:08:14.599
+I haven't used GreaseMonkey nor Haketilo
+
+00:08:14.600 --> 00:08:16.599
+for these purposes yet,
+
+00:08:16.600 --> 00:08:20.779
+so I can't say much about these options.
+
+00:08:20.780 --> 00:08:24.359
+So then there are also free clients
+
+00:08:24.360 --> 00:08:26.479
+which replace the whole frontend,
+
+00:08:26.480 --> 00:08:30.660
+instead of a script requested by web pages
+
+00:08:30.661 --> 00:08:32.499
+from the official web clients.
+
+00:08:32.500 --> 00:08:37.359
+People often refer to them as alternative frontend.
+
+00:08:37.360 --> 00:08:39.359
+YouTube is perhaps the best example
+
+00:08:39.360 --> 00:08:41.279
+as there are so many free clients,
+
+00:08:41.280 --> 00:08:43.621
+including Invidious for the web,
+
+00:08:43.622 --> 00:08:46.239
+youtube-dl and yt-dlp on the command line,
+
+00:08:46.240 --> 00:08:50.279
+MPV and VLC as GUI desktop, LibreTube
+
+00:08:50.280 --> 00:08:53.259
+and NewPipe for Android and so on.
+
+00:08:53.260 --> 00:08:56.759
+Youtube-dl and yt-dlp are especially versatile
+
+00:08:56.760 --> 00:08:59.459
+as they work with many video and audio sites
+
+00:08:59.460 --> 00:09:02.520
+with extractors written in Python,
+
+00:09:02.620 --> 00:09:06.299
+so people can add extractors like extensions.
+
+00:09:06.300 --> 00:09:09.421
+A similar tool would be woob,
+
+00:09:09.422 --> 00:09:12.739
+short for web outside of the browsers.
+
+00:09:12.740 --> 00:09:16.820
+It is a command-line and GUI program
+
+00:09:16.920 --> 00:09:23.199
+that interacts with many web services, even banks.
+
+00:09:23.200 --> 00:09:25.839
+And there are browser extensions
+
+00:09:25.840 --> 00:09:28.859
+that automatically redirect to these clients.
+
+00:09:28.860 --> 00:09:31.639
+For example, Redirector and Libredirect
+
+00:09:31.640 --> 00:09:35.199
+redirect to the free web clients.
+
+00:09:35.200 --> 00:09:39.699
+One could use OpenWith, another extension,
+
+00:09:39.700 --> 00:09:42.159
+to redirect to free non-web clients,
+
+00:09:42.160 --> 00:09:46.380
+for example by opening YouTube links with MPV.
+
+NOTE Emacs solutions
+
+00:09:46.480 --> 00:09:50.999
+Now let us move to Emacs-based solutions.
+
+00:09:51.000 --> 00:09:54.599
+They are based on the same ideas but using Emacs.
+
+NOTE Free clients in Emacs
+
+00:09:54.600 --> 00:09:57.479
+First, free clients in Emacs.
+
+00:09:57.480 --> 00:10:00.639
+Basically alternative frontends written in Elisp.
+
+00:10:00.640 --> 00:10:03.359
+There are several advantages.
+
+00:10:03.360 --> 00:10:06.199
+For example, integration with other Emacs tools,
+
+00:10:06.200 --> 00:10:09.559
+good for archiving, making use of Emacs libraries,
+
+00:10:09.560 --> 00:10:12.488
+extensibility, thanks to Emacs' own
+
+00:10:12.489 --> 00:10:14.900
+extensibility and customizability.
+
+00:10:15.000 --> 00:10:18.619
+Examples include mastodon.el for mastodon,
+
+00:10:18.620 --> 00:10:22.679
+or mastorg for viewing and archiving toots with org,
+
+00:10:22.680 --> 00:10:28.899
+sx for Stack Exchange, buildbot.el for buildbot, etc.
+
+00:10:28.900 --> 00:10:31.900
+Here's an example of mastorg displaying
+
+00:10:31.901 --> 00:10:34.420
+the hierarchy of a toot in org.
+
+00:10:34.520 --> 00:10:39.820
+Just wait. Right.
+
+00:10:39.920 --> 00:10:43.900
+So this is the toot itself, this is a first reply,
+
+00:10:44.000 --> 00:10:48.479
+this is a reply to the reply, and so on.
+
+00:10:48.480 --> 00:10:53.079
+And here is an example of
+
+00:10:53.080 --> 00:11:05.719
+opening a Stack Exchange link using sx.
+
+00:11:05.720 --> 00:11:07.020
+Let's check out the tag.
+
+00:11:11.120 --> 00:11:28.399
+So we can browse the Stack Exchange Emacs site
+with ease.
+
+00:11:28.400 --> 00:11:31.079
+The idea is quite simple.
+
+00:11:31.080 --> 00:11:35.620
+Just use APIs to get data and display it in Emacs,
+
+00:11:35.720 --> 00:11:40.819
+or just to scrape, like requesting HTML and processing it.
+
+00:11:40.820 --> 00:11:42.079
+An example of scraping is hnreader,
+
+00:11:44.180 --> 00:11:47.199
+which scrapes Hacker News web pages
+
+00:11:47.299 --> 00:11:49.779
+and renders them in Org buffers.
+
+00:11:49.780 --> 00:11:52.379
+Here's how hnreader fetches
+
+00:11:52.380 --> 00:11:56.319
+and displays the Hacker News front page.
+
+00:11:58.520 --> 00:12:03.999
+And one could go into the comments,
+
+00:12:04.000 --> 00:12:09.159
+which shows a similar hierarchy to mastorg's output.
+
+00:12:14.360 --> 00:12:19.000
+And of course, there are limitations for this method,
+
+00:12:19.001 --> 00:12:22.539
+which is not limited to Emacs.
+
+00:12:22.540 --> 00:12:24.521
+There are basically limitations
+
+00:12:24.522 --> 00:12:28.419
+to any ad hoc bespoke clients,
+
+00:12:28.420 --> 00:12:31.519
+which is catch-up games with remote server,
+
+00:12:31.520 --> 00:12:34.559
+which may change the API interface endpoints
+
+00:12:34.560 --> 00:12:37.539
+or even structure of the responses.
+
+00:12:37.540 --> 00:12:43.020
+This brings us to web browsers in Emacs.
+
+NOTE Web browsers in Emacs
+
+00:12:43.021 --> 00:12:45.159
+Web browsers are universal clients
+
+00:12:45.160 --> 00:12:47.199
+because all sites support browsers.
+
+00:12:47.200 --> 00:12:48.919
+So in a world of no JavaScript,
+
+00:12:48.920 --> 00:12:52.739
+there will be no need to write bespoke clients.
+
+00:12:52.740 --> 00:12:53.479
+In such a world,
+
+00:12:53.480 --> 00:12:56.739
+instead of using JavaScript code to fetch JSON,
+
+00:12:56.740 --> 00:13:00.119
+web developers make server do the heavy lifting
+
+00:13:00.120 --> 00:13:02.859
+and just send the complete HTML over.
+
+00:13:02.860 --> 00:13:05.479
+Okay, back to reality.
+
+00:13:05.480 --> 00:13:07.659
+EWW, the default Emacs browser,
+
+00:13:07.660 --> 00:13:11.379
+is what people refer to as a text browser,
+
+00:13:11.380 --> 00:13:16.899
+even though it is not text only and it supports images too.
+
+00:13:16.900 --> 00:13:20.679
+It is a good solid browser that supports forms, etc.
+
+00:13:20.680 --> 00:13:24.079
+The downside is that it does not support CSS,
+
+00:13:24.080 --> 00:13:28.159
+so the formatting could be a bit ugly sometimes.
+
+00:13:28.160 --> 00:13:30.119
+There are some other browsers in Emacs too,
+
+00:13:30.120 --> 00:13:34.279
+like emacs-w3m, which is backed by w3m,
+
+00:13:34.280 --> 00:13:36.439
+and Luwak, which is backed by Lynx.
+
+00:13:36.440 --> 00:13:39.099
+Sorry for the naming, by the way.
+
+00:13:39.100 --> 00:13:41.519
+They often consist of a backend
+
+00:13:41.520 --> 00:13:44.879
+that fetches URL and parses HTML.
+
+00:13:44.880 --> 00:13:47.199
+For example, the built-in URL package
+
+00:13:47.200 --> 00:13:50.599
+and the libxml2 binding in Emacs are decent enough.
+
+00:13:50.600 --> 00:13:53.188
+And the frontend that renders the HTML,
+
+00:13:53.189 --> 00:13:56.599
+like shr or lynx, etc.
+
+00:13:56.699 --> 00:14:04.739
+There is also an xwidget-webkit,
+
+00:14:04.740 --> 00:14:07.759
+but this browser executes JavaScript,
+
+00:14:07.760 --> 00:14:10.539
+so it does not really help in this case.
+
+00:14:10.540 --> 00:14:14.239
+Browser extensions on Emacs are effortless,
+
+00:14:14.240 --> 00:14:17.459
+as they can be written as Emacs packages.
+
+00:14:17.460 --> 00:14:19.279
+For example, one could easily write
+
+00:14:19.280 --> 00:14:21.959
+Elisp scripts with similar functionalities
+
+00:14:21.960 --> 00:14:24.921
+to libredirect and openwith
+
+00:14:24.922 --> 00:14:29.881
+to redirect links, to rewrite URLs,
+
+00:14:30.181 --> 00:14:36.860
+or to open, say, a YouTube URL with MPV,
+
+00:14:37.061 --> 00:14:39.700
+but with even more flexibility.
+
+00:14:39.800 --> 00:14:41.779
+For example, here's how one could
+
+00:14:41.780 --> 00:14:44.839
+transform a Zoom link to a dial-in number
+
+00:14:44.840 --> 00:14:47.479
+so that it is easier to join a Zoom meeting
+
+00:14:47.480 --> 00:14:50.359
+without running non-free JavaScript.
+
+00:14:50.360 --> 00:14:53.039
+This might still be bad for privacy,
+
+00:14:53.040 --> 00:14:55.999
+but at least it's good for freedom.
+
+00:14:58.699 --> 00:15:00.279
+As mentioned before,
+
+00:15:00.379 --> 00:15:03.919
+one shortcoming of these Emacs-based browsers,
+
+00:15:03.920 --> 00:15:08.079
+Emacs web browsers, is no support for CSS,
+
+00:15:08.080 --> 00:15:11.319
+so the formatting could leave a lot to be desired.
+
+00:15:11.320 --> 00:15:12.959
+Maybe someone would write
+
+00:15:12.960 --> 00:15:17.159
+an Emacs browser package backed by wkhtmltopdf,
+
+00:15:17.160 --> 00:15:20.639
+which, when opening a URL,
+
+00:15:20.640 --> 00:15:26.380
+it calls wkhtmltopdf to convert the web page to PDF
+
+00:15:26.480 --> 00:15:29.540
+and opens in, say, pdf-view-mode of the pdf-tools,
+
+00:15:29.640 --> 00:15:31.039
+thus containing formatting,
+
+00:15:31.040 --> 00:15:33.999
+and all the URL clicks resolve to the same actions.
+
+00:15:34.000 --> 00:15:42.399
+Also, wkhtmltopdf contains a flag that disables JavaScript.
+
+00:15:43.300 --> 00:15:45.239
+Another idea would be to use Firefox
+
+00:15:45.240 --> 00:15:49.679
+as a processor to fetch URLs.
+
+00:15:50.280 --> 00:15:54.559
+Maybe it can be used to pass back the HTML
+
+00:15:54.560 --> 00:15:56.519
+after executing free JavaScript,
+
+00:15:56.520 --> 00:16:01.439
+say, if Firefox has LibreJS installed.
+
+00:16:01.440 --> 00:16:04.940
+This requires Firefox to send back the DOM,
+
+00:16:05.040 --> 00:16:08.039
+which could be achieved using native messaging.
+
+00:16:08.040 --> 00:16:09.719
+More on that later.
+
+00:16:09.720 --> 00:16:14.239
+Alternatively, one could also write a Firefox extension
+
+00:16:14.240 --> 00:16:17.639
+that sends the DOM in an existing tab back to Emacs.
+
+00:16:17.640 --> 00:16:20.079
+But thinking more about it,
+
+00:16:20.080 --> 00:16:22.959
+I don't think this is actually a useful idea,
+
+00:16:23.059 --> 00:16:27.039
+because most of the sites that work under LibreJS
+
+00:16:27.139 --> 00:16:34.419
+also are useful when all JavaScript is blocked.
+
+00:16:34.420 --> 00:16:37.039
+So, this means these sites are viewable
+
+00:16:37.040 --> 00:16:42.159
+under EWW, Luwak, etc.
+
+00:16:42.160 --> 00:16:43.639
+And another issue is that
+
+00:16:43.640 --> 00:16:46.559
+this could also make running non-free JavaScript easier,
+
+00:16:46.560 --> 00:16:52.379
+which is harmful to user freedom.
+
+NOTE emacs-web-server - overview
+
+00:16:52.380 --> 00:16:54.239
+OK, let's move on to the idea
+
+00:16:54.240 --> 00:16:55.679
+of running Emacs as a web server,
+
+00:16:55.680 --> 00:16:58.559
+so that Emacs client packages are web apps
+
+00:16:58.560 --> 00:17:00.319
+serving as alternative frontends.
+
+00:17:00.320 --> 00:17:02.239
+Why would we want to do this?
+
+00:17:02.240 --> 00:17:06.079
+Well, as much as one wants to be always in Emacs,
+
+00:17:06.080 --> 00:17:08.339
+it is not always feasible.
+
+00:17:08.340 --> 00:17:10.719
+For example, one may be on the go
+
+00:17:10.720 --> 00:17:12.519
+and needs to look up something on the phone.
+
+00:17:12.520 --> 00:17:14.879
+On the other hand, Emacs client packages
+
+00:17:14.880 --> 00:17:16.159
+are just alternative frontends
+
+00:17:16.160 --> 00:17:18.119
+but written in Elisp and run in Emacs.
+
+00:17:18.120 --> 00:17:20.759
+With the help of emacs-web-server package,
+
+00:17:20.760 --> 00:17:23.579
+we can access Emacs packages on the web.
+
+00:17:23.580 --> 00:17:26.439
+emacs-web-server package is not something new,
+
+00:17:26.440 --> 00:17:30.379
+but seems to be underused in the community somehow.
+
+NOTE emacs-web-server - hello emacs!
+
+00:17:30.380 --> 00:17:33.359
+OK, let's start with a simple example called hello-emacs.
+
+00:17:33.360 --> 00:17:35.239
+It is pretty straightforward.
+
+00:17:35.240 --> 00:17:38.639
+Just require the web server feature
+
+00:17:38.640 --> 00:17:40.999
+and run ws-start to start a server process
+
+00:17:41.000 --> 00:17:43.359
+and send the string "hello emacs"
+
+00:17:43.360 --> 00:17:45.539
+to the process regardless of the request.
+
+00:17:45.540 --> 00:17:48.479
+As you can see, it is going to be available
+
+00:17:48.480 --> 00:17:51.219
+at port 9000 of localhost.
+
+00:17:51.319 --> 00:17:52.999
+Let's try it out.
+
+00:17:53.000 --> 00:18:01.839
+We need to first evaluate this code block.
+
+00:18:01.840 --> 00:18:03.939
+And it works.
+
+00:18:03.940 --> 00:18:10.839
+To stop a server, just run ws-stop on the web server object.
+
+00:18:10.840 --> 00:18:14.959
+Let's evaluate.
+
+00:18:14.960 --> 00:18:17.579
+Yep, it stopped.
+
+NOTE emacs-web-server - yolo
+
+00:18:17.580 --> 00:18:19.999
+OK, now let's move on to something funny
+
+00:18:20.000 --> 00:18:22.219
+that you should never run on the public web.
+
+00:18:22.220 --> 00:18:23.919
+I call it yolo.el.
+
+00:18:23.920 --> 00:18:25.359
+It uses htmlize
+
+00:18:25.360 --> 00:18:28.159
+to make any Emacs buffer available on the web.
+
+00:18:28.160 --> 00:18:28.999
+Let's try it out.
+
+00:18:29.000 --> 00:18:32.999
+Just require the thing and start the server by yolo-start.
+
+00:18:33.000 --> 00:18:38.119
+And it's available at port 9999.
+
+00:18:38.120 --> 00:18:41.599
+By default, the root domain shows the splash screen
+
+00:18:41.600 --> 00:18:42.919
+which needs to be available.
+
+00:18:42.920 --> 00:18:46.719
+Running display-splash-screen ensures that,
+
+00:18:47.219 --> 00:18:48.839
+but here I've already run it.
+
+00:18:48.939 --> 00:18:54.359
+So let's have a look.
+
+00:18:54.560 --> 00:18:56.639
+And here we have the splash screen.
+
+00:18:56.640 --> 00:19:00.239
+Emacs tutorial and such.
+
+00:19:00.240 --> 00:19:03.279
+Unfortunately, none of these links work,
+
+00:19:05.480 --> 00:19:08.000
+which is something we will revisit later.
+
+00:19:10.000 --> 00:19:15.381
+So, to show an arbitrary buffer,
+
+00:19:15.481 --> 00:19:19.981
+just use the buffer name as a path.
+
+00:19:20.081 --> 00:19:24.761
+For example, the slide has the buffer named web.org,
+
+00:19:24.861 --> 00:19:28.080
+so we can display it.
+
+00:19:34.581 --> 00:19:36.540
+Let's try something fancier,
+
+00:19:36.941 --> 00:19:40.000
+like the man page of ffmpeg.
+
+00:19:40.880 --> 00:19:44.719
+So this is the man page of ffmpeg.
+
+00:19:45.120 --> 00:19:48.420
+And the buffer name is a bit more complicated.
+
+00:19:48.520 --> 00:19:51.639
+I have the URL available here.
+
+00:19:59.140 --> 00:20:05.979
+It's missing a star.
+
+00:20:05.980 --> 00:20:10.659
+It's pretty neat if you ask me.
+
+00:20:12.560 --> 00:20:14.879
+And, yeah, what else?
+
+00:20:14.880 --> 00:20:22.699
+Well, we can also browse EWW in Firefox.
+
+00:20:22.700 --> 00:20:30.599
+For example, let's check out gnu.org,
+
+00:20:30.600 --> 00:20:33.679
+and note that the buffer name is EWW with stars.
+
+00:20:39.080 --> 00:20:41.879
+So, ah, it works.
+
+00:20:41.979 --> 00:20:50.899
+And it has all the graphics even.
+
+00:20:50.900 --> 00:20:55.639
+Now, how about we do it the other way around?
+
+00:20:55.640 --> 00:21:10.779
+So we load the current slide web.org using this funny thing.
+
+00:21:10.780 --> 00:21:12.239
+And it works.
+
+00:21:14.040 --> 00:21:19.939
+Not as nice as the Org buffer, though.
+
+00:21:19.940 --> 00:21:27.439
+Right, and now that gives me some funny idea.
+
+00:21:27.440 --> 00:21:31.359
+So I'm a firm believer that memes are meant to be enjoyed
+
+00:21:31.360 --> 00:21:33.199
+in silence rather than read out loud.
+
+00:21:33.200 --> 00:21:38.759
+So I will jump straight to trying this idea,
+
+00:21:38.760 --> 00:21:48.959
+which is loading the EWW buffer URL with EWW itself.
+
+00:21:49.860 --> 00:21:53.839
+Loading, loading, loading.
+
+00:21:53.840 --> 00:21:56.199
+Spoiler alert, it never loads.
+
+00:21:59.100 --> 00:22:03.120
+So that concludes the demo.
+
+00:22:03.220 --> 00:22:06.439
+And so we can stop the server, web server, with `yolo-stop`.
+
+00:22:06.440 --> 00:22:13.399
+So one could extend yolo to serve arbitrary Emacs commands,
+
+00:22:13.400 --> 00:22:15.439
+making it even more dangerous.
+
+00:22:15.440 --> 00:22:26.019
+That is, for example, `localhost:9000/m-x/magit-status`
+
+00:22:26.119 --> 00:22:27.720
+would run `magit-status`
+
+00:22:27.820 --> 00:22:33.499
+and show the magit-status buffer in the web browser.
+
+00:22:34.500 --> 00:22:43.119
+Or localhost:9000/m-x/eww/
+
+00:22:43.120 --> 00:22:46.759
+any arbitrary URL to browse arbitrary URL
+
+00:22:46.760 --> 00:22:50.819
+with EWW inside of Firefox.
+
+00:22:50.820 --> 00:22:53.879
+It can serve as a way to block all JavaScript,
+
+00:22:53.880 --> 00:22:56.799
+because EWW does not support JavaScript.
+
+00:22:56.800 --> 00:23:00.079
+And enforce preferred colorscheme in Firefox,
+
+00:23:00.080 --> 00:23:02.839
+since htmlize, as you have noticed,
+
+00:23:02.840 --> 00:23:06.439
+faithfully reflects the theme used in Emacs.
+
+NOTE emacs-web-server - emacs web framework
+
+00:23:07.940 --> 00:23:10.239
+Okay, so we know that yolo is unsafe
+
+00:23:10.339 --> 00:23:11.440
+and needs to be refined.
+
+00:23:11.540 --> 00:23:13.439
+In fact, we don't necessarily want
+
+00:23:13.440 --> 00:23:15.599
+to run Emacs on a web browser.
+
+00:23:15.600 --> 00:23:17.279
+After all, a modern web browser is
+
+00:23:17.280 --> 00:23:19.079
+something one has to fight all the time
+
+00:23:19.080 --> 00:23:21.600
+and should be avoided whenever possible.
+
+00:23:21.601 --> 00:23:24.479
+We want to instead be able to access things
+
+00:23:24.480 --> 00:23:26.459
+when forced to be in a web browser,
+
+00:23:26.460 --> 00:23:28.359
+in which case only the motivations
+
+00:23:28.360 --> 00:23:31.299
+of an alternative frontend apply.
+
+00:23:31.300 --> 00:23:35.360
+Moreover, the ideal situation is an Emacs web framework,
+
+00:23:35.460 --> 00:23:36.799
+a tool that automatically
+
+00:23:36.800 --> 00:23:39.199
+transforms Emacs packages to web apps,
+
+00:23:39.200 --> 00:23:41.799
+so that one does not need to write extra code
+
+00:23:41.800 --> 00:23:45.559
+to get a web app that does the same thing as the package.
+
+00:23:45.560 --> 00:23:49.099
+We also need all links in the web pages to work.
+
+00:23:49.100 --> 00:23:52.399
+As noted before, the links on the yolo Emacs splash screen
+
+00:23:52.400 --> 00:23:53.839
+do not work.
+
+00:23:53.840 --> 00:23:58.199
+So here's a proof-of-concept example. It's called bom.el.
+
+00:23:58.200 --> 00:24:00.119
+It gets some weather forecast data
+
+00:24:00.120 --> 00:24:03.079
+from the Australian Bureau of Meteorology
+
+00:24:03.080 --> 00:24:05.559
+and displays it in an org buffer.
+
+00:24:05.560 --> 00:24:09.279
+So let's try it out. One could do `M-x bom`,
+
+00:24:09.280 --> 00:24:15.219
+which shows an org buffer with links to each state.
+
+00:24:15.220 --> 00:24:17.199
+So based in Melbourne, naturally,
+
+00:24:17.200 --> 00:24:21.839
+I would like to find out the weather of Victoria.
+
+00:24:21.840 --> 00:24:27.839
+And yes, to execute this command. Wait, wait, wait. Right.
+
+00:24:27.840 --> 00:24:33.459
+And we are at a buffer that shows
+
+00:24:33.460 --> 00:24:36.119
+the weather forecast of the whole of Victoria
+
+00:24:36.120 --> 00:24:39.379
+in the hierarchy. Note that this back button
+
+00:24:39.479 --> 00:24:46.639
+takes you to the previous page.
+
+00:24:46.640 --> 00:24:47.919
+So here are the regions of Victoria.
+
+00:24:47.920 --> 00:24:53.799
+I think Melbourne is in Central.
+
+00:24:53.800 --> 00:24:54.719
+And yeah, it shows
+
+00:24:54.720 --> 00:24:57.259
+the seven-day weather forecast of Melbourne.
+
+00:24:57.260 --> 00:25:00.359
+You can also reach this page by running,
+
+00:25:00.360 --> 00:25:08.199
+let's see, directly `M-x bom-state`.
+
+00:25:08.600 --> 00:25:09.759
+Vic.
+
+00:25:13.960 --> 00:25:18.399
+OK. So this works.
+
+00:25:18.400 --> 00:25:21.280
+And this is bom as an Emacs package.
+
+00:25:21.380 --> 00:25:23.980
+Now let's check out bom as a web app
+
+00:25:23.981 --> 00:25:28.039
+transformed by Emacs web framework.
+
+00:25:28.040 --> 00:25:30.319
+So start the web server with bom-start.
+
+00:25:33.020 --> 00:25:39.559
+And let's try it out. It's at 9000 again.
+
+00:25:39.560 --> 00:25:42.359
+Oops. Invalid path. Oh, that's because
+
+00:25:42.360 --> 00:25:46.119
+it makes exactly one command to one path.
+
+00:25:46.120 --> 00:25:49.300
+So remember that we used the bom command
+
+00:25:49.301 --> 00:25:50.719
+to show the landing page.
+
+00:25:50.720 --> 00:25:54.340
+So here we need the bom in the path as well.
+
+00:25:54.440 --> 00:26:00.679
+And it shows the same landing page, except in HTML.
+
+00:26:00.680 --> 00:26:07.259
+Let's check out Victoria weather forecast as before.
+
+00:26:07.260 --> 00:26:12.279
+And it shows an HTML converted from the org buffer
+
+00:26:12.280 --> 00:26:17.559
+using ox export HTML, whatever.
+
+00:26:17.560 --> 00:26:20.259
+And you can see even the back button is here.
+
+00:26:20.359 --> 00:26:26.219
+That takes you to /bom.
+
+00:26:26.220 --> 00:26:29.139
+So let's have a look at Melbourne. Here it is.
+
+00:26:29.140 --> 00:26:31.379
+Hooray, it works.
+
+00:26:31.380 --> 00:26:33.860
+So, yeah, as usual,
+
+00:26:33.960 --> 00:26:40.559
+you can stop the web server with `M-x bom-stop`.
+
+00:26:40.560 --> 00:26:43.660
+Right. And alternatively,
+
+00:26:43.760 --> 00:26:48.499
+it can also be deployed directly in terminal
+
+00:26:48.500 --> 00:26:56.099
+in a dedicated Emacs daemon.
+
+00:26:56.100 --> 00:26:58.279
+So you can see that there's a one-one correspondence
+
+00:26:58.280 --> 00:27:03.099
+between the Emacs package interface and the web interface.
+
+00:27:03.100 --> 00:27:06.039
+And that implies some restrictions to the Emacs package
+
+00:27:06.040 --> 00:27:09.159
+for the Emacs web framework to be able to do its job. Right.
+
+00:27:09.160 --> 00:27:13.439
+For example, the package needs to have an Org interface
+
+00:27:13.440 --> 00:27:15.519
+and the links that trigger other commands
+
+00:27:15.520 --> 00:27:17.799
+need to be in Elisp links
+
+00:27:17.800 --> 00:27:20.759
+so that the Emacs web framework
+
+00:27:20.760 --> 00:27:24.799
+can translate it to web server URL path.
+
+00:27:24.800 --> 00:27:28.919
+Note that Emacs web server framework is not a real package.
+
+00:27:28.920 --> 00:27:33.339
+I wrote some functions in bom.el serving the purpose,
+
+00:27:33.340 --> 00:27:35.719
+and they should be separated out eventually
+
+00:27:35.720 --> 00:27:37.759
+without much trouble.
+
+00:27:37.760 --> 00:27:39.999
+One could get weather forecast
+
+00:27:40.000 --> 00:27:42.219
+without running JavaScript anyway,
+
+00:27:42.220 --> 00:27:45.199
+which makes bom.el less important
+
+00:27:45.200 --> 00:27:48.319
+as an alternative web client.
+
+00:27:48.320 --> 00:27:50.519
+Though it does provide, dare I say,
+
+00:27:50.520 --> 00:27:52.380
+a clean and minimal interface
+
+00:27:52.480 --> 00:27:55.719
+compared to common weather forecast web pages.
+
+00:27:55.720 --> 00:27:58.639
+Other more relevant use cases could be Mastodon,
+
+00:27:58.640 --> 00:28:01.319
+whose official web client requires JavaScript
+
+00:28:01.320 --> 00:28:03.479
+to display a post.
+
+00:28:03.480 --> 00:28:08.559
+The mastorg package that shows an Org hierarchy of toots
+
+00:28:08.560 --> 00:28:12.079
+rooted as a given toot could be a low-hanging fruit.
+
+00:28:12.179 --> 00:28:15.199
+The limitation of Org interface requirements
+
+00:28:15.200 --> 00:28:17.879
+can also be relaxed in further work,
+
+00:28:17.880 --> 00:28:21.639
+if one could extend Emacs web framework
+
+00:28:21.640 --> 00:28:24.199
+to translate back and forth between Emacs widgets,
+
+00:28:24.200 --> 00:28:28.639
+say, including buttons and web page widgets,
+
+00:28:28.640 --> 00:28:30.599
+including links.
+
+00:28:30.600 --> 00:28:32.599
+Another more far-fetched idea would be
+
+00:28:32.600 --> 00:28:35.799
+to translate to other types of interfaces,
+
+00:28:35.800 --> 00:28:42.120
+like GNU/Linux or Android GUI.
+
+00:28:44.020 --> 00:28:47.479
+How about animations? Say, M-x butterfly,
+
+00:28:47.480 --> 00:28:53.999
+or even web games from Emacs games?
+
+00:28:54.000 --> 00:29:00.099
+Possibilities are unlimited in this, as always, in Emacs.
+
+00:29:00.100 --> 00:29:03.159
+I also noticed some limitations
+
+00:29:03.160 --> 00:29:07.439
+when trying to actually host bom.el on the public web.
+
+00:29:07.440 --> 00:29:12.939
+Given the limited access to the Emacs server,
+
+00:29:13.540 --> 00:29:16.719
+I was comfortable enough to give bom.el a go
+
+00:29:16.720 --> 00:29:18.799
+to serve it on the public web.
+
+00:29:18.800 --> 00:29:20.559
+However, I immediately stopped
+
+00:29:20.560 --> 00:29:22.879
+after noticing how slow it is.
+
+00:29:22.880 --> 00:29:24.719
+It can take more than 30 seconds
+
+00:29:24.720 --> 00:29:27.839
+to load a page of weather forecast for a state.
+
+00:29:27.840 --> 00:29:30.999
+I am also not sure how many simultaneous connections
+
+00:29:31.000 --> 00:29:32.379
+it can handle.
+
+00:29:32.380 --> 00:29:36.439
+In any case, I think the package emacs-web-server
+
+00:29:36.440 --> 00:29:40.419
+could do with some performance enhancement.
+
+NOTE Firefox with emacs for extensions
+
+00:29:40.420 --> 00:29:43.999
+Right. Because of the time constraints,
+
+00:29:44.000 --> 00:29:45.759
+I will briefly touch one final idea,
+
+00:29:45.760 --> 00:29:50.320
+which is to use Emacs as a Firefox browser extension.
+
+00:29:50.420 --> 00:29:52.800
+We already have org-protocol,
+
+00:29:52.900 --> 00:29:54.439
+which allows Firefox to communicate
+
+00:29:54.440 --> 00:29:55.919
+with a running Emacs server
+
+00:29:55.920 --> 00:29:59.779
+by sending an org-protocol URL to the latter.
+
+00:29:59.780 --> 00:30:03.159
+It can be used not just for capturing or storing links,
+
+00:30:03.160 --> 00:30:10.119
+but to execute arbitrary code on any component of the URL.
+
+00:30:10.120 --> 00:30:11.679
+However, it is fire and forget,
+
+00:30:11.680 --> 00:30:16.479
+and Emacs cannot tell Firefox what to do.
+
+00:30:16.480 --> 00:30:17.919
+There may be a length restriction, too.
+
+00:30:17.920 --> 00:30:20.399
+For example, Firefox may not be able to send back
+
+00:30:20.400 --> 00:30:22.419
+the whole DOM.
+
+00:30:22.420 --> 00:30:26.219
+This claim needs to be verified, though.
+
+00:30:26.220 --> 00:30:30.019
+Native messaging is one solution to this problem.
+
+00:30:30.020 --> 00:30:31.639
+It is a two-way communication channel
+
+00:30:31.640 --> 00:30:35.319
+between a Firefox web extension and a local system process
+
+00:30:35.320 --> 00:30:37.839
+started by the web extension.
+
+00:30:37.840 --> 00:30:40.399
+The process could be an Emacs server,
+
+00:30:40.400 --> 00:30:42.399
+which would make Emacs effectively
+
+00:30:42.400 --> 00:30:48.679
+a Firefox web browser extension.
+
+00:30:48.680 --> 00:30:51.999
+In this case, Elisp would be the main extension language,
+
+00:30:52.000 --> 00:30:53.619
+rather than JavaScript.
+
+00:30:53.620 --> 00:30:56.159
+However, JavaScript is still needed at the Firefox end
+
+00:30:56.160 --> 00:30:59.220
+of the communication channel.
+
+00:30:59.320 --> 00:31:01.159
+As a simple example of this idea,
+
+00:31:01.160 --> 00:31:04.439
+Firefox could ask Emacs to redirect a URL
+
+00:31:04.440 --> 00:31:08.319
+by removing tracking and using alternative frontend, etc.
+
+00:31:08.320 --> 00:31:12.479
+However, I was not able to implement this
+
+00:31:12.480 --> 00:31:14.279
+due to some tricky business
+
+00:31:14.280 --> 00:31:15.639
+with enforcing synchronicity
+
+00:31:15.640 --> 00:31:17.119
+that allows the web extension
+
+00:31:17.120 --> 00:31:20.199
+to wait for responses from Emacs.
+
+00:31:20.200 --> 00:31:25.359
+Some further work, I suppose.
+
+NOTE Thank you
+
+00:31:25.360 --> 00:31:28.154
+That concludes my talk.
+
+00:31:28.254 --> 00:31:31.440
+Thank you for your attention.
diff --git a/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt
new file mode 100644
index 00000000..7dbb18c5
--- /dev/null
+++ b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt
@@ -0,0 +1,1394 @@
+WEBVTT
+
+00:00.000 --> 00:06.880
+Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and
+
+00:06.880 --> 00:14.800
+welcome to, uh, uh, welcome to my talk. I'm a little distracted here. I had a friend who came
+
+00:14.800 --> 00:20.320
+over and just brought me a whole bunch of peanut butter cups, homemade peanut butter cups. Maybe
+
+00:20.320 --> 00:26.400
+I'll show those off, uh, later. What? Okay. Here, uh, put it right there.
+
+00:33.840 --> 00:41.760
+Okay. So I'm going to, uh, get over to my plan, uh, stuff I'm sharing here, hopefully.
+
+00:42.800 --> 00:48.640
+Uh, and, and we'll jump, jump right in because I'm going to need as much time as I can possibly
+
+00:48.640 --> 00:55.520
+have today. Thanks so much for, uh, joining me for Emacs conference and for, especially for,
+
+00:56.400 --> 01:03.520
+um, all of you who, who, who participated, you know, in the discussions, contributing talks and,
+
+01:03.520 --> 01:09.600
+um, you know, uh, you know, including running the, the, the, and it's just so much fun to be here.
+
+01:09.600 --> 01:16.320
+Um, I guess while I'm standing here and, and saying stuff that's, that I'm going to have to
+
+01:16.320 --> 01:23.280
+transcribe, cause I didn't, uh, prepare a recorded version. Uh, I had a lot of trouble
+
+01:23.280 --> 01:28.880
+trimming this down so I can solve that problem by just talking a lot at the beginning, uh,
+
+01:28.880 --> 01:37.120
+about other stuff. Um, so in addition to the thanks, I just want to say thanks also to the
+
+01:37.120 --> 01:41.920
+folks on the development list that helped me kind of come up to speed on this. I won't make a big
+
+01:41.920 --> 01:48.880
+list here, but, um, and, and, and for all that I've learned from my previous conferences, it's
+
+01:48.880 --> 01:55.200
+just, I can't stress enough what a great opportunity volunteering for, uh, free software related things
+
+01:55.200 --> 02:00.080
+are, uh, as a way to get involved. People will just totally teach you how to be helpful and I'm
+
+02:00.080 --> 02:18.800
+loving it. I can preview the stream, but it's not super easy right now. I got all my screens
+
+02:18.800 --> 02:23.680
+kind of dedicated to other stuff. So should I pause for a second before I get into the slides?
+
+02:23.680 --> 02:27.680
+Cause that's, they're, they'll be hard to see if I'm not full screen.
+
+02:29.440 --> 02:34.240
+Yeah, that would be nice. Okay. Well, I'll keep ad libbing then cause I just have a million,
+
+02:34.240 --> 02:42.960
+uh, things I can say. Um, uh, so, uh, let me just quickly talk, uh, things that aren't in here.
+
+02:42.960 --> 02:50.320
+Um, I'm going to mention the mysis2.org and the, that project, which provides a port
+
+02:51.280 --> 03:03.520
+of, uh, the GNU, uh, uh, glibc and a lot of GNU and, uh, uh, their free software. Um, so, uh,
+
+03:03.520 --> 03:03.840
+I don't...
+
+03:03.840 --> 03:07.760
+All right, I'm switching a room to, uh, a DVD room to Stefan.
+
+03:12.080 --> 03:15.440
+All right. So I'm going to take mumble out of my, uh, pardon me, folks.
+
+03:16.080 --> 03:18.640
+It's going to take mumble out of my speakers here.
+
+03:22.800 --> 03:30.080
+Okay. We'll take the speakers out of play entirely and I'll just switch to some headphones.
+
+03:33.600 --> 03:34.720
+All right. So...
+
+03:36.720 --> 03:42.240
+Perfect. What an amazing amount of time. All right. So thanks a lot. Uh, today I've got a jam
+
+03:42.400 --> 03:48.720
+packed talk. Um, I've, I've done my best to make, to make this not too overwhelming,
+
+03:48.720 --> 03:55.040
+but overall we're going to try to try to actually build, um, Emacs while we're talking today.
+
+03:55.040 --> 04:00.400
+And we might actually build several Emacs. Uh, so let's take a look at that real quick.
+
+04:00.400 --> 04:08.160
+Um, so over here we have a screen where I am just once a minute looking, uh,
+
+04:08.480 --> 04:15.360
+uh, indirectly at whether there have been any pushes, uh, upstream to either the Emacs 29 or
+
+04:15.360 --> 04:24.320
+Emacs 30 branches. So I've arranged for us to sort of keep an eye on that, um, while we talk.
+
+04:24.320 --> 04:30.000
+And, you know, maybe that's, that's one thing that we'll do. And then additionally, we'll probably
+
+04:30.640 --> 04:36.640
+fire up a shell. This is the MySys2 environment that I talked about before,
+
+04:36.640 --> 04:42.160
+and we'll probably create some directories and things. But before we get into all that, let's,
+
+04:42.160 --> 04:48.080
+let's give some, some context. Uh, I've been doing my best to try to, uh, make sure all this
+
+04:48.080 --> 04:54.240
+information is on the Emacs wiki as well. So, uh, sorry, as I said, I got a little caught off guard.
+
+04:54.240 --> 05:02.640
+So I'm moving my foot pedals to the floor, back to the floor here. And I should be able to advance
+
+05:02.640 --> 05:11.760
+slides here. All right. So, um, I kind of provided some special definitions for things. I'm going to
+
+05:11.760 --> 05:21.680
+kind of level set with those. The, uh, um, when I say a binary release, I'm talking about some,
+
+05:21.680 --> 05:27.440
+some, uh, I'm talking about Emacs for Windows as, uh, just ready to run out of its folder or
+
+05:28.080 --> 05:35.600
+in whatever similar form. The, when I say a build, I'm talking about kind of a process of doing that.
+
+05:36.400 --> 05:41.040
+Um, when Emacs.get, of course, that's the upstream hosted by GNU Savannah.
+
+05:41.600 --> 05:51.680
+The Emacs release is, is a tarball created from that. The sources for, um, Emacs are going to be
+
+05:51.680 --> 05:58.480
+one of those two things, um, very specifically. So I'm not going to talk about patches patching.
+
+05:58.480 --> 06:06.720
+There's some implications there. Perhaps we'll get into it. Uh, so a snapshot is when I build
+
+06:06.720 --> 06:14.880
+from anything other than a release source, uh, a tarball. Um, just if I, if I say that I'm talking
+
+06:14.880 --> 06:23.600
+specifically about the, uh, the XZ version of the file as, as a technical point. Um,
+
+06:23.600 --> 06:32.480
+so that may come up. All right. Nothing else I think up my sleeve. Um, the, uh, as, as a key
+
+06:32.480 --> 06:38.320
+data point, it's worth understanding that there's a file called configure AC. It's going to be
+
+06:38.320 --> 06:46.160
+processed, uh, as part of auto-conf. We, we initially access that when we run, um, auto-gen
+
+06:46.160 --> 06:52.720
+as you'll see in a little bit. Um, the, but before, but, uh, so the auto-gen script will
+
+06:52.720 --> 07:00.160
+generally consider this, uh, so in a release build, um, this has been thought about kind of for us as
+
+07:00.240 --> 07:10.480
+part of, um, making the tarball. Um, the configure.ac, um, yeah, I think I pretty much covered,
+
+07:10.480 --> 07:16.880
+covered this. So, um, those, those that kind of partially built status, that's a,
+
+07:16.880 --> 07:22.640
+might be another phrase that you hear me use. So this slide unpacks that a little more.
+
+07:22.880 --> 07:29.520
+Um, so it can be a little confusing to understand what exactly the, you know, what is it, you know,
+
+07:29.520 --> 07:36.160
+how stable is Emacs depending on what I have. So the, I got a kind of set of rules of thumb here,
+
+07:36.160 --> 07:43.680
+right? First I want the highest, uh, you know, dot, uh, dot release value that I can get,
+
+07:43.680 --> 07:50.080
+assuming that that's higher than one. If it's, if it were to only be one, let's say,
+
+07:50.160 --> 07:58.560
+if it were to only be one, let's say my choices were 29.1 and 30.1, I would take 30.1. Um,
+
+07:59.200 --> 08:05.520
+cause that's, that's weird. But, um, what you'll normally see is you might see a 28.2,
+
+08:06.080 --> 08:15.760
+you might see a 29.1. So here I think 28.2 is got the most, most, most stable, um,
+
+08:16.560 --> 08:26.160
+set, uh, the, uh, or set of release binaries. The 29.1 will, will have a little more features,
+
+08:26.160 --> 08:33.680
+but will tend to be more stable than, uh, any, uh, lower point releases for 29, uh, certainly
+
+08:33.680 --> 08:39.600
+than any release candidates for 29, which might even have new features, um, but are mostly going
+
+08:39.600 --> 08:46.000
+to just be packages. So they're going to become the most stable thing here. And especially if
+
+08:46.000 --> 08:53.600
+they, they, they have a, you know, if this, this is not, uh, if this were to be 29.2 release
+
+08:53.600 --> 09:04.960
+candidate one as well, looking forward to seeing, um, the, uh, 30.50. Um, and, and in between this,
+
+09:04.960 --> 09:11.840
+this pretest here, we're talking about kind of developer land. Um, so, um, the expectation is
+
+09:11.840 --> 09:16.560
+that, you know, what you're doing that applies to windows users, uh, just as much if you are
+
+09:16.560 --> 09:22.960
+building anything in the snapshot range, any of that is going to be in this 30.0.50. Currently
+
+09:22.960 --> 09:32.240
+that'll change when the, uh, when the 30, 30, uh, an Emacs 30 release tags, uh, or release branches
+
+09:32.240 --> 09:42.880
+come. Okay. So let's talk about the local. Um, there's not much to know about what I have going
+
+09:42.880 --> 09:51.200
+on, except that I have my, my paths mess messed with. So, um, if, if that, that were to come up,
+
+09:51.200 --> 09:57.120
+if you're wondering how, why does this, uh, and insist command work, that's probably the place
+
+09:57.120 --> 10:03.760
+where you'd notice it. Uh, I am using windows 10. I haven't tried windows 11, uh, as mentioned,
+
+10:03.760 --> 10:09.520
+mysis2 is critical to all this. There's one script in particular that will error out if you try to do
+
+10:09.520 --> 10:16.560
+anything other than use mysis's, mysis's shell. And in fact, mysis owns or provides three shells
+
+10:16.560 --> 10:21.760
+and of them, that script is designed to work with a specific one of them as, as we'll come to.
+
+10:22.720 --> 10:29.120
+Uh, I don't talk about installing the dependencies, but just as, as kind of some kind of help,
+
+10:29.680 --> 10:38.480
+um, you can search using this formula and install, uh, using this formula.
+
+10:38.480 --> 10:40.800
+Good luck with those, you know, grep commands.
+
+10:43.520 --> 10:49.440
+And this is the tool for building the self-installing self-extracting installer or, uh,
+
+10:49.520 --> 10:55.600
+executable self-installer. Um, the script for that is provided along with the Emacs source.
+
+10:56.720 --> 11:03.280
+Um, and I've provided a helpful link to the main page for the project download link on the left.
+
+11:03.280 --> 11:09.680
+It is not, um, it's kind of scare where the way that this link appears, but I have clicked it and
+
+11:09.680 --> 11:18.960
+it's working for me. Automation does, uh, we'll, we have some time we'll be looking at this at a
+
+11:18.960 --> 11:24.560
+minimum. I wanted to mention that what I do on my local, what you're seeing in the crawler, I hope,
+
+11:25.280 --> 11:35.600
+uh, represents a, uh, a simple sleep loop. Uh, and we'll, we'll look into that if we have time.
+
+11:36.560 --> 11:42.960
+Um, I do have a little bit, I do use like a cron job and so on to clean up some hosting that,
+
+11:42.960 --> 11:50.160
+that I pay for, um, where I've got, where I, where I kind of self host some, uh, snapshots,
+
+11:50.720 --> 11:58.880
+more stuff than I feel comfortable uploading to, uh, to GNU. The, um,
+
+12:01.760 --> 12:06.480
+you know, I never said, uh, my name is Corwin Brust. For the last couple of years, I've been
+
+12:06.480 --> 12:12.480
+the volunteer making, uh, um, making the snapshots, the quote unquote, official binaries,
+
+12:12.480 --> 12:20.560
+uh, for windows of the, um, of, of Emacs for windows. So that's, that's all the different
+
+12:20.560 --> 12:25.680
+versions. Uh, help is always welcome with that. I'd be very happy to teach you in more depth.
+
+12:25.680 --> 12:31.920
+This video is, you know, kind of my drop dead file. Uh, I don't have specific plans. Uh, if
+
+12:31.920 --> 12:36.480
+somebody's like, Hey, get out of the way, this is the one thing I think I can do. Um, Hey,
+
+12:36.480 --> 12:44.640
+that's real relatable. Okay. Um, so I haven't tried, uh, the, I haven't tried a lot of fun
+
+12:44.640 --> 12:50.400
+things that I won't talk about. Um, the, uh, the rest of this talk is going to get into the
+
+12:50.400 --> 12:56.560
+nitty gritty. As I said, um, if we can't convince Emacs to start building over on that screen,
+
+12:56.560 --> 13:05.120
+we'll be opening it up here on the center stage. Um, uh, this begins and there's, there's, there's,
+
+13:05.120 --> 13:11.520
+there's great insight here too, on the wiki, uh, with picking an FTP source for any official
+
+13:11.520 --> 13:19.760
+release that is for a stable product, please visit, um, ftp.gnu.org. Otherwise you'll want
+
+13:19.760 --> 13:27.280
+to switch that FTP dot at the beginning to alpha dot and take a pretest, uh, or any snapshot or
+
+13:27.280 --> 13:36.640
+otherwise, then publish there the, uh, next, uh, you know, I'm gonna, you have some examples in
+
+13:36.640 --> 13:43.440
+here that assume that you're doing a release bill that you're doing $29 one, but, um, I am glancing
+
+13:43.520 --> 13:51.440
+out of the, the right side of my face at the chat on the opt-ins. Anybody in there wants to direct
+
+13:51.440 --> 13:57.840
+me at a particular, um, we can make some other, we can build something else. If you want to see
+
+13:57.840 --> 14:03.840
+a snapshot build more mentioned that, um, the examples that you're going to see here that I
+
+14:03.840 --> 14:12.560
+will, without other direction, cut and paste, um, are all, uh, based on the release bill. So,
+
+14:14.640 --> 14:22.320
+um, so, uh, we'll use the, uh, I mentioned that there are several shells provided by MySys2.
+
+14:22.960 --> 14:33.120
+The MinGW64 shell is the one that we mostly need. Um, I tested all of this as well with the MinGW32
+
+14:33.120 --> 14:40.400
+shell. Um, so that, that should work and, and see mix binaries that, that, that work for me.
+
+14:44.080 --> 14:50.720
+Uh, I, as I mentioned, I don't get into the details of installing all your prerequisites.
+
+14:50.720 --> 14:56.560
+I found that doing it in a headfirst manner wasn't, uh, wasn't difficult. And I also found
+
+14:56.560 --> 15:00.240
+that there's a number of tutorials. I didn't want to pick one to link here.
+
+15:01.040 --> 15:10.800
+Um, there, uh, here, uh, okay. So our general formula for building Emacs, irrespective of
+
+15:10.800 --> 15:19.600
+Windows, looks like, does the configure script exist if not run autogen? From a Windows build
+
+15:19.600 --> 15:27.600
+standpoint, this is, if I'm not running a release, release build, call the autogen script.
+
+15:27.840 --> 15:32.080
+Right. And this would be in the directory where we want to pack this. I'll demonstrate
+
+15:32.080 --> 15:42.640
+within three minutes if, uh, if one, if nobody's pushed upstream to Emacs. Um, so, uh, the configure,
+
+15:42.640 --> 15:53.280
+uh, and, uh, configure options are, uh, uh, the, the configure, you know, if the configure, sorry,
+
+15:54.240 --> 16:01.520
+the configure script exists, then, uh, it doesn't, doesn't exist. So the only reason,
+
+16:01.520 --> 16:07.920
+so in my process, I will always execute that step because I clean everything after every build,
+
+16:07.920 --> 16:16.880
+um, in all my contexts. Um, however, if you were, you know, had a, a checkout of emacs.get
+
+16:16.880 --> 16:21.440
+and you are building it at several releases, then maybe you've got a configure script and then you
+
+16:21.440 --> 16:27.600
+all want to know, um, the, you know, whether you have to bootstrap and the typical complexities,
+
+16:27.600 --> 16:33.200
+but otherwise you might be able to skip that in, in, in the abstract. Um,
+
+16:36.080 --> 16:41.520
+is that right? Or is it, is it the make, uh, so, and if they make file doesn't exist,
+
+16:41.520 --> 16:46.080
+make install. I know I'm looking at that in question whether it's correct. Sorry about that.
+
+16:46.640 --> 16:55.600
+Um, in any case, uh, so auto-gen configure make install is our recipe. Auto-gen creates the
+
+16:55.600 --> 17:01.840
+configure script, configure creates the make file, the make file. Um, in the case of windows,
+
+17:01.840 --> 17:08.080
+I almost always want the install, uh, and to specify some location where the installed emacs
+
+17:08.080 --> 17:19.120
+will land. This is where all of the recipes for packaging emacs go. And if I were, uh, you know,
+
+17:19.120 --> 17:24.640
+using this as a movie to upgrade, I personally would do that by, by specifying an install path,
+
+17:24.640 --> 17:31.520
+quote unquote, on top of, uh, a main installation. I don't do that. I update shortcuts mainly based
+
+17:31.520 --> 17:37.600
+on what specifically I want to try, uh, in an effort to, to, to, to notice, uh, interesting
+
+17:37.600 --> 17:44.400
+patches and confirm they work on windows, which mostly they do. There's not a lot of code in my
+
+17:44.400 --> 17:49.760
+experience that is, uh, windows specific and very, very little around the build process.
+
+17:50.320 --> 17:57.440
+All right. Huge rabbit hole zone. And I still have a minute before I have to, uh, kick off
+
+17:57.440 --> 18:07.120
+the first part of our demo. So let's, let's keep, keep diving in, um, the, those specific part
+
+18:07.120 --> 18:11.920
+windows specific parts beside the dot exe extension that we're going to find slammed
+
+18:11.920 --> 18:17.680
+onto all of our familiar, uh, executables. We're also going to have emacs client W,
+
+18:18.400 --> 18:26.880
+which is a wrapper that hides, um, how hard it is to get, uh, to, to, to get it,
+
+18:27.600 --> 18:31.760
+how bad the abstraction is between the window management layer and the GUI,
+
+18:32.400 --> 18:37.040
+and then all the different parts on windows. Essentially, it wants to create a shell window.
+
+18:37.040 --> 18:42.960
+If we just double click emacs dot exe. So emacs client W, uh, and run emacs,
+
+18:42.960 --> 18:49.440
+they're going to solve that problem. Um, uh, wrapping emacs and emacs client respectively.
+
+18:51.600 --> 19:00.320
+And, um, just, uh, all right. So let's, let's go ahead and do something. I'll, I'm going to
+
+19:00.320 --> 19:08.080
+take away the ticker here for a minute. And what you're not seeing is off stage. I am killing that
+
+19:08.080 --> 19:19.680
+so we don't get built in parallel. Um, so, um, so at this point I'm going to open up a shell and
+
+19:19.680 --> 19:24.240
+I'm going to start talking just a little bit about my local build environment, which we haven't
+
+19:24.240 --> 19:32.640
+gotten into. In fact, just to make that even easier, let's, um, let's just take a look at it
+
+19:32.640 --> 19:40.640
+a little bit. Probably the easiest spot is here.
+
+19:47.680 --> 19:55.280
+All right. So here we have the familiar windows, my computer interface. I have the G drive and the
+
+19:55.680 --> 20:07.200
+H drive, four terabyte drives, um, dedicated to my, um, really overblown emacs build process.
+
+20:08.160 --> 20:14.000
+Um, this just lets me be super lazy. There's no reason you need any massive amount of storage
+
+20:14.000 --> 20:22.080
+to do any of this. Um, inside here, and now I'll actually switch you back to the other screen.
+
+20:23.040 --> 20:26.560
+Um, we'll, we'll find,
+
+20:37.280 --> 20:46.480
+oops, sorry about that. I didn't take the time to label that one. Um, so here you can see
+
+20:46.480 --> 20:53.760
+the primary output that I'm looking at through this automated process. I come along, I look at
+
+20:53.760 --> 20:59.840
+the bug reports, or maybe I'm just restarting my computer and choosing what emacs version at random.
+
+20:59.840 --> 21:06.240
+And then in that case, I look at this modified date and I say, um, my config that I, you know,
+
+21:06.240 --> 21:11.120
+that I'm playing with right now is all set for emacs 30, or I'm testing the both and I'm
+
+21:11.120 --> 21:16.400
+relaunching both of these. Right. So for me, that starts by diving into the install folder,
+
+21:16.400 --> 21:22.720
+going into the bin folder, which looks exactly the way my automation leaves it. I then come in
+
+21:22.720 --> 21:34.320
+to run the run emacs and I create a shortcut, um, to it. So I'm a keyboard person. So that's
+
+21:34.320 --> 21:40.400
+usually done like this. And then I just know that the context menu is going to come up in the right
+
+21:40.400 --> 21:49.120
+place. So I'll come up and, um, possibly change the, change the shortcut, right.
+
+21:53.120 --> 22:01.280
+If I don't mess with it. Um, so here's where I'll add my minus Q, if that's kind of where
+
+22:01.280 --> 22:06.800
+my world was at, or it kind of depends on what I'm doing with these, which varies week to week.
+
+22:07.440 --> 22:12.000
+Um, so restarting my emacs, uh, involves doing the same thing, going to my desktop
+
+22:12.560 --> 22:23.200
+and where you'll find a number of emac shortcuts and, um, updating the shortcut in the same manner
+
+22:23.920 --> 22:28.000
+joint actually, maybe we'll just, let's go back there and just show it.
+
+22:28.000 --> 22:31.600
+So if we look at, for example, my ERC,
+
+22:31.760 --> 22:39.040
+you can see, it's going to be pointing at one of these clones and then it's going to
+
+22:39.760 --> 22:44.720
+maybe tell me that I want, it wants to be full screen. Nope, not currently. And then it might,
+
+22:44.720 --> 22:48.720
+uh, have some stuff in there about auto-loading at config and what
+
+22:48.720 --> 22:52.560
+connections I'm going to, some commands I've defined to start connections.
+
+22:53.280 --> 22:57.680
+All right. And sorry, I got a phone call. I was checking. It wasn't in an org, the org,
+
+22:57.680 --> 23:04.160
+not the other organizers giving me the hook. So, um, all right. So that's, that's probably
+
+23:04.160 --> 23:11.440
+enough on the local system. Let's get back to the, to, to building emacs. And now it hopefully makes
+
+23:11.440 --> 23:17.440
+a certain amount of sense when I say we're going to wander over to the H drive and, and, and, and,
+
+23:17.920 --> 23:22.560
+hopefully makes a certain amount of sense when I say we're going to wander over to the H drive
+
+23:22.560 --> 23:31.520
+and recreate the structure that, um, both my process sort of assumes and the scripts you'll
+
+23:31.520 --> 23:41.440
+find in the admin NT, uh, build disk folder in source used to assume. Those scripts are in need
+
+23:41.440 --> 23:49.440
+of some love. And in just a little bit, I'll be mentioning a build, uh, a, uh, a, a, a particular
+
+23:49.440 --> 23:54.000
+bug that you might want to pay attention to if you're interested in making a self-installer.
+
+23:54.800 --> 24:04.320
+All right. So, um, we're going to create, uh, an emacs build directory.
+
+24:04.320 --> 24:16.960
+And we've got a handy git clone stage, git clone command stage for ourself. That would work. Um,
+
+24:19.360 --> 24:26.160
+do not currently see anybody lobbying for that. So instead we will run the rather faster
+
+24:27.120 --> 24:36.080
+uh, W get command on Savannah, which is not pasted in here. Nice. Let's see if I can freehand it.
+
+24:36.080 --> 24:40.000
+Not going to do it. Uh,
+
+24:40.720 --> 24:41.840
+okay.
+
+24:52.000 --> 24:56.560
+I beg your pardon. I'm grabbing a URL from the internet.
+
+25:00.080 --> 25:06.960
+Uh, okay. Yeah, I can, I can honestly, I can freehand it, whatever. Okay. Sorry. I, uh,
+
+25:07.680 --> 25:13.200
+I didn't have that bookmarked in all handy. Like I thought I did. Um, so we'll just say
+
+25:13.200 --> 25:30.480
+ftp.gnu.org slash, uh, what is it? Pub emacs, emacs-29.1, uh, .org.gnu.org.exe.
+
+25:30.480 --> 25:47.040
+I really think I'd have this command sitting around. It makes me want to scrap the whole
+
+25:47.040 --> 25:54.720
+demo. I'm not going to lie. Okay. How am I doing? Um, I think at least 15 minutes. Um,
+
+25:54.720 --> 25:58.160
+but in the command that you were freehanding, should the pub be GNU instead?
+
+25:59.120 --> 26:01.680
+Oh, thanks. I'm sorry.
+
+26:07.440 --> 26:13.360
+There we go. Thank you. All right. And then we'll,
+
+26:17.760 --> 26:20.160
+and I'm not sure I provided commands for this either,
+
+26:20.720 --> 26:29.600
+but it is trivially easy to do. And while that happens, we'll get to move on a few slides.
+
+26:31.760 --> 26:38.000
+Um, the configure script I'm not talking about in a lot of detail, but I do want to mention that the
+
+26:38.000 --> 26:44.720
+GNU binaries are provided with native, uh, compilation enabled. That's the feature that
+
+26:44.800 --> 26:55.360
+uses gcc lib gcc get on windows. If available, that lib gcc get will be used. Um, but when,
+
+26:55.360 --> 27:03.200
+but, uh, if, if, uh, emacs has that feature, then it will take by compile, uh, native code and,
+
+27:03.200 --> 27:10.880
+uh, asynchronously compile that as needed, uh, with the ahead of time feature. We're going to
+
+27:10.880 --> 27:15.360
+do as much of that ahead of time. And for folks that are consuming the windows binary, the
+
+27:15.360 --> 27:21.360
+thinking goes that they might not have my assist too. They might not have lib gcc jet. They might
+
+27:21.360 --> 27:28.560
+be happy that they're enabled in a, you know, a lot of time running emacs on their local environments
+
+27:30.400 --> 27:39.120
+at all, you know, in a, maybe a lockdown, uh, corporate context. So aside that, um, there's
+
+27:39.120 --> 27:45.120
+your first glimpse at the configure, um, program that we're going to run in a moment. In fact,
+
+27:45.120 --> 27:52.160
+I'm going to go as far as putting it on the clipboard. Um, really just looking at this,
+
+27:52.160 --> 27:57.120
+the AOT flag is the one I'd call attention to, but it's worth understanding that windows doesn't
+
+27:57.120 --> 28:02.000
+provide a D bus capability. So windows native program isn't going to be able to depend on D
+
+28:02.000 --> 28:07.600
+bus. We're going to, we're going to explicitly ask that that be left out. I think that's actually
+
+28:07.600 --> 28:12.080
+optional and it's documentation. I think the configure program is smart enough to know that
+
+28:12.080 --> 28:20.080
+we don't want D bus on windows. Um, otherwise we tend to compile with things. Um, there there's
+
+28:20.080 --> 28:26.320
+missing documentation. We could say the, uh, all of the libraries are treated in the way I mentioned
+
+28:26.320 --> 28:34.880
+in that, um, JPEG support will be available as long as the JPEG is, is available in our environment
+
+28:34.880 --> 28:40.320
+and configure script certainly notices that, um, the GNU provided binaries are provided with
+
+28:40.320 --> 28:47.280
+minus O2. And that's also my default personally on windows. Um, however, and I'm going to skip
+
+28:47.280 --> 28:59.680
+this since I mentioned it, um, mentioned, uh, and, uh, um, so I guess I'll say, um, you can,
+
+28:59.680 --> 29:06.560
+um, say with the, it's worth knowing that you, if you're not one reason that, that you're building
+
+29:06.560 --> 29:11.200
+might be because you want to turn off native compilation for whatever reason. If you have
+
+29:11.200 --> 29:16.640
+low juices, you get, get, but don't want Emacs to use it. Uh, especially as that default looks like
+
+29:16.640 --> 29:26.480
+it could be changing with Emacs 30. Um, the, uh, the debug configuration, um, this is, this is the,
+
+29:26.480 --> 29:33.200
+uh, kind of, uh, what, what I'm currently using this on commentary, uh, I've seen on the next
+
+29:33.200 --> 29:45.280
+development list. Let's check on our checkout and see if we can't get a build running. Um,
+
+29:45.280 --> 29:51.440
+this is a release build, so I won't be starting with, uh, so we'll start by hopping into its
+
+29:51.440 --> 30:14.080
+directory and we, um, we have, uh, but not. Okay. So that tells us we're going to run
+
+30:14.640 --> 30:23.440
+our configure program, but we don't need to run a config IC. So,
+
+30:31.280 --> 30:34.320
+so let's get that going and, uh,
+
+30:36.000 --> 30:41.360
+hopefully that's showing through just enough to be fun, not too much to be distracting.
+
+30:45.040 --> 30:55.760
+Um, the, uh, the unoptimized, uh, uh, um, please report issues. If your Emacs is crashing,
+
+30:55.760 --> 31:01.200
+uh, to the Emacs development list, not to me personally. Um, although you are of course,
+
+31:01.200 --> 31:06.960
+welcome to copy me. Um, if you especially I'm subscribed to that list, so I get all the mail.
+
+31:06.960 --> 31:14.000
+So I don't mind being copied. Uh, and, uh, as well, if you think it's, uh,
+
+31:15.040 --> 31:20.160
+you know, related to packaging, that actually makes sense or windows related to even, and,
+
+31:20.160 --> 31:25.120
+uh, it can be tested with an extra snapshot that should be uploaded to the canoe alpha side.
+
+31:25.120 --> 31:31.600
+I could look at that if I have time. There's with the configure script to make file for
+
+31:32.160 --> 31:39.840
+Emacs is really, really complicated. If time permits, which I'm now confident it will not,
+
+31:39.840 --> 31:44.240
+we will look at, uh, make file that I tried writing that, uh, orchestrates this whole
+
+31:44.240 --> 31:52.160
+process that I'm talking about. Um, as, uh, let's see. So the build, uh, build process,
+
+31:52.160 --> 32:03.120
+I run my builds with, uh, explosively specifying the max CPU, uh, with minus J, but minus B one
+
+32:03.120 --> 32:08.320
+to get the full build, uh, full log into your recipes. That is probably the magic thing.
+
+32:09.040 --> 32:12.560
+Matt, um, shouldn't to understand what, uh,
+
+32:16.000 --> 32:23.600
+or that, uh, that, that, uh, that I'm glad that I know, uh, as I'm trying to write my automations,
+
+32:26.960 --> 32:36.080
+uh, the, um, so I call that out here, the binary, uh, releases. Um, okay. So in this section,
+
+32:36.080 --> 32:41.120
+we're going to start to get into what are all those files. And there's a bug report related to
+
+32:41.120 --> 32:46.640
+that, but I didn't get into here. So, um, that's kind of to the point about the less said about
+
+32:46.640 --> 32:50.800
+this, the better, uh, that's my explanation for stepping through some of these slides.
+
+32:50.800 --> 32:58.240
+Uh, of course we'll share them all, uh, uh, hopefully by the time that this video is published.
+
+32:58.960 --> 33:06.640
+Oh, I mentioned, um, I may have mentioned already freshly installed, but, uh, fully installed. Uh,
+
+33:06.640 --> 33:15.200
+the, the, the key distinction here is that, uh, Emacs is distributed in the binary form for Windows
+
+33:15.200 --> 33:21.600
+with some DLL files that actually come from the mysys2 project. There's an implication there to
+
+33:21.760 --> 33:26.160
+there's an implication there to GCC that I definitely want to get to it talking about.
+
+33:28.080 --> 33:35.840
+Um, so freshly installed means we haven't copied those binaries from the mysys2, uh,
+
+33:35.840 --> 33:45.360
+installation into the Emacs, uh, installation. Uh, and then, uh, when we re-archived that
+
+33:45.360 --> 33:48.640
+local Emacs installation, that's how we're going to create the full zip.
+
+33:48.640 --> 33:54.160
+So hopefully that actually is a pretty good summary of what all those files are. Um, but
+
+33:54.160 --> 34:00.320
+there are readme files, uh, on the FTP that do a pretty good job, um, if you can dig enough to find
+
+34:00.320 --> 34:11.120
+one and my apologies for, uh, tardiness getting a new version on that posted. Um, the Emacs, uh,
+
+34:11.120 --> 34:17.040
+so those dependencies, uh, are listed within Emacs itself. And as we'll just talk about in a moment,
+
+34:17.040 --> 34:24.240
+there's a way, uh, that we can use, we can access that when we collect them in order to meet, uh,
+
+34:24.240 --> 34:31.840
+the GCC requirement that is essentially to include, um, include the sources for the,
+
+34:31.840 --> 34:41.200
+for those binaries, the things that were compiled against. Um, the, uh, so, so here we go,
+
+34:41.200 --> 34:45.280
+we're, we're into the build process. Let's just take a look and see if configure it got done.
+
+34:45.280 --> 34:52.240
+It sure did. And now we can see a table of, of hopefully good, but good and bad news, um,
+
+34:52.240 --> 34:57.840
+and potential, um, where we're learning that we're using the pdumper strategy and any number of other
+
+34:57.840 --> 35:04.320
+things that we might be messing with as our motivation for, for building ourselves on Emacs.
+
+35:04.320 --> 35:12.560
+Um, again, this table represents, uh, what you'll, what, what, what it looks like for me when I'm
+
+35:12.560 --> 35:22.720
+building for the GNU distributed binaries. All right. So, um, kind of moving, moving as quickly
+
+35:22.720 --> 35:31.200
+as I can here. I'm at 40 after, I believe that's the five minute mark. So, um, having just succeeded
+
+35:31.200 --> 35:37.040
+in, in configuring Emacs, I don't think we're going to build it. Uh, uh, I don't think we're
+
+35:37.040 --> 35:42.720
+going to actually get to running make install. Um, but I have it sitting here on my keyboard
+
+35:43.280 --> 35:54.320
+or clipboard, assuming that we will, right? No. Oh, wow. I think I've managed to confuse this.
+
+35:54.320 --> 36:06.240
+All right. So for me, that looks simply like, uh, make, uh, V equals one install, uh,
+
+36:08.160 --> 36:11.040
+prefix equals, uh,
+
+36:18.400 --> 36:19.920
+and we can at least get it kicked off.
+
+36:20.640 --> 36:27.680
+And that can, that command is just, uh, just is no, no different than I showed on the slide where
+
+36:27.680 --> 36:32.160
+I, where I gave it, uh, wasn't planning to stop and explain it. I was just planning to paste it.
+
+36:33.360 --> 36:38.640
+So, so, so again, recapping the rest of the process here and maybe actually making it,
+
+36:38.640 --> 36:44.320
+if you can believe it or not, through the rest of these slides, um, we, to, to, to create the
+
+36:44.800 --> 36:49.600
+full set of binaries, we're going to need a no dependent, no depths archive. That's without the
+
+36:49.600 --> 36:57.760
+mysys2, uh, deal provided DLLs, just the things that we compile as part of making Emacs. Um,
+
+37:00.320 --> 37:07.840
+the, uh, the build depths zip script is provided with the source distribution is your tool for,
+
+37:07.840 --> 37:11.760
+uh, meeting the GPL requirements, right? Source as mentioned before,
+
+37:12.640 --> 37:18.560
+um, there is a second bug that I did, uh, include some more information on in my notes already.
+
+37:19.680 --> 37:25.600
+Um, that, uh, that gets into the details of this other feature I alluded to.
+
+37:26.480 --> 37:35.120
+Um, I'll just skip into that. Um, we, we can, with, with, uh, with a, an appropriate version
+
+37:35.680 --> 37:42.240
+of that, which you may need a patch, uh, to, to have, you can list out the dependencies
+
+37:42.240 --> 37:47.200
+and, and that version as well. Can consider the dependencies of the Emacs binary versus
+
+37:47.200 --> 37:51.680
+the hard-coded list you might find, depending on when you look at this file in the source tree.
+
+37:53.680 --> 38:01.360
+The diff, um, so I also have a hack here that, uh, works around the absolute requirement to
+
+38:01.600 --> 38:18.320
+run this with the mysys2 and not the minGW64 script. Um, once we've made that zip file that
+
+38:18.320 --> 38:25.360
+contain that's, that's our installed Emacs without the DLLs provided by mysys2, we'll then unpack
+
+38:25.360 --> 38:30.960
+the dependencies that were created by that Python script we just talked about from the Emacs source
+
+38:30.960 --> 38:38.080
+tree. At that point, once those are unpacked, we can now make what's called the full installer,
+
+38:38.080 --> 38:42.800
+or sometimes I might call it the unqualified installer, because it's just going to be called
+
+38:42.800 --> 38:54.800
+Emacs29.1.zip. Um, and that, uh, that file, which, which creates the, the, the, the, the,
+
+38:54.800 --> 39:02.640
+which creates the archive, uh, that, uh, that, that, that file is exactly the same,
+
+39:02.640 --> 39:08.400
+plus the, uh, the dependencies that we unzipped in the bin folder of the installed Emacs.
+
+39:09.680 --> 39:14.480
+The, uh, executable self-installer, which I would love to have more time to talk about.
+
+39:14.480 --> 39:18.720
+I gave a few pointers here on the hard part of running it. Most importantly,
+
+39:19.680 --> 39:26.640
+if I've installed in any kind of funny looking name, I end up renaming it to like Emacs-29.1
+
+39:26.640 --> 39:35.200
+or Emacs-29. or 30.0.50 or whatever. And I just renamed that installed Emacs folder.
+
+39:35.200 --> 39:39.680
+And then I go to the root of wherever I created that, the parent directory above it.
+
+39:40.320 --> 39:46.560
+And that's where I make my copy of the Emacs NSI, um, the, the NSIS script.
+
+39:47.520 --> 39:55.600
+And, uh, that's also where I, and then, um, then from that parent directory, I execute,
+
+39:55.600 --> 40:02.560
+uh, making sys, uh, here. I, as mentioned, um, I, I can get away with this because I have it
+
+40:02.560 --> 40:07.520
+on my path and it's my recollection. I think I tested this and couldn't reproduce the problem.
+
+40:07.520 --> 40:11.200
+So I didn't document it here, but I've had some problems with running this
+
+40:11.200 --> 40:20.400
+when, uh, when NSIS wasn't on my path. The, uh, the, the, the final step here
+
+40:20.400 --> 40:27.600
+and the last, the GPL requirement is to include all the sources, except when I'm doing a release
+
+40:27.600 --> 40:34.320
+build, I always do this. Um, and that's the new practice when making Snapchat binaries is to go
+
+40:34.320 --> 40:39.840
+ahead and include the sources, even though we might have the specific revision number, um,
+
+40:39.840 --> 40:46.800
+our thinking is we want absolute clarity, um, that, that somebody, uh, can say, okay,
+
+40:46.800 --> 40:51.200
+this binary did this thing, send me the source for it. I'm going to go take that into my own
+
+40:51.200 --> 40:56.800
+open source, or yeah, maybe they would, the jerks, um, into my own open source project.
+
+40:56.880 --> 41:03.360
+And, um, you know, off they go, uh, and that needs to be possible.
+
+41:04.800 --> 41:12.480
+Um, so, um, beyond that, the rest of this is, is really detailed that you find covered in the GNU
+
+41:12.480 --> 41:19.520
+maintainers manual. Um, this is the, the current set of Windows binaries that, um, it's busily
+
+41:19.520 --> 41:29.040
+working on creating a like for like a mirror to behind the scenes here is called a 29.1 underscore
+
+41:29.040 --> 41:36.080
+two. Um, and I have a lot of automation, uh, available on this site. So at this point,
+
+41:36.080 --> 41:45.200
+I'm just, I think I'm only a minute, 40 seconds over. I'm gonna invite my, uh, co-organizers
+
+41:45.200 --> 41:49.760
+back onto the call or any volunteers that want to jump in and anybody, if there's people on the
+
+41:49.760 --> 41:57.440
+BBB, I'd be happy to take questions. If there aren't, um, I have a screen full of, uh, the
+
+41:57.440 --> 42:04.080
+automation stuff ready to go as a kind of a second ring in my circus today. So if you're still with
+
+42:04.080 --> 42:08.640
+me, thanks a lot for joining me. And I really enjoyed this talk. Uh, if this is where we're
+
+42:08.640 --> 42:14.560
+going to close it out, I don't know where we're at for schedule today. Thanks a lot for a great
+
+42:14.560 --> 42:20.880
+talk, Corwin. Um, in terms of like schedule, yeah, you went over a little bit for the official,
+
+42:20.880 --> 42:26.880
+like, um, schedule or time of your talk, but I think, uh, we actually have maybe like six or
+
+42:26.880 --> 42:32.640
+seven more minutes, um, here on stream for, um, questions and such, if folks have questions,
+
+42:32.640 --> 42:38.320
+or if you want to like quickly maybe show one or two more things. Um, but I think the hard stuff
+
+42:38.320 --> 42:43.520
+is about like maybe 10 minutes ish for now. And then we'll have to rush over to, um, uh, for the
+
+42:43.520 --> 42:55.520
+closing remarks. So, well, that sounds awesome. Okay. So I'm looking at the, the dev chat. Uh,
+
+42:55.520 --> 43:01.040
+I see a comment on cross-compiling the emacs, but I'm sorry, I'm looking at IRC primarily, but,
+
+43:01.040 --> 43:08.080
+uh, feel free to jump in if you're on, uh, BBB with me, or, uh, uh, if, if you put something on
+
+43:08.160 --> 43:16.400
+the pad, I'm sure, uh, we'll see it between the two of us, uh, over here. Okay. So cross-compiling
+
+43:16.400 --> 43:20.640
+emacs for Serenity. I haven't tried really any cross-compiling. I think that would be very
+
+43:20.640 --> 43:28.240
+interesting. I would most likely focus on doing exactly what I do on a GNU system, completely
+
+43:28.240 --> 43:35.760
+ditching. Um, so I guess with my, my remaining time, rather than walking through code, um, for
+
+43:35.760 --> 43:42.080
+my automation, which can be another talk, if in fact there's an interest in that, um, I want to,
+
+43:42.080 --> 43:48.480
+I guess, say a couple of words about the non-free operating system that I'm using here. I did my
+
+43:48.480 --> 43:58.880
+best to use no non-free software other than the, uh, the operating system that is the context for
+
+43:58.880 --> 44:07.920
+this talk in preparing this talk for you. I personally have a lot more, uh, time and energy,
+
+44:07.920 --> 44:15.840
+I have to say, invested in proprietary tools for doing a lot of the things that, that go into this.
+
+44:15.840 --> 44:22.000
+So I really respect the work of people that pull that off. Um, I'm sorry I didn't get my pre-recorded
+
+44:22.000 --> 44:30.320
+stuff, uh, kind of in order for everybody, but I just want to stress, like, uh, it is all absolutely
+
+44:30.320 --> 44:35.520
+possible and just hats off to everybody that, that used, uh, entirely free software to get their,
+
+44:36.240 --> 44:43.360
+get their recordings done in time. Um, and what you did see, unless it was provided by the operating
+
+44:43.360 --> 44:49.200
+system in my presentation today, was all, uh, free software with the debatable exception of
+
+44:49.200 --> 44:56.160
+NSYS, which styles itself as open source, maybe for, uh, marketing reasons.
+
+44:56.720 --> 45:00.400
+Okay, uh, in any case, uh, certainly we can get all that source.
+
+45:08.080 --> 45:14.640
+Thanks for the note, Corin. It's good to know that, uh, building or, uh, yeah, doing the build of Emacs
+
+45:14.720 --> 45:20.880
+for Windows on Windows can be done, uh, using only free software. Yeah, absolutely.
+
+45:23.440 --> 45:29.520
+Probably the right closing note, right? Um, I just, uh, thanks again to the organizers for
+
+45:29.520 --> 45:33.920
+bearing with me. And like, every time I was like, you guys, I'm terrible at this. They're just like,
+
+45:33.920 --> 45:38.240
+no, you're doing fine. Keep going. You did a great job live last time. You can do it live,
+
+45:38.240 --> 45:43.040
+you know, and, and saying all the right things to just, uh, encourage me to come back,
+
+45:43.920 --> 45:46.160
+uh, this year and every year.
+
+45:49.760 --> 45:53.520
+Well, as I said before, we were very lucky to have you and the rest of the team, of course,
+
+45:53.520 --> 45:59.520
+as well. And, um, goes without saying, but all the speakers and the audience, the participants as
+
+45:59.520 --> 46:14.240
+well. So, um, so, uh, are we, we're still live over here that, you know, you know, me, I'm the
+
+46:14.240 --> 46:22.800
+Mike Hogg that I am. I can't resist, um, throwing, throwing up another screen here. And, uh, in fact,
+
+46:22.800 --> 46:32.160
+let's go ahead and go back to our, to our crawler, right? And I'll bring back our build
+
+46:32.160 --> 46:40.480
+if it finishes and maybe we'll show making the installer as well. Um, uh, but I have the CPU
+
+46:40.480 --> 46:49.680
+account turned down a little bit here. Uh, note, I didn't specify minus J here. Um, so, uh, over
+
+46:49.680 --> 46:54.000
+here is my automation. Uh, in case you do want to take a look, I can at least provide the
+
+46:54.000 --> 46:59.760
+orientation of what you're looking at. Scrape log is probably my first thing I want to show off.
+
+46:59.760 --> 47:08.400
+Um, it's not beautiful, but this works, uh, pretty well for me to get a sense of something might
+
+47:08.400 --> 47:14.640
+have changed in terms of how many warnings or errors are happening when I build Emacs. So I
+
+47:14.720 --> 47:18.640
+have this whole automation going on and I frequently want to answer the question,
+
+47:19.280 --> 47:25.600
+you know, what's the change rate in, uh, warnings or what have you. So this kind of gives me a count
+
+47:26.400 --> 47:36.880
+of that. Um, so from there, uh, accrued CI is the script we're watching run in the other pane.
+
+47:37.840 --> 47:44.960
+Um, we can see it's, uh, just starting to do its thing again.
+
+47:48.800 --> 47:56.960
+And, uh, the make file I mentioned, this is a top-down rewrite of everything else that I've done.
+
+47:57.040 --> 48:08.640
+It has some bugs right now. Um, the, uh, the build distribution is the main script that I use for my
+
+48:08.640 --> 48:17.120
+personal builds. This is what is run by the crude CI script. Uh, it has a fun tie-in to this, uh,
+
+48:17.120 --> 48:23.200
+web interface here, um, where we can, you don't need the port number when you go to it. That's
+
+48:23.200 --> 48:33.680
+just if I'm going to post. Um, the, uh, blah, blah, blah, blah, blah. This, this script is
+
+48:33.680 --> 48:39.120
+really long and complicated and probably needs some diving into, but you can see that, um, one
+
+48:39.120 --> 48:43.760
+of the complexities I have to deal with is that I'm going to need something in the format of an
+
+48:43.840 --> 48:53.920
+emacs-version for strategic, um, nsys reasons. So, uh, it takes care of kind of every complexity
+
+48:54.480 --> 49:03.120
+that I mentioned today in some respects, um, as does the make file. Build release is, um, another
+
+49:03.120 --> 49:11.360
+fairly useful incarnation of this. This is just focused on the release process, and this does
+
+49:11.360 --> 49:18.800
+work, uh, for example, to create the, the, the, you know, like, like, well, I could like, uh,
+
+49:18.800 --> 49:25.600
+for like files as far as I can tell. So what are currently posted for emacs 29.1 and the release
+
+49:25.600 --> 49:32.400
+candidate. Um, so I'll probably use that next time. And if it's still like, for like, I'll
+
+49:32.400 --> 49:40.960
+probably post the ones that came from this. Um, uh, building, uh, TreeSitter, I make some DLLs
+
+49:40.960 --> 49:47.120
+there. If you're looking for hints on how to get going or just simply, uh, a huge long list
+
+49:47.120 --> 49:55.840
+of Git repositories that make grammars, you can use that is here as well. Um, finally, I mentioned
+
+49:55.840 --> 50:04.800
+I have a, um, I have a website where I publish my own personal snapshots that I make, uh, that
+
+50:04.800 --> 50:11.680
+folder full of install directories, but all of the usual GNU style binary distributables, including
+
+50:11.680 --> 50:22.320
+the source code and the source code for the dependencies. Um, the, uh, so this program is
+
+50:22.320 --> 50:27.680
+another one of those complicated find commands and therefore potentially the most useful thing
+
+50:27.680 --> 50:34.960
+in here to take to you. Um, and here I'm deleting, uh, binaries older than 17 years. Uh, everything
+
+50:34.960 --> 50:42.240
+except the, uh, node apps file and the sources of it you'll find on my website. Currently those
+
+50:42.240 --> 50:48.800
+indefinitely, I'll probably roll out 120 days or something, um, for those eventually.
+
+50:53.600 --> 51:00.400
+Oh, uh, I can talk about this one even. Um, the, uh, so here you'll see the two branches that I'm
+
+51:00.400 --> 51:06.560
+tracking. The job of this script is, uh, this runs on the website. I call it with a, like a remote
+
+51:06.560 --> 51:15.920
+rsync, uh, type, uh, or an SSA remote, uh, SSH command. Um, and right after the rsync,
+
+51:15.920 --> 51:26.080
+rsyncing up any new Emacs that I built. And, uh, it's, uh, it's job is to update my fancy
+
+51:26.080 --> 51:34.880
+directory indexing. So let's look at Corwin's website. Here's my Emacs 29 folder.
+
+51:37.360 --> 51:50.400
+We have about two more minutes, Corwin. Yeah. It'll take that entire two minutes to, uh,
+
+51:50.400 --> 51:56.400
+load this directory because I am, because I have not yet ever pruned any of these dang binaries.
+
+51:56.400 --> 52:02.800
+So every version of, uh, Emacs 29 that I've ever made for myself is probably here. Nice.
+
+52:03.600 --> 52:08.480
+Uh, I strongly recommend that you bookmark this folder if you're using these for something and
+
+52:08.480 --> 52:14.240
+you always want the latest. Um, so here, this particular, uh, latest 29, Emacs 29 latest,
+
+52:14.240 --> 52:22.560
+or simply replace the 29 with 30 to get those. Uh, alas, no, no such luck for TreeSetter.
+
+52:23.120 --> 52:26.320
+But if we look at, uh, that,
+
+52:36.400 --> 52:40.320
+live this long without making a typo. Now look at me.
+
+52:40.320 --> 52:46.080
+Uh-oh. Oh.
+
+52:51.520 --> 52:56.720
+So here, um, you know, we can see the icon application and so on, even in the TreeSetter
+
+52:56.720 --> 53:01.440
+folder. This is all I'm talking about, about the fanciness that's set up by that other script that
+
+53:02.400 --> 53:06.880
+I'm showing over here and run after each time I run the upload. It just
+
+53:07.840 --> 53:12.640
+looks to see if anything's new and add some lines to the .htaccess file.
+
+53:15.840 --> 53:22.400
+Um, I'm particularly proud of this one. I'm not going to lie. Um, linking out to each,
+
+53:22.400 --> 53:26.560
+each, uh, project that we're using, letting us know the commit version,
+
+53:26.560 --> 53:34.320
+and then, uh, for the DLLs, quick link out to the log and the signature file for this DLL. Um,
+
+53:36.960 --> 53:46.160
+I find that a lot, just a lot more readable than, uh, listing them all out individually. And I'd
+
+53:46.160 --> 53:53.360
+love to do something like that on the GNU site. So I'm, I think we've got to be out of time by
+
+53:53.360 --> 53:59.600
+now. I've just got to say, hey, thanks again for having me, uh, for those that, uh, watch the talk
+
+53:59.600 --> 54:04.400
+either live or after the conference. Uh, appreciate everyone's support to get me to
+
+54:04.400 --> 54:10.320
+the point where I will be able to, uh, to do this, this, this cool volunteer task,
+
+54:10.320 --> 54:14.160
+uh, which is fun and easy to do and reach out to me if you're interested in helping with it.
+
+54:18.960 --> 54:24.320
+Well, awesome. Thanks a lot for the awesome talk, Corbyn. And, uh, of course, as a fellow
+
+54:24.320 --> 54:29.920
+core, uh, core organizer, uh, for all, for all that you do, um, in and around Emacs Conf
+
+54:29.920 --> 54:33.280
+and of course for, uh, GNU Emacs as well, it's much appreciated.
+
+54:36.160 --> 54:43.200
+Big, big words from coming from you, my friend. Um, thanks for the kind words.
+
+54:45.040 --> 54:49.840
+Cheers. My pleasure. All right. And with that, I think we're gonna, uh, wrap up the dev, uh,
+
+54:49.840 --> 54:55.360
+track here and, uh, we'll be with you again shortly in a few minutes on the gen stream,
+
+54:55.360 --> 55:00.400
+the gen track for the closing remarks for today, um, only for today, because we're going to be
+
+55:00.400 --> 55:07.520
+back tomorrow again as well. So don't go anywhere and, uh, see you on the gen track in a bit.
+
+55:25.920 --> 55:32.720
+Oh my God, I did it. We got done within the time. You're my hero. Um, and thank you so
+
+55:32.720 --> 55:41.520
+much for just keeping me honest there and, uh, like helping me keep my eye on the time and such.
+
+55:41.520 --> 55:53.680
+You have to look at the recording and see whether you feel like doing it again.
+
+55:56.160 --> 55:59.520
+I'm sorry. I had my sound screwed up and I'm sorry if I talked over somebody,
+
+55:59.520 --> 56:01.680
+I couldn't hear anything on mumble until this very moment.
+
+56:03.520 --> 56:08.960
+Oh, uh, because he's your webcam for it. Um, like as a, like a virtual webcam thingy,
+
+56:09.440 --> 56:15.760
+it was low res, especially when things are changing as you're scrolling around. So we'll
+
+56:15.760 --> 56:19.920
+see what kind of recording we can recover from it. And then you can decide whether you maybe
+
+56:19.920 --> 56:26.480
+want to clean it up with like screenshots. I recorded on this end too. We shouldn't have
+
+56:26.480 --> 56:30.720
+that problem with my recording. Thank you. Thank you. Thank you. I think we're still live on the
+
+56:30.720 --> 56:42.240
+dev stream. Someone could, uh, take that off. Oh, yes. Because, uh, I'll, I'll set it to rebroadcast.
+
+56:45.520 --> 56:50.640
+Yeah. I love doing that for the closing remarks. That's a fine tradition
+
+56:52.000 --> 56:58.480
+or it's a tradition now. Cause I'm pretty sure this means we've done it twice.
+
+57:01.680 --> 57:07.360
+I once heard that, you know, uh, as a fan-ish meaning like a fan-ish is a term of endearment
+
+57:07.360 --> 57:12.240
+for a science fiction fan to another. We say we're, we're fans or things we do are fan-ish and
+
+57:12.800 --> 57:18.960
+a fan-ish tradition then is if you do it three times, it's tradition, but we're on a budget here.
+
+57:19.680 --> 57:31.600
+So, all right. I think we should, um, head over to mumble and talk on mumble. Um, and just decide
+
+57:31.600 --> 57:36.240
+and see like which big blue button room we're going to be in for closing. Okay. So we're clear
+
+57:36.240 --> 57:39.600
+on BBB here? Yep. I think so.
+
diff --git a/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt
new file mode 100644
index 00000000..d95d4ea7
--- /dev/null
+++ b/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt
@@ -0,0 +1,2345 @@
+WEBVTT
+
+00:00.000 --> 00:08.480
+Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and welcome to uh
+
+00:11.440 --> 00:13.760
+Welcome to my talk i'm a little distracted here
+
+00:13.760 --> 00:20.080
+I had a friend who came over and just brought me a whole bunch of peanut butter cups homemade peanut butter cups
+
+00:20.080 --> 00:22.080
+Maybe i'll show those off. Uh
+
+00:22.320 --> 00:23.360
+later
+
+00:23.360 --> 00:26.480
+Okay, what okay here, uh, put it right there
+
+00:30.960 --> 00:32.960
+All good stuff
+
+00:33.920 --> 00:40.800
+Okay, so i'm going to uh get over to my planned uh stuff i'm sharing here
+
+00:41.340 --> 00:42.880
+hopefully
+
+00:42.880 --> 00:49.360
+Uh, and and we'll jump jump right in because i'm gonna need as much time as I can possibly have today
+
+00:49.440 --> 00:53.680
+thanks so much for uh joining me for emacs conference and for
+
+00:54.620 --> 00:56.480
+especially for
+
+00:56.480 --> 00:57.600
+um
+
+00:57.600 --> 01:02.960
+all of you who who participated, you know in the discussions contributing talks and
+
+01:03.520 --> 01:09.920
+um, you know, uh, you know, including running the copy the the and it's just so much fun to be here, um
+
+01:11.040 --> 01:15.840
+I guess while i'm standing here and and saying stuff that's that i'm gonna have to
+
+01:16.620 --> 01:19.680
+transcribe because I didn't uh prepare a
+
+01:20.560 --> 01:22.080
+recorded version
+
+01:22.080 --> 01:27.920
+Uh, I had a lot of trouble trimming this down so I can solve that problem by just talking a lot at the beginning
+
+01:28.960 --> 01:30.960
+about other stuff, um
+
+01:33.200 --> 01:36.880
+So in addition to the thanks I just want to say thanks also to the
+
+01:37.120 --> 01:43.040
+Folks on the development list that helped me kind of come up to speed on this. I won't make a big list here. But
+
+01:43.760 --> 01:45.120
+um
+
+01:45.120 --> 01:48.560
+And and for all that i've learned from my previous conferences
+
+01:48.640 --> 01:52.880
+It's just I can't stress enough what a great opportunity volunteering for
+
+01:53.520 --> 01:55.520
+uh free software related things are
+
+01:55.920 --> 02:00.480
+Uh as a way to get involved people will just totally teach you how to be helpful and i'm loving it
+
+02:00.720 --> 02:02.720
+Sasha can you please maximize?
+
+02:02.880 --> 02:04.880
+Hold on
+
+02:14.160 --> 02:17.680
+I can preview the stream, but it's not super easy right now
+
+02:17.760 --> 02:20.240
+I got all my screens kind of dedicated to other stuff
+
+02:20.400 --> 02:24.400
+so should I pause for a second before I get into the slides because there's
+
+02:24.960 --> 02:27.760
+There they'll be hard to see if i'm not full screen
+
+02:28.640 --> 02:36.160
+Yeah, yeah, okay, well i'll keep ad-libbing then because I just have a million, uh things I can say, um
+
+02:37.520 --> 02:43.280
+Uh, so, uh, let me just quickly talk, uh things that aren't in here. Um,
+
+02:43.840 --> 02:50.320
+I'm going to mention the mysis2.org and the that project which provides a port
+
+02:51.360 --> 02:53.360
+of the GNU
+
+02:53.440 --> 02:57.680
+Of uh glibc and a lot of GNU
+
+02:58.640 --> 03:00.640
+and other free software
+
+03:01.280 --> 03:03.280
+um, so
+
+03:03.280 --> 03:07.760
+Uh, I don't pushing a room to uh a dvd room to stefan
+
+03:12.080 --> 03:18.660
+All right, so i'm gonna take mumble out of my uh, pardon me folks just gonna take mumble out of my speakers here
+
+03:19.620 --> 03:21.620
+Okay
+
+03:22.820 --> 03:30.040
+Okay, in fact we'll take the speakers out of play entirely and i'll just switch to some headphones
+
+03:33.620 --> 03:35.140
+All right, so
+
+03:35.140 --> 03:36.820
+Gorman you're good to go
+
+03:36.820 --> 03:43.140
+Perfect. What an amazing amount of time. All right. So thanks a lot. Uh today i've got a jam-packed talk
+
+03:43.860 --> 03:46.260
+Um, i've i've done my best to make
+
+03:46.820 --> 03:52.260
+To make this not too overwhelming, but overall we're going to try to try to actually build
+
+03:52.900 --> 03:57.700
+Um emacs while we're talking today and we might actually build several emacs
+
+03:58.100 --> 04:00.100
+Uh, so let's take a look at that real quick
+
+04:00.420 --> 04:04.900
+Um, so over here we have a screen where I am
+
+04:05.700 --> 04:08.260
+Just once a minute looking. Uh
+
+04:09.120 --> 04:16.840
+Indirectly at whether there have been any pushes, uh upstream to either the emacs 29 or emacs 30 branches
+
+04:17.540 --> 04:19.280
+so i've
+
+04:19.280 --> 04:22.260
+Arranged for us to sort of keep an eye on that
+
+04:22.820 --> 04:30.020
+Um while we talk and you know, maybe that's that's one thing that we'll do and then additionally we'll probably
+
+04:30.660 --> 04:36.180
+Fire up a shell. This is the mysis 2 environment that I talked about before
+
+04:36.660 --> 04:39.460
+And we'll probably create some directories and things
+
+04:40.020 --> 04:46.420
+But before we get into all that let's let's give some some context. I've been doing my best to try to
+
+04:47.060 --> 04:50.420
+Uh, make sure all this information is on the emacs wiki as well
+
+04:51.060 --> 04:55.860
+So, uh, sorry, as I said, I got a little caught off guard. So i'm moving my foot pedals
+
+04:56.820 --> 04:58.820
+To the float back to the floor here
+
+05:00.340 --> 05:04.820
+And I should be able to advance slides here. All right, so
+
+05:05.700 --> 05:07.700
+um
+
+05:07.860 --> 05:13.540
+I kind of provided some special definitions for things i'm going to kind of level set with those
+
+05:14.740 --> 05:16.740
+the uh
+
+05:17.460 --> 05:24.580
+Um when I say a binary release i'm talking about some some i'm talking about emacs for windows as
+
+05:25.060 --> 05:29.780
+Just ready to run out of its folder or in whatever similar form
+
+05:30.340 --> 05:35.620
+The when I say a build i'm talking about kind of a process of doing that
+
+05:36.420 --> 05:40.760
+Um when emacs.get of course, that's the upstream hosted by gnu savannah
+
+05:41.620 --> 05:47.140
+The emacs release is a tarball created from that the sources
+
+05:48.580 --> 05:53.940
+For um emacs are going to be one of those two things
+
+05:54.740 --> 06:01.460
+Um very specifically so i'm not going to talk about patches patching there's some implications there perhaps we'll get into it
+
+06:02.660 --> 06:03.620
+uh
+
+06:03.620 --> 06:08.820
+So a snapshot is when I build from anything other than a release source
+
+06:09.860 --> 06:11.860
+uh a tarball
+
+06:11.860 --> 06:15.320
+um, just if I if I say that i'm talking specifically
+
+06:16.340 --> 06:18.340
+about the uh, the xz
+
+06:18.980 --> 06:22.100
+Version of the file as as a technical point
+
+06:22.900 --> 06:29.060
+Um, so that may come up. All right, nothing else I think up my sleeve. Um
+
+06:29.780 --> 06:30.820
+the
+
+06:30.820 --> 06:36.900
+Uh as as a key data point it's worth understanding that there's a file called configure ac
+
+06:37.540 --> 06:43.700
+It's going to be processed, uh as part of autoconf. We we initially access that when we run
+
+06:44.500 --> 06:47.540
+Um autogen as you'll see in a little bit
+
+06:48.180 --> 06:49.380
+um
+
+06:49.380 --> 06:56.340
+The but before but um, so the autogen script will generally consider this. Uh, so in a release build
+
+06:57.220 --> 07:02.260
+Um, this has been thought about kind of for us as part of um making the tarball
+
+07:03.300 --> 07:05.300
+um the configure dot a
+
+07:05.860 --> 07:07.300
+ac
+
+07:07.300 --> 07:08.580
+um
+
+07:08.580 --> 07:11.540
+Yeah, I think I pretty much covered covered this so
+
+07:12.420 --> 07:19.380
+Um those those that kind of partially built status that's a might be another phrase that you hear me use
+
+07:19.540 --> 07:20.900
+so this
+
+07:20.900 --> 07:22.900
+Slide unpacks that a little more
+
+07:24.900 --> 07:26.420
+Um
+
+07:26.420 --> 07:29.720
+So it can be a little confusing to understand what exactly?
+
+07:30.580 --> 07:36.100
+the you know, what is it, you know, how stable is emacs depending on what I have so that I got a
+
+07:36.980 --> 07:43.140
+It's kind of a set of rules of thumb here right first I want the highest, uh, you know dot
+
+07:43.780 --> 07:49.220
+Uh dot release value that I can get assuming that that's higher than one
+
+07:49.620 --> 07:55.800
+If it's if it were to only be one, let's say my choices were 29.1 and 30.1
+
+07:56.340 --> 07:58.340
+I would take 30.1
+
+07:58.340 --> 07:59.220
+um
+
+07:59.220 --> 08:01.700
+because that's that's weird, but um
+
+08:02.260 --> 08:05.000
+What you'll normally see is you might see a 28.2
+
+08:06.100 --> 08:08.100
+You might see a 29.1
+
+08:08.820 --> 08:14.660
+So here I think 28.2 has got the most most most stable
+
+08:15.540 --> 08:16.580
+um
+
+08:16.580 --> 08:18.580
+set, uh the
+
+08:18.740 --> 08:20.740
+uh, or set of release binaries
+
+08:21.540 --> 08:23.040
+the
+
+08:23.040 --> 08:27.620
+29.1 will will have a little more features, but will tend to be more stable
+
+08:28.340 --> 08:29.380
+than
+
+08:29.380 --> 08:32.200
+Any lower point releases for 29
+
+08:32.920 --> 08:37.720
+Uh, certainly than any release candidates for 29, which might even have new features
+
+08:38.200 --> 08:42.760
+Um, but are mostly going to just be patches so they're going to become the most stable
+
+08:43.320 --> 08:44.840
+thing here
+
+08:44.840 --> 08:47.160
+and especially if they they have a
+
+08:48.120 --> 08:50.120
+You know if this this is not
+
+08:50.200 --> 08:56.040
+Uh, if this were to be 29.2 release candidate one as well looking forward to seeing
+
+08:56.680 --> 08:57.960
+um
+
+08:57.960 --> 08:59.960
+the
+
+09:00.180 --> 09:02.180
+30.0.50
+
+09:02.280 --> 09:03.240
+um
+
+09:03.240 --> 09:09.800
+And and in between this this pre-test here, we're talking about kind of developer land. Um, so
+
+09:10.680 --> 09:14.360
+Um, the expectation is that you know what you're doing that applies to windows users
+
+09:14.920 --> 09:20.680
+Uh just as much if you are building anything in the snapshot range any of that is going to be in this
+
+09:21.220 --> 09:24.040
+30.0.50 currently that'll change when
+
+09:24.680 --> 09:25.880
+the
+
+09:25.880 --> 09:27.080
+when the
+
+09:27.080 --> 09:32.520
+30 30 an emacs 30 release tags, uh, or release branches come
+
+09:34.120 --> 09:36.120
+Okay, so
+
+09:37.480 --> 09:43.160
+Let's talk about the local um, there's not much to know about what I have going on
+
+09:43.640 --> 09:47.560
+except that I have my my paths mess messed with so
+
+09:48.840 --> 09:52.520
+Um, if if that that were to come up if you're wondering how why does this?
+
+09:52.840 --> 09:58.040
+Uh in in sys command work that's that's probably the way place where you notice it
+
+09:58.600 --> 10:01.640
+Uh, I am using windows 10. I haven't tried windows 11
+
+10:02.120 --> 10:06.040
+Uh as mentioned my sys2 is critical to all this
+
+10:06.200 --> 10:11.240
+There's one script in particular that will error out if you try to do anything other than use my sys's
+
+10:11.720 --> 10:14.520
+My sys's shell and in fact my sys owns
+
+10:14.920 --> 10:21.800
+Or provides three shells and of them that script is designed to work with a specific one of them as we'll come to
+
+10:23.160 --> 10:30.040
+I don't talk about installing the dependencies, but just as as kind of some kind of help. Um,
+
+10:31.000 --> 10:35.000
+You can search using this formula and install
+
+10:37.000 --> 10:40.920
+Using this formula good luck with those, you know grep commands
+
+10:43.640 --> 10:50.860
+And sys is the tool for building the self-installing self-extracting installer or uh executable self-installer
+
+10:51.820 --> 10:55.580
+Um, the script for that is provided along with the emac source
+
+10:56.780 --> 11:03.900
+Um, and i've provided a helpful link to the main page for the project download link on the left. It is not
+
+11:05.180 --> 11:10.700
+It's kind of scare where the way that this link appears, but I have clicked it and it's working for me
+
+11:14.200 --> 11:19.340
+Automation does uh, we'll we have some time we'll be looking at this at a minimum
+
+11:19.340 --> 11:24.540
+I wanted to mention that what I do on my local what you're seeing in the crawler, I hope
+
+11:25.260 --> 11:27.260
+uh represents a
+
+11:27.740 --> 11:29.740
+uh
+
+11:30.700 --> 11:35.580
+A simple sleep loop, uh, and we'll we'll look into that if we have time
+
+11:36.540 --> 11:43.820
+Um, I do have a little but I do use like a cron job and so on to clean up some hosting that I pay for
+
+11:44.380 --> 11:47.580
+Um where i've got where I where I kind of self-host
+
+11:48.300 --> 11:50.300
+some uh snapshots
+
+11:50.700 --> 11:53.260
+more stuff than I feel comfortable uploading to
+
+11:54.220 --> 11:56.220
+uh, to gnu
+
+11:57.820 --> 11:59.820
+The um
+
+12:01.740 --> 12:07.500
+You know, I never said, uh, my name is corwin bruce for the last couple of years i've been the volunteer making
+
+12:08.220 --> 12:14.380
+Uh making the snapshots the quote-unquote official binaries, uh for windows of the
+
+12:15.580 --> 12:17.100
+um
+
+12:17.100 --> 12:23.180
+Of of emacs for windows. So that's that's all the different versions. Uh help is always welcome with that
+
+12:23.180 --> 12:26.540
+I'd be very happy to teach you in more depth. This video is
+
+12:27.100 --> 12:33.420
+You know kind of my drop dead file. Uh, I don't have specific plans. Uh, if somebody's like hey get out of the way
+
+12:33.500 --> 12:35.500
+This is the one thing I think I can do
+
+12:35.660 --> 12:37.660
+Um, hey, that's real relatable
+
+12:39.100 --> 12:46.220
+Okay, um, so I haven't tried uh, the I haven't tried a lot of fun things that I won't talk about
+
+12:46.940 --> 12:52.540
+um, the uh, the rest of this talk is going to get into the nitty-gritty as I said, um
+
+12:52.860 --> 12:58.620
+If we can't convince emacs to start building over on that screen, we'll be opening it up here on the center stage
+
+12:59.500 --> 13:01.500
+um
+
+13:01.900 --> 13:07.820
+Uh, this begins and there's there's there's there's great insight here too on the wiki, uh
+
+13:08.300 --> 13:11.980
+With picking an ftp source for any official release
+
+13:12.780 --> 13:15.500
+That is for a stable product. Please visit
+
+13:16.460 --> 13:18.460
+Um ftp.gnu.org
+
+13:19.020 --> 13:24.220
+Otherwise, you'll want to switch that ftp dot at the beginning to alpha dot and take a pre-test
+
+13:25.020 --> 13:29.260
+Uh, or any snapshot or otherwise then they're not published there
+
+13:30.140 --> 13:32.140
+The uh next
+
+13:32.540 --> 13:34.540
+uh, you know
+
+13:34.620 --> 13:41.260
+i'm gonna you have some examples in here that assume that you're doing a release build that you're doing 29.1, but
+
+13:41.820 --> 13:47.260
+um, i'm glancing out of the the right side of my face at the
+
+13:48.060 --> 13:52.480
+Chat on the optance anybody in there wants to direct me at a particular
+
+13:53.180 --> 13:55.820
+Um, we can make some other we can build something
+
+13:56.540 --> 14:02.460
+Else if you want to see a snapshot build more mention that um the examples that you're going to see here
+
+14:03.500 --> 14:06.540
+That I will without other direction cut and paste
+
+14:07.260 --> 14:09.100
+um
+
+14:09.100 --> 14:11.100
+Are all based on a release bill
+
+14:12.380 --> 14:14.380
+so
+
+14:14.620 --> 14:21.840
+Um, and so, uh, we'll use the uh, I mentioned that there are several shells provided by mysis2
+
+14:22.160 --> 14:24.160
+To the min-gw64
+
+14:25.520 --> 14:28.160
+Shell is the one that we mostly need
+
+14:28.880 --> 14:33.440
+Um, I tested all of this as well with the min-gw32 shell
+
+14:34.240 --> 14:35.680
+um
+
+14:35.680 --> 14:40.400
+So that that should work and and see mix binaries that that work for me
+
+14:44.080 --> 14:46.000
+Uh
+
+14:46.000 --> 14:50.180
+I as I mentioned, I don't get into the details of installing all your prerequisites
+
+14:50.720 --> 14:53.920
+I found that doing it in a headfirst manner wasn't uh,
+
+14:54.640 --> 15:00.240
+Wasn't difficult and I also found that there's a number of tutorials. I didn't want to pick one to link here
+
+15:03.280 --> 15:05.280
+Um there uh
+
+15:06.160 --> 15:08.400
+Here are uh, okay, so
+
+15:10.240 --> 15:14.960
+Our general formula for building emacs irrespective of windows
+
+15:15.520 --> 15:16.800
+looks like
+
+15:16.800 --> 15:20.420
+Does the configure script exist if not run autogen?
+
+15:21.280 --> 15:23.280
+from a windows build standpoint
+
+15:23.920 --> 15:30.400
+This is if i'm not running a release that release build call the autogen script
+
+15:31.040 --> 15:34.580
+Right and this would be in the directory where we want to pack this i'll demonstrate
+
+15:35.200 --> 15:37.040
+within
+
+15:37.040 --> 15:39.040
+three minutes if uh
+
+15:39.600 --> 15:42.240
+If one if nobody's pushed upstream to emacs
+
+15:42.800 --> 15:43.920
+um
+
+15:44.000 --> 15:47.120
+so, uh the configure, uh, and
+
+15:48.080 --> 15:50.080
+configure options
+
+15:50.320 --> 15:52.320
+are uh
+
+15:53.600 --> 15:58.480
+Uh the configure, you know if the configure sorry if the configure script exists then
+
+15:58.800 --> 16:05.760
+Uh doesn't doesn't exist. So the only reason so in my process I will always execute that step because I clean everything
+
+16:06.480 --> 16:09.860
+after every build, um in all my contexts
+
+16:10.820 --> 16:13.700
+um, however, if you were you know had a
+
+16:14.320 --> 16:19.140
+Checkout of emacs dot get and you are building it at several releases
+
+16:19.300 --> 16:22.100
+Then maybe you've got a configure script and then you'll want to know
+
+16:22.740 --> 16:24.580
+um the you know
+
+16:24.580 --> 16:31.800
+Whether you have to bootstrap and the typical complexities, but otherwise you might be able to skip that in in the abstract
+
+16:32.820 --> 16:34.820
+um
+
+16:36.100 --> 16:38.100
+Is that right or is it is
+
+16:38.420 --> 16:42.820
+Make uh, so and if the make file doesn't exist make install. I know i'm
+
+16:43.380 --> 16:46.100
+Looking at that and i'm questioning whether it's correct. Sorry about that
+
+16:48.020 --> 16:54.440
+Um in any case, uh, so autogen configure make install is our recipe autogen
+
+16:55.060 --> 16:59.620
+Creates the configure script configure creates the make file the make file
+
+17:00.020 --> 17:04.120
+Um in the case of windows, I almost always want the install
+
+17:04.840 --> 17:09.560
+Uh and to specify some location where the installed emacs will land this is
+
+17:10.440 --> 17:11.320
+where
+
+17:11.320 --> 17:13.980
+all of the recipes for packaging emacs
+
+17:14.680 --> 17:15.720
+go
+
+17:15.720 --> 17:17.720
+and if I were
+
+17:18.600 --> 17:22.440
+You know using this as a movie to upgrade I personally would do that by
+
+17:23.080 --> 17:26.440
+by specifying an install path quote unquote on top of
+
+17:27.240 --> 17:33.640
+Uh a main installation. I don't do that. I update shortcuts manually based on what specifically I want to try
+
+17:34.120 --> 17:39.640
+Uh in an effort to to to notice, uh interesting patches and confirm they work on windows
+
+17:41.240 --> 17:45.560
+Which mostly they do there's not a lot of code in my experience that is
+
+17:46.200 --> 17:49.720
+Windows specific and very very little around the build process
+
+17:50.360 --> 17:51.400
+All right
+
+17:51.400 --> 17:59.160
+Huge rabbit hole zone and I still have a minute before I have to kick off the first part of our demo
+
+18:00.120 --> 18:01.240
+so
+
+18:01.240 --> 18:03.880
+Let's let's keep keep diving in
+
+18:04.200 --> 18:05.240
+um
+
+18:05.240 --> 18:13.400
+The those specific part windows specific parts beside the dot exe extension that we're going to find slammed onto all of our familiar
+
+18:14.040 --> 18:17.640
+Uh executables. We're also going to have emacs client w
+
+18:18.360 --> 18:22.040
+Which is a wrapper that hides?
+
+18:22.760 --> 18:24.760
+um how hard it is to get
+
+18:25.160 --> 18:27.160
+Uh to take it
+
+18:27.640 --> 18:31.800
+How bad the abstraction is between the window management layer and the gooey?
+
+18:32.440 --> 18:38.940
+And then all the different parts on windows essentially it wants to create a shell window if we just double click emacs.exe
+
+18:39.480 --> 18:41.480
+So emacs client w
+
+18:41.640 --> 18:44.200
+Uh and run emacs are going to solve that problem
+
+18:45.160 --> 18:46.680
+um
+
+18:46.680 --> 18:49.260
+Wrapping emacs and emacs client respectively
+
+18:51.640 --> 18:53.400
+And
+
+18:53.400 --> 18:55.400
+Just uh
+
+18:56.520 --> 19:02.360
+All right, so let's let's go ahead and do something i'll i'm going to take away the ticker here for a minute
+
+19:02.520 --> 19:06.600
+And what you're not seeing is off stage. I am
+
+19:07.400 --> 19:09.900
+Killing that so we don't get builds in parallel
+
+19:11.480 --> 19:13.480
+Um
+
+19:15.960 --> 19:17.480
+So, um
+
+19:17.480 --> 19:21.720
+So at this point i'm going to open up a shell and i'm going to start talking just a little bit about
+
+19:22.360 --> 19:27.640
+My local build environment, which we haven't gotten into in fact just to make that even easier
+
+19:28.520 --> 19:30.520
+let's um
+
+19:31.160 --> 19:36.040
+Let's just take a look at it a little bit probably the easiest spot
+
+19:37.560 --> 19:39.560
+Is
+
+19:40.280 --> 19:42.280
+Here
+
+19:47.720 --> 19:51.980
+All right, so here we have the familiar windows my computer interface
+
+19:52.600 --> 19:56.200
+I have the g drive and the h drive
+
+19:56.840 --> 19:58.840
+four terabyte drives
+
+20:00.040 --> 20:02.040
+um dedicated to
+
+20:02.440 --> 20:03.720
+my
+
+20:03.720 --> 20:07.000
+um, really overblown emacs build process
+
+20:08.200 --> 20:15.240
+Um, this just lets me be super lazy. There's no reason you need any massive amount of storage to do any of this
+
+20:15.800 --> 20:20.600
+Um inside here and now i'll actually switch you back to the other screen
+
+20:21.960 --> 20:23.960
+um
+
+20:24.040 --> 20:26.040
+We'll we'll find
+
+20:35.880 --> 20:37.880
+Oops
+
+20:38.600 --> 20:40.600
+Sorry about that
+
+20:40.680 --> 20:42.680
+It didn't take the time to label that one
+
+20:42.680 --> 20:44.600
+Label that one
+
+20:44.600 --> 20:48.680
+Um, so here you can see the primary output that
+
+20:49.400 --> 20:52.440
+That i'm looking at through this automated process
+
+20:52.600 --> 20:58.280
+I come along I look at the bug reports or maybe i'm just restarting my computer and choosing what emacs
+
+20:58.840 --> 21:02.920
+version at random and then in that case, I look at this modified date and I say
+
+21:03.480 --> 21:05.480
+um my config that I
+
+21:05.880 --> 21:09.160
+You know that i'm playing with right now is all set for emacs 30
+
+21:09.320 --> 21:12.760
+Or i'm testing them both and i'm relaunching both of these right
+
+21:13.240 --> 21:17.720
+So for me that starts by diving into the install folder going into the bin folder
+
+21:18.200 --> 21:24.520
+Which looks exactly the way my automation leaves it. I then come in to run the run emacs
+
+21:25.000 --> 21:27.000
+And I create a shortcut
+
+21:27.480 --> 21:29.480
+um
+
+21:29.640 --> 21:30.760
+To it
+
+21:30.760 --> 21:31.960
+so
+
+21:31.960 --> 21:35.880
+I'm a keyboard person. So that's usually done like this
+
+21:36.760 --> 21:41.800
+And then I just know that the context menu is going to come up in the right place so i'll come up and
+
+21:42.840 --> 21:44.840
+um
+
+21:44.900 --> 21:49.080
+Possibly change the change the shortcut, right?
+
+21:53.080 --> 21:55.080
+If I don't mess with it
+
+21:56.680 --> 21:57.640
+Um
+
+21:57.640 --> 22:03.800
+So here's where i'll add my minus q if that's kind of where my world is at or it kind of depends on what i'm doing
+
+22:03.880 --> 22:06.840
+With these which varies week to week
+
+22:07.480 --> 22:11.820
+Um, so restarting my emacs, uh involves doing the same thing going to my desktop
+
+22:12.600 --> 22:15.740
+And where you'll find a number of emac shortcuts
+
+22:17.000 --> 22:19.000
+and
+
+22:20.680 --> 22:23.240
+Um updating the shortcut in the same manner
+
+22:23.960 --> 22:31.580
+Actually, maybe we'll just let's go back there and just show it. So if we look at for example my erc
+
+22:33.880 --> 22:36.360
+You can see it's going to be pointing at one of these
+
+22:37.400 --> 22:39.400
+clones, and then it's gonna
+
+22:39.720 --> 22:45.080
+Maybe tell me that I want it wants to be full screen. No, not currently and then it might uh,
+
+22:45.560 --> 22:52.620
+Have some stuff in there about auto loading a config and what connections i'm going to some commands i've defined to start connections
+
+22:53.340 --> 22:55.340
+So
+
+23:00.620 --> 23:06.940
+All right, and sorry I got a phone call I was checking it wasn't in an order the organ the other organizers giving me the hook
+
+23:08.700 --> 23:14.380
+So, um, all right, so that's that's probably enough on the local system. Let's get back to
+
+23:15.580 --> 23:22.380
+To to building emacs and now it hopefully makes a certain amount of sense when I say we're gonna wander over to the h drive
+
+23:22.620 --> 23:24.700
+and recreate the structure that
+
+23:25.660 --> 23:27.180
+both
+
+23:27.180 --> 23:33.660
+My process sort of assumes and the scripts you'll find in the admin nt
+
+23:34.300 --> 23:37.740
+Uh build disk folder in source
+
+23:38.940 --> 23:44.860
+Used to assume those scripts are in need of some love and in just a little bit i'll be mentioning a build
+
+23:45.420 --> 23:46.940
+uh
+
+23:46.940 --> 23:47.900
+a uh
+
+23:47.900 --> 23:53.980
+A a particular bug that you might want to pay attention to if you're interested in making a self installer
+
+23:54.780 --> 23:56.780
+all right, so
+
+23:57.020 --> 23:58.140
+um
+
+23:58.140 --> 24:00.140
+We're going to create
+
+24:01.260 --> 24:04.160
+Uh an emacs build directory
+
+24:08.460 --> 24:15.500
+And we've got a handy git clone stage git clone command stage for ourself that would work
+
+24:16.380 --> 24:18.380
+um
+
+24:19.420 --> 24:26.160
+Do not currently see anybody lobbying for that. So instead we will run the rather faster
+
+24:28.140 --> 24:30.140
+Uh w get command
+
+24:30.940 --> 24:37.020
+On savannah, which is not pasted in here. Nice. Let's see if I can freehand it not gonna do it
+
+24:37.820 --> 24:39.820
+uh
+
+24:45.500 --> 24:47.500
+Um
+
+24:51.980 --> 24:56.480
+Beg your pardon i'm grabbing a url from the internet
+
+25:00.060 --> 25:04.460
+Uh, okay. Yeah, I can't I can't honestly I can't freehand it whatever
+
+25:06.060 --> 25:07.660
+Sorry, I uh
+
+25:07.660 --> 25:11.340
+I didn't have that bookmarked and all handy like I thought I did
+
+25:12.060 --> 25:14.300
+Um, so we'll just say ftp.gnu
+
+25:15.260 --> 25:17.260
+.org
+
+25:17.900 --> 25:24.560
+Uh, what is it pub emacs emacs-29.1
+
+25:26.460 --> 25:28.460
+Uh
+
+25:34.860 --> 25:36.860
+Hmm
+
+25:36.860 --> 25:38.860
+I
+
+25:40.700 --> 25:42.700
+Didn't
+
+25:43.100 --> 25:48.060
+Really think i'd have this command sitting around it makes me want to scrap the whole demo i'm not gonna lie
+
+25:48.940 --> 25:50.940
+Okay, how am I doing your time?
+
+25:51.820 --> 25:58.140
+Um, I think at least 15 minutes. Um, but in the command that you were freehanding should the pub be gnu instead
+
+25:59.100 --> 26:01.100
+Oh, thanks
+
+26:01.100 --> 26:03.100
+I'm, sorry
+
+26:07.420 --> 26:13.420
+There we go, thank you. All right, and then we'll
+
+26:17.820 --> 26:20.220
+And i'm not sure I provided commands for this either
+
+26:22.940 --> 26:29.660
+But it is trivially easy to do and while that happens we'll get to move on a few slides
+
+26:29.820 --> 26:31.820
+Um
+
+26:31.820 --> 26:35.660
+The configure script i'm not talking about in a lot of detail
+
+26:35.740 --> 26:40.460
+But I do want to mention that the gnu binaries are provided with native
+
+26:41.820 --> 26:46.080
+Uh compilation enabled that's the feature that uses gcc
+
+26:46.620 --> 26:53.020
+lib gcc get on windows if available that looks gcc get will be used
+
+26:53.740 --> 27:00.620
+Um, but when but if if emacs has that feature then it will take by compile
+
+27:01.420 --> 27:03.420
+native code and
+
+27:04.040 --> 27:05.100
+asynchronously
+
+27:05.100 --> 27:07.100
+Compile that as needed
+
+27:07.340 --> 27:09.340
+uh with the ahead of time feature
+
+27:09.660 --> 27:14.860
+We're going to do as much of that ahead of time and for folks that are consuming the windows binary
+
+27:14.860 --> 27:19.020
+The thinking goes that they might not have mysys too. They might not have
+
+27:19.740 --> 27:21.740
+Gcc jet they might be
+
+27:22.140 --> 27:24.140
+Happy that they're enabled
+
+27:24.140 --> 27:28.400
+In a you know a lot of time run emacs on their local environments
+
+27:30.460 --> 27:31.580
+At all
+
+27:31.580 --> 27:34.700
+You know in a maybe a lockdown at a corporate context
+
+27:35.420 --> 27:36.460
+so
+
+27:36.460 --> 27:37.660
+aside
+
+27:37.660 --> 27:38.860
+that
+
+27:38.860 --> 27:40.880
+There's your first glimpse at the configure
+
+27:42.140 --> 27:46.220
+Program that we're going to run in a moment. In fact, i'm going to go as far as
+
+27:47.020 --> 27:49.020
+Putting it on the clipboard
+
+27:49.100 --> 27:50.540
+um
+
+27:50.540 --> 27:53.260
+Really just looking at this the aot flag
+
+27:53.340 --> 27:58.620
+It's the one i'd call attention to but it's worth understanding that windows doesn't provide a dbus capability
+
+27:58.700 --> 28:02.700
+So windows native program isn't gonna be able to depend on dbus. We're gonna
+
+28:03.500 --> 28:08.960
+We're gonna explicitly ask that that be left out. I think that's actually optional. It's documentation
+
+28:09.260 --> 28:12.940
+I think the configure program is smart enough to know that we don't want dbus
+
+28:13.660 --> 28:15.100
+on windows
+
+28:15.100 --> 28:22.860
+Um, otherwise we tend to compile with things. Um, there there's missing documentation. We could say the uh,
+
+28:23.340 --> 28:26.780
+all of the libraries are treated in the way I mentioned in that
+
+28:27.900 --> 28:30.700
+Jpeg support will be available as long as
+
+28:32.060 --> 28:36.940
+Jpeg is is available in our environment and configure script certainly notices that
+
+28:37.500 --> 28:44.700
+Um, the new provided binaries are provided with minus o2 and that's also my default personally on windows. Um,
+
+28:45.580 --> 28:48.380
+However, and i'm going to skip this since I mentioned it
+
+28:49.260 --> 28:51.260
+um mentioned
+
+28:51.260 --> 28:53.260
+uh, and uh
+
+28:54.620 --> 28:56.460
+Um
+
+28:56.460 --> 29:00.380
+So I guess i'll say um, you can um say with
+
+29:01.420 --> 29:02.300
+the
+
+29:02.300 --> 29:08.620
+It's worth knowing that you if you're not one reason that that you're building might be because you want to turn off native
+
+29:08.920 --> 29:14.140
+Compilation for whatever reason if you have load juices you get it, but don't want emacs to use it
+
+29:14.700 --> 29:18.400
+Uh, especially as that default looks like it could be changing with emacs 30
+
+29:19.420 --> 29:20.540
+um
+
+29:20.540 --> 29:22.060
+the uh
+
+29:22.060 --> 29:27.100
+the debug configuration, um, this is this is the uh, kind of
+
+29:27.740 --> 29:34.060
+Uh, what what i'm currently using this on commentary. Uh, i've seen on the emacs development list
+
+29:34.060 --> 29:36.060
+Um
+
+29:40.620 --> 29:44.220
+All right, let's check on our checkout and see if we can't get a build running
+
+29:44.620 --> 29:48.300
+Um, this is a release build so I won't be starting with
+
+29:49.260 --> 29:51.920
+Uh, so we'll start by hopping into its directory
+
+29:53.980 --> 29:57.100
+And we um we have
+
+29:59.020 --> 30:01.020
+Uh
+
+30:05.020 --> 30:07.020
+But not
+
+30:11.260 --> 30:14.060
+Okay, so that tells us we're gonna run
+
+30:15.660 --> 30:17.660
+Our configure program
+
+30:18.540 --> 30:21.260
+But we don't need to run uh config ic
+
+30:23.260 --> 30:25.260
+So
+
+30:31.340 --> 30:33.580
+So let's get that going and
+
+30:34.060 --> 30:36.060
+uh
+
+30:36.060 --> 30:41.280
+Hopefully that's showing through just enough to be fun not too much to be distracting
+
+30:46.540 --> 30:49.440
+Um the uh the unoptimized
+
+30:52.140 --> 30:58.320
+Um, please report issues if your emacs is crashing, uh to the emacs development list not to me personally
+
+30:59.100 --> 31:02.220
+Um, although you are of course welcome to copy me
+
+31:02.700 --> 31:08.540
+Um, if you especially i'm subscribed to that list so I get all the mail so I don't mind being copied
+
+31:09.100 --> 31:11.020
+uh, and
+
+31:11.020 --> 31:12.380
+as well
+
+31:12.380 --> 31:13.740
+if you think it's
+
+31:13.740 --> 31:15.100
+uh
+
+31:15.100 --> 31:17.500
+You know related to packaging that actually makes sense
+
+31:18.060 --> 31:24.700
+Or windows related even and uh, it can be tested with an extra snapchat that should be uploaded to the gnu alpha side
+
+31:25.100 --> 31:27.500
+I could look at that if I have time
+
+31:27.820 --> 31:29.340
+Okay
+
+31:29.340 --> 31:31.660
+That is with the configure script to make file for
+
+31:32.200 --> 31:39.500
+Emacs is really really complicated if time permits which i'm, you know now confident it will not
+
+31:39.900 --> 31:45.500
+We will look at a makefile that I tried writing that orchestrates this whole process that i'm talking about
+
+31:47.180 --> 31:53.900
+Um as uh, let's see, so the build uh build process I run my builds with
+
+31:54.380 --> 31:58.220
+Uh explicitly specifying the max cpu, uh
+
+31:59.340 --> 32:01.180
+with minus j
+
+32:01.180 --> 32:08.380
+But minus b1 to get the full build, uh full login to your recipes. That is probably the magic thing
+
+32:09.100 --> 32:10.620
+that um
+
+32:10.620 --> 32:12.620
+shouldn't to understand with uh
+
+32:15.980 --> 32:23.520
+Or that uh that that uh that i'm glad that I know, uh as i'm trying to write my automations
+
+32:24.700 --> 32:26.700
+um
+
+32:26.940 --> 32:28.940
+Uh the um
+
+32:29.820 --> 32:34.060
+So I call that out here the binary, uh releases
+
+32:35.020 --> 32:39.100
+Okay. So in this section, we're going to start to get into what are all those files
+
+32:39.500 --> 32:43.020
+And there's a bug report related to that that I didn't get into here. So
+
+32:43.580 --> 32:47.340
+Um, that's kind of to the point about the less said about this the better
+
+32:47.660 --> 32:51.420
+That's my explanation for stepping through some of these slides. Uh, of course
+
+32:52.380 --> 32:54.380
+Share them all um
+
+32:55.820 --> 32:58.220
+Hopefully by the time that this video is published
+
+33:01.180 --> 33:07.180
+I mentioned it. Um, I may have mentioned already freshly installed but uh fully installed
+
+33:07.660 --> 33:13.020
+uh this the the key distinction here is that uh emacs is
+
+33:13.400 --> 33:20.700
+Distributed in the binary form for windows with some dll files that actually come from the mysis 2
+
+33:21.000 --> 33:26.220
+Project there's an implication there to gcc that I definitely want to get to it talking about
+
+33:28.060 --> 33:30.620
+Um, so freshly installed means
+
+33:31.340 --> 33:34.700
+We haven't copied those binaries from the mysis 2
+
+33:35.340 --> 33:37.180
+uh installation
+
+33:37.180 --> 33:39.180
+into the emacs
+
+33:39.480 --> 33:41.260
+uh installation
+
+33:41.260 --> 33:43.020
+uh, and then
+
+33:43.020 --> 33:48.300
+When we re-archive that local emacs installation, that's how we're going to create the full zip
+
+33:48.620 --> 33:53.020
+So hopefully that actually is a pretty good summary of what all those files are
+
+33:53.660 --> 33:57.900
+Um, but there are readme files on the ftp. They do a pretty good job
+
+33:59.020 --> 34:05.900
+If you can dig enough to find one and my apologies for uh tardiness getting a new version on that posted
+
+34:07.260 --> 34:09.180
+um
+
+34:09.180 --> 34:10.620
+the emacs
+
+34:10.620 --> 34:17.020
+Uh, so those dependencies, uh are listed within the emacs itself and as we'll just talk about in a moment
+
+34:17.020 --> 34:18.300
+There's a way
+
+34:18.300 --> 34:21.500
+uh that we can use we can access that
+
+34:22.220 --> 34:26.880
+When we collect them in order to meet the gcc requirement that is essentially
+
+34:27.660 --> 34:29.660
+to include
+
+34:29.660 --> 34:35.260
+Um include the sources for the for those binaries the things that were compiled against
+
+34:36.460 --> 34:38.460
+um
+
+34:39.100 --> 34:42.620
+The uh, so so here we go, we're we're into the build process
+
+34:42.700 --> 34:46.060
+Let's just take a look and see if configure it got done it sure did
+
+34:46.540 --> 34:48.540
+and now we can see a table of
+
+34:49.080 --> 34:51.080
+Hopefully good, but good and bad news
+
+34:51.900 --> 34:53.580
+um in potential
+
+34:53.580 --> 34:58.940
+um where we're learning that we're using the pdumper strategy and any number of other things that we might be
+
+34:59.180 --> 35:03.820
+Messing with as our motivation for for building ourselves on emacs
+
+35:04.860 --> 35:06.860
+again, this table represents
+
+35:07.340 --> 35:09.260
+uh what you'll what
+
+35:10.060 --> 35:15.280
+What what it looks like for me when i'm building for the gnu distributed binaries
+
+35:17.900 --> 35:19.900
+All right, so um
+
+35:20.780 --> 35:23.740
+Kind of moving moving as quickly as I can here
+
+35:24.540 --> 35:28.140
+I'm at 40 after I believe that's the five minute mark
+
+35:28.780 --> 35:29.660
+so
+
+35:29.660 --> 35:34.780
+Um having just succeeded in in configuring emacs. I don't think we're going to build it. Uh
+
+35:35.100 --> 35:39.180
+I don't think we're going to actually get to running make install
+
+35:39.900 --> 35:45.500
+Um, but I have it sitting here on my keyboard or clipboard assuming that we will right?
+
+35:49.100 --> 35:50.460
+No
+
+35:50.460 --> 35:52.460
+Oh, wow
+
+35:52.780 --> 35:56.940
+I think i've managed to confuse this. All right, so for me that looks simply like
+
+35:57.660 --> 35:59.740
+uh make
+
+35:59.740 --> 36:01.740
+v equals one
+
+36:01.740 --> 36:09.200
+Uh install, uh prefix equals
+
+36:10.700 --> 36:12.700
+uh
+
+36:18.380 --> 36:20.380
+And we can at least get it kicked off
+
+36:22.860 --> 36:25.740
+And that that command is just uh
+
+36:26.620 --> 36:30.540
+Just is no no different than I showed on the slide where I where I gave it
+
+36:31.020 --> 36:34.460
+Uh, I wasn't planning to stop and explain it. I was just planning to paste it in
+
+36:35.500 --> 36:36.700
+so
+
+36:36.700 --> 36:42.060
+So so again recapping the rest of the process here and maybe actually making it if you can believe it or not
+
+36:42.300 --> 36:44.460
+through the rest of these slides, um
+
+36:45.180 --> 36:52.240
+We to to create the full set of binaries. We're going to need a no dependent no depth archive. That's without the mysys2
+
+36:52.400 --> 36:58.740
+To uh deal provided dlls just the things that we compile as part of making emacs
+
+36:59.520 --> 37:01.520
+um
+
+37:02.400 --> 37:09.760
+The uh, the build depth zip script is uh provided with the source distribution is your tool
+
+37:10.240 --> 37:14.320
+for uh meeting the gpl requirements ride source as mentioned before
+
+37:14.880 --> 37:21.360
+Um, there is a second bug that I did, uh include some more information on in my notes already
+
+37:22.240 --> 37:24.240
+um that uh
+
+37:24.800 --> 37:27.840
+That gets into the details of this other feature I alluded to
+
+37:28.640 --> 37:30.640
+Um, i'll just skip into that
+
+37:31.200 --> 37:32.560
+um
+
+37:32.560 --> 37:34.640
+we can with with uh
+
+37:35.440 --> 37:40.240
+With a an appropriate version of that which you may need a patch
+
+37:41.040 --> 37:42.560
+uh to
+
+37:42.560 --> 37:44.660
+To have you can list out the dependencies
+
+37:45.540 --> 37:51.060
+And and that version as well can consider the dependencies of the emacs binary versus the hard-coded list
+
+37:51.060 --> 37:54.900
+You might find depending on when you look at this file in the source tree
+
+37:56.980 --> 37:58.980
+The different um
+
+37:59.060 --> 38:00.020
+so
+
+38:00.020 --> 38:06.440
+I also have a hack here that uh works around the absolute requirement to run this with the mysys2
+
+38:07.060 --> 38:09.060
+And not the mingw64
+
+38:09.060 --> 38:11.060
+64
+
+38:14.340 --> 38:16.340
+Script
+
+38:17.460 --> 38:18.500
+Um
+
+38:18.500 --> 38:27.080
+Once we've made that zip file that contain that's that's our installed emacs without the dlls provided by mysys2
+
+38:28.420 --> 38:35.140
+We'll then unpack the dependencies that were created by that python script. We just talked about from the emacs source tree
+
+38:36.020 --> 38:40.980
+So at that point once those are unpacked we can now make what's called the full
+
+38:41.600 --> 38:47.640
+Installer or sometimes I might call it the unqualified installer because it's just going to be called emacs29.1.zip
+
+38:51.060 --> 38:56.520
+Um and that uh that file which which creates the archive
+
+38:58.580 --> 38:59.780
+That
+
+38:59.780 --> 39:03.140
+that that file is exactly the same plus the
+
+39:03.780 --> 39:08.340
+Uh, the dependencies that we unzipped in the bin folder of the installed emacs
+
+39:09.700 --> 39:10.720
+the
+
+39:10.720 --> 39:17.460
+Executable self-installer, which I would love to have more time to talk about I gave a few pointers here on the hard part of running
+
+39:17.460 --> 39:19.460
+it most importantly
+
+39:19.940 --> 39:25.880
+If i've installed in any kind of funny looking name, I end up renaming it to like emacs-29.1
+
+39:26.840 --> 39:33.240
+Or emacs-29. or 30.0.50 or whatever and I just rename that installed
+
+39:33.880 --> 39:39.800
+Emacs folder and then I go to the root of wherever I created that the parent directory above it
+
+39:40.360 --> 39:43.420
+And that's where I make my copy of the emacs nsi
+
+39:44.120 --> 39:46.600
+um the the nsis script
+
+39:47.560 --> 39:49.400
+and uh
+
+39:49.400 --> 39:51.400
+That's also where I
+
+39:51.960 --> 39:59.160
+And then uh, then from that parent directory I execute uh making sys uh here I as mentioned
+
+39:59.800 --> 40:00.920
+um
+
+40:00.920 --> 40:05.160
+I I can get away with this because I have it on my path and it's my recollection
+
+40:05.240 --> 40:11.480
+I think I tested this and couldn't reproduce the problem. So I didn't document it here, but i've had some problems with running this when
+
+40:12.040 --> 40:13.160
+uh
+
+40:13.160 --> 40:15.160
+When nsis wasn't on my path
+
+40:16.920 --> 40:19.960
+The uh, the the final step here
+
+40:20.440 --> 40:25.260
+And the last the gpl requirement is to include all the sources
+
+40:25.780 --> 40:29.640
+Except when i'm doing a release build I always do this
+
+40:30.200 --> 40:35.800
+Um, and that's the new practice when making snapchat binaries is to go ahead and include the sources
+
+40:36.280 --> 40:38.840
+Even though we might have the specific revision number
+
+40:39.400 --> 40:43.000
+Um, our thinking is we want absolute clarity
+
+40:44.120 --> 40:45.480
+that that somebody
+
+40:45.480 --> 40:51.720
+Uh can say okay this binary did this thing from the source for it i'm gonna go take that into my own open source
+
+40:53.160 --> 40:57.160
+yeah, maybe they would the jerks them into my own open source project and
+
+40:57.880 --> 40:59.480
+um
+
+40:59.480 --> 41:03.340
+Off, you know off they go, uh, and that needs to be possible
+
+41:04.840 --> 41:06.520
+um
+
+41:06.520 --> 41:07.960
+so, um
+
+41:07.960 --> 41:13.640
+Beyond that the rest of this is is really detailed that you find covered in the gnu maintainers manual
+
+41:14.280 --> 41:20.120
+Um, this is the the current set of windows binaries that um, it's busily working on
+
+41:20.760 --> 41:22.760
+creating a like for like a
+
+41:23.400 --> 41:29.320
+Mirror to behind the scenes here is called a 29.1 underscore two
+
+41:30.280 --> 41:32.280
+um, and I have a lot of
+
+41:32.900 --> 41:37.720
+Automation available on this site. So at this point i'm just I think i'm only
+
+41:38.520 --> 41:40.520
+minute 40 seconds over i'm
+
+41:41.080 --> 41:42.120
+gonna
+
+41:42.120 --> 41:44.120
+invite my
+
+41:44.360 --> 41:50.200
+Co-organizers back onto the call or any volunteers that want to jump in and anybody if there's people on the bbb
+
+41:50.280 --> 41:53.080
+I'd be happy to take questions if there aren't
+
+41:53.640 --> 41:56.520
+um, I have a screen full of
+
+41:57.240 --> 42:02.200
+The automation stuff ready to go as a kind of a second ring in my circus today
+
+42:03.320 --> 42:07.240
+So if you're still with me, thanks a lot for joining me, and I really enjoyed this talk
+
+42:07.480 --> 42:11.560
+Uh, if this is where we're going to close it out. I don't know where we're at for schedule today
+
+42:13.080 --> 42:15.180
+Um, thanks a lot for a great talk corwin
+
+42:16.760 --> 42:21.640
+Um in terms of like schedule, yeah, you went over a little bit for the official like, um
+
+42:22.120 --> 42:24.120
+schedule or time of your talk, but I think
+
+42:24.760 --> 42:29.080
+We actually have maybe like six or seven more minutes. Um here on stream
+
+42:29.800 --> 42:35.400
+For um questions and such if folks have questions or if you want to like quickly maybe show one or two more things
+
+42:36.200 --> 42:37.000
+um
+
+42:37.080 --> 42:39.080
+But I think the hard stuff is about like
+
+42:39.480 --> 42:42.520
+Maybe 10 minutes ish for now and then we'll have to rush over to um
+
+42:43.320 --> 42:45.320
+for the closing remarks, so
+
+42:48.120 --> 42:50.120
+Well, that sounds awesome
+
+42:51.320 --> 42:58.280
+Okay, so i'm looking at the the dev chat, uh, I see a comment on cross compiling the emacs
+
+42:58.440 --> 43:05.160
+But i'm sorry, i'm looking at irc primarily, but uh, feel free to jump in if you're on bbb with me or
+
+43:05.320 --> 43:08.840
+Uh, uh, if if you put something on the pad i'm sure
+
+43:09.400 --> 43:12.520
+I will see it between the two of us
+
+43:13.160 --> 43:14.840
+Uh over here
+
+43:14.840 --> 43:21.080
+Okay, so cross compiling emacs for serenity. I haven't tried really any cross compiling. I think that would be very interesting
+
+43:21.160 --> 43:23.160
+I would most likely focus on
+
+43:23.720 --> 43:28.760
+Doing exactly what I do on a gnu system completely ditching
+
+43:29.320 --> 43:30.280
+um
+
+43:30.280 --> 43:34.600
+So I guess with my my remaining time rather than walking through code
+
+43:35.160 --> 43:39.560
+Um for my automation which can be another talk if in fact there's an interest in that
+
+43:40.200 --> 43:41.240
+um
+
+43:41.240 --> 43:45.560
+I want to I guess say a couple words about the non-free operating system
+
+43:46.200 --> 43:49.800
+That i'm using here. I did my best to use no
+
+43:50.660 --> 43:52.760
+non-free software other than
+
+43:53.640 --> 43:55.400
+the
+
+43:55.400 --> 43:57.400
+Uh the operating system
+
+43:57.720 --> 44:01.720
+That is the context for this talk in preparing this talk for you
+
+44:02.120 --> 44:05.080
+I personally have a lot more
+
+44:06.520 --> 44:13.560
+Uh time and energy I have to say invested in proprietary tools for doing a lot of the things that
+
+44:14.920 --> 44:19.480
+That go into this so I really respect the work of people that pull that off. Um
+
+44:20.200 --> 44:27.400
+I'm, sorry, I didn't get my pre-recorded stuff. Uh kind of in order for everybody, but I just want to stress like
+
+44:28.280 --> 44:35.480
+Uh, it is all absolutely possible and just hats off to everybody that that used uh entirely free software to get their
+
+44:36.200 --> 44:38.200
+Get their recordings done in time
+
+44:38.680 --> 44:40.680
+um, and what you did see
+
+44:41.640 --> 44:45.560
+Unless it was provided by the operating system in my presentation today was all
+
+44:46.040 --> 44:51.080
+Uh free software with the debatable exception of nsys which styles itself
+
+44:51.720 --> 44:53.320
+as open source
+
+44:53.320 --> 44:56.120
+maybe for uh marketing reasons
+
+44:57.480 --> 45:00.460
+Uh in any case, uh, certainly we can get out of the source
+
+45:08.120 --> 45:10.840
+Thanks for the note corinne, it's good to know that uh
+
+45:11.320 --> 45:18.600
+Building or uh, yeah doing the build of emacs for windows on windows can be done using only free software
+
+45:19.880 --> 45:21.880
+Yeah, absolutely
+
+45:23.480 --> 45:25.480
+Probably the right closing note, right?
+
+45:26.120 --> 45:32.440
+um, I just uh, thanks again to the organizers for bearing with me and like every time I was like you guys i'm
+
+45:32.520 --> 45:36.760
+Terrible at this. They're just like no you're doing fine. Keep going. You did a great job live last time
+
+45:37.000 --> 45:43.000
+You can do it live, you know and and saying all the right things to just uh, encourage me to come back
+
+45:44.840 --> 45:46.840
+This year and everywhere
+
+45:49.720 --> 45:54.120
+Well, as I said before we were very lucky to have you and the rest of the team of course as well and
+
+45:54.760 --> 45:59.960
+um goes without saying but all the speakers and all the audience the participants as well, so
+
+46:08.360 --> 46:09.720
+Um
+
+46:09.720 --> 46:17.000
+So, uh, are we we're still live over here that you know, you know me i'm the mike hog that I am I can't resist
+
+46:17.800 --> 46:21.720
+um throwing throwing up another screen here and uh,
+
+46:22.280 --> 46:27.000
+In fact, let's go ahead and go back to our to our crawler, right?
+
+46:30.840 --> 46:36.120
+And i'll bring back our build if it finishes and maybe we'll show making the installer as well, um
+
+46:39.480 --> 46:42.040
+But I have the cpu count turned down a little bit here
+
+46:44.200 --> 46:46.600
+Note I didn't specify minus j here
+
+46:47.400 --> 46:49.400
+um, so
+
+46:49.480 --> 46:52.840
+Over here is my automation, uh in case you do want to take a look
+
+46:52.920 --> 46:59.480
+I can at least provide the orientation of what you're looking at scrape log is probably my first thing. I want to show off
+
+46:59.800 --> 47:05.800
+um, it's not beautiful, but this works, uh, pretty well for me to
+
+47:06.280 --> 47:12.440
+Get a sense if something might have changed in terms of how many warnings or errors are happening
+
+47:13.080 --> 47:18.620
+When I build emacs, so I have this awful automation going on and I frequently want to answer the question
+
+47:19.260 --> 47:23.500
+You know, what's the change rate in uh warnings or what have you?
+
+47:24.140 --> 47:26.140
+So this kind of gives me a count
+
+47:26.460 --> 47:28.220
+of that
+
+47:28.220 --> 47:29.820
+um
+
+47:29.820 --> 47:31.820
+so from there, uh
+
+47:32.460 --> 47:36.860
+Crude ci is the script. We're we're watching run in the other pane
+
+47:37.980 --> 47:39.900
+um, you can
+
+47:39.900 --> 47:41.900
+see it's uh
+
+47:42.780 --> 47:45.020
+Just starting to do its thing again
+
+47:48.860 --> 47:50.860
+And uh
+
+47:51.420 --> 47:58.620
+The make file I mentioned this is a top-down rewrite of everything else that i've done it has some bugs right now
+
+48:00.300 --> 48:02.460
+um the uh
+
+48:03.660 --> 48:04.460
+the
+
+48:04.460 --> 48:09.660
+Build distribution is the main script that I use for my personal builds
+
+48:10.140 --> 48:13.260
+This is what is run by the crude ci script
+
+48:13.820 --> 48:16.380
+Uh, it has a fun tie-in to this
+
+48:16.700 --> 48:18.700
+Uh web interface here
+
+48:19.340 --> 48:24.380
+Um where we can you don't need the port number when you go to it. That's just if i'm going to post
+
+48:25.260 --> 48:27.260
+um the
+
+48:28.380 --> 48:30.380
+Uh
+
+48:31.100 --> 48:37.980
+Blah blah blah blah this this script is really long and complicated and probably needs some diving into but you can see that
+
+48:38.540 --> 48:44.540
+Um, one of the complexities I have to deal with is that i'm going to need a something in the format of an emacs dash
+
+48:44.860 --> 48:46.860
+version for strategic
+
+48:47.100 --> 48:49.580
+um nsys reasons so
+
+48:50.140 --> 48:51.900
+uh
+
+48:51.900 --> 48:56.460
+It takes care of kind of every complexity and stuff that I mentioned today in some respects
+
+48:57.020 --> 48:59.980
+Um, as does the make file build release
+
+49:00.780 --> 49:01.660
+is
+
+49:01.660 --> 49:04.160
+um another fairly useful
+
+49:05.240 --> 49:11.580
+Incarnation of this this is just focused on the release process and this does work
+
+49:12.060 --> 49:14.060
+for example to create the
+
+49:14.380 --> 49:15.420
+the
+
+49:15.420 --> 49:17.420
+You know like I like well I could
+
+49:17.980 --> 49:23.760
+Like uh for like files as far as I can tell so what are currently posted for emacs 29.1
+
+49:24.860 --> 49:26.860
+and the release candidate
+
+49:27.660 --> 49:28.860
+um
+
+49:28.860 --> 49:34.300
+So i'll probably use that next time and if it's still like for like i'll probably post the ones that came from this
+
+49:35.580 --> 49:37.340
+um
+
+49:37.340 --> 49:44.940
+Uh building a tree sitter I make some dlls there if you're looking for hints on how to get going or just simply
+
+49:45.580 --> 49:49.900
+A huge long list of git repositories that make grammars you can use
+
+49:50.780 --> 49:52.780
+That is here as well
+
+49:53.580 --> 49:56.620
+um, finally I mentioned I have a
+
+49:58.300 --> 50:03.980
+Um, I have a a website where I publish my own personal snapshots that I make
+
+50:04.540 --> 50:07.820
+That folder full of install directories, but all of the usual
+
+50:08.360 --> 50:13.920
+GNU style binary distributables including the source code and the source code for the dependencies
+
+50:14.860 --> 50:15.980
+um
+
+50:15.980 --> 50:17.820
+the
+
+50:17.820 --> 50:19.820
+uh
+
+50:20.460 --> 50:23.180
+So this program is another one of those
+
+50:24.300 --> 50:28.700
+Complicated find commands and therefore potentially the most useful thing in here to take to you
+
+50:29.340 --> 50:33.340
+Um, and here i'm deleting binaries older than 17 years
+
+50:34.220 --> 50:36.220
+uh everything except
+
+50:36.220 --> 50:37.500
+the uh
+
+50:37.500 --> 50:41.020
+No deps file and the sources of it. You'll find on my website
+
+50:41.580 --> 50:44.140
+Currently those indefinitely i'll probably roll out
+
+50:44.760 --> 50:46.760
+120 days or something
+
+50:47.020 --> 50:49.020
+um for those eventually
+
+50:53.580 --> 50:57.340
+Oh, uh, I can talk about this one even um the uh
+
+50:57.740 --> 50:58.700
+The
+
+50:58.700 --> 51:02.380
+So here you'll see the two branches that i'm tracking the job of this script
+
+51:02.780 --> 51:07.020
+Is this runs on the website? I call it with a like a remote rsync
+
+51:07.740 --> 51:08.620
+uh type
+
+51:08.620 --> 51:11.420
+Uh, or an ssh remote ssh command
+
+51:12.060 --> 51:13.740
+um
+
+51:13.740 --> 51:18.220
+And right after the rsync r syncing up any new emacs that I built
+
+51:19.020 --> 51:20.540
+and
+
+51:20.540 --> 51:22.540
+uh, it's
+
+51:23.180 --> 51:29.920
+Uh, its job is to update my fancy directory indexing so let's look at corwin's website
+
+51:31.580 --> 51:35.040
+Here's my emacs 29 folder
+
+51:44.780 --> 51:46.780
+We have about two more minutes corwin
+
+51:47.420 --> 51:52.380
+Yeah, it'll take that entire two minutes to uh, load this directory because I am
+
+51:52.940 --> 51:56.140
+Because I have not yet ever pruned any of these dang binaries
+
+51:56.380 --> 52:01.500
+So every version of uh emacs 29 that i've ever made for myself is probably here
+
+52:02.540 --> 52:03.580
+nice
+
+52:03.580 --> 52:09.660
+Uh, I strongly recommend that you bookmark this folder if you're using these for something and you always want the latest
+
+52:09.980 --> 52:17.500
+Um, so here this particular, uh latest 29 emacs 29 latest or simply replace the 29 with 30 to get those
+
+52:18.220 --> 52:19.080
+uh
+
+52:19.080 --> 52:20.140
+alas
+
+52:20.140 --> 52:22.620
+No, no such luck for tree setter
+
+52:23.180 --> 52:25.180
+but if we look at
+
+52:25.740 --> 52:27.740
+that
+
+52:36.380 --> 52:39.100
+Live this long without making a typo now look at me
+
+52:40.220 --> 52:42.220
+Okay
+
+52:44.780 --> 52:46.780
+Oh
+
+52:51.500 --> 52:53.180
+So here, um
+
+52:53.180 --> 52:57.100
+You know, we can see the iconification and so on even in the tree sitter folder
+
+52:57.180 --> 53:01.420
+this is all i'm talking about about the fanciness that's set up by that other script that
+
+53:02.380 --> 53:06.940
+i'm showing over here and run after each time I run the upload it just
+
+53:07.900 --> 53:12.780
+Looks to see if anything's new and add some lines to the dot htaccess file
+
+53:15.900 --> 53:17.180
+Um
+
+53:17.180 --> 53:22.700
+I'm, particularly proud of this one. I'm not going to lie. Um, linking out to each each
+
+53:23.500 --> 53:27.020
+project that we're using letting us know the commit version and then
+
+53:28.300 --> 53:33.100
+For the dlls quick link out to the log and the signature file for this dll
+
+53:34.140 --> 53:36.140
+um
+
+53:37.020 --> 53:39.020
+I find that a lot just a lot
+
+53:40.540 --> 53:42.220
+More readable
+
+53:42.220 --> 53:44.060
+than uh
+
+53:44.060 --> 53:48.620
+Listing them all out individually and i'd love to do something like that on the new site
+
+53:51.180 --> 53:52.220
+So i'm
+
+53:52.220 --> 53:56.540
+I think we've got to be out of time by now. I've just got to say hey, thanks again for having me
+
+53:56.780 --> 54:01.740
+Uh for those that uh watch the talk either live or after the conference
+
+54:02.460 --> 54:05.820
+uh appreciate everyone's support to get me to the point where i'm able to
+
+54:06.540 --> 54:10.220
+Uh to do this this this cool volunteer task
+
+54:10.380 --> 54:14.220
+Uh, which is fun and easy to do and reach out to me if you're interested in helping with it
+
+54:19.020 --> 54:25.740
+Well, awesome, thanks a lot for the awesome talk corbin and uh, of course as a fellow core core organizer
+
+54:26.060 --> 54:33.280
+For our for all that you do, um in and around emacs conf and of course for uh, can we max as well? It's much appreciated
+
+54:36.140 --> 54:39.100
+Big big words from coming from you my friend
+
+54:41.740 --> 54:43.740
+Um, thanks for the kind words
+
+54:45.020 --> 54:51.660
+Cheers my pleasure. All right, and with that I think we're gonna uh wrap up the dev track here and we'll be
+
+54:52.300 --> 54:58.140
+With you again shortly in a few minutes on the gen stream the gen track for the closing remarks for today
+
+54:58.620 --> 55:01.900
+Um only for today because we're gonna be back tomorrow again as well
+
+55:02.460 --> 55:05.760
+So don't go anywhere and uh, see you on the gen track in a bit
+
+55:05.760 --> 55:07.760
+So
+
+55:28.080 --> 55:31.680
+Oh my god, I did it we got done within the time you're my hero
+
+55:31.840 --> 55:35.440
+um, and thank you so much for just keeping me honest there and uh
+
+55:36.720 --> 55:39.300
+Like helping me keep my eye on the time and such
+
+55:50.880 --> 55:53.680
+You have to look at the recording and see whether you feel like doing it again
+
+55:56.160 --> 56:01.360
+I'm sorry. I had my sound screwed up and i'm sorry if I talked over somebody I couldn't hear anything on mumble until this very
+
+56:01.360 --> 56:03.360
+moment
+
+56:03.520 --> 56:08.960
+Oh, uh because he used your webcam for it, um, like as a like a virtual webcam thingy
+
+56:09.520 --> 56:12.960
+It was low res especially when things are changing as you were
+
+56:13.520 --> 56:15.120
+scrolling around
+
+56:15.120 --> 56:20.720
+So we'll see what kind of recording we can recover from it and then you can decide whether you maybe want to clean it up
+
+56:20.720 --> 56:22.080
+with like
+
+56:22.080 --> 56:24.080
+screenshots and
+
+56:24.240 --> 56:28.960
+I recorded on this end too. We shouldn't have that problem with my recording. Thank you. Thank you. Thank you
+
+56:29.360 --> 56:31.360
+I think we're still live on the dev stream
+
+56:34.240 --> 56:37.440
+Someone could uh, thanks. Oh, yes
+
+56:38.880 --> 56:42.180
+Because uh, i'll set it to rebroadcast
+
+56:45.520 --> 56:48.480
+Yeah, I I love doing that for the closing remarks that's
+
+56:49.680 --> 56:51.680
+a fine tradition
+
+56:52.000 --> 56:55.280
+Or it's a tradition now because i'm pretty sure this means we've done it twice
+
+56:55.440 --> 56:57.440
+I
+
+57:02.560 --> 57:05.360
+Once heard that, you know, uh as a fan
+
+57:05.680 --> 57:11.680
+Meaning like a fannish is a term of endearment for a science fiction fan to another we say we're we're fans or things
+
+57:11.680 --> 57:17.440
+We do our fannish and a fannish tradition then is if you do it three times, it's tradition
+
+57:18.000 --> 57:20.000
+But um, we're on a budget here. So
+
+57:22.880 --> 57:24.880
+Nope
+
+57:25.920 --> 57:29.840
+All right, I think we should um head over to mumble and talk on mumble
+
+57:30.080 --> 57:34.640
+Um and decide and see like which big blue button room we're going to be in for closing
+
+57:35.200 --> 57:37.200
+Okay, so we're clear on bbb here
+
+57:37.760 --> 57:39.760
+Yep, I think so
+
diff --git a/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt
new file mode 100644
index 00000000..c510cc30
--- /dev/null
+++ b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt
@@ -0,0 +1,314 @@
+WEBVTT
+
+
+00:00:07.120 --> 00:00:07.359
+[Speaker 0]: Okay, folks. Thanks, Anand,
+
+00:00:11.259 --> 00:00:11.759
+for the great talk. So here is the live Q&A.
+
+00:00:22.279 --> 00:00:22.420
+Hi. Hello. I see questions being posted on
+
+00:00:23.920 --> 00:00:24.099
+the pad. Would you like me to read them out
+
+00:00:25.320 --> 00:00:25.820
+or would you prefer to read them yourself?
+
+00:00:31.880 --> 00:00:32.220
+[Speaker 1]: Okay. I'll try reading it out.
+
+00:00:33.340 --> 00:00:33.680
+If there are audio issues,
+
+00:00:35.420 --> 00:00:35.920
+[Speaker 0]: Sure, thanks.
+
+00:00:37.360 --> 00:00:37.760
+[Speaker 1]: just let me know. A lot of what you showed
+
+00:00:39.960 --> 00:00:40.280
+was the type of stuff Emacs didn't do very
+
+00:00:43.040 --> 00:00:43.200
+well. This stuff looks like it could be
+
+00:00:45.020 --> 00:00:45.239
+useful for using Emacs with a touch screen
+
+00:00:46.960 --> 00:00:47.460
+and a tablet. Have you used it for purposes
+
+00:00:53.160 --> 00:00:53.360
+like this? No right now it's more proof of
+
+00:00:58.580 --> 00:00:58.780
+concept stage so I don't use it more than you
+
+00:01:03.420 --> 00:01:03.920
+know just making some demo software.
+
+00:01:12.100 --> 00:01:12.320
+The next question is, is there a mode for
+
+00:01:15.080 --> 00:01:15.280
+using FFmpeg through Emacs or did you make it
+
+00:01:20.160 --> 00:01:20.660
+yourself? Okay so this is something that I
+
+00:01:26.800 --> 00:01:27.300
+built. So the base of it is XWidget in Emacs,
+
+00:01:28.160 --> 00:01:28.660
+which is already there.
+
+00:01:35.080 --> 00:01:35.380
+But then I had to add a few control code for
+
+00:01:42.240 --> 00:01:42.500
+controlling VLC. So ffmpeg is like a shell
+
+00:01:46.840 --> 00:01:47.340
+command that finally stitches those bits of
+
+00:01:51.780 --> 00:01:52.280
+video clips. But what actually plays is VLC,
+
+00:01:55.860 --> 00:01:56.360
+and it's not FFmpeg. Hope that's clear.
+
+00:02:03.580 --> 00:02:04.020
+The next question is these demos are always
+
+00:02:06.020 --> 00:02:06.180
+so impressive. Do you plan to upstream any of
+
+00:02:07.040 --> 00:02:07.540
+these projects into Emacs?
+
+00:02:13.940 --> 00:02:14.240
+Right now, okay, let me read the complete
+
+00:02:16.220 --> 00:02:16.320
+questions. These demos are always so
+
+00:02:17.960 --> 00:02:18.080
+impressive. Do you plan to upstream any of
+
+00:02:19.960 --> 00:02:20.280
+these projects into Emacs or to publish them
+
+00:02:21.780 --> 00:02:22.280
+as, for example, helper packages?
+
+00:02:26.480 --> 00:02:26.980
+So right now, as it stands,
+
+00:02:30.720 --> 00:02:30.940
+I personally don't intend to do that because
+
+00:02:34.900 --> 00:02:35.400
+I don't have that time but I have signed my
+
+00:02:38.720 --> 00:02:39.220
+signed assignment copyright assignment so
+
+00:02:41.600 --> 00:02:41.760
+anybody has time and motivation to do it they
+
+00:02:47.120 --> 00:02:47.620
+can pick up the code and help me with that.
+
+00:02:53.200 --> 00:02:53.700
+The next is, how did you make that electronic
+
+00:03:00.600 --> 00:03:00.860
+circuit diagram? Is there a mode with the
+
+00:03:02.560 --> 00:03:03.060
+symbols already available.
+
+00:03:08.240 --> 00:03:08.460
+Okay so electronic circuit diagram is you
+
+00:03:13.340 --> 00:03:13.520
+know the canvas mode but and what you see is
+
+00:03:19.540 --> 00:03:20.040
+the is an extension of that canvas mode which
+
+00:03:25.440 --> 00:03:25.940
+uses a symbol library.
+
+00:03:31.980 --> 00:03:32.300
+And so The only difference is you press
+
+00:03:34.160 --> 00:03:34.660
+capital L to open up that symbol library.
+
+00:03:37.700 --> 00:03:37.840
+In this case, this symbol library happens to
+
+00:03:41.380 --> 00:03:41.720
+be just a library of electronic symbols.
+
+00:03:44.640 --> 00:03:44.820
+It can be any category of symbols and then
+
+00:03:47.600 --> 00:03:48.100
+you and use it to draw on your,
+
+00:03:50.640 --> 00:03:51.140
+in the canvas major mode.
+
+00:04:02.240 --> 00:04:02.540
+Next question is, I have seen your blog post
+
+00:04:04.700 --> 00:04:04.960
+with some of these features But can you link
+
+00:04:06.280 --> 00:04:06.420
+to the repo where you are doing the
+
+00:04:07.940 --> 00:04:08.440
+development for these packages?
+
+00:04:18.899 --> 00:04:19.200
+Sure, I can do that Most of these are
+
+00:04:20.279 --> 00:04:20.779
+available on my blogs.
+
+00:04:26.200 --> 00:04:26.480
+Typically the Reddit post always has a link
+
+00:04:31.480 --> 00:04:31.680
+to my blog. But I'll post it in this 1 as
+
+00:04:31.680 --> 00:04:32.180
+well.
+
+00:04:48.480 --> 00:04:48.700
+[Speaker 0]: I'll quickly note that we have about 4 more
+
+00:04:52.540 --> 00:04:52.800
+minutes of live Q&A, but if folks have more
+
+00:04:55.320 --> 00:04:55.720
+questions, they're welcome to either continue
+
+00:04:59.060 --> 00:04:59.240
+asking on the pad or come join us here on Big
+
+00:05:02.080 --> 00:05:02.220
+Blue Button and continue chatting once the
+
+00:05:03.440 --> 00:05:03.800
+stream moves on to the next talk.
+
+00:05:03.940 --> 00:05:04.440
+Thank you.
+
+00:05:13.360 --> 00:05:13.860
+[Speaker 1]: Yes, so here's the link.
+
+00:05:23.240 --> 00:05:23.560
+And so right now, all of my development goes
+
+00:05:26.360 --> 00:05:26.600
+into a single development branch in this
+
+00:05:28.940 --> 00:05:29.140
+repository. But depending on the feature that
+
+00:05:31.500 --> 00:05:31.680
+you're looking at, you can look at that
+
+00:05:33.820 --> 00:05:33.960
+particular post and that post will have a
+
+00:05:37.120 --> 00:05:37.320
+link to the specific files that include the
+
+00:05:37.320 --> 00:05:37.820
+changes.
+
+00:06:24.236 --> 00:06:24.304
+Okay, there's a feedback.
+
+00:06:26.520 --> 00:06:26.740
+Thank you for showing so many new
+
+00:06:27.500 --> 00:06:28.000
+possibilities with Emacs.
+
+00:06:30.960 --> 00:06:31.460
+I'm glad you like those possibilities.
+
+00:06:32.540 --> 00:06:32.760
+And hopefully, you know,
+
+00:06:34.540 --> 00:06:34.740
+with Emacs, the possibilities are really
+
+00:06:38.480 --> 00:06:38.980
+endless. So I really encourage more people to
+
+00:06:41.120 --> 00:06:41.620
+explore it and, you know,
+
+00:06:49.280 --> 00:06:49.780
+try things that people have so far only been
+
+00:06:52.160 --> 00:06:52.660
+using other applications for.
+
+00:06:59.580 --> 00:07:00.080
+The next question is coming up.
+
+00:07:07.540 --> 00:07:08.040
+Okay, the PDF form filling is especially
+
+00:07:10.200 --> 00:07:10.400
+interesting. I would love to do my taxes in
+
+00:07:16.400 --> 00:07:16.620
+Emacs. Yes, In most cases you should be able
+
+00:07:18.900 --> 00:07:19.400
+to do it unless there are a lot of JavaScript
+
+00:07:20.500 --> 00:07:21.000
+involved with the PDF.
+
+00:07:24.800 --> 00:07:24.960
+For a simple form, you should be able to do
+
+00:07:24.960 --> 00:07:25.460
+it.
+
+00:08:19.480 --> 00:08:19.640
+[Speaker 0]: Okay, we have about 1 minute remaining on the
+
+00:08:21.660 --> 00:08:22.000
+live stream. If folks have any other
+
+00:08:24.960 --> 00:08:25.120
+questions, please do continue posting on the
+
+00:08:27.540 --> 00:08:27.800
+pad or come and join BigBlueButton with an
+
+00:08:28.940 --> 00:08:29.140
+ad. And thanks again, Adam,
+
+00:08:30.880 --> 00:08:31.080
+for a great talk and for the discussions and
+
+00:08:31.560 --> 00:08:32.059
+questions and answers.
+
+00:08:36.100 --> 00:08:36.600
+[Speaker 1]: Great, thanks.
diff --git a/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt
new file mode 100644
index 00000000..58121436
--- /dev/null
+++ b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.780 --> 00:03:46.400
+Draw and scribble in GNU Emacs
+
+00:03:46.400 --> 00:05:20.139
+SVG Symbols library
+
+00:05:20.140 --> 00:08:03.367
+GNU Emacs: A multimedia editor
+
+00:08:03.367 --> 00:09:34.900
+Fill PDF form using GNU Emacs
+
+00:09:34.900 --> 00:11:10.439
+Desktop and window management in GNU Emacs
+
+00:11:10.440 --> 00:11:53.033
+Screen mirroring in GNU Emacs
+
+00:11:53.033 --> 00:12:25.533
+Swipe for Text Input in GNU Emacs
+
+00:12:25.533 --> 00:12:59.433
+Formula Editor in GNU Emacs
+
+00:12:59.433 --> 00:13:09.433
+Transliteration in Emacs
+
+00:13:09.433 --> 00:13:40.000
+Social Media client - Tumblr, Reddit
+
+00:13:40.000 --> 00:13:49.567
+Comics Builder
+
+00:13:49.567 --> 00:13:59.567
+Matching game
+
+00:13:59.567 --> 00:14:10.767
+Interactive XPath Builder in GNU Emacs
+
+00:14:10.767 --> 00:14:35.233
+Interactive JSON Builder in GNU Emacs
+
+00:14:35.233 --> 00:15:26.133
+GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter
+
+00:15:26.133 --> 00:16:11.640
+Generate C header
+
+00:16:11.640 --> 00:17:07.639
+C Rename symbols
+
+00:17:07.640 --> 00:20:30.740
+SQL (offline)
diff --git a/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt
new file mode 100644
index 00000000..1f27ce57
--- /dev/null
+++ b/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt
@@ -0,0 +1,649 @@
+WEBVTT captioned by bhavin192, checked by sachac
+
+NOTE Draw and scribble in GNU Emacs
+
+00:00:00.780 --> 00:00:02.900
+Hello. In this video, we will look at
+
+00:00:02.900 --> 00:00:07.167
+drawing and scribbling in Emacs using SVG.
+
+00:00:07.167 --> 00:00:10.067
+Let's start with `canvas-mode`.
+
+00:00:10.067 --> 00:00:17.539
+We will define the width and the height.
+
+00:00:17.540 --> 00:00:19.333
+The default is polyline,
+
+00:00:19.333 --> 00:00:23.733
+which means you can scribble anything that you want.
+
+00:00:23.733 --> 00:00:30.299
+Very handy for taking quick notes.
+
+00:00:30.300 --> 00:00:32.699
+Now we will look at
+
+00:00:32.700 --> 00:00:46.333
+drawing a triangle using some lines.
+
+00:00:46.333 --> 00:00:57.267
+Okay. Now let's draw a circle.
+
+00:00:57.267 --> 00:00:58.900
+You can use the mouse to adjust
+
+00:00:58.900 --> 00:01:02.859
+the radius of the circle.
+
+00:01:02.860 --> 00:01:04.333
+There is some problem with ellipse,
+
+00:01:04.333 --> 00:01:07.939
+we will look at it at the end of the video.
+
+00:01:07.940 --> 00:01:11.767
+Now let's put up some text,
+
+00:01:11.767 --> 00:01:15.067
+a typical "Hello World".
+
+00:01:15.067 --> 00:01:19.879
+Size, let's do a 20 font size,
+
+00:01:19.880 --> 00:01:32.359
+and we will use the default font family.
+
+00:01:32.360 --> 00:01:37.433
+Next, we will look at undoing what we have drawn.
+
+00:01:37.433 --> 00:01:43.067
+Just press u for deleting the last drawn object.
+
+00:01:43.067 --> 00:01:45.799
+And you can continue pressing
+
+00:01:45.800 --> 00:01:51.959
+u for consecutive deletions.
+
+00:01:51.960 --> 00:01:54.533
+You can also make a selection of the objects
+
+00:01:54.533 --> 00:01:57.700
+on the screen using your mouse and then press u.
+
+00:01:57.700 --> 00:02:02.599
+This will delete all the objects in one go.
+
+00:02:02.600 --> 00:02:06.659
+Now we are looking at stroke color.
+
+00:02:06.660 --> 00:02:08.633
+We will use a brown stroke color
+
+00:02:08.633 --> 00:02:12.879
+for drawing our objects.
+
+00:02:12.880 --> 00:02:20.419
+Next, let's look at stroke width.
+
+00:02:20.420 --> 00:02:27.979
+We will use a width of 5.
+
+00:02:27.980 --> 00:02:41.619
+Next, let's fill up the objects with a fill color.
+
+00:02:41.620 --> 00:02:47.159
+Now we will look at zoom.
+
+00:02:47.160 --> 00:02:50.119
+Use the mouse to select a region and zoom.
+
+00:02:50.120 --> 00:02:54.359
+You can also use +, - for zooming in and out.
+
+00:02:54.360 --> 00:03:07.133
+Press 0 for resetting the zoom.
+
+00:03:07.133 --> 00:03:14.539
+Next, let's save the file,
+
+00:03:14.540 --> 00:03:19.667
+and q or Enter for exiting the canvas-mode.
+
+00:03:19.667 --> 00:03:23.760
+Now we will open the file in Emacs itself.
+
+00:03:25.220 --> 00:03:26.179
+You can see the file,
+
+00:03:26.180 --> 00:03:32.000
+you can do Control-c Control-c (`C-c C-c`).
+
+00:03:32.000 --> 00:03:44.419
+Finally, we look at ellipse.
+
+00:03:44.420 --> 00:03:46.400
+That's all for this video. Thanks!
+
+NOTE SVG Symbols library
+
+00:03:46.400 --> 00:03:48.333
+Hello. In this video, we will draw
+
+00:03:48.333 --> 00:03:52.067
+schematics using symbols from SVG library in Emacs.
+
+00:03:52.067 --> 00:03:55.000
+Press capital L to activate the symbol library
+
+00:03:55.000 --> 00:03:57.867
+that you can see on the right hand side,
+
+00:03:57.867 --> 00:04:01.959
+and place the symbol on the canvas.
+
+00:04:01.960 --> 00:04:06.639
+Let's add another register to this diagram.
+
+00:04:06.640 --> 00:04:11.819
+You can press capital R to rotate the symbol.
+
+00:04:11.820 --> 00:04:17.239
+Let's place it on the canvas.
+
+00:04:17.240 --> 00:04:31.667
+Now we will add a voltage source to the circuit.
+
+00:04:31.667 --> 00:04:33.179
+To connect the symbols,
+
+00:04:33.180 --> 00:04:36.967
+we will have to use some connecting wires.
+
+00:04:36.967 --> 00:04:39.467
+For that, press capital W
+
+00:04:39.467 --> 00:04:46.919
+to activate the connection mode.
+
+00:04:46.920 --> 00:04:48.567
+Click anywhere on the canvas
+
+00:04:48.567 --> 00:04:53.133
+to draw intermediate points, and press Esc
+
+00:04:53.133 --> 00:05:00.033
+to exit that particular connection.
+
+00:05:00.033 --> 00:05:16.633
+Let's connect other symbols too.
+
+00:05:16.633 --> 00:05:20.139
+That's all for this video. Thanks.
+
+NOTE GNU Emacs: A multimedia editor
+
+00:05:20.140 --> 00:05:22.167
+Hello. In this video, we will look at
+
+00:05:22.167 --> 00:05:24.933
+some basic multimedia editing using Emacs.
+
+00:05:24.933 --> 00:05:27.459
+Let's start a media-edit session.
+
+00:05:27.460 --> 00:05:32.000
+Let's open a video file.
+
+00:05:32.000 --> 00:05:34.100
+The left-hand side is your viewer area,
+
+00:05:34.100 --> 00:05:36.700
+and the right-hand side is your track area.
+
+00:05:36.700 --> 00:05:39.667
+In the track area, you can use normal Emacs
+
+00:05:39.667 --> 00:05:42.039
+text editing movements.
+
+00:05:42.040 --> 00:05:48.167
+Now press `C-c r` to refresh the viewer mode
+
+00:05:48.167 --> 00:05:52.767
+with the exact time frame.
+
+00:05:52.767 --> 00:05:59.433
+Now press SPC to play or pause the video.
+
+00:05:59.433 --> 00:06:03.233
+This looks like an interesting point in the video,
+
+00:06:03.233 --> 00:06:11.433
+let's track it and split it. Press Enter to do that.
+
+00:06:11.433 --> 00:06:20.733
+We will extract some 10 seconds of this video.
+
+00:06:20.733 --> 00:06:23.233
+Let's use this.
+
+00:06:23.233 --> 00:06:26.300
+Now go here and delete all these lines.
+
+00:06:26.300 --> 00:06:44.133
+Let's review our edited clip.
+
+00:06:44.133 --> 00:06:51.833
+Looks good! Now press e to export the video.
+
+00:06:51.833 --> 00:06:57.559
+Provide an output file name.
+
+00:06:57.560 --> 00:07:04.433
+This will use FFmpeg to convert, and you can
+
+00:07:04.433 --> 00:07:16.967
+output to any file format supported by FFmpeg.
+
+00:07:16.967 --> 00:07:21.900
+Okay. Let's open up shell and view this
+
+00:07:21.900 --> 00:07:57.159
+video file in an external video player.
+
+00:07:57.160 --> 00:08:03.367
+That's all for this video. Thanks.
+
+NOTE Fill PDF form using GNU Emacs
+
+00:08:03.367 --> 00:08:05.567
+Hello. In this video, we will look at
+
+00:08:05.567 --> 00:08:09.760
+editing a PDF form using GNU Emacs.
+
+00:08:09.760 --> 00:08:13.840
+To start, we have to enable the annotation.
+
+00:08:13.840 --> 00:08:18.533
+Then we can use Tab to move forward and Shift+Tab
+
+00:08:18.533 --> 00:08:22.480
+to move backwards through the fields.
+
+00:08:22.480 --> 00:08:25.967
+To edit a field, we press e.
+
+00:08:25.967 --> 00:08:33.580
+So let's edit a text box. We'll call it 'city'.
+
+00:08:33.580 --> 00:08:35.840
+Next, we will edit a drop-down.
+
+00:08:35.840 --> 00:08:38.680
+Again, press e, and you get a select.
+
+00:08:38.680 --> 00:08:45.833
+Use the Minibuffer to select one of the values.
+
+00:08:45.833 --> 00:08:48.500
+Let's select 'France'.
+
+08:48.500 --> 00:08:52.180
+Now let's edit a radio box.
+
+08:52.180 --> 00:08:55.899
+A checkbox or a radio box can be toggled using t.
+
+00:08:55.900 --> 00:08:58.660
+You can disable…
+
+08:58.660 --> 00:09:05.140
+Now let's save the file, `doc-view-save-form`.
+
+00:09:05.140 --> 00:09:08.360
+It will ask for a file name.
+
+00:09:08.360 --> 00:09:13.400
+Let's call it `filled1.pdf`. If the file exists,
+
+00:09:13.400 --> 00:09:17.260
+it will ask you if you want to overwrite.
+
+09:17.260 --> 00:09:21.460
+Now let's verify this new file.
+
+09:21.460 --> 00:09:27.160
+In Firefox, we'll copy this file name, call it filled1.
+
+00:09:27.160 --> 00:09:29.100
+Let's verify the values.
+
+09:29.100 --> 00:09:32.620
+You have city, France and Driving License selected.
+
+09:32.620 --> 00:09:34.900
+That's all for this video. Thanks.
+
+NOTE Desktop and window management in GNU Emacs
+
+09:34.900 --> 00:09:37.659
+Hello. In this video, we will look at
+
+00:09:37.660 --> 00:09:40.460
+desktop and window management in GNU Emacs.
+
+09:40.460 --> 00:09:47.740
+We'll start with `task-view`.
+
+09:47.740 --> 00:09:50.467
+Top row shows all the desktops,
+
+00:09:50.467 --> 00:09:54.400
+and rest of the images are the active windows
+
+00:09:54.400 --> 00:09:59.300
+in that particular desktop.
+
+00:09:59.300 --> 00:10:09.159
+You can tap to select
+
+00:10:09.160 --> 00:10:13.320
+and double tap to activate a particular window.
+
+00:10:13.320 --> 00:10:16.767
+You can use m to move selected windows
+
+00:10:16.767 --> 00:10:25.099
+to any of the desktops at the top.
+
+00:10:25.100 --> 00:10:29.320
+Let's check the third desktop.
+
+00:10:29.320 --> 00:10:49.980
+Let's bring it back to the second desktop.
+
+10:49.980 --> 00:10:51.300
+The best part,
+
+10:51.300 --> 00:10:54.799
+you can select multiple windows
+
+00:10:54.800 --> 00:10:59.979
+and form a group by pressing g.
+
+00:10:59.980 --> 00:11:04.867
+Then you can select any of the windows
+
+00:11:04.867 --> 00:11:07.639
+in this group to activate the complete group.
+
+00:11:07.640 --> 00:11:10.439
+That's all for this video. Thanks.
+
+NOTE Screen mirroring in GNU Emacs
+
+00:11:10.440 --> 00:11:12.433
+Hello. In this video, we will look at
+
+00:11:12.433 --> 00:11:14.279
+screen mirroring using GNU Emacs.
+
+00:11:14.280 --> 00:11:18.779
+Run `wfd`. Select an interface.
+
+00:11:18.780 --> 00:11:20.967
+Now it will scan for all the available devices
+
+00:11:20.967 --> 00:11:24.800
+for screen mirroring.
+
+00:11:24.800 --> 00:11:30.399
+I'll select my TV, which is an LG WebOS TV.
+
+00:11:30.400 --> 00:11:38.720
+If you don't decline, it will start streaming.
+
+00:11:38.720 --> 00:11:45.140
+Let's change some buffer to check the visuals.
+
+11:45.140 --> 00:11:50.219
+To terminate the session, just click on quit.
+
+00:11:50.220 --> 00:11:53.033
+That's all for this video. Thanks.
+
+NOTE Swipe for Text Input in GNU Emacs
+
+00:11:53.033 --> 00:12:25.533
+[Using Sweep to swipe and type "as you like it."]
+
+NOTE Formula Editor in GNU Emacs
+
+00:12:25.533 --> 00:12:39.900
+[Formula Editor]
+
+00:12:39.900 --> 00:12:45.033
+[Typing fractions in the formula]
+
+00:12:45.033 --> 00:12:59.433
+[Adding brackets and an exponent]
+
+NOTE Transliteration in Emacs
+
+00:12:59.433 --> 00:13:05.200
+[Hindi (Devanagari script) Phonetic typing]
+
+00:13:05.200 --> 00:13:09.433
+[Phonetic typing Gujarati, Bangla, Kannada, and Tamil]
+
+NOTE Social Media client - Tumblr, Reddit
+
+00:13:09.433 --> 00:13:19.533
+[Browsing Reddit in Emacs]
+
+00:13:19.533 --> 00:13:29.533
+[Browsing Tumblr in Emacs]
+
+00:13:29.533 --> 00:13:40.000
+[Browsing X (Twitter) in Emacs]
+
+NOTE Comics Builder
+
+00:13:40.000 --> 00:13:49.567
+[Generating comic from a text script]
+
+NOTE Matching game
+
+00:13:49.567 --> 00:13:59.567
+[Matching color names with color boxes]
+
+NOTE Interactive XPath Builder in GNU Emacs
+
+00:13:59.567 --> 00:14:01.833
+[Running `xpath-builder` on an XML file]
+
+00:14:01.833 --> 00:14:10.767
+[Filtering `title`, `para`, and `author` from the XML]
+
+NOTE Interactive JSON Builder in GNU Emacs
+
+00:14:10.767 --> 00:14:29.200
+[Filtering `father`, `father.name`, `children`
+
+00:14:29.200 --> 00:14:35.233
+`children[1]` from a JSON using JSON Builder]
+
+NOTE GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter
+
+00:14:35.233 --> 00:14:37.633
+Hello. In this video, we will look at
+
+00:14:37.633 --> 00:14:41.659
+generating getters and setters in Java using Emacs.
+
+00:14:41.660 --> 00:14:46.233
+We will run `srecode-getset-dialog`.
+
+00:14:46.233 --> 00:14:48.767
+We will get an option to select particular fields,
+
+00:14:48.767 --> 00:14:51.833
+you can expand and collapse.
+
+00:14:51.833 --> 00:14:54.100
+You can select all or deselect all,
+
+00:14:54.100 --> 00:14:56.386
+or you can choose any particular getter.
+
+00:14:56.386 --> 00:15:02.633
+So let's do protected version of this. Here you go.
+
+00:15:02.633 --> 00:15:06.067
+If you want to generate for other fields,
+
+00:15:06.067 --> 00:15:08.300
+you can re-run it.
+
+00:15:08.300 --> 00:15:11.267
+You can check the one that you have already
+
+00:15:11.267 --> 00:15:13.100
+generated is not there.
+
+00:15:13.100 --> 00:15:22.300
+Now select all, and you can see rest of the
+
+00:15:22.300 --> 00:15:23.933
+getters and setters have been generated.
+
+00:15:23.933 --> 00:15:26.133
+That's all for this video. Thanks.
+
+NOTE Generate C header
+
+00:15:26.133 --> 00:16:11.640
+[Generating C headers using `srecode-gen-header`]
+
+NOTE C Rename symbols
+
+00:16:11.640 --> 00:16:13.833
+Hello. In this video, we will look at
+
+00:16:13.833 --> 00:16:17.633
+renaming method across multiple files in a project.
+
+00:16:17.633 --> 00:16:24.639
+Let's start with `semantic-symref-symbol`.
+
+00:16:24.640 --> 00:16:26.800
+Now we have the references.
+
+00:16:26.800 --> 00:16:35.399
+Let's use the menu to open all these occurrences.
+
+00:16:35.400 --> 00:16:38.433
+To rename it, we have to use
+
+00:16:38.433 --> 00:16:41.919
+"Rename Symbol in Open hits."
+
+00:16:41.920 --> 00:16:46.439
+Let's rename it to underscore 1 (`_1`).
+
+00:16:46.440 --> 00:16:57.719
+We will verify it by compiling the project.
+
+00:16:57.720 --> 00:17:00.300
+Let's open the `*Messages*` buffer to see the results
+
+00:17:00.300 --> 00:17:04.167
+more clearly. No errors.
+
+00:17:04.167 --> 00:17:07.639
+That's all for this video. Thanks.
+
+NOTE SQL (offline)
+
+00:17:07.640 --> 00:17:09.733
+Hello. In this video, we will look at
+
+00:17:09.733 --> 00:17:12.439
+SQL editing with Semantic.
+
+00:17:12.440 --> 00:17:16.619
+We will define a schema in this SQL document.
+
+00:17:16.620 --> 00:17:27.000
+Let's create a table.
+
+00:17:27.000 --> 00:17:30.267
+We get already existing tables
+
+00:17:30.267 --> 00:17:38.533
+in the current document.
+
+00:17:38.533 --> 00:17:57.033
+It also supports auto-completion of some keywords.
+
+00:17:57.033 --> 00:18:00.900
+Now we can do some queries on the tables.
+
+00:18:00.900 --> 00:18:03.333
+We have `SELECT` as the keyword or the SQL,
+
+00:18:03.333 --> 00:18:06.833
+so we will select the SQL.
+
+00:18:06.833 --> 00:18:13.559
+Here we have all the tables existing in this schema.
+
+00:18:13.560 --> 00:18:25.633
+We can also use an alias for completions.
+
+00:18:25.633 --> 00:18:31.267
+Now let's look at a more complex example.
+
+00:18:31.267 --> 00:18:43.367
+We will try to do a join on two tables.
+
+00:18:43.367 --> 00:19:06.600
+Let's add a `WHERE` clause.
+
+00:19:06.600 --> 00:19:23.333
+Next, let's do insert.
+
+00:19:23.333 --> 00:19:27.967
+You can just click on Tab to go to the next field.
+
+00:19:27.967 --> 00:19:30.700
+Let's fill in the columns.
+
+00:19:30.700 --> 00:19:32.667
+And do a Tab to go to the values
+
+00:19:32.667 --> 00:19:37.000
+and add the corresponding values.
+
+00:19:37.000 --> 00:19:48.033
+Finally, an update.
+
+00:19:48.033 --> 00:20:00.700
+Now we will try to delete this
+
+00:20:00.700 --> 00:20:07.333
+with a `WHERE col11 = 4`.
+
+00:20:07.333 --> 00:20:16.267
+Lastly, let's try dropping the table.
+
+00:20:16.267 --> 00:20:21.867
+That's all for this video. Thanks.
+
+00:20:21.867 --> 00:20:30.740
+Slide with the text "Let's Make Computing Personal."
diff --git a/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt
new file mode 100644
index 00000000..44f645f9
--- /dev/null
+++ b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt
@@ -0,0 +1,893 @@
+WEBVTT
+
+
+00:00:00.060 --> 00:00:01.400
+[Speaker 0]: All right, I've started the recording,
+
+00:00:01.400 --> 00:00:03.240
+so Sasha, you don't need to worry about this.
+
+00:00:03.240 --> 00:00:04.500
+Hi Jeremy, how are you doing?
+
+00:00:04.779 --> 00:00:07.160
+[Speaker 1]: I'm doing great, how about you?
+
+00:00:08.039 --> 00:00:09.380
+[Speaker 0]: I am also doing great,
+
+00:00:09.380 --> 00:00:11.780
+I am feeling replenished after this lunch
+
+00:00:11.780 --> 00:00:14.179
+break and I am happy to go back for 4 more
+
+00:00:15.900 --> 00:00:16.940
+[Speaker 1]: Me too. Let me
+
+00:00:14.179 --> 00:00:17.303
+[Speaker 0]: hours of conferences. just,
+
+00:00:17.303 --> 00:00:20.200
+yeah great, Let me just put up the questions.
+
+00:00:20.660 --> 00:00:22.440
+So Jeremy is going to read the questions and
+
+00:00:22.440 --> 00:00:24.380
+answer them and I will be doing jazz hands in
+
+00:00:24.380 --> 00:00:26.599
+the background or provide any bits of
+
+00:00:26.599 --> 00:00:28.860
+information I may, considering that Orgrim
+
+00:00:28.860 --> 00:00:30.080
+has been mentioned during the presentation
+
+00:00:30.080 --> 00:00:31.980
+and everyone's going to want to ask me.
+
+00:00:35.640 --> 00:00:37.940
+at... Show me? Yeah, go.
+
+00:00:35.080 --> 00:00:39.280
+[Speaker 1]: So I'm looking I'm looking at the,
+
+00:00:39.280 --> 00:00:41.160
+do you think the line numbers for writing
+
+00:00:41.160 --> 00:00:43.220
+documents is kind of a distraction,
+
+00:00:43.260 --> 00:00:47.280
+especially for notes? No,
+
+00:00:47.860 --> 00:00:50.300
+I do software development and that left
+
+00:00:51.180 --> 00:00:53.160
+fringe is kind of invisible,
+
+00:00:53.680 --> 00:00:56.260
+but I do like to use jump to line.
+
+00:00:56.320 --> 00:00:59.580
+So I just bind that to control L and it's
+
+00:00:59.580 --> 00:01:01.200
+helpful to just see that.
+
+00:01:02.980 --> 00:01:04.900
+So no, I haven't noticed that.
+
+00:01:05.500 --> 00:01:07.540
+There are other ways to jump around in Emacs,
+
+00:01:07.540 --> 00:01:10.140
+but I like to have many different ways.
+
+00:01:11.000 --> 00:01:17.120
+So, yeah. Then how do you manage private and
+
+00:01:17.120 --> 00:01:18.840
+public data with your Zettelkasten?
+
+00:01:20.820 --> 00:01:23.440
+1 of my blockers on putting my Zettelkasten
+
+00:01:23.600 --> 00:01:26.240
+on the web is I don't want everything to be
+
+00:01:26.240 --> 00:01:28.860
+public, especially fleeting notes.
+
+00:01:31.360 --> 00:01:36.500
+So 1 thing is I only explicitly export a file
+
+00:01:36.560 --> 00:01:39.380
+to Hugo and I have that,
+
+00:01:39.380 --> 00:01:41.500
+I can like, I can export this.
+
+00:01:41.520 --> 00:01:43.380
+That doesn't show up very well.
+
+00:01:44.540 --> 00:01:50.280
+So it's export probably export org to take on
+
+00:01:50.280 --> 00:01:52.860
+rules and we'll export the buffer.
+
+00:01:53.760 --> 00:01:57.040
+And then any that I referenced,
+
+00:01:57.080 --> 00:01:58.300
+like these are all links,
+
+00:01:58.660 --> 00:02:04.380
+any notes that are not public will be
+
+00:02:04.380 --> 00:02:06.480
+exported as the text, but there won't be a
+
+00:02:06.480 --> 00:02:10.160
+link to it. So it's having the very
+
+00:02:10.160 --> 00:02:12.140
+deliberate, this is going up.
+
+00:02:13.040 --> 00:02:15.080
+And so I send it over into Hugo,
+
+00:02:15.900 --> 00:02:17.200
+which is its own repository,
+
+00:02:18.700 --> 00:02:21.300
+and either massage it there or whatnot.
+
+00:02:22.800 --> 00:02:25.760
+Is that any further questions on that 1?
+
+00:02:27.980 --> 00:02:30.200
+[Speaker 0]: I don't think so.
+
+00:02:33.940 --> 00:02:36.940
+[Speaker 1]: Is there anything special you're using from
+
+00:02:36.940 --> 00:02:38.960
+org to Hugo markdown? This looks like a
+
+00:02:38.960 --> 00:02:41.520
+really nice setup. I like to give it a try.
+
+00:02:43.840 --> 00:02:47.420
+Yes, there I have a bespoke build process.
+
+00:02:48.900 --> 00:02:50.100
+Having started in WordPress,
+
+00:02:50.280 --> 00:02:51.320
+working through Jekyll,
+
+00:02:51.460 --> 00:02:54.200
+going to Hugo, and then switching from
+
+00:02:54.200 --> 00:02:57.740
+Markdown to org mode, I've backed into this
+
+00:02:57.740 --> 00:02:59.180
+private public Zettelkasten,
+
+00:03:00.140 --> 00:03:04.840
+which is really nice. And I have added quite
+
+00:03:04.840 --> 00:03:08.000
+a bit of code. There's my dog.
+
+00:03:15.520 --> 00:03:16.020
+[Speaker 0]: blogging.
+
+00:03:10.640 --> 00:03:20.720
+[Speaker 1]: In my So I have, how do I export like side
+
+00:03:20.720 --> 00:03:22.800
+notes because I want I have marginalia
+
+00:03:23.200 --> 00:03:24.780
+instead of like the footnotes,
+
+00:03:24.940 --> 00:03:27.080
+but I still use org mode footnotes.
+
+00:03:27.520 --> 00:03:29.700
+And so I've got a bunch of these things and
+
+00:03:29.700 --> 00:03:32.800
+this is all available up on GitHub And I'll
+
+00:03:32.800 --> 00:03:34.700
+provide a link in the document.
+
+00:03:36.740 --> 00:03:42.280
+Yeah, so there's quite a bit of making the
+
+00:03:42.280 --> 00:03:44.440
+export work how I want it.
+
+00:03:45.040 --> 00:03:48.840
+And I've been kind of fiddling with also
+
+00:03:48.840 --> 00:03:51.560
+improving like LaTeX or PDF export.
+
+00:03:54.720 --> 00:03:59.080
+So yeah, I have a long running to do item to
+
+00:03:59.480 --> 00:04:02.880
+fully lay out my bespoke build process.
+
+00:04:02.920 --> 00:04:04.680
+Because once it gets to Hugo,
+
+00:04:04.960 --> 00:04:07.440
+there's also additional work that I do to
+
+00:04:07.440 --> 00:04:11.820
+compile what is kind of a personal,
+
+00:04:12.340 --> 00:04:13.620
+like a digital garden-ish,
+
+00:04:15.160 --> 00:04:16.940
+it's really a blog focused 1.
+
+00:04:18.160 --> 00:04:28.080
+So yeah, it's at Jeremy F on GitHub at dot
+
+00:04:28.080 --> 00:04:33.060
+Emacs. And you'll be looking for JF
+
+00:04:33.200 --> 00:04:36.300
+blogging.l that has some of this.
+
+00:04:37.360 --> 00:04:42.580
+Also jforgmode.l will have some of that.
+
+00:04:45.400 --> 00:04:49.540
+Yeah, I wanna circle back to that,
+
+00:04:49.540 --> 00:04:51.560
+anything to prevent private links from
+
+00:04:51.560 --> 00:04:54.220
+getting accidentally being made publicly
+
+00:04:54.560 --> 00:05:02.440
+accessible. Yes. So previous to using denote,
+
+00:05:02.440 --> 00:05:06.480
+I also used org-roam. So I have this idea of
+
+00:05:06.480 --> 00:05:12.560
+a node in org-roam has roam refs.
+
+00:05:13.360 --> 00:05:15.660
+And org-roam is much more robust about that.
+
+00:05:15.660 --> 00:05:17.880
+So anytime you mention a ref,
+
+00:05:18.740 --> 00:05:20.300
+it will count it as a backlink.
+
+00:05:20.820 --> 00:05:23.700
+So for example, if my node was my blog,
+
+00:05:23.860 --> 00:05:25.700
+take on rules, anytime,
+
+00:05:26.000 --> 00:05:30.420
+anywhere in my org Rome repository,
+
+00:05:30.700 --> 00:05:32.120
+I mentioned takeonrules.com,
+
+00:05:33.280 --> 00:05:34.980
+it would treat it as a backlink.
+
+00:05:35.740 --> 00:05:37.980
+So from that Rome refs,
+
+00:05:39.780 --> 00:05:45.640
+I have a, I will interrogate,
+
+00:05:45.720 --> 00:05:47.800
+and this is not the function for I will look
+
+00:05:47.800 --> 00:05:50.940
+at the node to see does it have a Rome ref
+
+00:05:51.040 --> 00:05:53.760
+and if it does I will treat it as a public
+
+00:05:53.760 --> 00:05:58.180
+link. So I don't I haven't bled out any
+
+00:05:59.060 --> 00:06:01.620
+private information because again going back
+
+00:06:01.620 --> 00:06:06.000
+to I only publish a document and the document
+
+00:06:06.340 --> 00:06:09.060
+I'm explicitly doing so and then my process
+
+00:06:09.220 --> 00:06:12.720
+filters out any links that do not have public
+
+00:06:12.720 --> 00:06:17.140
+URLs. It will just dump it in there as maybe
+
+00:06:17.140 --> 00:06:20.640
+a span with a ref class of it so that I can
+
+00:06:20.640 --> 00:06:22.840
+kind of know that that came from there.
+
+00:06:29.600 --> 00:06:33.740
+Yes, So the font I am using is,
+
+00:06:36.820 --> 00:06:38.460
+so this is another font.
+
+00:06:38.620 --> 00:06:41.140
+What font were you using in EWW?
+
+00:06:42.940 --> 00:06:50.420
+I think I'm using IOS Becca and ET Bembo.
+
+00:06:51.700 --> 00:06:53.180
+[Speaker 0]: Okay, show me your EWW.
+
+00:06:53.560 --> 00:06:55.360
+If we are doing full ricing setup,
+
+00:06:55.440 --> 00:06:58.440
+I can recognize Yosefka just by looking at
+
+00:06:58.440 --> 00:06:58.940
+it.
+
+00:06:50.640 --> 00:07:01.300
+[Speaker 1]: So let's... Yeah, so yeah,
+
+00:07:01.300 --> 00:07:06.240
+ET Bembo, I'm using these 2 fonts as kind of
+
+00:07:06.240 --> 00:07:09.260
+my anchor. So the variable pitch is ETBembo.
+
+00:07:10.240 --> 00:07:13.640
+My blog started off with a Tufta style CSS
+
+00:07:14.100 --> 00:07:16.360
+and I really pared it down and got rid of any
+
+00:07:16.360 --> 00:07:19.940
+of the additional fonts because they can be
+
+00:07:19.940 --> 00:07:21.580
+used as trackers. And I'm like,
+
+00:07:21.580 --> 00:07:24.020
+nope, you decide what font you want for your
+
+00:07:24.020 --> 00:07:26.420
+browser. I don't need to tell you what looks
+
+00:07:26.420 --> 00:07:33.680
+good for you. Yeah, so the story of Take On
+
+00:07:33.680 --> 00:07:37.480
+Rules, I have to thank my partner and lovely
+
+00:07:37.480 --> 00:07:41.180
+wife for that. She kind of nudged me to do
+
+00:07:41.180 --> 00:07:43.080
+some blogging, and we spent some time
+
+00:07:43.080 --> 00:07:45.160
+thinking about it. And originally,
+
+00:07:45.160 --> 00:07:48.220
+it started off as writing about rules for
+
+00:07:48.700 --> 00:07:51.060
+role-playing games or tabletop games.
+
+00:07:51.820 --> 00:07:54.860
+And it has extended far beyond that.
+
+00:07:54.960 --> 00:07:56.760
+The blog, as I've shifted,
+
+00:07:56.920 --> 00:07:58.660
+as I think I mentioned in the presentation,
+
+00:07:59.060 --> 00:08:01.640
+as I've shifted towards an everything and
+
+00:08:01.640 --> 00:08:05.180
+nothing approach, the blog is anything I want
+
+00:08:05.180 --> 00:08:06.240
+to write about anymore.
+
+00:08:06.980 --> 00:08:09.440
+There's haikus up there with some regularity.
+
+00:08:10.080 --> 00:08:17.280
+So the name is now a relic of a past.
+
+00:08:18.340 --> 00:08:21.680
+So yeah, the thing and nothing is,
+
+00:08:22.360 --> 00:08:24.640
+and I put that in the about on my blog.
+
+00:08:25.640 --> 00:08:29.440
+So it's, I highly encourage like,
+
+00:08:29.440 --> 00:08:34.440
+I feel great. Once I like said,
+
+00:08:34.440 --> 00:08:36.740
+oh, I don't have to write this towards a
+
+00:08:36.740 --> 00:08:40.100
+topical blog post or like what the topic is,
+
+00:08:40.380 --> 00:08:44.120
+it freed it up. And I know that it comes at a
+
+00:08:44.800 --> 00:08:47.500
+potential compromise because it's very much
+
+00:08:47.500 --> 00:08:51.960
+me being a voice up there instead of
+
+00:08:51.960 --> 00:08:53.760
+something that is curated and filtered
+
+00:08:53.760 --> 00:08:56.060
+through a specific channel like I could have
+
+00:08:56.060 --> 00:08:59.340
+a technical blog but I decided I'm just gonna
+
+00:08:59.340 --> 00:09:02.420
+tag it as programming or emacs and let you
+
+00:09:02.420 --> 00:09:04.840
+find it and you can subscribe to the rss
+
+00:09:04.920 --> 00:09:07.360
+feeds of each tag that you find applicable
+
+00:09:10.120 --> 00:09:13.840
+[Speaker 0]: right thank you so we are we are at the last
+
+00:09:13.840 --> 00:09:16.100
+question on the pad but I see that some
+
+00:09:16.100 --> 00:09:18.480
+people have joined us on the blue button.
+
+00:09:18.480 --> 00:09:22.420
+So, hi everyone! We have about 6 minutes
+
+00:09:22.420 --> 00:09:24.220
+until we need to go to the next talk,
+
+00:09:24.220 --> 00:09:26.460
+but if anyone has a question on the blue
+
+00:09:26.460 --> 00:09:28.780
+button, I'm thinking about James who's joined
+
+00:09:28.780 --> 00:09:32.780
+us and who was kind enough to drop a thank
+
+00:09:32.780 --> 00:09:33.940
+you line on the blue button.
+
+00:09:33.940 --> 00:09:35.460
+Do you want to unmute yourself and ask a
+
+00:09:35.460 --> 00:09:39.520
+question maybe? I'm not putting pressure by
+
+00:09:39.520 --> 00:09:41.680
+the way, I don't feel like you need to but it
+
+00:09:41.870 --> 00:09:44.060
+just... I speak all the time otherwise I'm
+
+00:09:44.060 --> 00:09:45.720
+very happy to spend time with our speakers
+
+00:09:45.720 --> 00:09:48.700
+you know but you know EmacsConf it's about,
+
+00:09:49.400 --> 00:09:51.300
+as Sasha told you during the intro,
+
+00:09:51.540 --> 00:09:54.180
+it's about making people take things,
+
+00:09:54.240 --> 00:09:56.100
+brilliant things out of their mind and put
+
+00:09:56.100 --> 00:09:57.840
+them outside in the public.
+
+00:09:57.940 --> 00:10:00.660
+And for us, you know, we get to see the talk
+
+00:10:00.660 --> 00:10:01.720
+evolve, we talk with people.
+
+00:10:01.720 --> 00:10:03.840
+So for us we are already quite cognizant of
+
+00:10:03.840 --> 00:10:06.260
+the topic and the point is not for us hosts
+
+00:10:06.360 --> 00:10:09.780
+to ask questions, it's mostly for you to ask
+
+00:10:09.780 --> 00:10:11.580
+questions and then we worry about all the
+
+00:10:11.580 --> 00:10:12.940
+fancy stuff in the background.
+
+00:10:13.900 --> 00:10:16.080
+Otherwise you damn well know I will ask
+
+00:10:16.080 --> 00:10:18.660
+questions about org-roam,
+
+00:10:18.900 --> 00:10:20.460
+about links, and nodes in general,
+
+00:10:20.460 --> 00:10:22.100
+because that's my bread and butter.
+
+00:10:24.720 --> 00:10:27.440
+[Speaker 1]: Yeah, I should add, like,
+
+00:10:27.440 --> 00:10:31.820
+the process of migrating the data from a
+
+00:10:31.820 --> 00:10:35.220
+WordPress export to markdown to org mode by
+
+00:10:35.220 --> 00:10:39.680
+way of Pandoc was, it was really insightful
+
+00:10:39.720 --> 00:10:42.900
+to help me understand how I want the data to
+
+00:10:42.900 --> 00:10:47.580
+flow and how I could create a repository for
+
+00:10:47.580 --> 00:10:50.940
+me of information and 1 that I could then
+
+00:10:50.940 --> 00:10:52.540
+send out into the world,
+
+00:10:52.540 --> 00:10:53.600
+the public information,
+
+00:10:54.240 --> 00:10:58.160
+while not having to worry about the private
+
+00:10:58.460 --> 00:11:00.280
+things that I might want to keep.
+
+00:11:01.620 --> 00:11:04.240
+So it was that process of just working
+
+00:11:04.240 --> 00:11:08.940
+through it to reflect on how I'm writing and
+
+00:11:08.940 --> 00:11:11.360
+what I started using writing for.
+
+00:11:12.040 --> 00:11:14.040
+I think Richard Feynman said,
+
+00:11:14.040 --> 00:11:15.680
+no, writing is my thinking.
+
+00:11:15.680 --> 00:11:17.740
+What I wrote is thinking.
+
+00:11:18.240 --> 00:11:21.480
+So it has helped to really frame that.
+
+00:11:22.800 --> 00:11:24.440
+[Speaker 0]: Yeah, I mean, there's an interesting
+
+00:11:27.200 --> 00:11:29.220
+ambivalent relationship because it feels like
+
+00:11:29.220 --> 00:11:31.800
+writing helps thinking and thinking helps
+
+00:11:31.800 --> 00:11:35.340
+writing in a way and nowhere have I
+
+00:11:35.340 --> 00:11:37.920
+personally been more aware of this than when
+
+00:11:38.000 --> 00:11:41.000
+coming up with networks of notes because it
+
+00:11:41.000 --> 00:11:43.860
+really I mean you use whichever word you want
+
+00:11:43.860 --> 00:11:45.900
+you know a second brain a collection of notes
+
+00:11:45.900 --> 00:11:48.860
+a slip box a repository of notes whichever
+
+00:11:48.860 --> 00:11:52.080
+the tool you use the point at the end is to
+
+00:11:52.080 --> 00:11:54.000
+resonate with you. It's kind of like
+
+00:11:54.000 --> 00:11:57.280
+extending those moments of consciousness that
+
+00:11:57.280 --> 00:11:58.880
+you have when you take your notes,
+
+00:11:59.440 --> 00:12:02.780
+and you make the entire gradient available.
+
+00:12:04.260 --> 00:12:06.380
+Sorry, I heard Sasha whispering in my ear
+
+00:12:06.380 --> 00:12:08.360
+sometimes. It's pretty pleasant.
+
+00:12:09.520 --> 00:12:10.500
+It's really shocking.
+
+00:12:12.660 --> 00:12:15.040
+[Speaker 1]: Yeah, Aaron, you had a question.
+
+00:12:15.040 --> 00:12:17.440
+Do I use denote just for my blogs or do I use
+
+00:12:17.440 --> 00:12:18.660
+it for other purposes?
+
+00:12:19.940 --> 00:12:25.120
+I use denote for all of my note taking and
+
+00:12:25.520 --> 00:12:28.660
+almost, I think it's exclusively org mode
+
+00:12:28.920 --> 00:12:30.560
+that I, that I use it in.
+
+00:12:30.600 --> 00:12:33.400
+But what I really appreciated in the
+
+00:12:33.400 --> 00:12:37.500
+consideration that Proc put forward was the
+
+00:12:37.500 --> 00:12:40.940
+file name encodes the information that's
+
+00:12:40.940 --> 00:12:45.980
+relevant. So it has helped me be able to
+
+00:12:46.080 --> 00:12:48.580
+query by using things like ripgrep,
+
+00:12:49.220 --> 00:12:54.480
+well not ripgrep, tree or I forget any more
+
+00:12:54.480 --> 00:13:00.140
+what I use. But having that the file encodes
+
+00:13:00.300 --> 00:13:03.820
+useful information. And it's so much more
+
+00:13:03.820 --> 00:13:06.960
+relevant when I look at having worked at a
+
+00:13:06.960 --> 00:13:10.520
+university that rolled out Google Drive to
+
+00:13:10.520 --> 00:13:12.840
+everyone without any guidance on how to
+
+00:13:12.840 --> 00:13:16.120
+organize stuff. And I worked at a library and
+
+00:13:16.120 --> 00:13:19.540
+it was just a nightmare watching things show
+
+00:13:19.540 --> 00:13:22.840
+up where you could never find it again.
+
+00:13:23.240 --> 00:13:28.060
+So, file name, the file name having the date,
+
+00:13:28.380 --> 00:13:33.280
+having the title and having tags just made so
+
+00:13:33.280 --> 00:13:34.780
+much sense to be findable.
+
+00:13:36.820 --> 00:13:41.420
+And yeah, I really do just use org.
+
+00:13:41.740 --> 00:13:47.220
+But if I am going to make txt files or other
+
+00:13:47.220 --> 00:13:52.040
+files, I have started adopting that structure
+
+00:13:52.120 --> 00:13:52.840
+and format.
+
+00:13:56.840 --> 00:14:00.900
+[Speaker 0]: Right. Well, Jeremy, we have about 1 minute
+
+00:14:00.900 --> 00:14:03.080
+and 30 seconds left until we go on to the
+
+00:14:03.080 --> 00:14:05.140
+next talk. Do you have any final words
+
+00:14:05.140 --> 00:14:06.740
+regarding your presentation or maybe where
+
+00:14:06.740 --> 00:14:08.400
+people can find you? I know you've already
+
+00:14:08.400 --> 00:14:09.240
+mentioned this but...
+
+00:14:09.240 --> 00:14:13.160
+[Speaker 1]: Yeah, take on rules. I'm also on dice camp
+
+00:14:13.440 --> 00:14:18.080
+dice.campmastodon at take on rules and I've
+
+00:14:18.080 --> 00:14:22.080
+thought about emacs.h but we federate well So
+
+00:14:22.340 --> 00:14:27.560
+I appreciate that. And I can stay on and
+
+00:14:27.560 --> 00:14:29.680
+answer any further questions if folks have
+
+00:14:29.680 --> 00:14:30.180
+it.
+
+00:14:31.420 --> 00:14:34.860
+[Speaker 0]: Sure. So sorry. Sorry,
+
+00:14:34.860 --> 00:14:36.820
+I confused myself with the buttons talking to
+
+00:14:36.820 --> 00:14:38.960
+production and all. Well then,
+
+00:14:38.960 --> 00:14:41.260
+what I'm going to do is that the stream is
+
+00:14:41.260 --> 00:14:43.740
+going to move on to the next talk in about 50
+
+00:14:43.740 --> 00:14:46.160
+seconds. If people want to join and ask any
+
+00:14:46.160 --> 00:14:49.160
+questions, feel free to join on the blue
+
+00:14:49.160 --> 00:14:51.380
+button. The link is on the talk page or on
+
+00:14:51.380 --> 00:14:54.480
+IRC. And feel free to hang out as long as you
+
+00:14:54.480 --> 00:14:56.160
+want to ask as many questions as you want to
+
+00:14:56.160 --> 00:14:58.180
+Jeremy. We are recording all of this and
+
+00:14:58.180 --> 00:15:00.540
+we'll be publishing this later on once again.
+
+00:15:01.120 --> 00:15:03.080
+And all that's left for me to do is to thank
+
+00:15:03.080 --> 00:15:05.580
+you so much, Jeremy, for your presentation
+
+00:15:05.740 --> 00:15:08.200
+and your answers. And I will see you another
+
+00:15:08.200 --> 00:15:08.700
+time.
+
+00:15:12.700 --> 00:15:14.840
+[Speaker 1]: So yeah, plasma strike.
+
+00:15:15.560 --> 00:15:18.500
+I'm not able to grant speaking powers.
+
+00:15:20.340 --> 00:15:22.160
+So if you wanted to type up something
+
+00:15:22.160 --> 00:15:22.660
+question-wise.
+
+00:15:24.000 --> 00:15:26.000
+[Speaker 0]: Oh, okay. I'll manage this in the background.
+
+00:15:26.000 --> 00:15:28.220
+So we're moving on to the next talk.
+
+00:15:28.500 --> 00:15:30.240
+We'll figure out the things about VBB,
+
+00:15:30.240 --> 00:15:32.940
+But in the meantime, enjoy the next talk.
+
+00:15:34.140 --> 00:15:35.460
+Bye. All right, Jeremy.
+
+00:15:35.460 --> 00:15:37.080
+We are now on the next talk.
+
+00:15:37.080 --> 00:15:39.240
+Sorry about having to mention multiple things
+
+00:15:39.240 --> 00:15:42.500
+at the same time. Speaking rights.
+
+00:15:42.500 --> 00:15:44.440
+I will try fixing this in the background.
+
+00:15:44.440 --> 00:15:46.120
+I need to get moving for the next talk,
+
+00:15:46.120 --> 00:15:48.040
+but I'll do it in the background and we'll
+
+00:15:48.040 --> 00:15:49.660
+let you know as soon as it's ready.
+
+00:15:40.440 --> 00:15:50.360
+[Speaker 1]: We're doing great. Okay.
+
+00:15:51.220 --> 00:15:52.320
+[Speaker 0]: Alright, bye bye Jeremy.
diff --git a/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt
new file mode 100644
index 00000000..4c1fd05f
--- /dev/null
+++ b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:57.119
+Intro
+
+00:00:57.120 --> 00:01:18.399
+How I got here
+
+00:01:18.400 --> 00:01:45.959
+Friction
+
+00:01:45.960 --> 00:02:15.919
+Domains for notes
+
+00:02:15.920 --> 00:02:55.439
+Demo
+
+00:02:55.440 --> 00:03:32.839
+Dabbrev and hippie-expand
+
+00:03:32.840 --> 00:07:49.159
+Links
+
+00:07:49.160 --> 00:08:53.160
+Conclusion
diff --git a/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt
new file mode 100644
index 00000000..59b67e77
--- /dev/null
+++ b/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt
@@ -0,0 +1,557 @@
+WEBVTT captioned by bala, checked by sachac
+
+NOTE Intro
+
+00:00:00.000 --> 00:00:04.559
+Hello everyone, I'm Jeremy Friesen, pronouns he/him,
+
+00:00:04.560 --> 00:00:05.879
+and today I'll be talking about
+
+00:00:05.880 --> 00:00:08.599
+how Emacs turbocharges my writing.
+
+00:00:08.600 --> 00:00:11.799
+Quick intro: I've been programming since 1998
+
+00:00:11.800 --> 00:00:14.079
+and blogging since 2011.
+
+00:00:14.080 --> 00:00:16.639
+In May of 2020 I switched to Emacs,
+
+00:00:16.640 --> 00:00:19.919
+having previously used a long list of different editors.
+
+00:00:19.920 --> 00:00:23.039
+Curious about how Emacs impacted my writing,
+
+00:00:23.040 --> 00:00:25.559
+I wrote some stuff on my personal site and
+
+00:00:25.560 --> 00:00:30.399
+found that I blogged about 95 words per day prior to Emacs,
+
+00:00:30.400 --> 00:00:33.719
+and with Emacs I'm blogging about 340.
+
+00:00:33.720 --> 00:00:37.959
+Now, this is not a fair comparison, many things changed.
+
+00:00:37.960 --> 00:00:40.919
+A pandemic removed 2 hours of commute every day
+
+00:00:40.920 --> 00:00:44.199
+as a big contributor.
+
+00:00:44.200 --> 00:00:46.999
+Ultimately though, I've used Emacs and extended it
+
+00:00:47.000 --> 00:00:50.319
+to reduce barriers to capturing and writing and thinking,
+
+00:00:50.320 --> 00:00:53.319
+and I'm always on the lookout for minor refinements
+
+00:00:53.320 --> 00:00:57.119
+that help me stay in my thinking.
+
+NOTE How I got here
+
+00:00:57.120 --> 00:00:59.239
+How I got here was I started in WordPress,
+
+00:00:59.240 --> 00:01:02.599
+then I moved to Jekyll, and then to Hugo,
+
+00:01:02.600 --> 00:01:05.439
+and through that process I started writing in Markdown.
+
+00:01:05.440 --> 00:01:07.119
+And when I was learning Emacs,
+
+00:01:07.120 --> 00:01:09.359
+I also didn't want to learn Org Mode,
+
+00:01:09.360 --> 00:01:12.399
+it felt intimidating because it could do so many things.
+
+00:01:12.400 --> 00:01:15.519
+I later learned Org Mode grows with you,
+
+00:01:15.520 --> 00:01:18.399
+and that's where I'm at now.
+
+NOTE Friction
+
+00:01:18.400 --> 00:01:19.999
+But I didn't realize that friction
+
+00:01:20.000 --> 00:01:23.359
+between writing Markdown for my public blog
+
+00:01:23.360 --> 00:01:25.479
+and then adopting Org Mode locally
+
+00:01:25.480 --> 00:01:28.519
+for writing and time tracking and things like that.
+
+00:01:28.520 --> 00:01:31.119
+And also, where did I put things,
+
+00:01:31.120 --> 00:01:35.159
+because migrating the formats was just a little clunky.
+
+00:01:35.160 --> 00:01:38.199
+So ultimately I spent some time thinking about the data flow
+
+00:01:38.200 --> 00:01:39.519
+and where I would put things,
+
+00:01:39.520 --> 00:01:41.039
+this kind of pre-thinking,
+
+00:01:41.040 --> 00:01:45.959
+where does stuff go when it comes into and out of my brain.
+
+NOTE Domains for notes
+
+00:01:45.960 --> 00:01:49.399
+So I have many domains where I'll write towards.
+
+00:01:49.400 --> 00:01:51.119
+The ones for this presentation are going to be
+
+00:01:51.120 --> 00:01:54.159
+blog posts, epigraphs, glossary, and melange.
+
+00:01:54.160 --> 00:01:56.319
+Melange is, I don't know where it goes,
+
+00:01:56.320 --> 00:02:00.999
+but now I do, I just throw it in melange.
+
+00:02:01.000 --> 00:02:04.479
+So I began exploring Org Mode via Org Roam,
+
+00:02:04.480 --> 00:02:07.559
+but I've ultimately switched from Org Roam
+
+00:02:07.560 --> 00:02:10.639
+to the simplified Denote package.
+
+00:02:10.640 --> 00:02:13.199
+I didn't use a lot of the functionality
+
+00:02:13.200 --> 00:02:15.919
+and I appreciate the plain text reality of Denote.
+
+NOTE Demo
+
+00:02:15.920 --> 00:02:18.799
+So let's hop into the demo.
+
+00:02:18.800 --> 00:02:19.919
+I'm going to split my screen.
+
+00:02:19.920 --> 00:02:21.959
+Over on the right is going to be
+
+00:02:21.960 --> 00:02:24.199
+where I'm going to be live typing stuff.
+
+00:02:24.200 --> 00:02:27.319
+So let's get going.
+
+00:02:27.320 --> 00:02:29.799
+You'll notice I don't do a lot of screen splitting.
+
+00:02:29.800 --> 00:02:32.239
+It just makes it easier to focus.
+
+00:02:32.240 --> 00:02:34.039
+So let's create a note.
+
+00:02:34.040 --> 00:02:41.279
+All right, I have bound hyper to my command key,
+
+00:02:41.280 --> 00:02:42.519
+my right command key.
+
+00:02:42.520 --> 00:02:43.679
+This opens up a whole world.
+
+00:02:43.680 --> 00:02:45.559
+I'm going to create a blog post
+
+00:02:45.560 --> 00:02:49.799
+and we're going to name it the ever popular "hello world".
+
+00:02:49.800 --> 00:02:50.799
+It's Emacs.
+
+00:02:50.800 --> 00:02:51.519
+Great.
+
+00:02:51.520 --> 00:02:55.439
+We've saved it.
+
+NOTE Dabbrev and hippie-expand
+
+00:02:55.440 --> 00:02:57.399
+One of the things I encourage everybody to do
+
+00:02:57.400 --> 00:03:02.039
+is to watch Jay Dixit's presentation, Emacs for Writers.
+
+00:03:02.040 --> 00:03:08.079
+It showed me the utility of Dabbrev for quick auto correction.
+
+00:03:08.080 --> 00:03:11.479
+And I also love using hippie-expand.
+
+00:03:11.480 --> 00:03:14.639
+When I watch VS coders code, it's always a little sad pants
+
+00:03:14.640 --> 00:03:17.319
+because they're thinking about coding or writing
+
+00:03:17.320 --> 00:03:19.159
+in terms of their code.
+
+00:03:19.160 --> 00:03:24.239
+But I have found as a programmer, I tend to write more tech,
+
+00:03:24.240 --> 00:03:27.799
+more like English instead of programming code.
+
+00:03:27.800 --> 00:03:30.719
+So I think it's important to understand these tools
+
+00:03:30.720 --> 00:03:32.839
+that help me write better.
+
+NOTE Links
+
+00:03:32.840 --> 00:03:34.879
+All right, we're going to go with links.
+
+00:03:34.880 --> 00:03:36.999
+Links are foundational for the web.
+
+00:03:37.000 --> 00:03:41.159
+I'm going to insert a public link,
+
+00:03:41.160 --> 00:03:43.439
+which is a role playing game that I love,
+
+00:03:43.440 --> 00:03:45.159
+Worlds Without Number.
+
+00:03:45.160 --> 00:03:48.399
+And I'm going to go ahead and describe it.
+
+00:03:48.400 --> 00:03:49.239
+A role playing game.
+
+00:03:49.240 --> 00:03:53.479
+But I don't want to always say role playing game.
+
+00:03:53.480 --> 00:03:54.599
+I'm going to abbreviate it.
+
+00:03:54.600 --> 00:03:57.079
+So I wrote a function that will transform it.
+
+00:03:57.080 --> 00:04:00.239
+And let's take a look at what that looks like on the inside.
+
+00:04:00.240 --> 00:04:06.279
+When I do this real quick, it's toggling it back and forth.
+
+00:04:06.280 --> 00:04:10.119
+And I'll just keep doing that.
+
+00:04:10.120 --> 00:04:12.999
+I also have the idea of public notes and private notes.
+
+00:04:13.000 --> 00:04:15.399
+Public is things that's going to have a URL.
+
+00:04:15.400 --> 00:04:16.879
+I met a person at a conference.
+
+00:04:16.880 --> 00:04:19.639
+He gave a talk on something that I thought was very useful.
+
+00:04:19.640 --> 00:04:23.159
+I didn't write down what he talked about on his note.
+
+00:04:23.160 --> 00:04:26.279
+I wrote it where it was more relevant to the topic.
+
+00:04:26.280 --> 00:04:31.159
+And I can use a backlink to go find that.
+
+00:04:31.160 --> 00:04:34.119
+Next up, I demonstrate the abbreviation.
+
+00:04:34.120 --> 00:04:35.839
+I also have dates.
+
+00:04:35.840 --> 00:04:37.999
+This is a semantic date in HTML5.
+
+00:04:38.000 --> 00:04:41.839
+I can just have the year.
+
+00:04:41.840 --> 00:04:48.359
+I can also just have something like that date is today.
+
+00:04:48.360 --> 00:04:52.239
+And we have date links.
+
+00:04:52.240 --> 00:04:54.199
+I don't have backlinks built up for that,
+
+00:04:54.200 --> 00:04:56.959
+but I have ideas of how I go about doing it.
+
+00:04:56.960 --> 00:04:58.759
+And last up, thank you Frank Herbert,
+
+00:04:58.760 --> 00:05:00.799
+I want to introduce epigraphs.
+
+00:05:00.800 --> 00:05:04.359
+So this is epigraph.
+
+00:05:04.360 --> 00:05:08.719
+I just have that, any sufficiently, dot, dot, dot.
+
+00:05:08.720 --> 00:05:10.359
+And that's my epigraph.
+
+00:05:10.360 --> 00:05:16.719
+Backlinks, I mentioned that.
+
+00:05:16.720 --> 00:05:18.999
+Let's go take a look at Jonathan, right?
+
+00:05:19.000 --> 00:05:23.119
+He's a Rubyist, but importantly is the backlinks.
+
+00:05:23.120 --> 00:05:27.319
+He gave a talk on, that's right, PDFs.
+
+00:05:27.320 --> 00:05:28.959
+I can go look at what he spoke to
+
+00:05:28.960 --> 00:05:31.879
+and I can reference that because I will remember
+
+00:05:31.880 --> 00:05:36.679
+that talk or I will remember, oh, I need to look up PDFs.
+
+00:05:36.680 --> 00:05:39.799
+Oh, I have something in PDFs.
+
+00:05:39.800 --> 00:05:43.239
+Again, it's about stumbling upon data in a good way.
+
+00:05:43.240 --> 00:05:48.319
+So thinking of making linking easy helps me
+
+00:05:48.320 --> 00:05:52.159
+create more and more ways to find things,
+
+00:05:52.160 --> 00:05:57.119
+both by links, backlinks, indices, file searches, and so forth.
+
+00:05:57.120 --> 00:05:59.239
+It's all about information organization.
+
+00:05:59.240 --> 00:06:04.879
+Next up is a really cool function of org capture.
+
+00:06:04.880 --> 00:06:06.679
+So let's take a look here.
+
+00:06:06.680 --> 00:06:08.039
+I'm going to start a clock.
+
+00:06:08.040 --> 00:06:09.159
+It's running.
+
+00:06:09.160 --> 00:06:11.479
+And I'm going to bring up my browser.
+
+00:06:11.480 --> 00:06:19.679
+And I'm going to go ahead and capture to the content to clock.
+
+00:06:19.680 --> 00:06:23.159
+And it brings up this block quote, which is lovely.
+
+00:06:23.160 --> 00:06:25.719
+And boom, I'm going to save it.
+
+00:06:25.720 --> 00:06:28.199
+I'm going to close this.
+
+00:06:28.200 --> 00:06:30.959
+We're back here to my "hello world".
+
+00:06:30.960 --> 00:06:33.519
+And it has grabbed a block quote for this.
+
+00:06:33.520 --> 00:06:38.039
+Again, it helps me gather stuff up quickly.
+
+00:06:38.040 --> 00:06:41.119
+I've bound that also in my RSS feed.
+
+00:06:41.120 --> 00:06:44.199
+We're going to skip over macros, blocks, and the abstract.
+
+00:06:44.200 --> 00:06:45.479
+And we're going to get into the export
+
+00:06:45.480 --> 00:06:47.519
+because this is where we can see the magic
+
+00:06:47.520 --> 00:06:49.599
+that happens because I want to take things
+
+00:06:49.600 --> 00:06:51.079
+from private to public.
+
+00:06:51.080 --> 00:06:53.199
+So I have bound a key.
+
+00:06:53.200 --> 00:06:55.559
+These are my menu of things I don't want to forget.
+
+00:06:55.560 --> 00:06:56.759
+I will export.
+
+00:06:56.760 --> 00:06:57.839
+And here we go.
+
+00:06:57.840 --> 00:07:04.959
+Here is my blog post in markdown format with Hugo shortcodes.
+
+00:07:04.960 --> 00:07:07.399
+So let's go take a look at what that looks like.
+
+00:07:07.400 --> 00:07:09.359
+Localhost.
+
+00:07:09.360 --> 00:07:12.359
+I'm not writing in Rails.
+
+00:07:12.360 --> 00:07:14.919
+"Hello world" right there.
+
+00:07:14.920 --> 00:07:17.159
+This is the epigraph.
+
+00:07:17.160 --> 00:07:22.279
+And I have a mention of Worlds without Number.
+
+00:07:22.280 --> 00:07:24.799
+And I have mentioned this as a abbreviation.
+
+00:07:24.800 --> 00:07:27.519
+So I include the first time this text.
+
+00:07:27.520 --> 00:07:30.199
+Here's also Jonathan.
+
+00:07:30.200 --> 00:07:33.399
+He is not a public reference thing.
+
+00:07:33.400 --> 00:07:37.519
+Also, I have these things here.
+
+00:07:37.520 --> 00:07:39.399
+And here's my captured information
+
+00:07:39.400 --> 00:07:42.599
+along with the citation link to it.
+
+00:07:42.600 --> 00:07:49.159
+Again, helpful to be consistent.
+
+NOTE Conclusion
+
+00:07:49.160 --> 00:07:52.279
+In conclusion, when I started learning Emacs,
+
+00:07:52.280 --> 00:07:55.879
+I quickly shifted to vanilla Emacs and just started writing.
+
+00:07:55.880 --> 00:07:59.519
+As I wrote, when I needed to do something that I'd previously
+
+00:07:59.520 --> 00:08:02.999
+done in a text editor, I'd find an experiment with a package.
+
+00:08:03.000 --> 00:08:04.679
+I continue that mindset.
+
+00:08:04.680 --> 00:08:06.839
+As I write, I'm attending to what I'm doing.
+
+00:08:06.840 --> 00:08:08.879
+And eventually, I realize if I were to just write
+
+00:08:08.880 --> 00:08:11.639
+a function that does this one thing,
+
+00:08:11.640 --> 00:08:13.559
+I'd have a smoother writing experience.
+
+00:08:13.560 --> 00:08:16.359
+This helps me practice my craft, extend my editor,
+
+00:08:16.360 --> 00:08:19.999
+understand its capabilities, and begin exploring other things.
+
+00:08:20.000 --> 00:08:23.159
+The goal of this is all to minimize the distractions.
+
+00:08:23.160 --> 00:08:25.759
+As I'm thinking about it, I wanted to quickly add it
+
+00:08:25.760 --> 00:08:27.159
+and then move along,
+
+00:08:27.160 --> 00:08:29.559
+basically creating breadcrumbs for me
+
+00:08:29.560 --> 00:08:31.239
+to follow my thoughts in the future.
+
+00:08:31.240 --> 00:08:33.159
+And one of those functions is
+
+00:08:33.160 --> 00:08:36.479
+I'd like to write an extender for my abbr,
+
+00:08:36.480 --> 00:08:38.679
+abbreviation export to work in Latex.
+
+00:08:38.680 --> 00:08:40.279
+It's like halfway there.
+
+00:08:40.280 --> 00:08:42.239
+So I'm looking forward to getting that done
+
+00:08:42.240 --> 00:08:45.439
+when I have some time and can prioritize it.
+
+00:08:45.440 --> 00:08:47.799
+But for now, thank you.
+
+00:08:47.800 --> 00:08:53.160
+And I look forward to your questions.
diff --git a/2023/cfp.md b/2023/cfp.md
new file mode 100644
index 00000000..c2c1eac2
--- /dev/null
+++ b/2023/cfp.md
@@ -0,0 +1,103 @@
+[[!meta title="Call for Participation"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua,
+David Bremner<br />
+Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane<br />
+Copyright &copy; 2022 Amin Bandali<br />
+Copyright &copy; 2023 Sacha Chua"]]
+<!-- cfp.md is exported from cfp.org, please modify that instead. -->
+
+# Call for participation
+
+What have you found exciting about [Emacs](https://www.gnu.org/software/emacs/) lately? Have you figured out
+a good workflow? Used Emacs for something interesting? Come share
+what you've been learning at EmacsConf 2023 and meet other enthusiasts
+along the way! All backgrounds and all levels of experience are
+welcome. Emacs isn't just a text editor, it's a way of life!
+
+Not sure what to talk about? We've shared a few [ideas](https://emacsconf.org/2023/ideas/) to help you get
+started.
+
+[EmacsConf 2023](https://emacsconf.org/2023/) will be a virtual conference on **December 2 and 3, 2023
+(Sat-Sun, 9AM-5PM UTC-5 / 2PM-10PM UTC)**. If you'd like to present at
+the conference, please **[submit your proposal](https://emacsconf.org/2023/cfp/)** by **September 15, 2023
+(Friday)**. You can also take a look at [the talks so far](https://emacsconf.org/2023/talks) to see how
+your talk can add to other ideas!
+
+# Talk formats
+
+Ideally, talks will be prerecorded so that you can script and edit
+them as tightly as you want, and so that they can be captioned for
+accessibility. Here are the talk options:
+
+- **5-10 minute lightning talk:** just the essentials! If you can
+ squeeze your prerecorded talk into 5-10 minutes by focusing on the
+ essentials (not by talking super quickly!), we might be able to
+ repeat it during the conference in order to fill gaps.
+- **20-minute talk:** short enough to keep people's attention, long
+ enough to get into some details.
+
+There will be time for questions and answers after your talk, so you
+don't need to include that in your talk timing. Just like in EmacsConf
+2022, you can answer questions via a live BigBlueButton web
+conference, IRC ([Internet Relay Chat](https://chat.emacsconf.org)), the Etherpad (a web-based
+collaborative document), the wiki, or e-mail (your choice). The stream
+will move on to the next talk at the scheduled time, but interested
+people can keep hanging out with you for a longer conversation.
+
+If you are not available during the conference itself but you have
+a neat idea that you'd like to share, please propose it anyway!
+You can always handle questions after the conference, and we might
+even be able to coordinate with other Emacs meetups for events in
+other timezones.
+
+We may have time for a few longer sessions. If you'd like to be
+considered for a longer time slot, please include an outline for the
+extra time in addition to your 20-minute proposal. Other session
+formats such as tutorials, workshops, and hangouts are welcome as
+well.
+
+# Submitting your proposal
+
+[Send us your idea](https://emacsconf.org/2023/submit/) as soon as you can, so that you can have more time
+to work on your talk. (Proposal deadline: September 15, 2023) This
+year, we'd like to experiment with accepting proposals throughout the
+CFP process. If there are similar proposals, we'll work with people
+so that the talks can cover different facets.
+
+If you need help, you can e-mail us publicly at [emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org)
+or privately at [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org). You can also come and
+say hi to us on our IRC channel `#emacsconf` on `irc.libera.chat`
+using [your favourite IRC client](ircs://irc.libera.chat:6697/emacsconf), or by visiting [chat.emacsconf.org](https://chat.emacsconf.org) in
+your web browser.
+
+# Know someone who might have something to share?
+
+All kinds of people use Emacs for all kinds of things. We'd love it
+if EmacsConf 2023 could highlight interesting perspectives and reflect
+the diversity of our community. If you know someone who might have a
+good idea for a talk, please reach out to them and encourage them to
+submit a proposal. Many people (especially from underrepresented
+groups such as women, people of colour, non-developers, etc.) might
+not consider themselves proficient enough to share their thoughts.
+If you let them know that you value their knowledge and experiences,
+and maybe even suggest something that you think others would like to
+hear about, they may realize that they do have something worth sharing
+and that we would love to hear from them.
+
+# Want to volunteer?
+
+If you would like to help with the conference (planning the sessions,
+reviewing proposals, helping with infrastructure, making sessions more
+accessible, editing video transcripts, etc.), see our [volunteer](https://emacsconf.org/2023/volunteer/) page.
+Volunteers get early access to talks and learn lots of things along
+the way. We'd really appreciate your help in making EmacsConf 2023
+the best one so far!
+
+# Commitment to freedom
+
+We remain fully committed to freedom. You'll be able to participate
+in EmacsConf using [free/libre software](https://www.gnu.org/philosophy/free-sw.html), and we use free/libre software
+to organize and run the conference. You can find some notes about our
+setup and process at <https://emacsconf.org/infra/>.
+
diff --git a/2023/cfp.org b/2023/cfp.org
new file mode 100644
index 00000000..30467c49
--- /dev/null
+++ b/2023/cfp.org
@@ -0,0 +1,181 @@
+# [[elisp:(org-md-export-to-markdown)][Export this file to Markdown]]
+# [[elisp:(org-ascii-export-as-ascii nil nil nil t)][Export this file to ASCII]]
+
+#+title: EmacsConf 2023
+#+subtitle: Online Conference
+#+date: December 2 and 3, 2023
+#+options: author:nil toc:nil
+
+#+begin_export md
+[[!meta title="Call for Participation"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua,
+David Bremner<br />
+Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane<br />
+Copyright &copy; 2022 Amin Bandali<br />
+Copyright &copy; 2023 Sacha Chua"]]
+<!-- cfp.md is exported from cfp.org, please modify that instead. -->
+#+end_export
+
+* COMMENT How to export this file :noexport:
+
+As of the time of writing this document (Org mode version 9.3.7), the
+Org links library (=ol.el=) does not yet recognize =ircs= link types,
+and will throw an error if you try to export a file containing them,
+such as this file.
+
+To work around that, you can use something along the lines of the
+Emacs Lisp code below, by either adding it to your init file, or by
+putting the point in the code block and hitting =C-c C-v e= (that is,
+hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to
+evaluate the code, working around the issue only for the current
+session.
+
+#+begin_src emacs-lisp :results silent
+(org-link-set-parameters
+ "ircs"
+ :export
+ (lambda (link description format)
+ "Export an ircs link.
+See `org-link-parameters' for details about LINK, DESCRIPTION and
+FORMAT."
+ (let ((desc (or description link)))
+ (pcase format
+ (`html (format "<a href=\"ircs:%s\">%s</a>" link desc))
+ (`md (format "[%s](ircs:%s)" desc link))
+ (_ nil)))))
+#+end_src
+
+Other CFPs we can borrow ideas from:
+
+- https://debconf23.debconf.org/cfp/ - includes early submission timeline
+- https://fosdem.org/2023/news/2022-11-13-call-for-presentations/ - mentions upload date, license
+- https://www.fsf.org/blogs/community/libreplanet-2023-will-be-held-march-18-19-cfs-extended-to-november-23
+- https://www.reddit.com/r/scala/comments/103v6e5/scalar_2023_cfp_is_still_open/ - very short
+
+* Call for participation
+:PROPERTIES:
+:CUSTOM_ID: cfp
+:END:
+
+What have you found exciting about [[https://www.gnu.org/software/emacs/][Emacs]] lately? Have you figured out
+a good workflow? Used Emacs for something interesting? Come share
+what you've been learning at EmacsConf 2023 and meet other enthusiasts
+along the way! All backgrounds and all levels of experience are
+welcome. Emacs isn't just a text editor, it's a way of life!
+
+Not sure what to talk about? We've shared a few [[https://emacsconf.org/2023/ideas/][ideas]] to help you get
+started.
+
+[[https://emacsconf.org/2023/][EmacsConf 2023]] will be a virtual conference on *December 2 and 3, 2023
+(Sat-Sun, 9AM-5PM UTC-5 / 2PM-10PM UTC)*. If you'd like to present at
+the conference, please *[[https://emacsconf.org/2023/cfp/][submit your proposal]]* by *September 15, 2023
+(Friday)*. You can also take a look at [[https://emacsconf.org/2023/talks][the talks so far]] to see how
+your talk can add to other ideas!
+
+* Talk formats
+:PROPERTIES:
+:CUSTOM_ID: formats
+:END:
+
+Ideally, talks will be prerecorded so that you can script and edit
+them as tightly as you want, and so that they can be captioned for
+accessibility. Here are the talk options:
+
+- *5-10 minute lightning talk:* just the essentials! If you can
+ squeeze your prerecorded talk into 5-10 minutes by focusing on the
+ essentials (not by talking super quickly!), we might be able to
+ repeat it during the conference in order to fill gaps.
+- *20-minute talk:* short enough to keep people's attention, long
+ enough to get into some details.
+
+There will be time for questions and answers after your talk, so you
+don't need to include that in your talk timing. Just like in EmacsConf
+2022, you can answer questions via a live BigBlueButton web
+conference, IRC ([[https://chat.emacsconf.org][Internet Relay Chat]]), the Etherpad (a web-based
+collaborative document), the wiki, or e-mail (your choice). The stream
+will move on to the next talk at the scheduled time, but interested
+people can keep hanging out with you for a longer conversation.
+
+If you are not available during the conference itself but you have
+a neat idea that you'd like to share, please propose it anyway!
+You can always handle questions after the conference, and we might
+even be able to coordinate with other Emacs meetups for events in
+other timezones.
+
+We may have time for a few longer sessions. If you'd like to be
+considered for a longer time slot, please include an outline for the
+extra time in addition to your 20-minute proposal. Other session
+formats such as tutorials, workshops, and hangouts are welcome as
+well.
+
+* Submitting your proposal
+:PROPERTIES:
+:CUSTOM_ID: submitting
+:END:
+
+[[https://emacsconf.org/2023/submit/][Send us your idea]] as soon as you can, so that you can have more time
+to work on your talk. (Proposal deadline: September 15, 2023) This
+year, we'd like to experiment with accepting proposals throughout the
+CFP process. If there are similar proposals, we'll work with people
+so that the talks can cover different facets.
+
+If you need help, you can e-mail us publicly at [[mailto:emacsconf-org@gnu.org][emacsconf-org@gnu.org]]
+or privately at [[mailto:emacsconf-org-private@gnu.org][emacsconf-org-private@gnu.org]]. You can also come and
+say hi to us on our IRC channel =#emacsconf= on =irc.libera.chat=
+using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by visiting [[https://chat.emacsconf.org][chat.emacsconf.org]] in
+your web browser.
+
+* Know someone who might have something to share?
+:PROPERTIES:
+:CUSTOM_ID: sharing
+:END:
+
+All kinds of people use Emacs for all kinds of things. We'd love it
+if EmacsConf 2023 could highlight interesting perspectives and reflect
+the diversity of our community. If you know someone who might have a
+good idea for a talk, please reach out to them and encourage them to
+submit a proposal. Many people (especially from underrepresented
+groups such as women, people of colour, non-developers, etc.) might
+not consider themselves proficient enough to share their thoughts.
+If you let them know that you value their knowledge and experiences,
+and maybe even suggest something that you think others would like to
+hear about, they may realize that they do have something worth sharing
+and that we would love to hear from them.
+
+* Want to volunteer?
+:PROPERTIES:
+:CUSTOM_ID: volunteer
+:END:
+
+If you would like to help with the conference (planning the sessions,
+reviewing proposals, helping with infrastructure, making sessions more
+accessible, editing video transcripts, etc.), see our [[https://emacsconf.org/2023/volunteer/][volunteer]] page.
+Volunteers get early access to talks and learn lots of things along
+the way. We'd really appreciate your help in making EmacsConf 2023
+the best one so far!
+
+* Commitment to freedom
+
+We remain fully committed to freedom. You'll be able to participate
+in EmacsConf using [[https://www.gnu.org/philosophy/free-sw.html][free/libre software]], and we use free/libre software
+to organize and run the conference. You can find some notes about our
+setup and process at https://emacsconf.org/infra/.
+
+* COMMENT Copyright & License
+
+Copyright (c) 2020 Amin Bandali, Sacha Chua, David Bremner
+Copyright (c) 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane
+Copyright (c) 2022 Amin Bandali
+Copyright (c) 2023 Sacha Chua
+
+The EmacsConf 2023 Call for Participation is part of the EmacsConf
+wiki, and is dual-licensed under the terms of the Creative Commons
+Attribution-ShareAlike 4.0 International Public License; and the GNU
+General Public License as published by the Free Software Foundation,
+either version 3 of the License, or (at your option) any later
+version.
+
+A copy of these two licenses is available on the EmacsConf wiki, in
+the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
diff --git a/2023/draft-schedule.md b/2023/draft-schedule.md
new file mode 100644
index 00000000..e7cb9977
--- /dev/null
+++ b/2023/draft-schedule.md
@@ -0,0 +1,60 @@
+[[!sidebar content=""]]
+
+This is a *DRAFT* schedule.
+Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">Sun Dec 3</a><a name="date-2023-12-02"></a>
+# Saturday Dec 2, 2023
+[[!inline pages="internal(2023/schedule-2023-12-02)" raw="yes"]]
+
+<div class="schedule" data-start="2023-12-02T14:00:00+0000" data-end="2023-12-02T22:30:00+0000" data-tracks="General,Development">
+[[!template id=sched time="""10""" q-and-a="""""" startutc="""2023-12-02T14:00:00+0000""" endutc="""2023-12-02T14:10:00+0000""" start="""9:00""" end="""9:10""" title="""Saturday opening remarks""" url="""/2023/talks/sat-open""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-open""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""none""" startutc="""2023-12-02T14:10:00+0000""" endutc="""2023-12-02T14:20:00+0000""" start="""9:10""" end="""9:20""" title="""An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp""" url="""/2023/talks/adventure""" speakers="""Chung-hong Chan""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""adventure""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/uni/room/">BBB</a>""" startutc="""2023-12-02T14:30:00+0000""" endutc="""2023-12-02T14:50:00+0000""" start="""9:30""" end="""9:50""" title="""Authoring and presenting university courses with Emacs and a full libre software stack""" url="""/2023/talks/uni""" speakers="""James Howell""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""uni""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2023-matplotllm">Etherpad</a>""" startutc="""2023-12-02T15:00:00+0000""" endutc="""2023-12-02T15:10:00+0000""" start="""10:00""" end="""10:10""" title="""MatplotLLM, iterative natural language data visualization in org-babel""" url="""/2023/talks/matplotllm""" speakers="""Abhinav Tushar""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""matplotllm""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/teaching/room/">BBB</a>""" startutc="""2023-12-02T15:05:00+0000""" endutc="""2023-12-02T15:25:00+0000""" start="""10:05""" end="""10:25""" title="""Teaching computer and data science with literate programming tools""" url="""/2023/talks/teaching""" speakers="""Marcus Birkenkrahe""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""teaching""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/voice/room/">BBB</a>""" startutc="""2023-12-02T15:20:00+0000""" endutc="""2023-12-02T15:40:00+0000""" start="""10:20""" end="""10:40""" title="""Improving access to AI-assisted literate programming with voice control""" url="""/2023/talks/voice""" speakers="""Blaine Mooers""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""voice""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/table/room/">BBB</a>""" startutc="""2023-12-02T15:40:00+0000""" endutc="""2023-12-02T15:50:00+0000""" start="""10:40""" end="""10:50""" title="""Who needs Excel? Managing your students qualifications with org-table""" url="""/2023/talks/table""" speakers="""Daniel Molina""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""table""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/llm/room/">BBB</a>""" startutc="""2023-12-02T15:55:00+0000""" endutc="""2023-12-02T16:15:00+0000""" start="""10:55""" end="""11:15""" title="""LLM clients in Emacs, functionality and standardization""" url="""/2023/talks/llm""" speakers="""Andrew Hyatt""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""llm""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/taming/room/">BBB</a>""" startutc="""2023-12-02T16:05:00+0000""" endutc="""2023-12-02T16:15:00+0000""" start="""11:05""" end="""11:15""" title="""Taming things with Org Mode""" url="""/2023/talks/taming""" speakers="""Gergely Nagy (algernon)""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""taming""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/one/room/">BBB</a>""" startutc="""2023-12-02T16:30:00+0000""" endutc="""2023-12-02T16:50:00+0000""" start="""11:30""" end="""11:50""" title="""one.el: the static site generator for Emacs Lisp Programmers""" url="""/2023/talks/one""" speakers="""Tony Aldon""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""one""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/writing/room/">BBB</a>""" startutc="""2023-12-02T18:00:00+0000""" endutc="""2023-12-02T18:10:00+0000""" start="""1:00""" end="""1:10""" title="""Emacs turbo-charges my writing""" url="""/2023/talks/writing""" speakers="""Jeremy Friesen""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""writing""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/overlay/room/">BBB</a>""" startutc="""2023-12-02T18:00:00+0000""" endutc="""2023-12-02T18:20:00+0000""" start="""1:00""" end="""1:20""" title="""Improving compiler diagnostics with Overlays""" url="""/2023/talks/overlay""" speakers="""Jeff Trull""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""overlay""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/nabokov/room/">BBB</a>""" startutc="""2023-12-02T18:25:00+0000""" endutc="""2023-12-02T18:35:00+0000""" start="""1:25""" end="""1:35""" title="""Why Nabokov would use Org-Mode if he were writing today""" url="""/2023/talks/nabokov""" speakers="""Edmund Jorgensen""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""nabokov""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/eval/room/">BBB</a>""" startutc="""2023-12-02T18:35:00+0000""" endutc="""2023-12-02T18:45:00+0000""" start="""1:35""" end="""1:45""" title="""Editor Integrated REPL Driven Development for all languages""" url="""/2023/talks/eval""" speakers="""Musa Al-hassy""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""eval""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""none""" startutc="""2023-12-02T18:50:00+0000""" endutc="""2023-12-02T19:10:00+0000""" start="""1:50""" end="""2:10""" title="""Collaborative data processing and documenting using org-babel""" url="""/2023/talks/collab""" speakers="""Jonathan Hartman, Lukas C. Bossert""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""collab""" note=""""""]]
+[[!template id=sched time="""40""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: edrx</a>""" startutc="""2023-12-02T19:00:00+0000""" endutc="""2023-12-02T19:40:00+0000""" start="""2:00""" end="""2:40""" title="""REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ""" url="""/2023/talks/repl""" speakers="""Eduardo Ochs""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""repl""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/solo/room/">BBB</a>""" startutc="""2023-12-02T19:20:00+0000""" endutc="""2023-12-02T19:40:00+0000""" start="""2:20""" end="""2:40""" title="""How I play TTRPGs in Emacs""" url="""/2023/talks/solo""" speakers="""Howard Abrams""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""solo""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/emacsconf/room/">BBB</a>""" startutc="""2023-12-02T19:50:00+0000""" endutc="""2023-12-02T20:10:00+0000""" start="""2:50""" end="""3:10""" title="""EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference""" url="""/2023/talks/emacsconf""" speakers="""Sacha Chua""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsconf""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs</a>""" startutc="""2023-12-02T19:55:00+0000""" endutc="""2023-12-02T20:15:00+0000""" start="""2:55""" end="""3:15""" title="""Org-Mode workflow: informal reference tracking""" url="""/2023/talks/ref""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""ref""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2023-unentangling">Etherpad</a>""" startutc="""2023-12-02T20:25:00+0000""" endutc="""2023-12-02T20:35:00+0000""" start="""3:25""" end="""3:35""" title="""(Un)entangling projects and repos""" url="""/2023/talks/unentangling""" speakers="""Alexey Bochkarev""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""unentangling""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/devel/room/">BBB</a>""" startutc="""2023-12-02T20:45:00+0000""" endutc="""2023-12-02T20:55:00+0000""" start="""3:45""" end="""3:55""" title="""Emacs development updates""" url="""/2023/talks/devel""" speakers="""John Wiegley""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""devel""" note=""""""]]
+[[!template id=sched time="""40""" q-and-a="""<a href="https://emacsconf.org/current/core/room/">BBB</a>""" startutc="""2023-12-02T21:05:00+0000""" endutc="""2023-12-02T21:45:00+0000""" start="""4:05""" end="""4:45""" title="""Emacs core development: how it works""" url="""/2023/talks/core""" speakers="""Stefan Kangas""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""core""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""""" startutc="""2023-12-02T22:00:00+0000""" endutc="""2023-12-02T22:10:00+0000""" start="""5:00""" end="""5:10""" title="""Saturday closing remarks""" url="""/2023/talks/sat-close""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-close""" note=""""""]]</div>
+
+Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">Sun Dec 3</a><a name="date-2023-12-03"></a>
+# Sunday Dec 3, 2023
+[[!inline pages="internal(2023/schedule-2023-12-03)" raw="yes"]]
+
+<div class="schedule" data-start="2023-12-03T14:00:00+0000" data-end="2023-12-03T22:30:00+0000" data-tracks="General,Development">
+[[!template id=sched time="""5""" q-and-a="""""" startutc="""2023-12-03T14:00:00+0000""" endutc="""2023-12-03T14:05:00+0000""" start="""9:00""" end="""9:05""" title="""Sunday opening remarks""" url="""/2023/talks/sun-open""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-open""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/hyperamp/room/">BBB</a>""" startutc="""2023-12-03T14:05:00+0000""" endutc="""2023-12-03T14:25:00+0000""" start="""9:05""" end="""9:25""" title="""Top 10 ways Hyperbole amps up Emacs""" url="""/2023/talks/hyperamp""" speakers="""Robert Weiner""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""hyperamp""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf</a>""" startutc="""2023-12-03T14:40:00+0000""" endutc="""2023-12-03T15:00:00+0000""" start="""9:40""" end="""10:00""" title="""Using Koutline for stream of thought journaling""" url="""/2023/talks/koutline""" speakers="""Matthew Jorgensen (PlasmaStrike)""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""koutline""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/scheme/room/">BBB</a>""" startutc="""2023-12-03T15:00:00+0000""" endutc="""2023-12-03T15:20:00+0000""" start="""10:00""" end="""10:20""" title="""Bringing joy to Scheme programming""" url="""/2023/talks/scheme""" speakers="""Andrew Tropin""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""scheme""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/parallel/room/">BBB</a>""" startutc="""2023-12-03T15:10:00+0000""" endutc="""2023-12-03T15:20:00+0000""" start="""10:10""" end="""10:20""" title="""Parallel Text Replacement: Does P = NP?""" url="""/2023/talks/parallel""" speakers="""Lovro, Valentino Picotti""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""parallel""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/eat/room/">BBB</a>""" startutc="""2023-12-03T15:35:00+0000""" endutc="""2023-12-03T15:45:00+0000""" start="""10:35""" end="""10:45""" title="""Eat and Eat powered Eshell, fast featureful terminal inside Emacs""" url="""/2023/talks/eat""" speakers="""Akib Azmain Turja""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""eat""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/test/room/">BBB</a>""" startutc="""2023-12-03T15:35:00+0000""" endutc="""2023-12-03T15:55:00+0000""" start="""10:35""" end="""10:55""" title="""What I learned by writing test cases for GNU Hyperbole""" url="""/2023/talks/test""" speakers="""Mats Lidell""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""test""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/poltys/room/">BBB</a>""" startutc="""2023-12-03T16:00:00+0000""" endutc="""2023-12-03T16:20:00+0000""" start="""11:00""" end="""11:20""" title="""The browser in a buffer""" url="""/2023/talks/poltys""" speakers="""Michael Bauer""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""poltys""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/world/room/">BBB</a>""" startutc="""2023-12-03T16:10:00+0000""" endutc="""2023-12-03T16:30:00+0000""" start="""11:10""" end="""11:30""" title="""GNU Emacs: A World of Possibilities""" url="""/2023/talks/world""" speakers="""Anand Tamariya""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""world""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: wasamasa</a>""" startutc="""2023-12-03T16:35:00+0000""" endutc="""2023-12-03T16:55:00+0000""" start="""11:35""" end="""11:55""" title="""Speedcubing in Emacs""" url="""/2023/talks/cubing""" speakers="""Vasilij "wasamasa" Schneidermann""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""cubing""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/flat/room/">BBB</a>""" startutc="""2023-12-03T16:45:00+0000""" endutc="""2023-12-03T16:55:00+0000""" start="""11:45""" end="""11:55""" title="""A modern Emacs look-and-feel without pain""" url="""/2023/talks/flat""" speakers="""Pedro A. Aranda""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""flat""" note=""""""]]
+[[!template id=sched time="""40""" q-and-a="""<a href="https://emacsconf.org/current/emms/room/">BBB</a>""" startutc="""2023-12-03T18:00:00+0000""" endutc="""2023-12-03T18:40:00+0000""" start="""1:00""" end="""1:40""" title="""Emacs MultiMedia System (EMMS)""" url="""/2023/talks/emms""" speakers="""Yoni Rabkin""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""emms""" note="""captioned"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/gc/room/">BBB</a>""" startutc="""2023-12-03T18:00:00+0000""" endutc="""2023-12-03T18:20:00+0000""" start="""1:00""" end="""1:20""" title="""emacs-gc-stats: Does garbage collection actually slow down Emacs?""" url="""/2023/talks/gc""" speakers="""Ihor Radchenko""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""gc""" note=""""""]]
+[[!template id=sched time="""40""" q-and-a="""<a href="https://emacsconf.org/current/hyperdrive/room/">BBB</a>""" startutc="""2023-12-03T18:35:00+0000""" endutc="""2023-12-03T19:15:00+0000""" start="""1:35""" end="""2:15""" title="""hyperdrive.el: Peer-to-peer filesystem in Emacs""" url="""/2023/talks/hyperdrive""" speakers="""Joseph Turner""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""hyperdrive""" note=""""""]]
+[[!template id=sched time="""30""" q-and-a="""none""" startutc="""2023-12-03T18:55:00+0000""" endutc="""2023-12-03T19:25:00+0000""" start="""1:55""" end="""2:25""" title="""Programming at 200 wpm""" url="""/2023/talks/steno""" speakers="""Daniel Alejandro Tapia""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""steno""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/lspocaml/room/">BBB</a>""" startutc="""2023-12-03T19:30:00+0000""" endutc="""2023-12-03T19:40:00+0000""" start="""2:30""" end="""2:40""" title="""Writing a language server in OCaml for Emacs, fun, and profit""" url="""/2023/talks/lspocaml""" speakers="""Austin Theriault""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""lspocaml""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/mentor/room/">BBB</a>""" startutc="""2023-12-03T19:35:00+0000""" endutc="""2023-12-03T19:45:00+0000""" start="""2:35""" end="""2:45""" title="""Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)""" url="""/2023/talks/mentor""" speakers="""Jeremy Friesen""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""mentor""" note=""""""]]
+[[!template id=sched time="""40""" q-and-a="""<a href="https://emacsconf.org/current/windows/room/">BBB</a>""" startutc="""2023-12-03T19:55:00+0000""" endutc="""2023-12-03T20:35:00+0000""" start="""2:55""" end="""3:35""" title="""Windows into Freedom""" url="""/2023/talks/windows""" speakers="""Corwin Brust""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""windows""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/hn/room/">BBB</a>""" startutc="""2023-12-03T20:00:00+0000""" endutc="""2023-12-03T20:10:00+0000""" start="""3:00""" end="""3:10""" title="""The many ways to browse Hacker News from Emacs""" url="""/2023/talks/hn""" speakers="""Mickael Kerjean""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""hn""" note=""""""]]
+[[!template id=sched time="""40""" q-and-a="""<a href="https://emacsconf.org/current/web/room/">BBB</a>""" startutc="""2023-12-03T20:25:00+0000""" endutc="""2023-12-03T21:05:00+0000""" start="""3:25""" end="""4:05""" title="""Emacs saves the Web""" url="""/2023/talks/web""" speakers="""Yuchen Pei""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""web""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""none""" startutc="""2023-12-03T20:50:00+0000""" endutc="""2023-12-03T21:10:00+0000""" start="""3:50""" end="""4:10""" title="""The Emacsen family, the design of an Emacs and the importance of Lisp""" url="""/2023/talks/emacsen""" speakers="""Fermin""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsen""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/sharing/room/">BBB</a>""" startutc="""2023-12-03T21:20:00+0000""" endutc="""2023-12-03T21:40:00+0000""" start="""4:20""" end="""4:40""" title="""Sharing Emacs is Caring Emacs: Emacs education and why I embraced video""" url="""/2023/talks/sharing""" speakers="""Jacob Boxerman""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sharing""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""""" startutc="""2023-12-03T21:55:00+0000""" endutc="""2023-12-03T22:05:00+0000""" start="""4:55""" end="""5:05""" title="""Sunday closing remarks""" url="""/2023/talks/sun-close""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-close""" note=""""""]]</div> \ No newline at end of file
diff --git a/2023/ideas.md b/2023/ideas.md
new file mode 100644
index 00000000..1d43e7ef
--- /dev/null
+++ b/2023/ideas.md
@@ -0,0 +1,31 @@
+[[!meta title="Ideas"]]
+[[!meta copyright="Copyright &copy; 2020, 2021, 2022 Amin Bandali; 2023 Sacha Chua"]]
+
+This is a place to collect ideas for talks and other sessions for
+EmacsConf 2023. :-)
+
+## Ideas
+
+- **User stories:** Why and how did you get into Emacs? What was helpful? What was challenging? How did you get deeper into it?
+ - These types of talks help people connect with other people and see different user journeys.
+- **Workflows:** How do you use different packages together? What kind of
+ glue makes things easier for you? Videos demonstrating workflows are
+ helpful because it's sometimes hard to read source code or package
+ documentation and imagine how things work.
+- **Emacs configuration techniques, Emacs Lisp**
+- **Coding:** Lots of people use Emacs to work with code. Do you have a good setup? Please share!
+- **Academia:** Students, teachers, and researchers use Emacs too.
+- **Other kinds of work**
+- **Personal information management, personal finance, productivity**
+- **Personal life, unexpected uses of Emacs**
+- **Fun, games, multimedia**
+- **Cool ideas from other editors and tools**
+
+You can also check out past EmacsConf programs to see what kinds of things people have shared before:
+
+- [[2022|/2022/talks]]
+- [[2021|/2021/schedule]]
+- [[2020|/2020/schedule]]
+- [[2019|/2019/schedule]]
+- [[2015|/2015/schedule]]
+- [[2013|/2013/#program]]
diff --git a/2023/info/adventure-after.md b/2023/info/adventure-after.md
new file mode 100644
index 00000000..4a5d4f30
--- /dev/null
+++ b/2023/info/adventure-after.md
@@ -0,0 +1,129 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="adventure-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-adventure" id="subtitle"]]
+
+[[!template text="""Hi, I'm going to give you a little demo""" start="00:00:00.000" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""of a project that I'm working on""" start="00:00:04.040" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""which is called the `orgdungeon`.""" start="00:00:06.440" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""As you can see here, they are just a bunch of Org files""" start="00:00:09.840" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and also an Emacs Lisp file.""" start="00:00:16.040" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""What I found is that if you have these Org files""" start="00:00:20.560" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and then you have an Emacs Lisp file as a source""" start="00:00:26.800" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""to control how to progress from one file to another,""" start="00:00:30.920" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""it will give you a game-like experience.""" start="00:00:36.880" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""It's like the old game Myst.""" start="00:00:40.520" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""It was developed with the technology""" start="00:00:43.480" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""HyperCard for the Macintosh.""" start="00:00:46.120" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Basically, it uses a similar technology,""" start="00:00:48.760" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""so a similar interface to the developer""" start="00:00:53.200" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""who was using that technology to develop the game.""" start="00:00:57.560" video="mainVideo-adventure" id="subtitle"]]
+
+[[!template new="1" text="""Demo""" start="00:01:01.200" video="mainVideo-adventure" id="subtitle"]]
+
+[[!template text="""Concretely, I'm going to give you""" start="00:01:01.200" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""a demo of how the game looks like.""" start="00:01:03.800" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""So, this is a very vanilla Emacs setup.""" start="00:01:08.880" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Then I open up the first Org file.""" start="00:01:14.840" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""The Org file is just a bunch of text,""" start="00:01:18.640" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""but it tells you a story.""" start="00:01:22.840" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""So you wake up somewhere,""" start="00:01:25.520" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and then there is a dog-like robot called Emi around you.""" start="00:01:27.360" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""And then it tells you what you should do.""" start="00:01:32.600" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Following the instructions...""" start="00:01:37.760" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""For example, here it tells you""" start="00:01:40.800" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""down there is one thing called &quot;code block,&quot;""" start="00:01:42.720" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and then you can evaluate it by pressing `C-c C-c`.""" start="00:01:46.240" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Then we can just go there""" start="00:01:51.360" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and then just evaluate the code block.""" start="00:01:53.640" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""So technically it just runs the Emacs Lisp file,""" start="00:01:55.240" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""because you can see here, if you load Emacs Lisp...""" start="00:02:00.240" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""It just evaluates that Emacs Lisp file.""" start="00:02:05.000" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""I can just say `C-c C-c`.""" start="00:02:07.160" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Then for this one, I just say yes,""" start="00:02:09.800" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and then it will jump to another file.""" start="00:02:12.320" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""But in the game, I call it the plane.""" start="00:02:16.520" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""So it jumps to another plane.""" start="00:02:18.760" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Yeah, so...""" start="00:02:21.040" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""In the other one, it's just saying that""" start="00:02:24.040" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""there is a function called `emi-escape-10`.""" start="00:02:26.400" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Assuming that you don't have any experience""" start="00:02:29.880" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""how to use Emacs,""" start="00:02:33.480" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""so you have no idea how to do that,""" start="00:02:34.760" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""but down there, it's saying that""" start="00:02:38.760" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""there is a key combination called `C-h f`,""" start="00:02:41.320" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and it will bring up the help system.""" start="00:02:44.320" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Then you can read the help file of `emi-escape-10`.""" start="00:02:48.400" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""So you can just do that. For example, `C-h f`""" start="00:02:52.560" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and then `describe-function` `emi-escape-10` here.""" start="00:02:55.740" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""It will show you the help file.""" start="00:03:03.000" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Then it's just saying that you can press `M-x`,""" start="00:03:06.320" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and Meta usually mapped to Alt,""" start="00:03:10.920" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and then yeah.""" start="00:03:13.520" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Then you can just close this help file using `C-x 1`.""" start="00:03:15.080" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""I'm just going to do that. And then yeah...""" start="00:03:18.720" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""I'm just try that. `M-x` and then `emi-escape-10`.""" start="00:03:21.400" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""All right.""" start="00:03:31.480" video="mainVideo-adventure" id="subtitle"]]
+
+[[!template new="1" text="""emi-escape-12""" start="00:03:33.360" video="mainVideo-adventure" id="subtitle"]]
+
+[[!template text="""So I will jump to another file.""" start="00:03:33.360" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Or in the game, you jump to another plane.""" start="00:03:36.040" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""And now you know that""" start="00:03:39.360" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""there is a function called `emi-escape-12`.""" start="00:03:40.339" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""And yeah, you can just do that `emi`,""" start="00:03:44.840" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""because you learned it previously, right.""" start="00:03:47.639" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""`emi-escape-12`.""" start="00:03:50.400" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""But this time, it asks you for a password,""" start="00:03:52.080" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""which you probably don't know, right?""" start="00:03:55.120" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""If you just type in anything,""" start="00:03:57.800" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""it will just say incorrect password.""" start="00:03:59.840" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""But yeah, it's part of the learning experience""" start="00:04:02.720" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""because previously you learned""" start="00:04:06.360" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""that you should use the help file,""" start="00:04:07.280" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""help system to read the help file of a function,""" start="00:04:10.320" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""so you can just use the help file""" start="00:04:16.200" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""to look for the help of `emi-escape-12`.""" start="00:04:18.320" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Then, yeah, the help file will say that""" start="00:04:25.840" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""you should enter a password,""" start="00:04:29.520" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and the password is `emi`.""" start="00:04:31.240" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Right. So you can just do that.""" start="00:04:34.160" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Write `emi-escape-12`,""" start="00:04:36.440" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and then now you know the password is `emi`. Right.""" start="00:04:42.240" video="mainVideo-adventure" id="subtitle"]]
+
+[[!template new="1" text="""The rest of the game""" start="00:04:47.040" video="mainVideo-adventure" id="subtitle"]]
+
+[[!template text="""So you can progress along these different files,""" start="00:04:47.040" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and then if you...""" start="00:04:51.840" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Okay, it's like a game,""" start="00:04:53.520" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""but at the same time, it also teaches you""" start="00:04:54.640" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""something about how Emacs works.""" start="00:04:57.280" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""For example, like the previous one,""" start="00:05:01.680" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""you know how to use the help file, for example,""" start="00:05:04.600" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""but in the later part, you will learn how to""" start="00:05:07.280" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""evaluate some Emacs Lisp code""" start="00:05:11.520" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and also how to write some Emacs Lisp code""" start="00:05:14.280" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""as well, and then you will learn""" start="00:05:17.160" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""the difference between interactive commands""" start="00:05:19.560" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""and also just ordinary functions, for example.""" start="00:05:23.400" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Now, I just created a few Org files,""" start="00:05:27.240" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""but I'm actively adding more Org files""" start="00:05:31.400" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""so that we can have a complete kind of""" start="00:05:36.440" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""educational experience.""" start="00:05:39.600" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""If you want to follow along [with] this project,""" start="00:05:42.560" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""you can just go to my Github repository.""" start="00:05:45.640" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""I hope you enjoyed this little demo.""" start="00:05:51.360" video="mainVideo-adventure" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:05:56.540" video="mainVideo-adventure" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20adventure%3A%20An%20Org-Mode%20based%20text%20adventure%20game%20for%20learning%20the%20basics%20of%20Emacs%2C%20inside%20Emacs%2C%20written%20in%20Emacs%20Lisp)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/adventure-before.md b/2023/info/adventure-before.md
new file mode 100644
index 00000000..c774f5ff
--- /dev/null
+++ b/2023/info/adventure-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 6-min talk; Q&A: Etherpad
+Status: All done
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="adventure-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="adventure-mainVideo" data="""
+00:00.000 Introduction
+01:01.200 Demo
+03:33.360 emi-escape-12
+04:47.040 The rest of the game
+
+"""]]<div></div>Duration: 05:58 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.opus">Download --main.opus (3.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.webm">Download --main.webm (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/2oqbPJB8Wm3QSo4HCKAyVn">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/adventure-nav.md b/2023/info/adventure-nav.md
new file mode 100644
index 00000000..95382fff
--- /dev/null
+++ b/2023/info/adventure-nav.md
@@ -0,0 +1,6 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Next by track: <a href="/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/collab-after.md b/2023/info/collab-after.md
new file mode 100644
index 00000000..de166231
--- /dev/null
+++ b/2023/info/collab-after.md
@@ -0,0 +1,423 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="collab-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-collab" id="subtitle"]]
+
+[[!template text="""[Lukas]: Welcome to our presentation,""" start="00:00:00.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Collaborative Data Processing""" start="00:00:01.875" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and Documenting using org-babel.""" start="00:00:03.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""My name is Lukas Bossert, and I'm""" start="00:00:06.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""from the RWTH Aachen University""" start="00:00:07.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""in the city of Aachen, Germany.""" start="00:00:09.741" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: And my name is Jonathan Hartmann.""" start="00:00:12.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I'm also from the IT Center here at RWTH Aachen.""" start="00:00:14.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: Great.""" start="00:00:18.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And we will show you today how you""" start="00:00:19.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""can use Org Mode for data processing.""" start="00:00:21.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So you see a little workflow what we are going to do.""" start="00:00:25.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""First, we will give you a slight introduction to Org Mode.""" start="00:00:28.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Then we will dive into the part of data preparing.""" start="00:00:31.200" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""First, you're going to query the data using the language SPARQL.""" start="00:00:34.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Then we're going to clean it using a different language.""" start="00:00:38.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And in the main part of our presentation,""" start="00:00:41.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""we're going to do the data processing, first aggregating""" start="00:00:44.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""using Python, later on counting items using Org,""" start="00:00:48.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and even visualizing it using R. At the end,""" start="00:00:52.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""we're going to show you how to preserve""" start="00:00:56.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""the data and the document and its documentation,""" start="00:00:58.960" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""first doing in plain exporting, then adding some metadata,""" start="00:01:01.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and showing you two different ways, first a manual export,""" start="00:01:06.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and also then a batch-processed export.""" start="00:01:09.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""All right.""" start="00:01:13.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Let's dive in to that.""" start="00:01:14.240" video="mainVideo-collab" id="subtitle"]]
+
+[[!template new="1" text="""Org Mode""" start="00:01:16.080" video="mainVideo-collab" id="subtitle"]]
+
+[[!template text="""Jonathan, can you give us an introduction about Org Mode?""" start="00:01:16.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Of course.""" start="00:01:19.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So in case anyone isn't familiar with it,""" start="00:01:20.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Org Mode, in the words of Carsten Dominik,""" start="00:01:23.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""is back to the future for plain text.""" start="00:01:25.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So this is just a module available for Emacs,""" start="00:01:28.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""plain-text base.""" start="00:01:31.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""It's been around since 2003, which""" start="00:01:32.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""makes it about 20 years old.""" start="00:01:34.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And it's extensible and fully customizable.""" start="00:01:36.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And especially, it's very convenient, very good""" start="00:01:40.160" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""for scientific text production and organization.""" start="00:01:44.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So for example, you can do project management, agenda,""" start="00:01:46.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""diary, journaling, personal knowledge management,""" start="00:01:49.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""presentation.""" start="00:01:52.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Even this is written in Org Mode.""" start="00:01:53.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""It's an Org Mode presentation.""" start="00:01:55.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""You can do single source publishing,""" start="00:01:57.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which we will do later on, and also""" start="00:01:59.200" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""literate programming, which is the core of our talk.""" start="00:02:01.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""OK.""" start="00:02:06.480" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: So let me stop this presentation here.""" start="00:02:07.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So what you see here is the plain text underneath it.""" start="00:02:10.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So this is Org Mode.""" start="00:02:14.720" video="mainVideo-collab" id="subtitle"]]
+
+[[!template new="1" text="""Working together""" start="00:02:18.960" video="mainVideo-collab" id="subtitle"]]
+
+[[!template text="""And Jonathan, since we kind of already""" start="00:02:18.960" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""did the introduction together, should we""" start="00:02:21.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""also do the working part together?""" start="00:02:26.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Of course.""" start="00:02:28.761" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So you see on the screen there on the right,""" start="00:02:29.701" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that's my screen in Emacs.""" start="00:02:33.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And Lukas, why don't you host a session using CRDT,""" start="00:02:35.061" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and I'll connect to your buffer.""" start="00:02:39.521" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: OK. Great.""" start="00:02:41.201" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I do that.""" start="00:02:42.561" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So what I do, I'm using Doom Emacs.""" start="00:02:43.281" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And I can use the `SPC` and then the `l`""" start="00:02:46.181" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""for the live share/collab part.""" start="00:02:49.308" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I can use the `s` for share current buffer.""" start="00:02:52.141" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So when I do this, I'm getting asked for some settings.""" start="00:02:58.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I'm going with the default settings here.""" start="00:03:01.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So default port, no password, and my display name.""" start="00:03:04.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And now Emacs is connecting.""" start="00:03:08.341" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And once it's connected, which just takes a couple of seconds,""" start="00:03:11.941" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I can get the URL.""" start="00:03:15.180" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So I'm going back to this menu and using `y`""" start="00:03:17.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""for copying the URL of the current session.""" start="00:03:21.160" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And this is the URL I'm going to send over to you, Jonathan,""" start="00:03:24.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""to pick that up.""" start="00:03:27.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Right.""" start="00:03:29.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""OK.""" start="00:03:29.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And now on my screen, I'm going to do a `SPC l c` for connect.""" start="00:03:30.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And I'm going to paste the URL""" start="00:03:37.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that Lukas just sent me in here.""" start="00:03:38.741" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Default port, no password.""" start="00:03:40.980" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And we're connecting now.""" start="00:03:43.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So this takes a second just to get us synced up.""" start="00:03:45.700" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So we can work on the same document at the same time.""" start="00:03:51.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We can follow each other's cursors around.""" start="00:03:54.161" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We can have multiple buffers open and work on them""" start="00:03:56.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""at the same time.""" start="00:03:58.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And so here you see that we are both in the same document.""" start="00:04:01.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""You can see my cursor popping around.""" start="00:04:04.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And you can see we're both editing the same item.""" start="00:04:09.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Great.""" start="00:04:13.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: So we also see who else is currently in our buffer""" start="00:04:14.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""with the user overview.""" start="00:04:18.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So let me just delete that window.""" start="00:04:20.200" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And that's going to work in our main one.""" start="00:04:23.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So we said first part is about data retrieval.""" start="00:04:26.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So we should give it a headline.""" start="00:04:29.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We said prepare stage.""" start="00:04:37.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So what are we going to do first, Jonathan?""" start="00:04:39.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: So what we're going to do,""" start="00:04:42.320" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""what this whole document is based upon,""" start="00:04:43.941" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""is we're going to pull data from Wikidata using a SPARQL query.""" start="00:04:45.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""The data we're going to pull is related to the NFDIs,""" start="00:04:50.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which here in Germany is the National Forschungsdaten""" start="00:04:53.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Infrastructure, which is a sort of collection of universities""" start="00:04:55.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that work together on various research projects.""" start="00:05:00.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And this is emblematic of the kind of data""" start="00:05:03.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that we would be interested in working with here.""" start="00:05:05.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So I'm going to paste a--forgive the pre-written code--""" start="00:05:09.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I'm going to paste some text in here.""" start="00:05:13.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: And while you are talking, I just""" start="00:05:20.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""keep on documenting what we do""" start="00:05:21.408" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""so we can split the work.""" start="00:05:23.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: In here, after a minor technical upset,""" start="00:05:27.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""is the raw dataset cell.""" start="00:05:29.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And it's going to use SPARQL,""" start="00:05:32.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which is how we have the syntax highlighting""" start="00:05:34.741" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""in our code here.""" start="00:05:37.175" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""It's going to go to the URL endpoint""" start="00:05:37.941" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""query.wikidata.org/sparql ,""" start="00:05:40.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and it's going to return the data as a text CSV,""" start="00:05:43.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and it's going to cache that data""" start="00:05:46.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""so that we don't constantly hammer the API every time""" start="00:05:49.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""we run this notebook.""" start="00:05:51.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So I'm going to run that there.""" start="00:05:54.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""You can see down at the bottom of my screen,""" start="00:05:57.361" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""we're contacting the host query.wikidata.org .""" start="00:05:58.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: And there's the result.""" start="00:06:05.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Yeah, except I think that for our purposes here,""" start="00:06:07.320" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""we're just going to limit this to 50 results.""" start="00:06:11.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: Oh, yeah.""" start="00:06:15.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Just so it's a little easier for us to manage.""" start="00:06:16.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I'm going to run that again.""" start="00:06:18.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""There we go.""" start="00:06:20.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""That looks a little better.""" start="00:06:21.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: I think that's fine.""" start="00:06:22.320" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""50 items is fine.""" start="00:06:23.160" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So what do we see here, Jonathan?""" start="00:06:25.360" video="mainVideo-collab" id="subtitle"]]
+
+[[!template new="1" text="""Data cleaning""" start="00:06:27.840" video="mainVideo-collab" id="subtitle"]]
+
+[[!template text="""[Jonathan]: Right.""" start="00:06:27.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So the first thing we see when we look at this""" start="00:06:28.320" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""is a couple of Q codes at the top,""" start="00:06:31.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which are an artifact of Wikidata.""" start="00:06:33.308" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So these are pages which don't have""" start="00:06:36.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""the label for whichever institution they happen to be.""" start="00:06:39.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""For our purposes here, we're just going to exclude them.""" start="00:06:42.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We could just go on Wikidata and edit them ourselves.""" start="00:06:45.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""But for now, it's a little more interesting""" start="00:06:48.200" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""if we go and remove them.""" start="00:06:50.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So I'm going to create a new cell.""" start="00:06:52.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Lukas, if you don't mind starting one for data cleaning.""" start="00:06:55.160" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: Oh, yeah.""" start="00:06:58.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Good point.""" start="00:06:58.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Yeah, data cleaning.""" start="00:06:59.480" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""OK.""" start="00:07:02.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""How do you want to do that, Jonathan?""" start="00:07:03.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: I'm going to use a shell command.""" start="00:07:05.500" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So let's see.""" start="00:07:09.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""There we go.""" start="00:07:11.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And so you can see, here is another cell,""" start="00:07:13.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that the cell is now using a shell,""" start="00:07:15.160" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and that we have this thing `:var input=raw-dataset`,""" start="00:07:20.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which is the name of the cell above""" start="00:07:23.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""where we got our data from Wikidata.""" start="00:07:25.841" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""This is going to run just a simple shell command.""" start="00:07:28.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""It's going to take the input and then run `sed` on it""" start="00:07:31.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and exclude any records which have a Q""" start="00:07:33.960" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""followed by one or more digits afterwards.""" start="00:07:37.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""That should remove those from our data set.""" start="00:07:41.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So I'm going to run that.""" start="00:07:44.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""That seems to have done the trick.""" start="00:07:48.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: Great, yeah.""" start="00:07:51.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""That's really good.""" start="00:07:51.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We got rid of all the Q items.""" start="00:07:52.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Very good.""" start="00:07:55.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So we just have two-column table: institutions""" start="00:07:55.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and consortia.""" start="00:07:59.960" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Very nice.""" start="00:08:02.760" video="mainVideo-collab" id="subtitle"]]
+
+[[!template new="1" text="""Processing""" start="00:08:04.040" video="mainVideo-collab" id="subtitle"]]
+
+[[!template text="""So let's come to our main part, doing some processing.""" start="00:08:04.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Let me give you a headline here, process the data.""" start="00:08:08.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""What do you want to do first?""" start="00:08:13.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: This is not a very complicated data set,""" start="00:08:15.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""but let's just do some simple counts first.""" start="00:08:17.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I'm going to start with Python,""" start="00:08:19.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and we're just going to do some aggregation with Python.""" start="00:08:22.200" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Again, I've got some pre-written code here.""" start="00:08:25.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""You can see that we've started a cell using Python.""" start="00:08:30.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""The variable `clean_df` now is equal to `clean-dataset`.""" start="00:08:35.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So we're going to take that data""" start="00:08:37.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that we retrieved from the SPARQL query,""" start="00:08:39.708" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""we're going to run it through the cleaning cell,""" start="00:08:41.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and then we're going to import it into this cell.""" start="00:08:42.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""This is just going to do some simple Python aggregation.""" start="00:08:45.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We're going to import `pandas`,""" start="00:08:47.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which is the Python data science library,""" start="00:08:49.008" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""create a data frame out of our input,""" start="00:08:51.308" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and then aggregate it, grouping on `wLabel`,""" start="00:08:54.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and getting a count from that and returning it.""" start="00:08:57.480" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So if we execute that cell...""" start="00:08:59.960" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: Nice, we get institutions and a count.""" start="00:09:05.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""But what about not ordering it by the alphabet,""" start="00:09:08.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""but more like ordering by counts?""" start="00:09:14.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Sure.""" start="00:09:17.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So let's do this... `sort_values()`, I think, as the Python.""" start="00:09:18.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""How does that look?""" start="00:09:22.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: Better, but I would like to""" start="00:09:24.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""have the highest number first""" start="00:09:27.641" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and then ascending.""" start="00:09:29.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Well, not ascending, descending.""" start="00:09:32.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Right, so we can do `ascending=False`.""" start="00:09:34.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: This is perfect, I'd say.""" start="00:09:39.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Great.""" start="00:09:42.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: Very good.""" start="00:09:43.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""OK, that's nice.""" start="00:09:44.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We get a good overview here.""" start="00:09:46.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""But can we also do something else,""" start="00:09:48.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""like counting how many institutions are""" start="00:09:50.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""involved in one consortium?""" start="00:09:56.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And also using this later on in the text?""" start="00:09:57.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Sure, so I'm going to put a new...""" start="00:10:00.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""If you give me another heading down here""" start="00:10:00.881" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""for institutions per consortium...""" start="00:10:05.041" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And here we're going to use awk code just to spice things up""" start="00:10:12.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and add yet another language in here.""" start="00:10:16.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So you can see this is awk.""" start="00:10:18.960" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We're using standard in instead of defining a variable.""" start="00:10:22.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""But the really interesting thing about this cell""" start="00:10:26.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""is that we have this `:var consortium=&quot;NFDI4Memory&quot;`.""" start="00:10:28.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And what this code is doing is""" start="00:10:33.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""it's counting any time it sees""" start="00:10:35.641" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that particular consortium name""" start="00:10:38.041" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and keeping track of that.""" start="00:10:40.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So if we execute this,""" start="00:10:41.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Lukas, why don't you execute this one?""" start="00:10:43.908" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: OK, I'm going to enter it.""" start="00:10:45.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And I get a result, NFDI4Memory,""" start="00:10:49.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""because this is our default value for this variable.""" start="00:10:52.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And we get the count.""" start="00:10:58.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So it's five institutions are involved""" start="00:10:59.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""in the NFDI4memory consortium.""" start="00:11:01.641" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Great, but the very nice thing, what I think,""" start="00:11:04.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""is here that we can use this code snippet within our text.""" start="00:11:07.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So, blended in seamlessly.""" start="00:11:12.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Let me give you an example.""" start="00:11:14.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I'm writing out the text.""" start="00:11:16.200" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Now we know how many institutions are in...""" start="00:11:18.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Give me an example.""" start="00:11:27.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I would like to know how many institutions are""" start="00:11:29.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""involved in NFDI4Objects, which is a consortium.""" start="00:11:31.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So I'm writing `call_` and using""" start="00:11:35.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""the name of this snippet here, of this cell,""" start="00:11:39.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which is `inst-count(`,""" start="00:11:42.608" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and writing my value, `NFDI4Objects`.""" start="00:11:46.608" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""As soon as I evaluate this using `C-c C-c`,""" start="00:11:51.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I get the result back here.""" start="00:11:58.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I can do this even for more.""" start="00:12:00.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Or in writing, `call_inst-count`, go with `NFDI4Earth`,""" start="00:12:05.160" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which is another consortium.""" start="00:12:14.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""`C-c C-c`, it's three institutions.""" start="00:12:16.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""This can be used throughout your text,""" start="00:12:20.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and as soon as the data set changes from in the beginning,""" start="00:12:23.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""maybe different results requiring Wikidata,""" start="00:12:26.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""this also will be updated once it's exported.""" start="00:12:30.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Very nice, Jonathan.""" start="00:12:35.080" video="mainVideo-collab" id="subtitle"]]
+
+[[!template new="1" text="""Visualization""" start="00:12:36.040" video="mainVideo-collab" id="subtitle"]]
+
+[[!template text="""But I think we did a lot of analysis""" start="00:12:36.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""on text and counting things.""" start="00:12:38.975" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Can we also do something more visual?""" start="00:12:41.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Show me something.""" start="00:12:43.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Sure.""" start="00:12:45.200" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So what we can do with this, because we just""" start="00:12:45.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""have two columns here that are sort of related,""" start="00:12:48.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""we can build a little network plot out of it.""" start="00:12:51.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So let's make a network visualization.""" start="00:12:53.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We're going to use the `igraph` library from R""" start="00:12:57.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and just plot the edges that we see here.""" start="00:12:59.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""There we go.""" start="00:13:02.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""There's my little heading and space.""" start="00:13:04.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Here is our code.""" start="00:13:11.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Again, just to be fancy and keep using""" start="00:13:13.480" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""different languages in here, we set a variable called""" start="00:13:16.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""`NFDI_edges` equal to `clean-dataset`.""" start="00:13:19.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So this, again, is sort of cascading""" start="00:13:21.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""through the original data""" start="00:13:23.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that we pulled from the Wikidata endpoint,""" start="00:13:25.741" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""cleaning that data, and now it's being inserted""" start="00:13:28.808" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""into this cell as well.""" start="00:13:30.960" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""But you see the difference here.""" start="00:13:32.960" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Instead of exporting a table, what we're saying""" start="00:13:34.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""is that there will be a graphics file,""" start="00:13:36.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and it will be called network-plot.png.""" start="00:13:39.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""All right.""" start="00:13:44.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And so Lukas, why don't you execute this one?""" start="00:13:45.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: There you go.""" start="00:13:47.960" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I can click `C-c C-c`""" start="00:13:48.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and I get a nice plot of the network below our cell.""" start="00:13:52.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So this is very nice indeed.""" start="00:13:59.160" video="mainVideo-collab" id="subtitle"]]
+
+[[!template new="1" text="""Preserve""" start="00:14:01.760" video="mainVideo-collab" id="subtitle"]]
+
+[[!template text="""So I think it's about time to wrap it up and to export""" start="00:14:01.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and to preserve the data and the documentation""" start="00:14:05.200" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that we have in our very last step, calling preserve.""" start="00:14:07.960" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So I would like to do it in two steps.""" start="00:14:13.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""First, maybe manually exporting it,""" start="00:14:16.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""but then also doing it in a batch process.""" start="00:14:18.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Giving you some insights how to do that manual export.""" start="00:14:22.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""For example, you can do a LaTeX export.""" start="00:14:27.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Let me write down the key combination to do that here.""" start="00:14:30.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So you press `SPC m e l o`.""" start="00:14:34.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Let me show you how this is done.""" start="00:14:44.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So I'm pressing `SPC`.""" start="00:14:49.160" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I'm pressing `m`, which is my local leader.""" start="00:14:51.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I'm pressing `e`, which is now the `org-export-dispatch`.""" start="00:14:55.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And now I have different options I can choose from.""" start="00:15:01.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I want to do a LaTeX export because I want to get in PDF.""" start="00:15:03.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So I'm pressing `l`.""" start="00:15:07.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Now I've got different options available.""" start="00:15:08.675" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So I'm pressing `o` for a PDF file and open that.""" start="00:15:11.480" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Let's see now the code.""" start="00:15:17.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Now this is exporting document.""" start="00:15:21.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And what we have here is PDF,""" start="00:15:25.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which contains our workflow in the beginning,""" start="00:15:29.675" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""our bullet points we have here,""" start="00:15:31.975" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and also the code snippet""" start="00:15:35.708" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that we use for querying the data.""" start="00:15:37.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And we have the result below that.""" start="00:15:41.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So this is our table with all the data sets.""" start="00:15:43.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""But as you can see, this is running out of the page.""" start="00:15:47.000" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So this is not very nice using the default settings.""" start="00:15:51.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""But everything is in this PDF.""" start="00:15:55.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""I guess we can now show you a way""" start="00:16:00.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""how to improve this result.""" start="00:16:02.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Right.""" start="00:16:06.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So we have, of course, a version of this""" start="00:16:07.040" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that we prepared ahead of time,""" start="00:16:09.400" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which is more or less identical to the one we just made,""" start="00:16:10.775" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""but it has a little more text, a little more explanation,""" start="00:16:14.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""a little more documentation along with the code.""" start="00:16:17.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""You can see we have some metadata up at the top,""" start="00:16:20.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""the title, the authors, a bibliography,""" start="00:16:23.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and most importantly, the `custom-export.setup` file,""" start="00:16:26.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which lists specifically the sort of LaTeX commands""" start="00:16:31.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that we're using and the HTML styles that we're going to use.""" start="00:16:36.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And then down at the bottom of this file,""" start="00:16:43.600" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""we have our automatic batch process.""" start="00:16:45.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Here is one more language we're including in here.""" start="00:16:49.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So this is Lisp.""" start="00:16:51.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And you can see here we are exporting to HTML, ASCII,""" start="00:16:53.440" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and PDF.""" start="00:16:57.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""The nice thing about this is that this is a document.""" start="00:16:58.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""It's a sort of document that we have a couple of""" start="00:17:01.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""that we can have running automatically and building.""" start="00:17:03.308" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""It will export a HTML, an ASCII file, and a PDF file""" start="00:17:08.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""every time it's run based off of""" start="00:17:12.920" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""the most recent data available on Wikidata.""" start="00:17:14.675" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So it's self-documenting.""" start="00:17:17.320" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We have, of course, our data retrieval steps,""" start="00:17:19.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""our data cleaning steps, our data preparation steps,""" start="00:17:22.441" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and our preservation steps all listed at the same time.""" start="00:17:25.160" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And then you can see over on the right,""" start="00:17:28.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""there's an example of the HTML file that we get out of this.""" start="00:17:30.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We also get a very nicely formatted PDF file,""" start="00:17:34.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""which doesn't have that little issue""" start="00:17:37.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""with the overflow of the table.""" start="00:17:39.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""It's very nicely put together.""" start="00:17:41.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And we even have an ASCII file.""" start="00:17:43.560" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""And I should also point out very quickly,""" start="00:17:46.200" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""while you have this one up, Lukas, after the awk code,""" start="00:17:47.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""you can see the text for the number of consortia,""" start="00:17:51.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""or the number of institutions per consortia""" start="00:17:56.080" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""is actually printed inline.""" start="00:17:57.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: Yeah, you're very right.""" start="00:18:00.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So this is what we had as code,""" start="00:18:01.800" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""and now this is nicely integrated into our text.""" start="00:18:06.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So we got the consortium and number of institutions.""" start="00:18:10.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""You can't tell a difference between code and text.""" start="00:18:15.280" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: And those are automatically updated.""" start="00:18:19.200" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""So if another institution joins NFDI4Earth,""" start="00:18:20.720" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""then the next time this runs, we update the text right here.""" start="00:18:23.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""It's nothing we have to worry about.""" start="00:18:26.320" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""We just pull it directly out of Wikidata.""" start="00:18:28.520" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Lukas]: And for the sake of completeness,""" start="00:18:31.840" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""this is the ASCII file.""" start="00:18:34.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""That's in the export format.""" start="00:18:37.880" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""It contains also everything, code and data.""" start="00:18:42.760" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Yeah, so this is what we wanted to show you,""" start="00:18:48.360" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""how to do some data processing,""" start="00:18:53.240" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""some collaborative work,""" start="00:18:56.640" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""documenting using org-babel.""" start="00:18:58.680" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""Thanks for listening.""" start="00:19:01.120" video="mainVideo-collab" id="subtitle"]]
+[[!template text="""[Jonathan]: Thank you all, have a good day.""" start="00:19:05.720" video="mainVideo-collab" id="subtitle"]]
+
+
+
+Captioner: amine
+
+Questions or comments? Please e-mail [hartman@itc.rwth-aachen.de, bossert@itc.rwth-aachen.de](mailto:hartman@itc.rwth-aachen.de, bossert@itc.rwth-aachen.de?subject=Comment%20for%20EmacsConf%202023%20collab%3A%20Collaborative%20data%20processing%20and%20documenting%20using%20org-babel)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/collab-before.md b/2023/info/collab-before.md
new file mode 100644
index 00000000..22e68600
--- /dev/null
+++ b/2023/info/collab-before.md
@@ -0,0 +1,21 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 20-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Status: All done
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="collab-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="collab-mainVideo" data="""
+00:00.000 Introduction
+01:16.080 Org Mode
+02:18.960 Working together
+06:27.840 Data cleaning
+08:04.040 Processing
+12:36.040 Visualization
+14:01.760 Preserve
+
+"""]]<div></div>Duration: 19:16 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm">Download --main.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--room-noise.webm">Download --room-noise.webm</a></li><li><a href="https://toobnix.org/w/7AAwoawr5MXNSrqiHJQoak">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/collab-nav.md b/2023/info/collab-nav.md
new file mode 100644
index 00000000..55c61f3f
--- /dev/null
+++ b/2023/info/collab-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/nabokov">Why Nabokov would use Org-Mode if he were writing today</a>
+Next by track: <a href="/2023/talks/solo">How I play TTRPGs in Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/core-after.md b/2023/info/core-after.md
new file mode 100644
index 00000000..13fa508a
--- /dev/null
+++ b/2023/info/core-after.md
@@ -0,0 +1,1565 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="core-mainVideo-transcript"></a>
+# Transcript (unedited)
+
+[[!template text="""All right. Hi again, everyone.""" start="00:00:02.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's been a while. Well,""" start="00:00:03.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""actually, it's been like 2 minutes tops.""" start="00:00:04.839" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We were just with John Wheatley,""" start="00:00:07.819" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and now we are with Stefan Krangas.""" start="00:00:09.099" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Hi. Hi. So as we said before,""" start="00:00:11.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Stefan is co-maintainer now of Is it the""" start="00:00:16.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""entire Emacs project? How do you describe""" start="00:00:20.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this? Yeah, co-maintainer of GNU Emacs.""" start="00:00:22.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Right, perfect. So you know what?""" start="00:00:27.439" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Because I'm sure everyone is dying to hear""" start="00:00:29.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""everything you've got to say in your""" start="00:00:32.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""presentation I'm just going to shut up now""" start="00:00:33.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and leave the floor to you.""" start="00:00:36.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Do you need to share your screen or anything?""" start="00:00:37.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""No. Okay great well I'll just cut my webcam""" start="00:00:40.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""off I'll still be in the background so do not""" start="00:00:45.239" video="mainVideo-core" id="subtitle"]]
+[[!template text="""hesitate if you've got any problem I'm still""" start="00:00:47.059" video="mainVideo-core" id="subtitle"]]
+[[!template text="""around And I'll see you just beacon whenever""" start="00:00:48.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you're done. And I'll show up with the""" start="00:00:52.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""questions. All right? Thank you,""" start="00:00:53.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Leo. And thank you, everyone,""" start="00:00:56.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for being here. I'm Stefan Kangas.""" start="00:00:58.739" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So as Leo explained, I am recently appointed""" start="00:01:02.739" video="mainVideo-core" id="subtitle"]]
+[[!template text="""as a co-maintainer of GNU Emacs,""" start="00:01:06.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""which a role that I'm fulfilling currently""" start="00:01:10.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""with Eli Sretsky, who's been co-maintainer""" start="00:01:13.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for quite some time. So I got the question to""" start="00:01:18.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""be a co-maintainer from Richard in August""" start="00:01:23.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this year. And of course,""" start="00:01:26.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""when you get a question like that,""" start="00:01:29.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I couldn't not say yes.""" start="00:01:31.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So here we are. I can't tell you how excited""" start="00:01:34.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I am to have this opportunity to address the""" start="00:01:39.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""community in this way.""" start="00:01:45.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'm really humbled, of course,""" start="00:01:47.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to be part of it, and to be able to serve the""" start="00:01:50.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""community in this capacity.""" start="00:01:55.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I've used Emacs, I think many of you might""" start="00:02:00.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""also have used Emacs for quite some time,""" start="00:02:04.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but I'm going on 2 decades as an Emacs user.""" start="00:02:06.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""My involvement in Emacs Lisp development is,""" start="00:02:11.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, almost as long,""" start="00:02:14.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but my core development goes back only 4,""" start="00:02:16.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""5 years. I have to also thank the EmacsConf""" start="00:02:19.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""organizers who are doing,""" start="00:02:27.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, a tremendous job and have done a""" start="00:02:29.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""tremendous job over the years in really""" start="00:02:31.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""building and strengthening what I think is""" start="00:02:34.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this fantastic community of users and""" start="00:02:38.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""developers and people interested in Emacs.""" start="00:02:42.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I actually had the chance to meet up with Eli""" start="00:02:46.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sretzky, as well as another Emacs hacker,""" start="00:02:50.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Andrea Corallo, when I was at the GNU""" start="00:02:53.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""project's 40 years celebration,""" start="00:02:57.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""40 years since the GNU project was announced.""" start="00:03:00.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And it was very inspiring in general to meet""" start="00:03:05.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""people. And I think EmacsConf should also,""" start="00:03:09.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, serve to inspire and sort of help""" start="00:03:12.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""bring something to the type of work that many""" start="00:03:19.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of us are doing to improve Emacs,""" start="00:03:22.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""whether it's in package development or in""" start="00:03:24.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""core, to bring out the new and exciting ideas""" start="00:03:26.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and get people enthusiastic about Emacs,""" start="00:03:29.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""about hacking on Emacs.""" start="00:03:34.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""This is my little attempt to contribute with""" start="00:03:38.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""let's say 2 things. I will first try to""" start="00:03:45.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""present how we do Emacs core development and""" start="00:03:49.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""why we've done some of the choices that we""" start="00:03:54.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""have, because We have seen at times that""" start="00:03:58.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""perhaps people aren't always clear on this or""" start="00:04:02.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that aspect. So maybe this will be""" start="00:04:06.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""enlightening. I will also try to present some""" start="00:04:08.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""kind of vision for what Emacs could be with""" start="00:04:12.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""your help. Emacs is already very good,""" start="00:04:18.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""as we all know, but we could be even better.""" start="00:04:21.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That's the reality of any type of software""" start="00:04:27.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development. So the overall idea of this talk""" start="00:04:30.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""is to tell you, if you're an Emacs list""" start="00:04:35.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""package developer today,""" start="00:04:38.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""why you should become an Emacs core""" start="00:04:40.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""developer, and the sort of steps that you""" start="00:04:44.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""might want to take to do that,""" start="00:04:47.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""or how you can help Emacs core development.""" start="00:04:49.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Even if you're just a user and you found a""" start="00:04:52.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""bug, report it. Perhaps you have a feature""" start="00:04:54.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""request that you'd like to discuss.""" start="00:04:57.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think we need more interaction in general""" start="00:04:58.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""between Emacs core developers,""" start="00:05:02.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""typically on emacsdevil.gnu.org,""" start="00:05:05.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the mailing list that we use to coordinate""" start="00:05:08.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""our development efforts,""" start="00:05:12.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""between Emacs devil package developers and""" start="00:05:15.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""users, Because there is so much great stuff""" start="00:05:19.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""really going on in the community.""" start="00:05:22.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But I think sometimes the step to core""" start="00:05:25.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development seems big and perhaps even a""" start="00:05:28.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""little bit scary. So I'm hoping to be able to""" start="00:05:32.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""help bridge that gap, even if just a little""" start="00:05:35.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""bit. We need more people contributing to""" start="00:05:38.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs itself. And also a small disclaimer""" start="00:05:43.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""here, in this talk I will only be able to""" start="00:05:46.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""speak for myself, not for GNU or the Emacs""" start="00:05:49.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""project, even if it's like a little bit more""" start="00:05:53.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""official, but I will also try to give the""" start="00:05:56.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""view of the project where it makes sense to""" start="00:05:58.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""do so. Keep in mind, I'm only 1 of the""" start="00:06:01.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""maintainers, the co-maintainer together with""" start="00:06:04.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Eli, and I can't just make decisions""" start="00:06:06.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""arbitrarily. In a sense,""" start="00:06:09.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'm as a co-maintainer and trusted as a""" start="00:06:11.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""steward and trusted by,""" start="00:06:14.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of course, the GNU project,""" start="00:06:15.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but also by the community That we really""" start="00:06:16.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""can't just take decisions,""" start="00:06:22.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, arbitrarily. Even if it sometimes""" start="00:06:24.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""perhaps may seem so, or it may feel that way,""" start="00:06:27.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we really have to realize that we can't just""" start="00:06:31.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""push too much of just a personal agenda to""" start="00:06:35.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the extent that it doesn't line up with what""" start="00:06:39.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""is best for eMacs going forward,""" start="00:06:41.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and the more overall picture of that.""" start="00:06:47.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So there are limitations that come with the""" start="00:06:50.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""job, if you like. So 1 question I often,""" start="00:06:52.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I actually got this week when I started a new""" start="00:07:00.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""assignment at work, and I got the question""" start="00:07:02.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""when I said I'm involved in Emacs""" start="00:07:06.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development. And then someone asked,""" start="00:07:08.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""oh, is Emacs still developed?""" start="00:07:10.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Isn't it done almost? And I answered to that,""" start="00:07:12.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""yes, we are still around.""" start="00:07:16.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We're going on 40 years now as a software""" start="00:07:17.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""project. Not many projects actually can claim""" start="00:07:21.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that type of longevity.""" start="00:07:26.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But Emacs is among those few that can.""" start="00:07:29.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And of course, we have had some very exciting""" start="00:07:33.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""developments in recent versions.""" start="00:07:36.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think John just gave you an update on that.""" start="00:07:38.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But we had just some highlights out of many""" start="00:07:41.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""highlights that you could give,""" start="00:07:46.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""really, we got the TreeSetter support in""" start="00:07:48.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs 29 that we now need to sort of extend""" start="00:07:50.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and develop. We have merged EGLOT,""" start="00:07:54.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""so we have LSP support out of the box,""" start="00:07:56.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think is a huge improvement.""" start="00:07:59.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Native compilation, of course,""" start="00:08:01.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a big feature. I mean,""" start="00:08:02.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that was Andrea's job,""" start="00:08:06.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""really, for performance.""" start="00:08:08.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And it turns out that in many types of""" start="00:08:11.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""workloads and the types of stuff that people""" start="00:08:14.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""are doing, it often matters.""" start="00:08:15.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And we're hoping to make that the default,""" start="00:08:18.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""perhaps already in Emacs 30.""" start="00:08:21.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So there are things that are happening that""" start="00:08:24.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""fundamentally make Emacs better at a very""" start="00:08:26.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""core level. So, of course,""" start="00:08:32.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""why wouldn't you want to be involved in such""" start="00:08:37.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""an exciting and, I think,""" start="00:08:41.679" video="mainVideo-core" id="subtitle"]]
+[[!template text="""dynamic project? How is Emacs developed?""" start="00:08:43.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Well, this is, I think,""" start="00:08:51.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""perhaps to some people,""" start="00:08:53.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a little bit more of a threshold,""" start="00:08:54.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""if you like, because I think all of us know""" start="00:08:56.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""really that there is exciting and cool stuff""" start="00:08:59.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that is going on in Emacs and has been going""" start="00:09:02.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""on over the last couple of years and we'll""" start="00:09:06.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""see even more of that,""" start="00:09:08.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, going forward.""" start="00:09:10.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""1 thing is that communication still takes""" start="00:09:12.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""place over a mailing list in 2023.""" start="00:09:16.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So we have emacsdevil at gnu.org,""" start="00:09:21.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and that's where we develop Emacs.""" start="00:09:24.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We use, we send patches back and forth,""" start="00:09:26.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we comment on patches.""" start="00:09:30.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And actually this workflow is very good,""" start="00:09:32.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""if you're used to it. Because guess what?""" start="00:09:36.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""As Emacs users, we like doing everything we""" start="00:09:39.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""can in Emacs, especially the core tasks that""" start="00:09:42.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we're doing, such as developing Emacs itself.""" start="00:09:45.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Of course, you want to do that fully within""" start="00:09:50.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs. So we hack Emacs Lisp in Emacs,""" start="00:09:52.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we hack C in Emacs, we respond to emails also""" start="00:09:55.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""from Emacs, respond to bug reports,""" start="00:10:00.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""manage bug reports. We do all that stuff""" start="00:10:02.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""very, very smoothly. And it doesn't really""" start="00:10:05.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""matter in a sense, what is the medium?""" start="00:10:07.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It happens to be email.""" start="00:10:10.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Technically it could be anything,""" start="00:10:12.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but email really has that type of staying""" start="00:10:14.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""power where we've been able to use it for a""" start="00:10:16.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""long time. And this is how,""" start="00:10:19.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and we're still able to use it.""" start="00:10:22.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And this is how free software was always""" start="00:10:24.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""developed in the past.""" start="00:10:25.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Only in the last, let's say 10,""" start="00:10:26.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""15 years, We've had more development taking""" start="00:10:28.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""place perhaps on forges like GitHub,""" start="00:10:32.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""GitLab, whatever. But we are 1 of the""" start="00:10:35.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""holdouts. I mean, there are others,""" start="00:10:39.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of course, like the Linux kernel has mailing""" start="00:10:40.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""lists. They're not trying to do that scale""" start="00:10:42.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development on GitHub.""" start="00:10:44.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And this is not just because we're Luddites""" start="00:10:49.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that refuse to change.""" start="00:10:51.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We just have to do it in the old way,""" start="00:10:53.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""because it is the old way,""" start="00:10:55.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and that's the way it should be.""" start="00:10:57.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""No, it's actually because we,""" start="00:10:58.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""as core developers, the core development team""" start="00:11:01.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and the people already involved and doing""" start="00:11:03.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""tremendous, I mean large amounts of work in""" start="00:11:05.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs has very efficient workflows built up""" start="00:11:08.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""based on this. So of course,""" start="00:11:12.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean moving to something else is something""" start="00:11:15.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that we might like to do,""" start="00:11:18.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but we're not yet clear on how to do it""" start="00:11:20.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""exactly and what to move to.""" start="00:11:24.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So these are the types of discussions that""" start="00:11:26.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we're looking at. Can we still support a""" start="00:11:28.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""mailing, an email type workflow while moving""" start="00:11:30.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to something else? That would be 1 of the big""" start="00:11:34.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""ones. I think another thing that trips people""" start="00:11:36.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""up is that we used a bug tracker that,""" start="00:11:38.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, maybe some people,""" start="00:11:40.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I've heard people say it's archaic.""" start="00:11:42.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's called Debugs. I think maybe Debugs gets""" start="00:11:47.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a bit of a bad rap. I think that bugs is a""" start="00:11:49.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""good piece of software.""" start="00:11:52.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It wasn't developed in 2023.""" start="00:11:53.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, that's much as clear.""" start="00:11:55.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's a little bit older,""" start="00:11:57.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but it really is a workhorse of the Debian""" start="00:11:59.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""project, which is obviously a project that's""" start="00:12:01.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""developed in a very different way than Emacs""" start="00:12:03.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""is. It's on a completely different scale,""" start="00:12:09.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of course, much bigger,""" start="00:12:11.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""many more developers, and so on.""" start="00:12:12.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But I think the developers did a good job for""" start="00:12:15.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the time. But it might be showing its age,""" start="00:12:17.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""perhaps, in places. Perhaps,""" start="00:12:20.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""again, it's the email workflow.""" start="00:12:23.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And people see that as a little bit of a""" start="00:12:25.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""threshold. It seems alien.""" start="00:12:27.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's a little bit strange,""" start="00:12:30.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the types of workflows that you have there.""" start="00:12:32.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So we are seeing some limitations with that""" start="00:12:35.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""box. And again, how do you report bugs?""" start="00:12:38.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Well, in a sense, it's easy.""" start="00:12:41.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You send an email to bug-gnu-emacs at gnu.org""" start="00:12:42.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and you copy in whatever you get from,""" start="00:12:47.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, report the EMAX bug or if you have,""" start="00:12:51.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, send mail set up locally,""" start="00:12:53.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just hit control C, control C and it's sent""" start="00:12:55.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to the bug tracker and that's fine.""" start="00:12:58.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But also I have to mention that there is this""" start="00:13:03.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""very good package on GNU Elpas.""" start="00:13:08.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""If you're ever trying to read the Emacs bug""" start="00:13:10.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""tracker or following along in Emacs""" start="00:13:13.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development, I really recommend install the""" start="00:13:16.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""package devbugs from GNU Elpa.""" start="00:13:19.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's so good. And again,""" start="00:13:22.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it's built on GNU, it's all integrated in""" start="00:13:24.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs, it's so much better than using the web""" start="00:13:26.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and so on. And if you really want to get into""" start="00:13:30.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it, you can download the bug tracker archives""" start="00:13:33.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and the mailing list archives,""" start="00:13:38.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and you can put them locally,""" start="00:13:39.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you can have them searchable,""" start="00:13:41.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and you can have whatever experience you""" start="00:13:42.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""like. So, I mean, it's really a flexible""" start="00:13:44.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""workflow, but it's a bit strange,""" start="00:13:48.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""perhaps, to some people.""" start="00:13:51.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So we also think supporting only this""" start="00:13:53.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""workflow might be a little bit too limiting.""" start="00:13:58.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So we do want to move over to something like""" start="00:14:00.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""GitLab, perhaps Sourcehat or something""" start="00:14:04.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""similar. We've had a couple of discussions""" start="00:14:06.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""about that over the last couple of years.""" start="00:14:10.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think even before that,""" start="00:14:14.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but that's how far back I've been involved,""" start="00:14:15.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and definitely it's come up occasionally.""" start="00:14:18.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think we are less far away than perhaps""" start="00:14:23.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""ever is how I would express that,""" start="00:14:27.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and in the sense that the remaining blockers""" start="00:14:30.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for just making the shift,""" start="00:14:36.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""let's say, are I think,""" start="00:14:38.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, first of all, we're talking about""" start="00:14:40.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""limitations, perhaps in the software,""" start="00:14:42.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""they're well defined, and they're not as""" start="00:14:44.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""amountable. I don't think they have to be in""" start="00:14:46.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""any case. We should be able to make some""" start="00:14:49.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""progress. The main thing that we're lacking""" start="00:14:50.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""now is not more discussion or more people""" start="00:14:54.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""prodding us to just please switch over.""" start="00:15:00.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""No, we're looking for volunteers.""" start="00:15:03.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""If you think that you,""" start="00:15:05.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, have what it takes to sort of come""" start="00:15:08.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""in and help us do something like that and""" start="00:15:10.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""work together with us,""" start="00:15:14.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, to see what can be done,""" start="00:15:15.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""perhaps some, a few things would need to be""" start="00:15:16.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""changed in GitLab. I don't think anything""" start="00:15:20.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""huge, but maybe there are some patches to be""" start="00:15:23.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""written and sent upstream,""" start="00:15:26.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""or maybe we need to do some local hacks or""" start="00:15:27.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""whatever. If you wanna do that,""" start="00:15:30.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""please contact us, emacsdevil.""" start="00:15:33.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We'll be very happy to talk to you.""" start="00:15:35.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And then we can start making progress.""" start="00:15:38.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So I'm really hoping that that sound like""" start="00:15:40.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""will come into place. But we need to,""" start="00:15:42.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""if we do switch over, we need to preserve the""" start="00:15:46.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""good parts of our email-based workflows.""" start="00:15:52.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So there are requirements there so that we""" start="00:15:54.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""can continue to do our job as maintainers,""" start="00:15:57.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""if you like. Another thing is that we've""" start="00:16:01.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sometimes seen that there's a bit of a""" start="00:16:04.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""different culture perhaps on mailing lists""" start="00:16:08.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and on Emacs devil than what many people are""" start="00:16:11.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""used to, especially like you've used perhaps,""" start="00:16:15.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""many people might be in university and""" start="00:16:17.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""they've started using Emacs,""" start="00:16:20.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""maybe got into a little bit of package""" start="00:16:23.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development and starting to get the ropes of""" start="00:16:25.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that and are very used to working on places""" start="00:16:29.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""like GitLab or something like that,""" start="00:16:32.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""then the type of culture and way of""" start="00:16:35.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""communicating that we use in Emacs might be a""" start="00:16:38.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""little bit different. And of course,""" start="00:16:42.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it's different in the sense that mailing""" start="00:16:44.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""lists have always, I mean,""" start="00:16:47.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""let's say hacker culture,""" start="00:16:49.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""whatever you want to call it,""" start="00:16:51.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""have always communicated in a particular way""" start="00:16:52.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""using mailing lists. So it's like succinct to""" start="00:16:54.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the point, perhaps I'm skipping a few""" start="00:16:58.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""pleasantries. And the idea is that you should""" start="00:17:00.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just use it in as effective way as possible,""" start="00:17:03.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""so that also the archives are usable.""" start="00:17:08.359" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And the other thing is that generally people""" start="00:17:11.319" video="mainVideo-core" id="subtitle"]]
+[[!template text="""involved in developing free software has to""" start="00:17:13.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""deal with a lot of incoming traffic,""" start="00:17:16.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""emails. They don't have the bandwidth if it's""" start="00:17:19.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""too much noise. You really need to be strict""" start="00:17:25.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to keep the signal to noise ratio high.""" start="00:17:28.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We have some weird terminology on the Emacs""" start="00:17:31.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""devil. People tell us,""" start="00:17:35.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we say sometimes install patches which""" start="00:17:38.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""basically means push to master or merge pull""" start="00:17:40.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""requests because we've used other version""" start="00:17:44.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""control systems in the past where it might""" start="00:17:46.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""have made more sense to say install patches.""" start="00:17:48.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And then you sort of, I don't know,""" start="00:17:51.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I say it. Don't ask me why.""" start="00:17:52.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But it feels natural after a while.""" start="00:17:54.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You install a patch. It's clear what you""" start="00:17:56.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""mean. You don't have to worry about which""" start="00:17:57.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""branch it's on. So it's a little bit""" start="00:18:02.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""historical there. So there is some of that""" start="00:18:06.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""culture going on. It might be different.""" start="00:18:10.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We don't use emojis that much.""" start="00:18:11.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That's another thing. There is no like,""" start="00:18:14.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you can click the little like button at the""" start="00:18:16.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""bottom of a comment or an email as you could""" start="00:18:20.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""on GitHub. But there are exceptions and it's""" start="00:18:25.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""not like someone will send you angry emails""" start="00:18:27.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""if you use an emoji or something like that.""" start="00:18:29.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But it can come off as perhaps Because people""" start="00:18:31.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""are pressed for time also when replying to""" start="00:18:34.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""all these emails. So it might come off as a""" start="00:18:37.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""little bit short, but that's just how it is.""" start="00:18:39.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think We have heard this comment before""" start="00:18:43.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that mailing lists are scary or Emacs devil""" start="00:18:46.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""is scary or core development is scary.""" start="00:18:50.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I've touched a few of these points a""" start="00:18:54.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""little bit already. I think,""" start="00:18:58.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""yeah, maybe a little bit.""" start="00:18:59.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""For example, we don't use emojis very short""" start="00:19:02.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""in the communication. And we always use""" start="00:19:06.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""correct grammar and spelling.""" start="00:19:10.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We take that seriously because it's important""" start="00:19:13.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for being clear in your written communication""" start="00:19:15.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""when all you have is written communication.""" start="00:19:19.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's really important.""" start="00:19:22.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But it's not like If you come in there and""" start="00:19:26.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you don't know all these cultural rules and""" start="00:19:31.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""all these patterns, then you know you will We""" start="00:19:33.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""won't talk to you No Actually,""" start="00:19:36.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we try to be as welcoming as we can and and""" start="00:19:37.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""be mindful and you know people not Everyone""" start="00:19:41.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""has English as their native language,""" start="00:19:44.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for example. So perhaps someone says""" start="00:19:47.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""something, and it might come off as rude,""" start="00:19:49.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but maybe it's just a direct translation.""" start="00:19:51.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So we're trying to give a lot of whatever the""" start="00:19:53.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""native language is. So we try to give a lot""" start="00:19:56.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of leeway and just be a little bit,""" start="00:19:59.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, flexible and focus on,""" start="00:20:01.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, the key, key points,""" start="00:20:03.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""which are the technical things,""" start="00:20:04.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the technical decisions,""" start="00:20:06.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""technical arguments, rather than,""" start="00:20:07.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, getting bogged down in a lot of,""" start="00:20:09.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, personal, you know,""" start="00:20:11.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""discussions and flame wars.""" start="00:20:15.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So, I mean, there are these things to be""" start="00:20:19.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""aware of, you know, it's just a little bit""" start="00:20:21.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""different. I don't think it's anything huge.""" start="00:20:23.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I wouldn't be, you know,""" start="00:20:25.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think it would be sad if people felt too""" start="00:20:28.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""intimidated by that. It just is what it is.""" start="00:20:30.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And if you spend some time there,""" start="00:20:32.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you'll see how people generally communicate.""" start="00:20:33.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sometimes, there are a lot of people on""" start="00:20:38.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""EmacsDevil. It's a public mailing list.""" start="00:20:41.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""A lot of people just sign up to follow Emacs""" start="00:20:43.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development. Sometimes they chime in.""" start="00:20:46.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think this is in general a good thing.""" start="00:20:48.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think it should be a public mailing list.""" start="00:20:50.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sometimes this leads to weird situations from""" start="00:20:53.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just a point of view as an Emacs maintainer,""" start="00:21:00.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? I mean, I try to say something and it""" start="00:21:03.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""doesn't always say, oh,""" start="00:21:07.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""he's the maintainer or whatever.""" start="00:21:08.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So when I say something,""" start="00:21:10.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it should carry a little bit more weight than""" start="00:21:11.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""some unknown person from the internet who has""" start="00:21:13.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""an opinion and decided to send it to""" start="00:21:16.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""EmacsDevil. So it's good to be a little bit""" start="00:21:18.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""aware of who is a little bit more involved""" start="00:21:21.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""with the project. I would check out the""" start="00:21:23.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""maintainers file. I would check,""" start="00:21:25.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""see in the Git log, do these people actually""" start="00:21:27.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""have any anything in core?""" start="00:21:31.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And if not, maybe, you know,""" start="00:21:33.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""there, we won't really,""" start="00:21:35.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""even if they express an opinion very""" start="00:21:39.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""strongly, even if they're a little bit rude,""" start="00:21:41.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""maybe they're not even involved in Emacs""" start="00:21:42.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development. I mean, often,""" start="00:21:44.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that's the case we have some people,""" start="00:21:46.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""unfortunately, at times,""" start="00:21:48.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we have random people from the internet come""" start="00:21:50.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""in on the mailing list and they're just a""" start="00:21:52.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""little bit rude, or they say an opinion""" start="00:21:54.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that's not exactly helpful.""" start="00:21:57.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think you need to be aware.""" start="00:22:00.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, these things happen in any forum,""" start="00:22:02.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but it happens on EmacsDevO as well.""" start="00:22:04.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So just be a little bit aware of who you're""" start="00:22:07.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""talking to, what people are doing.""" start="00:22:10.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It can help to Check the archives,""" start="00:22:13.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""see who writes what, and so on.""" start="00:22:16.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But it's not something that I think is a huge""" start="00:22:20.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""problem. It is just, again,""" start="00:22:23.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""something to be aware of.""" start="00:22:24.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We have the new kind of communication""" start="00:22:25.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""guidelines in place, which basically says""" start="00:22:28.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that you should be nice to people and stay""" start="00:22:30.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""focused on the technical problem,""" start="00:22:33.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""try to see things from another person's point""" start="00:22:36.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of view, this kind of stuff.""" start="00:22:38.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So we're really trying to be as inclusive as""" start="00:22:39.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""possible and just stay correct in general.""" start="00:22:42.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And sometimes, I mean,""" start="00:22:46.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""not everyone, it's a public list.""" start="00:22:48.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We moderate it, but not to a huge extent,""" start="00:22:50.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? So sometimes people get away with a""" start="00:22:52.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""little bit of perhaps stretching the""" start="00:22:57.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""boundaries of what might be included in the""" start="00:23:02.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""kind communication guidelines,""" start="00:23:04.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sort of the fences and limitations of that.""" start="00:23:08.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But I would just ignore that.""" start="00:23:11.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sometimes it happens that we,""" start="00:23:13.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""as happens in any forum,""" start="00:23:15.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""by the way, you just, we have these very big""" start="00:23:17.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""threads. We start discussing something else.""" start="00:23:19.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Perhaps you send us a patch and it just""" start="00:23:21.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""devolves into us discussing something""" start="00:23:24.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""completely different. And of course I partake""" start="00:23:26.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""in that, not better than anyone else,""" start="00:23:28.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but it just happens. I mean,""" start="00:23:30.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it's not your fault. It's just what happens""" start="00:23:32.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sometimes in forums, and don't mind that.""" start="00:23:34.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And it's a little bit easier to do that in""" start="00:23:37.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""emails, because you just change the subject,""" start="00:23:39.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and now it's supposed to be a different""" start="00:23:41.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""thread, but it comes as replies usually to""" start="00:23:43.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you, which wouldn't happen perhaps in a""" start="00:23:45.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""different workflow. So it's something to be""" start="00:23:48.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""aware of as well. Another thing is that,""" start="00:23:49.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of course, in written communication,""" start="00:23:53.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""tone doesn't always come across.""" start="00:23:55.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""If someone sounds negative,""" start="00:23:57.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sometimes it's just them being neutral.""" start="00:23:59.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sometimes you get no replies.""" start="00:24:01.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You send something, you get no replies.""" start="00:24:05.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And this could mean, actually it could mean,""" start="00:24:07.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""yeah, what you said was uncontroversial.""" start="00:24:09.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We think it was a good idea.""" start="00:24:11.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""No 1 replied to it because either someone""" start="00:24:13.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""else would reply or just there was no need to""" start="00:24:16.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""reply because, yeah, why not?""" start="00:24:18.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So but if you do send a patch and you don't""" start="00:24:21.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""get an answer, wait. I mean,""" start="00:24:24.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""don't wait 1, 2 days. Maybe we're busy or""" start="00:24:26.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we're sick or whatever.""" start="00:24:29.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Wait 2 weeks. It's fine to just send it""" start="00:24:30.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""again. If you send the patch to EmacsDevil,""" start="00:24:32.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""send it to the bug mailing list,""" start="00:24:35.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""because we lose track of stuff on EmacsDevil.""" start="00:24:37.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That's just the reality of it.""" start="00:24:39.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So if you propose making a change and no 1""" start="00:24:43.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""commented, feel free to ask us again if a""" start="00:24:46.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""patch would be welcome and we will clarify.""" start="00:24:48.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Bug reports, unfortunately,""" start="00:24:53.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""if you get no answer, I mean,""" start="00:24:54.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we do have a limited amount of time to work""" start="00:24:56.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""on bugs. If you're looking to get started in""" start="00:24:59.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs development, this is an excellent way""" start="00:25:02.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to start getting involved.""" start="00:25:05.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""What I'd recommend is start looking into""" start="00:25:07.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""bugs. I'd install that bug,""" start="00:25:09.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'd see about the mailing workflow and set""" start="00:25:11.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that up a little bit, or not.""" start="00:25:13.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's up to you. You can reply to an email""" start="00:25:16.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""without setting any of that stuff up.""" start="00:25:17.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But just help us try out your bugs,""" start="00:25:20.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""send patches, do that type of stuff.""" start="00:25:22.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, that's an excellent way,""" start="00:25:24.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and extremely welcome.""" start="00:25:26.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We're so happy to see when people pick up bug""" start="00:25:27.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""reports that have been left by the wayside""" start="00:25:30.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and just fix them, send us a patch,""" start="00:25:32.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and we can just apply it.""" start="00:25:36.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So that's really your starting point if you""" start="00:25:37.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""want to get involved in Emacs core""" start="00:25:40.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development. I also want to say that be aware""" start="00:25:44.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that you know Emacs is the editor of the GNU""" start="00:25:50.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""operating system and this makes the project""" start="00:25:54.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""political a little bit whether you like it or""" start="00:25:56.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""not. Luckily the you know the politics are""" start="00:25:58.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""limited enough that we can find broad""" start="00:26:01.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""agreement on it. So we want to promote,""" start="00:26:03.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we want to create free software.""" start="00:26:05.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That's sort of it. That's it.""" start="00:26:08.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And there shouldn't be too much more to it,""" start="00:26:11.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? We want to rid the world of""" start="00:26:13.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""proprietary software as an evil thing.""" start="00:26:15.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Ideally, all software should be free.""" start="00:26:19.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But these are just the goals of the free""" start="00:26:23.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""software movement. So we're very strict with""" start="00:26:25.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""some things. We don't recommend non-free""" start="00:26:27.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""proprietary software. Of course,""" start="00:26:30.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we have no problem mentioning Microsoft""" start="00:26:31.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Windows because everyone knows that there's""" start="00:26:33.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this obscure operating system developed in""" start="00:26:35.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""California that some people insist on using.""" start="00:26:39.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We use, many of us use GNU plus Linux.""" start="00:26:42.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Actually, some core developers happen to use""" start="00:26:45.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""exactly, you know, not GNU plus Linux,""" start="00:26:47.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but that's fine as well,""" start="00:26:50.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? We take a little bit of a pragmatic""" start="00:26:52.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""view, but we don't wanna do,""" start="00:26:54.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""what we don't wanna do is promote like this""" start="00:26:56.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""small, unknown piece of non-free software and""" start="00:26:59.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sort of help the non-free software in that""" start="00:27:04.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""way. That's where we try to draw the line,""" start="00:27:08.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, in just expressing just a few""" start="00:27:12.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""words. So that's 1 thing.""" start="00:27:15.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We're, I think, very pragmatic on this point,""" start="00:27:18.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but we do try to follow the principle.""" start="00:27:21.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We also require copyright assignment.""" start="00:27:25.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think in general,""" start="00:27:27.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the argument is that we require a copyright""" start="00:27:30.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""assignment, because that makes it easier to""" start="00:27:34.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""defend the legal status of the GNU Emacs""" start="00:27:39.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""source code. So if there's ever a legal""" start="00:27:43.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""battle, the idea is that if it's only 1""" start="00:27:45.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""copyright holder and you have a GPL""" start="00:27:48.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""violation, i.e. Someone might change Emacs""" start="00:27:50.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and then distribute it as proprietary""" start="00:27:54.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""software or something nasty like that,""" start="00:27:56.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""then we have an easier way of defending it in""" start="00:27:58.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""court if there is only 1 copyright holder.""" start="00:28:00.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So we assigned copyright to the Free Software""" start="00:28:02.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Foundation. And I think there,""" start="00:28:04.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, sometimes people oppose this for""" start="00:28:09.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""various reasons, you know,""" start="00:28:12.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""people see it as, you know,""" start="00:28:13.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""maybe some people might say,""" start="00:28:15.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, it's ideological,""" start="00:28:16.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, who goes, you know,""" start="00:28:18.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the FSF goes too far with this.""" start="00:28:19.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And, and, I mean, that's fine.""" start="00:28:21.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You that's, that's an opinion.""" start="00:28:23.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And the there, then other people are more""" start="00:28:25.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""practical, you know, it's just,""" start="00:28:28.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's a hassle, basically,""" start="00:28:30.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we don't want to sign these papers.""" start="00:28:31.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I'm not really here to tell anyone that""" start="00:28:33.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""they're wrong. I've expressed my views on""" start="00:28:35.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this in the past. But just for now,""" start="00:28:37.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'm just very practical for the purposes of""" start="00:28:40.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this talk. So I signed the papers.""" start="00:28:43.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's Maybe it didn't take me many minutes.""" start="00:28:46.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And in most cases, it shouldn't really.""" start="00:28:49.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And it's something that I found worth doing,""" start="00:28:52.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""because that way I could focus on continuing""" start="00:28:55.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to improve Emacs instead of discussing the""" start="00:28:58.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""finer points of copyright law.""" start="00:29:01.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You could write patches and stuff,""" start="00:29:03.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that kind of thing. So,""" start="00:29:05.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, this is something that trips people""" start="00:29:06.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""up and, you know, it's fine that people have""" start="00:29:08.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""different opinions on it and so on,""" start="00:29:11.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but I think for now that's just something to""" start="00:29:14.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""be aware of. So that's,""" start="00:29:19.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, I mean, there's much more that could""" start="00:29:23.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""be said. Ideally, I would like to have a""" start="00:29:26.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""practical part to this talk as well.""" start="00:29:27.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But I wanted to say something about the""" start="00:29:32.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""packages in Emacs. Because as we know,""" start="00:29:34.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, Emacs is the, I can't remember what""" start="00:29:37.159" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it says, it's like a visual,""" start="00:29:40.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""there's in the manual it says,""" start="00:29:42.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""oh, Emacs is an advanced text editor.""" start="00:29:43.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's visual, which, I mean,""" start="00:29:46.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it's not ed, the whole Unix ed,""" start="00:29:47.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""so that's cool. It's also customizable,""" start="00:29:50.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? So that's always been a thing.""" start="00:29:53.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And what makes Emacs so amazing.""" start="00:29:57.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And some people described it as,""" start="00:30:00.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I can't remember who said that there has been""" start="00:30:01.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a Cambrian explosion of packages in Emacs.""" start="00:30:03.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think that's true.""" start="00:30:09.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, if you look at something like Melpa,""" start="00:30:10.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think they have over 5,000""" start="00:30:12.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""packages now. It's like truly impressive,""" start="00:30:13.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just an immense amount of work and immense""" start="00:30:16.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""amount of packages. And really,""" start="00:30:18.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this shows the strength,""" start="00:30:22.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, of the Emacs community,""" start="00:30:24.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of Emacs itself as an idea.""" start="00:30:26.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think it's also just tremendous work""" start="00:30:29.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that's been done by the maintainers.""" start="00:30:31.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And they do get a lot of recognition for""" start="00:30:33.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that. And rightly so, in my opinion.""" start="00:30:36.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's done so much, I think,""" start="00:30:39.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for our community. The other package archive""" start="00:30:41.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that we have is GNU-ELPA.""" start="00:30:44.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And that's been enabled since when packages""" start="00:30:46.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""first got introduced back in,""" start="00:30:49.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, Emacs, was it 23?""" start="00:30:51.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And probably, I mean, the main thing why a""" start="00:30:55.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""package goes onto GNU Elpa is,""" start="00:30:59.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, it should be installable out of the""" start="00:31:01.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""box. So, I mean, that's a big benefit in a""" start="00:31:04.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sense. It's also a requirement for GNU Alpa""" start="00:31:07.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that the copyright, again,""" start="00:31:10.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just as GNU Emacs, the copyright is assigned""" start="00:31:12.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to the Free Software Foundation.""" start="00:31:15.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And some very hugely popular packages,""" start="00:31:17.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""like YaSnippet, for example,""" start="00:31:20.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""is on GNU Alpa. And we were discussing this""" start="00:31:21.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just 2 months back. And Joe Tavora,""" start="00:31:25.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I can't say his name, G-O-A-O,""" start="00:31:30.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Tavora. He made the point that he's never""" start="00:31:33.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""seen a problem in any of his packages with""" start="00:31:36.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""copyright assignment in particular.""" start="00:31:40.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's never been a problem to get people to be""" start="00:31:42.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""involved in the development of those packages""" start="00:31:44.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just because of the copyright assignment""" start="00:31:46.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""requirements. So I mean,""" start="00:31:49.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that's his perspective on that.""" start="00:31:51.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think it was worth relating his""" start="00:31:54.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""experience here. So we also have this new""" start="00:32:00.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""package archive called non-GNU-alpha,""" start="00:32:06.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""which is now enabled by default as well.""" start="00:32:08.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think for practical purposes,""" start="00:32:12.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you could get into it a little bit more,""" start="00:32:14.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, why we created non-NUELPA,""" start="00:32:16.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and perhaps that's something we can discuss""" start="00:32:19.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""in the Q&A section. For practical purposes,""" start="00:32:23.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the main thing to be aware of is,""" start="00:32:26.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""yes, we don't promote non-free software on""" start="00:32:28.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""there, And we also don't have the copyright""" start="00:32:30.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""assignment requirement.""" start="00:32:36.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think this is probably for new packages.""" start="00:32:41.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's generally better if they go to GNU Elpa,""" start="00:32:43.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""if there is any type of idea or ambition""" start="00:32:48.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that, you know, at some point it would be""" start="00:32:51.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""good or it might be good to eventually have""" start="00:32:53.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""some type of functionality like this shipped""" start="00:32:56.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""with Emacs itself. So I think this is""" start="00:32:58.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""something that perhaps package authors could""" start="00:33:01.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""also be aware of, that occasionally we do""" start="00:33:04.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""bring in functionality from GNU Elpa into""" start="00:33:07.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""core Emacs because we feel that it should be""" start="00:33:09.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""better integrated with Emacs itself.""" start="00:33:12.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So if I could give any type of""" start="00:33:16.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""recommendation, of course,""" start="00:33:18.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you do. These are your packages,""" start="00:33:19.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? In an ideal world,""" start="00:33:22.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we would only use this for legacy packages""" start="00:33:25.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""where people contributed in the past,""" start="00:33:28.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but you didn't worry about the copyright""" start="00:33:30.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""assignment. But where possible,""" start="00:33:32.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think there is benefit in putting it on GNU""" start="00:33:34.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Elpa. And I wanted to end a little bit on a""" start="00:33:37.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""more, you know, the more opinionated perhaps""" start="00:33:42.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""part of my talk and not just talk about""" start="00:33:45.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""processes. I see that I'm running out of""" start="00:33:47.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""time. So I will say Emacs is hackable.""" start="00:33:49.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think that's a blessing and a curse.""" start="00:33:51.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And if you think about something like,""" start="00:33:54.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the types of choices that you can make,""" start="00:33:59.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""perhaps when you implement something,""" start="00:34:01.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""There are choices, different choices between""" start="00:34:03.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""something like common list,""" start="00:34:06.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""which is like bigger, more batteries""" start="00:34:07.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""included, and something like scheme,""" start="00:34:09.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""which is more minimal.""" start="00:34:11.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think we have some of those,""" start="00:34:12.239" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, this kind of tension also in the""" start="00:34:13.679" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs itself. What should be in Emacs core?""" start="00:34:16.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Should we have a lean Emacs core?""" start="00:34:18.159" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Should we have more stuff in Emacs core?""" start="00:34:19.699" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think these are good discussions to""" start="00:34:22.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""have. And there are various challenges that""" start="00:34:26.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""are associated with each of those choices.""" start="00:34:29.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think what will never change is that Emacs""" start="00:34:32.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""is hackable. Emacs is customizable.""" start="00:34:35.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""This is the key strength.""" start="00:34:37.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""This is why we love and use Emacs.""" start="00:34:38.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think fundamentally,""" start="00:34:40.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""whether you do it a lot or not,""" start="00:34:42.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this is what at core is bringing you that""" start="00:34:44.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""amazing user experience.""" start="00:34:47.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""However, the flip side of that sometimes is""" start="00:34:50.739" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that it's so easy to hack Emacs so that we""" start="00:34:53.199" video="mainVideo-core" id="subtitle"]]
+[[!template text="""hack around bugs instead of fixing them.""" start="00:34:56.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We do some tweak and our customers say,""" start="00:34:58.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""okay, this is a little bit broken,""" start="00:35:00.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Let me just fix it. I'll put an advice on""" start="00:35:01.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this function. I'll do this customization.""" start="00:35:03.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Or we accept limitations in Emacs core.""" start="00:35:06.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think it's fine.""" start="00:35:09.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, this will never change.""" start="00:35:12.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That will always be core to what Emacs is,""" start="00:35:13.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? However, I think that the flip side of""" start="00:35:16.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that is that I think sometimes we could be""" start="00:35:20.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""better at just taking those few extra steps""" start="00:35:22.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to also make Emacs better itself and solve""" start="00:35:26.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this for all users. And I think if we can""" start="00:35:29.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""build a little bit more of a culture like""" start="00:35:31.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that, I mean, we already have that culture to""" start="00:35:33.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a large extent, don't get me wrong,""" start="00:35:35.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we do, but if we can get a little bit more of""" start="00:35:37.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that culture, let's get that into core,""" start="00:35:39.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""let's get that problem fixed,""" start="00:35:41.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that frustration. I can tell you that,""" start="00:35:43.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I just started a new assignment at work,""" start="00:35:47.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I already told you, so I'm going to write a""" start="00:35:48.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""lot of Python, okay? So I need to keep track""" start="00:35:51.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of something called virtual environments,""" start="00:35:54.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and that's just a way to install these""" start="00:35:56.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""dependencies just locally per directory or""" start="00:35:58.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""per repository kind of thing.""" start="00:36:01.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I've used various packages for that.""" start="00:36:03.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""There are like 4 packages,""" start="00:36:05.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""5 packages, maybe. And 1 is called VM,""" start="00:36:07.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and 1 is called VirtualM,""" start="00:36:10.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and 1 is called Python-VM.""" start="00:36:11.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And now I'm using, you know,""" start="00:36:15.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'm using a different 1.""" start="00:36:16.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And it's just a little bit,""" start="00:36:18.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""why doesn't this work out of the box in""" start="00:36:20.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs? Why? I don't think there's a really""" start="00:36:22.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""good fundamental good reason why something""" start="00:36:25.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""like that doesn't work in Emacs.""" start="00:36:28.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So I think that's really,""" start="00:36:30.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, I'm sure there are other things like""" start="00:36:32.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that, other fundamental features.""" start="00:36:35.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Why is it that for the last 20 years,""" start="00:36:37.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we've shipped Emacs with no PHP support out""" start="00:36:39.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of the box? I mean, I'm not a PHP programmer.""" start="00:36:43.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I don't really have a lot of love for PHP,""" start="00:36:47.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""let's say. To me, it's a very funny-looking""" start="00:36:51.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""language, but okay, still it's been very""" start="00:36:57.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""popular. Why haven't we supported it?""" start="00:37:00.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, it's just strange.""" start="00:37:02.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You install Emacs on some machine,""" start="00:37:03.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you open a PHP file, you get fundamental""" start="00:37:05.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""mode. It's not the best user experience,""" start="00:37:07.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""in my opinion. So I think there are some""" start="00:37:09.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""things where we really could do a little bit""" start="00:37:12.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""better. And I'm seeing this all the time.""" start="00:37:15.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Just this week, this new assignment was""" start="00:37:20.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""interesting. There was this Emacs user.""" start="00:37:22.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Turns out we have the exact same hack in both""" start="00:37:24.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of our init files. So we had created the""" start="00:37:26.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""exact same mode for DIRED,""" start="00:37:29.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""actually, to hide dot files.""" start="00:37:32.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You know, dot something is supposed to be""" start="00:37:33.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""hidden on a Unix system.""" start="00:37:36.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So we had DERED hide dot files mode to just""" start="00:37:40.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""hide them. And why isn't that in DERED?""" start="00:37:43.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Or should it be in DERED?""" start="00:37:47.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Should it be a package on the new Elpa?""" start="00:37:48.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Where should it be? Why is it just local""" start="00:37:51.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""hack? Should it be on a wiki somewhere?""" start="00:37:53.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, sometimes that's the correct answer.""" start="00:37:54.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sometimes the correct answer is,""" start="00:37:56.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""yes, it should be a package.""" start="00:37:59.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sometimes the correct answer is,""" start="00:38:00.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""yes, it should really be in core.""" start="00:38:02.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So what I want to promote is more like,""" start="00:38:04.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""let's just take a step back and just ask""" start="00:38:06.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""yourself, what's the best solution if we look""" start="00:38:08.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""at the overall picture?""" start="00:38:11.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Should I hack this into my configuration?""" start="00:38:12.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""In many cases, yes, that's the right thing to""" start="00:38:14.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""do. We don't want to proliferate just random""" start="00:38:16.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""solutions all over Emacs for no reason.""" start="00:38:19.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But sometimes we want to fix it once and for""" start="00:38:22.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""all. We want to do that in core.""" start="00:38:24.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So you could send stuff like that to us as""" start="00:38:27.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""patches or as packages.""" start="00:38:30.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And we can discuss a little bit about where""" start="00:38:31.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""should we solve this? What's the right level""" start="00:38:34.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of abstraction? I'm seeing that I'm running""" start="00:38:37.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""out of time. I had an Emacs wish list.""" start="00:38:41.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Maybe we can take more of that in the Q&A.""" start="00:38:43.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But I want to say, like,""" start="00:38:47.170" video="mainVideo-core" id="subtitle"]]
+[[!template text="""in VS Code, you just start VS Code.""" start="00:38:49.226" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You open a Python file,""" start="00:38:50.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and you get, like, hey,""" start="00:38:51.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""are you trying to use Python?""" start="00:38:53.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Click here, install Python.""" start="00:38:54.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You get all the nice things out of the box.""" start="00:38:56.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And my argument is, why can't we have more of""" start="00:38:59.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that in Emacs? I don't think it's necessarily""" start="00:39:01.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""hard, but it does take a little bit of work.""" start="00:39:04.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""The challenges here are more social,""" start="00:39:06.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, than technical.""" start="00:39:09.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I think it's worth doing,""" start="00:39:10.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""because it's not just Python.""" start="00:39:12.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's just There are always these small things""" start="00:39:14.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""where it just really should work,""" start="00:39:16.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and that would be a much better experience.""" start="00:39:18.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And then you could customize not that thing""" start="00:39:20.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that should just work,""" start="00:39:23.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but you could customize more fun and""" start="00:39:24.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""exploratory things instead of people""" start="00:39:27.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""reinventing the wheel over and over again.""" start="00:39:29.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So I'm very excited about what's happening in""" start="00:39:31.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs. I think we should be proud of what""" start="00:39:33.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we've accomplished. It's so many things to""" start="00:39:35.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""many different people,""" start="00:39:37.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""an environment for hacking,""" start="00:39:38.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just a productivity system.""" start="00:39:40.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Other sees us as a different way of looking""" start="00:39:41.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""at computing, you know,""" start="00:39:44.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the embodiment of the ideal of the Lisp""" start="00:39:45.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""machine if you want to talk big words and""" start="00:39:47.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""stuff like that. And of course,""" start="00:39:49.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs are all those things and so many more.""" start="00:39:50.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And that's what makes Emacs so amazing.""" start="00:39:53.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And in some sense, we should be care that""" start="00:39:56.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""people are satisfied with using lesser text""" start="00:40:00.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""editors. How could they be happy running""" start="00:40:03.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that? I mean, I'm sure it's fine,""" start="00:40:05.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but it sure as hell isn't Emacs.""" start="00:40:07.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So don't we owe it to the world and to them""" start="00:40:09.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and to ourselves to make a great Emacs.""" start="00:40:12.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That will be my ending words.""" start="00:40:14.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I hope to see you all in the Q&A.""" start="00:40:16.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Thank you all. And thank you so much,""" start="00:40:18.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Stefan. That was a wonderful presentation.""" start="00:40:22.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I just want to give you the opportunity.""" start="00:40:24.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You said that you perhaps had,""" start="00:40:27.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Not the practical stuff,""" start="00:40:30.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but you wanted to do a demo or something like""" start="00:40:31.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""this? What did you mention exactly?""" start="00:40:33.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, we didn't have time really.""" start="00:40:36.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yes, I'm not sure. I didn't prepare anything""" start="00:40:38.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""so that we can do it live.""" start="00:40:42.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But maybe for next time,""" start="00:40:43.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I will do a demo. Don't hold me to it.""" start="00:40:44.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Or someone else could.""" start="00:40:49.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That would be really amazing.""" start="00:40:51.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Right. Well, thank you,""" start="00:40:53.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Stéphane. You've been already into so much""" start="00:40:54.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""detail of so many... So much of the intricacy""" start="00:40:56.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of the maintenance. And as someone who's been""" start="00:41:01.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""95% of the time developing for Melpa,""" start="00:41:05.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I feel like this talk was very geared to a""" start="00:41:08.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""lot of us who tend to experiment in this""" start="00:41:11.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Cambrian stage of Emacs evolution,""" start="00:41:13.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""where we get to deploy a lot of creativity""" start="00:41:16.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""whilst also feeling pretty agile in a way we""" start="00:41:20.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""come up with solutions to problems.""" start="00:41:24.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But you've won me over with your discussion""" start="00:41:25.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""about potentially moving some of this stuff""" start="00:41:29.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to core. And I think this particularly""" start="00:41:31.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""resonated at the end with this tension that""" start="00:41:33.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you feel about problems that you encounter.""" start="00:41:36.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Do you fix them in Melpa?""" start="00:41:39.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Do you fix them in core?""" start="00:41:40.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Is it not something that is supposed to be an""" start="00:41:42.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""option? I love this tension and it's""" start="00:41:43.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""something that we've been exploring for the""" start="00:41:46.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""last 3 edition of Emacs Cons.""" start="00:41:48.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's really what is to be the interaction""" start="00:41:49.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""between this pool of very clever developers""" start="00:41:52.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""who are on Melpa but who are perhaps a little""" start="00:41:55.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""bit afraid of joining Core and the wonderful""" start="00:41:58.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""job that you do that, yes,""" start="00:42:00.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""seems archaic from the outside,""" start="00:42:02.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but as you've been at length today in your""" start="00:42:05.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""presentation, is actually just a better way""" start="00:42:07.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to work, a very pragmatic way to get a lot of""" start="00:42:09.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""work done. So, thank you so much for your""" start="00:42:11.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""presentation. Thank you,""" start="00:42:13.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Leo. So, we have about 12 minutes now to go""" start="00:42:15.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""through as many questions as possible.""" start="00:42:20.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You have obviously had a lot of questions""" start="00:42:22.950" video="mainVideo-core" id="subtitle"]]
+[[!template text="""throughout your presentation.""" start="00:42:26.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Do you have access to the pad,""" start="00:42:27.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""or do you want me to share the question and""" start="00:42:28.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""feed them to you? Yes,""" start="00:42:30.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""could you start with sharing them?""" start="00:42:32.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'll see if I can get it on my screen.""" start="00:42:34.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sure, I'll do that. Please let me know if my""" start="00:42:36.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""microphone is clipping because my OBS setup""" start="00:42:39.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sometimes is a little bit janky.""" start="00:42:42.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But I'm going to try to read the questions""" start="00:42:44.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for now. It's tipping,""" start="00:42:46.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I can hear you okay. Okay,""" start="00:42:48.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""so bear with the clicking,""" start="00:42:51.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we'll switch as soon as possible to Stefan""" start="00:42:54.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""reading the question, but I'll read the first""" start="00:42:56.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""1. Can you tell us some about your,""" start="00:42:58.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""can you tell us some more I assume,""" start="00:43:02.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""about your background with Emacs development""" start="00:43:04.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and programming in general,""" start="00:43:06.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""your professional work possibly?""" start="00:43:07.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, sure. Okay, I studied computer science""" start="00:43:11.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""at university. I started programming on a""" start="00:43:15.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Commodore 64. I started with BASIC and then I""" start="00:43:19.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""did a couple of versions of BASIC as a kid.""" start="00:43:23.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But then really things took off when I""" start="00:43:27.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""started using GNU Linux.""" start="00:43:31.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I can't remember which year,""" start="00:43:34.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""maybe it was early 2000,""" start="00:43:35.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""something like that, late.""" start="00:43:38.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""No, it must've been before that actually,""" start="00:43:39.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""because I remember I was 14.""" start="00:43:42.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, okay, so let's say 1999,""" start="00:43:44.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""1998, somewhere there around.""" start="00:43:46.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Then I started with Perl,""" start="00:43:48.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and I did Perl for a good long while.""" start="00:43:50.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I learned C++, I learned C,""" start="00:43:52.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I did all kinds of stuff,""" start="00:43:55.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and then I went to university,""" start="00:43:56.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""computer science, and I've been working,""" start="00:43:59.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, in various roles.""" start="00:44:01.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Right now, I'm coding Python.""" start="00:44:04.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Up until last Friday, I was writing firmware""" start="00:44:06.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""in C for a small microcontroller,""" start="00:44:09.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""which is pretty different than writing""" start="00:44:12.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Python, that's for sure.""" start="00:44:15.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So yeah, so that's a little bit about me.""" start="00:44:17.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I got interested in free software,""" start="00:44:19.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, also at a very young age.""" start="00:44:22.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So, I mean, I've been following these,""" start="00:44:24.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, ideological discussions and""" start="00:44:26.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""debates, read all this stuff by Richard""" start="00:44:29.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Stallman and so on and so forth.""" start="00:44:31.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But yeah, that's it. Great,""" start="00:44:33.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""thank you. I'll move on to the next question.""" start="00:44:37.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You'll have to listen to me because if I""" start="00:44:41.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""start sharing my screen again,""" start="00:44:42.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we're going to get some clicks.""" start="00:44:45.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So the question. Do you think that 1 day""" start="00:44:48.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""there will be a native I'll start again,""" start="00:44:50.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sorry. Do you think that 1 day there will be""" start="00:44:53.930" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a native... I'll start again,""" start="00:44:54.079" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sorry. Do you think that 1 day there will be""" start="00:44:54.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a native graphical web browser in Emacs or is""" start="00:44:56.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it kind of against its philosophy and""" start="00:44:59.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""architecture? So will we stick just with EWW""" start="00:45:00.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and EAF or similar workaround tricks?""" start="00:45:04.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So if, I don't know if people have seen,""" start="00:45:08.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""there is a talk by, I think,""" start="00:45:11.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Perry Metzger, is that the name?""" start="00:45:13.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sorry if I got the name wrong.""" start="00:45:15.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Perry Metzger, I think.""" start="00:45:17.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's like, he marks a text editor for the""" start="00:45:18.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""next 40 years. He makes an excellent point""" start="00:45:20.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""there that 1 of the things that we need to do""" start="00:45:22.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""is really get a proper HTML rendering in""" start="00:45:24.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs. It's like a dream at this point.""" start="00:45:27.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""No 1 is actively working on something like""" start="00:45:30.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that. I think that, you know,""" start="00:45:32.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""there, first of all, you'd need to rewrite""" start="00:45:34.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the display engine. So that's a big job.""" start="00:45:36.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It is. I'm not saying,""" start="00:45:39.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, it can't be done,""" start="00:45:41.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but you need to start there.""" start="00:45:43.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Right? Second of all, you need to think""" start="00:45:44.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""about, you know, with all the Emacs Lisp code""" start="00:45:47.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""out there, is really assuming,""" start="00:45:50.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, 1 paradigm, which is that you have""" start="00:45:52.090" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a square, and basically you have columns and""" start="00:45:54.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you have rows, and everything is in there,""" start="00:45:57.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""even images, is basically in a column,""" start="00:45:59.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, in a column on a row somewhere.""" start="00:46:02.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Whereas, you know, when you just start doing""" start="00:46:05.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the more web stuff and web rendering,""" start="00:46:07.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you already have like a seaplane.""" start="00:46:10.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You have different types of geometries that""" start="00:46:12.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""are possible. And what does it mean to go to""" start="00:46:14.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the logical next line in that kind of sense?""" start="00:46:16.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean these types of things I'm not saying""" start="00:46:19.370" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it can't be done. I'm saying there are there""" start="00:46:21.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""are definitely some challenges there It would""" start="00:46:23.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""be amazing I mean, but we need someone with""" start="00:46:27.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, the inclination and talent I think""" start="00:46:30.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to work on that's a job posting if I've ever""" start="00:46:33.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""had 1. So good luck to whoever's willing to""" start="00:46:37.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""apply for this 1. I think it's a tough 1.""" start="00:46:40.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It is, yes. Go on. Okay,""" start="00:46:43.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""do you happen to have the questions in front""" start="00:46:46.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of you? Can I just read them to you so that""" start="00:46:48.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you can also have a feedback in front of you?""" start="00:46:50.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yes, I have the pad here.""" start="00:46:54.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Okay, cool. So I'll read the next question""" start="00:46:57.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and this way I don't have to worry too much""" start="00:46:58.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""about me butchering every word in the""" start="00:47:00.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sentence. So, Emacs development and""" start="00:47:02.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""communication still is very much focused on""" start="00:47:04.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""email mailing lists. I like this,""" start="00:47:06.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but what do you think about introducing other""" start="00:47:08.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""channels for talking to users,""" start="00:47:10.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""like the Emacs project community could set up""" start="00:47:12.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a master on instance of its own,""" start="00:47:15.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for instance? I think from the point of view""" start="00:47:17.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of the Emacs core team,""" start="00:47:20.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we don't really have a lot of resources or""" start="00:47:21.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""people inclined to be working on stuff like""" start="00:47:23.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that. But I mean, there is so much going on.""" start="00:47:25.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs is a very, you know,""" start="00:47:27.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's a big community, frankly,""" start="00:47:30.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? So people working on emacs.com,""" start="00:47:32.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""there are people in the IRC channel,""" start="00:47:34.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the emacs IRC channel,""" start="00:47:37.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""there's the emacs subreddit.""" start="00:47:39.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And I mean, people are doing an incredible""" start="00:47:40.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""job. And I think if people wanna do more""" start="00:47:43.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""stuff like that, I mean,""" start="00:47:45.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Don't wait for Argo, just go for it.""" start="00:47:46.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Great. Moving on to the next question.""" start="00:47:52.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sorry, I'm not commenting anymore because we""" start="00:47:54.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""have so many questions and I'd love for you""" start="00:47:56.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to answer as many people as possible because""" start="00:47:58.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we have about 6 minutes technically,""" start="00:48:00.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but we can go perhaps a little bit over.""" start="00:48:02.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""If you have the time, Stefan,""" start="00:48:05.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""though. Yeah. Okay, great.""" start="00:48:06.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""What are some features or packages you'd like""" start="00:48:09.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to see developed by the community?""" start="00:48:11.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We've already talked about the native HTTP""" start="00:48:12.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""display, but do you have any others?""" start="00:48:15.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So, I mean, developed by the community,""" start="00:48:19.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it depends what you mean.""" start="00:48:22.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So do you mean sending stuff that people""" start="00:48:23.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""could be working on in general?""" start="00:48:27.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think for now, like let's say the roadmap,""" start="00:48:30.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'll just give some of the things that I""" start="00:48:33.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""think should happen right now and that I""" start="00:48:35.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""would love for people to send patches for.""" start="00:48:36.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That's what I'm gonna be answering because""" start="00:48:39.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that's what I think I can answer.""" start="00:48:41.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Tree-sitter is a new thing,""" start="00:48:43.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? Improving and working on new modes""" start="00:48:45.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for, you know, TreeSitter,""" start="00:48:48.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it's not very hard. I think many people get""" start="00:48:50.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""into it and make sure to integrate them in""" start="00:48:52.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs core. I think that would be,""" start="00:48:55.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, on my wishlist.""" start="00:48:58.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""The other thing that is that we've asked for""" start="00:49:00.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""someone perhaps with a little bit more""" start="00:49:01.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""experience, I think, but working on""" start="00:49:03.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""refactoring capabilities in Emacs and a more""" start="00:49:05.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""general framework, I think,""" start="00:49:09.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for that. There are probably many more ideas""" start="00:49:11.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that I could give people,""" start="00:49:13.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but those would be the 2 big ones,""" start="00:49:15.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, that are also very uncontroversial.""" start="00:49:17.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's funny because for me,""" start="00:49:22.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I don't think refactoring would count as a""" start="00:49:24.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""feature, but it's so vital to allowing""" start="00:49:26.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""further features to be developed.""" start="00:49:30.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Otherwise, I remember the way Org Mode used""" start="00:49:31.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to be before we had Org Element and stuff""" start="00:49:34.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""like this. It was really complicated to write""" start="00:49:36.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""any kind of parsing stuff for it.""" start="00:49:38.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And now that we've got it,""" start="00:49:41.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it just opened up a world of possibility""" start="00:49:42.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""where parsing an Org Mode file is just made""" start="00:49:44.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""so much easier. So I think that's a wonderful""" start="00:49:46.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""answer because it goes,""" start="00:49:48.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it's multi-layered as you would expect from""" start="00:49:49.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""something that concerns the whole of Emacs.""" start="00:49:52.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Moving on to the next question.""" start="00:49:55.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""What is the hardest decision being made""" start="00:49:57.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""within Emacs dev for the last 3 years.""" start="00:49:59.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'm not sure, is it the decision in the last""" start="00:50:02.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""3 years or I'll let you interpret the""" start="00:50:04.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""question however you want.""" start="00:50:07.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Okay, well, I'll say this.""" start="00:50:09.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I started in August and I haven't had any""" start="00:50:11.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""really hard decisions so far.""" start="00:50:14.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So good news. Maybe Eli will have more for""" start="00:50:16.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the last 3 years. Keep it simple.""" start="00:50:20.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Thanks. Cool. Next question.""" start="00:50:25.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Any plans to integrate XWM into core?""" start="00:50:28.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs is a really good Winters manager.""" start="00:50:31.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That's super cool. I think EXWM is cool.""" start="00:50:34.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think they need to upgrade to Wayland""" start="00:50:38.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""somehow and that's not clear yet,""" start="00:50:40.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but you know, we don't have any current plans""" start="00:50:41.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to integrate it, no. Right,""" start="00:50:44.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Next question. Do you think it is a good idea""" start="00:50:49.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to choose Org Mode for writing documentation""" start="00:50:51.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""instead of tech info? I think that whatever""" start="00:50:53.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we do, it should be the people that are""" start="00:50:57.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""working on the documentation that should make""" start="00:50:59.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that choice. Currently we have,""" start="00:51:01.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, Modus themes and Org Mode itself is""" start="00:51:03.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""writing their documentation in Org Mode,""" start="00:51:05.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that's fine by me. It has some drawbacks,""" start="00:51:08.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it has some benefits, but most documentation""" start="00:51:10.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""is still in tech info.""" start="00:51:13.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Maybe we'd need to replace that at some""" start="00:51:15.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""point, I don't know. But for now,""" start="00:51:17.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that's what people know and use.""" start="00:51:19.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And if you find that as a barrier to""" start="00:51:22.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""contribute to Emacs, I mean,""" start="00:51:24.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just really write it as plain text.""" start="00:51:25.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We'll be happy to help you with the markup.""" start="00:51:27.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's a little bit, you know,""" start="00:51:29.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""finicky and stuff like that.""" start="00:51:30.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Great. Thanks for that.""" start="00:51:33.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Next question. What do you plan to work on in""" start="00:51:35.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs Core in the future?""" start="00:51:38.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'm a little bit hesitant to reply to that.""" start="00:51:40.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Of course I have ideas.""" start="00:51:42.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Of course there are projects that I'm working""" start="00:51:43.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""on. However, if I say it here,""" start="00:51:45.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I feel like, you know,""" start="00:51:47.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""then you'll hold me to it later and come ask,""" start="00:51:48.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""where is that feature?""" start="00:51:51.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So I'll just say there is plenty of stuff""" start="00:51:52.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that I'm working on, and if you want to know""" start="00:51:55.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""some of the stuff that I have been working""" start="00:51:57.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""on, check the Git log.""" start="00:51:58.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think that's just really as much as I want""" start="00:52:00.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to say about that right now.""" start="00:52:02.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You've added folks to just look at the path""" start="00:52:05.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""with the changelog and that's all you need.""" start="00:52:07.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""All right, moving on to the next question.""" start="00:52:11.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""What do you use Emacs for in your life other""" start="00:52:14.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""than working on Emacs itself?""" start="00:52:16.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Oh shit. So the big thing is programming,""" start="00:52:18.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? Now I work as a programmer.""" start="00:52:21.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But in general, I use org mode heavily.""" start="00:52:27.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I use it for all my writing.""" start="00:52:29.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I use it to write, prepare this talk.""" start="00:52:30.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I use it as a productivity system.""" start="00:52:33.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I use it for emails. I use it as an RSS""" start="00:52:35.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""reader. I do most of my computing.""" start="00:52:41.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I also have Firefox. So it's like Emacs and""" start="00:52:44.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Firefox for some reason.""" start="00:52:47.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I do read documentation in Emacs as well in""" start="00:52:48.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you, but yeah. Great. I'm still,""" start="00:52:51.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I do very much the same thing with you.""" start="00:52:59.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Like You've described exactly what I do.""" start="00:53:00.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I work as a programmer,""" start="00:53:02.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I use Augment for a lot of stuff,""" start="00:53:02.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and I think that describes a whole lot of""" start="00:53:04.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""people currently watching the stream.""" start="00:53:06.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Moving on to the next question.""" start="00:53:09.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""What could we do in order to make Emacs more""" start="00:53:10.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""attractive for younger users?""" start="00:53:12.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""This is an amazing question and I feel wholly""" start="00:53:14.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""unprepared to answer this.""" start="00:53:18.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Probably more introductory material aimed at""" start="00:53:21.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that age group. What do you mean by younger""" start="00:53:24.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""users? You know what would be really cool if""" start="00:53:26.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you had an Emacs for kids project?""" start="00:53:28.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That would be amazing.""" start="00:53:31.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'm not sure if that's what people are""" start="00:53:32.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""thinking about, but yeah,""" start="00:53:34.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that's about what I can say for now.""" start="00:53:37.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Good question. It is a very good question,""" start="00:53:40.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""like it comes back always to a key topic in""" start="00:53:43.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""EmacsConf, which is, how do we get more""" start="00:53:45.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""people to join us? Because it's a wonderful""" start="00:53:47.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""community. And how do we onboard people who""" start="00:53:49.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""are not programmers or people who are younger""" start="00:53:51.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""than the average Joe coming in those""" start="00:53:54.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""meetings? There's this Excellent article by""" start="00:53:57.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Paul Graham, I think, where he was describing""" start="00:54:01.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""how they used Emacs as the sort of customer""" start="00:54:06.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""service system. They built the customer""" start="00:54:09.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""service system for the early days of Amazon""" start="00:54:11.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""in Emacs Lisp. And then they switched and all""" start="00:54:14.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the employees were sad.""" start="00:54:17.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So definitely there's more stuff that could""" start="00:54:18.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""be done in Emacs and be done better in Emacs.""" start="00:54:21.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So for sure, if people want to explore more""" start="00:54:25.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""stuff like that, that's amazing.""" start="00:54:27.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah. And for people who weren't around""" start="00:54:29.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""earlier today, we've had a presentation about""" start="00:54:32.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""how to get computer science students to use""" start="00:54:33.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs and trying to provide as much""" start="00:54:36.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""information and as much tutorial as needed""" start="00:54:41.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for them to understand what is the philosophy""" start="00:54:43.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""behind Emacs and how it influences the way""" start="00:54:45.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you work and so forth.""" start="00:54:48.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So you might want to revisit this discussion.""" start="00:54:49.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And we also have plenty of talks talking""" start="00:54:51.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""about this issue. And I can just add that I""" start="00:54:53.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""think it's very important for us as a""" start="00:54:57.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""community to just be enthusiastic to get more""" start="00:55:00.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""people involved. Because I mean,""" start="00:55:03.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""look, there's this meme where it's like,""" start="00:55:04.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I use Arch Linux, by the way,""" start="00:55:06.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I use Arch, by the way.""" start="00:55:08.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And for some reason, people using Arch keep""" start="00:55:10.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""telling you that they're using Arch.""" start="00:55:12.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That's fine. Use whatever you want.""" start="00:55:14.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's free software, I don't care.""" start="00:55:16.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think if you look at Vim users,""" start="00:55:20.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""they're very almost militant,""" start="00:55:21.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""oh, we're Vim, and Vim is the thing.""" start="00:55:23.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And Emacs users sometimes,""" start="00:55:25.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and it's fine. We take a bit of a more""" start="00:55:27.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""laid-back approach. We're like,""" start="00:55:29.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""yeah, I use Emacs, you use Vim,""" start="00:55:31.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""whatever. And that's fine.""" start="00:55:32.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, that's the correct approach,""" start="00:55:35.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think. You should respect what people want""" start="00:55:36.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to use. I don't care that people use VS Code""" start="00:55:38.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""or whatever. I'm not going to use that""" start="00:55:40.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""because it's too limiting.""" start="00:55:42.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's not really a workable environment.""" start="00:55:43.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But I think it's OK to be enthusiastic.""" start="00:55:46.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think it's okay to talk about that type of""" start="00:55:48.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""enthusiasm and anything that can help""" start="00:55:51.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""increase the enthusiasm around Emacs can only""" start="00:55:54.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""help the longevity of Emacs.""" start="00:55:56.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I agree and that's also 1 of the key""" start="00:56:02.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""objectives of EmacsConf.""" start="00:56:04.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's about bringing a lot of amazing people""" start="00:56:05.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to come talk, like you,""" start="00:56:07.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""about stuff that is very dear to you.""" start="00:56:09.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And it's very tangible how much you care,""" start="00:56:11.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""all of you, about what you're presenting.""" start="00:56:14.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And it's amazing to put all of you people on""" start="00:56:15.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just 48 hours talking about all of this and""" start="00:56:18.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""then creating so much content for people to""" start="00:56:20.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""watch. And I think it's really helping the""" start="00:56:22.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""enthusiasm to live on and to gather a little""" start="00:56:24.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""more snow as it comes down.""" start="00:56:28.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, I watch you Max Conf every year.""" start="00:56:29.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think it's a lot of fun.""" start="00:56:31.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Thank you. I'll take the compliment for""" start="00:56:34.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""everyone else in the team.""" start="00:56:37.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We're going to go a little bit longer with""" start="00:56:39.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the Q&A because we still have a lot of""" start="00:56:41.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""questions and if Stéphane is still willing to""" start="00:56:42.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""answer, I'm still willing to not go too bad""" start="00:56:44.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to hear a lot more of it.""" start="00:56:48.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, for me it's fine.""" start="00:56:49.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I have time. Great. So I think I've done this""" start="00:56:50.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""question. So, all right.""" start="00:56:55.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""How are we going to make sure that a cool""" start="00:56:58.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""idea is going to pass it through for the next""" start="00:57:00.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""generation, let's say 20 years later,""" start="00:57:01.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the generation still have the good knowledge""" start="00:57:04.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we have today. Yeah, so I mean,""" start="00:57:05.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""if you think about what does EMAX need to""" start="00:57:09.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""have staying power, so in general,""" start="00:57:12.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""they say, you know, if if when you start a""" start="00:57:15.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""company, if you have a company for 1 year,""" start="00:57:17.020" video="mainVideo-core" id="subtitle"]]
+[[!template text="""then in all likelihood,""" start="00:57:19.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you're going to have it for 2 years because,""" start="00:57:20.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, it's just so if you've had Emacs""" start="00:57:21.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for 4 years, I'm saying that we're going to""" start="00:57:23.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""have Emacs for the next 4 years as well.""" start="00:57:25.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Just based on that, I'm not sure the logic""" start="00:57:27.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""holds up, but you know,""" start="00:57:30.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""how does Emacs stay relevant?""" start="00:57:32.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think is the question.""" start="00:57:34.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Well, I think we need to continue working on""" start="00:57:35.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""all the types of exploratory work that people""" start="00:57:38.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""are doing in the community.""" start="00:57:41.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think there is fundamental stuff that needs""" start="00:57:43.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to be done. I mean, if people want to work""" start="00:57:45.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""on, you know, web rendering and Emacs,""" start="00:57:47.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""maybe that's the next,""" start="00:57:49.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, revolutionary step that we need""" start="00:57:50.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that could, you know, really showcase what""" start="00:57:53.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs, you know, as, you know,""" start="00:57:55.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""an idea, even if not Emacs as a software""" start="00:57:57.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""could be and, you know,""" start="00:58:00.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Because there is huge potential in the idea""" start="00:58:01.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""as such. So maybe that's something.""" start="00:58:05.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But I mean, from the point of view of core""" start="00:58:07.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development, I think we need to just continue""" start="00:58:09.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""working on the fundamental technologies.""" start="00:58:11.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""1 thing that I would like to eventually see""" start="00:58:15.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""is a better garbage collector.""" start="00:58:17.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We've talked about that for a long time,""" start="00:58:19.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but I mean, we need someone to do the job""" start="00:58:22.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""really. It's not very easy.""" start="00:58:25.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's very hard, actually.""" start="00:58:27.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So just continues working on stuff like that,""" start="00:58:31.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""continue with the exploration,""" start="00:58:34.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""continue using and being excited about Emacs.""" start="00:58:35.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think that's the best guarantee that we""" start="00:58:40.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""have. Yeah, and perhaps to echo something""" start="00:58:43.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that you said earlier,""" start="00:58:45.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the tools that you're using,""" start="00:58:46.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""like the emails, they've been around forever,""" start="00:58:47.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""they will be around forever.""" start="00:58:49.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""This pragmatic stance on the tools that""" start="00:58:51.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you're using, they might look stayed from the""" start="00:58:53.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""outside, but ultimately they are what permits""" start="00:58:56.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a sense of longevity to any kind of project""" start="00:58:59.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you embark upon. Also,""" start="00:59:03.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""in a sense, I think that the expectations""" start="00:59:05.460" video="mainVideo-core" id="subtitle"]]
+[[!template text="""might be changing in the sense that,""" start="00:59:07.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, when I started using GNU Linux,""" start="00:59:09.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know what the first thing I did was,""" start="00:59:12.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""because I couldn't get Xorg to run.""" start="00:59:15.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So the first thing you had to do was you had""" start="00:59:16.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to compile your own Linux kernel.""" start="00:59:19.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So you sit there and make manuconfig and""" start="00:59:20.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you'll like, try to read it and you've never""" start="00:59:22.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""done anything like this before.""" start="00:59:24.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You know, I was just a kid.""" start="00:59:26.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I had never been at this kind of,""" start="00:59:27.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, whatever. So I had to start with""" start="00:59:29.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that. And then you have to write the X or""" start="00:59:31.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""configuration file. And I had the patience""" start="00:59:34.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""for that. But nowadays,""" start="00:59:36.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""people have different expectations.""" start="00:59:37.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You just install something,""" start="00:59:38.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and it works. And we need to keep that in""" start="00:59:40.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""mind as well. So that's why I keep pushing as""" start="00:59:42.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""1 of my big things. We need to build a more""" start="00:59:45.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""cohesive experience out of the box.""" start="00:59:48.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Of course, that can be customizable.""" start="00:59:51.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You shouldn't shoehorn anything in just for""" start="00:59:52.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the sake of it. But you could get some things""" start="00:59:55.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""a little bit more for free.""" start="00:59:58.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And maybe some of us that have our own""" start="01:00:01.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""configs and we've been doing this for you""" start="01:00:03.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""know, 2, 05:10, even 20 years,""" start="01:00:04.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we could also see, you know,""" start="01:00:08.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""from the point of view of a new user that""" start="01:00:09.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""just installs VS Code and then they click,""" start="01:00:11.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""yes I use Python, yes I use that,""" start="01:00:13.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and then it just automatically works.""" start="01:00:15.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""You know what I mean? I mean,""" start="01:00:19.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""then could we get closer to that perhaps a""" start="01:00:20.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""little bit? I think that would also help.""" start="01:00:24.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, I think that's what we call the""" start="01:00:26.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""configuration wizard. And we were talking""" start="01:00:28.700" video="mainVideo-core" id="subtitle"]]
+[[!template text="""about this, I think, a couple of years ago at""" start="01:00:30.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""EmacsConf. I can't remember if it was with""" start="01:00:32.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Adam in the chat. Adam,""" start="01:00:34.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean Alpha Papa, or if it was with Bastien,""" start="01:00:35.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but I remember the idea cropping off.""" start="01:00:38.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Like, it's either you get a tutorial for""" start="01:00:40.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs, a proper tutorial,""" start="01:00:42.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""or you get a wizard, or you get both,""" start="01:00:43.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and then all is right for the world.""" start="01:00:45.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But definitely cool ideas being evoked.""" start="01:00:47.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'm gonna say I need to decree the time when""" start="01:00:50.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we finish because for me it is 11.15""" start="01:00:52.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""p.m. And I think my co-organizers are also""" start="01:00:55.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""willing to end the day and go rest because""" start="01:00:59.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we've got another day to go tomorrow.""" start="01:01:01.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So how about we take 3 minutes and 30 seconds""" start="01:01:03.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""to try to answer a little bit more succinctly""" start="01:01:06.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the questions we've got left.""" start="01:01:08.560" video="mainVideo-core" id="subtitle"]]
+[[!template text="""How does that sound, Stefan?""" start="01:01:09.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sounds great. Cool, so I'll start reading the""" start="01:01:11.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""questions then that we've got left.""" start="01:01:15.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So this 1 we've got. If you're willing to""" start="01:01:18.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""discuss it, what do you think about the""" start="01:01:20.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""recent controversy about use of CLLib in""" start="01:01:22.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs call code? Am I willing to discuss""" start="01:01:24.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that? I have said my opinion on Emacs,""" start="01:01:29.980" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Devel, I think. And I think I understand,""" start="01:01:36.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, the viewpoints of both sides in that""" start="01:01:40.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""discussion. It is true that some things,""" start="01:01:44.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, we have to think about that.""" start="01:01:46.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""There is a real problem,""" start="01:01:49.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think, when we have 3 different APIs for""" start="01:01:50.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""doing the same thing in Emacs.""" start="01:01:53.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And can we make that a little bit better?""" start="01:01:55.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, perhaps we could,""" start="01:01:57.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""right? So that's about as much as I'd like to""" start="01:01:59.760" video="mainVideo-core" id="subtitle"]]
+[[!template text="""say. Fair enough. I would have also accepted""" start="01:02:04.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that CL loops are ugly to write and they""" start="01:02:06.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""don't feel very lispy.""" start="01:02:09.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But I'll take your answer as well.""" start="01:02:10.320" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, some people think that.""" start="01:02:13.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I understand that position as well.""" start="01:02:15.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Right. Okay, next question.""" start="01:02:19.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""When we find a bug in our Emacs,""" start="01:02:21.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""do we need to try to replicate it on our side""" start="01:02:23.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""version, on our SID version,""" start="01:02:25.200" video="mainVideo-core" id="subtitle"]]
+[[!template text="""sorry, then update all the usual list package""" start="01:02:26.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we use, and if we succeed to replicate the""" start="01:02:29.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""bug in this version, only then go to""" start="01:02:31.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""development version 30 and do the same.""" start="01:02:33.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Then only ask for assistance in reporting the""" start="01:02:35.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""bug we found. So I believe when they""" start="01:02:37.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""encounter a bug, are people supposed to go to""" start="01:02:40.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""master to pull main and just to make sure""" start="01:02:43.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that they are on the latest version.""" start="01:02:47.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Is this something that you require?""" start="01:02:48.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We don't require that,""" start="01:02:50.660" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but we do try to encourage you to reproduce""" start="01:02:51.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""it on master if we think that it matters.""" start="01:02:54.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, so if you can, that's even better.""" start="01:02:57.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But if the bug is there in Emacs 29,""" start="01:03:01.620" video="mainVideo-core" id="subtitle"]]
+[[!template text="""maybe we want to fix it in Emacs 29.2.""" start="01:03:03.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So the latest point release is also fine.""" start="01:03:06.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Bugs in Emacs 28 at this point,""" start="01:03:10.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""like the previous major version,""" start="01:03:12.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""we might ask you to try to reproduce it on""" start="01:03:15.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs 29 because we're not planning more""" start="01:03:17.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""releases of old major versions.""" start="01:03:19.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So that's the fundamental reason for that.""" start="01:03:21.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Great. Thank you for your answer.""" start="01:03:24.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""All right. Moving on to the next question.""" start="01:03:25.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""On branching off sub-threads,""" start="01:03:27.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I note that they are less visible compared to""" start="01:03:29.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""starting a new thread in practice.""" start="01:03:31.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I am wondering if it is just my impression or""" start="01:03:33.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""something devs also observe.""" start="01:03:35.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, it's true. That's correct.""" start="01:03:37.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I don't know what to do about it.""" start="01:03:41.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""If you want more visibility,""" start="01:03:42.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I guess just start a new thread.""" start="01:03:44.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I don't know. I can only agree,""" start="01:03:47.080" video="mainVideo-core" id="subtitle"]]
+[[!template text="""really. I concur. That's true.""" start="01:03:48.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Okay. Next question. What about rewriting""" start="01:03:51.720" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Emacs in Rust? Use Guile instead of Elisp.""" start="01:03:54.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Multi-threaded Emacs. Make Emacs prettier and""" start="01:03:57.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""shiny. And of course, same defaults.""" start="01:03:59.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Just kidding. We are spoiled children because""" start="01:04:02.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you and Eli, Lars, and etc do an impressive""" start="01:04:04.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""work. I live in Emacs since 2001.""" start="01:04:08.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Thanks. That was a good 1.""" start="01:04:11.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Sane defaults. Okay, Well,""" start="01:04:14.220" video="mainVideo-core" id="subtitle"]]
+[[!template text="""thank you. Thanks for that comment.""" start="01:04:18.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""That made me chuckle. Next question by the""" start="01:04:20.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""same person, I assume.""" start="01:04:23.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""The only downside I see with copyright""" start="01:04:24.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""assignment is that 1 has to disclose their""" start="01:04:26.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""real identity. Would it be a possibility to""" start="01:04:28.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""assign a copyright under a nickname?""" start="01:04:31.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, you don't have to say a real name.""" start="01:04:33.160" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Just register some pseudonym.""" start="01:04:34.840" video="mainVideo-core" id="subtitle"]]
+[[!template text="""The FSF does need your real name,""" start="01:04:37.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but that's kept private only.""" start="01:04:39.440" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So feel free to reach out to assign at""" start="01:04:41.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""gnu.org and ask more about that.""" start="01:04:45.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Right. All right, next question.""" start="01:04:49.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Do you think it is possible to reach an""" start="01:04:51.820" video="mainVideo-core" id="subtitle"]]
+[[!template text="""agreement on sane defaults for better""" start="01:04:53.400" video="mainVideo-core" id="subtitle"]]
+[[!template text="""out-of-the-box experience?""" start="01:04:55.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Yeah, so your sane is not my sane""" start="01:04:57.800" video="mainVideo-core" id="subtitle"]]
+[[!template text="""necessarily. So that's the fundamental""" start="01:05:00.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""problem that we're discussing here.""" start="01:05:01.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I think it's a social,""" start="01:05:02.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""not a technical problem.""" start="01:05:03.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We do change defaults sometimes,""" start="01:05:05.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but I mean, there is also some staying power.""" start="01:05:07.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So it's understandable that,""" start="01:05:09.880" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, it's, we can't just change them""" start="01:05:12.260" video="mainVideo-core" id="subtitle"]]
+[[!template text="""willy nilly and then flip flop between,""" start="01:05:13.940" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, 1 or the other kind of thing.""" start="01:05:15.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So it does take a little bit more time.""" start="01:05:18.340" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But yeah, sure, we can.""" start="01:05:20.060" video="mainVideo-core" id="subtitle"]]
+[[!template text="""We do change defaults at times.""" start="01:05:23.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""But it's perhaps more slower than what some""" start="01:05:26.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""people would prefer, for sure.""" start="01:05:29.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So that's, yeah. Right,""" start="01:05:31.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""all right. We have 2 more questions.""" start="01:05:36.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""So will XWidgets have a future?""" start="01:05:37.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Seeing the new bugs popping up in the latest""" start="01:05:40.120" video="mainVideo-core" id="subtitle"]]
+[[!template text="""XWidget dev. Not sure if there was the rest""" start="01:05:42.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""of the question, But on XWidgets,""" start="01:05:45.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""can you tell us a little more?""" start="01:05:46.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I'm not really following now.""" start="01:05:48.740" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I mean, I'm not seeing a lot of development""" start="01:05:50.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""on XWidgets currently.""" start="01:05:52.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Some people have done work in fixing up a few""" start="01:05:54.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""bugs, but I think that feature really needs""" start="01:05:57.100" video="mainVideo-core" id="subtitle"]]
+[[!template text="""more love. So I think we need,""" start="01:06:00.380" video="mainVideo-core" id="subtitle"]]
+[[!template text="""you know, help is welcome,""" start="01:06:02.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""patch is welcome. That's what I can say about""" start="01:06:03.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""that. All right, and our final question of""" start="01:06:05.920" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the day. Have you voted for Emacs as the""" start="01:06:11.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""software of the year on the Tuxes by Jupyter""" start="01:06:13.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Broadcasting? I did because Emacs 29 is""" start="01:06:15.140" video="mainVideo-core" id="subtitle"]]
+[[!template text="""great. Thank you. Okay,""" start="01:06:17.480" video="mainVideo-core" id="subtitle"]]
+[[!template text="""well, good job voting.""" start="01:06:19.300" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I didn't know, I don't know what Tuxy is on""" start="01:06:20.580" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Jupyter broadcasting, but look it up and go""" start="01:06:22.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""vote. So I wish I could tell you,""" start="01:06:25.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""I assume with Tux, it might be something""" start="01:06:28.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""related to Linux, but that's as much as I can""" start="01:06:29.500" video="mainVideo-core" id="subtitle"]]
+[[!template text="""say. All right, well, Stefan,""" start="01:06:32.900" video="mainVideo-core" id="subtitle"]]
+[[!template text="""thank you so much for taking the time not""" start="01:06:34.960" video="mainVideo-core" id="subtitle"]]
+[[!template text="""only to do a wonderful presentation,""" start="01:06:36.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""but also for answering all the questions of""" start="01:06:38.000" video="mainVideo-core" id="subtitle"]]
+[[!template text="""the community. Do you have anything else to""" start="01:06:39.640" video="mainVideo-core" id="subtitle"]]
+[[!template text="""add? Just really thanks for all the questions""" start="01:06:41.240" video="mainVideo-core" id="subtitle"]]
+[[!template text="""and thanks for staying.""" start="01:06:45.360" video="mainVideo-core" id="subtitle"]]
+[[!template text="""It's been a long day, a long conference,""" start="01:06:47.780" video="mainVideo-core" id="subtitle"]]
+[[!template text="""so thanks for staying and listening to my""" start="01:06:49.600" video="mainVideo-core" id="subtitle"]]
+[[!template text="""talk as well. Really appreciate it.""" start="01:06:51.180" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Appreciate the good work you guys are doing""" start="01:06:52.540" video="mainVideo-core" id="subtitle"]]
+[[!template text="""behind the scenes, organizing,""" start="01:06:54.280" video="mainVideo-core" id="subtitle"]]
+[[!template text="""setting everything up.""" start="01:06:55.520" video="mainVideo-core" id="subtitle"]]
+[[!template text="""And really humbled to be a part of this""" start="01:06:57.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""community. So thank you all.""" start="01:07:00.420" video="mainVideo-core" id="subtitle"]]
+[[!template text="""Well I can assure you that no 1 either in the""" start="01:07:02.680" video="mainVideo-core" id="subtitle"]]
+[[!template text="""organization team or the people watching now""" start="01:07:05.860" video="mainVideo-core" id="subtitle"]]
+[[!template text="""felt like it was tiring to stay and listen to""" start="01:07:08.040" video="mainVideo-core" id="subtitle"]]
+[[!template text="""your answers. So thank you so much Stefan.""" start="01:07:10.900" video="mainVideo-core" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20core%3A%20Emacs%20core%20development%3A%20how%20it%20works)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/core-before.md b/2023/info/core-before.md
new file mode 100644
index 00000000..dfa57577
--- /dev/null
+++ b/2023/info/core-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 68-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="core-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 1:07:13 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.json">Download --main.json (2.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm">Download --main.webm (211MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/m4XmrmE9Geat54AKT1RQaH">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/core-nav.md b/2023/info/core-nav.md
new file mode 100644
index 00000000..57508c7e
--- /dev/null
+++ b/2023/info/core-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/devel">Emacs development updates</a>
+Next by track: <a href="/2023/talks/hyperamp">Top 10 ways Hyperbole amps up Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/cubing-after.md b/2023/info/cubing-after.md
new file mode 100644
index 00000000..dae3e345
--- /dev/null
+++ b/2023/info/cubing-after.md
@@ -0,0 +1,310 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="cubing-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""Hello, everyone, and welcome to Speedcubing in Emacs.""" start="00:00:00.000" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""First of all, a little bit about myself.""" start="00:00:08.360" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""My name is Vasilij Schneidermann. Online, I go by wasamasa.""" start="00:00:10.120" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I'm 31 years old. I work in information security,""" start="00:00:13.680" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and I do consulting and hacking""" start="00:00:18.040" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and stuff like figuring out""" start="00:00:20.480" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""how to break into other people's computers""" start="00:00:22.480" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and how to secure their systems basically.""" start="00:00:25.280" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""You can reach me by email.""" start="00:00:29.360" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I do have a self-hosted code repository thingy going on.""" start="00:00:31.440" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I have a blog, and you can find me""" start="00:00:36.640" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""in some other places online, like IRC for example.""" start="00:00:40.400" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""So about the talk itself,""" start="00:00:45.920" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I used to be into the Rubik's cube when I was in school.""" start="00:00:48.680" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I forgot about it, though,""" start="00:00:52.840" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""because these cubes were not very good.""" start="00:00:54.040" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Recently I did find some cheap looking cube at a shop.""" start="00:00:56.280" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Did not pay terribly much for it.""" start="00:01:02.280" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""It was so, so much better than my old cube,""" start="00:01:04.120" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""it was unreal.""" start="00:01:07.040" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""This motivated me to get back into""" start="00:01:08.640" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""this really weird kind of hobby.""" start="00:01:11.480" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""For this, you need to be good at producing""" start="00:01:13.560" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""a truly random scramble""" start="00:01:18.000" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and timing your attempts to get any better at it.""" start="00:01:19.400" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""There is, of course, existing software""" start="00:01:22.320" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""to do the scrambling for you and the recording""" start="00:01:23.720" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and the timekeeping and such,""" start="00:01:26.240" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but all the good options seem to be either web or mobile,""" start="00:01:28.080" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""for example the cstimer software""" start="00:01:31.240" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""or the twisty-timer app on Android.""" start="00:01:33.240" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""Cubing in Emacs""" start="00:01:35.400" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""To my surprise, I did not find a single decent option""" start="00:01:35.400" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""inside Emacs, so this is basically a case study""" start="00:01:39.320" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""how to do better. For this, I wanted to make use of""" start="00:01:41.960" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""all the cool new Emacs features that appeared,""" start="00:01:45.000" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""like the SVG library; Transient,""" start="00:01:47.800" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""the library used for the Magit-style interfaces;""" start="00:01:50.880" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and the recently added sqlite-mode.""" start="00:01:53.600" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""And most importantly it was about having fun.""" start="00:01:56.440" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""Prior art""" start="00:02:01.160" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""So here's a full list of prior art,""" start="00:02:01.160" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I will not go into detail about this,""" start="00:02:02.760" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but basically we have things solving""" start="00:02:04.280" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""very different parts of this,""" start="00:02:06.240" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but not all of it. For example: we have several,""" start="00:02:08.040" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""we have a timer. We have several solvers.""" start="00:02:10.760" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""We have some scramblers.""" start="00:02:14.240" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""We have some whole-cube simulators, including a 3D one.""" start="00:02:16.040" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""We have something for making it easier""" start="00:02:19.360" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""to enter your algorithms in the notation.""" start="00:02:20.760" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""But nothing that does all of those things in one package,""" start="00:02:23.120" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""which kind of surprised me.""" start="00:02:25.920" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""So I present the `wca-prep` package.""" start="00:02:28.120" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""The name""" start="00:02:32.040" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""So the name, I found it difficult""" start="00:02:32.040" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""to come up with a good name and so I looked""" start="00:02:35.560" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and I saw, well there's this World Cube Association""" start="00:02:39.960" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""that holds these competitions where you compete.""" start="00:02:42.560" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""They do this for the Rubik's cube""" start="00:02:46.040" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but also a few others,""" start="00:02:47.760" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""so there's like a standardized list""" start="00:02:48.920" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""of events they have for this.""" start="00:02:50.800" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""There is a standard notation for this""" start="00:02:52.640" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and rules and everything.""" start="00:02:55.160" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""And the goal of my package is basically""" start="00:02:56.520" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""to help prepare myself for such a competition""" start="00:02:58.200" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and in fact a week ago I went to my first one""" start="00:03:01.280" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""which was wild, but pretty cool.""" start="00:03:03.680" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""So for this reason I chose this name wca-prep,""" start="00:03:06.720" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""because it helps me prepare for this kind of competition""" start="00:03:10.920" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and this limited the scope significantly,""" start="00:03:13.640" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""What's in wca-prep""" start="00:03:16.520" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""I have a scrambler, visualization of the scramble,""" start="00:03:16.520" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""timer, and statistics.""" start="00:03:19.000" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I excluded pretty much everything else I've seen.""" start="00:03:23.320" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""For this reason, I only tried to focus on""" start="00:03:25.560" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""some very basic puzzles I can solve comfortably,""" start="00:03:28.789" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and did not want to do anything else""" start="00:03:32.200" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""that may complicate things significantly.""" start="00:03:34.840" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""No other kinds of puzzles, no simulation, no solving,""" start="00:03:36.440" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""no exotic events, and no specialized scrambles""" start="00:03:40.480" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""that are only good for practicing specific algorithms.""" start="00:03:43.920" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""Demo""" start="00:03:49.240" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""So at this point the organizer should hopefully show""" start="00:03:49.240" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""a small video I've prepared, a one minute video showing how""" start="00:03:54.200" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I actually use this to solve a cube and to time my solve.""" start="00:03:58.000" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""Challenges: Representing the cube""" start="00:05:15.240" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""Okay, so building this thing, there were several challenges.""" start="00:05:15.240" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""The first one was how do I even represent""" start="00:05:18.509" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""the state of a Rubik's cube.""" start="00:05:20.509" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""For this there are many possible representations,""" start="00:05:22.469" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""no obvious best solution.""" start="00:05:25.509" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I did not, well, what helped me was that""" start="00:05:27.709" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I did not have to programmatically solve this thing,""" start="00:05:29.629" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""so I picked the easiest possible representation""" start="00:05:31.989" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""which is just an array of every single facelet.""" start="00:05:35.189" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""For a 3x3 cube you have 9 facelets on one side,""" start="00:05:38.269" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""so times 6 sides you would have 54 elements in this array.""" start="00:05:42.509" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""So with this representation, it's very simple,""" start="00:05:47.269" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but it's kind of weird to do scrambles with this.""" start="00:05:49.709" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""But otherwise, it worked very, very well.""" start="00:05:52.389" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""In the future, I plan to learn some group theory,""" start="00:05:54.909" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""pick a better representation""" start="00:05:57.269" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and do this in a much, much more elegant way""" start="00:05:58.749" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""without compromising speed too much.""" start="00:06:01.189" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Yes. Once I had the representation,""" start="00:06:07.869" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""the scrambling itself should not be too hard.""" start="00:06:10.709" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""For this, it's important to consider that basically""" start="00:06:13.629" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""if you do a face turn""" start="00:06:17.749" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""you end up swapping some facelets with other facelets,""" start="00:06:19.149" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""that's the easiest way to think about this.""" start="00:06:22.429" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""To determine which one goes into which one's position,""" start="00:06:26.029" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""it was pretty confusing to figure this out.""" start="00:06:29.269" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""For this I went through a few papers,""" start="00:06:32.471" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and I found one which suggested""" start="00:06:34.309" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""to just build a cube out of paper,""" start="00:06:36.029" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""number every facelet, and turn it""" start="00:06:37.949" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and keep track of which facelet moved into which position.""" start="00:06:40.029" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""And programmatically, the `cl-rotatef` macro""" start="00:06:44.349" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""was very, very useful for doing this kind of""" start="00:06:47.509" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""in-place swapping you need for this operation.""" start="00:06:49.389" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""So in the future, group theory would hopefully""" start="00:06:51.629" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""make this a bit less awkward.""" start="00:06:54.869" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Here's a photo of this paper cube I made""" start="00:06:57.989" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""along with a real cube. As you can see""" start="00:07:00.109" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""mathematically speaking, they are the same thing,""" start="00:07:03.869" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""they just look very, very different.""" start="00:07:07.349" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""Scrambling""" start="00:07:09.269" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""So the scramble algorithm itself,""" start="00:07:09.269" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I pondered how this would even be done. In the competitions,""" start="00:07:14.309" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""They do this in a very, very elaborate way.""" start="00:07:19.429" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""They generate a random cube,""" start="00:07:21.589" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""they try to solve it, and if it's solvable""" start="00:07:22.749" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""they use these solution moves""" start="00:07:25.389" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""to turn into a scramble basically.""" start="00:07:28.549" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""And they also make sure to canonicalize the moves,""" start="00:07:30.829" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""so if you have subsequent moves that can be simplified,""" start="00:07:34.949" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""they do simplify these as much as possible.""" start="00:07:38.549" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""For example,""" start="00:07:40.589" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""if you have two subsequent rotations in one direction,""" start="00:07:41.229" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""it's turned into a different kind of rotation,""" start="00:07:43.749" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""so 90 and 90 equals 180.""" start="00:07:46.669" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""And the other Elisp scramblers I looked at,""" start="00:07:49.389" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""they generate random moves.""" start="00:07:53.309" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Some of them do canonicalize. Not all of them.""" start="00:07:55.109" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""This one tries to do the best low-fi thing,""" start="00:07:57.509" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""that is, generating random moves,""" start="00:08:00.909" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""canonicalizing and repeating""" start="00:08:02.389" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""until enough have been generated.""" start="00:08:04.029" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""Visualization""" start="00:08:09.549" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""For the visualization I had to figure out""" start="00:08:09.549" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""something else too complicated.""" start="00:08:13.149" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""For this, I tried to figure out""" start="00:08:14.509" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""where every facelift would end up in the puzzle view""" start="00:08:17.229" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""when you would unfold it.""" start="00:08:19.869" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""And for this, I did not consider the facelet orientation.""" start="00:08:21.429" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""This may be important later for some other puzzles""" start="00:08:25.669" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""where you can end up with very twisted faces,""" start="00:08:29.269" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but for simple cubes, it's not a problem.""" start="00:08:31.149" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""My initial prototype used colored text,""" start="00:08:33.029" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but later, I used the SVG library.""" start="00:08:36.309" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""It turned out to be easy enough to use, actually.""" start="00:08:38.749" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Currently, I have hard-coded face-color mappings,""" start="00:08:41.589" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but I plan to replace this so that theming is possible.""" start="00:08:46.109" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""For example, if you happen to have a cube""" start="00:08:49.109" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""that does not have the same color mappings as I do,""" start="00:08:51.589" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""then you should be able to fix this.""" start="00:08:54.690" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""UI with Transient""" start="00:08:56.469" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""Next challenge was to build""" start="00:08:56.469" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""a beautiful intuitive UI with Transient.""" start="00:09:01.429" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""The reason why I chose this is""" start="00:09:03.949" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""because it would be self-documenting and Magit-style,""" start="00:09:06.869" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and everyone knows how Magit works basically.""" start="00:09:10.349" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Since Transient has become part of Emacs,""" start="00:09:12.349" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""there is really no reason to not try it out.""" start="00:09:15.309" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""The problem was documentation is difficult to understand.""" start="00:09:17.229" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""It's very abstract and high level,""" start="00:09:21.669" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and it's hard to figure out. &quot;Okay,""" start="00:09:23.389" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I want to do something,""" start="00:09:25.869" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""how am I supposed to do this?&quot;""" start="00:09:26.789" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I did find transient-showcase, which has lots of examples,""" start="00:09:28.909" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but they don't really feel finished""" start="00:09:33.349" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and not realistic enough.""" start="00:09:35.629" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""When I tried to use the package,""" start="00:09:39.069" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I got plenty of unhelpful error messages""" start="00:09:40.749" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""when using it incorrectly.""" start="00:09:42.909" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I did manage to figure it out,""" start="00:09:44.109" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but I plan to find more actual examples of it,""" start="00:09:45.949" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""to have an executable reference basically""" start="00:09:50.589" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and try to improve my use of it.""" start="00:09:53.429" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""Book-keeping with SQLite""" start="00:09:55.629" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""For the book-keeping, I used SQLite.""" start="00:09:55.629" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""This is a very recent addition to Emacs,""" start="00:10:01.549" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""it only appeared in the current major version.""" start="00:10:04.549" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""It's still very early days.""" start="00:10:07.309" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I found some oddities, one of them turned out to be""" start="00:10:09.389" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""a bug in the transaction macro.""" start="00:10:13.029" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Like basically, if you do an SQL transaction""" start="00:10:14.829" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and an error happens, then every helper I found""" start="00:10:17.589" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""does a rollback on an error.""" start="00:10:20.189" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""But this one did not. It actually committed on an error,""" start="00:10:20.949" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and this was very weird to figure out.""" start="00:10:26.749" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I reported a bug. Eli was nice enough to send me a patch.""" start="00:10:29.869" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""We did some patch review,""" start="00:10:34.309" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and he ended up fixing it properly.""" start="00:10:35.429" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""So yes, there's still a lot to be done there, and yeah,""" start="00:10:37.989" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""the API is very basic.""" start="00:10:45.669" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""You don't have convenience helpers""" start="00:10:46.909" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""like fetch the first row or fetch the first value""" start="00:10:48.909" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""or anything, but they're easy enough to write yourself.""" start="00:10:51.309" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""And the biggest challenge with this bookkeeping part""" start="00:10:54.430" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""was figuring out a decent schema,""" start="00:10:56.370" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""like how to organize data correctly""" start="00:10:58.029" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""so that it would not be awkward to manipulate.""" start="00:11:00.149" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""And with this, you can finally build a package""" start="00:11:02.349" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""that remembers its state properly""" start="00:11:05.749" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and don't have to run into foot guns""" start="00:11:07.389" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""with Lisp-style serialization, deserialization.""" start="00:11:10.469" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template new="1" text="""Conclusion""" start="00:11:12.629" video="mainVideo-cubing" id="subtitle"]]
+
+[[!template text="""So yes, that concludes it so far.""" start="00:11:12.629" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""So what did I learn from this exercise?""" start="00:11:18.189" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Well, there are still plenty of packages""" start="00:11:22.189" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""for Emacs to be written.""" start="00:11:24.509" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""If you think everything you can think of""" start="00:11:25.589" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""or you need has already been written, well, guess what?""" start="00:11:28.909" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""No.""" start="00:11:31.349" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""These are still plenty of specialized things""" start="00:11:31.789" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""that could need your help.""" start="00:11:34.045" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""These cubes do not require advanced mathematics,""" start="00:11:36.789" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""contrary to what you may think.""" start="00:11:39.789" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Yes, you can apply advanced mathematics to them""" start="00:11:41.149" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""if you want to, but you don't have to.""" start="00:11:44.709" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""What surprised me about this is basically group theory.""" start="00:11:47.469" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I've heard of it before.""" start="00:11:50.989" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""It seemed to be a meme, basically,""" start="00:11:52.069" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""because it has been like mostly Haskell people""" start="00:11:53.829" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""being very excited about this""" start="00:11:56.469" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and it seemed kind of, like, divorced from reality, basically.""" start="00:11:58.189" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""But this puzzle, it actually proves that yes,""" start="00:12:02.509" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""it has its use.""" start="00:12:05.949" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""It definitely has.""" start="00:12:06.949" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""You just have to find the right problem matching it,""" start="00:12:08.429" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and yeah.""" start="00:12:11.389" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""So yeah, once I understand it better,""" start="00:12:13.469" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""the topic, I expect to write better code.""" start="00:12:15.389" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""These new Emacs features, they work well enough.""" start="00:12:18.549" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""There are some rough edges.""" start="00:12:24.469" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""They definitely need more testing.""" start="00:12:25.909" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""So please, please, everyone,""" start="00:12:27.429" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""if you write Elisp, please try SQLite or Transient""" start="00:12:30.669" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""or anything else that looks cool and shiny.""" start="00:12:34.549" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Report bugs.""" start="00:12:36.709" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Find ways to improve them, anything. And yeah,""" start="00:12:38.469" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I'm sure that if we do this,""" start="00:12:41.589" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""then Emacs will continue to get even better.""" start="00:12:44.869" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""So yeah, what's next for this package?""" start="00:12:47.669" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Well, I could... There are lots of obvious UI improvements""" start="00:12:51.789" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""and testing to be done.""" start="00:12:55.989" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I basically want to reach feature parity""" start="00:12:57.349" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""with the twisty-timer app, which this is very much inspired by.""" start="00:12:59.709" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I want nice-looking stats like graphical ones""" start="00:13:02.429" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""instead of just a simple list of times.""" start="00:13:06.669" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""And I want support for more puzzles, of course,""" start="00:13:08.789" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""not just the simple cubes,""" start="00:13:11.229" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""but as I progress learning these puzzles,""" start="00:13:12.549" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""I want to have Emacs supporting me for this.""" start="00:13:14.589" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""But generally, it's a very open-ended package.""" start="00:13:18.069" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""And this concludes the talk.""" start="00:13:22.429" video="mainVideo-cubing" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:13:26.629" video="mainVideo-cubing" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [mail@vasilij.de](mailto:mail@vasilij.de?subject=Comment%20for%20EmacsConf%202023%20cubing%3A%20Speedcubing%20in%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/cubing-before.md b/2023/info/cubing-before.md
new file mode 100644
index 00000000..c1dbf0c3
--- /dev/null
+++ b/2023/info/cubing-before.md
@@ -0,0 +1,26 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 14-min talk; Q&A: IRC
+Status: All done
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="cubing-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="cubing-mainVideo" data="""
+00:00.000 Introduction
+01:35.400 Cubing in Emacs
+02:01.160 Prior art
+02:32.040 The name
+03:16.520 What's in wca-prep
+03:49.240 Demo
+05:15.340 Challenges: Representing the cube
+07:09.220 Scrambling
+08:09.500 Visualization
+08:56.420 UI with Transient
+09:55.580 Book-keeping with SQLite
+11:12.580 Conclusion
+
+"""]]<div></div>Duration: 13:35 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--alternative.webm">Download --alternative.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.opus">Download --main.opus (8.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--presentation.webm">Download --presentation.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--solve-demo.webm">Download --solve-demo.webm (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/2DYX2o8kB1Rv8Mqaj7H1Dx">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/cubing-nav.md b/2023/info/cubing-nav.md
new file mode 100644
index 00000000..3f0e5db3
--- /dev/null
+++ b/2023/info/cubing-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/poltys">The browser in a buffer</a>
+Next by track: <a href="/2023/talks/emms">Emacs MultiMedia System (EMMS)</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/devel-after.md b/2023/info/devel-after.md
new file mode 100644
index 00000000..297fbe3d
--- /dev/null
+++ b/2023/info/devel-after.md
@@ -0,0 +1,561 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="devel-mainVideo-transcript"></a>
+# Transcript (unedited)
+
+[[!template text="""2 seconds. All right. I think we are live.""" start="00:00:02.419" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Yes. So, hi again, everyone.""" start="00:00:08.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I have the pleasure to welcome John Wiegley""" start="00:00:10.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in person to this EmacsConf.""" start="00:00:13.620" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Hi, John. Hello there.""" start="00:00:15.700" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""How are you doing, Leo?""" start="00:00:17.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I am doing fantastic, and even more now that""" start="00:00:18.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I am in a room with you because we've been,""" start="00:00:21.100" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""we were reminiscing with Sacha.""" start="00:00:24.279" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So you had been there in person in 2013 And""" start="00:00:25.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""since we started doing those online,""" start="00:00:30.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Juan, since 2019, I think you've always been""" start="00:00:32.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""online, right? Usually it's a pre-recorded""" start="00:00:35.020" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""video. I think this will be the first 1 I do""" start="00:00:38.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""live in a long time. You're right.""" start="00:00:40.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'm saying we are online right now,""" start="00:00:42.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but I just meant pre-recorded video.""" start="00:00:44.239" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So it's good to have you almost in person or""" start="00:00:45.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""at least live and we are excited to hear""" start="00:00:48.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""about some of the Emacs news.""" start="00:00:50.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So the floor is yours.""" start="00:00:52.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""All right, well welcome everybody.""" start="00:00:55.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This is the yearly state of the Emacs union,""" start="00:00:57.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I guess, about how Emacs development is""" start="00:01:00.239" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""going. Just to note, I am not currently a""" start="00:01:02.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""maintainer of Emacs. So what I do to get""" start="00:01:05.379" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""these notes is I call up my friend,""" start="00:01:07.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Eli Zaretsky, 1 of the current Emacs""" start="00:01:09.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""maintainers, and he and I sit down for an""" start="00:01:12.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""hour, and he just gives me his dump of what's""" start="00:01:13.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""been going on. So I'm sort of just the""" start="00:01:17.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""messenger here. But thanks to Eli for these""" start="00:01:19.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""notes and all of the efforts that he""" start="00:01:22.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""contributes. So what he's been telling me is""" start="00:01:24.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that this Emacs 29 release that we had""" start="00:01:27.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""recently looks to have been very,""" start="00:01:30.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""very successful, which is some good news,""" start="00:01:31.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because there were a lot of new features,""" start="00:01:33.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and some of those features were actually""" start="00:01:35.660" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""quite radical. So far,""" start="00:01:37.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it's been quite a success,""" start="00:01:39.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""no serious problems with it,""" start="00:01:40.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and we have Emacs 29.2""" start="00:01:42.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""will be released very soon.""" start="00:01:45.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""They are thinking now about starting the""" start="00:01:47.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs 30 release cycle soon after 29.2""" start="00:01:50.020" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""is released, where the release branch,""" start="00:01:53.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""which is called Emacs-30 usually,""" start="00:01:55.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""will be cut and then development will become""" start="00:01:59.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""frozen with only bug fixes going into that""" start="00:02:01.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""branch. That may take quite some time until""" start="00:02:03.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it actually comes to fruition as a release,""" start="00:02:07.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but at least it means that the release is""" start="00:02:09.639" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""going to start taking shape in that branch""" start="00:02:11.660" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""soon. So, for now, Emacs 30 looks like maybe""" start="00:02:13.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it's going to be a little less interesting""" start="00:02:17.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""than Emacs 29 was, meaning not a huge number""" start="00:02:19.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""of changing features. But there are still""" start="00:02:23.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""some new things going in.""" start="00:02:25.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So 1 of them is that Emacs 30 is going to""" start="00:02:26.980" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""have Android support. So you will be able to""" start="00:02:29.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""run Emacs 30 on your Android devices.""" start="00:02:32.300" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So if you've ever wanted to have native Emacs""" start="00:02:35.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""on a tablet, which I know I've always wanted,""" start="00:02:37.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that will become possible with Emacs 30.""" start="00:02:40.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There's also going to be much better support""" start="00:02:43.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for touchscreen devices,""" start="00:02:45.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""coincidentally, both laptops and tablets.""" start="00:02:47.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So that'll enhance that Android support.""" start="00:02:50.740" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There will be some recently gained support""" start="00:02:54.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for LLDB in GUD.dl. So if you're on a Mac OS""" start="00:02:57.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""machine or a machine that uses just LLVM as""" start="00:03:01.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""part of the compilation process,""" start="00:03:05.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""then you probably are familiar with LLDB as""" start="00:03:07.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""the command line debugger.""" start="00:03:10.180" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And that support for using LLDB through a GUD""" start="00:03:11.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""will become possible in Emacs 30.""" start="00:03:15.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'm looking forward to this actually quite a""" start="00:03:17.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""bit as well. C Perl mode is being deprecated,""" start="00:03:19.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and all future work now is only being put""" start="00:03:23.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""towards C Perl mode. Another 1 is that there""" start="00:03:25.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""are going to be some new major modes based on""" start="00:03:30.660" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""TreeSitter. They will be for the languages""" start="00:03:33.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Lua, Elixir, and HTML.""" start="00:03:35.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And if you're not familiar,""" start="00:03:38.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I think TreeSitter was introduced in Emacs""" start="00:03:40.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""29. It's a library that allows you to specify""" start="00:03:42.620" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""the grammar of a programming language as a""" start="00:03:47.460" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""BNF file, and I think using JavaScript,""" start="00:03:49.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and then with that file as input to Emacs,""" start="00:03:53.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it is then able to do syntax highlighting,""" start="00:03:56.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""syntax discovery, all of those things within""" start="00:04:00.940" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs without having to use elisp and regexps""" start="00:04:03.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""to discover the structure of the language.""" start="00:04:06.460" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""It defers the structure gathering to""" start="00:04:08.300" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""TreeSitter and then uses that information to""" start="00:04:10.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""navigate the language.""" start="00:04:13.420" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So, As time goes on, you'll see more and more""" start="00:04:15.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""languages taking on TreeSetter support.""" start="00:04:17.300" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So the next 3 coming up,""" start="00:04:19.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Lua, Elixir, and HTML.""" start="00:04:21.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And then the last feature for Emacs 30 is""" start="00:04:24.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that the byte compiler will now detect and""" start="00:04:26.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""warn about many more questionable constructs.""" start="00:04:29.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Things like empty macro bodies,""" start="00:04:33.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""missing lexical constructs,""" start="00:04:35.740" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""or say, condition case without any handlers.""" start="00:04:37.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Just silly stuff that might litter the code,""" start="00:04:40.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but now you'll get a warning about it from""" start="00:04:43.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""the byte compiler to help you clean up the""" start="00:04:45.180" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""code and get rid of those potential sites of""" start="00:04:46.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""error. So this is the main thing that will be""" start="00:04:49.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""worked on for Emacs 30 and what's looked like""" start="00:04:52.740" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""shaping up for the release.""" start="00:04:55.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And also, he wanted me to announce that""" start="00:04:56.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Stefan Kongas is now a new co-maintainer.""" start="00:04:58.940" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And Stefan is, I believe,""" start="00:05:01.980" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""here with us in the conference and he'll be""" start="00:05:03.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""able, I hope, to help me answer any questions""" start="00:05:05.500" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""about future Emacs development because I'm""" start="00:05:08.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""not in the heat of it and don't have all""" start="00:05:10.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""those answers at the moment.""" start="00:05:12.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So That is all there is as far as a""" start="00:05:14.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""development update for now.""" start="00:05:17.180" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And I am available to take any questions.""" start="00:05:19.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""All right. Thank you so much,""" start="00:05:24.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Sean, for being the messenger of all this""" start="00:05:26.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""good news. I mean, you did start by saying""" start="00:05:29.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""this would not be as exciting,""" start="00:05:31.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""perhaps, as prior releases of Emacs,""" start="00:05:33.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but you then proceeded to say a lot of stuff""" start="00:05:36.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that it felt very exciting to me.""" start="00:05:38.980" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So good, good. Glad to hear that.""" start="00:05:40.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Right. So we do have questions coming in""" start="00:05:44.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""already and again people the link is on IRC""" start="00:05:47.180" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and also on the talks page if you want to""" start="00:05:50.380" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""start asking questions.""" start="00:05:52.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So John what I'm going to do I'm going to""" start="00:05:53.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""read you the questions and then you can""" start="00:05:54.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""answer them. Is that okay with you?""" start="00:05:56.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Absolutely. So starting with the first""" start="00:05:58.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""question which changes in recent Emacs""" start="00:06:01.620" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""releases are you enjoying using?""" start="00:06:04.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I have really liked the visual line mode.""" start="00:06:08.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'm not sure how recent that is.""" start="00:06:13.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Some of these features I only discovered""" start="00:06:15.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""quite late, the new display line number""" start="00:06:16.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""functionality, where it's much,""" start="00:06:19.700" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""much, much faster, and of course,""" start="00:06:21.380" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""native compilation. Native compilation has""" start="00:06:23.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""been quite brilliant for some of the larger""" start="00:06:25.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""packages that I use. I do a lot of stuff in""" start="00:06:27.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs. I use GNU's, I use E-Shell,""" start="00:06:29.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I use Org Mode quite a lot.""" start="00:06:31.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So native compilation has brought the user""" start="00:06:33.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""experience much closer to a modern app than""" start="00:06:36.100" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""some of the lagging and slowness that I might""" start="00:06:39.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""have experienced in the past.""" start="00:06:42.180" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Definitely. Moving on to the next question.""" start="00:06:44.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""What do you think the future in the area of""" start="00:06:47.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""artificial intelligence from the developer""" start="00:06:49.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""point of view? Could you say that 1 more""" start="00:06:51.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""time? Your voice broke up a little bit.""" start="00:06:53.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Oh, sorry. What do you think the future in""" start="00:06:54.876" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""the area of artificial intelligence from the""" start="00:06:55.025" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""developer point of view?""" start="00:06:55.141" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Could you say that 1 more time?""" start="00:06:55.208" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Your voice broke up a little bit.""" start="00:06:55.324" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Oh, sorry. What do you think the future in""" start="00:06:55.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""the area of artificial intelligence from the""" start="00:06:58.100" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""developer point of view?""" start="00:07:00.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""It's also a shaky question,""" start="00:07:01.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I think, but you get the point.""" start="00:07:02.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I do use chat-gpt-shell inside of Emacs quite""" start="00:07:04.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""a bit, actually, when doing development in""" start="00:07:09.220" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""other languages. Just the other day,""" start="00:07:10.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I was working on my Ledger accounting""" start="00:07:12.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""program, and I haven't done a lot of C++ in""" start="00:07:15.220" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""recent years. So I had forgotten how to""" start="00:07:18.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""exactly compare 2 strings only up to the""" start="00:07:21.180" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""length of the shortest string.""" start="00:07:23.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I know I could have cranked that out just""" start="00:07:25.020" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""writing it C style, but I didn't remember""" start="00:07:26.940" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""what the current state of the art is for C++""" start="00:07:28.740" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and the STL. So I just asked chatGPT.""" start="00:07:30.940" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I asked the exact question that I just said""" start="00:07:33.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""to you and sure enough it popped out the""" start="00:07:36.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""one-liner that was exactly what I needed.""" start="00:07:38.220" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So I think in terms of developer assistance,""" start="00:07:40.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""not having to keep all of standard libraries""" start="00:07:42.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""or common idioms in memory.""" start="00:07:45.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I don't know if other people are familiar""" start="00:07:47.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""with Rosetta Stone projects.""" start="00:07:49.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""They're projects where you have say a hundred""" start="00:07:51.460" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""different languages and there's a particular""" start="00:07:53.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""question, say, how do I read a file and copy""" start="00:07:55.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it to another location?""" start="00:07:58.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And then it has an instance of doing that""" start="00:07:59.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""activity for every 1 of those languages.""" start="00:08:01.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""That's a great database,""" start="00:08:04.180" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and I've used them quite a bit in the past""" start="00:08:05.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for remembering how to do certain things,""" start="00:08:07.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""say, converting a string to UTF-8.""" start="00:08:09.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I think that AI does a great job of""" start="00:08:13.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""completely replacing the need for databases""" start="00:08:15.660" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""like that because you can just ask how do I""" start="00:08:17.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""copy a convert a string to UTF-8.""" start="00:08:19.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Yeah exactly and you know especially with""" start="00:08:23.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""languages which are tried well tried you know""" start="00:08:27.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it's very easy to get an answer that is""" start="00:08:30.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""correct. But sometimes what I find bothersome""" start="00:08:32.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""with this type of coding,""" start="00:08:34.940" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I think it's AI-aided coding,""" start="00:08:37.460" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but it's still coding,""" start="00:08:39.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""is that, especially with C languages,""" start="00:08:41.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""sometimes you're going to end up with""" start="00:08:43.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""undefined behaviors and stuff like this just""" start="00:08:44.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because other people have been doing it,""" start="00:08:45.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""not because the algorithm or the model was""" start="00:08:47.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""trained with data that dates back to 10 years""" start="00:08:50.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""ago. At the time, C++ was a little different.""" start="00:08:53.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Anyway, I'm not here to talk,""" start="00:09:00.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""you are here to talk. Moving on to the next""" start="00:09:01.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""question. People already get to hear my voice""" start="00:09:03.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""plenty, whereas yours are much sparser.""" start="00:09:06.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""All right. So, what is the future of Emacs on""" start="00:09:10.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""macOS? I understand that there are too few""" start="00:09:13.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""developers for the platform.""" start="00:09:16.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Is that still true? That's a good question.""" start="00:09:17.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I don't know what the current statistics are.""" start="00:09:21.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I've been a user of Emacs on Mac OS for""" start="00:09:23.620" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""decades now. It feels like the,""" start="00:09:27.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There's also that Mac port version of Emacs,""" start="00:09:30.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""which builds Emacs more directly using the""" start="00:09:33.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""GUI libraries on the platform.""" start="00:09:35.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""That continues to be updated with every""" start="00:09:38.300" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""single new release that comes out.""" start="00:09:40.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So I'd say that the support may not be as""" start="00:09:42.620" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""great as it is on Linux and other platforms,""" start="00:09:45.220" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but to this day I haven't suffered from being""" start="00:09:47.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""a Mac user. Great. The only thing I remember""" start="00:09:50.500" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""about Emacs on macOS was that emojis made it""" start="00:09:55.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""inside the GUI first before they did it""" start="00:10:00.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""anywhere else. That's the 1 anecdote that I""" start="00:10:03.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""have on MacOS. Right. And historically that""" start="00:10:05.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""feature was removed in order to prevent Mac""" start="00:10:09.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""from having features that Linux did not.""" start="00:10:12.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I didn't want to go into that point.""" start="00:10:15.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I just wanted to mention the beginning of the""" start="00:10:16.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""anecdote and people can find it out.""" start="00:10:18.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""But yes, that's also what it led to.""" start="00:10:19.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Moving on to the next question.""" start="00:10:24.020" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Why aren't you contributing to Emacs anymore?""" start="00:10:25.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Lack of time, I guess?""" start="00:10:28.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Lack of time, primarily.""" start="00:10:30.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Work has been very consuming.""" start="00:10:32.300" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""There are a lot of other projects and things""" start="00:10:33.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that I like doing. I still find Emacs Lisp""" start="00:10:36.020" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""very, very fun to write.""" start="00:10:39.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Just the other day, I was hacking up some""" start="00:10:40.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""extension macros for myself for org mode.""" start="00:10:43.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""But to have the time needed to sit down and""" start="00:10:45.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""design a whole new mode and work on it.""" start="00:10:48.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I've been spending a lot of my time now in""" start="00:10:51.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""functional languages, especially theorem""" start="00:10:53.660" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""provers. I just find that so intellectually""" start="00:10:55.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""satisfying and interesting.""" start="00:10:58.100" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Plus it pays a lot better.""" start="00:11:00.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Never had a paying job as an Emacs list""" start="00:11:01.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""developer. So when it comes to now just being""" start="00:11:03.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""a fun language or a hobby language,""" start="00:11:06.420" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it is relegated to the time that I have free""" start="00:11:08.420" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""when it's available. Right.""" start="00:11:10.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Well, the good thing is that it's kind of""" start="00:11:13.700" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""like riding a bicycle,""" start="00:11:15.420" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""you know, writing a major mode,""" start="00:11:16.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it comes back relatively quickly and still""" start="00:11:17.980" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""enjoyable. You know, the other day,""" start="00:11:20.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""actually, I took notes on a mode that I""" start="00:11:22.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""wanted to write. There's an app I use on the""" start="00:11:25.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Mac called drafts, and I really love it.""" start="00:11:28.100" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I use it all the time.""" start="00:11:30.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I wanted to mimic the interface of this app""" start="00:11:31.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in Emacs. So I could use Emacs as my drafts""" start="00:11:34.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""application rather than this separate 1.""" start="00:11:37.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So I noted down all the different user""" start="00:11:40.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""parameters and how it should function and""" start="00:11:42.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""everything to describe the app to myself as""" start="00:11:44.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""sort of notes to get me started on that work""" start="00:11:47.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""when I did have free time to work on it.""" start="00:11:50.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Somebody out there on the internet just saw""" start="00:11:52.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""these notes, because I keep a lot of my stuff""" start="00:11:54.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""on GitHub. They fed it to chat GPT,""" start="00:11:57.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""going back to your AI question.""" start="00:12:00.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And they actually sent back to me a mode that""" start="00:12:02.220" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""implemented everything that I had said,""" start="00:12:04.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""which was effectively,""" start="00:12:06.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""chat GPT, seeing that what I had described""" start="00:12:08.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""was clear enough for it to derive most of the""" start="00:12:10.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""code that I would have wanted to write.""" start="00:12:14.500" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So maybe, maybe another thing that AI can do""" start="00:12:16.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""is it can increase the value,""" start="00:12:19.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""the efficiency of my free time.""" start="00:12:21.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Exactly. I think that's a wonderful point.""" start="00:12:24.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And phrasing it as efficiency of free time is""" start="00:12:27.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""great because you still have the expertise,""" start="00:12:29.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""obviously, that you're mobilizing into the""" start="00:12:31.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""design that you're formulating to charge DPT,""" start="00:12:33.420" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but then this expertise is turned into""" start="00:12:35.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""something that actually works.""" start="00:12:37.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Perhaps we're all going to become software""" start="00:12:40.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""architects at some point,""" start="00:12:41.780" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and then the busy work of actually coding the""" start="00:12:42.980" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""library and the software will be relegated to""" start="00:12:45.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""AI. That's an interesting future where we""" start="00:12:48.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""still, however, need to acquire the skills to""" start="00:12:51.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""know what is code, I suppose.""" start="00:12:55.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""But that's an interesting future to think of.""" start="00:12:56.660" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""A fairly long question.""" start="00:13:00.940" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So 1 of the tricky things about running Emacs""" start="00:13:02.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""on Android is do you use anything that""" start="00:13:04.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""requires extra packages?""" start="00:13:06.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Example like PDF tools with new PDF or going""" start="00:13:08.420" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""with a database, playing music or video with""" start="00:13:11.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""MPD or MPV on Bonga, LFeed.""" start="00:13:13.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Do you run Emacs Termex,""" start="00:13:16.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs APK, Emacs in virtual machine?""" start="00:13:18.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""This is also the case on Emacs for Windows to""" start="00:13:20.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""a lesser degree. So summarizing,""" start="00:13:22.420" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""how do you make Emacs work on Android if you""" start="00:13:24.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""do not have the synergy of stuff that you""" start="00:13:27.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""usually find on Linux systems like MPV and""" start="00:13:30.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""all the fancy applications like this?""" start="00:13:32.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""It's a good question. Since I'm not an""" start="00:13:35.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Android user and I've never tried running""" start="00:13:38.380" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs on Android platforms,""" start="00:13:40.460" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'm not sure what's available out there to""" start="00:13:42.100" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""plug Emacs into. I mean,""" start="00:13:44.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""effectively, that question comes down to""" start="00:13:46.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""external dependencies and system support.""" start="00:13:48.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""That would be a great question for Stefan or""" start="00:13:50.940" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""somebody who has tried using Emacs,""" start="00:13:53.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""the development version of Emacs on Android.""" start="00:13:56.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Great. We'll put a pin in this for Stéphane""" start="00:14:00.660" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""afterwards. Great, so moving on to the next""" start="00:14:04.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""question. Will Org Tech someday become the""" start="00:14:07.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""default tech mode in Emacs?""" start="00:14:09.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And if so, when? Will Org what become?""" start="00:14:11.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Org Tech, you know, the LaTeX mode.""" start="00:14:15.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I do not know. It's been a while since I've""" start="00:14:19.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""done LaTeX. It must have been like 4 years,""" start="00:14:24.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but it was a pretty, the major mode for""" start="00:14:26.880" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""editing documents, like the state of the art""" start="00:14:30.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for editing latex documents in Emacs.""" start="00:14:32.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And apparently it's not default.""" start="00:14:34.940" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I assume there's latex mode or something that""" start="00:14:36.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""is doing it. So were you saying octech,""" start="00:14:38.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""like A-U-C tech? Oh, did I not pronounce the""" start="00:14:41.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""C? Octech, yes. I thought you said org tech.""" start="00:14:45.020" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I wasn't familiar with that.""" start="00:14:48.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Octech is the only 1 I've ever used.""" start="00:14:50.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I know there is a built-in LaTeX mode,""" start="00:14:52.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but I've never used it.""" start="00:14:55.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I always just download whatever the latest""" start="00:14:57.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""version of Org Tech is and use that.""" start="00:14:59.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I don't know why it's not a standard package.""" start="00:15:01.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Becoming a standard package has its own costs""" start="00:15:03.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for the development cycle because it slows""" start="00:15:07.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""down release cycle quite a bit.""" start="00:15:09.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""It's now you have to create PRs that are""" start="00:15:12.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""reviewed by the Emacs Devel mailing list.""" start="00:15:14.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""It is a little more inertia.""" start="00:15:17.620" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Of course, it gets you more distribution""" start="00:15:19.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because it's a default package now,""" start="00:15:21.940" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and everybody can be using that.""" start="00:15:24.020" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""But it's not something every developer""" start="00:15:26.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""decides to do. It took a few years,""" start="00:15:28.660" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""in fact, to get usePackage into Emacs core.""" start="00:15:31.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And that only happened after it was so stable""" start="00:15:34.660" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that it really wasn't receiving many changes""" start="00:15:37.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""anymore. Yeah, yeah it's it's the thing when""" start="00:15:39.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""you move into core you lose a lot of your""" start="00:15:44.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""agility in terms of how you're writing the""" start="00:15:46.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""code or how you expand code.""" start="00:15:49.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""That's why you have this vibrant community on""" start="00:15:51.300" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Melpa compared to core but you know it""" start="00:15:54.220" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""doesn't necessarily ought to be this way it""" start="00:15:57.740" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""could be a little different you know And it""" start="00:15:59.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""feels like there's this repetition between""" start="00:16:02.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""repartition, sorry, between people developing""" start="00:16:04.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for the core of Emacs and people developing""" start="00:16:06.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""on Melpa, but at the end of the day those 2""" start="00:16:08.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""groups are constantly talking to 1 another""" start="00:16:10.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and taking cues from 1 another as well.""" start="00:16:13.180" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So that's great. And there's of course...""" start="00:16:15.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""May I jump in about this particular question""" start="00:16:18.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because I think I mean You know,""" start="00:16:21.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Org Mode doesn't really have any problems""" start="00:16:25.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""with releases Correct.""" start="00:16:27.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Just because it's distributed with Emacs so""" start="00:16:29.380" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""there is a difference between being in the""" start="00:16:32.860" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""core proper and being distributed with Emacs.""" start="00:16:35.020" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And for something like use packages,""" start="00:16:38.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it's really necessary to be in the core.""" start="00:16:40.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""But for something like major mode,""" start="00:16:42.600" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it's a bit easier. That's a very very good""" start="00:16:45.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""point. Yeah, I'd forgotten about that""" start="00:16:48.740" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""distinction. Org mode does advance pretty""" start="00:16:50.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""rapidly and then it makes releases into the""" start="00:16:53.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""core distribution. Gianni,""" start="00:16:55.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I believe you also wanted to say something""" start="00:16:59.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""before someone started jumped in with a""" start="00:17:01.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""question do you happen to remember okay""" start="00:17:03.840" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that's fine I lost her to lost to their time""" start="00:17:08.700" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'll be moving on to the next question then""" start="00:17:12.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and by the way feel free to interrupt us you""" start="00:17:15.700" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""know The whole point of this discussion is""" start="00:17:17.460" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""for you to ask questions to John Wheatley.""" start="00:17:19.619" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So whether it be via the other pad or via""" start="00:17:21.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""BBB, choose your weapon.""" start="00:17:23.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""All right, moving on to the next question in""" start="00:17:27.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""the meantime. And we have about 7 minutes""" start="00:17:28.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""left of Q&A and then we'll be moving on to""" start="00:17:30.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Stéphane. So, do you use other IDEs for""" start="00:17:32.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""theorem proving work, notably VS Code for""" start="00:17:35.780" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Lean? Which languages and provers can or do""" start="00:17:38.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""you use Emacs for? I've only used Emacs.""" start="00:17:42.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I've used Emacs for working with ACL 2,""" start="00:17:46.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Coq, Agda, and Lean, and I really love""" start="00:17:49.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Proof-General. Coq is my favorite language to""" start="00:17:53.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""be working in. Agda has really great support""" start="00:17:55.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""as well, has a very nice Emacs mode.""" start="00:17:57.740" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'm only just now starting to get into Lean""" start="00:17:59.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""4. So I have everything installed,""" start="00:18:02.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but I haven't really started coding in""" start="00:18:05.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""earnest. I'm still reading a lot of the""" start="00:18:07.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""tutorials and learning a bit about the""" start="00:18:08.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""language. There was a while there where I""" start="00:18:10.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""used a IDE for ACL 2 that was outside of""" start="00:18:13.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Emacs, only because it was the same IDE all""" start="00:18:17.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""my co-workers were using and it was easier to""" start="00:18:19.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""share tips and tricks with them.""" start="00:18:22.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""But yeah, no, I found Emacs to be a great""" start="00:18:24.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""home for doing theorem proving.""" start="00:18:28.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Right. Next question. Can we see that AI""" start="00:18:32.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""generated draft? You know what you mentioned""" start="00:18:36.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""before about the draft that you then fed into""" start="00:18:40.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""ChargPT? Do you happen to have this draft""" start="00:18:43.420" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""anywhere? Let me see if it's still on GitHub.""" start="00:18:45.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Just take me 1 second to take a look here.""" start="00:18:51.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Take your time. The problem is I don't quite""" start="00:18:55.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""remember where I made the note.""" start="00:18:59.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""But no, I don't see it on GitHub,""" start="00:19:04.700" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""so I don't have it readily at hand.""" start="00:19:07.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Well, that's fine. We'll be able to...""" start="00:19:10.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Well, if you happen to find it,""" start="00:19:13.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""we'll make sure to add it on the pad and then""" start="00:19:15.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""on the talks page. And I think we would all""" start="00:19:17.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""be interested to see what this design""" start="00:19:20.940" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""document that actually made something work""" start="00:19:22.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""afterwards in JudgeDPT with Elisp.""" start="00:19:27.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'm very interested to see what it would do""" start="00:19:28.980" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because I tend to be very interested about""" start="00:19:30.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""this type of stuff I had generated but I""" start="00:19:32.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""never thought about doing it with Elisp""" start="00:19:34.780" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""because somehow it feels like 2 different""" start="00:19:37.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""worlds, like Elisp is kind of from the past,""" start="00:19:39.000" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""don't going me wrong, I love it and I use it""" start="00:19:41.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""every day But it's 2 different parts of my""" start="00:19:44.140" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""brain that I didn't think about linking.""" start="00:19:46.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So I'd be very excited to see this as well.""" start="00:19:48.820" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Moving on to the next question.""" start="00:19:53.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Oh, go on, please. I did find it.""" start="00:19:54.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'm gonna have to give it to you as a link""" start="00:19:57.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""here. Sure, you can do it on the blue button""" start="00:20:01.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and I'll put it on the pad.""" start="00:20:03.380" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I put it into the public chat for Bibi.""" start="00:20:10.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Yes. So if anyone is interested,""" start="00:20:12.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'm putting it right in the answer to the""" start="00:20:15.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""question right here on my screen.""" start="00:20:18.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So feel free to click on it and explore it.""" start="00:20:20.200" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'm kind of curious, so I'm gonna...""" start="00:20:22.120" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Can I click it on stream and can we look at""" start="00:20:23.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""it a little bit together?""" start="00:20:25.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Sure, sure. I haven't tried running it,""" start="00:20:26.740" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I can't say for its fitness,""" start="00:20:29.020" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but it's definitely enough of the groundwork""" start="00:20:31.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""done that it's absolutely an assistance.""" start="00:20:34.400" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Right. Okay, so it's loading up right now?""" start="00:20:38.100" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""You can see my webcam,""" start="00:20:41.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""right? I can see your browser attempting to""" start="00:20:42.620" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""load. There we go. Okay,""" start="00:20:45.680" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""cool. So I'm not sure what GitHub is doing.""" start="00:20:47.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Let me give it a little more room.""" start="00:20:50.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""The reactive setup is not working too well.""" start="00:20:51.460" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Oh, I see. You're viewing the...""" start="00:20:57.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I see. Can I see the file then?""" start="00:20:59.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I should be able to see the file.""" start="00:21:02.220" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I think he just mentions the code in that""" start="00:21:06.460" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""comment. So if there's a way to view only the""" start="00:21:09.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""comment it would make it clear.""" start="00:21:11.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Right. Okay. I'm loading the file separately.""" start="00:21:14.897" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""I'm checking the time.""" start="00:21:17.320" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""We have about 3 minutes left and I think we""" start="00:21:18.740" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""have a question. In the meantime,""" start="00:21:21.340" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""whilst I show this, I'm gonna launch another""" start="00:21:22.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""question, which was about Drafts.""" start="00:21:25.760" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""You are carrying, you're talking about""" start="00:21:29.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Drafts, but does that mean you're not using""" start="00:21:30.740" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""org anymore? Oh, no, I use org all the time.""" start="00:21:32.480" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""In fact, the way that I've configured drafts""" start="00:21:35.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""is that after I type the thing in the note""" start="00:21:38.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""into drafts, I hit a key and it creates an""" start="00:21:40.580" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""org mode capture item for it.""" start="00:21:43.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""The reason why I use Drafts instead of Emacs""" start="00:21:45.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""is because it's always available.""" start="00:21:48.560" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""If Emacs is currently doing some job for me,""" start="00:21:51.100" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""say I'm running some long-running subshell""" start="00:21:53.960" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and the UI is frozen up whatnot,""" start="00:21:57.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Drafts is always 100% of the time instantly""" start="00:21:59.700" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""available. So that's why I tend to then lean""" start="00:22:02.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""on it a bit, but all of the destination of""" start="00:22:04.900" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that data is still Org Mode and everything""" start="00:22:07.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that I do gets tracked through Org Mode.""" start="00:22:10.240" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""That's also why I wanted to implement the UI""" start="00:22:13.080" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""scheme of drafts in Emacs so that I could""" start="00:22:16.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""drop the use of this external application.""" start="00:22:18.800" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And then, I mean, I would still have the""" start="00:22:21.540" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""problem of sometimes Emacs being unavailable,""" start="00:22:23.160" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but I would pay that price in order to have""" start="00:22:26.060" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""that good UI of drafts inside Emacs.""" start="00:22:30.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Great. I think we have,""" start="00:22:34.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""we might be too tight on time.""" start="00:22:38.420" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""We only have about 2 minutes and I need to""" start="00:22:39.720" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""jump room to go into Stephane's room as well.""" start="00:22:41.640" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So John, where I get to thank you so much for""" start="00:22:44.440" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""taking the time to answer our questions,""" start="00:22:47.380" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""but also doing a little bit of reporting on""" start="00:22:53.260" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""the state of Emacs. And now we'll get to""" start="00:22:55.040" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""continue this with Stéphane.""" start="00:22:58.380" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""So do you have any last words for everyone,""" start="00:22:59.280" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""John? No, no. I look forward to hearing""" start="00:23:01.300" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Stéphane speak. Okay, great.""" start="00:23:03.660" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""And we'll look forward,""" start="00:23:06.420" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""potentially, to having you again next year,""" start="00:23:07.360" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""potentially still doing news like this,""" start="00:23:10.520" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""and, fingers crossed, maybe having you live""" start="00:23:12.980" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""again. Maybe, maybe let's see what happens.""" start="00:23:15.920" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""All right, John. Thank you so much.""" start="00:23:19.700" video="mainVideo-devel" id="subtitle"]]
+[[!template text="""Bye bye. Bye bye.""" start="00:23:20.860" video="mainVideo-devel" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20devel%3A%20Emacs%20development%20updates)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/devel-before.md b/2023/info/devel-before.md
new file mode 100644
index 00000000..5429f360
--- /dev/null
+++ b/2023/info/devel-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 24-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="devel-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 23:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/57HSebb9a9JZynh2B3ehze">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/devel-nav.md b/2023/info/devel-nav.md
new file mode 100644
index 00000000..451e821f
--- /dev/null
+++ b/2023/info/devel-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/unentangling">(Un)entangling projects and repos</a>
+Next by track: <a href="/2023/talks/core">Emacs core development: how it works</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/doc-after.md b/2023/info/doc-after.md
new file mode 100644
index 00000000..7df3351e
--- /dev/null
+++ b/2023/info/doc-after.md
@@ -0,0 +1,1189 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="doc-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Hello, everyone.""" start="00:00:00.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This talk is on literate documentation""" start="00:00:04.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""with Emacs and org-mode.""" start="00:00:07.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I'm going to take just a moment here""" start="00:00:10.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to unpack what I just said.""" start="00:00:12.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Emacs, as most of us probably already know,""" start="00:00:14.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""is a powerful text editor and list programming environment""" start="00:00:17.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""from the 1970s.""" start="00:00:21.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Chances are, if you're attending this talk,""" start="00:00:23.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you already know a bit about Emacs.""" start="00:00:25.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""org-mode is an Emacs major mode and authoring tool""" start="00:00:28.820" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that helps you write documents in a plain text markup""" start="00:00:32.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""language called Org.""" start="00:00:36.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""These Org documents can be exported""" start="00:00:37.740" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to a number of different document formats,""" start="00:00:40.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""like HTML, PDF, ODT, Markdown, and more.""" start="00:00:42.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""org-mode has a lot of features.""" start="00:00:48.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""It can be an outliner, a to-do list manager,""" start="00:00:51.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""an agenda, organizer, and much more.""" start="00:00:54.240" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Org Babel and literate programming""" start="00:00:57.760" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Today, we're going to be demonstrating""" start="00:00:57.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""what I consider to be org-mode's killer feature called""" start="00:00:59.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Org Babel.""" start="00:01:03.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Babel allows you to take human language prose,""" start="00:01:04.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""computer language source code blocks, and their outputs""" start="00:01:07.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and weave them together seamlessly""" start="00:01:11.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to form a cohesive document.""" start="00:01:13.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""It is seriously cool.""" start="00:01:16.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Literate documentation is a play on the term""" start="00:01:19.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""literate programming, popularized by Donald Knuth""" start="00:01:21.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in the early 1980s.""" start="00:01:25.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Knuth's literate programming idea""" start="00:01:27.380" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""was that computer programs could be""" start="00:01:29.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""expressed in a natural language and be""" start="00:01:31.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""human-readable documents rather than written exclusively""" start="00:01:34.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""for machines to read.""" start="00:01:38.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""In a traditional program, you might""" start="00:01:40.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""have a bunch of machine-readable source code""" start="00:01:43.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and a handful of human-readable comments,""" start="00:01:45.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which attempt to describe what the program is doing.""" start="00:01:48.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Literate programming flips this on its head.""" start="00:01:51.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""A literate program is a document that""" start="00:01:54.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""describes how the program works with machine-readable source""" start="00:01:56.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""code blocks inside of it.""" start="00:02:01.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""These source code blocks are later""" start="00:02:02.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""tangled out of the document and submitted to the machine""" start="00:02:04.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""either to be compiled or interpreted and ultimately run.""" start="00:02:08.440" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""This presentation""" start="00:02:14.080" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Throughout this presentation, you'll""" start="00:02:14.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""see my browser window here on the left side of the screen.""" start="00:02:15.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And on the right side, I've got a terminal session""" start="00:02:19.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""running tmux.""" start="00:02:22.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This allows us to have a virtual terminal window connected""" start="00:02:23.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to two separate Linux machines, one running Ubuntu Server 2204""" start="00:02:28.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and another running Fedora Server 38.""" start="00:02:35.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I've specifically chosen these two distributions for my demo""" start="00:02:39.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because they are representative of the two dominant flavors""" start="00:02:43.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of GNU Linux, Debian and RedHat.""" start="00:02:46.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""In both cases, these are bare-bones server additions""" start="00:02:49.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""with the stock packages installed.""" start="00:02:53.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I've manually installed a few packages like Git, emacs-noex""" start="00:02:55.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to get the terminal version of emacs, and tmux.""" start="00:03:00.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""But otherwise, these Linux installs""" start="00:03:04.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""are what you'd get right out of the box.""" start="00:03:06.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""For this demo, I've created a literate org-mode document""" start="00:03:08.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that describes how to build GNU Emacs from its source code""" start="00:03:12.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on both Debian and RedHat-based systems.""" start="00:03:16.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""While both operating systems are very similar,""" start="00:03:19.940" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""they differ substantially on which packages""" start="00:03:22.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""are installed out of the box, how optional packages are""" start="00:03:25.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""named, searched, and installed, and of course,""" start="00:03:29.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the distributions have different names,""" start="00:03:32.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""like Ubuntu or Fedora.""" start="00:03:34.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I chose building Emacs from source""" start="00:03:36.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""as a topic for this demonstration""" start="00:03:39.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because while the process is largely""" start="00:03:41.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the same on both RedHat and Debian,""" start="00:03:43.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""there are a lot of minor little differences""" start="00:03:46.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that need to be accounted for, which really prohibits you""" start="00:03:49.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""from hard coding names of packages and package management""" start="00:03:52.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""tools and distributions into your document.""" start="00:03:57.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I suppose you could create two versions of the same document,""" start="00:04:01.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""one specifically for RedHat and one specifically for Debian,""" start="00:04:05.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but that would be really tedious to maintain.""" start="00:04:09.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Like if, for example, you updated some prose""" start="00:04:13.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in one document, you'd have to remember""" start="00:04:16.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to do it in the other one too.""" start="00:04:18.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And if you weren't careful, the two documents""" start="00:04:20.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""could drift out of sync.""" start="00:04:22.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""In this demo, I'll show you techniques""" start="00:04:25.260" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""for creating dynamic, literate documents that""" start="00:04:27.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""can change based on parameters and constants embedded""" start="00:04:30.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""into the non-exported regions of the document.""" start="00:04:34.620" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I'll show how with a single org-mode source document,""" start="00:04:38.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you can press a couple of keys to configure""" start="00:04:41.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""it to export a RedHat-specific version of my building""" start="00:04:44.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Emacs from source essay or a Debian-specific version.""" start="00:04:48.720" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Getting started""" start="00:04:53.480" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""All right, let's get started.""" start="00:04:53.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll begin by firing up a new terminal Emacs session""" start="00:04:55.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on my Ubuntu machine.""" start="00:04:58.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now, I installed Emacs on this machine using apt-get.""" start="00:05:00.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And doing that, you get version 27.1,""" start="00:05:04.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which is, hey, only two major versions""" start="00:05:07.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""behind the current version of Emacs.""" start="00:05:10.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This is another reason why I thought""" start="00:05:13.011" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""writing a guide on how to build Emacs from source code""" start="00:05:15.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""might be a good idea.""" start="00:05:18.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""You can get a much newer version of Emacs on Ubuntu""" start="00:05:19.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""if you install it via Snap, but, uh, Snaps.""" start="00:05:22.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Don't get me started.""" start="00:05:25.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now, I wanted to use a completely vanilla""" start="00:05:28.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""terminal mode install of Emacs for this demonstration""" start="00:05:30.922" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because my personal Emacs config has a ton of packages""" start="00:05:34.620" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""installed and is heavily modified.""" start="00:05:38.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I want folks to be able to follow along""" start="00:05:41.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""with a bog-standard, out-of-the-box Emacs config.""" start="00:05:43.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The Emacs config on this Ubuntu machine""" start="00:05:47.580" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""has just two settings.""" start="00:05:49.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I require org-tempo because my fingers are hardwired""" start="00:05:51.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to use some of the handy shortcuts that it provides.""" start="00:05:55.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And I also turn off the menu bar""" start="00:05:58.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because I just can't stand to look at it.""" start="00:06:00.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Let's begin by opening a file called buildemacs.org,""" start="00:06:03.140" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which will be the source code""" start="00:06:07.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""for our literate org-mode document.""" start="00:06:08.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now, in preparation for this talk,""" start="00:06:11.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I've already written this document,""" start="00:06:12.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and we'll take a look at the finished product""" start="00:06:14.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""here in a bit, but let's first take a look""" start="00:06:17.980" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""at how we might approach this task.""" start="00:06:19.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll start at the top of the document""" start="00:06:22.409" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""by filling out some export keywords.""" start="00:06:24.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""These keywords are something that every backend exporter,""" start="00:06:27.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""be it LaTeX or plain text or ODT or whatever, understands,""" start="00:06:30.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and they're essentially document metadata.""" start="00:06:35.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""As you can see, I'm typing `#+`""" start="00:06:38.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""followed by a couple characters""" start="00:06:42.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then `M-TAB` to auto-complete.""" start="00:06:43.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If you hit #+ by itself and then M-TAB,""" start="00:06:45.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you can see all the possible completions.""" start="00:06:50.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And as you can see, there's a lot.""" start="00:06:53.120" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""README""" start="00:06:55.780" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""The next thing we're gonna do is make a README section""" start="00:06:55.780" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""at the top of this document.""" start="00:06:58.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This section is intended for folks""" start="00:06:59.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""who are looking at the org-mode document,""" start="00:07:02.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""trying to figure out what it's for.""" start="00:07:04.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We don't want to actually export the section heading,""" start="00:07:06.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""so we're gonna tag it with the :noexport: tag.""" start="00:07:09.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then here, we just write something quick""" start="00:07:13.860" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to let folks know that this document""" start="00:07:15.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""can potentially execute code""" start="00:07:17.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and just a little something about what the document is for.""" start="00:07:19.800" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Writing a code block""" start="00:07:23.500" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Okay, so now that we've written some text,""" start="00:07:23.500" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""let's try our hand at writing a code block.""" start="00:07:26.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I'm getting pretty sick of looking at""" start="00:07:29.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the default Emacs theme.""" start="00:07:31.289" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""All that blue and purple in the document""" start="00:07:32.940" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""makes it look bruised.""" start="00:07:35.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Let's make an Emacs Lisp code block""" start="00:07:37.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that switches the theme""" start="00:07:40.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to one of my favorite built-in themes, Leuven.""" start="00:07:41.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Leuven was created by my man, Fabrice Niessen,""" start="00:07:44.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""who I personally have learned a ton of org-mode stuff about""" start="00:07:48.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""just by studying his work.""" start="00:07:52.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now, if we cruise back up to the code block,""" start="00:07:54.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we should be able to hit `C-c C-c`,""" start="00:07:56.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and have it execute.""" start="00:07:58.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And there you have it, a high-contrast color theme""" start="00:08:00.380" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that was designed to look great in org-mode.""" start="00:08:03.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So that's great and all,""" start="00:08:06.980" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but there are a couple of things I don't like.""" start="00:08:08.080" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text=""":results none""" start="00:08:10.460" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""First of all, we don't need to see a #+RESULTS block here,""" start="00:08:10.460" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and that's because we're not really interested""" start="00:08:13.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in what the Emacs Lisp function `load-theme` returns.""" start="00:08:15.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I mean, it's great it returned t and all to indicate success,""" start="00:08:18.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we just don't need to see it.""" start="00:08:22.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We can slap a `:results none` header arg""" start="00:08:23.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on the code block to keep things nice and clean.""" start="00:08:26.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""There are a lot of different header args,""" start="00:08:30.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and I often confuse and misremember them.""" start="00:08:32.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So I'll always refer back to the org-mode manual""" start="00:08:35.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""when working with them.""" start="00:08:38.920" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Confirmation""" start="00:08:40.320" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""The second thing I don't like is that""" start="00:08:40.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""when we hit C-c C-c to execute the block,""" start="00:08:42.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Emacs prompted us if we really wanted to run the block.""" start="00:08:46.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Emacs Lisp is Emacs' mother tongue,""" start="00:08:49.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and I don't wanna be hassled when speaking""" start="00:08:52.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""my native language.""" start="00:08:53.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""There's a variable that controls this""" start="00:08:55.380" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""called `org-confirm-babel-evaluate`.""" start="00:08:57.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And this can be either set to t or nil""" start="00:09:00.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to either always confirm or never confirm.""" start="00:09:03.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If however, you provided a lambda, an anonymous function,""" start="00:09:06.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Org will call your function with the name of the language""" start="00:09:10.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and the source block that it's about to run.""" start="00:09:14.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And your function can make the decision""" start="00:09:16.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""about if Emacs should ask you for confirmation or not.""" start="00:09:19.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""What I'm doing here is setting `org-confirm-babel-evaluate`""" start="00:09:24.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""as a &quot;file local variable&quot;.""" start="00:09:27.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This means whenever the file is opened by Emacs,""" start="00:09:30.540" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""it'll set this variable to be a lambda that returns nil,""" start="00:09:33.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""meaning don't confirm, on Elisp code blocks.""" start="00:09:38.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""As you can see, the variable is currently set""" start="00:09:42.860" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to its default value of t, meaning always confirm.""" start="00:09:45.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now if we save the buffer, exit Emacs,""" start="00:09:50.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and pop back in again,""" start="00:09:53.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""`org-confirm-babel-evaluate` should be set how we like it.""" start="00:09:55.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We were however prompted for confirmation""" start="00:10:00.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on setting the file-local variable,""" start="00:10:02.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which controls if we're prompted""" start="00:10:04.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""for Elisp source code block evaluation.""" start="00:10:06.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I feel like there's a Yo Dawg joke here somewhere.""" start="00:10:09.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""When we were prompted, we hit the exclamation mark,""" start="00:10:12.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which automatically marks this variable as being safe.""" start="00:10:15.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So you won't be bothered the next time you open this file.""" start="00:10:18.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This variable is called `safe-local-variable-values`""" start="00:10:21.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and if we pop over to our .emacs file,""" start="00:10:26.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you can see that Emacs' customize tooling""" start="00:10:29.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""helpfully updated this variable in our config file for us.""" start="00:10:32.520" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Running blocks automatically""" start="00:10:36.960" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Now that's great and all,""" start="00:10:36.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but I really don't like having to hit `C-c C-c`""" start="00:10:38.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on that source block every time I open this document""" start="00:10:42.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""just to bring up the Leuven theme.""" start="00:10:45.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Let's have this source block run automatically""" start="00:10:47.740" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""every time the document is opened.""" start="00:10:50.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now I know what you're thinking.""" start="00:10:53.180" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Shouldn't you just put all of this configuration stuff""" start="00:10:55.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in your .emacs file and keep it out of the document?""" start="00:10:57.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Well, that's what I've done with my personal Emacs config,""" start="00:11:01.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but we want this document to be able to be used by folks""" start="00:11:04.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""with a completely vanilla Emacs setup,""" start="00:11:08.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""or even a completely tricked out Emacs setup,""" start="00:11:11.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""so we can't assume anything.""" start="00:11:13.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The idea is if the Emacs user who opens the document""" start="00:11:16.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""agrees to setting all of the variables""" start="00:11:19.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and running all of the code within,""" start="00:11:22.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""they'll be able to export the document""" start="00:11:24.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""as well as run all of the code blocks inside of it""" start="00:11:26.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""just as we intended.""" start="00:11:28.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And the differences in base Emacs configuration""" start="00:11:30.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""will be completely minimized.""" start="00:11:33.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now it's worth pointing out that the file-local variables""" start="00:11:35.980" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we're setting here are local, in this case, buffer-local.""" start="00:11:39.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The configuration we use in this document""" start="00:11:43.024" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""won't override someone's carefully constructed""" start="00:11:45.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""org-mode setup.""" start="00:11:48.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The first thing we're gonna wanna do""" start="00:11:49.500" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in order to make this block execute""" start="00:11:51.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""when the document is loaded is to give it a name.""" start="00:11:53.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""It's always a good idea to give every source block""" start="00:11:55.989" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you create in your document a unique name,""" start="00:11:58.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""even if you don't refer to it elsewhere.""" start="00:12:01.338" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I do this because when I'm debugging my documents,""" start="00:12:03.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Emacs will prompt me about running a block.""" start="00:12:07.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If the block has a name, Emacs mentions it,""" start="00:12:10.020" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and I know there's a problem with the result caching""" start="00:12:12.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""or something with the &quot;foo&quot; block.""" start="00:12:15.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""But if the block doesn't have a name,""" start="00:12:17.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""it can be really hard to figure out""" start="00:12:20.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which block Emacs is complaining about.""" start="00:12:22.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So I always name my blocks.""" start="00:12:24.580" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now we're gonna add another file local variable,""" start="00:12:27.460" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but this one is special.""" start="00:12:30.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If your &quot;variable&quot;""" start="00:12:32.116" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""just happens to be named &quot;eval&quot;,""" start="00:12:34.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""it means that Emacs should evaluate""" start="00:12:36.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the Lisp expression that follows.""" start="00:12:38.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Here we'll use the progn function""" start="00:12:40.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to sequentially run two elisp functions""" start="00:12:43.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and return the value of the last one executed.""" start="00:12:46.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The first function is `org-babel-goto-named-source-block`,""" start="00:12:48.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which jumps us to the startup block.""" start="00:12:53.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The second one is `org-babel-execute-src-block`,""" start="00:12:55.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which executes the current source block.""" start="00:12:59.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""That should get the job done.""" start="00:13:02.093" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now all we have to do is save the document,""" start="00:13:03.631" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""exit Emacs, jump back in,""" start="00:13:05.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and once we've confirmed that we're willing""" start="00:13:08.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to run the new &quot;eval&quot; line in our file local variables,""" start="00:13:10.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we're good to go.""" start="00:13:14.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now if we want to add new configuration stuff""" start="00:13:15.860" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to the document, we can just add it to the startup block""" start="00:13:18.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and not have to muck about with confirmations""" start="00:13:21.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""or adding new file-local variables or whatever.""" start="00:13:24.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And just like before, we'll let Emacs' customize system""" start="00:13:28.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""save this decision to our .emacs file.""" start="00:13:31.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now that all that business with confirmations,""" start="00:13:34.940" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""file-local variables, and the startup block""" start="00:13:37.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""are out of the way,""" start="00:13:40.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we can get on with writing our introduction.""" start="00:13:41.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll create a new top level headline called introduction""" start="00:13:44.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and explain to the reader of the exported document""" start="00:13:47.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""what this is all about.""" start="00:13:51.440" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Export options""" start="00:13:53.000" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Now as you can see, we've actually hard-coded""" start="00:13:53.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the name of the Linux distro in our prose.""" start="00:13:55.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I promised you a single document that could be""" start="00:13:58.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""for either RedHat or Debian distros,""" start="00:14:00.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""so we can't have this.""" start="00:14:03.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Astute members in the audience have probably been uneasy""" start="00:14:05.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""ever since I hard coded the name &quot;Debian&quot;""" start="00:14:08.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in the README section above.""" start="00:14:11.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""One way of solving this problem is by using exclude tags.""" start="00:14:13.860" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Let's add the `#+EXCLUDE_TAGS` export keyword to our document.""" start="00:14:17.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This keyword tells the exporter,""" start="00:14:21.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""&quot;Hey, if you see a headline tagged with any of these tags,""" start="00:14:24.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""don't export it.&quot;""" start="00:14:27.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""By default, the tag `:noexport:` is excluded.""" start="00:14:29.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And if you'll notice, we tagged our README section""" start="00:14:33.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""with that tag, so it doesn't show up""" start="00:14:36.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in the exported document.""" start="00:14:38.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll keep this tag in the list,""" start="00:14:40.340" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but we'll also add the tag `:redhat:` as a tag to exclude.""" start="00:14:42.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now it's just a matter of creating two introduction""" start="00:14:47.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""sections, one for Debian, one for RedHat.""" start="00:14:50.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And if you want the RedHat version of the document,""" start="00:14:53.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you can just modify the `#+EXCLUDE_TAGS` line""" start="00:14:56.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""at the top of the document.""" start="00:14:59.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Awesome, right?""" start="00:15:00.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Right?""" start="00:15:02.340" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""OK, this is not that great.""" start="00:15:03.540" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Well, it does work.""" start="00:15:05.545" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And you can see if we export the document,""" start="00:15:07.388" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we'll get something that only references Debian,""" start="00:15:10.082" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and the `:noexport:` and `:redhat:`""" start="00:15:12.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""tagged headlines are omitted.""" start="00:15:15.189" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This strategy would work great""" start="00:15:17.451" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""when the RedHat- and Debian-specific sections""" start="00:15:19.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""are substantially different, but that's not""" start="00:15:22.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the case with the introduction.""" start="00:15:24.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We definitely don't want to have to maintain""" start="00:15:26.199" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""two distinct introductions.""" start="00:15:28.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I also noticed that the export tags are included""" start="00:15:30.825" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in the exported document.""" start="00:15:34.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""That's a terrible default. We'll fix that,""" start="00:15:36.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and we'll also ensure that my email address appears""" start="00:15:38.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""at the top of the document.""" start="00:15:42.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Let's also take this opportunity to get rid""" start="00:15:43.372" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of the table of contents.""" start="00:15:45.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We don't need it.""" start="00:15:47.355" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""These are all export option settings""" start="00:15:48.868" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and can be modified using the options keyword""" start="00:15:51.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""at the top of the doc.""" start="00:15:53.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The manual is really your friend here,""" start="00:15:55.509" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""as there are a ton of export options.""" start="00:15:57.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now when we export the document again,""" start="00:16:00.980" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""it should look a lot better.""" start="00:16:03.120" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Substituting constants""" start="00:16:05.700" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Now that we've cleaned up the look of the exported document,""" start="00:16:05.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we'll take a look at a better way""" start="00:16:09.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of solving the problem with the introduction.""" start="00:16:10.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Thinking like a programmer for a moment,""" start="00:16:13.378" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""what I really want here is a way of specifying a constant.""" start="00:16:15.519" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Rather than hard-coding the name &quot;Debian&quot; or &quot;RedHat&quot;""" start="00:16:19.735" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""or whatever into my document,""" start="00:16:22.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I want to substitute that text with a symbolic constant,""" start="00:16:24.570" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""named something like &quot;distro&quot;, that can dynamically change""" start="00:16:28.235" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to &quot;Debian&quot; or &quot;RedHat&quot; or &quot;Slackware&quot; or whatever,""" start="00:16:31.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""depending on how the document is configured.""" start="00:16:36.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""In the past, I've come up with some pretty cumbersome ways""" start="00:16:38.690" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of doing this, but eventually I stumbled upon the idea""" start="00:16:41.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of using Org-mode properties""" start="00:16:44.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""as a way of storing these constants.""" start="00:16:46.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Like it says in the docs, properties are key-value pairs""" start="00:16:49.410" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that are associated with an entry""" start="00:16:53.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and they live in a collapsible properties drawer.""" start="00:16:55.170" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Let's do a bit of cleanup on our document""" start="00:16:58.380" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and we'll put things into sections.""" start="00:17:00.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll also add a section for document constants.""" start="00:17:02.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And that's where we'll put the properties drawer""" start="00:17:14.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""with the &quot;distro&quot; property.""" start="00:17:19.560" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Getting the properties""" start="00:17:25.740" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Now the question is,""" start="00:17:25.740" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""how do we reference these properties in the document?""" start="00:17:27.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""It turns out there's an Elisp function""" start="00:17:30.100" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""called `org-property-values`, which does what we want.""" start="00:17:32.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If we run it and give it the name of our property,""" start="00:17:35.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""it returns a list with the string &quot;Debian&quot; in it.""" start="00:17:38.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""It's worth noting that this function is named""" start="00:17:42.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""`org-property-values` with values being plural.""" start="00:17:45.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""In org-mode, there could be a property named &quot;foo&quot;""" start="00:17:49.990" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that has different values depending on which heading level""" start="00:17:52.890" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you're at in the document,""" start="00:17:55.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which is why the function returns a list.""" start="00:17:57.610" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""For our purposes though,""" start="00:17:59.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we can just pull off the first value in the list with car""" start="00:18:01.290" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and we're good to go.""" start="00:18:04.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now we'll make an Emacs Lisp list function called `get_prop`""" start="00:18:05.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that does just that.""" start="00:18:10.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This function takes one argument called `prop`,""" start="00:18:11.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which is the property to look up""" start="00:18:14.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and we'll give it a default value of &quot;distro&quot;.""" start="00:18:15.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So we can hit `C-c C-c` on the block""" start="00:18:18.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to verify that it works.""" start="00:18:20.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now we just have to make an inline call""" start="00:18:23.150" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to our `get_prop` function""" start="00:18:25.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""within the prose of the introduction section.""" start="00:18:26.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And that should get us much closer""" start="00:18:29.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to not hard coding distro names into our document.""" start="00:18:31.660" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""But before we do that,""" start="00:18:35.620" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I need to clean up something that's been bothering me.""" start="00:18:36.870" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""By default, Emacs' `fill-column` variable""" start="00:18:39.850" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""is set to 70 characters,""" start="00:18:42.910" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which may have been appropriate for 1970,""" start="00:18:44.990" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but it's not great for 2023.""" start="00:18:47.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll just cruise up to our startup block""" start="00:18:51.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and set the variable there.""" start="00:18:53.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll hit `C-c C-c`,""" start="00:18:56.540" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and now our document will wrap at 100 columns,""" start="00:18:58.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which for our purposes, I think is much more reasonable.""" start="00:19:02.290" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The org-mode syntax for making an inline function call""" start="00:19:05.830" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""within the prose of your document is `call_`,""" start="00:19:09.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""followed by the name of the function,""" start="00:19:13.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""some optional header arguments,""" start="00:19:15.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then the function arguments.""" start="00:19:17.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now, when we export the document,""" start="00:19:19.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we see that it's replaced our previously hard coded &quot;Debian&quot;""" start="00:19:21.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""with the value from the property. Huzzah!""" start="00:19:26.050" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now this is close to, but not exactly what we want.""" start="00:19:29.410" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""You can see that &quot;Debian&quot; is surrounded by a backtick""" start="00:19:32.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and a single quote,""" start="00:19:36.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which is the plain text exporters way""" start="00:19:37.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of showing you verbatim text.""" start="00:19:40.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""In more sophisticated document backends,""" start="00:19:43.030" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""verbatim text is rendered in monospace.""" start="00:19:45.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We can fix that by adding a &quot;:results raw&quot; header argument""" start="00:19:49.380" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to the inline call.""" start="00:19:54.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now, when we export the document,""" start="00:19:56.460" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""it looks like what we'd expect.""" start="00:19:58.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now this is getting better, but it's still not great.""" start="00:20:00.290" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Macros""" start="00:20:03.060" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""The `call_` syntax is pretty cumbersome,""" start="00:20:03.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and it's a lot to type every time we want""" start="00:20:05.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to reference a constant""" start="00:20:08.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and not have it be marked up as verbatim.""" start="00:20:09.850" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This is where org-mode macros come to our rescue.""" start="00:20:13.220" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If we head to the top of the document,""" start="00:20:17.170" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we can create a couple of macros""" start="00:20:19.470" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""using the `#+MACRO:` export keyword.""" start="00:20:21.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll define two macros with short names.""" start="00:20:24.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""One named &quot;p&quot; for &quot;property&quot;,""" start="00:20:27.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and the other one named &quot;pr&quot; for &quot;property raw&quot;.""" start="00:20:30.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Org-mode macros are expanded when the document is exported,""" start="00:20:34.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and any positional arguments provided""" start="00:20:39.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""are referenced by their number.""" start="00:20:41.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now in the introduction,""" start="00:20:43.860" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we can use the macro replacement syntax,""" start="00:20:45.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which is three curly braces,""" start="00:20:47.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""followed by the macro name and any arguments,""" start="00:20:49.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then three ending curly braces.""" start="00:20:52.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""You see why I kept the macro name short.""" start="00:20:55.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""That's six curly braces in total we're typing,""" start="00:20:58.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which still takes up a fair amount of space.""" start="00:21:01.280" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Properties in practice""" start="00:21:05.240" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Now let's take a look at how we might use""" start="00:21:05.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""these properties in practice.""" start="00:21:07.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Debian and RedHat distros differ""" start="00:21:09.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on how they install packages.""" start="00:21:11.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So we're gonna want an &quot;install&quot; property,""" start="00:21:12.930" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""where in Debian we use `sudo apt-get install -qq`,""" start="00:21:16.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and on RedHat we'll use something like""" start="00:21:24.580" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""`sudo dnf install -y`.""" start="00:21:26.940" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now development packages""" start="00:21:33.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""also have a different naming convention.""" start="00:21:35.330" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""For example, the `ncurses` library on Debian""" start="00:21:38.050" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""is called `libncurses-dev`,""" start="00:21:40.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""where on RedHat it's called `ncurses-devel`.""" start="00:21:43.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""There are likely going to be""" start="00:21:48.260" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""many more little differences like this""" start="00:21:49.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that we'll need to solve with properties.""" start="00:21:52.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now I already don't like where this is going.""" start="00:21:55.340" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Switching between the Debian and RedHat""" start="00:21:58.610" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""versions of the document is gonna mean""" start="00:22:00.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""commenting and uncommenting out""" start="00:22:03.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""a bunch of different properties,""" start="00:22:05.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which is pretty janky.""" start="00:22:06.990" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Using a prefix""" start="00:22:09.020" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Luckily we can solve this problem""" start="00:22:09.020" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""with a little bit of Emacs Lisp.""" start="00:22:11.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll start by modifying our properties,""" start="00:22:14.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""so their property names are prefixed""" start="00:22:16.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""with either `deb_` or `rh_`""" start="00:22:19.141" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to signify which distro the property applies to.`""" start="00:22:23.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll also create a single property called &quot;prefix&quot;,""" start="00:22:27.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which will be prepended to the property name""" start="00:22:31.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""by the `get_prop` function""" start="00:22:34.590" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""if the requested property is not found.""" start="00:22:36.530" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This way, when we want to switch between""" start="00:22:39.510" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the Debian and RedHat versions of the document,""" start="00:22:42.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we just need to change the prefix property.""" start="00:22:45.350" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So now we'll change the Elisp code.""" start="00:22:49.030" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So we'll use a let expression with two bound variables.""" start="00:22:51.380" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The first one is called ret,""" start="00:22:55.210" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which determines if the initial call""" start="00:22:56.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to `org-property-values` succeeds.""" start="00:22:59.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The second variable is called prefix,""" start="00:23:01.950" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which is the prefix property.""" start="00:23:04.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If the first call to `org-property-values` succeeds,""" start="00:23:06.220" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we return it as normal.""" start="00:23:09.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If not, we concatenate the property value""" start="00:23:11.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that was passed into the function""" start="00:23:14.250" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""onto the prefix and try again.""" start="00:23:15.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now when we call the `get_prop` function with &quot;distro&quot;""" start="00:23:18.970" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""as the prop argument, it won't be found.""" start="00:23:23.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So the code will slap our prefix tag on the front,""" start="00:23:26.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""making it something like `rh_distro`,""" start="00:23:29.690" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and it will be found and returned.""" start="00:23:33.250" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Let's see that in action.""" start="00:23:35.330" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""All right, now we're talking.""" start="00:23:40.000" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Switching distributions""" start="00:23:42.010" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""This setup is starting to look pretty good,""" start="00:23:42.010" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but there are just a few things""" start="00:23:44.420" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that I want to add before we move on.""" start="00:23:46.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""First of all, I think the document should have a subtitle,""" start="00:23:48.660" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""something that tells you if you're looking at the RedHat""" start="00:23:51.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""or the Debian version of the document.""" start="00:23:53.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I also think it would be great""" start="00:23:56.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""if the file name of the exported document""" start="00:23:57.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""reflected the distribution as well.""" start="00:24:00.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I also want to add a quick Debian only section""" start="00:24:05.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to the document that explains how it got its name.""" start="00:24:08.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now let's see what happens when we export the document.""" start="00:24:11.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This did not work out as we wanted.""" start="00:24:17.740" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""As you can see, the macro we used in the subtitles""" start="00:24:20.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""didn't expand properly,""" start="00:24:23.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and as a result, our subtitle didn't render right.""" start="00:24:24.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Sadly, you can't use macros""" start="00:24:28.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""or inline function calls everywhere.""" start="00:24:30.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And one place where they don't work""" start="00:24:32.910" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""is inside of certain export keywords.""" start="00:24:34.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So we're gonna have to hard code them here.""" start="00:24:37.190" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Another mistake that we made is we forgot to update""" start="00:24:43.220" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the `#+EXCLUDE_TAGS` export keyword,""" start="00:24:46.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because with the RedHat version of the document,""" start="00:24:49.100" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we want to exclude the Debian tag.""" start="00:24:51.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now when we export the document,""" start="00:24:54.510" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""everything should be correct.""" start="00:24:56.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The word RedHat should appear in the subtitle,""" start="00:24:57.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and the Debian fun fact section should not be present.""" start="00:25:00.620" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now we just need to add a section to the README""" start="00:25:04.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that explains the steps you need to take""" start="00:25:06.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in order to switch the document""" start="00:25:09.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""from RedHat to Debian.""" start="00:25:11.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Okay, let's see here.""" start="00:25:12.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We have to change `#+SUBTITLE`, change the `#+EXCLUDE_TAGS`,""" start="00:25:14.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""change the `#+EXPORT_FILE_NAME`,""" start="00:25:18.310" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and change the `prefix` property.""" start="00:25:20.430" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This is OK, but it's not great.""" start="00:25:23.290" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Emacs Lisp can once again come to our rescue.""" start="00:25:26.290" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""What we'll do is make an Elisp code block""" start="00:25:29.430" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that will invite the user to hit `C-c C-c` on.""" start="00:25:32.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And the code block will essentially make all these changes""" start="00:25:35.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in the document for them.""" start="00:25:39.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This code block, which we'll call `switch_distro`,""" start="00:25:40.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""takes one argument called `os`,""" start="00:25:43.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which by default is set to &quot;Debian&quot;.""" start="00:25:45.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""It starts out with a let expression""" start="00:25:48.690" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that defines three bound variables.""" start="00:25:50.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The `debian` variable is a boolean that is true""" start="00:25:53.030" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""if the distro we're switching to is Debian.""" start="00:25:55.970" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Based on the value of this boolean,""" start="00:25:58.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we'll set the `noexport` and `prefix` variables accordingly.""" start="00:26:00.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The `save-excursion` block tells Emacs""" start="00:26:04.170" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that we're going to be moving around in the document""" start="00:26:06.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and to remember to put our point back where we started""" start="00:26:09.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""when the block finishes.""" start="00:26:11.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""After that, we essentially go to the top of the document""" start="00:26:13.430" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and search and replace the subtitle, `exclude_tags`,""" start="00:26:16.250" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""`export_file_name`, and the `prefix`.""" start="00:26:19.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Pretty cool.""" start="00:26:22.500" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Let's see this in action.""" start="00:26:23.390" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If we hit `C-c C-c` on this block,""" start="00:26:25.030" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we should see the document automatically change a bit.""" start="00:26:27.870" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And now when we export it,""" start="00:26:30.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we get the Debian version of the doc.""" start="00:26:32.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If we want to change it back,""" start="00:26:36.090" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we can just head back over to the code block""" start="00:26:37.630" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and change the default value for the os variable""" start="00:26:39.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""from &quot;Debian&quot; to &quot;RedHat&quot; and hit `C-c C-c` again.""" start="00:26:43.150" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And now when we re-export,""" start="00:26:47.620" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we're looking at the RedHat version of the document.""" start="00:26:49.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Just as an aside, if you ever thought to yourself,""" start="00:26:52.910" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""&quot;I should learn Emacs Lisp someday&quot;""" start="00:26:55.860" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Make it someday soon. You'll be happy you did.""" start="00:26:58.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Not only is it a fun programming language,""" start="00:27:01.290" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but you can do powerful things with it in Emacs,""" start="00:27:03.770" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which I hope is a point that folks take away from this talk.""" start="00:27:06.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""All right, that was a lot.""" start="00:27:12.150" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""A tour""" start="00:27:14.150" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Now that we've spent the past 20 minutes or so""" start="00:27:14.150" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""digging into some of the tips and tricks I used""" start="00:27:16.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""when creating my build Emacs from source document,""" start="00:27:19.410" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we'll say goodbye to this document we've been working on""" start="00:27:22.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and we'll start a tour""" start="00:27:26.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of the actual literate document I wrote.""" start="00:27:27.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""A document that I'll demonstrate actually downloading""" start="00:27:29.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and building a new Emacs when I export it""" start="00:27:33.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on both my Ubuntu and RedHat virtual machines.""" start="00:27:35.660" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I'll also show you how org-mode can generate""" start="00:27:38.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""slick professional looking PDF files""" start="00:27:41.690" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""through the power of LaTeX.""" start="00:27:44.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll start here at the orgdemo2 directory,""" start="00:27:46.580" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which I've cloned from GitLab.""" start="00:27:49.620" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This repository has all the source materials for this talk.""" start="00:27:51.230" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The buildemacs.org file is where most of the good stuff is.""" start="00:27:55.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So that's where we'll start.""" start="00:27:59.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""There's a lot of file-local variables""" start="00:28:01.480" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that we'll need to confirm.""" start="00:28:03.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So we'll do that too.""" start="00:28:04.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So the first thing we're gonna do""" start="00:28:06.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""is hit `C-u TAB` twice,""" start="00:28:07.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which will give us a top-level overview""" start="00:28:10.780" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of all of our headings.""" start="00:28:13.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""As you can see, we've got a lot""" start="00:28:15.140" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of the same familiar export keywords we had before.""" start="00:28:16.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""`#+TITLE`, `#+SUBTITLE`, `#+AUTHOR`, `#+EMAIL`,""" start="00:28:20.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""plus a few we haven't seen before.""" start="00:28:23.100" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""For example, I've squirreled away""" start="00:28:25.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""a lot of the `#+LATEX_HEADER` export keywords""" start="00:28:27.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in this file called latex.setup.""" start="00:28:30.620" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And I did this just so they don't clutter up the document.""" start="00:28:33.540" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Much of the LaTeX magic""" start="00:28:36.540" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that makes the exported document look good""" start="00:28:38.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""is in these headers.""" start="00:28:40.910" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""LaTeX commands begin with a backslash.""" start="00:28:42.590" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And a common one we use a lot here is `\usepackage`.""" start="00:28:45.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This lets us bring in packages like geometry,""" start="00:28:49.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""svg for the cool SeaGL SVG logo,""" start="00:28:52.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""`fancyhdr` and fancy verbatim [`fancyvrb`]""" start="00:28:56.540" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to keep things looking pretty fancy.""" start="00:28:58.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Using a scalable vector image format""" start="00:29:00.690" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""makes it possible for us to do really cool things""" start="00:29:03.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""like having a scaled-down version of the SeaGL logo""" start="00:29:05.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""appear in the fancy footer below.""" start="00:29:09.270" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I also include some macros in a separate file""" start="00:29:11.980" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""just to help keep things tidy in the main document.""" start="00:29:15.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Here I've got the familiar macros""" start="00:29:18.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we've seen before for `get_prop`.""" start="00:29:20.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""But here I use different permutations""" start="00:29:23.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""depending on if I want results raw""" start="00:29:25.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""or raw verbatim or just verbatim.""" start="00:29:28.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I also have a couple of macros here at the top of the file""" start="00:29:31.870" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that are for pulling strings out of results blocks""" start="00:29:35.070" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then trimming them""" start="00:29:40.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""so there's no white space on either side.""" start="00:29:41.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Like in the version of the document""" start="00:29:44.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we worked on at the start of this talk,""" start="00:29:46.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the real document also has a README section""" start="00:29:48.430" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""marked with the `:noexport:` tag.""" start="00:29:51.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""It also has a section about choosing""" start="00:29:53.470" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which version of the document to export""" start="00:29:55.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and a code block on how to switch between them.""" start="00:29:57.910" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""It's also got a lot of helpful information in it""" start="00:30:00.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""like what OS and Emacs versions""" start="00:30:03.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the document has been tested to &quot;run&quot; on,""" start="00:30:05.820" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""a section on the LaTeX prerequisites""" start="00:30:09.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and the section on executing""" start="00:30:12.330" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the document's various code blocks.""" start="00:30:14.080" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""TeX and LaTeX""" start="00:30:16.200" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""The latter two sections we'll take a look at now.""" start="00:30:16.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Out of the box on Fedora and Ubuntu server distros,""" start="00:30:19.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the TeX typesetting system""" start="00:30:22.580" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""also by noted computer scientist Donald Knuth""" start="00:30:24.710" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""is not installed.""" start="00:30:27.670" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So we'll need to install some packages.""" start="00:30:28.860" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Starting out we'll need the `texlive` package""" start="00:30:31.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which gets you a fully featured TeX setup.""" start="00:30:34.450" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This also gets you LaTeX""" start="00:30:37.460" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which can be viewed as a distribution of TeX macros.""" start="00:30:39.290" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""You'll also need XeTeX.""" start="00:30:42.790" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This gets you Unicode support and lets you use modern fonts.""" start="00:30:44.900" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll also want to install pdfTeX.""" start="00:30:49.780" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This gets us the ability to generate PDFs from TeX sources.""" start="00:30:52.810" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And finally, we're gonna need to install latexmk""" start="00:30:57.210" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which is a Perl script""" start="00:31:01.300" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that knows how to run LaTeX multiple times""" start="00:31:02.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in order to properly deal with intra-document links.""" start="00:31:05.140" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Other prerequisites""" start="00:31:09.250" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""But wait, there's more.""" start="00:31:09.250" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We're also gonna need Inkscape""" start="00:31:11.070" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to rasterize our SeaGL vector logo""" start="00:31:12.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""at different resolutions.""" start="00:31:15.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And we're gonna need the JetBrains Mono font""" start="00:31:17.340" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to make our source code look snazzy.""" start="00:31:20.360" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll also need the Inter font""" start="00:31:23.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to make our prose look snazzy as well.""" start="00:31:24.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I've helpfully added a bash code block in the README""" start="00:31:28.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that you can hit C-c C-c on to install.""" start="00:31:31.300" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This really does lock up Emacs for a few minutes""" start="00:31:35.740" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and it's sort of annoying.""" start="00:31:38.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""When we export the document and turn off all caching""" start="00:31:40.330" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and it actually builds Emacs for real,""" start="00:31:43.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Emacs can be locked up for tens of minutes.""" start="00:31:45.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""There's a package called ob-async""" start="00:31:48.770" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that I've been meaning to check out that might help here.""" start="00:31:50.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""But since I wanted this document""" start="00:31:54.260" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to work on bog-standard Emacs setups,""" start="00:31:55.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I didn't get around to it.""" start="00:31:58.000" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Caching""" start="00:32:00.060" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Before we get into talking about running the document,""" start="00:32:00.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""let's talk briefly about results caching.""" start="00:32:03.140" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll take a look at the section of the document""" start="00:32:06.450" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""where we talk about Git tags for an example.""" start="00:32:08.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The `num_tags` bash code block determines""" start="00:32:13.140" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""how many tags there are in the Emacs Git repo.""" start="00:32:15.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And when I hit C-c C-c on that block""" start="00:32:19.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""several days ago, when I was first creating the document,""" start="00:32:21.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that number was 183.""" start="00:32:25.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""That result has remained cached in the document since then.""" start="00:32:28.020" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And you can see a snippet of the SHA1 hash""" start="00:32:32.170" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of the contents of the source block below.""" start="00:32:34.900" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""You can see where I referenced the result""" start="00:32:38.390" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""using the `sr` for string raw macro in the prose below,""" start="00:32:40.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and how it gets rendered in the exported PDF document.""" start="00:32:44.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""All the source blocks in the exported sections""" start="00:32:50.510" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""of the document include cached results like this.""" start="00:32:52.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If I export the document now, it won't take that long to do""" start="00:32:56.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because while there are a ton of code blocks""" start="00:33:01.390" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in the exported sections, they're all cached.""" start="00:33:03.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now let's get back to the section of the README""" start="00:33:09.070" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that explains how to execute the code in the document.""" start="00:33:11.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Here I explain that if you want to build Emacs""" start="00:33:14.910" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on your computer using this document,""" start="00:33:17.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you've got a couple of options.""" start="00:33:20.190" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The first option is to manually invalidate the caches""" start="00:33:22.020" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and take C-c C-c on every code block""" start="00:33:25.650" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in the main document.""" start="00:33:28.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This lets you supervise the entire process,""" start="00:33:30.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and it also creates new cached result blocks,""" start="00:33:33.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but it's time consuming.""" start="00:33:36.940" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""There is also an internal link to the main document here,""" start="00:33:39.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and you can jump to it with C-c C-o.""" start="00:33:43.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This is one of those intra-document links""" start="00:33:47.380" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that is really tricky to get right with LaTeX,""" start="00:33:50.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and is why we opted to use the latexmk Perl script""" start="00:33:53.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to build the PDF version of the document.""" start="00:33:56.990" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I'm mentioning it specifically here""" start="00:34:00.050" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because it took me forever to figure this out.""" start="00:34:01.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The second option you've got""" start="00:34:05.630" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""is to change the default header arg""" start="00:34:07.270" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""from `:cache yes` to `:cache no` at the top of the document.""" start="00:34:09.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If we cruise up to the top of the document,""" start="00:34:13.740" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you can see that this header argument property""" start="00:34:16.270" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""basically says that unless a code block""" start="00:34:19.130" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""explicitly says otherwise,""" start="00:34:22.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""it's by default supposed to be cached.""" start="00:34:24.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""That's how we were able to export the document""" start="00:34:27.119" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""before so quickly.""" start="00:34:29.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""The code block named `no_cache_no_confirm`""" start="00:34:31.559" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""uses the `save-excursion` and regex replace trick""" start="00:34:34.820" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that I demonstrated earlier""" start="00:34:38.619" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to munch the default cache header arg""" start="00:34:40.349" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""from &quot;cache yes&quot; to &quot;cache no&quot;.""" start="00:34:42.820" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And it also turns off confirmations on bash code blocks.""" start="00:34:45.410" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Let's do that now.""" start="00:34:49.300" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now we'll export the document to PDF,""" start="00:34:51.940" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""which will ignore the cache result blocks""" start="00:34:54.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and clone the Git repository on Savannah,""" start="00:34:57.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""create a branch that points""" start="00:35:00.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to the most recently tagged version of Emacs 29,""" start="00:35:01.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""run configure a handful of times,""" start="00:35:05.460" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""installing packages to fix missing dependencies""" start="00:35:07.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""along the way,""" start="00:35:10.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""build Emacs, install Emacs in our home directory,""" start="00:35:12.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""verify that it has successfully built a binary,""" start="00:35:16.100" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""run it in batch mode with some sample Elisp""" start="00:35:19.340" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and show the file sizes and dates of the generated files.""" start="00:35:22.550" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This is gonna take a while.""" start="00:35:26.870" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And while it's running, we'll pop over to our Fedora box.""" start="00:35:28.340" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""All right, now we'll fire up Emacs,""" start="00:35:32.830" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""hit `C-c C-c` on the `configure_document` code block""" start="00:35:34.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to configure the document for RedHat""" start="00:35:39.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""since Fedora here is a RedHat based distro.""" start="00:35:41.850" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Then what we'll do is we'll pop down""" start="00:35:45.710" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and hit `C-c C-c`""" start="00:35:47.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on the `rh_install_latex` code block""" start="00:35:49.590" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to install the LaTeX prerequisites""" start="00:35:53.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""for this Fedora virtual machine.""" start="00:35:56.230" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Finally, we'll execute the `no_cache_no_confirm` block""" start="00:35:58.460" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then kick off the export.""" start="00:36:02.590" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Then we'll go and check back on what's happening""" start="00:36:05.050" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on the Ubuntu box.""" start="00:36:07.280" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Ooh, top looks pretty quiet.""" start="00:36:09.530" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I think the export is complete.""" start="00:36:11.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Ooh, those are the words I love to see in the status area,""" start="00:36:14.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""PDF file produced!""" start="00:36:17.560" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Looking at the PDF""" start="00:36:20.610" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Now I can't use my web browser""" start="00:36:20.610" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to take a look at this PDF file""" start="00:36:22.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because I haven't set up a web server""" start="00:36:24.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""or anything like that on the Ubuntu virtual machine.""" start="00:36:27.080" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I can, however, use TRAMP with the ssh method""" start="00:36:30.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to poke around on the ubuntu host""" start="00:36:34.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""on my personal version of Emacs.""" start="00:36:36.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So let's do that.""" start="00:36:39.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Okay, so now if we go into the source directory""" start="00:36:40.940" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then we hop into the orgdemo2 directory""" start="00:36:44.810" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then we look at the deb version of the PDF,""" start="00:36:48.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""there she blows.""" start="00:36:51.620" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now, if we go down to the Building Emacs section,""" start="00:36:54.150" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we can see that it built.""" start="00:36:58.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And if we look in the bin directory,""" start="00:37:00.130" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we can see that at 17:01,""" start="00:37:03.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that's when all of those files got created.""" start="00:37:06.780" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Also the file creation date on the PDF is 17:01.""" start="00:37:11.380" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So all of this code executed roughly the same time""" start="00:37:15.590" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the PDF was created.""" start="00:37:18.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""All right, so now let's head back over to the Fedora box""" start="00:37:21.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then we'll navigate to the source directory,""" start="00:37:25.340" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""the orgdemo2 directory,""" start="00:37:27.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and there is our RedHat version of the built Emacs PDF.""" start="00:37:30.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And Bob's your uncle.""" start="00:37:35.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And you can see it is the RedHat version of the document""" start="00:37:38.220" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because this is a RedHat box.""" start="00:37:42.550" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And if we go over to the What did we install? section,""" start="00:37:44.940" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you can see that these binaries were built at 17:35.""" start="00:37:51.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And now if we pop open dired""" start="00:37:56.050" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and we take a look at the PDF,""" start="00:37:58.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we can see it also was created at 17:35.""" start="00:38:00.740" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""All right, in the couple minutes remaining,""" start="00:38:07.330" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I thought it would be a good idea""" start="00:38:10.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""just to take a look at the document""" start="00:38:11.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and maybe just go through some of what it actually does""" start="00:38:15.740" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""in explaining how to build Emacs from source.""" start="00:38:19.000" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We'll look at the RedHat version since we're here.""" start="00:38:22.580" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And the first thing you do is""" start="00:38:27.140" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you have to get access to the source code.""" start="00:38:28.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And before you can do anything,""" start="00:38:31.540" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""this is a RedHat-specific section""" start="00:38:32.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""where you need to install some development tools.""" start="00:38:35.420" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And this development tools group actually has Git.""" start="00:38:38.300" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Now I installed Git earlier, but if you didn't do that,""" start="00:38:41.540" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that would be the first thing that you need to do.""" start="00:38:44.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We create a source directory, we cd into it,""" start="00:38:46.940" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we clone the repo from Savannah.""" start="00:38:50.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then we start to take a look at some of the Git tags.""" start="00:38:53.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And we showed this before where we check out""" start="00:38:56.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""how many different tags there are.""" start="00:38:58.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then we run this kind of funky Git command""" start="00:39:00.370" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to sort of list all the tags that begin with 'emacs-29',""" start="00:39:02.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and we sort them by when they were tagged.""" start="00:39:06.040" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So we can see that Emacs 29.1.pretest""" start="00:39:08.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""is the most recent version.""" start="00:39:12.400" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So that's the one we grab""" start="00:39:14.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and that's the one we decide to build.""" start="00:39:15.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then we create a branch that is based on this tag.""" start="00:39:18.660" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And this is dynamically generated based on what we saw here.""" start="00:39:22.780" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So that's what we use here.""" start="00:39:27.480" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Errors""" start="00:39:29.440" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""In this case, we're piping standard error""" start="00:39:29.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to where standard out goes.""" start="00:39:32.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""That's another trick.""" start="00:39:35.100" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""If you want to actually see an error get created,""" start="00:39:36.070" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""org-mode will capture any errors that code blocks produce,""" start="00:39:39.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and it will show you the error message in a buffer.""" start="00:39:44.120" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So if you actually wanna show what it looks like""" start="00:39:46.820" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""when something errors out, this is the trick you have to use.""" start="00:39:49.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then what we do is we look for a configure script""" start="00:39:53.060" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and there isn't one.""" start="00:39:56.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then we realize,""" start="00:39:57.420" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""uh-oh, we're gonna have to deal with autotools.""" start="00:39:58.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So, you know, we run the autogen script and it complains""" start="00:40:00.910" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because we're missing some prerequisites.""" start="00:40:05.560" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So we have to install autoconf,""" start="00:40:08.680" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then we run it again,""" start="00:40:11.350" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and finally it generates a configure script.""" start="00:40:13.020" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And this is another case where I pull this number""" start="00:40:15.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""right here into the actual prose.""" start="00:40:19.020" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And I can see it's, oh, it's, you know, this how many bytes.""" start="00:40:21.980" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""When was the last time you wrote a shell script""" start="00:40:24.840" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that was this many bytes long?""" start="00:40:26.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then we configure the build process.""" start="00:40:29.580" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And, you know, it's not gonna work right away""" start="00:40:31.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""because we don't have GNU Texinfo installed.""" start="00:40:33.760" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So we gotta do that, which we do with `dnf install` here.""" start="00:40:36.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then there's this section that is either RedHat-""" start="00:40:41.440" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""or Debian-specific that talks about, like,""" start="00:40:44.320" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""if you don't know the name of a package""" start="00:40:48.920" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that contains a given file name, how do you query it?""" start="00:40:51.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And in the RedHat world, you use `dnf provides makeinfo`.""" start="00:40:55.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""In the Debian world, you do something entirely different.""" start="00:40:59.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then we have to install the `ncurses` binary.""" start="00:41:02.290" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And finally we get like a minimal configuration""" start="00:41:06.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and you can see that there's a whole bunch of nos here.""" start="00:41:10.300" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So, you know, we don't have cairo,""" start="00:41:13.700" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""we don't have imagemagick, we don't have dbus,""" start="00:41:15.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""you know, there's a whole bunch of stuff we don't have.""" start="00:41:18.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""We don't have X, we don't have libjansson, no tree-sitter.""" start="00:41:20.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This is really a bare-bones Emacs""" start="00:41:23.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""that is strictly terminal mode.""" start="00:41:25.960" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Then we actually build Emacs, which is, you know,""" start="00:41:28.640" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""kind of boring, we're just gonna type make""" start="00:41:30.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then make is gonna run successfully.""" start="00:41:33.260" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And make is gonna spew a ton of output, right?""" start="00:41:35.260" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""So here's where I do that /dev/null trick,""" start="00:41:37.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""where I pipe everything to /dev/null""" start="00:41:41.100" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then I, or I pipe standard output to /dev/null""" start="00:41:42.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and then I pipe standard error""" start="00:41:45.820" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""to wherever standard output's going.""" start="00:41:47.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then at the end to say that it ran successfully,""" start="00:41:50.240" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I say &quot;Make ran successfully!&quot;""" start="00:41:52.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Then we take a look at the Emacs binary""" start="00:41:55.380" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and you know, it's an elf binary.""" start="00:41:57.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And, you know, because this is running on my Mac,""" start="00:41:59.880" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""this is an ARM-based machine, this virtual machine is.""" start="00:42:01.720" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""Oops, and this is a bug.""" start="00:42:06.620" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""This really should be a macro call,""" start="00:42:10.520" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""but I think I have the wrong number of curly braces""" start="00:42:12.200" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""or something in there.""" start="00:42:14.800" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I need to figure out why that's not right.""" start="00:42:16.160" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""I'll look into that later.""" start="00:42:19.130" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then we install Emacs and then we kind of show""" start="00:42:21.110" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""like the file sizes of everything in the home directory.""" start="00:42:23.980" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And then we, you know, show the binaries that got installed.""" start="00:42:27.720" video="mainVideo-doc" id="subtitle"]]
+
+[[!template new="1" text="""Final thoughts""" start="00:42:31.990" video="mainVideo-doc" id="subtitle"]]
+
+[[!template text="""Anyway, so this is the final thoughts section.""" start="00:42:31.990" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And my final thoughts are, is I hope you enjoyed this talk""" start="00:42:35.600" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""and I hope you actually learned a thing or two.""" start="00:42:39.220" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""All right, thanks everybody.""" start="00:42:42.380" video="mainVideo-doc" id="subtitle"]]
+[[!template text="""And I'll see you all next time.""" start="00:42:43.360" video="mainVideo-doc" id="subtitle"]]
+
+
+
+Captioner: jc
+
+<a name="doc-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: Well, we have about, I think,""" start="00:00:03.639" video="qanda-doc" id="subtitle"]]
+[[!template text="""10 or 15 minutes of on-stream Q&A time.""" start="00:00:06.339" video="qanda-doc" id="subtitle"]]
+[[!template text="""But if there's more questions than that,""" start="00:00:10.320" video="qanda-doc" id="subtitle"]]
+[[!template text="""people are welcome to stay.""" start="00:00:11.420" video="qanda-doc" id="subtitle"]]
+[[!template text="""If Mike has the time to answer some more,""" start="00:00:14.200" video="qanda-doc" id="subtitle"]]
+[[!template text="""then Awesome.""" start="00:00:15.060" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I will be around for the rest of the""" start="00:00:20.920" video="qanda-doc" id="subtitle"]]
+[[!template text="""conference. So I am spudpnds,""" start="00:00:22.440" video="qanda-doc" id="subtitle"]]
+[[!template text="""which is spud upside down on IRC,""" start="00:00:26.580" video="qanda-doc" id="subtitle"]]
+[[!template text="""if you want to hit me up on IRC.""" start="00:00:29.640" video="qanda-doc" id="subtitle"]]
+[[!template text="""Nice.""" start="00:00:30.860" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 0]: I see we already have a question on the pad,""" start="00:00:42.800" video="qanda-doc" id="subtitle"]]
+[[!template text="""and it is, did you develop a variant of your""" start="00:00:45.920" video="qanda-doc" id="subtitle"]]
+[[!template text="""document for CentOS?""" start="00:00:46.920" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 1]: I did not. I have not messed with any other""" start="00:00:52.840" video="qanda-doc" id="subtitle"]]
+[[!template text="""Red Hat distributions other than Fedora.""" start="00:00:56.120" video="qanda-doc" id="subtitle"]]
+[[!template text="""I would like to expand the document out to""" start="00:00:59.960" video="qanda-doc" id="subtitle"]]
+[[!template text="""Windows and to Mac OS as I think a lot of""" start="00:01:05.740" video="qanda-doc" id="subtitle"]]
+[[!template text="""people really want to build Emacs on those""" start="00:01:07.720" video="qanda-doc" id="subtitle"]]
+[[!template text="""platforms because it's much harder to get""" start="00:01:09.840" video="qanda-doc" id="subtitle"]]
+[[!template text="""Emacs binaries running on those platforms.""" start="00:01:13.080" video="qanda-doc" id="subtitle"]]
+[[!template text="""Although they're around on the internet it's""" start="00:01:15.860" video="qanda-doc" id="subtitle"]]
+[[!template text="""not as bad as it used to be,""" start="00:01:17.320" video="qanda-doc" id="subtitle"]]
+[[!template text="""but building Emacs is very,""" start="00:01:19.280" video="qanda-doc" id="subtitle"]]
+[[!template text="""a very fun thing to do.""" start="00:01:21.000" video="qanda-doc" id="subtitle"]]
+[[!template text="""And I encourage everybody to do that.""" start="00:01:22.760" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. We're also getting comments from folks""" start="00:01:46.160" video="qanda-doc" id="subtitle"]]
+[[!template text="""here on BigBlueButton.""" start="00:01:46.800" video="qanda-doc" id="subtitle"]]
+[[!template text="""EXC or Matt saying, great talk,""" start="00:01:49.640" video="qanda-doc" id="subtitle"]]
+[[!template text="""good demonstration of what's possible.""" start="00:01:51.140" video="qanda-doc" id="subtitle"]]
+[[!template text="""And Aaron thanking Mike,""" start="00:01:53.940" video="qanda-doc" id="subtitle"]]
+[[!template text="""saying awesome presentation.""" start="00:01:54.760" video="qanda-doc" id="subtitle"]]
+[[!template text="""And they missed the first few minutes and""" start="00:01:56.880" video="qanda-doc" id="subtitle"]]
+[[!template text="""have to rewatch to get the portion that they""" start="00:01:59.540" video="qanda-doc" id="subtitle"]]
+[[!template text="""missed.""" start="00:01:59.720" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 1]: I had a hard time cramming the entire talk""" start="00:02:03.400" video="qanda-doc" id="subtitle"]]
+[[!template text="""into 40 minutes. So I spoke quickly.""" start="00:02:08.220" video="qanda-doc" id="subtitle"]]
+[[!template text="""I have a feeling I may have left some folks""" start="00:02:10.639" video="qanda-doc" id="subtitle"]]
+[[!template text="""behind who weren't paying close attention.""" start="00:02:12.540" video="qanda-doc" id="subtitle"]]
+[[!template text="""So rewatching might help.""" start="00:02:16.020" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh, nice.""" start="00:02:18.920" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 1]: I noticed Matt said that he helps maintain""" start="00:02:24.920" video="qanda-doc" id="subtitle"]]
+[[!template text="""the shell functionality or Babel and last""" start="00:02:27.440" video="qanda-doc" id="subtitle"]]
+[[!template text="""March they added async evaluation into""" start="00:02:30.240" video="qanda-doc" id="subtitle"]]
+[[!template text="""session code blocks. Very cool,""" start="00:02:32.920" video="qanda-doc" id="subtitle"]]
+[[!template text="""especially when you're doing something that""" start="00:02:34.680" video="qanda-doc" id="subtitle"]]
+[[!template text="""takes a long time. It would be nice if Emacs""" start="00:02:36.420" video="qanda-doc" id="subtitle"]]
+[[!template text="""wasn't locked up. I will definitely have to""" start="00:02:38.920" video="qanda-doc" id="subtitle"]]
+[[!template text="""check that out. I use this technique at work""" start="00:02:50.220" video="qanda-doc" id="subtitle"]]
+[[!template text="""a lot, like when I write documents to how to""" start="00:02:53.220" video="qanda-doc" id="subtitle"]]
+[[!template text="""explain things to coworkers and such.""" start="00:02:55.900" video="qanda-doc" id="subtitle"]]
+[[!template text="""And 1 of the things I had to explain was how""" start="00:03:00.060" video="qanda-doc" id="subtitle"]]
+[[!template text="""to build AWS MySQL databases and replicas,""" start="00:03:05.220" video="qanda-doc" id="subtitle"]]
+[[!template text="""and how to build them with very specific""" start="00:03:07.760" video="qanda-doc" id="subtitle"]]
+[[!template text="""parameters to work with the system called""" start="00:03:09.960" video="qanda-doc" id="subtitle"]]
+[[!template text="""Vitesse. And when I was running that""" start="00:03:13.060" video="qanda-doc" id="subtitle"]]
+[[!template text="""document, building these kinds of MySQL""" start="00:03:15.660" video="qanda-doc" id="subtitle"]]
+[[!template text="""databases in AWS with lockup Emacs for 20,""" start="00:03:20.280" video="qanda-doc" id="subtitle"]]
+[[!template text="""25 minutes at a time. So,""" start="00:03:22.300" video="qanda-doc" id="subtitle"]]
+[[!template text="""yeah, I'm really excited about async""" start="00:03:26.060" video="qanda-doc" id="subtitle"]]
+[[!template text="""evaluation.""" start="00:03:26.540" video="qanda-doc" id="subtitle"]]
+[[!template text="""Totally. Oh yeah, Python mode I think has had""" start="00:04:03.780" video="qanda-doc" id="subtitle"]]
+[[!template text="""async for shell blocks for a while.""" start="00:04:05.600" video="qanda-doc" id="subtitle"]]
+[[!template text="""I think there's a third-party package at Elba""" start="00:04:09.220" video="qanda-doc" id="subtitle"]]
+[[!template text="""that adds async support for that.""" start="00:04:11.260" video="qanda-doc" id="subtitle"]]
+[[!template text="""But yeah, I explicitly wanted to make sure""" start="00:04:16.360" video="qanda-doc" id="subtitle"]]
+[[!template text="""that it would work with super vanilla stuff.""" start="00:04:18.620" video="qanda-doc" id="subtitle"]]
+[[!template text="""Oh, it's built in. I see.""" start="00:04:20.060" video="qanda-doc" id="subtitle"]]
+[[!template text="""Yeah, I didn't realize it was built in for""" start="00:04:24.140" video="qanda-doc" id="subtitle"]]
+[[!template text="""Python blocks. I'll have to check that out.""" start="00:04:25.920" video="qanda-doc" id="subtitle"]]
+[[!template text="""There's so much Emacs.""" start="00:04:27.800" video="qanda-doc" id="subtitle"]]
+[[!template text="""It's hard to wrap your head even around a""" start="00:04:32.080" video="qanda-doc" id="subtitle"]]
+[[!template text="""tiny portion of it. It's such a deep topic.""" start="00:04:34.900" video="qanda-doc" id="subtitle"]]
+[[!template text="""Looks like somebody in IRC said,""" start="00:04:47.660" video="qanda-doc" id="subtitle"]]
+[[!template text="""I can't wait to add some of this stuff to my""" start="00:04:50.220" video="qanda-doc" id="subtitle"]]
+[[!template text="""documents. And that really makes me happy.""" start="00:04:52.680" video="qanda-doc" id="subtitle"]]
+[[!template text="""I hope people go out and write literate Org""" start="00:04:55.400" video="qanda-doc" id="subtitle"]]
+[[!template text="""Mode documents that do amazing things.""" start="00:04:57.180" video="qanda-doc" id="subtitle"]]
+[[!template text="""When's the next talk? We have like,""" start="00:05:25.640" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 0]: let's see. I think we have about 4 or 5""" start="00:05:30.900" video="qanda-doc" id="subtitle"]]
+[[!template text="""minutes live on stream for Q&A.""" start="00:05:32.960" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, okay. Oh, here's the question.""" start="00:05:35.860" video="qanda-doc" id="subtitle"]]
+[[!template text="""Blaine asks, are you running Emacs from the""" start="00:05:39.160" video="qanda-doc" id="subtitle"]]
+[[!template text="""host machine? And yeah,""" start="00:05:41.420" video="qanda-doc" id="subtitle"]]
+[[!template text="""so I'm running Emacs on the exact same""" start="00:05:43.940" video="qanda-doc" id="subtitle"]]
+[[!template text="""machine that I'm building Emacs on.""" start="00:05:46.560" video="qanda-doc" id="subtitle"]]
+[[!template text="""And I had first thought about doing that over""" start="00:05:50.580" video="qanda-doc" id="subtitle"]]
+[[!template text="""Tramp. And I thought that would be a very""" start="00:05:53.440" video="qanda-doc" id="subtitle"]]
+[[!template text="""cool demo to show how you could do that""" start="00:05:55.360" video="qanda-doc" id="subtitle"]]
+[[!template text="""remotely on Tramp so you didn't need Emacs on""" start="00:05:57.980" video="qanda-doc" id="subtitle"]]
+[[!template text="""the host machine. But I decided it would be a""" start="00:06:03.160" video="qanda-doc" id="subtitle"]]
+[[!template text="""lot easier, and as I ran into a deadline to""" start="00:06:05.640" video="qanda-doc" id="subtitle"]]
+[[!template text="""get the talk completed,""" start="00:06:06.360" video="qanda-doc" id="subtitle"]]
+[[!template text="""I abandoned that notion for the""" start="00:06:08.900" video="qanda-doc" id="subtitle"]]
+[[!template text="""straightforward approach.""" start="00:06:09.880" video="qanda-doc" id="subtitle"]]
+[[!template text="""But ideally, I would spin up virtual machines""" start="00:06:13.260" video="qanda-doc" id="subtitle"]]
+[[!template text="""and then using the Org Mode document and""" start="00:06:16.980" video="qanda-doc" id="subtitle"]]
+[[!template text="""having Org Mode reach out to those machines""" start="00:06:18.960" video="qanda-doc" id="subtitle"]]
+[[!template text="""via SSH and Tramp.""" start="00:06:20.440" video="qanda-doc" id="subtitle"]]
+[[!template text="""Oh yeah, there's also a little bit of""" start="00:06:33.400" video="qanda-doc" id="subtitle"]]
+[[!template text="""discussion on IRC about org macros and how""" start="00:06:38.200" video="qanda-doc" id="subtitle"]]
+[[!template text="""they made their way into the document.""" start="00:06:39.720" video="qanda-doc" id="subtitle"]]
+[[!template text="""And I remember when I first discovered org""" start="00:06:42.540" video="qanda-doc" id="subtitle"]]
+[[!template text="""macros by reading the org mode documentation,""" start="00:06:44.480" video="qanda-doc" id="subtitle"]]
+[[!template text="""I was really excited because I thought I""" start="00:06:47.360" video="qanda-doc" id="subtitle"]]
+[[!template text="""could limit a lot of the boilerplate I end up""" start="00:06:49.860" video="qanda-doc" id="subtitle"]]
+[[!template text="""typing. But as we discussed,""" start="00:06:51.900" video="qanda-doc" id="subtitle"]]
+[[!template text="""ORD macros, I think, only work in 1 context""" start="00:06:54.760" video="qanda-doc" id="subtitle"]]
+[[!template text="""in your ORD mode document,""" start="00:06:56.380" video="qanda-doc" id="subtitle"]]
+[[!template text="""and I think that's in the pros section.""" start="00:06:58.280" video="qanda-doc" id="subtitle"]]
+[[!template text="""So You can't resolve a macro inside a header""" start="00:07:03.740" video="qanda-doc" id="subtitle"]]
+[[!template text="""arg, for example, or inside an options block.""" start="00:07:06.600" video="qanda-doc" id="subtitle"]]
+[[!template text="""It would be awesome if macros worked""" start="00:07:09.560" video="qanda-doc" id="subtitle"]]
+[[!template text="""everywhere, but I'm happy to have them just""" start="00:07:12.280" video="qanda-doc" id="subtitle"]]
+[[!template text="""as they are now.""" start="00:07:13.500" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Indeed, they're very convenient.""" start="00:07:22.960" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 1]: And Blaine also says, thank you for showing""" start="00:07:32.020" video="qanda-doc" id="subtitle"]]
+[[!template text="""what's possible with literate documentation.""" start="00:07:33.420" video="qanda-doc" id="subtitle"]]
+[[!template text="""This is mind-blowing. Yeah,""" start="00:07:35.380" video="qanda-doc" id="subtitle"]]
+[[!template text="""I think so too. I first saw this technique in""" start="00:07:39.400" video="qanda-doc" id="subtitle"]]
+[[!template text="""Howard's video, Literate DevOps,""" start="00:07:41.020" video="qanda-doc" id="subtitle"]]
+[[!template text="""and I remember I was just picking up parts of""" start="00:07:44.720" video="qanda-doc" id="subtitle"]]
+[[!template text="""my mind after it exploded after having""" start="00:07:46.720" video="qanda-doc" id="subtitle"]]
+[[!template text="""watched that video. So I wanted to do some of""" start="00:07:49.740" video="qanda-doc" id="subtitle"]]
+[[!template text="""it myself, and that's where I came up with a""" start="00:07:51.820" video="qanda-doc" id="subtitle"]]
+[[!template text="""couple different approaches to that.""" start="00:07:54.020" video="qanda-doc" id="subtitle"]]
+[[!template text="""It's not just for, you know,""" start="00:07:57.600" video="qanda-doc" id="subtitle"]]
+[[!template text="""making literate Emacs configurations.""" start="00:07:59.060" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 0]: For Sure. We have another remark slash""" start="00:08:04.680" video="qanda-doc" id="subtitle"]]
+[[!template text="""question on the pad. Someone saying great""" start="00:08:07.260" video="qanda-doc" id="subtitle"]]
+[[!template text="""presentation. The preparation is outstanding.""" start="00:08:09.800" video="qanda-doc" id="subtitle"]]
+[[!template text="""And for someone like me that never touched""" start="00:08:12.520" video="qanda-doc" id="subtitle"]]
+[[!template text="""the org-mux side of Emacs,""" start="00:08:14.040" video="qanda-doc" id="subtitle"]]
+[[!template text="""What do you feel is the more complex part to""" start="00:08:17.040" video="qanda-doc" id="subtitle"]]
+[[!template text="""tackle? You made it seem simple,""" start="00:08:19.120" video="qanda-doc" id="subtitle"]]
+[[!template text="""but the complexity there.""" start="00:08:20.500" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. Just getting all of the configuration""" start="00:08:25.840" video="qanda-doc" id="subtitle"]]
+[[!template text="""set up the way you want it is the hardest""" start="00:08:30.800" video="qanda-doc" id="subtitle"]]
+[[!template text="""part. So some of the defaults are,""" start="00:08:34.780" video="qanda-doc" id="subtitle"]]
+[[!template text="""you know, they don't look good when you""" start="00:08:37.120" video="qanda-doc" id="subtitle"]]
+[[!template text="""render them out in LaTeX and finally PDF.""" start="00:08:39.320" video="qanda-doc" id="subtitle"]]
+[[!template text="""And there's a lot of work to be done to tweak""" start="00:08:42.039" video="qanda-doc" id="subtitle"]]
+[[!template text="""the LaTeX environment so it looks as pretty""" start="00:08:45.380" video="qanda-doc" id="subtitle"]]
+[[!template text="""as you might want it. And then just Org Mode""" start="00:08:48.620" video="qanda-doc" id="subtitle"]]
+[[!template text="""has a lot of knobs that you can tune,""" start="00:08:50.800" video="qanda-doc" id="subtitle"]]
+[[!template text="""and they have a pretty large impact on how""" start="00:08:53.720" video="qanda-doc" id="subtitle"]]
+[[!template text="""your document is exported.""" start="00:08:55.520" video="qanda-doc" id="subtitle"]]
+[[!template text="""So I think the hardest part is just knowing""" start="00:09:00.360" video="qanda-doc" id="subtitle"]]
+[[!template text="""what's possible and knowing where all the""" start="00:09:03.820" video="qanda-doc" id="subtitle"]]
+[[!template text="""knobs are to tune and twist.""" start="00:09:05.200" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Got another question on the pad.""" start="00:09:10.240" video="qanda-doc" id="subtitle"]]
+[[!template text="""And I think we have about a minute or so on""" start="00:09:12.040" video="qanda-doc" id="subtitle"]]
+[[!template text="""the stream. So I'll read this question as""" start="00:09:13.740" video="qanda-doc" id="subtitle"]]
+[[!template text="""well. But folks, you're welcome to continue""" start="00:09:15.160" video="qanda-doc" id="subtitle"]]
+[[!template text="""on the pad or just come join here on BBB""" start="00:09:17.560" video="qanda-doc" id="subtitle"]]
+[[!template text="""after myself and the stream move on to the""" start="00:09:20.200" video="qanda-doc" id="subtitle"]]
+[[!template text="""next talk. Yeah, and the next question is,""" start="00:09:23.100" video="qanda-doc" id="subtitle"]]
+[[!template text="""how do you normally debug,""" start="00:09:24.320" video="qanda-doc" id="subtitle"]]
+[[!template text="""for example, view the logs or see failed""" start="00:09:26.640" video="qanda-doc" id="subtitle"]]
+[[!template text="""statuses when the commands in the source""" start="00:09:29.440" video="qanda-doc" id="subtitle"]]
+[[!template text="""blocks fail, especially if they output lots""" start="00:09:32.020" video="qanda-doc" id="subtitle"]]
+[[!template text="""and lots of logs, and you need to see the""" start="00:09:34.640" video="qanda-doc" id="subtitle"]]
+[[!template text="""full history of the build.""" start="00:09:35.640" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, so I see it in the messages buffer""" start="00:09:39.520" video="qanda-doc" id="subtitle"]]
+[[!template text="""whenever I export a document.""" start="00:09:42.080" video="qanda-doc" id="subtitle"]]
+[[!template text="""If there's a failure, that's typically where""" start="00:09:44.540" video="qanda-doc" id="subtitle"]]
+[[!template text="""it's written to. And I will actually kill the""" start="00:09:47.460" video="qanda-doc" id="subtitle"]]
+[[!template text="""messages buffer before I export so I know""" start="00:09:49.960" video="qanda-doc" id="subtitle"]]
+[[!template text="""that only the messages in the buffer are for""" start="00:09:52.840" video="qanda-doc" id="subtitle"]]
+[[!template text="""my given export and I mentioned that""" start="00:09:55.800" video="qanda-doc" id="subtitle"]]
+[[!template text="""debugging trick where you name all of your""" start="00:09:58.580" video="qanda-doc" id="subtitle"]]
+[[!template text="""org-mode source blocks So if there is a""" start="00:10:00.720" video="qanda-doc" id="subtitle"]]
+[[!template text="""problem in 1 of the blocks,""" start="00:10:02.320" video="qanda-doc" id="subtitle"]]
+[[!template text="""it'll actually tell you what the block,""" start="00:10:06.560" video="qanda-doc" id="subtitle"]]
+[[!template text="""the name of the block the error occurred in.""" start="00:10:09.140" video="qanda-doc" id="subtitle"]]
+[[!template text="""If you don't do that, it just gives you a""" start="00:10:13.160" video="qanda-doc" id="subtitle"]]
+[[!template text="""position number in the buffer.""" start="00:10:14.800" video="qanda-doc" id="subtitle"]]
+[[!template text="""And whenever I tried to convert those""" start="00:10:18.620" video="qanda-doc" id="subtitle"]]
+[[!template text="""position numbers to actual places where the""" start="00:10:21.400" video="qanda-doc" id="subtitle"]]
+[[!template text="""error occurred, it was never exactly where I""" start="00:10:23.600" video="qanda-doc" id="subtitle"]]
+[[!template text="""suspected it would be.""" start="00:10:24.640" video="qanda-doc" id="subtitle"]]
+[[!template text="""So I found that very difficult in debugging.""" start="00:10:26.680" video="qanda-doc" id="subtitle"]]
+[[!template text="""So the only real debugging tip I have is name""" start="00:10:29.800" video="qanda-doc" id="subtitle"]]
+[[!template text="""your source blocks, even if you don't refer""" start="00:10:32.840" video="qanda-doc" id="subtitle"]]
+[[!template text="""to them later.""" start="00:10:33.480" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 0]: I think that's all the time we have on""" start="00:10:39.860" video="qanda-doc" id="subtitle"]]
+[[!template text="""stream. And I also have to drop as well.""" start="00:10:41.320" video="qanda-doc" id="subtitle"]]
+[[!template text="""But thanks again so much,""" start="00:10:42.540" video="qanda-doc" id="subtitle"]]
+[[!template text="""Mike. And folks are welcome to come here and""" start="00:10:46.160" video="qanda-doc" id="subtitle"]]
+[[!template text="""continue discussion here.""" start="00:10:47.980" video="qanda-doc" id="subtitle"]]
+[[!template text="""Thanks again.""" start="00:10:52.600" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 1]: You""" start="00:21:45.060" video="qanda-doc" id="subtitle"]]
+[[!template text="""Thank""" start="00:22:00.060" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 0]: you""" start="00:22:15.060" video="qanda-doc" id="subtitle"]]
+[[!template text="""[Speaker 1]: for""" start="00:22:28.400" video="qanda-doc" id="subtitle"]]
+[[!template text="""watching. You""" start="00:22:45.060" video="qanda-doc" id="subtitle"]]
+[[!template text="""you""" start="00:23:00.260" video="qanda-doc" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20doc%3A%20Literate%20Documentation%20with%20Emacs%20and%20Org%20Mode)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/doc-before.md b/2023/info/doc-before.md
new file mode 100644
index 00000000..8e799bc4
--- /dev/null
+++ b/2023/info/doc-before.md
@@ -0,0 +1,45 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+Actually a general-audience talk; just on the development track for scheduling purposes
+
+[[!toc ]]
+Format: 43-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="doc-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="doc-mainVideo" data="""
+00:00.000 Introduction
+00:57.760 Org Babel and literate programming
+02:14.080 This presentation
+04:53.480 Getting started
+06:55.780 README
+07:23.500 Writing a code block
+08:10.460 :results none
+08:40.320 Confirmation
+10:36.960 Running blocks automatically
+13:53.000 Export options
+16:05.700 Substituting constants
+17:25.740 Getting the properties
+20:03.060 Macros
+21:05.240 Properties in practice
+22:09.020 Using a prefix
+23:42.010 Switching distributions
+27:14.150 A tour
+30:16.200 TeX and LaTeX
+31:09.250 Other prerequisites
+32:00.060 Caching
+36:20.610 Looking at the PDF
+39:29.440 Errors
+42:31.990 Final thoughts
+
+"""]]<div></div>Duration: 42:45 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm">Download --main.webm (133MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/8ak16Qy1tjeFEqmcnan6MQ">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="doc-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="doc-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus"></audio></div><div></div>Duration: 11:00 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.json">Download --answers.json (1.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus">Download --answers.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm">Download --answers.webm (69MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/doc-nav.md b/2023/info/doc-nav.md
new file mode 100644
index 00000000..5f8eaf6b
--- /dev/null
+++ b/2023/info/doc-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/repl">REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</a>
+Next by track: <a href="/2023/talks/windows">Windows into Freedom</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/eat-after.md b/2023/info/eat-after.md
new file mode 100644
index 00000000..41bfbc90
--- /dev/null
+++ b/2023/info/eat-after.md
@@ -0,0 +1,113 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="eat-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-eat" id="subtitle"]]
+
+[[!template text="""Hello everyone. Welcome to my talk.""" start="00:00:00.000" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""I am Akib Azmain Turja and my talk is titled""" start="00:00:04.200" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""&quot;Eat and Eat-powered Eshell:""" start="00:00:09.360" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Fast, featureful terminal inside Emacs.&quot;""" start="00:00:11.520" video="mainVideo-eat" id="subtitle"]]
+
+[[!template new="1" text="""Benchmarking""" start="00:00:15.440" video="mainVideo-eat" id="subtitle"]]
+
+[[!template text="""So I just claimed that Eat is a fast terminal emulator.""" start="00:00:15.440" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Let me show you that. I will print a 1-megabyte sized file""" start="00:00:22.840" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""in the terminal using this command.""" start="00:00:33.280" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""It takes 0.76 seconds. Now let's benchmark term-mode.""" start="00:00:39.040" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""I will be in term -mode. I use the same command,""" start="00:00:47.360" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""and it's clearly the loser.""" start="00:00:54.800" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""It took 12 seconds, more than an order of magnitude slower.""" start="00:01:06.600" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Let's also measure the speed of return.""" start="00:01:18.320" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""And it took 0.79 seconds.""" start="00:01:27.280" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""But this is actually a little bit slower than Eat.""" start="00:01:33.480" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Why? That shouldn't happen.""" start="00:01:36.160" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Anyway, hopefully that shows how fast Eat is.""" start="00:01:41.800" video="mainVideo-eat" id="subtitle"]]
+
+[[!template new="1" text="""Running programs""" start="00:01:49.720" video="mainVideo-eat" id="subtitle"]]
+
+[[!template text="""So let's run some extra programs in Eat,""" start="00:01:49.720" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""like top. You can also run htop or even btop.""" start="00:01:54.440" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""There is a fancy version of top.""" start="00:02:05.640" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""And obviously you can run Emacs in it.""" start="00:02:08.560" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""There is mouse support, and there is true color support.""" start="00:02:20.240" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""You can show any color in the terminal""" start="00:02:33.880" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""as long as your main display supports it.""" start="00:02:38.800" video="mainVideo-eat" id="subtitle"]]
+
+[[!template new="1" text="""Shell integration""" start="00:02:47.080" video="mainVideo-eat" id="subtitle"]]
+
+[[!template text="""And then there is shell integration.""" start="00:02:47.080" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""For example, directory tracking.""" start="00:02:50.360" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Like, I can switch to some other directory""" start="00:02:52.400" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""and Emacs follows the shell directory.""" start="00:03:07.480" video="mainVideo-eat" id="subtitle"]]
+
+[[!template new="1" text="""Prompt annotation""" start="00:03:11.920" video="mainVideo-eat" id="subtitle"]]
+
+[[!template text="""Then there is prompt annotation,""" start="00:03:11.920" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""this column. These zeros indicate""" start="00:03:16.440" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""that the command has executed successfully.""" start="00:03:20.320" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Then you can navigate between commands like this.""" start="00:03:27.080" video="mainVideo-eat" id="subtitle"]]
+
+[[!template new="1" text="""Message passing""" start="00:03:37.680" video="mainVideo-eat" id="subtitle"]]
+
+[[!template text="""There is message passing.""" start="00:03:37.680" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""By message passing, I mean sending something""" start="00:03:39.400" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""from the terminal to the host Emacs.""" start="00:03:44.120" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""By host Emacs, I mean Emacs running the terminal.""" start="00:03:46.960" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""For example I can say &quot;hi&quot; and it's showing &quot;hi&quot;""" start="00:03:52.120" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""in this echo area of my Emacs.""" start="00:03:57.440" video="mainVideo-eat" id="subtitle"]]
+
+[[!template new="1" text="""Shell integration""" start="00:04:03.520" video="mainVideo-eat" id="subtitle"]]
+
+[[!template text="""Then let's show you the killer feature of Eat,""" start="00:04:03.520" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Eat's shell integration.""" start="00:04:08.680" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""You can run any program in it. For example: top, btop,""" start="00:04:20.240" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""and obviously Emacs itself.""" start="00:04:37.840" video="mainVideo-eat" id="subtitle"]]
+
+[[!template new="1" text="""Input modes""" start="00:04:52.160" video="mainVideo-eat" id="subtitle"]]
+
+[[!template text="""So let's discuss how to use Eat. There are four input modes.""" start="00:04:52.160" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""The first one is semi-char mode. That is the default mode.""" start="00:05:03.160" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""This is like vterm. All keys are the same to your terminal""" start="00:05:07.320" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""except these keys: C-c, C-x, C-g, M-x, etc.""" start="00:05:10.920" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""And then there is char-mode, where all keys""" start="00:05:17.880" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""are same to your terminal, except this M-RET key""" start="00:05:20.600" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""which takes you back to the semi-char mode.""" start="00:05:26.920" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Then there is Emacs mode where you can select""" start="00:05:29.680" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""and copy from the terminal buffer.""" start="00:05:34.560" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""And finally, there is line mode.""" start="00:05:39.720" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""You can use it to use your terminal like a comint buffer.""" start="00:05:42.680" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""All these input modes are available in both Eat""" start="00:05:49.200" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""and eat-eshell mode, except this line mode--""" start="00:05:56.000" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""it's only available on Eat.""" start="00:06:05.880" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""By &quot;on Eat&quot;, I mean the terminal you get""" start="00:06:10.440" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""by this eat command. By eshell, I mean""" start="00:06:13.960" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""when eat-eshell integration is enabled""" start="00:06:20.160" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""inside the eshell buffer.""" start="00:06:23.145" video="mainVideo-eat" id="subtitle"]]
+
+[[!template new="1" text="""Documentation""" start="00:06:33.760" video="mainVideo-eat" id="subtitle"]]
+
+[[!template text="""There is an info manual,""" start="00:06:33.760" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""And also the README is quite informative""" start="00:06:36.720" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""for you to get started.""" start="00:06:51.600" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""If you hit any problem,""" start="00:06:55.000" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""there is a dedicated chapter for debugging that,""" start="00:07:13.520" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""a common problems chapter.""" start="00:07:22.960" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""If your problem is still not fixed,""" start="00:07:26.120" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""please report it to me.""" start="00:07:28.000" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""This helps me improve it for everyone.""" start="00:07:29.520" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""When you report, please read this chapter""" start="00:07:36.120" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""so that you can make a better bug report.""" start="00:07:40.360" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""I am really looking forward to how people use it""" start="00:07:53.160" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""in their workflow.""" start="00:07:57.640" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""I am excited about that.""" start="00:07:59.080" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Hopefully you enjoyed my talk. That was all.""" start="00:08:03.480" video="mainVideo-eat" id="subtitle"]]
+[[!template text="""Enjoy EmacsConf. Goodbye.""" start="00:08:10.760" video="mainVideo-eat" id="subtitle"]]
+
+Questions or comments? Please e-mail [akib@disroot.org](mailto:akib@disroot.org?subject=Comment%20for%20EmacsConf%202023%20eat%3A%20Eat%20and%20Eat%20powered%20Eshell%2C%20fast%20featureful%20terminal%20inside%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/eat-before.md b/2023/info/eat-before.md
new file mode 100644
index 00000000..5620d10d
--- /dev/null
+++ b/2023/info/eat-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 9-min talk; Q&A: Etherpad
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="eat-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 08:13 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm">Download --main.webm (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/t4pPDtbXiZdHHEyWJVUtNs">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/eat-nav.md b/2023/info/eat-nav.md
new file mode 100644
index 00000000..3d8f174b
--- /dev/null
+++ b/2023/info/eat-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/parallel">Parallel text replacement</a>
+Next by track: <a href="/2023/talks/poltys">The browser in a buffer</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/emacsconf-after.md b/2023/info/emacsconf-after.md
new file mode 100644
index 00000000..d84a94cd
--- /dev/null
+++ b/2023/info/emacsconf-after.md
@@ -0,0 +1,3170 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="emacsconf-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""Hi, I'm Sacha Chua. This presentation is a quick tour""" start="00:00:00.000" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""of some of the things we do to run EmacsConf.""" start="00:00:04.840" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Since 2019, we've run it as an entirely online conference,""" start="00:00:07.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and we do as much of the organization as possible""" start="00:00:12.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""within Emacs itself.""" start="00:00:14.700" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Reasons""" start="00:00:16.580" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""I have three reasons for making this presentation.""" start="00:00:16.580" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The first is entirely selfish: I need to figure out""" start="00:00:19.760" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""all the stuff I built for last year's EmacsConf,""" start="00:00:22.760" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""since it was a bit of a crazy scramble.""" start="00:00:25.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The second is that I want to show people""" start="00:00:28.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""the process of thinking about a complex project,""" start="00:00:30.160" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""looking for little things to automate in Emacs,""" start="00:00:33.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and building things up from small pieces.""" start="00:00:35.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Maybe you'll get some ideas""" start="00:00:38.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and start building tools for yourself, too.""" start="00:00:39.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The third is that you find any of these little tools interesting,""" start="00:00:42.760" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I want to point you to blog posts and source code""" start="00:00:47.040" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""where you can find out more.""" start="00:00:49.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""That way, you don't need to try""" start="00:00:51.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to read and understand everything quickly.""" start="00:00:52.560" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""You can find this presentation and other links""" start="00:00:55.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""on the talk page at emacsconf.org/2023/talks/emacsconf.""" start="00:00:57.720" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""There are a lot of different parts,""" start="00:01:04.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so I'll try to use this map to help make sense of it all.""" start="00:01:06.320" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Information""" start="00:01:09.400" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""There's so much information to work with,""" start="00:01:09.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so it probably doesn't surprise you that we use Org Mode a lot.""" start="00:01:11.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Most of the conference coordination happens over e-mail,""" start="00:01:14.920" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""which I can quickly search with notmuch.""" start="00:01:18.000" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Some of the information is private,""" start="00:01:20.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""like emergency contact numbers.""" start="00:01:22.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We store the talk information in a private Org file.""" start="00:01:24.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I try to put as much as possible""" start="00:01:28.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""into our public organizers' notebook""" start="00:01:30.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so that processes and decisions are documented.""" start="00:01:32.320" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We need a public website.""" start="00:01:35.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We use Ikiwiki to make the webpages""" start="00:01:36.920" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""because we can work with plain text files""" start="00:01:39.040" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""in a Git repository.""" start="00:01:41.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We also make a few static HTML pages""" start="00:01:42.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""for things where Ikiwiki is a little awkward.""" start="00:01:45.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We post announcements to mailing lists.""" start="00:01:48.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We also receive submissions in a private mailing list""" start="00:01:50.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so that a number of people can review them.""" start="00:01:53.160" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We have a backstage area""" start="00:01:55.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""for sharing files with volunteers and speakers.""" start="00:01:56.840" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We share those files publicly when the talk goes live.""" start="00:01:59.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""And there's all the other stuff that goes into running EmacsConf,""" start="00:02:03.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""like shell scripts and configuration files.""" start="00:02:06.320" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Properties""" start="00:02:09.160" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""First, speakers propose a talk by sending an e-mail.""" start="00:02:09.160" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We take the info from that e-mail and store it in Org properties""" start="00:02:12.320" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so that we can work with it later.""" start="00:02:15.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Every talk is identified with an ID,""" start="00:02:18.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""but since `:ID:` and `:CUSTOM_ID:` have special meanings for Org,""" start="00:02:20.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I use `:SLUG:` as the keyword.""" start="00:02:24.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Speakers' names go into the `:NAME:` property,""" start="00:02:25.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and a short version goes into `:NAME_SHORT:`""" start="00:02:27.760" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so that we can include that in a greeting.""" start="00:02:29.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""If people follow the template closely...""" start="00:02:32.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""...we can even automatically fill in the Org subtree for their talk.""" start="00:02:34.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We can use regular expressions to recognize the text""" start="00:02:38.040" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and extract the properties.""" start="00:02:40.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Other properties need to be set by hand.""" start="00:02:42.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I often mess things up when I retype them.""" start="00:02:45.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""To avoid typos, I have a function that sets a property""" start="00:02:47.560" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""based on the current region. I bind that to `C-c C-x p`.""" start="00:02:51.040" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""That makes it much easier to set properties""" start="00:02:56.040" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""that couldn't automatically be recognized.""" start="00:02:58.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Sometimes it makes sense to dynamically generate a property""" start="00:03:01.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and then edit it, like with filenames.""" start="00:03:04.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We like to name all the talk files the same way,""" start="00:03:07.680" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""but sometimes special characters in talk titles or speaker names""" start="00:03:10.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""need a little tweaking. I'll put that in a `:FILE_PREFIX:` property""" start="00:03:14.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so I can edit it.""" start="00:03:17.840" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""An Org property match can map over all the talk entries""" start="00:03:19.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""that don't have `:FILE_PREFIX:` defined.""" start="00:03:22.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We can use that `:FILE_PREFIX:` to rename files from Emacs.""" start="00:03:25.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""With that property, we can then rename files using that prefix,""" start="00:03:29.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""some extra text, and the file extension.""" start="00:03:32.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Sometimes it's easier to work with the data outside Emacs,""" start="00:03:35.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""like when I want to rename files with a shell script.""" start="00:03:38.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""If I export a subset of the data as JSON""" start="00:03:42.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""or JavaScript Object Notation, using `json-encode`...""" start="00:03:45.320" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""... then I can extract the data with `jq`""" start="00:03:48.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and use it in shell scripts.""" start="00:03:51.120" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Timezones""" start="00:03:53.120" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""Another example of semi-structured information""" start="00:03:53.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""is speaker availability.""" start="00:03:55.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We have speakers from all over the world,""" start="00:03:57.300" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so we try to schedule live Q&A sessions when they're around.""" start="00:03:59.620" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""That means working with timezones.""" start="00:04:03.020" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Completion makes it much easier to set the timezone property""" start="00:04:05.020" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""without worrying about typos.""" start="00:04:08.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We can take advantage of the timezone list from the tzc package,""" start="00:04:10.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""which works with Unix timezone definitions.""" start="00:04:14.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Then we can convert times using Emacs.""" start="00:04:17.160" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Using a standard format to encode the availability""" start="00:04:19.920" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""makes it easier to parse.""" start="00:04:22.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I can use those availability constraints to report errors""" start="00:04:24.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""when I'm experimenting with the schedule.""" start="00:04:27.440" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Scheduling""" start="00:04:29.720" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""Now that I have the availability information,""" start="00:04:29.720" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I can think about scheduling.""" start="00:04:31.680" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""When we were planning EmacsConf 2022, the schedule was so full,""" start="00:04:33.941" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I wanted to see if we could make it more manageable""" start="00:04:38.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""by splitting it up into two tracks.""" start="00:04:40.840" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""It was hard to think about times with just a table.""" start="00:04:43.040" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I was able to turn the schedule information""" start="00:04:45.920" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""into an SVG to convince the other organizers""" start="00:04:48.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to get on board with this crazy plan.""" start="00:04:51.280" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""And the nice thing about SVGs is that""" start="00:04:53.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""they can even be clickable on the wiki.""" start="00:04:54.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Being able to quickly make SVGs of different schedules""" start="00:04:57.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""also helped me test scheduling ideas and think out loud.""" start="00:05:00.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I could change the time between talks, the order of the talks,""" start="00:05:04.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and even what tracks the talks were in.""" start="00:05:06.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""This was helpful when I needed to include""" start="00:05:08.940" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""some late submissions or availability changes""" start="00:05:10.720" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and I wanted to ask speakers what they thought.""" start="00:05:13.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""They could see the different schedule options themselves.""" start="00:05:15.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""It's really nice to have Emacs Lisp support for working with SVGs.""" start="00:05:18.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I also love how I can have an Emacs Lisp block""" start="00:05:22.680" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""in an Org Mode document that updates an SVG""" start="00:05:25.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""that I can view right there in my text editor.""" start="00:05:28.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Setting the timezone lets me automatically translate times""" start="00:05:32.000" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to the speaker's local timezone when I e-mail them.""" start="00:05:34.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""That's mostly a matter of using `format-time-string` with a timezone.""" start="00:05:37.820" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Templates""" start="00:05:41.780" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""There's a lot of text to work with,""" start="00:05:41.780" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""which means templates are super handy.""" start="00:05:43.160" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""There are a number of templating functions for Emacs Lisp,""" start="00:05:45.700" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""like the built-in `tempo.el` or `s-lex-format` from `s.el`.""" start="00:05:48.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I ended up writing something""" start="00:05:52.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""that works with property lists (plists) instead,""" start="00:05:54.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""since we use plists all over the emacsconf-el library.""" start="00:05:58.020" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""All it does is replace `${variable}`""" start="00:06:02.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""with the value from a property list.""" start="00:06:04.000" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I use this mostly because I have a hard time""" start="00:06:05.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""keeping track of which `%s` is which when I use `format`,""" start="00:06:07.560" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and it's hard to get an overall view if I just use `concat`.""" start="00:06:11.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The code looks for the properties and replaces them with the values.""" start="00:06:14.300" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I just find it a little easier to think about sometimes.""" start="00:06:17.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Getting all the information is just a matter of going over""" start="00:06:21.300" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""all the talk entries using `org-map-entries`.""" start="00:06:24.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""This builds the talk info by running a bunch of functions.""" start="00:06:27.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Some functions get the information from the Org file.""" start="00:06:30.700" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Other functions use the info already collected.""" start="00:06:33.820" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""This can take a while to do again and again.""" start="00:06:36.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""It's useful to `memoize` this function""" start="00:06:39.260" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""when I know I'll be using it a lot,""" start="00:06:41.740" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""like when I export the organizers notebook.""" start="00:06:43.500" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Memoize caches recent values.""" start="00:06:45.960" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Wiki""" start="00:06:48.400" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""We combine this templating function""" start="00:06:48.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""with the talk information""" start="00:06:50.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to fill in the conference wiki,""" start="00:06:51.480" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""since that's a matter of writing templated strings to files.""" start="00:06:53.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The talk pages are generated once""" start="00:06:56.480" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and then left alone for manual editing,""" start="00:06:58.280" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""while the navigation is regenerated""" start="00:07:00.280" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""every time we change the details.""" start="00:07:02.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Here are some examples""" start="00:07:04.660" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""of how we fill in the conference wiki.""" start="00:07:05.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We put in the format of the talk, how Q&A works,""" start="00:07:07.920" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and what the status is.""" start="00:07:10.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Once the talk is live, we include the video""" start="00:07:12.320" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and the links to the files, too.""" start="00:07:14.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The code is a little bit long,""" start="00:07:17.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""but the important part is that""" start="00:07:18.720" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""we fill in a plist with the values we calculate,""" start="00:07:20.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and then we can use `emacsconf-replace-plist-in-string`""" start="00:07:22.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to put that all together.""" start="00:07:26.380" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The schedule is a little more complicated.""" start="00:07:28.020" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I wrote an Ikiwiki directive""" start="00:07:30.280" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so that the markup is more manageable,""" start="00:07:32.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and the Emacs Lisp function uses that.""" start="00:07:34.020" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The Ikiwiki directive takes all the data and turns it into HTML...""" start="00:07:36.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""...so we can use Emacs Lisp to iterate over""" start="00:07:40.620" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""a slightly smaller property list""" start="00:07:42.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and put them into the format Ikiwiki expects.""" start="00:07:44.820" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""It's nice to be able to navigate between talks""" start="00:07:47.780" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""without going back to the schedule page each time.""" start="00:07:50.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""This is handled by keeping two extra copies of the list:""" start="00:07:52.840" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""one with the first talk popped off,""" start="00:07:55.580" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and one with an extra element added to the beginning.""" start="00:07:57.560" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Then we can use the heads of those lists""" start="00:08:00.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""for next/previous links.""" start="00:08:02.440" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Etherpad""" start="00:08:04.380" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""Links to the next talks are also handy""" start="00:08:04.380" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""on the collaborative Etherpad documents""" start="00:08:06.680" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""that we use for collecting questions, answers, and notes""" start="00:08:08.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""during each talk.""" start="00:08:12.040" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Etherpad has an API...""" start="00:08:12.840" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""...so I can start the pads off with a template""" start="00:08:15.300" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""before the conference.""" start="00:08:17.320" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I don't want to accidentally overwrite a pad""" start="00:08:18.940" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""that has been manually edited.""" start="00:08:21.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We can save the timestamp of the last modification""" start="00:08:22.940" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and then compare it before overwriting.""" start="00:08:25.720" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""E-mail""" start="00:08:28.200" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""Templates are also very handy when it comes to e-mail.""" start="00:08:28.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Sometimes we send e-mails one at a time,""" start="00:08:31.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""like when we let a speaker know""" start="00:08:33.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""that we've received their proposal.""" start="00:08:35.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""That's mostly a matter of plugging the talk's properties""" start="00:08:36.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""into the right places in the template.""" start="00:08:39.560" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Sometimes we send e-mails to lots of speakers at the same time,""" start="00:08:41.560" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""like when we send them instructions for uploading their files.""" start="00:08:45.020" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Instead of sending one e-mail and Bcc-ing everyone,""" start="00:08:48.300" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""or sending people multiple e-mails""" start="00:08:51.620" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""because they have multiple talks,""" start="00:08:53.480" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I like to draft these as individual e-mails""" start="00:08:55.140" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to each speaker (or group of speakers,""" start="00:08:57.560" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""if more than one person is associated with a talk).""" start="00:08:59.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""That gives me an opportunity to personalize it further.""" start="00:09:02.600" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""BigBlueButton web conferences""" start="00:09:05.920" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""Many speakers answer questions live""" start="00:09:05.920" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""in BigBlueButton web conference rooms.""" start="00:09:08.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Setting up one room per group of speakers""" start="00:09:10.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""makes it easy to give the speakers the details""" start="00:09:12.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and associate the recorded video with the talk afterwards.""" start="00:09:15.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""For EmacsConf 2023,""" start="00:09:18.720" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I used Spookfox to control Mozilla Firefox from Emacs""" start="00:09:20.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so that I could automate creating the rooms""" start="00:09:25.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and adding the URLs to the talk properties in my Org file.""" start="00:09:27.480" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Then I can use mail merge to send each speaker""" start="00:09:30.957" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""the check-in instructions for their specific room.""" start="00:09:33.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Some speakers will take questions by e-mail""" start="00:09:36.900" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""after the conference instead of attending live,""" start="00:09:39.140" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so we send them shorter instructions""" start="00:09:41.620" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""just in case they want to drop by.""" start="00:09:43.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""[Live Q&A sessions]: After the first rush of questions,""" start="00:09:45.540" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""we can open it up for other people to join.""" start="00:09:47.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""This is handled by changing the public page""" start="00:09:50.580" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""from one that just refreshes in a loop""" start="00:09:53.040" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to one that redirects to the actual web conference room.""" start="00:09:55.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Just in case, we also""" start="00:09:58.821" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""generate static copies of those redirects""" start="00:10:00.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so that we can copy them if needed.""" start="00:10:02.160" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""That way, I don't have to count on Emacs being able to""" start="00:10:04.300" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""publish them over TRAMP.""" start="00:10:06.680" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Shortcuts""" start="00:10:08.121" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""During the conference, I'm often jumping from talk to talk.""" start="00:10:08.121" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Instead of going to the Org file""" start="00:10:11.660" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and then searching for the talk,""" start="00:10:13.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I've made a little Hydra with keyboard shortcuts.""" start="00:10:14.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""One of these shortcuts lets me""" start="00:10:17.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""jump to a talk with completion""" start="00:10:19.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so that I can just type in part of the talk ID,""" start="00:10:20.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""title, or speaker name.""" start="00:10:24.260" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I've also defined some Embark actions""" start="00:10:26.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so that I can act on a talk right from the completion menu.""" start="00:10:28.680" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""For example, I might want to jump to the wiki page""" start="00:10:32.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""or e-mail the speaker.""" start="00:10:35.080" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Logbook""" start="00:10:36.700" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""I can also add notes to a talk while looking at an email,""" start="00:10:36.700" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""like when a speaker lets me know""" start="00:10:40.100" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""that their video will be late.""" start="00:10:41.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Making it easy to add a note turns Emacs into""" start="00:10:43.280" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""a very basic contact relationship management system, or CRM.""" start="00:10:45.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The way this works is that we have a function""" start="00:10:49.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""that lists all the email addresses associated with a talk.""" start="00:10:52.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We can then map that over the list of talks,""" start="00:10:55.460" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""look up the author of the current email,""" start="00:10:57.920" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""prompt the user for the talk to add the note to, and add the note.""" start="00:10:59.960" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Captions""" start="00:11:03.680" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""On to captions.""" start="00:11:03.680" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We've been doing captions for the last couple of years,""" start="00:11:04.680" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and now we have a small army of volunteer captioners.""" start="00:11:07.240" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""They get early access to the recorded talks""" start="00:11:10.420" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and fix up misrecognized words, format keyboard shortcuts""" start="00:11:12.680" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to follow Emacs conventions, spell names correctly,""" start="00:11:16.160" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and do all sorts of other wonderful things.""" start="00:11:19.580" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""One of our evil plans with EmacsConf""" start="00:11:21.840" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""is to get cool stuff out of people's heads into videos""" start="00:11:24.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and also make captions so that those videos can be searched.""" start="00:11:28.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""To make that possible, we first need a backstage area""" start="00:11:32.040" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""where volunteers can get the files.""" start="00:11:35.000" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""This is just a simple password-protected directory""" start="00:11:36.920" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""with a static HTML page that lists the talks by status""" start="00:11:39.840" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and shows the files related to each talk.""" start="00:11:43.740" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""As a talk moves through the process, I update its TODO state""" start="00:11:46.380" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and republish this index.""" start="00:11:49.900" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Talks that are ready to be captioned show up in that section,""" start="00:11:51.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and volunteers can call dibs on the talk they're interested in.""" start="00:11:54.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""That's all done with a function that formats the information""" start="00:11:58.180" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and uses TRAMP to save the file directly to the server.""" start="00:12:00.980" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""You can find more details on our captioning process""" start="00:12:04.320" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""at emacsconf.org/captioning.""" start="00:12:06.680" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I like using subed to edit subtitles within Emacs.""" start="00:12:09.040" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Crontabs and playing the talks""" start="00:12:13.220" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""Let's talk about actually playing the talks.""" start="00:12:13.220" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""For EmacsConf 2022, we tried using Emacs timers""" start="00:12:16.060" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to run the talks.""" start="00:12:19.560" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""It turns out that you can't call TRAMP from a timer""" start="00:12:20.940" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""when you're already using TRAMP from another timer""" start="00:12:24.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""at the same time.""" start="00:12:26.720" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I thought about just tweaking the schedule""" start="00:12:27.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so that we always start things at different times,""" start="00:12:29.720" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""but I figured there's probably a more elegant way to do this.""" start="00:12:31.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""This year, I'm planning to experiment with using cron""" start="00:12:35.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to start talks on autopilot.""" start="00:12:37.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The shell scripts will take care of playing the videos...""" start="00:12:39.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""... figuring out the appropriate Q&A...""" start="00:12:42.480" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""... and joining the web conference if needed.""" start="00:12:44.840" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We just need to format the information...""" start="00:12:47.580" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""...and install it as the track's crontab.""" start="00:12:49.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""It's useful to be able to switch tracks""" start="00:12:52.220" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to manual mode independently,""" start="00:12:54.080" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""just in case things go haywire.""" start="00:12:55.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Then we can start everything manually.""" start="00:12:57.900" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""I can also manually update a talk's status,""" start="00:13:00.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""like when the host tells me that it's okay to open up the Q&A.""" start="00:13:02.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The shell scripts we run from the crontab""" start="00:13:06.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""can also update the talk status themselves.""" start="00:13:08.720" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Transitions""" start="00:13:11.280" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""Then a bunch of things automatically happen based on""" start="00:13:11.280" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""the talk status changes.""" start="00:13:14.320" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""This uses `org-after-todo-state-change-hook`.""" start="00:13:15.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We get the talk information""" start="00:13:18.960" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and pass it to a list of functions.""" start="00:13:20.360" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Internet Relay Chat or IRC is an easy way for people""" start="00:13:22.520" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to join the conversation around EmacsConf.""" start="00:13:26.280" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""We announce a talk whenever it changes state.""" start="00:13:29.140" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""For example, when a talk starts,""" start="00:13:31.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""we post the URLs to the talk webpage""" start="00:13:33.600" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and the Etherpad for questions. We change the topic as well,""" start="00:13:36.040" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""so anyone can see the current talk's information""" start="00:13:39.440" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""even if they're a little late.""" start="00:13:41.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""This is easy to do with a little bit of Emacs Lisp""" start="00:13:43.180" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""because (of course!) Emacs has an IRC client.""" start="00:13:45.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""In fact, it has several.""" start="00:13:48.520" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template new="1" text="""Wrapping up""" start="00:13:49.880" video="mainVideo-emacsconf" id="subtitle"]]
+
+[[!template text="""It seems like a lot of automation and Emacs Lisp,""" start="00:13:49.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""but really, all of this was just built up little by little.""" start="00:13:53.140" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""And tinkering with this is *fun*, you know?""" start="00:13:56.900" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""It's like always being able to ask,""" start="00:13:59.280" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""&quot;Hey, wouldn't it be cool if...&quot;""" start="00:14:01.260" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and then actually being able to go and do it.""" start="00:14:03.301" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Sometimes it feels like EmacsConf is an excuse""" start="00:14:05.280" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""for me to play with Emacs.""" start="00:14:08.000" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""It's pretty amazing what you can do""" start="00:14:10.200" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""by combining a bunch of pieces.""" start="00:14:12.000" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""A way to store slightly-structured information.""" start="00:14:13.800" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""A way to get it out again. Templates.""" start="00:14:16.720" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""TRAMP, for working with remote files""" start="00:14:18.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and running remote commands.""" start="00:14:20.680" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""A way to talk to a web browser.""" start="00:14:21.920" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""A way to work with SVGs.""" start="00:14:23.840" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""An email client. A chat client.""" start="00:14:25.400" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""You can smoosh them all together""" start="00:14:27.760" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""in a way that you couldn't if they were all separate things.""" start="00:14:29.640" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The code is in the emacsconf-el repository.""" start="00:14:32.700" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""It's a bit of a tangle because it's accumulating organically""" start="00:14:36.280" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""and I haven't really had the brainspace""" start="00:14:39.120" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""to step back and clean it up.""" start="00:14:40.880" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""But if you spotted anything interesting in this presentation,""" start="00:14:42.580" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""you can go check it out and see what you can scavenge.""" start="00:14:45.920" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""The link and this presentation are available""" start="00:14:48.620" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""from this talk's webpage at emacsconf.org/2023/talks/emacsconf .""" start="00:14:51.000" video="mainVideo-emacsconf" id="subtitle"]]
+[[!template text="""Let's figure out how to make Emacsconf even awesomer next year!""" start="00:14:59.120" video="mainVideo-emacsconf" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+<a name="emacsconf-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: All right. I have unmuted.""" start="00:00:53.489" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's been a while since I've actually done an""" start="00:00:59.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""actual presentation. Hi.""" start="00:01:05.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Okay. I'm going to deafen myself and mumble""" start="00:01:08.979" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so that I don't get distracted by backstage""" start="00:01:12.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""chatter. Hello, everyone! Okay,""" start="00:01:16.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so where are we? Questions,""" start="00:01:17.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""questions, questions. Okay,""" start="00:01:20.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""how easy would it be for someone else to""" start="00:01:23.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""reuse the Emacs conf strips and config to do""" start="00:01:25.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a conf of their own? Like everything else,""" start="00:01:29.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I have no idea if things actually work until""" start="00:01:32.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""somebody does it for, you know,""" start="00:01:35.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to get everything to run on a computer that""" start="00:01:37.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""isn't my computer and with assumptions that""" start="00:01:40.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""aren't my assumptions.""" start="00:01:40.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So, I have no idea. But optimistically,""" start="00:01:42.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I have put most of the EmacsConf things,""" start="00:01:46.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like EmacsConf, the name of the conference""" start="00:01:48.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and things like that in variables.""" start="00:01:50.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So if theoretically someone were to run an""" start="00:01:53.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""org mode conference or something like that,""" start="00:01:56.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it might be possible to reuse all this code.""" start="00:01:58.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We'll see. I don't know if it's going to be""" start="00:02:01.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""easy. I don't even know if it's going to be""" start="00:02:03.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""possible, but it might be fun to try.""" start="00:02:04.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""What tools would I like to exist in Emacs""" start="00:02:09.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""land to help with preparing the conference""" start="00:02:11.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""next time? Well, I've already been thinking""" start="00:02:15.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about adjustments that I want to make to""" start="00:02:18.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sub-eds so that the audio synchronization""" start="00:02:21.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""issues that we sometimes have with FFmpeg can""" start="00:02:24.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""be something that I can flag and maybe fix""" start="00:02:26.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""even while I'm watching a video.""" start="00:02:29.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But also as much as possible,""" start="00:02:32.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I like to leave the actual FFMPEG audio and""" start="00:02:36.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""visual tinkering with to other people like""" start="00:02:39.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Leo, whose patience is slightly more than""" start="00:02:41.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""mine, because audio is,""" start="00:02:44.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I still don't have the patience to sit for""" start="00:02:47.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it. You can tell I talk really,""" start="00:02:48.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""really quickly. I'm still trying to squeeze""" start="00:02:50.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everything into however little focus time I""" start="00:02:53.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""actually have. So it would be kind of nice to""" start="00:02:56.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""use that. Emacs is already doing quite a ton""" start="00:03:00.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and stuffing more multimedia processing and""" start="00:03:04.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other fun things into it might be""" start="00:03:06.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interesting. Who knows?""" start="00:03:07.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Oh, the other thing that I would really love""" start="00:03:09.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to have that people always ask for is a way""" start="00:03:12.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""from Emacs to interact with the Etherpad.""" start="00:03:15.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""The Etherpad API, it seems very granular.""" start="00:03:18.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Like, you can set the HTML of a pad,""" start="00:03:21.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but you can't actually just append stuff to""" start="00:03:22.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it. And I was trying to get something that""" start="00:03:24.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""could take questions from IRC and""" start="00:03:26.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""automatically push them into the pad,""" start="00:03:28.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""even from an ERC bot or whatever,""" start="00:03:30.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but no go. If someone were to figure out some""" start="00:03:34.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""CRDT thing where we can collaboratively edit""" start="00:03:38.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the document, that I think is the number 1""" start="00:03:41.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""request that people always have around""" start="00:03:42.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""EmacsConf. That would be really cool to do""" start="00:03:46.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""more of the conference itself from within""" start="00:03:48.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs. I don't know if actually,""" start="00:03:53.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""well, we have an org file now that launches""" start="00:03:55.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the MPV from Emacs. But if you want to have""" start="00:03:59.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""an ex-widget or something else watching the""" start="00:04:01.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference from within Emacs itself.""" start="00:04:03.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think that will also be really cool.""" start="00:04:05.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yes. And then other fun stuff.""" start="00:04:09.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""OK, how can speakers and viewers help make""" start="00:04:12.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""preparing for next year's Emacs Conf even""" start="00:04:15.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""more fun for the organizers?""" start="00:04:16.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Well, I love it when not only do the speakers""" start="00:04:20.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""do all that work to prepare their talk,""" start="00:04:24.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but lately people have actually even been""" start="00:04:27.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""volunteering to caption their own talks.""" start="00:04:29.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And that's great because then they know the""" start="00:04:33.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""words that they use. And if I can show them""" start="00:04:36.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the workflow that we have so that they can do""" start="00:04:39.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it very efficiently, because there's all""" start="00:04:41.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""these wonderful things that I do now with""" start="00:04:44.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Subweb Waveform and Aeneas for like the""" start="00:04:48.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""forced alignment so we can get timestamps""" start="00:04:49.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""from text and all these other fun things that""" start="00:04:53.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""make getting a transcript or editing the""" start="00:04:55.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""captions fun and easy.""" start="00:04:57.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That makes it easier for not only speakers to""" start="00:05:00.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""contribute captions for their own talks,""" start="00:05:02.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but also interested volunteers who,""" start="00:05:05.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""as mentioned, get early access to all the""" start="00:05:07.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talks and can watch them at leisure.""" start="00:05:09.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And it's, you know, nice prick there.""" start="00:05:12.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Definitely should try that.""" start="00:05:13.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I do have some sample videos of how we use""" start="00:05:19.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""subed. But of course, in the process of""" start="00:05:21.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""shoving like 30 or 40 talks,""" start="00:05:24.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""maybe 30 talks through it for EmacsConf,""" start="00:05:26.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this is like the stress test season for""" start="00:05:29.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""subed, which is great,""" start="00:05:30.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I ended up adding more features.""" start="00:05:31.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So 1 of my big to-dos afterwards is I have to""" start="00:05:36.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""document the different workflows for things""" start="00:05:38.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like, okay, you've got a script.""" start="00:05:40.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You can use WDiff to get word diffs so you""" start="00:05:43.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""can take the subtitles and compare them with""" start="00:05:45.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the original script and see where the""" start="00:05:47.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""misrecognized words are.""" start="00:05:48.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And that's great. Or you can use SubWeb""" start="00:05:52.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Waveform to start adjusting things.""" start="00:05:54.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Or for example, if there's a synchronization""" start="00:05:56.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""issue, I can now middle click on a subtitle""" start="00:06:01.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""where I want the subtitle to actually start""" start="00:06:03.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then move all the subtitles to start at""" start="00:06:06.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that point. So it's getting to be a really""" start="00:06:09.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""elaborate tool. And I definitely need to""" start="00:06:10.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""document that and stick all the blog post""" start="00:06:15.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""links into the readme so that people can find""" start="00:06:17.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this in the future. So it's very,""" start="00:06:20.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""very nifty. And the reason why we do this is""" start="00:06:23.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because, well, personally,""" start="00:06:24.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I have a hard time sitting and watching""" start="00:06:26.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""videos. I like to be able to just jump to the""" start="00:06:28.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interesting parts or watch it at 3 times""" start="00:06:31.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""speed, which MPV lets me do.""" start="00:06:33.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And the text makes it a lot more searchable,""" start="00:06:36.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which is fantastic. And also because,""" start="00:06:38.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, if you've got all these interesting""" start="00:06:41.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""variable names and key bindings and whatever,""" start="00:06:44.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and the automatic subtitles just don't do the""" start="00:06:47.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right thing. So it's nice that people do the""" start="00:06:49.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""captioning. So, yeah, so that's 1 thing that""" start="00:06:53.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people can help with. Captioning is always""" start="00:06:55.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""very interesting. And the other thing that""" start="00:06:57.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people can do is take the inspiration that""" start="00:07:00.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you get from EmacsConf and from the ideas""" start="00:07:02.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that you have when you're working with Emacs,""" start="00:07:04.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and suggest talks for next year's EmacsConf.""" start="00:07:07.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And it doesn't have to be a super fancy,""" start="00:07:09.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""nobody else needs to go out and do a really""" start="00:07:13.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""professional-looking video.""" start="00:07:14.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Even though Howard has set the bar this you""" start="00:07:17.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""know it's pretty high you don't have to do""" start="00:07:19.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that kind of thing it can be just you in a""" start="00:07:22.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""screen or even just a screen and you talking""" start="00:07:24.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about this cool thing that you learned and""" start="00:07:27.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""they could be a video or it could be a blog""" start="00:07:29.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""post it could be something else and that""" start="00:07:31.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""those those things are fantastic because they""" start="00:07:34.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""inspire people to see what's possible with""" start="00:07:36.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs. So that's another big thing that""" start="00:07:39.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people can do to help.""" start="00:07:40.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And then there's sharing the word about it.""" start="00:07:44.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So if you saw something that you really like,""" start="00:07:46.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""if you write a blog post about it or a tweet""" start="00:07:48.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or a toot or whatever else you want to do,""" start="00:07:51.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you make a reaction video,""" start="00:07:52.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that helps other people discover that stuff""" start="00:07:55.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""not just today, not just next week,""" start="00:07:57.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but you know even later as they search for""" start="00:08:00.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""these words that as people search for ideas""" start="00:08:04.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""using words that are not necessarily the ones""" start="00:08:07.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in the video, you describing things in other""" start="00:08:10.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""ways helps with the search engine""" start="00:08:11.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""optimization, you're not really,""" start="00:08:13.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's just people finding stuff,""" start="00:08:15.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which is amazing. So yes,""" start="00:08:17.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""please write about the cool things that""" start="00:08:19.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you've seen and what you'd like to tell other""" start="00:08:22.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people about. Suggesting ideas for talks.""" start="00:08:25.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yes. Making talks. All sorts of wonderful""" start="00:08:30.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things. OK. Could you elaborate on the""" start="00:08:35.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""workflow that goes on in your mind for when""" start="00:08:37.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""approaching these things?""" start="00:08:38.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Do you start with an Emacs org solution right""" start="00:08:40.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""off the bat at this point when faced with a""" start="00:08:42.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""task? Are there some conscious steps involved""" start="00:08:44.059" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""from early ideas to automation of the kind""" start="00:08:46.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you just showed? Mostly it starts with,""" start="00:08:48.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""okay, we got to do this thing.""" start="00:08:50.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I have this to-do. And sometimes,""" start="00:08:53.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like in the week before the conference,""" start="00:08:55.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I have to think, okay,""" start="00:08:57.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is this a top priority thing that I can do""" start="00:09:00.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""before the conference,""" start="00:09:01.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or is it something that I can,""" start="00:09:03.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I, I, like we can still do the conference""" start="00:09:05.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""without doing so I have to just postpone it""" start="00:09:08.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""until afterwards? So some prioritization""" start="00:09:09.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""happens. But a lot of times it's like,""" start="00:09:12.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""okay, you know, like this,""" start="00:09:13.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there's a thing that I need to do here.""" start="00:09:14.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know how to figure it out,""" start="00:09:15.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""let me start an org Babble block and start""" start="00:09:18.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sketching out something,""" start="00:09:19.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, custom function or whatever else,""" start="00:09:22.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then say okay, you know,""" start="00:09:23.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hey, that looks kind of useful,""" start="00:09:25.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""let me see if I can generalize that,""" start="00:09:27.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then let me stick it into the library so""" start="00:09:29.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that I can find it next year.""" start="00:09:30.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And that's basically how it goes.""" start="00:09:33.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It just goes, it just like,""" start="00:09:35.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I have a thing that I need to do.""" start="00:09:37.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""If it's, if I'm going to do it more than""" start="00:09:40.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""once, or actually even if I'm going to do it,""" start="00:09:42.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, once I tried to automate it just so""" start="00:09:44.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that I can understand it and,""" start="00:09:46.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then I can, I can,""" start="00:09:47.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can squeeze it into like the 15 minutes I""" start="00:09:50.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""actually have and I can pause and I can pick""" start="00:09:54.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it up again and the code is still there and""" start="00:09:56.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""my notes are still there?""" start="00:09:57.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And then every little bit of the,""" start="00:10:00.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""every little step like that builds up.""" start="00:10:03.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I can write a short function today,""" start="00:10:05.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then tomorrow when the kid was asleep,""" start="00:10:07.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can write a little bit more of that.""" start="00:10:09.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And so it just goes on from there.""" start="00:10:11.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And then I just stuff that all in there.""" start="00:10:14.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""How well does this approach allow for other""" start="00:10:17.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""organisers to do individual customisations to""" start="00:10:19.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""their liking while still being able to""" start="00:10:21.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""collaborate effectively?""" start="00:10:22.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We've actually split things up fairly neatly""" start="00:10:25.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in the sense that for this year,""" start="00:10:28.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for example, most everyone else was super""" start="00:10:30.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""busy, so I did all the heavy lifting up until""" start="00:10:34.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people were available and then they jumped in""" start="00:10:37.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""with the audio normalization.""" start="00:10:38.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Thank you very much, Leo,""" start="00:10:39.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for doing all of that stuff and the hosting""" start="00:10:41.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and all the other things.""" start="00:10:42.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I tend to do most of the Emacs list""" start="00:10:45.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""fiddling with and the shell scripting and""" start="00:10:48.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""stuff like that, aside from the FFmpeg""" start="00:10:49.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""incantations, which are too arcane for me to""" start="00:10:53.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""even think about. And then in the course of""" start="00:10:56.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""watching me deal with like,""" start="00:10:57.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""oh, no, this video is not playing.""" start="00:10:59.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And then they see the commands that I'm""" start="00:11:01.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""using, like play and then,""" start="00:11:04.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, play a world,""" start="00:11:05.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which is the ideas of the talk that we were""" start="00:11:08.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""having a hard time with or MPD or whatever.""" start="00:11:10.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Then the other organizers kind of just pick""" start="00:11:13.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that up by osmosis, because We didn't even""" start="00:11:15.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""have time to do dry runs for training this""" start="00:11:17.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""year. So it's just there's not much""" start="00:11:20.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""collaboration in the sense that I'm just""" start="00:11:22.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""basically saying, OK, these are the scripts""" start="00:11:24.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that I'm going to write for myself.""" start="00:11:25.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And you all figure out how to work with that.""" start="00:11:28.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""What was the hardest problem you encountered""" start="00:11:34.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in organizing or running the conference this""" start="00:11:37.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""year and how do you deal with it?""" start="00:11:38.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Oh, the constant, constant problem with""" start="00:11:40.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""e-mails. There's so many amazing ideas.""" start="00:11:43.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I want to fit into the time.""" start="00:11:45.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And then afterwards, like,""" start="00:11:46.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sasha, do not mess with production the day""" start="00:11:49.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""before the conference.""" start="00:11:50.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You're going to save that for after the""" start="00:11:52.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference, right? So that's the hardest""" start="00:11:54.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""part, is just saying, OK,""" start="00:11:56.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yes, that's an idea. I'm going to put that in""" start="00:11:58.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the inbox. We're going to maybe get to that""" start="00:12:01.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""next year. But right now,""" start="00:12:03.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""these are the things that I need to do in""" start="00:12:05.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""order to get the conference off the ground""" start="00:12:07.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""reasonably in a reasonable amount of time.""" start="00:12:14.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So earlier in the conference,""" start="00:12:17.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""then I can be like, OK,""" start="00:12:19.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""what if we do this? What if we run everything""" start="00:12:21.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""off a crontab instead of using Emacs tramp""" start="00:12:24.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""timers? Wouldn't that be great?""" start="00:12:25.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And then I can explore all those crazy ideas.""" start="00:12:28.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But then as we get closer and closer to date,""" start="00:12:30.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm like, okay, fine. I'm going to like just""" start="00:12:32.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""capture the idea and deal with it later.""" start="00:12:34.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So that's really, really hard for me.""" start="00:12:36.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Year to your growth in attendance and after""" start="00:12:39.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the conference video watching.""" start="00:12:40.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""The growth, well, first thing,""" start="00:12:46.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there is like absolute growth in the kind of""" start="00:12:51.110" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the quantity of things that people are""" start="00:12:53.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sharing. I have a blog post about this that""" start="00:12:56.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talks about a number of minutes of talks,""" start="00:12:59.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and it's going up. Last year,""" start="00:13:02.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we did 2 tracks because I couldn't fit""" start="00:13:03.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everything in 1 day. And this year,""" start="00:13:05.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we did 2 tracks, but even then,""" start="00:13:07.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everything was kind of squished,""" start="00:13:08.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and I was trying to find space in the""" start="00:13:09.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""schedule. And if you make it so that next""" start="00:13:11.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""year, we have to figure out 3 tracks,""" start="00:13:13.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think We have another host now,""" start="00:13:15.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so it might be doable,""" start="00:13:16.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which is great. Who knows?""" start="00:13:19.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We'll see. And the other interesting thing""" start="00:13:23.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that I'm seeing in terms of growth is that""" start="00:13:25.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people are starting to refer to the talks""" start="00:13:27.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""from previous conferences that inspired them.""" start="00:13:29.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So the evil plan is working in that it is""" start="00:13:32.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""getting people to get cool stuff out of their""" start="00:13:35.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""heads and into videos that have like""" start="00:13:37.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""searchable transcripts and that people can""" start="00:13:39.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""refer to as for inspiration and for showing""" start="00:13:41.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other people, hey, look,""" start="00:13:42.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this is what it can do.""" start="00:13:44.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So that is fantastic growth.""" start="00:13:46.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""The actual numbers, I'm intense to look at""" start="00:13:49.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the number of simultaneous viewers.""" start="00:13:51.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And every so often, it's kind of nice to go""" start="00:13:53.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""through the YouTube stats or whatever.""" start="00:13:55.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But that's not so much as a,""" start="00:13:57.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like, I don't really keep that in mind as""" start="00:14:01.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""much, just because as long as people are""" start="00:14:05.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""connecting to the ideas and getting stuff out""" start="00:14:07.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there and being inspired to think around""" start="00:14:13.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""more, then it's doing the thing.""" start="00:14:16.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Cognizant is working. So where are we now for""" start="00:14:21.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""questions? Ooh, I can actually,""" start="00:14:22.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I have ERC here. I can find eventually.""" start="00:14:25.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""1 of my screens has Dev in it.""" start="00:14:28.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Okay, here we are. What are the other""" start="00:14:30.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""questions? Probably, Probably an IRC.""" start="00:14:34.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Where's IRC? Dove, dove,""" start="00:14:39.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""dove. I did try to record things more slowly,""" start="00:14:45.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and I tried several times,""" start="00:14:47.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but I really just speak very quickly when I""" start="00:14:49.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""get excited and Emacs is very fun so it is""" start="00:14:53.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""tough oh yes okay so 1 in once yes automated""" start="00:14:59.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""present workflows oh yeah okay so where are""" start="00:15:04.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we now for time? Oh look,""" start="00:15:05.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's 4.30, should we do our closing remarks""" start="00:15:07.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or like how are things going over in the""" start="00:15:09.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other stream? I should find out.""" start="00:15:11.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I've been keeping a close eye on the""" start="00:15:14.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other 1, but yeah, I believe that-""" start="00:15:16.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yay, look at that, good timing.""" start="00:15:19.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Okay, I have managed to zoom through the""" start="00:15:22.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""questions and we can switch over to the""" start="00:15:26.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""closing remarks how do we do this yes okay""" start="00:15:31.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""okay we're gonna oh wait people okay people""" start="00:15:35.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""who wanted to ask questions how do you want""" start="00:15:37.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to do this? Because there are a lot of people""" start="00:15:39.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in this 1 here too. You want to go to the""" start="00:15:42.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other 1? 0 no, they aren't done yet.""" start="00:15:48.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sorry, I forgot to turn on the con tab""" start="00:15:51.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because of course I got excited.""" start="00:15:52.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Okay, so Jacob is still answering questions,""" start="00:15:54.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which means I get to still answer questions.""" start="00:15:56.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Now I'll try to be quiet and let people in""" start="00:15:59.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the BBB room speak up if we want to.""" start="00:16:01.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Okay that means""" start="00:16:12.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: are going to hear.""" start="00:16:13.585" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Some more""" start="00:16:13.715" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 2]: people in the chat ideas I had on the Emacs""" start="00:16:15.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conferences you could have like a little""" start="00:16:17.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs starter config just for like the Emacs""" start="00:16:21.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference where you have emms playlist and""" start="00:16:26.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""IRC help cheer function to help get you into""" start="00:16:29.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""IRC into ERC and then the to-do states that I""" start="00:16:35.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""was talking about before.""" start="00:16:36.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So you can say, I'm watching this 1,""" start="00:16:40.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I want to re-watch this 1,""" start="00:16:41.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but I'm going to skip it because I'm watching""" start="00:16:42.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""something else. I used the HyperBowl package""" start="00:16:52.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to go straight to the web pages to all the""" start="00:16:55.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""either pads but you can also have some quick""" start="00:16:59.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""functions to go into a CRDT buffer hosted""" start="00:17:04.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""buffer, where all the org mode Etherpad""" start="00:17:07.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""documents would be. And then that would get""" start="00:17:14.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everybody using Emacs,""" start="00:17:15.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then they could all be chatting with each""" start="00:17:17.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other with CRDT, with controlling Emacs.""" start="00:17:23.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know how the sub stuff,""" start="00:17:25.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know if you can get the sub stuff in""" start="00:17:27.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there working, but yeah,""" start="00:17:29.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It could be a good way of getting it all""" start="00:17:32.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""wrapped up together. And also,""" start="00:17:34.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Mkron, if you ever looked at that versus""" start="00:17:38.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Kron, Mkron is configured in Elisp.""" start="00:17:40.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Then you can also write some custom functions""" start="00:17:43.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in the middle of your Kron.""" start="00:17:44.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So maybe you could make some like conditional""" start="00:17:46.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things where you can start or stop it.""" start="00:17:48.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And like 1 of the differences is if your""" start="00:17:56.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""computer reboots, it can start up and say,""" start="00:17:58.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""oh, I'm supposed to run this cron job at this""" start="00:18:01.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""time and then just Do the correct thing""" start="00:18:04.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""rather than losing the state Randomly because""" start="00:18:08.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""your computer lost power""" start="00:18:10.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thanks for those recommendations I will add""" start="00:18:15.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""mcron to my list of things to check out.""" start="00:18:17.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And yeah, we finally remembered to publish""" start="00:18:23.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""all those schedules as org,""" start="00:18:25.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and I decided to just spam all the time zones""" start="00:18:27.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""with them, which was fantastic.""" start="00:18:28.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And other people have mentioned that this is""" start="00:18:30.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""useful. We get to figure out how to use this""" start="00:18:32.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to teach people more about what you can do""" start="00:18:35.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""with org. As you mentioned,""" start="00:18:36.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""encouraging them to tag the stuff with things""" start="00:18:40.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that they want to attend gives us the ability""" start="00:18:43.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to set up an agenda view for them that has""" start="00:18:45.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the talks that are tagged with those tags.""" start="00:18:47.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: So I""" start="00:18:48.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: was like, okay, let's,""" start="00:18:49.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""let's teach org mode and lisp in the process""" start="00:18:53.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of doing things. Okay,""" start="00:18:58.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there was a question about any chance of an""" start="00:19:00.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in person EmacsConf again someday.""" start="00:19:02.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I was actually at the very first EMAX""" start="00:19:05.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Conf, which was 2013 and organized in London""" start="00:19:11.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to take advantage of the fact that I had a""" start="00:19:12.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""business shift there. It was fantastic being""" start="00:19:15.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in a room with 100 other people who are all""" start="00:19:18.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""really interested in Emacs,""" start="00:19:19.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but I'm not traveling like any time for the""" start="00:19:23.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""foreseeable future, so if other people are""" start="00:19:25.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interested in organizing something like that,""" start="00:19:27.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I am totally happy to spread the word.""" start="00:19:29.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It doesn't fit with my current lifestyle,""" start="00:19:31.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but it might fit somebody's.""" start="00:19:32.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know. We're still just here.""" start="00:19:37.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I like the virtual conference.""" start="00:19:38.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I really like the fact that we can bring""" start="00:19:41.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""together people from all over the world.""" start="00:19:43.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can take a look at my schedule with all the""" start="00:19:46.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""time constraints. Okay,""" start="00:19:47.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I need to put this person in the morning""" start="00:19:49.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because they're in Australia and I need to""" start="00:19:50.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""put this person in the afternoon because""" start="00:19:52.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""they're from Vancouver or from somewhere else""" start="00:19:56.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in the Pacific time zone.""" start="00:19:58.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And it's just this breadth of people.""" start="00:20:01.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But the other thing that I would love for""" start="00:20:04.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people to start thinking about is if we could""" start="00:20:06.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""have a virtual conference in other time""" start="00:20:08.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""zones, so that's easier for people in Asia""" start="00:20:11.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Pacific or Europe to attend.""" start="00:20:12.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And as we're getting the hang of this,""" start="00:20:16.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this crontab-based thing,""" start="00:20:17.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think we might almost be at the point where""" start="00:20:20.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can set it up to run even when I'm""" start="00:20:22.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sleeping. And then other people can figure""" start="00:20:24.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""out, you know, the exception handling,""" start="00:20:26.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""oh, you know, this talk needs to be""" start="00:20:27.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""restarted. Okay, just play it again and scrub""" start="00:20:30.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""around to find the right part,""" start="00:20:31.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which means we could have replays,""" start="00:20:34.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or we can have like the Asia Pacific""" start="00:20:37.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Alternate Event that we had the other time""" start="00:20:39.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""where some speakers came back online and did""" start="00:20:45.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""another Q&A session just for that kind of""" start="00:20:48.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""event. So those are other cool,""" start="00:20:51.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""fun things that would love to be,""" start="00:20:52.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""would be great. Satellite events,""" start="00:20:57.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""someone mentioned in the etherpad.""" start="00:20:59.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Some people have been organizing these,""" start="00:21:03.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which are great. Basically a bunch of people""" start="00:21:05.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""get together in a room or 2 rooms now because""" start="00:21:07.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of the tracks and watch Emacs Conf together.""" start="00:21:10.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So if you have a physical meetup or if you'd""" start="00:21:12.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like to start 1, It's basically,""" start="00:21:15.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, do this, maybe have stickers if you""" start="00:21:17.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""have stickers. You know,""" start="00:21:19.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's just have everyone come over and hang""" start="00:21:22.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""out and meet people. I don't know.""" start="00:21:24.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's a thing. Specifically how to do it,""" start="00:21:27.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I have no idea how to organize these things.""" start="00:21:29.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But Alain does. So talk to him.""" start="00:21:32.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 2]: Another way of adding multiple tracks is""" start="00:21:35.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""changing it to doing it like 2 times a year,""" start="00:21:37.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in max confidence.""" start="00:21:39.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, yeah, people have mentioned something""" start="00:21:44.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like that. Or the fact that org often has""" start="00:21:50.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like a full day of talks by itself,""" start="00:21:51.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and actually a little bit more than a day""" start="00:21:53.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""now, because I've been squeezing things into""" start="00:21:55.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other tracks. There has been some potential""" start="00:21:58.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interest in having an org conf.""" start="00:22:00.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It could be a thing. And I'd love to see""" start="00:22:03.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""also, we'd love to experiment with other""" start="00:22:05.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""formats. So there could be a bug hunting""" start="00:22:08.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""session or let's use the breakout rooms to""" start="00:22:13.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""split up into little mentoring groups and see""" start="00:22:15.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""how that works. So lots of things that we can""" start="00:22:18.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""do. They've actually finished over in the Gen""" start="00:22:21.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""track so I don't know if people want to very""" start="00:22:24.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""quickly ask questions here or if we go there.""" start="00:22:26.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Leo has come over here instead so okay he's""" start="00:22:31.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""joining over here on the other side.""" start="00:22:32.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Okay, hello.""" start="00:22:35.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I""" start="00:22:38.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: have 1 thing to add. Yeah,""" start="00:22:43.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: No, no, no, I was just about to say I am not""" start="00:22:46.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hosting anymore. You 2 do a wonderful job,""" start="00:22:48.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and I'm happy to just watch.""" start="00:22:49.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: go ahead. Cool. Yeah, I was going to add 1""" start="00:22:53.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""quick note about any potential suggestions or""" start="00:22:56.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""recommendations for hosting Emacs on""" start="00:22:58.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""satellites. Is that, I mean,""" start="00:23:00.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""given that we are an event centered around""" start="00:23:01.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs, and Emacs is backed by the Free""" start="00:23:07.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Software Foundation, if you do reach out to""" start="00:23:09.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""them, they're usually pretty helpful in terms""" start="00:23:11.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of sending goodies and stickers and such.""" start="00:23:14.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So yeah, if you give them a heads up and""" start="00:23:16.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""reach out to them in advance,""" start="00:23:17.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you might well end up with a whole bunch of""" start="00:23:20.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""swag on your hands that you could give out""" start="00:23:22.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""during the satellite. So that's the thing.""" start="00:23:24.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: Well, I just wanted to note it felt kind of""" start="00:23:35.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""even smoother. I mean,""" start="00:23:37.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you guys always run a nice conference,""" start="00:23:39.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but it felt smoother this year than ever""" start="00:23:43.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""before, which listening to your talk,""" start="00:23:45.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sasha, All the automation that you're doing""" start="00:23:48.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is pretty incredible. So I think it's paying""" start="00:23:52.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""off.""" start="00:23:52.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yay! You know, it is very amusing to hear the""" start="00:23:58.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""host say, okay, you know,""" start="00:23:59.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but we've got to wrap up in the next 30""" start="00:24:00.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""seconds because Sasha's contact is going to""" start="00:24:02.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""go yoink!""" start="00:24:03.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: I have a person I work with who keeps the""" start="00:24:12.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""trains running on time shall we say and like""" start="00:24:15.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""cuts off every meeting like the second that""" start="00:24:18.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's supposed to end while somebody's in""" start="00:24:21.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""mid-sentence and I hope we don't get to that""" start="00:24:24.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""point here.""" start="00:24:25.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: So do we have any more,""" start="00:24:34.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: oh sorry I'm reverting to the hosting,""" start="00:24:36.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Do we have any more questions for MaxConf?""" start="00:24:37.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Although maybe we want to switch to the other""" start="00:24:39.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""room so that we don't struggle too much to""" start="00:24:41.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""find... Organize the stuff on BBB afterwards.""" start="00:24:44.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh, the recording. Well,""" start="00:24:46.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this is a way to make sure the recording gets""" start="00:24:48.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""online. But we could do that too.""" start="00:24:54.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know. What do y'all think?""" start="00:24:55.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: I'm personally fine. If we want to stay here""" start="00:25:00.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right now, the development track is currently""" start="00:25:02.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""streaming this BBB room.""" start="00:25:05.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So are we on Jen. So we're going to leave it""" start="00:25:08.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""at is and move into closing remarks if we""" start="00:25:10.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""want.""" start="00:25:10.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, yeah, just, I guess,""" start="00:25:14.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""make sure that every 1 of the organizers are""" start="00:25:17.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""here. I see Flo here. Let's see,""" start="00:25:20.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Corbyn, are you here? Can you maybe speak""" start="00:25:23.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""here on BBB?""" start="00:25:24.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: We'll give some time for Corbyn to figure it""" start="00:25:32.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""out. He did figure it out eventually""" start="00:25:33.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yesterday, so surely today will go""" start="00:25:36.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""swimmingly.""" start="00:25:36.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Right. We're getting everything ready,""" start="00:25:47.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""folks.""" start="00:25:47.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay. So while we sort out Corwin,""" start="00:25:57.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""can someone tell him on mumble,""" start="00:25:58.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I guess? Because I'm not sure if he's...""" start="00:26:00.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Anyway. I also want to say that in the Emacs""" start="00:26:05.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference channel, people have been""" start="00:26:06.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""mentioning that the remote stuff has been""" start="00:26:08.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""working for them. And I really do like the""" start="00:26:10.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""way that this means we can have all the""" start="00:26:12.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""videos, you know, all prepared,""" start="00:26:13.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""they're captioned, you know,""" start="00:26:16.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We can send them to people,""" start="00:26:17.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we can post them on the website afterwards.""" start="00:26:19.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We can bring all these people together who""" start="00:26:21.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""might not be able to convince their companies""" start="00:26:23.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to fly them somewhere for an Emacs""" start="00:26:25.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference. And also I can do this kind of""" start="00:26:29.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""prep while having my now seven-year-old still""" start="00:26:32.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""be able to wander by and whatever.""" start="00:26:34.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Travelling is really tough.""" start="00:26:36.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So, this is fine. This is cool.""" start="00:26:39.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I like this. We'll keep doing it.""" start="00:26:40.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: It's definitely playing into the low-cost""" start="00:26:44.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference. To do it online,""" start="00:26:46.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So many people can just access it very""" start="00:26:48.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""easily. All right, so we've messaged Colwyn.""" start="00:26:53.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I guess we can get started with Dalim.""" start="00:26:55.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It should maybe take a minute or 2 to join""" start="00:26:57.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""us. Should I get started with the Final words""" start="00:27:01.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of the day? All right,""" start="00:27:04.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""cool. All right, folks,""" start="00:27:05.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we made it. We are at the end of the second""" start="00:27:08.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""day of EmacsConf, the second of 2 days.""" start="00:27:10.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And the first thing I want to say is first,""" start="00:27:12.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""thank you so much for joining us for this new""" start="00:27:15.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""edition. It's personally my fourth year doing""" start="00:27:19.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the EmacsConf, but if you go to emacsconf-org""" start="00:27:22.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and you see the different sessions,""" start="00:27:24.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you will realize that the first 1 was in""" start="00:27:27.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""2013, which happens to be 10 years ago.""" start="00:27:29.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So we are obviously very excited about all of""" start="00:27:33.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this and we'll tell you perhaps a little more""" start="00:27:35.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about what has changed over the last 10""" start="00:27:38.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""years. As usual, you know the pre-recorded""" start="00:27:41.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talks are available right now on the talk""" start="00:27:44.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""page, at least for all those which were""" start="00:27:46.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""pre-recorded. All the ones which happened on""" start="00:27:48.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the Google button, it will take us a little""" start="00:27:50.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""bit of time to figure out how to,""" start="00:27:52.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""well, when to put them available.""" start="00:27:54.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We need to do subtitles and all this jazzy""" start="00:27:56.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""stuff. And we'll also upload them to YouTube""" start="00:27:59.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and other places once we check the audio,""" start="00:28:01.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""especially for the Q&As.""" start="00:28:02.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We need to clean up some of the audios and""" start="00:28:05.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""make sure that we do not publish any personal""" start="00:28:08.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""stuff. All the live talks and Q&As will do""" start="00:28:13.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this in the weeks to come.""" start="00:28:14.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Usually, it takes us about 1 to 2 months to""" start="00:28:16.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""try to get everything out,""" start="00:28:17.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but if it takes longer,""" start="00:28:18.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's fine. Eventually,""" start="00:28:19.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everything will be there.""" start="00:28:20.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""The 1 thing we can say is that by EmacsConf""" start="00:28:23.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""2024, when it comes around,""" start="00:28:26.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everything should have been uploaded at some""" start="00:28:28.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""point. So that's a wide window.""" start="00:28:30.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So again, and as usual,""" start="00:28:34.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""feel free to spread the word about EmacsConf""" start="00:28:35.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because, you know, we've been doing this for""" start="00:28:38.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a while and every year more people show up to""" start="00:28:42.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""these events and more people watch the videos""" start="00:28:43.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""on YouTube and it's wonderful to see,""" start="00:28:46.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, our main goal which is to get cool""" start="00:28:49.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""ideas out of the head of people,""" start="00:28:51.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""shared and viewed by so many people.""" start="00:28:53.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's always amazing. Also,""" start="00:28:56.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I would like to ask you personally,""" start="00:28:58.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""what did you like about this conference?""" start="00:28:59.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Or what do you like, what do you feel was""" start="00:29:01.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""better than last year,""" start="00:29:02.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because the feedback is very useful to us.""" start="00:29:05.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We'd also like to know if you've got any""" start="00:29:07.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""ideas for making things even better.""" start="00:29:08.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And we've got a general conference discussion""" start="00:29:11.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""slash notes slash community message board,""" start="00:29:13.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which is pad.emaxconf.org""" start="00:29:14.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""slash 2023. And you can also just mention""" start="00:29:19.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""them. You know, we might open this room for""" start="00:29:22.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people to join us and chat,""" start="00:29:24.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""although Flowy and myself,""" start="00:29:25.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""your up team, needs to go to bed.""" start="00:29:27.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So please be mindful of this.""" start="00:29:28.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""If you ask a very interesting question,""" start="00:29:29.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We will both have to make sacrifices to stay""" start="00:29:32.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a while longer because you're too damn""" start="00:29:34.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interesting. Now we'd like to move into""" start="00:29:38.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""thanking all the people who make EmacsConf""" start="00:29:41.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""possible. And obviously,""" start="00:29:42.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""first, we have to thank all the speakers,""" start="00:29:45.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""all the volunteers, the participants,""" start="00:29:46.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and to all those other people in our lives""" start="00:29:49.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""who make it possible through time and""" start="00:29:51.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""support, thank you so much for allowing us to""" start="00:29:53.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""run EmacsCount. It wouldn't happen without""" start="00:29:55.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you, and without us, I suppose,""" start="00:29:57.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because we are included in this.""" start="00:29:58.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""This year's conference hosts are myself,""" start="00:30:01.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Leo Vivier, Amine Bendali,""" start="00:30:03.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and joining our team of hosts for the first""" start="00:30:05.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""time this year, Flobby Coder.""" start="00:30:07.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Thank you so much, Flobby.""" start="00:30:08.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You did a wonderful job.""" start="00:30:09.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's right there. No, dammit.""" start="00:30:11.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""No, I can't. I can never remember if BBB is""" start="00:30:15.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""flipping stuff, so either 1 of those""" start="00:30:17.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""directions. The streams this year,""" start="00:30:19.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""as last year, were managed by Sasha Schwa,""" start="00:30:21.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""obviously. And the check-ins by Flobby Coder,""" start="00:30:24.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and I'm in with Miscellaneous running around""" start="00:30:27.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""by Corwin Brust, who will be joining us""" start="00:30:30.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""momentarily. Apparently,""" start="00:30:32.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""all his USB failed, so he will be with us as""" start="00:30:34.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Roost. Rhymes with Roost.""" start="00:30:38.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Do I have audio now? Alright,""" start="00:30:41.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'll go to work on my camera.""" start="00:30:42.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Hi. Hello?""" start="00:30:43.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: soon as he can. It's Lovely.""" start="00:30:45.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Okay, I'll keep going.""" start="00:30:46.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I also need to thank, well,""" start="00:30:49.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""need, no, I want to thank all the captioning""" start="00:30:51.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""volunteers, the captioners as we call them.""" start="00:30:53.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You've got Daniel Molina,""" start="00:30:54.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Bala Ramadoui, Durai, sorry,""" start="00:30:57.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Bhavin Gandhi, Amin Zayed,""" start="00:30:59.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yoni Rapkin, who presented 1 of the talk""" start="00:31:02.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""earlier, Daniel Alejandro Tapia,""" start="00:31:04.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Hannah Miller, Ken Huang,""" start="00:31:06.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Jean-Christophe Ellary,""" start="00:31:07.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and James Howell. Also thanking""" start="00:31:10.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Jean-Christophe Ellary,""" start="00:31:11.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Colwyn, Quiliro, Kern,""" start="00:31:13.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and Amin Bendali for helping with the early""" start="00:31:15.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""acceptance process. Sasha,""" start="00:31:18.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""do I read this 1? It's weird to think myself.""" start="00:31:21.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm gonna pat myself on the back,""" start="00:31:22.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I guess. Go on, Sasha.""" start="00:31:24.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'll do it. I'll do it.""" start="00:31:26.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's fine. Thanks to myself for fiddling with""" start="00:31:29.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the audio to get things nicely synced,""" start="00:31:30.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And thanks to myself again and other people,""" start="00:31:34.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we kept the mailing list free from spam.""" start="00:31:36.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Because I'm not sure what happened since May,""" start="00:31:39.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but we've been receiving about 3 to 4 spam""" start="00:31:41.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""emails. And it just happened all of a sudden,""" start="00:31:44.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and I was really weirded out by this process.""" start="00:31:46.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Where was I? OK, thanks to Andrew Ducurty for""" start="00:31:51.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""helping with whisper processing.""" start="00:31:53.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Thanks to Ashki Ghekwad for design""" start="00:31:55.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""contribution. Thanks to Yoshin,""" start="00:31:57.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""our grand changro for all the music that""" start="00:31:59.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we've been using for the last 3 years at this""" start="00:32:01.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""point, I think. Also thanks to Rye for the""" start="00:32:04.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""server that we're using for OBS streaming and""" start="00:32:06.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for processing videos.""" start="00:32:07.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And also thanks to the free software""" start="00:32:10.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""foundation for obviously Emacs itself,""" start="00:32:12.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the mailing list that we use,""" start="00:32:14.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and the media.emacsconf-org""" start="00:32:15.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""server where all of the presentations are""" start="00:32:19.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""currently hosted. We'd also like to thank""" start="00:32:22.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""BigBlueButton, Etherpad,""" start="00:32:23.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""IceCast, OBS, The Lounge,""" start="00:32:25.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Libre.chat, FFmpeg, OpenAI,""" start="00:32:28.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Whisper, the E-N-E-S force alignment tool,""" start="00:32:31.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Site Transfer, SubD, and contributors to all""" start="00:32:34.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of the tools and services we used in the""" start="00:32:36.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""making of this conference.""" start="00:32:37.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And obviously, all of them are free,""" start="00:32:39.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""as Sasha obviously told you,""" start="00:32:41.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and as we will be telling you again for many""" start="00:32:44.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""years to come. We'd also like again to thank""" start="00:32:47.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everyone for attending the conference and""" start="00:32:49.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""making EmacsConf what it is.""" start="00:32:51.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And for those who were on the general track,""" start="00:32:54.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know Sasha did it in parallel to the last""" start="00:32:56.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talk we had today. She did a wonderful talk""" start="00:32:58.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""on how EmacsConf is actually run.""" start="00:33:01.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So there's her talk, there's also an entire""" start="00:33:05.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""page on our wiki about the infrastructure""" start="00:33:07.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that we use. So if you're interested,""" start="00:33:09.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""especially in running an event of your own,""" start="00:33:11.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you've got as much information as you want,""" start="00:33:14.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and as Sacha probably told you,""" start="00:33:15.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we are available for sharing the knowledge""" start="00:33:17.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and enabling your dreams of making a""" start="00:33:20.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference. Amint, do you want to take it""" start="00:33:24.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""over with the fiscal sponsorship""" start="00:33:25.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, sure. Let's see.""" start="00:33:29.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Can you please scroll down a little bit?""" start="00:33:30.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Whoever is kindly sharing the screen.""" start="00:33:33.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: announcements? Okay. Oh,""" start="00:33:34.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I was scrolling on my end.""" start="00:33:36.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sorry.""" start="00:33:36.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thanks, Sasha. Yeah, so kind of super excited""" start="00:33:41.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to finally get into this.""" start="00:33:43.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And this is something that we've been kind of""" start="00:33:45.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hoping to get worked out for a long time""" start="00:33:46.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""actually and it's finally here.""" start="00:33:48.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So people might have already seen this but as""" start="00:33:52.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of this last Thursday we're actually fiscally""" start="00:33:57.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sponsored by the Free Software Foundation.""" start="00:33:59.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So we joined their Working Together for Free""" start="00:34:03.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Software program. And DFSF published the""" start="00:34:07.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""announcement on their website.""" start="00:34:08.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You're welcome to go and check it out there.""" start="00:34:11.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But I just want to quickly get into a little""" start="00:34:14.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""bit about what it means and some of the""" start="00:34:17.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""benefits, I guess. So as part of this working""" start="00:34:21.719" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""together for a free software fund,""" start="00:34:23.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the FSF provides fiscal sponsorship for a""" start="00:34:26.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""number of important free software and new""" start="00:34:29.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""technical projects, such as the new tool""" start="00:34:30.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""chain and Replicant, which is a free fork of""" start="00:34:33.679" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Android. And starting this year,""" start="00:34:36.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""EmacsConf has joined the program as well.""" start="00:34:38.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And as a fiscal sponsor,""" start="00:34:40.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""DFSF can assist us by providing services""" start="00:34:43.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""required by a legal entity,""" start="00:34:46.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like signing contracts and receiving and""" start="00:34:49.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""processing payments. So to provide some""" start="00:34:53.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""context, eMAXConf is and always has been an""" start="00:34:56.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""independent initiative organized by a very""" start="00:34:58.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""small number of people,""" start="00:34:59.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a small team of people without any corporate""" start="00:35:02.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sponsors. And that's important in part""" start="00:35:05.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because I believe part of our message is that""" start="00:35:08.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we want to showcase that everybody can do""" start="00:35:11.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this and organize a conference like this no""" start="00:35:14.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""matter how small your team is and how modest""" start="00:35:17.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""your resources are, which we will actually""" start="00:35:19.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""get into a little bit later in the closing""" start="00:35:21.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""remarks. But yeah, so now having the FSF as""" start="00:35:25.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""our fiscal sponsor, we're in a better""" start="00:35:27.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""position to accept donations as 1 potential""" start="00:35:30.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""way to contribute or help the conference.""" start="00:35:33.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And just to clarify, we're currently not""" start="00:35:36.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""struggling at all to cover these costs of the""" start="00:35:39.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""servers and such, which we will get into""" start="00:35:41.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""again. But this is just 1 extra avenue if""" start="00:35:44.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people are feeling generous and would like to""" start="00:35:46.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""help, it's much appreciated.""" start="00:35:47.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And yeah, so having a 501c3 nonprofit like""" start="00:35:54.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the FSF, as a fiscal sponsor,""" start="00:35:57.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""many donors will receive tax benefits that""" start="00:36:00.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""they otherwise wouldn't receive if they were""" start="00:36:02.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to like donate to like individuals running a""" start="00:36:04.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""project directly. And also donors can know""" start="00:36:07.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that, you know, the funds that they're""" start="00:36:08.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""donating are being handled by an accountable""" start="00:36:10.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""institution. And also importantly,""" start="00:36:14.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""when donating through the FSF,""" start="00:36:16.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Let's see, text changing.""" start="00:36:19.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Okay, yeah. People can donate without having""" start="00:36:23.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to run any non-free JavaScript,""" start="00:36:24.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which is nice. Because unfortunately,""" start="00:36:27.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""usually these days on the web when you do""" start="00:36:29.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""want to buy something or spend money,""" start="00:36:30.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you have to run non-free JavaScript,""" start="00:36:31.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which isn't the case when donating through""" start="00:36:35.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the FSF. Yeah, so we just joined,""" start="00:36:37.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""as I said, on Thursday,""" start="00:36:39.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and we've already received our very first""" start="00:36:43.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""donation, so we'd like to extend our thanks""" start="00:36:45.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and gratitude to Scott Ranby,""" start="00:36:46.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""who is actually our first ever kind donor.""" start="00:36:49.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""They agreed to be thanked publicly.""" start="00:36:51.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So thank you, Scott. And yeah,""" start="00:36:55.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so this is a recent development.""" start="00:36:57.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And we plan to add much more information and""" start="00:36:59.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""details about this whole situation to the""" start="00:37:01.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""wiki, including links to the announcements,""" start="00:37:04.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""some more information about the program,""" start="00:37:06.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and our donation page of course,""" start="00:37:08.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in the new future. And in the meantime I'm""" start="00:37:12.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""also happy to help answer any questions as""" start="00:37:15.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""best as I can, So feel free to ping me on IRC""" start="00:37:17.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or just email me at bandalia.guinard.org.""" start="00:37:19.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Which gives me a chance to jump in and just""" start="00:37:26.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""point out 1 question that we know people have""" start="00:37:29.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is just about how much of the money goes to""" start="00:37:32.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""FSF when you make a contribution through the""" start="00:37:35.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""fund toward EmacsConf?""" start="00:37:36.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right, exactly. Yeah, and the answer to that""" start="00:37:40.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is that it's 10%, which is for supporting the""" start="00:37:44.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""operation of the Working Together program and""" start="00:37:46.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""also the shared GNU infrastructure,""" start="00:37:48.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which we as EmacsConf use and depend on,""" start="00:37:52.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""along with several hundred GNU packages.""" start="00:37:54.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So, yeah, and it covers things like""" start="00:37:59.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""transaction costs that the FSF's payment""" start="00:38:03.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""processor charges?""" start="00:38:04.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: And then again I'll come back to say this is""" start="00:38:10.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a real fair price. I have some experience""" start="00:38:12.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""with working with payment processing and""" start="00:38:15.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things like this and like 10% that's a that's""" start="00:38:19.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""something that you see in Bigger businesses""" start="00:38:22.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that have a model around making money on that""" start="00:38:25.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Transaction so to be able to do that as a""" start="00:38:29.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""nonprofit. We're taking advantage of a really""" start="00:38:31.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""awesome thing there.""" start="00:38:32.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, exactly. And yeah,""" start="00:38:35.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just for a quick plug,""" start="00:38:36.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the FSF is actually doing an end of year""" start="00:38:38.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""fundraiser right now. So if you want to go""" start="00:38:41.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""donate to them, or if you donate to us,""" start="00:38:44.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a part of it will go to the FSF to support""" start="00:38:47.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""their work on free software,""" start="00:38:51.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""helping grow the movement,""" start="00:38:53.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and spread the word about it.""" start="00:38:56.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So, thank you. And I guess now is a good time""" start="00:39:02.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for me to pass the baton to the next""" start="00:39:05.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""organizer who wants to talk about some of the""" start="00:39:08.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""specs of the servers that we use right now.""" start="00:39:11.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: We actually don't have to go about this in""" start="00:39:14.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""detail. I just put it in there in case people""" start="00:39:16.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""were curious about how much it takes to run""" start="00:39:19.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""something like this. Not a lot.""" start="00:39:20.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's just really, you know,""" start="00:39:22.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""2 days of computing is not that expensive in""" start="00:39:26.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""today's world, and all the rest is just""" start="00:39:29.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""volunteer time and a heck of a lot of Emacs""" start="00:39:32.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""lists as previously discussed in our""" start="00:39:34.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""presentation. So, we'll just skip through""" start="00:39:41.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that instead of reading all of it.""" start="00:39:42.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Unless people are specifically curious,""" start="00:39:43.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you can ask questions afterwards.""" start="00:39:44.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But yes, happy birthday,""" start="00:39:46.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""EmacsConf, and here's another wonderful 10""" start="00:39:49.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""years.""" start="00:39:49.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: All right, I think we are at the end of the""" start="00:39:56.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""closing remarks. Have I forgotten anything?""" start="00:39:58.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We haven't had Flowy yet,""" start="00:40:00.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I believe. Sorry for putting you on the spot""" start="00:40:03.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""again.""" start="00:40:03.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 6]: I guess I have nothing really to say besides""" start="00:40:07.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""what you have already said.""" start="00:40:09.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So thank everybody to make a presentation,""" start="00:40:12.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to do anything here. Thanks for all of you""" start="00:40:15.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that I could be a part of it.""" start="00:40:16.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I have to admit it also.""" start="00:40:17.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So thank you all. And yeah,""" start="00:40:21.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""nothing to say probably.""" start="00:40:22.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: And I also want to send the thanks to Flowy""" start="00:40:25.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for, you know, stepping in.""" start="00:40:27.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We kind of like throw this on you like at the""" start="00:40:29.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""last second, but Flowy actually stepped in""" start="00:40:31.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and hosted graciously a couple of the talks""" start="00:40:33.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""on the Dev track today.""" start="00:40:34.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So, which I think went very well.""" start="00:40:36.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So congrats and thank you.""" start="00:40:38.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 6]: Thank you.""" start="00:40:39.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Speaking of which we were not monsters.""" start="00:40:41.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We kindly asked Floey yesterday because""" start="00:40:43.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everything was going so well.""" start="00:40:44.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And now we can say it,""" start="00:40:45.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, I can say things are going well.""" start="00:40:46.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Usually it's a bad thing when you're doing a""" start="00:40:48.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""broadcast to say things are going well right""" start="00:40:50.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""now because it tends to backfires at some""" start="00:40:53.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Hours of notice, hours of notice.""" start="00:40:56.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That, that's planning.""" start="00:40:58.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: point. But yesterday- So hours of notice,""" start="00:41:02.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Flowy didn't sleep all that much because we""" start="00:41:04.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""tasked him with hosting,""" start="00:41:06.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so he was turning in his bed all night""" start="00:41:08.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""thinking, oh, I'm going to host MaxCons.""" start="00:41:09.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But Flowy, you did a wonderful job and I am""" start="00:41:13.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so glad that not only you were able to join""" start="00:41:15.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""us again this year, but that also you were""" start="00:41:17.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""able to host. Because last year,""" start="00:41:19.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""had we asked you to host,""" start="00:41:20.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you would have said no.""" start="00:41:21.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""First time we asked you this year was yes,""" start="00:41:25.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but give me some time to think about it.""" start="00:41:27.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 6]: Next year it is yes completely.""" start="00:41:30.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: If we've done a good job,""" start="00:41:32.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it will be yes directly.""" start="00:41:33.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""All right, so since we are at the end of the""" start="00:41:38.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""thankings and I did say europe team needs to""" start="00:41:41.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""go to bed in about 12 minutes that leaves us""" start="00:41:43.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about 12 minutes to try to answer as many""" start="00:41:45.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""points as you'd like to raise.""" start="00:41:47.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sasha, I think the Q&A room is still open""" start="00:41:50.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because we are technically still in the Emacs""" start="00:41:52.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference room currently.""" start="00:41:53.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So, if you... We're going to put the link""" start="00:41:56.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""again if you need to find it.""" start="00:41:57.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Otherwise, scroll up and find the 1 on there.""" start="00:41:59.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: I think I can change the redirect.""" start="00:42:04.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Maybe. I will go figure this out.""" start="00:42:07.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Keep talking in the background.""" start="00:42:08.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Right. So, whilst we figure this out in the""" start="00:42:12.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""background, it would be nice if you could""" start="00:42:13.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""join us and ask questions,""" start="00:42:14.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""either by dropping them.""" start="00:42:15.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I see plenty of people have already left some""" start="00:42:18.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""comments. We have 2 places,""" start="00:42:19.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right now it's more about a chitchatting""" start="00:42:21.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about the end of the conference.""" start="00:42:23.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""If you've got general feedback,""" start="00:42:24.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we've mentioned it at the top,""" start="00:42:26.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but if you want to write your general""" start="00:42:28.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""feedback here, it will find its way at some""" start="00:42:30.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""point in the years of the relevant people who""" start="00:42:32.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""can make things change.""" start="00:42:33.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So don't worry too much about where you put""" start="00:42:35.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""your feedback, it'll be fine.""" start="00:42:37.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But now, how about we start reading some of""" start="00:42:40.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the notes that people have said or questions""" start="00:42:42.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that""" start="00:42:43.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: have been asked. So here's 1 for Amin.""" start="00:42:47.094" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Do you have any stats on how many people""" start="00:42:48.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""watched for an IRC and BBB over the 2 days?""" start="00:42:52.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right, yeah, so I guess for IceCast,""" start="00:42:58.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which I can answer more readily,""" start="00:43:00.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think yesterday we were averaging around""" start="00:43:03.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""240, 250 concurrent viewers at a time.""" start="00:43:08.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And today, so today it varied.""" start="00:43:12.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think the maximum was again like around 200""" start="00:43:16.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to 20-ish with the average being more around""" start="00:43:19.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""180, 190 viewers. We've had a lot of hits to""" start="00:43:24.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the actual web pages for the Emacs Conf Wiki""" start="00:43:28.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or the pad, which are all being served on 1""" start="00:43:31.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""server. I pulled some numbers.""" start="00:43:34.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm not sure if they're correct.""" start="00:43:36.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I'm like a little bit hesitant to discuss""" start="00:43:38.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""them. Safe to say they're easily in the tens""" start="00:43:41.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of thousands, maybe in the hundreds of""" start="00:43:44.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""thousands of total visits over the past,""" start="00:43:47.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Maybe the pad makes a lot of small requests.""" start="00:43:52.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: I guess, 48 hours. Right,""" start="00:43:53.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""okay. So, yeah, that's why I'm hesitant to""" start="00:43:57.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""say. But yeah, easily in the thousands or""" start="00:43:59.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: You know""" start="00:44:01.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: who you are anyway, the crowd,""" start="00:44:02.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know how many you are,""" start="00:44:04.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you do not need exact numbers""" start="00:44:05.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: tens of thousands. Yeah,""" start="00:44:08.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so I don't have the exact numbers but I guess""" start="00:44:11.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's always kind of fun to maybe try to pull""" start="00:44:13.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""some numbers and look at it that way but you""" start="00:44:15.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""know of course we all know that what we do,""" start="00:44:18.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""every single person counts.""" start="00:44:19.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I don't know, trying to look at turning""" start="00:44:24.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people into abstract numbers isn't,""" start="00:44:27.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know, inspiring to me very much,""" start="00:44:30.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but it's cool. So.""" start="00:44:31.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: All right. So how about we go into the""" start="00:44:36.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""questions. So Sasha is now in the viewport""" start="00:44:37.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""where we can see some questions.""" start="00:44:39.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So how about we take some of them.""" start="00:44:41.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can read them or if anyone of the""" start="00:44:43.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""organizers wants to do this,""" start="00:44:45.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""feel free, especially those who haven't""" start="00:44:46.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talked to a whole lot this year.""" start="00:44:48.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Cohen, do you want to try it?""" start="00:44:53.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I didn't make my motive clear.""" start="00:44:54.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I did and I'm done. I took the first""" start="00:44:59.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""question, I picked the bottom question off""" start="00:45:01.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the list because I knew exactly who it was""" start="00:45:02.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""going for. The person who wants to answer or""" start="00:45:05.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""direct the next question is welcome.""" start="00:45:07.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sorry, I could have given a little better""" start="00:45:10.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""stage direction there.""" start="00:45:11.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm not prepared to answer how many emaxers""" start="00:45:13.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""are from Nordic countries other than to say""" start="00:45:16.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""definitely yes and several.""" start="00:45:17.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I haven't looked close enough at the""" start="00:45:21.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""suggestion yet.""" start="00:45:22.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Right, okay. I can take the question about""" start="00:45:27.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the BBB limitations. So it's the second 1,""" start="00:45:30.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the red 1. Small suggestion,""" start="00:45:31.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""likely out of your control,""" start="00:45:33.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but anyway, the blue button seems to work""" start="00:45:36.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""very well, but it would be a bit more""" start="00:45:38.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""watchable if the webcam frames were lined up""" start="00:45:40.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""vertically on 1 side, because it would allow""" start="00:45:42.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the screen share frames to be larger and""" start="00:45:44.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""would make much better use of the viewable""" start="00:45:47.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""space. Maybe worth a bug report to upstream.""" start="00:45:49.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I agree, BBB has been really good.""" start="00:45:53.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Amine, did you want to say something?""" start="00:45:54.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I'm going""" start="00:45:55.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: to continue and then I'll add something at""" start="00:45:56.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the end.""" start="00:45:56.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Okay, sure. So BBB has been really good for""" start="00:45:59.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""us. It allows us to have many parallel rooms""" start="00:46:04.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which are all recording service side at the""" start="00:46:07.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""same time. And it's wonderful for us because""" start="00:46:09.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we can gather. At some point,""" start="00:46:11.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think last year, we had 4 concurrent talks""" start="00:46:13.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""being recorded because people were just so""" start="00:46:15.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interested in what was going on in rooms.""" start="00:46:17.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And you know, we only,""" start="00:46:19.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like this year, the co-organizers,""" start="00:46:21.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's the 5 people you see in a room""" start="00:46:23.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""currently. And if we had all of us to be in a""" start="00:46:26.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""separate room, having to record on the""" start="00:46:28.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""machine, it wouldn't work.""" start="00:46:29.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So we are able to demultiply the amount of""" start="00:46:32.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""content that we produce thanks to BBB,""" start="00:46:33.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but sadly, we are also quite limited by the""" start="00:46:37.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interface of BBB. Another problem that is""" start="00:46:39.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""dear to me is that audio tends to be fairly""" start="00:46:43.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""bad at some points depending on the speakers""" start="00:46:46.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because BBB has really funky audio correction""" start="00:46:50.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""stuff going in the background,""" start="00:46:51.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and sometimes it works,""" start="00:46:52.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sometimes it doesn't work,""" start="00:46:53.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and especially on my machine,""" start="00:46:55.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the specs are above in the document if you're""" start="00:46:58.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interested, but BBB and OBS do not play well""" start="00:47:02.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""at all. You might have heard me speaking with""" start="00:47:04.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""some clicks in my voice at some point.""" start="00:47:06.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That's another problem of BBB.""" start="00:47:07.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Anyway, I mean, you wanted to add something""" start="00:47:09.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""as well.""" start="00:47:09.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right, yeah, I kind of empathize and also""" start="00:47:14.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""emphasize the problems with audio on BBB""" start="00:47:17.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sometimes, but about the specific suggestion""" start="00:47:19.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""here of like lighting things up at least""" start="00:47:22.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""visually, I think that's like much more""" start="00:47:24.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""doable even if you don't open a bug upstream.""" start="00:47:26.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I believe the Free Software Foundation for""" start="00:47:30.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""their LibrePlanet conference,""" start="00:47:31.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""either last year or the year before,""" start="00:47:33.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""they had some custom, like clients signed""" start="00:47:36.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""into browser, custom CSS,""" start="00:47:38.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""where it would do exactly something like""" start="00:47:40.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that. It would like enlarge the shared screen""" start="00:47:44.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""on the 1 side and then stack up all of the""" start="00:47:46.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""webcam feeds on 1 side.""" start="00:47:48.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So we might be able to use something like""" start="00:47:50.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that.""" start="00:47:50.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: So I'll tack on to that.""" start="00:47:53.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And now I feel like a heel as soon as I""" start="00:47:56.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""opened my mouth, because I think I almost get""" start="00:47:59.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the sense Floyd wants to jump in here and""" start="00:48:01.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we're all talking, everyone except Sasha who""" start="00:48:03.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""actually wrote OBS, you know,""" start="00:48:06.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the OBS WebSocket plugin that is probably the""" start="00:48:10.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""answer to all the different questions""" start="00:48:12.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everyone is bringing up.""" start="00:48:13.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I guess I'll leave my input at that And""" start="00:48:15.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Chloe, did you have anything to say,""" start="00:48:16.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or can we pick on Sasha?""" start="00:48:17.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 6]: Nothing to say.""" start="00:48:20.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: I need to update the OBS WebSocket plugin for""" start="00:48:25.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the protocol change, because I think the""" start="00:48:27.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""protocol change was from 4 to 5.""" start="00:48:29.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's 1 of those things that I haven't gotten""" start="00:48:32.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool. But""" start="00:48:35.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: around to. yeah, so we'll try to solve it in""" start="00:48:37.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""CSS. So if I can tinker with the CSS or if""" start="00:48:41.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""somebody else would like to volunteer to move""" start="00:48:44.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things around, then that would be fantastic""" start="00:48:45.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because front-end should be things.""" start="00:48:48.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Okay, oh, what order of magnitude hours do""" start="00:48:53.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you each of you think you devote to the""" start="00:48:55.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference yearly? I have I expected someone""" start="00:48:58.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""would ask this question.""" start="00:48:59.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I have I have my the past 11 years of time""" start="00:49:07.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""analysis. This is my Emacs category,""" start="00:49:11.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so it also includes Emacs news.""" start="00:49:12.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So this is my Emacs hours by month and year.""" start="00:49:15.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So you can see last year,""" start="00:49:17.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it spiked up a lot. But this year,""" start="00:49:21.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it has taken less time.""" start="00:49:23.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So last month, it was about 93 hours.""" start="00:49:26.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And the month before that was just about 87""" start="00:49:29.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hours of prep. And this actually includes""" start="00:49:31.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things like captioning and,""" start="00:49:33.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and coordination. And then you can see a""" start="00:49:36.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""little bit of time here like the EMAX news""" start="00:49:38.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and and harvesting q&a and adding chapter""" start="00:49:42.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""index indices and things like that.""" start="00:49:43.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I, I like it, it's it's my form of fun.""" start="00:49:47.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And Otherwise, I'm mostly just,""" start="00:49:50.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, helping the kiddo go to play dates""" start="00:49:52.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and carrying things around.""" start="00:49:54.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And, you know, so this is the stuff that I do""" start="00:49:57.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to keep my brain happy.""" start="00:49:58.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And if you're wondering,""" start="00:50:00.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""okay, well, do you sleep?""" start="00:50:01.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That's the next question I expected people""" start="00:50:03.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""ask. The answer is yes,""" start="00:50:04.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we still actually do manage to sleep,""" start="00:50:06.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or at least I do. Less so now that I have a""" start="00:50:09.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""kid, this is like 2016,""" start="00:50:10.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""had a kiddo, and then suddenly much less""" start="00:50:13.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sleep, but still a reasonable amount of""" start="00:50:14.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sleep. So Emacs stuff happens,""" start="00:50:16.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can still sleep, and it's a lot of fun.""" start="00:50:19.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Now that's data for you folks.""" start="00:50:23.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, we can't top that at all.""" start="00:50:26.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: It's a blog post also,""" start="00:50:30.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yeah.""" start="00:50:30.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Especially, you start like this,""" start="00:50:33.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""how do you expect all of us to say anything""" start="00:50:36.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""after this? Whatever we say is not going to""" start="00:50:38.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""be backed up by data, it's not going to be as""" start="00:50:40.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""many hours, and it's not going to be as""" start="00:50:42.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""qualitative in general.""" start="00:50:43.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can remark on something because for me it's""" start="00:50:53.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""my fourth year helping to organize EmacsConf""" start="00:50:56.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and there's a definite change this year.""" start="00:50:59.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I did spend, usually I get into EmacsConf""" start="00:51:02.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""mode in late September when I start worrying""" start="00:51:05.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about the CFP, the call for proposal is""" start="00:51:07.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""finishing, and then we need to start running""" start="00:51:09.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""after speakers to secure the proposals to""" start="00:51:12.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""make sure, oh, can you do this?""" start="00:51:13.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Can you do maybe a 10-minute format instead""" start="00:51:16.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of a 20-minute format,""" start="00:51:17.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, all this jazzy stuff.""" start="00:51:18.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And usually it kind of looks like Sasha for""" start="00:51:21.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""me in terms of involvement,""" start="00:51:22.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or at least it did for the previous year.""" start="00:51:24.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But this year, now that I've been gainfully""" start="00:51:28.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""employed as a software developer,""" start="00:51:30.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I found it much harder to find the time to""" start="00:51:33.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""invest into MaxComp. But 1 of the things that""" start="00:51:36.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""allowed me to still stay efficient at my day""" start="00:51:39.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""job is the fact that I knew that Sasha and""" start="00:51:42.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""all the work that we did in previous years""" start="00:51:43.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""would come to help us organize this year's""" start="00:51:46.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference. And I'm not kidding,""" start="00:51:48.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this year, I've been keeping an eye,""" start="00:51:49.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""obviously, and we've been chatting with all""" start="00:51:51.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the organizers, but it's mostly been Sasha""" start="00:51:53.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""holding the fort from the end of the CFP in""" start="00:51:56.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""September to right about end of November.""" start="00:52:00.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I'll use the opportunity,""" start="00:52:02.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""as well my fellow co-organizers will,""" start="00:52:04.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to thank you Sasha for putting so much time""" start="00:52:07.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and energy into this. Not only Sasha from""" start="00:52:09.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this year, but also Sasha from last year,""" start="00:52:11.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and last year, and last year.""" start="00:52:12.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I will not be able to give you a figure""" start="00:52:19.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of how much time it takes.""" start="00:52:20.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can tell you that the 2 days of Emacs Con""" start="00:52:22.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""are a bloody marathon because we cannot share""" start="00:52:28.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""our screens with you, but Sasha has given you""" start="00:52:31.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a little bit of pointers about,""" start="00:52:32.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, how much stuff we need to monitor.""" start="00:52:34.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sasha just switches constantly between""" start="00:52:36.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""workspaces. I just put everything on 1""" start="00:52:38.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""workspace and my screen looks absolutely""" start="00:52:41.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""mental. And then I wonder why my microphone""" start="00:52:44.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is clipping on BVB, I suppose.""" start="00:52:46.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""All right, that's all for me.""" start="00:52:47.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Anyone wants to say anything about how much""" start="00:52:48.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""time it takes? Sasha, please.""" start="00:52:49.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: I have a nice setup this year because I""" start="00:52:52.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""actually have a Matthew Lent donated a""" start="00:52:55.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""computer to me that can handle the big""" start="00:52:57.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""monitor and I'm stealing my husband's big""" start="00:53:00.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""monitor over there. See,""" start="00:53:01.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So this is my setup today.""" start="00:53:02.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's got like conference stuff on my laptop""" start="00:53:05.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then just IOC on the other big screen and""" start="00:53:08.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the 480p so I can see,""" start="00:53:10.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can make sure it doesn't fall down.""" start="00:53:12.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yes, so I have a nice setup today.""" start="00:53:14.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Anyone wants to comment about how much time""" start="00:53:22.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it takes for them to organize the MaxCon for""" start="00:53:24.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""2, you know, including everything,""" start="00:53:25.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""be it the brainstorming,""" start="00:53:26.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the answering volunteers and stuff like this?""" start="00:53:28.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Or we can move to another question,""" start="00:53:31.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of course.""" start="00:53:31.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: I mean, I know for myself,""" start="00:53:34.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I kind of dropped the ball this year,""" start="00:53:36.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""somewhat unintentionally or unintentionally.""" start="00:53:38.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Well, yeah, I didn't have any other choice,""" start="00:53:41.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""basically, at least in like September through""" start="00:53:44.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like early November or mid November.""" start="00:53:46.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But I think like, it sort of differs,""" start="00:53:51.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I guess, from year to year.""" start="00:53:52.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sometimes life happens,""" start="00:53:53.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and no matter how much you would love to put""" start="00:53:57.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a ton of time into something,""" start="00:53:59.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you just can't. And maybe next year you can""" start="00:54:01.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""do a lot more. So I'm optimistic I'll be able""" start="00:54:04.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to put in much more time into things for""" start="00:54:07.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""EmacsConf next year, but that's just me.""" start="00:54:09.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: I just want to say something before Robin""" start="00:54:12.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""drops in. Sasha, go please first.""" start="00:54:13.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: And I think people shouldn't like feel bad""" start="00:54:18.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about having those. I think designing""" start="00:54:20.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference systems or processes so that they""" start="00:54:24.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""can take advantage of little pockets of time""" start="00:54:26.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is the way to go. I love the fact that we now""" start="00:54:30.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""have a system where hosts can show up on the""" start="00:54:33.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""day of and just rock it,""" start="00:54:35.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? So this is great.""" start="00:54:36.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It is good that we can get by with less time""" start="00:54:41.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""throughout the process and just take""" start="00:54:43.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""advantage of whatever time people have.""" start="00:54:45.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Whether it's, you know,""" start="00:54:46.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""they've got 2 hours, they want to caption a""" start="00:54:49.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talk, that sort of stuff is already totally""" start="00:54:51.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""awesome.""" start="00:54:52.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: And yeah, you both, thank you.""" start="00:54:57.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yeah, you both stole my Thunder and then put""" start="00:55:00.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a quarterback in me. I couldn't agree more""" start="00:55:03.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""with everything you said.""" start="00:55:04.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That's something that just typifies what is""" start="00:55:09.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""amazing about this conference,""" start="00:55:10.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? It's a kind of accessibility,""" start="00:55:12.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""isn't it? Having some work I can give you""" start="00:55:17.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that helps you give back to your community""" start="00:55:19.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that is at your level,""" start="00:55:21.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that fits your time budget,""" start="00:55:23.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that is something that you're willing to go""" start="00:55:26.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""care about because it intersects,""" start="00:55:28.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, the world you live in in some""" start="00:55:31.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""practical way and therefore you can make time""" start="00:55:34.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for it. We all live in a lot of different""" start="00:55:37.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""trenches and making them intersect is 1 of""" start="00:55:40.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the things Emacs does in a technical way""" start="00:55:42.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: and""" start="00:55:43.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: through this conference at least in a very""" start="00:55:47.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""community way. Okay, and it brings me back""" start="00:55:51.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""also on the OBS front.""" start="00:55:52.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I think that's what really excited me""" start="00:55:54.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""too. When I think about the potential that's""" start="00:55:56.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""out there and getting a bunch of people""" start="00:55:59.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""looking at the work you've already done with""" start="00:56:01.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""OBS WebSocket and thinking about,""" start="00:56:03.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, oh, we want more timers that count""" start="00:56:06.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things down and we want each organizer to be""" start="00:56:09.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""able to have a little palette of them,""" start="00:56:10.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""some of which are gonna be handed to you by""" start="00:56:12.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the conference director and some of which you""" start="00:56:14.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""can add yourself because they help you and""" start="00:56:16.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that's right. And, you know,""" start="00:56:19.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""have, you know, keeping things really fast""" start="00:56:21.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and loose so we can make the artistic""" start="00:56:24.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""decisions on the fly that make our conference""" start="00:56:26.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""what it is, but then making,""" start="00:56:30.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, a simple automated tool chain that""" start="00:56:33.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""anyone can learn and that we know how to""" start="00:56:36.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""execute the steps of manually.""" start="00:56:37.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That's the actual design pattern that you've""" start="00:56:41.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""implemented here that's working so well.""" start="00:56:42.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So the""" start="00:56:47.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: 1 thing I wanted to ask about Amin saying,""" start="00:56:50.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""oh, I've dropped the ball this year.""" start="00:56:51.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Amin's, just to be clear with everyone,""" start="00:56:53.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Amin's definition of dropping the ball is""" start="00:56:55.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""securing a sponsorship with the FSF.""" start="00:56:56.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So that's dropping the ball for you.""" start="00:56:58.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Well attending a weekly meeting,""" start="00:57:02.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We take 1 week off a month where we""" start="00:57:04.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""coordinate infrastructure issues between this""" start="00:57:08.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and other FSF supported projects using quote""" start="00:57:13.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""unquote GNU infrastructure.""" start="00:57:14.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That's kind of a, GNU is really an umbrella""" start="00:57:16.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""term once you get kind of close to it.""" start="00:57:19.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You know, it's like GNU is all of the""" start="00:57:22.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""volunteers helping with this vision we have""" start="00:57:25.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of user rights.""" start="00:57:25.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: 1 last thing I wanted to add about how much""" start="00:57:31.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""time we spend on this.""" start="00:57:32.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's just the fact that we've experimented""" start="00:57:33.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""over the 4 years I've been part of this.""" start="00:57:36.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You know, the first year we had so many""" start="00:57:38.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""meetings because we thought this would be the""" start="00:57:40.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""way to know 1 another and this would be the""" start="00:57:42.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""way to create qualitative notes.""" start="00:57:44.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And we've come back to this.""" start="00:57:46.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: That is what I saw. I can't help but""" start="00:57:48.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interrupt you again. This is all I do.""" start="00:57:49.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Leo This is why I keep off the microphone""" start="00:57:52.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""until the last 20 minutes of the conference""" start="00:57:54.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""once everybody already wants to hang up Then""" start="00:57:56.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I know you'll be honest with me But I have to""" start="00:57:58.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""say when I looked at that table of data all I""" start="00:58:01.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""saw was 200 hours of Sasha's life that she""" start="00:58:05.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""spent talking to the, you know,""" start="00:58:06.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""all many of us were involved.""" start="00:58:08.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's not just the 4 or 5 of us that,""" start="00:58:10.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, that have done this last 2 years""" start="00:58:13.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""convention, right? It's,""" start="00:58:14.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, there's been many people that have""" start="00:58:17.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""come in, shared wise thoughts,""" start="00:58:19.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""helping us form the, I don't know,""" start="00:58:22.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""ethos or all of the things that we're""" start="00:58:24.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""carrying forward into 2024.""" start="00:58:26.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sorry, Leo.""" start="00:58:31.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: No, no,""" start="00:58:32.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: you're fine, You're fine.""" start="00:58:33.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I mean, you pretty much continued with what I""" start="00:58:35.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""was going to talk about.""" start="00:58:37.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I'm looking at the time and I've already""" start="00:58:41.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""extended by 5 minutes the amount of time I""" start="00:58:44.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""was supposed to stay and Flowy is looking at""" start="00:58:46.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""me with very teary eyes because he's thinking""" start="00:58:50.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about the meeting he's going to have at 9am""" start="00:58:51.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""tomorrow, as will I by the way.""" start="00:58:53.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yeah, don't you have to""" start="00:58:54.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: be commuting like right now Flowy?""" start="00:58:56.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I mean aren't you supposed to be...""" start="00:58:58.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I hope you get to sleep before work.""" start="00:59:01.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Thank you so much for your awesome work this""" start="00:59:04.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""year.""" start="00:59:04.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 6]: I mean, I didn't do so much at the Emojis""" start="00:59:07.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Conference, so I'm just here like from""" start="00:59:09.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Friday. At first, I was looking at the""" start="00:59:13.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""website, which talks we're having,""" start="00:59:14.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So it's all fine. So maybe next year or the""" start="00:59:17.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""coming year, I can do a little bit more""" start="00:59:19.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""privacy.""" start="00:59:19.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: A little more, like again,""" start="00:59:23.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like with Amin, Flowy's definition of doing,""" start="00:59:25.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""not having done much is hosting 1 of many of""" start="00:59:30.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the Dev talks. So you could be kind of""" start="00:59:34.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""worried about it. All right,""" start="00:59:35.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""folks, considering the question that we have""" start="00:59:38.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right now, we still see people adding""" start="00:59:40.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""questions, but I think we are all pretty""" start="00:59:42.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""tired and we need to get on with the rest of""" start="00:59:44.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""our weekends or nights.""" start="00:59:46.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So do I go into parting words now everyone?""" start="00:59:49.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Are we okay with this?""" start="00:59:50.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'll take this for a yes.""" start="00:59:55.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'll ask Sasha, yeah?""" start="00:59:56.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh I think I basically have until the kiddo""" start="01:00:00.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yells at me to come for dinner so I can hang""" start="01:00:03.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""out with people after.""" start="01:00:04.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and do the wrapping up.""" start="01:00:09.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: But I""" start="01:00:09.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: All right, splendid. Go ahead know,""" start="01:00:10.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right, I'll do the wrapping up for the""" start="01:00:12.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""perhaps the stream. We might leave it up""" start="01:00:13.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""because there's no impetus for us to close""" start="01:00:16.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it. But at least to officially close while""" start="01:00:20.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we're still there, EmacsConf 2023,""" start="01:00:22.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I will have again to thank everyone,""" start="01:00:25.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""all the speakers, all my co-organizers for""" start="01:00:28.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""making this possible. You've seen all the""" start="01:00:31.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""care that we put into it,""" start="01:00:32.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and we are glad every year that all this work""" start="01:00:34.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is doing something in terms of community""" start="01:00:37.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""building, in terms of leading more people to""" start="01:00:41.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""join us every year as speakers,""" start="01:00:42.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or just join us as a user of Emacs.""" start="01:00:45.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And it's always a pleasure to organize the""" start="01:00:49.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference, to host it,""" start="01:00:51.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and to work with everyone in the room""" start="01:00:53.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""currently. Corwin and I are constantly joking""" start="01:00:56.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""when we are backstage making jokes.""" start="01:00:59.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think it's Corwin we said last year during""" start="01:01:03.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the closing remarks that there was no other""" start="01:01:06.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""place they'd rather be than in the backstage.""" start="01:01:09.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And for me, even though many things have""" start="01:01:12.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""changed in my life over the last year,""" start="01:01:15.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""many good things have happened,""" start="01:01:16.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's good to come back to Emacs Cons as this""" start="01:01:19.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""milestone and say, oh yeah,""" start="01:01:22.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm exactly where I want to be,""" start="01:01:23.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""with the people I want to be with,""" start="01:01:25.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and I see myself and I cannot wait to see""" start="01:01:29.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""myself again in the situation next year.""" start="01:01:30.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So thank you so much everyone.""" start="01:01:32.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""If you want to join us,""" start="01:01:34.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""ask questions, we'll still be here for a""" start="01:01:36.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""while. Floey might drop out,""" start="01:01:37.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I might drop out, Sasha might drop out,""" start="01:01:39.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but we'll be here to answer as many questions""" start="01:01:41.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""as you want for as long as we can.""" start="01:01:43.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Bye bye everyone and let's get started with""" start="01:01:46.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the after show now.""" start="01:01:46.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Bye Leo, bye Chloe! I'll drop out eventually""" start="01:01:51.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""when the kiddo yells at me.""" start="01:01:53.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I can't tell you how much fun this is,""" start="01:01:56.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yeah. The way to remember what I said,""" start="01:01:58.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Leo, it's 100% true. Oh man,""" start="01:02:00.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""turning off your lights,""" start="01:02:01.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm doing it. I'm doing it too.""" start="01:02:02.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sorry y'all. Oh, yeah,""" start="01:02:04.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""bye-bye lights""" start="01:02:05.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah, that's every year that's how we finish""" start="01:02:10.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we just turn off the the big lights that we""" start="01:02:12.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""have in our faces all the day especially the""" start="01:02:14.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hosts""" start="01:02:14.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: and Tell me if there's too much back chatter""" start="01:02:19.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: get off my headphones,""" start="01:02:22.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""too, so I can""" start="01:02:24.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: when I hear you in the room.""" start="01:02:25.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Can I hear you now? Yeah.""" start="01:02:28.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Is it feeding back pretty bad?""" start="01:02:31.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Hello? there is some echo.""" start="01:02:34.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah, there is some echo.""" start="01:02:37.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I think Okay. Fine. I can live with my""" start="01:02:41.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""headset a little longer.""" start="01:02:42.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I give 1 ear a break at a time.""" start="01:02:44.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thanks for your sacrifice.""" start="01:02:47.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Oh, well, you know, it's a small,""" start="01:02:50.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""small, small price to pay to get to smooth""" start="01:02:53.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""with y'all. Yeah, I was just looking at that""" start="01:02:56.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""chart and I was thinking about all of those""" start="01:02:58.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""meetings that we had like 18 months we were""" start="01:03:01.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just on this death march to organize this and""" start="01:03:05.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's just such an amazing accomplishment that""" start="01:03:09.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you you have here Sasha like I'm sorry to""" start="01:03:11.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""pick on you personally but the work that you""" start="01:03:14.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""put in keep being able to keep it the whole""" start="01:03:16.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""technical project in your mind,""" start="01:03:18.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""all the way down to presenting it at this""" start="01:03:21.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""year's conference and like kind of spoon""" start="01:03:24.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""feeding it to people that want to run off in""" start="01:03:26.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""their own damn direction and then handing""" start="01:03:27.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""them an org is the 1 that people keep bugging""" start="01:03:31.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""us about. So if you're looking for a project,""" start="01:03:33.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""here it is. Just really well done.""" start="01:03:37.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I no longer feel like we wasted a lot of time""" start="01:03:43.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there. I mean, you remember I enjoyed so much""" start="01:03:46.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""all of our check ins and all of that stuff.""" start="01:03:48.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But we had so many ideas,""" start="01:03:51.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you can imagine that I wondered,""" start="01:03:53.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, I wondered if we should have had""" start="01:03:56.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""more focused meetings and all that.""" start="01:03:58.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I was glad when we stopped having like""" start="01:04:01.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""weekly meetings, because you know what I mean""" start="01:04:04.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""To keep this much power in the room once a""" start="01:04:06.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""week, it feels creepy.""" start="01:04:08.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""This much intellectual power.""" start="01:04:10.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Anyway, that's it. I think that's it for me.""" start="01:04:18.525" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, and I'll say, I mean,""" start="01:04:19.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can't obviously speak for Sash or anyone""" start="01:04:22.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""else. Yeah, the regular meetings were a""" start="01:04:24.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""little bit intense than we had the year""" start="01:04:26.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""before, but I'm kind of also super glad that""" start="01:04:29.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we did do them. And, you know,""" start="01:04:31.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in a way, it did help us sort of connect and""" start="01:04:34.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""get to know each other much more regularly or""" start="01:04:38.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""much more which is great and I see thumbs up""" start="01:04:41.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""from Leo and Corwin so yeah happy we did""" start="01:04:44.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""them. Might want to have some kind of""" start="01:04:49.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""actually irregular ones every once in a while""" start="01:04:51.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""if we have to decide on something.""" start="01:04:53.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But if like this year,""" start="01:04:55.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everything can be worked out pretty much ad""" start="01:04:57.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hoc, whenever needs be,""" start="01:04:58.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like over asynchronous communications.""" start="01:05:00.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I see Sasha nodding very excitedly.""" start="01:05:03.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""This also works. So yeah.""" start="01:05:07.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I also see some questions coming in here""" start="01:05:10.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in BBB. If other folks want to join,""" start="01:05:14.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""please feel free to do that as well.""" start="01:05:16.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yeah, I don't think we have an issue tracker""" start="01:05:18.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right now, but our whole website is a wiki.""" start="01:05:22.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So if you wanna like create a new page or""" start="01:05:24.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there might be a page,""" start="01:05:26.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know. You can of course go in and""" start="01:05:28.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""edit it to your heart's content.""" start="01:05:29.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah. Hilarious, I couldn't,""" start="01:05:36.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like I almost managed to type that as fast as""" start="01:05:39.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you could say it, you know.""" start="01:05:40.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That's fine. I get the same answer in the""" start="01:05:43.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""chat. Yep. Our website's a wiki and we""" start="01:05:46.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""definitely use ideas here.""" start="01:05:48.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""If you want to implement them or you know""" start="01:05:50.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""document them enough that even Corwin can""" start="01:05:53.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""code it then you know I'll do that.""" start="01:05:55.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Also I'll go through all the etherpads at""" start="01:05:58.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""some point to harvest them and I think I have""" start="01:06:00.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yeah I have an Emacs list function that does""" start="01:06:02.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this for me. So that I can go through that""" start="01:06:05.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""thing and include that in our organizers""" start="01:06:06.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""notebooks, lessons learned and ideas for next""" start="01:06:09.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""year.""" start="01:06:09.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah.""" start="01:06:11.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah, because something that you know,""" start="01:06:15.010" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We were talking about the different models""" start="01:06:16.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""between having many, many meetings and how it""" start="01:06:18.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""paid off eventually. The thing is,""" start="01:06:20.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this year we had no meetings.""" start="01:06:22.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We met Friday morning on Mumble and we were""" start="01:06:27.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""ready to go. We did chat things up a little""" start="01:06:29.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""bit on ISE, obviously,""" start="01:06:30.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but no meeting this year.""" start="01:06:31.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I'm tempted to say that,""" start="01:06:33.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yes, we could have off-hand meetings,""" start="01:06:34.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but I think it's mostly because we want to""" start="01:06:36.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""see 1 another, not because we need""" start="01:06:38.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""necessarily for those meetings to prepare""" start="01:06:40.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs cons. But what I wanted to say as well""" start="01:06:45.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is that I think it's a testament to the bets""" start="01:06:49.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that Sasha took last year to automatize a lot""" start="01:06:52.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of things. I mean, we'd already been""" start="01:06:54.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""automatizing a lot of stuff,""" start="01:06:55.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like writing scripts for every single thing""" start="01:06:58.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in ESPire, but last year we made a big bet to""" start="01:07:02.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""say, what if we had OBS in the cloud?""" start="01:07:04.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""What if we had a streaming platform that was""" start="01:07:06.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""running on a machine? And this is what""" start="01:07:08.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""allowed us to very smoothly have 2 tracks,""" start="01:07:11.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the general track and the dev track.""" start="01:07:13.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I think the beauty of this system is""" start="01:07:16.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that, obviously, because we get more and more""" start="01:07:19.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""speakers submitting talks,""" start="01:07:20.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we are starting to think maybe we actually""" start="01:07:22.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""need a third track or something and no 1 is""" start="01:07:26.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""stressed in the room when Sasha says this.""" start="01:07:28.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You know, there's not the reaction that's""" start="01:07:31.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like, oh no it's gonna be tough,""" start="01:07:32.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we're gonna need more hosts,""" start="01:07:33.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""organizers, it's just a calm...""" start="01:07:34.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Now, point of order, Now Flowy is stressed""" start="01:07:37.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""when Sasha says this.""" start="01:07:39.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: That was just a-""" start="01:07:44.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: I didn't know, Colin, we could put you in the""" start="01:07:46.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""spot next year. You'd be like,""" start="01:07:47.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, hey, Colin, what do you feel about""" start="01:07:49.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hosting?""" start="01:07:49.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: You know, I'm happy to do it.""" start="01:07:53.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I feel, I mean, just to jump in there and""" start="01:07:56.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""say, yes, exactly. No,""" start="01:07:59.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there's no concern on the part of the""" start="01:08:01.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""organizer committee that we could expand""" start="01:08:03.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this. If you said we needed to expand to 4""" start="01:08:06.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""tracks, I think we would gulp and consider""" start="01:08:08.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it, you know, from there,""" start="01:08:10.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it gets a little crazy,""" start="01:08:11.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but strictly because there aren't that many""" start="01:08:13.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people that we know want to commit.""" start="01:08:16.399" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""What did we see there?""" start="01:08:18.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""80 hours of potential work that,""" start="01:08:20.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, that could go into organizing next""" start="01:08:23.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""year's conference if you find that it's a""" start="01:08:25.439" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""rabbit hole for you and being a streamer""" start="01:08:26.979" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""means you want to read every email and""" start="01:08:28.979" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""respond to every, as Sasha has done this last""" start="01:08:31.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""year, right? So when I look at her numbers""" start="01:08:34.439" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for total participation,""" start="01:08:35.359" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that's really a high watermark.""" start="01:08:38.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sasha really took care of this convention,""" start="01:08:43.439" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, like a producer might.""" start="01:08:46.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And the fact that what used to take 200 hours""" start="01:08:52.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""before, I mean, I can't harp enough on the""" start="01:08:56.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""story that that's telling you,""" start="01:08:57.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? And as I think about it with a project""" start="01:09:00.399" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""manager hat on, right?""" start="01:09:01.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm saying, okay, well,""" start="01:09:02.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that's, you know, that work can potentially""" start="01:09:07.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""be amplified to many thousands of hours of""" start="01:09:09.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""work, considering the automation and the""" start="01:09:11.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""potential for bringing people in.""" start="01:09:13.279" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So if you thought about it as a money-making""" start="01:09:14.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""thing, If we were trying to make money by""" start="01:09:16.319" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""having these conventions,""" start="01:09:16.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you would think we have a very profitable""" start="01:09:19.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""business here because we can amplify the""" start="01:09:23.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talent that walks in the door really""" start="01:09:25.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""effectively, if that makes sense,""" start="01:09:28.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""through the tools and the training.""" start="01:09:29.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: So we should clarify that if anyone wants to""" start="01:09:33.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""volunteer as a host or just check in,""" start="01:09:35.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""let's just talk host. It's really just a""" start="01:09:38.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""matter of showing up, making sure your BVB""" start="01:09:40.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""works so you can talk.""" start="01:09:42.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""If you want to share your webcam,""" start="01:09:43.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you can. You can skip it if you don't want""" start="01:09:44.899" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to. You can share the screen with the pad.""" start="01:09:46.359" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And then you just sit there and you chat with""" start="01:09:48.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a speaker and you read the questions off the""" start="01:09:51.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""pad in case they don't read the questions off""" start="01:09:53.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""themselves. So it can be a very low effort,""" start="01:09:56.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""low stress way to get into it and just there""" start="01:09:59.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""kind of helping the speaker have somebody to""" start="01:10:02.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talk to. It doesn't have to take 80 hours.""" start="01:10:05.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It can take 2 hours and that's cool.""" start="01:10:08.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: And the same, and that's just like the""" start="01:10:10.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""transcription task. Yeah,""" start="01:10:11.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sorry, I probably missed the lead there,""" start="01:10:13.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? Every individual part of this is""" start="01:10:16.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""really easy. So it's an open-ended commitment""" start="01:10:19.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to come and kind of meet a part of the""" start="01:10:22.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""committee, a part of the community,""" start="01:10:24.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? To come in and say,""" start="01:10:27.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""maybe you're really excited about org,""" start="01:10:29.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you could review talks and just review the""" start="01:10:33.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""org ones. There's not an obligation that says""" start="01:10:35.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you're going to look at every talk that's""" start="01:10:37.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""submitted, right? Share your thoughts on the""" start="01:10:40.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talks that you have a chance to review the""" start="01:10:42.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""proposals. That's the submissions review""" start="01:10:44.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""part, right? So there's a way to help with""" start="01:10:48.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""almost any appetite for I'd like a little""" start="01:10:51.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""extra work in the Emacs department here like""" start="01:10:54.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""if you want to feel like you're part of the""" start="01:10:56.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""team this this team is really easy to get""" start="01:10:59.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: think that's""" start="01:11:02.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: involved with. I I mean,""" start="01:11:03.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""please. Go ahead,""" start="01:11:04.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: No, no, please. I've talked enough.""" start="01:11:06.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: sort of the... Leo. Well,""" start="01:11:08.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't get tired of hearing you talk,""" start="01:11:10.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but yeah, I was going to say,""" start="01:11:13.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yeah, I feel like that's the general message""" start="01:11:16.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""here is that we're all just a bunch of people""" start="01:11:19.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""who are interested in this.""" start="01:11:21.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And of course, being humans,""" start="01:11:24.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""each of us have different kinds of lives and""" start="01:11:26.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""different kinds of availabilities and""" start="01:11:27.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""different kinds of interests.""" start="01:11:28.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And there is something for everybody,""" start="01:11:29.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""both in terms of the kinds of tasks that you""" start="01:11:34.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""need doing, but also in terms of the amount""" start="01:11:37.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of time that you want or are able to put in.""" start="01:11:39.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So yes, if you do think this is something""" start="01:11:43.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that you might be interested in helping with""" start="01:11:46.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for future additions and such,""" start="01:11:47.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or even some of the post-conference work that""" start="01:11:51.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""needs doing after this year.""" start="01:11:52.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Please reach out there's something for""" start="01:11:55.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everybody and I would love to have""" start="01:11:57.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 6]: you. I can confirm there was an easy access""" start="01:12:03.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so I came here last year just doing some""" start="01:12:06.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""checking in and the process of getting,""" start="01:12:08.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's called a trained in was really,""" start="01:12:10.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""really short. There was a lot of""" start="01:12:12.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""documentation how to do something.""" start="01:12:13.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I mean, there's a pad that gets sent and what""" start="01:12:17.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to do, when to do, and what to ask is like""" start="01:12:20.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""really incredible. So thank you for that.""" start="01:12:22.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Just come here, write an email,""" start="01:12:26.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""join us. It's really, really cool.""" start="01:12:28.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And it's a great experience to be honest.""" start="01:12:30.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Thank you. And while Sasha is speaking about""" start="01:12:35.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the update of the wiki,""" start="01:12:36.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""oh Coleman did you want to say something?""" start="01:12:38.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: No I was just I was just gonna embarrass""" start="01:12:41.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Floey Coder further but you go ahead.""" start="01:12:44.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I was just gonna say I think you're pretty""" start="01:12:51.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""quick, you're pretty quick,""" start="01:12:52.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you took to it really quickly or you show""" start="01:12:55.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just kind of a reflexive calm.""" start="01:12:57.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Like you know how to not talk over people.""" start="01:12:59.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You're already better at it than I am.""" start="01:13:01.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Now, you know, I think,""" start="01:13:06.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yeah, I hope you're enjoying the new stuff""" start="01:13:09.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that you're starting to take on because you""" start="01:13:10.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""seem to be doing great with it.""" start="01:13:12.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And yeah, I hope you're not sitting there""" start="01:13:14.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""thinking that you're taking,""" start="01:13:15.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, that you're coming on,""" start="01:13:17.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that you're not taking on enough""" start="01:13:19.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""responsibility or anything like that,""" start="01:13:21.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or I don't know, maybe.""" start="01:13:23.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I picked up like a little undercurrent of""" start="01:13:26.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like, I don't do that much,""" start="01:13:28.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and I hope you don't feel that way because I""" start="01:13:31.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just enjoyed really having your help the last""" start="01:13:33.719" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""couple of years. Thank you very much.""" start="01:13:38.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah, that's how they get you,""" start="01:13:47.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, they just tell you,""" start="01:13:48.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""oh, could you do check-ins?""" start="01:13:49.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Like I showed up for 4 years ago saying,""" start="01:13:51.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""oh, I'd like to help and look at me now.""" start="01:13:54.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think I did I host on the first year?""" start="01:13:56.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm pretty sure I did.""" start="01:13:57.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Like it took 2 months basically of onboarding""" start="01:14:00.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to convince me to do some of the hosting and""" start="01:14:02.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""back then oh it was so tough for us to do the""" start="01:14:06.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hosting because we didn't have all the fancy""" start="01:14:08.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""setup we have this year and we were""" start="01:14:10.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""struggling with OBS with bid rates with""" start="01:14:13.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sharing scenes I'm glad we are where we are""" start="01:14:18.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""today, where I don't have to worry as much""" start="01:14:20.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about this. But it's also nice,""" start="01:14:21.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's also 1 thing, we do have a culture of""" start="01:14:24.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""documentation as Sasha exemplified,""" start="01:14:25.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and like Flo mentioned,""" start="01:14:28.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""documentation on the roles.""" start="01:14:29.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yes, We did do this to help people join us.""" start="01:14:33.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But really, I'm the host of General,""" start="01:14:39.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but it could be just anyone else because we""" start="01:14:41.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""have so much documentation on how to do""" start="01:14:43.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things. Obviously, when a co-organizer is""" start="01:14:46.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""doing a role, we tend to have an eye on how""" start="01:14:48.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the infrastructure is going.""" start="01:14:49.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But really, if you want to join us,""" start="01:14:51.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we will make sure that the jobs that you""" start="01:14:54.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""have, first, you like them and it's something""" start="01:14:57.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that interests you, and we will also make""" start="01:14:59.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sure that on our end, everything goes well""" start="01:15:04.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for you. Like we'll be monitoring the streams""" start="01:15:06.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and every time we have a new person join us,""" start="01:15:08.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it is as much energy and mental availability""" start="01:15:13.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to invest into, oh, maybe we could do this.""" start="01:15:17.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Oh, 0, we have a fire going out because the""" start="01:15:19.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""speaker hasn't checked in yet.""" start="01:15:21.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So it's all about sharing expertise,""" start="01:15:24.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's all about making people level up in""" start="01:15:27.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""terms of skills that are really useful.""" start="01:15:28.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I will attribute a lot of my success in""" start="01:15:34.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""public speaking to the work I do with""" start="01:15:35.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""EmacsConf, and I'm sure plenty of people""" start="01:15:38.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""would gain from joining us and learning these""" start="01:15:43.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""skills. All right, It's about 30 minutes past""" start="01:15:47.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the official time. Do we want to go a little""" start="01:15:49.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""longer? Are we still available to go?""" start="01:15:51.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""All right, well, let's keep going.""" start="01:15:55.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't see any more people joining us on the""" start="01:16:00.443" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: We have Bob,""" start="01:16:00.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Blue Button. who was 1 of the speakers today""" start="01:16:01.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in the room. Bob, do you want to maybe unmute""" start="01:16:03.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yourself and ask us some questions?""" start="01:16:05.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Or just thank us. I mean,""" start="01:16:08.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm just begging for something.""" start="01:16:09.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But I know you've been very helpful.""" start="01:16:10.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: Yes. How are you? No, I've really had fun.""" start="01:16:15.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""No, I'm exhausted. I'm exhausted for you,""" start="01:16:18.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think. So I learned something.""" start="01:16:22.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Everybody wants to record their videos,""" start="01:16:25.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which of course, is great,""" start="01:16:26.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then you have the subtitles and""" start="01:16:28.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everything. But I saved a lot of time by""" start="01:16:31.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""doing it live this year and not going in and""" start="01:16:35.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""tweaking and doing all the editing and""" start="01:16:38.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""spending all the time that we do.""" start="01:16:39.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And it was kind of fun to do it that way too.""" start="01:16:42.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So just a little note there.""" start="01:16:44.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But I look forward to seeing 1 of my talks""" start="01:16:48.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""subtitled someday. So no,""" start="01:16:53.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I love what you do. It's fun.""" start="01:16:55.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I've only seen part of Sasha's talk,""" start="01:16:57.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so I'll go and review that about how you're""" start="01:17:00.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""automating all this. You know,""" start="01:17:03.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's a little sad for me personally that of""" start="01:17:06.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""course, Org gets all the attention,""" start="01:17:09.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but you know, we're exposing hyperbole more""" start="01:17:14.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""now and There's definitely a growing interest""" start="01:17:16.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""on Reddit and you know,""" start="01:17:18.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think it's kind of like EmacsConf.""" start="01:17:20.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Give it a few years. We went away for a long""" start="01:17:23.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""time and then we came back.""" start="01:17:24.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We'll start to see it permeate the Emacs""" start="01:17:30.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""first. But I was thinking that,""" start="01:17:33.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, I think people who like Emacs and""" start="01:17:36.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""stuff, they read things online,""" start="01:17:38.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""they come to this conference,""" start="01:17:40.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but we're always hearing about,""" start="01:17:43.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""well, the next generation.""" start="01:17:44.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We have to deal with that.""" start="01:17:47.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I think a lot of people get exposed to""" start="01:17:50.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs in college. Now a professor turns them""" start="01:17:52.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""on to it and makes them use it,""" start="01:17:55.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then they go out into the real world,""" start="01:17:57.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and there's no encouragement anymore,""" start="01:17:59.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and they just drop it.""" start="01:18:01.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And with all of what you're putting together""" start="01:18:05.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""here, it seems like if there was some reach""" start="01:18:09.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""out to universities and college students,""" start="01:18:14.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You know, we might get a whole new big crowd""" start="01:18:18.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of people coming in. You know,""" start="01:18:22.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just as I think OREG has really attracted a""" start="01:18:25.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""lot of people in the sciences,""" start="01:18:26.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""since that's what it was originally developed""" start="01:18:30.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for. So just a thought,""" start="01:18:32.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, maybe if you get any volunteers who""" start="01:18:35.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""can help in the reach out or just,""" start="01:18:38.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, sending things around to""" start="01:18:40.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""universities that might really extend who""" start="01:18:43.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""gets exposed to this stuff.""" start="01:18:45.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I think that's a great and very""" start="01:18:49.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interesting idea. And it sort of touches on a""" start="01:18:51.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""couple of different things.""" start="01:18:52.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sort of like you mentioned,""" start="01:18:53.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""well, with org, it sort of really drew into""" start="01:18:56.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sciences, folks. It would be interesting to""" start="01:19:00.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""see other parts of Emacs doing that for other""" start="01:19:03.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""kinds of communities, but also specifically,""" start="01:19:05.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I guess, for colleges and universities.""" start="01:19:08.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yeah, it would be cool if we had local groups""" start="01:19:14.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or local meetups, because so far right now,""" start="01:19:17.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think the most common ones are like by city""" start="01:19:20.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like for example a Toronto Emacs meetup or""" start="01:19:22.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""something like that yeah if you could maybe""" start="01:19:25.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""encourage or help foster a university level""" start="01:19:28.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""type of thing you know University of blah""" start="01:19:32.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""blah Emacs group or something like that and""" start="01:19:35.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know seeing what their needs would be or""" start="01:19:39.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""trying to think also what features of Emacs""" start="01:19:42.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""would be very useful in an academic slash""" start="01:19:46.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""educational setting. Yeah,""" start="01:19:48.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""lots of food for thought there.""" start="01:19:50.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So thank you for mentioning this.""" start="01:19:52.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: Sure. And I guess, yeah,""" start="01:20:02.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""OBS is coming up here.""" start="01:20:04.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I worked with that a bit,""" start="01:20:06.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yes, last year. You know,""" start="01:20:08.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""another powerful piece of software with a""" start="01:20:12.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sort of, I think, a weak user interface,""" start="01:20:15.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, for the newbies coming along on it.""" start="01:20:20.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And maybe, you know, if there's,""" start="01:20:23.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""if that's kind of what people use,""" start="01:20:25.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""figuring out or putting some information in""" start="01:20:29.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the wiki about how to do that,""" start="01:20:32.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, work with it or...""" start="01:20:34.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Oh, good idea.""" start="01:20:36.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I can comment. It is definitely the""" start="01:20:43.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""preeminent streamer software out there,""" start="01:20:46.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""well beyond the free software community.""" start="01:20:49.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's used by most streamers on Twitch and""" start="01:20:54.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other like commercial for-profit things but""" start="01:20:59.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of course those companies are making money""" start="01:21:01.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""off people trying to give money to the""" start="01:21:04.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""streamers. Those streamers aren't getting any""" start="01:21:07.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""software help. So actually most of them are""" start="01:21:10.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""dependent for their income on free software""" start="01:21:13.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like OBS and OBS in specific or by some kind""" start="01:21:18.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of forked brand name is the primary tool.""" start="01:21:23.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: If I'm not mistaken I believe Stefan has""" start="01:21:28.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""joined us right now in the room.""" start="01:21:29.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm putting you on the spot,""" start="01:21:33.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""if you want to stay muted you can.""" start="01:21:34.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Oh, you have unmuted yourself.""" start="01:21:35.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: I managed to click the unmute button.""" start="01:21:38.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yes, I'm here. How are you guys doing?""" start="01:21:41.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Doing good, surviving here.""" start="01:21:43.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Congratulations.""" start="01:21:44.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Late in your time.""" start="01:21:45.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: Really amazing work organizing the""" start="01:21:50.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference. I really have to congratulate""" start="01:21:51.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everyone. So I just hopped on here to sort of""" start="01:21:56.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""say that I'm extremely impressed.""" start="01:21:58.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I think this is an example to follow for""" start="01:22:04.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other conferences and for Emacs in general.""" start="01:22:07.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think we need more of this community-type""" start="01:22:09.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""organizing and just getting people interested""" start="01:22:12.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and involved on all kinds of levels can only""" start="01:22:15.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""help Emacs. Because we are in this for the""" start="01:22:20.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""long haul. That's it.""" start="01:22:22.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Oh, what a great point.""" start="01:22:25.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""If I can comment, that's 1 of the things that""" start="01:22:28.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""drew me to trying to contribute to free""" start="01:22:30.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""software when I was a kid,""" start="01:22:32.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like we're talking now 30 plus years ago,""" start="01:22:35.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the idea like, and I recognized it from""" start="01:22:38.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Stallman's initial manifestos on the topic,""" start="01:22:42.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? He was clearly in this for the long""" start="01:22:45.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""haul. Like I am building the library of""" start="01:22:47.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Alexandria here and like linking the work""" start="01:22:50.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that we're trying to do to community that I""" start="01:22:52.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""don't know how you could touch my heart you""" start="01:22:54.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""know more surely because that's that's""" start="01:22:57.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""exactly what we want to do not necessarily""" start="01:22:59.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""any given talk or comment but the idea that""" start="01:23:03.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we have to get together and share our ideas""" start="01:23:07.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and the place that we do that has to be just""" start="01:23:10.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""has to be a buffet and not a crucible.""" start="01:23:14.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: And look, we're standing on the shoulders of""" start="01:23:17.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""giants, really, when we're looking at Emacs""" start="01:23:19.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and sort of what we have achieved.""" start="01:23:21.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And the galaxy of talent that exists in the""" start="01:23:24.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs community is also like truly""" start="01:23:27.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""impressive, I think. So There's a lot of work""" start="01:23:30.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to be done, but we've also achieved some""" start="01:23:34.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""pretty impressive things so far.""" start="01:23:37.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So let's just keep at it.""" start="01:23:38.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm sure we'll have a fantastic future for""" start="01:23:43.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs.""" start="01:23:44.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: You know, I'm kind of interested in what""" start="01:23:52.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Stefan's here. You know,""" start="01:23:56.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just the common tropes that go around.""" start="01:24:00.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I just hear it so much on the net,""" start="01:24:05.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, is Emacs still alive?""" start="01:24:07.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Do people still use it?""" start="01:24:09.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You know, and of course,""" start="01:24:11.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's like you have an older piece of software""" start="01:24:13.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that started so long ago,""" start="01:24:15.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people don't realize that it's still up,""" start="01:24:17.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but it's also because of the trends,""" start="01:24:20.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? You know, we've got the electron-based""" start="01:24:22.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""development and Visual Studio is slick out of""" start="01:24:28.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the box. So what's in the core Emacs""" start="01:24:32.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""developers realm, obviously you guys are""" start="01:24:36.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""taking this longer term perspective,""" start="01:24:38.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which makes sense, but what do you think""" start="01:24:44.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about this issue, the shorter term and how to""" start="01:24:48.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""alleviate those concerns that some people""" start="01:24:52.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""represent?""" start="01:24:52.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: Of course, yes. I mean,""" start="01:24:54.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this is something that,""" start="01:24:55.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I mean, clearly people are discussing and as""" start="01:24:59.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you say, It's almost like a trope at this""" start="01:25:01.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""point. And it's been discussed on EmacsDevil,""" start="01:25:04.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""what can we do to promote Emacs more and to""" start="01:25:07.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""what extent should we care about that?""" start="01:25:10.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I mean, my reply to that is usually just,""" start="01:25:15.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the rumors of my death are very accurate.""" start="01:25:19.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I think this is true also for Emacs.""" start="01:25:24.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So we are very much here.""" start="01:25:29.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think what has happened also is reflective""" start="01:25:31.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of basically that there are just more""" start="01:25:34.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""programmers on the planet,""" start="01:25:36.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: And we""" start="01:25:38.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: right? haven't been able to sort of catch""" start="01:25:39.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that segment as it's been growing,""" start="01:25:41.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but also we have more Emacs users I think""" start="01:25:44.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""today than probably ever before.""" start="01:25:47.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We have more packages,""" start="01:25:48.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we have more stuff going on.""" start="01:25:50.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I think it's a challenge as well,""" start="01:25:55.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like to what extent do we wanna be like a""" start="01:25:58.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""niche and to what extent do we wanna be the""" start="01:26:00.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""text editor for programmers.""" start="01:26:03.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I think there's a tension there because""" start="01:26:06.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we want to stay true to what Emacs is and to""" start="01:26:09.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""its sort of core values of what makes Emacs""" start="01:26:12.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""great, but can we still make some changes to""" start="01:26:16.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sort of stay relevant.""" start="01:26:18.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I think that's a huge win.""" start="01:26:21.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And clearly these discussions are going on on""" start="01:26:24.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the Emacs level and in the minds of core""" start="01:26:26.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""developers, I think, every day.""" start="01:26:29.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Even though, I mean, most of our work is just""" start="01:26:32.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""trying to keep adding new features,""" start="01:26:35.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""make sure that we have that sort of core""" start="01:26:38.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""infrastructure in place,""" start="01:26:40.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which is part of the reason why I gave the""" start="01:26:42.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talk I did yesterday, to invite more people""" start="01:26:44.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to come on board. Because I see a lot of""" start="01:26:46.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people have opinions about Emacs,""" start="01:26:48.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which is amazing, and we need more of that.""" start="01:26:50.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But I think, let's say,""" start="01:26:54.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""patches speak louder than words.""" start="01:26:56.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Software. And it's definitely true in Emacs""" start="01:27:01.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""development.""" start="01:27:01.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I want to just piggyback on,""" start="01:27:04.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like attack the premise of the question a""" start="01:27:06.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""little bit, right? Remember that we are sort""" start="01:27:09.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of in a trench warfare with commercial""" start="01:27:11.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interests that are dependent on dominating""" start="01:27:15.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""software ecosystems in order to exploit users""" start="01:27:20.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for money. Like that is a necessary thing to""" start="01:27:24.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a lot of people's business model.""" start="01:27:26.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And so we live in a world where software is""" start="01:27:30.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""more than tools. It is clothing.""" start="01:27:32.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And so when I put on my Mac and I put on my""" start="01:27:38.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""UI skin, I'm not just choosing whether I like""" start="01:27:42.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sliders or radio buttons or check boxes or""" start="01:27:46.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the other UI mechanics that give that""" start="01:27:49.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""heuristic and make it make me think it's easy""" start="01:27:53.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to use, easy to learn to use,""" start="01:27:55.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? I'm also choosing a whole line of""" start="01:27:59.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""implementation detail that I'm being actively""" start="01:28:02.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""trained not to try to understand by,""" start="01:28:06.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, kind of the dark side of the force""" start="01:28:08.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""over here. So when I think about,""" start="01:28:11.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, make Emacs more like Toaster,""" start="01:28:14.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: you know,""" start="01:28:18.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I, 1 of my responses is every time that""" start="01:28:21.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""question asks, you know,""" start="01:28:22.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""an angel grows, gets asked,""" start="01:28:24.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""an angel grows its wings.""" start="01:28:25.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""A developer submits a patch,""" start="01:28:27.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a bug gets opened that we can,""" start="01:28:30.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, with enough information to actually""" start="01:28:31.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""do something about it,""" start="01:28:33.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the ecosystem gets better,""" start="01:28:34.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? Whether a new user comes or not,""" start="01:28:38.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like somebody's actually asking a question""" start="01:28:40.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that's going to lead them someday to pick a""" start="01:28:42.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""better tool.""" start="01:28:43.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: Yeah, it's true. I mean,""" start="01:28:47.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we have powerful enemies and they are not""" start="01:28:50.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""working for us. And when they are working on""" start="01:28:52.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""improving VS code, you can't be under any""" start="01:28:54.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""illusion that they are doing that in the""" start="01:28:56.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interest of the users.""" start="01:28:57.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""They're doing that in their interest of the""" start="01:28:59.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""corporate owners. So this is the reality that""" start="01:29:02.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we have to face and Emacs is just not like""" start="01:29:04.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that. And this is of course part of the""" start="01:29:07.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""reason why it's so important that we continue""" start="01:29:09.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this work for the future of being able to do""" start="01:29:14.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""computing in a free way and in a way that is""" start="01:29:17.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""actually, you know, supports the types of""" start="01:29:20.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""workflows that we know and love.""" start="01:29:21.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Something that I'd like to add to this is""" start="01:29:26.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that, you know, you've mentioned we need more""" start="01:29:29.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""programmers in the world.""" start="01:29:30.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And in light of what we're doing with""" start="01:29:33.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""EmacsConf, perhaps we need more people to be""" start="01:29:35.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""at EmacsConf talking, not necessarily""" start="01:29:36.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""programmers, but just people apprehending""" start="01:29:38.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs and talking about it.""" start="01:29:40.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It feels like we've got different missions""" start="01:29:42.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that we're trying to accomplish with this.""" start="01:29:44.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We are... Okay, you...""" start="01:29:45.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Go ahead, Colin.""" start="01:29:47.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I can't leave that alone.""" start="01:29:49.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I almost came in there on the previous point.""" start="01:29:52.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yeah, I actually Completely agree with that""" start="01:29:55.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Leo. That's something that and I mean to be""" start="01:29:58.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""fair. I owe a good I owe dev al a good email""" start="01:30:02.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""on this topic, but we desperately need more""" start="01:30:05.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""project managers, more solutions architect,""" start="01:30:07.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""more business process analysts,""" start="01:30:10.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""more systems analysts,""" start="01:30:12.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""more, you know, and the best tech,""" start="01:30:15.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, some of the best threads start with""" start="01:30:17.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""quite a bit of an analytical work done on the""" start="01:30:23.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""part of an engineer who's come along.""" start="01:30:24.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But actually, Larry Wall has this quote,""" start="01:30:29.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? Where he says, consider 3 solutions""" start="01:30:31.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and build 1. And I think we struggle with""" start="01:30:34.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that as a community because getting a patch""" start="01:30:36.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is a lot of work and a lot to ask for""" start="01:30:39.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""somebody. So asking 3 people to submit a""" start="01:30:42.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""patch means you're saying no to a lot of""" start="01:30:45.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""blood, sweat and tears on the part of like 2""" start="01:30:47.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people, maybe 2 teams of people.""" start="01:30:48.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: And 1 thing I think is a big expansion is""" start="01:30:55.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""usability and user experience design.""" start="01:31:02.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think, and not in the sense like,""" start="01:31:05.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, CUA mode or,""" start="01:31:08.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, people don't realize that Emacs key""" start="01:31:12.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""bindings are actually ergonomic,""" start="01:31:13.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but more, you know, like for myself,""" start="01:31:16.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I did a lot of work in sort of bringing out""" start="01:31:20.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs features and did a lot of things""" start="01:31:24.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""creating this info doc,""" start="01:31:26.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, which is sort of like Space Max or""" start="01:31:28.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""something in the old days.""" start="01:31:30.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But the process, yeah,""" start="01:31:33.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""kept a lot of that from ever making it into""" start="01:31:38.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""CoreDMX and, you know,""" start="01:31:40.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just a lack of time on my part to follow up.""" start="01:31:44.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But if you had somebody,""" start="01:31:46.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, who sort of coalesced all the""" start="01:31:51.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""technical work on like,""" start="01:31:52.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""here's how we can put it together and make it""" start="01:31:56.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""more accessible, I've seen that go a long way""" start="01:32:01.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in certain environments.""" start="01:32:02.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I imagine, you know,""" start="01:32:06.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's just not the experience of,""" start="01:32:08.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, most people on the core team.""" start="01:32:11.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: Yeah, for sure. I mean,""" start="01:32:14.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We don't have, I mean,""" start="01:32:16.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we're mostly a bunch, we're a bunch of""" start="01:32:18.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""programmers. That's what we are,""" start="01:32:20.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? We don't have graphical signers or any""" start="01:32:22.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of the stuff that you're talking about.""" start="01:32:24.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So we don't have really any UX experts on""" start="01:32:28.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""board. So perhaps that would be welcome.""" start="01:32:30.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But then again, how do you even fit the EMAX""" start="01:32:35.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""paradigm into what is typically taught and""" start="01:32:38.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""discussed in UX? I mean,""" start="01:32:40.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""maybe there is a way. I'm sure there are""" start="01:32:43.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""general principles and a lot that we could""" start="01:32:45.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""learn, But then there is also like this,""" start="01:32:47.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we have to stay true to what Emacs is to some""" start="01:32:52.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""extent and what does that look like""" start="01:32:53.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""concretely. There are discussions to be had""" start="01:32:56.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for sure, but we would definitely benefit""" start="01:32:58.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""from that type of specific input.""" start="01:33:02.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Well, I""" start="01:33:04.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: mean, like a simple example today is I looked""" start="01:33:06.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""at the conference guidelines I always stay in""" start="01:33:09.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""dark mode and it said well use light mode for""" start="01:33:13.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""your presentation so okay I'll switch to""" start="01:33:16.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""light mode let me load a theme so I go into""" start="01:33:19.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""all the default themes and,""" start="01:33:21.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, start going through the light ones""" start="01:33:23.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then I check all the faces and,""" start="01:33:28.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, there are at least 3 to 5 faces""" start="01:33:31.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that have nearly invisible text as a result""" start="01:33:35.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of the background highlighting on them.""" start="01:33:38.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I'm like, you know,""" start="01:33:40.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so there's low hanging fruit like that where""" start="01:33:43.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people would deal with the structure of the""" start="01:33:46.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""menus, the actual faces,""" start="01:33:49.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the themes, that don't have to do anything""" start="01:33:53.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""affecting core Emacs except make the""" start="01:33:57.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""presentation much better.""" start="01:33:59.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: Yeah, definitely. If people want to send such""" start="01:34:03.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""polishing patches for various aspects,""" start="01:34:06.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I spent some time making a new help screen.""" start="01:34:09.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know if you noticed,""" start="01:34:10.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know how many people press Control H,""" start="01:34:12.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Control H on their keyboards,""" start="01:34:14.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But it's like with new sections and it's""" start="01:34:17.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sorted a little bit better.""" start="01:34:18.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It didn't take much. I mean,""" start="01:34:20.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it took a time obviously,""" start="01:34:21.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but it's not like it required some fantastic""" start="01:34:23.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""technical knowledge or deep expertise in""" start="01:34:28.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs Lisp to do that.""" start="01:34:29.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's Basically anyone can do stuff like that.""" start="01:34:31.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So definitely if you're interested in doing""" start="01:34:34.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that type of work, start discussing with us.""" start="01:34:37.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Let's talk about what we can do and get doing""" start="01:34:41.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it, really.""" start="01:34:41.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah, this is exactly in line with your""" start="01:34:44.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""presentation from yesterday,""" start="01:34:45.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Stefan, as well, because you were just""" start="01:34:47.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""inviting people who are not contributing to""" start="01:34:50.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the core of Emacs to do so.""" start="01:34:51.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You were talking to package developer on""" start="01:34:53.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""MailPub, but you were also talking just about""" start="01:34:55.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the average Joe or Jane just doing their own""" start="01:34:58.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things or encountering a problem.""" start="01:34:59.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Now, yes, we talked about,""" start="01:35:01.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""oh, you need to build master and all this,""" start="01:35:02.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but at the end of the day,""" start="01:35:03.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""low-hanging fruits like the ones Bob just""" start="01:35:06.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""described. If everyone does this at the end,""" start="01:35:09.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you end up with something that is extremely""" start="01:35:11.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""polished. Perhaps you do not need to have a""" start="01:35:13.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""UX specialist to tell you that,""" start="01:35:14.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""oh, those 2 colors are actually very close to""" start="01:35:18.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""1 another. I think it's kind of a discussion""" start="01:35:21.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about same defaults as well that you had""" start="01:35:23.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yesterday. Ultimately,""" start="01:35:25.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we do not need... Yes,""" start="01:35:27.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we need more programmers in the world.""" start="01:35:28.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We want more people to use Emacs.""" start="01:35:30.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But you don't know. Like,""" start="01:35:33.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is it going to be someone in computer science""" start="01:35:36.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that's going to be the next giant on whose""" start="01:35:38.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""shoulders we're going to stand?""" start="01:35:39.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: computer science? Is it going to be someone""" start="01:35:41.003" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in computer science that's going to be the""" start="01:35:41.066" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""next giant""" start="01:35:41.082" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: on whose shoulders we're going to stand?""" start="01:35:41.137" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Is it someone who did not""" start="01:35:41.184" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Is it someone who did not study study""" start="01:35:41.192" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""computer science? Is it going to be someone""" start="01:35:42.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""who did something completely different?""" start="01:35:44.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We do not know the prototypical user of""" start="01:35:46.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs. We have some idea about the fact that""" start="01:35:49.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""they might be using you know,""" start="01:35:51.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs for their programming,""" start="01:35:52.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but more and more, and as is evidenced by the""" start="01:35:55.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""talks we received with EmacsConf,""" start="01:35:56.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's just people doing writing or taking""" start="01:36:01.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""notes for their classes.""" start="01:36:01.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So it's really interesting to see how and to""" start="01:36:06.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""explore for us how we can give back to the""" start="01:36:09.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""core of Emacs in a way that is mutually""" start="01:36:11.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""constructive because again,""" start="01:36:12.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to go back to the philosophy or the political""" start="01:36:14.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""agenda that we have is for more people to use""" start="01:36:17.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""software that is not the liberties.""" start="01:36:19.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Exactly.""" start="01:36:20.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: So right. Yeah. I mean,""" start="01:36:24.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that's a good spot for me to come right back""" start="01:36:25.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in. And that's exactly where I do.""" start="01:36:27.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Right. Because that's that's what it's all""" start="01:36:30.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about. In the In terms of a tool user,""" start="01:36:33.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, the evolution of using tools as,""" start="01:36:36.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, these creatures have fought,""" start="01:36:38.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs is fire. Emacs is the ability to learn""" start="01:36:42.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""languages, the ability to manipulate other""" start="01:36:45.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""tools. I mean, it's almost like,""" start="01:36:48.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, God Emperor of Dune level,""" start="01:36:50.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, some Frank Herbert type of powers""" start="01:36:53.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that you have over your computer and you are""" start="01:36:56.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""not required to understand how all those""" start="01:36:58.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things work. So from a support standpoint""" start="01:37:02.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that puts us in a challenging position,""" start="01:37:04.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? I spend a lot of time on Pound Emacs""" start="01:37:06.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and the questions that go by there,""" start="01:37:07.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I feel bad for people that feel like they""" start="01:37:09.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""have to answer every question that goes by in""" start="01:37:12.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the channel because no 1 could.""" start="01:37:14.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""No 1 can give an intelligent answer to the,""" start="01:37:16.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, everything from,""" start="01:37:18.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Hey, how do I change my default font on this""" start="01:37:21.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""operating system? You've never heard of to,""" start="01:37:23.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, how do you know this list code?""" start="01:37:26.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That's 40 lines long doesn't work.""" start="01:37:28.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I think it was a recent change that was""" start="01:37:30.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""made to the P case macro.""" start="01:37:31.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Do you agree? Right? And as deep as that,""" start="01:37:39.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""well is, if you turn it 90 degrees,""" start="01:37:42.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the Emacs is that kind of tool to the""" start="01:37:45.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""operating system level.""" start="01:37:46.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's letting me walk across to other systems,""" start="01:37:48.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""multi-hop, become the super user,""" start="01:37:51.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? And, you know, the just the power,""" start="01:37:55.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the amplification of power there,""" start="01:37:57.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's like the lever combined with the magnet,""" start="01:38:02.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""etc, etc. I mean, just,""" start="01:38:08.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yeah, I don't know. So I guess where we kind""" start="01:38:14.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of jump off, where that gets stuck,""" start="01:38:16.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right, is trying to change something like the""" start="01:38:18.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""defaults in the user experience.""" start="01:38:19.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I imagine, you know,""" start="01:38:22.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we don't get 1 great idea about user""" start="01:38:26.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""experience, we'll get 3,""" start="01:38:28.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? And then Once again,""" start="01:38:30.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we have to send our brave developers off to""" start="01:38:32.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""build 1 to 3 patches, some of which won't see""" start="01:38:36.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the light of day. I think that's where the""" start="01:38:41.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""breakthrough is needed.""" start="01:38:41.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Another evolution in the packaging thought,""" start="01:38:46.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or maybe it's not packaging.""" start="01:38:48.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Maybe it's the compilation step.""" start="01:38:50.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Maybe it's the distribution step.""" start="01:38:52.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Maybe we want the Debians of the world to""" start="01:38:56.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""deliver Emacs as 2 different pieces now.""" start="01:38:59.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And there's a UX piece that we want you to""" start="01:39:03.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""package each 1 that you package,""" start="01:39:05.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""each 1 per window manager that you support or""" start="01:39:09.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""at the intersection of each window manager""" start="01:39:11.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and display manager you port.""" start="01:39:12.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And the other one's just the server and you""" start="01:39:15.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""don't even have to package that if I'm only""" start="01:39:17.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""offering the CLI or there's a you know like""" start="01:39:19.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm making all this up and I can't code a""" start="01:39:21.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""single thing like what I just said,""" start="01:39:23.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but I think that there's a technical""" start="01:39:26.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""opportunity. Pretty high level for technical""" start="01:39:31.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there of just thinking about a way to accept""" start="01:39:35.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""contributions of experience with maybe a""" start="01:39:40.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""little less rigor and a little less ground""" start="01:39:43.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""into the marble.""" start="01:39:44.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: Yeah it makes me think of somebody at work""" start="01:39:50.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just brought up pair programming and he's in""" start="01:39:54.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""love with it. He wants to pair up and do it,""" start="01:39:58.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which is not true of all programmers.""" start="01:40:01.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But I said, okay, so you spearhead that.""" start="01:40:05.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""If we, I think it is a very high barrier to""" start="01:40:10.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""get your patches in because of course they""" start="01:40:13.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""need to meet the quality standard of Emacs.""" start="01:40:15.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So if people who are doing day-to-day""" start="01:40:20.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""understand that process and can do it well,""" start="01:40:24.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""could work with some of the people who can't""" start="01:40:28.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""quite contribute at that level,""" start="01:40:30.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but have ideas that are on the level that""" start="01:40:35.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""should go in, pairing them up could really""" start="01:40:39.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""move a lot of that forward.""" start="01:40:41.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Like Lars, I don't know what his,""" start="01:40:46.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I get the feeling maybe he's retired.""" start="01:40:50.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So, you know, maybe he has some time,""" start="01:40:54.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, and he's really good at going back""" start="01:40:58.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in and saying, you know,""" start="01:41:00.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""these areas haven't gotten attention in a""" start="01:41:02.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""while, so I'm going to go kill some bugs and""" start="01:41:05.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""look at them and fix them up.""" start="01:41:08.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I would think he would be good to do that""" start="01:41:13.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""with someone. But you know,""" start="01:41:15.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Again, I've got years of code that would just""" start="01:41:22.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""require somebody to work through it to update""" start="01:41:25.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to the latest code base and diff against it.""" start="01:41:28.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But it does things like,""" start="01:41:30.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I mean, like if anybody used RMAIL anymore,""" start="01:41:32.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I made the summary mode of RMAIL exactly""" start="01:41:36.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""compatible key-wise with the main buffer,""" start="01:41:40.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""which it never was, and fixed a number of""" start="01:41:43.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other features. Dured made operations""" start="01:41:46.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""reversible, where you mark something and you""" start="01:41:49.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""unmark it, and you can go up and down.""" start="01:41:51.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And there are all these little""" start="01:41:53.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""incompatibilities that kind of add up across""" start="01:41:56.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""time, and they never seem to get addressed.""" start="01:42:00.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We could just fix them and people would start""" start="01:42:06.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to say, oh, this is smoother and they are""" start="01:42:09.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""getting more of that experience because it""" start="01:42:12.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""feels like the systems maybe 80,""" start="01:42:15.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""85% of the way there in a lot of thoughtful""" start="01:42:20.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""design. But that last 15% could be the""" start="01:42:26.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""difference between an iPhone and an Android""" start="01:42:29.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""phone of usability-wise.""" start="01:42:32.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So that's a thought. That's a""" start="01:42:38.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: brilliant idea, and it probably can be""" start="01:42:41.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""applied far wider than emacs.""" start="01:42:42.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That's something that that FSF should""" start="01:42:46.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""consider suggesting across,""" start="01:42:48.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, GNU packages,""" start="01:42:49.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for example, like a matchmaking project seems""" start="01:42:54.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like something that FSF community teams""" start="01:42:56.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""should think about. Yeah,""" start="01:43:04.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I was going""" start="01:43:04.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: That's so... to say also,""" start="01:43:04.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I noticed that the name Debian came up a""" start="01:43:08.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""while ago and now we were talking about""" start="01:43:09.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""programming and such and Mentoring maybe and""" start="01:43:14.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Debian has this service or part of their site""" start="01:43:17.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or community called Mentors.""" start="01:43:19.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""They have a website, mentors.debian.net,""" start="01:43:22.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""where the idea is that people who want to get""" start="01:43:26.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""into contributing to Debian,""" start="01:43:28.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for example, to package things,""" start="01:43:29.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but obviously don't have upload rights right""" start="01:43:33.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""away. This is where they can go to,""" start="01:43:35.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and this is separate from their mailing list""" start="01:43:38.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or bug trackers. They can basically build""" start="01:43:42.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""their changed packages and upload them here,""" start="01:43:44.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and then Debian developers who have commit or""" start="01:43:48.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""upload rights to the Debian archive can go""" start="01:43:51.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and review and give them feedback or ask them""" start="01:43:55.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to change something or if it's good,""" start="01:43:57.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""then just easily upload the package right""" start="01:44:01.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""from there. And I wonder if it might make""" start="01:44:04.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sense to have something kind of like that in""" start="01:44:07.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like the context of Emacs or the GNU project""" start="01:44:10.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""as a whole, where we have like some kind of""" start="01:44:13.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""a, like loosely defined mentoring thing,""" start="01:44:15.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""where we could pair up people who are more""" start="01:44:18.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""experienced, who, for example,""" start="01:44:20.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""have commit rights in the Emacs core""" start="01:44:22.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""repository to match them up with someone who""" start="01:44:27.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is just making your very first patches or""" start="01:44:29.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""contributions to Emacs or whatever other GNU""" start="01:44:31.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""package. Just some food for thought,""" start="01:44:34.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: Yeah, sounds good.""" start="01:44:38.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: I guess. Yeah, and then I guess 1 feature of""" start="01:44:44.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""such a system which would be nice is that it,""" start="01:44:47.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""at least in terms of, you know,""" start="01:44:49.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the mentors that Debbie and that,""" start="01:44:50.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that it has a web UI, which,""" start="01:44:52.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""is nice because mailing lists might be""" start="01:44:56.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""intimidating for someone who is just getting""" start="01:44:58.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""started, like in these communities.""" start="01:44:59.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Or, you know, just making patches like that,""" start="01:45:03.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or just have a series of concrete""" start="01:45:05.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""instructions. Like with mentors at""" start="01:45:08.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Devian.net, I feel like you can't go wrong in""" start="01:45:11.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""terms of finding the steps of figuring out""" start="01:45:13.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""what you need to do to put together some""" start="01:45:16.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""change. Which I think the same idea could""" start="01:45:19.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""apply to Emacs, for example,""" start="01:45:20.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""as well.""" start="01:45:20.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: I think this is a good point about lowering""" start="01:45:24.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""barriers, and how email is a barrier to""" start="01:45:27.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people. I mean, so on the 1 hand,""" start="01:45:28.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you have us guys on Emacs level,""" start="01:45:31.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we're very used to the email workflow.""" start="01:45:32.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Like we're not just using it for fun.""" start="01:45:35.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You know what I mean? Like this is a""" start="01:45:37.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""workhorse. It really is.""" start="01:45:38.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And it's tried, it's battled,""" start="01:45:41.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""tested. It has some quirks,""" start="01:45:42.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but we know them extremely well on the other""" start="01:45:45.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hand. So, but still we want more people""" start="01:45:48.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""involved, right? And we realized that,""" start="01:45:50.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, times are changing as well.""" start="01:45:52.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And people are more used to doing stuff from""" start="01:45:54.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the web browser, perhaps.""" start="01:45:55.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So we do want to move to a forge,""" start="01:46:00.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""or at least start looking into that.""" start="01:46:01.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But there are some obstacles.""" start="01:46:03.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So we are looking for volunteers to do that""" start="01:46:06.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""work. I'm not just saying it,""" start="01:46:07.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like we are very serious.""" start="01:46:08.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm very seriously asking people in the""" start="01:46:11.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""community to consider,""" start="01:46:12.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hey, could you dedicate some time?""" start="01:46:14.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I mean, it will take some dedication for sure""" start="01:46:18.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it will take some time and it will take some""" start="01:46:20.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""describe probably even you know Be prepared""" start="01:46:23.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to be frustrated at times right,""" start="01:46:24.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but if you're serious about doing that type""" start="01:46:26.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of work, okay now""" start="01:46:28.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I believe you Well, I'm just I'm just teasing""" start="01:46:32.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but but but yes exactly any I mean it's it's""" start="01:46:35.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""not even a joke right Any serious undertaking""" start="01:46:38.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""having to do with any free software project,""" start="01:46:41.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just because we are open to the entire world""" start="01:46:45.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and we pride ourselves on trying to take""" start="01:46:47.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""seriously all input. And if it's a logical""" start="01:46:50.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""argument, then we'll go ahead and take the""" start="01:46:51.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""time to combat with you,""" start="01:46:53.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""even though the maintainer has 300 other""" start="01:46:54.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things to do. Like, man,""" start="01:46:57.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this""" start="01:46:58.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: is just the way it is,""" start="01:47:00.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right? It just, It's not like Emacs is way""" start="01:47:02.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""harder to change than any other project of""" start="01:47:06.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""its longevity and size.""" start="01:47:08.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's just these things take time.""" start="01:47:10.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Try getting a change into Debian.""" start="01:47:13.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That's an uphill battle.""" start="01:47:15.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't even know where to start with that.""" start="01:47:16.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""That's huge, right? And I have tremendous""" start="01:47:19.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""respect for the people doing that type of""" start="01:47:21.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""work because it takes dedication,""" start="01:47:22.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it takes effort. So we really need someone to""" start="01:47:26.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""step up from the community,""" start="01:47:27.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I think, to be a champion for something like""" start="01:47:29.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this and work together with us on Emacs Devil""" start="01:47:33.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and off Emacs Devil, probably with me and Eli""" start="01:47:37.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and perhaps some other people that could be""" start="01:47:40.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in the mail thread, and we could coordinate""" start="01:47:41.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this type of work. I would be super excited""" start="01:47:44.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""if someone wanted to get the ball rolling.""" start="01:47:46.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can't do everything.""" start="01:47:48.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I wish I could. Like, I thought about it.""" start="01:47:51.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Should I just put everything to the side and""" start="01:47:52.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""do this? But then, I mean,""" start="01:47:53.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there are some, there are other""" start="01:47:54.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""responsibilities as well.""" start="01:47:56.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So we need someone to step up.""" start="01:47:57.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We need help here.""" start="01:47:58.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: you're gonna speak. I was totally gonna pick""" start="01:48:03.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""on you. Go ahead.""" start="01:48:04.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, so. Oh, good, Thanks,""" start="01:48:05.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yeah, I was just gonna say,""" start="01:48:06.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yeah, I echo Stefan's sentiments.""" start="01:48:08.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And that, yeah, in terms of like maybe""" start="01:48:11.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""experimenting with a different Forge or a""" start="01:48:14.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""better Forge and like,""" start="01:48:15.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, supplementing Savannah.""" start="01:48:16.124" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And supplementing Savannah.""" start="01:48:16.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I actually did some initial work a couple of""" start="01:48:20.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""months ago to get a SourceFed instance""" start="01:48:23.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""installed for the new project.""" start="01:48:24.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I've done some work on and off,""" start="01:48:28.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but then life happens,""" start="01:48:29.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""especially from September onwards.""" start="01:48:32.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But even from earlier in the year,""" start="01:48:35.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the project has been semi-dormant,""" start="01:48:36.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but I have been meaning to get to that.""" start="01:48:38.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I'm like 1 such person who's interested in""" start="01:48:42.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that type of work and driving it forward and""" start="01:48:44.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I would love you know if anyone's and anyone""" start="01:48:47.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""else has the kind of time and energy and the""" start="01:48:50.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interest to help with something like that.""" start="01:48:52.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Yes, please reach out to all of us,""" start="01:48:55.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""to Emacs core developers,""" start="01:48:56.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of course, and to myself.""" start="01:48:58.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""This is something that could be very useful,""" start="01:49:01.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""not just for GNU Emacs and Emacs developers,""" start="01:49:04.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but also for any other GNU package as well.""" start="01:49:09.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So yeah, that's 1 area of potential""" start="01:49:13.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""contribution and 1 thing that we sort of,""" start="01:49:15.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I guess, regularly meet with the FSF""" start="01:49:17.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""sysadmins to discuss these kinds of projects""" start="01:49:20.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and things as Corwin would know.""" start="01:49:22.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah, that's kind of, I mean,""" start="01:49:24.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you knew exactly where I was going to,""" start="01:49:26.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and I'm glad that you volunteered yourself""" start="01:49:27.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""personally because that's the best choice.""" start="01:49:30.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""If you're hearing this and you're thinking,""" start="01:49:32.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, maybe I should do some sysop stuff,""" start="01:49:35.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""literally reach out to Amin.""" start="01:49:38.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And because it's complicated,""" start="01:49:41.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there are a lot of projects to volunteer for.""" start="01:49:43.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""They're all very worthy.""" start="01:49:44.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And it's sort of political to figure out what""" start="01:49:48.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we're gonna try to change for whom first to""" start="01:49:52.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""demonstrate we can do all the things we wanna""" start="01:49:55.940" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""do to make it better without losing all the""" start="01:49:58.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things that are important about how it is""" start="01:50:00.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""today. And we'll do it in a measured way like""" start="01:50:04.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everybody's just like room full of rocking""" start="01:50:06.500" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""chairs everybody's got a long tail it's a""" start="01:50:09.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hard project but you will do something that""" start="01:50:12.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just a lot like as a Savannah hacker which I""" start="01:50:15.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""am with Amin So that's how I know about his""" start="01:50:17.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""work on that project. We worked together on""" start="01:50:20.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the Savannah Forge. I'm aware of his work""" start="01:50:22.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""piloting SourceHut recently and just with a""" start="01:50:26.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""working group there to look at the next""" start="01:50:29.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""generation of forges for GNU.""" start="01:50:30.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs of course as a GNU package could go do""" start="01:50:34.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""its own thing. FFS would most likely give""" start="01:50:36.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""cash to go do its own thing,""" start="01:50:38.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""even if it didn't like it.""" start="01:50:39.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We know, you know, as a,""" start="01:50:41.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like if I put on, I'm not FSF,""" start="01:50:42.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but if I put on that hat,""" start="01:50:44.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I imagine that we must know.""" start="01:50:45.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs is a flagship thing that people in the""" start="01:50:50.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""real world depend on. If I get this ancient""" start="01:50:52.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""computer, I get a working Linux distribution""" start="01:50:55.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and Emacs. Maybe it's not Microsoft Word as a""" start="01:50:59.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""word processor, but you guys,""" start="01:51:00.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you can learn a language on it for sure,""" start="01:51:03.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know And you can do your homework on it""" start="01:51:05.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and you know It's it makes your you can edit""" start="01:51:08.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""things and then you can edit your system""" start="01:51:10.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""files and teach yourself how to manage a GNU""" start="01:51:13.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""system and you can You know so Emacs is""" start="01:51:17.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""really powerful as a practical tool.""" start="01:51:19.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Like I keep coming back to that point when I""" start="01:51:21.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""think about Emacs, like I really put it as""" start="01:51:25.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like, it's an important tool on the like""" start="01:51:27.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""humans inventing tools level just because it""" start="01:51:31.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""lets me make this editor into whatever I need""" start="01:51:35.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it to be to get my actual work done.""" start="01:51:37.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Whether that's getting the length,""" start="01:51:39.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""maybe that's making the font big enough that""" start="01:51:41.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can see it, or making it easy enough to""" start="01:51:43.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""change from this font to that font,""" start="01:51:44.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""changing the background colors,""" start="01:51:45.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like your basic vision,""" start="01:51:47.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""accessibility issues, right?""" start="01:51:49.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""All, you know, solved,""" start="01:51:52.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can bake that customization in and I can""" start="01:51:55.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""pretty much depend on,""" start="01:51:56.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""no matter what we change in Emacs,""" start="01:51:57.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm gonna accept the new version,""" start="01:51:59.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""it's gonna be on the next computer I get,""" start="01:52:01.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm going to install the package and my""" start="01:52:03.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""configuration that sets all that up will be""" start="01:52:05.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""there for me. Right? It's like back to""" start="01:52:10.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Stefan's point, what, 6 and a half hours ago,""" start="01:52:13.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I mean, you know, 20 minutes ago about""" start="01:52:16.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""just... Oh gosh, I lost it.""" start="01:52:23.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Boy, I really thought I had handed that""" start="01:52:27.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""neatly back to you.""" start="01:52:29.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: No problem, Yeah, I think we're in general in""" start="01:52:36.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""agreement.""" start="01:52:36.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: If we are now in the realm of Concord,""" start="01:52:41.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""of harmony, and the realm of midnight in""" start="01:52:44.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Europe, Should we bring this discussion to a""" start="01:52:47.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""close or we could go all night,""" start="01:52:49.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""but I'll need to explain to my employer why""" start="01:52:51.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""my eyes are barely open tomorrow.""" start="01:52:52.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I think that's probably a good idea.""" start="01:52:56.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I see some folks starting to slowly sign off.""" start="01:52:59.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, also, you know, Leo,""" start="01:53:02.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you could leave and just miss out.""" start="01:53:04.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""What?""" start="01:53:05.460" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: Hey, Sasha, can I say something like what an""" start="01:53:13.620" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""amazing job with everything you're doing in""" start="01:53:15.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the community over the years?""" start="01:53:16.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm so impressed with Emacs News.""" start="01:53:18.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""What a great resource to stay up to date in""" start="01:53:22.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Emacs. Just really hats off to you for a""" start="01:53:24.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""whole lot.""" start="01:53:25.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Thank you""" start="01:53:26.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: very much. It actually turned out to be quite""" start="01:53:29.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""timely that John Wheatley had suggested it""" start="01:53:31.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""back when he was maintainer because when I""" start="01:53:35.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""had the kiddo, I suddenly had 0 time to""" start="01:53:36.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""actually write new things.""" start="01:53:38.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But reading things is fine.""" start="01:53:39.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I can just speed read all the Reddit things""" start="01:53:41.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and put the links together.""" start="01:53:43.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So I'm very glad that Emacs news is helpful.""" start="01:53:45.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: it really is, yeah.""" start="01:53:49.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: It is, So, okay, now let's try to go for our""" start="01:53:55.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""closing thoughts here while Leo's still here.""" start="01:54:00.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And then if we wanna keep rolling,""" start="01:54:01.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""even after Leo drops, we won't tell him,""" start="01:54:04.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we'll tell him we're stuck.""" start="01:54:06.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: I guess that was a beacon to me to perhaps go""" start="01:54:12.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""for the second close of the day I've already""" start="01:54:14.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""done it I can do it again But I will prove""" start="01:54:18.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Sasha wrong this time.""" start="01:54:19.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I will miss out if need be because really,""" start="01:54:21.020" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I have been very impressed with the sleep""" start="01:54:24.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""record that you had and I am very envious""" start="01:54:28.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""right now of your past ability to sleep more""" start="01:54:32.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""than 9 hours per night.""" start="01:54:33.160" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""And I wish I would be able to go back to""" start="01:54:35.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""this. But anyway, folks,""" start="01:54:37.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm going to drop out.""" start="01:54:38.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""People might hang out for a little while""" start="01:54:40.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""longer. Bear in mind that Sasha might get""" start="01:54:42.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""called at any point to go take care of Kido.""" start="01:54:44.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""So this might wrap up very fast afterwards.""" start="01:54:47.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""But at any rate, it was my pleasure to be the""" start="01:54:49.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""host today. Stefan, thank you for joining.""" start="01:54:51.420" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Bob, thank you for joining and interacting""" start="01:54:53.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""with us and making this a little more""" start="01:54:56.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""interactive and more plural than just the""" start="01:54:58.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""co-organizers. And on that note,""" start="01:55:01.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I will be leaving. So have a wonderful night,""" start="01:55:03.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everyone. And we'll see you next year for the""" start="01:55:05.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""next edition, potentially.""" start="01:55:06.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Thank you, Leo. You're my hero.""" start="01:55:09.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I take everything I said on mumble back.""" start="01:55:11.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""You're amazing.""" start="01:55:12.280" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: bye everyone.""" start="01:55:14.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right, Thank you all.""" start="01:55:16.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Take care. Bye. I will""" start="01:55:17.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 6]: also say bye bye. I also need to go to bed.""" start="01:55:20.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Thank you all for this cool conference and""" start="01:55:22.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hopefully we're here through the year and at""" start="01:55:24.920" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""least in 1 year.""" start="01:55:25.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: You've probably made the rest of the rest of""" start="01:55:30.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the victorious. You really stepped up.""" start="01:55:34.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: your contributions.""" start="01:55:38.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Thanks so much for Yeah,""" start="01:55:38.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: thanks so much for being a part of it,""" start="01:55:40.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""specifically you, Floey,""" start="01:55:41.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and just everyone. Thank you all.""" start="01:55:43.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 6]: Have a nice day or night and we'll hear each""" start="01:55:48.180" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""other. Bye!""" start="01:55:48.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 1]: See you. Okay, well,""" start="01:55:51.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Thanks, Zen. I'll go next.""" start="01:55:51.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm the next newest, I think.""" start="01:55:53.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Well, I want to say also,""" start="01:55:59.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you know, Bob and Stefan,""" start="01:56:01.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""thank you so much for jumping in and""" start="01:56:03.660" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""participating in the closing remarks.""" start="01:56:04.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I too think it's a lot of,""" start="01:56:06.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like, it's fun to just,""" start="01:56:08.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like, share the buzz after the convention.""" start="01:56:10.760" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We've got all these millions of ideas and""" start="01:56:13.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""then to have a group, a little group think""" start="01:56:16.120" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about what we're walking away from that with.""" start="01:56:18.960" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""What is the temperature of the fire in your""" start="01:56:22.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""belly? And it's just...""" start="01:56:24.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I mean, this is 1 of the highlights of my""" start="01:56:28.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""year in a way that it's just...""" start="01:56:30.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't think other people...""" start="01:56:31.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't think I dare explain it to other""" start="01:56:33.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""people. I think my wife understands and I""" start="01:56:35.880" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""will do. So thank you very much for this""" start="01:56:40.600" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference and the opportunity to participate""" start="01:56:42.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""in it. You know, just the conversation,""" start="01:56:45.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""how vibrant the chat is on IRC,""" start="01:56:48.540" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""how the variety of talks,""" start="01:56:52.080" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""some of the talks that look like television""" start="01:56:54.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""content to me and others that look a lot like""" start="01:56:59.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""my talk. And working through your slides and""" start="01:57:03.840" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""doing it live and you know I appreciate that""" start="01:57:06.100" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""we make a place for all those levels and and""" start="01:57:10.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""show people how to improve our craft as well.""" start="01:57:12.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm not actually dropping or going anywhere.""" start="01:57:26.140" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'll continue to talk about eMAX until I get""" start="01:57:29.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""the dinner time bell. I've probably got an""" start="01:57:30.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hour here. I'll tell you what will happen""" start="01:57:40.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""though is I'm guaranteed to light a""" start="01:57:42.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""cigarette. You can already see me kind of""" start="01:57:43.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""hovering about my room because I'm trying to""" start="01:57:45.860" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""avoid like smoking on camera.""" start="01:57:47.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know where that came from.""" start="01:57:49.300" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm giving it up in approximately 5 seconds.""" start="01:57:52.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: Yeah I'm gonna hop off.""" start="01:57:58.980" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It's possibly right here.""" start="01:58:00.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'll work tomorrow.""" start="01:58:02.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I took the next 2 days off.""" start="01:58:06.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I'm actually going camping,""" start="01:58:07.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Stefan. I know I've learned that this""" start="01:58:11.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""conference leaves me completely emotionally""" start="01:58:12.800" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""exhausted. I just like,""" start="01:58:16.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I don't know, I watch all,""" start="01:58:18.700" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I feel like I just connect with all the,""" start="01:58:20.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""like it's this time where I connect with all""" start="01:58:23.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""these people that spend as much time thinking""" start="01:58:25.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""about Emacs as I do.""" start="01:58:26.580" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: All right, so maybe we should wrap up before""" start="01:58:31.480" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you have like, you know,""" start="01:58:32.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that overflow error and just...""" start="01:58:35.380" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: In buster thrill, okay.""" start="01:58:38.000" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Thank you""" start="01:58:41.720" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 0]: so much, everyone. Let us actually wrap up""" start="01:58:45.200" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""then. Everyone can find the recordings if you""" start="01:58:47.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""want to keep the conversation going.""" start="01:58:48.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""There are meetups, there are people's blog""" start="01:58:51.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""posts and video channels and mailing lists""" start="01:58:54.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""and all those other things.""" start="01:58:55.320" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I often I list a lot of meetups in Emacs news""" start="01:58:58.820" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""so that's another great way to stay connected""" start="01:59:00.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""through the year and we hope to see everybody""" start="01:59:02.560" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""next year at EmacsConf 2024.""" start="01:59:04.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Thanks Sasha for the send off and goodbye to""" start="01:59:11.260" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""everyone. Oh Sasha I think you were muted but""" start="01:59:16.740" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""yes I was still there I assume that's what""" start="01:59:18.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""you just said. I lied.""" start="01:59:21.220" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I was staying around like Corwin was.""" start="01:59:23.680" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I just said goodbye, but then I wait in the""" start="01:59:25.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""bushes, waiting for the ambush.""" start="01:59:26.520" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: Well I'm personally surprised,""" start="01:59:29.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""speaking for myself. I wouldn't have guessed""" start="01:59:32.780" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""that would happen. All right,""" start="01:59:36.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: The perfect moment. well,""" start="01:59:36.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""I guess that's a wrap then.""" start="01:59:37.360" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Thank you, everyone, and see you next year.""" start="01:59:39.060" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: I thought we were clear like 10 minutes ago.""" start="01:59:43.440" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""Are we not? We are, right?""" start="01:59:45.340" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""We're definitely clear.""" start="01:59:47.400" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 5]: OK, I'm""" start="01:59:48.040" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 3]: hanging up now. Good night.""" start="01:59:49.240" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""It was wonderful to meet you.""" start="01:59:50.640" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 7]: Take care Corwin""" start="01:59:51.900" video="qanda-emacsconf" id="subtitle"]]
+[[!template text="""[Speaker 4]: Bye Stefan. Bye. Bye all""" start="01:59:56.520" video="qanda-emacsconf" id="subtitle"]]
+
+Questions or comments? Please e-mail [sacha@sachachua.com](mailto:sacha@sachachua.com?subject=Comment%20for%20EmacsConf%202023%20emacsconf%3A%20EmacsConf.org%3A%20How%20we%20use%20Org%20Mode%20and%20TRAMP%20to%20organize%20and%20run%20a%20multi-track%20conference)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/emacsconf-before.md b/2023/info/emacsconf-before.md
new file mode 100644
index 00000000..817bc045
--- /dev/null
+++ b/2023/info/emacsconf-before.md
@@ -0,0 +1,37 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 16-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="emacsconf-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emacsconf-mainVideo" data="""
+00:00.000 Intro
+00:16.580 Reasons
+01:09.400 Information
+02:09.160 Properties
+03:53.120 Timezones
+04:29.720 Scheduling
+05:41.780 Templates
+06:48.400 Wiki
+08:04.380 Etherpad
+08:28.200 E-mail
+09:05.920 BigBlueButton web conferences
+10:08.121 Shortcuts
+10:36.700 Logbook
+11:03.680 Captions
+12:13.220 Crontabs and playing the talks
+13:11.280 Transitions
+13:49.880 Wrapping up
+
+"""]]<div></div>Duration: 15:05 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.opus">Download --main.opus (8.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/eX2dXG3xMtUHuuBz4fssGT">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="emacsconf-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="emacsconf-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus"></audio></div><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.json">Download --answers.json (5.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus">Download --answers.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm">Download --answers.webm (317MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/emacsconf-nav.md b/2023/info/emacsconf-nav.md
new file mode 100644
index 00000000..a633568d
--- /dev/null
+++ b/2023/info/emacsconf-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/test">What I learned by writing test cases for GNU Hyperbole</a>
+Next by track: <a href="/2023/talks/sat-open">Saturday opening remarks</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/emacsen-after.md b/2023/info/emacsen-after.md
new file mode 100644
index 00000000..d45b44d7
--- /dev/null
+++ b/2023/info/emacsen-after.md
@@ -0,0 +1,1671 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="emacsen-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""Hello, my name is Fermin.""" start="00:00:00.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Today, I'm going to talk about the Emacsen family,""" start="00:00:03.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""the design of an Emacs, and the importance of Lisp.""" start="00:00:06.960" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So we're going to talk about Lisp.""" start="00:00:11.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I want to start from the end.""" start="00:00:13.520" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template new="1" text="""Why Lisp matters""" start="00:00:17.000" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""The first question I want to ask is""" start="00:00:17.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""why I think Lisp matters.""" start="00:00:19.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""When I'm talking about Lisp here,""" start="00:00:21.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I'm talking about the idea of Lisp,""" start="00:00:22.880" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""so the family of languages that are Lisp.""" start="00:00:27.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""But given that there's no formal specification of Lisp,""" start="00:00:30.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""so the opinion might vary. I will expect that Lisp,""" start="00:00:34.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""most of the Lisp have these kind of features.""" start="00:00:40.600" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""The first one is homoiconic:""" start="00:00:44.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""the code is data, basically.""" start="00:00:46.240" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""They also have a REPL: read-eval-print loop.""" start="00:00:49.800" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""That is very powerful and can help in development.""" start="00:00:52.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Also, I think a good Lisp""" start="00:00:57.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""should have a powerful macro system.""" start="00:01:00.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I'm good with compile-time macros,""" start="00:01:03.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but read-time is also interesting.""" start="00:01:05.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""There's a lot of Lisp that you can choose.""" start="00:01:07.600" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""There's the main three ones, of course,""" start="00:01:10.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""with Scheme, Common Lisp, and Clojure.""" start="00:01:12.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Scheme by Guile, Common Lisp by Common Lisp,""" start="00:01:13.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and Clojure by Clojure or ClojureScript.""" start="00:01:19.675" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template new="1" text="""Why Emacs Lisp was chosen""" start="00:01:26.640" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""So let's talk about Emacs Lisp.""" start="00:01:26.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I didn't mention Emacs Lisp.""" start="00:01:28.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I'm going to talk about why Emacs Lisp""" start="00:01:29.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""was chosen for an Emacs editor.""" start="00:01:32.520" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""We're going to explore this kind of design of the Emacs.""" start="00:01:35.600" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And Emacs Lisp is the main language of it. Why?""" start="00:01:39.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Given that there were a few alternatives at the time,""" start="00:01:42.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""why Emacs Lisp was chosen?""" start="00:01:44.960" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So RMS, Richard Stallman, needed a Lisp,""" start="00:01:48.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and there wasn't one available at the time.""" start="00:01:51.920" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Keep in mind, this was the early 80s.""" start="00:01:54.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Stallman was writing at that point the GCC, I think,""" start="00:01:57.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and he was writing the core components""" start="00:02:03.241" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""of what is going to become GNU.""" start="00:02:07.975" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""He needed an editor. He wanted Lisp. He wanted Emacs.""" start="00:02:10.441" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So he wrote Emacs Lisp. So at that time,""" start="00:02:15.500" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""the functionality was more important than &quot;perfection.&quot;""" start="00:02:20.281" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""What I mean [by] &quot;perfection&quot; is: we programmers""" start="00:02:24.600" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""sometimes like to make everything good""" start="00:02:26.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""or very, very good when sometimes, indeed,""" start="00:02:33.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""it's more important that it works""" start="00:02:36.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""to do the task that it should.""" start="00:02:39.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And it's not a bad language.""" start="00:02:42.920" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's not that bad. At that time, it was mostly nice.""" start="00:02:44.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Today, it's good enough, I think.""" start="00:02:50.240" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template new="1" text="""Other "Emacsen"""" start="00:02:54.841" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""He wasn't the first one, the GNU Emacs,""" start="00:02:54.841" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""nor the only one, of course.""" start="00:02:59.461" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""There were others: Hemlock, Zmacs, and Climacs...""" start="00:03:02.541" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Two of them, I think, were written in Common Lisp,""" start="00:03:06.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and Zmacs was written in a Lisp from a Lisp machine,""" start="00:03:08.981" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""so it was an implementation of Emacs.""" start="00:03:14.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Not GNU Emacs, but the original idea""" start="00:03:16.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""of Emacs for a Lisp machine.""" start="00:03:19.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So Hemlock was written in Common Lisp,""" start="00:03:22.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but it's no longer used and no longer developed,""" start="00:03:23.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""as far as I know. And Climacs, it was developed,""" start="00:03:26.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but it was abandoned, I think.""" start="00:03:29.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So three of them failed for different reasons.""" start="00:03:31.520" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Zmacs was because of the Lisp machine market crash,""" start="00:03:33.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and yeah, it also failed.""" start="00:03:37.880" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template new="1" text="""Why not Common Lisp?""" start="00:03:38.581" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""So Emacs got alone. And in the 90s, interesting to explore,""" start="00:03:38.581" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""some people suggest that why""" start="00:03:44.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""now that we have a standard Lisp, right,""" start="00:03:46.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""because Common Lisp was standardized in '94,""" start="00:03:49.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""why don't we change Emacs Lisp to Common Lisp?""" start="00:03:52.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""These are the other reasons I think are important,""" start="00:03:56.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""because that's why Stallman didn't choose Common Lisp.""" start="00:03:59.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""But I think the main one""" start="00:04:01.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""that I didn't write here""" start="00:04:02.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""is that Stallman wasn't a big fan of Common Lisp,""" start="00:04:03.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and he was at the time the main developer""" start="00:04:09.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and maintainer, of course, for Emacs.""" start="00:04:12.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So he chose not to move to Common Lisp.""" start="00:04:14.041" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""But other reasons may be why...""" start="00:04:16.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Because he had a late and painful standardization.""" start="00:04:18.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Keep in mind, the first book that Guy Steele wrote""" start="00:04:22.920" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""was in 1984. The standardization finished in 19--""" start="00:04:28.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""sorry, in 1984 was the first book""" start="00:04:32.240" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and the standardization finished in 1994.""" start="00:04:38.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So, like, 10 years of difference from one to the other.""" start="00:04:44.421" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""10 years of a lot of talk, a lot of money,""" start="00:04:48.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and a lot of pain probably.""" start="00:04:51.880" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""The Lisp usage declined in the 90s""" start="00:04:56.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""due to the AI winter.""" start="00:04:59.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""We all know about the Lisp machine market crash.""" start="00:05:00.960" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And the failure of commercial Lisp machine was""" start="00:05:03.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""inevitable at that point.""" start="00:05:08.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So all the potential Emacs friends died.""" start="00:05:12.240" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And also a lot of Emacs Lisp was already available.""" start="00:05:17.161" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Emacs was already an amateur utility.""" start="00:05:21.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Unix won the war of the operating system, as we know,""" start="00:05:24.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and Emacs Lisp was available in Unix,""" start="00:05:29.960" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""or in GNU/Linux, as we know,""" start="00:05:33.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which is the most successful implementation of Unix.""" start="00:05:36.920" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Sorry, BSD. Okay.""" start="00:05:40.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So Emacs won by being the &quot;better&quot; alternative.""" start="00:05:44.208" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I'm quoting &quot;better&quot; here because""" start="00:05:48.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I think Emacs does have a better design""" start="00:05:50.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and, well, it was the one that survived, right?""" start="00:05:53.700" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Which is the more important thing for a software or,""" start="00:05:56.960" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""you know... So Emacs won by being free,""" start="00:06:00.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""also in price, which I think the Lisp machine wasn't.""" start="00:06:05.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So that was also very good. It was included.""" start="00:06:08.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It had, and it still has, of course,""" start="00:06:11.520" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""a nice collection of packages""" start="00:06:14.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""that improve the standard functionality.""" start="00:06:15.880" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It was easy to extend because of the nature of Lisp.""" start="00:06:20.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And it has a very good integration with GNU/Linux,""" start="00:06:23.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""of course. It was created to write it.""" start="00:06:26.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It makes sense that it's very good""" start="00:06:29.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""for a system administration perspective.""" start="00:06:31.080" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template new="1" text="""Common Lisp is still not dead or is always dead""" start="00:06:39.120" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""But I think Common Lisp is not dead yet.""" start="00:06:39.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Or some people say that it's always dead,""" start="00:06:43.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""so you cannot kill the something that is always dead.""" start="00:06:45.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So I don't always code in C,""" start="00:06:48.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but when I do, it's Lisp. I'm not a big fan of C""" start="00:06:50.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""for a lot of things, but yeah.""" start="00:06:54.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Why I think Common Lisp is still relevant""" start="00:06:58.600" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and can be used for all kind of application,""" start="00:07:02.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""both commercially and non-commercially.""" start="00:07:05.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""The first one is the main implementation""" start="00:07:09.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""of Common Lisp, which is called SBCL, which is awesome.""" start="00:07:11.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's fast. It's a very good extension.""" start="00:07:16.800" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Basically, it's the reference one today.""" start="00:07:19.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""The namespaces of common Lisp,""" start="00:07:21.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I really like the implementation.""" start="00:07:25.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Some people don't like it. It's a matter of taste.""" start="00:07:26.880" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""But I think it's really good.""" start="00:07:28.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I have a timeless standard. So it was standardized""" start="00:07:29.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""in the 90s, as I said.""" start="00:07:32.920" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And it doesn't really need a new standard.""" start="00:07:35.980" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Some people say it does need, but I don't think so.""" start="00:07:38.881" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Also it does have macro readers,""" start="00:07:44.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which I think is a very nice feature of Common Lisp""" start="00:07:46.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""that other Lisp doesn't seem to have,""" start="00:07:49.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""or a lot of them don't: in my mind, Emacs Lisp and Clojure.""" start="00:07:51.240" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Also, it's image-based development,""" start="00:07:56.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which is also quite unique to Common Lisp.""" start="00:07:58.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I don't know all the Lisp that does have this.""" start="00:08:00.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Basically, you develop a REPL""" start="00:08:04.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and then you dump the entire REPL into an image.""" start="00:08:05.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Java would be like a core dump.""" start="00:08:10.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And you create an executable.""" start="00:08:12.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Which at the time, I guess in the 90s,""" start="00:08:14.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""was a huge one, right?""" start="00:08:17.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Because you have the entire language, and the REPL,""" start="00:08:18.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and the code. But today are like 20 MB,""" start="00:08:20.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which in today's standard is nothing.""" start="00:08:23.800" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""There's pictures in your phone larger than 20 MB.""" start="00:08:26.600" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template new="1" text="""Lem is a nice Emacsen implementation""" start="00:08:30.080" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""So there's a new Emacs in town--well, Emacs, not Emacs,""" start="00:08:30.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Which is Lem. I think it's a very good Emacs implementation.""" start="00:08:39.240" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""What I mean by &quot;Emacs&quot; here is not a clone of GNU Emacs,""" start="00:08:43.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but an Emacs-inspired editor with similar characteristics,""" start="00:08:46.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and written in a Lisp,""" start="00:08:51.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which is why I said that Lisp was very important.""" start="00:08:53.520" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template new="1" text="""Why not just use GNU Emacs?""" start="00:08:58.260" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""So first, I'm going to address the elephant in the room,""" start="00:08:58.260" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and the question that maybe most""" start="00:09:01.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""of you are now thinking.""" start="00:09:05.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Why not just use GNU Emacs? It's the project.""" start="00:09:06.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's the main one, right? Why choose another one?""" start="00:09:12.920" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So Lem is relatively new, 2018.""" start="00:09:15.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And it can explore different ideas.""" start="00:09:18.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It was developed by Sasaki-san.""" start="00:09:20.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Basically, it was mostly a one-month project,""" start="00:09:21.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but we are getting there. I'm not the maintainer.""" start="00:09:26.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I'm a developer of Lem. So given that it's""" start="00:09:31.941" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""relatively new, it can explore different ideas.""" start="00:09:36.960" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""You're not bound to a community or backwards compatibility.""" start="00:09:39.240" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""You can explore different ideas,""" start="00:09:43.520" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and I think that's always nice.""" start="00:09:45.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Having multiple options creates competition,""" start="00:09:46.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which benefits the community. So Emacs and Vim,""" start="00:09:49.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""the competition between the two""" start="00:09:52.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""always create nice packages like evil or, you know...""" start="00:09:54.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's really good to have some kind of a competition,""" start="00:09:59.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""healthy competition.""" start="00:10:03.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And it doesn't share any code base with GNU Emacs.""" start="00:10:06.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I want to clarify this because some people think that""" start="00:10:08.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Lem is kind of a, you know, Spacemacs or Doom.""" start="00:10:12.880" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""No, it doesn't share any code.""" start="00:10:16.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It has zero Emacs. So that's it.""" start="00:10:19.960" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Getting this out of the way.""" start="00:10:27.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Why I think Lem is interesting.""" start="00:10:29.200" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template new="1" text="""Why Lem""" start="00:10:31.080" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""I'm going to show why Lem.""" start="00:10:31.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Why? You can try Lem, and maybe you like it.""" start="00:10:32.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""First thing, these are the features""" start="00:10:37.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""that I really like from it.""" start="00:10:41.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Can be different from person to person,""" start="00:10:42.800" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but I think these are the main ideas""" start="00:10:45.575" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""it brings to the table and are really interesting.""" start="00:10:48.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I want to say that Lem is not a research project.""" start="00:10:50.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's not like some people did that""" start="00:10:53.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and it's still in development. No, no.""" start="00:10:55.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This is a usable product that can be used""" start="00:10:57.240" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""to [do] day-to-day programming""" start="00:11:00.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""in a very good experience.""" start="00:11:02.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This is not like--I want to clarify this""" start="00:11:04.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""because some people bring some exploratory projects.""" start="00:11:06.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This is not that one. This is finished.""" start="00:11:08.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Well, finished in the way that you can use it.""" start="00:11:10.800" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's not, you know, have everything in place.""" start="00:11:14.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So let's continue.""" start="00:11:17.800" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's written 100% in Common Lisp.""" start="00:11:20.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I say this because Emacs is not""" start="00:11:22.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""100% in Emacs Lisp.""" start="00:11:23.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""You have to modify the C code,""" start="00:11:26.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I think, well, if you... You don't have to,""" start="00:11:28.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but if you want to change the internals, you do.""" start="00:11:31.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I think that given that Lem does not care""" start="00:11:34.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""about the implementation of the language itself--""" start="00:11:38.880" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""so for example, Lem doesn't have to deal with""" start="00:11:41.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""how Common Lisp works, it just used the language, right?""" start="00:11:44.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's on top of the language.""" start="00:11:48.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""You can say that. Emacs Lisp is Emacs and Emacs Lisp,""" start="00:11:50.800" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""so you have to, you have both in the same place,""" start="00:11:53.880" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which is, well, it's a double-edged sword, right?""" start="00:11:56.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Then you have the both--similar to Emacs--""" start="00:12:00.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""you have ncurses and SDL2 frontends.""" start="00:12:03.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""One is terminal-based and the other is graphical""" start="00:12:05.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""using the SDL2 library,""" start="00:12:08.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which you can do a lot of crazy things.""" start="00:12:10.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Of course, it's meant to program games and stuff,""" start="00:12:13.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but Lem uses, and it works fairly well.""" start="00:12:16.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""You can program games if you want.""" start="00:12:19.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Not that you need to or anything, but we have Tetris.""" start="00:12:21.880" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So there's that.""" start="00:12:27.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Also, separate front-end interface.""" start="00:12:29.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So like I said, you have two, but you can create more.""" start="00:12:31.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""In the past, had an electron one,""" start="00:12:34.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but it got abandoned for obvious reasons, I think. Sorry.""" start="00:12:36.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This idea is taken from Neovim that had a lot of frontends.""" start="00:12:41.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""In fact, we don't have that many,""" start="00:12:45.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but not that many people we have two.""" start="00:12:48.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""That works fairly well.""" start="00:12:49.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""We have superb development experience thanks to SLIME.""" start="00:12:51.675" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So we have Micro,""" start="00:12:56.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which is a SLIME version for Lem, basically.""" start="00:13:01.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""SLIME is awesome and Micro is also awesome.""" start="00:13:04.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""We have a very strong development experience""" start="00:13:09.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""that we don't have for a Lisp,""" start="00:13:12.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which I think is very important.""" start="00:13:15.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""If you want someone to develop packages or to use your tool,""" start="00:13:17.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""your Emacs at least,""" start="00:13:20.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""you need to have a very good development experience,""" start="00:13:22.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which enhance the extensions for the editor.""" start="00:13:28.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So we have also Vim-like integration.""" start="00:13:34.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This for me was mostly mandatory""" start="00:13:36.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""because I'm an evil-mode user, and I think it's really good.""" start="00:13:39.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Because evil-mode is very good and the VMode,""" start="00:13:44.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which it's called, even though it's more like Vim mode,""" start="00:13:49.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""it's called VMode. It's written by""" start="00:13:51.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Fukamachi-san and it's really good.""" start="00:13:54.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So yeah, that's the thing that I think Lem brings to""" start="00:13:59.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""the table and that's really interesting.""" start="00:14:01.960" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template new="1" text="""Similarities and differences""" start="00:14:03.080" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""So I'm going to do a small demo of Lem, a Emacs example.""" start="00:14:03.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""First, the similarities,""" start="00:14:10.520" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""the nomenclature is very similar: modes, buffers,""" start="00:14:11.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""commands... The commands are very similar in nature.""" start="00:14:14.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It was written with GNU Emacs in mind""" start="00:14:17.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""to mimic a lot of things.""" start="00:14:20.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I think GNU Emacs is the best Emacs implementation""" start="00:14:24.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""in that way. So why not just take what is working, right?""" start="00:14:29.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I have similar command,""" start="00:14:33.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but flexible to add other default ones.""" start="00:14:35.600" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's not like Emacs that you have Emacs commands.""" start="00:14:39.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Lem has Emacs command by default,""" start="00:14:42.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but you can easily change that""" start="00:14:45.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""with other default ones, right?""" start="00:14:47.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's like, you can think of it like a major mode, right?""" start="00:14:49.920" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Well, more like a global mode,""" start="00:14:52.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""sorry. That's a global mode of Emacs commands,""" start="00:14:54.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""or something like that.""" start="00:14:57.961" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""In general, the feeling is really close.""" start="00:14:59.361" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So you will tell that it's really close to how both work,""" start="00:15:01.520" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""similar commands, and that shows.""" start="00:15:05.920" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Differences, Common Lisp is not Emacs Lisp,""" start="00:15:07.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""it's similar in the surface.""" start="00:15:12.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So it uses `defun`, you know, have parentheses""" start="00:15:13.920" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and yada, yada, but it's not the same language, really,""" start="00:15:16.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and sometimes you will find""" start="00:15:18.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""that the differences are substantial.""" start="00:15:20.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""The internals are completely different,""" start="00:15:23.260" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""of course, nothing, well, completely.""" start="00:15:24.860" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""They have a buffer implementation and other things,""" start="00:15:27.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""but in general, yeah, aside from that,""" start="00:15:29.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""it's completely different.""" start="00:15:32.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And it's true that GNU Emacs""" start="00:15:34.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""has a better documentation tutorial.""" start="00:15:36.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So GNU Emacs for me, I think it's""" start="00:15:37.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""one of the best-documented software ever.""" start="00:15:39.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""We're trying to go there, but we're still not there.""" start="00:15:41.760" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template new="1" text="""Demo""" start="00:15:49.600" video="mainVideo-emacsen" id="subtitle"]]
+
+[[!template text="""Let's do the demo. So to open Lem, you compile it,""" start="00:15:49.600" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and then you have it available,""" start="00:15:54.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and you open Lem. As you can see,""" start="00:15:55.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""we have the temporary buffer. On the top left is the mode--""" start="00:15:57.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""not mode,""" start="00:16:00.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""the beam, insert, normal, visual. This is the V mode, right?""" start="00:16:03.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""In the top right corner, we have fundamental,""" start="00:16:07.240" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which is the major mode, then paredit,""" start="00:16:10.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which is like the minor mode, but you know,""" start="00:16:11.600" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""this is like the paredit for Emacs.""" start="00:16:15.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""In the top left buffer,""" start="00:16:16.080" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""you have the current buffer.""" start="00:16:19.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So let's open the... Emacs, we all know how to do this.""" start="00:16:22.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This is a command, like explore this command,""" start="00:16:26.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""like `open-init-file`. This opens the init file,""" start="00:16:29.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which is in this directory, in `~/.lem/init.lisp`.""" start="00:16:31.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""As you can see, this is very similar, right?""" start="00:16:34.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""You define a command, which is not interactive,""" start="00:16:38.240" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and then you get the buffer, right?""" start="00:16:40.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This is a... So my personal command...""" start="00:16:42.960" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Let's go to the one that I just opened. Init file, right?""" start="00:16:44.920" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So this is a command that I did,""" start="00:16:48.880" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which is `find-file`.""" start="00:16:52.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This is very similar to [??], but just `find-file`.""" start="00:16:53.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""As you can see, very similar.""" start="00:16:56.600" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This is the way that you program in Lem.""" start="00:16:58.400" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This is the major mode, which is Lisp,""" start="00:17:01.760" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""that we're seeing at the top, right?""" start="00:17:04.840" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""And we can connect if we `slime-self-connect`.""" start="00:17:06.960" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This is the prompt. This is the REPL.""" start="00:17:10.480" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So if we... Keep in mind that this is Common Lisp,""" start="00:17:14.120" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""so this has different things.""" start="00:17:17.960" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So we have to go to the Lem package,""" start="00:17:20.440" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which is very important. This has namespaces, right?""" start="00:17:22.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's not the same. And we can say, okay,""" start="00:17:26.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""`current-buffer`. We get the buffer.""" start="00:17:29.040" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""We can explore everything that is in it, right?""" start="00:17:32.320" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""We have all this stuff. This is... If you're familiar""" start="00:17:35.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""with SLIME or Sly, this is it.""" start="00:17:38.560" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""It's just that we can say, buffer, I think it's `buffer-name`.""" start="00:17:41.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Yes. And we can take this,""" start="00:17:46.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and then we'll give you the name.""" start="00:17:49.160" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So as you can see, the development experience""" start="00:17:50.800" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""is really powerful. We can also `lisp-scratch`,""" start="00:17:54.360" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""which transform... basically apply""" start="00:17:57.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""the major mode of Lisp to the temporary buffer.""" start="00:18:00.680" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""This is very similar to Emacs.""" start="00:18:02.640" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Let's go back to the theme. I think that's it.""" start="00:18:06.720" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Thank you all very much for listening to me.""" start="00:18:12.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I think I point out""" start="00:18:13.880" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""the Emacsen family is really interesting.""" start="00:18:15.240" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""Lisp is really good, and GNU Emacs is really good,""" start="00:18:17.000" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""and I think Lem is also pretty awesome.""" start="00:18:19.280" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""So thank you all very much.""" start="00:18:21.200" video="mainVideo-emacsen" id="subtitle"]]
+[[!template text="""I'll be answering the question now. And happy hacking.""" start="00:18:23.120" video="mainVideo-emacsen" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+<a name="emacsen-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: Here.""" start="00:00:00.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right. Yeah. So thanks,""" start="00:00:05.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Fermin, for the great talk.""" start="00:00:06.279" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""People have questions,""" start="00:00:08.039" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""please post them on the pad or the IRC as""" start="00:00:12.179" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""well and we'll take them up.""" start="00:00:13.259" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Thank you very much. The guests will be here""" start="00:00:17.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to answer questions. Let's see.""" start="00:00:21.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Yep.""" start="00:00:23.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 1]: And also, Fermin, if you later want to""" start="00:00:28.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""clarify anything or fix any URLs or such,""" start="00:00:30.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you're always welcome to do that either like""" start="00:00:32.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""on the Wiki page, or if you like email any of""" start="00:00:36.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the organizers, they should be able to help""" start="00:00:37.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""with that as well.""" start="00:00:38.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Okay. Yeah, I put the wrong URL.""" start="00:00:41.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Yeah, not a big deal really,""" start="00:00:46.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""if you look it up. Yeah,""" start="00:00:48.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that's really better. Thank you very much.""" start="00:00:50.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Checking, no questions.""" start="00:00:56.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Very good to be in touch.""" start="00:00:58.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, we have a question here in the big blue""" start="00:01:17.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""button chat.""" start="00:01:17.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh, public chat. I see.""" start="00:01:21.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Is LEM an acronym? I think it is,""" start="00:01:26.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but I never remember. The complete name is""" start="00:01:32.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like something... It's also a circle,""" start="00:01:36.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like, you know, a self-referencing,""" start="00:01:38.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you know, recursive name.""" start="00:01:41.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I never remember it, sorry.""" start="00:01:42.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's like... Yeah, someone...""" start="00:01:45.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Okay, someone asked about the DEM community,""" start="00:01:50.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""how big it is. So I don't remember,""" start="00:01:56.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to answer the question,""" start="00:01:57.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't remember the acronym,""" start="00:01:58.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but it is an acronym. I just never...""" start="00:02:00.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And it's not written anywhere,""" start="00:02:04.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think, or someone...""" start="00:02:06.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I never check it. So I...""" start="00:02:09.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: I forgot.""" start="00:02:12.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: My maintainer told me once and then So,""" start="00:02:15.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""whole large, does Leia have a package""" start="00:02:17.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""manager? We do have a package manager,""" start="00:02:19.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""funnily enough. We use the QuickLisp""" start="00:02:21.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""infrastructure to get packages,""" start="00:02:26.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so it's very easy to install packages.""" start="00:02:29.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So basically, we don't have a package manager""" start="00:02:33.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""as in Emacs, half a packet.l.""" start="00:02:35.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""We're using the same common list""" start="00:02:39.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""infrastructure to provide the different""" start="00:02:41.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""packages. We also have a talk with the""" start="00:02:45.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Ultralisp, which is like a,""" start="00:02:47.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you know, QuickLisp is like,""" start="00:02:48.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you can think quickly of Melpa.""" start="00:02:50.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Ultralisp is like a fast Melpa,""" start="00:02:52.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""very fast Melpa, that every,""" start="00:02:54.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think every day you can get a package from""" start="00:02:58.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""them. And We have a tag system that you can""" start="00:03:01.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""submit a package and get a tag,""" start="00:03:02.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and Theory can download those packages with""" start="00:03:08.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the lem tag. So the thing is,""" start="00:03:13.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it's not yet, it doesn't have a user""" start="00:03:17.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""interface to install packages.""" start="00:03:18.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Still, it's 2 external packages.""" start="00:03:22.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""For now, imagine this is like the early""" start="00:03:25.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs, right? Everything is going to the core""" start="00:03:27.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""for now, because we need that functionality.""" start="00:03:29.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""In the future, we probably will split it up""" start="00:03:32.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""way more. But let me first answer a question""" start="00:03:37.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""in the other part. How large is the LEN""" start="00:03:42.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""community? Hope it's a chance of survival""" start="00:03:44.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""long term. So we are a very small community,""" start="00:03:47.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""mostly because Sasaki-san,""" start="00:03:51.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the main developers of the community,""" start="00:03:54.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""are from Japan and some of them,""" start="00:03:57.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""or most of them, don't know English.""" start="00:03:58.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""At the beginning, LEM was a very""" start="00:04:01.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Japanese-centric tooling because barrier of""" start="00:04:05.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""language, most of the users are from Japan.""" start="00:04:06.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So different communities.""" start="00:04:08.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And also, I don't know why,""" start="00:04:12.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but the main maintainer,""" start="00:04:13.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is Asaki-san, very good guy and a very,""" start="00:04:17.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""very talented developer.""" start="00:04:19.079" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""He doesn't like to, you know,""" start="00:04:21.779" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""at first the project was all in Japanese,""" start="00:04:24.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so he doesn't care if someone uses the""" start="00:04:27.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""project or not. He's more focused on the,""" start="00:04:28.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I guess, quality of the features of it.""" start="00:04:32.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So that creates a problem that doesn't really""" start="00:04:35.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""mind the community. So the community doesn't""" start="00:04:38.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""mind in a good way. It's to focus more on""" start="00:04:41.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""technicality rather than the user,""" start="00:04:43.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which I mean, I cannot blame him.""" start="00:04:46.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's very hard work to build an Emacs and""" start="00:04:49.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""editor from scratch. It's not a trivial task.""" start="00:04:52.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So yeah, we're a very small community.""" start="00:04:56.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But I think the chance of survival is very""" start="00:04:58.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""good because LEM is written in ANSI Common""" start="00:05:01.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Lisp, so it should be used in any...""" start="00:05:04.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Well, it works in a lot of Common Lisp""" start="00:05:07.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""implementation. For people who don't know,""" start="00:05:10.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Common Lisp is a language that was""" start="00:05:12.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""standardized in the 94.""" start="00:05:13.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I explained that in the talk,""" start="00:05:14.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but I'll say it again.""" start="00:05:15.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So, if Common Lisp exists,""" start="00:05:18.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""in theory, LEM should also exist.""" start="00:05:21.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And also if nCursor doesn't break or doesn't""" start="00:05:24.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""stop to exist, which is even less likely.""" start="00:05:27.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So that's the main idea.""" start="00:05:30.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And you can use LEM for very good Common Lisp""" start="00:05:33.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""development already. If Common Lisp doesn't""" start="00:05:36.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""change that much, it should disappear.""" start="00:05:39.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""We are not bound to any company or any...""" start="00:05:42.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Even Sasaki-san, God forbid,""" start="00:05:46.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""disappears instantaneously.""" start="00:05:47.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""There are a few people,""" start="00:05:50.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""me included, that know very well the code""" start="00:05:52.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""base and we can continue the development.""" start="00:05:54.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So it's not like 1, there's no one-man""" start="00:05:56.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""project. Maybe a four-man project or 5,""" start="00:05:58.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but not 1. Okay, I'll answer the 1 in the""" start="00:06:04.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""chat, on the blue button.""" start="00:06:08.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Is it best to learn Common Lisp before""" start="00:06:10.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""learning to use LEM? I think this is similar""" start="00:06:13.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to Emacs and EmacLisp,""" start="00:06:15.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""right? Should you use EmacLisp before using""" start="00:06:18.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs? Doesn't make too much sense,""" start="00:06:20.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""right? You see Emacs and then you go learning""" start="00:06:23.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Common Lisp. I think it's the same,""" start="00:06:28.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""sorry, EmacsLisp. And it's the same with LEM.""" start="00:06:30.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You can start using LEM with a non-common""" start="00:06:32.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Lisp, which is fine. You can use it to edit""" start="00:06:37.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""your things. It's like an editor.""" start="00:06:39.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But like Emacs, LEM puts a lot of focus on""" start="00:06:42.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""extensibility. So it's very probable that you""" start="00:06:46.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""will learn how to write Common Lisp.""" start="00:06:49.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I have to say that a lot of people that use""" start="00:06:53.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""LEM, well, me and most of the people,""" start="00:06:56.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""come from Emacs. So if you come from Emacs""" start="00:06:59.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and you know a little bit of Emac Lisp,""" start="00:07:00.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Common Lisp is like an uncle or cousin""" start="00:07:04.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""distance that shares some similarities.""" start="00:07:07.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So you will... Well, it's not going to be""" start="00:07:09.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that. I can show... Sorry about that.""" start="00:07:12.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""For example, I show that in the...""" start="00:07:14.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I can show... So the...""" start="00:07:21.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's not that different from Emacs regarding""" start="00:07:27.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""configuration. So for example,""" start="00:07:28.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""this command doesn't exist on LEM.""" start="00:07:31.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And Sasaki-san didn't want to copy one-to-one""" start="00:07:35.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the command from Emacs,""" start="00:07:36.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the airgrip, the cursor grip command of""" start="00:07:39.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs. And I said, okay,""" start="00:07:41.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""then I'm going to implement it myself.""" start="00:07:43.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And it's something like this,""" start="00:07:44.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is you will do something similar to""" start="00:07:47.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs, right? This will be like things at""" start="00:07:50.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""point symbol or something like that.""" start="00:07:52.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And then you have a prompt,""" start="00:07:54.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""very prompt for directory with Emacs would be""" start="00:07:59.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""something similar. And then you then launch""" start="00:08:01.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""grep with the command that you want.""" start="00:08:02.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""This is not that far from Emacs,""" start="00:08:06.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""this, really. If you don't know neither of""" start="00:08:10.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""those, you can still use LEM,""" start="00:08:12.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""though as with Emacs, extensibility will be,""" start="00:08:16.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""well, you couldn't extend it if you don't""" start="00:08:22.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""know combo disp. Should I answer the question""" start="00:08:28.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""on the etherpad writing it at the same time?""" start="00:08:33.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 1]: You're welcome to, but you don't have to.""" start="00:08:36.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You can just answer here on stream,""" start="00:08:38.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: on the Google button. Okay.""" start="00:08:40.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Okay. Are there any Lisp machine capabilities""" start="00:08:43.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you're trying to provide that GNU image""" start="00:08:45.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""lacks? The type objects capability in the""" start="00:08:46.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""editor, as an example.""" start="00:08:47.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I mean, there were a few discussions about""" start="00:08:53.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the Lisp machines and LEM and all the big""" start="00:08:59.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""projects that tries to get some capability of""" start="00:09:03.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it. But we don't really...""" start="00:09:05.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""We try to improve the development experience""" start="00:09:09.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""for Common Lisp and for LEM,""" start="00:09:12.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""imitating a lot of things that the Lisp""" start="00:09:18.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""machine had. I'm going to try to do a thing""" start="00:09:21.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that I don't know if it's going to work.""" start="00:09:23.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So to explain this, let's see.""" start="00:09:26.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'm going to recompile them now live.""" start="00:09:35.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Let's see how it works.""" start="00:09:42.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And compiling the, yes,""" start="00:09:47.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it doesn't work. OK. What if I do?""" start="00:09:51.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""No, it doesn't work. OK.""" start="00:09:53.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I was trying to compile the SDL2,""" start="00:09:55.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but I do have the codebase modifier.""" start="00:09:57.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I should be able to compile this.""" start="00:10:00.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Oh, that was really bad.""" start="00:10:05.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""What about example? I have the code base,""" start="00:10:13.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so let me check. I'm going to do this.""" start="00:10:17.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Oh, yeah, I have this modified.""" start="00:10:19.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I stash this. OK. I have this modified.""" start="00:10:31.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Now it should work. OK.""" start="00:10:33.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Sorry. I was going to show the writing""" start="00:10:42.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""capabilities of it, similar to the Lisp""" start="00:10:45.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""machine of navigating of classes.""" start="00:10:47.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So the answer of that question is,""" start="00:10:52.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""not really. We don't try to emulate this""" start="00:10:57.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""machine, nor any like of that.""" start="00:10:58.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But yeah. Let me, I'm going to try to,""" start="00:11:05.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""okay, now I'm back at them.""" start="00:11:07.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Okay. So what about using them for things""" start="00:11:12.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""other than common, common,""" start="00:11:13.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that markets? Okay. So yes,""" start="00:11:16.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""we do have, so I'm going to show the code""" start="00:11:18.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""base a little bit. Like I said before,""" start="00:11:20.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""we don't have yet too much external packages""" start="00:11:25.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because of the size of the community.""" start="00:11:26.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I have a question. Go ahead,""" start="00:11:30.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you can write it, Michael.""" start="00:11:32.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Yeah. So, yes, as you can see here,""" start="00:11:37.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""this is almost all, or 99% of the major modes""" start="00:11:43.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""we have. We use the same terminology of""" start="00:11:46.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""SkinnyMemax in that way.""" start="00:11:47.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""For example, the C mode,""" start="00:11:49.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""if you go inside, you see that this is the""" start="00:11:51.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""fine major mode. So in that regard,""" start="00:11:53.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it's very similar to Emacs.""" start="00:11:54.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And we have something called a JIT,""" start="00:11:56.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is like a maggot.""" start="00:11:58.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And you can edit files.""" start="00:12:00.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You can use not only for common lists.""" start="00:12:02.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""In my configuration, which is written,""" start="00:12:06.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I will post that later,""" start="00:12:11.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but if you go to my code burg you can see my""" start="00:12:15.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""configuration which is,""" start="00:12:16.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which I do have. So for example you can use""" start="00:12:20.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it for a scheme. We have a swank server.""" start="00:12:22.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""This is the configuration to use it.""" start="00:12:24.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You can use it for JavaScript because we have""" start="00:12:25.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""a native LSP client written in.""" start="00:12:28.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And we have Dired. Yeah,""" start="00:12:29.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""this is Dired. We have Dired indeed.""" start="00:12:33.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""No, it's not Dired, you know.""" start="00:12:35.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's called directory.""" start="00:12:36.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Sasaki-san, which is the main maintainer,""" start="00:12:38.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""doesn't like to copy one-to-one Emacs names,""" start="00:12:43.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but we are the same. We also have projects,""" start="00:12:48.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is like projectile.""" start="00:12:51.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So, you know, they're very similar but not""" start="00:12:55.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the same. We also have a VI configuration,""" start="00:12:56.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""as you can see. I'm using the VI commands and""" start="00:12:59.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""stuff, and it's very good.""" start="00:13:00.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I will say not as good as an evil because it""" start="00:13:03.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""still needs some polish,""" start="00:13:06.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but it's getting there.""" start="00:13:08.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So we can also program in JavaScript and a""" start="00:13:13.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""lot of LSP things, and Elixir,""" start="00:13:16.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which was recently added by myself.""" start="00:13:18.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And yeah, it's very fun to add new modes.""" start="00:13:21.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""OK, what else next? What about user-level""" start="00:13:27.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""things other than coding?""" start="00:13:28.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""What about using this in conjunction with""" start="00:13:31.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Nix? Oh, so there's a big,""" start="00:13:34.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so like I said before,""" start="00:13:36.980" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""there were like an issue that 3 main common""" start="00:13:40.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""list project were talking,""" start="00:13:40.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""some of the users. So the 3 main projects are""" start="00:13:46.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""LEM, probably, Nixed, and then StamWM,""" start="00:13:49.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the 3 main, well, 3 big,""" start="00:13:52.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""common list projects that are trying to""" start="00:13:55.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""emulate an Emacs experience in different""" start="00:13:57.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""fields. 1 is Editor, the other 1 is Window""" start="00:14:00.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Manager, and the 1 is the browser.""" start="00:14:01.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""The problem is that the design of the 3 are""" start="00:14:06.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""very different. So Nix is very focused on the""" start="00:14:11.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""browser. You can connect to Nix.""" start="00:14:14.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So given that they're both a common list,""" start="00:14:16.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you can connect to Nix from them and vice""" start="00:14:18.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""versa. And you can send commands and you can,""" start="00:14:21.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so you have this kind of interoperability""" start="00:14:22.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""with both. But no, you cannot combine both to""" start="00:14:31.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""have 1 LEMNIX. That would be very sick.""" start="00:14:35.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I would love it. But the effort is just too""" start="00:14:39.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""much. Keep in mind we are a very small""" start="00:14:41.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""community. The LEM, like I said,""" start="00:14:44.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""we are like 345 developers that write""" start="00:14:49.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""packages and answer questions and stuff.""" start="00:14:51.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Now we need users in that way to test things.""" start="00:14:55.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So what is the license of LEM?""" start="00:14:58.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""The license of LEM is MAT.""" start="00:15:00.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""We have some components of all the various""" start="00:15:02.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""licenses, but the main 1 is MAT.""" start="00:15:04.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I didn't choose the license of it.""" start="00:15:07.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I would highly prefer a more like GPL 1,""" start="00:15:11.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but like I said I'm not a maintainer,""" start="00:15:13.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so the license is MAT.""" start="00:15:15.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""This question, I realize,""" start="00:15:19.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""how far is LEM from being able to remove a""" start="00:15:22.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""list libraries? OK, that's a big question""" start="00:15:26.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""indeed. And Funny enough,""" start="00:15:30.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""2 years ago in the EmacsConf,""" start="00:15:31.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I talk about this, not with LEM,""" start="00:15:34.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but with Common Lisp and Emacs Lisp in""" start="00:15:36.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""general. So I'm not the only 1 thinking about""" start="00:15:41.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""this. In fact, I'm talking with someone that""" start="00:15:44.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""is trying to write like a Emacs Lisp""" start="00:15:46.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""interpreter to work with them.""" start="00:15:48.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""The thing is that Emaclist libraries,""" start="00:15:52.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so the API is just very different.""" start="00:15:55.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""That's the main problem.""" start="00:15:57.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""That's really the problem.""" start="00:15:58.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You can, so you can, let me see.""" start="00:16:02.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So, you can have an Emacs list buffer of LEM.""" start="00:16:13.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""This is an Emacs list rebel.""" start="00:16:15.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I wrote an LRSP client so you can connect to""" start="00:16:21.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs and send things and stuff.""" start="00:16:23.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So you're friends that we share stuff.""" start="00:16:25.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But having a complete Emacless implementation""" start="00:16:28.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""with LEM and work with both API will be a""" start="00:16:37.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""huge work. Very like, it's even if they share""" start="00:16:42.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""very similar thing, in fact,""" start="00:16:43.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""API in some places is very similar.""" start="00:16:46.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Down the line infrastructure,""" start="00:16:48.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so the code is, so it's completely different.""" start="00:16:52.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It will be very hard. We do have a clone of""" start="00:16:56.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""maggot that works, more or less.""" start="00:16:58.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Well, it does work, but maggot's just better.""" start="00:17:01.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But it's getting there.""" start="00:17:03.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So like I said, we're trying to,""" start="00:17:05.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""not to copy one-to-one,""" start="00:17:06.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but to adapting each tool to LEM.""" start="00:17:09.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""How are LEM buffer designs similar to Emacs?""" start="00:17:13.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So yeah, that would be,""" start="00:17:19.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so how a blend buffer design,""" start="00:17:21.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""similar to Emacs. So similar in what way,""" start="00:17:24.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""actually with properties.""" start="00:17:26.319" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think that you've seen,""" start="00:17:29.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so you do have like a font lock,""" start="00:17:31.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""different kind of properties,""" start="00:17:32.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but it's not exactly how Emac does it with""" start="00:17:37.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""overlays and stuff. You can,""" start="00:17:41.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so if you're very interested,""" start="00:17:43.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't want to go too much deep into the,""" start="00:17:45.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""let me go to, I don't want to go too much""" start="00:17:51.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""deep into the technicality of things now,""" start="00:17:55.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but you can go. So LEM is written 100% in""" start="00:17:57.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Common Lisp. So if you know Common Lisp,""" start="00:18:00.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you can go to buffer. You can check all the""" start="00:18:03.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""codes here. Always we have,""" start="00:18:08.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""we also have this, which is like StreamX.""" start="00:18:12.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Sorry to that, I don't.""" start="00:18:17.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But yeah, So you can see.""" start="00:18:21.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So yeah, if you go to the code base,""" start="00:18:24.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""maybe some of you can check this problem.""" start="00:18:26.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Well, not problem, but yeah.""" start="00:18:28.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""That's this Japanese comment.""" start="00:18:30.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You can see here why it's very,""" start="00:18:35.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you have to translate and stuff,""" start="00:18:38.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is sometimes a little bit annoying.""" start="00:18:39.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But yeah, some of them are in English.""" start="00:18:44.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So this play is not the same.""" start="00:18:47.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So if you're interested,""" start="00:18:48.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you can go to the buffer and check it out for""" start="00:18:51.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""yourself. But I think it uses the overlay in""" start="00:18:53.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""a different way. So the implementation is""" start="00:18:58.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""different that way. Oh,""" start="00:19:04.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: This module. Oh, this is very low.""" start="00:19:10.875" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: this is fairly low. What other things or""" start="00:19:12.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""experiences that I can show you?""" start="00:19:15.559" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Just like you show you.""" start="00:19:15.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Any marks?""" start="00:19:18.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Okay, very interesting question.""" start="00:19:32.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""What are the things...""" start="00:19:34.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So that's interesting.""" start="00:19:37.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Let me see. So forgive me,""" start="00:19:42.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you answered this. I talked briefly in the""" start="00:19:49.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""talk about this, but basically I like""" start="00:19:53.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Komaldisp, I have the mascot here.""" start="00:19:55.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 3]: a very""" start="00:19:58.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: It's Italian thing. I like Common Lisp and I""" start="00:20:04.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""think GmagLisp is a very good friend of""" start="00:20:08.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Common Lisp in the way that Serious Software""" start="00:20:10.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Analysis is a very good uncle.""" start="00:20:11.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Let me answer first the 1.""" start="00:20:18.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So I like to extend it in Common Lisp.""" start="00:20:24.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I like the Common Lisp libraries.""" start="00:20:25.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And I think them have a better design in""" start="00:20:30.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""terms of its 1 language,""" start="00:20:31.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which I think is a nice strength.""" start="00:20:33.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Like, 1 of the things that put me off when I""" start="00:20:36.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""was using Emacs, I love to extend the editor""" start="00:20:38.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and to go inside and stuff.""" start="00:20:40.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And 1 of the things that I'm not a big fan of""" start="00:20:43.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""C. If you're a fan of C,""" start="00:20:44.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you will be very pleasant with finding C""" start="00:20:47.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""stuff, but I don't. So when I'm trying to""" start="00:20:50.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""hack an Emacs and go inside the things,""" start="00:20:52.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I will control C code.""" start="00:20:54.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""That's not that interactive as the Emaclist""" start="00:20:56.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""1, and that would be like a fuzzball for me.""" start="00:20:59.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I was always dreaming about that stuff,""" start="00:21:03.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""having like everything in 1 language.""" start="00:21:05.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""The thing that LEM does to me is like it""" start="00:21:08.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""allows me to extend the editor to modify""" start="00:21:12.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""also, to modify in Common Lisp.""" start="00:21:14.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Also, I like the language and technology.""" start="00:21:17.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's a bold thing, right?""" start="00:21:19.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's a world language that I love,""" start="00:21:21.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and Emacs that I love.""" start="00:21:23.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs, I'm a big fan of,""" start="00:21:25.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""or a user of GNU Emacs.""" start="00:21:27.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And LEM is like Emacs plus Common Lisp,""" start="00:21:29.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but with a different design.""" start="00:21:30.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't want to, It's not a clone.""" start="00:21:32.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I want to get this very clear that LEM is not""" start="00:21:37.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""a clone of Emacs. The sign is very different""" start="00:21:40.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""in a lot of ways. But it's very inspired,""" start="00:21:43.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and that cannot be denied.""" start="00:21:44.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 1]: I can jump in for a second.""" start="00:21:48.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think we're like 15 minutes into the lunch""" start="00:21:51.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""break, but you're welcome to continue""" start="00:21:52.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""answering questions. But if anyone on the""" start="00:21:55.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""stream or folks want to go grab lunch,""" start="00:21:57.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""feel free to do that. I'm probably going to""" start="00:21:59.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""do that as well. But yeah,""" start="00:22:01.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""we can either continue keeping this on the""" start="00:22:03.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""stream, or if people would like to come join""" start="00:22:06.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""here on BigBlueButton and talk to Fermin,""" start="00:22:08.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like folks have already done that,""" start="00:22:11.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""yeah, you're welcome to.""" start="00:22:12.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, go ahead. No problem.""" start="00:22:14.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Thank you. Thank you, Vitaliy.""" start="00:22:16.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Cheers. Cheers. So finishing the answer to""" start="00:22:25.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the question, I think LEM does tries to fix""" start="00:22:30.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""some Emacs problems, can we fix problems""" start="00:22:31.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""regarding the internal API,""" start="00:22:35.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which makes sense, right?""" start="00:22:37.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs have like 40 years,""" start="00:22:39.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is a lot. And yeah,""" start="00:22:42.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is, that's what makes me happy.""" start="00:22:44.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I use both now. I use Maggis and Emacs for""" start="00:22:47.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""some languages and then I use LEM for Common""" start="00:22:50.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Lisp and other languages.""" start="00:22:51.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You can also use LEM for EmacLisp,""" start="00:22:55.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which makes LEM the second best editor for""" start="00:22:59.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""EmacLisp. It was a funny thing to do.""" start="00:23:02.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""OK, so do you think LEM will continue to have""" start="00:23:05.980" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""a lot of Japanese documentation?""" start="00:23:06.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So there's not that many Japanese""" start="00:23:11.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""documentation, really.""" start="00:23:12.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So there's a few comments here and there,""" start="00:23:18.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but it's not full. We have a web page with a""" start="00:23:20.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""lot of documentation in English.""" start="00:23:22.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So you can take a look at that.""" start="00:23:25.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But we do have to improve the documentation""" start="00:23:29.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and translate it to English.""" start="00:23:30.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Sasaki-san is up to it,""" start="00:23:32.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but he just doesn't feel that comfortable""" start="00:23:35.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""translating it himself.""" start="00:23:36.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So yeah.""" start="00:23:38.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 3]: So, this is Peter on BigBlueWem.""" start="00:23:42.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Yeah, it's neat that Wem even exists,""" start="00:23:49.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because there's always chatter on the Emacs""" start="00:23:55.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""mailing list to rewrite Emacs and some other""" start="00:23:58.980" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""language. And to see that it's already to see""" start="00:24:03.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that I mean, you have an implementation""" start="00:24:05.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""sitting there and, and the thing I was""" start="00:24:08.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""wondering while I was listening in on the,""" start="00:24:10.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""on the Q and A was do you have Dured?""" start="00:24:14.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Do you have Maggot? And some,""" start="00:24:15.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""somebody else wrote that question into,""" start="00:24:17.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""into Etherpad. But I was happy to see that""" start="00:24:20.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you have Dured or something like it""" start="00:24:22.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""implemented. Because I think that's like the,""" start="00:24:24.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""for me, that's the most important thing in""" start="00:24:27.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs because that gets me around in my""" start="00:24:30.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: BRODINKOVICH Yeah, for me too.""" start="00:24:35.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""For me too.""" start="00:24:35.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: Go ahead.""" start="00:24:37.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 3]: system. VICTOR Sorry. Yeah,""" start="00:24:37.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so I may try it out sometime,""" start="00:24:39.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but probably won't be for like 3 or 6 months,""" start="00:24:42.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because there's always a backlog of other""" start="00:24:45.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""things to try out.""" start="00:24:46.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I'm the 1 who wrote that question.""" start="00:24:49.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And do you use, I think you have bookmarks""" start="00:24:54.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and registers, I imagine,""" start="00:24:55.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""right?""" start="00:24:55.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: I think you have. I never tried bookmarks""" start="00:24:59.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because I don't use it that much.""" start="00:25:01.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But I think you have something like that.""" start="00:25:02.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I mean, I don't. There's a few features that""" start="00:25:05.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't know about them because I don't use""" start="00:25:07.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it much. Some features,""" start="00:25:08.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I mean. But yeah, I think you have.""" start="00:25:11.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Let me check. We can check,""" start="00:25:13.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""probably. Things in extensions,""" start="00:25:16.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""just directory. VNXT. Directory mode.""" start="00:25:23.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So there is. So this is the Tyrant's friend.""" start="00:25:28.950" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I won't say clone. Very inspired.""" start="00:25:31.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: What about like on the note-taking front,""" start="00:25:36.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like org mode,""" start="00:25:38.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: You know. note... Yes,""" start="00:25:41.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so... EMMS... Yes, so someone did some MMS.""" start="00:25:50.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So not MMS, not much. So package for LEM that""" start="00:25:58.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""is now in a pull request,""" start="00:26:00.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think. But yeah, no.""" start="00:26:03.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""The thing is I don't use R mode that much.""" start="00:26:06.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""We don't have a heavy R mode user to provide""" start="00:26:11.980" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""some major mode and stuff.""" start="00:26:15.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So we don't have that implemented yet.""" start="00:26:18.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""The thing is, my plans for,""" start="00:26:20.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I do have plans for our mode.""" start="00:26:22.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""They're a little bit evil,""" start="00:26:24.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but there's plans for it.""" start="00:26:26.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So I'm planning to use,""" start="00:26:27.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so rewriting our mode is a big task that I""" start="00:26:30.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""don't want to do. So I'm going to use Emacs""" start="00:26:34.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""for our mode in 2.11. I wrote a recipe,""" start="00:26:39.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""no, a remote procedural RPC that I'm using""" start="00:26:45.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""for the Red Bull and stuff.""" start="00:26:46.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And I'm planning to have an Emacs Puppet to""" start="00:26:51.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""provide me the functionality for Org Mode.""" start="00:26:54.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I know for me, when I write notes,""" start="00:26:59.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I like to note more than Org Roam just""" start="00:27:01.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because I feel Org Mode is great and all,""" start="00:27:06.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but if all my notes are in it,""" start="00:27:08.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I kind of feel trapped by it.""" start="00:27:10.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I did the talk journaling in KOutline,""" start="00:27:14.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and I like that package better for some""" start="00:27:17.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""things and it's like if I want to put like""" start="00:27:21.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the tags on PDF file names and so it's like""" start="00:27:24.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Yeah, it's great and all but it's also Is""" start="00:27:28.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that part of the motivation of wanting to use""" start="00:27:31.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""lamb is so you feel less entrapped by emacs""" start="00:27:34.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""No, I will say I don't no.""" start="00:27:38.445" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: No, no. I was very happy trapping to Emacs.""" start="00:27:40.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""To be fair. The thing is I don't use Hormel""" start="00:27:47.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that much. That's just the reality.""" start="00:27:48.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Org Mode for me is a very good markup""" start="00:27:52.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""language, but not that much really.""" start="00:27:54.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I know that Org Mode has a lot of people and""" start="00:27:56.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it's used by a lot of people.""" start="00:27:58.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And there's very interesting packages.""" start="00:28:00.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: What about org mode versus markdown versus""" start="00:28:03.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""plain text versus latex then?""" start="00:28:05.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: I like org mode because of the Emacs""" start="00:28:08.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""functionality. I think if you take that away,""" start="00:28:10.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you plain or mode versus Markdown,""" start="00:28:15.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't think there's that much difference,""" start="00:28:17.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""if you take the Emacs functionality away.""" start="00:28:19.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I like the""" start="00:28:24.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah. Emacs syntax more than Markdown.""" start="00:28:27.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Like, for instance, you have the double""" start="00:28:29.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""square brackets, which is simpler for me to""" start="00:28:31.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""look at, but.""" start="00:28:32.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, I guess it's a matter of,""" start="00:28:35.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I mean, we don't have yet a major mode of R""" start="00:28:38.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""mode, which will be quite trivial.""" start="00:28:39.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Well, you know, a simple syntax highlights,""" start="00:28:42.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you know, R mode in LEM,""" start="00:28:46.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because no 1 wrote it.""" start="00:28:52.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I mean, that's the way with this project,""" start="00:28:55.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""right? If you need people to be motivated to""" start="00:29:00.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""do that. And with LEM,""" start="00:29:04.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""someone asked about the Japanese.""" start="00:29:06.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think they're interested about that.""" start="00:29:11.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""LEM does have a thing,""" start="00:29:15.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: If the it would be good.""" start="00:29:16.030" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I'd be able to do more,""" start="00:29:16.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but that's what I""" start="00:29:18.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: was doing.""" start="00:29:19.370" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: they think True. So, for example,""" start="00:29:22.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""we're using another big fan of...""" start="00:29:24.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I mean, I know that the main people that may""" start="00:29:27.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""use in the future LEM are EMACLIS people.""" start="00:29:30.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""A lot of them. It's very similar.""" start="00:29:33.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And Sasaki-san and the LEM community mainly""" start="00:29:37.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""uses Discord for chat and stuff.""" start="00:29:43.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I mean, we do have matrix,""" start="00:29:46.980" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and I should connect to it,""" start="00:29:48.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""by the way. But we mainly use Discord,""" start="00:29:54.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which I don't think is a good thing.""" start="00:29:58.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I mean, to have the main communication""" start="00:30:01.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""channels, Discord. Because,""" start="00:30:05.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""well, it's Discord. It's a closed source""" start="00:30:09.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""application that is easy for some people,""" start="00:30:13.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but for some people it's a tailbreak.""" start="00:30:14.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: are in""" start="00:30:17.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Especially people that the Emacs community""" start="00:30:17.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that very like free software.""" start="00:30:20.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: The only good thing about Molesley is it's""" start="00:30:22.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""popular, but as soon as you break out of that""" start="00:30:26.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""mold, all of a sudden it becomes a lot""" start="00:30:28.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""harder. For instance, they don't have...""" start="00:30:30.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""All the third-party clients are unofficial""" start="00:30:33.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and according to their terms of service they""" start="00:30:37.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""can just can you. Which is not a nice""" start="00:30:40.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""position to be in if you're trying to use it""" start="00:30:44.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and you wanted to be a moderator using some""" start="00:30:47.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""side tools that weren't Discord.""" start="00:30:50.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: I agree 100% and in fact I'm not a big fan,""" start="00:30:55.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't like Discord.""" start="00:30:56.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 5]: You mentioned the RPC you did between Emacs""" start="00:31:03.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and the LEM. Do you have it published""" start="00:31:06.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""somewhere?""" start="00:31:06.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yes, it's in the LEM project.""" start="00:31:13.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'll copy that in the chat.""" start="00:31:15.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 5]: Okay, because I'm always interested in how""" start="00:31:19.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you do like the communication with other""" start="00:31:21.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""programs with Emacs because that's""" start="00:31:24.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""interesting.""" start="00:31:24.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: I'm only using the porthole package,""" start="00:31:30.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'm not writing it from scratch,""" start="00:31:32.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""not that much as a developer.""" start="00:31:34.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 5]: So I don't know this package.""" start="00:31:37.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Maybe that's the thing I can learn.""" start="00:31:39.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh yeah, probably if you,""" start="00:31:40.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""yeah. Yeah. If you want to,""" start="00:31:42.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so I didn't see this 1,""" start="00:31:43.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""this package for the RSP,""" start="00:31:46.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which make is monthly automatically.""" start="00:31:48.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 5]: And how do you do, how do you plan to""" start="00:31:53.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""integrate Org Mode? Because Org Mode needs to""" start="00:31:59.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""work on.""" start="00:31:59.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: This way? Yes, so I'm planning to have like a""" start="00:32:03.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs puppet and to have like a clone buffer""" start="00:32:08.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""from the buffer that you do in LEM and then""" start="00:32:11.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the command sent into the Emacs hidden buffer""" start="00:32:16.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and then the changes go back to LEM to change""" start="00:32:19.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the buffer of LEM. That's my idea.""" start="00:32:22.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 5]: Okay, that's all. It's interesting.""" start="00:32:24.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Would be interesting to see what comes from""" start="00:32:28.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it.""" start="00:32:28.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: It's a bit, it's a hackish 100%.""" start="00:32:32.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's not, you have to duplicate the""" start="00:32:35.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""information and stuff,""" start="00:32:36.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is, oh, by the way,""" start="00:32:38.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'm going to pass the Lemington,""" start="00:32:40.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is the name of the RSP clone.""" start="00:32:43.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Sorry, the integration with Emacs,""" start="00:32:45.980" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is LEM with a mustache.""" start="00:32:48.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: They had good news where it would do the same""" start="00:32:54.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""thing, where it would open up a slave Emacs,""" start="00:32:56.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because it was such a performance hog for""" start="00:33:00.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""retrieving all the emails.""" start="00:33:02.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: No. I mean, Emacs have a server,""" start="00:33:06.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""right? I can, in fact,""" start="00:33:08.559" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'm using that for, I'm already puppeting.""" start="00:33:11.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Well, not puppeting. I'm already using""" start="00:33:13.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Maggots. So I have this.""" start="00:33:15.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Actually, let me copy.""" start="00:33:17.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I have this, which is usually a little bit,""" start="00:33:25.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'm launching the Emacs daemon and then I'm""" start="00:33:28.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""launching Leviton. And then this is the kill""" start="00:33:31.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and this is the status,""" start="00:33:32.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is basically saying,""" start="00:33:33.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""run this and this is this,""" start="00:33:36.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is run maggot in this file.""" start="00:33:42.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""If you put it side by side,""" start="00:33:43.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you will check instantly that this is the""" start="00:33:48.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""buffer directory, LEM home,""" start="00:33:50.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and then the current file.""" start="00:33:54.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Because I'm launching it with the file.""" start="00:33:58.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So buffer directory, which is the directory""" start="00:34:03.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""of the buffer. So I'm already using maggot as""" start="00:34:09.239" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""a tool outside of LEM,""" start="00:34:13.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because I really like maggot.""" start="00:34:14.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And this is very easy to check.""" start="00:34:16.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Launch Emacs daemon. Okay.""" start="00:34:22.719" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And then I go to local projects.""" start="00:34:28.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Let's go to another 1 that is not LEM.""" start="00:34:31.719" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: You actually have weird ideas like running it""" start="00:34:37.199" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""in daemon mode so you don't ever have to""" start="00:34:39.639" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""restart it or the images,""" start="00:34:40.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I guess, that LEM has.""" start="00:34:43.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: LEM does not have this kind of,""" start="00:34:46.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I will call it, it doesn't have like a demon""" start="00:34:53.719" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""mode, so you have control separately,""" start="00:34:56.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but keep in mind that LEM,""" start="00:34:58.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it's a common list program.""" start="00:35:01.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So if you use slime or Sly,""" start="00:35:03.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you can easily connect to them to hack on it.""" start="00:35:10.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: ever use that functionality,""" start="00:35:12.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like using it from another computer?""" start="00:35:14.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Do you Another computer,""" start="00:35:16.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think the same computer,""" start="00:35:17.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""or maybe Sage, but yeah,""" start="00:35:21.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it's very...""" start="00:35:21.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Or from like your window,""" start="00:35:24.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""if you were using the window...""" start="00:35:26.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I can't remember the name of the window""" start="00:35:28.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""manager. Or if you were using...""" start="00:35:30.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""What? Yeah, yeah. Or using like stump,""" start="00:35:36.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""calling it from like stump WM or how often do""" start="00:35:40.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you use that REPL?""" start="00:35:41.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: SPCL? No. ThumbWM? I use it quite a lot.""" start="00:35:43.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I connect to a museum,""" start="00:35:44.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""some WM right now, and I use LEM to connect""" start="00:35:49.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to it, but I was using Emacs before.""" start="00:35:52.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And you can use Sly or Slime to connect to""" start="00:35:55.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""LEM. So the thing that is in Common List""" start="00:35:58.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""makes it this kind of already out-of-the-box""" start="00:36:00.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""connectivity between different...""" start="00:36:04.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: How many window managers have you used?""" start="00:36:06.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I've used that before.""" start="00:36:11.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I've also used, like right now I'm using""" start="00:36:13.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Sway. I've used Xmonad,""" start="00:36:14.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""DWM.""" start="00:36:16.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: This is awesome. What is the other 1?""" start="00:36:23.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I can't remember the name.""" start="00:36:25.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But it was like a few years ago.""" start="00:36:27.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I've been doing some DWM for like the last""" start="00:36:30.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I remember that. Go ahead.""" start="00:36:36.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: year, I think. Or 3. know,""" start="00:36:37.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it's that I was... I don't know.""" start="00:36:41.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: I don't a couple""" start="00:36:43.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: I'd like to have of days of my...""" start="00:36:44.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I remember that that window manager seemed to""" start="00:36:48.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""have some unique ideas that weren't""" start="00:36:53.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""necessarily available on like EWM and XMLNAD.""" start="00:36:56.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: So SoundLM, it's an interesting project.""" start="00:37:02.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But for example, I'll change...""" start="00:37:05.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So I don't have in this computer,""" start="00:37:06.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but in my other computer,""" start="00:37:08.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I change the mod line or bar,""" start="00:37:13.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""top bar, whatever, because the ThunderLVM""" start="00:37:18.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""doesn't only update it when you click,""" start="00:37:21.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""or you do some events or happen 1 minute.""" start="00:37:25.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So you can see here, this is not changing""" start="00:37:27.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""until I click.""" start="00:37:28.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's it.""" start="00:37:33.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 3]: AUDIENCE 1 Matthew, sorry.""" start="00:37:34.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I have a quick question for Matthew.""" start="00:37:36.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So is your talk going to be posted or did you""" start="00:37:43.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Go ahead. I gave them a recording.""" start="00:37:47.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""My talk was the K outline for journaling""" start="00:37:50.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 3]: give it live? right right it was I woke up""" start="00:37:53.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""too late for it Sorry,""" start="00:37:54.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so I came in and I just saw Bob Weiner""" start="00:37:58.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""answering questions So is your talk going to""" start="00:38:03.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""be on the page for your talk?""" start="00:38:06.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't""" start="00:38:07.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: see it there.""" start="00:38:08.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I could give you a link to it,""" start="00:38:11.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because I had, I hosted it on Mega to give it""" start="00:38:17.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to them, because when I emailed it,""" start="00:38:18.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 3]: Oh, okay. Is it""" start="00:38:22.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: it didn't work. on a monkey?""" start="00:38:22.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Download and watch it.""" start="00:38:23.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'm probably going to post it on YouTube""" start="00:38:29.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""later. I, I had my face record with it,""" start="00:38:33.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but I never got it edited together in time""" start="00:38:36.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 3]: Okay, if you could if you can put the link""" start="00:38:40.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""onto the onto the ether pad or something or""" start="00:38:43.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""onto the wiki then then I can find it and""" start="00:38:46.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""check it out. All right,""" start="00:38:49.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""thanks. Sorry to interrupt your time,""" start="00:38:53.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Fermin, but I figure we're heavily into the""" start="00:38:56.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""break anyways. FERMIN GENZIERIA-CHAPMANI""" start="00:38:57.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: No problem. I'm in an EMAX conference talking""" start="00:39:00.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""about all that I mean I'm already doing""" start="00:39:02.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""blasphemy so I""" start="00:39:04.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""think that's oh yeah notes so the thing is""" start="00:39:24.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""then as my point of view,""" start="00:39:26.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and the point of view probably of Sasaki-san,""" start="00:39:28.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""just a moment, I think,""" start="00:39:30.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""is very focused on an IDE more than a""" start="00:39:34.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""node-taking editor. More like an integrated""" start="00:39:40.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""development environment.""" start="00:39:41.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So node is like a second thing.""" start="00:39:45.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So not exactly the main focus.""" start="00:39:51.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And I know that Emacs does have a very strong""" start="00:39:54.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""community of Ormode users that use Emacs for""" start="00:39:58.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Ormode, which is the killer feature,""" start="00:40:00.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""1 of I'll do a feature.""" start="00:40:01.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'll do a feature of Emacs.""" start="00:40:04.456" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So I'm not the maintainer of porthole.""" start="00:40:09.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'm sorry. I did add it to so I don't""" start="00:40:20.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""maintain the remote. I'm sorry,""" start="00:40:22.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'll pothole the USB. I'm only using it on""" start="00:40:27.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the Lamington. I cannot change anything.""" start="00:40:31.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: What are some interesting things you have""" start="00:40:39.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""with your window manager?""" start="00:40:40.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I do have elsewhere.""" start="00:40:43.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: I can connect to it and hack it from my""" start="00:40:49.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""editor, which I think is really fun.""" start="00:40:53.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""The way I can write, so I wrote a few""" start="00:40:56.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""packages for Soundallium.""" start="00:40:58.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So 1 of them is Proton,""" start="00:41:06.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which basically launches like a...""" start="00:41:10.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So Proton is like this wine thing that Valve""" start="00:41:18.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah, I'm a user.""" start="00:41:22.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: did. OK, so this basically,""" start="00:41:24.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you have like a list of,""" start="00:41:26.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""let me check. No, we're just,""" start="00:41:32.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""sorry. This, So these all games are bought by""" start="00:41:38.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""me. They're not pirates in any way.""" start="00:41:41.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I can use this to to launch it.""" start="00:41:45.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Was that Dmenu or was that StumpWM menu?""" start="00:41:50.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: This is Dmenu. So I have,""" start="00:41:54.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I also contribute the Dmenu integration into""" start="00:42:02.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""StumwM. So I use Dmenu.""" start="00:42:05.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So like this, right?""" start="00:42:07.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah that's pretty cool.""" start="00:42:13.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You don't know how nice those things are""" start="00:42:15.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""until you start using those.""" start="00:42:16.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: The menu is very interesting and very...""" start="00:42:21.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Also I was using RoFi,""" start="00:42:24.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but...""" start="00:42:25.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I was also more... The other thing I was more""" start="00:42:29.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""mentioning is that also,""" start="00:42:31.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""being able to use D-Menu,""" start="00:42:32.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but being able to just have keyboard""" start="00:42:34.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""oriented? Everything fuzzy search narrowed""" start="00:42:38.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and No tabs no status bars like all of a""" start="00:42:45.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""sudden your mental model on how your computer""" start="00:42:47.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""operates goes through the roof and a lot of""" start="00:42:51.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs users Know what that is like Especially""" start="00:42:57.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""In conjunction with a window manager?""" start="00:43:01.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, I think so. I remember when I was...""" start="00:43:06.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So for me, I tried the Emacs window manager,""" start="00:43:11.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but it wasn't for me. Having a single thread""" start="00:43:16.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""window manager is scary.""" start="00:43:18.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And also games and some stuff wasn't working""" start="00:43:22.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""correctly, which it makes sense in some""" start="00:43:25.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""regards, using Emacs for window manager.""" start="00:43:27.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Oh""" start="00:43:30.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I've used it before I found that it wasn't as""" start="00:43:34.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like it. It's not as bad in practice because""" start="00:43:39.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""The paper cuts you don't like to hit them""" start="00:43:43.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""every day So you make sure So you make sure""" start="00:43:45.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""your Emacs config is a lot nicer and doesn't""" start="00:43:48.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""have those slowdowns. Or you avoid those""" start="00:43:51.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""things. It forces you to make your Emacs""" start="00:43:54.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""config a lot more robust to speed.""" start="00:43:59.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, yeah. That's true,""" start="00:44:02.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""yeah. The thing, yeah,""" start="00:44:04.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but still, I don't know,""" start="00:44:05.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: You'll still get the paper cuts,""" start="00:44:08.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but...""" start="00:44:09.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: like... Yeah, and my experience was not""" start="00:44:12.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""great. I'm not a person,""" start="00:44:16.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like, I don't want to have...""" start="00:44:17.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Not with LEM or Emacs.""" start="00:44:19.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I like to have different programs.""" start="00:44:22.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't want to like, I never was in like""" start="00:44:25.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs or you know, only Emacs.""" start="00:44:28.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I really love Emacs, GNU Emacs,""" start="00:44:30.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but only Emacs? No, no,""" start="00:44:33.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I like my browser, I like my,""" start="00:44:35.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you know, my Windows Manager,""" start="00:44:37.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""my, you know, I wasn't Emacs only.""" start="00:44:41.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs is my OS. Some people are,""" start="00:44:45.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is good. Different kind of a...""" start="00:44:48.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I have to say that I come from Vim,""" start="00:44:51.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like a long time ago. But I come from Vim,""" start="00:44:57.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so I'm using Evil Mode.""" start="00:44:58.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And I maybe have this kind of a...""" start="00:45:00.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Yeah. So regarding Summoner.vm,""" start="00:45:05.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it's... I like it because it's common Lisp,""" start="00:45:10.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but it don't have some,""" start="00:45:13.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""this, I removed this. So I'm using another""" start="00:45:18.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""model line because the model line is not""" start="00:45:21.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""great. Everything else is a little bit weird""" start="00:45:24.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because you have frames similar to Emacs.""" start="00:45:28.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You have a frame. You have this window,""" start="00:45:33.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and then there's no nothing here.""" start="00:45:35.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah, I've used it before.""" start="00:45:37.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""That was definitely weird.""" start="00:45:39.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's also nice to be able to just...""" start="00:45:41.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Can't you put multiple windows?""" start="00:45:43.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Can't you duplicate windows?""" start="00:45:46.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Show the same window in 2 frames?""" start="00:45:48.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""NIGEL""" start="00:45:48.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: GANSZELA-WALSH Never tried that.""" start="00:45:51.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Never occurred to me that.""" start="00:45:54.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't know. Never tried that,""" start="00:45:57.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to be honest. Let me check.""" start="00:46:01.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""No idea. Item? I think so.""" start="00:46:07.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Because when you try to,""" start="00:46:10.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""at least not in an easy way.""" start="00:46:11.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""When you try to, so if I try to put a window""" start="00:46:13.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""here, let me move it so it,""" start="00:46:16.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and if I try to like, so it's,""" start="00:46:20.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""yeah, no other window.""" start="00:46:21.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: So can you open the, what is that,""" start="00:46:24.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""discord or your browser?""" start="00:46:25.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Could you open that in both your frames?""" start="00:46:26.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: I can I Side by side, but not the same""" start="00:46:34.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: I mean I do I can I can have I know""" start="00:46:37.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: can't your frames? 2 browsers you can do that""" start="00:46:38.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: browser I never occurred to me that,""" start="00:46:42.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: in DWM? You can't do that in XMLNet,""" start="00:46:46.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""at least I don't know what configuration""" start="00:46:48.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you'd have to do to get to be able to do that""" start="00:46:50.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""in XMONAD.""" start="00:46:51.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: wow. Interesting. Maybe you can.""" start="00:46:54.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I never tried. Maybe you can?""" start="00:46:57.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""No idea. The interesting thing that I never""" start="00:47:03.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""use is that floating windows.""" start="00:47:05.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Never use floating windows,""" start="00:47:09.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but normal windows. You know,""" start="00:47:13.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""not. And SoundWM does have a weird support""" start="00:47:17.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""for it. Now it works. But I don't like it.""" start="00:47:24.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""For me, it was a little bit rough,""" start="00:47:26.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the use of floating windows in SoundWM.""" start="00:47:29.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think they're way better now.""" start="00:47:32.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think, but yeah, I don't use it so...""" start="00:47:36.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But there is.""" start="00:47:40.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: You know, for me with the,""" start="00:47:43.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like, Emacs doing everything,""" start="00:47:45.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it's like, you got like Emacs,""" start="00:47:46.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you got shell, and then you got the gooey""" start="00:47:50.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Wild West. Yeah. Like,""" start="00:47:56.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""with Emacs, I know, I'll generally get,""" start="00:47:58.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""oh, this is going to be configured in?""" start="00:48:01.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's either gonna be shell script,""" start="00:48:04.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Python or Emacs. Oh wait,""" start="00:48:06.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""no, it's gonna be Emacs.""" start="00:48:07.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Variable's gonna be written in SecQ,""" start="00:48:09.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""period.""" start="00:48:10.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Well, I don't use too much scripting,""" start="00:48:16.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but I'd like to, for example,""" start="00:48:18.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I had to do a, so the automatic installer""" start="00:48:21.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""for, for Debian base, Debian stuff for Linux""" start="00:48:26.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""for, for LEM. I was thinking of doing in bash""" start="00:48:30.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and I say, I don't want to do it in Bash.""" start="00:48:32.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So I just did it in SVC and Commodisp,""" start="00:48:35.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which does have like a scripting feature.""" start="00:48:37.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You can put a script and it will create your""" start="00:48:40.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""own script.""" start="00:48:41.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: 1 of the main people behind Next,""" start="00:48:45.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""he did a talk on using Common Lisp as a""" start="00:48:50.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""replacement for a shell.""" start="00:48:51.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yes, it was... I know him.""" start="00:48:58.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I know that he exists.""" start="00:49:00.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Next, I think it's a main maintainer of Nix,""" start="00:49:04.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah, although his website's kind of,""" start="00:49:09.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think he took it down.""" start="00:49:10.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Ambrevar. Yeah, I think he,""" start="00:49:12.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""yeah, he took it down.""" start="00:49:14.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: So if you want to, you can look at it in Time""" start="00:49:17.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Machine.""" start="00:49:17.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, I do have that article in my bookmarks,""" start="00:49:23.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think, somewhere. I remember reading that.""" start="00:49:26.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So also, I would like to keep separated""" start="00:49:30.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""things in that way to have shell and then""" start="00:49:32.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Emacs or LEM. Like for Emacs I use Viter.""" start="00:49:37.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't like that it has different,""" start="00:49:40.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you know.""" start="00:49:41.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: On the same time though,""" start="00:49:44.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I also don't like my terminal not to be able""" start="00:49:46.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to click URLs and I like I like my terminal""" start="00:49:52.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to have history and you know to scroll""" start="00:49:54.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""position copy paste You can do some of that""" start="00:49:58.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""stuff, but you know how that stuff go on the""" start="00:50:00.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""killer ring I kind of view it as like an""" start="00:50:01.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""alternative to shell.""" start="00:50:02.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Fair enough, but I think when some for my""" start="00:50:06.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""terminal, I only use it for navigate,""" start="00:50:08.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""remove stuff, so basic stuff.""" start="00:50:11.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""When I have to like, I don't know,""" start="00:50:14.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""edit something, just open the...""" start="00:50:17.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I like to use completion and narrowing to""" start="00:50:22.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""find my files. I kind of wish I could do that""" start="00:50:24.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: on the shell or like if you use""" start="00:50:26.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: more D-Menu to do that.""" start="00:50:27.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""That would be, I'm sure,""" start="00:50:28.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""nicer.""" start="00:50:28.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: There's a lot of tools for terminals to do""" start="00:50:38.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that, right? But you have to configure all of""" start="00:50:39.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""them. Beam users are very aware of those""" start="00:50:41.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""tools. You know, having very good fuzzy""" start="00:50:46.980" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""finding of files and then all by the""" start="00:50:49.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""terminal. I do have a friend who is a user of""" start="00:50:53.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the Forbidden Editor, he's good,""" start="00:50:56.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that does have a lot of small,""" start="00:51:01.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like fuzzy finding, and so complete commands,""" start="00:51:09.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and call those images in the terminal,""" start="00:51:12.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""all sorts of crazy stuff.""" start="00:51:14.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""That I think are not overkill,""" start="00:51:16.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but I mean, if you want to use it,""" start="00:51:20.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""go ahead. So yeah. The thing is that,""" start="00:51:29.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So trickling back a little bit to LEM,""" start="00:51:32.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think an interesting thought that I have""" start="00:51:35.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""about LEM and I can do Emacs.""" start="00:51:37.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Not now, because LEM is a very small,""" start="00:51:40.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like literally people,""" start="00:51:43.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""at least developers and users,""" start="00:51:46.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I don't know, maybe 10 less.""" start="00:51:50.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But people may think, split the community,""" start="00:51:56.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""right? That's the main thing that should come""" start="00:51:58.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to my mind, split the community,""" start="00:51:59.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""maybe you, because that's true.""" start="00:52:01.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I mean, I'm not developing that much in Nui""" start="00:52:04.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""MacLisp because I'm developing them.""" start="00:52:06.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""That's not that I'm a force that you might""" start="00:52:12.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""think exists or anything,""" start="00:52:13.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but you know, you're splitting a very small""" start="00:52:17.220" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""community. Not that LEM wants to do that or""" start="00:52:21.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""anything, or will be able to in any way,""" start="00:52:24.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but you know what I mean.""" start="00:52:25.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I thought about that, And I think it's an""" start="00:52:32.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""interesting concern. But that concern also""" start="00:52:40.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""stops innovation in some way.""" start="00:52:42.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I think you can, if you look at the example""" start="00:52:46.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""of how many EMAX talks are related to""" start="00:52:50.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""knowledge management and not all and like for""" start="00:52:54.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""instance denote and Orgrim don't really work""" start="00:52:57.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""together all that well they split the""" start="00:53:01.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""community so to say I don't think they make""" start="00:53:03.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it weaker at all, though.""" start="00:53:04.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think you were saying competition is good,""" start="00:53:08.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but yeah, competition is good.""" start="00:53:10.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, I agree on that.""" start="00:53:12.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I want to put it in the...""" start="00:53:13.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But, you know, I'm doing the devil's advocate""" start="00:53:15.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: something, that's... The developer gates in""" start="00:53:18.252" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""this regard. Like""" start="00:53:18.308" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: in this regard. If someone wants to say if""" start="00:53:18.327" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""someone wants to like say something that""" start="00:53:19.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""maybe, you know, because some people still""" start="00:53:22.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""remember the Emacs versus X Emacs thing in""" start="00:53:30.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the past, you know, that the split of the and""" start="00:53:34.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""That was good in some way but also bad in""" start="00:53:38.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""others like the compatibility was a little""" start="00:53:39.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""bit of a hell You know at the end Emacs""" start="00:53:42.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""failed, no Emacs But at that time it wasn't""" start="00:53:46.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that clear and some people like it wasn't""" start="00:53:50.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""there. And I can understand that kind of a""" start="00:53:53.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""feeling.""" start="00:53:53.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Well sometimes the steps forward you end up""" start="00:53:58.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""going Like you're on a hill and you want to""" start="00:54:02.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: the way the path to get up to""" start="00:54:05.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: get to a higher hill, but that higher hill""" start="00:54:06.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""goes down and up. It doesn't mean that even""" start="00:54:10.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""if you know you're going down,""" start="00:54:12.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it doesn't mean that it was a mistake.""" start="00:54:13.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Okay, fair enough. And also another""" start="00:54:19.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""interesting thing that I want to envision in""" start="00:54:22.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the future, if I have time or someone wants""" start="00:54:25.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to help me with, is I want them to have""" start="00:54:28.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""different language for extension,""" start="00:54:30.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""different Lisp for extension,""" start="00:54:32.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""not only common Lisp, but Scheme closure.""" start="00:54:36.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And maybe not EmacLisp probably,""" start="00:54:39.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: that what Guile Emacs is trying to do?""" start="00:54:46.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: but yeah. And funny enough- Isn't Guile Emacs""" start="00:54:47.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""tried to add Guile support to,""" start="00:54:50.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but Guile is not scheme.""" start="00:54:52.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Well, it's kind of scheme,""" start="00:54:53.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but it's not all schemes,""" start="00:54:54.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is, you know, and it was just to""" start="00:54:58.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""replace EmacLisp with Gile.""" start="00:55:02.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You have 2 both. It was similar in that way,""" start="00:55:06.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but the thing is, Common Lisp does have a lot""" start="00:55:12.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""of interesting things.""" start="00:55:12.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So someone wrote a closure in Common Lisp.""" start="00:55:16.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Which is called Cloture.""" start="00:55:20.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Someone wrote, well it's on the way but it's""" start="00:55:29.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""getting there, a standard scheme in Common""" start="00:55:35.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Lisp. So to add support to LEM,""" start="00:55:39.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""will be as easy as import package,""" start="00:55:44.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and you have, And if that language,""" start="00:55:46.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which usually does, supports very well""" start="00:55:49.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""interaction between the host language and the""" start="00:55:51.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""language that tries to provide,""" start="00:55:52.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you will mostly automatically have new""" start="00:55:57.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""language for the editor.""" start="00:55:58.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I think the more interesting hanging fruit""" start="00:56:05.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""would be like using Next to scrape websites,""" start="00:56:09.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""download CSV bank statements,""" start="00:56:12.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""integrating with like password managers and""" start="00:56:15.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""or using... yeah you could still do with""" start="00:56:27.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: But isn't that more like next thing oh yeah""" start="00:56:30.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""yeah I""" start="00:56:31.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: common list though mean what's your your""" start="00:56:32.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""other options would be Selenium,""" start="00:56:34.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""JavaScript, Next already gives you the REPL""" start="00:56:41.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""for that. Or when you had that Ambryvar talk,""" start="00:56:47.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""when he, I don't know if you watched it,""" start="00:56:50.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but when you use a shell and a command takes""" start="00:56:52.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""takes a while It just automatically takes you""" start="00:56:56.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""back into your shell and says I'll just let""" start="00:56:58.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""this run in the background or being able to""" start="00:57:00.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""more easily run commands in parallel.""" start="00:57:02.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: But that's not like Nix stuff,""" start="00:57:13.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: The Ambrivar, the shell 1,""" start="00:57:18.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: right? Not like? When he did it,""" start="00:57:21.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""he. Because 1""" start="00:57:23.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: wasn't. of the things He did in that when he""" start="00:57:25.340" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""was using the repl in place of the shell is 1""" start="00:57:30.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""of the things in there was if,""" start="00:57:31.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""let's say you were compiling a program,""" start="00:57:33.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that takes a while. If it took longer than""" start="00:57:36.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like 3 seconds or something along those""" start="00:57:40.240" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""lines, it would kick you back into the shell""" start="00:57:42.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and say, oh, we're waiting for this program""" start="00:57:44.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh, interesting. And""" start="00:57:48.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: to run, to finish. then you could,""" start="00:57:48.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""and then it had back reference support.""" start="00:57:51.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So you could say, Oh, app search for this""" start="00:57:55.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""program. And then with the,""" start="00:57:58.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""with the shell, I, when I want to search,""" start="00:58:00.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'll then grep through that list to narrow it""" start="00:58:04.460" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""down even further, but I do a whole new""" start="00:58:06.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""search. It just says, oh,""" start="00:58:08.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""just grep through what I already searched.""" start="00:58:10.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Just grep through the results of the command""" start="00:58:14.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""that's 3 commands ago.""" start="00:58:15.940" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Interesting. So it""" start="00:58:17.980" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: runs instantly. Or look for my build errors""" start="00:58:23.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""in my compilation output,""" start="00:58:25.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: rather than trying to build it again grepping""" start="00:58:29.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""for the errors.""" start="00:58:30.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: I was checking, so where's that project?""" start="00:58:33.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I was looking for it. You know,""" start="00:58:36.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the... Yeah, I want to check the,""" start="00:58:44.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: There was a talk. I also had a webpage.""" start="00:58:48.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: you know... This red bull?""" start="00:58:55.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""No, this is not what I meant.""" start="00:58:58.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: What is it? What is it?""" start="00:59:34.174" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I cannot find the... I was trying to find""" start="00:59:47.664" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: the repo for... It's C-L-E-S-H,""" start="00:59:54.180" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""like a unit shell for interface with for""" start="00:59:59.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""common Lisp? Is that the thing?""" start="01:00:02.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: I don't know. I'm""" start="01:00:09.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: trying to find the link to his old,""" start="01:00:12.260" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""no longer website. Website.""" start="01:00:16.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Skip. Technical issues.""" start="01:00:21.500" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Maybe this 1.""" start="01:00:23.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I cannot find it.""" start="01:00:35.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I got it.""" start="01:00:37.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: Go to that link. Okay.""" start="01:00:51.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: There's also a FOSDM target associated with""" start="01:01:02.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it too.""" start="01:01:02.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh yeah, interesting. Clash and CH.""" start="01:01:07.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""CH. Oh, I was looking at the clesh.""" start="01:01:13.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Clish, so the, let's check for it.""" start="01:01:18.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""The other 1 is shell and camel.""" start="01:01:23.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""This 1.""" start="01:01:24.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: Interesting. Oops. Close Oops.""" start="01:01:37.505" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh, it's a GNU project.""" start="01:01:40.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Oh, interesting.""" start="01:01:44.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: The other thing that was interesting there is""" start="01:01:51.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you use those disk images,""" start="01:01:52.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""LISP images, to have some of your common LISP""" start="01:02:00.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""utilities or programming libraries that you""" start="01:02:05.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""utilize in tandem with your REPL.""" start="01:02:07.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So you can easily pull up a more featureful""" start="01:02:13.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""or a REPL that has more tools in it than by""" start="01:02:18.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""default.""" start="01:02:18.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Interesting. So yeah, that's,""" start="01:02:21.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""yeah, I mean, that will be,""" start="01:02:24.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it will be fairly, no,""" start="01:02:26.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""no, easy. Well, easy, but not,""" start="01:02:28.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But this can be integrated into LEM probably.""" start="01:02:33.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Very, you know, not that easy because you""" start="01:02:36.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""have to change the few things.""" start="01:02:38.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""But this can be, you know.""" start="01:02:43.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Well, as example, he just...""" start="01:02:47.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Well, 1 of the things that was in the talk,""" start="01:02:49.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""1 of the main ideas was,""" start="01:02:51.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""let's just, rather than trying to make the""" start="01:02:56.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""shell closer to a REPL,""" start="01:02:57.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""let's make a REPL closer to a shell,""" start="01:03:00.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""make it to where we can easily run Linux""" start="01:03:03.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""programs in it, and then use the rest of the""" start="01:03:07.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""REPL goodness, make it to where parentheses""" start="01:03:10.120" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""are easy to use, like paraedit,""" start="01:03:12.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And then all of a sudden you have a nicer""" start="01:03:20.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""shell. Not really shell,""" start="01:03:24.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but.""" start="01:03:24.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh, this is huge.""" start="01:03:30.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 6]: Hi, folks. Sorry for the interruption.""" start="01:03:33.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's Leo from the general track.""" start="01:03:35.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""We are about to go back live on the""" start="01:03:39.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""development track, so you can continue the""" start="01:03:41.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""discussion. You know, we are recording""" start="01:03:43.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""everything and you seem to be having a great""" start="01:03:45.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""amount of fun to issue the need for lunch,""" start="01:03:47.520" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""at least for the people in the US.""" start="01:03:49.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I just want to let you know,""" start="01:03:51.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""in 2 minutes' time, we will be moving back to""" start="01:03:53.680" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the rest of the talk for the afternoon,""" start="01:03:54.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but feel free to stay in a room and keep""" start="01:03:56.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""discussing. All right?""" start="01:03:57.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Thank you. All right.""" start="01:04:01.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 6]: It might be a little brutal in 2 minutes,""" start="01:04:03.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so if you have your watch synchronized at 7""" start="01:04:07.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""sharps, so in 2 minutes,""" start="01:04:09.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""it'll cut off.""" start="01:04:10.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Okay. Bye-bye. Bye. Oh my.""" start="01:04:19.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Yeah. Interesting stuff indeed.""" start="01:04:23.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: to listen to it after you're done with the""" start="01:04:29.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: I guess you have Have you""" start="01:04:32.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: comp. ever listened to that talk before?""" start="01:04:33.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""The 1 that's in that webpage,""" start="01:04:38.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the FOSDEM 1.""" start="01:04:39.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Which 1? Sorry? 0 yeah,""" start="01:04:40.840" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I in fact saw him live in the FOSDEM 2020.""" start="01:04:44.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: So I a little bit. 2020.""" start="01:04:50.053" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So we him""" start="01:04:50.166" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: talked with him a little bit The first time""" start="01:04:51.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""is here in well here in Europe here in""" start="01:04:55.760" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Brussels like 3 hours away or 2 hours away in""" start="01:05:01.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""plane from where I am.""" start="01:05:02.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: 1 of the things that's kind of interesting""" start="01:05:05.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""with, you have some of""" start="01:05:06.900" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: the people who come from Europe to the US and""" start="01:05:09.060" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""they're like, oh, I want to visit all the""" start="01:05:11.820" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""corners of the US in a couple of days.""" start="01:05:13.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And it's like, No, US is the size of Europe.""" start="01:05:17.920" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: The""" start="01:05:19.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: states are the size of their countries.""" start="01:05:21.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""You don't...""" start="01:05:23.140" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: I know. I know. It's very...""" start="01:05:27.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""It's huge. And it's like 6 hours different""" start="01:05:30.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""from coast to coast, something like that.""" start="01:05:32.280" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yeah, and that's driving as fast as you can""" start="01:05:38.000" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""on the freeway, on the best roads that you""" start="01:05:39.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""possibly can, not taking...""" start="01:05:41.160" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, that would be...""" start="01:05:45.700" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So the thing that I try to do also with LEM""" start="01:05:53.400" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""is to move my workflow from LEM to Emax,""" start="01:05:57.880" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""so for Emax to LEM, use it more.""" start="01:06:01.620" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""And I hope to, we still have a long way to go""" start="01:06:07.080" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""in terms of usability,""" start="01:06:08.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""in terms of other things,""" start="01:06:10.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because we need more power.""" start="01:06:12.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So This is also my attempt to do some""" start="01:06:18.420" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""publicity to the Blend project itself,""" start="01:06:20.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to need to add more users,""" start="01:06:23.100" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""to be willing to try and to fail trying,""" start="01:06:26.200" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""because we still have some rough edges.""" start="01:06:29.640" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""Yeah, just trying to do that,""" start="01:06:38.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""which is, and I apologize to the Emaclist""" start="01:06:41.720" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""community, which I'm part of,""" start="01:06:43.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but I don't want to like,""" start="01:06:44.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""disencourage the use of getting Emacs anyway.""" start="01:06:47.020" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I think both are awesome.""" start="01:06:48.960" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I want to anyone to get a real impression.""" start="01:06:51.300" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: What do""" start="01:06:57.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: you think? PlasmaStrike,""" start="01:06:57.740" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""you have a very powerful name.""" start="01:07:01.560" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: I don't think that's something to worry""" start="01:07:07.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""about. I don't personally,""" start="01:07:09.660" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""but I'm going to watch the EMMS talk.""" start="01:07:15.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""That's something that I don't really use too""" start="01:07:17.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""much on my Emacs config.""" start="01:07:20.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So I'm going to let you go.""" start="01:07:22.600" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: OK, yeah, I'm going to go.""" start="01:07:24.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'm going to maybe watch the garbage""" start="01:07:26.320" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""collector talk, which is interesting.""" start="01:07:27.800" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So thank you all very much.""" start="01:07:32.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'm gonna go. Thanks for the questions and""" start="01:07:35.860" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""all that. I think I hope I answered correctly""" start="01:07:40.811" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: is part of the value of being part of this is""" start="01:07:47.040" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: all of them. Yeah, I figure this that's a way""" start="01:07:50.580" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 4]: conversations. So of saying thank you for""" start="01:07:52.540" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""people sharing interesting talks.""" start="01:07:54.480" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 2]: Indeed. Thank you all very much for going to""" start="01:07:57.780" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""the Emacs conf and to watch me.""" start="01:08:02.380" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""So thank you all very much.""" start="01:08:06.440" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""I'm going to go do that.""" start="01:08:09.360" video="qanda-emacsen" id="subtitle"]]
+[[!template text="""[Speaker 0]: See you.""" start="01:08:10.640" video="qanda-emacsen" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emacsen%3A%20The%20Emacsen%20family%2C%20the%20design%20of%20an%20Emacs%20and%20the%20importance%20of%20Lisp)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/emacsen-before.md b/2023/info/emacsen-before.md
new file mode 100644
index 00000000..151dac9d
--- /dev/null
+++ b/2023/info/emacsen-before.md
@@ -0,0 +1,31 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 19-min talk; Q&A: BigBlueButton conference room
+Status: TO_INDEX_QA
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="emacsen-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emacsen-mainVideo" data="""
+00:00.000 Introduction
+00:17.000 Why Lisp matters
+01:26.640 Why Emacs Lisp was chosen
+02:54.841 Other "Emacsen"
+03:38.581 Why not Common Lisp?
+06:39.120 Common Lisp is still not dead or is always dead
+08:30.080 Lem is a nice Emacsen implementation
+08:58.260 Why not just use GNU Emacs?
+10:31.080 Why Lem
+14:03.080 Similarities and differences
+15:49.600 Demo
+
+"""]]<div></div>Duration: 18:28 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/qgJ84RLV2FZYyeSusDskwU">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="emacsen-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="emacsen-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus"></audio></div><div></div>Duration: 1:08:14 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus">Download --answers.opus (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm">Download --answers.webm (253MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/emacsen-nav.md b/2023/info/emacsen-nav.md
new file mode 100644
index 00000000..976d9935
--- /dev/null
+++ b/2023/info/emacsen-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a>
+Next by track: <a href="/2023/talks/gc">emacs-gc-stats: Does garbage collection actually slow down Emacs?</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/emms-after.md b/2023/info/emms-after.md
new file mode 100644
index 00000000..a9b97368
--- /dev/null
+++ b/2023/info/emms-after.md
@@ -0,0 +1,1371 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="emms-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""The Sound of Emacs, Emms, The Emacs Multimedia System.""" start="00:00:00.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Hi, I'm Yoni Rabkin and I'll be talking about Emms;""" start="00:00:05.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the Emacs Multimedia System.""" start="00:00:09.160" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""What is Emms?""" start="00:00:11.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms displays and plays media from within Emacs""" start="00:00:14.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""using a variety of external players""" start="00:00:18.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and from different media sources.""" start="00:00:20.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms can run as a minimalistic player""" start="00:00:23.540" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which is controlled with no more than""" start="00:00:26.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""a handful of simple M-x commands,""" start="00:00:28.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or as a fully-fledged interactive media browser and player.""" start="00:00:31.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms can display album art, play streaming audio,""" start="00:00:36.060" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""tag music files, search for lyrics,""" start="00:00:40.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""provide MPD connectivity, control the volume,""" start="00:00:43.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and more. Much more.""" start="00:00:46.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The Emms project acts like Emacs in microcosm.""" start="00:00:49.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""It slowly but surely grows bigger""" start="00:00:53.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and gets ever more features.""" start="00:00:56.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Perhaps Emms will one day even have a text editor.""" start="00:00:58.480" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""The structure of this talk""" start="00:01:03.320" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""The structure of this talk:""" start="00:01:03.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""We'll start with an introduction to Emms.""" start="00:01:05.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This is the practical part.""" start="00:01:08.160" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Then, a bit about how Emms works. That's the technical part.""" start="00:01:10.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Finally, how we work. All about Emms development.""" start="00:01:15.880" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Introduction to Emms: The practical part""" start="00:01:21.320" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Introduction to Emms: The practical part:""" start="00:01:21.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I want this talk to be of immediate use to people,""" start="00:01:25.021" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""so I'm going to present a quick TL;DR of the Emms manual""" start="00:01:28.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""concerning installation and use.""" start="00:01:33.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""By the end of this part you should be able to""" start="00:01:36.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""install, configure, and use Emms in a variety of ways.""" start="00:01:38.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Where can I get Emms?""" start="00:01:45.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms is distributed primarily via GNU ELPA.""" start="00:01:48.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""So it's really only a M-x list-packages away at any moment.""" start="00:01:54.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""There's also a website hosted at gnu.org.""" start="00:02:02.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Among other things on the website, you'll find""" start="00:02:07.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""a copy of the friendly, robust, and up-to-date user manual.""" start="00:02:11.020" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Installing Emms has become progressively easier over time""" start="00:02:21.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and will continue to get easier.""" start="00:02:25.920" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""In the bad old days, it required downloading a tarball""" start="00:02:28.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and compiling a C language shim""" start="00:02:32.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to enable reading metadata from media files.""" start="00:02:35.060" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""But those days are long gone, and installing Emms is now""" start="00:02:38.920" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""as easy as invoking M-x list-packages,""" start="00:02:43.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""installing the Emms package, and placing as few as""" start="00:02:47.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""2 or 3 lines of configuration in your Emacs initialization.""" start="00:02:51.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""So after the package is installed via ELPA,""" start="00:02:57.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""you can add these few lines.""" start="00:03:02.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""`emms-all` will make available all of the stable features""" start="00:03:08.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which are shipped with Emms.""" start="00:03:12.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The `emms-player-list` variable is a list of players""" start="00:03:15.740" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""like MPV, MPlayer, VLC, etc.""" start="00:03:20.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms will call and control these external players""" start="00:03:25.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to play your media.""" start="00:03:29.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The variable `emms-info-functions` is a list of ways""" start="00:03:32.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""for Emms to read the metadata in your media files""" start="00:03:36.660" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""so that Emms can display song title, artist name,""" start="00:03:40.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""year of production, etc.""" start="00:03:45.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The `emms-info-native` feature in the setup example""" start="00:03:49.480" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is the built-in metadata reader""" start="00:03:55.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""written entirely in Emacs Lisp.""" start="00:03:58.160" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""But there are also other backends""" start="00:04:01.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which can call external programs for info""" start="00:04:04.240" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""such as TinyTag, the TagLib library, exiftool, and so on.""" start="00:04:07.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""You can then old-school restart your Emacs""" start="00:04:14.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or simply evaluate the above couple of lines to get going.""" start="00:04:17.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Now that we have Emms installed and configured,""" start="00:04:22.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""we should load some media for player.""" start="00:04:26.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""There are multiple ways to load media into Emms for playing.""" start="00:04:29.240" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""They can be directories with local files,""" start="00:04:32.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""synchronized from a remote instance of""" start="00:04:36.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""a music player daemon, PLS or M3U playlists,""" start="00:04:38.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""a list of URLs for streaming,""" start="00:04:44.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or even Emms' own native playlist format""" start="00:04:47.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which is unsurprisingly a just serialized Emacs Lisp.""" start="00:04:51.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""No matter how you add tracks to Emms,""" start="00:04:57.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""you'll end up with a playlist.""" start="00:05:00.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A fundamental strength of Emms is that each playlist""" start="00:05:03.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is a regular Emacs buffer and the track listing therein""" start="00:05:08.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is nothing more than text lines with property overlays.""" start="00:05:13.480" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This means that you can navigate, search, copy,""" start="00:05:17.860" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and edit an Emms playlist buffer""" start="00:05:21.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""just as you would any Emacs buffer.""" start="00:05:24.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""If you want to reorganize the tracks in the playlist,""" start="00:05:28.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""then you can simply kill yank the tracks""" start="00:05:31.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""just as you would any buffer with lines of text,""" start="00:05:33.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and the same can be done between multiple playlist buffers.""" start="00:05:36.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""One of the most straightforward ways to add media""" start="00:05:42.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is to invoke a command like `M-x emms-add-directory-tree`.""" start="00:05:46.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""You can point it to the top of a set of directories""" start="00:05:51.940" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with playable files for Emms to traverse.""" start="00:05:55.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Another rather convenient method is to mark files in Dired""" start="00:06:00.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and to invoke `emms-add-dired`.""" start="00:06:05.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I definitely use this one a lot.""" start="00:06:09.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The Emms playlist mode binds""" start="00:06:11.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""a number of useful keys and commands.""" start="00:06:16.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""It's highly recommended that you either""" start="00:06:19.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""read the friendly manual""" start="00:06:23.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or hit &quot;C-h m&quot; in a playlist buffer to discover them.""" start="00:06:25.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Now we have a playlist buffer with a number of tracks,""" start="00:06:32.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""so the next step is going to be playback.""" start="00:06:35.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms can be used as a minimalistic player""" start="00:06:40.820" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with nothing more than a handful of commands.""" start="00:06:44.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Once there is a current Emms playlist,""" start="00:06:48.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""invoking emms-start will begin playing the current track.""" start="00:06:51.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Now of course in a new playlist""" start="00:06:57.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""that would be the first track.""" start="00:07:00.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Now emms-next, emms-pause, and emms-stop""" start="00:07:02.580" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""do exactly what you think they do.""" start="00:07:07.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""To visit the current playlist,""" start="00:07:11.260" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""you can invoke M-x emms-playlist-mode-go,""" start="00:07:13.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which is a long command I personally bind to &quot;M-f12&quot;.""" start="00:07:17.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""You'll be taken to the current playlist buffer.""" start="00:07:22.700" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""While you can have multiple playlist buffers,""" start="00:07:25.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""only one is current for the purposes of playback commands.""" start="00:07:29.240" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The playlist buffer has keys bound""" start="00:07:35.780" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to control the media being played.""" start="00:07:38.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""`emms-seek-forward` and `emms-seek-backwards` allow you""" start="00:07:39.920" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to scrub along the media being played.""" start="00:07:44.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Which commands are available is a function of""" start="00:07:49.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the player backend being employed.""" start="00:07:51.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The simplest of players may have nothing more""" start="00:07:54.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""than the ability to play, stop, and seek,""" start="00:07:56.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""but others may implement a plethora of commands.""" start="00:07:59.560" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""The modeline""" start="00:08:04.240" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""The Modeline: Emms will by default display""" start="00:08:04.240" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the name of the currently playing track in the mode line""" start="00:08:08.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with information such as playing time.""" start="00:08:11.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The mode line format is controlled""" start="00:08:15.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""via the `emms-mode-line-format` variable""" start="00:08:15.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and the `emms-mode-line-playlist-current` function.""" start="00:08:20.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Metadata and the cache.""" start="00:08:27.140" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""It would be sufficient for emms to simply list""" start="00:08:31.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the file names or urls of each piece of media,""" start="00:08:34.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""but unless you name your music and media""" start="00:08:38.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with obsessive consistency and precision,""" start="00:08:41.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""not that there is anything wrong with that""" start="00:08:43.940" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""then the resulting list will be a bit of an eyesore.""" start="00:08:46.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Moreover, there are a lot of other useful metadata""" start="00:08:50.860" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""in the media files, including cool stuff like album art.""" start="00:08:54.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""So instead of just files, Emms will try""" start="00:08:58.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to extract metadata from each track""" start="00:09:01.920" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and display a nicely-formatted track listing.""" start="00:09:04.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The format can be controlled by customizing""" start="00:09:08.220" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the variable `emms-track-description-function`.""" start="00:09:10.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms uses so-called info methods to extract""" start="00:09:15.460" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the metadata from each file.""" start="00:09:19.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""`emms-info-native`, which I mentioned before,""" start="00:09:22.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is the built-in metadata reader written in Emacs Lisp.""" start="00:09:25.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""It provides support for Ogg Vorbis, Ogg Opus, FLAC, and MP3.""" start="00:09:30.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""However, if you have media in other formats,""" start="00:09:37.660" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""you can also add info methods""" start="00:09:40.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to the `emms-info-functions` list,""" start="00:09:42.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which call external programs such as exiftool,""" start="00:09:45.240" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the LibTag library, tiny-tag, etc. to read file metadata.""" start="00:09:48.700" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Since reading metadata takes time""" start="00:09:55.420" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and that metadata doesn't change very often,""" start="00:09:58.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms builds a cache as it extracts""" start="00:10:01.340" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the information from each file.""" start="00:10:04.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The first time loading of thousands of tracks""" start="00:10:06.860" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""into the emms cache may take a while,""" start="00:10:09.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""but as is the nature of caching, subsequent loads""" start="00:10:13.260" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""will be nearly instantaneous.""" start="00:10:17.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""To ease loading huge media collections,""" start="00:10:20.060" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""emms also can populate the cache asynchronously,""" start="00:10:22.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""so that your emacs isn't locked up in the interim.""" start="00:10:26.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Let's talk about streams and URLs.""" start="00:10:30.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Not all playlist entries need to be associated with files.""" start="00:10:33.780" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""It's possible to add streaming playlists""" start="00:10:37.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and URLs to any playlist.""" start="00:10:39.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms also comes with a built-in eclectic list""" start="00:10:42.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""of streaming audio stations to get you started.""" start="00:10:46.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Any playlist entry can be a URL,""" start="00:10:50.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and that URL will be passed on to the media player backend,""" start="00:10:52.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which can play it, if any.""" start="00:10:56.720" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Meta-playlist mode""" start="00:11:01.200" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Meta-playlist mode:""" start="00:11:01.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms also has meta-playlist mode""" start="00:11:03.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to help manage multiple playlists.""" start="00:11:08.300" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""When you invoke meta-playlist mode,""" start="00:11:11.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""you will see a listing of all of the current Emms playlists,""" start="00:11:13.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and this mode binds a handful of useful keybindings""" start="00:11:16.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to help manage those playlists.""" start="00:11:22.000" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""The browser""" start="00:11:29.860" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""The Browser:""" start="00:11:29.860" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Music doesn't always lend itself to being viewed""" start="00:11:31.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""as a series of discrete files.""" start="00:11:35.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""While there may be a good taxonomy of music""" start="00:11:38.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""that can be reflected using directories and filenames,""" start="00:11:41.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""there are other aspects which cannot.""" start="00:11:45.460" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This is especially true when you consider that""" start="00:11:49.100" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""unlike many computer file taxonomies,""" start="00:11:51.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""music files may contain""" start="00:11:55.300" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""a lot of self-descriptive information""" start="00:11:56.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""in the form of metadata,""" start="00:11:58.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""such as the year a work was published, the composer,""" start="00:12:00.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the performing artist, etc.""" start="00:12:04.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Therefore, it makes sense for Emms to enable""" start="00:12:07.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""a different view into a media collection""" start="00:12:11.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which is based on the cached metadata.""" start="00:12:13.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The browser interface binds a host of keys""" start="00:12:17.060" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to help navigate the tree structure""" start="00:12:19.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""of the metadata information.""" start="00:12:22.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Since browser display""" start="00:12:24.540" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is not predicated upon directory structure,""" start="00:12:25.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""you can invoke functions such as `emms-browse-by-album`,""" start="00:12:28.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or `emms-browse-by-artist`, etc.""" start="00:12:32.940" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to view the collection in different ways.""" start="00:12:35.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms can do a lot more,""" start="00:12:42.180" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""but covering it all would take too much time.""" start="00:12:43.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I do recommend opening the fine Emms manual""" start="00:12:47.020" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and getting to know some additional features""" start="00:12:50.240" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""such as sorting tracks in playlists,""" start="00:12:52.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""sorting and filtering in the browser,""" start="00:12:55.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""editing track information,""" start="00:12:57.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""deriving a new playlist from an existing playlist,""" start="00:12:59.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the music player daemon, lyrics display, volume control,""" start="00:13:01.920" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""bookmarks, GNU FM, and Dbus/Mpris support.""" start="00:13:07.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I hope this was a useful introduction to Emms.""" start="00:13:13.360" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""How Emms works: The technical part""" start="00:13:19.920" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""How Emms Works: The technical part:""" start="00:13:19.920" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This part is an overview of how Emms works.""" start="00:13:23.220" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""By the end of this, you should be familiar enough""" start="00:13:26.820" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with Emms internals to hack on it. Hint hint.""" start="00:13:29.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A short history of Emms""" start="00:13:34.740" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms is 20 years old as of the time of writing.""" start="00:13:37.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Old enough to drink in many countries.""" start="00:13:42.940" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This means it was developed back in 2003""" start="00:13:45.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""for emacs 21.2 or thereabouts.""" start="00:13:48.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""As developers, we don't go around looking to""" start="00:13:53.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""replace code just because it's old.""" start="00:13:56.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""On the other hand, some parts were inadequate""" start="00:13:58.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or just didn't age gracefully.""" start="00:14:01.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""And we have been partially or completely rewriting those.""" start="00:14:04.920" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I became the maintainer of Emms about a decade ago,""" start="00:14:10.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""but I didn't start the project.""" start="00:14:13.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Jorgen Schäfer started the project.""" start="00:14:16.100" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I reached out to Jorgen""" start="00:14:21.020" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and he kindly shared some of his recollections.""" start="00:14:22.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Jorgen states that Emms was born back""" start="00:14:25.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""when the music format wars raged.""" start="00:14:28.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""MP3 was the standard, but overshadowed with patent issues.""" start="00:14:31.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""In fact, Technicolor and Fraunhofer IIS""" start="00:14:38.700" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""only stopped licensing their patents for MP3""" start="00:14:42.480" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""as recently as April of 2017.""" start="00:14:45.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Jorgen said that, and I quote,""" start="00:14:49.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""&quot;I needed a tool that was player agnostic""" start="00:14:53.540" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and that could deal with a large collection of music files.""" start="00:14:56.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""And I did not want any of the GUI music players""" start="00:14:59.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""that existed back then.""" start="00:15:02.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Primarily, actually, because I did not want""" start="00:15:04.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to be switching windows to skip to the next song.""" start="00:15:07.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""If I remember correctly,""" start="00:15:11.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I had just a shell script before that.""" start="00:15:12.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""But I figured I lived in Emacs, so why not write a tool""" start="00:15:16.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""that I can control my music from Emacs""" start="00:15:20.160" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""without ever having to leave Emacs?&quot; Unquote.""" start="00:15:23.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""We can see that Jorgen's motivations were of the best kind,""" start="00:15:27.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to stay in Emacs.""" start="00:15:32.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms, an architecture of sensible abstractions.""" start="00:15:35.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms can be divided into a number of parts.""" start="00:15:40.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The core, tracks, playlists, sources, players,""" start="00:15:44.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""info, cache, and ancillary.""" start="00:15:48.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Now David J. Wheeler once said""" start="00:15:51.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""that all problems in computer science""" start="00:15:53.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""can be solved by another level of indirection,""" start="00:15:56.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""except of course for the problem""" start="00:15:59.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""of too many layers of indirection.""" start="00:16:01.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms core has survived this long""" start="00:16:04.420" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""because it makes sensible and flexible coding abstractions.""" start="00:16:07.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Keep this in mind as we explore the implementation.""" start="00:16:11.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This following part of the talk will also be invaluable""" start="00:16:15.500" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""if you want to hack on Emacs.""" start="00:16:18.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Another hint.""" start="00:16:21.560" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""The Emms core""" start="00:16:23.820" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""The Emms core.""" start="00:16:23.820" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The core defines tracks, playlists,""" start="00:16:25.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""a way to start and stop playback,""" start="00:16:29.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""as well as ways to proceed to the next track.""" start="00:16:31.760" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Tracks""" start="00:16:36.440" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Tracks:""" start="00:16:36.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms tracks consist of a list whose CAR is the symbol track,""" start="00:16:38.460" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and CADR is an alist starting with""" start="00:16:44.780" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the association of `type'.""" start="00:16:47.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Type can be something like file, streamlist, URL, etc.""" start="00:16:50.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A track of classical music from Bach's Art of Fugue""" start="00:16:56.740" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""may look something like this.""" start="00:17:00.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""While a track may contain many associations,""" start="00:17:04.380" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the number of associations remains a small constant""" start="00:17:07.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""from the perspective of computational steps required""" start="00:17:11.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to find any particular association.""" start="00:17:14.200" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Playlist""" start="00:17:18.460" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Playlist:""" start="00:17:18.460" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""An Emms playlist consists of an Emacs buffer""" start="00:17:20.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with a buffer-local non-nil variable,""" start="00:17:23.480" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""`emms-playlist-buffer-p`.""" start="00:17:26.460" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The buffer can contain anything, any amount or type of text,""" start="00:17:29.820" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or anything else.""" start="00:17:33.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms tracks are stored in text properties within the buffer,""" start="00:17:35.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with the unimaginatively named text property `emms-track`.""" start="00:17:40.500" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""For Emms, to go to the next track consists of""" start="00:17:46.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""nothing more than looking for the next text property change""" start="00:17:49.240" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""containing `emms-track`, wherever that is.""" start="00:17:52.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""That means that there is a healthy decoupling between""" start="00:17:57.180" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the visual representation of a playlist""" start="00:18:00.540" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and its contents as far as Emms is concerned.""" start="00:18:03.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This decoupling allows Emms playlist buffers""" start="00:18:08.260" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to look like anything as long as that anything consists of""" start="00:18:11.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""one or more `emms-track` text properties.""" start="00:18:15.320" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Sources""" start="00:18:22.080" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Sources:""" start="00:18:22.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A source is how you tell Emms:""" start="00:18:23.580" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""&quot;Go and get those things and turn them into tracks.&quot;""" start="00:18:25.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""More specifically, an Emms source is a function called in""" start="00:18:29.780" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""a playlist buffer in order to add tracks.""" start="00:18:34.480" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""And even more specifically, a source is really""" start="00:18:37.260" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""a family of related functions""" start="00:18:40.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""defined by the macro `define-emms-source`.""" start="00:18:42.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A straightforward example""" start="00:18:47.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is the function `emms-add-directory`,""" start="00:18:49.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which adds an entire directory of files""" start="00:18:52.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to the current playlist.""" start="00:18:55.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""It accepts, or interactively queries for, a directory""" start="00:18:57.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and iterates over each file in that directory,""" start="00:19:02.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""adding them as tracks to the playlist buffer as it goes.""" start="00:19:06.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms comes with sources for files, directories, URLs,""" start="00:19:10.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""playlists of various formats,""" start="00:19:15.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""files from dired mode, and etc.""" start="00:19:17.320" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Players""" start="00:19:22.160" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Players:""" start="00:19:22.160" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""An Emms player is, at its simplest, a data structure""" start="00:19:24.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with three functions.""" start="00:19:28.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""One to start playing, one to stop,""" start="00:19:30.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and one which returns true if the player knows""" start="00:19:34.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""how to play a given track.""" start="00:19:38.180" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""However, if your player also knows how to pause, resume,""" start="00:19:41.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""seek, etc, then additional functions can be added""" start="00:19:44.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to the player data structure.""" start="00:19:48.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This is abstract enough to be able to, for example,""" start="00:19:51.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""define a simple player for images with the help of""" start="00:19:55.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the `define-emms-simple-player` macro.""" start="00:19:58.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The above will define a player called `emms-player-display`,""" start="00:20:04.580" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which would call ImageMagick's `display` command""" start="00:20:09.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""on each file in our playlist""" start="00:20:12.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with the image file extension we listed.""" start="00:20:15.640" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Info""" start="00:20:20.520" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Info:""" start="00:20:20.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""As previously described, Emms comes with info methods,""" start="00:20:23.060" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which are functions to add""" start="00:20:28.020" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""descriptive information to tracks.""" start="00:20:29.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms is set up so that""" start="00:20:32.340" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the hook `emms-track-initialize-functions` is called""" start="00:20:34.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""when a track is created, and that ends up calling""" start="00:20:37.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the info methods listed in the `emms-info-functions` list.""" start="00:20:41.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""These will modify the track data structure to add metadata.""" start="00:20:46.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""One of the coolest recent features of Emms""" start="00:20:51.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is `emms-info-native`, written by Petteri Hintsanen;""" start="00:20:54.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""again, sorry for the pronunciation.""" start="00:20:58.700" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""`emms-info-native` is a purely Emacs Lisp implementation""" start="00:21:01.326" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which reads Ogg Vorbis, Ogg Opus, FLAC, and MP3 files""" start="00:21:06.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and parses out the metadata.""" start="00:21:11.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This is in comparison with other info readers""" start="00:21:14.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which Emms supports, which all involve calling out""" start="00:21:17.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to external processes and parsing the values returned.""" start="00:21:20.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""`emms-info-native` works by unpacking and examining""" start="00:21:25.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the binary data in the media file headers""" start="00:21:29.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and parsing the data layout specifications.""" start="00:21:32.040" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""The cache""" start="00:21:36.660" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""The Cache:""" start="00:21:36.660" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The Emms cache is a mapping between a full path name""" start="00:21:38.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and its associated information.""" start="00:21:43.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Once information is extracted from a file""" start="00:21:45.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""using an info method, that information is then""" start="00:21:48.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""associated with that file in the cache.""" start="00:21:50.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""One thing to bear in mind is that the caching system""" start="00:21:53.980" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""was originally written back""" start="00:21:57.160" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""when slow spinning disks were common.""" start="00:21:58.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A 32GB SSD drive cost close to $700 in 2006,""" start="00:22:00.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which is the equivalent of about $1,000""" start="00:22:07.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""at the time of writing.""" start="00:22:10.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""But despite the speed of modern drives,""" start="00:22:12.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the caching system is still worth using""" start="00:22:15.260" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""for larger music collections.""" start="00:22:17.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The caching system is also a prerequisite""" start="00:22:19.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""for being able to use the Emms browser.""" start="00:22:22.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The cache implementation is relatively naive.""" start="00:22:26.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""For instance, moving a file will invalidate""" start="00:22:30.380" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""that cache entry for that file""" start="00:22:33.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and will require a refresh.""" start="00:22:35.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""However, relatively little work has been done""" start="00:22:37.580" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to the cache implementation over the years""" start="00:22:40.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""since it has proven to be good enough""" start="00:22:42.780" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""for the majority of situations.""" start="00:22:45.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Which is to say, nobody complained.""" start="00:22:47.060" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Healthy back and forth: mpv, mpd, and GNU.FM""" start="00:22:51.620" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Healthy back and forth. MPV, MPD, GNU.FM""" start="00:22:51.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Process communication with a simple media player""" start="00:22:56.240" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""can be as straightforward""" start="00:23:00.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""as starting an asynchronous process""" start="00:23:01.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and waiting for that process to complete""" start="00:23:03.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""in order to move to the next track.""" start="00:23:05.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This is how the example above""" start="00:23:08.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with ImageMagick's display binary worked.""" start="00:23:10.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""However, Emms also handles asynchronous""" start="00:23:13.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""two-way communication with processes.""" start="00:23:17.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A simple example of this would be sending strings""" start="00:23:20.300" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to a running process such as the pause command to VLC.""" start="00:23:23.960" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""MPV""" start="00:23:31.560" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""MPV:""" start="00:23:31.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""MPV is a popular media player forked""" start="00:23:33.380" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""in a roundabout way from mplayer.""" start="00:23:37.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""One of its most notable features is""" start="00:23:39.900" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""support for a robust client API.""" start="00:23:42.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Mike Kazantsev has been working since 2018""" start="00:23:46.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to develop the excellent `emms-player-mpv.el'.""" start="00:23:52.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""It can communicate with a long running MPV process""" start="00:23:58.350" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""via Unix sockets or IP sockets.""" start="00:24:02.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This allows for MPV to do things""" start="00:24:07.180" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""like update ICY metadata for streaming audio.""" start="00:24:11.170" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""So that, for example, when a song changes""" start="00:24:14.890" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""while you're listening to a streaming audio via Emms,""" start="00:24:17.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the song title displayed in the mode line""" start="00:24:22.050" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and track listing can update as well.""" start="00:24:24.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This means that deep inside the code""" start="00:24:28.330" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""there is an Emacs `make-network-process` call.""" start="00:24:30.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The fact that Mike has put this together""" start="00:24:35.630" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""in fewer than 1,000 lines of legible Emacs Lisp""" start="00:24:37.920" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is a testament to some serious coding ability.""" start="00:24:42.640" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""MPD""" start="00:24:47.470" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""MPD:""" start="00:24:47.470" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Similar to MPV but potentially""" start="00:24:49.610" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""on a completely different machine""" start="00:24:52.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is Emms support for the Music Player Daemon.""" start="00:24:54.120" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Music Player Daemon or MPD is a media player""" start="00:24:58.460" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with an explicit client-server design""" start="00:25:01.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and communicates with Emms via a network process.""" start="00:25:03.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Unfortunately, MPD support has never been all that great.""" start="00:25:09.950" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""But this isn't the emms developers fault!""" start="00:25:16.090" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Because unlike every other media player""" start="00:25:20.470" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""that Emms interfaces with MPD is designed around""" start="00:25:25.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""its own internal playlist database.""" start="00:25:29.730" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This is a surprising design decision""" start="00:25:31.930" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""on the MPD developers' part""" start="00:25:35.270" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""since it goes against the client-server mindset.""" start="00:25:37.650" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A consequence is that we end up having to try and coordinate""" start="00:25:41.750" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and harmonize the MPD playlist with the Emms playlist.""" start="00:25:45.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I can foresee writing a completely new MPD mode for Emms""" start="00:25:51.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which is designed to be a true pure MPD client.""" start="00:25:56.690" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Unless of course someone volunteers to beat me to it.""" start="00:26:01.510" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Hint hint.""" start="00:26:05.340" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""GNU FM and Libre FM""" start="00:26:07.440" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""GNU FM and Libre FM:""" start="00:26:07.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Libre FM is a music community which allows you""" start="00:26:10.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to share your listening habits with other users of the site.""" start="00:26:13.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A kind of online listening party.""" start="00:26:17.450" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""In the case of `emms-librefm-scrobber.el`""" start="00:26:21.270" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""we use Emacs' `url-retrieve` function""" start="00:26:25.650" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to asynchronously send to a URL""" start="00:26:28.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and then fire a callback function to process the response.""" start="00:26:32.450" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This represents numerous challenges""" start="00:26:40.050" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to implement within Emacs.""" start="00:26:42.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The primary issue being that Emacs itself""" start="00:26:45.090" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is pretty weak at doing anything""" start="00:26:47.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""truly and really asynchronously.""" start="00:26:50.100" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I can say with confident sarcasm""" start="00:26:54.220" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and with tongue firmly planted in cheek""" start="00:26:56.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""that it is almost as if the original designers""" start="00:26:59.530" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""of Emacs didn't foresee their text editor""" start="00:27:02.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""needing to play music""" start="00:27:05.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""while interacting with a remote network server.""" start="00:27:07.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""How myopic!""" start="00:27:09.820" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""How we work: Emms development""" start="00:27:12.560" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""How we work: Emms development:""" start="00:27:12.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This part is an overview of how Emms is developed.""" start="00:27:15.700" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""By the end of this part you should be able to understand""" start="00:27:19.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""how we hacked this project, and how you can too.""" start="00:27:23.900" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Where it's at.""" start="00:27:28.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""How to find our forge.""" start="00:27:29.950" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms has been hosted at the FSF's forge, Savannah,""" start="00:27:32.370" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""since around 2003.""" start="00:27:36.500" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms is distributed via GNU ELPA and integrated into Emacs.""" start="00:27:39.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Before ELPA it was distributed as a tarball""" start="00:27:46.230" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""via ftp.gnu.org but that stopped back in 2020.""" start="00:27:49.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I was initially resistant to ELPA but around the time""" start="00:27:55.140" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""when the thousandth person asked me why Emms isn't on ELPA,""" start="00:27:58.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I realized that it had to happen.""" start="00:28:03.850" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms can also be found in other places""" start="00:28:07.210" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""such as Melpa or GitHub but we, the developers of Emms,""" start="00:28:10.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""have nothing to do with that""" start="00:28:16.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and we don't monitor those channels.""" start="00:28:18.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""If you want the source straight from, well, the source,""" start="00:28:21.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""then go to the Savannah Git repository.""" start="00:28:26.300" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Look who's talking: Where development discussion happens.""" start="00:28:30.370" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""If you want to talk to us, discussions all happen""" start="00:28:34.990" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""on emms-help@gnu.org.""" start="00:28:38.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""We used to use emms-patches@gnu.org""" start="00:28:41.430" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""but didn't feel like the volume of incoming patches""" start="00:28:45.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""justified a separate mailing list.""" start="00:28:48.280" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""The Rime Of The Ancient Maintainer""" start="00:28:52.590" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""The Rime Of The Ancient Maintainer:""" start="00:28:52.590" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""There are a number of activities""" start="00:28:55.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""particular to being a maintainer.""" start="00:28:57.480" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""These are all part of a project's lifecycle.""" start="00:29:00.100" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Let's review some of them.""" start="00:29:03.390" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""The life and times of an Emms patch""" start="00:29:06.080" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""The life and times of an Emms patch:""" start="00:29:06.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A maintainer needs to be able to accept, critique,""" start="00:29:10.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and integrate patches from contributors and developers.""" start="00:29:13.240" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This means, among other things, that the maintainer""" start="00:29:17.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""needs to keep on top of copyright issues.""" start="00:29:20.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Before being able to add Emms to GNU/ELPA,""" start="00:29:24.470" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""we had to make sure that the copyright situation""" start="00:29:29.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""was in order.""" start="00:29:31.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This long process required reaching out to people""" start="00:29:33.850" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and having them assign the copyright""" start="00:29:37.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""for their work to the FSF,""" start="00:29:39.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or even removing their code entirely""" start="00:29:42.510" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""if they couldn't be reached.""" start="00:29:45.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The experience left me with the conviction""" start="00:29:47.970" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""that the easiest way to fix""" start="00:29:50.630" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the copyright situation of your package""" start="00:29:52.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is to ensure that it never gets broken in the first place.""" start="00:29:54.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Often a person will write in to the emms-help mailing list,""" start="00:30:00.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or perhaps raise an issue on IRC.""" start="00:30:04.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""If it's a bug report or feature request, we'll discuss it,""" start="00:30:08.030" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and when it's fixed, we'll ask the reporter""" start="00:30:11.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to test the result and provide feedback.""" start="00:30:14.160" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""If it's a patch, then we'll typically go one of three ways.""" start="00:30:17.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A trivial patch, such as fixing a typo""" start="00:30:22.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or corrections on a single line of code,""" start="00:30:24.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""will simply be applied by one of the developers.""" start="00:30:27.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A non-trivial, but one-time patch,""" start="00:30:32.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""will have to be cleared from a copyright perspective.""" start="00:30:34.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This means assigning copyright for the changes to the FSF.""" start="00:30:37.990" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Once that's cleared, then the patch will be applied.""" start="00:30:42.420" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Finally, if it's a non-trivial patch,""" start="00:30:46.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which looks like it would be the start""" start="00:30:49.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""of a long-term development work (my favorite),""" start="00:30:52.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""then after copyright is cleared,""" start="00:30:56.010" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""that person will be offered to be added""" start="00:30:57.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to the members with Git repo access on Savannah.""" start="00:31:00.800" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""From there, we usually use a dedicated branch""" start="00:31:05.020" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to do all the playing around""" start="00:31:08.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""before merging it with the main Git repo.""" start="00:31:09.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""If you have ever sent a patch, feature request,""" start="00:31:13.630" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""or bug report into Emms (small or large), we thank you.""" start="00:31:16.880" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Let It Go: The release process""" start="00:31:24.080" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Let It Go, The Release Process:""" start="00:31:24.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The maintainer is responsible for the release process.""" start="00:31:27.790" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I found that a consistent schedule works well,""" start="00:31:31.610" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which is not to say that we have to release on schedule,""" start="00:31:35.130" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""but that aiming for a consistent release schedule""" start="00:31:39.380" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""provides structure and a goal.""" start="00:31:42.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The main Git branch in the repository is stable""" start="00:31:46.050" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and more often than not of release quality.""" start="00:31:50.160" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Releases are done about every three months.""" start="00:31:53.240" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""And with such a stable main branch,""" start="00:31:56.650" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the process of releasing often involves little more""" start="00:31:59.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""than writing a NEWS entry.""" start="00:32:02.320" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""As a consequence, new and wonderful features""" start="00:32:05.060" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which aren't quite ready for prime time""" start="00:32:08.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""when a release comes around,""" start="00:32:11.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""will remain safely in their branch on the Git repo""" start="00:32:13.500" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""until after the ELPA release.""" start="00:32:18.200" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""It Is Not In Our Stars, But In Ourselves: Future directions""" start="00:32:23.400" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""It Is Not In Our Stars, But In Ourselves; Future Directions:""" start="00:32:23.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""One aspect of Emms that needs to improve is ease of setup.""" start="00:32:29.630" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Now that might surprise you, since at the time of writing,""" start="00:32:34.900" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""it's already pretty easy.""" start="00:32:37.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""But my ideal is that the user would need to do""" start="00:32:40.070" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""nothing at all after installation.""" start="00:32:43.880" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""And with that, as a goal in mind,""" start="00:32:46.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""there is more work to be done.""" start="00:32:49.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""We are working on a player discovery feature.""" start="00:32:52.750" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The idea is simple.""" start="00:32:55.500" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The code looks for binaries of popular media players""" start="00:32:57.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""on the user's machine,""" start="00:33:00.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and for each one found, it asks the user""" start="00:33:01.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""if they want the associated Emms player backend""" start="00:33:04.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to be configured.""" start="00:33:07.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""In effect, this code is already working,""" start="00:33:09.810" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""but currently an undocumented, unofficial feature.""" start="00:33:12.590" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""You can try it for yourself with""" start="00:33:16.290" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""`emms-setup-discover-players`.""" start="00:33:17.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""So what's the holdup?""" start="00:33:21.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""`emms-setup-discover-players` currently configures""" start="00:33:22.970" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""the `emms-player-list` variable,""" start="00:33:26.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""but doesn't write it to disk.""" start="00:33:27.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""And that means that the configuration""" start="00:33:29.900" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""isn't preserved between Emacs sessions.""" start="00:33:31.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The question then becomes,""" start="00:33:35.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""what is the best way to preserve this setting?""" start="00:33:36.900" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I personally don't like anything""" start="00:33:40.310" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to edit my .emacs except me,""" start="00:33:42.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and I wouldn't do that to anyone else.""" start="00:33:46.200" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Now we already write state to the .emacs.d/emms/ directory,""" start="00:33:49.280" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""but that would require care not to""" start="00:33:55.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""clobber a user's existing setup.""" start="00:33:58.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Having the user set up their system in one place,""" start="00:34:01.910" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""such as a .emacs or a .emmsrc,""" start="00:34:04.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""while saving state to a different place""" start="00:34:08.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is asking for confusion.""" start="00:34:11.420" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""This is a good example which I bring up""" start="00:34:14.210" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""of where a maintainer needs to""" start="00:34:16.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""solicit opinions from developers,""" start="00:34:18.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""both the Emacs developers,""" start="00:34:21.309" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""asking them where packages should save state,""" start="00:34:23.900" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and the Emms developers, and also users.""" start="00:34:28.170" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Then, the maintainer needs to""" start="00:34:33.170" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""carefully choose a path forward.""" start="00:34:35.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""It is typical of the kind of issue you have to have in mind""" start="00:34:38.020" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""when you're maintaining a package.""" start="00:34:41.560" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Development policies: Interface language""" start="00:34:44.849" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Development Policies: Interface Language.""" start="00:34:44.849" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A maintainer of an interactive program such as Emms""" start="00:34:49.160" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""needs to think about user interaction.""" start="00:34:52.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Emms doesn't use key bindings which are familiar""" start="00:34:55.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to people who are used to GUI media players,""" start="00:34:58.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and that can, and has, caused friction.""" start="00:35:02.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Some new users are confused when they press the spacebar""" start="00:35:06.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""on an entry in the Emms browser,""" start="00:35:09.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""only to find that nothing starts playing.""" start="00:35:12.530" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Indeed, all that does is to expand the browser tree""" start="00:35:15.460" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""at that point.""" start="00:35:18.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Then they might press RET on the same entry,""" start="00:35:20.470" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and be further frustrated at the continuing silence.""" start="00:35:23.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Since what return does is just to add that entry at point""" start="00:35:28.260" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""to the current playlist.""" start="00:35:33.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""The discussion then arises""" start="00:35:36.170" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""about how Emms should handle that situation.""" start="00:35:37.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""On one hand, we want to make it as easy as possible""" start="00:35:41.820" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""for new users to learn Emms,""" start="00:35:45.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and adopt a do-what-I-mean interface approach.""" start="00:35:48.820" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""On the other hand, this is an Emacs project.""" start="00:35:52.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""It isn't a stand-alone GUI media player,""" start="00:35:56.750" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and should integrate into Emacs,""" start="00:35:59.440" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and serve Emacs users first and foremost.""" start="00:36:01.400" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Development policies: Freedom""" start="00:36:05.980" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Development policies: Freedom.""" start="00:36:05.980" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Another maintainer job is to think of Emms' posture""" start="00:36:10.290" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""in regards to software freedom.""" start="00:36:15.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Here are a few examples.""" start="00:36:17.380" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Back with MP3 was still a patent encumbered format,""" start="00:36:19.730" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""we pushed hard for Vorbis everywhere""" start="00:36:23.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""along with the PlayOgg campaign.""" start="00:36:26.081" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A then popular music streaming service,""" start="00:36:29.640" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which will remain unnamed,""" start="00:36:32.700" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""changed their stance towards third-party applications,""" start="00:36:34.930" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and required individual API keys which could not be shared.""" start="00:36:38.620" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""We stood firm, said &quot;no&quot;,""" start="00:36:43.130" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and removed support for that service.""" start="00:36:45.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A recent suggestion to add support for YouTube""" start="00:36:48.670" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""was also nixed,""" start="00:36:51.360" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""because the particular backend""" start="00:36:53.890" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""was found to download and run proprietary javascript""" start="00:36:55.680" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""on the user's machine.""" start="00:36:58.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Saying no to potentially useful or wanted features""" start="00:37:01.850" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""because it involves non-free software""" start="00:37:05.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is often an unpopular decision and can alienate people.""" start="00:37:07.920" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""A maintainer needs to think carefully""" start="00:37:13.490" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""about each of these decisions,""" start="00:37:15.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""as they are rarely straightforward and one-sided.""" start="00:37:17.400" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""And as you see above, they also change over time""" start="00:37:21.920" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and need to be re-evaluated.""" start="00:37:25.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""One of the most useful things a maintainer can do""" start="00:37:30.300" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""is to coordinate the development effort""" start="00:37:33.000" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""and help new people join the project.""" start="00:37:35.520" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""In light of that, if you want to work on a project""" start="00:37:39.230" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which has a bit of everything,""" start="00:37:41.840" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""you could do worse than hacking on Emms.""" start="00:37:44.060" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""There is inter-process communication,""" start="00:37:47.810" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""displaying graphics, parsing binary files,""" start="00:37:49.720" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""caching, asynchronous processes, user interface design.""" start="00:37:52.480" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""We also are a project that insists on""" start="00:37:56.530" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""keeping a well-written and up-to-date manual.""" start="00:37:59.600" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""If you can write English or hack Emacs Lisp at all,""" start="00:38:02.960" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""chances are that there is something you can do for Emms.""" start="00:38:06.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Just saying.""" start="00:38:09.940" video="mainVideo-emms" id="subtitle"]]
+
+[[!template new="1" text="""Acknowledgements""" start="00:38:12.370" video="mainVideo-emms" id="subtitle"]]
+
+[[!template text="""Acknowledgements:""" start="00:38:12.370" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""I'd like to express my deep gratitude for all of the people""" start="00:38:14.190" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""who have hacked on Emms""" start="00:38:18.080" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""during my time as a maintainer and before it.""" start="00:38:19.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""It is often the case that I'm just the person""" start="00:38:23.170" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""holding the rudder and steering the ship,""" start="00:38:25.760" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""with all of these developers""" start="00:38:28.560" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""rowing furiously to provide the power""" start="00:38:30.040" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""which actually moves the ship forward.""" start="00:38:33.180" video="mainVideo-emms" id="subtitle"]]
+[[!template text="""Thank you to all.""" start="00:38:36.370" video="mainVideo-emms" id="subtitle"]]
+
+
+
+Captioner: yoni
+
+<a name="emms-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: And I think we are live.""" start="00:00:06.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""Hi, Yanny, how are you doing?""" start="00:00:07.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Excellent, excellent. Doing very well,""" start="00:00:10.460" video="qanda-emms" id="subtitle"]]
+[[!template text="""thank you.""" start="00:00:10.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: So that was a wonderful presentation.""" start="00:00:13.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""I first want to commend you on your ability""" start="00:00:17.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""to both do the how the user encounters the""" start="00:00:22.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""MMS, how the developer might be interested""" start="00:00:24.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""about how it works, and I feel like you've""" start="00:00:28.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""done a wonderful job of talking to absolutely""" start="00:00:30.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""everyone in our audience,""" start="00:00:31.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""whatever their skill level.""" start="00:00:32.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""So thank you so much for this.""" start="00:00:34.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, that of course runs the risk of being,""" start="00:00:37.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""you know, good for some,""" start="00:00:41.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""but excellent for none.""" start="00:00:42.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""But hopefully the result is that people can""" start="00:00:46.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""get something out of it.""" start="00:00:48.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""I think it's very important to make sure that""" start="00:00:51.820" video="qanda-emms" id="subtitle"]]
+[[!template text="""everyone feels that they have access to""" start="00:00:55.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""Emacs, they have access to EMMS,""" start="00:00:57.239" video="qanda-emms" id="subtitle"]]
+[[!template text="""that they can do this in whatever capacity""" start="00:01:00.640" video="qanda-emms" id="subtitle"]]
+[[!template text="""they want. It's for everyone.""" start="00:01:02.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""I really believe that.""" start="00:01:05.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, and I understand this risk about having""" start="00:01:09.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""a talk that is kind of a jack-of-all-trades,""" start="00:01:10.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""but frankly you've done a wonderful job of""" start="00:01:14.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""making it interesting for everyone,""" start="00:01:16.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""because also I think the parts worked really""" start="00:01:19.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""well, and people always had something to look""" start="00:01:21.820" video="qanda-emms" id="subtitle"]]
+[[!template text="""forward in terms of their expertise of what""" start="00:01:24.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""particularly spoke to them.""" start="00:01:25.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""So thank you again. What I'm going to do,""" start="00:01:27.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""we have about 14 minutes of Q&A,""" start="00:01:29.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""So I'll invite people,""" start="00:01:30.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""as I usually do, to add their questions in""" start="00:01:33.400" video="qanda-emms" id="subtitle"]]
+[[!template text="""the other pad that you can find on the talks""" start="00:01:35.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""or on IRC. You can also join us in the""" start="00:01:38.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""discussion. I will make sure this time to""" start="00:01:40.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""ping Sasha to open the Q&A.""" start="00:01:42.180" video="qanda-emms" id="subtitle"]]
+[[!template text="""Can you open, I-V-E-M-M-S.""" start="00:01:44.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""All right, and in the meantime,""" start="00:01:48.700" video="qanda-emms" id="subtitle"]]
+[[!template text="""whilst we wait for people to join us in the""" start="00:01:50.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""room, I will start reading some of the""" start="00:01:52.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""questions off the pad.""" start="00:01:53.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""So we had the first question about the music""" start="00:01:57.180" video="qanda-emms" id="subtitle"]]
+[[!template text="""that we played during the launch break,""" start="00:01:58.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""and It's 1 of our dear friends,""" start="00:02:01.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""Shoshin Ganshangroh, a free album,""" start="00:02:05.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""Basement Dazed. I've put the link in the pad""" start="00:02:09.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""and we've been using Shoshin's music for the""" start="00:02:12.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""last 3 years, I think,""" start="00:02:13.420" video="qanda-emms" id="subtitle"]]
+[[!template text="""and everyone, people are so excited.""" start="00:02:15.060" video="qanda-emms" id="subtitle"]]
+[[!template text="""Some people say, why is it so noisy in the""" start="00:02:17.220" video="qanda-emms" id="subtitle"]]
+[[!template text="""background? But it's just because there's 1""" start="00:02:18.480" video="qanda-emms" id="subtitle"]]
+[[!template text="""part of the different tracks that sounds like""" start="00:02:20.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""static and it always gets people.""" start="00:02:24.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""We should probably do something about this,""" start="00:02:25.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""but frankly it makes me laugh every time.""" start="00:02:27.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""Starting with the first actual question,""" start="00:02:30.460" video="qanda-emms" id="subtitle"]]
+[[!template text="""well actually it's a bit of a meme question,""" start="00:02:32.640" video="qanda-emms" id="subtitle"]]
+[[!template text="""for the next Emacs Con,""" start="00:02:34.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""could we have an eMMS playlist to follow the""" start="00:02:37.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""talks along?""" start="00:02:37.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh that sounds like an excellent idea but I""" start="00:02:43.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""guess I'm wondering what they mean exactly by""" start="00:02:46.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""that. Is that a shareable playlist that we""" start="00:02:48.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""can pass along and just have people go to a""" start="00:02:54.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""URL and just be able to play that?""" start="00:02:56.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""I think that's an excellent idea.""" start="00:02:58.620" video="qanda-emms" id="subtitle"]]
+[[!template text="""It should be a relatively low bandwidth""" start="00:03:00.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""process.""" start="00:03:01.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: And it's typically the type of stuff that is""" start="00:03:06.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""right of our alley. I'm thinking about the""" start="00:03:10.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""ICS file that we produce for all the events""" start="00:03:15.480" video="qanda-emms" id="subtitle"]]
+[[!template text="""that are related to Emacs.""" start="00:03:17.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""You know the workshop that happened in Paris""" start="00:03:18.820" video="qanda-emms" id="subtitle"]]
+[[!template text="""or in New York, LA? Sasha compiles a list of""" start="00:03:22.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""all the events and when they happen,""" start="00:03:23.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""and then we provide this to everyone.""" start="00:03:25.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""And we can do very much the same with""" start="00:03:27.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""EmacsConf. You could have a playlist for""" start="00:03:29.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""EmacsConf 2023, where you get all the talks""" start="00:03:31.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""and perhaps also the Q&A sessions so that you""" start="00:03:34.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""can relieve the 16 hours of content that""" start="00:03:36.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""we're producing. That'd be great,""" start="00:03:37.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""that's a great idea I think.""" start="00:03:39.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Absolutely, and if there are any limitations""" start="00:03:43.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""in the Emacs playlist structure that things""" start="00:03:48.060" video="qanda-emms" id="subtitle"]]
+[[!template text="""are missing in the playlist structure,""" start="00:03:49.640" video="qanda-emms" id="subtitle"]]
+[[!template text="""then it would be a great impetus to implement""" start="00:03:53.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""those and extend the playlist structure.""" start="00:03:55.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""Because after all, it's Lisp,""" start="00:03:57.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""it really is data and functions all mixed""" start="00:04:01.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""together, so we can do that.""" start="00:04:03.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""It would be very interesting to dive into it""" start="00:04:06.180" video="qanda-emms" id="subtitle"]]
+[[!template text="""and see what's missing.""" start="00:04:07.000" video="qanda-emms" id="subtitle"]]
+[[!template text="""That would be even more informative than what""" start="00:04:10.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""it can do.""" start="00:04:10.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: Great. All right, moving on to the next""" start="00:04:14.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""question. I like to use music and audiobooks""" start="00:04:17.000" video="qanda-emms" id="subtitle"]]
+[[!template text="""in very different ways.""" start="00:04:18.279" video="qanda-emms" id="subtitle"]]
+[[!template text="""With music, I like shuffling by artists and""" start="00:04:21.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""with audiobooks, I want to read sequentially""" start="00:04:23.300" video="qanda-emms" id="subtitle"]]
+[[!template text="""and pick the same playlist over a couple of""" start="00:04:27.260" video="qanda-emms" id="subtitle"]]
+[[!template text="""days or weeks. Do you have any tips for using""" start="00:04:29.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""these 2 opposing media's workflow?""" start="00:04:30.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yes, so I have similar situations where I""" start="00:04:38.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""have very long endurance races that I watch,""" start="00:04:43.920" video="qanda-emms" id="subtitle"]]
+[[!template text="""which I do all my media consumption is done""" start="00:04:47.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""via EMMS. I also listened to music.""" start="00:04:50.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""And so there's also a middle in between.""" start="00:04:54.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""There's 1 end in which you have popular""" start="00:04:57.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""music. These are standalone songs that are""" start="00:05:01.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""typically 3 to 4 minute long and they are""" start="00:05:04.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""best consumed in a random you know order""" start="00:05:07.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""because they are designed around,""" start="00:05:09.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""you know, a commercial radio distribution.""" start="00:05:12.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""I guess I'm dating myself by saying radio,""" start="00:05:15.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""but you know all the that.""" start="00:05:17.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""In the middle there are longer works like""" start="00:05:20.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""musicals and classical where these are units""" start="00:05:26.100" video="qanda-emms" id="subtitle"]]
+[[!template text="""where they might be very long but you would""" start="00:05:30.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""have several tracks that you do want to have""" start="00:05:33.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""1 after the other, and you want to be able to""" start="00:05:35.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""stop and go to the next track.""" start="00:05:38.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""And then at the very, very other end,""" start="00:05:40.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""you have extremely long format,""" start="00:05:44.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""which is included in a single file,""" start="00:05:46.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""such as an audio book,""" start="00:05:47.920" video="qanda-emms" id="subtitle"]]
+[[!template text="""a movie, a tutorial that you're watching,""" start="00:05:51.400" video="qanda-emms" id="subtitle"]]
+[[!template text="""or in my case, you know,""" start="00:05:54.100" video="qanda-emms" id="subtitle"]]
+[[!template text="""a 24 hour, the 24 hours of Le Mans,""" start="00:05:56.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""just the 24 hour race,""" start="00:05:58.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""which, you know, that's 1 heck of a file.""" start="00:06:01.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""So that is 1 of the reasons eMMS has a number""" start="00:06:07.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""of elements such as the meta playlist mode""" start="00:06:10.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""and multiple playlists.""" start="00:06:11.260" video="qanda-emms" id="subtitle"]]
+[[!template text="""So I would say that they would open a number""" start="00:06:16.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""of playlists in eMMS, generate a number of""" start="00:06:19.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""playlists that have each class of media.""" start="00:06:26.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""So the shorter form songs,""" start="00:06:28.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""the more pop songs you have in 1 playlist""" start="00:06:33.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""where you can sort, shuffle it,""" start="00:06:35.920" video="qanda-emms" id="subtitle"]]
+[[!template text="""you know, save it, do whatever you want.""" start="00:06:37.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""Then a separate playlist for the long form""" start="00:06:41.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""stuff. Sometimes that playlist will have even""" start="00:06:44.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""only 1 file in it if it's long enough,""" start="00:06:48.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""then have a key combination which takes you""" start="00:06:52.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""directly to 1 playlist or the other,""" start="00:06:55.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""and within the long-form playlist,""" start="00:06:57.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""looking at the bookmarking function of EMMS,""" start="00:07:01.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""which is designed around being able to save a""" start="00:07:06.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""particular stopping point or multiple""" start="00:07:10.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""stopping points, bookmarks in the audio,""" start="00:07:12.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""and being able to jump back into that audio.""" start="00:07:15.300" video="qanda-emms" id="subtitle"]]
+[[!template text="""The point to remember about the bookmarking""" start="00:07:18.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""feature is that sometimes it really depends""" start="00:07:23.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""on you have to have the right back end.""" start="00:07:25.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""Not all back ends with replaying,""" start="00:07:28.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""not all types of media work well with a""" start="00:07:33.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""bookmarking function, and bug reports""" start="00:07:36.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""welcome. But also there are other backends""" start="00:07:38.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""such as MPV where you can configure it that""" start="00:07:44.820" video="qanda-emms" id="subtitle"]]
+[[!template text="""when you quit playing the song or the media""" start="00:07:49.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""with, you know, cue internally.""" start="00:07:55.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""So sometimes the back end has to continue""" start="00:07:58.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""playing that song. That's what I do in order""" start="00:08:04.400" video="qanda-emms" id="subtitle"]]
+[[!template text="""to, on 1 hand, switch over to a...""" start="00:08:07.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""I want to hear... I'm coding,""" start="00:08:09.620" video="qanda-emms" id="subtitle"]]
+[[!template text="""I want to hear some music,""" start="00:08:10.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""I go to my playlist of short songs,""" start="00:08:12.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""then I'm sitting back and I want to watch a""" start="00:08:16.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""long form something from where I left off and""" start="00:08:20.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""there I go to the other playlist and use""" start="00:08:22.420" video="qanda-emms" id="subtitle"]]
+[[!template text="""bookmarks or the features of the back end""" start="00:08:26.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""that I'm using.""" start="00:08:26.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, thank you for the answer.""" start="00:08:31.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""We have about 7 minutes and we have more""" start="00:08:34.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""questions, so that's great.""" start="00:08:35.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""Moving on to the next 1.""" start="00:08:37.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""Is there a way to search a music selection by""" start="00:08:40.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""lyrics? Assuming those lyrics are in the""" start="00:08:42.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""metadata or are available elsewhere,""" start="00:08:43.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""it would be neat to call songs up from the""" start="00:08:46.300" video="qanda-emms" id="subtitle"]]
+[[!template text="""lyrics to the song. Perhaps is this""" start="00:08:48.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""implemented so that you can all aliases,""" start="00:08:50.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""so they can use aliases for the song that you""" start="00:08:54.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""like, defining those aliases or shortcuts""" start="00:08:56.640" video="qanda-emms" id="subtitle"]]
+[[!template text="""either inside or outside eMMS?""" start="00:08:58.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""Okay, so I think you've got 2 questions.""" start="00:08:59.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""First about the lyrics and then the aliases.""" start="00:09:01.500" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, so it's effectively not possible to do""" start="00:09:08.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""right now. There's a sense in which it is,""" start="00:09:10.880" video="qanda-emms" id="subtitle"]]
+[[!template text="""but not really. What actually needs to""" start="00:09:14.820" video="qanda-emms" id="subtitle"]]
+[[!template text="""happen? The problem is that the caching""" start="00:09:18.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""system is extremely naive.""" start="00:09:21.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""It's just really a hash that's written to""" start="00:09:24.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""disk. And maybe now with SQLite integration""" start="00:09:30.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""or other or just the fact that computers have""" start="00:09:35.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""a lot more speed and space than they used to""" start="00:09:39.220" video="qanda-emms" id="subtitle"]]
+[[!template text="""have, we need to expand the cache to be a lot""" start="00:09:43.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""more greedy and a lot more flexible so that""" start="00:09:47.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""we can store things such as lyrics in as part""" start="00:09:52.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""of the metadata. There's no reason not to do""" start="00:09:56.000" video="qanda-emms" id="subtitle"]]
+[[!template text="""that. Unless your collection would have to be""" start="00:10:02.220" video="qanda-emms" id="subtitle"]]
+[[!template text="""truly enormous in order to slow things down.""" start="00:10:06.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""We wouldn't even need to compress the lyrics""" start="00:10:09.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""in order to store them like that.""" start="00:10:11.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""But that is a goal. So our rewrite of the""" start="00:10:15.920" video="qanda-emms" id="subtitle"]]
+[[!template text="""cache is currently in progress,""" start="00:10:17.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""and the goal is to have a system where you""" start="00:10:21.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""can put any related information,""" start="00:10:24.920" video="qanda-emms" id="subtitle"]]
+[[!template text="""including lyrics, and map that to a""" start="00:10:30.060" video="qanda-emms" id="subtitle"]]
+[[!template text="""particular piece of the media,""" start="00:10:31.400" video="qanda-emms" id="subtitle"]]
+[[!template text="""be it a URL or a... So you could have in a""" start="00:10:36.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""sense, you could have a URL to a lecture and""" start="00:10:40.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""the metadata associated would be some text,""" start="00:10:44.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""some notes or something else like that.""" start="00:10:47.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right, so that was about the lyrics.""" start="00:10:51.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""I'm not sure how it answers the question""" start="00:10:53.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""about the aliases. I mean you can still""" start="00:10:54.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""filter what you've mentioned about the cache.""" start="00:10:56.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""I think it's... Do we consider the aliases to""" start="00:10:59.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""be anything within the metadata?""" start="00:11:01.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: No, you're right. That is a separate""" start="00:11:08.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""question. I don't have a great answer for""" start="00:11:12.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""that right now.""" start="00:11:12.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, great. Well, we'll put a pin on this""" start="00:11:16.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""and we can return to it.""" start="00:11:17.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""You can return to it at a later stage.""" start="00:11:19.690" video="qanda-emms" id="subtitle"]]
+[[!template text="""Yeah. All right, moving on to the next""" start="00:11:21.880" video="qanda-emms" id="subtitle"]]
+[[!template text="""question, then. I'll just,""" start="00:11:22.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""we'll put a pin on this.""" start="00:11:25.180" video="qanda-emms" id="subtitle"]]
+[[!template text="""All right, next question.""" start="00:11:26.420" video="qanda-emms" id="subtitle"]]
+[[!template text="""Are there plans for managing metadata with""" start="00:11:29.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""online resource backends,""" start="00:11:30.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""i.e. Discogs or music brains?""" start="00:11:32.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""What about something like Beats and Emacs or""" start="00:11:34.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""part of the EMMS?""" start="00:11:34.920" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, so that's an active discussion on the""" start="00:11:40.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""mailing list right now.""" start="00:11:42.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""We don't want to replicate what Beats does""" start="00:11:47.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""very, very well in eMMS.""" start="00:11:49.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""We don't want a clunky interface with Beats.""" start="00:11:53.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""We do want some kind of,""" start="00:11:57.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""and so it's hard to tell exactly where to""" start="00:12:00.100" video="qanda-emms" id="subtitle"]]
+[[!template text="""draw that line. So the big answer is yes,""" start="00:12:03.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""absolutely, there is a plan to do that.""" start="00:12:04.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""The details become complicated because for 1""" start="00:12:09.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""thing, the backend, the database that""" start="00:12:15.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""MusicBrain uses, AcoustID,""" start="00:12:18.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""I don't remember if AcoustID is the binary or""" start="00:12:21.500" video="qanda-emms" id="subtitle"]]
+[[!template text="""the database, but that's actually for""" start="00:12:25.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""non-commercial use only.""" start="00:12:27.500" video="qanda-emms" id="subtitle"]]
+[[!template text="""So not only do you need to compile a piece of""" start="00:12:31.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""software on your computer as a shim,""" start="00:12:35.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""which is what you need to do in order to set""" start="00:12:37.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""up beats to do fingerprinting.""" start="00:12:39.180" video="qanda-emms" id="subtitle"]]
+[[!template text="""But it also crosses this line between""" start="00:12:44.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""completely free software to completely free""" start="00:12:47.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""software interfacing with a non-commercial""" start="00:12:49.400" video="qanda-emms" id="subtitle"]]
+[[!template text="""only service. So a lot of the discussion""" start="00:12:56.000" video="qanda-emms" id="subtitle"]]
+[[!template text="""that's going on now is what is the contour?""" start="00:12:58.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""Where would be where we would be effective""" start="00:13:02.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""for EMMS to do management and where not?""" start="00:13:08.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""For 1 thing, I would love to be able to...""" start="00:13:11.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""1 thing that we definitely would love to be""" start="00:13:13.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""able to do is when you hit E on a file and""" start="00:13:18.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""you get all the metadata to be able to then""" start="00:13:21.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""give a command to say,""" start="00:13:23.000" video="qanda-emms" id="subtitle"]]
+[[!template text="""hey, play to music brains and see if you can""" start="00:13:25.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""improve that metadata.""" start="00:13:26.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""Do you have better metadata,""" start="00:13:29.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""more complete metadata to complete that?""" start="00:13:33.400" video="qanda-emms" id="subtitle"]]
+[[!template text="""That is definitely in the pipeline.""" start="00:13:35.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""How best to do it, that's a discussion.""" start="00:13:40.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, Yoni, we have about 2 minutes until we""" start="00:13:45.460" video="qanda-emms" id="subtitle"]]
+[[!template text="""need to go to the next talk.""" start="00:13:46.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""Okay, I'll risk it. 1 more question and a""" start="00:13:52.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""short answer if you can.""" start="00:13:53.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""Have the developers considered using Emacs""" start="00:13:57.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""customized functionality to persistently""" start="00:13:59.060" video="qanda-emms" id="subtitle"]]
+[[!template text="""store settings when using eMMS setup discover""" start="00:14:01.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""players?""" start="00:14:02.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yes, absolutely. That's another active place,""" start="00:14:08.000" video="qanda-emms" id="subtitle"]]
+[[!template text="""especially with the discover players.""" start="00:14:11.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""How to do it exactly without annoying people""" start="00:14:14.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""and clobbering their own settings,""" start="00:14:17.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""we just need to be very careful about that.""" start="00:14:20.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""Yes, that's in the coming releases.""" start="00:14:23.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: All right, well, Younif,""" start="00:14:26.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""thank you so much for your time.""" start="00:14:27.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""Feel free to stay in the room.""" start="00:14:29.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""I see that some people have started joining""" start="00:14:30.920" video="qanda-emms" id="subtitle"]]
+[[!template text="""on BBB. If you have more questions,""" start="00:14:33.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""feel free to unmute yourself and ask them""" start="00:14:36.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""live. Younid, I could ask you also to perhaps""" start="00:14:39.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""answer the question. I've put the link to the""" start="00:14:41.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""pad in the BBB chat, so if you look at the...""" start="00:14:43.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""Here, I think, we're not mirrored on BBB.""" start="00:14:47.220" video="qanda-emms" id="subtitle"]]
+[[!template text="""If you look at the left you should be able to""" start="00:14:49.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""see the chat and the questions and if you""" start="00:14:51.500" video="qanda-emms" id="subtitle"]]
+[[!template text="""could just answer the last question that""" start="00:14:52.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""would be great. For us on the general track""" start="00:14:55.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""we will be moving to the next talk and""" start="00:14:57.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""Yannick do you have any last thing to say in""" start="00:14:59.700" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thank everyone who put together the""" start="00:15:02.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""conference and thank you to everyone who""" start="00:15:04.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""helps with the EMMS.""" start="00:15:06.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: 10 seconds? All right,""" start="00:15:08.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""well, thank you so much,""" start="00:15:09.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""Yoni. We'll probably see you later.""" start="00:15:10.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""Bye-bye. Wonderful. And I think we are off""" start="00:15:17.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""air. Thank you so much,""" start="00:15:18.620" video="qanda-emms" id="subtitle"]]
+[[!template text="""Juni. I need to step out and go take care of""" start="00:15:20.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay, wonderful. Thank you very much.""" start="00:15:23.260" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: the next talk. Bye-bye.""" start="00:15:24.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""And just to, I forgot to mention,""" start="00:15:25.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""but you can still talk here and everything is""" start="00:15:27.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""still being recorded. So,""" start="00:15:28.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""I'll see you later.""" start="00:15:28.880" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 2]: Excellent. Bye-bye. Bye.""" start="00:15:32.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: Oh, hello.""" start="00:15:35.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Wait, you're still, I cannot hear you yet.""" start="00:15:40.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 4]: You are currently the only person in this""" start="00:15:42.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""conference.""" start="00:15:43.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 2]: Okay.""" start="00:16:12.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: Can you hear me now? I just wanted to say hi""" start="00:16:18.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""and thank you. My name's Grant.""" start="00:16:19.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""I've, you helped me contribute to EMMS maybe""" start="00:16:23.740" video="qanda-emms" id="subtitle"]]
+[[!template text="""2 or 3 years ago. I was trying to do the""" start="00:16:26.820" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 2]: So,""" start="00:16:28.480" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: track tag stuff. yeah.""" start="00:16:29.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""So I just wanted to say thank you.""" start="00:16:32.148" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thank you for continuing and going through""" start="00:16:35.400" video="qanda-emms" id="subtitle"]]
+[[!template text="""that entire process. I know that 1 of the""" start="00:16:38.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""things that happens is that people want to""" start="00:16:40.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""contribute, but it's not as slick as GitHub""" start="00:16:43.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""and stuff like that, especially with the""" start="00:16:46.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""copper assignment. And objectively,""" start="00:16:53.400" video="qanda-emms" id="subtitle"]]
+[[!template text="""it's not that. It's just harder than what""" start="00:16:56.920" video="qanda-emms" id="subtitle"]]
+[[!template text="""they imagine it might be.""" start="00:16:58.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah. Well, I appreciate it.""" start="00:17:01.500" video="qanda-emms" id="subtitle"]]
+[[!template text="""I think you're doing a wonderful job as a""" start="00:17:03.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""maintainer. I still hang out on the list and""" start="00:17:07.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""enjoy listening in on the discussions.""" start="00:17:09.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""So.""" start="00:17:09.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah. But that's it. I think that's it.""" start="00:17:14.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""I think that's it. And I think that's it.""" start="00:17:16.700" video="qanda-emms" id="subtitle"]]
+[[!template text="""And I think that's it.""" start="00:17:17.640" video="qanda-emms" id="subtitle"]]
+[[!template text="""I appreciate it. And I'll leave you to all of""" start="00:17:23.339" video="qanda-emms" id="subtitle"]]
+[[!template text="""you to go on from being a product.""" start="00:17:27.781" video="qanda-emms" id="subtitle"]]
+[[!template text="""And that she valued to all of us long term""" start="00:17:28.088" video="qanda-emms" id="subtitle"]]
+[[!template text="""being a project.""" start="00:17:28.180" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: If you're not super duper active,""" start="00:17:31.460" video="qanda-emms" id="subtitle"]]
+[[!template text="""being there long term,""" start="00:17:33.420" video="qanda-emms" id="subtitle"]]
+[[!template text="""people tend to find it easier trying to""" start="00:17:37.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""continue contributing to the project if""" start="00:17:40.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""there's a consistency there,""" start="00:17:42.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""if there isn't a churn,""" start="00:17:43.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""if there is a kind of a core group.""" start="00:17:47.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""I guess it's like, you think it's constant.""" start="00:17:52.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""Eliezer Etzke and RMS,""" start="00:17:58.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""whatever on the next mailing list,""" start="00:18:00.420" video="qanda-emms" id="subtitle"]]
+[[!template text="""You know, okay, there are certain people that""" start="00:18:03.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""I think so. So thank you for that.""" start="00:18:05.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""That's very important.""" start="00:18:06.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""That helps.""" start="00:18:07.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah, I'm, I feel like when I started using""" start="00:18:12.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""EMMS several years ago,""" start="00:18:14.180" video="qanda-emms" id="subtitle"]]
+[[!template text="""it's, it's improved a lot since then.""" start="00:18:16.500" video="qanda-emms" id="subtitle"]]
+[[!template text="""And I notice your focus on helping new users""" start="00:18:19.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""get started quickly. And I think the talk""" start="00:18:22.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""today will help with that too.""" start="00:18:23.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""So""" start="00:18:24.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: yeah, I want to put you know,""" start="00:18:32.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""the, especially the TLDR,""" start="00:18:33.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""like how to start it on the link that to the""" start="00:18:37.500" video="qanda-emms" id="subtitle"]]
+[[!template text="""website, find somehow that we can get on to""" start="00:18:44.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""prepare for that. And this together.""" start="00:18:52.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""Now, question for you,""" start="00:18:54.700" video="qanda-emms" id="subtitle"]]
+[[!template text="""Where would you like to see EMMS go?""" start="00:18:58.260" video="qanda-emms" id="subtitle"]]
+[[!template text="""Where do you see it landing?""" start="00:18:59.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""What do you feel like this is what this is""" start="00:19:02.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""we're sorely missing these things?""" start="00:19:04.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: I don't know. I mean, I picked it up,""" start="00:19:09.740" video="qanda-emms" id="subtitle"]]
+[[!template text="""because I both use it to play my music""" start="00:19:13.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""collection, but also, like I record my own""" start="00:19:17.100" video="qanda-emms" id="subtitle"]]
+[[!template text="""music. And I wanted to be able to edit my""" start="00:19:20.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""metadata in Emacs, because editing metadata""" start="00:19:23.500" video="qanda-emms" id="subtitle"]]
+[[!template text="""elsewhere sucks. And so that's kind of why I""" start="00:19:29.100" video="qanda-emms" id="subtitle"]]
+[[!template text="""got involved with that.""" start="00:19:30.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""And I was like, being able to edit metadata,""" start="00:19:33.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""especially for content that maybe you're""" start="00:19:37.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""creating or because I have a bunch of files""" start="00:19:41.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""of just unlabeled stuff I've recorded on,""" start="00:19:44.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""you know, different quarters,""" start="00:19:45.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""things like that. So that's kind of where I""" start="00:19:47.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""was focusing on it. It's the only media tool""" start="00:19:50.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""that lets me do that, you know,""" start="00:19:52.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""I can play the music back and have quick""" start="00:19:54.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""editing. So I know there was a couple of""" start="00:19:58.260" video="qanda-emms" id="subtitle"]]
+[[!template text="""things we had talked about in terms of maybe""" start="00:20:00.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""improving kind of the user interface for the""" start="00:20:03.260" video="qanda-emms" id="subtitle"]]
+[[!template text="""tag editor, things like that.""" start="00:20:05.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""So I don't have any grand visions for where""" start="00:20:09.300" video="qanda-emms" id="subtitle"]]
+[[!template text="""EMMS should go. I know pretty much all the""" start="00:20:15.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""things I've heard about it already.""" start="00:20:16.920" video="qanda-emms" id="subtitle"]]
+[[!template text="""You can hook up to GNU FM,""" start="00:20:20.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""the Scrabbling Service,""" start="00:20:21.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""and all that kind of stuff.""" start="00:20:23.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""I don't really feel like it's missing much,""" start="00:20:26.920" video="qanda-emms" id="subtitle"]]
+[[!template text="""especially being able to choose the back""" start="00:20:29.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""ends. I guess, if anything,""" start="00:20:31.880" video="qanda-emms" id="subtitle"]]
+[[!template text="""it's the interface. How can it be even more""" start="00:20:34.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""intuitive for users? And I think that,""" start="00:20:38.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""you know, we need more people playing around""" start="00:20:41.500" video="qanda-emms" id="subtitle"]]
+[[!template text="""with it, I guess. Yeah.""" start="00:20:43.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 2]: I think a really good""" start="00:20:46.220" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, yeah. example of that is,""" start="00:20:47.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""because I'm sure there are lots of people""" start="00:20:49.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""playing around with it,""" start="00:20:50.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""arriving at a conclusion,""" start="00:20:51.460" video="qanda-emms" id="subtitle"]]
+[[!template text="""keeping it to themselves and moving on.""" start="00:20:53.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""Yeah. Which, and I know that a lot of bits of""" start="00:20:59.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""software put a send a bug report feature in""" start="00:21:01.820" video="qanda-emms" id="subtitle"]]
+[[!template text="""and stuff like that and no 1 uses those""" start="00:21:04.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""either. So that's the frictional cost.""" start="00:21:07.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""I think the context switch for people between""" start="00:21:10.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""this doesn't work to actually formulating in""" start="00:21:16.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""words what didn't work,""" start="00:21:17.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""that is a very expensive context which most""" start="00:21:21.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""people will not do. And we're poorer for""" start="00:21:24.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""that. So, I think that when we integrate""" start="00:21:32.220" video="qanda-emms" id="subtitle"]]
+[[!template text="""music brains and other things like that into.""" start="00:21:34.740" video="qanda-emms" id="subtitle"]]
+[[!template text="""Now, of course, music brains will probably,""" start="00:21:37.460" video="qanda-emms" id="subtitle"]]
+[[!template text="""it would be very funny if you pull up your""" start="00:21:41.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""stuff, right? Something that you wrote and""" start="00:21:43.480" video="qanda-emms" id="subtitle"]]
+[[!template text="""you say, hey, music brains match this and""" start="00:21:46.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""it's not there, then it'll probably suggest""" start="00:21:48.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah, I've heard that.""" start="00:21:51.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: some wild things. Yeah,""" start="00:21:52.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""because there are, there was a system I was""" start="00:21:58.260" video="qanda-emms" id="subtitle"]]
+[[!template text="""looking at its code for researching stuff for""" start="00:22:02.060" video="qanda-emms" id="subtitle"]]
+[[!template text="""EMS And I'm trying to remember what it's""" start="00:22:04.480" video="qanda-emms" id="subtitle"]]
+[[!template text="""named. It begins with a J,""" start="00:22:05.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""it's this media player,""" start="00:22:07.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""free floss media player that it's like a""" start="00:22:13.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""media server that can cast to a television""" start="00:22:17.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""and stuff like that. And I asked it to""" start="00:22:20.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""automatically label things and the results""" start="00:22:24.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""were horrible. It thought that half of my""" start="00:22:28.180" video="qanda-emms" id="subtitle"]]
+[[!template text="""songs were movies. It thought that JPEGs were""" start="00:22:32.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""songs. It just, it did some,""" start="00:22:35.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""it did incredibly, it's not a solved problem,""" start="00:22:40.520" video="qanda-emms" id="subtitle"]]
+[[!template text="""I think. So the, what I'm thinking with""" start="00:22:44.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""MusicBrainz and those services is that you""" start="00:22:49.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""hit a button and you have you get another""" start="00:22:51.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""pane with a suggestion and you either and you""" start="00:22:57.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""can copy through you can say okay copy this""" start="00:22:59.060" video="qanda-emms" id="subtitle"]]
+[[!template text="""and this in this field over or reject the""" start="00:23:01.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""suggestion and maybe get another 1.""" start="00:23:03.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""So,""" start="00:23:04.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah, I like that a lot.""" start="00:23:07.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""That's more like a diff,""" start="00:23:09.160" video="qanda-emms" id="subtitle"]]
+[[!template text="""right? Like you get the diff between the 2""" start="00:23:11.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""and you can apply which changes you like.""" start="00:23:13.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""Yeah. Was it Jellyfin?""" start="00:23:15.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""Is that... Jellyfin? Yeah,""" start="00:23:18.220" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Jellyfin, yes.""" start="00:23:19.460" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah, And when that happened,""" start="00:23:22.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""did it clobber all your metadata?""" start="00:23:24.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""Or does it just label stuff?""" start="00:23:27.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 2]: No, it...""" start="00:23:28.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Escalate things somewhere inside it and to""" start="00:23:38.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""looking for really, not allow me to do very""" start="00:23:49.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""easily. So I was, so, you know,""" start="00:23:54.640" video="qanda-emms" id="subtitle"]]
+[[!template text="""on 1 hand, it makes me feel,""" start="00:23:56.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""oh, we're not the only ones dealing with""" start="00:23:58.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""this. We're not the only ones struggling with""" start="00:24:00.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""this. On the other hand,""" start="00:24:01.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""it would be nice if that's a paragon that we""" start="00:24:05.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""can look to and say, this is a wonderful way""" start="00:24:08.460" video="qanda-emms" id="subtitle"]]
+[[!template text="""of doing it. Let's incorporate as much of""" start="00:24:11.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah, it's a tricky problem,""" start="00:24:15.180" video="qanda-emms" id="subtitle"]]
+[[!template text="""especially if you're modifying people's media""" start="00:24:18.220" video="qanda-emms" id="subtitle"]]
+[[!template text="""files you know so""" start="00:24:19.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: that as we can. yeah I'm also very convinced""" start="00:24:23.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""that so I'm not a mainframe for MMS because""" start="00:24:31.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""I'm old and curmudgeonly essentially in my,""" start="00:24:35.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""in the way they do it.""" start="00:24:37.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""And honestly, I rarely ever,""" start="00:24:40.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""I use the MMS browser when I need to debug""" start="00:24:42.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""the MS browser. I don't,""" start="00:24:44.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""I use very simple commands and I even rarely""" start="00:24:48.740" video="qanda-emms" id="subtitle"]]
+[[!template text="""look at the playlists.""" start="00:24:50.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""That was 1 of the things because when I got""" start="00:24:53.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""into MMS originally when my eyesight started""" start="00:24:56.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""going so I had to rely less and less on GUI""" start="00:24:59.640" video="qanda-emms" id="subtitle"]]
+[[!template text="""interfaces. So that was,""" start="00:25:02.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""so to this day that's how I use EMMS.""" start="00:25:06.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah, it's interesting.""" start="00:25:08.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""I remember running into a browser bug because""" start="00:25:13.260" video="qanda-emms" id="subtitle"]]
+[[!template text="""I think just my age, like,""" start="00:25:15.480" video="qanda-emms" id="subtitle"]]
+[[!template text="""I want to be able to tab through and like""" start="00:25:18.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""that was a huge that that changed recently""" start="00:25:20.060" video="qanda-emms" id="subtitle"]]
+[[!template text="""right where you tab and it unfolds in the""" start="00:25:22.640" video="qanda-emms" id="subtitle"]]
+[[!template text="""browser but yeah I realized that people use""" start="00:25:27.620" video="qanda-emms" id="subtitle"]]
+[[!template text="""emms in so many different ways just like any""" start="00:25:30.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""piece of emacs there's there's many ways to""" start="00:25:36.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""do it but appreciate your time I'm gonna""" start="00:25:39.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""actually put together this Christmas tree""" start="00:25:41.880" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 0]: So. Wonderful.""" start="00:25:43.400" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 3]: behind me. Yeah, just wanted to say hi,""" start="00:25:45.260" video="qanda-emms" id="subtitle"]]
+[[!template text="""meet you in person. But yeah.""" start="00:25:50.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, excellent. I appreciate it a lot and we""" start="00:25:54.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""generate""" start="00:25:55.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 2]: some interesting questions.""" start="00:25:59.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""Yeah, thank you.""" start="00:26:00.780" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 4]: You are currently the only person in this""" start="00:26:03.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""conference.""" start="00:26:03.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm going to have a look at the questions""" start="00:26:13.480" video="qanda-emms" id="subtitle"]]
+[[!template text="""here.""" start="00:26:14.060" video="qanda-emms" id="subtitle"]]
+[[!template text="""Let's see. Let's see. So there is,""" start="00:26:29.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""okay. There's a question here.""" start="00:26:32.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""I like what you said about balancing the""" start="00:26:34.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""concern for software freedom with the worry""" start="00:26:36.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""that this might alienate the package user.""" start="00:26:38.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""I wonder if you have advice for other""" start="00:26:39.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""maintainers how to communicate this sort of""" start="00:26:41.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""thing diplomatically? Yes,""" start="00:26:43.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""when you have to deny implementing a feature""" start="00:26:45.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""for a freedom reason. This in fact happens""" start="00:26:48.480" video="qanda-emms" id="subtitle"]]
+[[!template text="""all the time. A recent example of this was a""" start="00:26:56.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""YouTube download, right,""" start="00:26:58.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""the YouTube download feature.""" start="00:26:59.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""At the time, okay, so stepping back,""" start="00:27:04.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""the request was to have a YouTube download""" start="00:27:07.440" video="qanda-emms" id="subtitle"]]
+[[!template text="""feature integrated strongly into eMMS so that""" start="00:27:11.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""you put in a YouTube URL and you can download""" start="00:27:16.260" video="qanda-emms" id="subtitle"]]
+[[!template text="""the video and play it.""" start="00:27:17.640" video="qanda-emms" id="subtitle"]]
+[[!template text="""And the question isn't really whether you can""" start="00:27:22.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""chain YouTube Downloader or 1 of those things""" start="00:27:24.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""into your EMMS configuration.""" start="00:27:26.600" video="qanda-emms" id="subtitle"]]
+[[!template text="""You can do whatever you want.""" start="00:27:28.140" video="qanda-emms" id="subtitle"]]
+[[!template text="""But the question is, does EMMS actually""" start="00:27:30.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""integrate with it really,""" start="00:27:33.340" video="qanda-emms" id="subtitle"]]
+[[!template text="""really strongly to the extent where it tells""" start="00:27:35.740" video="qanda-emms" id="subtitle"]]
+[[!template text="""you oh you don't need to download install""" start="00:27:37.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""please go ahead and install that or whatever""" start="00:27:40.320" video="qanda-emms" id="subtitle"]]
+[[!template text="""and at the time we checked it we found out""" start="00:27:43.740" video="qanda-emms" id="subtitle"]]
+[[!template text="""that you know the version that we were""" start="00:27:45.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""looking at of the YouTube download or YTDLP""" start="00:27:49.280" video="qanda-emms" id="subtitle"]]
+[[!template text="""or whatever it was called,""" start="00:27:51.720" video="qanda-emms" id="subtitle"]]
+[[!template text="""actually downloaded a good amount of""" start="00:27:56.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""proprietary JavaScript onto your machine and""" start="00:27:59.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""ran it, just as if you were going on to the""" start="00:28:02.300" video="qanda-emms" id="subtitle"]]
+[[!template text="""YouTube page, which is not for me to tell""" start="00:28:06.560" video="qanda-emms" id="subtitle"]]
+[[!template text="""people not to do if they want to do that,""" start="00:28:09.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""but it's absolutely for me not to cause to""" start="00:28:16.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""happen on the user's machine without them.""" start="00:28:18.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""1 of the last thing that I want to do in the""" start="00:28:21.480" video="qanda-emms" id="subtitle"]]
+[[!template text="""world is have a user inside Emacs press a""" start="00:28:25.980" video="qanda-emms" id="subtitle"]]
+[[!template text="""button and have proprietary software get""" start="00:28:29.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""downloaded behind their back and run on their""" start="00:28:32.300" video="qanda-emms" id="subtitle"]]
+[[!template text="""machine that would be disastrous so we had to""" start="00:28:38.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""say no we had to say that's I'm sorry that's""" start="00:28:41.380" video="qanda-emms" id="subtitle"]]
+[[!template text="""beyond the pale and in fact in doing so some""" start="00:28:47.060" video="qanda-emms" id="subtitle"]]
+[[!template text="""people who were using this system said,""" start="00:28:51.100" video="qanda-emms" id="subtitle"]]
+[[!template text="""actually I had no idea it was doing this""" start="00:28:53.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""behind my back. I thought it was just magic.""" start="00:28:56.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""I thought it was a YouTube video without any""" start="00:28:58.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""freedom issues. I'm going to look into it or""" start="00:29:01.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""I'm going to stop using it.""" start="00:29:03.120" video="qanda-emms" id="subtitle"]]
+[[!template text="""So my advice would be Stand firm and just be""" start="00:29:11.180" video="qanda-emms" id="subtitle"]]
+[[!template text="""Not not preachy. Don't tell people what they""" start="00:29:15.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""need to do be very clear about what you stand""" start="00:29:19.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""for and what the project stands for,""" start="00:29:21.900" video="qanda-emms" id="subtitle"]]
+[[!template text="""and so they very clearly know where you""" start="00:29:28.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""stand. And I think that people actually""" start="00:29:30.460" video="qanda-emms" id="subtitle"]]
+[[!template text="""appreciate that more than a political answer,""" start="00:29:36.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""right? That has been my experience.""" start="00:29:43.540" video="qanda-emms" id="subtitle"]]
+[[!template text="""Now, excuse me, taking into account that 1 or""" start="00:29:49.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""2 people will tell you,""" start="00:29:52.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""this is terrible. I'm leaving.""" start="00:29:54.960" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 2]: If you do this,""" start="00:30:00.550" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 1]: This is useless. you're free software or""" start="00:30:01.460" video="qanda-emms" id="subtitle"]]
+[[!template text="""whatever, and just leave.""" start="00:30:03.400" video="qanda-emms" id="subtitle"]]
+[[!template text="""But some people are ornery.""" start="00:30:05.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""That's not necessarily something bad that you""" start="00:30:09.360" video="qanda-emms" id="subtitle"]]
+[[!template text="""did. But that has happened.""" start="00:30:11.680" video="qanda-emms" id="subtitle"]]
+[[!template text="""There are multiple stories.""" start="00:30:14.200" video="qanda-emms" id="subtitle"]]
+[[!template text="""Because the MMS is so old,""" start="00:30:16.840" video="qanda-emms" id="subtitle"]]
+[[!template text="""there are multiple points in which non-free""" start="00:30:20.080" video="qanda-emms" id="subtitle"]]
+[[!template text="""software intersected with the EMS because of""" start="00:30:23.940" video="qanda-emms" id="subtitle"]]
+[[!template text="""multimedia and we had to go the other""" start="00:30:28.580" video="qanda-emms" id="subtitle"]]
+[[!template text="""direction and so far it has served EMS well""" start="00:30:33.300" video="qanda-emms" id="subtitle"]]
+[[!template text="""like the project has died as a result.""" start="00:30:38.240" video="qanda-emms" id="subtitle"]]
+[[!template text="""Of course, can't prove a negative,""" start="00:30:39.800" video="qanda-emms" id="subtitle"]]
+[[!template text="""don't know where we would be if we had taken,""" start="00:30:42.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""gone down that route. I'm pretty sure we""" start="00:30:44.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""would need a new ELPA,""" start="00:30:46.100" video="qanda-emms" id="subtitle"]]
+[[!template text="""and I think being so clearly integrated with""" start="00:30:50.860" video="qanda-emms" id="subtitle"]]
+[[!template text="""emacs is a huge benefit to eMMS because it's""" start="00:30:55.040" video="qanda-emms" id="subtitle"]]
+[[!template text="""it allows people to install it very easily.""" start="00:30:57.660" video="qanda-emms" id="subtitle"]]
+[[!template text="""And those are all the questions that I can""" start="00:31:08.760" video="qanda-emms" id="subtitle"]]
+[[!template text="""see.""" start="00:31:09.020" video="qanda-emms" id="subtitle"]]
+[[!template text="""[Speaker 2]: You""" start="00:31:15.060" video="qanda-emms" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emms%3A%20Emacs%20MultiMedia%20System%20%28EMMS%29)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/emms-before.md b/2023/info/emms-before.md
new file mode 100644
index 00000000..d45449c6
--- /dev/null
+++ b/2023/info/emms-before.md
@@ -0,0 +1,46 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 39-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="emms-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emms-mainVideo" data="""
+00:00.000 Introduction
+01:03.320 The structure of this talk
+01:21.320 Introduction to Emms: The practical part
+08:04.240 The modeline
+11:01.200 Meta-playlist mode
+11:29.860 The browser
+13:19.920 How Emms works: The technical part
+16:23.820 The Emms core
+16:36.440 Tracks
+17:18.460 Playlist
+18:22.080 Sources
+19:22.160 Players
+20:20.520 Info
+21:36.660 The cache
+22:51.620 Healthy back and forth: mpv, mpd, and GNU.FM
+23:31.560 MPV
+24:47.470 MPD
+26:07.440 GNU FM and Libre FM
+27:12.560 How we work: Emms development
+28:52.590 The Rime Of The Ancient Maintainer
+29:06.080 The life and times of an Emms patch
+31:24.080 Let It Go: The release process
+32:23.400 It Is Not In Our Stars, But In Ourselves: Future directions
+34:44.849 Development policies: Interface language
+36:05.980 Development policies: Freedom
+38:12.370 Acknowledgements
+
+"""]]<div></div>Duration: 38:38 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.opus">Download --main.opus (21MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm">Download --main.webm (139MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin.outline">Download .outline</a></li><li><a href="https://toobnix.org/w/ppdF62LysvxpXgZVaeF9wk">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="emms-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="emms-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus"></audio></div><div></div>Duration: 32:38 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus">Download --answers.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm">Download --answers.webm (52MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/emms-nav.md b/2023/info/emms-nav.md
new file mode 100644
index 00000000..31d2bfad
--- /dev/null
+++ b/2023/info/emms-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/cubing">Speedcubing in Emacs</a>
+Next by track: <a href="/2023/talks/steno">Programming with steno</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/eval-after.md b/2023/info/eval-after.md
new file mode 100644
index 00000000..d82abf2a
--- /dev/null
+++ b/2023/info/eval-after.md
@@ -0,0 +1,231 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="eval-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:04.880" video="mainVideo-eval" id="subtitle"]]
+
+[[!template text="""Hello, and welcome to EmacsConf 2023!""" start="00:00:04.880" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""My name is Musa Al-hassy,""" start="00:00:10.001" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and I will be talking about &quot;REPL-driven development.&quot;""" start="00:00:12.109" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I like programming languages so much.""" start="00:00:15.549" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I want to use them all over the place.""" start="00:00:18.269" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I got a PhD in the topic.""" start="00:00:20.269" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So let's just dive in.""" start="00:00:23.069" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""This is a lightning talk,""" start="00:00:25.349" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""so the details will be available in the repository.""" start="00:00:27.949" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Links to longer videos and GIFs""" start="00:00:31.309" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""for those who are interested.""" start="00:00:33.469" video="mainVideo-eval" id="subtitle"]]
+
+[[!template new="1" text="""The wonders of C-x C-e""" start="00:00:35.989" video="mainVideo-eval" id="subtitle"]]
+
+[[!template text="""So the wonderful thing about Emacs""" start="00:00:35.989" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""is that you can execute Lisp anywhere.""" start="00:00:37.309" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""For example, I can go to this piece of Lisp,""" start="00:00:40.589" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""press Ctrl-x Ctrl-e (`C-x C-e`)""" start="00:00:42.829" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and get a little pop-up.""" start="00:00:45.576" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Alright, so here I pressed `C-x C-e`""" start="00:00:47.549" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and this is what it ran.""" start="00:00:49.669" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""And what this package gives you""" start="00:00:51.389" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""is the same ability""" start="00:00:52.776" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""for any language of your choosing.""" start="00:00:54.509" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So for example, here is some Java,""" start="00:00:56.909" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and I bound it to Ctrl-x, Ctrl-j (`C-x C-j`).""" start="00:00:59.229" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So I say `C-x C-j`, and this runs some code,""" start="00:01:02.469" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and over here I get a little pop-up.""" start="00:01:07.149" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""The wonderful thing about""" start="00:01:13.709" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""being able to run code from anywhere""" start="00:01:15.069" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""is that you can keep it in normal text files""" start="00:01:16.829" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""or any kind of file you like.""" start="00:01:19.029" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""For example, you can have hyperlinks,""" start="00:01:20.629" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""as it were…, like this one.""" start="00:01:23.669" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""`C-x C-e`, and now we can see this down here.""" start="00:01:25.109" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Learn about it.""" start="00:01:28.549" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""But being able to run other languages besides Emacs""" start="00:01:30.789" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""lets us do some interesting things.""" start="00:01:34.189" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""For example, in the middle of a JavaScript program,""" start="00:01:36.149" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""you might write a line like this. `C-x C-n`.""" start="00:01:39.589" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""And that says down here""" start="00:01:43.429" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""`javascript-eval` in the mode line,""" start="00:01:45.229" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and so this just checks that some endpoint""" start="00:01:47.269" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""is working as intended.""" start="00:01:49.643" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So you don't need to use an external tool""" start="00:01:51.189" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""to check endpoints.""" start="00:01:52.749" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""You can just use Emacs in your favorite language.""" start="00:01:53.589" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""You know, you can keep your spirit up.""" start="00:01:57.469" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So, `C-x C-a` runs `applescript-eval`.""" start="00:01:59.629" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""[Computer]: You can do it, buddy.""" start="00:02:03.709" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""[Musa]: Maybe you heard that in the background?""" start="00:02:06.376" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""The cool thing is, your code immediately takes form.""" start="00:02:13.269" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Right away, you see it doing things, you know,""" start="00:02:15.389" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""altering your environment.""" start="00:02:18.469" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""For example, this is JavaScript,""" start="00:02:20.349" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and JavaScript here is gonna change Emacs for us.""" start="00:02:24.429" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So `C-x C-n`. And you can see down here""" start="00:02:28.349" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""`javascript-eval` was invoked.""" start="00:02:32.109" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""It returned true, and this line of JavaScript""" start="00:02:34.669" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""altered our Emacs. So that's really nice.""" start="00:02:38.789" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So you don't need to use just Emacs Lisp if you like.""" start="00:02:41.709" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""You can use other systems.""" start="00:02:43.749" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""As you saw, the output is shown in overlays.""" start="00:02:46.149" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So here's, for example, `C-x C-p` to run""" start="00:02:50.069" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""some Python code.""" start="00:02:52.869" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Notice it blinked in red""" start="00:02:54.109" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""because I thought red was nice.""" start="00:02:55.476" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""You can configure as you like.""" start="00:02:56.869" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""And if you hover over it,""" start="00:02:58.389" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""you can see the solution there,""" start="00:02:59.409" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and you can see it in a variety of familiar ways""" start="00:03:01.869" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""if you use `C-x C-e` regularly.""" start="00:03:04.669" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""You can insert the results.""" start="00:03:08.709" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""You can find documentation about them.""" start="00:03:09.989" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""The idea here is that""" start="00:03:14.269" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""you have this familiar Lisp workflow""" start="00:03:15.989" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""with `C-x C-e`, and this package ports it over""" start="00:03:20.389" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""to your favorite language out.""" start="00:03:24.989" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So you can eval things,""" start="00:03:27.069" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""you can insert them, and do as you like.""" start="00:03:28.343" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I think that's really neat.""" start="00:03:30.789" video="mainVideo-eval" id="subtitle"]]
+
+[[!template new="1" text="""An overview of REPL Driven Development""" start="00:03:35.809" video="mainVideo-eval" id="subtitle"]]
+
+[[!template text="""This package allows you to do""" start="00:03:35.809" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""REPL driven development.""" start="00:03:37.209" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""In that, you can use it to grow your program.""" start="00:03:39.109" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""You don't need to restart it.""" start="00:03:42.309" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""You can see changes live.""" start="00:03:43.709" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So here's, for example, this is in a Java runtime.""" start="00:03:45.549" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""You can see some balls bouncing around.""" start="00:03:50.149" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I don't really know which one is the second one,""" start="00:03:52.869" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""but let's increase its size. `C-x C-j`.""" start="00:03:54.509" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""And this one increased in size,""" start="00:03:57.229" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and you can see down here I pressed `C-x C-j`.""" start="00:04:00.189" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Let's change the color to blue,""" start="00:04:02.189" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""`C-x C-j`, the color is blue.""" start="00:04:05.549" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So all these changes are happening live.""" start="00:04:09.309" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Three balls isn't really a ball pit.""" start="00:04:12.376" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Let's go to 50 balls. There you go.""" start="00:04:14.429" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So it's nice that you can do this""" start="00:04:18.989" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""without leaving your environment,""" start="00:04:21.469" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""without building, you can rapidly modify and see.""" start="00:04:23.209" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I think that's nice.""" start="00:04:26.189" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Unfortunately, I'm at the halfway point,""" start="00:04:29.776" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""so I won't be able to work through""" start="00:04:32.829" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""some of these nice problems,""" start="00:04:35.309" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""but you can see the videos""" start="00:04:37.109" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""or GIFs on the associated repo.""" start="00:04:38.676" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Likewise for this one.""" start="00:04:41.509" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""This one would have been a lot of fun,""" start="00:04:42.709" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""but unfortunately, we're running short on time.""" start="00:04:43.909" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Apologies.""" start="00:04:46.509" video="mainVideo-eval" id="subtitle"]]
+
+[[!template new="1" text="""REPL Driven Development with Java""" start="00:04:51.143" video="mainVideo-eval" id="subtitle"]]
+
+[[!template text="""The neat thing here is: this package tries to""" start="00:04:51.143" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""bring the feeling of Lisp to other languages.""" start="00:04:56.209" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So the idea of a REPL, or a Read Eval Print Loop""" start="00:05:00.269" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""is R and P are data interchange protocols.""" start="00:05:03.509" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Unfortunately, not every language has those,""" start="00:05:06.949" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""but this package kind of encourages us to""" start="00:05:09.869" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""implement them if we don't have them.""" start="00:05:12.709" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Let me show you an example.""" start="00:05:14.643" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""What do I mean here?""" start="00:05:16.909" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""This is a Java file.""" start="00:05:20.589" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I've loaded this definition in.""" start="00:05:22.709" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""We can press `C-x C-j`,""" start="00:05:25.189" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and you see it's a list of person.""" start="00:05:28.543" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I didn't give this a name, so its name is $59.""" start="00:05:30.909" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""If I hover over it, we can see the definition again.""" start="00:05:33.829" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So it's a person called Hamid, age 5,""" start="00:05:40.829" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""another person called Jaafar, age 6.""" start="00:05:44.429" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""This pretty printing is nice for me as a human,""" start="00:05:46.229" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""but I can't execute this. This isn't valid Java.""" start="00:05:52.229" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So I could do `C-u C-x C-j`.""" start="00:05:56.349" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""If I have the help of a read protocol inserted.""" start="00:06:00.609" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Sorry, `C-x C-j`. There it is.""" start="00:06:05.109" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So look, it gives me a `new Person`""" start="00:06:09.469" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""with the construction everything.""" start="00:06:12.549" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Now I can work with.""" start="00:06:14.349" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Java can work with this.""" start="00:06:16.549" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""So this can be quite useful for regression testing""" start="00:06:17.949" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""or just to find out what your method spits out.""" start="00:06:21.709" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""We can do the same thing. Here's a bigger example.""" start="00:06:25.749" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Trying to see it in the overlay is a bit cramped.""" start="00:06:29.869" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""We can say `C-u C-x C-j`.""" start="00:06:32.389" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""All right, and now we have executable code.""" start="00:06:34.589" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Okay, this is neat.""" start="00:06:38.669" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""If you want to do something with it.""" start="00:06:40.876" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I'm not really interested. I have four new persons.""" start="00:06:42.389" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""If I really want to look at this,""" start="00:06:45.789" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I can say `M-x java-eval-navigate-output`,""" start="00:06:49.309" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and now I see my output as this hierarchical tree.""" start="00:06:55.649" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I go down, I can see what's inside these,""" start="00:07:00.829" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""what's the type of this thing, what's in there.""" start="00:07:03.589" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""All right, so that's nice.""" start="00:07:06.709" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""The idea is that we're not limited to""" start="00:07:09.349" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""just textual output.""" start="00:07:14.189" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""We can render output,""" start="00:07:15.629" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""thanks to the power of Emacs, in any way we want.""" start="00:07:19.589" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""In a browser, in a LaTeX file, in an Org mode (file),""" start="00:07:22.229" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""however we really desire.""" start="00:07:26.749" video="mainVideo-eval" id="subtitle"]]
+
+[[!template new="1" text="""Bring your own Read Protocol""" start="00:07:28.029" video="mainVideo-eval" id="subtitle"]]
+
+[[!template text="""And if our language doesn't have an easy protocol,""" start="00:07:28.029" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""so what I did for Java in particular was:""" start="00:07:32.989" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""you take a blob, and you use some""" start="00:07:36.143" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""parsing expression grammars, or if you really want""" start="00:07:38.643" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""regular expression pattern matching,""" start="00:07:43.149" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and you get some property list out,""" start="00:07:44.949" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and then you construct an executable expression""" start="00:07:46.829" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""out of that. Like this `new Person`.""" start="00:07:51.349" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""It's nice that you can do these kind of things""" start="00:07:53.149" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and that this software encourages you to do them.""" start="00:07:56.749" video="mainVideo-eval" id="subtitle"]]
+
+[[!template new="1" text="""Use Case: RDD & Job Interviews""" start="00:07:59.669" video="mainVideo-eval" id="subtitle"]]
+
+[[!template text="""So one use case I actually use""" start="00:07:59.669" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""besides learning things is…""" start="00:08:07.549" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""oops oops oopsies oopsies showing you metadata""" start="00:08:10.909" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""you shouldn't be looking at.""" start="00:08:14.776" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Don't look at my metadata. Sorry about that.""" start="00:08:15.509" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""One place I actually use this besides learning""" start="00:08:19.409" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and trying new libraries and APIs""" start="00:08:23.209" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and stuff like that is,""" start="00:08:25.029" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""for example, when I interviewed for jobs""" start="00:08:26.776" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""last year (I was changing jobs),""" start="00:08:29.509" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I would share my screen,""" start="00:08:33.229" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and if the interviewer gave me""" start="00:08:34.676" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""some inputs and outputs to play with,""" start="00:08:37.869" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I could do essentially""" start="00:08:39.949" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""some sort of test driven development""" start="00:08:41.576" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and constantly evaluate things""" start="00:08:42.976" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""right in front of the interviewer.""" start="00:08:45.149" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""For some design questions""" start="00:08:46.589" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""rather than sketching out my ideas in a Google Doc,""" start="00:08:49.949" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I would share my screen and be like,""" start="00:08:53.909" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""&quot;Hey, here's actual executable code,""" start="00:08:55.509" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""we can stub some things out""" start="00:08:57.989" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and have some types,&quot;""" start="00:08:59.229" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and the idea is we can still check things""" start="00:09:00.576" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and run them right there and then,""" start="00:09:03.476" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""which I thought was quite nice, and it helps to""" start="00:09:05.643" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""clarify your thought process, I guess.""" start="00:09:08.143" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Anyhow, so that's my time,""" start="00:09:10.309" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""I hope you've enjoyed this little package,""" start="00:09:15.149" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""and again, sorry for the rush,""" start="00:09:19.829" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""it's a lightning talk.""" start="00:09:22.869" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Feel free to find everything on the associated repo.""" start="00:09:24.149" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""And have a wonderful December Saturday.""" start="00:09:29.069" video="mainVideo-eval" id="subtitle"]]
+[[!template text="""Take care! Bye bye, everyone.""" start="00:09:34.389" video="mainVideo-eval" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+Questions or comments? Please e-mail [Alhassy@gmail.com](mailto:Alhassy@gmail.com?subject=Comment%20for%20EmacsConf%202023%20eval%3A%20Editor%20Integrated%20REPL%20Driven%20Development%20for%20all%20languages)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/eval-before.md b/2023/info/eval-before.md
new file mode 100644
index 00000000..3ea735b8
--- /dev/null
+++ b/2023/info/eval-before.md
@@ -0,0 +1,20 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 10-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Status: All done
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="eval-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="eval-mainVideo" data="""
+00:04.880 Introduction
+00:35.989 The wonders of C-x C-e
+03:35.809 An overview of REPL Driven Development
+04:51.143 REPL Driven Development with Java
+07:28.029 Bring your own Read Protocol
+07:59.669 Use Case: RDD & Job Interviews
+
+"""]]<div></div>Duration: 09:37 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.opus">Download --main.opus (4.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/74srjNx1cgMr5MsJ9NWNNi">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/eval-nav.md b/2023/info/eval-nav.md
new file mode 100644
index 00000000..346bbc65
--- /dev/null
+++ b/2023/info/eval-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/overlay">Improving compiler diagnostics with overlays</a>
+Next by track: <a href="/2023/talks/repl">REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/extending-after.md b/2023/info/extending-after.md
new file mode 100644
index 00000000..69f918bb
--- /dev/null
+++ b/2023/info/extending-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20extending%3A%20GNU%20Emacs%20for%20electronics%2C%20note-taking%2C%20and%20as%20lightweight%20IDE)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/extending-before.md b/2023/info/extending-before.md
new file mode 100644
index 00000000..376dee32
--- /dev/null
+++ b/2023/info/extending-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 20-min talk followed by live web conference Q&A
+Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Status: Waiting for video from speaker
+
+
+
+
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/extending-nav.md b/2023/info/extending-nav.md
new file mode 100644
index 00000000..5a84a12c
--- /dev/null
+++ b/2023/info/extending-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/test">What I learned by writing test cases for GNU Hyperbole</a>
+Next by track: <a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/flat-after.md b/2023/info/flat-after.md
new file mode 100644
index 00000000..c743ddf6
--- /dev/null
+++ b/2023/info/flat-after.md
@@ -0,0 +1,262 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="flat-mainVideo-transcript"></a>
+# Transcript (unedited)
+
+[[!template text="""That's how I came into this.""" start="00:00:01.880" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Finally, the next big thing was starting""" start="00:00:10.120" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""2005, I went fully Linux and then for Mac OS,""" start="00:00:16.100" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""and I switched to vanilla self-compiled""" start="00:00:19.540" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""versions of Emacs. So what do I want to show?""" start="00:00:25.279" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Couple of time ago in the development list""" start="00:00:30.540" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""there was a short exchange about the nil and""" start="00:00:34.540" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the flood button, flood button button styles,""" start="00:00:38.400" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""saying that it was equivalent and they are""" start="00:00:42.480" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""not. So instead of starting a Flame Wars,""" start="00:00:45.480" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I thought it was better to go and publicize""" start="00:00:49.220" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the goodies you get with Flood Button.""" start="00:00:54.520" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And this is what I'm going to be showing you""" start="00:00:57.260" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""practically. Why Flood Button?""" start="00:01:00.140" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""2005, more or less, I came across DOOM Emacs,""" start="00:01:06.020" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""which was nice. And I,""" start="00:01:07.660" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""especially I liked the DOOM mode line,""" start="00:01:12.180" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""which was, I think it is,""" start="00:01:13.740" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""it is, and it was cool at that time.""" start="00:01:15.560" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I was using other themes and it was not that""" start="00:01:20.280" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""easy to adapt for these other themes and even""" start="00:01:23.760" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""less when you are in an environment with""" start="00:01:26.080" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""dynamic themes like mine because I tend to""" start="00:01:30.060" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""adapt the theme to the light conditions in my""" start="00:01:36.500" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""working place. So what I did at the end was""" start="00:01:40.520" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""coming up with a style for faces called flood""" start="00:01:44.540" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""button for boxes, called flood button as a""" start="00:01:49.020" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""simple way to get modern looking buttons and""" start="00:01:52.640" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""bars. So flood button is a face style for""" start="00:01:59.160" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""boxes within buttons that automatically sets""" start="00:02:02.380" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the border color to the background of the""" start="00:02:05.240" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""face, as opposed to nil,""" start="00:02:08.440" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""which uses the foreground.""" start="00:02:10.440" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And this produces a very doom mode line-ish""" start="00:02:14.380" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""look and feel. And if you want to know where""" start="00:02:18.400" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I use it, basically for the mode line and I'm""" start="00:02:21.580" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""using tab line for a long time now.""" start="00:02:24.720" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So for the mode line and for tab line to""" start="00:02:28.480" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""organize my windows. And since an image is""" start="00:02:35.080" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""worth more than a thousand words,""" start="00:02:37.160" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I'm just going to stop this and start sharing""" start="00:02:40.860" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""a small Emacs environment I have ready for""" start="00:02:44.120" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""this talk where I'm going to show you a flat""" start="00:02:47.020" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""button in real life. So if you hold with me,""" start="00:02:50.220" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I'm going to share a window.""" start="00:02:56.100" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""It's going to be this 1.""" start="00:02:58.840" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Share and share. Here we are.""" start="00:03:01.386" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And share. Here we are.""" start="00:03:01.780" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So this is an Emacs which is recent,""" start="00:03:08.040" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""reasonably recent. Nothing especially it was""" start="00:03:13.460" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""compiled, it's Emacs 30.""" start="00:03:14.900" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And I think what I have here is something""" start="00:03:18.480" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""that I compiled last weekend.""" start="00:03:19.900" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I was tempted to use something compiled this""" start="00:03:24.940" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""morning, but I saw a patch by Ellie regarding""" start="00:03:28.080" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""something in the faces and I didn't want to""" start="00:03:30.640" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""live a too risky life here,""" start="00:03:34.160" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""so I'm going to use this.""" start="00:03:36.220" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I'm not starting the ZMAC from the normal""" start="00:03:40.740" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Emacs directory. I have my own,""" start="00:03:44.160" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I have a special customization directory for""" start="00:03:49.440" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Emacs, and this is this 1.""" start="00:03:51.560" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And here what I have is basically an early""" start="00:03:57.760" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""init and an init. So the early init,""" start="00:04:01.880" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""which is quite stupid as you see,""" start="00:04:03.680" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the only thing that it does is getting rid of""" start="00:04:07.800" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""most of the things that I'm not going to be""" start="00:04:10.640" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""using here. So I have no toolbar,""" start="00:04:12.740" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""no scroll bar, no tool tips.""" start="00:04:15.700" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I don't like global highlighting my line art,""" start="00:04:20.560" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""so I'm not using that.""" start="00:04:21.720" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I'm not using dialogues.""" start="00:04:22.800" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And to start up easier,""" start="00:04:25.560" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I don't inhibit, I don't use any startups""" start="00:04:29.440" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""screen. So just to make sure that everything""" start="00:04:34.540" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""is correct, that everything is as I want,""" start="00:04:41.360" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""just to show you my Emacs.""" start="00:04:44.840" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""As you see the Emacs 30,""" start="00:04:49.240" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""which was built on the 26th of November which""" start="00:04:53.900" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""was not very long ago.""" start="00:04:55.520" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And now here comes the real magic.""" start="00:04:57.880" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""My init and my init file.""" start="00:05:00.540" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Maybe I go to my init file here.""" start="00:05:04.020" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""What I have is just a variable saying that I""" start="00:05:11.880" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""want an extra 8 pixels for my mode line.""" start="00:05:15.880" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And I have 2 functions.""" start="00:05:18.240" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""1 is modifying the mode line,""" start="00:05:23.800" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""both the active and the inactive,""" start="00:05:25.920" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""using the nil style with this line width of 8""" start="00:05:32.180" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""pixels and to compare with it what I have""" start="00:05:36.380" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""here is another function which will customize""" start="00:05:39.140" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the face for mode line and instead of using""" start="00:05:42.400" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""nil I'm using here flat button.""" start="00:05:44.960" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So this is my all the magic that I need.""" start="00:05:49.440" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I'm going to copy that and I'm going to go to""" start="00:05:53.240" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the scratch buffer which is always the best""" start="00:05:57.340" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""way of checking these things.""" start="00:05:58.780" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""When I normally work with themes,""" start="00:06:05.660" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""what I do is if I want to further modify the""" start="00:06:09.320" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""themes, I add an advice to load a theme after""" start="00:06:13.620" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the theme is loaded. In this first case,""" start="00:06:17.800" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""what I'm going to be doing is adding the nil""" start="00:06:21.280" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""sign so that you can see it.""" start="00:06:22.680" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And once this is done,""" start="00:06:30.240" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I'm going to load 1 of the Modo Soprandi""" start="00:06:33.000" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""themes, the tinted 1. Here we are.""" start="00:06:42.600" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And as you can see, when I loaded the theme,""" start="00:06:56.400" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""what I see here is my mode line with the""" start="00:07:01.880" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""x-ray pixels using since I'm using the nil""" start="00:07:05.320" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""style it's using the background color and""" start="00:07:09.520" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""this gives you this thick black line there""" start="00:07:12.620" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""furthermore if you have the inactive line you""" start="00:07:17.080" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""see that it is grayed out so it's always""" start="00:07:20.660" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""using the foreground color.""" start="00:07:22.800" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So now what I'm going to do is to load the""" start="00:07:33.300" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""models we have any which is the dark theme""" start="00:07:35.200" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""and this case what you see is the love deal""" start="00:07:40.080" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the lines always using the foreground color""" start="00:07:43.220" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""use the Give you an extra 8 pixels of a white""" start="00:07:49.200" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""color here, which is not what we really want.""" start="00:07:53.000" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""At least not what I wanted to have.""" start="00:07:58.900" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So what I'm going to do now is I'm going to""" start="00:08:01.560" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""remove this advice and add the flat style""" start="00:08:08.940" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""thing, flat style function,""" start="00:08:12.800" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""so that we're going to do the same.""" start="00:08:15.480" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""But now when I load the themes I'm going to""" start="00:08:18.380" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""have a flat button style for the mode line""" start="00:08:20.760" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""and you'll see the difference.""" start="00:08:21.880" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So if I now load Modo Software Andy theme,""" start="00:08:29.480" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""tint it, what I get here is as you see I get""" start="00:08:35.380" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""a solid mode line which is a bit more which""" start="00:08:40.520" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""is wider than the normal mode line And if I""" start="00:08:49.240" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""go to the dark theme, I am going to see,""" start="00:08:53.140" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""you're going to see that now the theme""" start="00:08:55.440" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""changes and I have a mode line which is,""" start="00:08:59.860" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""if not the doom mode line,""" start="00:09:02.700" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""quite close to the Doom mode line.""" start="00:09:08.260" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Where do I use this? Personally,""" start="00:09:11.200" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I use it for the mode line and for the tab""" start="00:09:15.280" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""line, as I've said. And it gives me this""" start="00:09:18.960" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""clean themes with thicker mode line and tab""" start="00:09:27.040" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""lines which at least in my personal feeling""" start="00:09:33.620" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""look quite modern. And this will be my""" start="00:09:40.160" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""demonstration. So I'm going to stop sharing""" start="00:09:43.820" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the screen and I'm going to try and see if""" start="00:09:46.820" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""there's anything on the on the chat.""" start="00:09:49.400" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And I just wanted to know if there are any""" start="00:09:57.040" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""questions. Thank you Pedro.""" start="00:10:01.240" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Yeah We are now into the Q&A portion of the""" start="00:10:05.000" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""talk. So if folks have questions,""" start="00:10:06.420" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""please post them on IRC or on the pad and""" start="00:10:10.080" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""we'll take them up here.""" start="00:10:11.040" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Okay, I see a question here saying,""" start="00:10:25.400" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""do you plan to upstream the style into""" start="00:10:28.520" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""core-remix? It's part of core-remix since""" start="00:10:32.580" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Emacs 29, so you have it.""" start="00:10:35.800" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""How difficult to...I mean,""" start="00:10:49.060" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""you already have the flat button style in""" start="00:10:54.320" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Core Remax. And you've seen that the main""" start="00:10:57.660" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""thing is, if you want to have a thing like""" start="00:11:00.740" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""that, you just have to customize the face.""" start="00:11:06.660" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I don't think it's too difficult to do.""" start="00:11:10.920" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""It's adding the style that you want.""" start="00:11:13.380" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So if you want to see it again,""" start="00:11:17.360" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I'm going to go and share the screen once""" start="00:11:20.860" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""again and show you the only thing that you""" start="00:11:23.980" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""really need to do. And control X 1,""" start="00:11:31.740" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""control X buffer to init.""" start="00:11:34.680" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So this is what you would have to do to get""" start="00:11:41.040" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""your mode line or mode line inactive with a""" start="00:11:48.880" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""flat button style. So what you do is you get""" start="00:11:52.360" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""your face like this, the face that you want""" start="00:11:56.120" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""to modify. You say that you inherit from the""" start="00:11:59.640" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""original face and what you do is that you add""" start="00:12:02.920" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""a box with the line width that you want and""" start="00:12:06.820" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the style plug button.""" start="00:12:08.040" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I don't think it's too difficult to do.""" start="00:12:10.900" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""How much work was involved in implementing""" start="00:12:23.100" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""this style? It is not 1 of the biggest""" start="00:12:27.360" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""patches you have in Emacs.""" start="00:12:28.940" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""It was my first patch,""" start="00:12:32.260" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""so it was like 20 liners.""" start="00:12:34.500" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""It's not too much. Yes,""" start="00:12:40.280" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I am going to go and...""" start="00:12:44.540" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Oops. SKB and... There you are.""" start="00:12:54.733" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And there you are. I've checked it for copy""" start="00:12:58.660" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""and paste. Of course, then what you have to""" start="00:13:05.440" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""do is to add an advice and add this thing""" start="00:13:09.440" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""after the add this code after the well after""" start="00:13:16.680" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""you've loaded the theme.""" start="00:13:17.760" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""It says, ModeLine and ModeLineInactive.""" start="00:13:22.420" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I'm also using it for TabLine and""" start="00:13:27.400" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""TabLineInactive and all this kind of things.""" start="00:13:29.820" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Thanks.""" start="00:13:30.060" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Thanks. Any other questions?""" start="00:14:00.660" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Reactions? Thank you. Thank you.""" start="00:14:35.020" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Okay, I think we still have about 6 or 7 more""" start="00:15:04.160" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""minutes of live Q&A on stream,""" start="00:15:05.840" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""so if folks have any more questions,""" start="00:15:07.400" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""please do feel free to post them on the pad.""" start="00:15:09.940" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Silence. Silence. Silence.""" start="00:15:30.060" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Well, do you teach eMAX to any of your""" start="00:16:02.280" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""university students? As such,""" start="00:16:04.700" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""there's no course that we teach,""" start="00:16:08.080" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""but in tutorships and in tutoring sessions,""" start="00:16:12.800" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""when we do practical things,""" start="00:16:15.460" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""and I do a lot, I tend to use Emacs for all""" start="00:16:21.100" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""the tasks so that the students get involved""" start="00:16:24.480" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""in it. I also have a small introduction to""" start="00:16:28.220" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Emacs that I share with my students.""" start="00:16:29.640" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So So every year I have 2 or 3 new adepts.""" start="00:16:33.400" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""We have a question on IRC.""" start="00:17:43.900" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Someone asking can you please show what the""" start="00:17:46.920" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""tab line looks like? Just a second.""" start="00:17:53.160" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""This would be like this.""" start="00:17:56.880" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""For that I'm going to use my regular Emacs.""" start="00:18:03.096" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Just my my regular emacs so just let me fire""" start="00:18:06.220" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""it up. Sure.""" start="00:18:09.220" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""And""" start="00:18:23.540" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""That's my current situation with the tab""" start="00:18:39.760" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""line. I do have a couple of functions.""" start="00:18:42.660" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So this is 1 of the things that I use.""" start="00:18:44.680" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""As you see, both the tab line here and the""" start="00:18:51.500" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""mode line change. And the other thing is I""" start="00:18:57.040" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""can, this is for some situations,""" start="00:19:00.520" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""not currently because it's just later,""" start="00:19:03.600" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""it's a bit too dark. But this is for light""" start="00:19:06.420" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""days. I have like 3 or 4 themes that I can""" start="00:19:10.260" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""switch to these are the themes that I""" start="00:19:15.020" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""normally use This is how the tab line looks.""" start="00:19:18.120" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""This is how the tab line here looks with the""" start="00:19:22.660" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""with a flat button style.""" start="00:19:28.280" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Looks great, Thank you for sharing.""" start="00:19:35.640" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""You're welcome.""" start="00:19:37.200" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Okay, I think we have 2 or 3 more minutes.""" start="00:19:50.720" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""So if folks, if you have any final questions""" start="00:19:53.600" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""for Pedro, please post them in.""" start="00:19:55.480" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Okay. Okay.""" start="00:20:37.360" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Okay.""" start="00:20:54.260" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""No further questions. Yeah,""" start="00:21:34.540" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""it seems we don't have any further questions.""" start="00:21:36.380" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Just another audience member also thanking""" start="00:21:39.100" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""you on the chat. So with that,""" start="00:21:44.060" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""I'll say Thank you very much,""" start="00:21:45.320" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Pedro, for your great talk and for the Q&A,""" start="00:21:47.080" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""for your work and for helping spreading the""" start="00:21:50.220" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""joy of Emacs. Okay, thanks.""" start="00:21:52.360" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Thank you. Bye-bye. It was a nice experience""" start="00:21:56.140" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""here. Very nice tool. Cheers.""" start="00:21:59.200" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Awesome. Take care. Bye.""" start="00:22:01.640" video="mainVideo-flat" id="subtitle"]]
+[[!template text="""Bye. Bye.""" start="00:22:02.720" video="mainVideo-flat" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20flat%3A%20A%20modern%20Emacs%20look-and-feel%20without%20pain)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/flat-before.md b/2023/info/flat-before.md
new file mode 100644
index 00000000..fdae80b7
--- /dev/null
+++ b/2023/info/flat-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 23-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="flat-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 22:20 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1DRDY8vZK3SW5M8zAPJQSp">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/flat-nav.md b/2023/info/flat-nav.md
new file mode 100644
index 00000000..02ba0748
--- /dev/null
+++ b/2023/info/flat-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/world">GNU Emacs: A World of Possibilities</a>
+Next by track: <a href="/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/gc-after.md b/2023/info/gc-after.md
new file mode 100644
index 00000000..90c0a853
--- /dev/null
+++ b/2023/info/gc-after.md
@@ -0,0 +1,964 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="gc-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-gc" id="subtitle"]]
+
+[[!template text="""Hello everyone, my name is Ihor Radchenko,""" start="00:00:00.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and you may know me from Org Mailing List.""" start="00:00:04.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""However, today I'm not going to talk about Org Mode.""" start="00:00:07.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Today I'm going to talk about""" start="00:00:09.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Emacs performance and how it's affected""" start="00:00:11.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""by its memory management code.""" start="00:00:14.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""First, I will introduce the basic concepts""" start="00:00:19.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of Emacs memory management and what garbage collection is.""" start="00:00:21.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Then I will show you user statistics""" start="00:00:26.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""collected from volunteer users over the last half year""" start="00:00:30.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and I will end with some guidelines""" start="00:00:34.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""on how to tweak Emacs garbage collection customizations""" start="00:00:39.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to optimize Emacs performance""" start="00:00:44.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and when it's necessary or not to do.""" start="00:00:47.480" video="mainVideo-gc" id="subtitle"]]
+
+[[!template new="1" text="""About garbage collection in Emacs""" start="00:00:51.080" video="mainVideo-gc" id="subtitle"]]
+
+[[!template text="""Let's begin. What is garbage collection?""" start="00:00:51.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""To understand what is garbage collection,""" start="00:00:54.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we need to realize that anything you do in Emacs""" start="00:00:56.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is some kind of command. Any command is most likely""" start="00:00:59.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""running some Elisp code. Every time you run Elisp code,""" start="00:01:02.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you most likely need to locate certain memory in RAM.""" start="00:01:05.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Some of this memory is retained for a long time""" start="00:01:09.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and some of this memory is transient.""" start="00:01:12.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Of course, Emacs has to clear this transient memory""" start="00:01:15.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""from time to time, to not occupy all the possible RAM""" start="00:01:19.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""in the computer. In this small example,""" start="00:01:21.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we have one global variable""" start="00:01:21.448" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that is assigned a value,""" start="00:01:28.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but when assigning the value,""" start="00:01:31.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we first allocate a temporary variable""" start="00:01:33.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and then a temporary list""" start="00:01:35.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and only retain some part of this list""" start="00:01:37.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""in this global variable.""" start="00:01:40.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""In terms of memory graph""" start="00:01:42.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we can represent this as two variable slots,""" start="00:01:44.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""one transient, one permanent,""" start="00:01:50.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and then a list of three cons cells,""" start="00:01:53.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""part of which is retained as a global variable""" start="00:01:56.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but part of it which is a temporary variable symbol.""" start="00:02:01.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""The first term of the list is not used""" start="00:02:05.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and it might be cleared at some point.""" start="00:02:07.680" video="mainVideo-gc" id="subtitle"]]
+
+[[!template new="1" text="""Garbage collection in Emacs""" start="00:02:09.760" video="mainVideo-gc" id="subtitle"]]
+
+[[!template text="""So that's what Emacs does.""" start="00:02:09.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Every now and then, Emacs goes through all the memory""" start="00:02:12.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and identifies which part of the memory are not used""" start="00:02:15.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and then clear them so that it can free up the RAM.""" start="00:02:19.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""This process is called garbage collection""" start="00:02:23.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and Emacs uses a very simple and old algorithm""" start="00:02:25.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is called Mark & Sweep.""" start="00:02:28.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So doing this mark and sweep process""" start="00:02:30.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is basically two stages.""" start="00:02:33.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""First, Emacs scans all the memory that is allocated""" start="00:02:34.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and then identifies which memory is still in use""" start="00:02:40.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is linked to some variables, for example,""" start="00:02:42.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and which memory is not used anymore""" start="00:02:45.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""even though it was allocated in the past.""" start="00:02:47.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""The second stage [??] whenever a memory is not,""" start="00:02:49.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that is not allocated. During the process""" start="00:02:53.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Emacs cannot do anything now.""" start="00:02:59.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So basically, every time Emacs scans the memory,""" start="00:03:00.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it freezes up and doesn't respond to anything,""" start="00:03:04.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and if it takes too much time so that users can notice it,""" start="00:03:07.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then of course Emacs is not responsive at all,""" start="00:03:10.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and if this garbage collection is triggered too frequently,""" start="00:03:13.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then it's not just not responsive every now and then.""" start="00:03:19.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""It's also not responsive all the time,""" start="00:03:22.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""almost all the time,""" start="00:03:24.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so it cannot even normally type or stuff""" start="00:03:26.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or do some normal commands.""" start="00:03:27.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""This mark and sweep algorithm is taking longer""" start="00:03:32.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""the more memory Emacs uses. So basically,""" start="00:03:36.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""the more buffers you open, the more packages you load,""" start="00:03:40.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""the more complex commands you run, the more memory is used,""" start="00:03:44.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and basically, the longer Emacs takes""" start="00:03:48.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to perform a single garbage collection.""" start="00:03:52.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Of course, Emacs being Emacs""" start="00:03:57.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""this garbage collection can be tweaked.""" start="00:04:02.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""In particular users can tweak""" start="00:04:06.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""how frequently Emacs does garbage collection""" start="00:04:08.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""using two basic variables: `gc-cons-threshold`""" start="00:04:10.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and `gc-cons-percentage`.""" start="00:04:13.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""`gc-cons-threshold` is the raw number of kilobytes""" start="00:04:15.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Emacs needs to allocate""" start="00:04:21.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""before triggering another garbage collection,""" start="00:04:22.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and the `gc-cons-percentage` is similar,""" start="00:04:25.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but it's defined in terms of fraction""" start="00:04:27.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of already-allocated memory.""" start="00:04:30.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""If you follow various Emacs forums,""" start="00:04:34.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you may be familiar with people complaining about""" start="00:04:38.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""garbage collection. There are many many suggestions""" start="00:04:41.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""about what to do with it.""" start="00:04:46.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Most frequently, you see `gc-cons-threshold`""" start="00:04:48.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""recommended to be increased,""" start="00:04:54.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and a number of pre-packaged Emacs distributions""" start="00:04:56.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like Doom Emacs do increase it.""" start="00:05:01.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""I have seen suggestions which are actually horrible""" start="00:05:04.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to disable garbage collection temporarily""" start="00:05:07.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or for a long time.""" start="00:05:10.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Which is nice... You can see it quite frequently,""" start="00:05:14.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which indicates there might be some problem.""" start="00:05:17.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""However, every time one user poses about this problem,""" start="00:05:19.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's just one data point and it doesn't mean""" start="00:05:23.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that everyone actually suffers from it.""" start="00:05:26.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""It doesn't mean that everyone should do it.""" start="00:05:28.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So in order to understand if this garbage collection""" start="00:05:33.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is really a problem which is a common problem""" start="00:05:35.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we do need some kind of statistics""" start="00:05:39.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and only using the actual statistics""" start="00:05:44.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we can understand if it should be recommended for everyone""" start="00:05:46.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to tweak the defaults or like whether""" start="00:05:52.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it should be recommended for certain users""" start="00:05:55.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or maybe it should be asked Emacs devs""" start="00:05:57.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to do something about the defaults.""" start="00:05:59.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""And what I did some time ago is exactly this.""" start="00:06:01.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""I tried to collect the user statistics.""" start="00:06:07.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So I wrote a small package on Elp""" start="00:06:09.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and some users installed this package""" start="00:06:14.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and then reported back these statistics""" start="00:06:18.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of the garbage collection for their particular use.""" start="00:06:22.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""By now we have obtained 129 user submissions""" start="00:06:24.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""with over 1 million GC records in there.""" start="00:06:30.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So like some of these submissions""" start="00:06:34.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""used default GC settings without any customizations.""" start="00:06:38.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Some used increased GC cost threshold""" start="00:06:43.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and GC cost percentage.""" start="00:06:46.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So using this data we can try to draw""" start="00:06:47.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""some reliable conclusions on what should be done""" start="00:06:53.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and whether should anything be done about garbage collection""" start="00:06:56.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""on Emacs dev level or at least on user level.""" start="00:06:59.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Of course we need to keep in mind""" start="00:07:02.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that there's some kind of bias""" start="00:07:05.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because it's more likely""" start="00:07:07.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that users already have problems with GC""" start="00:07:09.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or they think they have problems with GC""" start="00:07:11.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""will report and submit the data.""" start="00:07:13.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""But anyway having s statistics is much more useful""" start="00:07:15.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""than just having anecdotal evidences""" start="00:07:20.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""from one or other reddit posts.""" start="00:07:22.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""And just one thing I will do""" start="00:07:25.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""during the rest of my presentation""" start="00:07:28.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is that for all the statistics""" start="00:07:30.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""I will normalize user data""" start="00:07:32.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so that every user contributes equally.""" start="00:07:35.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""For example if one user submits like""" start="00:07:37.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""100 hours Emacs uptime statistics""" start="00:07:40.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and other users submit one hour Emacs uptime""" start="00:07:43.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then I will anyway make it so that they contribute equally.""" start="00:07:46.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Let's start from one of the most obvious things""" start="00:07:52.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we can look into is""" start="00:07:56.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is the time it takes for garbage collection""" start="00:07:57.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to single garbage collection process.""" start="00:08:00.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Here you see frequency distribution of GC duration""" start="00:08:05.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""for all the 129 users we got""" start="00:08:11.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and you can see that most of the garbage collections""" start="00:08:15.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""are done quite quickly in less than 0.1 second""" start="00:08:22.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and less than 0.1 second is usually just not noticeable.""" start="00:08:27.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So even though there is garbage collection""" start="00:08:32.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it will not interrupt the work in Emacs.""" start="00:08:34.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""However there is a fraction of users""" start="00:08:39.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""who experience garbage collection""" start="00:08:43.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it takes like 0.2, 0.3 or even half a second""" start="00:08:45.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which will be quite noticeable.""" start="00:08:48.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""For the purposes of this study""" start="00:08:50.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""I will consider that anything that is less than 0.1 second""" start="00:08:55.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is insignificant so like you will not notice it""" start="00:08:59.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and it's like obviously""" start="00:09:02.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""all the Emacs usage will be just normal.""" start="00:09:04.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""But if it's more than 0.1 or 0.2 seconds""" start="00:09:07.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then it will be very noticeable""" start="00:09:11.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and you will see that Emacs hang for a little while""" start="00:09:13.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or not so little while. In terms of numbers""" start="00:09:16.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's better to plot the statistics not as a distribution""" start="00:09:21.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but as a cumulative distribution.""" start="00:09:26.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So like at every point of this graph""" start="00:09:28.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you'll see like for example here 0.4 seconds""" start="00:09:31.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you have this percent of like almost 90% of users""" start="00:09:37.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""have no more than 0.4 gc duration.""" start="00:09:42.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So like we can look here if we take one""" start="00:09:49.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""gc critical gc duration which is 0.1 second""" start="00:09:53.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""0.1 second and look at how many users have""" start="00:09:56.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it so we have 56% which is like""" start="00:10:00.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""44% users have less than 0.1 second gc duration""" start="00:10:02.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and the rest 56% have more than 0.1 second.""" start="00:10:09.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So you can see like more than half of users""" start="00:10:12.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""actually have noticeable gc delay""" start="00:10:16.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so the Emacs freezes for some noticeable time""" start="00:10:20.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and a quarter of users actually have very noticeable""" start="00:10:23.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so like Emacs freezes such that you see an actual delay""" start="00:10:27.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that Emacs actually has""" start="00:10:31.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is quite significant and important point.""" start="00:10:36.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""But apart from the duration of each individual gc""" start="00:10:44.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it is important to see how frequent it is""" start="00:10:47.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because even if you do notice a delay""" start="00:10:49.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""even a few seconds delay""" start="00:10:52.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it doesn't matter if it happens once""" start="00:10:54.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""during the whole Emacs session.""" start="00:10:57.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So if you look into frequency distribution again here""" start="00:10:59.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""I plot time between subsequent garbage collections""" start="00:11:05.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""versus how frequent it is and we have very clear trend""" start="00:11:13.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that most of the garbage collections are quite frequent""" start="00:11:17.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like we talk about every few seconds a few tens of seconds.""" start="00:11:21.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""There's a few outliers which are at very round numbers""" start="00:11:25.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like 60 seconds, 120 seconds, 300 seconds.""" start="00:11:30.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""These are usually timers so like""" start="00:11:35.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you have something running on timer""" start="00:11:37.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and then it is complex command""" start="00:11:40.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and it triggers garbage collection""" start="00:11:43.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but it's not the majority.""" start="00:11:45.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Again to run the numbers""" start="00:11:48.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's better to look into cumulative distribution""" start="00:11:51.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and see that 50% of garbage collections""" start="00:11:53.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""are basically less than 10 seconds apart.""" start="00:11:56.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""And we can combine it with previous data""" start="00:11:58.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and we look into whatever garbage collection""" start="00:12:02.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""takes less than 10 seconds from each other""" start="00:12:07.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and also takes more than say 0.1 seconds.""" start="00:12:09.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So and then we see that""" start="00:12:13.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""one quarter of all garbage collections""" start="00:12:15.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""are just noticeable and also frequent""" start="00:12:17.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and 9% are not like""" start="00:12:21.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""more than 0.2% very noticeable and also frequent.""" start="00:12:23.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So basically it constitutes Emacs freezing.""" start="00:12:27.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So 9% of all the garbage collection Emacs freezing.""" start="00:12:30.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Of course if you remember there is a bias""" start="00:12:33.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but 9% is quite significant number.""" start="00:12:37.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So garbage collection can really slow down things""" start="00:12:40.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""not for everyone but for significant fraction of users.""" start="00:12:44.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Another thing I'd like to look into""" start="00:12:48.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is what I call agglomerated GCs.""" start="00:12:52.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""What I mean by agglomerated is""" start="00:12:55.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""when you have one garbage collection""" start="00:12:57.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and then another garbage immediately after it.""" start="00:13:00.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So in terms of numbers I took""" start="00:13:03.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""every subsequent garbage collection""" start="00:13:05.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is either immediately after""" start="00:13:08.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or no more than one second after each.""" start="00:13:10.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So from point of view of users is like""" start="00:13:13.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""multiple garbage collection they add up together""" start="00:13:16.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""into one giant garbage collection.""" start="00:13:20.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""And if you look into numbers""" start="00:13:23.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of how many agglomerated garbage collections there are""" start="00:13:25.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you can see even numbers over 100.""" start="00:13:29.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So 100 garbage collection going one after another.""" start="00:13:32.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Even if you think about each garbage collection""" start="00:13:35.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""taking 0.1 second we look into 100 of them""" start="00:13:39.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's total 10 seconds.""" start="00:13:42.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""It's like Emacs hanging forever""" start="00:13:44.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or like a significant number is also 10.""" start="00:13:46.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So again this would be very annoying to meet such thing.""" start="00:13:53.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""How frequently does it happen?""" start="00:13:56.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Again we can plot cumulative distribution""" start="00:13:57.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and we see that 20 percent like 19 percent""" start="00:14:00.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of all the garbage collection are at least two together""" start="00:14:03.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and 8 percent like more than 10. So like you think about oh""" start="00:14:07.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""each garbage collection is not taking much time""" start="00:14:13.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but when you have 10 of them yeah that becomes a problem.""" start="00:14:15.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Another thing is to answer a question""" start="00:14:24.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that some people complain about is that""" start="00:14:29.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""longer you use Emacs the slower Emacs become.""" start="00:14:32.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Of course it may be caused by garbage collection""" start="00:14:35.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and I wanted to look into how garbage collection time""" start="00:14:43.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and other statistics,""" start="00:14:48.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""other parameters are evolving over time.""" start="00:14:49.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""And what I can see here is a cumulative distribution""" start="00:14:53.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of GC duration for like first 10 minutes of Emacs uptime""" start="00:14:58.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""first 100 minutes first 1000 minutes.""" start="00:15:03.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""And if you look closer then you see""" start="00:15:06.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that each individual garbage collection on average""" start="00:15:10.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""takes longer as you use Emacs longer.""" start="00:15:14.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""However this longer is not much it's like maybe 10 percent""" start="00:15:18.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like basically garbage collection gets like""" start="00:15:24.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""slow Emacs down more as you use Emacs more but not much.""" start="00:15:29.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So basically if you do you see Emacs""" start="00:15:34.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""being slower and slower over time""" start="00:15:38.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's probably not really garbage collection""" start="00:15:40.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because it doesn't change too much.""" start="00:15:43.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""And if you look into time""" start="00:15:45.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""between individual garbage collections""" start="00:15:48.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and you see that the time actually increases""" start="00:15:50.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""as you use Emacs longer which makes sense""" start="00:15:53.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because initially like first few minutes""" start="00:15:56.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you have all kind of packages loading""" start="00:15:58.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like all the port loading and then later""" start="00:16:01.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""everything is loaded and things become more stable.""" start="00:16:04.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So the conclusion on this part is that""" start="00:16:07.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""if Emacs becomes slower in a long session""" start="00:16:12.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's probably not caused by garbage collection.""" start="00:16:16.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""And one word of warning of course is that""" start="00:16:18.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's all nice and all when I present the statistics""" start="00:16:23.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but it's only an average""" start="00:16:27.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and if you are an actual user like here is one example""" start="00:16:29.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which shows a total garbage collection time""" start="00:16:34.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like accumulated together over Emacs uptime""" start="00:16:37.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and you see different lines""" start="00:16:40.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which correspond to different sessions of one user""" start="00:16:43.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and you see they are wildly different""" start="00:16:45.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like one time there is almost no garbage collection""" start="00:16:48.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""another time you see garbage collection""" start="00:16:51.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because probably Emacs is used more early""" start="00:16:54.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or like different pattern of usage""" start="00:16:57.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and even during a single Emacs session""" start="00:16:59.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you see a different slope""" start="00:17:03.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of this curve which means that""" start="00:17:04.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""sometimes garbage collection is infrequent""" start="00:17:06.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and sometimes it's much more frequent""" start="00:17:09.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so it's probably much more noticeable one time""" start="00:17:11.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and less noticeable other time.""" start="00:17:14.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""So if you think about these statistics of course""" start="00:17:15.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""they only represent an average usage""" start="00:17:19.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but sometimes it can get worse sometimes it can get better.""" start="00:17:23.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""The last parameter I'd like to talk about is""" start="00:17:26.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""garbage collection during Emacs init.""" start="00:17:33.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Basically if you think about what happens during Emacs init""" start="00:17:35.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like when Emacs just starting up""" start="00:17:40.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then whatever garbage collection""" start="00:17:41.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""there it's one or it's several times""" start="00:17:44.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it all contributes to Emacs taking longer to start.""" start="00:17:46.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""And again we can look into the statistic""" start="00:17:51.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and see what is the total GC duration after Emacs init""" start="00:17:56.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and we see that 50% of all the submissions""" start="00:18:01.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""garbage collection adds up more than one second""" start="00:18:06.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to Emacs init time and for 20% of users""" start="00:18:10.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's extra three seconds Emacs start time""" start="00:18:14.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is very significant""" start="00:18:17.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""especially for people who are used to Vim""" start="00:18:18.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which can start in like a fraction of a second""" start="00:18:21.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and here it just does garbage collection""" start="00:18:23.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because garbage collection is not""" start="00:18:26.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""everything Emacs does during startup""" start="00:18:27.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""adds up more to the load.""" start="00:18:29.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Okay that's all nice and all""" start="00:18:32.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but what can we do about these statistics""" start="00:18:36.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""can we draw any conclusions""" start="00:18:38.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and the answer is of course""" start="00:18:40.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like the most important conclusion here is that""" start="00:18:43.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""yes garbage collection can slow down Emacs""" start="00:18:46.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""at least for some people and what to do about it""" start="00:18:49.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""there are two variables which you can tweak""" start="00:18:52.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's because gcconce threshold gcconce percentage""" start="00:18:55.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and having the statistics I can at least look a little bit""" start="00:18:58.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""into what is the effect of increasing these variables""" start="00:19:03.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like most people just increase gcconce threshold""" start="00:19:08.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and like all the submissions people did increase""" start="00:19:12.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and doesn't make much sense to decrease it""" start="00:19:16.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like to make things worse""" start="00:19:19.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of course for these statistics""" start="00:19:21.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""the exact values of this increased thresholds""" start="00:19:27.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""are not always the same""" start="00:19:31.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but at least we can look into some trends""" start="00:19:33.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so first and obvious thing we can observe""" start="00:19:36.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is when we compare""" start="00:19:44.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""the standard gc settings standard thresholds""" start="00:19:46.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and increased thresholds for time between""" start="00:19:50.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""subsequent gcs and as one may expect""" start="00:19:54.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""if you increase the threshold""" start="00:19:57.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Emacs will do garbage collection less frequently""" start="00:19:59.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so the spacing between garbage collection increases""" start="00:20:02.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""okay the only thing is that""" start="00:20:05.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""if garbage collection is less frequent""" start="00:20:07.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then each individual garbage collection becomes longer""" start="00:20:10.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so if you think about increasing""" start="00:20:14.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""garbage collection thresholds be prepared""" start="00:20:18.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that in each individual time Emacs freezes will take longer""" start="00:20:22.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""this is one caveat when we talk about""" start="00:20:26.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""this agglomerated gcs which are one after other""" start="00:20:31.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like if you increase the threshold sufficiently""" start="00:20:34.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then whatever happened that garbage collections""" start="00:20:36.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""were like done one after other""" start="00:20:42.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we can now make it so that they are actually separated""" start="00:20:44.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so like you don't see one giant freeze caused by""" start="00:20:47.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like 10 gcs in a row""" start="00:20:51.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""instead you can make it so that they are separated""" start="00:20:52.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and in statistics it's very clear""" start="00:20:55.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that the number of agglomerated garbage collections""" start="00:20:59.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""decreases dramatically when you increase the thresholds""" start="00:21:02.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's particularly evident when we look into startup time""" start="00:21:06.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""if you look at gc duration during Emacs startup""" start="00:21:11.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and if we look into what happens""" start="00:21:17.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""when you increase the thresholds""" start="00:21:19.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's very clear that Emacs startup become faster""" start="00:21:20.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""when you increase gc thresholds""" start="00:21:23.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so that's all for actual user statistics""" start="00:21:26.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and now let's try to run into""" start="00:21:33.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""some like actual recommendations""" start="00:21:35.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""on what numbers to set and before we start""" start="00:21:38.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""let me explain a little bit about""" start="00:21:42.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""the difference between these two variables""" start="00:21:44.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is gc constant threshold and gc constant percentage""" start="00:21:46.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so if you think about Emacs memory""" start="00:21:48.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like there's a certain memory allocated by Emacs""" start="00:21:52.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and then as you run commands and turn using Emacs""" start="00:21:55.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""there is more memory allocated""" start="00:21:58.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and Emacs decides when to do garbage collection""" start="00:22:00.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""according these two variables""" start="00:22:04.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and actually what it does it chooses the larger one""" start="00:22:06.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so say you have you are late in Emacs session""" start="00:22:08.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you have a lot of Emacs memory allocated""" start="00:22:12.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then you have gc constant percentage""" start="00:22:14.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is percent of the already allocated memory""" start="00:22:17.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and that percent is probably going to be the largest""" start="00:22:19.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because you have more memory""" start="00:22:25.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and memory means that percent of it is larger""" start="00:22:28.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so like you have a larger number cost""" start="00:22:32.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""by gc constant percentage""" start="00:22:36.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so in this scenario when Emacs session is already running""" start="00:22:37.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""for a long time and there is a lot of memory allocated""" start="00:22:43.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you have gc constant percentage""" start="00:22:45.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""controlling the garbage collection""" start="00:22:50.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""while early in Emacs there is not much memory placed""" start="00:22:52.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""Emacs just starting up then gc constant threshold""" start="00:22:55.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is controlling how frequently garbage collection happens""" start="00:22:58.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because smaller allocated memory""" start="00:23:01.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""means its percentage will be a small number""" start="00:23:04.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so in terms of default values at least""" start="00:23:06.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""gc constant threshold is 800 kilobytes""" start="00:23:12.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and gc constant percentage is 10""" start="00:23:14.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so gc constant percentage becomes larger than that threshold""" start="00:23:18.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""when you have more than eight megabytes of allocated memory""" start="00:23:24.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""by Emacs which is quite early""" start="00:23:28.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and it will probably hold just during the startup""" start="00:23:31.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and once you start using your maximum""" start="00:23:34.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and once you load all the histories""" start="00:23:36.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""all the kinds of buffers it's probably going to take""" start="00:23:38.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""more than much more than eight megabytes""" start="00:23:42.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so now we understand this""" start="00:23:43.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we can draw certain recommendations""" start="00:23:50.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""about tweaking the gc thresholds""" start="00:23:53.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so first of all I need to emphasize""" start="00:23:57.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that any time you increase gc threshold""" start="00:24:01.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""an individual garbage collection time increases""" start="00:24:03.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so it's not free at all""" start="00:24:07.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""if you don't have problems with garbage collection""" start="00:24:08.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is half of the users don't have much problem""" start="00:24:11.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you don't need to tweak anything""" start="00:24:13.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""only when gc is frequent and slow""" start="00:24:15.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""when Emacs is really really present frequently""" start="00:24:19.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you may consider increasing gc thresholds only""" start="00:24:23.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and in particular I recommend""" start="00:24:27.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""increasing gc constant percentage""" start="00:24:31.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because that's what mostly controls gc""" start="00:24:33.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""when Emacs is running for long session""" start="00:24:36.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and the numbers are probably like""" start="00:24:40.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""yeah we can estimate the effect of these numbers""" start="00:24:43.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like for example if you have a default value of 0.1 percent""" start="00:24:46.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""for gc constant percentage 0.1 which is 10 percent""" start="00:24:49.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and then increase it twice""" start="00:24:52.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""obviously you get twice less frequent gcs""" start="00:24:55.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but it will come at the cost of extra 10 percent gc time""" start="00:24:58.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and if you increase 10 times you can think about""" start="00:25:02.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""10 less 10 x less frequent gcs""" start="00:25:05.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but almost twice longer individual garbage collection time""" start="00:25:08.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so probably you want to set the number closer to 0.1""" start="00:25:12.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""another part of the users may actually""" start="00:25:16.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""try to optimize Emacs startup time""" start="00:25:23.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which is quite frequent problem""" start="00:25:28.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""in this case it's probably better to increase gc constant""" start="00:25:30.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but not too much so like""" start="00:25:34.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""first of all it makes sense to check""" start="00:25:38.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""whether garbage collection is a problem at all""" start="00:25:40.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""during startup and there are two variables""" start="00:25:43.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which can show what is happening this garbage collection""" start="00:25:46.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so gc done is a variable that shows""" start="00:25:50.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""how many garbage collection""" start="00:25:53.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like what is the number of garbage collections triggered""" start="00:25:55.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like when you check the value""" start="00:26:00.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or right after you start Emacs""" start="00:26:02.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you will see that""" start="00:26:04.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""number and gc elapsed variable""" start="00:26:04.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which gives you a number of seconds""" start="00:26:08.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which Emacs spent in doing garbage collection""" start="00:26:11.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so this is probably the most important variable""" start="00:26:14.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and if you see it's large then you may consider tweaking it""" start="00:26:16.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""for the Emacs startup we can estimate some bounds""" start="00:26:20.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because in the statistics I never saw anything""" start="00:26:26.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that is more than 10 seconds extra""" start="00:26:30.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""which even 10 seconds is probably like""" start="00:26:32.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""a really really hard upper bound so""" start="00:26:34.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or say if you want to decrease the gc contribution""" start="00:26:39.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like order of magnitude or like two orders of magnitudes""" start="00:26:44.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""let's say like as a really hard top estimate""" start="00:26:47.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then it corresponds to 80 megabytes gc constant""" start="00:26:50.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and probably much less so like""" start="00:26:55.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""there's no point setting it""" start="00:26:58.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to a few hundred megabytes of course""" start="00:27:00.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""there's one caveat which is important to keep in""" start="00:27:04.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""mind though that increasing the gc thresholds""" start="00:27:08.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is not just increasing individual gc time""" start="00:27:14.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""there's also an actual real impact on the RAM usage""" start="00:27:16.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so like if you increase gc threshold""" start="00:27:20.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it increases the RAM usage of Emacs""" start="00:27:23.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and you shouldn't think that like okay""" start="00:27:26.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""I increased the threshold by like 100 megabytes""" start="00:27:29.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then 100 megabytes extra RAM usage doesn't matter""" start="00:27:33.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's not 100 megabytes""" start="00:27:37.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because less frequent garbage collection means""" start="00:27:38.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it will lead to memory fragmentation""" start="00:27:42.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so in practice if you increase the thresholds""" start="00:27:45.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to tens or hundreds of megabytes""" start="00:27:50.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we are talking about gigabytes extra RAM usage""" start="00:27:52.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""for me personally when I tried to play with gc thresholds""" start="00:27:55.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""I have seen Emacs taking two gigabytes like""" start="00:27:59.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""compared to several times less""" start="00:28:02.880" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""when with default settings so it's not free at all""" start="00:28:05.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and only like either when you have a lot of free RAM""" start="00:28:09.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and you don't care or when your Emacs is really slow""" start="00:28:13.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then you may need to consider this""" start="00:28:16.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""tweaking these defaults so again don't tweak defaults""" start="00:28:19.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""if you don't really have a problem""" start="00:28:23.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and of course this RAM problem is a big big deal""" start="00:28:24.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""for Emacs devs because from from the point of single user""" start="00:28:29.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you have like normal laptop most likely like normal PC""" start="00:28:35.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""with a lot of RAM you don't care about these things too much""" start="00:28:38.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but Emacs in general can run on like all kinds of machines""" start="00:28:42.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""including low-end machines with very limited RAM""" start="00:28:49.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and anytime Emacs developers consider increasing""" start="00:28:51.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""the defaults for garbage collection""" start="00:28:55.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's like they always have to consider""" start="00:28:57.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""if you increase them too much""" start="00:29:01.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then Emacs may just stop running on certain platforms""" start="00:29:02.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so that's a very big consideration in terms""" start="00:29:07.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of the global defaults for everyone""" start="00:29:14.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""although I have to I would say that it might be related""" start="00:29:16.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to the safe to increase GCCons threshold""" start="00:29:22.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because it mostly affects startup and during startup""" start="00:29:24.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's probably not the peak usage of Emacs""" start="00:29:27.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and like as Emacs runs for longer""" start="00:29:31.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it's probably where most of RAM will be used later""" start="00:29:35.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""on the other hand GCCons percentage is much more debating""" start="00:29:38.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because it has pros and cons""" start="00:29:44.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it will increase the RAM usage""" start="00:29:46.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it will increase the individual GC time so""" start="00:29:47.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""if we consider changing it it's much more tricky""" start="00:29:51.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and we have discussing probably measure the impact on users""" start="00:29:56.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and a final note on or from the point of view""" start="00:29:59.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of Emacs development is""" start="00:30:05.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that this simple mark-and-sweep algorithm""" start="00:30:07.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is like a very old and not the state-of-the-art algorithm""" start="00:30:11.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""there are variants of garbage collection""" start="00:30:14.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that are like totally non-blocking""" start="00:30:17.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so Emacs just doesn't have to freeze""" start="00:30:19.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""during the garbage collection""" start="00:30:22.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""or there are variants of garbage collection algorithm""" start="00:30:24.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that do not scan all the memory just fraction of it""" start="00:30:26.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and scan another fraction less frequently""" start="00:30:30.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so there are actually ways just to change""" start="00:30:33.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""the garbage collection algorithm to make things much faster""" start="00:30:37.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""of course like just changing the numbers of variables""" start="00:30:39.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like the numbers of variable values""" start="00:30:44.200" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is much more tricky and one has to implement it""" start="00:30:47.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""obviously it would be nice if someone implements it""" start="00:30:50.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but so far it's not happening so yeah it would be nice""" start="00:30:52.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but maybe not not so quickly""" start="00:30:55.640" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""there is more chance to change the defaults here""" start="00:30:59.360" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to conclude let me reiterate the most important points""" start="00:31:02.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so from point of view of users you need to understand that""" start="00:31:07.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""yes garbage collection may be a problem""" start="00:31:11.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but not for everyone so like""" start="00:31:14.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you should only think about changing the variables""" start="00:31:16.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""when you really know that garbage collection""" start="00:31:21.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""is the problem for you so if you have slow Emacs startup""" start="00:31:23.560" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""slow Emacs startup and you know that it's caused by""" start="00:31:27.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""garbage collection like by""" start="00:31:30.920" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""you can check the GC elapsed variable""" start="00:31:32.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then you may increase GC count threshold""" start="00:31:36.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""like to few tens of megabytes not more""" start="00:31:39.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""it doesn't make sense to increase it much more""" start="00:31:42.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and if you really have major problems""" start="00:31:44.480" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""with Emacs being slaggy""" start="00:31:48.240" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""then you can increase GC count percentage""" start="00:31:49.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to like 0.2 0.3 maybe""" start="00:31:52.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""one is probably overkill""" start="00:31:56.000" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but do watch your Emacs ROM usage it may be really impacted""" start="00:31:57.680" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""for Emacs developers I'd like to emphasize""" start="00:32:02.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""that there is a real problem with garbage collection""" start="00:32:09.720" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and nine percent of all the garbage collection""" start="00:32:12.440" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""data points we have correspond""" start="00:32:17.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""to really slow noticeable Emacs precision""" start="00:32:22.080" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and really frequent less than 10 seconds""" start="00:32:24.960" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""I'd say that it's really worth""" start="00:32:28.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""increasing GC count threshold at least during startup""" start="00:32:32.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""because it really impacts the Emacs startup time""" start="00:32:35.280" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""making Emacs startup much faster""" start="00:32:40.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""ideally we need to reimplement""" start="00:32:41.520" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""the garbage collection algorithm of course it's not easy""" start="00:32:44.800" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""but it would be really nice""" start="00:32:48.600" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and for GC count percentage defaults it's hard to say""" start="00:32:50.160" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""we may consider changing it but it's up to discussion""" start="00:32:56.400" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and we probably need to be conservative here""" start="00:33:00.760" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""so we came to the end of my talk""" start="00:33:03.120" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and this presentation""" start="00:33:06.040" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""all the data will be available publicly""" start="00:33:09.320" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and you can reproduce all the statistic graphs if you wish""" start="00:33:11.840" video="mainVideo-gc" id="subtitle"]]
+[[!template text="""and thank you for attention""" start="00:33:17.080" video="mainVideo-gc" id="subtitle"]]
+
+<a name="gc-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: And then, hi everyone.""" start="00:00:01.620" video="qanda-gc" id="subtitle"]]
+[[!template text="""Thank you for your nice talk,""" start="00:00:03.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""I can say it's the Emacs GC.""" start="00:00:05.900" video="qanda-gc" id="subtitle"]]
+[[!template text="""We have some questions on the pad and maybe""" start="00:00:09.280" video="qanda-gc" id="subtitle"]]
+[[!template text="""before I would like to ask you something to""" start="00:00:11.580" video="qanda-gc" id="subtitle"]]
+[[!template text="""the last 1 you have said,""" start="00:00:12.780" video="qanda-gc" id="subtitle"]]
+[[!template text="""concerning changing the GC strategy,""" start="00:00:15.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""that it's unlikely that it will be happening""" start="00:00:18.500" video="qanda-gc" id="subtitle"]]
+[[!template text="""in the next time. Yeah.""" start="00:00:20.380" video="qanda-gc" id="subtitle"]]
+[[!template text="""Is there any discussion going on or why does""" start="00:00:22.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""the case it's not changing the strategy?""" start="00:00:24.320" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: It's mostly because it's difficult.""" start="00:00:26.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""I think, yesterday you heard from,""" start="00:00:29.439" video="qanda-gc" id="subtitle"]]
+[[!template text="""1 of the dev talks that like there was 1""" start="00:00:33.400" video="qanda-gc" id="subtitle"]]
+[[!template text="""small, short comment that,""" start="00:00:34.980" video="qanda-gc" id="subtitle"]]
+[[!template text="""oh yeah, it would be nice to change this""" start="00:00:36.780" video="qanda-gc" id="subtitle"]]
+[[!template text="""algorithm but it's hard.""" start="00:00:39.059" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: So I""" start="00:00:40.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: mean it's hard not because the algorithm is""" start="00:00:43.260" video="qanda-gc" id="subtitle"]]
+[[!template text="""that hard but because it's a very low level""" start="00:00:45.400" video="qanda-gc" id="subtitle"]]
+[[!template text="""code and it must be like very carefully""" start="00:00:48.000" video="qanda-gc" id="subtitle"]]
+[[!template text="""weighted. So that can be,""" start="00:00:49.960" video="qanda-gc" id="subtitle"]]
+[[!template text="""it needs to be made sure that the carousel""" start="00:00:53.239" video="qanda-gc" id="subtitle"]]
+[[!template text="""will work. It's all bugs.""" start="00:00:55.280" video="qanda-gc" id="subtitle"]]
+[[!template text="""If you have bugs and you can see that,""" start="00:00:57.440" video="qanda-gc" id="subtitle"]]
+[[!template text="""so it's nothing to work anymore.""" start="00:00:58.660" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: So We have a lot of RAM usage.""" start="00:01:00.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""Yeah. Maybe sometime.""" start="00:01:02.240" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: There was like years ago,""" start="00:01:06.180" video="qanda-gc" id="subtitle"]]
+[[!template text="""there was a branch on generational DC,""" start="00:01:09.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""if I remember correctly,""" start="00:01:11.100" video="qanda-gc" id="subtitle"]]
+[[!template text="""but they didn't go anywhere,""" start="00:01:13.380" video="qanda-gc" id="subtitle"]]
+[[!template text="""unfortunately.""" start="00:01:14.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's a pity. But let's come to the""" start="00:01:18.900" video="qanda-gc" id="subtitle"]]
+[[!template text="""questions on the pad. So the first 1 is,""" start="00:01:21.500" video="qanda-gc" id="subtitle"]]
+[[!template text="""are the GC duration statistics correlated""" start="00:01:24.340" video="qanda-gc" id="subtitle"]]
+[[!template text="""with users? I mean, does the same user""" start="00:01:27.340" video="qanda-gc" id="subtitle"]]
+[[!template text="""experience GC of various durations?""" start="00:01:29.440" video="qanda-gc" id="subtitle"]]
+[[!template text="""Or Do some users experience GC of a greater""" start="00:01:32.900" video="qanda-gc" id="subtitle"]]
+[[!template text="""0.26 exclusively, while others never""" start="00:01:36.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""experience them? So is it correlated to user""" start="00:01:40.440" video="qanda-gc" id="subtitle"]]
+[[!template text="""behavior? I guess you said it in your talk.""" start="00:01:43.780" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, If you talk formally,""" start="00:01:46.160" video="qanda-gc" id="subtitle"]]
+[[!template text="""then almost every user has like 1 or 2""" start="00:01:49.340" video="qanda-gc" id="subtitle"]]
+[[!template text="""occasions when GC takes more than 0.2""" start="00:01:51.500" video="qanda-gc" id="subtitle"]]
+[[!template text="""seconds, but it's like,""" start="00:01:53.040" video="qanda-gc" id="subtitle"]]
+[[!template text="""maybe something else is using CPU and that's""" start="00:01:56.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""why, but in practice, there are users who""" start="00:02:00.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""don't have problem. Half of them that that's""" start="00:02:04.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""who that's what I looked from statistics.""" start="00:02:05.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""And dry users who have like really big""" start="00:02:10.240" video="qanda-gc" id="subtitle"]]
+[[!template text="""problems, like 1 second GC time.""" start="00:02:12.520" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: This is dependent on you make some comments""" start="00:02:17.280" video="qanda-gc" id="subtitle"]]
+[[!template text="""on us in the talk, but could you like extract""" start="00:02:19.960" video="qanda-gc" id="subtitle"]]
+[[!template text="""on if it's a package, that's a problem or we""" start="00:02:23.000" video="qanda-gc" id="subtitle"]]
+[[!template text="""as a user behavior are there.""" start="00:02:24.780" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Usually it's something that is,""" start="00:02:30.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""okay. I'm sharing my screen now,""" start="00:02:33.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: It's coming on, give it like 2 to 3 seconds.""" start="00:02:37.580" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: right? Yeah. So I can just click through""" start="00:02:41.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""different user statistics.""" start="00:02:42.940" video="qanda-gc" id="subtitle"]]
+[[!template text="""So like you can see this duration for each""" start="00:02:48.840" video="qanda-gc" id="subtitle"]]
+[[!template text="""individual user basically.""" start="00:02:49.960" video="qanda-gc" id="subtitle"]]
+[[!template text="""So you can see like here for example it's""" start="00:02:54.240" video="qanda-gc" id="subtitle"]]
+[[!template text="""like averages around 0.25""" start="00:02:56.320" video="qanda-gc" id="subtitle"]]
+[[!template text="""seconds which is noticeable and here is like""" start="00:03:00.040" video="qanda-gc" id="subtitle"]]
+[[!template text="""0.1 like someone is all over the place,""" start="00:03:03.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""probably some. Then like,""" start="00:03:09.560" video="qanda-gc" id="subtitle"]]
+[[!template text="""what else can we see here?""" start="00:03:11.520" video="qanda-gc" id="subtitle"]]
+[[!template text="""Yeah, some users like have sub 0.1,""" start="00:03:15.140" video="qanda-gc" id="subtitle"]]
+[[!template text="""no problem at all. And I have seen some that""" start="00:03:23.320" video="qanda-gc" id="subtitle"]]
+[[!template text="""really, really bad. I mean,""" start="00:03:30.180" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: if it's noticeable, it's all bad.""" start="00:03:31.880" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: So yeah. For example, here it's like 0.8""" start="00:03:36.960" video="qanda-gc" id="subtitle"]]
+[[!template text="""seconds, 0.5 seconds. I don't know how that""" start="00:03:41.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""guy uses ZMax. Yeah. you can see it varies.""" start="00:03:48.600" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: So It varies quite a lot.""" start="00:03:51.160" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: What it depends on, like,""" start="00:03:52.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""usually the number of packages,""" start="00:03:54.120" video="qanda-gc" id="subtitle"]]
+[[!template text="""like all kinds of timers going on under the""" start="00:03:58.440" video="qanda-gc" id="subtitle"]]
+[[!template text="""hood. I think I tried to list...""" start="00:04:01.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""I'll go through this. I briefly outlined some""" start="00:04:12.520" video="qanda-gc" id="subtitle"]]
+[[!template text="""important parts. Here,""" start="00:04:15.440" video="qanda-gc" id="subtitle"]]
+[[!template text="""when you have something like an org agenda,""" start="00:04:18.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""it will most likely trigger a lot of GCs.""" start="00:04:20.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""When you have a lot of timers,""" start="00:04:23.900" video="qanda-gc" id="subtitle"]]
+[[!template text="""when you have something calculated on""" start="00:04:27.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""modline, it will be frequently triggered.""" start="00:04:29.700" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well,""" start="00:04:30.900" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: yeah. When you have so many packages and""" start="00:04:34.080" video="qanda-gc" id="subtitle"]]
+[[!template text="""these packages are using a lot of memory.""" start="00:04:35.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""Like I remember I was surprised by this,""" start="00:04:41.120" video="qanda-gc" id="subtitle"]]
+[[!template text="""package, home org that was,""" start="00:04:44.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""caching all the results.""" start="00:04:46.560" video="qanda-gc" id="subtitle"]]
+[[!template text="""And for large org files,""" start="00:04:48.960" video="qanda-gc" id="subtitle"]]
+[[!template text="""it was like several hundred megabytes of""" start="00:04:51.540" video="qanda-gc" id="subtitle"]]
+[[!template text="""data. Well, it just becomes slower.""" start="00:04:55.160" video="qanda-gc" id="subtitle"]]
+[[!template text="""Yeah.""" start="00:04:55.900" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah. Maybe, maybe a short side note.""" start="00:05:00.020" video="qanda-gc" id="subtitle"]]
+[[!template text="""Someone asks, what software you're using for""" start="00:05:02.600" video="qanda-gc" id="subtitle"]]
+[[!template text="""flipping through the PNGs.""" start="00:05:03.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""Maybe you could shortly throws it in.""" start="00:05:06.660" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: What do you mean? Here,""" start="00:05:08.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: I guess it was just simply,""" start="00:05:11.000" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: this, It's it's far. Yeah.""" start="00:05:13.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""So""" start="00:05:16.660" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: yeah. So, question 1 and 2 answered.""" start="00:05:23.900" video="qanda-gc" id="subtitle"]]
+[[!template text="""To 1 statement you have made,""" start="00:05:35.740" video="qanda-gc" id="subtitle"]]
+[[!template text="""there was a question concerning the timings.""" start="00:05:37.500" video="qanda-gc" id="subtitle"]]
+[[!template text="""So you said, okay, everything above 0.1""" start="00:05:41.180" video="qanda-gc" id="subtitle"]]
+[[!template text="""second is fine. Maybe There's a short story""" start="00:05:45.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""of someone who asked a question.""" start="00:05:48.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: I see the question is about scrolling,""" start="00:05:50.380" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, exactly.""" start="00:05:51.820" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: right? Again, there's not much you can do in""" start="00:05:55.580" video="qanda-gc" id="subtitle"]]
+[[!template text="""terms of trying to adjust the GC time.""" start="00:05:58.620" video="qanda-gc" id="subtitle"]]
+[[!template text="""I mean, if you make GCs less frequent,""" start="00:06:02.320" video="qanda-gc" id="subtitle"]]
+[[!template text="""you increase the individual GC time.""" start="00:06:07.540" video="qanda-gc" id="subtitle"]]
+[[!template text="""If you make them more frequent,""" start="00:06:08.860" video="qanda-gc" id="subtitle"]]
+[[!template text="""you decrease the individual GC time,""" start="00:06:11.280" video="qanda-gc" id="subtitle"]]
+[[!template text="""but then they are more frequent.""" start="00:06:12.400" video="qanda-gc" id="subtitle"]]
+[[!template text="""So what is the point? I think the way to go""" start="00:06:15.920" video="qanda-gc" id="subtitle"]]
+[[!template text="""here is you can rise to see the short for the""" start="00:06:19.940" video="qanda-gc" id="subtitle"]]
+[[!template text="""duration of scrolling,""" start="00:06:20.740" video="qanda-gc" id="subtitle"]]
+[[!template text="""like just for a comment.""" start="00:06:22.500" video="qanda-gc" id="subtitle"]]
+[[!template text="""I think it's a recommendation from Emacs""" start="00:06:26.320" video="qanda-gc" id="subtitle"]]
+[[!template text="""devs. So like You do something along the""" start="00:06:31.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""lines.""" start="00:06:31.660" video="qanda-gc" id="subtitle"]]
+[[!template text="""Yeah, I'm surely doing something on my screen""" start="00:06:53.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""and I forgot that I'm not sharing anything.""" start="00:06:55.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Exactly.""" start="00:06:56.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Simply something like this.""" start="00:07:00.700" video="qanda-gc" id="subtitle"]]
+[[!template text="""So, basically, if you have some command that""" start="00:07:08.140" video="qanda-gc" id="subtitle"]]
+[[!template text="""is very important that it should run very""" start="00:07:10.920" video="qanda-gc" id="subtitle"]]
+[[!template text="""quickly. You temporary increase that""" start="00:07:13.860" video="qanda-gc" id="subtitle"]]
+[[!template text="""threshold, you run that comment,""" start="00:07:15.740" video="qanda-gc" id="subtitle"]]
+[[!template text="""then that's all. That's probably the best.""" start="00:07:19.940" video="qanda-gc" id="subtitle"]]
+[[!template text="""So basically, the best you can do is to delay""" start="00:07:21.660" video="qanda-gc" id="subtitle"]]
+[[!template text="""it after the command.""" start="00:07:23.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: So afterwards, it takes a lot of time to do""" start="00:07:27.500" video="qanda-gc" id="subtitle"]]
+[[!template text="""its stuff. OK. The third 1 has been already""" start="00:07:36.140" video="qanda-gc" id="subtitle"]]
+[[!template text="""answered, but I just want to get your""" start="00:07:40.520" video="qanda-gc" id="subtitle"]]
+[[!template text="""information from it. Opinions on the GCMH""" start="00:07:42.780" video="qanda-gc" id="subtitle"]]
+[[!template text="""mode.""" start="00:07:43.940" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay. Yeah, I see that problem,""" start="00:07:48.280" video="qanda-gc" id="subtitle"]]
+[[!template text="""but that's more like a technical problem.""" start="00:07:49.920" video="qanda-gc" id="subtitle"]]
+[[!template text="""But there's another problem there.""" start="00:07:52.360" video="qanda-gc" id="subtitle"]]
+[[!template text="""Yeah, I prepared a small snippet here.""" start="00:07:57.340" video="qanda-gc" id="subtitle"]]
+[[!template text="""So if you look at the GCMH mode,""" start="00:08:02.160" video="qanda-gc" id="subtitle"]]
+[[!template text="""it has this concept of low threshold and high""" start="00:08:05.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""threshold and most of the time it's running""" start="00:08:08.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""high threshold and then when Emacs is idle,""" start="00:08:14.120" video="qanda-gc" id="subtitle"]]
+[[!template text="""it falls back to lower threshold and then it""" start="00:08:17.320" video="qanda-gc" id="subtitle"]]
+[[!template text="""does the GC while Emacs is not used.""" start="00:08:19.400" video="qanda-gc" id="subtitle"]]
+[[!template text="""That's a good idea, of course.""" start="00:08:22.040" video="qanda-gc" id="subtitle"]]
+[[!template text="""That's the core idea of GCMH mode.""" start="00:08:24.380" video="qanda-gc" id="subtitle"]]
+[[!template text="""Unfortunately, the most annoying GC is when""" start="00:08:30.520" video="qanda-gc" id="subtitle"]]
+[[!template text="""you're actively using max.""" start="00:08:31.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""And then you have this huge value of GC""" start="00:08:37.120" video="qanda-gc" id="subtitle"]]
+[[!template text="""counter show and look at the doc stream.""" start="00:08:38.799" video="qanda-gc" id="subtitle"]]
+[[!template text="""This would be sector value that makes GC""" start="00:08:41.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""unlikely but does not cost OSP Asian.""" start="00:08:43.980" video="qanda-gc" id="subtitle"]]
+[[!template text="""So yeah, no wonder like if you don't do GC,""" start="00:08:46.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""your arm usage will skyrocket.""" start="00:08:49.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""So they don't, they cannot put it too much,""" start="00:08:54.360" video="qanda-gc" id="subtitle"]]
+[[!template text="""but this is like already like,""" start="00:08:57.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""how much was it?""" start="00:08:59.220" video="qanda-gc" id="subtitle"]]
+[[!template text="""1 gigabyte, that's the default.""" start="00:09:10.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""And the problem is when you have 1 gigabyte""" start="00:09:15.220" video="qanda-gc" id="subtitle"]]
+[[!template text="""to garbage collect, it causes really long GC""" start="00:09:18.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""time. So in GC image mode,""" start="00:09:22.040" video="qanda-gc" id="subtitle"]]
+[[!template text="""when you're actually using Emacs,""" start="00:09:23.560" video="qanda-gc" id="subtitle"]]
+[[!template text="""really heavily, the GCs become terrible,""" start="00:09:28.860" video="qanda-gc" id="subtitle"]]
+[[!template text="""terribly slow. So it may help in case you""" start="00:09:34.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""don't have too much problems with GC,""" start="00:09:37.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""but I will say that in such situation,""" start="00:09:39.280" video="qanda-gc" id="subtitle"]]
+[[!template text="""you can simply increase GC cost percentage,""" start="00:09:41.920" video="qanda-gc" id="subtitle"]]
+[[!template text="""as I recommend, and it should do it.""" start="00:09:44.540" video="qanda-gc" id="subtitle"]]
+[[!template text="""But in case of really big problems with""" start="00:09:48.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""garbage collection, no,""" start="00:09:50.080" video="qanda-gc" id="subtitle"]]
+[[!template text="""I don't think that will help much.""" start="00:09:51.740" video="qanda-gc" id="subtitle"]]
+[[!template text="""I used it myself and it didn't help much for""" start="00:09:54.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""my stuff.""" start="00:09:55.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: All right. The next question is concerning""" start="00:09:59.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""freeing up memory. Is there some way to free""" start="00:10:04.600" video="qanda-gc" id="subtitle"]]
+[[!template text="""up memory such as via unload feature on""" start="00:10:07.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""Emacs? Often I only need a package loaded for""" start="00:10:09.960" video="qanda-gc" id="subtitle"]]
+[[!template text="""a single task or short period by the""" start="00:10:12.240" video="qanda-gc" id="subtitle"]]
+[[!template text="""persistent memory afterwards.""" start="00:10:13.320" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: So the packages are usually not that much of""" start="00:10:19.780" video="qanda-gc" id="subtitle"]]
+[[!template text="""a problem. I mean, the libraries,""" start="00:10:22.060" video="qanda-gc" id="subtitle"]]
+[[!template text="""the problem is some extra,""" start="00:10:25.280" video="qanda-gc" id="subtitle"]]
+[[!template text="""like some variable contents or some""" start="00:10:30.060" video="qanda-gc" id="subtitle"]]
+[[!template text="""histories, some caches.""" start="00:10:31.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""That's what's eating most of the memory.""" start="00:10:35.280" video="qanda-gc" id="subtitle"]]
+[[!template text="""There is a package called memory usage and""" start="00:10:40.240" video="qanda-gc" id="subtitle"]]
+[[!template text="""built in MX memory report.""" start="00:10:45.440" video="qanda-gc" id="subtitle"]]
+[[!template text="""They allow to see which variables take a lot""" start="00:10:50.900" video="qanda-gc" id="subtitle"]]
+[[!template text="""of memory. And that way you can try to see""" start="00:10:56.000" video="qanda-gc" id="subtitle"]]
+[[!template text="""which packages are actually problematic.""" start="00:10:58.520" video="qanda-gc" id="subtitle"]]
+[[!template text="""So for example, I recall,""" start="00:11:03.340" video="qanda-gc" id="subtitle"]]
+[[!template text="""and that was not exactly,""" start="00:11:05.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""I remember there was a package that was""" start="00:11:09.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""literally in command line,""" start="00:11:11.040" video="qanda-gc" id="subtitle"]]
+[[!template text="""like prompt history. I think it was in""" start="00:11:14.020" video="qanda-gc" id="subtitle"]]
+[[!template text="""command. And when you do like,""" start="00:11:17.540" video="qanda-gc" id="subtitle"]]
+[[!template text="""when you save every message in your chart""" start="00:11:20.440" video="qanda-gc" id="subtitle"]]
+[[!template text="""into prompt history, that can grow very fast""" start="00:11:25.280" video="qanda-gc" id="subtitle"]]
+[[!template text="""and can go to several hundred megabytes just""" start="00:11:29.220" video="qanda-gc" id="subtitle"]]
+[[!template text="""in that history. And that can cause major""" start="00:11:31.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""problems. So, yes, profiling the largest""" start="00:11:37.960" video="qanda-gc" id="subtitle"]]
+[[!template text="""variables with the largest buffers that might""" start="00:11:41.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""give some clues. Again,""" start="00:11:42.660" video="qanda-gc" id="subtitle"]]
+[[!template text="""there is no silver bullet.""" start="00:11:43.740" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. I think the last question on the""" start="00:11:49.080" video="qanda-gc" id="subtitle"]]
+[[!template text="""patterns. At first, very nice presentation.""" start="00:11:51.000" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: I can""" start="00:11:51.620" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: also only agree with that.""" start="00:11:53.980" video="qanda-gc" id="subtitle"]]
+[[!template text="""I just experienced with a threshold and""" start="00:11:56.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""lowered my GCE lapse from 1.1""" start="00:11:58.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""to 0.06 seconds during startup.""" start="00:12:01.440" video="qanda-gc" id="subtitle"]]
+[[!template text="""Interestingly, going to 10 megabytes""" start="00:12:03.600" video="qanda-gc" id="subtitle"]]
+[[!template text="""increased the time. 4 megabytes was a sweet""" start="00:12:06.100" video="qanda-gc" id="subtitle"]]
+[[!template text="""spot for my system. What is the recommended""" start="00:12:07.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""way to lower the value back to the default""" start="00:12:10.840" video="qanda-gc" id="subtitle"]]
+[[!template text="""value after startup is completed?""" start="00:12:12.340" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: I think you just use after init hook.""" start="00:12:16.160" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: This was a relatively fast answer.""" start="00:12:23.940" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: So basically for example Doom does this,""" start="00:12:29.180" video="qanda-gc" id="subtitle"]]
+[[!template text="""it temporary writes a gcconcert hold during""" start="00:12:31.940" video="qanda-gc" id="subtitle"]]
+[[!template text="""startup and yeah after init hook the code is""" start="00:12:37.260" video="qanda-gc" id="subtitle"]]
+[[!template text="""like it's 1 of the commonly suggested""" start="00:12:39.880" video="qanda-gc" id="subtitle"]]
+[[!template text="""approaches and is I believe it's the right 1.""" start="00:12:43.940" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. To have joined us 1 was a microphone.""" start="00:12:49.180" video="qanda-gc" id="subtitle"]]
+[[!template text="""So Peter, do you have any questions that you""" start="00:12:52.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""want to question? And maybe as a side note,""" start="00:12:55.240" video="qanda-gc" id="subtitle"]]
+[[!template text="""we only have 4 minutes left and afterwards""" start="00:12:57.380" video="qanda-gc" id="subtitle"]]
+[[!template text="""this happy weekend will still be open,""" start="00:12:59.240" video="qanda-gc" id="subtitle"]]
+[[!template text="""but we will switch back to the talks.""" start="00:13:01.400" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, no more questions on garbage""" start="00:13:05.380" video="qanda-gc" id="subtitle"]]
+[[!template text="""collection, but I just wanted to thank Ihor""" start="00:13:07.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""for his engagement in the community.""" start="00:13:10.440" video="qanda-gc" id="subtitle"]]
+[[!template text="""And especially with, I'm a co-maintainer on""" start="00:13:15.300" video="qanda-gc" id="subtitle"]]
+[[!template text="""orgnotor and he's helped us a lot with""" start="00:13:17.600" video="qanda-gc" id="subtitle"]]
+[[!template text="""getting us up to date with newer versions of""" start="00:13:21.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""org and stuff like that.""" start="00:13:22.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""So just wanted to thank you in person.""" start="00:13:24.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right.""" start="00:13:25.140" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Maybe 1 question for me,""" start="00:13:33.540" video="qanda-gc" id="subtitle"]]
+[[!template text="""you had some bit talked about memory""" start="00:13:35.460" video="qanda-gc" id="subtitle"]]
+[[!template text="""fragmentation. So is there any way to or is""" start="00:13:40.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""it fixed by Emacs itself?""" start="00:13:42.080" video="qanda-gc" id="subtitle"]]
+[[!template text="""So you have like""" start="00:13:43.740" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: a chunk of memory fragmentation is basically""" start="00:13:46.520" video="qanda-gc" id="subtitle"]]
+[[!template text="""your OS. Yeah, Emacs releases the memory and""" start="00:13:51.420" video="qanda-gc" id="subtitle"]]
+[[!template text="""then OS can rearrange it depending on the""" start="00:13:55.020" video="qanda-gc" id="subtitle"]]
+[[!template text="""implementation of its memory manager.""" start="00:13:58.320" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, so the GC just releases it really and""" start="00:14:01.520" video="qanda-gc" id="subtitle"]]
+[[!template text="""not so it could be that a mix is like""" start="00:14:04.400" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: doing it. You have like memory pages,""" start="00:14:07.420" video="qanda-gc" id="subtitle"]]
+[[!template text="""right? Yeah. And you see,""" start="00:14:09.560" video="qanda-gc" id="subtitle"]]
+[[!template text="""can release a part of this page just like""" start="00:14:12.140" video="qanda-gc" id="subtitle"]]
+[[!template text="""here and there. And depending on the exact""" start="00:14:14.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""situation is your arm at each moment of time,""" start="00:14:17.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""or as may or may not be able to arrange""" start="00:14:20.240" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: so""" start="00:14:25.160" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: things. So, how the exact the data you cannot""" start="00:14:27.620" video="qanda-gc" id="subtitle"]]
+[[!template text="""really predict it. It really varies like you""" start="00:14:30.160" video="qanda-gc" id="subtitle"]]
+[[!template text="""use Windows, you use Linux,""" start="00:14:31.120" video="qanda-gc" id="subtitle"]]
+[[!template text="""you use like malloc, something else,""" start="00:14:33.240" video="qanda-gc" id="subtitle"]]
+[[!template text="""but it has nothing to do with Emacs.""" start="00:14:36.260" video="qanda-gc" id="subtitle"]]
+[[!template text="""It's just something you have to deal with.""" start="00:14:38.040" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, but my question was in the way that we""" start="00:14:41.780" video="qanda-gc" id="subtitle"]]
+[[!template text="""are giving the memory back to the operating""" start="00:14:43.460" video="qanda-gc" id="subtitle"]]
+[[!template text="""system, not just holding it as used and then""" start="00:14:46.020" video="qanda-gc" id="subtitle"]]
+[[!template text="""to our own memory, like stuff as Emacs that""" start="00:14:49.960" video="qanda-gc" id="subtitle"]]
+[[!template text="""we do not need to interact with the operating""" start="00:14:51.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. Emacs does not really hold anything.""" start="00:14:56.040" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: system. That was the question.""" start="00:14:59.160" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay. I was really hoping it does,""" start="00:15:01.920" video="qanda-gc" id="subtitle"]]
+[[!template text="""but yeah, unfortunately,""" start="00:15:02.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""because nothing much can be done on Emacs.""" start="00:15:05.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay. it's not Probably a lot faster if it's""" start="00:15:08.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""just holding it and when it needs more,""" start="00:15:10.580" video="qanda-gc" id="subtitle"]]
+[[!template text="""then just get more from the OS.""" start="00:15:12.380" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: There are certain caveats,""" start="00:15:14.220" video="qanda-gc" id="subtitle"]]
+[[!template text="""for example, there's something called image""" start="00:15:16.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""cache. And because Emacs stores images in""" start="00:15:20.560" video="qanda-gc" id="subtitle"]]
+[[!template text="""uncompressed format, it can occupy quite a""" start="00:15:23.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""lot of memory. In particular,""" start="00:15:25.020" video="qanda-gc" id="subtitle"]]
+[[!template text="""when you will like view PDFs,""" start="00:15:26.520" video="qanda-gc" id="subtitle"]]
+[[!template text="""like you open 10, like 20 PDFs in 1 session,""" start="00:15:30.140" video="qanda-gc" id="subtitle"]]
+[[!template text="""you may have like some image cache blowing""" start="00:15:33.460" video="qanda-gc" id="subtitle"]]
+[[!template text="""up, But that's not common for people.""" start="00:15:36.720" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: So, guess we are on our time exactly.""" start="00:15:41.420" video="qanda-gc" id="subtitle"]]
+[[!template text="""So in the next""" start="00:15:43.580" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: I think I was not exactly accurate.""" start="00:15:46.680" video="qanda-gc" id="subtitle"]]
+[[!template text="""This 1 command, which is,""" start="00:15:49.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""I think, Nemax 30, is called a malloc trim.""" start="00:15:53.500" video="qanda-gc" id="subtitle"]]
+[[!template text="""A max malloc trim. It's interactive.""" start="00:15:57.520" video="qanda-gc" id="subtitle"]]
+[[!template text="""So that can help to release some memory.""" start="00:16:04.080" video="qanda-gc" id="subtitle"]]
+[[!template text="""I think the way it works is like forces OS to""" start="00:16:08.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""make use of the released memory.""" start="00:16:12.040" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay. That would be like,""" start="00:16:14.960" video="qanda-gc" id="subtitle"]]
+[[!template text="""we are by the way, switch back to the next""" start="00:16:18.420" video="qanda-gc" id="subtitle"]]
+[[!template text="""talk. But""" start="00:16:21.420" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: so basically what happens here is that OS may""" start="00:16:24.220" video="qanda-gc" id="subtitle"]]
+[[!template text="""not release like, even Emacs says,""" start="00:16:27.440" video="qanda-gc" id="subtitle"]]
+[[!template text="""okay, this memory is free,""" start="00:16:28.740" video="qanda-gc" id="subtitle"]]
+[[!template text="""depending on the implementation,""" start="00:16:30.060" video="qanda-gc" id="subtitle"]]
+[[!template text="""I might think, okay, but I still hold that""" start="00:16:32.760" video="qanda-gc" id="subtitle"]]
+[[!template text="""memory associated with Emacs just in case""" start="00:16:34.860" video="qanda-gc" id="subtitle"]]
+[[!template text="""Emacs needs more memories,""" start="00:16:35.800" video="qanda-gc" id="subtitle"]]
+[[!template text="""and I can immediately put the data there""" start="00:16:38.940" video="qanda-gc" id="subtitle"]]
+[[!template text="""without like more arrangement to allocate""" start="00:16:41.420" video="qanda-gc" id="subtitle"]]
+[[!template text="""more. And this analog stream basically forces""" start="00:16:45.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""the OS to release it, like no matter what.""" start="00:16:48.740" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Because most people, when they are using""" start="00:16:52.360" video="qanda-gc" id="subtitle"]]
+[[!template text="""Emacs, I have the feeling they are only using""" start="00:16:54.320" video="qanda-gc" id="subtitle"]]
+[[!template text="""Emacs. So it would be kind of interesting if""" start="00:16:56.160" video="qanda-gc" id="subtitle"]]
+[[!template text="""you just take like, I don't know,""" start="00:16:57.880" video="qanda-gc" id="subtitle"]]
+[[!template text="""2 gigabytes or something of memory and Emacs""" start="00:17:00.060" video="qanda-gc" id="subtitle"]]
+[[!template text="""like does what it wants on that and the OS""" start="00:17:02.900" video="qanda-gc" id="subtitle"]]
+[[!template text="""cannot really take it back.""" start="00:17:04.079" video="qanda-gc" id="subtitle"]]
+[[!template text="""This was my idea when I""" start="00:17:05.920" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: was So when you see 2 gigabytes in OS,""" start="00:17:08.000" video="qanda-gc" id="subtitle"]]
+[[!template text="""it doesn't mean that OS cannot take it back.""" start="00:17:10.359" video="qanda-gc" id="subtitle"]]
+[[!template text="""It may still like allocate certain portion,""" start="00:17:13.859" video="qanda-gc" id="subtitle"]]
+[[!template text="""even technically free,""" start="00:17:15.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""but just for future. So this is where Malloc""" start="00:17:20.940" video="qanda-gc" id="subtitle"]]
+[[!template text="""Dream works. It's like,""" start="00:17:22.339" video="qanda-gc" id="subtitle"]]
+[[!template text="""it says, yes, OS, I really not going to hold""" start="00:17:25.319" video="qanda-gc" id="subtitle"]]
+[[!template text="""this for this free memory.""" start="00:17:26.500" video="qanda-gc" id="subtitle"]]
+[[!template text="""For sure. If you try this MX Malloc Gene,""" start="00:17:31.700" video="qanda-gc" id="subtitle"]]
+[[!template text="""you will see like a few times to hundreds of""" start="00:17:33.960" video="qanda-gc" id="subtitle"]]
+[[!template text="""megabytes of read immediately.""" start="00:17:35.200" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: Have a look when I have the time.""" start="00:17:38.560" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: I""" start="00:17:41.480" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 0]: guess if nobody has any questions,""" start="00:17:43.260" video="qanda-gc" id="subtitle"]]
+[[!template text="""I guess on the pad, there was Nothing else.""" start="00:17:45.660" video="qanda-gc" id="subtitle"]]
+[[!template text="""I guess we can just close it.""" start="00:17:47.900" video="qanda-gc" id="subtitle"]]
+[[!template text="""Thanks for the discussion.""" start="00:17:49.140" video="qanda-gc" id="subtitle"]]
+[[!template text="""Thanks for answering the questions.""" start="00:17:50.640" video="qanda-gc" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thank you for the great conference.""" start="00:17:56.020" video="qanda-gc" id="subtitle"]]
+[[!template text="""And yeah, for your volunteer work.""" start="00:17:59.340" video="qanda-gc" id="subtitle"]]
+[[!template text="""And yeah, for quietly panicking in the""" start="00:18:02.230" video="qanda-gc" id="subtitle"]]
+[[!template text="""background, right? Yeah,""" start="00:18:02.262" video="qanda-gc" id="subtitle"]]
+[[!template text="""I mean... You have to be quiet,""" start="00:18:02.337" video="qanda-gc" id="subtitle"]]
+[[!template text="""you're panicking in the background.""" start="00:18:02.560" video="qanda-gc" id="subtitle"]]
+
+Questions or comments? Please e-mail [yantar92@posteo.net](mailto:yantar92@posteo.net?subject=Comment%20for%20EmacsConf%202023%20gc%3A%20emacs-gc-stats%3A%20Does%20garbage%20collection%20actually%20slow%20down%20Emacs%3F)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/gc-before.md b/2023/info/gc-before.md
new file mode 100644
index 00000000..035db20a
--- /dev/null
+++ b/2023/info/gc-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 34-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="gc-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 33:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.opus">Download --main.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/ngenUPBLDDkZGmsxK8vimJ">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/gc-nav.md b/2023/info/gc-nav.md
new file mode 100644
index 00000000..0bef707f
--- /dev/null
+++ b/2023/info/gc-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a>
+Next by track: <a href="/2023/talks/hyperdrive">hyperdrive.el: Peer-to-peer filesystem in Emacs</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/hn-after.md b/2023/info/hn-after.md
new file mode 100644
index 00000000..fe58de2b
--- /dev/null
+++ b/2023/info/hn-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [mickael@kerjean.me](mailto:mickael@kerjean.me?subject=Comment%20for%20EmacsConf%202022%20hn%3A%20The%20many%20ways%20to%20browse%20Hacker%20News%20from%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/hn-before.md b/2023/info/hn-before.md
new file mode 100644
index 00000000..2700a0ea
--- /dev/null
+++ b/2023/info/hn-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2023-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="hn">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/parallel" title="Parallel Text Replacement: Does P = NP?" data-slug="parallel"> <title> 10:10-10:20 Parallel Text Replacement: Does P = NP?</title> <rect x="109" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(122,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/steno" title="Programming at 200 wpm" data-slug="steno"> <title> 1:55- 2:25 Programming at 200 wpm</title> <rect x="462" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/hn" title="The many ways to browse Hacker News from Emacs" data-slug="hn"> <title> 3:00- 3:10 The many ways to browse Hacker News from Emacs</title> <rect stroke-width="3" x="564" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(577,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hn</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web" data-slug="web"> <title> 3:25- 4:05 Emacs saves the Web</title> <rect x="603" y="15" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(663,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 4:20- 4:40 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="690" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(719,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:55- 5:05 Sunday closing remarks</title> <rect x="745" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(758,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 10:35-10:55 What I learned by writing test cases for GNU Hyperbole</title> <rect x="149" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 11:10-11:30 GNU Emacs: A World of Possibilities</title> <rect x="203" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(232,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:45-11:55 A modern Emacs look-and-feel without pain</title> <rect x="258" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(271,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:20 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:35- 2:15 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="431" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(491,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:30- 2:40 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="517" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 2:55- 3:35 Windows into Freedom</title> <rect x="556" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(616,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 3:50- 4:10 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="643" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(672,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 10-min talk followed by live web conference Q&A
+Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Status: Waiting for video from speaker
+<div>Times in different timezones:</div><div class="times" start="2023-12-03T20:00:00Z" end="2023-12-03T20:00:00Z"><div class="conf-time">Sunday, Dec 3 2023, ~3:00 PM - 3:00 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 3 2023, ~2:00 PM - 2:00 PM CST (US/Central)<br />Sunday, Dec 3 2023, ~1:00 PM - 1:00 PM MST (US/Mountain)<br />Sunday, Dec 3 2023, ~12:00 PM - 12:00 PM PST (US/Pacific)<br />Sunday, Dec 3 2023, ~8:00 PM - 8:00 PM UTC <br />Sunday, Dec 3 2023, ~9:00 PM - 9:00 PM CET (Europe/Paris)<br />Sunday, Dec 3 2023, ~10:00 PM - 10:00 PM EET (Europe/Athens)<br />Monday, Dec 4 2023, ~1:30 AM - 1:30 AM IST (Asia/Kolkata)<br />Monday, Dec 4 2023, ~4:00 AM - 4:00 AM +08 (Asia/Singapore)<br />Monday, Dec 4 2023, ~5:00 AM - 5:00 AM JST (Asia/Tokyo)</div></div><div><a href="/2023/watch/gen/">Find out how to watch and participate</a></div>
+
+
+
+
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/hn-nav.md b/2023/info/hn-nav.md
new file mode 100644
index 00000000..72fa004e
--- /dev/null
+++ b/2023/info/hn-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2023/talks/windows">Windows into Freedom</a>
+Next by time: <a href="/2023/talks/web">Emacs saves the Web</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/hyperamp-after.md b/2023/info/hyperamp-after.md
new file mode 100644
index 00000000..051a5dad
--- /dev/null
+++ b/2023/info/hyperamp-after.md
@@ -0,0 +1,1351 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="hyperamp-mainVideo-transcript"></a>
+# Transcript (unedited)
+
+[[!template text="""[Speaker 0]: 5 seconds. Oh, actually,""" start="00:00:01.719" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sorry, I keep delaying.""" start="00:00:07.279" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I keep forgetting that we have an""" start="00:00:08.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""introduction now. The introduction is flying.""" start="00:00:09.559" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: a little more. You're going to give a""" start="00:00:02.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, it's about 5 seconds now.""" start="00:00:22.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: 30-second, right? Just say go when you want""" start="00:00:19.675" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sure. You'll hear me anyway.""" start="00:00:29.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: me to go. Okay.""" start="00:00:27.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right, I think we are live now.""" start="00:00:33.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So hi again, everyone.""" start="00:00:35.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I promised you we would be back in about 30""" start="00:00:36.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""seconds. I lied, it was actually 1 minute,""" start="00:00:37.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but we are here with Bob.""" start="00:00:40.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hi, Bob, how are you doing?""" start="00:00:41.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Hi, doing great. Glad to""" start="00:00:43.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: be with you. Yeah, glad to be here,""" start="00:00:46.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and so are we. We're glad to have you again""" start="00:00:50.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this year. So what we're going to do,""" start="00:00:52.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we're not going to waste any time right now""" start="00:00:54.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""with chit-chats. What we're going to do,""" start="00:00:56.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we're going to move straight into your""" start="00:00:57.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""presentation, Bob, so that you have as much""" start="00:00:59.059" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""time as you can. I'm going to recede into the""" start="00:01:01.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""background. I am going to full screen your""" start="00:01:04.239" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""presentation on a stream.""" start="00:01:07.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And Bob, the floor is all yours.""" start="00:01:09.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thank you very much, Leo.""" start="00:01:12.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Glad to be here. I hope everybody has an idea""" start="00:01:15.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of what Hyperbole is, but it's a broad""" start="00:01:18.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""information management system inside Emacs""" start="00:01:22.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that works in all major modes.""" start="00:01:26.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It's a global minor mode that you can turn on""" start="00:01:28.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and off very rapidly so that you can just get""" start="00:01:31.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""in and out of hyperbole.""" start="00:01:34.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And it works mostly from a mini buffer menu""" start="00:01:36.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that if we just hit ctrl H H we see at the""" start="00:01:41.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""bottom of the screen here and as you see in""" start="00:01:44.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""some of this text right here,""" start="00:01:47.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Dee will show you a demo with all these video""" start="00:01:51.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""links of Hyperbole now.""" start="00:01:55.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But let's just get into the top 10 reasons to""" start="00:01:57.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""use Hyperbole. Number 10 is a key series""" start="00:02:01.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""curly braces. So you just put curly braces""" start="00:02:10.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""around any set of key sequences that you want""" start="00:02:12.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and hyperbole magically turns that into what""" start="00:02:19.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we call an implicit button a hyper button and""" start="00:02:22.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""any kind of text that you have so if we go""" start="00:02:25.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""down here and we just click click here we see""" start="00:02:28.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it that was a complex button that said let's""" start="00:02:35.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""start a shell, let's set an environment""" start="00:02:40.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""variable as you see the command right up""" start="00:02:43.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""there, and then let's do a grep over the""" start="00:02:45.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""hyperbole code and find all instances of a""" start="00:02:47.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""particular label. So if we hit made a return,""" start="00:02:50.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that's called the action key.""" start="00:02:55.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""That's what you use throughout hyperbole when""" start="00:02:57.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you just want to activate any kind of button.""" start="00:02:59.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So you see it jumped to the grep output and""" start="00:03:02.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this is in a shell buffer it's not in a""" start="00:03:06.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""compilation buffer so anywhere that you have""" start="00:03:08.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this sort of thing it's also an implicit""" start="00:03:11.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""button and any sort of grep output or""" start="00:03:13.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""compiler output you can just jump to with the""" start="00:03:17.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""same key, made a return.""" start="00:03:22.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So that's key series, the first part.""" start="00:03:23.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And then just to note that you can also just""" start="00:03:29.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""do a, well I'll just do it here and show you""" start="00:03:33.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that you can do a recursive grep with this""" start="00:03:39.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""hyperbole command, HYPBR grep.""" start="00:03:43.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And if you're in an Emacs list buffer,""" start="00:03:46.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it will only grep across the Emacs list.""" start="00:03:50.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So a very handy way to just go through your""" start="00:03:54.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""code very rapidly and then jump to various""" start="00:03:58.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""points in it. So we have a lot to cover""" start="00:04:01.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""today, so I'm going to go through this""" start="00:04:04.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""rapidly. This isn't a tutorial,""" start="00:04:05.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it's just to get you interested in some of""" start="00:04:07.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the features, and then there's a ton of""" start="00:04:10.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""reference material and videos now available""" start="00:04:13.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""for Hyperlink. So let's go to number 9.""" start="00:04:15.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Path names become implicit buttons.""" start="00:04:20.019" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You don't even have to quote them.""" start="00:04:22.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You can add environment variables or elist""" start="00:04:24.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""variables with the syntax right here.""" start="00:04:26.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So here we have a shell script that's""" start="00:04:29.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""somewhere on our path.""" start="00:04:32.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And notice path is an environment variable""" start="00:04:33.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""with many different paths within it,""" start="00:04:36.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""right? But Hyperbole knows that and it""" start="00:04:39.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""searches the path, gets the first match,""" start="00:04:42.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""finds it, and finds the actual shell script.""" start="00:04:45.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So you can just embed that anywhere.""" start="00:04:48.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Here we have a list variable,""" start="00:04:50.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""hyperbdur, which is the home directory for""" start="00:04:52.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""hyperbole, and then a markdown file,""" start="00:04:54.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and a link to a direct section in the file,""" start="00:04:58.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and the 5 colon 5 means go to line 5 within""" start="00:05:01.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that section and column 5.""" start="00:05:05.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So let's just try it. Boom,""" start="00:05:07.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we're right there, and we're on another link""" start="00:05:09.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that we could activate as well.""" start="00:05:11.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So notice the next line is the same link but""" start="00:05:13.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this is how you normally have to do it in a""" start="00:05:17.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""markdown file. You have to change the section""" start="00:05:20.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""header to have dashes but with hyperbole you""" start="00:05:23.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""don't have to. You can just put it exactly""" start="00:05:25.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""like you see it in your file.""" start="00:05:28.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Here the pound syntax for sections is really""" start="00:05:30.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""a generic syntax in the hyperbole.""" start="00:05:34.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And so it works in all different kinds of""" start="00:05:37.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""files, your programming files.""" start="00:05:39.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Here's a shell script and we said let's just""" start="00:05:42.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""go to the first comment that has alias in it.""" start="00:05:45.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Notice we didn't have to say the whole line,""" start="00:05:49.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""just the first part of it.""" start="00:05:51.700" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And it matched to it. Here we have a link to""" start="00:05:53.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""our hyperbole structured outliner called the""" start="00:05:58.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""K Outliner. And you can see it auto-numbers""" start="00:06:01.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""all these cells. But in addition to just""" start="00:06:05.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""displaying, you can also add a pipe symbol""" start="00:06:08.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""near the end and use this view syntax to clip""" start="00:06:10.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to 2 lines and show blank lines.""" start="00:06:14.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So let's see if each node gets clipped to 2""" start="00:06:17.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""lines. So you see they're all just 2 now with""" start="00:06:19.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the ellipses and then we can expand them.""" start="00:06:22.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So a lot of power there just with path names.""" start="00:06:25.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Let's continue to number 8.""" start="00:06:29.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Can I just interrupt you just a bit?""" start="00:06:31.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes.""" start="00:06:33.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: I think your phone, so we have your phone set""" start="00:06:34.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""up in case your internet misbehaves and we've""" start="00:06:37.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""set this up before we started,""" start="00:06:40.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but I think the vibration is a little loud""" start="00:06:42.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""whenever it does. Can you maybe move it a""" start="00:06:44.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""little bit? I think so.""" start="00:06:46.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It will have to vibrate again.""" start="00:06:50.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Is that okay? No, my phone...""" start="00:06:47.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Okay. It shouldn't have been vibrating.""" start="00:06:54.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: have been another device,""" start="00:06:59.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but definitely we had vibration.""" start="00:07:01.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Anyway, carry on. Sorry for the interruption.""" start="00:07:02.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: It could be me. It might So number 8,""" start="00:06:57.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""special prefixes. There are 3 prefixes you""" start="00:07:07.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""can attach to path names.""" start="00:07:10.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""The first, if you want to load,""" start="00:07:11.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""instead of just finding a file,""" start="00:07:13.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""an ELIST file, you can actually load it.""" start="00:07:16.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And so I can just hit made a return on this,""" start="00:07:19.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and you see in the mini buffer,""" start="00:07:22.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it loaded it as compiled e-list.""" start="00:07:25.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I could put a .el on here,""" start="00:07:27.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""a .elc, .gz, all of that'll work,""" start="00:07:29.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and just put a dash in front to load it.""" start="00:07:33.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""If you want to run a shell command,""" start="00:07:36.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""just put an exclamation mark in front of""" start="00:07:38.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""something and again you can have the""" start="00:07:41.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""environment variable. So here we're saying""" start="00:07:42.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""run the program date and you see,""" start="00:07:44.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""let's see, let's do it again.""" start="00:07:48.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""There we go. It ran date and you see the""" start="00:07:50.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""output right there. And what if you want to""" start="00:07:53.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""run a graphical program on your system?""" start="00:07:55.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Well here, we want to open a PDF file and I'm""" start="00:07:58.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""just using XDG Open on Linux,""" start="00:08:01.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you could use Open on Mac and you just put an""" start="00:08:05.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""ampersand in front and there's the Hyperbole""" start="00:08:09.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""manual instantly displayed.""" start="00:08:14.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So lots of power there and all of that""" start="00:08:16.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""actually .pdf's and many other file types are""" start="00:08:18.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""automatically linked to various programs by""" start="00:08:22.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyperbole. So you could just use the path""" start="00:08:25.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""name itself and it would probably behave the""" start="00:08:27.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""same way. Number 7, bookmarks on steroids.""" start="00:08:29.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So Hyperbole gives you a personal button""" start="00:08:35.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""file, which is on the menu you see here under""" start="00:08:37.419" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""button files, and then personal.""" start="00:08:40.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So here we'll just display it.""" start="00:08:43.039" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And you can put whatever you want in here,""" start="00:08:45.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""these implicit buttons of any type.""" start="00:08:47.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You can name them the way here and you can""" start="00:08:49.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""activate either the name with MetaReturn or""" start="00:08:52.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the button itself. So,""" start="00:08:55.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of course, if we did MetaReturn here,""" start="00:08:56.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we'd just display that in a web browser.""" start="00:08:59.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I'll just do a few of these.""" start="00:09:03.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So here's a section of line.""" start="00:09:05.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Let's just jump there.""" start="00:09:07.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But these can be all sorts of different""" start="00:09:09.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""actions that are going on.""" start="00:09:11.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And you just, whatever cross references you""" start="00:09:13.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""want, you put in here.""" start="00:09:16.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And the neat thing is that this then becomes""" start="00:09:17.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""a list of what we call global buttons.""" start="00:09:20.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So when I go into the menu and I go control""" start="00:09:23.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""HHGA to activate a global button,""" start="00:09:26.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you can see that all the names from this file""" start="00:09:30.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""appear here. So only the name buttons appear,""" start="00:09:33.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and I could like go to the hyperbole to-do""" start="00:09:36.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""list and things like that.""" start="00:09:40.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So very, very quick access to all your""" start="00:09:42.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""information whenever you need it.""" start="00:09:45.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And that could be an org file as well if you""" start="00:09:47.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""prefer that. So we just took care of that.""" start="00:09:49.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Number 6, instant test case running and""" start="00:09:53.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""debugging. This is a fairly new feature.""" start="00:09:57.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""What we're seeing here is a pre-release of""" start="00:10:00.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""version 9, which should be out within the""" start="00:10:02.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""next week. But the instructions at the""" start="00:10:04.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""beginning of the presentation tell you how to""" start="00:10:07.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""get the development version of HyperBlade,""" start="00:10:10.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""which is right now 8.01""" start="00:10:14.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""pre, but that's virtually the same as what 9""" start="00:10:15.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""will be. So you can grab that as of today.""" start="00:10:19.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So let's just jump to a test file.""" start="00:10:24.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""What you see here is called an explicit""" start="00:10:27.700" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""button. You can actually make buttons where""" start="00:10:30.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""similar to org, where you just see a bit of""" start="00:10:33.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the button and all of the metadata is hidden.""" start="00:10:35.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I can say control A J and I see all about""" start="00:10:39.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that button, exactly what it's going to do""" start="00:10:42.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""before I activate it and even who created it""" start="00:10:43.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""or last modified it. Then just queue out of""" start="00:10:47.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""here and you're back where you were.""" start="00:10:50.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So now, what this did is link us to an ERT""" start="00:10:52.700" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""test. If you write tests in Emacs,""" start="00:10:56.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you probably use ERT tests.""" start="00:10:59.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So if I hit made a return on here it'll just""" start="00:11:02.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""run the test tell me it passed great okay but""" start="00:11:05.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""maybe I had a problem so let me use control""" start="00:11:08.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you made a return and that will e-debug the""" start="00:11:11.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""test instantly. So now I'll step through it""" start="00:11:17.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it says, well, let's,""" start="00:11:20.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this single line actually creates that""" start="00:11:23.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""explicit button. You see we have an empty""" start="00:11:25.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""buffer here that we're in.""" start="00:11:27.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Now I step through that and now there's the""" start="00:11:29.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""explicit button that got put in there.""" start="00:11:31.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Now the next line I step through it and this""" start="00:11:34.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""is going to check if we have the right action""" start="00:11:36.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""type and it returns true so that's good and""" start="00:11:39.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""now we should be it should be associated with""" start="00:11:42.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the temp buffer returns true good And that's""" start="00:11:45.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""why what you saw before is this passed.""" start="00:11:48.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""The whole thing passed.""" start="00:11:51.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So lots of power there.""" start="00:11:53.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Simple to use. You're just using your made a""" start="00:11:55.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""return and prefix arguments.""" start="00:11:57.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It's something everybody who develops should""" start="00:12:00.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""have. So number, let's go on.""" start="00:12:03.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I think we're making pretty good time here,""" start="00:12:07.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but I turned off my timer.""" start="00:12:09.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Let's go to number 5. This is a very new""" start="00:12:13.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""feature, which is very cool too.""" start="00:12:15.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You used to have to use the mouse probably""" start="00:12:17.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and you could drag across windows to go from""" start="00:12:20.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""a source to a referent buffer and that would""" start="00:12:23.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""create a hyperlink for you.""" start="00:12:26.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But now we've installed it and made it even""" start="00:12:28.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""easier on, we've installed it on a,""" start="00:12:30.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""on the hyperbole menus.""" start="00:12:34.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So let's just go back to our presentation""" start="00:12:37.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""here and say we want to link to this line""" start="00:12:40.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that we're on there. And I'll just create the""" start="00:12:43.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""button in our scratch buffer here so it""" start="00:12:46.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""doesn't really mess anything up.""" start="00:12:48.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So I just put my point in where I want the""" start="00:12:50.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""button to appear and then I put point where I""" start="00:12:53.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""want it to link to in the other the other""" start="00:12:56.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""buffer and then I just say control HH to get""" start="00:13:00.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""my menu, I for implicit button,""" start="00:13:02.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and then L for link. Boom,""" start="00:13:05.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it inserts it, right at point.""" start="00:13:07.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""What did it do? It knew that this was in the""" start="00:13:10.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""hyperbole directory and I have a variable for""" start="00:13:12.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that, so that if you sent this link to your""" start="00:13:15.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""friend who uses Hyperbole,""" start="00:13:17.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it would still work right because they have a""" start="00:13:19.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""different hyperbole there.""" start="00:13:21.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And then I want to go directly to line 116.""" start="00:13:23.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So boom, it just took me there.""" start="00:13:28.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So that's it. And Hyperbole is doing all this""" start="00:13:30.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""for you. You just say I want a link to this""" start="00:13:33.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""thing and it figures out what's at point and""" start="00:13:36.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it determines the right type of implicit link""" start="00:13:38.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to put there. And that's the whole point is""" start="00:13:42.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that you're just working like when you're""" start="00:13:45.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""programming or you're writing an article and""" start="00:13:47.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you just hit made a return or or pull up a""" start="00:13:50.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""menu and hit a key binding and you're off to""" start="00:13:53.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the races. So that was implicit linking We""" start="00:13:57.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""can also create those explicit link buttons,""" start="00:14:02.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and as well as the global link,""" start="00:14:06.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""where we would just give it a name,""" start="00:14:07.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it would automatically put it in our""" start="00:14:09.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""global button file without us even having""" start="00:14:11.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that on screen. So lots of power there as""" start="00:14:14.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""well, lots of consistency.""" start="00:14:18.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Now let's take a look at the K Outliner a""" start="00:14:21.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""little more. I'm just going to show you 1""" start="00:14:25.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""feature actually. I don't have time to show""" start="00:14:28.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you the K Outliner in detail,""" start="00:14:29.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but it's a really cool structured outliner""" start="00:14:31.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that even if you love Org Mode,""" start="00:14:34.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you should try it. And this is 1 thing that""" start="00:14:36.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you can't get with Org Mode,""" start="00:14:39.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""is let's say Hyperlink comes with an example""" start="00:14:41.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""file which teaches you about the K Outliner.""" start="00:14:45.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So we'll just use that right here.""" start="00:14:48.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And when you're in the K Outliner,""" start="00:14:51.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you can bring up and go into the K Outliner""" start="00:14:53.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""menu right here at the bottom.""" start="00:14:55.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And there's a format menu there.""" start="00:14:58.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You always take the first letter of a menu,""" start="00:15:00.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the first capital letter of a menu item.""" start="00:15:02.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So F for format and then D for display in""" start="00:15:05.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""browser. So just let's do it.""" start="00:15:08.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We have with 1 button or 1 key we've produced""" start="00:15:12.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the entire outline in a collapsible outline""" start="00:15:17.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""in HTML. So I can go here.""" start="00:15:23.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I just have to use my mouse.""" start="00:15:27.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So I can expand and collapse these trees live""" start="00:15:29.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""with very basic coding.""" start="00:15:34.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We tried to keep this as simple as possible.""" start="00:15:39.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But you see it maintains the structure of the""" start="00:15:42.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""outline and even tables.""" start="00:15:45.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So all the formatting is maintained and again""" start="00:15:55.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it's instant. Or you can just export it to a""" start="00:15:57.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""file without displaying it.""" start="00:16:00.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Very efficient kinds of operations.""" start="00:16:03.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So that was number 4. Number 3 is a""" start="00:16:06.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""subsystem, another subsystem in Hyperbole""" start="00:16:10.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""called Hycontrol, which is for window and""" start="00:16:13.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""frame management. And I just wanted to show""" start="00:16:16.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you 1 thing in there. It's got a lot of""" start="00:16:18.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""capabilities. But I always had the problem""" start="00:16:20.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that Emacs wouldn't let me scale my fonts,""" start="00:16:24.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""all of my faces at the same time.""" start="00:16:28.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I wanted to zoom. I didn't want to increase""" start="00:16:30.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the default font size and all the others stay""" start="00:16:33.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the same. So let's just display our faces""" start="00:16:36.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""right here and then we have a choice of""" start="00:16:41.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""either controlling frames or windows.""" start="00:16:45.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So let's start by controlling frames.""" start="00:16:47.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So you get another submenu when you're in""" start="00:16:50.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""high control to tell you what to do here.""" start="00:16:52.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And there's just lowercase z and uppercase z.""" start="00:16:56.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So let's try it. So it's scaling the entire""" start="00:16:59.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""frame. And you can see from the list of faces""" start="00:17:03.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that they're all scaling at the same time.""" start="00:17:06.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And I can go back down.""" start="00:17:08.599" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Now if I switch to window mode,""" start="00:17:10.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and there's a special fast way to do that,""" start="00:17:13.619" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""just hit T to toggle. And if you look at the""" start="00:17:16.099" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""bottom menu it says frames right now now it""" start="00:17:18.819" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""says windows when I hit T so now if I do the""" start="00:17:21.819" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""same Z to increase it's just this window and""" start="00:17:25.599" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but it's you know it's the faces in there so""" start="00:17:30.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""a lot of power again but I just haven't found""" start="00:17:37.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""anywhere else that you can get that kind of""" start="00:17:40.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""control over your faces very rapidly.""" start="00:17:43.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So that's number 3. Now number 2,""" start="00:17:45.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""let's put that in there.""" start="00:17:55.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So the HiROLO is the final subsystem in""" start="00:17:58.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyperbole and this has gotten much cooler.""" start="00:18:03.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So it started off as a contact management""" start="00:18:06.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""system, but it's really just a hierarchical""" start="00:18:08.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""record management system that lets you have""" start="00:18:11.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""as many files, directories as you want,""" start="00:18:15.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and you can search across all of them without""" start="00:18:18.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""any external utilities necessary,""" start="00:18:20.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""just what's built into Emacs and Hyperlink.""" start="00:18:23.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So as you can see, we've expanded it to""" start="00:18:26.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""handle org files, markdown,""" start="00:18:29.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""K outlines, Emacs outlines.""" start="00:18:32.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So what I'm going to do is just say,""" start="00:18:34.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I want to search using my Hyberlo file list.""" start="00:18:36.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You just set that to what you wanted to""" start="00:18:40.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""search. But now you have all this""" start="00:18:43.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""flexibility. You can use environment""" start="00:18:44.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""variables in it. You can just specify a""" start="00:18:46.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""directory and it will find all those matching""" start="00:18:48.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""files below that directory recursively.""" start="00:18:51.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You can give it the markdown file here and""" start="00:18:55.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you can use file wildcards as well.""" start="00:18:58.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I mean, look at this. It's got a list""" start="00:19:01.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""variable in it and a wildcard,""" start="00:19:04.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it's just all I'm gonna do is I change""" start="00:19:06.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this from a Lisp expression to make it a""" start="00:19:09.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""hyper button. You just change the outer""" start="00:19:13.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""parens to angle brackets,""" start="00:19:15.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and then it's automatically an implicit""" start="00:19:17.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""button that you can activate with made a""" start="00:19:21.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""return so just ran that and now I've set my""" start="00:19:22.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""file list so now let's do a search it would""" start="00:19:26.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""be ctrl H H roll it X R and then S for search""" start="00:19:29.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But I'll just do it this way.""" start="00:19:34.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And boom, it found everything that fast.""" start="00:19:37.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And I can just get like,""" start="00:19:41.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""show the top items in there.""" start="00:19:43.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So I kind of have outlining in this buffer.""" start="00:19:45.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I can just move to each match that I hit.""" start="00:19:48.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And notice, although everything was""" start="00:19:51.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""collapsed, it's expanding here.""" start="00:19:53.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""When I move in and out of each of the entry""" start="00:19:55.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""matches, it expands or collapses as I move to""" start="00:19:58.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the next 1. So a lot of power there.""" start="00:20:02.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""What else? So just tabbing through these""" start="00:20:06.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""things. And you notice that it's working""" start="00:20:09.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""across all of these different types,""" start="00:20:11.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it's telling you which file everything""" start="00:20:13.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""came from right up here.""" start="00:20:16.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So I could just made a return here,""" start="00:20:17.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""should work. Yes, revisit the file normally.""" start="00:20:20.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And it just pulls it right up.""" start="00:20:23.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So everything is live and hyperbole.""" start="00:20:25.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You've got hyperlinks everywhere.""" start="00:20:28.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Let's just get rid of that.""" start="00:20:31.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Go back to our demo. So if you are fans of""" start="00:20:34.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Vertico and Consult, you can now use that""" start="00:20:41.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""with the High Rollo. So all you have to do is""" start="00:20:46.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""let's just format our windows,""" start="00:20:49.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and then I'll say, let's use ConsultGrep over""" start="00:20:51.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the Rolodex. Now, it found all the matches""" start="00:20:55.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""there, and I can just move live through them""" start="00:20:58.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""in the buffer like you may be used to or I""" start="00:21:02.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""can filter back down and say using orderless""" start="00:21:04.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""joystick or anything that has joy in it just""" start="00:21:10.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""match to those lines and then I can you know""" start="00:21:13.700" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""either jump there or quit out of here.""" start="00:21:17.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I'll just quit out of it right now.""" start="00:21:20.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So very cool. And all of that is using""" start="00:21:22.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""whatever you personally set as the set of""" start="00:21:25.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""files and directories you want to search.""" start="00:21:28.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And finally, our number 1 feature of""" start="00:21:31.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyperbole is you can customize this to give""" start="00:21:35.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you these kinds of implicit buttons,""" start="00:21:40.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""whatever kind you want.""" start="00:21:44.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And there are 3 levels of doing this.""" start="00:21:46.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""The first is for non-programmers.""" start="00:21:49.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You can just set a string,""" start="00:21:51.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""like a URL with a parameter in it.""" start="00:21:54.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So the %s represents the parameter,""" start="00:21:57.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and This is how you do a search on""" start="00:21:59.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""DuckDuckGo. So all I have to do is evaluate""" start="00:22:01.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this defal for action link.""" start="00:22:04.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And now I have a new implicit button type""" start="00:22:07.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that I can put between angle brackets.""" start="00:22:11.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And I just give it that name,""" start="00:22:13.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""DDG, and some parameter,""" start="00:22:16.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""whatever I want to search for,""" start="00:22:18.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and this is a button that does that search.""" start="00:22:20.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Very cool, right? So you can embed these.""" start="00:22:25.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""This could be a hyperlink in,""" start="00:22:28.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, a comment in a programming file.""" start="00:22:32.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Anything on the entire web that you want to""" start="00:22:35.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""link to, whatever kind of compact notation""" start="00:22:38.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you want to give it. So that's what we're""" start="00:22:42.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""going to learn as we get more advanced here""" start="00:22:44.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you can give it even more compact notations.""" start="00:22:47.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So as you get more advanced you can say,""" start="00:22:49.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""well I don't like this angle bracket,""" start="00:22:52.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I want to have an implicit button that uses""" start="00:22:54.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""these square brackets and then an angle""" start="00:22:57.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""bracket inside it. So then you need the""" start="00:22:59.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""defile for implicit link.""" start="00:23:02.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""This lets you specify your start and end""" start="00:23:06.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""delimiters for your new type and and then you""" start="00:23:08.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""can give it a function that you wanted to run""" start="00:23:12.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and that will take the text of whatever is in""" start="00:23:15.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the button, in this case,""" start="00:23:18.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""test release here, and feed it to the""" start="00:23:19.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""function that I gave here.""" start="00:23:23.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So what this function does is grep over my""" start="00:23:26.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""git log and find any commits that include the""" start="00:23:29.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""term test release in it.""" start="00:23:33.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So let's try it. First I have to add the""" start="00:23:35.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""button type and that's all it takes and it""" start="00:23:38.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""defined it now. So anywhere in Emacs now I""" start="00:23:41.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""can use this button type essentially.""" start="00:23:44.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So let me try to activate it.""" start="00:23:47.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Okay, and it says yeah let's save it.""" start="00:23:49.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Okay so now it's running a git log command.""" start="00:23:53.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It found all the commits and now of course if""" start="00:23:56.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I had made a return on this commit it""" start="00:23:59.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""recognizes it as an implicit link,""" start="00:24:02.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and if I search for what was a test release,""" start="00:24:05.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""there it is. So this commit had that in""" start="00:24:09.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""there. So all these matches,""" start="00:24:11.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""so I don't know how other people do this,""" start="00:24:14.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but for me this makes it a lot simpler.""" start="00:24:16.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So a lot of power that any programmer can""" start="00:24:21.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""use. And finally, if you've mastered Emacs""" start="00:24:24.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Lisp, or you're starting to,""" start="00:24:27.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you can look in the hib types file in""" start="00:24:29.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyperbole and see all sorts of uses of defib,""" start="00:24:33.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""which is defined implicit button.""" start="00:24:37.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And that's the full power of e-LISP when you""" start="00:24:39.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""want to define 1. So what we're going to do""" start="00:24:42.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""here is I wanted to know,""" start="00:24:45.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""given a date, what the day of the week is.""" start="00:24:47.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And because the date primitives weren't quite""" start="00:24:49.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""written the way I might like,""" start="00:24:53.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it's a little longer than some.""" start="00:24:55.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But I'm just going to evaluate this list.""" start="00:24:57.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And I've now defined DOW as an action type.""" start="00:25:00.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Now, how do I know I'm doing that?""" start="00:25:06.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So I can always say Control-H,""" start="00:25:08.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""capital A here to see what a button's going""" start="00:25:11.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to do. And it tells me When I'm there,""" start="00:25:13.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I'm at a hyperbole button,""" start="00:25:15.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and the type is from category DOW.""" start="00:25:18.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And what's it gonna do?""" start="00:25:24.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It takes a mark, it's gonna do a message""" start="00:25:25.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""action. Okay, so let's try it.""" start="00:25:27.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It tells me that's a date,""" start="00:25:31.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it falls on a Sunday,""" start="00:25:32.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""which is today. That's correct.""" start="00:25:34.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So 2 days from today is a Tuesday.""" start="00:25:36.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Beautiful. So we've just totally transformed""" start="00:25:39.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""what we can do with text.""" start="00:25:44.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You notice there's no markup here.""" start="00:25:46.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And this is working with all of the other""" start="00:25:49.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""implicit types that we have everywhere in""" start="00:25:53.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Emacs. It's only going to match to this kind""" start="00:25:55.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of pattern and anywhere else,""" start="00:25:57.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, it just won't trigger that type.""" start="00:26:00.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So lots of power. You just need to get""" start="00:26:03.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""started with Hyperbole.""" start="00:26:06.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""There's great documentation both inside the""" start="00:26:07.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""code and in the manual.""" start="00:26:10.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""There's a fast demo that you can start with""" start="00:26:12.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and there's about 10 different videos.""" start="00:26:15.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""There'll be 3 presentations on hyperbole here""" start="00:26:18.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""at the conference, and I hope you've enjoyed""" start="00:26:21.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this presentation. I'd love to answer your""" start="00:26:25.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""questions and get some new users for""" start="00:26:28.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyperbole. So lastly, I'd like to thank my""" start="00:26:31.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""co-maintainer, Matt, who's going to speak""" start="00:26:36.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""later about the extensive test protocols we""" start="00:26:38.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""have in Hyperbole. Hyperbole works on every""" start="00:26:42.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""version of Emacs from 27.1""" start="00:26:46.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""up, and every operating system and Windows""" start="00:26:48.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""system that you use. And thanks so much to""" start="00:26:52.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the volunteers and the speakers at EmacsConf.""" start="00:26:56.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You do a great job, and we're all really""" start="00:26:59.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""appreciative that you take all the time that""" start="00:27:02.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you do to make this happen.""" start="00:27:04.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:27:06.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: And thank you so much Bob.""" start="00:27:09.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So I'll let you do the gymnastics to join us""" start="00:27:11.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""back on BBB and put your webcam.""" start="00:27:14.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""In the meantime, I'll invite people,""" start="00:27:17.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""as Sasha told you in the introduction,""" start="00:27:19.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to go put your question in the pad.""" start="00:27:21.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""The link is on the talks page and also on""" start="00:27:23.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""IRC. So take your time.""" start="00:27:25.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We've already got some people who've asked""" start="00:27:28.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""questions. You can also start joining the""" start="00:27:29.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""room. Let me just ping Sasha.""" start="00:27:33.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Ping to open ID HyperAmp.""" start="00:27:35.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So, you'll be able to join us on""" start="00:27:39.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""BigBlueButton as well to go chat with Bob""" start="00:27:41.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""more directly. I'm not sure if people have""" start="00:27:43.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""joined already. Not yet.""" start="00:27:45.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So, Bob, what I'll do,""" start="00:27:50.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we already have 4 questions.""" start="00:27:51.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I'm gonna read them to you and you can take""" start="00:27:52.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""your time answering them,""" start="00:27:54.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but we do have about 7 minutes until we go to""" start="00:27:54.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the next talk, so we need to be a little bit""" start="00:27:57.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay.""" start="00:28:00.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: chop-chop. All right, so reading the first""" start="00:27:59.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""questions, and I'm also going to display them""" start="00:28:03.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""for the stream to see,""" start="00:28:05.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""do buttons keep their metadata within the""" start="00:28:07.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""same file? E.g., would I see it if I change""" start="00:28:09.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to fundamental mode, for instance?""" start="00:28:12.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: So all of the things that I was showing you,""" start="00:28:15.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""implicit buttons have no metadata.""" start="00:28:19.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""That's the great thing about them,""" start="00:28:21.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""is you just type them in the buffer and what""" start="00:28:23.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you see is all there is to that button and""" start="00:28:27.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""hyperbole generates all the smarts associated""" start="00:28:30.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""with them. When you create an explicit""" start="00:28:33.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""button, which I showed you 1 or 2 examples""" start="00:28:35.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of, that metadata is, there is metadata with""" start="00:28:38.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that, and that is stored in a separate file""" start="00:28:42.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""in the same directory called .hypb.""" start="00:28:45.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So it's hidden away and it doesn't affect the""" start="00:28:49.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""format of the buffer that it's in.""" start="00:28:51.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So again, what you see is what you get.""" start="00:28:53.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You just see the delimiters around the""" start="00:28:56.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""explicit button and that's it.""" start="00:28:58.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So Hyperbole takes care of all that for you.""" start="00:29:01.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""However, if you embed them into like a mail""" start="00:29:04.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""message, which you can,""" start="00:29:08.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you can mail buttons, then there is a hidden""" start="00:29:09.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""area at the end of the mail message that""" start="00:29:12.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""encodes the metadata for the explicit""" start="00:29:14.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""buttons.""" start="00:29:17.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Ok, great. Next question.""" start="00:29:19.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Is it possible to link to a file by its ID,""" start="00:29:21.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""like the node, org ID or some similar unique""" start="00:29:24.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""string inside?""" start="00:29:27.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, In fact, that's 1 of the new features in""" start="00:29:29.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""9. You just made a return on an ID and it""" start="00:29:33.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""takes you right to the org node,""" start="00:29:37.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""works with org Rome and org straight out of""" start="00:29:40.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the box. We're looking at ways to make it""" start="00:29:44.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""easier to just insert those in places,""" start="00:29:47.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but since you have word keys that do that""" start="00:29:50.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""already, you can just insert them in any""" start="00:29:52.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""documents and Hyperbole will recognize them.""" start="00:29:55.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I think In some cases you may need to put ID""" start="00:29:58.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""colon in front of the ID as well.""" start="00:30:02.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Generally it works.""" start="00:30:05.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Ok, great. Moving on to the next question.""" start="00:30:08.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Regarding the frames example,""" start="00:30:12.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""any thoughts or considerations for a""" start="00:30:14.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""transient interface or is this something 1""" start="00:30:16.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""could already toggle? Are you familiar with""" start="00:30:19.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""transient interface?""" start="00:30:22.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, we don't use transient because we,""" start="00:30:23.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, Hyperbole started out in 1991,""" start="00:30:26.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""though it's had much much work since then so""" start="00:30:30.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we predate a lot of newer things in Emacs and""" start="00:30:34.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""then we just use them as as they Become""" start="00:30:37.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""useful too hyperbole We think the The mini""" start="00:30:41.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""buffer menu is pretty good.""" start="00:30:45.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We could rewrite stuff in transient,""" start="00:30:46.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but we haven't seen the need yet.""" start="00:30:48.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Maybe high control, that might be a good""" start="00:30:52.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""candidate, because there are so many keys in""" start="00:30:54.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it. So we'll think about that.""" start="00:30:58.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But it would be a while before we got to it.""" start="00:31:00.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. Moving on to the next question.""" start="00:31:04.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Sorry I got really confused because there's a""" start="00:31:07.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""French salut, you know,""" start="00:31:08.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""in the text of it. Is someone saying hi to me""" start="00:31:10.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""or something? All right,""" start="00:31:12.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""next question. Regarding multi-file search""" start="00:31:14.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""functionality, why not implement it within""" start="00:31:16.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the existing framework of MetaX grep or""" start="00:31:22.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""similar built-in commands?""" start="00:31:24.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Yet another search interface sounds a bit""" start="00:31:26.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""redundant.""" start="00:31:28.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Multi-file search, so HiRolo I guess you're""" start="00:31:30.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""talking about. I think what you missed there""" start="00:31:34.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""is that High Rollo matches to records,""" start="00:31:36.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""multi-line records, so it's not a""" start="00:31:40.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""line-oriented match, it's a record-oriented""" start="00:31:42.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""match. So Grep, you can say maybe give me 3""" start="00:31:45.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""lines of context, but what if I have a""" start="00:31:50.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""20-line record? I want to see the whole""" start="00:31:52.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""thing. And so, it's a full-text search""" start="00:31:56.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""interface, which lets you have any size""" start="00:31:59.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""entries or nodes in the match buffer.""" start="00:32:04.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So that's 1 reason. MADAX grep works with""" start="00:32:07.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""hyperbole. I mean, you use it if you want and""" start="00:32:10.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""then you can hit MADA return on grep lines.""" start="00:32:13.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So we basically take everything from POSIX""" start="00:32:16.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and everything in Emacs and we try to make a""" start="00:32:20.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""lot of it simpler to use.""" start="00:32:24.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We don't take away any of the functionality,""" start="00:32:26.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we just augment it.""" start="00:32:29.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right, and I think that's the logic for a lot""" start="00:32:32.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of the packages, you know,""" start="00:32:35.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the philosophy is just you create your little""" start="00:32:36.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""bit, your little island where you do your""" start="00:32:38.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""stuff. And if you can resonate with other""" start="00:32:40.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""islands so much the better.""" start="00:32:42.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And it feels like between those islands,""" start="00:32:43.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, hyperbole is a great way to connect""" start="00:32:45.700" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""things that are just text.""" start="00:32:48.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So it's always been a lovely philosophy.""" start="00:32:50.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""There's always been a lovely philosophy""" start="00:32:52.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""behind it.""" start="00:32:53.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: 1 other point I'd make there is that the""" start="00:32:55.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyrolo also contains logical search""" start="00:32:58.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""operators. So when I typed in that string you""" start="00:33:01.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""could just as well type with like Lisp""" start="00:33:04.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""expressions, semi Lisp expressions.""" start="00:33:07.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You can say open paren and word 1,""" start="00:33:09.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""word 2, close paren. You know you can have or""" start="00:33:13.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and XOR and not and it'll do the search and""" start="00:33:17.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""just retrieve the entries,""" start="00:33:22.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""again, multi-line entries that match all of""" start="00:33:24.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the criteria that you specified there.""" start="00:33:27.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So that's fairly unique,""" start="00:33:29.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I think. So you basically got a full text""" start="00:33:31.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""search platform with logical operators,""" start="00:33:33.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""instantly, you know, fast moving,""" start="00:33:36.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""rapid keys that you can control everything""" start="00:33:38.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""with and it's all integrated into this larger""" start="00:33:42.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""framework.""" start="00:33:45.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay, great. Well, Bob,""" start="00:33:47.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you have 2 more questions,""" start="00:33:49.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but there's a big 1 about what inspired you""" start="00:33:50.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to write it back. It's being hyperbole around""" start="00:33:53.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the time of its birth,""" start="00:33:56.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but sadly, we only have about 1 more minute.""" start="00:33:57.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So what I'm going to ask you to do,""" start="00:34:00.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""feel free to answer the question.""" start="00:34:01.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""If you go on BBB, I've pasted the link to the""" start="00:34:02.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""other pad. I think you can see it on your""" start="00:34:05.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: I have the ether pad up.""" start="00:34:08.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: computer as well. Right,""" start="00:34:06.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""so what are we going to do?""" start="00:34:11.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I'm Sorry, I'm just a little bit pressed by""" start="00:34:14.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""time because it's not me controlling when we""" start="00:34:16.679" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""move on to the next talk,""" start="00:34:18.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""as was evidenced yesterday when we got yonked""" start="00:34:19.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to the next talk. So Bob,""" start="00:34:21.719" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""feel free to take all the time you want to""" start="00:34:24.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""answer questions. People,""" start="00:34:25.679" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""if you wanna join the Big Blue Button room,""" start="00:34:26.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the links are available and open on the talk""" start="00:34:28.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""page. You can join and ask as many questions""" start="00:34:30.239" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""as you want to Bob. And for us,""" start="00:34:31.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""with a live stream, we'll be moving on to the""" start="00:34:33.679" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""next talk in about 30 seconds.""" start="00:34:35.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So Bob, all that's left is for me to thank""" start="00:34:37.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you for your presentation again this year and""" start="00:34:39.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thank you, Leo.""" start="00:34:43.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: for all your answers. All right.""" start="00:34:41.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Bye bye, Bob. And we'll be moving on to the""" start="00:34:45.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""next talk in about 10 seconds.""" start="00:34:47.699" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""See you in a bit. All right,""" start="00:34:49.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Bob, we are off air I think now.""" start="00:34:53.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Thank you so much. I need to get moving for""" start="00:34:56.139" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, is somebody gonna keep writing answers""" start="00:34:59.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""in here or I need to type them in?""" start="00:35:02.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: the next talk. It's probably best now if you""" start="00:34:57.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""read the questions on your own and answer""" start="00:35:06.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""them. We'll collate everything together,""" start="00:35:09.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we'd just like to have your answers.""" start="00:35:11.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: I hope some people will join the BBB.""" start="00:35:15.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: it in my... All right,""" start="00:35:19.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""bye-bye.""" start="00:35:21.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: But I'll start. I'll put Bye-bye.""" start="00:35:17.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So let me take a second here to see what""" start="00:35:24.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""questions we have. Did we cover that?""" start="00:35:28.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""OK. The point is why not upstream search""" start="00:35:36.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""interface? Could you clarify that question?""" start="00:35:42.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I don't quite know what that means.""" start="00:35:46.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So I'll go on to the next 1 and come back to""" start="00:35:51.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that. Hyperlinks been around for a number of""" start="00:35:53.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""years now. What inspired you to write it back""" start="00:35:57.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""around the time of its birth?""" start="00:35:59.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Well, that's a great question.""" start="00:36:01.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It was born before the World Wide Web,""" start="00:36:04.700" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""actually. And it was right before.""" start="00:36:07.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I remember we were in the midst of a version""" start="00:36:10.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""when the first version of the web occurred.""" start="00:36:13.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And I was thinking that there was going to be""" start="00:36:16.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""an information explosion of unstructured""" start="00:36:19.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""information. And like we needed to have much""" start="00:36:22.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""better tools to be able to manage say like""" start="00:36:27.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""5,000 email messages coming in and all sorts""" start="00:36:30.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of non-database-oriented information""" start="00:36:36.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""structures. So I said we need an advanced""" start="00:36:39.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""interactive hypertext system and it needs to""" start="00:36:42.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""work with all the general capabilities that""" start="00:36:46.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we use like email and our document production""" start="00:36:49.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""systems. So I was doing research at the time""" start="00:36:54.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""at a university And I decided to work on""" start="00:36:58.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""something that we called personalized""" start="00:37:04.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""information environments.""" start="00:37:06.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And there's a paper about this out there if""" start="00:37:07.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you want to dig it out on the web.""" start="00:37:10.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So Pies, as they were called,""" start="00:37:12.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""was an architecture which would have a bunch""" start="00:37:16.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of managers, like Hyperbole was 1 of the""" start="00:37:20.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""managers, the hypertext manager,""" start="00:37:24.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and then a bunch of point tools that would""" start="00:37:26.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""leverage the managers,""" start="00:37:29.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""like an email reader would be a point tool""" start="00:37:30.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that would leverage the hypertext manager.""" start="00:37:33.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And so the first, I did in fact write""" start="00:37:36.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""something called PyMail,""" start="00:37:39.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""which was very much Gmail-like,""" start="00:37:41.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""before Gmail. And so inside,""" start="00:37:44.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and I did a, it was like our mail in a way,""" start="00:37:48.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but inside your our mail summaries,""" start="00:37:51.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""for example, you could have explicit buttons""" start="00:37:54.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""embedded and that were drawn from the subject""" start="00:37:57.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of your email message,""" start="00:38:01.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and they'd work just like the regular button.""" start="00:38:02.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So it was very flexible,""" start="00:38:06.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it had rule-based processing and things.""" start="00:38:07.700" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So Hyperbole came out of that,""" start="00:38:11.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it's come a long way,""" start="00:38:13.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but it's still a very useful core hypertext""" start="00:38:15.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""system, hypermedia system,""" start="00:38:20.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I should say. Are you familiar with the""" start="00:38:22.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Embark package? I am a bit.""" start="00:38:26.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I've just started using it.""" start="00:38:28.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I think there's some overlapping""" start="00:38:30.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""functionality with hyperbole.""" start="00:38:32.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Yes, we've found that people over time have""" start="00:38:34.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""enjoyed hyperbole and have started""" start="00:38:39.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""replicating some of its features,""" start="00:38:41.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, small amounts of the features.""" start="00:38:43.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I talked to, I hope I don't miss his name,""" start="00:38:47.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but O'Adam who writes that once in a while we""" start="00:38:51.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""dialogue and I think Embark is great,""" start="00:38:56.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, I'll give him some pointers too and""" start="00:38:59.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""he thinks that Embark and hyperbole are quite""" start="00:39:04.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""compatible too, just like organ hyperbole.""" start="00:39:08.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So that's how we like to keep it.""" start="00:39:11.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Some people prefer just a small package of""" start="00:39:14.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""mBARC, and it does different things than what""" start="00:39:18.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyperbole does. So I think you use all of""" start="00:39:21.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""these tools together, and they can work very""" start="00:39:23.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""well together. Any other questions?""" start="00:39:27.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Anybody still here? If not,""" start="00:39:34.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""probably people are off to another talk.""" start="00:39:38.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So thank you very much And again look for""" start="00:39:41.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyperbole version 9 in the next week.""" start="00:39:47.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Thanks very much. Bye.""" start="00:39:53.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Should I leave BBB? Oh Alpha Papa's here.""" start="00:40:00.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hey. Good to see you. Alright,""" start="00:40:07.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""well... Well, I'll stay for another minute,""" start="00:40:16.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but I think I'm going to go off video 2 and""" start="00:40:22.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""start listening to another talk.""" start="00:40:27.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Thanks, everyone. Thanks everyone.""" start="00:40:30.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Yes, I can hear you. Yes,""" start="00:40:56.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Have you been answering questions?""" start="00:40:58.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: I can hear you. finished answering the""" start="00:40:56.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""questions. We're all done.""" start="00:41:03.700" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: I Okay, cool. Well, what I'm going to do,""" start="00:41:00.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I'm going to close the room unless you want""" start="00:41:07.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to go a little longer,""" start="00:41:09.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""because this talk that we're playing right""" start="00:41:10.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""now is finishing really quick and we don't""" start="00:41:11.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""have a Q&A afterwards.""" start="00:41:13.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So, do you want to stay on air or something?""" start="00:41:15.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, if you let people know to come back,""" start="00:41:19.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""because someone went to go hear that""" start="00:41:21.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""presentation, I can stay.""" start="00:41:23.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sure, I'll make an announcement then.""" start="00:41:25.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And you can stay, we'll just put on BBB.""" start="00:41:27.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You can stay muted until people join,""" start="00:41:29.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but this way it opens up menus for people to""" start="00:41:31.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""join and if no 1 shows up in 5 minutes we'll""" start="00:41:33.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""all go on break. Does that sound okay?""" start="00:41:36.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Great, thank you.""" start="00:41:38.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool, I'll go back to the management in the""" start="00:41:40.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""background and I'll let you know.""" start="00:41:44.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Okay, Bob, I've won the stream.""" start="00:43:25.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We are joining it now.""" start="00:43:27.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We've got about 5 seconds.""" start="00:43:28.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And I think we are back.""" start="00:43:41.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""so we are gone, Bob, please.""" start="00:43:49.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Hi. So, yeah, I was going to say,""" start="00:43:45.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""can we see if anybody comes back in the room?""" start="00:43:54.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""How do you tell?""" start="00:43:57.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: You should be able to show on the left,""" start="00:44:01.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you've got on BbBlueButton,""" start="00:44:03.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you've got a button, I'm showing it on the""" start="00:44:04.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""screen, but you've got a little button that""" start="00:44:06.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""allows you to show the people joining.""" start="00:44:08.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So, hello everyone. Let's see if you had more""" start="00:44:10.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""question on your pad that we could be taking""" start="00:44:15.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""in the meantime, just give me a second to""" start="00:44:17.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""find""" start="00:44:19.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: your pad. Here we go, an error occurred.""" start="00:44:19.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right, it's loading up.""" start="00:44:31.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay. Wow. Feels like there's an AI writing""" start="00:44:25.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this stuff on the pad.""" start="00:44:37.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Has it? Is this the last pad?""" start="00:44:41.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Oh no, this is a different 1,""" start="00:44:45.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Which question are you looking at now?""" start="00:44:49.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: sorry. It was a different pad,""" start="00:44:47.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh right.""" start="00:44:55.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: that was the problem. Okay,""" start="00:44:53.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""here we go. Okay, I'm back.""" start="00:44:57.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So, yeah, it looks like...""" start="00:45:00.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Is anybody back? Send,""" start="00:45:02.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""if you're here, send a chat message.""" start="00:45:04.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, because it's been something.""" start="00:45:08.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You have, apparently, whenever we leave those""" start="00:45:10.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""BBB chat room open, the moment we go off air,""" start="00:45:14.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""people start joining and asking a lot of very""" start="00:45:18.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""interesting questions and you know that's all""" start="00:45:20.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""well and good, we'll be able to put them on""" start="00:45:22.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the page later on. But it'd be great if you""" start="00:45:24.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""could also have those discussions when we are""" start="00:45:26.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""live because a lot of people would benefit""" start="00:45:28.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""from the brilliance that goes on in this""" start="00:45:30.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""room. So please don't be shy,""" start="00:45:32.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: So we're on the general stream now?""" start="00:45:37.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: join and talk. Yep, we are back on the""" start="00:45:34.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""general stream. We have about until 10 of the""" start="00:45:41.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""next hour, which is 19 minutes.""" start="00:45:46.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Just- Why don't you and I talk?""" start="00:45:48.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So have you ever tried hyperbole,""" start="00:45:52.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Leo?""" start="00:45:56.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: I have never, but You know,""" start="00:45:58.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it feels like every year when you present""" start="00:46:00.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""something, it feels like I already know so""" start="00:46:03.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""much. Because of the buttons,""" start="00:46:05.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it feels like it's also something that we've""" start="00:46:08.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""reinvented many times in Emacs.""" start="00:46:10.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It's like conversion to evolution,""" start="00:46:12.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""except you're the 1 who started ahead of""" start="00:46:14.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""everyone else.""" start="00:46:16.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well, that's a good point because,""" start="00:46:17.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, we have, Emacs itself has push""" start="00:46:19.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""buttons, which you see like in the help""" start="00:46:23.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""buffers. And those used to,""" start="00:46:25.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we didn't really do anything with those,""" start="00:46:27.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but now we've subsumed them as implicit""" start="00:46:30.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""buttons as well. So you're made a return,""" start="00:46:32.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we'll work on those anywhere too.""" start="00:46:35.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So, we're trying to get,""" start="00:46:38.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you use 1 key, right? To control every type""" start="00:46:42.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of button that you have.""" start="00:46:45.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It works on org links,""" start="00:46:47.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""org buttons anywhere, or URLs.""" start="00:46:48.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Because it's so simple.""" start="00:46:53.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""All you need is like 5 to 10 lines of code to""" start="00:46:54.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""map. You map the pattern that represents a""" start="00:46:58.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""concept, right? And then you can create an""" start="00:47:02.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""infinite number of those buttons from that""" start="00:47:05.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""type. That's what's really cool about""" start="00:47:07.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyperbole, is say I have a 500 page document""" start="00:47:09.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it uses a really weird format for""" start="00:47:13.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""cross-referencing, right?""" start="00:47:15.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I write my 3 lines of pattern match to work""" start="00:47:17.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""with that. And then everywhere throughout""" start="00:47:22.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that document and the hundreds of other""" start="00:47:24.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""documents that will be created with that""" start="00:47:25.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""format, they're all live buttons instantly.""" start="00:47:27.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Nothing changed about the document.""" start="00:47:31.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""That's really cool. You know,""" start="00:47:34.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""word mode, we have global word buttons,""" start="00:47:35.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but mostly it has to be embedded within an""" start="00:47:37.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""org file, right? And follow that syntax.""" start="00:47:42.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""With hyperbole, it's like we can adapt as the""" start="00:47:45.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""world adapts around us to whatever formats""" start="00:47:51.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""people want to use that day.""" start="00:47:55.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And you can even change things to look the""" start="00:47:56.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""way you want, right, and have your own""" start="00:47:59.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""cross-references. There's something built""" start="00:48:02.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""into Hyperbole that's not really active,""" start="00:48:04.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""which was sort of along the Zettelkasten way.""" start="00:48:08.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We wrote this a long time ago.""" start="00:48:13.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It's called hib-doc.el,""" start="00:48:15.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it's a card catalog notion.""" start="00:48:19.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So it uses the high rollo in the background""" start="00:48:22.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but it lets you create these forms that are""" start="00:48:26.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""cards that you fill out with whatever kind of""" start="00:48:30.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""data you want and then it gives you the full""" start="00:48:32.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""text searching across the cards and each card""" start="00:48:35.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""has a unique ID that you can reference""" start="00:48:38.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""similar to org IDs but these are human""" start="00:48:41.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""readable and human typable and so you can you""" start="00:48:45.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""can just have a cross-reference to any doc ID""" start="00:48:49.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and essentially create what Engelbart used to""" start="00:48:52.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""call a journal, which is all these IDs on""" start="00:48:56.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""documents that point you directly to the""" start="00:49:00.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""document archive so that you could have like""" start="00:49:03.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""your internal publishing system and you know""" start="00:49:05.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it's very simple to do and it's just 1 module""" start="00:49:10.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""added on to Hyperbole.""" start="00:49:13.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah it's especially interesting for me you""" start="00:49:15.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""know because coming back to the side of""" start="00:49:19.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""convergent evolutions it's funny because the""" start="00:49:21.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""parameters are a little different.""" start="00:49:23.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""For us with org buttons,""" start="00:49:24.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we're very happy. A lot of the stuff during""" start="00:49:26.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""EmacsConf is run with org mode,""" start="00:49:29.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""like we have Elisp going everywhere to""" start="00:49:31.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""compile a lot of org properties,""" start="00:49:34.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""like speaker information,""" start="00:49:38.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""for instance, how long the talk is,""" start="00:49:39.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the title, and all this.""" start="00:49:41.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We have all of this in an org file,""" start="00:49:42.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""which we use as a database,""" start="00:49:44.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but then we can do so much stuff.""" start="00:49:46.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We can send email and we can update the""" start="00:49:47.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""schedule. By the way, if you're interested in""" start="00:49:50.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this, we'll have a talk on the DevTrack in""" start="00:49:52.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the afternoon today that Sacha did and it's""" start="00:49:54.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""wonderful. I'm just teasing it.""" start="00:49:56.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh, that's great.""" start="00:49:58.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: But coming back to Hyperbole,""" start="00:50:00.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""for you, it feels like the parameters were""" start="00:50:01.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""slightly different because the feeling was,""" start="00:50:04.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I just want a tunnel that can work between""" start="00:50:06.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""any type of files. Now,""" start="00:50:09.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it's all well and good.""" start="00:50:10.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Org-Rome, D-Note, and all the stuff like""" start="00:50:11.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this, they create bidirectional links.""" start="00:50:14.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But it's only between org-mode files.""" start="00:50:17.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Whereas what you're achieving with Hyperbole,""" start="00:50:19.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and you've done it much earlier than everyone""" start="00:50:22.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""else, is that you have this concept""" start="00:50:24.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""regardless of the type of file that you're""" start="00:50:27.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""using. And I find this to be beautiful.""" start="00:50:29.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Like 5 years ago, whenever you were talking""" start="00:50:32.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""about hyperbole, I did not have a concrete""" start="00:50:35.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""idea of what was happening.""" start="00:50:37.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But ever since I've gone through the journey""" start="00:50:38.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of really understanding what the El Caster""" start="00:50:40.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""method were about, it feels like you were""" start="00:50:42.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""foreigners in the topic.""" start="00:50:45.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Obviously, you've mentioned the mother of all""" start="00:50:46.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""demos by Edward Engelbart,""" start="00:50:48.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but those ideas are not novel,""" start="00:50:50.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but it feels like only now are they starting""" start="00:50:54.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to be appropriated by people,""" start="00:50:56.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""especially in free software,""" start="00:50:58.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it's really good to see.""" start="00:50:59.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I'm really excited to,""" start="00:51:01.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""well, have my small part to play in this.""" start="00:51:02.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And I'm also excited to be able to chat with""" start="00:51:04.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you and people like Bastien and other people""" start="00:51:06.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""about all those topics.""" start="00:51:10.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I think, you know,""" start="00:51:12.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it's fun that we can laugh now about when""" start="00:51:13.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""people say people are still using Emacs,""" start="00:51:16.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, is because they're not used,""" start="00:51:20.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""certain people aren't using it.""" start="00:51:22.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""They have no idea of how far it's come and""" start="00:51:24.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""how powerful it is. And,""" start="00:51:26.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, we're leveraging Elisp heavily,""" start="00:51:28.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""obviously, but if you look at the definition""" start="00:51:31.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of our types, they look exactly like DIP""" start="00:51:34.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""funds in ELisp. And we've been able to do""" start="00:51:37.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that because of Lisp macros.""" start="00:51:41.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You know, we so we basically have our own""" start="00:51:43.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""domain specific language there,""" start="00:51:46.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but there's almost nothing to learn because""" start="00:51:48.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it's just like what you know from UList.""" start="00:51:51.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So again, you know, taking the concept and""" start="00:51:54.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""leveraging it, abstracting it and leveraging""" start="00:51:57.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it multiple times gives you a lot of power.""" start="00:51:59.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And people, you know, somebody said the other""" start="00:52:03.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""day, and I said, finally,""" start="00:52:06.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""this quote happened. He said,""" start="00:52:07.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""there's so many things that I do with""" start="00:52:11.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""hyperbole every day that I forget that I'm""" start="00:52:15.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""using hyperbole. Because it's just so""" start="00:52:17.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""embedded in this guy's workflow.""" start="00:52:21.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And that's really how I use it.""" start="00:52:23.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You know, there are features in there,""" start="00:52:25.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""can't use everything, right?""" start="00:52:27.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So there are features that I don't use,""" start="00:52:29.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but I use a lot of things and it's all like""" start="00:52:32.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""muscle memory, just like the keyboard,""" start="00:52:35.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the Emacs key bindings.""" start="00:52:38.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So it's very exciting to get to that level.""" start="00:52:39.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And now, you know, we haven't started with""" start="00:52:42.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the chatbots or any of the AI integration,""" start="00:52:44.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but I'm starting to think about that a little""" start="00:52:47.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""bit and how we'll interface to that world and""" start="00:52:49.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I think it's going to be very exciting.""" start="00:52:53.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, likewise and I think it harks back to""" start="00:52:56.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""what we were talking about before when we""" start="00:52:58.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""mentioned Hyperbole being a package inside of""" start="00:53:00.660" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""an ecosystem that is Emacs.""" start="00:53:03.700" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But it's not because something is well""" start="00:53:05.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""circumscribed in terms of feature set that it""" start="00:53:08.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""does not influence everything around it.""" start="00:53:10.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Like Hyperbole can be used with something""" start="00:53:12.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""completely at the opposite end of what it was""" start="00:53:15.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""intended for, just because it provides a good""" start="00:53:18.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""set of tools that can be used wherever else""" start="00:53:21.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you want in Emacs. And it's the same thing""" start="00:53:23.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""with Org Mode, it's the same thing with many,""" start="00:53:26.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""many different things.""" start="00:53:27.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And it feels like integrating AIs,""" start="00:53:29.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""or generative AIs, into Emacs would provide""" start="00:53:33.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""such a tool that could apply to any kind of""" start="00:53:39.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""other major mode or any kind of other use.""" start="00:53:42.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So I'm also excited to see this.""" start="00:53:45.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It feels like we are sitting at the brink of""" start="00:53:46.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""a revolution. I'm not going to say the acne""" start="00:53:50.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""stuff, but it definitely feels like right""" start="00:53:52.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""now, by trying to see what we can do with AI,""" start="00:53:54.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it's definitely going to change the way not""" start="00:53:57.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""only we program, but also the way we take""" start="00:53:59.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""notes and the way we design stuff,""" start="00:54:01.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""arcing back to what John Wigley said""" start="00:54:03.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""yesterday about his draft program on macOS.""" start="00:54:05.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Bob, if you don't mind,""" start="00:54:09.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I see people typing questions and I also see""" start="00:54:11.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""people joining on people buttons,""" start="00:54:13.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""so I'm going to read you the 2 questions that""" start="00:54:14.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""have been added. Is that okay?""" start="00:54:16.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Great, go for it.""" start="00:54:19.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool, so first question.""" start="00:54:21.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Wow, what you're describing now,""" start="00:54:23.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and that's when you were talking about the""" start="00:54:25.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""bi-directional links and especially the last""" start="00:54:27.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""question in its entirety,""" start="00:54:31.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""What you're describing now reminds me a lot""" start="00:54:33.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""about HyperCard that I grew up on.""" start="00:54:35.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Do you know if Hyperbole inspired Bill""" start="00:54:37.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Atkinson or if you were inspired by""" start="00:54:39.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""HyperCard? Or were there just a lot of""" start="00:54:41.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""thoughts about hyper-contextuality around""" start="00:54:43.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that time?""" start="00:54:44.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Alright, well this is another interesting""" start="00:54:46.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""anecdote. I don't know if it's true or not,""" start="00:54:50.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but I think HyperCard predated our stuff.""" start="00:54:52.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It was right around the same time when""" start="00:54:57.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyperbole was starting out.""" start="00:55:00.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But when I was doing the Pi research,""" start="00:55:02.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I worked at, when I left school,""" start="00:55:06.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I worked at Motorola, and we did a lot of""" start="00:55:08.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""work with Apple back then.""" start="00:55:11.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And somebody came back and he said,""" start="00:55:13.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, the people over there have seen""" start="00:55:15.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""your Pi research and they really liked it a""" start="00:55:19.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""lot. And so they were leveraging that when""" start="00:55:21.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""they decided to create the division that they""" start="00:55:26.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""called Apple Pi, which was the originator of""" start="00:55:28.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the Newton which eventually led to the""" start="00:55:33.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""iPhone. So it all kind of is interconnected""" start="00:55:36.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""just like the impact that free software has""" start="00:55:41.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""had around the world. So you never know where""" start="00:55:44.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""your stuff is gonna go or end up.""" start="00:55:47.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. All right, moving on to the next""" start="00:55:51.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""question. Is it possible to only use 1""" start="00:55:53.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""feature of hyperbole without the others,""" start="00:55:55.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""i.e. Using only the implicit explicit buttons""" start="00:55:57.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""without I control I roller or without having""" start="00:56:00.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to rewrite part of the code in hyperbole in""" start="00:56:03.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""order to be able to load a smaller hyperbole.""" start="00:56:05.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Does it make sense?""" start="00:56:08.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes we get asked this all the time.""" start="00:56:10.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So you can use any little bit that you want""" start="00:56:12.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""anywhere right you can even just call code""" start="00:56:16.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""from Hyperbole. I mean you don't use""" start="00:56:19.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""everything in Emacs, right?""" start="00:56:23.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But you still install Emacs on your machine.""" start="00:56:25.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It's exactly the same thing.""" start="00:56:28.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Those libraries don't take up any memory,""" start="00:56:30.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""they take up a little disk space and it's so""" start="00:56:33.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""trivial compared to the amount of disk we""" start="00:56:36.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""have today. So a lot of things are not loaded""" start="00:56:38.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""unless you activate them.""" start="00:56:41.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And so I know that you do have to build all""" start="00:56:45.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""those things. So maybe that's what bothers""" start="00:56:48.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""people. It takes 2 minutes if you're using,""" start="00:56:51.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it depends how fast your computer is.""" start="00:56:56.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But you build it once on install like every""" start="00:56:58.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""other package. And it used to be that there""" start="00:57:01.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""would be a lot of warnings just because of""" start="00:57:04.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the way we wrote the code and we didn't""" start="00:57:06.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""really have to deal with some of those""" start="00:57:09.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""warnings. But with this new release,""" start="00:57:11.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""we've gotten rid of almost all of them,""" start="00:57:13.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""including the native compiler messages.""" start="00:57:15.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So it should be a very clean install now,""" start="00:57:20.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and just use 1 part at a time.""" start="00:57:22.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""But the other parts are there in case you""" start="00:57:26.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""make a link to something and you use a""" start="00:57:29.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""facility just like I was showing as I went""" start="00:57:32.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""across subsystems today.""" start="00:57:34.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It may take you a year,""" start="00:57:36.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but then all of a sudden you find the use""" start="00:57:38.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""case for Hyrule and you say,""" start="00:57:40.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""oh, I'm glad I have it there.""" start="00:57:42.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And yes, some of these things could be split""" start="00:57:44.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""into sub packages like you do in the org""" start="00:57:47.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""ecosystem. But given our limited resources on""" start="00:57:49.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the team, we find having them all in 1 gives""" start="00:57:52.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""us a higher level of quality and lets us""" start="00:57:56.400" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""deliver a better integrated system for your""" start="00:57:59.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""use.""" start="00:58:02.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, exactly. And I think,""" start="00:58:04.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you know, it's, it's not a monolith.""" start="00:58:06.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I mean, it's usually easier,""" start="00:58:10.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""easy, more easy, more easy.""" start="00:58:12.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Sorry, I was right on the first try.""" start="00:58:14.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It's usually easier to maintain a monolith""" start="00:58:16.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that contains many bits of functionality like""" start="00:58:20.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""org. You have plenty of people using org""" start="00:58:23.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""mode, not using org-agenda,""" start="00:58:25.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""for instance, or you've got plenty of people""" start="00:58:27.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""using org-mode and barely using Babel because""" start="00:58:29.142" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it doesn't really translate to their use.""" start="00:58:31.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And I feel like I very much agree with you.""" start="00:58:35.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It's okay to install a package and only use""" start="00:58:37.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""some of the functions.""" start="00:58:39.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I was reminded, as you were discussing this,""" start="00:58:40.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""of the consults package,""" start="00:58:43.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""which is part of the VertiCo,""" start="00:58:45.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""mbark and marginalia and all this.""" start="00:58:48.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Consult, it replaces a lot of the Emacs""" start="00:58:51.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""built-in commands like for finding your""" start="00:58:54.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""buffers or finding text inside of your""" start="00:58:56.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""buffer. It's great. And you do not need to""" start="00:58:59.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""completely move to consult as you get""" start="00:59:04.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""started. You can start colonizing 1 step at a""" start="00:59:06.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""time the function that you usually use.""" start="00:59:09.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And I highly recommend to people to not let""" start="00:59:12.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the size of a project deter them from trying""" start="00:59:15.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it out because, again,""" start="00:59:18.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""in Emacs, everything is horizontal.""" start="00:59:20.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""If somehow you want to use something that was""" start="00:59:23.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""not intended primarily for this,""" start="00:59:28.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""or if you only want to use 10% of a package,""" start="00:59:29.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""well, do it. An example that I have for me is""" start="00:59:32.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that Lispy is the minor mode that I use for""" start="00:59:35.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""editing Elisp documents,""" start="00:59:39.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and it's great. Elisp provides similar""" start="00:59:42.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""functions to ParaEdit,""" start="00:59:45.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""which might be a little more popular,""" start="00:59:46.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""which allows you to have modal editing when""" start="00:59:47.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you are on specific parts of a file,""" start="00:59:50.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""like the opening parenthesis or the closing""" start="00:59:52.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""parenthesis. It's great,""" start="00:59:55.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it provides modal editing for those modes,""" start="00:59:56.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but I certainly do not know everything,""" start="00:59:58.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""every modal command associated to it.""" start="01:00:02.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I just use the 1 that makes the most sense to""" start="01:00:04.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""me. So feel free to explore.""" start="01:00:06.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: I'll just say we get this so much.""" start="01:00:11.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It's not that large. I mean there's a fair""" start="01:00:13.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""number of files but it's just like 1 major""" start="01:00:16.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""directory and then the KOutliner directory.""" start="01:00:19.680" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And when you look at these things,""" start="01:00:24.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you install web applications,""" start="01:00:25.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""everything else, just when you download the""" start="01:00:27.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""source code, it's much,""" start="01:00:30.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""much smaller than any of that.""" start="01:00:31.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So I don't know why people you know accept""" start="01:00:34.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that it's larger than your typical package.""" start="01:00:37.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Why there's really an issue there.""" start="01:00:39.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: I think it's because people tend to assume""" start="01:00:43.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that a paradigm like the 1 you're describing,""" start="01:00:46.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""which seems to be changing the way you use""" start="01:00:48.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Emacs in a way because you're no longer""" start="01:00:51.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""thinking of as buffers as separate entities,""" start="01:00:53.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you can tunnel between them.""" start="01:00:56.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You know, it feels like a huge paradigm shift""" start="01:00:57.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and you assume that the code behind it is""" start="01:01:00.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""going to be humongous as well,""" start="01:01:02.300" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but it's usually not the case.""" start="01:01:04.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It's just that the idea is very pure at the""" start="01:01:05.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""start, and the paradigm shift that it allows""" start="01:01:07.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""is also magnificent. But at the end of the""" start="01:01:10.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""day, the code is fairly simple,""" start="01:01:14.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""because it does 1 thing and it does it well.""" start="01:01:16.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: 1 thing I noticed too,""" start="01:01:19.780" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I mean I'm a big believer in turnkey kind of""" start="01:01:21.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""systems. In fact a long time ago when I built""" start="01:01:23.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""an IDE on Emacs called InfoDoc that was""" start="01:01:27.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""delivered pre-compiled.""" start="01:01:31.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So it's like you download it like every other""" start="01:01:33.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""app and you run it. And so I think""" start="01:01:35.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""eliminating all the friction that occurs,""" start="01:01:39.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and you know, I just got going recently with""" start="01:01:42.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the wonderful packages that you just""" start="01:01:46.380" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""mentioned, VertiCo and Consult,""" start="01:01:49.160" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but they don't have a manual that covers all""" start="01:01:51.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that. They use sort of like a cookbook,""" start="01:01:55.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""a wiki online to answer a lot of the""" start="01:01:58.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""questions that people have and everybody has""" start="01:02:02.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to figure out their configurations you know""" start="01:02:04.600" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""to make these things all work together.""" start="01:02:07.640" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We'd like to do that engineering and say here""" start="01:02:12.800" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it is you know it's like if you want to""" start="01:02:16.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""configure it and make it your own,""" start="01:02:18.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you can do it. But there is a default""" start="01:02:20.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""configuration that handles all the typical""" start="01:02:23.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""use cases and you can just load it up and run""" start="01:02:26.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""because it's made to use,""" start="01:02:30.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you don't have to hack it to make it useful""" start="01:02:32.840" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""for you.""" start="01:02:36.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, it reminds me of the discussion we had""" start="01:02:37.900" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""with Stéphane yesterday about sane defaults.""" start="01:02:40.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And I think the question was,""" start="01:02:43.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Emacs should probably ship with sane defaults""" start="01:02:46.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""for people. And Stéphane's answer was,""" start="01:02:49.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""well, my sane defaults might not be the same""" start="01:02:51.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""thing as your sane defaults.""" start="01:02:53.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And that's why I think it's important,""" start="01:02:55.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""really, to have a core set of features,""" start="01:02:57.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""be it with hyperbole of org mode,""" start="01:02:59.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""that is well-documented,""" start="01:03:01.360" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""as you mentioned. But what I like about this""" start="01:03:02.880" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""in a way, and I think hyperbole is perhaps""" start="01:03:05.460" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""taking more benefits of this than Org Mode,""" start="01:03:07.260" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""is that the self-documentation aspect of it""" start="01:03:09.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""feels like it's easier with hyperbole because""" start="01:03:12.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you're not bound by Org Mode buffers.""" start="01:03:14.540" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You can link to just about everything.""" start="01:03:17.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""And for me, this ability to self-document is,""" start="01:03:19.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""well, first, very true to the philosophy of""" start="01:03:24.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Emacs in the first place,""" start="01:03:26.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""but also opens up those resonance cycles""" start="01:03:27.500" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""where, oh, you get interested and then you""" start="01:03:32.020" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""start reading up and then the documentation""" start="01:03:34.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""is so good that it feeds into your practice""" start="01:03:35.820" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""and then it goes nuclear and you gain so much""" start="01:03:38.320" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""knowledge as a result of this.""" start="01:03:41.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""All right, Bob, we are about out of time.""" start="01:03:42.620" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""We only have about 1 minute until we go to""" start="01:03:44.480" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the next talk. Do you have any passing words?""" start="01:03:46.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: I do. I think, you know,""" start="01:03:50.180" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""the world's complex, it's getting more""" start="01:03:54.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""complex. I think that's why people use Emacs""" start="01:03:57.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""in the first place, because it's a big""" start="01:04:00.520" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""system. You wouldn't use it unless you wanted""" start="01:04:02.560" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it to simplify your life.""" start="01:04:04.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Hyperbole is built with the same idea in""" start="01:04:07.580" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""mind. You may not get it just like Lisp.""" start="01:04:10.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""A lot of people don't understand when they""" start="01:04:13.740" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""first encounter it, but when they do""" start="01:04:15.720" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""understand it, they're blown away.""" start="01:04:17.420" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""It changes their life.""" start="01:04:19.960" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""You know, when you really understand implicit""" start="01:04:22.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""buttons, I think that's 1 of the things in""" start="01:04:25.120" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""hyperbole that can change your Emacs working""" start="01:04:28.100" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""life. So just give that a try and I think""" start="01:04:30.860" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you'll be pleasantly surprised across time.""" start="01:04:34.080" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: you so much Bob. We'll be moving on to the""" start="01:04:39.220" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""next talk in about 20 seconds so everyone see""" start="01:04:40.920" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""you in a bit and Bob thank you so much again.""" start="01:04:42.980" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thanks very much. And thank Thank you.""" start="01:04:37.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right I think we are off here now.""" start="01:04:51.140" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""So thank you so much, Bob.""" start="01:04:53.040" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I'm going to need to step out and get ready""" start="01:04:53.940" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, do your thing. You do a great job at""" start="01:04:56.609" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""it. But I wanted to ask you where in London""" start="01:04:59.240" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: for the next talk. I'm not in London,""" start="01:04:55.440" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""I'm in France, and I just moved to London.""" start="01:05:05.280" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 0]: you are. Oh, okay, got it.""" start="01:05:01.760" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Sorry, I thought you were.""" start="01:05:11.200" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Take care.""" start="01:05:13.000" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right, bye-bye, Bob.""" start="01:05:14.340" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Thanks a lot. Bye-bye.""" start="01:05:15.060" video="mainVideo-hyperamp" id="subtitle"]]
+[[!template text="""Bye-bye.""" start="01:05:15.750" video="mainVideo-hyperamp" id="subtitle"]]
+
+Questions or comments? Please e-mail [rsw@gnu.org](mailto:rsw@gnu.org?subject=Comment%20for%20EmacsConf%202023%20hyperamp%3A%20Top%2010%20ways%20Hyperbole%20amps%20up%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/hyperamp-before.md b/2023/info/hyperamp-before.md
new file mode 100644
index 00000000..12a070f0
--- /dev/null
+++ b/2023/info/hyperamp-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 66-min talk; Q&A: BigBlueButton conference room
+Status: TO_REVIEW_QA
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="hyperamp-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 1:05:16 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.json">Download --main.json (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/4Cpb89zHKgQjob3gHUs73C">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.json">Download --main.json (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.md">Download --pad.md</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/hyperamp-nav.md b/2023/info/hyperamp-nav.md
new file mode 100644
index 00000000..f56bde9c
--- /dev/null
+++ b/2023/info/hyperamp-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/core">Emacs core development: how it works</a>
+Next by track: <a href="/2023/talks/koutline">Using Koutline for stream of thought journaling</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/hyperdrive-after.md b/2023/info/hyperdrive-after.md
new file mode 100644
index 00000000..8c26acc8
--- /dev/null
+++ b/2023/info/hyperdrive-after.md
@@ -0,0 +1,1338 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="hyperdrive-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hello, I'm Joseph Turner.""" start="00:00:00.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This talk is about hyperdrive.el,""" start="00:00:02.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""peer-to-peer file system in Emacs.""" start="00:00:05.107" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrive is a JavaScript library""" start="00:00:09.100" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""developed by the Holepunch team""" start="00:00:11.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for sharing files on a peer-to-peer network.""" start="00:00:13.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's released under the Apache 2.0 license.""" start="00:00:16.500" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""Hyperdrives introduction""" start="00:00:19.840" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""Here's how it works.""" start="00:00:19.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""To participate as a peer, you run a node,""" start="00:00:21.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""a lightweight local server that allows you""" start="00:00:24.581" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to connect with other nodes on the network.""" start="00:00:27.281" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can create a hyperdrive or multiple hyperdrives,""" start="00:00:29.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and you can author files within them.""" start="00:00:33.123" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Each hyperdrive is automatically assigned""" start="00:00:36.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""a globally unique link""" start="00:00:38.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that starts with `hyper://`.""" start="00:00:40.906" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""When you share that link with someone,""" start="00:00:44.580" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""they have access to your hyperdrive.""" start="00:00:47.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Anyone who has that link can load the hyperdrive""" start="00:00:49.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from the network and view its content.""" start="00:00:52.820" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""When you load a Hyperdrive file from the network,""" start="00:00:56.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""your node caches that data locally""" start="00:00:59.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and automatically begins seeding it""" start="00:01:02.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""back to the network,""" start="00:01:04.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""making it available for others to download from you.""" start="00:01:05.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are single writer.""" start="00:01:12.620" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that when you create a new drive,""" start="00:01:14.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you are the only one who can make changes to it.""" start="00:01:16.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Others can view it""" start="00:01:19.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and can seed it back to the network,""" start="00:01:21.267" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but you're the only one who can modify it.""" start="00:01:23.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are offline first.""" start="00:01:27.340" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that when you load data from the network,""" start="00:01:29.740" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it's stored locally on your machine""" start="00:01:33.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for you to view later,""" start="00:01:34.900" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""even when you're disconnected from other peers.""" start="00:01:36.180" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can also create new drives""" start="00:01:38.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and modify your drives when you're offline,""" start="00:01:40.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then share those changes""" start="00:01:43.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""once you connect with peers later.""" start="00:01:45.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are local first.""" start="00:01:47.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that when you are connected with""" start="00:01:50.300" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""other peers on a local area network,""" start="00:01:52.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""even if none of the peers involved""" start="00:01:54.740" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""are connected to the broader Internet,""" start="00:01:56.940" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can still share files.""" start="00:01:58.980" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are sparsely replicated.""" start="00:02:02.060" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that you can download individual files""" start="00:02:04.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from a hyperdrive without having to download""" start="00:02:07.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the whole thing.""" start="00:02:10.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This saves on disk space and also allows you""" start="00:02:11.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to quickly load just the files""" start="00:02:15.471" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that you're interested in.""" start="00:02:17.233" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are mutable.""" start="00:02:20.540" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can add files, change files,""" start="00:02:22.467" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""remove files from a hyperdrive.""" start="00:02:25.500" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And when peers load your drive""" start="00:02:28.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""using the very same link,""" start="00:02:30.667" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""they will be able to load""" start="00:02:32.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the latest changes that you've published.""" start="00:02:34.025" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are versioned.""" start="00:02:37.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that when you make changes to a file,""" start="00:02:39.460" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the previous versions of those files are not lost.""" start="00:02:42.429" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Peers can load the old versions of a file""" start="00:02:46.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that was changed or deleted, for example,""" start="00:02:49.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""simply by specifying the version number""" start="00:02:52.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of the hyperdrive when the file still existed""" start="00:02:55.067" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or existed in a previous state.""" start="00:02:58.167" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""About USHIN and the contributors""" start="00:03:04.600" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""I'm presenting this talk on behalf of USHIN.""" start="00:03:04.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""USHIN is a tiny nonprofit whose mission is to""" start="00:03:07.380" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""promote personal, community and global health""" start="00:03:10.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""through free and open universal shared information""" start="00:03:14.032" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for everybody.""" start="00:03:17.367" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""USHIN was founded in the early 90s""" start="00:03:19.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""by Paula Maas, Steve Nash and others""" start="00:03:21.551" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""with the goal of creating""" start="00:03:24.860" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""a distributed health information network""" start="00:03:26.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that would allow people to find, share, compare""" start="00:03:29.131" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and deliberate health information""" start="00:03:33.429" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from a variety of sources.""" start="00:03:35.667" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Since then, the scope of the project has broadened""" start="00:03:37.780" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to include all kinds of information.""" start="00:03:40.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And in recent years, we've been focusing on""" start="00:03:43.260" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""building with peer-to-peer software.""" start="00:03:45.780" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""About three years ago,""" start="00:03:49.500" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we started working with Mauve Signweaver,""" start="00:03:50.534" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""who has since then been our steadfast""" start="00:03:52.634" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""peer-to-peer explorer and guide.""" start="00:03:54.767" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This year, we started working on""" start="00:03:58.260" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this hyperdrive.el Emacs package,""" start="00:04:00.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and Adam has been the powerhouse""" start="00:04:02.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""behind the Emacs Lisp development.""" start="00:04:05.060" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""About a month ago,""" start="00:04:08.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Jonas Bernoulli started joining with us,""" start="00:04:08.967" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and he has been offering his expertise""" start="00:04:11.100" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the realm of user interface design""" start="00:04:14.420" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""using his Transient library.""" start="00:04:15.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And Protesilaos Stavrou has been not only valuable""" start="00:04:18.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in terms of user design and feedback,""" start="00:04:22.140" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but he created a wonderful""" start="00:04:25.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""basic introduction to Hyperdrive. Take a look.""" start="00:04:27.120" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""Basic introduction to Hyperdrive""" start="00:04:32.646" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""[Prot]: Hello everyone!""" start="00:04:32.646" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""My name is Protesilaos, also known as Prot.""" start="00:04:33.586" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In this video, I want to show you""" start="00:04:36.366" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the basics of hyperdrive.el.""" start="00:04:37.806" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is a package for Emacs that lets us connect to""" start="00:04:40.746" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the Hyperdrive peer-to-peer network.""" start="00:04:44.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We can browse existing drives on the network,""" start="00:04:47.833" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""meaning existing file systems,""" start="00:04:51.573" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or create and maintain our own hyperdrive,""" start="00:04:53.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to which we can add, remove or edit files.""" start="00:04:59.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We will see this together.""" start="00:05:03.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I have here in front of me is a basic""" start="00:05:05.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""use-package declaration for hyperdrive.el.""" start="00:05:08.733" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""All I am doing is binding `hyperdrive-menu`""" start="00:05:12.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to a key and also activating""" start="00:05:16.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the menu bar entry of hyperdrive.""" start="00:05:19.793" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me show you very quickly, `hyperdrive-menu`.""" start="00:05:23.613" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And this is the sort of interface that it brings up.""" start="00:05:26.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We will take a closer look at it.""" start="00:05:31.293" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""As for the menu bar,""" start="00:05:33.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we have `hyperdrive-menu` over here,""" start="00:05:35.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and we will take a look at this as well.""" start="00:05:41.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Suffice to say that""" start="00:05:44.193" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can get the same functionality""" start="00:05:45.693" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""with the menu bar or with `hyperdrive-menu`,""" start="00:05:48.273" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as by calling the commands directly""" start="00:05:51.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""with `M-x` or their respective key bindings.""" start="00:05:55.893" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I won't cover everything in that regard,""" start="00:06:00.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but please bear this fact in mind.""" start="00:06:02.980" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""Managing files with Hyperdrive.el""" start="00:06:06.133" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""Let's start then with what I have here""" start="00:06:06.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in this other tab, which is a set of files.""" start="00:06:09.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I have prepared in my local file system - a hyperdrive.""" start="00:06:13.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This contains a set of files""" start="00:06:18.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I ultimately want to share""" start="00:06:20.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""on the peer-to-peer network,""" start="00:06:22.653" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""meaning that I want this to eventually be""" start="00:06:24.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""reflected in my own hyperdrive.""" start="00:06:28.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I did to get started is""" start="00:06:31.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I invoked `hyperdrive-menu`.""" start="00:06:34.054" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The very first thing you need to do""" start="00:06:36.493" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to get started with Hyperdrive,""" start="00:06:38.573" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""either to browse or to create,""" start="00:06:40.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is to start the gateway,""" start="00:06:43.633" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""meaning to be able to connect to""" start="00:06:46.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the peer-to-peer network.""" start="00:06:48.693" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You see here in `hyperdrive-menu` that there is""" start="00:06:50.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""an indicator next to the &quot;Gateway&quot; heading""" start="00:06:53.493" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""telling me that the gateway is on.""" start="00:06:56.293" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I started it with `G` and then `s`.""" start="00:06:59.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Once you start it,""" start="00:07:04.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can type `h` to visit an existing drive,""" start="00:07:06.573" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""`N` to create a drive,""" start="00:07:10.153" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or `L` to open a link to an existing hyperdrive.""" start="00:07:12.113" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You may get this link via email, for example.""" start="00:07:17.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In this case, let me be over here""" start="00:07:21.154" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and let me just kill this buffer.""" start="00:07:24.933" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I want in this case is to select a hyperdrive.""" start="00:07:27.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You see here I have my own hyperdrive""" start="00:07:32.953" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and also the hyperdrive of USHIN,""" start="00:07:35.453" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the developers of hyperdrive.el.""" start="00:07:37.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I want to do in this case,""" start="00:07:41.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you see there are various options available.""" start="00:07:43.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I want to type `v` to view a file.""" start="00:07:46.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And in this case,""" start="00:07:50.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will just type the forward slash,""" start="00:07:50.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which means to view the root directory""" start="00:07:53.633" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of this hyperdrive. And I am here.""" start="00:07:56.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It is an empty drive apart from""" start="00:08:00.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""my credentials over here.""" start="00:08:04.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""There is nothing more really to see.""" start="00:08:06.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But what I want to do is""" start="00:08:10.113" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to start adding files to this drive.""" start="00:08:12.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me use the menu bar for this.""" start="00:08:15.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will hover over to the menu bar,""" start="00:08:18.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I will find the &quot;Hyperdrive&quot; submenu.""" start="00:08:21.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then I will go find where the drives are.""" start="00:08:24.773" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And you see that there are writable drives,""" start="00:08:27.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""meaning drives that I manage,""" start="00:08:30.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and read-only drives, meaning drives of other users.""" start="00:08:32.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In this case, USHIN is read-only, of course,""" start="00:08:37.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and Protesilaos is writable.""" start="00:08:40.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So what I want to do is upload a file to Protesilaos.""" start="00:08:42.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And it prompts me in the Minibuffer for a file.""" start="00:08:48.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will just add the README.""" start="00:08:52.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It is asking me, &quot;Where do you want to add it?&quot;""" start="00:08:55.293" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And in square brackets, the default is to add it""" start="00:08:58.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the root directory of the hyperdrive.""" start="00:09:00.553" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I will just type `RET` to select the default.""" start="00:09:03.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And there it is. It is already in the drive.""" start="00:09:07.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me add the COPYING file as well,""" start="00:09:11.393" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""using the same method.""" start="00:09:14.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will go find my drive. &quot;Upload File.&quot;""" start="00:09:16.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And let's add the COPYING.""" start="00:09:21.393" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And I also want to add it to the root directory.""" start="00:09:23.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So already I have two files.""" start="00:09:29.433" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is looking good.""" start="00:09:30.633" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I am opening the file inside of hyperdrive.""" start="00:09:31.953" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is not the same file""" start="00:09:37.014" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as I have in my local directory.""" start="00:09:39.033" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I can do here, for example, is I can...""" start="00:09:42.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me open another file here, the COPYING.""" start="00:09:47.433" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I can create an Org link.""" start="00:09:49.893" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Notice that these are Org files.""" start="00:09:52.113" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I will use the standard `org-store-link` command.""" start="00:09:54.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can see the key binding I invoked""" start="00:09:58.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and the command it calls""" start="00:10:01.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""on the top right corner of my screen.""" start="00:10:03.533" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So what I did is""" start="00:10:05.893" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I copied a link to this hyperdrive file.""" start="00:10:07.413" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And in this other file over here,""" start="00:10:11.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I want to say &quot;Free/libre.&quot;""" start="00:10:15.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I am editing my hyperdrive terms:""" start="00:10:22.153" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;Check the,&quot; and I will paste the link here,""" start="00:10:27.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;for how to use my files.&quot;""" start="00:10:35.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If we check what is here,""" start="00:10:40.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you will see that this is a link""" start="00:10:44.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""inside of the hyperdrive.""" start="00:10:47.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And it's pointing specifically""" start="00:10:50.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to that heading over there,""" start="00:10:52.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which has this unique identifier,""" start="00:10:54.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as you can see over here.""" start="00:10:58.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So this is wonderful.""" start="00:11:00.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I want to rename it to &quot;Check the COPYING""" start="00:11:03.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for how to use my files.&quot;""" start="00:11:09.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will save this.""" start="00:11:11.953" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now what I want to do is,""" start="00:11:13.933" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I want to invoke `hyperdrive-menu`.""" start="00:11:16.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And you will see now the menu, unlike earlier,""" start="00:11:20.493" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""has more commands, more stuff we can do with it.""" start="00:11:23.153" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For example, I can type `w` to copy a URL.""" start="00:11:27.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And by typing `w`, you will notice...""" start="00:11:31.793" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me go to the `*scratch*` buffer to paste this in.""" start="00:11:34.500" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You will notice what the URL is.""" start="00:11:37.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It is my hyperdrive, my unique identifier,""" start="00:11:40.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then forward slash, meaning the root directory,""" start="00:11:44.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then README.org.""" start="00:11:47.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That is the file I was editing.""" start="00:11:49.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's do `hyperdrive-menu` again.""" start="00:11:54.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's remove the `*scratch*` buffer.""" start="00:11:56.573" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And let's do `hyperdrive-menu`.""" start="00:11:58.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And you will notice that there are options""" start="00:11:59.933" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to download the file, for example.""" start="00:12:02.380" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If you are reading somebody else's file,""" start="00:12:05.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can download it to your own file system.""" start="00:12:07.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me do that. &quot;Download.&quot;""" start="00:12:10.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And it is asking me, &quot;Where do you want to save this?&quot;""" start="00:12:12.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For now, I will save it in the `/tmp/`, like this.""" start="00:12:14.753" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's call it test.org.""" start="00:12:20.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Okay, `/tmp/test.org`.""" start="00:12:23.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me go and visit `test.org`.""" start="00:12:25.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And there it is.""" start="00:12:29.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It downloaded it just like that.""" start="00:12:30.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is how you can, for example,""" start="00:12:32.653" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""download the pictures and videos""" start="00:12:35.373" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I will eventually share on my hyperdrive.""" start="00:12:38.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's invoke `hyperdrive-menu` again.""" start="00:12:42.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And let's go up to the parent, you see,""" start="00:12:44.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""with the caret (`^`) sign.""" start="00:12:48.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This will take me to the parent directory,""" start="00:12:50.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in this case, the root directory of my hyperdrive.""" start="00:12:53.173" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""Dired like interface""" start="00:12:56.573" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""Let me do it a bit differently.""" start="00:12:56.573" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The same idea, a bit differently.""" start="00:12:58.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For those of you who are familiar with""" start="00:13:00.193" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Dired and the `dired-jump` command,""" start="00:13:02.733" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Dired is the standard file manager of Emacs.""" start="00:13:05.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And `dired-jump` is a command that lets you jump""" start="00:13:08.753" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from the current file""" start="00:13:13.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the directory that contains that file.""" start="00:13:14.593" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So you see, I am here.""" start="00:13:18.653" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The `dired-jump` command, by default,""" start="00:13:20.733" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is bound to Ctrl-x, Ctrl-j (`C-x C-j`).""" start="00:13:22.553" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So if I do `C-x C-j`, in this case,""" start="00:13:25.233" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it invokes a command.""" start="00:13:29.433" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can see the name of it, `hyperdrive-up`,""" start="00:13:30.773" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is functionally equivalent to `dired-jump`.""" start="00:13:33.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It does the same thing, meaning that it took me""" start="00:13:37.733" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the parent directory of this file.""" start="00:13:41.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I think this is very helpful.""" start="00:13:45.253" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This listing over here, in general,""" start="00:13:48.253" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""tries to mimic or to reuse""" start="00:13:50.693" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the knowledge you already have of Dired.""" start="00:13:55.273" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For example, if you type `o`,""" start="00:13:58.553" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it will open the file at point in the other window,""" start="00:14:01.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""same as in Dired.""" start="00:14:05.313" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Whereas if you type `RET`,""" start="00:14:07.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it would open it in the current window.""" start="00:14:08.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Again, same as what you will do in Dired.""" start="00:14:11.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's see over here.""" start="00:14:16.253" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You have options to jump with `j`,""" start="00:14:18.014" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is using Minibuffer completion to go to a file.""" start="00:14:21.643" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Right now, I only have two files,""" start="00:14:26.233" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but the idea is the same.""" start="00:14:28.433" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's, again, what you would do in Dired""" start="00:14:32.100" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""if you type `j` with the default key bindings, though,""" start="00:14:34.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""not with Evil mode or something else.""" start="00:14:37.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's see again what we have over here.""" start="00:14:40.293" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can create a bookmark, and this will work,""" start="00:14:42.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but no need to show you everything.""" start="00:14:45.934" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The idea is that you create a bookmark""" start="00:14:48.554" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the way you create any Emacs bookmark,""" start="00:14:50.694" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to a file, to a directory.""" start="00:14:53.214" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It doesn't matter.""" start="00:14:54.933" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then you can jump to it,""" start="00:14:55.994" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the way bookmarks in Emacs always work.""" start="00:14:57.734" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""History in hyperdrive""" start="00:15:01.234" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""What I want to show you now""" start="00:15:01.234" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""a little bit is the history.""" start="00:15:02.893" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""History in Hyperdrive""" start="00:15:06.313" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""has to do with the drive itself.""" start="00:15:09.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Meaning that individual files""" start="00:15:11.434" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""do not have their own history,""" start="00:15:13.614" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but the drive as such has a history.""" start="00:15:15.314" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Whenever you add a file, you remove a file,""" start="00:15:18.674" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or you edit a file, you are incrementing""" start="00:15:22.014" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the versioning of the hyperdrive by one.""" start="00:15:25.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So each action corresponds to one unit of history.""" start="00:15:29.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If you add a file, remove a file, and edit a file,""" start="00:15:34.574" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this means that you are up three versions.""" start="00:15:37.833" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So whatever your version number is, plus three.""" start="00:15:40.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I am on version 24* over here. [* latest, not version 24]""" start="00:15:44.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me go to this file now,""" start="00:15:48.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and let me do `V h`""" start="00:15:55.933" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to see a history of it.""" start="00:15:59.793" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You will notice that between versions 23 and 24,""" start="00:16:02.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this file was constant.""" start="00:16:07.553" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But in version 25, we have a change.""" start="00:16:09.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""When you are in this buffer over here,""" start="00:16:12.633" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can type the equals sign (`=`),""" start="00:16:14.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is a key binding that will bring up the diff.""" start="00:16:17.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the set of changes between""" start="00:16:22.373" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the previous version and the current version.""" start="00:16:24.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And you see here, between versions 23 and 25,""" start="00:16:27.033" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I have this addition.""" start="00:16:32.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I think this is wonderful because now""" start="00:16:35.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can always go and check""" start="00:16:38.373" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""what is the state of this file.""" start="00:16:41.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What is this person up to?""" start="00:16:42.413" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What have they been changing?""" start="00:16:43.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And with Hyperdrive, you can also visit…""" start="00:16:46.313" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me go to the parent here.""" start="00:16:50.793" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can always visit a previous history.""" start="00:16:58.514" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So, for example, I will go to the previous history,""" start="00:17:02.413" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and let me see this file again""" start="00:17:06.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in its previous history.""" start="00:17:08.033" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I am looking at the file,""" start="00:17:09.554" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but notice that the file now is not editable""" start="00:17:11.094" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""because this is in the past.""" start="00:17:15.154" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I cannot rewrite history.""" start="00:17:17.354" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I can only go to the present and then modify it""" start="00:17:19.314" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then create a new history, a new version.""" start="00:17:23.414" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But this helps me see the state of the file""" start="00:17:27.214" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""at that version of the hyperdrive.""" start="00:17:31.214" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So this is the basic idea of it, folks.""" start="00:17:35.973" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""Use case of sharing large files""" start="00:17:39.973" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""What I want to do then is""" start="00:17:39.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""continue with my process here.""" start="00:17:42.234" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me actually do it like this so that you can see.""" start="00:17:46.254" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Continue with the process of""" start="00:17:51.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""publishing all those files""" start="00:17:54.374" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I have on my hyperdrive.""" start="00:17:56.494" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For example, this is a picture of a flower""" start="00:17:59.754" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I have taken.""" start="00:18:02.854" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I think it's very nice.""" start="00:18:04.114" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And this is a video of an eagle""" start="00:18:05.734" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that was flying above me.""" start="00:18:08.033" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And I will share this on the Hyperdrive network.""" start="00:18:09.594" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""From the network, by the way,""" start="00:18:13.774" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can also stream video as well.""" start="00:18:15.733" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It is described in the hyperdrive.el manual,""" start="00:18:18.453" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but I cannot show you everything right now.""" start="00:18:20.694" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I think you get the idea.""" start="00:18:24.253" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The gist is, you have a file system""" start="00:18:26.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that you can share with the world""" start="00:18:29.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""using peer-to-peer technology.""" start="00:18:31.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And for me, this is a powerful tool.""" start="00:18:34.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is a valuable proposition""" start="00:18:38.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""because I can share these large files I have,""" start="00:18:41.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""these pictures or videos,""" start="00:18:45.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which I cannot post on my website""" start="00:18:47.433" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""due to bandwidth considerations.""" start="00:18:49.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And this way, I can still share with the world""" start="00:18:52.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""something that I consider interesting.""" start="00:18:55.593" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That's all for today, folks.""" start="00:18:59.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Thank you very much for your attention.""" start="00:19:00.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Remember that hyperdrive.el is still in development""" start="00:19:01.894" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and things may change.""" start="00:19:05.514" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But the fundamentals are in place""" start="00:19:07.394" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and will remain constant.""" start="00:19:10.313" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That's all for today. Take care. Goodbye.""" start="00:19:13.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""[Joseph]: Thank you, Prot.""" start="00:19:19.461" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""Drive creation with hyperdrive.el""" start="00:19:20.913" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""Another fundamental feature of hyperdrive.el""" start="00:19:20.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is drive creation.""" start="00:19:23.980" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The first step, as always,""" start="00:19:26.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is to make sure that the gateway is running.""" start="00:19:28.339" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll open up `hyperdrive-menu` with `C-c h`.""" start="00:19:30.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""By the way, my key presses,""" start="00:19:35.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as the commands that they run,""" start="00:19:36.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""can be seen at the top right of my screen.""" start="00:19:38.699" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Down here, I see that the gateway is off.""" start="00:19:42.439" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll start it with `G s`.""" start="00:19:44.619" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, it takes a few moments""" start="00:19:49.139" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for the gateway to spin up.""" start="00:19:50.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So to refresh the menu,""" start="00:19:52.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will close it and open it again.""" start="00:19:54.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now we see that the gateway is on.""" start="00:19:58.399" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `N` to create a new drive.""" start="00:20:01.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now it's prompting me for a new hyperdrive seed.""" start="00:20:05.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""A seed is a string of characters""" start="00:20:09.759" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that will be used to generate,""" start="00:20:12.939" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in tandem with my secret master key,""" start="00:20:14.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""a new public key that will globally,""" start="00:20:18.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""uniquely identify this drive.""" start="00:20:21.339" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll type in &quot;emacsconf&quot;.""" start="00:20:24.879" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And after a moment,""" start="00:20:31.759" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we see the newly created, empty drive.""" start="00:20:32.659" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll open up `hyperdrive-menu` once more.""" start="00:20:36.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And I'll press `h` to open the sub-menu that shows""" start="00:20:40.099" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""more information about this hyperdrive,""" start="00:20:43.799" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as commands related to this drive.""" start="00:20:45.979" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In blue here, we see the seed that I just entered""" start="00:20:50.879" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as the public key that it generated.""" start="00:20:54.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We also see that the petname""" start="00:21:00.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is also set to emacsconf.""" start="00:21:02.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The petname is different from the seed.""" start="00:21:06.540" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The petname is my personal, local identifier""" start="00:21:09.039" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for this drive.""" start="00:21:13.079" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I can change it whenever I want.""" start="00:21:14.679" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And while it's not a secret,""" start="00:21:16.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it's not displayed to other users.""" start="00:21:19.739" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I will leave it for now.""" start="00:21:23.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;emacsconf&quot; is fine.""" start="00:21:26.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But when I go to share this drive,""" start="00:21:28.139" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll want to display something more memorable""" start="00:21:30.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""than this long public key.""" start="00:21:34.159" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And that's what the nickname is for.""" start="00:21:36.879" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll change that by pressing `n`,""" start="00:21:39.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll type in &quot;Emacs Conference&quot;.""" start="00:21:42.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, when other peers load this hyperdrive""" start="00:21:48.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""by its URL, which I can copy by pressing `w`,""" start="00:21:51.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""they will see the nickname""" start="00:21:57.059" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in addition to the public key.""" start="00:21:59.499" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So if hyperdrive.el is like a phone book,""" start="00:22:02.019" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the public keys are akin to phone numbers,""" start="00:22:05.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the nickname is like the name that your contacts""" start="00:22:09.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""give you when they introduce themselves,""" start="00:22:13.939" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and the petname is the name""" start="00:22:16.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that you actually write down in your phone book.""" start="00:22:18.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll show you what nicknames and petnames look like""" start="00:22:22.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for drives that are not writable to me.""" start="00:22:25.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `C-g` to close this submenu,""" start="00:22:29.619" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and now I'm back at the main menu.""" start="00:22:32.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `C-u h` to choose a hyperdrive,""" start="00:22:34.639" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll look at Prot's hyperdrive here.""" start="00:22:39.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And here we see that the nickname""" start="00:22:44.559" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of Prot's hyperdrive is &quot;Protesilaos&quot;.""" start="00:22:46.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, it's grayed out,""" start="00:22:49.839" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which means that I can't change it.""" start="00:22:50.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I can't change it because it's not my hyperdrive.""" start="00:22:53.239" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But I can change the petname if I want it""" start="00:22:56.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to show up under a different name.""" start="00:22:58.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll press `p`,""" start="00:23:00.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll type in &quot;Prot&quot;, and hit Enter.""" start="00:23:02.439" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'll open his hyperdrive by pressing `f`.""" start="00:23:06.679" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And I'll pick a path, I'll just hit `RET`""" start="00:23:11.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to open the root directory.""" start="00:23:13.899" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now, when Prot's hyperdrive shows up,""" start="00:23:16.759" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""at the top of the screen,""" start="00:23:19.459" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I see that it's identified with the petname &quot;Prot.&quot;""" start="00:23:20.539" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""hyperdrive-mirror""" start="00:23:26.199" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""Now I'll show off `hyperdrive-mirror`.""" start="00:23:26.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""`hyperdrive-mirror` is like `hyperdrive-upload-file`,""" start="00:23:28.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""except that it allows you to upload""" start="00:23:32.159" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""an entire directory full of files recursively.""" start="00:23:33.879" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For this example, I will upload""" start="00:23:37.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the contents of the emacsconf-mirror directory.""" start="00:23:40.039" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""First step is to open the menu. I'll press H,""" start="00:23:44.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then I will choose the emacsconf drive.""" start="00:23:48.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In the bottom here, we see the Mirror group.""" start="00:23:53.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The first option that I can change""" start="00:23:57.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is the source directory.""" start="00:23:59.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The source directory is the directory on my local""" start="00:24:01.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""machine from which files will be uploaded.""" start="00:24:04.619" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""By default, the source directory""" start="00:24:08.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is set to the current directory of the main buffer.""" start="00:24:11.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is good for now, so I'll leave it.""" start="00:24:17.060" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The target directory is the directory""" start="00:24:19.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the hyperdrive where the files will end up.""" start="00:24:22.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""By default, it's the root directory,""" start="00:24:25.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but for this example,""" start="00:24:28.839" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll put these files in a subdirectory called notes.""" start="00:24:30.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The filter is the rule that allows you""" start="00:24:36.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to programmatically determine which files""" start="00:24:40.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the local directory will be uploaded""" start="00:24:43.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""into the hyperdrive, and which ones won't.""" start="00:24:46.579" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""By default, all files are mirrored, but in this case,""" start="00:24:50.339" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""let's say that I want to upload only the Org files,""" start="00:24:54.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""these first three, and I want to exclude""" start="00:24:58.499" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the markdown file, solar-oven-notes.md.""" start="00:25:01.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll press `m f`, and I will choose""" start="00:25:05.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the regular expression string option.""" start="00:25:10.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If I wanted to, I could choose a named function""" start="00:25:13.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or a lambda, but I won't demo that here.""" start="00:25:16.279" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll type in `org$`, which will match against""" start="00:25:22.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the files that end with &quot;org.&quot;""" start="00:25:26.339" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The filter is here, and I'll leave confirmation on.""" start="00:25:31.659" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The confirmation step just allows me to review""" start="00:25:35.899" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the list of files that are going to be uploaded""" start="00:25:39.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""into the drive before it happens.""" start="00:25:42.139" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll press `m m` to mirror them, and I see here""" start="00:25:45.899" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that these three files are going to be uploaded.""" start="00:25:52.879" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Looks good. I'll press `C-c C-c` to confirm the mirror.""" start="00:25:58.439" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now it says three files have been uploaded,""" start="00:26:05.559" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and here they are in the drive.""" start="00:26:07.739" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Good, so now I will modify the""" start="00:26:11.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""fermented-overnight-oats file in the hyperdrive.""" start="00:26:15.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I've loaded it, and I'll add here:""" start="00:26:19.939" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;or other grains - cook them in advance if you want to,&quot;""" start="00:26:24.340" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll save it.""" start="00:26:31.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now this file, fermented-overnight-oats.org,""" start="00:26:33.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""has been modified on the hyperdrive""" start="00:26:37.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""more recently than on the file system.""" start="00:26:40.679" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The file system file has not been modified.""" start="00:26:44.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll go back to my local directory,""" start="00:26:48.900" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll modify a different file.""" start="00:26:53.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In this case, I'll add another hoedown""" start="00:26:56.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the fiddle-tunes.org file.""" start="00:27:00.459" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;Tom and Jerry.&quot; That's a good hoedown.""" start="00:27:04.619" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now I'll mirror again.""" start="00:27:09.619" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll open the menu, and I'll press `h`,""" start="00:27:14.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then I'll open up the emacsconf demo drive.""" start="00:27:16.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now I've also decided that""" start="00:27:20.579" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I want to include the solar-oven-notes.md file.""" start="00:27:22.959" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll remove the filter""" start="00:27:26.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""so that it's no longer excluded.""" start="00:27:28.499" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll leave the rest of the settings the same,""" start="00:27:32.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll press `m m` again.""" start="00:27:34.079" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now we see that the""" start="00:27:38.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""`*hyperdrive-mirror*` buffer looks different.""" start="00:27:40.019" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So, there are two main groups.""" start="00:27:43.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""These are the files that are going to be uploaded,""" start="00:27:47.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and these are the files that are ignored.""" start="00:27:49.986" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""They're not going to be uploaded.""" start="00:27:52.899" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The first subgroup is the files that are new locally.""" start="00:27:56.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the solar-oven-notes.md file is new on my machine,""" start="00:28:00.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and it doesn't exist in the hyperdrive.""" start="00:28:04.899" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the mirror command is going to take that file""" start="00:28:07.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and add it to the hyperdrive.""" start="00:28:10.039" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This group contains the files that are newer locally.""" start="00:28:13.759" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the fiddle-tunes.org file""" start="00:28:17.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""has been modified on my local machine,""" start="00:28:19.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but it hasn't been modified on the hyperdrive.""" start="00:28:23.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So `hyperdrive-mirror` is going to take the""" start="00:28:26.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""updated version and put it on the hyperdrive.""" start="00:28:28.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, the first group that's going to be ignored""" start="00:28:33.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""are the files that are older locally.""" start="00:28:35.959" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the fermented oats file has been modified""" start="00:28:39.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""on the hyperdrive more recently""" start="00:28:42.979" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""than on my local file system.""" start="00:28:45.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So `hyperdrive-mirror` isn't going to overwrite""" start="00:28:47.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the version of the file in my hyperdrive""" start="00:28:51.059" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""with the older local version.""" start="00:28:53.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And finally, the emacsconf-preparation.org file""" start="00:28:57.279" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hasn't been modified on either the hyperdrive""" start="00:29:00.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or my local file system,""" start="00:29:05.499" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and the timestamp is identical.""" start="00:29:07.439" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So `hyperdrive-mirror` is going to""" start="00:29:09.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ignore this file as well.""" start="00:29:11.279" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the only two files that are going""" start="00:29:13.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to be uploaded now are the solar-oven-notes.md file""" start="00:29:15.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and the fiddle-tunes.org file.""" start="00:29:19.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll confirm that with `C-c C-c`.""" start="00:29:21.639" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now in my hyperdrive""" start="00:29:25.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we see that there are four files.""" start="00:29:26.579" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The solar-oven-notes.md file has been uploaded,""" start="00:29:28.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and if I open the fiddle-tunes.org file,""" start="00:29:31.679" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we see that it now contains the line &quot;Tom and Jerry,&quot;""" start="00:29:35.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which means that it was updated based on""" start="00:29:39.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the change to the file on my local file system.""" start="00:29:41.659" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This `hyperdrive-mirror` command is the command""" start="00:29:47.099" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that we use to periodically update""" start="00:29:50.559" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the USHIN hyperdrive with""" start="00:29:54.139" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the contents of the USHIN website.""" start="00:29:56.599" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""There's going to be a link to the USHIN hyperdrive""" start="00:30:00.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as the website at the end of the video.""" start="00:30:03.019" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""hyperdrive history""" start="00:30:06.819" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""Now I'll go into a little more detail""" start="00:30:06.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""about the Hyperdrive history buffer""" start="00:30:09.079" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""by showing off the README file in Prot's hyperdrive.""" start="00:30:11.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `C-c h` to open the menu,""" start="00:30:15.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""`C-u h` to be prompted for a drive.""" start="00:30:19.019" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll select Prot's drive,""" start="00:30:22.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""then I'll press `f` to jump to a file""" start="00:30:24.239" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""inside of Prot's drive,""" start="00:30:26.739" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then `RET` to go to the root directory.""" start="00:30:28.739" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""From here, I'll press `j` to jump to""" start="00:30:32.399" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""an item in his directory.""" start="00:30:35.339" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `RET` on the README to load it.""" start="00:30:37.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then finally, I'll open up""" start="00:30:42.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""`C-c h` to look at the menu.""" start="00:30:44.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here, I see that I'm looking at""" start="00:30:49.579" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the latest version of Prot's README.org file.""" start="00:30:50.979" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I also see that the previous version""" start="00:30:56.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of README.org is unknown.""" start="00:30:58.739" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's unknown because hyperdrives""" start="00:31:02.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""are sparsely replicated.""" start="00:31:05.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That means that when my node loaded this""" start="00:31:07.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""README.org file, it didn't bother""" start="00:31:09.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to load anything else.""" start="00:31:12.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It didn't load the previous history""" start="00:31:13.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or any other file in his drive.""" start="00:31:16.059" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But now that I want to check out whether""" start="00:31:18.659" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""there is a previous version, I'll press `V p`.""" start="00:31:20.759" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And when it loads, I see in the mode line down here""" start="00:31:26.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I'm now looking at version 25 of this drive.""" start="00:31:28.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That means that I'm looking at the README.org file""" start="00:31:33.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""at version 25 of this drive.""" start="00:31:36.499" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll open the menu again, and I see""" start="00:31:39.459" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that the same version number is displayed here.""" start="00:31:42.019" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The previous version, before version 25,""" start="00:31:47.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is also unknown because we haven't bothered""" start="00:31:50.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to load anything before version 25.""" start="00:31:53.559" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I also see that the next version, after version 25,""" start="00:31:56.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is the latest version.""" start="00:32:00.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll open that up by pressing `V n`.""" start="00:32:02.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now we are back where we started,""" start="00:32:06.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""at the latest version.""" start="00:32:10.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But now we see that the previous version,""" start="00:32:12.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the version before the latest version, is version 25.""" start="00:32:15.079" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Because now that our node has loaded the previous version,""" start="00:32:18.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it can display that information to us.""" start="00:32:24.300" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""From here, I'll open up the history buffer.""" start="00:32:28.620" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `V h`.""" start="00:32:31.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And I can see that there are two known existent""" start="00:32:35.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ranges in Prot's README.org history.""" start="00:32:40.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that the latest version of README.org""" start="00:32:46.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""was modified at version 39.""" start="00:32:50.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And that Prot made four changes""" start="00:32:54.420" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to other files in his hyperdrive""" start="00:32:57.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""besides the README.org file since then.""" start="00:33:00.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Before that, the time that Prot modified""" start="00:33:04.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the README.org file was at version 25.""" start="00:33:08.660" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then he made 13 other changes to other files""" start="00:33:11.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""inside of this drive.""" start="00:33:15.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Before that, we don't know.""" start="00:33:18.580" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We haven't loaded the history.""" start="00:33:20.259" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But since we're curious,""" start="00:33:21.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll hit `RET` on the unknown line.""" start="00:33:23.179" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now we see that in Prot's hyperdrive,""" start="00:33:27.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the README.org file didn't exist""" start="00:33:32.140" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for the first 22 revisions of his drive.""" start="00:33:34.940" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then Prot created it at version 23.""" start="00:33:39.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then again, at 25, made a change.""" start="00:33:43.780" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then made another change at 39.""" start="00:33:46.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For good measure, I'll show you the diffs.""" start="00:33:50.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The first diff just contains the entire file""" start="00:33:54.420" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""because the file didn't exist before version 23.""" start="00:33:58.180" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then, at version 25, Prot added a link""" start="00:34:05.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the COPYING.org file.""" start="00:34:08.620" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then, at 39,""" start="00:34:13.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Prot changed the link to his own hyperdrive""" start="00:34:14.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to be a relative link.""" start="00:34:17.340" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""Streaming video from hyperdrive""" start="00:34:20.880" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""Now, I'll stream a video from the USHIN hyperdrive""" start="00:34:20.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that shows off a prototype interface we created""" start="00:34:24.300" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for exploring networks of sources of information.""" start="00:34:27.900" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll open up `hyperdrive-menu`.""" start="00:34:31.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Press `C-u h` to be prompted for a drive.""" start="00:34:33.940" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll select the USHIN drive.""" start="00:34:37.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Press `f` to jump to a file in it.""" start="00:34:39.740" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then I'll jump to the media directory.""" start="00:34:41.940" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Once it loads, I'll press `RET` on the video""" start="00:34:46.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I want to stream.""" start="00:34:50.180" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""[Voice from the video]: This is a demonstration""" start="00:34:54.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of the subjective trust interface""" start="00:34:56.686" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that the USHIN team built for the u4u.io web app.""" start="00:34:57.839" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""[Joseph]: There it is.""" start="00:35:02.500" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Streaming a video from Hyperdrive.""" start="00:35:04.080" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""hyperdrive.el under the hood""" start="00:35:08.746" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""Here's how hyperdrive.el works under the hood.""" start="00:35:08.746" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It uses plz [Please],""" start="00:35:13.027" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the HTTP library that Adam Porter wrote,""" start="00:35:14.727" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to send requests via curl to hyper-gateway.""" start="00:35:18.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyper-gateway is a program that Mauve Signweaver wrote,""" start="00:35:22.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which runs a hyperdrive node under the hood.""" start="00:35:26.580" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It also runs a local HTTP server,""" start="00:35:30.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which accepts requests to control the node.""" start="00:35:34.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For example, if hyperdrive.el wants to show a file""" start="00:35:38.460" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from someone's hyperdrive,""" start="00:35:43.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it sends the appropriate link via curl""" start="00:35:45.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as a GET request to hyper-gateway.""" start="00:35:49.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyper-gateway then fetches the data from the network""" start="00:35:52.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and returns it via curl,""" start="00:35:57.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""via plz, back to hyperdrive.el.""" start="00:35:59.340" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If hyper-gateway already has a locally cached copy,""" start="00:36:03.940" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it doesn't bother checking the network.""" start="00:36:07.420" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It just sends it straight away.""" start="00:36:09.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Likewise, if hyperdrive.el wants to add a file""" start="00:36:12.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to a hyperdrive, it sends a PUT request.""" start="00:36:15.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyper-gateway is not installed as part of hyperdrive.el.""" start="00:36:20.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It needs to be installed""" start="00:36:24.980" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as a separate, executable program.""" start="00:36:26.660" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We have plans to switch from using hyper-gateway""" start="00:36:35.740" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to another program that Mauve Signweaver""" start="00:36:39.460" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is working on, called hyper-sdk-rpc.""" start="00:36:42.459" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyper-sdk-rpc will give us more fine-grained control""" start="00:36:47.839" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""over the underlying Hyperdrive node,""" start="00:36:52.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which will open up some new features.""" start="00:36:54.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For example, we'll be able to rename files atomically,""" start="00:36:56.820" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""diff directories between versions,""" start="00:37:00.900" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and list the peers that we're currently connected to.""" start="00:37:03.420" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here are some of the Emacs libraries""" start="00:37:11.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that hyperdrive.el depends on.""" start="00:37:13.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrive.el uses plz to send HTTP requests""" start="00:37:17.540" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to hyper-gateway. Check it out.""" start="00:37:22.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's on GNU ELPA.""" start="00:37:25.699" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ewoc.el is a built-in library that's documented""" start="00:37:28.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the Emacs Lisp manual under the rather cryptic""" start="00:37:33.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""heading &quot;Abstract Display Functions.&quot;""" start="00:37:37.340" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Really, what it does is it allows you""" start="00:37:41.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to map a data model to some display.""" start="00:37:44.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What we do with it in hyperdrive.el is,""" start="00:37:50.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the directory view, we map directory entry items,""" start="00:37:53.860" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""files and directories, to display items.""" start="00:38:02.049" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And ewoc.el makes it easy to update the display""" start="00:38:04.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""whenever the underlying data changes.""" start="00:38:08.701" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrive.el uses persist.el to store""" start="00:38:14.761" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrive metadata about known hyperdrives""" start="00:38:21.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as version history between sessions,""" start="00:38:25.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""so that the data is cached""" start="00:38:29.481" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""when you log out and log back in.""" start="00:38:32.121" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If you're going to be developing a program in Emacs""" start="00:38:34.961" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for Emacs 29 or later,""" start="00:38:38.721" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I recommend looking at multisession.el,""" start="00:38:41.961" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""because it's built-in, and it has some features""" start="00:38:44.941" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that persist.el doesn't have.""" start="00:38:50.161" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template new="1" text="""Next steps""" start="00:38:57.541" video="mainVideo-hyperdrive" id="subtitle"]]
+
+[[!template text="""Thank you for listening to this talk.""" start="00:38:57.541" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I hope you get a chance to try out hyperdrive.el.""" start="00:39:00.001" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here is a link to the hyperdrive.el manual""" start="00:39:03.681" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the USHIN hyperdrive.""" start="00:39:08.621" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""When you go to paste this link in,""" start="00:39:11.561" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you'll need to combine it back into one line.""" start="00:39:14.981" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This link is available in the hyperdrive.el manual,""" start="00:39:18.921" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is available from within a browser,""" start="00:39:22.501" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""at this link on the USHIN website.""" start="00:39:26.661" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We also have a public conference room that you can join.""" start="00:39:29.821" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's an XMPP multi-user chat""" start="00:39:32.961" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that the Sopranica team graciously makes available""" start="00:39:35.521" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for us to use.""" start="00:39:39.781" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""There's also a Matrix bridge,""" start="00:39:41.621" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""if that's more your cup of tea.""" start="00:39:43.901" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Thank you to the EmacsConf organizers.""" start="00:39:48.660" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's been a pleasure to participate,""" start="00:39:52.821" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I look forward to hearing the rest of the talks.""" start="00:39:55.161" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Have a good day.""" start="00:39:57.614" video="mainVideo-hyperdrive" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+<a name="hyperdrive-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: I guess we are now live.""" start="00:00:12.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So Joseph, thanks for being here.""" start="00:00:15.360" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Thanks for talking to the hyperdrive.""" start="00:00:16.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""We already had some, or we already have a lot""" start="00:00:22.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""of questions here. And I guess I would start""" start="00:00:24.360" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""with, let's call it the difficult,""" start="00:00:26.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the most difficult 1. So when you were""" start="00:00:29.119" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""developing hyperdrive for your colleague,""" start="00:00:30.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""what do you, or what have you learned the""" start="00:00:34.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""most?""" start="00:00:34.920" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: I have learned how much faster and more""" start="00:00:43.080" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""enjoyable the development of this project can""" start="00:00:46.360" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""be with talented people working by my side,""" start="00:00:51.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""like Jonas and Adam and Prat and Mo,""" start="00:00:55.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""it's been really a pleasure to work with""" start="00:00:58.100" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""these folks.""" start="00:00:58.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 0]: So you have started at first on your own and""" start="00:01:04.959" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""then probably pushed it somewhere in open""" start="00:01:07.400" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""source or how did it develop,""" start="00:01:10.320" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""your development experience?""" start="00:01:11.740" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: A few years ago, we started looking into""" start="00:01:15.920" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""using peer-to-peer technology for sharing all""" start="00:01:21.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""kinds of information. And we came across Move""" start="00:01:25.080" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""SignWeaver, who was recommended to us by a""" start="00:01:29.280" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""mutual friend. And we started working with""" start="00:01:32.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Move, and then about a year ago,""" start="00:01:33.840" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""we started looking into using Emacs,""" start="00:01:37.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the peer-to-peer software,""" start="00:01:40.020" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""so that we could make use of all of the""" start="00:01:43.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""powerful things that Emacs already does with""" start="00:01:46.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""org mode and other packages.""" start="00:01:47.780" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And then we started working with Adam and""" start="00:01:51.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Pratt and Jonas.""" start="00:01:52.320" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yes.""" start="00:01:54.280" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 0]: So we are skipping to the next question.""" start="00:01:59.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So to read it out, I use multiple computers""" start="00:02:03.700" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and my partner also would like access to my""" start="00:02:06.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""notes. So, 2 questions at first.""" start="00:02:08.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""First 1, how well would this work with using""" start="00:02:12.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""this to edit my Zettelkasten hyperdrive using""" start="00:02:15.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""multiple computers?""" start="00:02:15.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Hyperdrive is single writer currently.""" start="00:02:21.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So what that means is that if you have a""" start="00:02:24.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive that you've created,""" start="00:02:25.080" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""you're the only 1 who can make changes to it.""" start="00:02:28.320" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And that's limited right now to editing 1""" start="00:02:31.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive from 1 machine.""" start="00:02:33.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""In theory, you could use the same private key""" start="00:02:38.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and write to it from multiple machines,""" start="00:02:40.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""but you would have to make sure that you sync""" start="00:02:43.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""it on both machines and didn't make""" start="00:02:46.300" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""concurrent writes because then you would fork""" start="00:02:48.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the history of your hyperdrive,""" start="00:02:49.840" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and that would be bad.""" start="00:02:51.020" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But we've spent a lot of time making links to""" start="00:02:57.740" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrives work well,""" start="00:02:59.780" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""relative links within hyperdrives to other""" start="00:03:02.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""files inside of your drive.""" start="00:03:03.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So you should be able to,""" start="00:03:05.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""with some exceptions, just take your personal""" start="00:03:10.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""information management set of org files or""" start="00:03:13.360" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""whatever it is that you have,""" start="00:03:14.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and upload them into a hyperdrive if all of""" start="00:03:18.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that is publicly available or would be good""" start="00:03:22.740" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to share publicly. And you can make that""" start="00:03:27.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""available for other people to link to.""" start="00:03:28.940" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So you can have multiple different""" start="00:03:30.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrives that link to 1 another.""" start="00:03:32.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 0]: So it's like a huge network of hyperdrives""" start="00:03:35.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""connected to each other in some way.""" start="00:03:38.000" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah.""" start="00:03:39.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 0]: So that's kind of neat and kind of cool.""" start="00:03:41.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""There was a follow-up question or the second""" start="00:03:44.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""part of the question. Okay,""" start="00:03:46.780" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""then using the same hyperdrive is probably""" start="00:03:48.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""not possible, but interlinking would be the""" start="00:03:51.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""best way to do it. There was a question""" start="00:03:57.500" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""concerning how they should install it.""" start="00:03:59.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So What would be a good way of getting""" start="00:04:01.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrives if you do not want to install npm""" start="00:04:03.580" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and have a binary? Could you compile it with""" start="00:04:06.460" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""denner or rusk or zig or go?""" start="00:04:08.300" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""CLI alternative tool, I would prefer to""" start="00:04:10.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""download a single binary.""" start="00:04:11.840" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: There's something that Jonas was playing""" start="00:04:17.420" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""around with using Geeks to install Hyper""" start="00:04:20.459" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Gateway. So the way that HyperDrive.el,""" start="00:04:22.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the Emacs package, works right now is similar""" start="00:04:26.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to the way that the transmission Emacs client""" start="00:04:30.300" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""for BitTorrent works, where you have a client""" start="00:04:34.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""in Emacs that connects to a daemon that is a""" start="00:04:37.320" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""separate process that's running on your""" start="00:04:39.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""machine, the transmission daemon.""" start="00:04:41.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But in this case, we have HyperGateway,""" start="00:04:43.500" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""which is running as a daemon on your machine.""" start="00:04:46.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And then hyperdrive.el""" start="00:04:48.180" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""connects to that daemon and sends requests,""" start="00:04:51.020" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and all of the hyperdrive stuff under the""" start="00:04:53.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hood happens with her gateway.""" start="00:04:55.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But so that package can,""" start="00:04:57.940" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""or hypergateway, the program can be""" start="00:05:00.280" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""installed, The easiest way is to just""" start="00:05:02.900" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""download it from the GitHub releases.""" start="00:05:04.400" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""You could also use NPM to install it.""" start="00:05:07.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And then the third option that we've been""" start="00:05:09.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""playing around with is Jonas was writing a""" start="00:05:12.920" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""little script to install it using Geeks,""" start="00:05:14.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""since Geeks now comes with Node 18.""" start="00:05:18.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And so you should be able to install it using""" start="00:05:20.740" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Geeks.""" start="00:05:20.940" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right, thank you. We have 2 people here""" start="00:05:25.320" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""joined with microphone.""" start="00:05:26.100" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Do we have now any question to Joseph or just""" start="00:05:30.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""here for chilling out.""" start="00:05:32.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I guess it's a no. Plasma,""" start="00:05:41.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""yeah.""" start="00:05:42.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: What about using, having some of the""" start="00:05:46.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""information being private in the hyperdrives.""" start="00:05:47.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: That's not what we have been focusing on at""" start="00:05:54.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""this point. At this point,""" start="00:05:55.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""what we've been working on is mainly using""" start="00:05:57.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrives for a public forum type tool.""" start="00:06:02.180" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But you could encrypt those files if you""" start="00:06:06.420" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""wanted to. You can also just,""" start="00:06:09.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""a poor man's security would just be to share""" start="00:06:13.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""your HyperDrive link only with those people""" start="00:06:16.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that you want to have access to your drive.""" start="00:06:19.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But the way that it works right now is anyone""" start="00:06:21.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""who has the link to a hyperdrive can access""" start="00:06:23.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""its content. So long as there are peers""" start="00:06:26.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""available on the network who can serve it to""" start="00:06:28.740" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""you.""" start="00:06:28.900" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 0]: Any follow up question from your side,""" start="00:06:37.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Plasma?""" start="00:06:37.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: I had 1, I'll just have to re-remember it.""" start="00:06:46.720" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 0]: If you remember it, just feel free to""" start="00:06:55.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""interrupt me.""" start="00:06:56.000" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: What about working? I've looked at this""" start="00:06:58.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""before. What about, if I remember correctly,""" start="00:07:03.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""it doesn't do as well with large files,""" start="00:07:04.920" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""so if you're going to store 200 gigs of video""" start="00:07:09.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""files, stuff like IPFS works a lot better,""" start="00:07:12.180" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""or BitTorrent. This is,""" start="00:07:15.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""are you, were you using the,""" start="00:07:17.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""any way of using multiple protocols for stuff""" start="00:07:21.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""like that? Or what were you doing with,""" start="00:07:25.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""or were you just doing the small files with""" start="00:07:27.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the same protocol? Or""" start="00:07:28.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: I would love to see an IPFS client in Emacs""" start="00:07:34.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""as well that could interface with Kubo or""" start="00:07:37.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""some other IPFS daemon and I think that those""" start="00:07:40.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""could work really well together.""" start="00:07:41.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""We mostly have been playing around with""" start="00:07:45.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""sharing relatively small files,""" start="00:07:47.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""up to hundreds of megabytes or maybe a""" start="00:07:52.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""gigabyte. We haven't played around yet with""" start="00:07:55.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive.el, the Emacs client,""" start="00:07:57.380" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""testing that with HyperGateway.""" start="00:07:59.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But there may be other experiments that have""" start="00:08:04.020" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""been done that show that that works well.""" start="00:08:05.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""The main thing is that IPFS uses content""" start="00:08:10.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""addressability to reduce duplication of the""" start="00:08:14.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""content. Whereas in HyperDrive,""" start="00:08:16.620" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""if you upload the same file with the same""" start="00:08:20.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""contents twice, now you have double the""" start="00:08:23.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""content being stored in your HyperDrive.""" start="00:08:25.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""It's not deduplicated.""" start="00:08:26.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""You can always clear out part of the history""" start="00:08:30.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""of your hyperdrive But IPFS has really good""" start="00:08:36.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""built-in deduplication whereas hyperdrive""" start="00:08:39.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""does not""" start="00:08:39.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 4]: I have a question.""" start="00:08:44.159" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: What about like commenting on other like if""" start="00:08:47.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""you have a couple of different Hypercore""" start="00:08:50.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""blogs, what about like commenting between""" start="00:08:53.900" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""them? Like you have some people who have a""" start="00:08:56.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""commenting form on Reddit for their blog""" start="00:08:59.280" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""posts.""" start="00:08:59.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: So Move SignWeaver has been doing a lot of""" start="00:09:04.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""work recently with the distributed press API""" start="00:09:07.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to integrate ActivityPub with these""" start="00:09:12.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""peer-to-peer technologies.""" start="00:09:14.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Move can give you more information about""" start="00:09:17.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that. But there is another feature that we'd""" start="00:09:22.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""like to add to hyperdrive.el,""" start="00:09:23.400" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""which is peer discovery using the swarming""" start="00:09:29.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""feature that HyperCore,""" start="00:09:30.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""HyperSWARM offers, where you'd be able to say""" start="00:09:34.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that my node, my peer-to-peer node is""" start="00:09:38.500" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""interested in Emacs and free software as""" start="00:09:41.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""topics. And those would be 2 different""" start="00:09:43.100" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""topics. I would advertise on the network that""" start="00:09:45.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I'm interested in those topics.""" start="00:09:46.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And I would be able to discover other peers""" start="00:09:49.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""on the network who have also advertised that""" start="00:09:52.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""they're interested in those same topics.""" start="00:09:53.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And then they would tell me,""" start="00:09:56.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hey, here's the public key of my hyperdrive.""" start="00:09:59.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Come check it out. I have posted information""" start="00:10:01.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""about those topics. And so in that way,""" start="00:10:04.300" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""you'd be able to, in a distributed fashion,""" start="00:10:06.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""discover other peers on the network who are""" start="00:10:09.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""interested in topics that you're interested""" start="00:10:11.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""in.""" start="00:10:11.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: Something that would be useful in addition to""" start="00:10:16.780" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that idea is like if you had your emacs""" start="00:10:19.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Zettelkasten Publish like let's say you have""" start="00:10:25.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""some private data You make sure that that's""" start="00:10:27.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""scrubbed out before it goes to your hyper""" start="00:10:29.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""core and then you have another part of it""" start="00:10:31.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that gets turned into a website for it's also""" start="00:10:35.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""given to other hyper core clients but you'd""" start="00:10:38.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""rather get the emacs users the org documents""" start="00:10:40.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""then you also publish some of them on a""" start="00:10:44.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""website so everybody as much people can get""" start="00:10:48.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""it as possible. And then a way of figuring""" start="00:10:53.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""out who you'd want to do,""" start="00:10:55.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""or if you're an Emacs user,""" start="00:10:57.780" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""maybe figure out that they're all related to""" start="00:10:59.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""each other, but you want to get the art mode""" start="00:11:01.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""documents because you're using EMAX.""" start="00:11:03.080" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Yeah.""" start="00:11:05.900" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 0]: Maybe a side note, we have 4 minutes here on""" start="00:11:10.360" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""before we switch into the next track,""" start="00:11:12.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""just to let you know.""" start="00:11:13.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thank you. So the hyper drive mirror feature""" start="00:11:17.900" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that we added, would allow you to selectively""" start="00:11:21.220" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""choose which files you want to share in a""" start="00:11:24.840" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive. So, with Prot's denote file""" start="00:11:28.500" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""naming scheme or Carl Voigt's file tags""" start="00:11:30.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""naming scheme, you could just specify a""" start="00:11:33.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""regular expression. And you could say,""" start="00:11:35.940" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I want to share out of my directory of org""" start="00:11:40.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""files, I want to share only those files that""" start="00:11:42.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""have been tagged as public,""" start="00:11:44.220" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""or only those files that have been tagged as""" start="00:11:47.320" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""emacs and then only those ones would get""" start="00:11:49.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""uploaded into your hyperdrive""" start="00:11:50.720" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: or exclude all in any of the ones that say""" start="00:11:54.280" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""private""" start="00:11:54.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 0]: yep mike had a question""" start="00:12:01.620" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 4]: yeah I have a question for the hyperdrive.""" start="00:12:05.220" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So I just maybe I missed it and you haven't""" start="00:12:08.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""put a link.""" start="00:12:09.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, Mikhail, we can't hear you.""" start="00:12:16.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: Heard you for a second.""" start="00:12:22.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yes?""" start="00:12:28.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 4]: Can someone hear me? Okay,""" start="00:12:29.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I have no idea what happened to my""" start="00:12:31.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""microphone, but now it's back.""" start="00:12:32.480" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: Now we can. You can see the microphone on the""" start="00:12:34.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""top of the screen. So""" start="00:12:35.840" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 4]: yes, thank you. Okay. I have a question to""" start="00:12:38.940" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive. Is the hyperdrive a find on the""" start="00:12:41.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hole punch point, point T O hole Or is it""" start="00:12:46.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""just another hyperdrive?""" start="00:12:47.020" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: That's exactly the project that we're using.""" start="00:12:51.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So the HolePunch team has released hyperdrive""" start="00:12:54.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and other hyper core libraries as free""" start="00:12:59.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""software libraries that you can use.""" start="00:13:01.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And so MoV SignWeaver,""" start="00:13:03.940" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the project that MoV is working on,""" start="00:13:07.080" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""HyperGateway, depends on those libraries and""" start="00:13:11.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""it makes it easy for you to build other""" start="00:13:15.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""clients like hyperdrive.el""" start="00:13:17.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""which connect to the hyperdrive network.""" start="00:13:20.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I hope that answers your question.""" start="00:13:22.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 4]: Yes it does, thank you.""" start="00:13:25.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And what did make you choose hyperdrive for""" start="00:13:28.380" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""this Emacs project?""" start="00:13:29.380" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Mainly the fact that the drives are mutable,""" start="00:13:34.400" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""which makes it distinct from IPFS or""" start="00:13:37.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""BitTorrent, where when you share some piece""" start="00:13:40.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""of content, you're stuck with that static""" start="00:13:44.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""piece of content, which works well for some""" start="00:13:46.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""cases, but if you say you have a Zettelkasten""" start="00:13:49.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""or you have a set of org files that you want""" start="00:13:52.300" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to share with people, you want to be able to""" start="00:13:56.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""update those files and have other people pull""" start="00:13:58.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""those updates from you.""" start="00:13:59.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And so HyperDrive allows you to have these""" start="00:14:02.300" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""mutable sets of files that you can share and""" start="00:14:05.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""use the same link for other peers to pull the""" start="00:14:08.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""latest changes from you.""" start="00:14:09.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Also, it's versioned, as we showed in the""" start="00:14:11.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""video, which is really helpful for having""" start="00:14:15.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""community deliberations and community""" start="00:14:17.500" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""discussions where you want to be able to""" start="00:14:19.400" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""reference some something that somebody said""" start="00:14:22.420" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""in the past and not have it get deleted or""" start="00:14:26.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""changed or something.""" start="00:14:26.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 0]: We are now switching to talk So just for""" start="00:14:30.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""letting you know if you want to say something""" start="00:14:32.720" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""now. Too late. The BB room is still open,""" start="00:14:37.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""so you can still discuss.""" start="00:14:38.480" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""There's also a lot going on on the pad.""" start="00:14:41.480" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But you can also discuss here inside and""" start="00:14:47.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""answer the pet questions maybe later.""" start="00:14:49.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, there are good questions.""" start="00:14:52.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I'll go ahead, please.""" start="00:14:58.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: continuing here on the pad?""" start="00:15:01.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Are we I can hear you.""" start="00:15:04.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 5]: Yeah, so the question I had on the pad was,""" start="00:15:07.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""would it make sense in any sense to put a""" start="00:15:10.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""FUSE interface or put the POSIX semantics in""" start="00:15:13.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""front of this at some point?""" start="00:15:14.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, that would be cool.""" start="00:15:17.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""It's kind of a similar question to any plans""" start="00:15:20.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""for a Tramp interface.""" start="00:15:21.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""There was a project that the HyperCore""" start="00:15:25.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""HolePunch team was working on a year or more""" start="00:15:31.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""ago that provided a FUSE interface.""" start="00:15:34.320" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And I think it didn't pan out.""" start="00:15:39.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But it's a good idea. Same with the Tramp""" start="00:15:43.580" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""interface. It seems like a good idea that""" start="00:15:46.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""would make it possible to more easily hook""" start="00:15:51.900" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""into the built-in Emacs functionality for,""" start="00:15:55.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""for example, like incremental file name""" start="00:16:01.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""completion, which we don't currently support""" start="00:16:03.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""in Hyperdrive.el. So I'd love to have""" start="00:16:09.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""feedback and design ideas for those projects.""" start="00:16:12.720" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 5]: Yeah, there's just Everything in Emacs just""" start="00:16:15.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""sort of assumes the file system is there and""" start="00:16:17.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""usable in that way. That's all.""" start="00:16:20.940" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, it's a good idea.""" start="00:16:23.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: An idea for the privacy type thing is""" start="00:16:28.180" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Syncthing links. Because I think you can set""" start="00:16:33.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""up Syncthing in such a way that you have the""" start="00:16:36.100" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""private networks that other people can't""" start="00:16:38.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""actually get access to.""" start="00:16:40.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: I did not know that that was possible with""" start="00:16:45.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Syncthing. I'll have to look into that.""" start="00:16:47.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: At least I think it is anyway,""" start="00:16:48.840" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""because yeah, there's ways you can explicitly""" start="00:16:53.000" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""authorize devices. Yeah,""" start="00:16:56.780" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""right. I think you could actually set it up""" start="00:17:00.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""in such a way that you can have private stuff""" start="00:17:03.480" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and links, and then that might be a way that""" start="00:17:06.300" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""you can get a completely distributed""" start="00:17:10.119" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Zettelcast and with private notes.""" start="00:17:12.720" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. Good idea. There's a question in the""" start="00:17:22.339" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""pad about DATRS, a Rust version of""" start="00:17:26.280" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""HyperDrive. I had not heard of that,""" start="00:17:28.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""so I'll have to look into that.""" start="00:17:30.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""If you had your druthers,""" start="00:17:33.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""what would make your work on hyperdrive.dl""" start="00:17:34.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""easier? It's been a lot of fun.""" start="00:17:40.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I would love to have more user feedback.""" start="00:17:42.480" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""That would be my wish.""" start="00:17:45.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I tried putting a git repo in HyperDrive.""" start="00:17:50.500" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Does it work well? I don't think that would""" start="00:17:53.320" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""work well because, as I mentioned a moment a""" start="00:17:56.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""few moments ago, the data that you put into a""" start="00:18:00.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive is duplicated.""" start="00:18:00.920" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So if you had the whole work tree in""" start="00:18:06.300" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive every time you made a change and""" start="00:18:08.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""saved it, it would be duplicated.""" start="00:18:12.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""If you had just a bare repository,""" start="00:18:15.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I don't know, try it.""" start="00:18:18.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: They're trying to solve the same problem,""" start="00:18:21.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""but 1 of the optimizations they have for""" start="00:18:23.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""being able to view a whole bunch of people's""" start="00:18:25.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""data is they made shallow clones a lot""" start="00:18:28.780" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Would you phrase that again,""" start="00:18:34.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""please?""" start="00:18:35.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: easier. Right? So like Git and Hypercore,""" start="00:18:39.780" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""1 of the things they do is they allow you to""" start="00:18:42.720" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""have a whole history of every single change""" start="00:18:46.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""for a dataset Zettelkasten project.""" start="00:18:51.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But 1 of the optimizations Hypercore did to""" start="00:18:56.400" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""make it more network web friendly is they""" start="00:19:02.020" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""made the shallow clones work a lot better and""" start="00:19:04.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""a lot... Yeah, they made that work a lot""" start="00:19:07.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""better so you don't have to download every""" start="00:19:08.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""single thing for every single project.""" start="00:19:11.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And because they both are implementing the""" start="00:19:14.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""delta upgrades, I don't see how they could""" start="00:19:17.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""work really well together.""" start="00:19:19.000" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""At least from what it looked like to me.""" start="00:19:21.780" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""It can't hurt to experiment.""" start="00:19:25.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: But yeah, I would agree with you.""" start="00:19:28.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Is data transferred between nodes in the""" start="00:19:35.020" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""clear or encrypted? That's a good question.""" start="00:19:38.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I don't know how it's encrypted.""" start="00:19:41.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I don't, I wouldn't recommend sharing""" start="00:19:47.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""sensitive data with hyperdrive right now?""" start="00:19:53.400" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I would recommend if you want to play with""" start="00:19:55.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""it, have it be something where you're""" start="00:19:57.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""expecting the data to be shared.""" start="00:20:00.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Is there a searchable catalog?""" start="00:20:03.460" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: It's also the data in transport versus data""" start="00:20:06.700" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""at rest. I'm pretty sure the data at rest""" start="00:20:08.480" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""would not be encrypted.""" start="00:20:09.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Right. You can separate that into those 2""" start="00:20:14.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""questions.""" start="00:20:14.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. Right. Is there a searchable catalog""" start="00:20:19.920" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""of hyper drives? So that's a thing,""" start="00:20:23.000" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""an idea that we've been a distributed trust""" start="00:20:32.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""network for discovering peers that are""" start="00:20:38.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""trusted for a particular topic.""" start="00:20:41.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And we actually made a demo video of a""" start="00:20:47.220" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""previous prototype that's available on the""" start="00:20:51.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Ashen hyperdrive that you can watch that""" start="00:20:54.580" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""shows the basic idea. But the idea is just""" start="00:20:58.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that you would have a list of peers that you""" start="00:21:02.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""think are worth listening to or worth reading""" start="00:21:07.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""for a particular topic.""" start="00:21:09.400" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And those peers would have peers that they""" start="00:21:11.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""think are worth listening to for that same""" start="00:21:14.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""topic. And so you would say,""" start="00:21:16.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""if I'm interested in Emacs,""" start="00:21:17.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I want to see all the peers that I trust for""" start="00:21:21.220" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the topic Emacs. And if,""" start="00:21:23.700" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""say, Adam Porter shows up in my list and Adam""" start="00:21:27.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Porter trusts Jonas and Jonas trusts Pratt,""" start="00:21:30.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I would be able to read hyperdrive""" start="00:21:33.420" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""information from all of those people by""" start="00:21:36.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""looking at the indirect relationships that I""" start="00:21:41.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""have by following the chain of relationships,""" start="00:21:43.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""kind of like a web of trust.""" start="00:21:44.760" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And so it would also allow you to have a""" start="00:21:49.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""network of peers that you trust to block""" start="00:21:53.480" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""other people on your behalf.""" start="00:21:54.900" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So it would be useful for subjective""" start="00:21:57.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""moderation where you can remove spam and bad""" start="00:22:02.220" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""actors from the people that you follow""" start="00:22:04.920" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""without having to delegate that powerful""" start="00:22:08.940" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""responsibility to some third party in a""" start="00:22:13.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""permanent way where that third party might""" start="00:22:15.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""abuse that power. So it allows you to share""" start="00:22:23.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""your list of trusted peers and your list of""" start="00:22:26.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""blocked peers with other people in a""" start="00:22:29.180" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""peer-to-peer way.""" start="00:22:29.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: Have you ever looked at GNUnet?""" start="00:22:38.080" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""It kind of does some...""" start="00:22:40.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""It's trying to do something weird with the""" start="00:22:45.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""internet where it redesigns it from the""" start="00:22:47.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""ground up to be peer-to-peer,""" start="00:22:51.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""local first, or something like that.""" start="00:22:53.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: I would like to know more about GNUnet.""" start="00:22:58.380" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Yes. I have heard of it,""" start="00:23:01.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""but I haven't really researched it.""" start="00:23:03.620" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""If you edit a file on the hyperdrive,""" start="00:23:09.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""then edit the same file on the local mirror,""" start="00:23:12.400" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""how is the conflict handled when you sync the""" start="00:23:15.480" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""mirror again? So I think if I understand the""" start="00:23:21.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""question, the answer is that you can't edit""" start="00:23:29.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the file in 2 different places,""" start="00:23:32.280" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I think is the answer to the question.""" start="00:23:36.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""If you were to manually copy the private key""" start="00:23:41.220" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""from 1 machine onto another machine,""" start="00:23:44.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""then you could cause a conflict,""" start="00:23:51.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""like a merge conflict,""" start="00:23:54.400" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""but you would have to go out of your way to""" start="00:23:58.100" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""do that. And It's not handled.""" start="00:24:00.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I think the Hypercore Hole Punch team has""" start="00:24:03.580" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""another project that they're working on that""" start="00:24:05.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""would, it's called AutoBase,""" start="00:24:07.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""that would merge those conflicts.""" start="00:24:09.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""But we're not using that right now.""" start="00:24:13.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And I think it's in early development still.""" start="00:24:16.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So there might be a solution in the future.""" start="00:24:19.860" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: What's a surprising change of thoughts or""" start="00:24:32.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""what's the most interesting thing you weren't""" start="00:24:36.900" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""expecting to discover while developing this?""" start="00:24:39.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Like change of thoughts on how you write or I""" start="00:24:44.640" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""don't know.""" start="00:24:45.020" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, I'm relatively new to Emacs and to Lisp""" start="00:24:59.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and really to programming in general.""" start="00:25:01.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And so it's been a fantastic learning""" start="00:25:04.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""experience. Adam, Alpha Papa,""" start="00:25:08.480" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Adam and I have been doing a lot of pair""" start="00:25:11.320" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""programming sessions where we work together""" start="00:25:12.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and I get to learn from him.""" start="00:25:15.380" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""And we've had meetings with Jonas and Prat""" start="00:25:19.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""and meetings with Mauve where it's a""" start="00:25:23.560" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""fantastic learning experience for me to""" start="00:25:25.520" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""discover how to build software in an""" start="00:25:30.660" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""efficient and intelligent way.""" start="00:25:32.820" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""It's a huge pleasure. If there are no more""" start="00:25:40.580" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""questions, I just wanted to encourage""" start="00:25:43.320" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""everyone to try it out and to let us know""" start="00:25:48.380" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""what you think. It would be really helpful to""" start="00:25:50.380" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""have some feedback from people who are using""" start="00:25:54.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""it in new and creative ways that we haven't""" start="00:25:57.240" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""anticipated.""" start="00:25:57.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 6]: Hi, I'd just like to say that I tried this""" start="00:26:02.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""new thing called hyperdrive.el""" start="00:26:02.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""today, and I think it's pretty cool.""" start="00:26:05.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 2]: Sorry, that was somebody else.""" start="00:26:12.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Hey Joseph, how's it going?""" start="00:26:13.440" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Oh, talk today.""" start="00:26:15.080" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: Oh, thanks. Wonderful.""" start="00:26:16.420" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: Who's that? Oh, hey. Well,""" start="00:26:19.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I'm going to say goodbye.""" start="00:26:34.060" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Thank you. And thank you for your questions,""" start="00:26:37.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: I know that""" start="00:26:39.680" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 1]: PlasmaStrike. I've met you before.""" start="00:26:40.380" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Appreciate your questions,""" start="00:26:42.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""your thoughts.""" start="00:26:42.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh, by the way, Joseph,""" start="00:26:50.380" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""we have our, our first,""" start="00:26:53.000" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I don't know if our first new user,""" start="00:26:55.120" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""but we have the first link being shared,""" start="00:26:57.280" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""to hyperdrive file in the chat and I loaded""" start="00:27:01.160" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""it and it works. And it's funny too.""" start="00:27:03.080" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""It's worth looking at.""" start="00:27:03.880" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""So. Oh, I think it's frozen.""" start="00:27:09.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""I don't know if anybody can hear me.""" start="00:27:11.580" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: I can.""" start="00:27:12.720" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 2]: Okay, cool. The browser is frozen.""" start="00:27:15.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""It's it's not, okay. Just unfroze.""" start="00:27:19.020" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""Anyway. All right. Well,""" start="00:27:21.740" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""By the way, I enjoyed your talks about""" start="00:27:24.000" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""hyperbole. I'm going to rewatch those later""" start="00:27:26.260" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""when I get a chance. It was nice to meet you,""" start="00:27:28.040" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""too. Bob is a really great guy to work with.""" start="00:27:31.100" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: Definitely a lot of interesting people.""" start="00:27:38.800" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 2]: I owe him 1. Yes, sir.""" start="00:27:40.200" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""All right, you have a good day,""" start="00:27:41.580" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 3]: Will do, I like the insistence on local""" start="00:27:45.140" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""first. Feels like it's a good dovetail with""" start="00:27:48.740" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""the hyper core""" start="00:27:49.540" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""[Speaker 2]: enjoy the conference. Yeah,""" start="00:27:51.180" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""yeah, I think there's a lot of a lot of""" start="00:27:54.960" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""interesting possibilities to build on this we""" start="00:27:57.980" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""have some plans that we Will get to you later""" start="00:28:01.340" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""this well in the coming year And we'll see""" start="00:28:05.600" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""where the hyperdrive people,""" start="00:28:07.480" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""you know, upstream how they develop it as""" start="00:28:09.920" video="qanda-hyperdrive" id="subtitle"]]
+[[!template text="""well and yeah, so exciting times.""" start="00:28:14.340" video="qanda-hyperdrive" id="subtitle"]]
+
+Questions or comments? Please e-mail [joseph@ushin.org](mailto:joseph@ushin.org?subject=Comment%20for%20EmacsConf%202023%20hyperdrive%3A%20hyperdrive.el%3A%20Peer-to-peer%20filesystem%20in%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/hyperdrive-before.md b/2023/info/hyperdrive-before.md
new file mode 100644
index 00000000..944b9184
--- /dev/null
+++ b/2023/info/hyperdrive-before.md
@@ -0,0 +1,20 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+Actually a general-audience talk; just on the development track for scheduling purposes
+
+[[!toc ]]
+Format: 41-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="hyperdrive-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 40:03 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.webm">Download --intro.webm (996kB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm">Download --main.webm (149MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/9wLA55XACiGnS3nNBNwsV5">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="hyperdrive-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="hyperdrive-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus"></audio></div><div></div>Duration: 28:15 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm">Download --answers.webm (48MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/hyperdrive-nav.md b/2023/info/hyperdrive-nav.md
new file mode 100644
index 00000000..9634dd75
--- /dev/null
+++ b/2023/info/hyperdrive-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/gc">emacs-gc-stats: Does garbage collection actually slow down Emacs?</a>
+Next by track: <a href="/2023/talks/lspocaml">Writing a language server in OCaml for Emacs, fun, and profit</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/koutline-after.md b/2023/info/koutline-after.md
new file mode 100644
index 00000000..a48d8b9d
--- /dev/null
+++ b/2023/info/koutline-after.md
@@ -0,0 +1,128 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="koutline-mainVideo-transcript"></a>
+# Transcript (unedited)
+
+[[!template text="""Today I will share a nice workflow I have""" start="00:00:03.340" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""developed for stream of consciousness""" start="00:00:04.400" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""journaling. The goal of stream of""" start="00:00:06.560" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""consciousness journaling is to get your""" start="00:00:08.080" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""thoughts on the screen as effectively and""" start="00:00:09.960" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""efficiently as possible.""" start="00:00:10.679" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""These 2 features when combined reinforce each""" start="00:00:12.780" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""other and let you hear yourself think in a""" start="00:00:14.860" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""very efficient manner,""" start="00:00:15.960" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""increasing the number,""" start="00:00:17.220" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""quality, and types of thoughts you can get""" start="00:00:18.960" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""out of it. The tools I will be using for this""" start="00:00:21.100" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""are Emacs, KL line from the Hyperbolt""" start="00:00:22.680" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""package, centered cursor mode,""" start="00:00:24.080" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Olivetti mode, and optionally,""" start="00:00:25.119" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""voice to text. Additionally,""" start="00:00:26.820" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""you can see my commands and key bindings on""" start="00:00:28.939" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""the right. I will start off by showing a""" start="00:00:31.500" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""typing demo""" start="00:00:32.119" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""about how my day went.""" start="00:00:48.120" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""There are certain functionalities for stream""" start="00:01:12.900" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""of consciousness journaling that are desired""" start="00:01:14.640" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""or detrimental to the process.""" start="00:01:15.900" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Stream of thought functionalities,""" start="00:01:17.040" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""things I want. The ability to optionally use""" start="00:01:26.000" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""speech to text. I do this by using""" start="00:01:27.720" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Nerdictation, a Python program.""" start="00:01:29.380" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""I am still experimenting with this as it""" start="00:01:32.320" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""changes the quality and types of thoughts you""" start="00:01:34.120" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""can get out of stream of consciousness""" start="00:01:35.280" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""journaling. I am still looking for better""" start="00:01:37.680" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""ways of doing this. The ability to easily""" start="00:01:39.900" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""organize and split off my thoughts by""" start="00:01:41.680" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""creating and manipulating outlines.""" start="00:01:43.040" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Creating them in real time is needed for live""" start="00:01:46.280" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""journaling and allows for later editing""" start="00:01:48.240" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""really easily. I showed off some of these""" start="00:01:53.140" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""commands before. To just write words without""" start="00:01:56.479" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""worrying about format.""" start="00:01:57.540" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""To not worry about scrolling,""" start="00:02:00.160" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""I use centered cursor mode.""" start="00:02:01.640" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""To not worry about lines,""" start="00:02:05.200" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""I use the KOutline auto-filling""" start="00:02:06.960" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""functionality. To not worry about pressing""" start="00:02:09.360" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Enter, and to have a nice looking journal""" start="00:02:11.400" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""with hard returns afterwards.""" start="00:02:12.660" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Manually filling is needed with spacing when""" start="00:02:19.060" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""it is wrong. I do that with metaJ.""" start="00:02:22.160" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Counterproductive functionality.""" start="00:02:30.680" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Spell checking. While this is useful for""" start="00:02:33.480" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""editing, it is not useful for stream of""" start="00:02:35.500" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""consciousness journaling.""" start="00:02:36.220" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Having this on or off conditionally while you""" start="00:02:39.020" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""are live journaling is a killer feature of""" start="00:02:40.760" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Emacs. Reading slash editing the journal.""" start="00:02:48.040" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Part of the value proposition of this is to""" start="00:02:50.240" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""listen to what you are thinking,""" start="00:02:51.420" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""so this is needed functionality.""" start="00:02:52.680" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""You cannot listen very well when you are""" start="00:02:55.580" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""speaking, and the converse is true as well.""" start="00:02:57.360" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""You cannot speak very well when you are""" start="00:02:59.240" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""listening, decreasing what you can get out of""" start="00:03:01.280" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""it. Features when editing or listening to""" start="00:03:04.120" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""your journal. Spell checking.""" start="00:03:05.200" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""I use the Spackage Spellfoo,""" start="00:03:07.780" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""but there are others. I use multiple panes to""" start="00:03:20.740" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""read and edit. I use a combination of follow""" start="00:03:25.040" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""mode and some of my custom functions.""" start="00:03:27.940" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""These are what I use right here.""" start="00:03:31.860" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""The ability to change the view specs of the""" start="00:03:53.360" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""document. Stuff like, toggling blank lines.""" start="00:03:59.340" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Show the first heading of everything.""" start="00:04:08.300" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""You can also export the KOutline pages to""" start="00:04:18.620" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""HTML for other people to read or another way""" start="00:04:21.560" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""to look at it. Easy manipulation of cells.""" start="00:04:29.440" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""You use the Alt and arrow keys just like in""" start="00:04:34.040" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Orm mode to delete cells easily.""" start="00:04:37.200" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""The ability to manually reformat KL9 cells in""" start="00:04:47.020" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""addition to auto formatting of the cells for""" start="00:04:49.540" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""when spacing looks off.""" start="00:04:50.860" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""MetaJ is nice, and auto-filling is also nice""" start="00:04:53.900" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""for having multiple pages.""" start="00:04:54.920" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Why do I use these tools versus other common""" start="00:04:58.660" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""tools? K-Outline vs. Playtext Writing in""" start="00:05:06.060" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""outlines helps me easily structure my""" start="00:05:08.460" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""thoughts in a way that is easy to write,""" start="00:05:09.960" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""read, and edit. Org Mode vs.""" start="00:05:12.500" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""K-Outline Org Mode gives me lots of ways to""" start="00:05:15.360" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""structure my journal slash document.""" start="00:05:17.120" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""While this is great for a lot of things,""" start="00:05:19.600" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""for stream of consciousness journaling,""" start="00:05:21.540" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""this causes decision fatigue and loss of""" start="00:05:24.960" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""concentration. Types of questions I get when""" start="00:05:30.320" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""structuring an org-mode document?""" start="00:05:31.960" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Do I keep everything in a heading or below""" start="00:05:35.080" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""the heading in paragraphs?""" start="00:05:36.100" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""How do I handle new lines?""" start="00:05:38.080" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Do I just use visual line mode with no hard""" start="00:05:40.240" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""returns? Or if I make hard returns,""" start="00:05:42.520" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""on what line number do I do them?""" start="00:05:44.800" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""More visual line nodes in org-mode documents""" start="00:05:50.080" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""like a potential org ID in your property""" start="00:05:52.660" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""stores. While a lot of the above is really""" start="00:05:57.720" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""nice if you are making something like a""" start="00:05:59.880" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""website to present to other people,""" start="00:06:01.640" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""these features are counterproductive to""" start="00:06:04.080" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""stream-of-thought journaling.""" start="00:06:05.040" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Org mode is also top-notch for other things""" start="00:06:08.900" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""such as GTD. I don't think org mode has""" start="00:06:11.780" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""bindings to create child,""" start="00:06:13.820" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""same-level, and parent cells.""" start="00:06:15.460" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""Centered cursor mode versus scroll lock mode""" start="00:06:19.340" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""built-in. Scroll lock mode changes its place""" start="00:06:22.640" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""when you move the cursor from the bottom or""" start="00:06:28.180" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""the top of the page. Centered cursor mode""" start="00:06:30.080" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""will reliably fix itself to the center when""" start="00:06:33.420" video="mainVideo-koutline" id="subtitle"]]
+[[!template text="""the cursor position is not there.""" start="00:06:36.280" video="mainVideo-koutline" id="subtitle"]]
+
+Questions or comments? Please e-mail [plasmastrike@voiddragon.me](mailto:plasmastrike@voiddragon.me?subject=Comment%20for%20EmacsConf%202023%20koutline%3A%20Using%20Koutline%20for%20stream%20of%20thought%20journaling)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/koutline-before.md b/2023/info/koutline-before.md
new file mode 100644
index 00000000..f6b7cc81
--- /dev/null
+++ b/2023/info/koutline-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 7-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="koutline-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 06:44 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.opus">Download --main.opus (4.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/vV7qtK176DVE6RLXrZ18Ee">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/koutline-nav.md b/2023/info/koutline-nav.md
new file mode 100644
index 00000000..247cf825
--- /dev/null
+++ b/2023/info/koutline-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/hyperamp">Top 10 ways Hyperbole amps up Emacs</a>
+Next by track: <a href="/2023/talks/parallel">Parallel text replacement</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/lem-after.md b/2023/info/lem-after.md
new file mode 100644
index 00000000..cf100dc9
--- /dev/null
+++ b/2023/info/lem-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20lem%3A%20How%20to%20build%20an%20Emacs%202%3A%20Revenge%20of%20the%20Lem)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/lem-before.md b/2023/info/lem-before.md
new file mode 100644
index 00000000..af9cef3a
--- /dev/null
+++ b/2023/info/lem-before.md
@@ -0,0 +1,4 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/lem-nav.md b/2023/info/lem-nav.md
new file mode 100644
index 00000000..85b81cfd
--- /dev/null
+++ b/2023/info/lem-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a>
+Next by track: <a href="/2023/talks/lspocaml">Writing a Language Server In OCaml for Emacs, fun, and profit</a>
+Track: <span class="sched-track gen">gen</span>
+</div>
diff --git a/2023/info/llm-after.md b/2023/info/llm-after.md
new file mode 100644
index 00000000..5a020a0b
--- /dev/null
+++ b/2023/info/llm-after.md
@@ -0,0 +1,1144 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="llm-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Intro to the Talk""" start="00:00:00.000" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""Hello, I'm Andrew Hyatt and I'm going to talk to you""" start="00:00:00.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""about large language models and how""" start="00:00:04.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""they relate to Emacs.""" start="00:00:06.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And I'm going to talk to you about the technology""" start="00:00:11.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and how we're going to use it in Emacs.""" start="00:00:14.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""There'll be demos and there'll be talks about,""" start="00:00:18.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I'll finish up by kind of talking about where""" start="00:00:21.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I think this should go in the future.""" start="00:00:22.880" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""What are LLMs?""" start="00:00:25.080" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""So to start off with, let's just talk like,""" start="00:00:25.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I just want to make sure everyone's on the same page.""" start="00:00:28.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""What are large language models?""" start="00:00:29.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Not everyone may be caught up on this.""" start="00:00:30.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Large language models are a way... Basically,""" start="00:00:34.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""the current versions of large language models""" start="00:00:39.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""are all based on the similar architecture""" start="00:00:43.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""called the transformer.""" start="00:00:44.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's just an efficient way to train and produce output.""" start="00:00:45.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So these things are basically models""" start="00:00:48.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that predict the next word or something like that.""" start="00:00:51.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And they're trained on an enormous corpus of information""" start="00:00:58.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and they get extremely good""" start="00:01:02.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""at predicting the next word.""" start="00:01:04.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And from that basic ability, you can train""" start="00:01:06.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""through further tuning from human input,""" start="00:01:09.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""human ratings and things like that.""" start="00:01:12.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You can train different models based on that""" start="00:01:13.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that will do question answering.""" start="00:01:17.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And this is how basically ChatGPT works.""" start="00:01:18.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""There's a base LLM, like GPT.""" start="00:01:22.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And then you have a chat version of that,""" start="00:01:25.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""which is just trained to just... You give""" start="00:01:27.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it a prompt, like what do you want it to do?""" start="00:01:29.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And it gives you an output that does what you told it to do,""" start="00:01:32.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""or at least attempts to do it.""" start="00:01:37.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Those are the power of large language models is""" start="00:01:39.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""they're extremely, extremely impressive.""" start="00:01:42.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Certainly this is, in AI,""" start="00:01:45.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""this has been the biggest thing to happen""" start="00:01:47.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""probably in my lifetime,""" start="00:01:49.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""or at least my lifetime as my working lifetime.""" start="00:01:51.560" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""Power of LLMs (Magit Demo)""" start="00:01:56.360" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""So let me give you a demonstration of""" start="00:01:56.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""what kinds of stuff it could do in Emacs.""" start="00:02:02.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So here I have a Emacs file.""" start="00:02:06.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So this is my Emacs init file.""" start="00:02:09.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I have a change.""" start="00:02:12.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Let's commit that change.""" start="00:02:13.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And, you know, I don't like writing commit messages,""" start="00:02:16.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""so I can generate it.""" start="00:02:19.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And it did an actually just looking.""" start="00:02:23.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So all it does is it's looking, it's just reading the diff.""" start="00:02:27.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I'm just feeding it the diff with some instructions.""" start="00:02:29.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And it is this a incredible commit message?""" start="00:02:32.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's not bad, actually.""" start="00:02:37.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You can see that it actually has really extracted""" start="00:02:39.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""the meaning of what I'm doing and has written""" start="00:02:42.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""a reasonably good commit message.""" start="00:02:46.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Now I have to edit it because this is not quite correct.""" start="00:02:48.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But it's kind of impressive how good it is.""" start="00:02:53.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And my editing, it's kind of easier for me to edit this""" start="00:02:55.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""than just to write a new one.""" start="00:03:00.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And quite often it's good enough to just submit as is.""" start="00:03:01.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So this is kind of, you know, you could say""" start="00:03:04.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""this is just commit messages.""" start="00:03:08.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could respond to emails.""" start="00:03:09.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could, you know, using your own custom instructions""" start="00:03:10.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""about what you want your email to say.""" start="00:03:15.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It'll write the email for you.""" start="00:03:17.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It could do like this""" start="00:03:19.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Emacs is a way to interact with buffers.""" start="00:03:19.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This could basically just output text.""" start="00:03:22.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So it's super useful for""" start="00:03:24.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""understanding something and outputting text based on that,""" start="00:03:27.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""which is just useful for Emacs.""" start="00:03:30.320" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""Drawbacks of LLMs (regex demo)""" start="00:03:32.240" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""So the drawback is, yeah, it's good,""" start="00:03:32.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but it's not that reliable.""" start="00:03:39.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And you'd think it's very easy to get caught up in like,""" start="00:03:43.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""oh my gosh, like this is so powerful.""" start="00:03:45.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I bet it could work this, whatever idea could work.""" start="00:03:47.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And these ideas, like they almost can.""" start="00:03:50.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""For example, I was thinking, you know what I could do?""" start="00:03:52.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I don't like writing regexes.""" start="00:03:55.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Why can't I have a regex replace that's powered by LLMs?""" start="00:03:57.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And that way I could give just an instruction""" start="00:04:01.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to regex replace.""" start="00:04:03.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And so for example, I could do Emacs LLM regex replace.""" start="00:04:07.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This is not checked in anywhere.""" start="00:04:12.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""These are just my own kind of private functions.""" start="00:04:12.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""My description lowercase all the org headings.""" start="00:04:17.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Let's see if it works.""" start="00:04:19.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It might work.""" start="00:04:20.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""No, it doesn't work.""" start="00:04:21.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So if I, I'm not going to bother to show you""" start="00:04:22.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""what it actually came up with, but it's something,""" start="00:04:26.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""if you looked at it, it'd be like, wow,""" start="00:04:28.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""this is very close to being...""" start="00:04:29.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It looks like it should work, but it doesn't.""" start="00:04:31.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Okay.""" start="00:04:34.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's not quite good enough to get it right.""" start="00:04:35.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And it's possible that perhaps by giving it""" start="00:04:38.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""a few examples of, or explaining more""" start="00:04:41.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""what makes Emacs regexes different.""" start="00:04:43.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It could do a better job""" start="00:04:46.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and maybe could solve these problems,""" start="00:04:47.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but it's always a little bit random.""" start="00:04:49.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You're never quite sure what you're going to get.""" start="00:04:50.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So this is the drawback.""" start="00:04:52.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Like there's a lot of things that look like you could do it,""" start="00:04:54.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but when it actually comes down to trying it,""" start="00:04:58.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it's surprisingly hard.""" start="00:05:01.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And, you know, and whatever you're doing,""" start="00:05:03.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it's surprisingly hard to get something""" start="00:05:06.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that is repeatably, that's, that is always good.""" start="00:05:09.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So yeah, that's currently the problem.""" start="00:05:13.880" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""Embeddings""" start="00:05:20.120" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""So I want to talk about embeddings.""" start="00:05:20.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They're another thing that LLMs offer""" start="00:05:23.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and that are extremely useful.""" start="00:05:26.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They are, what they do is they encode from""" start="00:05:28.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""a input text that could be a word, a sentence,""" start="00:05:33.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""a small document.""" start="00:05:38.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It encodes a vector about what the meaning,""" start="00:05:42.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""the semantic meaning of that is.""" start="00:05:45.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That means you could, something that is,""" start="00:05:46.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""uses completely different words,""" start="00:05:51.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but is basically talking about the same thing,""" start="00:05:52.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""perhaps in a different language, should be pretty close""" start="00:05:54.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""as a vector to the other vector.""" start="00:05:57.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You know, as long as they're similarly semantic things,""" start="00:06:02.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""like the words""" start="00:06:05.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""highway and Camino are two different words.""" start="00:06:12.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They mean the same thing.""" start="00:06:18.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They should have very similar embeddings.""" start="00:06:19.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So it is a way to kind of encode this""" start="00:06:21.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and then you could use this for search.""" start="00:06:25.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""For example, I haven't tried to do this yet,""" start="00:06:26.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but you could probably just make an embedding""" start="00:06:28.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""for every paragraph in the Emacs manual""" start="00:06:31.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and the Elisp manual.""" start="00:06:33.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And then, and then there's a very standard technique.""" start="00:06:36.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You just... You find that you have a query,""" start="00:06:39.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""oh, how do I do whatever, whatever in Emacs again?""" start="00:06:43.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And you could, you just find that 20 things""" start="00:06:45.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that are closest to whatever you're""" start="00:06:49.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""trying to... the embedding of your query.""" start="00:06:50.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You send those things to the LLM, as you know,""" start="00:06:51.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""with the original query,""" start="00:06:55.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and you're basically telling the--asking the LLM,""" start="00:06:57.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""look, the user is trying to do this.""" start="00:06:59.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Here's what I found in the Emacs manual.""" start="00:07:01.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That's on the Elisp manual.""" start="00:07:03.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That's close to what they're trying to do.""" start="00:07:04.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So can you kind of just tell the user what to do?""" start="00:07:07.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And from this, and you could say,""" start="00:07:12.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""just use things from this, you know, that I give you.""" start="00:07:14.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Don't just make up your own idea.""" start="00:07:17.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You know, don't use your own ideas,""" start="00:07:20.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""because sometimes it likes to do that""" start="00:07:21.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and those things are wrong.""" start="00:07:23.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So you could try to, you know, do this and you get,""" start="00:07:24.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you could get quite good results using this.""" start="00:07:26.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So no one has done this yet,""" start="00:07:28.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but that should not be hard to do.""" start="00:07:30.000" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""Image Generation""" start="00:07:32.800" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""Image generation is something that's, you know,""" start="00:07:32.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it's not quite an LLM in the sense of...""" start="00:07:34.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""These are... It's a different technology,""" start="00:07:38.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but these things are kind of packaged together""" start="00:07:43.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""in a sense.""" start="00:07:48.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And you'll see that when I talk about Emacs packages,""" start="00:07:49.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""a lot of them bundle image generation""" start="00:07:51.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and large language models.""" start="00:07:54.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You know, the APIs are often bundled together by providers.""" start="00:07:55.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And the general idea is it's kind of similar""" start="00:07:59.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""because it's very similar to large, you know,""" start="00:08:02.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""doing a chat thing where you, you know,""" start="00:08:04.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""the chat is like, you give it a text request,""" start="00:08:06.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""like write me a sonnet about, you know,""" start="00:08:09.761" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""the battle between Emacs and vi.""" start="00:08:12.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And it could, it could do it.""" start="00:08:14.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It could do a very good job of that.""" start="00:08:15.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But you could also say, you know,""" start="00:08:17.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""draw me a picture of Emacs and vi as boxers,""" start="00:08:22.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""as a character-character boxing in a ring,""" start="00:08:27.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""like a, you know, political cartoon style.""" start="00:08:30.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And it can do that as well.""" start="00:08:32.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And so you could basically think of this""" start="00:08:35.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""as just sort of... it's kind of the""" start="00:08:37.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""same thing with what you're doing""" start="00:08:39.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""with large language models,""" start="00:08:42.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but instead of outputting a text,""" start="00:08:43.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you're outputting a picture.""" start="00:08:44.800" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""Fine-tuning""" start="00:08:48.480" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""There's also, I want to mention the concept of fine-tuning.""" start="00:08:48.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Fine-tuning is a way to take your--""" start="00:08:51.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""take a corpus of inputs and outputs and just from""" start="00:08:55.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""a large language model, you're like, okay,""" start="00:08:59.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""given this base large language model,""" start="00:09:01.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I want to make sure that when I give you input,""" start="00:09:03.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you give me something like output.""" start="00:09:06.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And this is what I'm just going to""" start="00:09:08.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""train you further on these,""" start="00:09:10.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""these mappings between input and output.""" start="00:09:11.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And for example, you could do this. Like,""" start="00:09:14.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""let's say you wanted to fix that regex demo""" start="00:09:16.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I had to make it good.""" start="00:09:18.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I don't think it, I think it'd be""" start="00:09:21.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""relatively effective to train,""" start="00:09:23.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to have regex descriptions""" start="00:09:25.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and regex examples, Emacs regex examples""" start="00:09:27.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""as inputs and outputs.""" start="00:09:30.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could get, you know, maybe a hundred,""" start="00:09:31.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""a few hundreds of these things.""" start="00:09:34.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could train it.""" start="00:09:35.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I think that is a reasonable way to,""" start="00:09:38.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""let's just say, I don't know how well it would work,""" start="00:09:40.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but these things definitely work some of the time""" start="00:09:43.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and produce pretty good results.""" start="00:09:46.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And you could do this on your own machine.""" start="00:09:48.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Corporations like OpenAI offer APIs with, you know,""" start="00:09:53.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to build your fine tunes on top of OpenAI.""" start="00:09:59.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And I think, I'm not a hundred percent sure,""" start="00:10:01.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but I think then you can share your model""" start="00:10:04.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""with other people.""" start="00:10:05.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But if not, then you just, you know,""" start="00:10:06.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you could use your model for your own specialized purposes.""" start="00:10:08.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But in the world of models that you could run,""" start="00:10:10.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""for example, based on Llama, which is like...""" start="00:10:14.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Llama is this model you can run on your own machine from Meta.""" start="00:10:16.875" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""There's many fine-tuned models that you could download""" start="00:10:23.580" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and you could run on your own.""" start="00:10:26.881" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They can do very different things too.""" start="00:10:28.961" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Some output Python programs, for example,""" start="00:10:30.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that you could just run.""" start="00:10:33.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So you just say...""" start="00:10:34.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Tell me how old... Let's just say""" start="00:10:37.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you have a random task, like""" start="00:10:40.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""tell me how old these five cities are in minutes,""" start="00:10:42.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""based on historical evidence.""" start="00:10:48.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's kind of a weird query, but it probably can figure,""" start="00:10:49.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it could probably run that for you.""" start="00:10:53.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It'll encode its knowledge into whatever""" start="00:10:55.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""the Python program, then use the Python program""" start="00:10:57.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to do the correct calculations.""" start="00:10:59.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So pretty, pretty useful stuff.""" start="00:11:01.040" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""Open Source""" start="00:11:08.160" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""So I also want to mention open source""" start="00:11:08.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and basically free software here.""" start="00:11:10.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""These LLMs are mostly not free software.""" start="00:11:12.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They're sometimes open source,""" start="00:11:17.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but they're generally not free""" start="00:11:19.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""without restrictions to use.""" start="00:11:21.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Most of these things, even Llama,""" start="00:11:23.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""which you can use on your own machine,""" start="00:11:27.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""have restrictions that you cannot use it""" start="00:11:28.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to train your own model.""" start="00:11:31.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This is something that, you know,""" start="00:11:32.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it costs millions and millions of dollars""" start="00:11:35.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to train and produce these models.""" start="00:11:37.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And that's just computation costs.""" start="00:11:40.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They do not want you""" start="00:11:42.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""stealing all that work by training your own models""" start="00:11:45.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""based on their output.""" start="00:11:47.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But there are research LLMs that do, I believe,""" start="00:11:48.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""conform to free software principles.""" start="00:11:55.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They're just not as good yet.""" start="00:11:58.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And I think that might change in the future.""" start="00:11:59.520" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""The Future""" start="00:12:02.840" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""So speaking of the future,""" start="00:12:02.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""one of the things I'd like to point out""" start="00:12:04.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""is that like the demos I showed you are based on,""" start="00:12:07.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I'm using OpenAI 3.5 model.""" start="00:12:09.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That's more than, well, no,""" start="00:12:13.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it's like a year old basically at this point.""" start="00:12:16.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And things are moving fast.""" start="00:12:18.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They came out with 4.0.""" start="00:12:21.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""4.0 is significantly better.""" start="00:12:22.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I don't have access to it.""" start="00:12:23.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Even though I'm using the API and I'm paying money for it,""" start="00:12:24.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you only can get access to 4.0""" start="00:12:30.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""if you can spend a dollar.""" start="00:12:33.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And I've never been able to spend,""" start="00:12:34.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""use so much API use that I've spent a dollar.""" start="00:12:36.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So I have, I don't have 4.0, but I've tried it""" start="00:12:38.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""because I do pay for this""" start="00:12:44.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""so I could get access to 4.0""" start="00:12:46.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and it is substantially better.""" start="00:12:48.341" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""By all reports, it's,""" start="00:12:49.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""the difference is extremely significant.""" start="00:12:50.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I would not be surprised""" start="00:12:53.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""if some of the limitations and drawbacks I described""" start="00:12:55.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""mostly went away with 4.0.""" start="00:12:59.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We're probably at a stage""" start="00:13:02.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""where regexes will work maybe 5% of the time""" start="00:13:06.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""if you try them.""" start="00:13:09.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But with 4.0, it could work like 80% of the time.""" start="00:13:10.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Now, is that good enough?""" start="00:13:13.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Probably not, but it's a,""" start="00:13:14.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I wouldn't be surprised if you got results like that.""" start="00:13:17.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And in a year's time, in two years time,""" start="00:13:20.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""no one knows how much this is going to play out""" start="00:13:22.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""before progress stalls,""" start="00:13:26.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but there are a lot of interesting research.""" start="00:13:27.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I don't think, research wise,""" start="00:13:32.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I don't think things have slowed down.""" start="00:13:34.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You're still seeing a lot of advances.""" start="00:13:35.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You're still seeing a lot of models coming out""" start="00:13:38.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and that will come out.""" start="00:13:41.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That will be each one, one upping the other one""" start="00:13:41.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""in terms of quality.""" start="00:13:46.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It'll be really interesting to see how this all plays out.""" start="00:13:49.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I think that message here is that""" start="00:13:52.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""we're at the beginning here.""" start="00:13:55.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This is why I think this talk is important.""" start="00:13:58.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I think this is why we should be""" start="00:14:01.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""paying attention to this stuff.""" start="00:14:02.280" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""LLMs in Emacs - existing packages""" start="00:14:08.200" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""Let's talk about the existing packages.""" start="00:14:08.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Because there's a lot out there, people have,""" start="00:14:11.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I think people have been integrating with""" start="00:14:13.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""these LLMs that often have a relatively easy to use API.""" start="00:14:17.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So it's kind of natural that people""" start="00:14:21.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""have already put out a lot of packages.""" start="00:14:24.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Coming off this problem from a lot of different angles,""" start="00:14:25.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I don't have time to go through""" start="00:14:28.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""all of these packages.""" start="00:14:30.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""These are great packages though.""" start="00:14:31.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""If you're not familiar with them,""" start="00:14:33.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""please check them out.""" start="00:14:35.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And they all are doing slightly different things.""" start="00:14:37.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Some of these are relatively straightforward.""" start="00:14:41.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Interactions, just a way to""" start="00:14:43.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""almost in a comment sort of way to kind of""" start="00:14:47.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""have just an interaction,""" start="00:14:52.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""long running interaction with an LLM""" start="00:14:54.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""where you kind of build off previous responses,""" start="00:14:55.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""kind of like the OpenAI's UI.""" start="00:14:59.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Two very more Emacsy things where you can sort of""" start="00:15:01.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""embed these LLM responses within a org-mode block""" start="00:15:08.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""using the org-mode's context.""" start="00:15:13.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Or GitHub Copilot integration where you can use it""" start="00:15:15.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""for auto completion in a very powerful,""" start="00:15:20.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you know, this stuff is very useful if it could figure out""" start="00:15:23.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""what you're trying to do based on the context.""" start="00:15:27.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's quite effective.""" start="00:15:29.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But I want to kind of call out one thing""" start="00:15:31.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that I'd like to see change.""" start="00:15:36.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Which is that users right now,""" start="00:15:38.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""not all of these have a choice of,""" start="00:15:42.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""first of all, there's a lot of them.""" start="00:15:45.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Each one of them is doing their own calls.""" start="00:15:47.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And each one of them is, so each one of them""" start="00:15:49.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""has their own interfaces.""" start="00:15:54.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They're rewriting the interface to OpenAI or wherever.""" start="00:15:55.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And they're not, they don't, most of these""" start="00:15:57.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""do not make it that configurable or at all configurable""" start="00:16:00.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""what LLM use.""" start="00:16:05.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This is not good.""" start="00:16:06.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It is important that we use,""" start="00:16:07.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""we give the user a way to change the LLM they use.""" start="00:16:09.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And that is because you might not be comfortable""" start="00:16:15.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""sending your requests over to a private corporation""" start="00:16:21.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""where you don't get to see how they use their data.""" start="00:16:24.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Your data, really.""" start="00:16:27.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That's especially true with things like embeddings""" start="00:16:29.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""where you might be sending over your documents.""" start="00:16:33.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You're just giving them your documents, basically.""" start="00:16:35.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And, you know, that does happen.""" start="00:16:37.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I don't think really that there's a reason""" start="00:16:40.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to be uncomfortable with this,""" start="00:16:43.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but that, you know, people are uncomfortable and that's okay.""" start="00:16:44.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""People might want to use a local machine,""" start="00:16:51.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""a local LLM for maximum privacy.""" start="00:16:53.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That's something we should allow.""" start="00:16:58.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""People might want to especially use free software.""" start="00:17:00.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That's something we should definitely allow.""" start="00:17:04.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This is Emacs.""" start="00:17:05.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We need to encourage that.""" start="00:17:07.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But right now, as most of these things are written,""" start="00:17:08.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you can't do it.""" start="00:17:12.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And they're spending precious time""" start="00:17:13.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""just doing things themselves.""" start="00:17:17.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This is why I wrote LLM, which is...""" start="00:17:18.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it will just make that connection to the LLM for you""" start="00:17:20.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and it will connect to, you know, it has plugins.""" start="00:17:23.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So if you can, the user can configure what plugin""" start="00:17:26.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it actually goes to.""" start="00:17:30.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Does it go to OpenAI?""" start="00:17:31.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Does it go to Google Cloud Vertex?""" start="00:17:32.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Does it go to Llama on your machine?""" start="00:17:35.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We're using Ollama,""" start="00:17:37.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""which is just a way to run Llama locally.""" start="00:17:38.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And more things in the future, I hope.""" start="00:17:41.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So this is, I'm hoping that we use this.""" start="00:17:47.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's designed to be sort of maximally usable.""" start="00:17:52.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You don't need to install anything.""" start="00:17:54.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's on GNU ELPA.""" start="00:17:56.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So even if you write something""" start="00:17:58.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that you want to contribute to GNU ELPA,""" start="00:17:59.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you can use it because it's on GNU ELPA.""" start="00:18:01.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's part of the Emacs package, Emacs core packages.""" start="00:18:02.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So, but it has no functionality.""" start="00:18:06.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's really just there as a library""" start="00:18:09.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to use by other things offering functionality. Okay.""" start="00:18:11.720" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""Abstracting LLM challenges""" start="00:18:15.960" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""And it's a little bit difficult to abstract.""" start="00:18:15.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I want to point this out""" start="00:18:19.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""because I think it's an important point""" start="00:18:21.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""is that the, it's, some of these LLMs, for example,""" start="00:18:23.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""have image generation.""" start="00:18:29.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Some do not.""" start="00:18:30.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Some of them have very large context windows, even for chat.""" start="00:18:31.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You say, okay, all these things can do chat.""" start="00:18:35.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Okay.""" start="00:18:37.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Yeah, kind of.""" start="00:18:37.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Some of these things you could pass a book to,""" start="00:18:38.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""like Anthropic's API.""" start="00:18:40.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Most, you cannot.""" start="00:18:41.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So there really are big differences""" start="00:18:43.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""in how these things work.""" start="00:18:45.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I hope those differences diminish in the future.""" start="00:18:46.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But it's just one of the challenges""" start="00:18:51.540" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that I hope we can work through in the LLM library.""" start="00:18:53.801" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So it's compatible, but there's definitely""" start="00:18:57.521" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""limits to that compatibility.""" start="00:19:02.161" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""Emacs is the ideal interface for LLMs""" start="00:19:04.080" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""I want to point out just to finish off,""" start="00:19:04.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Emacs is the, Emacs has real power here""" start="00:19:06.161" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that nothing else I think in the industry is offering.""" start="00:19:12.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""First of all, people that use Emacs""" start="00:19:15.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""tend to do a lot of things in Emacs.""" start="00:19:19.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We have our to-dos in Emacs with the org mode.""" start="00:19:20.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We have mail.""" start="00:19:22.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We, you know, we might read email and we might,""" start="00:19:23.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and respond to email in Emacs.""" start="00:19:25.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We might have notes in Emacs.""" start="00:19:27.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This is very powerful.""" start="00:19:29.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Using... there's not other stuff like that.""" start="00:19:31.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And you could feed this stuff to an LLM.""" start="00:19:34.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could do interesting things""" start="00:19:35.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""using a combination of all this data.""" start="00:19:37.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""No one else could do this.""" start="00:19:38.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We need to start thinking about it.""" start="00:19:40.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Secondly, Emacs can execute commands.""" start="00:19:41.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This might be a bad idea.""" start="00:19:45.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This might be how the robots take over,""" start="00:19:46.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but you could have the LLMs respond with Emacs""" start="00:19:48.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""commands and run those Emacs commands""" start="00:19:51.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and tell the LLM the response and have it do things""" start="00:19:54.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""as your agent in the editor.""" start="00:19:57.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I think we need to explore ideas like this.""" start="00:19:58.680" video="mainVideo-llm" id="subtitle"]]
+
+[[!template new="1" text="""Outro""" start="00:20:01.960" video="mainVideo-llm" id="subtitle"]]
+
+[[!template text="""And I think we need to share these ideas""" start="00:20:01.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and we need to make sure that we're pushing the""" start="00:20:04.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""envelope for Emacs and actually, you know, doing things,""" start="00:20:07.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""sharing ideas, sharing progress,""" start="00:20:10.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and kind of seeing how far we can push this stuff.""" start="00:20:12.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Let's really help Emacs out, be sort of,""" start="00:20:15.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""take advantage of this super powerful technique.""" start="00:20:20.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Thank you for listening.""" start="00:20:24.520" video="mainVideo-llm" id="subtitle"]]
+
+
+
+Captioner: bala
+
+<a name="llm-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: Okay. Hello, everyone.""" start="00:00:13.099" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think this is the start of the Q&A session.""" start="00:00:16.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""So people can just ask me questions here.""" start="00:00:25.119" video="qanda-llm" id="subtitle"]]
+[[!template text="""Or I think maybe these questions are going to""" start="00:00:28.259" video="qanda-llm" id="subtitle"]]
+[[!template text="""be read by someone. Yes,""" start="00:00:30.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""thank you. Should I start doing that?""" start="00:00:34.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""I also know that there's questions in the""" start="00:00:39.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""either pad room, so I could start out""" start="00:00:41.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""answering those as well.""" start="00:00:42.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right, sure. Whichever way you prefer.""" start="00:00:45.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""If you prefer to read the questions yourself,""" start="00:00:46.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""by all means, or if you would prefer me to""" start="00:00:48.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""read them to you, that also works.""" start="00:00:50.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh, I see.""" start="00:00:50.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Why don't you read them to me?""" start="00:00:51.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think it'll just be more interesting then.""" start="00:00:53.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sure. OK, let's see. The first question is,""" start="00:00:56.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""what is your use case for embedding,""" start="00:00:58.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""mainly for searching?""" start="00:01:00.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I mean, I think the use case really is""" start="00:01:06.180" video="qanda-llm" id="subtitle"]]
+[[!template text="""searching. And I think it is very useful when""" start="00:01:12.100" video="qanda-llm" id="subtitle"]]
+[[!template text="""you're searching for something in a vague""" start="00:01:15.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""way. Just to give you an example,""" start="00:01:18.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""I have a note system called EKG.""" start="00:01:23.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""I type all my notes on it.""" start="00:01:25.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""You can find it on GitHub and Melba.""" start="00:01:28.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""But I wrote something at some point a year""" start="00:01:34.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""ago or something. I wrote something that I""" start="00:01:35.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""just vaguely remembered.""" start="00:01:36.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""Oh, this was about a certain kind of""" start="00:01:38.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""communication. I wanted communicating to""" start="00:01:41.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""large audiences. There's some interesting tip""" start="00:01:43.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""that I wrote down that was really cool.""" start="00:01:44.700" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I was like, well, I need to find it.""" start="00:01:49.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I did an embedding search for something""" start="00:01:52.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""like, you know, tips for communicating.""" start="00:01:55.479" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like those words may not have been in what I""" start="00:01:58.979" video="qanda-llm" id="subtitle"]]
+[[!template text="""was trying to find at all,""" start="00:02:00.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""But it was able to find it.""" start="00:02:02.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""And that is something that's very hard to do""" start="00:02:05.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""in other ways. Like, you know,""" start="00:02:07.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""if you had to do this with normal search,""" start="00:02:08.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""you have to do synonyms.""" start="00:02:09.199" video="qanda-llm" id="subtitle"]]
+[[!template text="""And like maybe those synonyms wouldn't cover""" start="00:02:10.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""it. Like with embedding,""" start="00:02:11.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""you can basically get at like the vague""" start="00:02:13.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""sentiment. You're like,""" start="00:02:14.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, you're, you know,""" start="00:02:17.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""you can really query on like what things are""" start="00:02:19.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""about as opposed to what words they have.""" start="00:02:21.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""Also, it's super good for similarity search.""" start="00:02:25.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""So you could say, look,""" start="00:02:27.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""I have a bunch of things that are encoded""" start="00:02:30.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""with embeddings that I want to show.""" start="00:02:31.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""For example, you can make an embedding for""" start="00:02:34.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""every buffer. You'd be like,""" start="00:02:35.220" video="qanda-llm" id="subtitle"]]
+[[!template text="""well, show me buffers that are similar to""" start="00:02:37.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""this buffer. That doesn't sound super useful,""" start="00:02:38.740" video="qanda-llm" id="subtitle"]]
+[[!template text="""but this is the kind of thing you could do.""" start="00:02:40.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""And so if you have a bunch of notes or""" start="00:02:45.300" video="qanda-llm" id="subtitle"]]
+[[!template text="""something else that you want to search on,""" start="00:02:46.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""you'd be like, what's similar to this buffer?""" start="00:02:48.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""Or what notes are similar to each other?""" start="00:02:51.500" video="qanda-llm" id="subtitle"]]
+[[!template text="""What buffers are similar to each other?""" start="00:02:53.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's super good for this sort of thing.""" start="00:02:55.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""And it's also good for this kind of retrieval""" start="00:03:00.780" video="qanda-llm" id="subtitle"]]
+[[!template text="""augmented generation, where you sort of,""" start="00:03:03.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""you retrieve things and the purpose is not""" start="00:03:05.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""for you to see them, but then you pass that""" start="00:03:06.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""to the LLM. And then it's able to be a little""" start="00:03:12.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""bit more accurate because it has the actual""" start="00:03:14.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""text that you're trying to,""" start="00:03:15.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""that is relevant, and it can cite from and""" start="00:03:18.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""things like that. And then it could give you""" start="00:03:20.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""a much better answer that's kind of,""" start="00:03:22.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, not just from its own little neural""" start="00:03:25.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""nets and memory.""" start="00:03:26.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool, thanks. Let's see,""" start="00:03:31.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""next question. What do you think about embed""" start="00:03:35.740" video="qanda-llm" id="subtitle"]]
+[[!template text="""Emacs manual versus GPT's Emacs manual?""" start="00:03:40.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: I'm not exactly sure what this question is""" start="00:03:45.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""trying to say. So I mean,""" start="00:03:46.980" video="qanda-llm" id="subtitle"]]
+[[!template text="""if someone wrote that and wants to expand on""" start="00:03:51.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""it a little bit, but I think that maybe""" start="00:03:55.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""you're saying like you could embed,""" start="00:03:58.420" video="qanda-llm" id="subtitle"]]
+[[!template text="""have embeddings for like various,""" start="00:04:00.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""like every paragraph or something of the""" start="00:04:02.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""Emacs manual. But it's also the case that""" start="00:04:04.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""like GPT is already for sure already read it,""" start="00:04:06.500" video="qanda-llm" id="subtitle"]]
+[[!template text="""right? And so you could ask questions that""" start="00:04:09.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""are about Emacs and our ELISP or whatever""" start="00:04:13.460" video="qanda-llm" id="subtitle"]]
+[[!template text="""part of the manual you want to find.""" start="00:04:15.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""And it will do a reasonably good job,""" start="00:04:19.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""especially the better models will do a""" start="00:04:22.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""reasonably good job of saying you something""" start="00:04:24.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""that is vaguely accurate.""" start="00:04:26.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""But if you do this retrieval augmented""" start="00:04:29.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""generation with embeddings,""" start="00:04:30.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""you can get something that is very accurate.""" start="00:04:32.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""At least I think. I haven't tried it,""" start="00:04:36.700" video="qanda-llm" id="subtitle"]]
+[[!template text="""but this is a technique that works in other""" start="00:04:38.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""similar cases. So you can also imagine like,""" start="00:04:43.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""oh, this whole thing I said,""" start="00:04:44.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""like, oh, you can query for vague things and""" start="00:04:47.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""get parts of the manual,""" start="00:04:49.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""perhaps. I'm not exactly sure if that would""" start="00:04:52.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""be useful, but maybe. Usually when I'm""" start="00:04:55.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""looking things up in the Emacs manual or""" start="00:04:57.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""Elist manual, I have something extremely""" start="00:04:58.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""specific and I kind of know where to look.""" start="00:05:00.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""But having other ways to get at this""" start="00:05:02.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""information is always good.""" start="00:05:04.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. Looks like they added a clarification""" start="00:05:10.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""if you would like to read that yourself,""" start="00:05:12.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""or would you like me to read it for you?""" start="00:05:14.180" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah. Yes, OK. It says,""" start="00:05:17.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""I've never tried. Yeah,""" start="00:05:20.460" video="qanda-llm" id="subtitle"]]
+[[!template text="""the question is like OK,""" start="00:05:21.500" video="qanda-llm" id="subtitle"]]
+[[!template text="""there is a difference between the kind of""" start="00:05:23.100" video="qanda-llm" id="subtitle"]]
+[[!template text="""thing as I just described.""" start="00:05:23.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""I have not tried the difference with the EMAX""" start="00:05:26.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""manual itself. It'd be interesting to see""" start="00:05:31.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""what this is, but I would expect like these""" start="00:05:33.700" video="qanda-llm" id="subtitle"]]
+[[!template text="""techniques, the retrieval augmented""" start="00:05:35.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""generation is generally pretty good.""" start="00:05:38.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I suspect it would,""" start="00:05:41.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""I would bet money on the fact that it's gonna""" start="00:05:43.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""give you, you know, better results than just,""" start="00:05:45.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, doing a free form query without any""" start="00:05:48.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""retrieval augmented generation.""" start="00:05:49.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool. Let's see. Next question.""" start="00:05:54.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""When deferring commit messages to an LLM,""" start="00:05:56.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""what, if anything, do you find you might have""" start="00:05:59.700" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: lost? Yeah, it's a good question.""" start="00:06:02.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""When deferring anything to a computer,""" start="00:06:06.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""like, you know, I used to have to remember""" start="00:06:08.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""how to get places, and now,""" start="00:06:11.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, on the few occasions which I drive,""" start="00:06:14.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""like, It could just tell me how to get""" start="00:06:16.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""places. So similar things could occur here""" start="00:06:21.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""where like, okay, I'm just leaving the LLM.""" start="00:06:24.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""And so I'm kind of missing out on some""" start="00:06:27.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""opportunity to think coherently about a""" start="00:06:30.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""particular commit. Particular commits are""" start="00:06:32.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""kind of low level. I don't think it's usually""" start="00:06:36.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""relatively obvious and what they're doing.""" start="00:06:39.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""And in this case, I think there's not much""" start="00:06:42.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""loss. But for sure, in other cases,""" start="00:06:44.220" video="qanda-llm" id="subtitle"]]
+[[!template text="""if you're starting to get into situations""" start="00:06:46.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""where it's writing your emails and all this""" start="00:06:48.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""stuff. First of all, it's in 1 sense,""" start="00:06:52.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'm not sure you might be losing something by""" start="00:06:55.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""delegating things. On the other hand,""" start="00:06:57.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, when you're interacting with these""" start="00:06:59.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""LLMs, you have to be extremely specific about""" start="00:07:01.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""what you want, or else it's just not going to""" start="00:07:03.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""do a good job. And that might actually be a""" start="00:07:07.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""good thing. So the question might be that""" start="00:07:09.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""maybe you might gain things by using an LLM""" start="00:07:11.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""to do your work. It might not actually even""" start="00:07:13.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""save you that much time,""" start="00:07:15.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""at least initially, because you have to kind""" start="00:07:18.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""of practice again super specific about what""" start="00:07:20.460" video="qanda-llm" id="subtitle"]]
+[[!template text="""you want to get out of the output it's going""" start="00:07:22.740" video="qanda-llm" id="subtitle"]]
+[[!template text="""to give you so like oh I'm you know maybe you""" start="00:07:26.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""know you're on the emacs devel mailing list""" start="00:07:29.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""and you're like okay write this email about""" start="00:07:31.780" video="qanda-llm" id="subtitle"]]
+[[!template text="""this about this And here's what I want to""" start="00:07:34.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""say. And here's the kind of tone I want to""" start="00:07:35.370" video="qanda-llm" id="subtitle"]]
+[[!template text="""use. And here's the like,""" start="00:07:36.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""oh, you might want to specify like everything""" start="00:07:37.660" video="qanda-llm" id="subtitle"]]
+[[!template text="""that you kind of want to get into this.""" start="00:07:39.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""Usually it's easier just to write the email.""" start="00:07:42.180" video="qanda-llm" id="subtitle"]]
+[[!template text="""But I think that practice of kind of""" start="00:07:45.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""understanding what you want is not something""" start="00:07:48.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""you normally do. And I think it's going to be""" start="00:07:52.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""an interesting exercise that will help people""" start="00:07:56.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""understand. That said,""" start="00:07:57.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""I haven't done that much of that,""" start="00:07:58.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""so I can't say, oh, yeah,""" start="00:07:59.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""I've done this and it works for me.""" start="00:08:01.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""Maybe. I think it's an interesting thing to""" start="00:08:03.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""explore.""" start="00:08:03.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sure. Thanks. Let's see.""" start="00:08:07.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""Let's see. Can you share your font settings""" start="00:08:10.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""in your Emacs config? Those are some nice""" start="00:08:13.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""fonts for reading.""" start="00:08:14.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I think I was using Menlo at the time.""" start="00:08:18.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""Unfortunately, I don't save those kinds of""" start="00:08:20.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""things, like a history of this.""" start="00:08:21.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""I've kind of switched now to,""" start="00:08:24.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""what was that? I think I wrote it down in""" start="00:08:27.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""the, I switched to MunaSpace,""" start="00:08:29.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""which just came out like a week or 2 ago,""" start="00:08:31.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""and is also pretty cool.""" start="00:08:33.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I think it's Menlo.""" start="00:08:35.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""The internal question,""" start="00:08:37.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""what font are you using?""" start="00:08:38.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Indeed, yeah. It looks like someone guessed""" start="00:08:42.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""as well that it might be Menlo.""" start="00:08:43.780" video="qanda-llm" id="subtitle"]]
+[[!template text="""OK, Cool. Yeah, next question.""" start="00:08:47.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""In terms of standardization,""" start="00:08:48.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""do you see a need for the medium to large""" start="00:08:53.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""scale effort needed? And then they also""" start="00:08:55.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""elaborate about it.""" start="00:08:56.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I mean, I do think,""" start="00:09:03.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""I don't know if it's large scale,""" start="00:09:06.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""but at least it's probably medium scale.""" start="00:09:08.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""There's a lot of things that are missing that""" start="00:09:10.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""we don't have right now in emacs when you're""" start="00:09:12.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""dealing with LLMs. 1 is,""" start="00:09:13.660" video="qanda-llm" id="subtitle"]]
+[[!template text="""a prompting system. And by that,""" start="00:09:18.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""I mean, you know, prompts are just like big""" start="00:09:21.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""blocks of text, but there's also senses that""" start="00:09:24.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""like prompts need to be composable and you""" start="00:09:28.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""need to be able to iterate on parts of the""" start="00:09:30.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""prompt. And so it's also customizable.""" start="00:09:36.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""Users might want to customize it.""" start="00:09:38.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""On the other hand, it's not super easy to""" start="00:09:41.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""write the prompt. So you want really good""" start="00:09:43.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""defaults. So the whole prompt system is kind""" start="00:09:47.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""of complicated. That needs to be kind of""" start="00:09:51.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""standardized, because I don't think there's""" start="00:09:52.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""any tools for doing something like that right""" start="00:09:54.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""now. I personally use my system,""" start="00:09:58.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""my note system for EKG.""" start="00:10:00.220" video="qanda-llm" id="subtitle"]]
+[[!template text="""I don't think that's appropriate for""" start="00:10:01.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""everyone, but it does,""" start="00:10:02.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""I did write it to have some of these""" start="00:10:04.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""capabilities of composability that I think""" start="00:10:06.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""are useful for a prompt generation.""" start="00:10:08.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""It'd be nice to have a system like that,""" start="00:10:11.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""but for general use. I don't,""" start="00:10:15.660" video="qanda-llm" id="subtitle"]]
+[[!template text="""this is something I've been meaning to think""" start="00:10:17.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""about, like how to do it,""" start="00:10:18.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""but like this, you know,""" start="00:10:19.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""if someone's interested in getting this area,""" start="00:10:21.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""like, I would love to chat about that or,""" start="00:10:26.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, I think there's a lot of""" start="00:10:27.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""interesting ideas that we could have to have""" start="00:10:31.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""a system that allows us to make progress""" start="00:10:34.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""here. And also, I think there's more to""" start="00:10:38.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""standardization to be done.""" start="00:10:40.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""1 thing I'd also like to see that we haven't""" start="00:10:42.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""done yet is a system for standardizing on""" start="00:10:47.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""getting structured output.""" start="00:10:48.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""This is gonna be super useful.""" start="00:10:49.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""I have this for open AIs API,""" start="00:10:52.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""cause they support it.""" start="00:10:53.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""And it's really nice, cause then you can""" start="00:10:55.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""write elist functions that like,""" start="00:10:57.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""okay, I'm going to call the LLM.""" start="00:10:59.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'm gonna get structured output.""" start="00:11:00.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""I know what that structure is going to be.""" start="00:11:02.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's not going to be just a big block of""" start="00:11:03.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""text. I could turn it into a,""" start="00:11:05.660" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, a P list or something.""" start="00:11:07.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""And then I could get the values out of that P""" start="00:11:09.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""list. And I know that way I could do,""" start="00:11:11.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""I could write actual apps that are,""" start="00:11:14.220" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, very, very sort of,""" start="00:11:18.300" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, useful for very specific purposes""" start="00:11:20.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""and not just for text generation.""" start="00:11:21.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I think that's 1 of the most important""" start="00:11:24.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""things we want to do. And I have some ideas""" start="00:11:27.100" video="qanda-llm" id="subtitle"]]
+[[!template text="""about how to do it. I just haven't pursued""" start="00:11:28.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""those yet. But if other people have ideas,""" start="00:11:31.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think this would be really interesting to""" start="00:11:34.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""add to the LLM package.""" start="00:11:35.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""So contact me there.""" start="00:11:37.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Awesome. Quick note before we continue.""" start="00:11:42.100" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I'm not sure how long we're going to be on""" start="00:11:44.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""stream for, because this is the last talk""" start="00:11:46.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""before the break. If we are on the stream""" start="00:11:48.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""long-term, then great.""" start="00:11:49.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""But if not, folks are welcome to continue""" start="00:11:51.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""writing questions on the pad.""" start="00:11:53.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""And hopefully, Andrew will get to them at""" start="00:11:55.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""some point. Or if Andrew maybe has some extra""" start="00:11:58.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""time available and wants to stay on""" start="00:11:59.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""BigBlueButton here, then folks are also""" start="00:12:01.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""welcome to join here and chat with Andrew""" start="00:12:03.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""directly as well. Okay,""" start="00:12:08.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""awesome. So yeah, the next question is,""" start="00:12:10.740" video="qanda-llm" id="subtitle"]]
+[[!template text="""what are your thoughts on the carbon""" start="00:12:12.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""footprint of LLM usage?""" start="00:12:14.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, it's a really interesting question.""" start="00:12:17.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""I don't have any particular knowledge or""" start="00:12:23.180" video="qanda-llm" id="subtitle"]]
+[[!template text="""opinions about that. It's something I think""" start="00:12:25.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""we should all be educating ourselves more""" start="00:12:26.980" video="qanda-llm" id="subtitle"]]
+[[!template text="""about. It is really, I mean,""" start="00:12:32.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""there's 2 parts of this,""" start="00:12:33.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""right? They take a, there's a huge amount of""" start="00:12:35.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""carbon footprint involved in training these""" start="00:12:37.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""things. Then running them is relatively""" start="00:12:38.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""lightweight. So the question is not""" start="00:12:42.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""necessarily like once it's trained,""" start="00:12:44.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""like I don't feel like it's a big deal to""" start="00:12:46.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""keep using it, but like training these things""" start="00:12:48.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""is kind of like the big carbon cost of it.""" start="00:12:50.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""But like right now, the way everything's""" start="00:12:53.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""going, like every, you know,""" start="00:12:56.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""all, you know, the top 5 or 6 tech companies""" start="00:12:59.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""are all training their LLMs,""" start="00:13:00.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""and this is all costing a giant amount of""" start="00:13:03.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""carbon probably. On the other hand these same""" start="00:13:06.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""companies are pretty good about using the""" start="00:13:08.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""least amount of carbon necessary you know""" start="00:13:10.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""they have their own their tricks for doing""" start="00:13:12.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""things very efficiently.""" start="00:13:13.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool next question, LLMs are slow and""" start="00:13:22.100" video="qanda-llm" id="subtitle"]]
+[[!template text="""responding. Do you think Emacs should provide""" start="00:13:24.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""more async primitives to keep it responsive?""" start="00:13:26.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like the URL retrieve is quite bad at""" start="00:13:29.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""building API clients with it.""" start="00:13:31.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""Building API clients with it?""" start="00:13:31.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah. Well, OK, so first of all,""" start="00:13:36.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""people should be using the LLM client.""" start="00:13:40.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""And So right now, 1 thing I should have""" start="00:13:48.740" video="qanda-llm" id="subtitle"]]
+[[!template text="""mentioned at the top is that there are new""" start="00:13:50.220" video="qanda-llm" id="subtitle"]]
+[[!template text="""packages that I recorded this talk that you""" start="00:13:52.500" video="qanda-llm" id="subtitle"]]
+[[!template text="""just saw several months ago.""" start="00:13:54.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""And so like Elama, there's this package Elama""" start="00:13:57.780" video="qanda-llm" id="subtitle"]]
+[[!template text="""that came out that is using the LM package.""" start="00:13:59.700" video="qanda-llm" id="subtitle"]]
+[[!template text="""And so for example, it doesn't need to worry""" start="00:14:02.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""about this sort of thing because it just uses""" start="00:14:05.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""LLM and package and the LLM package worries""" start="00:14:07.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""about this. And while I'm on the subject of""" start="00:14:11.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""things I forgot to mention,""" start="00:14:12.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""I also should just mention very quickly that""" start="00:14:15.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""there is now an open source model,""" start="00:14:17.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""Mistral. And so that's kind of this new thing""" start="00:14:21.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""on the scene that happened after I recorded""" start="00:14:23.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""my talk. And I think it's super important to""" start="00:14:26.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""the community and important that we have the""" start="00:14:28.660" video="qanda-llm" id="subtitle"]]
+[[!template text="""opportunity to use that if we want to.""" start="00:14:30.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""Okay, but to answer the actual question,""" start="00:14:33.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""there has been some talk about the problems""" start="00:14:37.660" video="qanda-llm" id="subtitle"]]
+[[!template text="""with URL retrieve in the URL package in""" start="00:14:40.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""general in EmacsDevEl.""" start="00:14:42.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's not great. I would like to have better""" start="00:14:46.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""primitives. And I've asked the author of""" start="00:14:50.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""Please PLZ to kind of provide some necessary""" start="00:14:54.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""callbacks. I think that's a great library.""" start="00:14:56.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""And I'd like to see that kind of like,""" start="00:15:00.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""It's nice that we have options,""" start="00:15:01.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""and that is an option that uses curl on the""" start="00:15:03.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""back end, and that has some benefits.""" start="00:15:05.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""So there's this big debate about whether we""" start="00:15:09.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""should have primitives or just use curl.""" start="00:15:10.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'm not exactly sure what the right call is,""" start="00:15:13.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""but there has been discussions about this.""" start="00:15:15.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Excellent. And someone commented that GPTEL""" start="00:15:19.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""is async and apparently very good at tracking""" start="00:15:21.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""the point.""" start="00:15:22.300" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, yes, GPTEL has similar functionalities""" start="00:15:26.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""to LLM, although I believe it's going to move""" start="00:15:29.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""to LLM itself sometime soon.""" start="00:15:33.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: Next question, speaking of which,""" start="00:15:39.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""anyone trained or fine-tuned or prompted a""" start="00:15:42.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""model with their org data yet and applied it""" start="00:15:44.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""to interesting use cases like planning,""" start="00:15:46.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""scheduling, et cetera,""" start="00:15:47.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""and maybe care to comment?""" start="00:15:49.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: I don't know anyone who is doing that.""" start="00:15:54.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think it is interesting.""" start="00:15:55.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like this is what I kind of mentioned at the""" start="00:15:57.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""very end of the talk. There is a lot of stuff""" start="00:16:01.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""there like you could you know if you""" start="00:16:02.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""especially mean an LLM can kind of work as""" start="00:16:04.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""sort of like a secretary kind of person that""" start="00:16:07.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""could help you prioritize Still it's a""" start="00:16:12.180" video="qanda-llm" id="subtitle"]]
+[[!template text="""slightly unclear how what the best way to use""" start="00:16:14.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""it is So I think there's more of a question""" start="00:16:16.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""for the community about like what people have""" start="00:16:18.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""been trying. I see someone has mentioned that""" start="00:16:21.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""they are using it for weekly review.""" start="00:16:23.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""And it's kind of nice to like,""" start="00:16:26.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""maybe you could read your agenda or maybe""" start="00:16:29.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""this for like weekly review.""" start="00:16:30.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""It could like read all the stuff you've done""" start="00:16:32.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""and ask you questions about it.""" start="00:16:33.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""And like, what should happen next?""" start="00:16:35.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""Or like, is this going to cause a problem?""" start="00:16:36.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like, I can, I can understand if that could""" start="00:16:39.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""happen? That's like, that's kind of nice.""" start="00:16:40.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""And this kind of people have had good success""" start="00:16:43.660" video="qanda-llm" id="subtitle"]]
+[[!template text="""out of using these LLMs to bounce ideas off""" start="00:16:48.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""of are, you know, for,""" start="00:16:49.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, I've seen people say that like they""" start="00:16:52.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""want, they use it for reading and they kind""" start="00:16:55.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""of dialogue with the LM to kind of like do""" start="00:16:58.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""sort of active reading.""" start="00:16:59.500" video="qanda-llm" id="subtitle"]]
+[[!template text="""So you can imagine doing something similar""" start="00:17:02.500" video="qanda-llm" id="subtitle"]]
+[[!template text="""with your tasks where it's sort of you're""" start="00:17:04.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""engaged in dialogue about like planning your""" start="00:17:06.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""tax with some with a alum that could kind of""" start="00:17:08.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""understand what those are and ask you some""" start="00:17:10.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""questions I think it. You know,""" start="00:17:13.780" video="qanda-llm" id="subtitle"]]
+[[!template text="""if it'd be nice. So, the problem is like""" start="00:17:16.839" video="qanda-llm" id="subtitle"]]
+[[!template text="""there's no great way to share all this stuff.""" start="00:17:18.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""I guess if you have something like this,""" start="00:17:20.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""put it on Reddit. If you don't have Reddit,""" start="00:17:23.300" video="qanda-llm" id="subtitle"]]
+[[!template text="""I don't know what to do.""" start="00:17:24.599" video="qanda-llm" id="subtitle"]]
+[[!template text="""I would say put it somewhere.""" start="00:17:26.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""At the very least, I could maybe open up like""" start="00:17:28.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""an LLM discussion session on the LLM package""" start="00:17:31.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""GitHub, But not everyone likes to use GitHub.""" start="00:17:34.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""I don't know. It'd be nice if there's a""" start="00:17:36.100" video="qanda-llm" id="subtitle"]]
+[[!template text="""mailing list or IRC chat for this sort of""" start="00:17:38.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""thing. But there isn't at the moment.""" start="00:17:40.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right. Let's see. I think that's the end""" start="00:17:46.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""of the questions on the pad so far.""" start="00:17:48.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""There was also some discussion or some""" start="00:17:51.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""chatter, I believe, on IRC.""" start="00:17:52.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'm not sure. Andrew, are you on IRC right""" start="00:17:54.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: I am, but I don't think I'm on any place that""" start="00:18:00.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""has the chatter. So if there's chatter,""" start="00:18:01.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""then I'm not seeing it.""" start="00:18:02.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: now? Okay. Yeah, it was in the emacsconf-dev""" start="00:18:04.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""channel.""" start="00:18:06.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, let me see if I can.""" start="00:18:09.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""Oh, yes. I mean, I could see the channel,""" start="00:18:25.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I missed whatever came before.""" start="00:18:27.520" video="qanda-llm" id="subtitle"]]
+[[!template text="""So if there's anything you want to kind of""" start="00:18:29.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""call out, I can try to answer it here.""" start="00:18:30.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: OK, cool. I believe at least 2 other folks""" start="00:18:35.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""who are participating in the discussion there""" start="00:18:37.500" video="qanda-llm" id="subtitle"]]
+[[!template text="""who have also joined here on BigBlueButton,""" start="00:18:40.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""Codin Quark and AeonTurn92.""" start="00:18:42.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""So you folks, if Andrew is still available""" start="00:18:47.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""and has time, you're welcome to chat here and""" start="00:18:50.460" video="qanda-llm" id="subtitle"]]
+[[!template text="""ask questions or discuss here as well.""" start="00:18:53.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: 1 Thank you. Thank you for your help,""" start="00:18:55.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""and thank you for reading all the questions.""" start="00:18:57.740" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: AUDIENCE 2 Cheers, and thanks to you for a""" start="00:18:59.700" video="qanda-llm" id="subtitle"]]
+[[!template text="""great talk and the discussion.""" start="00:19:00.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: AUDIENCE AUDIENCE 1 Thank you.""" start="00:19:01.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: AUDIENCE 2 Cheers.""" start="00:19:03.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: So I'll just, I will wait here and see if""" start="00:19:07.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""there's any questions.""" start="00:19:08.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""If not, I will log off after a few minutes.""" start="00:19:10.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 2]: Well, I guess since we were mentioned that""" start="00:19:15.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""there was a small chat about local alarms.""" start="00:19:18.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""Because chat dpt is nice,""" start="00:19:22.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""no, but privacy concerns,""" start="00:19:25.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""and it's not free and stuff.""" start="00:19:27.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""Which, so The question is,""" start="00:19:31.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""what is the promise for local models?""" start="00:19:36.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, so local is definitely...""" start="00:19:39.660" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 2]: Or at least open source.""" start="00:19:41.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, so there is a local open source model,""" start="00:19:45.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""Misral, which you could run.""" start="00:19:47.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""The LLM package allows you to use,""" start="00:19:51.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think there's 3 kind of local things you""" start="00:19:56.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""could use. Like many of these things,""" start="00:19:58.100" video="qanda-llm" id="subtitle"]]
+[[!template text="""there's like many kind of ways to do the same""" start="00:20:00.220" video="qanda-llm" id="subtitle"]]
+[[!template text="""sort of thing. So LLM is supporting OLAMMA""" start="00:20:03.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""and LLAMMA-CPP. And let's see,""" start="00:20:10.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""1 other. Which 1 is it?""" start="00:20:12.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""And maybe that's it. Maybe the,""" start="00:20:18.420" video="qanda-llm" id="subtitle"]]
+[[!template text="""oh, GPT for all. So each 1 of these kind of""" start="00:20:21.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""has slightly different functionality.""" start="00:20:23.100" video="qanda-llm" id="subtitle"]]
+[[!template text="""For example, I think GPT for all doesn't""" start="00:20:26.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""support embeddings. And I hear that Olama's""" start="00:20:31.780" video="qanda-llm" id="subtitle"]]
+[[!template text="""embeddings are kind of currently broken.""" start="00:20:33.740" video="qanda-llm" id="subtitle"]]
+[[!template text="""But basically they should support everything.""" start="00:20:35.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""And the open source models are,""" start="00:20:39.100" video="qanda-llm" id="subtitle"]]
+[[!template text="""so the local models are reasonably good.""" start="00:20:43.180" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like I don't think you'd use them and be""" start="00:20:44.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""like, what is this horrible nonsense?""" start="00:20:46.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like it's, it gives you relatively good""" start="00:20:50.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""results. Like it's not gonna be at the level""" start="00:20:51.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""of like GPT 3.5 or 4, but it's not far away""" start="00:20:56.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""from GPT 3.5, I think.""" start="00:20:57.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 2]: I'm just saying that Olam has like a presets""" start="00:21:02.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""for connecting the actual working servers for""" start="00:21:05.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""Olama?""" start="00:21:06.300" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: So, I'll try. Yeah, so you could,""" start="00:21:08.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""what you could do is you could like for""" start="00:21:09.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""example you could download Olama which is""" start="00:21:11.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""just a way of setting up local models and""" start="00:21:15.780" video="qanda-llm" id="subtitle"]]
+[[!template text="""running local models on your machine.""" start="00:21:17.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""So typically what it does,""" start="00:21:18.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""you like download a program,""" start="00:21:19.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""let's say Olama. Then Olama will have the""" start="00:21:23.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""ability to download models.""" start="00:21:24.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""And so you could choose from just a host of""" start="00:21:27.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""different models. Each 1 of these things has""" start="00:21:29.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""a bunch of different models.""" start="00:21:30.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""So it downloads all these things to your""" start="00:21:31.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""machine. But I would say that the key problem""" start="00:21:36.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""here is that it requires a fairly beefy""" start="00:21:40.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""machine.""" start="00:21:40.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 2]: So. Yeah, yeah, of course.""" start="00:21:42.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""Why I was asking, because you briefly""" start="00:21:45.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""mentioned that there are some Israeli""" start="00:21:46.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""servers. I understand that they run it like a""" start="00:21:52.300" video="qanda-llm" id="subtitle"]]
+[[!template text="""government or stuff like that?""" start="00:21:53.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""No, no, sorry. People want everyone?""" start="00:21:55.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: I don't, I mean, maybe you've said something""" start="00:21:59.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""that sounded like Israeli servers.""" start="00:22:00.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 2]: Okay, okay.""" start="00:22:01.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: I think- There's no government LLMs as far as""" start="00:22:04.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""I know. Although, I'm sure the governments""" start="00:22:06.820" video="qanda-llm" id="subtitle"]]
+[[!template text="""are working on their own LLMs,""" start="00:22:08.200" video="qanda-llm" id="subtitle"]]
+[[!template text="""et cetera. But yeah, basically your choices""" start="00:22:10.980" video="qanda-llm" id="subtitle"]]
+[[!template text="""are spend a, I mean, if you use open AI or""" start="00:22:15.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""something or anything else,""" start="00:22:16.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""you're really not spending any money.""" start="00:22:17.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like I've never been able to spend any money""" start="00:22:20.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""on OpenAI. Like unless you're doing something""" start="00:22:23.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""very intensive and really are using it to,""" start="00:22:25.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, if you're using it for your""" start="00:22:28.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""personal use, it's just hard to spend any""" start="00:22:29.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""money. But on the other hand,""" start="00:22:31.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""it's not free. So you can,""" start="00:22:32.780" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know,""" start="00:22:33.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 2]: Actually, it's rather cheap.""" start="00:22:36.300" video="qanda-llm" id="subtitle"]]
+[[!template text="""There's no question about that.""" start="00:22:37.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""The problem is that it has a bad track record""" start="00:22:40.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""on privacy.""" start="00:22:41.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, that's, I think that is a key problem.""" start="00:22:45.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""This is probably the number 1 reason why you""" start="00:22:48.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""might want to use a local AI,""" start="00:22:51.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""a local LLM. Another 1 is like,""" start="00:22:54.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""you may not agree with the decisions.""" start="00:22:57.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""You know, there's a lot of trust and safety""" start="00:23:00.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""stuff that these companies have to do.""" start="00:23:05.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like they don't want like the LMs to kind of""" start="00:23:09.020" video="qanda-llm" id="subtitle"]]
+[[!template text="""like give you, like tell you how you can make""" start="00:23:11.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""meth or how you can make a bomb,""" start="00:23:13.180" video="qanda-llm" id="subtitle"]]
+[[!template text="""which they would do. They would totally do""" start="00:23:14.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""it. So, But each time you kind of restrict""" start="00:23:19.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""what is happening with what you can get out""" start="00:23:22.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""of the LM, it gets a little worse.""" start="00:23:23.860" video="qanda-llm" id="subtitle"]]
+[[!template text="""So some people""" start="00:23:24.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 2]: want to have local. That's expected.""" start="00:23:27.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""I guess even open source language modules""" start="00:23:31.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""will soon have HR spaces because it's simply""" start="00:23:33.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""a legal issue.""" start="00:23:34.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: I think that's true. I also think that there""" start="00:23:40.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""probably will be, although I don't know of""" start="00:23:42.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""any offhand, that will are completely""" start="00:23:45.060" video="qanda-llm" id="subtitle"]]
+[[!template text="""uncensored. I know people are interested and""" start="00:23:46.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""are running uncensored models.""" start="00:23:48.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""I don't know how to do it.""" start="00:23:49.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think it's a little bit dubious,""" start="00:23:52.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""but some people do want to do it.""" start="00:23:54.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""There's another reason for using local""" start="00:23:56.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""servers. Do you have any recommendation for""" start="00:24:02.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""models to run locally and also comments on""" start="00:24:05.500" video="qanda-llm" id="subtitle"]]
+[[!template text="""whether a GPU is required?""" start="00:24:06.780" video="qanda-llm" id="subtitle"]]
+[[!template text="""Usually a GPU, well, you can run it without a""" start="00:24:14.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""GPU, but it does run much better.""" start="00:24:16.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like for example, I think when I used,""" start="00:24:19.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""Lama is sort of like a standard.""" start="00:24:22.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""This was the model for that Facebook came out""" start="00:24:27.160" video="qanda-llm" id="subtitle"]]
+[[!template text="""with for local use. And It was,""" start="00:24:31.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""yeah, it's good. It's,""" start="00:24:37.260" video="qanda-llm" id="subtitle"]]
+[[!template text="""but it's now it's I think,""" start="00:24:40.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""Mistral is kind of like has a better""" start="00:24:44.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""performance, But there's also different model""" start="00:24:46.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""sizes. There's 7B, like the Lama 7B is OK.""" start="00:24:51.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""The Mistral 7B, 7 billion,""" start="00:24:52.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""are like, basically it'll take like,""" start="00:24:54.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""you can run it with like 16 gigs of RAM,""" start="00:24:58.380" video="qanda-llm" id="subtitle"]]
+[[!template text="""is pretty good. It's probably about as equal""" start="00:25:02.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""to the LLAMA13B. Those are the number of""" start="00:25:06.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""parameters, if I remember correctly.""" start="00:25:08.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""And then there's a 7B,""" start="00:25:10.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""which I've never been able to run.""" start="00:25:12.340" video="qanda-llm" id="subtitle"]]
+[[!template text="""And even if the 7B, if you run it without a""" start="00:25:16.120" video="qanda-llm" id="subtitle"]]
+[[!template text="""GPU, it takes quite a while to answer.""" start="00:25:19.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think I've had experiences where it took""" start="00:25:22.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""literally like several,""" start="00:25:23.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""like 5 minutes before it even started""" start="00:25:26.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""responding, but you do eventually get""" start="00:25:28.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""something. And it could be that like things""" start="00:25:32.220" video="qanda-llm" id="subtitle"]]
+[[!template text="""have gotten better since the last time I""" start="00:25:33.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""tried this, because things are moving fast.""" start="00:25:35.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""But it is super recommended to have a GPU.""" start="00:25:38.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""This is the problem. It's kind of like,""" start="00:25:42.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""yes, free software is great.""" start="00:25:43.840" video="qanda-llm" id="subtitle"]]
+[[!template text="""But if free software is requiring that you""" start="00:25:46.880" video="qanda-llm" id="subtitle"]]
+[[!template text="""have these kind of beefy servers and have all""" start="00:25:50.460" video="qanda-llm" id="subtitle"]]
+[[!template text="""this hardware, that's not great.""" start="00:25:52.000" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think there's a case to be made.""" start="00:25:53.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 1]: a hardware""" start="00:25:55.680" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: with slots instead of a laptop.""" start="00:25:59.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""Yeah, yeah, that's right.""" start="00:26:01.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 2]: Ideally, you can have Ideally,""" start="00:26:03.660" video="qanda-llm" id="subtitle"]]
+[[!template text="""it would be nice if FSL for all things could""" start="00:26:07.400" video="qanda-llm" id="subtitle"]]
+[[!template text="""run something for open source model.""" start="00:26:12.040" video="qanda-llm" id="subtitle"]]
+[[!template text="""And not free, but the key point is that it's""" start="00:26:16.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""Libre?""" start="00:26:16.640" video="qanda-llm" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, so actually I think Google does do that.""" start="00:26:22.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'll have to look it up,""" start="00:26:24.720" video="qanda-llm" id="subtitle"]]
+[[!template text="""but I haven't explored this yet.""" start="00:26:27.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""But Google's server, which LLM does support,""" start="00:26:31.220" video="qanda-llm" id="subtitle"]]
+[[!template text="""supports arbitrary models.""" start="00:26:33.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""So you can run LLMA or things like that.""" start="00:26:36.420" video="qanda-llm" id="subtitle"]]
+[[!template text="""The problem is that even if you're running""" start="00:26:38.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""Mistral, which has no restrictions.""" start="00:26:40.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""So this is the kind of thing that like the""" start="00:26:42.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""Free Software Foundation cares a lot about.""" start="00:26:44.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""Like you want it to be like no restrictions,""" start="00:26:47.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""legal restrictions on you as you run the""" start="00:26:49.740" video="qanda-llm" id="subtitle"]]
+[[!template text="""model. So even if it's running Mistral,""" start="00:26:52.080" video="qanda-llm" id="subtitle"]]
+[[!template text="""just by using the server,""" start="00:26:54.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""the company server, it will impose some""" start="00:26:58.460" video="qanda-llm" id="subtitle"]]
+[[!template text="""restrictions on you probably,""" start="00:26:59.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""right? There's gonna be some license that you""" start="00:27:02.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""have to, or something you have to abide by.""" start="00:27:04.760" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I think, yes, it depends on how much you""" start="00:27:08.480" video="qanda-llm" id="subtitle"]]
+[[!template text="""care about it, I guess.""" start="00:27:09.280" video="qanda-llm" id="subtitle"]]
+[[!template text="""I should find out more about that and make""" start="00:27:19.500" video="qanda-llm" id="subtitle"]]
+[[!template text="""sure that it's a good point that I should,""" start="00:27:21.580" video="qanda-llm" id="subtitle"]]
+[[!template text="""you know, people should be able to run free""" start="00:27:23.980" video="qanda-llm" id="subtitle"]]
+[[!template text="""models over the server.""" start="00:27:25.920" video="qanda-llm" id="subtitle"]]
+[[!template text="""So I should make sure we support that in the""" start="00:27:28.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""LLM package. So, is there any other questions""" start="00:27:40.360" video="qanda-llm" id="subtitle"]]
+[[!template text="""Or is otherwise we can end the session.""" start="00:27:48.240" video="qanda-llm" id="subtitle"]]
+[[!template text="""Yeah, all right. Thank you.""" start="00:28:00.800" video="qanda-llm" id="subtitle"]]
+[[!template text="""Thank you. Thank you everyone who listened.""" start="00:28:02.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""I'm super happy like I,""" start="00:28:04.540" video="qanda-llm" id="subtitle"]]
+[[!template text="""the interest is great.""" start="00:28:06.560" video="qanda-llm" id="subtitle"]]
+[[!template text="""I think there's great stuff to be done here""" start="00:28:08.900" video="qanda-llm" id="subtitle"]]
+[[!template text="""and I'm kind of super excited what we're""" start="00:28:10.960" video="qanda-llm" id="subtitle"]]
+[[!template text="""going to do in the next year,""" start="00:28:11.940" video="qanda-llm" id="subtitle"]]
+[[!template text="""so hopefully, like next year,""" start="00:28:13.140" video="qanda-llm" id="subtitle"]]
+[[!template text="""and the conference we have something even""" start="00:28:14.600" video="qanda-llm" id="subtitle"]]
+[[!template text="""more exciting to say about LLM and how they""" start="00:28:16.440" video="qanda-llm" id="subtitle"]]
+[[!template text="""can be used with Emacs.""" start="00:28:17.320" video="qanda-llm" id="subtitle"]]
+[[!template text="""So thank""" start="00:28:19.620" video="qanda-llm" id="subtitle"]]
+[[!template text="""you""" start="00:28:30.060" video="qanda-llm" id="subtitle"]]
+
+Questions or comments? Please e-mail [ahyatt@gmail.com](mailto:ahyatt@gmail.com?subject=Comment%20for%20EmacsConf%202023%20llm%3A%20LLM%20clients%20in%20Emacs%2C%20functionality%20and%20standardization)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/llm-before.md b/2023/info/llm-before.md
new file mode 100644
index 00000000..2371bd44
--- /dev/null
+++ b/2023/info/llm-before.md
@@ -0,0 +1,33 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 21-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="llm-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="llm-mainVideo" data="""
+00:00.000 Intro to the Talk
+00:25.080 What are LLMs?
+01:56.360 Power of LLMs (Magit Demo)
+03:32.240 Drawbacks of LLMs (regex demo)
+05:20.120 Embeddings
+07:32.800 Image Generation
+08:48.480 Fine-tuning
+11:08.160 Open Source
+12:02.840 The Future
+14:08.200 LLMs in Emacs - existing packages
+18:15.960 Abstracting LLM challenges
+19:04.080 Emacs is the ideal interface for LLMs
+20:01.960 Outro
+
+"""]]<div></div>Duration: 20:26 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/ck1LWXvRiAGNLWFA8s4Ymi">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="llm-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="llm-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus"></audio></div><div></div>Duration: 28:32 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus">Download --answers.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm">Download --answers.webm (46MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/llm-nav.md b/2023/info/llm-nav.md
new file mode 100644
index 00000000..13555b70
--- /dev/null
+++ b/2023/info/llm-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/voice">Enhancing productivity with voice computing</a>
+Next by track: <a href="/2023/talks/overlay">Improving compiler diagnostics with overlays</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/lspocaml-after.md b/2023/info/lspocaml-after.md
new file mode 100644
index 00000000..56d6ba54
--- /dev/null
+++ b/2023/info/lspocaml-after.md
@@ -0,0 +1,793 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="lspocaml-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""Hi, I'm Austin Theriault,""" start="00:00:00.000" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and this is writing a language server in OCaml""" start="00:00:01.840" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""for Emacs, fun, and profit.""" start="00:00:04.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Real quick, who am I?""" start="00:00:07.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Well, I'm a software engineer at Semgrep.""" start="00:00:08.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I work on our editor integrations,""" start="00:00:10.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and I love working on programming languages, editors,""" start="00:00:13.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and cryptography.""" start="00:00:15.360" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""What is Semgrep?""" start="00:00:16.540" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""What is Semgrep?""" start="00:00:16.540" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""We're a small cybersecurity startup""" start="00:00:17.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""whose core product is a SaaS tool,""" start="00:00:20.040" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is static application security testing.""" start="00:00:21.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""You can think of it as like a security linter.""" start="00:00:24.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Normal linters will say, hey,""" start="00:00:27.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""you wrote ugly code, fix it.""" start="00:00:30.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""We'll say, hey, you wrote a SQL injection, fix that.""" start="00:00:31.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""We support 30+ languages,""" start="00:00:35.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and we have lots of customers all using different IDEs.""" start="00:00:36.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Why does that matter?""" start="00:00:39.320" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""How do we show security bugs early?""" start="00:00:40.720" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""Well, our goal is to show security bugs""" start="00:00:40.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""as early as possible in the development cycle.""" start="00:00:42.780" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""In the industry, we call this shifting left.""" start="00:00:45.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And so how far left can we shift? The editor.""" start="00:00:48.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So that's why it matters""" start="00:00:52.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""that our customers have different editors.""" start="00:00:53.620" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Our goal is to have Semgrep and the editor""" start="00:00:56.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""show up like other language tooling.""" start="00:00:58.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And what I mean by that is I wrote some bad OCaml up here,""" start="00:01:01.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and the editor gave me that red squiggly and said,""" start="00:01:05.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""fix your OCaml, and we want Semgrep to do something similar.""" start="00:01:07.600" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And so our goal then is to provide a similar experience""" start="00:01:12.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""to normal language checking.""" start="00:01:15.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And then since we're a small startup,""" start="00:01:16.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and there's a ton of different IDEs that our customers use,""" start="00:01:19.000" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""ideally, we don't want to have to rewrite a plugin""" start="00:01:22.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""for every single type of editor out there.""" start="00:01:24.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Our other goal is abstract away""" start="00:01:27.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""editing and language features for editors to one code base.""" start="00:01:29.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Ideally, we write it once""" start="00:01:32.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then plug it into all of them.""" start="00:01:33.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So how can we do that, though?""" start="00:01:35.800" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""What is the Language Server Protocol?""" start="00:01:37.880" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""Well, in the process of working on this stuff,""" start="00:01:37.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I found out about""" start="00:01:40.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""the Language Server Protocol.""" start="00:01:43.000" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And what's great about the Language Server Protocol is""" start="00:01:44.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""it's a specification that defines all the ways""" start="00:01:47.280" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""that these language tools might interact""" start="00:01:50.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""with a development tool. And by development tool,""" start="00:01:52.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I mean like VS Code, Sublime, Emacs, any of those.""" start="00:01:56.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And by language tool, I mean something like PyRight, MyPy.""" start="00:02:01.600" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So what's cool about LSP is that""" start="00:02:07.280" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""you can separate out those tools into language servers""" start="00:02:09.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and the development tools into language clients.""" start="00:02:13.000" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And because they share this common specification,""" start="00:02:15.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""they can now interact without knowing each other.""" start="00:02:18.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So it's this great abstraction that means""" start="00:02:20.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""all you have to do is go write one language server""" start="00:02:22.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and you can hook it up to a bunch of language clients""" start="00:02:25.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and it'll just work.""" start="00:02:27.440" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Case study: Rust Analyzer""" start="00:02:29.040" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""So let's do a quick case study on language servers in LSP,""" start="00:02:29.040" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""just so you get an idea of why this is super cool.""" start="00:02:34.040" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So there's this language server called Rust Analyzer.""" start="00:02:37.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It's a language server for the Rust language.""" start="00:02:40.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""If you've ever developed in Rust,""" start="00:02:42.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""you'll know that takes a really long time to compile,""" start="00:02:44.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but the compiler gives you fantastic feedback.""" start="00:02:46.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Rust has a lot of advanced language features,""" start="00:02:50.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""so that feedback is super important for developing.""" start="00:02:52.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And so Rust Analyzer will give you that feedback instantly.""" start="00:02:55.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Here's a ton of things that it gives you.""" start="00:02:58.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Code completion, fixes, compiler errors, warnings,""" start="00:03:01.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""type signatures. Rust has a pretty strong type system.""" start="00:03:05.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It also has this thing called lifetimes.""" start="00:03:08.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""A bunch of advanced language features in Rust Analyzer""" start="00:03:12.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""helps you manage all that""" start="00:03:15.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and gives you all that info""" start="00:03:16.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""without having to wait for it to compile.""" start="00:03:17.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Developing with the Rust Analyzer""" start="00:03:19.220" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""is just orders of magnitude easier""" start="00:03:21.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""than just trying to write Rust straight.""" start="00:03:24.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Rust Analyzer, fantastic. They went and they developed it,""" start="00:03:26.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and now you can go use that in Emacs, NeoVim,""" start="00:03:30.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""VS Code, wherever.""" start="00:03:33.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So you can develop Rust in a way that's relatively efficient""" start="00:03:35.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""without having to give up your favorite editor.""" start="00:03:39.080" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Rust Analyzer in action""" start="00:03:42.760" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""So here's a quick little demo""" start="00:03:42.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""of all the cool things it can do.""" start="00:03:44.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So you can see I typed an error.""" start="00:03:46.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It tells me that I wrote an error.""" start="00:03:48.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I used the incorrect lifetime,""" start="00:03:50.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is some advanced language feature,""" start="00:03:52.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and it'll let me know that.""" start="00:03:54.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I expanded a Rust macro just there,""" start="00:03:55.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is similar to Lisp macros,""" start="00:03:57.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then I ran a single unit test,""" start="00:03:59.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and that's really cool because I ran a single unit test""" start="00:04:01.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""from my editor.""" start="00:04:04.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I didn't have to go and type any commands or anything.""" start="00:04:05.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It just worked.""" start="00:04:07.840" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Why is this useful?""" start="00:04:09.960" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""So why is this just useful in general for a user?""" start="00:04:09.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Well, you get the same experience across editors.""" start="00:04:13.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Like I was saying, you don't have to give up""" start="00:04:15.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""one editor for another""" start="00:04:17.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""so you get some sort of cool language feature.""" start="00:04:18.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""You can easily set up and use language servers""" start="00:04:21.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""made for other editors""" start="00:04:23.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""if developers don't support your editor of choice.""" start="00:04:24.600" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Performance is not dependent on the editor.""" start="00:04:27.860" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""That's fantastic because to do all that Rust stuff,""" start="00:04:31.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""it takes a lot of CPU power,""" start="00:04:35.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and so that's going to be slow""" start="00:04:37.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""if your editor language is not great, not fast.""" start="00:04:40.500" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And then bug fixes, updates, all that,""" start="00:04:43.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""it all comes out at the same time.""" start="00:04:47.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And then from the developer perspective, well,""" start="00:04:50.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""adding new editors is quick and easy.""" start="00:04:53.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""For reference, when I wrote the Semgrep language server,""" start="00:04:55.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""it took me maybe two or three weeks,""" start="00:04:58.700" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but then actually going and setting it up for VS Code,""" start="00:05:00.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""that took an hour. For Emacs, 30 minutes.""" start="00:05:04.000" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""IntelliJ, maybe another hour.""" start="00:05:06.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So it took me a day to add support""" start="00:05:08.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""for three different editors,""" start="00:05:10.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which was I think something like 75% of the market share""" start="00:05:11.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""or something crazy like that.""" start="00:05:14.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So very quick. You only need one mental model.""" start="00:05:16.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""You don't have to figure out""" start="00:05:20.180" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""all these different extension mental models,""" start="00:05:21.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""how those editors work, anything like that.""" start="00:05:23.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And another thing that's cool is""" start="00:05:26.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""you only have to write tests for the language server,""" start="00:05:28.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""not necessarily for the editor.""" start="00:05:30.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It's great to have just one set of tests""" start="00:05:31.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""that you have to pass.""" start="00:05:33.840" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""So what about Emacs?""" start="00:05:36.220" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""So why does a language server protocol matter with Emacs?""" start="00:05:36.220" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Well, like I was saying before,""" start="00:05:40.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Emacs gets the benefit from work put into other editors.""" start="00:05:42.380" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So we get all this language support,""" start="00:05:45.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and no one actually has to go and write the list for it""" start="00:05:47.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""or write those tools specific to Emacs.""" start="00:05:51.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""You get the language tooling,""" start="00:05:53.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""the CPU-intensive part of the editors.""" start="00:05:54.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It can be written in something else.""" start="00:05:56.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Lisp is fast. It's not that fast.""" start="00:05:58.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Having that speed is fantastic. It's all asynchronous.""" start="00:06:01.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It won't slow down Emacs.""" start="00:06:04.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And then there's this package called `lsp-mode`,""" start="00:06:06.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is an LSP client commonly included""" start="00:06:08.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""in popular Emacs distributions.""" start="00:06:11.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So a lot of people already have that.""" start="00:06:13.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""If you're using Emacs 29 or greater, you have `eglot-mode`,""" start="00:06:15.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is a lighter weight version of `lsp-mode`.""" start="00:06:18.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It's just another LSP client.""" start="00:06:21.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""When I wrote the Semgrep language server,""" start="00:06:24.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Emacs 29 hadn't come out yet.""" start="00:06:26.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I'm not going to talk too much about `eglot-mode`""" start="00:06:28.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""because I did everything in `lsp-mode`,""" start="00:06:31.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but I would imagine a lot of this stuff is very similar.""" start="00:06:33.300" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Here's a list of some supported languages.""" start="00:06:37.780" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Technical part - Brief communication overview""" start="00:06:40.700" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""Now let's get into the technical part.""" start="00:06:40.700" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""How does LSP actually work?""" start="00:06:42.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So let's go over how it communicates first.""" start="00:06:45.040" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It uses JSONRPC,""" start="00:06:47.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is just kind of like HTTP,""" start="00:06:49.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but instead of sending plain text, you're sending JSON.""" start="00:06:51.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So it's just sending JSON back and forth.""" start="00:06:54.620" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It's great because it's a way""" start="00:06:56.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""for two programs to communicate""" start="00:06:58.540" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""without sharing a common programming language.""" start="00:06:59.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Transport platform agnostic,""" start="00:07:02.840" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""so it could be stdin, stdout,""" start="00:07:04.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""sockets, whatever. It's just JSON.""" start="00:07:07.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""You can send it over whatever.""" start="00:07:09.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""There's two different types of messages,""" start="00:07:11.140" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""a request, which requires a response from the other party,""" start="00:07:12.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and a notification, which does not expect a response.""" start="00:07:15.840" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So just a quick little example,""" start="00:07:19.260" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""a user might open a document,""" start="00:07:21.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then it'll send like a text document did open""" start="00:07:23.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and what document it was to the language server,""" start="00:07:28.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then they'll change it.""" start="00:07:30.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Maybe they edit some code and introduce a syntax error.""" start="00:07:31.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""The changes will be sent to the language server,""" start="00:07:35.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then the language server will publish diagnostics,""" start="00:07:37.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is those red squigglies""" start="00:07:39.220" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I was talking about earlier,""" start="00:07:41.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and say, hey, syntax error or whatever here,""" start="00:07:42.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""or maybe the user says,""" start="00:07:45.460" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I want to go to the definition of this function,""" start="00:07:46.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then the language server will spit back,""" start="00:07:49.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""hey, this is where that function lives.""" start="00:07:51.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""All very useful,""" start="00:07:53.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and the communication is relatively simple,""" start="00:07:55.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is great.""" start="00:07:57.720" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Example request""" start="00:07:58.760" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""This is what it looks like, what a request looks like.""" start="00:07:58.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Notifications look somewhat similar.""" start="00:08:01.240" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""LSP capabilities""" start="00:08:03.380" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""So now we know how LSP communication works,""" start="00:08:03.380" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but how does the actual protocol work?""" start="00:08:05.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Well, almost all of the protocol is opt-in,""" start="00:08:09.860" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""meaning you don't have to support the entire specification,""" start="00:08:12.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""you can just pick and choose.""" start="00:08:15.840" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Servers and clients will then communicate""" start="00:08:17.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""what part of the protocol they both support,""" start="00:08:19.840" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""so they'll both say, hey,""" start="00:08:21.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""we support being notified when a user opens a document,""" start="00:08:22.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""or if they're looking for documentation.""" start="00:08:26.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And so then once they agree upon what they'll both support,""" start="00:08:28.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""then they'll send that stuff,""" start="00:08:33.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""those notifications and requests back and forth.""" start="00:08:35.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Things like opening and closing files, diagnostics,""" start="00:08:38.580" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""code completion, hovering over stuff, type signatures,""" start="00:08:41.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""all of that. And what's cool is""" start="00:08:46.040" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""even though the specification is huge""" start="00:08:48.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and probably has everything you need,""" start="00:08:50.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""you can go ahead and add custom capabilities""" start="00:08:52.040" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""if you really want to.""" start="00:08:54.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So you can just define a custom method,""" start="00:08:55.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then now that works for you,""" start="00:08:57.980" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and now you can have that in all your editors.""" start="00:09:01.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""For example, Rust Analyzer""" start="00:09:03.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""has structural search and replace,""" start="00:09:04.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is like find and replace,""" start="00:09:06.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but with respect to the structure of the code.""" start="00:09:08.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And if you choose to go down this route""" start="00:09:11.600" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""with the custom capabilities,""" start="00:09:13.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""you do have to remember you're going to have to""" start="00:09:15.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""implement it in every client.""" start="00:09:16.660" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And that's a little bit more work,""" start="00:09:18.700" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but it's better than where we were without LSP.""" start="00:09:20.400" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Tips on writing a LS""" start="00:09:23.380" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""So some quick tips on writing a language server.""" start="00:09:23.380" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I'm not going to get too into this""" start="00:09:25.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""because it's very application-specific.""" start="00:09:27.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I wrote Semgrep's in OCaml""" start="00:09:30.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""since our code base was almost all OCaml already,""" start="00:09:32.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and I wanted to leverage that.""" start="00:09:35.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Would not recommend""" start="00:09:36.600" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""unless you also have a code base all in OCaml.""" start="00:09:38.040" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Structure is similar to a Rust server,""" start="00:09:41.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""so a bunch of independent endpoints.""" start="00:09:43.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I would do everything functionally if I were you.""" start="00:09:45.740" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""This is EmacsConf.""" start="00:09:48.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""We're all hopefully used to writing functional Lisp.""" start="00:09:49.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I would recommend TypeScript or Rust, though,""" start="00:09:53.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""depending on your level of performance""" start="00:09:56.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""that you really need or whatever language""" start="00:09:58.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""you're trying to support ideally.""" start="00:10:00.840" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Most languages have""" start="00:10:02.255" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""some sort of language server protocol already.""" start="00:10:03.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""But if they don't, then it might be easier""" start="00:10:06.500" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""to do it in that language.""" start="00:10:09.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""TypeScript has a lot of support, a lot of documentation,""" start="00:10:10.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""a lot of examples out there""" start="00:10:12.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""because it was what Microsoft originally intended""" start="00:10:14.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""the language server protocol to be for, for VS Code,""" start="00:10:17.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is written in TypeScript.""" start="00:10:20.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Rust is fast, it's going to take more effort,""" start="00:10:22.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but it's very fast, and Rust Analyzer has a great library""" start="00:10:24.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""that they use and that they support.""" start="00:10:28.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So support there, examples there are great.""" start="00:10:30.280" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""The hard part is not really the language server protocol,""" start="00:10:32.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but the actual logic. So, like, if you're doing, like,""" start="00:10:35.840" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""language tooling, you're going to have to do""" start="00:10:39.000" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""analysis on the code, so you need to do parsing,""" start="00:10:40.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""possibly compiling, all these different advanced features,""" start="00:10:42.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""all these advanced different things.""" start="00:10:47.000" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""For example, Rust Analyzer will do incremental compilation,""" start="00:10:48.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is really, really cool,""" start="00:10:52.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but that's, like, a whole separate talk.""" start="00:10:54.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""If you're adapting an existing language tool,""" start="00:10:58.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""this stuff is really easy.""" start="00:11:00.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""You're basically just wiring stuff up.""" start="00:11:01.680" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Supporting a LS through LSP mode in Emacs""" start="00:11:03.480" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""But, yeah. So, now we know all about""" start="00:11:03.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""LSP and language servers.""" start="00:11:08.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Say you want to actually""" start="00:11:10.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""add support for a language server in Emacs.""" start="00:11:11.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""How do you do that? Well, let's look at LSP mode,""" start="00:11:14.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""because, like I said, this is what I'm most familiar with.""" start="00:11:19.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""I'm sure `eglot-mode` is pretty similar.""" start="00:11:21.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So, `lsp-mode`'s repository is on GitHub,""" start="00:11:24.260" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""like everything, and it has a ton of different clients""" start="00:11:27.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""for a ton of different languages and frameworks and tools,""" start="00:11:31.500" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""like Semgrep, and these are available""" start="00:11:34.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""to anyone who installs LSP mode.""" start="00:11:37.040" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Alternatively, you can make a separate package""" start="00:11:39.740" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and just use LSP mode as a library,""" start="00:11:42.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but I'm not going to focus on this,""" start="00:11:43.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""because there's already a ton of resources out there""" start="00:11:45.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""on packaging and Emacs.""" start="00:11:47.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""So, our steps, very quickly, are going to look like""" start="00:11:50.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""adding an Emacs Lisp file that contains some logic,""" start="00:11:54.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""add an entry somewhere, so we added a new client""" start="00:11:58.300" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""to the list of clients, and then do some documentation,""" start="00:12:01.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""because documentation's great.""" start="00:12:03.720" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Create a client""" start="00:12:06.000" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""First, creating a client.""" start="00:12:06.000" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""In the `clients/` folder in `lsp-mode/`,""" start="00:12:07.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""literally just add, like, `lsp-` whatever it is,""" start="00:12:09.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""`require` the library, and register a client.""" start="00:12:12.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Registering a client just means, like,""" start="00:12:15.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""saying what kind of connection it is.""" start="00:12:18.040" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It's most likely going to be standard I/O,""" start="00:12:19.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""because that's pretty easy to implement,""" start="00:12:21.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then you just pass it the executable""" start="00:12:24.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""that you actually want to run.""" start="00:12:26.840" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Say what the activation function is,""" start="00:12:29.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""so this is when the client should start,""" start="00:12:31.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""so you can specify the language""" start="00:12:33.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""or the major mode or whatever,""" start="00:12:36.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and now your client will start whenever that's triggered,""" start="00:12:38.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then finally provide just a server ID,""" start="00:12:43.100" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""so that way it's easy to keep track of,""" start="00:12:45.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then run this LSP consistency check function.""" start="00:12:48.580" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""This just makes sure everything up there is good.""" start="00:12:52.760" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""You can do more advanced stuff with making an LSP client""" start="00:12:56.580" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""that I'm not going to get into,""" start="00:12:59.520" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but just know that these aren't your only options,""" start="00:13:01.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then finally provide your client.""" start="00:13:03.800" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Add to list of client packages""" start="00:13:07.300" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""Next, you just have to add your client""" start="00:13:07.300" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""to the list of clients that `lsp-mode` supports,""" start="00:13:09.800" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and now you've added support for a whole new language,""" start="00:13:12.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""whole new framework, whole new tool to Emacs,""" start="00:13:15.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and it's taking you, what, like, what is that,""" start="00:13:17.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""20 lines of Lisp? No, not even, like, 15.""" start="00:13:20.220" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""15 lines of Lisp, whole new language for Emacs.""" start="00:13:23.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It's really exciting. Now that you have your client,""" start="00:13:26.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""let's do some documentation. Go fill out this, like, name,""" start="00:13:31.600" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""where the repository, the source code is,""" start="00:13:35.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""because free software is great,""" start="00:13:37.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and you should open source your stuff.""" start="00:13:39.600" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Specify the installation command.""" start="00:13:42.180" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""What's cool about this is""" start="00:13:44.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""this can be run automatically from Emacs,""" start="00:13:45.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""so if it's, like, `pip install pyright`, right,""" start="00:13:48.060" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""you can put that there, and Emacs will ask you,""" start="00:13:50.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""do you want to install the language server,""" start="00:13:53.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and you can hit yes""" start="00:13:55.280" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and users will just have it installed for them,""" start="00:13:56.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and then you can say whether or not it's a debugger.""" start="00:13:59.540" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""This is completely separate,""" start="00:14:01.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""so there's this thing called DAP,""" start="00:14:03.160" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is the debugger adapter protocol,""" start="00:14:05.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and it's similar to LSP but for debuggers,""" start="00:14:07.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""which is very cool,""" start="00:14:09.680" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Add documentation!""" start="00:14:11.680" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""and then finally link to your documentation.""" start="00:14:11.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Please, please document your stuff.""" start="00:14:14.600" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Adding commands and custom capabilities""" start="00:14:17.880" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""If you want to add, like, a custom Emacs function""" start="00:14:17.880" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""or custom capabilities, it's super easy.""" start="00:14:20.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It's literally just, like, calling a normal Emacs function.""" start="00:14:22.680" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""For example, Semgrep normally only scans files""" start="00:14:27.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""when you open them, but we added a Emacs function""" start="00:14:30.560" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""that will scan your entire project, right,""" start="00:14:34.200" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and so that was just a client notification.""" start="00:14:36.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It was just `lsp-notify` and then a custom method,""" start="00:14:40.960" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and it's great because now you can just scan your project""" start="00:14:44.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""from a simple Emacs function.""" start="00:14:46.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Requests, very similar to notifications.""" start="00:14:48.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""You send it and then pass it a lambda""" start="00:14:52.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and do something with the result,""" start="00:14:56.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and so that's adding custom capabilities.""" start="00:14:58.460" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template new="1" text="""Thanks for listening""" start="00:15:01.360" video="mainVideo-lspocaml" id="subtitle"]]
+
+[[!template text="""That's pretty much it. Thank you for listening.""" start="00:15:01.360" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Some resources here.""" start="00:15:04.320" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""These links are clickable if you get the PDF,""" start="00:15:05.640" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""if you get the slides. Semgrep: we're hiring!""" start="00:15:08.240" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""If you want to work on, like,""" start="00:15:10.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""programming language theory stuff,""" start="00:15:12.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""compilers, parsers, editors,""" start="00:15:13.720" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""email me or go look at our jobs.""" start="00:15:18.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""The LSP specification, this is, like, the holy Bible.""" start="00:15:22.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It has all the specs, all the types, everything.""" start="00:15:25.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""`lsp-mode` and the docs.""" start="00:15:28.340" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""`lsp-mode`, right, that's where you want to add your client.""" start="00:15:30.420" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""The docs are great, super useful.""" start="00:15:33.280" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""Rust Analyzer is just a great reference""" start="00:15:36.100" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""for language servers in general""" start="00:15:38.080" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""if you want to write one or if you just want to, like,""" start="00:15:39.920" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""see how they work. It's all just really well done.""" start="00:15:42.120" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""It's great code, very readable.""" start="00:15:45.400" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""And then down here is just a long video tutorial,""" start="00:15:47.040" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""a longer video tutorial, not by me,""" start="00:15:50.480" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""by someone else, on how to add a language client to Emacs,""" start="00:15:54.700" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""but hopefully this is sufficient for y'all,""" start="00:15:58.440" video="mainVideo-lspocaml" id="subtitle"]]
+[[!template text="""and now it's time for some Q&A.""" start="00:16:01.480" video="mainVideo-lspocaml" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+<a name="lspocaml-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: I would invite all on the,""" start="00:00:03.540" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""who are currently watching,""" start="00:00:04.600" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""who have questions, put them into the pad""" start="00:00:06.819" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""that I can ask them. I'm kind of monitoring""" start="00:00:08.940" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""the IRC concurrently. So the first question""" start="00:00:16.320" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""that we have on the pad is concerning why you""" start="00:00:18.640" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""have switched from OCaml.""" start="00:00:19.600" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Maybe the person has missed it in the talk,""" start="00:00:22.420" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""if you've mentioned it.""" start="00:00:23.480" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Why have you switched from OCaml to,""" start="00:00:25.080" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""in this case, I guess,""" start="00:00:25.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Rust?""" start="00:00:26.180" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I mentioned like with writing a""" start="00:00:30.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""language server that I wrote mine for my""" start="00:00:34.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""company in OCaml But I wouldn't recommend it""" start="00:00:36.900" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""just in general unless like you're doing""" start="00:00:38.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""something specific with OCaml And the reason""" start="00:00:41.720" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""for that and I recommended Rust or like""" start="00:00:44.180" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""TypeScript is like OCaml is great.""" start="00:00:45.780" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""It's very performant but it's cross""" start="00:00:49.080" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""compilation story is not great.""" start="00:00:50.739" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""It's like really hard to cross compile like""" start="00:00:54.100" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""from 1 platform to another.""" start="00:00:55.840" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And then like the ecosystem and its standard""" start="00:00:58.120" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""library is also not great.""" start="00:01:00.380" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And like Rust, its cross compilation is""" start="00:01:03.460" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""great. Its ecosystem is great.""" start="00:01:05.820" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""OCaml is great if you need to use it,""" start="00:01:08.720" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""but it's just it's not ideal.""" start="00:01:10.880" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And there's just also no good examples of a""" start="00:01:14.220" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""language server in OCaml.""" start="00:01:15.240" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""There's the official like OCaml language""" start="00:01:19.119" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""server, But they use a ton of super advanced""" start="00:01:22.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""language features, like module functors and a""" start="00:01:27.380" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""bunch of other random stuff.""" start="00:01:28.440" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So it's not really readable.""" start="00:01:29.479" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""But Rust, there's Rust analyzer,""" start="00:01:31.860" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""which is readable. In TypeScript,""" start="00:01:33.340" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""there's like a million different ones.""" start="00:01:34.860" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So it's less of a, not OCaml is like,""" start="00:01:39.340" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""it's not that OCaml isn't great.""" start="00:01:40.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""It's more of a, these other languages would""" start="00:01:43.320" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""probably just be easier.""" start="00:01:44.160" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So.""" start="00:01:45.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: I guess since the integration to,""" start="00:01:48.619" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""for example, like NeoVim or some other""" start="00:01:50.820" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""editors are just revenue fine because of the""" start="00:01:53.320" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sorry, can you say that again?""" start="00:01:56.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: LSP, I guess. The LSP,""" start="00:01:58.580" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""so it's a standard LSP specification that""" start="00:02:01.979" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""you're using. So you can also,""" start="00:02:03.080" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""for instance, use it and other editors,""" start="00:02:04.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like for instance, new them or so.""" start="00:02:06.660" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. Yeah. You can use it.""" start="00:02:08.680" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""It's most, most editors nowadays support it.""" start="00:02:11.680" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Like obviously Emacs, NeoVim,""" start="00:02:13.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Sublime, VS code, Intel,""" start="00:02:16.420" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""all the IntelliJ ones.""" start="00:02:17.700" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So yeah, that's, that's the fun part.""" start="00:02:21.560" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""You don't have to write 10 different""" start="00:02:23.440" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""languages to get a bunch of editor support.""" start="00:02:26.500" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: Also experience writing it.""" start="00:02:30.200" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So I didn't have really time to hear into""" start="00:02:33.820" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""your talk. So I'm sorry if I ask you""" start="00:02:36.300" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""questions that you have already said.""" start="00:02:38.100" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""How was the experience of writing an LSP?""" start="00:02:41.400" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So have you any knowledge beforehand or do""" start="00:02:44.340" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""you just read it all on yourself?""" start="00:02:45.600" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, there's not a ton of documentation,""" start="00:02:49.200" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""which is what motivated me to do this talk.""" start="00:02:53.440" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Basically, I just looked at the""" start="00:02:56.380" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""specification, and I knew Rust Analyzer was""" start="00:02:58.820" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""cool. And so I looked at Rust Analyzer,""" start="00:03:00.240" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""and I looked at PyRite.""" start="00:03:01.600" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And I just went from there.""" start="00:03:04.200" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I found out about all this because I already""" start="00:03:07.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""using Emacs, I already knew about it.""" start="00:03:10.240" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I was like, this is going to be easier than""" start="00:03:12.160" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""something else. So yeah,""" start="00:03:15.020" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""there's the experience is fine.""" start="00:03:17.720" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""It's just a lot of wiring stuff up.""" start="00:03:21.060" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""It's not a lot of like hard thinking until""" start="00:03:24.100" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""you get to like performance heavy stuff.""" start="00:03:26.200" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Like, so for some graph,""" start="00:03:27.740" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like we're doing a ton of like code parsing""" start="00:03:30.760" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""and like analyzing. And so that's,""" start="00:03:32.980" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""it takes up like a ton of processing power.""" start="00:03:35.760" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So like for stuff like that,""" start="00:03:37.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like now you have to think about caching and""" start="00:03:39.620" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like ordering things. So that part's hard,""" start="00:03:43.980" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""but that's more of a, like very much""" start="00:03:47.180" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""application specific thing.""" start="00:03:48.640" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. Anything in the IRC chat.""" start="00:03:58.320" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I think not. It's nothing I can see.""" start="00:04:01.840" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""No questions, that's kind of odd to be""" start="00:04:13.380" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""honest. I cannot really ask questions""" start="00:04:17.440" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""concerning LSP specific.""" start="00:04:18.680" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, no worries.""" start="00:04:22.400" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: Good question, what could be asked?""" start="00:04:31.460" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Let's call, let's ask something very""" start="00:04:35.740" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""unspecific concerning the Emacs usage.""" start="00:04:38.260" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And when have you started?""" start="00:04:39.340" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""How did you came through it and stuff like""" start="00:04:41.580" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""this?""" start="00:04:41.780" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. I like and when I was in high school,""" start="00:04:46.560" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""me and my friends just were like,""" start="00:04:48.480" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""got obsessed with Linux for whatever reason.""" start="00:04:51.820" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And then like we traveled down like the,""" start="00:04:53.940" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like the free software,""" start="00:04:55.560" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like we just thought that was like very""" start="00:04:57.700" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""entertaining and like interesting to read""" start="00:05:00.040" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""about all the free software stuff.""" start="00:05:01.200" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""They were like, yeah, that's cool.""" start="00:05:03.120" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And so we all started using Linux.""" start="00:05:04.540" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And I'm like, well, if I'm using free""" start="00:05:06.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""software, I'm going to use Emacs.""" start="00:05:08.300" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And so I started using Emacs just to try it""" start="00:05:12.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""out. And then I kind of got,""" start="00:05:13.940" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I feel like, Stockholm syndrome into it.""" start="00:05:16.880" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And now I've realized like,""" start="00:05:18.720" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I don't know, now that I've done the like""" start="00:05:21.860" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""actual work to get into Emacs,""" start="00:05:23.880" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""it's just, there's so much more I can do with""" start="00:05:26.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""it. But yeah, it was somewhat unintentional.""" start="00:05:30.300" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: I probably have the same course I've started""" start="00:05:36.100" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like 2 years ago using Emacs.""" start="00:05:37.780" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And also just, oh, there's at first some cool""" start="00:05:42.720" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""people on YouTube, so systems crafters and""" start="00:05:45.020" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""people like this. And also,""" start="00:05:46.300" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""ah, VS Code, I used a lot of VS Code""" start="00:05:49.440" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""beforehand and then VS Codium because open""" start="00:05:53.560" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""source and then oh are there any other""" start="00:05:55.640" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""alternatives and I came to like Neovim and""" start="00:05:58.020" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Emacs and often switching around but I stick""" start="00:06:01.160" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""to Emacs at some point to be honest.""" start="00:06:03.220" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I think Emacs also just looks really""" start="00:06:07.180" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""cool. I will say that.""" start="00:06:08.500" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And also just like I like Vim.""" start="00:06:14.240" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Vim is cool but like being able to like write""" start="00:06:16.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""lists and like modify your editor on the fly""" start="00:06:19.240" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""is just like very appealing to me.""" start="00:06:20.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I don't know, Emacs was tough at first""" start="00:06:23.860" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""because like all the like default key""" start="00:06:25.520" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""bindings are just kind of like and then and""" start="00:06:28.380" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""then I read somewhere someone was like yeah""" start="00:06:29.860" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""well Richard Stallman uses evil mode so it's""" start="00:06:33.220" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""okay. I was like alright I can that's like""" start="00:06:36.220" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""blessing enough for me Like I'm just gonna""" start="00:06:38.000" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""switch to evil mode. And I was like,""" start="00:06:39.520" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""this is way, way better as far as key""" start="00:06:42.160" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""bindings go.""" start="00:06:42.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: Kind of relates. So I switched for,""" start="00:06:46.720" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I think, half a year to the default key""" start="00:06:49.900" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""bindings from Vim beforehand.""" start="00:06:51.300" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I switched back to Evil and now I'm losing""" start="00:06:54.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""some kind of hybrid styles.""" start="00:06:56.100" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""It's kind of weird. But we have a question on""" start="00:07:01.000" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""the pad. So what are the corner cases,""" start="00:07:03.260" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""limitations, and other issues you encountered""" start="00:07:05.380" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""in implementing an LSP server with client in""" start="00:07:08.860" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Emacs that were surprising?""" start="00:07:09.940" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I would say the corner cases and""" start="00:07:13.680" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""limitations are definitely like,""" start="00:07:15.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""once again, they're going to be very""" start="00:07:16.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""application specific, but it's usually just""" start="00:07:18.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""the performance part. So like I was saying""" start="00:07:22.420" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""before, right, in general if you're doing""" start="00:07:24.680" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""language tooling, you're gonna be doing""" start="00:07:26.120" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""either parsing or interpreting or something""" start="00:07:29.760" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like that, which is very just like""" start="00:07:31.560" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""computationally heavy and so if you're trying""" start="00:07:34.740" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""to like do that stuff while someone is""" start="00:07:36.900" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""editing a file right like every keystrokes""" start="00:07:38.520" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""every like 1 to 2 seconds if they have a fast""" start="00:07:42.660" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""computer that's great but a lot of people""" start="00:07:44.240" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""don't have like that fast of a computer that""" start="00:07:46.400" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""they can go and like do compilation every""" start="00:07:49.480" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""single keystroke. So like,""" start="00:07:51.680" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I would say, I would say the like limitation""" start="00:07:54.080" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""is just how fast your computer is and how""" start="00:07:56.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""good you are at like implementing caching for""" start="00:07:59.140" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like whatever you're doing.""" start="00:08:01.020" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""That's also just the main issues I've run""" start="00:08:04.080" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""into is just it's a constant uphill battle.""" start="00:08:08.080" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""People will somehow find larger and larger""" start="00:08:12.120" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""files. You'll end up with files that are like""" start="00:08:14.580" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""thousands, like tens of thousands of lines""" start="00:08:17.320" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""long and you think yeah,""" start="00:08:18.700" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""surely no 1 would expect like instantaneous""" start="00:08:21.340" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""response for like like editing a file that""" start="00:08:25.440" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""has like tens of thousands of lines,""" start="00:08:26.820" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""but then they do. As far as corner cases go,""" start="00:08:30.000" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I would say the corner case is like,""" start="00:08:31.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""just in general is actually distributing the""" start="00:08:37.760" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""language server. Cause like writing the""" start="00:08:41.039" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""language server is fine.""" start="00:08:42.340" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Like wiring everything up is fine.""" start="00:08:44.540" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""But then like, once you actually have to go""" start="00:08:47.180" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""and distribute it, well,""" start="00:08:47.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""now you're distributing in a binary.""" start="00:08:49.200" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Like I was saying before with OCaml,""" start="00:08:51.660" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""doesn't have great cross compilation.""" start="00:08:53.940" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So for some graph for our language server,""" start="00:08:58.840" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""we target Linux and Mac OS,""" start="00:09:01.560" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""and we have a ton of people who use Windows,""" start="00:09:03.840" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""but compiling OCaml for Windows is basically""" start="00:09:06.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""impossible. So our corner case there,""" start="00:09:10.080" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""the way we solved it was now we're""" start="00:09:11.980" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""transpiling OCaml to JavaScript,""" start="00:09:14.160" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""which is a huge can of worms.""" start="00:09:17.080" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Like it's a lot of fun.""" start="00:09:18.840" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""It's very interesting,""" start="00:09:19.400" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""but like it's not ideal.""" start="00:09:22.860" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And so that's what I was saying before.""" start="00:09:24.340" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I recommend like Rust or TypeScript because""" start="00:09:26.360" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""those are way more portable and a lot easier""" start="00:09:29.580" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""to install. And you don't have to worry about""" start="00:09:31.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""any of that weird packaging stuff.""" start="00:09:33.600" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So yeah, I would say that's like the main""" start="00:09:37.600" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""corner case and the main limitation is just""" start="00:09:40.260" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""speed and caching.""" start="00:09:41.720" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: You mentioned this obscure large file so""" start="00:09:47.160" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""someone doesn't want to refactor or""" start="00:09:49.000" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""something. How did you start?""" start="00:09:51.760" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So did you have any way to still be""" start="00:09:54.480" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""relatively performant when they have big""" start="00:09:56.320" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""files or is it just not supported?""" start="00:09:58.020" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I don't care.""" start="00:09:58.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, no, we, so we support larger files now""" start="00:10:03.140" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And the way we ended up doing that,""" start="00:10:05.460" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""so SemGrep is like you write this generic""" start="00:10:11.480" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""pattern. You kind of write the language,""" start="00:10:14.540" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""but then there's these other symbols and""" start="00:10:17.160" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""stuff that are included in that,""" start="00:10:18.760" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""this like meta language.""" start="00:10:19.760" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And so what happens is,""" start="00:10:22.420" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""is most languages get,""" start="00:10:23.600" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""they get parsed and then into a syntax tree,""" start="00:10:27.720" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""right? Like whatever the language is syntax""" start="00:10:29.180" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""tree is, and then they get,""" start="00:10:30.620" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""the syntax tree gets converted into this,""" start="00:10:33.800" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like, we call it like an abstract syntax""" start="00:10:35.860" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""tree, which is like abstract from like any,""" start="00:10:38.080" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like languages specific syntax tree.""" start="00:10:39.860" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And so then we can cache that,""" start="00:10:41.940" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""which is really good because like if someone""" start="00:10:44.480" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""types something like we don't have to go""" start="00:10:47.700" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""through and do like the full parsing and like""" start="00:10:50.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""converting, we only have to do it""" start="00:10:51.560" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""incrementally. And so that's,""" start="00:10:54.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""that's how we dealt with that.""" start="00:10:56.100" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Or the other option is that we just,""" start="00:10:58.140" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""we just cache whatever the previous results""" start="00:11:00.720" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""are, and then run it asynchronously,""" start="00:11:03.460" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""and they might get it delayed.""" start="00:11:04.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""But we've ended up doing more AST caching,""" start="00:11:08.200" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""which is fun and cool.""" start="00:11:09.880" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: Sounds good. So we have here a question from""" start="00:11:15.600" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Blaine. If Eaglet is a subset of LSP mode,""" start="00:11:18.240" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""can EGLOT conflict with LSP mode if both are""" start="00:11:21.680" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""present in your initial .el""" start="00:11:23.400" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""file?""" start="00:11:24.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, so I haven't played around with EGLOT""" start="00:11:27.740" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""mode a ton, so I'm not 100% sure.""" start="00:11:30.580" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I think all of the key bindings and commands,""" start="00:11:33.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""if you just install it out of the box,""" start="00:11:36.320" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I Think they're different.""" start="00:11:39.020" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So I don't think there's like any like""" start="00:11:41.440" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""overlap as far as that stuff goes but you""" start="00:11:44.760" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""will have the overlap of like you entered,""" start="00:11:47.520" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like you started a major mode for like some""" start="00:11:49.780" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""language, like they'll both probably start""" start="00:11:51.500" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""the language server and provide diagnostics""" start="00:11:53.040" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""and everything. And so then now you're""" start="00:11:55.320" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""getting like, you're just like doubling the""" start="00:11:58.180" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""work your computer is doing.""" start="00:11:59.340" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So there's that conflict.""" start="00:12:00.480" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""But if you prefer EGLOT mode or LSP mode for""" start="00:12:04.160" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like 1 language or framework,""" start="00:12:05.200" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like 1 major mode and LSP mode for the other,""" start="00:12:09.060" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I think you should be fine.""" start="00:12:10.600" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: All right. Just to let you know,""" start="00:12:14.680" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""we have like 1 minute on the stream and then""" start="00:12:20.460" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""we'll switch back and to the pre-recorded""" start="00:12:22.540" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""stuff I guess.""" start="00:12:24.000" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah yeah yeah let's hi sorry for the rude""" start="00:12:27.440" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""interruption but I'm just doing a little bit""" start="00:12:29.440" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""of time keeping so thank you so much Austin""" start="00:12:31.700" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""sadly I wasn't able to follow the Q&A because""" start="00:12:34.340" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I was in the other track answering questions.""" start="00:12:36.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""If, Austin, you want to stay and answer some""" start="00:12:39.960" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""more questions, feel free to do so.""" start="00:12:41.580" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""People tend to start talking as soon as we go""" start="00:12:45.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""off air, And I wouldn't be surprised with LSP""" start="00:12:48.400" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""that people would do the same.""" start="00:12:49.540" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""We're gonna move on for this track.""" start="00:12:52.800" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""We're gonna move on in 20 seconds to the next""" start="00:12:54.840" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""1. So Floey, thank you for hosting.""" start="00:12:56.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Austin, thank you for all your answers.""" start="00:12:58.680" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And We'll see you in a bit.""" start="00:13:01.460" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool. Thanks. See you.""" start="00:13:04.740" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thanks for the Q&A.""" start="00:13:06.700" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 2]: All right. All right. You are now off air.""" start="00:13:10.120" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Thank you so much, Austin.""" start="00:13:11.400" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""I'm going to go back running in the""" start="00:13:13.100" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""background. And thank you,""" start="00:13:13.940" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Flowey, for everything.""" start="00:13:14.700" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: And thanks. Yeah. Have a nice,""" start="00:13:20.900" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""probably a nice day at your work.""" start="00:13:23.160" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, no worries. Yeah.""" start="00:13:24.140" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Yeah, it's still it's like lunchtime for me.""" start="00:13:26.380" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: So okay, here, it's like,""" start="00:13:28.100" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""09:00. 9pm. Thanks for the talk.""" start="00:13:34.380" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Sorry for the inconvenience was not having""" start="00:13:36.300" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""any, any questions, really.""" start="00:13:37.540" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: So yeah. Oh yeah, no worries.""" start="00:13:39.000" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""It's like, there's like no documentation on""" start="00:13:41.100" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""any of this stuff. So I didn't really expect""" start="00:13:42.940" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""any.""" start="00:13:43.380" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I was kind of interested when I jumped""" start="00:13:47.220" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""into NeoVim. I write it 1 or 2 things on my""" start="00:13:51.000" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""own, but never really got really deep into""" start="00:13:53.140" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""it. And you're gonna see with like compiler""" start="00:13:54.520" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""design and stuff like this,""" start="00:13:55.920" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""but not really specific.""" start="00:13:57.400" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""So I was""" start="00:13:58.320" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: kind of- Yeah, that's the hard part.""" start="00:14:00.860" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""It's like, it's, LSP is cool,""" start="00:14:02.440" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""but then you have to like deal with all the""" start="00:14:05.020" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""like compiler stuff and programming language""" start="00:14:06.760" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""theory.""" start="00:14:07.200" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: So yeah. So it's, it shouldn't be too""" start="00:14:10.600" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""complicated. I had not really a question,""" start="00:14:13.280" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""so, but it worked out fine.""" start="00:14:14.700" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Thanks for the Q and A.""" start="00:14:16.500" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""And if I have any questions to Oak Hamill,""" start="00:14:18.560" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""Elderspeak will get an email from you.""" start="00:14:20.640" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh yeah, definitely.""" start="00:14:21.560" video="qanda-lspocaml" id="subtitle"]]
+[[!template text="""[Speaker 0]: Dan?""" start="00:14:23.500" video="qanda-lspocaml" id="subtitle"]]
+
+Questions or comments? Please e-mail [austin@cutedogs.org](mailto:austin@cutedogs.org?subject=Comment%20for%20EmacsConf%202023%20lspocaml%3A%20Writing%20a%20language%20server%20in%20OCaml%20for%20Emacs%2C%20fun%2C%20and%20profit)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/lspocaml-before.md b/2023/info/lspocaml-before.md
new file mode 100644
index 00000000..d3f225c8
--- /dev/null
+++ b/2023/info/lspocaml-before.md
@@ -0,0 +1,38 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 17-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="lspocaml-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="lspocaml-mainVideo" data="""
+00:00.000 Introduction
+00:16.540 What is Semgrep?
+00:40.720 How do we show security bugs early?
+01:37.880 What is the Language Server Protocol?
+02:29.040 Case study: Rust Analyzer
+03:42.760 Rust Analyzer in action
+04:09.960 Why is this useful?
+05:36.220 So what about Emacs?
+06:40.700 Technical part - Brief communication overview
+07:58.760 Example request
+08:03.380 LSP capabilities
+09:23.380 Tips on writing a LS
+11:03.480 Supporting a LS through LSP mode in Emacs
+12:06.000 Create a client
+13:07.300 Add to list of client packages
+14:11.680 Add documentation!
+14:17.880 Adding commands and custom capabilities
+15:01.360 Thanks for listening
+
+"""]]<div></div>Duration: 16:04 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.opus">Download --main.opus (8.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault.pdf">Download .pdf (87MB)</a></li><li><a href="https://toobnix.org/w/jgMzmGyx4H1YDwc5n1eRZu">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="lspocaml-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="lspocaml-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus"></audio></div><div></div>Duration: 14:24 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus">Download --answers.opus (8.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm">Download --answers.webm (23MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/lspocaml-nav.md b/2023/info/lspocaml-nav.md
new file mode 100644
index 00000000..a705e389
--- /dev/null
+++ b/2023/info/lspocaml-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/hyperdrive">hyperdrive.el: Peer-to-peer filesystem in Emacs</a>
+Next by track: <a href="/2023/talks/test">What I learned by writing test cases for GNU Hyperbole</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/matplotllm-after.md b/2023/info/matplotllm-after.md
new file mode 100644
index 00000000..2471df19
--- /dev/null
+++ b/2023/info/matplotllm-after.md
@@ -0,0 +1,227 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="matplotllm-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-matplotllm" id="subtitle"]]
+
+[[!template text="""Hi, my name is Abhinav and I'm going to talk about""" start="00:00:00.000" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""this tool that I've been working on called MatplotLLM.""" start="00:00:03.040" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""MatplotLLM is a natural language interface""" start="00:00:06.200" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""over matplotlib, which is a library I use a lot""" start="00:00:09.520" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""for making visualizations.""" start="00:00:12.480" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""It's a pretty common Python library used a lot everywhere""" start="00:00:14.440" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""where there's need of plotting and graphing.""" start="00:00:18.680" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I usually use it in reports.""" start="00:00:22.480" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Whenever I'm writing a report in org mode,""" start="00:00:25.360" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I tend to write a code block which is in Python.""" start="00:00:27.360" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""And then that code block has usage of matplotlib""" start="00:00:31.560" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""to produce some reports.""" start="00:00:34.080" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""That works really well.""" start="00:00:36.000" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""But at times what happens is""" start="00:00:38.320" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I have to make a very custom graph, let's say.""" start="00:00:40.000" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""And then while I'm writing a report,""" start="00:00:43.960" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""it's kind of a huge leap of abstraction""" start="00:00:46.920" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""when I'm working on text""" start="00:00:50.680" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""versus going into actual low-level matplotlib code""" start="00:00:51.520" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""to do that graphing.""" start="00:00:54.880" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So that's something I don't want to do.""" start="00:00:56.240" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Here's an example.""" start="00:00:59.680" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""This is a graph which is... I think it was made""" start="00:01:00.480" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""like five or six years back.""" start="00:01:04.000" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""And then there are some common things""" start="00:01:05.840" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""like scatter plot here,""" start="00:01:08.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""the dots that you can see here scattered.""" start="00:01:09.960" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Then... But there are a few things which, to do them,""" start="00:01:12.240" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""to make them, you will actually have to go--at least me,""" start="00:01:16.280" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I have to go to the documentation""" start="00:01:19.160" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""and figure out how to do it. Which is fine,""" start="00:01:20.840" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""but I don't want to do this, you know,""" start="00:01:24.120" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""spend so much time here, when I'm working on""" start="00:01:26.520" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""a tight deadline for a report.""" start="00:01:29.200" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""That's the motivation for this tool.""" start="00:01:32.320" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""This tool basically allows me""" start="00:01:33.920" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""to get rid of the complexity of the library""" start="00:01:35.200" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""by working via an LLM.""" start="00:01:38.480" video="mainVideo-matplotllm" id="subtitle"]]
+
+[[!template new="1" text="""What is an LLM?""" start="00:01:40.720" video="mainVideo-matplotllm" id="subtitle"]]
+
+[[!template text="""So an LLM is a large language model.""" start="00:01:40.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""These are models which are""" start="00:01:43.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""trained to produce text, generate text.""" start="00:01:45.080" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""And just by doing that,""" start="00:01:49.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""they actually end up learning a lot of common patterns.""" start="00:01:51.520" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""For example, if you ask a question,""" start="00:01:55.080" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""you can actually get a reasonable response.""" start="00:01:56.800" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""If you ask to write a code for something,""" start="00:01:58.920" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""you'll actually get code""" start="00:02:00.760" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""which can also be very reasonable.""" start="00:02:01.880" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So this tool is basically a wrapper""" start="00:02:04.760" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""that uses an LLM. For the current version,""" start="00:02:06.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""we use GPT-4, which is OpenAI's model.""" start="00:02:11.000" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""It's not open in the sense of open source.""" start="00:02:13.920" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So that's a problem that it has.""" start="00:02:17.920" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""But for this version, we are going to use that.""" start="00:02:21.120" video="mainVideo-matplotllm" id="subtitle"]]
+
+[[!template new="1" text="""Using this library""" start="00:02:23.600" video="mainVideo-matplotllm" id="subtitle"]]
+
+[[!template text="""Using this library is pretty simple.""" start="00:02:23.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""You basically require the library""" start="00:02:25.480" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""and then you set up your OpenAI API key here.""" start="00:02:27.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Then you get a code block""" start="00:02:30.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""where you can specify the language as `matplotllm`.""" start="00:02:33.360" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""And then what you can do is,""" start="00:02:35.760" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""you can basically describe what you want""" start="00:02:38.280" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""in natural language.""" start="00:02:40.800" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I'll take this example of this data set.""" start="00:02:41.800" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""It's called the Health and Wealth of Nations.""" start="00:02:45.280" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I think that was""" start="00:02:48.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""the name of a visualization where it was used.""" start="00:02:49.640" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""This is basically life expectancy,""" start="00:02:51.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""GDP of various countries starting from 1800.""" start="00:02:53.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I think it goes up to 2000 somewhere.""" start="00:02:59.280" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So earlier, I would try to write code which reads this CSV""" start="00:03:02.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""and then does a lot of matplotlib stuff""" start="00:03:07.480" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""and then finally produces a graph.""" start="00:03:09.840" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""But with this tool, what I'll do is""" start="00:03:11.680" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I'll just provide instructions in two forms.""" start="00:03:13.880" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So the first thing I'll do is""" start="00:03:17.680" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I'll just describe how the data looks like.""" start="00:03:18.880" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So I'll say data is in a file called `data.csv`,""" start="00:03:21.360" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""which is this file, by the way, on the right.""" start="00:03:29.040" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""It looks like the following.""" start="00:03:33.160" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I just pasted a few lines from the top, which is enough.""" start="00:03:39.800" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Since it's a CSV, there's already a structure to it.""" start="00:03:44.360" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""But let's say if you have a log file""" start="00:03:47.120" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""where there's more complexities to be parsed and all,""" start="00:03:50.080" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""that also works out really well.""" start="00:03:53.760" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""You just have to describe how the data looks like""" start="00:03:55.040" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""and the system will figure out how to work with this.""" start="00:03:58.080" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Now, let's do the plotting. So what I can do is...""" start="00:04:01.160" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Let's start from a very basic plot""" start="00:04:06.405" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""between life expectancy and GDP per capita.""" start="00:04:09.560" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I'll just do this.""" start="00:04:11.621" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""&quot;Can you make a scatter plot""" start="00:04:13.801" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""for life expectancy and GDP per capita?&quot;""" start="00:04:17.281" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Now, you can see there are some typos,""" start="00:04:26.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""and probably there will be some grammatical mistakes""" start="00:04:29.640" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""also coming through.""" start="00:04:31.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""But that's all OK, because the models are supposed to""" start="00:04:32.920" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""handle those kinds of situations really well.""" start="00:04:37.120" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So I send the request to the model.""" start="00:04:40.560" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Since it's a large model--GPT-4 is really large--""" start="00:04:43.240" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""it actually takes a lot of time to get the response back.""" start="00:04:47.120" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So this specific response took 17 seconds,""" start="00:04:50.520" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""which is huge.""" start="00:04:53.360" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""It's not something you would expect""" start="00:04:54.240" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""in a local file running on a computer.""" start="00:04:57.440" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""But I've got what I wanted. Right.""" start="00:04:59.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So there's a scatter plot here, as you can see below,""" start="00:05:01.880" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""which is plotting what I specified it to do,""" start="00:05:04.120" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""though it looks a little dense.""" start="00:05:08.880" video="mainVideo-matplotllm" id="subtitle"]]
+
+[[!template new="1" text="""Further instructions""" start="00:05:11.701" video="mainVideo-matplotllm" id="subtitle"]]
+
+[[!template text="""What I can do is""" start="00:05:11.701" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I can provide further instructions as feedback.""" start="00:05:12.641" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I try to feed back on this. So I can say,""" start="00:05:16.001" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""&quot;Can you only show points where year is the multiple of 50?&quot;""" start="00:05:18.401" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So since it's starting from 1800, the data points,""" start="00:05:30.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""there are too many years,""" start="00:05:33.520" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""so I'll just try to thin them down a little.""" start="00:05:34.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Now what's happening in the background""" start="00:05:37.240" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""is that everything below this last instruction""" start="00:05:40.200" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""is going out as the context to the model""" start="00:05:42.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""along with the code that it wrote till now.""" start="00:05:45.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""And then this instruction is added on top of it""" start="00:05:47.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""so that it basically modifies the code to make it work""" start="00:05:50.080" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""according to this instruction.""" start="00:05:53.080" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""As you can see now, the data points are much fewer.""" start="00:05:55.080" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""This is what I wanted also.""" start="00:05:58.440" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Let's also do a few more things.""" start="00:06:01.520" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I want to see the progression through time.""" start="00:06:02.800" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So maybe I'll do something like, color more recent years""" start="00:06:05.440" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""with a darker shade of...""" start="00:06:13.080" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Let's change the color map also.""" start="00:06:15.440" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Now, this again goes back to the model.""" start="00:06:21.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Again, everything below before this line""" start="00:06:24.160" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""is the context along with the current code,""" start="00:06:26.800" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""and then this instruction is going to the model""" start="00:06:29.120" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""to make the changes. So now this should happen, I guess.""" start="00:06:31.800" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Once this happens. Yeah. So. OK.""" start="00:06:37.040" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So we have this new color map,""" start="00:06:41.320" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""and there's also this change of color.""" start="00:06:44.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""And also there's this range of color from 1800 to 2000,""" start="00:06:46.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""which is a nice addition.""" start="00:06:51.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Kind of smart. I didn't expect...""" start="00:06:53.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I didn't exactly ask for it, but it's nice.""" start="00:06:55.840" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So there's a couple more things.""" start="00:06:58.960" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Let's make it more minimal. &quot;Let's make it more minimal.""" start="00:07:00.960" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Can you remove the bounding box?&quot;""" start="00:07:07.760" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Also, let's annotate a few points.""" start="00:07:17.320" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So I want to annotate the point""" start="00:07:21.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""which has the highest GDP per capita.""" start="00:07:23.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""&quot;Also annotate the point with highest GDP per capita""" start="00:07:25.840" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""with the country and year.&quot;""" start="00:07:33.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So again, forget about the grammar.""" start="00:07:37.000" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""The language model works out well.""" start="00:07:41.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Usually it takes care of""" start="00:07:43.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""all those complexities for you.""" start="00:07:46.160" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""This is what we have got after that.""" start="00:07:47.440" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""As you can see, there's the annotation, which is here.""" start="00:07:53.120" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I think it's still overlapping,""" start="00:07:55.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""so probably it could be done better,""" start="00:07:56.680" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""but the box is removed.""" start="00:07:58.560" video="mainVideo-matplotllm" id="subtitle"]]
+
+[[!template new="1" text="""Room for improvement""" start="00:08:00.160" video="mainVideo-matplotllm" id="subtitle"]]
+
+[[!template text="""Now, as you can see, the system is...""" start="00:08:00.160" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""You will be able to see this""" start="00:08:03.360" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""that the system is not really robust.""" start="00:08:04.880" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So the GitHub repository has some examples""" start="00:08:07.480" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""where it fails miserably,""" start="00:08:10.080" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""and you'll actually have to go into the code""" start="00:08:12.120" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""to figure out what's happening.""" start="00:08:13.680" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""But we do expect that to improve slowly,""" start="00:08:15.000" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""because the models are improving greatly in performance.""" start="00:08:17.880" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""This is a very general model.""" start="00:08:21.040" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""This is not even tuned for this use case.""" start="00:08:22.480" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""The other thing is that""" start="00:08:24.480" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""while I was trying to provide feedback,""" start="00:08:26.640" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I was still using text here all the time,""" start="00:08:29.640" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""but it can be made more natural.""" start="00:08:32.200" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So, for example, if I have to annotate""" start="00:08:34.560" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""this particular point,""" start="00:08:36.160" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""I actually can just point my cursor to it.""" start="00:08:37.440" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Emacs has a way to figure out""" start="00:08:42.240" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""where your mouse pointer is.""" start="00:08:44.520" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""And with that, you can actually go back into the code""" start="00:08:45.800" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""and then see which primitive""" start="00:08:49.621" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""is being drawn here in Matplotlib.""" start="00:08:51.961" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So that there is a way to do that.""" start="00:08:54.481" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""And then, if you do that, then it's really nice to""" start="00:08:55.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""just be able to say""" start="00:08:58.440" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""put your cursor here and then say something like,""" start="00:09:01.320" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""&quot;Can you make this?""" start="00:09:04.280" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Can you annotate this point?&quot;""" start="00:09:05.000" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Because text is, you know... There are limitations to text.""" start="00:09:06.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""And if you're producing an image,""" start="00:09:10.720" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""you should be able to do that, too.""" start="00:09:12.480" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So I do expect that to happen soonish.""" start="00:09:13.960" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""If not, from the model side, the hack that I mentioned""" start="00:09:16.400" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""could be made to work.""" start="00:09:19.840" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""So that will come in in a later version, probably.""" start="00:09:21.360" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Anyway, so that's the end of my talk.""" start="00:09:24.440" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""You can find more details in the repository link.""" start="00:09:27.600" video="mainVideo-matplotllm" id="subtitle"]]
+[[!template text="""Thank you for listening. Goodbye.""" start="00:09:29.760" video="mainVideo-matplotllm" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [abhinav@lepisma.xyz](mailto:abhinav@lepisma.xyz?subject=Comment%20for%20EmacsConf%202023%20matplotllm%3A%20MatplotLLM%2C%20iterative%20natural%20language%20data%20visualization%20in%20org-babel)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/matplotllm-before.md b/2023/info/matplotllm-before.md
new file mode 100644
index 00000000..8286a486
--- /dev/null
+++ b/2023/info/matplotllm-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 10-min talk; Q&A: Etherpad
+Status: All done
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="matplotllm-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="matplotllm-mainVideo" data="""
+00:00.000 Introduction
+01:40.720 What is an LLM?
+02:23.600 Using this library
+05:11.701 Further instructions
+08:00.160 Room for improvement
+
+"""]]<div></div>Duration: 09:34 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.opus">Download --main.opus (5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm">Download --main.webm (49MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/7bwq1vAqYzY24iEMYAdcB1">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/matplotllm-nav.md b/2023/info/matplotllm-nav.md
new file mode 100644
index 00000000..340c24f0
--- /dev/null
+++ b/2023/info/matplotllm-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/sharing">Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</a>
+Next by track: <a href="/2023/talks/voice">Enhancing productivity with voice computing</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/mentor-after.md b/2023/info/mentor-after.md
new file mode 100644
index 00000000..f51dfa88
--- /dev/null
+++ b/2023/info/mentor-after.md
@@ -0,0 +1,1792 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="mentor-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:01.380" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""Hi everyone, my name is Jeremy Friesen, pronouns are he/him,""" start="00:00:01.380" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and today I'll be talking about""" start="00:00:06.320" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""mentoring VS Coders as an Emacs-ian.""" start="00:00:07.880" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""A little bit of background, since 2015, I've mentored""" start="00:00:11.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""about 40 software developers,""" start="00:00:15.000" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""many of them in career-transitioning roles,""" start="00:00:16.560" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""oftentimes from boot camps.""" start="00:00:19.240" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I've also managed a couple of small software development teams.""" start="00:00:21.740" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Framing approaches""" start="00:00:26.740" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""So I want to think about mentoring and the framing approaches.""" start="00:00:26.740" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""We all don't know what we don't know.""" start="00:00:30.600" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""So while mentoring, I like to be curious---asking questions,""" start="00:00:32.940" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I like to be visible,""" start="00:00:36.420" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and I also like to pair so that we can share.""" start="00:00:37.660" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""What are you looking to learn?""" start="00:00:41.940" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""When I start, I like to ask the following type of question:""" start="00:00:41.940" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""&quot;What have you been wanting to learn more of,""" start="00:00:45.300" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""get better at, and improve on?&quot;""" start="00:00:47.120" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Then I like to ask further questions to get an understanding""" start="00:00:49.360" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""of where they've been, where they're going,""" start="00:00:52.940" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and what they'd like to achieve.""" start="00:00:55.160" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Later I'll ask coaching questions, &quot;what's going well,&quot;""" start="00:00:57.280" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""&quot;where are you getting stuck,&quot;""" start="00:01:00.140" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and &quot;if you change one thing, what would it be?&quot;""" start="00:01:01.420" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Make the work visible""" start="00:01:06.000" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""So like many people, I shifted to remote work in 2020,""" start="00:01:06.000" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and I've noticed a higher collaboration in remote work,""" start="00:01:09.840" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""when folks make their work visible.""" start="00:01:13.160" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""So to do that I host office hours,""" start="00:01:15.920" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I try to attend other people's office hours,""" start="00:01:18.200" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and I'll open up a Slack huddle and just code by myself,""" start="00:01:20.680" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""but let folks know, please hop in.""" start="00:01:23.440" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Hop in and be curious""" start="00:01:29.320" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""I like to pay attention to other huddles that start.""" start="00:01:29.320" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""If they're going still for, like, 45 minutes or so,""" start="00:01:32.040" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I'll hop in and say hello.""" start="00:01:35.240" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""It's even odds that they're moving along just fine""" start="00:01:36.800" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""or that they're stuck.""" start="00:01:39.400" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""So by hopping into the Slack huddle,""" start="00:01:40.800" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I'm helping with a common problem.""" start="00:01:43.280" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""How do you know when you're stuck?""" start="00:01:45.480" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""This is something that---as a manager---folks want to know,""" start="00:01:47.200" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""how can I get unstuck faster?""" start="00:01:50.640" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""As a human, it can be frustrating to be stuck for a long time,""" start="00:01:53.440" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""but you also learn stuff""" start="00:01:57.120" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""when you're dealing with the hard things.""" start="00:01:58.600" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""So you really need to balance that time,""" start="00:02:00.760" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and I find hopping in, just being a gentle presence,""" start="00:02:03.220" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""with yes... an agenda, but just to say hi,""" start="00:02:07.160" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""is crucial to help the team members move along.""" start="00:02:10.360" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Pairing is for sharing""" start="00:02:15.880" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""Pairing is for sharing.""" start="00:02:15.880" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""When I pair, I like to let others drive.""" start="00:02:17.240" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""They're typing and working to resolve the problem.""" start="00:02:19.920" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I'm giving guidance, asking questions,""" start="00:02:22.240" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""maybe thinking through a refactor.""" start="00:02:24.600" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I'm also spending time observing how they interact with their editor.""" start="00:02:27.120" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""In the moment, I try to limit advice to, like, one concept.""" start="00:02:31.160" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""A lot of folks don't know that `Control-a`""" start="00:02:35.840" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""will take you to the beginning of line.""" start="00:02:37.800" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Just sharing that is huge sometimes.""" start="00:02:39.720" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Just gently do it and let it float there.""" start="00:02:42.680" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""And assuming we have a regular mentoring session,""" start="00:02:46.920" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I'll make sure to ask how they're feeling""" start="00:02:48.920" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""about using their tools afterwards.""" start="00:02:50.400" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I would love to get to the point where they ask,""" start="00:02:52.680" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""&quot;You saw me using my editor, what is something""" start="00:02:55.680" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I could learn?&quot;""" start="00:02:58.760" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I'm working on getting to that point.""" start="00:03:00.960" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Editor functions""" start="00:03:03.860" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""While pairing, I like to pay attention""" start="00:03:03.860" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""to how folks handle the following.""" start="00:03:05.200" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Where do they want to go?""" start="00:03:07.440" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""How do they get there?""" start="00:03:08.560" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Here they are, now what?""" start="00:03:10.760" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""How do they summarize?""" start="00:03:12.080" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I know what I can do in Emacs,""" start="00:03:13.600" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and I assume that VS Code can do something similar.""" start="00:03:15.240" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""It's a matter of helping the mentees find those packages and plugins.""" start="00:03:17.400" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Where do they want to go?""" start="00:03:23.240" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""Where to go?""" start="00:03:23.240" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Search within a project.""" start="00:03:24.240" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Everybody knows about this, but one thing""" start="00:03:25.760" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""that has been really critical for me""" start="00:03:28.000" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""has been the arrival of `Orderless`.""" start="00:03:29.800" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""A little quick demonstration.""" start="00:03:31.960" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""If I look, and I have this &quot;chicken&quot; and I do &quot;spell&quot;,""" start="00:03:34.760" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I have found one, and they don't have""" start="00:03:40.720" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""to be in the right order.""" start="00:03:42.201" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""In fact, I can go back, and &quot;spell&quot; is there.""" start="00:03:43.381" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Super easy, helpful, so I don't have to think about it, the order.""" start="00:03:48.040" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Search across projects.""" start="00:03:52.760" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Cross-repository searching is super-simple in Emacs,""" start="00:03:54.720" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and I've never seen anyone do it in VS Code.""" start="00:03:59.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I'm also trying to introduce folks to command-line tools""" start="00:04:02.740" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""such as RipGrep and SilverSearcher,""" start="00:04:05.640" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""not just to look in the project, but to go one directory up""" start="00:04:07.960" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and look across projects""" start="00:04:10.640" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""because sometimes when you're working on lots of different projects,""" start="00:04:12.000" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""there might be solutions or ideas that come from there.""" start="00:04:15.060" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Also notice that a lot of people use directory trees to navigate,""" start="00:04:19.960" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""but I favor the fuzzy text.""" start="00:04:23.240" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""So I can do something like `Command-t`""" start="00:04:25.600" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and start looking for things in there.""" start="00:04:27.760" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I just type the name of the file.""" start="00:04:31.280" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I use `consult-projectile`,""" start="00:04:33.760" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""which has a lot of really cool functionality.""" start="00:04:35.320" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""The big one being I can type `r`, recent file.""" start="00:04:39.540" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I can type `p` and jump to a different project,""" start="00:04:43.080" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""so it's a quick navigation tool that I've not seen in VS Code.""" start="00:04:47.720" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""How do they get there?""" start="00:04:53.440" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""Next up is how do they get there?""" start="00:04:53.440" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I like to use LSP for the languages,""" start="00:04:56.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and I bound `M-.` to this""" start="00:04:58.960" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and jump back and forth to definitions.""" start="00:05:02.880" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I just showed `projectile` or `consult-projectile`""" start="00:05:05.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and its super-amazing multifunction finder.""" start="00:05:09.440" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Also another one that I am very avid about""" start="00:05:12.860" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""is the jump between definition and test.""" start="00:05:15.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I bind that to `Super-.`""" start="00:05:19.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and it helps me jump back and forth""" start="00:05:22.840" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""between my production code and my test code---""" start="00:05:25.840" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""especially in Ruby, there's an idiom for that.""" start="00:05:28.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""There is plugins in VS Code that does this correctly.""" start="00:05:32.120" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Here they are, now what?""" start="00:05:36.640" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""Next up, now I'm here, what do I do?""" start="00:05:36.640" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Word completion, Emacs just knocks everything out of the park:""" start="00:05:39.400" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""`dabbrev`, `templates`, `hippie-expand`, `completion-at-point`.""" start="00:05:44.600" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Sometimes it just hurts to watch people type stuff""" start="00:05:48.200" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""that they could quickly expand""" start="00:05:52.080" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""because there are words within the code.""" start="00:05:54.320" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Another one is auto-formatting.""" start="00:05:56.300" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Tree sitter...its arrival is great.""" start="00:05:57.920" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I assume this is going to get better.""" start="00:06:00.040" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I love highlighting a region, hitting `TAB`, and it's just formatted.""" start="00:06:01.480" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I've seen a lot of VS Coders... that doesn't work for them.""" start="00:06:04.920" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Don't know why, trying to get them to see it.""" start="00:06:08.761" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Multi-cursor [`multiple-cursors`] and `iedit`...""" start="00:06:11.080" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""took me a long time to explore `iedit`,""" start="00:06:12.901" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""but the practice... but practicing was huge,""" start="00:06:14.800" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and it has transformed my approach to coding and typing.""" start="00:06:17.840" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Folks know about multi-cursor editing and editing-in-region""" start="00:06:21.480" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""but make sure that they are aware of it.""" start="00:06:24.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""It's important.""" start="00:06:27.920" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Next up is inline searching.""" start="00:06:29.720" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""My beloved Textmate... it was the first thing.""" start="00:06:32.620" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""In fact, it was why I chose not to use Emacs in 2005""" start="00:06:35.200" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and went with Textmate.""" start="00:06:38.440" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""This is something quite simple.""" start="00:06:41.680" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I can do `search` within here, and I can see &quot;introduced&quot;,""" start="00:06:43.760" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and it will show me the line.""" start="00:06:50.000" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""What I like about that is when I'm in code,""" start="00:06:52.240" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I can see the neighborhood of other things""" start="00:06:54.120" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and get a good idea of what's around.""" start="00:06:56.320" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Yes, there is `occur-mode` that can be super useful,""" start="00:06:58.360" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""but I'm used to the Textmate in it.""" start="00:07:01.640" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I just love it.""" start="00:07:03.840" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""How do they summarize?""" start="00:07:06.640" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""Next up is how they summarize.""" start="00:07:06.640" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I've seen a lot of bootcamp graduates write commit messages""" start="00:07:08.680" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""by going to the command line.""" start="00:07:11.720" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""In my experience, commit messages written in the command line""" start="00:07:14.380" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""tend to be terse.""" start="00:07:17.040" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""They miss something.""" start="00:07:18.200" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""So I try to really quickly shift folks to use their text editor,""" start="00:07:19.160" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""encourage them and""" start="00:07:23.480" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""teach them about `$GIT_EDITOR` and `$EDITOR` for the environment variables""" start="00:07:24.400" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""so they can make their commits from the command line.""" start="00:07:28.040" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""And if not there, help them improve how they do VS Code.""" start="00:07:31.000" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""My little screed at the top:""" start="00:07:34.200" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""the interface for VS Code's commit is trash.""" start="00:07:35.920" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""It is why I stepped away from VS Code when I was exploring editors.""" start="00:07:38.960" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""General strategies""" start="00:07:44.440" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""Next up, my goal is to encourage folks to use editors for writing,""" start="00:07:44.440" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""to think about owning that tool.""" start="00:07:48.440" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Commit to one item of learning each week""" start="00:07:52.060" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""I have them try to learn one thing a week.""" start="00:07:52.060" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Maybe they aren't going to learn it,""" start="00:07:54.680" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""but just not to overwhelm them""" start="00:07:55.920" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and find those high-value things.""" start="00:07:57.800" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Jump to spec, jump to code... super-valuable""" start="00:07:59.880" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""because I see folks doing it a lot during the day,""" start="00:08:03.720" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and it can really speed up the transition time""" start="00:08:06.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and keep the focus between the test...""" start="00:08:10.080" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""what you're trying to test and what you're trying to define,""" start="00:08:12.760" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""which can get lost if you do the tree navigation.""" start="00:08:15.480" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Practice within your knowledge domain""" start="00:08:18.960" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""Also I encourage people to practice their domain knowledge.""" start="00:08:18.960" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I learned a lot about programming by doing a bunch of things""" start="00:08:22.880" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""related to RPGs---role-playing games.""" start="00:08:27.160" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I did this previously in Ruby---dice rollers, note takers,""" start="00:08:30.020" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""random table lookups---and now I'm doing it in Emacs.""" start="00:08:33.120" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Knowing the domain helps me set aside the problem space""" start="00:08:35.880" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and then explore how I code""" start="00:08:40.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and how I can implement things differently.""" start="00:08:42.000" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Note-taking""" start="00:08:47.120" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""Note-taking: pay attention to how folks create a fleeting note.""" start="00:08:47.120" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""It can be excruciating as they try to figure out""" start="00:08:51.240" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""&quot;where am I going to put this?&quot;""" start="00:08:54.640" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""&quot;What file?&quot;""" start="00:08:55.600" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""&quot;Where does it go?&quot;""" start="00:08:56.160" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Emacs, we have the *scratch* buffer or anything else,""" start="00:08:57.660" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""but ask them about their note-taking habits""" start="00:09:01.760" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Help them navigate the proprietary software tar pits""" start="00:09:07.120" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""and help them navigate the proprietary software tar pits.""" start="00:09:07.120" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""We know that anything that is venture-capital funded""" start="00:09:11.640" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""will eventually collapse.""" start="00:09:14.360" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""We know that things that don't have a sustainable business model""" start="00:09:16.040" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""without surveillance capitalism""" start="00:09:20.920" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""is going to also have problems.""" start="00:09:22.400" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Encourage folks to think about how they're owning their notes.""" start="00:09:25.300" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Do they place true value on those,""" start="00:09:28.560" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""or are they things that are kind of ephemeral?""" start="00:09:30.640" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""And then help them find the thing that makes sense for them.""" start="00:09:33.120" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Help show the joy of holisting computering""" start="00:09:38.520" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""Put another way, I want people to think holistically""" start="00:09:38.520" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""about their generalized &quot;computering&quot; environment.""" start="00:09:43.240" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Playing is for staying""" start="00:09:47.740" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""And I also think about the reason why""" start="00:09:47.740" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I've stayed a software developer for 25-years plus""" start="00:09:50.080" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""is because I approach all of this as play and storytelling.""" start="00:09:53.680" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Sometimes happy byproduct is that I ship features and documentation""" start="00:09:58.000" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""and help people get stuff done.""" start="00:10:02.440" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Yet I don't tell folks to use Emacs.""" start="00:10:05.200" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Instead, I'm doing my best to show a myriad of reasons""" start="00:10:07.960" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""for why folks should consider Emacs.""" start="00:10:10.720" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Conclusion""" start="00:10:14.900" video="mainVideo-mentor" id="subtitle"]]
+
+[[!template text="""In conclusion, ask questions.""" start="00:10:14.900" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Find a person who is a VS Coder and just say,""" start="00:10:18.740" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""&quot;hey, I learned something new.&quot;""" start="00:10:22.400" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""We play this game all the time, me and my coworker Kirk.""" start="00:10:23.880" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""I love it.""" start="00:10:26.720" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Another goal is showing the malleability of Emacs,""" start="00:10:27.700" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""how easy it is to extend.""" start="00:10:31.480" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""And obviously there's so much more than what I've highlighted,""" start="00:10:34.400" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""but then again, that's Emacs.""" start="00:10:36.680" video="mainVideo-mentor" id="subtitle"]]
+[[!template text="""Thank you, and I look forward to your questions.""" start="00:10:38.720" video="mainVideo-mentor" id="subtitle"]]
+
+
+
+Captioner: hannah
+
+<a name="mentor-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: 2 seconds. And I think we are live.""" start="00:00:09.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Hi, Jeremy, how are you doing?""" start="00:00:10.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right. I'm doing all right.""" start="00:00:11.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""How about you?""" start="00:00:12.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: I'm doing great as well.""" start="00:00:14.759" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm really happy to see all the talk that""" start="00:00:16.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we're having. And I was particularly excited""" start="00:00:18.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""when I got your proposal for this talk""" start="00:00:21.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because mentoring, as I was telling you""" start="00:00:24.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""during the check-in process,""" start="00:00:25.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""is a subject dear to my heart.""" start="00:00:27.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So I'm really excited,""" start="00:00:28.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""not only for the talk that you've just done,""" start="00:00:30.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but also for the question that people are""" start="00:00:32.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""going to ask you.""" start="00:00:32.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I'm looking forward to answering some""" start="00:00:35.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""questions. Mentoring is also something near""" start="00:00:39.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and dear. Something I did not mention is when""" start="00:00:43.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""folks would ask me, like,""" start="00:00:45.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""what was your most important class?""" start="00:00:47.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Or I said, oh, easy, easy,""" start="00:00:48.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""easy, high school English.""" start="00:00:50.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like, it's my whatever your primary written""" start="00:00:54.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and spoken languages I think is the most""" start="00:00:56.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""useful skill as a programmer""" start="00:00:58.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: right so as usual people if you want to ask""" start="00:01:05.379" video="qanda-mentor" id="subtitle"]]
+[[!template text="""questions to Jeremy, feel free to find the""" start="00:01:09.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""link to the other pad either on the talk page""" start="00:01:11.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""or on IRC. We're also going to open the chat""" start="00:01:15.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""so that people can join us and ask questions.""" start="00:01:17.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Let me just make sure that I tell Sasha can""" start="00:01:20.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you open ID Mentor. All right so in the""" start="00:01:25.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""meantime what we'll do is that I'll be""" start="00:01:27.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""reading questions of the pad and Jeremy will""" start="00:01:29.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""be answering them whilst we wait for you to""" start="00:01:31.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""join. Now just to be clear with the time,""" start="00:01:32.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we have a little bit of time now,""" start="00:01:34.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""a little more time than before.""" start="00:01:36.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""We have 22 minutes, so until 10 of the next""" start="00:01:39.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""hours to answer as many questions as""" start="00:01:41.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""possible. And believe me,""" start="00:01:42.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""if you people watching right now are not""" start="00:01:45.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""asking questions, I will be asking plenty of""" start="00:01:47.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""them. So please, save Jeremy from my""" start="00:01:49.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: I look forward to it.""" start="00:01:53.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: inquisitive mind. All right.""" start="00:01:55.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Starting with the first question,""" start="00:01:56.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""a very trivial 1, perhaps,""" start="00:01:59.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but always 1 that I ask myself when I look at""" start="00:02:01.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""a keyboard. Regarding super key,""" start="00:02:03.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""which key do you bind to super?""" start="00:02:05.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, so my left command,""" start="00:02:09.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""which is on a Mac keyboard,""" start="00:02:12.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""so the key right to the left of the space bar""" start="00:02:16.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""is super. And the key immediately to the""" start="00:02:20.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""right of spacebar, which is the right command""" start="00:02:23.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""key, is bound to hyper,""" start="00:02:24.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""which opens up a whole new suite of keys.""" start="00:02:28.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I thought it would take a little bit to""" start="00:02:31.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""get used to, but it's been amazing.""" start="00:02:33.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So I definitely recommend having a hyper""" start="00:02:37.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""binding.""" start="00:02:38.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: I will, yes. I was also going to say super""" start="00:02:42.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""binding. No, it's a hyper binding.""" start="00:02:43.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""We already have super.""" start="00:02:44.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's your Windows key or your Linux key or""" start="00:02:47.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""whatever you want to call it.""" start="00:02:48.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But I will warn people though,""" start="00:02:51.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's the gateway into fancy keyboard setups""" start="00:02:57.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because it starts, it's the Trojan horse of""" start="00:03:00.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""fancy keyboard setup. Just,""" start="00:03:02.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""oh I wish I could have another modifier.""" start="00:03:04.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then many years later,""" start="00:03:06.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you find yourself with this little thing that""" start="00:03:09.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm showing, which is a fully customized QMK""" start="00:03:11.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""keyboard.""" start="00:03:12.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: All right.""" start="00:03:13.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Following on that, then meta is to the left""" start="00:03:18.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""of super, and then control is to the left of""" start="00:03:21.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""meta. And also, caps lock maps to control as""" start="00:03:26.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""well. Definitely tried a bunch of tap for""" start="00:03:31.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""this and that on a programmable keyboard,""" start="00:03:35.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but I have settled on keep it simple and use""" start="00:03:39.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""something like carabiner elements to do most""" start="00:03:41.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. It's good that you were able to stop""" start="00:03:46.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""there. I wish I'd stopped there at some point""" start="00:03:48.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: of the mapping. It was a terrible moment""" start="00:03:50.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""where I'm like, oh, what have I done when I""" start="00:03:52.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""was trying to type once?""" start="00:03:53.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: in my life. All right,""" start="00:03:57.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""moving on to the next question.""" start="00:03:58.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Great talk. What's the package you used to""" start="00:04:01.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""make the org slide?""" start="00:04:02.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: So yeah, it's great. Yeah,""" start="00:04:03.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""so I am using Protz Logos and have,""" start="00:04:13.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I think, like, Olivet mode.""" start="00:04:15.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'll post a link to the configuration for""" start="00:04:19.959" video="qanda-mentor" id="subtitle"]]
+[[!template text="""turning it on and off.""" start="00:04:21.019" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But it's basically narrow region to an org""" start="00:04:24.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""heading, which is, I find that to be super""" start="00:04:27.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""helpful. Don't have to fiddle with it.""" start="00:04:30.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right, just to be clear,""" start="00:04:32.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's Olivetti, right? I think that's the...""" start="00:04:34.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh yeah, Olivetti, yeah.""" start="00:04:36.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: A typical Italian word that is really tough""" start="00:04:39.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to pronounce between Europeans and people in""" start="00:04:42.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I had a... For some reason I dropped""" start="00:04:46.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the I at the end. So in my head""" start="00:04:48.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: the US. Yeah, moving to the next question if""" start="00:04:52.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""people do get interested in picking up emacs""" start="00:04:54.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because of what they see you do How do you""" start="00:04:56.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""recommend they say they get into it?""" start="00:04:58.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Oh""" start="00:04:58.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, so I've been I think a lot of it comes""" start="00:05:05.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""down to what are the problems that they're""" start="00:05:09.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""trying to solve. And so I walked them through""" start="00:05:11.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""my journey. I worked in TextMate for a long""" start="00:05:15.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""time, then Sublime, then Atom.""" start="00:05:16.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then in 2020, I hopped over to Emacs,""" start="00:05:20.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""started writing in it and I chose Space Max""" start="00:05:25.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and then I chose Doom.""" start="00:05:26.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then I was like, wait,""" start="00:05:28.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""start over, erase everything and just do the""" start="00:05:33.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""tutorial. So I did the tutorial and then I""" start="00:05:36.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""started writing and I was like,""" start="00:05:37.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""oh, I really want this functionality.""" start="00:05:39.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so I went and I looked for it and I""" start="00:05:43.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""installed the package.""" start="00:05:44.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then I got the functionality,""" start="00:05:46.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""went back to writing, and I'm like,""" start="00:05:47.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""oh, my editor should really be able to do""" start="00:05:49.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""this. And I thought about it.""" start="00:05:52.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So a lot of it came down to the experience of""" start="00:05:55.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""what they're trying to accomplish.""" start="00:05:56.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And really helping ask them that.""" start="00:06:00.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I had 1 mentee had used Vim for a long time""" start="00:06:04.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and then was exploring using Evil Mode and""" start="00:06:07.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs and we had conversations and it was""" start="00:06:13.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like go back to Vim like you were using VS""" start="00:06:16.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Code just go back to Vim and they went back""" start="00:06:19.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to Vim and then they started writing,""" start="00:06:20.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""well, they went to NeoVim and they started""" start="00:06:22.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""writing Lua plugins for stuff and it just""" start="00:06:27.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""helped free them and they gained that""" start="00:06:29.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""ownership in their text editor.""" start="00:06:31.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So I try to have them think through what are""" start="00:06:37.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the common tasks that they're trying to""" start="00:06:40.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""accomplish and then thinking in terms of""" start="00:06:44.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that. So instead of going and finding a""" start="00:06:46.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""solution, understand the problems they're""" start="00:06:48.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""experiencing, which tends to be what we""" start="00:06:52.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""should do in software development.""" start="00:06:53.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Instead of implementing the solve a problem.""" start="00:06:57.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Sometimes It's fun to implement an idea.""" start="00:07:02.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I think it's really the crux,""" start="00:07:04.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""really, when it comes to software""" start="00:07:06.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""development, because what is at the crux of""" start="00:07:08.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""any kind of engineering?""" start="00:07:09.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Well, it's the problem you're trying to""" start="00:07:11.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""solve. If you've got 2 islands and you need""" start="00:07:13.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to join them up together,""" start="00:07:14.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""well, I need to build a bridge.""" start="00:07:15.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Now, obviously with software,""" start="00:07:17.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we have problems that defy the law of""" start="00:07:19.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""physics, which is great because we get very""" start="00:07:21.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""complex problems that are very exciting to""" start="00:07:23.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""solve. But when it comes to onboarding people""" start="00:07:26.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""into those ways of solving problems,""" start="00:07:28.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""well, I think mentoring,""" start="00:07:29.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""The key behind mentoring is that together,""" start="00:07:32.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we're going to look at a problem and we're""" start="00:07:35.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""going to try to see how high would fix it.""" start="00:07:37.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And you're going to try to appreciate whether""" start="00:07:40.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""this is something you would do as well or""" start="00:07:42.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""would like to do.""" start="00:07:43.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yep, Absolutely. Yeah,""" start="00:07:50.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's really taking time to walk with them on""" start="00:07:54.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the journey to understand what's frustrating""" start="00:07:56.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""them. I have a coworker we've been working""" start="00:07:59.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""together for a very long time.""" start="00:08:01.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""She is not a fast navigator of her editor,""" start="00:08:05.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but as we've talked, that's not where she's""" start="00:08:08.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""looking to get better.""" start="00:08:09.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""She's looking to get better at asking the""" start="00:08:17.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""questions of the clients early so that we""" start="00:08:20.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""don't go down long paths of implementation.""" start="00:08:23.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So it's been great because she's not looking""" start="00:08:27.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to get better at her text editor.""" start="00:08:29.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""She's adequate for how she navigates.""" start="00:08:32.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Other people look and they're like,""" start="00:08:34.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""man, I want to do it faster.""" start="00:08:35.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I want to do it different.""" start="00:08:36.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I want to do it better.""" start="00:08:37.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then we have a different conversation.""" start="00:08:39.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. All right. Moving on to the next""" start="00:08:44.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""question. I've been using Emacs for about 30""" start="00:08:46.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""years and I find it really difficult to""" start="00:08:49.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""figure out how to help people get started""" start="00:08:50.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""with it So I guess my question is the same as""" start="00:08:54.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the green question right about it.""" start="00:08:55.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I think it's slightly different though You""" start="00:08:57.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""could it is more about well go on please.""" start="00:09:00.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Yeah""" start="00:09:01.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: so My wife a while ago,""" start="00:09:06.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""talked about the idea of,""" start="00:09:10.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""relative to anybody, I am an expert or""" start="00:09:15.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""slightly more informed on a topic than the""" start="00:09:19.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""person quote behind me.""" start="00:09:20.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And there's a person ahead of me who's""" start="00:09:22.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""slightly more informed than I am.""" start="00:09:24.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so what we're looking at is perhaps with""" start="00:09:27.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""30 years of experience,""" start="00:09:28.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""introducing someone to Emacs might be""" start="00:09:32.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""difficult because you've you're too much of""" start="00:09:35.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""an expert. So maybe the there's a an idea of""" start="00:09:41.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like what are the principles of pedagogy.""" start="00:09:42.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I know we that was talked about yesterday in""" start="00:09:45.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""a presentation about like here's a""" start="00:09:47.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""constraint, you're using Emacs for the""" start="00:09:49.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""course. But so it's that idea of sharing what""" start="00:09:54.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you have, where you're at,""" start="00:09:56.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""will, I think by nature,""" start="00:10:00.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""move the entire queue of people,""" start="00:10:03.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like they don't really exist.""" start="00:10:04.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I mean, they do, but they don't.""" start="00:10:06.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Behind you, it'll help move them together""" start="00:10:08.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""forward just a little bit.""" start="00:10:10.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And maybe we all move the condition together.""" start="00:10:13.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So It's not a only 1 person kind of thing.""" start="00:10:17.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's a mindset of improving shared""" start="00:10:22.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""understanding.""" start="00:10:22.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: Exactly, and I'd like to come back on""" start="00:10:26.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""something that you mentioned in your answer,""" start="00:10:28.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because it's, you know,""" start="00:10:30.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""what the person asking the question""" start="00:10:33.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""mentioned, 30 years of advance,""" start="00:10:35.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""basically, on starting Emacs.""" start="00:10:36.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""You know, that's a lot of time,""" start="00:10:37.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And you tend to equate this to a massive gap""" start="00:10:40.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""in terms of skills between the 2 people.""" start="00:10:42.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And whilst it's obvious that would be a gap""" start="00:10:47.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""of skills. You know, I find that learning in""" start="00:10:50.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""terms of pedagogy works best when the person""" start="00:10:54.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""doing the teaching is very close in terms of""" start="00:10:58.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""skill levels to the person being taught.""" start="00:11:00.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Why is it the case? It's because it's much""" start="00:11:02.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""fresher in their memory what are the""" start="00:11:05.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""different elements that they have to go""" start="00:11:08.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""through to acquire a particular skill.""" start="00:11:09.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""To go a little bit into the theory,""" start="00:11:12.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm not sure if you're familiar with Vygotsky""" start="00:11:14.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""or at least the I plus 1.""" start="00:11:16.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Are you familiar with this,""" start="00:11:17.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: I am not, go on.""" start="00:11:20.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: Jeremy? So I used to be a teacher before,""" start="00:11:22.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and it's 1 of the things they taught us.""" start="00:11:24.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's about the fact that when you are trying""" start="00:11:26.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to make someone acquire a skill,""" start="00:11:28.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I represents the current knowledge,""" start="00:11:31.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and plus 1 is the thing that you should be""" start="00:11:34.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""teaching them and the theory behind it is""" start="00:11:38.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that it's much easier to teach someone to""" start="00:11:41.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""teach something to someone when they only""" start="00:11:44.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""have to focus on plus 1 i.e.""" start="00:11:46.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Something that is very close nearby to them""" start="00:11:48.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""If you go with something that is I plus 2,""" start="00:11:50.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I plus 3, or god forbid I plus 10,""" start="00:11:53.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's going to be much harder for them to get""" start="00:11:55.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to the understanding because the distance is""" start="00:11:58.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""much greater. And that's why I think""" start="00:12:01.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""mentoring can be taken in 2 ways.""" start="00:12:05.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It could be a mentor who's merely ahead of""" start="00:12:07.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you by plus 1, or it could be a mentor that""" start="00:12:10.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""is ahead of you by plus 10,""" start="00:12:12.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but who has the understanding of what plus 1,""" start="00:12:14.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""plus 2, and plus 3 is.""" start="00:12:15.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, and it can be very challenging to""" start="00:12:22.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""unwind that. I know if we think about all of""" start="00:12:27.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""our hands or input methods have a memory of""" start="00:12:33.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""something that I honestly couldn't tell you""" start="00:12:35.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""what it is. Right? Like,""" start="00:12:38.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I know how to do it on a keyboard,""" start="00:12:40.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""right? We've internalized so much.""" start="00:12:43.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so, yeah, how to walk backward is a""" start="00:12:47.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""distinct challenge and being curious with""" start="00:12:51.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""them and close to them and not asking,""" start="00:12:55.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""trying to diffuse questions and not ask like""" start="00:13:00.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""leading, not overly leading.""" start="00:13:03.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""An example, early on in my mentoring career,""" start="00:13:09.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I was working in a community project,""" start="00:13:11.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and I really wanted to go in and say to""" start="00:13:14.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""everybody, why do we suck at sharing code?""" start="00:13:18.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But instead I said, wait a minute,""" start="00:13:21.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""what would be the question I could ask the""" start="00:13:24.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""group in which I could then ask my question?""" start="00:13:27.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So instead I went into the group and I said,""" start="00:13:30.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""how are we doing about sharing code?""" start="00:13:32.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And collectively, we were able to establish""" start="00:13:37.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we didn't feel very good about it.""" start="00:13:39.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And that conversation now 9 years ago,""" start="00:13:42.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""helped move a process along for the last,""" start="00:13:47.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like it gave it energy for 9 years of how""" start="00:13:50.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we're sharing and how we're approaching""" start="00:13:51.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""stuff. So yeah, the curious questions are""" start="00:13:58.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""super helpful.""" start="00:14:00.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: All right, lovely way to finish this point.""" start="00:14:04.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""We have about 10 more minutes so I'm glad""" start="00:14:06.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that we have a little bit of extra time to""" start="00:14:08.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""answer the questions because we have a little""" start="00:14:10.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""more. All right, I'm gonna switch to the next""" start="00:14:13.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""question we can come back to people reacting""" start="00:14:15.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to what you just said a little bit later.""" start="00:14:16.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: Sure.""" start="00:14:17.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: All right, have you encountered anyone that""" start="00:14:20.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""are being negative about the fact that you're""" start="00:14:23.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""using Emacs, assuming that they just don't""" start="00:14:26.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""know or have misconceptions about Emacs and""" start="00:14:28.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""nothing malicious? If so,""" start="00:14:30.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""how do you handle these kinds of people?""" start="00:14:32.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sure, So at work, I get a gentle elbowing of""" start="00:14:40.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like, oh, Jeremy's going to talk about Emacs""" start="00:14:42.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""again. So it's not entirely...""" start="00:14:45.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Maybe it's a little dismissive,""" start="00:14:50.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but I don't actually care because like it's""" start="00:14:56.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like being, I don't know,""" start="00:15:00.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's like being made fun of for using a""" start="00:15:02.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""particular type of pen.""" start="00:15:03.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like goal is to write something,""" start="00:15:05.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""right? And I'm using a pen that gives me joy.""" start="00:15:09.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""When I talk with my mentees,""" start="00:15:11.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like I want to meet them exactly where""" start="00:15:14.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""they're at with their code and like what""" start="00:15:16.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""they're comfortable with and help them remove""" start="00:15:20.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""any of that potential like inadequacy,""" start="00:15:23.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""sense of inadequacy or imposter syndrome or""" start="00:15:27.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""any of those things because The goal is to,""" start="00:15:32.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""for me, to be better at computering.""" start="00:15:36.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like hop on my computer.""" start="00:15:39.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I want to be able to use it at a speed of""" start="00:15:45.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""thought that doesn't introduce a lot of""" start="00:15:47.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""friction. Another speaker talked about that""" start="00:15:50.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""using HyperBowl and a couple of plugins to""" start="00:15:54.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""write stream of consciousness.""" start="00:15:55.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And that was an important consideration.""" start="00:15:57.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I want my text editor to flow with me.""" start="00:16:01.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so I'm like, well,""" start="00:16:02.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs flows with me smooth.""" start="00:16:03.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like you can deride it all you want.""" start="00:16:08.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It doesn't thread very well,""" start="00:16:09.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but it's just me on this machine.""" start="00:16:12.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I don't need it to overly thread,""" start="00:16:14.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""at least for my use cases.""" start="00:16:15.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I can only agree 100% with what you've""" start="00:16:22.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""just said. And it's very easy to dismiss""" start="00:16:25.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""stuff like Vim or Emacs based on the very""" start="00:16:28.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""trite sentences that everyone use.""" start="00:16:31.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But at the end of the day,""" start="00:16:32.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I really like what you said.""" start="00:16:33.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Those are just pencil that we're using to""" start="00:16:36.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""express ourselves. And we're doing something""" start="00:16:39.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""a little more fancy than just writing words""" start="00:16:41.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""on a page. But ultimately,""" start="00:16:43.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's just text at the very bottom.""" start="00:16:46.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So whatever helps us write this test,""" start="00:16:48.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""this text more easily,""" start="00:16:50.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you know, it's always good.""" start="00:16:52.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Yeah. All right. Moving on to the next""" start="00:16:56.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""question. I love the attitudes and worldview""" start="00:16:59.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that infuse your blog post and your talk this""" start="00:17:02.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""weekend. Learn something every week.""" start="00:17:05.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's cumulative. English class was the most""" start="00:17:08.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""important. What other advice do you have and""" start="00:17:11.319" video="qanda-mentor" id="subtitle"]]
+[[!template text="""how is it generalizable to those of us who""" start="00:17:13.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""are not devs?""" start="00:17:14.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sure. So I think 1 of the really big changes""" start="00:17:26.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""for me, and I talked about this in the""" start="00:17:29.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""writing Q&A, is switching my blog from a""" start="00:17:34.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""topical 1 about role-playing games and board""" start="00:17:38.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""games into anything that I think I want to""" start="00:17:43.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""write. And that shift happened about the time""" start="00:17:47.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that I was really exploring using Emacs for""" start="00:17:50.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""writing. And so previously I had,""" start="00:17:54.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I would write blog posts in Markdown using,""" start="00:17:57.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""or I would write it in the web interface.""" start="00:18:00.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And getting to the point where my writing was""" start="00:18:06.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the same as my coding,""" start="00:18:08.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""was the same as my RSS consumption,""" start="00:18:12.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""was the same of a lot of these things,""" start="00:18:15.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""freed up my general interests so that they""" start="00:18:21.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""all can kind of play in that space.""" start="00:18:23.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So and that's the, I think,""" start="00:18:27.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Feynman said, like, his notes are his""" start="00:18:33.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""thoughts. It's not him thinking,""" start="00:18:35.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I mean, they are him thinking as well.""" start="00:18:38.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So it's really framing it that way.""" start="00:18:40.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then for not devs,""" start="00:18:44.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""My daughter has been doing screenwriting and""" start="00:18:49.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""she just had her school license for the tool""" start="00:18:53.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that they use for writing screenplays.""" start="00:18:54.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""She had to pay for it on her own.""" start="00:18:57.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I was like, hey, let's take a look at""" start="00:18:59.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs. There's a package for this.""" start="00:19:01.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Maybe it makes sense to you.""" start="00:19:03.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So I think the, really to summarize it is""" start="00:19:09.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like the broad curiosity in like,""" start="00:19:12.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I have a liberal arts degree,""" start="00:19:14.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I have barely any computer science classwork""" start="00:19:20.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""practice. I have a lot of practical""" start="00:19:23.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""experience doing software development,""" start="00:19:26.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but theory is minimal.""" start="00:19:28.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Instead, I look to things like Lord of the""" start="00:19:32.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Rings or role-playing games or poetry or""" start="00:19:35.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""history or whatever and be curious and Then""" start="00:19:40.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""be playful The introduction of git locally""" start="00:19:47.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""where I can just have a Git repo means my""" start="00:19:51.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""text is recoverable. I don't,""" start="00:19:56.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I can play. I'll just break it,""" start="00:19:59.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'll change it. It's software,""" start="00:20:00.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""let it be soft. It's not hard.""" start="00:20:02.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It can be hard to work with it,""" start="00:20:05.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but let it be soft. Let it be pruned,""" start="00:20:08.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""let it go away, let it die,""" start="00:20:09.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""let it come back.""" start="00:20:11.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, That's a lovely attitude to have.""" start="00:20:16.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I mean, I've already talked about my past as""" start="00:20:20.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""an English major in 1 of the EmacsConf talks,""" start="00:20:23.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but just like you, I don't have a comp sci""" start="00:20:26.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""education. I just started with needing a""" start="00:20:30.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""better pen, and that was about 10 years ago.""" start="00:20:32.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And now I find myself hosting Emacs Cons,""" start="00:20:36.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but it was a very incremental process,""" start="00:20:38.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""a very cumulative process,""" start="00:20:40.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to reuse the word that we used before.""" start="00:20:42.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And What I also like about people outside of""" start="00:20:48.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""CompSight using Emacs,""" start="00:20:49.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and we've got plenty of such examples in the""" start="00:20:53.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""presentations we've had this year,""" start="00:20:54.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but also last year, is that you get so many""" start="00:20:57.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""different windows into how people are using""" start="00:21:00.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs, and it kind of harks back to what I""" start="00:21:03.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""was saying before about Emacs being a""" start="00:21:06.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""platform with many horizontal packages""" start="00:21:08.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""permitting any kind of workflow imaginable""" start="00:21:10.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and some people are going to gravitate""" start="00:21:13.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""towards old mode. I think it was your sister""" start="00:21:16.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that you mentioned that was looking into""" start="00:21:18.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""packages for writing screenplays.""" start="00:21:20.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Well, we've got such a thing in Emacs.""" start="00:21:23.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I mean, a screenplay is just a monospace font""" start="00:21:26.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""with some fancy formatting.""" start="00:21:27.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's not very complicated.""" start="00:21:29.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And if you can get behind,""" start="00:21:32.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you know, someone using such a stable format""" start="00:21:36.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""for writing screenplay with many rules,""" start="00:21:38.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but ultimately all the screenplay look the""" start="00:21:40.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""same, well, Emacs is kind of just the same.""" start="00:21:42.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's about standardizing the way you edit""" start="00:21:45.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""text. So I think your sister was already half""" start="00:21:47.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, it was my it was my my daughter.""" start="00:21:51.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm trying to sell her on.""" start="00:21:52.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: on the idea. Oh, no, sorry.""" start="00:21:53.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, she also picked up programming just 1""" start="00:21:56.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""day and was like, I forget that.""" start="00:21:58.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like she was playing with a stage manager""" start="00:22:01.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""programming thing or like have a little""" start="00:22:03.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""avatars moving around.""" start="00:22:04.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so she's got a predisposition to like the""" start="00:22:11.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""craft of things. And I think that's another""" start="00:22:15.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""aspect is like, I'm not,""" start="00:22:18.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I mean, I appreciate science.""" start="00:22:21.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm here for a scientific approach,""" start="00:22:23.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but I also Really enjoy the craft of things""" start="00:22:27.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Playing with it Like this is my playground.""" start="00:22:32.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I love kind of hacking on it and looking at""" start="00:22:36.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""packages and Seeing how I might use it pick""" start="00:22:39.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it up for a little bit and then maybe I""" start="00:22:42.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""forget about it""" start="00:22:42.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right, well Jeremy I think that was Lovely""" start="00:22:47.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""finish. Oh, sorry plasma.""" start="00:22:49.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Oh, sorry. I thought he was someone on Mumble""" start="00:22:51.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""talking to me. I'm actually going to have to""" start="00:22:54.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""be sorry because we only have about 50""" start="00:22:56.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""seconds until we move on to the next talk.""" start="00:22:58.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But please, Plasma Strike,""" start="00:22:59.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""If you want to ask your question to Jeremy,""" start="00:23:01.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""by all means, stay in the room.""" start="00:23:02.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yep, I'll be here.""" start="00:23:04.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: And we'll be recording all of this and we'll""" start="00:23:07.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""put this later on the talk page.""" start="00:23:09.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So Jeremy, I'll have to say bye now because I""" start="00:23:12.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""need to prepare the next room.""" start="00:23:13.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But It was lovely talking with you and thank""" start="00:23:16.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you for all your answers.""" start="00:23:17.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Absolutely. Thank you.""" start="00:23:19.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 0]: Bye-bye. Bye.""" start="00:23:21.220" video="qanda-mentor" id="subtitle"]]
+
+[[!template new="1" text="""Start of section to review""" start="00:23:26.400" video="qanda-mentor" id="subtitle"]]
+
+[[!template text="""[Speaker 2]: See you. Hello. One of the things with Emacs is""" start="00:23:26.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's not... It's like when you change the""" start="00:23:28.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""file management, you just change very,""" start="00:23:30.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""very small amounts of what exactly you need,""" start="00:23:33.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you want to change. Like you go from text""" start="00:23:38.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""editing to your file manager,""" start="00:23:43.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you're not changing your theme,""" start="00:23:44.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you're not changing your font.""" start="00:23:46.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: And you""" start="00:23:49.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: use your bookmarks, you use your bookmarks in""" start="00:23:52.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""your emails, you use your bookmarks in your""" start="00:23:54.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""org-mod documents, you use it in E-dub,""" start="00:23:59.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""W-W buffers if you use that,""" start="00:24:02.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but it's just the, Yeah,""" start="00:24:06.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's just the least amount of Incremental""" start="00:24:10.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""changes""" start="00:24:10.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: yeah, you're when you were talking about like""" start="00:24:14.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the Reducing friction like turn off editing""" start="00:24:18.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""or not editing, but auto correct while you're""" start="00:24:22.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""typing, it's absolutely spot on.""" start="00:24:25.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""You're wanting to get whatever is flowing""" start="00:24:29.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""needs to keep flowing,""" start="00:24:31.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like as a programmer or as a creative,""" start="00:24:33.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""anytime I can hit flow is my goal.""" start="00:24:38.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so paying attention to what removes flow""" start="00:24:42.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""or hinders it or saps energy and that unified""" start="00:24:48.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""environment of Emacs is really helpful to""" start="00:24:52.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""maintain that. So yeah.""" start="00:24:57.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: I think it's about speed and then once after""" start="00:25:02.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you get some of that, then you're like,""" start="00:25:04.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""well, yeah, it's important,""" start="00:25:06.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but this is like the last thing I care about.""" start="00:25:09.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. Speed is all like,""" start="00:25:14.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Yeah, there's a quote that I love called,""" start="00:25:19.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I forget the author. It's,""" start="00:25:22.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""there is a connection between slowness and""" start="00:25:30.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""remembering and fastness and forgetting.""" start="00:25:33.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And the slowness is an interesting,""" start="00:25:39.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like it's, I am moving fast in Emacs because""" start="00:25:43.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I've forgotten how I'm doing it.""" start="00:25:46.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I just do it now, right?""" start="00:25:47.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then the slowness of like being in my""" start="00:25:52.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""thought and staying on that stream is where I""" start="00:25:57.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""want to be and ride whatever that pathway is.""" start="00:26:01.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And a text editor is still hard to do that""" start="00:26:07.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because if I were using a pen and paper it's""" start="00:26:10.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""more cumbersome to auto-edit.""" start="00:26:11.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But I can't get it out without losing my""" start="00:26:18.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""thinking. And so I ended up having to type""" start="00:26:21.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it.""" start="00:26:21.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: Something I've been experimenting with is""" start="00:26:25.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""using, well, recording.""" start="00:26:26.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Some other people are using dictation for""" start="00:26:29.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""this to just get the blur out of the ideas""" start="00:26:31.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and you can go back and glean some of that""" start="00:26:35.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""stuff out of it.""" start="00:26:36.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, what I will do when I'm capturing like""" start="00:26:41.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""quotes or epigraphs is I will almost always""" start="00:26:44.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""turn on dictation because I got a book in 1""" start="00:26:47.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""hand. So I'm like, on goes the typing.""" start="00:26:52.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And yeah, that is, there's a,""" start="00:26:56.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm really thankful that that exists as well.""" start="00:26:59.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like my mother is blind.""" start="00:27:01.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so having that helps her and me""" start="00:27:05.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""communicate Through text because we're both""" start="00:27:08.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""able to appreciate it And use it in a way""" start="00:27:12.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that is accessible for both of us""" start="00:27:15.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: Go ahead""" start="00:27:19.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: There's the L feet to package which will""" start="00:27:23.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""which will allow you to both of us.""" start="00:27:25.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""There's the ElfieTube package which will""" start="00:27:25.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""allow you to subscribe to a YouTube channel""" start="00:27:28.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and then download the subtitles and give you""" start="00:27:32.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""remote control access to the MPV player to""" start="00:27:36.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""watch the YouTube thing.""" start="00:27:37.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And considering you have a really big""" start="00:27:41.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""subtitle thing that you can click at the""" start="00:27:44.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""various different places,""" start="00:27:45.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's really surprising about how different""" start="00:27:47.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that makes YouTube feel.""" start="00:27:49.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah I've...""" start="00:27:50.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: And then on top of that about how much like""" start="00:27:54.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""if you've used it why would you never have""" start="00:27:57.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""thought about that before because it's...""" start="00:27:59.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Right. It's even better.""" start="00:28:00.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right absolutely. Sasha?""" start="00:28:04.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: Oh I would say I do use the caption slot also""" start="00:28:10.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""when I'm skimming through stuff for Emacs""" start="00:28:11.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""News. But for books specifically,""" start="00:28:13.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I often use Google Lens to just capture the""" start="00:28:18.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""text and copy it so that I don't have to deal""" start="00:28:21.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""with recognition errors or whatever.""" start="00:28:24.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""really useful.""" start="00:28:25.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: It's just So 1 of my hobbies is role-playing""" start="00:28:31.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""games and the tabular data that is in the""" start="00:28:35.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""role-playing books is never in correct,""" start="00:28:38.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like copy it out. And so I was like this is""" start="00:28:43.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""really annoying And I ended up taking""" start="00:28:46.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""screenshots on my machine,""" start="00:28:47.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""running Tesseract to pipe it in,""" start="00:28:50.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and then using Emacs to like edit it because""" start="00:28:53.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Tesseract adheres to the column format that""" start="00:28:57.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm looking for. And I'm really thankful that""" start="00:29:00.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we're at a place where the OCR is in good""" start="00:29:05.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""shape. That's part of my day job is working""" start="00:29:09.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""on some old documents that OCR is good,""" start="00:29:14.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but not great because of like their 19th""" start="00:29:18.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""century documents, but having that ability to""" start="00:29:23.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""me is really powerful because we're gonna be""" start="00:29:28.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""able to share that text And also then once""" start="00:29:32.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's understood in what it's ASCII or UTF-8""" start="00:29:35.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""encoding is, it can be translated as well.""" start="00:29:39.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So we can make it even more generally""" start="00:29:41.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""available, which I think is a nice thing to""" start="00:29:46.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""have.""" start="00:29:46.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: I wanted to go back to the topic of mentoring""" start="00:29:51.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""since that's something that I'm very much""" start="00:29:54.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""interested in figuring out how to facilitate""" start="00:29:55.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""in the Emacs community.""" start="00:29:56.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Other people have been working on kind of""" start="00:30:00.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""remote mentoring initiatives with Emacs""" start="00:30:03.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Buddy. And there are meetups as well that""" start="00:30:07.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""kind of get that sense of like,""" start="00:30:09.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you know, what people are doing things and""" start="00:30:10.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""then somebody can look over their shoulder""" start="00:30:12.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and say, hey, have you ever thought about""" start="00:30:14.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right.""" start="00:30:15.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: this? Is there any things that you can can""" start="00:30:17.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""suggest specifically in the context of this""" start="00:30:20.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""kind of mentoring over a distance?""" start="00:30:23.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Any chance you've thought about it?""" start="00:30:25.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm on the Emacs buddy repo and I've had a""" start="00:30:30.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""handful of people reach out to me.""" start="00:30:32.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Most often we start with email and every so""" start="00:30:37.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""often it'll be like, hey,""" start="00:30:38.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""let's hop on some kind of video or audio,""" start="00:30:44.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""even just done phone calls.""" start="00:30:47.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Yeah, I haven't done any of the like shared""" start="00:30:53.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""buffer stuff. I know like at work we have""" start="00:30:57.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""replit where we can use that.""" start="00:30:59.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Seeing the presentation on CDRT,""" start="00:31:02.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I was like, oh, that's really great.""" start="00:31:04.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But what I found is being able to see""" start="00:31:10.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""someone, I don't get to see them typing,""" start="00:31:15.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but I get to see the results of what they're""" start="00:31:17.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""doing on the computer.""" start="00:31:18.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""You know paying attention to that is the big""" start="00:31:22.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""1 to help them think of a different way.""" start="00:31:26.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Depending on where they're at when they're""" start="00:31:28.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""writing if they are like at a pause point,""" start="00:31:32.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""if I'm at my best, I'll be like,""" start="00:31:35.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""so what are you thinking?""" start="00:31:37.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Where are you stuck? Cause maybe they're""" start="00:31:40.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""trying to navigate somewhere and that starts""" start="00:31:43.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to create a point for a conversation of like,""" start="00:31:46.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""how do I go from here to there?""" start="00:31:48.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so it's looking for those moments is""" start="00:31:57.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""where I try to operate.""" start="00:31:58.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: And sometimes, you know,""" start="00:32:03.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""so there's kind of like,""" start="00:32:05.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""how do you go from here to there?""" start="00:32:06.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And sometimes even the,""" start="00:32:08.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""what there should I be going for is a""" start="00:32:12.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""challenge, right? Because especially with""" start="00:32:15.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs newbies, they might not necessarily""" start="00:32:16.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""know what's possible or what's nearby in""" start="00:32:19.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""terms of what their current knowledge is.""" start="00:32:21.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And that's an interesting thing to map out.""" start="00:32:23.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Is that something that you've thought about""" start="00:32:25.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and as you're conversing with all these""" start="00:32:29.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""people?""" start="00:32:29.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: The main thing, the main function that I do""" start="00:32:37.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""talk, I talked about this,""" start="00:32:38.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I think in the, I did in the talk where it's,""" start="00:32:41.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I need to jump between the test and the""" start="00:32:46.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""implementation. And since 2005,""" start="00:32:50.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I've had that. And I watch folks not have""" start="00:32:56.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that. I'm just like, Oh,""" start="00:32:57.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""my goodness, like there's a convention in the""" start="00:33:00.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""language we work in. Let's get that""" start="00:33:02.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""installed. Let's get it going.""" start="00:33:04.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like that's 1 thing, that's 1 access I know""" start="00:33:07.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""they're gonna go to. Another 1 is the jump to""" start="00:33:11.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""definition. And I've never gotten like C""" start="00:33:14.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""tags. I haven't really spent time on that,""" start="00:33:16.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but with the advent of LSP,""" start="00:33:18.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it works a lot better.""" start="00:33:21.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so I try to get people to use that.""" start="00:33:24.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And what I've noticed weirdly is like VS""" start="00:33:30.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""code, it doesn't work as well as I would have""" start="00:33:34.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""thought. And there's lots of like errors and""" start="00:33:36.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""warnings popping up in the bottom corner.""" start="00:33:38.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So I'm like, well, you gotta pay attention to""" start="00:33:41.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that. But I try not to get into anybody's""" start="00:33:45.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""business about like, I'm like,""" start="00:33:47.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""maybe we could fix that.""" start="00:33:48.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Maybe we can clean it up,""" start="00:33:50.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but it's your, you know,""" start="00:33:51.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's your car you're driving.""" start="00:33:54.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm just long for a ride.""" start="00:33:56.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's safe, we're fine.""" start="00:33:57.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So yeah, that jumped to definition.""" start="00:34:01.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then the, I mean, search in project,""" start="00:34:07.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like everybody understanding that.""" start="00:34:10.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But I feel that the, like I mentioned in the""" start="00:34:15.219" video="qanda-mentor" id="subtitle"]]
+[[!template text="""talk, the advent of orderless is just huge.""" start="00:34:17.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I did not realize how much I loved it because""" start="00:34:21.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I don't have to think about things and can""" start="00:34:24.159" video="qanda-mentor" id="subtitle"]]
+[[!template text="""have slightly more forgiving default""" start="00:34:28.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""searches. Yeah, it's hard.""" start="00:34:34.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""The principles of organizing 10 things versus""" start="00:34:39.159" video="qanda-mentor" id="subtitle"]]
+[[!template text="""100 versus 1,000 versus 10,000""" start="00:34:41.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""are just, they're not the same.""" start="00:34:44.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: A common hang up for, that would easily make""" start="00:34:52.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you skip off of Emacs,""" start="00:34:54.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Org Mode, Hyperbole is if you go into any of""" start="00:35:00.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""those with the mindset of I'm going to master""" start="00:35:03.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it all before I use it.""" start="00:35:05.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""That's not going to work.""" start="00:35:06.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Absolutely. I was terrified of org mode when""" start="00:35:13.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I started because I'm like,""" start="00:35:14.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I don't need to organize my life.""" start="00:35:16.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I need to like type. And then that,""" start="00:35:20.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""yes, incremental. What did I find helpful?""" start="00:35:24.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: It's for the, for the Linux CLI toolbox,""" start="00:35:28.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but you have to look at them as more of just,""" start="00:35:30.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I have a whole bunch of tools available to me""" start="00:35:34.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and I'll just pick them up as I have a""" start="00:35:39.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""problem and as I, and as the tool can be""" start="00:35:42.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""useful for this problem and incrementally.""" start="00:35:44.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. It's""" start="00:35:47.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: actually, so, in fact,""" start="00:35:54.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""when when I'm mentoring people,""" start="00:35:56.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I have to take a step back and say,""" start="00:35:58.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""OK, what are we with the note taking thing""" start="00:36:00.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that you mentioned in your talk.""" start="00:36:01.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""How do you like to take notes?""" start="00:36:03.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""How do you like to keep track of the things""" start="00:36:04.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that you want to work on when you have an""" start="00:36:06.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""idea? Where does it go?""" start="00:36:07.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Because if you improve that practice,""" start="00:36:10.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and especially if you can sneak some literate""" start="00:36:12.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""programming in without them really noticing,""" start="00:36:14.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""then it becomes the thing that they can use""" start="00:36:17.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to learn more efficiently.""" start="00:36:18.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. I was presenting at,""" start="00:36:23.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I wasn't presenting at this seminar,""" start="00:36:26.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but I attended it and it was a crash course""" start="00:36:30.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""in command line tools.""" start="00:36:31.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I didn't, I mean, I went there to listen""" start="00:36:35.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and there was a point where the people were""" start="00:36:38.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like, I use this command line tool.""" start="00:36:40.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm not a programmer, I'm a librarian,""" start="00:36:42.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm an archivist. I use it,""" start="00:36:45.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm like, great, I'm gonna remember this.""" start="00:36:47.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then I forget about it and I might use it""" start="00:36:49.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""6 months from now. And so I tried to""" start="00:36:54.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""encourage everybody, like come up with,""" start="00:36:56.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like you have a degree in knowledge and""" start="00:37:00.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""information, management and organization,""" start="00:37:02.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""introspect, right? Spend some time on it.""" start="00:37:06.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Think about what is a way that I can do this""" start="00:37:09.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and ask questions to get to the point where""" start="00:37:13.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you can create a discoverable inventory of""" start="00:37:18.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the tools you've used and what that means.""" start="00:37:22.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And my answer was, I use literate programming""" start="00:37:26.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""or I shove it in my bin directory in GitHub""" start="00:37:30.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and like, I don't know if I'll remember it,""" start="00:37:34.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but I can go there every now and then and be""" start="00:37:35.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like, oh yeah, that command.""" start="00:37:37.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So note taking is the most critical component""" start="00:37:44.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""of any number of work.""" start="00:37:46.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: Sometimes I wonder if we can maybe""" start="00:37:51.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""externalize some of all this mentoring""" start="00:37:54.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""insight and kind of like this choose your own""" start="00:37:57.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""adventure thing, where the person says,""" start="00:37:59.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""OK, this is what I got at the moment.""" start="00:38:01.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then through a series of diagnostic""" start="00:38:03.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""questions, we can figure out what hurts,""" start="00:38:05.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""right? Where is the thing that they would""" start="00:38:08.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like to learn more about?""" start="00:38:08.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then, okay, if that hurts,""" start="00:38:09.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""try this and keep that manageable.""" start="00:38:12.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And if there's only a way to also be able to""" start="00:38:15.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""capture each person's state,""" start="00:38:17.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the things that they know about and have""" start="00:38:19.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""absorbed into their habits.""" start="00:38:20.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So you can say, right,""" start="00:38:22.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you know, my recommendation for someone who's""" start="00:38:25.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""brand new to org is not the same as somebody""" start="00:38:28.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""who's like, okay, they've got their agendas""" start="00:38:30.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and everything set up already.""" start="00:38:31.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Just how do we represent that as like WISPs?""" start="00:38:33.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: I've given up on trying to map that.""" start="00:38:39.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I like the one-on-one conversations and""" start="00:38:43.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""discovery. And I think that's the part where""" start="00:38:47.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you're looking at, you're asking about how do""" start="00:38:51.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we make the process and like I heard,""" start="00:38:55.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like how do we help equip those who want to""" start="00:38:58.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""mentor as well, right?""" start="00:39:01.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Making that, reducing the barrier in a way.""" start="00:39:05.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: I don't""" start="00:39:06.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: know, I think what you said about enjoying""" start="00:39:08.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the conversation and the fact that it is""" start="00:39:10.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""really unique for each person,""" start="00:39:12.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""each situation that comes up.""" start="00:39:14.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I suspect what it just comes down to is more""" start="00:39:18.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like capturing the good stuff of each""" start="00:39:21.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""mentoring session or whatever.""" start="00:39:23.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Maybe it's getting the mentees to write very""" start="00:39:25.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""short blog posts about what they learned this""" start="00:39:27.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""week or whatever else.""" start="00:39:28.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then, oh, yeah, you know,""" start="00:39:30.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we ran into the same problem 3 months ago.""" start="00:39:33.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Let me go look it up. And then that becomes a""" start="00:39:36.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""reusable segment.""" start="00:39:37.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, when I worked at a coding bootcamp,""" start="00:39:41.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""they tried to encourage the mentors to say,""" start="00:39:46.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like write a blog posts for the mentees.""" start="00:39:49.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And that was, some of them did,""" start="00:39:57.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but it was intimidating because like they""" start="00:40:01.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""didn't wanna, I don't know.""" start="00:40:03.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Are we enculturated in an education system""" start="00:40:06.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""where we can't get it wrong or we need to""" start="00:40:09.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""look like we're more of an expert than we""" start="00:40:11.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""are? I don't know. I have a lot of like,""" start="00:40:15.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm a middle aged white guy,""" start="00:40:17.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I've got a lot of background and privilege in""" start="00:40:20.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""my career. So like, it's not as scary to put""" start="00:40:25.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""something forward for myself as it might be""" start="00:40:28.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""as like a woman in tech or a minority in""" start="00:40:31.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""tech, because that's a different place.""" start="00:40:35.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I want to really get done with that.""" start="00:40:38.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I don't like that at all.""" start="00:40:40.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I would love our, like,""" start="00:40:43.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""just write. And it doesn't have to be public,""" start="00:40:46.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""right? You don't have to make it public,""" start="00:40:48.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but if you make it discoverable to yourself,""" start="00:40:51.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that's the big thing. And 1 of my coworkers,""" start="00:40:58.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""She doesn't blog, but she definitely has a""" start="00:41:04.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""large knowledge base of stuff that she""" start="00:41:07.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""references because she's pulling out all""" start="00:41:08.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""kinds of stuff and I'm like whatever you're""" start="00:41:10.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""doing is working.""" start="00:41:11.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: I'm trying to have something.""" start="00:41:17.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""There's a good opportunity with the Emacs""" start="00:41:23.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""conference to accomplish this.""" start="00:41:25.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So like if you make like a,""" start="00:41:28.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because 1 of the things with it is,""" start="00:41:31.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Sasha, you do a really good job of using all.""" start="00:41:36.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""You're the 1 who has the Emacs buffer with""" start="00:41:38.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the time on it, right?""" start="00:41:39.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Is that your screen that's being recorded for""" start="00:41:41.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that? Because you have a really good example""" start="00:41:45.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""of a really consolidated emacs workflow that""" start="00:41:50.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""works really good with the Emacs conference""" start="00:41:53.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""so if you had like a page that described how""" start="00:41:56.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you did all that stuff in the emacs""" start="00:42:00.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""conference like on that and then we then you""" start="00:42:04.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""did even more stuff with that.""" start="00:42:06.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like you do the org mode file that you can""" start="00:42:09.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""just put straight into your agenda for your""" start="00:42:12.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""time zone. I used that.""" start="00:42:14.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""That was really nice, just because it allowed""" start="00:42:17.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""me to reorganize and see how all the talks""" start="00:42:19.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""would work together, and which ones I wanted""" start="00:42:21.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to do. You could add Org Mode to do tags with""" start="00:42:25.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that, to say, plan to watch,""" start="00:42:31.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I want to re-watch but I have to skip it""" start="00:42:36.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because there's another talk I'm watching,""" start="00:42:37.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you know, like a couple tags don't care about""" start="00:42:40.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""so that people can easily tag all the talks""" start="00:42:43.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that they care about on top of that.""" start="00:42:47.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then with, I'm going to try to email""" start="00:42:52.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""these ideas on it too,""" start="00:42:54.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but then you can also,""" start="00:42:57.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you have the either pad questions,""" start="00:43:00.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you could put all those in org-mode documents""" start="00:43:03.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""with crdt.el, post all those in the Emacs""" start="00:43:08.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""conference and then people could use that to""" start="00:43:11.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""edit all the documents at the same time so""" start="00:43:13.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""then everybody's actually collaboratively""" start="00:43:15.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""editing. And then people have all the""" start="00:43:20.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""scaffolding for if you do the Emacs meetings,""" start="00:43:24.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""buddy meetings, because they know exactly how""" start="00:43:27.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to set it all up with that.""" start="00:43:29.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then you combine it with any number of""" start="00:43:34.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""whatever chat video program so that people""" start="00:43:38.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""can talk and watch each other.""" start="00:43:39.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: I have a presentation later on EmacsConf""" start="00:43:45.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""infrastructure and I will capture the note""" start="00:43:48.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And maybe I can include a mini tutorial in""" start="00:43:51.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the schedule org so that people can be like,""" start="00:43:53.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""hey, by the way, you could refile these""" start="00:43:55.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""things into your own org files or tag them""" start="00:43:58.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and here's a list thingy that filters your""" start="00:44:01.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""agenda by your tag or whatever,""" start="00:44:03.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it'll be fine. But it's,""" start="00:44:04.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you know, it's, it's kind of like,""" start="00:44:06.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it is, you're right. It is an opportunity to""" start="00:44:09.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""expose people to more things that they could""" start="00:44:12.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""do in kind of a scaffolded way.""" start="00:44:14.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""That's interesting stuff,""" start="00:44:16.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but I, your point actually driving also going""" start="00:44:18.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""back to previous parts of conversation about,""" start="00:44:21.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's difficult for people to share.""" start="00:44:24.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""When you realize, like I keep telling""" start="00:44:26.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""everyone, hey, if you blog about Emacs,""" start="00:44:28.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you'll not only learn things for yourself and""" start="00:44:30.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""make things more searchable,""" start="00:44:31.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""other people will come by and tell you even""" start="00:44:33.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""better ways of doing things,""" start="00:44:34.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""which is something that always happens to me""" start="00:44:36.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""too, and I'm posting this.""" start="00:44:37.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Has that ever happened?""" start="00:44:38.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm sure that happens to you.""" start="00:44:39.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: It's great. I love getting those things like,""" start="00:44:45.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""yeah, Howard's presentation on the game""" start="00:44:49.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""stuff. I'm like, I'm going to go explore that""" start="00:44:51.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""now. Because it's my little house.""" start="00:44:54.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: You just have to make it less intimidating,""" start="00:44:57.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""right? And kind of change people's perception""" start="00:45:00.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that, oh, blogging or sharing tutorials or""" start="00:45:03.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""whatever, that's then when you're an expert,""" start="00:45:05.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""when you're an experienced,""" start="00:45:06.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to rather working out loud,""" start="00:45:09.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""thinking out loud, this is just that I'm""" start="00:45:11.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""learning along the way.""" start="00:45:12.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And it might not be the most efficient way to""" start="00:45:15.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""do things, but this is what I'm doing right""" start="00:45:17.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""now.""" start="00:45:17.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. And I had a handful of times where I""" start="00:45:23.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""posted something and someone was like,""" start="00:45:25.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Oh yeah, this is, this would have you tried""" start="00:45:27.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""this? Or I'm like, I didn't even know that""" start="00:45:30.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""existed. That makes this easier.""" start="00:45:32.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: I've written this like little hack and I'm""" start="00:45:37.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""very proud of it because it's clever.""" start="00:45:38.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then someone's like,""" start="00:45:39.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Oh yeah, there's a package for that.""" start="00:45:41.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's called this. Right?""" start="00:45:42.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thank you. Right? Yeah.""" start="00:45:43.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's just it's Yeah, it the fantastic part""" start="00:45:49.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it. I played Legos as a kid and me and my""" start="00:45:54.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""friends would play Legos at the house.""" start="00:45:55.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And Emacs has this like feeling of playing""" start="00:46:00.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Legos with a group of people across the""" start="00:46:04.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""world. In fact, 1 of my current,""" start="00:46:06.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""well, 1 of my best friends now,""" start="00:46:09.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we met a year ago. And it turns out we both""" start="00:46:14.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""love Emacs. We talk every Thursday and we""" start="00:46:18.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""hang out and we talk poetry.""" start="00:46:19.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""We talk Tom Petty. We talk Emacs.""" start="00:46:23.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""We talk software development.""" start="00:46:24.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""He does Python. I do Ruby.""" start="00:46:26.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Just anything and everything.""" start="00:46:29.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And it's also we both are curious because we""" start="00:46:36.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""don't use it the same way.""" start="00:46:38.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And we like how we accomplish a task.""" start="00:46:43.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I think that's the fascinating part to me is""" start="00:46:47.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""we each get to explore our way to interact""" start="00:46:50.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""with the computer uniquely by whatever""" start="00:46:54.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""pathways are in our brain.""" start="00:46:55.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""We see stuff, we pick it up,""" start="00:46:58.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and we're like, that doesn't quite work for""" start="00:47:00.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""me, or, oh, that worked really well.""" start="00:47:01.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Fascinating, like, I don't know,""" start="00:47:06.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""shared art installation.""" start="00:47:08.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: I think you're onto something that I also""" start="00:47:13.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""resonate with. 1 of the things that""" start="00:47:15.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""fascinates me about Emacs is all these""" start="00:47:18.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""people's configuration jobs are crystallized""" start="00:47:21.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""workflows. And it's really when you talk to""" start="00:47:24.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""them and you see how they're using it,""" start="00:47:26.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and you understand a little bit of their""" start="00:47:29.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""story and things that they need,""" start="00:47:32.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the ideas they've had,""" start="00:47:33.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that's really fascinating.""" start="00:47:35.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I think that's 1 of the things that makes""" start="00:47:37.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it possible to be perpetually curious about""" start="00:47:39.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs, because it's not just the,""" start="00:47:42.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you know, this is the,""" start="00:47:43.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""these are all the Lego pieces there are,""" start="00:47:45.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but you have this community of people who are""" start="00:47:47.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""using these Lego bricks in such fascinating""" start="00:47:50.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""ways and always inventing new things for it.""" start="00:47:53.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, new colors, new shapes,""" start="00:47:56.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""they show up. It's great.""" start="00:47:59.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: It's like powered twice or something like""" start="00:48:03.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that because it's like you can use Emacs with""" start="00:48:06.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""a thousand different customizations and then""" start="00:48:09.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you can interact with people who can each""" start="00:48:12.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""also Use Emacs in a thousand different ways""" start="00:48:16.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Mm-hmm, Right,""" start="00:48:17.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: Then you can both learn from each other and""" start="00:48:20.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that can go a thousand different ways.""" start="00:48:21.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So it's like, it's like powering your""" start="00:48:24.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yep.""" start="00:48:25.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: Something along those lines with each other""" start="00:48:27.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and like how different and how much you can""" start="00:48:30.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""learn from it.""" start="00:48:31.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, the kind of touching back to the mentee""" start="00:48:38.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that I have who went, he had originally""" start="00:48:41.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""started in Vim and then did VS code.""" start="00:48:44.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then we were talking and he was gonna go""" start="00:48:47.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""into Emacs and I didn't have a,""" start="00:48:50.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I mean, sure, that'd be great.""" start="00:48:52.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But he's like, I don't have a lot of time.""" start="00:48:53.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I'm like, well, go back to the place that""" start="00:48:56.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you have that experience.""" start="00:48:57.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And he did, And then he started writing Lua""" start="00:49:01.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""plugins. He was like, this is so much fun.""" start="00:49:02.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm like, good, you're on the right path.""" start="00:49:05.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like maybe there'll be space like over time,""" start="00:49:10.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""how Lua plugins and Emacs,""" start="00:49:13.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you know, who knows? I know that Lua,""" start="00:49:16.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you can use Fennel to write Lisp.""" start="00:49:19.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""In you write Lisp and it will transpile""" start="00:49:24.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Fennel to Lua. I forget how that plays out,""" start="00:49:29.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but we're not too far away from those 2""" start="00:49:31.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""things being able to play.""" start="00:49:34.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But I guess the question is,""" start="00:49:39.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""does it need to? I don't know.""" start="00:49:41.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah, I mean, even without direct code""" start="00:49:44.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""translation, the cross-pollination of ideas""" start="00:49:47.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""is certainly enough. I love the fact that""" start="00:49:51.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""people are borrowing ideas from VS Code and""" start="00:49:54.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""from Vim and people look at Emacs videos and""" start="00:49:57.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""other things and say, hey,""" start="00:49:58.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that's a cool thing in Emacs,""" start="00:49:59.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but I don't want to ever use Emacs.""" start="00:50:01.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm going to do that whole thing in Vim.""" start="00:50:03.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I think that's fantastic.""" start="00:50:04.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Absolutely. Yeah. I mean,""" start="00:50:07.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""monocultures die. They just do.""" start="00:50:10.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And computer software and computer industry""" start="00:50:16.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""pushes towards monoculture because of it""" start="00:50:24.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""wants the highest efficiency.""" start="00:50:26.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I'm like, I'm not,""" start="00:50:31.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I mean, sometimes I'm here for that,""" start="00:50:33.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but most of the time I'm like,""" start="00:50:35.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I want the bumps and the warts.""" start="00:50:37.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I want the art, the human interaction,""" start="00:50:40.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the like, why are we trying to accomplish""" start="00:50:42.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""this?""" start="00:50:43.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: It determines, It depends on how you""" start="00:50:46.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""determine efficiency because Emacs is far""" start="00:50:49.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Even if Emacs isn't multi-threaded is far""" start="00:50:52.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""more efficient because because of the mental""" start="00:50:56.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""model shifts because you're able to play and""" start="00:51:00.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""tweak with it and then have as much of a""" start="00:51:04.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""mental model shift for each task change that""" start="00:51:07.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you want. Like, yeah, I want my file manager""" start="00:51:10.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to not be an editable text buffer.""" start="00:51:16.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Although sometimes when I want to rename""" start="00:51:18.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""files, I want it to be that.""" start="00:51:20.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. Yeah, and really,""" start="00:51:23.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like, to be clear, I like the idea of Emacs""" start="00:51:26.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""as a projection of, like,""" start="00:51:29.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""how I think about stuff.""" start="00:51:30.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So it's that whatever my neurons have made a""" start="00:51:33.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""good pathway for, I can have Emacs flow with""" start="00:51:37.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""me. That efficiency side is I want a factory,""" start="00:51:41.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I want to stamp out widgets,""" start="00:51:43.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I want them to be the same,""" start="00:51:44.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""chop, chop, chop, chop,""" start="00:51:45.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""chop, chop. That emacs runs in its spirit""" start="00:51:51.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""along with vim contrary to that and I like""" start="00:51:57.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that""" start="00:51:57.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: emacs is a 1 of the things with the like the""" start="00:52:00.530" video="qanda-mentor" id="subtitle"]]
+[[!template text="""mental model of Emacs is you should look at""" start="00:52:03.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs like this is probably something that""" start="00:52:06.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""people should think about when they are""" start="00:52:08.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""introducing Emacs to other people is Emacs is""" start="00:52:10.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""a treasure trove of conflicting ways of""" start="00:52:15.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""solving the same problem so you get,""" start="00:52:18.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""so you can individuate yourself on how you""" start="00:52:22.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""actually want to solve that problem.""" start="00:52:23.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: Do you""" start="00:52:25.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: want Vim bindings or not?""" start="00:52:26.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""You get to choose. Or do you want Meow""" start="00:52:30.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""bindings? You can choose.""" start="00:52:31.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yep. Absolutely. Yeah.""" start="00:52:34.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I, I came, I'm, I consider my,""" start="00:52:38.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I, I lament because in 2005 I almost picked""" start="00:52:42.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""up Emacs and it wasn't until 2020 that I""" start="00:52:46.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""picked it up. And fortunately I picked it up""" start="00:52:49.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""when I did because I was able to look at""" start="00:52:54.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""things I had previously accomplished and find""" start="00:52:58.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""analogs And things like Helm and Ivy were""" start="00:53:05.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""both 2 different ways of doing it and consult""" start="00:53:08.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and then, or Selectrum and then consult,""" start="00:53:11.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like they all had these different ways And it""" start="00:53:15.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""felt great because I could find the thing""" start="00:53:18.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that worked for me. And they're close,""" start="00:53:24.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but then they also like branch out and do""" start="00:53:27.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""things differently. And it was so fascinating""" start="00:53:30.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to explore each of those and spend an hour or""" start="00:53:34.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""2 on a primary task in seeing where that""" start="00:53:39.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""little thread went. It's great.""" start="00:53:42.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: So tell me a bit more about how you got into""" start="00:53:47.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs. What pulled you""" start="00:53:51.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: in? Yeah, this is a great little moment.""" start="00:53:55.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I started in TextMate,""" start="00:53:59.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""That's kind of where I would say the""" start="00:54:03.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""beginning for coding for open source and""" start="00:54:06.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""using open source software.""" start="00:54:07.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Sorry, using open source frameworks and""" start="00:54:11.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""languages. So TextMate to Sublime,""" start="00:54:14.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""basically TextMate couldn't search very well""" start="00:54:18.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""at the time. It was getting bogged down.""" start="00:54:20.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So I moved to Sublime,""" start="00:54:21.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""which solved it, felt well,""" start="00:54:23.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""carried the same UI look with me.""" start="00:54:27.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then when I was at a conference,""" start="00:54:30.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""there was a talk about using an open source""" start="00:54:34.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""editor. I was like, yeah,""" start="00:54:36.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I need to do that. I really need to.""" start="00:54:38.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And Adam was viable. I was like,""" start="00:54:43.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Oh, this is really close.""" start="00:54:44.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'll use it. And I didn't think too much""" start="00:54:47.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""about it. And then the writing was on the""" start="00:54:49.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""wall, that Adam is going away.""" start="00:54:51.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I was like, I need to find an open source""" start="00:54:55.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""editor that speaks to me.""" start="00:54:57.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I said, all right,""" start="00:54:59.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Vim, This is my fifth time.""" start="00:55:00.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I will try. And I gave an earnest 2 weeks.""" start="00:55:06.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I'm just like, I cannot get this mental""" start="00:55:09.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""model in my head. So I'm like,""" start="00:55:11.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""all right, I set it down.""" start="00:55:12.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I can use Vim, I'm comfortable.""" start="00:55:14.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I think it's a great tool,""" start="00:55:15.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but my mental model doesn't map well there.""" start="00:55:19.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I'm like, all right,""" start="00:55:21.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""here we go, VS code. All right,""" start="00:55:24.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you're fine. But I feel like I might""" start="00:55:28.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""accidentally charge my credit card in the""" start="00:55:31.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""text editor on the default installation.""" start="00:55:33.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And that was alluded to by in 1 of the talks,""" start="00:55:38.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I forget who he German about mandating Emacs""" start="00:55:46.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""in his computer science classes.""" start="00:55:48.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""He mentioned like the Microsoft Office or""" start="00:55:51.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Microsoft Marketplace felt like it was there.""" start="00:55:54.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So that was 1, but the moment where I was""" start="00:55:58.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like, oh, hell no, VS Code.""" start="00:56:02.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Or I wanted to use a commit from the command""" start="00:56:08.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""palette, and it brought up an HTML text input""" start="00:56:12.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""area, and it was 30 characters.""" start="00:56:15.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And in that moment, I saw several things.""" start="00:56:23.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""1, I'm like, no, that's terrible because I""" start="00:56:27.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""want to write something meaningful.""" start="00:56:28.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""2, this is the behavior that this tool is""" start="00:56:33.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""modeling. That tells me that history and like""" start="00:56:38.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""how it is built is not important.""" start="00:56:41.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And yes, I can fix it and get around it.""" start="00:56:47.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I kind of did. And I was like,""" start="00:56:49.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the principles are just,""" start="00:56:51.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""they're there. And then also understanding""" start="00:56:53.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like there's a bunch of telemetry underneath""" start="00:56:56.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it. So I used VS Codium,""" start="00:56:58.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""there's still telemetry.""" start="00:57:00.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I was like, all right,""" start="00:57:03.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""2005 Jeremy, let's go try Emacs,""" start="00:57:07.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""let's see if we can do it.""" start="00:57:08.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I hopped in, I grabbed Space Max.""" start="00:57:13.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I was Like, yeah, this works pretty well.""" start="00:57:16.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like, I don't know how to use the keys very""" start="00:57:18.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""well. I'm figuring it out.""" start="00:57:20.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And. And I was like, you know what?""" start="00:57:26.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Why don't I do the tutorial?""" start="00:57:27.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And it was the tutorial that hooked me.""" start="00:57:30.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Not because everything made 100% sense""" start="00:57:36.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because Emacs is old. It had a lot of""" start="00:57:42.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""language that was hard to internalize,""" start="00:57:45.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but it presented it in a conversational I'm""" start="00:57:50.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""gonna meet you where you're at and we're""" start="00:57:52.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""gonna walk with it together.""" start="00:57:53.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then when I was done with the tutorial,""" start="00:57:56.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I said, you know, Space Max,""" start="00:57:58.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I don't understand it.""" start="00:57:59.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And it's got some performance.""" start="00:58:00.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It looks like there's like extra stuff that I""" start="00:58:04.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""may not need. So I went vanilla,""" start="00:58:08.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""nothing Emacs and just started working.""" start="00:58:11.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I was like, well, how do you do this?""" start="00:58:14.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: Although 5 minutes of Space Max or any of""" start="00:58:17.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""those Emacs distribution shows you""" start="00:58:19.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""unequivocally how different it can be.""" start="00:58:22.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: It was, it was, it was so amazing,""" start="00:58:25.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and it was so good. But I knew my nature was,""" start="00:58:31.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I was frustrated in, like I wrote an Atom""" start="00:58:34.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""package, and that was awful.""" start="00:58:37.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It was so terrible. But I knew what I wanted.""" start="00:58:42.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then I wrote, I started writing a VS code""" start="00:58:48.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and I'm like, oh no, no,""" start="00:58:49.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""no, we're not here for this.""" start="00:58:50.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so, yeah, SpaceMax showed me like this""" start="00:58:55.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""can look and feel like a space that I used to""" start="00:59:00.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""be in. And then it has more functionality,""" start="00:59:03.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""more stuff. It's gonna be great.""" start="00:59:07.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then I just was like,""" start="00:59:09.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm gonna go find my own.""" start="00:59:11.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm really happy that I took the path because""" start="00:59:15.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I just worked, wrote, and I'm like,""" start="00:59:19.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I bet you this, I bet you the tool,""" start="00:59:21.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I know it can do this because it,""" start="00:59:22.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you know, text me, did this or Adam,""" start="00:59:24.620" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm gonna go, I went on to Melpa and I found""" start="00:59:27.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""a couple different things.""" start="00:59:29.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm like, all right, let's try them.""" start="00:59:31.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm like, that's the 1,""" start="00:59:32.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""great. Roll it in, keep working.""" start="00:59:34.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I know it can do this.""" start="00:59:36.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Find a package. And so I built up this sense""" start="00:59:39.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""of the packages and my strategy was go to""" start="00:59:46.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Melpa, look at, that was the 1 that showed""" start="00:59:49.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""up, look at the number of downloads.""" start="00:59:52.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So I'm like, what's the high stuff?""" start="00:59:54.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""What really gets used?""" start="00:59:55.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""There's something there.""" start="00:59:57.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then also look at what was most recently""" start="01:00:00.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""updated. So kind of pivot on those along with""" start="01:00:03.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""a keyword search and I found the tools that""" start="01:00:06.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""worked well. But it really came down to like""" start="01:00:17.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that VS Code I was almost in,""" start="01:00:19.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but I've been around long enough to know what""" start="01:00:24.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Microsoft will do.""" start="01:00:25.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: For me, I was always like customizing things.""" start="01:00:32.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I think I saw some interesting emacs videos.""" start="01:00:34.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I wanted to try Well, I wanted to try working""" start="01:00:42.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""more with the keyboard and not need I think""" start="01:00:44.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: mm-hmm""" start="01:00:46.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: the mouse on a laptop And so I was looking""" start="01:00:51.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""explicitly for ways to just work on the""" start="01:00:54.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""keyboard only, which meant that I wasn't""" start="01:00:56.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""looking for programs that followed Cua,""" start="01:00:59.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""which really leaves you like 2 options,""" start="01:01:04.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Vim and Emacs. And when I looked at the 2,""" start="01:01:10.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I saw 1 of the big differentiating factors I""" start="01:01:13.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""saw was Tramp, which was,""" start="01:01:15.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""oh, you mean I get a SSH into a machine and""" start="01:01:18.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""have my customizations too?""" start="01:01:19.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yep. Yeah.""" start="01:01:22.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: And then I started using Emacs more and more.""" start="01:01:29.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Eventually I combined that with a tiling""" start="01:01:34.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""window manager, NixOS,""" start="01:01:36.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and started banishing as much of the GUI as I""" start="01:01:40.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""possibly could, running MPV or VLC,""" start="01:01:44.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""so I could edit so that my config files could""" start="01:01:49.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""be keyboard oriented. My settings config""" start="01:01:53.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""menus are now keyboard oriented.""" start="01:01:55.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And yeah, that was the incremental process of""" start="01:02:00.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""just, yeah, making the computer nicer,""" start="01:02:04.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""more efficient, and then you figure out all""" start="01:02:06.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the other advantages of the...""" start="01:02:08.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. How did you get in to it,""" start="01:02:13.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh, you're lost.""" start="01:02:18.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sasha? Your sound is gone.""" start="01:02:21.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: Sorry, my face mute button.""" start="01:02:27.345" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Okay, I'll tell you that story,""" start="01:02:29.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I get thought out of my head,""" start="01:02:30.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""so I forget it. But what you described,""" start="01:02:32.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Jerry, about kind of starting with the""" start="01:02:34.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""distribution and then pulling back and""" start="01:02:37.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""starting with vanilla and building up,""" start="01:02:39.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""kind of close the stories that I've heard""" start="01:02:41.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""from a lot of people in the community where""" start="01:02:42.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the distribution gives them kind of an end""" start="01:02:46.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""goal, at least work requirements,""" start="01:02:48.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So get the stuff done and they're not""" start="01:02:50.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""slugging through the weeds around the start.""" start="01:02:52.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I have a hard time modifying it because""" start="01:02:55.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""modifying the distribution itself is very""" start="01:02:57.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""different from the tools they see.""" start="01:02:59.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""They feel like they want to understand the""" start="01:03:01.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""different possible part.""" start="01:03:02.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And so then they pull back and say,""" start="01:03:04.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""okay, I've got this thing that can use""" start="01:03:06.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""everything to just get some quick work done,""" start="01:03:08.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but I have this thing that I can call,""" start="01:03:10.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that's mine. And I understand because I'm""" start="01:03:13.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""building it up from the ground up.""" start="01:03:15.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Okay, so that's like, oh,""" start="01:03:19.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""interesting, there's a lot of people who are""" start="01:03:21.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like that, and it really helps them to both""" start="01:03:23.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""have that insight, which is see through""" start="01:03:27.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""distributions and also videos of other""" start="01:03:29.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""people's workflows and press kind of""" start="01:03:32.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""conference presentations often about""" start="01:03:34.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""completely different topics,""" start="01:03:35.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""right? So someone whizzing through Ruby on""" start="01:03:37.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Rails or whatever else and doing all of this.""" start="01:03:39.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""But also having 1 help them break out,""" start="01:03:43.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""okay, well, there's a lot of work from where""" start="01:03:46.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I am to where that is.""" start="01:03:47.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""How do I do it without being overwhelmed?""" start="01:03:49.740" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Because if they try to learn everything,""" start="01:03:51.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""they'll go crazy. And then they'll fall.""" start="01:03:55.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And the brain is super important.""" start="01:03:57.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And how I got into this whole eMac thing was""" start="01:04:01.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I was reading all the computer science books""" start="01:04:03.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""in the university library and 1 of the Unix""" start="01:04:06.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""power tools had a chapter on Emacs and had""" start="01:04:09.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""them you know well there's another type of""" start="01:04:11.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""whatever. Okay that's interesting so I went""" start="01:04:14.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and tried it out But the reason I really got""" start="01:04:17.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""into it was because I was using John Wigley's""" start="01:04:19.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Planner Mode. This was before Org Mode came""" start="01:04:23.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""about. So Planner Mode was a link.""" start="01:04:25.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I said, hey, this is great.""" start="01:04:27.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I'm looking for ways to help out.""" start="01:04:29.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""If you need help verifying any bugs,""" start="01:04:31.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you know, send it to me and I'll do the""" start="01:04:34.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""figuring out. He's an author and an inventor.""" start="01:04:37.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: And then""" start="01:04:37.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: he made me the miniature for it.""" start="01:04:39.480" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So I'm like, okay. And then that's how I got""" start="01:04:42.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""to know this wonderful community of people""" start="01:04:44.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""who customize emacs so much.""" start="01:04:46.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And it just goes there because really,""" start="01:04:51.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""when you see all these different ways that""" start="01:04:54.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""people use in all these different stories""" start="01:04:55.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that you get send off because they're using""" start="01:05:00.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it to bake sourdough bread and do knitting""" start="01:05:03.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and all the crazy things that people come up""" start="01:05:06.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""with. I've been using it as an audio editor.""" start="01:05:08.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's just weird. It's just fun.""" start="01:05:11.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, that's great.""" start="01:05:13.100" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah. Every, Sasha, like 2 things that I was""" start="01:05:19.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""meaning to say is every time I see the on the""" start="01:05:22.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""EMAX conference the time that the scratch""" start="01:05:26.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""buffer with the big clock that is ticking""" start="01:05:29.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""down as and the multi multiple sized fonts As""" start="01:05:34.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I always think wow, that's really cool.""" start="01:05:37.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I didn't know Emacs could do that.""" start="01:05:38.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Wait, no, I saw that last year.""" start="01:05:40.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""How do you do, now, how do I do that?""" start="01:05:43.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Cause that's not, and that's not something I""" start="01:05:45.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""normally even think about Emacs doing.""" start="01:05:46.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right.""" start="01:05:48.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: I'll think about putting""" start="01:05:51.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: There's an EmacsConf-stream.el""" start="01:05:55.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""in the EmacsConf-el repository.""" start="01:05:59.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Grab the link and open but you can grab the""" start="01:06:03.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""code from there. It's basically the text""" start="01:06:07.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""property.""" start="01:06:08.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: But it's a thought that has repeated multiple""" start="01:06:15.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""years. Like, I didn't know we could do that""" start="01:06:17.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""way. I thought about that.""" start="01:06:18.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I had this exact thought last year when I saw""" start="01:06:21.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it.""" start="01:06:21.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: It's, we're like, I'm at the point where it's""" start="01:06:28.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like I have memories of remembering doing""" start="01:06:31.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""something. I don't have memories of doing it.""" start="01:06:34.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like all of the things.""" start="01:06:36.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like so it's again, we,""" start="01:06:40.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs helps expose like the,""" start="01:06:45.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like it's, anything's possible.""" start="01:06:48.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And we see how it becomes possible through""" start="01:06:53.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""other people. And then it gets our brains""" start="01:06:55.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""thinking about other ways of doing stuff.""" start="01:06:57.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And I think that's the exciting part.""" start="01:06:59.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Dog who wants to go play Frisbee.""" start="01:07:02.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: And that's actually 1 of the reasons why I""" start="01:07:07.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""want to encourage people to not only talk""" start="01:07:11.060" video="qanda-mentor" id="subtitle"]]
+[[!template text="""about Emacs and write Emacs blog posts,""" start="01:07:12.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but also actually demonstrate Emacs in the""" start="01:07:15.380" video="qanda-mentor" id="subtitle"]]
+[[!template text="""sense of doing something else.""" start="01:07:16.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So for example, we can match people at Emacs""" start="01:07:20.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""if you're presenting about Ruby on Rails and""" start="01:07:23.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you're doing all of your and education and""" start="01:07:27.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""things while you're presenting Rails,""" start="01:07:30.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you reach all these people who are interested""" start="01:07:32.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""in Rails, developer Rails,""" start="01:07:34.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but might not have even considered Emacs.""" start="01:07:36.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And here, you know, you probably would.""" start="01:07:41.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I would probably have a hard time writing an""" start="01:07:44.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""entire talk about adding text properties,""" start="01:07:47.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but the fact that there's a thing here that""" start="01:07:49.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""shows, hey, this is possible,""" start="01:07:50.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs can get people to think,""" start="01:07:53.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""okay, so how do I get from here to there?""" start="01:07:54.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Just showing the possible.""" start="01:07:57.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Yeah. Which source code is in the,""" start="01:08:02.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""whatchamacallit.""" start="01:08:02.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right, yeah. Yeah, I just saw that.""" start="01:08:04.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: There's a weird interesting thing how Emacs""" start="01:08:08.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""dovetails with people who are interested in""" start="01:08:12.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""making their own local first Zettelkasten,""" start="01:08:15.940" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because look at how many Zettelkasten""" start="01:08:17.720" video="qanda-mentor" id="subtitle"]]
+[[!template text="""packages you have. Especially with how much,""" start="01:08:21.300" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like it feels like, it seems like Emacs has""" start="01:08:23.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""more than Vim, but Vim is bigger or VS,""" start="01:08:27.439" video="qanda-mentor" id="subtitle"]]
+[[!template text="""feels like it has more than Vim or VS Code,""" start="01:08:30.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and VS Code's bigger. I'm not sure,""" start="01:08:31.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but it feels like it. Same thing with that""" start="01:08:36.819" video="qanda-mentor" id="subtitle"]]
+[[!template text="""HyperCore. That HyperCore felt more like a""" start="01:08:39.920" video="qanda-mentor" id="subtitle"]]
+[[!template text="""local first peer-to-peer system.""" start="01:08:42.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So there's a weird dovetail where they want""" start="01:08:48.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the knowledge bases that are local first,""" start="01:08:52.279" video="qanda-mentor" id="subtitle"]]
+[[!template text="""comprehensive, because 1 of the properties of""" start="01:08:58.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""the Zettelkasten or Org Mode agendas is that""" start="01:09:03.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's all your notes in 1 place.""" start="01:09:07.359" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's not, you know, your notes in either pad""" start="01:09:14.439" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and your notes in Google Calendar,""" start="01:09:19.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""your notes in 20 different places,""" start="01:09:23.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""your notes in Evernote.""" start="01:09:24.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's your notes in 1 program in 1 place""" start="01:09:28.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because you have to deal with them And""" start="01:09:30.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""they're going to be in files on your hard""" start="01:09:32.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""drive, and you're going to have packages""" start="01:09:34.279" video="qanda-mentor" id="subtitle"]]
+[[!template text="""there. That's the other weird thing too,""" start="01:09:37.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""is how many, like, you install an Emacs""" start="01:09:40.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""package, 1 of the guarantees,""" start="01:09:41.399" video="qanda-mentor" id="subtitle"]]
+[[!template text="""some of the guarantees you seem to get with""" start="01:09:43.439" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it is if it does use an external program,""" start="01:09:46.260" video="qanda-mentor" id="subtitle"]]
+[[!template text="""it's going to have a lot of configuration in""" start="01:09:48.399" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Emacs. It's going to be installed.""" start="01:09:51.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It's going to be local first.""" start="01:09:53.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Cause like you have flow bits,""" start="01:09:56.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but how many programs like are,""" start="01:09:59.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""are cloud first. And it feels like most of""" start="01:10:05.140" video="qanda-mentor" id="subtitle"]]
+[[!template text="""those are like org Trello,""" start="01:10:06.820" video="qanda-mentor" id="subtitle"]]
+[[!template text="""where it's like, I want to use org mode,""" start="01:10:10.160" video="qanda-mentor" id="subtitle"]]
+[[!template text="""but other people use Trello.""" start="01:10:12.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So I'm going to be grudgingly using this org""" start="01:10:15.460" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Trello to be a bridge between the 2,""" start="01:10:17.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""not because I wanted to use org,""" start="01:10:19.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""not because I wanted to use Trello in the""" start="01:10:21.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""first place or I started off with Trello and""" start="01:10:23.200" video="qanda-mentor" id="subtitle"]]
+[[!template text="""now I wanna use org mode.""" start="01:10:24.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right, no, you're that local first.""" start="01:10:27.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""The Thought I have is with the 2022 interest""" start="01:10:37.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""rates going up, the era of free money,""" start="01:10:43.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""or even like getting money for more,""" start="01:10:46.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""more money than it actually costs Like it was""" start="01:10:49.960" video="qanda-mentor" id="subtitle"]]
+[[!template text="""minting money. We are going to be seeing how""" start="01:10:55.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""these organizations that had financial""" start="01:10:59.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""runways, all of these cloud services,""" start="01:11:01.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""what's not gonna last because there's no""" start="01:11:06.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""funding. And like the durability of our local""" start="01:11:12.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""first plain text, free open source stuff.""" start="01:11:16.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Like I won't have to do a content migration""" start="01:11:21.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""unless I get a B of my bonnet and want to""" start="01:11:24.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""like change from org mode to markdown for""" start="01:11:27.700" video="qanda-mentor" id="subtitle"]]
+[[!template text="""some reason. Like I have it and Then I can""" start="01:11:30.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""send it out. So there's also like that posse""" start="01:11:32.980" video="qanda-mentor" id="subtitle"]]
+[[!template text="""principle publish on-site syndicate""" start="01:11:36.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""everywhere Is what emacs and vim like they""" start="01:11:41.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""allow for us to do?""" start="01:11:42.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: Well, that's part of the individuation is you""" start="01:11:46.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""have multiple options of doing something so""" start="01:11:48.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you can choose something so you can take""" start="01:11:51.580" video="qanda-mentor" id="subtitle"]]
+[[!template text="""ownership of your data in the way you want.""" start="01:11:54.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""It all dovetails into each other and I think""" start="01:12:00.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""that's something worth thinking about,""" start="01:12:02.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""especially in relation with who should learn""" start="01:12:05.540" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and how should you introduce Emacs to people,""" start="01:12:08.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because like, with the idea of people should""" start="01:12:14.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""try an Emacs distribution and then start""" start="01:12:16.560" video="qanda-mentor" id="subtitle"]]
+[[!template text="""their own from scratch,""" start="01:12:17.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""just so that they, like,""" start="01:12:18.880" video="qanda-mentor" id="subtitle"]]
+[[!template text="""if you use it for 10 minutes,""" start="01:12:20.280" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you'll gain so much because you use your 3""" start="01:12:24.400" video="qanda-mentor" id="subtitle"]]
+[[!template text="""and then all of a sudden you realize,""" start="01:12:25.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you also know how malleable Emacs can be.""" start="01:12:29.180" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And then you start saying,""" start="01:12:30.520" video="qanda-mentor" id="subtitle"]]
+[[!template text="""now, how do I do that?""" start="01:12:32.000" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So I get to make those choices?""" start="01:12:33.240" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah.""" start="01:12:34.840" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 2]: Or you might say, this person did it well""" start="01:12:39.340" video="qanda-mentor" id="subtitle"]]
+[[!template text="""enough, I don't have to.""" start="01:12:40.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: That reminded me of something that I also""" start="01:12:43.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""wanted to mention, shocking word,""" start="01:12:45.360" video="qanda-mentor" id="subtitle"]]
+[[!template text="""as in malleability. Another tip I came""" start="01:12:49.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""across, don't know from whom,""" start="01:12:50.600" video="qanda-mentor" id="subtitle"]]
+[[!template text="""might have been from you,""" start="01:12:51.500" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I don't know, is to define aliases,""" start="01:12:53.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""because we use different words from what the""" start="01:12:56.320" video="qanda-mentor" id="subtitle"]]
+[[!template text="""functions are. It's 1 of those little meta""" start="01:12:58.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""things that, you know,""" start="01:13:00.420" video="qanda-mentor" id="subtitle"]]
+[[!template text="""If you keep calling it something else,""" start="01:13:02.080" video="qanda-mentor" id="subtitle"]]
+[[!template text="""just define it so that you can call it like""" start="01:13:05.900" video="qanda-mentor" id="subtitle"]]
+[[!template text="""commencing your words.""" start="01:13:06.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: it's interesting. Anyway,""" start="01:13:12.440" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yeah. Yeah, gotta go disappear and get ready""" start="01:13:14.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""for my dog. Okay, I'll listen to what you""" start="01:13:17.220" video="qanda-mentor" id="subtitle"]]
+[[!template text="""say. All right, I""" start="01:13:18.120" video="qanda-mentor" id="subtitle"]]
+[[!template text="""[Speaker 1]: I need to take my dogs out and play Frisbee.""" start="01:13:20.020" video="qanda-mentor" id="subtitle"]]
+[[!template text="""They have been so patient.""" start="01:13:21.780" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So it was great talking with all of you and""" start="01:13:26.040" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Sasha, thanks for the organizing energy""" start="01:13:29.640" video="qanda-mentor" id="subtitle"]]
+[[!template text="""you've put into this. Plasma Strike,""" start="01:13:31.680" video="qanda-mentor" id="subtitle"]]
+[[!template text="""thank you for your presentation.""" start="01:13:32.800" video="qanda-mentor" id="subtitle"]]
+[[!template text="""I love this conference.""" start="01:13:34.860" video="qanda-mentor" id="subtitle"]]
+[[!template text="""So thank you very much.""" start="01:13:36.660" video="qanda-mentor" id="subtitle"]]
+[[!template text="""And now have a good rest of your Sunday.""" start="01:13:41.760" video="qanda-mentor" id="subtitle"]]
+[[!template text="""Bye.""" start="01:13:43.100" video="qanda-mentor" id="subtitle"]]
+
+Questions or comments? Please e-mail [jeremy@jeremyfriesen.com](mailto:jeremy@jeremyfriesen.com?subject=Comment%20for%20EmacsConf%202023%20mentor%3A%20Mentoring%20VS-Coders%20as%20an%20Emacsian%20%28or%20How%20to%20show%20not%20tell%20people%20about%20the%20wonders%20of%20Emacs%29)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/mentor-before.md b/2023/info/mentor-before.md
new file mode 100644
index 00000000..bcf457eb
--- /dev/null
+++ b/2023/info/mentor-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 11-min talk; Q&A: BigBlueButton conference room
+Status: TO_INDEX_QA
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="mentor-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 10:44 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.opus">Download --main.opus (6.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm">Download --main.webm (26MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/sV9eKtGiPYZi5urxjoqerv">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="mentor-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="mentor-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus"></audio></div><div></div>Duration: 1:13:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers--trimmed.webm">Download --answers--trimmed.webm (176MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus">Download --answers.opus (25MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm">Download --answers.webm (176MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/mentor-nav.md b/2023/info/mentor-nav.md
new file mode 100644
index 00000000..86a45646
--- /dev/null
+++ b/2023/info/mentor-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/steno">Programming with steno</a>
+Next by track: <a href="/2023/talks/web">Emacs saves the Web (maybe)</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/multi-after.md b/2023/info/multi-after.md
new file mode 100644
index 00000000..513b51ba
--- /dev/null
+++ b/2023/info/multi-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20multi%3A%20Emacs%20for%20the%20Indecisive%2FMulti-Talented)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/multi-before.md b/2023/info/multi-before.md
new file mode 100644
index 00000000..af9cef3a
--- /dev/null
+++ b/2023/info/multi-before.md
@@ -0,0 +1,4 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/multi-nav.md b/2023/info/multi-nav.md
new file mode 100644
index 00000000..0441b432
--- /dev/null
+++ b/2023/info/multi-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a>
+Next by track: <a href="/2023/talks/hn">The many ways to browse Hacker News from Emacs</a>
+Track: <span class="sched-track gen">gen</span>
+</div>
diff --git a/2023/info/nabokov-after.md b/2023/info/nabokov-after.md
new file mode 100644
index 00000000..0e1ccfe4
--- /dev/null
+++ b/2023/info/nabokov-after.md
@@ -0,0 +1,512 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="nabokov-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-nabokov" id="subtitle"]]
+
+[[!template text="""Hello, fellow Emacs enthusiasts.""" start="00:00:00.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""My name is Edmund Jorgensen.""" start="00:00:05.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I'm a software engineer by day,""" start="00:00:06.800" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""but by night I love to write novels,""" start="00:00:08.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and I lean on Emacs heavily""" start="00:00:10.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""for both of these activities.""" start="00:00:11.774" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Today, I would like to talk to you about how Emacs,""" start="00:00:13.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""specifically with Org mode,""" start="00:00:15.880" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""has helped me manage some of the practical""" start="00:00:17.320" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""difficulties of writing long-form prose,""" start="00:00:18.840" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""novels in my case,""" start="00:00:20.940" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and I'd like to get at this by talking about how""" start="00:00:22.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""another, much more famous novelist managed""" start="00:00:24.320" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""some of those same difficulties in a way""" start="00:00:26.440" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""that makes me suspect he might well use Emacs""" start="00:00:28.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and Org mode himself""" start="00:00:30.874" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""if he were still alive and writing today.""" start="00:00:31.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""This talk will probably be""" start="00:00:34.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""of the most interest to listeners""" start="00:00:35.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""who either already write long-form prose in Emacs""" start="00:00:36.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or are considering doing so,""" start="00:00:39.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""but I think that anyone""" start="00:00:40.880" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""with an interest in literature or Emacs""" start="00:00:42.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""will find something to take away.""" start="00:00:44.080" video="mainVideo-nabokov" id="subtitle"]]
+
+[[!template new="1" text="""Nabokov's process of writing novels""" start="00:00:45.760" video="mainVideo-nabokov" id="subtitle"]]
+
+[[!template text="""So let's get to it.""" start="00:00:45.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Here's a picture of a man lying on a bed,""" start="00:00:51.120" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""writing something on an index card.""" start="00:00:53.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""If we didn't know any better,""" start="00:00:56.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""we might think that he was just jotting down""" start="00:00:57.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""a recipe for beef stew or something like that.""" start="00:00:58.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""But in fact, this is not just any old man.""" start="00:01:01.680" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""This is Vladimir Nabokov, one of the most""" start="00:01:03.840" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""celebrated novelists of the 20th century,""" start="00:01:06.174" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and he's not jotting down""" start="00:01:08.080" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""a recipe for beef stew in this picture.""" start="00:01:09.280" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""He's actually hard at work here,""" start="00:01:11.480" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""composing a classic of English literature""" start="00:01:12.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""on an index card.""" start="00:01:15.007" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""That's how he wrote all his novels, in fact,""" start="00:01:16.560" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""on index cards.""" start="00:01:18.800" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I don't mean that he just took notes on these cards""" start="00:01:20.160" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or wrote outlines on them.""" start="00:01:22.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""He did both of those things as well,""" start="00:01:24.160" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""but he also wrote the actual prose of his novels,""" start="00:01:25.680" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""word by word, sentence by sentence, on index cards.""" start="00:01:28.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Let's see what that looked like at scale.""" start="00:01:32.800" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""This box you see here,""" start="00:01:37.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""full of groups of bundled cards,""" start="00:01:39.440" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""is what a novel in progress looked like for Nabokov.""" start="00:01:41.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""If you squint, you can see that these cards""" start="00:01:43.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""were from the composition of Lolita,""" start="00:01:46.080" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""probably his most famous novel.""" start="00:01:47.640" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""So why did he write novels on index cards?""" start="00:01:50.560" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""It's not necessarily an obvious choice.""" start="00:01:53.720" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Yes, sadly, Emacs wasn't available to him at the time,""" start="00:01:56.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""but most writers in his day,""" start="00:01:59.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""if they weren't using typewriters,""" start="00:02:01.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""which were available,""" start="00:02:02.640" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""were using notebooks or loose-leaf sheets""" start="00:02:03.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or something like that.""" start="00:02:06.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Not these tiny little index cards.""" start="00:02:07.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""But Nabokov loved index cards.""" start="00:02:09.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""He swore by them because they represented""" start="00:02:11.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""an elegant solution""" start="00:02:14.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""to three of the most pressing practical problems""" start="00:02:15.200" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""that every novelist faces.""" start="00:02:18.000" video="mainVideo-nabokov" id="subtitle"]]
+
+[[!template new="1" text="""Three practical problems novelists face""" start="00:02:24.080" video="mainVideo-nabokov" id="subtitle"]]
+
+[[!template text="""Writing a good novel""" start="00:02:24.080" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""is artistically difficult, of course.""" start="00:02:25.307" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""You have to write something interesting""" start="00:02:27.480" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""with a good story,""" start="00:02:28.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""something that people want to read.""" start="00:02:30.107" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""But writing any novel at all,""" start="00:02:31.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""whether it's good or bad,""" start="00:02:33.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""is brutally, practically difficult.""" start="00:02:35.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""You're hacking something like 100,000 words""" start="00:02:37.720" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""into unified shape over a long period of time,""" start="00:02:39.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""months or years.""" start="00:02:42.440" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""There are organizational challenges""" start="00:02:43.800" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""inherent in that process,""" start="00:02:45.720" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and each writer needs practical techniques""" start="00:02:46.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""to manage those challenges.""" start="00:02:48.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""The most basic challenge, of course, is that,""" start="00:02:51.080" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""unless you're trying to bring back""" start="00:02:53.400" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""the Homeric Bard tradition""" start="00:02:55.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""of reciting books from memory in firelit halls,""" start="00:02:57.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""you need to actually set down""" start="00:02:59.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""those 100,000 words on some medium.""" start="00:03:01.200" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""In Nabokov's case, index cards worked fine for this.""" start="00:03:03.320" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""A little cramped, maybe, but workable.""" start="00:03:05.840" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Secondly, as you're writing,""" start="00:03:08.440" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""you're bound to think of little but important things""" start="00:03:09.680" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""about the story that you want to record.""" start="00:03:11.720" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I'm not talking here about big thematic notes""" start="00:03:13.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or research that can go in a separate document,""" start="00:03:16.207" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""but smaller, more contextual notes""" start="00:03:19.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""that belong right along the prose that they refer to.""" start="00:03:21.160" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""These might be reminders, like,""" start="00:03:23.880" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""&quot;Remember to clean up this sentence,&quot;""" start="00:03:26.640" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or questions for yourself""" start="00:03:28.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""to consider during rewrites, like,""" start="00:03:29.707" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""&quot;Why does Shirley feel this way here?&quot;""" start="00:03:31.907" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Nabokov recorded these notes""" start="00:03:33.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""in the margins of his cards or on the backs.""" start="00:03:35.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Paper, in general, is great for this kind of""" start="00:03:37.560" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""intertextual note-taking.""" start="00:03:40.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""That's not particular to index cards.""" start="00:03:41.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""But what Nabokov really loved about index cards""" start="00:03:44.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""was how they solved the novelist's""" start="00:03:47.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""third and most difficult practical problem,""" start="00:03:49.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""which is imposing some kind of structure""" start="00:03:52.120" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""on this mountain of words.""" start="00:03:54.280" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""To have any hope of wrangling a novel into being,""" start="00:03:55.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""you need some way to break it down""" start="00:03:58.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""into parts, chapters, scenes, snatches of dialogue.""" start="00:04:00.120" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""You need some kind of higher-level outline""" start="00:04:03.640" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""that you can read, navigate, and rearrange""" start="00:04:05.840" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""as you consider and reconsider your story.""" start="00:04:08.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""You need structure.""" start="00:04:09.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Index cards gave Nabokov a really powerful way""" start="00:04:11.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""to impose this structure""" start="00:04:14.880" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""because they created small, independent""" start="00:04:16.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""chunks of prose""" start="00:04:18.560" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""that he could bundle together into groups,""" start="00:04:19.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""like we saw in the box.""" start="00:04:21.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""This let him navigate his novel in progress quickly.""" start="00:04:22.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""He could just flip through those bundles,""" start="00:04:31.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""bundle by bundle, instead of card by card.""" start="00:04:33.800" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""He could also impose on""" start="00:04:36.120" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and modify the structure of his novel""" start="00:04:38.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""just by shuffling those bundles around.""" start="00:04:40.080" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""So that's why Nabokov loved index cards""" start="00:04:42.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""for writing novels.""" start="00:04:45.307" video="mainVideo-nabokov" id="subtitle"]]
+
+[[!template new="1" text="""Org mode for writing novels""" start="00:04:46.560" video="mainVideo-nabokov" id="subtitle"]]
+
+[[!template text="""Now I'd love to talk about""" start="00:04:46.560" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""why I love Org mode so much for writing novels""" start="00:04:48.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and how it helps me tackle those same challenges.""" start="00:04:51.280" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""The first practical challenge,""" start="00:04:54.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""recording your words on some medium,""" start="00:05:01.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""is pretty simple.""" start="00:05:03.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Org mode is a part of Emacs,""" start="00:05:04.774" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""a text editor, so you can just type in your text.""" start="00:05:06.440" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""We're not going to spend any more time on that.""" start="00:05:09.200" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""For the second practical challenge,""" start="00:05:10.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""recording small intertextual notes,""" start="00:05:13.440" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Org mode offers comments, like this one here.""" start="00:05:16.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""The comment, &quot;maybe I need to say which store?&quot;,""" start="00:05:19.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""with the leading pound sign there.""" start="00:05:21.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I think that comments are generally""" start="00:05:23.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""underappreciated outside of coding.""" start="00:05:25.874" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""When writing fiction, for example,""" start="00:05:28.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I love that Org mode lets me keep these comments""" start="00:05:29.800" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""close to the prose they refer to.""" start="00:05:32.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I can see right here that I'm talking about""" start="00:05:33.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""saying which store in this first line,""" start="00:05:37.160" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""&quot;One day, Bob went to the store.&quot;""" start="00:05:39.120" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I get to keep these things close to""" start="00:05:40.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""the prose they refer to""" start="00:05:44.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""without ever having to worry that""" start="00:05:45.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""they'll accidentally be exported to a reader.""" start="00:05:46.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""That's great.""" start="00:05:48.480" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""So let's talk about how Org Mode handles the third""" start="00:05:50.540" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and most brutal challenge of all, which is structure.""" start="00:05:52.807" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Here we've taken the same text""" start="00:06:00.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and we've imposed some structure on it.""" start="00:06:03.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Like index cards,""" start="00:06:04.880" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""this is where Org mode really shines.""" start="00:06:07.807" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Org mode extends outline mode,""" start="00:06:09.640" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""which is built around the concept of header lines,""" start="00:06:12.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""with different levels denoted by""" start="00:06:14.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""different numbers of leading asterisks (`*`).""" start="00:06:15.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Personally, I tend to use top line headers""" start="00:06:18.080" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""as chapters and second line headers as scenes.""" start="00:06:20.974" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""You can see that here, where chapter one says""" start="00:06:23.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""&quot;Bob and Shirley meet.&quot;""" start="00:06:26.080" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Here's a scene, &quot;Bob goes to the store.&quot;""" start="00:06:27.320" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""And here below is chapter two, yet unwritten,""" start="00:06:29.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""where Bob goes to work.""" start="00:06:32.640" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Pretty exciting. Since Org mode supports folding,""" start="00:06:34.320" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I can read quickly through a summary of my novel""" start="00:06:39.680" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""at either the chapter or the scene level""" start="00:06:42.160" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""just by flipping through different levels of""" start="00:06:44.080" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""visibility, just like Nabokov could flip through""" start="00:06:46.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""different bundles of cards.""" start="00:06:48.800" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""So here's the chapter level.""" start="00:06:51.307" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I can see at a chapter level,""" start="00:06:52.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""&quot;Bob and Shirley meet&quot;, &quot;Bob goes to work.&quot;""" start="00:06:54.720" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""And then I can get one level more specific""" start="00:06:56.680" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and see the various scenes in the chapter""" start="00:06:59.080" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""at the second header level.""" start="00:07:01.160" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""And I can, if I want,""" start="00:07:02.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I can go all the way back to the prose level.""" start="00:07:04.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""And just like Nabokov shuffling""" start="00:07:10.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""his index cards around,""" start="00:07:12.774" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I can move scenes around as logical units.""" start="00:07:14.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Let's say, for example,""" start="00:07:16.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""that we wanted to move Bob's thoughts about life,""" start="00:07:18.200" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""which are down here, up further.""" start="00:07:20.400" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Well, I can grab &quot;Bob thinks about life,&quot;""" start="00:07:22.920" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and I can move it up or down as a logical unit.""" start="00:07:26.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""But Org mode offers some even more powerful tricks""" start="00:07:30.480" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""for structuring and navigating your novel,""" start="00:07:34.720" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""beyond what even index cards can do.""" start="00:07:36.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""For example, you can use tags""" start="00:07:38.560" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""on your scene headings. You can see these here.""" start="00:07:41.974" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""They're the prominent colon separated words""" start="00:07:44.480" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""on the header lines.""" start="00:07:46.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""In this case, I'm using `bob` and `shirley`.""" start="00:07:47.560" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""These tags can represent characters""" start="00:07:49.840" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""who appear in the scene,""" start="00:07:52.720" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""which is what I'm doing here,""" start="00:07:53.674" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or locations in which the scenes occur,""" start="00:07:54.640" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or plot lines that the scenes further,""" start="00:07:57.207" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""really anything that you want.""" start="00:07:59.160" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""And you can then use Org mode's sparse view features""" start="00:08:00.480" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""to query a set of tags and trim your novel down to""" start="00:08:04.240" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""a subset of related scenes.""" start="00:08:07.560" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""For example, let's say we want to filter down to""" start="00:08:09.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""only the scenes in which Shirley appears.""" start="00:08:12.560" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""This could allow us to read quickly through""" start="00:08:14.800" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""just a subset of the prose,""" start="00:08:25.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""the prose that referred to Shirley in some way.""" start="00:08:27.440" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Maybe we want to do that""" start="00:08:29.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""to check continuity for her character,""" start="00:08:31.360" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or make sure that her character develops""" start="00:08:33.280" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""along a compelling arc,""" start="00:08:35.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or even just to get a sense""" start="00:08:37.000" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""of how much airtime she gets in the novel.""" start="00:08:38.320" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Thanks for listening to this whirlwind exploration""" start="00:08:44.040" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""of some of the practical challenges of writing""" start="00:08:49.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""novels and other long-form prose,""" start="00:08:51.880" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and how Org mode can help tackle them.""" start="00:08:53.600" video="mainVideo-nabokov" id="subtitle"]]
+
+[[!template new="1" text="""Takeaways and next steps""" start="00:08:55.600" video="mainVideo-nabokov" id="subtitle"]]
+
+[[!template text="""I'd like to leave you with a couple takeaways""" start="00:08:55.600" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and next steps for those who are interested.""" start="00:08:57.880" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""First, if you're writing a novel""" start="00:08:59.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or other long-form prose,""" start="00:09:01.907" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""or even considering doing so,""" start="00:09:02.841" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""take a look at Org mode,""" start="00:09:04.874" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""especially if you're already familiar with Emacs.""" start="00:09:06.108" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""It won't solve the artistic problem""" start="00:09:08.375" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""of writing an interesting book for you,""" start="00:09:10.475" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""not even with a ChatGPT plugin,""" start="00:09:11.875" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""but it's a fantastic tool for managing""" start="00:09:13.908" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""some of the practical challenges""" start="00:09:15.875" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""that come with hacking 100,000 words into shape""" start="00:09:16.875" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""over the months or years that that process takes.""" start="00:09:19.841" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Second, if you're interested in learning more""" start="00:09:22.741" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""about some of the advanced features of Org mode""" start="00:09:25.840" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and how they can help in this process,""" start="00:09:27.960" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I wrote a long blog post about my difficulties""" start="00:09:29.520" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""writing a novel with 13 interconnected subplots,""" start="00:09:32.320" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""and how Emacs and Org mode saved it from imploding.""" start="00:09:34.880" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""I'll put a link here below. [ewj.io/emacs]""" start="00:09:37.760" video="mainVideo-nabokov" id="subtitle"]]
+[[!template text="""Thanks for listening, and Emacs on!""" start="00:09:44.000" video="mainVideo-nabokov" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+<a name="nabokov-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: About 3""" start="00:00:03.560" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""seconds. And I believe we are live.""" start="00:00:16.020" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Hi Edmund, how are you doing?""" start="00:00:17.280" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: Hi, how's it going Leo?""" start="00:00:19.240" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I'm doing well, thanks.""" start="00:00:20.279" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Yourself?""" start="00:00:20.560" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 0]: I'm also doing well. So Edmund doesn't have""" start="00:00:24.480" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""his webcam on but he will be able to answer""" start="00:00:26.980" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""questions that you ask inside of the Azure""" start="00:00:29.960" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""pad that I've shared again on IRC.""" start="00:00:32.159" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""By the way, we only have 1 question and we""" start="00:00:35.440" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""have about 40 minutes of question time,""" start="00:00:37.120" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""so feel free to add as many questions as you""" start="00:00:40.380" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""want and in the meantime,""" start="00:00:41.940" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""we'll get started on the first 1.""" start="00:00:43.380" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Unless, Edmond, do you have anything to say""" start="00:00:45.020" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""after your presentation?""" start="00:00:45.920" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: No, we can jump in.""" start="00:00:48.280" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, lovely. So first question,""" start="00:00:51.560" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""is the index, sorry, does the index really""" start="00:00:54.940" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""matter here? I mean his colleague is also""" start="00:00:57.840" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""using some A4 paper and you think that the""" start="00:01:00.380" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""index card is the most important thing here?""" start="00:01:02.400" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: That's a great question.""" start="00:01:04.540" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I mean, I think you can do anything with a""" start="00:01:08.000" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""larger piece of paper that you can do with a""" start="00:01:09.520" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""smaller piece of paper.""" start="00:01:10.240" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""But I actually encourage you to try this out.""" start="00:01:12.280" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I did, not for research for this talk,""" start="00:01:14.820" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""but just when I read about Nabokov and his""" start="00:01:17.040" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""index cards to begin with,""" start="00:01:18.160" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I kind of tried it out a little bit and wrote""" start="00:01:20.380" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""some shorter things on index cards and so on""" start="00:01:22.480" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""and there really is something about the size""" start="00:01:24.640" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""and the kind of ability to manipulate them.""" start="00:01:27.940" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""You really can bundle them and move them""" start="00:01:30.200" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""around easier and I think that that I think""" start="00:01:33.420" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""he enjoyed that. So sure I mean I think you""" start="00:01:35.800" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""can do anything with a4 paper that you could""" start="00:01:37.540" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""do with index cards but I think there's""" start="00:01:38.860" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""something about that form that lends itself""" start="00:01:40.760" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""to the especially to the reorganization maybe""" start="00:01:43.840" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""to the focus as well just because it's""" start="00:01:45.540" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""smaller but but definitely to the""" start="00:01:47.060" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""reorganization.""" start="00:01:47.220" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 0]: Definitely So we have a lot more questions""" start="00:01:53.600" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""now. So thank you, everyone,""" start="00:01:54.640" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""for answering my plea for more questions.""" start="00:01:56.479" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Next question. How do you explore the second""" start="00:01:59.760" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""level headings, i.e. The scenes in this""" start="00:02:01.880" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""example, without the heading itself,""" start="00:02:03.600" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""just the content? Is that clear enough?""" start="00:02:05.740" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: Great question. Yeah, so I've tried 2 ways,""" start="00:02:09.240" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""sorry, 3 ways with this and landed on 1 that""" start="00:02:13.280" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I like. Originally I used the OX package.""" start="00:02:16.080" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""There's an OX ignore thing in there where you""" start="00:02:20.080" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""can add an ignore tag to where you don't want""" start="00:02:23.240" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""the headings, but you do want the content""" start="00:02:24.720" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""exported. I found that a little bit annoying,""" start="00:02:26.920" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""just visually annoying,""" start="00:02:27.940" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""when I'm, again, My theme here is navigating""" start="00:02:31.320" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""100,000 word documents effectively and having""" start="00:02:34.840" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""that extra visual noise was kind of a pain.""" start="00:02:36.900" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""So I ended up, first I just did like a dumb""" start="00:02:40.520" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""ox script as part of my publication kind of""" start="00:02:43.040" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""pipeline that removed headlines at the scene""" start="00:02:47.720" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""level. And then actually,""" start="00:02:48.940" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""because I ended up leaning so heavily on""" start="00:02:50.980" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Pandoc, and Pandoc, for those of you who have""" start="00:02:53.680" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""not looked at recent versions of Pandoc,""" start="00:02:56.200" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""they've got a really fantastic way to use Lua""" start="00:03:00.920" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""at this point to write filters.""" start="00:03:02.420" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""So you can kind of take the AST of your""" start="00:03:04.940" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""document and run these very simple Lua""" start="00:03:07.120" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""filters over it. They used to be in Haskell,""" start="00:03:09.140" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""which I'm not smart enough to write Haskell""" start="00:03:11.780" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""is 1 of the things that I've discovered.""" start="00:03:13.140" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I keep bouncing off of it,""" start="00:03:14.440" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""but I'm just smart enough to write Lua.""" start="00:03:16.360" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""And so I use a Lua filter now,""" start="00:03:19.480" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""which I'm happy to publish to anyone who's""" start="00:03:21.180" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""interested. That basically lets me say,""" start="00:03:22.880" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""you know, what level headings to get rid of""" start="00:03:27.440" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""the heading, but publish the content.""" start="00:03:28.740" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""And part of the reason that's been useful is""" start="00:03:30.320" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""that some of the other novels I'm working on""" start="00:03:31.920" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""for example have different levels of""" start="00:03:33.540" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""hierarchy where maybe there's a part and then""" start="00:03:35.640" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""you know at the top level and then chapter""" start="00:03:37.260" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""and then scene and it's now the third level""" start="00:03:39.160" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""instead of the second and it's much easier in""" start="00:03:41.400" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""the Lua to just be like remove the third""" start="00:03:43.840" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""level headings or the second level headings""" start="00:03:45.400" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""or whatever it is so that's been that's been""" start="00:03:47.680" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""helpful.""" start="00:03:47.860" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 0]: Great, Moving on to the next question,""" start="00:03:53.040" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""slightly off topic, where can we see your""" start="00:03:58.120" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""novels?""" start="00:03:58.260" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh well yeah, you can,""" start="00:04:01.060" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""they're on Amazon, there's 2 of them and a""" start="00:04:05.500" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""book of short stories.""" start="00:04:06.160" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I think the short stories and the second""" start="00:04:10.120" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""novel, which is called World Enough in Time,""" start="00:04:11.960" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""which is the 1 that kind of prompted this""" start="00:04:13.940" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""talk, are probably of more interest to this,""" start="00:04:16.160" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""to the Emacs focused group.""" start="00:04:18.320" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""The first one's like a philosophical murder""" start="00:04:20.380" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""mystery, but the World Enough in Time is a""" start="00:04:25.240" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""kind of Douglas Adams inspired sci-fi comedy""" start="00:04:29.820" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""about kind of hijinks on a relativistic speed""" start="00:04:34.440" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""space cruiser, which was a lot of fun to""" start="00:04:37.360" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""write. It has a lot of twisty subplots,""" start="00:04:38.980" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""which is where I developed that technique of""" start="00:04:42.500" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""being able to filter down to tags and see a""" start="00:04:46.560" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""reduced version of the novel,""" start="00:04:47.840" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""which was very handy when trying to juggle 13""" start="00:04:51.560" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""subplots. So yeah, check it out.""" start="00:04:53.520" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 0]: Great, we'll make sure that you have the""" start="00:04:57.240" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""links available on the talk page afterwards.""" start="00:04:59.860" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Right now I sadly have to host so I cannot""" start="00:05:03.420" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""look up the links but we'll make sure or if""" start="00:05:05.680" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: I put it in there for you.""" start="00:05:08.100" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 0]: anyone in the chat... Oh you did?""" start="00:05:09.020" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Yeah. In the meantime we'll move on to the""" start="00:05:13.800" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""next question. Have you looked at the Denote""" start="00:05:16.560" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""signature features? The hierarchical nature""" start="00:05:19.700" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""of Lumen's ideas and index cards works well""" start="00:05:23.180" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""with Denote signatures.""" start="00:05:24.100" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""So are you familiar with Denote first?""" start="00:05:26.120" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: I am not. No, it sounds like something that I""" start="00:05:28.740" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""should check out.""" start="00:05:29.240" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, Denote is a way to work with slip""" start="00:05:33.080" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""boxes. We talked a little bit about it""" start="00:05:35.460" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""earlier today. We talked about Orgroam,""" start="00:05:37.240" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""we talked about Denote as well as a lighter""" start="00:05:40.600" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""alternative to Orgroam.""" start="00:05:41.580" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""And yeah, the organization with index cards""" start="00:05:45.520" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""feels like it's something that would highly""" start="00:05:47.360" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""benefit from linking and back links and any""" start="00:05:50.740" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""kind of UX functionality for relating pieces""" start="00:05:53.880" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""of information. So yeah,""" start="00:05:56.680" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""definitely look it up.""" start="00:05:57.620" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I'm a heavy org-roam user.""" start="00:06:00.040" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I use org-roam for a lot of different stuff""" start="00:06:03.280" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""and I would love, I will definitely check out""" start="00:06:05.740" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Denote as an alternative.""" start="00:06:06.740" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 0]: Sure, I'm not particularly personally""" start="00:06:09.520" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""familiar with what Signature is within Denote""" start="00:06:11.720" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""and it'd be great if the person who asked the""" start="00:06:13.940" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""question could perhaps provide more details""" start="00:06:15.580" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""so that Edmund could get a little more""" start="00:06:17.980" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""information when he returns to the document.""" start="00:06:20.000" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""But yeah, if you're using Org-ROM,""" start="00:06:21.480" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""you're already within the mindset that you""" start="00:06:25.140" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""need, and perhaps you'd gain a little bit""" start="00:06:27.180" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""extra stuff from using Dino's signature,""" start="00:06:29.260" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I assume. We have 8 minutes.""" start="00:06:32.920" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""We're still good on time.""" start="00:06:34.040" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Next question, do you have a workflow""" start="00:06:36.500" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""combining handwritten index cards and org""" start="00:06:39.020" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""mode?""" start="00:06:39.360" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: Great question. I do not.""" start="00:06:42.400" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I do write by hand when I get,""" start="00:06:46.620" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I don't know what a good term for it is,""" start="00:06:49.120" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I'll call it like editorial paralysis or""" start="00:06:51.420" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""something when I find it very hard to move""" start="00:06:53.100" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""forward in something because I keep going""" start="00:06:54.720" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""back and tweaking. And I will handwrite stuff""" start="00:06:56.940" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""at that point and then type it in because""" start="00:06:58.520" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""it's so much harder to get stuck in editing""" start="00:07:02.120" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""mode when you have to move forward on the""" start="00:07:04.480" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""page. I don't use index cards.""" start="00:07:07.360" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""In the blog article that I link in my talk,""" start="00:07:11.680" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""the ewj.io slash emacs 1,""" start="00:07:14.400" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I did try using handwritten or spreadsheet""" start="00:07:18.240" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""outlines at 1 point and found them very,""" start="00:07:22.360" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""very clumsy for novel writing just because I""" start="00:07:27.640" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""do so much, I mean, I do so much revision""" start="00:07:29.820" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""that moving things around meant that I had to""" start="00:07:32.600" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""keep 2 things in sync with each other,""" start="00:07:34.480" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""the pros and the outline.""" start="00:07:35.440" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""And that was what really led me to Org Mode""" start="00:07:37.540" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""as a way to keep the, again,""" start="00:07:39.800" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""I think part of the key for me is keeping the""" start="00:07:42.040" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""outline and the pros right next to each other""" start="00:07:44.580" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""in a way that they move around which is just""" start="00:07:46.440" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""really, I don't know, for me really really""" start="00:07:48.800" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""powerful.""" start="00:07:49.000" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay great, so we finished the list of""" start="00:07:54.280" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""questions available on the pad,""" start="00:07:55.840" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""but I see that some people have joined us on""" start="00:07:58.260" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""BBB, so hi everyone. If you have any""" start="00:08:01.100" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""questions feel free to unmute yourself and""" start="00:08:03.340" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""ask them. Otherwise, we might go on a break.""" start="00:08:06.560" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""So I'm going to give you about 10 seconds to""" start="00:08:08.360" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""unmute yourself. Or if you just want to add""" start="00:08:14.480" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""more questions on the pad,""" start="00:08:15.660" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""that's also fine. And that'll give you about""" start="00:08:17.680" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""30 seconds. Otherwise,""" start="00:08:19.540" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""we'll need to go on a break.""" start="00:08:20.660" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""And in the meantime, I'll thank you,""" start="00:08:24.020" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Edmund, for your presentation,""" start="00:08:25.600" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""because it's always nice,""" start="00:08:27.880" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""you know, we The reason why we have 2 tracks,""" start="00:08:31.400" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""and we've been having 2 tracks for the last 2""" start="00:08:34.200" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""or 3 editions of EmacsConf is because it's""" start="00:08:36.039" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""really nice to have those talks which are""" start="00:08:38.799" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""still related to Emacs and to far distance""" start="00:08:43.500" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""developments because we are obviously using""" start="00:08:45.440" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""packages. But it's really nice to see when we""" start="00:08:48.160" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""foray into other areas like writing or any""" start="00:08:51.960" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""kind of academia-based topics.""" start="00:08:53.400" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""So thank you, it's really nice.""" start="00:08:55.440" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""It brings different colors to the spectrum of""" start="00:09:01.500" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""what EmacsConf is and what ultimately Emacs""" start="00:09:03.580" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""is as well. Thank you.""" start="00:09:04.680" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well thanks to everyone who tuned in and Leo""" start="00:09:06.960" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""thanks to you and all the other organizers""" start="00:09:08.160" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""for putting this together.""" start="00:09:09.060" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""Appreciate it.""" start="00:09:09.720" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thank you. All right I think we're going to""" start="00:09:12.720" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""go on a little break for 5 minutes because I""" start="00:09:14.380" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""don't see other questions being asked.""" start="00:09:16.060" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""So everyone we'll see you again in 5 minutes""" start="00:09:18.900" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""and thank you again, Edmund.""" start="00:09:19.900" video="qanda-nabokov" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cheers.""" start="00:09:20.720" video="qanda-nabokov" id="subtitle"]]
+
+Questions or comments? Please e-mail [ewj@inkwellandoften.com](mailto:ewj@inkwellandoften.com?subject=Comment%20for%20EmacsConf%202023%20nabokov%3A%20Why%20Nabokov%20would%20use%20Org-Mode%20if%20he%20were%20writing%20today)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/nabokov-before.md b/2023/info/nabokov-before.md
new file mode 100644
index 00000000..e9aa2951
--- /dev/null
+++ b/2023/info/nabokov-before.md
@@ -0,0 +1,25 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 10-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="nabokov-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="nabokov-mainVideo" data="""
+00:00.000 Introduction
+00:45.760 Nabokov's process of writing novels
+02:24.080 Three practical problems novelists face
+04:46.560 Org mode for writing novels
+08:55.600 Takeaways and next steps
+
+"""]]<div></div>Duration: 09:51 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.opus">Download --main.opus (6.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm">Download --main.webm (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--silence.mkv">Download --silence.mkv (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen.org">Download .org</a></li><li><a href="https://toobnix.org/w/bDou9TDETryMt18KcdB56A">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="nabokov-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="nabokov-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus"></audio></div><div></div>Duration: 09:21 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus">Download --answers.opus (3.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm">Download --answers.webm (9.1MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/nabokov-nav.md b/2023/info/nabokov-nav.md
new file mode 100644
index 00000000..f7ef3f32
--- /dev/null
+++ b/2023/info/nabokov-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/writing">Emacs turbo-charges my writing</a>
+Next by track: <a href="/2023/talks/collab">Collaborative data processing and documenting using org-babel</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/one-after.md b/2023/info/one-after.md
new file mode 100644
index 00000000..e7b63c57
--- /dev/null
+++ b/2023/info/one-after.md
@@ -0,0 +1,904 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="one-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""Hi, everybody. Welcome to the EmacsConf 2023.""" start="00:00:00.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""I hope you're doing well and you're having fun.""" start="00:00:04.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""I'm Tony Aldon, and in this talk,""" start="00:00:06.400" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we are going to see how to build a static website""" start="00:00:08.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""with the package one.el that I wrote.""" start="00:00:11.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""But before we start, I'd like to thank""" start="00:00:14.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""all the people who organized that conference,""" start="00:00:17.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so thank you all for the great work.""" start="00:00:20.560" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""Documentation""" start="00:00:24.000" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""Now let's jump into the documentation of one.el,""" start="00:00:24.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""which is built with one.el. In the install page,""" start="00:00:27.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we can see that we have a sidebar""" start="00:00:31.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""with all of the pages in the documentation,""" start="00:00:33.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""some buttons to switch between pages,""" start="00:00:35.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we also have a table of contents""" start="00:00:39.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""for some of the pages if we need it.""" start="00:00:41.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now let's jump into one.el repository""" start="00:00:45.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and see why I like how it is implemented,""" start="00:00:49.440" video="mainVideo-one" id="subtitle"]]
+[[!template text="""because the website that we've seen,""" start="00:00:52.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""the documentation, is just one file.""" start="00:00:53.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So this is that file, with the headline of level 1""" start="00:00:55.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""being the web pages.""" start="00:01:00.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""There needs to be a web page to have the property,""" start="00:01:03.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""the Org property `:ONE:`, set to a render function.""" start="00:01:06.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We are going to see how they work after.""" start="00:01:09.240" video="mainVideo-one" id="subtitle"]]
+[[!template text="""And the `:CUSTOM_ID:`, the value of the `:CUSTOM_ID:`,""" start="00:01:11.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""is the path of the page. So really,""" start="00:01:14.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""the website that we have on the left""" start="00:01:17.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""is this file. So to me, this is something simple like that""" start="00:01:20.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that I wanted.""" start="00:01:24.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""And another thing is that when we want to""" start="00:01:25.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""change something with one.el,""" start="00:01:29.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we don't change configuration""" start="00:01:33.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""or write JavaScript or anything else.""" start="00:01:36.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We just write Emacs Lisp code or a bit of CSS.""" start="00:01:38.880" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So this is what we have with a minibuffer website""" start="00:01:43.480" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that is built with one.el,""" start="00:01:45.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and the only thing that I had to do""" start="00:01:47.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""is to write Emacs Lisp code.""" start="00:01:50.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So those are two things: the content in one file,""" start="00:01:51.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and if we want to change the layout, CSS and Emacs Lisp.""" start="00:01:55.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""This is one.el.""" start="00:01:58.680" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""Starting a new project""" start="00:02:02.200" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""Now let's go to our node,""" start="00:02:02.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we are going to start a new project.""" start="00:02:03.880" video="mainVideo-one" id="subtitle"]]
+[[!template text="""How do we do that?""" start="00:02:07.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""In a new empty directory,""" start="00:02:09.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so new project directory,""" start="00:02:11.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we call the function `one-default-new-project`.""" start="00:02:15.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We have that project, which is one file with the""" start="00:02:19.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""five default type of pages that we have,""" start="00:02:22.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and one CSS file.""" start="00:02:25.760" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""Building""" start="00:02:27.400" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""How to build that website?""" start="00:02:27.400" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Okay, so we call the function `one-build`.""" start="00:02:29.440" video="mainVideo-one" id="subtitle"]]
+[[!template text="""This builds the website.""" start="00:02:32.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We jump into a terminal, and now if we run tree,""" start="00:02:33.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we can see that the website""" start="00:02:36.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""has been built in the public directory""" start="00:02:39.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""with the information in the Org properties""" start="00:02:42.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and the content of one.org files. Okay, cool.""" start="00:02:45.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now we are going to render that in the browser""" start="00:02:50.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""to serve that, and to do that""" start="00:02:53.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we can use browser-sync utility,""" start="00:02:58.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""which is cool with that,""" start="00:03:01.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""in that each time we are going to...""" start="00:03:02.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we go into public...""" start="00:03:06.420" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Each time we are going to change and rebuild the website,""" start="00:03:07.861" video="mainVideo-one" id="subtitle"]]
+[[!template text="""this will be reloaded in the browser.""" start="00:03:11.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So one, this is that website, is now this one.""" start="00:03:14.320" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""Side by side""" start="00:03:19.760" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""So let's put them side by side.""" start="00:03:19.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We go there, and we may do something like that.""" start="00:03:22.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So one.el, the home page, so our custom ID""" start="00:03:26.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""with the value just a /,""" start="00:03:30.240" video="mainVideo-one" id="subtitle"]]
+[[!template text="""is rendered with that function `one-default-home`,""" start="00:03:32.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""which is a render function,""" start="00:03:36.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and the first argument of that function is the headline,""" start="00:03:37.240" video="mainVideo-one" id="subtitle"]]
+[[!template text="""this current headline. So, parsed with the Org parser,""" start="00:03:41.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and then we do the thing that we want to do,""" start="00:03:45.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and the render function returns an HTML string""" start="00:03:48.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that is used to build the pages at the custom ID.""" start="00:03:52.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now we can go to another web page, the second web page,""" start="00:03:57.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we see that there is a different value""" start="00:04:03.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""for the `:ONE:` property, so another render function,""" start="00:04:05.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and the custom ID at the path of that page.""" start="00:04:10.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we can see that in the browser.""" start="00:04:14.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So this is `/blog/default-home-list-pages`.""" start="00:04:16.400" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So this is that. Now there are three other pages,""" start="00:04:19.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""but we can list that like that.""" start="00:04:23.480" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We do a grep in that files,""" start="00:04:25.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we see the different default render function.""" start="00:04:28.360" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""Writing a render function""" start="00:04:32.160" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""In the second part of that talk,""" start="00:04:32.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we are going to write a render function.""" start="00:04:34.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we are going to see that after.""" start="00:04:38.400" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now maybe we can go to the default page,""" start="00:04:41.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and let's modify that default page.""" start="00:04:47.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We see that this uses `one-default` render function,""" start="00:04:50.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and now let's write &quot;foo bar baz&quot;.""" start="00:04:54.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We want to modify the content. We save.""" start="00:04:57.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We call again one-build distribute,""" start="00:05:00.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we see here we have it: foo bar baz in the default page.""" start="00:05:10.440" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now we can use... When we use one-build,""" start="00:05:16.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""this also copies the files in the asset directory""" start="00:05:19.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""into the public directory.""" start="00:05:23.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""This is not always what we want to do.""" start="00:05:25.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Sometimes we just change the content,""" start="00:05:28.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and for that we can use `one-render-page-at-point`.""" start="00:05:29.880" video="mainVideo-one" id="subtitle"]]
+[[!template text="""If we use that one, this just renders the current page.""" start="00:05:34.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we see that we have again &quot;foo bar baz&quot; in the page.""" start="00:05:39.480" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""New page""" start="00:05:44.680" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""Now let's add a new page. To add a new page,""" start="00:05:44.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we just have to copy one of them, maybe the default page.""" start="00:05:47.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We are going to call it maybe emacsconf-2023.""" start="00:05:52.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We still use one default render function to render it,""" start="00:05:58.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""but we want to change the path.""" start="00:06:01.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So the custom ID, we are going to give it /blog""" start="00:06:04.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and emacsconf-2023 with a slash at the end,""" start="00:06:08.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and the content... We no longer want this one,""" start="00:06:12.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""but maybe &quot;We're having a lot of fun&quot;.""" start="00:06:18.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we save that, we rebuild with `one-build` this,""" start="00:06:22.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and now we can look at the top""" start="00:06:28.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and pass it the path `/blog/emacsconf-2023/.""" start="00:06:33.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we have that new page.""" start="00:06:39.280" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""Linking between pages""" start="00:06:41.720" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""Now, how to link between pages?""" start="00:06:41.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we are going to write a link""" start="00:06:44.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that links to the last page,""" start="00:06:46.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so a page with the table of contents.""" start="00:06:48.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""To do that, we just have to use the value of the custom ID,""" start="00:06:50.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and to link to a custom ID inside Org mode,""" start="00:06:54.400" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we use the hashtag. We pass it here,""" start="00:06:58.480" video="mainVideo-one" id="subtitle"]]
+[[!template text="""then we pass it in the description,""" start="00:07:03.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so TOC and sidebar,""" start="00:07:07.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and now if we press RET inside Emacs,""" start="00:07:09.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we jump to that page. So this is cool.""" start="00:07:12.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now we build again,""" start="00:07:15.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we see that we are going to have""" start="00:07:17.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""the link to the page in the browser.""" start="00:07:19.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So this link to the default page with a table of contents,""" start="00:07:22.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""fine, but maybe what we want to do""" start="00:07:27.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""is to link to the &quot;Headline foo&quot; in that page.""" start="00:07:29.880" video="mainVideo-one" id="subtitle"]]
+[[!template text="""How do we do that?""" start="00:07:33.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We do that by adding a custom id.""" start="00:07:34.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We keep the first part,""" start="00:07:36.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""which is the page where we are,""" start="00:07:41.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we added hash with foo,""" start="00:07:43.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so that Headline foo will have the ID &quot;foo&quot;""" start="00:07:46.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""in its H2 tag, HTML tag,""" start="00:07:50.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and now we can link it here with still custom ID, so &quot;foo&quot;,""" start="00:07:57.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and now it's headline... headline with what?""" start="00:08:05.081" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Headline foo in TOC page. So we have that.""" start="00:08:10.540" video="mainVideo-one" id="subtitle"]]
+[[!template text="""If we press RET, we jump to that headline in Emacs.""" start="00:08:14.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So this is super cool.""" start="00:08:19.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""And now, if we call `one-build`,""" start="00:08:20.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we see in the browser""" start="00:08:23.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that we have a new link,""" start="00:08:25.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and this link linked to that specific headline.""" start="00:08:26.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So this is cool. So we have the link between pages""" start="00:08:30.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that works inside Emacs""" start="00:08:34.440" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and that works well also in the browser.""" start="00:08:36.320" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""CSS""" start="00:08:40.000" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""Now let's say that we want to change the CSS.""" start="00:08:40.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we've added a page with specific content,""" start="00:08:44.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we've done some links.""" start="00:08:50.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now we want to modify the CSS file""" start="00:08:51.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""which is in the asset directory, the one.css.""" start="00:08:55.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Each time we change it,""" start="00:09:00.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we want to have live reload""" start="00:09:02.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that copy that file into the public directory,""" start="00:09:05.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so the same. We go back here,""" start="00:09:10.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and there is a utility called `entr`, e-n-t-r.""" start="00:09:14.660" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Yes, this one, and using that, so a new terminal,""" start="00:09:18.880" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we are at the beginning.""" start="00:09:26.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""This will watch the changing in what.css,""" start="00:09:28.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and `entr` will copy it into the public directory""" start="00:09:32.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""each time this changes. Let's go back to Org mode,""" start="00:09:35.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""because I chose some color that is cool,""" start="00:09:38.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and now we go back to the CSS files.""" start="00:09:43.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We put them side by side, and maybe we go to the new page""" start="00:09:47.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that we were changing,""" start="00:09:53.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we are going to change the body,""" start="00:09:55.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""the background color, and maybe we can change""" start="00:10:01.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""with the color that we've just taken.""" start="00:10:03.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we save, and we see the changing happening.""" start="00:10:06.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We can do it again with the color""" start="00:10:10.220" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that we have at the beginning,""" start="00:10:14.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and this is the user experience""" start="00:10:16.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that we have with one.el and the default function.""" start="00:10:18.880" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""How to write a render function""" start="00:10:23.160" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""Now that we've seen that,""" start="00:10:23.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we've done all of that part,""" start="00:10:26.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and now we are going to see""" start="00:10:30.461" video="mainVideo-one" id="subtitle"]]
+[[!template text="""how to write a render function.""" start="00:10:31.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So let's go. The render function,""" start="00:10:34.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so one.org, we remember these are the functions""" start="00:10:36.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that are in the `:ONE:` Org property.""" start="00:10:41.480" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we are going to remove that part.""" start="00:10:43.400" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We no longer want that one. We don't want this.""" start="00:10:45.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We just keep that. `one-default`,""" start="00:10:49.440" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we want this to be the home of our website.""" start="00:10:52.440" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We have that. We rebuild,""" start="00:10:55.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and now we just have one page, and we have that page.""" start="00:10:57.660" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We are going to add another page that we call &quot;foo&quot;,""" start="00:11:05.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and here we pass it the render function foo""" start="00:11:10.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that doesn't exist yet, and we are going to write it.""" start="00:11:15.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So maybe with some content, and we copy, copy.""" start="00:11:20.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We have that. We call it &quot;bar&quot; to have something to show.""" start="00:11:27.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So here we are. If we build that, so we build it,""" start="00:11:33.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we see in the echo area at the bottom""" start="00:11:39.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that we have an error &quot;void&quot;,""" start="00:11:42.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""which is because the function foo doesn't exist.""" start="00:11:43.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So now we are going to write that function,""" start="00:11:46.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we write it in the onerc.el""" start="00:11:48.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""where we put any Elisp code""" start="00:11:53.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that we want to be run""" start="00:11:57.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""each time we build the website or render the pages.""" start="00:11:58.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we want a render function called foo.""" start="00:12:03.480" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So that takes three arguments: page-tree, pages, and global.""" start="00:12:06.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We are going to look at the page-tree in our case,""" start="00:12:10.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and the render function return an HTML string.""" start="00:12:16.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""This is the thing that we want from them.""" start="00:12:19.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So maybe foo, bar, and baz.""" start="00:12:22.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now this is something well-defined,""" start="00:12:25.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and with one.org here, the file, we rebuild this,""" start="00:12:28.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we can see now in the browser,""" start="00:12:34.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""if we go to the page foo, that we have &quot;foo bar baz&quot;.""" start="00:12:39.620" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So this is exactly what we have rendered""" start="00:12:42.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""by the render function that is set,""" start="00:12:45.460" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we see at the bottom in the one.org file,""" start="00:12:47.880" video="mainVideo-one" id="subtitle"]]
+[[!template text="""in the `:ONE:` property. Now this is HTML, so we can pass it,""" start="00:12:51.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""for instance, h1, the tag h1.""" start="00:12:56.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We save that file. We go in the one.org file,""" start="00:13:00.880" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we build again, and now we see that we have an h1.""" start="00:13:06.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Okay, this is interesting, but if we would have to""" start="00:13:10.400" video="mainVideo-one" id="subtitle"]]
+[[!template text="""build this function with a string like that,""" start="00:13:14.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""this is boring and not the best way.""" start="00:13:18.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we can use the library Jack,""" start="00:13:22.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""which offers function `jack-html`""" start="00:13:24.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that takes some data structure,""" start="00:13:27.589" video="mainVideo-one" id="subtitle"]]
+[[!template text="""for instance, an h1, a nested list""" start="00:13:31.581" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that represents the HTML that we want to render,""" start="00:13:34.180" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and transform it into an HTML string.""" start="00:13:38.480" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we have that, we saved,""" start="00:13:41.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we rebuild in the one.org file with `one-build`,""" start="00:13:43.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we see now that this has been built using `jack-html`.""" start="00:13:48.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now what do we want to do?""" start="00:13:55.400" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Okay, see, the thing that we want to do""" start="00:13:59.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""is to understand page-tree. So what is page-tree?""" start="00:14:02.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""page-tree is when we go to one.org,""" start="00:14:05.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""this is really for foo,""" start="00:14:07.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""this is the parsed data of that headline, that page.""" start="00:14:09.480" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So this is done with, no, not this one, we use,""" start="00:14:17.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so in the mini-buffer, we use `one-parse-buffer`,""" start="00:14:23.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we see this is the data""" start="00:14:27.880" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that we have with that function, first headline,""" start="00:14:30.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and the second headline,""" start="00:14:33.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""this is the parse tree that we have there.""" start="00:14:34.440" video="mainVideo-one" id="subtitle"]]
+[[!template text="""This is that data that is passed to""" start="00:14:38.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""the `foo` render function. One thing that is cool,""" start="00:14:40.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so I see here, is that as we are dealing with data,""" start="00:14:45.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we have all the data of the website,""" start="00:14:51.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we can show them in the web page. Now, why not?""" start="00:14:53.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""It's great to write the website""" start="00:14:57.361" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and also to debug if we need to debug at some point.""" start="00:15:00.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So let's render page-tree directly in the page, one.org,""" start="00:15:02.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we rebuild, we reload, and we see this is what we have,""" start="00:15:10.280" video="mainVideo-one" id="subtitle"]]
+[[!template text="""this is the data that we have, okay?""" start="00:15:15.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""And we have, for instance, the `:raw-value` with this &quot;foo&quot;,""" start="00:15:17.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""which is the headline,""" start="00:15:20.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""the content of the headline in a raw format,""" start="00:15:22.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we also have custom,""" start="00:15:27.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so here we have the `:CUSTOM_ID: foo` and `:ONE: foo`,""" start="00:15:29.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""which are the properties,""" start="00:15:33.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and when we are inside those render functions,""" start="00:15:35.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we have access to this.""" start="00:15:40.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So let's, what can we do now, is to,""" start="00:15:43.241" video="mainVideo-one" id="subtitle"]]
+[[!template text="""let's get the row value.""" start="00:15:46.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So we no longer need that.""" start="00:15:48.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Maybe we can do something like that.""" start="00:15:51.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We create now HTML. In HTML, we want the body,""" start="00:15:54.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we want an h1 tag, and we are going to pass it""" start="00:16:04.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""a title, and in the title,""" start="00:16:08.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""this is something that we let-bind here,""" start="00:16:10.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so the value of the title,""" start="00:16:13.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we get it with `org-element-property`,""" start="00:16:15.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and the `:raw-value`, so this is the property that we want,""" start="00:16:24.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so `raw-value`, and from which data we want that,""" start="00:16:29.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""to page-tree. So now, let's have one.org at the bottom,""" start="00:16:34.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we build again, and now we reload,""" start="00:16:40.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we see that we get a foo. This is that title,""" start="00:16:46.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""the value of that variable in that data structure.""" start="00:16:50.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now, let's get those two properties.""" start="00:16:56.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""How do we get those two properties?""" start="00:17:00.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""The same way, `:ONE:` that we call one, so raw-value,""" start="00:17:03.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we change that for `:ONE`, the other raw-value""" start="00:17:07.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""for `:CUSTOM_ID`, we change the title for `custom-id`,""" start="00:17:11.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and what we want now is for instance,""" start="00:17:19.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""yes, h1 again, and org properties.""" start="00:17:23.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We add the org properties, and let's do a list,""" start="00:17:30.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""another list, with li element, one,""" start="00:17:34.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we want that value, and that value will be""" start="00:17:39.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""the value of the variable one.""" start="00:17:43.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We can do that with also custom-id,""" start="00:17:45.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and now, in the one that we have to save,""" start="00:17:52.480" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and in one of our files, not like that,""" start="00:17:56.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we rebuild that, and we see""" start="00:17:59.440" video="mainVideo-one" id="subtitle"]]
+[[!template text="""that we can get those properties.""" start="00:18:03.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""This is super cool.""" start="00:18:05.800" video="mainVideo-one" id="subtitle"]]
+[[!template text="""As we are dealing with data,""" start="00:18:07.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we have the information of the whole website,""" start="00:18:09.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we can do whatever we want,""" start="00:18:11.720" video="mainVideo-one" id="subtitle"]]
+[[!template text="""because we have access to that data.""" start="00:18:14.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Let's, for instance, add a date, the date of 2023,""" start="00:18:16.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so I think this is 02, when there is the conference, see,""" start="00:18:23.840" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we can get access to that `one` again,""" start="00:18:28.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""here, so `date`, and we go,""" start="00:18:32.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we change the `:CUSTOM_ID` with the `:DATE`,""" start="00:18:37.955" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and in the list here,""" start="00:18:42.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so we want in the list, this to be the date,""" start="00:18:46.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we build again that,""" start="00:18:53.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we have access to the date.""" start="00:18:56.560" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Really, we can do whatever we want.""" start="00:18:58.800" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""Rendering content""" start="00:19:03.200" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""Now, we want the content. So far,""" start="00:19:03.200" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we get the property, but what about the content,""" start="00:19:06.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so h1, and now we put &quot;Org content&quot;,""" start="00:19:11.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and this is going to be something in the variable content,""" start="00:19:17.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we have to add that variable,""" start="00:19:21.360" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so in the let binding, we write our content,""" start="00:19:25.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we are going to have that content from the page-tree.""" start="00:19:28.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""To do that, we use `org-export`,""" start="00:19:30.640" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so we need to export something into HTML,""" start="00:19:33.680" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we export the data with the backend.""" start="00:19:36.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So the data that we want is page-tree,""" start="00:19:37.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""but we don't want the first headline,""" start="00:19:40.240" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so we use `org-element-contents`,""" start="00:19:42.240" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we pass it `page-tree`, so this is that.""" start="00:19:46.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""But for the exported, we need to pass it,""" start="00:19:50.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and also, how do we call that, we call that an Org backend.""" start="00:19:53.120" video="mainVideo-one" id="subtitle"]]
+[[!template text="""So `one-ox` is our backend provided by one.el,""" start="00:20:00.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and the last argument is nil.""" start="00:20:06.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We are almost done. Now with one.org,""" start="00:20:09.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we build the website, and we see that we have an error,""" start="00:20:14.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""it's because this is not a content,""" start="00:20:18.880" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so there.. No, okay,""" start="00:20:22.080" video="mainVideo-one" id="subtitle"]]
+[[!template text="""there was this `org-element-contents`, I think,""" start="00:20:27.040" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and now we build it, and we must see it here.""" start="00:20:32.840" video="mainVideo-one" id="subtitle"]]
+
+[[!template new="1" text="""Rendering CSS""" start="00:20:37.160" video="mainVideo-one" id="subtitle"]]
+
+[[!template text="""So we have the content,""" start="00:20:37.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we have the Org values,""" start="00:20:39.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and last thing that we can do maybe is to put some CSS.""" start="00:20:43.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Let's have a look to `one-default` function.""" start="00:20:48.400" video="mainVideo-one" id="subtitle"]]
+[[!template text="""We can see in one.el file that we have a lot of""" start="00:20:51.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""default functions that we can use to take inspiration.""" start="00:20:56.400" video="mainVideo-one" id="subtitle"]]
+[[!template text="""The last thing that we need""" start="00:21:01.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""is to link to the one.css file,""" start="00:21:05.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so we are going to do that `onerc` file.""" start="00:21:08.000" video="mainVideo-one" id="subtitle"]]
+[[!template text="""This is here, so `html` we don't need,""" start="00:21:14.920" video="mainVideo-one" id="subtitle"]]
+[[!template text="""we have that one, we want the head to be here,""" start="00:21:20.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we pass it a class, which is a title,""" start="00:21:26.480" video="mainVideo-one" id="subtitle"]]
+[[!template text="""a div with the class content. We have that.""" start="00:21:37.320" video="mainVideo-one" id="subtitle"]]
+[[!template text="""Now with one.org, we build it again,""" start="00:21:42.240" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we should see the website render with the CSS,""" start="00:21:46.160" video="mainVideo-one" id="subtitle"]]
+[[!template text="""the property, and all the content,""" start="00:21:50.600" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and we've done that just with that Emacs Lisp file,""" start="00:21:56.760" video="mainVideo-one" id="subtitle"]]
+[[!template text="""so this is all I wanted to show you today with one.el,""" start="00:22:01.520" video="mainVideo-one" id="subtitle"]]
+[[!template text="""I hope you enjoyed the talk, and have a nice day,""" start="00:22:08.960" video="mainVideo-one" id="subtitle"]]
+[[!template text="""and a nice conference.""" start="00:22:14.880" video="mainVideo-one" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+<a name="one-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: So, will you, when I'm looking at my,""" start="00:00:00.459" video="qanda-one" id="subtitle"]]
+[[!template text="""the other screen, I don't see the chat,""" start="00:00:06.279" video="qanda-one" id="subtitle"]]
+[[!template text="""so maybe someone can tell me.""" start="00:00:08.480" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: It's fine, don't worry about it,""" start="00:00:11.259" video="qanda-one" id="subtitle"]]
+[[!template text="""and we are live. So hi again everyone.""" start="00:00:12.360" video="qanda-one" id="subtitle"]]
+[[!template text="""Hi Tony, how are you doing?""" start="00:00:15.060" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Really well, and you?""" start="00:00:17.040" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: I am doing fantastically,""" start="00:00:19.440" video="qanda-one" id="subtitle"]]
+[[!template text="""as fantastically as I can be doing,""" start="00:00:21.380" video="qanda-one" id="subtitle"]]
+[[!template text="""having to put out fire in the background""" start="00:00:24.099" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Cool!""" start="00:00:30.140" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: during MaxConf. But I'm doing great! Alright,""" start="00:00:25.840" video="qanda-one" id="subtitle"]]
+[[!template text="""Let me just try to set up everything so that""" start="00:00:31.640" video="qanda-one" id="subtitle"]]
+[[!template text="""I can show the questions and all this.""" start="00:00:34.960" video="qanda-one" id="subtitle"]]
+[[!template text="""Do you mind if I read you the question?""" start="00:00:37.260" video="qanda-one" id="subtitle"]]
+[[!template text="""It might be a little more interactive and""" start="00:00:38.600" video="qanda-one" id="subtitle"]]
+[[!template text="""this way you can focus on either presenting""" start="00:00:39.960" video="qanda-one" id="subtitle"]]
+[[!template text="""stuff on your end.""" start="00:00:42.800" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, tell me what are the questions and what""" start="00:00:44.059" video="qanda-one" id="subtitle"]]
+[[!template text="""to do and I will do that.""" start="00:00:48.680" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay great so what I'll do,""" start="00:00:53.420" video="qanda-one" id="subtitle"]]
+[[!template text="""I'll invite people to go to the pad and ask""" start="00:00:56.400" video="qanda-one" id="subtitle"]]
+[[!template text="""questions because it was a very interesting""" start="00:00:58.580" video="qanda-one" id="subtitle"]]
+[[!template text="""talk and I'm sure you have plenty of""" start="00:01:00.060" video="qanda-one" id="subtitle"]]
+[[!template text="""questions but I only see 1 right now.""" start="00:01:01.480" video="qanda-one" id="subtitle"]]
+[[!template text="""Do we have people on BigBlueButton?""" start="00:01:03.460" video="qanda-one" id="subtitle"]]
+[[!template text="""Yes we do have people joining right now.""" start="00:01:05.640" video="qanda-one" id="subtitle"]]
+[[!template text="""So reading the first question then.""" start="00:01:11.000" video="qanda-one" id="subtitle"]]
+[[!template text="""So what's the main motivation for this new""" start="00:01:12.620" video="qanda-one" id="subtitle"]]
+[[!template text="""package? I used to use org.yugo""" start="00:01:14.380" video="qanda-one" id="subtitle"]]
+[[!template text="""and use GitHub Actions to build a blog.""" start="00:01:16.280" video="qanda-one" id="subtitle"]]
+[[!template text="""So can you go in a little bit of details on""" start="00:01:18.340" video="qanda-one" id="subtitle"]]
+[[!template text="""this?""" start="00:01:20.600" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, OK. So the main goal,""" start="00:01:21.540" video="qanda-one" id="subtitle"]]
+[[!template text="""I didn't want to have,""" start="00:01:30.900" video="qanda-one" id="subtitle"]]
+[[!template text="""to, I will push that here.""" start="00:01:33.805" video="qanda-one" id="subtitle"]]
+[[!template text="""So my goal was to not have to rely on another""" start="00:01:38.040" video="qanda-one" id="subtitle"]]
+[[!template text="""static site generator to produce my website.""" start="00:01:45.060" video="qanda-one" id="subtitle"]]
+[[!template text="""So if you use a Yugo, that means that you""" start="00:01:49.920" video="qanda-one" id="subtitle"]]
+[[!template text="""take, so this is the website that we've seen""" start="00:01:54.780" video="qanda-one" id="subtitle"]]
+[[!template text="""in the talk, this 1. And I didn't want to""" start="00:02:01.960" video="qanda-one" id="subtitle"]]
+[[!template text="""have to use a piece of software in Emacs that""" start="00:02:07.880" video="qanda-one" id="subtitle"]]
+[[!template text="""translate to some other files to be feed to""" start="00:02:13.320" video="qanda-one" id="subtitle"]]
+[[!template text="""another statistic generator because this way""" start="00:02:16.960" video="qanda-one" id="subtitle"]]
+[[!template text="""I have 2 things to understand.""" start="00:02:20.680" video="qanda-one" id="subtitle"]]
+[[!template text="""I have to understand how that software""" start="00:02:23.680" video="qanda-one" id="subtitle"]]
+[[!template text="""translates my files into the other files and""" start="00:02:26.780" video="qanda-one" id="subtitle"]]
+[[!template text="""then I have to understand how Hugo works.""" start="00:02:32.440" video="qanda-one" id="subtitle"]]
+[[!template text="""So if I want to change something I need to""" start="00:02:37.060" video="qanda-one" id="subtitle"]]
+[[!template text="""understand Hugo. So at some point I need to""" start="00:02:39.480" video="qanda-one" id="subtitle"]]
+[[!template text="""work with Hugo. So if I need to work with""" start="00:02:43.660" video="qanda-one" id="subtitle"]]
+[[!template text="""Hugo, maybe I can work with it directly.""" start="00:02:46.200" video="qanda-one" id="subtitle"]]
+[[!template text="""And I wanted also something that was purely""" start="00:02:51.800" video="qanda-one" id="subtitle"]]
+[[!template text="""Emacs-centric and working on it,""" start="00:02:56.960" video="qanda-one" id="subtitle"]]
+[[!template text="""I found out about that solution.""" start="00:03:03.700" video="qanda-one" id="subtitle"]]
+[[!template text="""And I wanted also something that we have only""" start="00:03:05.600" video="qanda-one" id="subtitle"]]
+[[!template text="""1 file that have all the entries.""" start="00:03:11.780" video="qanda-one" id="subtitle"]]
+[[!template text="""And when I thought about that,""" start="00:03:15.560" video="qanda-one" id="subtitle"]]
+[[!template text="""finally I found a way that maybe we can just""" start="00:03:19.140" video="qanda-one" id="subtitle"]]
+[[!template text="""use 1 or 3 to pass it the information of the""" start="00:03:22.720" video="qanda-one" id="subtitle"]]
+[[!template text="""website. And if you look,""" start="00:03:30.360" video="qanda-one" id="subtitle"]]
+[[!template text="""If you just try to work with Gatsby,""" start="00:03:33.405" video="qanda-one" id="subtitle"]]
+[[!template text="""Ugo or all those websites,""" start="00:03:37.920" video="qanda-one" id="subtitle"]]
+[[!template text="""when you start, you download 10,""" start="00:03:40.940" video="qanda-one" id="subtitle"]]
+[[!template text="""20, 30, thousand for hundreds of dependencies""" start="00:03:46.240" video="qanda-one" id="subtitle"]]
+[[!template text="""to do. Just to me, I'm a small guy and I just""" start="00:03:53.440" video="qanda-one" id="subtitle"]]
+[[!template text="""want to have some documentation on the""" start="00:03:59.620" video="qanda-one" id="subtitle"]]
+[[!template text="""website like this 1. It just,""" start="00:04:02.720" video="qanda-one" id="subtitle"]]
+[[!template text="""it shouldn't need that much of a dependency.""" start="00:04:05.460" video="qanda-one" id="subtitle"]]
+[[!template text="""And if you look at the website,""" start="00:04:09.160" video="qanda-one" id="subtitle"]]
+[[!template text="""if you want to hack on something,""" start="00:04:11.460" video="qanda-one" id="subtitle"]]
+[[!template text="""you need a lot of to understand how the""" start="00:04:13.540" video="qanda-one" id="subtitle"]]
+[[!template text="""config files work. So you need to,""" start="00:04:17.320" video="qanda-one" id="subtitle"]]
+[[!template text="""how does it work this config file?""" start="00:04:19.459" video="qanda-one" id="subtitle"]]
+[[!template text="""But I want, it's always happened that you""" start="00:04:21.060" video="qanda-one" id="subtitle"]]
+[[!template text="""want to add 1 thing or to add that things.""" start="00:04:23.320" video="qanda-one" id="subtitle"]]
+[[!template text="""What do you have to do?""" start="00:04:26.420" video="qanda-one" id="subtitle"]]
+[[!template text="""You have to, you can't because it's not""" start="00:04:27.780" video="qanda-one" id="subtitle"]]
+[[!template text="""offered by the configuration file.""" start="00:04:30.340" video="qanda-one" id="subtitle"]]
+[[!template text="""With that solution that I built for me first,""" start="00:04:34.380" video="qanda-one" id="subtitle"]]
+[[!template text="""I don't care if I need something else.""" start="00:04:38.920" video="qanda-one" id="subtitle"]]
+[[!template text="""I just have to go in that file.""" start="00:04:42.020" video="qanda-one" id="subtitle"]]
+[[!template text="""It doesn't need to be that file because as I""" start="00:04:49.840" video="qanda-one" id="subtitle"]]
+[[!template text="""am in Emacs if the render functions are""" start="00:04:52.440" video="qanda-one" id="subtitle"]]
+[[!template text="""already evaluated they exist and I can use it""" start="00:04:56.120" video="qanda-one" id="subtitle"]]
+[[!template text="""but I just have to change that file so if I""" start="00:04:58.940" video="qanda-one" id="subtitle"]]
+[[!template text="""want something more I just I go there let's""" start="00:05:02.520" video="qanda-one" id="subtitle"]]
+[[!template text="""say so does it answer the question or I""" start="00:05:07.860" video="qanda-one" id="subtitle"]]
+[[!template text="""continue to show something?""" start="00:05:10.920" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: It's up to you, I think you are answering the""" start="00:05:14.320" video="qanda-one" id="subtitle"]]
+[[!template text="""question. I think you veered off a little bit""" start="00:05:16.060" video="qanda-one" id="subtitle"]]
+[[!template text="""from just why not you go but then you kind of""" start="00:05:17.600" video="qanda-one" id="subtitle"]]
+[[!template text="""redid part of your presentation to justify""" start="00:05:19.940" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: own system. But stop me if I go because I""" start="00:05:23.480" video="qanda-one" id="subtitle"]]
+[[!template text="""used to want to show more things than what""" start="00:05:26.360" video="qanda-one" id="subtitle"]]
+[[!template text="""there is in the question.""" start="00:05:29.920" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: why you had to roll your Yeah that's fine.""" start="00:05:21.940" video="qanda-one" id="subtitle"]]
+[[!template text="""Just for people who do not know,""" start="00:05:32.080" video="qanda-one" id="subtitle"]]
+[[!template text="""we tend to restrict speakers when they submit""" start="00:05:33.340" video="qanda-one" id="subtitle"]]
+[[!template text="""a presentation. We tell them,""" start="00:05:35.500" video="qanda-one" id="subtitle"]]
+[[!template text="""oh, you can do a flash talk in 10 minutes or""" start="00:05:36.620" video="qanda-one" id="subtitle"]]
+[[!template text="""a bit of a longer talk in 20 minutes or 40""" start="00:05:39.000" video="qanda-one" id="subtitle"]]
+[[!template text="""minutes. And usually, because we have a lot""" start="00:05:41.100" video="qanda-one" id="subtitle"]]
+[[!template text="""of speakers, we have to kind of coerce people""" start="00:05:43.180" video="qanda-one" id="subtitle"]]
+[[!template text="""into going to shorter formats and sometimes""" start="00:05:46.260" video="qanda-one" id="subtitle"]]
+[[!template text="""it's a lot about killing your darlings.""" start="00:05:48.340" video="qanda-one" id="subtitle"]]
+[[!template text="""But just to reassure you,""" start="00:05:51.100" video="qanda-one" id="subtitle"]]
+[[!template text="""we're just about to go on a launch break in""" start="00:05:52.360" video="qanda-one" id="subtitle"]]
+[[!template text="""about 10 minutes, so you've got the full 10""" start="00:05:54.560" video="qanda-one" id="subtitle"]]
+[[!template text="""minutes to use however you want,""" start="00:05:56.840" video="qanda-one" id="subtitle"]]
+[[!template text="""but I'll just tell you,""" start="00:05:58.320" video="qanda-one" id="subtitle"]]
+[[!template text="""you have a lot of questions so you might want""" start="00:05:59.340" video="qanda-one" id="subtitle"]]
+[[!template text="""to perhaps move on to the next 1 as soon as""" start="00:06:01.080" video="qanda-one" id="subtitle"]]
+[[!template text="""you can.""" start="00:06:03.400" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes okay so tell me the next 1 and if people""" start="00:06:04.540" video="qanda-one" id="subtitle"]]
+[[!template text="""want to stay more I can also stay more.""" start="00:06:08.940" video="qanda-one" id="subtitle"]]
+[[!template text="""Right. I understand if people need to go to""" start="00:06:14.240" video="qanda-one" id="subtitle"]]
+[[!template text="""lunch, they can, but people that want to""" start="00:06:17.220" video="qanda-one" id="subtitle"]]
+[[!template text="""stay, if it's possible,""" start="00:06:19.020" video="qanda-one" id="subtitle"]]
+[[!template text="""I'm here to answer any question.""" start="00:06:20.340" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: Splendid. All right, so moving on to the next""" start="00:06:24.060" video="qanda-one" id="subtitle"]]
+[[!template text="""question. Is it possible to include the""" start="00:06:26.240" video="qanda-one" id="subtitle"]]
+[[!template text="""include org tag to add content from other""" start="00:06:29.180" video="qanda-one" id="subtitle"]]
+[[!template text="""files. Do you see what I'm talking about?""" start="00:06:31.560" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, so it's not included.""" start="00:06:35.200" video="qanda-one" id="subtitle"]]
+[[!template text="""So the idea was really to have only 1 file""" start="00:06:39.380" video="qanda-one" id="subtitle"]]
+[[!template text="""and have no options. So if you look at the,""" start="00:06:45.720" video="qanda-one" id="subtitle"]]
+[[!template text="""let's go into, so the answer is no,""" start="00:06:49.760" video="qanda-one" id="subtitle"]]
+[[!template text="""but if you want, you can write the code that""" start="00:06:52.240" video="qanda-one" id="subtitle"]]
+[[!template text="""do it. But let's just go into one.n,""" start="00:06:56.320" video="qanda-one" id="subtitle"]]
+[[!template text="""so that files. So this is the files where you""" start="00:07:02.280" video="qanda-one" id="subtitle"]]
+[[!template text="""have everything, and there is only 2""" start="00:07:07.900" video="qanda-one" id="subtitle"]]
+[[!template text="""dependencies. Maybe we can see that at the""" start="00:07:11.440" video="qanda-one" id="subtitle"]]
+[[!template text="""top so which are htmlis on the Jack and the""" start="00:07:13.980" video="qanda-one" id="subtitle"]]
+[[!template text="""other are Augment. So for me,""" start="00:07:18.080" video="qanda-one" id="subtitle"]]
+[[!template text="""they're not dependencies because they come""" start="00:07:19.840" video="qanda-one" id="subtitle"]]
+[[!template text="""with Emacs. But the question is,""" start="00:07:21.820" video="qanda-one" id="subtitle"]]
+[[!template text="""can I add other things?""" start="00:07:25.440" video="qanda-one" id="subtitle"]]
+[[!template text="""If you look at that, you don't see the orange""" start="00:07:27.440" video="qanda-one" id="subtitle"]]
+[[!template text="""color which are viable,""" start="00:07:31.640" video="qanda-one" id="subtitle"]]
+[[!template text="""it's because I didn't want any configuration""" start="00:07:33.600" video="qanda-one" id="subtitle"]]
+[[!template text="""nor option. So there is no,""" start="00:07:38.440" video="qanda-one" id="subtitle"]]
+[[!template text="""if you think about, you are used to use org""" start="00:07:41.960" video="qanda-one" id="subtitle"]]
+[[!template text="""export normally and to use all the options""" start="00:07:45.660" video="qanda-one" id="subtitle"]]
+[[!template text="""that are possible on all the things they are""" start="00:07:49.540" video="qanda-one" id="subtitle"]]
+[[!template text="""not included. You can add them because when""" start="00:07:52.000" video="qanda-one" id="subtitle"]]
+[[!template text="""you are in a render function.""" start="00:08:04.900" video="qanda-one" id="subtitle"]]
+[[!template text="""So this is the render function that I showed""" start="00:08:07.060" video="qanda-one" id="subtitle"]]
+[[!template text="""in the theme. You have a page tree so you""" start="00:08:08.940" video="qanda-one" id="subtitle"]]
+[[!template text="""have the information but in the global I""" start="00:08:11.980" video="qanda-one" id="subtitle"]]
+[[!template text="""think, yes in global, you can pass anything""" start="00:08:18.358" video="qanda-one" id="subtitle"]]
+[[!template text="""you want and if you want you can pass the""" start="00:08:21.020" video="qanda-one" id="subtitle"]]
+[[!template text="""parse tree of the whole file.""" start="00:08:24.720" video="qanda-one" id="subtitle"]]
+[[!template text="""So if you pass the parse tree of the whole""" start="00:08:28.080" video="qanda-one" id="subtitle"]]
+[[!template text="""file, what you can do is that you can get it""" start="00:08:30.840" video="qanda-one" id="subtitle"]]
+[[!template text="""there. So I don't have it right now,""" start="00:08:35.400" video="qanda-one" id="subtitle"]]
+[[!template text="""but you might have your include stuff and you""" start="00:08:38.659" video="qanda-one" id="subtitle"]]
+[[!template text="""get it with a node property that target""" start="00:08:43.980" video="qanda-one" id="subtitle"]]
+[[!template text="""something in the global variable.""" start="00:08:48.580" video="qanda-one" id="subtitle"]]
+[[!template text="""So if we look just to be short but those 3""" start="00:08:50.940" video="qanda-one" id="subtitle"]]
+[[!template text="""parts, the first 1 is page tree.""" start="00:08:55.320" video="qanda-one" id="subtitle"]]
+[[!template text="""So it's this page that you are on the right,""" start="00:08:57.180" video="qanda-one" id="subtitle"]]
+[[!template text="""pages are a list of all the pages and global""" start="00:08:59.160" video="qanda-one" id="subtitle"]]
+[[!template text="""is something that you can set and reset once""" start="00:09:02.840" video="qanda-one" id="subtitle"]]
+[[!template text="""and you have the whole part street.""" start="00:09:06.580" video="qanda-one" id="subtitle"]]
+[[!template text="""So anything that you add in your op-files""" start="00:09:10.840" video="qanda-one" id="subtitle"]]
+[[!template text="""could go in global if you want,""" start="00:09:15.040" video="qanda-one" id="subtitle"]]
+[[!template text="""but it's not included.""" start="00:09:16.840" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right. I think that's also answering the""" start="00:09:20.600" video="qanda-one" id="subtitle"]]
+[[!template text="""question. Can this generate a single file""" start="00:09:23.140" video="qanda-one" id="subtitle"]]
+[[!template text="""from different sources like blog.org,""" start="00:09:24.840" video="qanda-one" id="subtitle"]]
+[[!template text="""videos.org? I think you've just answered""" start="00:09:26.880" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, I think yes.""" start="00:09:30.040" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: this, right? Right. Okay.""" start="00:09:28.820" video="qanda-one" id="subtitle"]]
+[[!template text="""So moving on to the other question.""" start="00:09:32.660" video="qanda-one" id="subtitle"]]
+[[!template text="""Do you have pre-made templates already along""" start="00:09:34.660" video="qanda-one" id="subtitle"]]
+[[!template text="""with the 1.el package?""" start="00:09:37.200" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: So, yes and no. So, The answer is if we go to""" start="00:09:41.680" video="qanda-one" id="subtitle"]]
+[[!template text="""1.n, so this file, so the first are blah,""" start="00:09:49.960" video="qanda-one" id="subtitle"]]
+[[!template text="""blah, blah. How it works,""" start="00:09:55.520" video="qanda-one" id="subtitle"]]
+[[!template text="""so, okay, so you have the 1-hocs,""" start="00:10:01.780" video="qanda-one" id="subtitle"]]
+[[!template text="""which is what can translate the org parse""" start="00:10:07.200" video="qanda-one" id="subtitle"]]
+[[!template text="""tree into HTML. So this is for the content of""" start="00:10:11.980" video="qanda-one" id="subtitle"]]
+[[!template text="""each page. So this is very useful.""" start="00:10:16.260" video="qanda-one" id="subtitle"]]
+[[!template text="""Then we have a bunch of functions that help""" start="00:10:18.480" video="qanda-one" id="subtitle"]]
+[[!template text="""to render the function,""" start="00:10:22.660" video="qanda-one" id="subtitle"]]
+[[!template text="""each page. And you have a bunch of...""" start="00:10:26.040" video="qanda-one" id="subtitle"]]
+[[!template text="""Everything that starts with dash default is a""" start="00:10:31.360" video="qanda-one" id="subtitle"]]
+[[!template text="""render function. So there's no template,""" start="00:10:33.920" video="qanda-one" id="subtitle"]]
+[[!template text="""but each page that if you want,""" start="00:10:37.480" video="qanda-one" id="subtitle"]]
+[[!template text="""so that 1, the home, you can use 1 default""" start="00:10:42.240" video="qanda-one" id="subtitle"]]
+[[!template text="""home. So, if you want to list the page,""" start="00:10:46.400" video="qanda-one" id="subtitle"]]
+[[!template text="""you have that 1. For a page with no table of""" start="00:10:48.740" video="qanda-one" id="subtitle"]]
+[[!template text="""content, you use that thing.""" start="00:10:53.220" video="qanda-one" id="subtitle"]]
+[[!template text="""And if you go back to be short,""" start="00:10:55.840" video="qanda-one" id="subtitle"]]
+[[!template text="""if we go there, I put this like that.""" start="00:10:58.260" video="qanda-one" id="subtitle"]]
+[[!template text="""So this that we see here is the first inline""" start="00:11:03.900" video="qanda-one" id="subtitle"]]
+[[!template text="""of 1.org. By the way, it doesn't have to be""" start="00:11:09.960" video="qanda-one" id="subtitle"]]
+[[!template text="""called 1.org. It's just as you want,""" start="00:11:14.440" video="qanda-one" id="subtitle"]]
+[[!template text="""but maybe we can call it.""" start="00:11:17.160" video="qanda-one" id="subtitle"]]
+[[!template text="""So default, what was the other 1?""" start="00:11:20.740" video="qanda-one" id="subtitle"]]
+[[!template text="""Default with sidebar. Or is it default with""" start="00:11:23.220" video="qanda-one" id="subtitle"]]
+[[!template text="""sidebar or default? Yes,""" start="00:11:28.280" video="qanda-one" id="subtitle"]]
+[[!template text="""with sidebar. Sidebar,""" start="00:11:30.080" video="qanda-one" id="subtitle"]]
+[[!template text="""if it's worked correctly.""" start="00:11:36.400" video="qanda-one" id="subtitle"]]
+[[!template text="""Okay, so, okay, so I don't know why the CSS""" start="00:11:39.140" video="qanda-one" id="subtitle"]]
+[[!template text="""is not working correctly.""" start="00:11:46.760" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: It's okay. It wouldn't be a live demo without""" start="00:11:50.740" video="qanda-one" id="subtitle"]]
+[[!template text="""problems occurring at some point.""" start="00:11:53.860" video="qanda-one" id="subtitle"]]
+[[!template text="""Okay.""" start="00:11:55.440" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: But so maybe we can use this 1.""" start="00:11:56.980" video="qanda-one" id="subtitle"]]
+[[!template text="""Or we stuck. So we are going to use this 1,""" start="00:12:02.940" video="qanda-one" id="subtitle"]]
+[[!template text="""we've talked this 1, but maybe better in this""" start="00:12:06.980" video="qanda-one" id="subtitle"]]
+[[!template text="""1 that add something. So we build it again""" start="00:12:16.020" video="qanda-one" id="subtitle"]]
+[[!template text="""and now, oh, come on. We have it and we have""" start="00:12:20.340" video="qanda-one" id="subtitle"]]
+[[!template text="""the, sorry, if we have just default,""" start="00:12:32.180" video="qanda-one" id="subtitle"]]
+[[!template text="""we rebuild and now this is the default layer""" start="00:12:37.820" video="qanda-one" id="subtitle"]]
+[[!template text="""that if we do with table of content,""" start="00:12:41.120" video="qanda-one" id="subtitle"]]
+[[!template text="""you have it, you have the default content.""" start="00:12:46.060" video="qanda-one" id="subtitle"]]
+[[!template text="""So how to change, and they are not template.""" start="00:12:48.620" video="qanda-one" id="subtitle"]]
+[[!template text="""They are render functions that takes your""" start="00:12:53.940" video="qanda-one" id="subtitle"]]
+[[!template text="""page as a tree and render HTML string.""" start="00:13:00.300" video="qanda-one" id="subtitle"]]
+[[!template text="""So you can build any function that you want.""" start="00:13:06.260" video="qanda-one" id="subtitle"]]
+[[!template text="""So yes, I think that answers the question.""" start="00:13:10.600" video="qanda-one" id="subtitle"]]
+[[!template text="""There is no template like in other systems.""" start="00:13:12.280" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool, that makes sense.""" start="00:13:17.780" video="qanda-one" id="subtitle"]]
+[[!template text="""We have 2 more questions and then we'll need""" start="00:13:19.020" video="qanda-one" id="subtitle"]]
+[[!template text="""to go on a lunch break.""" start="00:13:21.000" video="qanda-one" id="subtitle"]]
+[[!template text="""I don't see anyone join the room.""" start="00:13:22.200" video="qanda-one" id="subtitle"]]
+[[!template text="""Remember, Tony has said that he would be""" start="00:13:23.740" video="qanda-one" id="subtitle"]]
+[[!template text="""willing to answer more questions during the""" start="00:13:25.640" video="qanda-one" id="subtitle"]]
+[[!template text="""lunch break, perhaps because it's not lunch""" start="00:13:27.500" video="qanda-one" id="subtitle"]]
+[[!template text="""break for you. Are you in Europe right now?""" start="00:13:29.120" video="qanda-one" id="subtitle"]]
+[[!template text="""So that's why for us, also for me it's very""" start="00:13:32.360" video="qanda-one" id="subtitle"]]
+[[!template text="""dark, but it's not lunch break for us,""" start="00:13:34.600" video="qanda-one" id="subtitle"]]
+[[!template text="""it's going to be dinner break soon actually.""" start="00:13:37.660" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes. Yes, exactly, so I'm just,""" start="00:13:31.280" video="qanda-one" id="subtitle"]]
+[[!template text="""I'm okay.""" start="00:13:44.020" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right, Okay, so moving on to 1 of the last 2""" start="00:13:45.580" video="qanda-one" id="subtitle"]]
+[[!template text="""questions. What additional features are there""" start="00:13:49.200" video="qanda-one" id="subtitle"]]
+[[!template text="""that you would like to add to 1.EL""" start="00:13:51.680" video="qanda-one" id="subtitle"]]
+[[!template text="""in the future?""" start="00:13:53.960" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, there's only 1, which is a full text""" start="00:13:56.120" video="qanda-one" id="subtitle"]]
+[[!template text="""search done in a simple way.""" start="00:14:00.560" video="qanda-one" id="subtitle"]]
+[[!template text="""So I don't meet what simple way means,""" start="00:14:06.540" video="qanda-one" id="subtitle"]]
+[[!template text="""but when I see something complicated,""" start="00:14:10.320" video="qanda-one" id="subtitle"]]
+[[!template text="""it doesn't enter in 1 to me.""" start="00:14:12.620" video="qanda-one" id="subtitle"]]
+[[!template text="""So, but really, if you see that,""" start="00:14:15.400" video="qanda-one" id="subtitle"]]
+[[!template text="""I would like to have some way.""" start="00:14:19.120" video="qanda-one" id="subtitle"]]
+[[!template text="""So, this is the documentation and I would""" start="00:14:22.300" video="qanda-one" id="subtitle"]]
+[[!template text="""like to have some way to just have another""" start="00:14:25.080" video="qanda-one" id="subtitle"]]
+[[!template text="""function because we are not talking about""" start="00:14:27.500" video="qanda-one" id="subtitle"]]
+[[!template text="""those websites on the 1.L.""" start="00:14:31.300" video="qanda-one" id="subtitle"]]
+[[!template text="""It's not made for a big company or of your""" start="00:14:34.440" video="qanda-one" id="subtitle"]]
+[[!template text="""things, it's just for a random guy that have""" start="00:14:39.520" video="qanda-one" id="subtitle"]]
+[[!template text="""a blog or a few blogs and If you are a great""" start="00:14:42.440" video="qanda-one" id="subtitle"]]
+[[!template text="""blogger, maybe you are going to write 100 or""" start="00:14:46.200" video="qanda-one" id="subtitle"]]
+[[!template text="""200 or 300 pages in many years.""" start="00:14:53.040" video="qanda-one" id="subtitle"]]
+[[!template text="""So this enter in that category.""" start="00:14:57.240" video="qanda-one" id="subtitle"]]
+[[!template text="""So it's small. So I think it can,""" start="00:15:00.060" video="qanda-one" id="subtitle"]]
+[[!template text="""we could find a way to make a full text""" start="00:15:04.080" video="qanda-one" id="subtitle"]]
+[[!template text="""search. And that is simple.""" start="00:15:07.580" video="qanda-one" id="subtitle"]]
+[[!template text="""I don't need to, to go with,""" start="00:15:10.240" video="qanda-one" id="subtitle"]]
+[[!template text="""with solution like Algolia that is,""" start="00:15:13.520" video="qanda-one" id="subtitle"]]
+[[!template text="""that works super fine.""" start="00:15:16.620" video="qanda-one" id="subtitle"]]
+[[!template text="""But this is something that I don't control""" start="00:15:17.900" video="qanda-one" id="subtitle"]]
+[[!template text="""and I have to give them the data and I'm not""" start="00:15:21.600" video="qanda-one" id="subtitle"]]
+[[!template text="""against that but it's just that I think with""" start="00:15:26.200" video="qanda-one" id="subtitle"]]
+[[!template text="""a bit of work something can be done with full""" start="00:15:29.320" video="qanda-one" id="subtitle"]]
+[[!template text="""textile. But this is the only thing that I""" start="00:15:32.800" video="qanda-one" id="subtitle"]]
+[[!template text="""would like to add.""" start="00:15:35.600" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: Very clear answer. Next question.""" start="00:15:38.720" video="qanda-one" id="subtitle"]]
+[[!template text="""Can you create navbars on a website and fancy""" start="00:15:41.580" video="qanda-one" id="subtitle"]]
+[[!template text="""things like carousels using 1.EL?""" start="00:15:44.380" video="qanda-one" id="subtitle"]]
+[[!template text="""Now carousels is just,""" start="00:15:46.800" video="qanda-one" id="subtitle"]]
+[[!template text="""I think, a fancy way to display pictures and""" start="00:15:48.260" video="qanda-one" id="subtitle"]]
+[[!template text="""please correct me whoever asked this""" start="00:15:51.820" video="qanda-one" id="subtitle"]]
+[[!template text="""question. Otherwise I see you taking notes""" start="00:15:53.800" video="qanda-one" id="subtitle"]]
+[[!template text="""for the answers, thank you very much.""" start="00:15:55.440" video="qanda-one" id="subtitle"]]
+[[!template text="""But if you could specify maybe carousels so""" start="00:15:56.820" video="qanda-one" id="subtitle"]]
+[[!template text="""that Tony and I may get a better idea.""" start="00:15:58.740" video="qanda-one" id="subtitle"]]
+[[!template text="""But still, first part of the question,""" start="00:16:01.920" video="qanda-one" id="subtitle"]]
+[[!template text="""can you create navbars on a website?""" start="00:16:03.340" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes. So if, for instance,""" start="00:16:05.980" video="qanda-one" id="subtitle"]]
+[[!template text="""you see there, to me, it's not a,""" start="00:16:10.900" video="qanda-one" id="subtitle"]]
+[[!template text="""it's a navbar. So you already have it.""" start="00:16:14.600" video="qanda-one" id="subtitle"]]
+[[!template text="""I didn't show that in the talk,""" start="00:16:19.860" video="qanda-one" id="subtitle"]]
+[[!template text="""but the CSS for the default function that""" start="00:16:23.080" video="qanda-one" id="subtitle"]]
+[[!template text="""works is responsive. So,""" start="00:16:27.440" video="qanda-one" id="subtitle"]]
+[[!template text="""out of the box, if you are using something,""" start="00:16:31.720" video="qanda-one" id="subtitle"]]
+[[!template text="""you will have an app bar done for you with""" start="00:16:34.600" video="qanda-one" id="subtitle"]]
+[[!template text="""all the pages that you have.""" start="00:16:37.540" video="qanda-one" id="subtitle"]]
+[[!template text="""So, if we go to install,""" start="00:16:38.680" video="qanda-one" id="subtitle"]]
+[[!template text="""we have that. And if we no longer have that,""" start="00:16:40.920" video="qanda-one" id="subtitle"]]
+[[!template text="""we have that sidebar there.""" start="00:16:44.900" video="qanda-one" id="subtitle"]]
+[[!template text="""And how it's done. So,""" start="00:16:50.220" video="qanda-one" id="subtitle"]]
+[[!template text="""the same way. I like simple fields that are""" start="00:16:52.660" video="qanda-one" id="subtitle"]]
+[[!template text="""flexible and I didn't want configuration""" start="00:16:56.380" video="qanda-one" id="subtitle"]]
+[[!template text="""because if you want to write the code to""" start="00:16:58.860" video="qanda-one" id="subtitle"]]
+[[!template text="""change something you just have to write code.""" start="00:17:01.280" video="qanda-one" id="subtitle"]]
+[[!template text="""So any function, render function,""" start="00:17:03.480" video="qanda-one" id="subtitle"]]
+[[!template text="""is yours. So you can do whatever you want and""" start="00:17:05.859" video="qanda-one" id="subtitle"]]
+[[!template text="""you enter the html that you want to render.""" start="00:17:08.760" video="qanda-one" id="subtitle"]]
+[[!template text="""So let's see how do we get that navigation""" start="00:17:11.520" video="qanda-one" id="subtitle"]]
+[[!template text="""bar that we have when we do that this is a""" start="00:17:17.920" video="qanda-one" id="subtitle"]]
+[[!template text="""CSS stuff. But when we click,""" start="00:17:20.920" video="qanda-one" id="subtitle"]]
+[[!template text="""this is a JS stuff that,""" start="00:17:23.099" video="qanda-one" id="subtitle"]]
+[[!template text="""so let's go to one.l And maybe this is a""" start="00:17:27.040" video="qanda-one" id="subtitle"]]
+[[!template text="""sidebar. Why that function because,""" start="00:17:32.320" video="qanda-one" id="subtitle"]]
+[[!template text="""okay. So when that function,""" start="00:17:36.300" video="qanda-one" id="subtitle"]]
+[[!template text="""so 1 default sidebar is 1 that is used to do""" start="00:17:40.680" video="qanda-one" id="subtitle"]]
+[[!template text="""some of the things at some point,""" start="00:17:45.340" video="qanda-one" id="subtitle"]]
+[[!template text="""what we return is a JackHTML that take a data""" start="00:17:47.120" video="qanda-one" id="subtitle"]]
+[[!template text="""structure and return a string.""" start="00:17:52.120" video="qanda-one" id="subtitle"]]
+[[!template text="""So this is your HTML. So you can see at the""" start="00:17:54.340" video="qanda-one" id="subtitle"]]
+[[!template text="""top you have the end, then you have the body,""" start="00:17:57.280" video="qanda-one" id="subtitle"]]
+[[!template text="""and if we go at the end we can add a script""" start="00:18:01.120" video="qanda-one" id="subtitle"]]
+[[!template text="""thing. So what we've seen with the sidebar""" start="00:18:06.080" video="qanda-one" id="subtitle"]]
+[[!template text="""it's just that much line of JavaScript.""" start="00:18:08.920" video="qanda-one" id="subtitle"]]
+[[!template text="""So this is the only JavaScript that there is""" start="00:18:11.920" video="qanda-one" id="subtitle"]]
+[[!template text="""to get what we have here when we do that.""" start="00:18:17.440" video="qanda-one" id="subtitle"]]
+[[!template text="""So you can add whatever you want.""" start="00:18:25.360" video="qanda-one" id="subtitle"]]
+[[!template text="""It's code and you're the master of that code.""" start="00:18:29.500" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: Splendid, great. So to specify the carousel""" start="00:18:35.280" video="qanda-one" id="subtitle"]]
+[[!template text="""stuff that we mentioned before,""" start="00:18:38.800" video="qanda-one" id="subtitle"]]
+[[!template text="""it's pictures rolling or sliding from 1 to""" start="00:18:39.860" video="qanda-one" id="subtitle"]]
+[[!template text="""the other. It's kind of like having a""" start="00:18:42.520" video="qanda-one" id="subtitle"]]
+[[!template text="""gallery, imagine a fancy dynamic gallery""" start="00:18:44.620" video="qanda-one" id="subtitle"]]
+[[!template text="""where you can scroll pictures.""" start="00:18:47.540" video="qanda-one" id="subtitle"]]
+[[!template text="""Do you see what I'm talking about?""" start="00:18:48.740" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, so that things would just be I think""" start="00:18:50.380" video="qanda-one" id="subtitle"]]
+[[!template text="""some javascript added somewhere and I can""" start="00:18:53.620" video="qanda-one" id="subtitle"]]
+[[!template text="""show you another website.""" start="00:18:57.620" video="qanda-one" id="subtitle"]]
+[[!template text="""So for instance if we go because there are""" start="00:18:59.440" video="qanda-one" id="subtitle"]]
+[[!template text="""not all the data of the website are not all""" start="00:19:04.200" video="qanda-one" id="subtitle"]]
+[[!template text="""public, but the website they are.""" start="00:19:08.160" video="qanda-one" id="subtitle"]]
+[[!template text="""So for instance, a mini-buffer,""" start="00:19:10.140" video="qanda-one" id="subtitle"]]
+[[!template text="""it's not a carousel, but at the home page,""" start="00:19:14.480" video="qanda-one" id="subtitle"]]
+[[!template text="""we can do whatever we want.""" start="00:19:19.140" video="qanda-one" id="subtitle"]]
+[[!template text="""Still those pages, still,""" start="00:19:22.660" video="qanda-one" id="subtitle"]]
+[[!template text="""this is only 1 file for each page.""" start="00:19:24.560" video="qanda-one" id="subtitle"]]
+[[!template text="""So if we click, we can get those things.""" start="00:19:28.980" video="qanda-one" id="subtitle"]]
+[[!template text="""It's just that when we,""" start="00:19:31.720" video="qanda-one" id="subtitle"]]
+[[!template text="""for the home page for instance,""" start="00:19:33.420" video="qanda-one" id="subtitle"]]
+[[!template text="""when we go back on that home page,""" start="00:19:35.860" video="qanda-one" id="subtitle"]]
+[[!template text="""we have the list at that point.""" start="00:19:38.160" video="qanda-one" id="subtitle"]]
+[[!template text="""So let's go back to that function that we're,""" start="00:19:40.580" video="qanda-one" id="subtitle"]]
+[[!template text="""so not that 1, maybe the 1,""" start="00:19:45.540" video="qanda-one" id="subtitle"]]
+[[!template text="""1 different, it's better because that 1 is""" start="00:19:47.740" video="qanda-one" id="subtitle"]]
+[[!template text="""simpler. So almost nothing happened.""" start="00:19:50.760" video="qanda-one" id="subtitle"]]
+[[!template text="""We have the list of the pages.""" start="00:19:53.620" video="qanda-one" id="subtitle"]]
+[[!template text="""So I can do whatever I want with that list.""" start="00:19:56.240" video="qanda-one" id="subtitle"]]
+[[!template text="""I can loop over and we can see that 1,""" start="00:20:00.360" video="qanda-one" id="subtitle"]]
+[[!template text="""that default home list of pages,""" start="00:20:06.340" video="qanda-one" id="subtitle"]]
+[[!template text="""so that list of the pages,""" start="00:20:08.600" video="qanda-one" id="subtitle"]]
+[[!template text="""and we see where is the list.""" start="00:20:10.260" video="qanda-one" id="subtitle"]]
+[[!template text="""Okay, so this is a, here we have a function""" start="00:20:13.200" video="qanda-one" id="subtitle"]]
+[[!template text="""that just, we want the pages,""" start="00:20:17.680" video="qanda-one" id="subtitle"]]
+[[!template text="""but I think we, but the home page,""" start="00:20:21.100" video="qanda-one" id="subtitle"]]
+[[!template text="""and we have that list,""" start="00:20:24.620" video="qanda-one" id="subtitle"]]
+[[!template text="""and then here we do that.""" start="00:20:28.300" video="qanda-one" id="subtitle"]]
+[[!template text="""And we get something listed,""" start="00:20:37.740" video="qanda-one" id="subtitle"]]
+[[!template text="""But then as you control everything that you""" start="00:20:40.680" video="qanda-one" id="subtitle"]]
+[[!template text="""do, you can pass any CSS class that you want""" start="00:20:44.060" video="qanda-one" id="subtitle"]]
+[[!template text="""to do those things. So,""" start="00:20:51.820" video="qanda-one" id="subtitle"]]
+[[!template text="""for instance, that div,""" start="00:20:53.620" video="qanda-one" id="subtitle"]]
+[[!template text="""add the class either. Yes,""" start="00:20:55.260" video="qanda-one" id="subtitle"]]
+[[!template text="""you can do. I don't remember the question,""" start="00:21:00.660" video="qanda-one" id="subtitle"]]
+[[!template text="""but I think I was answering the right 1.""" start="00:21:02.840" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: No, no, you were answering it.""" start="00:21:05.860" video="qanda-one" id="subtitle"]]
+[[!template text="""It was about carousels and about having fancy""" start="00:21:07.260" video="qanda-one" id="subtitle"]]
+[[!template text="""display for image galleries.""" start="00:21:09.720" video="qanda-one" id="subtitle"]]
+[[!template text="""And I think you've answered.""" start="00:21:11.720" video="qanda-one" id="subtitle"]]
+[[!template text="""Basically, you just put your JavaScript,""" start="00:21:12.660" video="qanda-one" id="subtitle"]]
+[[!template text="""you embed it inside the code.""" start="00:21:14.160" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Exactly.""" start="00:21:16.620" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: So, other question. Would there be an""" start="00:21:18.620" video="qanda-one" id="subtitle"]]
+[[!template text="""automated way to convert an existing HTML""" start="00:21:20.220" video="qanda-one" id="subtitle"]]
+[[!template text="""document into a JackHTML form?""" start="00:21:22.860" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, so that 1, I don't have 1.""" start="00:21:28.180" video="qanda-one" id="subtitle"]]
+[[!template text="""It's another topic, but maybe there are some""" start="00:21:32.200" video="qanda-one" id="subtitle"]]
+[[!template text="""kind of session because some people that""" start="00:21:35.660" video="qanda-one" id="subtitle"]]
+[[!template text="""know, that are used to Lisp,""" start="00:21:37.940" video="qanda-one" id="subtitle"]]
+[[!template text="""common Lisp or Clojure or other,""" start="00:21:43.080" video="qanda-one" id="subtitle"]]
+[[!template text="""Jack-html, that function,""" start="00:21:46.300" video="qanda-one" id="subtitle"]]
+[[!template text="""is something classic, but I didn't find,""" start="00:21:50.740" video="qanda-one" id="subtitle"]]
+[[!template text="""So I wrote it because I didn't find it""" start="00:21:53.680" video="qanda-one" id="subtitle"]]
+[[!template text="""already done the way I want for Emacs.""" start="00:22:00.840" video="qanda-one" id="subtitle"]]
+[[!template text="""And this is something for E-cup closure.""" start="00:22:06.040" video="qanda-one" id="subtitle"]]
+[[!template text="""So really I take, it's not that I take my""" start="00:22:09.640" video="qanda-one" id="subtitle"]]
+[[!template text="""impression, just that when you have something""" start="00:22:13.260" video="qanda-one" id="subtitle"]]
+[[!template text="""that exists and you look at how it's done.""" start="00:22:15.060" video="qanda-one" id="subtitle"]]
+[[!template text="""So you have a eCup for Crusher,""" start="00:22:20.640" video="qanda-one" id="subtitle"]]
+[[!template text="""does the same thing that HTML.""" start="00:22:25.160" video="qanda-one" id="subtitle"]]
+[[!template text="""It's more that I do a Jack HTML do what eCup""" start="00:22:26.660" video="qanda-one" id="subtitle"]]
+[[!template text="""does, but maybe they do it a better way.""" start="00:22:32.440" video="qanda-one" id="subtitle"]]
+[[!template text="""So I think maybe in that community,""" start="00:22:37.800" video="qanda-one" id="subtitle"]]
+[[!template text="""it might already exist something that go from""" start="00:22:42.320" video="qanda-one" id="subtitle"]]
+[[!template text="""HTML to Jack. So you can see,""" start="00:22:46.320" video="qanda-one" id="subtitle"]]
+[[!template text="""is it big enough? I will make it big enough.""" start="00:22:53.640" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: It's good enough, don't worry.""" start="00:22:57.626" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: So if you see- So you have the hash HTML and""" start="00:22:56.820" video="qanda-one" id="subtitle"]]
+[[!template text="""you see those things. There are things that I""" start="00:23:01.420" video="qanda-one" id="subtitle"]]
+[[!template text="""couldn't do, for instance,""" start="00:23:04.200" video="qanda-one" id="subtitle"]]
+[[!template text="""for the ID, I couldn't use the hash in the""" start="00:23:05.460" video="qanda-one" id="subtitle"]]
+[[!template text="""name of, of how do we name that,""" start="00:23:09.280" video="qanda-one" id="subtitle"]]
+[[!template text="""of the keywords, because it's used for""" start="00:23:14.760" video="qanda-one" id="subtitle"]]
+[[!template text="""something else in a Emacs Lisp.""" start="00:23:18.480" video="qanda-one" id="subtitle"]]
+[[!template text="""So, I use... Anyway, so you see that you have""" start="00:23:21.180" video="qanda-one" id="subtitle"]]
+[[!template text="""that things but in Emacs we don't have the""" start="00:23:25.520" video="qanda-one" id="subtitle"]]
+[[!template text="""map with that syntax. We have a hash map but""" start="00:23:30.260" video="qanda-one" id="subtitle"]]
+[[!template text="""they are not with that syntax and I wanted""" start="00:23:34.960" video="qanda-one" id="subtitle"]]
+[[!template text="""that syntax so we use only list and Here we""" start="00:23:37.120" video="qanda-one" id="subtitle"]]
+[[!template text="""have an array with a hash map.""" start="00:23:46.080" video="qanda-one" id="subtitle"]]
+[[!template text="""So let me just say, so the question was,""" start="00:23:49.200" video="qanda-one" id="subtitle"]]
+[[!template text="""does it exist something?""" start="00:23:52.360" video="qanda-one" id="subtitle"]]
+[[!template text="""I think not, but it could be built or maybe""" start="00:23:55.240" video="qanda-one" id="subtitle"]]
+[[!template text="""exist for E-Cups, you are interested.""" start="00:23:58.680" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay, great. I think that answers the""" start="00:24:03.240" video="qanda-one" id="subtitle"]]
+[[!template text="""question perfectly. And our final question,""" start="00:24:04.860" video="qanda-one" id="subtitle"]]
+[[!template text="""does this or you use any other Emacs packages""" start="00:24:08.440" video="qanda-one" id="subtitle"]]
+[[!template text="""for your packages slash website,""" start="00:24:12.240" video="qanda-one" id="subtitle"]]
+[[!template text="""example, or publish? Like,""" start="00:24:14.840" video="qanda-one" id="subtitle"]]
+[[!template text="""rephrasing the question,""" start="00:24:17.020" video="qanda-one" id="subtitle"]]
+[[!template text="""do you use it for your own personal usage or""" start="00:24:17.960" video="qanda-one" id="subtitle"]]
+[[!template text="""do you interact with other packages?""" start="00:24:20.820" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: I'm not sure I understand the question.""" start="00:24:24.120" video="qanda-one" id="subtitle"]]
+[[!template text="""Can you please repeat the question?""" start="00:24:26.640" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yes, I will reread it as it is written and I""" start="00:24:29.820" video="qanda-one" id="subtitle"]]
+[[!template text="""will leave you interpret it however you want.""" start="00:24:32.460" video="qanda-one" id="subtitle"]]
+[[!template text="""Thank you. Does this or you use any other""" start="00:24:34.760" video="qanda-one" id="subtitle"]]
+[[!template text="""Emacs packages for your package slash website""" start="00:24:39.220" video="qanda-one" id="subtitle"]]
+[[!template text="""like org-publish?""" start="00:24:43.840" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: No, no, no. I don't use nothing.""" start="00:24:46.620" video="qanda-one" id="subtitle"]]
+[[!template text="""I just accept dependency of 1.n.""" start="00:24:49.660" video="qanda-one" id="subtitle"]]
+[[!template text="""So, we are in 1.n and we go at the top and we""" start="00:24:57.660" video="qanda-one" id="subtitle"]]
+[[!template text="""see that those are the dependencies.""" start="00:25:01.000" video="qanda-one" id="subtitle"]]
+[[!template text="""I use nothing. So what I do is that I""" start="00:25:04.820" video="qanda-one" id="subtitle"]]
+[[!template text="""publish, I just generate the public""" start="00:25:09.520" video="qanda-one" id="subtitle"]]
+[[!template text="""directory. So if we go to public,""" start="00:25:12.620" video="qanda-one" id="subtitle"]]
+[[!template text="""this 1, no, I don't want this 1.""" start="00:25:16.500" video="qanda-one" id="subtitle"]]
+[[!template text="""I want to go to the website of the video.""" start="00:25:18.240" video="qanda-one" id="subtitle"]]
+[[!template text="""If we see here, everything is rendered in the""" start="00:25:23.620" video="qanda-one" id="subtitle"]]
+[[!template text="""public. Any services, if you use your own""" start="00:25:27.400" video="qanda-one" id="subtitle"]]
+[[!template text="""server and you save those files,""" start="00:25:37.380" video="qanda-one" id="subtitle"]]
+[[!template text="""you have your website.""" start="00:25:39.280" video="qanda-one" id="subtitle"]]
+[[!template text="""So I don't use anything else.""" start="00:25:40.580" video="qanda-one" id="subtitle"]]
+[[!template text="""I just git push and I'm using Netlify as a""" start="00:25:42.580" video="qanda-one" id="subtitle"]]
+[[!template text="""service to run to save my files,""" start="00:25:49.700" video="qanda-one" id="subtitle"]]
+[[!template text="""but you can use anything you want.""" start="00:25:52.580" video="qanda-one" id="subtitle"]]
+[[!template text="""Because your website is really what is into a""" start="00:25:55.900" video="qanda-one" id="subtitle"]]
+[[!template text="""public. So, this is another,""" start="00:25:58.620" video="qanda-one" id="subtitle"]]
+[[!template text="""It's not the concern of 1.L""" start="00:26:01.360" video="qanda-one" id="subtitle"]]
+[[!template text="""to answer. I'm not using org.publish.""" start="00:26:04.860" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool, great. Well, thank you.""" start="00:26:08.960" video="qanda-one" id="subtitle"]]
+[[!template text="""I think the question was also about other""" start="00:26:10.900" video="qanda-one" id="subtitle"]]
+[[!template text="""things, but I think If the person wants a""" start="00:26:13.000" video="qanda-one" id="subtitle"]]
+[[!template text="""more clear answer to their question,""" start="00:26:16.500" video="qanda-one" id="subtitle"]]
+[[!template text="""feel free to clarify the question and Tony""" start="00:26:18.820" video="qanda-one" id="subtitle"]]
+[[!template text="""might be able to answer it later on.""" start="00:26:21.260" video="qanda-one" id="subtitle"]]
+[[!template text="""Alright Tony, I think that's all the""" start="00:26:22.960" video="qanda-one" id="subtitle"]]
+[[!template text="""questions we had. Thank you so much for""" start="00:26:24.220" video="qanda-one" id="subtitle"]]
+[[!template text="""taking the time not only to present Adimax""" start="00:26:25.760" video="qanda-one" id="subtitle"]]
+[[!template text="""Kant, but also for answering all the""" start="00:26:27.680" video="qanda-one" id="subtitle"]]
+[[!template text="""questions people had.""" start="00:26:29.240" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thank you to everybody participating,""" start="00:26:31.220" video="qanda-one" id="subtitle"]]
+[[!template text="""organizing and thank you for all those""" start="00:26:34.540" video="qanda-one" id="subtitle"]]
+[[!template text="""questions and you can send me any emails if""" start="00:26:38.000" video="qanda-one" id="subtitle"]]
+[[!template text="""you have a question and open the issues if""" start="00:26:42.180" video="qanda-one" id="subtitle"]]
+[[!template text="""it's not working the way it should work for""" start="00:26:45.180" video="qanda-one" id="subtitle"]]
+[[!template text="""you. Please send me those things.""" start="00:26:47.720" video="qanda-one" id="subtitle"]]
+[[!template text="""Thank you, everybody.""" start="00:26:49.840" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: Splendid, thank you. And before,""" start="00:26:51.940" video="qanda-one" id="subtitle"]]
+[[!template text="""so right now we're gonna go on a lunch break.""" start="00:26:54.280" video="qanda-one" id="subtitle"]]
+[[!template text="""We'll be back in about 40 minutes for the""" start="00:26:56.140" video="qanda-one" id="subtitle"]]
+[[!template text="""talk called Emacs Turbocharges My Writing.""" start="00:26:58.660" video="qanda-one" id="subtitle"]]
+[[!template text="""And I will not tell you more.""" start="00:27:01.300" video="qanda-one" id="subtitle"]]
+[[!template text="""You can look at the talk page to see a little""" start="00:27:02.540" video="qanda-one" id="subtitle"]]
+[[!template text="""bit of a synopsis but otherwise keep the""" start="00:27:04.280" video="qanda-one" id="subtitle"]]
+[[!template text="""surprise. So have a good lunch or have a good""" start="00:27:06.340" video="qanda-one" id="subtitle"]]
+[[!template text="""dinner if you are in dinner-friendly times""" start="00:27:08.900" video="qanda-one" id="subtitle"]]
+[[!template text="""and I will see you afterwards.""" start="00:27:11.880" video="qanda-one" id="subtitle"]]
+[[!template text="""Thank you again, Tony.""" start="00:27:13.180" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 0]: See you.""" start="00:27:14.860" video="qanda-one" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right. Let me just close everything.""" start="00:27:17.960" video="qanda-one" id="subtitle"]]
+[[!template text="""All right, got it. OK,""" start="00:27:29.080" video="qanda-one" id="subtitle"]]
+[[!template text="""so thank you so much, Tony.""" start="00:27:30.480" video="qanda-one" id="subtitle"]]
+[[!template text="""I just had to clear everything up on the""" start="00:27:31.400" video="qanda-one" id="subtitle"]]
+[[!template text="""stream. I'm going to need to...""" start="00:27:33.520" video="qanda-one" id="subtitle"]]
+[[!template text="""Sorry. I'm going to stop.""" start="00:27:36.160" video="qanda-one" id="subtitle"]]
+
+Questions or comments? Please e-mail [tony@tonyaldon.com](mailto:tony@tonyaldon.com?subject=Comment%20for%20EmacsConf%202023%20one%3A%20one.el%3A%20the%20static%20site%20generator%20for%20Emacs%20Lisp%20Programmers)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/one-before.md b/2023/info/one-before.md
new file mode 100644
index 00000000..04ae447f
--- /dev/null
+++ b/2023/info/one-before.md
@@ -0,0 +1,32 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 23-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="one-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="one-mainVideo" data="""
+00:00.000 Introduction
+00:24.000 Documentation
+02:02.200 Starting a new project
+02:27.400 Building
+03:19.760 Side by side
+04:32.160 Writing a render function
+05:44.680 New page
+06:41.720 Linking between pages
+08:40.000 CSS
+10:23.160 How to write a render function
+19:03.200 Rendering content
+20:37.160 Rendering CSS
+
+"""]]<div></div>Duration: 22:18 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/x2yYYWLHQe75FTV8sWiDmy">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="one-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="one-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus"></audio></div><div></div>Duration: 27:39 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus">Download --answers.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm">Download --answers.webm (96MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/one-nav.md b/2023/info/one-nav.md
new file mode 100644
index 00000000..fe3eb334
--- /dev/null
+++ b/2023/info/one-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/table">Who needs Excel? Managing your students qualifications with org-table</a>
+Next by track: <a href="/2023/talks/writing">Emacs turbo-charges my writing</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/overlay-after.md b/2023/info/overlay-after.md
new file mode 100644
index 00000000..7db881e5
--- /dev/null
+++ b/2023/info/overlay-after.md
@@ -0,0 +1,731 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="overlay-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Hi, I'm Jeff Trull, and today I'm going to talk to you""" start="00:00:00.000" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""about improving C++ compiler diagnostics""" start="00:00:04.898" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""using overlays and other features from Emacs.""" start="00:00:08.460" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""First an overview of my talk.""" start="00:00:13.600" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I'm going to cover what overlays are""" start="00:00:15.840" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and how you can use them in code,""" start="00:00:17.657" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""then I'm going to talk about C++""" start="00:00:19.326" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and why its compiler errors can be so onerous.""" start="00:00:21.479" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Finally, we'll take that information""" start="00:00:24.480" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and build a new minor mode""" start="00:00:26.751" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""using overlays and other Emacs features.""" start="00:00:28.448" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Overlays and what they can do""" start="00:00:33.560" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""First of all, overlays.""" start="00:00:33.560" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""What are they?""" start="00:00:35.520" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""They are objects consisting of a buffer range""" start="00:00:36.680" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and a set of properties.""" start="00:00:39.125" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""That means that they cover a region in a buffer.""" start="00:00:40.400" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""The properties can be a certain set""" start="00:00:43.120" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""of special property names,""" start="00:00:45.534" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""in which case they can be used to cause""" start="00:00:47.345" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""special effects in the buffer,""" start="00:00:50.289" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""but they never change the underlying text.""" start="00:00:52.570" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""You can use them for things like hiding things.""" start="00:00:55.660" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So, for example, overlays are working right now""" start="00:00:59.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""in this window. `org-present`,""" start="00:01:02.887" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""the technology I'm using for this presentation,""" start="00:01:04.661" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""is hiding the asterisk before every headline,""" start="00:01:07.596" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""as well as the things called emphasis markers;""" start="00:01:10.032" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that is, those things that make things look""" start="00:01:12.521" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""monospaced for verbatim, or italic, or bold.""" start="00:01:16.270" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""The special characters we use to mark off those sections""" start="00:01:20.700" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""are also hidden by `org-present` using overlays.""" start="00:01:24.422" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""But those things are still in the buffer""" start="00:01:28.940" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and they're still visible to code.""" start="00:01:30.602" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So if I run this little snippet of code down here,""" start="00:01:31.980" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""it's going to go up to the headline &quot;Overlays""" start="00:01:34.922" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and what they can do,&quot; and it's going to tell us""" start="00:01:37.404" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""what's there in the buffer.""" start="00:01:40.052" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's go down and run this.""" start="00:01:41.540" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So according to this code, the contents of the buffer""" start="00:01:45.100" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to the left of the headline is a star in a space,""" start="00:01:48.958" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""which means that even though we can't see that star,""" start="00:01:51.991" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""it's still there, because it's hidden by an overlay.""" start="00:01:55.205" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""And that's kind of the essence of what overlays are.""" start="00:01:58.220" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Simple overlay example - creating an overlay""" start="00:02:02.500" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Let's do a simple overlay example.""" start="00:02:02.500" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We have some text on the right here,""" start="00:02:04.780" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""which is a famous poem by William Carlos Williams,""" start="00:02:06.720" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""which has been the subject of many memes.""" start="00:02:09.340" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's create an overlay that covers it.""" start="00:02:12.180" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I'll go down here and use this snippet of code here.""" start="00:02:17.860" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We'll go up to the top, and we'll mark everything""" start="00:02:20.700" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""between `#+BEGIN_VERSE` and `#+END_VERSE`.""" start="00:02:25.919" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""You can see we've created an overlay""" start="00:02:29.540" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""from position 74 to 224.""" start="00:02:33.277" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Adding properties""" start="00:02:35.700" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Now we can take that overlay that we already created""" start="00:02:35.700" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and add a property, in this case a `face` property,""" start="00:02:38.064" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to change the appearance of the text.""" start="00:02:41.212" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""This is a poem, and it's currently using""" start="00:02:43.540" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""a face that is monospaced,""" start="00:02:46.280" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and so it looks like a computer program,""" start="00:02:48.084" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""even though it's a poem.""" start="00:02:50.492" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I think it would be nicer to use something""" start="00:02:51.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""with variable-width font, maybe with some serifs.""" start="00:02:54.586" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So let's give that a try.""" start="00:02:57.980" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Now you can see that the poem looks quite a bit different.""" start="00:03:01.140" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""It looks more like what we'd see in a book.""" start="00:03:03.700" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Deleting an overlay""" start="00:03:10.940" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""We can also delete overlays.""" start="00:03:10.940" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So I've named this one.""" start="00:03:13.100" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So we can just go down and run `delete-overlay`""" start="00:03:15.140" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and get rid of it, and it'll go back to""" start="00:03:17.766" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""the appearance it had before.""" start="00:03:20.049" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""And there it is.""" start="00:03:22.660" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""It's back to normal.""" start="00:03:23.660" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Setting fonts the right way""" start="00:03:24.660" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Now, if you're interested in changing all of the verses""" start="00:03:24.660" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""inside an Org Mode file to a different face""" start="00:03:28.474" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""or a different font family,""" start="00:03:31.109" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""this isn't the way you'd really do it.""" start="00:03:32.786" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I'll just show you that real quick.""" start="00:03:35.060" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""The right way is probably to change the `org-verse` face,""" start="00:03:37.520" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""which is the face used for all of the verse blocks""" start="00:03:43.472" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""inside your Org Mode file.""" start="00:03:48.869" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""And so this is how you do it here:""" start="00:03:51.620" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""`face-remap-add-relative`.""" start="00:03:55.100" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's give it a try.""" start="00:03:56.100" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""It worked!""" start="00:03:58.340" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""More properties""" start="00:03:59.540" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""There are more advanced things that you can do""" start="00:03:59.540" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""other than just changing fonts.""" start="00:04:01.806" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""There's a whole long list of them in the manual,""" start="00:04:03.300" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""but let's talk about the ones we're going to use today.""" start="00:04:05.544" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Visibility""" start="00:04:12.580" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""You can make text invisible, just like `org-present` did.""" start="00:04:12.580" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""The simplest way is to set the `invisible` property to true,""" start="00:04:17.380" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""so here's a code snippet that will do that.""" start="00:04:21.820" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""What we're going to do is""" start="00:04:24.500" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""go and find the word &quot;plums&quot; inside the poem,""" start="00:04:26.160" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and then we're going to make it invisible""" start="00:04:28.967" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""by creating an overlay that covers it,""" start="00:04:31.285" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and then setting the invisible property to true.""" start="00:04:33.437" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Boom!""" start="00:04:36.820" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""It's gone.""" start="00:04:37.940" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We've eaten the plums.""" start="00:04:38.940" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Visibility is a huge topic and very complicated.""" start="00:04:39.940" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""There are powerful mechanisms for using it.""" start="00:04:42.180" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I suggest reading the manual""" start="00:04:44.220" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""if you'd like to know more about that.""" start="00:04:46.627" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Adding text""" start="00:04:49.780" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Another thing we can do with properties""" start="00:04:49.780" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""is to add text either before or after an overlay.""" start="00:04:52.118" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Since we've made the word &quot;plums&quot; invisible,""" start="00:04:54.980" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""or anything that you make invisible in the buffer,""" start="00:04:57.348" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""if you add text then afterwards,""" start="00:05:00.575" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""it looks like you've replaced the original words""" start="00:05:02.663" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""with new words.""" start="00:05:05.700" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So let's add a property, a `before-string` property,""" start="00:05:08.220" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to the overlay that we used before""" start="00:05:12.047" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to make it seem as though we're eating cherries""" start="00:05:14.194" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""instead of plums.""" start="00:05:17.138" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Boom!""" start="00:05:18.180" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""There it is.""" start="00:05:19.580" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So that's how you can replace words using overlays.""" start="00:05:22.020" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Custom properties""" start="00:05:27.820" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""You can also have custom properties""" start="00:05:27.820" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that you name and then use yourself.""" start="00:05:29.761" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""For example, you can use it to mark regions in the buffer.""" start="00:05:31.700" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""You can also use it to add information""" start="00:05:35.320" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to regions in the buffer for your own tracking""" start="00:05:38.009" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""in a minor mode or something like that, which we will use.""" start="00:05:41.180" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Notes on properties""" start="00:05:45.380" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Finally, two notes on properties.""" start="00:05:45.380" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We've been talking about overlay properties,""" start="00:05:49.620" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""but there's also something called text properties.""" start="00:05:51.951" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Text properties are attached to text in a buffer.""" start="00:05:54.540" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""When you copy that text, the properties come along with it.""" start="00:05:57.460" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""If you modify the properties,""" start="00:06:00.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""the buffer is considered modified.""" start="00:06:03.057" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Org Mode makes heavy use of text properties,""" start="00:06:05.500" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""as we can see by running this little code snippet here,""" start="00:06:08.460" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""which is going to tell us the properties""" start="00:06:11.678" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and the string attached""" start="00:06:14.060" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to the &quot;Some poetry&quot; headline on the right.""" start="00:06:16.566" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""There's also some controversy regarding performance.""" start="00:06:20.740" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""It may be that text properties""" start="00:06:23.660" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""perform better than overlay properties,""" start="00:06:25.521" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""so do some research""" start="00:06:27.860" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""if you're going to make heavy use of them.""" start="00:06:28.893" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I prefer overlays because they're just easier to use.""" start="00:06:31.060" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Improving C++ compiler output""" start="00:06:36.100" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""C++ compiler output.""" start="00:06:36.100" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So my day job is C++ programmer,""" start="00:06:37.540" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and although I've been an Emacser for many years,""" start="00:06:41.171" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""it can be a little bit of a chore dealing with errors.""" start="00:06:46.561" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""The error messages that come out of the compiler""" start="00:06:52.860" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""can be pretty hard to understand.""" start="00:06:55.681" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""This has often been a barrier,""" start="00:06:57.580" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""particularly for people who are new to C++.""" start="00:07:00.538" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So let's see what that's like.""" start="00:07:04.640" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I have an example""" start="00:07:09.040" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""which is generously supplied by Ben Deane of Intel.""" start="00:07:10.560" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So let's see what it looks like""" start="00:07:14.780" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""when you compile a C++ program""" start="00:07:17.083" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that has a difficult error in it.""" start="00:07:19.314" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Okay.""" start="00:07:24.400" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Okay.""" start="00:07:28.400" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So you see we have a lot of fairly verbose messages.""" start="00:07:31.400" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""The most verbose one I think is probably here.""" start="00:07:35.680" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""This one here.""" start="00:07:39.400" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""These are pretty bad.""" start="00:07:41.000" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I think there might be bigger ones.""" start="00:07:42.000" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Oh, yeah. Here we go.""" start="00:07:43.000" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Here's my favorite one.""" start="00:07:43.721" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""You can see... Let's look for specialization... Basically,""" start="00:07:44.961" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""this whole section of the buffer here,""" start="00:07:51.064" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that is specifying the specific types""" start="00:07:55.179" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that a function template was instantiated with.""" start="00:07:58.229" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""And it's a lot there.""" start="00:08:02.000" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So if you're trying to figure out""" start="00:08:04.000" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""what's wrong with your program""" start="00:08:05.474" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and you're looking at something like this,""" start="00:08:06.818" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""it can be really, really hard to understand.""" start="00:08:08.885" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Okay.""" start="00:08:11.000" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Back to our presentation.""" start="00:08:12.000" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""The problem with C++ error messages""" start="00:08:17.680" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""So it's often this way in C++""" start="00:08:17.680" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""because we compose types from other types.""" start="00:08:20.064" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""They can be long to begin with,""" start="00:08:23.400" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""but then a couple of other factors come into play.""" start="00:08:26.217" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Many standard class templates have default arguments""" start="00:08:30.240" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""First of all, we can have default template arguments.""" start="00:08:30.240" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""These are arguments you didn't write,""" start="00:08:33.280" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""but that are implicitly there""" start="00:08:35.364" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and can sometimes refer""" start="00:08:37.009" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to the arguments that you did write,""" start="00:08:38.326" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""which causes them to get a bit bigger,""" start="00:08:40.301" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""such as these allocator arguments here and here.""" start="00:08:42.441" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Some types are aliases for longer things, too""" start="00:08:47.520" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Then there are type aliases.""" start="00:08:47.520" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""For example, `std::string` here expands to""" start="00:08:49.360" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""a type with three template arguments.""" start="00:08:54.015" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So you can imagine, when we combine""" start="00:08:58.320" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""those two things together,""" start="00:09:01.941" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""our simple vector of maps from strings to ints""" start="00:09:04.734" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""becomes this humongous thing here, which...""" start="00:09:09.764" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's run the comparison.""" start="00:09:14.258" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Yeah.""" start="00:09:18.360" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Reporting type information accurately means long lines""" start="00:09:20.960" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""So in summary, to properly understand an error""" start="00:09:20.960" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""when you're a C++ programmer""" start="00:09:24.925" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""requires knowing the exact types""" start="00:09:27.371" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that were supplied to your function.""" start="00:09:29.719" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""And types are built recursively,""" start="00:09:32.280" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and therefore the types can--""" start="00:09:34.431" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""the correct exact name for the type""" start="00:09:36.647" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""can just be really huge""" start="00:09:40.514" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and have many levels and layers to it.""" start="00:09:42.777" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So when I was trying to understand""" start="00:09:46.360" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""the things I'd done wrong,""" start="00:09:48.114" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""especially when I was a newer C++ programmer,""" start="00:09:49.467" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""but honestly still even recently,""" start="00:09:52.402" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""if I was having a really intractable problem,""" start="00:09:54.571" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I would just copy the entire error message out,""" start="00:09:57.440" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""stick it in the scratch buffer,""" start="00:10:00.124" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and then manually reformat it""" start="00:10:01.736" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""so I could see what it was telling me""" start="00:10:03.650" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I'd actually called the function""" start="00:10:05.564" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""or whatever it was with, the exact type.""" start="00:10:07.262" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I had to sit there""" start="00:10:09.320" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and go through the whole thing.""" start="00:10:11.312" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""But there's a better way.""" start="00:10:13.240" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Now, anyway.""" start="00:10:15.240" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Emacs can help - Treat C++ type names as just another kind of balanced expression""" start="00:10:18.240" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""So what can Emacs do to help us with this problem?""" start="00:10:18.240" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""First of all, if you think about a type name,""" start="00:10:23.960" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""it's a lot like what we call S-expressions""" start="00:10:28.871" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""or balanced expressions.""" start="00:10:33.080" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Lisp code itself is an S-expression.""" start="00:10:35.480" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""It's basically things with parentheses""" start="00:10:38.400" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and little atoms or symbols in it,""" start="00:10:41.465" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""or strings or numbers.""" start="00:10:44.215" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""But parenthesized balanced expressions""" start="00:10:46.520" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""are things that Emacs was actually built to deal with.""" start="00:10:50.232" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""They were... I found an old manual from 1981,""" start="00:10:55.800" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and the two major modes that they recommended""" start="00:10:58.945" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""or that they actually documented in the manual were""" start="00:11:02.160" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""one, assembly language, and two, Lisp.""" start="00:11:05.766" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""They mentioned that there were other modes,""" start="00:11:08.400" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""but they didn't say anything about them.""" start="00:11:10.653" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So Lisp is something""" start="00:11:12.700" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""with a really long history with Emacs.""" start="00:11:14.626" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Balanced expressions and manipulating them""" start="00:11:17.440" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and doing them efficiently""" start="00:11:19.977" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""is just a thing that Emacs knows how to do,""" start="00:11:21.435" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and Emacs is good at it.""" start="00:11:24.156" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""There's just a legacy""" start="00:11:25.640" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""of algorithms and functions for doing it.""" start="00:11:27.706" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So we take types,""" start="00:11:31.320" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and we take the angle brackets in the types,""" start="00:11:33.183" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and we get the symbols right.""" start="00:11:37.840" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Then we can treat them""" start="00:11:40.840" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""as though they were balanced expressions or S-expressions,""" start="00:11:41.815" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""the same kind that Emacs is really good at handling.""" start="00:11:44.313" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Add overlays to improve readability""" start="00:11:49.320" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Secondly, we can use overlays""" start="00:11:49.320" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to improve the readability of errors.""" start="00:11:51.980" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We can take long lines and break and indent them""" start="00:11:55.260" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""using `before-string`s, so the same thing""" start="00:11:58.013" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I used to add &quot;cherries&quot; into the poem.""" start="00:12:00.200" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We can use that to insert new lines""" start="00:12:03.440" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""followed by indentation""" start="00:12:06.612" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and produce a much nicer-looking listing of a type.""" start="00:12:08.726" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We can also use the `invisible` property""" start="00:12:15.160" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to hide unwanted detail.""" start="00:12:19.642" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Create a minor mode that runs during compilation""" start="00:12:22.400" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Last of all, we can create a minor mode.""" start="00:12:22.400" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""When we're compiling things in Emacs,""" start="00:12:24.960" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""we often use `compilation-mode`.""" start="00:12:27.855" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""`compilation-mode` allows you to install""" start="00:12:30.140" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""compilation filters that run""" start="00:12:32.098" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""when the compiler is producing output,""" start="00:12:33.554" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and at that time, then, we can add our overlays.""" start="00:12:36.435" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We can also add in minor-mode commands""" start="00:12:39.980" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that do whatever we want to the keymap.""" start="00:12:42.869" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""In this case, we're going to show and hide""" start="00:12:45.758" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""lower-level details interactively""" start="00:12:48.322" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""so that we can see a simplified version""" start="00:12:50.177" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""or a more detailed version of a type, depending on our needs.""" start="00:12:53.907" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Parsing types as balanced expressions""" start="00:12:59.500" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""First of all, parsing types as balanced expressions.""" start="00:12:59.500" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We need to be able to quickly locate""" start="00:13:03.980" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""the boundaries and the contents""" start="00:13:05.687" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""of parenthesized expressions,""" start="00:13:07.163" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""or in this case, expressions in angle brackets.""" start="00:13:08.500" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We use a syntax table inside Emacs""" start="00:13:12.100" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to allow movement functions like `forward-list`""" start="00:13:14.996" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to jump between matching angle brackets.""" start="00:13:18.801" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""By default, they're just parentheses.""" start="00:13:21.100" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""First of all, let's look at our syntax table.""" start="00:13:23.460" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We're going to add here syntax entries""" start="00:13:25.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to handle angle brackets as though they were parentheses.""" start="00:13:29.190" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Then we have a lot of types""" start="00:13:33.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that have colons in them, and those are namespaces in C++.""" start="00:13:37.248" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""By default, Emacs does not recognize them""" start="00:13:42.980" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""as parts of symbols, so we're going to tell Emacs""" start="00:13:45.767" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that a colon is something called a symbol constituent,""" start="00:13:49.135" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that it can be part of a name.""" start="00:13:52.840" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Once we do that, then we can use our functions""" start="00:13:54.860" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""like `forward-list`, `backward-word`,""" start="00:13:57.614" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""all of the navigation and movement functions that we have""" start="00:13:59.443" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that do things, that do more complicated things""" start="00:14:03.289" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""like S-expressions and so on,""" start="00:14:06.624" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""can be used now with our angle brackets""" start="00:14:08.708" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and inside of our types.""" start="00:14:11.486" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Indent and fill with overlays - Use ancient "pretty printing" algorithms"""" start="00:14:16.100" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""The next thing we can do is""" start="00:14:16.100" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""perform indent and fill with overlays.""" start="00:14:18.463" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We're going to use `before-string` properties""" start="00:14:21.540" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to break lines and create indentation""" start="00:14:23.736" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to make the output look a little better.""" start="00:14:25.631" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Today, we fill mostly text and we indent mostly code.""" start="00:14:28.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We fill text in order to prevent it""" start="00:14:35.320" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""from running off the side of the right margin,""" start="00:14:37.308" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and we indent code to line up syntactic elements.""" start="00:14:39.903" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Back in the day, they had algorithms that could do both.""" start="00:14:43.940" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Those are what we're going to leverage.""" start="00:14:47.080" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Overlays can mimic line breaks and indentation""" start="00:14:52.260" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""We can use the `before-string` property""" start="00:14:52.260" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to insert a new line in the correct number of spaces""" start="00:14:54.583" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to emulate indentation.""" start="00:14:57.760" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""As a simplified example, here's some code""" start="00:15:00.240" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that will indent 4 upon each open angle bracket.""" start="00:15:03.526" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's give it a try.""" start="00:15:07.280" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Hiding details - Marking depths with overlays""" start="00:15:14.520" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""The next thing we're going to need to do is hide details.""" start="00:15:14.520" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So we have nested types, and the user is going to want to""" start="00:15:18.280" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""be able to reveal lower-level or hide lower-level parts""" start="00:15:22.689" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""of the nested type interactively""" start="00:15:27.372" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""once we've already reformatted the error messages.""" start="00:15:30.132" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's see how we can do that using invisible properties.""" start="00:15:35.480" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""The first thing we're going to do is""" start="00:15:40.440" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""mark depths within the type.""" start="00:15:43.993" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""When we're originally analyzing and formatting""" start="00:15:46.680" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and doing the indentation and the line breaks,""" start="00:15:49.329" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""at the same time, we're going to go through""" start="00:15:51.920" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and mark the nested levels inside the type names,""" start="00:15:55.072" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""just as this diagram shows.""" start="00:15:58.818" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So depth 1, for example, will be everything""" start="00:16:00.840" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""inside the first level of angle brackets.""" start="00:16:03.574" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Depth 2 will be everything inside the second level,""" start="00:16:06.120" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and so on.""" start="00:16:09.039" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""And then later on, when the users request it,""" start="00:16:09.760" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""we can go and look at the depth that they've selected""" start="00:16:12.071" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and then mark those sections invisible.""" start="00:16:16.304" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's see how that might work.""" start="00:16:19.360" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""First of all, let's delete the overlays""" start="00:16:20.520" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that we already have that created the indentation.""" start="00:16:24.023" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Now we're going to go and do that marking""" start="00:16:28.400" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""with the custom depth properties here.""" start="00:16:32.420" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""To prove that I didn't pull a fast one,""" start="00:16:35.740" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""let's go and see what `describe-char` tells us""" start="00:16:38.761" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""about the depths inside here.""" start="00:16:42.083" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's start here.""" start="00:16:44.660" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Okay, so inside this part here, `std::string`,""" start="00:16:46.460" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""There are two overlays.""" start="00:16:52.820" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""One of them is of depth 1, and the other is of depth 2,""" start="00:16:54.980" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""which makes sense, because depth 1 is going to be""" start="00:16:57.781" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""from about here to here,""" start="00:17:00.602" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and depth 2 is going to be from about here to this area.""" start="00:17:02.012" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So it's reasonable that there should be two,""" start="00:17:07.660" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and that's what we expect.""" start="00:17:10.830" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Hiding to a target depth""" start="00:17:12.660" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Now that we've marked the nested types with their depths,""" start="00:17:12.660" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""let's experiment with hiding details.""" start="00:17:17.354" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""This fragment of code takes a user-supplied depth,""" start="00:17:21.380" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""in this case 2, and will hide,""" start="00:17:26.774" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""based on those markings""" start="00:17:29.086" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that we've already made on the overlays,""" start="00:17:30.876" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""the custom depth properties.""" start="00:17:33.933" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We'll take those and apply your requested level of detail.""" start="00:17:36.020" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So let's try it out.""" start="00:17:40.020" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Depth 2.""" start="00:17:42.020" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""All right, that hid everything under the `std::map`,""" start="00:17:43.020" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""so the deepest level.""" start="00:17:46.006" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""If we make it 1, we should get a level higher than that.""" start="00:17:47.260" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So now level 1 and below are hidden.""" start="00:17:52.140" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Now if we put it back to 3, it should reveal everything.""" start="00:17:54.540" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""So that's what we're going to use in our minor mode.""" start="00:17:59.660" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Demo""" start="00:18:04.900" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""Let's have a demo.""" start="00:18:04.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We're going to revisit the initial example""" start="00:18:05.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""with the minor mode installed.""" start="00:18:08.539" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Now we're going to have a compilation filter""" start="00:18:10.380" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that will run on every chunk of output""" start="00:18:12.102" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""produced by the compiler.""" start="00:18:13.594" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""It's going to add those overlays""" start="00:18:15.780" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""with the line breaks and the indentation.""" start="00:18:17.850" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""It's also going to add overlays""" start="00:18:20.420" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that mark up the nested types""" start="00:18:22.207" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""with the depths for each region.""" start="00:18:23.881" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's add the hook for `tspew-mode`.""" start="00:18:26.220" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""And now we can compile again.""" start="00:18:31.580" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""All right, we can already see""" start="00:18:38.220" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that these things are formatted a little bit better""" start="00:18:41.504" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""than they were before.""" start="00:18:47.196" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""They're not all on one line.""" start="00:18:49.180" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Things are getting kind of lined up here.""" start="00:18:50.180" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Here's a good example.""" start="00:18:53.580" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""And here's our big ugly one from before""" start="00:19:05.620" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""with all the characters in it.""" start="00:19:08.638" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's try hiding some of this information.""" start="00:19:10.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""We'll just slowly decrease the level of detail""" start="00:19:14.500" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and you can see how it works.""" start="00:19:17.432" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Over here, where there's these ellipses""" start="00:19:19.740" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""next to string constant, the &quot;...&quot; there,""" start="00:19:22.334" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""that's where we are starting to hide information""" start="00:19:25.460" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and go to the next level.""" start="00:19:30.387" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Hiding more, hiding more, hiding more.""" start="00:19:32.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Now we can go back and start adding it back.""" start="00:19:36.460" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""You can see here now we just have about four layers,""" start="00:19:38.220" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""which is a lot easier to understand.""" start="00:19:42.737" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""And if we start understanding what it is""" start="00:19:45.540" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and we need more detail, we can just increase detail again.""" start="00:19:47.734" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""And every time we increase or decrease detail,""" start="00:19:52.180" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""it reformats so it still stays kind of consolidated""" start="00:19:55.403" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and nice looking.""" start="00:19:58.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's increase it a little bit more.""" start="00:19:59.900" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Okay, so you can see how that worked.""" start="00:20:02.060" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Let's go back to our presentation.""" start="00:20:04.540" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""All right.""" start="00:20:08.340" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template new="1" text="""Conclusion""" start="00:20:10.220" video="mainVideo-overlay" id="subtitle"]]
+
+[[!template text="""In conclusion, we saw how we could solve""" start="00:20:10.220" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""a real problem for C++ programmers""" start="00:20:12.997" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""by combining several Emacs features: overlays,""" start="00:20:15.368" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""compilation mode extensions,""" start="00:20:18.535" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""and balanced expression navigation using syntax tables.""" start="00:20:20.490" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Emacs is often compared unfavorably""" start="00:20:25.700" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""to newer IDEs and editors with slicker user interfaces.""" start="00:20:27.979" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""What Emacs has that they don't is powerful abstractions,""" start="00:20:32.220" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""tons of libraries, and decades of work""" start="00:20:36.387" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""by some of the luminaries in the field of software.""" start="00:20:38.863" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""I think that this project would have been much harder to do""" start="00:20:42.100" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""in a prettier but less powerful environment.""" start="00:20:45.344" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""In short, there's plenty of hope for Emacs.""" start="00:20:48.020" video="mainVideo-overlay" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:20:50.860" video="mainVideo-overlay" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+<a name="overlay-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: Out here or also you can continue discussing""" start="00:00:02.899" video="qanda-overlay" id="subtitle"]]
+[[!template text="""on IRC.""" start="00:00:06.200" video="qanda-overlay" id="subtitle"]]
+[[!template text="""So I see 2 questions coming in already on the""" start="00:00:23.200" video="qanda-overlay" id="subtitle"]]
+[[!template text="""pad. So the first question is,""" start="00:00:24.400" video="qanda-overlay" id="subtitle"]]
+[[!template text="""how did you draw the under braces and over""" start="00:00:26.759" video="qanda-overlay" id="subtitle"]]
+[[!template text="""braces? Sorry, Jeff, you're muted on the blue""" start="00:00:38.360" video="qanda-overlay" id="subtitle"]]
+[[!template text="""button.""" start="00:00:38.559" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm sorry for some reason I'm seeing""" start="00:00:43.340" video="qanda-overlay" id="subtitle"]]
+[[!template text="""everything twice. I'm hearing everything""" start="00:00:45.960" video="qanda-overlay" id="subtitle"]]
+[[!template text="""twice. So it's, it's about with about a 5""" start="00:00:48.420" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 0]: Probably my stream turned on""" start="00:00:53.400" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: second delay. It's straight Oh,""" start="00:00:57.340" video="qanda-overlay" id="subtitle"]]
+[[!template text="""you're right Thank you so much I MPB is""" start="00:01:03.820" video="qanda-overlay" id="subtitle"]]
+[[!template text="""showing the the big blue button Okay,""" start="00:01:07.340" video="qanda-overlay" id="subtitle"]]
+[[!template text="""sorry everyone. Okay now.""" start="00:01:09.060" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I'm together now Let's see How did I draw the""" start="00:01:12.180" video="qanda-overlay" id="subtitle"]]
+[[!template text="""over braces and under braces?""" start="00:01:13.140" video="qanda-overlay" id="subtitle"]]
+[[!template text="""LaTeX. That is a, that's a,""" start="00:01:17.120" video="qanda-overlay" id="subtitle"]]
+[[!template text="""yeah, and a SVG, I think,""" start="00:01:25.020" video="qanda-overlay" id="subtitle"]]
+[[!template text="""produced by LaTeX through a separate file.""" start="00:01:29.160" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I tried to do like a LaTeX code block and""" start="00:01:31.960" video="qanda-overlay" id="subtitle"]]
+[[!template text="""didn't get around to it.""" start="00:01:33.940" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Also, the code to produce it in TickSet was""" start="00:01:36.900" video="qanda-overlay" id="subtitle"]]
+[[!template text="""really, really long. So I didn't put it in""" start="00:01:39.800" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 0]: The next question is, you've got a nice""" start="00:01:47.300" video="qanda-overlay" id="subtitle"]]
+[[!template text="""sounding keyboard. What kind is it?""" start="00:01:48.840" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: the notes. GARY ILLYES-CHAKRABARTYTT I'm so""" start="00:01:50.380" video="qanda-overlay" id="subtitle"]]
+[[!template text="""sorry. It is an Ergodox split keyboard for my""" start="00:01:55.960" video="qanda-overlay" id="subtitle"]]
+[[!template text="""wrists. Sorry about the noise.""" start="00:01:59.700" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 0]: Awesome. Yeah, no worries.""" start="00:02:01.020" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I mean, I like to hear it.""" start="00:02:02.220" video="qanda-overlay" id="subtitle"]]
+[[!template text="""We like to hear it. I think a lot of us do.""" start="00:02:03.900" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: Do we have anything on IRC?""" start="00:02:07.080" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Let's see. Someone's asking for ligatures.""" start="00:02:15.880" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Do you have any questions,""" start="00:02:23.420" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Ben? Charles?""" start="00:02:26.100" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 0]: I see a bunch on the path that I can read for""" start="00:02:35.280" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, yeah, please do.""" start="00:02:36.980" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 0]: now. Sure. So next question is,""" start="00:02:39.960" video="qanda-overlay" id="subtitle"]]
+[[!template text="""do you find that the invasive,""" start="00:02:41.580" video="qanda-overlay" id="subtitle"]]
+[[!template text="""quote unquote, 3-formatting interferes with""" start="00:02:44.540" video="qanda-overlay" id="subtitle"]]
+[[!template text="""navigation?""" start="00:02:44.680" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yes, it does. That is true.""" start="00:02:48.700" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Let me see. Yeah, it's weird.""" start="00:03:01.300" video="qanda-overlay" id="subtitle"]]
+[[!template text="""The good news is that,""" start="00:03:04.120" video="qanda-overlay" id="subtitle"]]
+[[!template text="""oh, you know what? The first thing I did,""" start="00:03:06.260" video="qanda-overlay" id="subtitle"]]
+[[!template text="""my first attempt at this,""" start="00:03:07.600" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I actually made all of the incoming text""" start="00:03:11.140" video="qanda-overlay" id="subtitle"]]
+[[!template text="""invisible and just replaced it with my own""" start="00:03:13.440" video="qanda-overlay" id="subtitle"]]
+[[!template text="""text. And that was actually a lot worse.""" start="00:03:15.440" video="qanda-overlay" id="subtitle"]]
+[[!template text="""The more of the input that is removed or made""" start="00:03:21.420" video="qanda-overlay" id="subtitle"]]
+[[!template text="""invisible, the harder the navigation becomes.""" start="00:03:23.600" video="qanda-overlay" id="subtitle"]]
+[[!template text="""So the fact that now I'm just inserting line""" start="00:03:26.520" video="qanda-overlay" id="subtitle"]]
+[[!template text="""breaks and spaces makes it a lot easier.""" start="00:03:29.440" video="qanda-overlay" id="subtitle"]]
+[[!template text="""And I can still search.""" start="00:03:30.540" video="qanda-overlay" id="subtitle"]]
+[[!template text="""And when I get to the destination of the""" start="00:03:34.600" video="qanda-overlay" id="subtitle"]]
+[[!template text="""search, I'm still in proper normal text.""" start="00:03:38.300" video="qanda-overlay" id="subtitle"]]
+[[!template text="""So it got a little better by changing my""" start="00:03:41.980" video="qanda-overlay" id="subtitle"]]
+[[!template text="""strategy a bit, but it's still a little bit""" start="00:03:43.740" video="qanda-overlay" id="subtitle"]]
+[[!template text="""of a problem. Let's see.""" start="00:03:50.180" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I'll go look at the etherpad.""" start="00:03:51.720" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Where is it?""" start="00:03:55.080" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 0]: I can read the questions from etherpad if""" start="00:03:57.260" video="qanda-overlay" id="subtitle"]]
+[[!template text="""you'd like me to. And then If at any point""" start="00:04:00.660" video="qanda-overlay" id="subtitle"]]
+[[!template text="""you want to take the questions from IRC,""" start="00:04:02.720" video="qanda-overlay" id="subtitle"]]
+[[!template text="""then feel free to do that as well.""" start="00:04:04.320" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: I found it. Can you show us the key bindings""" start="00:04:07.240" video="qanda-overlay" id="subtitle"]]
+[[!template text="""of your minor map for editing overlays?""" start="00:04:08.940" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Well, I have a minor mode key map for""" start="00:04:15.860" video="qanda-overlay" id="subtitle"]]
+[[!template text="""increasing or decreasing the level of detail.""" start="00:04:21.720" video="qanda-overlay" id="subtitle"]]
+[[!template text="""And the key bindings are like,""" start="00:04:24.640" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I can't remember what it is.""" start="00:04:31.840" video="qanda-overlay" id="subtitle"]]
+[[!template text="""If you go and you look at the source on""" start="00:04:34.080" video="qanda-overlay" id="subtitle"]]
+[[!template text="""GitHub, you can see it there.""" start="00:04:35.640" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I forgot what I bound them to.""" start="00:04:37.600" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Something that I'm allowed to do.""" start="00:04:40.320" video="qanda-overlay" id="subtitle"]]
+[[!template text="""They have restrictions on what key bindings""" start="00:04:45.860" video="qanda-overlay" id="subtitle"]]
+[[!template text="""you can make in minor modes.""" start="00:04:47.200" video="qanda-overlay" id="subtitle"]]
+[[!template text="""And I carefully followed the directions.""" start="00:04:49.300" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I don't remember what it was.""" start="00:04:50.580" video="qanda-overlay" id="subtitle"]]
+[[!template text="""It's like Control-C-P or something like that.""" start="00:04:54.220" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Or yeah. Sorry. Your examples were with C++""" start="00:05:00.600" video="qanda-overlay" id="subtitle"]]
+[[!template text="""if you experiment with any other languages.""" start="00:05:02.640" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I haven't. I guess this is just a perennial""" start="00:05:07.460" video="qanda-overlay" id="subtitle"]]
+[[!template text="""pain point for C++ programmers.""" start="00:05:10.440" video="qanda-overlay" id="subtitle"]]
+[[!template text="""So that's kind of why my,""" start="00:05:13.480" video="qanda-overlay" id="subtitle"]]
+[[!template text="""and I am 1, and I guess that's why my focus""" start="00:05:15.680" video="qanda-overlay" id="subtitle"]]
+[[!template text="""was there. You probably have to rewrite some""" start="00:05:17.880" video="qanda-overlay" id="subtitle"]]
+[[!template text="""of the parsers to use something else.""" start="00:05:20.520" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Would it be possible to include overlays in""" start="00:05:24.060" video="qanda-overlay" id="subtitle"]]
+[[!template text="""the source file itself?""" start="00:05:25.080" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I actually don't understand this question.""" start="00:05:30.860" video="qanda-overlay" id="subtitle"]]
+[[!template text="""In the source file itself,""" start="00:05:33.120" video="qanda-overlay" id="subtitle"]]
+[[!template text="""there are language modes that do this.""" start="00:05:35.160" video="qanda-overlay" id="subtitle"]]
+[[!template text="""No, I'm not certain I understand that""" start="00:05:41.580" video="qanda-overlay" id="subtitle"]]
+[[!template text="""question. Maybe you could edit it a little""" start="00:05:43.520" video="qanda-overlay" id="subtitle"]]
+[[!template text="""bit more, overlays in the source file.""" start="00:05:45.360" video="qanda-overlay" id="subtitle"]]
+[[!template text="""What are your plans for TSP in the future?""" start="00:05:48.840" video="qanda-overlay" id="subtitle"]]
+[[!template text="""It's a little fragile.""" start="00:05:54.560" video="qanda-overlay" id="subtitle"]]
+[[!template text="""So it might be nice to investigate.""" start="00:06:00.020" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I think you can get the compiler to output""" start="00:06:02.600" video="qanda-overlay" id="subtitle"]]
+[[!template text="""error messages in different formats,""" start="00:06:04.120" video="qanda-overlay" id="subtitle"]]
+[[!template text="""which might be more parsable or the parsing""" start="00:06:07.320" video="qanda-overlay" id="subtitle"]]
+[[!template text="""might be more maintainable.""" start="00:06:08.360" video="qanda-overlay" id="subtitle"]]
+[[!template text="""That might be an interesting thing to""" start="00:06:10.280" video="qanda-overlay" id="subtitle"]]
+[[!template text="""investigate. And the other thing is I have""" start="00:06:15.460" video="qanda-overlay" id="subtitle"]]
+[[!template text="""just 1 way of reformatting the output where""" start="00:06:19.200" video="qanda-overlay" id="subtitle"]]
+[[!template text="""everything on the same level is vertically""" start="00:06:21.360" video="qanda-overlay" id="subtitle"]]
+[[!template text="""aligned. But I think some people might want""" start="00:06:23.920" video="qanda-overlay" id="subtitle"]]
+[[!template text="""to make more use of the horizontal space on""" start="00:06:26.920" video="qanda-overlay" id="subtitle"]]
+[[!template text="""the screen and take the sort of sibling parts""" start="00:06:30.920" video="qanda-overlay" id="subtitle"]]
+[[!template text="""of the type and line them up straight across""" start="00:06:34.860" video="qanda-overlay" id="subtitle"]]
+[[!template text="""and take up a little bit less vertical space.""" start="00:06:39.140" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Enriched mode. I don't know what enriched""" start="00:06:47.560" video="qanda-overlay" id="subtitle"]]
+[[!template text="""mode is. Interesting. Oh,""" start="00:06:51.240" video="qanda-overlay" id="subtitle"]]
+[[!template text="""what's my repository link?""" start="00:06:52.720" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Let me get that then. I don't know how to""" start="00:06:56.400" video="qanda-overlay" id="subtitle"]]
+[[!template text="""format this properly, but it's just troll""" start="00:07:00.620" video="qanda-overlay" id="subtitle"]]
+[[!template text="""slash tspute. Yeah, it's on GitHub.""" start="00:07:03.820" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Something like that. Let's see.""" start="00:07:14.820" video="qanda-overlay" id="subtitle"]]
+[[!template text="""This looks like the Etherpad.""" start="00:07:16.120" video="qanda-overlay" id="subtitle"]]
+[[!template text="""It looks like all the Etherpad questions.""" start="00:07:19.640" video="qanda-overlay" id="subtitle"]]
+[[!template text="""We have 1 here from Charles.""" start="00:07:22.120" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Can overlays work as hypertext so you can""" start="00:07:24.960" video="qanda-overlay" id="subtitle"]]
+[[!template text="""link an error message back to the source?""" start="00:07:26.680" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Yeah, actually, that's done by default in""" start="00:07:30.720" video="qanda-overlay" id="subtitle"]]
+[[!template text="""compilation mode. That's 1 of the features""" start="00:07:32.680" video="qanda-overlay" id="subtitle"]]
+[[!template text="""you get, which has been around for literally""" start="00:07:36.160" video="qanda-overlay" id="subtitle"]]
+[[!template text="""decades. Oh, yeah. Is it already there?""" start="00:07:41.280" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Yes, it's already there.""" start="00:07:42.240" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Let's see. Do we have anything on IRC?""" start="00:07:45.960" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Let me see. OK, looks like it seems like""" start="00:07:56.680" video="qanda-overlay" id="subtitle"]]
+[[!template text="""we've run out of questions.""" start="00:07:58.000" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Is that true?""" start="00:07:58.860" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, it seems so. It seems so,""" start="00:08:04.440" video="qanda-overlay" id="subtitle"]]
+[[!template text="""although we still have a couple more minutes,""" start="00:08:06.820" video="qanda-overlay" id="subtitle"]]
+[[!template text="""like maybe 3, 4 minutes on the stream.""" start="00:08:09.000" video="qanda-overlay" id="subtitle"]]
+[[!template text="""So yeah. And then, of course,""" start="00:08:13.780" video="qanda-overlay" id="subtitle"]]
+[[!template text="""once the stream does move on to the next""" start="00:08:15.800" video="qanda-overlay" id="subtitle"]]
+[[!template text="""talk. Folks are welcome to join Jeff here on""" start="00:08:19.120" video="qanda-overlay" id="subtitle"]]
+[[!template text="""BigBlueButton. If Jeff still has a few more""" start="00:08:22.340" video="qanda-overlay" id="subtitle"]]
+[[!template text="""minutes to just chat here or ask questions""" start="00:08:24.640" video="qanda-overlay" id="subtitle"]]
+[[!template text="""here, that works as well.""" start="00:08:25.800" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: JEFF CROSSMAN-WILSONEY-PORTMAN Yeah,""" start="00:08:26.920" video="qanda-overlay" id="subtitle"]]
+[[!template text="""if anyone's excited about the tool.""" start="00:08:29.640" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Are the notes are available online,""" start="00:08:38.460" video="qanda-overlay" id="subtitle"]]
+[[!template text="""right? I uploaded an org file that was my""" start="00:08:42.100" video="qanda-overlay" id="subtitle"]]
+[[!template text="""talk, and I actually included some""" start="00:08:43.700" video="qanda-overlay" id="subtitle"]]
+[[!template text="""references. Like at the end,""" start="00:08:48.900" video="qanda-overlay" id="subtitle"]]
+[[!template text="""there's some links and stuff like that.""" start="00:08:50.860" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Whenever you see like a underlined thing in""" start="00:08:54.620" video="qanda-overlay" id="subtitle"]]
+[[!template text="""my presentation, it's like I was kind of""" start="00:08:56.840" video="qanda-overlay" id="subtitle"]]
+[[!template text="""thinking people would have access to the""" start="00:08:58.520" video="qanda-overlay" id="subtitle"]]
+[[!template text="""actual presentation itself so they could go""" start="00:09:00.920" video="qanda-overlay" id="subtitle"]]
+[[!template text="""and see what it was I was linking to some PDF""" start="00:09:04.640" video="qanda-overlay" id="subtitle"]]
+[[!template text="""somewhere. How annoying is this for multiple""" start="00:09:07.540" video="qanda-overlay" id="subtitle"]]
+[[!template text="""compilers? It's annoying,""" start="00:09:09.600" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Ben. I basically have separate parsers for""" start="00:09:15.620" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Clang and GCC, and I'm not supporting MSVC at""" start="00:09:18.600" video="qanda-overlay" id="subtitle"]]
+[[!template text="""the moment. So yeah, that's where I do worry""" start="00:09:23.540" video="qanda-overlay" id="subtitle"]]
+[[!template text="""about its fragility, about the way I'm kind""" start="00:09:26.520" video="qanda-overlay" id="subtitle"]]
+[[!template text="""of parsing these error messages,""" start="00:09:27.720" video="qanda-overlay" id="subtitle"]]
+[[!template text="""which are idiosyncratic.""" start="00:09:29.340" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Oh, yeah, great. Thank you,""" start="00:09:38.440" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Amin. That's good. Should just follow that""" start="00:09:49.060" video="qanda-overlay" id="subtitle"]]
+[[!template text="""link, I guess.""" start="00:09:49.600" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well, yeah, it's so that you have to scroll""" start="00:09:56.420" video="qanda-overlay" id="subtitle"]]
+[[!template text="""down a little bit underneath the video""" start="00:09:59.020" video="qanda-overlay" id="subtitle"]]
+[[!template text="""embedding itself. There's timestamps.""" start="00:10:00.460" video="qanda-overlay" id="subtitle"]]
+[[!template text="""And then below the timestamps,""" start="00:10:01.880" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I see a bunch of links,""" start="00:10:03.240" video="qanda-overlay" id="subtitle"]]
+[[!template text="""including 1 that says download.org.""" start="00:10:06.140" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, let's see what that is.""" start="00:10:09.800" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Is that the right 1? Yeah,""" start="00:10:13.080" video="qanda-overlay" id="subtitle"]]
+[[!template text="""that's it. That's the 1.""" start="00:10:14.780" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Yeah, you can also see all of my hacks to Org""" start="00:10:19.280" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Present are in there as well.""" start="00:10:20.740" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I followed the System Crafters thing and made""" start="00:10:25.760" video="qanda-overlay" id="subtitle"]]
+[[!template text="""a bunch of my own modifications.""" start="00:10:27.160" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Org Present has this problem where every""" start="00:10:33.120" video="qanda-overlay" id="subtitle"]]
+[[!template text="""heading is a slide, which I don't like.""" start="00:10:35.760" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I kind of want hierarchy.""" start="00:10:37.080" video="qanda-overlay" id="subtitle"]]
+[[!template text="""You know? Oh, no. Sorry.""" start="00:10:41.040" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Every level 1 heading is a slide.""" start="00:10:43.440" video="qanda-overlay" id="subtitle"]]
+[[!template text="""And I kind of want hierarchy among the""" start="00:10:46.360" video="qanda-overlay" id="subtitle"]]
+[[!template text="""slides. And I had to sort of invent it in""" start="00:10:51.440" video="qanda-overlay" id="subtitle"]]
+[[!template text="""that system myself through navigation.""" start="00:10:54.320" video="qanda-overlay" id="subtitle"]]
+[[!template text="""It looks like things have quieted down.""" start="00:11:03.800" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Shall we call it?""" start="00:11:09.520" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, sure. So yeah, thanks again for the""" start="00:11:14.020" video="qanda-overlay" id="subtitle"]]
+[[!template text="""great talk, Jeff. And also to the audience""" start="00:11:17.780" video="qanda-overlay" id="subtitle"]]
+[[!template text="""for questions and discussions.""" start="00:11:18.960" video="qanda-overlay" id="subtitle"]]
+[[!template text="""People are welcome to stay here on BBB if""" start="00:11:21.720" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Jeff has time to continue the discussions and""" start="00:11:24.060" video="qanda-overlay" id="subtitle"]]
+[[!template text="""ask any questions they might have.""" start="00:11:25.320" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Otherwise, yeah, we can wrap it.""" start="00:11:26.820" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sure. Thank you so much.""" start="00:11:29.200" video="qanda-overlay" id="subtitle"]]
+[[!template text="""And I love this conference.""" start="00:11:30.400" video="qanda-overlay" id="subtitle"]]
+[[!template text="""I've been a happy attendee since like 2015 or""" start="00:11:33.900" video="qanda-overlay" id="subtitle"]]
+[[!template text="""something. So yeah, it's great.""" start="00:11:36.760" video="qanda-overlay" id="subtitle"]]
+[[!template text="""Thank you for your work.""" start="00:11:37.760" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thank you. Cheers. I mean,""" start="00:11:41.040" video="qanda-overlay" id="subtitle"]]
+[[!template text="""in large part, thanks to awesome people like""" start="00:11:43.080" video="qanda-overlay" id="subtitle"]]
+[[!template text="""you who give these amazing talks.""" start="00:11:44.280" video="qanda-overlay" id="subtitle"]]
+[[!template text="""So Thank you as well.""" start="00:11:45.420" video="qanda-overlay" id="subtitle"]]
+[[!template text="""[Speaker 1]: You are currently the only person in this""" start="00:14:30.260" video="qanda-overlay" id="subtitle"]]
+[[!template text="""conference.""" start="00:14:30.460" video="qanda-overlay" id="subtitle"]]
+[[!template text="""You""" start="00:21:15.260" video="qanda-overlay" id="subtitle"]]
+[[!template text="""1""" start="00:21:37.760" video="qanda-overlay" id="subtitle"]]
+[[!template text="""1 1 1 1 2 1 2 1 2 1 1 3 4 1 2 4 1 1 3 4 1 1 2""" start="00:22:23.260" video="qanda-overlay" id="subtitle"]]
+[[!template text="""3 3 4 1 2 1""" start="00:22:28.100" video="qanda-overlay" id="subtitle"]]
+[[!template text="""You""" start="00:24:41.445" video="qanda-overlay" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20overlay%3A%20Improving%20compiler%20diagnostics%20with%20overlays)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/overlay-before.md b/2023/info/overlay-before.md
new file mode 100644
index 00000000..03bcd74e
--- /dev/null
+++ b/2023/info/overlay-before.md
@@ -0,0 +1,46 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 21-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="overlay-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="overlay-mainVideo" data="""
+00:00.000 Introduction
+00:33.560 Overlays and what they can do
+02:02.500 Simple overlay example - creating an overlay
+02:35.700 Adding properties
+03:10.940 Deleting an overlay
+03:24.660 Setting fonts the right way
+03:59.540 More properties
+04:12.580 Visibility
+04:49.780 Adding text
+05:27.820 Custom properties
+05:45.380 Notes on properties
+06:36.100 Improving C++ compiler output
+08:17.680 The problem with C++ error messages
+08:30.240 Many standard class templates have default arguments
+08:47.520 Some types are aliases for longer things, too
+09:20.960 Reporting type information accurately means long lines
+10:18.240 Emacs can help - Treat C++ type names as just another kind of balanced expression
+11:49.320 Add overlays to improve readability
+12:22.400 Create a minor mode that runs during compilation
+12:59.500 Parsing types as balanced expressions
+14:16.100 Indent and fill with overlays - Use ancient "pretty printing" algorithms"
+14:52.260 Overlays can mimic line breaks and indentation
+15:14.520 Hiding details - Marking depths with overlays
+17:12.660 Hiding to a target depth
+18:04.900 Demo
+20:10.220 Conclusion
+
+"""]]<div></div>Duration: 20:57 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--expr_depth.svg">Download --expr_depth.svg</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.opus">Download --main.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--testdata.org">Download --testdata.org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull.org">Download .org</a></li><li><a href="https://toobnix.org/w/5fJkawU4R9b1dJq5BcDykx">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="overlay-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="overlay-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus"></audio></div><div></div>Duration: 11:48 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm">Download --answers.webm (20MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/overlay-nav.md b/2023/info/overlay-nav.md
new file mode 100644
index 00000000..ba04cc37
--- /dev/null
+++ b/2023/info/overlay-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a>
+Next by track: <a href="/2023/talks/eval">Editor Integrated REPL Driven Development for all languages</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/parallel-after.md b/2023/info/parallel-after.md
new file mode 100644
index 00000000..2f390ff8
--- /dev/null
+++ b/2023/info/parallel-after.md
@@ -0,0 +1,631 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="parallel-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""Hi everyone!""" start="00:00:00.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Welcome to our talk on Parallel Text Replacement.""" start="00:00:01.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""My name is Lovro, and I'll be telling you about an""" start="00:00:04.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""interesting problem that my friend Valentino and I""" start="00:00:07.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""set out to solve one afternoon.""" start="00:00:09.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We will describe the problem, take a look at some""" start="00:00:11.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""of the existing work and then present our solution.""" start="00:00:13.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Afterwards, we will show some demos and conclude""" start="00:00:16.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""with a quick overview of the implementation.""" start="00:00:19.080" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Let's get straight into it!""" start="00:00:21.520" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Problem: Goal""" start="00:00:23.440" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""Here is a problem that most of us have dealt with""" start="00:00:23.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""at some point.""" start="00:00:25.800" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Assume we have a piece of code such as the following.""" start="00:00:27.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We use a code example here, but in general what we're""" start="00:00:29.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""about to discuss can be applied to any piece of text.""" start="00:00:32.520" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""After a bit of thinking, we decide that the names of""" start="00:00:35.600" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""the two variables, &quot;foo&quot; and &quot;bar&quot;, should actually be""" start="00:00:37.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""swapped.""" start="00:00:39.960" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""That is, &quot;foo&quot; should be replaced with &quot;bar&quot;, and &quot;bar&quot;""" start="00:00:40.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""should be replaced with &quot;foo&quot;.""" start="00:00:43.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The question is: what is a good way to achieve this?""" start="00:00:45.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We could perform the edits manually if the code is""" start="00:00:49.080" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""small enough, and we might even be done reasonably""" start="00:00:51.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""quickly.""" start="00:00:53.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""However, consider two things.""" start="00:00:54.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Imagine the usual case where there's just too much""" start="00:00:56.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""code to edit by hand.""" start="00:00:58.960" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We have no other option than to automate the task.""" start="00:01:00.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""More importantly though, we have a whole programmable""" start="00:01:03.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""text editor right at our fingertips.""" start="00:01:06.120" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We should object to doing things that the computer""" start="00:01:08.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""can do for us.""" start="00:01:10.280" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Problem: Naive Multi-pass""" start="00:01:12.360" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""So, one way to automate it is by using our old friend""" start="00:01:12.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""query-replace (M-%) multiple times in a sequence.""" start="00:01:15.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We first do a pass where we replace &quot;foo&quot; with &quot;bar&quot;,""" start="00:01:19.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""then we do another pass where we replace &quot;bar&quot; with &quot;foo&quot;.""" start="00:01:22.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""But that's clearly not right.""" start="00:01:25.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We all know that this naive multi-pass approach""" start="00:01:26.960" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""doesn't work because it results in interference""" start="00:01:29.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""between the two replacements.""" start="00:01:31.560" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Problem: Clever Multi-pass""" start="00:01:34.200" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""Instead, we have to be a bit more clever.""" start="00:01:34.200" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We should first replace &quot;foo&quot; with a temporary string,""" start="00:01:36.800" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""in this case &quot;oof&quot;, that we will call a &quot;token&quot;.""" start="00:01:39.840" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""To avoid interference, we must be careful to ensure""" start="00:01:42.120" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""that the token does not contain whatever we're about""" start="00:01:45.480" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""to replace next.""" start="00:01:48.120" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Then we do a second pass to replace &quot;bar&quot; with &quot;foo&quot;,""" start="00:01:49.600" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and finally a third pass to replace the token with &quot;bar&quot;.""" start="00:01:52.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This gives us the result we want.""" start="00:01:56.080" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Problem: Terminology""" start="00:01:57.720" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""Putting the implementation aside for a moment, this style""" start="00:01:57.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""of text replacement, where we replace multiple sources""" start="00:02:01.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""with their targets, without running into interference""" start="00:02:05.600" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""issues between replacement pairs, is what we call""" start="00:02:09.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""a &quot;parallel replacement&quot;.""" start="00:02:11.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This is the essence of the problem we're trying to solve.""" start="00:02:12.840" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The examples with swapping that we've shown so far""" start="00:02:16.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""are really just one of the many use cases that are""" start="00:02:18.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""supported by a general parallel replacement utility.""" start="00:02:21.320" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""To avoid confusion, let us clarify that the word &quot;parallel&quot;""" start="00:02:25.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""is not in reference to hardware parallelization, but""" start="00:02:28.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""rather comes from analogy with the Lisp let operator,""" start="00:02:31.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""where the bindings of variables are performed in parallel,""" start="00:02:34.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""rather than sequentially as in let*.""" start="00:02:38.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Parallel in this context means that none of the bindings""" start="00:02:40.200" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""are in scope within any of the initial value forms.""" start="00:02:43.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""In other words, just like a let's initialization form""" start="00:02:46.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""cannot refer to any of the earlier bindings, a""" start="00:02:50.200" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""replacement pair's source should not be able to replace""" start="00:02:53.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""the previously substituted targets of any other pair.""" start="00:02:56.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This is what we mean by &quot;no interference&quot;.""" start="00:03:00.200" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Problem: Scaling Multi-pass""" start="00:03:04.440" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""However, manually invoking multiple carefully chosen""" start="00:03:04.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""query-replace commands gets old very quickly.""" start="00:03:08.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Say we scaled up the problem and wanted to perform n""" start="00:03:11.520" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""swaps instead of just two, e.g. to swap, or rather,""" start="00:03:14.200" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""rotate, &quot;foo&quot; to &quot;bar&quot;, &quot;bar&quot; to &quot;baz&quot;, &quot;baz&quot; to &quot;quux&quot;""" start="00:03:18.320" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and &quot;quux&quot; to &quot;foo&quot;.""" start="00:03:22.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We would first have to perform n - 1 additional""" start="00:03:23.800" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""replacements to introduce the necessary tokens,""" start="00:03:26.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""effectively doubling the number of steps.""" start="00:03:29.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Even if we tried to automate this, think about what""" start="00:03:32.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""tokens the code would have to generate if we had no""" start="00:03:34.800" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""prior knowledge of the replacement pairs given by the""" start="00:03:37.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""user.""" start="00:03:40.520" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We would have to program defensively and use long""" start="00:03:41.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""randomly-generated strings that, one, hopefully do""" start="00:03:44.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""not interfere with any of the replacement pairs,""" start="00:03:47.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and two, might slow down the search if they're overly long.""" start="00:03:50.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Can we do better?""" start="00:03:53.480" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Solution: Single-pass""" start="00:03:55.920" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""Yes we can!""" start="00:03:55.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We can actually perform just a single pass.""" start="00:03:56.840" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The trick is to alternate between the replacement""" start="00:03:59.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""pairs, replacing whichever source occurs the earliest,""" start="00:04:02.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and making sure to continue scanning after the end""" start="00:04:06.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""of the substituted target in order to avoid interference.""" start="00:04:08.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This interleaving of replacements is not something""" start="00:04:12.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""that's easy to do by hand with query-replace.""" start="00:04:14.520" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Solution: Existing""" start="00:04:18.240" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""Since this is Emacs we're talking about, of course""" start="00:04:18.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""there already exist solutions that implement this idea.""" start="00:04:20.960" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Here are few that we could find.""" start="00:04:23.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The EmacsWiki has a page dedicated to this problem.""" start="00:04:25.960" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Stack Overflow has an old post where a couple of""" start="00:04:28.800" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""users provided their solutions.""" start="00:04:31.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Mastering Emacs also gives a method along with other""" start="00:04:33.960" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""interesting query-replace-regexp (C-M-%) patterns.""" start="00:04:36.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""More recently, Tony Zorman made a blogpost providing""" start="00:04:39.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""a solution with an interface based on query-replace.""" start="00:04:42.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""I encourage you to take a look at these solutions if""" start="00:04:45.080" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""you're interested in the details.""" start="00:04:47.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""But while a step in the right direction, these solutions""" start="00:04:50.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""are not satisfactory because they all lack one or""" start="00:04:53.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""more of the following.""" start="00:04:55.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""One, they are not completely automated and require""" start="00:04:56.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""the user to come up with a relatively complicated""" start="00:05:00.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and verbose query-replace-regexp invocation.""" start="00:05:02.600" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Two, they are restricted to performing only 2-element""" start="00:05:06.080" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""swaps rather than general parallel replacements.""" start="00:05:09.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Three, they don't provide any sort of interactivity""" start="00:05:12.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""during replacement and instead perform it in one shot.""" start="00:05:15.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Four, they don't attempt to integrate with the familiar""" start="00:05:18.620" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""query-replace interface, which supports skipping, undo,""" start="00:05:21.400" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""history and more advanced features like Lisp expressions""" start="00:05:25.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and recursive query edits.""" start="00:05:28.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Most importantly however, five, none of them were""" start="00:05:30.700" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""designed with regular expressions in mind and instead""" start="00:05:33.800" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""only ever consider literal strings.""" start="00:05:36.480" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""In fact, the only one that comes close is the""" start="00:05:39.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""half-automated solution that invokes query-replace-regexp""" start="00:05:43.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""with a specially crafted replacement.""" start="00:05:46.520" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""As an example, here's how you would use this technique""" start="00:05:48.800" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""to perform a 3-element parallel regex replacement.""" start="00:05:51.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""It uses the backslash-comma Lisp expression feature""" start="00:05:54.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""in order to choose the appropriate target to substitute.""" start="00:05:57.840" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Aside from being very clumsy and tedious to write out,""" start="00:06:01.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""this approach makes it really hard to use more complex""" start="00:06:03.800" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""regular expressions that make use of capture groups""" start="00:06:06.960" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""themselves.""" start="00:06:09.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This was the biggest limitation that we wanted""" start="00:06:10.800" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""to get rid of and the main motivation for our work.""" start="00:06:12.200" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""So, as an alternative to the existing zoo of 80% solutions,""" start="00:06:15.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""we aim to provide a 100% solution, one that handles""" start="00:06:19.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""regexes and consolidates all of the existing ideas""" start="00:06:24.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""into a single package.""" start="00:06:27.120" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Solution: query-replace-parallel""" start="00:06:29.080" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""We call it query-replace-parallel.""" start="00:06:29.080" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The package is free and open-source and can currently""" start="00:06:31.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""be found on GitHub under hokomo/query-replace-parallel.""" start="00:06:34.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The name is not yet finalized and we're open to any""" start="00:06:37.400" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""suggestions.""" start="00:06:40.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We hope to get it published on an Elisp""" start="00:06:41.503" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""package archive in the near future, but for now you""" start="00:06:43.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""can just download and load the main Elisp file manually.""" start="00:06:45.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""With all of that said, let's go through a few demos""" start="00:06:48.900" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""to illustrate some use cases and see how to use the package.""" start="00:06:51.400" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Demonstration: Swap""" start="00:06:55.240" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""Our first demo is a simple swap, like the one we""" start="00:06:55.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""showed at the beginning of the presentation.""" start="00:06:57.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This chunk of text is actually one of the tests""" start="00:06:59.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""from our package's code.""" start="00:07:02.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Assuming we have loaded the package, we can execute""" start="00:07:03.840" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""the query-replace-parallel command, a parallel version""" start="00:07:06.520" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""of the standard query-replace.""" start="00:07:09.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This command works with literal strings and will""" start="00:07:11.320" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""ask for each source and target in turn.""" start="00:07:14.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Our goal is to replace &quot;foo&quot; with &quot;bar&quot;""" start="00:07:16.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and &quot;bar&quot; with &quot;foo&quot;.""" start="00:07:21.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""After inputting our replacements, we terminate the""" start="00:07:24.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""prompt by pressing enter with empty input.""" start="00:07:27.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""At this point, everything functions the same as in""" start="00:07:29.860" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""a standard query-replace invocation.""" start="00:07:32.600" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The echo area shows the match and the replacement""" start="00:07:35.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""we're about to make.""" start="00:07:37.400" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We can perform replacements,""" start="00:07:38.703" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""undo them,""" start="00:07:43.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""skip them,""" start="00:07:46.503" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""execute them until the end,""" start="00:07:49.203" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and so on.""" start="00:07:50.240" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Demonstration: LaTeX""" start="00:07:53.970" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""The second demo shows our first regex use case.""" start="00:07:53.970" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Imagine we have the following LaTeX code.""" start="00:07:56.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We realize that we haven't been completely consistent""" start="00:07:58.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""in our use and naming of macros, so we decide to""" start="00:08:01.480" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""fix the problem.""" start="00:08:04.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This time we execute query-replace-parallel-regexp""" start="00:08:05.536" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""because we want to work with regex instead of literal""" start="00:08:08.400" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""strings.""" start="00:08:11.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We want to achieve two things.""" start="00:08:12.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""First, we want to wrap all usages of the variable n""" start="00:08:13.520" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""with the natvar macro.""" start="00:08:16.960" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Using the backslash-less-than and blackslash-greater-than""" start="00:08:18.080" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""constructs allows us to only match letters n not""" start="00:08:21.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""appearing as part of a larger word.""" start="00:08:23.840" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Second, we want to rename natvar to intvar because""" start="00:08:25.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""the variables a, b and c are integers and not natural""" start="00:08:29.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""numbers.""" start="00:08:32.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We enter empty input to terminate the prompt and can""" start="00:08:33.300" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""now perform the replacements.""" start="00:08:35.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""There we go, the fixes are done and we didn't have""" start="00:08:42.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""to think about in which order to apply them.""" start="00:08:44.480" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Demonstration: Regex""" start="00:08:48.700" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""We now take a look at a more complicated regex""" start="00:08:48.700" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""example to demonstrate that even advanced query-replace""" start="00:08:51.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""features are supported.""" start="00:08:53.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Each &quot;foo&quot; and &quot;bar&quot; in this example is followed by""" start="00:08:55.100" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""a number.""" start="00:08:57.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The goal is to not only swap &quot;foo&quot; and &quot;bar&quot;, but""" start="00:08:58.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""also increase or decrease the corresponding number.""" start="00:09:01.380" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We first match &quot;foo&quot; and capture the number that""" start="00:09:03.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""follows it.""" start="00:09:06.600" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""For the target, we make use of the backslash-comma""" start="00:09:07.200" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Lisp expression feature in order to replace the""" start="00:09:10.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""match with &quot;bar&quot; followed by the number's successor.""" start="00:09:12.600" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We do the same thing for &quot;bar&quot;, except that we""" start="00:09:15.540" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""replace the number with its predecessor.""" start="00:09:17.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Performing the replacements, we can see how each""" start="00:09:27.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""number is incremented or decremented appropriately.""" start="00:09:29.120" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Demonstration: Order""" start="00:09:36.320" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""We haven't covered it explicitly so some of you may""" start="00:09:36.320" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""be wondering how parallel replacement deals with""" start="00:09:38.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""overlapping matches and whether the order of the""" start="00:09:41.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""replacement pairs is significant.""" start="00:09:43.840" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This demo will clarify the exact behavior.""" start="00:09:45.480" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The first example has the sources &quot;watch&quot; and &quot;stopwatch&quot;.""" start="00:09:48.960" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Conceptually, the matches overlap, but the rule is""" start="00:09:57.500" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""that matches are always processed earliest first,""" start="00:10:00.600" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""regardless of their length or the ordering of the pairs.""" start="00:10:03.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Therefore it is &quot;stopwatch&quot; that gets replaced,""" start="00:10:06.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and not its substring &quot;watch&quot;.""" start="00:10:09.080" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The second example uses the sources &quot;watch&quot; and &quot;watchword&quot;.""" start="00:10:16.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Both of the matches now conceptually start at the same""" start="00:10:19.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""position.""" start="00:10:22.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""In situations like these the order of the pairs does""" start="00:10:23.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""matter, and ties are broken by prefering the pair that""" start="00:10:26.400" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""was entered first, which is behavior that is inherited""" start="00:10:29.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""from the Elisp regex engine.""" start="00:10:32.280" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""So, the substring &quot;watch&quot; in &quot;watchword&quot; is what gets""" start="00:10:34.460" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""replaced in this case.""" start="00:10:37.480" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Situations where the order of the pairs is significant""" start="00:10:39.460" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""are not very common however, so the user generally""" start="00:10:41.840" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""doesn't have to worry about this edge case.""" start="00:10:44.840" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The order only matters when two or more sources""" start="00:10:46.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""share the same prefix, as in this example.""" start="00:10:49.960" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Demonstration: Fun""" start="00:10:54.440" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""The final demo tests the limits of the package and""" start="00:10:54.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""shows that it fully integrates with query-replace.""" start="00:10:56.960" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""It is really just for fun and can even serve as a""" start="00:10:59.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""small Emacs brainteaser.""" start="00:11:03.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""See if you can keep up!""" start="00:11:04.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We open a directory and enter Writable Dired mode""" start="00:11:06.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""in order to rename the directories &quot;foo&quot; and &quot;bar&quot;.""" start="00:11:09.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Instead of doing it quickly by hand, we decide to""" start="00:11:11.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""show off and use query-replace-parallel-regexp.""" start="00:11:14.760" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We enter our pairs and make use of the""" start="00:11:17.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""backslash-question-mark query edit feature.""" start="00:11:20.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Now whenever we perform a replacement, the query""" start="00:11:25.080" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""edit makes Emacs stop and prompt us for additional""" start="00:11:27.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""input to use as the target.""" start="00:11:30.840" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We confirm the renames and now enter the &quot;bar-lib&quot;""" start="00:11:36.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""directory in order to perform the same kind of""" start="00:11:39.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""replacement on &quot;baz&quot; and &quot;quux&quot;.""" start="00:11:42.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Rather than save time, we decide to be extra lazy""" start="00:11:44.500" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and take the long route.""" start="00:11:47.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We recall the first pair and initiate a recursive""" start="00:11:48.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""invocation of query-replace-parallel-regexp.""" start="00:11:52.320" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We are now replacing the replacement.""" start="00:11:54.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We apply our fixes and then do the same thing again""" start="00:12:01.020" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""with the second pair.""" start="00:12:04.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Recall and recurse.""" start="00:12:05.970" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We confirm the prompt and finally rename our directories.""" start="00:12:16.300" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Wow, that really paid off.""" start="00:12:25.360" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""Implementation""" start="00:12:29.120" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""Before we finish, a few quick words about the""" start="00:12:29.120" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""implementation for the curious.""" start="00:12:31.480" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Both query-replace-parallel and query-replace-parallel-regexp""" start="00:12:33.300" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""delegate to the complex perform-replace function""" start="00:12:36.480" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""which is the workhorse of query-replace's interactive""" start="00:12:39.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""mechanism.""" start="00:12:41.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The way we achieve multiple interleaved replacements""" start="00:12:43.120" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""is by providing perform-replace with a big &quot;matcher regex&quot;""" start="00:12:45.520" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and a special replacement function.""" start="00:12:49.120" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Essentially, a complex parallel replacement like this""" start="00:12:50.480" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""is transformed into a standard replacement like this.""" start="00:12:54.400" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This is similar to the trick shown earlier in the""" start="00:12:57.520" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""presentation.""" start="00:13:00.200" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Each source is put in its own capture group to allow""" start="00:13:00.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""the replacement function to determine which one matched""" start="00:13:03.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""and return the appropriate target.""" start="00:13:06.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""However, we now take care to support arbitrary""" start="00:13:08.980" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""regular expressions as sources.""" start="00:13:11.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We achieve this by converting each source regex into""" start="00:13:13.480" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""an equivalent one for which we can guarantee that its""" start="00:13:17.080" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""capture groups will not clash with our matcher regex.""" start="00:13:19.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Information about this conversion is stored, and""" start="00:13:22.920" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""once the replacement function is called it has""" start="00:13:26.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""enough data to apply the replacement from the""" start="00:13:28.320" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""viewpoint of the original regex.""" start="00:13:30.360" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""The regex transformation is reliable because it""" start="00:13:32.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""uses the rx library, allowing us to treat regexes""" start="00:13:35.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""as s-expressions and avoid any nasty manual parsing.""" start="00:13:38.520" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""In fact, rx itself is based on one of Olin Shivers'""" start="00:13:42.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""100% solutions:""" start="00:13:46.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""SRE, or the S-expression regex notation.""" start="00:13:48.436" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""We all stand on the shoulders of many giants, so""" start="00:13:51.320" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""let's strive to design good solutions that we can""" start="00:13:54.440" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""all benefit from, many years into the future!""" start="00:13:56.600" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Finally, because query-replace's core is not completely""" start="00:13:59.240" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""customizable, we did have to sprinkle in some advice""" start="00:14:03.000" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""to get certain things working.""" start="00:14:06.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""This concerns only minor cosmetic fixes and not the""" start="00:14:07.600" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""core replacement functionality, but we have nontheless""" start="00:14:11.160" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""tried to do it in the simplest and least intrusive way""" start="00:14:14.040" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""possible.""" start="00:14:16.680" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template new="1" text="""End""" start="00:14:18.740" video="mainVideo-parallel" id="subtitle"]]
+
+[[!template text="""In conclusion, go download and play with the package.""" start="00:14:18.740" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Even if you're not performing overlapping replacements,""" start="00:14:21.680" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""you can still use query-replace-parallel for the""" start="00:14:24.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""peace of mind knowing that things won't go wrong if""" start="00:14:26.880" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""you perform more than one replacement at a time.""" start="00:14:29.720" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Feel free to let us know about any interesting or""" start="00:14:32.460" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""crazy use cases you might come up with, as well as""" start="00:14:34.640" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""improvements or bugs that make it only a 99% solution.""" start="00:14:37.560" video="mainVideo-parallel" id="subtitle"]]
+[[!template text="""Thanks for listening and have a great EmacsConf!""" start="00:14:40.640" video="mainVideo-parallel" id="subtitle"]]
+
+<a name="parallel-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: And I think we are live.""" start="00:00:08.620" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Hello again, everyone.""" start="00:00:09.620" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And hi, Lovro. How are you doing?""" start="00:00:10.940" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: Just a second. Should I join the other room?""" start="00:00:15.339" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh, no, no, you can stay here.""" start="00:00:18.460" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: I can stay in the backstage.""" start="00:00:20.860" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: Everything is fine. I don't think you are""" start="00:00:24.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""technically in the backstage right now you're""" start="00:00:25.520" video="qanda-parallel" id="subtitle"]]
+[[!template text="""just in Big Blue Button with us.""" start="00:00:26.750" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh thanks. Oh because I have 2 of them open I""" start="00:00:30.040" video="qanda-parallel" id="subtitle"]]
+[[!template text="""thought there were 2 different rooms.""" start="00:00:30.920" video="qanda-parallel" id="subtitle"]]
+[[!template text="""1 is the backstage and the other,""" start="00:00:32.720" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: whichever, I can hear you and so can the""" start="00:00:38.239" video="qanda-parallel" id="subtitle"]]
+[[!template text="""stream, so don't worry too much about which""" start="00:00:39.840" video="qanda-parallel" id="subtitle"]]
+[[!template text="""is the backstage and which is the front page.""" start="00:00:41.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: I have no idea. Well, great,""" start="00:00:41.540" video="qanda-parallel" id="subtitle"]]
+[[!template text="""great. Okay, yeah. Yeah,""" start="00:00:43.660" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I'm doing great, just to answer your""" start="00:00:45.280" video="qanda-parallel" id="subtitle"]]
+[[!template text="""question.""" start="00:00:45.480" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, great, great, Okay,""" start="00:00:47.379" video="qanda-parallel" id="subtitle"]]
+[[!template text="""well splendid. So, I've pasted a link again""" start="00:00:49.900" video="qanda-parallel" id="subtitle"]]
+[[!template text="""on IRC if you want to ask your questions,""" start="00:00:51.520" video="qanda-parallel" id="subtitle"]]
+[[!template text="""and I'd invite you to do so,""" start="00:00:53.000" video="qanda-parallel" id="subtitle"]]
+[[!template text="""because we have about 9 minutes of laborious""" start="00:00:54.620" video="qanda-parallel" id="subtitle"]]
+[[!template text="""time to answer as many of them as possible.""" start="00:00:56.580" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And I'm going to start with the first 1.""" start="00:00:58.360" video="qanda-parallel" id="subtitle"]]
+[[!template text="""This looks great and was very well-presented.""" start="00:01:01.100" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Do you have plans to upstream this""" start="00:01:03.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""functionality into Emacs?""" start="00:01:04.239" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: That's a good idea. That's something we""" start="00:01:08.000" video="qanda-parallel" id="subtitle"]]
+[[!template text="""thought about as well.""" start="00:01:08.860" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Currently, we haven't really contacted anyone""" start="00:01:11.640" video="qanda-parallel" id="subtitle"]]
+[[!template text="""to do this. Also, the current implementation,""" start="00:01:16.160" video="qanda-parallel" id="subtitle"]]
+[[!template text="""so as I mentioned in the presentation towards""" start="00:01:19.760" video="qanda-parallel" id="subtitle"]]
+[[!template text="""the end, so we use a little bit of advice to""" start="00:01:22.120" video="qanda-parallel" id="subtitle"]]
+[[!template text="""sort of patch some functionality of query""" start="00:01:24.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""replace because not everything was easy to""" start="00:01:26.479" video="qanda-parallel" id="subtitle"]]
+[[!template text="""implement. The core functionality luckily""" start="00:01:28.680" video="qanda-parallel" id="subtitle"]]
+[[!template text="""was, But there's a couple of fixes we need to""" start="00:01:32.220" video="qanda-parallel" id="subtitle"]]
+[[!template text="""apply to the message function in order to""" start="00:01:34.200" video="qanda-parallel" id="subtitle"]]
+[[!template text="""display a nice message in the echo buffer""" start="00:01:36.380" video="qanda-parallel" id="subtitle"]]
+[[!template text="""because this doesn't happen on its own when""" start="00:01:39.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""we're using this trick with this big regex""" start="00:01:41.100" video="qanda-parallel" id="subtitle"]]
+[[!template text="""and whatnot. So I don't think that the code""" start="00:01:45.360" video="qanda-parallel" id="subtitle"]]
+[[!template text="""as it is would be upstreamable.""" start="00:01:47.080" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I think probably if we wanted to upstream it,""" start="00:01:50.600" video="qanda-parallel" id="subtitle"]]
+[[!template text="""we would have to do some proper work on""" start="00:01:54.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""refactoring query place itself in order to""" start="00:01:57.180" video="qanda-parallel" id="subtitle"]]
+[[!template text="""integrate all of this functionality just""" start="00:01:58.780" video="qanda-parallel" id="subtitle"]]
+[[!template text="""directly without any patching left and right.""" start="00:02:01.880" video="qanda-parallel" id="subtitle"]]
+[[!template text="""But yeah, definitely something I've given""" start="00:02:05.680" video="qanda-parallel" id="subtitle"]]
+[[!template text="""some thought, but so far no progress on it.""" start="00:02:10.080" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I haven't actually started doing anything""" start="00:02:11.640" video="qanda-parallel" id="subtitle"]]
+[[!template text="""about it.""" start="00:02:12.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right, So I'm curious now,""" start="00:02:17.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""you developed the feature and then you moved""" start="00:02:19.640" video="qanda-parallel" id="subtitle"]]
+[[!template text="""on to the presentation or did you want to do""" start="00:02:21.600" video="qanda-parallel" id="subtitle"]]
+[[!template text="""a presentation for EmacsConf and then you""" start="00:02:23.080" video="qanda-parallel" id="subtitle"]]
+[[!template text="""worked on something like this?""" start="00:02:24.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Which was it first, the chicken or the egg?""" start="00:02:26.360" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, it was the former.""" start="00:02:28.220" video="qanda-parallel" id="subtitle"]]
+[[!template text="""So this is a problem I've been aware of for,""" start="00:02:31.320" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I mean, probably a couple of years.""" start="00:02:33.340" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And, you know, I talked to my friend""" start="00:02:35.280" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Valentino about it and we had like a little""" start="00:02:37.600" video="qanda-parallel" id="subtitle"]]
+[[!template text="""discussion, you know, how would we do this?""" start="00:02:39.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And then I remember back when I was""" start="00:02:41.880" video="qanda-parallel" id="subtitle"]]
+[[!template text="""researching about this problem and the""" start="00:02:44.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""various Emacs Lisp solutions,""" start="00:02:45.100" video="qanda-parallel" id="subtitle"]]
+[[!template text="""all I could find were these solutions that""" start="00:02:47.780" video="qanda-parallel" id="subtitle"]]
+[[!template text="""would, you know, just shy away from""" start="00:02:49.400" video="qanda-parallel" id="subtitle"]]
+[[!template text="""implementing the RegEx case,""" start="00:02:50.640" video="qanda-parallel" id="subtitle"]]
+[[!template text="""which is a really complicated 1.""" start="00:02:52.340" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And, after some discussion,""" start="00:02:54.720" video="qanda-parallel" id="subtitle"]]
+[[!template text="""my friend and I decided,""" start="00:02:56.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""okay, what the hell? Let's,""" start="00:02:58.080" video="qanda-parallel" id="subtitle"]]
+[[!template text="""let's try and implement this.""" start="00:02:59.280" video="qanda-parallel" id="subtitle"]]
+[[!template text="""How hard can it be? And yeah,""" start="00:03:01.800" video="qanda-parallel" id="subtitle"]]
+[[!template text="""basically in 1 afternoon,""" start="00:03:03.280" video="qanda-parallel" id="subtitle"]]
+[[!template text="""the idea, our little trick and the whole""" start="00:03:06.300" video="qanda-parallel" id="subtitle"]]
+[[!template text="""implementation was born.""" start="00:03:07.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And then I think that was maybe around a year""" start="00:03:11.480" video="qanda-parallel" id="subtitle"]]
+[[!template text="""ago, maybe a bit less.""" start="00:03:12.540" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And then through the months,""" start="00:03:14.480" video="qanda-parallel" id="subtitle"]]
+[[!template text="""we just thought, oh yeah,""" start="00:03:15.920" video="qanda-parallel" id="subtitle"]]
+[[!template text="""maybe we could present this,""" start="00:03:17.420" video="qanda-parallel" id="subtitle"]]
+[[!template text="""maybe it would be interesting for people to""" start="00:03:18.960" video="qanda-parallel" id="subtitle"]]
+[[!template text="""see and that's how we came up with the idea""" start="00:03:20.660" video="qanda-parallel" id="subtitle"]]
+[[!template text="""to present at EmacsConf.""" start="00:03:22.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, great. I don't see other people asking""" start="00:03:27.900" video="qanda-parallel" id="subtitle"]]
+[[!template text="""questions. So people, it's nice if I ask""" start="00:03:30.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""questions but you know,""" start="00:03:31.100" video="qanda-parallel" id="subtitle"]]
+[[!template text="""the point is kind of for you to ask the""" start="00:03:33.160" video="qanda-parallel" id="subtitle"]]
+[[!template text="""questions. I see someone who's joined us on""" start="00:03:35.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""BBB. Peter, would you like to ask a question""" start="00:03:36.780" video="qanda-parallel" id="subtitle"]]
+[[!template text="""maybe? Otherwise I see another person writing""" start="00:03:41.720" video="qanda-parallel" id="subtitle"]]
+[[!template text="""a question on the pad,""" start="00:03:43.040" video="qanda-parallel" id="subtitle"]]
+[[!template text="""so we can either move for this 1.""" start="00:03:44.540" video="qanda-parallel" id="subtitle"]]
+[[!template text="""So I'll leave Peter to figure out if they""" start="00:03:46.640" video="qanda-parallel" id="subtitle"]]
+[[!template text="""want to ask a question.""" start="00:03:47.680" video="qanda-parallel" id="subtitle"]]
+[[!template text="""So I'm moving on to the next question.""" start="00:03:49.160" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 2]: I can jump in. That's a really well done talk""" start="00:03:57.900" video="qanda-parallel" id="subtitle"]]
+[[!template text="""and you really clearly laid out the problem""" start="00:04:01.780" video="qanda-parallel" id="subtitle"]]
+[[!template text="""and the solution there.""" start="00:04:03.000" video="qanda-parallel" id="subtitle"]]
+[[!template text="""While I was watching it,""" start="00:04:05.600" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I was thinking maybe the nice way to name it""" start="00:04:10.740" video="qanda-parallel" id="subtitle"]]
+[[!template text="""is just to name it query replace and query""" start="00:04:13.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""replace regext, you know,""" start="00:04:15.700" video="qanda-parallel" id="subtitle"]]
+[[!template text="""overloading the original functions and then""" start="00:04:18.480" video="qanda-parallel" id="subtitle"]]
+[[!template text="""using a prefix number,""" start="00:04:23.000" video="qanda-parallel" id="subtitle"]]
+[[!template text="""like control number to indicate how many""" start="00:04:26.880" video="qanda-parallel" id="subtitle"]]
+[[!template text="""replacements you're going to do.""" start="00:04:29.280" video="qanda-parallel" id="subtitle"]]
+[[!template text="""But maybe that doesn't work with the""" start="00:04:31.640" video="qanda-parallel" id="subtitle"]]
+[[!template text="""recursive editing stuff,""" start="00:04:36.680" video="qanda-parallel" id="subtitle"]]
+[[!template text="""which I don't use much.""" start="00:04:37.960" video="qanda-parallel" id="subtitle"]]
+[[!template text="""So I don't have a good method.""" start="00:04:40.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: I think it would definitely work.""" start="00:04:43.260" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Well, the question is,""" start="00:04:46.260" video="qanda-parallel" id="subtitle"]]
+[[!template text="""if we just overwrite the definitions,""" start="00:04:47.880" video="qanda-parallel" id="subtitle"]]
+[[!template text="""then, oh, well, I guess we could do that.""" start="00:04:51.700" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Nothing stops us. I mean,""" start="00:04:53.410" video="qanda-parallel" id="subtitle"]]
+[[!template text="""we're in Emacs. We could definitely do that.""" start="00:04:54.800" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And then if you give, like,""" start="00:04:55.680" video="qanda-parallel" id="subtitle"]]
+[[!template text="""a prefix argument, maybe it just drops you""" start="00:04:57.540" video="qanda-parallel" id="subtitle"]]
+[[!template text="""back to the original query replace.""" start="00:04:59.060" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Yeah, that's an idea. For now,""" start="00:05:01.000" video="qanda-parallel" id="subtitle"]]
+[[!template text="""we decided, OK, let's just keep everything""" start="00:05:02.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""explicitly separate just to avoid any""" start="00:05:05.000" video="qanda-parallel" id="subtitle"]]
+[[!template text="""confusion.""" start="00:05:05.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, I think that's the right thing to do""" start="00:05:09.220" video="qanda-parallel" id="subtitle"]]
+[[!template text="""for now. What I'm actually thinking is that""" start="00:05:11.820" video="qanda-parallel" id="subtitle"]]
+[[!template text="""when you do query replace,""" start="00:05:13.620" video="qanda-parallel" id="subtitle"]]
+[[!template text="""it just does the regular query replace.""" start="00:05:15.600" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And if you're going to do,""" start="00:05:17.220" video="qanda-parallel" id="subtitle"]]
+[[!template text="""say, 3 parallel replacements,""" start="00:05:20.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""then you do Control-U,""" start="00:05:21.340" video="qanda-parallel" id="subtitle"]]
+[[!template text="""query replace. Sorry. Control-3,""" start="00:05:25.580" video="qanda-parallel" id="subtitle"]]
+[[!template text="""query replace. And then that way you don't""" start="00:05:28.580" video="qanda-parallel" id="subtitle"]]
+[[!template text="""have The final prompt that you give nothing""" start="00:05:33.400" video="qanda-parallel" id="subtitle"]]
+[[!template text="""to.""" start="00:05:33.760" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: Exactly, that's actually not a bad idea.""" start="00:05:36.880" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I think I like that. Yeah,""" start="00:05:39.720" video="qanda-parallel" id="subtitle"]]
+[[!template text="""that's not a bad idea.""" start="00:05:40.800" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: It's always a quagmire whether to ask for an""" start="00:05:44.760" video="qanda-parallel" id="subtitle"]]
+[[!template text="""argument or to use the universal argument.""" start="00:05:47.080" video="qanda-parallel" id="subtitle"]]
+[[!template text="""When you're working with Emacs and especially""" start="00:05:51.060" video="qanda-parallel" id="subtitle"]]
+[[!template text="""the UX side of things in the package,""" start="00:05:52.640" video="qanda-parallel" id="subtitle"]]
+[[!template text="""it's so complicated to figure out which 1 you""" start="00:05:54.900" video="qanda-parallel" id="subtitle"]]
+[[!template text="""want to do. In this particular case,""" start="00:05:56.880" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I think it's the better option to use the""" start="00:06:00.340" video="qanda-parallel" id="subtitle"]]
+[[!template text="""universal argument or any kind of argument""" start="00:06:02.800" video="qanda-parallel" id="subtitle"]]
+[[!template text="""with a control number before.""" start="00:06:04.040" video="qanda-parallel" id="subtitle"]]
+[[!template text="""All right, we have about 3 more minutes of""" start="00:06:10.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""questions. Peter, if you don't mind,""" start="00:06:12.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I'll keep reading the questions in the chat.""" start="00:06:14.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Did you use pair programming while developing""" start="00:06:19.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""it, it being a package,""" start="00:06:21.100" video="qanda-parallel" id="subtitle"]]
+[[!template text="""or did you work independently,""" start="00:06:22.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""alternating and reviewing with Valentino?""" start="00:06:24.840" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: It was definitely a pair programming kind of""" start="00:06:28.320" video="qanda-parallel" id="subtitle"]]
+[[!template text="""thing. So if I remember correctly,""" start="00:06:29.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I was sitting at the computer and Valentino""" start="00:06:32.760" video="qanda-parallel" id="subtitle"]]
+[[!template text="""was in front of a whiteboard and we were just""" start="00:06:36.020" video="qanda-parallel" id="subtitle"]]
+[[!template text="""dissecting this regex and a bunch of examples""" start="00:06:38.400" video="qanda-parallel" id="subtitle"]]
+[[!template text="""and trying to get these capture groups and""" start="00:06:41.680" video="qanda-parallel" id="subtitle"]]
+[[!template text="""stuff that we have to remap internally to get""" start="00:06:44.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""these offsets right and avoid off by 1 error""" start="00:06:46.560" video="qanda-parallel" id="subtitle"]]
+[[!template text="""and stuff like that. So yeah,""" start="00:06:48.160" video="qanda-parallel" id="subtitle"]]
+[[!template text="""definitely a team effort.""" start="00:06:49.280" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, great. Moving on to the next question.""" start="00:06:53.660" video="qanda-parallel" id="subtitle"]]
+[[!template text="""What is your background in programming?""" start="00:06:55.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Was it difficult to implement following the""" start="00:06:57.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""same API and architecture as what is already""" start="00:06:59.700" video="qanda-parallel" id="subtitle"]]
+[[!template text="""in Emacs?""" start="00:07:00.200" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: So maybe just a quick back story.""" start="00:07:05.400" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Both Valentino and I are actually PhD""" start="00:07:06.960" video="qanda-parallel" id="subtitle"]]
+[[!template text="""students in computer science,""" start="00:07:08.300" video="qanda-parallel" id="subtitle"]]
+[[!template text="""and we literally share an office.""" start="00:07:09.960" video="qanda-parallel" id="subtitle"]]
+[[!template text="""So that's how we even started talking about""" start="00:07:12.960" video="qanda-parallel" id="subtitle"]]
+[[!template text="""this whole thing. And we both use Emacs,""" start="00:07:14.480" video="qanda-parallel" id="subtitle"]]
+[[!template text="""of course. But I don't think this was too""" start="00:07:18.380" video="qanda-parallel" id="subtitle"]]
+[[!template text="""hard to implement because luckily all of the""" start="00:07:20.740" video="qanda-parallel" id="subtitle"]]
+[[!template text="""interactive functionality like this""" start="00:07:22.300" video="qanda-parallel" id="subtitle"]]
+[[!template text="""complicated undo, skipping,""" start="00:07:23.600" video="qanda-parallel" id="subtitle"]]
+[[!template text="""execute until the end and so on,""" start="00:07:25.680" video="qanda-parallel" id="subtitle"]]
+[[!template text="""all of this is really just already provided""" start="00:07:27.980" video="qanda-parallel" id="subtitle"]]
+[[!template text="""by the Emacs queer replace implementation.""" start="00:07:29.860" video="qanda-parallel" id="subtitle"]]
+[[!template text="""So sort of what we do is we just invoke it as""" start="00:07:34.160" video="qanda-parallel" id="subtitle"]]
+[[!template text="""a function and delegate to it.""" start="00:07:36.080" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And we came up with this clever trick to""" start="00:07:37.800" video="qanda-parallel" id="subtitle"]]
+[[!template text="""basically delegate this multi-replacement to""" start="00:07:42.380" video="qanda-parallel" id="subtitle"]]
+[[!template text="""this 1 single function that's already there.""" start="00:07:45.160" video="qanda-parallel" id="subtitle"]]
+[[!template text="""So it wasn't too complicated.""" start="00:07:47.980" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: Alright. And we have about 2 minutes of time""" start="00:07:54.780" video="qanda-parallel" id="subtitle"]]
+[[!template text="""for the last question.""" start="00:07:55.560" video="qanda-parallel" id="subtitle"]]
+[[!template text="""What did you learn about Emacs programming or""" start="00:07:58.040" video="qanda-parallel" id="subtitle"]]
+[[!template text="""programming in general while working on this""" start="00:08:00.020" video="qanda-parallel" id="subtitle"]]
+[[!template text="""project? A very wide question for me.""" start="00:08:02.320" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: Maybe 1 thing I would like to add to the""" start="00:08:05.840" video="qanda-parallel" id="subtitle"]]
+[[!template text="""previous just answer is I don't want to say""" start="00:08:09.220" video="qanda-parallel" id="subtitle"]]
+[[!template text="""like you know we're PhDs,""" start="00:08:10.160" video="qanda-parallel" id="subtitle"]]
+[[!template text="""a PhD is required for this or anything,""" start="00:08:12.780" video="qanda-parallel" id="subtitle"]]
+[[!template text="""not at all. It's mostly just for a little bit""" start="00:08:15.800" video="qanda-parallel" id="subtitle"]]
+[[!template text="""of context, but I think obviously,""" start="00:08:19.220" video="qanda-parallel" id="subtitle"]]
+[[!template text="""even if you're not a PhD,""" start="00:08:20.640" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I mean, you don't even require like""" start="00:08:22.360" video="qanda-parallel" id="subtitle"]]
+[[!template text="""university, you know, education or anything.""" start="00:08:24.960" video="qanda-parallel" id="subtitle"]]
+[[!template text="""It wasn't overly difficult to implement,""" start="00:08:27.540" video="qanda-parallel" id="subtitle"]]
+[[!template text="""sort of just read some code that's already""" start="00:08:30.680" video="qanda-parallel" id="subtitle"]]
+[[!template text="""there and you know follow what you see and""" start="00:08:33.539" video="qanda-parallel" id="subtitle"]]
+[[!template text="""poke Emacs a little bit and do a little bit""" start="00:08:35.860" video="qanda-parallel" id="subtitle"]]
+[[!template text="""of debugging on the internals and you can""" start="00:08:38.140" video="qanda-parallel" id="subtitle"]]
+[[!template text="""definitely get it. So definitely not a""" start="00:08:40.280" video="qanda-parallel" id="subtitle"]]
+[[!template text="""prerequisite to have a degree or anything to""" start="00:08:42.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""do any of this stuff. Okay so Coming back to""" start="00:08:45.480" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I'm going to amend a little bit the""" start="00:08:48.420" video="qanda-parallel" id="subtitle"]]
+[[!template text="""question because we only have 1 minute.""" start="00:08:49.680" video="qanda-parallel" id="subtitle"]]
+[[!template text="""So just 1 thing in 10 seconds,""" start="00:08:51.600" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 2]: what did you""" start="00:08:52.490" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: learn about this?""" start="00:08:53.040" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: your last question. What did I learn about""" start="00:08:54.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Emacs programming? That Emacs is so flexible""" start="00:08:56.420" video="qanda-parallel" id="subtitle"]]
+[[!template text="""that I can go and I can patch literally its""" start="00:08:59.160" video="qanda-parallel" id="subtitle"]]
+[[!template text="""message function. And that is how we achieve""" start="00:09:01.480" video="qanda-parallel" id="subtitle"]]
+[[!template text="""the nice message function in the echo buffer.""" start="00:09:03.680" video="qanda-parallel" id="subtitle"]]
+[[!template text="""So I can literally go and patch something as""" start="00:09:06.720" video="qanda-parallel" id="subtitle"]]
+[[!template text="""crucial as message.""" start="00:09:07.560" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: It's great. That's a lovely 1.""" start="00:09:09.920" video="qanda-parallel" id="subtitle"]]
+[[!template text="""And I think, again, we're going back to the""" start="00:09:12.260" video="qanda-parallel" id="subtitle"]]
+[[!template text="""philosophy of Emacs. Everything is""" start="00:09:13.660" video="qanda-parallel" id="subtitle"]]
+[[!template text="""programmable and even changing the message""" start="00:09:15.200" video="qanda-parallel" id="subtitle"]]
+[[!template text="""function is great. All right,""" start="00:09:16.640" video="qanda-parallel" id="subtitle"]]
+[[!template text="""well, thank you so much,""" start="00:09:17.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Lovro, and thanks to Valentino as well,""" start="00:09:19.540" video="qanda-parallel" id="subtitle"]]
+[[!template text="""who's not here, but who's contributed to this""" start="00:09:21.820" video="qanda-parallel" id="subtitle"]]
+[[!template text="""talk. Any last word?""" start="00:09:23.900" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, just if you're gonna build any""" start="00:09:29.540" video="qanda-parallel" id="subtitle"]]
+[[!template text="""solutions, try to make them as foolproof and""" start="00:09:31.980" video="qanda-parallel" id="subtitle"]]
+[[!template text="""as 100% as possible so we get more of these""" start="00:09:34.360" video="qanda-parallel" id="subtitle"]]
+[[!template text="""goodies that are nice and robust for""" start="00:09:36.280" video="qanda-parallel" id="subtitle"]]
+[[!template text="""everybody to use.""" start="00:09:37.000" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: All right, lovely. Well,""" start="00:09:39.400" video="qanda-parallel" id="subtitle"]]
+[[!template text="""thank you so much, Lover,""" start="00:09:40.240" video="qanda-parallel" id="subtitle"]]
+[[!template text="""for your presentation and your answer.""" start="00:09:41.940" video="qanda-parallel" id="subtitle"]]
+[[!template text="""We'll be moving on to the next talk in just""" start="00:09:44.340" video="qanda-parallel" id="subtitle"]]
+[[!template text="""about 5 seconds, and I'll see you after.""" start="00:09:47.260" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Bye, Lovro!""" start="00:09:47.900" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yep, bye bye!""" start="00:09:49.760" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 0]: So I'm just waiting to make sure my VNC is a""" start="00:10:01.440" video="qanda-parallel" id="subtitle"]]
+[[!template text="""little slow. Okay, we switch to the next""" start="00:10:02.840" video="qanda-parallel" id="subtitle"]]
+[[!template text="""talk. All right, Lover,""" start="00:10:03.480" video="qanda-parallel" id="subtitle"]]
+[[!template text="""I'm gonna need to go get ready now.""" start="00:10:04.960" video="qanda-parallel" id="subtitle"]]
+[[!template text="""Yep. Bye-bye, and thanks for your talk.""" start="00:10:09.060" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 1]: Bye, thank you, see you.""" start="00:10:11.160" video="qanda-parallel" id="subtitle"]]
+[[!template text="""[Speaker 2]: You""" start="00:10:15.060" video="qanda-parallel" id="subtitle"]]
+
+Questions or comments? Please e-mail [hokomo@disroot.org](mailto:hokomo@disroot.org?subject=Comment%20for%20EmacsConf%202023%20parallel%3A%20Parallel%20text%20replacement)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/parallel-before.md b/2023/info/parallel-before.md
new file mode 100644
index 00000000..54bb132d
--- /dev/null
+++ b/2023/info/parallel-before.md
@@ -0,0 +1,36 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 15-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="parallel-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="parallel-mainVideo" data="""
+00:00.000 Introduction
+00:23.440 Problem: Goal
+01:12.360 Problem: Naive Multi-pass
+01:34.200 Problem: Clever Multi-pass
+01:57.720 Problem: Terminology
+03:04.440 Problem: Scaling Multi-pass
+03:55.920 Solution: Single-pass
+04:18.240 Solution: Existing
+06:29.080 Solution: query-replace-parallel
+06:55.240 Demonstration: Swap
+07:53.970 Demonstration: LaTeX
+08:48.700 Demonstration: Regex
+09:36.320 Demonstration: Order
+10:54.440 Demonstration: Fun
+12:29.120 Implementation
+14:18.740 End
+
+"""]]<div></div>Duration: 14:46 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main-vp8.webm">Download --main-vp8.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/t3G5zo35epS6HvVot9MdZv">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="parallel-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="parallel-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus"></audio></div><div></div>Duration: 10:16 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus">Download --answers.opus (6.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm">Download --answers.webm (10MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/parallel-nav.md b/2023/info/parallel-nav.md
new file mode 100644
index 00000000..5d255eff
--- /dev/null
+++ b/2023/info/parallel-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/koutline">Using Koutline for stream of thought journaling</a>
+Next by track: <a href="/2023/talks/eat">Eat and Eat powered Eshell, fast featureful terminal inside Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/poltys-after.md b/2023/info/poltys-after.md
new file mode 100644
index 00000000..7adf9ca7
--- /dev/null
+++ b/2023/info/poltys-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [perma-curious@posteo.de](mailto:perma-curious@posteo.de?subject=Comment%20for%20EmacsConf%202023%20poltys%3A%20The%20browser%20in%20a%20buffer)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/poltys-before.md b/2023/info/poltys-before.md
new file mode 100644
index 00000000..b5eb7ada
--- /dev/null
+++ b/2023/info/poltys-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 35-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="poltys-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 34:30 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm">Download --main.webm (185MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1quXfJqC9bh9VxkA9UC21x">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/poltys-nav.md b/2023/info/poltys-nav.md
new file mode 100644
index 00000000..dd2be68d
--- /dev/null
+++ b/2023/info/poltys-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/eat">Eat and Eat powered Eshell, fast featureful terminal inside Emacs</a>
+Next by track: <a href="/2023/talks/cubing">Speedcubing in Emacs</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/ref-after.md b/2023/info/ref-after.md
new file mode 100644
index 00000000..9af1f6ff
--- /dev/null
+++ b/2023/info/ref-after.md
@@ -0,0 +1,298 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="ref-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-ref" id="subtitle"]]
+
+[[!template text="""Hello, this is Christopher Howard,""" start="00:00:00.000" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and welcome to my talk,""" start="00:00:04.940" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""&quot;Informal Reference Tracking.&quot;""" start="00:00:06.520" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""This is a workflow talk,""" start="00:00:08.800" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""so I need to explain a little bit about""" start="00:00:10.574" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""what my needs were.""" start="00:00:12.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I am not a professional scholar or academic,""" start="00:00:14.840" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""but there are a number of subjects""" start="00:00:18.760" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that I'm interested in,""" start="00:00:20.200" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and I occasionally like to write""" start="00:00:21.607" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""gemlog posts about them.""" start="00:00:23.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So I needed some way to keep track of references.""" start="00:00:25.600" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""References to webpage articles, references to books,""" start="00:00:28.680" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""pages in books, and notes about them.""" start="00:00:32.960" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Something that was searchable,""" start="00:00:37.280" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""but also something that was quick and easy to use,""" start="00:00:39.480" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and something that I could set up quickly.""" start="00:00:42.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And the approach I took, it only took me""" start="00:00:45.200" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""about an hour or two to figure out""" start="00:00:47.360" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""how to put it together.""" start="00:00:49.520" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I do want to emphasize""" start="00:00:52.160" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that there are better ways to do this.""" start="00:00:53.840" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I'm not recommending you use my code""" start="00:00:56.520" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""or follow my exact approach.""" start="00:00:58.960" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""In particular, what I'm doing was meant to be done""" start="00:01:02.120" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""with Org's built-in capture""" start="00:01:05.940" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and templates functionality,""" start="00:01:09.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""so that's something that's more flexible,""" start="00:01:11.800" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""programmable, and there's also a lot of add-ins""" start="00:01:14.907" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that can be tied into that.""" start="00:01:21.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""For example, tools that allow you to search for,""" start="00:01:23.960" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""you know, feed in a URL, and it automatically""" start="00:01:31.320" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""pulls all the reference data for you.""" start="00:01:34.480" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And there's tools out there""" start="00:01:38.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that are really meant for scientific writing,""" start="00:01:39.760" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""so if you do this professionally,""" start="00:01:43.120" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""you may need to keep track of dozens of details""" start="00:01:46.760" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""for each reference""" start="00:01:49.960" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and then have some fancy system to generate that""" start="00:01:51.080" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""into your, or output that into your paper.""" start="00:01:55.320" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So there are better systems,""" start="00:02:00.800" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""but this is what worked for me and what was easy.""" start="00:02:02.440" video="mainVideo-ref" id="subtitle"]]
+
+[[!template new="1" text="""Tip about completion frameworks""" start="00:02:06.040" video="mainVideo-ref" id="subtitle"]]
+
+[[!template text="""I do want to emphasize that if you haven't,""" start="00:02:06.040" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""you really want to learn how to use helm-mode""" start="00:02:11.320" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""H-E-L-M, or one of the similar systems in Emacs""" start="00:02:14.640" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that does fuzzy search on Emacs commands.""" start="00:02:20.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""For example, in Helm here,""" start="00:02:26.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I input one keychord, and then I just have to remember""" start="00:02:29.340" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""a few characters of some command,""" start="00:02:39.007" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and they don't even have to be right next to each other,""" start="00:02:40.720" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""like H-O-C will bring up `helm-occur`.""" start="00:02:43.480" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""That's based on its algorithms""" start="00:02:47.640" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""of what I most likely meant""" start="00:02:51.360" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and the ones that I've used in the past.""" start="00:02:53.000" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So it usually brings up the command that I want,""" start="00:02:55.160" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""or the one that I want""" start="00:02:57.920" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""is one or two spots away in the entry.""" start="00:02:59.580" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""That just saves me a lot of time""" start="00:03:03.080" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""[and] a lot of memorization.""" start="00:03:05.074" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So if you haven't learned Helm""" start="00:03:06.960" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""or a similar system for Emacs, you really want to.""" start="00:03:09.120" video="mainVideo-ref" id="subtitle"]]
+
+[[!template new="1" text="""References file overview""" start="00:03:14.920" video="mainVideo-ref" id="subtitle"]]
+
+[[!template text="""So what is my approach?""" start="00:03:14.920" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Well, basically, what it comes down to is really""" start="00:03:18.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""fundamentally nothing more than just a list""" start="00:03:24.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""of Org entries in a file.""" start="00:03:27.307" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And there's one entry per reference.""" start="00:03:30.640" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Fundamentally, that's all it is.""" start="00:03:35.580" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""But I'll go over the parts.""" start="00:03:37.207" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""You can see there's the title for the entry,""" start="00:03:39.207" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and that's not necessarily""" start="00:03:43.080" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""the title of the book or the article,""" start="00:03:44.800" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""but that's my perspective on it,""" start="00:03:47.400" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that's what I want to remember about it,""" start="00:03:50.840" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and what I'll be looking for later""" start="00:03:52.720" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""when I do a search on my references.""" start="00:03:54.560" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""There's also in here the use of Org's tags""" start="00:03:56.560" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""here to the right of the title,""" start="00:04:06.660" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""very handy for searching for entries later.""" start="00:04:08.274" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I use some Org properties attached to each entry.""" start="00:04:12.040" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I automatically add in here an ID""" start="00:04:18.160" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that can be useful if you want to""" start="00:04:21.740" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""link entries together later.""" start="00:04:24.074" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I automatically add in here the date""" start="00:04:27.800" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that the entry was created,""" start="00:04:30.400" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""which can be useful to me if things""" start="00:04:31.840" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""got sorted in a different order at some point,""" start="00:04:35.700" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I could still look through""" start="00:04:38.360" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""the most recent entries that I had made""" start="00:04:39.940" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""if I wanted to do that for some reason.""" start="00:04:42.507" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And sometimes I add in this publication year field""" start="00:04:45.040" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""with the idea that one day I might want to do""" start="00:04:48.640" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""a search for entries based on the publication year""" start="00:04:52.720" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""of the book or the article,""" start="00:04:55.840" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""say, only to use recent references""" start="00:04:57.360" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""or something like that.""" start="00:05:00.774" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And then down here below the properties""" start="00:05:03.080" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""is where I paste in the URL to the webpage, or""" start="00:05:05.360" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""type in the title and author of the book""" start="00:05:10.080" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""on the pages, maybe the pages that were relevant,""" start="00:05:13.007" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""the pages of the periodical, or something like that.""" start="00:05:16.960" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And I could put anything that I want down here,""" start="00:05:21.640" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""some other notes about what's important""" start="00:05:23.920" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""about this article to me.""" start="00:05:25.840" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So fundamentally, that's all it is.""" start="00:05:29.940" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Of course, I've added in a bit of convenience code""" start="00:05:32.200" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""to make this go a lot faster""" start="00:05:35.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""rather than typing all this out.""" start="00:05:37.080" video="mainVideo-ref" id="subtitle"]]
+
+[[!template new="1" text="""The Emacs Lisp code""" start="00:05:39.320" video="mainVideo-ref" id="subtitle"]]
+
+[[!template text="""For that, I'll switch back to my init.el file.""" start="00:05:39.320" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""There's really just five functions.""" start="00:05:45.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""The first two here are ones""" start="00:05:49.480" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that I've adapted off the Internet.""" start="00:05:52.840" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Honestly, I can't remember""" start="00:05:54.560" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""exactly where that I got them from,""" start="00:05:56.160" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""but basically, they're just some functions""" start="00:05:58.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""for making a block of text writable or readable.""" start="00:06:00.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Writable or not writable, I should say.""" start="00:06:04.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""The idea there is that""" start="00:06:09.300" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""when I'm creating a new entry,""" start="00:06:12.200" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I don't want to accidentally delete""" start="00:06:13.480" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""or write over some earlier entries that I've made.""" start="00:06:16.307" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So I use a little bit of Emacs functionality for that.""" start="00:06:18.960" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And then here are the three reference functions""" start="00:06:24.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that I've actually written.""" start="00:06:29.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Really trivial, basic stuff here.""" start="00:06:32.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""The core of it is the `new-reference` function.""" start="00:06:35.040" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Basically, what that does is""" start="00:06:41.800" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""it opens up the references file,""" start="00:06:44.840" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""jumps to the end of the reference file,""" start="00:06:47.560" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""starts a new entry, inserts the asterisk.""" start="00:06:52.040" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""It jumps back to the previous text,""" start="00:06:57.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and whatever previous text there is,""" start="00:07:01.520" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""it makes that read-only.""" start="00:07:03.474" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Again, so that I don't accidentally delete that,""" start="00:07:04.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""or cut, or type over it, or something""" start="00:07:08.120" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""when I'm making a new reference.""" start="00:07:10.800" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Then it goes back to the new reference,""" start="00:07:14.580" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""automatically adds in a unique ID for that,""" start="00:07:17.680" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and then automatically stamps it with""" start="00:07:21.340" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""the date the entry was created — today's date.""" start="00:07:25.360" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Now, I've got two other functions here.""" start="00:07:29.000" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""One is `view-references`,""" start="00:07:32.760" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""which does nothing but open up the reference file""" start="00:07:34.540" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and switch to that buffer""" start="00:07:37.807" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""if you're not already on it.""" start="00:07:39.400" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And then there's one other here, `edit-references`,""" start="00:07:42.540" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""which does the exact same thing except for""" start="00:07:45.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""it also goes over all the text in the buffer""" start="00:07:50.160" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and makes it writable.""" start="00:07:53.560" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So if I really do want to edit those other references,""" start="00:07:55.040" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I've got a function to quickly make that possible.""" start="00:07:58.120" video="mainVideo-ref" id="subtitle"]]
+
+[[!template new="1" text="""Example reference to Elfeed article""" start="00:08:02.720" video="mainVideo-ref" id="subtitle"]]
+
+[[!template text="""Let me give an example of this.""" start="00:08:02.720" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I type in here, new reference.""" start="00:08:07.500" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Now I've jumped to the end of my references file.""" start="00:08:13.980" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""See, it's ready to take the title.""" start="00:08:16.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Well, I guess I need to have something,""" start="00:08:19.080" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""some content, to put in here.""" start="00:08:21.720" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Let's say I was looking through Elfeed,""" start="00:08:23.660" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and let's say I found this interesting article""" start="00:08:28.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""about Mars earthquakes.""" start="00:08:31.600" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Let's say I open it up [and]""" start="00:08:38.220" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I read through the article.""" start="00:08:40.007" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""First, I'd figure out what it is""" start="00:08:41.160" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that I find interesting about this, what it is that""" start="00:08:43.840" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I'm going to want to remember and look up later.""" start="00:08:47.260" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So I come up with a quick title based on that.""" start="00:08:51.580" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Let's go back to the references with `view-reference`.""" start="00:08:57.480" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And, let's just call it""" start="00:09:01.900" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""&quot;Study of Mars Earthquake.&quot;""" start="00:09:05.674" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Now I'm going to also want to put in some tags.""" start="00:09:13.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""On my system, that's done with""" start="00:09:18.200" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Control C, Control Q (`C-c C-q`).""" start="00:09:21.107" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And I can put in some tags.""" start="00:09:23.640" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I like to go ahead and insert the colons.""" start="00:09:25.520" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""You can leave those out,""" start="00:09:29.160" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""but they're going to get added anyway,""" start="00:09:30.800" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""so I'm in the habit of using them.""" start="00:09:32.560" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Let's say we'll call this 'Astronomy' as one tag,""" start="00:09:36.780" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and the next tag could be 'Planets'.""" start="00:09:41.120" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""If I wanted to use a tag""" start="00:09:47.060" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that was more than one word in the tag,""" start="00:09:48.400" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I'd need to use underscores or something like that.""" start="00:09:50.400" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""If I wanted a tag that was 'Mars Earthquakes',""" start="00:09:53.540" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I could do it like that, but that's kind of silly.""" start="00:10:00.500" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Now I try not to be too clever with the tags.""" start="00:10:05.060" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I don't spend a lot of time thinking about them.""" start="00:10:08.660" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I just come up with some general buckets""" start="00:10:10.600" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""to throw things in.""" start="00:10:13.107" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""You can see the tags were added there,""" start="00:10:15.020" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""to the right of the title.""" start="00:10:16.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Now you can see down here under PROPERTIES,""" start="00:10:19.380" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""the ID has already been added,""" start="00:10:23.400" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""the Date_Created has been added.""" start="00:10:25.320" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Sometimes, I'll like to put in the publication year,""" start="00:10:27.040" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and for that, I use the `org-set-property` command.""" start="00:10:30.200" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Publication_Year, this year in this case.""" start="00:10:38.140" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And then I just need to paste in the URL.""" start="00:10:43.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I do that manually.""" start="00:10:46.680" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I use Org's bracket format for that.""" start="00:10:48.080" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So I start that, go back to the article,""" start="00:10:53.480" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""copy the URL, paste that in.""" start="00:10:57.640" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""If I want, I can add it in the title""" start="00:11:02.100" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""with the second pair of brackets here.""" start="00:11:04.480" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Don't have to, but often like to.""" start="00:11:07.460" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Close that off, and there it is.""" start="00:11:14.200" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""That was really it.""" start="00:11:18.560" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I add a return on the end here,""" start="00:11:20.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""just so the next entry comes out with the right spacing.""" start="00:11:22.120" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""But really, that's it,""" start="00:11:26.620" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and typically, when I'm not explaining it,""" start="00:11:28.307" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that only takes 20 seconds or so, or 30 seconds.""" start="00:11:31.000" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Pretty quick. Pretty easy.""" start="00:11:37.500" video="mainVideo-ref" id="subtitle"]]
+
+[[!template new="1" text="""Searching the references""" start="00:11:41.540" video="mainVideo-ref" id="subtitle"]]
+
+[[!template text="""What about searching later?""" start="00:11:41.540" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Well, often the easiest thing is just do a simple,""" start="00:11:45.540" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""boring incremental search.""" start="00:11:50.474" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I usually know roughly""" start="00:11:54.640" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""what it is that I'm looking for already.""" start="00:11:55.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""If I was looking for that wildflower article,""" start="00:11:58.500" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I could just do an incremental search for wildflowers""" start="00:12:02.380" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and jump through that. It's pretty simple.""" start="00:12:06.000" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Not very impressive, but honestly, most of the time""" start="00:12:07.920" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that gets me there pretty quick.""" start="00:12:13.200" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Sometimes I find it useful to do an Occur search,""" start="00:12:16.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""more specifically a Helm Occur search.""" start="00:12:20.360" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""If I use the `helm-occur` command,""" start="00:12:23.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""then I like to use this to search by tag.""" start="00:12:31.260" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""That's where it really becomes handy.""" start="00:12:34.680" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Let's say I want to narrow it down""" start="00:12:36.760" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""to all my astronomy references""" start="00:12:39.207" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and then narrow it down a little bit more to planets.""" start="00:12:42.640" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I can put spaces in between and it still works.""" start="00:12:50.040" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""You can see here in one window,""" start="00:12:54.120" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""it gives me the bottom window there.""" start="00:12:57.200" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""It's giving…, just because of the way""" start="00:13:00.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""the tags are formatted with the title, it gives me""" start="00:13:03.480" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""a list of all the titles that have those tags.""" start="00:13:06.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""And I usually find what I want pretty quick""" start="00:13:09.520" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""by just tapping through here.""" start="00:13:11.520" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Once I find the one that I think I want,""" start="00:13:13.400" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I press enter, and now I'm focused on just that entry.""" start="00:13:16.500" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""There is some advanced functionality, I believe,""" start="00:13:24.140" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that I used in the past where you could search""" start="00:13:26.960" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""based on the property fields.""" start="00:13:29.960" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So do something like search for publication —""" start="00:13:33.120" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""the most recent publications in the last 10 years.""" start="00:13:37.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""There's some kind of advanced syntax for that,""" start="00:13:42.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""which I used once or twice.""" start="00:13:46.200" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Honestly, I use that so infrequently""" start="00:13:48.220" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""that I have to go back to the Emacs manual""" start="00:13:51.400" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and figure it out each time, and figure out again""" start="00:13:54.840" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""how I did that the last time.""" start="00:13:57.740" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""But since I do it only once""" start="00:13:59.880" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""every three or four months, it's not a problem.""" start="00:14:02.000" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So I'm not going to go over that today.""" start="00:14:06.680" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""That's pretty much it in a nutshell.""" start="00:14:11.520" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Again, the code that I wrote, this specific approach""" start="00:14:16.480" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""is not really what I'm recommending.""" start="00:14:19.974" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""But here it is if you really do want to use it.""" start="00:14:24.280" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Maybe I can make a link to the URL""" start="00:14:31.160" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""and share that in the chat room or something.""" start="00:14:36.240" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""But I consider this to be trivial code.""" start="00:14:40.060" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""So just use that if you want to use it.""" start="00:14:46.760" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I should be signing off here now.""" start="00:14:49.800" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""I should be in the chat room, in the IRC chat room,""" start="00:14:53.440" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""or you can reach out to me by email if you'd like.""" start="00:14:58.260" video="mainVideo-ref" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:15:01.920" video="mainVideo-ref" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+Questions or comments? Please e-mail [christopher@librehacker.com](mailto:christopher@librehacker.com?subject=Comment%20for%20EmacsConf%202023%20ref%3A%20Org-Mode%20workflow%3A%20informal%20reference%20tracking)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/ref-before.md b/2023/info/ref-before.md
new file mode 100644
index 00000000..165a4e1b
--- /dev/null
+++ b/2023/info/ref-before.md
@@ -0,0 +1,20 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 16-min talk; Q&A: IRC
+Status: All done
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="ref-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="ref-mainVideo" data="""
+00:00.000 Introduction
+02:06.040 Tip about completion frameworks
+03:14.920 References file overview
+05:39.320 The Emacs Lisp code
+08:02.720 Example reference to Elfeed article
+11:41.540 Searching the references
+
+"""]]<div></div>Duration: 15:04 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.ogg">Download --main.ogg (7.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/cYpEatASFWXLzDfKH4Fhec">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/ref-nav.md b/2023/info/ref-nav.md
new file mode 100644
index 00000000..a370300e
--- /dev/null
+++ b/2023/info/ref-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/solo">How I play TTRPGs in Emacs</a>
+Next by track: <a href="/2023/talks/unentangling">(Un)entangling projects and repos</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/repl-after.md b/2023/info/repl-after.md
new file mode 100644
index 00000000..d0a895ad
--- /dev/null
+++ b/2023/info/repl-after.md
@@ -0,0 +1,1146 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="repl-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""Hi! My name is Eduardo Ochs""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and the title of this talk is: REPLs""" start="00:00:03.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in strange places - Lua, LateX, LPeg, LPegRex,""" start="00:00:05.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and TikZ. I'm the author of an Emacs""" start="00:00:09.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""package called eev, and this is a talk""" start="00:00:12.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""at the EmacsConf 2023, that is happening in""" start="00:00:14.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""December 2023, at the internets.""" start="00:00:18.480" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""Diagrams""" start="00:00:22.520" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""This is one of the""" start="00:00:22.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""examples of diagrams that we are""" start="00:00:23.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""going to see - let me show how I generate""" start="00:00:24.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it... one second,""" start="00:00:27.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I have to use a smaller font here...""" start="00:00:30.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this is a file called ParseTree2.lua...""" start="00:00:35.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""let me go back to this block of tests again...""" start="00:00:39.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and now if I run""" start="00:00:42.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this...""" start="00:00:43.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""we get these outputs here at the""" start="00:00:47.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""right, and then in this line here it""" start="00:00:50.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""generates a PDF, and if I type f8 here it""" start="00:00:53.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""shows the PDF in the lower right window.""" start="00:00:58.120" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""eev""" start="00:01:03.920" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""Let me start by explaining""" start="00:01:03.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""briefly what is eev.""" start="00:01:06.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""First: it is something that""" start="00:01:09.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""appeared by accident in the mid-90s - I""" start="00:01:12.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""explained this story in my""" start="00:01:14.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""presentation at the EmacsConf 2019...""" start="00:01:16.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it's a package... it's an Emacs""" start="00:01:20.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""package that is part of ELPA... it has at""" start="00:01:23.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""least 10 users - those are the ones""" start="00:01:26.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that I know by name...""" start="00:01:29.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""eev means `emacs-execute-verbosely'...""" start="00:01:32.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""eev is something that treats eval-last-sexp""" start="00:01:38.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""as the central feature of Emacs...""" start="00:01:40.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""eev blurs the distinction between""" start="00:01:44.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""programmers and users, and it replaces""" start="00:01:45.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the slogan &quot;users should not be forced to""" start="00:01:48.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""see Lisp&quot;, that is something that Richard""" start="00:01:51.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Stallman told me once, by &quot;users should see""" start="00:01:53.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Lisp instead of buttons&quot; and &quot;new users""" start="00:01:57.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""should see Lisp in the first 5 minutes&quot;...""" start="00:02:00.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I'm going to show""" start="00:02:04.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""some examples of that soon.""" start="00:02:05.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Eev uses code in comments a lot,""" start="00:02:08.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and also tests in comments...""" start="00:02:11.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I changed my way of presenting it""" start="00:02:15.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and it became very REPL-centric""" start="00:02:17.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in the last few years, in the""" start="00:02:19.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""sense that I start by explaining its""" start="00:02:22.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""main features by its support for REPLs...""" start="00:02:24.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""eev supposes""" start="00:02:28.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that we want to keep""" start="00:02:31.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""executable notes of everything - I'm also""" start="00:02:32.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""going to show examples of this in a""" start="00:02:35.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""second... eev has lots of &quot;videos for""" start="00:02:37.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""people who hate videos&quot;, and it tries to""" start="00:02:40.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""do everything with very little magic and""" start="00:02:43.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""without black boxes - I'm going to explain""" start="00:02:46.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""many of these things very soon.""" start="00:02:48.840" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""Another figure""" start="00:02:50.320" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""This is a figure that that I'm going""" start="00:02:50.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to show in details soon, that is""" start="00:02:52.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""about something important about Lua...""" start="00:02:57.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the font is very bad now, so let me""" start="00:02:59.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""change the font... the figure is this one...""" start="00:03:03.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and...""" start="00:03:07.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""what most people do when they""" start="00:03:08.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""visit a file with something""" start="00:03:12.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""interesting on it is that they just go""" start="00:03:14.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""there and they set a bookmark there, or""" start="00:03:16.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""they put the position in a register...""" start="00:03:18.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""but I prefer to keep""" start="00:03:21.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""links to everything that is interesting""" start="00:03:26.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""as elisp hyperlinks. So, for example, this is""" start="00:03:29.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""an elisp hyperlink to a file, that goes""" start="00:03:32.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to this anchor here, and to this string""" start="00:03:35.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""after this anchor... this is a variant""" start="00:03:37.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that opens that file in the window""" start="00:03:41.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""at the right -""" start="00:03:44.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here... and this is""" start="00:03:45.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a sexp that changes the font. I""" start="00:03:48.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""have a command with a very short name""" start="00:03:53.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that does that, but I""" start="00:03:56.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""prefer to keep that as a one-liner.""" start="00:03:59.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""About the videos... we can see""" start="00:04:02.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the list of first-class videos of eev""" start="00:04:06.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""by executing this, M-x find-1stclassvideos,""" start="00:04:10.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""or by running this alias here, M-x 1c...""" start="00:04:14.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and then what we see is this...""" start="00:04:18.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the first sexp here""" start="00:04:20.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""regenerates this buffer - so we can make a""" start="00:04:24.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""mess here and then run this and the""" start="00:04:26.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""original buffer is regenerated again in""" start="00:04:29.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a clean way...""" start="00:04:33.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""each of these things here""" start="00:04:34.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""opens a buffer with information about""" start="00:04:36.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a video... let me take a specific""" start="00:04:40.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""example here... this video here is about""" start="00:04:44.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""one of the ancestors of this talk, that""" start="00:04:49.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is a library that I wrote""" start="00:04:51.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""for creating diagrams in LaTeX using""" start="00:04:53.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a package called Pict2e using REPLs...""" start="00:04:58.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""anyway...""" start="00:05:03.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the thing is that if we""" start="00:05:03.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""run a sexp like this one and we don't""" start="00:05:06.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""have a local copy of the video eev""" start="00:05:11.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""will try to download to the local copy -""" start="00:05:14.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and instead of doing that by asking""" start="00:05:17.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""something like &quot;do you want me""" start="00:05:20.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to download the local copy? Blah""" start="00:05:21.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""blah blah blah blah...&quot; it simply opens a""" start="00:05:24.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""buffer like this, I mean, if we don't""" start="00:05:28.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""have a local copy yet it will open a""" start="00:05:30.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""buffer like this one, in which these""" start="00:05:33.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""things here in comments are links to the""" start="00:05:36.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""documentation... I mean, this thing here""" start="00:05:39.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""explains the idea of local copies""" start="00:05:43.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of files from the internet...""" start="00:05:46.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""there are more details here, and here...""" start="00:05:48.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and this is a script that we""" start="00:05:54.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""can execute line by line, so instead of""" start="00:05:57.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this script being hidden behind the""" start="00:06:00.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""button that we just press after a""" start="00:06:02.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""question like &quot;Do you want me to do""" start="00:06:06.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""something blah blah blah? Yes or no?&quot;""" start="00:06:08.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the script is visible here and we can""" start="00:06:10.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""execute it step by step... it creates a""" start="00:06:13.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""terminal with a shell here in the""" start="00:06:17.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""right window, and when we type f8 in""" start="00:06:20.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""one of these lines here the lines are""" start="00:06:24.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""sent... (...) so this is going""" start="00:06:26.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to download a copy of the video... the""" start="00:06:29.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""wget says that I already have a copy of""" start="00:06:31.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the video and its subtitles... and so on.""" start="00:06:36.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""And after getting a copy of the video""" start="00:06:39.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""we can run this sexp here and it displays""" start="00:06:43.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the video.""" start="00:06:48.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I said that eev has lots of""" start="00:06:49.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;videos for people who hate videos&quot;, and""" start="00:06:55.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the idea is that very few""" start="00:06:58.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""people are going to watch the videos in""" start="00:06:59.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""real time... and most of the people that""" start="00:07:02.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I know - or: most of the people that""" start="00:07:06.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""are interested in eev in some""" start="00:07:08.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""way... they are going to watch just""" start="00:07:10.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""small sections of the video, and most of""" start="00:07:13.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the time they're just going to read the""" start="00:07:16.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""subtitles of the video. So, for each""" start="00:07:17.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""one of the videos we have a page""" start="00:07:20.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""about the video... let me see if I""" start="00:07:23.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""have internet here... yes. This is a""" start="00:07:27.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""page...""" start="00:07:30.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and usually these pages have a link""" start="00:07:32.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to another page that""" start="00:07:39.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""has all the subtitles of the""" start="00:07:40.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""video... uh, wherever... in this one""" start="00:07:43.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it's not so visible...""" start="00:07:46.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""but anyway, there are several""" start="00:07:48.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""ways of accessing the subtitles of the""" start="00:07:50.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""video, and one of the ways is by running""" start="00:07:52.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this sexp here,""" start="00:07:56.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that opens a file in Lua that is""" start="00:07:57.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""what I use to generate the""" start="00:08:01.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""subtitles.""" start="00:08:03.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Anyway... by the way, these things... each""" start="00:08:04.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""one of these things here is a hyperlink""" start="00:08:08.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to a position of the video, so if I type""" start="00:08:12.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this the right way it goes to that""" start="00:08:15.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""position. Anyway, let me go back...""" start="00:08:18.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""also, the tutorials of eev... the""" start="00:08:24.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;intros&quot; of eev, that start with &quot;find-&quot; and""" start="00:08:27.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""end with &quot;-intro&quot;, they have lots of blocks""" start="00:08:31.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that say &quot;[Video links:]&quot;, like this one, and""" start="00:08:34.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""these blocks have links to positions""" start="00:08:39.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in videos, and if we don't have a local""" start="00:08:41.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""copy of the video yet the thing shows""" start="00:08:43.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""us a script that lets us download the""" start="00:08:47.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""local copy.""" start="00:08:49.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Anyway, I said that I was going""" start="00:08:50.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to explain what I mean by &quot;magic&quot; and""" start="00:08:54.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;black boxes&quot;.""" start="00:08:58.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this is something that I've been""" start="00:08:59.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""trying to explain for a long time, and I""" start="00:09:03.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""think that I got a very good explanation""" start="00:09:05.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""about that in a video that I made""" start="00:09:07.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""about something called eev-wconfig, that""" start="00:09:09.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is a tool for configuring eev on""" start="00:09:13.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Windows without &quot;magic&quot; - without buttons""" start="00:09:15.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that do things without explaining what""" start="00:09:19.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""they're doing.""" start="00:09:22.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""This is a part of the subtitles""" start="00:09:22.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of the video, let me read that...""" start="00:09:25.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""eev-wconfig is an attempt to solve the""" start="00:09:28.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""problem of how to install these things""" start="00:09:32.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""on Windows both without magic and with""" start="00:09:35.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""very little""" start="00:09:37.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""magic. Remember this slogan: &quot;any""" start="00:09:37.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""sufficiently advanced technology is""" start="00:09:41.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""indistinguishable from""" start="00:09:44.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""magic&quot;. Here in this video I'm going to""" start="00:09:45.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""use the term magic as a shorthand""" start="00:09:49.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""for sufficiently advanced technology,""" start="00:09:52.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that is something that is complex and""" start="00:09:55.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""non-obvious and that is""" start="00:09:57.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""indistinguishable from magic in the""" start="00:10:00.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""sense of being almost impossible to""" start="00:10:02.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""understand. And I'm also going to use a""" start="00:10:04.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the term &quot;black box&quot; as a near-synonym for""" start="00:10:07.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""magic, and sometimes the term""" start="00:10:10.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;black box&quot; is more convenient even though""" start="00:10:13.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it's a bit longer - it has more""" start="00:10:16.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""letters - because when I use the term""" start="00:10:17.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""black box it invites us to use""" start="00:10:20.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""expressions like &quot;opening the black box&quot;,""" start="00:10:22.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and I'm going to use that""" start="00:10:25.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""expression a lot.""" start="00:10:26.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Now let me try to explain what is...""" start="00:10:28.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""sorry, let me change the font...""" start="00:10:37.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""what is Lua. Lua is a minimalistic""" start="00:10:41.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""language, in the sense of""" start="00:10:45.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;batteries not included&quot;... it uses""" start="00:10:50.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""associative tables for most of its data""" start="00:10:53.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""structures...""" start="00:10:56.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and it is so minimalistic""" start="00:10:56.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that its default print function, when""" start="00:11:00.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""we tell... when we create an associative""" start="00:11:04.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""table and we ask it to print...""" start="00:11:06.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""when we ask &quot;print&quot; to print an""" start="00:11:09.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""associative table it just prints the""" start="00:11:13.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""address of the table. Here are some""" start="00:11:15.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""examples... here is a table, and when we""" start="00:11:17.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""ask &quot;print&quot; to print it it just says""" start="00:11:21.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that it's the table at this address here.""" start="00:11:24.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""So, one of things that that most""" start="00:11:26.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""people do when they start using Lua is""" start="00:11:30.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that either they download a package with""" start="00:11:32.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a pretty-printing function or they write""" start="00:11:35.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""their own pretty-printing functions. My""" start="00:11:37.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""own pretty-printing function is called""" start="00:11:39.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""PP, with upper case letters, and it works""" start="00:11:41.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""like this...""" start="00:11:46.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and it prints associative tables""" start="00:11:47.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in a way like this. It says that for""" start="00:11:50.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the key 1 the the value associated to""" start="00:11:53.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it is 2, for the key 2 the value is""" start="00:11:57.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""3, and for the key 3 the value is 5.""" start="00:12:00.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""When I started using Lua one of my""" start="00:12:04.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""favorite languages was also a language""" start="00:12:11.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that used associative tables a lot -""" start="00:12:13.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it was called Icon...""" start="00:12:15.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and I had to write my own""" start="00:12:16.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""pretty-printing functions for Icon, so""" start="00:12:21.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I just had to port my pretty-printing""" start="00:12:23.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""functions to Lua... and my first""" start="00:12:27.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""version looked at something like this... it""" start="00:12:29.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""just had some some global functions... lots""" start="00:12:32.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of them, actually...""" start="00:12:36.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and after a while I rewrote it, and I""" start="00:12:39.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""rewrote it again, and again, and again, and""" start="00:12:42.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this is one of the versions of that,""" start="00:12:44.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is not even the default at this""" start="00:12:47.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""point...""" start="00:12:49.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;Tos&quot; is for &quot;to string&quot;...""" start="00:12:51.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and this is a demo...""" start="00:12:54.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it's very modular, so it's easy to replace""" start="00:12:58.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""parts of it, or to toggle flags... and this""" start="00:13:01.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is an example. If I try to print the""" start="00:13:05.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""table of methods for a certain""" start="00:13:08.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""class... I will need a smaller font...""" start="00:13:10.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it prints the table like this, with the""" start="00:13:14.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""names of the methods and then links to""" start="00:13:16.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the source code of the functions...""" start="00:13:20.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""these links only make sense in Emacs and""" start="00:13:21.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in eev...""" start="00:13:25.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and when we run a link like this one...""" start="00:13:25.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it shows the source code in the""" start="00:13:30.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""window at the right. So, for some""" start="00:13:32.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""functions the source code is three lines,""" start="00:13:35.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""for other ones it's one line... and""" start="00:13:37.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""whatever. Anyway, let me go""" start="00:13:40.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""back... Lua can be used in many different""" start="00:13:44.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""styles... most people hate other people's""" start="00:13:47.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""styles... when I started using it in the""" start="00:13:50.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""year 2000 I learned most of the basic""" start="00:13:53.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""language in a single day - it was very""" start="00:13:57.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""similar to things that I was already""" start="00:13:59.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""using... and then I rewrote the the mini-""" start="00:14:02.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""language that I was using to""" start="00:14:05.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""generate the HTML for my pages""" start="00:14:10.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in Lua... actually I had to rewrite it""" start="00:14:13.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""many times, but the first version I""" start="00:14:16.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""certainly did in my first weeks or first""" start="00:14:18.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""months using Lua...""" start="00:14:21.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""In the beginning I was just using""" start="00:14:22.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it for writing programs that either""" start="00:14:27.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""didn't take any input at all - because""" start="00:14:30.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the input was already in the source file -""" start="00:14:32.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""or that worked as Unix programs,""" start="00:14:35.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that would read files""" start="00:14:40.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and process these files in some way""" start="00:14:43.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and output something.""" start="00:14:45.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I mentioned the &quot;basic language&quot; here...""" start="00:14:49.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I only learned how to use closures,""" start="00:14:52.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""metatables, and coroutines many years later...""" start="00:14:54.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in the beginning, when I started using Lua,""" start="00:14:58.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it didn't have a package manager...""" start="00:15:02.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it appeared later, it is called""" start="00:15:04.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Luarocks... it has had this package""" start="00:15:06.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""manager for several years, most""" start="00:15:10.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of the rocks for Luarocks are poorly""" start="00:15:13.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""documented and hacker-unfriendly,""" start="00:15:15.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so you can't rely just on the""" start="00:15:18.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""documentation and you can't rely just on the""" start="00:15:21.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""source code, because, I mean... if you are""" start="00:15:23.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a genius of course you can, but for""" start="00:15:26.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""people who are either lazy, or dumb, or""" start="00:15:29.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""whatever, like me, or unfocused...""" start="00:15:31.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the source code is hard to""" start="00:15:34.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""understand and hard to tinker with.""" start="00:15:36.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Some rocks are excellent. The""" start="00:15:38.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""best rocks are well documented""" start="00:15:43.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""but they are hacker-unfriendly""" start="00:15:46.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in a sense that I hope that""" start="00:15:48.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I'll be able to explain soon.""" start="00:15:51.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""The best rocks use local""" start="00:15:52.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""variables and metatables a lot -""" start="00:15:55.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so if you are beginner""" start="00:15:58.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""learning Lua you're not going to""" start="00:16:02.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""understand what their source code do...""" start="00:16:03.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""they use lots of dirty tricks.""" start="00:16:06.160" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""Object orientation in Lua""" start="00:16:08.520" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""Let me talk a bit about object""" start="00:16:08.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""orientation in Lua. It can be done in""" start="00:16:12.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""many ways...""" start="00:16:14.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the main book about Lua, called""" start="00:16:15.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;Programming in Lua&quot;, by one of the authors""" start="00:16:19.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of the language, Roberto Ierusalimschy,""" start="00:16:21.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""presents several ways of doing""" start="00:16:23.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""object orientation in Lua... I hated all""" start="00:16:26.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of these ways - and also the ways that I""" start="00:16:29.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""tried from the rocks.""" start="00:16:33.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""And then I wrote my own way""" start="00:16:34.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of doing object orientation in Lua... it's""" start="00:16:38.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""very minimalistic, it's in this file here,""" start="00:16:40.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""eoo.lua... the main code is just this five""" start="00:16:43.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lines here...""" start="00:16:48.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and here's an example of how it works.""" start="00:16:49.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Here we define the class Vector,""" start="00:16:53.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""with some metamethods...""" start="00:16:58.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this metamethod here will tell Lua""" start="00:17:02.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""what to do when the""" start="00:17:05.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""user asks to add two vectors, this one""" start="00:17:08.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here tells Lua what to do when the user""" start="00:17:12.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""asks Lua to convert a vector to a string,""" start="00:17:15.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and... whatever, this one is""" start="00:17:18.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""something that I'm going to explain in a""" start="00:17:21.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""second. So, here we create a vector with""" start="00:17:24.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""these coordinates, 3 and 4... here we create""" start="00:17:27.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""another Vector... if we &quot;print&quot; here then Lua""" start="00:17:30.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""uses this function here, in the __tostring...""" start="00:17:33.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""if we add the two vectors it uses this""" start="00:17:36.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""function here, in the __add metamethod, and""" start="00:17:39.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""if we run the method :norm...""" start="00:17:43.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it is defined here, in the table __index.""" start="00:17:45.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Anyway...""" start="00:17:49.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Even this thing being so small I used""" start="00:17:58.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to forget how its innards worked all""" start="00:18:02.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the time. Actually I always forget how""" start="00:18:04.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""things work and I have to remember them""" start="00:18:08.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""somehow... and I have to have""" start="00:18:09.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""tricks for remembering, and tricks for""" start="00:18:12.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""summarizing things, and diagrams, and so""" start="00:18:15.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""on. And every time that I forgot how this""" start="00:18:18.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""thing worked I went back to the""" start="00:18:22.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""source code, and then I looked at the""" start="00:18:24.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagrams... or, of course, in the""" start="00:18:26.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""first times I had to draw the diagrams...""" start="00:18:29.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and I run the examples, and of course in""" start="00:18:31.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in the beginning I thought that the code""" start="00:18:35.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""was clear and my examples were very""" start="00:18:36.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""brief, and so I had to rewrite the""" start="00:18:39.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""examples many times until they became,""" start="00:18:41.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""let's say...""" start="00:18:44.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""perfect.""" start="00:18:45.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I was saying that Lua can be used in""" start="00:18:47.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""many ways, and in my way of using Lua - in""" start="00:18:52.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""my favorite way - everything can be""" start="00:18:56.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""inspected and modified from REPLs,""" start="00:18:59.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""like we can do in Emacs and in SmallTalk,""" start="00:19:02.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""or sort of. So, in my""" start="00:19:06.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""favorite way of using Lua there's no""" start="00:19:08.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""security at all, everything can be""" start="00:19:10.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""changed at all times.""" start="00:19:12.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Of course most people hate that...""" start="00:19:14.920" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""My init file""" start="00:19:19.120" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""My init file has lots of classes... by the""" start="00:19:19.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""way, instead of keeping many small files""" start="00:19:22.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""with many things I put lots of stuff""" start="00:19:26.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in just one big init file.""" start="00:19:29.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""My init file has lots of classes,""" start="00:19:31.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and lots of global functions, and""" start="00:19:34.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lots of cruft - and people hate that,""" start="00:19:37.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of course. This is an example...""" start="00:19:41.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this is the index at the top""" start="00:19:44.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of my init file,""" start="00:19:46.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the classes start here, and then""" start="00:19:48.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""we have some functions, and""" start="00:19:53.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""then we have functions that load""" start="00:19:59.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""certain packages, and then we have... cruft.""" start="00:20:01.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Whatever.""" start="00:20:03.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Most people think that my style""" start="00:20:04.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of using Lua is dirty, and dangerous...""" start="00:20:08.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and they wouldn't touch my Lua code""" start="00:20:10.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""with a 10 feet pole... but most of the""" start="00:20:12.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""things that I'm going to present here in""" start="00:20:15.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this presentation are ideas that should""" start="00:20:18.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""be easy to port to other environments""" start="00:20:23.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and other languages, especially the""" start="00:20:28.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagrams... so the code is not so important.""" start="00:20:32.280" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""LaTeX and LuaLaTeX""" start="00:20:35.280" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""Now let me talk a bit about LuaLaTeX,""" start="00:20:35.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that is LaTeX with a Lua interpreter""" start="00:20:39.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""embedded inside, and two ways""" start="00:20:41.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of generating pictures in LaTeX: TikZ,""" start="00:20:44.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that is very famous, and Pict2e, that is not""" start="00:20:48.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""very famous and that is very low level...""" start="00:20:54.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and I think that not many people use it.""" start="00:20:57.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I said before that when I""" start="00:21:02.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""learned Lua I realized that it was""" start="00:21:04.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""very good for writing little""" start="00:21:06.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""languages. I was doing my PhD at the""" start="00:21:09.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""time and typesetting the diagrams for""" start="00:21:14.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""my PhD thesis was very boring, so""" start="00:21:19.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""one of the things that I did was that I""" start="00:21:24.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""created a little language for typesetting""" start="00:21:29.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the diagrams for me. it was""" start="00:21:34.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""called Dednat because initially""" start="00:21:36.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it only generated diagrams for""" start="00:21:38.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Natural Deduction, and then it had""" start="00:21:41.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""several versions...""" start="00:21:43.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""these are the slides for my""" start="00:21:45.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""presentation about Dednat6... &quot;Dednat6 is""" start="00:21:46.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""an extensible semi-preprocessor for""" start="00:21:52.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""LuaLaTeX that understands diagrams in""" start="00:21:56.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""ASCII art&quot;... in the sense that when I have""" start="00:22:01.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a .tex file that has this, and when""" start="00:22:05.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Dednat6 is loaded,""" start="00:22:11.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""when I give the right commands""" start="00:22:13.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Dednat6 interprets this block here as""" start="00:22:15.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""something that defines this""" start="00:22:19.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagram... oops, sorry, it interprets this""" start="00:22:22.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagram here, this diagram in""" start="00:22:28.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""comments here, as something that defines""" start="00:22:30.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a diagram called foo... a deduction called""" start="00:22:34.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""foo, and it generates this code here...""" start="00:22:39.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so that we can just invoke""" start="00:22:41.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the definition of the""" start="00:22:44.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""deduction by typing \ded{foo}.""" start="00:22:45.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""And Dednat6 also""" start="00:22:47.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""supports another language for typesetting""" start="00:22:50.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""bidimensional diagrams with""" start="00:22:57.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""arrows and stuff for category Theory and""" start="00:22:59.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""blah blah blah... the specifications of""" start="00:23:05.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""these diagrams look like this...""" start="00:23:08.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here is a... sorry, here is a very good""" start="00:23:12.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""example, this is a huge diagram...""" start="00:23:14.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""sorry, one second...""" start="00:23:16.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so, the source code that generates""" start="00:23:18.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this diagram here is just this thing at""" start="00:23:20.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the left, so it's very visual... we can""" start="00:23:25.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""typeset the diagram in ASCII art here and""" start="00:23:32.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""then in this part here we tell how""" start="00:23:35.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the nodes are to be joined, which""" start="00:23:38.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""arrows have to to have annotations, and""" start="00:23:41.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so on...""" start="00:23:43.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and this language is extensible in""" start="00:23:45.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the sense that... uh, where's that...""" start="00:23:46.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here: comments that start with &quot;%:&quot;""" start="00:23:48.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""are interpreted as""" start="00:23:52.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""definitions for tree diagrams,""" start="00:23:54.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lines that start with &quot;%D&quot;""" start="00:23:56.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""define 2D diagrams with arrows and""" start="00:23:58.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""stuff, and lines that start with &quot;%L&quot;""" start="00:24:00.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""contain blocks of Lua code""" start="00:24:04.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that we can use to extend the interpreter""" start="00:24:06.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""on-the-fly...""" start="00:24:09.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""anyway, here are some recent""" start="00:24:10.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""examples of diagrams that I used""" start="00:24:12.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Dednat6 to typeset... this diagram""" start="00:24:15.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here was generated by this""" start="00:24:19.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""specification here...""" start="00:24:21.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and this diagram here with the""" start="00:24:22.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""curved arrows was generated by this""" start="00:24:27.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""specification here.""" start="00:24:30.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""So, Dednat6 was very easy to extend,""" start="00:24:32.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and at some point I started to use it""" start="00:24:39.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to generate diagrams using Pict2e -""" start="00:24:41.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""mainly for the classes that I give""" start="00:24:44.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""at the University... I teach mathematics and""" start="00:24:47.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""whatever... in a bad place. Whatever...""" start="00:24:50.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Let me show an animation... here is a""" start="00:24:57.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagram that I generated with Dednat6,""" start="00:25:00.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and it is a flip book animation, like... we""" start="00:25:02.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""type PgUp and PgDn and we go""" start="00:25:06.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to the next page of the book and to the""" start="00:25:09.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""previous page of the book...""" start="00:25:11.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and here is the source code that generates""" start="00:25:12.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that. This source code is not very visual,""" start="00:25:16.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so it's quite clumsy to edit that""" start="00:25:19.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagram directly in the .tex file like""" start="00:25:22.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that...""" start="00:25:27.520" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""Manim""" start="00:25:28.080" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""These diagrams were inspired""" start="00:25:28.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""by something called my Manim, that...""" start="00:25:30.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I forgot the name of the guy, but""" start="00:25:33.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it's a guy that makes many videos about""" start="00:25:37.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Mathematics, and he created this library""" start="00:25:41.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""called Manim for generating his""" start="00:25:44.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""animations, and other people adapted""" start="00:25:48.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""his library to make it more accessible...""" start="00:25:51.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I tried to learn it, but""" start="00:25:55.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""each animation, even an animation""" start="00:25:59.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that has very few frames... each""" start="00:26:01.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""animation took ages to render, so it""" start="00:26:03.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""wasn't fun... and animations in PDFs can""" start="00:26:07.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""be rendered in seconds. So these""" start="00:26:11.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""things were fun for me, because my laptop""" start="00:26:13.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is very very slow, and my Manim was not fun.""" start="00:26:18.680" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""Generating diagrams from REPLs""" start="00:26:24.360" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""Anyway, writing code like this""" start="00:26:24.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""inside a .tex file was not very""" start="00:26:27.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""fun because it was hard to""" start="00:26:32.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""debug... so in 2022 I started to play""" start="00:26:35.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""with ways of generating these""" start="00:26:38.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagrams from REPLs, and I found a""" start="00:26:41.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""way for Pict2e and a way for TikZ...""" start="00:26:43.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""each one of these ways became a video...""" start="00:26:47.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""if you go to the list of first-class""" start="00:26:50.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""videos of eev you're going to see""" start="00:26:53.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that there's a video about Pict2e here""" start="00:26:57.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here and a video about TikZ...""" start="00:26:59.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here you have some some information""" start="00:27:03.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""like length, an explanation, etc...""" start="00:27:05.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and here are the pages for these videos.""" start="00:27:09.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""My page about the video about Pict2e""" start="00:27:11.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""looks like this, it has some diagrams...""" start="00:27:16.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""whatever... and this one is much""" start="00:27:20.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""nicer, and a lot of people""" start="00:27:23.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""watched that video... I mean, I think""" start="00:27:26.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that 250 people watched it - for me that's""" start="00:27:30.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a million of people...""" start="00:27:33.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and this video is about how to""" start="00:27:35.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""extract diagrams from the manual... from""" start="00:27:39.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the TikZ manual and how to run those""" start="00:27:44.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""examples in a REPL and modify""" start="00:27:46.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""them bit by bit... this is a a""" start="00:27:49.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""screenshot... but let me go back.""" start="00:27:53.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""At that point these things were just""" start="00:27:57.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""prototypes, the code was not very nice...""" start="00:28:00.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and in this year I wrote... I was able""" start="00:28:03.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to unify those two ways of generating PDFs,""" start="00:28:07.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the one for TikZ and the one for Pict2e,""" start="00:28:12.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and I unified them with many other""" start="00:28:16.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""things that generated diagrams.""" start="00:28:18.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""The basis of these things is""" start="00:28:20.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""something called Show2.lua... I'm not going""" start="00:28:24.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to show its details now, but its""" start="00:28:29.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""extension that generates TikZ code""" start="00:28:35.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is just this, so we can specify a""" start="00:28:39.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagram with just a block like this,""" start="00:28:43.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and then uh if we""" start="00:28:45.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""run :show00() it returns a string""" start="00:28:49.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that is just the body... the inner""" start="00:28:54.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""body of the .tex file, if we run this we""" start="00:28:56.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""see the whole .tex file, and if we run""" start="00:29:00.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this we save the .tex file and we""" start="00:29:03.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""compile the .tex file to generate a PDF...""" start="00:29:05.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and if we run this we show the PDF in""" start="00:29:08.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the lower right window.""" start="00:29:10.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""And that's the same thing for all""" start="00:29:14.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""my recent programs that generate""" start="00:29:17.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""PDFs - they are all""" start="00:29:20.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""integrated... here is the one that...""" start="00:29:22.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the basis for all my modules that generate""" start="00:29:26.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagrams with Pict2e...""" start="00:29:29.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""its demos are not very interesting,""" start="00:29:30.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so let me show some demos of""" start="00:29:34.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""extensions that do interesting things...""" start="00:29:36.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so, this is a diagram that I created""" start="00:29:39.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""by editing it in a REPL...""" start="00:29:45.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I create several Pict objects here...""" start="00:29:47.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and if I execute this it""" start="00:29:51.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""compiles an object, generates a PDF, and""" start="00:29:54.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""if I tap this... here is the PDF.""" start="00:29:59.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""And if I just ask Lua to""" start="00:30:04.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""display what is &quot;pux&quot;, here,""" start="00:30:07.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it shows the source code in Pict2e""" start="00:30:10.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of the diagram... and the""" start="00:30:15.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""nice thing is that it is indented, so""" start="00:30:18.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it's easy to debug the Pict2e code.""" start="00:30:20.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""If anyone is interested the""" start="00:30:23.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""module that does the tricks for""" start="00:30:25.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""indentation is very easy to understand...""" start="00:30:28.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it has lots of tests and test blocks,""" start="00:30:31.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and I think that its data""" start="00:30:35.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""structures are easy to understand.""" start="00:30:38.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Anyway... here is another""" start="00:30:42.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""example. The :show() is""" start="00:30:44.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here... it generates a 3D diagram.""" start="00:30:51.360" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""Parsers""" start="00:30:56.440" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""Now let me talk about parsers and""" start="00:30:56.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""REPLs in VERY strange places... I mean,""" start="00:31:06.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""using REPLs to build parsers step by step""" start="00:31:09.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and&quot; replacing parts by more complex""" start="00:31:13.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""parts. So, I said that Lua is very""" start="00:31:17.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""minimalistic, and everybody knows that""" start="00:31:23.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""implementations of regular expressions""" start="00:31:28.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""are big and complex..""" start="00:31:30.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so, instead of coming with""" start="00:31:32.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""full regular expressions Lua comes with""" start="00:31:34.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""something called &quot;patterns&quot; and a""" start="00:31:37.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""library function called &quot;string.match&quot;.""" start="00:31:39.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Here is""" start="00:31:43.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a copy of the part of the manual that""" start="00:31:44.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""explains the syntax... a part of the""" start="00:31:50.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""syntax of of patterns... here's how""" start="00:31:53.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""string.match is described in the""" start="00:31:57.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""manual - it's just this... &quot;looks for""" start="00:31:59.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the first match of pattern in the string""" start="00:32:03.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""as blah blah blah&quot;... and then we have to""" start="00:32:05.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""go to the other section of the menual""" start="00:32:08.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that explains patterns.""" start="00:32:10.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Lua patterns are so simple,""" start="00:32:11.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so limited, that they don't even""" start="00:32:20.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""have the the alternation operator...""" start="00:32:23.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here is how it is described in the""" start="00:32:26.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""elisp manual -""" start="00:32:29.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""backslash-pipe specifies""" start="00:32:31.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""an alternative, blah blah blah.""" start="00:32:36.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""When we want to to build more""" start="00:32:40.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""complex... regular expressions,""" start="00:32:42.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""patterns, grammars, etc... we have to use""" start="00:32:45.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""an external library for that... no,""" start="00:32:49.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""sorry, a library that is external""" start="00:32:52.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""but that was written by one of the""" start="00:32:56.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""authors of Lua itself. This library""" start="00:32:58.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is called Lpeg, and its manual says...""" start="00:33:00.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;Lpeg is a new pattern matching library for""" start="00:33:05.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Lua based on Parsing Expression Grammars""" start="00:33:09.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""(PEGs)&quot;. The manual is very terse, I""" start="00:33:12.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""found it incredibly hard to read... it""" start="00:33:18.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""doesn't have any diagrams - it has some""" start="00:33:21.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""examples, though... and the Lua Wiki""" start="00:33:25.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""has a big page called Lpeg Tutorial""" start="00:33:29.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""with lots of examples...""" start="00:33:33.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""but it it also doesn't have""" start="00:33:35.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagrams and I found some things""" start="00:33:38.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""incredibly hard to understand.""" start="00:33:41.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""For example, this is something that is in""" start="00:33:42.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the the manual of Lpeg that I saw and I""" start="00:33:45.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""thought: &quot;Wow, great! This makes all sense""" start="00:33:48.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and is going to be very useful!&quot;...""" start="00:33:51.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it's a way to to build""" start="00:33:53.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""grammars that can be recursive,""" start="00:33:54.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and they sort of can encode BNF""" start="00:33:57.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""grammars... we just have to translate the""" start="00:34:01.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""BNF a bit to get rid of some""" start="00:34:03.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""recursions and to translate them to""" start="00:34:06.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""something else.""" start="00:34:08.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""And the manual also has some things""" start="00:34:09.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that I thought: &quot;Oh, no! I don't have any""" start="00:34:11.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""idea of what this thing does&quot;... and in fact""" start="00:34:15.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I saw these things for the first""" start="00:34:18.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""time more than 10 years ago and they""" start="00:34:20.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""only started to make sense one year ago.""" start="00:34:22.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""One example is group captures.""" start="00:34:26.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Lpeg also comes with a""" start="00:34:30.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""module called the Re module... let me""" start="00:34:36.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""pronounce as it in Portuguese - the Re""" start="00:34:38.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""module... its manual says: &quot;The Re""" start="00:34:41.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""module (provided by the file re.lua in the""" start="00:34:45.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""distribution) supports a somewhat conventional""" start="00:34:48.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""regular expression syntax for pattern usage""" start="00:34:51.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""within lpeg&quot;... and""" start="00:34:56.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this is a quick reference... this""" start="00:34:58.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""thing is very brief, it has some nice""" start="00:35:03.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""examples but it's hard to understand anyway...""" start="00:35:06.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and here are some comments about""" start="00:35:08.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""my attempts to learn Re.lua. This is""" start="00:35:13.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a class... in this case it's a very small""" start="00:35:17.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""class... this file implements a :pm()""" start="00:35:20.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""method - I'm going to show examples of""" start="00:35:24.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""other :pm() methods very soon - so, this is""" start="00:35:28.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a :pm() method for Re.lua that lets us""" start="00:35:32.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""compare the syntax of Lua patterns, Lpeg,""" start="00:35:35.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and Re... let's see this example here... so,""" start="00:35:38.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""if we run this it loads my version of""" start="00:35:44.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lpeg... no, sorry, my version of lpegrex...""" start="00:35:47.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and it shows that when we apply""" start="00:35:52.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the :pm() method to this Lua pattern, this""" start="00:35:57.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lpeg pattern, and this Re pattern""" start="00:36:01.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""they all give the same results. So we can""" start="00:36:04.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""use this thing... this kind of thing here""" start="00:36:08.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to show how to translate from Lua""" start="00:36:10.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""patterns, that are familiar because""" start="00:36:14.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""they're similar to regular expressions,""" start="00:36:16.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""only weaker...""" start="00:36:18.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to lpeg, that is super weird""" start="00:36:20.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and to Re, that is not so weird.""" start="00:36:24.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Anyway, the comment says that in 2012""" start="00:36:27.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I had a project that needed a""" start="00:36:35.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""precedence passer that could parse""" start="00:36:37.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""arithmetical expressions with the right""" start="00:36:40.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""precedences... and at that point I was""" start="00:36:43.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""still struggling with pure lpeg, and I""" start="00:36:46.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""couldn't do much with it, so I tried to""" start="00:36:49.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""learn Re.lua instead, and I wrote this old""" start="00:36:52.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""class here...""" start="00:36:55.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that allowed me to use a preprocessor""" start="00:36:56.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""on patterns for Lua. And the thing is that""" start="00:37:01.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""with this preprocessor I could""" start="00:37:03.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""specify precedence grammars using this""" start="00:37:04.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""thing here, that worked, but was super""" start="00:37:07.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""clumsy... and I gave up after a few attempts.""" start="00:37:11.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and in 2022 I heard about something""" start="00:37:16.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""called lpegrex,""" start="00:37:21.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that was a... a kind of extension or Re,""" start="00:37:23.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and it was much more powerful than re.lua,""" start="00:37:29.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""but after a while I realized that it""" start="00:37:32.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""had the same defects as re.lua...""" start="00:37:34.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and let me explain that, because""" start="00:37:37.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it has all to do with the things about""" start="00:37:40.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""black boxes and magic that I told in the""" start="00:37:44.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""beginning. Both... I mean, sorry, neither""" start="00:37:48.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""re.lua or lpegrex had some features that""" start="00:37:52.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I needed... they didn't let us explore...""" start="00:37:57.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""sorry, they received a pattern that was""" start="00:38:00.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""specified as a string, and it converted""" start="00:38:03.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that into an lpeg pattern, but it didn't""" start="00:38:06.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""let us explore the the lpeg patterns""" start="00:38:09.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that it generated...""" start="00:38:12.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""their code was written in a way""" start="00:38:15.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that was REPL-unfriendly - I""" start="00:38:18.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""couldn't modify parts of the code""" start="00:38:21.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""bit by bit in a REPL and try to change""" start="00:38:24.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the code without changing the""" start="00:38:28.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""original file... the code was very""" start="00:38:31.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""hard to explore, to hack, and to extend -""" start="00:38:34.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in my opinion... the documentation was not""" start="00:38:36.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""very clear... and I sent one or two messages""" start="00:38:39.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to the the developer of lpegrex and...""" start="00:38:43.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""he was too busy to help me. He""" start="00:38:47.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""answered it very briefly, and, uh, to be""" start="00:38:50.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""honest I felt... rejected. I felt that I""" start="00:38:53.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""wasn't doing anything interesting...""" start="00:38:56.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""whatever, whatever...""" start="00:38:58.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""So, in 2022 I was trying to learn lpegrex""" start="00:39:03.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""because I was thinking that it would""" start="00:39:09.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""solve my problems - but it didn't...""" start="00:39:11.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it didn't have the features that I needed,""" start="00:39:13.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it was hard to extend, hard to explore,""" start="00:39:16.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and hard to debug, and I""" start="00:39:20.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""decided to rewrite it in a more""" start="00:39:23.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""hacker-friendly way - in the sense that...""" start="00:39:25.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""was modular, and I could replace any""" start="00:39:30.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""part of the module from a REPL...""" start="00:39:33.760" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""ELpeg1.lua""" start="00:39:35.400" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""My version of it was called ELpeg1.lua...""" start="00:39:35.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and I decided that in my version I""" start="00:39:43.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""wouldn't have the part that""" start="00:39:47.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""receives a grammar specified as a string""" start="00:39:49.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and converts that to lpeg... I would""" start="00:39:54.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""just have the backend part, that are the""" start="00:39:57.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""functions in lpeg that let us specify""" start="00:40:00.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""powerful grammars.""" start="00:40:04.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Let me go back. Let me explain a""" start="00:40:05.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""bit about lpeg... Lua has""" start="00:40:11.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""coercions: the + expects to receive""" start="00:40:15.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""true numbers, and if one of its arguments,""" start="00:40:21.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""or both of them, are strings, it converts""" start="00:40:24.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the string... the strings to numbers so in""" start="00:40:27.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this case here, 2+&quot;3&quot;,""" start="00:40:29.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it returns the number 5,""" start="00:40:33.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and this is the concatenation""" start="00:40:36.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""operator... it expects to receive""" start="00:40:39.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""strings, so in this case it will""" start="00:40:42.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""convert the number 2 to the string &quot;2&quot;,""" start="00:40:45.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and the concatenation of thes two""" start="00:40:47.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""things will be 23... oops, sorry, &quot;23&quot;""" start="00:40:50.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""as a string.""" start="00:40:54.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Lpeg also has some coercions.""" start="00:40:56.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I usually set these""" start="00:40:58.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""globals to let me write my grammars""" start="00:41:01.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in a very compact way, so instead""" start="00:41:05.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of lpeg.B, lpeg.C, etc I use these globals,""" start="00:41:09.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""like uppercase B, uppercase C, and so on...""" start="00:41:14.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and with these globals I can write""" start="00:41:18.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""things like this: C(1)*&quot;_&quot;...""" start="00:41:21.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and lpeg knows that lpeg.C...""" start="00:41:26.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it sort of expands this to lpeg.C,""" start="00:41:33.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""but lpeg.C expects to receive""" start="00:41:38.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""an lpeg pattern, and 1 is not yet an""" start="00:41:42.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lpeg pattern, so it is coerced into an""" start="00:41:44.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lpeg pattern by calling lpeg.P,""" start="00:41:47.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so this short thing here becomes""" start="00:41:51.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""equivalent to lpeg.C(lpeg.P(1)), and the""" start="00:41:55.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""multiplication, when at least one of its""" start="00:42:03.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""arguments is an lpeg pattern... it expects""" start="00:42:07.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to receive two lpeg patterns, and in""" start="00:42:10.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this case the one at the right is""" start="00:42:13.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""just a string, so it is coerced to an lpeg""" start="00:42:15.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""pattern by using lpeg.P.""" start="00:42:18.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""With this idea we can sort of""" start="00:42:20.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""understand the comparison here. I mean,""" start="00:42:25.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""let me run it again... this first part is""" start="00:42:28.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""very similar to a regular expression""" start="00:42:31.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here at the left...""" start="00:42:34.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and when we apply this... Lua pattern""" start="00:42:35.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to this subject here the result""" start="00:42:39.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is this thing here, this thing, this""" start="00:42:43.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""thing and this thing... I'm going to""" start="00:42:47.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""call each one of these results""" start="00:42:54.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;captures&quot;, so each of these things""" start="00:42:56.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""between parentheses &quot;captures&quot; a substring""" start="00:42:59.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of the original string and these""" start="00:43:03.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""captured substrings are returned in a""" start="00:43:06.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""certain order. Here is how to express the""" start="00:43:08.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""same thing in lpeg...""" start="00:43:11.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it's very cryptic but it's a""" start="00:43:12.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""good way to understand the some basic""" start="00:43:15.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""operators of lpeg, I mean we can look at""" start="00:43:20.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the manual and understand and""" start="00:43:23.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""what C, S and R do, and also""" start="00:43:26.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""exponentiation... and this strange thing""" start="00:43:30.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here receives this string here, runs""" start="00:43:37.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a function that I have defined, that""" start="00:43:41.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""converts it to an object of a certain""" start="00:43:43.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""class, and that class""" start="00:43:46.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""represents Re patterns, so this thing""" start="00:43:47.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is treated as a pattern for re.lua,""" start="00:43:52.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and it is matched against the string,""" start="00:43:54.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and it returns the same thing as the""" start="00:43:56.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""other one.""" start="00:43:59.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Also, this thing here also has a""" start="00:44:02.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""comparison with lpegrex, but these""" start="00:44:05.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""patterns are very trivial, they""" start="00:44:08.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""don't do anything very strange...""" start="00:44:11.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so let's go back and see what""" start="00:44:13.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""kinds of very strange things there are.""" start="00:44:15.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Here is the page of lpegrex at github,""" start="00:44:18.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here's the documentation...""" start="00:44:26.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it's relatively brief,""" start="00:44:29.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it explains lpegrex as being an""" start="00:44:32.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""extension of Re.lua, so it explains""" start="00:44:35.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""mainly the additional features... here is a""" start="00:44:39.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""quick reference that explains only the""" start="00:44:42.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""additional features...""" start="00:44:45.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""some of the these things""" start="00:44:46.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I was able to understand""" start="00:44:49.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""by struggling a lot, and some I wasn't""" start="00:44:50.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""able to even by spending several evenings""" start="00:44:57.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""try to to build examples...""" start="00:45:02.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and this is something very nice. Lpegrex""" start="00:45:04.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""comes with some example parsers... and""" start="00:45:12.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here is a parser that parses the Lua""" start="00:45:15.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""grammar - I mean, this is the the grammar""" start="00:45:18.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""for Lua 5.4 at the end of the""" start="00:45:22.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""reference manual... it's just this... this""" start="00:45:25.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is in a kind of BNF, and this is the BNF""" start="00:45:31.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""translated""" start="00:45:34.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to the language of lpegrex, so this""" start="00:45:35.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""thing uses many constructions that are""" start="00:45:39.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in re.lua and some extra constructions that""" start="00:45:43.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""are described here... and with these""" start="00:45:48.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""examples I was able to to understand""" start="00:45:50.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""some of the...""" start="00:45:54.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of these things here that are""" start="00:45:55.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""described here in the quick""" start="00:45:58.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""reference - but not all.""" start="00:46:00.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""So, I wasn't able to use lpegrex""" start="00:46:04.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""by itself, because some things didn't""" start="00:46:11.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""make much sense, and I decided to""" start="00:46:14.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""reimplement it in my own style,""" start="00:46:16.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""because that would be a way to map...""" start="00:46:18.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to at the very least map what I had""" start="00:46:23.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""understood and what I didn't, learn""" start="00:46:26.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""one feature at a time, do comparisons, and""" start="00:46:29.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so on.""" start="00:46:33.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Here I pointed to two features of lpeg...""" start="00:46:35.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in one I said &quot;Oh, great! This thing can""" start="00:46:38.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""be used to to define grammars, even""" start="00:46:41.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""recursive grammars&quot;, and so on...""" start="00:46:44.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and this is an &quot;Oh, no!&quot; feature - one""" start="00:46:45.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""thing that didn't make any sense at all...""" start="00:46:49.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""group captures. One thing that I did to""" start="00:46:51.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""understand group captures was to""" start="00:46:56.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""represent them as diagrams. Of course in""" start="00:46:59.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the beginning I was drawing these""" start="00:47:02.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagrams by hand, but then I realized""" start="00:47:05.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that I could use the bits of lpeg""" start="00:47:08.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that I already knew to build a grammar""" start="00:47:11.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that would parse a little language and""" start="00:47:14.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""generate these diagrams in LaTeX, and I was""" start="00:47:17.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""able to make this.""" start="00:47:21.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""In this diagram here""" start="00:47:21.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this thing above the arrow is Lua code...""" start="00:47:25.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""a piece of Lua code that""" start="00:47:30.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""specifies an lpeg pattern... this""" start="00:47:33.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""thing here at the top is the string that""" start="00:47:37.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""is being matched, and the things below""" start="00:47:39.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the underbraces are the captures that""" start="00:47:43.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""each thing... sorry, that each thing""" start="00:47:46.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""captures.""" start="00:47:50.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""For example, this underbrace here""" start="00:47:51.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""corresponds to this pattern here,""" start="00:47:58.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that parses a single character but""" start="00:48:00.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""doesn't return any captures, this thing""" start="00:48:02.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here parses a single &quot;b&quot; and doesn't""" start="00:48:05.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""return any captures, this thing here""" start="00:48:08.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""parses a single character and captures""" start="00:48:11.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it, and this thing here parses the""" start="00:48:14.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""character &quot;d&quot; and captures it... and this""" start="00:48:16.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""other thing here transforms this""" start="00:48:21.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""pattern into another pattern...""" start="00:48:24.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""returns first a capture with all""" start="00:48:27.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the string that was parsed by this""" start="00:48:33.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""pattern here, and then all the captures""" start="00:48:35.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""returned by this thing here before""" start="00:48:37.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the &quot;:&quot;.""" start="00:48:41.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""So, this was a way to build""" start="00:48:42.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""concrete examples for things that the""" start="00:48:45.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lpag manual was explaining in a very terse""" start="00:48:48.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""way, and it worked for me - some things""" start="00:48:52.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that were very""" start="00:48:55.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""mysterious started to make sense, and I""" start="00:48:57.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""started to have intelligent questions""" start="00:48:59.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to ask in the mailing list.""" start="00:49:03.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""And with that I was able to""" start="00:49:06.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""understand what are group captures,""" start="00:49:10.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and group captures that receive a name...""" start="00:49:12.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Well, let me explain what this does.""" start="00:49:17.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""This thing here captures... sorry, parses""" start="00:49:22.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the empty string and returns this as a""" start="00:49:27.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""constant... so, this is something that""" start="00:49:29.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""doesn't exist in regular expressions...""" start="00:49:32.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""it parses nothing and""" start="00:49:35.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""returns this as a capture... then this""" start="00:49:38.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""thing here returns these two""" start="00:49:41.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""constants here, and parses the empty""" start="00:49:44.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""string, and this thing here converts""" start="00:49:47.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the results of this thing here into a""" start="00:49:51.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""group capture, and stores it in the label""" start="00:49:54.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;d&quot;... and then here's another constant""" start="00:49:57.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""capture.""" start="00:50:03.280" video="mainVideo-repl" id="subtitle"]]
+
+[[!template new="1" text="""Building lists""" start="00:50:03.720" video="mainVideo-repl" id="subtitle"]]
+
+[[!template text="""And I realized that these things""" start="00:50:03.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here were similar to how Lua""" start="00:50:05.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""specifies building lists...""" start="00:50:08.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""when we build... sorry, tables. When""" start="00:50:09.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""we build a table, and we say that the""" start="00:50:16.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""first element of the table is here, this""" start="00:50:18.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""element is put at the end of the table...""" start="00:50:21.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""when after the that would say d=42...""" start="00:50:23.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""we are putting the 42""" start="00:50:29.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in the the slot whose key is &quot;d&quot;.""" start="00:50:31.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""This was happening with lpeg captures,""" start="00:50:34.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""but there was something very strange...""" start="00:50:39.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""these group captures could hold""" start="00:50:43.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""more than one capture - more than one""" start="00:50:46.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""value... so there was something between""" start="00:50:49.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lists and tables. I started to use this""" start="00:50:51.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""notation to...""" start="00:50:58.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""explain in my notation what they""" start="00:51:00.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""were doing... many things started""" start="00:51:04.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to make sense, many mysterious""" start="00:51:08.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""sentences in the manual started to""" start="00:51:10.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""make sense... but some didn't...""" start="00:51:12.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""but at least I was able to send""" start="00:51:14.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""some intelligent questions to the""" start="00:51:19.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""mailing lis,t and the author of Lua and""" start="00:51:22.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lpeg answered some of them...""" start="00:51:25.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""he was not very happy about my""" start="00:51:27.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""questions - he... told me that those""" start="00:51:31.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""diagrams were a waste of time, the""" start="00:51:34.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""manual was perfectly clear, and so on...""" start="00:51:37.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""whatever - but I was able to...""" start="00:51:40.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so, it was weird, but I was able to""" start="00:51:44.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""understand lots of things from his""" start="00:51:48.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""answers. This is a copy of one of""" start="00:51:51.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""my messages, then there's another one,""" start="00:51:56.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""another one, some of them had diagrams...""" start="00:51:58.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""then he complained about these diagrams,""" start="00:52:01.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""he said that these things here, that look""" start="00:52:04.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""like table constructors, &quot;do not exist&quot;...""" start="00:52:08.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""whatever... anyway, once I understood""" start="00:52:11.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""group captures many features""" start="00:52:17.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""were very easy to understand""" start="00:52:20.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and I started to be able to use lpeg to""" start="00:52:23.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""to build some very interesting things...""" start="00:52:26.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I was able to reproduce some""" start="00:52:28.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of the features that I saw in lpegrex -""" start="00:52:33.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""remember that this... where is that?""" start="00:52:36.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this is the syntax of Lua... here -""" start="00:52:41.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I was able to understand""" start="00:52:46.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""how these things here were translated to""" start="00:52:48.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lpeg code... to lpeg patterns""" start="00:52:52.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""by using group captures in a certain""" start="00:52:55.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""way... I was able to implement them""" start="00:52:58.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in ELpeg1.lua...""" start="00:53:03.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and after some time I was able to use""" start="00:53:04.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""ELpeg1.lua to build grammars that""" start="00:53:08.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""were able to parse""" start="00:53:12.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""arithmetical expressions with the""" start="00:53:14.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""right precedence... and here's an example""" start="00:53:18.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in which I built the grammar step by step...""" start="00:53:20.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and I test the current grammar, and I""" start="00:53:23.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""replace a bit, and then I test the new""" start="00:53:29.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""grammar and so on...""" start="00:53:35.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and you can see that the result is""" start="00:53:36.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""always a tree that is drawn in a""" start="00:53:39.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""nice two dimensional way...""" start="00:53:43.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""At this point these powers here""" start="00:53:44.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""are returned as a list,""" start="00:53:48.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""as an operation &quot;pow&quot;""" start="00:53:50.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""with several arguments, here... and then""" start="00:53:53.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I apply a kind of parsing combinator,""" start="00:53:57.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here... that transforms these trees into""" start="00:54:00.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""other trees and with these combinators""" start="00:54:03.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here I can specify that the &quot;^&quot; is""" start="00:54:08.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""associative in a certain direction...""" start="00:54:12.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that the &quot;/&quot; is associative in""" start="00:54:14.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""another direction... the &quot;-&quot; uses""" start="00:54:17.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the same direction as a the &quot;/&quot;,""" start="00:54:20.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and so on... and they have the""" start="00:54:23.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""right precedences.""" start="00:54:26.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""So, here are the tests...""" start="00:54:29.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here is my file ELpeg1.lua... it has""" start="00:54:34.560" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""several classes, each class has tests""" start="00:54:38.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""after it...""" start="00:54:41.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I was able to implement something""" start="00:54:42.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that lpegrex has, that is called""" start="00:54:46.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""&quot;keywords&quot;, that is very useful for parsing""" start="00:54:50.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""programs in programming languages...""" start="00:54:53.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I was able to implement something""" start="00:54:56.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""similar to the debugger... to the""" start="00:54:59.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""lpeg debugger lpeg uses... I was""" start="00:55:02.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""frustrated by some limitations of""" start="00:55:08.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the lpeg debugger, and I implemented""" start="00:55:11.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""my own that is, uh... much better!...""" start="00:55:16.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Let me show something else... I was""" start="00:55:23.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""able to translate a good part of the""" start="00:55:24.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Lua parser, here, to ELpeg1.lua... I haven't""" start="00:55:27.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""finished yet, but I have most of the""" start="00:55:33.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the translation here...""" start="00:55:38.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and after having all that I was able to""" start="00:55:39.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""build other grammars very quickly...""" start="00:55:47.280" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""writing new parsers finally became fun.""" start="00:55:50.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""And here's one example that I showed in the""" start="00:55:55.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""beginning.""" start="00:55:58.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""If I remember correctly...""" start="00:56:00.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I took a figure from the Wikipedia...""" start="00:56:05.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I don't have its link now...""" start="00:56:10.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""but I specified a grammar that parses""" start="00:56:12.440" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""exactly the example that appears""" start="00:56:17.080" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""in the Wikipedia...""" start="00:56:20.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""so, with my grammar, considering that""" start="00:56:20.840" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the top level entry is &quot;Stmt&quot;, when I""" start="00:56:24.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""parse this string here""" start="00:56:28.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the result is this tree...""" start="00:56:30.680" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and I can do some operations on that,""" start="00:56:36.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I can define how this thing is to be""" start="00:56:41.120" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""converted into LaTeX,""" start="00:56:44.040" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I can define other operations""" start="00:56:45.640" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that convert trees into other trees, and""" start="00:56:49.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""here are some tests of these operations...""" start="00:56:53.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""This is what I showed in the beginning...""" start="00:56:54.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I'm not going to explain all the details""" start="00:57:00.360" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""of this thing now...""" start="00:57:02.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this :show() converts this thing""" start="00:57:04.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""into LaTeX in the way specified by these""" start="00:57:09.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""instructions here, that says that...""" start="00:57:11.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""well, whatever...""" start="00:57:16.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and here's the result - the LaTeXed result...""" start="00:57:25.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and these diagrams here are generated by""" start="00:57:32.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this file here, that defines a simple""" start="00:57:41.760" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""grammar that parses this thing here,""" start="00:57:46.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and then LaTeXes it in a certain way, and""" start="00:57:48.480" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""and also tests to check if this code here...""" start="00:57:52.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""this Lua code that generates an lpeg grammar...""" start="00:57:56.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""parses this subject here and""" start="00:58:02.000" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""returns the expected result...""" start="00:58:05.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""So: this is the code that I""" start="00:58:08.600" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""wanted to show. I wanted to show many""" start="00:58:12.240" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""more things but I wasn't able to prepare""" start="00:58:16.720" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""them before the conference... and I hope""" start="00:58:19.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""that soon - for some value of &quot;soon&quot; -""" start="00:58:23.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I'll be able to create REPL-based""" start="00:58:27.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""tutorials for lpeg, Re, and ELpeg1.lua...""" start="00:58:30.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""where lpeg is something very famous,""" start="00:58:33.920" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Re is a module of lpeg...""" start="00:58:36.320" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""I could also do something like this""" start="00:58:39.200" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""for lpegrex... and ELpeg1.lua is""" start="00:58:42.400" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""the thing that I wrote, the one that""" start="00:58:47.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""has test in comments, and the tests""" start="00:58:51.160" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""usually generate trees, and sometimes""" start="00:58:56.800" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""they generate TeX code.""" start="00:58:59.520" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""Yeah, so that's it! I wanted to""" start="00:59:00.880" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""present much more but I wasn't able to""" start="00:59:04.960" video="mainVideo-repl" id="subtitle"]]
+[[!template text="""prepare it... so: sorry, thanks, bye! =)""" start="00:59:07.160" video="mainVideo-repl" id="subtitle"]]
+
+Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20repl%3A%20REPLs%20in%20strange%20places%3A%20Lua%2C%20LaTeX%2C%20LPeg%2C%20LPegRex%2C%20TikZ)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/repl-before.md b/2023/info/repl-before.md
new file mode 100644
index 00000000..0266527b
--- /dev/null
+++ b/2023/info/repl-before.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 60-min talk; Q&A: IRC
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="repl-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="repl-mainVideo" data="""
+00:00.000 Intro
+00:21.560 Diagrams
+01:03.320 eev
+02:51.360 Another figure
+08:52.560 eev-wconfig, magic, and black boxes
+10:44.240 Lua
+16:10.960 Object orientation in Lua
+19:19.823 My init file
+20:31.000 LaTeX and LuaLaTeX
+25:28.280 Manim
+26:30.880 Generating diagrams from REPLs
+31:03.240 Parsers
+39:03.200 ELpeg1.lua
+50:04.160 Building lists
+
+"""]]<div></div>Duration: 59:10 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm">Download --main.webm (187MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/oAjqkLNfo9B63EE1G6cJJV">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/repl-nav.md b/2023/info/repl-nav.md
new file mode 100644
index 00000000..7ef1a2a2
--- /dev/null
+++ b/2023/info/repl-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/eval">Editor Integrated REPL Driven Development for all languages</a>
+Next by track: <a href="/2023/talks/doc">Literate Documentation with Emacs and Org Mode</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/sat-close-after.md b/2023/info/sat-close-after.md
new file mode 100644
index 00000000..a40a2ed3
--- /dev/null
+++ b/2023/info/sat-close-after.md
@@ -0,0 +1,178 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="sat-close-mainVideo-transcript"></a>
+# Transcript (unedited)
+
+[[!template text="""[Speaker 0]: Session is being recorded.""" start="00:00:05.200" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Just waiting for Corwin and Leo.""" start="00:00:06.819" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Great. Corwin, would you like to share your""" start="00:00:16.359" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""screen?""" start="00:00:17.960" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Let's see the audio through BBB so we don't""" start="00:00:37.620" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""have to splice it in afterwards because it's""" start="00:00:39.840" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""annoying to splice things.""" start="00:00:41.720" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""I mean, Leo will be taking care of it,""" start="00:00:43.680" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""not me, so. Okay, he's going to finish up.""" start="00:00:47.020" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: So, in the meantime, it's been a long day,""" start="00:00:52.720" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""people. Thanks for sticking around.""" start="00:00:55.320" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""And we're going to do a little bit of jazz""" start="00:00:57.180" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""handing until Corwin comes back.""" start="00:00:58.739" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Smack. I""" start="00:01:00.060" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 2]: can't imagine an Emacs con without getting to""" start="00:01:14.240" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""enjoy Leo's famous jazz hands.""" start="00:01:16.020" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: I can tell you it's a lot easier...""" start="00:01:21.420" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Hello? I can tell you it's a lot easier to do""" start="00:01:23.160" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""jazz hands at 9am EST than it is at 5pm EST,""" start="00:01:25.760" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""because for me it's 11 and I've barely seen""" start="00:01:30.860" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""this 1 today. Okay Corwin,""" start="00:01:34.160" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""do you have a presentation right now?""" start="00:01:39.720" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""We do not seem to be able to hear you,""" start="00:01:45.480" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Corwin. Okay, just bear with us,""" start="00:01:47.440" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""folks. We're gonna figure out this 1.""" start="00:01:55.240" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""This is the last bug of the day,""" start="00:01:57.380" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""and then we're clear until tomorrow.""" start="00:01:58.660" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 2]: I just heard you, but I don't know if it was""" start="00:02:05.820" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""here or via mumble. Okay.""" start="00:02:07.700" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: Can we figure out? Whenever there's a problem""" start="00:02:14.540" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""like this, like Sash and myself are furiously""" start="00:02:17.360" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""typing in the background,""" start="00:02:19.460" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""we say, oh, can we fix this slide?""" start="00:02:20.640" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""But here, I'm stumped.""" start="00:02:22.740" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 2]: I think Corbin is in the GenTrack on Mumble.""" start="00:02:33.180" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay, so let's all switch to GenTrack and""" start="00:02:40.520" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""we'll be able to figure out the way.""" start="00:02:43.780" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, well, while Corwin figures out how to""" start="00:03:18.420" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""get started, we might as well maybe do a""" start="00:03:21.540" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""little bit of closing remarks,""" start="00:03:23.940" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""and then you can jump in whenever you want.""" start="00:03:25.380" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sounds good to me.""" start="00:03:29.440" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay. Thank you, everyone,""" start="00:03:31.980" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""for coming to Emacs Conf 2023.""" start="00:03:34.459" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""We made it to the end of the first day!""" start="00:03:37.120" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Hooray! We're going to keep these closing""" start="00:03:39.140" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""remarks short because it's a long day.""" start="00:03:40.440" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""It's almost midnight and Leah will turn into""" start="00:03:42.880" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""a pumpkin very soon. So before that happens,""" start="00:03:44.920" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""we just want to say hello and thanks.""" start="00:03:48.580" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""And pre-recorded talks are already up.""" start="00:03:50.640" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""They're on the talk pages,""" start="00:03:55.260" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""they're on media.emaxcontent.org.""" start="00:03:56.520" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""We'll work on extracting the live talks,""" start="00:03:58.860" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""but it'll take a few weeks.""" start="00:04:00.620" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 3]: Maybe, you""" start="00:04:01.920" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 0]: know, we'll see how it goes.""" start="00:04:02.220" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Please feel free to spread the word,""" start="00:04:04.540" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""because you know some people didn't actually""" start="00:04:06.100" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""know there was EmacsConf this weekend,""" start="00:04:07.720" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""so let them know, because it's a lot of fun.""" start="00:04:09.380" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""More talks tomorrow. And if you've got ideas""" start="00:04:11.400" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""for making things better,""" start="00:04:15.020" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""or If you'd like to tell us what's working""" start="00:04:15.900" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""well and what you'd like,""" start="00:04:17.500" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""please put them in the conference pad at""" start="00:04:18.940" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""pad.emaxconf.org. Anything anyone want to""" start="00:04:21.180" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""add?""" start="00:04:26.580" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm all good.""" start="00:04:30.060" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 2]: Let's see if Corwin can get his mic to work.""" start="00:04:32.900" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""No, it's not.""" start="00:04:37.740" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, I mean, did you want to say something""" start="00:04:43.520" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""as well? Because people have heard you talk""" start="00:04:45.140" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""all day long on the Dev track,""" start="00:04:47.220" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""but not on the general track,""" start="00:04:49.120" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""actually. It's the first time they hear you""" start="00:04:50.240" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""today.""" start="00:04:51.540" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 2]: Right. Oh, well, way to put me on the spot,""" start="00:04:52.540" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""but more seriously, thanks.""" start="00:04:56.540" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""So yeah, it's a lot of fun.""" start="00:04:58.040" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""You know, it's, we sort of keep coming back""" start="00:05:00.340" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""every year and doing this conference.""" start="00:05:03.760" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""It's always been fun. And we keep doing it""" start="00:05:06.300" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""thanks to, you know, all the people who""" start="00:05:08.720" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""submit all these amazing talks with these""" start="00:05:11.320" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""amazing sessions. And of course the audience""" start="00:05:14.600" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""as well. I don't have a lot to say I guess""" start="00:05:16.560" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""for today because I think we're hoping to""" start="00:05:19.940" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""keep it kind of short and sweet.""" start="00:05:21.500" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""So yeah, I think that's about it for me.""" start="00:05:24.400" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""I guess we'll maybe wait another minute or so""" start="00:05:25.920" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""to see if Cormen can make it.""" start="00:05:28.380" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""But yeah, that's all for me.""" start="00:05:30.580" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right, great. Speaking of putting people""" start="00:05:34.820" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""on the spot, you might see a face in the room""" start="00:05:37.920" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""that you might have seen last year,""" start="00:05:41.600" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""but we've got Flobby Koda in the room as""" start="00:05:43.840" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""well, who you might not have heard of him but""" start="00:05:45.700" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""he's been doing a lot of the check-ins today""" start="00:05:49.400" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""for most of the speakers and he's been doing""" start="00:05:51.140" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""a wonderful job at it.""" start="00:05:53.360" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Florian, do you want to say a word if only to""" start="00:05:54.520" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""say you're being put on the spot?""" start="00:05:56.560" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 4]: I have nothing prepared really but I just""" start="00:06:00.620" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""want to thank everybody who could,""" start="00:06:02.840" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""with who I could talk in between.""" start="00:06:05.380" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""So I had like wonderful 20 to 30 minute talks""" start="00:06:07.360" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""with every speaker before they get into the""" start="00:06:10.580" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""live Q&A or the live presentation.""" start="00:06:12.900" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Thanks a lot for everybody,""" start="00:06:15.780" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""I learned quite a lot and also thank you for""" start="00:06:16.920" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""all of you guys and everyone for having such""" start="00:06:19.640" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""a beautiful experience here.""" start="00:06:22.360" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, thank you. We're glad to have you.""" start="00:06:25.960" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Okay, Sasha, Unless you've got anything else""" start="00:06:29.180" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""to add, and Corwin, have you fixed your""" start="00:06:31.120" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""microphone? Yes, we can hear you Corwin.""" start="00:06:33.880" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Okay, well let's start again.""" start="00:06:38.400" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Let's forget everything you've heard for the""" start="00:06:39.160" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""last 20 minutes. We'll start again.""" start="00:06:40.440" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""I'm just kidding.""" start="00:06:41.640" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 3]: You tell me. No, I mean,""" start="00:06:35.280" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""I don't know what I could possibly add to all""" start="00:06:45.560" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""that. I think we absolutely should get some""" start="00:06:47.760" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""rest, save it for tomorrow.""" start="00:06:50.200" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""I was just looking through these notes in the""" start="00:06:52.540" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""couple of minutes that I had between my own""" start="00:06:55.240" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""talk. Thank you for your help with that.""" start="00:06:57.480" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""But also, especially you,""" start="00:07:00.720" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Sasha, and Leo, and everybody in the IRC over""" start="00:07:02.420" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""the months here, just encouraging me to keep""" start="00:07:08.040" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""going when it was just seemed futile.""" start="00:07:10.440" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Even though it just really turned into a""" start="00:07:13.580" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""brain dump, I appreciate getting the chance""" start="00:07:15.780" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""of feeling like that process is more""" start="00:07:18.120" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""documented now than it was before I did it.""" start="00:07:20.320" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Hey, that's not nothing,""" start="00:07:22.540" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""right? And that's why we all do this.""" start="00:07:23.440" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""And I don't know, Floey really said it""" start="00:07:25.440" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""perfect. Like, I appreciate the chance to get""" start="00:07:28.360" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""to work on this with you.""" start="00:07:30.520" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""I learned so much.""" start="00:07:31.560" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: Amazing. Well, you know what?""" start="00:07:36.400" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Without further ado, I believe it's time for""" start="00:07:39.020" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""us to say goodbye for day 1.""" start="00:07:41.380" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""We will obviously be seeing you tomorrow at 9""" start="00:07:42.840" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""a.m. I think the schedule is actually stating""" start="00:07:45.340" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""we're starting at 8.59am.""" start="00:07:48.740" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Is it correct?""" start="00:07:50.500" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, I think the chrono tab will kick in.""" start="00:07:51.220" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""The video is like 6 minutes long.""" start="00:07:54.020" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Actually, maybe I should,""" start="00:07:57.620" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""I'll give it an extra minute for safety,""" start="00:07:58.660" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""I think. Yeah, yeah. I'll tweak the timing.""" start="00:08:00.660" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 1]: I think that'd be wise for people we do not""" start="00:08:04.340" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""know basically 8.59 is when I brush my teeth""" start="00:08:06.420" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""before going live so we might be in a very""" start="00:08:08.460" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""awkward spot for me to introduce the talk if""" start="00:08:10.680" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""it happens. Well anyway folks thank you very""" start="00:08:12.740" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""much for watching and we'll see you tomorrow.""" start="00:08:15.420" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""Bye-bye! All right, I have closed the bbb oh""" start="00:08:19.360" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""it's restarting apparently oh it's we're back""" start="00:08:31.320" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""on the q and a between stephan and let's""" start="00:08:34.780" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""close this hey we are off""" start="00:08:37.480" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""[Speaker 3]: we are clear I am pausing the recording I""" start="00:08:44.700" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""don't have permission to do that in this""" start="00:08:52.540" video="mainVideo-sat-close" id="subtitle"]]
+[[!template text="""room.""" start="00:08:54.280" video="mainVideo-sat-close" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sat-close%3A%20Saturday%20closing%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/sat-close-before.md b/2023/info/sat-close-before.md
new file mode 100644
index 00000000..d44b5b4b
--- /dev/null
+++ b/2023/info/sat-close-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 9-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="sat-close-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 09:00 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li><li><a href="https://www.youtube.com/playlist?list=PLomc4HLgvuCUdrW3JkugtKv8xPelUoOyP">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sat-close-nav.md b/2023/info/sat-close-nav.md
new file mode 100644
index 00000000..219f76fc
--- /dev/null
+++ b/2023/info/sat-close-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/sat-open">Saturday opening remarks</a>
+Next by track: <a href="/2023/talks/sun-open">Sunday opening remarks</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/sat-open-after.md b/2023/info/sat-open-after.md
new file mode 100644
index 00000000..aee69d2e
--- /dev/null
+++ b/2023/info/sat-open-after.md
@@ -0,0 +1,132 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="sat-open-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Welcome to EmacsConf 2023, where we get to find out""" start="00:00:00.000" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""just how much we can do with a text editor.""" start="00:00:04.559" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Just like last year, we have two tracks.""" start="00:00:07.698" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There's a General track and a Development track,""" start="00:00:10.317" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""but really, you'll probably find""" start="00:00:12.656" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""interesting things on both tracks""" start="00:00:14.235" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""no matter what your level of experience is,""" start="00:00:15.954" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so don't feel limited to one or the other.""" start="00:00:18.493" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""For Saturday, it's mostly Org Mode talks on the General track.""" start="00:00:21.152" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The doc talk on the development track""" start="00:00:24.711" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""is about literate documentation with Emacs and Org Mode,""" start="00:00:26.870" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and it's a general-audience talk""" start="00:00:30.129" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""even though it's in the Development track.""" start="00:00:31.688" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""I just ran out of space in the schedule.""" start="00:00:33.607" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The best parts of EmacsConf are the conversations.""" start="00:00:35.266" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:38.505" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and I'll give you a quick overview as well.""" start="00:00:41.264" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:44.043" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""using free and open source software.""" start="00:00:47.522" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Using a streaming media player like mpv""" start="00:00:50.401" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""seems to be the best way to watch in terms of performance""" start="00:00:52.820" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""but there are also web-based players""" start="00:00:56.219" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""just in case that's all you've got.""" start="00:00:57.818" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The schedule shows the General track on top""" start="00:01:00.297" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and the Development track on the bottom,""" start="00:01:02.296" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can see what else is going on.""" start="00:01:03.975" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""As you're watching the talks,""" start="00:01:06.594" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""you can refer to the schedule in another window.""" start="00:01:07.793" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Hover over the boxes to see the times and titles,""" start="00:01:10.692" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and click on the boxes in the schedule""" start="00:01:13.711" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""to jump to the talk's page for more details.""" start="00:01:15.610" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can also get the schedule as an iCalendar file""" start="00:01:18.389" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or as an Org file in different time zones.""" start="00:01:20.928" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Many talks will be followed by""" start="00:01:23.187" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""live Q&A web conferences with the speaker,""" start="00:01:24.686" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""which will be done in BigBlueButton or BBB.""" start="00:01:27.345" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""These are indicated with a solid border on the schedule""" start="00:01:30.424" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and by Q&A: BBB on the schedule page.""" start="00:01:33.423" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can join the web conference room""" start="00:01:36.582" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""by clicking on the BBB link""" start="00:01:38.281" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on the schedule page or the talk's webpage.""" start="00:01:39.900" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Then you can ask your questions yourself when the Q&A starts.""" start="00:01:42.839" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""To improve performance, please keep your webcam off""" start="00:01:45.758" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and stay muted until it's your turn to talk.""" start="00:01:48.217" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""This year we're experimenting with automatically switching""" start="00:01:50.956" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""between talks and Q&A sessions,""" start="00:01:53.575" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so the transitions on the stream might be a little sudden,""" start="00:01:55.934" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""but people in the BigBlueButton room""" start="00:01:59.133" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""can continue the conversation""" start="00:02:00.892" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""even after the talk moves off-stream.""" start="00:02:02.571" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Other talks will have Q&A via Etherpad or IRC,""" start="00:02:05.410" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""depending on what the speakers prefer.""" start="00:02:08.769" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""This is indicated in the schedule with a dashed border""" start="00:02:11.088" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and on the schedule page as well.""" start="00:02:14.107" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Please ask your questions in the recommended places""" start="00:02:16.826" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so that the speakers can easily see them.""" start="00:02:19.265" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Some talks will have the Q&A after the event,""" start="00:02:21.784" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can add your questions to their Etherpad.""" start="00:02:24.503" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We'll e-mail the speakers afterwards""" start="00:02:27.362" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and update the talk pages when they answer.""" start="00:02:29.461" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The schedule pages and track pages have quick shortcuts""" start="00:02:32.360" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so that you can find out more about talks, open the Etherpads,""" start="00:02:35.499" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and join the Q&A sessions. The watch page has more tips""" start="00:02:38.978" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on how to make the most of Q&A.""" start="00:02:42.537" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you can, please add notes and ask questions""" start="00:02:45.236" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""in the Etherpad for the talk. That makes it easier""" start="00:02:48.015" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for everyone to share their notes,""" start="00:02:51.174" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and speakers and hosts can read the questions from there.""" start="00:02:52.833" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:02:55.772" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We have one pad for each talk,""" start="00:02:59.791" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can follow the links to get to the next one""" start="00:03:01.850" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or go back to the schedule and get the link from there.""" start="00:03:03.969" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you have general feedback about""" start="00:03:07.128" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""the conference itself, please put it in""" start="00:03:08.767" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""pad.emacsconf.org/2023 , which is linked on each pad.""" start="00:03:10.926" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can also use this as a general community message board""" start="00:03:16.385" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for things like Help Wanted.""" start="00:03:19.044" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Internet Relay Chat or IRC can be another great way""" start="00:03:22.183" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""to be part of lots of conversations.""" start="00:03:25.320" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:03:27.961" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""through your web browser. The tabs on the left can help you""" start="00:03:31.680" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""switch between the different channels.""" start="00:03:34.519" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There's #emacsconf-gen for the General track""" start="00:03:37.078" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and #emacsconf-dev for the Development track.""" start="00:03:40.340" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:03:43.696" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:03:47.415" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:03:52.394" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Of course, you can join any of these channels""" start="00:03:55.673" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""with your favourite IRC client.""" start="00:03:57.792" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We're on the libera.chat network.""" start="00:04:00.071" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Once again, we're going to be streaming with open captions""" start="00:04:03.910" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:04:06.549" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""captioning volunteers. The captioned talks are indicated""" start="00:04:09.628" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on the schedule, and with any luck, we'll be posting""" start="00:04:12.987" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""transcripts on talk pages shortly after the talks start.""" start="00:04:15.706" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you need additional accommodations,""" start="00:04:19.205" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""please let us know in #emacsconf-org""" start="00:04:21.024" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and we'll see if we can make things happen.""" start="00:04:23.784" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If something goes down, we'll update status.emacsconf.org.""" start="00:04:25.683" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If it doesn't look like we've noticed yet,""" start="00:04:29.922" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:04:31.781" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""where we will be quietly panicking.""" start="00:04:35.220" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""In all of these conversations, please keep in mind""" start="00:04:37.379" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""our guidelines for conduct. You can find them on the wiki,""" start="00:04:40.078" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""They basically boil down to: please be nice.""" start="00:04:43.077" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If all goes well, the prerecorded talks and transcripts""" start="00:04:46.557" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""should be available from the talk pages""" start="00:04:48.996" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""shortly after they start playing,""" start="00:04:50.995" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and we'll post the recordings of live talks""" start="00:04:52.734" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and Q&A sessions within the next month or so.""" start="00:04:54.633" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you'd like to get an update, you can subscribe to""" start="00:04:57.752" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""the emacsconf-discuss mailing list.""" start="00:05:00.271" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""All right, let's get going.""" start="00:05:03.570" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Leo Vivier is hosting the general track,""" start="00:05:05.129" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and Amin Bandali hosting the development track.""" start="00:05:07.529" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The other volunteers and I will run around mostly backstage,""" start="00:05:10.648" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:05:13.367" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""That's also where we get to thank""" start="00:05:15.446" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""all the people and organizations""" start="00:05:17.085" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""who make EmacsConf even possible.""" start="00:05:18.724" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Thanks for coming to EmacsConf 2023.""" start="00:05:21.763" video="mainVideo-sat-open" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sat-open%3A%20Saturday%20opening%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/sat-open-before.md b/2023/info/sat-open-before.md
new file mode 100644
index 00000000..c812c4c6
--- /dev/null
+++ b/2023/info/sat-open-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 6-min talk; Q&A: Etherpad
+Status: All done
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="sat-open-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 05:25 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.webm">Download --main.webm (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/wEZX2JkDFpFqNFXnYeQTyb">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sat-open-nav.md b/2023/info/sat-open-nav.md
new file mode 100644
index 00000000..c1355bfc
--- /dev/null
+++ b/2023/info/sat-open-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/emacsconf">EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</a>
+Next by track: <a href="/2023/talks/sat-close">Saturday closing remarks</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/scheme-after.md b/2023/info/scheme-after.md
new file mode 100644
index 00000000..17b95b51
--- /dev/null
+++ b/2023/info/scheme-after.md
@@ -0,0 +1,544 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="scheme-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:02.120" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""Hello and welcome everyone on EmacsConf 2023.""" start="00:00:02.120" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I'm Andrew Tropin.""" start="00:00:07.400" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I work on operating systems and programming languages.""" start="00:00:08.720" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Today, we discuss Lisps, Schemes, REPLs,""" start="00:00:11.920" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""interactive development,""" start="00:00:16.640" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and how to make your own cozy development environment.""" start="00:00:18.140" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Interactive development""" start="00:00:23.280" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""Let's start from interactive development.""" start="00:00:23.280" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Lisps are famous for a nice""" start="00:00:26.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Interactive Development Experience.""" start="00:00:29.520" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""They have REPLs.""" start="00:00:32.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Emacs Lisp has its own Lisp machine,""" start="00:00:34.000" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and a lot of cool IDE with different functionality""" start="00:00:40.120" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""is already here and providing""" start="00:00:44.720" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""a nice and pleasant experience.""" start="00:00:47.880" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""The question is, is it enough?""" start="00:00:51.620" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""In most cases, yes, but for some languages,""" start="00:00:56.840" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""we have some white spaces, some missing pieces.""" start="00:00:59.921" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And for example, in Scheme world,""" start="00:01:04.840" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""we already have a few tools.""" start="00:01:08.300" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""We have REPL, we have integration for REPL in Emacs,""" start="00:01:10.880" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""but is it enough?""" start="00:01:14.600" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Let's see.""" start="00:01:16.680" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""REPL: Read Eval Print Loop""" start="00:01:18.180" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""We know that Emacs is very good for Lisps and REPL.""" start="00:01:18.180" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Lisp and Emacs should be a perfect setup.""" start="00:01:22.840" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""But let's see how REPL basically works.""" start="00:01:26.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It's an event loop which does three things.""" start="00:01:30.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It reads an expression, it evaluates the expression,""" start="00:01:34.800" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and it prints the result.""" start="00:01:37.280" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""We can take a simple expression, input it into REPL,""" start="00:01:40.740" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and evaluate it and see the result.""" start="00:01:47.280" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Very nice, very convenient.""" start="00:01:48.960" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You can experiment and see immediately what is happening.""" start="00:01:50.820" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You can even run a long-running process""" start="00:01:55.340" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""which does something.""" start="00:01:57.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You can interrupt it and everything will be okay.""" start="00:01:58.920" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""But the problem appears""" start="00:02:07.200" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""when you start to develop a bigger project.""" start="00:02:08.640" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And in most cases, you don't do""" start="00:02:11.660" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""your whole development in REPL.""" start="00:02:14.240" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You do only a small part of it.""" start="00:02:16.400" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""In most cases, you just write""" start="00:02:18.461" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the source code in text files,""" start="00:02:20.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and after that, you run those snippets of code""" start="00:02:22.920" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""from those text files, or run the whole project.""" start="00:02:26.400" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It's not very convenient to copy and paste""" start="00:02:30.721" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""every time the snippets of code to the REPL,""" start="00:02:33.720" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""see the result, modify the snippet of code,""" start="00:02:36.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""copy it again, and so on.""" start="00:02:38.880" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""So people invented some integration""" start="00:02:41.200" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""between REPL and your text editor.""" start="00:02:44.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""So you can evaluate expressions inside your text editor""" start="00:02:46.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and see the result here.""" start="00:02:51.600" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Long-lasting loops""" start="00:02:53.720" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""Works good so far, but what happens""" start="00:02:53.720" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""if we run a long-lasting loop,""" start="00:02:56.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""which does a lot of operations.""" start="00:03:02.300" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""As you can see here with a simple example,""" start="00:03:05.000" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the output of the function,""" start="00:03:07.840" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""stdout of the function is presented here,""" start="00:03:13.600" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and the resulting value is here.""" start="00:03:16.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""If you run a long-running process,""" start="00:03:18.800" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""you don't see anything happening.""" start="00:03:22.360" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And you see there's a watch instead of my cursor.""" start="00:03:24.640" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Maybe you don't see it, but nothing actually happens,""" start="00:03:29.260" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""at least from the point of view of the user.""" start="00:03:33.720" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""But if we interrupt the evaluation,""" start="00:03:36.380" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""we will see that some process in the background""" start="00:03:38.400" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""was launched, but we didn't see anything.""" start="00:03:41.440" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Because the REPL is a single-threaded blocking process,""" start="00:03:44.240" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""which reads stdin and prints stdout,""" start="00:03:51.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""make the integration""" start="00:03:54.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""between the REPL and your text editor""" start="00:03:55.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""is not an easy task.""" start="00:03:58.541" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And even if you do it,""" start="00:04:02.920" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""you have a lot of downsides, usually.""" start="00:04:04.321" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Not interruptible""" start="00:04:07.600" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""First of all, the process is not interruptible.""" start="00:04:07.600" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""If you have a remote process which listens on the socket""" start="00:04:13.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""to which you connect from your development environment,""" start="00:04:18.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you run some infinite loop, for example,""" start="00:04:21.940" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""you can't interrupt it.""" start="00:04:25.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Because interruption is done via signals,""" start="00:04:28.300" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and signals to remote processes are not usually""" start="00:04:31.240" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the thing in such integrations.""" start="00:04:35.040" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Output is not interactive""" start="00:04:38.760" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""Output is also not interactive.""" start="00:04:38.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Usually, for example, here you can see""" start="00:04:41.160" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""when I evaluate the expression,""" start="00:04:45.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the output is captured on the evaluation side,""" start="00:04:47.800" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and after that, after the whole evaluation""" start="00:04:51.120" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""of the whole expression finished,""" start="00:04:53.720" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I get the result, all the stdout at once.""" start="00:04:56.180" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And if I run the process which evaluates for 5 seconds,""" start="00:05:06.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I will see the first signs of the life""" start="00:05:09.920" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""only after 5 seconds of evaluation.""" start="00:05:13.781" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Okay, what else?""" start="00:05:17.040" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""No protocol""" start="00:05:23.160" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""When you do such integrations, you have no protocol,""" start="00:05:23.160" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""you have just stdin and stdout.""" start="00:05:26.120" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You print to stdin from your text editor.""" start="00:05:29.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You read from stdout of the process.""" start="00:05:32.920" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It's hard to tell if evaluation is finished,""" start="00:05:36.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""if it requires stdin, and how to extend the REPL""" start="00:05:40.340" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""to make it more featureful, and so on.""" start="00:05:47.320" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Not scalable""" start="00:05:51.480" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""And also, such integrations are usually not very scalable.""" start="00:05:51.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""For example, if you want to have a completion,""" start="00:05:57.360" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""you type something, you have the completion. Cool.""" start="00:06:14.700" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""But if you run the process and at the same time""" start="00:06:17.461" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""try to have a completion, you don't have it,""" start="00:06:22.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""because the evaluation is in progress,""" start="00:06:24.621" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you can't calculate the completion candidates""" start="00:06:29.800" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""at the same time. To make it more obvious,""" start="00:06:33.280" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I will start a completion here.""" start="00:06:35.520" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You see the completion pop-ups.""" start="00:06:41.020" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I start the evaluation process,""" start="00:06:43.280" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and when I try to complete something,""" start="00:06:46.160" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the evaluation freezes and there is no completion.""" start="00:06:49.860" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Not very convenient.""" start="00:06:53.120" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Usually, you have some long-running processes""" start="00:06:55.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you want them to continue while you have""" start="00:06:58.120" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""your go to definition, completion, and other things.""" start="00:07:01.400" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Overall, those issues make it quite inconvenient""" start="00:07:08.580" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""to integrate REPL in text editors or development environments,""" start="00:07:13.660" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""so you need something else""" start="00:07:18.420" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""to make the work comfortable.""" start="00:07:21.380" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""nREPL""" start="00:07:25.860" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""There is already a solution called nREPL.""" start="00:07:25.860" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It's a synchronous protocol which allows""" start="00:07:28.980" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""to send operations to the server""" start="00:07:31.120" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and receive responses in a synchronous manner.""" start="00:07:34.020" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And here is a simple example of a few operations.""" start="00:07:37.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""First one is cloning the existing session,""" start="00:07:42.160" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and as a response you will get a new session.""" start="00:07:45.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Also you send the evaluation request with code""" start="00:07:49.241" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""that you want to evaluate, and you get two responses.""" start="00:07:52.100" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""First one says that output is captured""" start="00:07:55.640" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and it's equal to &quot;hi\n&quot;,""" start="00:08:00.601" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and after that, you receive an &quot;Evaluation completed&quot;,""" start="00:08:02.840" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the value of this expression.""" start="00:08:06.561" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""This protocol was developed""" start="00:08:12.440" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""for CIDER development environment.""" start="00:08:14.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It's a Clojure development environment for Emacs.""" start="00:08:15.880" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It's very cool, featureful, reliable,""" start="00:08:18.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and I would say production-ready.""" start="00:08:22.860" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""A lot of professional Clojure developers use it.""" start="00:08:26.900" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""The nREPL protocol is very simple.""" start="00:08:31.500" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It has a few operations out of the box,""" start="00:08:33.240" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you can extend it with any arbitrary operation you want.""" start="00:08:38.220" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I work a lot on Guix codebase and other Scheme projects,""" start="00:08:46.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""so the experience I had previously with nREPL""" start="00:08:53.820" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""was not satisfying. I decided""" start="00:08:57.300" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""to just implement nREPL protocol.""" start="00:08:59.400" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Arei, Ares, and how to try""" start="00:09:01.740" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""First of all, I implemented nREPL server in Guile.""" start="00:09:01.740" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I called it `guile-ares-rs`, and used it""" start="00:09:05.720" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""with a generic nREPL client for Emacs.""" start="00:09:11.340" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It worked.""" start="00:09:13.960" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It had some rough edges, but overall it was okay.""" start="00:09:14.720" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And after that, to add more features""" start="00:09:18.640" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""to make the implementation more complete,""" start="00:09:21.640" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I wrote my own nREPL client for Emacs and called it `arei`.""" start="00:09:25.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And I got almost complete Guile IDE in two months.""" start="00:09:33.220" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""So `ares-rs` is nREPL server implementation.""" start="00:09:40.180" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""`arei` is Emacs client, which uses the same nREPL protocol.""" start="00:09:45.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It utilizes `sesman` package for managing sessions,""" start="00:09:49.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the association of buffers with nREPL connection.""" start="00:09:54.440" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It has some roots.""" start="00:10:00.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""The implementation has some roots""" start="00:10:04.380" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""in Geiser, CIDER, Monroe, and Rail.""" start="00:10:06.640" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I took small snippets for some parts of functionality.""" start="00:10:09.980" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I used the CAPF and xref infrastructure""" start="00:10:15.280" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""for completion at point and cross-reference capabilities.""" start="00:10:19.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And by the time of conference, I hope""" start="00:10:23.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""that README will be complete enough""" start="00:10:27.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""so you will be able to try it yourself.""" start="00:10:30.200" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Demo""" start="00:10:34.180" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""Let's see what is possible with it already.""" start="00:10:34.180" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Let's connect to nREPL server.""" start="00:10:42.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""After that, you can evaluate the expression.""" start="00:10:51.900" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And you see the stdout and the result.""" start="00:10:56.281" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Very nice, very convenient.""" start="00:11:02.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You have different expression, you evaluate it,""" start="00:11:04.720" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""you get the value of the evaluation.""" start="00:11:08.660" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You can run an infinite loop""" start="00:11:10.360" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""which prints to stderr and stdout""" start="00:11:12.280" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you see all necessary stuff.""" start="00:11:15.640" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Very cool.""" start="00:11:18.600" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""But also, you can interrupt the evaluation,""" start="00:11:19.300" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""which is very convenient if you accidentally""" start="00:11:21.960" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""run an infinite loop.""" start="00:11:25.160" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Continuations""" start="00:11:27.640" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""Also, do you remember here we have a few more examples""" start="00:11:27.640" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""that we didn't try yet?""" start="00:11:32.940" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""For example, on usual REPL implementation,""" start="00:11:34.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""if I evaluate this expression, I get return value.""" start="00:11:39.160" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I make a continuation and save it to this variable""" start="00:11:47.600" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and I try to call this evaluation""" start="00:11:50.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and I get an exception,""" start="00:11:52.860" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""because the environment in which this continuation""" start="00:11:55.340" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""was created was different and it has redefined""" start="00:11:58.400" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""stdout and stderr to capture it.""" start="00:12:03.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""But when I run it one more time,""" start="00:12:06.160" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""when I resume the continuation,""" start="00:12:08.980" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the environment changed and it doesn't work.""" start="00:12:12.200" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""What happens in `arei`?""" start="00:12:15.800" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I define continuation, I save the continuation""" start="00:12:17.420" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""for the simple expression""" start="00:12:21.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and I resume the continuation with a new argument,""" start="00:12:23.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you can see at the top of the screen""" start="00:12:27.280" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""that it works perfectly fine.""" start="00:12:30.140" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Reading from stdin""" start="00:12:32.460" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""Also, with a usual REPL implementation,""" start="00:12:32.460" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""let's see what happens when we have a process""" start="00:12:35.560" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""which reads from stdin.""" start="00:12:40.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I evaluate the expression and nothing visible happens.""" start="00:12:41.920" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I can try to type `C-g`, `C-c`,""" start="00:12:48.100" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and after some time it will say user interrupt.""" start="00:12:53.000" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""What actually I expect in such a case""" start="00:12:56.560" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""to have a minibuffer which prompts me for the input.""" start="00:13:00.440" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""When I evaluate the same expression in the `arei`,""" start="00:13:04.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""you see the prompt at the minibuffer""" start="00:13:10.020" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and here I can tell, &quot;Hello I'm a message from minibuffer&quot;.""" start="00:13:12.200" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Cool. You will see that this message is printed to stdout,""" start="00:13:21.900" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and unspecified was returned""" start="00:13:26.100" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""as a result of this expression.""" start="00:13:28.680" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Fancy example with continuations""" start="00:13:33.420" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""Let's make some fancy example with continuations.""" start="00:13:33.420" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Continuations is a very cool mechanism""" start="00:13:37.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""which is not the topic of today's talk,""" start="00:13:45.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""but you can find a lot of interesting information""" start="00:13:48.000" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""in Scheme documentation or in related books,""" start="00:13:51.000" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and I advise you to do it because it's really nice thing""" start="00:13:54.440" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""that is actually applicable""" start="00:13:58.340" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""in many different programming languages.""" start="00:14:00.120" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Here you can see the infinite loop""" start="00:14:03.520" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""which just prints values increasing one by one.""" start="00:14:05.200" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And here we save a continuation on each iteration.""" start="00:14:09.160" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I can call the continuation""" start="00:14:13.300" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and it will resume from the previous saved step.""" start="00:14:18.060" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And you can see, it resumed from the same step""" start="00:14:21.940" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""we interrupted earlier, but we provided a new value for it.
+another value for it.""" start="00:14:27.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""We can provide another value""" start="00:14:31.641" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and it resumed from the same spot it was saved earlier.""" start="00:14:33.921" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""But I also can provide a `read-i` value""" start="00:14:39.200" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and if I provide `read-i` value,""" start="00:14:42.580" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the infinite loop will read the input from stdin""" start="00:14:45.200" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and will continue the evaluation""" start="00:14:50.780" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""with a different `i` provided in this input.""" start="00:14:53.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""So let's try to type some arbitrary value""" start="00:14:56.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you see that the loop continued with this value.""" start="00:15:03.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Very nice.""" start="00:15:07.520" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And every time we could easily interrupt it.""" start="00:15:08.040" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Guix API""" start="00:15:13.160" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""Okay, what most annoying thing that I had previously""" start="00:15:13.160" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""with the usual REPL implementation""" start="00:15:17.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""that I have a quite nice Guix API""" start="00:15:19.340" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""where I can build packages, systems and other stuff.""" start="00:15:22.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""But if I evaluate this expression, I will get an error.""" start="00:15:27.580" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Okay. I will get an error""" start="00:15:35.360" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""because I don't have an appropriate environment.""" start="00:15:38.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""But what I can do, I can connect to the remote REPL""" start="00:15:44.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""by creating a server with `guix repl --listen` command""" start="00:15:51.580" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and connecting to it with `geiser-connect` command.""" start="00:15:55.060" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And now I can evaluate this expression.""" start="00:15:58.620" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Right?""" start="00:16:01.820" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Wow.""" start="00:16:03.360" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Okay.""" start="00:16:10.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""It actually doesn't matter for my example.""" start="00:16:14.340" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I will explain how it doesn't work easily.""" start="00:16:19.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""This is a long-running process which prints something""" start="00:16:22.880" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and it can take up to a few minutes.""" start="00:16:26.520" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And for the whole few minutes I don't see any results,""" start="00:16:29.580" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the same as with this infinite loop which prints to stdout""" start="00:16:33.360" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""but I don't see anything interactively.""" start="00:16:38.720" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""With `arei`, I can run""" start="00:16:42.200" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""the evaluation of the same expression,""" start="00:16:45.620" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you will see instantly""" start="00:16:51.440" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""that stdout is presented here in slightly yellowish color.""" start="00:16:54.120" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I can interrupt the evaluation""" start="00:17:00.201" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""if I don't want to wait until it's finished,""" start="00:17:02.921" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and just after that, I can evaluate another value.""" start="00:17:06.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""So that's cool.""" start="00:17:15.780" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And let's see one more thing.""" start="00:17:23.360" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""We have an infinite loop and we have some completion here.""" start="00:17:25.960" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And completion still works,""" start="00:17:30.340" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""very nice,""" start="00:17:32.580" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""while the infinite loop is running.""" start="00:17:33.660" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Okay.""" start="00:17:40.260" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Support""" start="00:17:42.060" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""Actually it took me around two months""" start="00:17:42.060" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""of full-time work funded by my own savings,""" start="00:17:44.920" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you can support and help to the project""" start="00:17:48.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""using OpenCollective or by contributing on SourceHut.""" start="00:17:51.600" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Future steps - Multiple simultaneous evaluations in different contexts""" start="00:17:57.020" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""The future steps for the project""" start="00:17:57.020" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""include an experimental workflow where you have""" start="00:17:58.700" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""multiple simultaneous evaluation in different contexts.""" start="00:18:03.675" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""For example, you have Fibers, you have Goblins,""" start="00:18:07.540" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""you have some HTTP server or some other thing,""" start="00:18:11.960" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you want to run all of them independently""" start="00:18:16.920" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""in slightly isolated sessions,""" start="00:18:22.120" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you want to have the ability""" start="00:18:25.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""to still interact with them.""" start="00:18:29.800" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""For example, if they require standard input""" start="00:18:30.960" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""or something else, you want to be able to provide it.""" start="00:18:33.980" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You want to see the stderr and stdout""" start="00:18:39.240" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""of those long-running processes and so on.""" start="00:18:42.520" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Tree-sitter integration""" start="00:18:46.220" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""The second thing is tree-sitter integration""" start="00:18:46.220" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""for better syntax highlighting, code navigation,""" start="00:18:50.240" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and other features.""" start="00:18:53.400" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Full-fledged debugger""" start="00:18:56.880" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""And after that, probably we will do a full-fledged debugger""" start="00:18:56.880" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""so you can jump expressions one by one""" start="00:19:01.400" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and see the results and see some intermediate values""" start="00:19:06.240" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""during the evaluation.""" start="00:19:10.780" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And it's very possible""" start="00:19:13.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""because nREPL is a very extensible protocol""" start="00:19:14.480" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you can implement""" start="00:19:17.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""whatever you want on top of it.""" start="00:19:18.200" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""FAQ - Does it support other Scheme implementations?""" start="00:19:22.760" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""I will answer two probably very frequent questions.""" start="00:19:22.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Does it support other Scheme implementations?""" start="00:19:27.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""At the moment, it doesn't,""" start="00:19:30.500" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""but the Scheme implementation is not restricted.""" start="00:19:32.280" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You have a server which is implemented in your language""" start="00:19:36.520" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you have a client--in our case, `arei`--""" start="00:19:40.640" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""which communicates with this protocol.""" start="00:19:43.975" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""So if you implement nREPL server in a different language,""" start="00:19:48.320" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""it should work with already implemented `arei` client.""" start="00:19:52.360" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Is it possible to use it with other text editors?""" start="00:19:58.380" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""And is it possible to use the same functionality""" start="00:19:58.380" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""in other text editors, for example in VS Code,""" start="00:20:04.080" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Vim, whatever?""" start="00:20:07.000" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""Yes, it's possible and the case is similar here.""" start="00:20:08.680" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""You have already implemented nREPL server""" start="00:20:13.800" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and you can write your own nREPL client""" start="00:20:16.600" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""in a different text editor and it will work.""" start="00:20:19.360" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Conclusion""" start="00:20:22.121" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""I would like to thank the authors and maintainers""" start="00:20:22.121" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and contributors of Guile, Geiser, CIDER, Clojure,""" start="00:20:26.760" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""and Emacs, and all other people""" start="00:20:30.440" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""who are somehow related to the work on those projects""" start="00:20:33.360" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""involved in this talk.""" start="00:20:38.780" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""And I hope the Scheme programming will be enjoyable.""" start="00:20:42.080" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template new="1" text="""Contacts""" start="00:20:45.880" video="mainVideo-scheme" id="subtitle"]]
+
+[[!template text="""If you want to contact me,""" start="00:20:45.880" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""join #tropin IRC channel at libera.chat,""" start="00:20:47.240" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""or drop me a message via email or feediverse""" start="00:20:49.800" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""using `andrew@trop.in` handle.""" start="00:20:53.040" video="mainVideo-scheme" id="subtitle"]]
+[[!template text="""I will see you in a bit in Q&A session.""" start="00:20:55.880" video="mainVideo-scheme" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+<a name="scheme-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: I see 2 questions on the panel already.""" start="00:00:16.200" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Let's see, 1 asking how much Andrew uses""" start="00:00:22.660" video="qanda-scheme" id="subtitle"]]
+[[!template text="""these ripples remotely or versus on their own""" start="00:00:26.320" video="qanda-scheme" id="subtitle"]]
+[[!template text="""desktop. And another asking if this can be""" start="00:00:29.240" video="qanda-scheme" id="subtitle"]]
+[[!template text="""integrated with EGLOT.""" start="00:00:31.160" video="qanda-scheme" id="subtitle"]]
+[[!template text="""And I will note that it is very cool that""" start="00:00:34.840" video="qanda-scheme" id="subtitle"]]
+[[!template text="""this year we've had so many talks on Ripples.""" start="00:00:36.580" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Just goes to show how powerful Emacs is and""" start="00:00:40.920" video="qanda-scheme" id="subtitle"]]
+[[!template text="""just how much or how far you can push it and""" start="00:00:42.980" video="qanda-scheme" id="subtitle"]]
+[[!template text="""how much you can do with it.""" start="00:00:44.040" video="qanda-scheme" id="subtitle"]]
+[[!template text="""And so see someone asking on IRC,""" start="00:00:53.460" video="qanda-scheme" id="subtitle"]]
+[[!template text="""if or how many people use GnuGeeks.""" start="00:00:57.780" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Since we are talking about Scheme,""" start="00:01:01.400" video="qanda-scheme" id="subtitle"]]
+[[!template text="""GnuGeeks is a great platform slash operating""" start="00:01:05.740" video="qanda-scheme" id="subtitle"]]
+[[!template text="""system or distro for your test house,""" start="00:01:10.380" video="qanda-scheme" id="subtitle"]]
+[[!template text="""but also for servers and such.""" start="00:01:11.920" video="qanda-scheme" id="subtitle"]]
+[[!template text="""They do some impressive,""" start="00:01:13.320" video="qanda-scheme" id="subtitle"]]
+[[!template text="""amazing work. And it's all,""" start="00:01:15.240" video="qanda-scheme" id="subtitle"]]
+[[!template text="""pretty much all done in Gindugal's scheme.""" start="00:01:19.400" video="qanda-scheme" id="subtitle"]]
+[[!template text="""So very cool stuff. Bye.""" start="00:01:30.260" video="qanda-scheme" id="subtitle"]]
+[[!template text="""You""" start="00:01:45.260" video="qanda-scheme" id="subtitle"]]
+[[!template text="""I see another interesting question on the""" start="00:03:19.940" video="qanda-scheme" id="subtitle"]]
+[[!template text="""pad. How hard is it to add support for""" start="00:03:23.440" video="qanda-scheme" id="subtitle"]]
+[[!template text="""something other than Guile?""" start="00:03:24.960" video="qanda-scheme" id="subtitle"]]
+[[!template text="""And if it makes sense to contribute at this""" start="00:03:28.040" video="qanda-scheme" id="subtitle"]]
+[[!template text="""early stage of development?""" start="00:03:28.940" video="qanda-scheme" id="subtitle"]]
+[[!template text="""They said that they've written several""" start="00:03:31.960" video="qanda-scheme" id="subtitle"]]
+[[!template text="""packages for chicken skin before and they""" start="00:03:34.000" video="qanda-scheme" id="subtitle"]]
+[[!template text="""would like to try this 1 as well.""" start="00:03:35.400" video="qanda-scheme" id="subtitle"]]
+[[!template text="""I guess since Andrew isn't still here,""" start="00:05:26.380" video="qanda-scheme" id="subtitle"]]
+[[!template text="""and there was some chatter about GnuGeeks in""" start="00:05:29.480" video="qanda-scheme" id="subtitle"]]
+[[!template text="""the chat, maybe it might be nice for me to""" start="00:05:32.400" video="qanda-scheme" id="subtitle"]]
+[[!template text="""share my screen and plug Inukis for a little""" start="00:05:35.520" video="qanda-scheme" id="subtitle"]]
+[[!template text="""bit and introduce it or at least show its""" start="00:05:38.800" video="qanda-scheme" id="subtitle"]]
+[[!template text="""website to folks who may not have seen it yet""" start="00:05:41.720" video="qanda-scheme" id="subtitle"]]
+[[!template text="""so I'm going to try and do that now.""" start="00:05:43.380" video="qanda-scheme" id="subtitle"]]
+[[!template text="""You""" start="00:05:45.260" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Okay, let's see if this works.""" start="00:06:19.760" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Okay, so this is GNU Geeks' website.""" start="00:06:33.540" video="qanda-scheme" id="subtitle"]]
+[[!template text="""You can go to geeks.gnu.org.""" start="00:06:35.000" video="qanda-scheme" id="subtitle"]]
+[[!template text="""And they introduced it at the top.""" start="00:06:38.820" video="qanda-scheme" id="subtitle"]]
+[[!template text="""So it's a wholly free operating system or""" start="00:06:43.480" video="qanda-scheme" id="subtitle"]]
+[[!template text="""distribution of GNU Linux.""" start="00:06:45.100" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Meaning that it only has free software""" start="00:06:48.600" video="qanda-scheme" id="subtitle"]]
+[[!template text="""packaged and no non-free packages,""" start="00:06:50.840" video="qanda-scheme" id="subtitle"]]
+[[!template text="""so it is endorsed by the FSF and the GNU""" start="00:06:53.560" video="qanda-scheme" id="subtitle"]]
+[[!template text="""project. As someone said in the chat,""" start="00:06:56.640" video="qanda-scheme" id="subtitle"]]
+[[!template text="""it's kind of like Nix,""" start="00:06:57.740" video="qanda-scheme" id="subtitle"]]
+[[!template text="""but instead built on GNU Gallop scheme.""" start="00:07:01.360" video="qanda-scheme" id="subtitle"]]
+[[!template text="""It has transactional upgrades and rollbacks.""" start="00:07:05.320" video="qanda-scheme" id="subtitle"]]
+[[!template text="""So if you do upgrade your system and let's""" start="00:07:10.160" video="qanda-scheme" id="subtitle"]]
+[[!template text="""say in the middle of it,""" start="00:07:11.180" video="qanda-scheme" id="subtitle"]]
+[[!template text="""your hardware fails or your power goes out,""" start="00:07:13.200" video="qanda-scheme" id="subtitle"]]
+[[!template text="""the likelihood of things being corrupted is""" start="00:07:16.560" video="qanda-scheme" id="subtitle"]]
+[[!template text="""very low because the upgrade is essentially""" start="00:07:18.840" video="qanda-scheme" id="subtitle"]]
+[[!template text="""prepared like in the background.""" start="00:07:21.560" video="qanda-scheme" id="subtitle"]]
+[[!template text="""And then pretty much atomically,""" start="00:07:24.140" video="qanda-scheme" id="subtitle"]]
+[[!template text="""the system is switched to it.""" start="00:07:26.780" video="qanda-scheme" id="subtitle"]]
+[[!template text="""And also if there is some kind of,""" start="00:07:30.400" video="qanda-scheme" id="subtitle"]]
+[[!template text="""sorry, I'm losing my voice here.""" start="00:07:32.400" video="qanda-scheme" id="subtitle"]]
+[[!template text="""If there is some kind of issue that makes""" start="00:07:34.840" video="qanda-scheme" id="subtitle"]]
+[[!template text="""your system unbootable,""" start="00:07:35.800" video="qanda-scheme" id="subtitle"]]
+[[!template text="""you could always go back to booting the""" start="00:07:41.480" video="qanda-scheme" id="subtitle"]]
+[[!template text="""previous revision of your system when you""" start="00:07:44.600" video="qanda-scheme" id="subtitle"]]
+[[!template text="""restart in the Grub bootloader.""" start="00:07:46.100" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Yeah, so they have a nice blog where they""" start="00:07:56.740" video="qanda-scheme" id="subtitle"]]
+[[!template text="""regularly post updates and what's new in the""" start="00:07:59.340" video="qanda-scheme" id="subtitle"]]
+[[!template text="""project. You can go check that out.""" start="00:08:01.000" video="qanda-scheme" id="subtitle"]]
+[[!template text="""We also have a packages archive where you can""" start="00:08:07.240" video="qanda-scheme" id="subtitle"]]
+[[!template text="""see a list of all the software that has been""" start="00:08:09.360" video="qanda-scheme" id="subtitle"]]
+[[!template text="""packaged for GNU Geeks.""" start="00:08:11.060" video="qanda-scheme" id="subtitle"]]
+[[!template text="""It is an impressive list.""" start="00:08:13.620" video="qanda-scheme" id="subtitle"]]
+[[!template text="""I don't know how many tens of thousands of""" start="00:08:16.440" video="qanda-scheme" id="subtitle"]]
+[[!template text="""packages there are. Geeks has been growing""" start="00:08:19.720" video="qanda-scheme" id="subtitle"]]
+[[!template text="""very well. And you can search the packages""" start="00:08:22.360" video="qanda-scheme" id="subtitle"]]
+[[!template text="""here. And yeah, all kinds of things are""" start="00:08:29.380" video="qanda-scheme" id="subtitle"]]
+[[!template text="""packaged. Of course, GNU Emacs is packaged,""" start="00:08:31.800" video="qanda-scheme" id="subtitle"]]
+[[!template text="""along with many extensions or packages,""" start="00:08:37.260" video="qanda-scheme" id="subtitle"]]
+[[!template text="""GNU Emacs packages that are packaged as""" start="00:08:41.039" video="qanda-scheme" id="subtitle"]]
+[[!template text="""system packages for Geeks.""" start="00:08:42.840" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Yeah, so definitely go check it out.""" start="00:08:46.960" video="qanda-scheme" id="subtitle"]]
+[[!template text="""You can use Geeks both as a standalone""" start="00:08:55.680" video="qanda-scheme" id="subtitle"]]
+[[!template text="""package manager, let's say on a Debian-based""" start="00:08:59.340" video="qanda-scheme" id="subtitle"]]
+[[!template text="""distribution like Triscale,""" start="00:09:00.780" video="qanda-scheme" id="subtitle"]]
+[[!template text="""for example, or you could install it like as""" start="00:09:06.180" video="qanda-scheme" id="subtitle"]]
+[[!template text="""a complete system distribution on its own.""" start="00:09:08.900" video="qanda-scheme" id="subtitle"]]
+[[!template text="""So the former is useful if you want to maybe""" start="00:09:15.560" video="qanda-scheme" id="subtitle"]]
+[[!template text="""get a taste for Geeks and try it out before""" start="00:09:18.080" video="qanda-scheme" id="subtitle"]]
+[[!template text="""fully committing to it and switching to it as""" start="00:09:21.140" video="qanda-scheme" id="subtitle"]]
+[[!template text="""your main distro. You can try it on top of""" start="00:09:24.620" video="qanda-scheme" id="subtitle"]]
+[[!template text="""any other distro pretty much and then you can""" start="00:09:27.720" video="qanda-scheme" id="subtitle"]]
+[[!template text="""of course install it on its own as well as a""" start="00:09:31.080" video="qanda-scheme" id="subtitle"]]
+[[!template text="""system distribution.""" start="00:09:31.560" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Yeah, there are a bunch of manuals and""" start="00:09:50.940" video="qanda-scheme" id="subtitle"]]
+[[!template text="""reference cards and videos that you're""" start="00:09:53.040" video="qanda-scheme" id="subtitle"]]
+[[!template text="""welcome to watch. They have several mailing""" start="00:09:55.920" video="qanda-scheme" id="subtitle"]]
+[[!template text="""lists. It sounds like they have a wiki now as""" start="00:09:59.240" video="qanda-scheme" id="subtitle"]]
+[[!template text="""well. And the development is done on Gnu""" start="00:10:04.020" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Savannah. If we go to savannah.gnu.org""" start="00:10:09.680" video="qanda-scheme" id="subtitle"]]
+[[!template text="""slash projects slash geeks,""" start="00:10:12.780" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Yeah, the project is developed here and they""" start="00:10:18.640" video="qanda-scheme" id="subtitle"]]
+[[!template text="""have a bunch of repositories including the""" start="00:10:21.300" video="qanda-scheme" id="subtitle"]]
+[[!template text="""main 1 which is geeks.git""" start="00:10:24.340" video="qanda-scheme" id="subtitle"]]
+[[!template text="""itself. So yeah, folks are welcome to go""" start="00:10:28.200" video="qanda-scheme" id="subtitle"]]
+[[!template text="""check it out. Let's see,""" start="00:10:32.380" video="qanda-scheme" id="subtitle"]]
+[[!template text="""maybe we can go have a look at some package""" start="00:10:35.860" video="qanda-scheme" id="subtitle"]]
+[[!template text="""definitions, although I think we're almost""" start="00:10:37.540" video="qanda-scheme" id="subtitle"]]
+[[!template text="""out of time on the live stream.""" start="00:10:38.940" video="qanda-scheme" id="subtitle"]]
+[[!template text="""So, yeah, just quickly.""" start="00:10:42.600" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Emacs to the CM has all the,""" start="00:10:45.280" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Emacs packages or Emacs itself.""" start="00:10:48.640" video="qanda-scheme" id="subtitle"]]
+[[!template text="""And Emacs-xyz is where you'll find all the""" start="00:10:52.120" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Emacs like ELPA packages,""" start="00:10:54.480" video="qanda-scheme" id="subtitle"]]
+[[!template text="""but package for use on GNU Geeks system or""" start="00:10:57.980" video="qanda-scheme" id="subtitle"]]
+[[!template text="""with GNU Geeks. And I think that's all the""" start="00:11:01.220" video="qanda-scheme" id="subtitle"]]
+[[!template text="""time that we have. So yeah,""" start="00:11:04.080" video="qanda-scheme" id="subtitle"]]
+[[!template text="""thanks for tuning in, folks.""" start="00:11:06.000" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Please post your questions on the pad.""" start="00:11:07.800" video="qanda-scheme" id="subtitle"]]
+[[!template text="""We'll pass them on to Andrew.""" start="00:11:09.280" video="qanda-scheme" id="subtitle"]]
+[[!template text="""And yeah, hope you enjoy this.""" start="00:11:12.400" video="qanda-scheme" id="subtitle"]]
+[[!template text="""Definitely go check out Andrew's work and Gnu""" start="00:11:15.140" video="qanda-scheme" id="subtitle"]]
+[[!template text="""geeks as well. You are currently the only""" start="00:11:25.320" video="qanda-scheme" id="subtitle"]]
+[[!template text="""person in this conference.""" start="00:11:26.280" video="qanda-scheme" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20scheme%3A%20Bringing%20joy%20to%20Scheme%20programming)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/scheme-before.md b/2023/info/scheme-before.md
new file mode 100644
index 00000000..24969b28
--- /dev/null
+++ b/2023/info/scheme-before.md
@@ -0,0 +1,36 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 22-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="scheme-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="scheme-mainVideo" data="""
+00:02.120 Introduction
+00:23.280 Interactive development
+01:18.180 REPL: Read Eval Print Loop
+02:53.720 Long-lasting loops
+04:07.600 Not interruptible
+05:23.160 No protocol
+05:51.480 Not scalable
+07:25.860 nREPL
+09:01.740 Arei, Ares, and how to try
+10:34.180 Demo
+11:27.640 Continuations
+12:32.460 Reading from stdin
+13:33.420 Fancy example with continuations
+15:13.160 Guix API
+17:42.060 Support
+17:57.020 Future steps - Multiple simultaneous evaluations in different contexts
+18:46.220 Tree-sitter integration
+18:56.880 Full-fledged debugger
+19:22.760 FAQ - Does it support other Scheme implementations?
+19:58.380 Is it possible to use it with other text editors?
+20:22.121 Conclusion
+20:45.880 Contacts
+
+"""]]<div></div>Duration: 21:01 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/4moUfTEo2G8we5JuLGArWx">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/scheme-nav.md b/2023/info/scheme-nav.md
new file mode 100644
index 00000000..fa791c87
--- /dev/null
+++ b/2023/info/scheme-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/windows">Windows into Freedom</a>
+Next by track: <a href="/2023/talks/world">GNU Emacs: A World of Possibilities</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/sharing-after.md b/2023/info/sharing-after.md
new file mode 100644
index 00000000..2b5a7b58
--- /dev/null
+++ b/2023/info/sharing-after.md
@@ -0,0 +1,1071 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="sharing-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""Hello everyone, I'm Jacob Boxerman.""" start="00:00:00.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I'm a sophomore at Columbia University""" start="00:00:02.440" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""studying computer science.""" start="00:00:04.320" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I'm so excited to be here today""" start="00:00:06.140" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""right at the end of EmacsConf 2023.""" start="00:00:08.520" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So glad to be able to share with everyone today.""" start="00:00:11.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""EmacsConf is really the epitome for me""" start="00:00:13.720" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""of sharing and of learning about Emacs.""" start="00:00:16.747" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Today's talk""" start="00:00:20.100" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""And in my closing keynote""" start="00:00:20.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""titled &quot;Sharing Emacs is Caring Emacs,&quot;""" start="00:00:21.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I want to drive that home,""" start="00:00:24.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and I want to make every day""" start="00:00:25.820" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""a day for learning and for sharing in our community.""" start="00:00:27.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I'd like to share my own journey""" start="00:00:31.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""of sharing the joy of Emacs""" start="00:00:33.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and convince you that sharing the ways we share""" start="00:00:34.980" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and how we participate in our Emacs community,""" start="00:00:38.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""those are the most important things""" start="00:00:41.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to both grow our community""" start="00:00:42.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and to increase our own personal joy in Emacs.""" start="00:00:44.340" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""My history with Emacs""" start="00:00:48.900" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""My journey of sharing begins with my journey of learning.""" start="00:00:48.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So I'll start by spending a bit of time on that.""" start="00:00:52.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I use Emacs every day for personal organization""" start="00:00:55.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and to-dos -- you know, schoolwork, projects,""" start="00:00:57.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""exams, readings. I use Org Mode for that,""" start="00:01:00.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""write essays, make presentations like this one.""" start="00:01:03.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I also write in various programming languages""" start="00:01:05.980" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""including Java, C, Python,""" start="00:01:08.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""locally and also remotely for projects, classes,""" start="00:01:10.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""other responsibilities.""" start="00:01:13.140" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I really started with Emacs during the pandemic.""" start="00:01:14.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I had tried Emacs before, but at the time""" start="00:01:17.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""all I knew it for was `M-x tetris`.""" start="00:01:20.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But then its power and its configurability even then""" start="00:01:22.380" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""especially spoke to me.""" start="00:01:25.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So from those little humble beginnings,""" start="00:01:27.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""trying different preconfigured distros,""" start="00:01:28.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I slowly made my way to building""" start="00:01:31.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""my own 2000+ line configuration,""" start="00:01:33.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which actually surprisingly has about 70 stars,""" start="00:01:36.340" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""a few watchers, a few forks on GitHub.""" start="00:01:39.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Pretty straightforward.""" start="00:01:40.540" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Self-exploration vs learning from others""" start="00:01:42.380" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""But what exactly was that learning process like?""" start="00:01:42.380" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Now, Emacs was such a beast to me at first.""" start="00:01:46.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I was familiar with Python,""" start="00:01:49.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""with C, Java, languages like that.""" start="00:01:51.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I was no stranger to the shell configuration,""" start="00:01:52.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""anything like that.""" start="00:01:55.340" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But the absolute infinity of possibility with Emacs""" start="00:01:56.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""was a bit overwhelming.""" start="00:02:01.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I find a sentiment in the community""" start="00:02:02.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that exploring on one's own""" start="00:02:04.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""was greater than exploring and learning from others.""" start="00:02:06.940" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And now I see why people say that and it's true in a sense,""" start="00:02:11.020" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but it might not be fully understood.""" start="00:02:14.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""At a certain point, we need to all create our own paths.""" start="00:02:17.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And I think that's just one of the ways Emacs is built.""" start="00:02:21.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The minute possibilities of configurability are so vast,""" start="00:02:24.160" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it's like a fingerprint or a snowflake --""" start="00:02:27.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""there are so many options to create""" start="00:02:29.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""a totally unique Emacs experience.""" start="00:02:32.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Of course that can't be found from somebody else --""" start="00:02:35.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It has to come from you.""" start="00:02:37.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Still, building a strong foundation""" start="00:02:38.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is much, much better when we have others.""" start="00:02:42.340" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Expanding on that foundation is, too, actually.""" start="00:02:45.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""My own process started""" start="00:02:48.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""with a lot of Googling, blog posts, YouTube, and Reddit.""" start="00:02:50.300" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Learning process""" start="00:02:53.220" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""I actually found Emacs on YouTube.""" start="00:02:53.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Seeing how other people used it""" start="00:02:55.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""was what really convinced me to try it for myself.""" start="00:02:58.140" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""At a certain point when my confidence grew,""" start="00:03:01.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""my trial and error became less error and more success.""" start="00:03:03.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I was also able to take what I saw other people do,""" start="00:03:07.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""learn from it, and expand, making it my own.""" start="00:03:09.980" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And through that time, I learned Emacs.""" start="00:03:13.860" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Emacs learning (not just learning Emacs)""" start="00:03:17.020" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""But I also participated in Emacs learning.""" start="00:03:17.020" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""What's the difference?""" start="00:03:21.020" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We often discuss the former,""" start="00:03:22.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""grappling with key binds, commands.""" start="00:03:24.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But Emacs learning goes beyond these technicalities.""" start="00:03:27.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's a mindset. It thrives on collaboration.""" start="00:03:31.620" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's not a solo endeavor;""" start="00:03:35.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it flourishes best when we do it together.""" start="00:03:37.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""This involves collaborating together,""" start="00:03:41.140" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""creating a collaborative mindset,""" start="00:03:44.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""sharing effective strategies,""" start="00:03:46.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""lifting each other""" start="00:03:47.980" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""through our collective pool of knowledge.""" start="00:03:49.076" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Together, we contribute to the growth of each member""" start="00:03:51.640" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""within our vibrant community.""" start="00:03:55.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Emacs learning is much, much harder to do alone.""" start="00:03:56.980" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And I wanted to help with that.""" start="00:04:00.260" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""My YouTube journey""" start="00:04:03.300" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""So this brings me to the second part of my talk,""" start="00:04:03.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""my Emacs journey, how I got started""" start="00:04:05.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and where I am today with my YouTube channel,""" start="00:04:08.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""my Straightforward Emacs series with nearly 200,000 views.""" start="00:04:11.460" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Why not just read the manual?""" start="00:04:14.820" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""The Emacs Manual is often pushed""" start="00:04:14.820" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""as the best way to learn Emacs.""" start="00:04:18.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's an all-encompassing tome.""" start="00:04:20.380" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And as amazing as I think it is,""" start="00:04:21.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I don't think it's reasonable""" start="00:04:23.980" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to push the Emacs manual so hard,""" start="00:04:25.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which is something I felt at first.""" start="00:04:27.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It can be really daunting. It's dense.""" start="00:04:29.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""There's a lot there.""" start="00:04:31.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's just a bit too much for a beginner,""" start="00:04:32.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or even someone with a little bit of experience.""" start="00:04:34.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""These qualities, I feel,""" start="00:04:37.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""apply to many of the Emacs resources we can find out there.""" start="00:04:40.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The best word for them is heavy.""" start="00:04:43.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""They look, they feel, they come across as heavy""" start="00:04:45.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""regardless of what they may actually be.""" start="00:04:48.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's not even that people are too lazy,""" start="00:04:50.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or not capable enough (because that's never true).""" start="00:04:53.380" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's just a mental block that takes some getting over,""" start="00:04:56.520" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and that's okay -- so we need other things, too.""" start="00:05:00.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""For me, that was video.""" start="00:05:03.160" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I wanted someone to tell and show me""" start="00:05:04.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""what I wanted to know,""" start="00:05:07.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""as well as things I didn't even know were possible.""" start="00:05:08.940" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I realized this once I'd progressed a little further""" start="00:05:11.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""in my Emacs journey. I wanted to do my part.""" start="00:05:15.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I care about Emacs. I started to really care about Emacs.""" start="00:05:18.020" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Why video for Emacs""" start="00:05:20.980" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""So I wanted to share about Emacs.""" start="00:05:20.980" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So at that point, I refocused my work with Emacs""" start="00:05:24.320" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""beyond just myself. I wanted to help others""" start="00:05:27.340" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""feel the excitement that I did.""" start="00:05:30.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So where did I turn, and why?""" start="00:05:32.720" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's so trite, but they say that""" start="00:05:35.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""a picture is worth a thousand words.""" start="00:05:37.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So how much is a video worth?""" start="00:05:40.160" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Everyone learns differently, and that's okay.""" start="00:05:41.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But it's absolutely certain to me""" start="00:05:44.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that you need to see something to believe it.""" start="00:05:46.140" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So for that, I turned to video.""" start="00:05:48.320" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And it turns out that seeing is believing.""" start="00:05:50.500" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Straightforward Emacs""" start="00:05:54.420" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""I made a short video showing off Emacs Org Mode.""" start="00:05:54.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I didn't even have a voiceover.""" start="00:05:56.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That video, less than five minutes long,""" start="00:05:58.960" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but still incorporating some of my core principles,""" start="00:06:01.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""now has over 55,000 views and counting.""" start="00:06:04.340" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So, something must have been right.""" start="00:06:06.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And the positive reception to that video""" start="00:06:09.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""made me want to continue.""" start="00:06:11.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I decided to continue with the videos""" start="00:06:12.980" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""in a series I titled &quot;Straightforward Emacs.&quot;""" start="00:06:14.940" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And I'm asked: who is the target audience""" start="00:06:18.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for Straightforward Emacs? It's me.""" start="00:06:20.940" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""They're the videos I wish I had existed""" start="00:06:23.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""when I was figuring out""" start="00:06:27.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Emacs' numerous and wonderful features.""" start="00:06:28.660" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Challenges and benefits of video""" start="00:06:32.700" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""Video does, I admit, come with its own set of challenges.""" start="00:06:32.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Complaints that video is less accessible, it's valid.""" start="00:06:36.620" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""They're more time consuming, it's valid too.""" start="00:06:40.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's harder to skim a video than a blog post,""" start="00:06:42.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and referring back can be a little annoying.""" start="00:06:45.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""To try and solve this,""" start="00:06:47.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I make video notes available as best I can though.""" start="00:06:48.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's not perfect. Despite these valid claims,""" start="00:06:50.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I believe video offers a sense of personality""" start="00:06:54.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that written content just can't.""" start="00:06:57.380" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And that makes it well worth it.""" start="00:06:59.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""My first two videos in the series""" start="00:07:00.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""received a combined 35,000 views.""" start="00:07:03.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I still get kind comments today""" start="00:07:06.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""from viewers thanking me, asking questions.""" start="00:07:08.020" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So I must have done something right,""" start="00:07:10.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to outweigh those cons of video,""" start="00:07:12.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to outweigh those common complaints.""" start="00:07:14.500" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Crafting tutorials that work""" start="00:07:16.300" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""What was it? I covered topics that had been done before.""" start="00:07:16.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But I wanted to present them in my way.""" start="00:07:21.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""In the way that I knew people would appreciate,""" start="00:07:24.020" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because it's what I would have appreciated""" start="00:07:26.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""when I started my Emacs journey.""" start="00:07:28.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""In writing, I navigated towards clarity.""" start="00:07:30.920" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Crystal clear, step-by-step instructions.""" start="00:07:34.480" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Fully scripted, recorded in multiple parts and""" start="00:07:38.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""spliced together. That allowed me""" start="00:07:40.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to achieve my second goal: no wasted time, or word,""" start="00:07:43.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""or thought. I meticulously cut my videos""" start="00:07:48.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to create smooth dialogue.""" start="00:07:51.820" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I cut out large blocks of typing if not explained.""" start="00:07:54.080" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Though this does vary video to video.""" start="00:07:57.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Less scripted, more personal video receives less editing.""" start="00:07:59.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Like this talk itself, it's not edited at all.""" start="00:08:03.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And though prerecorded, I wanted to present""" start="00:08:05.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""my unfiltered, raw self.""" start="00:08:08.260" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""High-quality and accessible content""" start="00:08:11.720" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""Another goal of mine is high quality and accessible content.""" start="00:08:11.720" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I speak carefully and I tune my volume,""" start="00:08:15.940" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""making it easier to listen to,""" start="00:08:18.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and improving YouTube's auto-captioning.""" start="00:08:20.680" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Something I didn't consider at first,""" start="00:08:23.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but was mentioned to me in a comment, was color scheme.""" start="00:08:24.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Now I try to select a scheme""" start="00:08:28.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""with good contrast and a readable font.""" start="00:08:29.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Content-wise, I design my tutorials""" start="00:08:33.280" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to ensure they cater to various skill levels,""" start="00:08:35.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""as well as learning preferences.""" start="00:08:38.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""My videos assume basic Emacs knowledge""" start="00:08:40.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but not too much more.""" start="00:08:43.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Importantly, they're configuration agnostic.""" start="00:08:44.520" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""However you feel about Emacs' 'distributions',""" start="00:08:47.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Doom, Spacemacs, etc, they're out there,""" start="00:08:50.320" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and beginners often don't distinguish.""" start="00:08:53.120" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I admit it can be a bit frustrating to see a Reddit post""" start="00:08:57.920" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""asking a question about unexpected behavior,""" start="00:09:02.040" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""without mention of the fact that they have""" start="00:09:04.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""literally thousands of lines of non-standard configuration""" start="00:09:06.180" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""in the form of an Emacs distribution.""" start="00:09:09.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So I do my best to mention different possible keybindings""" start="00:09:12.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""a viewer might be using.""" start="00:09:14.900" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Most crucial aspect of my videos""" start="00:09:17.920" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""There was one thing, though, that turned out to be""" start="00:09:17.920" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the most crucial part of my videos and series.""" start="00:09:19.940" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And it's one of the reasons itself for this talk.""" start="00:09:23.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""You may have already picked up on it.""" start="00:09:25.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's the personal aspect. Sharing myself.""" start="00:09:27.880" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Incorporating relatable examples,""" start="00:09:31.120" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""scenarios that resonate with my audience.""" start="00:09:33.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Seeing personal use cases, examples,""" start="00:09:36.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and demonstrations of real life Emacs use""" start="00:09:39.140" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""is really what began to build a community.""" start="00:09:41.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Because that's the stuff that can jump out of the video""" start="00:09:44.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and into the comments.""" start="00:09:47.220" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""A broadening community""" start="00:09:50.220" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""The idea for this talk started""" start="00:09:50.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""as a story of my YouTube journey.""" start="00:09:53.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I wanted to share how I began sharing Emacs""" start="00:09:55.240" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and why I like it. And I think I've done that.""" start="00:09:57.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Thanks to the EmacsConf organizers, though,""" start="00:10:00.960" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I started to see a larger vision.""" start="00:10:03.720" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Each video I made took a lot of effort,""" start="00:10:06.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""from research and planning to script writing,""" start="00:10:08.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""filming and editing. But those comments made it worth it --""" start="00:10:11.140" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""people saying that straightforward Emacs""" start="00:10:14.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""was just what they were looking for,""" start="00:10:16.840" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and that they appreciated my sharing.""" start="00:10:17.620" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""That's what made me want to continue.""" start="00:10:20.720" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And what made me want to continue even more""" start="00:10:22.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""was the community I was building.""" start="00:10:25.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I'd start to see repeat viewers""" start="00:10:28.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""who'd come back for my latest upload.""" start="00:10:30.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It's hard for me to find time to produce videos.""" start="00:10:32.640" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""But whether it was two weeks or four months later""" start="00:10:34.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""when I finally got around to uploading,""" start="00:10:38.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""those same commenters would be there for me.""" start="00:10:40.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""And I found real joy in actively engaging with my audience.""" start="00:10:43.280" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""It was amazing to see how my videos --""" start="00:10:47.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""me sharing useful Emacs tips,""" start="00:10:49.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""sharing the way I do things -- sparked broader discussions.""" start="00:10:51.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""On any chat form out there, there's no doubt""" start="00:10:55.120" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""you'll find some sort of cross discourse.""" start="00:10:56.980" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I'd see viewers replying to other commenters,""" start="00:10:59.720" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and my videos were no exception. Seeing how""" start="00:11:02.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""my videos sparked conversation,""" start="00:11:04.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""debate and further interest was incredible.""" start="00:11:06.100" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Sharing Emacs""" start="00:11:10.780" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""We've had two amazing days of sharing Emacs,""" start="00:11:10.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""putting ourselves out there, and sharing in a community.""" start="00:11:14.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I want to emphasize how amazing""" start="00:11:17.380" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""a strong community with the right values is,""" start="00:11:19.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and to inspire each and every one of us""" start="00:11:22.340" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to do our part to strengthen that community.""" start="00:11:24.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The point of my talk isn't to tell you""" start="00:11:27.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to pick up your microphone and produce a YouTube video,""" start="00:11:30.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""though that wouldn't hurt.""" start="00:11:33.120" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We're not all interested in that, and that's okay.""" start="00:11:34.560" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""First, I want everybody to pat themselves on the back""" start="00:11:37.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for the mere fact that we are here together.""" start="00:11:41.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Then let's turn to the potential within our community.""" start="00:11:44.140" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Platforms""" start="00:11:48.020" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""First, though, I'll briefly note""" start="00:11:48.020" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that everyone has their opinions about platforms,""" start="00:11:50.140" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and I'm not here to make judgments,""" start="00:11:52.340" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but freedom, equity, and accessibility are important,""" start="00:11:53.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but reach is, too.""" start="00:11:56.060" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Achieving unity""" start="00:11:57.922" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""Regardless of the platform,""" start="00:11:57.922" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""one thing remains certain:""" start="00:12:00.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""our strength lies in unity.""" start="00:12:02.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Like any online community, this calls for unique ways""" start="00:12:05.400" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to come together and share. How can we achieve this unity?""" start="00:12:08.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The key is finding avenues""" start="00:12:13.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""where our collective knowledge and our support can flourish,""" start="00:12:15.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""while each person can find a place for themselves,""" start="00:12:18.800" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""creating a more connected and empowered Emacs community.""" start="00:12:21.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""From uplifting others with positive contributions""" start="00:12:25.680" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to engaging on platforms like Reddit,""" start="00:12:29.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""both idealistic and concrete approaches are really valuable.""" start="00:12:31.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We can continue lively debate""" start="00:12:35.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""on community forums and discussion boards,""" start="00:12:36.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""encouraging a positive and inclusive atmosphere""" start="00:12:38.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for asking questions and seeking help.""" start="00:12:41.620" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We can leverage social media platforms to share quick tips,""" start="00:12:44.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""tricks, or interesting discoveries related to Emacs.""" start="00:12:48.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Those who enjoy writing""" start="00:12:51.480" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""can contribute to blogs and newsletters,""" start="00:12:52.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""sharing personal expertise and experiences""" start="00:12:54.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""with a larger audience.""" start="00:12:57.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Let's also not underestimate the value of online video,""" start="00:12:59.240" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""as I've said, and learning platforms too.""" start="00:13:02.960" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Creating and sharing tutorials""" start="00:13:05.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""on platforms like YouTube or educational websites""" start="00:13:07.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""addresses specific aspects of Emacs and benefits learners,""" start="00:13:10.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""while contributing a personal touch.""" start="00:13:14.020" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Participating in or organizing Emacs-related courses""" start="00:13:17.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""also fosters a structured learning""" start="00:13:20.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""environment where there's so much room""" start="00:13:22.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for mentorship and support,""" start="00:13:24.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""which is valuable for everyone involved.""" start="00:13:26.080" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Every contribution is valuable""" start="00:13:30.000" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""We can also call on our open source [* free software] values""" start="00:13:30.000" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and focus on collaborative projects,""" start="00:13:32.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""from coding projects where we can contribute and learn""" start="00:13:34.940" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to building shared documentation and guides""" start="00:13:38.240" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that compile collective knowledge on specific topics --""" start="00:13:41.020" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""the Emacs Wiki is a great place""" start="00:13:44.340" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to start and continue that work as well.""" start="00:13:46.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Especially for those who might be less willing""" start="00:13:49.600" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""to put themselves out there,""" start="00:13:51.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""it's essential to recognize that every contribution,""" start="00:13:53.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""regardless of its scale, adds value to our community.""" start="00:13:56.200" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Documentation contributions, however small,""" start="00:13:59.520" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""can go a long way. So do translations,""" start="00:14:02.120" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for those who are able to increase accessibility,""" start="00:14:04.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""as well as testing and bug reporting.""" start="00:14:07.380" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Reporting issues to package maintainers""" start="00:14:09.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""in their desired format -- speaking as one myself,""" start="00:14:11.380" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I appreciate when users give helpful feedback.""" start="00:14:14.020" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""There are options for everybody, big and small.""" start="00:14:16.820" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Remember, the strength of our community""" start="00:14:20.480" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""lies in its ability to share, collaborate,""" start="00:14:22.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and learn together. Whether through collaborative projects,""" start="00:14:25.340" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""sharing insights on forums, or leveraging social media,""" start="00:14:29.380" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""by embracing these ideas, we can build""" start="00:14:32.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""a more connected and empowered Emacs community.""" start="00:14:34.660" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template new="1" text="""Conclusion""" start="00:14:40.300" video="mainVideo-sharing" id="subtitle"]]
+
+[[!template text="""Now Emacs is so very personal.""" start="00:14:40.300" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Those of us who have our own""" start="00:14:43.760" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""carefully manicured configurations understand --""" start="00:14:44.940" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Emacs molds to our liking and our person.""" start="00:14:47.680" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Our configurations and use-cases""" start="00:14:50.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""are a reflection of our individuality.""" start="00:14:53.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Nonetheless, the richness of our community""" start="00:14:56.380" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""lies in collaboration, sharing, and learning together.""" start="00:14:59.320" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""There's a lot of talk in the community""" start="00:15:04.620" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""about how to ensure Emacs' longevity.""" start="00:15:06.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I agree it's important.""" start="00:15:09.560" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We care because of passion, excitement,""" start="00:15:11.140" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and utility. We want to share""" start="00:15:13.820" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and we want to have others love what we love.""" start="00:15:16.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We also want a stronger community""" start="00:15:19.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that fosters new innovation.""" start="00:15:21.100" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""I used to buy into complaints I'd read online""" start="00:15:23.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""that Emacs' defaults are too unapproachable.""" start="00:15:26.540" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""The default color scheme and the font is unappealing.""" start="00:15:29.500" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Fix that and people will flock.""" start="00:15:33.420" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Sounds fair, I'd think.""" start="00:15:35.700" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Turns out, it's not what we need.""" start="00:15:37.740" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Emacs is bigger than that.""" start="00:15:40.640" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""What we need is like what we've done here this weekend.""" start="00:15:42.680" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Like EmacsConf. It's the absolute epitome""" start="00:15:45.780" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""of sharing about and caring about Emacs.""" start="00:15:49.660" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We are here both working to grow our community,""" start="00:15:53.900" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and to strengthen what we already have.""" start="00:15:56.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""We're here because we find joy in Emacs,""" start="00:16:00.140" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""and that joy is amplified by sharing it""" start="00:16:02.580" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""with and among others.""" start="00:16:05.860" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""So let's continue this journey together,""" start="00:16:07.680" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""navigating Emacs with a spirit of collaboration,""" start="00:16:10.220" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""because in unity, we find not just strength""" start="00:16:13.460" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""but the enduring legacy of a tool that we hold very dear.""" start="00:16:17.260" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Thank you to everybody here""" start="00:16:22.060" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""for being part of this shared adventure.""" start="00:16:23.340" video="mainVideo-sharing" id="subtitle"]]
+[[!template text="""Let's go forth and share, together.""" start="00:16:26.500" video="mainVideo-sharing" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+<a name="sharing-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 1]: Yeah, we're live. So whoever's in the""" start="00:00:05.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""background might be able to see you live in""" start="00:00:08.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""about 10 seconds as soon as the stream""" start="00:00:09.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""catches up. Hi Jacob, how are you doing?""" start="00:00:11.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Got that? We're live. I'm doing well.""" start="00:00:12.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""How are you doing today?""" start="00:00:13.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: I am doing well and this is the very last""" start="00:00:16.200" video="qanda-sharing" id="subtitle"]]
+[[!template text="""talk of the day so I'm very excited not""" start="00:00:17.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""because it finishes but because I am tired""" start="00:00:20.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah very understandable.""" start="00:00:22.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Well thanks for all of your hard work.""" start="00:00:23.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""We all really appreciate it and all the other""" start="00:00:26.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""organizers.""" start="00:00:26.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: and need some sleep. Well on behalf of all""" start="00:00:28.980" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the organizers thank you but you know it all""" start="00:00:30.980" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it makes it all worthwhile when we see the""" start="00:00:33.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""valuable contribution that every single 1 of""" start="00:00:36.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""our speakers are making,""" start="00:00:37.160" video="qanda-sharing" id="subtitle"]]
+[[!template text="""not only for recording their talks,""" start="00:00:39.559" video="qanda-sharing" id="subtitle"]]
+[[!template text="""which is a tough demand on people to say,""" start="00:00:42.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""oh, if you want to go to EmacsConf,""" start="00:00:43.420" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you might want to record your talk.""" start="00:00:45.480" video="qanda-sharing" id="subtitle"]]
+[[!template text="""But then almost all of you do it and you""" start="00:00:48.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""spend a lot of time with us answering""" start="00:00:50.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""questions. So we couldn't do it.""" start="00:00:51.580" video="qanda-sharing" id="subtitle"]]
+[[!template text="""You know, we wouldn't be spending as much""" start="00:00:53.680" video="qanda-sharing" id="subtitle"]]
+[[!template text="""energy, half as much energy,""" start="00:00:54.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""if we didn't believe that it was worth it.""" start="00:00:58.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So now it's me thanking you on behalf of all""" start="00:01:01.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the speakers.""" start="00:01:01.480" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well thank you that's part of what I wanted""" start="00:01:03.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""to get across in my talk was that coming""" start="00:01:06.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""together and sharing ourselves and you know""" start="00:01:08.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""not just putting little little essays out""" start="00:01:11.140" video="qanda-sharing" id="subtitle"]]
+[[!template text="""there and single videos but coming together""" start="00:01:13.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""as a community you know sharing ourselves our""" start="00:01:15.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""faces our voices you know it really brings us""" start="00:01:18.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""together and makes everyone stronger.""" start="00:01:19.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Exactly, and I think it's been a recurring""" start="00:01:22.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""theme. Most of the talks we have at""" start="00:01:27.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""EmacsConf, they're usually about sharing,""" start="00:01:28.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""obviously, sharing the knowledge that they've""" start="00:01:30.580" video="qanda-sharing" id="subtitle"]]
+[[!template text="""acquired, either writing a package or""" start="00:01:32.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""learning how to use Emacs as a professor in""" start="00:01:35.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""academia or stuff like this.""" start="00:01:37.200" video="qanda-sharing" id="subtitle"]]
+[[!template text="""But what I particularly like this year about""" start="00:01:39.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the different talks we've had is that they've""" start="00:01:41.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""really made the sharing even more obvious.""" start="00:01:44.479" video="qanda-sharing" id="subtitle"]]
+[[!template text="""We've had the mentoring this afternoon and we""" start="00:01:46.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""have your talk about using videos as a""" start="00:01:49.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""different medium to get into something.""" start="00:01:51.100" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And I really think in terms of accessibility""" start="00:01:54.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""to Emacs, all of you who talked about this""" start="00:01:58.780" video="qanda-sharing" id="subtitle"]]
+[[!template text="""topic are doing a wonderful job.""" start="00:01:59.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So, thank you again for all of this.""" start="00:02:01.400" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thank you. Yeah, do we have any questions to""" start="00:02:04.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""be answering?""" start="00:02:04.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, so only 1 for now and I'll invite""" start="00:02:08.199" video="qanda-sharing" id="subtitle"]]
+[[!template text="""people as usual to please add their question""" start="00:02:10.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""to the pad or to join us on BBB.""" start="00:02:12.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Now the chat is open if you want to join us""" start="00:02:15.920" video="qanda-sharing" id="subtitle"]]
+[[!template text="""on BBB and ask your questions directly.""" start="00:02:17.480" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And in the meantime, I will read the first""" start="00:02:20.520" video="qanda-sharing" id="subtitle"]]
+[[!template text="""question. So, Kroting,""" start="00:02:22.700" video="qanda-sharing" id="subtitle"]]
+[[!template text="""are you using OxReveal to make your slides?""" start="00:02:25.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""If not, what are you using?""" start="00:02:26.520" video="qanda-sharing" id="subtitle"]]
+[[!template text="""They look very elegant,""" start="00:02:27.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and I concur.""" start="00:02:28.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's true. I am using OxReveal.""" start="00:02:32.920" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I have a whole entire video on it.""" start="00:02:35.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So if you're interested,""" start="00:02:36.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""feel free to take a look.""" start="00:02:37.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It's very simple to get started with.""" start="00:02:39.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""There are a lot of different packages to use""" start="00:02:42.560" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Reveal.js and Emacs. OxReveal or OrgReveal""" start="00:02:45.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""seems to be pretty easy to use.""" start="00:02:47.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So try that 1 out. Yeah,""" start="00:02:48.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it's really nice.""" start="00:02:49.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Awesome. I'm going to give a little bit of""" start="00:02:54.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""time for the other people to finish writing""" start="00:02:55.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""their answer. In the meantime,""" start="00:02:56.980" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I'll ask you 1 of my own.""" start="00:02:58.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So you said you were in college,""" start="00:02:59.620" video="qanda-sharing" id="subtitle"]]
+[[!template text="""right? In com sci. Sorry,""" start="00:03:01.500" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah.""" start="00:03:02.980" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: computer science. I think it's great to find""" start="00:03:07.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""people in computer science who have,""" start="00:03:08.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""from the get-go, as soon as their bachelor,""" start="00:03:11.780" video="qanda-sharing" id="subtitle"]]
+[[!template text="""an appetite for sharing and vulgarizing a lot""" start="00:03:16.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""of knowledge. Because it feels like if you""" start="00:03:17.780" video="qanda-sharing" id="subtitle"]]
+[[!template text="""get started like this,""" start="00:03:18.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you're gonna have a well over time as you""" start="00:03:20.580" video="qanda-sharing" id="subtitle"]]
+[[!template text="""progress with the learning.""" start="00:03:21.500" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So I'm very excited to see what you do in the""" start="00:03:23.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""coming years because of this.""" start="00:03:24.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thank you, thank you, yeah.""" start="00:03:26.420" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And Emacs has been like very central to my""" start="00:03:29.700" video="qanda-sharing" id="subtitle"]]
+[[!template text="""education as well. It's a great way to sort""" start="00:03:32.100" video="qanda-sharing" id="subtitle"]]
+[[!template text="""of organize myself and also it's a good way""" start="00:03:34.460" video="qanda-sharing" id="subtitle"]]
+[[!template text="""to share with other people with Org Mode.""" start="00:03:36.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I can export my code, I can export notes.""" start="00:03:38.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It makes it so simple.""" start="00:03:39.340" video="qanda-sharing" id="subtitle"]]
+[[!template text="""My peers are also impressed by my PDF""" start="00:03:42.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""documents and whatever I can produce with""" start="00:03:44.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh yeah. If only they knew how much time it""" start="00:03:48.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""takes us to get LaTeX to behave properly.""" start="00:03:49.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Emacs. Right, right. I see some more""" start="00:03:52.680" video="qanda-sharing" id="subtitle"]]
+[[!template text="""questions coming in I can answer.""" start="00:03:53.980" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sure, I'll read it for you so that it's a""" start="00:03:56.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""little more interactive.""" start="00:03:57.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So, second question. Videos can be very""" start="00:03:59.920" video="qanda-sharing" id="subtitle"]]
+[[!template text="""inspirational to learn about something by""" start="00:04:01.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""watching it used. I often find it,""" start="00:04:04.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I often find that I need to do some research""" start="00:04:07.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""after watching a video to learn more.""" start="00:04:09.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Do you give people links to relevant""" start="00:04:10.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""resources or etc?""" start="00:04:11.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, that's something I could definitely do""" start="00:04:15.060" video="qanda-sharing" id="subtitle"]]
+[[!template text="""more of. When I make a video I try to combine""" start="00:04:17.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""all the relevant resources and make 1 sort of""" start="00:04:20.459" video="qanda-sharing" id="subtitle"]]
+[[!template text="""cohesive video. I like to think of my video""" start="00:04:23.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""as a jumping off point to the Emacs manuals""" start="00:04:26.580" video="qanda-sharing" id="subtitle"]]
+[[!template text="""because the manuals are so so full but you""" start="00:04:30.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""need to have a sort of a cursory""" start="00:04:31.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""understanding to get started with them.""" start="00:04:33.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And then yeah, if there are other sort of""" start="00:04:35.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""GitHub links or something like that,""" start="00:04:36.880" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I like to put those in the description.""" start="00:04:38.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Good question. Right. And I think it's arcing""" start="00:04:42.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""back also. I keep using the word arcing back.""" start="00:04:44.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I'm sorry. It's my... Every EmacsConf I have""" start="00:04:47.420" video="qanda-sharing" id="subtitle"]]
+[[!template text="""1 word or 1 phrase that I keep saying over""" start="00:04:49.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and over again and this 1 is not leaving but""" start="00:04:51.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""don't worry we only have about 1 more hour""" start="00:04:53.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and then you're done with me arcing out,""" start="00:04:54.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""arcing back to stuff. I think this is""" start="00:04:59.060" video="qanda-sharing" id="subtitle"]]
+[[!template text="""reminding me of both the mentoring talk we've""" start="00:05:03.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""had today about onboarding people basically""" start="00:05:06.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""so that they can have a well of a time on""" start="00:05:08.480" video="qanda-sharing" id="subtitle"]]
+[[!template text="""their own on Emacs and I'd agree with you,""" start="00:05:11.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you know, as much as we like to rave about""" start="00:05:13.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Emacs as a self-documenting editor,""" start="00:05:15.140" video="qanda-sharing" id="subtitle"]]
+[[!template text="""about how complete the documentation is,""" start="00:05:17.700" video="qanda-sharing" id="subtitle"]]
+[[!template text="""As you've mentioned in your talk,""" start="00:05:18.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it's not accessible directly to the people.""" start="00:05:21.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""We can yell as much as we want to people on""" start="00:05:23.620" video="qanda-sharing" id="subtitle"]]
+[[!template text="""IRC, you just need to RTFM or you just need""" start="00:05:26.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""to do Ctrl-H-V for the variable or Ctrl-H-F.""" start="00:05:29.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""What is a variable? I am not for computer""" start="00:05:32.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""science. What does it mean?""" start="00:05:33.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It is really blocking a lot of people right""" start="00:05:36.580" video="qanda-sharing" id="subtitle"]]
+[[!template text="""from the get-go. And I think the element of""" start="00:05:40.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""interactivity, as you've mentioned in your""" start="00:05:42.340" video="qanda-sharing" id="subtitle"]]
+[[!template text="""talk, that is introduced by video just makes""" start="00:05:45.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the hand-holding that much easier.""" start="00:05:47.520" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And it's great to do it like this.""" start="00:05:50.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""All right, I think we've got another""" start="00:05:53.400" video="qanda-sharing" id="subtitle"]]
+[[!template text="""questions. What are your fellow codes of""" start="00:05:56.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""students using for their editors?""" start="00:05:57.500" video="qanda-sharing" id="subtitle"]]
+[[!template text="""What kinds of feedback do you get from them""" start="00:06:00.200" video="qanda-sharing" id="subtitle"]]
+[[!template text="""when they learn about you using Emacs?""" start="00:06:01.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's a great question.""" start="00:06:05.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I think professors want to make things,""" start="00:06:10.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the entry as simple as possible.""" start="00:06:12.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So for the first computer science course and""" start="00:06:15.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the second, at least at Columbia,""" start="00:06:16.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""They use Codeo, which is 1 of those online""" start="00:06:20.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""whole IDEs. Now in the third course,""" start="00:06:25.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""which is sort of more the weed out as they""" start="00:06:27.520" video="qanda-sharing" id="subtitle"]]
+[[!template text="""call it, the professor gives you a choice and""" start="00:06:29.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""he says you can use Emacs or you can use Vim.""" start="00:06:33.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And everyone uses Vim.""" start="00:06:36.340" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Not a single person I know is using Emacs,""" start="00:06:38.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""simply because the professor's using Vim and""" start="00:06:43.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""that's what he shows on screen and that's""" start="00:06:45.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""just what everyone else falls into.""" start="00:06:46.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And it's also, like, they're totally in the""" start="00:06:50.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""terminal, and that can be a big barrier of""" start="00:06:52.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""entry. So I think they see Emacs as like""" start="00:06:54.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""something like Vim, but it's not sort of the""" start="00:06:59.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""same idea. It's not what everyone uses""" start="00:07:01.560" video="qanda-sharing" id="subtitle"]]
+[[!template text="""because it's not what's being shown up on""" start="00:07:03.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""screen. So if you're not following,""" start="00:07:05.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""like if you're a new learner,""" start="00:07:06.460" video="qanda-sharing" id="subtitle"]]
+[[!template text="""if you're not following with Vim,""" start="00:07:08.300" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you might have a little bit of a harder time""" start="00:07:10.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""in these classes because everyone else is""" start="00:07:12.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""also using Vim.""" start="00:07:14.060" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. And I'm kind of reminded again,""" start="00:07:19.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it feels like this is the last talk,""" start="00:07:21.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""so I'm reminiscing of all the different talks""" start="00:07:24.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""we've had on the general chat,""" start="00:07:25.680" video="qanda-sharing" id="subtitle"]]
+[[!template text="""at least. And you know,""" start="00:07:28.340" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it feels like we had, you know,""" start="00:07:30.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""this 1 talk, I can't remember the first name""" start="00:07:34.160" video="qanda-sharing" id="subtitle"]]
+[[!template text="""at the presentation, but it was about forcing""" start="00:07:36.340" video="qanda-sharing" id="subtitle"]]
+[[!template text="""people to use Emacs and not giving them the""" start="00:07:38.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""choice to do this. And I found it to be such""" start="00:07:41.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""a powerful move to do because usually people,""" start="00:07:45.060" video="qanda-sharing" id="subtitle"]]
+[[!template text="""maybe some classes are actually forcing Vim""" start="00:07:47.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""because it's a little more palatable I guess.""" start="00:07:49.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Do you have something to say on this?""" start="00:07:51.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah let me actually, I've remembered 1""" start="00:07:53.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""thing, I know there's another course,""" start="00:07:55.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""a fourth course you'd say in assembly and the""" start="00:07:58.880" video="qanda-sharing" id="subtitle"]]
+[[!template text="""professor suggests Emacs.""" start="00:08:00.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""However I know that's just 1 professor so I""" start="00:08:04.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""think broadly Vim is more of the standard and""" start="00:08:06.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""yeah what were you, can you repeat what you""" start="00:08:08.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""said about Vim being more sort of friendly?""" start="00:08:09.880" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, because it's not,""" start="00:08:12.880" video="qanda-sharing" id="subtitle"]]
+[[!template text="""okay, I'm quoting the opinions of other,""" start="00:08:14.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you know, I would hate to insult Emacs and""" start="00:08:17.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""give myself a bad rep at Emacs comfortable""" start="00:08:19.400" video="qanda-sharing" id="subtitle"]]
+[[!template text="""things. But it feels like because modal""" start="00:08:23.200" video="qanda-sharing" id="subtitle"]]
+[[!template text="""editing is usually something that people hear""" start="00:08:26.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""from when it starts looking into how to be""" start="00:08:28.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""more efficient when they read text.""" start="00:08:30.460" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It feels like the first door,""" start="00:08:32.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the closest door to this is Vim.""" start="00:08:35.140" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And so a lot of professors,""" start="00:08:36.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""because there's very little on-boarding,""" start="00:08:39.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I mean, I'm going to say the word on-boarding""" start="00:08:41.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and then I'm going to modulate,""" start="00:08:42.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""but there's very little on-boarding to get""" start="00:08:44.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""into modal editing. You just have your H's""" start="00:08:47.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and your J's and your K's and your L's and""" start="00:08:50.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""everything works. You know,""" start="00:08:51.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it does something, yes,""" start="00:08:52.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the arrows are in weird places,""" start="00:08:53.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""but it does something that is vaguely""" start="00:08:55.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""logical. Whereas with Ctrl-Meta,""" start="00:08:58.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Hyper, Super, J and then Ctrl-C and Meta 4""" start="00:09:03.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""for good measure, you know,""" start="00:09:04.560" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It already feels a little more opaque in""" start="00:09:08.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""terms of how people are going to use this.""" start="00:09:09.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So, I think it's also 1 good thing about the""" start="00:09:13.780" video="qanda-sharing" id="subtitle"]]
+[[!template text="""videos is that people can see you're not""" start="00:09:15.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""contorting your hands in very difficult""" start="00:09:17.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""shapes to use Emacs as the bad rep usually""" start="00:09:20.920" video="qanda-sharing" id="subtitle"]]
+[[!template text="""is. But yeah, to come back to what I was""" start="00:09:24.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""saying about Vim, I just feel like they've""" start="00:09:26.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""won the battle in terms of looking very""" start="00:09:30.460" video="qanda-sharing" id="subtitle"]]
+[[!template text="""accessible. And for us with Emacs,""" start="00:09:33.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""from the top of our ivory tower,""" start="00:09:37.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""we see the ease of getting into Vim,""" start="00:09:39.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""but we always think, but Vim script is shit,""" start="00:09:43.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""we've got Elisp for us,""" start="00:09:44.700" video="qanda-sharing" id="subtitle"]]
+[[!template text="""We can do so many things on our end.""" start="00:09:46.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So yeah, does that evoke anything to you with""" start="00:09:51.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""regards to Vim versus Emacs in terms of""" start="00:09:52.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""apprehension?""" start="00:09:53.160" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I think that Emacs might be more""" start="00:09:56.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""straightforward if you just plop someone down""" start="00:09:59.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""in front of their computer because you press""" start="00:10:01.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""H, you're going to see an H on the screen,""" start="00:10:03.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""right? And Vim is a whole new modal mindset.""" start="00:10:06.780" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So for a student who wants to like gain""" start="00:10:09.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""efficiency, then yes, I think that Vim is""" start="00:10:13.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""definitely like, it feels like a more""" start="00:10:15.160" video="qanda-sharing" id="subtitle"]]
+[[!template text="""friendly introduction.""" start="00:10:16.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""But I think that Emacs doesn't get enough""" start="00:10:18.340" video="qanda-sharing" id="subtitle"]]
+[[!template text="""credit around here. And I'd like to see it""" start="00:10:20.580" video="qanda-sharing" id="subtitle"]]
+[[!template text="""more often, because a lot of students,""" start="00:10:23.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""they're not looking to fix the efficiencies""" start="00:10:25.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""in their text editing.""" start="00:10:28.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""They're looking to fix the efficiencies in""" start="00:10:31.620" video="qanda-sharing" id="subtitle"]]
+[[!template text="""how they do homework or how they do their""" start="00:10:33.620" video="qanda-sharing" id="subtitle"]]
+[[!template text="""programming assignments,""" start="00:10:34.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and they would save time if they,""" start="00:10:37.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""or at least the mentality for a student,""" start="00:10:39.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""is that if you can just get it done more""" start="00:10:42.500" video="qanda-sharing" id="subtitle"]]
+[[!template text="""quickly, like it's more,""" start="00:10:43.980" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you know, you do what you're used to,""" start="00:10:45.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and Vim is just a barrier towards you know""" start="00:10:49.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""getting your work done like how do I copy and""" start="00:10:51.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""paste something it's a whole new set of""" start="00:10:52.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""challenges to learn so I think both have""" start="00:10:55.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""their deficiencies and abilities.""" start="00:10:56.920" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah it's funny because I'm just 1 last thing""" start="00:11:00.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""on this it feels like modal editing because""" start="00:11:03.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it is already weird from the get-go,""" start="00:11:05.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""perhaps it might do a better job of making""" start="00:11:08.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""people uneasy. You know how we say that""" start="00:11:10.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""constraints breeds creativity.""" start="00:11:11.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Well, Vim constrains you from the get-go.""" start="00:11:14.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""If you do not press I,""" start="00:11:16.160" video="qanda-sharing" id="subtitle"]]
+[[!template text="""nothing is going to show up in the buffer""" start="00:11:18.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""that you're currently editing.""" start="00:11:19.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Whereas Emacs give you this full sense of""" start="00:11:21.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""security by when you press J,""" start="00:11:24.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, true.""" start="00:11:27.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: it actually inputs J. All right,""" start="00:11:29.480" video="qanda-sharing" id="subtitle"]]
+[[!template text="""moving on to another question.""" start="00:11:30.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And by the way, we've got some time.""" start="00:11:32.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""We have technically about 6 more minutes,""" start="00:11:34.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""but I see Sasha on the other track is already""" start="00:11:38.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""answering questions that I'm in about""" start="00:11:40.400" video="qanda-sharing" id="subtitle"]]
+[[!template text="""EmacsConf. So we can go a little longer,""" start="00:11:42.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""as long as I let the organizers know.""" start="00:11:44.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So we've got about, let's say,""" start="00:11:46.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""6 minutes for now. And we'll see if more""" start="00:11:48.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""questions crop up. All right,""" start="00:11:50.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""moving on to the next question.""" start="00:11:51.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Did you start those university classes using""" start="00:11:53.400" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Emacs, I suppose, in your first year?""" start="00:11:55.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, yeah, I did. I started with Emacs 2""" start="00:12:01.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""years before entering college,""" start="00:12:02.780" video="qanda-sharing" id="subtitle"]]
+[[!template text="""so my junior year of high school.""" start="00:12:04.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And I've basically over time built up a""" start="00:12:09.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""workflow of how I will take my notes,""" start="00:12:11.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""how I will organize my classes.""" start="00:12:12.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And now that I'm taking programming classes""" start="00:12:16.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""where Emacs might be more acceptable.""" start="00:12:18.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It's even enhanced my workflow.""" start="00:12:21.500" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Taking notes in Ouro for program assists,""" start="00:12:24.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""everyone talks about it,""" start="00:12:27.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""but from the source, It doesn't get better""" start="00:12:30.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""than that, being able to write with""" start="00:12:32.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""highlighting, with syntax highlighting,""" start="00:12:34.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""with easy exports, running inline code""" start="00:12:38.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""blocks. And a lot of these programming""" start="00:12:40.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""classes, they make you code on a server.""" start="00:12:42.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And they just say, oh,""" start="00:12:45.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""SSH, and you can use Vim.""" start="00:12:46.500" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I can use Tramp, and I can use Emacs,""" start="00:12:48.560" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and I'm perfectly at home.""" start="00:12:50.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It's just such a seamless transition.""" start="00:12:52.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It's a really amazing way to do school.""" start="00:12:55.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Professors, you know, all they want is a PDF""" start="00:12:58.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""at the end of the day.""" start="00:12:59.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""They just want the paper on their desk.""" start="00:13:00.520" video="qanda-sharing" id="subtitle"]]
+[[!template text="""They're not so picky about how you get it""" start="00:13:03.420" video="qanda-sharing" id="subtitle"]]
+[[!template text="""there. They just want it in their hands.""" start="00:13:04.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So, so Emacs is, it's very usable.""" start="00:13:07.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It's very doable.""" start="00:13:08.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. I've got a little anecdote on this""" start="00:13:11.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""because you're speaking about the topic of""" start="00:13:13.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Emacs at university from the perspective of""" start="00:13:16.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""someone who is in computer science.""" start="00:13:17.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""But for me, in the humanities,""" start="00:13:19.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I just remember those professors who just""" start="00:13:22.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""required you not to use your laptop.""" start="00:13:24.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And I started with Emacs roughly at the same""" start="00:13:28.580" video="qanda-sharing" id="subtitle"]]
+[[!template text="""age as you did. And I was just using it for""" start="00:13:32.460" video="qanda-sharing" id="subtitle"]]
+[[!template text="""absolutely everything,""" start="00:13:33.160" video="qanda-sharing" id="subtitle"]]
+[[!template text="""for my organization, for producing papers.""" start="00:13:35.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And to be told that I could not use Emacs for""" start="00:13:37.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""a class for my note-taking,""" start="00:13:38.680" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I felt utterly naked in the face of what I""" start="00:13:43.660" video="qanda-sharing" id="subtitle"]]
+[[!template text="""needed to do. And yeah,""" start="00:13:46.500" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it's great to see those different""" start="00:13:47.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""experiences. And it just,""" start="00:13:49.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you're always going to be weird.""" start="00:13:50.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Like I was the weird guy using Emacs in the""" start="00:13:53.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""humanities, but I would have been weird using""" start="00:13:54.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Vim or any kind of computers with fancy""" start="00:13:58.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""editing.""" start="00:13:59.060" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh yeah, yeah. And I'm in humanities classes""" start="00:14:02.200" video="qanda-sharing" id="subtitle"]]
+[[!template text="""as well, I'm not in a strictly engineering,""" start="00:14:03.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""so people will see me writing an essay about,""" start="00:14:06.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you know, a philosophy essay,""" start="00:14:07.780" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I was working on an essay about Plato and""" start="00:14:09.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Aristotle, and they say,""" start="00:14:11.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""what are you coding, why are you coding your""" start="00:14:13.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""essay? And I say, well it's just the font""" start="00:14:16.620" video="qanda-sharing" id="subtitle"]]
+[[!template text="""looks a little bit different.""" start="00:14:17.560" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Everything else is the same words,""" start="00:14:19.300" video="qanda-sharing" id="subtitle"]]
+[[!template text="""just the font looks a little different.""" start="00:14:20.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""This is how I like to do it.""" start="00:14:22.160" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, those pesky monospace fonts are making us""" start="00:14:25.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""pass as hackers. But for everyone who is""" start="00:14:27.880" video="qanda-sharing" id="subtitle"]]
+[[!template text="""behind us, looking at our monitors.""" start="00:14:29.060" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Exactly.""" start="00:14:30.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right. A little bit of a remark,""" start="00:14:33.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I guess, towards me and what I said about""" start="00:14:35.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Vim. So, quoting, before NeoVim,""" start="00:14:37.480" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you had to do as much or more configuration""" start="00:14:39.140" video="qanda-sharing" id="subtitle"]]
+[[!template text="""to get basic editing done than in Emacs.""" start="00:14:41.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It's also slower with modal editing compared""" start="00:14:43.520" video="qanda-sharing" id="subtitle"]]
+[[!template text="""to Emacs key bindings because you have to""" start="00:14:45.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""press escape and 2 keys to get things done.""" start="00:14:47.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""While in Emacs, you only have to press Ctrl""" start="00:14:49.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""or Meta something to move or search or""" start="00:14:52.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""whatever, and then write.""" start="00:14:53.400" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And I tend to agree, I'm not familiar with""" start="00:14:55.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the ages before NeoVim,""" start="00:14:59.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""But I think we are mostly talking in terms of""" start="00:15:03.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""reputation and communication,""" start="00:15:04.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""like how is Vim considered nowadays or for""" start="00:15:08.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the last 10 years in the mindset of people""" start="00:15:10.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""choosing or about to choose an editor.""" start="00:15:13.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And, You know, I keep spitting the fact about""" start="00:15:17.620" video="qanda-sharing" id="subtitle"]]
+[[!template text="""VimScript being bad, but I'm going to be""" start="00:15:19.340" video="qanda-sharing" id="subtitle"]]
+[[!template text="""honest, I've never actually written any""" start="00:15:20.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""VimScript. I'm just parroting whatever the""" start="00:15:24.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""giants with shoulders I'm standing have been""" start="00:15:26.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""saying to me. And it's not very intelligent,""" start="00:15:28.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I know, but We also have a very limited pool""" start="00:15:31.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""of time, and I also think that this is a""" start="00:15:34.340" video="qanda-sharing" id="subtitle"]]
+[[!template text="""point that your talk addresses in a way.""" start="00:15:36.460" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Yes, we could be starting the massive quest""" start="00:15:40.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""of reading the Emacs manual or the ELISP""" start="00:15:42.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""introductory guide or the ELISP complete""" start="00:15:45.100" video="qanda-sharing" id="subtitle"]]
+[[!template text="""guide. A lot of people are trying,""" start="00:15:47.620" video="qanda-sharing" id="subtitle"]]
+[[!template text="""very highly motivated,""" start="00:15:48.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I'm going to get started on Emacs and I'm""" start="00:15:51.140" video="qanda-sharing" id="subtitle"]]
+[[!template text="""going to do things right.""" start="00:15:51.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""But the fact of the matter is,""" start="00:15:53.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it's not necessarily a good use of your time""" start="00:15:56.580" video="qanda-sharing" id="subtitle"]]
+[[!template text="""to get started like this,""" start="00:15:57.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""because there are so many things you're not""" start="00:16:00.680" video="qanda-sharing" id="subtitle"]]
+[[!template text="""going to understand, it kind of goes back,""" start="00:16:03.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""didn't say iBug this time,""" start="00:16:04.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I stopped myself, it kind of goes back to""" start="00:16:07.700" video="qanda-sharing" id="subtitle"]]
+[[!template text="""this I plus 1 Vigoski proximals on""" start="00:16:11.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""development stuff that I was talking about""" start="00:16:12.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""before. The manual is I plus 999.""" start="00:16:16.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Your video might be I plus 3 or I plus 2 and""" start="00:16:20.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the hand-holding really does wonders for""" start="00:16:23.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""people to eventually get closer to reading""" start="00:16:26.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the manuals and stuff like this.""" start="00:16:27.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah it's a great way just something about""" start="00:16:31.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""giving someone those practical""" start="00:16:33.160" video="qanda-sharing" id="subtitle"]]
+[[!template text="""demonstrations, that's something I really""" start="00:16:35.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""appreciate. A lot of these really nice""" start="00:16:36.860" video="qanda-sharing" id="subtitle"]]
+[[!template text="""presentations we've had today and yesterday""" start="00:16:38.520" video="qanda-sharing" id="subtitle"]]
+[[!template text="""show real life use cases and we get to see""" start="00:16:41.920" video="qanda-sharing" id="subtitle"]]
+[[!template text="""people typing and they're working how they""" start="00:16:44.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""would normally work. And that's a great way""" start="00:16:46.680" video="qanda-sharing" id="subtitle"]]
+[[!template text="""to begin to understand how you can apply a""" start="00:16:49.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""tool to yourself because at the end of the""" start="00:16:50.680" video="qanda-sharing" id="subtitle"]]
+[[!template text="""day Emacs is a tool for us.""" start="00:16:52.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""You know we might take joy in it,""" start="00:16:53.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it helps us be more productive,""" start="00:16:54.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it's fun but we're using it for a certain end""" start="00:16:58.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and you know if we how we can understand to""" start="00:17:00.880" video="qanda-sharing" id="subtitle"]]
+[[!template text="""get to those ends and what those ends might""" start="00:17:03.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""even be. It's just great to see other people""" start="00:17:05.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""bring that forth for you.""" start="00:17:07.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay, great. Well, I don't see any more""" start="00:17:12.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""questions in the chat currently,""" start="00:17:13.980" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and I don't see anyone who's joined us on the""" start="00:17:17.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""blue button. We are near the time that I said""" start="00:17:19.599" video="qanda-sharing" id="subtitle"]]
+[[!template text="""we've got about 40 seconds to go until we""" start="00:17:22.420" video="qanda-sharing" id="subtitle"]]
+[[!template text="""were due to end. Jacob,""" start="00:17:24.060" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I kind of want to give you the microphone for""" start="00:17:26.099" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the end. Do you have anything to say?""" start="00:17:27.339" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Like you've talked about your YouTube""" start="00:17:28.359" video="qanda-sharing" id="subtitle"]]
+[[!template text="""channel, we've already ensured that the links""" start="00:17:30.480" video="qanda-sharing" id="subtitle"]]
+[[!template text="""will be everywhere on the talk page,""" start="00:17:31.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""in the pad, on IRC. But is there anything""" start="00:17:34.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""else you'd like to add?""" start="00:17:35.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Because you're the last speaker of EmacsCon,""" start="00:17:37.120" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and you've got the tough responsibility of""" start="00:17:39.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""finishing it.""" start="00:17:42.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh, well, that's not tough at all when we've""" start="00:17:45.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""had 2 days. I mean, so many people,""" start="00:17:47.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""so many presenters coming together and like I""" start="00:17:51.300" video="qanda-sharing" id="subtitle"]]
+[[!template text="""said right at the beginning to Leo,""" start="00:17:52.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""putting your face out there,""" start="00:17:54.920" video="qanda-sharing" id="subtitle"]]
+[[!template text="""putting your voice out there,""" start="00:17:56.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""putting yourself out there,""" start="00:17:57.620" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it's such a great way to come together""" start="00:18:00.060" video="qanda-sharing" id="subtitle"]]
+[[!template text="""because Emacs is not the standard.""" start="00:18:02.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""You know, I've tried to teach my friends""" start="00:18:04.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Emacs, I've tried to show it to them.""" start="00:18:06.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""You know, some people you get it or you""" start="00:18:08.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""don't. And the people who get it,""" start="00:18:10.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""we're not all in the same place.""" start="00:18:11.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And it's great.""" start="00:18:13.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm interrupting you for a second because I""" start="00:18:15.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""think we were supposed to kill the the cron""" start="00:18:17.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""which starts the next meeting and it hasn't.""" start="00:18:20.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Let me try to fix it. I'll talk to production""" start="00:18:22.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Do I wait or keep going?""" start="00:18:25.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: in a second. Just wait a bit.""" start="00:18:27.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I'm very sorry. I've given you the mic and""" start="00:18:29.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""then it just... Okay let me just check your""" start="00:18:35.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""production.""" start="00:18:35.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""What? All right, Jason.""" start="00:18:59.660" video="qanda-sharing" id="subtitle"]]
+[[!template text="""All right, Jacob, I'm going to put us""" start="00:19:00.880" video="qanda-sharing" id="subtitle"]]
+[[!template text="""manually back on track.""" start="00:19:02.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So give me just a second.""" start="00:19:03.080" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right.""" start="00:19:04.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm going to manually type the URL,""" start="00:19:09.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""because it's a janky setup that we've got""" start="00:19:12.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""right now, when whenever it's not working.""" start="00:19:13.980" video="qanda-sharing" id="subtitle"]]
+[[!template text="""All right. So tps slash slash bbb emacs first""" start="00:19:20.400" video="qanda-sharing" id="subtitle"]]
+[[!template text="""dot org html. No, that's not the 1.""" start="00:19:23.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Let me try to type it.""" start="00:19:27.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Probably. Bbbemaxfirst.""" start="00:19:27.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""L5H, R5D, BH0 Okay, we're getting back Okay,""" start="00:19:42.700" video="qanda-sharing" id="subtitle"]]
+[[!template text="""sorry folks about this We are,""" start="00:19:44.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Jacob, We're back online.""" start="00:19:45.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I'm really sorry about this.""" start="00:19:46.800" video="qanda-sharing" id="subtitle"]]
+[[!template text="""It's just that Sasha's script kicked in.""" start="00:19:49.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I did tell you we were supposed to finish at""" start="00:19:51.140" video="qanda-sharing" id="subtitle"]]
+[[!template text="""30. And because Sasha is busy presenting in""" start="00:19:53.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the other room, sadly,""" start="00:19:54.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""we got yanked again. So Jacob,""" start="00:19:57.100" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I'm very sorry for the interruption.""" start="00:19:58.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And you were retelling people about something""" start="00:20:01.220" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you told me during the check-ins.""" start="00:20:02.320" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Do you mind restarting this?""" start="00:20:04.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, sure. Well, you said I have the no""" start="00:20:09.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""small task of making the last words from""" start="00:20:12.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""presenters and not the organizers at""" start="00:20:14.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""EmacsConf. And I said,""" start="00:20:16.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""well, that's not hard at all.""" start="00:20:17.880" video="qanda-sharing" id="subtitle"]]
+[[!template text="""How many speakers have we had?""" start="00:20:20.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""30? And it's so incredible these past,""" start="00:20:24.480" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you know, today and yesterday to have all""" start="00:20:26.880" video="qanda-sharing" id="subtitle"]]
+[[!template text="""been able to come together and not just share""" start="00:20:29.700" video="qanda-sharing" id="subtitle"]]
+[[!template text="""our ideas and our code and how we do things,""" start="00:20:33.920" video="qanda-sharing" id="subtitle"]]
+[[!template text="""but to share our faces and our voices and our""" start="00:20:38.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""lives, you know a little bit of our lives.""" start="00:20:39.780" video="qanda-sharing" id="subtitle"]]
+[[!template text="""You know to have the passion to even spend""" start="00:20:42.100" video="qanda-sharing" id="subtitle"]]
+[[!template text="""the time to on your weekend to watch this""" start="00:20:44.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""means that you have some sort of care about""" start="00:20:47.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Emacs and it adds to your life.""" start="00:20:49.160" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And you know those Emacs people aren't""" start="00:20:51.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""everywhere. I've tried to bring my friends""" start="00:20:53.620" video="qanda-sharing" id="subtitle"]]
+[[!template text="""onto Emacs and it seems like you know you're""" start="00:20:56.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""an Emacs person or you're not really an Emacs""" start="00:20:58.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""person. And those Emacs people can be really""" start="00:21:02.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""spread out. So it's great that we're able to""" start="00:21:04.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""come together and share a little bit of""" start="00:21:07.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""ourselves, a little bit of how we do things.""" start="00:21:09.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And like I said in my talk,""" start="00:21:12.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""just increase our own joy in Emacs by coming""" start="00:21:15.660" video="qanda-sharing" id="subtitle"]]
+[[!template text="""together and being able to share our joy in""" start="00:21:19.360" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Emacs. And of course, thank you to all the""" start="00:21:21.760" video="qanda-sharing" id="subtitle"]]
+[[!template text="""organizers and everyone who's contributed in""" start="00:21:25.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""any way. It means a lot to even the smallest""" start="00:21:27.980" video="qanda-sharing" id="subtitle"]]
+[[!template text="""member, the biggest member of our community.""" start="00:21:29.700" video="qanda-sharing" id="subtitle"]]
+[[!template text="""We're all really glad to be able to come""" start="00:21:33.480" video="qanda-sharing" id="subtitle"]]
+[[!template text="""together like this and share and meet each""" start="00:21:36.300" video="qanda-sharing" id="subtitle"]]
+[[!template text="""other and give nice talks.""" start="00:21:37.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, thank you so much,""" start="00:21:40.200" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Jacob. And perhaps to reassure people,""" start="00:21:42.340" video="qanda-sharing" id="subtitle"]]
+[[!template text="""because yes, right now it feels like we are""" start="00:21:44.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""legions, all of us here in the same room""" start="00:21:47.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""watching the same thing.""" start="00:21:47.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""We are the Emacs' and that's a very good""" start="00:21:50.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""feeling to have. But you know,""" start="00:21:52.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""first, there's 1 thing that is certain,""" start="00:21:54.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""almost 99% certain, it's the fact that next""" start="00:21:58.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""year there'll probably be another EmacsConf""" start="00:22:00.300" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and there will be more Emacs versions,""" start="00:22:02.920" video="qanda-sharing" id="subtitle"]]
+[[!template text="""there will be more augmented versions,""" start="00:22:04.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""there will be more people doing cool stuff on""" start="00:22:07.300" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Melpa, on ELPA, etc. So it is still a vibrant""" start="00:22:11.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""community. But in case you're craving this""" start="00:22:14.200" video="qanda-sharing" id="subtitle"]]
+[[!template text="""little extra in-person stuff,""" start="00:22:17.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Sash and myself, we are maintaining a list of""" start="00:22:20.280" video="qanda-sharing" id="subtitle"]]
+[[!template text="""all the Emacs user group.""" start="00:22:21.560" video="qanda-sharing" id="subtitle"]]
+[[!template text="""This is on the Emacs wiki.""" start="00:22:22.680" video="qanda-sharing" id="subtitle"]]
+[[!template text="""This is what I'm sharing on my screen""" start="00:22:24.140" video="qanda-sharing" id="subtitle"]]
+[[!template text="""currently. And we try to organize them by""" start="00:22:27.500" video="qanda-sharing" id="subtitle"]]
+[[!template text="""regional region, sorry,""" start="00:22:30.100" video="qanda-sharing" id="subtitle"]]
+[[!template text="""parts of the world like North America,""" start="00:22:31.560" video="qanda-sharing" id="subtitle"]]
+[[!template text="""South America, Europe,""" start="00:22:32.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Africa, Asia. And we have a list of upcoming""" start="00:22:36.300" video="qanda-sharing" id="subtitle"]]
+[[!template text="""events and a lot of them are still online.""" start="00:22:39.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Ever since we had the entire pandemic stuff,""" start="00:22:41.420" video="qanda-sharing" id="subtitle"]]
+[[!template text="""a lot of the workshops moved online and,""" start="00:22:46.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""sorry, I had someone whispering in my ear.""" start="00:22:49.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""A lot of them moved online and they are still""" start="00:22:53.100" video="qanda-sharing" id="subtitle"]]
+[[!template text="""online now because they've realized it's a""" start="00:22:54.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""very great way to get more people in the same""" start="00:22:57.100" video="qanda-sharing" id="subtitle"]]
+[[!template text="""place. And whilst it's great to have""" start="00:22:59.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""in-person meetings, We do this with Emacs""" start="00:23:01.560" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Paris. Emacs Paris actually is happening is""" start="00:23:05.140" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it? I think, oh I'm going to need to tell""" start="00:23:07.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Sasha that apparently yes we do not have the""" start="00:23:10.200" video="qanda-sharing" id="subtitle"]]
+[[!template text="""next event for Emacs Paris which is next""" start="00:23:12.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Tuesday and it is in person but for everyone""" start="00:23:14.700" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and including you Jacob if you find a""" start="00:23:18.580" video="qanda-sharing" id="subtitle"]]
+[[!template text="""workshop in North America that is working for""" start="00:23:20.460" video="qanda-sharing" id="subtitle"]]
+[[!template text="""you, I'm thinking about Emacs SF,""" start="00:23:22.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""which I've attended multiple times,""" start="00:23:24.660" video="qanda-sharing" id="subtitle"]]
+[[!template text="""and Emacs Austin as well,""" start="00:23:27.980" video="qanda-sharing" id="subtitle"]]
+[[!template text="""that I've been to once,""" start="00:23:29.060" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I think, It would be a lovely experience and""" start="00:23:31.640" video="qanda-sharing" id="subtitle"]]
+[[!template text="""a way to, most of them are every month,""" start="00:23:34.160" video="qanda-sharing" id="subtitle"]]
+[[!template text="""it would be a good way for you to stay in""" start="00:23:36.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""touch and to continue this sense of""" start="00:23:39.240" video="qanda-sharing" id="subtitle"]]
+[[!template text="""in-person-ness about Emacs.""" start="00:23:40.580" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Wonderful. All right, thank you so much.""" start="00:23:46.560" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Should I drop off of our call now and let you""" start="00:23:48.900" video="qanda-sharing" id="subtitle"]]
+[[!template text="""close things up?""" start="00:23:50.000" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, we're probably gonna close thing up.""" start="00:23:52.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Let me just check on Sasha.""" start="00:23:53.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Sasha is obviously answering many many""" start="00:23:55.380" video="qanda-sharing" id="subtitle"]]
+[[!template text="""questions about how we are organizing""" start="00:23:57.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""EmacsConf. So Jacob, I'm gonna let you go.""" start="00:23:59.540" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Thank you so much for your presentation and""" start="00:24:01.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""your answers. And maybe we'll see you next""" start="00:24:03.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""year. Or maybe a workshop.""" start="00:24:05.020" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Who knows? I'm so lucky I got you as my Q&A.""" start="00:24:06.820" video="qanda-sharing" id="subtitle"]]
+[[!template text="""When I saw you at my first Emacs Conf 2 years""" start="00:24:10.440" video="qanda-sharing" id="subtitle"]]
+[[!template text="""ago, I thought, maybe this guy will do mine.""" start="00:24:12.740" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Very nice. Thank you. I'm glad I was able to""" start="00:24:18.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""generate such a feeling.""" start="00:24:19.920" video="qanda-sharing" id="subtitle"]]
+[[!template text="""All right, I'll get going now.""" start="00:24:21.600" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Jacob, have a wonderful evening.""" start="00:24:23.260" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 0]: And here you are. You too,""" start="00:24:23.940" video="qanda-sharing" id="subtitle"]]
+[[!template text="""see you later.""" start="00:24:24.400" video="qanda-sharing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Bye-bye. And folks, what are we going to do""" start="00:24:28.140" video="qanda-sharing" id="subtitle"]]
+[[!template text="""right now? I'm going to set everything up so""" start="00:24:30.300" video="qanda-sharing" id="subtitle"]]
+[[!template text="""that we can get Sasha finished on the talk.""" start="00:24:32.520" video="qanda-sharing" id="subtitle"]]
+[[!template text="""If you're watching, squinting with both""" start="00:24:34.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""streams, you can go to Sasha's room,""" start="00:24:37.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I mean, the development track,""" start="00:24:39.520" video="qanda-sharing" id="subtitle"]]
+[[!template text="""to maybe catch some of the answers by Sasha.""" start="00:24:42.180" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Otherwise, we'll be back in roughly 5 to 10""" start="00:24:45.040" video="qanda-sharing" id="subtitle"]]
+[[!template text="""minutes to do the closing remarks on this""" start="00:24:46.960" video="qanda-sharing" id="subtitle"]]
+[[!template text="""channel. In the meantime,""" start="00:24:47.720" video="qanda-sharing" id="subtitle"]]
+[[!template text="""I'll put on some music.""" start="00:24:48.840" video="qanda-sharing" id="subtitle"]]
+[[!template text="""So bear with us and I'll see you shortly.""" start="00:24:51.300" video="qanda-sharing" id="subtitle"]]
+[[!template text="""And closing here. This BBB recording.""" start="00:25:15.660" video="qanda-sharing" id="subtitle"]]
+[[!template text="""Yay!""" start="00:25:16.360" video="qanda-sharing" id="subtitle"]]
+
+Questions or comments? Please e-mail [jakebox0@protonmail.com](mailto:jakebox0@protonmail.com?subject=Comment%20for%20EmacsConf%202023%20sharing%3A%20Sharing%20Emacs%20is%20Caring%20Emacs%3A%20Emacs%20education%20and%20why%20I%20embraced%20video)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/sharing-before.md b/2023/info/sharing-before.md
new file mode 100644
index 00000000..ae63e36c
--- /dev/null
+++ b/2023/info/sharing-before.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 17-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="sharing-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sharing-mainVideo" data="""
+00:00.000 Introduction
+00:49.000 My journey of learning
+04:03.400 Straightforward Emacs
+05:32.120 Videos
+07:16.400 Clarity
+08:10.360 High-quality and accessible content
+09:15.920 The personal aspect
+11:48.120 Unity
+
+"""]]<div></div>Duration: 16:34 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.opus">Download --main.opus (8.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--previous.mkv">Download --previous.mkv (377MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.txt">Download .txt</a></li><li><a href="https://toobnix.org/w/3b5XfkceUaRjJuN5Pumgee">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="sharing-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="sharing-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus"></audio></div><div></div>Duration: 25:19 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm">Download --answers.webm (44MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sharing-nav.md b/2023/info/sharing-nav.md
new file mode 100644
index 00000000..2d903a48
--- /dev/null
+++ b/2023/info/sharing-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/web">Emacs saves the Web (maybe)</a>
+Next by track: <a href="/2023/talks/matplotllm">MatplotLLM, iterative natural language data visualization in org-babel</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/solo-after.md b/2023/info/solo-after.md
new file mode 100644
index 00000000..f99447c9
--- /dev/null
+++ b/2023/info/solo-after.md
@@ -0,0 +1,761 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="solo-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""Hi there, I'm Howard Abrams. You may remember me""" start="00:00:00.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""from past conference talks""" start="00:00:05.560" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""as &quot;Literate DevOps and the Temple of Doom&quot;""" start="00:00:07.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and &quot;Using Eshell for Fun and Profit&quot;.""" start="00:00:10.520" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I'm here to talk to you about my latest Emacs project:""" start="00:00:13.400" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""playing games, solo role-playing games.""" start="00:00:16.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I started playing RPGs when I got my first copy""" start="00:00:19.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""of Dungeons & Dragons when I was 12.""" start="00:00:23.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Yes, my original copy burned""" start="00:00:25.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""in the Great Satanic Panic of the 1980s,""" start="00:00:28.280" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""but that's another story.""" start="00:00:30.560" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I started playing other RPGs like GURPS.""" start="00:00:32.360" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""These are some of my notes.""" start="00:00:37.920" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Back then, I was typing them in Emacs,""" start="00:00:40.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""but I formatted them with LaTeX.""" start="00:00:42.560" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Later, when I was introducing my kids""" start="00:00:46.080" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""to role-playing games,""" start="00:00:49.080" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I actually typed them up still in Emacs,""" start="00:00:50.840" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""but now formatted them for a tablet.""" start="00:00:53.581" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I wrote a little JavaScript code""" start="00:00:57.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""that allowed me to click on it, and it would roll dice,""" start="00:00:59.320" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""generate random events, keep track of turn order,""" start="00:01:03.120" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""you know, everything,""" start="00:01:06.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""so I didn't have to slow down the action of the game.""" start="00:01:07.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Well, when my kids got older,""" start="00:01:10.120" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I still managed to sneak in a game of D&D""" start="00:01:13.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""once a week at lunch.""" start="00:01:15.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""This pastime came to a screeching halt with the pandemic.""" start="00:01:17.320" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Solo RPGs""" start="00:01:20.680" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""I turned to playing role-playing games by myself""" start="00:01:20.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""to get my fix. Playing these silly elf games in solo mode""" start="00:01:23.640" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""has been part of the game for many years,""" start="00:01:28.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""but with so many of us stuck at home,""" start="00:01:29.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""solo role-playing games really expanded,""" start="00:01:32.560" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""creative people releasing some amazing ideas.""" start="00:01:35.120" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""What's a solo RPG like? Well, it's somewhere in the middle""" start="00:01:40.280" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""of writing your own story, where anything's possible,""" start="00:01:44.400" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""but you've got to do all the imaginative work;""" start="00:01:47.520" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""or reading a choose-your-own-adventure book,""" start="00:01:50.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""where the text is given to you,""" start="00:01:53.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and you have free, a few predetermined paths;""" start="00:01:55.240" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and tactical battle games,""" start="00:01:59.080" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""where dice determines everything.""" start="00:02:01.040" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""It kind of fits in the sweet spot between those.""" start="00:02:03.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""While I started removing the Game Master""" start="00:02:05.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""using the Mythic GM Emulator,""" start="00:02:08.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Ironsworn really captivated me.""" start="00:02:12.120" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I began with dice, pencils, notebooks, you know,""" start="00:02:15.320" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""just like when I was a kid. But taking notes on paper?""" start="00:02:19.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Yeah, you know me. That's not my jam. Org mode is.""" start="00:02:23.360" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""And, you know, notes have to be in Org,""" start="00:02:28.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""well, why not write a little dice roller in Lisp?""" start="00:02:31.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Well, when Shawn Tomkin released his Ironsworn""" start="00:02:35.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""under the Creative Commons, well,""" start="00:02:38.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I could just download the entire text.""" start="00:02:41.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I figured I could just render the entire game in Emacs.""" start="00:02:43.920" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Demo""" start="00:02:47.440" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""All right, enough talk. Let's get some Emacs action here,""" start="00:02:47.440" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""while I show you a bit of my game.""" start="00:02:51.240" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""When playing a solo RPG,""" start="00:02:55.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I jot down the story notes in an Org file.""" start="00:02:57.520" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I mean, did you expect anything less from me?""" start="00:02:59.760" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I alternate between lengthy prose and short notes.""" start="00:03:02.760" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""As I'm both the writer and the audience,""" start="00:03:07.760" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""the goal is just enjoyment.""" start="00:03:10.520" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""So, this document is both a record log of my game sessions,""" start="00:03:12.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""as well as my character's character sheet.""" start="00:03:17.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""In most RPGs, a player's focus is a character sheet""" start="00:03:20.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""that lists all the attributes, the stats, equipment,""" start="00:03:24.520" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""powers, you know, that sort of thing.""" start="00:03:27.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""For my game, I wanted the focus to be the prose,""" start="00:03:28.760" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""or at least the notes.""" start="00:03:32.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""So, I put down all the stats as Org mode properties.""" start="00:03:34.560" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Now, I can collapse a property drawer""" start="00:03:38.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and have functions""" start="00:03:40.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""that just grab values from these properties.""" start="00:03:42.120" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""All right, let's play. While not important to my talk,""" start="00:03:45.760" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I'm in the middle of a game. My character, Tegan,""" start="00:03:50.080" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""promised to help a village by tracking down""" start="00:03:52.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""the son of a village chief. A less-than-stellar roll""" start="00:03:54.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""meant I didn't catch him before he entered""" start="00:03:59.240" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""the mysterious underground structure""" start="00:04:01.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""of a relic of an ancient people.""" start="00:04:03.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I just finished playing out the journey,""" start="00:04:06.400" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and he's about to enter into the Catacombs of Svala's Blood.""" start="00:04:08.400" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Randomization""" start="00:04:11.760" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""Why that name? Well, that was actually what came up""" start="00:04:11.760" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""from an extensive random number generator that I wrote.""" start="00:04:15.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""As I wrote more and more functions""" start="00:04:19.640" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""to help me play this game,""" start="00:04:21.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and since I don't play all the time,""" start="00:04:23.280" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I created hydra. I can roll dice,""" start="00:04:25.920" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I can roll dice challenges against the character stats,""" start="00:04:30.360" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I can adjust stats. Lots of random generators""" start="00:04:34.080" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""come from this oracle section.""" start="00:04:38.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""For instance, are footprints going through the door?""" start="00:04:39.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I press `c`, and I'm prompted with how likely.""" start="00:04:43.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Since the villagers gave Tegan vague directions,""" start="00:04:46.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and he didn't see any signs the contrary,""" start="00:04:51.080" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I chose &quot;likely&quot;. And, well, it originally said yes,""" start="00:04:53.240" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and that's why I jotted this information down.""" start="00:04:58.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Now, this is different than my character's ability""" start="00:05:01.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""to notice the prints. This is about generating the story,""" start="00:05:03.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""something that the game master would do""" start="00:05:07.640" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""in a typical role-playing game.""" start="00:05:10.280" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Now, if I wanted to name something,""" start="00:05:12.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""or even the current weather,""" start="00:05:14.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I have random tables with the `C` keystroke.""" start="00:05:16.040" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Hmm, weather. Oh, it's summer, so hey,""" start="00:05:20.400" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""it's nice and clear. All right, let's play.""" start="00:05:27.280" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Moves""" start="00:05:31.960" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""The action in Ironsworn,""" start="00:05:31.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""like other Powered by the Apocalypse games,""" start="00:05:34.240" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""is driven by moves. So, I hit the `m` key,""" start="00:05:37.040" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and all the moves show up.""" start="00:05:44.360" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Now, I don't think I need to espouse""" start="00:05:46.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""the virtues of completing-read enhancements like Ivy.""" start="00:05:49.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Here, I'm using orderless with vertico""" start="00:05:52.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""to help me find my choices.""" start="00:05:55.560" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Since I've discovered a site, let's play that move.""" start="00:05:57.720" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Reference""" start="00:06:03.640" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""I seldom remember the details for the moves,""" start="00:06:03.640" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""so I figured, why not put the text of the book""" start="00:06:06.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""in an Org file and show it in a side window?""" start="00:06:09.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""The prompt at the bottom, asking for a name,""" start="00:06:11.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""is driven by the content in the displayed Org file.""" start="00:06:15.440" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""This allows me to enhance my game without""" start="00:06:18.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""changing the original code. So, let's call this story arc,""" start="00:06:21.120" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Exploring the Catacombs of Svala's Blood.""" start="00:06:25.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Ooh, sounds epic.""" start="00:06:31.840" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Story arcs""" start="00:06:34.680" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""Ironsworn tracks the beats of a narrative,""" start="00:06:34.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""so major plot points take up more room in the fiction""" start="00:06:37.240" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""than minor plot points.""" start="00:06:40.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Similar games like Blades in the Dark""" start="00:06:42.760" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""use numbers to track these, so you can say something like,""" start="00:06:45.040" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""we're three quarters of the way through this story arc.""" start="00:06:48.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Ironsworn just uses labels,""" start="00:06:51.080" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and while I want this particular story arc""" start="00:06:53.120" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""to be significant, I really just want to get in,""" start="00:06:55.840" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""find this person, and get out.""" start="00:06:59.520" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""So, I'm going to call this &quot;short&quot;.""" start="00:07:00.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Next, it's asking about an Org mode header placement.""" start="00:07:04.040" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""While I originally wanted my Org files""" start="00:07:09.280" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""to be completely flexible,""" start="00:07:12.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""one thing I noticed in playing""" start="00:07:13.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""is that a pattern always emerged.""" start="00:07:15.920" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""The story became a tree. You see, story arcs""" start="00:07:18.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""were just a series of montages or scenes,""" start="00:07:22.640" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and each of those were made of a series of events""" start="00:07:25.560" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and challenges to overcome.""" start="00:07:27.920" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""So, each Org mode header has a track,""" start="00:07:29.120" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""which often becomes the number of subheadings.""" start="00:07:32.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""At any point, I can see how much track is being made.""" start="00:07:35.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""So, for instance, this one seems to be""" start="00:07:40.640" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""about a third of the way through.""" start="00:07:47.240" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Using different stats""" start="00:07:48.680" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""So, let's dive into this ancient place.""" start="00:07:48.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Since I've been walking through a misty forest,""" start="00:07:52.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I can imagine vines hiding an immense door""" start="00:07:55.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and a humid, earthy smell as I peer inside.""" start="00:07:59.320" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""But I don't have to write that stuff down,""" start="00:08:01.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""or if I want to practice my writing, I can.""" start="00:08:04.320" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I can imagine the place is dark,""" start="00:08:06.920" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""so Tegan lights a torch""" start="00:08:09.360" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""before peering into this obscure world.""" start="00:08:10.840" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""As this move mentions,""" start="00:08:13.040" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""the next move to make is called Delve the Depths.""" start="00:08:15.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""As soon as I select this move,""" start="00:08:20.280" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""it shows up on the side window, and explains that,""" start="00:08:26.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""depending on how you're moving through""" start="00:08:31.320" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""this ancient catacombs,""" start="00:08:34.400" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""is what kind of stat I roll against,""" start="00:08:36.240" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and those stats show up at the bottom.""" start="00:08:38.760" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""You know, if I'm sneaking around, you roll against &quot;shadow&quot;.""" start="00:08:41.040" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""If you're trying to go as fast as you can, it's &quot;edge&quot;.""" start="00:08:45.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""But I kind of imagine that he's thinking through,""" start="00:08:47.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""being very careful about it.""" start="00:08:51.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""So, I'm going to select &quot;wits&quot;.""" start="00:08:53.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""And I don't have any modifiers.""" start="00:08:55.760" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Just about every one of my stats prompts me""" start="00:08:57.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""if I want to add or subtract any values.""" start="00:08:59.560" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Dice rolls""" start="00:09:02.960" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""A miss. I should explain how the dice roll in this game.""" start="00:09:02.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""The downside to Ironsworn is that""" start="00:09:09.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""the dice mechanics are more cumbersome than other games.""" start="00:09:13.400" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""You roll a 6-sided die, add to it your relevant stat,""" start="00:09:16.840" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""plus any modifiers. Next, you roll two 10-sided die""" start="00:09:20.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and see how it compares.""" start="00:09:24.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Of course, I programmed this in Lisp,""" start="00:09:25.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""but when I displayed it, I wanted to see all the dice.""" start="00:09:28.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""And I also just wanted to see the end results.""" start="00:09:31.600" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Dangers""" start="00:09:34.800" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""So I colored it. I rolled a miss,""" start="00:09:34.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""which means I need to reveal a danger.""" start="00:09:37.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Sure, I could imagine all sorts of dangers,""" start="00:09:39.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""but this is a game.""" start="00:09:43.520" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I've already made a random generator for dangers.""" start="00:09:44.360" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""In fact, I've made a random generator""" start="00:09:48.360" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""for dangers in an ancient underkeep.""" start="00:09:51.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Discovery undermines or complicates the quest.""" start="00:09:55.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Hmm, a complication for finding the chief's son?""" start="00:10:00.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""What about a labyrinth full of hallways and levels""" start="00:10:09.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""with lots of choices and almost no way of finding them?""" start="00:10:13.320" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Yeah, that sounds like it fits pretty well.""" start="00:10:16.600" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""A strong success""" start="00:10:19.680" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""Time for another move. This time, we're going to""" start="00:10:19.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""gather information,""" start="00:10:26.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""see if we can figure out which way to go.""" start="00:10:28.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""A strong hit. Excellent.""" start="00:10:32.280" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I imagine Tegan noticing footprints in the dust""" start="00:10:34.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and knowing where to go.""" start="00:10:38.400" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""The game suggests that when you get a strong success,""" start="00:10:40.440" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""you can increase your momentum.""" start="00:10:44.320" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""These game mechanics""" start="00:10:45.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""come into play later, but this function here""" start="00:10:48.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""allows me to adjust that stat +2.""" start="00:10:51.755" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I don't even have to scroll to the top of the buffer""" start="00:10:57.881" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and edit that value in my properties.""" start="00:11:01.461" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""At any point, I can take a look at those stats""" start="00:11:04.821" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and see how they measure up.""" start="00:11:08.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Again, I don't have to scroll up""" start="00:11:10.440" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and take a look at my properties""" start="00:11:13.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""at the top of the Org mode file.""" start="00:11:14.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""That's how I play the game.""" start="00:11:16.560" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""It's just a recursive loop of playing a move,""" start="00:11:19.240" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""rolling some dice to see how it works,""" start="00:11:24.640" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""trying to answer the question""" start="00:11:27.320" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""based on your own imagination or random tables,""" start="00:11:30.160" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""which the game calls oracles,""" start="00:11:33.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and play creatively until you decide to take a break""" start="00:11:35.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and pick it up another time.""" start="00:11:41.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I think you get the gist of how I play""" start="00:11:42.400" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""this dice and pencil game in Org Mode.""" start="00:11:47.000" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Other solo RPGs""" start="00:11:49.680" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""However, I found more solo RPGs to play.""" start="00:11:49.680" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""And of course, I want to render them in Emacs too.""" start="00:11:54.040" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""This code for Ironsworn was a bit too specific,""" start="00:11:57.320" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""so I decided to create a role-playing game toolkit.""" start="00:12:00.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""This project is still in the early stages,""" start="00:12:04.760" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""but I've created some functions""" start="00:12:09.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""for mimicking rolling dice, including a mini-DSL for""" start="00:12:12.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""making dice mechanics""" start="00:12:16.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""typical of many role-playing game systems.""" start="00:12:19.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I've also ported over the random table system.""" start="00:12:22.840" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""A text file can just list entries to be displayed at random.""" start="00:12:26.520" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""I love that I can put dice expression""" start="00:12:30.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and word choices in the entries.""" start="00:12:33.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""One type of random table allows you""" start="00:12:35.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""to essentially copy and paste a table""" start="00:12:39.440" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""from a published game into a text file.""" start="00:12:41.560" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""A frequency table is what I'm calling""" start="00:12:43.800" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""a list of random entries where some entries show up""" start="00:12:47.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""more often than others. I'm working on generalizing""" start="00:12:50.880" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""the character sheet attributes as Org properties,""" start="00:12:55.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""so if you're interested, check out the project at Codeberg.""" start="00:12:59.960" video="mainVideo-solo" id="subtitle"]]
+
+[[!template new="1" text="""Conclusion""" start="00:13:04.720" video="mainVideo-solo" id="subtitle"]]
+
+[[!template text="""The point of my presentation is not to show off Ironsworn,""" start="00:13:04.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""how I programmed it, or even this new toolkit.""" start="00:13:10.360" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""You see, most engineers,""" start="00:13:14.080" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""when they get an idea for a game like mine,""" start="00:13:17.560" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""would make a web app. Nothing wrong with it.""" start="00:13:20.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""More people can play it,""" start="00:13:24.080" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""but web apps suffer from text entry.""" start="00:13:25.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""And don't tell me you prefer the keyboard interface""" start="00:13:28.200" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""to Google Docs. Oh, and the JavaScript framework du jour?""" start="00:13:30.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Oh, I mean, that's a huge barrier of entry""" start="00:13:35.960" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""when all you want to do""" start="00:13:40.400" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""is have a bit of fun prototyping a game.""" start="00:13:42.040" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""What I'd like to impress upon you""" start="00:13:44.360" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""is that hacking Emacs to make personal games is a trip.""" start="00:13:48.480" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Learning Lisp is, it's easy.""" start="00:13:54.000" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""And more, Emacs Lisp has some, well sure,""" start="00:13:57.360" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""it has some cruft. But really, some of those features""" start="00:14:00.920" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""that I would hate at a distributed system at work,""" start="00:14:04.520" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""like global variables, makes hacking easier""" start="00:14:07.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""when you just want to have some fun in your own system.""" start="00:14:10.920" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""So, grab your laptop, sink into your comfy chair,""" start="00:14:14.720" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""pour yourself a glass of scotch,""" start="00:14:19.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""and craft yourself an enjoyable evening.""" start="00:14:21.600" video="mainVideo-solo" id="subtitle"]]
+[[!template text="""Happy hacking, my friends.""" start="00:14:24.720" video="mainVideo-solo" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+<a name="solo-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: Right. Okay, so hi everyone.""" start="00:00:02.899" video="qanda-solo" id="subtitle"]]
+[[!template text="""We are now live. Hi Howard,""" start="00:00:04.540" video="qanda-solo" id="subtitle"]]
+[[!template text="""how are you doing? Great.""" start="00:00:06.339" video="qanda-solo" id="subtitle"]]
+[[!template text="""Lovely to hear. As usual,""" start="00:00:09.960" video="qanda-solo" id="subtitle"]]
+[[!template text="""it's always a pleasure to see your""" start="00:00:11.980" video="qanda-solo" id="subtitle"]]
+[[!template text="""presentation and the amount of time and""" start="00:00:14.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""energy you put into it.""" start="00:00:15.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""Slightly sorry about the shoppiness of the""" start="00:00:17.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""broadcast. Do not worry,""" start="00:00:18.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""the talk will be in its full 30 fps quality""" start="00:00:22.700" video="qanda-solo" id="subtitle"]]
+[[!template text="""on the website after the conference.""" start="00:00:24.779" video="qanda-solo" id="subtitle"]]
+[[!template text="""Actually, right now. It's available right""" start="00:00:26.759" video="qanda-solo" id="subtitle"]]
+[[!template text="""now. As usual, feel free to ask your""" start="00:00:30.099" video="qanda-solo" id="subtitle"]]
+[[!template text="""questions in the in the pad.""" start="00:00:31.560" video="qanda-solo" id="subtitle"]]
+[[!template text="""We've linked it both on the talk page and on""" start="00:00:34.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""IRC. I think I am on the right 1,""" start="00:00:38.400" video="qanda-solo" id="subtitle"]]
+[[!template text="""right? This is a solo.""" start="00:00:40.080" video="qanda-solo" id="subtitle"]]
+[[!template text="""Guys, questions, where are they?""" start="00:00:42.660" video="qanda-solo" id="subtitle"]]
+[[!template text="""Oh, we do have questions,""" start="00:00:45.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""it's just that they're not in the right part.""" start="00:00:46.920" video="qanda-solo" id="subtitle"]]
+[[!template text="""Okay, so I'm going to start,""" start="00:00:47.960" video="qanda-solo" id="subtitle"]]
+[[!template text="""I'm going to read the questions to Howard and""" start="00:00:49.739" video="qanda-solo" id="subtitle"]]
+[[!template text="""Howard will be answering them.""" start="00:00:50.860" video="qanda-solo" id="subtitle"]]
+[[!template text="""And if you are interested in asking questions""" start="00:00:52.960" video="qanda-solo" id="subtitle"]]
+[[!template text="""directly to Howard, I see a lot of people""" start="00:00:54.620" video="qanda-solo" id="subtitle"]]
+[[!template text="""have joined us on BBB,""" start="00:00:55.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""so we'll first go through the questions on""" start="00:00:58.540" video="qanda-solo" id="subtitle"]]
+[[!template text="""the pad and then we'll move on to the people""" start="00:01:00.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""on BBB. So Howard, starting with the first""" start="00:01:03.340" video="qanda-solo" id="subtitle"]]
+[[!template text="""question, does table data allow for""" start="00:01:06.300" video="qanda-solo" id="subtitle"]]
+[[!template text="""recursion, e.g. The result that returns they""" start="00:01:08.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""are random monster haunting the cavern""" start="00:01:10.600" video="qanda-solo" id="subtitle"]]
+[[!template text="""entrance and we roll on random monster and""" start="00:01:14.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""inject them, inject into the result?""" start="00:01:16.420" video="qanda-solo" id="subtitle"]]
+[[!template text="""Sorry a little bit of a complicated question.""" start="00:01:17.920" video="qanda-solo" id="subtitle"]]
+[[!template text="""Do you want me to read it again,""" start="00:01:21.900" video="qanda-solo" id="subtitle"]]
+[[!template text="""perhaps? Yeah, I think so.""" start="00:01:23.620" video="qanda-solo" id="subtitle"]]
+[[!template text="""I didn't quite catch that.""" start="00:01:25.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""Okay, so does the table data allow for""" start="00:01:28.860" video="qanda-solo" id="subtitle"]]
+[[!template text="""recursion? So I think...""" start="00:01:30.180" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, yeah, yeah, yeah, yeah.""" start="00:01:31.560" video="qanda-solo" id="subtitle"]]
+[[!template text="""No, it does. I put a little,""" start="00:01:33.960" video="qanda-solo" id="subtitle"]]
+[[!template text="""you know, there's some code that could,""" start="00:01:35.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""so you could, yeah, you get a random value""" start="00:01:38.660" video="qanda-solo" id="subtitle"]]
+[[!template text="""that gets inserted and that random value""" start="00:01:41.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""could refer to another table and it can keep""" start="00:01:43.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""on going. I have not pushed that that hard""" start="00:01:46.000" video="qanda-solo" id="subtitle"]]
+[[!template text="""because obviously it's,""" start="00:01:48.320" video="qanda-solo" id="subtitle"]]
+[[!template text="""it might be a little on the heavyweight side.""" start="00:01:50.880" video="qanda-solo" id="subtitle"]]
+[[!template text="""I can't imagine it to go too deep,""" start="00:01:52.540" video="qanda-solo" id="subtitle"]]
+[[!template text="""though.""" start="00:01:52.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: I'm pretty sure Emacs would be complaining if""" start="00:01:56.820" video="qanda-solo" id="subtitle"]]
+[[!template text="""you go a little too deep.""" start="00:01:57.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""We have something as Mike's list recursion,""" start="00:01:59.979" video="qanda-solo" id="subtitle"]]
+[[!template text="""and stuff like this. So don't worry.""" start="00:02:01.420" video="qanda-solo" id="subtitle"]]
+[[!template text="""Go willy nilly with your recursions.""" start="00:02:03.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""We've got comments about the fact that it's a""" start="00:02:07.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""really cool project and I feel like everyone""" start="00:02:09.180" video="qanda-solo" id="subtitle"]]
+[[!template text="""watching would be agreeing.""" start="00:02:10.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""You've got a question about where you can get""" start="00:02:14.100" video="qanda-solo" id="subtitle"]]
+[[!template text="""this. Do you have a github repository with""" start="00:02:16.620" video="qanda-solo" id="subtitle"]]
+[[!template text="""all of this?""" start="00:02:17.080" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, and at the well at the end of the""" start="00:02:20.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""presentation I kind of display that and I""" start="00:02:22.840" video="qanda-solo" id="subtitle"]]
+[[!template text="""think I put it at the top of the the pad""" start="00:02:25.920" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, there's a""" start="00:02:35.220" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes. I don't go Gone please.""" start="00:02:36.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Nothing there. There's a lot of stuff that""" start="00:02:38.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""needs to be reformatted.""" start="00:02:40.080" video="qanda-solo" id="subtitle"]]
+[[!template text="""This is all Aflacode, so obviously it's a""" start="00:02:46.820" video="qanda-solo" id="subtitle"]]
+[[!template text="""personal hack. So people should just steal""" start="00:02:49.180" video="qanda-solo" id="subtitle"]]
+[[!template text="""the code as opposed to looking at a real""" start="00:02:51.880" video="qanda-solo" id="subtitle"]]
+[[!template text="""project to use.""" start="00:02:52.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right, lovely. So this game plus CRDT should""" start="00:03:00.420" video="qanda-solo" id="subtitle"]]
+[[!template text="""be great for non-solid plays.""" start="00:03:01.960" video="qanda-solo" id="subtitle"]]
+[[!template text="""Are you familiar with CRDT?""" start="00:03:03.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, so I used to use Flubits once upon a""" start="00:03:08.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""time and after seeing the previous talk on""" start="00:03:11.880" video="qanda-solo" id="subtitle"]]
+[[!template text="""CRDT it's like, oh, I like that,""" start="00:03:14.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""and yes, I think that would be a fun idea.""" start="00:03:16.000" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: I think I remember, so I did something much""" start="00:03:19.860" video="qanda-solo" id="subtitle"]]
+[[!template text="""more humble than you did.""" start="00:03:21.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""I did a little bit, a little package in Org""" start="00:03:24.660" video="qanda-solo" id="subtitle"]]
+[[!template text="""Mode for rolling dice and you had like a""" start="00:03:27.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""little formula like you could write 60 20 and""" start="00:03:31.560" video="qanda-solo" id="subtitle"]]
+[[!template text="""it would throw 6 dice with 20 faces,""" start="00:03:34.740" video="qanda-solo" id="subtitle"]]
+[[!template text="""60 sorry, 6 die, Frenchmen here in the room,""" start="00:03:39.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""20 faces and it would average them out or""" start="00:03:43.660" video="qanda-solo" id="subtitle"]]
+[[!template text="""provide you any kind of stats needed.""" start="00:03:45.140" video="qanda-solo" id="subtitle"]]
+[[!template text="""And this type of stuff works really well over""" start="00:03:48.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""CRDT because it's 1 edit inside of a file.""" start="00:03:52.540" video="qanda-solo" id="subtitle"]]
+[[!template text="""If you start making edits in different parts""" start="00:03:55.900" video="qanda-solo" id="subtitle"]]
+[[!template text="""of your file, it starts becoming a little""" start="00:03:58.780" video="qanda-solo" id="subtitle"]]
+[[!template text="""more complicated because CRDT struggles when""" start="00:04:02.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""you're making many discrete changes inside of""" start="00:04:04.480" video="qanda-solo" id="subtitle"]]
+[[!template text="""the same file. Does that make sense?""" start="00:04:05.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: It does, it does. Interesting.""" start="00:04:07.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""Okay, yeah, no, I have not played with it""" start="00:04:10.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""yet.""" start="00:04:10.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well, feel free to play with it and if you've""" start="00:04:14.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""got any kind of... If it works,""" start="00:04:16.320" video="qanda-solo" id="subtitle"]]
+[[!template text="""it works and it's amazing,""" start="00:04:17.720" video="qanda-solo" id="subtitle"]]
+[[!template text="""but if it doesn't, feel free to send us""" start="00:04:20.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""messages because Shantan,""" start="00:04:21.180" video="qanda-solo" id="subtitle"]]
+[[!template text="""who's the maintainer of CRDT,""" start="00:04:23.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""we've been looking into options to make it a""" start="00:04:25.840" video="qanda-solo" id="subtitle"]]
+[[!template text="""little more resilient and work elsewhere for""" start="00:04:28.380" video="qanda-solo" id="subtitle"]]
+[[!template text="""securely. Excellent. All right,""" start="00:04:31.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""Great. I'm going back to the previous""" start="00:04:34.600" video="qanda-solo" id="subtitle"]]
+[[!template text="""question. So does the current version also""" start="00:04:37.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""have some utilities for doing multiplayer,""" start="00:04:39.020" video="qanda-solo" id="subtitle"]]
+[[!template text="""like either physically or digitally,""" start="00:04:41.140" video="qanda-solo" id="subtitle"]]
+[[!template text="""like we've done with CRUT?""" start="00:04:42.520" video="qanda-solo" id="subtitle"]]
+[[!template text="""The question is because you mentioned you""" start="00:04:45.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""previously did multiplayer session as well?""" start="00:04:47.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I mean, I was using the table,""" start="00:04:51.180" video="qanda-solo" id="subtitle"]]
+[[!template text="""the random table at a random entry kind of""" start="00:04:55.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""thing. I was using that at my table.""" start="00:04:58.460" video="qanda-solo" id="subtitle"]]
+[[!template text="""So, I'm an eternal DM.""" start="00:05:00.780" video="qanda-solo" id="subtitle"]]
+[[!template text="""So I would always use that.""" start="00:05:02.920" video="qanda-solo" id="subtitle"]]
+[[!template text="""Like somebody says, what's the name of that""" start="00:05:05.020" video="qanda-solo" id="subtitle"]]
+[[!template text="""shopkeep? And I could just hit a key,""" start="00:05:07.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""and it'd come up with the name,""" start="00:05:08.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""and I'd just read it off.""" start="00:05:10.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""But it was still me generating it.""" start="00:05:14.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""So it wasn't something that people would see""" start="00:05:17.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""necessarily, but I would keep notes in it and""" start="00:05:19.540" video="qanda-solo" id="subtitle"]]
+[[!template text="""then publish those notes.""" start="00:05:20.520" video="qanda-solo" id="subtitle"]]
+[[!template text="""But yes, I don't know.""" start="00:05:24.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""This sounds all kind of,""" start="00:05:25.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""this sounds all intriguing.""" start="00:05:27.260" video="qanda-solo" id="subtitle"]]
+[[!template text="""I think this would be fun.""" start="00:05:28.840" video="qanda-solo" id="subtitle"]]
+[[!template text="""I think I need to get a group of like-minded""" start="00:05:32.220" video="qanda-solo" id="subtitle"]]
+[[!template text="""Emacs people who want to play online.""" start="00:05:35.880" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: I'm sure you've got plenty of people not only""" start="00:05:39.860" video="qanda-solo" id="subtitle"]]
+[[!template text="""watching but also here in BBB.""" start="00:05:41.580" video="qanda-solo" id="subtitle"]]
+[[!template text="""So we only have about 14 minutes until we go""" start="00:05:44.660" video="qanda-solo" id="subtitle"]]
+[[!template text="""to the next talk and it might be a little""" start="00:05:46.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""short for a campaign, but we might just...""" start="00:05:48.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""Moving on to the next question,""" start="00:05:53.220" video="qanda-solo" id="subtitle"]]
+[[!template text="""how does 1 become super awesome like Howard""" start="00:05:56.480" video="qanda-solo" id="subtitle"]]
+[[!template text="""Abrams? And I very much agree.""" start="00:05:58.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sure, yes. That's kind,""" start="00:05:58.700" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's not a secret, You're not giving your""" start="00:06:04.460" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: too kind, too kind. There's no trade secrets.""" start="00:06:09.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""Just follow your passions.""" start="00:06:10.580" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: trade secrets. I can only conquer.""" start="00:06:14.540" video="qanda-solo" id="subtitle"]]
+[[!template text="""All right, moving on to the next question.""" start="00:06:16.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""Please talk a little about how you produced""" start="00:06:18.740" video="qanda-solo" id="subtitle"]]
+[[!template text="""such a slick presentation video.""" start="00:06:20.460" video="qanda-solo" id="subtitle"]]
+[[!template text="""Everything looked completely professional,""" start="00:06:22.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""and I'd agree. So tell us more.""" start="00:06:25.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: OK, so as you've seen my previous""" start="00:06:29.260" video="qanda-solo" id="subtitle"]]
+[[!template text="""presentations, It's all just Emacs screen.""" start="00:06:32.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""I just felt like, oh, what I really want to""" start="00:06:35.920" video="qanda-solo" id="subtitle"]]
+[[!template text="""talk about is how much fun I'm having and the""" start="00:06:39.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""little introduction. So my son actually is a""" start="00:06:43.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""YouTuber. So I asked him,""" start="00:06:44.980" video="qanda-solo" id="subtitle"]]
+[[!template text="""and it's like, oh, I'll take care of your""" start="00:06:47.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""dad. And so he's the 1 that kind of prompted""" start="00:06:49.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""me. So I had a director.""" start="00:06:51.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""Don't know if that translates,""" start="00:06:53.720" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: I mean, that translates amazingly.""" start="00:06:58.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: though, but. Very good.""" start="00:07:02.560" video="qanda-solo" id="subtitle"]]
+[[!template text="""You know, very over the top.""" start="00:07:06.900" video="qanda-solo" id="subtitle"]]
+[[!template text="""I've never done something like this before.""" start="00:07:09.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: I mean, the results at the end is No,""" start="00:07:10.460" video="qanda-solo" id="subtitle"]]
+[[!template text="""but it fits you so well.""" start="00:07:11.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""I think this over the top-ness combined with""" start="00:07:14.820" video="qanda-solo" id="subtitle"]]
+[[!template text="""the editing, it just...""" start="00:07:15.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: I might have to keep doing it because it was""" start="00:07:18.900" video="qanda-solo" id="subtitle"]]
+[[!template text="""fun. It was fun to do.""" start="00:07:20.600" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: You've set a standard that you'll need to""" start="00:07:23.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""meet for following Emax.""" start="00:07:24.520" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'll have to keep paying them then.""" start="00:07:28.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh no! Alright, Yes! Alright,""" start="00:07:30.820" video="qanda-solo" id="subtitle"]]
+[[!template text="""moving on to the next question.""" start="00:07:32.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""Does table data, no sorry that's the 1 we did""" start="00:07:35.380" video="qanda-solo" id="subtitle"]]
+[[!template text="""on recursion and we're not going to struggle""" start="00:07:37.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""through the reading of it again.""" start="00:07:38.900" video="qanda-solo" id="subtitle"]]
+[[!template text="""Alright so with your toolkits,""" start="00:07:41.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""a list of good books would be nice to be""" start="00:07:43.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""included, example D&D,""" start="00:07:45.300" video="qanda-solo" id="subtitle"]]
+[[!template text="""space, steampunk, cyberpunk settings.""" start="00:07:48.400" video="qanda-solo" id="subtitle"]]
+[[!template text="""Do you have such a plan?""" start="00:07:49.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: 00I mean, I could definitely publish a""" start="00:07:56.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""bibliography of things I'm using and reading,""" start="00:07:59.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""But I don't know if I'd be writing anything.""" start="00:08:03.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh come on, don't tell yourself short.""" start="00:08:07.420" video="qanda-solo" id="subtitle"]]
+[[!template text="""You've already proven you were amazing in""" start="00:08:09.000" video="qanda-solo" id="subtitle"]]
+[[!template text="""very different, very varied topics.""" start="00:08:10.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""I'm sure you should give it 1 more try.""" start="00:08:12.840" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: I don't know. I've got a sabbatical coming""" start="00:08:15.460" video="qanda-solo" id="subtitle"]]
+[[!template text="""up. I'm toying with writing something,""" start="00:08:17.580" video="qanda-solo" id="subtitle"]]
+[[!template text="""but I don't know if it'd ever leave the Emacs""" start="00:08:19.860" video="qanda-solo" id="subtitle"]]
+[[!template text="""buffer.""" start="00:08:20.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: All right, I like this.""" start="00:08:23.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""Next question. Hi Howard and thanks for an""" start="00:08:28.140" video="qanda-solo" id="subtitle"]]
+[[!template text="""outstanding presentation.""" start="00:08:28.860" video="qanda-solo" id="subtitle"]]
+[[!template text="""What did you use to create the graphics in""" start="00:08:31.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""your presentation? Didn't we cover this 1""" start="00:08:34.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""already? I can't remember.""" start="00:08:35.059" video="qanda-solo" id="subtitle"]]
+[[!template text="""No, that was""" start="00:08:35.740" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: a good 1. So the graphics actually were just""" start="00:08:41.980" video="qanda-solo" id="subtitle"]]
+[[!template text="""kind of hacked together.""" start="00:08:43.179" video="qanda-solo" id="subtitle"]]
+[[!template text="""But then I just gave them to my son.""" start="00:08:45.020" video="qanda-solo" id="subtitle"]]
+[[!template text="""And it's like, can you put the graphic right""" start="00:08:47.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""here and he goes no problem there it is like""" start="00:08:50.140" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: okay great so 1 more 1 more reason to keep""" start="00:08:56.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""paying your son""" start="00:08:57.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: perfect yeah yeah exactly so if you can get""" start="00:08:59.820" video="qanda-solo" id="subtitle"]]
+[[!template text="""get yourself a YouTuber who knows how to use""" start="00:09:02.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""all the tools. I think he was using DaVinci,""" start="00:09:05.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""but he's got quite a few going.""" start="00:09:08.860" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. Alright, moving on to the next""" start="00:09:12.700" video="qanda-solo" id="subtitle"]]
+[[!template text="""question. Any plans to borrow tables from""" start="00:09:15.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""Dungeon World or Iron Sword Starforge and""" start="00:09:17.980" video="qanda-solo" id="subtitle"]]
+[[!template text="""publish in a TK repository?""" start="00:09:20.460" video="qanda-solo" id="subtitle"]]
+[[!template text="""Not sure what TK is.""" start="00:09:22.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, yeah, okay. So yeah,""" start="00:09:25.380" video="qanda-solo" id="subtitle"]]
+[[!template text="""so that would be fun and I'd love that.""" start="00:09:30.320" video="qanda-solo" id="subtitle"]]
+[[!template text="""And I was just reading a way to render PDFs""" start="00:09:33.840" video="qanda-solo" id="subtitle"]]
+[[!template text="""that you might own into Markdown format.""" start="00:09:38.080" video="qanda-solo" id="subtitle"]]
+[[!template text="""And if it's in Markdown,""" start="00:09:39.140" video="qanda-solo" id="subtitle"]]
+[[!template text="""it'd be easy to pull into Org Mode.""" start="00:09:41.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""So all of the Iron Sworn,""" start="00:09:43.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""that role-playing game,""" start="00:09:45.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""Since it's all under the Creative License,""" start="00:09:48.780" video="qanda-solo" id="subtitle"]]
+[[!template text="""I think even the Star Forge is.""" start="00:09:51.380" video="qanda-solo" id="subtitle"]]
+[[!template text="""So I think I could grab the Star Forge 1.""" start="00:09:53.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""I don't know about Dungeon World and their""" start="00:09:56.820" video="qanda-solo" id="subtitle"]]
+[[!template text="""tables. But yeah, a lot of people are""" start="00:09:59.220" video="qanda-solo" id="subtitle"]]
+[[!template text="""starting to publish those kind of tables.""" start="00:10:01.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""So yeah, that'd be fun.""" start="00:10:03.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""I'd like to render all those in text files""" start="00:10:07.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""that I could pull up like that.""" start="00:10:08.560" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: Lovely. I think that's all for the questions""" start="00:10:13.180" video="qanda-solo" id="subtitle"]]
+[[!template text="""we had in the pad. We still have 9 minutes.""" start="00:10:15.820" video="qanda-solo" id="subtitle"]]
+[[!template text="""I see plenty of people have joined us,""" start="00:10:18.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""including 1 person with a microphone on BBB.""" start="00:10:21.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""PlasmaStrike, do you have a question?""" start="00:10:23.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""And would you like to unmute yourself and ask""" start="00:10:24.920" video="qanda-solo" id="subtitle"]]
+[[!template text="""it? I'm also going to check the chat.""" start="00:10:28.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, yeah. StarsWithoutNumber is another great""" start="00:10:31.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""1 that's got some great tables in it.""" start="00:10:33.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""Sorry, I'm just looking at the questions that""" start="00:10:37.720" video="qanda-solo" id="subtitle"]]
+[[!template text="""are popping up here, too.""" start="00:10:38.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: Sure. So I don't see anyone unmuting""" start="00:10:42.740" video="qanda-solo" id="subtitle"]]
+[[!template text="""themselves. I see people typing away""" start="00:10:44.540" video="qanda-solo" id="subtitle"]]
+[[!template text="""questions. By the way,""" start="00:10:45.220" video="qanda-solo" id="subtitle"]]
+[[!template text="""if you're going to type questions,""" start="00:10:46.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""perhaps do not put them on BBB,""" start="00:10:48.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""put them in the pad. It's a little easier for""" start="00:10:50.460" video="qanda-solo" id="subtitle"]]
+[[!template text="""us to archive them afterwards.""" start="00:10:52.380" video="qanda-solo" id="subtitle"]]
+[[!template text="""I'm going to give a little bit of time.""" start="00:10:56.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""I feel bad about going on break when I have""" start="00:10:58.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""you available and ready to answer more""" start="00:11:00.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""questions. Oh, you're too kind.""" start="00:11:02.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 2]: How have you, as this changed,""" start="00:11:07.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""how's your visualization of the books,""" start="00:11:09.520" video="qanda-solo" id="subtitle"]]
+[[!template text="""or of your games at all?""" start="00:11:11.260" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Sorry, can you ask that 1 more time?""" start="00:11:15.180" video="qanda-solo" id="subtitle"]]
+[[!template text="""I didn't catch the first part.""" start="00:11:16.700" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 2]: How has this impacted,""" start="00:11:20.140" video="qanda-solo" id="subtitle"]]
+[[!template text="""like, your imagination on the scenes and""" start="00:11:23.080" video="qanda-solo" id="subtitle"]]
+[[!template text="""stuff like that because it's partly open and""" start="00:11:28.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""closed because you had that chart where you""" start="00:11:30.720" video="qanda-solo" id="subtitle"]]
+[[!template text="""had that where you put it in the center of""" start="00:11:32.880" video="qanda-solo" id="subtitle"]]
+[[!template text="""constrained by algorithms to enhance your""" start="00:11:37.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""creativity, you write it but it's not all""" start="00:11:39.780" video="qanda-solo" id="subtitle"]]
+[[!template text="""freeform to where you have writer's block as""" start="00:11:42.700" video="qanda-solo" id="subtitle"]]
+[[!template text="""much.""" start="00:11:42.900" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: You hit the, You hit it on the head.""" start="00:11:46.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""That's exactly it. That's why I've been doing""" start="00:11:49.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""this. Creativity is a hard thing to foster.""" start="00:11:53.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""And having little prompts that you have to""" start="00:11:57.520" video="qanda-solo" id="subtitle"]]
+[[!template text="""kind of work together,""" start="00:11:58.340" video="qanda-solo" id="subtitle"]]
+[[!template text="""like twisty language, what does that mean?""" start="00:12:03.660" video="qanda-solo" id="subtitle"]]
+[[!template text="""Oh, you have to kind of work with that.""" start="00:12:06.560" video="qanda-solo" id="subtitle"]]
+[[!template text="""So yeah, that's 1 of the reasons why I got""" start="00:12:08.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""into doing the solo version of it,""" start="00:12:11.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""just because you kind of,""" start="00:12:14.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""it does really foster the creativity.""" start="00:12:15.980" video="qanda-solo" id="subtitle"]]
+[[!template text="""Did that answer the question?""" start="00:12:23.540" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah well has it kind of has it improved over""" start="00:12:28.520" video="qanda-solo" id="subtitle"]]
+[[!template text="""time though of using it like""" start="00:12:30.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: oh yeah oh yeah I would definitely say so""" start="00:12:33.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""While I'm still not ready to publish my files""" start="00:12:36.420" video="qanda-solo" id="subtitle"]]
+[[!template text="""at all, but the first ones were much worse.""" start="00:12:40.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 2]: That was an example like after you play for""" start="00:12:46.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""like 2 months or something like that,""" start="00:12:47.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""like, could you close your eyes and see the""" start="00:12:50.320" video="qanda-solo" id="subtitle"]]
+[[!template text="""rooms a lot better versus...""" start="00:12:51.420" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I think so. I think so.""" start="00:12:54.720" video="qanda-solo" id="subtitle"]]
+[[!template text="""And, you know, there's 1 solo game called A""" start="00:13:02.150" video="qanda-solo" id="subtitle"]]
+[[!template text="""Thousand-Year-Old Vampire.""" start="00:13:03.340" video="qanda-solo" id="subtitle"]]
+[[!template text="""I don't know if you've seen that 1 or not,""" start="00:13:05.740" video="qanda-solo" id="subtitle"]]
+[[!template text="""but it's quite creative.""" start="00:13:08.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""It's very interesting.""" start="00:13:09.720" video="qanda-solo" id="subtitle"]]
+[[!template text="""It's got a great setup to use.""" start="00:13:13.180" video="qanda-solo" id="subtitle"]]
+[[!template text="""And When I was looking through it,""" start="00:13:17.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""it's like, I'm thinking of a typical vampire""" start="00:13:19.320" video="qanda-solo" id="subtitle"]]
+[[!template text="""and this sort of thing.""" start="00:13:20.720" video="qanda-solo" id="subtitle"]]
+[[!template text="""But then there's this YouTuber named Seth""" start="00:13:25.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""Skalkarski, if I can pronounce his name""" start="00:13:27.880" video="qanda-solo" id="subtitle"]]
+[[!template text="""right. He was describing it.""" start="00:13:30.020" video="qanda-solo" id="subtitle"]]
+[[!template text="""And he came up with a completely different""" start="00:13:32.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""vampire scene. And it's like,""" start="00:13:34.540" video="qanda-solo" id="subtitle"]]
+[[!template text="""oh, I could see how people can kind of start""" start="00:13:37.560" video="qanda-solo" id="subtitle"]]
+[[!template text="""working on these things and really see things""" start="00:13:40.600" video="qanda-solo" id="subtitle"]]
+[[!template text="""differently. And the creativity and all that""" start="00:13:43.080" video="qanda-solo" id="subtitle"]]
+[[!template text="""sort of stuff just really blossoms.""" start="00:13:44.340" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 2]: And then I guess as an extension of that,""" start="00:13:48.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""how has the stories changed after using this""" start="00:13:53.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""toolkit or the solo games for 2 months?""" start="00:13:58.140" video="qanda-solo" id="subtitle"]]
+[[!template text="""Like the scenes, like how you,""" start="00:14:00.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""like the stories that you'd start generating?""" start="00:14:02.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, yeah, yeah. Yeah,""" start="00:14:05.980" video="qanda-solo" id="subtitle"]]
+[[!template text="""I mean, a lot depends on just how much you're""" start="00:14:09.000" video="qanda-solo" id="subtitle"]]
+[[!template text="""willing to put into it.""" start="00:14:10.140" video="qanda-solo" id="subtitle"]]
+[[!template text="""But yeah, I've definitely had a lot of fun.""" start="00:14:13.980" video="qanda-solo" id="subtitle"]]
+[[!template text="""And it's just been a lot more enjoyable and""" start="00:14:16.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""just more interesting.""" start="00:14:17.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 2]: Well I mean like has the types and quality of""" start="00:14:21.960" video="qanda-solo" id="subtitle"]]
+[[!template text="""the stories changed a lot?""" start="00:14:23.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""Or more than that?""" start="00:14:25.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: I think so, you know, but obviously the proof""" start="00:14:30.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""is if somebody else is doing the evaluation""" start="00:14:34.000" video="qanda-solo" id="subtitle"]]
+[[!template text="""and I'm not letting that out But I think so,""" start="00:14:39.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""but I think so so but I think your mileage""" start="00:14:42.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""may vary. So yeah, try it out""" start="00:14:44.340" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 2]: Have you seen the game Dwarf Fortress?""" start="00:14:47.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""Because it's supposed to be a video game""" start="00:14:50.880" video="qanda-solo" id="subtitle"]]
+[[!template text="""that's in a similar spirit to that,""" start="00:14:53.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""where it helps you generate stories.""" start="00:14:55.080" video="qanda-solo" id="subtitle"]]
+[[!template text="""Dwarf Fortress, RimWorld,""" start="00:14:56.820" video="qanda-solo" id="subtitle"]]
+[[!template text="""Kenshi is another 1.""" start="00:15:00.420" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, no, I've looked at the Dwarf Fortress,""" start="00:15:03.400" video="qanda-solo" id="subtitle"]]
+[[!template text="""but I haven't played it.""" start="00:15:04.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""But that 1 seems a little bit more""" start="00:15:08.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""structured, but still could be a lot of fun""" start="00:15:10.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""too. And then others, it's like,""" start="00:15:13.700" video="qanda-solo" id="subtitle"]]
+[[!template text="""how far do you want to take it?""" start="00:15:15.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""Like I just picked up this 1 called Broken""" start="00:15:18.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""Cask. There it is, where you generate a""" start="00:15:21.820" video="qanda-solo" id="subtitle"]]
+[[!template text="""little bar tavern, and then you start rolling""" start="00:15:25.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""events. Now, it gives a lot more stuff coming""" start="00:15:29.180" video="qanda-solo" id="subtitle"]]
+[[!template text="""out of it. It's like, oh,""" start="00:15:30.780" video="qanda-solo" id="subtitle"]]
+[[!template text="""this person's showing up and this is what's""" start="00:15:32.700" video="qanda-solo" id="subtitle"]]
+[[!template text="""happening, but you can elaborate on it as""" start="00:15:34.700" video="qanda-solo" id="subtitle"]]
+[[!template text="""much as you want. And that's what I'm""" start="00:15:36.660" video="qanda-solo" id="subtitle"]]
+[[!template text="""thinking I might do. Hi,""" start="00:15:39.600" video="qanda-solo" id="subtitle"]]
+[[!template text="""Mike, you got a question?""" start="00:15:40.600" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 3]: Hi, Howard. Yeah, I do have a question.""" start="00:15:47.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""I'm a big fan of your work on literate DevOps""" start="00:15:50.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""and your essay and video on that topic.""" start="00:15:53.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""I'm just wondering if you still use that""" start="00:15:56.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""workflow at work and have you changed how""" start="00:15:59.640" video="qanda-solo" id="subtitle"]]
+[[!template text="""that process works or has it evolved over""" start="00:16:02.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""time since that video and essay were written?""" start="00:16:04.720" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: That's a good question.""" start="00:16:06.840" video="qanda-solo" id="subtitle"]]
+[[!template text="""Yes, I still do it. It varies depending on""" start="00:16:12.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""the project and whatnot.""" start="00:16:13.500" video="qanda-solo" id="subtitle"]]
+[[!template text="""But I still am using it.""" start="00:16:16.400" video="qanda-solo" id="subtitle"]]
+[[!template text="""Yeah, yeah. In fact, I'm doing it with a lot""" start="00:16:20.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""of other things. Like all my configuration""" start="00:16:22.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""files are all in a literate style for Emacs.""" start="00:16:27.660" video="qanda-solo" id="subtitle"]]
+[[!template text="""And even all the code that's in Ironsworn,""" start="00:16:31.160" video="qanda-solo" id="subtitle"]]
+[[!template text="""the repo, if you go to the repo,""" start="00:16:35.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""it's the readme file. And yeah,""" start="00:16:37.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""that's just being rendered out to the Emacs""" start="00:16:39.720" video="qanda-solo" id="subtitle"]]
+[[!template text="""file. So it is still all literate.""" start="00:16:41.660" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 3]: Very cool.""" start="00:16:43.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, because I don't know.""" start="00:16:46.500" video="qanda-solo" id="subtitle"]]
+[[!template text="""Some things are just a little too complicated""" start="00:16:48.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""to just type up.""" start="00:16:49.320" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: All right, sorry to be the bearer of bad""" start="00:16:56.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""news, but we have only about 3 more minutes""" start="00:16:58.220" video="qanda-solo" id="subtitle"]]
+[[!template text="""of lifetime. By the way,""" start="00:16:59.840" video="qanda-solo" id="subtitle"]]
+[[!template text="""feel free to stay and discuss any of the""" start="00:17:02.920" video="qanda-solo" id="subtitle"]]
+[[!template text="""topic of today's session after we go off air""" start="00:17:07.540" video="qanda-solo" id="subtitle"]]
+[[!template text="""and we'll be able to keep all of the nice""" start="00:17:10.579" video="qanda-solo" id="subtitle"]]
+[[!template text="""discussion and put them on the talks page""" start="00:17:12.260" video="qanda-solo" id="subtitle"]]
+[[!template text="""afterwards. Great. Howard,""" start="00:17:16.560" video="qanda-solo" id="subtitle"]]
+[[!template text="""I would like to ask you if you have any last""" start="00:17:20.020" video="qanda-solo" id="subtitle"]]
+[[!template text="""words regarding the presentation or the""" start="00:17:21.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""questions you've had. Well,""" start="00:17:23.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""the last question we had,""" start="00:17:24.520" video="qanda-solo" id="subtitle"]]
+[[!template text="""actually, we had Mike come and ask it live.""" start="00:17:27.500" video="qanda-solo" id="subtitle"]]
+[[!template text="""But do you have any parting words before we""" start="00:17:29.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""leave you? Okay.""" start="00:17:31.720" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: I think the last thing is go and hack""" start="00:17:37.560" video="qanda-solo" id="subtitle"]]
+[[!template text="""something. I mean, this Lisp stuff is a lot""" start="00:17:41.420" video="qanda-solo" id="subtitle"]]
+[[!template text="""of fun. And I hope that came across.""" start="00:17:43.860" video="qanda-solo" id="subtitle"]]
+[[!template text="""It's like, the project I made is just a""" start="00:17:47.240" video="qanda-solo" id="subtitle"]]
+[[!template text="""personal thing and it was fun for me to make,""" start="00:17:50.220" video="qanda-solo" id="subtitle"]]
+[[!template text="""but everybody's probably got some fun thing""" start="00:17:53.100" video="qanda-solo" id="subtitle"]]
+[[!template text="""they could make as well.""" start="00:17:54.320" video="qanda-solo" id="subtitle"]]
+[[!template text="""And just, I don't know,""" start="00:17:56.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""hack it yourself because all the,""" start="00:17:58.460" video="qanda-solo" id="subtitle"]]
+[[!template text="""you know, think about adding multi-threading""" start="00:18:01.920" video="qanda-solo" id="subtitle"]]
+[[!template text="""to Emacs. Maybe we don't want that,""" start="00:18:04.480" video="qanda-solo" id="subtitle"]]
+[[!template text="""because that'll just complicate things.""" start="00:18:06.000" video="qanda-solo" id="subtitle"]]
+[[!template text="""This is your own personal hacking sandbox,""" start="00:18:08.200" video="qanda-solo" id="subtitle"]]
+[[!template text="""so go have fun.""" start="00:18:09.520" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: Great. I was just going to say we were""" start="00:18:14.220" video="qanda-solo" id="subtitle"]]
+[[!template text="""talking about Dwarf Fortress.""" start="00:18:15.060" video="qanda-solo" id="subtitle"]]
+[[!template text="""In Dwarf Fortress, it's a very CPU intensive""" start="00:18:18.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""game because it needs to compute every single""" start="00:18:21.020" video="qanda-solo" id="subtitle"]]
+[[!template text="""thing in the world and there's such a thing""" start="00:18:23.480" video="qanda-solo" id="subtitle"]]
+[[!template text="""as the CPU death of the world where basically""" start="00:18:27.700" video="qanda-solo" id="subtitle"]]
+[[!template text="""you've got too many cats that are just""" start="00:18:29.340" video="qanda-solo" id="subtitle"]]
+[[!template text="""breeding constantly with 1 another and it""" start="00:18:31.320" video="qanda-solo" id="subtitle"]]
+[[!template text="""creates so many entities that it just""" start="00:18:33.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""crashes, and the time it takes for the day to""" start="00:18:36.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""finish it, it just never finish.""" start="00:18:38.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""So I was going to say maybe multi-threading""" start="00:18:40.680" video="qanda-solo" id="subtitle"]]
+[[!template text="""might be useful in this case for Emacs.""" start="00:18:43.180" video="qanda-solo" id="subtitle"]]
+[[!template text="""So, wanting to foray into the future.""" start="00:18:46.100" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right. Thank you.""" start="00:18:48.800" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: And thank you so much,""" start="00:18:50.900" video="qanda-solo" id="subtitle"]]
+[[!template text="""Howard, and thank you Plasma Strike for your""" start="00:18:52.360" video="qanda-solo" id="subtitle"]]
+[[!template text="""question, as well as Mike,""" start="00:18:53.320" video="qanda-solo" id="subtitle"]]
+[[!template text="""who joined us. We're going to go live with""" start="00:18:55.760" video="qanda-solo" id="subtitle"]]
+[[!template text="""the next talk in about 1 minute,""" start="00:18:57.440" video="qanda-solo" id="subtitle"]]
+[[!template text="""and until then, well, I'm not going to put""" start="00:19:00.400" video="qanda-solo" id="subtitle"]]
+[[!template text="""music, You can wait 50 seconds without music,""" start="00:19:02.040" video="qanda-solo" id="subtitle"]]
+[[!template text="""you Zoomers. We'll be back in a bit.""" start="00:19:03.960" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 2]: Bye-bye.""" start="00:19:05.280" video="qanda-solo" id="subtitle"]]
+[[!template text="""[Speaker 0]: Bye, Howard. All right,""" start="00:19:09.620" video="qanda-solo" id="subtitle"]]
+[[!template text="""we are off. Thank you so much,""" start="00:19:11.120" video="qanda-solo" id="subtitle"]]
+[[!template text="""Howard. I need to dash.""" start="00:19:11.980" video="qanda-solo" id="subtitle"]]
+[[!template text="""And oh, I think he's already gone.""" start="00:19:13.940" video="qanda-solo" id="subtitle"]]
+[[!template text="""So Bye everyone, I'll see you later.""" start="00:19:16.360" video="qanda-solo" id="subtitle"]]
+
+Questions or comments? Please e-mail [howard@howardabrams.com](mailto:howard@howardabrams.com?subject=Comment%20for%20EmacsConf%202023%20solo%3A%20How%20I%20play%20TTRPGs%20in%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/solo-before.md b/2023/info/solo-before.md
new file mode 100644
index 00000000..4151f8a3
--- /dev/null
+++ b/2023/info/solo-before.md
@@ -0,0 +1,33 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 15-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="solo-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="solo-mainVideo" data="""
+00:00.000 Introduction
+01:20.680 Solo RPGs
+02:47.440 Demo
+04:11.760 Randomization
+05:31.960 Moves
+06:03.640 Reference
+06:34.680 Story arcs
+07:48.680 Using different stats
+09:02.960 Dice rolls
+09:34.800 Dangers
+10:19.680 A strong success
+11:49.680 Other solo RPGs
+13:04.720 Conclusion
+
+"""]]<div></div>Duration: 14:36 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.opus">Download --main.opus (6.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/oNkcCHdWCKXRv6KnUTAeEC">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="solo-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="solo-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus"></audio></div><div></div>Duration: 19:20 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm">Download --answers.webm (43MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/solo-nav.md b/2023/info/solo-nav.md
new file mode 100644
index 00000000..741f4f35
--- /dev/null
+++ b/2023/info/solo-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/collab">Collaborative data processing and documenting using org-babel</a>
+Next by track: <a href="/2023/talks/ref">Org-Mode workflow: informal reference tracking</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/steno-after.md b/2023/info/steno-after.md
new file mode 100644
index 00000000..486a8207
--- /dev/null
+++ b/2023/info/steno-after.md
@@ -0,0 +1,359 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="steno-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Stenotypy is a system of typing""" start="00:00:00.660" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""where you press multiple keys at the same time,""" start="00:00:03.840" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""letting you send more than one letter at a time.""" start="00:00:07.340" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This is a video from the 1920s.""" start="00:00:13.360" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The man is holding a stenotype, a device used for stenotypy.""" start="00:00:16.940" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This particular one is called Grandjean.""" start="00:00:23.060" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It's made for the French language.""" start="00:00:26.360" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""In this demonstration,""" start="00:00:30.068" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""the man is going to be dictating a passage,""" start="00:00:31.740" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""first, slowly and then quickly.""" start="00:00:34.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The lady on the left doesn't have trouble keeping up.""" start="00:00:38.760" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""She's using stenotypy.""" start="00:00:42.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The lady on the right is a good typist,""" start="00:00:44.860" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""but she can't keep up when the dictation gets faster.""" start="00:00:48.320" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I'm nowhere near as fast as this lady.""" start="00:01:13.300" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""She's extremely skilled.""" start="00:01:16.020" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I'm not even a tenth of what she is.""" start="00:01:18.780" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I don't use Grandjean, I use Melani,""" start="00:01:24.540" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""which is a system for Castilian and Italian.""" start="00:01:28.400" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If I want to make the word solo, I press S, O, L,""" start="00:01:33.320" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""which is made by two keys, and O.""" start="00:01:39.540" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Here's what that looks like.""" start="00:01:43.320" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The hyphen between S and O means that""" start="00:01:45.600" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""the S is on the left side,""" start="00:01:50.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and the rest of the letters are on the right side.""" start="00:01:52.520" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If I want to write the word sólo,""" start="00:01:57.040" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""which is just like the previous word,""" start="00:02:00.000" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""but with the first O accented,""" start="00:02:02.440" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I would press the asterisk key.""" start="00:02:05.480" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""In Melani, the asterisk is used""" start="00:02:08.260" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""to put an accent on a letter.""" start="00:02:11.960" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If you speak English,""" start="00:02:20.300" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""then you would likely use the Ireland system.""" start="00:02:22.040" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""S-E-T makes the word set.""" start="00:02:25.040" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""In Ireland, you can make a long vowel sound""" start="00:02:28.780" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""by pressing the two thumb keys""" start="00:02:32.380" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""on the other side of the vowel you want to make long.""" start="00:02:34.260" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""S-long-E-T makes the word seat.""" start="00:02:41.700" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This is me programming.""" start="00:02:50.200" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""After a few lines, I'll explain what's going on.""" start="00:02:52.660" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""In GNU Emacs, you can create abbreviations""" start="00:03:19.580" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""that expand to strings.""" start="00:03:23.380" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""For example, you can create an abbrev, like btwx,""" start="00:03:25.540" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""that will expand to &quot;by the way&quot;""" start="00:03:31.360" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""when you succeed btwx with a space or some punctuation.""" start="00:03:33.980" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Here that's what I'm doing.""" start="00:03:40.360" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I type d and then emacs, which expands to this.""" start="00:03:42.440" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""But this is a different kind of expansion""" start="00:03:48.140" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""from a simple string like by the way.""" start="00:03:50.660" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This one has structure.""" start="00:03:54.340" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It has interesting points that I can jump to.""" start="00:03:56.640" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It's called a skeleton.""" start="00:04:00.680" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This is the skeleton.""" start="00:04:03.740" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The part that I want you to focus on is the @ symbols.""" start="00:04:05.940" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Those are the interesting points that I jump to.""" start="00:04:10.560" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""So, at one interesting point,""" start="00:04:15.740" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I can write the name of the function,""" start="00:04:18.260" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""at another interesting point, the arguments""" start="00:04:20.700" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""if the function will need them, the doc string,""" start="00:04:24.360" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and finally the body.""" start="00:04:28.620" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""When I get to the body, I use stenotypy""" start="00:04:31.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""to write the words of the functions I'm looking for.""" start="00:04:34.940" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Then I call a completion framework""" start="00:04:39.060" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""to choose from a list of candidates.""" start="00:04:41.640" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This completion framework doesn't care""" start="00:04:45.060" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""what order the words are in or how many words I use.""" start="00:04:47.860" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This completion framework is called Corfu,""" start="00:04:52.520" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""which stands for COmpletion in Region FUnction.""" start="00:04:56.220" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""And I'm using a package called Orderless""" start="00:05:00.460" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""to make it stronger.""" start="00:05:03.280" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Here, I use another skeleton, the same one as before.""" start="00:05:51.460" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This time, it has an argument.""" start="00:05:57.200" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Then, when I get to the body, I write another skeleton,""" start="00:06:00.880" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""one that has an interesting point between the quotes""" start="00:06:07.240" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and creates a new line""" start="00:06:12.360" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""right underneath it.""" start="00:06:14.920" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I typed i and then emacs,""" start="00:06:17.500" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and I got the interactive skeleton.""" start="00:06:20.320" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Now, I use another skeleton,""" start="00:07:16.120" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""but these ones differ""" start="00:07:18.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""because it prompts me for a string,""" start="00:07:20.480" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and I can make the skeleton as long as I want.""" start="00:07:23.040" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If I keep entering text in the prompt,""" start="00:07:27.300" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""then Emacs will keep making the skeleton bigger.""" start="00:07:29.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""When I enter an empty string, it knows to stop asking,""" start="00:07:33.840" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and it sends me to the point""" start="00:07:38.000" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I've designated to go to when a skeleton is created.""" start="00:07:40.000" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""That's what the underscore means.""" start="00:07:44.620" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I type c and then Emacs, and I get the condition skeleton.""" start="00:07:48.260" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""And then I use Corfu and Orderless to program.""" start="00:07:54.120" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""On two functions, I use a dabbrev.""" start="00:08:00.060" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""A dabbrev is a dynamic abbreviation.""" start="00:08:03.820" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Here's how it works.""" start="00:08:09.500" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If I have three strings""" start="00:08:11.440" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""that begin with S-T, string, strawberry, and stop,""" start="00:08:12.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I can write S-T and then call dabbrev expand.""" start="00:08:17.820" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""First, this will give me stop""" start="00:08:22.180" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""because I'm nearest to the word stop.""" start="00:08:24.380" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Then when I call it again, I'll get strawberry.""" start="00:08:27.120" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""And if I call it a third time, I'll get string.""" start="00:08:30.500" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If I start off with S-T-R, then I'll get strawberry first""" start="00:08:35.460" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and then string.""" start="00:08:40.140" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I used dabbrev twice in this function.""" start="00:08:42.280" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If you read the top of the screen,""" start="00:08:46.000" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""you can see which commands I use and how I invoke them.""" start="00:08:48.080" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Finally, I use one last skeleton""" start="00:09:00.240" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""to map the function I just wrote to a hotkey.""" start="00:09:03.120" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""In this case, C-o.""" start="00:09:07.040" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Here we can see what the function I just wrote does.""" start="00:09:15.580" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It opens a line with the line below indented""" start="00:09:19.220" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""if it isn't blank.""" start="00:09:22.240" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I've kept the old behavior with an argument of zero""" start="00:09:23.801" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and done something for when I use a negative argument.""" start="00:09:29.040" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""You can see the interesting points.""" start="00:09:33.600" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I could jump to any of them or cycle through them.""" start="00:09:36.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I normally use a 9-to-16 setup.""" start="00:09:50.000" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""To me, Emacs, and computing in general,""" start="00:09:54.620" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""is much more pleasant to use that way.""" start="00:09:58.120" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""When I stenotype a word,""" start="00:10:07.680" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""a space is sent immediately afterwards.""" start="00:10:10.000" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Orderless treats spaces as delimiters.""" start="00:10:14.180" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This is very helpful""" start="00:10:17.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""because I can enter commands with stenotypy,""" start="00:10:19.380" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""without having to worry about""" start="00:10:23.460" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""whether words are in the right order.""" start="00:10:25.220" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Lem, spelled L-E-M, is another Emacs.""" start="00:10:29.320" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It's extremely powerful.""" start="00:10:34.220" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""But Lem doesn't have skeletons, not yet at least.""" start="00:10:35.901" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""So I'm going to program the traditional way.""" start="00:10:40.061" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Nothing fancy, just left-to-right programming.""" start="00:10:43.740" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""With Plover, you have dictionaries.""" start="00:11:38.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I added Fibonacci to my dictionary.""" start="00:11:41.521" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I made my own dictionary from scratch.""" start="00:11:44.861" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""But if you don't want to do that,""" start="00:11:47.940" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""there are free dictionaries available""" start="00:11:49.781" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""that have many words already in them,""" start="00:11:52.261" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""saving you lots of time.""" start="00:11:55.121" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The reason I made my dictionary from scratch""" start="00:11:56.721" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""is because I wanted to know my system inside and out.""" start="00:12:00.280" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""On one stroke, I typed T.""" start="00:12:03.560" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""And, on the next stroke, I stenotyped coalton.""" start="00:12:07.961" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""And then I got (coalton-toplevel and a new line.""" start="00:12:12.741" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It's similar to what I did in GNU Emacs""" start="00:12:16.461" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""when I expanded a skeleton.""" start="00:12:19.520" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This is actually not stenotypy,""" start="00:12:22.580" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""but a different kind of steno, known as serial steno.""" start="00:12:25.180" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Plover is capable of this as well.""" start="00:12:29.821" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Here are some things that Plover can do.""" start="00:12:32.941" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Plover can glue words,""" start="00:12:36.841" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""like if you need to make a compound word.""" start="00:12:38.921" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It can break a compound word.""" start="00:12:41.461" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""You can press keys to turn off Plover""" start="00:12:44.361" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""or to turn it back on.""" start="00:12:48.061" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""You can case words the way you want,""" start="00:12:50.121" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""uppercase, lowercase, capitalize.""" start="00:12:52.721" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""You can change your stenotype layout,""" start="00:12:55.761" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""like, say, if you want to use Grandjean for French,""" start="00:12:58.821" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Melani for Castilian, and Ireland for English.""" start="00:13:02.381" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""All of that's possible.""" start="00:13:06.380" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Here I should note that I'm using a Plover plugin""" start="00:13:10.480" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""called Full Keyboard Steno.""" start="00:13:14.620" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It makes my entire keyboard into a stenotype.""" start="00:13:17.521" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Lem also has a completion feature built in.""" start="00:13:26.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""But I didn't need it for the code that I wrote.""" start="00:13:30.701" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It's quite good.""" start="00:13:35.101" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""In summary, if you add in the symbols""" start="00:13:38.720" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""that you're going to need when you're programming,""" start="00:13:42.281" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""you'll be fine.""" start="00:13:45.121" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Even without skeletons,""" start="00:13:46.441" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Plover is nice to use for programming.""" start="00:13:48.621" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The search tool is the primary way of navigating in Emacs.""" start="00:14:00.920" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Every Emacser can be measured""" start="00:14:05.621" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""by their skill with the search tool.""" start="00:14:08.041" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""C-s begins a forward search.""" start="00:14:11.640" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The s stands for search.""" start="00:14:14.821" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I'm reading Aesop's Fables,""" start="00:14:18.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and I want to look for the word fox.""" start="00:14:20.741" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""So I press C-s and type fox.""" start="00:14:23.641" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If I want to go back to the beginning of the word fox,""" start="00:14:28.201" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I press C-r, which stands for reverse search.""" start="00:14:31.600" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""With Stenotypy, spaces are added to the end of words,""" start="00:14:37.501" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""so sometimes that causes problems.""" start="00:14:42.740" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""We can remedy that by changing the way""" start="00:14:49.060" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Emacs interprets our whitespace.""" start="00:14:52.121" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""When I press C-M-s [alt control s],""" start="00:14:55.360" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""whitespace is interpreted as a wildcard.""" start="00:14:57.961" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It's a function I made myself.""" start="00:15:01.301" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""fox mask will take me to the fox and the mask.""" start="00:15:04.160" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The whitespace is a wildcard.""" start="00:15:09.160" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""For me, Ctrl-s makes the whitespace literal.""" start="00:15:12.181" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I like having both options available to me:""" start="00:15:16.761" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""literal whitespace and wildcard whitespace.""" start="00:15:20.540" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Say I want to find the cat and the fox,""" start="00:15:29.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""one of my favorite fables.""" start="00:15:32.620" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I write cat fox, but I don't get what I want.""" start="00:15:34.860" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I've written a function that reverses""" start="00:15:39.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""the order of my search query.""" start="00:15:42.120" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Now I get what I want.""" start="00:15:45.260" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Searching like this is very convenient.""" start="00:15:47.880" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""In Lem, we can do something similar.""" start="00:15:55.340" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I want to read The Fox and the Lion.""" start="00:15:58.540" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I search for Lion Fox. Notice those words are capitalized.""" start="00:16:01.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Now I'm going to transform the last two words""" start="00:16:08.380" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""into a regular expression""" start="00:16:11.781" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""so that the order doesn't matter.""" start="00:16:14.300" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""And now I can find the fable I'm looking for.""" start="00:16:18.480" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I did this with a plugin called Retro Stringop,""" start="00:16:27.220" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""op meaning operation.""" start="00:16:31.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I can perform any operation on the last n words.""" start="00:16:34.260" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Let's look at that.""" start="00:16:40.060" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The 2 means that I want to do something""" start="00:16:42.320" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""to the last two words.""" start="00:16:44.700" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The operation I'm performing is Python code.""" start="00:16:46.940" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""To be honest, I don't know any Python,""" start="00:16:50.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""but string manipulation is easy to understand.""" start="00:16:54.060" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If you do know Python, then you can make your own plugins""" start="00:16:57.620" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and even help with the development of Plover.""" start="00:17:01.701" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""A feature I like in Lem is that""" start="00:17:07.820" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""when you gracefully exit search with Enter or C-m,""" start="00:17:09.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""what you searched for is highlighted.""" start="00:17:15.780" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""You can cycle through the results, the highlights,""" start="00:17:18.500" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and you can toggle the highlights on or off.""" start="00:17:23.241" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""1978, John Kulp designs a keyboard""" start="00:17:30.160" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""known as the Space Cadet Keyboard.""" start="00:17:34.481" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This keyboard has many distinctive qualities,""" start="00:17:37.180" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""one being the modifiers, numbering seven in total:""" start="00:17:40.340" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Shift, Control, Meta, Super, Hyper, Greek, and Top.""" start="00:17:44.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This keyboard influences the development of Emacs.""" start="00:17:51.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""2000, designer Kiyoshi Kimura and programmer Yoji Hagia""" start="00:17:56.860" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""release SandS, a program that lets you turn your spacebar""" start="00:18:02.660" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""into a dual-function key,""" start="00:18:07.400" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""sending space on tap""" start="00:18:09.660" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and acting as the Shift modifier on hold.""" start="00:18:11.500" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""This idea, the dual-function key,""" start="00:18:16.220" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""later revolutionizes typing.""" start="00:18:18.501" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""These two concepts, the space cadet modifiers""" start="00:18:22.060" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and the dual-function key, can be combined.""" start="00:18:25.641" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I use a program called Kanata""" start="00:18:29.580" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""to put all the modifiers on my homerow.""" start="00:18:32.440" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""When I tap the letter a, I get an a.""" start="00:18:36.660" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If I hold it down for longer than 200 milliseconds,""" start="00:18:40.100" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""it acts as the Meta modifier,""" start="00:18:43.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and really I can add""" start="00:18:46.740" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""as many layers to my keyboard as I want.""" start="00:18:48.060" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I don't use a little stenotype.""" start="00:18:52.400" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Thanks to Full Keyboard Steno, the Plover plugin,""" start="00:18:55.500" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I use my whole keyboard.""" start="00:18:59.140" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I have an alternative keyboard layout on it,""" start="00:19:02.020" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""so, even when I'm typing in the traditional way,""" start="00:19:05.440" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""it feels amazing.""" start="00:19:08.700" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""My layout is called Kuron, and I lay it over Melani""" start="00:19:10.380" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""so that I have both available to me at all times.""" start="00:19:15.700" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I don't get them confused because I set them off""" start="00:19:19.620" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""with the way I press keys.""" start="00:19:24.400" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If I press one key at a time,""" start="00:19:26.940" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I'm using Kuron, my keyboard layout.""" start="00:19:29.320" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If I press multiple keys at the same time""" start="00:19:32.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and let them go quickly,""" start="00:19:35.400" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""then I'm using stenotypy, in my case Melani.""" start="00:19:37.340" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""And if I hold one key longer than 200 milliseconds,""" start="00:19:41.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""then I'm activating it as a modifier key or a layer key.""" start="00:19:45.241" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I always know what state I'm in by the way I press my keys.""" start="00:19:51.340" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It's impossible for me to get confused.""" start="00:19:56.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Holding multiple modifiers is not a problem""" start="00:20:03.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""because the keycaps used for stenotypy are flat and square.""" start="00:20:07.860" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Pressing two or more keys at once""" start="00:20:13.440" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""with the same finger is easy.""" start="00:20:15.980" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Notice how close they are to each other.""" start="00:20:18.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""In stenotypy, the homerow is the border""" start="00:20:21.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""between the two rows of keys.""" start="00:20:25.660" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It took me a while to get used to it,""" start="00:20:28.560" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""but now that I am used to it, I quite like it.""" start="00:20:31.260" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""So if I have to press a hotkey""" start="00:20:35.640" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""with all six modifiers, Shift, Control, Meta,""" start="00:20:38.220" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Alt, Hyper, Super, it's easy.""" start="00:20:43.980" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Thanks to Kanata, I have a Greek layer on my board.""" start="00:20:50.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Additionally, I have alpha, beta, and gamma layers""" start="00:20:54.660" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""that send sequences of keys that I can use as hotkeys""" start="00:20:58.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""in both GNU Emacs and Lem.""" start="00:21:03.320" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Maybe you noticed a few while I was programming.""" start="00:21:06.540" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Now it's possible to bring the Space Cadet""" start="00:21:10.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""to any keyboard and to build on its wonderful ideas.""" start="00:21:12.960" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Here I'll note that another Emacser, Excalamus,""" start="00:21:20.920" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""has made a page called Plover with Emacs,""" start="00:21:24.460" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""with information on how to use Emacs""" start="00:21:27.540" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""with the standard stenotype,""" start="00:21:30.640" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""the one that has two rows,""" start="00:21:32.540" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""the one I call a little stenotype.""" start="00:21:34.520" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""While I use my full keyboard,""" start="00:21:37.440" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I understand how a small board can be useful.""" start="00:21:39.600" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Finger movement is greatly reduced,""" start="00:21:43.200" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""leading to a very ergonomic typing experience.""" start="00:21:46.160" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""In fact, all of the speed records""" start="00:21:49.440" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""are set with this stenotype, the standard stenotype.""" start="00:21:53.240" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""There are many great ideas on this page.""" start="00:21:58.840" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Thank you, Excalamus.""" start="00:22:01.480" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Special thanks to Richard Stallman,""" start="00:22:06.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""the creator of GNU Emacs and the Free Software Foundation,""" start="00:22:09.160" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Sasaki Ryosuke, first name Ryosuke,""" start="00:22:13.420" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""the creator and lead developer of Lem,""" start="00:22:16.920" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Mirabai Knight, the creator of the Open Steno Project,""" start="00:22:20.120" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""which oversees the development of Plover,""" start="00:22:24.280" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and jtroo, the creator and lead developer of Kanata.""" start="00:22:26.840" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The views expressed in this talk are solely my own.""" start="00:22:32.700" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I have no connection to any of the parties mentioned herein""" start="00:22:37.000" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and therefore cannot be seen""" start="00:22:41.160" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""as representing them in any capacity.""" start="00:22:43.480" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""What I've said cannot be taken as medical advice.""" start="00:22:45.360" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I used the TranSide theme for GNU Emacs in this talk.""" start="00:22:50.860" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It's beautiful and functional.""" start="00:22:54.760" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I love how the code looks, and I can read the comments.""" start="00:22:57.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""In Lem, I used Gruber.""" start="00:23:03.560" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Again, the comments are readable, and the code looks nice.""" start="00:23:05.760" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""When I first started using Emacs,""" start="00:23:11.200" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I used the Wheatgrass theme.""" start="00:23:13.840" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Another theme that I love is os1.""" start="00:23:19.980" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It's a light, warm, modern theme for Emacs""" start="00:23:24.520" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""inspired by film palettes.""" start="00:23:28.240" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Regarding typography, for programming,""" start="00:23:35.040" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I used JuliaMono, which was designed by Cormullion.""" start="00:23:38.500" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It's extensive, and it's beautiful.""" start="00:23:43.520" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""For graphics, I used PromptFont,""" start="00:23:48.000" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""which was made by Yukari Hafner.""" start="00:23:51.380" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""She's very talented.""" start="00:23:54.840" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I really like her work, including this font.""" start="00:23:56.480" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""There are so many packages that I love in Emacs.""" start="00:24:01.180" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""If I talked about all of them,""" start="00:24:05.520" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""my talk would last for days,""" start="00:24:07.640" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""so I'm only going to mention three.""" start="00:24:09.800" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Keycast.""" start="00:24:12.580" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""At the top of the screen,""" start="00:24:14.400" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""you can see the commands I'm executing""" start="00:24:15.520" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""and how I'm invoking those commands.""" start="00:24:18.040" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""That's Keycast.""" start="00:24:20.560" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Rainbow Delimiters is another one I like.""" start="00:24:21.920" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""It lets me know visually""" start="00:24:25.540" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""when my parentheses are out of balance.""" start="00:24:27.520" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Very helpful when I'm programming in Lisp.""" start="00:24:30.480" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Moodline is another.""" start="00:24:35.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""The modeline is where I can see relevant information""" start="00:24:37.880" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""about the file I'm working on.""" start="00:24:42.900" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""Moodline only gives me the information I want.""" start="00:24:46.840" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""I'm not really worried about too many things, just""" start="00:24:50.760" video="mainVideo-steno" id="subtitle"]]
+[[!template text="""the file name, the mode I'm in, and where I am in the file.""" start="00:24:55.461" video="mainVideo-steno" id="subtitle"]]
+
+
+
+Captioner: daniel
+
+Questions or comments? Please e-mail [z111.513.321@gmail.com](mailto:z111.513.321@gmail.com?subject=Comment%20for%20EmacsConf%202023%20steno%3A%20Programming%20with%20steno)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/steno-before.md b/2023/info/steno-before.md
new file mode 100644
index 00000000..4eced50a
--- /dev/null
+++ b/2023/info/steno-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 26-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Status: All done
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="steno-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 25:03 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1xodScC6DPkfbnqG5FmbB3">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/steno-nav.md b/2023/info/steno-nav.md
new file mode 100644
index 00000000..27ac4e5d
--- /dev/null
+++ b/2023/info/steno-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/emms">Emacs MultiMedia System (EMMS)</a>
+Next by track: <a href="/2023/talks/mentor">Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/sun-close-after.md b/2023/info/sun-close-after.md
new file mode 100644
index 00000000..aebbe6f8
--- /dev/null
+++ b/2023/info/sun-close-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sun-close%3A%20Sunday%20closing%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/sun-close-before.md b/2023/info/sun-close-before.md
new file mode 100644
index 00000000..6f7c587b
--- /dev/null
+++ b/2023/info/sun-close-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 121-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="sun-close-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.opus">Download --main.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (279MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/p/nMXCCJ25wxKUtbuQiwkakA">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sun-close-nav.md b/2023/info/sun-close-nav.md
new file mode 100644
index 00000000..92d58f1d
--- /dev/null
+++ b/2023/info/sun-close-nav.md
@@ -0,0 +1,6 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/sun-open">Sunday opening remarks</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/sun-open-after.md b/2023/info/sun-open-after.md
new file mode 100644
index 00000000..66d2e6fb
--- /dev/null
+++ b/2023/info/sun-open-after.md
@@ -0,0 +1,129 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="sun-open-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Welcome to the second day of EmacsConf 2023.""" start="00:00:00.000" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""There's a General track and a Development track,""" start="00:00:04.520" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""but really, you'll probably find""" start="00:00:06.859" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""interesting things on both tracks""" start="00:00:08.438" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""no matter what your level of experience is,""" start="00:00:10.157" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so don't feel limited to one or the other.""" start="00:00:12.696" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Please note that the hyperdrive talk""" start="00:00:15.355" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""(titled &quot;hyperdrive.el: Peer-to-peer filesystem in Emacs&quot;)""" start="00:00:17.094" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""on the Development track in the afternoon""" start="00:00:21.173" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""is actually a general-audience talk,""" start="00:00:23.492" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""I just didn't have space elsewhere in the schedule.""" start="00:00:25.232" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The best parts of EmacsConf are the conversations.""" start="00:00:28.092" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:31.331" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and I'll give you a quick overview as well.""" start="00:00:34.090" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:36.869" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""using free and open source software.""" start="00:00:40.348" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Using a streaming media player like mpv""" start="00:00:43.227" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""seems to be the best way to watch in terms of performance""" start="00:00:45.646" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""but there are also web-based players""" start="00:00:49.045" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""just in case that's all you've got.""" start="00:00:50.644" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The schedule shows the General track on top""" start="00:00:53.123" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and the Development track on the bottom,""" start="00:00:55.122" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so you can see what else is going on.""" start="00:00:56.801" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""As you're watching the talks,""" start="00:00:59.420" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""you can refer to the schedule in another window.""" start="00:01:00.619" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Hover over the boxes to see the times and titles,""" start="00:01:03.518" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and click on the boxes in the schedule""" start="00:01:06.537" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""to jump to the talk's page for more details.""" start="00:01:08.436" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can also get the schedule as an iCalendar file""" start="00:01:11.215" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""or as an Org file in different time zones.""" start="00:01:13.754" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Many talks will be followed by""" start="00:01:16.013" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""live Q&A web conferences with the speaker,""" start="00:01:17.512" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""which will be done in BigBlueButton or BBB.""" start="00:01:20.171" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""These are indicated with a solid border on the schedule""" start="00:01:23.250" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and by Q&A: BBB on the schedule page.""" start="00:01:26.249" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can join the web conference room""" start="00:01:29.408" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""by clicking on the BBB link""" start="00:01:31.107" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""on the schedule page or the talk's webpage.""" start="00:01:32.726" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Then you can ask your questions yourself when the Q&A starts.""" start="00:01:35.665" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""To improve performance, please keep your webcam off""" start="00:01:38.584" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and stay muted until it's your turn to talk.""" start="00:01:41.043" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""This year we're experimenting with automatically switching""" start="00:01:43.782" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""between talks and Q&A sessions,""" start="00:01:46.401" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so the transitions on the stream might be a little sudden,""" start="00:01:48.760" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""but people in the BigBlueButton room""" start="00:01:51.959" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""can continue the conversation""" start="00:01:53.718" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""even after the talk moves off-stream.""" start="00:01:55.397" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Other talks will have Q&A via Etherpad or IRC,""" start="00:01:58.236" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""depending on what the speakers prefer.""" start="00:02:01.595" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""This is indicated in the schedule with a dashed border""" start="00:02:03.914" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and on the schedule page as well.""" start="00:02:06.933" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Please ask your questions in the recommended places""" start="00:02:09.652" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so that the speakers can easily see them.""" start="00:02:12.091" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Some talks will have the Q&A after the event,""" start="00:02:14.610" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so you can add your questions to their Etherpad.""" start="00:02:17.329" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""We'll e-mail the speakers afterwards""" start="00:02:20.188" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and update the talk pages when they answer.""" start="00:02:21.920" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The schedule pages and track pages have quick shortcuts""" start="00:02:25.186" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so that you can find out more about talks, open the Etherpads,""" start="00:02:28.325" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and join the Q&A sessions. The watch page has more tips""" start="00:02:31.804" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""on how to make the most of Q&A.""" start="00:02:35.363" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you can, please add notes and ask questions""" start="00:02:38.062" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""in the Etherpad for the talk. That makes it easier""" start="00:02:40.841" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""for everyone to share their notes,""" start="00:02:43.840" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and speakers and hosts can read the questions from there.""" start="00:02:45.659" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:02:48.598" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""We have one pad for each talk,""" start="00:02:52.617" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so you can follow the links to get to the next one""" start="00:02:54.676" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""or go back to the schedule and get the link from there.""" start="00:02:56.795" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you have general feedback about""" start="00:02:59.954" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""the conference itself, please put it in""" start="00:03:01.593" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""pad.emacsconf.org/2023 , which is linked on each pad.""" start="00:03:03.752" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can also use this as a general community message board""" start="00:03:09.211" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""for things like Help Wanted.""" start="00:03:11.870" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Internet Relay Chat or IRC can be another great way""" start="00:03:15.009" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""to be part of lots of conversations.""" start="00:03:18.260" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:03:20.787" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""through your web browser. The tabs on the left can help you""" start="00:03:24.506" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""switch between the different channels.""" start="00:03:27.345" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""There's #emacsconf-gen for the General track""" start="00:03:29.904" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and #emacsconf-dev for the Development track.""" start="00:03:32.960" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:03:36.522" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:03:40.241" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:03:45.220" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Of course, you can join any of these channels""" start="00:03:48.499" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""with your favourite IRC client.""" start="00:03:50.618" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""We're on the libera.chat network.""" start="00:03:52.760" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Once again, we're going to be streaming with open captions""" start="00:03:56.736" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:03:59.375" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""captioning volunteers. The captioned talks are indicated""" start="00:04:02.454" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""on the schedule, and with any luck, we'll be posting""" start="00:04:05.813" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""transcripts on talk pages shortly after the talks start.""" start="00:04:08.532" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you need additional accommodations,""" start="00:04:12.031" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""please let us know in #emacsconf-org""" start="00:04:13.850" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and we'll see if we can make things happen.""" start="00:04:16.610" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If something goes down, we'll update status.emacsconf.org.""" start="00:04:18.509" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If it doesn't look like we've noticed yet,""" start="00:04:22.748" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:04:24.607" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""where we will be quietly panicking.""" start="00:04:28.046" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""In all of these conversations, please keep in mind""" start="00:04:30.205" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""our guidelines for conduct. You can find them on the wiki,""" start="00:04:32.904" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""They basically boil down to: please be nice.""" start="00:04:35.903" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If all goes well, the prerecorded talks and transcripts""" start="00:04:39.383" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""should be available from the talk pages""" start="00:04:41.822" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""shortly after they start playing,""" start="00:04:43.821" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and we'll post the recordings of live talks""" start="00:04:45.560" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and Q&A sessions within the next month or so.""" start="00:04:47.459" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you'd like to get an update, you can subscribe to""" start="00:04:50.578" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""the emacsconf-discuss mailing list.""" start="00:04:53.097" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""All right, let's get going.""" start="00:04:56.396" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Leo Vivier is hosting the general track,""" start="00:04:57.955" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and Amin Bandali hosting the development track.""" start="00:05:00.355" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The other volunteers and I will run around mostly backstage,""" start="00:05:03.474" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:05:06.193" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""That's also where we get to thank""" start="00:05:08.272" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""all the people and organizations""" start="00:05:09.911" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""who make EmacsConf even possible.""" start="00:05:11.550" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Thanks for coming to EmacsConf 2023.""" start="00:05:14.589" video="mainVideo-sun-open" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sun-open%3A%20Sunday%20opening%20remarks)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/sun-open-before.md b/2023/info/sun-open-before.md
new file mode 100644
index 00000000..4c6c13d5
--- /dev/null
+++ b/2023/info/sun-open-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 6-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Status: All done
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="sun-open-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 05:17 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/9zjMPEZz1nYokiY7rk4wYv">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sun-open-nav.md b/2023/info/sun-open-nav.md
new file mode 100644
index 00000000..f84ed342
--- /dev/null
+++ b/2023/info/sun-open-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/sat-close">Saturday closing remarks</a>
+Next by track: <a href="/2023/talks/sun-close">Sunday closing remarks</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/table-after.md b/2023/info/table-after.md
new file mode 100644
index 00000000..a0027610
--- /dev/null
+++ b/2023/info/table-after.md
@@ -0,0 +1,252 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="table-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:01.360" video="mainVideo-table" id="subtitle"]]
+
+[[!template text="""Welcome everybody. My name is Daniel Molina""" start="00:00:01.360" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and I'm going to give this talk""" start="00:00:03.080" video="mainVideo-table" id="subtitle"]]
+[[!template text="""&quot;Who needs Excel? Managing your students' qualifications""" start="00:00:05.061" video="mainVideo-table" id="subtitle"]]
+[[!template text="""with Org-table&quot;.""" start="00:00:08.064" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm a professor. I work every day.""" start="00:00:08.960" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I have to qualify my students.""" start="00:00:10.560" video="mainVideo-table" id="subtitle"]]
+[[!template text="""While most would consider normal in this situation,""" start="00:00:12.520" video="mainVideo-table" id="subtitle"]]
+[[!template text="""would be to use Excel or LibreOffice""" start="00:00:15.080" video="mainVideo-table" id="subtitle"]]
+[[!template text="""for doing that.""" start="00:00:17.720" video="mainVideo-table" id="subtitle"]]
+[[!template text="""However, I think that approaching it from Emacs""" start="00:00:18.600" video="mainVideo-table" id="subtitle"]]
+[[!template text="""has several interesting advantages.""" start="00:00:21.180" video="mainVideo-table" id="subtitle"]]
+[[!template text="""First, I would like to write the qualification""" start="00:00:24.480" video="mainVideo-table" id="subtitle"]]
+[[!template text="""next to the justification, next to the student error,""" start="00:00:27.660" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and in the Excel format, it's not comfortable to do that.""" start="00:00:33.600" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Actually, I always prefer to write in Emacs""" start="00:00:36.640" video="mainVideo-table" id="subtitle"]]
+[[!template text="""for many reasons, as many of you.""" start="00:00:38.840" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Also, I love text format because I can compare versions""" start="00:00:42.720" video="mainVideo-table" id="subtitle"]]
+[[!template text="""using a control version system like Git and easily change.""" start="00:00:46.680" video="mainVideo-table" id="subtitle"]]
+[[!template text="""This is very useful for the revision period""" start="00:00:50.280" video="mainVideo-table" id="subtitle"]]
+[[!template text="""in which a student visits me""" start="00:00:52.760" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and maybe I can change the qualification for any reason.""" start="00:00:55.480" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I also can export the results directly to PDF""" start="00:01:01.040" video="mainVideo-table" id="subtitle"]]
+[[!template text="""to publish them in my online campus for the student.""" start="00:01:03.440" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I have many tools for doing that.""" start="00:01:08.680" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I already knew about Org-table formula.""" start="00:01:11.360" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I thought it was very cool and useful""" start="00:01:13.200" video="mainVideo-table" id="subtitle"]]
+[[!template text="""to use Emacs for that,""" start="00:01:15.200" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and I have actually found a package `orgtbl-aggregate`""" start="00:01:16.160" video="mainVideo-table" id="subtitle"]]
+[[!template text="""that seemed adequate for doing that.""" start="00:01:19.240" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Unfortunately, I didn't see a lot of information""" start="00:01:22.860" video="mainVideo-table" id="subtitle"]]
+[[!template text="""about how to do that in a painless way.""" start="00:01:26.320" video="mainVideo-table" id="subtitle"]]
+[[!template text="""So, I have to learn, training and testing,""" start="00:01:29.160" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and then prepare these tools to solve that problem""" start="00:01:31.760" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and to help other teachers.""" start="00:01:35.000" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Anyway, it could be used not only for teaching""" start="00:01:36.640" video="mainVideo-table" id="subtitle"]]
+[[!template text="""but for more contexts.""" start="00:01:39.960" video="mainVideo-table" id="subtitle"]]
+
+[[!template new="1" text="""Demonstration""" start="00:01:41.960" video="mainVideo-table" id="subtitle"]]
+
+[[!template text="""Well, let's start.""" start="00:01:41.960" video="mainVideo-table" id="subtitle"]]
+[[!template text="""First, I have two sections,""" start="00:01:44.800" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the comments and the section of the table, or results.""" start="00:01:46.460" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I have... The comment for each student""" start="00:01:53.400" video="mainVideo-table" id="subtitle"]]
+[[!template text="""is in a different headline.""" start="00:01:56.480" video="mainVideo-table" id="subtitle"]]
+[[!template text="""It's very useful to check with a note.""" start="00:01:57.560" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I can go directly using your helm or ivy""" start="00:02:05.440" video="mainVideo-table" id="subtitle"]]
+[[!template text="""or consult to go directly to the section.""" start="00:02:10.160" video="mainVideo-table" id="subtitle"]]
+[[!template text="""So it's very nice.""" start="00:02:13.000" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Then I put the comment, right, completely wrong,""" start="00:02:14.560" video="mainVideo-table" id="subtitle"]]
+[[!template text="""it answers other questions.""" start="00:02:22.880" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I put other comments here that I could send to the student,""" start="00:02:30.600" video="mainVideo-table" id="subtitle"]]
+[[!template text="""you can imagine, and then""" start="00:02:35.840" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I can put the qualification, the score for each student.""" start="00:02:37.481" video="mainVideo-table" id="subtitle"]]
+[[!template text="""The thing with that is, initially,""" start="00:02:40.160" video="mainVideo-table" id="subtitle"]]
+[[!template text="""when I started doing that, I put, I don't know,""" start="00:02:43.160" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the exception and a qualification with that.""" start="00:02:46.220" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Okay, that's one point, this a three,""" start="00:02:50.720" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and use a column total with something like that.""" start="00:02:55.680" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Okay, that's nice.""" start="00:03:06.680" video="mainVideo-table" id="subtitle"]]
+
+[[!template new="1" text="""Range""" start="00:03:08.320" video="mainVideo-table" id="subtitle"]]
+
+[[!template text="""But then, when I started getting more and more parts,""" start="00:03:08.320" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I considered it more useful to use,""" start="00:03:11.640" video="mainVideo-table" id="subtitle"]]
+[[!template text="""to put for each part,""" start="00:03:17.082" video="mainVideo-table" id="subtitle"]]
+[[!template text="""which is the maximum qualification,""" start="00:03:20.700" video="mainVideo-table" id="subtitle"]]
+[[!template text="""on the range of the qualification.""" start="00:03:20.300" video="mainVideo-table" id="subtitle"]]
+[[!template text="""In that case, I'm going to put,""" start="00:03:22.920" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the first one is two scores, the second three points,""" start="00:03:25.560" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the third one is one point, and the last one, four points.""" start="00:03:28.680" video="mainVideo-table" id="subtitle"]]
+[[!template text="""And instead of putting that in that way,""" start="00:03:35.000" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I like to put one is completely right,""" start="00:03:37.800" video="mainVideo-table" id="subtitle"]]
+[[!template text="""zero is completely wrong, or maybe some intermediate values for that.""" start="00:03:41.028" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Of course, I have to change the qualification,""" start="00:03:47.320" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the formula, so it's very simple.""" start="00:03:51.000" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I only have to put,""" start="00:03:54.440" video="mainVideo-table" id="subtitle"]]
+[[!template text="""multiply the values of the second line with that.""" start="00:03:56.480" video="mainVideo-table" id="subtitle"]]
+[[!template text="""So, it's very useful for doing that.""" start="00:04:08.300" video="mainVideo-table" id="subtitle"]]
+
+[[!template new="1" text="""More qualifications""" start="00:04:11.900" video="mainVideo-table" id="subtitle"]]
+
+[[!template text="""Okay, that's the first part, so I can put the comment,""" start="00:04:11.900" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I can go to the section, I can create...""" start="00:04:16.640" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put more qualifications.""" start="00:04:19.960" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Now I'm going to put the table.""" start="00:04:24.920" video="mainVideo-table" id="subtitle"]]
+[[!template text="""First I'm going to change, rename the column name,""" start="00:04:27.640" video="mainVideo-table" id="subtitle"]]
+[[!template text="""because it's easier when there is only one word.""" start="00:04:30.460" video="mainVideo-table" id="subtitle"]]
+[[!template text="""And it's very simple to use. You only have to put""" start="00:04:39.040" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the name, aggregate, the name of the table,""" start="00:04:47.160" video="mainVideo-table" id="subtitle"]]
+[[!template text="""in that case group A,""" start="00:04:51.440" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and in another string, the columns.""" start="00:04:54.660" video="mainVideo-table" id="subtitle"]]
+[[!template text="""For instance, name, surname, total.""" start="00:04:57.200" video="mainVideo-table" id="subtitle"]]
+[[!template text="""And you can see that you can get a lesson list""" start="00:05:03.800" video="mainVideo-table" id="subtitle"]]
+[[!template text="""with all the students,""" start="00:05:07.440" video="mainVideo-table" id="subtitle"]]
+[[!template text="""but only with the final score to publish them.""" start="00:05:09.120" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Okay?""" start="00:05:16.760" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Even you can update the name of the column,""" start="00:05:17.680" video="mainVideo-table" id="subtitle"]]
+[[!template text="""not in the original table,""" start="00:05:20.680" video="mainVideo-table" id="subtitle"]]
+[[!template text="""but in the lesson table using that format.""" start="00:05:21.801" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Okay?""" start="00:05:29.560" video="mainVideo-table" id="subtitle"]]
+[[!template text="""That is a good option.""" start="00:05:32.100" video="mainVideo-table" id="subtitle"]]
+
+[[!template new="1" text="""Subsets""" start="00:05:34.240" video="mainVideo-table" id="subtitle"]]
+
+[[!template text="""Now we are going to see how can we use that""" start="00:05:34.240" video="mainVideo-table" id="subtitle"]]
+[[!template text="""to make a subset of the students.""" start="00:05:38.500" video="mainVideo-table" id="subtitle"]]
+[[!template text="""For instance, imagine, this is me,""" start="00:05:44.360" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put the bad, I change, now I can update,""" start="00:05:47.840" video="mainVideo-table" id="subtitle"]]
+[[!template text="""you can see this, but also I'm going to put a list""" start="00:05:54.800" video="mainVideo-table" id="subtitle"]]
+[[!template text="""with the students that have failed the exam.""" start="00:06:02.760" video="mainVideo-table" id="subtitle"]]
+[[!template text="""It's simple, because this package has the option `:cond`.""" start="00:06:10.961" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put first to see it better,""" start="00:06:21.260" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put a condition""" start="00:06:26.200" video="mainVideo-table" id="subtitle"]]
+[[!template text="""in which we aggregate less than a half, 5,""" start="00:06:28.600" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and I have to use a `string-to-number` total.""" start="00:06:37.520" video="mainVideo-table" id="subtitle"]]
+[[!template text="""In that way, I can see that this is the student""" start="00:06:44.180" video="mainVideo-table" id="subtitle"]]
+[[!template text="""that has failed the exam,""" start="00:06:47.260" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I could use that to make another table,""" start="00:06:48.840" video="mainVideo-table" id="subtitle"]]
+[[!template text="""this is the people that passed the exam.""" start="00:06:54.080" video="mainVideo-table" id="subtitle"]]
+
+[[!template new="1" text="""Sorting""" start="00:07:08.300" video="mainVideo-table" id="subtitle"]]
+
+[[!template text="""Another interesting feature is that""" start="00:07:08.300" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I can... the lesson table can be sorted automatically.""" start="00:07:10.981" video="mainVideo-table" id="subtitle"]]
+[[!template text="""It's simple. You only have to put this symbol (`^`),""" start="00:07:15.621" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and you can put next to the column you want""" start="00:07:20.101" video="mainVideo-table" id="subtitle"]]
+[[!template text="""to use for the sort, and then you can put""" start="00:07:23.361" video="mainVideo-table" id="subtitle"]]
+[[!template text="""`a` if you want to sort alphabetically,""" start="00:07:27.000" video="mainVideo-table" id="subtitle"]]
+[[!template text="""in uppercase if you want to reverse the sort,""" start="00:07:30.680" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and `n` if you want to sort numerically.""" start="00:07:33.880" video="mainVideo-table" id="subtitle"]]
+[[!template text="""For instance, I can put that""" start="00:07:38.920" video="mainVideo-table" id="subtitle"]]
+[[!template text="""from the lesser score to the best score,""" start="00:07:40.760" video="mainVideo-table" id="subtitle"]]
+[[!template text="""or here from the best score to the lesser score.""" start="00:07:43.960" video="mainVideo-table" id="subtitle"]]
+[[!template text="""And this sort is completely independent""" start="00:07:46.640" video="mainVideo-table" id="subtitle"]]
+[[!template text="""to the sort of the original table.""" start="00:07:48.961" video="mainVideo-table" id="subtitle"]]
+
+[[!template new="1" text="""New table""" start="00:07:51.641" video="mainVideo-table" id="subtitle"]]
+
+[[!template text="""Now I'm going to do another different thing,""" start="00:07:51.641" video="mainVideo-table" id="subtitle"]]
+[[!template text="""we are going to put a new table,""" start="00:07:54.521" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put a new table""" start="00:08:02.800" video="mainVideo-table" id="subtitle"]]
+[[!template text="""in which I'm going to put""" start="00:08:07.560" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the number of passed students, failed students""" start="00:08:09.640" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and the ratio of students. It's simple.""" start="00:08:14.320" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put the pass, in that case, as column,""" start="00:08:16.520" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I can put the count, of course, I can put the count,""" start="00:08:26.560" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the number of students""" start="00:08:32.920" video="mainVideo-table" id="subtitle"]]
+[[!template text="""that have passed, so I'm going to put in that way, ok?""" start="00:08:35.800" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put pass, count, failed, ratio.""" start="00:08:42.080" video="mainVideo-table" id="subtitle"]]
+[[!template text="""You can see, ok?""" start="00:08:58.480" video="mainVideo-table" id="subtitle"]]
+[[!template text="""But this only the count,""" start="00:08:59.740" video="mainVideo-table" id="subtitle"]]
+[[!template text="""you are going to put the number wrong.""" start="00:09:01.860" video="mainVideo-table" id="subtitle"]]
+[[!template text="""So, it's true, but you can actually put formula here.""" start="00:09:04.520" video="mainVideo-table" id="subtitle"]]
+[[!template text="""For instance, you can say,""" start="00:09:08.360" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I know that I have 3 students,""" start="00:09:10.080" video="mainVideo-table" id="subtitle"]]
+[[!template text="""so the number of failed is 3 minus the passed student.""" start="00:09:12.400" video="mainVideo-table" id="subtitle"]]
+[[!template text="""And also, I can put the formula, is the people,""" start="00:09:18.800" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the students that passed,""" start="00:09:24.960" video="mainVideo-table" id="subtitle"]]
+[[!template text="""divide into the number total of students, ok?""" start="00:09:27.720" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Let's go to put that in that way,""" start="00:09:36.080" video="mainVideo-table" id="subtitle"]]
+[[!template text="""is the people that passed, it is better in that way,""" start="00:09:41.380" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and also I can put directly the number of,""" start="00:09:44.400" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the ratio of students.""" start="00:09:48.360" video="mainVideo-table" id="subtitle"]]
+[[!template text="""So, in that way, I can have a table""" start="00:09:50.920" video="mainVideo-table" id="subtitle"]]
+[[!template text="""with the students that passed,""" start="00:09:55.740" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the students that failed""" start="00:09:57.520" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and the ratio of people that passed.""" start="00:09:58.560" video="mainVideo-table" id="subtitle"]]
+
+[[!template new="1" text="""Statistics""" start="00:10:01.280" video="mainVideo-table" id="subtitle"]]
+
+[[!template text="""Sometimes this type of qualification will be useful for me,""" start="00:10:01.280" video="mainVideo-table" id="subtitle"]]
+[[!template text="""to see how much has been the sound,""" start="00:10:04.820" video="mainVideo-table" id="subtitle"]]
+[[!template text="""how much good has been the exercise.""" start="00:10:08.080" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Now, I'm going to put a new table.""" start="00:10:12.240" video="mainVideo-table" id="subtitle"]]
+[[!template text="""This new table is going to go some statistics,""" start="00:10:14.880" video="mainVideo-table" id="subtitle"]]
+[[!template text="""`statistics_score`, `begin: aggregate :table &quot;final&quot;`.""" start="00:10:22.422" video="mainVideo-table" id="subtitle"]]
+[[!template text="""In this case, I'm going to use not the original table,""" start="00:10:32.380" video="mainVideo-table" id="subtitle"]]
+[[!template text="""but a final, I'm going to put `final_group`,""" start="00:10:43.920" video="mainVideo-table" id="subtitle"]]
+[[!template text="""`final_p1`, `final_p2`, ok?""" start="00:10:54.020" video="mainVideo-table" id="subtitle"]]
+[[!template text="""And as `:cols`, I'm going to put directly""" start="00:11:01.400" video="mainVideo-table" id="subtitle"]]
+[[!template text="""how many results I have, I put number,""" start="00:11:06.120" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put also the mean.""" start="00:11:13.580" video="mainVideo-table" id="subtitle"]]
+[[!template text="""You can see that mean total is not working""" start="00:11:19.200" video="mainVideo-table" id="subtitle"]]
+[[!template text="""because I'm using this table and I renamed,""" start="00:11:21.401" video="mainVideo-table" id="subtitle"]]
+[[!template text="""the column name was renamed,""" start="00:11:24.520" video="mainVideo-table" id="subtitle"]]
+[[!template text="""so it's `mean(Score)`, mean,""" start="00:11:26.080" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and then the score. You can obtain `stdiv` -- `sdev`,""" start="00:11:36.680" video="mainVideo-table" id="subtitle"]]
+[[!template text="""sorry, there was an error about that,""" start="00:12:05.920" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and two decimal,""" start="00:12:08.960" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and that is another interesting score.""" start="00:12:12.640" video="mainVideo-table" id="subtitle"]]
+
+[[!template new="1" text="""Combining""" start="00:12:17.800" video="mainVideo-table" id="subtitle"]]
+
+[[!template text="""Now, I'm going to finish showing how we can use.""" start="00:12:17.800" video="mainVideo-table" id="subtitle"]]
+[[!template text="""To finish it, we are going to see""" start="00:12:23.240" video="mainVideo-table" id="subtitle"]]
+[[!template text="""how we can combine several tables""" start="00:12:25.840" video="mainVideo-table" id="subtitle"]]
+[[!template text="""or even an aggregated table in a new table.""" start="00:12:28.300" video="mainVideo-table" id="subtitle"]]
+[[!template text="""For instance, you can have a table for the practice 1,""" start="00:12:32.480" video="mainVideo-table" id="subtitle"]]
+[[!template text="""you can have a table for the practice 2,""" start="00:12:36.260" video="mainVideo-table" id="subtitle"]]
+[[!template text="""so I'm going to do that.""" start="00:12:38.200" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to move this table. You can copy or remove,""" start="00:12:40.360" video="mainVideo-table" id="subtitle"]]
+[[!template text="""doesn't matter the order,""" start="00:12:48.181" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put this to identify the result of practice 2,""" start="00:12:49.760" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Org create an ID (`org-id-get-create`),""" start="00:12:59.520" video="mainVideo-table" id="subtitle"]]
+[[!template text="""then we have a previous result,""" start="00:13:03.322" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and I have a final table.""" start="00:13:07.480" video="mainVideo-table" id="subtitle"]]
+[[!template text="""The final table could be complicated,""" start="00:13:10.200" video="mainVideo-table" id="subtitle"]]
+[[!template text="""but it's not so much complicated, it's only that,""" start="00:13:11.840" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put something that the formula wants.""" start="00:13:17.440" video="mainVideo-table" id="subtitle"]]
+[[!template text="""The formula is to make""" start="00:13:21.960" video="mainVideo-table" id="subtitle"]]
+[[!template text="""an `org-lookup-first` of the second name,""" start="00:13:26.589" video="mainVideo-table" id="subtitle"]]
+[[!template text="""considering that it's unique,""" start="00:13:34.401" video="mainVideo-table" id="subtitle"]]
+[[!template text="""`remote` of the surname,""" start="00:13:41.541" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and let's say another `remote` of the `$3` element,""" start="00:13:53.440" video="mainVideo-table" id="subtitle"]]
+[[!template text="""ok, that's an error because I don't put yet the ID,""" start="00:14:05.560" video="mainVideo-table" id="subtitle"]]
+[[!template text="""so I'm going to copy -- mark and copy --""" start="00:14:15.120" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and paste the unique ID generated,""" start="00:14:19.760" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I'm going to put that... I think there is missing one.""" start="00:14:28.520" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Finally. Okay, that's right.""" start="00:14:38.520" video="mainVideo-table" id="subtitle"]]
+[[!template text="""So imagine that I change something here, for instance,""" start="00:14:43.400" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I put... I change that,""" start="00:14:49.580" video="mainVideo-table" id="subtitle"]]
+[[!template text="""actually, this is changed also, and this is changed.""" start="00:14:56.701" video="mainVideo-table" id="subtitle"]]
+[[!template text="""This is a good way to divide the classification""" start="00:15:02.200" video="mainVideo-table" id="subtitle"]]
+[[!template text="""in several files, one for the practice 1,""" start="00:15:08.600" video="mainVideo-table" id="subtitle"]]
+[[!template text="""one for the practice 2, and one final practice""" start="00:15:10.201" video="mainVideo-table" id="subtitle"]]
+[[!template text="""that I can finally export in a final table.""" start="00:15:15.040" video="mainVideo-table" id="subtitle"]]
+[[!template text="""Of course you can make it a lot more pretty,""" start="00:15:27.640" video="mainVideo-table" id="subtitle"]]
+[[!template text="""but this is all I want to show you.""" start="00:15:31.120" video="mainVideo-table" id="subtitle"]]
+[[!template text="""I hope with this talk""" start="00:15:33.360" video="mainVideo-table" id="subtitle"]]
+[[!template text="""you have learned a lot more about Org formula,""" start="00:15:34.800" video="mainVideo-table" id="subtitle"]]
+[[!template text="""[orgtbl-aggregate] package,""" start="00:15:37.680" video="mainVideo-table" id="subtitle"]]
+[[!template text="""and how you can use all this techniques""" start="00:15:39.689" video="mainVideo-table" id="subtitle"]]
+[[!template text="""to improve your qualification of a student,""" start="00:15:42.280" video="mainVideo-table" id="subtitle"]]
+[[!template text="""or for whatever you want.""" start="00:15:45.600" video="mainVideo-table" id="subtitle"]]
+
+
+
+Captioner: danielmolina
+
+Questions or comments? Please e-mail [dmolina@mailbox.org](mailto:dmolina@mailbox.org?subject=Comment%20for%20EmacsConf%202023%20table%3A%20Who%20needs%20Excel%3F%20Managing%20your%20students%20qualifications%20with%20org-table)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/table-before.md b/2023/info/table-before.md
new file mode 100644
index 00000000..9e58529f
--- /dev/null
+++ b/2023/info/table-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 16-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Status: All done
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="table-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 15:51 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.mp4">Download --alternative.mp4 (126MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.webm">Download --alternative.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/p8K8mtayv2HYtw1gK3zUwR">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/table-nav.md b/2023/info/table-nav.md
new file mode 100644
index 00000000..625ecd74
--- /dev/null
+++ b/2023/info/table-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/teaching">Teaching computer and data science with literate programming tools</a>
+Next by track: <a href="/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/taming-after.md b/2023/info/taming-after.md
new file mode 100644
index 00000000..619aed5c
--- /dev/null
+++ b/2023/info/taming-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [emacsconf@gergo.csillger.hu](mailto:emacsconf@gergo.csillger.hu?subject=Comment%20for%20EmacsConf%202022%20taming%3A%20Taming%20things%20with%20Org%20Mode)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/taming-before.md b/2023/info/taming-before.md
new file mode 100644
index 00000000..364f0fdc
--- /dev/null
+++ b/2023/info/taming-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2023-12-02. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="taming">
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/taming" title="Taming things with Org Mode" data-slug="taming"> <title> 11:05-11:15 Taming things with Org Mode</title> <rect stroke-width="3" x="196" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(209,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> taming</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 2:40 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 2:50- 3:30 Literate Documentation with Emacs and Org Mode</title> <rect x="549" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(609,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 3:45- 4:05 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="635" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(664,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 10-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2023/current/bbb-taming.html>
+Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Status: Sorry, this talk has been cancelled
+
+
+
+
+
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/taming-nav.md b/2023/info/taming-nav.md
new file mode 100644
index 00000000..4fa4474d
--- /dev/null
+++ b/2023/info/taming-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a>
+Next by time: <a href="/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/teaching-after.md b/2023/info/teaching-after.md
new file mode 100644
index 00000000..6846d4d7
--- /dev/null
+++ b/2023/info/teaching-after.md
@@ -0,0 +1,1340 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="teaching-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""Welcome to my talk, which is pre-recorded,""" start="00:00:00.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""so please don't blame me if I come across""" start="00:00:04.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""as wooden and humorless.""" start="00:00:06.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""It's hard to work up any emotion""" start="00:00:08.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""when looking at a mechanical eye.""" start="00:00:11.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Of course, I am German,""" start="00:00:13.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""so I am pretty wooden and humorless to begin with.""" start="00:00:15.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""What else do you need to know about me?""" start="00:00:18.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Not much, I suppose, except that I have been""" start="00:00:20.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""an Emacs user on and off""" start="00:00:23.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""since my days as a graduate student""" start="00:00:25.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in theoretical physics in the 1990s.""" start="00:00:26.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I picked Emacs and Org Mode up again""" start="00:00:30.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""for teaching during COVID""" start="00:00:34.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""when I had a lot of time on my hands,""" start="00:00:36.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and when the teaching and learning needs shifted""" start="00:00:38.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""because of the exclusive online teaching.""" start="00:00:40.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Now I'm going to take my picture away.""" start="00:00:44.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""You had a good look at me.""" start="00:00:48.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I think that's just going to be in the way.""" start="00:00:49.560" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""My interest in this topic""" start="00:00:54.160" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""So my interest in this topic began with""" start="00:00:54.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""an Emacs talk given by Daniel German""" start="00:00:57.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from the University of Victoria in Canada in 2021.""" start="00:00:59.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Daniel demonstrated in detail""" start="00:01:04.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""how he uses Emacs and Org Mode""" start="00:01:06.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""to prepare and deliver lectures""" start="00:01:09.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""on different programming languages.""" start="00:01:12.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""This gave me the idea to try the same thing""" start="00:01:14.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""with my students with an important alteration.""" start="00:01:16.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I wanted to force them to use Emacs and Org Mode""" start="00:01:20.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""just as most computer science instructors""" start="00:01:23.560" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""force their students to use whatever they are using""" start="00:01:25.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""when they develop their material.""" start="00:01:29.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I carried my plan out and mandated Emacs and Org Mode""" start="00:01:32.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""as the only programming platform and IDE""" start="00:01:36.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""for three consecutive terms in all my courses,""" start="00:01:40.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""nine courses in total.""" start="00:01:43.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I will give more details later.""" start="00:01:45.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I published my results as a case study""" start="00:01:47.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in September of this year,""" start="00:01:49.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and it contains the missing bits""" start="00:01:52.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that I will not talk about today for lack of time,""" start="00:01:53.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""especially regarding the methodology,""" start="00:01:56.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""the assessment, et cetera.""" start="00:01:58.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Please also use the Q&A to inquire about such details""" start="00:02:00.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""if they interest you.""" start="00:02:05.000" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""What is data science?""" start="00:02:08.040" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""I probably don't have to explain what computer science is,""" start="00:02:08.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""but not everyone may know what data science does.""" start="00:02:12.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I teach courses in both disciplines""" start="00:02:16.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and the boundaries between them are blurred,""" start="00:02:18.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""so much of what I'm saying about data science""" start="00:02:20.560" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""will also be relevant for computer science.""" start="00:02:22.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Conceptually, data science is an interdisciplinary affair""" start="00:02:24.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that intersects with computer science""" start="00:02:29.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and with whatever it is that the data scientist""" start="00:02:32.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""or his or her clients know very well; their domain.""" start="00:02:34.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Because of this interdisciplinary character,""" start="00:02:39.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and because their focus is on the data""" start="00:02:42.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""rather than only on algorithms or mathematics,""" start="00:02:45.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""successful data scientists need to be more broadly educated""" start="00:02:48.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""than specialists in computer science or statistics.""" start="00:02:52.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""In particular, there's a need to master""" start="00:02:56.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""the entire so-called data science pipeline:""" start="00:03:00.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from data cleaning, which you see""" start="00:03:03.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""on the very left in this slide,""" start="00:03:06.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""over coding, to statistical modeling,""" start="00:03:08.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and to data storytelling through visualization,""" start="00:03:12.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which you see on the very right.""" start="00:03:14.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""This is why until recently,""" start="00:03:17.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""data science was a graduate-level education""" start="00:03:19.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""only for software engineers, computer scientists,""" start="00:03:22.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""statisticians, psychologists, biologists, business people,""" start="00:03:25.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""or for whoever took a special fancy""" start="00:03:31.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""to data in their chosen field.""" start="00:03:34.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Only with a growing interest in machine learning,""" start="00:03:37.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""this has changed.""" start="00:03:40.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And now we train--or try to train--data scientists""" start="00:03:42.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in undergraduate programs as well.""" start="00:03:45.600" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Computer science is a craft""" start="00:03:47.640" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""Now, what I'm saying here, I think is true""" start="00:03:47.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""for all areas of computing,""" start="00:03:52.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from software engineering to data science.""" start="00:03:54.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""They are mostly taught and learned like a craft""" start="00:03:56.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""rather than a science, not through research,""" start="00:04:00.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""but through drill.""" start="00:04:03.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The elements of this drill can be illustrated""" start="00:04:04.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""by learning how to fix cars.""" start="00:04:07.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""They include taking a problem apart""" start="00:04:09.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""with the tools you already know,""" start="00:04:12.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""learn a lot more tools in the process of doing that,""" start="00:04:14.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""then solve many, many problems""" start="00:04:18.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""of increasing difficulty""" start="00:04:20.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""while being or getting more literate, as it were,""" start="00:04:22.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""about the mechanics of computing,""" start="00:04:25.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""including the hardware, the infrastructure,""" start="00:04:27.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and finally develop a way of thinking""" start="00:04:30.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that allows the learner to identify patterns""" start="00:04:32.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""to solve new problems better and faster.""" start="00:04:35.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Unlike learning how to fix cars,""" start="00:04:39.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""all of the objects of our interest--""" start="00:04:42.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""both hardware and software--are evolving rapidly.""" start="00:04:44.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""In this field, radical innovation is the rule,""" start="00:04:48.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""not the exception.""" start="00:04:51.520" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""The problem""" start="00:04:52.840" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""The problem that I identified is that students,""" start="00:04:52.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""especially undergraduate students""" start="00:04:58.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in computer and data science,""" start="00:05:00.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""often do no longer understand the infrastructure.""" start="00:05:02.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Here are a few examples of the problems""" start="00:05:06.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that the students seem to have.""" start="00:05:08.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""They do not understand computer architecture,""" start="00:05:10.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""except in theory.""" start="00:05:13.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""They cannot navigate their way around their own computers.""" start="00:05:14.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""They don't understand the value or the issues of networks.""" start="00:05:18.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""They are often more interested in convenience""" start="00:05:22.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""than in customization of the environment.""" start="00:05:25.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""As a result, the machines which we're meant to control""" start="00:05:28.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""have all the power--though passively,""" start="00:05:31.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""of course, for now anyway.""" start="00:05:35.080" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""The solution: Emacs + Org-mode""" start="00:05:36.560" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""Enter Emacs, the self-extensible operating system""" start="00:05:36.560" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""disguised as a text editor.""" start="00:05:43.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""You're at EmacsConf, so of course I don't have to tell you""" start="00:05:46.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""what Emacs can do.""" start="00:05:51.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Here's a rundown on the right-hand side""" start="00:05:52.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""of some of its most important properties,""" start="00:05:54.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and an Org Mode file excerpt""" start="00:05:56.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from one of my classes on the left.""" start="00:05:58.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""What you may not know is how to onboard students who have,""" start="00:06:00.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""at the start, no interest whatsoever""" start="00:06:05.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in leaving their comfort zone,""" start="00:06:07.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which is defined by a lifetime of Windows,""" start="00:06:08.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""pre-configured graphical interfaces, and software bloat.""" start="00:06:12.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""In fact, when I started this, I wasn't very hopeful,""" start="00:06:16.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""but the results have made me even more optimistic""" start="00:06:19.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""than I already am by nature.""" start="00:06:22.400" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Emacs configuration file""" start="00:06:24.120" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""So to rein in your expectations,""" start="00:06:24.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""you cannot do entirely without""" start="00:06:28.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""configuring the student's experience.""" start="00:06:31.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""An important part of this""" start="00:06:33.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""is the initial Emacs configuration shown here.""" start="00:06:35.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The minimal configuration file,""" start="00:06:38.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which you can see on the right-hand side,""" start="00:06:40.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""allows the students to run code in C and C++, R, SQL,""" start="00:06:42.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""SQLite, Python, and Bash.""" start="00:06:46.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""It will allow them to update Emacs packages""" start="00:06:48.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from the stable Melpa repository,""" start="00:06:52.560" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and it will allow them to create code blocks easily""" start="00:06:55.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""using skeleton commands for code blocks,""" start="00:06:58.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and to auto-load the Emacs Speaks Statistics package,""" start="00:07:01.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which you particularly need when you run R in Emacs,""" start="00:07:06.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and lastly, to disable toolbar and graphical menu bars.""" start="00:07:09.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""To do that encourages the exclusive use of the keyboard""" start="00:07:14.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""to control Emacs, and to stop the students""" start="00:07:19.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from flicking all the time to the mouse;""" start="00:07:23.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""seems to be an essential part of getting used to Emacs.""" start="00:07:25.840" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Story + code = source + documentation""" start="00:07:30.360" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""Now Org Mode was included in Emacs in 2006 as a major mode,""" start="00:07:30.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and as you know, it's a structured plain text format""" start="00:07:38.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""with notebook live code execution.""" start="00:07:41.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""It's an ideal platform for literate programming,""" start="00:07:45.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which is a term for programming that intermingles code,""" start="00:07:47.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""documentation, and output within a single document,""" start="00:07:52.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and that can, as you can see here from an org file,""" start="00:07:55.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""either be tangled into source code""" start="00:07:59.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""or woven into a documentation file, which could be PDF,""" start="00:08:02.560" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""could be Markdown, could be OpenOffice,""" start="00:08:07.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""could be a notebook format.""" start="00:08:11.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""This methodology was conceived by Donald Knuth in 1984,""" start="00:08:13.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and it is therefore even older than Emacs itself.""" start="00:08:18.480" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""What is literate programming?""" start="00:08:22.040" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""The main purpose of literate programming is not only""" start="00:08:22.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""to make code or documentation or output more manageable,""" start="00:08:27.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""but to allow humans to create a data story with ease""" start="00:08:31.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from a single source.""" start="00:08:34.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""So what you see on the slide on the left-hand side""" start="00:08:37.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""is the story and code inside a Org Mode file.""" start="00:08:40.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The file starts with some documentation,""" start="00:08:45.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""then with the white background is the code,""" start="00:08:49.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and at the bottom you see an output file,""" start="00:08:52.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which is not shown here on the slide itself.""" start="00:08:56.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""In the middle, you have the source code,""" start="00:09:00.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which is the result of tangling""" start="00:09:02.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""or of opening a buffer inside org-mode.""" start="00:09:05.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And on the very right-hand side, you have a PDF--""" start="00:09:10.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""actually this HTML rendering of the very same file""" start="00:09:16.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that you see on the very left.""" start="00:09:20.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""So the humans look at some of this code,""" start="00:09:22.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and the machines will look at other parts of the code.""" start="00:09:26.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I actually did all my programming in a literate way""" start="00:09:29.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""even in the early 1990s, not using org-mode,""" start="00:09:33.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which didn't exist yet,""" start="00:09:35.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""but using Norman Ramsey's Noweb preprocessor.""" start="00:09:36.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And I still use it inside org-mode today.""" start="00:09:40.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""This preprocessor, Noweb, allows you to tangle code""" start="00:09:43.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from within an org-mode file that's a self-standing file,""" start="00:09:47.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""much like org-mode's edit functions,""" start="00:09:50.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which export code blocks into buffers""" start="00:09:52.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in whatever language the code block is written.""" start="00:09:55.640" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Emacs as a literate programming tool""" start="00:09:59.880" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""In data science, these interactive notebooks""" start="00:09:59.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in one of the interpreted languages like Julia,""" start="00:10:02.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Python, or R dominate.""" start="00:10:06.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The basis technology,""" start="00:10:07.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""is that of Jupyter notebooks, which take their name""" start="00:10:10.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from Julia, Python, and R.""" start="00:10:12.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And these notebooks use a spruced-up shell (for example,""" start="00:10:14.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""IPython for Python) with an option to add SQL cells.""" start="00:10:19.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Org Mode inside Emacs has a large number of advantages--""" start="00:10:23.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""some of them are listed here--over these notebooks.""" start="00:10:28.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Two of these stand out particularly.""" start="00:10:31.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Different languages can be mixed, as shown in the image,""" start="00:10:33.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""while in Jupyter notebooks, a notebook is limited to""" start="00:10:39.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""running a kernel in one language only.""" start="00:10:43.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""So the content of the notebook--""" start="00:10:45.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""its document code or output part--""" start="00:10:48.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""can be exported in a variety of formats,""" start="00:10:50.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which makes it much easier to share with others""" start="00:10:52.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and to use one's work in different reporting formats;""" start="00:10:55.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""for example, to read it out into a LaTeX publication.""" start="00:10:58.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Actually, to come back to this,""" start="00:11:02.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""the file does not show different languages.""" start="00:11:08.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""That is something you can see in a paper of mine,""" start="00:11:11.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in one of the figures.""" start="00:11:14.160" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Case study: basic setup""" start="00:11:18.960" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""Now, coming to the case study itself,""" start="00:11:18.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""here are some of the overall results of the case study.""" start="00:11:22.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Now, the courses ranged from introductory to advanced,""" start="00:11:25.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""as you can see here in the table on the left-hand side.""" start="00:11:29.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The topics covered different programming applications.""" start="00:11:32.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The courses were taught""" start="00:11:37.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""over a period of three consecutive terms.""" start="00:11:38.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""There was between 6 and 28 participants per course.""" start="00:11:41.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I used a few other tools besides Emacs:""" start="00:11:45.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""GitHub as the main repository for all the material,""" start="00:11:49.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Datacamp for structured online lessons and exercises,""" start="00:11:51.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Canvas as a learning management system,""" start="00:11:55.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and Zoom to record the sessions for later use.""" start="00:11:57.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Now, the material for all these courses""" start="00:12:00.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""is openly available on GitHub,""" start="00:12:03.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and the address is on the slide at the bottom.""" start="00:12:05.400" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Emacs + Org-mode notebooks""" start="00:12:11.280" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""I'm now going to briefly comment on""" start="00:12:11.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""the most important aspects of using Emacs and Org Mode""" start="00:12:15.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in and outside of class.""" start="00:12:18.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Essentially, these two--Emacs and Org Mode--""" start="00:12:20.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""were used all the time for almost everything""" start="00:12:24.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that the students were doing in and outside of class.""" start="00:12:26.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The only exception were multiple choice tests""" start="00:12:29.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and online assignments""" start="00:12:32.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""on the Datacamp learning platform""" start="00:12:34.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in the data science courses.""" start="00:12:35.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""But everything else--code-along lectures, home assignments,""" start="00:12:37.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""student projects, practice in class--""" start="00:12:40.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""was done with these two tools.""" start="00:12:42.440" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Onboarding: simplified Emacs tutorial""" start="00:12:45.800" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""To facilitate the onboarding,""" start="00:12:45.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""so to get students used to Emacs in the first place,""" start="00:12:48.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I developed a simplified Emacs tutorial,""" start="00:12:51.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which was focused on the basics of literate programming.""" start="00:12:53.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""It included navigation in major modes,""" start="00:12:56.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""managing files and buffers, customizing the interface,""" start="00:13:00.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and keyboard shortcuts.""" start="00:13:02.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""It was considerably shorter;""" start="00:13:04.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""about a quarter of the size of the standard Emacs tutorial,""" start="00:13:06.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which contains a lot more stuff.""" start="00:13:12.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""As a result of this onboarding,""" start="00:13:14.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""by the end of the second week,""" start="00:13:16.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""most students were able""" start="00:13:18.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""to use Emacs and Org Mode competently""" start="00:13:19.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""for their assignments in and outside of class,""" start="00:13:22.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""completely independent of their previous exposure""" start="00:13:25.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""to any of these tools.""" start="00:13:29.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Most of the students, in fact, had never heard of Emacs.""" start="00:13:31.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""All the classes were taught physically in a computer lab.""" start="00:13:35.400" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Instruction + interaction""" start="00:13:40.840" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""Emacs with Org Mode""" start="00:13:40.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and the necessary languages for the class""" start="00:13:42.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""were pre-installed on the computers.""" start="00:13:45.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The computers ran Windows, unfortunately,""" start="00:13:47.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""like most of the students' personal computers.""" start="00:13:50.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""A typical class involved a lecture delivered by me""" start="00:13:52.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in Emacs as a code-along.""" start="00:13:57.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The students would get an Org Mode file""" start="00:13:59.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""with all the code removed.""" start="00:14:01.560" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""You can see an example here""" start="00:14:03.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""on the slide on the right-hand side.""" start="00:14:04.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""This example is actually only one line of code in blue,""" start="00:14:06.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""visible at the bottom for an award file.""" start="00:14:12.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Then the students submitted home assignments""" start="00:14:15.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""also as Org Mode files, complete with documentation,""" start="00:14:17.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""code and sample output.""" start="00:14:21.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Working this way makes the classes highly interactive.""" start="00:14:23.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""So the students are busy coding""" start="00:14:27.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and they learn to control their environment better""" start="00:14:28.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""all the time.""" start="00:14:31.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""In my classes, the students have to complete""" start="00:14:34.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""an independent, agile research project""" start="00:14:38.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""using an adaptation of Scrum as a methodology.""" start="00:14:41.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""You can find examples of these rather high-octane projects""" start="00:14:44.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in my paper.""" start="00:14:48.080" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Assignments + projects""" start="00:14:48.720" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""Now, using literate programming for the projects""" start="00:14:48.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""provided some unique benefits.""" start="00:14:52.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""By having to continuously interweave documentation,""" start="00:14:54.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""references and output alongside functional code,""" start="00:14:57.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""the students learn to communicate their work""" start="00:15:01.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""throughout the term""" start="00:15:04.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in various stages of completion,""" start="00:15:05.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from the research question at the start,""" start="00:15:07.560" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""over the prototype to the finished product.""" start="00:15:09.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And here on the right-hand side,""" start="00:15:12.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""you can see one of those assignments""" start="00:15:15.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that the students received,""" start="00:15:17.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""including some of the metadata for their Org Mode files""" start="00:15:18.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in the beginning of the course.""" start="00:15:24.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Here are two graphs that I created early on""" start="00:15:26.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""when I started doing this.""" start="00:15:32.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""They show how the test results of the students""" start="00:15:34.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""in two different courses, actually three courses,""" start="00:15:36.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""changed from before to after""" start="00:15:39.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""introducing literate programming with Emacs and Org Mode.""" start="00:15:41.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""So you see the before and after""" start="00:15:45.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""introducing literate programming in the red curve before""" start="00:15:49.560" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and the blue curve afterwards.""" start="00:15:53.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And the improvement, especially on the right-hand side,""" start="00:15:54.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""is quite significant.""" start="00:15:58.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""It was this performance improvement,""" start="00:15:59.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""apart from the students who were voicing their support,""" start="00:16:02.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that made me extend the Emacs experiment""" start="00:16:05.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""after the first term""" start="00:16:08.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and continue for the following two terms.""" start="00:16:09.160" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Overall results positive""" start="00:16:15.280" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""The courses... Coming to the result, the overall result...""" start="00:16:15.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The courses were formally and informally""" start="00:16:18.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""also evaluated by the students,""" start="00:16:21.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""but you need to look at my paper""" start="00:16:23.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""for some explicit student comments,""" start="00:16:24.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which you will find there.""" start="00:16:27.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Here, I'm giving you only the summary.""" start="00:16:28.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""So first of all, Emacs proved to be hard to learn for some,""" start="00:16:29.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""but all students succeeded in all courses,""" start="00:16:34.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""independent of the level of""" start="00:16:37.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""their previous knowledge and skill.""" start="00:16:39.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The documentation practices remained pretty uneven.""" start="00:16:40.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""So some students wrote a lot, others wrote little.""" start="00:16:45.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""But they were overall much higher than in classes""" start="00:16:49.640" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""without the use of Emacs and Org Mode.""" start="00:16:53.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The interactivity enabled through Emacs""" start="00:16:57.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""was highly praised by the students""" start="00:16:59.560" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and always identified on the evaluations.""" start="00:17:01.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And lastly and most importantly, given the problems""" start="00:17:05.040" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that I identified earlier, the computing file""" start="00:17:08.560" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""and data handling competence""" start="00:17:13.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""of the students who worked with Emacs throughout""" start="00:17:15.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""opening Emacs shells, running programs through Emacs,""" start="00:17:18.280" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""these skills increased massively.""" start="00:17:23.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""In the published paper, I have expressed""" start="00:17:27.000" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""a little more doubt than you see on this slide.""" start="00:17:30.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""But now, actually, I'm feeling quite hopeful again,""" start="00:17:32.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""especially because recently for one term,""" start="00:17:38.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I have returned to Jupyter notebooks.""" start="00:17:41.880" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""In the current term, I abandoned Emacs again""" start="00:17:47.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""for online Jupyter notebook installations.""" start="00:17:50.600" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The reason is that these Jupyter notebooks""" start="00:17:53.120" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that I use from DataCamp have generative AI support""" start="00:17:55.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""from ChatGPT integrated into the notebook.""" start="00:18:00.160" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And I wanted to try that.""" start="00:18:03.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""But after one term without Emacs,""" start="00:18:04.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I regret that decision now.""" start="00:18:08.520" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The AI advantage does not make up""" start="00:18:10.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""for the loss of the immersion""" start="00:18:13.200" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""that Emacs and Org Mode deliver.""" start="00:18:15.120" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template new="1" text="""Conclusion & outlook""" start="00:18:19.800" video="mainVideo-teaching" id="subtitle"]]
+
+[[!template text="""And here's the summary.""" start="00:18:19.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""When learning computer and data science,""" start="00:18:21.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""immersion is everything.""" start="00:18:23.760" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""The best students will aim at immersion anyway.""" start="00:18:25.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""But for the majority of students,""" start="00:18:29.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""immersion must happen in class.""" start="00:18:31.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Emacs and Org Mode performed throughout very well""" start="00:18:33.680" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""as the central literary programming platform.""" start="00:18:39.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And the pre-configuring and the onboarding,""" start="00:18:42.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""which I showed to you, were very important""" start="00:18:45.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""to train the students quickly.""" start="00:18:48.960" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""In the paper, I also speculated on the impact""" start="00:18:50.360" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""of low-code, no-code, and AI coding assistance.""" start="00:18:54.480" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And my general view on this is that""" start="00:18:57.920" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""the arrival of these tools""" start="00:19:00.240" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""make literary programming as an immersive technique""" start="00:19:01.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""focused on teaching a broad range of skills""" start="00:19:04.320" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""even more important.""" start="00:19:08.400" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""So even with AI--or especially with AI--""" start="00:19:09.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""this kind of approach, I think, could be critical.""" start="00:19:13.080" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And that's it.""" start="00:19:16.800" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""I'm at the end of my presentation.""" start="00:19:18.440" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Thank you very much for your attention.""" start="00:19:19.840" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""And I'm looking forward to the Q&A.""" start="00:19:21.720" video="mainVideo-teaching" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:19:22.840" video="mainVideo-teaching" id="subtitle"]]
+
+
+
+Captioner: sachac
+
+<a name="teaching-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: Again, second only live Q&A of the day.""" start="00:00:00.599" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So, things are still a bit rusty,""" start="00:00:04.339" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but believe me, by the end of the morning,""" start="00:00:06.339" video="qanda-teaching" id="subtitle"]]
+[[!template text="""we will be well-oiled machinery.""" start="00:00:08.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So, hi Marcus, how are you doing?""" start="00:00:12.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm fine, Thank you.""" start="00:00:14.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: I really liked, most people might have""" start="00:00:17.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""forgotten, but you started your presentation""" start="00:00:20.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""with the, in a very dark room and with this""" start="00:00:22.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""typical note of dry German humor that I""" start="00:00:26.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""particularly liked.""" start="00:00:29.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Whereas I told you we're born without humour""" start="00:00:31.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""so any sense of humour is the result of very""" start="00:00:34.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""hard work.""" start="00:00:38.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well I can confirm therefore that your work""" start="00:00:40.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""is evident in this particular remark.""" start="00:00:44.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So as we did before and perhaps this time""" start="00:00:47.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""more punctiliously, terrible adverb,""" start="00:00:50.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that's why I'm an English major we will be""" start="00:00:54.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""taking questions first from the pad and then""" start="00:00:58.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""we'll be moving on to people in the BBV room.""" start="00:01:00.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Let me just check if we have some people.""" start="00:01:03.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""We do have some people.""" start="00:01:05.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""All right, so Markus, I'm gonna ask you the""" start="00:01:06.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""questions in the pad unless you have""" start="00:01:08.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""something to remark first.""" start="00:01:11.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yes, oh no, no, I don't have nothing to""" start="00:01:13.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""remark. I mean, only that we're coming to the""" start="00:01:15.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""end of the term here, and I think in the""" start="00:01:17.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""paper that I wrote, I expressed doubt that""" start="00:01:20.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Emacs was good for beginners,""" start="00:01:24.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but I've now gone back to an interactive""" start="00:01:25.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""notebook in the class without Emacs,""" start="00:01:31.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and I've just missed it terribly the whole""" start="00:01:34.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""term. And I think I saw you walk too,""" start="00:01:37.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""so that's kind of interesting.""" start="00:01:39.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That's it.""" start="00:01:41.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. All right, well,""" start="00:01:42.270" video="qanda-teaching" id="subtitle"]]
+[[!template text="""let's get started with the questions because""" start="00:01:43.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm a little worried that we might acquire""" start="00:01:45.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""debt because of the time that we have.""" start="00:01:48.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And just to be clear, so that you also know""" start="00:01:50.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the time at which we're supposed to be""" start="00:01:53.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""finishing, the next talk here on this track""" start="00:01:54.479" video="qanda-teaching" id="subtitle"]]
+[[!template text="""is supposed to be at 10.40,""" start="00:01:57.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""which is in 13 minutes from now.""" start="00:01:59.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""All right, with that said,""" start="00:02:01.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""starting with the first questions.""" start="00:02:03.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""What tools do you use for making your slides?""" start="00:02:05.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""They are very nice and I concur.""" start="00:02:07.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""OrgReveal?""" start="00:02:17.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: I use OrgReveal. It's a package,""" start="00:02:12.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""OrgReveal. I don't have the link right now,""" start="00:02:22.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but it's an org mode package where You create""" start="00:02:26.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""some meta information and I think it's""" start="00:02:31.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""basically JavaScript, JavaScript package that""" start="00:02:35.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""will work from a bunch of different""" start="00:02:39.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""platforms, but it works particularly well""" start="00:02:45.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""from Emacs. So you use that a lot.""" start="00:02:49.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right, yeah, I think it is definitely""" start="00:02:53.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""interacting with JavaScript in the background""" start="00:02:55.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and it makes for a very clean presentation""" start="00:02:57.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""right from Emacs. I mean,""" start="00:02:59.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it's not opened in Emacs unless you use a web""" start="00:03:01.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""browser in Emacs that supports such""" start="00:03:04.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""compositing but it's pretty convenient and I""" start="00:03:06.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""recommend looking into it.""" start="00:03:09.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm just going to share the URL here.""" start="00:03:15.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So if anybody's interested.""" start="00:03:20.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right, and we'll be putting all the links""" start="00:03:22.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""right now. So obviously right now,""" start="00:03:24.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Marcus is writing inside of his own Emacs,""" start="00:03:25.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but we also have the pad.""" start="00:03:28.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""We'll make sure that you have all the links""" start="00:03:29.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""accessible a little bit later.""" start="00:03:31.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Okay, moving on to the next question,""" start="00:03:32.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""why MDPI?""" start="00:03:34.460" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh yeah, well that's a little bit of a longer""" start="00:03:36.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""answer, kind of boring I suppose.""" start="00:03:40.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So when I came here to the US,""" start="00:03:42.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I used to teach a lot of graduate courses and""" start="00:03:45.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I had to suddenly teach a lot of""" start="00:03:47.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""undergraduate courses,""" start="00:03:49.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""which partly motivated this move because it""" start="00:03:50.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""made me realize, as I said in the""" start="00:03:53.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""presentation, how little the students""" start="00:03:55.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""understand of the underlying infrastructure""" start="00:03:58.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and how important it is for them to work with""" start="00:04:00.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""an IDE that doesn't make coding especially""" start="00:04:01.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""convenient, but that teaches them a lot of""" start="00:04:06.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the stuff on the side,""" start="00:04:09.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you know, while still presenting a very""" start="00:04:10.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""smooth environment, which developers""" start="00:04:13.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""appreciate as well. So I came here and I used""" start="00:04:17.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""to publish like 4 or 5 research papers per""" start="00:04:22.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""year, but I didn't have the time.""" start="00:04:24.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So I was contacted by MDPI.""" start="00:04:26.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And it's 1 of those research paper mills,""" start="00:04:30.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""which seem to be springing up where authors""" start="00:04:34.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""can, really the institutions of the authors""" start="00:04:37.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""have to pay so that they can publish,""" start="00:04:40.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""right? So it's not really,""" start="00:04:42.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and I checked them out and they seem to be""" start="00:04:44.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""proper peer review publishing,""" start="00:04:46.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but to be absolutely sure I said,""" start="00:04:47.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""well, you can have my article,""" start="00:04:49.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but of course for free,""" start="00:04:51.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm not going to pay for you to publish it.""" start="00:04:52.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And so that's what they did.""" start="00:04:55.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""They invited me and I submitted the paper and""" start="00:04:57.880" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it was a very good process.""" start="00:05:01.160" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That was a very, it was a good peer review""" start="00:05:02.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""critique. So I changed the paper quite a bit.""" start="00:05:04.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It's still not a great paper.""" start="00:05:06.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It's just a small case study.""" start="00:05:07.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That's the kind of thing that you have a lot""" start="00:05:09.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""in medical research where also people don't""" start="00:05:12.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""have a lot of time to do research,""" start="00:05:14.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""proper research, which takes a very long""" start="00:05:17.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""time. And so that's why MDPI.""" start="00:05:19.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And they are in the most of the relevant""" start="00:05:21.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""citation indices. So they are reputable""" start="00:05:24.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""enough. I mean, normally I would say for""" start="00:05:27.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""anybody who does anything like this,""" start="00:05:30.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you might not even want to bother with the""" start="00:05:33.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""journal these days anymore.""" start="00:05:36.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""You just go straight to ArcSci,""" start="00:05:37.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""put out your preprint.""" start="00:05:40.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And in fact, what will happen if you're on""" start="00:05:41.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""ArcSci, if somebody finds it interesting,""" start="00:05:44.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""they're going to reach out to you to capture""" start="00:05:46.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""your paper and have it published under their""" start="00:05:49.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""heading. Oh yeah, actually the other reason""" start="00:05:54.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""why I wanted MDPI is because there were open""" start="00:05:56.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""access from the start.""" start="00:05:58.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And I really like, if you go to the paper,""" start="00:06:00.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I really like the way it's presented.""" start="00:06:02.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So I looked at a few papers and I thought""" start="00:06:04.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it's a really nice online access,""" start="00:06:07.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""online open access solution.""" start="00:06:12.160" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That's the long answer,""" start="00:06:15.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""sorry.""" start="00:06:17.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: No, that was perfectly fine and you provided""" start="00:06:18.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""many details so it was far from a boring""" start="00:06:21.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""answer, let me reassure you.""" start="00:06:23.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Moving on to the question,""" start="00:06:26.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""we only have about 8 minutes left so I'd like""" start="00:06:27.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""to finish those 2 questions and let people in""" start="00:06:29.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the audience speak. So do you think immersion""" start="00:06:31.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""can be achieved on teaching other students""" start="00:06:35.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""with different backgrounds?""" start="00:06:37.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh yeah, that's a really good question.""" start="00:06:39.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I had actually a discussion last night with""" start="00:06:45.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""my wife in bed about this,""" start="00:06:48.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""about the use of textbooks which are famously""" start="00:06:49.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""non-immersive because they're consumed away""" start="00:06:53.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""from the class. Very rarely you sit in class""" start="00:06:55.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""like people used to do and read something""" start="00:06:58.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""together. Maybe they did that in English.""" start="00:07:00.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And that is of course instantly immersive.""" start="00:07:02.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But in computer science,""" start="00:07:05.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""many other topics, psychology,""" start="00:07:06.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you know, biology and so on,""" start="00:07:08.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you cannot get immersion,""" start="00:07:10.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""at least not in a lecture theater.""" start="00:07:12.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""You get it in a lab because people solve the""" start="00:07:15.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""problem and then they're immersed in it.""" start="00:07:16.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So, but my answer would be,""" start="00:07:18.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""yes, I can think totally immersion can be""" start="00:07:20.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""achieved anywhere, but what you have to do is""" start="00:07:22.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you have to not lecture and you have to let""" start="00:07:25.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""students do work as you go along.""" start="00:07:29.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So I used to lecture quite a bit because I""" start="00:07:31.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""was an insecure young professor and just read""" start="00:07:33.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""all my slides and my notes as I used to use,""" start="00:07:38.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""as everybody uses to when they start.""" start="00:07:41.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But as I went along, I realized,""" start="00:07:44.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you know, I've got such a grasp of the topic""" start="00:07:46.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that I really everything I do now is prepared""" start="00:07:48.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""in Emacs in an interactive way so I start""" start="00:07:51.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""saying a few words and then the students""" start="00:07:53.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""immediately we get to work and they seem to""" start="00:07:55.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""love that because in most of the other""" start="00:07:58.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""classes people just talk at them they take""" start="00:07:59.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""their stuff home and work at home,""" start="00:08:01.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""which is of course is super.""" start="00:08:03.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But most of the students,""" start="00:08:05.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""if they have, in at least in a liberal arts""" start="00:08:06.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""college, they have 5 other classes,""" start="00:08:08.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""they do not take a lot of time to do the work""" start="00:08:10.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""at home. So it's, you know,""" start="00:08:13.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""yeah, It's kind of different.""" start="00:08:16.880" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It's kind of risky, yeah,""" start="00:08:18.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but the main point I was trying to make is""" start="00:08:20.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Emacs and Org Mode really helped me to boil""" start="00:08:22.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that interactive session down to something""" start="00:08:26.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that will work in the classroom.""" start="00:08:29.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't have to jump around between""" start="00:08:30.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""platforms. For example,""" start="00:08:32.559" video="qanda-teaching" id="subtitle"]]
+[[!template text="""this term, and I didn't use Emacs in the""" start="00:08:33.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""class with the students,""" start="00:08:35.799" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I had to render using a package.""" start="00:08:37.159" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It's actually a very nice package called,""" start="00:08:40.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""what's it called? Ox, what's it called?""" start="00:08:42.299" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Ox, Ox IPNB. It's called Ox IPNB.""" start="00:08:46.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So what it does is it renders in the usual""" start="00:08:50.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""way with Emacs, Org Mode does,""" start="00:08:53.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""renders interactive notebook files in""" start="00:08:55.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Jupyter. And that took me a lot of time.""" start="00:08:58.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And I immediately noticed as soon as the""" start="00:09:01.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""teacher has to fight platforms themselves,""" start="00:09:03.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""they take the ball off the immersion task,""" start="00:09:06.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you know, to keep the student on the problem.""" start="00:09:09.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah. Oh, go on, please.""" start="00:09:16.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Yeah. I was going to remark that.""" start="00:09:19.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: So yeah, absolutely. Yeah,""" start="00:09:12.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I suppose it might be MIT style.""" start="00:09:23.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Big difference though,""" start="00:09:25.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""my classes are very, very short,""" start="00:09:26.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""small. So I have like between 10 and 15""" start="00:09:27.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""students per class. 1 of the reasons why I""" start="00:09:30.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""went to this college is because I was fed up""" start="00:09:32.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""teaching, trying to teach hundreds of""" start="00:09:35.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""students. Okay, sorry,""" start="00:09:36.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""do some of your students nag you about using""" start="00:09:40.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""VS Code? Yes, they do,""" start="00:09:42.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but their arguments aren't very good.""" start="00:09:43.460" video="qanda-teaching" id="subtitle"]]
+[[!template text="""They hadn't really compared Emacs and VS""" start="00:09:46.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Code. And what I do, actually I use RStudio""" start="00:09:48.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""as well, demonstrate VS Code,""" start="00:09:51.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""RStudio and Emacs. And I think it's very easy""" start="00:09:53.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""for them to see. And there are some videos""" start="00:10:01.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""about that as well, how much easier it is to""" start="00:10:02.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""get into Emacs to limit your investments to""" start="00:10:05.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""what you actually wanna do.""" start="00:10:08.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""When the problem with VS Code is it comes at""" start="00:10:09.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you with this sort of Microsoft store""" start="00:10:11.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""ideology, like a gazillion plugins,""" start="00:10:14.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""which if you're a developer,""" start="00:10:17.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you know what you want.""" start="00:10:18.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And I mean, it's a bit like VS Code is like""" start="00:10:21.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Google search for as if you were programming""" start="00:10:24.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""in Google search, a complete waste of time.""" start="00:10:27.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Having said that, I've also seen some videos""" start="00:10:31.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""with people who really know how to use VS""" start="00:10:33.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Code. And of course, you know,""" start="00:10:36.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""if somebody gets on the inside of a tool and""" start="00:10:37.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""spends upwards of a thousand hours in the""" start="00:10:41.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""tool, they'll be great.""" start="00:10:44.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But that's not true for beginners.""" start="00:10:45.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So hold on, there's another 1.""" start="00:10:48.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm reading them, sorry.""" start="00:10:51.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Leo, I can see the questions,""" start="00:10:52.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but you may wanna turn them around.""" start="00:10:55.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: No, No, no, please, please,""" start="00:10:59.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you're free to read them.""" start="00:11:00.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm on your fasted computer.""" start="00:11:01.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Some of you, too, that's the nagging.""" start="00:11:02.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I teach simple programming at a vocational""" start="00:11:04.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""school, and even after showing the students""" start="00:11:06.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Vim, Vim, of course, is a contender,""" start="00:11:07.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and now I'm telling them I prefer Emacs.""" start="00:11:09.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""They still all choose VS Code as their""" start="00:11:12.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""editor. Well, okay, what I did is mandatory.""" start="00:11:14.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I didn't let them choose.""" start="00:11:17.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That's what I did. And I thought that was""" start="00:11:19.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""quite risky, but in the end,""" start="00:11:21.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it turns out that the best students loved it""" start="00:11:23.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and keep using Emacs in their jobs.""" start="00:11:26.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I hear that now. The students in the middle""" start="00:11:28.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""were probably the ones who would pick VS Code""" start="00:11:33.160" video="qanda-teaching" id="subtitle"]]
+[[!template text="""because every tutorial they see,""" start="00:11:35.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""they learn a lot through YouTube and so""" start="00:11:38.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""everything they see is in VS Code.""" start="00:11:40.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""If there were more tutorials in Emacs,""" start="00:11:42.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm trying to make some,""" start="00:11:44.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""then of course that would be different.""" start="00:11:45.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But I think it's partly brainwashing and""" start="00:11:49.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""partly, of course, the other reason is there""" start="00:11:53.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""is no online Emacs. They use VS Code Dev,""" start="00:11:55.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""right? And that's, of course,""" start="00:12:00.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""they use an online cloud solution.""" start="00:12:03.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Like most of the students in the high school,""" start="00:12:05.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I teach Python in the high school right now,""" start="00:12:07.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and the students only get Chromebooks that""" start="00:12:09.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""are completely cut down to nothing.""" start="00:12:11.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""They cannot have Linux on their Chromebooks.""" start="00:12:15.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So what are they supposed to do?""" start="00:12:18.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Their only choice really is Repl.""" start="00:12:19.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Repl.com is a possibility for them to do""" start="00:12:21.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that. But, you know, or they use code spaces,""" start="00:12:24.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""which is VS Code in GitHub.""" start="00:12:27.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: Marcus, sorry for the interruption.""" start="00:12:31.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""We only have about 2 minutes left.""" start="00:12:32.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So if you could take 1 question,""" start="00:12:34.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that would be great. Sorry.""" start="00:12:35.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: So. I'm observing the same behavior.""" start="00:12:30.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Any more tutorials will be most welcome.""" start="00:12:38.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Yes, I I'd love to. I spent the rest of my""" start="00:12:40.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""days on this earth making Emacs tutorials if""" start="00:12:43.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: tutorials if I can.""" start="00:12:48.263" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: I can. Thank you. DMAX Thank you.""" start="00:12:46.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Approach to handling EDA.""" start="00:12:49.769" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Oh yeah, with white data sets.""" start="00:12:51.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Well, that's a good point.""" start="00:12:56.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: So Markus, I don't want to put you under too""" start="00:13:01.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: answer the question. The handling EDA,""" start="00:13:03.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't know, if you look at the comments,""" start="00:13:07.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I think these are on YouTube,""" start="00:13:08.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""right, at some point, Leo?""" start="00:13:09.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: much pressure to Oh yes,""" start="00:13:03.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""they will definitely be on YouTube.""" start="00:13:12.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""answer the""" start="00:13:14.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm going to question you asked about the""" start="00:13:13.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""EDA, that's too long to go into right now,""" start="00:13:15.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""plus my cat is here. So I'm going to answer""" start="00:13:17.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that in the comments, all right?""" start="00:13:21.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Start up the conversation.""" start="00:13:23.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Yes, I'm going to post that in the comments""" start="00:13:24.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""as well.""" start="00:13:27.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: Sure, but Also, just to be clear,""" start="00:13:29.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Marcus, you're going to continue the""" start="00:13:31.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""discussion. It's just a stream that will be""" start="00:13:32.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""moving on to the next talk in about 50""" start="00:13:35.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""seconds. Marcus, feel free to keep answering""" start="00:13:37.160" video="qanda-teaching" id="subtitle"]]
+[[!template text="""questions inside this room.""" start="00:13:39.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""You also have people, we're going to check""" start="00:13:40.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""aside with the stream,""" start="00:13:42.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""we have a number of people in the room.""" start="00:13:44.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""You can see them on the left on the button""" start="00:13:46.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""who are probably going to unmute themselves""" start="00:13:48.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and ask you questions.""" start="00:13:51.460" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So feel free to stay in the room,""" start="00:13:52.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""answer as lengthy as you want the questions""" start="00:13:54.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""because that's more content for us and we""" start="00:13:57.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""love it obviously. But it's just that I""" start="00:13:58.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""personally will be leaving to take care of""" start="00:14:01.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the rest of the talks.""" start="00:14:03.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So, Markus, do you have any last words before""" start="00:14:04.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""we move on?""" start="00:14:06.880" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: No, just thank you for this wonderful...""" start="00:14:08.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm going to copy this.""" start="00:14:09.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't think I listened to the talk by""" start="00:14:11.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Sascha yet, but I'm going to do that because""" start="00:14:13.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I really want to copy this conference format.""" start="00:14:15.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I think that is the conference format of the""" start="00:14:18.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""future, using volunteers to put together""" start="00:14:19.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""conferences. So I can't wait.""" start="00:14:21.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Nobody wants to come to Batesville where I""" start="00:14:23.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""am, but thank you so much.""" start="00:14:24.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That was really super professional.""" start="00:14:25.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I love that.""" start="00:14:27.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: Great. Okay, we are almost perfectly on time.""" start="00:14:28.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I think we caught up about 1 or 2 seconds""" start="00:14:32.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""into the last sentence you said but otherwise""" start="00:14:35.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""we were splendidly on time.""" start="00:14:37.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So thank you so much Marcus.""" start="00:14:38.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: You're welcome. So I wanted to say a little""" start="00:14:40.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""bit about that question about handling EDA.""" start="00:14:43.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: Can you see the chat on the left?""" start="00:14:51.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Because people have started asking questions""" start="00:14:52.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""on the left. Can you see the chat?""" start="00:14:54.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: I mean I used email. Sorry,""" start="00:14:49.460" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: So you've got multiple avenues for questions.""" start="00:14:58.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: You can""" start="00:15:01.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: still answer questions in the chat.""" start="00:15:01.166" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: sorry, sorry. Okay, I'm just going to go into""" start="00:14:57.053" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that. Yeah, that's fine.""" start="00:15:03.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: Sure, I'll need to go now.""" start="00:15:05.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So Marcus, have a great day and I'll probably""" start="00:15:06.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""see you later.""" start="00:15:08.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, thank you. Sorry.""" start="00:15:10.160" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Bye bye. There was a question about the,""" start="00:15:13.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I wanted to ask the answer the question about""" start="00:15:15.620" video="qanda-teaching" id="subtitle"]]
+[[!template text="""EDA, large data sets. So,""" start="00:15:17.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I mean, I teach undergraduate now,""" start="00:15:21.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""so there's a limited number of courses,""" start="00:15:25.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""like where I use, actually have big data""" start="00:15:28.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""issues. And I mean I'm not saying that I'm""" start="00:15:32.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""not that I don't run into performance issues""" start="00:15:36.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""with Emacs. I obviously do.""" start="00:15:38.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But like the performance issues in Emacs are""" start="00:15:40.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""comparable to performance issues for example""" start="00:15:43.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""when using R. In R everything is in memory So""" start="00:15:45.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you are limited to the available,""" start="00:15:49.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""what is it, 2 gigabyte or whatever memory of""" start="00:15:52.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""your computer. So you would have to find""" start="00:15:56.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""other infrastructure solutions anyway.""" start="00:15:58.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""The advantage of using Emacs is that I can,""" start="00:16:00.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""within 1 Org Mode file,""" start="00:16:05.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""connect to an external database.""" start="00:16:08.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I can even, as probably most of you know,""" start="00:16:11.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I can even use it as a text-based web browser""" start="00:16:13.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""if I want to. So I could look at individual""" start="00:16:17.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""files. And the other point of EDA of course""" start="00:16:22.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""is that you're not supposed to look at the""" start="00:16:26.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""tables. You're supposed to get the basic""" start="00:16:30.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""frame of your data. Is there a header?""" start="00:16:38.620" video="qanda-teaching" id="subtitle"]]
+[[!template text="""What's the approximate size and stuff like""" start="00:16:41.460" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that? And then you're supposed to import it""" start="00:16:43.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""into a data frame ideally,""" start="00:16:45.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""at least in portions. And I don't think,""" start="00:16:47.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""yeah, so that's it. But the full answer is""" start="00:16:53.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that I have not done big data analysis in""" start="00:16:56.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Emacs. So that's actually a really nice""" start="00:16:59.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""extension. I'm going to write that down as a""" start="00:17:02.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""thing to talk about in some future talk.""" start="00:17:06.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Okay, so ADA with big data.""" start="00:17:08.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Even though interesting would be to know what""" start="00:17:11.599" video="qanda-teaching" id="subtitle"]]
+[[!template text="""kind of size of data you're actually talking""" start="00:17:13.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""about. So I don't know,""" start="00:17:16.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""what is it, upwards of 1 terabyte or""" start="00:17:20.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""something like that, I don't know.""" start="00:17:25.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That'd be interesting to know.""" start="00:17:27.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Haven't done that in class.""" start="00:17:31.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So there's another question.""" start="00:17:39.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Proportion of students that you think would""" start="00:17:41.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""keep on using Emacs after your course?""" start="00:17:43.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That's not a difficult question,""" start="00:17:44.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""because as I said, I have very small classes.""" start="00:17:46.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I've been here since 2 years.""" start="00:17:47.880" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So I'm in touch with almost all the students.""" start="00:17:49.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""In fact, I'm getting them work after school.""" start="00:17:51.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So that's really cool.""" start="00:17:54.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And everybody who took to Emacs really""" start="00:17:56.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""seriously, so probably about 25% or so keep""" start="00:18:00.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""using Emacs after, afterwards.""" start="00:18:03.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I mean, even in the job,""" start="00:18:06.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""right, in the professional field.""" start="00:18:08.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Who, those who keep using Emacs after the""" start="00:18:10.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""course, I think the number is greater,""" start="00:18:13.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but I have not followed up on that.""" start="00:18:15.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I have to, my guess is more than half,""" start="00:18:16.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I would say, half or more than half.""" start="00:18:23.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Oh, Aaron, thank you so much.""" start="00:18:26.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That's very sweet. But I didn't think the""" start="00:18:27.880" video="qanda-teaching" id="subtitle"]]
+[[!template text="""presentation was great.""" start="00:18:31.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I was thinking about redoing it,""" start="00:18:32.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but this is actually the first take.""" start="00:18:33.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It was late, I had lots of other stuff to do.""" start="00:18:36.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I think what I'm more interested in than""" start="00:18:40.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""papers is probably this idea of making""" start="00:18:44.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Emacs-based data science videos because there""" start="00:18:48.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""aren't many out there.""" start="00:18:51.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Most of the people who do,""" start="00:18:52.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and computer science, most people who do that""" start="00:18:54.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""are not either developers and certainly not""" start="00:18:57.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""teachers. So I think that's a good idea.""" start="00:18:59.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm gonna pick that up.""" start="00:19:02.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So to do more Remax based data science videos""" start="00:19:03.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Is there anything else?""" start="00:19:19.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""More people. There are some people here in""" start="00:19:20.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the room still.""" start="00:19:22.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: If you do a PSVL on work.""" start="00:19:23.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""What? Or wiki. What's my YouTube channel?""" start="00:19:27.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, yeah, I'm going to give you the,""" start="00:19:34.460" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I've got a bunch of different YouTube""" start="00:19:36.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""channels. I'm going to put them in the""" start="00:19:38.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""comments to my talk. Hold on,""" start="00:19:40.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the 1 where I have the latest Emacs videos,""" start="00:19:43.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you find my name, there's nobody in the world""" start="00:19:46.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""with my name. So if you look for Gerten Krag""" start="00:19:48.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""on YouTube, then you will find it.""" start="00:19:52.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But I got a bunch of them.""" start="00:19:59.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Hold on, I'm going to give you the...""" start="00:20:00.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""My channel. Okay, This 1 has only got a few""" start="00:20:13.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""videos. But so there's 1 with a lot more.""" start="00:20:20.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Few recent videos. And I'm going to post""" start="00:20:25.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""more. Other ones in the comments of this""" start="00:20:32.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""video. Okay, what else?""" start="00:20:41.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm trying to find my way back to the button.""" start="00:20:48.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Okay, cool. Oh, yes, thank you.""" start="00:20:55.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I will. That's very good.""" start="00:20:59.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Thank you so much. Of course,""" start="00:21:01.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I use Vork. I hadn't even thought of it.""" start="00:21:03.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Very good. It's interesting,""" start="00:21:06.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that's something that comes to my mind.""" start="00:21:15.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""When I was a young student,""" start="00:21:18.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""right, people who used Emacs and the web""" start="00:21:19.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""wasn't particularly large.""" start="00:21:24.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So the volunteers would automatically make""" start="00:21:25.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""videos but not for commercial purposes.""" start="00:21:29.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Now you have an army of people who make""" start="00:21:31.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""commercial videos and the videos are usually""" start="00:21:34.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""good for the first 10% of every content,""" start="00:21:38.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but as soon as it gets a little more""" start="00:21:41.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""difficult, they either don't know what to do""" start="00:21:42.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""anymore or they don't do it because it's not""" start="00:21:44.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""commercially viable. The number of people who""" start="00:21:48.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""move on is gets smaller and smaller and""" start="00:21:50.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""smaller. So there's no commerce anymore.""" start="00:21:53.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But when I was a student,""" start="00:21:55.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""pretty much all the documentation everywhere""" start="00:21:58.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""was created by volunteers,""" start="00:22:01.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""just like this conference or like anything in""" start="00:22:02.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""org mode. And that doesn't seem to be much of""" start="00:22:04.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""a trend anymore, but maybe we can resurrect""" start="00:22:09.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it. So yes, I'm definitely gonna contribute""" start="00:22:12.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""to that. Multiple people are typing here.""" start="00:22:22.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Oh, sorry. Yes. Thank you so much.""" start="00:22:30.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm gonna put that, I'm gonna rectify that in""" start="00:22:37.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the comment. Having said that,""" start="00:22:40.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I am not 100% sure that I didn't lie here.""" start="00:22:45.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""May just be because I didn't have much time""" start="00:22:50.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""to put the presentation together.""" start="00:22:52.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And it's perfectly possible that that's""" start="00:22:54.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""actually Google slides and not all reveal.""" start="00:22:56.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""In the classroom when I present and just do""" start="00:23:00.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""lectures, I always do reveal,""" start="00:23:02.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but most of the time I do a tree slide.""" start="00:23:04.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That's the quickest way to do it for me.""" start="00:23:08.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So, so presentation. Hold on,""" start="00:23:10.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Let me just copy this 1.""" start="00:23:15.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Make sure that this doesn't get lost.""" start="00:23:17.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Thank you so much for that.""" start="00:23:21.880" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And presentations in class.""" start="00:23:24.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I use sometimes org-present,""" start="00:23:28.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but there are issues with the font sometimes.""" start="00:23:30.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I use Treeslide most of the time and Org""" start="00:23:33.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: tool.""" start="00:23:44.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Reveal. But this 1 is my top Of course,""" start="00:23:36.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""this is not org, so forget about that.""" start="00:23:46.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Okay. Yeah, so you can send me your,""" start="00:24:02.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you've got my email, I think,""" start="00:24:10.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""on the end, if you're interested in following""" start="00:24:12.160" video="qanda-teaching" id="subtitle"]]
+[[!template text="""up or letting me know about your stuff.""" start="00:24:14.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It might be interesting to,""" start="00:24:16.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't know, might be interesting to put""" start="00:24:18.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""together a conference or a little seminar""" start="00:24:20.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""just for educators.""" start="00:24:22.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""DF is still typing, I'm waiting.""" start="00:24:37.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm waiting.""" start="00:24:39.025" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: Actually, our mod maintainer,""" start="00:24:44.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Bastien, was talking about possibility to""" start="00:24:46.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""have just org mod conference.""" start="00:24:52.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But the question is, is it worth making a""" start="00:24:55.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. A whole separate 1 what?""" start="00:24:54.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: whole separate 1? A whole separate org""" start="00:24:59.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, I see. Yeah, probably would be.""" start="00:25:07.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Actually.""" start="00:25:10.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: dedicated conference. It's just like you see""" start="00:25:05.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""how EmacsConf is well done.""" start="00:25:13.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So it's like creating anything that has good""" start="00:25:16.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yes. No, I think that's a good idea.""" start="00:25:22.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Yeah, I mean.""" start="00:25:25.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: is tricky. I mean, Okay,""" start="00:25:19.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it's anywhere, like half of Emacs is anywhere""" start="00:25:30.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""remote. So it's almost the same.""" start="00:25:32.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. Well, I suppose at this point,""" start="00:25:37.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't know if that's what you mean.""" start="00:25:40.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Org Mode is probably what attracts people to""" start="00:25:41.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Emacs in the first place.""" start="00:25:45.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Like, I suppose Org Roam is the,""" start="00:25:47.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""maybe the biggest 1 for people even outside""" start="00:25:51.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""of computer science. I use Org.ROM""" start="00:25:54.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""for everything. But there are...""" start="00:25:58.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I mean, the thresholds...""" start="00:26:04.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I think that the maintainer or maybe the""" start="00:26:06.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""creator of Org.MODE has claimed and said for""" start="00:26:07.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""many years that Org Mode itself doesn't""" start="00:26:10.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""actually necessarily need Emacs.""" start="00:26:13.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""You can have it as a completely separate""" start="00:26:14.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""application as well. But I,""" start="00:26:17.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""for a number of reasons,""" start="00:26:19.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't like that. I really like the idea to""" start="00:26:21.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: why- The current strategy is that It has to""" start="00:26:28.434" video="qanda-teaching" id="subtitle"]]
+[[!template text="""be Emacs because the configurability is 1 of""" start="00:26:30.620" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the strong points anyway.""" start="00:26:33.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: have it inside Emacs. The reason That's true.""" start="00:26:23.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: You cannot make a separate application.""" start="00:26:35.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""No,""" start="00:26:37.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: that's true. I was going to say that.""" start="00:26:38.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""The thing is you use the flexibility.""" start="00:26:39.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Plus, you also use the,""" start="00:26:41.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't know if that's the right word,""" start="00:26:43.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but you use there's something about the free""" start="00:26:46.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""ideology of Emacs that is what attracted me""" start="00:26:48.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""to it in the first place when I was younger""" start="00:26:52.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and that I find even more important now.""" start="00:26:56.460" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So what they say the community aspect,""" start="00:27:00.765" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the reason, the main reason why Python is so""" start="00:27:06.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""big today, really. So yeah.""" start="00:27:08.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: But in terms of going out of Emacs,""" start="00:27:15.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it's org syntax that is supposed to be like""" start="00:27:17.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""breaking out of Emacs.""" start="00:27:21.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So like there's a plan to lay out the actual""" start="00:27:24.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""standard document so that you can register""" start="00:27:28.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the format officially.""" start="00:27:31.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah. Yeah, I think I've heard that too.""" start="00:27:23.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I've not followed up on it much.""" start="00:27:34.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't know what the,""" start="00:27:36.880" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I mean, that probably would,""" start="00:27:39.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it would strength, very likely,""" start="00:27:41.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""if you do that, it would at least for a short""" start="00:27:43.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""time, strengthen org mode and weaken emacs.""" start="00:27:45.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't know what other examples,""" start="00:27:49.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""if there are other examples of applications""" start="00:27:51.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""pulled out of IDEs like that.""" start="00:27:55.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm not aware of any others.""" start="00:27:57.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: Actually, people are trying to make""" start="00:28:00.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""three-seater drama. People are trying to make""" start="00:28:02.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""like some external parsers,""" start="00:28:04.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""a lot of them. And a lot of stuff is done on""" start="00:28:06.460" video="qanda-teaching" id="subtitle"]]
+[[!template text="""mobile part. I can draw it to iOS,""" start="00:28:10.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""especially recently. So things that are Emacs""" start="00:28:13.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""independent are demanded.""" start="00:28:17.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay, yeah. I have no doubt that there is a""" start="00:28:20.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: Especially in the environment,""" start="00:28:25.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""like every time.""" start="00:28:27.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: demand. Yeah. I mean, I didn't get into that""" start="00:28:23.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""very much. I have some of my students have 0""" start="00:28:30.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""affinity with computers.""" start="00:28:35.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""They really don't know their way around their""" start="00:28:38.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""computers at all. And so for them,""" start="00:28:39.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It is quite important to learn how to find""" start="00:28:46.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""your way around Emacs because it's like a""" start="00:28:51.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""little operating system,""" start="00:28:56.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but it's not. It's an operating system""" start="00:28:57.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""without much of the obscurity.""" start="00:29:00.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And the alternative to that would be to""" start="00:29:05.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""simply let them work only on the command""" start="00:29:07.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""line, which is another possibility.""" start="00:29:10.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But, you know, there of course you are""" start="00:29:13.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""limited with regard to if you want to swap""" start="00:29:16.160" video="qanda-teaching" id="subtitle"]]
+[[!template text="""languages. So for example,""" start="00:29:20.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""quite often I find myself in the situation I""" start="00:29:23.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""teach data science in R and Python and in""" start="00:29:26.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Emacs org mode I can demonstrate both of""" start="00:29:28.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""these side by side in the same file.""" start="00:29:31.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And that's a great advantage.""" start="00:29:35.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Not to overburden the students when they are""" start="00:29:39.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""at the beginning with things that you don't""" start="00:29:43.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""want them to necessarily learn about.""" start="00:29:45.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And plus the thing what I like as a graduate""" start="00:29:48.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""student when I stepped onto Emacs was that it""" start="00:29:51.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""was infinite possibilities to lose myself in""" start="00:29:54.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Emacs and you know go on and learn more stuff""" start="00:30:00.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""about it. But it's such a long time ago that""" start="00:30:03.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I barely dare to mention it anymore.""" start="00:30:07.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: For command line, actually,""" start="00:30:11.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it's since the Jupyter notebooks and that""" start="00:30:12.880" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Google thing they are running.""" start="00:30:17.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It's getting so popular that it's clear that""" start="00:30:20.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""command line is just losing in popularity in""" start="00:30:23.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: well, yes and no. I mean,""" start="00:30:28.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: this. Yeah, of course,""" start="00:30:26.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Not the usage. People are still using it,""" start="00:30:36.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""obviously.""" start="00:30:38.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: I mean, in Google Colab,""" start="00:30:39.520" video="qanda-teaching" id="subtitle"]]
+[[!template text="""only the paid version allows you to go to the""" start="00:30:41.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""terminal and use the command line.""" start="00:30:43.620" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But of course, the traction,""" start="00:30:46.620" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and I think that's kind of interesting,""" start="00:30:48.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""1 of the reasons why IPython or any of the""" start="00:30:50.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Jupyter notebooks are so cool is because you""" start="00:30:54.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""can use a lot of shell commands from the""" start="00:30:56.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""IPython shell. There's a whole bunch of magic""" start="00:31:00.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""commands which are quite powerful.""" start="00:31:05.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I mean the the 1 that comes to mind is time.""" start="00:31:07.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""The time command for example you know gives""" start="00:31:10.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you a really nice performance quick""" start="00:31:12.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""performance check. There's a bunch of""" start="00:31:15.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""different, I think probably close to a""" start="00:31:17.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""hundred magic commands that you can use in""" start="00:31:19.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Jupyter. But I don't know JupyterLab too""" start="00:31:22.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""well, but I noticed that the companies that""" start="00:31:25.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""do online training, And they are usually the""" start="00:31:28.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""ones that are closest to what beginners want,""" start="00:31:31.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""especially in business.""" start="00:31:34.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And what those companies do is they,""" start="00:31:36.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you know, they take, they take JupyterLab and""" start="00:31:38.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""turn it into a presentation of their own.""" start="00:31:41.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Another 1 is Notable, notable.io.""" start="00:31:43.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""That's another 1. They took JupyterLab and""" start="00:31:46.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""turned it into something commercial.""" start="00:31:49.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It's boosted up a little bit.""" start="00:31:51.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And so the shell inside the JupyterLab has""" start="00:31:55.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""some of the most more important shell""" start="00:32:00.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""properties. And so people still use the""" start="00:32:03.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""command line without knowing that they use""" start="00:32:05.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the command line. But I also like doing,""" start="00:32:07.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""how do I use org-roam?""" start="00:32:13.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Well, I use it, I do not have not used it""" start="00:32:19.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""with the students yet,""" start="00:32:22.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""only the best students have sort of seen me""" start="00:32:23.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""use it and copied it. But I use it probably""" start="00:32:25.020" video="qanda-teaching" id="subtitle"]]
+[[!template text="""in a very naive, trivial way.""" start="00:32:29.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I can't say that I am,""" start="00:32:32.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that I have a very sophisticated use.""" start="00:32:34.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I basically, I like the fact that,""" start="00:32:37.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I mean, it's built on the original concept of""" start="00:32:39.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the, with the German word,""" start="00:32:43.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Zettelkasten, right? Which is that you do not""" start="00:32:44.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""have to think about a taxonomy because as you""" start="00:32:48.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""move along, your taxonomy changes all the""" start="00:32:50.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""time. You know, what you think is important""" start="00:32:53.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""at the beginning, your root node,""" start="00:32:55.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""as you go along, you realize,""" start="00:32:57.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""oh, that's not the root node at all.""" start="00:32:58.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""There's a higher level and a higher level.""" start="00:33:00.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And some of the lower levels are at the lower""" start="00:33:02.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""level, actually the higher level.""" start="00:33:04.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So you're beginning to create hierarchies""" start="00:33:06.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that are out of date as soon as you create""" start="00:33:10.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the hierarchy. So what is the idea of the""" start="00:33:14.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""tittle custom is that anything that comes to""" start="00:33:16.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""your mind you can throw in the custom the box""" start="00:33:18.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it literally means Box of notes and That's""" start="00:33:21.160" video="qanda-teaching" id="subtitle"]]
+[[!template text="""what I appreciate about it.""" start="00:33:26.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So I create a I create a note pretty much for""" start="00:33:27.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""anything I do, but I've only used it for""" start="00:33:32.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""about a year and a half or so,""" start="00:33:35.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""or grown, maybe a year.""" start="00:33:38.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So I can see that I'm coming up against the""" start="00:33:40.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Zettelkasten or note box problems,""" start="00:33:43.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""which is that I've got so many notes now that""" start="00:33:47.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""unless I have clever aliases,""" start="00:33:50.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""there is a chance that I might forget that I""" start="00:33:54.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: That's why you need meta notes.""" start="00:33:58.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: have a note. So I need a- Yes,""" start="00:33:56.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: In other words, a summarization is important,""" start="00:34:02.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""no matter what system you use.""" start="00:34:04.940" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: yes. But what I'm trying to say is that's a""" start="00:34:01.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""different approach than hierarchies,""" start="00:34:09.739" video="qanda-teaching" id="subtitle"]]
+[[!template text="""right? It's the same, it's the same,""" start="00:34:11.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it's the same principle as a relational""" start="00:34:13.620" video="qanda-teaching" id="subtitle"]]
+[[!template text="""database versus a hierarchical database.""" start="00:34:16.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Same thing. So, yeah, and I've not used that.""" start="00:34:19.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I've not really used, actually I have cut""" start="00:34:23.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""meta notes, of course I do.""" start="00:34:25.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So notes that point to other notes.""" start="00:34:27.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Yes, of course. I use those.""" start="00:34:29.487" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I have not taught that part to the students""" start="00:34:35.412" video="qanda-teaching" id="subtitle"]]
+[[!template text="""because I do project work with the students,""" start="00:34:38.880" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but there's only so much time.""" start="00:34:45.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm already, I mean, already,""" start="00:34:46.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't think there's any class that where I""" start="00:34:48.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""am able to use more than 30% of my material.""" start="00:34:51.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And the reason is that when the students come""" start="00:34:55.880" video="qanda-teaching" id="subtitle"]]
+[[!template text="""to class, which is I pointed out in the""" start="00:34:57.620" video="qanda-teaching" id="subtitle"]]
+[[!template text="""video, they know so little.""" start="00:34:59.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And most of the students,""" start="00:35:01.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""at least in liberal arts,""" start="00:35:03.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""spend just too little time outside of class,""" start="00:35:04.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""getting there, you know,""" start="00:35:10.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""drilling down into the,""" start="00:35:11.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""into the, into the infrastructure,""" start="00:35:13.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""into the work. Only, only the best students""" start="00:35:14.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""do that. The ones that really catch fire.""" start="00:35:17.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: Don't you have something like a course""" start="00:35:20.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""project at the end?""" start="00:35:22.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yes, I have course, not at the end.""" start="00:35:24.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I use Scrum. Maybe I shouldn't,""" start="00:35:25.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but I've used Scrum for many years.""" start="00:35:27.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So I have course projects that start at the""" start="00:35:30.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""beginning and they do sprint reviews every 3""" start="00:35:32.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""or 4 weeks. So term end projects I find""" start="00:35:35.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""completely useless because the students do""" start="00:35:40.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the work at the very end of the term.""" start="00:35:43.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: no, by determined I mean they don't start at""" start="00:35:46.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the end, they just report at the end.""" start="00:35:49.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: And so I... Oh I use the IMRAD,""" start="00:35:45.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I use the IMRAD method.""" start="00:35:52.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So I use IMRAD, basically IMRAD plus,""" start="00:35:54.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""plus Scrum, right? So,""" start="00:35:58.700" video="qanda-teaching" id="subtitle"]]
+[[!template text="""So the first sprint review is introductory,""" start="00:36:00.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the research proposal,""" start="00:36:02.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the second 1 is about methodology,""" start="00:36:03.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the third 1 about results,""" start="00:36:05.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and the last 1 is their final presentation.""" start="00:36:06.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And so that's the way I manage the projects,""" start="00:36:09.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but that's about as much as I can do with""" start="00:36:11.160" video="qanda-teaching" id="subtitle"]]
+[[!template text="""them. It's a good idea.""" start="00:36:16.040" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I hadn't even thought about using Org-ROM""" start="00:36:17.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""with them, but to teach them that might be a""" start="00:36:19.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""good idea, actually.""" start="00:36:22.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: Well, for Org-ROM, actually,""" start="00:36:25.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""what I found useful during my graduate is for""" start="00:36:27.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""literature review. Yes.""" start="00:36:32.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""The other part of our program that is not""" start="00:36:34.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""about your like noting down your thoughts is""" start="00:36:37.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""about writing about literature notes.""" start="00:36:40.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, that's a good idea actually.""" start="00:36:43.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And of course, I mean,""" start="00:36:45.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""there's more stuff that they should learn,""" start="00:36:46.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you know, like another 1,""" start="00:36:48.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""since you mentioned literature,""" start="00:36:50.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you know, latex and Bibtech is another""" start="00:36:52.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""obvious extension of that.""" start="00:36:55.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But that is actually a good idea because the""" start="00:36:58.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""literature is what they have the hardest time""" start="00:37:01.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, like when you need to read like 50""" start="00:37:04.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""papers.""" start="00:37:06.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: with. Last term, since you mentioned that,""" start="00:37:03.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I had a really nice experience because 1 of""" start="00:37:12.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""our librarians, our digital librarian,""" start="00:37:16.220" video="qanda-teaching" id="subtitle"]]
+[[!template text="""came along and talked to the students,""" start="00:37:18.420" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and he taught me about a tool called""" start="00:37:19.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""litmap.com, which is basically,""" start="00:37:21.580" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't know how it's implemented,""" start="00:37:24.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but it's basically a graph,""" start="00:37:25.460" video="qanda-teaching" id="subtitle"]]
+[[!template text="""a graph representation of papers organized by""" start="00:37:28.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""citation. It's very, very cool.""" start="00:37:31.620" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And the students who used to only find,""" start="00:37:35.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I don't know, 1 paper and otherwise,""" start="00:37:38.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""of course, 15 YouTube videos and 100 blogs,""" start="00:37:41.180" video="qanda-teaching" id="subtitle"]]
+[[!template text="""suddenly started finding and reading""" start="00:37:45.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""scientific papers. It was only because of""" start="00:37:49.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""this presentation. So you should take the,""" start="00:37:52.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I think, I hope that is the right,""" start="00:37:55.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that's the right mode,""" start="00:37:58.320" video="qanda-teaching" id="subtitle"]]
+[[!template text="""litmaps. Okay, it's not litmap,""" start="00:38:00.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it's called Litmaps. I'm gonna give you an""" start="00:38:02.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""example. I don't know if I can share this,""" start="00:38:05.640" video="qanda-teaching" id="subtitle"]]
+[[!template text="""if you can look at that.""" start="00:38:09.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But basically you create a,""" start="00:38:10.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""1 can use 1 of your papers as a seed,""" start="00:38:13.860" video="qanda-teaching" id="subtitle"]]
+[[!template text="""and then it will create a graph,""" start="00:38:16.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""graph representation of it for you.""" start="00:38:19.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And this is a powerful tool in itself.""" start="00:38:21.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""But what I'm saying is that the students""" start="00:38:25.400" video="qanda-teaching" id="subtitle"]]
+[[!template text="""suddenly, their use of literature and that""" start="00:38:27.620" video="qanda-teaching" id="subtitle"]]
+[[!template text="""citation goes to the roof.""" start="00:38:30.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And I've been waiting for that for probably""" start="00:38:33.080" video="qanda-teaching" id="subtitle"]]
+[[!template text="""15 years since I've started teaching.""" start="00:38:36.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It's crazy. That's really cool.""" start="00:38:38.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: Here is the same tool,""" start="00:38:46.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""it's called connected papers.""" start="00:38:47.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It's based on the open source citation data.""" start="00:38:49.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I know that as well,""" start="00:38:54.140" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I think.""" start="00:38:56.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: It's actually very useful when you just start""" start="00:39:00.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""learning the topic. It's like you find 1""" start="00:39:01.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""paper, then you look into the connections.""" start="00:39:03.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""You can quickly narrow down to the most""" start="00:39:05.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""cited, the core papers.""" start="00:39:08.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Of course. And that is exactly their""" start="00:39:10.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""situation, you know, and they're always at""" start="00:39:12.500" video="qanda-teaching" id="subtitle"]]
+[[!template text="""the beginning. As you go on,""" start="00:39:14.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you develop different ways,""" start="00:39:17.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""but for these complete beginners,""" start="00:39:18.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that's a good idea. Thank you so much for""" start="00:39:20.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""that. Okay, guys, anything else?""" start="00:39:22.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I've enjoyed the conversation,""" start="00:39:31.240" video="qanda-teaching" id="subtitle"]]
+[[!template text="""so you should definitely,""" start="00:39:32.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I'm going to take some of these things away.""" start="00:39:36.000" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Thank you so much for that.""" start="00:39:38.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Have you done, Yanta, have you done org mode""" start="00:39:42.340" video="qanda-teaching" id="subtitle"]]
+[[!template text="""documentations yourself on WOC?""" start="00:39:46.300" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Or do you have a sort of a favorite 1?""" start="00:39:48.900" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I mean, I often on walk,""" start="00:39:52.120" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I often use the documentation for code""" start="00:39:53.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""blocks. I used to when I started doing that""" start="00:39:56.740" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, because it's only on work.""" start="00:40:00.760" video="qanda-teaching" id="subtitle"]]
+[[!template text="""It's not part of the manual.""" start="00:40:02.800" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: for the first time. Yeah,""" start="00:39:59.620" video="qanda-teaching" id="subtitle"]]
+[[!template text="""yeah. And so I've used that a lot.""" start="00:40:05.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: Have I done? Not really,""" start="00:40:07.780" video="qanda-teaching" id="subtitle"]]
+[[!template text="""mostly fixing the errors.""" start="00:40:09.720" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Okay.""" start="00:40:12.260" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I think that's a really good idea.""" start="00:40:14.280" video="qanda-teaching" id="subtitle"]]
+[[!template text="""All right. Well, thank you very much.""" start="00:40:16.440" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And it's great to be at this conference.""" start="00:40:19.960" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I think I'm going to get on.""" start="00:40:22.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 2]: Thanks for answering all the questions.""" start="00:40:27.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And for the talk, It was quite interesting to""" start="00:40:29.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""see our modules in actual teaching.""" start="00:40:32.560" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yes, thank you. And I got to thank Daniel""" start="00:40:36.200" video="qanda-teaching" id="subtitle"]]
+[[!template text="""German from Canada, the 1 of,""" start="00:40:38.600" video="qanda-teaching" id="subtitle"]]
+[[!template text="""I had him on 1 of the slides because he,""" start="00:40:40.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""he inspired me to do that.""" start="00:40:43.660" video="qanda-teaching" id="subtitle"]]
+[[!template text="""And, and I wouldn't be at the conference if I""" start="00:40:45.380" video="qanda-teaching" id="subtitle"]]
+[[!template text="""hadn't contacted him and said oh here's my""" start="00:40:47.540" video="qanda-teaching" id="subtitle"]]
+[[!template text="""paper and he said oh you should come to the""" start="00:40:49.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""conference and so that's why I came to the""" start="00:40:50.980" video="qanda-teaching" id="subtitle"]]
+[[!template text="""conference. Thank you very much and as they""" start="00:40:52.680" video="qanda-teaching" id="subtitle"]]
+[[!template text="""say keep in touch. You're welcome.""" start="00:40:58.480" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Okay bye-bye. You're welcome.""" start="00:41:04.100" video="qanda-teaching" id="subtitle"]]
+[[!template text="""Okay, bye-bye. Take a copy of the chat before""" start="00:41:05.060" video="qanda-teaching" id="subtitle"]]
+[[!template text="""you go, if you can. Happy weekend to just bye""" start="00:41:15.820" video="qanda-teaching" id="subtitle"]]
+[[!template text="""bye.""" start="00:41:22.360" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 0]: You are currently the only person in this""" start="00:41:34.920" video="qanda-teaching" id="subtitle"]]
+[[!template text="""conference.""" start="00:41:36.840" video="qanda-teaching" id="subtitle"]]
+[[!template text="""[Speaker 1]: You""" start="00:42:00.060" video="qanda-teaching" id="subtitle"]]
+
+Questions or comments? Please e-mail [birkenkrahe@lyon.edu](mailto:birkenkrahe@lyon.edu?subject=Comment%20for%20EmacsConf%202023%20teaching%3A%20Teaching%20computer%20and%20data%20science%20with%20literate%20programming%20tools)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/teaching-before.md b/2023/info/teaching-before.md
new file mode 100644
index 00000000..6a5fa970
--- /dev/null
+++ b/2023/info/teaching-before.md
@@ -0,0 +1,37 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 20-min talk; Q&A: BigBlueButton conference room
+Status: TO_INDEX_QA
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="teaching-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="teaching-mainVideo" data="""
+00:00.000 Introduction
+00:54.160 My interest in this topic
+02:08.040 What is data science?
+03:47.640 Computer science is a craft
+04:52.840 The problem
+05:36.560 The solution: Emacs + Org-mode
+06:24.120 Emacs configuration file
+07:30.360 Story + code = source + documentation
+08:22.040 What is literate programming?
+09:59.880 Emacs as a literate programming tool
+11:18.960 Case study: basic setup
+12:11.280 Emacs + Org-mode notebooks
+12:45.800 Onboarding: simplified Emacs tutorial
+13:40.840 Instruction + interaction
+14:48.720 Assignments + projects
+16:15.280 Overall results positive
+18:19.800 Conclusion & outlook
+
+"""]]<div></div>Duration: 19:27 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm">Download --main.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.odp">Download .odp (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pdf">Download .pdf (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pptx">Download .pptx (15MB)</a></li><li><a href="https://toobnix.org/w/b4eLjcLo9vcewVTzrv95L8">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="teaching-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="teaching-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.opus"></audio></div><div></div>Duration: 42:23 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.json">Download --answers.json (1.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.opus">Download --answers.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm">Download --answers.webm (199MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/teaching-nav.md b/2023/info/teaching-nav.md
new file mode 100644
index 00000000..bf06e887
--- /dev/null
+++ b/2023/info/teaching-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a>
+Next by track: <a href="/2023/talks/table">Who needs Excel? Managing your students qualifications with org-table</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/test-after.md b/2023/info/test-after.md
new file mode 100644
index 00000000..413f1f6d
--- /dev/null
+++ b/2023/info/test-after.md
@@ -0,0 +1,991 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="test-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:03.120" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""Hi everyone! I'm Mats Lidell.""" start="00:00:03.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""I'm going to talk about my journey""" start="00:00:07.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""writing test cases for GNU Hyperbole""" start="00:00:09.880" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and what I learned on the way.""" start="00:00:12.481" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So, why write tests for GNU Hyperbole?""" start="00:00:19.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""There is some background.""" start="00:00:24.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""I'm the co-maintainer of GNU Hyperbole""" start="00:00:25.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""together with Bob Weiner. Bob is the author of the package.""" start="00:00:27.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The package is available through""" start="00:00:33.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""the Emacs package manager and GNU Elpa""" start="00:00:34.681" video="mainVideo-test" id="subtitle"]]
+[[!template text="""if you would want to try it out.""" start="00:00:38.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The package has some age. I think it dates back to""" start="00:00:42.600" video="mainVideo-test" id="subtitle"]]
+[[!template text="""a first release around 1993, which is also""" start="00:00:46.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""when I got in contact with the package the first time.""" start="00:00:50.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""I was a user of the package for many years.""" start="00:00:54.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Later, I became the maintainer of the package for the FSF.""" start="00:00:58.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""That was although I did not have""" start="00:01:03.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""much knowledge of Emacs Lisp,""" start="00:01:04.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and I still have a lot to learn.""" start="00:01:09.040" video="mainVideo-test" id="subtitle"]]
+[[!template text="""A few years ago, we started to work actively on the package,""" start="00:01:12.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with setting up goals and having meetings.""" start="00:01:15.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So my starting point is that I had experience""" start="00:01:20.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with test automation from development""" start="00:01:24.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""in C++, Java and Python""" start="00:01:27.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""using different x-unit frameworks like cppunit, junit.""" start="00:01:30.600" video="mainVideo-test" id="subtitle"]]
+[[!template text="""That was in my daytime work where""" start="00:01:37.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""the technique of using pull requests""" start="00:01:40.040" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with changes backed up by tests were the daily routine.""" start="00:01:41.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It was really a requirement for a change to go in""" start="00:01:46.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to have supporting test cases.""" start="00:01:49.200" video="mainVideo-test" id="subtitle"]]
+[[!template text="""I believe, a quite common setup and requirement these days.""" start="00:01:52.160" video="mainVideo-test" id="subtitle"]]
+[[!template text="""I also had been an Emacs user for many years,""" start="00:01:58.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""but with focus on being a user.""" start="00:02:02.040" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So as I mentioned, I have limited Emacs Lisp knowledge.""" start="00:02:04.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""When we decided to start""" start="00:02:09.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to work actively on Hyperbole again,""" start="00:02:11.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""it was natural for me to look into""" start="00:02:13.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""raising the quality by adding unit tests.""" start="00:02:15.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""This also goes hand in hand""" start="00:02:18.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with running these regularly as part of a build process.""" start="00:02:20.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""All in all, following the current best practice""" start="00:02:25.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""of software development.""" start="00:02:28.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""But since Hyperbole had no tests at all,""" start="00:02:31.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""it would not be enough just to add tests""" start="00:02:36.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""for new or changed functionality.""" start="00:02:38.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""We wanted to add it even broader; ideally, everywhere.""" start="00:02:41.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So work started with adding tests here and there""" start="00:02:44.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""based on our gut feeling where it would be most useful.""" start="00:02:48.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""This work is still ongoing.""" start="00:02:52.040" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So this is where my journey starts""" start="00:02:55.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with much functionality to test,""" start="00:02:58.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""no knowledge of what testing frameworks existed,""" start="00:03:00.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and not really knowing a lot about Emacs Lisp at all.""" start="00:03:03.360" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""ERT: Emacs Lisp Regression Testing""" start="00:03:11.160" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""Luckily there is a package for writing tests in Emacs.""" start="00:03:11.160" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It is called ERT: Emacs Lisp Regression Testing.""" start="00:03:13.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It contains both support for defining tests and running them.""" start="00:03:17.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Defining a test is done with the macro `ert-deftest`.""" start="00:03:20.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In its simplest form, a test has a name, a doc string, and a body.""" start="00:03:24.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The doc string is where you typically can give""" start="00:03:28.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""a detailed description of the test""" start="00:03:31.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and has space for more info""" start="00:03:33.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""than what can be given in the test name.""" start="00:03:35.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The body is where all the interesting things happen.""" start="00:03:42.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It is here you prepare the test, run it and verify the outcome.""" start="00:03:45.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Schematically, it looks like this.""" start="00:03:51.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""You have the ert-deftest, you have the test name,""" start="00:03:54.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and the doc string, and then the body.""" start="00:04:00.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It is in the body where everything interesting happens.""" start="00:04:02.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The test is prepared, the function of the test is executed,""" start="00:04:06.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and the outcome of the test is evaluated.""" start="00:04:09.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Did the test succeed or not?""" start="00:04:13.120" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Assertions with `should`""" start="00:04:14.360" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""The verification of a test is performed with""" start="00:04:14.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""one or more so-called assertions.""" start="00:04:18.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In ERT, they are implemented""" start="00:04:21.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with the macro `should`""" start="00:04:25.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""together with a set of related macros.""" start="00:04:26.600" video="mainVideo-test" id="subtitle"]]
+[[!template text="""`should` takes a form as argument,""" start="00:04:33.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and if the form evaluates to nil,""" start="00:04:35.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""the test has failed. So let's look at an example.""" start="00:04:37.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""This simple test verifies that the function `+`""" start="00:04:48.581" video="mainVideo-test" id="subtitle"]]
+[[!template text="""can add the numbers 2 and 3 and get the result 5.""" start="00:04:51.920" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Running a test case""" start="00:04:56.920" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""So now we have defined a test case. How do we run it?""" start="00:04:56.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The ERT package has the function (or""" start="00:05:01.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""rather convenience alias) `ert`. It takes a test selector.""" start="00:05:03.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The test name works as a selector for running just one test.""" start="00:05:09.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So here we have the example. Let's evaluate it.""" start="00:05:19.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""We define it and then we run it using ERT.""" start="00:05:27.901" video="mainVideo-test" id="subtitle"]]
+[[!template text="""As you see, we get prompted for a test selector""" start="00:05:34.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""but we only have one test case defined at the moment.""" start="00:05:42.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It's the example 0. So let's hit RET.""" start="00:05:46.320" video="mainVideo-test" id="subtitle"]]
+[[!template text="""As you see here, we get some output""" start="00:05:55.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""describing what we have just done.""" start="00:05:58.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""There is one test case it has passed, zero failed,""" start="00:06:01.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""zero skipped, total 1 of 1 test case""" start="00:06:04.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and some time stamps for the execution.""" start="00:06:07.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""We also see this green mark here indicating one test case""" start="00:06:14.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and that it was successful.""" start="00:06:18.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""For inspecting the test, we can hit the letter `l`""" start="00:06:23.040" video="mainVideo-test" id="subtitle"]]
+[[!template text="""which shows all the `should` forms""" start="00:06:29.660" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that was executed during this test case.""" start="00:06:32.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So here we see that we have the `should`,""" start="00:06:37.780" video="mainVideo-test" id="subtitle"]]
+[[!template text="""one `should` executed, and we see the form equals to 2,""" start="00:06:39.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and it was 5 equals to 5.""" start="00:06:48.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So a good example of a successful test case.""" start="00:06:49.800" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Debug a test""" start="00:06:54.560" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""So now we've seen how we can run a test case.""" start="00:06:54.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Can we debug it? Yes. For debugging a test case,""" start="00:06:57.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""the `ert-deftest` can be set up using `edebug-defun`,""" start="00:07:03.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""just as a function or macro is set up""" start="00:07:07.940" video="mainVideo-test" id="subtitle"]]
+[[!template text="""or instrumented for debugging. So let's try that.""" start="00:07:10.320" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So we try `edebug-defun` here.""" start="00:07:18.820" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Now it's instrumented for debugging.""" start="00:07:24.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""And we run it, `ert`, and we're inside the debugger,""" start="00:07:28.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and we can inspect here what's happening.""" start="00:07:35.660" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Step through it and yes it succeeded just as before.""" start="00:07:40.680" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Commercial break: Hyperbole""" start="00:07:50.380" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""It's time for a commercial break!""" start="00:07:50.380" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Hyperbole itself can help with running tests""" start="00:07:56.880" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and also help with running them in debug mode.""" start="00:08:00.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""That is because hyperbole identifies the `ert-deftest`""" start="00:08:03.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""as an implicit button. An implicit button is basically""" start="00:08:08.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""a string or pattern""" start="00:08:12.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that Hyperbole has assigned some meaning to.""" start="00:08:13.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""For the string `ert-deftest`, it is to run the test case.""" start="00:08:16.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""You activate the button with the action-key.""" start="00:08:19.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The standard binding is the middle mouse button,""" start="00:08:24.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""or from the keyboard, M-RET.""" start="00:08:27.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So let's try that.""" start="00:08:33.041" video="mainVideo-test" id="subtitle"]]
+[[!template text="""We move the cursor here and then we type M-RET.""" start="00:08:34.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""And boom, the test case was executed.""" start="00:08:42.220" video="mainVideo-test" id="subtitle"]]
+[[!template text="""And to run it in debug mode we type C-u M-RET""" start="00:08:47.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to get the assist key, and then we're in the debugger.""" start="00:08:54.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So that's pretty useful and convenient.""" start="00:08:57.720" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Instrument function on the fly""" start="00:09:10.480" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""A related useful feature here is the step-in functionality""" start="00:09:10.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""bound to the letter i in `debug-mode`.""" start="00:09:13.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It allows you to step into a function""" start="00:09:16.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and continue debugging from there.""" start="00:09:18.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""For the cases where your test does not do what you want,""" start="00:09:20.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""looking at what happens in the function of the test""" start="00:09:22.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""can be really useful. Let's try that with another example.""" start="00:09:25.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So here we have two helper functions, one `f1-add`,""" start="00:09:37.260" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that use the built-in `+` function""" start="00:09:43.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and then we have `my-add` that uses that function.""" start="00:09:47.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So we're going to test myadd.""" start="00:09:52.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""And then let's run this.""" start="00:09:59.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Let's run this using hyperbole in debug mode""" start="00:10:02.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""C-u M-RET. We're in the debugger again,""" start="00:10:05.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and let's step up front to my function under test""" start="00:10:10.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and then press `i` for getting it instrumented""" start="00:10:15.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and going into it for debugging.""" start="00:10:19.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""And here we can expect that it's getting""" start="00:10:23.020" video="mainVideo-test" id="subtitle"]]
+[[!template text="""the arguments 1 and 3,""" start="00:10:25.140" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and it returns the result 4 as expected.""" start="00:10:26.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""And yes, of course, our test case will then succeed.""" start="00:10:31.000" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Mocking""" start="00:10:39.120" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""The next tool in our toolbox is mocking.""" start="00:10:39.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Mocking is needed when we want to simulate the response""" start="00:10:41.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""from a function used by the function under test.""" start="00:10:46.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""That is the implementation of the function.""" start="00:10:49.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""This could be for various reasons.""" start="00:10:53.140" video="mainVideo-test" id="subtitle"]]
+[[!template text="""One example could be because it would be hard or impossible""" start="00:10:56.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""in the test setup to get the behavior you want to test for,""" start="00:11:00.880" video="mainVideo-test" id="subtitle"]]
+[[!template text="""like an external error case.""" start="00:11:04.200" video="mainVideo-test" id="subtitle"]]
+[[!template text="""But the mock can also be used to verify""" start="00:11:06.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that the function is called with a specific argument.""" start="00:11:08.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""We can view it as a way to isolate the function on the test""" start="00:11:11.620" video="mainVideo-test" id="subtitle"]]
+[[!template text="""from its dependencies.""" start="00:11:14.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So in order to test the function in isolation,""" start="00:11:16.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""we need to cut out any dependencies to external behavior.""" start="00:11:18.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Most obvious would be dependencies to external resources,""" start="00:11:22.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""such as web pages. As an example:""" start="00:11:25.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Hyperbole contains functionality to link you to""" start="00:11:27.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""social media resources and other resources on the net.""" start="00:11:30.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Testing that would require the test system to call out""" start="00:11:34.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to the social media resources""" start="00:11:37.900" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and would depend on it being available, etc.""" start="00:11:39.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Nothing technically stops a test case""" start="00:11:43.540" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to depend on the external resources,""" start="00:11:45.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""but would, if nothing else, be flaky or slow.""" start="00:11:47.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It could be part of an end-to-end suite""" start="00:11:51.320" video="mainVideo-test" id="subtitle"]]
+[[!template text="""where we want to test that it works all the way.""" start="00:11:53.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In this case, we want to look at the isolated case""" start="00:11:57.180" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that can be run with no dependency on external resources.""" start="00:11:59.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""What you want to do is to replace the function with a mock""" start="00:12:04.100" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that behaves as the real function would do.""" start="00:12:06.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The package I have found""" start="00:12:10.340" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and have used for mocking is `el-mock`.""" start="00:12:11.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The workhorse in this package is the `with-mock` macro.""" start="00:12:14.320" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It looks like this: `with-mock` followed by a body.""" start="00:12:21.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In the execution of the body, stubs and mocks""" start="00:12:26.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""defined in the body is respected.""" start="00:12:30.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Let's look at some examples to make that clearer.""" start="00:12:32.900" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In this case, we have the macro `with-mock`.""" start="00:12:39.200" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It works so that the expression""" start="00:12:42.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""`stub + => 10` is interpreted""" start="00:12:43.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""so that the function `+` will be replaced with the stub.""" start="00:12:48.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The stub will return 10 regardless how it is called.""" start="00:12:51.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Note that the stub function""" start="00:12:56.780" video="mainVideo-test" id="subtitle"]]
+[[!template text="""does not have to be called at this level""" start="00:12:58.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""but could be called at any level in the call chain.""" start="00:13:00.200" video="mainVideo-test" id="subtitle"]]
+[[!template text="""By knowing how the function under test is implemented""" start="00:13:02.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and how the implementation works,""" start="00:13:07.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""you can find function calls you want to mock""" start="00:13:09.320" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to force certain behavior that you want to test,""" start="00:13:11.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""or to avoid calls to external resources, slow calls, etc.""" start="00:13:15.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Simply isolate the function under test""" start="00:13:19.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and simulate its environment.""" start="00:13:21.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Mock is a little bit more sophisticated""" start="00:13:26.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and depends on the arguments""" start="00:13:28.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that the mock function is called with.""" start="00:13:30.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Or more precise, it is checked""" start="00:13:31.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""after the `with-mock` clause""" start="00:13:33.848" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that the arguments match the arguments it was called with""" start="00:13:35.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""or even if it was called at all.""" start="00:13:38.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""If it is called with other arguments""" start="00:13:39.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""there will be an error,""" start="00:13:41.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and if it's not called, it is also an error.""" start="00:13:43.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So this way, we are sure that the function""" start="00:13:46.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""we were expected to be called actually was called.""" start="00:13:48.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""An important piece of the testing.""" start="00:13:51.320" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So we are sure that the mock we have provided""" start="00:13:53.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""actually is triggered by the test case.""" start="00:13:56.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So here we have an example of `with-mock`""" start="00:14:04.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""where the `f1-add` function is mocked,""" start="00:14:08.160" video="mainVideo-test" id="subtitle"]]
+[[!template text="""so that if it's called with 2 and 3 as arguments,""" start="00:14:18.880" video="mainVideo-test" id="subtitle"]]
+[[!template text="""it will return 10. Then we have a test case""" start="00:14:22.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""where we try the `my-add` function,""" start="00:14:24.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""as you might remember, and call that with 2 and 3""" start="00:14:28.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and see that it should also then return 10""" start="00:14:30.320" video="mainVideo-test" id="subtitle"]]
+[[!template text="""because it's using `f1-add`.""" start="00:14:32.800" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""cl-letf""" start="00:14:41.240" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""Moving over to `cl-letf`.""" start="00:14:41.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In rare occasions, the limitations of `el-mock` means""" start="00:14:44.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""you would want to implement a full-fledged function""" start="00:14:47.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to be used under test.""" start="00:14:50.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Then the macro `cl-letf` can be useful.""" start="00:14:52.980" video="mainVideo-test" id="subtitle"]]
+[[!template text="""However, you need to handle the case yourself""" start="00:14:55.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""if the function was not called.""" start="00:14:57.880" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Looking through the test cases where I have used `cl-letf`,""" start="00:15:00.100" video="mainVideo-test" id="subtitle"]]
+[[!template text="""I think most can be implemented using plain mocking.""" start="00:15:03.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Cases left is where the args to the mock might be different""" start="00:15:06.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""due to environment issues.""" start="00:15:11.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In that case, a static mock will not work.""" start="00:15:13.740" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Hooks""" start="00:15:24.100" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""Another trick is that functions that uses hooks.""" start="00:15:24.100" video="mainVideo-test" id="subtitle"]]
+[[!template text="""You can overload or replace the hooks to do the testing.""" start="00:15:30.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So you can use the hook function just to do the verification""" start="00:15:35.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and not do anything useful in the hook.""" start="00:15:40.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Also, here you need to be careful""" start="00:15:43.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to make sure the test handler is called and nothing else.""" start="00:15:45.080" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Side effects and initial buffer state""" start="00:15:55.720" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""So far we have been talking about testing""" start="00:15:55.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and what the function returns.""" start="00:15:57.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In the best of words, we have a pure function""" start="00:15:59.040" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that only depends on its arguments""" start="00:16:01.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and produces no side effects.""" start="00:16:02.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Many operations produce side effects""" start="00:16:04.940" video="mainVideo-test" id="subtitle"]]
+[[!template text="""or operate on the contents of buffers""" start="00:16:06.900" video="mainVideo-test" id="subtitle"]]
+[[!template text="""such as writing a message in the message buffer,""" start="00:16:09.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""change the state of a buffer, move point etc.""" start="00:16:12.380" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Hyperbole is not an exception. Quite the contrary.""" start="00:16:15.660" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Much of the functions creating links""" start="00:16:18.860" video="mainVideo-test" id="subtitle"]]
+[[!template text="""are just about updating buffers.""" start="00:16:20.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""This poses a special problem for tests.""" start="00:16:24.421" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The test gets longer""" start="00:16:28.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""since you need to create buffers and files,""" start="00:16:29.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""initialize the contents.""" start="00:16:31.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Verifying the outcome becomes trickier""" start="00:16:33.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""since you need to make sure you look at the right place.""" start="00:16:35.160" video="mainVideo-test" id="subtitle"]]
+[[!template text="""At the end of the test, you need to clean up,""" start="00:16:39.020" video="mainVideo-test" id="subtitle"]]
+[[!template text="""both for not leaving a lot of garbage""" start="00:16:41.040" video="mainVideo-test" id="subtitle"]]
+[[!template text="""in buffers and files around,""" start="00:16:43.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and even worse, not cause later tests""" start="00:16:45.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to depend on the leftovers from the other tests.""" start="00:16:48.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Here are some functions and variables""" start="00:16:50.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""I have found useful for this.""" start="00:16:53.080" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""with-temp-buffer""" start="00:17:05.100" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""For creating tests: `with-temp-buffer`:""" start="00:17:05.100" video="mainVideo-test" id="subtitle"]]
+[[!template text="""it provides you a temp buffer that you visit,""" start="00:17:09.200" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and afterwards, there is no need to clean up.""" start="00:17:11.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""This is the first choice if that is all you need.""" start="00:17:13.720" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""make-temp-file""" start="00:17:16.520" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""`make-temp-file`: If you need a file,""" start="00:17:16.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""this is the function to use.""" start="00:17:20.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It creates a temp file or a directory.""" start="00:17:21.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The file can be filled with initial contents.""" start="00:17:24.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""This needs to be cleaned up after a test.""" start="00:17:26.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Moving on to verifying and debugging:""" start="00:17:31.020" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""buffer-string""" start="00:17:33.288" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""`buffer-string`: returns the full contents""" start="00:17:33.288" video="mainVideo-test" id="subtitle"]]
+[[!template text="""of the buffer as a string.""" start="00:17:38.248" video="mainVideo-test" id="subtitle"]]
+[[!template text="""That can sound a bit voluminous,""" start="00:17:39.500" video="mainVideo-test" id="subtitle"]]
+[[!template text="""but since tests are normally small, this often works well.""" start="00:17:41.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""I have in particular found good use of comparing""" start="00:17:46.140" video="mainVideo-test" id="subtitle"]]
+[[!template text="""the contents of buffers with the empty string.""" start="00:17:48.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""That would give an error, but as we have seen""" start="00:17:50.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with the output produced by the `should` assertion,""" start="00:17:53.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""this is almost like a print statement""" start="00:17:56.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and can be compared with the good old technique""" start="00:17:58.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""of debugging with print statements.""" start="00:18:01.200" video="mainVideo-test" id="subtitle"]]
+[[!template text="""There might be other ways to do the same""" start="00:18:04.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""as we saw with debugging.""" start="00:18:06.248" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""buffer-name""" start="00:18:09.920" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""buffer-name: Getting the buffer name is good""" start="00:18:09.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to verify what buffer we are looking at.""" start="00:18:13.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""I often found it useful to check""" start="00:18:16.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that my assumptions on what buffer I am acting on""" start="00:18:18.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""is correct by adding `should` clauses""" start="00:18:21.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""in the middle of the test execution""" start="00:18:23.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""or after preparing the test input.""" start="00:18:25.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Sometimes Emacs can switch buffers in strange ways,""" start="00:18:27.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""maybe because the test case is badly written,""" start="00:18:31.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and making sure your assumptions are correct""" start="00:18:34.200" video="mainVideo-test" id="subtitle"]]
+[[!template text="""is a good sanity check.""" start="00:18:37.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Even the ert package does""" start="00:18:40.340" video="mainVideo-test" id="subtitle"]]
+[[!template text="""some buffer and windows manipulation for its reporting""" start="00:18:42.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that I have not fully learned how to master,""" start="00:18:44.880" video="mainVideo-test" id="subtitle"]]
+[[!template text="""so assertion for checking the sanity of the test is good.""" start="00:18:47.488" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""major-mode""" start="00:18:51.980" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""Finally, `major-mode`: Verify the buffer has the proper mode.""" start="00:18:51.980" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Can also be very useful and is a good sanity check.""" start="00:18:55.680" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""unwind-protect""" start="00:19:02.680" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""Finally, cleaning up. `unwind-protect`.""" start="00:19:02.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The tool for cleaning up is the `unwind-protect` form""" start="00:19:06.600" video="mainVideo-test" id="subtitle"]]
+[[!template text="""which ensures that the unwind forms""" start="00:19:09.040" video="mainVideo-test" id="subtitle"]]
+[[!template text="""always are executed regardless of the outcome of the body.""" start="00:19:12.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So if your test fails, you are sure the cleanup is executed.""" start="00:19:15.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Let's look at unwind-protect together with""" start="00:19:20.420" video="mainVideo-test" id="subtitle"]]
+[[!template text="""the temporary file example. Many tests look like this.""" start="00:19:22.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""You create some resource, you call `unwind-protect`,""" start="00:19:30.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""you do the test, and then afterwards you do the cleanup.""" start="00:19:35.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The cleanup for a file and a buffer is so common,""" start="00:19:42.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""so I have created a helper for that.""" start="00:19:46.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It looks like this.""" start="00:19:51.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The trick with the `buffer-modified` flag""" start="00:19:56.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""is to avoid getting prompted""" start="00:19:59.180" video="mainVideo-test" id="subtitle"]]
+[[!template text="""for killing a buffer that is not saved.""" start="00:20:00.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The test buffers are often in the state""" start="00:20:03.220" video="mainVideo-test" id="subtitle"]]
+[[!template text="""where they have not been saved but modified.""" start="00:20:05.440" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Input, with-simulated-input""" start="00:20:15.100" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""Another problem for tests are input.""" start="00:20:15.100" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In the middle of execution a function""" start="00:20:19.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""might want to have some interaction with the user.""" start="00:20:21.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Testing this poses a problem, not only in that""" start="00:20:24.040" video="mainVideo-test" id="subtitle"]]
+[[!template text="""the input matters, but also as how even to get the test case""" start="00:20:26.960" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to recognize the input!?""" start="00:20:31.200" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Ideally the tests are run in batch mode,""" start="00:20:34.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""which in some sense means no user interaction.""" start="00:20:36.040" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In batch mode, there is no event loop running.""" start="00:20:38.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Fortunately, there is a package `with-simulated-input`""" start="00:20:43.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that gets you around these issues.""" start="00:20:47.180" video="mainVideo-test" id="subtitle"]]
+[[!template text="""This is a macro that allows us""" start="00:20:53.260" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to define a set of characters""" start="00:20:55.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that will be read by the function under the test,""" start="00:20:57.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and all of this works in batch mode. It looks like this.""" start="00:20:59.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""We have `with-simulated-input`,""" start="00:21:02.580" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and then a string of characters, and then a body.""" start="00:21:04.160" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The form takes a string of keys""" start="00:21:09.840" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and runs the rest of the body,""" start="00:21:11.648" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and if there are input required,""" start="00:21:13.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""it is picked from the string of keys.""" start="00:21:15.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""In our example, the `read-string` call""" start="00:21:18.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""will read up until RET,""" start="00:21:20.422" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and then return the characters read.""" start="00:21:21.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""As you see in the example, space needs to be provided""" start="00:21:26.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""by the string SPC, as return by the string RET.""" start="00:21:29.640" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Running all tests""" start="00:21:38.460" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""So now we have seen ways to create test cases""" start="00:21:38.460" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and even make it possible to run some of them""" start="00:21:40.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that has I/O in batch mode.""" start="00:21:43.220" video="mainVideo-test" id="subtitle"]]
+[[!template text="""But the initial goal was to run them all at once.""" start="00:21:44.680" video="mainVideo-test" id="subtitle"]]
+[[!template text="""How do you do that?""" start="00:21:47.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Let's go back to the `ert` command.""" start="00:21:48.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""It prompts for a test selector.""" start="00:21:51.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""If we give it the selector `t`,""" start="00:21:53.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""it will run all tests we have currently defined.""" start="00:21:56.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Let's try that with the subset of the Hyperbole tests.""" start="00:21:59.260" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Here is the test folder in the Hyperbole directory.""" start="00:22:05.780" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Let's go up here and load all the demo tests.""" start="00:22:09.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""And then try to run `ert`.""" start="00:22:18.820" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Now we see that we have a bunch of test cases.""" start="00:22:21.208" video="mainVideo-test" id="subtitle"]]
+[[!template text="""We can all run them individually,""" start="00:22:26.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""but we can run them with `t` instead.""" start="00:22:27.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""We will run them all at once.""" start="00:22:31.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So now, ert is executing all our test cases.""" start="00:22:35.460" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So here we have a nice green display""" start="00:22:51.420" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with all the test cases.""" start="00:22:57.080" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Batch mode""" start="00:23:03.220" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""So that was fine, but we were still running it manually""" start="00:23:03.220" video="mainVideo-test" id="subtitle"]]
+[[!template text="""by calling ert. How could we run it from the command line?""" start="00:23:08.160" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Ert comes with functions for running it in batch mode.""" start="00:23:17.180" video="mainVideo-test" id="subtitle"]]
+[[!template text="""For Hyperbole, we use `make` for repetitive tasks.""" start="00:23:21.500" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So we have a make target""" start="00:23:25.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that uses the ert batch functionality,""" start="00:23:27.120" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and this is the line from the Makefile.""" start="00:23:29.280" video="mainVideo-test" id="subtitle"]]
+[[!template text="""This is a bit detailed,""" start="00:23:33.260" video="mainVideo-test" id="subtitle"]]
+[[!template text="""but you see that we have a part here""" start="00:23:35.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""where we load the test dependencies.""" start="00:23:37.540" video="mainVideo-test" id="subtitle"]]
+[[!template text="""For getting the packages""" start="00:23:40.780" video="mainVideo-test" id="subtitle"]]
+[[!template text="""such as `el-mock` and `with-simulated-input` etc. loaded.""" start="00:23:43.521" video="mainVideo-test" id="subtitle"]]
+[[!template text="""We also have... I also want to point out here the call to""" start="00:23:48.460" video="mainVideo-test" id="subtitle"]]
+[[!template text="""or the setting of `auto-save-default` to `nil`""" start="00:23:53.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to get away with the prompt for excessive backup files""" start="00:23:58.160" video="mainVideo-test" id="subtitle"]]
+[[!template text="""that can pile up after running the tests a few times.""" start="00:24:02.440" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Skipping tests""" start="00:24:05.060" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""Even with the help of simulated input,""" start="00:24:05.060" video="mainVideo-test" id="subtitle"]]
+[[!template text="""not all tests can be run in batch mode.""" start="00:24:06.880" video="mainVideo-test" id="subtitle"]]
+[[!template text="""They would simply not work there""" start="00:24:08.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and have to be run in an interactive Emacs""" start="00:24:10.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with the running event loop.""" start="00:24:12.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""One trick still to be able to use batch mode for automation""" start="00:24:14.180" video="mainVideo-test" id="subtitle"]]
+[[!template text="""is to put the guard at the top of each test case""" start="00:24:17.920" video="mainVideo-test" id="subtitle"]]
+[[!template text="""as the first thing to be executed,""" start="00:24:20.320" video="mainVideo-test" id="subtitle"]]
+[[!template text="""so that it kicks in before anything else and stops Emacs""" start="00:24:22.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to try to run the test case.""" start="00:24:25.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Now, it looks like this: `(skip-unless (not noninteractive))`.""" start="00:24:27.200" video="mainVideo-test" id="subtitle"]]
+[[!template text="""So when ert sees that the test should be skipped, it skips it""" start="00:24:35.520" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and makes a note of that,""" start="00:24:38.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""so you will see how many tests that have been skipped.""" start="00:24:40.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Too bad. We have a number of test cases defined,""" start="00:24:44.580" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and to run them, we need to run them manually. Well sort of.""" start="00:24:47.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""Not being able to run all tests easily""" start="00:24:51.360" video="mainVideo-test" id="subtitle"]]
+[[!template text="""is a bit counterproductive""" start="00:24:53.808" video="mainVideo-test" id="subtitle"]]
+[[!template text="""since our goal is to run all tests.""" start="00:24:58.420" video="mainVideo-test" id="subtitle"]]
+[[!template text="""There is however no ert function to run tests in batch mode""" start="00:25:01.000" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with an interactive Emacs.""" start="00:25:04.720" video="mainVideo-test" id="subtitle"]]
+[[!template text="""The closest I have got is either""" start="00:25:06.780" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to start the Emacs from the command line""" start="00:25:08.480" video="mainVideo-test" id="subtitle"]]
+[[!template text="""calling the ert function as we just have seen,""" start="00:25:10.080" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and then killing it manually when done;""" start="00:25:12.440" video="mainVideo-test" id="subtitle"]]
+[[!template text="""or add a function to extract the contents of the ERT buffer""" start="00:25:14.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""when done and echo it to standard output.""" start="00:25:19.600" video="mainVideo-test" id="subtitle"]]
+[[!template text="""This is how it looks in the Makefile""" start="00:25:24.600" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to get the behavior of cutting and paste,""" start="00:25:27.801" video="mainVideo-test" id="subtitle"]]
+[[!template text="""getting the ERT output into a file""" start="00:25:31.208" video="mainVideo-test" id="subtitle"]]
+[[!template text="""so we can then kill Emacs""" start="00:25:34.581" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and spit out the content of the ERT buffer.""" start="00:25:36.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""One final word here is that""" start="00:25:44.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""when you run this in a continuous integration pipeline,""" start="00:25:47.740" video="mainVideo-test" id="subtitle"]]
+[[!template text="""you might not have a TTY for getting Emacs to start,""" start="00:25:54.560" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and that is then another problem""" start="00:25:59.400" video="mainVideo-test" id="subtitle"]]
+[[!template text="""with getting the interactive mode.""" start="00:26:03.201" video="mainVideo-test" id="subtitle"]]
+
+[[!template new="1" text="""Conclusion""" start="00:26:08.460" video="mainVideo-test" id="subtitle"]]
+
+[[!template text="""We have reached the end of the talk.""" start="00:26:08.460" video="mainVideo-test" id="subtitle"]]
+[[!template text="""If you have any new ideas""" start="00:26:11.121" video="mainVideo-test" id="subtitle"]]
+[[!template text="""or have some suggestions for improvements,""" start="00:26:14.160" video="mainVideo-test" id="subtitle"]]
+[[!template text="""feel free to reach out""" start="00:26:16.760" video="mainVideo-test" id="subtitle"]]
+[[!template text="""because I am still on the learning curve of writing,""" start="00:26:18.240" video="mainVideo-test" id="subtitle"]]
+[[!template text="""how to write good test cases.""" start="00:26:21.101" video="mainVideo-test" id="subtitle"]]
+[[!template text="""If you look at the test cases we have in Hyperbole""" start="00:26:25.300" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and you think they might contradict what I am saying here,""" start="00:26:27.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""it is OK. It is probably right.""" start="00:26:29.800" video="mainVideo-test" id="subtitle"]]
+[[!template text="""I have changed the style as I go""" start="00:26:32.580" video="mainVideo-test" id="subtitle"]]
+[[!template text="""and we have not yet refactored all tests""" start="00:26:34.600" video="mainVideo-test" id="subtitle"]]
+[[!template text="""to benefit from new designs.""" start="00:26:36.640" video="mainVideo-test" id="subtitle"]]
+[[!template text="""That is also the beauty of the test case.""" start="00:26:38.580" video="mainVideo-test" id="subtitle"]]
+[[!template text="""As long as it serves its purpose, it is not terrible""" start="00:26:40.600" video="mainVideo-test" id="subtitle"]]
+[[!template text="""if it is not optimal or not having the best style.""" start="00:26:43.320" video="mainVideo-test" id="subtitle"]]
+[[!template text="""And yes, thanks for listening. Bye.""" start="00:26:47.800" video="mainVideo-test" id="subtitle"]]
+
+<a name="test-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: Do we have any listeners?""" start="00:00:08.740" video="qanda-test" id="subtitle"]]
+[[!template text="""It's you and I. I have a question.""" start="00:00:13.340" video="qanda-test" id="subtitle"]]
+[[!template text="""How many tests do you have for hyperbole and""" start="00:00:16.420" video="qanda-test" id="subtitle"]]
+[[!template text="""How would you rate the test coverage compared""" start="00:00:18.800" video="qanda-test" id="subtitle"]]
+[[!template text="""to other packages? Well,""" start="00:00:21.279" video="qanda-test" id="subtitle"]]
+[[!template text="""that's a tricky 1. Shall I spell it out loud""" start="00:00:28.279" video="qanda-test" id="subtitle"]]
+[[!template text="""and then maybe type it at the same time?""" start="00:00:31.100" video="qanda-test" id="subtitle"]]
+[[!template text="""So, I believe it's around like more than 300""" start="00:00:36.420" video="qanda-test" id="subtitle"]]
+[[!template text="""test cases now. But I cannot compare the test""" start="00:00:43.660" video="qanda-test" id="subtitle"]]
+[[!template text="""coverage to any other""" start="00:00:45.220" video="qanda-test" id="subtitle"]]
+[[!template text="""other package. Maybe I can type that later.""" start="00:01:00.020" video="qanda-test" id="subtitle"]]
+[[!template text="""What do you say, Badal?""" start="00:01:01.560" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 1]: package. I have no knowledge of any Yeah,""" start="00:01:02.660" video="qanda-test" id="subtitle"]]
+[[!template text="""sure, yeah, that's totally fine.""" start="00:01:03.840" video="qanda-test" id="subtitle"]]
+[[!template text="""Feel free to just answer them with voice.""" start="00:01:05.660" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, yeah. There's another question.""" start="00:01:08.720" video="qanda-test" id="subtitle"]]
+[[!template text="""1 small suggestion to me,""" start="00:01:10.520" video="qanda-test" id="subtitle"]]
+[[!template text="""should means optional,""" start="00:01:11.440" video="qanda-test" id="subtitle"]]
+[[!template text="""where shall or must means required.""" start="00:01:13.660" video="qanda-test" id="subtitle"]]
+[[!template text="""Not sure if it is too late to make a major""" start="00:01:15.940" video="qanda-test" id="subtitle"]]
+[[!template text="""grammar change like that.""" start="00:01:17.220" video="qanda-test" id="subtitle"]]
+[[!template text="""Very nice presentation.""" start="00:01:18.080" video="qanda-test" id="subtitle"]]
+[[!template text="""So thanks for presentation,""" start="00:01:19.840" video="qanda-test" id="subtitle"]]
+[[!template text="""but the package ERT, well,""" start="00:01:24.380" video="qanda-test" id="subtitle"]]
+[[!template text="""it's not something that we have come up with.""" start="00:01:27.920" video="qanda-test" id="subtitle"]]
+[[!template text="""It's a standard package.""" start="00:01:28.920" video="qanda-test" id="subtitle"]]
+[[!template text="""So I believe it has been around for a long""" start="00:01:32.320" video="qanda-test" id="subtitle"]]
+[[!template text="""time. So, but please feel free to make""" start="00:01:37.760" video="qanda-test" id="subtitle"]]
+[[!template text="""suggestions and maybe you can,""" start="00:01:39.680" video="qanda-test" id="subtitle"]]
+[[!template text="""you know, like do a copy or like an alias for""" start="00:01:43.660" video="qanda-test" id="subtitle"]]
+[[!template text="""that. If you believe it makes more sense for""" start="00:01:46.080" video="qanda-test" id="subtitle"]]
+[[!template text="""your test cases to have that instead.""" start="00:01:48.080" video="qanda-test" id="subtitle"]]
+[[!template text="""And then we have another question here.""" start="00:01:53.540" video="qanda-test" id="subtitle"]]
+[[!template text="""For your info, you may find this helpful for""" start="00:01:55.540" video="qanda-test" id="subtitle"]]
+[[!template text="""running MX test lint both from a command line""" start="00:01:58.780" video="qanda-test" id="subtitle"]]
+[[!template text="""and from within MX with a transit menu.""" start="00:02:01.220" video="qanda-test" id="subtitle"]]
+[[!template text="""GitHub alpha papa make sure,""" start="00:02:03.600" video="qanda-test" id="subtitle"]]
+[[!template text="""yes. It also works on remote CI.""" start="00:02:06.760" video="qanda-test" id="subtitle"]]
+[[!template text="""Yeah, thank you, Alpha Papa.""" start="00:02:08.240" video="qanda-test" id="subtitle"]]
+[[!template text="""I think I've looked into that,""" start="00:02:10.580" video="qanda-test" id="subtitle"]]
+[[!template text="""but we haven't made any use of that.""" start="00:02:13.440" video="qanda-test" id="subtitle"]]
+[[!template text="""But maybe you'll inspire me to give it""" start="00:02:17.920" video="qanda-test" id="subtitle"]]
+[[!template text="""another look.""" start="00:02:18.400" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 2]: Hey guys.""" start="00:02:29.260" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: I remember, I recognize that voice.""" start="00:02:34.120" video="qanda-test" id="subtitle"]]
+[[!template text="""Hi, Bob. Hey, how are you?""" start="00:02:37.160" video="qanda-test" id="subtitle"]]
+[[!template text="""Congratulations, man. Thanks,""" start="00:02:40.240" video="qanda-test" id="subtitle"]]
+[[!template text="""Hugh. Thank you. I have another question""" start="00:02:43.020" video="qanda-test" id="subtitle"]]
+[[!template text="""here. It is easy to run ad hoc tests inside""" start="00:02:45.520" video="qanda-test" id="subtitle"]]
+[[!template text="""an Emacs session given the command line""" start="00:02:48.400" video="qanda-test" id="subtitle"]]
+[[!template text="""scripts you need to run to get the batch test""" start="00:02:51.180" video="qanda-test" id="subtitle"]]
+[[!template text="""session running? You said it's to run an""" start="00:02:54.960" video="qanda-test" id="subtitle"]]
+[[!template text="""ad-hoc test. I'm not sure I understand that""" start="00:03:05.680" video="qanda-test" id="subtitle"]]
+[[!template text="""question. Yes, please.""" start="00:03:14.440" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 1]: Maybe I can rephrase. Sure.""" start="00:03:15.660" video="qanda-test" id="subtitle"]]
+[[!template text="""So I think what I understand is that since""" start="00:03:19.900" video="qanda-test" id="subtitle"]]
+[[!template text="""you have to use some of these command lines""" start="00:03:22.540" video="qanda-test" id="subtitle"]]
+[[!template text="""scripts to get a batch test session running,""" start="00:03:25.440" video="qanda-test" id="subtitle"]]
+[[!template text="""is it easy to run ad hoc tests in an Emacs""" start="00:03:28.780" video="qanda-test" id="subtitle"]]
+[[!template text="""session or does that, like in your""" start="00:03:30.700" video="qanda-test" id="subtitle"]]
+[[!template text="""experience, has that been difficult?""" start="00:03:32.040" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well, from the command line,""" start="00:03:36.820" video="qanda-test" id="subtitle"]]
+[[!template text="""if you look at the command line,""" start="00:03:38.660" video="qanda-test" id="subtitle"]]
+[[!template text="""you'll see that it's only like a few image""" start="00:03:44.160" video="qanda-test" id="subtitle"]]
+[[!template text="""functions to call to get that behavior to run""" start="00:03:46.480" video="qanda-test" id="subtitle"]]
+[[!template text="""the batch tests. So I think we made some""" start="00:03:55.080" video="qanda-test" id="subtitle"]]
+[[!template text="""support function for that in hyperbole.""" start="00:03:57.100" video="qanda-test" id="subtitle"]]
+[[!template text="""So it's not, I don't think it's possible out""" start="00:04:02.800" video="qanda-test" id="subtitle"]]
+[[!template text="""of the box to do it, but it's not complicated""" start="00:04:05.540" video="qanda-test" id="subtitle"]]
+[[!template text="""to do it.""" start="00:04:08.060" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 2]: You can define a test anytime,""" start="00:04:12.190" video="qanda-test" id="subtitle"]]
+[[!template text="""right? Just like a new function.""" start="00:04:14.780" video="qanda-test" id="subtitle"]]
+[[!template text="""So that's ad hoc. You just write your test""" start="00:04:18.899" video="qanda-test" id="subtitle"]]
+[[!template text="""and you can run it.""" start="00:04:20.019" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, yeah, I mean, of course,""" start="00:04:22.900" video="qanda-test" id="subtitle"]]
+[[!template text="""but I got the impression it was about running""" start="00:04:25.900" video="qanda-test" id="subtitle"]]
+[[!template text="""all your tests like we did with the command""" start="00:04:28.620" video="qanda-test" id="subtitle"]]
+[[!template text="""line. Well, so the question is more about how""" start="00:04:35.740" video="qanda-test" id="subtitle"]]
+[[!template text="""would you run all your test cases from within""" start="00:04:38.260" video="qanda-test" id="subtitle"]]
+[[!template text="""Emacs? And the easy answer to that is""" start="00:04:44.860" video="qanda-test" id="subtitle"]]
+[[!template text="""actually you load all your test case files,""" start="00:04:48.420" video="qanda-test" id="subtitle"]]
+[[!template text="""and then you run ERT with the T as the test""" start="00:04:51.760" video="qanda-test" id="subtitle"]]
+[[!template text="""selector and then it will run all your test""" start="00:04:53.600" video="qanda-test" id="subtitle"]]
+[[!template text="""cases.""" start="00:04:53.880" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. And I think they have expanded on""" start="00:05:01.780" video="qanda-test" id="subtitle"]]
+[[!template text="""their question a little bit as well,""" start="00:05:03.180" video="qanda-test" id="subtitle"]]
+[[!template text="""clarifying that. In other words,""" start="00:05:04.960" video="qanda-test" id="subtitle"]]
+[[!template text="""can you tweak tests in an Emacs session and""" start="00:05:07.200" video="qanda-test" id="subtitle"]]
+[[!template text="""run them right away? Which I believe,""" start="00:05:08.860" video="qanda-test" id="subtitle"]]
+[[!template text="""if I understand correctly what Bob was""" start="00:05:11.400" video="qanda-test" id="subtitle"]]
+[[!template text="""saying, you can basically define or redefine""" start="00:05:13.820" video="qanda-test" id="subtitle"]]
+[[!template text="""functions on the fly and then have them be""" start="00:05:15.920" video="qanda-test" id="subtitle"]]
+[[!template text="""run, right?""" start="00:05:16.440" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, yes. You just go into that test case and""" start="00:05:22.200" video="qanda-test" id="subtitle"]]
+[[!template text="""you just change it and you run it again.""" start="00:05:24.120" video="qanda-test" id="subtitle"]]
+[[!template text="""And either you have to sort of load it or you""" start="00:05:29.060" video="qanda-test" id="subtitle"]]
+[[!template text="""can use like the commercial thing I did.""" start="00:05:31.560" video="qanda-test" id="subtitle"]]
+[[!template text="""You use hyperbole and just hit meta return on""" start="00:05:36.140" video="qanda-test" id="subtitle"]]
+[[!template text="""the test case and it will load it and run the""" start="00:05:38.560" video="qanda-test" id="subtitle"]]
+[[!template text="""test case again. So that's of course what you""" start="00:05:42.240" video="qanda-test" id="subtitle"]]
+[[!template text="""normally do when you're defining a test or""" start="00:05:44.220" video="qanda-test" id="subtitle"]]
+[[!template text="""debug a test case or develop a test case.""" start="00:05:47.440" video="qanda-test" id="subtitle"]]
+[[!template text="""Just start with something small,""" start="00:05:49.960" video="qanda-test" id="subtitle"]]
+[[!template text="""just make sure maybe you can prepare the test""" start="00:05:52.700" video="qanda-test" id="subtitle"]]
+[[!template text="""properly and run it again and again and again""" start="00:05:55.320" video="qanda-test" id="subtitle"]]
+[[!template text="""until you're ready with it.""" start="00:05:56.720" video="qanda-test" id="subtitle"]]
+[[!template text="""That's a good point. You can definitely do""" start="00:05:59.760" video="qanda-test" id="subtitle"]]
+[[!template text="""that and that's part of how I normally""" start="00:06:02.800" video="qanda-test" id="subtitle"]]
+[[!template text="""develop the test cases that I mean start with""" start="00:06:06.420" video="qanda-test" id="subtitle"]]
+[[!template text="""something small so I can see that I get there""" start="00:06:09.160" video="qanda-test" id="subtitle"]]
+[[!template text="""maybe the right input in the buffer that I""" start="00:06:12.180" video="qanda-test" id="subtitle"]]
+[[!template text="""want to test on or something and I expand on""" start="00:06:14.180" video="qanda-test" id="subtitle"]]
+[[!template text="""that more and more and add more and more more""" start="00:06:18.160" video="qanda-test" id="subtitle"]]
+[[!template text="""and more more""" start="00:06:18.460" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 2]: tests to it. You might tell them a bit about""" start="00:06:31.040" video="qanda-test" id="subtitle"]]
+[[!template text="""how many test cases you have.""" start="00:06:33.280" video="qanda-test" id="subtitle"]]
+[[!template text="""I guess you commented on that and like what""" start="00:06:36.020" video="qanda-test" id="subtitle"]]
+[[!template text="""happens, you know, with the CICD pipeline,""" start="00:06:40.320" video="qanda-test" id="subtitle"]]
+[[!template text="""every time we commit, you know,""" start="00:06:43.780" video="qanda-test" id="subtitle"]]
+[[!template text="""across all the versions and what you have set""" start="00:06:46.360" video="qanda-test" id="subtitle"]]
+[[!template text="""up there because you know I wish people could""" start="00:06:48.760" video="qanda-test" id="subtitle"]]
+[[!template text="""see it. You can go and check on GitHub and""" start="00:06:53.940" video="qanda-test" id="subtitle"]]
+[[!template text="""you can see the logs right of any of the""" start="00:06:57.440" video="qanda-test" id="subtitle"]]
+[[!template text="""builds and but tell them a bit about that""" start="00:06:59.760" video="qanda-test" id="subtitle"]]
+[[!template text="""Mats because I think that's pretty""" start="00:07:01.080" video="qanda-test" id="subtitle"]]
+[[!template text="""impressive.""" start="00:07:01.320" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well, that's part of more the CI,""" start="00:07:07.280" video="qanda-test" id="subtitle"]]
+[[!template text="""CD, part of how we developed this using""" start="00:07:11.760" video="qanda-test" id="subtitle"]]
+[[!template text="""GitHub and workflows that you get out of the""" start="00:07:15.460" video="qanda-test" id="subtitle"]]
+[[!template text="""box from there. So this more than 300 test""" start="00:07:20.740" video="qanda-test" id="subtitle"]]
+[[!template text="""cases on our round for I think 5 different""" start="00:07:23.440" video="qanda-test" id="subtitle"]]
+[[!template text="""versions of Emacs when we do a pull request""" start="00:07:26.480" video="qanda-test" id="subtitle"]]
+[[!template text="""or a commit. So that's a good way to ensure""" start="00:07:33.900" video="qanda-test" id="subtitle"]]
+[[!template text="""that it works from version 27.2""" start="00:07:38.040" video="qanda-test" id="subtitle"]]
+[[!template text="""up to the latest master version because""" start="00:07:42.240" video="qanda-test" id="subtitle"]]
+[[!template text="""there's some changes in Emacs over different""" start="00:07:45.860" video="qanda-test" id="subtitle"]]
+[[!template text="""versions that can affect your functions or""" start="00:07:48.940" video="qanda-test" id="subtitle"]]
+[[!template text="""your code.""" start="00:07:49.600" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 2]: They all run in parallel and so typically in""" start="00:07:56.580" video="qanda-test" id="subtitle"]]
+[[!template text="""under 60 seconds I think you've got all of""" start="00:08:00.580" video="qanda-test" id="subtitle"]]
+[[!template text="""them run so you've got pretty extensive""" start="00:08:03.960" video="qanda-test" id="subtitle"]]
+[[!template text="""testing which does catch interesting bugs""" start="00:08:08.860" video="qanda-test" id="subtitle"]]
+[[!template text="""here and there, right?""" start="00:08:09.760" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, of course it does.""" start="00:08:13.320" video="qanda-test" id="subtitle"]]
+[[!template text="""I mean, you normally develop with 1 version""" start="00:08:18.060" video="qanda-test" id="subtitle"]]
+[[!template text="""and then you think everything is okay.""" start="00:08:20.280" video="qanda-test" id="subtitle"]]
+[[!template text="""But then when you're tested with the""" start="00:08:21.720" video="qanda-test" id="subtitle"]]
+[[!template text="""different versions, you find out that there""" start="00:08:23.460" video="qanda-test" id="subtitle"]]
+[[!template text="""are some changes and there are things you""" start="00:08:26.080" video="qanda-test" id="subtitle"]]
+[[!template text="""might not sort of keep track of what's""" start="00:08:30.140" video="qanda-test" id="subtitle"]]
+[[!template text="""happening also. So that's a way to get""" start="00:08:34.340" video="qanda-test" id="subtitle"]]
+[[!template text="""noticed that the core developers of Emacs""" start="00:08:38.559" video="qanda-test" id="subtitle"]]
+[[!template text="""have changed something that you sort of based""" start="00:08:41.120" video="qanda-test" id="subtitle"]]
+[[!template text="""your code on. Now I got another question""" start="00:08:44.380" video="qanda-test" id="subtitle"]]
+[[!template text="""here. Did you have to change hyperbole code""" start="00:08:47.900" video="qanda-test" id="subtitle"]]
+[[!template text="""and design to be more readily testable as you""" start="00:08:50.580" video="qanda-test" id="subtitle"]]
+[[!template text="""were increasing your test coverage?""" start="00:08:52.160" video="qanda-test" id="subtitle"]]
+[[!template text="""Well, we haven't done that to a lot,""" start="00:08:55.520" video="qanda-test" id="subtitle"]]
+[[!template text="""to a big degree, although I believe that that""" start="00:09:00.160" video="qanda-test" id="subtitle"]]
+[[!template text="""is an important thing for sort of the future""" start="00:09:03.760" video="qanda-test" id="subtitle"]]
+[[!template text="""to do that because some of the hyperbolic""" start="00:09:06.020" video="qanda-test" id="subtitle"]]
+[[!template text="""functions are very complicated and long and""" start="00:09:08.520" video="qanda-test" id="subtitle"]]
+[[!template text="""that makes testing them rather difficult.""" start="00:09:10.640" video="qanda-test" id="subtitle"]]
+[[!template text="""So, at a few places we have sort of broken up""" start="00:09:14.660" video="qanda-test" id="subtitle"]]
+[[!template text="""functions in smaller pieces so it'd be easier""" start="00:09:17.260" video="qanda-test" id="subtitle"]]
+[[!template text="""to do like unit tests of the different parts""" start="00:09:20.280" video="qanda-test" id="subtitle"]]
+[[!template text="""of it. But there's a lot of more work that""" start="00:09:27.740" video="qanda-test" id="subtitle"]]
+[[!template text="""has to be done there.""" start="00:09:28.680" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 2]: 1 of the nice things is you know the great""" start="00:09:33.820" video="qanda-test" id="subtitle"]]
+[[!template text="""environment in Lisp where we're able to do a""" start="00:09:36.760" video="qanda-test" id="subtitle"]]
+[[!template text="""lot of interactive bottom-up testing before""" start="00:09:40.520" video="qanda-test" id="subtitle"]]
+[[!template text="""we even get to lighting tech pieces.""" start="00:09:42.840" video="qanda-test" id="subtitle"]]
+[[!template text="""So it does tend to be more higher level bugs,""" start="00:09:48.740" video="qanda-test" id="subtitle"]]
+[[!template text="""I think, that get caught in cross-functional""" start="00:09:51.140" video="qanda-test" id="subtitle"]]
+[[!template text="""interaction. We had 1 recently that was an""" start="00:09:55.940" video="qanda-test" id="subtitle"]]
+[[!template text="""Emacs version change. It had been a function""" start="00:09:58.100" video="qanda-test" id="subtitle"]]
+[[!template text="""that had existed for a long time.""" start="00:10:01.100" video="qanda-test" id="subtitle"]]
+[[!template text="""It had an and rest in it,""" start="00:10:03.340" video="qanda-test" id="subtitle"]]
+[[!template text="""in its argument list, so it would assemble""" start="00:10:05.740" video="qanda-test" id="subtitle"]]
+[[!template text="""the list of arguments from individual""" start="00:10:08.600" video="qanda-test" id="subtitle"]]
+[[!template text="""arguments that you would give it,""" start="00:10:10.320" video="qanda-test" id="subtitle"]]
+[[!template text="""and they decided in a recent version,""" start="00:10:13.100" video="qanda-test" id="subtitle"]]
+[[!template text="""I think with Stefan's input,""" start="00:10:15.200" video="qanda-test" id="subtitle"]]
+[[!template text="""to change that to a list and allow the prior""" start="00:10:19.400" video="qanda-test" id="subtitle"]]
+[[!template text="""behavior, but it would issue a warning if you""" start="00:10:22.740" video="qanda-test" id="subtitle"]]
+[[!template text="""use the prior behavior.""" start="00:10:23.620" video="qanda-test" id="subtitle"]]
+[[!template text="""So all of a sudden, the way you were supposed""" start="00:10:25.560" video="qanda-test" id="subtitle"]]
+[[!template text="""to do it became semi-invalid.""" start="00:10:27.180" video="qanda-test" id="subtitle"]]
+[[!template text="""And so we started getting the warning,""" start="00:10:30.440" video="qanda-test" id="subtitle"]]
+[[!template text="""and we've tried to eliminate all those""" start="00:10:32.760" video="qanda-test" id="subtitle"]]
+[[!template text="""warnings in recent hyperbole developments.""" start="00:10:35.600" video="qanda-test" id="subtitle"]]
+[[!template text="""So we're like, what do we do?""" start="00:10:37.120" video="qanda-test" id="subtitle"]]
+[[!template text="""You know, because we wanted to be backward""" start="00:10:39.020" video="qanda-test" id="subtitle"]]
+[[!template text="""compatible to where you couldn't use a list.""" start="00:10:42.140" video="qanda-test" id="subtitle"]]
+[[!template text="""It required you to use individual arguments.""" start="00:10:44.620" video="qanda-test" id="subtitle"]]
+[[!template text="""And now it's sort of requiring you to do""" start="00:10:48.380" video="qanda-test" id="subtitle"]]
+[[!template text="""that. And all of that was caused by the""" start="00:10:51.660" video="qanda-test" id="subtitle"]]
+[[!template text="""automatic testing on it.""" start="00:10:52.940" video="qanda-test" id="subtitle"]]
+[[!template text="""So you said, Max, you were going to tell us""" start="00:11:08.680" video="qanda-test" id="subtitle"]]
+[[!template text="""what you learned. So what are the major""" start="00:11:12.740" video="qanda-test" id="subtitle"]]
+[[!template text="""things that you learned in doing all of this""" start="00:11:15.368" video="qanda-test" id="subtitle"]]
+[[!template text="""work? All of this work?""" start="00:11:15.680" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well, I tried to cover some of it in the""" start="00:11:26.520" video="qanda-test" id="subtitle"]]
+[[!template text="""presentation, but as I was going along,""" start="00:11:29.380" video="qanda-test" id="subtitle"]]
+[[!template text="""the presentation became like twice as long as""" start="00:11:33.420" video="qanda-test" id="subtitle"]]
+[[!template text="""fitted into the time we had so I had to cut""" start="00:11:36.180" video="qanda-test" id="subtitle"]]
+[[!template text="""it out. But I think some of the core things""" start="00:11:42.380" video="qanda-test" id="subtitle"]]
+[[!template text="""still is in the presentation.""" start="00:11:44.340" video="qanda-test" id="subtitle"]]
+[[!template text="""From a personal perspective,""" start="00:11:49.560" video="qanda-test" id="subtitle"]]
+[[!template text="""And this might not be hard to realize,""" start="00:11:52.440" video="qanda-test" id="subtitle"]]
+[[!template text="""but forcing yourself to test functions,""" start="00:11:56.960" video="qanda-test" id="subtitle"]]
+[[!template text="""test code really forces you to understand the""" start="00:12:02.900" video="qanda-test" id="subtitle"]]
+[[!template text="""code a little bit better in a way that sort""" start="00:12:05.080" video="qanda-test" id="subtitle"]]
+[[!template text="""of makes it easier than just to read the""" start="00:12:07.300" video="qanda-test" id="subtitle"]]
+[[!template text="""code. I don't know how it is for the rest""" start="00:12:11.460" video="qanda-test" id="subtitle"]]
+[[!template text="""listening to this, but for me it works so""" start="00:12:13.780" video="qanda-test" id="subtitle"]]
+[[!template text="""that if I just read the code then I don't""" start="00:12:16.580" video="qanda-test" id="subtitle"]]
+[[!template text="""sort of become as sharp as I should be but if""" start="00:12:20.140" video="qanda-test" id="subtitle"]]
+[[!template text="""I try to write the test case for it then I""" start="00:12:22.500" video="qanda-test" id="subtitle"]]
+[[!template text="""really need to understand better of all the""" start="00:12:24.680" video="qanda-test" id="subtitle"]]
+[[!template text="""edge cases and all the sort of states and etc""" start="00:12:27.660" video="qanda-test" id="subtitle"]]
+[[!template text="""that is involved and I think that's That's""" start="00:12:30.060" video="qanda-test" id="subtitle"]]
+[[!template text="""what's sort of 1 of the learning things I""" start="00:12:33.080" video="qanda-test" id="subtitle"]]
+[[!template text="""wanted to communicate as well that I don't""" start="00:12:34.960" video="qanda-test" id="subtitle"]]
+[[!template text="""think I covered in detail in the""" start="00:12:38.940" video="qanda-test" id="subtitle"]]
+[[!template text="""presentation. Maybe all this,""" start="00:12:41.480" video="qanda-test" id="subtitle"]]
+[[!template text="""but try it. 1 other sort of more from the fun""" start="00:12:48.060" video="qanda-test" id="subtitle"]]
+[[!template text="""side is that I really think it's fun to write""" start="00:12:50.740" video="qanda-test" id="subtitle"]]
+[[!template text="""the test. So if you haven't tests in your""" start="00:12:55.080" video="qanda-test" id="subtitle"]]
+[[!template text="""package, you should start doing that because""" start="00:12:58.020" video="qanda-test" id="subtitle"]]
+[[!template text="""it is fun. It might feel like some extra""" start="00:13:05.740" video="qanda-test" id="subtitle"]]
+[[!template text="""work, but it really pays off in the long run,""" start="00:13:08.080" video="qanda-test" id="subtitle"]]
+[[!template text="""especially if you have it in like a pipeline""" start="00:13:10.320" video="qanda-test" id="subtitle"]]
+[[!template text="""and where you can run it regularly when you""" start="00:13:12.520" video="qanda-test" id="subtitle"]]
+[[!template text="""do new commits, et cetera.""" start="00:13:13.940" video="qanda-test" id="subtitle"]]
+[[!template text="""So, I mean, that's maybe obvious from,""" start="00:13:16.560" video="qanda-test" id="subtitle"]]
+[[!template text="""if you look from the commercial side or your""" start="00:13:19.160" video="qanda-test" id="subtitle"]]
+[[!template text="""work side to do it like that.""" start="00:13:21.080" video="qanda-test" id="subtitle"]]
+[[!template text="""But even for your hobby project,""" start="00:13:22.260" video="qanda-test" id="subtitle"]]
+[[!template text="""it can be very sort of pay off really well.""" start="00:13:26.260" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 2]: It's worked really well when we're adding new""" start="00:13:32.900" video="qanda-test" id="subtitle"]]
+[[!template text="""functionality or we're changing some of the""" start="00:13:35.020" video="qanda-test" id="subtitle"]]
+[[!template text="""plumbing in the system.""" start="00:13:36.560" video="qanda-test" id="subtitle"]]
+[[!template text="""You know, you go and you do some surgery and""" start="00:13:40.400" video="qanda-test" id="subtitle"]]
+[[!template text="""then you run the tests.""" start="00:13:41.320" video="qanda-test" id="subtitle"]]
+[[!template text="""And sometimes 6 to 10 tests will fail.""" start="00:13:45.400" video="qanda-test" id="subtitle"]]
+[[!template text="""And you find there, you know,""" start="00:13:48.260" video="qanda-test" id="subtitle"]]
+[[!template text="""it tends to be they're all interconnected and""" start="00:13:50.460" video="qanda-test" id="subtitle"]]
+[[!template text="""it leads you back to the single source.""" start="00:13:52.920" video="qanda-test" id="subtitle"]]
+[[!template text="""You fix that and you know it could be an edge""" start="00:13:56.660" video="qanda-test" id="subtitle"]]
+[[!template text="""case and off by 1 or Sometimes it's an""" start="00:14:00.560" video="qanda-test" id="subtitle"]]
+[[!template text="""assumption about the way something is used""" start="00:14:03.520" video="qanda-test" id="subtitle"]]
+[[!template text="""and it's not actually always true.""" start="00:14:05.980" video="qanda-test" id="subtitle"]]
+[[!template text="""And so, Matt's just really good at""" start="00:14:09.520" video="qanda-test" id="subtitle"]]
+[[!template text="""identifying some of those scenarios and""" start="00:14:13.540" video="qanda-test" id="subtitle"]]
+[[!template text="""keeping us honest, I guess I would say.""" start="00:14:17.480" video="qanda-test" id="subtitle"]]
+[[!template text="""So I love, I run it as much as I before,""" start="00:14:22.900" video="qanda-test" id="subtitle"]]
+[[!template text="""you know, even before I commit something.""" start="00:14:26.400" video="qanda-test" id="subtitle"]]
+[[!template text="""So I get to see, you know,""" start="00:14:29.960" video="qanda-test" id="subtitle"]]
+[[!template text="""if anything has progressed.""" start="00:14:30.940" video="qanda-test" id="subtitle"]]
+[[!template text="""So yeah, I really recommend this process to""" start="00:14:39.480" video="qanda-test" id="subtitle"]]
+[[!template text="""people. I haven't seen it done.""" start="00:14:42.120" video="qanda-test" id="subtitle"]]
+[[!template text="""I don't think that, I don't know any other""" start="00:14:45.720" video="qanda-test" id="subtitle"]]
+[[!template text="""package that has done it to this level.""" start="00:14:47.800" video="qanda-test" id="subtitle"]]
+[[!template text="""And it's been working really great for us.""" start="00:14:51.560" video="qanda-test" id="subtitle"]]
+[[!template text="""And I think, well, we'll see too when we""" start="00:14:55.440" video="qanda-test" id="subtitle"]]
+[[!template text="""release to the general public.""" start="00:14:56.780" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: But Bob, also, maybe the test part of""" start="00:15:04.380" video="qanda-test" id="subtitle"]]
+[[!template text="""different packages is not the first thing you""" start="00:15:06.400" video="qanda-test" id="subtitle"]]
+[[!template text="""look at. So I know there are packages that""" start="00:15:08.900" video="qanda-test" id="subtitle"]]
+[[!template text="""have testing, a lot of testing,""" start="00:15:10.960" video="qanda-test" id="subtitle"]]
+[[!template text="""but how much, much testing they have or not,""" start="00:15:13.860" video="qanda-test" id="subtitle"]]
+[[!template text="""I don't know. It's not what you normally look""" start="00:15:16.060" video="qanda-test" id="subtitle"]]
+[[!template text="""into when you look at someone's else code.""" start="00:15:17.900" video="qanda-test" id="subtitle"]]
+[[!template text="""You look maybe on the functionality side but""" start="00:15:20.600" video="qanda-test" id="subtitle"]]
+[[!template text="""not on how they've done the sort of the""" start="00:15:22.760" video="qanda-test" id="subtitle"]]
+[[!template text="""quality side. So there could be other""" start="00:15:26.540" video="qanda-test" id="subtitle"]]
+[[!template text="""packages out there that are well equipped.""" start="00:15:28.780" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 2]: I hope so. I hope so.""" start="00:15:31.800" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: What's the craziest bug you found when""" start="00:15:39.860" video="qanda-test" id="subtitle"]]
+[[!template text="""writing these tests? Well,""" start="00:15:44.700" video="qanda-test" id="subtitle"]]
+[[!template text="""What springs to my mind just now is that we""" start="00:15:50.760" video="qanda-test" id="subtitle"]]
+[[!template text="""were doing some tests or I would do some""" start="00:15:52.760" video="qanda-test" id="subtitle"]]
+[[!template text="""tests for when you narrow,""" start="00:15:55.920" video="qanda-test" id="subtitle"]]
+[[!template text="""what do you say that? When you,""" start="00:15:57.940" video="qanda-test" id="subtitle"]]
+[[!template text="""in outlining, when you sort of compress""" start="00:16:04.500" video="qanda-test" id="subtitle"]]
+[[!template text="""things in an outline, so you just,""" start="00:16:06.480" video="qanda-test" id="subtitle"]]
+[[!template text="""sorry Bob, maybe you have it,""" start="00:16:08.540" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 2]: When you hide text.""" start="00:16:12.100" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: What I'm looking for? Yeah,""" start="00:16:12.740" video="qanda-test" id="subtitle"]]
+[[!template text="""when you hide. So I was doing some cursor""" start="00:16:15.580" video="qanda-test" id="subtitle"]]
+[[!template text="""movement over that. And I always assume that""" start="00:16:17.780" video="qanda-test" id="subtitle"]]
+[[!template text="""if you do like a prefix argument to like a""" start="00:16:22.540" video="qanda-test" id="subtitle"]]
+[[!template text="""simple cursor movement,""" start="00:16:23.800" video="qanda-test" id="subtitle"]]
+[[!template text="""like control F moving 1 character position,""" start="00:16:26.420" video="qanda-test" id="subtitle"]]
+[[!template text="""and you would give it the,""" start="00:16:28.340" video="qanda-test" id="subtitle"]]
+[[!template text="""and then the prefix, like you want to move""" start="00:16:36.580" video="qanda-test" id="subtitle"]]
+[[!template text="""like 2 or 3 positions,""" start="00:16:39.140" video="qanda-test" id="subtitle"]]
+[[!template text="""you would do like control U 3 and then""" start="00:16:43.040" video="qanda-test" id="subtitle"]]
+[[!template text="""control F and you move 3.""" start="00:16:44.240" video="qanda-test" id="subtitle"]]
+[[!template text="""I always assumed that that would be exactly""" start="00:16:46.560" video="qanda-test" id="subtitle"]]
+[[!template text="""the same as if you just hit the key control F""" start="00:16:49.240" video="qanda-test" id="subtitle"]]
+[[!template text="""3 times, but it's not.""" start="00:16:50.740" video="qanda-test" id="subtitle"]]
+[[!template text="""So it's not the bug, it's a feature,""" start="00:16:53.160" video="qanda-test" id="subtitle"]]
+[[!template text="""but that was the craziest thing.""" start="00:16:54.620" video="qanda-test" id="subtitle"]]
+[[!template text="""I spent the night trying to figure out why""" start="00:16:58.180" video="qanda-test" id="subtitle"]]
+[[!template text="""our code was wrong, but It turns out that's""" start="00:17:00.720" video="qanda-test" id="subtitle"]]
+[[!template text="""how Emacs behaves. Try it out yourself.""" start="00:17:03.560" video="qanda-test" id="subtitle"]]
+[[!template text="""Try to move over the 3 dots at the end of""" start="00:17:07.920" video="qanda-test" id="subtitle"]]
+[[!template text="""that and see what happens.""" start="00:17:09.140" video="qanda-test" id="subtitle"]]
+[[!template text="""Do it with cursor hitting the key or using a""" start="00:17:14.060" video="qanda-test" id="subtitle"]]
+[[!template text="""prefix argument and you see it behaves""" start="00:17:16.260" video="qanda-test" id="subtitle"]]
+[[!template text="""differently. That was the craziest thing.""" start="00:17:18.720" video="qanda-test" id="subtitle"]]
+[[!template text="""I think there was some other crazy thing or""" start="00:17:21.960" video="qanda-test" id="subtitle"]]
+[[!template text="""deep learning also, but I can't come up with""" start="00:17:24.280" video="qanda-test" id="subtitle"]]
+[[!template text="""it at the moment. So maybe I can write it in""" start="00:17:26.599" video="qanda-test" id="subtitle"]]
+[[!template text="""the Q&A later.""" start="00:17:27.900" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 1]: I think we're out of time on the stream,""" start="00:17:31.200" video="qanda-test" id="subtitle"]]
+[[!template text="""but people are welcome to join Mats and Bob""" start="00:17:33.360" video="qanda-test" id="subtitle"]]
+[[!template text="""here on BigBlueButton to further discuss""" start="00:17:35.280" video="qanda-test" id="subtitle"]]
+[[!template text="""this. Thank you both.""" start="00:17:36.480" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, thank you. Thanks,""" start="00:17:38.674" video="qanda-test" id="subtitle"]]
+[[!template text="""Makaay. Thank you. I don't know,""" start="00:17:46.100" video="qanda-test" id="subtitle"]]
+[[!template text="""Is it only me and Bob here?""" start="00:17:48.740" video="qanda-test" id="subtitle"]]
+[[!template text="""So Bob, do you want to say something?""" start="00:17:50.680" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 2]: Well, I think it's been a great day.""" start="00:17:57.440" video="qanda-test" id="subtitle"]]
+[[!template text="""And I'm glad we did this.""" start="00:18:00.720" video="qanda-test" id="subtitle"]]
+[[!template text="""It takes a lot of energy.""" start="00:18:02.280" video="qanda-test" id="subtitle"]]
+[[!template text="""I'm just really excited about the progress""" start="00:18:15.140" video="qanda-test" id="subtitle"]]
+[[!template text="""that this, and we're actually doing a lot of""" start="00:18:20.580" video="qanda-test" id="subtitle"]]
+[[!template text="""QA at work and my professional software work""" start="00:18:23.940" video="qanda-test" id="subtitle"]]
+[[!template text="""and looking at you know how we can do more""" start="00:18:28.500" video="qanda-test" id="subtitle"]]
+[[!template text="""test driven development and so everybody's""" start="00:18:32.980" video="qanda-test" id="subtitle"]]
+[[!template text="""talking about this you know we've got AI over""" start="00:18:35.980" video="qanda-test" id="subtitle"]]
+[[!template text="""here that can generate test cases.""" start="00:18:37.540" video="qanda-test" id="subtitle"]]
+[[!template text="""But, you know, strangely enough,""" start="00:18:40.200" video="qanda-test" id="subtitle"]]
+[[!template text="""with the rapidity of development and web""" start="00:18:43.100" video="qanda-test" id="subtitle"]]
+[[!template text="""applications, I think the level of testing""" start="00:18:46.720" video="qanda-test" id="subtitle"]]
+[[!template text="""has gone down in recent years compared to""" start="00:18:50.140" video="qanda-test" id="subtitle"]]
+[[!template text="""where it used to be, right?""" start="00:18:51.500" video="qanda-test" id="subtitle"]]
+[[!template text="""Because the pace has gone up.""" start="00:18:53.040" video="qanda-test" id="subtitle"]]
+[[!template text="""And so I think it's starting to turn again""" start="00:18:57.340" video="qanda-test" id="subtitle"]]
+[[!template text="""where people are saying,""" start="00:18:58.740" video="qanda-test" id="subtitle"]]
+[[!template text="""we can't just release crap into the""" start="00:19:01.940" video="qanda-test" id="subtitle"]]
+[[!template text="""Webisphere and we have to better ourselves.""" start="00:19:08.120" video="qanda-test" id="subtitle"]]
+[[!template text="""And with all these advanced tool sets that""" start="00:19:13.620" video="qanda-test" id="subtitle"]]
+[[!template text="""you have, that you can do CICD testing,""" start="00:19:16.100" video="qanda-test" id="subtitle"]]
+[[!template text="""you know, I just, I just see it coming""" start="00:19:19.860" video="qanda-test" id="subtitle"]]
+[[!template text="""around, you know, as people develop new""" start="00:19:21.900" video="qanda-test" id="subtitle"]]
+[[!template text="""things. So That's kind of exciting to me""" start="00:19:24.000" video="qanda-test" id="subtitle"]]
+[[!template text="""because I came from a manufacturing culture""" start="00:19:26.980" video="qanda-test" id="subtitle"]]
+[[!template text="""originally where we, our company actually""" start="00:19:30.300" video="qanda-test" id="subtitle"]]
+[[!template text="""started a lot of the manufacturing quality""" start="00:19:33.800" video="qanda-test" id="subtitle"]]
+[[!template text="""efforts that you saw in Japan and elsewhere""" start="00:19:37.420" video="qanda-test" id="subtitle"]]
+[[!template text="""in America for a long time and that was you""" start="00:19:40.600" video="qanda-test" id="subtitle"]]
+[[!template text="""know entirely through testing.""" start="00:19:42.040" video="qanda-test" id="subtitle"]]
+[[!template text="""We used to just build incredible test cases""" start="00:19:46.640" video="qanda-test" id="subtitle"]]
+[[!template text="""because we were combining software with""" start="00:19:49.120" video="qanda-test" id="subtitle"]]
+[[!template text="""hardware. And if, you know,""" start="00:19:51.100" video="qanda-test" id="subtitle"]]
+[[!template text="""the hardware doesn't work and you ship a""" start="00:19:53.460" video="qanda-test" id="subtitle"]]
+[[!template text="""million units, you're,""" start="00:19:55.080" video="qanda-test" id="subtitle"]]
+[[!template text="""you're in trouble. So,""" start="00:19:57.340" video="qanda-test" id="subtitle"]]
+[[!template text="""that was just something we had to do.""" start="00:20:00.260" video="qanda-test" id="subtitle"]]
+[[!template text="""And so it's nice to start to see that curve""" start="00:20:04.280" video="qanda-test" id="subtitle"]]
+[[!template text="""come around. And I think,""" start="00:20:07.020" video="qanda-test" id="subtitle"]]
+[[!template text="""you know, Matt Vance is very modest,""" start="00:20:10.380" video="qanda-test" id="subtitle"]]
+[[!template text="""but I think he's really the 1 that started us""" start="00:20:16.680" video="qanda-test" id="subtitle"]]
+[[!template text="""down this path and really made it into a""" start="00:20:20.400" video="qanda-test" id="subtitle"]]
+[[!template text="""reality. So everybody else just gets to""" start="00:20:24.620" video="qanda-test" id="subtitle"]]
+[[!template text="""benefit from that work.""" start="00:20:25.760" video="qanda-test" id="subtitle"]]
+[[!template text="""So thanks.""" start="00:20:27.540" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 1]: That's awesome.""" start="00:20:32.760" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thanks. Okay. Yeah. So if there's nothing""" start="00:20:39.960" video="qanda-test" id="subtitle"]]
+[[!template text="""more here, then maybe we should just close""" start="00:20:43.200" video="qanda-test" id="subtitle"]]
+[[!template text="""this and I go over to write in the etherpad""" start="00:20:45.440" video="qanda-test" id="subtitle"]]
+[[!template text="""the replies we had.""" start="00:20:47.960" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right, yeah, I think, let's see,""" start="00:20:51.900" video="qanda-test" id="subtitle"]]
+[[!template text="""I see 1 other person here,""" start="00:20:53.520" video="qanda-test" id="subtitle"]]
+[[!template text="""I believe Ihor just joined us.""" start="00:20:55.080" video="qanda-test" id="subtitle"]]
+[[!template text="""Yeah. Yeah, so if you do want to discuss with""" start="00:20:58.780" video="qanda-test" id="subtitle"]]
+[[!template text="""Mats and Bob, you're welcome to,""" start="00:21:00.220" video="qanda-test" id="subtitle"]]
+[[!template text="""otherwise, yeah, we can close the room now.""" start="00:21:02.200" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 3]: Well, I think I missed most of the talk""" start="00:21:05.800" video="qanda-test" id="subtitle"]]
+[[!template text="""because I had power outage,""" start="00:21:06.900" video="qanda-test" id="subtitle"]]
+[[!template text="""but the part I heard was about the mock""" start="00:21:12.180" video="qanda-test" id="subtitle"]]
+[[!template text="""library. And you mentioned that you don't""" start="00:21:16.860" video="qanda-test" id="subtitle"]]
+[[!template text="""like CL-let, but instead you use mock.""" start="00:21:20.200" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I was more saying that you have to do a""" start="00:21:29.700" video="qanda-test" id="subtitle"]]
+[[!template text="""lot more work when you use the CL letdef.""" start="00:21:31.560" video="qanda-test" id="subtitle"]]
+[[!template text="""It's for more ambitious and maybe more""" start="00:21:34.540" video="qanda-test" id="subtitle"]]
+[[!template text="""complicated cases where you want to really""" start="00:21:37.000" video="qanda-test" id="subtitle"]]
+[[!template text="""make a new implementation,""" start="00:21:38.840" video="qanda-test" id="subtitle"]]
+[[!template text="""test implementation. If you use the mock,""" start="00:21:41.940" video="qanda-test" id="subtitle"]]
+[[!template text="""you get a lot of things out of the box,""" start="00:21:44.380" video="qanda-test" id="subtitle"]]
+[[!template text="""verifying that you actually,""" start="00:21:47.440" video="qanda-test" id="subtitle"]]
+[[!template text="""like the mock was actually called for""" start="00:21:50.820" video="qanda-test" id="subtitle"]]
+[[!template text="""instance, whereas if you do with the CLLatf,""" start="00:21:53.320" video="qanda-test" id="subtitle"]]
+[[!template text="""you would have to take correct track of that""" start="00:21:56.520" video="qanda-test" id="subtitle"]]
+[[!template text="""yourself. And so, so a lot of more work.""" start="00:22:02.020" video="qanda-test" id="subtitle"]]
+[[!template text="""Oh yeah.""" start="00:22:03.760" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 3]: I'm saying that most of the time CLLess is""" start="00:22:07.940" video="qanda-test" id="subtitle"]]
+[[!template text="""used for simple cases actually.""" start="00:22:09.720" video="qanda-test" id="subtitle"]]
+[[!template text="""Because, just for example,""" start="00:22:12.320" video="qanda-test" id="subtitle"]]
+[[!template text="""the function always returns the same.""" start="00:22:15.100" video="qanda-test" id="subtitle"]]
+[[!template text="""And it tends to be simple lambda that ignores""" start="00:22:17.980" video="qanda-test" id="subtitle"]]
+[[!template text="""all the input arguments.""" start="00:22:19.040" video="qanda-test" id="subtitle"]]
+[[!template text="""So that's really trivial most of the time but""" start="00:22:23.000" video="qanda-test" id="subtitle"]]
+[[!template text="""I actually thought the opposite that mock is""" start="00:22:25.520" video="qanda-test" id="subtitle"]]
+[[!template text="""supposed to be used for non-trivial cases.""" start="00:22:27.640" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Sorry, what was the question?""" start="00:22:32.280" video="qanda-test" id="subtitle"]]
+[[!template text="""Mock was supposed to be used for non-trivial.""" start="00:22:35.280" video="qanda-test" id="subtitle"]]
+[[!template text="""Yeah I mean I don't know how to explain this.""" start="00:22:47.680" video="qanda-test" id="subtitle"]]
+[[!template text="""I mean, CLF can be used for non-trivial""" start="00:22:50.140" video="qanda-test" id="subtitle"]]
+[[!template text="""definitely. You can define then any behavior""" start="00:22:54.400" video="qanda-test" id="subtitle"]]
+[[!template text="""you want. You can write your own function,""" start="00:22:56.180" video="qanda-test" id="subtitle"]]
+[[!template text="""but you need to keep track of whether that""" start="00:22:58.440" video="qanda-test" id="subtitle"]]
+[[!template text="""function is called or not,""" start="00:22:59.620" video="qanda-test" id="subtitle"]]
+[[!template text="""for instance. So you have to make note of""" start="00:23:06.260" video="qanda-test" id="subtitle"]]
+[[!template text="""that the function was called so you can fire""" start="00:23:08.440" video="qanda-test" id="subtitle"]]
+[[!template text="""sort of an error in case your function wasn't""" start="00:23:12.440" video="qanda-test" id="subtitle"]]
+[[!template text="""called because that would be 1 error case.""" start="00:23:16.960" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 3]: So you mean the mock fires an error if the""" start="00:23:20.660" video="qanda-test" id="subtitle"]]
+[[!template text="""mocked function was actually not called?""" start="00:23:22.580" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, it does. Yes. So if your assumptions,""" start="00:23:30.060" video="qanda-test" id="subtitle"]]
+[[!template text="""you sort of document with the mock also your""" start="00:23:33.900" video="qanda-test" id="subtitle"]]
+[[!template text="""assumptions how your code is going to be""" start="00:23:37.080" video="qanda-test" id="subtitle"]]
+[[!template text="""called. And if those are wrong,""" start="00:23:40.020" video="qanda-test" id="subtitle"]]
+[[!template text="""you will get an error.""" start="00:23:41.120" video="qanda-test" id="subtitle"]]
+[[!template text="""So you would, so if the implementation would""" start="00:23:43.680" video="qanda-test" id="subtitle"]]
+[[!template text="""maybe change, for instance,""" start="00:23:44.840" video="qanda-test" id="subtitle"]]
+[[!template text="""and not call the thing you're mocking,""" start="00:23:46.640" video="qanda-test" id="subtitle"]]
+[[!template text="""then you will notice that.""" start="00:23:50.460" video="qanda-test" id="subtitle"]]
+[[!template text="""But if you see a letdef,""" start="00:23:53.100" video="qanda-test" id="subtitle"]]
+[[!template text="""then you will have to keep track of that""" start="00:23:54.840" video="qanda-test" id="subtitle"]]
+[[!template text="""yourself. Okay, I see.""" start="00:23:57.560" video="qanda-test" id="subtitle"]]
+[[!template text="""I see.""" start="00:23:58.260" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 3]: And you know, our mode also uses a lot of""" start="00:24:01.240" video="qanda-test" id="subtitle"]]
+[[!template text="""test. In our mode, we have a lot of tests""" start="00:24:09.340" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Ah, okay. Yeah. Yeah. I'm sure I have.""" start="00:24:13.940" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 3]: also. We rely on CLLatF for,""" start="00:24:15.900" video="qanda-test" id="subtitle"]]
+[[!template text="""we don't use third-party libraries at all.""" start="00:24:19.220" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh, you use CLLatF, okay.""" start="00:24:22.140" video="qanda-test" id="subtitle"]]
+[[!template text="""Yeah. Yeah. Yeah. At First I found it very""" start="00:24:26.680" video="qanda-test" id="subtitle"]]
+[[!template text="""powerful to use that, but then I sort of,""" start="00:24:29.480" video="qanda-test" id="subtitle"]]
+[[!template text="""I learned more about how we can use the""" start="00:24:32.120" video="qanda-test" id="subtitle"]]
+[[!template text="""mocking library for what I needed.""" start="00:24:34.340" video="qanda-test" id="subtitle"]]
+[[!template text="""And I prefer that at the moment.""" start="00:24:36.900" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 3]: I see, that is interesting.""" start="00:24:40.560" video="qanda-test" id="subtitle"]]
+[[!template text="""Because I had seen it,""" start="00:24:42.500" video="qanda-test" id="subtitle"]]
+[[!template text="""but I didn't consider that it's gonna be""" start="00:24:45.440" video="qanda-test" id="subtitle"]]
+[[!template text="""useful even in simple cases.""" start="00:24:46.800" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: It has its limitations.""" start="00:24:52.640" video="qanda-test" id="subtitle"]]
+[[!template text="""So it's like life, how you turn depends.""" start="00:24:58.260" video="qanda-test" id="subtitle"]]
+[[!template text="""But maybe I should look more into the org""" start="00:25:03.740" video="qanda-test" id="subtitle"]]
+[[!template text="""mode and the test case to learn more about""" start="00:25:05.880" video="qanda-test" id="subtitle"]]
+[[!template text="""that. So thanks for pointing that out.""" start="00:25:07.480" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 3]: We are trying to cover as much as we can.""" start="00:25:14.620" video="qanda-test" id="subtitle"]]
+[[!template text="""It's almost impossible for org.""" start="00:25:17.520" video="qanda-test" id="subtitle"]]
+[[!template text="""But yeah, we keep adding more tests.""" start="00:25:20.500" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's great.""" start="00:25:22.780" video="qanda-test" id="subtitle"]]
+[[!template text="""Someone's typing. I don't know.""" start="00:25:52.720" video="qanda-test" id="subtitle"]]
+[[!template text="""Any more questions? No?""" start="00:25:54.340" video="qanda-test" id="subtitle"]]
+[[!template text="""Okay, then I'll go back and try to document""" start="00:26:01.060" video="qanda-test" id="subtitle"]]
+[[!template text="""this in the etherpad. Thank you everybody for""" start="00:26:05.200" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thank you guys. Great work.""" start="00:26:08.860" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 0]: joining. Great. Thank you.""" start="00:26:09.400" video="qanda-test" id="subtitle"]]
+[[!template text="""Take care. Bye-bye.""" start="00:26:11.100" video="qanda-test" id="subtitle"]]
+[[!template text="""[Speaker 1]: Take care. Bye. Silence.""" start="00:26:15.060" video="qanda-test" id="subtitle"]]
+
+Questions or comments? Please e-mail [matsl@gnu.org](mailto:matsl@gnu.org?subject=Comment%20for%20EmacsConf%202023%20test%3A%20What%20I%20learned%20by%20writing%20test%20cases%20for%20GNU%20Hyperbole)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/test-before.md b/2023/info/test-before.md
new file mode 100644
index 00000000..8b140aad
--- /dev/null
+++ b/2023/info/test-before.md
@@ -0,0 +1,42 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 27-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="test-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="test-mainVideo" data="""
+00:03.120 Introduction
+03:11.160 ERT: Emacs Lisp Regression Testing
+04:14.360 Assertions with `should`
+04:56.920 Running a test case
+06:54.560 Debug a test
+07:50.380 Commercial break: Hyperbole
+09:10.480 Instrument function on the fly
+10:39.120 Mocking
+14:41.240 cl-letf
+15:24.100 Hooks
+15:55.720 Side effects and initial buffer state
+17:05.100 with-temp-buffer
+17:16.520 make-temp-file
+17:33.288 buffer-string
+18:09.920 buffer-name
+18:51.980 major-mode
+19:02.680 unwind-protect
+20:15.100 Input, with-simulated-input
+21:38.460 Running all tests
+23:03.220 Batch mode
+24:05.060 Skipping tests
+26:08.460 Conclusion
+
+"""]]<div></div>Duration: 26:55 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--transcript.txt">Download --transcript.txt</a></li><li><a href="https://toobnix.org/w/4XmcGSe3TQrJJNUqQXqK2B">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="test-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="test-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus"></audio></div><div></div>Duration: 26:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.json">Download --answers.json (1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (41MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/test-nav.md b/2023/info/test-nav.md
new file mode 100644
index 00000000..a595b88c
--- /dev/null
+++ b/2023/info/test-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/lspocaml">Writing a language server in OCaml for Emacs, fun, and profit</a>
+Next by track: <a href="/2023/talks/emacsconf">EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/unentangling-after.md b/2023/info/unentangling-after.md
new file mode 100644
index 00000000..f6e4924f
--- /dev/null
+++ b/2023/info/unentangling-after.md
@@ -0,0 +1,273 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="unentangling-mainVideo-transcript"></a>
+# Transcript (unedited)
+
+[[!template text="""Hello, I'm Alexey Bychkadov,""" start="00:00:01.220" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""and I'm talking about unentangling projects""" start="00:00:03.740" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""and repositories, or maybe entangling them,""" start="00:00:06.899" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""depending on how you look at that.""" start="00:00:09.679" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So there's going to be a short workflow note.""" start="00:00:12.980" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I work as a researcher,""" start="00:00:16.619" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So there are 3 main components to my work,""" start="00:00:19.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I guess. First, I think,""" start="00:00:23.680" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""so I try to come up with a new ideas that""" start="00:00:26.000" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""usually results in some collection of notes I""" start="00:00:28.140" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""have. Second, I try things out.""" start="00:00:31.580" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So it usually means that I write code.""" start="00:00:33.760" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And third, I communicate.""" start="00:00:36.820" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So I prepare papers, presentations,""" start="00:00:38.739" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""memos, and so on and so forth.""" start="00:00:41.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And so The workflow problem I had is""" start="00:00:44.120" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""sometimes all this does not really fit into a""" start="00:00:49.160" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""concept of a single repository per project.""" start="00:00:53.000" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So I might want to have,""" start="00:00:56.200" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""for example, a source code in 1 repository""" start="00:00:58.180" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""and then I would like to have a paper in""" start="00:01:01.320" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""another 1 and then I want to have a""" start="00:01:03.480" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""collection of notes somewhere unrelated to""" start="00:01:05.200" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""those 2. Emacs is pretty good at supporting""" start="00:01:08.620" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""your workflows and I figured I should share""" start="00:01:12.500" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""what I used and what works for me.""" start="00:01:16.240" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So, from the technical perspective,""" start="00:01:20.560" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""things are pretty easy.""" start="00:01:26.479" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So I use a collection of pretty standard""" start="00:01:27.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""components of Emacs. So it's a projectile org""" start="00:01:30.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""mode with this capture templates and other""" start="00:01:33.240" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""things. Then I sustained a collection of""" start="00:01:35.360" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""nodes in something that is called org-roam,""" start="00:01:38.100" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""which is essentially it's a glorified""" start="00:01:40.680" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""collection of org mode files.""" start="00:01:43.580" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Then I used directory local variables,""" start="00:01:46.100" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""maybe a C text to jump through the source""" start="00:01:48.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""code and very, very little LELisp glue to""" start="00:01:51.140" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""make this all work, but that's not really""" start="00:01:54.920" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""rocket science. So that's the workflow I""" start="00:01:58.620" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""would like to talk about today.""" start="00:02:00.400" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So what I mean by all that,""" start="00:02:04.860" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""it's pretty straightforward to make Emacs,""" start="00:02:07.960" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""to make it easy to jump around a single""" start="00:02:10.680" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""repository in Emacs. So if I,""" start="00:02:12.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Now I have Doom Emacs,""" start="00:02:15.060" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""but that's not really specific to a Doom""" start="00:02:16.640" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""that'll work in any Emacs configuration.""" start="00:02:19.120" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Well, key bindings might be different,""" start="00:02:23.400" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""but that's not the point,""" start="00:02:27.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I guess, for the workflow.""" start="00:02:28.820" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So if I hit space 2 times,""" start="00:02:30.060" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I have all the list of files within my""" start="00:02:31.960" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""project, right? So if I create a couple of""" start="00:02:34.640" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""custom shortcuts, so if I press a magic""" start="00:02:38.200" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""button, hyper-OP, don't worry about""" start="00:02:42.780" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""hyper-key. So I want it to have a modifier""" start="00:02:45.280" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""key all to myself, so that would,""" start="00:02:47.560" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""no program on my computer would use that""" start="00:02:50.320" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""except Emacs. Emacs would use that only when""" start="00:02:53.200" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I tell it to, so I have a hyper key instead""" start="00:02:55.680" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""of caps lock. That's pretty easy to do in GNU""" start="00:02:57.540" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Linux system. So when I press this magic""" start="00:03:00.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""keys, I have a menu that's a normal key""" start="00:03:04.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""binding. Yeah, essentially an Emacs.""" start="00:03:07.400" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And if I hit, for example,""" start="00:03:10.240" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""R, I end up in a readme file within this""" start="00:03:12.540" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""specific repository I was sitting in,""" start="00:03:15.200" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right? So if I want to document something""" start="00:03:17.320" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""real quick, I go to the readme file.""" start="00:03:19.000" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Then I could go to a change log file,""" start="00:03:21.680" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right? So I have a list of changes and the""" start="00:03:25.280" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""way it works usually, for example,""" start="00:03:27.440" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""if I'm working in some code,""" start="00:03:29.480" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I created a couple of dummy files in there,""" start="00:03:32.220" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""so I'm working in some code and then I""" start="00:03:34.280" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""implemented something and I can just use the""" start="00:03:36.560" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""org mode capture mechanisms to keep track of""" start="00:03:42.020" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""what I want to discuss with colleagues next""" start="00:03:46.860" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""time. For example, I could just hit capture""" start="00:03:48.880" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""repo specific changelog entry and I""" start="00:03:52.440" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""implemented a feature and I can continue""" start="00:03:56.200" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""working without this context switching.""" start="00:04:02.620" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And then if I want to go to the change log,""" start="00:04:04.340" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""well, it is there. And next time I talk to""" start="00:04:06.880" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""the colleagues about the source code,""" start="00:04:11.320" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I can open the change log and go through""" start="00:04:12.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""entries 1 by 1 and discuss what I haven't""" start="00:04:14.340" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""implemented last time.""" start="00:04:16.800" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I could go to project specific,""" start="00:04:19.540" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""sorry, to repo specific to-do list.""" start="00:04:24.100" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And I have list of to-dos that would leave""" start="00:04:26.320" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""within a repository. And for example,""" start="00:04:29.020" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I could have a high level structure here,""" start="00:04:31.320" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""work distribution between team members and""" start="00:04:34.640" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""other things that sort of face outer world,""" start="00:04:36.460" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""so to speak. And of course,""" start="00:04:39.380" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""there are very many ways to jump through the""" start="00:04:42.840" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""source code conveniently.""" start="00:04:45.400" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I ended up not using language servers I use a""" start="00:04:46.560" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""special program called ctags and so the way""" start="00:04:49.960" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""it works is just I call projectile regenerate""" start="00:04:53.320" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""tags and it creates the special tags file""" start="00:04:56.680" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""within the repository and then I can again""" start="00:05:00.460" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""run it I usually just hit a single keystroke""" start="00:05:06.240" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""and here is all the symbols that are there in""" start="00:05:11.520" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""my source code, regardless of the language,""" start="00:05:14.060" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right? So I can jump to the main function and""" start="00:05:17.160" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""that'll be a C++ file.""" start="00:05:19.540" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Or I could go to the super function,""" start="00:05:21.020" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""which I had in my Python file.""" start="00:05:22.740" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And this comes in pretty convenient if I have""" start="00:05:25.380" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""a mixture of languages.""" start="00:05:27.120" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Sometimes I can have some algorithm specific""" start="00:05:28.360" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""code in Julia, and then I can have some""" start="00:05:30.800" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Python glue within the same source code""" start="00:05:33.280" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""repository, it makes it really convenient to""" start="00:05:35.380" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""jump between all of those.""" start="00:05:39.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""But I have a few problems here.""" start="00:05:43.080" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So just to give you a little bit of context,""" start="00:05:47.360" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""for example, here is a real project that""" start="00:05:49.860" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""corresponds to real paper.""" start="00:05:53.100" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I have a single note about that project where""" start="00:05:55.840" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I keep all the things related to that project""" start="00:05:59.060" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""here, but that's a private note.""" start="00:06:01.780" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So for example, again,""" start="00:06:03.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I hit a special key that invokes my org-roam""" start="00:06:04.860" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""function that gives me a menu of my notes.""" start="00:06:08.640" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And so here is the paper,""" start="00:06:13.080" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""essentially. And I can have a paper timeline,""" start="00:06:15.200" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""and I can have a list of all the dates what""" start="00:06:17.900" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""happened to the paper with links to my email,""" start="00:06:21.180" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right? So for example if I hit this link that""" start="00:06:24.060" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""will open a specific email and that doesn't""" start="00:06:27.700" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""work outside of my computer,""" start="00:06:30.160" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""doesn't make any sense to keep it in the""" start="00:06:31.280" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""outer world facing repository,""" start="00:06:33.340" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""for example. So that's something to myself,""" start="00:06:35.500" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right? Sometimes I want to have like this""" start="00:06:37.360" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""list of working notes,""" start="00:06:41.480" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right, that contain like,""" start="00:06:43.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""for example, yeah, I might produce this kind""" start="00:06:45.780" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""of things for internal discussion,""" start="00:06:49.200" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right? It has some marks,""" start="00:06:50.640" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""it has some margin notes and things like""" start="00:06:52.500" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""that. Maybe again, health-based ideas that""" start="00:06:54.620" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""may or may not end up in a repository,""" start="00:06:57.620" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""in the final paper or in a source code,""" start="00:07:01.020" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""but still I want to have it somewhere.""" start="00:07:03.220" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And well, long story short,""" start="00:07:07.120" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I need a project folder that would be""" start="00:07:08.800" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""unrelated to the source code or to the source""" start="00:07:11.680" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""code repository or to the paper itself or a""" start="00:07:16.120" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""final report, right? And 1 way,""" start="00:07:19.440" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""as usual, there are multiple ways to achieve""" start="00:07:22.960" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""that, I suppose. And 1 way to do that is,""" start="00:07:24.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""so I create a special folder within my""" start="00:07:29.040" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""org-roam storage. So it's a special folder""" start="00:07:33.160" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""outside of Henry Postories that got backed up""" start="00:07:38.240" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""to my hard drive with certain redundancy,""" start="00:07:40.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""but I don't really need like version control,""" start="00:07:44.080" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""full blown version control for that.""" start="00:07:46.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I'm okay with just having a couple of""" start="00:07:48.280" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""backups, right? So this is the folder you see""" start="00:07:49.760" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""here. So PKB stands for personal knowledge""" start="00:07:52.900" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""base, and I have a folder project notes in""" start="00:07:55.320" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""there, right? So, and How does it work?""" start="00:07:58.020" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So I have a folder per project in there,""" start="00:08:01.680" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""essentially. And here I can have all the""" start="00:08:05.020" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""stuff that kind of belongs to me and I do not""" start="00:08:07.900" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""publish it anywhere. And then,""" start="00:08:11.480" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""For example, a source code repository knows""" start="00:08:15.420" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""about that folder and a paper repository""" start="00:08:20.460" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""knows about that folder.""" start="00:08:23.460" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And anything else that might leave in""" start="00:08:25.120" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""separate places all over my system can know""" start="00:08:26.820" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""about that folder. How do I achieve that?""" start="00:08:28.820" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Well, essentially this is 1 of the use cases""" start="00:08:30.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""for the directory local variables,""" start="00:08:34.400" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right? So for example,""" start="00:08:36.360" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""how does it work from the user perspective?""" start="00:08:39.520" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So if I hit a special key,""" start="00:08:41.580" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""oh, sorry, if I hit a special key,""" start="00:08:44.380" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""that would be open project.""" start="00:08:48.280" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And then for example, org mode file,""" start="00:08:51.680" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right? So this is my personal notes about the""" start="00:08:55.920" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""maxconf, not specifically about this very""" start="00:08:58.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""talk, but I can have, you know,""" start="00:09:01.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""the house baked ideas here again,""" start="00:09:02.580" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""presentation tools and things like that.""" start="00:09:04.760" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And how does that happen?""" start="00:09:07.440" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""If we try to like look at the code,""" start="00:09:09.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""the e-list magic here,""" start="00:09:13.080" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""what is happening is it's just a couple of""" start="00:09:15.040" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""lines of code, in fact,""" start="00:09:17.560" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""so let me just press Control,""" start="00:09:18.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""help key. And so the key I was pressing is""" start="00:09:22.540" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""open project or my file.""" start="00:09:28.140" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And so what we see here,""" start="00:09:30.480" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""there is a single, so it's just a call to a""" start="00:09:32.220" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""find file function. So I opened that file and""" start="00:09:34.760" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""there is a special function that figures out""" start="00:09:37.200" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""what is the like umbrella project nose file""" start="00:09:40.580" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""and that's, again, that's very easy.""" start="00:09:44.620" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So essentially if a variable describing this,""" start="00:09:47.380" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""the name for that project is defined,""" start="00:09:51.820" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""then I use that as my project folder name.""" start="00:09:54.860" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""If not, I take the project name from the""" start="00:09:57.440" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""project tile. Well, that's pretty much it.""" start="00:10:00.480" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And how do I define this variable?""" start="00:10:03.340" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Is essentially there is this magical file in""" start="00:10:09.280" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""a folder called dear locals,""" start="00:10:12.500" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""elist. And I just put it there.""" start="00:10:14.440" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And then whenever I go into that folder or""" start="00:10:17.440" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""any of its children folders,""" start="00:10:20.380" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I get this variable defined.""" start="00:10:22.300" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And that's pretty much it.""" start="00:10:24.840" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""That's how it works for me.""" start="00:10:26.280" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I guess 1 thing that I wanted to emphasize""" start="00:10:31.860" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""specifically about that is of course,""" start="00:10:35.380" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""it is a time tracking,""" start="00:10:37.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right? So what is I find especially important""" start="00:10:39.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""when I work in something and I want to clock""" start="00:10:42.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""time, I usually do not want this information""" start="00:10:44.340" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""to be in a source code repository or in a""" start="00:10:47.800" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""paper repository because other people I work""" start="00:10:50.340" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""with will not be particularly happy about""" start="00:10:52.600" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""that, especially if most of them do not use""" start="00:10:54.840" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Emacs and they'll see this long list of org""" start="00:10:57.540" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""clocked data and that doesn't look nice in a""" start="00:11:00.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""plain text format. So what I usually do if I""" start="00:11:03.820" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""want to clock in some time and then later""" start="00:11:07.540" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""analyze what I've been spending time on,""" start="00:11:10.240" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""so I go to my org mode file and I go to the,""" start="00:11:12.560" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""my current project to-dos and I clock in""" start="00:11:16.880" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""there. And that's how it works.""" start="00:11:21.820" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So again, what comes in handy,""" start="00:11:23.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""if I hit Control O, I just go back to the""" start="00:11:28.860" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""file I jumped in into and that's I jumped""" start="00:11:31.500" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""from so that's also pretty handy.""" start="00:11:34.240" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So again no no rocket science in there.""" start="00:11:36.220" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So I create a directory local variable that""" start="00:11:40.380" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""helps me to figure out what umbrella project""" start="00:11:42.660" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""does this particular folder belongs to.""" start="00:11:46.620" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And this way I make Emacs aware of,""" start="00:11:49.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""for example, facts like,""" start="00:11:53.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""so this source code belongs to that project.""" start="00:11:54.480" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And this paper, this repository with a paper""" start="00:11:56.740" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""also belongs to that project.""" start="00:11:59.180" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And I can have capture templates that would""" start="00:12:01.060" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""save my notes into the my private notes file""" start="00:12:04.060" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""and my to-dos and go to my private note files""" start="00:12:07.800" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""and so on and so forth.""" start="00:12:10.920" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""So I find it pretty simple but that really""" start="00:12:12.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""helps to reduce this context switching.""" start="00:12:15.520" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And I don't believe it allows me to save""" start="00:12:19.600" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""time, but that probably helps me to stay""" start="00:12:22.040" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""focused. And this is what is really""" start="00:12:26.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""important, I believe. So thank you very much.""" start="00:12:28.420" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""And if you have any comments or suggestions""" start="00:12:31.400" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""to that, please do jump into the discussion.""" start="00:12:33.320" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Yeah, after the talk, thank you.""" start="00:12:37.120" video="mainVideo-unentangling" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20unentangling%3A%20%28Un%29entangling%20projects%20and%20repos)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/unentangling-before.md b/2023/info/unentangling-before.md
new file mode 100644
index 00000000..d8a2318c
--- /dev/null
+++ b/2023/info/unentangling-before.md
@@ -0,0 +1,12 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 13-min talk; Q&A: Etherpad
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="unentangling-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 12:39 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.webm">Download --main.webm (68MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/wLxyZBoFAad575Lp4PGyoF">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/unentangling-nav.md b/2023/info/unentangling-nav.md
new file mode 100644
index 00000000..24e0a4b0
--- /dev/null
+++ b/2023/info/unentangling-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/ref">Org-Mode workflow: informal reference tracking</a>
+Next by track: <a href="/2023/talks/devel">Emacs development updates</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/uni-after.md b/2023/info/uni-after.md
new file mode 100644
index 00000000..2bfe8152
--- /dev/null
+++ b/2023/info/uni-after.md
@@ -0,0 +1,971 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="uni-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""Hello everyone. I'm James Howell.""" start="00:00:00.000" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I teach biochemistry and""" start="00:00:01.940" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""molecular biology at Penn State University.""" start="00:00:03.540" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I'm going to talk today""" start="00:00:07.220" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""about using Emacs to make all of""" start="00:00:08.880" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the materials for presenting""" start="00:00:11.480" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""course meetings in my courses.""" start="00:00:13.620" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Everything that you're going to see today is""" start="00:00:15.680" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""what I've made using""" start="00:00:18.820" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the methods that I'm going to describe.""" start="00:00:20.440" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""The main point is that you can take""" start="00:00:26.200" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""an Org document and""" start="00:00:29.720" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""with a single Emacs document,""" start="00:00:32.080" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""make both a pretty text document""" start="00:00:34.470" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that a student can have""" start="00:00:39.080" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""on the desk and take notes on.""" start="00:00:40.380" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And also, I hope,""" start="00:00:42.040" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""fairly useful and attractive slides""" start="00:00:44.440" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""like the ones that I'm presenting right now.""" start="00:00:49.040" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Both of these""" start="00:00:51.340" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""from a single source document.""" start="00:00:52.860" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Okay. If you'd like""" start="00:00:56.660" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""to see the handout that goes along with this,""" start="00:00:59.260" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""you can download it""" start="00:01:00.920" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""at the [Sourcehut] repository where""" start="00:01:02.800" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I've put— everything's here.""" start="00:01:04.060" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""So if you'd like to go look at it,""" start="00:01:05.960" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""you can follow with the handout.""" start="00:01:07.820" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""So I promised to talk about""" start="00:01:09.940" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""both authoring and presenting.""" start="00:01:11.240" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Presenting""" start="00:01:12.440" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""And first I'm going to talk about presenting.""" start="00:01:12.440" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I'm not the only one who does this.""" start="00:01:14.620" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""You might have seen System Crafters [David Wilson]""" start="00:01:16.600" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""or Prot's [Protesilaos Stavrou's] channel or""" start="00:01:19.300" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Mike Zemansky's channel on Youtube.""" start="00:01:20.640" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""(Prot actually is going to be presenting tomorrow.)""" start="00:01:23.060" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Maybe you've seen this""" start="00:01:26.680" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""chemical engineer at Carnegie Mellon,""" start="00:01:28.420" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""John Kitchin or Eric Fraga""" start="00:01:30.180" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""or Olivier Berger all have made""" start="00:01:32.160" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""blog posts about using Org mode""" start="00:01:34.140" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""to produce course materials.""" start="00:01:36.520" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""This pair Ro and Namkoon""" start="00:01:39.420" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""actually published a peer reviewed paper.""" start="00:01:41.460" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""There's prior art here""" start="00:01:43.740" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that I'd like to acknowledge.""" start="00:01:45.740" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Hardware""" start="00:01:47.820" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""Let me talk about my practices:""" start="00:01:47.820" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""First, the hardware.""" start="00:01:50.840" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""This is the hardware that I'm using to""" start="00:01:51.520" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""record this recording at the very moment,""" start="00:01:55.340" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""but also I carry these""" start="00:01:59.740" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""into every course meeting.""" start="00:02:01.260" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I've done this for quite a while,""" start="00:02:05.060" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""this entire semester,""" start="00:02:07.120" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and a few previous semesters""" start="00:02:09.620" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""where everything fits in a backpack.""" start="00:02:11.440" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I do every meeting with this tablet—""" start="00:02:14.240" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""it's a Microsoft Surface that I put""" start="00:02:18.460" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""a Linux distribution on—and this laptop.""" start="00:02:20.840" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I've got a bag full of""" start="00:02:26.600" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""dongles and connectors and so forth.""" start="00:02:29.600" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""It all fits in a backpack.""" start="00:02:34.080" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""This is very mobile.""" start="00:02:35.340" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I can set it up and tear it down""" start="00:02:36.260" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""before and after every class""" start="00:02:38.180" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""with just a couple minutes.""" start="00:02:39.700" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""There's the laptop and the""" start="00:02:41.220" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""tablet with a stylus.""" start="00:02:42.740" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Where's my stylus?""" start="00:02:45.020" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""So that I can draw...""" start="00:02:46.580" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""... which is very useful.""" start="00:02:51.500" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Obviously, I need a camera.""" start="00:02:52.520" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Today, I'm using a desk mic,""" start="00:02:55.860" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""but when I'm remote,""" start="00:02:57.460" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I use a lapel mic.""" start="00:02:59.100" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and a video converter,""" start="00:03:01.740" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and I'll show you why that's important.""" start="00:03:02.900" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And then all of the ancillary equipment.""" start="00:03:04.380" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""One thing that's nice about using""" start="00:03:09.020" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""a completely free software stack is""" start="00:03:11.140" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that it tends to run""" start="00:03:14.020" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""on underpowered hardware,""" start="00:03:15.220" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and none of the software cost anything.""" start="00:03:18.320" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I could have spent much less than this""" start="00:03:20.540" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""on a used computer and""" start="00:03:23.220" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""a used tablet. And everything else,""" start="00:03:25.460" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""these are high estimates.""" start="00:03:28.200" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I spent way less than""" start="00:03:30.300" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""$1,000 for all of this equipment.""" start="00:03:31.680" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And it's my equipment,""" start="00:03:34.020" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""so I have hardware""" start="00:03:35.620" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and software control over it,""" start="00:03:37.260" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Which is nice.""" start="00:03:38.960" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""If you have an attitude of upcycling and building,""" start="00:03:41.100" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and [if] this is a hobby anyway,""" start="00:03:43.240" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""this is an easy way—""" start="00:03:45.190" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""what I'm saying is—""" start="00:03:47.130" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the entry into using these things,""" start="00:03:48.650" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""there's certainly a very low cost barrier.""" start="00:03:51.370" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Because the hardware is so weak,""" start="00:03:58.020" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I have the tablet for doing tablet stuff,""" start="00:04:01.430" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and then I use the laptop to""" start="00:04:05.250" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""do all of the streaming and recording.""" start="00:04:06.630" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I take the video output""" start="00:04:08.910" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""of the tablet and convert it to""" start="00:04:11.610" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""USB input into the laptop.""" start="00:04:13.830" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Just to give you a diagram here,""" start="00:04:19.900" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""there's a laptop and there's a tablet.""" start="00:04:21.930" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""The tablet has a stylus.""" start="00:04:23.710" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""They both run GNU/Linux distributions.""" start="00:04:25.930" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""You've got a webcam that""" start="00:04:29.450" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""goes into the laptop.""" start="00:04:30.950" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""You've got video output""" start="00:04:32.130" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""from the tablet that goes into the laptop.""" start="00:04:33.620" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""There's a microphone that""" start="00:04:37.890" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""goes into the laptop,""" start="00:04:39.350" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and then audio and video come out of""" start="00:04:40.470" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the laptop and go into""" start="00:04:43.210" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""some AV system or another.""" start="00:04:44.410" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Example setup""" start="00:04:46.610" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""Okay. This was Wednesday,""" start="00:04:46.610" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""teaching microbiology.""" start="00:04:49.070" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""There's the tablet, there's the laptop.""" start="00:04:51.070" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""There's the external screen""" start="00:04:53.230" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""in the podium here you can""" start="00:04:55.370" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""plug into the AV system.""" start="00:04:57.210" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""There it is. From where I stand,""" start="00:05:00.470" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""this is what the screen looks like.""" start="00:05:04.210" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""This is what students are seeing,""" start="00:05:06.010" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""on the live stream""" start="00:05:08.225" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and later on the recording.""" start="00:05:09.460" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And students in the room""" start="00:05:10.780" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""can see this as well.""" start="00:05:11.720" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""So you notice this is kind of meta,""" start="00:05:12.640" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""but the camera and""" start="00:05:15.100" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the contents of the screen are""" start="00:05:17.140" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""there when I wander around,""" start="00:05:18.760" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and when I stand in front of the screen,""" start="00:05:20.500" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the students who aren't in the room can""" start="00:05:22.220" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""still see what I'm pointing to on the screen.""" start="00:05:23.940" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Nobody gets left out.""" start="00:05:27.400" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Presentation software: flexibility in function""" start="00:05:30.520" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""Let's talk about""" start="00:05:30.520" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the software that I use.""" start="00:05:31.480" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""There's a lot of different things that""" start="00:05:33.900" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I want to be able to show.""" start="00:05:35.980" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And so I need a few different""" start="00:05:37.640" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""software packages— besides Emacs.""" start="00:05:39.300" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""For drawing on the tablet, I use""" start="00:05:42.400" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""(I don't know quite how this is pronounced:""" start="00:05:45.080" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I think it's) Xournal++""" start="00:05:48.360" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I use the web quite a bit,""" start="00:05:51.200" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""especially if I want to just""" start="00:05:54.040" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""spontaneously look something up.""" start="00:05:55.720" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Often I use video,""" start="00:05:57.760" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""especially molecular animations.""" start="00:05:59.680" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And that's incredibly powerful.""" start="00:06:01.500" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And then now and again, I want to look at text.""" start="00:06:04.700" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Especially in""" start="00:06:06.940" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the English course that I teach,""" start="00:06:08.060" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""there's quite a bit of text.""" start="00:06:09.800" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I'll use Emacs for that.""" start="00:06:11.840" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""The video compositor, the thing that""" start="00:06:15.000" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""puts this video and me in the green screen.""" start="00:06:18.440" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and all of this stuff together, is called""" start="00:06:22.480" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""OBS Studio—and that also does recording.""" start="00:06:25.420" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""It's ALMOST a completely free software stack.""" start="00:06:34.820" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I use Zoom to do""" start="00:06:37.510" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the streaming and video""" start="00:06:38.750" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""conferencing because all of""" start="00:06:39.930" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the students are forced to use it for""" start="00:06:41.030" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""their other classes and""" start="00:06:42.410" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I've gone along with it.""" start="00:06:44.220" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""But a good alternative is""" start="00:06:45.410" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Jitsi Meet. There are others.""" start="00:06:46.670" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Okay. Again, here's""" start="00:06:48.860" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the hardware setup. On the tablet,""" start="00:06:50.730" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I'm running Xournal++. On the laptop,""" start="00:06:53.790" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I've got Firefox and VLC, and Emacs.""" start="00:06:56.590" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""OBS is compositing that together.""" start="00:07:00.230" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And I use Zoom, but you could use Jitsi.""" start="00:07:02.890" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Live demonstration""" start="00:07:05.950" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""All right, let's""" start="00:07:05.950" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""demonstrate this live. Here we go.""" start="00:07:07.930" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Here goes, nothing. The drawing program""" start="00:07:09.690" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""is really good because I can draw""" start="00:07:13.610" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""with the stylus on a tablet.""" start="00:07:15.050" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""It's a remarkable thing—""" start="00:07:17.970" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I teach in these big lecture halls,""" start="00:07:20.090" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and I guess they want them to be fancy?""" start="00:07:22.410" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And so they don't have blackboards and""" start="00:07:24.410" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""whiteboards! If I want to be able to draw,""" start="00:07:25.970" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""if I want to do anything approaching analog,""" start="00:07:29.010" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""it has to be with this software!""" start="00:07:32.170" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""In this presentation, I""" start="00:07:35.290" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""don't have very many diagrams,""" start="00:07:37.810" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""but in my courses, most of""" start="00:07:39.490" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the slides are complicated diagrams.""" start="00:07:41.510" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Being able to annotate them""" start="00:07:44.250" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""is really important.""" start="00:07:45.810" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""This is why I don't use Emacs for""" start="00:07:47.550" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""presenting these kinds of documents,""" start="00:07:50.630" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""because I want to be able""" start="00:07:54.530" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""to mark them up visually.""" start="00:07:55.810" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I can show you what that looks like.""" start="00:07:57.450" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""OBS""" start="00:07:59.850" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""By the way, here's how OBS works:""" start="00:07:59.850" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I can go from different &quot;scenes&quot;""" start="00:08:02.830" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""So I can just do just me,""" start="00:08:04.470" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""or I can show you the slides,""" start="00:08:06.070" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""or I can show you what I see on the tablet.""" start="00:08:08.130" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""On the tablet, I can go""" start="00:08:10.790" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""through all of the— notice here,""" start="00:08:12.270" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I'm scrolling through all""" start="00:08:14.230" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""of the different slides.""" start="00:08:16.130" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I've got all kinds of different markup tools,""" start="00:08:17.350" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and tools for controlling""" start="00:08:19.990" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""zoom and what page I'm on,""" start="00:08:23.170" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""but you don't have to see that.""" start="00:08:24.830" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Firefox""" start="00:08:27.190" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""Okay. Firefox, boy, I do a lot of this.""" start="00:08:27.190" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""All of the quizzes,""" start="00:08:32.390" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""quizzes and exams in my courses""" start="00:08:36.790" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""are online on this""" start="00:08:38.460" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""web platform called Canvas,""" start="00:08:40.130" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""which is good enough.""" start="00:08:43.370" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""It's based on a GPL3 package,""" start="00:08:45.430" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""but this one is proprietary for Penn State.""" start="00:08:49.590" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Notice that there's a quiz""" start="00:08:53.070" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""every day, and this quiz,""" start="00:08:55.130" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""every quiz has a recording from""" start="00:08:57.050" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that day and you notice""" start="00:08:59.470" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""there's a picture of me teaching,""" start="00:09:00.630" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""pointing to the slides.""" start="00:09:01.890" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""There's the slides themselves.""" start="00:09:05.030" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I use OBS to composite in""" start="00:09:06.970" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the Zoom chat because I teach this hybrid.""" start="00:09:09.590" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""There's people in the room""" start="00:09:12.770" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and there's people at""" start="00:09:13.710" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""other campuses who are in this course.""" start="00:09:14.570" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Having the Zoom chat in""" start="00:09:17.630" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the live feed is very useful.""" start="00:09:19.390" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Then the quiz—""" start="00:09:22.650" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""at the next class meeting,""" start="00:09:25.730" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""we'll go through this quiz.""" start="00:09:26.670" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Here's some experimental data""" start="00:09:27.890" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and here's a question where they're""" start="00:09:30.050" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""supposed to interpret these data.""" start="00:09:31.650" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""We can in class together,""" start="00:09:36.590" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""we can review those.""" start="00:09:38.850" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""That's why Firefox is useful.""" start="00:09:41.630" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Being able to inhabit,""" start="00:09:47.970" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""being able to inhabit""" start="00:09:50.570" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""figures like this is incredibly powerful.""" start="00:09:52.830" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""This is the silver lining of being""" start="00:09:56.870" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""forced to teach online during the pandemic,""" start="00:09:59.350" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""because I couldn't do""" start="00:10:02.130" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""this before I had a green screen.""" start="00:10:03.070" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""But even more powerful than this—""" start="00:10:05.760" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""For years, I showed students""" start="00:10:09.540" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""this figure by standing in front""" start="00:10:10.820" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""of it or by having a""" start="00:10:12.340" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""projector screen above me.""" start="00:10:13.700" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And I said, &quot;This is the B form of DNA.&quot;""" start="00:10:15.240" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""&quot;This is the most common form of DNA.&quot;""" start="00:10:18.460" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""&quot;You see here that there's this minor groove.&quot;""" start="00:10:20.380" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""&quot;And then this feature""" start="00:10:22.580" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""is called the major groove.&quot;""" start="00:10:23.420" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And students couldn't see it.""" start="00:10:24.420" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Animation""" start="00:10:26.060" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""But if you animate it—""" start="00:10:26.060" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""if you just have it""" start="00:10:29.440" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""move, the apparent movement,""" start="00:10:30.280" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""It's not really movement,""" start="00:10:33.320" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""it's apparent movement.""" start="00:10:34.400" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And it tricks your visual cortex into""" start="00:10:35.380" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""adding three dimensional structure to this.""" start="00:10:37.820" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""You can see this feature is""" start="00:10:40.620" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the major groove and that feature""" start="00:10:42.580" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""is the minor groove. And a static""" start="00:10:45.340" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""image just can't provide""" start="00:10:47.220" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that understanding, while moving image can.""" start="00:10:48.320" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Emacs""" start="00:10:55.790" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""I use Emacs to look at text.""" start="00:10:55.790" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Where's Emacs? Here's Emacs! We read""" start="00:10:58.180" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Vonnegut in this English class that I""" start="00:11:02.520" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""teach and I'm going to tab over to Emacs.""" start="00:11:04.280" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""It's nice to be able""" start="00:11:07.760" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""to have text jump""" start="00:11:09.860" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""around and be dynamic, right?""" start="00:11:12.420" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""If you, if you want to look""" start="00:11:14.160" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""at this passage and I'll""" start="00:11:16.860" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""have somebody read it aloud.""" start="00:11:18.040" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And then we talk about why he chose""" start="00:11:19.260" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""this word and why he chose that word,""" start="00:11:20.820" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and the cadence, and the alliteration.""" start="00:11:22.500" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Then we can go to another particular excerpt""" start="00:11:25.180" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and pick that apart on the screen together.""" start="00:11:30.840" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""That would be difficult to do with""" start="00:11:33.440" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""other software that would be very tedious""" start="00:11:34.900" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""to do on the chalkboard.""" start="00:11:36.820" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""So Emacs is really good for that sort of thing.""" start="00:11:39.400" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Making slides and handouts with Org Mode""" start="00:11:42.260" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""Mostly what I use Emacs for is not to""" start="00:11:42.260" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""present but to make slides and handouts.""" start="00:11:45.380" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Okay. Again, the thing that I want to""" start="00:11:50.340" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""stress is that the slides""" start="00:11:52.360" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and the handouts can be produced from""" start="00:11:54.220" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""a single Org mode document.""" start="00:11:56.740" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""This entire presentation""" start="00:12:01.180" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""was assembled in Emacs.""" start="00:12:04.060" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I'll show you how I did that.""" start="00:12:05.700" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I think everybody""" start="00:12:08.420" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""probably knows what Org mode is.""" start="00:12:11.620" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""But for our purposes, it's a way""" start="00:12:13.160" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""to write documents in plain text.""" start="00:12:14.640" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""That's very important because one of""" start="00:12:16.120" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the biggest advantages of this is""" start="00:12:19.840" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""being able to do version control.""" start="00:12:22.020" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I don't have Powerpoint decks""" start="00:12:24.740" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""everywhere with slides that""" start="00:12:27.780" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""there's no way to keep track of them.""" start="00:12:29.360" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Having these be plain text""" start="00:12:31.240" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""means that I can just put them in""" start="00:12:32.460" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""a git repository.""" start="00:12:33.580" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Very clean and human readable markup""" start="00:12:36.140" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""including handling tables""" start="00:12:37.900" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""which is just incredibly powerful.""" start="00:12:41.160" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""You can manage projects and tasks.""" start="00:12:43.340" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""But the fact that it's an outline""" start="00:12:45.460" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that you can produce a document that's""" start="00:12:47.300" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""hierarchical and fold and""" start="00:12:48.980" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""reveal different parts of it.""" start="00:12:51.280" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""But to produce a book length lectures for""" start="00:12:52.980" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""an entire semester and use""" start="00:12:57.120" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""those to produce both slides and handouts,""" start="00:12:58.920" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that's very powerful,""" start="00:13:01.400" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""at least for my brain. To be able to""" start="00:13:03.180" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""put it all together and have it be""" start="00:13:05.000" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""discursive rather""" start="00:13:06.780" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""than having to be graphical.""" start="00:13:08.400" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""You can export to""" start="00:13:09.920" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""a million different formats including""" start="00:13:11.880" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""PDF documents like the handouts as""" start="00:13:15.060" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""LaTeX, and slides like these through Beamer export.""" start="00:13:17.000" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Pedagogy first""" start="00:13:22.680" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""The approach is to think""" start="00:13:22.680" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""about pedagogy rather than thinking""" start="00:13:24.920" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""about software or thinking""" start="00:13:26.900" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""about graphic design.""" start="00:13:28.280" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""To think about how can""" start="00:13:31.000" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I make the best argument?""" start="00:13:32.600" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""How can I make the best,""" start="00:13:34.380" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the most effective sequence of ideas?""" start="00:13:35.980" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""All I've done is make a few tweaks to""" start="00:13:40.880" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the export backends for LaTeX and""" start="00:13:45.000" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Beamer to customize them""" start="00:13:47.980" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""for my particular needs.""" start="00:13:49.980" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And I'll show you what I've done.""" start="00:13:51.500" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""You've seen this already. I'll put""" start="00:13:54.600" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""one idea in big text on the screen.""" start="00:13:58.060" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I find it to be effective to""" start="00:14:00.900" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""make a single idea explicit at one time.""" start="00:14:04.620" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Now, some concepts can""" start="00:14:09.120" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""be explained with words or text,""" start="00:14:12.260" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""but many ideas are best just illustrated.""" start="00:14:14.800" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""In contrast, we've""" start="00:14:20.260" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""all used Powerpoint, right?""" start="00:14:22.540" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And Edward Tufte has taught us""" start="00:14:23.980" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""about how Powerpoint is so""" start="00:14:25.700" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""terrible from a cognitive point of""" start="00:14:27.480" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""view and from a communications point of view.""" start="00:14:29.240" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""So using Org mode is much better.""" start="00:14:31.800" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""How is it better?""" start="00:14:35.400" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Well, Tufte also tells us that""" start="00:14:36.760" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""any oral presentation that is substantive at all""" start="00:14:42.040" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""has to have some physical handout""" start="00:14:49.050" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that the audience can use to take notes on.""" start="00:14:52.630" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Slides are terrible handouts.""" start="00:14:55.710" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And notes are usually terrible slides.""" start="00:14:59.030" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Having one document where you""" start="00:15:02.130" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""can produce both and have them be,""" start="00:15:03.690" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""have the same organization,""" start="00:15:05.850" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""but different structures and""" start="00:15:08.410" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""different visual organization is""" start="00:15:10.350" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""something that I wanted""" start="00:15:14.750" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""for a long time and I can only do it""" start="00:15:16.610" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""with Emacs.""" start="00:15:18.630" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Being able""" start="00:15:20.020" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""also for my brain to""" start="00:15:21.410" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""separate the work of writing and developing""" start="00:15:22.730" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""ideas and developing explanations""" start="00:15:25.310" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and developing arguments""" start="00:15:28.470" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and scaffolding them.""" start="00:15:30.050" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""That's jargon in pedagogy""" start="00:15:31.430" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""for bringing the student along.""" start="00:15:33.690" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Separate that work from wrangling slides.""" start="00:15:36.890" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""That's super helpful for me.""" start="00:15:41.350" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Again, you have""" start="00:15:44.530" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""an Org document that makes""" start="00:15:46.710" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""both the handouts and the slides.""" start="00:15:48.230" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""What's beautiful about it is""" start="00:15:51.370" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that everything is an outline.""" start="00:15:53.450" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And again, it's very discursive.""" start="00:15:54.650" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Here's Tufte's famous poster where he's making""" start="00:15:56.430" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""fun of the psychology of Powerpoint.""" start="00:15:59.110" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I don't know about you, but I have the kind of brain""" start="00:16:02.010" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and I'm in the kind of job""" start="00:16:05.750" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and I'm at the age where I don't have extra""" start="00:16:07.610" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""cognitive function! You know?""" start="00:16:09.910" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""So streamlining this workflow""" start="00:16:12.050" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""has been really helpful.""" start="00:16:15.730" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""org-teach""" start="00:16:17.790" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""All right, so let me show""" start="00:16:17.790" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""you what I've developed.""" start="00:16:19.310" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Let's look at the Org doc.""" start="00:16:21.650" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Okay. So what you see is you have""" start="00:16:24.490" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""a typical Org mode buffer.""" start="00:16:25.830" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""There's two headings here.""" start="00:16:30.770" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""One of them is stuff that I've deleted and""" start="00:16:32.850" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the other is the talk.""" start="00:16:35.530" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And so all of these subheadings have""" start="00:16:39.270" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""various things underneath including""" start="00:16:43.110" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""these macros that I wrote like `include-slide`,""" start="00:16:46.390" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""`impact-slide`, `subsection-slide`,""" start="00:16:48.970" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""et cetera, and then a bunch of stuff.""" start="00:16:51.230" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Then I've got this include""" start="00:16:54.950" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""file that just has""" start="00:16:59.310" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the macros that I've written.""" start="00:17:01.630" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""You can look at this on the repo.""" start="00:17:03.290" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I'm not going to take""" start="00:17:05.450" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the time to walk through it and""" start="00:17:06.290" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""explain what all the LaTeX means.""" start="00:17:07.570" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""But the upshot is""" start="00:17:10.370" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that by including that file""" start="00:17:16.510" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that has all the macro definitions,""" start="00:17:20.550" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""you get things like this macro pause""" start="00:17:22.430" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""or newline or whitespace-break,""" start="00:17:25.650" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""which just allow—""" start="00:17:27.690" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""pause splits a slide into two frames,""" start="00:17:30.810" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""so you can get these overlays,""" start="00:17:33.010" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""so you can go through paragraphs one by one.""" start="00:17:34.570" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""These just put""" start="00:17:36.310" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""white space in.""" start="00:17:38.630" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Text-slides: This thing here, this title""" start="00:17:44.650" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""is level three heading.""" start="00:17:47.110" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Figure-slides:""" start="00:17:49.170" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the same thing are level three headings.""" start="00:17:50.190" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""One of the most powerful things""" start="00:17:52.050" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""is that I can take other files,""" start="00:17:54.010" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I can take other Org files that have level""" start="00:17:56.230" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""three headings that are slides and those can""" start="00:18:00.150" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""be in some other repository.""" start="00:18:02.790" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I only need to have one version of""" start="00:18:06.210" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that slide that I""" start="00:18:08.510" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""can use in multiple courses.""" start="00:18:09.910" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Just that functionality is""" start="00:18:13.230" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""incredibly helpful for keeping""" start="00:18:17.110" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""track of work from a few years ago.""" start="00:18:19.910" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""All of these I'm going to""" start="00:18:22.810" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""explain in the next few slides.""" start="00:18:24.270" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""The section slides""" start="00:18:25.930" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""correspond to course modules.""" start="00:18:27.710" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Each of these is going to""" start="00:18:29.910" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""be a few weeks of a course.""" start="00:18:31.130" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""This is a major division of a course.""" start="00:18:32.550" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I have some macros so that I can decorate""" start="00:18:34.630" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""this with relevant information.""" start="00:18:36.910" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Then for every subsection,""" start="00:18:41.390" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""level two headline, that""" start="00:18:43.470" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""corresponds to a major""" start="00:18:45.570" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""course topic in the module.""" start="00:18:46.730" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Then text slides, again,""" start="00:18:48.590" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""level three headlines become""" start="00:18:50.210" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""titles for the slide,""" start="00:18:52.850" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and level four headlines become text elements.""" start="00:18:53.970" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Most of my slides look like this.""" start="00:18:58.900" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""They're figures.""" start="00:19:01.680" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Here's the glycolytic pathway.""" start="00:19:03.140" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Level three gives you the title.""" start="00:19:06.020" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""It's missing here actually,""" start="00:19:11.420" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""but there's a way you can put in captions.""" start="00:19:14.280" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""This line here just tells""" start="00:19:16.720" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the LaTeX export backend""" start="00:19:18.960" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""how big you want it and stuff like that.""" start="00:19:21.040" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Impact slides, they have to go under H1 or H2.""" start="00:19:24.220" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And they just give you one of these text slides.""" start="00:19:29.140" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""For an entire slide being an image,""" start="00:19:32.450" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""you can use this image-slide macro.""" start="00:19:35.650" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Blank slides""" start="00:19:38.330" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""I often put in blank slides to""" start="00:19:38.330" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""remind myself that this is a time to stop.""" start="00:19:41.130" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Often there's something for me to""" start="00:19:43.270" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""draw here with the stylus.""" start="00:19:44.790" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Animations""" start="00:19:50.050" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""I often use— it used to be Powerpoint,""" start="00:19:50.050" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""now I use LibreOffice Impress—to make""" start="00:19:53.150" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""multi slide animations like""" start="00:19:56.070" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the sphere and the donut and the GI tract.""" start="00:19:58.310" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""And this hardware thing""" start="00:20:01.310" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that I did for you today,""" start="00:20:03.250" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I export those animations as PDFs.""" start="00:20:05.270" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Then I can just slurp them up into the slides.""" start="00:20:07.950" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Just into the slides, not into""" start="00:20:14.470" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""the handouts with this macro.""" start="00:20:16.670" video="mainVideo-uni" id="subtitle"]]
+
+[[!template new="1" text="""Conclusion""" start="00:20:19.270" video="mainVideo-uni" id="subtitle"]]
+
+[[!template text="""I hope that you find this useful.""" start="00:20:19.270" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I hope you share it with""" start="00:20:21.490" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""other educators that you know.""" start="00:20:22.450" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Here is the sourcehut repo,""" start="00:20:24.090" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""here's how to get in touch with me.""" start="00:20:27.150" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I look forward to addressing your questions.""" start="00:20:29.070" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""I want to say thank you""" start="00:20:32.690" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""to Sacha [Chua] and the organizers,""" start="00:20:34.990" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and to everyone who made this possible and""" start="00:20:36.610" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""to all of you in the community.""" start="00:20:38.450" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Because as we all know,""" start="00:20:40.690" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""that that's what makes Emacs such a strong""" start="00:20:42.770" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""and powerful package is""" start="00:20:47.430" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""all of the people behind it.""" start="00:20:50.090" video="mainVideo-uni" id="subtitle"]]
+[[!template text="""Thanks everybody.""" start="00:20:51.330" video="mainVideo-uni" id="subtitle"]]
+
+<a name="uni-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: You can hear us. Can you perhaps do it for""" start="00:00:00.000" video="qanda-uni" id="subtitle"]]
+[[!template text="""me? Great. The little angels in the""" start="00:00:01.839" video="qanda-uni" id="subtitle"]]
+[[!template text="""background have done it for me.""" start="00:00:03.740" video="qanda-uni" id="subtitle"]]
+[[!template text="""So now finally that everything is ready.""" start="00:00:05.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""Hi James, how are you doing?""" start="00:00:07.759" video="qanda-uni" id="subtitle"]]
+[[!template text="""Good morning. Hello. Well,""" start="00:00:13.780" video="qanda-uni" id="subtitle"]]
+[[!template text="""thank you for your talk and sorry for the""" start="00:00:14.599" video="qanda-uni" id="subtitle"]]
+[[!template text="""little hiccup at the middle we had to pull""" start="00:00:16.320" video="qanda-uni" id="subtitle"]]
+[[!template text="""out a fire with the audio going out in the""" start="00:00:19.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""middle and sorry about this.""" start="00:00:20.900" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: It's no trouble.""" start="00:00:23.140" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: So James, you've obviously told us about your""" start="00:00:25.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""very fancy setup with the green screen and""" start="00:00:28.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""I'm sad to see that you haven't put out the""" start="00:00:30.220" video="qanda-uni" id="subtitle"]]
+[[!template text="""green screen for your BBB session right now.""" start="00:00:32.840" video="qanda-uni" id="subtitle"]]
+[[!template text="""Do you have it in the background just for""" start="00:00:35.579" video="qanda-uni" id="subtitle"]]
+[[!template text="""you? Right, okay, it wasn't that far.""" start="00:00:37.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""Great. So I'm just going to ask,""" start="00:00:40.600" video="qanda-uni" id="subtitle"]]
+[[!template text="""so this is the first live Q&A that we have""" start="00:00:44.180" video="qanda-uni" id="subtitle"]]
+[[!template text="""for the session so things might be coming""" start="00:00:47.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""into place so pardon us if we take a little""" start="00:00:49.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""bit of time to put the questions on the""" start="00:00:51.600" video="qanda-uni" id="subtitle"]]
+[[!template text="""screen and all of this.""" start="00:00:54.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""What I'm going to do, I'm just going to load""" start="00:00:56.400" video="qanda-uni" id="subtitle"]]
+[[!template text="""up the pad. I would invite James to also open""" start="00:00:57.940" video="qanda-uni" id="subtitle"]]
+[[!template text="""the pad on his hand. So yeah,""" start="00:01:02.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""I've got people talking in my ears and it's""" start="00:01:04.200" video="qanda-uni" id="subtitle"]]
+[[!template text="""been a while since I've last had this.""" start="00:01:05.740" video="qanda-uni" id="subtitle"]]
+[[!template text="""And okay, so opening the talks right now,""" start="00:01:08.260" video="qanda-uni" id="subtitle"]]
+[[!template text="""opening the pad if I can find it.""" start="00:01:12.100" video="qanda-uni" id="subtitle"]]
+[[!template text="""Open up the pad. Okay.""" start="00:01:14.120" video="qanda-uni" id="subtitle"]]
+[[!template text="""So have you got a pad open on your end,""" start="00:01:19.200" video="qanda-uni" id="subtitle"]]
+[[!template text="""James? So I can read the question.""" start="00:01:21.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""So, okay, great. Opening it on my end as""" start="00:01:23.119" video="qanda-uni" id="subtitle"]]
+[[!template text="""well. What I'm going to do,""" start="00:01:26.740" video="qanda-uni" id="subtitle"]]
+[[!template text="""folks, I see some of you have joined us.""" start="00:01:28.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""I'm going to start doing is first taking""" start="00:01:39.900" video="qanda-uni" id="subtitle"]]
+[[!template text="""questions in the other part because it's a""" start="00:01:42.500" video="qanda-uni" id="subtitle"]]
+[[!template text="""little faster to ask questions like this.""" start="00:01:44.220" video="qanda-uni" id="subtitle"]]
+[[!template text="""And then as soon as we've finished,""" start="00:01:46.520" video="qanda-uni" id="subtitle"]]
+[[!template text="""feel free to unmute yourself and ask your""" start="00:01:48.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""questions. All right so I've got some""" start="00:01:49.920" video="qanda-uni" id="subtitle"]]
+[[!template text="""reactions about OBS being cool and yes both""" start="00:01:54.180" video="qanda-uni" id="subtitle"]]
+[[!template text="""James and I will be able to tell you that""" start="00:01:57.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""it's very cool we do very fancy stuff like""" start="00:01:59.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""when I need to talk to production in the""" start="00:02:04.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""background and all the stuff obviously that""" start="00:02:05.640" video="qanda-uni" id="subtitle"]]
+[[!template text="""James has been able to show you with a green""" start="00:02:07.540" video="qanda-uni" id="subtitle"]]
+[[!template text="""screen. So I don't see a whole lot of""" start="00:02:09.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""questions so far. I see a lot of reactions on""" start="00:02:12.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""publishing lectures book and of a classic""" start="00:02:16.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""example is John Kitchens obviously.""" start="00:02:17.760" video="qanda-uni" id="subtitle"]]
+[[!template text="""Pedagogy first developments.""" start="00:02:20.900" video="qanda-uni" id="subtitle"]]
+[[!template text="""Macros are a cool idea.""" start="00:02:23.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""Okay questions. So how do you overlap""" start="00:02:25.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""yourself with a presentation.""" start="00:02:28.820" video="qanda-uni" id="subtitle"]]
+[[!template text="""It's so cool. It's quite simple.""" start="00:02:30.420" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: OBS provides filters for every...""" start="00:02:36.420" video="qanda-uni" id="subtitle"]]
+[[!template text="""You can have a separate filter for each video""" start="00:02:40.200" video="qanda-uni" id="subtitle"]]
+[[!template text="""feed and 1 of the filters that's available is""" start="00:02:42.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""chroma key. You just choose a color to make""" start="00:02:44.960" video="qanda-uni" id="subtitle"]]
+[[!template text="""transparent and just make sure that the""" start="00:02:47.840" video="qanda-uni" id="subtitle"]]
+[[!template text="""webcam is at the top of the composition.""" start="00:02:52.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""And the thing that surprised me the most was""" start="00:02:57.180" video="qanda-uni" id="subtitle"]]
+[[!template text="""how quickly my brain was able to mirror""" start="00:03:00.900" video="qanda-uni" id="subtitle"]]
+[[!template text="""everything and control my body from a""" start="00:03:05.420" video="qanda-uni" id="subtitle"]]
+[[!template text="""separate point of view like the way weather""" start="00:03:07.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""broadcasts are done. It took seconds to be""" start="00:03:10.720" video="qanda-uni" id="subtitle"]]
+[[!template text="""able to do that. Well,""" start="00:03:15.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""and now I have years of practice because that""" start="00:03:16.980" video="qanda-uni" id="subtitle"]]
+[[!template text="""set up that you saw that I used to record""" start="00:03:20.320" video="qanda-uni" id="subtitle"]]
+[[!template text="""this video. I used for years during the""" start="00:03:22.740" video="qanda-uni" id="subtitle"]]
+[[!template text="""pandemic for 4 or 5 semesters to because my""" start="00:03:26.960" video="qanda-uni" id="subtitle"]]
+[[!template text="""courses are all have 2,""" start="00:03:32.180" video="qanda-uni" id="subtitle"]]
+[[!template text="""3, 400 students, except for the English""" start="00:03:33.760" video="qanda-uni" id="subtitle"]]
+[[!template text="""class, which has, you know,""" start="00:03:36.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""30 students. And so during the pandemic,""" start="00:03:38.200" video="qanda-uni" id="subtitle"]]
+[[!template text="""and even after lockdowns were no longer""" start="00:03:41.200" video="qanda-uni" id="subtitle"]]
+[[!template text="""mandated, I taught online just because I""" start="00:03:44.040" video="qanda-uni" id="subtitle"]]
+[[!template text="""didn't want to have so many students in the""" start="00:03:46.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""room at the same time.""" start="00:03:48.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""So I've yeah, I'm it. I have a lot of""" start="00:03:49.600" video="qanda-uni" id="subtitle"]]
+[[!template text="""practice doing that.""" start="00:03:53.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: But it pays off because it looks so natural,""" start="00:03:56.120" video="qanda-uni" id="subtitle"]]
+[[!template text="""you know, it feels like it's the same thing""" start="00:03:58.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""with weathercasters, you know,""" start="00:04:00.140" video="qanda-uni" id="subtitle"]]
+[[!template text="""it sounds very it looks very easy to do,""" start="00:04:01.520" video="qanda-uni" id="subtitle"]]
+[[!template text="""but it also takes quite a bit of practice.""" start="00:04:03.940" video="qanda-uni" id="subtitle"]]
+[[!template text="""1 of the things that you also need to""" start="00:04:07.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""remember if you're using a chroma key that""" start="00:04:08.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""James has explained is that you need to have""" start="00:04:10.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""very good lighting, basically for the color""" start="00:04:11.880" video="qanda-uni" id="subtitle"]]
+[[!template text="""to pop out in the background and for your""" start="00:04:14.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""body to be easily highlightable.""" start="00:04:16.320" video="qanda-uni" id="subtitle"]]
+[[!template text="""Okay, were you finished with this question?""" start="00:04:19.399" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, let's take another 1.""" start="00:04:23.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: Sure. So how do you deal with video in Beam?""" start="00:04:25.640" video="qanda-uni" id="subtitle"]]
+[[!template text="""I found it so hard to do that.""" start="00:04:28.700" video="qanda-uni" id="subtitle"]]
+[[!template text="""PPT on the other end is easier to achieve.""" start="00:04:30.720" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, so remember that the slides get""" start="00:04:36.380" video="qanda-uni" id="subtitle"]]
+[[!template text="""produced from Org Mode as PDFs.""" start="00:04:41.480" video="qanda-uni" id="subtitle"]]
+[[!template text="""Well, and in fact, I even before when I was""" start="00:04:47.540" video="qanda-uni" id="subtitle"]]
+[[!template text="""using other software to produce slides,""" start="00:04:50.080" video="qanda-uni" id="subtitle"]]
+[[!template text="""I produced them as PDFs,""" start="00:04:52.580" video="qanda-uni" id="subtitle"]]
+[[!template text="""precisely because I wanted to be able to mark""" start="00:04:54.720" video="qanda-uni" id="subtitle"]]
+[[!template text="""them up on on the screen with the stylus.""" start="00:04:56.840" video="qanda-uni" id="subtitle"]]
+[[!template text="""And so I don't do video in the slides.""" start="00:05:02.100" video="qanda-uni" id="subtitle"]]
+[[!template text="""I use OBS to switch from static slides that I""" start="00:05:06.140" video="qanda-uni" id="subtitle"]]
+[[!template text="""mark up with the stylus over to some kind of""" start="00:05:09.140" video="qanda-uni" id="subtitle"]]
+[[!template text="""video viewer and then back.""" start="00:05:12.840" video="qanda-uni" id="subtitle"]]
+[[!template text="""And again, that's how I can use Firefox.""" start="00:05:15.620" video="qanda-uni" id="subtitle"]]
+[[!template text="""I use OBS to switch between Firefox and video""" start="00:05:17.900" video="qanda-uni" id="subtitle"]]
+[[!template text="""and the Shornell plus plus program where I""" start="00:05:22.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""can mark up slides. So those functionalities""" start="00:05:26.380" video="qanda-uni" id="subtitle"]]
+[[!template text="""are that's why I use different software and""" start="00:05:31.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""pull it all together with OBS so that I can""" start="00:05:35.140" video="qanda-uni" id="subtitle"]]
+[[!template text="""have lots of functional flexibility.""" start="00:05:37.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: Great. Do you ever use things like""" start="00:05:44.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""org-present and stay for the PowerPoint""" start="00:05:47.700" video="qanda-uni" id="subtitle"]]
+[[!template text="""slides? I'm not sure exactly how to read this""" start="00:05:51.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""particular question but at least we can focus""" start="00:05:53.200" video="qanda-uni" id="subtitle"]]
+[[!template text="""on org-present. Are you familiar with what it""" start="00:05:54.860" video="qanda-uni" id="subtitle"]]
+[[!template text="""is?""" start="00:05:56.840" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: I have played around with org-present and""" start="00:05:58.080" video="qanda-uni" id="subtitle"]]
+[[!template text="""again I guess you could use org-present to""" start="00:06:02.380" video="qanda-uni" id="subtitle"]]
+[[!template text="""show images and to show headings as slides.""" start="00:06:07.640" video="qanda-uni" id="subtitle"]]
+[[!template text="""But again, because I'm it's such a crucial""" start="00:06:13.140" video="qanda-uni" id="subtitle"]]
+[[!template text="""functionality to be able to mark them up with""" start="00:06:18.100" video="qanda-uni" id="subtitle"]]
+[[!template text="""stylus. I didn't really show this very much,""" start="00:06:22.120" video="qanda-uni" id="subtitle"]]
+[[!template text="""but I also highlight things the way I would""" start="00:06:25.760" video="qanda-uni" id="subtitle"]]
+[[!template text="""highlight using a laser pointer on the""" start="00:06:27.780" video="qanda-uni" id="subtitle"]]
+[[!template text="""screen. And again, I don't see Emacs being""" start="00:06:30.080" video="qanda-uni" id="subtitle"]]
+[[!template text="""able to do that for another couple of""" start="00:06:36.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""generations. So really the only thing I use""" start="00:06:38.560" video="qanda-uni" id="subtitle"]]
+[[!template text="""Emacs for during presentations is to narrow""" start="00:06:42.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""headings that we can focus on particular text""" start="00:06:48.940" video="qanda-uni" id="subtitle"]]
+[[!template text="""excerpts.""" start="00:06:52.600" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. Yeah. A lot of our presentation at""" start="00:06:55.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""EmacsConf are usually,""" start="00:06:59.200" video="qanda-uni" id="subtitle"]]
+[[!template text="""especially the Org Mode ones are done with""" start="00:07:00.420" video="qanda-uni" id="subtitle"]]
+[[!template text="""OrgPresent. And. Sorry,""" start="00:07:02.260" video="qanda-uni" id="subtitle"]]
+[[!template text="""I had again someone talk to me in a year.""" start="00:07:06.740" video="qanda-uni" id="subtitle"]]
+[[!template text="""You know, the problem with EmacsConf is that""" start="00:07:09.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""every year, you know, you have to relearn a""" start="00:07:11.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""lot of skills. And by the time we finished by""" start="00:07:13.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""Sunday evening we are masters of it and then""" start="00:07:16.780" video="qanda-uni" id="subtitle"]]
+[[!template text="""we forget everything by the time the next""" start="00:07:19.900" video="qanda-uni" id="subtitle"]]
+[[!template text="""year comes around. What I was going to say is""" start="00:07:21.820" video="qanda-uni" id="subtitle"]]
+[[!template text="""that org-present is often used by people""" start="00:07:24.280" video="qanda-uni" id="subtitle"]]
+[[!template text="""inside Emacs conf presenting about org-mode""" start="00:07:27.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""but yeah whenever you need to do something a""" start="00:07:31.100" video="qanda-uni" id="subtitle"]]
+[[!template text="""little more visual, it gets a little more""" start="00:07:32.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""complicated. Some people have tried to do""" start="00:07:34.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""fancy stuff with SVG, which is probably the""" start="00:07:36.540" video="qanda-uni" id="subtitle"]]
+[[!template text="""path forward for this type of stuff.""" start="00:07:39.200" video="qanda-uni" id="subtitle"]]
+[[!template text="""But yeah, if you need to draw,""" start="00:07:41.400" video="qanda-uni" id="subtitle"]]
+[[!template text="""if you need to highlight,""" start="00:07:43.380" video="qanda-uni" id="subtitle"]]
+[[!template text="""it is pretty complicated.""" start="00:07:44.760" video="qanda-uni" id="subtitle"]]
+[[!template text="""Perhaps something that you might want to be""" start="00:07:46.820" video="qanda-uni" id="subtitle"]]
+[[!template text="""interested, James, in checking out is PDF""" start="00:07:48.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""tools, which is a way to open up a PDF in""" start="00:07:50.940" video="qanda-uni" id="subtitle"]]
+[[!template text="""Emacs. And this allows you to have basic PDF""" start="00:07:56.040" video="qanda-uni" id="subtitle"]]
+[[!template text="""annotations, like putting a little bit of a""" start="00:07:59.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""Nikon on it. Perhaps you've already played""" start="00:08:01.560" video="qanda-uni" id="subtitle"]]
+[[!template text="""with it.""" start="00:08:04.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: I have used that. PDF tools is an incredible""" start="00:08:06.260" video="qanda-uni" id="subtitle"]]
+[[!template text="""package but until it allows me to make a mark""" start="00:08:10.080" video="qanda-uni" id="subtitle"]]
+[[!template text="""on the screen that shows up in a video""" start="00:08:14.560" video="qanda-uni" id="subtitle"]]
+[[!template text="""compositor. It's not going to replace""" start="00:08:18.280" video="qanda-uni" id="subtitle"]]
+[[!template text="""Shortenel.""" start="00:08:21.420" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: Definitely. All right.""" start="00:08:23.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""Moving on to the next question.""" start="00:08:24.600" video="qanda-uni" id="subtitle"]]
+[[!template text="""Is the triple-accolade syntax an Org Mode""" start="00:08:26.400" video="qanda-uni" id="subtitle"]]
+[[!template text="""core feature that I missed so far or did you""" start="00:08:28.900" video="qanda-uni" id="subtitle"]]
+[[!template text="""program that and thank you for the great""" start="00:08:31.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""talk.""" start="00:08:33.120" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thank you very much. No,""" start="00:08:36.659" video="qanda-uni" id="subtitle"]]
+[[!template text="""it's just part of all of the export backends.""" start="00:08:38.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""Actually, I think the way it works is it""" start="00:08:43.299" video="qanda-uni" id="subtitle"]]
+[[!template text="""precedes all of the export backends.""" start="00:08:45.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""When you export, the first thing that happens""" start="00:08:47.040" video="qanda-uni" id="subtitle"]]
+[[!template text="""is expansion of macros.""" start="00:08:50.280" video="qanda-uni" id="subtitle"]]
+[[!template text="""And that's a built-in org mode feature.""" start="00:08:52.720" video="qanda-uni" id="subtitle"]]
+[[!template text="""It's definitely beyond my Emacs Lisp powers""" start="00:08:56.640" video="qanda-uni" id="subtitle"]]
+[[!template text="""to be able to have made something that""" start="00:08:59.690" video="qanda-uni" id="subtitle"]]
+[[!template text="""powerful. That's right.""" start="00:09:01.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""I have come a long way.""" start="00:09:07.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: For now. You know, we always,""" start="00:09:02.640" video="qanda-uni" id="subtitle"]]
+[[!template text="""you know, most of the people who show up to""" start="00:09:11.720" video="qanda-uni" id="subtitle"]]
+[[!template text="""Max Conf. Especially talking about stuff that""" start="00:09:13.380" video="qanda-uni" id="subtitle"]]
+[[!template text="""has to do with presentations or what they do""" start="00:09:15.480" video="qanda-uni" id="subtitle"]]
+[[!template text="""in academia. You know,""" start="00:09:18.260" video="qanda-uni" id="subtitle"]]
+[[!template text="""they always say, oh, but,""" start="00:09:19.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""you know, I couldn't have done all this,""" start="00:09:20.600" video="qanda-uni" id="subtitle"]]
+[[!template text="""you know, it's just far away.""" start="00:09:22.589" video="qanda-uni" id="subtitle"]]
+[[!template text="""And then they come back 1 year or 2 years""" start="00:09:24.260" video="qanda-uni" id="subtitle"]]
+[[!template text="""later and then, oh, I've made my entire""" start="00:09:26.320" video="qanda-uni" id="subtitle"]]
+[[!template text="""library for presentation and stuff like this.""" start="00:09:27.980" video="qanda-uni" id="subtitle"]]
+[[!template text="""So Be hopeful about what the future holds for""" start="00:09:29.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""you in terms of coming up with crazy new""" start="00:09:32.980" video="qanda-uni" id="subtitle"]]
+[[!template text="""features for the entire ecosystem.""" start="00:09:34.960" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, let me tell you,""" start="00:09:37.740" video="qanda-uni" id="subtitle"]]
+[[!template text="""since the pandemic, I have written,""" start="00:09:39.560" video="qanda-uni" id="subtitle"]]
+[[!template text="""I wrote my first major mode.""" start="00:09:42.980" video="qanda-uni" id="subtitle"]]
+[[!template text="""It's trivial, but it provides functionality""" start="00:09:44.760" video="qanda-uni" id="subtitle"]]
+[[!template text="""that is very useful to me and it's it's going""" start="00:09:47.220" video="qanda-uni" id="subtitle"]]
+[[!template text="""to sound like I'm just trying to butter""" start="00:09:52.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""everyone up but seeing a lot of the names in""" start="00:09:54.380" video="qanda-uni" id="subtitle"]]
+[[!template text="""the IRC channel people who have taught me so""" start="00:09:57.260" video="qanda-uni" id="subtitle"]]
+[[!template text="""much on their YouTube channels and in their""" start="00:10:00.820" video="qanda-uni" id="subtitle"]]
+[[!template text="""blog posts and on Reddit and on Mastodon.""" start="00:10:05.220" video="qanda-uni" id="subtitle"]]
+[[!template text="""Without many of the people who are here today""" start="00:10:09.600" video="qanda-uni" id="subtitle"]]
+[[!template text="""watching my talk, it's very fun to have""" start="00:10:12.620" video="qanda-uni" id="subtitle"]]
+[[!template text="""people who have helped me learn so much about""" start="00:10:15.820" video="qanda-uni" id="subtitle"]]
+[[!template text="""Emacs. So thanks to all of you.""" start="00:10:18.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well, and yeah, and now you're becoming part""" start="00:10:21.580" video="qanda-uni" id="subtitle"]]
+[[!template text="""of this crew of people inspiring others to do""" start="00:10:24.140" video="qanda-uni" id="subtitle"]]
+[[!template text="""very much the same. So thank you for joining""" start="00:10:27.380" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thank you very much.""" start="00:10:31.460" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: the crew. Great. Moving on to the 2 last""" start="00:10:29.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""questions and then we'll open up the mic to""" start="00:10:35.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""other people on Big Blue Button.""" start="00:10:36.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""What kind of comparative feedback are""" start="00:10:39.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""students giving you regarding your approach?""" start="00:10:40.900" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, my gosh. Students were ready to during""" start="00:10:44.960" video="qanda-uni" id="subtitle"]]
+[[!template text="""the pandemic especially when most of the""" start="00:10:48.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""courses were just being taught over zoom by""" start="00:10:53.040" video="qanda-uni" id="subtitle"]]
+[[!template text="""people sharing their screen.""" start="00:10:55.880" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: Just a second. Sorry. Sorry for the""" start="00:10:57.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""interruption. Very rude interruption.""" start="00:10:58.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""We've got the intro for the next talk playing""" start="00:10:59.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""and I'm not sure what's going on.""" start="00:11:01.220" video="qanda-uni" id="subtitle"]]
+[[!template text="""Give me just a second.""" start="00:11:02.520" video="qanda-uni" id="subtitle"]]
+[[!template text="""Sasha.""" start="00:11:04.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay.""" start="00:11:05.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""Yeah, I think it's started.""" start="00:11:19.320" video="qanda-uni" id="subtitle"]]
+[[!template text="""Okay so yeah I think it's not a""" start="00:11:26.716" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: sure 1 I got the times wrong apparently""" start="00:11:34.860" video="qanda-uni" id="subtitle"]]
+[[!template text="""because of the little delay we had getting""" start="00:11:37.760" video="qanda-uni" id="subtitle"]]
+[[!template text="""the audio fixed up. The good news is that""" start="00:11:40.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""we're still recording the talk right now and""" start="00:11:43.740" video="qanda-uni" id="subtitle"]]
+[[!template text="""we still have James around.""" start="00:11:45.880" video="qanda-uni" id="subtitle"]]
+[[!template text="""Obviously James you're no longer on being""" start="00:11:47.180" video="qanda-uni" id="subtitle"]]
+[[!template text="""broadcast on General but if you want to keep""" start="00:11:49.740" video="qanda-uni" id="subtitle"]]
+[[!template text="""answering questions or if you want to anyone""" start="00:11:53.040" video="qanda-uni" id="subtitle"]]
+[[!template text="""in the room right now wants to ask you""" start="00:11:55.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""questions feel free to do so.""" start="00:11:57.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""I'm going to need to hop off because I need""" start="00:11:59.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""to get other things ready for the next talks""" start="00:12:01.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: But James, thank you so much.""" start="00:12:04.280" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 0]: sadly. Right and so sorry I'm a little tense""" start="00:12:03.080" video="qanda-uni" id="subtitle"]]
+[[!template text="""obviously because I was not expecting this to""" start="00:12:10.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""happen and that led to a very abrupt end to""" start="00:12:12.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""this discussion but people afterwards on""" start="00:12:15.960" video="qanda-uni" id="subtitle"]]
+[[!template text="""emacsmo.org slash 2023 slash talks will be""" start="00:12:18.480" video="qanda-uni" id="subtitle"]]
+[[!template text="""able to find all the content here.""" start="00:12:21.980" video="qanda-uni" id="subtitle"]]
+[[!template text="""So I'll have to leave now.""" start="00:12:24.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""Thank you so much James for doing the""" start="00:12:25.840" video="qanda-uni" id="subtitle"]]
+[[!template text="""difficult task of opening up EmacsConf and""" start="00:12:28.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""I'll probably see you later.""" start="00:12:30.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thank you, Leo. Bye bye.""" start="00:12:32.780" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 2]: On your journal program.""" start="00:12:52.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""Yes. You are using the tablet as a monitor,""" start="00:12:58.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""right? Touch screen monitor with that?""" start="00:13:03.520" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: That's exactly right. So it's a tablet so you""" start="00:13:06.480" video="qanda-uni" id="subtitle"]]
+[[!template text="""know I can. It has a touch screen and so.""" start="00:13:08.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""So basically the functionality that that""" start="00:13:13.080" video="qanda-uni" id="subtitle"]]
+[[!template text="""program provides is to be able to just mark""" start="00:13:15.580" video="qanda-uni" id="subtitle"]]
+[[!template text="""up PDFs with a stylus,""" start="00:13:20.580" video="qanda-uni" id="subtitle"]]
+[[!template text="""you know, in the way that you would use any""" start="00:13:23.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""other tablet. And to be able to take that""" start="00:13:25.280" video="qanda-uni" id="subtitle"]]
+[[!template text="""video signal and put it into another machine.""" start="00:13:30.600" video="qanda-uni" id="subtitle"]]
+[[!template text="""That was the that was the key.""" start="00:13:33.840" video="qanda-uni" id="subtitle"]]
+[[!template text="""That's the killer app.""" start="00:13:36.100" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 2]: I've thought about grabbing 1 for the purpose""" start="00:13:39.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""of like changing my laptop into a tablet to""" start="00:13:41.940" video="qanda-uni" id="subtitle"]]
+[[!template text="""read manga, browse the web and kind of""" start="00:13:45.460" video="qanda-uni" id="subtitle"]]
+[[!template text="""curious if it works well like as a wireless""" start="00:13:49.640" video="qanda-uni" id="subtitle"]]
+[[!template text="""monitor with a tablet or how well it like you""" start="00:13:52.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""can use Emacs with it in a tablet mode or""" start="00:13:57.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""were you just""" start="00:14:02.080" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: or you just use the tablet that I use is this""" start="00:14:03.820" video="qanda-uni" id="subtitle"]]
+[[!template text="""is it it's just a Microsoft Surface and so it""" start="00:14:10.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""comes with a keyboard so you can take the""" start="00:14:14.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""keyboard off. Yeah, but I use it.""" start="00:14:17.780" video="qanda-uni" id="subtitle"]]
+[[!template text="""I use it with the keyboard as well.""" start="00:14:20.940" video="qanda-uni" id="subtitle"]]
+[[!template text="""And I just.""" start="00:14:24.560" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 2]: You're cutting off right now""" start="00:14:30.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: Audio Your audio is cutting off right now.""" start="00:14:53.880" video="qanda-uni" id="subtitle"]]
+[[!template text="""I bumped the mute button on the mic.""" start="00:15:32.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""Yeah. So again, this is,""" start="00:15:36.820" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 2]: is the 16 mute buttons you use.""" start="00:15:38.500" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: this It's just the surface pro 3 that I got""" start="00:15:38.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""used and it runs Emacs.""" start="00:15:45.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""I mean it runs. You know Linux really well.""" start="00:15:49.280" video="qanda-uni" id="subtitle"]]
+[[!template text="""And the trouble is that the hard drive you""" start="00:15:54.940" video="qanda-uni" id="subtitle"]]
+[[!template text="""know the SSE drive is small and the RAM is""" start="00:15:59.720" video="qanda-uni" id="subtitle"]]
+[[!template text="""small, but it works for the purposes.""" start="00:16:02.920" video="qanda-uni" id="subtitle"]]
+[[!template text="""Basically, if I had a couple thousand""" start="00:16:07.580" video="qanda-uni" id="subtitle"]]
+[[!template text="""dollars, I could probably buy a touchscreen""" start="00:16:10.080" video="qanda-uni" id="subtitle"]]
+[[!template text="""machine where I could run everything on it""" start="00:16:14.280" video="qanda-uni" id="subtitle"]]
+[[!template text="""and do the streaming and do the video capture""" start="00:16:17.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""and do the PDF markup.""" start="00:16:21.380" video="qanda-uni" id="subtitle"]]
+[[!template text="""But since both of these are so,""" start="00:16:26.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""the hardware that I use is so old and cheap""" start="00:16:28.860" video="qanda-uni" id="subtitle"]]
+[[!template text="""and weak I have to split it across 2""" start="00:16:31.980" video="qanda-uni" id="subtitle"]]
+[[!template text="""machines.""" start="00:16:33.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 2]: There's also a beauty in making the stuff""" start="00:16:35.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""having specific purposes for specific things""" start="00:16:37.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""where it's just not. Yeah it's like I don't""" start="00:16:40.080" video="qanda-uni" id="subtitle"]]
+[[!template text="""want a smart TV that plays Netflix I want a""" start="00:16:46.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""smart TV that has all the smarts that I turn""" start="00:16:50.140" video="qanda-uni" id="subtitle"]]
+[[!template text="""my smart TV into a TV monitor I don't want to""" start="00:16:53.860" video="qanda-uni" id="subtitle"]]
+[[!template text="""yeah""" start="00:16:58.780" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: I totally feel that ethic I totally I totally""" start="00:17:02.200" video="qanda-uni" id="subtitle"]]
+[[!template text="""feel that ethic. Oh, on""" start="00:17:08.659" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 2]: the some other things like if you want you to""" start="00:17:11.760" video="qanda-uni" id="subtitle"]]
+[[!template text="""do highlighting in an org mode document.""" start="00:17:15.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""You can use org web tools.""" start="00:17:17.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""I wrote this in the notes,""" start="00:17:19.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""but you can use org web tools to download a""" start="00:17:20.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""web page and then you can use org remark to""" start="00:17:21.940" video="qanda-uni" id="subtitle"]]
+[[!template text="""start highlighting in the org mode web page""" start="00:17:25.400" video="qanda-uni" id="subtitle"]]
+[[!template text="""and then because an org mode document now you""" start="00:17:28.860" video="qanda-uni" id="subtitle"]]
+[[!template text="""can just edit it directly.""" start="00:17:30.860" video="qanda-uni" id="subtitle"]]
+[[!template text="""If you want other people to join in on an""" start="00:17:35.600" video="qanda-uni" id="subtitle"]]
+[[!template text="""Emacs session you could use a package like""" start="00:17:38.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""what's it called? CRDT.EL""" start="00:17:40.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""that will allow 2 people with 2 different""" start="00:17:47.020" video="qanda-uni" id="subtitle"]]
+[[!template text="""Emacs configurations to edit the same buffer.""" start="00:17:50.160" video="qanda-uni" id="subtitle"]]
+[[!template text="""And you have a host that can host a buffer""" start="00:17:54.140" video="qanda-uni" id="subtitle"]]
+[[!template text="""too. It works with, and they have 1 optional""" start="00:17:58.980" video="qanda-uni" id="subtitle"]]
+[[!template text="""extension for org mode that will synchronize""" start="00:18:06.000" video="qanda-uni" id="subtitle"]]
+[[!template text="""the folding of the org drawers.""" start="00:18:08.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: Interesting. I will look into that.""" start="00:18:12.320" video="qanda-uni" id="subtitle"]]
+[[!template text="""Like""" start="00:18:15.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 2]: having I don't like if you want students like""" start="00:18:19.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""you have each highlight line mode these are""" start="00:18:22.720" video="qanda-uni" id="subtitle"]]
+[[!template text="""just some ideas like you can have like""" start="00:18:25.740" video="qanda-uni" id="subtitle"]]
+[[!template text="""highlight line mode so people can easily see""" start="00:18:27.620" video="qanda-uni" id="subtitle"]]
+[[!template text="""which line you're on cursor tracking and then""" start="00:18:30.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""you can have other people join in students or""" start="00:18:35.040" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 1]: yeah that's just a possible idea.""" start="00:18:43.180" video="qanda-uni" id="subtitle"]]
+[[!template text="""Is there anyone else in the in the big blue""" start="00:18:45.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""button room who has a question?""" start="00:18:49.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""All right, I'm going to go over to the pad""" start="00:19:01.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""and see if there are any pending questions I""" start="00:19:03.280" video="qanda-uni" id="subtitle"]]
+[[!template text="""can address. Thanks, Plasma Strike.""" start="00:19:05.280" video="qanda-uni" id="subtitle"]]
+[[!template text="""[Speaker 3]: Yep. Which could be PDF,""" start="00:19:27.500" video="qanda-uni" id="subtitle"]]
+[[!template text="""could be Markdown, could be OpenOffice,""" start="00:19:33.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""could be a notebook format.""" start="00:19:38.560" video="qanda-uni" id="subtitle"]]
+[[!template text="""This methodology was conceived by Donald""" start="00:19:40.960" video="qanda-uni" id="subtitle"]]
+[[!template text="""Knuth in 1984. The main purpose of literal""" start="00:19:43.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""programming is not only to make code or""" start="00:19:51.980" video="qanda-uni" id="subtitle"]]
+[[!template text="""documentation or output more manageable,""" start="00:19:54.700" video="qanda-uni" id="subtitle"]]
+[[!template text="""but to allow humans to create a data story to""" start="00:19:57.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""be used from a single source.""" start="00:20:01.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""What you see on the slide on the left-hand""" start="00:20:04.540" video="qanda-uni" id="subtitle"]]
+[[!template text="""side is the story and code inside an org-mod""" start="00:20:06.300" video="qanda-uni" id="subtitle"]]
+[[!template text="""file. The file starts with some""" start="00:20:09.400" video="qanda-uni" id="subtitle"]]
+[[!template text="""documentation, then you write back down this""" start="00:20:14.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""code, and at the bottom you see the output""" start="00:20:18.420" video="qanda-uni" id="subtitle"]]
+[[!template text="""file, which is not shown in the slide itself.""" start="00:20:22.060" video="qanda-uni" id="subtitle"]]
+[[!template text="""In the middle you have the source code,""" start="00:20:26.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""which is the result of tangling or opening a""" start="00:20:28.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""buffer inside offload.""" start="00:20:33.980" video="qanda-uni" id="subtitle"]]
+[[!template text="""On the very right hand side we have a PDF,""" start="00:20:37.660" video="qanda-uni" id="subtitle"]]
+[[!template text="""actually this HTML, very same file that you""" start="00:20:42.580" video="qanda-uni" id="subtitle"]]
+[[!template text="""see in memory language.""" start="00:20:47.740" video="qanda-uni" id="subtitle"]]
+[[!template text="""So the humans look at some of this code and""" start="00:20:49.600" video="qanda-uni" id="subtitle"]]
+[[!template text="""the machines look at other parts of the code.""" start="00:20:53.080" video="qanda-uni" id="subtitle"]]
+[[!template text="""I actually did all my programming in the""" start="00:20:56.260" video="qanda-uni" id="subtitle"]]
+[[!template text="""literary world even in the early 1990s,""" start="00:20:58.320" video="qanda-uni" id="subtitle"]]
+[[!template text="""not using Org Mode, which didn't exist yet,""" start="00:21:00.920" video="qanda-uni" id="subtitle"]]
+[[!template text="""but using Norman Ramsey's Norep preprocessor.""" start="00:21:03.040" video="qanda-uni" id="subtitle"]]
+[[!template text="""They still use it inside the Org-Mode today.""" start="00:21:07.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""This preprocessor, Norep,""" start="00:21:10.400" video="qanda-uni" id="subtitle"]]
+[[!template text="""allows you to tangle code from within an""" start="00:21:11.920" video="qanda-uni" id="subtitle"]]
+[[!template text="""Org-Mode file that is self-standing file,""" start="00:21:14.240" video="qanda-uni" id="subtitle"]]
+[[!template text="""much like Org-mode's edit functions,""" start="00:21:16.360" video="qanda-uni" id="subtitle"]]
+[[!template text="""which export code blocks into buffers in""" start="00:21:19.540" video="qanda-uni" id="subtitle"]]
+[[!template text="""whatever language the code blocks.""" start="00:21:21.900" video="qanda-uni" id="subtitle"]]
+[[!template text="""In data science, these interactive notebooks,""" start="00:21:25.940" video="qanda-uni" id="subtitle"]]
+[[!template text="""in 1 of the interpreted languages like Julia,""" start="00:21:29.640" video="qanda-uni" id="subtitle"]]
+[[!template text="""Python, or R dominating?""" start="00:21:32.776" video="qanda-uni" id="subtitle"]]
+[[!template text="""The basic technology is that of Jupyter""" start="00:21:34.680" video="qanda-uni" id="subtitle"]]
+[[!template text="""notebooks, which take their name from Julia,""" start="00:21:37.420" video="qanda-uni" id="subtitle"]]
+[[!template text="""Python, and R. And these notebooks use a""" start="00:21:39.860" video="qanda-uni" id="subtitle"]]
+[[!template text="""spruce-dark shell, for example,""" start="00:21:43.040" video="qanda-uni" id="subtitle"]]
+[[!template text="""IPython, and an option to add SQL cells.""" start="00:21:44.920" video="qanda-uni" id="subtitle"]]
+[[!template text="""All good inside Emacs has a large number of""" start="00:21:50.460" video="qanda-uni" id="subtitle"]]
+[[!template text="""advantages. Some of them are listed here over""" start="00:21:53.340" video="qanda-uni" id="subtitle"]]
+[[!template text="""these notebooks. 2 of these stand out""" start="00:21:56.800" video="qanda-uni" id="subtitle"]]
+[[!template text="""particularly. Different languages can be""" start="00:21:59.180" video="qanda-uni" id="subtitle"]]
+[[!template text="""mixed as shown in the image.""" start="00:22:02.860" video="qanda-uni" id="subtitle"]]
+[[!template text="""While in Jupyter notebooks,""" start="00:22:06.460" video="qanda-uni" id="subtitle"]]
+[[!template text="""a notebook is limited to running a kernel in""" start="00:22:07.920" video="qanda-uni" id="subtitle"]]
+[[!template text="""1 language only. The content of the notebook,""" start="00:22:10.900" video="qanda-uni" id="subtitle"]]
+[[!template text="""its document code or output part can be""" start="00:22:14.440" video="qanda-uni" id="subtitle"]]
+[[!template text="""exported in a variety of forms.""" start="00:22:16.980" video="qanda-uni" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20uni%3A%20Authoring%20and%20presenting%20university%20courses%20with%20Emacs%20and%20a%20full%20libre%20software%20stack)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/uni-before.md b/2023/info/uni-before.md
new file mode 100644
index 00000000..6ac65fe2
--- /dev/null
+++ b/2023/info/uni-before.md
@@ -0,0 +1,35 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 21-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="uni-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="uni-mainVideo" data="""
+00:00.000 Introduction
+01:12.440 Presenting
+01:47.820 Hardware
+04:46.610 Example setup
+05:30.520 Presentation software: flexibility in function
+07:05.950 Live demonstration
+07:59.850 OBS
+10:26.060 Animation
+10:55.790 Emacs
+11:42.260 Making slides and handouts with Org Mode
+13:22.680 Pedagogy first
+16:17.790 org-teach
+19:38.330 Blank slides
+19:50.050 Animations
+20:19.270 Conclusion
+
+"""]]<div></div>Duration: 20:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm">Download --main.webm (283MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--slides.pdf">Download --slides.pdf (26MB)</a></li><li><a href="https://toobnix.org/w/mAnNW7jnPq5qhUPH2dzVQf">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="uni-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="uni-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.opus"></audio></div><div></div>Duration: 22:32 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.opus">Download --answers.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.webm">Download --answers.webm (56MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/uni-nav.md b/2023/info/uni-nav.md
new file mode 100644
index 00000000..6694d47e
--- /dev/null
+++ b/2023/info/uni-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/adventure">An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</a>
+Next by track: <a href="/2023/talks/teaching">Teaching computer and data science with literate programming tools</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/voice-after.md b/2023/info/voice-after.md
new file mode 100644
index 00000000..32de9a2c
--- /dev/null
+++ b/2023/info/voice-after.md
@@ -0,0 +1,1473 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="voice-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""Hi, I'm Blaine Mooers. I'm an associate professor""" start="00:00:00.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""of biochemistry at the University of Oklahoma""" start="00:00:04.360" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Health Sciences Center in Oklahoma City.""" start="00:00:06.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""My lab studies the role of RNA structure in RNA editing.""" start="00:00:09.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""We use X-ray crystallography to study the structures""" start="00:00:12.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""of these RNAs. We spend a lot of time in the lab""" start="00:00:17.200" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""preparing our samples for structural studies,""" start="00:00:19.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and then we also spend a lot of time at the computer""" start="00:00:22.720" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""analyzing the resulting data.""" start="00:00:26.720" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I was seeking ways of using voice computing""" start="00:00:29.720" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to try to enhance my productivity.""" start="00:00:33.040" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Three activities in voice computing""" start="00:00:37.400" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""I divide voice computing into three activities,""" start="00:00:37.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""speech-to-text or dictation, speech-to-commands,""" start="00:00:41.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and speech-to-code. I'll be talking about""" start="00:00:44.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""speech-to-text and speech-to-commands today""" start="00:00:47.640" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""because these are two activities""" start="00:00:50.160" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that are probably most broadly applicable""" start="00:00:55.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to the workflows of people attending this conference.""" start="00:00:57.320" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Talk is not about ... and about ...""" start="00:01:02.560" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""This talk will not be about Emacspeak.""" start="00:01:02.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""This is a venerated program for converting text to speech.""" start="00:01:06.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""We're talking about the flow of information""" start="00:01:11.360" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in the opposite direction, speech-to-text.""" start="00:01:13.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""We need an Emacs Listens. We don't have one,""" start="00:01:16.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""so I had to seek help from outside the Emacs world""" start="00:01:20.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""via the Voice In Plus. This runs in""" start="00:01:25.480" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""the Google Chrome web browser,""" start="00:01:30.640" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and it's very good for speech-to-text""" start="00:01:33.640" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and very easy to learn how to use.""" start="00:01:36.720" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It also has some speech-to-commands.""" start="00:01:39.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""However, Talon Voice is much better""" start="00:01:42.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""with the speech-to-commands,""" start="00:01:44.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and it's also great at speech-to-code.""" start="00:01:47.560" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Motivations""" start="00:01:53.520" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""The motivations are, obviously, as I mentioned already,""" start="00:01:53.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""for improved productivity.""" start="00:01:57.240" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""So, if you're a fast typist""" start="00:01:59.160" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""who types faster than they can speak,""" start="00:02:00.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""then nonetheless you might still benefit""" start="00:02:05.200" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""from voice computing when you grow tired of""" start="00:02:07.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""using the keyboard. On the other hand,""" start="00:02:09.280" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""you might be a slow typist who talks faster""" start="00:02:12.200" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""than they can type.""" start="00:02:15.200" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""In this case, you're definitely going to""" start="00:02:17.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""benefit from dictation because you'll be able to""" start="00:02:19.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""encode more words in text documents in a given day.""" start="00:02:22.860" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""If you're a coder, then you may get a kick out of""" start="00:02:29.360" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""opening programs and websites and coding projects""" start="00:02:33.640" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""by using your voice.""" start="00:02:37.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Then there are health-related reasons.""" start="00:02:39.280" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You may have impaired use of your hands, eyes, or both""" start="00:02:41.720" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""due to accident or disease, or you may suffer from""" start="00:02:44.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""a repetitive stress injury. Many of us have this""" start="00:02:49.200" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in a mild but chronic form of it.""" start="00:02:53.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""We can't take a three-month sabbatical from the keyboard""" start="00:02:55.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""without losing our jobs, so these injuries tend to persist.""" start="00:02:59.040" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""And then you may have learned""" start="00:03:05.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that it's not good for your health to sit""" start="00:03:06.680" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""for prolonged periods of time""" start="00:03:09.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""with your staring at a computer screen.""" start="00:03:11.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can actually dictate to your computer from 20 feet away""" start="00:03:14.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""while looking out the window,""" start="00:03:21.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""thereby giving your lower body a break""" start="00:03:25.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and your eyes a break.""" start="00:03:27.780" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Data""" start="00:03:33.240" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""I'm not God, so I have to bring data.""" start="00:03:33.240" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I have two data points here,""" start="00:03:35.640" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""the number of words that I wrote in June and July this year""" start="00:03:38.040" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and in September and October.""" start="00:03:42.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I adopted the use of voice computing""" start="00:03:45.160" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in the middle of August. As you can see,""" start="00:03:49.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I got an over three-fold increase in my output.""" start="00:03:53.920" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Voice In in the Chrome Store""" start="00:03:58.680" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""So this is the Chrome store website for voice-in.""" start="00:03:58.680" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It's only available for Google Chrome.""" start="00:04:07.120" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You just hit the install button to install it.""" start="00:04:11.120" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""To configure it, you need to select a language.""" start="00:04:13.240" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It has support for 40 languages""" start="00:04:16.640" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and it supports about a dozen different dialects of English,""" start="00:04:19.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""including Australian.""" start="00:04:23.120" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Works in web pages with text areas""" start="00:04:25.628" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""It works on web pages with text areas,""" start="00:04:25.628" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""so it works. I use it regularly""" start="00:04:29.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""on Overleaf and 750words.com,""" start="00:04:33.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""a distraction-free environment for writing.""" start="00:04:37.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It also works in webmails. It works in Google.""" start="00:04:42.280" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It works in Jupyter Lab, of course,""" start="00:04:46.780" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""because that runs in the browser.""" start="00:04:51.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It also works in Jupyter Notebook and Colab Notebook.""" start="00:04:52.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It should work in Cloudmacs.""" start="00:04:58.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I've mapped option-L to opening Voice In""" start="00:05:01.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""when the cursor is on a web page that has a text area.""" start="00:05:04.160" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""So [the presence of a text area is] the main limiting factor.""" start="00:05:09.120" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Built-in commands in Voice In Plus""" start="00:05:16.880" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""[Voice In] has a number of built-in commands.""" start="00:05:16.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can turn it off by saying &quot;stop dictation&quot;.""" start="00:05:19.160" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It doesn't distinguish between""" start="00:05:24.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""a command mode and a dictation mode.""" start="00:05:26.120" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It has undo command. You use the command""" start="00:05:28.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""&quot;copy that&quot; to copy a selection.""" start="00:05:33.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""The &quot;press&quot; commands are used in the browser.""" start="00:05:36.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You [say] &quot;press enter&quot; to issue a command or [submit] text""" start="00:05:40.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that has been written in a web form,""" start="00:05:44.840" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and then &quot;press tab&quot; will open up the next tab""" start="00:05:50.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in a web browser. The scroll up and down""" start="00:05:55.280" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""will allow you to navigate a web page.""" start="00:05:58.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I've put together a quiz about these commands""" start="00:06:02.380" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""so that you can go through this quiz several times""" start="00:06:05.820" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""until you get at least 90 percent of them correct,""" start="00:06:09.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""90 percent of the questions correct.""" start="00:06:14.700" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""In order to boost your recall of the commands,""" start="00:06:16.680" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I have a Python script that you can probably""" start="00:06:20.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""pound through the quiz with""" start="00:06:23.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in less than a minute, once you know the commands.""" start="00:06:26.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I also provide an Elisp version of this quiz,""" start="00:06:32.160" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""but it's a little slower to operate.""" start="00:06:35.600" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Common errors made by Voice In""" start="00:06:41.740" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""These are some common errors""" start="00:06:41.740" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that I've run into with Voice In.""" start="00:06:43.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It likes to contract statements like &quot;I will&quot; into &quot;I'll&quot;.""" start="00:06:45.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Contractions are not used in formal writing,""" start="00:06:50.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and most of my writing is formal writing, so this annoys me.""" start="00:06:55.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I will show you how I corrected for that problem.""" start="00:07:00.360" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It also drops the first word in sentences quite often.""" start="00:07:04.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""This might be some speech issue that I have.""" start="00:07:10.040" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It inserts the wrong word because it's not in the dictionary""" start="00:07:13.360" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that was used to train it. So, for example,""" start="00:07:17.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""the word PyMOL is the name of a molecular graphics program""" start="00:07:22.620" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that we use in our field. It doesn't recognize PyMOL.""" start="00:07:26.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Instead, it substitutes in the word &quot;primal&quot;.""" start="00:07:31.640" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Since I don't use &quot;primal&quot; very often,""" start="00:07:34.240" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I've mapped the word &quot;primal&quot; to &quot;PyMOL&quot;""" start="00:07:38.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in some custom commands I'll talk about in a minute.""" start="00:07:42.300" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Then there's a problem that the commands that exist""" start="00:07:45.660" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""might get executed when you speak them when, in fact,""" start="00:07:50.440" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""you wanted to use the words in those commands""" start="00:07:54.440" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""during your dictation.""" start="00:07:58.840" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""So this is a problem, a pitfall of Voice In,""" start="00:08:01.440" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in that it doesn't have a command mode""" start="00:08:07.120" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that's separate from a dictation mode.""" start="00:08:08.920" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Custom speech-to-text commands""" start="00:08:14.760" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""You can set up through a very easy-to-use GUI""" start="00:08:14.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""custom voice commands mapped to what you want inserted,""" start="00:08:20.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""so this is how misinterpreted words can be corrected.""" start="00:08:26.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You just map the misinterpreted word to the intended word.""" start="00:08:32.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can also map the contractions to their expansions.""" start="00:08:35.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I did this for 94 English contractions,""" start="00:08:42.840" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and you can find these on GitHub.""" start="00:08:46.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can also insert acronyms and expand those acronyms.""" start="00:08:50.140" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I apply the same approach to the first names of colleagues.""" start="00:08:56.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I say &quot;expand Fred&quot;, for example,""" start="00:09:00.240" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to get Fred's first and last name""" start="00:09:03.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""with the [correct] spelling of his very long German name.""" start="00:09:07.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can also insert other trivia like favorite URLs.""" start="00:09:12.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can insert LaTeX snippets.""" start="00:09:19.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It handles correctly multi-line snippets.""" start="00:09:24.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You just have to enclose them in double quotes.""" start="00:09:34.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can even insert BibTeX cite keys for references""" start="00:09:39.420" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that you use frequently. All fields""" start="00:09:45.040" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""have certain key references for certain methods or topics.""" start="00:09:46.880" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Custom speech-to-commands""" start="00:09:59.420" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""Then it has a set of commands that you can customize""" start="00:09:59.420" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""for the purpose of speech-to-commands""" start="00:10:05.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to get the computer to do something""" start="00:10:08.200" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""like open up a specific website or save the current writing.""" start="00:10:09.680" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""In this case, we have &quot;press: command-s&quot;""" start="00:10:15.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""for saving current writing.""" start="00:10:23.541" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can change the language [with &quot;lang:&quot;],""" start="00:10:27.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and you can change the case of the text [with &quot;case:&quot;].""" start="00:10:28.100" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Introducing Talon Voice""" start="00:10:37.540" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""But the speech-to-command repertoire is quite limited""" start="00:10:37.540" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in Voice In, so it's now time to pick up on Talon Voice.""" start="00:10:41.040" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""This is an open source project. It's free.""" start="00:10:49.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It is highly configurable via TalonScript,""" start="00:10:54.120" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""which is a subset of Python.""" start="00:10:57.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can use either TalonScript or Python to configure it,""" start="00:10:58.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""but it's easier to code up your configuration""" start="00:11:03.040" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in TalonScript.""" start="00:11:06.280" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It has a Python interpreter embedded in it,""" start="00:11:08.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""so you don't have to mess around with installing""" start="00:11:10.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""yet another Python interpreter.""" start="00:11:13.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It runs on all platforms, and it has a dictation mode""" start="00:11:14.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that's separate from a command mode.""" start="00:11:21.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You can activate it,""" start="00:11:24.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and it'll be in a listening state asleep.""" start="00:11:25.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You just bark out &quot;Talon Wake&quot; to start to wake it up,""" start="00:11:31.360" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and &quot;Talon Sleep&quot; to have it go into a listening state.""" start="00:11:36.280" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It has a very welcoming community""" start="00:11:43.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in the Talon Slack channel.""" start="00:11:47.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Then I need to point out that there's several packages""" start="00:11:50.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that others have developed that run on top of Talon,""" start="00:11:56.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""but one of particular note is by Pokey Rule.""" start="00:11:59.200" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""He has on his website some really well-done videos""" start="00:12:03.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that demonstrate how he uses Cursorless""" start="00:12:08.120" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to move the cursor around using voice commands.""" start="00:12:11.480" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""This, however, runs on VS Code.""" start="00:12:17.240" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""At least that's the text editor""" start="00:12:20.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""for which he's primarily developing Cursorless.""" start="00:12:23.360" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Talon GUI""" start="00:12:28.400" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""I followed the [install] protocol outlined by Tara Roys.""" start="00:12:28.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""She has a collection of tutorials""" start="00:12:35.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""on YouTube as well as on GitHub that are quite helpful.""" start="00:12:38.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I followed her tutorial for installing""" start="00:12:44.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Talon on macOS without any issues,""" start="00:12:49.480" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""but allow for half an hour to an hour""" start="00:12:51.360" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to go through the process. When you're done,""" start="00:12:55.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""you'll have this Talon icon appear in the toolbar""" start="00:12:57.720" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""on the Mac. When it has this diagonal line across it,""" start="00:13:02.200" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that means it's in the sleep state.""" start="00:13:06.120" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""So, this leads to cascading pull-down menus.""" start="00:13:09.540" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""This is it for the GUI.""" start="00:13:13.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""One of your first tasks is to select""" start="00:13:19.640" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""a language model that will be used to interpret""" start="00:13:26.520" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""the sounds that you generate as words.""" start="00:13:30.440" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""And the other kind of key feature is that there's a,""" start="00:13:35.180" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""under scripting, there's a view log pull-down""" start="00:13:38.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that opens up a window displaying the log file.""" start="00:13:43.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Whenever you make a change in a Talon configuration file,""" start="00:13:48.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that change is implemented immediately.""" start="00:13:52.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You do not have to restart Talon""" start="00:13:55.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to get the change to take effect.""" start="00:13:57.600" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Talon file with web scope""" start="00:14:02.540" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""This is an example of a Talon file.""" start="00:14:02.540" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It has two components. It has a header above the dash that describes""" start="00:14:04.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""the scope of the commands contained below the dash.""" start="00:14:10.500" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Each command is separated by a blank line.""" start="00:14:14.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""If a voice command is mapped to multiple actions,""" start="00:14:19.740" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""these are listed separately on indented lines""" start="00:14:24.240" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""below the first line.""" start="00:14:31.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""The words that are in square brackets are optional.""" start="00:14:33.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""So, I have mapped the word toggle voice in,""" start="00:14:39.420" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""or the phrase toggle voice in,""" start="00:14:44.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to the keyboard shortcut Alt L""" start="00:14:46.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in order to toggle on or off voice in.""" start="00:14:51.280" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""If I toggle voice in on,""" start="00:14:55.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I need to immediately toggle off Talon,""" start="00:14:57.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and this is done through this key command for Control T,""" start="00:15:01.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""which is mapped to speech toggle.""" start="00:15:09.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""Speech toggle. Then there are,""" start="00:15:11.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""there's a couple other examples.""" start="00:15:20.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""So, if there's no header present,""" start="00:15:24.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""it's an optional feature of Talon files,""" start="00:15:26.440" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""then the commands in the file will apply in all situations,""" start="00:15:29.600" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in all modes.""" start="00:15:32.640" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Terminals on remote and virtual machines""" start="00:15:34.015" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""Here we have two restrictions.""" start="00:15:34.015" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""These commands will only work""" start="00:15:36.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""when using the iTerm2 [ccc] terminal emulator for the Mac,""" start="00:15:38.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and then only when the title of the window in iTerm2""" start="00:15:42.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""has this particular address,""" start="00:15:48.240" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""which is what appears when I've logged into""" start="00:15:52.440" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""the supercomputer at the University of Oklahoma.""" start="00:15:55.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""One of the commands in this file is checkjobs.""" start="00:16:00.060" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""It's mapped to an alias,""" start="00:16:03.480" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""a bash alias called cj for &quot;check jobs&quot;,""" start="00:16:05.540" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""which in turn is mapped to a script called checkjobs.sh""" start="00:16:10.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""that, when it's run, returns a listing""" start="00:16:17.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""of the pending and running jobs on the supercomputer""" start="00:16:20.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in a format that I find pleasing.""" start="00:16:23.220" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""This `\n` after cj, the new line character,""" start="00:16:26.081" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""enters the command, so I don't have to do that""" start="00:16:34.560" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""as an additional step. Likewise,""" start="00:16:39.840" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""here's a similar setup for interacting with""" start="00:16:43.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""a Ubuntu virtual machine.""" start="00:16:46.800" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Recommendations""" start="00:16:52.500" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""In terms of picking up voice computing,""" start="00:16:52.500" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""these are my recommendations.""" start="00:16:55.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You're going to run into more errors""" start="00:16:57.480" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""than you may like initially,""" start="00:16:59.760" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and so you need some patience in dealing with those.""" start="00:17:01.480" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""And also, it'll take you a while""" start="00:17:07.840" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to get your head wrapped around Talon and how it works.""" start="00:17:09.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You'll definitely want to use these custom commands""" start="00:17:16.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""to correct the errors or shortcomings""" start="00:17:19.440" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""of the language models. And you've seen how,""" start="00:17:21.480" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""by opening up projects by voice commands,""" start="00:17:26.920" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""you can reduce friction""" start="00:17:29.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""in terms of restarting work on a project.""" start="00:17:31.360" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""You've seen how Voice In is preferred""" start="00:17:36.660" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""for more accurate dictation.""" start="00:17:40.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I think my error rate is about 1 to 2 percent.""" start="00:17:44.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""That is, 1 to 2 out of 100 words are incorrect""" start="00:17:48.080" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""versus Talon Voice where I think""" start="00:17:53.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""the error rate is closer to 5 percent.""" start="00:17:56.320" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I have put together [a library of English] contractions""" start="00:18:00.840" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""[and their expansion] for Talon [too],""" start="00:18:03.508" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and they can be found here on GitHub.""" start="00:18:04.881" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""And I also have [posted] a quiz of 600 questions""" start="00:18:07.480" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""about some basic Talon commands.""" start="00:18:12.960" video="mainVideo-voice" id="subtitle"]]
+
+[[!template new="1" text="""Acknowledgements""" start="00:18:17.720" video="mainVideo-voice" id="subtitle"]]
+
+[[!template text="""I'd like to thank the people who've helped me out""" start="00:18:17.720" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""on the Talon Slack channel""" start="00:18:21.000" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and members of the Oklahoma Data Science Workshop""" start="00:18:22.160" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""where I gave an hour-long talk on this topic""" start="00:18:25.800" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""several weeks ago.""" start="00:18:29.880" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""I'd like to thank my friends""" start="00:18:30.960" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""at the Berlin and Austin Emacs Meetup""" start="00:18:34.160" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""and at the M-x research Slack channel.""" start="00:18:37.400" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""And I thank these grant funding agencies""" start="00:18:42.660" video="mainVideo-voice" id="subtitle"]]
+[[!template text="""for supporting my work. I'll be happy to take any questions.""" start="00:18:45.120" video="mainVideo-voice" id="subtitle"]]
+
+<a name="voice-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: Dictation.""" start="00:00:00.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. All right I think we are live now.""" start="00:00:06.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""The stream is here. So folks if you would""" start="00:00:08.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""please post your questions on the pad and""" start="00:00:11.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""we'll take them up here.""" start="00:00:13.259" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Boy so I don't have myself set up with the""" start="00:00:20.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, I can read the questions to you if you""" start="00:00:25.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: pad. That would be fantastic.""" start="00:00:26.939" video="qanda-voice" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:00:27.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: would prefer that. Sure.""" start="00:00:28.779" video="qanda-voice" id="subtitle"]]
+[[!template text="""Thanks.""" start="00:00:29.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Well, for the purpose of breaking the ice a""" start="00:00:58.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""little bit, I can provide a live""" start="00:01:01.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""demonstration of the use of this Voice In""" start="00:01:03.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""plugin for Google Chrome.""" start="00:01:06.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""So I have, let's see, say new sentence.""" start="00:01:11.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""I'm on a website that is called 750 words.""" start="00:01:20.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""It provides a text area where without any""" start="00:01:25.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""other distracting icons for the purpose of""" start="00:01:30.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""writing and I'm using it for the purpose of""" start="00:01:34.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""capturing my words that I'm dictating and I""" start="00:01:38.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""have enabled the Voice In plugin by hitting""" start="00:01:42.979" video="qanda-voice" id="subtitle"]]
+[[!template text="""the option L command. New sentence.""" start="00:01:48.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""So it interpreted that command new sentence""" start="00:01:54.479" video="qanda-voice" id="subtitle"]]
+[[!template text="""even though I didn't pronounce it correctly,""" start="00:01:56.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""which is a pretty good demonstration of its""" start="00:01:59.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""accuracy. New sentence.""" start="00:02:00.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""Oops, that didn't work.""" start="00:02:06.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""Undo. New sentence. So new sentence is a""" start="00:02:15.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""combination of 2 commands,""" start="00:02:16.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""period and new line. So I've found it more""" start="00:02:23.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""convenient just to say new sentence than""" start="00:02:25.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""having to say period and new line.""" start="00:02:28.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""You can see that it's able to keep up with""" start="00:02:33.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""most of my speech, and it has to interpret""" start="00:02:41.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""the sounds that I'm making and convert those""" start="00:02:44.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""into words, so there's always going to be a""" start="00:02:47.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""lag. New sentence. But I've found that I can""" start="00:02:59.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""generate about 2,000, up to 2,000""" start="00:03:02.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""words an hour as I gather my thoughts and""" start="00:03:07.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""talk in my rather slow fashion of speaking.""" start="00:03:10.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""New sentence, if you're a really fast""" start="00:03:15.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""speaker, it might have trouble keeping up.""" start="00:03:18.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""New sentence. I like to write When I'm using""" start="00:03:30.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""the keyboard with 1 sentence per line,""" start="00:03:34.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""so that when I copy my text and paste it into""" start="00:03:38.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""Emacs, for example, I can resort the""" start="00:03:43.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""sentences very easily by just selecting 1""" start="00:03:47.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""line at a time. I like to keep the sentences""" start="00:03:50.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""unwrapped in that fashion because that""" start="00:03:53.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""greatly eases the rewriting phase.""" start="00:03:56.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""And I'm almost have sort of a hybrid reverse""" start="00:04:01.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""outlining approach by doing that.""" start="00:04:03.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""New sentence. Looks like I have gotten ahead""" start="00:04:14.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""of it a bit and it has not kept up.""" start="00:04:18.079" video="qanda-voice" id="subtitle"]]
+[[!template text="""But generally, it does keep up pretty well.""" start="00:04:21.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Nice. Thanks for the demo.""" start="00:04:26.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""Let's see. I think we have.""" start="00:04:30.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""Yeah, sorry.""" start="00:04:31.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: You're welcome. Go ahead.""" start="00:04:33.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""You can see that it has this EN means English""" start="00:04:42.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""and then dash US. There's actually about 40""" start="00:04:46.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""languages that it supports,""" start="00:04:48.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""including several variants of German and""" start="00:04:52.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""about a dozen English dialects.""" start="00:04:54.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Nice. Let's see, I think we have some""" start="00:05:05.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""comments and questions trickling in.""" start="00:05:06.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""So someone is saying that there is a text to""" start="00:05:11.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""command application or utility called Clipia,""" start="00:05:14.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""C-L-I-P-I-A, that they think is awesome.""" start="00:05:19.395" video="qanda-voice" id="subtitle"]]
+[[!template text="""Clipia that they think is awesome.""" start="00:05:19.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""And someone else is also saying that Sox,""" start="00:05:24.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""S-O-X is another good alternative.""" start="00:05:27.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: I've not explored those yet.""" start="00:05:34.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""So thank you very much for the suggestions.""" start="00:05:36.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: So I'll... I just dropped a link to the pad""" start="00:05:42.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""page here in the chat and on the big blue""" start="00:05:45.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""button if you'd like to open that up as well.""" start="00:05:47.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""But I'll continue reading the comments and""" start="00:05:50.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""questions. So the first question,""" start="00:05:54.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""I guess, is that could you comment on how""" start="00:05:56.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""speaking versus typing affects your logic or""" start="00:06:01.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""the content, quote unquote,""" start="00:06:03.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""that you write?""" start="00:06:05.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: I find that this is like the difference""" start="00:06:10.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""between writing your thoughts down on a blank""" start="00:06:15.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""piece of printer paper versus paper bound""" start="00:06:18.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""with a leather notebook.""" start="00:06:21.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""I don't think there's any real difference.""" start="00:06:24.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""I know that some people believe there is a""" start="00:06:27.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""solid certain difference,""" start="00:06:29.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""But this is for the purpose,""" start="00:06:32.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""I'm using this for the purpose of generating""" start="00:06:34.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""the first draft because my skills with using""" start="00:06:40.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""my voice to edit my text is still not very""" start="00:06:44.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""well developed. I'm still more efficient""" start="00:06:46.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""using the keyboard for that stage.""" start="00:06:49.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""So the hardest part about writing generally""" start="00:06:52.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""is getting the first crappy draft written.""" start="00:06:55.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""And so I have found that dictation is""" start="00:07:00.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""perfectly fine for that phase.""" start="00:07:01.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""And I find it actually very conducive for""" start="00:07:07.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""just getting the text out.""" start="00:07:09.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""The biggest problem that most of us have is""" start="00:07:13.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""applying our internal editor.""" start="00:07:15.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""And that inhibits us from generating words in""" start="00:07:20.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""a free-flowing fashion.""" start="00:07:21.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""So I generally do my generative writing.""" start="00:07:26.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""So actually I divide my writing into 2""" start="00:07:28.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""categories, generative writing,""" start="00:07:30.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""generating the first crappy draft,""" start="00:07:32.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""and then rewriting. Rewriting is probably 80,""" start="00:07:35.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""90% of writing where you go back and rework""" start="00:07:38.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""the order of the sentences,""" start="00:07:40.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""order of paragraphs, the order of words in a""" start="00:07:43.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""sentence and so forth.""" start="00:07:44.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""The really hard work. That's best done later""" start="00:07:47.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""in the day when I'm more awake.""" start="00:07:49.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""I do my general writing first thing in the""" start="00:07:52.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""morning when I feel horrible.""" start="00:07:55.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""I'm not very alert. That's when my internal""" start="00:07:59.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""editor is not very awake and I can get more""" start="00:08:03.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""words out, more words past that gatekeeper.""" start="00:08:05.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""And so I can do this sitting down,""" start="00:08:09.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""I can do this standing up,""" start="00:08:10.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""I can do this 20 feet away from my computer""" start="00:08:12.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""looking out the window to give my eyes a""" start="00:08:15.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""break. So I find it's actually very enjoyable""" start="00:08:19.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""to use it in this fashion.""" start="00:08:21.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""And the downside is that I wind up generating""" start="00:08:29.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""3 times as much text, and that makes for 3""" start="00:08:32.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""times as much work when it comes to rewriting""" start="00:08:35.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""the text. And that means I'm using the""" start="00:08:39.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""keyboard a lot later on in the day and I""" start="00:08:45.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""haven't made any progress on recovering from""" start="00:08:47.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""my own repetitive stress injury.""" start="00:08:49.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""I hope that I will add the use of voice""" start="00:08:56.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""commands, speech to commands,""" start="00:08:59.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""for editing the text in the future.""" start="00:09:02.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""And I'll eventually give my hands more of a""" start="00:09:06.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""break.""" start="00:09:07.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Right. Thanks. Yeah, that sounds like a nice""" start="00:09:12.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""flow of sort of being able to get your words""" start="00:09:15.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""out while your internal editor is still not""" start="00:09:18.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""inhibiting things. And then later in the day""" start="00:09:21.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""or days, get back to the actual rewriting and""" start="00:09:25.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""editing.""" start="00:09:25.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Cool. So this allows you to actually separate""" start="00:09:31.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""those 2 activities, not only by time.""" start="00:09:33.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""So many professional writers will spend""" start="00:09:36.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""several hours in the morning doing the""" start="00:09:39.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""generative part and then they'll spend the""" start="00:09:41.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""rest of the day rewriting.""" start="00:09:41.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""So they have separated those 2 activities""" start="00:09:46.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""temporally. What most people actually do is,""" start="00:09:49.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""you know, they do the generative part and""" start="00:09:51.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""then they write 1 sentence and they apply""" start="00:09:53.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""that internal editor right away because they""" start="00:09:55.460" video="qanda-voice" id="subtitle"]]
+[[!template text="""want to write the first draft in a perfect,""" start="00:09:57.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""as a perfect version as the final draft And""" start="00:10:02.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""that slows them down dramatically.""" start="00:10:03.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""But this also allows you to separate these 2""" start="00:10:08.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""activities in terms of modality.""" start="00:10:10.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""You're going to do the generative writing by""" start="00:10:13.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""voice and the rewriting by keyboard.""" start="00:10:16.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""So I think this is 1 way that many people can""" start="00:10:22.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""get into using speech to text in a productive""" start="00:10:26.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""way.""" start="00:10:26.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Nice. Yeah, that sounds great.""" start="00:10:30.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""Let's see. I think we have about 3 or 4""" start="00:10:33.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""minutes live. So I think we have time for at""" start="00:10:37.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""least another question.""" start="00:10:38.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""Have you tried the chat GPT voice chat""" start="00:10:41.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""interface? And if so, how has been your""" start="00:10:44.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""experience of it? As someone experienced with""" start="00:10:47.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""voice control, interested to hear your""" start="00:10:48.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""thoughts, performance relative to the free""" start="00:10:51.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""software tools in particular?""" start="00:10:52.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: I don't have much experience with that""" start="00:10:57.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""particular software. I have used Whisper a""" start="00:11:01.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""little bit. And so that's related.""" start="00:11:03.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""And of course you have this problem of lag so""" start="00:11:10.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""I find that it's a whisper is good for""" start="00:11:12.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""spitting out a sentence you know maybe for a""" start="00:11:16.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""doc string in a programming file.""" start="00:11:20.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""But I find that it's very prone to""" start="00:11:26.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""hallucinations. And I find myself spending""" start="00:11:30.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""half my time deleting the hallucinations,""" start="00:11:32.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""I feel like the net gain is diminished as a""" start="00:11:38.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""result. There's not much of a net gain in""" start="00:11:41.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""terms of what I'm getting out of it.""" start="00:11:43.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""Whereas I really appreciate the high level of""" start="00:11:45.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""accuracy that I'm getting from voice-in.""" start="00:11:48.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""I would use Talon Voice for dictation,""" start="00:11:53.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""but at this point, there's a significant""" start="00:11:56.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""difference between the level of accuracy of""" start="00:12:00.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""voice-in versus Talon voice.""" start="00:12:02.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""It's large enough of a difference that I'll""" start="00:12:06.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""probably use voice-in for a while until I can""" start="00:12:08.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""figure out how to get town voice to generate""" start="00:12:12.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""more accurate text.""" start="00:12:15.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool. Thank you. I think we have at least""" start="00:12:25.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""another 2 or 3 minutes.""" start="00:12:26.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""So if folks have any other questions Please""" start="00:12:29.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""feel free to post them on the pad and I'll""" start="00:12:31.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""check IRC now as well.""" start="00:12:32.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""Right, so I see 1 question on IRC asking,""" start="00:12:44.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""Are any of these voice command slash""" start="00:12:47.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""dictating dictation tools free Libre""" start="00:12:49.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""software? They cannot find that information""" start="00:12:52.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""Which I think is part of it.""" start="00:12:54.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""You just mentioned""" start="00:12:55.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: the voice in software.""" start="00:12:57.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""There's It's a freemium so The answer is no""" start="00:13:03.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""To be able to add the commands,""" start="00:13:05.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""the custom commands, you have to pay $48 a""" start="00:13:09.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""year. The Talon Voice software is free.""" start="00:13:12.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""And the only limitation there is access to""" start="00:13:20.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""the language model. If you want to get the""" start="00:13:23.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""beta version, you need to subscribe to""" start="00:13:26.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""Patreon to help support the developer.""" start="00:13:30.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""And I found, I did do that and I really""" start="00:13:36.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""didn't find much of an improvement.""" start="00:13:37.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""So I really don't intend to do that in the""" start="00:13:43.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""future. But otherwise,""" start="00:13:47.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""Town Voice, everything is open and free,""" start="00:13:50.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""and the Slack community is incredibly""" start="00:13:54.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""welcoming. The parallels with the Emacs""" start="00:13:58.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""community are pretty striking.""" start="00:14:00.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Excellent, thank you. Okay,""" start="00:14:09.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""I think we have about another minute on the""" start="00:14:11.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""live stream, but I believe the big blue""" start="00:14:13.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""button room here is open and will be open,""" start="00:14:16.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""So if folks want to join,""" start="00:14:19.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""if Blaine maybe has a couple of extra""" start="00:14:21.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""minutes. Awesome. Yeah,""" start="00:14:24.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""then you're welcome to join and chat with""" start="00:14:26.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""Blaine and ask any further questions or just""" start="00:14:28.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""do general chatting. Chatting.""" start="00:14:30.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: So I see a question. How good is Talon""" start="00:14:44.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""compared to Whisper? So with Talon,""" start="00:14:53.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""I find that the first part of the sentence""" start="00:14:55.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""will be fairly accurate and then when I'm""" start="00:15:00.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""doing dictation And then towards the end,""" start="00:15:03.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""the errors start to accumulate.""" start="00:15:05.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""So in general, I think it's error rate is""" start="00:15:09.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""about 5 words out of a hundred or so will be""" start="00:15:12.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""wrong. And whisper, Whisper is wonderful""" start="00:15:17.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""because it will insert punctuation for you.""" start="00:15:21.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""But I guess its errors are longer and that""" start="00:15:26.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""it'll hallucinate full sentences for you.""" start="00:15:28.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""So they both have significant error rates.""" start="00:15:35.460" video="qanda-voice" id="subtitle"]]
+[[!template text="""They're just different kinds of errors.""" start="00:15:37.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Interesting.""" start="00:15:42.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Hopefully both will improve over time.""" start="00:15:49.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""Right.""" start="00:15:50.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""Let's see. There's a question.""" start="00:16:04.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""Are the green block the author for this talk?""" start="00:16:09.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""Not sure what that question means.""" start="00:16:13.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well, there is a green block of text that's I""" start="00:16:19.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""think being generated from voice to text,""" start="00:16:22.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""speech to text. At the top of the pad,""" start="00:16:25.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""I think that's the question.""" start="00:16:26.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: So I have this Voicens software operating on""" start="00:16:40.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""this GitHub, on this 750words.com""" start="00:16:43.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""site where I do my generative writing at the""" start="00:16:51.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""start of the day. And it just provides a text""" start="00:16:57.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""area that's free of distractions.""" start="00:16:59.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""And you can see the text that's being""" start="00:17:03.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""recorded as I talk. I haven't been saying the""" start="00:17:08.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""command new sentence, so there isn't any""" start="00:17:12.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""punctuation over our discourse.""" start="00:17:15.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""1 thing that I do at the start of the day is""" start="00:17:24.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""I like to write in LaTeX.""" start="00:17:27.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""Ultimately, that's how I store my writing.""" start="00:17:33.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""So new sentence, new sentence.""" start="00:17:37.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""See, insert start day.""" start="00:17:51.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""So This is an example of a chunk of LaTeX""" start="00:17:58.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""code. So I have some reflections on,""" start="00:18:02.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""you know, what did I wake up this morning?""" start="00:18:04.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""And how do I feel? I have reflections on the""" start="00:18:08.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""prior day in terms of what did I get done""" start="00:18:10.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""yesterday? Do I remember what I did""" start="00:18:12.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""yesterday? What happened last night?""" start="00:18:14.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""Focus of today. What's to be done today?""" start="00:18:16.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""And so on. So I actually,""" start="00:18:23.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""I think I have more down here.""" start="00:18:24.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""Then I've set up these lists so that I can""" start="00:18:31.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""expand them easily. If I say item,""" start="00:18:33.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""then the cursor shows up at the start of an""" start="00:18:40.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""item. And I have it coded so that that new""" start="00:18:45.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""phrase that I speak will start with a capital""" start="00:18:48.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""letter. As you can see,""" start="00:18:52.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""so capitalize the word and.""" start="00:18:54.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""So in spite of its rather limited command""" start="00:19:02.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""syntax, There's some, it's enough to get""" start="00:19:06.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""started and maybe in the future,""" start="00:19:08.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""they'll add more features.""" start="00:19:09.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Cool, that's neat.""" start="00:19:14.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: So I think this is very helpful for,""" start="00:19:21.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""you know, doing things like expanding the""" start="00:19:28.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""names of people. So you can do set up""" start="00:19:32.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""commands like expand the name of a colleague""" start="00:19:36.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""to go from their first name to their full""" start="00:19:40.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""name with a proper spelling of their last""" start="00:19:42.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""name, which, you know,""" start="00:19:45.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""you can wind up spending a lot of time trying""" start="00:19:47.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""to look that up. And so this voice in with""" start="00:19:53.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""the custom commands enables you to store hard""" start="00:19:57.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""to remember information like that.""" start="00:19:59.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Great. I see another question.""" start="00:20:08.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""How good is Talon compared to Whisper?""" start="00:20:11.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""I think you might have answered that already,""" start="00:20:13.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""at least partially, but...""" start="00:20:14.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right, yeah. I talked about how it seems that""" start="00:20:19.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""Whisperer will carry out hallucinations,""" start="00:20:22.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""so it will generate long tracks of error,""" start="00:20:26.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""whereas Talon will tend to generate more""" start="00:20:30.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""errors towards the ends of sentences,""" start="00:20:31.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""in my experience. And the errors are""" start="00:20:36.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""generally shorter in extent.""" start="00:20:37.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""It doesn't hallucinate for long tracks.""" start="00:20:42.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Great. Okay, I think that's all the questions""" start="00:20:50.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""that we have on the pad.""" start="00:20:51.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""If folks want to join here on Big Blue Button""" start="00:20:54.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""for a few minutes and chat with Blaine,""" start="00:20:56.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""that also works. Let's see,""" start="00:21:00.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""I'm probably going to have to drop in a few""" start="00:21:02.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""minutes to catch the next speaker.""" start="00:21:03.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""But many thanks, Blaine,""" start="00:21:07.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""for a great talk and for the interesting""" start="00:21:09.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""demos and the question and answer.""" start="00:21:11.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Thank you very much for hosting this.""" start="00:21:14.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: I appreciate it. glad to have you.""" start="00:21:16.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Cheers, Yeah, this is really amazing to hold""" start="00:21:25.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""this conference with people from all around""" start="00:21:28.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""the world connected together through web""" start="00:21:34.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""browsers.""" start="00:21:34.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, it's very neat what technology can do""" start="00:21:41.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""if and when it's working correctly.""" start="00:21:42.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: I know it can be a little frustrating at""" start="00:21:47.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""times, but when it's working,""" start="00:21:48.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""it's wonderful. Yep.""" start="00:21:54.740" video="qanda-voice" id="subtitle"]]
+
+[[!template new="1" text="""Start of section to review""" start="00:21:59.540" video="qanda-voice" id="subtitle"]]
+
+[[!template text="""[Speaker 2]: Good purpose of computers is all the""" start="00:21:59.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""computers run the same code,""" start="00:22:01.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""so that people, you know,""" start="00:22:03.460" video="qanda-voice" id="subtitle"]]
+[[!template text="""a lot of people work on the same thing and""" start="00:22:05.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""build upon each other's works.""" start="00:22:08.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""For journaling I found 1 good compromise""" start="00:22:16.460" video="qanda-voice" id="subtitle"]]
+[[!template text="""between editing and stream-of-thought""" start="00:22:18.204" video="qanda-voice" id="subtitle"]]
+[[!template text="""journaling. 1 good compromise between editing""" start="00:22:19.548" video="qanda-voice" id="subtitle"]]
+[[!template text="""and stream of thought journaling.""" start="00:22:20.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""1 good compromise between editing and being""" start="00:22:23.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""able to do it again and just kind of helps me""" start="00:22:26.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""do my thoughts even when I do it is when you""" start="00:22:31.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""do org mode and you have the bullets it kind""" start="00:22:33.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""of allows you to naturally chart your""" start="00:22:35.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""thoughts in a way that's really easy to edit""" start="00:22:38.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""reorder I saw you kind of did that with your""" start="00:22:41.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""mac la tech macro where you said item and it""" start="00:22:47.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""would put you down to the next item.""" start="00:22:48.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""Does... How much do you do stuff like that?""" start="00:22:56.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""How much do you do stuff like that where you""" start="00:23:00.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""use like org mode headings and then you""" start="00:23:04.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""reorder them because like I did that with""" start="00:23:07.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""also the K outline from HyperBolt package for""" start="00:23:10.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""the for Emacs org mode later on after the""" start="00:23:15.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: stream. Yes. So I could actually set this up""" start="00:23:21.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""so I have a lot of snippets for Org Mode.""" start="00:23:26.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""I could have Org Mode version of my insert""" start="00:23:30.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""start day snippet and carry things out in org""" start="00:23:34.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""mode. So I use org mode from time to time.""" start="00:23:39.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""I often use it for the purpose of writing""" start="00:23:43.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""readme files for projects to outline the""" start="00:23:47.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""purpose of the project,""" start="00:23:48.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""and say for a director that contains a coding""" start="00:23:54.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""project. And I think this would,""" start="00:24:01.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""so the main limitation of VoiceIn is it only""" start="00:24:07.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""works in a web page and you have to have an""" start="00:24:10.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""Internet connection, whereas Talon voice is""" start="00:24:14.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""perfect for something like org mode in that""" start="00:24:17.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""you don't need an internet connection and it""" start="00:24:20.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""will operate anywhere that you can place a""" start="00:24:22.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""cursor. I haven't found a place where it""" start="00:24:24.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""doesn't work. It's amazing.""" start="00:24:26.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""So as you saw my talk,""" start="00:24:28.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""perhaps You can run it in a terminal or a""" start="00:24:35.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""remote computer. You can run it in a virtual""" start="00:24:38.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh yeah, it's definitely.""" start="00:24:44.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: machine. If you can put your cursor there,""" start="00:24:45.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""it will work. And so as you might imagine,""" start="00:24:50.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""if you use bash aliases,""" start="00:24:52.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""I've worked for, 1 of the first things I did""" start="00:24:55.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""was map Talend commands to bash aliases so""" start="00:25:00.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""that I can do all kinds of crazy things""" start="00:25:02.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""inside of the terminal.""" start="00:25:04.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""And there are, you know,""" start="00:25:12.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""there's some support already for using Talon""" start="00:25:15.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""in Emacs. There's some Emacs functionality""" start="00:25:20.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""that's built into Talon.""" start="00:25:21.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""So when you are in Emacs,""" start="00:25:25.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""there's some features that are automatically""" start="00:25:27.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""available. And then others have developed or""" start="00:25:30.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""are developing packages,""" start="00:25:32.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""which I don't think are available yet in""" start="00:25:34.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""ELPA. There's 1 that does the font locking or""" start="00:25:40.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""syntax highlighting of Talon files,""" start="00:25:42.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""and another that adds some additional""" start="00:25:46.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""functionality that I'm regrettably not yet""" start="00:25:50.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""familiar with.""" start="00:25:51.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Well, as an example with like how the""" start="00:25:55.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""sharding of the thoughts,""" start="00:25:56.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""like let's say, oh, how has my day went?""" start="00:25:59.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""It's went good for reasons 123,""" start="00:26:01.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""and bad for reasons ABC.""" start="00:26:04.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""And then later on, I might think,""" start="00:26:07.828" video="qanda-voice" id="subtitle"]]
+[[!template text="""oh, there's an, I also,""" start="00:26:08.460" video="qanda-voice" id="subtitle"]]
+[[!template text="""my day went good for reasons 456,""" start="00:26:10.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""then you, I can, then you jump up.""" start="00:26:14.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""And so the, like I found like,""" start="00:26:18.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""yeah, the org mode subheadings,""" start="00:26:19.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""because you're able to jump around,""" start="00:26:21.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""easily reorder them after the fact,""" start="00:26:25.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""the very streamlined approach to the stream""" start="00:26:32.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""of thought and the editing.""" start="00:26:33.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's right, extremely powerful.""" start="00:26:38.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: And even with the stream of thought,""" start="00:26:41.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""just because like, even when you're editing""" start="00:26:44.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""that in real time, like,""" start="00:26:45.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""oh, wait a minute, I thought of another""" start="00:26:47.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""reason that my day went good,""" start="00:26:48.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""even though I was talking about how it was""" start="00:26:50.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""going bad now. So you jump up.""" start="00:26:52.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""And then you do that. And then you have it.""" start="00:26:55.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""You easily summarize your thoughts and""" start="00:26:59.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""whatnot.""" start="00:27:00.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's right. And I think org mode is really""" start="00:27:07.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""ideal for that kind of interact.""" start="00:27:11.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""So yeah, I see your point in terms of that""" start="00:27:15.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""sort of a blend of generative writing and""" start="00:27:18.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""editing. And it's also kind of parallel to""" start="00:27:23.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""mind mapping. I use this mind mapping""" start="00:27:27.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""software called iThoughtsX where I'll""" start="00:27:32.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""generate all these children items,""" start="00:27:36.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""and then I'll drag them around and resort""" start="00:27:40.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""them. And they can have children of their own""" start="00:27:46.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""and grandchildren and so on,""" start="00:27:48.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""in terms of the levels of the nodes.""" start="00:27:50.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""And it's pretty much the same sort of thing""" start="00:27:54.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""with a nested hierarchy that you can have""" start="00:27:57.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""with org mode. I think having several""" start="00:28:02.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""alternate modes or modalities of playing with""" start="00:28:09.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""thoughts is useful. So sometimes I'll hit a""" start="00:28:13.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""wall and we're just not really generating""" start="00:28:17.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""anything in a text mode.""" start="00:28:21.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""But if I switch to using the mind mapping,""" start="00:28:25.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""just seeing it arranged with the connecting""" start="00:28:30.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""lines plays on a different part of the brain,""" start="00:28:34.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""I think, and it can be incredibly""" start="00:28:37.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""stimulatory. It can stimulate a lot of new""" start="00:28:40.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: That's something that I haven't messed around""" start="00:28:43.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""too much with is the mind mapping software,""" start="00:28:45.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""but...""" start="00:28:45.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: thoughts. Because the closest thing that we""" start="00:28:51.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""have to it in Emacs is Orgrimm in the in""" start="00:28:56.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""terms of like the 3D visualization of with""" start="00:29:00.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""Orgrimm GUI or""" start="00:29:03.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: UI. As well as being able to generate SVG""" start="00:29:10.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""diagrams and stuff like that,""" start="00:29:12.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""I think those 2 things would allow you stuff""" start="00:29:16.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""like Orgrimm or denote And then the diagrams""" start="00:29:20.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""would be the good ways of doing that in""" start="00:29:23.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""Emacs, but they don't have the mind map""" start="00:29:25.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""programs as well.""" start="00:29:27.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: They're not as well developed.""" start="00:29:30.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""There are a couple mind mapping packages,""" start="00:29:32.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""but they're not as advanced.""" start="00:29:37.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: The best ones were JavaScript web page that""" start="00:29:41.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""it that Emacs interacted with.""" start="00:29:43.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""Very well. And so they kind of,""" start="00:29:46.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""you know, worked around and had a little.""" start="00:29:49.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""Integration with the 2.""" start="00:29:51.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""So when you be jumping around your.""" start="00:29:53.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""When you'd be clicking on the web page it""" start="00:29:56.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""would be pointing you to different places and""" start="00:29:59.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""buffers okay like those are those the There's""" start="00:30:07.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""an like org-roam node program where it kind""" start="00:30:11.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""of shows the looks like a mind map.""" start="00:30:13.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""You can click and drag them a little bit,""" start="00:30:17.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""so it's a little interactive.""" start="00:30:18.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I'm not familiar with that.""" start="00:30:27.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""I'll have to look into that.""" start="00:30:30.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""That sounds very interesting.""" start="00:30:32.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: I found that I didn't know better,""" start="00:30:36.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""though, than Org-ROM, so it doesn't.""" start="00:30:38.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Why is that?""" start="00:30:43.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Well, 1 of the things I'm,""" start="00:30:47.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""I want to be able to, I don't like the""" start="00:30:51.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""feeling of being trapped inside org-mode""" start="00:30:53.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""documents. Like I want to be able to write,""" start="00:30:56.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""even though I don't really use Markdown and I""" start="00:30:58.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""like org-mode better than that.""" start="00:31:00.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""Like for instance, I also use the Koutline""" start="00:31:02.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""from the Hyperbole package.""" start="00:31:04.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""That's what my I got a talk on the stream of""" start="00:31:08.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""thought journaling for with Koutline and I""" start="00:31:12.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""was like, I just don't like the feeling of""" start="00:31:14.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""being tracked in 1 document and denote has""" start="00:31:18.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""the ability to it renames the file so you get""" start="00:31:21.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""keywords in like a PDF file so you can take""" start="00:31:26.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""so you can link to that with your notes""" start="00:31:28.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""without it all disappearing because it's not""" start="00:31:30.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""an org mode document. Plus the ability of""" start="00:31:36.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""having it run on multiple computers or with""" start="00:31:38.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""multiple people, the database kind of gets""" start="00:31:42.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""screwed up when you try running it under sync""" start="00:31:46.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""thing. Sync. More fragile.""" start="00:31:50.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Very interesting. Yeah.""" start="00:31:56.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""How far are you? So are you a regular""" start="00:32:03.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""practitioner of the Zettelkasten approach?""" start="00:32:06.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Trying to be. Incrementally improving it.""" start="00:32:12.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""I partly work too much like testing out the""" start="00:32:16.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""org-roam versus the notes to use it too much.""" start="00:32:20.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""So part of it is I just tweak with it too""" start="00:32:23.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""much before using it and then.""" start="00:32:24.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh, it's so fun to tweak it.""" start="00:32:28.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: I think mostly it's as I have these tools,""" start="00:32:32.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""I know where they are.""" start="00:32:33.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""So whenever I do need them,""" start="00:32:35.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""I can use them, even though I don't always""" start="00:32:37.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""use them.""" start="00:32:38.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: So I have about a thousand notes in my org""" start="00:32:43.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""room. Zettelkasten. I've actually,""" start="00:32:47.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""it's kind of cool that you can export it and""" start="00:32:50.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""move it into other programs.""" start="00:32:51.460" video="qanda-voice" id="subtitle"]]
+[[!template text="""I have moved it to Obsidian and played with""" start="00:32:56.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""it in Obsidian for a while,""" start="00:32:57.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""maybe added to it in Obsidian,""" start="00:32:59.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""moved it back to Orgrim.""" start="00:33:01.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""But I'm not convinced.""" start="00:33:07.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""I mean, that I think that Nicholas Luhmann""" start="00:33:10.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""was very successful with it because he spent""" start="00:33:13.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""5 hours a day or whatever working with it.""" start="00:33:15.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""And I think I would have to do,""" start="00:33:18.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""put in a similar amount of effort to get this""" start="00:33:21.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""kind of benefits that he gained from it.""" start="00:33:23.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""I'm waiting for somebody to do a scientific""" start="00:33:26.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""study, controlled trials to see,""" start="00:33:29.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""to prove whether there's a real benefit.""" start="00:33:31.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh, yeah. So with the Zettelkasten,""" start="00:33:37.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""one of the things where you have the 1 for the""" start="00:33:41.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""sections, and then the 1.1,""" start="00:33:42.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""or you know how the notes that it does that's""" start="00:33:47.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""different. The denote,""" start="00:33:48.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""it has the ability to use a hierarchy manage,""" start="00:33:52.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""which Org-ROM does everything it can to""" start="00:33:55.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""eliminate. But you can use them both in""" start="00:33:57.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""tandem. They call it signatures.""" start="00:33:59.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""And to me, 1 of the cool features of denote""" start="00:34:04.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""would be being able to use like the""" start="00:34:06.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""signatures for the things that make sense.""" start="00:34:09.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""Like 1 of the ideas is if you don't exactly""" start="00:34:13.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""know where this is, but you know,""" start="00:34:14.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""it goes to the section,""" start="00:34:15.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""you can just use the signature.""" start="00:34:17.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""Maybe don't even have too much of a file""" start="00:34:19.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""name. Like oh, this is just another thought""" start="00:34:22.679" video="qanda-voice" id="subtitle"]]
+[[!template text="""on, well you wouldn't use it for this,""" start="00:34:28.199" video="qanda-voice" id="subtitle"]]
+[[!template text="""but like my day went good for reasons 1,""" start="00:34:30.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""2, 3, 4, 5, and you could just use the denote""" start="00:34:33.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""signature to do 1, 2, 3,""" start="00:34:34.639" video="qanda-voice" id="subtitle"]]
+[[!template text="""4, 5, just as you have new ideas on like a""" start="00:34:37.659" video="qanda-voice" id="subtitle"]]
+[[!template text="""subject, or like cars are cars are not this""" start="00:34:41.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""car is nice because of reasons XYZ,""" start="00:34:43.659" video="qanda-voice" id="subtitle"]]
+[[!template text="""or these types of four-wheelers are nice""" start="00:34:46.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""because of XYZ. And you could just keep on""" start="00:34:48.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""doing that rather than having to get a new""" start="00:34:50.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""name for each 1 of those files.""" start="00:34:52.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""Or you could choose not to have it,""" start="00:34:55.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""but the ability to have it optionally in,""" start="00:34:57.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""to me, sounds like a really nice combo.""" start="00:35:01.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""Because then you""" start="00:35:03.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: could read. I agree. Yeah,""" start="00:35:06.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""I've actually imposed a hierarchy in my""" start="00:35:08.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""Zettelkasten and Orgrim.""" start="00:35:10.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""I just, I can't imagine having random ideas.""" start="00:35:17.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""They need some kind of structure.""" start="00:35:21.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""Always have some kind of parent node to""" start="00:35:27.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""attach them to.""" start="00:35:28.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: With the workflow I'm trying to develop with""" start="00:35:32.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""it, part of it is I'm just trying to optimize""" start="00:35:34.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""the workflow before it feels really,""" start="00:35:36.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""really, really good, and I don't want to""" start="00:35:38.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""tweak with it, or I don't know.""" start="00:35:39.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""Or maybe I don't always need the tool,""" start="00:35:42.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""but some of the distinctions it seems like""" start="00:35:45.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""that I want is, I want a daily journal For""" start="00:35:52.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""your stream of thoughts,""" start="00:35:53.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""then I want a separate 1 for your to do list""" start="00:35:56.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""because what you like.""" start="00:35:57.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""You want very different properties for each""" start="00:36:01.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""of those. Like for to-do lists,""" start="00:36:03.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""you want hierarchical,""" start="00:36:04.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""limited. But if you have more than 3 priority""" start="00:36:11.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""items, you don't have a priority item and""" start="00:36:13.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""it's not a good to-do list.""" start="00:36:14.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""It's just unordered thoughts.""" start="00:36:18.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: it's a wishful list, because you won't get""" start="00:36:23.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""most of those things done beyond the first 3.""" start="00:36:26.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: You're trying to- So And then when you're""" start="00:36:28.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""trying to do the other stuff,""" start="00:36:30.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""the stream of thoughts,""" start="00:36:31.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""all that stuff I probably don't want to go""" start="00:36:34.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""straight into like my Zettelkasten because""" start="00:36:36.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""some of those problems,""" start="00:36:37.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""like it's noisy, it might be redundant,""" start="00:36:42.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""you don't know how it fits into it because""" start="00:36:45.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""you haven't done that processing on it.""" start="00:36:46.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""This hasn't been refined.""" start="00:36:47.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""So, like, you don't want to refine it.""" start="00:36:53.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""Like, I find that spell checking is""" start="00:36:54.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""detrimental to me. I don't want spell""" start="00:36:56.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""checking. I don't want spell checking.""" start="00:36:58.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""I don't want syntax highlighting.""" start="00:37:00.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""I just want to talk or to just write.""" start="00:37:04.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""If I have mistakes, I can turn on that later,""" start="00:37:07.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""do it. Because otherwise,""" start="00:37:08.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""it will distract me and makes that process""" start="00:37:13.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yep, yep, definitely interferes with the""" start="00:37:20.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""flow.""" start="00:37:20.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: worse. So yeah, when you're so yeah when""" start="00:37:24.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""you're doing the getting things done like""" start="00:37:28.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""that's why I want them would be want would""" start="00:37:30.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""want them in separate files is that you want""" start="00:37:32.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""them like ordered, numbered lists,""" start="00:37:34.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""smaller. And then with the other,""" start="00:37:38.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""with the stream of thought,""" start="00:37:40.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""with journaling, you'd want it just""" start="00:37:42.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""unordered. Thoughts land wherever they may.""" start="00:37:45.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""Maybe not even like machine-generated""" start="00:37:49.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""timestamps, So you don't even have to worry""" start="00:37:51.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""about the names of it,""" start="00:37:52.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""as an example. So yeah,""" start="00:37:55.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""very different properties for what you want""" start="00:37:56.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""for both of those modalities.""" start="00:37:58.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: So you saw, perhaps, in that snippet that I""" start="00:38:06.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""had that at, you know,""" start="00:38:07.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""working on my to-do list at the start of the""" start="00:38:10.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""day, but in a certain sense that is not ideal""" start="00:38:13.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""time. I really haven't optimized the timing""" start="00:38:20.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""of assembly of the to-do list,""" start="00:38:22.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""I think, in retrospect.""" start="00:38:24.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""It's just by lifelong habit.""" start="00:38:27.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""I do that at the beginning of the day,""" start="00:38:29.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""but probably would be better to do it at""" start="00:38:32.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""night or the night before.""" start="00:38:34.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""And so you sort of prime your brain to go,""" start="00:38:38.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""just get up and go, go after those items.""" start="00:38:41.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""You were, you maybe you want to revise the""" start="00:38:46.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""items a little bit after sleeping on it,""" start="00:38:49.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""but after your subconscious has worked on""" start="00:38:52.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""those items. Do you have a daily routine that""" start="00:38:57.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""you follow in terms of generating those kind""" start="00:38:59.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""of lists?""" start="00:39:00.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: No. As I said, mostly I just got scaffolding""" start="00:39:05.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""for this stuff when I want to do it.""" start="00:39:08.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""I enjoy building the scaffolding and I know""" start="00:39:10.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""where the tools are when I need it.""" start="00:39:12.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""And I start using them when I need it,""" start="00:39:14.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""but I don't have it too consistent.""" start="00:39:17.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: So OK, so you've looked so far at denote and""" start="00:39:29.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""org-roam, and you're using k-outline.""" start="00:39:35.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""And are there other tools that you've""" start="00:39:39.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""explored?""" start="00:39:39.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: I've tried using whisper.el""" start="00:39:44.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""and nerd dictation to do What your talk was""" start="00:39:50.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""about? Speaking speech to text to see how""" start="00:39:53.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""that changes Because it does change what you""" start="00:39:56.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""think What you write down when you speak it""" start="00:40:01.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""rather than write it. Same thing as when""" start="00:40:05.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""you're thinking about when you eliminate the""" start="00:40:07.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""editing, it changes the way you write.""" start="00:40:08.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""When you have the spell checking,""" start="00:40:11.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""it changes the way you write to a much""" start="00:40:14.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""smaller degree. But that's the stuff I really""" start="00:40:20.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""haven't gotten working as well,""" start="00:40:23.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""or underdeveloped.""" start="00:40:25.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: So the dictated text winds up,""" start="00:40:30.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""I'll move it in. Often I move it into on""" start="00:40:37.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""Overleaf, this website for a lot of tech""" start="00:40:40.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""documents. I have a plug-in for Rightful,""" start="00:40:44.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""And I use that to clean up my word choices""" start="00:40:50.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""and some grammar. And I use Grammarly.""" start="00:40:56.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""I'll copy and paste. It just depends on the""" start="00:41:00.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""nature of the writing,""" start="00:41:01.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""how serious it is, how polished it has to be.""" start="00:41:05.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""If I, if it's really vital,""" start="00:41:12.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""like for a grant application or something,""" start="00:41:14.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""I'll paste that into Grammarly and work on""" start="00:41:16.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""trying to get the writing level to the lowest""" start="00:41:22.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""possible grade level to make it as clear as""" start="00:41:26.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""possible to as wide of an audience as""" start="00:41:30.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""possible. 1 of the things I kind""" start="00:41:34.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: of wish with all the spell checking grammarly""" start="00:41:38.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""is I kind of wish you could say,""" start="00:41:40.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""hey, what would the subtle cast in person""" start="00:41:48.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""think of what I wrote who what would einstein""" start="00:41:52.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""think of what I wrote because rather than""" start="00:41:54.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""just trying to make 1 uniform way of talking""" start="00:41:57.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""it's like people talk differently and that's""" start="00:41:59.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""an advantage and I can't I really wish like""" start="00:42:04.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""you maybe these GPT programs could do well.""" start="00:42:07.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""I really wish it could help you with the""" start="00:42:10.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""grammar, that maybe give you thoughts on what""" start="00:42:16.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""your notes are. What does this person think""" start="00:42:18.460" video="qanda-voice" id="subtitle"]]
+[[!template text="""of your thoughts? What does this person think""" start="00:42:20.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""of your thoughts? Well,""" start="00:42:20.457" video="qanda-voice" id="subtitle"]]
+[[!template text="""does this person think of your thoughts?""" start="00:42:20.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""Well, does this person think of your""" start="00:42:22.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""thoughts?""" start="00:42:22.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's true. Yeah, I could probably do that""" start="00:42:27.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""even through chat GDP now.""" start="00:42:31.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""I haven't spent time trying that out.""" start="00:42:35.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""But I bet that capabilities are already.""" start="00:42:39.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""It would be nice if it was like built in to""" start="00:42:44.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""Emacs, right? It's a package.""" start="00:42:46.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""Yeah. That'd be very cool.""" start="00:42:49.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Grammarly have some sort of,""" start="00:42:52.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""like, the grammar where they help you the way""" start="00:42:55.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""you write. Like, for instance,""" start="00:42:57.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""removing redundant words.""" start="00:42:59.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""And Yeah, it's supposed to be like beyond""" start="00:43:02.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""just spell checking, right?""" start="00:43:04.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. So, and there's actually a Grammarly""" start="00:43:08.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""package for Emacs, and you get some of the""" start="00:43:13.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""functionality out of it.""" start="00:43:14.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""I've paid for the subscription to get the""" start="00:43:17.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""advanced features, but I've maybe I don't""" start="00:43:21.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""have my configuration set up correctly.""" start="00:43:23.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""I just found it was easier to copy and paste""" start="00:43:27.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""a paragraph at a time into the desktop""" start="00:43:31.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""application and it will go through and find""" start="00:43:36.460" video="qanda-voice" id="subtitle"]]
+[[!template text="""those redundancies, junk English.""" start="00:43:38.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: It would be really interesting trying to have""" start="00:43:48.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""1 of these That was my problem with a lot of""" start="00:43:52.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""the grammarly type Programs is I'm I want""" start="00:43:55.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""something that would do that like be real""" start="00:43:57.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""interesting seeing 1 that's like an old""" start="00:43:59.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""English type thing or like Lumen person where""" start="00:44:03.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""it's just like how does this person write and""" start="00:44:06.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""Because it would be it would spit out""" start="00:44:09.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""something a lot different.""" start="00:44:11.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""Just different. Like, yeah,""" start="00:44:13.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""you put different people.""" start="00:44:14.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Most definitely, yes. They would have a""" start="00:44:17.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""completely different thinking and writing""" start="00:44:20.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""style. And so the purpose of doing that would""" start="00:44:28.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""be to stimulate A new way of thinking or""" start="00:44:34.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""writing I guess on your part""" start="00:44:36.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: the purpose of writing is to communicate It""" start="00:44:40.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""and writing you know 1 of the targets for""" start="00:44:43.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""that could be yourself so it's like I'd much""" start="00:44:47.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""rather have a comprehensible sentence than a""" start="00:44:50.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""truly correct 1. 1 of those is far more""" start="00:44:57.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""valuable and far more correct English or""" start="00:45:00.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, one's more effective at communicating""" start="00:45:06.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""to yourself. Yes.""" start="00:45:08.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: language. Well, one's using the tool,""" start="00:45:11.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""one's the other you're trying to be used by""" start="00:45:15.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""the tool. And they're not the same thing.""" start="00:45:19.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's true. Well, I view myself as being""" start="00:45:29.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""responsible for my writing and being the""" start="00:45:35.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""final judge of it and as a scientist I have""" start="00:45:40.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""to my mantra is it's got to be clear and then""" start="00:45:49.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""precise and then concise in that order.""" start="00:45:52.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""And I claim that, you know,""" start="00:45:56.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""that's the order with which I go through""" start="00:45:58.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""doing revisions. Clarity is,""" start="00:46:01.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""you know, if it's not clear,""" start="00:46:02.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""it's useless. It's got to be clear to me,""" start="00:46:05.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""but it's got to be clear to a lot of people""" start="00:46:08.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""for whom English is not a first language.""" start="00:46:10.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""And then after that, I got to worry about""" start="00:46:15.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""precision and then conciseness,""" start="00:46:19.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""but those can't be done at the expense of""" start="00:46:24.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""clarity. So it's quite a battle.""" start="00:46:27.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: That goes back on the to-do list,""" start="00:46:32.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""where it's like if you have more than 3 items""" start="00:46:35.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""like here the purpose of doing that is to""" start="00:46:39.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""help or grant of a to-do list is help is to""" start="00:46:43.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""Have you help choose what you're going to do""" start="00:46:45.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""for the day. Which is why if you have more""" start="00:46:47.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""than 3 items, if you have 50 items on there,""" start="00:46:50.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""you're not going to get 50 of those items""" start="00:46:52.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""done. So maybe you pick the easiest ones to""" start="00:46:55.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""do, not necessarily the ones that you want or""" start="00:46:58.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""need to be done. So it's like the process of""" start="00:47:03.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""choosing those, like, I don't know,""" start="00:47:06.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""like I found that a very good rules,""" start="00:47:07.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""like up to 3 priority items if you,""" start="00:47:10.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""and then also when you look back and you see""" start="00:47:13.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""that you did those 3 items,""" start="00:47:14.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""Who cares about this? I'd rather get those 3""" start="00:47:18.460" video="qanda-voice" id="subtitle"]]
+[[!template text="""items done than any number of secondary""" start="00:47:20.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""tasks.""" start="00:47:20.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yes, I, yeah, you're very,""" start="00:47:26.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""very right about that.""" start="00:47:28.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""I don't, I used to, you know,""" start="00:47:32.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""use a pattern of assigning letters.""" start="00:47:36.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""And so you have like, you know,""" start="00:47:39.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""based on like a hierarchy of,""" start="00:47:41.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""you've got the urgent and important,""" start="00:47:43.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""of course, that you got to deal with those.""" start="00:47:47.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""And then the next thing down is the important""" start="00:47:50.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""and so on. But I tend to just generate these""" start="00:48:00.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""terribly long lists that most of those items""" start="00:48:03.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""would go on what is known as a grass catchers""" start="00:48:06.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""list of things that you may get to someday,""" start="00:48:09.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""but there's no way you can get to them today.""" start="00:48:11.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""But I feel compelled, I need to capture them.""" start="00:48:16.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""I may want to do them eventually.""" start="00:48:18.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""They wind up on my list.""" start="00:48:20.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh yeah, my idea on that is like with a""" start="00:48:24.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""Zettelkasten where you have the day thoughts""" start="00:48:26.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""and the day journal, then you have your""" start="00:48:29.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""Zettelkasten which I don't think should have""" start="00:48:31.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""too close of a connection because one's a lot""" start="00:48:34.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""more, what's the word?""" start="00:48:37.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: It's a knowledge base.""" start="00:48:40.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Optimized. Yes, one's more processed.""" start="00:48:43.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""Yeah, that's the word.""" start="00:48:45.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""Yeah, one's actually much more processed.""" start="00:48:47.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""The other is you don't want that process""" start="00:48:50.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""because you want it to flow from your head""" start="00:48:52.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""with as little friction as possible.""" start="00:48:54.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""The other 1 you want to be processed so that""" start="00:48:59.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""when you look it up and stuff like that's""" start="00:49:01.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""more efficient Same thing with your to-do""" start="00:49:04.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""things. So like oh, yeah,""" start="00:49:06.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""I guess there's 1 more Category like I""" start="00:49:09.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""thought I found my 3 favorite way rather than""" start="00:49:11.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""like priority 123 is primary tasks which""" start="00:49:15.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""basically generally goes up to 3,""" start="00:49:17.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""secondary tasks, and then I like to have a""" start="00:49:20.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""third category, unplanned tasks,""" start="00:49:22.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""and I just have those wrote down in a heading""" start="00:49:25.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""in an org mode file, and then I put the tasks""" start="00:49:28.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""in there, rather than using the agenda,""" start="00:49:32.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""like too much, I don't know,""" start="00:49:33.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""just I found that that was my favorite way of""" start="00:49:40.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""doing it and then you have like another file""" start="00:49:43.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""that would just be your dump of anything you""" start="00:49:47.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""want to do and that would be like that you""" start="00:49:51.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""could pull from to get your day or I guess""" start="00:49:57.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""something that's actually better than a day""" start="00:49:59.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""is doing it all by a week at a time I found""" start="00:50:01.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""that that's actually a lot nicer because""" start="00:50:03.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""thinking about what you do in a week seems""" start="00:50:06.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""like a nicer unit, where you have a week,""" start="00:50:09.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""then you have your day,""" start="00:50:10.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""and then you have the 3 categories of""" start="00:50:13.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""priority, secondary, and unplanned.""" start="00:50:16.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""At least that's been my favorite iteration on""" start="00:50:20.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: thought process workflow.""" start="00:50:30.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: the week of the to-do I had""" start="00:50:31.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: a colleague that was very effective at""" start="00:50:33.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""planning on a weekly basis and he would just""" start="00:50:37.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""get his weekly list of things to get done and""" start="00:50:41.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""he was very good at pounding through that""" start="00:50:43.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""list and getting them done.""" start="00:50:45.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""I have been too much of a day-oriented person""" start="00:50:49.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""and a week-oriented person to adapt his""" start="00:50:54.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""approach, but I've been considering that too.""" start="00:50:56.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""I think what I don't do enough of is pulling""" start="00:51:03.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""back to the month level,""" start="00:51:05.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""semester level, year level,""" start="00:51:08.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""5 year level, 10 year level.""" start="00:51:10.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""And...""" start="00:51:11.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: That's the advantage of finding it by a week""" start="00:51:16.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""is like you can have like so you'd have your""" start="00:51:17.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""week and then maybe you have like 1 section""" start="00:51:20.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""after Friday or last day of the week and this""" start="00:51:24.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""is like your this is just your like staging""" start="00:51:27.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""so this is where you stage all the tasks and""" start="00:51:30.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""then what like you can just stay in your""" start="00:51:32.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""staging write them all down and then use alt""" start="00:51:37.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""and your arrow keys to quickly reorder all of""" start="00:51:39.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""them in the week and then when you're looking""" start="00:51:43.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""at 1 day and you're just looking at ordering""" start="00:51:45.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""everything well it makes a lot of sense when""" start="00:51:48.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""you just say, I don't really want to do that.""" start="00:51:51.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""Like I want this done this week.""" start="00:51:53.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""I don't necessarily want it done on this day.""" start="00:51:56.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""So it just, that's why I found that the week""" start="00:51:58.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""approach works a lot nicer even.""" start="00:52:00.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: of a staging time you like schedule some time""" start="00:52:09.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""in your week to do the staging.""" start="00:52:11.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah. Is that way The staging is more of just""" start="00:52:14.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""like, these are the things I would like to""" start="00:52:16.840" video="qanda-voice" id="subtitle"]]
+[[!template text="""get done. And then when you schedule it,""" start="00:52:19.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""then you kind of schedule it by just using""" start="00:52:23.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""the Alt-Left key, the Alt-Arrow keys to just,""" start="00:52:26.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""oh, I want this done. It looks like this""" start="00:52:28.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""would work really good on this day.""" start="00:52:29.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""This 1 looks like it would work on this day.""" start="00:52:31.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: A, you still utilize org agenda?""" start="00:52:38.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: I try to, I don't know,""" start="00:52:45.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""I found that it works at least better without""" start="00:52:49.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""it. Yeah, that's fine.""" start="00:52:52.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""Because that way I also get a log of""" start="00:52:54.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""everything I've done, which I can't find a""" start="00:53:00.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""way that, it seems easier to just make new""" start="00:53:03.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""files for it. And rather than,""" start="00:53:06.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""like you could use it with Org Agenda,""" start="00:53:08.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""but like 1 of the things that you want is""" start="00:53:11.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""with it is to look back at it,""" start="00:53:14.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""reflect. And so like if you have the,""" start="00:53:18.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""if you have, if you open up the file with 2""" start="00:53:23.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""levels or 3 levels of headings to where you""" start="00:53:25.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""just see the priority task,""" start="00:53:26.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""you can get a very nice overview of saying,""" start="00:53:29.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""I did my priority task this day.""" start="00:53:33.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""So you get the numbers next to the things.""" start="00:53:38.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""And so you can easily just say,""" start="00:53:40.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""I've done this. I mean,""" start="00:53:41.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""it would be nice if I could figure out a way""" start="00:53:43.360" video="qanda-voice" id="subtitle"]]
+[[!template text="""of doing agenda to give me percentages.""" start="00:53:45.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""But I haven't figured that out.""" start="00:53:50.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""Seeing the granular level,""" start="00:53:54.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""I can easily scan that with my eyes.""" start="00:53:57.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""So I just did it by hand rather than the""" start="00:53:59.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""agenda.""" start="00:53:59.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I've, I've tried to use agenda a few""" start="00:54:06.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""times and pretty seriously,""" start="00:54:10.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""but I keep bouncing off it.""" start="00:54:14.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""I think I get too many things built in or""" start="00:54:17.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""scheduled and I just don't get to them.""" start="00:54:21.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""I feel bad about it and I wind up abandoning""" start="00:54:26.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""it. So that's 1 area where there's probably""" start="00:54:31.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""some potential for optimizing and making that""" start="00:54:34.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""work better. There's a lot of customizing you""" start="00:54:40.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""can do with Agenda. It's amazing.""" start="00:54:42.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: For me, it was though,""" start="00:54:44.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""I wanted there to be a separation between the""" start="00:54:48.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""daily to-do lists and like your grab bag""" start="00:54:52.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""which I think agenda works a lot better for a""" start="00:54:54.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""grab bag. I want a nice way of looking back""" start="00:54:58.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""at my to-do daily to-do logs.""" start="00:55:01.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""So I kind of want them to be separated,""" start="00:55:05.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""so I just did them separate.""" start="00:55:08.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""With the agenda, I could never figure out""" start="00:55:12.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""exactly how I want that to work,""" start="00:55:14.060" video="qanda-voice" id="subtitle"]]
+[[!template text="""how the files would look,""" start="00:55:15.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""and how all the Emacs settings would interact""" start="00:55:18.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""with it. I mean, I'm sure I could,""" start="00:55:21.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""but that's why I opted for weekly files.""" start="00:55:28.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""Or at least That's my most refined idea on""" start="00:55:34.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""the process.""" start="00:55:35.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's a good idea. So I've taken my approach""" start="00:55:41.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""is a little different that I'm generating""" start="00:55:43.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""this text on a daily basis and popping it""" start="00:55:46.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""into this to 1 document file per day and a""" start="00:55:52.660" video="qanda-voice" id="subtitle"]]
+[[!template text="""like a diary on Overleaf as a big so it winds""" start="00:55:59.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: sections""" start="00:56:01.950" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: up being 365 and where every month is a""" start="00:56:05.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""chapter and it's compiled quickly enough even""" start="00:56:11.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""though it's often up to 1,000""" start="00:56:13.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""pages long by the end of the year.""" start="00:56:14.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""And I have all these, of course,""" start="00:56:17.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""with the PDF, I can search through it.""" start="00:56:19.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""So that's not as you can't do the kind of""" start="00:56:22.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""really sophisticated searching that you can""" start="00:56:24.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""do with Org Mode. But just doing that,""" start="00:56:29.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""It sure has been very helpful in digging up""" start="00:56:33.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""information, like the little protocols on how""" start="00:56:39.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""I attack, accomplish a certain task that I""" start="00:56:42.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""have to do a year later,""" start="00:56:45.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""or to have a record of what I did on a""" start="00:56:50.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""certain day and then somebody above me might""" start="00:56:54.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""be trying to hold me to account what got""" start="00:56:57.100" video="qanda-voice" id="subtitle"]]
+[[!template text="""done. I can look that up pretty very quickly.""" start="00:56:59.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""It's documented. I find that to be just any""" start="00:57:05.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""kind of thorough documentation system is very""" start="00:57:09.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: I also mess with having it all in 1 file""" start="00:57:16.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""rather than by a weak file.""" start="00:57:17.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: useful. And at least what I did.""" start="00:57:20.140" video="qanda-voice" id="subtitle"]]
+[[!template text="""I ran into trouble with,""" start="00:57:21.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""like, once you get a lot of items,""" start="00:57:25.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""like if you have 1,000""" start="00:57:27.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""items, headings, I've had org files with""" start="00:57:30.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""1,000 headings. It can be so hard to scroll""" start="00:57:33.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""through. Maybe it's some limitations I'm run""" start="00:57:38.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""into with the Emacs being single threaded.""" start="00:57:42.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: At least with, yeah. Yeah.""" start="00:57:49.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""It was like, that's 1 of the things is like,""" start="00:57:52.420" video="qanda-voice" id="subtitle"]]
+[[!template text="""how exactly do you want this,""" start="00:57:54.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""the information structured because it can""" start="00:57:55.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""change how it's retrieved.""" start="00:57:56.820" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Ooh, most definitely. Most definitely.""" start="00:58:00.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: So as an example, when I was doing the daily""" start="00:58:08.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""logs and I put it all in the date and then""" start="00:58:14.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""the priority, secondary,""" start="00:58:15.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""unplanned tasks, and then I had it stay at""" start="00:58:21.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""that, get auto expanded by that level by""" start="00:58:24.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""default so I didn't see the individual task""" start="00:58:27.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""and you and then I had a but And then it""" start="00:58:30.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""would say like I complete 205 or something""" start="00:58:33.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""like that of secondary tasks.""" start="00:58:34.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""And then just being able just to quickly scan""" start="00:58:38.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""all the days and say, oh,""" start="00:58:39.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""it just, the feedback you get from that is""" start="00:58:42.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""worth a lot. And I don't think it's""" start="00:58:46.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""something, it's not something I could think""" start="00:58:47.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""of how you do an agenda.""" start="00:58:49.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""Even though I got done in the text files just""" start="00:58:53.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""because you get that doesn't expand all the""" start="00:58:57.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""way so you so you can quickly just see on""" start="00:58:59.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""this day I did this well on this day I did""" start="00:59:01.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""this well all within and 4 lines per day.""" start="00:59:05.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""So it's not, that doesn't,""" start="00:59:11.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""that's not very visually verbose.""" start="00:59:12.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""Probably about as visually verbose as you""" start="00:59:16.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""want it. They're not super long.""" start="00:59:18.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""You easily see the 2 of 3 and stuff like that""" start="00:59:23.000" video="qanda-voice" id="subtitle"]]
+[[!template text="""that you get done so you can quickly and say,""" start="00:59:24.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""oh well, these are the days where I got my""" start="00:59:29.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""primary tasks done or this week,""" start="00:59:31.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""and this day I didn't do it well and you""" start="00:59:36.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""could helps you correlate like your feelings""" start="00:59:38.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""with your to-do lists and journals and""" start="00:59:42.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""whatnot.""" start="00:59:42.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah I think that's very powerful.""" start="00:59:48.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""Because it's summarizing capability.""" start="00:59:53.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""It allows you to, you know,""" start="00:59:57.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""pull back and get an overview.""" start="01:00:00.656" video="qanda-voice" id="subtitle"]]
+[[!template text="""Get an overview.""" start="01:00:01.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: And yeah, as I said, it's like the feedback""" start="01:00:07.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""from that almost when I did that,""" start="01:00:10.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""it feels like half the reason or should be""" start="01:00:12.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""like half the reason is and it's something""" start="01:00:14.580" video="qanda-voice" id="subtitle"]]
+[[!template text="""that I don't if you use the agenda as it is,""" start="01:00:19.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""you wouldn't, I don't know how you would get""" start="01:00:21.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""it, like saying, like looking at the week by""" start="01:00:23.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""week basis, breakdowns,""" start="01:00:25.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""you might be able to get like percentages,""" start="01:00:27.120" video="qanda-voice" id="subtitle"]]
+[[!template text="""which would be nice. Like I did this well,""" start="01:00:30.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""or like habit, I don't,""" start="01:00:33.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""there might be things that could offer you""" start="01:00:35.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""but. Yeah,""" start="01:00:39.700" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: so I'm pretty obsessed about tracking effort""" start="01:00:46.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""on various kinds of projects,""" start="01:00:48.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""or various kinds of activities,""" start="01:00:52.020" video="qanda-voice" id="subtitle"]]
+[[!template text="""and to get some feedback in that regard.""" start="01:00:57.880" video="qanda-voice" id="subtitle"]]
+[[!template text="""And then you, but you got the,""" start="01:00:59.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""So I define a project as anything that""" start="01:01:02.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""requires work at different points in time,""" start="01:01:06.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""more than 1""" start="01:01:07.040" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: time. I'll email you my org mode template""" start="01:01:15.300" video="qanda-voice" id="subtitle"]]
+[[!template text="""that I made that demonstrates that.""" start="01:01:17.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""I don't know if you, do you have your email""" start="01:01:22.200" video="qanda-voice" id="subtitle"]]
+[[!template text="""in your talk notes or anything?""" start="01:01:24.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay. I think I should have it on the first""" start="01:01:29.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""slide. There should be my email address.""" start="01:01:31.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""I can add it to my talk notes.""" start="01:01:40.560" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Okay. Would you want me to show it to you at""" start="01:01:46.920" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: that'd be great.""" start="01:01:48.940" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: all? Sure, All right, let's see.""" start="01:01:52.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""I'm going to share screen button,""" start="01:02:20.842" video="qanda-voice" id="subtitle"]]
+[[!template text="""right? There's a share screen button,""" start="01:02:21.220" video="qanda-voice" id="subtitle"]]
+[[!template text="""right?""" start="01:02:21.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, so, let's see.""" start="01:02:26.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, I'm all. That's the right button.""" start="01:02:59.243" video="qanda-voice" id="subtitle"]]
+[[!template text="""Can you not share the screen on this?""" start="01:03:04.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: I have something going here.""" start="01:03:08.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""Let's see. I have, I see some stuff on here.""" start="01:03:13.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""Wonder if I'm still active.""" start="01:03:18.160" video="qanda-voice" id="subtitle"]]
+[[!template text="""It shows share screen.""" start="01:03:21.180" video="qanda-voice" id="subtitle"]]
+[[!template text="""Cancel.""" start="01:03:22.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Maybe they just did it through OBS.""" start="01:03:28.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Maybe I only have permission to share.""" start="01:03:47.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""I can put my email address in the chat.""" start="01:03:53.900" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: I guess I'll just email it to you,""" start="01:03:59.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""but Let's see. Yeah, I think the way that""" start="01:04:06.600" video="qanda-voice" id="subtitle"]]
+[[!template text="""they did it on the Any of the other videos if""" start="01:04:11.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""they shared the screen they just shared the""" start="01:04:13.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""webcam they just took over the webcam with""" start="01:04:17.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""OBS and shared what they wanted with it.""" start="01:04:20.380" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh, okay.""" start="01:04:22.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: At least I'm guessing.""" start="01:04:24.720" video="qanda-voice" id="subtitle"]]
+[[!template text="""Yeah, I'll give that to you.""" start="01:04:26.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""Okay. I guess I'll let you go watch the rest""" start="01:04:31.080" video="qanda-voice" id="subtitle"]]
+[[!template text="""of the Emacs videos.""" start="01:04:32.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: This has been a great conversation.""" start="01:04:34.640" video="qanda-voice" id="subtitle"]]
+[[!template text="""Thank you very much. I appreciate your""" start="01:04:37.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""willingness to share your thoughts on this""" start="01:04:39.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""matter. This is vital,""" start="01:04:42.980" video="qanda-voice" id="subtitle"]]
+[[!template text="""time management. It's a kind of key aspect of""" start="01:04:48.260" video="qanda-voice" id="subtitle"]]
+[[!template text="""life.""" start="01:04:48.440" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Oh yeah. The way the how the function.""" start="01:04:54.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""Reasons to use emacs is to use the keyboard""" start="01:05:03.320" video="qanda-voice" id="subtitle"]]
+[[!template text="""is. It's not to speed you up.""" start="01:05:08.240" video="qanda-voice" id="subtitle"]]
+[[!template text="""Like, yeah, that's nice.""" start="01:05:09.520" video="qanda-voice" id="subtitle"]]
+[[!template text="""But it keeps you in the stream,""" start="01:05:12.280" video="qanda-voice" id="subtitle"]]
+[[!template text="""keeps you in the flow state and which then""" start="01:05:25.400" video="qanda-voice" id="subtitle"]]
+[[!template text="""just makes you think better and yeah and the""" start="01:05:32.780" video="qanda-voice" id="subtitle"]]
+[[!template text="""thing with that is you I have you I have no""" start="01:05:35.540" video="qanda-voice" id="subtitle"]]
+[[!template text="""idea what the limits of that would be.""" start="01:05:37.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""Because you think, because yes,""" start="01:05:39.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""it's not about beating up how many words you""" start="01:05:42.740" video="qanda-voice" id="subtitle"]]
+[[!template text="""say a minute. I mean that's nice and all,""" start="01:05:44.860" video="qanda-voice" id="subtitle"]]
+[[!template text="""But when you start doing that,""" start="01:05:46.680" video="qanda-voice" id="subtitle"]]
+[[!template text="""when you start removing all these friction""" start="01:05:48.340" video="qanda-voice" id="subtitle"]]
+[[!template text="""points, all of a sudden the number,""" start="01:05:52.500" video="qanda-voice" id="subtitle"]]
+[[!template text="""quality, and types of thoughts you get start""" start="01:05:57.800" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: That's right.""" start="01:06:01.620" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: increasing. Which is the goal.""" start="01:06:03.480" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay. Well, thank you very much.""" start="01:06:14.960" video="qanda-voice" id="subtitle"]]
+[[!template text="""Enjoy the rest of the meeting.""" start="01:06:17.760" video="qanda-voice" id="subtitle"]]
+[[!template text="""[Speaker 2]: Will do.""" start="01:06:19.280" video="qanda-voice" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20voice%3A%20Enhancing%20productivity%20with%20voice%20computing)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/voice-before.md b/2023/info/voice-before.md
new file mode 100644
index 00000000..6f5b9b90
--- /dev/null
+++ b/2023/info/voice-before.md
@@ -0,0 +1,37 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 19-min talk; Q&A: BigBlueButton conference room
+Status: TO_INDEX_QA
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="voice-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="voice-mainVideo" data="""
+00:00.000 Introduction
+00:37.400 Three activities in voice computing
+01:02.560 Talk is not about ... and about ...
+01:53.520 Motivations
+03:33.240 Data
+03:58.680 Voice In in the Chrome Store
+04:25.628 Works in web pages with text areas
+05:16.880 Built-in commands in Voice In Plus
+06:41.740 Common errors made by Voice In
+08:14.760 Custom speech-to-text commands
+09:59.420 Custom speech-to-commands
+10:37.540 Introducing Talon Voice
+12:28.400 Talon GUI
+14:02.540 Talon file with web scope
+15:34.015 Terminals on remote and virtual machines
+16:52.500 Recommendations
+18:17.720 Acknowledgements
+
+"""]]<div></div>Duration: 18:49 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.opus">Download --main.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/vYHj7iSYhUbTxDv93NvzzY">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="voice-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="voice-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus"></audio></div><div></div>Duration: 1:07:47 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus">Download --answers.opus (34MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm">Download --answers.webm (205MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/voice-nav.md b/2023/info/voice-nav.md
new file mode 100644
index 00000000..9fedf97e
--- /dev/null
+++ b/2023/info/voice-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/matplotllm">MatplotLLM, iterative natural language data visualization in org-babel</a>
+Next by track: <a href="/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/web-after.md b/2023/info/web-after.md
new file mode 100644
index 00000000..96ebb81b
--- /dev/null
+++ b/2023/info/web-after.md
@@ -0,0 +1,850 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="web-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Overview""" start="00:00:00.000" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""Hello, I am Yuchen, and I will be talking about""" start="00:00:00.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""how Emacs may be used to save user freedom on the web.""" start="00:00:03.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I will begin by describing the background issues,""" start="00:00:06.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""followed by solutions outside of Emacs.""" start="00:00:09.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Then I will move into the main business of describing""" start="00:00:12.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""several ways to address the issues using Emacs,""" start="00:00:14.880" video="mainVideo-web" id="subtitle"]]
+[[!template text="""including free clients in Emacs, web browsers,""" start="00:00:17.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""also known as universal clients in Emacs,""" start="00:00:20.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""approaches using Emacs web server and Emacs web framework,""" start="00:00:23.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which allows one to write an Emacs package""" start="00:00:27.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and get a web app for free,""" start="00:00:29.320" video="mainVideo-web" id="subtitle"]]
+[[!template text="""as well as using Emacs as a Firefox extension.""" start="00:00:30.760" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""Background problems""" start="00:00:35.680" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""OK, let's now move on to""" start="00:00:35.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""the background issues for this topic.""" start="00:00:37.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Many of you probably already know what is free software.""" start="00:00:39.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It is software that respects four user freedoms,""" start="00:00:42.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""including freedom 0, which is the freedom to use,""" start="00:00:45.481" video="mainVideo-web" id="subtitle"]]
+[[!template text="""freedom 1 is the freedom to study and modify a program,""" start="00:00:49.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""freedom 2 is the freedom to""" start="00:00:52.279" video="mainVideo-web" id="subtitle"]]
+[[!template text="""distribute exact copies of a program,""" start="00:00:54.488" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and freedom 3 is the freedom to distribute modified copies.""" start="00:00:57.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Different environments have different norms""" start="00:01:01.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""with regards to user freedom.""" start="00:01:04.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, GNU/Linux distributions""" start="00:01:06.820" video="mainVideo-web" id="subtitle"]]
+[[!template text="""default to free software,""" start="00:01:11.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""even though the official kernel Linux""" start="00:01:13.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""contains non-free code, like non-free firmware.""" start="00:01:15.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""What I mean is, people generally expect free software""" start="00:01:18.420" video="mainVideo-web" id="subtitle"]]
+[[!template text="""in these environments.""" start="00:01:23.060" video="mainVideo-web" id="subtitle"]]
+[[!template text="""There's plenty of free software""" start="00:01:25.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""built on other free software,""" start="00:01:27.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so generally people can accomplish tasks""" start="00:01:29.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""using free software only.""" start="00:01:31.220" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Emacs, by comparison, is even better.""" start="00:01:33.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It has freedom built-in, as it is highly customizable""" start="00:01:37.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""with self-documenting configurations.""" start="00:01:41.220" video="mainVideo-web" id="subtitle"]]
+[[!template text="""When a Lisp form is evaluated by the user in Emacs,""" start="00:01:44.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""the change is instantly reflected in the environment.""" start="00:01:49.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Thus, it converts users to hackers effortlessly.""" start="00:01:53.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""From writing setq statements,""" start="00:01:56.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is similar to configurations""" start="00:01:58.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""in the majority of other programs,""" start="00:02:00.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to writing functions,""" start="00:02:01.960" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which are building blocks of Elisp features,""" start="00:02:03.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to writing features and publishing packages,""" start="00:02:05.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""it is a natural progression.""" start="00:02:08.140" video="mainVideo-web" id="subtitle"]]
+[[!template text="""In this sense, Emacs perhaps has""" start="00:02:10.099" video="mainVideo-web" id="subtitle"]]
+[[!template text="""the most gentle learning curve for hackers.""" start="00:02:15.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""On the other hand, the default license""" start="00:02:18.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""in the Emacs community""" start="00:02:21.100" video="mainVideo-web" id="subtitle"]]
+[[!template text="""is GNU General Public License version 3 or later,""" start="00:02:22.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is the best free software license""" start="00:02:26.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""apart from the Affero license.""" start="00:02:29.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Now let's move on to web browsers,""" start="00:02:32.300" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which by contrast does not default to freedom.""" start="00:02:35.020" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For one thing, free software JavaScript projects""" start="00:02:39.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""default to Expat license,""" start="00:02:42.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is also commonly known as the MIT license,""" start="00:02:45.780" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is a lax permissive license that could be exploited""" start="00:02:49.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""as developers could write non-free derivatives""" start="00:02:53.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and subjugate user freedom.""" start="00:02:55.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""This also contributes to the JavaScript trap.""" start="00:02:59.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Most popular web browsers nowadays simply download and run""" start="00:03:03.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""any JavaScript code requested by the web page.""" start="00:03:06.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Generally speaking, there are two camps on this issue.""" start="00:03:10.820" video="mainVideo-web" id="subtitle"]]
+[[!template text="""One side would say JavaScript is simply part of life,""" start="00:03:15.320" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and an integral part of the so-called modern web.""" start="00:03:19.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Just accept it, and there is no point in fighting it.""" start="00:03:22.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Indeed, it can be frustrating when greeted by""" start="00:03:25.300" video="mainVideo-web" id="subtitle"]]
+[[!template text="""&quot;This page requires JavaScript and cookies to continue,&quot;""" start="00:03:28.388" video="mainVideo-web" id="subtitle"]]
+[[!template text="""or even a blank page when opening a web page""" start="00:03:31.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""while disabling JavaScript.""" start="00:03:34.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""The other camp takes a more principled position""" start="00:03:38.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and says JavaScript is unnecessary.""" start="00:03:42.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I mean, people use the web mainly for""" start="00:03:44.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""database-like operations""" start="00:03:47.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to interact with data stored on other people's computers,""" start="00:03:48.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""like querying, creating, updating, deleting.""" start="00:03:51.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I mean, 99% of the things happen in getting data,""" start="00:03:55.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""including reading news, watching videos,""" start="00:03:58.960" video="mainVideo-web" id="subtitle"]]
+[[!template text="""downloading images, etc.,""" start="00:04:01.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and posting data, including publishing""" start="00:04:03.340" video="mainVideo-web" id="subtitle"]]
+[[!template text="""this sort of materials, publishing news comments, videos.""" start="00:04:06.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Why does this need any programs""" start="00:04:10.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to do funny computations, right?""" start="00:04:12.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Modern web browsers are also a pain to use.""" start="00:04:16.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""They are the opposite to Emacs""" start="00:04:19.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""in terms of customization capabilities.""" start="00:04:21.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Such problems on the client side""" start="00:04:26.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""is the main focus of this talk.""" start="00:04:29.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""On the server side, the issue is known as SaaSS,""" start="00:04:31.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""service as a software substitute.""" start="00:04:34.320" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It is about doing computing for users""" start="00:04:38.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""on other people's computers,""" start="00:04:42.421" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which the user has no visibility, let alone control.""" start="00:04:44.541" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Examples include translation or photo editing""" start="00:04:48.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""in so-called web applications.""" start="00:04:51.941" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Another example would be web applications""" start="00:04:55.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""make recommendations based on user data""" start="00:04:59.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and suggest what the users read or watch next.""" start="00:05:02.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""On the one hand, SaaSS is an intractable problem""" start="00:05:05.960" video="mainVideo-web" id="subtitle"]]
+[[!template text="""because free software is all about user freedom""" start="00:05:09.960" video="mainVideo-web" id="subtitle"]]
+[[!template text="""on one's own computer,""" start="00:05:11.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""not someone else's computer.""" start="00:05:13.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""On the other hand, this is also a lesser problem""" start="00:05:16.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""because it has trivial solutions,""" start="00:05:18.880" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is self-hosting and keeping computations local.""" start="00:05:21.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Wouldn't it be nice to use a photo editing web application,""" start="00:05:25.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""but without the web?""" start="00:05:28.680" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""Solutions outside of Emacs""" start="00:05:31.940" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""Right, now let's move on to solutions outside of Emacs""" start="00:05:31.940" video="mainVideo-web" id="subtitle"]]
+[[!template text="""that tackle these problems.""" start="00:05:36.401" video="mainVideo-web" id="subtitle"]]
+[[!template text="""There are generally two ways to fix this issue.""" start="00:05:39.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""One is blocking non-free JavaScript,""" start="00:05:42.960" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and the other is substituting with free programs.""" start="00:05:45.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Let's start with blocking.""" start="00:05:48.980" video="mainVideo-web" id="subtitle"]]
+[[!template text="""LibreJS, for example, is a Firefox extension""" start="00:05:50.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""blocking non-free, non-trivial JavaScript.""" start="00:05:54.860" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It works by intercepting, filtering""" start="00:05:56.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""all requests for JavaScript,""" start="00:05:59.821" video="mainVideo-web" id="subtitle"]]
+[[!template text="""recognizing the ones that are trivial or free,""" start="00:06:01.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and blocking the execution of the others.""" start="00:06:05.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""As an experiment, I logged the LibreJS output""" start="00:06:11.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""for about two weeks,""" start="00:06:13.880" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and during which, of all the web pages I loaded,""" start="00:06:15.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""23 domains have at least some LibreJS-compliant scripts.""" start="00:06:19.740" video="mainVideo-web" id="subtitle"]]
+[[!template text="""That is not much, though I did use other means""" start="00:06:25.001" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to reduce the scenarios""" start="00:06:28.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""where I need to load web pages with JavaScript in Firefox,""" start="00:06:30.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""like using a text browser like Lynx.""" start="00:06:35.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Then there's also NoScript, which is like LibreJS,""" start="00:06:40.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""but it blocks all scripts, whether free or non-free,
+trivial or non-trivial.""" start="00:06:44.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So the problem with blocking is that""" start="00:06:49.500" video="mainVideo-web" id="subtitle"]]
+[[!template text="""blocking with certain scripts and accepting others,""" start="00:06:54.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""there are like... I can think of two problems.""" start="00:06:57.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""One is that it does not help with Freedom 1,""" start="00:07:00.679" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is the freedom to allow users to modify a program""" start="00:07:02.879" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and use it in place of the original program.""" start="00:07:07.960" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And also it does not help""" start="00:07:13.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""when the non-free JavaScript is mandatory""" start="00:07:15.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""for the functioning of the web page.""" start="00:07:18.860" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, some pages are blank""" start="00:07:20.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""when non-free JavaScript is not executed.""" start="00:07:22.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So now let's move on to the substitution, the other method.""" start="00:07:27.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Let's start with userscript.""" start="00:07:36.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It is a script, it is a user-specified JavaScript""" start="00:07:38.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""injected to a web page.""" start="00:07:41.761" video="mainVideo-web" id="subtitle"]]
+[[!template text="""A typical example of userscript tool is GreaseMonkey.""" start="00:07:43.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Another idea is a proxy that replaces scripts in place,""" start="00:07:48.481" video="mainVideo-web" id="subtitle"]]
+[[!template text="""that is, sending user-specified scripts""" start="00:07:53.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""as a response to requests for such scripts.""" start="00:07:55.919" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So one example would be Haketilo, however you pronounce it.""" start="00:08:00.900" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It's a tool that's built on top of mitmproxy.""" start="00:08:04.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It is supposed to do this.""" start="00:08:09.620" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I haven't used GreaseMonkey nor Haketilo""" start="00:08:11.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""for these purposes yet,""" start="00:08:14.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so I can't say much about these options.""" start="00:08:16.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So then there are also free clients""" start="00:08:20.780" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which replace the whole frontend,""" start="00:08:24.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""instead of a script requested by web pages""" start="00:08:26.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""from the official web clients.""" start="00:08:30.661" video="mainVideo-web" id="subtitle"]]
+[[!template text="""People often refer to them as alternative frontend.""" start="00:08:32.500" video="mainVideo-web" id="subtitle"]]
+[[!template text="""YouTube is perhaps the best example""" start="00:08:37.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""as there are so many free clients,""" start="00:08:39.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""including Invidious for the web,""" start="00:08:41.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""youtube-dl and yt-dlp on the command line,""" start="00:08:43.622" video="mainVideo-web" id="subtitle"]]
+[[!template text="""MPV and VLC as GUI desktop, LibreTube""" start="00:08:46.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and NewPipe for Android and so on.""" start="00:08:50.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Youtube-dl and yt-dlp are especially versatile""" start="00:08:53.260" video="mainVideo-web" id="subtitle"]]
+[[!template text="""as they work with many video and audio sites""" start="00:08:56.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""with extractors written in Python,""" start="00:08:59.460" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so people can add extractors like extensions.""" start="00:09:02.620" video="mainVideo-web" id="subtitle"]]
+[[!template text="""A similar tool would be woob,""" start="00:09:06.300" video="mainVideo-web" id="subtitle"]]
+[[!template text="""short for web outside of the browsers.""" start="00:09:09.422" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It is a command-line and GUI program""" start="00:09:12.740" video="mainVideo-web" id="subtitle"]]
+[[!template text="""that interacts with many web services, even banks.""" start="00:09:16.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And there are browser extensions""" start="00:09:23.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""that automatically redirect to these clients.""" start="00:09:25.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, Redirector and Libredirect""" start="00:09:28.860" video="mainVideo-web" id="subtitle"]]
+[[!template text="""redirect to the free web clients.""" start="00:09:31.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""One could use OpenWith, another extension,""" start="00:09:35.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to redirect to free non-web clients,""" start="00:09:39.700" video="mainVideo-web" id="subtitle"]]
+[[!template text="""for example by opening YouTube links with MPV.""" start="00:09:42.160" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""Emacs solutions""" start="00:09:46.480" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""Now let us move to Emacs-based solutions.""" start="00:09:46.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""They are based on the same ideas but using Emacs.""" start="00:09:51.000" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""Free clients in Emacs""" start="00:09:54.600" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""First, free clients in Emacs.""" start="00:09:54.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Basically alternative frontends written in Elisp.""" start="00:09:57.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""There are several advantages.""" start="00:10:00.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, integration with other Emacs tools,""" start="00:10:03.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""good for archiving, making use of Emacs libraries,""" start="00:10:06.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""extensibility, thanks to Emacs' own""" start="00:10:09.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""extensibility and customizability.""" start="00:10:12.489" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Examples include mastodon.el for mastodon,""" start="00:10:15.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""or mastorg for viewing and archiving toots with org,""" start="00:10:18.620" video="mainVideo-web" id="subtitle"]]
+[[!template text="""sx for Stack Exchange, buildbot.el for buildbot, etc.""" start="00:10:22.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Here's an example of mastorg displaying""" start="00:10:28.900" video="mainVideo-web" id="subtitle"]]
+[[!template text="""the hierarchy of a toot in org.""" start="00:10:31.901" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Just wait. Right.""" start="00:10:34.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So this is the toot itself, this is a first reply,""" start="00:10:39.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""this is a reply to the reply, and so on.""" start="00:10:44.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And here is an example of""" start="00:10:48.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""opening a Stack Exchange link using sx.""" start="00:10:53.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Let's check out the tag.""" start="00:11:05.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So we can browse the Stack Exchange Emacs site
+with ease.""" start="00:11:11.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""The idea is quite simple.""" start="00:11:28.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Just use APIs to get data and display it in Emacs,""" start="00:11:31.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""or just to scrape, like requesting HTML and processing it.""" start="00:11:35.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""An example of scraping is hnreader,""" start="00:11:40.820" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which scrapes Hacker News web pages""" start="00:11:44.180" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and renders them in Org buffers.""" start="00:11:47.299" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Here's how hnreader fetches""" start="00:11:49.780" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and displays the Hacker News front page.""" start="00:11:52.380" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And one could go into the comments,""" start="00:11:58.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which shows a similar hierarchy to mastorg's output.""" start="00:12:04.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And of course, there are limitations for this method,""" start="00:12:14.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is not limited to Emacs.""" start="00:12:19.001" video="mainVideo-web" id="subtitle"]]
+[[!template text="""There are basically limitations""" start="00:12:22.540" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to any ad hoc bespoke clients,""" start="00:12:24.522" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is catch-up games with remote server,""" start="00:12:28.420" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which may change the API interface endpoints""" start="00:12:31.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""or even structure of the responses.""" start="00:12:34.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""This brings us to web browsers in Emacs.""" start="00:12:37.540" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""Web browsers in Emacs""" start="00:12:43.021" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""Web browsers are universal clients""" start="00:12:43.021" video="mainVideo-web" id="subtitle"]]
+[[!template text="""because all sites support browsers.""" start="00:12:45.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So in a world of no JavaScript,""" start="00:12:47.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""there will be no need to write bespoke clients.""" start="00:12:48.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""In such a world,""" start="00:12:52.740" video="mainVideo-web" id="subtitle"]]
+[[!template text="""instead of using JavaScript code to fetch JSON,""" start="00:12:53.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""web developers make server do the heavy lifting""" start="00:12:56.740" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and just send the complete HTML over.""" start="00:13:00.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Okay, back to reality.""" start="00:13:02.860" video="mainVideo-web" id="subtitle"]]
+[[!template text="""EWW, the default Emacs browser,""" start="00:13:05.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""is what people refer to as a text browser,""" start="00:13:07.660" video="mainVideo-web" id="subtitle"]]
+[[!template text="""even though it is not text only and it supports images too.""" start="00:13:11.380" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It is a good solid browser that supports forms, etc.""" start="00:13:16.900" video="mainVideo-web" id="subtitle"]]
+[[!template text="""The downside is that it does not support CSS,""" start="00:13:20.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so the formatting could be a bit ugly sometimes.""" start="00:13:24.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""There are some other browsers in Emacs too,""" start="00:13:28.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""like emacs-w3m, which is backed by w3m,""" start="00:13:30.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and Luwak, which is backed by Lynx.""" start="00:13:34.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Sorry for the naming, by the way.""" start="00:13:36.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""They often consist of a backend""" start="00:13:39.100" video="mainVideo-web" id="subtitle"]]
+[[!template text="""that fetches URL and parses HTML.""" start="00:13:41.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, the built-in URL package""" start="00:13:44.880" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and the libxml2 binding in Emacs are decent enough.""" start="00:13:47.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And the frontend that renders the HTML,""" start="00:13:50.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""like shr or lynx, etc.""" start="00:13:53.189" video="mainVideo-web" id="subtitle"]]
+[[!template text="""There is also an xwidget-webkit,""" start="00:13:56.699" video="mainVideo-web" id="subtitle"]]
+[[!template text="""but this browser executes JavaScript,""" start="00:14:04.740" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so it does not really help in this case.""" start="00:14:07.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Browser extensions on Emacs are effortless,""" start="00:14:10.540" video="mainVideo-web" id="subtitle"]]
+[[!template text="""as they can be written as Emacs packages.""" start="00:14:14.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, one could easily write""" start="00:14:17.460" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Elisp scripts with similar functionalities""" start="00:14:19.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to libredirect and openwith""" start="00:14:21.960" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to redirect links, to rewrite URLs,""" start="00:14:24.922" video="mainVideo-web" id="subtitle"]]
+[[!template text="""or to open, say, a YouTube URL with MPV,""" start="00:14:30.181" video="mainVideo-web" id="subtitle"]]
+[[!template text="""but with even more flexibility.""" start="00:14:37.061" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, here's how one could""" start="00:14:39.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""transform a Zoom link to a dial-in number""" start="00:14:41.780" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so that it is easier to join a Zoom meeting""" start="00:14:44.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""without running non-free JavaScript.""" start="00:14:47.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""This might still be bad for privacy,""" start="00:14:50.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""but at least it's good for freedom.""" start="00:14:53.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""As mentioned before,""" start="00:14:58.699" video="mainVideo-web" id="subtitle"]]
+[[!template text="""one shortcoming of these Emacs-based browsers,""" start="00:15:00.379" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Emacs web browsers, is no support for CSS,""" start="00:15:03.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so the formatting could leave a lot to be desired.""" start="00:15:08.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Maybe someone would write""" start="00:15:11.320" video="mainVideo-web" id="subtitle"]]
+[[!template text="""an Emacs browser package backed by wkhtmltopdf,""" start="00:15:12.960" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which, when opening a URL,""" start="00:15:17.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""it calls wkhtmltopdf to convert the web page to PDF""" start="00:15:20.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and opens in, say, pdf-view-mode of the pdf-tools,""" start="00:15:26.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""thus containing formatting,""" start="00:15:29.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and all the URL clicks resolve to the same actions.""" start="00:15:31.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Also, wkhtmltopdf contains a flag that disables JavaScript.""" start="00:15:34.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Another idea would be to use Firefox""" start="00:15:43.300" video="mainVideo-web" id="subtitle"]]
+[[!template text="""as a processor to fetch URLs.""" start="00:15:45.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Maybe it can be used to pass back the HTML""" start="00:15:50.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""after executing free JavaScript,""" start="00:15:54.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""say, if Firefox has LibreJS installed.""" start="00:15:56.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""This requires Firefox to send back the DOM,""" start="00:16:01.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which could be achieved using native messaging.""" start="00:16:05.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""More on that later.""" start="00:16:08.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Alternatively, one could also write a Firefox extension""" start="00:16:09.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""that sends the DOM in an existing tab back to Emacs.""" start="00:16:14.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""But thinking more about it,""" start="00:16:17.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I don't think this is actually a useful idea,""" start="00:16:20.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""because most of the sites that work under LibreJS""" start="00:16:23.059" video="mainVideo-web" id="subtitle"]]
+[[!template text="""also are useful when all JavaScript is blocked.""" start="00:16:27.139" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So, this means these sites are viewable""" start="00:16:34.420" video="mainVideo-web" id="subtitle"]]
+[[!template text="""under EWW, Luwak, etc.""" start="00:16:37.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And another issue is that""" start="00:16:42.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""this could also make running non-free JavaScript easier,""" start="00:16:43.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is harmful to user freedom.""" start="00:16:46.560" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""emacs-web-server - overview""" start="00:16:52.380" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""OK, let's move on to the idea""" start="00:16:52.380" video="mainVideo-web" id="subtitle"]]
+[[!template text="""of running Emacs as a web server,""" start="00:16:54.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so that Emacs client packages are web apps""" start="00:16:55.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""serving as alternative frontends.""" start="00:16:58.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Why would we want to do this?""" start="00:17:00.320" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Well, as much as one wants to be always in Emacs,""" start="00:17:02.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""it is not always feasible.""" start="00:17:06.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, one may be on the go""" start="00:17:08.340" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and needs to look up something on the phone.""" start="00:17:10.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""On the other hand, Emacs client packages""" start="00:17:12.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""are just alternative frontends""" start="00:17:14.880" video="mainVideo-web" id="subtitle"]]
+[[!template text="""but written in Elisp and run in Emacs.""" start="00:17:16.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""With the help of emacs-web-server package,""" start="00:17:18.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""we can access Emacs packages on the web.""" start="00:17:20.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""emacs-web-server package is not something new,""" start="00:17:23.580" video="mainVideo-web" id="subtitle"]]
+[[!template text="""but seems to be underused in the community somehow.""" start="00:17:26.440" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""emacs-web-server - hello emacs!""" start="00:17:30.380" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""OK, let's start with a simple example called hello-emacs.""" start="00:17:30.380" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It is pretty straightforward.""" start="00:17:33.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Just require the web server feature""" start="00:17:35.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and run ws-start to start a server process""" start="00:17:38.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and send the string &quot;hello emacs&quot;""" start="00:17:41.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to the process regardless of the request.""" start="00:17:43.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""As you can see, it is going to be available""" start="00:17:45.540" video="mainVideo-web" id="subtitle"]]
+[[!template text="""at port 9000 of localhost.""" start="00:17:48.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Let's try it out.""" start="00:17:51.319" video="mainVideo-web" id="subtitle"]]
+[[!template text="""We need to first evaluate this code block.""" start="00:17:53.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And it works.""" start="00:18:01.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""To stop a server, just run ws-stop on the web server object.""" start="00:18:03.940" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Let's evaluate.""" start="00:18:10.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Yep, it stopped.""" start="00:18:14.960" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""emacs-web-server - yolo""" start="00:18:17.580" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""OK, now let's move on to something funny""" start="00:18:17.580" video="mainVideo-web" id="subtitle"]]
+[[!template text="""that you should never run on the public web.""" start="00:18:20.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I call it yolo.el.""" start="00:18:22.220" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It uses htmlize""" start="00:18:23.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to make any Emacs buffer available on the web.""" start="00:18:25.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Let's try it out.""" start="00:18:28.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Just require the thing and start the server by yolo-start.""" start="00:18:29.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And it's available at port 9999.""" start="00:18:33.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""By default, the root domain shows the splash screen""" start="00:18:38.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which needs to be available.""" start="00:18:41.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Running display-splash-screen ensures that,""" start="00:18:42.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""but here I've already run it.""" start="00:18:47.219" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So let's have a look.""" start="00:18:48.939" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And here we have the splash screen.""" start="00:18:54.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Emacs tutorial and such.""" start="00:18:56.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Unfortunately, none of these links work,""" start="00:19:00.240" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is something we will revisit later.""" start="00:19:05.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So, to show an arbitrary buffer,""" start="00:19:10.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""just use the buffer name as a path.""" start="00:19:15.481" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, the slide has the buffer named web.org,""" start="00:19:20.081" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so we can display it.""" start="00:19:24.861" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Let's try something fancier,""" start="00:19:34.581" video="mainVideo-web" id="subtitle"]]
+[[!template text="""like the man page of ffmpeg.""" start="00:19:36.941" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So this is the man page of ffmpeg.""" start="00:19:40.880" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And the buffer name is a bit more complicated.""" start="00:19:45.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I have the URL available here.""" start="00:19:48.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It's missing a star.""" start="00:19:59.140" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It's pretty neat if you ask me.""" start="00:20:05.980" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And, yeah, what else?""" start="00:20:12.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Well, we can also browse EWW in Firefox.""" start="00:20:14.880" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, let's check out gnu.org,""" start="00:20:22.700" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and note that the buffer name is EWW with stars.""" start="00:20:30.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So, ah, it works.""" start="00:20:39.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And it has all the graphics even.""" start="00:20:41.979" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Now, how about we do it the other way around?""" start="00:20:50.900" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So we load the current slide web.org using this funny thing.""" start="00:20:55.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And it works.""" start="00:21:10.780" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Not as nice as the Org buffer, though.""" start="00:21:14.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Right, and now that gives me some funny idea.""" start="00:21:19.940" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So I'm a firm believer that memes are meant to be enjoyed""" start="00:21:27.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""in silence rather than read out loud.""" start="00:21:31.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So I will jump straight to trying this idea,""" start="00:21:33.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is loading the EWW buffer URL with EWW itself.""" start="00:21:38.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Loading, loading, loading.""" start="00:21:49.860" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Spoiler alert, it never loads.""" start="00:21:53.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So that concludes the demo.""" start="00:21:59.100" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And so we can stop the server, web server, with `yolo-stop`.""" start="00:22:03.220" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So one could extend yolo to serve arbitrary Emacs commands,""" start="00:22:06.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""making it even more dangerous.""" start="00:22:13.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""That is, for example, `localhost:9000/m-x/magit-status`""" start="00:22:15.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""would run `magit-status`""" start="00:22:26.119" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and show the magit-status buffer in the web browser.""" start="00:22:27.820" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Or localhost:9000/m-x/eww/""" start="00:22:34.500" video="mainVideo-web" id="subtitle"]]
+[[!template text="""any arbitrary URL to browse arbitrary URL""" start="00:22:43.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""with EWW inside of Firefox.""" start="00:22:46.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It can serve as a way to block all JavaScript,""" start="00:22:50.820" video="mainVideo-web" id="subtitle"]]
+[[!template text="""because EWW does not support JavaScript.""" start="00:22:53.880" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And enforce preferred colorscheme in Firefox,""" start="00:22:56.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""since htmlize, as you have noticed,""" start="00:23:00.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""faithfully reflects the theme used in Emacs.""" start="00:23:02.840" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""emacs-web-server - emacs web framework""" start="00:23:07.940" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""Okay, so we know that yolo is unsafe""" start="00:23:07.940" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and needs to be refined.""" start="00:23:10.339" video="mainVideo-web" id="subtitle"]]
+[[!template text="""In fact, we don't necessarily want""" start="00:23:11.540" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to run Emacs on a web browser.""" start="00:23:13.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""After all, a modern web browser is""" start="00:23:15.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""something one has to fight all the time""" start="00:23:17.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and should be avoided whenever possible.""" start="00:23:19.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""We want to instead be able to access things""" start="00:23:21.601" video="mainVideo-web" id="subtitle"]]
+[[!template text="""when forced to be in a web browser,""" start="00:23:24.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""in which case only the motivations""" start="00:23:26.460" video="mainVideo-web" id="subtitle"]]
+[[!template text="""of an alternative frontend apply.""" start="00:23:28.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Moreover, the ideal situation is an Emacs web framework,""" start="00:23:31.300" video="mainVideo-web" id="subtitle"]]
+[[!template text="""a tool that automatically""" start="00:23:35.460" video="mainVideo-web" id="subtitle"]]
+[[!template text="""transforms Emacs packages to web apps,""" start="00:23:36.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so that one does not need to write extra code""" start="00:23:39.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to get a web app that does the same thing as the package.""" start="00:23:41.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""We also need all links in the web pages to work.""" start="00:23:45.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""As noted before, the links on the yolo Emacs splash screen""" start="00:23:49.100" video="mainVideo-web" id="subtitle"]]
+[[!template text="""do not work.""" start="00:23:52.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So here's a proof-of-concept example. It's called bom.el.""" start="00:23:53.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It gets some weather forecast data""" start="00:23:58.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""from the Australian Bureau of Meteorology""" start="00:24:00.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and displays it in an org buffer.""" start="00:24:03.080" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So let's try it out. One could do `M-x bom`,""" start="00:24:05.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which shows an org buffer with links to each state.""" start="00:24:09.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So based in Melbourne, naturally,""" start="00:24:15.220" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I would like to find out the weather of Victoria.""" start="00:24:17.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And yes, to execute this command. Wait, wait, wait. Right.""" start="00:24:21.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And we are at a buffer that shows""" start="00:24:27.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""the weather forecast of the whole of Victoria""" start="00:24:33.460" video="mainVideo-web" id="subtitle"]]
+[[!template text="""in the hierarchy. Note that this back button""" start="00:24:36.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""takes you to the previous page.""" start="00:24:39.479" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So here are the regions of Victoria.""" start="00:24:46.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I think Melbourne is in Central.""" start="00:24:47.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And yeah, it shows""" start="00:24:53.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""the seven-day weather forecast of Melbourne.""" start="00:24:54.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""You can also reach this page by running,""" start="00:24:57.260" video="mainVideo-web" id="subtitle"]]
+[[!template text="""let's see, directly `M-x bom-state`.""" start="00:25:00.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Vic.""" start="00:25:08.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""OK. So this works.""" start="00:25:13.960" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And this is bom as an Emacs package.""" start="00:25:18.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Now let's check out bom as a web app""" start="00:25:21.380" video="mainVideo-web" id="subtitle"]]
+[[!template text="""transformed by Emacs web framework.""" start="00:25:23.981" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So start the web server with bom-start.""" start="00:25:28.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And let's try it out. It's at 9000 again.""" start="00:25:33.020" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Oops. Invalid path. Oh, that's because""" start="00:25:39.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""it makes exactly one command to one path.""" start="00:25:42.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So remember that we used the bom command""" start="00:25:46.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to show the landing page.""" start="00:25:49.301" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So here we need the bom in the path as well.""" start="00:25:50.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And it shows the same landing page, except in HTML.""" start="00:25:54.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Let's check out Victoria weather forecast as before.""" start="00:26:00.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And it shows an HTML converted from the org buffer""" start="00:26:07.260" video="mainVideo-web" id="subtitle"]]
+[[!template text="""using ox export HTML, whatever.""" start="00:26:12.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And you can see even the back button is here.""" start="00:26:17.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""That takes you to /bom.""" start="00:26:20.359" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So let's have a look at Melbourne. Here it is.""" start="00:26:26.220" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Hooray, it works.""" start="00:26:29.140" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So, yeah, as usual,""" start="00:26:31.380" video="mainVideo-web" id="subtitle"]]
+[[!template text="""you can stop the web server with `M-x bom-stop`.""" start="00:26:33.960" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Right. And alternatively,""" start="00:26:40.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""it can also be deployed directly in terminal""" start="00:26:43.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""in a dedicated Emacs daemon.""" start="00:26:48.500" video="mainVideo-web" id="subtitle"]]
+[[!template text="""So you can see that there's a one-one correspondence""" start="00:26:56.100" video="mainVideo-web" id="subtitle"]]
+[[!template text="""between the Emacs package interface and the web interface.""" start="00:26:58.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""And that implies some restrictions to the Emacs package""" start="00:27:03.100" video="mainVideo-web" id="subtitle"]]
+[[!template text="""for the Emacs web framework to be able to do its job. Right.""" start="00:27:06.040" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, the package needs to have an Org interface""" start="00:27:09.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and the links that trigger other commands""" start="00:27:13.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""need to be in Elisp links""" start="00:27:15.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""so that the Emacs web framework""" start="00:27:17.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""can translate it to web server URL path.""" start="00:27:20.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Note that Emacs web server framework is not a real package.""" start="00:27:24.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I wrote some functions in bom.el serving the purpose,""" start="00:27:28.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and they should be separated out eventually""" start="00:27:33.340" video="mainVideo-web" id="subtitle"]]
+[[!template text="""without much trouble.""" start="00:27:35.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""One could get weather forecast""" start="00:27:37.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""without running JavaScript anyway,""" start="00:27:40.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which makes bom.el less important""" start="00:27:42.220" video="mainVideo-web" id="subtitle"]]
+[[!template text="""as an alternative web client.""" start="00:27:45.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Though it does provide, dare I say,""" start="00:27:48.320" video="mainVideo-web" id="subtitle"]]
+[[!template text="""a clean and minimal interface""" start="00:27:50.520" video="mainVideo-web" id="subtitle"]]
+[[!template text="""compared to common weather forecast web pages.""" start="00:27:52.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Other more relevant use cases could be Mastodon,""" start="00:27:55.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""whose official web client requires JavaScript""" start="00:27:58.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to display a post.""" start="00:28:01.320" video="mainVideo-web" id="subtitle"]]
+[[!template text="""The mastorg package that shows an Org hierarchy of toots""" start="00:28:03.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""rooted as a given toot could be a low-hanging fruit.""" start="00:28:08.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""The limitation of Org interface requirements""" start="00:28:12.179" video="mainVideo-web" id="subtitle"]]
+[[!template text="""can also be relaxed in further work,""" start="00:28:15.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""if one could extend Emacs web framework""" start="00:28:17.880" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to translate back and forth between Emacs widgets,""" start="00:28:21.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""say, including buttons and web page widgets,""" start="00:28:24.200" video="mainVideo-web" id="subtitle"]]
+[[!template text="""including links.""" start="00:28:28.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Another more far-fetched idea would be""" start="00:28:30.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to translate to other types of interfaces,""" start="00:28:32.600" video="mainVideo-web" id="subtitle"]]
+[[!template text="""like GNU/Linux or Android GUI.""" start="00:28:35.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""How about animations? Say, M-x butterfly,""" start="00:28:44.020" video="mainVideo-web" id="subtitle"]]
+[[!template text="""or even web games from Emacs games?""" start="00:28:47.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Possibilities are unlimited in this, as always, in Emacs.""" start="00:28:54.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I also noticed some limitations""" start="00:29:00.100" video="mainVideo-web" id="subtitle"]]
+[[!template text="""when trying to actually host bom.el on the public web.""" start="00:29:03.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Given the limited access to the Emacs server,""" start="00:29:07.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I was comfortable enough to give bom.el a go""" start="00:29:13.540" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to serve it on the public web.""" start="00:29:16.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""However, I immediately stopped""" start="00:29:18.800" video="mainVideo-web" id="subtitle"]]
+[[!template text="""after noticing how slow it is.""" start="00:29:20.560" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It can take more than 30 seconds""" start="00:29:22.880" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to load a page of weather forecast for a state.""" start="00:29:24.720" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I am also not sure how many simultaneous connections""" start="00:29:27.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""it can handle.""" start="00:29:31.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""In any case, I think the package emacs-web-server""" start="00:29:32.380" video="mainVideo-web" id="subtitle"]]
+[[!template text="""could do with some performance enhancement.""" start="00:29:36.440" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""Firefox with emacs for extensions""" start="00:29:40.420" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""Right. Because of the time constraints,""" start="00:29:40.420" video="mainVideo-web" id="subtitle"]]
+[[!template text="""I will briefly touch one final idea,""" start="00:29:44.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which is to use Emacs as a Firefox browser extension.""" start="00:29:45.760" video="mainVideo-web" id="subtitle"]]
+[[!template text="""We already have org-protocol,""" start="00:29:50.420" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which allows Firefox to communicate""" start="00:29:52.900" video="mainVideo-web" id="subtitle"]]
+[[!template text="""with a running Emacs server""" start="00:29:54.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""by sending an org-protocol URL to the latter.""" start="00:29:55.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It can be used not just for capturing or storing links,""" start="00:29:59.780" video="mainVideo-web" id="subtitle"]]
+[[!template text="""but to execute arbitrary code on any component of the URL.""" start="00:30:03.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""However, it is fire and forget,""" start="00:30:10.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""and Emacs cannot tell Firefox what to do.""" start="00:30:11.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""There may be a length restriction, too.""" start="00:30:16.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""For example, Firefox may not be able to send back""" start="00:30:17.920" video="mainVideo-web" id="subtitle"]]
+[[!template text="""the whole DOM.""" start="00:30:20.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""This claim needs to be verified, though.""" start="00:30:22.420" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Native messaging is one solution to this problem.""" start="00:30:26.220" video="mainVideo-web" id="subtitle"]]
+[[!template text="""It is a two-way communication channel""" start="00:30:30.020" video="mainVideo-web" id="subtitle"]]
+[[!template text="""between a Firefox web extension and a local system process""" start="00:30:31.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""started by the web extension.""" start="00:30:35.320" video="mainVideo-web" id="subtitle"]]
+[[!template text="""The process could be an Emacs server,""" start="00:30:37.840" video="mainVideo-web" id="subtitle"]]
+[[!template text="""which would make Emacs effectively""" start="00:30:40.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""a Firefox web browser extension.""" start="00:30:42.400" video="mainVideo-web" id="subtitle"]]
+[[!template text="""In this case, Elisp would be the main extension language,""" start="00:30:48.680" video="mainVideo-web" id="subtitle"]]
+[[!template text="""rather than JavaScript.""" start="00:30:52.000" video="mainVideo-web" id="subtitle"]]
+[[!template text="""However, JavaScript is still needed at the Firefox end""" start="00:30:53.620" video="mainVideo-web" id="subtitle"]]
+[[!template text="""of the communication channel.""" start="00:30:56.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""As a simple example of this idea,""" start="00:30:59.320" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Firefox could ask Emacs to redirect a URL""" start="00:31:01.160" video="mainVideo-web" id="subtitle"]]
+[[!template text="""by removing tracking and using alternative frontend, etc.""" start="00:31:04.440" video="mainVideo-web" id="subtitle"]]
+[[!template text="""However, I was not able to implement this""" start="00:31:08.320" video="mainVideo-web" id="subtitle"]]
+[[!template text="""due to some tricky business""" start="00:31:12.480" video="mainVideo-web" id="subtitle"]]
+[[!template text="""with enforcing synchronicity""" start="00:31:14.280" video="mainVideo-web" id="subtitle"]]
+[[!template text="""that allows the web extension""" start="00:31:15.640" video="mainVideo-web" id="subtitle"]]
+[[!template text="""to wait for responses from Emacs.""" start="00:31:17.120" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Some further work, I suppose.""" start="00:31:20.200" video="mainVideo-web" id="subtitle"]]
+
+[[!template new="1" text="""Thank you""" start="00:31:25.360" video="mainVideo-web" id="subtitle"]]
+
+[[!template text="""That concludes my talk.""" start="00:31:25.360" video="mainVideo-web" id="subtitle"]]
+[[!template text="""Thank you for your attention.""" start="00:31:28.254" video="mainVideo-web" id="subtitle"]]
+
+
+
+Captioner: ken
+
+<a name="web-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: 2 seconds. And I think we are live.""" start="00:00:04.740" video="qanda-web" id="subtitle"]]
+[[!template text="""Hi Yuchen, how are you doing?""" start="00:00:05.980" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm gonna just walk off.""" start="00:00:08.720" video="qanda-web" id="subtitle"]]
+[[!template text="""I'm not sure if I... Yeah,""" start="00:00:10.840" video="qanda-web" id="subtitle"]]
+[[!template text="""I mean, brain not working well at this""" start="00:00:13.440" video="qanda-web" id="subtitle"]]
+[[!template text="""moment. How about you?""" start="00:00:14.660" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: Well, mine is about to get fried because""" start="00:00:18.420" video="qanda-web" id="subtitle"]]
+[[!template text="""EmacsConf is a very taxing process and I can""" start="00:00:21.040" video="qanda-web" id="subtitle"]]
+[[!template text="""tell you we could have a race to know who's""" start="00:00:24.599" video="qanda-web" id="subtitle"]]
+[[!template text="""more more tired right now between you and""" start="00:00:26.720" video="qanda-web" id="subtitle"]]
+[[!template text="""myself but I guess we'll find out at the end""" start="00:00:29.480" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: All right, sounds good.""" start="00:00:32.080" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: of the Q&A. And thank you for...""" start="00:00:34.200" video="qanda-web" id="subtitle"]]
+[[!template text="""How late or how early I should say is it for""" start="00:00:37.760" video="qanda-web" id="subtitle"]]
+[[!template text="""you right now? It should be like 6am or""" start="00:00:39.480" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thanks. It's 7.45 but I normally get up at""" start="00:00:43.860" video="qanda-web" id="subtitle"]]
+[[!template text="""like 8.30 or something.""" start="00:00:45.020" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: something? Right, okay.""" start="00:00:46.560" video="qanda-web" id="subtitle"]]
+[[!template text="""Well, anyway, thank you for the sacrifice""" start="00:00:48.380" video="qanda-web" id="subtitle"]]
+[[!template text="""just to answer some of the questions.""" start="00:00:50.200" video="qanda-web" id="subtitle"]]
+[[!template text="""All right, so I'll be displaying the""" start="00:00:56.160" video="qanda-web" id="subtitle"]]
+[[!template text="""questions. I'll be, let me just maximize this""" start="00:00:59.180" video="qanda-web" id="subtitle"]]
+[[!template text="""on the stream so that people can read""" start="00:01:01.440" video="qanda-web" id="subtitle"]]
+[[!template text="""everything on my screen.""" start="00:01:02.280" video="qanda-web" id="subtitle"]]
+[[!template text="""So what I'm going to do,""" start="00:01:03.400" video="qanda-web" id="subtitle"]]
+[[!template text="""Yuchen, as usual, I'm going to start reading""" start="00:01:05.340" video="qanda-web" id="subtitle"]]
+[[!template text="""the questions on the pad.""" start="00:01:06.540" video="qanda-web" id="subtitle"]]
+[[!template text="""I'm going to ask Sasha to open the Q&A.""" start="00:01:12.160" video="qanda-web" id="subtitle"]]
+[[!template text="""Yes, it's already open.""" start="00:01:13.620" video="qanda-web" id="subtitle"]]
+[[!template text="""Cool. So if you want to join us,""" start="00:01:15.280" video="qanda-web" id="subtitle"]]
+[[!template text="""people, Feel free to click on the link on the""" start="00:01:19.360" video="qanda-web" id="subtitle"]]
+[[!template text="""talk or on IRC to join us on BBB and to ask""" start="00:01:21.820" video="qanda-web" id="subtitle"]]
+[[!template text="""your questions. Otherwise just leave them on""" start="00:01:23.440" video="qanda-web" id="subtitle"]]
+[[!template text="""the pad. Alright, Yuchen,""" start="00:01:24.320" video="qanda-web" id="subtitle"]]
+[[!template text="""starting with the first question.""" start="00:01:25.440" video="qanda-web" id="subtitle"]]
+[[!template text="""I like the idea of using org-mode to display""" start="00:01:28.260" video="qanda-web" id="subtitle"]]
+[[!template text="""data from the web. Are there many different""" start="00:01:30.300" video="qanda-web" id="subtitle"]]
+[[!template text="""packages that do not, I assume.""" start="00:01:33.220" video="qanda-web" id="subtitle"]]
+[[!template text="""I'm new to Emacs, so maybe this is obvious to""" start="00:01:35.560" video="qanda-web" id="subtitle"]]
+[[!template text="""everyone else.""" start="00:01:36.040" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I think so. I mean...""" start="00:01:43.860" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: Yeah, I think it's a little complicated to""" start="00:01:49.240" video="qanda-web" id="subtitle"]]
+[[!template text="""specify what is it to display data from the""" start="00:01:51.480" video="qanda-web" id="subtitle"]]
+[[!template text="""web. Just reading it like this,""" start="00:01:53.360" video="qanda-web" id="subtitle"]]
+[[!template text="""I'm reminded of Adam, Arthur Pappa,""" start="00:01:55.900" video="qanda-web" id="subtitle"]]
+[[!template text="""I mean, Code All Capture Web,""" start="00:01:58.260" video="qanda-web" id="subtitle"]]
+[[!template text="""which technically captures the web and allows""" start="00:02:00.860" video="qanda-web" id="subtitle"]]
+[[!template text="""you to embed it in the page,""" start="00:02:02.120" video="qanda-web" id="subtitle"]]
+[[!template text="""but is it really displaying data from the""" start="00:02:04.280" video="qanda-web" id="subtitle"]]
+[[!template text="""web? Are we implying live transmission?""" start="00:02:06.340" video="qanda-web" id="subtitle"]]
+[[!template text="""Do you see what I'm talking about?""" start="00:02:07.720" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I suspect the question is asking,""" start="00:02:10.680" video="qanda-web" id="subtitle"]]
+[[!template text="""like, having Emacs as a client that's sort of""" start="00:02:17.040" video="qanda-web" id="subtitle"]]
+[[!template text="""getting data from the web and then displays""" start="00:02:19.740" video="qanda-web" id="subtitle"]]
+[[!template text="""in Emacs, like using API or using web script.""" start="00:02:25.120" video="qanda-web" id="subtitle"]]
+[[!template text="""So yeah, like the hreader package or a few""" start="00:02:35.220" video="qanda-web" id="subtitle"]]
+[[!template text="""packages mentioned in my talk.""" start="00:02:37.580" video="qanda-web" id="subtitle"]]
+[[!template text="""Yeah, that's a good question.""" start="00:02:39.920" video="qanda-web" id="subtitle"]]
+[[!template text="""I mean, I really don't know how many.""" start="00:02:46.220" video="qanda-web" id="subtitle"]]
+[[!template text="""So from my experience,""" start="00:02:48.060" video="qanda-web" id="subtitle"]]
+[[!template text="""maybe I use like 10, less than 10 packages""" start="00:02:55.960" video="qanda-web" id="subtitle"]]
+[[!template text="""that do these things. And among these""" start="00:03:01.220" video="qanda-web" id="subtitle"]]
+[[!template text="""packages, maybe it's half of them are org,""" start="00:03:03.840" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: So you mean half of them are org-based?""" start="00:03:09.480" video="qanda-web" id="subtitle"]]
+[[!template text="""Is that what you said?""" start="00:03:10.840" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: half of them don't. Yeah,""" start="00:03:11.840" video="qanda-web" id="subtitle"]]
+[[!template text="""but that's just based on the packages I use.""" start="00:03:16.920" video="qanda-web" id="subtitle"]]
+[[!template text="""I haven't done a survey about this.""" start="00:03:22.440" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: I think it's okay, you don't need to have all""" start="00:03:25.520" video="qanda-web" id="subtitle"]]
+[[!template text="""the answers. I mean, you already demonstrate""" start="00:03:26.880" video="qanda-web" id="subtitle"]]
+[[!template text="""a lot of competence and you talk about all""" start="00:03:29.380" video="qanda-web" id="subtitle"]]
+[[!template text="""the things you approach with your particular""" start="00:03:31.100" video="qanda-web" id="subtitle"]]
+[[!template text="""setup, So you don't need to have all the""" start="00:03:33.040" video="qanda-web" id="subtitle"]]
+[[!template text="""answers. Okay. All right,""" start="00:03:36.040" video="qanda-web" id="subtitle"]]
+[[!template text="""moving on to the next question.""" start="00:03:37.160" video="qanda-web" id="subtitle"]]
+[[!template text="""Have you tried EAF, i.e.""" start="00:03:39.340" video="qanda-web" id="subtitle"]]
+[[!template text="""The Emacs application framework and its""" start="00:03:41.680" video="qanda-web" id="subtitle"]]
+[[!template text="""browser? If yes, what is your opinion about""" start="00:03:43.940" video="qanda-web" id="subtitle"]]
+[[!template text="""it?""" start="00:03:44.120" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: Oh, I haven't tried it.""" start="00:03:47.520" video="qanda-web" id="subtitle"]]
+[[!template text="""I try to remember why I haven't tried it.""" start="00:03:53.760" video="qanda-web" id="subtitle"]]
+[[!template text="""It has a browser. I assume the browser""" start="00:04:03.520" video="qanda-web" id="subtitle"]]
+[[!template text="""executes JavaScript by default.""" start="00:04:06.840" video="qanda-web" id="subtitle"]]
+[[!template text="""I have to check. Emacs.daf""" start="00:04:12.320" video="qanda-web" id="subtitle"]]
+[[!template text="""slash daf browser.""" start="00:04:15.820" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: It's also OK if you want to have a look later""" start="00:04:25.520" video="qanda-web" id="subtitle"]]
+[[!template text="""and you know whenever you want to report to""" start="00:04:27.380" video="qanda-web" id="subtitle"]]
+[[!template text="""the pad you know you write a little blurb""" start="00:04:28.940" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah sure yeah so yeah I know about EAF but I""" start="00:04:34.700" video="qanda-web" id="subtitle"]]
+[[!template text="""haven't tried it.""" start="00:04:35.460" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: about it. Okay well that's already an answer""" start="00:04:38.060" video="qanda-web" id="subtitle"]]
+[[!template text="""that's cool. We're gonna move on to a""" start="00:04:41.400" video="qanda-web" id="subtitle"]]
+[[!template text="""question that is a little bit off topic,""" start="00:04:42.720" video="qanda-web" id="subtitle"]]
+[[!template text="""but I've also been interested about your""" start="00:04:44.700" video="qanda-web" id="subtitle"]]
+[[!template text="""nickname on IRC. This is not really relevant""" start="00:04:47.420" video="qanda-web" id="subtitle"]]
+[[!template text="""to the talk, quoting the question,""" start="00:04:48.900" video="qanda-web" id="subtitle"]]
+[[!template text="""but I'm curious about your nickname.""" start="00:04:50.400" video="qanda-web" id="subtitle"]]
+[[!template text="""You have some connection to Norway.""" start="00:04:52.020" video="qanda-web" id="subtitle"]]
+[[!template text="""Your nick indicates an interest in the""" start="00:04:54.480" video="qanda-web" id="subtitle"]]
+[[!template text="""architectural style inspired by the""" start="00:04:56.040" video="qanda-web" id="subtitle"]]
+[[!template text="""decoration on Viking ships that was popular""" start="00:04:58.280" video="qanda-web" id="subtitle"]]
+[[!template text="""in the early 20th century because""" start="00:05:00.460" video="qanda-web" id="subtitle"]]
+[[!template text="""Dragonsteel, I assume in Norwegian,""" start="00:05:01.880" video="qanda-web" id="subtitle"]]
+[[!template text="""is Dragon style. Are you familiar with this?""" start="00:05:04.860" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, it's just my favorite architecture""" start="00:05:10.760" video="qanda-web" id="subtitle"]]
+[[!template text="""style, I think. I mean,""" start="00:05:15.560" video="qanda-web" id="subtitle"]]
+[[!template text="""I lived in Sweden for like 2,""" start="00:05:19.040" video="qanda-web" id="subtitle"]]
+[[!template text="""1 half years and yeah I went to Norway once""" start="00:05:25.900" video="qanda-web" id="subtitle"]]
+[[!template text="""and I saw like this church in Lofoten Island,""" start="00:05:32.520" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 0]: was amazing. In Luton Island,""" start="00:05:36.766" video="qanda-web" id="subtitle"]]
+[[!template text="""on Luton Island. Right.""" start="00:05:36.820" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: on Lofoten Island. Yeah it Yeah,""" start="00:05:36.833" video="qanda-web" id="subtitle"]]
+[[!template text="""it was amazing. So, yeah,""" start="00:05:40.280" video="qanda-web" id="subtitle"]]
+[[!template text="""that's exactly why I chose that as my""" start="00:05:43.780" video="qanda-web" id="subtitle"]]
+[[!template text="""nickname, because it's my favorite""" start="00:05:46.520" video="qanda-web" id="subtitle"]]
+[[!template text="""architecture style.""" start="00:05:47.540" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: Okay, well, that was a very astute remark by""" start="00:05:51.940" video="qanda-web" id="subtitle"]]
+[[!template text="""the viewers, so I hope you feel validated in""" start="00:05:54.760" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 0]: assumptions. Moving on""" start="00:05:58.480" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: your to another question.""" start="00:05:58.980" video="qanda-web" id="subtitle"]]
+[[!template text="""Yuchen, do you have any thoughts about Nixed,""" start="00:06:01.960" video="qanda-web" id="subtitle"]]
+[[!template text="""about its name, its approach,""" start="00:06:03.880" video="qanda-web" id="subtitle"]]
+[[!template text="""its relevance? About Nixed,""" start="00:06:08.560" video="qanda-web" id="subtitle"]]
+[[!template text="""the browser, N-Y-X-T. Oh,""" start="00:06:11.500" video="qanda-web" id="subtitle"]]
+[[!template text="""Nixed.""" start="00:06:11.720" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: About what? Yeah, I have tried it.""" start="00:06:17.220" video="qanda-web" id="subtitle"]]
+[[!template text="""Well, I mean, it's not Emacs.""" start="00:06:21.360" video="qanda-web" id="subtitle"]]
+[[!template text="""It's kind of similar. I think it tries to do""" start="00:06:26.140" video="qanda-web" id="subtitle"]]
+[[!template text="""something similar to Emacs,""" start="00:06:27.440" video="qanda-web" id="subtitle"]]
+[[!template text="""but The problem with Nix is that very early""" start="00:06:33.860" video="qanda-web" id="subtitle"]]
+[[!template text="""on I encountered an issue with keybinding.""" start="00:06:37.180" video="qanda-web" id="subtitle"]]
+[[!template text="""So the first thing I want to do is to make""" start="00:06:43.040" video="qanda-web" id="subtitle"]]
+[[!template text="""all its keybindings emax-y.""" start="00:06:44.300" video="qanda-web" id="subtitle"]]
+[[!template text="""So that's obviously...""" start="00:06:46.920" video="qanda-web" id="subtitle"]]
+[[!template text="""So what was the problem?""" start="00:06:51.200" video="qanda-web" id="subtitle"]]
+[[!template text="""So yeah, I couldn't even do that.""" start="00:06:53.040" video="qanda-web" id="subtitle"]]
+[[!template text="""I thought, I was expecting that it could...""" start="00:06:56.120" video="qanda-web" id="subtitle"]]
+[[!template text="""There shouldn't be any issues with setting up""" start="00:07:02.660" video="qanda-web" id="subtitle"]]
+[[!template text="""whatever key binding you want.""" start="00:07:03.960" video="qanda-web" id="subtitle"]]
+[[!template text="""So I, the, the issue was that when I tried to""" start="00:07:08.680" video="qanda-web" id="subtitle"]]
+[[!template text="""do when I tried to bind Ctrl S Ctrl R to the""" start="00:07:15.400" video="qanda-web" id="subtitle"]]
+[[!template text="""prompt going up and down,""" start="00:07:17.380" video="qanda-web" id="subtitle"]]
+[[!template text="""so I use I was I complete and I'm used to""" start="00:07:22.900" video="qanda-web" id="subtitle"]]
+[[!template text="""like the control S and control R to go,""" start="00:07:26.760" video="qanda-web" id="subtitle"]]
+[[!template text="""to cycle through the selections.""" start="00:07:28.980" video="qanda-web" id="subtitle"]]
+[[!template text="""And so I want it the same in next in its""" start="00:07:35.560" video="qanda-web" id="subtitle"]]
+[[!template text="""prompt like when, for example,""" start="00:07:38.460" video="qanda-web" id="subtitle"]]
+[[!template text="""typing a URL and get completion from history.""" start="00:07:43.620" video="qanda-web" id="subtitle"]]
+[[!template text="""But it has a conflict with the...""" start="00:07:48.900" video="qanda-web" id="subtitle"]]
+[[!template text="""And also, I try to bind the hint.""" start="00:07:55.680" video="qanda-web" id="subtitle"]]
+[[!template text="""So when I want to follow a link,""" start="00:08:00.440" video="qanda-web" id="subtitle"]]
+[[!template text="""So I press a hint key and then like all these""" start="00:08:05.800" video="qanda-web" id="subtitle"]]
+[[!template text="""links are highlighted with like little""" start="00:08:10.120" video="qanda-web" id="subtitle"]]
+[[!template text="""letters that I can like choose which 1 I want""" start="00:08:13.660" video="qanda-web" id="subtitle"]]
+[[!template text="""which link I want to follow.""" start="00:08:14.820" video="qanda-web" id="subtitle"]]
+[[!template text="""So I try to bind that 1 to J sort of like""" start="00:08:20.140" video="qanda-web" id="subtitle"]]
+[[!template text="""Control C, Control J, or mode.""" start="00:08:23.560" video="qanda-web" id="subtitle"]]
+[[!template text="""But apparently there's a conflict here.""" start="00:08:28.780" video="qanda-web" id="subtitle"]]
+[[!template text="""So when I do both these prompt mode binding""" start="00:08:33.320" video="qanda-web" id="subtitle"]]
+[[!template text="""and the document mode binding,""" start="00:08:36.260" video="qanda-web" id="subtitle"]]
+[[!template text="""Yeah, the prompt no longer works.""" start="00:08:39.960" video="qanda-web" id="subtitle"]]
+[[!template text="""And I reported the bug to Nixt.""" start="00:08:43.840" video="qanda-web" id="subtitle"]]
+[[!template text="""And yeah, and there was response but there""" start="00:08:50.500" video="qanda-web" id="subtitle"]]
+[[!template text="""are so many bugs there,""" start="00:08:52.580" video="qanda-web" id="subtitle"]]
+[[!template text="""and I don't think that bug is very high""" start="00:08:55.640" video="qanda-web" id="subtitle"]]
+[[!template text="""priority. So yeah, I basically stopped trying""" start="00:09:00.540" video="qanda-web" id="subtitle"]]
+[[!template text="""that because key mining is very important to""" start="00:09:03.500" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: Right, but, sorry, please finish.""" start="00:09:07.600" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: me. Yeah, so I mean, yeah,""" start="00:09:15.620" video="qanda-web" id="subtitle"]]
+[[!template text="""without key bindings I can't like,""" start="00:09:17.320" video="qanda-web" id="subtitle"]]
+[[!template text="""I won't. So, okay, I feel this is a very""" start="00:09:23.940" video="qanda-web" id="subtitle"]]
+[[!template text="""basic functionality. I'm kind of reluctant to""" start="00:09:29.280" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: Without key bindings, they are.""" start="00:09:31.220" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: continue trying what These are pieces.""" start="00:09:32.020" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: It reminds me of 2 points.""" start="00:09:34.200" video="qanda-web" id="subtitle"]]
+[[!template text="""So yesterday with Stefan we were talking""" start="00:09:35.840" video="qanda-web" id="subtitle"]]
+[[!template text="""about sane defaults and when he was sleeping""" start="00:09:37.540" video="qanda-web" id="subtitle"]]
+[[!template text="""today we talked about it again with a""" start="00:09:39.440" video="qanda-web" id="subtitle"]]
+[[!template text="""speaker. We did the mentor talk.""" start="00:09:41.400" video="qanda-web" id="subtitle"]]
+[[!template text="""Feel free to re-watch it afterwards.""" start="00:09:43.020" video="qanda-web" id="subtitle"]]
+[[!template text="""But it's funny how, you know,""" start="00:09:48.320" video="qanda-web" id="subtitle"]]
+[[!template text="""regardless of how big the package actually""" start="00:09:50.920" video="qanda-web" id="subtitle"]]
+[[!template text="""is, they always provide some kind of sane""" start="00:09:54.520" video="qanda-web" id="subtitle"]]
+[[!template text="""default and with Nixed,""" start="00:09:55.640" video="qanda-web" id="subtitle"]]
+[[!template text="""obviously, it's built with a Vim mentality""" start="00:09:58.620" video="qanda-web" id="subtitle"]]
+[[!template text="""and modality of key bindings.""" start="00:10:02.020" video="qanda-web" id="subtitle"]]
+[[!template text="""And for us, we are more used to the Emacs way""" start="00:10:05.860" video="qanda-web" id="subtitle"]]
+[[!template text="""of doing things. It's a complete blocker.""" start="00:10:08.040" video="qanda-web" id="subtitle"]]
+[[!template text="""No matter how great the pieces of""" start="00:10:10.320" video="qanda-web" id="subtitle"]]
+[[!template text="""functionality behind Nixed are,""" start="00:10:12.280" video="qanda-web" id="subtitle"]]
+[[!template text="""just the fact that UX-wise we cannot get into""" start="00:10:15.060" video="qanda-web" id="subtitle"]]
+[[!template text="""it or we cannot have it behave nicely with""" start="00:10:18.220" video="qanda-web" id="subtitle"]]
+[[!template text="""what we do. It's a massive block that is""" start="00:10:20.280" video="qanda-web" id="subtitle"]]
+[[!template text="""preventing appropriation of such tools.""" start="00:10:22.040" video="qanda-web" id="subtitle"]]
+[[!template text="""So it might seem very basic to bounce a""" start="00:10:25.940" video="qanda-web" id="subtitle"]]
+[[!template text="""package at the level of key bindings but""" start="00:10:28.300" video="qanda-web" id="subtitle"]]
+[[!template text="""that's what we all do.""" start="00:10:29.620" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I totally agree.""" start="00:10:32.800" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: Right, if I can just interrupt,""" start="00:10:36.180" video="qanda-web" id="subtitle"]]
+[[!template text="""we have about 2 more minutes of questions and""" start="00:10:38.520" video="qanda-web" id="subtitle"]]
+[[!template text="""I see people are writing more questions.""" start="00:10:40.940" video="qanda-web" id="subtitle"]]
+[[!template text="""Did you want to add something,""" start="00:10:42.180" video="qanda-web" id="subtitle"]]
+[[!template text="""Yucheng? On what we're saying?""" start="00:10:43.780" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: No, no, no, Let's continue.""" start="00:10:47.620" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: had plenty of time. Okay,""" start="00:10:51.340" video="qanda-web" id="subtitle"]]
+[[!template text="""I'm going to ask you to be quick about this""" start="00:10:53.100" video="qanda-web" id="subtitle"]]
+[[!template text="""1. I'm going to read the question,""" start="00:10:53.860" video="qanda-web" id="subtitle"]]
+[[!template text="""which is slightly long,""" start="00:10:54.620" video="qanda-web" id="subtitle"]]
+[[!template text="""and you're going to have about 30 seconds to""" start="00:10:56.320" video="qanda-web" id="subtitle"]]
+[[!template text="""answer it. Do you feel capable of this?""" start="00:10:57.720" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: I thought we Yeah, let's try it.""" start="00:10:59.860" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: Let's try it. At least try it.""" start="00:11:02.860" video="qanda-web" id="subtitle"]]
+[[!template text="""Okay, so quoting, I find the JavaScript trap""" start="00:11:05.208" video="qanda-web" id="subtitle"]]
+[[!template text="""almost impossible to avoid since I like to""" start="00:11:06.680" video="qanda-web" id="subtitle"]]
+[[!template text="""buy used stuff online and use my online bank.""" start="00:11:10.360" video="qanda-web" id="subtitle"]]
+[[!template text="""How do you deal with a JavaScript trap?""" start="00:11:13.140" video="qanda-web" id="subtitle"]]
+[[!template text="""I use NoScript and compromise on a few things""" start="00:11:15.400" video="qanda-web" id="subtitle"]]
+[[!template text="""I really feel I cannot live without.""" start="00:11:16.760" video="qanda-web" id="subtitle"]]
+[[!template text="""EWW is nice for a lot of things,""" start="00:11:19.080" video="qanda-web" id="subtitle"]]
+[[!template text="""especially with R for less noise,""" start="00:11:21.260" video="qanda-web" id="subtitle"]]
+[[!template text="""but I need Firefox for those GS and trapped""" start="00:11:23.760" video="qanda-web" id="subtitle"]]
+[[!template text="""pages. So do you have a quick answer to this?""" start="00:11:25.760" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I don't have a good answer,""" start="00:11:29.500" video="qanda-web" id="subtitle"]]
+[[!template text="""but I have a quick answer.""" start="00:11:30.640" video="qanda-web" id="subtitle"]]
+[[!template text="""So I use VPN and like a more,""" start="00:11:38.140" video="qanda-web" id="subtitle"]]
+[[!template text="""what do you call it, move out the Swedish VPN""" start="00:11:41.680" video="qanda-web" id="subtitle"]]
+[[!template text="""browser, move out browser.""" start="00:11:43.480" video="qanda-web" id="subtitle"]]
+[[!template text="""Yeah, so I unfortunately I have to use""" start="00:11:48.960" video="qanda-web" id="subtitle"]]
+[[!template text="""JavaScript in these cases as well,""" start="00:11:50.660" video="qanda-web" id="subtitle"]]
+[[!template text="""but I try to minimize the use of these""" start="00:11:53.800" video="qanda-web" id="subtitle"]]
+[[!template text="""things.""" start="00:11:54.020" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: How long do you think it will take for us to""" start="00:11:56.920" video="qanda-web" id="subtitle"]]
+[[!template text="""save the world with Emacs,""" start="00:11:58.140" video="qanda-web" id="subtitle"]]
+[[!template text="""or save the web at least?""" start="00:11:59.340" video="qanda-web" id="subtitle"]]
+[[!template text="""5 years, 10 years, maybe a little less than""" start="00:12:01.360" video="qanda-web" id="subtitle"]]
+[[!template text="""this?""" start="00:12:01.560" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: Well I think it's, unfortunately it's""" start="00:12:06.600" video="qanda-web" id="subtitle"]]
+[[!template text="""probably independent of Emacs,""" start="00:12:08.300" video="qanda-web" id="subtitle"]]
+[[!template text="""like it will only be saved when,""" start="00:12:12.180" video="qanda-web" id="subtitle"]]
+[[!template text="""like it's saved on like the normal,""" start="00:12:14.860" video="qanda-web" id="subtitle"]]
+[[!template text="""the more popular browsers like Firefox.""" start="00:12:18.960" video="qanda-web" id="subtitle"]]
+[[!template text="""I have no clue how long it will take for,""" start="00:12:23.680" video="qanda-web" id="subtitle"]]
+[[!template text="""I don't know, for example,""" start="00:12:25.120" video="qanda-web" id="subtitle"]]
+[[!template text="""Tala to pick up so that you can buy things""" start="00:12:28.660" video="qanda-web" id="subtitle"]]
+[[!template text="""without running JavaScript.""" start="00:12:30.020" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: Right. Well, I guess we'll have to cross our""" start="00:12:33.220" video="qanda-web" id="subtitle"]]
+[[!template text="""fingers then for Firefox to save the world.""" start="00:12:35.380" video="qanda-web" id="subtitle"]]
+[[!template text="""All right Yuchen, we're about out of time,""" start="00:12:37.260" video="qanda-web" id="subtitle"]]
+[[!template text="""we're moving on to the next talk in 20""" start="00:12:38.800" video="qanda-web" id="subtitle"]]
+[[!template text="""seconds. Thank you so much for your""" start="00:12:40.200" video="qanda-web" id="subtitle"]]
+[[!template text="""presentation and for waking up early and""" start="00:12:41.940" video="qanda-web" id="subtitle"]]
+[[!template text="""answering the question,""" start="00:12:42.540" video="qanda-web" id="subtitle"]]
+[[!template text="""and I can tell you, you were very alert and""" start="00:12:44.820" video="qanda-web" id="subtitle"]]
+[[!template text="""definitely more energetic than I was.""" start="00:12:47.020" video="qanda-web" id="subtitle"]]
+[[!template text="""All right, see you later.""" start="00:12:52.600" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 1]: Thank you. See you.""" start="00:12:53.940" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 2]: Bye. And we go to the next talk right now.""" start="00:12:58.400" video="qanda-web" id="subtitle"]]
+[[!template text="""[Speaker 0]: You are currently""" start="00:13:02.620" video="qanda-web" id="subtitle"]]
+[[!template text="""you""" start="00:13:15.260" video="qanda-web" id="subtitle"]]
+
+Questions or comments? Please e-mail [id@ypei.org](mailto:id@ypei.org?subject=Comment%20for%20EmacsConf%202023%20web%3A%20Emacs%20saves%20the%20Web%20%28maybe%29)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/web-before.md b/2023/info/web-before.md
new file mode 100644
index 00000000..ee6fcdab
--- /dev/null
+++ b/2023/info/web-before.md
@@ -0,0 +1,32 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 32-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="web-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="web-mainVideo" data="""
+00:00.000 Overview
+00:35.680 Background problems
+05:31.940 Solutions outside of Emacs
+09:46.480 Emacs solutions
+09:54.600 Free clients in Emacs
+12:43.021 Web browsers in Emacs
+16:52.380 emacs-web-server - overview
+17:30.380 emacs-web-server - hello emacs!
+18:17.580 emacs-web-server - yolo
+23:07.940 emacs-web-server - emacs web framework
+29:40.420 Firefox with emacs for extensions
+31:25.360 Thank you
+
+"""]]<div></div>Duration: 31:33 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm">Download --main.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei.org">Download .org</a></li><li><a href="https://toobnix.org/w/fvzGU4cQQ2meZVKNGEHMht">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="web-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="web-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus"></audio></div><div></div>Duration: 15:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus">Download --answers.opus (7.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm">Download --answers.webm (18MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/web-nav.md b/2023/info/web-nav.md
new file mode 100644
index 00000000..0afd6a12
--- /dev/null
+++ b/2023/info/web-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/mentor">Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</a>
+Next by track: <a href="/2023/talks/sharing">Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/info/windows-after.md b/2023/info/windows-after.md
new file mode 100644
index 00000000..4d8d8729
--- /dev/null
+++ b/2023/info/windows-after.md
@@ -0,0 +1,1260 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="windows-mainVideo-transcript"></a>
+# Transcript (unedited)
+
+[[!template text="""Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and welcome to uh""" start="00:00:00.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Welcome to my talk i'm a little distracted here""" start="00:00:11.440" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I had a friend who came over and just brought me a whole bunch of peanut butter cups homemade peanut butter cups""" start="00:00:13.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Maybe i'll show those off. Uh""" start="00:00:20.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""later""" start="00:00:22.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay, what okay here, uh, put it right there""" start="00:00:23.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""All good stuff""" start="00:00:30.960" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay, so i'm going to uh get over to my planned uh stuff i'm sharing here""" start="00:00:33.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""hopefully""" start="00:00:41.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, and and we'll jump jump right in because i'm gonna need as much time as I can possibly have today""" start="00:00:42.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""thanks so much for uh joining me for emacs conference and for""" start="00:00:49.440" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""especially for""" start="00:00:54.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:00:56.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""all of you who who participated, you know in the discussions contributing talks and""" start="00:00:57.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, you know, uh, you know, including running the copy the the and it's just so much fun to be here, um""" start="00:01:03.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I guess while i'm standing here and and saying stuff that's that i'm gonna have to""" start="00:01:11.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""transcribe because I didn't uh prepare a""" start="00:01:16.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""recorded version""" start="00:01:20.560" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, I had a lot of trouble trimming this down so I can solve that problem by just talking a lot at the beginning""" start="00:01:22.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""about other stuff, um""" start="00:01:28.960" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So in addition to the thanks I just want to say thanks also to the""" start="00:01:33.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Folks on the development list that helped me kind of come up to speed on this. I won't make a big list here. But""" start="00:01:37.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:01:43.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And and for all that i've learned from my previous conferences""" start="00:01:45.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""It's just I can't stress enough what a great opportunity volunteering for""" start="00:01:48.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh free software related things are""" start="00:01:53.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh as a way to get involved people will just totally teach you how to be helpful and i'm loving it""" start="00:01:55.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Sasha can you please maximize?""" start="00:02:00.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Hold on""" start="00:02:02.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I can preview the stream, but it's not super easy right now""" start="00:02:14.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I got all my screens kind of dedicated to other stuff""" start="00:02:17.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so should I pause for a second before I get into the slides because there's""" start="00:02:20.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""There they'll be hard to see if i'm not full screen""" start="00:02:24.960" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Yeah, yeah, okay, well i'll keep ad-libbing then because I just have a million, uh things I can say, um""" start="00:02:28.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, so, uh, let me just quickly talk, uh things that aren't in here. Um,""" start="00:02:37.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I'm going to mention the mysis2.org and the that project which provides a port""" start="00:02:43.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""of the GNU""" start="00:02:51.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Of uh glibc and a lot of GNU""" start="00:02:53.440" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""and other free software""" start="00:02:58.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, so""" start="00:03:01.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, I don't pushing a room to uh a dvd room to stefan""" start="00:03:03.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""All right, so i'm gonna take mumble out of my uh, pardon me folks just gonna take mumble out of my speakers here""" start="00:03:12.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay""" start="00:03:19.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay, in fact we'll take the speakers out of play entirely and i'll just switch to some headphones""" start="00:03:22.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""All right, so""" start="00:03:33.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Gorman you're good to go""" start="00:03:35.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Perfect. What an amazing amount of time. All right. So thanks a lot. Uh today i've got a jam-packed talk""" start="00:03:36.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, i've i've done my best to make""" start="00:03:43.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""To make this not too overwhelming, but overall we're going to try to try to actually build""" start="00:03:46.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um emacs while we're talking today and we might actually build several emacs""" start="00:03:52.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, so let's take a look at that real quick""" start="00:03:58.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, so over here we have a screen where I am""" start="00:04:00.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Just once a minute looking. Uh""" start="00:04:05.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Indirectly at whether there have been any pushes, uh upstream to either the emacs 29 or emacs 30 branches""" start="00:04:09.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so i've""" start="00:04:17.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Arranged for us to sort of keep an eye on that""" start="00:04:19.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um while we talk and you know, maybe that's that's one thing that we'll do and then additionally we'll probably""" start="00:04:22.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Fire up a shell. This is the mysis 2 environment that I talked about before""" start="00:04:30.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And we'll probably create some directories and things""" start="00:04:36.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""But before we get into all that let's let's give some some context. I've been doing my best to try to""" start="00:04:40.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, make sure all this information is on the emacs wiki as well""" start="00:04:47.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So, uh, sorry, as I said, I got a little caught off guard. So i'm moving my foot pedals""" start="00:04:51.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""To the float back to the floor here""" start="00:04:56.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And I should be able to advance slides here. All right, so""" start="00:05:00.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:05:05.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I kind of provided some special definitions for things i'm going to kind of level set with those""" start="00:05:07.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the uh""" start="00:05:14.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um when I say a binary release i'm talking about some some i'm talking about emacs for windows as""" start="00:05:17.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Just ready to run out of its folder or in whatever similar form""" start="00:05:25.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The when I say a build i'm talking about kind of a process of doing that""" start="00:05:30.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um when emacs.get of course, that's the upstream hosted by gnu savannah""" start="00:05:36.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The emacs release is a tarball created from that the sources""" start="00:05:41.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""For um emacs are going to be one of those two things""" start="00:05:48.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um very specifically so i'm not going to talk about patches patching there's some implications there perhaps we'll get into it""" start="00:05:54.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:06:02.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So a snapshot is when I build from anything other than a release source""" start="00:06:03.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh a tarball""" start="00:06:09.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, just if I if I say that i'm talking specifically""" start="00:06:11.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""about the uh, the xz""" start="00:06:16.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Version of the file as as a technical point""" start="00:06:18.980" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, so that may come up. All right, nothing else I think up my sleeve. Um""" start="00:06:22.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the""" start="00:06:29.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh as as a key data point it's worth understanding that there's a file called configure ac""" start="00:06:30.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""It's going to be processed, uh as part of autoconf. We we initially access that when we run""" start="00:06:37.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um autogen as you'll see in a little bit""" start="00:06:44.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:06:48.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The but before but um, so the autogen script will generally consider this. Uh, so in a release build""" start="00:06:49.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, this has been thought about kind of for us as part of um making the tarball""" start="00:06:57.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um the configure dot a""" start="00:07:03.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""ac""" start="00:07:05.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:07:07.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Yeah, I think I pretty much covered covered this so""" start="00:07:08.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um those those that kind of partially built status that's a might be another phrase that you hear me use""" start="00:07:12.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so this""" start="00:07:19.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Slide unpacks that a little more""" start="00:07:20.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um""" start="00:07:24.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So it can be a little confusing to understand what exactly?""" start="00:07:26.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the you know, what is it, you know, how stable is emacs depending on what I have so that I got a""" start="00:07:30.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""It's kind of a set of rules of thumb here right first I want the highest, uh, you know dot""" start="00:07:36.980" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh dot release value that I can get assuming that that's higher than one""" start="00:07:43.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""If it's if it were to only be one, let's say my choices were 29.1 and 30.1""" start="00:07:49.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I would take 30.1""" start="00:07:56.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:07:58.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""because that's that's weird, but um""" start="00:07:59.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""What you'll normally see is you might see a 28.2""" start="00:08:02.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You might see a 29.1""" start="00:08:06.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So here I think 28.2 has got the most most most stable""" start="00:08:08.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:08:15.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""set, uh the""" start="00:08:16.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh, or set of release binaries""" start="00:08:18.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the""" start="00:08:21.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""29.1 will will have a little more features, but will tend to be more stable""" start="00:08:23.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""than""" start="00:08:28.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Any lower point releases for 29""" start="00:08:29.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, certainly than any release candidates for 29, which might even have new features""" start="00:08:32.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, but are mostly going to just be patches so they're going to become the most stable""" start="00:08:38.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""thing here""" start="00:08:43.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""and especially if they they have a""" start="00:08:44.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You know if this this is not""" start="00:08:48.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, if this were to be 29.2 release candidate one as well looking forward to seeing""" start="00:08:50.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:08:56.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the""" start="00:08:57.960" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""30.0.50""" start="00:09:00.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:09:02.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And and in between this this pre-test here, we're talking about kind of developer land. Um, so""" start="00:09:03.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, the expectation is that you know what you're doing that applies to windows users""" start="00:09:10.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh just as much if you are building anything in the snapshot range any of that is going to be in this""" start="00:09:14.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""30.0.50 currently that'll change when""" start="00:09:21.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the""" start="00:09:24.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""when the""" start="00:09:25.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""30 30 an emacs 30 release tags, uh, or release branches come""" start="00:09:27.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay, so""" start="00:09:34.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Let's talk about the local um, there's not much to know about what I have going on""" start="00:09:37.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""except that I have my my paths mess messed with so""" start="00:09:43.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, if if that that were to come up if you're wondering how why does this?""" start="00:09:48.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh in in sys command work that's that's probably the way place where you notice it""" start="00:09:52.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, I am using windows 10. I haven't tried windows 11""" start="00:09:58.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh as mentioned my sys2 is critical to all this""" start="00:10:02.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""There's one script in particular that will error out if you try to do anything other than use my sys's""" start="00:10:06.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""My sys's shell and in fact my sys owns""" start="00:10:11.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Or provides three shells and of them that script is designed to work with a specific one of them as we'll come to""" start="00:10:14.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I don't talk about installing the dependencies, but just as as kind of some kind of help. Um,""" start="00:10:23.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You can search using this formula and install""" start="00:10:31.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Using this formula good luck with those, you know grep commands""" start="00:10:37.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And sys is the tool for building the self-installing self-extracting installer or uh executable self-installer""" start="00:10:43.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, the script for that is provided along with the emac source""" start="00:10:51.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, and i've provided a helpful link to the main page for the project download link on the left. It is not""" start="00:10:56.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""It's kind of scare where the way that this link appears, but I have clicked it and it's working for me""" start="00:11:05.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Automation does uh, we'll we have some time we'll be looking at this at a minimum""" start="00:11:14.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I wanted to mention that what I do on my local what you're seeing in the crawler, I hope""" start="00:11:19.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh represents a""" start="00:11:25.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:11:27.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""A simple sleep loop, uh, and we'll we'll look into that if we have time""" start="00:11:30.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, I do have a little but I do use like a cron job and so on to clean up some hosting that I pay for""" start="00:11:36.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um where i've got where I where I kind of self-host""" start="00:11:44.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""some uh snapshots""" start="00:11:48.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""more stuff than I feel comfortable uploading to""" start="00:11:50.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh, to gnu""" start="00:11:54.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The um""" start="00:11:57.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You know, I never said, uh, my name is corwin bruce for the last couple of years i've been the volunteer making""" start="00:12:01.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh making the snapshots the quote-unquote official binaries, uh for windows of the""" start="00:12:08.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:12:15.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Of of emacs for windows. So that's that's all the different versions. Uh help is always welcome with that""" start="00:12:17.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I'd be very happy to teach you in more depth. This video is""" start="00:12:23.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You know kind of my drop dead file. Uh, I don't have specific plans. Uh, if somebody's like hey get out of the way""" start="00:12:27.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""This is the one thing I think I can do""" start="00:12:33.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, hey, that's real relatable""" start="00:12:35.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay, um, so I haven't tried uh, the I haven't tried a lot of fun things that I won't talk about""" start="00:12:39.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, the uh, the rest of this talk is going to get into the nitty-gritty as I said, um""" start="00:12:46.940" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""If we can't convince emacs to start building over on that screen, we'll be opening it up here on the center stage""" start="00:12:52.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:12:59.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, this begins and there's there's there's there's great insight here too on the wiki, uh""" start="00:13:01.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""With picking an ftp source for any official release""" start="00:13:08.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That is for a stable product. Please visit""" start="00:13:12.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um ftp.gnu.org""" start="00:13:16.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Otherwise, you'll want to switch that ftp dot at the beginning to alpha dot and take a pre-test""" start="00:13:19.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, or any snapshot or otherwise then they're not published there""" start="00:13:25.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The uh next""" start="00:13:30.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh, you know""" start="00:13:32.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""i'm gonna you have some examples in here that assume that you're doing a release build that you're doing 29.1, but""" start="00:13:34.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, i'm glancing out of the the right side of my face at the""" start="00:13:41.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Chat on the optance anybody in there wants to direct me at a particular""" start="00:13:48.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, we can make some other we can build something""" start="00:13:53.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Else if you want to see a snapshot build more mention that um the examples that you're going to see here""" start="00:13:56.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That I will without other direction cut and paste""" start="00:14:03.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:14:07.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Are all based on a release bill""" start="00:14:09.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so""" start="00:14:12.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, and so, uh, we'll use the uh, I mentioned that there are several shells provided by mysis2""" start="00:14:14.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""To the min-gw64""" start="00:14:22.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Shell is the one that we mostly need""" start="00:14:25.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, I tested all of this as well with the min-gw32 shell""" start="00:14:28.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:14:34.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So that that should work and and see mix binaries that that work for me""" start="00:14:35.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh""" start="00:14:44.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I as I mentioned, I don't get into the details of installing all your prerequisites""" start="00:14:46.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I found that doing it in a headfirst manner wasn't uh,""" start="00:14:50.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Wasn't difficult and I also found that there's a number of tutorials. I didn't want to pick one to link here""" start="00:14:54.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um there uh""" start="00:15:03.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Here are uh, okay, so""" start="00:15:06.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Our general formula for building emacs irrespective of windows""" start="00:15:10.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""looks like""" start="00:15:15.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Does the configure script exist if not run autogen?""" start="00:15:16.800" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""from a windows build standpoint""" start="00:15:21.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""This is if i'm not running a release that release build call the autogen script""" start="00:15:23.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Right and this would be in the directory where we want to pack this i'll demonstrate""" start="00:15:31.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""within""" start="00:15:35.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""three minutes if uh""" start="00:15:37.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""If one if nobody's pushed upstream to emacs""" start="00:15:39.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:15:42.800" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so, uh the configure, uh, and""" start="00:15:44.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""configure options""" start="00:15:48.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""are uh""" start="00:15:50.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh the configure, you know if the configure sorry if the configure script exists then""" start="00:15:53.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh doesn't doesn't exist. So the only reason so in my process I will always execute that step because I clean everything""" start="00:15:58.800" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""after every build, um in all my contexts""" start="00:16:06.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, however, if you were you know had a""" start="00:16:10.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Checkout of emacs dot get and you are building it at several releases""" start="00:16:14.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Then maybe you've got a configure script and then you'll want to know""" start="00:16:19.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um the you know""" start="00:16:22.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Whether you have to bootstrap and the typical complexities, but otherwise you might be able to skip that in in the abstract""" start="00:16:24.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:16:32.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Is that right or is it is""" start="00:16:36.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Make uh, so and if the make file doesn't exist make install. I know i'm""" start="00:16:38.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Looking at that and i'm questioning whether it's correct. Sorry about that""" start="00:16:43.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um in any case, uh, so autogen configure make install is our recipe autogen""" start="00:16:48.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Creates the configure script configure creates the make file the make file""" start="00:16:55.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um in the case of windows, I almost always want the install""" start="00:17:00.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh and to specify some location where the installed emacs will land this is""" start="00:17:04.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""where""" start="00:17:10.440" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""all of the recipes for packaging emacs""" start="00:17:11.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""go""" start="00:17:14.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""and if I were""" start="00:17:15.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You know using this as a movie to upgrade I personally would do that by""" start="00:17:18.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""by specifying an install path quote unquote on top of""" start="00:17:23.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh a main installation. I don't do that. I update shortcuts manually based on what specifically I want to try""" start="00:17:27.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh in an effort to to to notice, uh interesting patches and confirm they work on windows""" start="00:17:34.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Which mostly they do there's not a lot of code in my experience that is""" start="00:17:41.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Windows specific and very very little around the build process""" start="00:17:46.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""All right""" start="00:17:50.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Huge rabbit hole zone and I still have a minute before I have to kick off the first part of our demo""" start="00:17:51.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so""" start="00:18:00.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Let's let's keep keep diving in""" start="00:18:01.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:18:04.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The those specific part windows specific parts beside the dot exe extension that we're going to find slammed onto all of our familiar""" start="00:18:05.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh executables. We're also going to have emacs client w""" start="00:18:14.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Which is a wrapper that hides?""" start="00:18:18.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um how hard it is to get""" start="00:18:22.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh to take it""" start="00:18:25.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""How bad the abstraction is between the window management layer and the gooey?""" start="00:18:27.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And then all the different parts on windows essentially it wants to create a shell window if we just double click emacs.exe""" start="00:18:32.440" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So emacs client w""" start="00:18:39.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh and run emacs are going to solve that problem""" start="00:18:41.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:18:45.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Wrapping emacs and emacs client respectively""" start="00:18:46.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And""" start="00:18:51.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Just uh""" start="00:18:53.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""All right, so let's let's go ahead and do something i'll i'm going to take away the ticker here for a minute""" start="00:18:56.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And what you're not seeing is off stage. I am""" start="00:19:02.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Killing that so we don't get builds in parallel""" start="00:19:07.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um""" start="00:19:11.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So, um""" start="00:19:15.960" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So at this point i'm going to open up a shell and i'm going to start talking just a little bit about""" start="00:19:17.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""My local build environment, which we haven't gotten into in fact just to make that even easier""" start="00:19:22.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""let's um""" start="00:19:28.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Let's just take a look at it a little bit probably the easiest spot""" start="00:19:31.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Is""" start="00:19:37.560" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Here""" start="00:19:40.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""All right, so here we have the familiar windows my computer interface""" start="00:19:47.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I have the g drive and the h drive""" start="00:19:52.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""four terabyte drives""" start="00:19:56.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um dedicated to""" start="00:20:00.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""my""" start="00:20:02.440" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, really overblown emacs build process""" start="00:20:03.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, this just lets me be super lazy. There's no reason you need any massive amount of storage to do any of this""" start="00:20:08.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um inside here and now i'll actually switch you back to the other screen""" start="00:20:15.800" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:20:21.960" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We'll we'll find""" start="00:20:24.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Oops""" start="00:20:35.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Sorry about that""" start="00:20:38.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""It didn't take the time to label that one""" start="00:20:40.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Label that one""" start="00:20:42.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, so here you can see the primary output that""" start="00:20:44.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That i'm looking at through this automated process""" start="00:20:49.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I come along I look at the bug reports or maybe i'm just restarting my computer and choosing what emacs""" start="00:20:52.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""version at random and then in that case, I look at this modified date and I say""" start="00:20:58.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um my config that I""" start="00:21:03.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You know that i'm playing with right now is all set for emacs 30""" start="00:21:05.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Or i'm testing them both and i'm relaunching both of these right""" start="00:21:09.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So for me that starts by diving into the install folder going into the bin folder""" start="00:21:13.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Which looks exactly the way my automation leaves it. I then come in to run the run emacs""" start="00:21:18.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And I create a shortcut""" start="00:21:25.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:21:27.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""To it""" start="00:21:29.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so""" start="00:21:30.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I'm a keyboard person. So that's usually done like this""" start="00:21:31.960" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And then I just know that the context menu is going to come up in the right place so i'll come up and""" start="00:21:36.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:21:42.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Possibly change the change the shortcut, right?""" start="00:21:44.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""If I don't mess with it""" start="00:21:53.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um""" start="00:21:56.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So here's where i'll add my minus q if that's kind of where my world is at or it kind of depends on what i'm doing""" start="00:21:57.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""With these which varies week to week""" start="00:22:03.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, so restarting my emacs, uh involves doing the same thing going to my desktop""" start="00:22:07.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And where you'll find a number of emac shortcuts""" start="00:22:12.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""and""" start="00:22:17.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um updating the shortcut in the same manner""" start="00:22:20.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Actually, maybe we'll just let's go back there and just show it. So if we look at for example my erc""" start="00:22:23.960" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You can see it's going to be pointing at one of these""" start="00:22:33.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""clones, and then it's gonna""" start="00:22:37.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Maybe tell me that I want it wants to be full screen. No, not currently and then it might uh,""" start="00:22:39.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Have some stuff in there about auto loading a config and what connections i'm going to some commands i've defined to start connections""" start="00:22:45.560" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So""" start="00:22:53.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""All right, and sorry I got a phone call I was checking it wasn't in an order the organ the other organizers giving me the hook""" start="00:23:00.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So, um, all right, so that's that's probably enough on the local system. Let's get back to""" start="00:23:08.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""To to building emacs and now it hopefully makes a certain amount of sense when I say we're gonna wander over to the h drive""" start="00:23:15.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""and recreate the structure that""" start="00:23:22.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""both""" start="00:23:25.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""My process sort of assumes and the scripts you'll find in the admin nt""" start="00:23:27.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh build disk folder in source""" start="00:23:34.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Used to assume those scripts are in need of some love and in just a little bit i'll be mentioning a build""" start="00:23:38.940" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:23:45.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""a uh""" start="00:23:46.940" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""A a particular bug that you might want to pay attention to if you're interested in making a self installer""" start="00:23:47.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""all right, so""" start="00:23:54.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:23:57.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We're going to create""" start="00:23:58.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh an emacs build directory""" start="00:24:01.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And we've got a handy git clone stage git clone command stage for ourself that would work""" start="00:24:08.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:24:16.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Do not currently see anybody lobbying for that. So instead we will run the rather faster""" start="00:24:19.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh w get command""" start="00:24:28.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""On savannah, which is not pasted in here. Nice. Let's see if I can freehand it not gonna do it""" start="00:24:30.940" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:24:37.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um""" start="00:24:45.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Beg your pardon i'm grabbing a url from the internet""" start="00:24:51.980" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, okay. Yeah, I can't I can't honestly I can't freehand it whatever""" start="00:25:00.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Sorry, I uh""" start="00:25:06.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I didn't have that bookmarked and all handy like I thought I did""" start="00:25:07.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, so we'll just say ftp.gnu""" start="00:25:12.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text=""".org""" start="00:25:15.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, what is it pub emacs emacs-29.1""" start="00:25:17.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh""" start="00:25:26.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Hmm""" start="00:25:34.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I""" start="00:25:36.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Didn't""" start="00:25:40.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Really think i'd have this command sitting around it makes me want to scrap the whole demo i'm not gonna lie""" start="00:25:43.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay, how am I doing your time?""" start="00:25:48.940" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, I think at least 15 minutes. Um, but in the command that you were freehanding should the pub be gnu instead""" start="00:25:51.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Oh, thanks""" start="00:25:59.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I'm, sorry""" start="00:26:01.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""There we go, thank you. All right, and then we'll""" start="00:26:07.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And i'm not sure I provided commands for this either""" start="00:26:17.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""But it is trivially easy to do and while that happens we'll get to move on a few slides""" start="00:26:22.940" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um""" start="00:26:29.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The configure script i'm not talking about in a lot of detail""" start="00:26:31.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""But I do want to mention that the gnu binaries are provided with native""" start="00:26:35.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh compilation enabled that's the feature that uses gcc""" start="00:26:41.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""lib gcc get on windows if available that looks gcc get will be used""" start="00:26:46.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, but when but if if emacs has that feature then it will take by compile""" start="00:26:53.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""native code and""" start="00:27:01.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""asynchronously""" start="00:27:04.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Compile that as needed""" start="00:27:05.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh with the ahead of time feature""" start="00:27:07.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We're going to do as much of that ahead of time and for folks that are consuming the windows binary""" start="00:27:09.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The thinking goes that they might not have mysys too. They might not have""" start="00:27:14.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Gcc jet they might be""" start="00:27:19.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Happy that they're enabled""" start="00:27:22.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""In a you know a lot of time run emacs on their local environments""" start="00:27:24.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""At all""" start="00:27:30.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You know in a maybe a lockdown at a corporate context""" start="00:27:31.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so""" start="00:27:35.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""aside""" start="00:27:36.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""that""" start="00:27:37.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""There's your first glimpse at the configure""" start="00:27:38.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Program that we're going to run in a moment. In fact, i'm going to go as far as""" start="00:27:42.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Putting it on the clipboard""" start="00:27:47.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:27:49.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Really just looking at this the aot flag""" start="00:27:50.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""It's the one i'd call attention to but it's worth understanding that windows doesn't provide a dbus capability""" start="00:27:53.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So windows native program isn't gonna be able to depend on dbus. We're gonna""" start="00:27:58.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We're gonna explicitly ask that that be left out. I think that's actually optional. It's documentation""" start="00:28:03.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I think the configure program is smart enough to know that we don't want dbus""" start="00:28:09.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""on windows""" start="00:28:13.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, otherwise we tend to compile with things. Um, there there's missing documentation. We could say the uh,""" start="00:28:15.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""all of the libraries are treated in the way I mentioned in that""" start="00:28:23.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Jpeg support will be available as long as""" start="00:28:27.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Jpeg is is available in our environment and configure script certainly notices that""" start="00:28:32.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, the new provided binaries are provided with minus o2 and that's also my default personally on windows. Um,""" start="00:28:37.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""However, and i'm going to skip this since I mentioned it""" start="00:28:45.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um mentioned""" start="00:28:49.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh, and uh""" start="00:28:51.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um""" start="00:28:54.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So I guess i'll say um, you can um say with""" start="00:28:56.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the""" start="00:29:01.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""It's worth knowing that you if you're not one reason that that you're building might be because you want to turn off native""" start="00:29:02.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Compilation for whatever reason if you have load juices you get it, but don't want emacs to use it""" start="00:29:08.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, especially as that default looks like it could be changing with emacs 30""" start="00:29:14.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:29:19.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the uh""" start="00:29:20.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the debug configuration, um, this is this is the uh, kind of""" start="00:29:22.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, what what i'm currently using this on commentary. Uh, i've seen on the emacs development list""" start="00:29:27.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um""" start="00:29:34.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""All right, let's check on our checkout and see if we can't get a build running""" start="00:29:40.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, this is a release build so I won't be starting with""" start="00:29:44.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, so we'll start by hopping into its directory""" start="00:29:49.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And we um we have""" start="00:29:53.980" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh""" start="00:29:59.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""But not""" start="00:30:05.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay, so that tells us we're gonna run""" start="00:30:11.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Our configure program""" start="00:30:15.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""But we don't need to run uh config ic""" start="00:30:18.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So""" start="00:30:23.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So let's get that going and""" start="00:30:31.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:30:34.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Hopefully that's showing through just enough to be fun not too much to be distracting""" start="00:30:36.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um the uh the unoptimized""" start="00:30:46.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, please report issues if your emacs is crashing, uh to the emacs development list not to me personally""" start="00:30:52.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, although you are of course welcome to copy me""" start="00:30:59.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, if you especially i'm subscribed to that list so I get all the mail so I don't mind being copied""" start="00:31:02.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh, and""" start="00:31:09.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""as well""" start="00:31:11.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""if you think it's""" start="00:31:12.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:31:13.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You know related to packaging that actually makes sense""" start="00:31:15.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Or windows related even and uh, it can be tested with an extra snapchat that should be uploaded to the gnu alpha side""" start="00:31:18.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I could look at that if I have time""" start="00:31:25.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay""" start="00:31:27.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That is with the configure script to make file for""" start="00:31:29.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Emacs is really really complicated if time permits which i'm, you know now confident it will not""" start="00:31:32.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We will look at a makefile that I tried writing that orchestrates this whole process that i'm talking about""" start="00:31:39.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um as uh, let's see, so the build uh build process I run my builds with""" start="00:31:47.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh explicitly specifying the max cpu, uh""" start="00:31:54.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""with minus j""" start="00:31:59.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""But minus b1 to get the full build, uh full login to your recipes. That is probably the magic thing""" start="00:32:01.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""that um""" start="00:32:09.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""shouldn't to understand with uh""" start="00:32:10.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Or that uh that that uh that i'm glad that I know, uh as i'm trying to write my automations""" start="00:32:15.980" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:32:24.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh the um""" start="00:32:26.940" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So I call that out here the binary, uh releases""" start="00:32:29.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay. So in this section, we're going to start to get into what are all those files""" start="00:32:35.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And there's a bug report related to that that I didn't get into here. So""" start="00:32:39.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, that's kind of to the point about the less said about this the better""" start="00:32:43.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That's my explanation for stepping through some of these slides. Uh, of course""" start="00:32:47.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Share them all um""" start="00:32:52.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Hopefully by the time that this video is published""" start="00:32:55.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I mentioned it. Um, I may have mentioned already freshly installed but uh fully installed""" start="00:33:01.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh this the the key distinction here is that uh emacs is""" start="00:33:07.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Distributed in the binary form for windows with some dll files that actually come from the mysis 2""" start="00:33:13.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Project there's an implication there to gcc that I definitely want to get to it talking about""" start="00:33:21.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, so freshly installed means""" start="00:33:28.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We haven't copied those binaries from the mysis 2""" start="00:33:31.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh installation""" start="00:33:35.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""into the emacs""" start="00:33:37.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh installation""" start="00:33:39.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh, and then""" start="00:33:41.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""When we re-archive that local emacs installation, that's how we're going to create the full zip""" start="00:33:43.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So hopefully that actually is a pretty good summary of what all those files are""" start="00:33:48.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, but there are readme files on the ftp. They do a pretty good job""" start="00:33:53.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""If you can dig enough to find one and my apologies for uh tardiness getting a new version on that posted""" start="00:33:59.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:34:07.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the emacs""" start="00:34:09.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, so those dependencies, uh are listed within the emacs itself and as we'll just talk about in a moment""" start="00:34:10.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""There's a way""" start="00:34:17.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh that we can use we can access that""" start="00:34:18.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""When we collect them in order to meet the gcc requirement that is essentially""" start="00:34:22.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""to include""" start="00:34:27.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um include the sources for the for those binaries the things that were compiled against""" start="00:34:29.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:34:36.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The uh, so so here we go, we're we're into the build process""" start="00:34:39.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Let's just take a look and see if configure it got done it sure did""" start="00:34:42.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""and now we can see a table of""" start="00:34:46.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Hopefully good, but good and bad news""" start="00:34:49.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um in potential""" start="00:34:51.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um where we're learning that we're using the pdumper strategy and any number of other things that we might be""" start="00:34:53.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Messing with as our motivation for for building ourselves on emacs""" start="00:34:59.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""again, this table represents""" start="00:35:04.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh what you'll what""" start="00:35:07.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""What what it looks like for me when i'm building for the gnu distributed binaries""" start="00:35:10.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""All right, so um""" start="00:35:17.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Kind of moving moving as quickly as I can here""" start="00:35:20.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I'm at 40 after I believe that's the five minute mark""" start="00:35:24.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so""" start="00:35:28.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um having just succeeded in in configuring emacs. I don't think we're going to build it. Uh""" start="00:35:29.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I don't think we're going to actually get to running make install""" start="00:35:35.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, but I have it sitting here on my keyboard or clipboard assuming that we will right?""" start="00:35:39.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""No""" start="00:35:49.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Oh, wow""" start="00:35:50.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I think i've managed to confuse this. All right, so for me that looks simply like""" start="00:35:52.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh make""" start="00:35:57.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""v equals one""" start="00:35:59.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh install, uh prefix equals""" start="00:36:01.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:36:10.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And we can at least get it kicked off""" start="00:36:18.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And that that command is just uh""" start="00:36:22.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Just is no no different than I showed on the slide where I where I gave it""" start="00:36:26.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, I wasn't planning to stop and explain it. I was just planning to paste it in""" start="00:36:31.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so""" start="00:36:35.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So so again recapping the rest of the process here and maybe actually making it if you can believe it or not""" start="00:36:36.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""through the rest of these slides, um""" start="00:36:42.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We to to create the full set of binaries. We're going to need a no dependent no depth archive. That's without the mysys2""" start="00:36:45.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""To uh deal provided dlls just the things that we compile as part of making emacs""" start="00:36:52.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:36:59.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The uh, the build depth zip script is uh provided with the source distribution is your tool""" start="00:37:02.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""for uh meeting the gpl requirements ride source as mentioned before""" start="00:37:10.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, there is a second bug that I did, uh include some more information on in my notes already""" start="00:37:14.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um that uh""" start="00:37:22.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That gets into the details of this other feature I alluded to""" start="00:37:24.800" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, i'll just skip into that""" start="00:37:28.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:37:31.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""we can with with uh""" start="00:37:32.560" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""With a an appropriate version of that which you may need a patch""" start="00:37:35.440" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh to""" start="00:37:41.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""To have you can list out the dependencies""" start="00:37:42.560" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And and that version as well can consider the dependencies of the emacs binary versus the hard-coded list""" start="00:37:45.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You might find depending on when you look at this file in the source tree""" start="00:37:51.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The different um""" start="00:37:56.980" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so""" start="00:37:59.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I also have a hack here that uh works around the absolute requirement to run this with the mysys2""" start="00:38:00.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And not the mingw64""" start="00:38:07.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""64""" start="00:38:09.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Script""" start="00:38:14.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um""" start="00:38:17.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Once we've made that zip file that contain that's that's our installed emacs without the dlls provided by mysys2""" start="00:38:18.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We'll then unpack the dependencies that were created by that python script. We just talked about from the emacs source tree""" start="00:38:28.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So at that point once those are unpacked we can now make what's called the full""" start="00:38:36.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Installer or sometimes I might call it the unqualified installer because it's just going to be called emacs29.1.zip""" start="00:38:41.600" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um and that uh that file which which creates the archive""" start="00:38:51.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That""" start="00:38:58.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""that that file is exactly the same plus the""" start="00:38:59.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, the dependencies that we unzipped in the bin folder of the installed emacs""" start="00:39:03.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the""" start="00:39:09.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Executable self-installer, which I would love to have more time to talk about I gave a few pointers here on the hard part of running""" start="00:39:10.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""it most importantly""" start="00:39:17.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""If i've installed in any kind of funny looking name, I end up renaming it to like emacs-29.1""" start="00:39:19.940" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Or emacs-29. or 30.0.50 or whatever and I just rename that installed""" start="00:39:26.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Emacs folder and then I go to the root of wherever I created that the parent directory above it""" start="00:39:33.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And that's where I make my copy of the emacs nsi""" start="00:39:40.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um the the nsis script""" start="00:39:44.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""and uh""" start="00:39:47.560" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That's also where I""" start="00:39:49.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And then uh, then from that parent directory I execute uh making sys uh here I as mentioned""" start="00:39:51.960" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:39:59.800" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I I can get away with this because I have it on my path and it's my recollection""" start="00:40:00.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I think I tested this and couldn't reproduce the problem. So I didn't document it here, but i've had some problems with running this when""" start="00:40:05.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:40:12.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""When nsis wasn't on my path""" start="00:40:13.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The uh, the the final step here""" start="00:40:16.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And the last the gpl requirement is to include all the sources""" start="00:40:20.440" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Except when i'm doing a release build I always do this""" start="00:40:25.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, and that's the new practice when making snapchat binaries is to go ahead and include the sources""" start="00:40:30.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Even though we might have the specific revision number""" start="00:40:36.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, our thinking is we want absolute clarity""" start="00:40:39.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""that that somebody""" start="00:40:44.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh can say okay this binary did this thing from the source for it i'm gonna go take that into my own open source""" start="00:40:45.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""yeah, maybe they would the jerks them into my own open source project and""" start="00:40:53.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:40:57.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Off, you know off they go, uh, and that needs to be possible""" start="00:40:59.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:41:04.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so, um""" start="00:41:06.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Beyond that the rest of this is is really detailed that you find covered in the gnu maintainers manual""" start="00:41:07.960" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, this is the the current set of windows binaries that um, it's busily working on""" start="00:41:14.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""creating a like for like a""" start="00:41:20.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Mirror to behind the scenes here is called a 29.1 underscore two""" start="00:41:23.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, and I have a lot of""" start="00:41:30.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Automation available on this site. So at this point i'm just I think i'm only""" start="00:41:32.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""minute 40 seconds over i'm""" start="00:41:38.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""gonna""" start="00:41:41.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""invite my""" start="00:41:42.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Co-organizers back onto the call or any volunteers that want to jump in and anybody if there's people on the bbb""" start="00:41:44.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I'd be happy to take questions if there aren't""" start="00:41:50.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, I have a screen full of""" start="00:41:53.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The automation stuff ready to go as a kind of a second ring in my circus today""" start="00:41:57.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So if you're still with me, thanks a lot for joining me, and I really enjoyed this talk""" start="00:42:03.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, if this is where we're going to close it out. I don't know where we're at for schedule today""" start="00:42:07.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, thanks a lot for a great talk corwin""" start="00:42:13.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um in terms of like schedule, yeah, you went over a little bit for the official like, um""" start="00:42:16.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""schedule or time of your talk, but I think""" start="00:42:22.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We actually have maybe like six or seven more minutes. Um here on stream""" start="00:42:24.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""For um questions and such if folks have questions or if you want to like quickly maybe show one or two more things""" start="00:42:29.800" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:42:36.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""But I think the hard stuff is about like""" start="00:42:37.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Maybe 10 minutes ish for now and then we'll have to rush over to um""" start="00:42:39.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""for the closing remarks, so""" start="00:42:43.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Well, that sounds awesome""" start="00:42:48.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay, so i'm looking at the the dev chat, uh, I see a comment on cross compiling the emacs""" start="00:42:51.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""But i'm sorry, i'm looking at irc primarily, but uh, feel free to jump in if you're on bbb with me or""" start="00:42:58.440" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, uh, if if you put something on the pad i'm sure""" start="00:43:05.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I will see it between the two of us""" start="00:43:09.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh over here""" start="00:43:13.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay, so cross compiling emacs for serenity. I haven't tried really any cross compiling. I think that would be very interesting""" start="00:43:14.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I would most likely focus on""" start="00:43:21.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Doing exactly what I do on a gnu system completely ditching""" start="00:43:23.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:43:29.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So I guess with my my remaining time rather than walking through code""" start="00:43:30.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um for my automation which can be another talk if in fact there's an interest in that""" start="00:43:35.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:43:40.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I want to I guess say a couple words about the non-free operating system""" start="00:43:41.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That i'm using here. I did my best to use no""" start="00:43:46.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""non-free software other than""" start="00:43:50.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the""" start="00:43:53.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh the operating system""" start="00:43:55.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That is the context for this talk in preparing this talk for you""" start="00:43:57.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I personally have a lot more""" start="00:44:02.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh time and energy I have to say invested in proprietary tools for doing a lot of the things that""" start="00:44:06.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That go into this so I really respect the work of people that pull that off. Um""" start="00:44:14.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I'm, sorry, I didn't get my pre-recorded stuff. Uh kind of in order for everybody, but I just want to stress like""" start="00:44:20.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, it is all absolutely possible and just hats off to everybody that that used uh entirely free software to get their""" start="00:44:28.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Get their recordings done in time""" start="00:44:36.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, and what you did see""" start="00:44:38.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Unless it was provided by the operating system in my presentation today was all""" start="00:44:41.640" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh free software with the debatable exception of nsys which styles itself""" start="00:44:46.040" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""as open source""" start="00:44:51.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""maybe for uh marketing reasons""" start="00:44:53.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh in any case, uh, certainly we can get out of the source""" start="00:44:57.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Thanks for the note corinne, it's good to know that uh""" start="00:45:08.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Building or uh, yeah doing the build of emacs for windows on windows can be done using only free software""" start="00:45:11.320" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Yeah, absolutely""" start="00:45:19.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Probably the right closing note, right?""" start="00:45:23.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, I just uh, thanks again to the organizers for bearing with me and like every time I was like you guys i'm""" start="00:45:26.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Terrible at this. They're just like no you're doing fine. Keep going. You did a great job live last time""" start="00:45:32.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You can do it live, you know and and saying all the right things to just uh, encourage me to come back""" start="00:45:37.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""This year and everywhere""" start="00:45:44.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Well, as I said before we were very lucky to have you and the rest of the team of course as well and""" start="00:45:49.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um goes without saying but all the speakers and all the audience the participants as well, so""" start="00:45:54.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um""" start="00:46:08.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So, uh, are we we're still live over here that you know, you know me i'm the mike hog that I am I can't resist""" start="00:46:09.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um throwing throwing up another screen here and uh,""" start="00:46:17.800" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""In fact, let's go ahead and go back to our to our crawler, right?""" start="00:46:22.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And i'll bring back our build if it finishes and maybe we'll show making the installer as well, um""" start="00:46:30.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""But I have the cpu count turned down a little bit here""" start="00:46:39.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Note I didn't specify minus j here""" start="00:46:44.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, so""" start="00:46:47.400" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Over here is my automation, uh in case you do want to take a look""" start="00:46:49.480" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I can at least provide the orientation of what you're looking at scrape log is probably my first thing. I want to show off""" start="00:46:52.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, it's not beautiful, but this works, uh, pretty well for me to""" start="00:46:59.800" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Get a sense if something might have changed in terms of how many warnings or errors are happening""" start="00:47:06.280" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""When I build emacs, so I have this awful automation going on and I frequently want to answer the question""" start="00:47:13.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You know, what's the change rate in uh warnings or what have you?""" start="00:47:19.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So this kind of gives me a count""" start="00:47:24.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""of that""" start="00:47:26.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:47:28.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""so from there, uh""" start="00:47:29.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Crude ci is the script. We're we're watching run in the other pane""" start="00:47:32.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, you can""" start="00:47:37.980" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""see it's uh""" start="00:47:39.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Just starting to do its thing again""" start="00:47:42.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And uh""" start="00:47:48.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The make file I mentioned this is a top-down rewrite of everything else that i've done it has some bugs right now""" start="00:47:51.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um the uh""" start="00:48:00.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the""" start="00:48:03.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Build distribution is the main script that I use for my personal builds""" start="00:48:04.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""This is what is run by the crude ci script""" start="00:48:10.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, it has a fun tie-in to this""" start="00:48:13.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh web interface here""" start="00:48:16.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um where we can you don't need the port number when you go to it. That's just if i'm going to post""" start="00:48:19.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um the""" start="00:48:25.260" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh""" start="00:48:28.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Blah blah blah blah this this script is really long and complicated and probably needs some diving into but you can see that""" start="00:48:31.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, one of the complexities I have to deal with is that i'm going to need a something in the format of an emacs dash""" start="00:48:38.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""version for strategic""" start="00:48:44.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um nsys reasons so""" start="00:48:47.100" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:48:50.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""It takes care of kind of every complexity and stuff that I mentioned today in some respects""" start="00:48:51.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, as does the make file build release""" start="00:48:57.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""is""" start="00:49:00.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um another fairly useful""" start="00:49:01.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Incarnation of this this is just focused on the release process and this does work""" start="00:49:05.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""for example to create the""" start="00:49:12.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the""" start="00:49:14.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You know like I like well I could""" start="00:49:15.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Like uh for like files as far as I can tell so what are currently posted for emacs 29.1""" start="00:49:17.980" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""and the release candidate""" start="00:49:24.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:49:27.660" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So i'll probably use that next time and if it's still like for like i'll probably post the ones that came from this""" start="00:49:28.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:49:35.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh building a tree sitter I make some dlls there if you're looking for hints on how to get going or just simply""" start="00:49:37.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""A huge long list of git repositories that make grammars you can use""" start="00:49:45.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That is here as well""" start="00:49:50.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, finally I mentioned I have a""" start="00:49:53.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, I have a a website where I publish my own personal snapshots that I make""" start="00:49:58.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""That folder full of install directories, but all of the usual""" start="00:50:04.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""GNU style binary distributables including the source code and the source code for the dependencies""" start="00:50:08.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:50:14.860" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the""" start="00:50:15.980" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:50:17.820" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So this program is another one of those""" start="00:50:20.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Complicated find commands and therefore potentially the most useful thing in here to take to you""" start="00:50:24.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, and here i'm deleting binaries older than 17 years""" start="00:50:29.340" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh everything except""" start="00:50:34.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""the uh""" start="00:50:36.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""No deps file and the sources of it. You'll find on my website""" start="00:50:37.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Currently those indefinitely i'll probably roll out""" start="00:50:41.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""120 days or something""" start="00:50:44.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um for those eventually""" start="00:50:47.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Oh, uh, I can talk about this one even um the uh""" start="00:50:53.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""The""" start="00:50:57.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So here you'll see the two branches that i'm tracking the job of this script""" start="00:50:58.700" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Is this runs on the website? I call it with a like a remote rsync""" start="00:51:02.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh type""" start="00:51:07.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, or an ssh remote ssh command""" start="00:51:08.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:51:12.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""And right after the rsync r syncing up any new emacs that I built""" start="00:51:13.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""and""" start="00:51:19.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh, it's""" start="00:51:20.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, its job is to update my fancy directory indexing so let's look at corwin's website""" start="00:51:23.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Here's my emacs 29 folder""" start="00:51:31.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We have about two more minutes corwin""" start="00:51:44.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Yeah, it'll take that entire two minutes to uh, load this directory because I am""" start="00:51:47.420" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Because I have not yet ever pruned any of these dang binaries""" start="00:51:52.940" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So every version of uh emacs 29 that i've ever made for myself is probably here""" start="00:51:56.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""nice""" start="00:52:02.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, I strongly recommend that you bookmark this folder if you're using these for something and you always want the latest""" start="00:52:03.580" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, so here this particular, uh latest 29 emacs 29 latest or simply replace the 29 with 30 to get those""" start="00:52:09.980" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh""" start="00:52:18.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""alas""" start="00:52:19.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""No, no such luck for tree setter""" start="00:52:20.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""but if we look at""" start="00:52:23.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""that""" start="00:52:25.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Live this long without making a typo now look at me""" start="00:52:36.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay""" start="00:52:40.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Oh""" start="00:52:44.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So here, um""" start="00:52:51.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You know, we can see the iconification and so on even in the tree sitter folder""" start="00:52:53.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""this is all i'm talking about about the fanciness that's set up by that other script that""" start="00:52:57.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""i'm showing over here and run after each time I run the upload it just""" start="00:53:02.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Looks to see if anything's new and add some lines to the dot htaccess file""" start="00:53:07.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um""" start="00:53:15.900" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I'm, particularly proud of this one. I'm not going to lie. Um, linking out to each each""" start="00:53:17.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""project that we're using letting us know the commit version and then""" start="00:53:23.500" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""For the dlls quick link out to the log and the signature file for this dll""" start="00:53:28.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um""" start="00:53:34.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I find that a lot just a lot""" start="00:53:37.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""More readable""" start="00:53:40.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""than uh""" start="00:53:42.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Listing them all out individually and i'd love to do something like that on the new site""" start="00:53:44.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So i'm""" start="00:53:51.180" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I think we've got to be out of time by now. I've just got to say hey, thanks again for having me""" start="00:53:52.220" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh for those that uh watch the talk either live or after the conference""" start="00:53:56.780" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""uh appreciate everyone's support to get me to the point where i'm able to""" start="00:54:02.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh to do this this this cool volunteer task""" start="00:54:06.540" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Uh, which is fun and easy to do and reach out to me if you're interested in helping with it""" start="00:54:10.380" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Well, awesome, thanks a lot for the awesome talk corbin and uh, of course as a fellow core core organizer""" start="00:54:19.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""For our for all that you do, um in and around emacs conf and of course for uh, can we max as well? It's much appreciated""" start="00:54:26.060" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Big big words from coming from you my friend""" start="00:54:36.140" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um, thanks for the kind words""" start="00:54:41.740" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Cheers my pleasure. All right, and with that I think we're gonna uh wrap up the dev track here and we'll be""" start="00:54:45.020" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""With you again shortly in a few minutes on the gen stream the gen track for the closing remarks for today""" start="00:54:52.300" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um only for today because we're gonna be back tomorrow again as well""" start="00:54:58.620" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So don't go anywhere and uh, see you on the gen track in a bit""" start="00:55:02.460" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So""" start="00:55:05.760" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Oh my god, I did it we got done within the time you're my hero""" start="00:55:28.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""um, and thank you so much for just keeping me honest there and uh""" start="00:55:31.840" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Like helping me keep my eye on the time and such""" start="00:55:36.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""You have to look at the recording and see whether you feel like doing it again""" start="00:55:50.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I'm sorry. I had my sound screwed up and i'm sorry if I talked over somebody I couldn't hear anything on mumble until this very""" start="00:55:56.160" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""moment""" start="00:56:01.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Oh, uh because he used your webcam for it, um, like as a like a virtual webcam thingy""" start="00:56:03.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""It was low res especially when things are changing as you were""" start="00:56:09.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""scrolling around""" start="00:56:13.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""So we'll see what kind of recording we can recover from it and then you can decide whether you maybe want to clean it up""" start="00:56:15.120" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""with like""" start="00:56:20.720" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""screenshots and""" start="00:56:22.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I recorded on this end too. We shouldn't have that problem with my recording. Thank you. Thank you. Thank you""" start="00:56:24.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I think we're still live on the dev stream""" start="00:56:29.360" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Someone could uh, thanks. Oh, yes""" start="00:56:34.240" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Because uh, i'll set it to rebroadcast""" start="00:56:38.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Yeah, I I love doing that for the closing remarks that's""" start="00:56:45.520" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""a fine tradition""" start="00:56:49.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Or it's a tradition now because i'm pretty sure this means we've done it twice""" start="00:56:52.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""I""" start="00:56:55.440" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Once heard that, you know, uh as a fan""" start="00:57:02.560" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Meaning like a fannish is a term of endearment for a science fiction fan to another we say we're we're fans or things""" start="00:57:05.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""We do our fannish and a fannish tradition then is if you do it three times, it's tradition""" start="00:57:11.680" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""But um, we're on a budget here. So""" start="00:57:18.000" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Nope""" start="00:57:22.880" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""All right, I think we should um head over to mumble and talk on mumble""" start="00:57:25.920" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Um and decide and see like which big blue button room we're going to be in for closing""" start="00:57:30.080" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Okay, so we're clear on bbb here""" start="00:57:35.200" video="mainVideo-windows" id="subtitle"]]
+[[!template text="""Yep, I think so""" start="00:57:37.760" video="mainVideo-windows" id="subtitle"]]
+
+<a name="windows-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and""" start="00:00:00.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""welcome to, uh, uh, welcome to my talk. I'm a little distracted here. I had a friend who came""" start="00:00:06.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""over and just brought me a whole bunch of peanut butter cups, homemade peanut butter cups. Maybe""" start="00:00:14.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""I'll show those off, uh, later. What? Okay. Here, uh, put it right there.""" start="00:00:20.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""Okay. So I'm going to, uh, get over to my plan, uh, stuff I'm sharing here, hopefully.""" start="00:00:33.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""Uh, and, and we'll jump, jump right in because I'm going to need as much time as I can possibly""" start="00:00:42.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""have today. Thanks so much for, uh, joining me for Emacs conference and for, especially for,""" start="00:00:48.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""um, all of you who, who, who participated, you know, in the discussions, contributing talks and,""" start="00:00:56.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""um, you know, uh, you know, including running the, the, the, and it's just so much fun to be here.""" start="00:01:03.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, I guess while I'm standing here and, and saying stuff that's, that I'm going to have to""" start="00:01:09.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""transcribe, cause I didn't, uh, prepare a recorded version. Uh, I had a lot of trouble""" start="00:01:16.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""trimming this down so I can solve that problem by just talking a lot at the beginning, uh,""" start="00:01:23.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""about other stuff. Um, so in addition to the thanks, I just want to say thanks also to the""" start="00:01:28.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""folks on the development list that helped me kind of come up to speed on this. I won't make a big""" start="00:01:37.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""list here, but, um, and, and, and for all that I've learned from my previous conferences, it's""" start="00:01:41.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""just, I can't stress enough what a great opportunity volunteering for, uh, free software related things""" start="00:01:48.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""are, uh, as a way to get involved. People will just totally teach you how to be helpful and I'm""" start="00:01:55.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""loving it. I can preview the stream, but it's not super easy right now. I got all my screens""" start="00:02:00.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""kind of dedicated to other stuff. So should I pause for a second before I get into the slides?""" start="00:02:18.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""Cause that's, they're, they'll be hard to see if I'm not full screen.""" start="00:02:23.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""Yeah, that would be nice. Okay. Well, I'll keep ad libbing then cause I just have a million,""" start="00:02:29.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, things I can say. Um, uh, so, uh, let me just quickly talk, uh, things that aren't in here.""" start="00:02:34.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, I'm going to mention the mysis2.org and the, that project, which provides a port""" start="00:02:42.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""of, uh, the GNU, uh, uh, glibc and a lot of GNU and, uh, uh, their free software. Um, so, uh,""" start="00:02:51.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""I don't...""" start="00:03:03.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""All right, I'm switching a room to, uh, a DVD room to Stefan.""" start="00:03:03.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""All right. So I'm going to take mumble out of my, uh, pardon me, folks.""" start="00:03:12.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""It's going to take mumble out of my speakers here.""" start="00:03:16.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""Okay. We'll take the speakers out of play entirely and I'll just switch to some headphones.""" start="00:03:22.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""All right. So...""" start="00:03:33.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""Perfect. What an amazing amount of time. All right. So thanks a lot. Uh, today I've got a jam""" start="00:03:36.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""packed talk. Um, I've, I've done my best to make, to make this not too overwhelming,""" start="00:03:42.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""but overall we're going to try to try to actually build, um, Emacs while we're talking today.""" start="00:03:48.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""And we might actually build several Emacs. Uh, so let's take a look at that real quick.""" start="00:03:55.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, so over here we have a screen where I am just once a minute looking, uh,""" start="00:04:00.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, indirectly at whether there have been any pushes, uh, upstream to either the Emacs 29 or""" start="00:04:08.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""Emacs 30 branches. So I've arranged for us to sort of keep an eye on that, um, while we talk.""" start="00:04:15.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""And, you know, maybe that's, that's one thing that we'll do. And then additionally, we'll probably""" start="00:04:24.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""fire up a shell. This is the MySys2 environment that I talked about before,""" start="00:04:30.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""and we'll probably create some directories and things. But before we get into all that, let's,""" start="00:04:36.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""let's give some, some context. Uh, I've been doing my best to try to, uh, make sure all this""" start="00:04:42.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""information is on the Emacs wiki as well. So, uh, sorry, as I said, I got a little caught off guard.""" start="00:04:48.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""So I'm moving my foot pedals to the floor, back to the floor here. And I should be able to advance""" start="00:04:54.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""slides here. All right. So, um, I kind of provided some special definitions for things. I'm going to""" start="00:05:02.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""kind of level set with those. The, uh, um, when I say a binary release, I'm talking about some,""" start="00:05:11.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""some, uh, I'm talking about Emacs for Windows as, uh, just ready to run out of its folder or""" start="00:05:21.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""in whatever similar form. The, when I say a build, I'm talking about kind of a process of doing that.""" start="00:05:28.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, when Emacs.get, of course, that's the upstream hosted by GNU Savannah.""" start="00:05:36.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""The Emacs release is, is a tarball created from that. The sources for, um, Emacs are going to be""" start="00:05:41.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""one of those two things, um, very specifically. So I'm not going to talk about patches patching.""" start="00:05:51.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""There's some implications there. Perhaps we'll get into it. Uh, so a snapshot is when I build""" start="00:05:58.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""from anything other than a release source, uh, a tarball. Um, just if I, if I say that I'm talking""" start="00:06:06.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""specifically about the, uh, the XZ version of the file as, as a technical point. Um,""" start="00:06:14.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""so that may come up. All right. Nothing else I think up my sleeve. Um, the, uh, as, as a key""" start="00:06:23.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""data point, it's worth understanding that there's a file called configure AC. It's going to be""" start="00:06:32.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""processed, uh, as part of auto-conf. We, we initially access that when we run, um, auto-gen""" start="00:06:38.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""as you'll see in a little bit. Um, the, but before, but, uh, so the auto-gen script will""" start="00:06:46.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""generally consider this, uh, so in a release build, um, this has been thought about kind of for us as""" start="00:06:52.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""part of, um, making the tarball. Um, the configure.ac, um, yeah, I think I pretty much covered,""" start="00:07:00.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""covered this. So, um, those, those that kind of partially built status, that's a,""" start="00:07:10.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""might be another phrase that you hear me use. So this slide unpacks that a little more.""" start="00:07:16.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, so it can be a little confusing to understand what exactly the, you know, what is it, you know,""" start="00:07:22.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""how stable is Emacs depending on what I have. So the, I got a kind of set of rules of thumb here,""" start="00:07:29.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""right? First I want the highest, uh, you know, dot, uh, dot release value that I can get,""" start="00:07:36.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""assuming that that's higher than one. If it's, if it were to only be one, let's say,""" start="00:07:43.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""if it were to only be one, let's say my choices were 29.1 and 30.1, I would take 30.1. Um,""" start="00:07:50.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""cause that's, that's weird. But, um, what you'll normally see is you might see a 28.2,""" start="00:07:59.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""you might see a 29.1. So here I think 28.2 is got the most, most, most stable, um,""" start="00:08:06.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""set, uh, the, uh, or set of release binaries. The 29.1 will, will have a little more features,""" start="00:08:16.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""but will tend to be more stable than, uh, any, uh, lower point releases for 29, uh, certainly""" start="00:08:26.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""than any release candidates for 29, which might even have new features, um, but are mostly going""" start="00:08:33.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""to just be packages. So they're going to become the most stable thing here. And especially if""" start="00:08:39.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""they, they, they have a, you know, if this, this is not, uh, if this were to be 29.2 release""" start="00:08:46.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""candidate one as well, looking forward to seeing, um, the, uh, 30.50. Um, and, and in between this,""" start="00:08:53.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""this pretest here, we're talking about kind of developer land. Um, so, um, the expectation is""" start="00:09:04.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""that, you know, what you're doing that applies to windows users, uh, just as much if you are""" start="00:09:11.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""building anything in the snapshot range, any of that is going to be in this 30.0.50. Currently""" start="00:09:16.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""that'll change when the, uh, when the 30, 30, uh, an Emacs 30 release tags, uh, or release branches""" start="00:09:22.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""come. Okay. So let's talk about the local. Um, there's not much to know about what I have going""" start="00:09:32.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""on, except that I have my, my paths mess messed with. So, um, if, if that, that were to come up,""" start="00:09:42.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""if you're wondering how, why does this, uh, and insist command work, that's probably the place""" start="00:09:51.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""where you'd notice it. Uh, I am using windows 10. I haven't tried windows 11, uh, as mentioned,""" start="00:09:57.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""mysis2 is critical to all this. There's one script in particular that will error out if you try to do""" start="00:10:03.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""anything other than use mysis's, mysis's shell. And in fact, mysis owns or provides three shells""" start="00:10:09.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""and of them, that script is designed to work with a specific one of them as, as we'll come to.""" start="00:10:16.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""Uh, I don't talk about installing the dependencies, but just as, as kind of some kind of help,""" start="00:10:22.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""um, you can search using this formula and install, uh, using this formula.""" start="00:10:29.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""Good luck with those, you know, grep commands.""" start="00:10:38.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""And this is the tool for building the self-installing self-extracting installer or, uh,""" start="00:10:43.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""executable self-installer. Um, the script for that is provided along with the Emacs source.""" start="00:10:49.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, and I've provided a helpful link to the main page for the project download link on the left.""" start="00:10:56.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""It is not, um, it's kind of scare where the way that this link appears, but I have clicked it and""" start="00:11:03.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""it's working for me. Automation does, uh, we'll, we have some time we'll be looking at this at a""" start="00:11:09.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""minimum. I wanted to mention that what I do on my local, what you're seeing in the crawler, I hope,""" start="00:11:18.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, represents a, uh, a simple sleep loop. Uh, and we'll, we'll look into that if we have time.""" start="00:11:25.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, I do have a little bit, I do use like a cron job and so on to clean up some hosting that,""" start="00:11:36.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""that I pay for, um, where I've got, where I, where I kind of self host some, uh, snapshots,""" start="00:11:42.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""more stuff than I feel comfortable uploading to, uh, to GNU. The, um,""" start="00:11:50.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""you know, I never said, uh, my name is Corwin Brust. For the last couple of years, I've been""" start="00:12:01.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""the volunteer making, uh, um, making the snapshots, the quote unquote, official binaries,""" start="00:12:06.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, for windows of the, um, of, of Emacs for windows. So that's, that's all the different""" start="00:12:12.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""versions. Uh, help is always welcome with that. I'd be very happy to teach you in more depth.""" start="00:12:20.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""This video is, you know, kind of my drop dead file. Uh, I don't have specific plans. Uh, if""" start="00:12:25.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""somebody's like, Hey, get out of the way, this is the one thing I think I can do. Um, Hey,""" start="00:12:31.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""that's real relatable. Okay. Um, so I haven't tried, uh, the, I haven't tried a lot of fun""" start="00:12:36.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""things that I won't talk about. Um, the, uh, the rest of this talk is going to get into the""" start="00:12:44.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""nitty gritty. As I said, um, if we can't convince Emacs to start building over on that screen,""" start="00:12:50.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""we'll be opening it up here on the center stage. Um, uh, this begins and there's, there's, there's,""" start="00:12:56.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""there's great insight here too, on the wiki, uh, with picking an FTP source for any official""" start="00:13:05.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""release that is for a stable product, please visit, um, ftp.gnu.org. Otherwise you'll want""" start="00:13:11.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""to switch that FTP dot at the beginning to alpha dot and take a pretest, uh, or any snapshot or""" start="00:13:19.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""otherwise, then publish there the, uh, next, uh, you know, I'm gonna, you have some examples in""" start="00:13:27.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""here that assume that you're doing a release bill that you're doing $29 one, but, um, I am glancing""" start="00:13:36.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""out of the, the right side of my face at the chat on the opt-ins. Anybody in there wants to direct""" start="00:13:43.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""me at a particular, um, we can make some other, we can build something else. If you want to see""" start="00:13:51.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""a snapshot build more mentioned that, um, the examples that you're going to see here that I""" start="00:13:57.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""will, without other direction, cut and paste, um, are all, uh, based on the release bill. So,""" start="00:14:03.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""um, so, uh, we'll use the, uh, I mentioned that there are several shells provided by MySys2.""" start="00:14:14.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""The MinGW64 shell is the one that we mostly need. Um, I tested all of this as well with the MinGW32""" start="00:14:22.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""shell. Um, so that, that should work and, and see mix binaries that, that, that work for me.""" start="00:14:33.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""Uh, I, as I mentioned, I don't get into the details of installing all your prerequisites.""" start="00:14:44.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""I found that doing it in a headfirst manner wasn't, uh, wasn't difficult. And I also found""" start="00:14:50.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""that there's a number of tutorials. I didn't want to pick one to link here.""" start="00:14:56.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, there, uh, here, uh, okay. So our general formula for building Emacs, irrespective of""" start="00:15:01.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""Windows, looks like, does the configure script exist if not run autogen? From a Windows build""" start="00:15:10.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""standpoint, this is, if I'm not running a release, release build, call the autogen script.""" start="00:15:19.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""Right. And this would be in the directory where we want to pack this. I'll demonstrate""" start="00:15:27.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""within three minutes if, uh, if one, if nobody's pushed upstream to Emacs. Um, so, uh, the configure,""" start="00:15:32.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, and, uh, configure options are, uh, uh, the, the configure, you know, if the configure, sorry,""" start="00:15:42.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""the configure script exists, then, uh, it doesn't, doesn't exist. So the only reason,""" start="00:15:54.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""so in my process, I will always execute that step because I clean everything after every build,""" start="00:16:01.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""um, in all my contexts. Um, however, if you were, you know, had a, a checkout of emacs.get""" start="00:16:07.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""and you are building it at several releases, then maybe you've got a configure script and then you""" start="00:16:16.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""all want to know, um, the, you know, whether you have to bootstrap and the typical complexities,""" start="00:16:21.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""but otherwise you might be able to skip that in, in, in the abstract. Um,""" start="00:16:27.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""is that right? Or is it, is it the make, uh, so, and if they make file doesn't exist,""" start="00:16:36.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""make install. I know I'm looking at that in question whether it's correct. Sorry about that.""" start="00:16:41.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, in any case, uh, so auto-gen configure make install is our recipe. Auto-gen creates the""" start="00:16:46.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""configure script, configure creates the make file, the make file. Um, in the case of windows,""" start="00:16:55.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""I almost always want the install, uh, and to specify some location where the installed emacs""" start="00:17:01.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""will land. This is where all of the recipes for packaging emacs go. And if I were, uh, you know,""" start="00:17:08.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""using this as a movie to upgrade, I personally would do that by, by specifying an install path,""" start="00:17:19.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""quote unquote, on top of, uh, a main installation. I don't do that. I update shortcuts mainly based""" start="00:17:24.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""on what specifically I want to try, uh, in an effort to, to, to, to notice, uh, interesting""" start="00:17:31.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""patches and confirm they work on windows, which mostly they do. There's not a lot of code in my""" start="00:17:37.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""experience that is, uh, windows specific and very, very little around the build process.""" start="00:17:44.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""All right. Huge rabbit hole zone. And I still have a minute before I have to, uh, kick off""" start="00:17:50.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""the first part of our demo. So let's, let's keep, keep diving in, um, the, those specific part""" start="00:17:57.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""windows specific parts beside the dot exe extension that we're going to find slammed""" start="00:18:07.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""onto all of our familiar, uh, executables. We're also going to have emacs client W,""" start="00:18:11.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""which is a wrapper that hides, um, how hard it is to get, uh, to, to, to get it,""" start="00:18:18.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""how bad the abstraction is between the window management layer and the GUI,""" start="00:18:27.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""and then all the different parts on windows. Essentially, it wants to create a shell window.""" start="00:18:32.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""If we just double click emacs dot exe. So emacs client W, uh, and run emacs,""" start="00:18:37.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""they're going to solve that problem. Um, uh, wrapping emacs and emacs client respectively.""" start="00:18:42.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""And, um, just, uh, all right. So let's, let's go ahead and do something. I'll, I'm going to""" start="00:18:51.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""take away the ticker here for a minute. And what you're not seeing is off stage. I am killing that""" start="00:19:00.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""so we don't get built in parallel. Um, so, um, so at this point I'm going to open up a shell and""" start="00:19:08.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""I'm going to start talking just a little bit about my local build environment, which we haven't""" start="00:19:19.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""gotten into. In fact, just to make that even easier, let's, um, let's just take a look at it""" start="00:19:24.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""a little bit. Probably the easiest spot is here.""" start="00:19:32.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""All right. So here we have the familiar windows, my computer interface. I have the G drive and the""" start="00:19:47.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""H drive, four terabyte drives, um, dedicated to my, um, really overblown emacs build process.""" start="00:19:55.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, this just lets me be super lazy. There's no reason you need any massive amount of storage""" start="00:20:08.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""to do any of this. Um, inside here, and now I'll actually switch you back to the other screen.""" start="00:20:14.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, we'll, we'll find,""" start="00:20:23.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""oops, sorry about that. I didn't take the time to label that one. Um, so here you can see""" start="00:20:37.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""the primary output that I'm looking at through this automated process. I come along, I look at""" start="00:20:46.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""the bug reports, or maybe I'm just restarting my computer and choosing what emacs version at random.""" start="00:20:53.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""And then in that case, I look at this modified date and I say, um, my config that I, you know,""" start="00:20:59.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""that I'm playing with right now is all set for emacs 30, or I'm testing the both and I'm""" start="00:21:06.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""relaunching both of these. Right. So for me, that starts by diving into the install folder,""" start="00:21:11.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""going into the bin folder, which looks exactly the way my automation leaves it. I then come in""" start="00:21:16.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""to run the run emacs and I create a shortcut, um, to it. So I'm a keyboard person. So that's""" start="00:21:22.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""usually done like this. And then I just know that the context menu is going to come up in the right""" start="00:21:34.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""place. So I'll come up and, um, possibly change the, change the shortcut, right.""" start="00:21:40.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""If I don't mess with it. Um, so here's where I'll add my minus Q, if that's kind of where""" start="00:21:53.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""my world was at, or it kind of depends on what I'm doing with these, which varies week to week.""" start="00:22:01.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, so restarting my emacs, uh, involves doing the same thing, going to my desktop""" start="00:22:07.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""and where you'll find a number of emac shortcuts and, um, updating the shortcut in the same manner""" start="00:22:12.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""joint actually, maybe we'll just, let's go back there and just show it.""" start="00:22:23.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""So if we look at, for example, my ERC,""" start="00:22:28.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""you can see, it's going to be pointing at one of these clones and then it's going to""" start="00:22:31.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""maybe tell me that I want, it wants to be full screen. Nope, not currently. And then it might,""" start="00:22:39.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, have some stuff in there about auto-loading at config and what""" start="00:22:44.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""connections I'm going to, some commands I've defined to start connections.""" start="00:22:48.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""All right. And sorry, I got a phone call. I was checking. It wasn't in an org, the org,""" start="00:22:53.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""not the other organizers giving me the hook. So, um, all right. So that's, that's probably""" start="00:22:57.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""enough on the local system. Let's get back to the, to, to building emacs. And now it hopefully makes""" start="00:23:04.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""a certain amount of sense when I say we're going to wander over to the H drive and, and, and, and,""" start="00:23:11.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""hopefully makes a certain amount of sense when I say we're going to wander over to the H drive""" start="00:23:17.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""and recreate the structure that, um, both my process sort of assumes and the scripts you'll""" start="00:23:22.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""find in the admin NT, uh, build disk folder in source used to assume. Those scripts are in need""" start="00:23:31.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""of some love. And in just a little bit, I'll be mentioning a build, uh, a, uh, a, a, a particular""" start="00:23:41.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""bug that you might want to pay attention to if you're interested in making a self-installer.""" start="00:23:49.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""All right. So, um, we're going to create, uh, an emacs build directory.""" start="00:23:54.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""And we've got a handy git clone stage, git clone command stage for ourself. That would work. Um,""" start="00:24:04.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""do not currently see anybody lobbying for that. So instead we will run the rather faster""" start="00:24:19.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, W get command on Savannah, which is not pasted in here. Nice. Let's see if I can freehand it.""" start="00:24:27.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""Not going to do it. Uh,""" start="00:24:36.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""okay.""" start="00:24:40.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""I beg your pardon. I'm grabbing a URL from the internet.""" start="00:24:52.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""Uh, okay. Yeah, I can, I can honestly, I can freehand it, whatever. Okay. Sorry. I, uh,""" start="00:25:00.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""I didn't have that bookmarked in all handy. Like I thought I did. Um, so we'll just say""" start="00:25:07.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""ftp.gnu.org slash, uh, what is it? Pub emacs, emacs-29.1, uh, .org.gnu.org.exe.""" start="00:25:13.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""I really think I'd have this command sitting around. It makes me want to scrap the whole""" start="00:25:30.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""demo. I'm not going to lie. Okay. How am I doing? Um, I think at least 15 minutes. Um,""" start="00:25:47.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""but in the command that you were freehanding, should the pub be GNU instead?""" start="00:25:54.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""Oh, thanks. I'm sorry.""" start="00:25:59.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""There we go. Thank you. All right. And then we'll,""" start="00:26:07.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""and I'm not sure I provided commands for this either,""" start="00:26:17.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""but it is trivially easy to do. And while that happens, we'll get to move on a few slides.""" start="00:26:20.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, the configure script I'm not talking about in a lot of detail, but I do want to mention that the""" start="00:26:31.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""GNU binaries are provided with native, uh, compilation enabled. That's the feature that""" start="00:26:38.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""uses gcc lib gcc get on windows. If available, that lib gcc get will be used. Um, but when,""" start="00:26:44.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""but, uh, if, if, uh, emacs has that feature, then it will take by compile, uh, native code and,""" start="00:26:55.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, asynchronously compile that as needed, uh, with the ahead of time feature. We're going to""" start="00:27:03.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""do as much of that ahead of time. And for folks that are consuming the windows binary, the""" start="00:27:10.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""thinking goes that they might not have my assist too. They might not have lib gcc jet. They might""" start="00:27:15.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""be happy that they're enabled in a, you know, a lot of time running emacs on their local environments""" start="00:27:21.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""at all, you know, in a, maybe a lockdown, uh, corporate context. So aside that, um, there's""" start="00:27:30.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""your first glimpse at the configure, um, program that we're going to run in a moment. In fact,""" start="00:27:39.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""I'm going to go as far as putting it on the clipboard. Um, really just looking at this,""" start="00:27:45.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""the AOT flag is the one I'd call attention to, but it's worth understanding that windows doesn't""" start="00:27:52.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""provide a D bus capability. So windows native program isn't going to be able to depend on D""" start="00:27:57.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""bus. We're going to, we're going to explicitly ask that that be left out. I think that's actually""" start="00:28:02.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""optional and it's documentation. I think the configure program is smart enough to know that""" start="00:28:07.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""we don't want D bus on windows. Um, otherwise we tend to compile with things. Um, there there's""" start="00:28:12.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""missing documentation. We could say the, uh, all of the libraries are treated in the way I mentioned""" start="00:28:20.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""in that, um, JPEG support will be available as long as the JPEG is, is available in our environment""" start="00:28:26.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""and configure script certainly notices that, um, the GNU provided binaries are provided with""" start="00:28:34.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""minus O2. And that's also my default personally on windows. Um, however, and I'm going to skip""" start="00:28:40.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""this since I mentioned it, um, mentioned, uh, and, uh, um, so I guess I'll say, um, you can,""" start="00:28:47.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""um, say with the, it's worth knowing that you, if you're not one reason that, that you're building""" start="00:28:59.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""might be because you want to turn off native compilation for whatever reason. If you have""" start="00:29:06.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""low juices, you get, get, but don't want Emacs to use it. Uh, especially as that default looks like""" start="00:29:11.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""it could be changing with Emacs 30. Um, the, uh, the debug configuration, um, this is, this is the,""" start="00:29:16.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, kind of, uh, what, what I'm currently using this on commentary, uh, I've seen on the next""" start="00:29:26.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""development list. Let's check on our checkout and see if we can't get a build running. Um,""" start="00:29:33.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""this is a release build, so I won't be starting with, uh, so we'll start by hopping into its""" start="00:29:45.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""directory and we, um, we have, uh, but not. Okay. So that tells us we're going to run""" start="00:29:51.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""our configure program, but we don't need to run a config IC. So,""" start="00:30:14.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""so let's get that going and, uh,""" start="00:30:31.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""hopefully that's showing through just enough to be fun, not too much to be distracting.""" start="00:30:36.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, the, uh, the unoptimized, uh, uh, um, please report issues. If your Emacs is crashing,""" start="00:30:45.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, to the Emacs development list, not to me personally. Um, although you are of course,""" start="00:30:55.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""welcome to copy me. Um, if you especially I'm subscribed to that list, so I get all the mail.""" start="00:31:01.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""So I don't mind being copied. Uh, and, uh, as well, if you think it's, uh,""" start="00:31:06.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""you know, related to packaging, that actually makes sense or windows related to even, and,""" start="00:31:15.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, it can be tested with an extra snapshot that should be uploaded to the canoe alpha side.""" start="00:31:20.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""I could look at that if I have time. There's with the configure script to make file for""" start="00:31:25.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""Emacs is really, really complicated. If time permits, which I'm now confident it will not,""" start="00:31:32.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""we will look at, uh, make file that I tried writing that, uh, orchestrates this whole""" start="00:31:39.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""process that I'm talking about. Um, as, uh, let's see. So the build, uh, build process,""" start="00:31:44.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""I run my builds with, uh, explosively specifying the max CPU, uh, with minus J, but minus B one""" start="00:31:52.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""to get the full build, uh, full log into your recipes. That is probably the magic thing.""" start="00:32:03.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""Matt, um, shouldn't to understand what, uh,""" start="00:32:09.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""or that, uh, that, that, uh, that I'm glad that I know, uh, as I'm trying to write my automations,""" start="00:32:16.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, the, um, so I call that out here, the binary, uh, releases. Um, okay. So in this section,""" start="00:32:26.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""we're going to start to get into what are all those files. And there's a bug report related to""" start="00:32:36.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""that, but I didn't get into here. So, um, that's kind of to the point about the less said about""" start="00:32:41.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""this, the better, uh, that's my explanation for stepping through some of these slides.""" start="00:32:46.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""Uh, of course we'll share them all, uh, uh, hopefully by the time that this video is published.""" start="00:32:50.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""Oh, I mentioned, um, I may have mentioned already freshly installed, but, uh, fully installed. Uh,""" start="00:32:58.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""the, the, the key distinction here is that, uh, Emacs is distributed in the binary form for Windows""" start="00:33:06.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""with some DLL files that actually come from the mysys2 project. There's an implication there to""" start="00:33:15.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""there's an implication there to GCC that I definitely want to get to it talking about.""" start="00:33:21.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, so freshly installed means we haven't copied those binaries from the mysys2, uh,""" start="00:33:28.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""installation into the Emacs, uh, installation. Uh, and then, uh, when we re-archived that""" start="00:33:35.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""local Emacs installation, that's how we're going to create the full zip.""" start="00:33:45.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""So hopefully that actually is a pretty good summary of what all those files are. Um, but""" start="00:33:48.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""there are readme files, uh, on the FTP that do a pretty good job, um, if you can dig enough to find""" start="00:33:54.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""one and my apologies for, uh, tardiness getting a new version on that posted. Um, the Emacs, uh,""" start="00:34:00.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""so those dependencies, uh, are listed within Emacs itself. And as we'll just talk about in a moment,""" start="00:34:11.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""there's a way, uh, that we can use, we can access that when we collect them in order to meet, uh,""" start="00:34:17.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""the GCC requirement that is essentially to include, um, include the sources for the,""" start="00:34:24.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""for those binaries, the things that were compiled against. Um, the, uh, so, so here we go,""" start="00:34:31.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""we're, we're into the build process. Let's just take a look and see if configure it got done.""" start="00:34:41.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""It sure did. And now we can see a table of, of hopefully good, but good and bad news, um,""" start="00:34:45.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""and potential, um, where we're learning that we're using the pdumper strategy and any number of other""" start="00:34:52.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""things that we might be messing with as our motivation for, for building ourselves on Emacs.""" start="00:34:57.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, again, this table represents, uh, what you'll, what, what, what it looks like for me when I'm""" start="00:35:04.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""building for the GNU distributed binaries. All right. So, um, kind of moving, moving as quickly""" start="00:35:12.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""as I can here. I'm at 40 after, I believe that's the five minute mark. So, um, having just succeeded""" start="00:35:22.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""in, in configuring Emacs, I don't think we're going to build it. Uh, uh, I don't think we're""" start="00:35:31.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""going to actually get to running make install. Um, but I have it sitting here on my keyboard""" start="00:35:37.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""or clipboard, assuming that we will, right? No. Oh, wow. I think I've managed to confuse this.""" start="00:35:43.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""All right. So for me, that looks simply like, uh, make, uh, V equals one install, uh,""" start="00:35:54.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""prefix equals, uh,""" start="00:36:08.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""and we can at least get it kicked off.""" start="00:36:18.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""And that can, that command is just, uh, just is no, no different than I showed on the slide where""" start="00:36:20.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""I, where I gave it, uh, wasn't planning to stop and explain it. I was just planning to paste it.""" start="00:36:27.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""So, so, so again, recapping the rest of the process here and maybe actually making it,""" start="00:36:33.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""if you can believe it or not, through the rest of these slides, um, we, to, to, to create the""" start="00:36:38.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""full set of binaries, we're going to need a no dependent, no depths archive. That's without the""" start="00:36:44.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""mysys2, uh, deal provided DLLs, just the things that we compile as part of making Emacs. Um,""" start="00:36:49.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""the, uh, the build depths zip script is provided with the source distribution is your tool for,""" start="00:37:00.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, meeting the GPL requirements, right? Source as mentioned before,""" start="00:37:07.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""um, there is a second bug that I did, uh, include some more information on in my notes already.""" start="00:37:12.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, that, uh, that gets into the details of this other feature I alluded to.""" start="00:37:19.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, I'll just skip into that. Um, we, we can, with, with, uh, with a, an appropriate version""" start="00:37:26.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""of that, which you may need a patch, uh, to, to have, you can list out the dependencies""" start="00:37:35.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""and, and that version as well. Can consider the dependencies of the Emacs binary versus""" start="00:37:42.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""the hard-coded list you might find, depending on when you look at this file in the source tree.""" start="00:37:47.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""The diff, um, so I also have a hack here that, uh, works around the absolute requirement to""" start="00:37:53.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""run this with the mysys2 and not the minGW64 script. Um, once we've made that zip file that""" start="00:38:01.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""contain that's, that's our installed Emacs without the DLLs provided by mysys2, we'll then unpack""" start="00:38:18.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""the dependencies that were created by that Python script we just talked about from the Emacs source""" start="00:38:25.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""tree. At that point, once those are unpacked, we can now make what's called the full installer,""" start="00:38:30.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""or sometimes I might call it the unqualified installer, because it's just going to be called""" start="00:38:38.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""Emacs29.1.zip. Um, and that, uh, that file, which, which creates the, the, the, the, the,""" start="00:38:42.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""which creates the archive, uh, that, uh, that, that, that file is exactly the same,""" start="00:38:54.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""plus the, uh, the dependencies that we unzipped in the bin folder of the installed Emacs.""" start="00:39:02.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""The, uh, executable self-installer, which I would love to have more time to talk about.""" start="00:39:09.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""I gave a few pointers here on the hard part of running it. Most importantly,""" start="00:39:14.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""if I've installed in any kind of funny looking name, I end up renaming it to like Emacs-29.1""" start="00:39:19.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""or Emacs-29. or 30.0.50 or whatever. And I just renamed that installed Emacs folder.""" start="00:39:26.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""And then I go to the root of wherever I created that, the parent directory above it.""" start="00:39:35.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""And that's where I make my copy of the Emacs NSI, um, the, the NSIS script.""" start="00:39:40.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""And, uh, that's also where I, and then, um, then from that parent directory, I execute,""" start="00:39:47.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, making sys, uh, here. I, as mentioned, um, I, I can get away with this because I have it""" start="00:39:55.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""on my path and it's my recollection. I think I tested this and couldn't reproduce the problem.""" start="00:40:02.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""So I didn't document it here, but I've had some problems with running this""" start="00:40:07.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""when, uh, when NSIS wasn't on my path. The, uh, the, the, the final step here""" start="00:40:11.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""and the last, the GPL requirement is to include all the sources, except when I'm doing a release""" start="00:40:20.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""build, I always do this. Um, and that's the new practice when making Snapchat binaries is to go""" start="00:40:27.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""ahead and include the sources, even though we might have the specific revision number, um,""" start="00:40:34.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""our thinking is we want absolute clarity, um, that, that somebody, uh, can say, okay,""" start="00:40:39.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""this binary did this thing, send me the source for it. I'm going to go take that into my own""" start="00:40:46.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""open source, or yeah, maybe they would, the jerks, um, into my own open source project.""" start="00:40:51.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""And, um, you know, off they go, uh, and that needs to be possible.""" start="00:40:56.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, so, um, beyond that, the rest of this is, is really detailed that you find covered in the GNU""" start="00:41:04.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""maintainers manual. Um, this is the, the current set of Windows binaries that, um, it's busily""" start="00:41:12.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""working on creating a like for like a mirror to behind the scenes here is called a 29.1 underscore""" start="00:41:19.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""two. Um, and I have a lot of automation, uh, available on this site. So at this point,""" start="00:41:29.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""I'm just, I think I'm only a minute, 40 seconds over. I'm gonna invite my, uh, co-organizers""" start="00:41:36.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""back onto the call or any volunteers that want to jump in and anybody, if there's people on the""" start="00:41:45.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""BBB, I'd be happy to take questions. If there aren't, um, I have a screen full of, uh, the""" start="00:41:49.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""automation stuff ready to go as a kind of a second ring in my circus today. So if you're still with""" start="00:41:57.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""me, thanks a lot for joining me. And I really enjoyed this talk. Uh, if this is where we're""" start="00:42:04.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""going to close it out, I don't know where we're at for schedule today. Thanks a lot for a great""" start="00:42:08.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""talk, Corwin. Um, in terms of like schedule, yeah, you went over a little bit for the official,""" start="00:42:14.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""like, um, schedule or time of your talk, but I think, uh, we actually have maybe like six or""" start="00:42:20.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""seven more minutes, um, here on stream for, um, questions and such, if folks have questions,""" start="00:42:26.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""or if you want to like quickly maybe show one or two more things. Um, but I think the hard stuff""" start="00:42:32.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""is about like maybe 10 minutes ish for now. And then we'll have to rush over to, um, uh, for the""" start="00:42:38.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""closing remarks. So, well, that sounds awesome. Okay. So I'm looking at the, the dev chat. Uh,""" start="00:42:43.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""I see a comment on cross-compiling the emacs, but I'm sorry, I'm looking at IRC primarily, but,""" start="00:42:55.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, feel free to jump in if you're on, uh, BBB with me, or, uh, uh, if, if you put something on""" start="00:43:01.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""the pad, I'm sure, uh, we'll see it between the two of us, uh, over here. Okay. So cross-compiling""" start="00:43:08.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""emacs for Serenity. I haven't tried really any cross-compiling. I think that would be very""" start="00:43:16.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""interesting. I would most likely focus on doing exactly what I do on a GNU system, completely""" start="00:43:20.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""ditching. Um, so I guess with my, my remaining time, rather than walking through code, um, for""" start="00:43:28.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""my automation, which can be another talk, if in fact there's an interest in that, um, I want to,""" start="00:43:35.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""I guess, say a couple of words about the non-free operating system that I'm using here. I did my""" start="00:43:42.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""best to use no non-free software other than the, uh, the operating system that is the context for""" start="00:43:48.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""this talk in preparing this talk for you. I personally have a lot more, uh, time and energy,""" start="00:43:58.880" video="qanda-windows" id="subtitle"]]
+[[!template text="""I have to say, invested in proprietary tools for doing a lot of the things that, that go into this.""" start="00:44:07.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""So I really respect the work of people that pull that off. Um, I'm sorry I didn't get my pre-recorded""" start="00:44:15.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""stuff, uh, kind of in order for everybody, but I just want to stress, like, uh, it is all absolutely""" start="00:44:22.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""possible and just hats off to everybody that, that used, uh, entirely free software to get their,""" start="00:44:30.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""get their recordings done in time. Um, and what you did see, unless it was provided by the operating""" start="00:44:36.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""system in my presentation today, was all, uh, free software with the debatable exception of""" start="00:44:43.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""NSYS, which styles itself as open source, maybe for, uh, marketing reasons.""" start="00:44:49.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""Okay, uh, in any case, uh, certainly we can get all that source.""" start="00:44:56.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""Thanks for the note, Corin. It's good to know that, uh, building or, uh, yeah, doing the build of Emacs""" start="00:45:08.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""for Windows on Windows can be done, uh, using only free software. Yeah, absolutely.""" start="00:45:14.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""Probably the right closing note, right? Um, I just, uh, thanks again to the organizers for""" start="00:45:23.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""bearing with me. And like, every time I was like, you guys, I'm terrible at this. They're just like,""" start="00:45:29.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""no, you're doing fine. Keep going. You did a great job live last time. You can do it live,""" start="00:45:33.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""you know, and, and saying all the right things to just, uh, encourage me to come back,""" start="00:45:38.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, this year and every year.""" start="00:45:43.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""Well, as I said before, we were very lucky to have you and the rest of the team, of course,""" start="00:45:49.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""as well. And, um, goes without saying, but all the speakers and the audience, the participants as""" start="00:45:53.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""well. So, um, so, uh, are we, we're still live over here that, you know, you know, me, I'm the""" start="00:45:59.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""Mike Hogg that I am. I can't resist, um, throwing, throwing up another screen here. And, uh, in fact,""" start="00:46:14.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""let's go ahead and go back to our, to our crawler, right? And I'll bring back our build""" start="00:46:22.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""if it finishes and maybe we'll show making the installer as well. Um, uh, but I have the CPU""" start="00:46:32.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""account turned down a little bit here. Uh, note, I didn't specify minus J here. Um, so, uh, over""" start="00:46:40.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""here is my automation. Uh, in case you do want to take a look, I can at least provide the""" start="00:46:49.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""orientation of what you're looking at. Scrape log is probably my first thing I want to show off.""" start="00:46:54.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, it's not beautiful, but this works, uh, pretty well for me to get a sense of something might""" start="00:46:59.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""have changed in terms of how many warnings or errors are happening when I build Emacs. So I""" start="00:47:08.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""have this whole automation going on and I frequently want to answer the question,""" start="00:47:14.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""you know, what's the change rate in, uh, warnings or what have you. So this kind of gives me a count""" start="00:47:19.280" video="qanda-windows" id="subtitle"]]
+[[!template text="""of that. Um, so from there, uh, accrued CI is the script we're watching run in the other pane.""" start="00:47:26.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, we can see it's, uh, just starting to do its thing again.""" start="00:47:37.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""And, uh, the make file I mentioned, this is a top-down rewrite of everything else that I've done.""" start="00:47:48.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""It has some bugs right now. Um, the, uh, the build distribution is the main script that I use for my""" start="00:47:57.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""personal builds. This is what is run by the crude CI script. Uh, it has a fun tie-in to this, uh,""" start="00:48:08.640" video="qanda-windows" id="subtitle"]]
+[[!template text="""web interface here, um, where we can, you don't need the port number when you go to it. That's""" start="00:48:17.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""just if I'm going to post. Um, the, uh, blah, blah, blah, blah, blah. This, this script is""" start="00:48:23.200" video="qanda-windows" id="subtitle"]]
+[[!template text="""really long and complicated and probably needs some diving into, but you can see that, um, one""" start="00:48:33.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""of the complexities I have to deal with is that I'm going to need something in the format of an""" start="00:48:39.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""emacs-version for strategic, um, nsys reasons. So, uh, it takes care of kind of every complexity""" start="00:48:43.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""that I mentioned today in some respects, um, as does the make file. Build release is, um, another""" start="00:48:54.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""fairly useful incarnation of this. This is just focused on the release process, and this does""" start="00:49:03.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""work, uh, for example, to create the, the, the, you know, like, like, well, I could like, uh,""" start="00:49:11.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""for like files as far as I can tell. So what are currently posted for emacs 29.1 and the release""" start="00:49:18.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""candidate. Um, so I'll probably use that next time. And if it's still like, for like, I'll""" start="00:49:25.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""probably post the ones that came from this. Um, uh, building, uh, TreeSitter, I make some DLLs""" start="00:49:32.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""there. If you're looking for hints on how to get going or just simply, uh, a huge long list""" start="00:49:40.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""of Git repositories that make grammars, you can use that is here as well. Um, finally, I mentioned""" start="00:49:47.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""I have a, um, I have a website where I publish my own personal snapshots that I make, uh, that""" start="00:49:55.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""folder full of install directories, but all of the usual GNU style binary distributables, including""" start="00:50:04.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""the source code and the source code for the dependencies. Um, the, uh, so this program is""" start="00:50:11.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""another one of those complicated find commands and therefore potentially the most useful thing""" start="00:50:22.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""in here to take to you. Um, and here I'm deleting, uh, binaries older than 17 years. Uh, everything""" start="00:50:27.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""except the, uh, node apps file and the sources of it you'll find on my website. Currently those""" start="00:50:34.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""indefinitely, I'll probably roll out 120 days or something, um, for those eventually.""" start="00:50:42.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""Oh, uh, I can talk about this one even. Um, the, uh, so here you'll see the two branches that I'm""" start="00:50:53.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""tracking. The job of this script is, uh, this runs on the website. I call it with a, like a remote""" start="00:51:00.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""rsync, uh, type, uh, or an SSA remote, uh, SSH command. Um, and right after the rsync,""" start="00:51:06.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""rsyncing up any new Emacs that I built. And, uh, it's, uh, it's job is to update my fancy""" start="00:51:15.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""directory indexing. So let's look at Corwin's website. Here's my Emacs 29 folder.""" start="00:51:26.080" video="qanda-windows" id="subtitle"]]
+[[!template text="""We have about two more minutes, Corwin. Yeah. It'll take that entire two minutes to, uh,""" start="00:51:37.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""load this directory because I am, because I have not yet ever pruned any of these dang binaries.""" start="00:51:50.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""So every version of, uh, Emacs 29 that I've ever made for myself is probably here. Nice.""" start="00:51:56.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""Uh, I strongly recommend that you bookmark this folder if you're using these for something and""" start="00:52:03.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""you always want the latest. Um, so here, this particular, uh, latest 29, Emacs 29 latest,""" start="00:52:08.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""or simply replace the 29 with 30 to get those. Uh, alas, no, no such luck for TreeSetter.""" start="00:52:14.240" video="qanda-windows" id="subtitle"]]
+[[!template text="""But if we look at, uh, that,""" start="00:52:23.120" video="qanda-windows" id="subtitle"]]
+[[!template text="""live this long without making a typo. Now look at me.""" start="00:52:36.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""Uh-oh. Oh.""" start="00:52:40.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""So here, um, you know, we can see the icon application and so on, even in the TreeSetter""" start="00:52:51.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""folder. This is all I'm talking about, about the fanciness that's set up by that other script that""" start="00:52:56.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""I'm showing over here and run after each time I run the upload. It just""" start="00:53:02.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""looks to see if anything's new and add some lines to the .htaccess file.""" start="00:53:07.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""Um, I'm particularly proud of this one. I'm not going to lie. Um, linking out to each,""" start="00:53:15.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""each, uh, project that we're using, letting us know the commit version,""" start="00:53:22.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""and then, uh, for the DLLs, quick link out to the log and the signature file for this DLL. Um,""" start="00:53:26.560" video="qanda-windows" id="subtitle"]]
+[[!template text="""I find that a lot, just a lot more readable than, uh, listing them all out individually. And I'd""" start="00:53:36.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""love to do something like that on the GNU site. So I'm, I think we've got to be out of time by""" start="00:53:46.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""now. I've just got to say, hey, thanks again for having me, uh, for those that, uh, watch the talk""" start="00:53:53.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""either live or after the conference. Uh, appreciate everyone's support to get me to""" start="00:53:59.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""the point where I will be able to, uh, to do this, this, this cool volunteer task,""" start="00:54:04.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""uh, which is fun and easy to do and reach out to me if you're interested in helping with it.""" start="00:54:10.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""Well, awesome. Thanks a lot for the awesome talk, Corbyn. And, uh, of course, as a fellow""" start="00:54:18.960" video="qanda-windows" id="subtitle"]]
+[[!template text="""core, uh, core organizer, uh, for all, for all that you do, um, in and around Emacs Conf""" start="00:54:24.320" video="qanda-windows" id="subtitle"]]
+[[!template text="""and of course for, uh, GNU Emacs as well, it's much appreciated.""" start="00:54:29.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""Big, big words from coming from you, my friend. Um, thanks for the kind words.""" start="00:54:36.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""Cheers. My pleasure. All right. And with that, I think we're gonna, uh, wrap up the dev, uh,""" start="00:54:45.040" video="qanda-windows" id="subtitle"]]
+[[!template text="""track here and, uh, we'll be with you again shortly in a few minutes on the gen stream,""" start="00:54:49.840" video="qanda-windows" id="subtitle"]]
+[[!template text="""the gen track for the closing remarks for today, um, only for today, because we're going to be""" start="00:54:55.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""back tomorrow again as well. So don't go anywhere and, uh, see you on the gen track in a bit.""" start="00:55:00.400" video="qanda-windows" id="subtitle"]]
+[[!template text="""Oh my God, I did it. We got done within the time. You're my hero. Um, and thank you so""" start="00:55:25.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""much for just keeping me honest there and, uh, like helping me keep my eye on the time and such.""" start="00:55:32.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""You have to look at the recording and see whether you feel like doing it again.""" start="00:55:41.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""I'm sorry. I had my sound screwed up and I'm sorry if I talked over somebody,""" start="00:55:56.160" video="qanda-windows" id="subtitle"]]
+[[!template text="""I couldn't hear anything on mumble until this very moment.""" start="00:55:59.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""Oh, uh, because he's your webcam for it. Um, like as a, like a virtual webcam thingy,""" start="00:56:03.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""it was low res, especially when things are changing as you're scrolling around. So we'll""" start="00:56:09.440" video="qanda-windows" id="subtitle"]]
+[[!template text="""see what kind of recording we can recover from it. And then you can decide whether you maybe""" start="00:56:15.760" video="qanda-windows" id="subtitle"]]
+[[!template text="""want to clean it up with like screenshots. I recorded on this end too. We shouldn't have""" start="00:56:19.920" video="qanda-windows" id="subtitle"]]
+[[!template text="""that problem with my recording. Thank you. Thank you. Thank you. I think we're still live on the""" start="00:56:26.480" video="qanda-windows" id="subtitle"]]
+[[!template text="""dev stream. Someone could, uh, take that off. Oh, yes. Because, uh, I'll, I'll set it to rebroadcast.""" start="00:56:30.720" video="qanda-windows" id="subtitle"]]
+[[!template text="""Yeah. I love doing that for the closing remarks. That's a fine tradition""" start="00:56:45.520" video="qanda-windows" id="subtitle"]]
+[[!template text="""or it's a tradition now. Cause I'm pretty sure this means we've done it twice.""" start="00:56:52.000" video="qanda-windows" id="subtitle"]]
+[[!template text="""I once heard that, you know, uh, as a fan-ish meaning like a fan-ish is a term of endearment""" start="00:57:01.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""for a science fiction fan to another. We say we're, we're fans or things we do are fan-ish and""" start="00:57:07.360" video="qanda-windows" id="subtitle"]]
+[[!template text="""a fan-ish tradition then is if you do it three times, it's tradition, but we're on a budget here.""" start="00:57:12.800" video="qanda-windows" id="subtitle"]]
+[[!template text="""So, all right. I think we should, um, head over to mumble and talk on mumble. Um, and just decide""" start="00:57:19.680" video="qanda-windows" id="subtitle"]]
+[[!template text="""and see like which big blue button room we're going to be in for closing. Okay. So we're clear""" start="00:57:31.600" video="qanda-windows" id="subtitle"]]
+[[!template text="""on BBB here? Yep. I think so.""" start="00:57:36.240" video="qanda-windows" id="subtitle"]]
+
+Questions or comments? Please e-mail [corwin@bru.st](mailto:corwin@bru.st?subject=Comment%20for%20EmacsConf%202023%20windows%3A%20Windows%20into%20Freedom)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/windows-before.md b/2023/info/windows-before.md
new file mode 100644
index 00000000..a3de3379
--- /dev/null
+++ b/2023/info/windows-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 58-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="windows-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 57:48 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/4DeRkvJyKFdCBLWnHtsZW2">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><div>Listen to just the audio:<br /><audio controls preload="none" id="windows-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus">Download --answers.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt">Download --answers.vtt</a> (unedited)</li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/windows-nav.md b/2023/info/windows-nav.md
new file mode 100644
index 00000000..05dc3b17
--- /dev/null
+++ b/2023/info/windows-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/doc">Literate Documentation with Emacs and Org Mode</a>
+Next by track: <a href="/2023/talks/scheme">Bringing joy to Scheme programming</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/woof-nav.md b/2023/info/woof-nav.md
new file mode 100644
index 00000000..35fd3ab8
--- /dev/null
+++ b/2023/info/woof-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a>
+Next by track: <a href="/2023/talks/sun-open">Sunday opening remarks</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/world-after.md b/2023/info/world-after.md
new file mode 100644
index 00000000..ce8bdc00
--- /dev/null
+++ b/2023/info/world-after.md
@@ -0,0 +1,381 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="world-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Draw and scribble in GNU Emacs""" start="00:00:00.780" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""Hello. In this video, we will look at""" start="00:00:00.780" video="mainVideo-world" id="subtitle"]]
+[[!template text="""drawing and scribbling in Emacs using SVG.""" start="00:00:02.900" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's start with `canvas-mode`.""" start="00:00:07.167" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We will define the width and the height.""" start="00:00:10.067" video="mainVideo-world" id="subtitle"]]
+[[!template text="""The default is polyline,""" start="00:00:17.540" video="mainVideo-world" id="subtitle"]]
+[[!template text="""which means you can scribble anything that you want.""" start="00:00:19.333" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Very handy for taking quick notes.""" start="00:00:23.733" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now we will look at""" start="00:00:30.300" video="mainVideo-world" id="subtitle"]]
+[[!template text="""drawing a triangle using some lines.""" start="00:00:32.700" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Okay. Now let's draw a circle.""" start="00:00:46.333" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can use the mouse to adjust""" start="00:00:57.267" video="mainVideo-world" id="subtitle"]]
+[[!template text="""the radius of the circle.""" start="00:00:58.900" video="mainVideo-world" id="subtitle"]]
+[[!template text="""There is some problem with ellipse,""" start="00:01:02.860" video="mainVideo-world" id="subtitle"]]
+[[!template text="""we will look at it at the end of the video.""" start="00:01:04.333" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now let's put up some text,""" start="00:01:07.940" video="mainVideo-world" id="subtitle"]]
+[[!template text="""a typical &quot;Hello World&quot;.""" start="00:01:11.767" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Size, let's do a 20 font size,""" start="00:01:15.067" video="mainVideo-world" id="subtitle"]]
+[[!template text="""and we will use the default font family.""" start="00:01:19.880" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Next, we will look at undoing what we have drawn.""" start="00:01:32.360" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Just press u for deleting the last drawn object.""" start="00:01:37.433" video="mainVideo-world" id="subtitle"]]
+[[!template text="""And you can continue pressing""" start="00:01:43.067" video="mainVideo-world" id="subtitle"]]
+[[!template text="""u for consecutive deletions.""" start="00:01:45.800" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can also make a selection of the objects""" start="00:01:51.960" video="mainVideo-world" id="subtitle"]]
+[[!template text="""on the screen using your mouse and then press u.""" start="00:01:54.533" video="mainVideo-world" id="subtitle"]]
+[[!template text="""This will delete all the objects in one go.""" start="00:01:57.700" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now we are looking at stroke color.""" start="00:02:02.600" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We will use a brown stroke color""" start="00:02:06.660" video="mainVideo-world" id="subtitle"]]
+[[!template text="""for drawing our objects.""" start="00:02:08.633" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Next, let's look at stroke width.""" start="00:02:12.880" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We will use a width of 5.""" start="00:02:20.420" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Next, let's fill up the objects with a fill color.""" start="00:02:27.980" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now we will look at zoom.""" start="00:02:41.620" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Use the mouse to select a region and zoom.""" start="00:02:47.160" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can also use +, - for zooming in and out.""" start="00:02:50.120" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Press 0 for resetting the zoom.""" start="00:02:54.360" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Next, let's save the file,""" start="00:03:07.133" video="mainVideo-world" id="subtitle"]]
+[[!template text="""and q or Enter for exiting the canvas-mode.""" start="00:03:14.540" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now we will open the file in Emacs itself.""" start="00:03:19.667" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can see the file,""" start="00:03:25.220" video="mainVideo-world" id="subtitle"]]
+[[!template text="""you can do Control-c Control-c (`C-c C-c`).""" start="00:03:26.180" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Finally, we look at ellipse.""" start="00:03:32.000" video="mainVideo-world" id="subtitle"]]
+[[!template text="""That's all for this video. Thanks!""" start="00:03:44.420" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""SVG Symbols library""" start="00:03:46.400" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""Hello. In this video, we will draw""" start="00:03:46.400" video="mainVideo-world" id="subtitle"]]
+[[!template text="""schematics using symbols from SVG library in Emacs.""" start="00:03:48.333" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Press capital L to activate the symbol library""" start="00:03:52.067" video="mainVideo-world" id="subtitle"]]
+[[!template text="""that you can see on the right hand side,""" start="00:03:55.000" video="mainVideo-world" id="subtitle"]]
+[[!template text="""and place the symbol on the canvas.""" start="00:03:57.867" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's add another register to this diagram.""" start="00:04:01.960" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can press capital R to rotate the symbol.""" start="00:04:06.640" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's place it on the canvas.""" start="00:04:11.820" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now we will add a voltage source to the circuit.""" start="00:04:17.240" video="mainVideo-world" id="subtitle"]]
+[[!template text="""To connect the symbols,""" start="00:04:31.667" video="mainVideo-world" id="subtitle"]]
+[[!template text="""we will have to use some connecting wires.""" start="00:04:33.180" video="mainVideo-world" id="subtitle"]]
+[[!template text="""For that, press capital W""" start="00:04:36.967" video="mainVideo-world" id="subtitle"]]
+[[!template text="""to activate the connection mode.""" start="00:04:39.467" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Click anywhere on the canvas""" start="00:04:46.920" video="mainVideo-world" id="subtitle"]]
+[[!template text="""to draw intermediate points, and press Esc""" start="00:04:48.567" video="mainVideo-world" id="subtitle"]]
+[[!template text="""to exit that particular connection.""" start="00:04:53.133" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's connect other symbols too.""" start="00:05:00.033" video="mainVideo-world" id="subtitle"]]
+[[!template text="""That's all for this video. Thanks.""" start="00:05:16.633" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""GNU Emacs: A multimedia editor""" start="00:05:20.140" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""Hello. In this video, we will look at""" start="00:05:20.140" video="mainVideo-world" id="subtitle"]]
+[[!template text="""some basic multimedia editing using Emacs.""" start="00:05:22.167" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's start a media-edit session.""" start="00:05:24.933" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's open a video file.""" start="00:05:27.460" video="mainVideo-world" id="subtitle"]]
+[[!template text="""The left-hand side is your viewer area,""" start="00:05:32.000" video="mainVideo-world" id="subtitle"]]
+[[!template text="""and the right-hand side is your track area.""" start="00:05:34.100" video="mainVideo-world" id="subtitle"]]
+[[!template text="""In the track area, you can use normal Emacs""" start="00:05:36.700" video="mainVideo-world" id="subtitle"]]
+[[!template text="""text editing movements.""" start="00:05:39.667" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now press `C-c r` to refresh the viewer mode""" start="00:05:42.040" video="mainVideo-world" id="subtitle"]]
+[[!template text="""with the exact time frame.""" start="00:05:48.167" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now press SPC to play or pause the video.""" start="00:05:52.767" video="mainVideo-world" id="subtitle"]]
+[[!template text="""This looks like an interesting point in the video,""" start="00:05:59.433" video="mainVideo-world" id="subtitle"]]
+[[!template text="""let's track it and split it. Press Enter to do that.""" start="00:06:03.233" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We will extract some 10 seconds of this video.""" start="00:06:11.433" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's use this.""" start="00:06:20.733" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now go here and delete all these lines.""" start="00:06:23.233" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's review our edited clip.""" start="00:06:26.300" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Looks good! Now press e to export the video.""" start="00:06:44.133" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Provide an output file name.""" start="00:06:51.833" video="mainVideo-world" id="subtitle"]]
+[[!template text="""This will use FFmpeg to convert, and you can""" start="00:06:57.560" video="mainVideo-world" id="subtitle"]]
+[[!template text="""output to any file format supported by FFmpeg.""" start="00:07:04.433" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Okay. Let's open up shell and view this""" start="00:07:16.967" video="mainVideo-world" id="subtitle"]]
+[[!template text="""video file in an external video player.""" start="00:07:21.900" video="mainVideo-world" id="subtitle"]]
+[[!template text="""That's all for this video. Thanks.""" start="00:07:57.160" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Fill PDF form using GNU Emacs""" start="00:08:03.367" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""Hello. In this video, we will look at""" start="00:08:03.367" video="mainVideo-world" id="subtitle"]]
+[[!template text="""editing a PDF form using GNU Emacs.""" start="00:08:05.567" video="mainVideo-world" id="subtitle"]]
+[[!template text="""To start, we have to enable the annotation.""" start="00:08:09.760" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Then we can use Tab to move forward and Shift+Tab""" start="00:08:13.840" video="mainVideo-world" id="subtitle"]]
+[[!template text="""to move backwards through the fields.""" start="00:08:18.533" video="mainVideo-world" id="subtitle"]]
+[[!template text="""To edit a field, we press e.""" start="00:08:22.480" video="mainVideo-world" id="subtitle"]]
+[[!template text="""So let's edit a text box. We'll call it 'city'.""" start="00:08:25.967" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Next, we will edit a drop-down.""" start="00:08:33.580" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Again, press e, and you get a select.""" start="00:08:35.840" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Use the Minibuffer to select one of the values.""" start="00:08:38.680" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's select 'France'.""" start="00:08:45.833" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now let's edit a radio box.""" start="00:08:48.500" video="mainVideo-world" id="subtitle"]]
+[[!template text="""A checkbox or a radio box can be toggled using t.""" start="00:08:52.180" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can disable…""" start="00:08:55.900" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now let's save the file, `doc-view-save-form`.""" start="00:08:58.660" video="mainVideo-world" id="subtitle"]]
+[[!template text="""It will ask for a file name.""" start="00:09:05.140" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's call it `filled1.pdf`. If the file exists,""" start="00:09:08.360" video="mainVideo-world" id="subtitle"]]
+[[!template text="""it will ask you if you want to overwrite.""" start="00:09:13.400" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now let's verify this new file.""" start="00:09:17.260" video="mainVideo-world" id="subtitle"]]
+[[!template text="""In Firefox, we'll copy this file name, call it filled1.""" start="00:09:21.460" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's verify the values.""" start="00:09:27.160" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You have city, France and Driving License selected.""" start="00:09:29.100" video="mainVideo-world" id="subtitle"]]
+[[!template text="""That's all for this video. Thanks.""" start="00:09:32.620" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Desktop and window management in GNU Emacs""" start="00:09:34.900" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""Hello. In this video, we will look at""" start="00:09:34.900" video="mainVideo-world" id="subtitle"]]
+[[!template text="""desktop and window management in GNU Emacs.""" start="00:09:37.660" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We'll start with `task-view`.""" start="00:09:40.460" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Top row shows all the desktops,""" start="00:09:47.740" video="mainVideo-world" id="subtitle"]]
+[[!template text="""and rest of the images are the active windows""" start="00:09:50.467" video="mainVideo-world" id="subtitle"]]
+[[!template text="""in that particular desktop.""" start="00:09:54.400" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can tap to select""" start="00:09:59.300" video="mainVideo-world" id="subtitle"]]
+[[!template text="""and double tap to activate a particular window.""" start="00:10:09.160" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can use m to move selected windows""" start="00:10:13.320" video="mainVideo-world" id="subtitle"]]
+[[!template text="""to any of the desktops at the top.""" start="00:10:16.767" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's check the third desktop.""" start="00:10:25.100" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's bring it back to the second desktop.""" start="00:10:29.320" video="mainVideo-world" id="subtitle"]]
+[[!template text="""The best part,""" start="00:10:49.980" video="mainVideo-world" id="subtitle"]]
+[[!template text="""you can select multiple windows""" start="00:10:51.300" video="mainVideo-world" id="subtitle"]]
+[[!template text="""and form a group by pressing g.""" start="00:10:54.800" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Then you can select any of the windows""" start="00:10:59.980" video="mainVideo-world" id="subtitle"]]
+[[!template text="""in this group to activate the complete group.""" start="00:11:04.867" video="mainVideo-world" id="subtitle"]]
+[[!template text="""That's all for this video. Thanks.""" start="00:11:07.640" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Screen mirroring in GNU Emacs""" start="00:11:10.440" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""Hello. In this video, we will look at""" start="00:11:10.440" video="mainVideo-world" id="subtitle"]]
+[[!template text="""screen mirroring using GNU Emacs.""" start="00:11:12.433" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Run `wfd`. Select an interface.""" start="00:11:14.280" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now it will scan for all the available devices""" start="00:11:18.780" video="mainVideo-world" id="subtitle"]]
+[[!template text="""for screen mirroring.""" start="00:11:20.967" video="mainVideo-world" id="subtitle"]]
+[[!template text="""I'll select my TV, which is an LG WebOS TV.""" start="00:11:24.800" video="mainVideo-world" id="subtitle"]]
+[[!template text="""If you don't decline, it will start streaming.""" start="00:11:30.400" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's change some buffer to check the visuals.""" start="00:11:38.720" video="mainVideo-world" id="subtitle"]]
+[[!template text="""To terminate the session, just click on quit.""" start="00:11:45.140" video="mainVideo-world" id="subtitle"]]
+[[!template text="""That's all for this video. Thanks.""" start="00:11:50.220" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Swipe for Text Input in GNU Emacs""" start="00:11:53.033" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""[Using Sweep to swipe and type &quot;as you like it.&quot;]""" start="00:11:53.033" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Formula Editor in GNU Emacs""" start="00:12:25.533" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""[Formula Editor]""" start="00:12:25.533" video="mainVideo-world" id="subtitle"]]
+[[!template text="""[Typing fractions in the formula]""" start="00:12:39.900" video="mainVideo-world" id="subtitle"]]
+[[!template text="""[Adding brackets and an exponent]""" start="00:12:45.033" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Transliteration in Emacs""" start="00:12:59.433" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""[Hindi (Devanagari script) Phonetic typing]""" start="00:12:59.433" video="mainVideo-world" id="subtitle"]]
+[[!template text="""[Phonetic typing Gujarati, Bangla, Kannada, and Tamil]""" start="00:13:05.200" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Social Media client - Tumblr, Reddit""" start="00:13:09.433" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""[Browsing Reddit in Emacs]""" start="00:13:09.433" video="mainVideo-world" id="subtitle"]]
+[[!template text="""[Browsing Tumblr in Emacs]""" start="00:13:19.533" video="mainVideo-world" id="subtitle"]]
+[[!template text="""[Browsing X (Twitter) in Emacs]""" start="00:13:29.533" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Comics Builder""" start="00:13:40.000" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""[Generating comic from a text script]""" start="00:13:40.000" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Matching game""" start="00:13:49.567" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""[Matching color names with color boxes]""" start="00:13:49.567" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Interactive XPath Builder in GNU Emacs""" start="00:13:59.567" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""[Running `xpath-builder` on an XML file]""" start="00:13:59.567" video="mainVideo-world" id="subtitle"]]
+[[!template text="""[Filtering `title`, `para`, and `author` from the XML]""" start="00:14:01.833" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Interactive JSON Builder in GNU Emacs""" start="00:14:10.767" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""[Filtering `father`, `father.name`, `children`""" start="00:14:10.767" video="mainVideo-world" id="subtitle"]]
+[[!template text="""`children[1]` from a JSON using JSON Builder]""" start="00:14:29.200" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter""" start="00:14:35.233" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""Hello. In this video, we will look at""" start="00:14:35.233" video="mainVideo-world" id="subtitle"]]
+[[!template text="""generating getters and setters in Java using Emacs.""" start="00:14:37.633" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We will run `srecode-getset-dialog`.""" start="00:14:41.660" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We will get an option to select particular fields,""" start="00:14:46.233" video="mainVideo-world" id="subtitle"]]
+[[!template text="""you can expand and collapse.""" start="00:14:48.767" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can select all or deselect all,""" start="00:14:51.833" video="mainVideo-world" id="subtitle"]]
+[[!template text="""or you can choose any particular getter.""" start="00:14:54.100" video="mainVideo-world" id="subtitle"]]
+[[!template text="""So let's do protected version of this. Here you go.""" start="00:14:56.386" video="mainVideo-world" id="subtitle"]]
+[[!template text="""If you want to generate for other fields,""" start="00:15:02.633" video="mainVideo-world" id="subtitle"]]
+[[!template text="""you can re-run it.""" start="00:15:06.067" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can check the one that you have already""" start="00:15:08.300" video="mainVideo-world" id="subtitle"]]
+[[!template text="""generated is not there.""" start="00:15:11.267" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now select all, and you can see rest of the""" start="00:15:13.100" video="mainVideo-world" id="subtitle"]]
+[[!template text="""getters and setters have been generated.""" start="00:15:22.300" video="mainVideo-world" id="subtitle"]]
+[[!template text="""That's all for this video. Thanks.""" start="00:15:23.933" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""Generate C header""" start="00:15:26.133" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""[Generating C headers using `srecode-gen-header`]""" start="00:15:26.133" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""C Rename symbols""" start="00:16:11.640" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""Hello. In this video, we will look at""" start="00:16:11.640" video="mainVideo-world" id="subtitle"]]
+[[!template text="""renaming method across multiple files in a project.""" start="00:16:13.833" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's start with `semantic-symref-symbol`.""" start="00:16:17.633" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now we have the references.""" start="00:16:24.640" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's use the menu to open all these occurrences.""" start="00:16:26.800" video="mainVideo-world" id="subtitle"]]
+[[!template text="""To rename it, we have to use""" start="00:16:35.400" video="mainVideo-world" id="subtitle"]]
+[[!template text="""&quot;Rename Symbol in Open hits.&quot;""" start="00:16:38.433" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's rename it to underscore 1 (`_1`).""" start="00:16:41.920" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We will verify it by compiling the project.""" start="00:16:46.440" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's open the `*Messages*` buffer to see the results""" start="00:16:57.720" video="mainVideo-world" id="subtitle"]]
+[[!template text="""more clearly. No errors.""" start="00:17:00.300" video="mainVideo-world" id="subtitle"]]
+[[!template text="""That's all for this video. Thanks.""" start="00:17:04.167" video="mainVideo-world" id="subtitle"]]
+
+[[!template new="1" text="""SQL (offline)""" start="00:17:07.640" video="mainVideo-world" id="subtitle"]]
+
+[[!template text="""Hello. In this video, we will look at""" start="00:17:07.640" video="mainVideo-world" id="subtitle"]]
+[[!template text="""SQL editing with Semantic.""" start="00:17:09.733" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We will define a schema in this SQL document.""" start="00:17:12.440" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's create a table.""" start="00:17:16.620" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We get already existing tables""" start="00:17:27.000" video="mainVideo-world" id="subtitle"]]
+[[!template text="""in the current document.""" start="00:17:30.267" video="mainVideo-world" id="subtitle"]]
+[[!template text="""It also supports auto-completion of some keywords.""" start="00:17:38.533" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now we can do some queries on the tables.""" start="00:17:57.033" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We have `SELECT` as the keyword or the SQL,""" start="00:18:00.900" video="mainVideo-world" id="subtitle"]]
+[[!template text="""so we will select the SQL.""" start="00:18:03.333" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Here we have all the tables existing in this schema.""" start="00:18:06.833" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We can also use an alias for completions.""" start="00:18:13.560" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now let's look at a more complex example.""" start="00:18:25.633" video="mainVideo-world" id="subtitle"]]
+[[!template text="""We will try to do a join on two tables.""" start="00:18:31.267" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's add a `WHERE` clause.""" start="00:18:43.367" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Next, let's do insert.""" start="00:19:06.600" video="mainVideo-world" id="subtitle"]]
+[[!template text="""You can just click on Tab to go to the next field.""" start="00:19:23.333" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Let's fill in the columns.""" start="00:19:27.967" video="mainVideo-world" id="subtitle"]]
+[[!template text="""And do a Tab to go to the values""" start="00:19:30.700" video="mainVideo-world" id="subtitle"]]
+[[!template text="""and add the corresponding values.""" start="00:19:32.667" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Finally, an update.""" start="00:19:37.000" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Now we will try to delete this""" start="00:19:48.033" video="mainVideo-world" id="subtitle"]]
+[[!template text="""with a `WHERE col11 = 4`.""" start="00:20:00.700" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Lastly, let's try dropping the table.""" start="00:20:07.333" video="mainVideo-world" id="subtitle"]]
+[[!template text="""That's all for this video. Thanks.""" start="00:20:16.267" video="mainVideo-world" id="subtitle"]]
+[[!template text="""Slide with the text &quot;Let's Make Computing Personal.&quot;""" start="00:20:21.867" video="mainVideo-world" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
+<a name="world-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: Okay, folks. Thanks, Anand,""" start="00:00:07.120" video="qanda-world" id="subtitle"]]
+[[!template text="""for the great talk. So here is the live Q&A.""" start="00:00:11.259" video="qanda-world" id="subtitle"]]
+[[!template text="""Hi. Hello. I see questions being posted on""" start="00:00:22.279" video="qanda-world" id="subtitle"]]
+[[!template text="""the pad. Would you like me to read them out""" start="00:00:23.920" video="qanda-world" id="subtitle"]]
+[[!template text="""or would you prefer to read them yourself?""" start="00:00:25.320" video="qanda-world" id="subtitle"]]
+[[!template text="""[Speaker 1]: Okay. I'll try reading it out.""" start="00:00:31.880" video="qanda-world" id="subtitle"]]
+[[!template text="""If there are audio issues,""" start="00:00:33.340" video="qanda-world" id="subtitle"]]
+[[!template text="""[Speaker 0]: Sure, thanks.""" start="00:00:35.420" video="qanda-world" id="subtitle"]]
+[[!template text="""[Speaker 1]: just let me know. A lot of what you showed""" start="00:00:37.360" video="qanda-world" id="subtitle"]]
+[[!template text="""was the type of stuff Emacs didn't do very""" start="00:00:39.960" video="qanda-world" id="subtitle"]]
+[[!template text="""well. This stuff looks like it could be""" start="00:00:43.040" video="qanda-world" id="subtitle"]]
+[[!template text="""useful for using Emacs with a touch screen""" start="00:00:45.020" video="qanda-world" id="subtitle"]]
+[[!template text="""and a tablet. Have you used it for purposes""" start="00:00:46.960" video="qanda-world" id="subtitle"]]
+[[!template text="""like this? No right now it's more proof of""" start="00:00:53.160" video="qanda-world" id="subtitle"]]
+[[!template text="""concept stage so I don't use it more than you""" start="00:00:58.580" video="qanda-world" id="subtitle"]]
+[[!template text="""know just making some demo software.""" start="00:01:03.420" video="qanda-world" id="subtitle"]]
+[[!template text="""The next question is, is there a mode for""" start="00:01:12.100" video="qanda-world" id="subtitle"]]
+[[!template text="""using FFmpeg through Emacs or did you make it""" start="00:01:15.080" video="qanda-world" id="subtitle"]]
+[[!template text="""yourself? Okay so this is something that I""" start="00:01:20.160" video="qanda-world" id="subtitle"]]
+[[!template text="""built. So the base of it is XWidget in Emacs,""" start="00:01:26.800" video="qanda-world" id="subtitle"]]
+[[!template text="""which is already there.""" start="00:01:28.160" video="qanda-world" id="subtitle"]]
+[[!template text="""But then I had to add a few control code for""" start="00:01:35.080" video="qanda-world" id="subtitle"]]
+[[!template text="""controlling VLC. So ffmpeg is like a shell""" start="00:01:42.240" video="qanda-world" id="subtitle"]]
+[[!template text="""command that finally stitches those bits of""" start="00:01:46.840" video="qanda-world" id="subtitle"]]
+[[!template text="""video clips. But what actually plays is VLC,""" start="00:01:51.780" video="qanda-world" id="subtitle"]]
+[[!template text="""and it's not FFmpeg. Hope that's clear.""" start="00:01:55.860" video="qanda-world" id="subtitle"]]
+[[!template text="""The next question is these demos are always""" start="00:02:03.580" video="qanda-world" id="subtitle"]]
+[[!template text="""so impressive. Do you plan to upstream any of""" start="00:02:06.020" video="qanda-world" id="subtitle"]]
+[[!template text="""these projects into Emacs?""" start="00:02:07.040" video="qanda-world" id="subtitle"]]
+[[!template text="""Right now, okay, let me read the complete""" start="00:02:13.940" video="qanda-world" id="subtitle"]]
+[[!template text="""questions. These demos are always so""" start="00:02:16.220" video="qanda-world" id="subtitle"]]
+[[!template text="""impressive. Do you plan to upstream any of""" start="00:02:17.960" video="qanda-world" id="subtitle"]]
+[[!template text="""these projects into Emacs or to publish them""" start="00:02:19.960" video="qanda-world" id="subtitle"]]
+[[!template text="""as, for example, helper packages?""" start="00:02:21.780" video="qanda-world" id="subtitle"]]
+[[!template text="""So right now, as it stands,""" start="00:02:26.480" video="qanda-world" id="subtitle"]]
+[[!template text="""I personally don't intend to do that because""" start="00:02:30.720" video="qanda-world" id="subtitle"]]
+[[!template text="""I don't have that time but I have signed my""" start="00:02:34.900" video="qanda-world" id="subtitle"]]
+[[!template text="""signed assignment copyright assignment so""" start="00:02:38.720" video="qanda-world" id="subtitle"]]
+[[!template text="""anybody has time and motivation to do it they""" start="00:02:41.600" video="qanda-world" id="subtitle"]]
+[[!template text="""can pick up the code and help me with that.""" start="00:02:47.120" video="qanda-world" id="subtitle"]]
+[[!template text="""The next is, how did you make that electronic""" start="00:02:53.200" video="qanda-world" id="subtitle"]]
+[[!template text="""circuit diagram? Is there a mode with the""" start="00:03:00.600" video="qanda-world" id="subtitle"]]
+[[!template text="""symbols already available.""" start="00:03:02.560" video="qanda-world" id="subtitle"]]
+[[!template text="""Okay so electronic circuit diagram is you""" start="00:03:08.240" video="qanda-world" id="subtitle"]]
+[[!template text="""know the canvas mode but and what you see is""" start="00:03:13.340" video="qanda-world" id="subtitle"]]
+[[!template text="""the is an extension of that canvas mode which""" start="00:03:19.540" video="qanda-world" id="subtitle"]]
+[[!template text="""uses a symbol library.""" start="00:03:25.440" video="qanda-world" id="subtitle"]]
+[[!template text="""And so The only difference is you press""" start="00:03:31.980" video="qanda-world" id="subtitle"]]
+[[!template text="""capital L to open up that symbol library.""" start="00:03:34.160" video="qanda-world" id="subtitle"]]
+[[!template text="""In this case, this symbol library happens to""" start="00:03:37.700" video="qanda-world" id="subtitle"]]
+[[!template text="""be just a library of electronic symbols.""" start="00:03:41.380" video="qanda-world" id="subtitle"]]
+[[!template text="""It can be any category of symbols and then""" start="00:03:44.640" video="qanda-world" id="subtitle"]]
+[[!template text="""you and use it to draw on your,""" start="00:03:47.600" video="qanda-world" id="subtitle"]]
+[[!template text="""in the canvas major mode.""" start="00:03:50.640" video="qanda-world" id="subtitle"]]
+[[!template text="""Next question is, I have seen your blog post""" start="00:04:02.240" video="qanda-world" id="subtitle"]]
+[[!template text="""with some of these features But can you link""" start="00:04:04.700" video="qanda-world" id="subtitle"]]
+[[!template text="""to the repo where you are doing the""" start="00:04:06.280" video="qanda-world" id="subtitle"]]
+[[!template text="""development for these packages?""" start="00:04:07.940" video="qanda-world" id="subtitle"]]
+[[!template text="""Sure, I can do that Most of these are""" start="00:04:18.899" video="qanda-world" id="subtitle"]]
+[[!template text="""available on my blogs.""" start="00:04:20.279" video="qanda-world" id="subtitle"]]
+[[!template text="""Typically the Reddit post always has a link""" start="00:04:26.200" video="qanda-world" id="subtitle"]]
+[[!template text="""to my blog. But I'll post it in this 1 as""" start="00:04:31.480" video="qanda-world" id="subtitle"]]
+[[!template text="""well.""" start="00:04:31.680" video="qanda-world" id="subtitle"]]
+[[!template text="""[Speaker 0]: I'll quickly note that we have about 4 more""" start="00:04:48.480" video="qanda-world" id="subtitle"]]
+[[!template text="""minutes of live Q&A, but if folks have more""" start="00:04:52.540" video="qanda-world" id="subtitle"]]
+[[!template text="""questions, they're welcome to either continue""" start="00:04:55.320" video="qanda-world" id="subtitle"]]
+[[!template text="""asking on the pad or come join us here on Big""" start="00:04:59.060" video="qanda-world" id="subtitle"]]
+[[!template text="""Blue Button and continue chatting once the""" start="00:05:02.080" video="qanda-world" id="subtitle"]]
+[[!template text="""stream moves on to the next talk.""" start="00:05:03.440" video="qanda-world" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:05:03.940" video="qanda-world" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yes, so here's the link.""" start="00:05:13.360" video="qanda-world" id="subtitle"]]
+[[!template text="""And so right now, all of my development goes""" start="00:05:23.240" video="qanda-world" id="subtitle"]]
+[[!template text="""into a single development branch in this""" start="00:05:26.360" video="qanda-world" id="subtitle"]]
+[[!template text="""repository. But depending on the feature that""" start="00:05:28.940" video="qanda-world" id="subtitle"]]
+[[!template text="""you're looking at, you can look at that""" start="00:05:31.500" video="qanda-world" id="subtitle"]]
+[[!template text="""particular post and that post will have a""" start="00:05:33.820" video="qanda-world" id="subtitle"]]
+[[!template text="""link to the specific files that include the""" start="00:05:37.120" video="qanda-world" id="subtitle"]]
+[[!template text="""changes.""" start="00:05:37.320" video="qanda-world" id="subtitle"]]
+[[!template text="""Okay, there's a feedback.""" start="00:06:24.236" video="qanda-world" id="subtitle"]]
+[[!template text="""Thank you for showing so many new""" start="00:06:26.520" video="qanda-world" id="subtitle"]]
+[[!template text="""possibilities with Emacs.""" start="00:06:27.500" video="qanda-world" id="subtitle"]]
+[[!template text="""I'm glad you like those possibilities.""" start="00:06:30.960" video="qanda-world" id="subtitle"]]
+[[!template text="""And hopefully, you know,""" start="00:06:32.540" video="qanda-world" id="subtitle"]]
+[[!template text="""with Emacs, the possibilities are really""" start="00:06:34.540" video="qanda-world" id="subtitle"]]
+[[!template text="""endless. So I really encourage more people to""" start="00:06:38.480" video="qanda-world" id="subtitle"]]
+[[!template text="""explore it and, you know,""" start="00:06:41.120" video="qanda-world" id="subtitle"]]
+[[!template text="""try things that people have so far only been""" start="00:06:49.280" video="qanda-world" id="subtitle"]]
+[[!template text="""using other applications for.""" start="00:06:52.160" video="qanda-world" id="subtitle"]]
+[[!template text="""The next question is coming up.""" start="00:06:59.580" video="qanda-world" id="subtitle"]]
+[[!template text="""Okay, the PDF form filling is especially""" start="00:07:07.540" video="qanda-world" id="subtitle"]]
+[[!template text="""interesting. I would love to do my taxes in""" start="00:07:10.200" video="qanda-world" id="subtitle"]]
+[[!template text="""Emacs. Yes, In most cases you should be able""" start="00:07:16.400" video="qanda-world" id="subtitle"]]
+[[!template text="""to do it unless there are a lot of JavaScript""" start="00:07:18.900" video="qanda-world" id="subtitle"]]
+[[!template text="""involved with the PDF.""" start="00:07:20.500" video="qanda-world" id="subtitle"]]
+[[!template text="""For a simple form, you should be able to do""" start="00:07:24.800" video="qanda-world" id="subtitle"]]
+[[!template text="""it.""" start="00:07:24.960" video="qanda-world" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, we have about 1 minute remaining on the""" start="00:08:19.480" video="qanda-world" id="subtitle"]]
+[[!template text="""live stream. If folks have any other""" start="00:08:21.660" video="qanda-world" id="subtitle"]]
+[[!template text="""questions, please do continue posting on the""" start="00:08:24.960" video="qanda-world" id="subtitle"]]
+[[!template text="""pad or come and join BigBlueButton with an""" start="00:08:27.540" video="qanda-world" id="subtitle"]]
+[[!template text="""ad. And thanks again, Adam,""" start="00:08:28.940" video="qanda-world" id="subtitle"]]
+[[!template text="""for a great talk and for the discussions and""" start="00:08:30.880" video="qanda-world" id="subtitle"]]
+[[!template text="""questions and answers.""" start="00:08:31.560" video="qanda-world" id="subtitle"]]
+[[!template text="""[Speaker 1]: Great, thanks.""" start="00:08:36.100" video="qanda-world" id="subtitle"]]
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20world%3A%20GNU%20Emacs%3A%20A%20World%20of%20Possibilities)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/world-before.md b/2023/info/world-before.md
new file mode 100644
index 00000000..3b34d3bb
--- /dev/null
+++ b/2023/info/world-before.md
@@ -0,0 +1,32 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 21-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+<div class="vid"><video controls preload="none" id="world-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="world-mainVideo" data="""
+00:00:00.780 Draw and scribble in GNU Emacs
+03:46.400 SVG Symbols library
+05:20.140 GNU Emacs: A multimedia editor
+08:03.367 Fill PDF form using GNU Emacs
+09:34.900 Desktop and window management in GNU Emacs
+11:10.440 Screen mirroring in GNU Emacs
+11:53.033 Swipe for Text Input in GNU Emacs
+12:25.533 Formula Editor in GNU Emacs
+12:59.433 Transliteration in Emacs
+13:09.433 Social Media client - Tumblr, Reddit
+13:40.000 Comics Builder
+13:49.567 Matching game
+13:59.567 Interactive XPath Builder in GNU Emacs
+14:10.767 Interactive JSON Builder in GNU Emacs
+14:35.233 GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter
+15:26.133 Generate C header
+16:11.640 C Rename symbols
+17:07.640 SQL (offline)
+
+"""]]<div></div>Duration: 20:31 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.opus">Download --main.opus (9.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/jFaSuNYt2FqibtcAvmVdbF">View on Toobnix</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/world-nav.md b/2023/info/world-nav.md
new file mode 100644
index 00000000..0c9d9fb1
--- /dev/null
+++ b/2023/info/world-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/scheme">Bringing joy to Scheme programming</a>
+Next by track: <a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a>
+Track: <span class="sched-track Development">Development</span>
+</div>
diff --git a/2023/info/writing-after.md b/2023/info/writing-after.md
new file mode 100644
index 00000000..1523f77d
--- /dev/null
+++ b/2023/info/writing-after.md
@@ -0,0 +1,520 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<a name="writing-mainVideo-transcript"></a>
+# Transcript
+
+
+[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-writing" id="subtitle"]]
+
+[[!template text="""Hello everyone, I'm Jeremy Friesen, pronouns he/him,""" start="00:00:00.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and today I'll be talking about""" start="00:00:04.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""how Emacs turbocharges my writing.""" start="00:00:05.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Quick intro: I've been programming since 1998""" start="00:00:08.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and blogging since 2011.""" start="00:00:11.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""In May of 2020 I switched to Emacs,""" start="00:00:14.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""having previously used a long list of different editors.""" start="00:00:16.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Curious about how Emacs impacted my writing,""" start="00:00:19.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I wrote some stuff on my personal site and""" start="00:00:23.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""found that I blogged about 95 words per day prior to Emacs,""" start="00:00:25.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and with Emacs I'm blogging about 340.""" start="00:00:30.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Now, this is not a fair comparison, many things changed.""" start="00:00:33.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""A pandemic removed 2 hours of commute every day""" start="00:00:37.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""as a big contributor.""" start="00:00:40.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Ultimately though, I've used Emacs and extended it""" start="00:00:44.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""to reduce barriers to capturing and writing and thinking,""" start="00:00:47.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and I'm always on the lookout for minor refinements""" start="00:00:50.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""that help me stay in my thinking.""" start="00:00:53.320" video="mainVideo-writing" id="subtitle"]]
+
+[[!template new="1" text="""How I got here""" start="00:00:57.120" video="mainVideo-writing" id="subtitle"]]
+
+[[!template text="""How I got here was I started in WordPress,""" start="00:00:57.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""then I moved to Jekyll, and then to Hugo,""" start="00:00:59.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and through that process I started writing in Markdown.""" start="00:01:02.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And when I was learning Emacs,""" start="00:01:05.440" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I also didn't want to learn Org Mode,""" start="00:01:07.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""it felt intimidating because it could do so many things.""" start="00:01:09.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I later learned Org Mode grows with you,""" start="00:01:12.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and that's where I'm at now.""" start="00:01:15.520" video="mainVideo-writing" id="subtitle"]]
+
+[[!template new="1" text="""Friction""" start="00:01:18.400" video="mainVideo-writing" id="subtitle"]]
+
+[[!template text="""But I didn't realize that friction""" start="00:01:18.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""between writing Markdown for my public blog""" start="00:01:20.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and then adopting Org Mode locally""" start="00:01:23.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""for writing and time tracking and things like that.""" start="00:01:25.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And also, where did I put things,""" start="00:01:28.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""because migrating the formats was just a little clunky.""" start="00:01:31.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So ultimately I spent some time thinking about the data flow""" start="00:01:35.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and where I would put things,""" start="00:01:38.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""this kind of pre-thinking,""" start="00:01:39.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""where does stuff go when it comes into and out of my brain.""" start="00:01:41.040" video="mainVideo-writing" id="subtitle"]]
+
+[[!template new="1" text="""Domains for notes""" start="00:01:45.960" video="mainVideo-writing" id="subtitle"]]
+
+[[!template text="""So I have many domains where I'll write towards.""" start="00:01:45.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""The ones for this presentation are going to be""" start="00:01:49.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""blog posts, epigraphs, glossary, and melange.""" start="00:01:51.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Melange is, I don't know where it goes,""" start="00:01:54.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""but now I do, I just throw it in melange.""" start="00:01:56.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So I began exploring Org Mode via Org Roam,""" start="00:02:01.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""but I've ultimately switched from Org Roam""" start="00:02:04.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""to the simplified Denote package.""" start="00:02:07.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I didn't use a lot of the functionality""" start="00:02:10.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and I appreciate the plain text reality of Denote.""" start="00:02:13.200" video="mainVideo-writing" id="subtitle"]]
+
+[[!template new="1" text="""Demo""" start="00:02:15.920" video="mainVideo-writing" id="subtitle"]]
+
+[[!template text="""So let's hop into the demo.""" start="00:02:15.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'm going to split my screen.""" start="00:02:18.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Over on the right is going to be""" start="00:02:19.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""where I'm going to be live typing stuff.""" start="00:02:21.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So let's get going.""" start="00:02:24.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""You'll notice I don't do a lot of screen splitting.""" start="00:02:27.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""It just makes it easier to focus.""" start="00:02:29.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So let's create a note.""" start="00:02:32.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""All right, I have bound hyper to my command key,""" start="00:02:34.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""my right command key.""" start="00:02:41.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""This opens up a whole world.""" start="00:02:42.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'm going to create a blog post""" start="00:02:43.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and we're going to name it the ever popular &quot;hello world&quot;.""" start="00:02:45.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""It's Emacs.""" start="00:02:49.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Great.""" start="00:02:50.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""We've saved it.""" start="00:02:51.520" video="mainVideo-writing" id="subtitle"]]
+
+[[!template new="1" text="""Dabbrev and hippie-expand""" start="00:02:55.440" video="mainVideo-writing" id="subtitle"]]
+
+[[!template text="""One of the things I encourage everybody to do""" start="00:02:55.440" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""is to watch Jay Dixit's presentation, Emacs for Writers.""" start="00:02:57.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""It showed me the utility of Dabbrev for quick auto correction.""" start="00:03:02.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And I also love using hippie-expand.""" start="00:03:08.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""When I watch VS coders code, it's always a little sad pants""" start="00:03:11.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""because they're thinking about coding or writing""" start="00:03:14.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""in terms of their code.""" start="00:03:17.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""But I have found as a programmer, I tend to write more tech,""" start="00:03:19.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""more like English instead of programming code.""" start="00:03:24.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So I think it's important to understand these tools""" start="00:03:27.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""that help me write better.""" start="00:03:30.720" video="mainVideo-writing" id="subtitle"]]
+
+[[!template new="1" text="""Links""" start="00:03:32.840" video="mainVideo-writing" id="subtitle"]]
+
+[[!template text="""All right, we're going to go with links.""" start="00:03:32.840" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Links are foundational for the web.""" start="00:03:34.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'm going to insert a public link,""" start="00:03:37.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""which is a role playing game that I love,""" start="00:03:41.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Worlds Without Number.""" start="00:03:43.440" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And I'm going to go ahead and describe it.""" start="00:03:45.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""A role playing game.""" start="00:03:48.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""But I don't want to always say role playing game.""" start="00:03:49.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'm going to abbreviate it.""" start="00:03:53.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So I wrote a function that will transform it.""" start="00:03:54.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And let's take a look at what that looks like on the inside.""" start="00:03:57.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""When I do this real quick, it's toggling it back and forth.""" start="00:04:00.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And I'll just keep doing that.""" start="00:04:06.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I also have the idea of public notes and private notes.""" start="00:04:10.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Public is things that's going to have a URL.""" start="00:04:13.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I met a person at a conference.""" start="00:04:15.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""He gave a talk on something that I thought was very useful.""" start="00:04:16.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I didn't write down what he talked about on his note.""" start="00:04:19.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I wrote it where it was more relevant to the topic.""" start="00:04:23.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And I can use a backlink to go find that.""" start="00:04:26.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Next up, I demonstrate the abbreviation.""" start="00:04:31.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I also have dates.""" start="00:04:34.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""This is a semantic date in HTML5.""" start="00:04:35.840" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I can just have the year.""" start="00:04:38.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I can also just have something like that date is today.""" start="00:04:41.840" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And we have date links.""" start="00:04:48.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I don't have backlinks built up for that,""" start="00:04:52.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""but I have ideas of how I go about doing it.""" start="00:04:54.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And last up, thank you Frank Herbert,""" start="00:04:56.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I want to introduce epigraphs.""" start="00:04:58.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So this is epigraph.""" start="00:05:00.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I just have that, any sufficiently, dot, dot, dot.""" start="00:05:04.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And that's my epigraph.""" start="00:05:08.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Backlinks, I mentioned that.""" start="00:05:10.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Let's go take a look at Jonathan, right?""" start="00:05:16.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""He's a Rubyist, but importantly is the backlinks.""" start="00:05:19.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""He gave a talk on, that's right, PDFs.""" start="00:05:23.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I can go look at what he spoke to""" start="00:05:27.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and I can reference that because I will remember""" start="00:05:28.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""that talk or I will remember, oh, I need to look up PDFs.""" start="00:05:31.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Oh, I have something in PDFs.""" start="00:05:36.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Again, it's about stumbling upon data in a good way.""" start="00:05:39.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So thinking of making linking easy helps me""" start="00:05:43.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""create more and more ways to find things,""" start="00:05:48.320" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""both by links, backlinks, indices, file searches, and so forth.""" start="00:05:52.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""It's all about information organization.""" start="00:05:57.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Next up is a really cool function of org capture.""" start="00:05:59.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So let's take a look here.""" start="00:06:04.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'm going to start a clock.""" start="00:06:06.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""It's running.""" start="00:06:08.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And I'm going to bring up my browser.""" start="00:06:09.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And I'm going to go ahead and capture to the content to clock.""" start="00:06:11.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And it brings up this block quote, which is lovely.""" start="00:06:19.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And boom, I'm going to save it.""" start="00:06:23.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'm going to close this.""" start="00:06:25.720" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""We're back here to my &quot;hello world&quot;.""" start="00:06:28.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And it has grabbed a block quote for this.""" start="00:06:30.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Again, it helps me gather stuff up quickly.""" start="00:06:33.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I've bound that also in my RSS feed.""" start="00:06:38.040" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""We're going to skip over macros, blocks, and the abstract.""" start="00:06:41.120" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And we're going to get into the export""" start="00:06:44.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""because this is where we can see the magic""" start="00:06:45.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""that happens because I want to take things""" start="00:06:47.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""from private to public.""" start="00:06:49.600" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So I have bound a key.""" start="00:06:51.080" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""These are my menu of things I don't want to forget.""" start="00:06:53.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I will export.""" start="00:06:55.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And here we go.""" start="00:06:56.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Here is my blog post in markdown format with Hugo shortcodes.""" start="00:06:57.840" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So let's go take a look at what that looks like.""" start="00:07:04.960" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Localhost.""" start="00:07:07.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'm not writing in Rails.""" start="00:07:09.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""&quot;Hello world&quot; right there.""" start="00:07:12.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""This is the epigraph.""" start="00:07:14.920" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And I have a mention of Worlds without Number.""" start="00:07:17.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And I have mentioned this as a abbreviation.""" start="00:07:22.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So I include the first time this text.""" start="00:07:24.800" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Here's also Jonathan.""" start="00:07:27.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""He is not a public reference thing.""" start="00:07:30.200" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Also, I have these things here.""" start="00:07:33.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And here's my captured information""" start="00:07:37.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""along with the citation link to it.""" start="00:07:39.400" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""Again, helpful to be consistent.""" start="00:07:42.600" video="mainVideo-writing" id="subtitle"]]
+
+[[!template new="1" text="""Conclusion""" start="00:07:49.160" video="mainVideo-writing" id="subtitle"]]
+
+[[!template text="""In conclusion, when I started learning Emacs,""" start="00:07:49.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I quickly shifted to vanilla Emacs and just started writing.""" start="00:07:52.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""As I wrote, when I needed to do something that I'd previously""" start="00:07:55.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""done in a text editor, I'd find an experiment with a package.""" start="00:07:59.520" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I continue that mindset.""" start="00:08:03.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""As I write, I'm attending to what I'm doing.""" start="00:08:04.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And eventually, I realize if I were to just write""" start="00:08:06.840" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""a function that does this one thing,""" start="00:08:08.880" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'd have a smoother writing experience.""" start="00:08:11.640" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""This helps me practice my craft, extend my editor,""" start="00:08:13.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""understand its capabilities, and begin exploring other things.""" start="00:08:16.360" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""The goal of this is all to minimize the distractions.""" start="00:08:20.000" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""As I'm thinking about it, I wanted to quickly add it""" start="00:08:23.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""and then move along,""" start="00:08:25.760" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""basically creating breadcrumbs for me""" start="00:08:27.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""to follow my thoughts in the future.""" start="00:08:29.560" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And one of those functions is""" start="00:08:31.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""I'd like to write an extender for my abbr,""" start="00:08:33.160" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""abbreviation export to work in Latex.""" start="00:08:36.480" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""It's like halfway there.""" start="00:08:38.680" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""So I'm looking forward to getting that done""" start="00:08:40.280" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""when I have some time and can prioritize it.""" start="00:08:42.240" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""But for now, thank you.""" start="00:08:45.440" video="mainVideo-writing" id="subtitle"]]
+[[!template text="""And I look forward to your questions.""" start="00:08:47.800" video="mainVideo-writing" id="subtitle"]]
+
+
+
+Captioner: bala
+
+<a name="writing-qanda-transcript"></a>
+# Q&A transcript (unedited)
+
+[[!template text="""[Speaker 0]: All right, I've started the recording,""" start="00:00:00.060" video="qanda-writing" id="subtitle"]]
+[[!template text="""so Sasha, you don't need to worry about this.""" start="00:00:01.400" video="qanda-writing" id="subtitle"]]
+[[!template text="""Hi Jeremy, how are you doing?""" start="00:00:03.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: I'm doing great, how about you?""" start="00:00:04.779" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: I am also doing great,""" start="00:00:08.039" video="qanda-writing" id="subtitle"]]
+[[!template text="""I am feeling replenished after this lunch""" start="00:00:09.380" video="qanda-writing" id="subtitle"]]
+[[!template text="""break and I am happy to go back for 4 more""" start="00:00:11.780" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Me too. Let me""" start="00:00:15.900" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: hours of conferences. just,""" start="00:00:14.179" video="qanda-writing" id="subtitle"]]
+[[!template text="""yeah great, Let me just put up the questions.""" start="00:00:17.303" video="qanda-writing" id="subtitle"]]
+[[!template text="""So Jeremy is going to read the questions and""" start="00:00:20.660" video="qanda-writing" id="subtitle"]]
+[[!template text="""answer them and I will be doing jazz hands in""" start="00:00:22.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""the background or provide any bits of""" start="00:00:24.380" video="qanda-writing" id="subtitle"]]
+[[!template text="""information I may, considering that Orgrim""" start="00:00:26.599" video="qanda-writing" id="subtitle"]]
+[[!template text="""has been mentioned during the presentation""" start="00:00:28.860" video="qanda-writing" id="subtitle"]]
+[[!template text="""and everyone's going to want to ask me.""" start="00:00:30.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""at... Show me? Yeah, go.""" start="00:00:35.640" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: So I'm looking I'm looking at the,""" start="00:00:35.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""do you think the line numbers for writing""" start="00:00:39.280" video="qanda-writing" id="subtitle"]]
+[[!template text="""documents is kind of a distraction,""" start="00:00:41.160" video="qanda-writing" id="subtitle"]]
+[[!template text="""especially for notes? No,""" start="00:00:43.260" video="qanda-writing" id="subtitle"]]
+[[!template text="""I do software development and that left""" start="00:00:47.860" video="qanda-writing" id="subtitle"]]
+[[!template text="""fringe is kind of invisible,""" start="00:00:51.180" video="qanda-writing" id="subtitle"]]
+[[!template text="""but I do like to use jump to line.""" start="00:00:53.680" video="qanda-writing" id="subtitle"]]
+[[!template text="""So I just bind that to control L and it's""" start="00:00:56.320" video="qanda-writing" id="subtitle"]]
+[[!template text="""helpful to just see that.""" start="00:00:59.580" video="qanda-writing" id="subtitle"]]
+[[!template text="""So no, I haven't noticed that.""" start="00:01:02.980" video="qanda-writing" id="subtitle"]]
+[[!template text="""There are other ways to jump around in Emacs,""" start="00:01:05.500" video="qanda-writing" id="subtitle"]]
+[[!template text="""but I like to have many different ways.""" start="00:01:07.540" video="qanda-writing" id="subtitle"]]
+[[!template text="""So, yeah. Then how do you manage private and""" start="00:01:11.000" video="qanda-writing" id="subtitle"]]
+[[!template text="""public data with your Zettelkasten?""" start="00:01:17.120" video="qanda-writing" id="subtitle"]]
+[[!template text="""1 of my blockers on putting my Zettelkasten""" start="00:01:20.820" video="qanda-writing" id="subtitle"]]
+[[!template text="""on the web is I don't want everything to be""" start="00:01:23.600" video="qanda-writing" id="subtitle"]]
+[[!template text="""public, especially fleeting notes.""" start="00:01:26.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""So 1 thing is I only explicitly export a file""" start="00:01:31.360" video="qanda-writing" id="subtitle"]]
+[[!template text="""to Hugo and I have that,""" start="00:01:36.560" video="qanda-writing" id="subtitle"]]
+[[!template text="""I can like, I can export this.""" start="00:01:39.380" video="qanda-writing" id="subtitle"]]
+[[!template text="""That doesn't show up very well.""" start="00:01:41.520" video="qanda-writing" id="subtitle"]]
+[[!template text="""So it's export probably export org to take on""" start="00:01:44.540" video="qanda-writing" id="subtitle"]]
+[[!template text="""rules and we'll export the buffer.""" start="00:01:50.280" video="qanda-writing" id="subtitle"]]
+[[!template text="""And then any that I referenced,""" start="00:01:53.760" video="qanda-writing" id="subtitle"]]
+[[!template text="""like these are all links,""" start="00:01:57.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""any notes that are not public will be""" start="00:01:58.660" video="qanda-writing" id="subtitle"]]
+[[!template text="""exported as the text, but there won't be a""" start="00:02:04.380" video="qanda-writing" id="subtitle"]]
+[[!template text="""link to it. So it's having the very""" start="00:02:06.480" video="qanda-writing" id="subtitle"]]
+[[!template text="""deliberate, this is going up.""" start="00:02:10.160" video="qanda-writing" id="subtitle"]]
+[[!template text="""And so I send it over into Hugo,""" start="00:02:13.040" video="qanda-writing" id="subtitle"]]
+[[!template text="""which is its own repository,""" start="00:02:15.900" video="qanda-writing" id="subtitle"]]
+[[!template text="""and either massage it there or whatnot.""" start="00:02:18.700" video="qanda-writing" id="subtitle"]]
+[[!template text="""Is that any further questions on that 1?""" start="00:02:22.800" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: I don't think so.""" start="00:02:27.980" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Is there anything special you're using from""" start="00:02:33.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""org to Hugo markdown? This looks like a""" start="00:02:36.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""really nice setup. I like to give it a try.""" start="00:02:38.960" video="qanda-writing" id="subtitle"]]
+[[!template text="""Yes, there I have a bespoke build process.""" start="00:02:43.840" video="qanda-writing" id="subtitle"]]
+[[!template text="""Having started in WordPress,""" start="00:02:48.900" video="qanda-writing" id="subtitle"]]
+[[!template text="""working through Jekyll,""" start="00:02:50.280" video="qanda-writing" id="subtitle"]]
+[[!template text="""going to Hugo, and then switching from""" start="00:02:51.460" video="qanda-writing" id="subtitle"]]
+[[!template text="""Markdown to org mode, I've backed into this""" start="00:02:54.200" video="qanda-writing" id="subtitle"]]
+[[!template text="""private public Zettelkasten,""" start="00:02:57.740" video="qanda-writing" id="subtitle"]]
+[[!template text="""which is really nice. And I have added quite""" start="00:03:00.140" video="qanda-writing" id="subtitle"]]
+[[!template text="""a bit of code. There's my dog.""" start="00:03:04.840" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: blogging.""" start="00:03:15.520" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: In my So I have, how do I export like side""" start="00:03:10.640" video="qanda-writing" id="subtitle"]]
+[[!template text="""notes because I want I have marginalia""" start="00:03:20.720" video="qanda-writing" id="subtitle"]]
+[[!template text="""instead of like the footnotes,""" start="00:03:23.200" video="qanda-writing" id="subtitle"]]
+[[!template text="""but I still use org mode footnotes.""" start="00:03:24.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""And so I've got a bunch of these things and""" start="00:03:27.520" video="qanda-writing" id="subtitle"]]
+[[!template text="""this is all available up on GitHub And I'll""" start="00:03:29.700" video="qanda-writing" id="subtitle"]]
+[[!template text="""provide a link in the document.""" start="00:03:32.800" video="qanda-writing" id="subtitle"]]
+[[!template text="""Yeah, so there's quite a bit of making the""" start="00:03:36.740" video="qanda-writing" id="subtitle"]]
+[[!template text="""export work how I want it.""" start="00:03:42.280" video="qanda-writing" id="subtitle"]]
+[[!template text="""And I've been kind of fiddling with also""" start="00:03:45.040" video="qanda-writing" id="subtitle"]]
+[[!template text="""improving like LaTeX or PDF export.""" start="00:03:48.840" video="qanda-writing" id="subtitle"]]
+[[!template text="""So yeah, I have a long running to do item to""" start="00:03:54.720" video="qanda-writing" id="subtitle"]]
+[[!template text="""fully lay out my bespoke build process.""" start="00:03:59.480" video="qanda-writing" id="subtitle"]]
+[[!template text="""Because once it gets to Hugo,""" start="00:04:02.920" video="qanda-writing" id="subtitle"]]
+[[!template text="""there's also additional work that I do to""" start="00:04:04.960" video="qanda-writing" id="subtitle"]]
+[[!template text="""compile what is kind of a personal,""" start="00:04:07.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""like a digital garden-ish,""" start="00:04:12.340" video="qanda-writing" id="subtitle"]]
+[[!template text="""it's really a blog focused 1.""" start="00:04:15.160" video="qanda-writing" id="subtitle"]]
+[[!template text="""So yeah, it's at Jeremy F on GitHub at dot""" start="00:04:18.160" video="qanda-writing" id="subtitle"]]
+[[!template text="""Emacs. And you'll be looking for JF""" start="00:04:28.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""blogging.l that has some of this.""" start="00:04:33.200" video="qanda-writing" id="subtitle"]]
+[[!template text="""Also jforgmode.l will have some of that.""" start="00:04:37.360" video="qanda-writing" id="subtitle"]]
+[[!template text="""Yeah, I wanna circle back to that,""" start="00:04:45.400" video="qanda-writing" id="subtitle"]]
+[[!template text="""anything to prevent private links from""" start="00:04:49.540" video="qanda-writing" id="subtitle"]]
+[[!template text="""getting accidentally being made publicly""" start="00:04:51.560" video="qanda-writing" id="subtitle"]]
+[[!template text="""accessible. Yes. So previous to using denote,""" start="00:04:54.560" video="qanda-writing" id="subtitle"]]
+[[!template text="""I also used org-roam. So I have this idea of""" start="00:05:02.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""a node in org-roam has roam refs.""" start="00:05:06.480" video="qanda-writing" id="subtitle"]]
+[[!template text="""And org-roam is much more robust about that.""" start="00:05:13.360" video="qanda-writing" id="subtitle"]]
+[[!template text="""So anytime you mention a ref,""" start="00:05:15.660" video="qanda-writing" id="subtitle"]]
+[[!template text="""it will count it as a backlink.""" start="00:05:18.740" video="qanda-writing" id="subtitle"]]
+[[!template text="""So for example, if my node was my blog,""" start="00:05:20.820" video="qanda-writing" id="subtitle"]]
+[[!template text="""take on rules, anytime,""" start="00:05:23.860" video="qanda-writing" id="subtitle"]]
+[[!template text="""anywhere in my org Rome repository,""" start="00:05:26.000" video="qanda-writing" id="subtitle"]]
+[[!template text="""I mentioned takeonrules.com,""" start="00:05:30.700" video="qanda-writing" id="subtitle"]]
+[[!template text="""it would treat it as a backlink.""" start="00:05:33.280" video="qanda-writing" id="subtitle"]]
+[[!template text="""So from that Rome refs,""" start="00:05:35.740" video="qanda-writing" id="subtitle"]]
+[[!template text="""I have a, I will interrogate,""" start="00:05:39.780" video="qanda-writing" id="subtitle"]]
+[[!template text="""and this is not the function for I will look""" start="00:05:45.720" video="qanda-writing" id="subtitle"]]
+[[!template text="""at the node to see does it have a Rome ref""" start="00:05:47.800" video="qanda-writing" id="subtitle"]]
+[[!template text="""and if it does I will treat it as a public""" start="00:05:51.040" video="qanda-writing" id="subtitle"]]
+[[!template text="""link. So I don't I haven't bled out any""" start="00:05:53.760" video="qanda-writing" id="subtitle"]]
+[[!template text="""private information because again going back""" start="00:05:59.060" video="qanda-writing" id="subtitle"]]
+[[!template text="""to I only publish a document and the document""" start="00:06:01.620" video="qanda-writing" id="subtitle"]]
+[[!template text="""I'm explicitly doing so and then my process""" start="00:06:06.340" video="qanda-writing" id="subtitle"]]
+[[!template text="""filters out any links that do not have public""" start="00:06:09.220" video="qanda-writing" id="subtitle"]]
+[[!template text="""URLs. It will just dump it in there as maybe""" start="00:06:12.720" video="qanda-writing" id="subtitle"]]
+[[!template text="""a span with a ref class of it so that I can""" start="00:06:17.140" video="qanda-writing" id="subtitle"]]
+[[!template text="""kind of know that that came from there.""" start="00:06:20.640" video="qanda-writing" id="subtitle"]]
+[[!template text="""Yes, So the font I am using is,""" start="00:06:29.600" video="qanda-writing" id="subtitle"]]
+[[!template text="""so this is another font.""" start="00:06:36.820" video="qanda-writing" id="subtitle"]]
+[[!template text="""What font were you using in EWW?""" start="00:06:38.620" video="qanda-writing" id="subtitle"]]
+[[!template text="""I think I'm using IOS Becca and ET Bembo.""" start="00:06:42.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Okay, show me your EWW.""" start="00:06:51.700" video="qanda-writing" id="subtitle"]]
+[[!template text="""If we are doing full ricing setup,""" start="00:06:53.560" video="qanda-writing" id="subtitle"]]
+[[!template text="""I can recognize Yosefka just by looking at""" start="00:06:55.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""it.""" start="00:06:58.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: So let's... Yeah, so yeah,""" start="00:06:50.640" video="qanda-writing" id="subtitle"]]
+[[!template text="""ET Bembo, I'm using these 2 fonts as kind of""" start="00:07:01.300" video="qanda-writing" id="subtitle"]]
+[[!template text="""my anchor. So the variable pitch is ETBembo.""" start="00:07:06.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""My blog started off with a Tufta style CSS""" start="00:07:10.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""and I really pared it down and got rid of any""" start="00:07:14.100" video="qanda-writing" id="subtitle"]]
+[[!template text="""of the additional fonts because they can be""" start="00:07:16.360" video="qanda-writing" id="subtitle"]]
+[[!template text="""used as trackers. And I'm like,""" start="00:07:19.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""nope, you decide what font you want for your""" start="00:07:21.580" video="qanda-writing" id="subtitle"]]
+[[!template text="""browser. I don't need to tell you what looks""" start="00:07:24.020" video="qanda-writing" id="subtitle"]]
+[[!template text="""good for you. Yeah, so the story of Take On""" start="00:07:26.420" video="qanda-writing" id="subtitle"]]
+[[!template text="""Rules, I have to thank my partner and lovely""" start="00:07:33.680" video="qanda-writing" id="subtitle"]]
+[[!template text="""wife for that. She kind of nudged me to do""" start="00:07:37.480" video="qanda-writing" id="subtitle"]]
+[[!template text="""some blogging, and we spent some time""" start="00:07:41.180" video="qanda-writing" id="subtitle"]]
+[[!template text="""thinking about it. And originally,""" start="00:07:43.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""it started off as writing about rules for""" start="00:07:45.160" video="qanda-writing" id="subtitle"]]
+[[!template text="""role-playing games or tabletop games.""" start="00:07:48.700" video="qanda-writing" id="subtitle"]]
+[[!template text="""And it has extended far beyond that.""" start="00:07:51.820" video="qanda-writing" id="subtitle"]]
+[[!template text="""The blog, as I've shifted,""" start="00:07:54.960" video="qanda-writing" id="subtitle"]]
+[[!template text="""as I think I mentioned in the presentation,""" start="00:07:56.920" video="qanda-writing" id="subtitle"]]
+[[!template text="""as I've shifted towards an everything and""" start="00:07:59.060" video="qanda-writing" id="subtitle"]]
+[[!template text="""nothing approach, the blog is anything I want""" start="00:08:01.640" video="qanda-writing" id="subtitle"]]
+[[!template text="""to write about anymore.""" start="00:08:05.180" video="qanda-writing" id="subtitle"]]
+[[!template text="""There's haikus up there with some regularity.""" start="00:08:06.980" video="qanda-writing" id="subtitle"]]
+[[!template text="""So the name is now a relic of a past.""" start="00:08:10.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""So yeah, the thing and nothing is,""" start="00:08:18.340" video="qanda-writing" id="subtitle"]]
+[[!template text="""and I put that in the about on my blog.""" start="00:08:22.360" video="qanda-writing" id="subtitle"]]
+[[!template text="""So it's, I highly encourage like,""" start="00:08:25.640" video="qanda-writing" id="subtitle"]]
+[[!template text="""I feel great. Once I like said,""" start="00:08:29.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""oh, I don't have to write this towards a""" start="00:08:34.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""topical blog post or like what the topic is,""" start="00:08:36.740" video="qanda-writing" id="subtitle"]]
+[[!template text="""it freed it up. And I know that it comes at a""" start="00:08:40.380" video="qanda-writing" id="subtitle"]]
+[[!template text="""potential compromise because it's very much""" start="00:08:44.800" video="qanda-writing" id="subtitle"]]
+[[!template text="""me being a voice up there instead of""" start="00:08:47.500" video="qanda-writing" id="subtitle"]]
+[[!template text="""something that is curated and filtered""" start="00:08:51.960" video="qanda-writing" id="subtitle"]]
+[[!template text="""through a specific channel like I could have""" start="00:08:53.760" video="qanda-writing" id="subtitle"]]
+[[!template text="""a technical blog but I decided I'm just gonna""" start="00:08:56.060" video="qanda-writing" id="subtitle"]]
+[[!template text="""tag it as programming or emacs and let you""" start="00:08:59.340" video="qanda-writing" id="subtitle"]]
+[[!template text="""find it and you can subscribe to the rss""" start="00:09:02.420" video="qanda-writing" id="subtitle"]]
+[[!template text="""feeds of each tag that you find applicable""" start="00:09:04.920" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: right thank you so we are we are at the last""" start="00:09:10.120" video="qanda-writing" id="subtitle"]]
+[[!template text="""question on the pad but I see that some""" start="00:09:13.840" video="qanda-writing" id="subtitle"]]
+[[!template text="""people have joined us on the blue button.""" start="00:09:16.100" video="qanda-writing" id="subtitle"]]
+[[!template text="""So, hi everyone! We have about 6 minutes""" start="00:09:18.480" video="qanda-writing" id="subtitle"]]
+[[!template text="""until we need to go to the next talk,""" start="00:09:22.420" video="qanda-writing" id="subtitle"]]
+[[!template text="""but if anyone has a question on the blue""" start="00:09:24.220" video="qanda-writing" id="subtitle"]]
+[[!template text="""button, I'm thinking about James who's joined""" start="00:09:26.460" video="qanda-writing" id="subtitle"]]
+[[!template text="""us and who was kind enough to drop a thank""" start="00:09:28.780" video="qanda-writing" id="subtitle"]]
+[[!template text="""you line on the blue button.""" start="00:09:32.780" video="qanda-writing" id="subtitle"]]
+[[!template text="""Do you want to unmute yourself and ask a""" start="00:09:33.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""question maybe? I'm not putting pressure by""" start="00:09:35.460" video="qanda-writing" id="subtitle"]]
+[[!template text="""the way, I don't feel like you need to but it""" start="00:09:39.520" video="qanda-writing" id="subtitle"]]
+[[!template text="""just... I speak all the time otherwise I'm""" start="00:09:41.870" video="qanda-writing" id="subtitle"]]
+[[!template text="""very happy to spend time with our speakers""" start="00:09:44.060" video="qanda-writing" id="subtitle"]]
+[[!template text="""you know but you know EmacsConf it's about,""" start="00:09:45.720" video="qanda-writing" id="subtitle"]]
+[[!template text="""as Sasha told you during the intro,""" start="00:09:49.400" video="qanda-writing" id="subtitle"]]
+[[!template text="""it's about making people take things,""" start="00:09:51.540" video="qanda-writing" id="subtitle"]]
+[[!template text="""brilliant things out of their mind and put""" start="00:09:54.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""them outside in the public.""" start="00:09:56.100" video="qanda-writing" id="subtitle"]]
+[[!template text="""And for us, you know, we get to see the talk""" start="00:09:57.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""evolve, we talk with people.""" start="00:10:00.660" video="qanda-writing" id="subtitle"]]
+[[!template text="""So for us we are already quite cognizant of""" start="00:10:01.720" video="qanda-writing" id="subtitle"]]
+[[!template text="""the topic and the point is not for us hosts""" start="00:10:03.840" video="qanda-writing" id="subtitle"]]
+[[!template text="""to ask questions, it's mostly for you to ask""" start="00:10:06.360" video="qanda-writing" id="subtitle"]]
+[[!template text="""questions and then we worry about all the""" start="00:10:09.780" video="qanda-writing" id="subtitle"]]
+[[!template text="""fancy stuff in the background.""" start="00:10:11.580" video="qanda-writing" id="subtitle"]]
+[[!template text="""Otherwise you damn well know I will ask""" start="00:10:13.900" video="qanda-writing" id="subtitle"]]
+[[!template text="""questions about org-roam,""" start="00:10:16.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""about links, and nodes in general,""" start="00:10:18.900" video="qanda-writing" id="subtitle"]]
+[[!template text="""because that's my bread and butter.""" start="00:10:20.460" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, I should add, like,""" start="00:10:24.720" video="qanda-writing" id="subtitle"]]
+[[!template text="""the process of migrating the data from a""" start="00:10:27.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""WordPress export to markdown to org mode by""" start="00:10:31.820" video="qanda-writing" id="subtitle"]]
+[[!template text="""way of Pandoc was, it was really insightful""" start="00:10:35.220" video="qanda-writing" id="subtitle"]]
+[[!template text="""to help me understand how I want the data to""" start="00:10:39.720" video="qanda-writing" id="subtitle"]]
+[[!template text="""flow and how I could create a repository for""" start="00:10:42.900" video="qanda-writing" id="subtitle"]]
+[[!template text="""me of information and 1 that I could then""" start="00:10:47.580" video="qanda-writing" id="subtitle"]]
+[[!template text="""send out into the world,""" start="00:10:50.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""the public information,""" start="00:10:52.540" video="qanda-writing" id="subtitle"]]
+[[!template text="""while not having to worry about the private""" start="00:10:54.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""things that I might want to keep.""" start="00:10:58.460" video="qanda-writing" id="subtitle"]]
+[[!template text="""So it was that process of just working""" start="00:11:01.620" video="qanda-writing" id="subtitle"]]
+[[!template text="""through it to reflect on how I'm writing and""" start="00:11:04.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""what I started using writing for.""" start="00:11:08.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""I think Richard Feynman said,""" start="00:11:12.040" video="qanda-writing" id="subtitle"]]
+[[!template text="""no, writing is my thinking.""" start="00:11:14.040" video="qanda-writing" id="subtitle"]]
+[[!template text="""What I wrote is thinking.""" start="00:11:15.680" video="qanda-writing" id="subtitle"]]
+[[!template text="""So it has helped to really frame that.""" start="00:11:18.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Yeah, I mean, there's an interesting""" start="00:11:22.800" video="qanda-writing" id="subtitle"]]
+[[!template text="""ambivalent relationship because it feels like""" start="00:11:27.200" video="qanda-writing" id="subtitle"]]
+[[!template text="""writing helps thinking and thinking helps""" start="00:11:29.220" video="qanda-writing" id="subtitle"]]
+[[!template text="""writing in a way and nowhere have I""" start="00:11:31.800" video="qanda-writing" id="subtitle"]]
+[[!template text="""personally been more aware of this than when""" start="00:11:35.340" video="qanda-writing" id="subtitle"]]
+[[!template text="""coming up with networks of notes because it""" start="00:11:38.000" video="qanda-writing" id="subtitle"]]
+[[!template text="""really I mean you use whichever word you want""" start="00:11:41.000" video="qanda-writing" id="subtitle"]]
+[[!template text="""you know a second brain a collection of notes""" start="00:11:43.860" video="qanda-writing" id="subtitle"]]
+[[!template text="""a slip box a repository of notes whichever""" start="00:11:45.900" video="qanda-writing" id="subtitle"]]
+[[!template text="""the tool you use the point at the end is to""" start="00:11:48.860" video="qanda-writing" id="subtitle"]]
+[[!template text="""resonate with you. It's kind of like""" start="00:11:52.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""extending those moments of consciousness that""" start="00:11:54.000" video="qanda-writing" id="subtitle"]]
+[[!template text="""you have when you take your notes,""" start="00:11:57.280" video="qanda-writing" id="subtitle"]]
+[[!template text="""and you make the entire gradient available.""" start="00:11:59.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""Sorry, I heard Sasha whispering in my ear""" start="00:12:04.260" video="qanda-writing" id="subtitle"]]
+[[!template text="""sometimes. It's pretty pleasant.""" start="00:12:06.380" video="qanda-writing" id="subtitle"]]
+[[!template text="""It's really shocking.""" start="00:12:09.520" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, Aaron, you had a question.""" start="00:12:12.660" video="qanda-writing" id="subtitle"]]
+[[!template text="""Do I use denote just for my blogs or do I use""" start="00:12:15.040" video="qanda-writing" id="subtitle"]]
+[[!template text="""it for other purposes?""" start="00:12:17.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""I use denote for all of my note taking and""" start="00:12:19.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""almost, I think it's exclusively org mode""" start="00:12:25.520" video="qanda-writing" id="subtitle"]]
+[[!template text="""that I, that I use it in.""" start="00:12:28.920" video="qanda-writing" id="subtitle"]]
+[[!template text="""But what I really appreciated in the""" start="00:12:30.600" video="qanda-writing" id="subtitle"]]
+[[!template text="""consideration that Proc put forward was the""" start="00:12:33.400" video="qanda-writing" id="subtitle"]]
+[[!template text="""file name encodes the information that's""" start="00:12:37.500" video="qanda-writing" id="subtitle"]]
+[[!template text="""relevant. So it has helped me be able to""" start="00:12:40.940" video="qanda-writing" id="subtitle"]]
+[[!template text="""query by using things like ripgrep,""" start="00:12:46.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""well not ripgrep, tree or I forget any more""" start="00:12:49.220" video="qanda-writing" id="subtitle"]]
+[[!template text="""what I use. But having that the file encodes""" start="00:12:54.480" video="qanda-writing" id="subtitle"]]
+[[!template text="""useful information. And it's so much more""" start="00:13:00.300" video="qanda-writing" id="subtitle"]]
+[[!template text="""relevant when I look at having worked at a""" start="00:13:03.820" video="qanda-writing" id="subtitle"]]
+[[!template text="""university that rolled out Google Drive to""" start="00:13:06.960" video="qanda-writing" id="subtitle"]]
+[[!template text="""everyone without any guidance on how to""" start="00:13:10.520" video="qanda-writing" id="subtitle"]]
+[[!template text="""organize stuff. And I worked at a library and""" start="00:13:12.840" video="qanda-writing" id="subtitle"]]
+[[!template text="""it was just a nightmare watching things show""" start="00:13:16.120" video="qanda-writing" id="subtitle"]]
+[[!template text="""up where you could never find it again.""" start="00:13:19.540" video="qanda-writing" id="subtitle"]]
+[[!template text="""So, file name, the file name having the date,""" start="00:13:23.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""having the title and having tags just made so""" start="00:13:28.380" video="qanda-writing" id="subtitle"]]
+[[!template text="""much sense to be findable.""" start="00:13:33.280" video="qanda-writing" id="subtitle"]]
+[[!template text="""And yeah, I really do just use org.""" start="00:13:36.820" video="qanda-writing" id="subtitle"]]
+[[!template text="""But if I am going to make txt files or other""" start="00:13:41.740" video="qanda-writing" id="subtitle"]]
+[[!template text="""files, I have started adopting that structure""" start="00:13:47.220" video="qanda-writing" id="subtitle"]]
+[[!template text="""and format.""" start="00:13:52.120" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Right. Well, Jeremy, we have about 1 minute""" start="00:13:56.840" video="qanda-writing" id="subtitle"]]
+[[!template text="""and 30 seconds left until we go on to the""" start="00:14:00.900" video="qanda-writing" id="subtitle"]]
+[[!template text="""next talk. Do you have any final words""" start="00:14:03.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""regarding your presentation or maybe where""" start="00:14:05.140" video="qanda-writing" id="subtitle"]]
+[[!template text="""people can find you? I know you've already""" start="00:14:06.740" video="qanda-writing" id="subtitle"]]
+[[!template text="""mentioned this but...""" start="00:14:08.400" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: Yeah, take on rules. I'm also on dice camp""" start="00:14:09.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""dice.campmastodon at take on rules and I've""" start="00:14:13.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""thought about emacs.h but we federate well So""" start="00:14:18.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""I appreciate that. And I can stay on and""" start="00:14:22.340" video="qanda-writing" id="subtitle"]]
+[[!template text="""answer any further questions if folks have""" start="00:14:27.560" video="qanda-writing" id="subtitle"]]
+[[!template text="""it.""" start="00:14:29.680" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Sure. So sorry. Sorry,""" start="00:14:31.420" video="qanda-writing" id="subtitle"]]
+[[!template text="""I confused myself with the buttons talking to""" start="00:14:34.860" video="qanda-writing" id="subtitle"]]
+[[!template text="""production and all. Well then,""" start="00:14:36.820" video="qanda-writing" id="subtitle"]]
+[[!template text="""what I'm going to do is that the stream is""" start="00:14:38.960" video="qanda-writing" id="subtitle"]]
+[[!template text="""going to move on to the next talk in about 50""" start="00:14:41.260" video="qanda-writing" id="subtitle"]]
+[[!template text="""seconds. If people want to join and ask any""" start="00:14:43.740" video="qanda-writing" id="subtitle"]]
+[[!template text="""questions, feel free to join on the blue""" start="00:14:46.160" video="qanda-writing" id="subtitle"]]
+[[!template text="""button. The link is on the talk page or on""" start="00:14:49.160" video="qanda-writing" id="subtitle"]]
+[[!template text="""IRC. And feel free to hang out as long as you""" start="00:14:51.380" video="qanda-writing" id="subtitle"]]
+[[!template text="""want to ask as many questions as you want to""" start="00:14:54.480" video="qanda-writing" id="subtitle"]]
+[[!template text="""Jeremy. We are recording all of this and""" start="00:14:56.160" video="qanda-writing" id="subtitle"]]
+[[!template text="""we'll be publishing this later on once again.""" start="00:14:58.180" video="qanda-writing" id="subtitle"]]
+[[!template text="""And all that's left for me to do is to thank""" start="00:15:01.120" video="qanda-writing" id="subtitle"]]
+[[!template text="""you so much, Jeremy, for your presentation""" start="00:15:03.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""and your answers. And I will see you another""" start="00:15:05.740" video="qanda-writing" id="subtitle"]]
+[[!template text="""time.""" start="00:15:08.200" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: So yeah, plasma strike.""" start="00:15:12.700" video="qanda-writing" id="subtitle"]]
+[[!template text="""I'm not able to grant speaking powers.""" start="00:15:15.560" video="qanda-writing" id="subtitle"]]
+[[!template text="""So if you wanted to type up something""" start="00:15:20.340" video="qanda-writing" id="subtitle"]]
+[[!template text="""question-wise.""" start="00:15:22.160" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Oh, okay. I'll manage this in the background.""" start="00:15:24.000" video="qanda-writing" id="subtitle"]]
+[[!template text="""So we're moving on to the next talk.""" start="00:15:26.000" video="qanda-writing" id="subtitle"]]
+[[!template text="""We'll figure out the things about VBB,""" start="00:15:28.500" video="qanda-writing" id="subtitle"]]
+[[!template text="""But in the meantime, enjoy the next talk.""" start="00:15:30.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""Bye. All right, Jeremy.""" start="00:15:34.140" video="qanda-writing" id="subtitle"]]
+[[!template text="""We are now on the next talk.""" start="00:15:35.460" video="qanda-writing" id="subtitle"]]
+[[!template text="""Sorry about having to mention multiple things""" start="00:15:37.080" video="qanda-writing" id="subtitle"]]
+[[!template text="""at the same time. Speaking rights.""" start="00:15:39.240" video="qanda-writing" id="subtitle"]]
+[[!template text="""I will try fixing this in the background.""" start="00:15:42.500" video="qanda-writing" id="subtitle"]]
+[[!template text="""I need to get moving for the next talk,""" start="00:15:44.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""but I'll do it in the background and we'll""" start="00:15:46.120" video="qanda-writing" id="subtitle"]]
+[[!template text="""let you know as soon as it's ready.""" start="00:15:48.040" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 1]: We're doing great. Okay.""" start="00:15:40.440" video="qanda-writing" id="subtitle"]]
+[[!template text="""[Speaker 0]: Alright, bye bye Jeremy.""" start="00:15:51.220" video="qanda-writing" id="subtitle"]]
+
+Questions or comments? Please e-mail [jeremy@jeremyfriesen.com](mailto:jeremy@jeremyfriesen.com?subject=Comment%20for%20EmacsConf%202023%20writing%3A%20Emacs%20turbo-charges%20my%20writing)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/writing-before.md b/2023/info/writing-before.md
new file mode 100644
index 00000000..e46b512f
--- /dev/null
+++ b/2023/info/writing-before.md
@@ -0,0 +1,28 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 9-min talk; Q&A: BigBlueButton conference room
+Status: Q&A to be extracted from the room recordings
+
+
+
+
+
+# Talk
+
+<div class="vid"><video controls preload="none" id="writing-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="writing-mainVideo" data="""
+00:00.000 Intro
+00:57.120 How I got here
+01:18.400 Friction
+01:45.960 Domains for notes
+02:15.920 Demo
+02:55.440 Dabbrev and hippie-expand
+03:32.840 Links
+07:49.160 Conclusion
+
+"""]]<div></div>Duration: 08:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.opus">Download --main.opus (5.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/ke3UCJaJSLyQr7Emv8VxST">View on Toobnix</a></li></ul></div></div>
+
+# Q&A
+
+<div class="vid"><video controls preload="none" id="writing-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="writing-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus"></audio></div><div></div>Duration: 15:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus">Download --answers.opus (9.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm">Download --answers.webm (35MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/writing-nav.md b/2023/info/writing-nav.md
new file mode 100644
index 00000000..fa3bdae7
--- /dev/null
+++ b/2023/info/writing-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by track: <a href="/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a>
+Next by track: <a href="/2023/talks/nabokov">Why Nabokov would use Org-Mode if he were writing today</a>
+Track: <span class="sched-track General">General</span>
+</div>
diff --git a/2023/organizers-notebook.md b/2023/organizers-notebook.md
new file mode 100644
index 00000000..8fe6916b
--- /dev/null
+++ b/2023/organizers-notebook.md
@@ -0,0 +1,2350 @@
+<!-- organizers-notebook.md is exported from organizers-notebook/index.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2023/organizers-notebook/index.org](/2023/organizers-notebook/index.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/).
+
+Help wanted:
+
+- [Find volunteers for audio processing (normalization, noise reduction) and document the process](#audio)
+- [Video editing: the eval talk is a little bit out of sync](#eval-video-sync) (by 2023-11-15 Wed)
+
+Help wanted:
+
+- [Figure out a better way to handle 480p stream](#lowres)
+
+
+# Table of Contents
+
+- [Timeline](#timeline)
+ - [Dry run](#dry-run)
+ - [Dry run with more volunteers](#dry-run-2)
+- [About this document](#about-this-doc)
+- [Communications plan](#comms)
+ - [Next emacsconf-org update](#emacsconf-org-2023-10-21)
+- [Good/better/best](#good-better-best)
+- [Phases](#phases)
+ - [Draft CFP](#cfp)
+ - [Distribute CFP](#distrib-cfp)
+ - [Process submissions](#submission-process)
+ - [Draft schedule for EmacsConf 2023](#draft-schedule)
+ - [Prepare for the conference](#status)
+ - [Get ready for production](#go-live):preflight:
+ - [Harvest cool stuff](#org45dfd5e)
+ - [Make things easier for next year](#org3dd5255)
+ - [Volunteers](#coordinate-volunteers)
+ - [Lessons learned](#org5fa50a9)
+- [Progress reports](#progress)
+- [E-mail templates](#templates)
+ - [Review](#review)
+ - [Acceptance](#acceptance)
+- [Archive](#archive)
+ - [Check with hyperdrive and core if they&rsquo;re willing to swap](#hyperdrive-core):decision:
+ - [Test the idea of three tracks and more aligned times](#three-tracks):decision:
+
+
+<a id="timeline"></a>
+
+# Timeline
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">CFP</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-06-26 Mon]</span></span></td>
+</tr>
+
+
+<tr>
+<td class="org-left">CFP deadline</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-09-14 Thu]</span></span></td>
+</tr>
+
+
+<tr>
+<td class="org-left">Speaker notifications</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-09-25 Mon]</span></span></td>
+</tr>
+
+
+<tr>
+<td class="org-left"><b>Publish schedule</b></td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-10-25 Wed]</span></span></td>
+</tr>
+
+
+<tr>
+<td class="org-left">Video submission deadline</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-11-04 Sat]</span></span></td>
+</tr>
+
+
+<tr>
+<td class="org-left">EmacsConf</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-12-02 Sat]</span></span>, <span class="timestamp-wrapper"><span class="timestamp">[2023-12-03 Sun]</span></span></td>
+</tr>
+</tbody>
+</table>
+
+Last year, these were the actual dates:
+
+- July 17: CFP sent
+- Sept 18: Original CFP deadline
+- Sept 30: CFP closed after extension
+- Oct 1: acceptances sent
+
+
+<a id="dry-run"></a>
+
+## TODO Dry run
+
+
+<a id="dry-run-2"></a>
+
+## TODO Dry run with more volunteers
+
+
+<a id="about-this-doc"></a>
+
+# About this document
+
+Tags:
+
+- `conforg`: Requires access to private conf.org repository
+
+
+<a id="comms"></a>
+
+# Communications plan
+
+Objectives:
+
+- keep everyone in the loop without them feeling like they&rsquo;re overloaded
+
+Speakers:
+
+- [X] Send all speakers backstage access and upload instructions
+- [ ] Send all speakers check-in instructions
+
+Volunteers:
+
+- [X] Send captioning volunteers the backstage info
+- [ ] Send past captioning volunteers an invitation to participate - ask when there&rsquo;s a lot of load
+- [ ] Ask for help with audio processing
+
+
+<a id="emacsconf-org-2023-10-21"></a>
+
+## Next emacsconf-org update
+
+backstage
+
+volunteers
+
+help wanted:
+
+audio processing
+
+intros
+
+
+<a id="good-better-best"></a>
+
+# Good/better/best
+
+This table makes it easier to move the slider depending on who wants
+to volunteer and how much we can get done. At some point, we&rsquo;ll figure
+out how to track our current status so we know what we need to
+scramble to do in order to get the conference off the ground. **bold**
+is our current goal. Feel free to volunteer for anything that
+interests you!
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Good</td>
+<td class="org-left">Better</td>
+<td class="org-left">Best</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Autopilot</td>
+<td class="org-left">offset TRAMP timers</td>
+<td class="org-left">Crontab</td>
+<td class="org-left">Can be toggled</td>
+</tr>
+
+
+<tr>
+<td class="org-left">480p</td>
+<td class="org-left">Someone&rsquo;s computer</td>
+<td class="org-left">Separate node</td>
+<td class="org-left">Ansible setup</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Watch instructions</td>
+<td class="org-left">Embed</td>
+<td class="org-left">Reminder to prefer mpv</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Audio</td>
+<td class="org-left">As is</td>
+<td class="org-left">Normalized</td>
+<td class="org-left">Noise reduction</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Intros</td>
+<td class="org-left">Standard, recorded</td>
+<td class="org-left">Reviewed by speakers in backstage</td>
+<td class="org-left">More details/context</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="phases"></a>
+
+# Phases
+
+
+<a id="cfp"></a>
+
+## DONE Draft CFP
+
+
+### How to mark pages as drafts
+
+Put inside double square brackets: `!template id=pagedraft`
+
+
+### Considerations
+
+We could see if there are parts of the CFP that we can remove or
+postpone. Here are some thoughts:
+
+- We might not need the 10+20+40 structure in the proposal. We did
+ that before because people tend to propose longer talks, and we had
+ to do lots of e-mail coordination in order to squeeze everything
+ into one track. If we&rsquo;re doing multiple streams, there&rsquo;s less time
+ pressure, so we might not need to confuse people with those
+ requirements. I think it would still be good to nudge people towards
+ 20 minutes for their prerecorded presentations (separate time for
+ Q&A) instead of 40 minutes, because it&rsquo;s good for people&rsquo;s attention
+ spans. As an incentive to consider a 5-10 minute talk, we can say
+ that 5-10 minute videos can be played extra times during the
+ conference to fill gaps.
+ - Choices:
+ - Keep the 10+20+40 structure so that people who want to propose
+ longer talks are nudged to think about shorter versions
+ - Strongly nudge people towards 20-minute talks, with repeats as
+ the incentive for shorter talks and extra coordination/waiting
+ needed for longer talks. People propose just the talk length
+ they want (and can optionally propose other talk lengths if they
+ want to be considered for them).
+- We added emergency contact info, public contact info, pronouns, and
+ introduction to the submission form because we ended up going back
+ and forth with people in previous years, and sometimes we had
+ incomplete info and were panicking about how to reach people during
+ the conference. We could drop this from the submission form and do a
+ separate speaker information form.
+ - Choices:
+ - Talk submission, then speaker information form: less
+ intimidating for speakers
+ - Everything in one: easier for organizers
+
+
+### Previous years
+
+- Ask for public e-mail or contact information, IRC handle in CFP
+ - Added to submit page.
+- Be even more stringent about the 10/20/40-min splits. A lot of
+ speakers still default to the 20- or 40-min formats without
+ providing us shorter formats, and that puts strain on our schedule
+ and requires us to use a different template for the notification
+ (which can be confusing). We need to stress that not respecting the
+ format makes it harder not only for the organizers, but also for the
+ speakers themselves (since they will have to rethink their
+ presentation). Maybe we can have an e-mail template for a quick
+ reply that says something like &ldquo;Just in case we need to squeeze
+ talks into shorter times, could you please also propose an outline
+ for a possible 10-minute talk that could get people interested in
+ your topic and point them to where they can find out more?&rdquo;
+ - sachac: I&rsquo;d love to experiment with rolling acceptances. If people
+ have a good 10-20 minute version of their talk and we want to
+ accept it in the program, it would be nice to be able to say yes
+ early so that they can start working on it. We can work with any
+ duplication of content in later proposals.
+- Two people is the sweet number of reviewers to have for the
+ proposals before sending the notifications, and there’d be
+ diminishing returns with more. Two is enough to release the pressure
+ on SCHED, verify the metadata (esp. speaker availability), and
+ suggest a different ordering where appropriate. It can take a long
+ time to comb through the proposals (roughly 10 proposals per hour),
+ and whilst it’d be difficult to justify more in-depth reviewers,
+ other orgas can do a shallow-pass to catch red-flags or discuss the
+ submissions as they come in. Other organizers can always chime in on
+ topics they particularly care about so that their encouraging
+ comments or suggestions can be included in the acceptance e-mail.
+ - sachac: Who wants to help me with this?
+- We extended CFP-end by two weeks this year, but that made it coincide
+ with speaker-notifs, and that’s awkward. Next time, we should only
+ extend the CFP by one week to avoid having to scramble with the
+ schedule until the very last day.
+ - Proposed dates in <https://emacsconf.org/2023/cfp/> have similar
+ spacing, so yeah, we&rsquo;ll want to extend by only one week.
+- Some people assume that they have to suggest longer formats even if
+ they intend their talks to be 10′ or 20′. We should change the
+ wording on the CFP to ask them to only provide alternatives for
+ shorter formats, not longer.
+ - Added a brief note to CFP.
+- It was hard to squeeze all the org/hyperbole talk on day-1.
+ Generally, the people who submit these kinds of talk come from all
+ over the world, and US mornings are more accommodating than US
+ evenings when it comes to timezones. We might consider having two org
+ **mornings** rather than an org **day**; it would give us more flexibility
+ with those talks.
+ - Let&rsquo;s see if we can do two streams again. That was fun.
+- We’re starting to reach critical mass on the org-talks. We might want
+ to consider splitting the org-talks and the dev-talks into two
+ distinct events to allow them to grow independently.
+ - Let&rsquo;s see if we can do two streams again. That was fun.
+- We should associate time-of-day with CFP-deadline; otherwise, the
+ scheduler has to be on edge until the very end of the day. It’s worse
+ this year because we made CFP-end coincide with speaker-notif, so this
+ might not be as much of a problem next year.
+ - If we do rolling acceptances and we extend by at most one week
+ instead of two, this should be fine.
+- It’s easier for us to extend beyond 5pm than to go before 9am
+ (especially for the West coast). Extending beyond 5pm puts strain on
+ European organizers and volunteers, though.
+ - Time pressure should be alleviated with multiple streams.
+- Sometimes, ikiwiki on front0 took a lot of time to process the new
+ commits. sachac assumed this is due to a faulty regex parsing. We
+ should be able to find out more by looking at the logs from ikiwiki
+ after a slow commit.
+ - Seems speedy at the moment.
+- Ask for preferred timezone in CFP
+ - Added to availability.
+- Check with John Wiegley re: schedule - we always happen to coincide
+ with his work trips
+ - I checked with him and the people at his work don&rsquo;t have a schedule
+ yet, so we should go ahead and plan
+
+
+### Lessons learned for next year
+
+- Maybe incentivize proper timezone specification by saying we can translate times to their local time?
+- Make sure to include cfp.org as an attachment instead of inline
+
+
+### Other thoughts
+
+- sachac: bandali likes having the commitment to freedom section in the CFP as a form of activism
+- sachac: I thought about pulling the deadline back to Sept 1, but it might be
+ good to keep it at Sept 14 so that anyone who tends to work with the
+ schoolyear can still have a little time to work on it.
+
+
+<a id="distrib-cfp"></a>
+
+## DONE Distribute CFP
+
+
+### DONE Add proposal review volunteers to emacsconf-submit
+
+- <https://lists.gnu.org/mailman/admin/emacsconf-submit/members/add>
+- Ask volunteers to e-mail an SSH public key so they can be added via the gitolite-admin repo to the conf.org repo for the year
+
+
+### First announcement
+
+- Remove draft tags :sachac:
+- Post on emacsconf-discuss, emacs-tangents :bandali: :zaeph:
+- Sticky on reddit.com/r/emacs
+- Post in Emacs News :sachac:
+
+
+### Reminder
+
+
+<a id="submission-process"></a>
+
+## DONE Process submissions
+
+- Proposal received: sachac adds it to this document with status of PROPOSED
+ - Fields:
+
+ EMERGENCY, Q_AND_A, AVAILABILITY, NAME, PRONOUNS, TIME, MIN_TIME, MAX_TIME, SLUG, EMAIL, NAME_SHORT, CUSTOM_ID, TRACK, TIMEZONE, CATEGORY, DATE_SUBMITTED
+- jc doublechecks that the data has been correctly captured (especially EMAIL and AVAILABILITY)
+- People review it (sachac, jc, etc.) and weigh in
+- Proposal accepted: sachac e-mails the speaker and sets status to WAITING\_FOR\_EMAIL\_CONFIRM
+- E-mail confirmation received: log it in the logbook
+- Schedule set: sachac e-mails the speaker and sets status to WAITING\_FOR\_SCHED\_CONFIRM
+
+
+### 2023-08-14 EmacsConf 2023 CFP progress report (8 talks accepted so far, 1 to review, 6 todo)
+
+The end of the EmacsConf 2023 call for participation is one month away
+(Sept 14; <https://emacsconf.org/2023/cfp/>). Whee! So far, we&rsquo;ve sent
+early acceptances to the following talks and added them to the program
+on the wiki (<https://emacsconf.org/2023/talks>):
+
+<table>
+
+
+<colgroup>
+<col class="org-right">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-right">Duration</td>
+<td class="org-left">Title</td>
+<td class="org-left">Speaker</td>
+</tr>
+
+
+<tr>
+<td class="org-right">10</td>
+<td class="org-left">An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</td>
+<td class="org-left">Chung-hong Chan</td>
+</tr>
+
+
+<tr>
+<td class="org-right">20</td>
+<td class="org-left">Authoring and presenting university courses with Emacs and a full libre software stack</td>
+<td class="org-left">James Howell</td>
+</tr>
+
+
+<tr>
+<td class="org-right">20</td>
+<td class="org-left">Org-Mode workflow: informal reference tracking</td>
+<td class="org-left">Christopher Howard</td>
+</tr>
+
+
+<tr>
+<td class="org-right">20</td>
+<td class="org-left">GNU Emacs for electronics, note-taking, and as lightweight IDE</td>
+<td class="org-left">Anand Tamariya</td>
+</tr>
+
+
+<tr>
+<td class="org-right">10</td>
+<td class="org-left">A modern Emacs look-and-feel without pain</td>
+<td class="org-left">Pedro A. Aranda</td>
+</tr>
+
+
+<tr>
+<td class="org-right">10</td>
+<td class="org-left">Writing a language server in OCaml for Emacs, fun, and profit</td>
+<td class="org-left">Austin Theriault</td>
+</tr>
+
+
+<tr>
+<td class="org-right">20</td>
+<td class="org-left">LLM clients in Emacs, functionality and standardization</td>
+<td class="org-left">Andrew Hyatt</td>
+</tr>
+
+
+<tr>
+<td class="org-right">10</td>
+<td class="org-left">The many ways to browse Hacker News from Emacs</td>
+<td class="org-left">Mickael Kerjean</td>
+</tr>
+</tbody>
+</table>
+
+We sent the speakers <https://emacsconf.org/2023/prepare/> in case
+anyone wants to get started on their presentations.
+
+There&rsquo;s one talk that&rsquo;s waiting for feedback on the emacsconf-submit
+before we send the early acceptance in about a week:
+
+<table>
+
+
+<colgroup>
+<col class="org-right">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-right">Duration</td>
+<td class="org-left">Title</td>
+<td class="org-left">Speaker</td>
+</tr>
+
+
+<tr>
+<td class="org-right">20</td>
+<td class="org-left">one.el: the static site generator for Emacs Lisp Programmers</td>
+<td class="org-left">Tony Aldon</td>
+</tr>
+</tbody>
+</table>
+
+There are several talk proposals that are in progress (need to
+coordinate, don&rsquo;t have speaker releases / full details / etc.):
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">Title</td>
+<td class="org-left">Speaker</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Emacs MultiMedia System (EMMS)</td>
+<td class="org-left">Yoni Rabkin</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Emacs development updates</td>
+<td class="org-left">John Wiegley</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Watch Over Our Folders</td>
+<td class="org-left">Bastien Guerry</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Emacs community information sharing?</td>
+<td class="org-left">Jake B</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Emacs saves the Web</td>
+<td class="org-left">Yuchen Pei</td>
+</tr>
+
+
+<tr>
+<td class="org-left">How to build an Emacs 2: Revenge of the Lem</td>
+<td class="org-left">Fermin</td>
+</tr>
+</tbody>
+</table>
+
+This time last year, we had 2 proposals, with most of the proposals
+coming in at the end of the CFP. This was usually when we started
+panicking about not having lots of proposals, but I think we can skip
+stressing about it this year. <laugh> Even with the program as it is
+now, we&rsquo;d already have a pretty fun EmacsConf. Can&rsquo;t wait to see what
+it&rsquo;ll look like when more people get their proposals in!
+
+bandali, maybe we can do a 1-month and/or 2-week reminder about the
+CFP deadline? I&rsquo;d like to see if we can get away without officially
+extending the CFP this time.
+
+Sacha
+
+
+### Lessons learned from the CFP acceptance phase :lessons:
+
+- Early acceptances are nice. A few got comments within the 1-week
+ period, which helped refine the talk idea more. We probably don&rsquo;t
+ need to make this a 2-week review period.
+- It&rsquo;s a good idea to send the review and acceptance e-mails even to
+ fellow organizers/volunteers, even if they&rsquo;re quite familiar with
+ the page already. =)
+- We successfully didn&rsquo;t panic about submissions, yay! It was nice to
+ be able to draft schedules as we went along, and to compare the
+ dates with last year&rsquo;s trends.
+- I added some more automation for including a template in a mail
+ reply. Changing the subject to `EmacsConf 2023 acceptance: talk
+ title` made it easier to verify that talks had been responded to.
+- I added `emacsconf-mail-add-submission` for parsing submissions from
+ e-mail and adding them to `emacsconf-org-file`. That was nice
+ because it automatically saved `EMAIL`, `DATE_SUBMITTED`, and
+ `DATE_TO_NOTIFY`.
+- Displaying the schedule as a list with time constraints made it
+ easier to verify the time constraints and to see how I can fix
+ errors.
+- Drafting the schedule in the public organizers notebook was nice
+ because I could share that with the speakers and other volunteers.
+
+
+### DONE E-mail the speakers the upload and backstage instructions
+
+
+### Handling a late submission
+
+doc
+
+- [ ] Add talk entry to conf.org
+- [ ] Add talk to schedule in organizers notebook
+- [ ] Add talk to the wiki
+- [ ] Send speaker backstage information, upload information, and schedule
+- [ ] Create BBB room
+- [ ] Record intro
+
+
+<a id="draft-schedule"></a>
+
+## Draft schedule for EmacsConf 2023
+
+These times are in EST (GMT-5).
+
+<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="https://emacsconf.org/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="https://emacsconf.org/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="https://emacsconf.org/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="https://emacsconf.org/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="https://emacsconf.org/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="https://emacsconf.org/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="https://emacsconf.org/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="https://emacsconf.org/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="https://emacsconf.org/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="https://emacsconf.org/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="https://emacsconf.org/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="https://emacsconf.org/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="https://emacsconf.org/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="https://emacsconf.org/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="https://emacsconf.org/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="https://emacsconf.org/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="https://emacsconf.org/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="https://emacsconf.org/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="https://emacsconf.org/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:59- 9:04 Sunday opening remarks</title> <rect x="-2" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="https://emacsconf.org/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="https://emacsconf.org/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="https://emacsconf.org/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="https://emacsconf.org/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="https://emacsconf.org/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="https://emacsconf.org/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="https://emacsconf.org/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="https://emacsconf.org/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="https://emacsconf.org/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="https://emacsconf.org/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="https://emacsconf.org/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="https://emacsconf.org/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="https://emacsconf.org/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="https://emacsconf.org/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="https://emacsconf.org/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="https://emacsconf.org/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg>
+
+- Legend: dashed line means non-BBB Q&A; light gray means penciled-in talk; yellow means video already submitted and being processed
+
+
+### Draft schedule as a list
+
+- 2023-12-02 Sat 09:00-09:10 [sat-open](https://emacsconf.org/2023/talks/sat-open "Saturday opening remarks"): Saturday opening remarks
+- 2023-12-02 Sat 09:10-09:20 - <= 10:00 - [adventure](https://emacsconf.org/2023/talks/adventure "An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp"): An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp (Chung-hong Chan)
+- 2023-12-02 Sat 09:30-09:50 [uni](https://emacsconf.org/2023/talks/uni "Authoring and presenting university courses with Emacs and a full libre software stack"): Authoring and presenting university courses with Emacs and a full libre software stack (James Howell)
+- 2023-12-02 Sat 10:00-10:10 - <= 10:30 - [matplotllm](https://emacsconf.org/2023/talks/matplotllm "MatplotLLM, iterative natural language data visualization in org-babel"): MatplotLLM, iterative natural language data visualization in org-babel (Abhinav Tushar)
+- 2023-12-02 Sat 10:05-10:25 - on 2023-12-02 - [teaching](https://emacsconf.org/2023/talks/teaching "Teaching computer and data science with literate programming tools"): Teaching computer and data science with literate programming tools (Marcus Birkenkrahe)
+- 2023-12-02 Sat 10:20-10:40 [voice](https://emacsconf.org/2023/talks/voice "Enhancing productivity with voice computing"): Enhancing productivity with voice computing (Blaine Mooers)
+- 2023-12-02 Sat 10:40-10:50 - <= 11:00 - [table](https://emacsconf.org/2023/talks/table "Who needs Excel? Managing your students qualifications with org-table"): Who needs Excel? Managing your students qualifications with org-table (Daniel Molina)
+- 2023-12-02 Sat 10:55-11:15 - >= 10:00 - [llm](https://emacsconf.org/2023/talks/llm "LLM clients in Emacs, functionality and standardization"): LLM clients in Emacs, functionality and standardization (Andrew Hyatt)
+- 2023-12-02 Sat 11:05-11:15 - <= 15:00 - [taming](https://emacsconf.org/2023/talks/taming "Taming things with Org Mode"): Taming things with Org Mode (Gergely Nagy (algernon))
+- 2023-12-02 Sat 11:30-11:50 - <= 13:00 - [one](https://emacsconf.org/2023/talks/one "one.el: the static site generator for Emacs Lisp Programmers"): one.el: the static site generator for Emacs Lisp Programmers (Tony Aldon)
+- 2023-12-02 Sat 13:00-13:10 [writing](https://emacsconf.org/2023/talks/writing "Emacs turbo-charges my writing"): Emacs turbo-charges my writing (Jeremy Friesen)
+- 2023-12-02 Sat 13:00-13:20 - >= 11:00 - [overlay](https://emacsconf.org/2023/talks/overlay "Improving compiler diagnostics with overlays"): Improving compiler diagnostics with overlays (Jeff Trull)
+- 2023-12-02 Sat 13:25-13:35 [nabokov](https://emacsconf.org/2023/talks/nabokov "Why Nabokov would use Org-Mode if he were writing today"): Why Nabokov would use Org-Mode if he were writing today (Edmund Jorgensen)
+- 2023-12-02 Sat 13:35-13:45 [eval](https://emacsconf.org/2023/talks/eval "Editor Integrated REPL Driven Development for all languages"): Editor Integrated REPL Driven Development for all languages (Musa Al-hassy)
+- 2023-12-02 Sat 13:50-14:10 - no live Q&A - [collab](https://emacsconf.org/2023/talks/collab "Collaborative data processing and documenting using org-babel"): Collaborative data processing and documenting using org-babel (Jonathan Hartman, Lukas C. Bossert)
+- 2023-12-02 Sat 14:00-15:00 [repl](https://emacsconf.org/2023/talks/repl "REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ"): REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ (Eduardo Ochs)
+- 2023-12-02 Sat 14:20-14:40 - >= 12:00 - [solo](https://emacsconf.org/2023/talks/solo "How I play TTRPGs in Emacs"): How I play TTRPGs in Emacs (Howard Abrams)
+- 2023-12-02 Sat 14:55-15:15 - >= 13:00 - [ref](https://emacsconf.org/2023/talks/ref "Org-Mode workflow: informal reference tracking"): Org-Mode workflow: informal reference tracking (Christopher Howard)
+- 2023-12-02 Sat 15:10-15:50 [doc](https://emacsconf.org/2023/talks/doc "Literate Documentation with Emacs and Org Mode"): Literate Documentation with Emacs and Org Mode (Mike Hamrick)
+- 2023-12-02 Sat 15:25-15:35 - between 15:00-16:00 - [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos"): (Un)entangling projects and repos (Alexey Bochkarev)
+- 2023-12-02 Sat 15:45-15:55 - >= 12:00 - [devel](https://emacsconf.org/2023/talks/devel "Emacs development updates"): Emacs development updates (John Wiegley)
+- 2023-12-02 Sat 16:05-16:45 [windows](https://emacsconf.org/2023/talks/windows "Windows into Freedom"): Windows into Freedom (Corwin Brust)
+- 2023-12-02 Sat 16:10-16:50 [core](https://emacsconf.org/2023/talks/core "Emacs core development: how it works"): Emacs core development: how it works (Stefan Kangas)
+- 2023-12-02 Sat 17:05-17:15 [sat-close](https://emacsconf.org/2023/talks/sat-close "Saturday closing remarks"): Saturday closing remarks
+- 2023-12-03 Sun 08:59-09:04 [sun-open](https://emacsconf.org/2023/talks/sun-open "Sunday opening remarks"): Sunday opening remarks
+- 2023-12-03 Sun 09:05-09:25 - <= 12:00 - [hyperamp](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs"): Top 10 ways Hyperbole amps up Emacs (Robert Weiner)
+- 2023-12-03 Sun 09:40-10:00 [koutline](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling"): Using Koutline for stream of thought journaling (Matthew Jorgensen (PlasmaStrike))
+- 2023-12-03 Sun 10:00-10:20 - <= 12:00 - [scheme](https://emacsconf.org/2023/talks/scheme "Bringing joy to Scheme programming"): Bringing joy to Scheme programming (Andrew Tropin)
+- 2023-12-03 Sun 10:10-10:25 - <= 11:00 - [parallel](https://emacsconf.org/2023/talks/parallel "Parallel text replacement"): Parallel text replacement (Lovro, Valentino Picotti)
+- 2023-12-03 Sun 10:35-10:45 - <= 13:00 - [eat](https://emacsconf.org/2023/talks/eat "Eat and Eat powered Eshell, fast featureful terminal inside Emacs"): Eat and Eat powered Eshell, fast featureful terminal inside Emacs (Akib Azmain Turja)
+- 2023-12-03 Sun 10:35-10:55 - <= 11:30 - [world](https://emacsconf.org/2023/talks/world "GNU Emacs: A World of Possibilities"): GNU Emacs: A World of Possibilities (Anand Tamariya)
+- 2023-12-03 Sun 11:00-11:20 - <= 13:00 - [poltys](https://emacsconf.org/2023/talks/poltys "The browser in a buffer"): The browser in a buffer (Michael Bauer)
+- 2023-12-03 Sun 11:10-11:20 - between 11:00-13:00 - [flat](https://emacsconf.org/2023/talks/flat "A modern Emacs look-and-feel without pain"): A modern Emacs look-and-feel without pain (Pedro A. Aranda)
+- 2023-12-03 Sun 11:35-11:55 - <= 17:00 - [cubing](https://emacsconf.org/2023/talks/cubing "Speedcubing in Emacs"): Speedcubing in Emacs (wasamasa)
+- 2023-12-03 Sun 11:35-11:55 - <= 13:00 - [emacsen](https://emacsconf.org/2023/talks/emacsen "The Emacsen family, the design of an Emacs and the importance of Lisp"): The Emacsen family, the design of an Emacs and the importance of Lisp (Fermin)
+- 2023-12-03 Sun 13:00-13:35 - <= 14:00 - [gc](https://emacsconf.org/2023/talks/gc "emacs-gc-stats: Does garbage collection actually slow down Emacs?"): emacs-gc-stats: Does garbage collection actually slow down Emacs? (Ihor Radchenko)
+- 2023-12-03 Sun 13:00-13:40 [emms](https://emacsconf.org/2023/talks/emms "Emacs MultiMedia System (EMMS)"): Emacs MultiMedia System (EMMS) (Yoni Rabkin)
+- 2023-12-03 Sun 13:50-14:30 - >= 11:00 - [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs"): hyperdrive.el: Peer-to-peer filesystem in Emacs (Joseph Turner and Protesilaos Stavrou)
+- 2023-12-03 Sun 13:55-14:25 [steno](https://emacsconf.org/2023/talks/steno "Programming with steno"): Programming with steno (Daniel Alejandro Tapia)
+- 2023-12-03 Sun 14:35-14:45 [mentor](https://emacsconf.org/2023/talks/mentor "Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)"): Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs) (Jeremy Friesen)
+- 2023-12-03 Sun 14:45-15:00 [lspocaml](https://emacsconf.org/2023/talks/lspocaml "Writing a language server in OCaml for Emacs, fun, and profit"): Writing a language server in OCaml for Emacs, fun, and profit (Austin Theriault)
+- 2023-12-03 Sun 15:10-15:40 - >= 15:00 - [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)"): Emacs saves the Web (maybe) (Yuchen Pei)
+- 2023-12-03 Sun 15:15-15:45 - >= 12:00 - [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole"): What I learned by writing test cases for GNU Hyperbole (Mats Lidell)
+- 2023-12-03 Sun 15:55-16:15 [sharing](https://emacsconf.org/2023/talks/sharing "Sharing Emacs is Caring Emacs: Emacs education and why I embraced video"): Sharing Emacs is Caring Emacs: Emacs education and why I embraced video (Jacob Boxerman)
+- 2023-12-03 Sun 16:00-16:20 [emacsconf](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference"): EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference (Sacha Chua)
+- 2023-12-03 Sun 16:30-16:40 [sun-close](https://emacsconf.org/2023/talks/sun-close "Sunday closing remarks"): Sunday closing remarks
+
+
+### Schedule announcements
+
+- <span class="timestamp-wrapper"><span class="timestamp">[2023-12-02 Sat] </span></span> [repl](https://emacsconf.org/2023/talks/repl "REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ") needs 60 minutes instead of 40, adjusting doc and windows
+- <span class="timestamp-wrapper"><span class="timestamp">[2023-12-01 Fri] </span></span> [gc](https://emacsconf.org/2023/talks/gc "emacs-gc-stats: Does garbage collection actually slow down Emacs?") needs 35 minutes, adjusting later talks ([hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs"), [lspocaml](https://emacsconf.org/2023/talks/lspocaml "Writing a language server in OCaml for Emacs, fun, and profit"), [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole"), [emacsconf](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference"))
+- <span class="timestamp-wrapper"><span class="timestamp">[2023-12-01 Fri] </span></span> [windows](https://emacsconf.org/2023/talks/windows "Windows into Freedom") now on Sat afternoon devel track and [emacsconf](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference") now on Sunday afternoon devel track
+- <span class="timestamp-wrapper"><span class="timestamp">[2023-12-01 Fri] </span></span> Cancelled [taming](https://emacsconf.org/2023/talks/taming "Taming things with Org Mode")
+- <span class="timestamp-wrapper"><span class="timestamp">[2023-11-29 Wed] </span></span> Changed title for [voice](https://emacsconf.org/2023/talks/voice "Enhancing productivity with voice computing"), changed [table](https://emacsconf.org/2023/talks/table "Who needs Excel? Managing your students qualifications with org-table") Q&A to after the conference
+
+
+### Schedule notes
+
+- **Schedule changes after the schedule FYI email from 2023-10-05**:
+ - <span class="timestamp-wrapper"><span class="timestamp">[2023-11-29 Wed] </span></span> Allocated 15 minutes to [lspocaml](https://emacsconf.org/2023/talks/lspocaml "Writing a language server in OCaml for Emacs, fun, and profit")
+ - <span class="timestamp-wrapper"><span class="timestamp">[2023-11-23 Thu] </span></span> Allocated 30 minutes to [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole")
+ - <span class="timestamp-wrapper"><span class="timestamp">[2023-11-14 Tue] </span></span> Update [steno](https://emacsconf.org/2023/talks/steno "Programming with steno") title; add Prot to [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs")
+ - <span class="timestamp-wrapper"><span class="timestamp">[2023-11-04 Sat] </span></span> Moved [emacsen](https://emacsconf.org/2023/talks/emacsen "The Emacsen family, the design of an Emacs and the importance of Lisp") earlier to accommodate live session, moved [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") later to accommodate travel
+ - <span class="timestamp-wrapper"><span class="timestamp">[2023-10-31 Tue] </span></span> Cancelled hn, added [doc](https://emacsconf.org/2023/talks/doc "Literate Documentation with Emacs and Org Mode") before [emacsconf](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference")
+ - Moved [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") talk to general track; removed afternoon break. Changed [solo](https://emacsconf.org/2023/talks/solo "How I play TTRPGs in Emacs"), [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos"), [ref](https://emacsconf.org/2023/talks/ref "Org-Mode workflow: informal reference tracking"), [devel](https://emacsconf.org/2023/talks/devel "Emacs development updates"), [sat-close](https://emacsconf.org/2023/talks/sat-close "Saturday closing remarks"), [overlay](https://emacsconf.org/2023/talks/overlay "Improving compiler diagnostics with overlays"), [eval](https://emacsconf.org/2023/talks/eval "Editor Integrated REPL Driven Development for all languages"), [repl](https://emacsconf.org/2023/talks/repl "REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ"), [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs"), and [world](https://emacsconf.org/2023/talks/world "GNU Emacs: A World of Possibilities"), but none of the talks moved by 2 hours or more, so no extra e-mails needed for now.
+ - <span class="timestamp-wrapper"><span class="timestamp">[2023-10-08 Sun] </span></span> Added [core](https://emacsconf.org/2023/talks/core "Emacs core development: how it works"). Moved [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") to Sun afternoon.
+ - <span class="timestamp-wrapper"><span class="timestamp">[2023-10-09 Mon] </span></span> Renamed `extending` to [world](https://emacsconf.org/2023/talks/world "GNU Emacs: A World of Possibilities") and moved it to the morning to accommodate IST.
+- Saturday on the General track: Org day + misc
+ - [adventure](https://emacsconf.org/2023/talks/adventure "An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp") is the first talk because of availability constraints; would be nice to connect it to [solo](https://emacsconf.org/2023/talks/solo "How I play TTRPGs in Emacs")
+ - [uni](https://emacsconf.org/2023/talks/uni "Authoring and presenting university courses with Emacs and a full libre software stack") for teaching, [teaching](https://emacsconf.org/2023/talks/teaching "Teaching computer and data science with literate programming tools") is also related, and [table](https://emacsconf.org/2023/talks/table "Who needs Excel? Managing your students qualifications with org-table") for grading
+ - [taming](https://emacsconf.org/2023/talks/taming "Taming things with Org Mode") and [one](https://emacsconf.org/2023/talks/one "one.el: the static site generator for Emacs Lisp Programmers") both deal with exports in some way. [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos") would be nice to add here, but that one needs to be in the afternoon because of availability constraints.
+ - [writing](https://emacsconf.org/2023/talks/writing "Emacs turbo-charges my writing") is connected to [nabokov](https://emacsconf.org/2023/talks/nabokov "Why Nabokov would use Org-Mode if he were writing today") (blog posts, novel). It&rsquo;s also a little connected to [one](https://emacsconf.org/2023/talks/one "one.el: the static site generator for Emacs Lisp Programmers") (exporting a blog).
+ - [collab](https://emacsconf.org/2023/talks/collab "Collaborative data processing and documenting using org-babel") and [solo](https://emacsconf.org/2023/talks/solo "How I play TTRPGs in Emacs") are amusing to pair together.
+ - [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos") and [ref](https://emacsconf.org/2023/talks/ref "Org-Mode workflow: informal reference tracking") are also Org-related. [ref](https://emacsconf.org/2023/talks/ref "Org-Mode workflow: informal reference tracking") would be nice to place together with [nabokov](https://emacsconf.org/2023/talks/nabokov "Why Nabokov would use Org-Mode if he were writing today"), but that would move [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos") too late.
+ - [devel](https://emacsconf.org/2023/talks/devel "Emacs development updates") is not Org-related, but probably good to share with everyone.
+- Saturday morning Development track: large language models, AI. Has to be morning because of [matplotllm](https://emacsconf.org/2023/talks/matplotllm "MatplotLLM, iterative natural language data visualization in org-babel"). [llm](https://emacsconf.org/2023/talks/llm "LLM clients in Emacs, functionality and standardization") is about general interfaces, so we can put that last. Could have a general LLM discussion after the talks. Can&rsquo;t swap it with Sunday morning because [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") should stick with [hyperamp](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs") and [koutline](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling") (Hyperbole talks), and the Hyperbole talks won&rsquo;t fit into Saturday morning
+- Saturday afternoon, developer track: REPLs, misc talks
+ - start off with developer tweaks: [overlay](https://emacsconf.org/2023/talks/overlay "Improving compiler diagnostics with overlays") (compilation), and then [eval](https://emacsconf.org/2023/talks/eval "Editor Integrated REPL Driven Development for all languages") and [repl](https://emacsconf.org/2023/talks/repl "REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ") are paired together
+ - [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs"): adding another file protocol, using HTTP APIs
+ - [world](https://emacsconf.org/2023/talks/world "GNU Emacs: A World of Possibilities") might be replays of demos + Q&A session if people are interested
+- Sunday morning gen: Hyperbole (gen track, then crossing over to dev for testing) + misc talks
+ - Hyperbole mini-track is in the morning because of [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole")&rsquo;s availability constraints; [hyperamp](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs") and [koutline](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling") go before it. Try to avoid conflicts so they can attend each other&rsquo;s talks
+ - Sunday morning after [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") could be a fun extended &ldquo;let&rsquo;s write tests together&rdquo; session if someone wants to lead it
+ - [parallel](https://emacsconf.org/2023/talks/parallel "Parallel text replacement") needs to go in the morning. Might be okay to include in the general talk.
+ - [poltys](https://emacsconf.org/2023/talks/poltys "The browser in a buffer") and [cubing](https://emacsconf.org/2023/talks/cubing "Speedcubing in Emacs") aren&rsquo;t related to Hyperbole, but we need to fit them into the schedule somewhere. It would be nice to connect [poltys](https://emacsconf.org/2023/talks/poltys "The browser in a buffer") (talking to web browsers from Emacs) to [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") (doing web stuff in Emacs instead), but [poltys](https://emacsconf.org/2023/talks/poltys "The browser in a buffer") needs to be in the morning (which is pretty full) and [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") is in the afternoon because Yuchen is in Australia/Sydney.
+ - [cubing](https://emacsconf.org/2023/talks/cubing "Speedcubing in Emacs") can be something fun to transition to lunch, then.
+- Sunday afternoon gen: misc talks, community
+ - [eat](https://emacsconf.org/2023/talks/eat "Eat and Eat powered Eshell, fast featureful terminal inside Emacs") is about shells and running commands, so it&rsquo;s generally useful
+ - [emms](https://emacsconf.org/2023/talks/emms "Emacs MultiMedia System (EMMS)") is a user+dev talk
+ - community theme ([mentor](https://emacsconf.org/2023/talks/mentor "Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)"), [hn](https://emacsconf.org/2023/talks/hn "The many ways to browse Hacker News from Emacs"), [sharing](https://emacsconf.org/2023/talks/sharing "Sharing Emacs is Caring Emacs: Emacs education and why I embraced video")), with an aside for [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") (using Emacs as a client for stuff). [sharing](https://emacsconf.org/2023/talks/sharing "Sharing Emacs is Caring Emacs: Emacs education and why I embraced video") is possible closing keynote - encourage people to go out and explore/share all year? If not, [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") could be good for a closing talk - encouraging people to use Emacs for more stuff.
+- Sunday dev: misc dev talks
+ - Morning:
+ - [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") is related to the Hyperbole talks [hyperamp](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs") and [koutline](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling"), so we don&rsquo;t want to overlap with the Q&A for those talks
+ - [flat](https://emacsconf.org/2023/talks/flat "A modern Emacs look-and-feel without pain"), [scheme](https://emacsconf.org/2023/talks/scheme "Bringing joy to Scheme programming"), [gc](https://emacsconf.org/2023/talks/gc "emacs-gc-stats: Does garbage collection actually slow down Emacs?"), [flat](https://emacsconf.org/2023/talks/flat "A modern Emacs look-and-feel without pain"), [windows](https://emacsconf.org/2023/talks/windows "Windows into Freedom"), [emacsconf](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference"), [steno](https://emacsconf.org/2023/talks/steno "Programming with steno")
+ - [emacsen](https://emacsconf.org/2023/talks/emacsen "The Emacsen family, the design of an Emacs and the importance of Lisp") is more high-level and can talk about other editors
+- checking with [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") and [hn](https://emacsconf.org/2023/talks/hn "The many ways to browse Hacker News from Emacs") if ~3pm Sunday afternoon (~7am Mon local time) is okay with them. It would be nice to pair it with [hn](https://emacsconf.org/2023/talks/hn "The many ways to browse Hacker News from Emacs"), which is nice to connect to [mentor](https://emacsconf.org/2023/talks/mentor "Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)") and [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)").
+- Thinking about the flow:
+ - General: Org day, then misc talks Sunday morning and part of Sunday afternoon. Ending with a focus on community and expanding Emacs. It would be nice to get people excited about connecting and sharing throughout the year.
+ - Dev: people who are really curious about AI can connect on
+ Saturday morning and keep the conversation going. Some programming
+ tweaks are grouped together. The rest are mostly based on
+ availability.
+- if the talks get cancelled, we can have an open meetup possibly with
+ breakout rooms
+- coordination notes:
+ - TODO [uni](https://emacsconf.org/2023/talks/uni "Authoring and presenting university courses with Emacs and a full libre software stack"), [teaching](https://emacsconf.org/2023/talks/teaching "Teaching computer and data science with literate programming tools"), [table](https://emacsconf.org/2023/talks/table "Who needs Excel? Managing your students qualifications with org-table") are all about Emacs, Org Mode, and teaching
+ - TODO [repl](https://emacsconf.org/2023/talks/repl "REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ"), [eval](https://emacsconf.org/2023/talks/eval "Editor Integrated REPL Driven Development for all languages")
+ - [hyperamp](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs"), [koutline](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling"), and [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") are all in touch because they work on Hyperbole together
+ - [hn](https://emacsconf.org/2023/talks/hn "The many ways to browse Hacker News from Emacs") and [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)")
+ - [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos"), [taming](https://emacsconf.org/2023/talks/taming "Taming things with Org Mode")?
+ - [matplotllm](https://emacsconf.org/2023/talks/matplotllm "MatplotLLM, iterative natural language data visualization in org-babel"), [voice](https://emacsconf.org/2023/talks/voice "Enhancing productivity with voice computing"), [llm](https://emacsconf.org/2023/talks/llm "LLM clients in Emacs, functionality and standardization") (so they don&rsquo;t all have to define LLMs?)
+- The schedule doesn&rsquo;t have neat aligned slots on purpose so that
+ organizers can jump between streams if needed, and also because we
+ have so many awesome talks. Somehow people managed to handle the
+ schedule last year. =)
+- Next steps:
+ - Schedule: We&rsquo;ll e-mail the draft schedule to speakers so that they
+ can get a sense of where they are in the schedule, see if they
+ really want to make it to a conflicting session&rsquo;s Q&A live
+ (they&rsquo;ll have early access to the videos), etc.
+ - Infrastructure:
+ - Dust off and document infrastructure, processes
+ - Sort out access to media.emacsconf.org so that we can get the upload service up and running
+ - Draft brief intros for talks, keeping in mind that we&rsquo;re going to say them out loud
+ - Speakers will work on videos, and we can help with nudges/coordination if needed
+
+
+### DONE E-mail all the speakers a link to the draft schedule
+
+so that they can confirm that I&rsquo;ve got their availability correctly coded and ask for any adjustments in case they really want to attend someone else&rsquo;s Q&A session
+
+
+### DONE Announce schedule publicly
+
+
+### DONE Incorporate &ldquo;About the speaker&rdquo; info on the wiki pages :conforg:
+
+Good idea to include it because that gives people (a) more context on
+where a speaker is coming from, and (b) a feeling for the kinds of
+backgrounds and interests people have.
+
+
+### TODO Follow up with people we haven&rsquo;t heard from in a while
+
+When do we want to do this?
+
+We don&rsquo;t have to worry too much, because we can offer them the option of doing it live,
+and we can have space in the schedule if they cancel last-minute.
+
+
+<a id="status"></a>
+
+## Prepare for the conference
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">ITEM</th>
+<th scope="col" class="org-left">TODO</th>
+<th scope="col" class="org-left">STATUS</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">Upload</td>
+<td class="org-left">DONE</td>
+<td class="org-left">Ready to go</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Prerec</td>
+<td class="org-left">DONE</td>
+<td class="org-left">Ready to go</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Captions</td>
+<td class="org-left">INPROGRESS</td>
+<td class="org-left">Ready to go; waiting for videos and captions</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Backstage</td>
+<td class="org-left">DONE</td>
+<td class="org-left">Ready to go</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Test assets</td>
+<td class="org-left">DONE</td>
+<td class="org-left">test videos generated</td>
+</tr>
+
+
+<tr>
+<td class="org-left">BBB</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">redirects created, confirmed; next: e-mail speakers testing/checkin instructions</td>
+</tr>
+
+
+<tr>
+<td class="org-left">VNC</td>
+<td class="org-left">DONE</td>
+<td class="org-left">confirmed access to emacsconf-gen and emacsconf-dev</td>
+</tr>
+
+
+<tr>
+<td class="org-left">OBS</td>
+<td class="org-left">DONE</td>
+<td class="org-left">confirmed that gen and dev can stream</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Icecast</td>
+<td class="org-left">DONE</td>
+<td class="org-left">gen and dev confirmed with MPV</td>
+</tr>
+
+
+<tr>
+<td class="org-left">MPV</td>
+<td class="org-left">DONE</td>
+<td class="org-left">confirmed that mpv can watch both streams</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Watch page</td>
+<td class="org-left">DONE</td>
+<td class="org-left">updated for 2023</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Status page</td>
+<td class="org-left">DONE</td>
+<td class="org-left">ready to go</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Public media</td>
+<td class="org-left">DONE</td>
+<td class="org-left">confirmed, set to protected so that we can test publishing live</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Mumble</td>
+<td class="org-left">DONE</td>
+<td class="org-left">confirmed gen and dev can connect, receive audio</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Etherpad</td>
+<td class="org-left">DONE</td>
+<td class="org-left">Ready to go, pads created</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Pad proxy</td>
+<td class="org-left">DONE</td>
+<td class="org-left">Ready to go, pad.emacsconf.org works</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Overlays</td>
+<td class="org-left">DONE</td>
+<td class="org-left">generated and uploaded</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Intros</td>
+<td class="org-left">INPROGRESS</td>
+<td class="org-left">all intros recorded, should send them to speakers for review</td>
+</tr>
+
+
+<tr>
+<td class="org-left">IRC channels</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Not yet started</td>
+</tr>
+
+
+<tr>
+<td class="org-left">IRC talk info</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Not yet started</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Announcements</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Not yet started</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Publishing updates live</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Not yet started</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Autopilot</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Not yet started</td>
+</tr>
+
+
+<tr>
+<td class="org-left">YouTube</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Not yet started</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Peertube</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Not yet started</td>
+</tr>
+
+
+<tr>
+<td class="org-left">480p</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Delegated to corwin</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Audio processing</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Help wanted</td>
+</tr>
+</tbody>
+</table>
+
+
+### Status
+
+<svg width="800" height="300" version="1.1" xmlns="<http://www.w3.org/2000/svg>" xmlns:xlink="<http://www.w3.org/1999/xlink>"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="<https://emacsconf.org/2023/talks/sat-open>" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="<https://emacsconf.org/2023/talks/adventure>" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="<https://emacsconf.org/2023/talks/uni>" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="<https://emacsconf.org/2023/talks/teaching>" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="<https://emacsconf.org/2023/talks/table>" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="<https://emacsconf.org/2023/talks/one>" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="<https://emacsconf.org/2023/talks/writing>" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="<https://emacsconf.org/2023/talks/nabokov>" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="<https://emacsconf.org/2023/talks/collab>" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="<https://emacsconf.org/2023/talks/solo>" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="<https://emacsconf.org/2023/talks/ref>" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="<https://emacsconf.org/2023/talks/unentangling>" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="<https://emacsconf.org/2023/talks/devel>" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="<https://emacsconf.org/2023/talks/core>" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="<https://emacsconf.org/2023/talks/sat-close>" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="<https://emacsconf.org/2023/talks/matplotllm>" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="<https://emacsconf.org/2023/talks/voice>" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="<https://emacsconf.org/2023/talks/llm>" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="<https://emacsconf.org/2023/talks/overlay>" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="<https://emacsconf.org/2023/talks/eval>" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="<https://emacsconf.org/2023/talks/repl>" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="<https://emacsconf.org/2023/talks/doc>" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="<https://emacsconf.org/2023/talks/windows>" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="<https://emacsconf.org/2023/talks/sun-open>" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:59- 9:04 Sunday opening remarks</title> <rect x="-2" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="<https://emacsconf.org/2023/talks/hyperamp>" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="<https://emacsconf.org/2023/talks/koutline>" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="<https://emacsconf.org/2023/talks/parallel>" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="<https://emacsconf.org/2023/talks/eat>" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="<https://emacsconf.org/2023/talks/poltys>" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="<https://emacsconf.org/2023/talks/cubing>" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="<https://emacsconf.org/2023/talks/emms>" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="<https://emacsconf.org/2023/talks/steno>" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="<https://emacsconf.org/2023/talks/mentor>" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="<https://emacsconf.org/2023/talks/web>" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="<https://emacsconf.org/2023/talks/sharing>" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="<https://emacsconf.org/2023/talks/sun-close>" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="<https://emacsconf.org/2023/talks/scheme>" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="<https://emacsconf.org/2023/talks/world>" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="<https://emacsconf.org/2023/talks/flat>" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="<https://emacsconf.org/2023/talks/emacsen>" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="<https://emacsconf.org/2023/talks/gc>" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="<https://emacsconf.org/2023/talks/hyperdrive>" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="<https://emacsconf.org/2023/talks/lspocaml>" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="<https://emacsconf.org/2023/talks/test>" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="<https://emacsconf.org/2023/talks/emacsconf>" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg>
+
+
+### DONE Upload
+
+
+#### DONE Get access to media.emacsconf.org so that we can set up the upload service and the backstage area
+
+
+##### DONE Decide what to do for backstage area and upload service :decision:
+
+- <span class="timestamp-wrapper"><span class="timestamp">[2023-10-13 Fri]</span></span>: Got access to media.emacsconf.org, set up the backstage area
+
+- res.emacsconf.org
+ - up right away, so people can get started on captions
+ - more memory than media.emacsconf.org - is the upload service thrashing?
+- media.emacsconf.org
+ - does not interfere with res streaming during the conference itself
+ - don&rsquo;t need to send people multiple e-mails, risk confusion/out-of-date info
+ - access to media.emacsconf.org might be sorted out by <span class="timestamp-wrapper"><span class="timestamp">[2023-10-13 Fri]</span></span>
+ - not in a big rush yet
+
+
+### DONE Prerec
+
+
+##### Set up for the new year
+
+As orga@res:
+
+- mkdir /data/emacsconf/$year
+- rm ~/current
+- ln -s /data/emacsconf/$year current
+- ln -s /data/emacsconf/$year $year
+
+When we receive files
+
+- change the TODO status to PROCESSING
+- mkdir ~/current/$slug
+- copy the files to there
+- rename-original $slug $file
+- process-prerec $video
+- Copy the files to the res:~/cache, laptop:~/proj/emacsconf/2023/cache, and media:~/backstage
+- emacsconf-cache-all-video-data
+- emacsconf-publish-info-pages
+- emacsconf-publish-backstage-index
+
+(check that the reencode.sh process has kicked off; if not, call reencode.sh $video $prefix&#x2013;reencoded.webm)
+
+
+### INPROGRESS Captions
+
+- OpenAI Whisper SaaS (<https://platform.openai.com/docs/guides/speech-to-text/longer-inputs>) limits audio files to 25MB, so it&rsquo;s probably easier to do it ourselves
+
+
+#### TODO E-mail previous captioning volunteers to see if they&rsquo;re interested in helping out
+
+
+#### DONE E-mail captioning volunteers the backstage instructions
+
+
+#### DONE E-mail current caption volunteers backstage information, captioning process, etc.
+
+I&rsquo;ll wait a few days for Yoni to get back to us about whether he wants
+to caption his own talk and/or seeing if other speakers will get their
+talks in.
+
+`emacsconf-mail-backstage-info`
+
+Hi ${name}!
+
+You&rsquo;re getting this e-mail because you have volunteered to help out
+with captions for ${conf-name} ${year}. (Thank you so much!)
+
+I&rsquo;m so excited! =) We&rsquo;re starting to get recorded talks, which means
+it&rsquo;s time to get captions going. People really appreciate the
+captions, especially when the captions have been lovingly edited by
+volunteers who change things like &ldquo;Emax&rdquo; to &ldquo;Emacs&rdquo; and &ldquo;metaX&rdquo; to
+&ldquo;M-x&rdquo;.
+
+Just like last year, we&rsquo;re using OpenAI Whisper to give us a
+reasonable starting point for transcripts. If working from scratch
+works better for you, you&rsquo;re welcome to do that too.
+
+We&rsquo;ve set up ${backstage} as the backstage area where you can view the
+videos and resources uploaded so far. You can access it with the
+username "${backstage-user}&ldquo; and the password &rdquo;${backstage-password}&ldquo;.
+Please keep the backstage password and other speakers&rsquo; talk resources
+secret. ${backstage-use}
+
+To call dibs on a video to caption, just send a message to me at
+sacha@sachachua.com and I can update the page so that it&rsquo;s assigned to
+you. You can e-mail me the edited captions when you&rsquo;re done. Don&rsquo;t
+worry too much about timestamps; we can re-align the text with the
+audio afterwards. If life gets suddenly busy and you can&rsquo;t see it all
+the way through, no worries. Just e-mail me what you&rsquo;ve got and I&rsquo;ll
+put it back in the pool. Every little bit helps!
+
+Thank you!
+
+Sacha Chua
+
+
+#### TODO E-mail the emacsconf-org mailing list the announcement and the invitation to volunteer
+
+
+#### TODO Try out Deepgram, play around with it for last-minute submissions?
+
+
+#### DONE Get the autocaptions for emms up in the backstage area
+
+
+#### Captions lessons learned :lessons:
+
+- OpenAI had a breaking API change, need to call `whisper.utils.get_writer`
+ - <https://github.com/dmarx/video-killed-the-radio-star/issues/101>
+
+ vtt_writer = whisper.utils.get_writer('vtt', os.path.dirname(new_file))
+ txt_writer = whisper.utils.get_writer('txt', os.path.dirname(new_file))
+ vtt_writer(result, work['audio'], {'max_line_width': 60, 'max_line_count': None, 'highlight_words': None})
+ txt_writer(result, work['audio'], {'max_line_width': 60, 'max_line_count': None, 'highlight_words': None})
+
+
+#### Reencoding
+
+
+### DONE Backstage
+
+
+<a id="test"></a>
+
+### DONE Test assets
+
+<file://ssh:res:/data/emacsconf/2023/assets/test>
+
+
+#### DONE Generate test videos
+
+
+#### Try autopilot
+
+ (let* ((offset-seconds 60)
+ (start-time (time-add (current-time) offset-seconds))
+ (emacsconf-schedule-validation-functions nil)
+ (emacsconf-schedule-default-buffer-minutes 1)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 1)
+ (emacsconf-schedule-strategies '(emacsconf-schedule-allocate-buffer-time
+ emacsconf-schedule-copy-previous-track))
+ (schedule (emacsconf-schedule-prepare
+ (emacsconf-schedule-inflate-sexp
+ `(("GEN"
+ :start ,(format-time-string "%Y-%m-%d %H:%M" start-time)
+ :set-track "General")
+ (sat-open :time 1)
+ (adventure :time 1) ; pad Q&A
+ (uni :time 1) ; live Q&A
+ (teaching :time 1)
+ (table :time 1)
+ (taming :time 1)
+ (one :time 1)
+ (cubing :time 1) ; IRC
+ ("DEV"
+ :start
+ ,(format-time-string "%Y-%m-%d %H:%M" (time-add start-time 60))
+ :set-track "Development")
+ (matplotllm :time 1)
+ (gc :time 1) ; pad
+ (repl :time 1) ; IRC
+ (voice :time 1)
+ (llm :time 1)
+ (overlay :time 1)
+ (eval :time 1)
+ (emacsconf :time 1))))))
+ (emacsconf-stream-crontabs t schedule))
+
+ (let* ((offset-seconds 240)
+ (start-time (time-add (current-time) offset-seconds))
+ (emacsconf-schedule-validation-functions nil)
+ (emacsconf-schedule-default-buffer-minutes 5)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 5)
+ (emacsconf-schedule-strategies
+ '(emacsconf-schedule-ignore-fixed
+ emacsconf-schedule-allocate-buffer-time
+ emacsconf-schedule-copy-previous-track))
+ (schedule (emacsconf-schedule-prepare
+ (emacsconf-schedule-inflate-sexp
+ `(("GEN"
+ :start ,(format-time-string "%Y-%m-%d %H:%M" start-time)
+ :set-track "General")
+ (sat-open)
+ (sun-open)
+ ("DEV"
+ :start
+ ,(format-time-string "%Y-%m-%d %H:%M" (time-add start-time 60))
+ :set-track "Development")
+ (emacsconf))))))
+ (emacsconf-stream-crontabs nil schedule))
+
+
+### BBB
+
+Generate them for possibly live presentations as well? We&rsquo;ll see.
+
+
+#### DONE Generate redirects
+
+We use redirects for Q&A sessions with BBB web conferences so that people can easily join the web conference.
+
+- <emacsconf-publish-bbb-static-redirects>: generate static redirects
+- <emacsconf-publish-bbb-redirect-all>
+
+
+#### DONE Generate BBB rooms
+
+BBB name convention from last year
+
+ec22-sat-am-dev Abin Simon (treesitter)
+
+That means things change if I move to a different time or track.
+Other option:
+
+ec23 Speaker Name (talk-ids)
+
+Deleting old rooms:
+
+ (spookfox-js-injection-eval-in-active-tab "[...document.querySelectorAll('.delete-room')].filter((o) => o.getAttribute('data-name').match(/ec22/))[0].click(); document.querySelector('#delete-confirm').click();" t)
+
+Creating new rooms
+
+ (defun emacsconf-spookfox-create-bbb (group)
+ "Create a BBB room for this group of talks.
+ GROUP is (email . (talk talk talk)).
+ Needs a Spookfox connection."
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (let* ((bbb-name
+ (format "%s (%s) - %s%s"
+ (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) ", ")
+ (plist-get (cadr group) :speakers)
+ emacsconf-id
+ emacsconf-year))
+ path
+ (retrieve-command (format "window.location.origin + [...document.querySelectorAll('h4.room-name-text')].find((o) => o.textContent.trim() == '%s').closest('tr').querySelector('.delete-room').getAttribute('data-path')" bbb-name))
+ (create-command (format "name=\"%s\";
+ console.debug(name);
+ console.debug(document.querySelector('#create-room-block'));
+ document.querySelector('#create-room-block').click();
+ console.debug(document.querySelector('#create-room-name'));
+ document.querySelector('#create-room-name').value = name;
+ document.querySelector('#room_mute_on_join').click();
+ document.querySelector('.create-room-button').click();"
+ bbb-name)))
+ (setq path (spookfox-js-injection-eval-in-active-tab retrieve-command t))
+ (unless path
+ (kill-new create-command)
+ (dolist (cmd (split-string create-command ";"))
+ (spookfox-js-injection-eval-in-active-tab cmd t)
+ (sleep-for 2))
+ (sleep-for 2)
+ (setq path (spookfox-js-injection-eval-in-active-tab retrieve-command t)))
+ (when path
+ (dolist (talk (cdr group))
+ (save-window-excursion
+ (emacsconf-with-talk-heading talk
+ (org-entry-put (point) "ROOM" path))))
+ (cons bbb-name path))))
+
+ (let ((groups
+ (emacsconf-mail-groups
+ (seq-filter
+ (lambda (o)
+ (and (string-match "live" (or (plist-get o :q-and-a) ""))
+ (not (plist-get o :bbb-room))))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))))
+ (dolist (group groups)
+ (emacsconf-spookfox-create-bbb group)))
+
+
+#### DONE Possibly generate BBB rooms for live presentations?
+
+
+#### DONE Send testing instructions
+
+
+### DONE VNC
+
+We use VNC to connect to the X servers on res.emacsconf.org so that we can stream from it.
+
+Success:
+
+- [X] Confirm that you can connect to emacsconf-gen via VNC
+- [X] Confirm that you can connect to emacsconf-dev via VNC
+
+Setting up
+
+- <emacsconf-publish-res-index>
+
+
+<a id="vnc-instructions"></a>
+
+#### Instructions
+
+NOTE: VNC+OBS doesn&rsquo;t work well if you have a window manager that
+automatically resizes windows, like i3. Please configure your window
+manager so that the VNC window is not resized.
+
+1. Install a VNC viewer on your system (ex: tigervnc-viewer).
+
+2. Set up your local environment:
+ - gen: export TRACK=gen; export TRACK\_PORT=5905; export SSH\_PORT=46668
+ - dev: export TRACK=dev; export TRACK\_PORT=5906; export SSH\_PORT=46668
+
+3. Copy the password:
+
+ scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK -p $SSH\_PORT
+
+4. Forward your local ports and connect via VNC viewer to the
+ appropriate forwarded port from your laptop:
+
+ ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &
+ sleep 5 # Give it time to establish the tunnels
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+
+If you get the following error:
+
+ channel 2: open failed: connect failed: Connection refused
+ CConn: End of stream
+ CConn: The connection was dropped by the server before the session could
+ be established.
+
+then the VNC server hasn&rsquo;t started yet. You can start it with
+
+ ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc
+
+and then connect with:
+
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+
+
+#### TODO Ask bandali or zaeph to share their window manager configuration :bandali:zaeph:
+
+
+### DONE OBS
+
+We use OBS to stream to Icecast on live.emacsconf.org.
+
+Success: Confirm that you can stream
+
+- [X] gen
+- [X] dev
+
+New year: reprovision with
+
+ ansible-playbook -i inventory.yml prod-playbook.yml --tags obs
+
+so that the year is updated in the shell scripts.
+
+
+<a id="obs-instructions"></a>
+
+#### Instructions
+
+1. [Connect to the VNC session for the track.](#vnc-instructions)
+
+2. Start **recording** (not streaming). If you don&rsquo;t see OBS when you connect, it&rsquo;s probably on workspace 2, so you can switch with Alt-2. If you still don&rsquo;t see it there, you can open a terminal with Alt-Enter and then run `track-obs`. After you start recording, confirm that it is now broadcasting to the stream.
+
+3. Verify with MPV on your local system:
+
+ mpv https://live0.emacsconf.org/$TRACK.webm &
+
+
+#### DONE Double-check OBS setup and streaming on res
+
+
+### DONE Icecast
+
+Success: You can use [OBS+VNC to record](#obs-instructions), and the results can be viewed by mpv.
+
+- [X] Gen
+- [X] Dev
+
+New year: reprovision with
+
+ ansible-playbook -i inventory.yml prod-playbook.yml --tags stream
+
+so that the year is updated in the configuration.
+
+This is on live.emacsconf.org and can be restarted with `/etc/init.d/emacsconf restart`.
+
+
+#### DONE Double-check icecast
+
+
+### DONE MPV
+
+
+### DONE Watch page
+
+live.emacsconf.org is on the front0.emacsconf.org server.
+
+To set up for the year:
+
+1. Create directories and update the Nginx configuration
+
+ ansible-playbook -i inventory.yml prod-playbook.yml --tags live
+
+2. Generate the pages
+
+ (emacsconf-publish-watch-pages)
+
+3. Add the $year/watch to the wiki.
+
+4. Create a $year/watch.md manually.
+
+
+### DONE Status page
+
+Manually maintained
+
+/ssh:front0.emacsconf.org:/var/www/status.emacsconf.org/index.html
+
+
+### DONE Public media
+
+Start of year:
+
+1. Set `media_protect_root` to true in Ansible `group_vars/all.yml`.
+2. `ansible-playbook -i inventory.yml prod-playbook.yml --tags media`
+3. Generate the index with `emacsconf-publish-update-media`
+
+Confirm by setting a submitted talk to `PLAYING` and testing with
+<emacsconf-publish-media-files-on-change> . The public media
+directory should have the files and the entry should be in the index.
+Switching it back to `TO_STREAM` and calling
+<emacsconf-publish-media-files-on-change> should remove it.
+
+
+#### TODO Switch public media to unprotected root before the conference
+
+1. Clear public media directory.
+2. Set `media_protect_root` to false in Ansible `group_vars/all.yml`.
+3. `ansible-playbook -i inventory.yml prod-playbook.yml --tags media`
+
+You can generate the index with `emacsconf-publish-update-media`.
+
+
+### DONE Mumble
+
+If you see `Server connection rejected: Wrong certificate or password.`, use **Certificate Wizard** to reimport the .p12 file in that user&rsquo;s home directory.
+
+
+### DONE Etherpad
+
+<emacsconf-pad-prepopulate-all-talks>
+
+
+#### DONE Create pads for all the talks
+
+Because the pads refer to the next and previous talks and include the talk titles, this is best redone after the schedule has settled down.
+
+
+### DONE Pad proxy
+
+
+### DONE Overlays
+
+<emacsconf-stream-generate-overlays>
+
+
+### INPROGRESS Intros
+
+Intro slides
+
+<emacsconf-stream-generate-in-between-pages>
+<emacsconf-pad-expand-intro>
+[elisp:emacsconf-subed-intro-subtitles](emacsconf-subed-intro-subtitles)
+
+<http://ipa-reader.xyz/>
+
+
+#### DONE Regenerate overlays
+
+
+#### TODO Add all intros to the backstage so that people can review them
+
+
+#### TODO Record intro for Mike Hamrick
+
+Next, we have &ldquo;Literate Documentation with Emacs and Org Mode&rdquo;, by Mike Hamrick. He will answer questions via BigBlueButton. You can join using the URL from the talk page or ask questions through Etherpad or IRC.
+
+
+#### CANCELLED Write 1-2 sentence intros for all the talks
+
+We do a brief introduction before each talk so that people know the
+topic of the next talk, the pronunciation of the speaker&rsquo;s name, the
+pronouns to use when referring to them, and the type of Q&A that will
+follow.
+
+The template we used last year was: &ldquo;In this talk, SPEAKER shares
+TITLE OR SUMMARY. Afterwards, PRONOUN will handle questions over Q&A
+METHOD.&rdquo;
+
+This year, we asked speakers to contribute a short introduction. These
+are in conf.org in the private repository. Many of the introductions
+are a little longer than the template, but we might be able to handle
+that. Some need to be rewritten into third-person (using the speaker&rsquo;s
+name/pronouns instead of I). Some might be a bit of a tongue-twister
+and can be rewritten to be easier to say.
+
+We can store the introduction in the `INTRO_NOTE` property in
+conf.org.
+
+Actually recording the introductions can wait until closer to the
+conference because talk titles and Q&A methods can change. We can
+verify speaker name pronunciations at that time.
+
+Hmm&#x2026; Actually, we can go ahead and record all of these so that
+speakers can doublecheck pronunciations, and then we&rsquo;ll re-record them
+in case someone wants to get fancier about intros.
+
+
+##### Intros :levels:
+
+- Good: Use the same template as before: In this talk, SPEAKER shares
+ TITLE OR SUMMARY. Afterwards, PRONOUN will handle questions over Q&A
+ METHOD.
+- Better: Include some more biographical information to give listeners some context.
+
+
+##### DONE Do we want to use honorifics like Dr.? :decision:
+
+DECISION: Include in the intro-review email:
+
+> We will usually introduce you by your first name (or handle, if you
+> prefer to go by a pseudonym) but if you&rsquo;d rather be introduced
+> differently (for example honorific followed by last-name, or whatever
+> you prefer), just let us know.
+
+Let&rsquo;s see if we can decide on this by <span class="timestamp-wrapper"><span class="timestamp">[2023-11-04 Sat] </span></span> so that we can
+use it when recording the intros.
+
+- OPTION: Consistently using names without honorifics, even if indicated in the
+ speaker-submitted intros (as in previous EmacsConfs)
+ - Equality
+ - votes: zaeph
+- CHOSEN: Asking speakers if they want us to use any honorifics in their intro:
+
+ - Observes personal preferences
+ - votes: corwin, max, jc (We can also say that we prefer not to use honorifics (it&rsquo;s not an academic
+ - Corwin&rsquo;s suggested wording: We will usually introduce you by your first name (or handle, if you prefer to go by a pseudonym) but if you&rsquo;d rather be introduced
+ differently (for example honorific followed by last-name, or
+ whatever you prefer) just let us know.
+
+ conference) but we respect people&rsquo;s preferences.)
+- OPTION: Using honorifics based on e-mail signatures and intros:
+ - Recognizes credentials
+
+
+#### DONE Record intro videos with 1-2 sentence intros for all the talks
+
+
+#### DONE Record the rest of the intros
+
+
+#### DONE Generate intro slides
+
+We generate intro slides to display in between talks so that people
+can find out information about the previous talk and learn about the
+next talk. It includes talk titles, speaker names, URLs, and Q&A
+methods. The image will also be used for an introduction video if we
+can record one before the conference.
+
+We also generate overlays that show talk information during the talk
+itself.
+
+SVGs don&rsquo;t support line-wrapping, so it helps to do a quick pass to
+make sure all the talks are displayed properly.
+
+Hmm&#x2026; Maybe I should take the names and pronouns off the video
+overlay? Then there&rsquo;s less worry about wrapping, and people can always
+go to the URL to get more information.
+
+<emacsconf-stream-generate-in-between-pages>
+
+
+#### TODO Ask speakers to review intros
+
+after they&rsquo;ve uploaded their videos, since we might be able to check the pronunciation ourselves
+
+
+### IRC channels
+
+- /opall
+- /conftopic
+- /deopall
+
+
+#### TODO Confirm that the emacsconf user can connect
+
+I think I had that on orga@res.emacsconf.org
+
+
+### IRC talk info
+
+
+### Announcements
+
+
+### Publishing updates live
+
+
+### Autopilot
+
+
+### YouTube
+
+
+### Peertube
+
+
+### 480p
+
+Consider increasing memory/cpu configuration on live?
+
+
+<a id="lowres"></a>
+
+#### TODO Figure out a better way to handle 480p stream :corwin:
+
+It kept dropping last year and sachac didn&rsquo;t have the mental bandwidth to figure it out.
+Might need another node so that we don&rsquo;t risk it getting killed for memory reasons?
+
+Corwin has volunteered to take this on
+
+
+### Audio processing
+
+
+<a id="audio"></a>
+
+#### TODO Find volunteers for audio processing (normalization, noise reduction) and document the process :helpwanted:
+
+- audio normalization
+- noise reduction
+
+
+### Other things people can help with
+
+
+<a id="eval-video-sync"></a>
+
+#### TODO Video editing: the eval talk is a little bit out of sync :helpwanted:
+
+The circular video inset into
+<https://media.emacsconf.org/2023/backstage/#eval> is a little bit out
+of sync with the audio. Not sure if the screenshare is offset as well.
+Maybe just nudging the audio a little bit will be enough to bring
+these in sync? If someone would like to fix this, that would be
+awesome.
+
+
+### TODO Write something for merging in information from previous years if not specified
+
+- availability
+- timezone
+- name
+- short name
+- pronouns
+
+
+<a id="go-live"></a>
+
+## Get ready for production :preflight:
+
+
+### A day or two before
+
+
+#### DONE Update the variables
+
+<a href="https://git.emacsconf.org/emacsconf-ansible/tree/group_vars/all.yml">group_vars/all.yml</a>:
+
+ test_mode: false
+ media_protect_root: false
+ protect_stream_with_password: false
+
+ ansible-playbook -i inventory.ml prod-playbook.yml --tags stream
+ ansible-playbook -i inventory.ml prod-playbook.yml --tags media
+
+
+#### DONE Test the 480p!
+
+
+#### DONE Resize the nodes :bandali:
+
+2022:
+
+- Front: 16GB
+- Live: 64GB
+
+
+#### TODO Update the BigBlueButton rooms so that users are not all moderators
+
+ (require 'emacsconf-spookfox)
+ (dolist (talk (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))
+ (emacsconf-spookfox-update-bbb-settings
+ talk
+ '(("room_mute_on_join" . "true")
+ ("room_all_join_moderator" . "false")
+ ("room_anyone_can_start" . "true"))
+ ))
+
+
+#### TODO Make sure conf.org and the publishing wiki are up to date
+
+
+### On the day of the conference
+
+
+#### TODO Update the emacsconf-tracks status
+
+
+<a id="org45dfd5e"></a>
+
+## Harvest cool stuff
+
+
+### Harvesting
+
+- download published recordings: (defun emacsconf-harvest-download-published-recordings (source dest)
+ "Copy the command for downloading published recordings from SOURCE to DEST."
+ (kill-new
+ (mapconcat (lambda (o) (if (plist-get o :bbb-meeting-id)
+ (format "rsync -avzue ssh %s%s %s\n"
+ source
+ (match-string 1 (plist-get o :bbb-rec))
+ dest)
+ ""))
+ (emacsconf-get-talk-info))))
+
+
+### TODO Announce that videos have been uploaded :emacsconf:
+
+
+### When the speaker posts a video to their own channel :process:
+
+1. Open the video.
+2. Add it to the playlist.
+3. Open the playlist: <https://www.youtube.com/playlist?list=PLomc4HLgvuCUdrW3JkugtKv8xPelUoOyP>
+4. Move the video to the correct place.
+5. Open the old video.
+6. Remove the old video from the playlist.
+7. Edit the video. Add the link to the new video in the description.
+8. Select **Editor** from the left side. Add an info card and maybe an end screen pointing to the new video.
+9. Update the `YOUTUBE_URL` property in the conf.org file. Commit and push.
+
+
+### DONE Figure out which published presentations don&rsquo;t have any deskshare, so I can just upload those directly
+
+The following talks do not have deskshares and can therefore be published by copying webcams.webm.
+
+ (seq-keep
+ (lambda (o)
+ (when (plist-get o :bbb-meeting-id)
+ (let* ((xml-file
+ (expand-file-name "deskshare.xml"
+ (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir)))
+ (dom (and (file-exists-p xml-file)
+ (xml-parse-file xml-file))))
+ (unless (and dom (dom-by-tag dom 'event))
+ (plist-get o :slug)))))
+ (emacsconf-get-talk-info))
+
+ (defun emacsconf-harvest-bbb-copy-webcams-only-sessions ()
+ "Copy the webcam-only Q&A sessions as --answers.webm in the cache directory."
+ (interactive)
+ (seq-keep
+ (lambda (o)
+ (when (and (plist-get o :bbb-meeting-id)
+ (file-exists-p
+ (expand-file-name "video/webcams.webm"
+ (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir))))
+ (let* ((xml-file
+ (expand-file-name "deskshare.xml"
+ (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir)))
+ (dom (and (file-exists-p xml-file)
+ (xml-parse-file xml-file))))
+ (unless
+ (and dom
+ (dom-by-tag dom 'event))
+ (unless (file-exists-p (expand-file-name
+ (concat (plist-get o :file-prefix) "--answers.webm")
+ emacsconf-cache-dir))
+ (copy-file
+ (expand-file-name "video/webcams.webm"
+ (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir))
+ (expand-file-name (concat (plist-get o :file-prefix) "--answers.webm")
+ emacsconf-cache-dir)))
+ (plist-get o :slug)))))
+ (emacsconf-get-talk-info)))
+
+ (emacsconf-harvest-bbb-copy-webcams-only-sessions)
+
+ (defun emacsconf-harvest-set-qa-public ()
+ (dolist (talk (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))
+ (when (emacsconf-talk-file talk "--answers.webm")
+ (emacsconf-with-talk-heading talk
+ (org-entry-put (point) "QA_PUBLIC" "1")))))
+
+
+### DONE Figure out which talks have screenshares and process them
+
+hmm, speed is about the same on my computer?
+
+The following talks have deskshares and need splicing.
+
+ (seq-keep
+ (lambda (o)
+ (when (plist-get o :bbb-meeting-id)
+ (let* ((xml-file
+ (expand-file-name "deskshare.xml"
+ (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir)))
+ (dom (and (file-exists-p xml-file)
+ (xml-parse-file xml-file))))
+ (when (and dom (dom-by-tag dom 'event))
+ (plist-get o :slug)))))
+ (emacsconf-get-talk-info))
+
+ (emacsconf-extract-replace-strings
+ `((,(expand-file-name emacsconf-extract-bbb-published-dir) . "~/current/bbb-published/")
+ (,(expand-file-name emacsconf-cache-dir) . "~/current/cache"))
+ (mapconcat
+ (lambda (slug)
+ (let ((prefix (plist-get (emacsconf-resolve-talk (symbol-name slug)) :file-prefix)))
+ (format "if [ ! -f ~/current/cache/%s--answers--original.webm ]; then\n %s && cp ~/current/cache/%s--answers.webm ~/current/cache/%s--answers--original.webm\nfi"
+ prefix
+ (emacsconf-get-ffmpeg-to-splice-webcam-and-recording (symbol-name slug))
+ prefix
+ prefix)))
+ '(teaching one writing sat-close hyperamp poltys sun-close voice scheme world flat emacsen gc)
+ "\n"))
+
+
+### SOMEDAY Clean up storage on media :emacsconf:
+
+
+### DONE Move answers to main for live talks
+
+ (mapconcat
+ (lambda (o)
+ (and (null
+ (file-exists-p
+ (expand-file-name (concat (plist-get o :file-prefix) "--main.webm")
+ emacsconf-cache-dir)))
+ (file-exists-p
+ (expand-file-name (concat (plist-get o :file-prefix) "--answers.webm")
+ emacsconf-cache-dir))
+ (format "cp %s %s; ../rm-from-cache %s\n"
+ (concat (plist-get o :file-prefix) "--answers.webm")
+ (concat (plist-get o :file-prefix) "--main.webm")
+ (concat (plist-get o :file-prefix) "--answers.webm")
+ )))
+ (emacsconf-get-talk-info)
+ "")
+
+
+<a id="org3dd5255"></a>
+
+## Make things easier for next year
+
+
+### TODO Figure out better space usage for backstage vs public on media.emacsconf.org :emacsconf:
+
+Maybe I can use hard links or symbolic links?
+
+
+### TODO Update the makefile :emacsconf:
+
+
+<a id="coordinate-volunteers"></a>
+
+## Volunteers
+
+
+### DONE E-mail the list asking people to sign up
+
+Hi everyone!
+
+EmacsConf is coming up soon! Here are some roles we need help with
+during the conference:
+
+- Check-in (can handle both tracks):
+ - Keep an eye out for speakers on IRC and in the BigBlueButton room
+ - Give the speaker moderator permissions
+ - <https://emacsconf.org/2023/volunteer/checkin/>
+- Host (one for each track):
+ - Read out questions (and ask some of their own while waiting for questions to come in)
+ - Remind people how to join
+ - Keep the speaker company
+ - Moderate the Q&A sessions as needed
+ - Let us know when you want the Q&A session to be opened up to everyone
+ - <https://emacsconf.org/2023/volunteer/host/>
+- Streamer (one for each track):
+ - Manage what happens on the screen
+ - Listen to the audio volume on the stream and adjust as needed, especially for BigBlueButton rooms
+ - <https://emacsconf.org/2023/volunteer/stream/>
+- Internet Relay Chat scribe (one for each track):
+ - Check the IRC channel for questions and answers and copy them to the talk&rsquo;s Etherpad
+ - <https://emacsconf.org/2023/volunteer/irc/>
+- Pad scribe (one for each track):
+ - Add notes, questions, and answers to the talk&rsquo;s Etherpad
+ - <https://emacsconf.org/2023/volunteer/pad/>
+- Other things you might be interested in helping out with - feel free to suggest!
+
+If you let us know which role(s) you&rsquo;re interested in, the track(s)
+you&rsquo;re interested in (general / development) and your availability for
+the conference (ex: Sat AM, Sat PM, Sun AM, Sun PM, or more granular
+as needed), I can make a shift schedule.
+
+If you&rsquo;re new to the role and have questions, we can help you get
+started via e-mail or set up a training meeting. Let me know what you
+want to know and what times what might work for you.
+
+We can also set up a dry run in a couple of weeks so that people can
+try working together. Please let me know your availability for maybe
+Nov 11 or Nov 18 for a dry run.
+
+Looking forward to a nice smooth EmacsConf!
+
+Sacha
+
+
+### TODO Prepare shift calendar, ask people to sign up
+
+<a name="shifts"></a>
+
+AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition)
+
+Saturday Dec 2 2023
+
+<table id="orgbedd0ea">
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">&#xa0;</th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/host/">Host</a></th>
+<th scope="col" class="org-left">Streamer</th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/checkin/">Checkin</a></th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/irc/">IRC</a></th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/pad/">Pad</a></th>
+<th scope="col" class="org-left">Coord</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">Gen AM</td>
+<td class="org-left">zaeph</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Gen PM</td>
+<td class="org-left">zaph</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Dev AM</td>
+<td class="org-left">bandali</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Dev PM</td>
+<td class="org-left">bandali</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+</tbody>
+</table>
+
+Sunday Dec 3 2023
+
+<table id="orgcd6d77f">
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">&#xa0;</th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/host/">Host</a></th>
+<th scope="col" class="org-left">Streamer</th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/checkin/">Checkin</a></th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/irc/">IRC</a></th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/pad/">Pad</a></th>
+<th scope="col" class="org-left">Coord</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">Gen AM</td>
+<td class="org-left">zaeph</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Gen PM</td>
+<td class="org-left">zaeph</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Dev AM</td>
+<td class="org-left">bandali</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Dev PM</td>
+<td class="org-left">bandali</td>
+<td class="org-left">sachac</td>
+<td class="org-left">FlowyCoder</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">sachac</td>
+</tr>
+</tbody>
+</table>
+
+Backups:
+
+- dev host/streamer:
+- gen host/streamer:
+- checkin, IRC, pad:
+
+Interested in a shift? Please e-mail <mailto:emacsconf-org-private@gnu.org> and we&rsquo;ll help you figure out what you need to learn.
+
+ `(setq emacsconf-shifts
+ (list
+ ,@(apply #'append
+ (mapcar
+ (lambda (day)
+ (let ((headers
+ (mapcar
+ (lambda (field)
+ (intern
+ (concat
+ ":"
+ (downcase
+ (if (string-match org-link-bracket-re field)
+ (match-string 2 field)
+ field)))))
+ (cdr (car (cadr day))))))
+ (mapcar
+ (lambda (row)
+ (apply #'append
+ (list 'list :id
+ (when (string-match "^\\([^ ]+\\) \\(AM\\|PM\\)" (car row))
+ (format "%s-%s-%s"
+ (car day)
+ (downcase (match-string 2 (car row)))
+ (downcase (match-string 1 (car row)))))
+ :track
+ (if (string-match "^Gen" (car row)) "General" "Development")
+ :start
+ (format "%sT%s:00:00%s"
+ (elt day 2)
+ (if (string-match "AM" (car row)) "08" "13")
+ emacsconf-timezone-offset)
+ :end
+ (format "%sT%s:00:00%s"
+ (elt day 2)
+ (if (string-match "AM" (car row)) "12" "18")
+ emacsconf-timezone-offset))
+ (seq-map-indexed
+ (lambda (value index)
+ (unless (string= value "")
+ (list (elt headers index) value)))
+ (cdr row))))
+ (cdr (cadr day)))
+ ))
+ (list
+ (list "sat" sat "2023-12-02")
+ (list "sun" sun "2023-12-03"))))))
+
+
+### DONE Document volunteer roles
+
+Copied it over from the previous year
+
+
+<a id="org5fa50a9"></a>
+
+## Lessons learned
+
+- Make sure timezones are on anything that has time (schedule page, watch pages, etc.)
+- Remember to publish the icals and schedule org files: `emacsconf-update-schedule`. Added to the schedule-details.md.
+- For really late submissions, make sure you also create the pad (`emacsconf-pad-prepopulate-talk-pad`) and the BBB room (`emacsconf-spookfox-create-bbb`).
+- We need to move off the current bbb.emacsverse.org or discuss the future of the current BBB VM.
+- Next year, it might be nice to use the intros and generate title slides in order to add them to the videos.
+
+
+<a id="progress"></a>
+
+# Progress reports
+
+- <https://emacsconf.org/blog/2023-08-14-cfp-progress/>
+- <https://emacsconf.org/blog/2023-09-25-draft-schedule>
+
+
+<a id="templates"></a>
+
+# E-mail templates
+
+
+<a id="review"></a>
+
+## Review
+
+
+### Template
+
+Thanks for submitting your proposal! (ZZZ: feedback) We&rsquo;re experimenting
+with early acceptance this year, so we&rsquo;ll wait a week in case the
+other volunteers want to chime in regarding your talk. =)
+
+
+<a id="acceptance"></a>
+
+## Acceptance
+
+
+### Function
+
+ (defun emacsconf-mail-accept-talk (talk &optional template)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "acceptance"))
+ (plist-get talk :email)
+ (list
+ :title (plist-get talk :title)
+ :email (plist-get talk :email)
+ :time (plist-get talk :time)
+ :conf-name emacsconf-name
+ :speakers-short (plist-get talk :speakers-short)
+ :url (concat emacsconf-base-url (plist-get talk :url))
+ :video-target-date emacsconf-video-target-date
+ :year emacsconf-year)))
+
+
+### Template
+
+Hi, ${speakers-short}!
+
+Looks like all systems are a go for your talk. =) Thanks for proposing
+it! Your talk page is now at ${url} . Please feel free to update it or
+e-mail us if you&rsquo;d like help with any changes.
+
+If you want to get started on your talk early, we have some
+instructions at <https://emacsconf.org/${year}/prepare/> that might help.
+We strongly encourage speakers to prepare a talk video by
+${video-target-date} in order to reduce technical risks and make
+things flow more smoothly. Plus, we might be able to get it captioned
+by volunteers, just like the talks last year. We&rsquo;ll save ${time} minutes
+for your talk, not including time for Q&A. Don&rsquo;t sweat it if
+you&rsquo;re a few minutes over or under. If it looks like a much shorter or
+longer talk once you start getting into it, let us know and we might
+be able to adjust.
+
+I&rsquo;ll follow up with the specific schedule for your talk once things
+settle down. In the meantime, please let us know if you have any
+questions or if there&rsquo;s anything we can do to help out!
+
+Sacha
+
+
+<a id="archive"></a>
+
+# Archive
+
+
+<a id="hyperdrive-core"></a>
+
+## DONE Check with hyperdrive and core if they&rsquo;re willing to swap :decision:
+
+DONE <span class="timestamp-wrapper"><span class="timestamp">[2023-10-08 Sun]</span></span>: hyperdrive on Sunday afternoon, will keep an eye out for openings on general track and call it out in the opening remarks so people know that it&rsquo;s a general talk.
+
+If Stefan Kangas puts together [Emacs core development: how it works](https://emacsconf.org/2023/talks/core "Emacs core development: how it works")
+speaking as a new Emacs maintainer, that might be a good general
+closing talk on the first day because it can encourage people to help
+with Emacs development. We don&rsquo;t have a lot of space on the General
+track, but if we move [hyperdrive.el: Peer-to-peer filesystem in Emacs](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs")
+to the other track, then there&rsquo;s enough space.
+
+It might also be a good idea to move [devel](https://emacsconf.org/2023/talks/devel "Emacs development updates") earlier than
+[unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos") in case John Wiegley can have a live Q&A
+session (he might be travelling at that time, so it&rsquo;s unsure), so that
+there&rsquo;s more time for people to ask emacs-devel highlight questions
+and so that John Wiegley and Stefan Kangas can attend each other&rsquo;s
+Q&A.
+
+Joseph Turner wanted to make sure that people don&rsquo;t assume the
+[hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") talk is too technical for them. We can rename the
+tracks (Track A and Track B)? if that helps, so that people don&rsquo;t
+think the other track is exclusively for more technical things.
+
+Thoughts?
+
+
+### Option A: Here&rsquo;s the schedule with [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") in the second track and [core](https://emacsconf.org/2023/talks/core "Emacs core development: how it works") in the first track.
+
+- world: Ends at 15:30 after 11:30
+
+<svg width="800" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(13,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(28,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(76,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(130,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(169,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/taming" title="Taming things with Org Mode" data-slug="taming"> <title> 11:05-11:15 Taming things with Org Mode</title> <rect x="196" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(209,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> taming</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(264,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 12:45-12:55 Emacs turbo-charges my writing</title> <rect x="352" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(365,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:10- 1:20 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="392" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(405,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:35- 1:55 Collaborative data processing and documenting using org-babel</title> <rect x="431" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(460,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:05- 2:25 How I play TTRPGs in Emacs</title> <rect x="478" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(507,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:40- 3:00 Org-Mode workflow: informal reference tracking</title> <rect x="533" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(562,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:10- 3:20 Emacs development updates</title> <rect x="580" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(593,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:30- 3:40 (Un)entangling projects and repos</title> <rect x="611" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(624,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 3:50- 4:30 Emacs core development: how it works</title> <rect x="643" y="15" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(703,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:45- 4:55 Saturday closing remarks</title> <rect x="729" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(742,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(107,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Improving access to AI-assisted literate programming with voice control" data-slug="voice"> <title> 10:20-10:40 Improving access to AI-assisted literate programming with voice control</title> <rect x="125" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(154,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(209,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/woof" title="Watch Over Our Folders" data-slug="woof"> <title> 12:45- 1:05 Watch Over Our Folders</title> <rect x="352" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(381,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> woof</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with Overlays" data-slug="overlay"> <title> 1:20- 1:40 Improving compiler diagnostics with Overlays</title> <rect x="407" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(436,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:55- 2:05 Editor Integrated REPL Driven Development for all languages</title> <rect x="462" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(475,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:20- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="501" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(561,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 3:10- 3:30 GNU Emacs: A World of Possibilities</title> <rect x="580" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="red"></rect> <g transform="translate(609,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 3:45- 4:25 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="635" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(695,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,200)"> <title> Schedule for Sunday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(5,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(36,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(91,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/parallel" title="Parallel Text Replacement: Does P = NP?" data-slug="parallel"> <title> 10:10-10:20 Parallel Text Replacement: Does P = NP?</title> <rect x="109" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(122,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(162,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(272,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 12:45- 1:25 Emacs MultiMedia System (EMMS)</title> <rect x="352" y="15" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="yellow"></rect> <g transform="translate(412,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/steno" title="Programming at 200 wpm" data-slug="steno"> <title> 1:40- 2:10 Programming at 200 wpm</title> <rect x="439" y="15" opacity="0.8" width="47" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(484,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:20- 2:30 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="501" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(514,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/hn" title="The many ways to browse Hacker News from Emacs" data-slug="hn"> <title> 3:00- 3:10 The many ways to browse Hacker News from Emacs</title> <rect x="564" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(577,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hn</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web" data-slug="web"> <title> 3:25- 4:05 Emacs saves the Web</title> <rect x="603" y="15" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(663,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 4:20- 4:40 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="690" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(719,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:55- 5:05 Sunday closing remarks</title> <rect x="745" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(758,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(123,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 10:35-10:55 What I learned by writing test cases for GNU Hyperbole</title> <rect x="149" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(178,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(216,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 12:45- 1:05 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="352" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(381,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 1:20- 1:30 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="407" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(420,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 1:45- 2:25 Windows into Freedom</title> <rect x="447" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(507,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 2:40- 3:00 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="533" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(562,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 3:15- 3:35 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="588" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(617,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg>
+
+
+### Option B: Keep [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") on the first track, and group [devel](https://emacsconf.org/2023/talks/devel "Emacs development updates") and [core](https://emacsconf.org/2023/talks/core "Emacs core development: how it works") on the second track.
+
+We can encourage people to check out the different tracks in the opening remarks.
+
+- world: Ends at 14:55 after 11:30
+
+<svg width="800" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(13,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(28,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(76,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(130,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(169,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/taming" title="Taming things with Org Mode" data-slug="taming"> <title> 11:05-11:15 Taming things with Org Mode</title> <rect x="196" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(209,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> taming</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(264,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 12:45-12:55 Emacs turbo-charges my writing</title> <rect x="352" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(365,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:10- 1:20 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="392" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(405,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:35- 1:55 Collaborative data processing and documenting using org-babel</title> <rect x="431" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="yellow"></rect> <g transform="translate(460,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:05- 2:25 How I play TTRPGs in Emacs</title> <rect x="478" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(507,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:40- 3:00 Org-Mode workflow: informal reference tracking</title> <rect x="533" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="green"></rect> <g transform="translate(562,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:10- 3:20 (Un)entangling projects and repos</title> <rect x="580" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(593,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:40- 4:50 Saturday closing remarks</title> <rect x="721" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(734,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(107,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Improving access to AI-assisted literate programming with voice control" data-slug="voice"> <title> 10:20-10:40 Improving access to AI-assisted literate programming with voice control</title> <rect x="125" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(154,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(209,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with Overlays" data-slug="overlay"> <title> 12:45- 1:05 Improving compiler diagnostics with Overlays</title> <rect x="352" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(381,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:20- 1:30 Editor Integrated REPL Driven Development for all languages</title> <rect x="407" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(420,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 1:45- 2:25 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="447" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(507,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 2:35- 2:55 GNU Emacs: A World of Possibilities</title> <rect x="525" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="red"></rect> <g transform="translate(554,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:10- 3:20 Emacs development updates</title> <rect x="580" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(593,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 3:30- 4:10 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="611" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(671,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 3:35- 4:15 Emacs core development: how it works</title> <rect x="619" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(679,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,200)"> <title> Schedule for Sunday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(5,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(36,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(91,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/parallel" title="Parallel Text Replacement: Does P = NP?" data-slug="parallel"> <title> 10:10-10:20 Parallel Text Replacement: Does P = NP?</title> <rect x="109" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(122,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(162,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(272,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 12:45- 1:25 Emacs MultiMedia System (EMMS)</title> <rect x="352" y="15" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(412,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/steno" title="Programming at 200 wpm" data-slug="steno"> <title> 1:40- 2:10 Programming at 200 wpm</title> <rect x="439" y="15" opacity="0.8" width="47" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(484,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:20- 2:30 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="501" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(514,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/hn" title="The many ways to browse Hacker News from Emacs" data-slug="hn"> <title> 3:00- 3:10 The many ways to browse Hacker News from Emacs</title> <rect x="564" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(577,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hn</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web" data-slug="web"> <title> 3:00- 3:40 Emacs saves the Web</title> <rect x="564" y="15" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(624,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(679,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(718,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(123,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 10:35-10:55 What I learned by writing test cases for GNU Hyperbole</title> <rect x="149" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(178,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(216,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 12:45- 1:05 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="352" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(381,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 1:20- 1:30 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="407" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(420,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 1:45- 2:25 Windows into Freedom</title> <rect x="447" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(507,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 2:40- 3:00 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="533" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(562,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 3:15- 3:35 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="588" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(617,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg>
+
+
+### Other ideas?
+
+Feel free to suggest something!
+
+Notes:
+
+- [sharing](https://emacsconf.org/2023/talks/sharing "Sharing Emacs is Caring Emacs: Emacs education and why I embraced video") is nice to pair with [mentor](https://emacsconf.org/2023/talks/mentor "Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)") and [hn](https://emacsconf.org/2023/talks/hn "The many ways to browse Hacker News from Emacs") and might be a good general-audience keynote-type thing as well. I don&rsquo;t want to schedule [core](https://emacsconf.org/2023/talks/core "Emacs core development: how it works") to compete with it.
+
+
+<a id="three-tracks"></a>
+
+## DONE Test the idea of three tracks and more aligned times :decision:
+
+Decision: We&rsquo;ll stick with the two-track schedule for now because it&rsquo;s
+more likely, and we&rsquo;ll adjust as we get closer to the conference
+depending on speaker submissions and on volunteer availability.
+
+Note: Let&rsquo;s see if we can decide on this by <span class="timestamp-wrapper"><span class="timestamp">[2023-10-13 Fri] </span></span> so that we can
+e-mail the draft schedules to people.
+
+Compared to [two-track schedule](#draft-schedule):
+
+What if we have three tracks instead?
+
+- Two-track advantages as in EmacsConf 2022:
+ - Fewer volunteers needed (host, IRC, pad)
+ - Can do with existing computing power (instead of spinning up another node for VNC+OBS)
+ - Less fear of missing out for participants
+ - votes: zaeph
+- Three-track advantages:
+ - More space between talks for streaming the Q&A
+ - Easier to explain the schedule
+ - More logical grouping
+ - Ends earlier, which is easier for participants from Europe
+ - votes: max (Three tracks is the best policy if you’re more than 75% sure that you can round up the volunteers)
+- [Three tracks just for Sunday morning](#three-tracks-sun-am):
+ - Allows us to have 20 minutes between talks instead of 15
+ - Might be easier to test the idea for just one part of the conference
+
+
+<a id="three-tracks-sun-am"></a>
+
+### Three tracks for Sunday morning?
+
+- unentangling: Starts at 14:35 before 15:00
+- world: Ends at 16:20 after 11:30
+- Missing talks: core
+
diff --git a/2023/organizers-notebook/index.org b/2023/organizers-notebook/index.org
new file mode 100644
index 00000000..321e6eea
--- /dev/null
+++ b/2023/organizers-notebook/index.org
@@ -0,0 +1,2555 @@
+# [[elisp:(progn (memoize 'emacsconf-get-talk-info "5 seconds") (org-md-export-to-markdown) (memoize-restore 'emacsconf-get-talk-info))][Export this file to Markdown]]
+#+TAGS: emacsconf
+# [[elisp:(memoize 'emacsconf-get-talk-info "5 seconds")][Memoize emacsconf-get-talk-info]] - [[elisp:(memoize-restore 'emacsconf-get-talk-info)][Unmemoize]]
+#+todo: TODO(t) SOMEDAY STARTED INPROGRESS(i) WAITING(w) STANDBY(s) BLOCKED(b) | DONE(x) CANCELLED(c)
+#+OPTIONS: h:6 toc:nil num:nil ':t
+#+PROPERTY: header-args :results silent :exports code :tangle yes
+#+EXPORT_FILE_NAME: ../organizers-notebook.md
+#+PROPERTY: QUANTIFIED Emacs
+
+#+begin_export md
+<!-- organizers-notebook.md is exported from organizers-notebook/index.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2023/organizers-notebook/index.org](/2023/organizers-notebook/index.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/).
+#+end_export
+
+#+NAME: list-headings
+#+begin_src emacs-lisp :results value replace :exports results :eval never-export :var heading="Help wanted" :var match="helpwanted"
+(emacsconf-surround
+ (concat heading ":\n\n")
+ (string-join
+ (delq nil
+ (org-map-entries
+ (lambda ()
+ (when (and (org-entry-is-todo-p) (not (org-entry-is-done-p)))
+ (format "- %s %s\n"
+ (org-link-make-string
+ (concat "#" (org-entry-get (point) "CUSTOM_ID"))
+ (org-entry-get (point) "ITEM"))
+ (emacsconf-surround
+ "(by "
+ (and (org-entry-get (point) "DEADLINE")
+ (replace-regexp-in-string "[<>]" "" (org-entry-get (point) "DEADLINE")))
+ ")"
+ ""))))
+ match nil))
+ "")
+"" "")
+#+end_src
+
+#+RESULTS: list-headings
+:results:
+Help wanted:
+
+- [[#audio][Find volunteers for audio processing (normalization, noise reduction) and document the process]]
+- [[#eval-video-sync][Video editing: the eval talk is a little bit out of sync]] (by 2023-11-15 Wed)
+:end:
+
+#+RESULTS:
+:results:
+Help wanted:
+
+- [[#lowres][Figure out a better way to handle 480p stream]]
+:end:
+
+#+CALL: list-headings(heading="Decisions to make", match="decision")
+
+#+RESULTS:
+:results:
+:end:
+
+#+TOC: headlines 2
+
+* Timeline
+:PROPERTIES:
+:CUSTOM_ID: timeline
+:END:
+
+
+| CFP | [2023-06-26 Mon] |
+| CFP deadline | [2023-09-14 Thu] |
+| Speaker notifications | [2023-09-25 Mon] |
+| *Publish schedule* | [2023-10-25 Wed] |
+| Video submission deadline | [2023-11-04 Sat] |
+| EmacsConf | [2023-12-02 Sat], [2023-12-03 Sun] |
+
+Last year, these were the actual dates:
+- July 17: CFP sent
+- Sept 18: Original CFP deadline
+- Sept 30: CFP closed after extension
+- Oct 1: acceptances sent
+
+** TODO Dry run
+SCHEDULED: <2023-10-28 Sat>
+:PROPERTIES:
+:CUSTOM_ID: dry-run
+:END:
+** TODO Dry run with more volunteers
+SCHEDULED: <2023-11-11 Sat>
+:PROPERTIES:
+:CREATED: [023-10-13 Fri 20:5]
+:CUSTOM_ID: dry-run-2
+:END:
+* About this document
+:PROPERTIES:
+:CUSTOM_ID: about-this-doc
+:END:
+
+Tags:
+- =conforg=: Requires access to private conf.org repository
+* Communications plan
+:PROPERTIES:
+:CUSTOM_ID: comms
+:END:
+
+Objectives:
+- keep everyone in the loop without them feeling like they're overloaded
+
+Speakers:
+- [X] Send all speakers backstage access and upload instructions
+- [ ] Send all speakers check-in instructions
+
+Volunteers:
+- [X] Send captioning volunteers the backstage info
+- [ ] Send past captioning volunteers an invitation to participate - ask when there's a lot of load
+- [ ] Ask for help with audio processing
+** Next emacsconf-org update
+SCHEDULED: <2023-10-21 Sat>
+:PROPERTIES:
+:CUSTOM_ID: emacsconf-org-2023-10-21
+:END:
+
+backstage
+
+volunteers
+
+help wanted:
+
+audio processing
+
+intros
+
+* Good/better/best
+:PROPERTIES:
+:CUSTOM_ID: good-better-best
+:END:
+
+This table makes it easier to move the slider depending on who wants
+to volunteer and how much we can get done. At some point, we'll figure
+out how to track our current status so we know what we need to
+scramble to do in order to get the conference off the ground. *bold*
+is our current goal. Feel free to volunteer for anything that
+interests you!
+
+| | Good | Better | Best |
+| Autopilot | offset TRAMP timers | Crontab | Can be toggled |
+| 480p | Someone's computer | Separate node | Ansible setup |
+| Watch instructions | Embed | Reminder to prefer mpv | |
+| Audio | As is | Normalized | Noise reduction |
+| Intros | Standard, recorded | Reviewed by speakers in backstage | More details/context |
+
+* Phases
+:PROPERTIES:
+:CUSTOM_ID: phases
+:END:
+** DONE Draft CFP
+CLOSED: [2023-09-22 Fri 09:49]
+:PROPERTIES:
+:CUSTOM_ID: cfp
+:END:
+*** How to mark pages as drafts
+
+Put inside double square brackets: =!template id=pagedraft=
+
+*** Considerations
+
+We could see if there are parts of the CFP that we can remove or
+postpone. Here are some thoughts:
+
+- We might not need the 10+20+40 structure in the proposal. We did
+ that before because people tend to propose longer talks, and we had
+ to do lots of e-mail coordination in order to squeeze everything
+ into one track. If we're doing multiple streams, there's less time
+ pressure, so we might not need to confuse people with those
+ requirements. I think it would still be good to nudge people towards
+ 20 minutes for their prerecorded presentations (separate time for
+ Q&A) instead of 40 minutes, because it's good for people's attention
+ spans. As an incentive to consider a 5-10 minute talk, we can say
+ that 5-10 minute videos can be played extra times during the
+ conference to fill gaps.
+ - Choices:
+ - Keep the 10+20+40 structure so that people who want to propose
+ longer talks are nudged to think about shorter versions
+ - Strongly nudge people towards 20-minute talks, with repeats as
+ the incentive for shorter talks and extra coordination/waiting
+ needed for longer talks. People propose just the talk length
+ they want (and can optionally propose other talk lengths if they
+ want to be considered for them).
+- We added emergency contact info, public contact info, pronouns, and
+ introduction to the submission form because we ended up going back
+ and forth with people in previous years, and sometimes we had
+ incomplete info and were panicking about how to reach people during
+ the conference. We could drop this from the submission form and do a
+ separate speaker information form.
+ - Choices:
+ - Talk submission, then speaker information form: less
+ intimidating for speakers
+ - Everything in one: easier for organizers
+
+*** Previous years
+
+- Ask for public e-mail or contact information, IRC handle in CFP
+ - Added to submit page.
+- Be even more stringent about the 10/20/40-min splits. A lot of
+ speakers still default to the 20- or 40-min formats without
+ providing us shorter formats, and that puts strain on our schedule
+ and requires us to use a different template for the notification
+ (which can be confusing). We need to stress that not respecting the
+ format makes it harder not only for the organizers, but also for the
+ speakers themselves (since they will have to rethink their
+ presentation). Maybe we can have an e-mail template for a quick
+ reply that says something like "Just in case we need to squeeze
+ talks into shorter times, could you please also propose an outline
+ for a possible 10-minute talk that could get people interested in
+ your topic and point them to where they can find out more?"
+ - sachac: I'd love to experiment with rolling acceptances. If people
+ have a good 10-20 minute version of their talk and we want to
+ accept it in the program, it would be nice to be able to say yes
+ early so that they can start working on it. We can work with any
+ duplication of content in later proposals.
+- Two people is the sweet number of reviewers to have for the
+ proposals before sending the notifications, and there’d be
+ diminishing returns with more. Two is enough to release the pressure
+ on SCHED, verify the metadata (esp. speaker availability), and
+ suggest a different ordering where appropriate. It can take a long
+ time to comb through the proposals (roughly 10 proposals per hour),
+ and whilst it’d be difficult to justify more in-depth reviewers,
+ other orgas can do a shallow-pass to catch red-flags or discuss the
+ submissions as they come in. Other organizers can always chime in on
+ topics they particularly care about so that their encouraging
+ comments or suggestions can be included in the acceptance e-mail.
+ - sachac: Who wants to help me with this?
+- We extended CFP-end by two weeks this year, but that made it coincide
+ with speaker-notifs, and that’s awkward. Next time, we should only
+ extend the CFP by one week to avoid having to scramble with the
+ schedule until the very last day.
+ - Proposed dates in https://emacsconf.org/2023/cfp/ have similar
+ spacing, so yeah, we'll want to extend by only one week.
+- Some people assume that they have to suggest longer formats even if
+ they intend their talks to be 10′ or 20′. We should change the
+ wording on the CFP to ask them to only provide alternatives for
+ shorter formats, not longer.
+ - Added a brief note to CFP.
+- It was hard to squeeze all the org/hyperbole talk on day-1.
+ Generally, the people who submit these kinds of talk come from all
+ over the world, and US mornings are more accommodating than US
+ evenings when it comes to timezones. We might consider having two org
+ *mornings* rather than an org *day*; it would give us more flexibility
+ with those talks.
+ - Let's see if we can do two streams again. That was fun.
+- We’re starting to reach critical mass on the org-talks. We might want
+ to consider splitting the org-talks and the dev-talks into two
+ distinct events to allow them to grow independently.
+ - Let's see if we can do two streams again. That was fun.
+- We should associate time-of-day with CFP-deadline; otherwise, the
+ scheduler has to be on edge until the very end of the day. It’s worse
+ this year because we made CFP-end coincide with speaker-notif, so this
+ might not be as much of a problem next year.
+ - If we do rolling acceptances and we extend by at most one week
+ instead of two, this should be fine.
+- It’s easier for us to extend beyond 5pm than to go before 9am
+ (especially for the West coast). Extending beyond 5pm puts strain on
+ European organizers and volunteers, though.
+ - Time pressure should be alleviated with multiple streams.
+- Sometimes, ikiwiki on front0 took a lot of time to process the new
+ commits. sachac assumed this is due to a faulty regex parsing. We
+ should be able to find out more by looking at the logs from ikiwiki
+ after a slow commit.
+ - Seems speedy at the moment.
+- Ask for preferred timezone in CFP
+ - Added to availability.
+- Check with John Wiegley re: schedule - we always happen to coincide
+ with his work trips
+ - I checked with him and the people at his work don't have a schedule
+ yet, so we should go ahead and plan
+*** Lessons learned for next year
+
+- Maybe incentivize proper timezone specification by saying we can translate times to their local time?
+- Make sure to include cfp.org as an attachment instead of inline
+*** Other thoughts
+- sachac: bandali likes having the commitment to freedom section in the CFP as a form of activism
+- sachac: I thought about pulling the deadline back to Sept 1, but it might be
+ good to keep it at Sept 14 so that anyone who tends to work with the
+ schoolyear can still have a little time to work on it.
+
+** DONE Distribute CFP
+CLOSED: [2023-09-22 Fri 09:50]
+:PROPERTIES:
+:CUSTOM_ID: distrib-cfp
+:END:
+*** DONE Add proposal review volunteers to emacsconf-submit
+CLOSED: [2023-06-25 Sun 19:35]
+- https://lists.gnu.org/mailman/admin/emacsconf-submit/members/add
+- Ask volunteers to e-mail an SSH public key so they can be added via the gitolite-admin repo to the conf.org repo for the year
+*** First announcement
+SCHEDULED: <2023-06-26 Mon>
+- Remove draft tags :sachac:
+- Post on emacsconf-discuss, emacs-tangents :bandali: :zaeph:
+- Sticky on reddit.com/r/emacs
+- Post in Emacs News :sachac:
+
+*** Reminder
+
+** DONE Process submissions
+CLOSED: [2023-09-22 Fri 09:50]
+:PROPERTIES:
+:CUSTOM_ID: submission-process
+:FUNCTION: emacsconf-mail-review
+:END:
+
+- Proposal received: sachac adds it to this document with status of PROPOSED
+ - Fields:
+ #+begin_example
+ EMERGENCY, Q_AND_A, AVAILABILITY, NAME, PRONOUNS, TIME, MIN_TIME, MAX_TIME, SLUG, EMAIL, NAME_SHORT, CUSTOM_ID, TRACK, TIMEZONE, CATEGORY, DATE_SUBMITTED
+ #+end_example
+- jc doublechecks that the data has been correctly captured (especially EMAIL and AVAILABILITY)
+- People review it (sachac, jc, etc.) and weigh in
+- Proposal accepted: sachac e-mails the speaker and sets status to WAITING_FOR_EMAIL_CONFIRM
+- E-mail confirmation received: log it in the logbook
+- Schedule set: sachac e-mails the speaker and sets status to WAITING_FOR_SCHED_CONFIRM
+*** 2023-08-14 EmacsConf 2023 CFP progress report (8 talks accepted so far, 1 to review, 6 todo)
+SCHEDULED: <2023-08-14 Mon>
+:PROPERTIES:
+:CUSTOM_ID: cfp-progress
+:END:
+
+#+begin_comment
+https://emacsconf.org/blog/2023-08-14-cfp-progress/
+#+end_comment
+
+The end of the EmacsConf 2023 call for participation is one month away
+(Sept 14; https://emacsconf.org/2023/cfp/). Whee! So far, we've sent
+early acceptances to the following talks and added them to the program
+on the wiki (https://emacsconf.org/2023/talks):
+
+#+begin_src emacs-lisp :results replace table :exports results :eval never-export
+(append
+ '(("Duration" "Title" "Speaker"))
+ (mapcar (lambda (o)
+ (list (plist-get o :duration)
+ (plist-get o :title)
+ (plist-get o :speakers)))
+ (seq-filter (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC")) (emacsconf-get-talk-info))))
+#+end_src
+
+#+RESULTS:
+:results:
+| Duration | Title | Speaker |
+| 10 | An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp | Chung-hong Chan |
+| 20 | Authoring and presenting university courses with Emacs and a full libre software stack | James Howell |
+| 20 | Org-Mode workflow: informal reference tracking | Christopher Howard |
+| 20 | GNU Emacs for electronics, note-taking, and as lightweight IDE | Anand Tamariya |
+| 10 | A modern Emacs look-and-feel without pain | Pedro A. Aranda |
+| 10 | Writing a language server in OCaml for Emacs, fun, and profit | Austin Theriault |
+| 20 | LLM clients in Emacs, functionality and standardization | Andrew Hyatt |
+| 10 | The many ways to browse Hacker News from Emacs | Mickael Kerjean |
+:end:
+
+We sent the speakers https://emacsconf.org/2023/prepare/ in case
+anyone wants to get started on their presentations.
+
+There's one talk that's waiting for feedback on the emacsconf-submit
+before we send the early acceptance in about a week:
+
+#+begin_src emacs-lisp :results replace table :exports results :eval never-export
+(append
+ '(("Duration" "Title" "Speaker"))
+ (mapcar (lambda (o)
+ (list (plist-get o :duration)
+ (plist-get o :title)
+ (plist-get o :speakers)))
+ (seq-filter (lambda (o) (string= (plist-get o :status) "TO_REVIEW")) (emacsconf-get-talk-info))))
+#+end_src
+
+#+RESULTS:
+:results:
+| Duration | Title | Speaker |
+| 20 | one.el: the static site generator for Emacs Lisp Programmers | Tony Aldon |
+:end:
+
+There are several talk proposals that are in progress (need to
+coordinate, don't have speaker releases / full details / etc.):
+
+#+begin_src emacs-lisp :results replace table :exports results :eval never-export
+(append
+ '(("Title" "Speaker"))
+ (mapcar (lambda (o)
+ (list (plist-get o :title)
+ (plist-get o :speakers)))
+ (seq-filter (lambda (o) (string= (plist-get o :status) "TODO")) (emacsconf-get-talk-info))))
+#+end_src
+
+#+RESULTS:
+:results:
+| Title | Speaker |
+| Emacs MultiMedia System (EMMS) | Yoni Rabkin |
+| Emacs development updates | John Wiegley |
+| Watch Over Our Folders | Bastien Guerry |
+| Emacs community information sharing? | Jake B |
+| Emacs saves the Web | Yuchen Pei |
+| How to build an Emacs 2: Revenge of the Lem | Fermin |
+:end:
+
+This time last year, we had 2 proposals, with most of the proposals
+coming in at the end of the CFP. This was usually when we started
+panicking about not having lots of proposals, but I think we can skip
+stressing about it this year. <laugh> Even with the program as it is
+now, we'd already have a pretty fun EmacsConf. Can't wait to see what
+it'll look like when more people get their proposals in!
+
+bandali, maybe we can do a 1-month and/or 2-week reminder about the
+CFP deadline? I'd like to see if we can get away without officially
+extending the CFP this time.
+
+Sacha
+*** Lessons learned from the CFP acceptance phase :lessons:
+
+- Early acceptances are nice. A few got comments within the 1-week
+ period, which helped refine the talk idea more. We probably don't
+ need to make this a 2-week review period.
+- It's a good idea to send the review and acceptance e-mails even to
+ fellow organizers/volunteers, even if they're quite familiar with
+ the page already. =)
+- We successfully didn't panic about submissions, yay! It was nice to
+ be able to draft schedules as we went along, and to compare the
+ dates with last year's trends.
+- I added some more automation for including a template in a mail
+ reply. Changing the subject to =EmacsConf 2023 acceptance: talk
+ title= made it easier to verify that talks had been responded to.
+- I added =emacsconf-mail-add-submission= for parsing submissions from
+ e-mail and adding them to =emacsconf-org-file=. That was nice
+ because it automatically saved =EMAIL=, =DATE_SUBMITTED=, and
+ =DATE_TO_NOTIFY=.
+- Displaying the schedule as a list with time constraints made it
+ easier to verify the time constraints and to see how I can fix
+ errors.
+- Drafting the schedule in the public organizers notebook was nice
+ because I could share that with the speakers and other volunteers.
+*** DONE E-mail the speakers the upload and backstage instructions
+CLOSED: [2023-10-16 Mon 12:47]
+*** Handling a late submission
+
+doc
+
+- [ ] Add talk entry to conf.org
+- [ ] Add talk to schedule in organizers notebook
+- [ ] Add talk to the wiki
+- [ ] Send speaker backstage information, upload information, and schedule
+- [ ] Create BBB room
+- [ ] Record intro
+
+** Draft schedule for EmacsConf 2023
+:PROPERTIES:
+:CUSTOM_ID: draft-schedule
+:END:
+
+These times are in EST (GMT-5).
+
+#+NAME: schedule
+#+begin_src emacs-lisp :results value replace :exports none :eval never-export
+(require 'emacsconf)
+(require 'emacsconf-schedule)
+(setq emacsconf-schedule-tracks
+ '((:label "Saturday"
+ :start "2023-12-02 9:00"
+ :end "2023-12-02 18:00"
+ :tracks ("General" "Development"))
+ (:label "Sunday"
+ :start "2023-12-03 9:00"
+ :end "2023-12-03 18:00"
+ :tracks ("General" "Development"))))
+(let ((emacsconf-schedule-default-buffer-minutes 10)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 15)
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-use-absolute-url t)
+ (emacsconf-schedule-strategies '(emacsconf-schedule-allocate-buffer-time
+ emacsconf-schedule-copy-previous-track))
+ (emacsconf-schedule-validation-functions
+ '(emacsconf-schedule-validate-time-constraints
+ ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered
+ emacsconf-schedule-validate-all-talks-present
+ emacsconf-schedule-validate-no-duplicates)))
+ (setq emacsconf-schedule-plan
+ '(("GEN Saturday, Dec 2" :start "2023-12-02 09:00" :set-track "General")
+ sat-open
+ adventure
+ uni
+ teaching
+ table
+ (one :start "11:30")
+ (lunch :start "12:00")
+ writing
+ nabokov
+ collab
+ solo
+ ref
+ unentangling
+ devel
+ core
+ (sat-close)
+ ("DEV Saturday, Dec 2" :start "2023-12-02 10:00" :set-track "Development")
+ (matplotllm)
+ (voice)
+ (llm)
+ (lunch :start "12:00")
+ (overlay)
+ (eval)
+ (repl)
+ doc
+ (windows)
+ ("GEN Sunday, Dec 3" :start "2023-12-03 09:00" :set-track "General")
+ sun-open
+ hyperamp
+ koutline
+ (parallel)
+ eat
+ poltys
+ cubing
+ (lunch :start "12:00")
+ (emms)
+ (steno)
+ mentor
+ break
+ web
+ sharing
+ (sun-close :start "16:30")
+ ("DEV Sunday, Dec 3" :start "2023-12-03 10:00" :set-track "Development")
+ scheme
+ (world)
+ (flat)
+ (emacsen)
+ (lunch :start "12:00")
+ gc
+ hyperdrive
+ lspocaml
+ test
+ (emacsconf)
+ ))
+ (setq emacsconf-schedule-draft (emacsconf-schedule-prepare (emacsconf-schedule-inflate-sexp emacsconf-schedule-plan)))
+ (prog1 (string-join (emacsconf-schedule-validate emacsconf-schedule-draft) "\n")
+ (let ((emacsconf-schedule-svg-modify-functions
+ '(;emacsconf-schedule-svg-color-by-availability
+ emacsconf-schedule-svg-color-by-status)))
+ (with-temp-file (expand-file-name "schedule.svg" (file-name-directory emacsconf-org-file))
+ (svg-print (emacsconf-schedule-svg 800 300 emacsconf-schedule-draft)))
+ (with-temp-file (expand-file-name "schedule.svg" (expand-file-name "organizers-notebook" (expand-file-name emacsconf-year emacsconf-directory)))
+ (svg-print (emacsconf-schedule-svg 800 300 emacsconf-schedule-draft))))
+ (clear-image-cache)))
+#+end_src
+
+#+RESULTS: schedule
+:results:
+:end:
+
+[[my-include:schedule.svg?wrap=export html]]
+
+- Legend: dashed line means non-BBB Q&A; light gray means penciled-in talk; yellow means video already submitted and being processed
+
+
+*** Draft schedule as a list
+:PROPERTIES:
+:CUSTOM_ID: schedule-list
+:END:
+
+ #+NAME: draft-schedule-table
+ #+begin_src emacs-lisp :results raw replace :exports results :eval never-export
+ (string-join
+ (seq-keep (lambda (o) (when (plist-get o :slug)
+ (concat "- "
+ (replace-regexp-in-string "[<>]" ""
+ (plist-get o :scheduled))
+ " "
+ (if (string-match "after the event" (or (plist-get o :q-and-a) "")) "- no live Q&A - "
+ (emacsconf-surround "- " (emacsconf-schedule-format-time-constraint o) " - " ""))
+ (format "[[emacsconf:%s][%s]]: "
+ (plist-get o :slug)
+ (plist-get o :slug))
+ (plist-get o :title)
+ (emacsconf-surround " ("
+ (plist-get o :speakers)
+ ") " ""))))
+ (sort emacsconf-schedule-draft (lambda (a b) (string< (plist-get a :scheduled) (plist-get b :scheduled))))) "\n")
+ #+end_src
+
+ #+RESULTS: draft-schedule-table
+ - 2023-12-02 Sat 09:00-09:10 [[emacsconf:sat-open][sat-open]]: Saturday opening remarks
+ - 2023-12-02 Sat 09:10-09:20 - <= 10:00 - [[emacsconf:adventure][adventure]]: An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp (Chung-hong Chan)
+ - 2023-12-02 Sat 09:30-09:50 [[emacsconf:uni][uni]]: Authoring and presenting university courses with Emacs and a full libre software stack (James Howell)
+ - 2023-12-02 Sat 10:00-10:10 - <= 10:30 - [[emacsconf:matplotllm][matplotllm]]: MatplotLLM, iterative natural language data visualization in org-babel (Abhinav Tushar)
+ - 2023-12-02 Sat 10:05-10:25 - on 2023-12-02 - [[emacsconf:teaching][teaching]]: Teaching computer and data science with literate programming tools (Marcus Birkenkrahe)
+ - 2023-12-02 Sat 10:20-10:40 [[emacsconf:voice][voice]]: Enhancing productivity with voice computing (Blaine Mooers)
+ - 2023-12-02 Sat 10:40-10:50 - <= 11:00 - [[emacsconf:table][table]]: Who needs Excel? Managing your students qualifications with org-table (Daniel Molina)
+ - 2023-12-02 Sat 10:55-11:15 - >= 10:00 - [[emacsconf:llm][llm]]: LLM clients in Emacs, functionality and standardization (Andrew Hyatt)
+ - 2023-12-02 Sat 11:05-11:15 - <= 15:00 - [[emacsconf:taming][taming]]: Taming things with Org Mode (Gergely Nagy (algernon))
+ - 2023-12-02 Sat 11:30-11:50 - <= 13:00 - [[emacsconf:one][one]]: one.el: the static site generator for Emacs Lisp Programmers (Tony Aldon)
+ - 2023-12-02 Sat 13:00-13:10 [[emacsconf:writing][writing]]: Emacs turbo-charges my writing (Jeremy Friesen)
+ - 2023-12-02 Sat 13:00-13:20 - >= 11:00 - [[emacsconf:overlay][overlay]]: Improving compiler diagnostics with overlays (Jeff Trull)
+ - 2023-12-02 Sat 13:25-13:35 [[emacsconf:nabokov][nabokov]]: Why Nabokov would use Org-Mode if he were writing today (Edmund Jorgensen)
+ - 2023-12-02 Sat 13:35-13:45 [[emacsconf:eval][eval]]: Editor Integrated REPL Driven Development for all languages (Musa Al-hassy)
+ - 2023-12-02 Sat 13:50-14:10 - no live Q&A - [[emacsconf:collab][collab]]: Collaborative data processing and documenting using org-babel (Jonathan Hartman, Lukas C. Bossert)
+ - 2023-12-02 Sat 14:00-15:00 [[emacsconf:repl][repl]]: REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ (Eduardo Ochs)
+ - 2023-12-02 Sat 14:20-14:40 - >= 12:00 - [[emacsconf:solo][solo]]: How I play TTRPGs in Emacs (Howard Abrams)
+ - 2023-12-02 Sat 14:55-15:15 - >= 13:00 - [[emacsconf:ref][ref]]: Org-Mode workflow: informal reference tracking (Christopher Howard)
+ - 2023-12-02 Sat 15:10-15:50 [[emacsconf:doc][doc]]: Literate Documentation with Emacs and Org Mode (Mike Hamrick)
+ - 2023-12-02 Sat 15:25-15:35 - between 15:00-16:00 - [[emacsconf:unentangling][unentangling]]: (Un)entangling projects and repos (Alexey Bochkarev)
+ - 2023-12-02 Sat 15:45-15:55 - >= 12:00 - [[emacsconf:devel][devel]]: Emacs development updates (John Wiegley)
+ - 2023-12-02 Sat 16:05-16:45 [[emacsconf:windows][windows]]: Windows into Freedom (Corwin Brust)
+ - 2023-12-02 Sat 16:10-16:50 [[emacsconf:core][core]]: Emacs core development: how it works (Stefan Kangas)
+ - 2023-12-02 Sat 17:05-17:15 [[emacsconf:sat-close][sat-close]]: Saturday closing remarks
+ - 2023-12-03 Sun 08:59-09:04 [[emacsconf:sun-open][sun-open]]: Sunday opening remarks
+ - 2023-12-03 Sun 09:05-09:25 - <= 12:00 - [[emacsconf:hyperamp][hyperamp]]: Top 10 ways Hyperbole amps up Emacs (Robert Weiner)
+ - 2023-12-03 Sun 09:40-10:00 [[emacsconf:koutline][koutline]]: Using Koutline for stream of thought journaling (Matthew Jorgensen (PlasmaStrike))
+ - 2023-12-03 Sun 10:00-10:20 - <= 12:00 - [[emacsconf:scheme][scheme]]: Bringing joy to Scheme programming (Andrew Tropin)
+ - 2023-12-03 Sun 10:10-10:25 - <= 11:00 - [[emacsconf:parallel][parallel]]: Parallel text replacement (Lovro, Valentino Picotti)
+ - 2023-12-03 Sun 10:35-10:45 - <= 13:00 - [[emacsconf:eat][eat]]: Eat and Eat powered Eshell, fast featureful terminal inside Emacs (Akib Azmain Turja)
+ - 2023-12-03 Sun 10:35-10:55 - <= 11:30 - [[emacsconf:world][world]]: GNU Emacs: A World of Possibilities (Anand Tamariya)
+ - 2023-12-03 Sun 11:00-11:20 - <= 13:00 - [[emacsconf:poltys][poltys]]: The browser in a buffer (Michael Bauer)
+ - 2023-12-03 Sun 11:10-11:20 - between 11:00-13:00 - [[emacsconf:flat][flat]]: A modern Emacs look-and-feel without pain (Pedro A. Aranda)
+ - 2023-12-03 Sun 11:35-11:55 - <= 17:00 - [[emacsconf:cubing][cubing]]: Speedcubing in Emacs (wasamasa)
+ - 2023-12-03 Sun 11:35-11:55 - <= 13:00 - [[emacsconf:emacsen][emacsen]]: The Emacsen family, the design of an Emacs and the importance of Lisp (Fermin)
+ - 2023-12-03 Sun 13:00-13:35 - <= 14:00 - [[emacsconf:gc][gc]]: emacs-gc-stats: Does garbage collection actually slow down Emacs? (Ihor Radchenko)
+ - 2023-12-03 Sun 13:00-13:40 [[emacsconf:emms][emms]]: Emacs MultiMedia System (EMMS) (Yoni Rabkin)
+ - 2023-12-03 Sun 13:50-14:30 - >= 11:00 - [[emacsconf:hyperdrive][hyperdrive]]: hyperdrive.el: Peer-to-peer filesystem in Emacs (Joseph Turner and Protesilaos Stavrou)
+ - 2023-12-03 Sun 13:55-14:25 [[emacsconf:steno][steno]]: Programming with steno (Daniel Alejandro Tapia)
+ - 2023-12-03 Sun 14:35-14:45 [[emacsconf:mentor][mentor]]: Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs) (Jeremy Friesen)
+ - 2023-12-03 Sun 14:45-15:00 [[emacsconf:lspocaml][lspocaml]]: Writing a language server in OCaml for Emacs, fun, and profit (Austin Theriault)
+ - 2023-12-03 Sun 15:10-15:40 - >= 15:00 - [[emacsconf:web][web]]: Emacs saves the Web (maybe) (Yuchen Pei)
+ - 2023-12-03 Sun 15:15-15:45 - >= 12:00 - [[emacsconf:test][test]]: What I learned by writing test cases for GNU Hyperbole (Mats Lidell)
+ - 2023-12-03 Sun 15:55-16:15 [[emacsconf:sharing][sharing]]: Sharing Emacs is Caring Emacs: Emacs education and why I embraced video (Jacob Boxerman)
+ - 2023-12-03 Sun 16:00-16:20 [[emacsconf:emacsconf][emacsconf]]: EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference (Sacha Chua)
+ - 2023-12-03 Sun 16:30-16:40 [[emacsconf:sun-close][sun-close]]: Sunday closing remarks
+*** Schedule announcements
+:PROPERTIES:
+:CUSTOM_ID: schedule-announcements
+:END:
+
+ - [2023-12-02 Sat] emacsconf:repl needs 60 minutes instead of 40, adjusting doc and windows
+ - [2023-12-01 Fri] emacsconf:gc needs 35 minutes, adjusting later talks (emacsconf:hyperdrive, emacsconf:lspocaml, emacsconf:test, emacsconf:emacsconf)
+ - [2023-12-01 Fri] emacsconf:windows now on Sat afternoon devel track and emacsconf:emacsconf now on Sunday afternoon devel track
+ - [2023-12-01 Fri] Cancelled emacsconf:taming
+ - [2023-11-29 Wed] Changed title for emacsconf:voice, changed emacsconf:table Q&A to after the conference
+
+*** Schedule notes
+:PROPERTIES:
+:CUSTOM_ID: schedule-notes
+:END:
+
+- *Schedule changes after the schedule FYI email from 2023-10-05*:
+ - [2023-11-29 Wed] Allocated 15 minutes to [[emacsconf:lspocaml]]
+ - [2023-11-23 Thu] Allocated 30 minutes to emacsconf:test
+ - [2023-11-14 Tue] Update emacsconf:steno title; add Prot to emacsconf:hyperdrive
+ - [2023-11-04 Sat] Moved emacsconf:emacsen earlier to accommodate live session, moved emacsconf:test later to accommodate travel
+ - [2023-10-31 Tue] Cancelled hn, added emacsconf:doc before emacsconf:emacsconf
+ - Moved [[emacsconf:hyperdrive][hyperdrive]] talk to general track; removed afternoon break. Changed emacsconf:solo, emacsconf:unentangling, emacsconf:ref, emacsconf:devel, emacsconf:sat-close, emacsconf:overlay, emacsconf:eval, emacsconf:repl, emacsconf:hyperdrive, and emacsconf:world, but none of the talks moved by 2 hours or more, so no extra e-mails needed for now.
+ - [2023-10-08 Sun] Added [[emacsconf:core]]. Moved [[emacsconf:hyperdrive]] to Sun afternoon.
+ - [2023-10-09 Mon] Renamed =extending= to emacsconf:world and moved it to the morning to accommodate IST.
+- Saturday on the General track: Org day + misc
+ - emacsconf:adventure is the first talk because of availability constraints; would be nice to connect it to emacsconf:solo
+ - emacsconf:uni for teaching, [[emacsconf:teaching]] is also related, and emacsconf:table for grading
+ - emacsconf:taming and emacsconf:one both deal with exports in some way. emacsconf:unentangling would be nice to add here, but that one needs to be in the afternoon because of availability constraints.
+ - emacsconf:writing is connected to emacsconf:nabokov (blog posts, novel). It's also a little connected to emacsconf:one (exporting a blog).
+ - emacsconf:collab and emacsconf:solo are amusing to pair together.
+ - [[emacsconf:unentangling]] and emacsconf:ref are also Org-related. emacsconf:ref would be nice to place together with emacsconf:nabokov, but that would move emacsconf:unentangling too late.
+ - [[emacsconf:devel]] is not Org-related, but probably good to share with everyone.
+- Saturday morning Development track: large language models, AI. Has to be morning because of emacsconf:matplotllm. emacsconf:llm is about general interfaces, so we can put that last. Could have a general LLM discussion after the talks. Can't swap it with Sunday morning because [[emacsconf:test]] should stick with [[emacsconf:hyperamp]] and emacsconf:koutline (Hyperbole talks), and the Hyperbole talks won't fit into Saturday morning
+- Saturday afternoon, developer track: REPLs, misc talks
+ - start off with developer tweaks: emacsconf:overlay (compilation), and then emacsconf:eval and emacsconf:repl are paired together
+ - emacsconf:hyperdrive: adding another file protocol, using HTTP APIs
+ - [[emacsconf:world]] might be replays of demos + Q&A session if people are interested
+- Sunday morning gen: Hyperbole (gen track, then crossing over to dev for testing) + misc talks
+ - Hyperbole mini-track is in the morning because of [[emacsconf:test]]'s availability constraints; emacsconf:hyperamp and emacsconf:koutline go before it. Try to avoid conflicts so they can attend each other's talks
+ - Sunday morning after emacsconf:test could be a fun extended "let's write tests together" session if someone wants to lead it
+ - emacsconf:parallel needs to go in the morning. Might be okay to include in the general talk.
+ - emacsconf:poltys and emacsconf:cubing aren't related to Hyperbole, but we need to fit them into the schedule somewhere. It would be nice to connect emacsconf:poltys (talking to web browsers from Emacs) to emacsconf:web (doing web stuff in Emacs instead), but emacsconf:poltys needs to be in the morning (which is pretty full) and emacsconf:web is in the afternoon because Yuchen is in Australia/Sydney.
+ - emacsconf:cubing can be something fun to transition to lunch, then.
+- Sunday afternoon gen: misc talks, community
+ - emacsconf:eat is about shells and running commands, so it's generally useful
+ - [[emacsconf:emms]] is a user+dev talk
+ - community theme (emacsconf:mentor, emacsconf:hn, emacsconf:sharing), with an aside for [[emacsconf:web]] (using Emacs as a client for stuff). [[emacsconf:sharing]] is possible closing keynote - encourage people to go out and explore/share all year? If not, emacsconf:web could be good for a closing talk - encouraging people to use Emacs for more stuff.
+- Sunday dev: misc dev talks
+ - Morning:
+ - emacsconf:test is related to the Hyperbole talks emacsconf:hyperamp and emacsconf:koutline, so we don't want to overlap with the Q&A for those talks
+ - emacsconf:flat, emacsconf:scheme, emacsconf:gc, emacsconf:flat, emacsconf:windows, emacsconf:emacsconf, emacsconf:steno
+ - emacsconf:emacsen is more high-level and can talk about other editors
+- checking with emacsconf:web and emacsconf:hn if ~3pm Sunday afternoon (~7am Mon local time) is okay with them. It would be nice to pair it with emacsconf:hn, which is nice to connect to emacsconf:mentor and emacsconf:web.
+- Thinking about the flow:
+ - General: Org day, then misc talks Sunday morning and part of Sunday afternoon. Ending with a focus on community and expanding Emacs. It would be nice to get people excited about connecting and sharing throughout the year.
+ - Dev: people who are really curious about AI can connect on
+ Saturday morning and keep the conversation going. Some programming
+ tweaks are grouped together. The rest are mostly based on
+ availability.
+- if the talks get cancelled, we can have an open meetup possibly with
+ breakout rooms
+- coordination notes:
+ - TODO emacsconf:uni, emacsconf:teaching, emacsconf:table are all about Emacs, Org Mode, and teaching
+ - TODO emacsconf:repl, emacsconf:eval
+ - emacsconf:hyperamp, emacsconf:koutline, and emacsconf:test are all in touch because they work on Hyperbole together
+ - emacsconf:hn and emacsconf:web
+ - [[emacsconf:unentangling]], [[emacsconf:taming]]?
+ - emacsconf:matplotllm, emacsconf:voice, emacsconf:llm (so they don't all have to define LLMs?)
+- The schedule doesn't have neat aligned slots on purpose so that
+ organizers can jump between streams if needed, and also because we
+ have so many awesome talks. Somehow people managed to handle the
+ schedule last year. =)
+- Next steps:
+ - Schedule: We'll e-mail the draft schedule to speakers so that they
+ can get a sense of where they are in the schedule, see if they
+ really want to make it to a conflicting session's Q&A live
+ (they'll have early access to the videos), etc.
+ - Infrastructure:
+ - Dust off and document infrastructure, processes
+ - Sort out access to media.emacsconf.org so that we can get the upload service up and running
+ - Draft brief intros for talks, keeping in mind that we're going to say them out loud
+ - Speakers will work on videos, and we can help with nudges/coordination if needed
+*** DONE E-mail all the speakers a link to the draft schedule
+CLOSED: [2023-10-05 Thu 15:38]
+so that they can confirm that I've got their availability correctly coded and ask for any adjustments in case they really want to attend someone else's Q&A session
+*** DONE Announce schedule publicly
+CLOSED: [2023-11-11 Sat 08:38] SCHEDULED: <2023-10-25 Wed>
+*** DONE Incorporate "About the speaker" info on the wiki pages :conforg:
+CLOSED: [2023-10-13 Fri 11:04]
+
+Good idea to include it because that gives people (a) more context on
+where a speaker is coming from, and (b) a feeling for the kinds of
+backgrounds and interests people have.
+*** TODO Follow up with people we haven't heard from in a while
+SCHEDULED: <2023-10-18 Wed>
+:PROPERTIES:
+:CUSTOM_ID: radio-silence
+:END:
+
+When do we want to do this?
+
+We don't have to worry too much, because we can offer them the option of doing it live,
+and we can have space in the schedule if they cancel last-minute.
+
+** Prepare for the conference
+:PROPERTIES:
+:CUSTOM_ID: status
+:END:
+
+#+BEGIN: columnview :id local :match "STATUS={.}" :format "%20ITEM %10TODO %20STATUS"
+| ITEM | TODO | STATUS |
+|-------------------------+------------+----------------------------------------------------------------------------------|
+| Upload | DONE | Ready to go |
+| Prerec | DONE | Ready to go |
+| Captions | INPROGRESS | Ready to go; waiting for videos and captions |
+| Backstage | DONE | Ready to go |
+| Test assets | DONE | test videos generated |
+| BBB | | redirects created, confirmed; next: e-mail speakers testing/checkin instructions |
+| VNC | DONE | confirmed access to emacsconf-gen and emacsconf-dev |
+| OBS | DONE | confirmed that gen and dev can stream |
+| Icecast | DONE | gen and dev confirmed with MPV |
+| MPV | DONE | confirmed that mpv can watch both streams |
+| Watch page | DONE | updated for 2023 |
+| Status page | DONE | ready to go |
+| Public media | DONE | confirmed, set to protected so that we can test publishing live |
+| Mumble | DONE | confirmed gen and dev can connect, receive audio |
+| Etherpad | DONE | Ready to go, pads created |
+| Pad proxy | DONE | Ready to go, pad.emacsconf.org works |
+| Overlays | DONE | generated and uploaded |
+| Intros | INPROGRESS | all intros recorded, should send them to speakers for review |
+| IRC channels | | Not yet started |
+| IRC talk info | | Not yet started |
+| Announcements | | Not yet started |
+| Publishing updates live | | Not yet started |
+| Autopilot | | Not yet started |
+| YouTube | | Not yet started |
+| Peertube | | Not yet started |
+| 480p | | Delegated to corwin |
+| Audio processing | | Help wanted |
+#+END:
+*** Status
+
+#+begin_src emacs-lisp :results silent :exports none
+(let* ((emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status))
+ (emacsconf-use-absolute-url t)
+ (img (emacsconf-schedule-svg 800 200 (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))))
+ (with-temp-file "schedule.svg"
+ (svg-print img)
+ (buffer-string)))
+#+end_src
+
+[[my-include:schedule.svg]]
+
+*** DONE Upload
+:PROPERTIES:
+:STATUS: Ready to go
+:CUSTOM_ID: upload
+:END:
+
+**** DONE Get access to media.emacsconf.org so that we can set up the upload service and the backstage area
+CLOSED: [2023-10-13 Fri 10:01] SCHEDULED: <2023-10-03 Tue>
+:PROPERTIES:
+:CREATED: [023-09-26 Tue 10:3]
+:CUSTOM_ID: check-media-emacsconf
+:END:
+***** DONE Decide what to do for backstage area and upload service :decision:
+CLOSED: [2023-10-13 Fri 10:00] DEADLINE: <2023-10-13 Fri>
+:PROPERTIES:
+:CUSTOM_ID: res-or-media
+:END:
+
+- [2023-10-13 Fri]: Got access to media.emacsconf.org, set up the backstage area
+
+- res.emacsconf.org
+ - up right away, so people can get started on captions
+ - more memory than media.emacsconf.org - is the upload service thrashing?
+- media.emacsconf.org
+ - does not interfere with res streaming during the conference itself
+ - don't need to send people multiple e-mails, risk confusion/out-of-date info
+ - access to media.emacsconf.org might be sorted out by [2023-10-13 Fri]
+ - not in a big rush yet
+*** DONE Prerec
+CLOSED: [2023-10-17 Tue 09:50]
+:PROPERTIES:
+:CUSTOM_ID: prerec
+:STATUS: Ready to go
+:END:
+***** Set up for the new year
+As orga@res:
+
+- mkdir /data/emacsconf/$year
+- rm ~/current
+- ln -s /data/emacsconf/$year current
+- ln -s /data/emacsconf/$year $year
+
+When we receive files
+
+- change the TODO status to PROCESSING
+- mkdir ~/current/$slug
+- copy the files to there
+- rename-original $slug $file
+- process-prerec $video
+- Copy the files to the res:~/cache, laptop:~/proj/emacsconf/2023/cache, and media:~/backstage
+- emacsconf-cache-all-video-data
+- emacsconf-publish-info-pages
+- emacsconf-publish-backstage-index
+
+
+(check that the reencode.sh process has kicked off; if not, call reencode.sh $video $prefix--reencoded.webm)
+
+*** INPROGRESS Captions
+:PROPERTIES:
+:CUSTOM_ID: captions
+:STATUS: Ready to go; waiting for videos and captions
+:END:
+- OpenAI Whisper SaaS (https://platform.openai.com/docs/guides/speech-to-text/longer-inputs) limits audio files to 25MB, so it's probably easier to do it ourselves
+**** TODO E-mail previous captioning volunteers to see if they're interested in helping out
+SCHEDULED: <2023-11-04 Sat>
+:PROPERTIES:
+:CREATED: [023-10-16 Mon 12:5]
+:END:
+**** DONE E-mail captioning volunteers the backstage instructions
+CLOSED: [2023-10-16 Mon 12:57]
+**** DONE E-mail current caption volunteers backstage information, captioning process, etc.
+CLOSED: [2023-10-17 Tue 09:37] SCHEDULED: <2023-10-17 Tue>
+:PROPERTIES:
+:CREATED: [023-10-13 Fri 10:1]
+:END:
+
+I'll wait a few days for Yoni to get back to us about whether he wants
+to caption his own talk and/or seeing if other speakers will get their
+talks in.
+
+=emacsconf-mail-backstage-info=
+
+
+
+Hi ${name}!
+
+You're getting this e-mail because you have volunteered to help out
+with captions for ${conf-name} ${year}. (Thank you so much!)
+
+I'm so excited! =) We're starting to get recorded talks, which means
+it's time to get captions going. People really appreciate the
+captions, especially when the captions have been lovingly edited by
+volunteers who change things like "Emax" to "Emacs" and "metaX" to
+"M-x".
+
+Just like last year, we're using OpenAI Whisper to give us a
+reasonable starting point for transcripts. If working from scratch
+works better for you, you're welcome to do that too.
+
+We've set up ${backstage} as the backstage area where you can view the
+videos and resources uploaded so far. You can access it with the
+username "${backstage-user}" and the password "${backstage-password}".
+Please keep the backstage password and other speakers' talk resources
+secret. ${backstage-use}
+
+To call dibs on a video to caption, just send a message to me at
+sacha@sachachua.com and I can update the page so that it's assigned to
+you. You can e-mail me the edited captions when you're done. Don't
+worry too much about timestamps; we can re-align the text with the
+audio afterwards. If life gets suddenly busy and you can't see it all
+the way through, no worries. Just e-mail me what you've got and I'll
+put it back in the pool. Every little bit helps!
+
+Thank you!
+
+Sacha Chua
+
+**** TODO E-mail the emacsconf-org mailing list the announcement and the invitation to volunteer
+**** TODO [#C] Try out Deepgram, play around with it for last-minute submissions?
+**** DONE Get the autocaptions for emms up in the backstage area
+CLOSED: [2023-10-13 Fri 10:08] SCHEDULED: <2023-10-08 Sun>
+**** Captions lessons learned :lessons:
+- OpenAI had a breaking API change, need to call =whisper.utils.get_writer=
+ - https://github.com/dmarx/video-killed-the-radio-star/issues/101
+ #+begin_src python :eval no
+ vtt_writer = whisper.utils.get_writer('vtt', os.path.dirname(new_file))
+ txt_writer = whisper.utils.get_writer('txt', os.path.dirname(new_file))
+ vtt_writer(result, work['audio'], {'max_line_width': 60, 'max_line_count': None, 'highlight_words': None})
+ txt_writer(result, work['audio'], {'max_line_width': 60, 'max_line_count': None, 'highlight_words': None})
+ #+end_src
+
+**** Reencoding
+:PROPERTIES:
+:CUSTOM_ID: check-reencoding
+:END:
+*** DONE Backstage
+:PROPERTIES:
+:CUSTOM_ID: backstage
+:STATUS: Ready to go
+:END:
+*** DONE Test assets
+CLOSED: [2023-10-19 Thu 12:23]
+:PROPERTIES:
+:CUSTOM_ID: test
+:STATUS: autopilot tested, seems to work
+:END:
+
+[[/ssh:res:/data/emacsconf/2023/assets/test]]
+
+**** DONE Generate test videos
+CLOSED: [2023-10-19 Thu 12:23]
+**** Try autopilot
+
+#+begin_src emacs-lisp :eval no
+(let* ((offset-seconds 60)
+ (start-time (time-add (current-time) offset-seconds))
+ (emacsconf-schedule-validation-functions nil)
+ (emacsconf-schedule-default-buffer-minutes 1)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 1)
+ (emacsconf-schedule-strategies '(emacsconf-schedule-allocate-buffer-time
+ emacsconf-schedule-copy-previous-track))
+ (schedule (emacsconf-schedule-prepare
+ (emacsconf-schedule-inflate-sexp
+ `(("GEN"
+ :start ,(format-time-string "%Y-%m-%d %H:%M" start-time)
+ :set-track "General")
+ (sat-open :time 1)
+ (adventure :time 1) ; pad Q&A
+ (uni :time 1) ; live Q&A
+ (teaching :time 1)
+ (table :time 1)
+ (taming :time 1)
+ (one :time 1)
+ (cubing :time 1) ; IRC
+ ("DEV"
+ :start
+ ,(format-time-string "%Y-%m-%d %H:%M" (time-add start-time 60))
+ :set-track "Development")
+ (matplotllm :time 1)
+ (gc :time 1) ; pad
+ (repl :time 1) ; IRC
+ (voice :time 1)
+ (llm :time 1)
+ (overlay :time 1)
+ (eval :time 1)
+ (emacsconf :time 1))))))
+ (emacsconf-stream-crontabs t schedule))
+#+end_src
+
+#+begin_src emacs-lisp :eval no
+(let* ((offset-seconds 240)
+ (start-time (time-add (current-time) offset-seconds))
+ (emacsconf-schedule-validation-functions nil)
+ (emacsconf-schedule-default-buffer-minutes 5)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 5)
+ (emacsconf-schedule-strategies
+ '(emacsconf-schedule-ignore-fixed
+ emacsconf-schedule-allocate-buffer-time
+ emacsconf-schedule-copy-previous-track))
+ (schedule (emacsconf-schedule-prepare
+ (emacsconf-schedule-inflate-sexp
+ `(("GEN"
+ :start ,(format-time-string "%Y-%m-%d %H:%M" start-time)
+ :set-track "General")
+ (sat-open)
+ (sun-open)
+ ("DEV"
+ :start
+ ,(format-time-string "%Y-%m-%d %H:%M" (time-add start-time 60))
+ :set-track "Development")
+ (emacsconf))))))
+ (emacsconf-stream-crontabs nil schedule))
+#+end_src
+
+*** BBB
+:PROPERTIES:
+:CUSTOM_ID: bbb
+:STATUS: redirects created, confirmed; next: e-mail speakers testing/checkin instructions
+:END:
+
+Generate them for possibly live presentations as well? We'll see.
+
+**** DONE Generate redirects
+CLOSED: [2023-10-17 Tue 12:55]
+:PROPERTIES:
+:CUSTOM_ID: generate-redirects
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2023-10-17 Tue 12:46]--[2023-10-17 Tue 12:55] => 0:09
+:END:
+
+We use redirects for Q&A sessions with BBB web conferences so that people can easily join the web conference.
+
+- elisp:emacsconf-publish-bbb-static-redirects: generate static redirects
+- elisp:emacsconf-publish-bbb-redirect-all
+
+**** DONE Generate BBB rooms
+CLOSED: [2023-10-17 Tue 09:41]
+:PROPERTIES:
+:CUSTOM_ID: generate-bbb
+:END:
+
+BBB name convention from last year
+
+ec22-sat-am-dev Abin Simon (treesitter)
+
+That means things change if I move to a different time or track.
+Other option:
+
+ec23 Speaker Name (talk-ids)
+
+
+Deleting old rooms:
+
+#+begin_src emacs-lisp
+(spookfox-js-injection-eval-in-active-tab "[...document.querySelectorAll('.delete-room')].filter((o) => o.getAttribute('data-name').match(/ec22/))[0].click(); document.querySelector('#delete-confirm').click();" t)
+#+end_src
+
+Creating new rooms
+
+#+begin_src emacs-lisp
+(defun emacsconf-spookfox-create-bbb (group)
+ "Create a BBB room for this group of talks.
+GROUP is (email . (talk talk talk)).
+Needs a Spookfox connection."
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (let* ((bbb-name
+ (format "%s (%s) - %s%s"
+ (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) ", ")
+ (plist-get (cadr group) :speakers)
+ emacsconf-id
+ emacsconf-year))
+ path
+ (retrieve-command (format "window.location.origin + [...document.querySelectorAll('h4.room-name-text')].find((o) => o.textContent.trim() == '%s').closest('tr').querySelector('.delete-room').getAttribute('data-path')" bbb-name))
+ (create-command (format "name=\"%s\";
+console.debug(name);
+console.debug(document.querySelector('#create-room-block'));
+document.querySelector('#create-room-block').click();
+console.debug(document.querySelector('#create-room-name'));
+document.querySelector('#create-room-name').value = name;
+document.querySelector('#room_mute_on_join').click();
+document.querySelector('.create-room-button').click();"
+ bbb-name)))
+ (setq path (spookfox-js-injection-eval-in-active-tab retrieve-command t))
+ (unless path
+ (kill-new create-command)
+ (dolist (cmd (split-string create-command ";"))
+ (spookfox-js-injection-eval-in-active-tab cmd t)
+ (sleep-for 2))
+ (sleep-for 2)
+ (setq path (spookfox-js-injection-eval-in-active-tab retrieve-command t)))
+ (when path
+ (dolist (talk (cdr group))
+ (save-window-excursion
+ (emacsconf-with-talk-heading talk
+ (org-entry-put (point) "ROOM" path))))
+ (cons bbb-name path))))
+
+(let ((groups
+ (emacsconf-mail-groups
+ (seq-filter
+ (lambda (o)
+ (and (string-match "live" (or (plist-get o :q-and-a) ""))
+ (not (plist-get o :bbb-room))))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))))
+ (dolist (group groups)
+ (emacsconf-spookfox-create-bbb group)))
+#+end_src
+**** DONE Possibly generate BBB rooms for live presentations?
+CLOSED: [2023-12-01 Fri 14:13] SCHEDULED: <2023-11-10 Fri>
+**** DONE Send testing instructions
+CLOSED: [2023-12-01 Fri 14:13] SCHEDULED: <2023-11-10 Fri>
+*** DONE VNC
+:PROPERTIES:
+:CUSTOM_ID: vnc
+:STATUS: confirmed access to emacsconf-gen and emacsconf-dev
+:END:
+
+We use VNC to connect to the X servers on res.emacsconf.org so that we can stream from it.
+
+Success:
+- [X] Confirm that you can connect to emacsconf-gen via VNC
+- [X] Confirm that you can connect to emacsconf-dev via VNC
+
+Setting up
+- elisp:emacsconf-publish-res-index
+
+**** Instructions
+:PROPERTIES:
+:CUSTOM_ID: vnc-instructions
+:END:
+
+NOTE: VNC+OBS doesn't work well if you have a window manager that
+automatically resizes windows, like i3. Please configure your window
+manager so that the VNC window is not resized.
+
+ 1. Install a VNC viewer on your system (ex: tigervnc-viewer).
+
+ 2. Set up your local environment:
+
+ - gen: export TRACK=gen; export TRACK_PORT=5905; export SSH_PORT=46668
+ - dev: export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668
+
+ 3. Copy the password:
+
+ scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK -p $SSH_PORT
+
+ 4. Forward your local ports and connect via VNC viewer to the
+ appropriate forwarded port from your laptop:
+
+ #+begin_example
+ ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &
+ sleep 5 # Give it time to establish the tunnels
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+ #+end_example
+
+If you get the following error:
+
+#+begin_example
+channel 2: open failed: connect failed: Connection refused
+CConn: End of stream
+CConn: The connection was dropped by the server before the session could
+ be established.
+#+end_example
+
+then the VNC server hasn't started yet. You can start it with
+
+#+begin_src sh :eval no
+ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc
+#+end_src
+
+and then connect with:
+
+#+begin_src sh :eval no
+xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+#+end_src
+
+**** TODO Ask bandali or zaeph to share their window manager configuration :bandali:zaeph:
+
+*** DONE OBS
+:PROPERTIES:
+:CUSTOM_ID: obs
+:STATUS: confirmed that gen and dev can stream
+:END:
+
+We use OBS to stream to Icecast on live.emacsconf.org.
+
+Success: Confirm that you can stream
+- [X] gen
+- [X] dev
+
+New year: reprovision with
+
+#+begin_src sh :eval no
+ansible-playbook -i inventory.yml prod-playbook.yml --tags obs
+#+end_src
+
+so that the year is updated in the shell scripts.
+
+**** Instructions
+:PROPERTIES:
+:CUSTOM_ID: obs-instructions
+:END:
+
+1. [[#vnc-instructions][Connect to the VNC session for the track.]]
+
+2. Start *recording* (not streaming). If you don't see OBS when you connect, it's probably on workspace 2, so you can switch with Alt-2. If you still don't see it there, you can open a terminal with Alt-Enter and then run ~track-obs~. After you start recording, confirm that it is now broadcasting to the stream.
+
+3. Verify with MPV on your local system:
+
+ #+begin_example
+ mpv https://live0.emacsconf.org/$TRACK.webm &
+ #+end_example
+
+**** DONE Double-check OBS setup and streaming on res
+CLOSED: [2023-10-17 Tue 10:22]
+:PROPERTIES:
+:CUSTOM_ID: check-streaming
+:END:
+*** DONE Icecast
+CLOSED: [2023-10-17 Tue 10:30]
+:PROPERTIES:
+:CUSTOM_ID: icecast
+:STATUS: gen and dev confirmed with MPV
+:END:
+
+Success: You can use [[#obs-instructions][OBS+VNC to record]], and the results can be viewed by mpv.
+- [X] Gen
+- [X] Dev
+
+New year: reprovision with
+
+#+begin_src sh :eval no
+ansible-playbook -i inventory.yml prod-playbook.yml --tags stream
+#+end_src
+
+so that the year is updated in the configuration.
+
+This is on live.emacsconf.org and can be restarted with =/etc/init.d/emacsconf restart=.
+
+**** DONE Double-check icecast
+CLOSED: [2023-10-17 Tue 10:30]
+:PROPERTIES:
+:CUSTOM_ID: check-icecast
+:END:
+*** DONE MPV
+:PROPERTIES:
+:CUSTOM_ID: mpv
+:STATUS: confirmed that mpv can watch both streams
+:END:
+*** DONE Watch page
+:PROPERTIES:
+:CUSTOM_ID: watch
+:STATUS: updated for 2023
+:END:
+
+live.emacsconf.org is on the front0.emacsconf.org server.
+
+To set up for the year:
+
+1. Create directories and update the Nginx configuration
+ #+begin_src sh :eval no
+ ansible-playbook -i inventory.yml prod-playbook.yml --tags live
+ #+end_src
+
+2. Generate the pages
+ #+begin_src emacs-lisp :eval no
+ (emacsconf-publish-watch-pages)
+ #+end_src
+
+3. Add the $year/watch to the wiki.
+
+4. Create a $year/watch.md manually.
+
+*** DONE Status page
+:PROPERTIES:
+:CUSTOM_ID: status
+:STATUS: ready to go
+:END:
+
+Manually maintained
+
+/ssh:front0.emacsconf.org:/var/www/status.emacsconf.org/index.html
+
+*** DONE Public media
+:PROPERTIES:
+:CUSTOM_ID: media
+:STATUS: confirmed, set to protected so that we can test publishing live
+:END:
+
+Start of year:
+
+1. Set =media_protect_root= to true in Ansible =group_vars/all.yml=.
+2. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media=
+3. Generate the index with =emacsconf-publish-update-media=
+
+Confirm by setting a submitted talk to =PLAYING= and testing with
+elisp:emacsconf-publish-media-files-on-change . The public media
+directory should have the files and the entry should be in the index.
+Switching it back to =TO_STREAM= and calling
+elisp:emacsconf-publish-media-files-on-change should remove it.
+
+**** TODO Switch public media to unprotected root before the conference
+SCHEDULED: <2023-11-25 Sat>
+
+1. Clear public media directory.
+2. Set =media_protect_root= to false in Ansible =group_vars/all.yml=.
+3. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media=
+
+You can generate the index with =emacsconf-publish-update-media=.
+
+*** DONE Mumble
+:PROPERTIES:
+:CUSTOM_ID: mumble
+:STATUS: confirmed gen and dev can connect, receive audio
+:END:
+
+If you see =Server connection rejected: Wrong certificate or password.=, use *Certificate Wizard* to reimport the .p12 file in that user's home directory.
+
+*** DONE Etherpad
+:PROPERTIES:
+:CUSTOM_ID: etherpad
+:STATUS: Ready to go, pads created
+:END:
+
+[[elisp:emacsconf-pad-prepopulate-all-talks]]
+
+**** DONE Create pads for all the talks
+CLOSED: [2023-10-17 Tue 09:46] SCHEDULED: <2023-11-05 Sun>
+:PROPERTIES:
+:CUSTOM_ID: create-pads
+:CREATED: [023-10-13 Fri 10:1]
+:END:
+
+Because the pads refer to the next and previous talks and include the talk titles, this is best redone after the schedule has settled down.
+*** DONE Pad proxy
+:PROPERTIES:
+:CUSTOM_ID: proxy
+:STATUS: Ready to go, pad.emacsconf.org works
+:END:
+*** DONE Overlays
+:PROPERTIES:
+:CUSTOM_ID: overlays
+:STATUS: generated and uploaded
+:END:
+
+[[elisp:emacsconf-stream-generate-overlays]]
+
+*** INPROGRESS Intros
+:PROPERTIES:
+:CUSTOM_ID: intros
+:STATUS: all intros recorded, should send them to speakers for review
+:END:
+
+Intro slides
+
+elisp:emacsconf-stream-generate-in-between-pages
+elisp:emacsconf-pad-expand-intro
+[[elisp:emacsconf-subed-intro-subtitles][elisp:emacsconf-subed-intro-subtitles]]
+
+http://ipa-reader.xyz/
+
+
+**** DONE Regenerate overlays
+CLOSED: [2023-10-31 Tue 10:36]
+**** TODO Add all intros to the backstage so that people can review them
+:LOGBOOK:
+- State "DONE" from "TODO" [2023-10-31 Tue 10:34]
+:END:
+
+**** TODO Record intro for Mike Hamrick
+
+Next, we have "Literate Documentation with Emacs and Org Mode", by Mike Hamrick. He will answer questions via BigBlueButton. You can join using the URL from the talk page or ask questions through Etherpad or IRC.
+
+
+**** CANCELLED Write 1-2 sentence intros for all the talks
+CLOSED: [2023-10-17 Tue 15:03]
+:PROPERTIES:
+:CUSTOM_ID: write-intros
+:END:
+
+We do a brief introduction before each talk so that people know the
+topic of the next talk, the pronunciation of the speaker's name, the
+pronouns to use when referring to them, and the type of Q&A that will
+follow.
+
+The template we used last year was: "In this talk, SPEAKER shares
+TITLE OR SUMMARY. Afterwards, PRONOUN will handle questions over Q&A
+METHOD."
+
+This year, we asked speakers to contribute a short introduction. These
+are in conf.org in the private repository. Many of the introductions
+are a little longer than the template, but we might be able to handle
+that. Some need to be rewritten into third-person (using the speaker's
+name/pronouns instead of I). Some might be a bit of a tongue-twister
+and can be rewritten to be easier to say.
+
+We can store the introduction in the =INTRO_NOTE= property in
+conf.org.
+
+Actually recording the introductions can wait until closer to the
+conference because talk titles and Q&A methods can change. We can
+verify speaker name pronunciations at that time.
+
+Hmm... Actually, we can go ahead and record all of these so that
+speakers can doublecheck pronunciations, and then we'll re-record them
+in case someone wants to get fancier about intros.
+
+***** Intros :levels:
+
+- Good: Use the same template as before: In this talk, SPEAKER shares
+ TITLE OR SUMMARY. Afterwards, PRONOUN will handle questions over Q&A
+ METHOD.
+- Better: Include some more biographical information to give listeners some context.
+
+
+***** DONE Do we want to use honorifics like Dr.? :decision:
+CLOSED: [2023-10-03 Tue 15:38] DEADLINE: <2023-11-14 Tue>
+:PROPERTIES:
+:CUSTOM_ID: honorifics
+:END:
+
+DECISION: Include in the intro-review email:
+#+begin_quote
+We will usually introduce you by your first name (or handle, if you
+prefer to go by a pseudonym) but if you'd rather be introduced
+differently (for example honorific followed by last-name, or whatever
+you prefer), just let us know.
+#+end_quote
+
+Let's see if we can decide on this by [2023-11-04 Fri] so that we can
+use it when recording the intros.
+
+- OPTION: Consistently using names without honorifics, even if indicated in the
+ speaker-submitted intros (as in previous EmacsConfs)
+ - Equality
+ - votes: zaeph
+- CHOSEN: Asking speakers if they want us to use any honorifics in their intro:
+ - Observes personal preferences
+ - votes: corwin, max, jc (We can also say that we prefer not to use honorifics (it's not an academic
+ - Corwin's suggested wording: We will usually introduce you by your first name (or handle, if you prefer to go by a pseudonym) but if you'd rather be introduced
+ differently (for example honorific followed by last-name, or
+ whatever you prefer) just let us know.
+ conference) but we respect people's preferences.)
+- OPTION: Using honorifics based on e-mail signatures and intros:
+ - Recognizes credentials
+
+**** DONE Record intro videos with 1-2 sentence intros for all the talks
+CLOSED: [2023-10-19 Thu 12:22] SCHEDULED: <2023-10-18 Wed>
+:PROPERTIES:
+:CUSTOM_ID: record-intros
+:END:
+**** DONE Record the rest of the intros
+CLOSED: [2023-10-19 Thu 12:22]
+:PROPERTIES:
+:CREATED: [2023-10-18 Wed 09:35]
+:END:
+**** DONE Generate intro slides
+CLOSED: [2023-10-18 Wed 09:46]
+:PROPERTIES:
+:CUSTOM_ID: generate-intro
+:END:
+
+We generate intro slides to display in between talks so that people
+can find out information about the previous talk and learn about the
+next talk. It includes talk titles, speaker names, URLs, and Q&A
+methods. The image will also be used for an introduction video if we
+can record one before the conference.
+
+We also generate overlays that show talk information during the talk
+itself.
+
+SVGs don't support line-wrapping, so it helps to do a quick pass to
+make sure all the talks are displayed properly.
+
+Hmm... Maybe I should take the names and pronouns off the video
+overlay? Then there's less worry about wrapping, and people can always
+go to the URL to get more information.
+
+elisp:emacsconf-stream-generate-in-between-pages
+**** TODO Ask speakers to review intros
+SCHEDULED: <2023-11-10 Fri>
+after they've uploaded their videos, since we might be able to check the pronunciation ourselves
+
+*** IRC channels
+:PROPERTIES:
+:CUSTOM_ID: irc
+:STATUS: Not yet started
+:END:
+
+- /opall
+- /conftopic
+- /deopall
+**** TODO Confirm that the emacsconf user can connect
+I think I had that on orga@res.emacsconf.org
+*** IRC talk info
+:PROPERTIES:
+:CUSTOM_ID: irc-talk-info
+:STATUS: Not yet started
+:END:
+*** Announcements
+:PROPERTIES:
+:CUSTOM_ID: announcements
+:STATUS: Not yet started
+:END:
+*** Publishing updates live
+:PROPERTIES:
+:CUSTOM_ID: publish
+:STATUS: Not yet started
+:END:
+*** Autopilot
+:PROPERTIES:
+:CUSTOM_ID: autopilot
+:STATUS: Not yet started
+:END:
+*** YouTube
+:PROPERTIES:
+:CUSTOM_ID: youtube
+:STATUS: Not yet started
+:END:
+*** Peertube
+:PROPERTIES:
+:CUSTOM_ID: peertube
+:STATUS: Not yet started
+:END:
+*** 480p
+:PROPERTIES:
+:STATUS: Delegated to corwin
+:END:
+
+Consider increasing memory/cpu configuration on live?
+
+**** TODO Figure out a better way to handle 480p stream :corwin:
+:PROPERTIES:
+:CUSTOM_ID: lowres
+:END:
+
+It kept dropping last year and sachac didn't have the mental bandwidth to figure it out.
+Might need another node so that we don't risk it getting killed for memory reasons?
+
+Corwin has volunteered to take this on
+*** Audio processing
+:PROPERTIES:
+:CUSTOM_ID: audio-proc
+:STATUS: Help wanted
+:END:
+
+**** TODO Find volunteers for audio processing (normalization, noise reduction) and document the process :helpwanted:
+:PROPERTIES:
+:CUSTOM_ID: audio
+:END:
+
+- audio normalization
+- noise reduction
+*** Other things people can help with
+:PROPERTIES:
+:CUSTOM_ID: other-help
+:END:
+**** TODO Video editing: the eval talk is a little bit out of sync :helpwanted:
+DEADLINE: <2023-11-15 Wed>
+:PROPERTIES:
+:CUSTOM_ID: eval-video-sync
+:END:
+
+The circular video inset into
+https://media.emacsconf.org/2023/backstage/#eval is a little bit out
+of sync with the audio. Not sure if the screenshare is offset as well.
+Maybe just nudging the audio a little bit will be enough to bring
+these in sync? If someone would like to fix this, that would be
+awesome.
+
+*** TODO [#C] Write something for merging in information from previous years if not specified
+:PROPERTIES:
+:CUSTOM_ID: previous-years
+:END:
+- availability
+- timezone
+- name
+- short name
+- pronouns
+** Get ready for production :preflight:
+:PROPERTIES:
+:CUSTOM_ID: go-live
+:END:
+*** A day or two before
+**** DONE Update the variables
+CLOSED: [2023-12-01 Fri 17:34]
+[[emacsconf-ansible:group_vars/all.yml]]:
+
+#+begin_example
+test_mode: false
+media_protect_root: false
+protect_stream_with_password: false
+#+end_example
+
+#+begin_src sh :eval no
+ansible-playbook -i inventory.ml prod-playbook.yml --tags stream
+ansible-playbook -i inventory.ml prod-playbook.yml --tags media
+#+end_src
+**** DONE [#A] Test the 480p!
+CLOSED: [2023-12-01 Fri 20:21]
+**** DONE Resize the nodes :bandali:
+CLOSED: [2023-12-01 Fri 20:21]
+
+2022:
+- Front: 16GB
+- Live: 64GB
+
+**** TODO Update the BigBlueButton rooms so that users are not all moderators
+
+#+begin_src emacs-lisp :eval no
+(require 'emacsconf-spookfox)
+(dolist (talk (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))
+ (emacsconf-spookfox-update-bbb-settings
+ talk
+ '(("room_mute_on_join" . "true")
+ ("room_all_join_moderator" . "false")
+ ("room_anyone_can_start" . "true"))
+ ))
+#+end_src
+**** TODO Make sure conf.org and the publishing wiki are up to date
+*** On the day of the conference
+**** TODO Update the emacsconf-tracks status
+** Harvest cool stuff
+
+
+
+*** Harvesting
+
+- download published recordings: [[defun:emacsconf-harvest-download-published-recordings]]
+
+*** TODO Announce that videos have been uploaded :emacsconf:
+SCHEDULED: <2023-12-08 Fri>
+*** When the speaker posts a video to their own channel :process:
+1. Open the video.
+2. Add it to the playlist.
+3. Open the playlist: https://www.youtube.com/playlist?list=PLomc4HLgvuCUdrW3JkugtKv8xPelUoOyP
+4. Move the video to the correct place.
+5. Open the old video.
+6. Remove the old video from the playlist.
+7. Edit the video. Add the link to the new video in the description.
+8. Select *Editor* from the left side. Add an info card and maybe an end screen pointing to the new video.
+9. Update the ~YOUTUBE_URL~ property in the conf.org file. Commit and push.
+
+*** DONE Figure out which published presentations don't have any deskshare, so I can just upload those directly
+CLOSED: [2023-12-07 Thu 14:52]
+:LOGBOOK:
+- State "DONE" from "TODO" [2023-12-07 Thu 14:52]
+:END:
+
+The following talks do not have deskshares and can therefore be published by copying webcams.webm.
+#+begin_src emacs-lisp
+(seq-keep
+ (lambda (o)
+ (when (plist-get o :bbb-meeting-id)
+ (let* ((xml-file
+ (expand-file-name "deskshare.xml"
+ (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir)))
+ (dom (and (file-exists-p xml-file)
+ (xml-parse-file xml-file))))
+ (unless (and dom (dom-by-tag dom 'event))
+ (plist-get o :slug)))))
+ (emacsconf-get-talk-info))
+#+end_src
+
+#+RESULTS:
+:results:
+(uni nabokov solo devel core parallel emms mentor web sharing llm overlay doc hyperdrive lspocaml windows)
+:end:
+
+#+begin_src emacs-lisp
+(defun emacsconf-harvest-bbb-copy-webcams-only-sessions ()
+ "Copy the webcam-only Q&A sessions as --answers.webm in the cache directory."
+ (interactive)
+ (seq-keep
+ (lambda (o)
+ (when (and (plist-get o :bbb-meeting-id)
+ (file-exists-p
+ (expand-file-name "video/webcams.webm"
+ (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir))))
+ (let* ((xml-file
+ (expand-file-name "deskshare.xml"
+ (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir)))
+ (dom (and (file-exists-p xml-file)
+ (xml-parse-file xml-file))))
+ (unless
+ (and dom
+ (dom-by-tag dom 'event))
+ (unless (file-exists-p (expand-file-name
+ (concat (plist-get o :file-prefix) "--answers.webm")
+ emacsconf-cache-dir))
+ (copy-file
+ (expand-file-name "video/webcams.webm"
+ (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir))
+ (expand-file-name (concat (plist-get o :file-prefix) "--answers.webm")
+ emacsconf-cache-dir)))
+ (plist-get o :slug)))))
+ (emacsconf-get-talk-info)))
+#+end_src
+
+#+RESULTS:
+:results:
+emacsconf-harvest-bbb-copy-webcams-only-sessions
+:end:
+
+#+begin_src emacs-lisp
+(emacsconf-harvest-bbb-copy-webcams-only-sessions)
+#+end_src
+
+#+RESULTS:
+:results:
+(uni nabokov solo devel parallel emms mentor web sharing llm overlay doc hyperdrive lspocaml windows)
+:end:
+
+#+begin_src emacs-lisp
+(defun emacsconf-harvest-set-qa-public ()
+ (dolist (talk (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))
+ (when (emacsconf-talk-file talk "--answers.webm")
+ (emacsconf-with-talk-heading talk
+ (org-entry-put (point) "QA_PUBLIC" "1")))))
+#+end_src
+
+*** DONE Figure out which talks have screenshares and process them
+CLOSED: [2023-12-07 Thu 14:52]
+:LOGBOOK:
+- State "DONE" from "TODO" [2023-12-07 Thu 14:52]
+:END:
+
+hmm, speed is about the same on my computer?
+
+The following talks have deskshares and need splicing.
+#+begin_src emacs-lisp
+(seq-keep
+ (lambda (o)
+ (when (plist-get o :bbb-meeting-id)
+ (let* ((xml-file
+ (expand-file-name "deskshare.xml"
+ (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir)))
+ (dom (and (file-exists-p xml-file)
+ (xml-parse-file xml-file))))
+ (when (and dom (dom-by-tag dom 'event))
+ (plist-get o :slug)))))
+ (emacsconf-get-talk-info))
+#+end_src
+
+#+RESULTS:
+:results:
+(teaching one writing sat-close hyperamp poltys sun-close voice emacsconf scheme world flat emacsen gc)
+:end:
+
+#+begin_src emacs-lisp :results example
+(emacsconf-extract-replace-strings
+ `((,(expand-file-name emacsconf-extract-bbb-published-dir) . "~/current/bbb-published/")
+ (,(expand-file-name emacsconf-cache-dir) . "~/current/cache"))
+ (mapconcat
+ (lambda (slug)
+ (let ((prefix (plist-get (emacsconf-resolve-talk (symbol-name slug)) :file-prefix)))
+ (format "if [ ! -f ~/current/cache/%s--answers--original.webm ]; then\n %s && cp ~/current/cache/%s--answers.webm ~/current/cache/%s--answers--original.webm\nfi"
+ prefix
+ (emacsconf-get-ffmpeg-to-splice-webcam-and-recording (symbol-name slug))
+ prefix
+ prefix)))
+ '(teaching one writing sat-close hyperamp poltys sun-close voice scheme world flat emacsen gc)
+ "\n"))
+#+end_src
+
+#+RESULTS:
+:results:
+if [ ! -f ~/current/cache/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289/deskshare/deskshare.webm -i ~/current/bbb-published/c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289/video/webcams.webm -i ~/current/bbb-published/c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289/deskshare/deskshare.webm -i ~/current/bbb-published/c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289/video/webcams.webm -i ~/current/bbb-published/c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,121.900\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,121.900\,142.100\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[2\:v\]select\=\'between\(t\,142.100\,2483.600\)\'\,setpts\=PTS-STARTPTS\,scale\[r2\]\;\[3\:v\]select\=\'between\(t\,2483.600\,2588.551\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r3\]\;\[r0\]\[r1\]\[r2\]\[r3\]concat\=n\=4\:v\=1\:a\=0\[v\]\;\[4\:a\]aselect\=\'between\(t\,0.000\,2588.551\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm && cp ~/current/cache/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm ~/current/cache/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/62b4e0d50b581001f2d6526461e9ffb754b38371-1701534084270/deskshare/deskshare.webm -i ~/current/bbb-published/62b4e0d50b581001f2d6526461e9ffb754b38371-1701534084270/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,1658.966\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[r0\]concat\=n\=1\:v\=1\:a\=0\[v\]\;\[1\:a\]aselect\=\'between\(t\,0.000\,1658.966\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm && cp ~/current/cache/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm ~/current/cache/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/d3faf3bd5abcc5316e6a997b22b29d962480ad5c-1701537771543/deskshare/deskshare.webm -i ~/current/bbb-published/d3faf3bd5abcc5316e6a997b22b29d962480ad5c-1701537771543/video/webcams.webm -i ~/current/bbb-published/d3faf3bd5abcc5316e6a997b22b29d962480ad5c-1701537771543/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,1484.300\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,1484.300\,1487.132\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,1487.132\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm && cp ~/current/cache/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm ~/current/cache/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-sat-close--saturday-closing-remarks--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/bb384a46db00ac8a0175df0a0668c94a9992b663-1701554802497/video/webcams.webm -i ~/current/bbb-published/bb384a46db00ac8a0175df0a0668c94a9992b663-1701554802497/deskshare/deskshare.webm -i ~/current/bbb-published/bb384a46db00ac8a0175df0a0668c94a9992b663-1701554802497/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,137.800\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r0\]\;\[1\:v\]select\=\'between\(t\,137.800\,539.591\)\'\,setpts\=PTS-STARTPTS\,scale\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,539.591\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-sat-close--saturday-closing-remarks--answers.webm && cp ~/current/cache/emacsconf-2023-sat-close--saturday-closing-remarks--answers.webm ~/current/cache/emacsconf-2023-sat-close--saturday-closing-remarks--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/b91c2833d3add0175ea8f55e9026f1ba6e744918-1701610376838/deskshare/deskshare.webm -i ~/current/bbb-published/b91c2833d3add0175ea8f55e9026f1ba6e744918-1701610376838/video/webcams.webm -i ~/current/bbb-published/b91c2833d3add0175ea8f55e9026f1ba6e744918-1701610376838/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,1664.200\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,1664.200\,8352.632\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,8352.632\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers.webm && cp ~/current/cache/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers.webm ~/current/cache/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/823df2a9c2b725271129cfe0301fcc7e631c2e63-1701617796009/deskshare/deskshare.webm -i ~/current/bbb-published/823df2a9c2b725271129cfe0301fcc7e631c2e63-1701617796009/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,2305.799\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[r0\]concat\=n\=1\:v\=1\:a\=0\[v\]\;\[1\:a\]aselect\=\'between\(t\,0.000\,2305.799\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers.webm && cp ~/current/cache/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers.webm ~/current/cache/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-sun-close--sunday-closing-remarks--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684/video/webcams.webm -i ~/current/bbb-published/5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684/deskshare/deskshare.webm -i ~/current/bbb-published/5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684/video/webcams.webm -i ~/current/bbb-published/5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,17.200\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r0\]\;\[1\:v\]select\=\'between\(t\,17.200\,7182.600\)\'\,setpts\=PTS-STARTPTS\,scale\[r1\]\;\[2\:v\]select\=\'between\(t\,7182.600\,7242.892\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r2\]\;\[r0\]\[r1\]\[r2\]concat\=n\=3\:v\=1\:a\=0\[v\]\;\[3\:a\]aselect\=\'between\(t\,0.000\,7242.892\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-sun-close--sunday-closing-remarks--answers.webm && cp ~/current/cache/emacsconf-2023-sun-close--sunday-closing-remarks--answers.webm ~/current/cache/emacsconf-2023-sun-close--sunday-closing-remarks--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/8ddd81ef601d78f7b9ac2093f3700a29b5595ff3-1701529315435/deskshare/deskshare.webm -i ~/current/bbb-published/8ddd81ef601d78f7b9ac2093f3700a29b5595ff3-1701529315435/video/webcams.webm -i ~/current/bbb-published/8ddd81ef601d78f7b9ac2093f3700a29b5595ff3-1701529315435/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,3513.200\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,3513.200\,4066.716\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,4066.716\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm && cp ~/current/cache/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm ~/current/cache/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/b4a8670e0b530ee32705d58e7f7bcb5ebb49f86a-1701613648364/video/webcams.webm -i ~/current/bbb-published/b4a8670e0b530ee32705d58e7f7bcb5ebb49f86a-1701613648364/deskshare/deskshare.webm -i ~/current/bbb-published/b4a8670e0b530ee32705d58e7f7bcb5ebb49f86a-1701613648364/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,369.300\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r0\]\;\[1\:v\]select\=\'between\(t\,369.300\,694.230\)\'\,setpts\=PTS-STARTPTS\,scale\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,694.230\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.webm && cp ~/current/cache/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.webm ~/current/cache/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/573c5a7321e144f6cd67763c21ed7aea8f1c1497-1701617014361/deskshare/deskshare.webm -i ~/current/bbb-published/573c5a7321e144f6cd67763c21ed7aea8f1c1497-1701617014361/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,1128.799\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[r0\]concat\=n\=1\:v\=1\:a\=0\[v\]\;\[1\:a\]aselect\=\'between\(t\,0.000\,1128.799\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.webm && cp ~/current/cache/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.webm ~/current/cache/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/deskshare/deskshare.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/video/webcams.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/deskshare/deskshare.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/video/webcams.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/deskshare/deskshare.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/video/webcams.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/deskshare/deskshare.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/video/webcams.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,170.400\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,170.400\,183.300\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[2\:v\]select\=\'between\(t\,183.300\,583.900\)\'\,setpts\=PTS-STARTPTS\,scale\[r2\]\;\[3\:v\]select\=\'between\(t\,583.900\,690.100\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r3\]\;\[4\:v\]select\=\'between\(t\,690.100\,1074.300\)\'\,setpts\=PTS-STARTPTS\,scale\[r4\]\;\[5\:v\]select\=\'between\(t\,1074.300\,1114.300\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r5\]\;\[6\:v\]select\=\'between\(t\,1114.300\,1329.700\)\'\,setpts\=PTS-STARTPTS\,scale\[r6\]\;\[7\:v\]select\=\'between\(t\,1329.700\,1340.418\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r7\]\;\[r0\]\[r1\]\[r2\]\[r3\]\[r4\]\[r5\]\[r6\]\[r7\]concat\=n\=8\:v\=1\:a\=0\[v\]\;\[8\:a\]aselect\=\'between\(t\,0.000\,1340.418\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers.webm && cp ~/current/cache/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers.webm ~/current/cache/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/93478b7dbe4fb34ded741ea7c8dfefa78a3ce8fd-1701620297196/deskshare/deskshare.webm -i ~/current/bbb-published/93478b7dbe4fb34ded741ea7c8dfefa78a3ce8fd-1701620297196/video/webcams.webm -i ~/current/bbb-published/93478b7dbe4fb34ded741ea7c8dfefa78a3ce8fd-1701620297196/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,4112.500\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,4112.500\,4239.101\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,4239.101\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm && cp ~/current/cache/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm ~/current/cache/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers--original.webm
+fi
+if [ ! -f ~/current/cache/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers--original.webm ]; then
+ ffmpeg -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/video/webcams.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/deskshare/deskshare.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/video/webcams.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/deskshare/deskshare.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/video/webcams.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/deskshare/deskshare.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/video/webcams.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,149.500\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r0\]\;\[1\:v\]select\=\'between\(t\,149.500\,327.200\)\'\,setpts\=PTS-STARTPTS\,scale\[r1\]\;\[2\:v\]select\=\'between\(t\,327.200\,418.200\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r2\]\;\[3\:v\]select\=\'between\(t\,418.200\,454.600\)\'\,setpts\=PTS-STARTPTS\,scale\[r3\]\;\[4\:v\]select\=\'between\(t\,454.600\,481.300\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r4\]\;\[5\:v\]select\=\'between\(t\,481.300\,598.200\)\'\,setpts\=PTS-STARTPTS\,scale\[r5\]\;\[6\:v\]select\=\'between\(t\,598.200\,1086.757\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r6\]\;\[r0\]\[r1\]\[r2\]\[r3\]\[r4\]\[r5\]\[r6\]concat\=n\=7\:v\=1\:a\=0\[v\]\;\[7\:a\]aselect\=\'between\(t\,0.000\,1086.757\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.webm && cp ~/current/cache/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.webm ~/current/cache/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers--original.webm
+fi
+:end:
+
+*** SOMEDAY Clean up storage on media :emacsconf:
+:PROPERTIES:
+:CREATED: [2023-12-06 Wed 14:08]
+:END:
+
+*** DONE Move answers to main for live talks
+CLOSED: [2023-12-07 Thu 14:51]
+:LOGBOOK:
+- State "DONE" from "TODO" [2023-12-07 Thu 14:51]
+:END:
+
+#+begin_src emacs-lisp :wrap verbatim
+(mapconcat
+ (lambda (o)
+ (and (null
+ (file-exists-p
+ (expand-file-name (concat (plist-get o :file-prefix) "--main.webm")
+ emacsconf-cache-dir)))
+ (file-exists-p
+ (expand-file-name (concat (plist-get o :file-prefix) "--answers.webm")
+ emacsconf-cache-dir))
+ (format "cp %s %s; ../rm-from-cache %s\n"
+ (concat (plist-get o :file-prefix) "--answers.webm")
+ (concat (plist-get o :file-prefix) "--main.webm")
+ (concat (plist-get o :file-prefix) "--answers.webm")
+ )))
+ (emacsconf-get-talk-info)
+ "")
+#+end_src
+
+#+RESULTS:
+#+begin_verbatim
+cp emacsconf-2023-sat-close--saturday-closing-remarks--answers.webm emacsconf-2023-sat-close--saturday-closing-remarks--main.webm; ../rm-from-cache emacsconf-2023-sat-close--saturday-closing-remarks--answers.webm
+cp emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers.webm emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm; ../rm-from-cache emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers.webm
+cp emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers.webm emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm; ../rm-from-cache emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers.webm
+cp emacsconf-2023-sun-close--sunday-closing-remarks--answers.webm emacsconf-2023-sun-close--sunday-closing-remarks--main.webm; ../rm-from-cache emacsconf-2023-sun-close--sunday-closing-remarks--answers.webm
+cp emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers.webm emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm; ../rm-from-cache emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers.webm
+cp emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.webm emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm; ../rm-from-cache emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.webm
+#+end_verbatim
+** Make things easier for next year
+*** TODO [#C] Figure out better space usage for backstage vs public on media.emacsconf.org :emacsconf:
+
+Maybe I can use hard links or symbolic links?
+
+*** TODO Update the makefile :emacsconf:
+** Volunteers
+:PROPERTIES:
+:CUSTOM_ID: coordinate-volunteers
+:STATUS: Need to coordinate people
+:END:
+*** DONE E-mail the list asking people to sign up
+CLOSED: [2023-10-31 Tue 11:12] SCHEDULED: <2023-10-31 Tue>
+
+Hi everyone!
+
+EmacsConf is coming up soon! Here are some roles we need help with
+during the conference:
+
+- Check-in (can handle both tracks):
+ - Keep an eye out for speakers on IRC and in the BigBlueButton room
+ - Give the speaker moderator permissions
+ - https://emacsconf.org/2023/volunteer/checkin/
+- Host (one for each track):
+ - Read out questions (and ask some of their own while waiting for questions to come in)
+ - Remind people how to join
+ - Keep the speaker company
+ - Moderate the Q&A sessions as needed
+ - Let us know when you want the Q&A session to be opened up to everyone
+ - https://emacsconf.org/2023/volunteer/host/
+- Streamer (one for each track):
+ - Manage what happens on the screen
+ - Listen to the audio volume on the stream and adjust as needed, especially for BigBlueButton rooms
+ - https://emacsconf.org/2023/volunteer/stream/
+- Internet Relay Chat scribe (one for each track):
+ - Check the IRC channel for questions and answers and copy them to the talk's Etherpad
+ - https://emacsconf.org/2023/volunteer/irc/
+- Pad scribe (one for each track):
+ - Add notes, questions, and answers to the talk's Etherpad
+ - https://emacsconf.org/2023/volunteer/pad/
+- Other things you might be interested in helping out with - feel free to suggest!
+
+If you let us know which role(s) you're interested in, the track(s)
+you're interested in (general / development) and your availability for
+the conference (ex: Sat AM, Sat PM, Sun AM, Sun PM, or more granular
+as needed), I can make a shift schedule.
+
+If you're new to the role and have questions, we can help you get
+started via e-mail or set up a training meeting. Let me know what you
+want to know and what times what might work for you.
+
+We can also set up a dry run in a couple of weeks so that people can
+try working together. Please let me know your availability for maybe
+Nov 11 or Nov 18 for a dry run.
+
+Looking forward to a nice smooth EmacsConf!
+
+Sacha
+
+*** TODO Prepare shift calendar, ask people to sign up
+SCHEDULED: <2023-11-01 Wed>
+:PROPERTIES:
+:CUSTOM_ID: shifts
+:END:
+
+#+BEGIN_EXPORT md
+<a name="shifts"></a>
+#+END_EXPORT
+
+AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition)
+
+Saturday Dec 2 2023
+
+#+NAME: saturday-shifts
+| | [[https://emacsconf.org/2023/volunteer/host/][Host]] | Streamer | [[https://emacsconf.org/2023/volunteer/checkin/][Checkin]] | [[https://emacsconf.org/2023/volunteer/irc/][IRC]] | [[https://emacsconf.org/2023/volunteer/pad/][Pad]] | Coord |
+|--------+---------+----------+------------+-----+-----+--------|
+| Gen AM | zaeph | sachac | FlowyCoder | | | sachac |
+| Gen PM | zaph | sachac | FlowyCoder | | | sachac |
+| Dev AM | bandali | sachac | FlowyCoder | | | sachac |
+| Dev PM | bandali | sachac | FlowyCoder | | | sachac |
+
+Sunday Dec 3 2023
+
+#+NAME: sunday-shifts
+| | [[https://emacsconf.org/2023/volunteer/host/][Host]] | Streamer | [[https://emacsconf.org/2023/volunteer/checkin/][Checkin]] | [[https://emacsconf.org/2023/volunteer/irc/][IRC]] | [[https://emacsconf.org/2023/volunteer/pad/][Pad]] | Coord |
+|--------+---------+----------+------------+-----+-----+--------|
+| Gen AM | zaeph | sachac | FlowyCoder | | | sachac |
+| Gen PM | zaeph | sachac | FlowyCoder | | | sachac |
+| Dev AM | bandali | sachac | FlowyCoder | | | sachac |
+| Dev PM | bandali | sachac | FlowyCoder | | | sachac |
+
+Backups:
+- dev host/streamer:
+- gen host/streamer:
+- checkin, IRC, pad:
+
+Interested in a shift? Please e-mail [[mailto:emacsconf-org-private@gnu.org]] and we'll help you figure out what you need to learn.
+
+#+begin_src emacs-lisp :var sat=saturday-shifts :var sun=sunday-shifts :rownames no :colnames no :results verbatim replace
+`(setq emacsconf-shifts
+ (list
+ ,@(apply #'append
+ (mapcar
+ (lambda (day)
+ (let ((headers
+ (mapcar
+ (lambda (field)
+ (intern
+ (concat
+ ":"
+ (downcase
+ (if (string-match org-link-bracket-re field)
+ (match-string 2 field)
+ field)))))
+ (cdr (car (cadr day))))))
+ (mapcar
+ (lambda (row)
+ (apply #'append
+ (list 'list :id
+ (when (string-match "^\\([^ ]+\\) \\(AM\\|PM\\)" (car row))
+ (format "%s-%s-%s"
+ (car day)
+ (downcase (match-string 2 (car row)))
+ (downcase (match-string 1 (car row)))))
+ :track
+ (if (string-match "^Gen" (car row)) "General" "Development")
+ :start
+ (format "%sT%s:00:00%s"
+ (elt day 2)
+ (if (string-match "AM" (car row)) "08" "13")
+ emacsconf-timezone-offset)
+ :end
+ (format "%sT%s:00:00%s"
+ (elt day 2)
+ (if (string-match "AM" (car row)) "12" "18")
+ emacsconf-timezone-offset))
+ (seq-map-indexed
+ (lambda (value index)
+ (unless (string= value "")
+ (list (elt headers index) value)))
+ (cdr row))))
+ (cdr (cadr day)))
+ ))
+ (list
+ (list "sat" sat "2023-12-02")
+ (list "sun" sun "2023-12-03"))))))
+
+#+end_src
+
+#+RESULTS:
+:results:
+(setq emacsconf-shifts (list (list :id "sat-am-gen" :track "General" :start "2023-12-02T08:00:00-0500" :end "2023-12-02T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2023-12-02T13:00:00-0500" :end "2023-12-02T18:00:00-0500" :host "zaph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2023-12-02T08:00:00-0500" :end "2023-12-02T12:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2023-12-02T13:00:00-0500" :end "2023-12-02T18:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2023-12-03T08:00:00-0500" :end "2023-12-03T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2023-12-03T13:00:00-0500" :end "2023-12-03T18:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-am-dev" :track "Development" :start "2023-12-03T08:00:00-0500" :end "2023-12-03T12:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-pm-dev" :track "Development" :start "2023-12-03T13:00:00-0500" :end "2023-12-03T18:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac")))
+:end:
+
+*** DONE Document volunteer roles
+CLOSED: [2023-09-26 Tue 11:07]
+:PROPERTIES:
+:CUSTOM_ID: document-volunteer-roles
+:END:
+Copied it over from the previous year
+** Lessons learned
+- Make sure timezones are on anything that has time (schedule page, watch pages, etc.)
+- Remember to publish the icals and schedule org files: ~emacsconf-update-schedule~. Added to the schedule-details.md.
+- For really late submissions, make sure you also create the pad (~emacsconf-pad-prepopulate-talk-pad~) and the BBB room (~emacsconf-spookfox-create-bbb~).
+- We need to move off the current bbb.emacsverse.org or discuss the future of the current BBB VM.
+- Next year, it might be nice to use the intros and generate title slides in order to add them to the videos.
+- Make recording more prominent for speakers and participants
+ - Add check-in step to remind speakers about recording and oops
+ - Send thanks e-mail when BigBlueButton recordings are available, remind people about oops
+ - Set up backstage for post-conference work
+ - Add recording reminder to BigBlueButton welcome text chat message
+ - Consider turning off recording when the host goes off-stream? Bring it up for discussion.
+ - Trim to host leaving by default, and then add the other stuff as offstream chat
+
+* Progress reports
+:PROPERTIES:
+:CUSTOM_ID: progress
+:END:
+- https://emacsconf.org/blog/2023-08-14-cfp-progress/
+- https://emacsconf.org/blog/2023-09-25-draft-schedule
+* E-mail templates
+:PROPERTIES:
+:CUSTOM_ID: templates
+:END:
+** Review
+:PROPERTIES:
+:CUSTOM_ID: review
+:END:
+*** Template
+:PROPERTIES:
+:EMAIL_ID: review
+:CUSTOM_ID: review-template
+:END:
+
+Thanks for submitting your proposal! (ZZZ: feedback) We're experimenting
+with early acceptance this year, so we'll wait a week in case the
+other volunteers want to chime in regarding your talk. =)
+
+** Acceptance
+:PROPERTIES:
+:CUSTOM_ID: acceptance
+:END:
+*** Function
+:PROPERTIES:
+:CUSTOM_ID: acceptance-func
+:END:
+#+begin_src emacs-lisp
+(defun emacsconf-mail-accept-talk (talk &optional template)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "acceptance"))
+ (plist-get talk :email)
+ (list
+ :title (plist-get talk :title)
+ :email (plist-get talk :email)
+ :time (plist-get talk :time)
+ :conf-name emacsconf-name
+ :speakers-short (plist-get talk :speakers-short)
+ :url (concat emacsconf-base-url (plist-get talk :url))
+ :video-target-date emacsconf-video-target-date
+ :year emacsconf-year)))
+#+end_src
+*** Template
+:PROPERTIES:
+:EMAIL_ID: acceptance
+:TO: ${email}
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}, sacha@sachachua.com
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}, sacha@sachachua.com
+:CC: emacsconf-submit@gnu.org
+:LOG_NOTE: accepted talk
+:SUBJECT: ${conf-name} ${year} acceptance: ${title}
+:FUNCTION: emacsconf-mail-accept-talk
+:CUSTOM_ID: acceptance-template
+:END:
+
+Hi, ${speakers-short}!
+
+Looks like all systems are a go for your talk. =) Thanks for proposing
+it! Your talk page is now at ${url} . Please feel free to update it or
+e-mail us if you'd like help with any changes.
+
+If you want to get started on your talk early, we have some
+instructions at https://emacsconf.org/${year}/prepare/ that might help.
+We strongly encourage speakers to prepare a talk video by
+${video-target-date} in order to reduce technical risks and make
+things flow more smoothly. Plus, we might be able to get it captioned
+by volunteers, just like the talks last year. We'll save ${time} minutes
+for your talk, not including time for Q&A. Don't sweat it if
+you're a few minutes over or under. If it looks like a much shorter or
+longer talk once you start getting into it, let us know and we might
+be able to adjust.
+
+I'll follow up with the specific schedule for your talk once things
+settle down. In the meantime, please let us know if you have any
+questions or if there's anything we can do to help out!
+
+Sacha
+
+* Archive
+:PROPERTIES:
+:CUSTOM_ID: archive
+:END:
+
+** DONE Check with hyperdrive and core if they're willing to swap :decision:
+DEADLINE: <2023-10-25 Wed>
+:PROPERTIES:
+:CUSTOM_ID: hyperdrive-core
+:END:
+
+DONE [2023-10-08 Sun]: hyperdrive on Sunday afternoon, will keep an eye out for openings on general track and call it out in the opening remarks so people know that it's a general talk.
+
+If Stefan Kangas puts together [[emacsconf:core][Emacs core development: how it works]]
+speaking as a new Emacs maintainer, that might be a good general
+closing talk on the first day because it can encourage people to help
+with Emacs development. We don't have a lot of space on the General
+track, but if we move [[emacsconf:hyperdrive][hyperdrive.el: Peer-to-peer filesystem in Emacs]]
+to the other track, then there's enough space.
+
+It might also be a good idea to move [[emacsconf:devel]] earlier than
+[[emacsconf:unentangling]] in case John Wiegley can have a live Q&A
+session (he might be travelling at that time, so it's unsure), so that
+there's more time for people to ask emacs-devel highlight questions
+and so that John Wiegley and Stefan Kangas can attend each other's
+Q&A.
+
+Joseph Turner wanted to make sure that people don't assume the
+[[emacsconf:hyperdrive]] talk is too technical for them. We can rename the
+tracks (Track A and Track B)? if that helps, so that people don't
+think the other track is exclusively for more technical things.
+
+Thoughts?
+*** Option A: Here's the schedule with emacsconf:hyperdrive in the second track and emacsconf:core in the first track.
+:PROPERTIES:
+:CUSTOM_ID: core-a
+:END:
+
+#+begin_src emacs-lisp :var filename="emacsconf-hyperdrive-core-swap.svg" :results replace :exports results
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints '())
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("GEN Saturday, Dec 2" :start "2023-12-02 09:00")
+ sat-open
+ adventure
+ uni
+ teaching
+ table
+ taming
+ one
+ (lunch :start "12:00")
+ writing
+ nabokov
+ collab
+ solo
+ ref
+ (devel :track "General")
+ unentangling
+ (core :track "General")
+ (sat-close)
+ ("DEV Saturday, Dec 2" :start "2023-12-02 10:00")
+ (matplotllm :track "Development")
+ (voice :track "Development")
+ (llm :track "Development")
+ (lunch :start "12:00")
+ (overlay)
+ (eval)
+ (repl)
+ (world :track "Development")
+ (hyperdrive :track "Development")
+ ("GEN Sunday, Dec 3" :start "2023-12-03 09:00")
+ sun-open
+ hyperamp
+ koutline
+ (parallel :track "General")
+ eat
+ poltys
+ cubing
+ (lunch :start "12:00")
+ (emms :track "General")
+ (steno :track "General")
+ mentor
+ break
+ (hn :start "15:00")
+ web
+ sharing
+ sun-close
+ ("DEV Sunday, Dec 3" :start "2023-12-03 10:00")
+ scheme
+ test
+ (flat :track "Development")
+ (lunch :start "12:00")
+ gc
+ lspocaml
+ (windows :track "Development")
+ (emacsconf :track "Development")
+ (emacsen :track "Development")
+ )))
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-schedule-default-buffer-minutes 10)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 15)
+ (emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status))
+ (emacsconf-schedule-validation-functions
+ '(emacsconf-schedule-validate-time-constraints
+ ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered
+ emacsconf-schedule-validate-all-talks-present
+ emacsconf-schedule-validate-no-duplicates))
+ (emacsconf-schedule-strategies
+ '(emacsconf-schedule-allocate-buffer-time)))
+#+end_src
+
+#+RESULTS:
+:results:
+- world: Ends at 15:30 after 11:30
+:end:
+
+
+[[my-include:emacsconf-hyperdrive-core-swap.svg?wrap=export html]]
+
+*** Option B: Keep emacsconf:hyperdrive on the first track, and group emacsconf:devel and emacsconf:core on the second track.
+
+We can encourage people to check out the different tracks in the opening remarks.
+
+#+begin_src emacs-lisp :var filename="emacsconf-hyperdrive-core-swap-b.svg" :results replace :exports results
+(emacsconf-schedule-test
+ filename
+ (emacsconf-time-constraints '())
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("GEN Saturday, Dec 2" :start "2023-12-02 09:00")
+ sat-open
+ adventure
+ uni
+ teaching
+ table
+ taming
+ one
+ (lunch :start "12:00")
+ writing
+ nabokov
+ collab
+ solo
+ ref
+ unentangling
+ (hyperdrive)
+ (sat-close :start "16:40")
+ ("DEV Saturday, Dec 2" :start "2023-12-02 10:00")
+ (matplotllm :track "Development")
+ (voice :track "Development")
+ (llm :track "Development")
+ (lunch :start "12:00")
+ (overlay)
+ (eval)
+ (repl)
+ (world :track "Development")
+ (devel :track "Development")
+ (core :track "Development")
+ ("GEN Sunday, Dec 3" :start "2023-12-03 09:00")
+ sun-open
+ hyperamp
+ koutline
+ (parallel :track "General")
+ eat
+ poltys
+ cubing
+ (lunch :start "12:00")
+ (emms :track "General")
+ (steno :track "General")
+ mentor
+ break
+ (hn :start "15:00")
+ web
+ sharing
+ sun-close
+ ("DEV Sunday, Dec 3" :start "2023-12-03 10:00")
+ scheme
+ test
+ (flat :track "Development")
+ (lunch :start "12:00")
+ gc
+ lspocaml
+ (windows :track "Development")
+ (emacsconf :track "Development")
+ (emacsen :track "Development")
+ )))
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-schedule-default-buffer-minutes 10)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 15)
+ (emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status))
+ (emacsconf-schedule-validation-functions
+ '(emacsconf-schedule-validate-time-constraints
+ ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered
+ emacsconf-schedule-validate-all-talks-present
+ emacsconf-schedule-validate-no-duplicates))
+ (emacsconf-schedule-strategies
+ '(emacsconf-schedule-allocate-buffer-time)))
+#+end_src
+
+#+RESULTS:
+:results:
+- world: Ends at 14:55 after 11:30
+:end:
+
+[[my-include:emacsconf-hyperdrive-core-swap-b.svg?wrap=export html]]
+*** Other ideas?
+
+Feel free to suggest something!
+
+Notes:
+
+- emacsconf:sharing is nice to pair with emacsconf:mentor and emacsconf:hn and might be a good general-audience keynote-type thing as well. I don't want to schedule emacsconf:core to compete with it.
+
+
+** DONE Test the idea of three tracks and more aligned times :decision:
+CLOSED: [2023-10-03 Tue 15:35] DEADLINE: <2023-10-13 Fri>
+:PROPERTIES:
+:CUSTOM_ID: three-tracks
+:END:
+
+Decision: We'll stick with the two-track schedule for now because it's
+more likely, and we'll adjust as we get closer to the conference
+depending on speaker submissions and on volunteer availability.
+
+Note: Let's see if we can decide on this by [2023-10-13 Fri] so that we can
+e-mail the draft schedules to people.
+
+Compared to [[#draft-schedule][two-track schedule]]:
+#+INCLUDE: schedule.svg export EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT html
+
+What if we have three tracks instead?
+
+- Two-track advantages as in EmacsConf 2022:
+ - Fewer volunteers needed (host, IRC, pad)
+ - Can do with existing computing power (instead of spinning up another node for VNC+OBS)
+ - Less fear of missing out for participants
+ - votes: zaeph
+- Three-track advantages:
+ - More space between talks for streaming the Q&A
+ - Easier to explain the schedule
+ - More logical grouping
+ - Ends earlier, which is easier for participants from Europe
+ - votes: max (Three tracks is the best policy if you’re more than 75% sure that you can round up the volunteers)
+- [[#three-tracks-sun-am][Three tracks just for Sunday morning]]:
+ - Allows us to have 20 minutes between talks instead of 15
+ - Might be easier to test the idea for just one part of the conference
+
+#+begin_src emacs-lisp :results value replace :exports results :var filename="schedule-option-aligned-talks.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-schedule-tracks
+ '((:label "Saturday"
+ :start "2023-12-02 9:00"
+ :end "2023-12-02 18:00"
+ :tracks ("A" "B" "C"))
+ (:label "Sunday"
+ :start "2023-12-03 9:00"
+ :end "2023-12-03 18:00"
+ :tracks ("A" "B" "C"))))
+ (emacsconf-time-constraints '())
+ (emacsconf-tracks
+ '((:name "A" :id "a")
+ (:name "B" :id "b")
+ (:name "C" :id "c")))
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("A Saturday, Dec 2" :start "2023-12-02 09:00" :track "A")
+ (sat-open)
+ adventure
+ (uni :start "9:40")
+ (table :start "10:30")
+ (teaching :start "11:15")
+ (lunch :start "12:00" :time 60)
+ collab
+ (solo :start nil)
+ (hn :start "15:00")
+ (web :start nil)
+ sat-close
+ ("B Saturday, Dec 2" :start "2023-12-02 09:40" :track "B")
+ (one :start nil)
+ (poltys :start "10:30")
+ (taming :start "11:15")
+ (lunch :start "12:00" :time 60)
+ writing
+ (nabokov :start "13:40")
+ (steno :start "14:20")
+ (emacsen :start "15:30")
+ ("C Saturday, Dec 2" :start "2023-12-02 9:40" :track "C")
+ (matplotllm)
+ (voice :start "10:30")
+ (llm :start "11:15")
+ (lunch :start "12:00" :time 60)
+ overlay
+ eval
+ (repl :start "14:20")
+ (emacsconf :start "15:30")
+ ("A Sunday, Dec 3" :start "2023-12-03 09:00" :track "A")
+ (sun-open :time 10)
+ hyperamp
+ (koutline :start "10:00")
+ (test :start "11:00")
+ (lunch :start "12:00" :time 60)
+ (emms :start nil)
+ (devel :start "14:00")
+ (mentor :start nil)
+ (sharing :start "15:00")
+ (sun-close :start "16:00")
+ ("B Sunday, Dec 3" :start "2023-12-03 09:10" :track "B")
+ (parallel :start "10:00")
+ (eat :start "10:30")
+
+ (gc :start "11:00")
+ (lunch :start "12:00" :time 60)
+ hyperdrive
+ (ref :start "14:00")
+ (unentangling :start "15:00")
+ ("C Sunday, Dec 3" :start "2023-12-03 09:10" :track "C")
+
+ (scheme :start "10:00")
+ (lspocaml :start "11:00")
+ (flat :start "11:30")
+
+ (lunch :start "12:00" :time 60)
+ (windows :start nil)
+ (cubing :start "14:00")
+ (extending :start "15:00")
+
+
+ )))
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-schedule-default-buffer-minutes 20)
+ (emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status))
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 20)
+ (emacsconf-schedule-validation-functions
+ '(emacsconf-schedule-validate-time-constraints
+ ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered
+ emacsconf-schedule-validate-all-talks-present
+ emacsconf-schedule-validate-no-duplicates))
+ (emacsconf-schedule-strategies
+ '(emacsconf-schedule-copy-previous-track emacsconf-schedule-allocate-buffer-time)))
+#+end_src
+
+#+RESULTS:
+:results:
+:end:
+
+#+begin_comment
+[[file:schedule-option-aligned-talks.svg]]
+#+end_comment
+
+#+INCLUDE: schedule-option-aligned-talks.svg export EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT html
+*** Three tracks for Sunday morning?
+:PROPERTIES:
+:CUSTOM_ID: three-tracks-sun-am
+:END:
+
+
+
+#+begin_src emacs-lisp :results value replace :exports results :var filename="schedule-option-sun-am.svg" :eval never-export
+(emacsconf-schedule-test
+ filename
+ (emacsconf-schedule-tracks
+ '((:label "Saturday"
+ :start "2023-12-02 9:00"
+ :end "2023-12-02 18:00"
+ :tracks ("A" "B" "C"))
+ (:label "Sunday"
+ :start "2023-12-03 9:00"
+ :end "2023-12-03 18:00"
+ :tracks ("A" "B" "C"))))
+ (emacsconf-time-constraints '())
+ (emacsconf-tracks
+ '((:name "A" :id "a")
+ (:name "B" :id "b")
+ (:name "C" :id "c")))
+ (arranged
+ (emacsconf-schedule-inflate-sexp
+ '(("A Saturday, Dec 2" :start "2023-12-02 09:00" :track "A")
+ sat-open
+ adventure
+ uni
+ table
+ teaching
+ writing
+ (lunch :start "12:00")
+ nabokov
+ collab
+ solo
+ unentangling
+ ref
+ (devel)
+ (sat-close)
+ ("DEV Saturday, Dec 2" :start "2023-12-02 10:00" :track "B")
+ (matplotllm)
+ (voice)
+ (llm)
+ (lunch :start "12:00")
+ (overlay)
+ (eval)
+ (repl :start "14:00")
+ (hyperdrive)
+ (world)
+ ("GEN Sunday, Dec 3" :start "2023-12-03 09:00" :track "A")
+ sun-open
+ hyperamp
+ koutline
+ one
+ cubing
+ (lunch :start "12:00" :time 60)
+ (emms)
+ taming
+ mentor
+ (hn :start "15:00")
+ web
+ sharing
+ sun-close
+ ("DEV Sunday, Dec 3" :start "2023-12-03 10:00" :track "B")
+ scheme
+ eat
+ (flat)
+ lspocaml
+ (lunch :start "12:15" :time "45")
+ gc
+ (steno)
+ (windows)
+ (emacsen)
+ (emacsconf)
+ ("C Sunday Dec 3" :start "2023-12-03 10:00" :track "C")
+ poltys
+ (parallel)
+ test
+ )))
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-schedule-default-buffer-minutes 20)
+ (emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status))
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 20)
+ (emacsconf-schedule-validation-functions
+ '(emacsconf-schedule-validate-time-constraints
+ ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered
+ emacsconf-schedule-validate-all-talks-present
+ emacsconf-schedule-validate-no-duplicates))
+ (emacsconf-schedule-strategies
+ '(emacsconf-schedule-copy-previous-track emacsconf-schedule-allocate-buffer-time)))
+#+end_src
+
+#+RESULTS:
+:results:
+- unentangling: Starts at 14:35 before 15:00
+- world: Ends at 16:20 after 11:30
+- Missing talks: core
+:end:
+
+#+begin_comment
+[[file:schedule-option-sun-am.svg]]
+#+end_comment
+
+#+INCLUDE: schedule-option-sun-am.svg export EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT html
diff --git a/2023/organizers-notebook/schedule-option-aligned-talks.svg b/2023/organizers-notebook/schedule-option-aligned-talks.svg
new file mode 100644
index 00000000..f7a1de0f
--- /dev/null
+++ b/2023/organizers-notebook/schedule-option-aligned-talks.svg
@@ -0,0 +1 @@
+<svg width="800" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(13,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(28,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:40-10:00 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="62" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(91,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:30-10:40 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="141" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(154,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 11:15-11:35 Teaching computer and data science with literate programming tools</title> <rect x="211" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(240,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:00- 1:20 Collaborative data processing and documenting using org-babel</title> <rect x="376" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(405,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/woof" title="Watch Over Our Folders" data-slug="woof"> <title> 1:40- 2:00 Watch Over Our Folders</title> <rect x="439" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(468,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> woof</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(530,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/hn" title="The many ways to browse Hacker News from Emacs" data-slug="hn"> <title> 3:00- 3:10 The many ways to browse Hacker News from Emacs</title> <rect x="564" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(577,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hn</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web" data-slug="web"> <title> 3:30- 4:10 Emacs saves the Web</title> <rect x="611" y="15" opacity="0.8" width="62" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(671,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:30- 4:40 Saturday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(718,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 9:40-10:00 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="62" y="71" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(91,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 10:30-10:50 The browser in a buffer</title> <rect x="141" y="71" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(170,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/taming" title="Taming things with Org Mode" data-slug="taming"> <title> 11:15-11:25 Taming things with Org Mode</title> <rect x="211" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(224,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> taming</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(389,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:40- 1:50 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="439" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(452,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/steno" title="Programming at 200 wpm" data-slug="steno"> <title> 2:20- 2:50 Programming at 200 wpm</title> <rect x="501" y="71" opacity="0.8" width="47" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(546,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 3:30- 3:50 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="611" y="71" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(640,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 9:40- 9:50 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="62" y="127" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(75,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Improving access to AI-assisted literate programming with voice control" data-slug="voice"> <title> 10:30-10:50 Improving access to AI-assisted literate programming with voice control</title> <rect x="141" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(170,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 11:15-11:35 LLM clients in Emacs, functionality and standardization</title> <rect x="211" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(240,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with Overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with Overlays</title> <rect x="376" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(405,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:40- 1:50 Editor Integrated REPL Driven Development for all languages</title> <rect x="439" y="127" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(452,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:20- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="501" y="127" opacity="0.8" width="62" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(561,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 3:30- 3:50 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="611" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(640,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,200)"> <title> Schedule for Sunday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(13,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:10- 9:30 Top 10 ways Hyperbole amps up Emacs</title> <rect x="15" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(44,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 10:00-10:20 Using Koutline for stream of thought journaling</title> <rect x="94" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(123,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 11:00-11:20 What I learned by writing test cases for GNU Hyperbole</title> <rect x="188" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(436,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 2:00- 2:10 Emacs development updates</title> <rect x="470" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(483,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:30- 2:40 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="517" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(530,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:00- 3:20 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="564" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(593,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:00- 4:10 Sunday closing remarks</title> <rect x="658" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(671,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/parallel" title="Parallel Text Replacement: Does P = NP?" data-slug="parallel"> <title> 10:00-10:10 Parallel Text Replacement: Does P = NP?</title> <rect x="94" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(107,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:30-10:40 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="141" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(154,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 11:00-11:20 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="188" y="71" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:00- 1:40 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="376" y="71" opacity="0.8" width="62" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(436,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:00- 2:20 Org-Mode workflow: informal reference tracking</title> <rect x="470" y="71" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(499,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:00- 3:10 (Un)entangling projects and repos</title> <rect x="564" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(577,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(123,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 11:00-11:10 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="188" y="127" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(201,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:30-11:40 A modern Emacs look-and-feel without pain</title> <rect x="235" y="127" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(248,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 1:00- 1:40 Windows into Freedom</title> <rect x="376" y="127" opacity="0.8" width="62" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(436,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 2:00- 2:20 Speedcubing in Emacs</title> <rect x="470" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(499,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/extending" title="GNU Emacs for electronics, note-taking, and as lightweight IDE" data-slug="extending"> <title> 3:00- 3:20 GNU Emacs for electronics, note-taking, and as lightweight IDE</title> <rect x="564" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(593,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> extending</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> \ No newline at end of file
diff --git a/2023/organizers-notebook/schedule-option-sun-am.svg b/2023/organizers-notebook/schedule-option-sun-am.svg
new file mode 100644
index 00000000..e5f85d7b
--- /dev/null
+++ b/2023/organizers-notebook/schedule-option-sun-am.svg
@@ -0,0 +1 @@
+<svg width="800" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,200)"> <title> Schedule for Sunday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> \ No newline at end of file
diff --git a/2023/organizers-notebook/schedule.svg b/2023/organizers-notebook/schedule.svg
new file mode 100644
index 00000000..f07cd7ad
--- /dev/null
+++ b/2023/organizers-notebook/schedule.svg
@@ -0,0 +1 @@
+<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="https://emacsconf.org/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="https://emacsconf.org/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="https://emacsconf.org/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="https://emacsconf.org/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="https://emacsconf.org/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="https://emacsconf.org/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="https://emacsconf.org/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="https://emacsconf.org/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="https://emacsconf.org/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="https://emacsconf.org/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="https://emacsconf.org/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="https://emacsconf.org/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="https://emacsconf.org/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="https://emacsconf.org/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="https://emacsconf.org/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="https://emacsconf.org/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="https://emacsconf.org/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="https://emacsconf.org/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="https://emacsconf.org/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:59- 9:04 Sunday opening remarks</title> <rect x="-2" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="https://emacsconf.org/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="https://emacsconf.org/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="https://emacsconf.org/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="https://emacsconf.org/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="https://emacsconf.org/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="https://emacsconf.org/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="https://emacsconf.org/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="https://emacsconf.org/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="https://emacsconf.org/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="https://emacsconf.org/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="https://emacsconf.org/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="https://emacsconf.org/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="https://emacsconf.org/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="https://emacsconf.org/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="https://emacsconf.org/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="https://emacsconf.org/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> \ No newline at end of file
diff --git a/2023/planning.md b/2023/planning.md
new file mode 100644
index 00000000..1cff7c49
--- /dev/null
+++ b/2023/planning.md
@@ -0,0 +1,26 @@
+[[!meta title="Planning"]]
+[[!meta copyright="Copyright &copy; 2020, 2021, 2022, 2023 Amin Bandali"]]
+
+Most of the EmacsConf organizers and other volunteers hang out in the
+`#emacsconf` IRC channel on `irc.libera.chat`. If you would like to
+get involved, come by our `#emacsconf` channel and say hi!
+
+Besides IRC, the [emacsconf-org][emacsconf-org] public mailing list is
+the main medium of communication for the EmacsConf organizers.
+
+You can find most of the backstage notes in the
+[[organizers' notebook|organizers-notebook]].
+
+You might find it useful to also look at the plans and notes from
+previous years:
+
+- 2022: [[planning|2022/planning]],
+ [[organizers' notebook|2022/organizers-notebook]]
+- 2021: [[planning|2021/planning]],
+ [[organizers' notebook|2021/organizers-notebook]]
+- 2020: [[planning|2020/planning]],
+ [[organizers' notebook|2020/organizers-notebook]]
+- 2019: [[planning|2019/planning]],
+ [[organizers' notebook|2019/organizers-notebook]]
+
+[emacsconf-org]: https://lists.gnu.org/mailman/listinfo/emacsconf-org
diff --git a/2023/prepare.md b/2023/prepare.md
new file mode 100644
index 00000000..7638933e
--- /dev/null
+++ b/2023/prepare.md
@@ -0,0 +1,262 @@
+[[!meta title="Preparing your talk"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali; 2021, 2022 Amin Bandali, Sacha Chua, Leo Vivier; 2023 Sacha Chua"]]
+
+This page contains tips for preparing your talk. (Target date:
+**November 4**) If you have any questions, concerns, or suggestions
+please feel free to write to one our organizational mailing lists: the
+public <emacsconf-org@gnu.org> list, or the private
+<emacsconf-org-private@gnu.org> list, depending on the nature of the
+matter you would like to discuss.
+
+Note: being part of a wiki, this page is subject to change (including
+by you!); so please check back every now and again for any changes and
+updates.
+
+We'll bring up the web-based upload service at some point. Let us know
+at <emacsconf-org-private@gnu.org> if you're already ready to go!
+<!--[[Already done? Upload your video and other files|upload]]-->
+
+## Guidelines for conduct
+
+Please review our [[guidelines for conduct|conduct]] when preparing your
+talk to make sure we’re all on the same page and strive to make the
+event a great experience for all. If you’re not sure whether your talk
+or presentation style meets the guidelines laid out in the guidelines
+for conduct, we’d be happy to help. You can email Sacha Chua at
+<sacha@sachachua.com> to chat more about this.
+
+## Recording your talk
+
+To help EmacsConf 2023 run smoothly, please prerecord your talk, and
+plan to upload your video(s) by **November 4** to allow us enough time
+to do any needed processing (e.g. format or codec conversion) in
+preparation for the event. Please consider submitting a prerecording as
+early as possible so that we can see if volunteers can caption your
+video to make it more accessible and searchable.
+
+To make it easier for organizers and attendees to correctly pronounce
+your name, please start your video with something along the lines of:
+
+"Hi! I’m ${NAME} and I’ll be talking about ${TOPIC}."
+
+### Tools
+
+To record your video, you could use any of the following pieces of
+free software, depending on your needs:
+
+- [OBS](//obsproject.com)
+- [SimpleScreenRecorder](//www.maartenbaert.be/simplescreenrecorder/)
+- [vokoscreenNG](//linuxecke.volkoh.de/vokoscreen/vokoscreen.html)
+- [peek](//github.com/phw/peek)
+- [ffmpeg](//trac.ffmpeg.org/wiki/Capture/Desktop)
+
+If you decide to use OBS, please make sure to verify the window-capture
+options. Most notably, there is a “Swap red and blue” option that is
+necessary for some setups, and it's easy to miss it.
+
+You might find the following free software programs useful for editing
+your video recordings:
+
+- [Kdenlive](//kdenlive.org/en/)
+- [Blender](//www.blender.org)
+- [Pitivi](http://www.pitivi.org)
+
+Per GNU Project’s [Guide to
+Formats](//audio-video.gnu.org/docs/formatguide.html), we prefer to
+receive prerecorded videos in formats unencumbered by software patents,
+such as `video/webm` ([WebM](https://www.webmproject.org/)-encoded video
+files, with `.webm` file extension) and `video/ogg` (video files encoded
+with the Theora video codec, encapsulated in an Ogg transport layer,
+with `.ogg` or `.ogv` file extension). However, if for one reason or
+another you are unable to send us your prerecorded video in one of the
+above formats, you may submit them in other common formats, like MPEG-4
+(`.mp4`), and we will convert them to our preferred formats on your
+behalf.
+
+*Prepare recorded video in 720p (1280px by 720px) or higher, in the
+WebM format if possible.*
+
+### Audio quality
+
+Audio quality can go a long way in making your talk enjoyable to
+watch. Consider the background noise in the room that you are using to
+record, and see if you can temporarily turn off things for your
+recording. Start by recording a separate video with at least **5
+seconds of quiet** in the same room in which you plan to do your main
+recording. You can listen to it to see how quiet things are, and
+figure out if there are other things you can turn off such as fans or
+other computers. When you upload your talk, you can also include your
+latest silence recording so that we can use it to reduce noise in your
+video.
+
+If you have an **external microphone or a headset**, try
+recording the audio through that so that you can reduce the sound of
+the computer itself. If you have a smartphone, that might also be a
+good way to record audio that you can then combine with your video
+afterwards. Some people find that draping a blanket over their head
+(including the microphone under the blanket) can help reduce echo,
+which can be a good excuse to make a blanket fort. (It's for
+EmacsConf!)
+
+Many speakers prefer to record and edit the audio until they're happy
+with how it fits in the time, and then add the slides or videos
+afterwards. It might be easier than trying to do both the audio and
+the video in one go.
+
+### Appearance
+
+The talks will be broadcast with a resolution of **1280x720px**
+(720p), so it may help to switch to that size before you record.
+Please make sure your text will be easy to read.
+[You can change the font-size in your Emacs.](https://www.emacswiki.org/emacs/SetFonts#h5o-6)
+(Maybe `M-x customize-face default` and set the height to 150 or 180?) If you
+are capturing a single window, you can also resize it before you
+record.
+
+We recommend using **dark text on a light background** for your
+recording, as this can be easier to see especially for people who are
+visually impaired. Themes with more contrast are easier to read than
+low-contrast ones. If you use a dark theme with your Emacs, you can
+change to a lighter one with `M-x customize-theme` (look for those
+with a `-light` suffix). The `modus-themes-load-operandi` command from
+the `modus-themes` package can be a good option.
+
+# Compression
+
+If you would like to compress your video before uploading, the following shell script may be useful:
+
+ Q=32
+ CPU=8
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -an -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -g 240 -pass 1 -f webm -threads $CPU /dev/null &&
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a libopus -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -pass 2 -g 240 -threads $CPU "$2"
+
+If you put it in a file called `compress-video.sh`, you can execute it
+from the command line with something like `sh compress-video.sh
+input-file.webm output-file.webm`. It will compress the file in two
+passes. During the first pass, the frame count will increase, but the
+speed will be 0. After the first pass, it will display proper progress
+information.
+
+<a name="tech-check"></a>
+# Tech-check
+
+We ask that speakers who plan to participate in live Q&A sessions schedule
+a short tech-check in the weeks leading to the conference; this is to ensure
+that you can perform all the common tasks you’d need such as sharing your
+screen or toggling your microphone.
+
+We use BigBlueButton for our video-conferencing needs, and a quick way
+to familiarize yourself with it is to run it in a test room:
+<https://test.bigbluebutton.org/> Tiling window managers and
+multi-monitor setups can be a little tricky, so it's good to figure
+out a setup that works for you. If there are things you'd like to
+confirm by having another person in the meeting, such as audio
+quality, please feel free to get in touch with us and we’ll sort
+things out together.
+
+Thank you so much for helping with EmacsConf 2023!
+
+# Frequently-asked questions
+
+## Can I present live?
+
+Tech issues kept happening during EmacsConf 2023, so we’d really
+prefer that all talks have prerecorded videos. There will be time for
+live questions and answers, though, so if you can record a short video
+covering your main points, you might be able to go into more detail in
+live Q&A.
+
+## I have so much I want to share. Can I record a longer video?
+
+The conference program has so many interesting talks. We wish we
+could fit everything in at full length! (Maybe EmacsConf month?)
+Please think of your video as a short teaser that can get people
+interested and point them to where they can find out more. You can
+email <emacsconf-submit@gnu.org> links and other notes to add to the
+wiki page for your talk. If you’d like to record a longer video *in
+addition* to the short one for the main conference, please feel free
+to send us that too.
+
+Additionally, even though it is tempting, please refrain from speaking
+super quickly or fast-forwarding your recording to make it fit within
+the format. Trimming out the silences and the filler words can help
+sometimes, but a better solution for you might be to condense your
+talk to the essentials, then write, record, and edit your voice-over.
+Once you've figured out how to use the time, you can record your video
+to go along with it. Don't sweat being a few minutes over or under,
+that's cool.
+
+Feel free to send some questions for the host to ask you during the
+Q&A so that you can address extra points that didn't make it into the
+video.
+
+## I can’t figure out how to record the video. Can I just present the talk?
+
+We might be able to help you record your talk using the BigBlueButton
+web conferencing system before the conference. Please email
+<emacsconf-submit@gnu.org> with some times that might work for you and
+we’ll see if a volunteer can meet up with you to record it.
+
+## Do I need to follow some visual guidelines for the presentation?
+
+- Dark text on a light background is more legible than the opposite
+ (especially for people who are visually impaired), and more contrast
+ is better than a low-contrast theme. This stands for both your
+ slides and your Emacs theme.
+- If you think your fonts might be too small in your slides or in Emacs,
+ they might very well be. [You can change the font-size in your
+ Emacs](https://www.emacswiki.org/emacs/SetFonts#h5o-6), but you can
+ also play with the size of the captured window during your recording.
+- Try to minimize the screen-flashes that occur when you switch between
+ windows, especially if their themes do not cohere (light-to-dark and
+ the reverse). If you can edit your recording, fades and other
+ transitions are a neat solution to this problem.
+
+## How do I show my keystrokes on screen?
+
+In Emacs, you can use
+[interaction-log.el](https://github.com/michael-heerdegen/interaction-log.el)
+(in MELPA) to display the keystrokes and the commands they run in a separate
+buffer. For a system-wide solution, you can look into
+[screenkey](https://gitlab.com/screenkey/screenkey).
+
+## I’m not used to talking to myself. Can I present the talk to someone?
+
+We might be able to help you record your talk using the BigBlueButton
+web conferencing system before the conference. Please email
+<emacsconf-submit@gnu.org> with some times that might work for you and
+we’ll see if a volunteer can meet up with you to record it.
+
+## Can I see the other proposed talks?
+
+Once we’ve emailed the speakers about their acceptance, we’ll put
+up the talk wiki pages. That way, you can see what else is going on
+in the conference and maybe coordinate with other speakers in order to
+minimize overlap and maximize awesomeness.
+
+## What if there are lots of great questions during Q&A and it's already time for the next talk?
+
+The stream will move on to the next talk, but people can join the
+BigBlueButton meeting room and keep chatting with you for as long as
+you want to keep going. You can also continue answering questions on
+the collaborative pad or IRC, and we’ll copy questions and answers
+onto the wiki page afterwards so that you can answer them in your own
+time after the event.
+
+## More questions?
+
+Please email <emacsconf-submit@gnu.org>. We’d love to hear from you.
+
+Thanks for contributing to EmacsConf 2023!
+
+<!-- <a name="tech-checklist"></a> -->
+<!-- #### Tech checklist -->
+
+<!-- - Can you speak and be heard? Is there echo? -->
+<!-- - Can you hear the organizer? -->
+<!-- - Can you share your screen? Is the screen readable? -->
+<!-- - If you plan to show your keystrokes, is that display visible? -->
+<!-- - If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background? -->
+<!-- - Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you? -->
+<!-- - Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes? -->
+<!-- - Do you need help finding your way around IRC so that you can check into `#emacsconf-org`? What is your IRC nickname? -->
diff --git a/2023/qa.md b/2023/qa.md
new file mode 100644
index 00000000..48e24898
--- /dev/null
+++ b/2023/qa.md
@@ -0,0 +1,43 @@
+[[!meta title="Q&A participation"]]
+[[!meta copyright="Copyright &copy; 2022-2023 Sacha Chua"]]
+
+# BigBlueButton
+
+## Notes for participants
+
+- You can ask questions via the text chat or by voice. Voice and webcam are totally optional.
+- Please stay muted until it's your turn.
+- To raise your hand:
+ 1. Open the participant list. If it's hidden, use the person icon in the top left.
+ 2. Click on your name.
+ 3. Click on **Set Status** - **Raise**.
+ You can lower your hand by clicking on your name and choosing **Clear Status**.
+- Headphone or earphones can help avoid audio feedback.
+- If performance is slow, please keep your webcam off.
+- The recording of this session will be posted on the talk page. We'll
+ also copy questions, answers, and notes from the text chat.
+ Everything will be shared under the Creative Commons
+ Attribution-ShareAlike 4.0 License.
+- If you can, please add questions, answers, and notes to the
+ Etherpad. The URL for the Etherpad is on the talk page.
+- Please follow <https://emacsconf.org/conduct> guidelines.
+- If something should be omitted from the recording, put a NOTE in the
+ chat and explain what the organizers should do.
+
+## Notes for the speaker
+
+- You can answer questions in whatever order you want.
+- You can skip questions or take your time to think about them.
+- Please read the questions out loud before answering. This makes it
+ easier to save the questions and answers afterwards.
+- We'll let you know when the stream is going to move on to the next
+ talk. Even after the streamer switches over to the next talk, you
+ can still stay and chat here for as long as you like. When you're
+ done, you can wrap up and leave.
+- If something should be omitted from the recording, put a NOTE in the
+ chat and explain what the organizers should do.
+
+# IRC
+
+- If you add "Q: " as a prefix when asking a question (ex: "Q: Could you please give more details on ..."), it will be easier for us to notice your question.
+- If you are discussing a previous talk after the next talk starts, you may want to add the talk ID to your message to make it clearer. (ex: "re:devel I think ...")
diff --git a/2023/report.md b/2023/report.md
new file mode 100644
index 00000000..608dcb05
--- /dev/null
+++ b/2023/report.md
@@ -0,0 +1,366 @@
+<!-- report.md is exported report.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2023/report.org](/2023/report.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/).
+[[!meta title="EmacsConf 2023 Report"]]
+[[!date "2024-01-10"]]
+[[!meta copyright="Copyright &copy; 2024 Sacha Chua"]]
+
+
+# Table of Contents
+
+- [Overview](#overview)
+- [Highlights](#highlights)
+- [Technical details](#technical-details)
+- [Process improvements](#process-improvements)
+- [Finances](#finances)
+- [Acknowledgements](#acknowledgements)
+- [Updates](#updates)
+
+
+<a id="overview"></a>
+
+# Overview
+
+EmacsConf 2023 was held on December 2 and 3 as an online conference. We had 41 talks across two tracks (general and development), with a total of 16 hours of presentations, 12 hours of Q&A via web conference, and lots of lively discussion across IRC and Etherpad. Throughout the conference, there were 100-250 people watching via the livestream, and more than 80 people joined the live Q&A web conferences. There were also satellite events in Switzerland and Slovenia where people watched together.
+
+Thanks to volunteers who edited captions for pre-recorded videos, we were able to broadcast all 25 early submissions with open captions. This not only made talks more accessible while watching the livestreams, but it also made it easier to enjoy the talks in noisy environments or to catch up on talks. People said:
+
+- "that is some hero subtitling on 'cccc' to 'C-c C-c'. thank you!"
+
+If you'd like to help edit captions or add chapter markers, we'd love to hear from you. Please see <https://emacsconf.org/captioning> for details.
+
+We posted pre-recorded videos and transcripts on talk pages shortly after they started streaming, and live talks and Q&A sessions within two weeks. Automatic captions are now available for the rest of the talks and Q&A sessions. We've also archived questions and comments from IRC and Etherpad onto the talk pages. You can find the talk pages at <https://emacsconf.org/2023/talks> . The videos are also available on Toobnix (<https://toobnix.org/c/emacsconf/videos>) and YouTube (<https://www.youtube.com/@EmacsConf>).
+
+
+<a id="highlights"></a>
+
+# Highlights
+
+EmacsConf 2023 started with a full day of Org Mode talks on the general track, going from introducing people to Emacs through an Org-Mode-based [text adventure game](https://emacsconf.org/2023/talks/adventure "An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp") all the way to [managing bibliographic references](https://emacsconf.org/2023/talks/ref "Org-Mode workflow: informal reference tracking") and [exporting build instructions for different systems](https://emacsconf.org/2023/talks/doc "Literate Documentation with Emacs and Org Mode"). There was a group of Hyperbole talks on [new developments](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs") and [outlining workflows](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling") on the second day, and there were interesting experiments with using Emacs for fun and productivity. On the development track, speakers shared tips for working with Emacs Lisp and other languages. There was also a lot of interest in exploring emerging artificial intelligence tools. Here are some highlights:
+
+**Collaboration:** In [Collaborative data processing and documenting using org-babel](https://emacsconf.org/2023/talks/collab "Collaborative data processing and documenting using org-babel"), Jonathan Hartman and Lukas C. Bossert showed how to do reproducible research together in Emacs by using the CRDT package along with Org Mode's support for running many different languages in your notes. People said:
+
+- "Great collaborative conversation and step-wise example creates a
+ different (and impactful) framing.  Thank you!"
+- "Truly one of the most impressive talks of the day. Congrats! Very
+ inspiring"
+- "I like the way you highlight the point you are talking about in
+ real time."
+- "Just came here to say watching two users editing the same buffer
+ simultaneously is BLOWING MY MIND"
+- "that's really cool.  One of the parts that's a bit hidden from the
+ user is seeing the format that the data is in inside the shell
+ script"
+- "such a slick presentation, I like the CRDT collaboration angle,
+ looks like an end-game UX"
+- "For those of you who remember the bad old days before "reproducible
+ research," that talk is even more impressive. Great job!"
+
+**Fun:** [How I play TTRPGs in Emacs](https://emacsconf.org/2023/talks/solo "How I play TTRPGs in Emacs") by Howard Abrams wowed people not only with the Org Mode workflow he shared but also the general vibe of the video. People said:
+
+- "My favorite talk was Howard's, not because I do role playing games
+ (last was probably a few late night D&D sessions in the 70s), but
+ just seeing the sheer existential joy possible in using emacs to
+ scratch ones one itch, and then sharing the experience." [@eludom](https://fosstodon.org/@eludom/111674175511553798)
+- "Really cool project! - Also the enthusiasm for the topic is really
+ contagious!"
+- "the camera and lighting already has me sold"
+- "I can see this one is going to be a classic"
+- "Howard's stuff is always great. this particular thing is totally
+ unchained. :D"
+- "Every time Howard publishes a talk, I end up doing one more thing
+ in a new radical or literate way inside Emacs - currently looking
+ into how to go about literate snow shoveling for the winter ahead."
+
+**Community:** In [Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)](https://emacsconf.org/2023/talks/mentor "Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)"), Jeremy Friesen talked about his experiences staying curious, learning from people around him, and encouraging people to grow no matter what tools they currently use. People said:
+
+- "The talks that impacted me the most were @takeonrules Jeremy Friesen's talks, ostensibly about writing with #Emacs and talking to others about Emacs. Substantively they got right to the heart of what makes Emacs so powerful as a platform, as a community, and as a model for how #FreeSoftware liberates us. His embodying the attitudes of self-sufficiency, mutual aid, empathy, open-mindedness, and authentic creativity showed us ourselves at our best." [@jameshowell](https://emacs.ch/@jameshowell/111671402961867425), quoted under the GNU Free Documentation License 1.3
+- "such valuable work being described"
+- "I love the attitudes and worldview that infuses your blog posts and
+ your talks this weekend."
+
+**Development:** We also heard from core developers such as [John Wiegley](https://emacsconf.org/2023/talks/devel "Emacs development updates"), [Stefan Kangas](https://emacsconf.org/2023/talks/core "Emacs core development: how it works"), and [Ihor Radchenko](https://emacsconf.org/2023/talks/gc "emacs-gc-stats: Does garbage collection actually slow down Emacs?") on Emacs development updates, processes, and experiments. On the package side, [Yoni Rabkin](https://emacsconf.org/2023/talks/emms "Emacs MultiMedia System (EMMS)") shared a glimpse of how Emacs package development works with a deep dive into EMMS, the Emacs Multimedia System. People said:
+
+- "Thanks John for all the news on Emacs and informative answers."
+- "Thank you Stefan! That was all really cool! :D"
+- "Came for clear-cut magic bullet answers, left with nuanced
+ analysis - and that, surprise, Eli was overall right? Now what to do
+ with that viral gc init snippet that I've never taken time to
+ measure myself but keep anyway&#x2026;"
+- "I very much liked Yoni Rabkin's calm,measured talk about EMMS. It
+ described not only the software but how the development team
+ worked." ([@franburstall](https://emacs.ch/@franburstall/111675280003261648))
+- "I just really enjoy seeing the folks that contribute to free
+ software. They are truly people to emulate. That goes double for
+ Yoni."
+
+**Automation:** From [using overlays to simplify complex compilation error messages](https://emacsconf.org/2023/talks/overlays "Improving compiler diagnostics with overlays") to [writing tests](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") to [organizing EmacsConf itself](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference"), Emacs makes it easier to do stuff and have fun along the way. People said:
+
+- (about overlays) "That was great, showing how relatively easy it is to extend Emacs
+ with features like that."
+- "Whatever you do, don't miss out @sachac's talk (this PM or
+ otherwise). I stumbled on it on @bandali's channel following a link to
+ Howard's, and it's a \*​masterclass\* in wrangling things together to
+ automate workflows in Emacs/Elisp/Org. When people ask about VS Code,
+ this shows we are talking different mindsets and tools altogether."
+- "I'll be rewatching it multiple times too, that's how packed in useful
+ insights and tidbits it is. 'What do you mean Emacs/Org is a platform
+ and a way of life?' Well, here you go, great exemplar :)"
+- "The breadth of use cases and applications, and range of
+ Emacs/Elisp/Org capabilities reached for in this talk is fascinating."
+
+**Future:** GNU Emacs is almost 40 years old and still going strong. Marcus Birkenkrahe shared his experiences [using Emacs to teach students data science](https://emacsconf.org/2023/talks/teaching "Teaching computer and data science with literate programming tools"), and Jacob Boxerman talked about what it's like as [a student and as a video creator](https://emacsconf.org/2023/talks/sharing "Sharing Emacs is Caring Emacs: Emacs education and why I embraced video"). Emacs continues to be a great platform for experimenting with everything from [parallel text replacement](https://emacsconf.org/2023/talks/parallel "Parallel text replacement") all the way up to [artificial intelligence with large language models](https://emacsconf.org/2023/talks/llm "LLM clients in Emacs, functionality and standardization"). People said:
+
+- "My personal highlights are not necessarily about specific
+ presentations, but about represented topics:
+
+ 1. Multiple talks on using Emacs/Org mode in university setting both on student and lecturer side. This gives a promise on more people being exposed to Emacs and more people using it in their professional toolchain.
+ 2. The rise of LLM talks - Emacs being text editor is a natural interface to LLMs that do text-crunching.
+ 3. "Parallel text replacement" talk showing us that even the most common text-based interfaces are not yet "figured-out". Even in Emacs."
+
+ [@yantar92](https://emacs.ch/@yantar92/111671107089286310)
+- "2nd favorite was Andrew Hyatt's LLM talk because it clearly showed
+ how relevant a programmable text processing environment (that
+ happens to have an editor) is to the brave new world of LLMs,
+ possibly being as he intimated, positioned to lead the way.
+
+ What's old is new. Emacs was born in an AI lab. The challenge of
+ computing as far back a Alan Turing was intelligence. This talk
+ shows not the past, but emacs' place in the future." [@eludom](https://fosstodon.org/@eludom/111674208478381966)
+- "I think Andrew is right that Emacs is uniquely positioned, being a
+ unified integrated interface with good universal abstractions
+ (buffers, text manipulation, etc), and across all uses cases and
+ notably one's Org data. Should be interesting&#x2026;!"
+
+There were lots of other great talks. Check them out at <https://emacsconf.org/2023/talks> . Overall, people said:
+
+- "actually there part of the conference I admire most is is the fact
+ that that whole thing is obviously a labor of love by emacs geeks for
+ emacs geeks, using and showcasing as much free software as possible.
+ It creates community for those of us who are otherwise isolated in our
+ dark holes using a 45 year old text editor and wondering quizzically
+ why everything in our lives can't be reduced to text."
+ [@eludom](https://fosstodon.org/@eludom/111674156306960653)
+- "Indeed, seeing all the use cases across so many fields is one of the
+ big selling point of this coming together, loving it."
+- "This is my first year attending the conference, it was amazing! All
+ of the presenters and material were very impressive. And from a
+ technical perspective, the event was extremely smooth. It was easy to
+ find the agenda material online, and then use mpv to watch, and ask
+ questions on etherpad."
+- "this conference is crazy i am not sure i ever saw so much interesting
+ emacs ideas in one day"
+- "many good talks, and a sense of community around emacs, which is nice
+ to see"
+- "i also have a feeling that it's hard to communicate with others when
+ you start digging into a large system. your confusion diffuses. i felt
+ similar when jumping into web framework and legacy apps. that's also
+ why i liked emacsconf, watching others clarifies a lot of stuff.
+ (memories of johnw edebug flash talk)"
+- "the pacing, clarity, and depth of the talks today has been really
+ impressive, a presentation masterclass"
+
+
+<a id="technical-details"></a>
+
+# Technical details
+
+EmacsConf is committed to software freedom. We used the following tools
+for this year's conference:
+
+- [Org Mode](https://orgmode.org/), [Emacs](https://www.gnu.org/software/emacs/): organization and collaboration
+- [MPV](https://mpv.io): video player
+- [BigBlueButton](https://bigbluebutton.org/): web conference
+- [OBS Studio](https://obsproject.com/): streaming
+- [TigerVNC](https://tigervnc.org/): controlling the remote server
+- [Icecast](https://icecast.org/): streaming WEBM
+- [Internet Relay Chat via Libera.chat](https://libera.chat/), [The Lounge](https://thelounge.chat/), and [ERC](https://www.gnu.org/software/emacs/erc.html): conversation
+- [Mumble](https://www.mumble.info/): audio conferencing for coordination
+- [Etherpad](https://etherpad.org/): questions and notes
+- [Ikiwiki](https://ikiwiki.info/): website
+- [PsiTransfer](https://github.com/psi-4ward/psitransfer): uploads
+- [FFmpeg](https://ffmpeg.org): video and audio processing
+- [Audacity](https://www.audacityteam.org/): audio editing
+- [OpenAI Whisper](https://github.com/openai/whisper): captioning
+- [Aeneas](https://www.readbeyond.it/aeneas/): forced alignment to get timestamps
+- [subed-mode](https://codeberg.org/sachac/subed): captioning
+- [Git](https://git-scm.com/): version control
+- [Mailman](https://list.org/): mailing lists; service provided by the Free Software Foundation
+- [Nginx](https://www.nginx.com/): web server; server provided by the Free Software Foundation
+- [Ansible](https://www.ansible.com/): system configuration
+
+You can find out more about our infrastructure at
+<https://emacsconf.org/infra> .
+
+
+<a id="process-improvements"></a>
+
+# Process improvements
+
+This year we tried out the following experiments:
+
+- Early acceptance: It was great being able to accept proposals as
+ they came in, and sometimes people chimed in with ideas for making talks even
+ better. A few talks got comments within the 1-week period, which helped
+ refine the talk idea more. We probably don't need to make this a
+ 2-week review period.
+- Two tracks from the beginning: Following on the success of EmacsConf
+ 2022, we planned the schedule for two tracks and filled it right up.
+- We worked on reducing manual intervention.
+ - We opened Q&A right away instead of waiting for the hosts to give the go-ahead.
+ - We used Tampermonkey to automatically connect to BigBlueButton
+ from the streaming user.
+ - Cron-based scheduling of talks kept us on time and made it easier
+ to manage multiple tracks.
+- In addition to the iCalendar files for the conference and the
+ individual tracks, we also generated Org files in many different
+ timezones so that people could get the schedule in that format.
+ People said:
+ - "Yes, having the schedule in my own timezone was super helpful."
+- subed made it easier to adjust timestamps and sync subtitles.
+- We've started trimming Q&A videos to when the host leaves the
+ conversation, just in case the speaker forgot that the rest of it
+ was also recorded. If the speaker is okay with it, we can post the
+ full Q&A session.
+- Using OBS virtual webcams was too taxing, so maybe we should keep things simple next year.
+
+Some notes to remember for next year:
+
+- We should include cfp.org as an attachment instead of inline.
+- We need to ask for an increased limit for libera.chat so that
+ everyone can use chat.emacsconf.org to connect to it.
+- Google Chrome and other Chromium browsers had a hard time with the
+ web-based player. This needs more testing.
+- We can prepare a message for hosts to paste into the chat to help
+ people make the most of the Q&A (ex: adding an oops note for
+ editing).
+- Make sure timezones are on anything that has time (schedule page,
+ watch pages, etc.). It would be cool if we can translate the times
+ in the SVGs too.
+- It might be nice to use the intros and generate title sequences in
+ order to add them to the videos. It would also be nice to experiment
+ with other ffmpeg layouts so that we can view webcams and shared
+ screens at the same time.
+- There were widespread network issues (dropped packets, etc.) on
+ Sunday morning. We set up an additional stream to toobnix.org as a
+ backup.
+- The 480p alternate stream did okay this year, even when we were also
+ livestreaming via Toobnix. It might be worth the extra monitoring
+ and system load in order to livestream to YouTube as well.
+- It might be a good idea to consider a third track so that there's
+ even more space for talks and on-stream Q&A, although we may need
+ more volunteers in order to make that happen.
+- Maybe we can fiddle with the layout in BigBlueButton to make the
+ screen or the presenter's webcam easier to view without lots of
+ manual adjusting. Likewise, we can work on a better ffmpeg command
+ for the published recordings so that we can combine webcams with
+ shared screens.
+- People would love to be able to do more with the conference from
+ Emacs itself. I'm not sure how we can use the Etherpads or if CRDT
+ would scale to lots of people, but maybe it might be worth doing a
+ few small experiments?
+
+
+<a id="finances"></a>
+
+# Finances
+
+Our hosting costs were USD 48.82 for the conference itself:
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">Linode 64GB</td>
+<td class="org-left">Icecast streaming</td>
+<td class="org-left">50 hours</td>
+<td class="org-left">USD 0.576/hour</td>
+<td class="org-left">USD 28.80 + 13% tax</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Linode 32GB</td>
+<td class="org-left">wiki</td>
+<td class="org-left">50 hours</td>
+<td class="org-left">USD 0.288/hour</td>
+<td class="org-left">USD 14.40 + 13% tax</td>
+</tr>
+</tbody>
+</table>
+
+The year-round hosting is on two Linode Nanode 1GB instances that are
+shared with other projects and are not included in this amount.
+
+As of 2023-12-12, we have received USD 436.60 (after 10% for FSF
+costs) in donations through the [Working Together](https://www.fsf.org/working-together/fund) program of the Free
+Software Foundation. We plan to use the donations to cover hosting
+costs for this year's conference and next year's conference, and we
+are also thinking about low-cost ways to improve the conference
+experience.
+
+If you'd like to donate, you can do so through the [Working Together](https://www.fsf.org/working-together/fund)
+page. Since the FSF is a 501(c)(3) charity, your donations are
+tax-deductible in the US.
+
+
+<a id="acknowledgements"></a>
+
+# Acknowledgements
+
+We would like to thank the following:
+
+- Thank you to all the speakers, volunteers, and participants, and to all those other people in our lives who make it possible through time and support.
+- This year's conference hosts are Leo Vivier, Amin Bandali, and joining our team of hosts for the first time this year, FlowyCoder.
+- The streams were managed by Sacha Chua, check-ins by FlowyCoder and Amin, with miscellaneous running-around by Corwin Brust.
+- Thank you to our captioning volunteers: Daniel Molina, Bala Ramadurai, Bhavin Gandhi, Amine Zyad, Yoni Rabkin, Daniel Alejandro Tapia, Hannah Miller, Ken Huang, Jean-Christophe Helary, James Howell, Eduardo Ochs, and Andrew Dougherty.
+- Thanks to Jean-Christophe Helary, Corwin, Quiliro, Cairn, and Amin Bandali for helping with the early acceptance process.
+- Thanks to Leo Vivier for fiddling with the audio to get things nicely synced, normalized, and denoised.
+- Thanks to Leo and other people who kept the mailing lists free from spam.
+- Thanks to Akshay Gaikwad for design contributions.
+- Thanks to shoshin (Grant Shangreaux) for the music.
+- Thanks to Ry P for the server that we're using for OBS streaming and for processing videos.
+- Thanks to the Free Software Foundation for Emacs itself, the mailing lists, and the media.emacsconf.org server.
+- Thanks to the contributers to all of tools and services we used.
+- Thanks to everyone!
+
+
+<a id="updates"></a>
+
+# Updates
+
+If you would like to get updates and announcements, you can sign up at
+<https://lists.gnu.org/mailman/listinfo/emacsconf-discuss> .
+
+Please keep an eye out for interesting things that might be fun to
+present at next year's EmacsConf. We'd love to get talks at all levels
+of experience and about lots of different kinds of interests. Speakers
+wrote:
+
+- "I always got the feeling of being heard and welcome in spite of the vast
+ distances and cultures separating us. This community always feels like it
+ is open to new members any time. With regards to the conference process
+ also, it was a microcosm of the bigger community and hence I got the same
+ feeling. You didn't have to be an expert or a person who's been using emacs
+ for a long time to talk about something useful for the community. Even the
+ struggles of a noob may be useful for someone else in the community."
+- "I can honestly say though that I had a great time putting my talk
+ together. I hope people will have a good time listening to it. Now
+ that the work is over, I can say it was worth it. so I recommend it
+ warmly"
+
+Hope to see you next year!
+
diff --git a/2023/report.org b/2023/report.org
new file mode 100644
index 00000000..47874770
--- /dev/null
+++ b/2023/report.org
@@ -0,0 +1,755 @@
+# [[elisp:(org-md-export-to-markdown)][Export this file to Markdown]]
+
+#+begin_export md
+<!-- report.md is exported report.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2023/report.org](/2023/report.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/).
+[[!meta title="EmacsConf 2023 Report"]]
+[[!date "2024-01-10"]]
+[[!meta copyright="Copyright &copy; 2024 Sacha Chua"]]
+#+end_export
+
+#+TOC: headlines 1
+
+* COMMENT About this document
+:PROPERTIES:
+:CUSTOM_ID: comment-about-this-document
+:END:
+
+Goal for this document:
+
+- summarize results of EmacsConf into something that we can pull
+ relevant excerpts from depending on the audience
+ - fundraising, FSF
+
+Examples:
+
+- [[https://www.linkedin.com/pulse/pycon-namibia-2023-report-pycon-namibia]] - brief
+- [[https://pycon.blogspot.com/2023/06/pycon-us-2023-recap-and-recording.html]] - recap PDF with stats and quotes
+- [[https://media.debconf.org/dc14/report/DebConf14_final_report.en.pdf]] - PDF with lots of details
+- [[https://www.fsf.org/blogs/community/from-freedom-trail-to-free-boot-and-free-farms-charting-the-course-at-libreplanet-day-2]]
+* COMMENT Generating stats
+** Number of hours in main presentations
+
+#+begin_src emacs-lisp :eval never-export
+(/
+ (apply '+ (seq-keep
+ (lambda (o)
+ (when (and (emacsconf-talk-file o "--main.webm")
+ (not (member (plist-get o :slug) '("sat-open" "sat-close" "sun-open" "sun-close"))))
+ (emacsconf-get-file-duration-ms (emacsconf-talk-file o "--main.webm"))))
+ (emacsconf-get-talk-info)))
+ (* 60 60 1000.0))
+#+end_src
+
+#+RESULTS:
+:results:
+16.23160861111111
+:end:
+** Q&A hours
+
+#+begin_src emacs-lisp :eval never-export
+(/
+ (apply '+ (seq-keep
+ (lambda (o)
+ (when (and (emacsconf-talk-file o "--answers.webm")
+ (not (member (plist-get o :slug) '("sat-open" "sat-close" "sun-open" "sun-close"))))
+ (emacsconf-get-file-duration-ms (emacsconf-talk-file o "--answers.webm"))))
+ (emacsconf-get-talk-info)))
+ (* 60 60 1000.0))
+#+end_src
+
+#+RESULTS:
+:results:
+11.815647777777778
+:end:
+** BigBlueButton
+#+begin_src emacs-lisp :results table
+(emacsconf-extract-bbb-report)
+#+end_src
+
+#+RESULTS:
+:results:
+| 31 | Number of meetings analyzed |
+| 62 | Max number of simultaneous users |
+| 6 | Max number of simultaneous meetings |
+| 27 | Max number of people in one meeting |
+| 84 | Total unique users |
+| 36 | Total unique talking |
+:end:
+
+* Overview
+:PROPERTIES:
+:CUSTOM_ID: overview
+:END:
+
+EmacsConf 2023 was held on December 2 and 3 as an online conference. We had 41 talks across two tracks (general and development), with a total of 16 hours of presentations, 12 hours of Q&A via web conference, and lots of lively discussion across IRC and Etherpad. Throughout the conference, there were 100-250 people watching via the livestream, and more than 80 people joined the live Q&A web conferences. There were also satellite events in Switzerland and Slovenia where people watched together.
+
+Thanks to volunteers who edited captions for pre-recorded videos, we were able to broadcast all 25 early submissions with open captions. This not only made talks more accessible while watching the livestreams, but it also made it easier to enjoy the talks in noisy environments or to catch up on talks. People said:
+
+- "that is some hero subtitling on 'cccc' to 'C-c C-c'. thank you!"
+
+If you'd like to help edit captions or add chapter markers, we'd love to hear from you. Please see [[https://emacsconf.org/captioning]] for details.
+
+We posted pre-recorded videos and transcripts on talk pages shortly after they started streaming, and live talks and Q&A sessions within two weeks. Automatic captions are now available for the rest of the talks and Q&A sessions. We've also archived questions and comments from IRC and Etherpad onto the talk pages. You can find the talk pages at [[https://emacsconf.org/2023/talks]] . The videos are also available on Toobnix ([[https://toobnix.org/c/emacsconf/videos]]) and YouTube ([[https://www.youtube.com/@EmacsConf]]).
+
+* Highlights
+:PROPERTIES:
+:CUSTOM_ID: highlights
+:END:
+
+EmacsConf 2023 started with a full day of Org Mode talks on the general track, going from introducing people to Emacs through an Org-Mode-based [[emacsconf:adventure][text adventure game]] all the way to [[emacsconf:ref][managing bibliographic references]] and [[emacsconf:doc][exporting build instructions for different systems]]. There was a group of Hyperbole talks on [[emacsconf:hyperamp][new developments]] and [[emacsconf:koutline][outlining workflows]] on the second day, and there were interesting experiments with using Emacs for fun and productivity. On the development track, speakers shared tips for working with Emacs Lisp and other languages. There was also a lot of interest in exploring emerging artificial intelligence tools. Here are some highlights:
+
+*Collaboration:* In [[emacsconf:collab][Collaborative data processing and documenting using org-babel]], Jonathan Hartman and Lukas C. Bossert showed how to do reproducible research together in Emacs by using the CRDT package along with Org Mode's support for running many different languages in your notes. People said:
+
+ - "Great collaborative conversation and step-wise example creates a
+ different (and impactful) framing.  Thank you!"
+ - "Truly one of the most impressive talks of the day. Congrats! Very
+ inspiring"
+ - "I like the way you highlight the point you are talking about in
+ real time."
+ - "Just came here to say watching two users editing the same buffer
+ simultaneously is BLOWING MY MIND"
+ - "that's really cool.  One of the parts that's a bit hidden from the
+ user is seeing the format that the data is in inside the shell
+ script"
+ - "such a slick presentation, I like the CRDT collaboration angle,
+ looks like an end-game UX"
+ - "For those of you who remember the bad old days before "reproducible
+ research," that talk is even more impressive. Great job!"
+
+*Fun:* [[emacsconf:solo][How I play TTRPGs in Emacs]] by Howard Abrams wowed people not only with the Org Mode workflow he shared but also the general vibe of the video. People said:
+
+ - "My favorite talk was Howard's, not because I do role playing games
+ (last was probably a few late night D&D sessions in the 70s), but
+ just seeing the sheer existential joy possible in using emacs to
+ scratch ones one itch, and then sharing the experience." [[https://fosstodon.org/@eludom/111674175511553798][@eludom]]
+ - "Really cool project! - Also the enthusiasm for the topic is really
+ contagious!"
+ - "the camera and lighting already has me sold"
+ - "I can see this one is going to be a classic"
+ - "Howard's stuff is always great. this particular thing is totally
+ unchained. :D"
+ - "Every time Howard publishes a talk, I end up doing one more thing
+ in a new radical or literate way inside Emacs - currently looking
+ into how to go about literate snow shoveling for the winter ahead."
+
+*Community:* In [[emacsconf:mentor][Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)]], Jeremy Friesen talked about his experiences staying curious, learning from people around him, and encouraging people to grow no matter what tools they currently use. People said:
+
+ - "The talks that impacted me the most were @takeonrules Jeremy Friesen's talks, ostensibly about writing with #Emacs and talking to others about Emacs. Substantively they got right to the heart of what makes Emacs so powerful as a platform, as a community, and as a model for how #FreeSoftware liberates us. His embodying the attitudes of self-sufficiency, mutual aid, empathy, open-mindedness, and authentic creativity showed us ourselves at our best." [[https://emacs.ch/@jameshowell/111671402961867425][@jameshowell]], quoted under the GNU Free Documentation License 1.3
+ - "such valuable work being described"
+ - "I love the attitudes and worldview that infuses your blog posts and
+ your talks this weekend."
+
+*Development:* We also heard from core developers such as [[emacsconf:devel][John Wiegley]], [[emacsconf:core][Stefan Kangas]], and [[emacsconf:gc][Ihor Radchenko]] on Emacs development updates, processes, and experiments. On the package side, [[emacsconf:emms][Yoni Rabkin]] shared a glimpse of how Emacs package development works with a deep dive into EMMS, the Emacs Multimedia System. People said:
+
+ - "Thanks John for all the news on Emacs and informative answers."
+ - "Thank you Stefan! That was all really cool! :D"
+ - "Came for clear-cut magic bullet answers, left with nuanced
+ analysis - and that, surprise, Eli was overall right? Now what to do
+ with that viral gc init snippet that I've never taken time to
+ measure myself but keep anyway..."
+ - "I very much liked Yoni Rabkin's calm,measured talk about EMMS. It
+ described not only the software but how the development team
+ worked." ([[https://emacs.ch/@franburstall/111675280003261648][@franburstall]])
+ - "I just really enjoy seeing the folks that contribute to free
+ software. They are truly people to emulate. That goes double for
+ Yoni."
+
+*Automation:* From [[emacsconf:overlays][using overlays to simplify complex compilation error messages]] to [[emacsconf:test][writing tests]] to [[emacsconf:emacsconf][organizing EmacsConf itself]], Emacs makes it easier to do stuff and have fun along the way. People said:
+
+- (about overlays) "That was great, showing how relatively easy it is to extend Emacs
+ with features like that."
+- "Whatever you do, don't miss out @sachac's talk (this PM or
+ otherwise). I stumbled on it on @bandali's channel following a link to
+ Howard's, and it's a *​masterclass* in wrangling things together to
+ automate workflows in Emacs/Elisp/Org. When people ask about VS Code,
+ this shows we are talking different mindsets and tools altogether."
+- "I'll be rewatching it multiple times too, that's how packed in useful
+ insights and tidbits it is. 'What do you mean Emacs/Org is a platform
+ and a way of life?' Well, here you go, great exemplar :)"
+- "The breadth of use cases and applications, and range of
+ Emacs/Elisp/Org capabilities reached for in this talk is fascinating."
+
+*Future:* GNU Emacs is almost 40 years old and still going strong. Marcus Birkenkrahe shared his experiences [[emacsconf:teaching][using Emacs to teach students data science]], and Jacob Boxerman talked about what it's like as [[emacsconf:sharing][a student and as a video creator]]. Emacs continues to be a great platform for experimenting with everything from [[emacsconf:parallel][parallel text replacement]] all the way up to [[emacsconf:llm][artificial intelligence with large language models]]. People said:
+
+ - "My personal highlights are not necessarily about specific
+ presentations, but about represented topics:
+ 1. Multiple talks on using Emacs/Org mode in university setting both on student and lecturer side. This gives a promise on more people being exposed to Emacs and more people using it in their professional toolchain.
+ 2. The rise of LLM talks - Emacs being text editor is a natural interface to LLMs that do text-crunching.
+ 3. "Parallel text replacement" talk showing us that even the most common text-based interfaces are not yet "figured-out". Even in Emacs."
+ [[https://emacs.ch/@yantar92/111671107089286310][@yantar92]]
+ - "2nd favorite was Andrew Hyatt's LLM talk because it clearly showed
+ how relevant a programmable text processing environment (that
+ happens to have an editor) is to the brave new world of LLMs,
+ possibly being as he intimated, positioned to lead the way.
+
+ What's old is new. Emacs was born in an AI lab. The challenge of
+ computing as far back a Alan Turing was intelligence. This talk
+ shows not the past, but emacs' place in the future." [[https://fosstodon.org/@eludom/111674208478381966][@eludom]]
+ - "I think Andrew is right that Emacs is uniquely positioned, being a
+ unified integrated interface with good universal abstractions
+ (buffers, text manipulation, etc), and across all uses cases and
+ notably one's Org data. Should be interesting...!"
+
+There were lots of other great talks. Check them out at https://emacsconf.org/2023/talks . Overall, people said:
+
+- "actually there part of the conference I admire most is is the fact
+ that that whole thing is obviously a labor of love by emacs geeks for
+ emacs geeks, using and showcasing as much free software as possible.
+ It creates community for those of us who are otherwise isolated in our
+ dark holes using a 45 year old text editor and wondering quizzically
+ why everything in our lives can't be reduced to text."
+ [[https://fosstodon.org/@eludom/111674156306960653][@eludom]]
+- "Indeed, seeing all the use cases across so many fields is one of the
+ big selling point of this coming together, loving it."
+- "This is my first year attending the conference, it was amazing! All
+ of the presenters and material were very impressive. And from a
+ technical perspective, the event was extremely smooth. It was easy to
+ find the agenda material online, and then use mpv to watch, and ask
+ questions on etherpad."
+- "this conference is crazy i am not sure i ever saw so much interesting
+ emacs ideas in one day"
+- "many good talks, and a sense of community around emacs, which is nice
+ to see"
+- "i also have a feeling that it's hard to communicate with others when
+ you start digging into a large system. your confusion diffuses. i felt
+ similar when jumping into web framework and legacy apps. that's also
+ why i liked emacsconf, watching others clarifies a lot of stuff.
+ (memories of johnw edebug flash talk)"
+- "the pacing, clarity, and depth of the talks today has been really
+ impressive, a presentation masterclass"
+
+* COMMENT Raw quotes for highlights
+:PROPERTIES:
+:CUSTOM_ID: comment-raw-quotes-for-highlights
+:END:
+
+"The talks that impacted me the most were @takeonrules Jeremy Friesen's
+talks, ostensibly about writing with #Emacs and talking to others about
+Emacs. Substantively they got right to the heart of what makes Emacs so
+powerful as a platform, as a community, and as a model for how
+#FreeSoftware liberates us. His embodying the attitudes of
+self-sufficiency, mutual aid, empathy, open-mindedness, and authentic
+creativity showed us ourselves at our best." - @jameshowell
+([[https://emacs.ch/@jameshowell/111671402961867425]]) - quoted under
+the GNU Free Documentation License 1.3
+
+"My personal highlights are not necessarily about specific
+presentations, but about represented topics:
+1. Multiple talks on using Emacs/Org mode in university setting both on
+student and lecturer side. This gives a promise on more people being
+exposed to Emacs and more people using it in their professional
+toolchain.
+2. The rise of LLM talks - Emacs being text editor is a natural
+interface to LLMs that do text-crunching.
+3. "Parallel text replacement" talk showing us that even the most common
+text-based interfaces are not yet "figured-out". Even in Emacs." -
+@yantar92 ([[https://emacs.ch/@yantar92/111671107089286310]])
+
+
+uni, teaching, table, collab, ref
+
+- table
+
+ - "This talk was really good in showing how to actually make some
+ things though. Going to look up the aggregate package."
+
+- uni
+
+ - "I'm digging the weather-report style with your pointing at the
+ screen"
+ - "Fantastic.  I think this talk will be a reference for years to
+ come!"
+
+- teaching
+
+ - "Very important point to teach CS: immersion.  Nothing better than
+ emacs for that."
+ - "Emacs is *great* for beginners (on CS): it makes them think
+ programmatically on their environment."
+
+- ref
+
+ - "The current talk shows that most of the time, the already included
+ tools in Emacs allow for custom workflows without needing to use
+ external packages (org-roam, etc.). Of course, the latter are great
+ for richer workflows, but core Emacs is often enough."
+
+- collab
+
+ - "Great collaborative conversation and step-wise example creates a
+ different (and impactful) framing.  Thank you!"
+ - "Truly one of the most impressive talks of the day. Congrats! Very
+ inspiring"
+ - "I like the way you highlight the point you are talking about in
+ real time."
+ - "Just came here to say watching two users editing the same buffer
+ simultaneously is BLOWING MY MIND"
+ - "that's really cool.  One of the parts that's a bit hidden from the
+ user is seeing the format that the data is in inside the shell
+ script"
+ - "such a slick presentation, I like the CRDT collaboration angle,
+ looks like an end-game UX"
+ - "For those of you who remember the bad old days before "reproducible
+ research," that talk is even more impressive. Great job!"
+
+writing, nabokov
+
+- writing
+
+ - "This looks like a really nice setup, and I'd like to give it a
+ try!"
+
+- nabokov
+
+ - " 👏 I'll start writing my masterpiece tomorrow!"
+ - "The most valuable thing that Org will bring to the writer is the
+ structure, how we can navigate between different structures of
+ thoughts."
+
+one, unentangling, doc
+
+- one
+
+ - "Yeah, definitely a fun project that solves a problem to keep more
+ Emacs and less external services. Static web sites are the best.
+ :-D"
+ - "I really like that `jack-html` is a separate project, as that looks
+ nifty."
+
+- doc
+
+ - "Thanks for the awesome presentation, I can't wait to add some of
+ this stuff to my documents"
+ - "Also, loved the presentation --- great walk-through of the thought
+ process & how to improve. Was happy when Macros made their way in"
+
+mentor, sharing
+
+- mentor
+
+ - "such valuable work being described"
+ - "I love the attitudes and worldview that infuses your blog posts and
+ your talks this weekend."
+
+- sharing
+
+ - "I've used your videos before! Thanks for all the good work."
+ - "Agreed, jakeb --- video is worth it."
+
+devel, core, gc
+
+- gc
+
+ - "Came for clear-cut magic bullet answers, left with nuanced
+ analysis - and that, surprise, Eli was overall right? Now what to do
+ with that viral gc init snippet that I've never taken time to
+ measure myself but keep anyway..."
+ - "Definitely a huge extra thanks for the tireless Org-mode work
+ yantar92!"
+ - "Thanks for your work on this project.  Very thorough."
+
+- core
+
+ - "Thank you Stefan! That was all really cool! :D"
+
+- devel
+
+ - "Thanks John for all the news on Emacs and informative answers."
+
+adventure, solo, cubing, emms
+
+- solo
+
+ - "My favorite talk was Howard's, not because I do role playing games
+ (last was probably a few late night D&D sessions in the 70s), but
+ just seeing the sheer existential joy possible in using emacs to
+ scratch ones one itch, and then sharing the experience. "
+ [[https://fosstodon.org/@eludom/111674175511553798]]
+ - "Really cool project! - Also the enthusiasm for the topic is really
+ contagious!"
+ - "the camera and lighting already has me sold"
+ - "I can see this one is going to be a classic"
+ - "Howard's stuff is always great. this particular thing is totally
+ unchained. :D"
+ - "Every time Howard publishes a talk, I end up doing one more thing
+ in a new radical or literate way inside Emacs - currently looking
+ into how to go about literate snow shoveling for the winter ahead."
+
+- emms
+
+ - "I very much liked Yoni Rabkin's calm,measured talk about EMMS. It
+ described not only the software but how the development team
+ worked." ([[https://emacs.ch/@franburstall/111675280003261648]])
+ - "I just really enjoy seeing the folks that contribute to free
+ software. They are truly people to emulate. That goes double for
+ Yoni."
+
+- cubing
+
+ - "i'm glad you're exploring Emacs UI wasamasa , i've also been
+ confounded trying to write a transient, and its nice to see that
+ sqlite is working for ya"
+
+- adventure
+
+ - "with how simple the system seems it would be interesting if people
+ forked it and add their own tutorials for their projects"
+ - "neat idea for learning about emacs!"
+ - "i will definitely keep this game in mind since i have mostly just
+ started my emacs journey"
+
+voice, steno
+
+- steno
+
+ - "Yes, ou's doing a great job and setting a good pace"
+ - "So much good stuff here, thanks for sharing! +1"
+
+hyperamp, koutline
+
+- hyperamp
+
+ - "thanks bob i heard about hyperbole long time ago now it is time to
+ revisit with this beautiful presentation"
+ - "i'm going to  look into hyperbole for sure now. it's been on my to
+ do list"
+ - "Bob has a long history of doing impressive work :)"
+
+overlay, eval, repl, test, scheme, lspocaml
+
+- scheme
+
+ - "brilliant work for scheme"
+ - "yeah, this is overdue. the only real alternative is slime-r7rs"
+
+- overlay
+
+ - "Very impressive! And well explained. Thank you."
+ - "yeah try doing that in VSCode! yeah."
+ - "this is slick!"
+ - "That was great, showing how relatively easy it is to extend Emacs
+ with features like that."
+
+world, flat
+
+- world
+
+ - "Thank you for showing so many new possibilities with Emacs!"
+
+- flat
+
+ - "It looks great, thanks for upstreaming it in GNU Emacs core as
+ well!"
+
+matplotllm, llm
+
+- llm
+
+ - "2nd favorite was Andrew Hyatt's LLM talk because it clearly showed
+ how relevant a programmable text processing environment (that
+ happens to have an editor) is to the brave new world of LLMs,
+ possibly being as he intimated, positioned to lead the way.
+
+ What's old is new. Emacs was born in an AI lab. The challenge of
+ computing as far back a Alan Turing was intelligence. This talk
+ shows not the past, but emacs' place in the future."
+ [[https://fosstodon.org/@eludom/111674208478381966]]
+ - "I think Andrew is right that Emacs is uniquely positioned, being a
+ unified integrated interface with good universal abstractions
+ (buffers, text manipulation, etc), and across all uses cases and
+ notably one's Org data. Should be interesting...!"
+ - "The ubiquitous integration of LLMs (multi-modal) for anything and
+ everything in/across Emacs and Org is both 1) exciting, 2) scary."
+
+parallel, eat, windows
+
+- eat
+
+ - "I found out about EAT a while ago and was excited to find out that
+ it works so well! Thank you for your great work!"
+ - "I use eat, and I have almost replace terminal (bash/zsh) with
+ eshell paired with eat"
+ - "eat is very easy to try out compared to vterm since there's no
+ foreign code involved"
+ - "I was stunned at how fast eat is!"
+ - "eat is the apple equivalent of terminal emulators in emacs: It just
+ works! ;)"
+
+- windows
+
+ - "I can't imagine cross-compiling Emacs for Windows on Linux is easy,
+ but sounds 'fun'."
+
+- parallel
+
+ - "package installed, ready to use!"
+ - "excellent talk, and also such a cool package"
+ - "great talk, very clever concept"
+
+poltys, web
+
+- web
+
+ - "Dang, this is really a great demo."
+ - "I love how he's using org-mode to do it all."
+ - "Definitely some interesting ideas in that one, and the literate
+ form is top-notch. Warrants a focused rewatch for me"
+ - "I *really* like Org-Babel as a bridge to make complex one-off tasks
+ ("why did the stuff in the database get into this state?" type
+ things, usually) reproduceable and version-controlled."
+
+hyperdrive
+
+- "Btw, hyperdrive looks like another one of those things that would be
+ amazing if I collaborated with anyone using emacs"
+- "Okay, I got hyperdrive.el working and it was super easy."
+- "Prot's presentations are so clear. Perfectly model pedagogy."
+- "I have learned so much from his videos, and from his code."
+
+emacsconf
+
+- "Amazing presentation, Sacha!!! It's wonderful that all of your work
+ is well-documented. Thank you!!!"
+- "This is my first year attending the conference, it was amazing! All
+ of the presenters and material were very impressive. And from a
+ technical perspective, the event was extremely smooth. It was easy to
+ find the agenda material online, and then use mpv to watch, and ask
+ questions on etherpad."
+- "Whatever you do, don't miss out @sachac's talk (this PM or
+ otherwise). I stumbled on it on @bandali's channel following a link to
+ Howard's, and it's a *masterclass* in wrangling things together to
+ automate workflows in Emacs/Elisp/Org. When people ask about VS Code,
+ this shows we are talking different mindsets and tools altogether."
+- "I'll be rewatching it multiple times too, that's how packed in useful
+ insights and tidbits it is. 'What do you mean Emacs/Org is a platform
+ and a way of life?' Well, here you go, great exemplar :)"
+- "The breadth of use cases and applications, and range of
+ Emacs/Elisp/Org capabilities reached for in this talk is fascinating."
+- "So nice to see these practical example of automating workflow with
+ Emacs, great presentation sachac"
+
+emacsen
+overall
+
+- "actually there part of the conference I admire most is is the fact
+ that that whole thing is obviously a labor of love by emacs geeks for
+ emacs geeks, using and showcasing as much free software as possible.
+ It creates community for those of us who are otherwise isolated in our
+ dark holes using a 45 year old text editor and wondering quizzically
+ why everything in our lives can't be reduced to text."
+ ([[https://fosstodon.org/@eludom/111674156306960653]]) 
+- "that is some hero subtitling on 'cccc' to 'C-c C-c'. thank you!"
+- "I can honestly say though that I had a great time putting my talk
+ together. I hope people will have a good time listening to it. Now
+ that the work is over, I can say it was worth it. so I recommend it
+ warmly"
+- "Nice way to display countdown  with emacs, that's why i love emacs
+ and emacser"
+- "Indeed, seeing all the use cases across so many fields is one of the
+ big selling point of this coming together, loving it."
+- "this conference is crazy i am not sure i ever saw so much interesting
+ emacs ideas in one day"
+- "Thanks to the organizers for your tireless work, and to the most
+ excellent presenters of today, what a treat!"
+- "many good talks, and a sense of community around emacs, which is nice
+ to see"
+- "i also have a feeling that it's hard to communicate with others when
+ you start digging into a large system. your confusion diffuses. i felt
+ similar when jumping into web framework and legacy apps. that's also
+ why i liked emacsconf, watching others clarifies a lot of stuff.
+ (memories of johnw edebug flash talk)"
+- "the pacing, clarity, and depth of the talks today has been really
+ impressive, a presentation masterclass"
+- "Thank you for such responsiveness in running this conference!!!"
+- "Yes, having the schedule in my own timezone was super helpful."
+- "What our Swiss friends are doing looks quite nice"
+- "yeah virtual conf is fire"
+
+* Technical details
+:PROPERTIES:
+:CUSTOM_ID: technical-details
+:END:
+
+EmacsConf is committed to software freedom. We used the following tools
+for this year's conference:
+
+- [[https://orgmode.org/][Org Mode]], [[https://www.gnu.org/software/emacs/][Emacs]]: organization and collaboration
+- [[https://mpv.io][MPV]]: video player
+- [[https://bigbluebutton.org/][BigBlueButton]]: web conference
+- [[https://obsproject.com/][OBS Studio]]: streaming
+- [[https://tigervnc.org/][TigerVNC]]: controlling the remote server
+- [[https://icecast.org/][Icecast]]: streaming WEBM
+- [[https://libera.chat/][Internet Relay Chat via Libera.chat]], [[https://thelounge.chat/][The Lounge]], and [[https://www.gnu.org/software/emacs/erc.html][ERC]]: conversation
+- [[https://www.mumble.info/][Mumble]]: audio conferencing for coordination
+- [[https://etherpad.org/][Etherpad]]: questions and notes
+- [[https://ikiwiki.info/][Ikiwiki]]: website
+- [[https://github.com/psi-4ward/psitransfer][PsiTransfer]]: uploads
+- [[https://ffmpeg.org][FFmpeg]]: video and audio processing
+- [[https://www.audacityteam.org/][Audacity]]: audio editing
+- [[https://github.com/openai/whisper][OpenAI Whisper]]: captioning
+- [[https://www.readbeyond.it/aeneas/][Aeneas]]: forced alignment to get timestamps
+- [[https://codeberg.org/sachac/subed][subed-mode]]: captioning
+- [[https://git-scm.com/][Git]]: version control
+- [[https://list.org/][Mailman]]: mailing lists; service provided by the Free Software Foundation
+- [[https://www.nginx.com/][Nginx]]: web server; server provided by the Free Software Foundation
+- [[https://www.ansible.com/][Ansible]]: system configuration
+
+You can find out more about our infrastructure at
+[[https://emacsconf.org/infra]] .
+
+* Process improvements
+:PROPERTIES:
+:CUSTOM_ID: process-improvements
+:END:
+
+This year we tried out the following experiments:
+
+- Early acceptance: It was great being able to accept proposals as
+ they came in, and sometimes people chimed in with ideas for making talks even
+ better. A few talks got comments within the 1-week period, which helped
+ refine the talk idea more. We probably don't need to make this a
+ 2-week review period.
+- Two tracks from the beginning: Following on the success of EmacsConf
+ 2022, we planned the schedule for two tracks and filled it right up.
+- We worked on reducing manual intervention.
+ - We opened Q&A right away instead of waiting for the hosts to give the go-ahead.
+ - We used Tampermonkey to automatically connect to BigBlueButton
+ from the streaming user.
+ - Cron-based scheduling of talks kept us on time and made it easier
+ to manage multiple tracks.
+- In addition to the iCalendar files for the conference and the
+ individual tracks, we also generated Org files in many different
+ timezones so that people could get the schedule in that format.
+ People said:
+ - "Yes, having the schedule in my own timezone was super helpful."
+- subed made it easier to adjust timestamps and sync subtitles.
+- We've started trimming Q&A videos to when the host leaves the
+ conversation, just in case the speaker forgot that the rest of it
+ was also recorded. If the speaker is okay with it, we can post the
+ full Q&A session.
+- Using OBS virtual webcams was too taxing, so maybe we should keep things simple next year.
+
+Some notes to remember for next year:
+
+- We should include cfp.org as an attachment instead of inline.
+- We need to ask for an increased limit for libera.chat so that
+ everyone can use chat.emacsconf.org to connect to it.
+- Google Chrome and other Chromium browsers had a hard time with the
+ web-based player. This needs more testing.
+- We can prepare a message for hosts to paste into the chat to help
+ people make the most of the Q&A (ex: adding an oops note for
+ editing).
+- Make sure timezones are on anything that has time (schedule page,
+ watch pages, etc.). It would be cool if we can translate the times
+ in the SVGs too.
+- It might be nice to use the intros and generate title sequences in
+ order to add them to the videos. It would also be nice to experiment
+ with other ffmpeg layouts so that we can view webcams and shared
+ screens at the same time.
+- There were widespread network issues (dropped packets, etc.) on
+ Sunday morning. We set up an additional stream to toobnix.org as a
+ backup.
+- The 480p alternate stream did okay this year, even when we were also
+ livestreaming via Toobnix. It might be worth the extra monitoring
+ and system load in order to livestream to YouTube as well.
+- It might be a good idea to consider a third track so that there's
+ even more space for talks and on-stream Q&A, although we may need
+ more volunteers in order to make that happen.
+- Maybe we can fiddle with the layout in BigBlueButton to make the
+ screen or the presenter's webcam easier to view without lots of
+ manual adjusting. Likewise, we can work on a better ffmpeg command
+ for the published recordings so that we can combine webcams with
+ shared screens.
+- People would love to be able to do more with the conference from
+ Emacs itself. I'm not sure how we can use the Etherpads or if CRDT
+ would scale to lots of people, but maybe it might be worth doing a
+ few small experiments?
+
+* Finances
+:PROPERTIES:
+:CUSTOM_ID: finances
+:END:
+
+Our hosting costs were USD 48.82 for the conference itself:
+
+| Linode 64GB | Icecast streaming | 50 hours | USD 0.576/hour | USD 28.80 + 13% tax |
+| Linode 32GB | wiki | 50 hours | USD 0.288/hour | USD 14.40 + 13% tax |
+
+The year-round hosting is on two Linode Nanode 1GB instances that are
+shared with other projects and are not included in this amount.
+
+As of 2023-12-12, we have received USD 436.60 (after 10% for FSF
+costs) in donations through the [[https://www.fsf.org/working-together/fund][Working Together]] program of the Free
+Software Foundation. We plan to use the donations to cover hosting
+costs for this year's conference and next year's conference, and we
+are also thinking about low-cost ways to improve the conference
+experience.
+
+If you'd like to donate, you can do so through the [[https://www.fsf.org/working-together/fund][Working Together]]
+page. Since the FSF is a 501(c)(3) charity, your donations are
+tax-deductible in the US.
+
+** COMMENT Hosting costs for the rest of the year - not included
+:PROPERTIES:
+:CUSTOM_ID: comment-hosting-costs-for-the-rest-of-the-year-not-included
+:END:
+
+During the rest of the year:
+
+| Nanode 1GB | Icecast streaming (shared with other projects) | USD 5/month | USD 55 + 13% tax |
+| Nanode 1GB | wiki (shared with other projects) | USD 5/month | USD 55 + 13% tax |
+| Namecheap | emacsconf.org | | USD 14.98 |
+| Namecheap | emacsverse.org | | USD 14.98 |
+
+This adds up to total costs of USD 203.08 for EmacsConf 2023.
+
+* Acknowledgements
+:PROPERTIES:
+:CUSTOM_ID: acknowledgements
+:END:
+
+We would like to thank the following:
+
+- Thank you to all the speakers, volunteers, and participants, and to all those other people in our lives who make it possible through time and support.
+- This year's conference hosts are Leo Vivier, Amin Bandali, and joining our team of hosts for the first time this year, FlowyCoder.
+- The streams were managed by Sacha Chua, check-ins by FlowyCoder and Amin, with miscellaneous running-around by Corwin Brust.
+- Thank you to our captioning volunteers: Daniel Molina, Bala Ramadurai, Bhavin Gandhi, Amine Zyad, Yoni Rabkin, Daniel Alejandro Tapia, Hannah Miller, Ken Huang, Jean-Christophe Helary, James Howell, Eduardo Ochs, and Andrew Dougherty.
+- Thanks to Jean-Christophe Helary, Corwin, Quiliro, Cairn, and Amin Bandali for helping with the early acceptance process.
+- Thanks to Leo Vivier for fiddling with the audio to get things nicely synced, normalized, and denoised.
+- Thanks to Leo and other people who kept the mailing lists free from spam.
+- Thanks to Akshay Gaikwad for design contributions.
+- Thanks to shoshin (Grant Shangreaux) for the music.
+- Thanks to Ry P for the server that we're using for OBS streaming and for processing videos.
+- Thanks to the Free Software Foundation for Emacs itself, the mailing lists, and the media.emacsconf.org server.
+- Thanks to the contributers to all of tools and services we used.
+- Thanks to everyone!
+
+* Updates
+:PROPERTIES:
+:CUSTOM_ID: updates
+:END:
+
+If you would like to get updates and announcements, you can sign up at
+[[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss]] .
+
+Please keep an eye out for interesting things that might be fun to
+present at next year's EmacsConf. We'd love to get talks at all levels
+of experience and about lots of different kinds of interests. Speakers
+wrote:
+
+- "I always got the feeling of being heard and welcome in spite of the vast
+ distances and cultures separating us. This community always feels like it
+ is open to new members any time. With regards to the conference process
+ also, it was a microcosm of the bigger community and hence I got the same
+ feeling. You didn't have to be an expert or a person who's been using emacs
+ for a long time to talk about something useful for the community. Even the
+ struggles of a noob may be useful for someone else in the community."
+- "I can honestly say though that I had a great time putting my talk
+ together. I hope people will have a good time listening to it. Now
+ that the work is over, I can say it was worth it. so I recommend it
+ warmly"
+
+Hope to see you next year!
diff --git a/2023/schedule-2023-12-02.md b/2023/schedule-2023-12-02.md
new file mode 100644
index 00000000..a64bad6a
--- /dev/null
+++ b/2023/schedule-2023-12-02.md
@@ -0,0 +1 @@
+<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg></div> \ No newline at end of file
diff --git a/2023/schedule-2023-12-03.md b/2023/schedule-2023-12-03.md
new file mode 100644
index 00000000..eabdc939
--- /dev/null
+++ b/2023/schedule-2023-12-03.md
@@ -0,0 +1 @@
+<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:58- 9:04 Sunday opening remarks</title> <rect x="-4" y="15" opacity="0.8" width="9" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg></div> \ No newline at end of file
diff --git a/2023/schedule-details.md b/2023/schedule-details.md
new file mode 100644
index 00000000..fe53bdaf
--- /dev/null
+++ b/2023/schedule-details.md
@@ -0,0 +1,56 @@
+Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">Sun Dec 3</a><a name="date-2023-12-02"></a>
+# Saturday Dec 2, 2023
+[[!inline pages="internal(2023/schedule-2023-12-02)" raw="yes"]]
+
+<div class="schedule" data-start="2023-12-02T14:00:00+0000" data-end="2023-12-02T22:30:00+0000" data-tracks="General,Development">
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.webm">Download --main.webm (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--pad.md">Download --pad.md</a></li>""" title="""Saturday opening remarks""" url="""/2023/talks/sat-open""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-open""" note="""captioned, video posted, video: 05:25"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.opus">Download --main.opus (3.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.webm">Download --main.webm (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--pad.md">Download --pad.md</a></li>""" title="""An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp""" url="""/2023/talks/adventure""" speakers="""Chung-hong Chan""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""adventure""" note="""captioned, video posted, video: 05:58"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.opus">Download --answers.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.webm">Download --answers.webm (56MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm">Download --main.webm (283MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--slides.pdf">Download --slides.pdf (26MB)</a></li>""" title="""Authoring and presenting university courses with Emacs and a full libre software stack""" url="""/2023/talks/uni""" speakers="""James Howell""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""uni""" note="""captioned, video posted, video: 20:53, answers: 22:32"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.opus">Download --main.opus (5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm">Download --main.webm (49MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.md">Download --pad.md</a></li>""" title="""MatplotLLM, iterative natural language data visualization in org-babel""" url="""/2023/talks/matplotllm""" speakers="""Abhinav Tushar""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""matplotllm""" note="""captioned, video posted, video: 09:34"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.json">Download --answers.json (1.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.opus">Download --answers.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm">Download --answers.webm (199MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm">Download --main.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.odp">Download .odp (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pdf">Download .pdf (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pptx">Download .pptx (15MB)</a></li>""" title="""Teaching computer and data science with literate programming tools""" url="""/2023/talks/teaching""" speakers="""Marcus Birkenkrahe""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""teaching""" note="""captioned, video posted, video: 19:27, answers: 42:23"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus">Download --answers.opus (34MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm">Download --answers.webm (205MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.opus">Download --main.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.md">Download --pad.md</a></li>""" title="""Enhancing productivity with voice computing""" url="""/2023/talks/voice""" speakers="""Blaine Mooers""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""voice""" note="""captioned, video posted, video: 18:49, answers: 1:07:47"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.mp4">Download --alternative.mp4 (126MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.webm">Download --alternative.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.md">Download --pad.md</a></li>""" title="""Who needs Excel? Managing your students qualifications with org-table""" url="""/2023/talks/table""" speakers="""Daniel Molina""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""table""" note="""captioned, video posted, video: 15:51"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus">Download --answers.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm">Download --answers.webm (46MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.md">Download --pad.md</a></li>""" title="""LLM clients in Emacs, functionality and standardization""" url="""/2023/talks/llm""" speakers="""Andrew Hyatt""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""llm""" note="""captioned, video posted, video: 20:26, answers: 28:32"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus">Download --answers.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm">Download --answers.webm (96MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.md">Download --pad.md</a></li>""" title="""one.el: the static site generator for Emacs Lisp Programmers""" url="""/2023/talks/one""" speakers="""Tony Aldon""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""one""" note="""captioned, video posted, video: 22:18, answers: 27:39"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus">Download --answers.opus (9.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm">Download --answers.webm (35MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.opus">Download --main.opus (5.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen.pdf">Download .pdf</a></li>""" title="""Emacs turbo-charges my writing""" url="""/2023/talks/writing""" speakers="""Jeremy Friesen""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""writing""" note="""captioned, video posted, video: 08:53, answers: 15:53"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm">Download --answers.webm (20MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--expr_depth.svg">Download --expr_depth.svg</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.opus">Download --main.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--testdata.org">Download --testdata.org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull.org">Download .org</a></li>""" title="""Improving compiler diagnostics with overlays""" url="""/2023/talks/overlay""" speakers="""Jeff Trull""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""overlay""" note="""captioned, video posted, video: 20:57, answers: 11:48"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus">Download --answers.opus (3.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm">Download --answers.webm (9.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.opus">Download --main.opus (6.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm">Download --main.webm (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--silence.mkv">Download --silence.mkv (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen.org">Download .org</a></li>""" title="""Why Nabokov would use Org-Mode if he were writing today""" url="""/2023/talks/nabokov""" speakers="""Edmund Jorgensen""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""nabokov""" note="""captioned, video posted, video: 09:51, answers: 09:21"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.opus">Download --main.opus (4.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.md">Download --pad.md</a></li>""" title="""Editor Integrated REPL Driven Development for all languages""" url="""/2023/talks/eval""" speakers="""Musa Al-hassy""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""eval""" note="""captioned, video posted, video: 09:37"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm">Download --main.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--room-noise.webm">Download --room-noise.webm</a></li>""" title="""Collaborative data processing and documenting using org-babel""" url="""/2023/talks/collab""" speakers="""Jonathan Hartman, Lukas C. Bossert""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""collab""" note="""captioned, video posted, video: 19:16"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm">Download --main.webm (187MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.md">Download --pad.md</a></li>""" title="""REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ""" url="""/2023/talks/repl""" speakers="""Eduardo Ochs""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""repl""" note="""video posted, video: 59:10"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm">Download --answers.webm (43MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.opus">Download --main.opus (6.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.md">Download --pad.md</a></li>""" title="""How I play TTRPGs in Emacs""" url="""/2023/talks/solo""" speakers="""Howard Abrams""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""solo""" note="""captioned, video posted, video: 14:36, answers: 19:20"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.ogg">Download --main.ogg (7.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.md">Download --pad.md</a></li>""" title="""Org-Mode workflow: informal reference tracking""" url="""/2023/talks/ref""" speakers="""Christopher Howard""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""ref""" note="""captioned, video posted, video: 15:04"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.json">Download --answers.json (1.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus">Download --answers.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm">Download --answers.webm (69MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm">Download --main.webm (133MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.md">Download --pad.md</a></li>""" title="""Literate Documentation with Emacs and Org Mode""" url="""/2023/talks/doc""" speakers="""Mike Hamrick""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""doc""" note="""captioned, video posted, video: 42:45, answers: 11:00"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.webm">Download --main.webm (68MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--pad.md">Download --pad.md</a></li>""" title="""(Un)entangling projects and repos""" url="""/2023/talks/unentangling""" speakers="""Alexey Bochkarev""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""unentangling""" note="""video posted, video: 12:39"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.md">Download --pad.md</a></li>""" title="""Emacs development updates""" url="""/2023/talks/devel""" speakers="""John Wiegley""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""devel""" note="""video posted, video: 23:22"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus">Download --answers.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.md">Download --pad.md</a></li>""" title="""Windows into Freedom""" url="""/2023/talks/windows""" speakers="""Corwin Brust""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""windows""" note="""video posted, video: 57:48"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.json">Download --main.json (2.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm">Download --main.webm (211MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.md">Download --pad.md</a></li>""" title="""Emacs core development: how it works""" url="""/2023/talks/core""" speakers="""Stefan Kangas""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""core""" note="""video posted, video: 1:07:13"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li>""" title="""Saturday closing remarks""" url="""/2023/talks/sat-close""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-close""" note="""video posted, video: 09:00"""]]</div>
+
+Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">Sun Dec 3</a><a name="date-2023-12-03"></a>
+# Sunday Dec 3, 2023
+[[!inline pages="internal(2023/schedule-2023-12-03)" raw="yes"]]
+
+<div class="schedule" data-start="2023-12-03T14:00:00+0000" data-end="2023-12-03T22:30:00+0000" data-tracks="General,Development">
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.md">Download --pad.md</a></li>""" title="""Sunday opening remarks""" url="""/2023/talks/sun-open""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-open""" note="""captioned, video posted, video: 05:17"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.json">Download --main.json (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.md">Download --pad.md</a></li>""" title="""Top 10 ways Hyperbole amps up Emacs""" url="""/2023/talks/hyperamp""" speakers="""Robert Weiner""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""hyperamp""" note="""video posted, video: 1:05:16"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.opus">Download --main.opus (4.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.md">Download --pad.md</a></li>""" title="""Using Koutline for stream of thought journaling""" url="""/2023/talks/koutline""" speakers="""Matthew Jorgensen (PlasmaStrike)""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""koutline""" note="""video posted, video: 06:44"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.opus">Download --answers.opus (5.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.webm">Download --answers.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.md">Download --pad.md</a></li>""" title="""Bringing joy to Scheme programming""" url="""/2023/talks/scheme""" speakers="""Andrew Tropin""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""scheme""" note="""captioned, video posted, video: 21:01"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus">Download --answers.opus (6.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm">Download --answers.webm (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main-vp8.webm">Download --main-vp8.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.md">Download --pad.md</a></li>""" title="""Parallel text replacement""" url="""/2023/talks/parallel""" speakers="""Lovro, Valentino Picotti""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""parallel""" note="""captioned, video posted, video: 14:46, answers: 10:16"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm">Download --main.webm (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.md">Download --pad.md</a></li>""" title="""Eat and Eat powered Eshell, fast featureful terminal inside Emacs""" url="""/2023/talks/eat""" speakers="""Akib Azmain Turja""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""eat""" note="""video posted, video: 08:13"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.opus">Download --answers.opus (4.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.webm">Download --answers.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.opus">Download --main.opus (9.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.md">Download --pad.md</a></li>""" title="""GNU Emacs: A World of Possibilities""" url="""/2023/talks/world""" speakers="""Anand Tamariya""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""world""" note="""captioned, video posted, video: 20:31"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm">Download --main.webm (185MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.md">Download --pad.md</a></li>""" title="""The browser in a buffer""" url="""/2023/talks/poltys""" speakers="""Michael Bauer""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""poltys""" note="""video posted, video: 34:30"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.md">Download --pad.md</a></li>""" title="""A modern Emacs look-and-feel without pain""" url="""/2023/talks/flat""" speakers="""Pedro A. Aranda""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""flat""" note="""video posted, video: 22:20"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--alternative.webm">Download --alternative.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.opus">Download --main.opus (8.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--presentation.webm">Download --presentation.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--solve-demo.webm">Download --solve-demo.webm (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann.pdf">Download .pdf</a></li>""" title="""Speedcubing in Emacs""" url="""/2023/talks/cubing""" speakers="""wasamasa""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""cubing""" note="""captioned, video posted, video: 13:35"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus">Download --answers.opus (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm">Download --answers.webm (253MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.md">Download --pad.md</a></li>""" title="""The Emacsen family, the design of an Emacs and the importance of Lisp""" url="""/2023/talks/emacsen""" speakers="""Fermin""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsen""" note="""captioned, video posted, video: 18:28, answers: 1:08:14"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus">Download --answers.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm">Download --answers.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.opus">Download --main.opus (21MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm">Download --main.webm (139MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin.outline">Download .outline</a></li>""" title="""Emacs MultiMedia System (EMMS)""" url="""/2023/talks/emms""" speakers="""Yoni Rabkin""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""emms""" note="""captioned, video posted, video: 38:38, answers: 32:38"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.webm">Download --answers.webm (115MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.opus">Download --main.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.md">Download --pad.md</a></li>""" title="""emacs-gc-stats: Does garbage collection actually slow down Emacs?""" url="""/2023/talks/gc""" speakers="""Ihor Radchenko""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""gc""" note="""video posted, video: 33:22"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm">Download --answers.webm (48MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.webm">Download --intro.webm (996kB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm">Download --main.webm (149MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.md">Download --pad.md</a></li>""" title="""hyperdrive.el: Peer-to-peer filesystem in Emacs""" url="""/2023/talks/hyperdrive""" speakers="""Joseph Turner and Protesilaos Stavrou""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""hyperdrive""" note="""captioned, video posted, video: 40:03, answers: 28:15"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.md">Download --pad.md</a></li>""" title="""Programming with steno""" url="""/2023/talks/steno""" speakers="""Daniel Alejandro Tapia""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""steno""" note="""captioned, video posted, video: 25:03"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers--trimmed.webm">Download --answers--trimmed.webm (176MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus">Download --answers.opus (25MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm">Download --answers.webm (176MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.opus">Download --main.opus (6.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm">Download --main.webm (26MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen.pdf">Download .pdf</a></li>""" title="""Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)""" url="""/2023/talks/mentor""" speakers="""Jeremy Friesen""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""mentor""" note="""captioned, video posted, video: 10:44, answers: 1:13:43"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus">Download --answers.opus (8.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm">Download --answers.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.opus">Download --main.opus (8.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault.pdf">Download .pdf (87MB)</a></li>""" title="""Writing a language server in OCaml for Emacs, fun, and profit""" url="""/2023/talks/lspocaml""" speakers="""Austin Theriault""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""lspocaml""" note="""captioned, video posted, video: 16:04, answers: 14:24"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus">Download --answers.opus (7.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm">Download --answers.webm (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm">Download --main.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei.org">Download .org</a></li>""" title="""Emacs saves the Web (maybe)""" url="""/2023/talks/web""" speakers="""Yuchen Pei""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""web""" note="""captioned, video posted, video: 31:33, answers: 15:53"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.json">Download --answers.json (1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--transcript.txt">Download --transcript.txt</a></li>""" title="""What I learned by writing test cases for GNU Hyperbole""" url="""/2023/talks/test""" speakers="""Mats Lidell""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""test""" note="""captioned, video posted, video: 26:55, answers: 26:22"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm">Download --answers.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.opus">Download --main.opus (8.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--previous.mkv">Download --previous.mkv (377MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.txt">Download .txt</a></li>""" title="""Sharing Emacs is Caring Emacs: Emacs education and why I embraced video""" url="""/2023/talks/sharing""" speakers="""Jacob Boxerman""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sharing""" note="""captioned, video posted, video: 16:34, answers: 25:19"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.json">Download --answers.json (5.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus">Download --answers.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm">Download --answers.webm (317MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.opus">Download --main.opus (8.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.md">Download --pad.md</a></li>""" title="""EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference""" url="""/2023/talks/emacsconf""" speakers="""Sacha Chua""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsconf""" note="""captioned, video posted, video: 15:05, answers: 2:00:43"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.opus">Download --main.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (279MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.md">Download --pad.md</a></li>""" title="""Sunday closing remarks""" url="""/2023/talks/sun-close""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-close""" note="""video posted, video: 2:00:43"""]]</div> \ No newline at end of file
diff --git a/2023/sidebar.md b/2023/sidebar.md
new file mode 100644
index 00000000..5f397ee2
--- /dev/null
+++ b/2023/sidebar.md
@@ -0,0 +1,12 @@
+<p>Welcome to...</p>
+<p class="center">[[!img /i/emacsconf-logo1-256.png alt="EmacsConf logo" size="72x" link=2023]]</p>
+<p class="center"><strong>[[EmacsConf 2023|2023]]</strong></p>
+
+---
+
+* [[Watch]]
+* [[Talks]]
+* [[Volunteer]]
+* [[Planning]]
+* [[Guidelines for Conduct|conduct]]
+* [[Contact information|contact]]
diff --git a/2023/speakers.md b/2023/speakers.md
new file mode 100644
index 00000000..becdf79e
--- /dev/null
+++ b/2023/speakers.md
@@ -0,0 +1,98 @@
+[[!meta title="Conference-day instructions for speakers"]]
+[[!meta copyright="Copyright &copy; 2023 Sacha Chua"]]
+
+# Before your talk
+
+If you have a pre-recorded talk, please check in at least 30 minutes
+before the start of your Q&A session (when your talk ends). If you're
+doing the talk live, please check in at least 30 minutes before the
+start of your talk.
+
+You can check in on IRC by joining the #emacsconf-org channel on
+libera.chat using your favorite IRC client or using
+[https://chat.emacsconf.org](https://chat.emacsconf.org/?join=emacsconf-dev,emacsconf-gen,emacsconf-org).
+If you want, you can also join the channel for your track as well
+(either #emacsconf-gen or #emacsconf-dev). Say something like "Hi,
+this is &lt;your name&gt; checking in" in the \#emacsconf-org channel
+and one of the organizers will check you in. If you are having a hard
+time with IRC, e-mail <emacsconf-submit@gnu.org> or use the emergency
+contact info in the check-in email and we can give you the URL of a
+BigBlueButton room to join.
+
+- If you want to do Q&A over IRC or Etherpad:
+ - You can hang out in the IRC channel for your track and/or on the
+ pad for your talk.
+- If you want to do Q&A in a BigBlueButton room (ex: quick demoes):
+ - We'll set you up in a BigBlueButton room (check your e-mail for
+ the URL, or ask in #emacsconf-org). You can keep watching the
+ conference or doing other things while waiting there. We'll let
+ you know shortly before you go live. If you want, you can get
+ things ready for whatever you might want to demonstrate.
+ - Please use headphones or earphones to minimize the risk of audio
+ feedback. Webcams are optional.
+- If you want to do Q&A over Mumble:
+ - You can connect to mumble.emacsconf.org.
+
+Please let us know if you're running late or if it turns out you can't
+make it. Drop by #emacsconf-org, e-mail us at
+<emacsconf-submit@gnu.org> , or use the emergency contact information
+from the check-in instructions email. If we start worrying, we'll
+reach out to you via your emergency contact information.
+
+# While your talk plays
+
+People will add notes and questions on the Etherpad, or they'll ask
+them on IRC. Volunteers will try to copy all the questions to the
+Etherpad. If you're watching Etherpad or IRC, you can start answering
+whenever you like.
+
+# Answering questions
+
+- General notes about answering questions:
+ - You can answer questions in any order, and you can skip any
+ questions you don't want to answer.
+ - You don't have to answer questions right away. If you want to take
+ some time to think about things, that's okay.
+ - If you're answering questions by voice and the host is not reading
+ the questions out for you, please read the question out before you
+ answer it. This makes it easier to follow the conversation and to
+ copy the answers to the talk page afterwards.
+ - Uploading PDFs doesn't work in our BigBlueButton instance, but you
+ can share your screen. Sharing screens with multi-monitor setups
+ can be tricky. If this acts weirdly for you, try sharing just the
+ window you want to focus on, or switch to using one monitor.
+ - The Q&A will be recorded so that people can keep learning from it
+ even after the conference. If you accidentally share something or
+ would like part of the recording removed, please add something
+ like "Oops" in the text chat, possibly with a description of what
+ to remove. We can work on editing that out of the recording.
+- After your prerec finishes:
+ - If you're doing Q&A in a BBB room:
+ - We'll switch the stream to broadcast from the BBB room you're
+ in, and we'll start recording the session so that Q&A can be
+ available after the conference. We'll give you a signal when the
+ Q&A is ready to start. Other people can start joining the Q&A room.
+ - Depending on your preferences, the host can read questions to
+ you, or you can read questions off the pad/IRC yourself.
+ - This conversation can continue for as long as you like. If it's
+ time for the next talk to start, we'll give you a heads-up and
+ your Q&A can continue off the stream in the same BBB room. When
+ you are ready to stop answering questions, you can wrap up
+ however you'd like and end the meeting.
+ - If you're doing IRC/Etherpad: we'll let people know where to ask
+ questions and we can read out some of the questions and answers
+ that are there.
+ - If you're on Mumble: we'll pull you into the channel room and the
+ streamer will connect to it. When we confirm that you can be
+ heard, you and the host can go ahead with the Q&A.
+
+# After the conference
+
+We'll collect questions and answers from IRC and the pad. We'll put
+them on the talk page and e-mail them to you in case you want to
+follow up or keep the conversation going. We'll also work on
+extracting the videos from the Q&A sessions and we'll post them on the
+talk page.
+
+Thank you so much for putting so much time and energy into sharing
+what you know at EmacsConf!
diff --git a/2023/submit.md b/2023/submit.md
new file mode 100644
index 00000000..2874e8d4
--- /dev/null
+++ b/2023/submit.md
@@ -0,0 +1,78 @@
+[[!meta title="Submit"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali<br />
+Copyright 2021 Amin Bandali, Sacha Chua, Leo Vivier<br />
+Copyright 2022 Amin Bandali<br />
+Copyright 2023 Sacha Chua"]]
+
+When you're ready to submit your proposal, send your submission via
+email to <emacsconf-submit@gnu.org> by **Friday, September 15, 2023**.
+All speakers will be notified by Saturday, September 30 (or earlier)
+regarding the status of their proposal. Accepted speakers will have
+until November 3 (Friday) to prepare their video.
+
+If you put your talk title in your submission e-mail's subject line,
+it'll be easier to keep track of the conversation. Please use the
+following template for your submission email:
+
+```
+Talk title:
+
+
+Talk description (<= 500 words):
+
+
+
+
+
+
+
+
+Format (10 minutes, 20 minutes, description of other format) and outline:
+
+Introduction for you and your talk (<= 100 words):
+
+Speaker name (and optional pronunciation) and preferred pronouns:
+
+Speaker availability (times and timezones that you're available Dec 2-3):
+
+Preferred Q&A approach (live web conference, IRC, pad, wiki, e-mail questions after the event):
+
+Public contact information (IRC nick, e-mail, website, and/or social media):
+
+Private emergency contact information (phone number or messaging) in
+case we need to reach you due to technical difficulties:
+
+Please include this speaker release in order to indicate your agreement with it.
+
+ By submitting this proposal, I agree that my presentation at
+ EmacsConf 2023 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials")
+ under the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use
+ of the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+```
+
+For other details, see the [[call for participation|cfp]].
+
+You can subscribe to the
+[emacsconf-discuss mailing list](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss)
+for discussions and announcements about EmacsConf 2023.
+
+We look forward to your ideas and submissions. Thank you!
diff --git a/2023/talk-details.md b/2023/talk-details.md
new file mode 100644
index 00000000..f32c9935
--- /dev/null
+++ b/2023/talk-details.md
@@ -0,0 +1,27 @@
+<table><thead><th>Duration</th><th>Title</th><th>Speakers</th></thead><tbody><tr><td>10</td><td><a href="/2023/talks/adventure">An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</a></td><td>Chung-hong Chan</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a></td><td>James Howell</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a></td><td>Tony Aldon</td><tr>
+<tr><td>10</td><td><a href="/2023/talks/writing">Emacs turbo-charges my writing</a></td><td>Jeremy Friesen</td><tr>
+<tr><td>10</td><td><a href="/2023/talks/nabokov">Why Nabokov would use Org-Mode if he were writing today</a></td><td>Edmund Jorgensen</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/collab">Collaborative data processing and documenting using org-babel</a></td><td>Jonathan Hartman, Lukas C. Bossert</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/ref">Org-Mode workflow: informal reference tracking</a></td><td>Christopher Howard</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/voice">Improving access to AI-assisted literate programming with voice control</a></td><td>Blaine Mooers</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a></td><td>Andrew Hyatt</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/extending">GNU Emacs for electronics, note-taking, and as lightweight IDE</a></td><td>Anand Tamariya</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a></td><td>Fermin</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/koutline">Using Koutline for stream of thought journaling</a></td><td>Matthew Jorgensen (PlasmaStrike)</td><tr>
+<tr><td>10</td><td><a href="/2023/talks/eat">Eat and Eat powered Eshell, fast featureful terminal inside Emacs</a></td><td>Akib Azmain Turja</td><tr>
+<tr><td>40</td><td><a href="/2023/talks/hyperdrive">hyperdrive.el: Peer-to-peer filesystem in Emacs</a></td><td>Joseph Turner</td><tr>
+<tr><td>10</td><td><a href="/2023/talks/mentor">Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</a></td><td>Jeremy Friesen</td><tr>
+<tr><td>10</td><td><a href="/2023/talks/hn">The many ways to browse Hacker News from Emacs</a></td><td>Mickael Kerjean</td><tr>
+<tr><td>40</td><td><a href="/2023/talks/web">Emacs saves the Web</a></td><td>Yuchen Pei</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/sharing">Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</a></td><td>Jacob Boxerman</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/scheme">Bringing joy to Scheme programming</a></td><td>Andrew Tropin</td><tr>
+<tr><td>10</td><td><a href="/2023/talks/lspocaml">Writing a language server in OCaml for Emacs, fun, and profit</a></td><td>Austin Theriault</td><tr>
+<tr><td>10</td><td><a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a></td><td>Pedro A. Aranda</td><tr>
+<tr><td>40</td><td><a href="/2023/talks/windows">Windows into Freedom</a></td><td>Corwin Brust</td><tr>
+<tr><td>20</td><td><a href="/2023/talks/emacsconf">EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</a></td><td>Sacha Chua</td><tr>
+<tr><td>10</td><td><a href="/2023/talks/sat-open">Saturday opening remarks</a></td><td>nil</td><tr>
+<tr><td>10</td><td><a href="/2023/talks/sat-close">Saturday closing remarks</a></td><td>nil</td><tr>
+<tr><td>5</td><td><a href="/2023/talks/sun-open">Sunday opening remarks</a></td><td>nil</td><tr>
+<tr><td>10</td><td><a href="/2023/talks/sun-close">Sunday closing remarks</a></td><td>nil</td><tr></tbody></table> \ No newline at end of file
diff --git a/2023/talks.md b/2023/talks.md
new file mode 100644
index 00000000..0cb20c1e
--- /dev/null
+++ b/2023/talks.md
@@ -0,0 +1,17 @@
+[[!meta title="Talks"]]
+[[!meta copyright="Copyright &copy; 2023 Sacha Chua"]]
+[[!sidebar content=""]]
+
+These are the talks from EmacsConf 2023, which was a fully-online conference.
+
+Please note that the following talks are intended for a general
+audience even though they've been scheduled in the development track
+for time reasons:
+
+- [Literate documentation with Emacs and Org Mode](https://emacsconf.org/2023/talks/doc)
+- [hyperdrive.el: Peer-to-peer filesystem in Emacs](https://emacsconf.org/2023/talks/hyperdrive)
+
+[[!inline pages="internal(2023/schedule-details)" raw="yes"]]
+
+Want to help make EmacsConf even awesomer? [[Volunteer!|/2023/volunteer]]
+
diff --git a/2023/talks/adventure.md b/2023/talks/adventure.md
new file mode 100644
index 00000000..2654ce1b
--- /dev/null
+++ b/2023/talks/adventure.md
@@ -0,0 +1,73 @@
+[[!meta title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp"]]
+[[!meta copyright="Copyright &copy; 2023 Chung-hong Chan"]]
+[[!inline pages="internal(2023/info/adventure-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp
+Chung-hong Chan (he/his/him, er/sein/ihn/ihm, 佢/他)
+
+[[!inline pages="internal(2023/info/adventure-before)" raw="yes"]]
+
+I am experimenting with using org-mode as a HyperCard-like text
+adventure game engine. In this talk, I am going to demonstrate a text
+adventure game for learning the basics of Emacs. Through solving
+puzzles and programming your companion robot, Emi, you will learn how
+to use the built-in Emacs help system, the mechanic of emacs
+customization and the basics of programming Emacs Lisp. I believe this
+game is ideal as a light-hearted complement to the `C-h t` tutorial.
+
+About the speaker:
+
+Dr Chung-hong Chan is a senior researcher at GESIS Leibniz Institute for the Social Sciences, Germany.
+
+# Discussion
+
+- <https://github.com/chainsawriot/orgdungeon>
+- Q: Maybe the Emacs tutorial could be adapted to this game flow?
+ - A: Unfortunately, that would be quite difficult. The Emacs tutorial is more about the basics (cursor movement, buffer management etc). And those bits are quite difficult to demo in the current text adventure format. I think a game format like vim-adventures[vim-adventures](https://vim-adventures.com/) would be better.
+- Q: What was something that you learned about Org-Mode/Emacs in
+ working on this tutorial?
+ - A: ~(eval (car (read-from-string string)))~
+- Q: Could you please elaborate what's the background of this game?
+ What's the motivation why you choose this game as introduction for
+ a newbie ton enter the Emacs world?
+ - A: The background of this game is a bit silly. It’s actually my wife wanted to create a (general) video game last year and I told her I can create a puzzle game as well. I have no experience in programming any video game, but I enjoy playing niche video games such as Tetris and TIS-100.
+ I have tried to create educational material for R programmers to learn emacs, e.g. [this](https://github.com/chainsawriot/essaprimer) and [this](https://github.com/chainsawriot/presentation-typeless). Actually, the game presented so far is covering the same material of the latter tutorial. But I don’t think the written tutorial is as effective as this game.
+ There are so many introductory emacs tutorials. C-h t, for example, is quite good. If the path to emacs is from 0 to 100, those tutorials are good for going from 0 to maybe 20. It is nice to get the feet wet. I think that the gateway to really enjoy emacs, i.e. beyond 20, is to customize emacs so that emacs becomes your own tool. However, there is a huge perceived knowledge barrier of “learning emacs lisp” and “learning emacs internal”. From my own experience, the trick is stop “learning” (from an educational perspective, one can’t learn something for the sake of learning something.), but to “do.” The best way to immediately do something, is to play a game.
+- Q: Thank you for the talk! Really cool project! How many planes are
+ you planning to make and what more will you teach the players? +
+ Q: Do you have an end goal for this game? That is, what information
+ do you want it to cover or will it be never ending?
+ - A: I am going to answer both questions jointly. The plan is to at least allow the users to write a 10-LOC function in emacs lisp.
+- Q: What is plane? Is that something like a question set in the game?
+ - A: I am not a D&D player. But my wife told me [a Plane](https://en.wikipedia.org/wiki/Plane_(Dungeons_%26_Dragons)) is one parallel universe. But you are right, one Plane in this game is basically one question set, or one puzzle.
+- Q: Is it for programmers? Non-programmers? Or general?
+ - A: I really hope that this is for everyone. But given the emacs userbase is like 90% programmers, I don’t mind this game is geared towards the programmer type wanting to “go beyond 20”
+- Q: What is the link to your GitHub repository?
+ - A: It is above in the notes and links...
+ - <https://github.com/chainsawriot/orgdungeon>
+- Q: Is `(find-file org-file-name)`  [skip-to-plane] a effective
+ way to load information from your org-files? 
+ - A: Probably not. The original idea was to have one giant org file and jump between headlines. But the current approach is easier to implement.
+- I love this idea of using emacs to teach emacs! It is a good
+ continuation of C-h t. The adventure should not replace C-h t but be
+ its next step after finishing C-h t. Good job!
+- Q: i am wondering what is the naming scheme of the planes, since there are large spaces between the numbering which i guess could be like how you leave space in between basic lines?
+ - A:
+- with how simple the system seems it would be interesting if people forked it and add their own tutorials for their projects
+- neat idea for learning about emacs!
+- that was actually my first thought - it is good template for tutorial of complicated custom functions.
+- Yeah, that sounds pretty interesting as an idea
+- I mean, it is beautiful presentation of fun hacking, but I don't see it as real text adventure... But great intro and wish you good luck with it.
+- so good thank you i will check this game out
+- interesting idea
+- i will definitely keep this game in mind since i have mostly just started my emacs journey
+
+[[!inline pages="internal(2023/info/adventure-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/adventure-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/collab.md b/2023/talks/collab.md
new file mode 100644
index 00000000..1a88809b
--- /dev/null
+++ b/2023/talks/collab.md
@@ -0,0 +1,195 @@
+[[!meta title="Collaborative data processing and documenting using org-babel"]]
+[[!meta copyright="Copyright &copy; 2023 Jonathan Hartman, Lukas C. Bossert"]]
+[[!inline pages="internal(2023/info/collab-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Collaborative data processing and documenting using org-babel
+Jonathan Hartman (he/him), Lukas C. Bossert (he/him) - <https://mastodon.social/@lukascbossert>, <mailto:hartman@itc.rwth-aachen.de>, <mailto:bossert@itc.rwth-aachen.de>
+
+[[!inline pages="internal(2023/info/collab-before)" raw="yes"]]
+
+In our presentation we will show an efficient way of combining
+information and enriching it by retrieving data, processing it, and
+finally exporting it, all with org-mode. In this presentation, we will
+demonstrate not only org-mode, but also a few companion libraries that
+add functionality such as knowledge graph visualizations, literate
+programming, and collaborative editing to quickly create a deeply
+informative reference page.
+
+The starting point of our best practice is the National Research Data
+Infrastructure Germany (NFDI), about which we intend to retrieve and
+process certain information data gathered from wikidata. For this, we
+are additionally leveraging the "org-roam" emacs package, which
+provides functionality for quickly and simply linking together notes
+and ideas into a custom knowledge graph. Initially, we will write a
+short abstract about the NFDI and embed it into our existing knowledge
+graph by linking it to other existing nodes. In the visualized graph
+(using the “org-roam-ui” package), links and secondary connections to
+other existing nodes can now be revealed.
+
+Next, we would like to enrich the text about the NFDI by with data
+retrieved from the Wikidata API. A convenient way of creating
+self-documenting code is the approach called “literate programming”,
+which presents program logic embedded within human language text. In
+Emacs we achieve this by using the “org-babel” package. Perhaps now we
+find it is helpful to collaborate with a colleague in the document:
+while one is writing the code, the other can explain its use and
+interpret the results. We will do this simultaneously in the same
+document using a method called “crdt” (conflict-free replicated data
+type) and – of course – there is also an implementation of this in
+Emacs. The results of the code blocks can be used for further analysis
+and shared throughout the same document.
+
+Finally, for the sake of proper and barrier free documentation, we
+show how to export the document to various formats like pdf, html, txt
+etc. using either the built-in feature of org-mode or the
+implementation of pandoc.
+
+About the speakers:
+
+**Jonathan Hartman** is a trained data scientist and works at the IT
+Center of the RWTH Aachen University, Germany.
+
+**Lukas C. Bossert** is a trained classical archaeologist and is deputy
+head of the department "research process and data management" at the
+IT Center of the RWTH.
+
+Lukas, an intermediate Emacs user, is currently exploring how to
+optimize his daily workflow by leveraging various Emacs packages. On
+the other hand, Jonathan is a relative newcomer to this environment,
+encountering common pitfalls faced by beginners. Together, they
+explore the capabilities and functionalities of org-mode, discovering
+how it can enhance data management and presentation in their research
+processes.
+
+[[!img /i/emacsconf-2023-collab-sponsorship.png alt="Lukas and Jonathan are financed by the DKZ.2R Datenkompetenzkolleg Rhein-Ruhr (16DKZ2030E), www.dks2r.de"]]
+
+# Discussion
+
+## Questions and answers
+
+- Q: How reliable it resolves the conflict? I mean, for my personal
+ use case, for example, Sycnthing, sometimes it's not working
+ perfectly and I had to manually edit it. How is it robust compared
+ to syncthing?
+ - A (Lukas): We  also faced sometimes issues that letters got
+ mixed up. We couldnt figure out what caused it and it was not
+ reproducable . I cannot compare it to syncthing, never used that
+ with emacs/org-mode.
+- Q: How's the security for this kind of things? I mean, if we adopt
+ these things in our PAD, is there any, can this thing execute
+ arbitrary (elisp) code in different people's computer? (Think like
+ an adversary!)
+ - A: (Lukas)  As far as we saw the code is executed on the local
+ computer, see the part with the R-code in our video. 
+ - (zaeph) We had plans with qhong (maintainer of crdt.el) to
+ tunnel the connection via SSL, but we were blocked by the SSL
+ library that shipped with Emacs, sadly.  However, we did create
+ a security policy that allowed restrictions on the execution of
+ Elisp code. (great!)
+- Q: Really nice talk and demo!  You guys clearly rehearsed :).  I
+ always wonder with serial data processing sequencing like this, to
+ what degree do the intermediate outputs need to appear inline in the
+ text?  Suppose you had 50,000 or one million rows from your initial
+ wikidata (or similar) call.  How would you handle that size of data
+ using a collaborative, literate approach like this?
+ - A: (Lukas) Good question. In your local buffer there is no
+ difference and for the collaborative partner I cannot tell. We
+ testet it with 50 items because that was enough for
+ demonstrating our purpose.
+ - noweb allows getting results of evaluation without having to put
+ the actual data into Org buffer - just arrange the original
+ block generating the data to have :results silent. Basically,
+ :var foo=block-name does not require "block-name" to be
+ evaluated in advance - it will be evaluated as necessary. AFAIU,
+ in the talk, it is re-evaluated every time (to not have it, one
+ would need :cache t).
+ - This has tremendous utility
+ - So it would be stored on disk and referenced by name in a
+ subsequent block?  Sounds useful.  
+ - Not on disk - just cached within a single session. To store
+ on disk, need to save to actual file on disk.
+- Q: How do you handle the viewing of larger or really any tabular
+ data in Emacs/Org when you want to inspect it, like the nice way
+ tabular data is displayed inline in Rmarkdown/RStudio?
+ - A: (Lukas) I have no particular way of doing this. 
+ - What about pandas data summary functionality? Can be a simple
+ python block.
+ - Lukas: Jonathan is our python expert, he might answer this
+ question.
+ - A: (Jonathan) If I follow, you can certainly just use
+ DataFrame.describe() or Series.describe() to get summary
+ statistics for a dataset - the return value would be a Series or
+ a DataFrame, which would be displayed similiarly to how we show
+ things here. Alternatively, DataFrame.head(n) or
+ DataFrame.sample(n) would return a dataframe of the first n / n
+ random lines of a dataset, and might be a way of providing the
+ gist of a very large dataset without printing the entire table
+ in the document.
+ - Would be nice to have a "summarized table" functionality in
+ Org, that includes an abridged copy of a long table inline, but
+ you can open it in another buffer to browse/edit the full table
+ (ala block edit).  
+ - Feel free to post a feature request - see
+ <https://orgmode.org/manual/Feedback.html#Feedback>
+- Q: I'm thinking about an application for a single user, but in
+ different platforms. In a simple case. For example, you have a
+ buffer in your local computer, and you also want to have some files
+ on your pad or on your phone, and you can use this CADT concept to
+ make sure that there's not too much conflict in between different
+ editing sections. Do you think this is a good idea? I mean, compared
+ to purely relying on Syncthing, which sometimes I feel is unreliable
+ for resolving those conflicts.
+ - A: (Lukas) This sounds very interesting and could beneficial for
+ contiously working on things.
+
+## Notes
+
+- I like the way you highlight the point you are talking about in real
+ time.
+- Conflict-free Replicated Data Types (CADT) ::
+ <https://github.com/emacs-straight/crdt>
+- !This is the future of PAD for our conference.
+- Just came here to say watching two users editing the same buffer
+ simultaneously is BLOWING MY MIND 
+ - BLOWING MY MIND  +2
+ - blowing my mind, too ...
+ - WOW
+- Gitlab custom-export.setup
+ - What about it?
+ - I am looking for that setup file and want to try it :) 
+ -->
+ <https://git.rwth-aachen.de/dl/workshops/collaborative-coding-with-emacs/-/blob/main/emacs/custom-export.setup>
+ - Thank you!
+- Truly one of the most impressive talks of the day. Congrats! Very
+ inspiring
+ - Yes, indeed. 
+ - (Lukas) Wow! Thank you. We werent sure if this is worth showing
+ at EmacsConf because there already have been plenty of talks
+ about literate programming and org-babel....
+ - Great collaborative conversation and step-wise example
+ creates a different (and impactful) framing.  Thank you!
+- crdt is fantastic; pity that most (all but one) of my collaborators use Word & VS Code. 🙁
+- that's really cool. One of the parts that's a bit hidden from the user is seeing the format that the data is in inside the shell script
+- it is whatever constitutes the closest equivalent of table in sh (array)
+ - yeah, you have to keep the representation in mind when filtering it as text through sed
+- this demo is so cool :D
+- Really, really impressive I have to admit
+- HA. you cannot evaluate in place so seamlessly in that way with Rmarkdown :). And you cannot combine named blocks in this way either. Wish more folks used emacs.
+- wow, so `#+CALL` can be embedded in text via `call_()?` TIL
+- such a slick presentation, I like the CRDT collaboration angle, looks like an end-game UX
+- Impressive workflow!
+- great presentation!
+- For those of you who remember the bad old days before "reproducible research," that talk is even more impressive. Great job!
+ - i was prolly not there in the bad old days, but imho reproducible research is a pressing, current problem.
+- I feel like that talk video should be shared on Hacker News
+
+
+[[!inline pages="internal(2023/info/collab-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/collab-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/core.md b/2023/talks/core.md
new file mode 100644
index 00000000..a413a3c2
--- /dev/null
+++ b/2023/talks/core.md
@@ -0,0 +1,179 @@
+[[!meta title="Emacs core development: how it works"]]
+[[!meta copyright="Copyright &copy; 2023 Stefan Kangas"]]
+[[!inline pages="internal(2023/info/core-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs core development: how it works
+Stefan Kangas
+
+[[!template id="help"
+summary="main talk does not have captions"
+tags="help_with_main_captions"
+volunteer="jchelary 2024-01-10"
+message="""This talk does not have captions yet.
+Would you like to help [caption this talk](/captioning)?
+You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt)."""]]
+
+[[!inline pages="internal(2023/info/core-before)" raw="yes"]]
+
+- Why it is fun and exciting to contribute to Emacs
+ - We have easy bugs that anyone can fix, in random packages
+ - And extremely hard ones for experts in things like garbage
+ collection, and compilers
+- We are not scary, in fact working to build a welcoming culture.
+- The nature of a public list
+ - Don't listen to random people being negative or hostile
+ - No response is not necessarily a bad thing
+- Cultural aspects of emacs-devel vs GitHub
+- How to behave (be polite, etc.)
+- Email vs forge, help wanted.
+- Why copyright assignment
+- Plans for Emacs 30 (maybe) - needs coordinating with Eli
+
+If I have more time, I'd like to cover more things, for example:
+
+- GNU ELPA vs NonGNU ELPA - why and how
+ - Our plans for GNU ELPA going forward (bundle stuff in tarballs)
+- The future of Emacs: a vision
+
+Basically, I want to do everything I can to inspire people to join core
+development and to lower the barrier to participating. In effect trying
+to work on "bridging the gap" that we have identified exists between
+emacs-devel and the community.
+
+About the speaker:
+
+Stefan Kangas is one of the Emacs core maintainers.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q:Can you tell us some about your background with Emacs development
+ and programming in general (your professional work possibly)?
+ - A: studied CompSci at university.  started programming on a
+ Commodore 64, then C, Perl, and so on
+- Q: Do you think that one day, there will be a "native" graphical
+ web browser in Emacs or is it kind of against its philosophy and
+ architecture? So will we stick just with EWW and EAF or similar
+ workaround tricks?
+ - A: Proper HTML rendering in Emacs is a dream right now
+- Q: Emacs development and communication still is very much focused on
+ E-Mail mailing lists. I like this. But what do you think about
+ introducing other channels for talking to users? E.g., the Emacs
+ project/ community could set up a Mastodon instance of its own etc.
+ - A:
+- Q: What are some features or packages you'd like to see developed
+ by the community?
+ - A: Some of the things that Stefan would like to see happen right
+ now
+ - treesitter: improving and working on new modes
+ - refactoring capabilities in Emacs
+- Q: What is the hardest decision being made within Emacs-dev for last
+ three years?
+ - A:
+- Q: Any plans to integrate EXWM into core? Emacs is a really good WM.
+ - A:
+- Q: Do you think it is a good idea to choose Org-mode for writing
+ documentation instead of Texinfo?
+ - A
+- Q: What do you plan to work on in Emacs core in the future?
+ - A:
+- Q: What do you use Emacs for in your life, other than working on
+ Emacs itself?
+ - A: Programming, obviously (Stefan works as a programmer). 
+ org-mode (including to prepare this talk), for productivity, rss
+ reader, emails.
+- Q: What could we do in order to make Emacs more attractive for
+ younger users?
+ - A: 
+- Q: How are we going to make sure that the cool idea is going to pass
+ it through for the next generation, let's say 20 years later, that
+ generation still have the good knowledge we have today.
+ - A:
+- Q: If you're willing to discuss it, what do you think about the
+ recent controversy about use of cl-lib in Emacs core code?
+ - A: Stefan's opinion is on emacs-devel.
+- Q: When we find a bug, in our emacs.... do we need to try to
+ replicate it on the sid version (debian/sid=1:29.1+1-5 at ehe time
+ of writing), then update all the usual lisp package we use... and
+ if we succeed to replicate the bug in this version, only then go to
+ the development version 30 and do the same ? Then only, ask for
+ assistance in reporting the bug we found ("M-x report-emacs-bug" 
+ will be sufficient ) ?
+ - A: (Answering for Stefan, because information about how to
+ report Emacs bugs is widely available, including in Emacs's own
+ documentation: You should try to reproduce it on the latest
+ released version of Emacs, with a clean Emacs configuration
+ (i.e. "emacs -q"), before reporting.  And you should look for
+ existing bug reports on the tracker.  If you have extra time,
+ consider trying to reproduce it on the master branch or the
+ branch for the next release as well.  And if you're sure
+ you've found a bug, be sure to report it using "M-x
+ report-emacs-bug" rather than just emailing emacs-devel about
+ it.)
+- Q: On branching off sub-threads. I note that they are less visible
+ compared to starting a new thread in practice. I am wondering if it
+ is just my impression or something devs also observe.
+ - A:
+- Q: What about rewriting emacs in Rust? Use guile instead of elisp?
+ Multi-threaded emacs? Make emacs prettier and shiny? And of course,
+ sane defaults! Just kidding. We are spoiled children because you and
+ Eli, Lars, etc. do an impressive work. I live in Emacs since 2001.
+ Thanks!
+ - A:
+- Q: The only downside I see with copyright assignment is that one has
+ to disclose their real identity. Would it be a possibility to assign
+ copyright under a nickname?
+ - A: (not the speaker) FSF said they can publish a pseudonym but
+ need the actual identity in their paperwork, which will be
+ presumably protected, but it's not totally anonymous.
+ - (AFAIK from Bastien) The actual FSF assignee list is not
+ public - I know that it is available to maintainers, but
+ must not be shared.
+- Q:Do you think it is possible to reach an agreement on sane defaults
+ for better out of the box experience?
+ - A: It's more of a social problem than a technical problem (my
+ sane defaults might not be yours).
+- Q:Will xwidgets have a future? Seeing the new bugs popping up in the
+ latest xwidget dev.
+ - A:
+- Q: Have you voted for Emacs as the software of the year on the
+ Tuxies by Jupiter Broadcasting? I did, because Emacs 29 is great!
+ Thank you! :-)
+
+## Notes
+
+- Cambrian explosion of packages (5000 packages in MELPA)
+ - GNU ELPA <- generally better if someday it might be good to
+ ship it with Emacs
+ - João Távora (Eglot author): haven't seen a problem with
+ copyright assignment
+ - To be fair, it does happen in certain cases. But
+ infrequently.
+ - New package archive NonGNU ELPA is now enabled by default, no
+ copyright assignment needed
+- Emacs is hackable. I think that's a blessing and a curse. The types
+ of choices you can make when you implement... Different choices
+ between things like Common Lisp and Scheme. I think we have that
+ kind of tensions within Emacs. These are good discussions to have. I
+ think what will never change is that Emacs is hackable. Emacs is
+ customizable. This is what's bringing you that amazing user
+ experience. The flip side is that it's easy to hack around bugs
+ instead of fixing them. Or we accept limitations in Emacs core. I
+ think we could get better at taking those few extra steps to make
+ Emacs better for all users.
+- Thank you Stefan! That was all really cool! :D
+- thank you you guys it's fantastic
+- thank you guys to say you amazing is to not give you enough
+
+
+[[!inline pages="internal(2023/info/core-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/core-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/cubing.md b/2023/talks/cubing.md
new file mode 100644
index 00000000..b8f11327
--- /dev/null
+++ b/2023/talks/cubing.md
@@ -0,0 +1,105 @@
+[[!meta title="Speedcubing in Emacs"]]
+[[!meta copyright="Copyright &copy; 2023 Vasilij "wasamasa" Schneidermann"]]
+[[!inline pages="internal(2023/info/cubing-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Speedcubing in Emacs
+Vasilij "wasamasa" Schneidermann (he/him) - Pronunciation: [vɐˈsʲilʲɪj] [vazamaza] [ˈʃnaɪ̯dɐman], IRC: wasamasa, Website: <https://emacsninja.com> Fediverse: @wasamasa@lonely.town, <mailto:mail@vasilij.de>
+
+[[!inline pages="internal(2023/info/cubing-before)" raw="yes"]]
+
+Emacs is well-known for its kitchen-sink nature and sheer extensibility.
+However, its utility for tasks beyond text manipulation is still
+disputed. While it is possible to do most of your computing inside
+Emacs, the existing solutions are of varying quality. Sometimes it is
+necessary to create a custom solution tailored to one's personal needs
+and I believe Emacs to be a worthwhile platform for this.
+
+In this talk I present my journey of building a package to assist me
+with speedcubing, a competitive sport with the goal of solving the
+Rubik's Cube as fast as possible. Along with a demo, useful Emacs
+features and challenges that came up during development will be shown.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: I see that there is a way to document the time it took to
+ complete the puzzle; however, what about other things such as the
+ date and time, and potentially a note on technique or warm up
+ routine etc? It seems like an interface that included these things
+ would also help people who are practicing and trying to improve. It
+ would help answer the question... what kinds of things do I need to
+ do to improve. ;;Thank you for your answer.
+ - A: Currently, only the timestamp and completion time are
+ recorded for the puzzle/label. However, I've looked at
+ twisty-timer and it does record both the used scramble and a
+ comment field as well, so I plan adding those once the other
+ features work properly. This would allow keeping track of
+ particularly good/bad solves for example.
+- Q: As a side-note, could you say something about how you use emacs
+ to help with your cybersecurity or CTF actifivities? Are there some
+ recommended packages or do you use all of your own templates and
+ procedures to speed your activity? Maybe just post a link to your
+ homepage or GH repositories.
+ - A: It's pretty much only Org usage to document my activities in
+ a way that I know what I did 3 weeks ago and can pick up my
+ research from then. I do not use Emacs for source code review
+ specifically (depending on the target environment, there are
+ better suited tools). The thing with the field is that often,
+ one has to resort to work with whatever tools are at hand and to
+ make the most of them, which is kind of at odds with using Emacs
+ first and foremost as an integrated environment for everything.
+ Other than Org, I use it as an editor for pretty much any
+ programming language I encounter.
+- Q: What are the biggest challenges to using transient?
+ - A: The documentation was very high-level compared to what I'm
+ used to, so I had to skim it a lot to find out how to use it for
+ basic tasks. I think it would be useful to have some slightly
+ more hands-on examples for common tasks. One issue I've run
+ into a few times was the code using generic functions, so it was
+ difficult to debug errors (like using a non-interactive lambda
+ form when a command was expected and getting an unhelpful error
+ message).
+ - <https://github.com/positron-solutions/transient-showcase>
+ might be helpful.
+ - Definitely, but as I've remarked in the talk, the
+ examples felt very "generic". Slightly more realistic
+ examples would make it even better.
+- Q: Very cool project.  Alas I'm not a cuber, so my question is
+ merely, what did you learn in the process of making this
+ presentation?
+ - A: I've never recorded a demo video happening outside of my
+ laptop before, so getting the external recording setup right
+ was... fun. It involved a ladder, several cardboard boxes and
+ my phone. After five attempts (one of which ended up with the
+ cube rolling off the desk loudly), I finally got an okayish
+ recording to use for the presentation.
+- Q: Does svg.el support tap events? 
+ - A: svg.el is only responsible for generating valid SVG documents
+ and one can put whichever tags/attributes there they wish. From
+ my understanding, anything interactive usually solved with JS in
+ the browser would need to be rewritten using Emacs Lisp instead.
+ Tap events for example could be solved with the ":map"
+ property put on the image and would work for other image formats
+ than SVG as well.
+
+Notes
+
+- There's probably quite a few cubers in here. =) I tend to average 50s on 3x3, the kiddo is usually a bit faster.
+- I've recently got a 45s best with LBL
+- I have some code in my config to draw last-layer diagrams as SVGs and an Org link thing like #+LINK: pll https://alg.cubing.net/?stage=PLL&type=alg&setup=x_y_z&view=playback&alg=%s to link to algs quickly; https://sachachua.com/blog/2023/02/using-org-babel-to-learn-rubik-s-cube-algorithms/
+ - speaker: ah yes, I've had the idea to try out roofpig or cubing.js for doing that in org documents, nice to see it has been done before
+- FWIW transient just had a v0.5.0 release which adds and fixes things. It continues to improve thanks to tarsius's tireless work.
+- i'm glad you're exploring Emacs UI wasamasa , i've also been confounded trying to write a transient, and its nice to see that sqlite is working for ya
+- to be fair, I've considered to just stick to my usual approach of writing boring code that does work on as many machines as possible, but there were so many new features that would help making a nice looking and working package that I decided to just depend on emacs 29.1
+
+[[!inline pages="internal(2023/info/cubing-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/cubing-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/devel.md b/2023/talks/devel.md
new file mode 100644
index 00000000..6dd8bd2a
--- /dev/null
+++ b/2023/talks/devel.md
@@ -0,0 +1,111 @@
+[[!meta title="Emacs development updates"]]
+[[!meta copyright="Copyright &copy; 2023 John Wiegley"]]
+[[!inline pages="internal(2023/info/devel-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs development updates
+John Wiegley (he/him)
+
+[[!template id="help"
+summary="main talk does not have captions"
+volunteer="jchelary 2024-01-10"
+tags="help_with_main_captions"
+message="""This talk does not have captions yet.
+Would you like to help [caption this talk](/captioning)?
+You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt)."""]]
+
+[[!inline pages="internal(2023/info/devel-before)" raw="yes"]]
+
+In this talk, John Wiegley will briefly summarize important developments on the road to Emacs 30. He will not be able to answer questions right now, but you can post questions in the pad and he can
+follow up after the event.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: Which changes in recent Emacs releases are you enjoying using?
+ - A: I have really liked the visual-line-mode. I'm not sure how
+ recent that is. Some of these features I've discovered quite
+ late. The new display-line-number-mode, much faster. Native
+ compilation. I do a lot of stuff in Emacs. Native compilation
+ has brought the experience much closer to a modern app.
+- Q: What do you think the future in the area of artificial
+ intelligence from the developer point of view?
+ - A: I do use xinside Emacs quite a bit when doing development in
+ other languages. Ex: working on ledger, haven't done a lot of
+ C++ lately. Ex: comparing strings only up to the length of the
+ shortest string. I think in terms of developer assistance, not
+ having to keep all the libraries in memory... Like Rosetta Code
+ (<https://rosettacode.org/wiki/Rosetta_Code>). That's a great
+ database - code in different languages.
+- Q: What is the future of Emacs on macOS? I understand that there are
+ too few developers for the platform. Is that still true?
+ - A: I do not know exactly what the state of Emacs development on
+ macOS is, but I have never suffered in any way, using Emacs on
+ the Mac for decades.
+- Q:Why aren't you contributing to Emacs anymore? Lack of time, I
+ guess?
+ - A: Lack of free time
+ - Draft? (story about describing what he wanted, and then someone
+ ran it through ChatGPT and sent him Emacs Lisp code) <- ChatGPT
+ example, may increase the efficiency of my free time
+ - What was the language that you code in now?
+- Q: One of the tricky things about running emacs on android is do you
+ use anything that requires extra packages ex, pdf-tools with
+ mupdf? - org-roam with a database - playing music or video with mpd
+ or mpv and bonga, elfeed. Do you run emacs turmux, Emacs apk, emacs
+ in virtaul machine??? This is also the case on Emacs for windows but
+ to a lesser degree 
+ - A: (zaeph) We'll put a pin in this for Stefan afterwards.
+- Q: Will AUCTeX some day become the default TeX mode in Emacs? And,
+ if so, when? :)
+ - A: The downside of moving to core is that your release cycle is
+ slowed down because you have to go through emacs-devel and the
+ devel team. So it seems to be up to AUCTeX developers. This can
+ be troublesome if a package develops rapidly.
+- Q: Do you use other IDEs for theorem proving work, notably VS Code
+ for LEAN? Which languages and provers can/do you use Emacs for?
+ - A: I have always used Emacs. 
+- Q: Can we see that AI-generated "Drafts"-like code anywhere?
+ - A:
+ <https://github.com/jwiegley/dot-emacs/commit/ab27998dee4cb92c6f660b434b32582e3d2842f9#r113795175>
+- Q: Wait, just a quick search over "Draft". Does that mean you're
+ not using Org anymore?
+ - okay, I am good now :)
+- Q: Speaking of which, do you ever hit the walls in terms of
+ multithreading issues, and if so when doing what / in what cases?
+- Q: was [perl-mode] just abandonned or did cperl bring a new design ?
+ - Not the speaker: I think someone just started a separate cperl-mode (based on c-mode) and many of us found it worked better, so switched to it.
+
+## Notes
+
+- Emacs 29 has been quite a success so far, 29.2 to be released soon
+- Thinking about starting Emacs 30 release cycle (emacs-30 will be cut
+ and development will be frozen with only bugfixes going in); could
+ take some time
+- Not a huge number of changing features, but still some interesting
+ things
+- Android support - native Emacs on a tablet, etc.
+- Much better support for touchscreen devices (laptops and tablets) 
+ Interesting, the original design of Hyperbole anticipated iPad-like
+ devices with each node of information represented by a rounded
+ square and interconnected in a knowledge graph like Org-roam does,
+ so maybe we'll do some work in that direction.
+- There will be some support for LL(?)
+- perl-mode -> cperl-mode
+- byte-compiler will warn about more questionable constructs: empty
+ macro bodies, etc.
+- Stefan Kangas is a new co-maintainer (and he'll be giving the next
+ talk live)
+- Thanks John for all the news on Emacs and informative answers.
+
+
+[[!inline pages="internal(2023/info/devel-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/devel-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/doc.md b/2023/talks/doc.md
new file mode 100644
index 00000000..a27fe496
--- /dev/null
+++ b/2023/talks/doc.md
@@ -0,0 +1,69 @@
+[[!meta title="Literate Documentation with Emacs and Org Mode"]]
+[[!meta copyright="Copyright &copy; 2023 Mike Hamrick"]]
+[[!inline pages="internal(2023/info/doc-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Literate Documentation with Emacs and Org Mode
+Mike Hamrick
+
+[[!inline pages="internal(2023/info/doc-before)" raw="yes"]]
+
+When writing about programming or other technical subjects, you’re often weaving blocks of source code, program output, and raw data in with your prose. These supplementary materials are usually copied and pasted into your document from other sources, which can be difficult and tedious to keep up-to-date as things change. Inconsistencies and errors can easily creep in when you “hard-code” dynamic information like program output into your writing.
+
+Wouldn’t it be great if the tool you used for writing knew how to run code in a variety of programming languages, collect and format output, and let you refer symbolically to all this dynamically generated content in your prose? In this talk I’ll demonstrate how to use GNU Emacs’ Org mode to create technical documents that do just that. We’ll explore the features of Babel, Org mode’s literate programming add-on, that makes it convenient to edit, evaluate, and manage embedded code, output, and data all from inside GNU Emacs.
+
+We'll also show how these literate documents can be exported to LaTeX and ultimately PDF format to create professional looking output that looks stunning when printed or viewed.
+
+Also shared at SeaGL 2023
+
+# Discussion
+
+## Questions and answers
+
+- Q: Did you develop a variant of your document for Centos?
+ - A:
+- Q: Great presentation. The preparation is outstanding. For someone
+ like me that never touched the org--mode side of emacs, what do you
+ feel its the more complex part to tackle? You made it seem simple
+ but the complexity there.. woof
+ - A:
+- Q: How do you normally debug, e.g. view the logs or see failed
+ statuses, when the commands in the src blocks fail? Especially if
+ they output lots and lots of logs, and you need to see the full
+ history of the build.
+ - A:
+- Q: Do you find yourself doing plain-text exports? I saw you doing
+ that as an example for a bit. How do you like to format them so they
+ come out looking nice?
+ - A:
+- Q: IIUC if you commit that eval line to your config then theoretically you could open an Org file prepared by someone else and it would automatically run the code in a "startup" block that might be malicious, right?
+ - A: for sure. if you agree to have a block run when you load the document, you could get burned if it changes into something eveil.
+
+### Notes and discussion
+
+- Seems like we could use some kind of extension that would hash a source block and allow you to automatically run ones you've marked safe
+- Property inheritance I still don't completely understand, heh.
+- seeing section on Org MACRO, recall having trouble a while back invoking a MACRO from inside a MACRO; is this a limitation or was I holding it wrong?
+ - AFAIR, macros do support recursion
+ - actually my issue was passing TITLE to a MACRO <https://paste.rs/LZunR>
+ - yeah. "eval" macro arguments in particular are not expanded. you may raise it on the mailing list - looks like something worth considering
+- I almost wanted to pre-process my org mode files with a more advanced macro system like m4. But then I came to my senses.
+ - When discussing Org mode as replacement of TexInfo, it has been rised (Texinfo uses m4) (<https://www.gnu.org/software/texinfo/manual/texinfo/texinfo.html#External-Macro-Processors>) but why do you need m4 when there is Elisp... can just put a code block that will do all the work and eval on export
+ - A: True. You can write elisp to do all the macro replacement, but you end up editing the buffer when you do that, which has its own disadvantages.
+ - during export, it is a throwaway buffer
+ - A: oh, I didn't think of that. Ultimately though org macros have a ways to go before they're truly useful in all context you might want to use them.
+ - org-export-before-processing-hook runs before macro expansion but around the same time (we really need to document the export process step by step)
+- Thanks for the awesome presentation, I can't wait to add some of this stuff to my documents
+- I was pretty terrified to see that ChatGPT could write elisp
+- Also, loved the presentation — great walk-through of the thought process & how to improve. Was happy when Macros made their way in
+- Yeah. tramp would have been cool, but can be dangerous if you start doing sudo apt in the wrong machine
+- I tried cross-compiling Emacs for Serenity. Emacs uses some intermediate binaries (like make-docfile) during its build process, which causes issues with cross-compiling that I couldn't quite figure out.
+
+[[!inline pages="internal(2023/info/doc-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/doc-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/eat.md b/2023/talks/eat.md
new file mode 100644
index 00000000..bd548153
--- /dev/null
+++ b/2023/talks/eat.md
@@ -0,0 +1,141 @@
+[[!meta title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs"]]
+[[!meta copyright="Copyright &copy; 2023 Akib Azmain Turja"]]
+[[!inline pages="internal(2023/info/eat-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Eat and Eat powered Eshell, fast featureful terminal inside Emacs
+Akib Azmain Turja (he/him) - IRC: akib, <https://akib.codeberg.page>
+Fediverse: akib@hostux.social, <mailto:akib@disroot.org>
+
+[[!inline pages="internal(2023/info/eat-before)" raw="yes"]]
+
+Eat is a terminal emulator for Emacs, written in pure Emacs Lisp. It
+can run most (if not all) terminal programs. Despite being implemented
+in Emacs Lisp, it is fast enough for day-to-day uses.
+
+In this talk, I'll give an overview of Eat, its features and
+configuration. I'll show the most useful features and the features that
+make Eat unique (e.g. shell integration, mouse tracking, Sixel support).
+(This may include features that hasn't been implemented yet but will be
+implemented and stable enough by the time of the recording of the talk.)
+Most of the features require no configuration to use, but are
+configurable with user options. I'll also show the most useful
+customization options available that users may want to customize or
+tinker with.
+
+Thanks to the architecture of Eat, Eat can emulate terminal within any
+region of a buffer. Therefore, Eat can be integrated with Eshell. I'll
+show how to integrate Eat with Eshell, and the useful Eshell-specific
+features and configuration.
+
+Then, I'll compare Eat with other terminal emulators available for
+Emacs, and I'll show which feature that Eat has but the other doesn't,
+and which feature Eat lacks. I'll show why Eat is good or bad for some
+users/use cases. For example, why Shell mode users may prefer Coterm (a
+terminal emulator for Comint) over Eat, why Eat is better Term mode in
+the most cases, or why Vterm should be prefered for huge bursts of
+outputs, etc.
+
+Then I'll give pointers to the documentation available like the Info
+manual or README and what they contain. And I'll also discuss what to
+do when you hit a problem. I'll discuss about the common problems or
+misconfiguration, and also discuss where and how to report bugs
+properly. I won't go into much details in this part, since the manual
+covers this topic completely, and the users are expected to not
+encounter problems.
+
+Then I'll discuss the future plans of the project. And finally, I'll
+conclude the talk with a summary of the whole talk.
+
+Outline:
+
+- Introduction: What's Eat and why?
+- Installing Eat from NonGNU ELPA
+- Demonstrating Eat's features and configuring them
+- Eshell integration
+- Comparison with other terminal emulators
+- Shortcomings and common (fixable) problems
+- Future plans
+- Conclusion
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: Have you thought about upstreaming EAT?
+ - A: Yes, but I haven't yet completed the copyright paperwork.
+ - S: Look into it, I think it would be great to have a better
+ implementation of a terminal OOTB!
+- Q: Very impressive!  What lessons did you learn while developing
+ EAT?
+ - A:I learned how to optimize Elisp code, and also how terminals
+ work actually.  And also process handling in Elisp.
+- Q: How long did it take you to develop EAT to this point?
+ - A:It took around 5 months to make it working at bare minimum.
+ - Q: Did you have any experience with terminal emulation
+ before working on EAT?
+ - A:Not much really.  I mean I knew how terminals worked
+ but I didn't know the escape sequences.
+- Q:Impressive work; I look forward to trying it.  What did you want
+ that Vterm did not provide?  I think I'll try it today.
+ - A:The keybindings, specially.  And also I wanted Eshell terminal
+ emulation.
+- Q: Is Elisp native-compilation what allows EAT to peform as well as
+ or better than Vterm, or is EAT even that fast with just
+ byte-compilation?
+ - A:I use native-compilation.  But Eat is still quite a few times
+ faster than Term mode when byte-compiled.
+- Q: Should it work on Emacs 28.1?
+ - A:Yes.
+- Q: What does EAT do differently than other terminal emulators that
+ allows it to perform so well?
+ - A:I don't really know quite clearly.  At the time I implemented
+ the main code, I had plenty of time.  I did profiling and tried
+ various implementations to do the same thing.
+- Q: what sparked your interest in Emacs, considering its often
+ perceived as outdated, and how do its powerful capabilities remain
+ relevant today?
+ - A: First of all, it's free software, I have the freedom.  And
+ the IDEs I used to use were resource hogs, so needed something
+ lightweight.  And, after I started using Emacs, I discovered how
+ powerful it actually is.  Emacs is itself a programming
+ platform, so you can make literally anything with it.
+- Q: have you thought about making EAT work with shell-mode?
+ - A: Yes, I have considered integrating with shell-mode/Comint but
+ it doesn't work, they need the terminal text to be mutable and
+ Eat doesn't support that.  So I have implemented "line mode,"
+ an input mode similar to shell-mode.
+- Q: did the talk show how to show sixel?
+
+## Notes
+
+- I found out about EAT a while ago and was excited to find out that
+ it works so well! Thank you for your great work!
+- akib, truly impressive!
+- :clap::clap::clap::clap::clap::clap:
+- ¡Muy bueno!
+- I use eat, and I have almost replace terminal (bash/zsh) with eshell paired with eat
+- i use eat but i don't really have anything to say cuz i don't use the CLI nearly as much anymore since learning more emacs stuff. but i still think eat is awesome cuz it is really fast for when i do need it
+- I'll be looking into eat more, thanks for the talk!
+- demonstrating sixels would have been a surprise for some...
+- eat is very easy to try out compared to vterm since there's no foreign code involved
+- I was stunned at how fast eat is!
+- even without native-comp, it's pretty fast
+- eat is the apple equivalent of terminal emulators in emacs: It just works! ;)
+- best of both world is, eshell paired with eat
+- <http://yeti.freeshell.org/tmp/20231203-155213__emacs_eshell_eat__showing_xkcd_378_via_sixels.png>
+ - I usd img2sixel wnd some awk glue
+ - imagemagick can also convert to sixel
+- you're the one who helped me with eat and the dumb term line for .zshrc so ty!
+- speaker: yes, i have considering integrating with shell-mode/comint but it doesn't work, they need the terminal text to be mutable and eat doesn't support that so i have implemented "line mode," input mode similar to shell mode
+
+
+[[!inline pages="internal(2023/info/eat-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/eat-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/emacsconf.md b/2023/talks/emacsconf.md
new file mode 100644
index 00000000..cabe7a6b
--- /dev/null
+++ b/2023/talks/emacsconf.md
@@ -0,0 +1,149 @@
+[[!meta title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference"]]
+[[!meta copyright="Copyright &copy; 2023 Sacha Chua"]]
+[[!inline pages="internal(2023/info/emacsconf-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference
+Sacha Chua (she/her) - IRC: sachac, <https://sachachua.com>, Mastodon: @sachac@emacs.ch, <mailto:sacha@sachachua.com>
+
+[[!inline pages="internal(2023/info/emacsconf-before)" raw="yes"]]
+
+[[!template id="help"
+volunteer=""
+summary="Q&A could be indexed with chapter markers"
+tags="help_with_chapter_markers"
+message="""The Q&A session for this talk does not have chapter markers yet.
+Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="emacsconf-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]]
+
+Go on a whirlwind tour behind the scenes to see how we've been using
+large Org Mode files and a bunch of Emacs Lisp functions to organize
+and run EmacsConf. You might be able to pick up some ideas about Org
+Mode navigation, image and video manipulation, captioning, publishing,
+and remote command execution, and then check out the notes to find out
+more.
+
+Resources:
+
+- [RevealJS presentation with clickable links, etc.](https://sachachua.com/proj/emacsconf-2023-emacsconf/)
+- [As one long webpage](https://sachachua.com/proj/emacsconf-2023-emacsconf/exported.html)
+- [Presentation org file](https://sachachua.com/proj/emacsconf-2023-emacsconf/index.org)
+
+# Discussion
+
+## Questions and answers
+
+- Q: How "easy" would it be for someone else to reuse the EmacsConf
+ scripts and config to do a conf of their own?
+ - A:
+- Q: How can speakers and viewers help make preparing for next year's
+ EmacsConf even more fun for the organizers?
+ - A: 1.  Suggest ideas for talks!  They don't have to be big or
+ complicated.  2.  Share the word about things you liked!
+ - follow-up Q: Would you consider making a demonstration video of
+ using subed.el?
+- Q: What tools would you like to exist in Emacsland to help with
+ preparing the conference next time?
+ - A: Etherpad integration with Emacs from an API would be very
+ helpful, e.g. maybe using crdt.el.  Also it would be nice if
+ subed could be used to fix audio sync issues while editing
+ subtitles.
+- Q: Could you elaborate on the workflow that goes on in your mind for
+ when approaching these things? Do you start with an Emacs/Org
+ solution right off the bat at this point, when faced with a task?
+ Are there some conscious steps involved from early ideas to
+ automations of the kind you just showed?
+ - A: 1. Take the time to try to understand and automate a task,
+ even if you think you're only going to do it once.  The
+ learning process adds up over time and makes future, similar
+ tasks easier.
+- Q: How well does this approach allow for other organizers to do
+ individual customizations to their liking while still being able to
+ collaborate effectively?
+ - A:
+- Q:What was the hardest problem you encountered in organizing or
+ running the conference this year and how did you deal with it?
+- Q: Are you seeing year-to-year growth in attendance and after the
+ conference video watching?  You should build the searchable
+ EmacsConf archive!
+ - A: "The evil plan is working!" --Sacha Chua, 2023
+- Q: Any chance of an in-person EmacsConf again someday?
+ - A: I'm not travelling any time soon, but if someone else wants
+ to organize things, I'll be happy to spread the word and help
+ with the backstage things. I really like virtual conferences,
+ though!
+- Q: Any suggestions or specific recommendations for hosting an
+ EmacsConf satellite event? Sorry wait, what was that name again?
+ - A: 
+- Q: Do you have any stats on how many people watched, were in irc and
+ bbb , over those 2 days?
+ - A: 
+
+TODO check out mcron
+
+## Notes
+
+- I talk really quickly! Here's a self-paced RevealJS presentation
+ with narration and clickable links, etc.
+ <https://sachachua.com/proj/emacsconf-2023-emacsconf/>
+ - and as a long HTML page:
+ <https://sachachua.com/proj/emacsconf-2023-emacsconf/exported.html>
+ - and the source Org file using org-re-reveal:
+ <https://sachachua.com/proj/emacsconf-2023-emacsconf/index.org>
+- Amazing presentation, Sacha!!! It's wonderful that all of your work
+ is well-documented. Thank you!!!
+- Feedback:  toobnix was streaming much better than the webm feeds, so
+ would be great to expand that.  Also, IRC on the web kept
+ disconnecting me and then I lose all the history.  Would be great if
+ Etherpad could handle all the dialog and then have it archived as
+ the chats are interesting to review later as well.
+- This is my first year attending the conference, it was amazing! All
+ of the presenters and material were very impressive. And from a
+ technical perspective, the event was extremely smooth. It was easy
+ to find the agenda material online, and then use mpv to watch, and
+ ask questions on etherpad.
+- New stuff for EmacsConf 2023:
+ - Other organizers busy during prep time, so prioritization was
+ key
+ - Wrote lots of blog posts on the way to refamiliarizing myself
+ with the code
+ - Early acceptance with a week for extra comments
+ - Two tracks from the start, could give everyone more time
+ - Moved more mail merge templates into the library
+ - Added more scripts for handling the sessions, playing talks,
+ joining Q&A
+ - Used Spookfox to control Firefox from Emacs: creating BBB rooms,
+ extracting data
+ - Phone recordings + subed-align + subed-record-compile-video =
+ intros, this presentation
+ - subed-waveform made it more fun to check and adjust the
+ timestamps
+ - I still don't like dealing with audio processing or sync
+ issues, good thing zaeph can handle them
+ - Reduced coordination needs by opening Q&A right away instead of
+ waiting for signal
+ - Used Tampermonkey to automatically connect to BigBlueButton from
+ streaming user
+ - Crontab working smoothly; used timers and TRAMP last year
+
+
+- Whatever you do, don't miss out @sachac's talk (this PM or otherwise). I stumbled on it on @bandali's channel following a link to Howard's, and it's a *masterclass* in wrangling things together to automate workflows in Emacs/Elisp/Org. When people ask about VS Code, this shows we are talking different mindsets and tools altogether.
+- Yeah! I'm excited for that one.
+ - So am I.. again! And I'll be rewatching it multiple times too, that's how packed in useful insights and tidbits it is. "What do you mean Emacs/Org is a platform and a way of life?" Well, here you go, great examplar :)
+- FYI Emacs now has `with-memoization`
+ - I use a package (skeeto's?) that has defmemoize and such, is that outdated now?
+ - Yes, Chris's package was developed years ago, and it's been useful to me as well. Stefan Monnier, IIRC, added with-memoization in...28.1, I think. IIRC there are minor differences but now the built-in one should usually be enough.
+- The breadth of use cases and applications, and range of Emacs/Elisp/Org capabilities reached for in this talk is fascinating.
+- I had some time to pop into the mentor Q&A, and one of the things that bubbled up from the conversation was that there's always something to be curious about, even if you've been using Emacs for decades. It's not just about the stuff that comes built-in or even in packages, it's also all these different workflows. so it's easy to be perpetually curious and to have lots of fun.
+ - sachac, Agreed! Not only Emacs, either. For the last several years, I've hosted 1:1s with teammates where they can ask any tech question they want; if I don't know the answer, we figure it out together. And those are my favorite ones. :)
+
+- So nice to see these practical example of automating workflow with Emacs, great presentation sachac
+
+
+[[!inline pages="internal(2023/info/emacsconf-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/emacsconf-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/emacsen.md b/2023/talks/emacsen.md
new file mode 100644
index 00000000..d1b7cc7e
--- /dev/null
+++ b/2023/talks/emacsen.md
@@ -0,0 +1,73 @@
+[[!meta title="The Emacsen family, the design of an Emacs and the importance of Lisp"]]
+[[!meta copyright="Copyright &copy; 2023 Fermin"]]
+[[!inline pages="internal(2023/info/emacsen-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# The Emacsen family, the design of an Emacs and the importance of Lisp
+Fermin (he/him) - <https://codeberg.org/sasanidas>
+
+[[!inline pages="internal(2023/info/emacsen-before)" raw="yes"]]
+
+[[!template id="help"
+volunteer=""
+summary="Q&A could be indexed with chapter markers"
+tags="help_with_chapter_markers"
+message="""The Q&A session for this talk does not have chapter markers yet.
+Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="emacsen-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]]
+
+This talk is about the design of an Emacs the Emacsen editors, GNU
+Emacs, Emacs Lisp and the extensibility of GNU Emacs (and Lem as an
+example of Common Lisp). I want to focus the talk about the understand
+of the concept of Emacs but with concrete examples (GNU Emacs and
+Lem), also highlight some historical Emacsen and how the family of
+editors is doing today.
+
+About the speaker:
+
+I'm Fermin MF, I'm a Software Engineer from Spain with interest in
+Emacsy editors.
+
+# Discussion
+
+## Questions and answers
+
+- Q: How large is the LEM community? How big is the chance of it
+ surviving long term?
+ - A:
+- Q:Are there any Lisp machine capabilities you are trying to revive
+ that GNU Emacs lacks?  The typed objects capability in the editor as
+ an example.
+ - A:
+- Q: What about using Lem for things other than coding common lisp,
+ dired magit "notes org mode dentoe org roam" emms pdf tools shell
+ mode?
+ - A:
+- Q:What about using this in conjunction with Nyxt the common lisp;
+ web browser
+ - A:
+- Q: What is the license of LEM?
+ - A:
+- Q: Big question, I realize, but: How far is LEM from being able to
+ run Elisp libraries, e.g. imagine if Magit could "just work" in
+ LEM?
+ - A:
+- Q: How are LEM buffers designed? Similar to Emacs? TextGrid with
+ Properties? Or something other? I just tried again to give Emacs
+ more interactivity & am thinking if there is a possible display
+ future for the Emacsen.
+- Q: What are the things or experances that lem gives you that are
+ nicer than Emacs? or make you happy using both?
+ - A:
+- Q: (Forgive me if you answered this already.)  Do you think Lem will
+ continue to have a lot of Japanese documentation, or is there a
+ chance it will move entirely to English?  (IMHO having much of the
+ docs in Japanese will hold back the project.)
+ - A: 
+
+[[!inline pages="internal(2023/info/emacsen-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/emacsen-nav)" raw="yes"]]
+
diff --git a/2023/talks/emms.md b/2023/talks/emms.md
new file mode 100644
index 00000000..bcb69c9d
--- /dev/null
+++ b/2023/talks/emms.md
@@ -0,0 +1,102 @@
+[[!meta title="Emacs MultiMedia System (EMMS)"]]
+[[!meta copyright="Copyright &copy; 2023 Yoni Rabkin"]]
+[[!inline pages="internal(2023/info/emms-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs MultiMedia System (EMMS)
+Yoni Rabkin - IRC: yrk
+
+[[!inline pages="internal(2023/info/emms-before)" raw="yes"]]
+
+[[!template id="help"
+volunteer=""
+summary="Q&A could be indexed with chapter markers"
+tags="help_with_chapter_markers"
+message="""The Q&A session for this talk does not have chapter markers yet.
+Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="emms-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]]
+
+- Introduction to Emms: A Practical Introduction
+- How Emms Works: The Technical Part
+- How We Work: Emms Development
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: To warm up, what is the music playing during the lunch break?
+ - A:(zaeph) Album: *basement days*  by shoshin (Grant Shangreaux)
+ ❤️
+ - <https://cicadas.surf/~shoshin/casiopeia/basement%20days/>
+- Q: For next emacsconf, could we have an EMMS playlist to follow the
+ talks along? 
+ - A:
+- Q:I I like to use Music and AudioBooks in very different ways. With
+ music I like shuffling by artist and with AudioBooks want to read
+ sequentially and pick it the same playlist over a couple of
+ days/weeks. Do you have any tips for using these 2 opposing media
+ workflows
+ - A:
+ - Q: For audiobooks I use mpv with m4b files
+- Q: Is there a way to search your music selection by lyrics--
+ assuming those lyrics are in the meta-data or available elsewhere.
+ It would be neat to call songs up from the lyrics to the song.
+ - A: For the lyrics: not possible to do right now.  The caching
+ system is extremely naïve.  Now, with sqlite3 integration, we
+ need to expand the cache to be a lot more greedy and lot more
+ flexible.  The rewrite is in progress, and any related
+ information (including lyrics) will be integrated.
+- Q: Are aliases available for the songs that you like? Defining those
+ aliases or shortcuts either inside or outside emms? ;;BTW: melpa
+ version of emms is missing; however, I was able to install from
+ elpa. 
+ - A: We'll put a pin on this
+- Q:Are there plans for managing meta-data with online resource
+ backends; i.e. discogs or musicbrains? What about something like
+ Beets in Emacs or part of EMMS?
+ - A: That's an active discussion on the mailing-list right now. 
+ We don't want to replicate what Beets does really well, and we
+ don't want a clunky interface with Beets.  It's hard to tell
+ where to draw the line.  Short answer: yes, we want to do that,
+ but the long answer is that it's complicated.  The backends that
+ are used are complicated.
+- Q: Have the developers considered using Emacs' "Customize"
+ functionality to persistently store settings when using
+ emms-setup-discover-players? 
+ - A: Another active project, especially with -discover-players. 
+ It's tough to figure out what is a good way to not annoy people
+ too much.
+- Q: Is there a way to store a bookmark pointing to a song in a
+ playlist?
+ - A:
+- Q: I like what you said about balancing the concern for software
+ freedom with the worry that this might alienate the package user. I
+ was wondering if you have advice for other maintainers on how to
+ communicate this sort of thing diplomatically, when you have to deny
+ implementing a feature for a "freedom" reason.
+ - A:I found that people appreciate knowing where the project
+ stands. But care needs to be taken to be descriptive and not
+ perscriptive; explain why your project is like that as opposed
+ to making them feel judged. Some people are ornery and will get
+ upset anyway, but that's a part of working within the public
+ eye.
+- Q: i wonder if it would be possible to add fluidsynth as a backend for emms to play midis
+ - A: I can add a fluidsynth backend to the tasklist no problem. right now, emms-player-fluidsynth works, but only with basic play/stop/pause support. I assume you are looking for more features than that. emms-player-simple.el defines a few, appropriately named, simple interfaces to some midi players such as fluidsynth and timidity
+Notes:
+
+- This guy has &lt;chefs-kiss&gt; taste in music, by the way. Take it from me, I'm a big snob
+ - i like how it was a bunch of classical and then Tool :)
+- Brilliant 👏
+- Amazeballs 👏
+- oh that's a good idea
+- I just really enjoy seeing the folks that contribute to free software. They are truly people to emulate. That goes double for Yoni.
+- someone on the pad mentioned there not being an EMMS package in MELPA, that is intentional, since EMMS is built into Emacs, and we have the newest version in ELPA
+
+[[!inline pages="internal(2023/info/emms-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/emms-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/eval.md b/2023/talks/eval.md
new file mode 100644
index 00000000..0758cc7a
--- /dev/null
+++ b/2023/talks/eval.md
@@ -0,0 +1,77 @@
+[[!meta title="Editor Integrated REPL Driven Development for all languages"]]
+[[!meta copyright="Copyright &copy; 2023 Musa Al-hassy"]]
+[[!inline pages="internal(2023/info/eval-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Editor Integrated REPL Driven Development for all languages
+Musa Al-hassy (he/him) - Pronunciation: moo seh, <http://alhassy.com/> <https://github.com/alhassy>, <mailto:Alhassy@gmail.com>
+
+[[!inline pages="internal(2023/info/eval-before)" raw="yes"]]
+
+Emacs’ C-x C-e is arguably one of its killer features: The ability to run
+arbitrary Lisp code, anywhere. We demonstrate that the **idea** is portable
+to other languages [0, 1]. The result is an Emacs interface for any
+language, where code of your choosing is evaluated, and results are echoed
+at your cursor in overlays. We will demonstrate how to solve simple
+problems such as FizzBuzz in a RDD style using, say, Java or any language
+that the audience chooses. We will also look quickly at "growing programs"
+such as a photo gallery application, starting from scratch. Along the way,
+we discuss what features make a RDD system pleasant and how they can be
+implemented with our system. Finally, we conclude with how this RDD setup
+allows for inserting results of a computation as a use case for writing
+tests &#x2014;i.e., we we show how user-definitions of a read protocol (the 'R'
+of 'REPL') can result in an analog of C-u C-x C-e.
+
+[0] 💐 Repl Driven Development: Editor Integrated REPLs for all languages 🔁
+
+<http://alhassy.com/repl-driven-development>
+
+[1] REPL Driven Development :: Teaching a JavaScript runtime,
+incrementally, to be a web server 🍽️ 🔁 �
+
+<https://youtu.be/b6Z3NQVn4lY?si=MTMJDSdzszhbA267>
+
+About the speaker:
+
+Musa is an Emacs afficando. His day job is with Java, but his heart is with
+Lisp. His experience with interactive programming is only with Agda [2]
+and Emacs Lisp [3], and both [4].
+
+[2] Graphs are to categories as lists are to monoids
+
+http://alhassy.com/PathCat.html
+
+[3] A Life Configuring Emacs
+
+http://alhassy.com/emacs.d/
+
+[4] Making Modules with Meta-Programmed Meta-Primitives
+http://alhassy.com/next-700-module-systems/prototype/package-former.html
+
+# Discussion
+
+## Questions and answers
+
+- Q: I know that there are many packages for creating graphics with
+ Javascript, but I don't know how to use any of them... is it
+ possible to use your package to create graphics in Javascript step
+ by step from Emacs?
+ - A:
+- Q: Can you summarize what languages your packages support and do you
+ have a common framework for interfacing to their interpreters?
+ - A:
+- Q: Did you get the job?  =)  Did the interviewer have any feedback
+ about your screen-sharing-driven development?
+ - A:
+- Q: Could you compare your package to Language Servers (LSP)? They
+ seem to have similar functionality to your package.
+ - A:
+
+[[!inline pages="internal(2023/info/eval-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/eval-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/extending.md b/2023/talks/extending.md
new file mode 100644
index 00000000..41a962aa
--- /dev/null
+++ b/2023/talks/extending.md
@@ -0,0 +1,34 @@
+[[!meta title="GNU Emacs for electronics, note-taking, and as lightweight IDE"]]
+[[!meta copyright="Copyright &copy; 2023 Anand Tamariya"]]
+[[!inline pages="internal(2023/info/extending-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# GNU Emacs for electronics, note-taking, and as lightweight IDE
+Anand Tamariya
+
+[[!inline pages="internal(2023/info/extending-before)" raw="yes"]]
+
+I've been working on a plethora of ideas around extending Emacs. Since they
+are highly disparate ideas, I think the small videos can fit in as fillers
+/ lightning talks. Below are some playlists containing the proposed videos
+on Youtube.
+
+GNU Emacs for Electronics
+<https://www.youtube.com/playlist?list=PLW9poAEUvGDC7ZWO69qrwRMqdW2xYLsGt>
+
+GNU Emacs for Note taking
+<https://www.youtube.com/playlist?list=PLW9poAEUvGDDxCZX-3xIQ3Wb1HOVcg7N>_
+
+GNU Emacs as a lightweight IDE
+<https://www.youtube.com/watch?v=d14tLD5XiCU&list=PLW9poAEUvGDAMYvvznljaNtvooaJZxsFQ&pp=gAQBiAQB>
+
+
+
+[[!inline pages="internal(2023/info/extending-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/extending-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/flat.md b/2023/talks/flat.md
new file mode 100644
index 00000000..bf579540
--- /dev/null
+++ b/2023/talks/flat.md
@@ -0,0 +1,69 @@
+[[!meta title="A modern Emacs look-and-feel without pain"]]
+[[!meta copyright="Copyright &copy; 2023 Pedro A. Aranda"]]
+[[!inline pages="internal(2023/info/flat-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# A modern Emacs look-and-feel without pain
+Pedro A. Aranda (he)
+
+[[!template id="help"
+summary="main talk does not have captions"
+tags="help_with_main_captions"
+message="""This talk does not have captions yet.
+Would you like to help [caption this talk](/captioning)?
+You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt)."""]]
+
+[[!inline pages="internal(2023/info/flat-before)" raw="yes"]]
+
+In my talk I will show how to enrich themes without having to write them
+from scratch, using the flat-button style. This gives you the possibility
+of creating a nice Emacs GUI with minimal extra ELISP.
+
+About the speaker:
+
+Pedro A. Aranda is a 30+ year Emacs user, who started on an HP mainframe
+and soon started using the DJGPP port of emacs on a 386 at home. Currently
+lecturing at a university in Madrid, he uses emacs for most of his teaching
+activities.
+
+# Discussion
+
+## Questions and answers
+
+- Q: Do you plan to upstream this style into core Emacs?
+ - A: It's in core emacs
+- Q: How difficult is it to modify face styles like this internally?
+ - A: It's very simple, just set the :style of the :box face
+ attribute.
+- Q: How much work was involved in implementing this style internally
+ in Emacs core?
+ - A: About a 20-line patch.
+- Q: Could you please share the code for copy and paste? Thx!
+ - A: 
+ - (defun flat-style(theme &rest args)
+ -   (custom-set-faces
+ -    `(mode-line
+ -      ((t (:inherit mode-line
+ -                    :box (:line-width ,mode-line-height :style
+ flat-button)))) t)
+ -    `(mode-line-inactive
+ -      ((t (:inherit mode-line-inactive
+ -                    :box (:line-width ,mode-line-height :style
+ flat-button)))) t)))
+ - (advice-add 'load-theme :after #'flat-style)
+- Q: Do you teach Emacs to any of your university students?
+ - A: No teaching, but a lot of introdcuing ;-)
+
+## Notes
+
+- It looks great, thanks for upstreaming it in GNU Emacs core as well!
+
+
+[[!inline pages="internal(2023/info/flat-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/flat-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/gc.md b/2023/talks/gc.md
new file mode 100644
index 00000000..dac7add0
--- /dev/null
+++ b/2023/talks/gc.md
@@ -0,0 +1,134 @@
+[[!meta title="emacs-gc-stats: Does garbage collection actually slow down Emacs?"]]
+[[!meta copyright="Copyright &copy; 2023 Ihor Radchenko"]]
+[[!inline pages="internal(2023/info/gc-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# emacs-gc-stats: Does garbage collection actually slow down Emacs?
+Ihor Radchenko (he) - Mastodon: <https://emacs.ch/@yantar92>, <mailto:yantar92@posteo.net>
+
+[[!inline pages="internal(2023/info/gc-before)" raw="yes"]]
+
+Talk sources, PDF, raw data, and analysis are published at <https://dx.doi.org/10.5281/zenodo.10213384> .
+
+Is Emacs responsiveness really affected by slow garbage collector?
+Should `gc-cons-threshold' be increased during startup?
+Or maybe during the whole Emacs session?
+
+I will try to answer these questions using the real data collected from
+Emacs users who installed
+<https://elpa.gnu.org/packages/emacs-gc-stats.html> package and submitted
+their results to <https://lists.gnu.org/archive/html/emacs-gc-stats/>.
+
+About the speaker:
+
+Materials science researcher, Org mode users since many years ago, Org
+mode (unofficial) co-maintainer :)
+
+The talk is an excuse to sum up emacs-gc-stats data for later discussion
+of changing Emacs GC defaults:
+https://yhetil.org/emacs-devel/87v8j6t3i9.fsf@localhost/
+
+# Discussion
+
+## Questions and answers
+
+- Q: Are the GC duration statistics correlated with users? I mean:
+ does the same user experience GCs of various durations, or do some
+ users experience GCs of >0.2 s exclusively while others never
+ experience GCs of >0.2 s?
+ - A: Some users have <0.1 GC time, while others struggle with
+ near 1 sec. Really varies. But the number of people
+ with >0.2sec is significant enough to make GC a big deal. You
+ can check it yourself - there are GC stats plots for each
+ individual user in <https://zenodo.org/records/10213384>.
+- Q:Having recently been working on a high-performance smooth
+ scrolling mode, which needs to respond to scroll events
+ arriving >50-60 times per second, a 100ms delay is *very*
+ noticeable in this scenario.  For normal buffer interation and
+ commands 0.1s a reasonable dividing line, but I'd estimate you can
+ easily feel a 20ms delay during varoius "fast" interactions.  Do
+ you think there is hope to "spread out" GC latency to keep it
+ below say 15ms, even if more frequent (without just repeating many
+ short GC's in a row)?
+ - A: The only reasonable "spread out" is deferring GC to
+ _after_ that scrolling. Like (let ((gc-cons-threshold <large
+ enough number to avoid multiple GCs>)) (do the scrolling)).
+ This is also what recommended by Emacs devs (AFAIR).
+- Q:Opinions about gcmh-mode?
+ - A: (Not Ihor): Ironically it uses too many timers, creating
+ garbage of its own.  It should use `timer-set-time` instead of
+ creating and throwing away timers after each command (via
+ `post-command-hook`) Interesting!
+ - A: (from Ihor): the problem is it ends up consuming a ton of
+ memory, increasing GC time, and that most GCs occur when Emacs
+ is being used intensively and there is no chance for Emacs to go
+ on idle and perform the GC. Since GC cons threshold is raised to
+ ~1G (gcmh-high-cons-threshold) while Emacs is used - you will
+ face a really bad hang (seconds to tens of seconds regularly).
+ Ends up not helping much, recommend increasing
+ gc-cons-percentage=0.2 or so instead.
+- Q:
+ - A:
+- Q: Is there some way to free up memory (such as via
+ `unload-feature`) in Emacs? Often I only need a package loaded for
+ a single task/short period but it persists in memory afterwards.
+ - A: <https://elpa.gnu.org/packages/memory-usage.html>, and
+ built-in M-x memory-report - most of the time, it is some
+ history/cache variables of large buffers that are occupying
+ memory. The library code itself is rarely affecting GC. (The
+ other question is when libraries add timers/heavy mode-line
+ constructs/post-command-hooks/etc - that's indeed a problem,
+ but solved by disabling or not using a package; no need to
+ unload) 
+- Q: Very nice presentation! I just experimented with the threshold
+ and lowered my gc-elapsed from 1.1 to 0.06 seconds (during startup).
+ Interestingly, going to 10MB increased the time, 4MB was the
+ sweet-spot for my system. What is the recommended way to lower the
+ value back to the default value after startup is complete?
+ - A: after-init-hook
+- Q:what were you using to flip through the PNGs? (thanks for the
+ answer.  look-mode on melpa does that too ;)
+ - A: []{.underline}
+ [[https://feh.finalrewind.org/]{.underline}](https://feh.finalrewind.org/)
+- Q: What was the final point you were making regarding Emacs 30?  You
+ got cut off...
+ - A: M-x malloc-trim
+- Q: With 16-32G RAMs a minimal OS swapping, how about systematically doing this temporary deferral @yantar92 suggested and leave it down for a longer GC at night and whatnot? Or would cons/allocation also degrade too noticeably?
+ - Not the speaker: That would cause Emacs to use a lot more total memory
+ - Indeed. Essentially the question is at what point all my daily mostly-textual Emacs usage doesn't come close to using all the available memory on a 32G sys? (but my mind went more to being concerned about new cons/alloca and fragmentation for the intra-day use) I'll have to look into it more before being cogent. One more onto the todo list then :)
+ - A: for increasing thresholds up to RAM limits, do remember that individual GC time will increase - with 32Gb RAM you will likely make individual GC prohibitedly slow sooner than later. I'd say that it only makes sense to increase the thresholds when you have multiple agglomerated GCs. Going beyond this is of little use. (I am thinking about adding some kind of summary statistics command to emacs-gc-stats, so that one can look into GC duration, frequency, init time, and agglomeration and then adjust the settings according to the results)
+
+## Notes
+
+- <https://elpa.gnu.org/packages/emacs-gc-stats.html>
+- Data, presentation, and analysis:
+ <https://dx.doi.org/10.5281/zenodo.10213384>
+- This presentation is a direct continuation of emacs-devel thread:
+- <https://yhetil.org/emacs-devel/20230310110747.4hytasakomvdyf7i@Ergus/>
+ - At some point, Eli asked to collect GC statistics -
+ <https://yhetil.org/emacs-devel/83y1n2n11e.fsf@gnu.org/>
+ - <https://elpa.gnu.org/packages/emacs-gc-stats.html> and my talk
+ summarizing the results are the answer to that request.
+ - Now, we can continue the discussion on emacs-devel with real
+ data at hand :)
+ - I hope to push for a temporary bump of `gc-cons-threshold'
+ during Emacs init and possibly for increasing
+ `gc-cons-percentage'.
+- Came for clear-cut magic bullet answers, left with nuanced analysis - and that, surprise, Eli was overall right? Now what to do with that viral gc init snippet that I've never taken time to measure myself but keep anyway...
+ - A: I do believe that temporarily raising thresholds is ok for init time. that's the only clear-cut conclusion, unortunately
+- Thanks yantar92, both for the detailed investigation and exposition. I've been deferring to much-smarter-than-me Henrik for my default position (Doom has it in it's init), for lack for doing any measurements myself.
+- Thanks for your work on this project. Very thorough.
+- Definitely a huge extra thanks for the tireless Org-mode work yantar92!
+- A: Do not take things Doom does blindly. I am still horrified by let-binding major-mode
+ - Good advice, thanks. I don't personally (more of a vanilla/DIY type myself), but I'd be remiss to leverage Henrik's insights nonetheless :)
+- A: (fun fact: memory-info tries to get memory information on remote system when connected via TRAMP) ... not a problem (anymore; after that very surpising bug report) for emacs-gc-stats
+
+
+[[!inline pages="internal(2023/info/gc-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/gc-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/hn.md b/2023/talks/hn.md
new file mode 100644
index 00000000..4bc7f038
--- /dev/null
+++ b/2023/talks/hn.md
@@ -0,0 +1,36 @@
+[[!meta title="The many ways to browse Hacker News from Emacs"]]
+[[!meta copyright="Copyright &copy; 2023 Mickael Kerjean"]]
+[[!inline pages="internal(2023/info/hn-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# The many ways to browse Hacker News from Emacs
+Mickael Kerjean - <mailto:mickael@kerjean.me>
+
+[[!inline pages="internal(2023/info/hn-before)" raw="yes"]]
+
+There's so many ways one can use Emacs to do something. Want to browse
+around Hacker News?
+
+from the plain standard emacs:
+
+- browser based solutions: M-x xwidget-webkit-browse-url and M-x eww
+- using gnus
+- using eshell
+- using org mode
+
+with some other packages
+
+- nnhackernew
+- hackernews
+- and probably more!
+
+
+
+[[!inline pages="internal(2023/info/hn-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/hn-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/hyperamp.md b/2023/talks/hyperamp.md
new file mode 100644
index 00000000..341743aa
--- /dev/null
+++ b/2023/talks/hyperamp.md
@@ -0,0 +1,121 @@
+[[!meta title="Top 10 ways Hyperbole amps up Emacs"]]
+[[!meta copyright="Copyright &copy; 2023 Robert Weiner"]]
+[[!inline pages="internal(2023/info/hyperamp-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Top 10 ways Hyperbole amps up Emacs
+Robert Weiner - Pronunciation: like fine 'wine' and 'er', <https://gnu.org/s/hyperbole> <https://github.com/rswgnu/hyperbole>, <mailto:rsw@gnu.org>
+
+[[!template id="help"
+volunteer="sachac"
+summary="main talk does not have captions"
+tags="help_with_main_captions"
+message="""This talk does not have captions yet.
+Would you like to help [caption this talk](/captioning)?
+You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt)."""]]
+
+[[!inline pages="internal(2023/info/hyperamp-before)" raw="yes"]]
+
+We will count down the top ten ways that GNU Hyperbole can improve your
+Emacs productivity and experience through:
+
+- its magical ability to turn ordinary text into hypertext
+
+- its legal-style auto-numbered outlining
+
+- its fast, record-based lookups
+
+- and its rapid, programmable ability to control all of your frames and windows.
+
+Hyperbole has no required external package dependencies and is
+compatible with and tested against every major Emacs version from 27
+to the latest master branch and works on every major computer
+operating system and window system in use today, so you can run it
+regardless of your environment.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: Do buttons keep their metadata within the same file? E.g. would I
+ see it if I change to fundamental-mode?
+ - A: Summarizing: if it's an explicit button the metadata is in a
+ different file in the same directory, ".hypb". If it's an
+ implicit button, no, no metadata in the buffer; such buttons
+ have no metadata, Hyperbole creates all of the button properties
+ from the existing text in the buffer.
+- Q: Is it possible to link to a file by its ID (denote, Org ID, or
+ some similar unique string inside)?
+ - A:
+- Q: Re: the frames example: any thoughts or consideration for a
+ transient interface? Or, is this something one could already toggle?
+ - A: Hyperbole predates many of the newer features and packages
+ and Emacs but they integrate as they find them useful for
+ Hyperbole. They think the current minibuffer menu is pretty good
+ and don't have plans to have a transient menu
+- Q: Re: multi-file search functionality. Why not implementing it
+ within the existing framework of M-x grep or similar built-in
+ commands? Yet another search interface sounds a bit redundant.
+ - A:
+ - The point is: why not upstream search interface?
+- Q:
+ - A:
+- Q: Hyperbole's been around for a number of years now.  What
+ inspired you to write it back around the time of its birth?
+ - A: Born before the Web.  The Web was born in the middle of a
+ Hyperbole version's development.  Seemed like an explosion of
+ unstructured information was imminent, e.g. needing to deal with
+ many emails, non-database-structured info.  Needed a general
+ system that could work with other general systems like emails,
+ document production.  Was researching at a university on
+ "Personalized Information Environments" (PIEs).  PIEs was an
+ architecture with managers (like Hyperbole) and point tools that
+ would leverage the managers (e.g. an email reader as a point
+ tool to leverage the hypertext manager).  Wrote a Gmail-like
+ system years before Gmail (also similar to Rmail).  Allowed
+ buttons embedded in Rmail drawn from the subject of the email
+ message.  Rule-based processing was included, etc.
+- Are you familiar with embark package? I think there is some
+ overlapping functionality with Hyperbole. 
+ - A: Yes, recently started using it.  Have talked to oantolin
+ (Omar Antolin Camarena), the author.  Thinks that Embark and
+ Hyperbole are compatible, much like Hyperbole and Org are.  All
+ of these tools can be used together well.
+- Q: Wow. What you are describing now reminds me a lot about HyperCard
+ that I grew up on. Do you know if Hyperbole inspired Bill Atkinson
+ or if you were inspired by HyperCard? Or were there just a lot of
+ thought about hypercontextuality around that time?
+ - A: Bob's research on PIEs was seen by Apple and helped to
+ inspire their work on the Newton, which later also inspired the
+ iPhone, et al.
+- Q: Is it possible to only use one feature of hyperbole without the
+ others (i.e. using only the implicit/explicit buttons without
+ hycontrol, hyrolo...)? (without having to rewrite part of the code
+ in hyperbole) in order to be able to load a smaller hyperbole
+ (hyperbole is now quite large).
+- Q: Is there a link to the video for this talk?  I woke up too late for
+ it! It was done live, so the recording will be added after the
+ conference organizers have time.
+ - Should now be up at <https://emacsconf.org/2023/talks/hyperamp>
+
+- thanks bob i heard about hyperbole long time ago now it is time to revisit with this beautiful presentation
+- nice presentation, bob!
+- no metadata no problemo
+- Q: for anyone who uses hyperbole is there a way to delimit a button like you create text that is shaped like a button but you don't want it to be a button?
+- i'm intersted in hyperbole it's on my todo list of looking into for emacs stuff
+- Great talk thank you bob!
+- thanks for showing hyperbole, always been curious about it. makes me think there's an overlap with ffap, hyperbole and even treesitter in a way
+- i'm going to look into hyperbole for sure now. it's been on my to do list
+- Bob has a long history of doing impressive work :)
+- I didn't know about rsw other packages, look at that <http://ftp.ntua.gr/mirror/python/workshops/1996-06/papers/h.pasanen/oobr4.html>
+
+
+[[!inline pages="internal(2023/info/hyperamp-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/hyperamp-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/hyperdrive.md b/2023/talks/hyperdrive.md
new file mode 100644
index 00000000..9c70a791
--- /dev/null
+++ b/2023/talks/hyperdrive.md
@@ -0,0 +1,194 @@
+[[!meta title="hyperdrive.el: Peer-to-peer filesystem in Emacs"]]
+[[!meta copyright="Copyright &copy; 2023 Joseph Turner and Protesilaos Stavrou"]]
+[[!inline pages="internal(2023/info/hyperdrive-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# hyperdrive.el: Peer-to-peer filesystem in Emacs
+Joseph Turner and Protesilaos Stavrou, <https://ushin.org> xmpp:discuss@conference.ushin.org (XMPP MUC for USHIN discussion), <mailto:joseph@ushin.org>
+
+[[!inline pages="internal(2023/info/hyperdrive-before)" raw="yes"]]
+
+This talk explores [hyperdrive.el](https://ushin.org/hyperdrive/hyperdrive-manual.html), an Emacs interface to [hyperdrive](https://docs.holepunch.to/building-blocks/hyperdrive), a
+peer-to-peer shared filesystem.
+
+Peer-to-peer networks give you the freedom to choose your sources of
+information and to communicate directly with them. Emacs is a
+[freedom-respecting](https://www.gnu.org/philosophy/free-software-even-more-important.html) text editor/operating system that puts you in the
+driver's seat. By bringing these two worlds together, hyperdrive.el
+aims to inspire deliberation about digital communication freedom.
+
+Hyperdrives are peer-to-peer shared folders, well-suited for data that
+changes over time, like personal blogs. It complements Bittorrent and
+IPFS, which work best with unchanging data, like journal archives.
+
+Here's a scenario: Alice creates a new hyperdrive and adds some files.
+Her computer returns a public key URL that uniquely identifies the
+hyperdrive. Alice shares that URL with Bob, who can then download
+Alice's files directly from her computer. No third-party servers are
+required to route the connection.
+
+Data is distributed among peers; once Bob has loaded Alice's files,
+Carol can get them from Bob (or anyone else who has a copy) even when
+Alice is offline. Drives are mutable; when Alice adds/removes/changes
+files in the drive, Bob can refresh her drive on his machine to get
+the latest changes. Drives are versioned; anyone with the URL can
+"check out" prior versions of Alice's drive to see what her files used
+to look like.
+
+Currently supported features in hyperdrive.el include:
+
+- [directly edit hyperdrive files](https://ushin.org/hyperdrive/hyperdrive-manual.html#Write-to-a-hyperdrive)
+- [dired-like directory view](https://ushin.org/hyperdrive/hyperdrive-manual.html#Directory-view)
+- [org-mode link support](https://ushin.org/hyperdrive/hyperdrive-manual.html#Org-mode-links)
+- [version history navigation/diffing](https://ushin.org/hyperdrive/hyperdrive-manual.html#View-the-hyperdrive-version-history)
+- [built-in bookmark.el integration](https://ushin.org/hyperdrive/hyperdrive-manual.html#Bookmark-a-hyperdrive)
+- [local directory mirroring](https://ushin.org/hyperdrive/hyperdrive-manual.html#Mirror-a-whole-directory)
+- [audio/video streaming](https://ushin.org/hyperdrive/hyperdrive-manual.html#Stream-audio-and-video)
+
+Planned features include:
+
+- peer discovery (swarming)
+- diffing directories between versions
+
+Check out [the manual](https://ushin.org/hyperdrive/hyperdrive-manual.html#Installation) for installation instructions!
+
+You're welcome to join our public XMPP chat room!
+
+- xmpp:discuss@conference.ushin.org ([Join anonymously from your browser](https://anonymous.cheogram.com/discuss@conference.ushin.org))
+- #_bifrost_discuss_conference.ushin.org:aria-net.org (Matrix bridge)
+
+Bugs can be submitted to the [ushin issue tracker](https://todo.sr.ht/~ushin/ushin). Patches, comments or
+questions can be submitted to the [ushin public inbox](https://lists.sr.ht/~ushin/ushin).
+
+About the speaker:
+
+I'm Joseph Turner. I enjoy fiddle, Aikido, peer-to-peer networks,
+Emacs, and swimming in cold water. I work with [USHIN](https://ushin.org/), a tiny
+educational US nonprofit whose mission is to promote personal,
+community, and global health through free and open universal shared
+information for everybody. This year, we're focusing on the
+hyperdrive.el project, with the goal of bringing Emacs and
+peer-to-peer together.
+
+I am Protesilaos. Friends call me "Prot" and you are welcome to do the
+same. I have been an Emacs user for ~4 years. I use Emacs full-time for
+practically every aspect of my computing. I am the author and maintainer
+of several packages for Emacs and am enthusiastic about its potential
+for user freedom.
+
+# Discussion
+
+## Questions and answers
+
+- Q: It's not clear how hyperdrive (not hyperdrive.el) works. Do I
+ need to install something on my computer to use it? Can I use it
+ from my phone?
+ - A: Like the emacs transmission client connects with the
+ transmission-daemon, hyperdrive.el connects with the
+ hyper-gateway daemon.
+ - Accessing hyperdrives on mobile:
+ <https://github.com/AgregoreWeb/agregore-mobile>
+- Q: What lessons have you learned while developing hyperdrive.el?
+ - A:  Great support and guidance from talented folks like Adam,
+ Mauve, Jonas, Prot!!
+- Q: I use multiple computers and my partner also would like acess to
+ my notes. so 2 questions. How well would this work with using this
+ to editing my zettelkasten hyperdrive using multiple computers
+ - A: Hyperdrives are single-writer, so you'd be better off
+ linking between drives.  In the future, we plan to add support
+ for <https://github.com/nobiot/org-transclusion> to
+ hyperdrive.el.
+ - Q2: How well would it work if my and my partner worked on the
+ same hyperdrive zettelkasten
+ - A: If you linked between drives, it could work quite well!
+- Q: What would be a good way of getting Hyperdrives if you don't
+ want to install NPM and hava a binary. Could you compile it with
+ deno or the "rust or zig or go?" cli alternative tool? I would
+ prefer to download a single binary.
+ - A: Jonas has been using hyper-gateway installed with a `guix
+ shell` command. Thank you, Jonas!!!
+ - Quick gist:
+ <https://gist.github.com/tarsius/509e9c65c9df1bc243d77cd968d60daa>
+ - Q: <https://github.com/datrs/hypercore> rust hyperdrive?
+ - A: I'm not familiar with this rust port yet.
+- Q: If you had your druthers, what would make your work on
+ hyperdrive.el easier?
+ - A: User feedback!! Please try it out :)
+- Q:  Have you tried putting a git repo in hyperdrive? Does it work
+ well?
+ - A: If you use a bare repository, take care to gc and create pack
+ files before mirroring to the drive, and only publish periodic
+ updates, then that might be okay. (And make sure not to repack
+ old pack files.)
+- Q: Is data transferred between nodes in the clear or encrypted?
+ - A: Encrypted in transit.
+- Q: Is there a searchable catalogue of hyperdrives? 
+ - A: Not yet, but we have plans for a distributed "trust"
+ network that could be used with hyperdrive:
+ <https://git.sr.ht/~ushin/trust.el>
+- Q: Any plans for FUSE or posix semantics?
+ - A: Not yet. There was
+ <https://github.com/andrewosh/hyperdrive-fuse> , but it's not
+ maintained currently.
+- Q: Any plans for a TRAMP interface?
+ - A: Good idea!  A TRAMP interface may make it easier to offer
+ live hyperdrive filename completions.
+- Q: How does this comprare to syncthing?
+ - A: Syncthing is useful for sharing files among a small group of
+ trusted peers, like an F2F network
+ (<<https://en.wikipedia.org/wiki/Friend-to-friend>>). 
+ Hyperdrives are useful for publicly sharing a set of files which
+ you can updated going forward and which others can link to.
+- Q: If you edit a file on the hyperdrive, then edit the same file on
+ the local mirror. How is the conflict handled when you sync the
+ mirror again?
+ - A: If I understand correctly, you're asking about what happens
+ when you write to the same hyperdrive from multiple machines.
+ The short answer is, "Please don't do that." However, it
+ appears that the Holepunch team is making progress on
+ <https://docs.holepunch.to/building-blocks/autobase> for
+ "autohmatically rebasing" hyperdrive history, effectively
+ allowing for multi-writer hyperdrives.
+- Q: wouldn't user be able to collaborate asynchronously by viewing diffs on a serially "shared" file, in other words, a user would copy another peer's text file, edit and upload their changes, share the link to their updated file so that then others can see diffs and in that way co-create an evolving file?
+ - A: You could try this. Another idea that we have in the works is integration with <https://github.com/nobiot/org-transclusion>
+
+## Notes
+
+- damn, I never even knew about dired-jump (C-x C-j).  Main
+ differences with (C-x d) from the file are one fewer keystroke and
+ having the point on the file you came from.
+- Btw, hyperdrive looks like another one of those things that would be amazing if I collaborated with anyone using emacs
+- Also incidentally hyperdrive is amazing
+- I installed hyperdrive.el and tried to run it and immediately got: transient-setup: Symbol’s function definition is void: transient-prefix-object
+ - Need to upgrade transient.el
+ - Gah, you are right. I had an obsolete version just hanging out causing pain.
+ - Okay, I got hyperdrive.el working and it was super easy. hyper://fwsn55wnznts5mpkee16j89ja38nfz6zne4wijzap1z9ka4jsxio/Dird_a333f1_4884540.jpg
+- I think hyperdrive is a pretty easy way to share files. Easier than Dropbox. But maybe for delivery? I'm not sure.
+ - A: What do you mean by "delivery"?
+ - I was thinking of asset delivery. I write professionally, so I have things like PDFs and other documents to deliver. Sometimes I have big files to deliver to clients. Using something like hyperdrive would be cooler than Dropbox. ... Hmmmm, is there a hyperdrive web gateway?
+ - A: A good non-Emacs option is <https://github.com/AgregoreWeb/agregore-browser> Agregore is Chromium with built-in support for more protocols besides HTTP, like Hyperdrive, Bittorrent, IPFS, Gemini, and Gun. <https://github.com/RangerMauve/hyper-gateway> , the program that hyperdrive.el connects to as a client is, I think, exactly what you asking about. I don't know of a public HTTP gateway, but you could easily run hyper-gateway on a VPS.
+ - That would be fun. Then I could control the domain name so it would look cool and professional and like I was extra high-tech.
+ - A: hyper-gateway lets you serve multiple drives at various subdomains. For example, you could serve your primary drive at <https://reverik.tld>, and then folks could access, e.g., the USHIN drive at <https://aaj45d88g4eenu76rpmwzjiabsof1w8u6fufq6oogyhjk1ubygxy.reverik.tld>
+
+
+- Great work, everyone. Thank you.
+- Prot's presentations are so clear. Perfectly model pedagogy.
+- Just like his code: his .el buffers SQUEAK as you C-v through them.
+- Prot is indeed a model of paying attention to detail.
+- I have learned so much from his videos, and from his code.
+- Prot switching from vim/etc to Emacs seems to correspond to an inflexion point in the current Emacs renaissance does it not? Coincidence, or... I wonder what way the causal arrow goes :)
+ - I think the current "Emacs renaissance" probably dates back to around the time that package.el was developed and then when MELPA came online. momentum seems to have been building since then
+ - We must also consider Org-mode's inception as a key moment in recent Emacs history
+- My Emacs environment would be much poorer without Prot's contributions, that's for sure.
+- My hypothesis is that Diogenes himself made his way to Cyprus and spent the past immortal couple thousand years as a mountain hermit waiting to return to mortal life when the Emacs community needed him. Humor aside, there are a few key personalities---many of them here this weekend---who have been disproportionately catalytic to the community recently. Prot is certainly one. Thanks to all of you!
+
+
+
+[[!inline pages="internal(2023/info/hyperdrive-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/hyperdrive-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/koutline.md b/2023/talks/koutline.md
new file mode 100644
index 00000000..5091b4dc
--- /dev/null
+++ b/2023/talks/koutline.md
@@ -0,0 +1,70 @@
+[[!meta title="Using Koutline for stream of thought journaling"]]
+[[!meta copyright="Copyright &copy; 2023 Matthew Jorgensen (PlasmaStrike)"]]
+[[!inline pages="internal(2023/info/koutline-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Using Koutline for stream of thought journaling
+Matthew Jorgensen (PlasmaStrike) - <mailto:plasmastrike@voiddragon.me>
+
+[[!template id="help"
+summary="main talk does not have captions"
+tags="help_with_main_captions"
+message="""This talk does not have captions yet.
+Would you like to help [caption this talk](/captioning)?
+You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt)."""]]
+
+[[!inline pages="internal(2023/info/koutline-before)" raw="yes"]]
+
+I will talk about a nice journaling workflow I have developed using the
+Koutline, from the hyperbole package. I will showcase this workflow and
+describe what I like about Koutline and why I use it over other options
+like Org Mode and plain text.
+
+About the speaker:
+
+I have used Emacs for 10+ years and enjoyed some of the last
+EmacsConfs. To share back, I have decide to share a unique workflow I
+have developed, as well as challenging myself by learning how to make
+videos to learn some new skills along the way.
+
+# Discussion
+
+## Questions and answers
+
+- Q: extremely interesting point about loss of concentration, i think
+ with tools like that people who really work alot with text in an
+ abstract matter could have enormous benefits doing it without being
+ hypnotized by all the options, i have to rewatch the presentation
+ again to see nuances, i also would like to see it written somewhere
+ in a short conciese even maybe stream of conciousness mode. my
+ question is i hope you don't plan to stop the development of this
+ wonderful idea, thank you
+ - A: A lot of people think tools like this and emacs vim are all
+ about speed, However it is more about staying in flow state can
+ change the types of thoughts you get. That is the bigger part to
+ me.
+- Q:Do you tend to create outline structure while journalling, or
+ after you have captured thoughts? Do you change the structure a lot
+ while capturing it?
+ - A: Whatever feels good at the time, Saying my day went good for
+ reasons 1,2,3 is a natural ways of sharding my thoughts that
+ maps well into outlins. Plus editing them later is always an
+ option
+ - The easy keybings for child, same level and parent cell
+ makes it efficient enough for live journaling
+
+## Notes
+
+- Koutline file used in talk
+ <https://mega.nz/file/uQ9UTSiD#vy5ZnB-Xnea_C2l_LcgUSKOtvHoTrobSrjBcnbD4Xa0>
+- nice job plasmastrike
+
+
+[[!inline pages="internal(2023/info/koutline-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/koutline-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/llm.md b/2023/talks/llm.md
new file mode 100644
index 00000000..64966f28
--- /dev/null
+++ b/2023/talks/llm.md
@@ -0,0 +1,118 @@
+[[!meta title="LLM clients in Emacs, functionality and standardization"]]
+[[!meta copyright="Copyright &copy; 2023 Andrew Hyatt"]]
+[[!inline pages="internal(2023/info/llm-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# LLM clients in Emacs, functionality and standardization
+Andrew Hyatt (he/him) - <ahyatt@gmail.com> - <https://urbanists.social/@ahyatt> - <http://github.com/ahyatt>
+
+[[!inline pages="internal(2023/info/llm-before)" raw="yes"]]
+
+As an already powerful way to handle a variety of textual tasks, Emacs
+seems unique well poised to take advantage of Large Language Models
+(LLMs). We'll go over what LLMs are and are used for, followed by listing
+the significant LLM client packages already for Emacs. That functionality
+that these packages provide can be broken down into the basic features that
+are provided through these packages. However, each package currently is
+managing things in an uncoordinated way. Each might support different LLM
+providers, or perhaps local LLMs. Those LLMs support different
+functionality. Some packages directly connect to the LLM APIs, others use
+popular non-Emacs packages for doing so. The LLMs themselves are evolving
+rapidly. There is both a need to have some standardization so users don't
+have to configure their API keys or other setup independently for each
+package, but also a risk that any standardization will be premature. We
+show what has been done in the area of standardization so far, and what
+should happen in the future.
+
+About the speaker:
+
+Andrew Hyatt has contributed the Emacs websocket package, the triples
+(making a triple-based DB library) and the ekg package (a tag-based
+note-taking application). He has been using various other LLM
+integrations, and ss part of extending ekg, he's been working on his own.
+# Discussion
+
+## Questions and answers
+
+- Q: What is your use case for Embedding? Mainly for searching? 
+ - A:
+ - I got you. It's kinda expand our memory capcity. 
+- Q: What do you think about "Embed Emacs manual" VS "GPTs  Emacs
+ manual?
+ - A: 
+ - yes GPTS actually how it's kind of embedding your document
+ into its memory and then using the logic that provided by
+ GPT-4 or other versions. I never tried that one but I'm
+ just wondering if you have ever tried the difference
+- Q: When deferring commit messages to an LLM, what (if anything) do
+ you find you have lost?
+ - A:
+- Q: Can you share your font settings in your emacs config? :) (Yeah,
+ those are some nice fonts for reading)
+ - A: I think it was Menlo, but I've sinced changed it (I'm
+ experimenting with Monaspace
+- Q: In terms of standardisation, do you see a need for a
+ medium-to-large scale effort needed?
+ - A:
+ - I mean, as a user case, the interface is quite simple
+ because we're just providing an API to a server. I'm not
+ sure what standardization we are really looking at. I mean,
+ it's more like the how we use those callback from the llm.
+- Q: What are your thoughts on the carbon footprint of LLM useage?
+ - A:
+- Q: LLMs are slow in responding. Do you think Emacs should provide
+ more async primitives to keep it responsive? E.g. url-retrieve is
+ quite bad at building API clients with it.
+ - A:
+ - Gptel.el is async. And very good at tracking the point. 
+- Q: Speaking of which, anyone trained/fined-tuned/prompted a model
+ with their Org data yet and applied it to interesting use cases
+ (planning/scheduling, etc) and care to comment?
+ - A:
+ - I use GPTS doing weekly review. I'm not purely rely on it.
+ It's help me to find something I never thought about and I
+ just using as alternateive way to do the reviewing.  I find
+ it's kind of interesting to do so.
+
+### Notes and discussion
+
+- gptel is another package doing a good job is flexible configuration and choice over LLM/API
+- I came across this adapter to run multiple LLM's, apache 2.0 license too! https://github.com/predibase/lorax
+- It will turn out the escape-hatch for AGI will be someone's integration of LLMs into their Emacs and enabling M-x control.
+- i don't know what question to ask but i found presentation extremely useful thank you
+- I think we are close to getting semantic search down for our own files
+ - yeah, khoj uses embeddings to search Org, I think
+ - I tried it a couple of times, latest about a month ago. The search was quite bad unfortunately
+ - did you try the GPT version or just the PyTorch version?
+ - just the local ones. For GPT I used a couple of other packages to embed in OpenAI APIs. But I am too shy to send all my notes :D
+ - Same for me. But I really suspect that GPT will be way better. They now also support LLama, which is hopeful
+ - I keep meaning to revisit the idea of the Remembrance Agent and see if it can be updated for these times (and maybe local HuggingFace embeddings)
+- I think Andrew is right that Emacs is uniquely positioned, being a unified integrated interface with good universal abstractions (buffers, text manipulation, etc), and across all uses cases and notably one's Org data. Should be interesting...!
+- Speaking of which, anyone trained/fined-tuned/prompted a model with their Org data yet and applied it to interesting use cases (planning/scheduling, etc) and care to comment?
+- The ubiquitous integration of LLMs (multi-modal) for anything and everything in/across Emacs and Org is both 1) exciting, 2) scary.
+- I could definitely use semantic search across all of my stored notes. Can't remember what words I used to capture things.
+- Indeed. A "working group" / "birds of a feather" type of thing around the potential usages and integration of LLMs and other models into Emacs and Org-mode would be interesting, especially as this is what pulls people into other platforms these days.
+- To that end, Andrew is right that we'll want to abstract it into the right abstractions and interfaces. And not just LLMs by vendor/models, but what comes after LLMs/GPTs in terms of approach.
+- I lean toward thinking that LLMs may have some value but to me a potentially wrong result is worse than no result
+ - I think it would depend on the use case. A quasi-instant first approximation that can readily be fixed/tweaked can be quite useful in some contexts.
+- not to mention the "summarization" use cases (for papers, and even across papers I've found, like a summarization across abstracts/contents of a multiplicity of papers and publications around a topic or in a field - weeks of grunt work saved, not to mention of procrastination avoided)
+ - IMHO summarization is exactly where LLMs can't be useful because they can't be trusted to be accurate
+- <https://dindi.garjola.net/ai-assistants.html>; A friend wrote this <https://www.jordiinglada.net/sblog/llm.html>; < https://blogs.microsoft.com/on-the-issues/2023/09/07/copilot-copyright-commitment-ai-legal-concerns/>
+- I have a feeling this is one of the 'em "if you can't beat them join them" scenario. I don't see that ending with a bit global rollback due to such issues anytime soon...
+- (discussion about LLMs, copyright, privacy)
+- I spent more time than I was hoping to setting up some custom Marginalia(s?) the other day, notably for cases where the "category" is dynamic, the annotation/affixation function varies, the candidates are an alist of key-value pairs and not just directly the value, and many little specificities like that. Idem for org-ql many moons back, org-agenda, etc. That sort of workflow always involves the same things: learning/reading, examples, trials, etc. I wonder if LLMs could be integrated at various points in that recurring exercise, to take just a sample case.
+- that's yet another great use case for LLMs : externalizing one's thinking for its own sake, if only to hear back the echo of one's "voice", and do so with an infinitely patient quasi-omniscient second party.
+ - oooh, might be a good one for blog post writing: generate some follow-up questions people might have
+ - Yeah, a "rubber duck" LLM could be very handy
+ - I'm sure there would be great demand for such a thing, to dry-run one's presentations (video or text) and generate anticipate questions and so on. Great take.
+ - I've seen some journaling prompts along those lines. I think it'll get even more interesting as the text-to-speech and speech-to-text parts get better. Considering how much people bonded with Eliza, might be interesting to see what people can do with a Socratic assistant...
+
+
+[[!inline pages="internal(2023/info/llm-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/llm-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/lspocaml.md b/2023/talks/lspocaml.md
new file mode 100644
index 00000000..7646c7b5
--- /dev/null
+++ b/2023/talks/lspocaml.md
@@ -0,0 +1,50 @@
+[[!meta title="Writing a Language Server In OCaml for Emacs, fun, and profit"]]
+[[!meta copyright="Copyright &copy; 2023 Austin Theriault"]]
+[[!inline pages="internal(2023/info/lspocaml-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Writing a Language Server In OCaml for Emacs, fun, and profit
+Austin Theriault (he/they) - last name prounounced tare -e -o, <mailto:austin@cutedogs.org>
+
+[[!inline pages="internal(2023/info/lspocaml-before)" raw="yes"]]
+
+Recently, while working at Semgrep, Inc. I wrote a language server for our
+SAST tool in OCaml:
+<https://github.com/returntocorp/semgrep/tree/develop/src/language_server>. I
+then added support for it to emacs
+<https://github.com/emacs-lsp/lsp-mode/blob/master/clients/lsp-semgrep.el>.
+In this talk I plan to go over what LSP is, why it's important, getting
+started writing a language server, and supporting a language server in
+Emacs.
+
+About the speaker:
+
+Austin Theriault is a software engineer at Semgrep, Inc. working on
+their SAST tool Semgrep. In this talk he will cover the Language
+Server Protocol, a way to provide language features to an editor, why
+it's important to the future of editors, and how someone might go
+about writing a server, and how to integrate it with Emacs.
+# Discussion
+
+## Questions and answers
+
+- Q:Why not write the LSP server in OCaml? I missed the reasoning to
+ switch to Rust/etc - performance?
+ - A: The "stack" (cross-compilation, libraries, etc.) being less
+ developed than for developing LSP servers in, e.g., TypeScript
+- Q: What are the corner cases, limitations, and other issues you
+ encountered in implementing an LSP server with client in Emacs, that
+ were surprising?
+ - A: Multiple, but performance being the big one. Caching
+ implementation. And then delivery/distribution (doing so
+ cross-platform given the OCaml tooling, etc.)
+
+
+[[!inline pages="internal(2023/info/lspocaml-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/lspocaml-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/matplotllm.md b/2023/talks/matplotllm.md
new file mode 100644
index 00000000..4117374b
--- /dev/null
+++ b/2023/talks/matplotllm.md
@@ -0,0 +1,73 @@
+[[!meta title="MatplotLLM, iterative natural language data visualization in org-babel"]]
+[[!meta copyright="Copyright &copy; 2023 Abhinav Tushar"]]
+[[!inline pages="internal(2023/info/matplotllm-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# MatplotLLM, iterative natural language data visualization in org-babel
+Abhinav Tushar (he/him) - abhinav@lepisma.xyz, https://lepisma.xyz, @lepisma@mathstodon.xyz, <mailto:abhinav@lepisma.xyz>
+
+[[!inline pages="internal(2023/info/matplotllm-before)" raw="yes"]]
+
+Large Language Models (LLMs) have improved in capabilities to an extent
+where a lot of manual workflows can be automated by just providing
+natural language instructions.
+
+On such manual work is to create custom visualizations. I have found the
+process to be really tedious if you want to make something non-standard
+with common tools like matplotlib or d3. These frameworks provide low
+level abstractions that you can then use to make your own
+visualizations.
+
+Earlier to make a new custom visualization, I would open two windows in
+Emacs, one for code, other for the generated image. In this talk, I will
+show how a powerful LLM could lead to a much more natural interface
+where I only need to work with text instructions and feedback on the
+currently generated plot. The system isn't perfect, but it shows us how
+the future or such work could look like.
+
+The package is called MatplotLLM and lives here
+<https://github.com/lepisma/matplotllm>
+
+About the speaker:
+
+I am a Programmer and Machine Learning Engineer who has been in love
+with Emacs' extendability from the moment I pressed M-x. Since then, I
+have been doing as many things inside Emacs as I can. In this talk, I
+will cover a recent attempt at automating one of my workflows inside
+Emacs.
+
+# Discussion
+
+## Questions and answers
+
+- Q: What is the license of <https://github.com/lepisma/matplotllm>
+ project ? Sjo
+ - A: GPLv3 or later. Sorry, I didn't put this in the repository,
+ You can refer to
+ <https://github.com/lepisma/matplotllm/blob/main/matplotllm.el#L18C12-L29>
+ though.
+- Q: Sometimes LLMs hallucinate. Can we trust the graph that it
+ produces?
+ - A: Not always, but the chances of hallucinations impacting
+ 'generated code' that causes a harmful but not identifiable
+ hallucinations are a little lower. Usually hallucination in code
+ show up as very visible bug so you can always do a retry. But I
+ haven't done a thorough analysis here yet.
+- Q: What are your thoughts on the carbon footprint of LLM useage?
+ - (not the speaker): to add a bit more to power usage of LLMs, it is not inherent that the models must take many megawatts to train and run. work is happening and seems promising to decrease power usage
+## Notes
+
+- Repository link <https://github.com/lepisma/matplotllm> . A
+ connected blog post here
+ <https://lepisma.xyz/2023/08/20/matplotllm:-an-llm-assisted-data-visualization-framework/index.html>
+
+
+
+[[!inline pages="internal(2023/info/matplotllm-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/matplotllm-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/mentor.md b/2023/talks/mentor.md
new file mode 100644
index 00000000..21b53045
--- /dev/null
+++ b/2023/talks/mentor.md
@@ -0,0 +1,144 @@
+[[!meta title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)"]]
+[[!meta copyright="Copyright &copy; 2023 Jeremy Friesen"]]
+[[!inline pages="internal(2023/info/mentor-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)
+Jeremy Friesen (he/him) - Pronunciation: JERR-im-EE FREE-SEHN, https://takeonrules.com, <mailto:jeremy@jeremyfriesen.com>
+
+[[!inline pages="internal(2023/info/mentor-before)" raw="yes"]]
+
+[[!template id="help"
+volunteer=""
+summary="Q&A could be indexed with chapter markers"
+tags="help_with_chapter_markers"
+message="""The Q&A session for this talk does not have chapter markers yet.
+Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="mentor-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]]
+
+<https://takeonrules.com/2023/12/03/mentoring-vs-coders-as-an-emacsian/>
+
+Join me as I share some anecdotes and approaches for mentoring other
+developers who use tools different from mine; all in service of
+furthering a shared understanding, sharpening my own toolkit, and
+hopefully helping others grow their capabilities.
+
+Most everyone I mentor has chosen VS Code as their editor; yet I don’t
+use VS Code. Our pairing and mentoring sessions are about me being
+curious about their habits and modes of operation. I use my journeyman
+knowledge of what Emacs can do to help these VS Coders navigate
+pathways towards sharpening their skills. I also learn a few editor
+tricks from them.
+
+I’ll talk about remote pairing sessions, one-on-one sessions, and
+larger show-and-tell efforts; each with the purpose of revealing
+potentially different approaches. The idea being that asking questions
+and showing alternate approaches can begin to illuminate previously
+unknown pathways.
+
+The underlying goal is to ignite in folks a desire to improve their
+understanding and usage of their preferred tools; and show
+alternatives that might peek further interest in learning and
+exploration.
+
+About the speaker:
+
+Jeremy Friesen is a long-time software developer but only recently an
+Emacs convert (as of May 2020). For most of his career he has been
+writing open source software for educational institutions such as
+universities, libraries, archives, and museums. He’s mentored several
+dozen developers at his places of employment as well as through
+volunteer efforts. He strives to meet people where they are, learn how
+they are looking to grow, then working with them to grow; often by
+nudging folks to practice and explore their tools.
+# Discussion
+
+## Questions and answers
+
+- Q: re: super-. -- which key do you bind to super? then where is
+ meta?
+ - A:mac: ctrl-meta-super---space---hyper-meta-ctrl (caps lock
+ as ctrl)
+- Q:Great talk; what's the package you use to make the Org slide?
+ - A: prot's logos, olivetti mode?  I have a minor mode that I
+ turned on: 
+ <https://github.com/jeremyf/dotemacs/blob/2c5d37c2d0cc3f0433bc4588352bd6bf5bd09460/emacs.d/jf-framing.el#L109-L123>
+- Q: If people do get interested in picking up Emacs because of what
+ they see you do, how do you recommend they get into it? 
+ - A: A lot of it comes down to the problems that they're trying
+ to solve. I worked in TextMate for a long time, then Sublime,
+ then Atom... I chose Spacemacs, and then I chose Doom, and then
+ I said, wait, start over, erase everything, start with the
+ tutorial. I said, I really want this functionality. Then I went
+ and figured out how to do it. Helping ask them, "What do you
+ really want to do?" Ex: okay to advise people to go back to
+ vim, develop ownership of their editor. **Understand the
+ problems they're experiencing,** which tends to be what we
+ should do in software development. Take the time to walk with
+ them on their journey to understand what's frustrating them.
+ Story about a mentee learning to ask questions earlier (not
+ focused on navigating editor).
+- Q: I've been using Emacs for about 30 years and I find it really
+ difficult to figure out how to help people get started with it. Uh
+ ... so I guess my question is the same as the green question right
+ above this.
+ - A: My wife a while ago talked about the idea of being in between
+ someone who's more informed and someone who's less informed.
+ Introducing someone who's new to Emacs might be too hard
+ because you're too much an expert. Pedagogy. Sharing what you
+ have where you're at will by nature move the entire queue of
+ people behind you, will help move them together forward. Not an
+ only one person thing, improving shared understanding.
+ - Zone of proximal development; just i + 1 - Lev Vygotsky
+ - It can be very challenging to unwind things. Muscle memory.
+ I know how to do it on a keyboard... We've internalized so
+ much. Being curious with them and close to them, trying to
+ diffuse questions and not ask overly leading questions... 
+ - What is the question that I can ask the group so that I can
+ ask the question? ex: not "Why do we suck at sharing
+ code?", but before that
+ - I'm also 30 years in (at least) and just recently picked up
+ JF's method of only giving away a little bit of the
+ functionality of emacs at a time.
+- Q:Have you encountered anyone that are being... "nagative" about
+ the fact that you're using Emacs? (Assuming that they just don't
+ know/have misconceptions about Emacs and nothing malicious.) If so,
+ how do you handle these kinds of people?
+ - A: Analogy with a pen: my goal is to write something, who cares
+ about what kind of pen I use?
+ - I want my text editor to flow with me.
+ - I don't need it to multi-thread-- it's just me on the
+ computer.
+ - "My goal is to be better at computering."
+- Q: I love the attitudes and worldview that infuses your blog posts
+ and your talks this weekend. Learn something every week: it's
+ CUMULATIVE. English class was the most important. What other advice
+ do you have, and how is it generalizable to those of us who are not
+ devs?
+ - A: fountain-mode (package for writing screenplays)
+ - Wonderful answers! Thanks so much!
+ - Broad curiosity (ex: background is liberal arts, very little
+ computer science classwork/theory; Lord of the Rings, poetry,
+ etc.)
+
+## Notes
+
+- Presenter blogs at <https://takeonrules.com>
+- such valuable work being described
+- I wonder if there is still reasons to use ag compared to ripgrep
+ - it can search compressed archives better, so I like using it on emacs sources
+ - <https://github.com/aswild/the_silver_searcher/commit/7b571a8a94d0e22a06e3313cb0d9672b416fb2c1>
+ - yeah indeed, ripgrep shells out and is five times slower than ag
+- Hyper modifier is tops. On normie keyboards, I like super, meta, space, meta, hyper. 100% do not regret switching to a split ergo mechanical QMK board.
+ - On my work Mac, caps is control, I don't have a super, and it's meta-space-meta-hyper. But I almost never use that, because the keyboard is deeply unpleasant to actually type on. The sole thing I like better about Emacs on macOS over Emacs on Linux is that it's a oneliner to set the Hyper modifier. Linux requires delving deep into the forbidden territory of xkb. <https://codeberg.org/ieure/xkbsucks> if you need a guide
+ - my mac setup is the same as him but reversed: command is control, option is meta (like him) and control is super cuz i use super all the time. and hyper, like him, is on the right of the keyboard.
+- (discussion about fountain pens)
+
+
+[[!inline pages="internal(2023/info/mentor-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/mentor-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/multi.md b/2023/talks/multi.md
new file mode 100644
index 00000000..63c41965
--- /dev/null
+++ b/2023/talks/multi.md
@@ -0,0 +1,29 @@
+[[!meta title="Emacs for the Indecisive/Multi-Talented"]]
+[[!meta copyright="Copyright &copy; 2023 Noah"]]
+[[!inline pages="internal(2023/info/multi-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs for the Indecisive/Multi-Talented
+Noah (she/they)
+
+[[!inline pages="internal(2023/info/multi-before)" raw="yes"]]
+
+To the average person (or even programmer), Emacs seems like either just
+another basic text-editor, or this huge "bloated" piece of software, but
+behind peoples (rather wack) perception on Emacs, holds potential and power
+for EVERYONE, not just programmers. My talk discusses how I use GNU Emacs
+for my programming, school tasks and notes, lyric organization, team
+management, zine writing and formatting, and more! I will also discuss how
+Emacs is useful to non-programmers, how other people can use it/get into
+it, and practical uses for Emacs outside of programming.
+
+
+
+[[!inline pages="internal(2023/info/multi-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/multi-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/nabokov.md b/2023/talks/nabokov.md
new file mode 100644
index 00000000..b5b346fc
--- /dev/null
+++ b/2023/talks/nabokov.md
@@ -0,0 +1,125 @@
+[[!meta title="Why Nabokov would use Org-Mode if he were writing today"]]
+[[!meta copyright="Copyright &copy; 2023 Edmund Jorgensen"]]
+[[!inline pages="internal(2023/info/nabokov-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Why Nabokov would use Org-Mode if he were writing today
+Edmund Jorgensen (he/him) - <https://tomheon.com>, <mailto:ewj@inkwellandoften.com>
+
+[[!inline pages="internal(2023/info/nabokov-before)" raw="yes"]]
+
+I've written several novels in Emacs. One of them grew into a monster with a
+baker's dozen twisty, interconnected subplots.
+
+When I started to revise that novel, I had to use an outline to keep all the
+subplots straight, but I found it nearly impossible to keep that external
+outline consistent with the prose.
+
+Finally I landed on a workflow using org-mode to keep the outline and the
+prose together, which significantly reduced the burden of keeping the two
+consistent as I moved and modified sections. I also found a way to use tags
+and sparse views over them to enable quick read-throughs of subsets of the
+book for continuity checks (which I plan to demo).
+
+Later--long after finishing the book--I realized this process was essentially
+the Emacs update to the writing process that Nabokov used: he wrote on index
+cards that served as both prose and outline, so that he could move them around
+(which he did incessantly).
+
+There's something deeply beautiful about org-mode's refusal to treat structure
+and prose as different things in a piece of writing--something I think Nabokov
+would have appreciated, and something I definitely appreciate, because it
+saved my novel.
+
+About the speaker:
+
+I'm Edmund Jorgensen, a software engineer by day and a writer by night, using
+Emacs for both. When one of my novels threatened to collapse under the weight
+of its own subplots, org-mode's powerful blending of structure and prose
+rescued it. I'd like to show you how that worked, and how much of org-mode's
+power for writing comes from its similarity to Nabokov's famous
+index-card-based writing process.
+# Discussion
+
+## Notes
+
+- It looks like the Zettelkasten slipbox for nabokov
+- James Howell also like the idea using small slide to convey single
+ idea to the reader. In emacs, we have `narrow` function. Yes! I
+ use various narrow functions to present text with Emacs. (I use
+ narrow a bunch when editing, it really helps focus on a chapter or
+ scene)
+ - The funny thing about narrow functions, I mean the first time I
+ saw it in the manual, there is a warning to the new user.  That
+ would be afraid of this kind of functionality, and you have to
+ be careful, haha...
+ - I saw that warning too and avoided narrow for a long time as a
+ result!  But it's not really that bad...
+ - Exactly, I use narrow a lot, you know, every time I'm
+ working on any single type of writing or writing a code or
+ writing a piece of manuscript. It's really helped me to
+ narrow down my attention and to kind of release any other
+ thoughts that is not directly connected to the current
+ things I'm working on. And that really is an underestimated
+ functionality for the Emacs.
+- The most valuable thing that Org will bring to the writer is the
+ structure, how we can navigate between different structures of
+ thoughts.
+- The idea is using tag to narrow down a single person's timeline in
+ the whole context of stories. It's something very interesting.
+- ewj.io/emacs
+- 👏 I'll start writing my masterpiece tomorrow!
+- I need to use tags more, org-sparse-tree is handy
+
+
+## Questions and answers
+
+- Q: Does the index really matter here? I mean, his colleague is also
+ using some A4 paper, and do you think that the index card is the
+ most important thing here?
+ - A:
+ - portbablity win!
+- Q:How do you export the second level headings (scenes in this
+ example) without the heading itself, just the content? 
+ - A:3 ways for this: ox-ignore (it was visually annoying), dumb
+ awk script, pandoc filters in lua
+ - I would say the org-transclusion works very well for this
+ kind of demand.
+- Q: Slightly offtopic: where can we see your novels?
+ - A: there are on Amazon: two of them, and a book of short-stories
+ - Links:<https://www.amazon.com/World-Enough-Time-Edmund-Jorgensen/dp/0984749233>
+ - <https://www.amazon.com/Other-Copenhagens-Stories-Edmund-Jorgensen-ebook/dp/B00O4OQCBE>
+- Q: Have you looked at the Denote Signature features. The
+ hierarchical nature of luhman IDs and index cards work well with
+ Denote Signatures
+ - A:I haven't, but I will take a look!
+ - <https://protesilaos.com/emacs/denote#h:f9204f1f-fcee-49b1-8081-16a08a338099>
+ - The part that I like with signatures is they can be optional
+ with your zettelkasten as another way to use it.
+- Q: Do you have a workflow combining hand-written index cards and org
+ mode?
+ - A:
+ - Maybe just take a picture and OCR for your small index
+ cards, but at the end of the day you always have to go back
+ to your main Org files.
+ - Ooh, I have a workflow for using Google's OCR to grab
+ the text from my sketches (esp. the ID) so that I can
+ link to my sketches in Org with ID and completion -
+ sachac
+ - haha, nice to see different approach, I personally
+ didn't do that because I still most of my work is
+ on the computer so yeah in the future if i have lots
+ of handwriting notes in my working I will reconsider
+ Google solution
+- Q:
+ - A:
+
+
+[[!inline pages="internal(2023/info/nabokov-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/nabokov-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/one.md b/2023/talks/one.md
new file mode 100644
index 00000000..d41f0acf
--- /dev/null
+++ b/2023/talks/one.md
@@ -0,0 +1,173 @@
+[[!meta title="one.el: the static site generator for Emacs Lisp Programmers"]]
+[[!meta copyright="Copyright &copy; 2023 Tony Aldon"]]
+[[!inline pages="internal(2023/info/one-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# one.el: the static site generator for Emacs Lisp Programmers
+Tony Aldon - <mailto:tony@tonyaldon.com>
+
+[[!inline pages="internal(2023/info/one-before)" raw="yes"]]
+
+Have you ever wanted to write a blog:
+
+- contained in a unique org file,
+- rendered with only one Emacs command,
+- that can be modified by writing Emacs Lisp code (and CSS too),
+- with "html templates" that are plain Emacs Lisp data,
+- with no config file,
+- and no dependencies on external static site generators?
+
+If so, you might be interested in one.el package.
+
+In this talk, we'll look at how to get started with one.el and write a
+a simple blog as an example.
+
+What kind of static sites can be produced with one.el? I don't know
+but you can get an idea by checking those 3 websites built with
+one.el:
+
+- <https://lnroom.live>
+- <https://tonyaldon.com>
+- <https://posts.tonyaldon.com>
+
+Below you can see the basics of a one.el website.
+
+In one.el, the following org file/buffer defines a website with 2
+pages that we build by calling `one-build` command while we are visiting
+it:
+
+ *** My website
+ :PROPERTIES:
+ :ONE: one-default-home
+ :CUSTOM_ID: /
+ :END:
+
+ Welcome to my website!
+
+ *** Blog post 1
+ :PROPERTIES:
+ :ONE: one-default
+ :CUSTOM_ID: /blog/page-1/
+ :END:
+
+ My first blog post!
+
+ The path ~/~ in the first ~CUSTOM_ID~ org property tells ~one.el~ that the
+ page "My website" is the home page. That page is rendered using
+ ~one-default-home~ render function, value of ~ONE~ org property of the
+ same headline.
+
+ The path ~/blog/page-1/~ in the second ~CUSTOM_ID~ org property tells
+ ~one.el~ that we want to render "Blog post 1" page in such a way
+ that when we serve our website locally at ~http://localhost:3000~ for
+ instance, that page is served at ~http://localhost:3000/blog/page-1/~.
+ How that page is rendered is determined by the value of ~ONE~ org
+ property of the same headline which is ~one-default~, a render
+ function.
+
+ As you might have noticed, a ~one.el~ website is an org file where the
+ pages are the headlines of level 1 with the org properties ~ONE~ and
+ ~CUSTOM_ID~ set. Nothing more!
+
+ ~ONE~ is the only org property added by ~one.el~. Its value (an Elisp
+ function which returns an HTML string) for a given page determines how
+ ~one.el~ renders that page.
+
+ The paths of pages are set using ~CUSTOM_ID~ org property.
+
+ That's it!
+
+ note: I wanted to have a blog written in org-mode that I can modify
+ only by evaluating some Emacs Lisp code. This is how one.el got
+ started. Down that path I found that the Org parser and exporter do an
+ amazing job, in fact 95 percent of the heavy work in one.el. I just
+ had to find a way to pass org data to render functions and write an
+ Emacs Lisp html generator package to be used by those render
+ functions. I'm having a good user experience so far and I hope its
+ design will fit your workflow.
+
+
+# Discussion
+
+## Notes
+
+- Also provides a demo of Jack package
+ (<https://github.com/tonyaldon/jack/>)
+- Custom function for rendering by interogating the page-tree
+ - Of use: grabbing metadata from the document/node
+- Easy menu and tab generation would also be great.
+
+- very cool indeed 👏
+- thx for the nice presentation
+- Yeah, definitely a fun project that solves a problem to keep more Emacs and less external services. Static web sites are the best. :-D
+- I agree. I currently use Hugo, but I think this looks great!
+- I really like that `jack-html` is a separate project, as that looks nifty.
+- jack-html feels like a hiccup for elisp, nice
+ - A very programatically solution!
+- I didn't watch the talk, but I use esxml to template pages that I generate from Org files: <https://codeberg.org/SystemCrafters/systemcrafters-site/src/commit/b9b33910e68c6a9321ee7dcd92015b8a29b260bd/publish.el#L176> - Lisp backquotes are the best templating language :)
+ - To be fair, pcase DSL is not easy to remember. [some discussion on IRC about pcase], recommendation of <http://newartisans.com/2016/01/pattern-matching-with-pcase/>
+ - I keep using elisp-demos with great success <https://github.com/xuchunyang/elisp-demos> - adds examples to Help buffer
+- This looks like a nice setup. My blog is still using org-page, which was abandoned years ago.
+- org-page still works though
+ - I know, I'm still using it. But it's finicky in a bunch of ways and I'd like a replacement static site generator. I don't really care if the code is elisp or not, as long as I can write in Org Mode and don't have to run Wordpress.
+ - we have a bunch now.. <https://github.com/novoid/lazyblorg> <https://ox-hugo.scripter.co/>
+
+## Questions and answers
+
+- Q: does the "one" part of one.el refers to one source file?
+- Does one.el support #+include: to add from other (org) files?
+- Q: What's the main motivation for this new package? I used to use
+ ox-hugo and use github action to build the blog.  (Curious as well,
+ as I use ox-hugo and have almost 1000 pages)
+ - A: Mapping from org-mode to Hugo added another system to
+ understand; wanted Emacs centric approach. 
+ (<https://one.tonyaldon.com/> has some rational)
+ - understand. For me, it's just org-mode, ox-hugo take care of
+ the rest. And I find it is easy for me. Maybe, I am not used it
+ so much. Full control definiitely requires your package.
+- Q: Is it possible to use #+include to add content from other files?
+ - A: Not included; the idea was to only have one file. It is
+ possible to code what you want in elisp.
+ - Perhaps org-transclusion would play with this?
+- Q: Can this generate a single site from different sources like
+ blog.org (for example.org/blog/), videos.org (for
+ example.org/videos/), contact.org (for example.org/contact/), etc?
+ - A: Refer to the previous question's answer
+- Q:Do you have pre-made templates already along with the one.el
+ package?
+ - A:Yes and no. There are quite a few constructs/templates in the
+ one.el code, you could perhaps use them to customize to get it
+ to do what you want.
+- Q: What additional features are there that you would like to add to
+ one.el in the future?
+ - A: A full text search
+ - (Comment not from presenter:) I've used Lunrjs which is a JS
+ package that keeps all things local; but your site generator
+ does need to kick out a JSON representation of the content (e.g.
+ path, text, tags/keywords).  I've been considering
+ <http://elasticlunr.com/>
+- Q:Can you create navbars on a website and fancy things like
+ carousels (pictures rolling/sliding from one to another) using
+ one.el?
+ - A:Sidebars, navbars are already part of the package. one.el also
+ generates responsive. pages. pages argument used recursively can
+ manage/mimic the carousel effect.
+- Q: Would there be an automated way to convert an existing HTML
+ document into jack-html form?
+ - A:
+ - One challenge is that HTML documents do not need to be
+ "precise" (you don't need to close tags).  So finding a
+ tree-parser for HTML (perhaps treesitter?) to build the
+ conceptual tree.
+- Q: Does this or you use any other Emacs Packages for your
+ package/website ex org-publish.
+
+
+[[!inline pages="internal(2023/info/one-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/one-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/overlay.md b/2023/talks/overlay.md
new file mode 100644
index 00000000..c8c6c4fe
--- /dev/null
+++ b/2023/talks/overlay.md
@@ -0,0 +1,111 @@
+[[!meta title="Improving compiler diagnostics with Overlays"]]
+[[!meta copyright="Copyright &copy; 2023 Jeff Trull"]]
+[[!inline pages="internal(2023/info/overlay-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Improving compiler diagnostics with Overlays
+Jeff Trull (he/him) - Pronunciation: rhymes with "hull" and "dull", IRC: jaafar, @jaafar@hachyderm.io
+
+[[!inline pages="internal(2023/info/overlay-before)" raw="yes"]]
+
+Overlays are a feature of Emacs that allow changing the
+appearance of text while preserving its contents. They play a prominent
+role in packages like org-mode, which uses them to hide or reveal custom
+properties and display inline images, and magit, which uses them to
+highlight diffs.
+
+The presenter will give a introduction to the features of overlays,
+demonstrating how to:
+
+- Create and use overlays in Emacs Lisp code
+- Query locations in an existing buffer to find out what overlays are
+present.
+
+He will then demonstrate a new compilation minor mode for improving the
+readability of error messages, using overlays to flexibly reformat portions
+of the compiler output under user control.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: How did you draw the underbraces and overbraces?
+ - A: TikZ, the greatest drawing tool ever :) See
+ <https://tex.stackexchange.com/a/128096/105203>. I went to some
+ effort to match up the colors, font, and background to Emacs. I
+ got quite close, I think.
+- Q: You've got a nice sounding keyboard. What kind is it?
+ - A: Sorry about that. It's an ErgoDox EZ
+- Q: Do you find that the "invasive" reformatting interferes with
+ navigation?
+ - A: A bit. You can't move your cursor into the not-real buffer
+ text (indentation). But the original text is still visible, so
+ that works fine.
+- Q: Can you show us the keybindings of your minor map for editing
+ overlays?
+ - A: It's C-c - and C-c + but you can change it.
+- Q:Your examples were with c++, have you experimented with any other
+ languages? Oh, thanks for the interesting talk by the way!
+ - A: Other languages don't have the same unpleasant behavior :) I
+ say this as a long time fan of C++. But it should be possible!
+- Q: Would it be possible to include overlays in the source file
+ itself. There are some language modes (Rust, for instance) that do
+ this.
+ - A: [someone else] Sounds like enriched-mode. [Jeff] I'm not
+ sure what this question means; it's the error messages that are
+ the big issue
+- Q: What are your plans for tspew in the future?
+ - A: Better future-proofing and more options for formatting
+- Q: What is your repository link <https://github.com/jefftrull> ?
+ - A: <https://github.com/jefftrull/tspew>
+- Q: What IDEs do C++ programmers use?  If not emacs?  How do they deal
+with these error messages?
+ - A: VSCode is quite popular, as well as CLion and also XCode. I think they simply display the error messages as is.
+- Q: Have you tried to use treesitter to parse the output?
+ - A: I think it wants to parse an entire buffer. If I could write a
+ grammar for a portion of the text and point it at that, that would be
+ great. I could have maybe made a tsit grammar if I could have applied it to a small bit of the output
+ - (not the speaker): ISTM that since you set up the syntax tables to recognize <> as parens/whatever that Emacs should be able to parse the effective lists as sexps, but I'm not an expert on that
+ - (not the speaker) ye it's true, often you want to select what the root source node type would be an AFAIK you cannot change it
+
+- Q: "org-mode, which uses them to hide or reveal custom properties" I thought they used buffer-invisibility-spec or something like that
+ - A: yes that's part of it
+ - do you know of they also use text properties. org code is usually pretty messy, so I don't know much about it
+ - A: org has been moving toward text properties but I think there is a flag that will use overlays instead (!). There's some controversy about performance that I will touch on in a bit
+ - Interesting, does that initiative predate the recent performance improvements by Stefan Monnier?
+ - A: I think so. They were known to be a problem for some time, but then that happened?
+- Q: Did you use, e.g. syntax-ppss to parse the depth using the syntax table?
+ - A: No I tried to though... maybe there's a better way
+
+## Notes and discussion
+
+- The org file containing the presentation is here:
+ <https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull.org>
+- Tony Aldon's Reddit post on visibility
+ <https://www.reddit.com/r/emacs/comments/t1r2wq/have_you_ever_wondered_how_orgmode_toggles_the/>
+- Overlay performance (maybe) fixed
+ <https://www.reddit.com/r/emacs/comments/yg4mvt/the_noverlay_branch_was_merged_to_master_this/>
+- I think I might need to change subed-waveform to use text properties instead of overlays or fix something else that I'm doing incorrectly, since the overlays get left behind when I kill text
+ - A: yeah you have to track them yourself
+- Can you put the overlay object in a text property to track it?
+ - A: I don't think you would mix properties and overlays in that manner. There are overlay search functions; people typically add a property that identifies them as theirs. or you can store references in a list or something
+- A: One of my reasons for doing this was frustration and people talking about how great VSCode was and I *knew* that Emacs was a good match for certain kinds of problems people don't even try to solve in IDEs
+- A: I actually edited this down I know it's still a lot of detail :)
+- This is really good!
+- Very impressive! And well explained. Thank you.
+- yeah try doing that in VSCode! yeah.
+- this is slick!
+- i'm not a fan of ligatures, but imho :: just begs for it
+ - Same, I want to see the actual thing that'll be given to the compiler/interpreter/whatever.
+- That was great, showing how relatively easy it is to extend Emacs with features like that.
+- From the speaker: yantar92: your help was much appreciated in the weeks I spent putting this together :)
+
+[[!inline pages="internal(2023/info/overlay-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/overlay-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/parallel.md b/2023/talks/parallel.md
new file mode 100644
index 00000000..8806e7c2
--- /dev/null
+++ b/2023/talks/parallel.md
@@ -0,0 +1,88 @@
+[[!meta title="Parallel Text Replacement"]]
+[[!meta copyright="Copyright &copy; 2023 Lovro, Valentino Picotti"]]
+[[!inline pages="internal(2023/info/parallel-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Parallel Text Replacement
+Lovro, Valentino Picotti - IRC: hokomo, <mailto:hokomo@disroot.org>
+
+[[!inline pages="internal(2023/info/parallel-before)" raw="yes"]]
+
+We present our Emacs package for performing parallel text
+replacement.
+
+"Parallel" in this context does not refer to improving
+efficiency through parallelism, but to the concept of performing
+more than one text replacement without them interfering with
+each other. This is in line with the usage of the term in the
+Lisp community when contrasting the behaviors of LET and LET*,
+SETQ and PSETQ, etc. (e.g.
+<http://www.lispworks.com/documentation/lw60/CLHS/Body/s_let_l.htm>).
+
+We will present the package's features and its integration with
+Emacs' query-replace system, a comparison with previous
+solutions, and a few notes on our implementation. We will
+describe some common use-cases and showcase how the package is
+used.
+
+The package is currently not yet published in a package archive,
+but the code is already publicly available at
+<https://github.com/hokomo/query-replace-parallel>. The name
+"query-replace-parallel" is not yet final and we are thinking of
+alternatives. Our current best candidate is "replace-parallel"
+(similar to the built-in "replace.el"), but suggestions are
+welcome.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: This looks great, and was very well-presented.  Do you have plans
+ to upstream this functionality into Emacs?
+ - A: Would require some refactoring upstream, so not suitable for
+ upstreaming as-is.
+- Q: Did you use pair-programming while developing it, or did you work
+ independently, alternating and reviewing?
+ - A: Yes, we did! I was at the keyboard, Valentino was at the
+ whiteboard, and we kept bouncing ideas back and forth, trying
+ out prototypes, coming up with various tests, checking the edge
+ cases, etc.
+- Q: What is your background in programming? Was it difficult to
+ implement following the same API and architecture as what is already
+ in Emacs?
+ - A: Both Valentino and I are PhD students in computer science,
+ but a PhD or similar is definitely not a requirement. It wasn't
+ too difficult because we could reuse the interactive
+ functionality from query-replace's internals. Figuring out what
+ and how to reuse is what took a bit of creativity, but a lot of
+ the necessary knowledge for that came from just reading and
+ poking around Emacs' replace.el. Don't be afraid to go and
+ read the source!
+- Q: What did you learn about Emacs programming or programming in
+ general while working on this project?
+ - A: That Emacs is so flexible that you can even advise its
+ `message` function. Similarly, being able to prototype
+ functionality so quickly and immediately integrate it into the
+ rest of Emacs is so fun and so satisfying!
+
+## Notes
+
+- One usecase could be character names in a novel manuscript, if one
+ has named a character and want to now rename it to some other
+ character names or swap it with another one.
+- Nice, I was wondering if it utilized `rx`
+- package installed, ready to use!
+- excellent talk, and also such a cool package
+- great talk, very clever concept
+- that SRE "paper" you linked to is interesting
+- just saw the "Parallel Text Replacement" talk - 👏 great talk!
+
+[[!inline pages="internal(2023/info/parallel-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/parallel-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/poltys.md b/2023/talks/poltys.md
new file mode 100644
index 00000000..4cd13b92
--- /dev/null
+++ b/2023/talks/poltys.md
@@ -0,0 +1,100 @@
+[[!meta title="The browser in a buffer"]]
+[[!meta copyright="Copyright &copy; 2023 Michael Bauer"]]
+[[!inline pages="internal(2023/info/poltys-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# The browser in a buffer
+Michael Bauer (he/him) - Pronunciation: [ˈmɪçaːʔeːl] [ˈbaʊ̯ɐ], IRC: permcu, <http://perma-curious.eu>, <mailto:perma-curious@posteo.de>
+
+[[!template id="help"
+summary="main talk does not have captions"
+tags="help_with_main_captions"
+message="""This talk does not have captions yet.
+Would you like to help [caption this talk](/captioning)?
+You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt)."""]]
+
+[[!inline pages="internal(2023/info/poltys-before)" raw="yes"]]
+
+In this talk I am going to show a thing I made to integrate my second
+most used program with my first most used one.
+
+Poltys - a periodic orb weaver - is an interactive interface to the
+current browser session that lives inside an Emacs buffer. It forms a
+[narrow
+waist](https://www.oilshell.org/blog/2022/03/backlog-arch.html) between the browser & Emacs; bringing Emacs text editing
+to tab management. This makes it one more thing ready to be used in
+your favorite Emacs workflow.
+
+During the talk I will explain what poltys does, how it can be used in
+different workflows and how it is made. The first half of the talk is
+show and tell, while the second half goes into the technical details.
+
+This talk is for you if you like neat text interfaces,
+already live mostly inside Emacs,
+or just want to have a look at what Emacs - the universal shell - is
+among many other things capable of.
+
+About the speaker:
+
+Michael Bauer is from Germany. He does most of his computing from
+inside Emacs and works currently on an evolved lisp dialect.
+# Discussion
+
+## Questions and answers
+
+- Q: Have you seen the Nyxt browser. It is the Emacs of Web browsers
+ and would probably be easier to work with as it matches a lot closer
+ to Emacs. I think you can tag browser tabs for example. 
+ - A: Yes, but the author did not look into it yet. It could
+ probably be made to work as well.
+- Q:Nice ideas.  Needs a better name though to attract people to it. 
+ What about browsys or webnote?
+ - A: Ideas for better naming are appreciated, but the suggestions
+ did not convince the author.
+- Q: Can you use browser extensions with this, example ublock
+ sponserblock darkreader These are needed for browsing others peoples
+ web sites
+ - A: The presented software is a browser extension (plus elisp
+ code to interact with it), so it works in addition to other
+ already installed browser extensions.
+- Q: Are there any inherent security issues with this (bi-directional
+ synchronization sounds like a possible issue) ? How are they solved?
+ Can a malicious website impact Emacs or the host system?
+ - A: The overall surface is limited, so there should be little a
+ website can do. One thing that helped with this is the web
+ extensions API being fine-grained in terms of things that can be
+ done with the browser.
+- Q:When do you think you'll make a first release?  I hate needing
+ browser extensions and would love to control my tabs in Emacs.
+ - A: The code is there, may be, in the next week, the presenter
+ would upload the code out there.
+ - I am not the presenter, but you can configure emacs to open
+ windows instead of tabs and control them with EXWMNeed
+ cross-window system support (GNU/Linux, MacOS and Windows).
+- Q: What happened to the Sway compositor you showed last year? I am
+ an EXWM user and need a Sway equivalent!!! Please !!! Is the code
+ available?
+ - A: <http://perma-curious.eu/repo-ewx/>
+- Q: Does the browser have to be firefox for syncing or is there a
+ choice there?
+ - A: It should be possible to use this with other browsers due to
+ the web extensions API working for both Chromium and Firefox,
+ but it needs testing and Chromium may switch to an incompatible
+ API in the future.
+
+## Notes
+
+- It is too small, please zoom up *4, for all the impaired, or normal
+ good old user of emacs...
+- The highlighting copying could be done with xclip or wl-clipboard if
+ you don't mind a dependency outside Emacs.
+
+
+[[!inline pages="internal(2023/info/poltys-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/poltys-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/ref.md b/2023/talks/ref.md
new file mode 100644
index 00000000..9f6b724e
--- /dev/null
+++ b/2023/talks/ref.md
@@ -0,0 +1,64 @@
+[[!meta title="Org-Mode Workflow: Informal Reference Tracking"]]
+[[!meta copyright="Copyright &copy; 2023 Christopher Howard"]]
+[[!inline pages="internal(2023/info/ref-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# Org-Mode Workflow: Informal Reference Tracking
+Christopher Howard (he/him) - IRC: lispmacs, <mailto:christopher@librehacker.com>
+
+[[!inline pages="internal(2023/info/ref-before)" raw="yes"]]
+
+This talk describes my Emacs workflow for keep track of references to papers,
+book, and Web articles, and other things I might want to look-up or quote
+later. I go over a few code snippets and some basic org commands which make
+the process quick, easy, and practical for my needs.
+
+This talk is targetted for the beginner to intermediate Emacs user, or those
+who do not have much experience with org-mode. Also, those who do a lot of
+advanced technical writing should look instead to Vidianos Giannitsis' talk
+[Writing and organizing literature
+notes for scientific writing](https://emacsconf.org/2022/talks/science/) where they will find better tools for reference
+tracking and scraping.
+
+About the speaker:
+
+Christopher Howard is an electronics technician who studies various scholarly
+and scientific subjects in his (very limited) spare time. He needed a quick
+and easy system for keeping track of various references to books, Web
+articles, and so forth. He found that a few code snippets and some basic tools
+from Org-Mode have worked well for him, while requiring a minimal setup and
+learning curve. He hopes that sharing his workflow will be useful to some
+others with similar needs.
+
+# Discussion
+
+- Q: Is the emacs config for the system in the last talk published?
+- example code: <https://bpa.st/UXBQ>
+- I didn't mention it in the video, but I like also to use
+ org-mode's attach feature to sometimes attach documents to the
+ references.
+- Try this for inserting link:
+ <https://xenodium.com/emacs-dwim-do-what-i-mean/>
+- I use (ivy-bibtex &optional ARG LOCAL-BIB) but never hacking tag
+ system, this something I can improve.
+- The current talk shows that most of the time, the already included tools in Emacs allow for custom workflows without needing to use external packages (org-roam, etc.). Of course, the latter are great for richer workflows, but core Emacs is often enough.
+- do you know about the org-insert-link command? saves you from having to type brackets :)
+- You'll likely find helm-org-rifle useful for searching, it handles, e.g. tag inheritance and so forth
+- I used to use a similar approach: https://dindi.garjola.net/zettelkustom.html but I finally moved to protesilaos denote
+- if you search properties infrequently, you can take advantage of quite specific literal pattern ":name" (starting with ":") using swiper or its help equivalent. You should have limited no of candidates if you know prop name. This way you do not need to remember dedicated command for searching org properties :).
+- See also org-ql-find for property searches, e.g. "property:NAME=FOO" syntax
+ - that's honestly so verbose that I never managed to use it
+ - Well you could alias "property" to "p" and then type "p:foo" or "p:foo=bar". or you could just search for "foo bar" as plain text regardless of their being properties
+ - If you frequently search for certain properties you could use org-ql-defpred to define a predicate that matches them
+ - I personally find postfix notation easier in practice - aka search-string:tag. it is very practical - I first think of a term, see the results, and then expand/narrow the scope of the search term as necessary. I find it more natural than M-b + adding predicate: <https://0x0.st/HxVC.txt> <https://github.com/yantar92/emacs-config/blob/master/config.org#trying-org-ql> beware that I use org-ql fork. So, 100% untested on the released version
+- Great talk.
+- Great talk, clap clap clap
+
+
+[[!inline pages="internal(2023/info/ref-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/ref-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/repl.md b/2023/talks/repl.md
new file mode 100644
index 00000000..bd0c01f9
--- /dev/null
+++ b/2023/talks/repl.md
@@ -0,0 +1,116 @@
+[[!meta title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ"]]
+[[!meta copyright="Copyright &copy; 2023 Eduardo Ochs"]]
+[[!inline pages="internal(2023/info/repl-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ
+Eduardo Ochs - IRC: edrx, edrx <http://anggtwu.net/>, <mailto:eduardoochs@gmail.com>
+
+[[!inline pages="internal(2023/info/repl-before)" raw="yes"]]
+
+Many years ago, when I started programming, my dream was to write
+games. I failed miserably in that, but I became fascinated by
+languages, and I discovered Forth - that was perfect for writing
+languages whose syntax was as simple as possible. Then I switched to
+GNU/Linux and I had a series of favorite languages; at some point I
+discovered Lua, that became not only my favorite language but also my
+favorite tool for implementing other languages. One of the main
+libraries of Lua is something called LPeg, that lets "people"
+implement complex parsers in just a few lines of code using PEGs -
+Parsing Expression Grammars.
+
+I've put the "people" in the last paragraph between quotes because for
+many years I wasn't included in the "people who can implement complex
+parsers with LPeg"&#x2026; lots of things in LPeg didn't make sense to me,
+and I couldn't visualize how it worked. Something was missing - some
+diagrams, maybe?
+
+The main tool for drawing diagrams in LaTeX is something called TikZ,
+that is HUGE - its manual has over 1000 pages. TikZ includes lots of
+libraries and extensions, and each one of these libraries and
+extensions extends TikZ's core language with some extra constructs.
+
+I don't know anyone - except for a handful of experts - who knows what
+is the "core language" of Tikz, that lies, or that should lie, below
+all these extensions&#x2026; all of my friends who use TikZ are just
+"users" of TikZ - they've learned some parts of TikZ by starting with
+exemples, and by then modifying these examples mostly by trial and
+error. In particular, no one among my friends knows how styles in TikZ
+really work; styles are implemented using "keys", that are hard to
+inspect from a running TeX - see [1] - and I found the chapter on "key
+management" in the manual very hard to understand. It feels as if
+something is missing from it&#x2026; some diagrams, maybe?
+
+In my day job I am a mathematician. I work in a federal university in
+Brazil, and besides teaching I do some research - mostly in areas in
+which the papers and theses have lots of diagrams, of many different
+kinds, and in which people use zillions of different programs to draw
+their diagrams. Every time that I see those diagrams I think "wow, I
+<span class="underline">need</span> to learn how to draw diagrams like that!", but until a few
+months ago this seemed to be impossible, or very hard, or very
+painful&#x2026;
+
+This presentation will be about a point in which all these ideas
+intersect. I am the author of an Emacs package called eev, that
+encourages using REPLs in a certain way; Lua can be used in several
+different styles, and if we use it in a certain way that most people
+hate - with lots of globals, and with an implementation of OO that
+makes everything inspectable and modifiable - then it becomes very
+REPL-friendly; there is an extension of LPeg called LPegRex ([2],
+[3]), that I found promising but hard to use, so I rewrote some parts
+of it to make them more REPL-friendly, and to make it print its ASTs
+in 2D ASCII art. The core of my presentation will be about how I am
+using REPLs written in Lua to write grammars, parsers, and tools to
+generate many kinds of diagrams, and how I am using these diagrams to
+document both my own code and other people's programs - the parts of
+them in which some diagrams seem to be missing. My hope is that people
+will find these ideas easy to port to other languages besides Lua, to
+other tools for generating diagrams besides LaTeX - SVG, maybe? - and
+to other ways to use REPLs in Emacs besides eev. Some ideas in this
+presentation were inspired by the blog post [4].
+
+[1]
+<https://tex.stackexchange.com/questions/663740/alternative-to-edef-c-pgfkeys-a>
+[2] <https://github.com/edubart/lpegrex>
+[3] <https://github.com/edubart/lpegrex/blob/main/parsers/lua.lua>
+[4] <https://ianthehenry.com/posts/my-kind-of-repl/>
+
+About the speaker:
+
+I am this person here: http://anggtwu.net/eepitch.html
+
+# Discussion
+
+## Questions and answers
+
+- Q:if you had to summarize what you where trying to say in 3
+ sentences or less, what would you say?
+ - A: Ouch! I would answer with a link... this one:
+ <http://anggtwu.net/eev-for-longtime-emacs-users.html#summarize-in-one-paragraph>
+
+## Notes
+
+- Magic is good as long as you have the option to look behind the
+ scenes when you want! :-)  Imagine if all code was assembly
+ language.
+- hi edrx! =) great talk
+
+- A :I didn't create a git repo with the code yet because I don't have any idea if anyone would want to test it today... everything is made to be used with this interface, <http://anggtwu.net/eepitch.html>
+
+- Q: is the code available as a tarball perhaps? or not at all yet?
+ - as I know very few people who use eev - and who already use that interface - I wanted to ask them if they'd be ok with installing some files in ~/LUA/ and ~/LATEX/, or if they really needed to use other directories, or what... the things that are to be installed in ~/LUA/ are in a tarball, but a few of the files require some files in ~/LATEX/. I'm preparing the LATEX/ directory of the tarball now and I'll announce it on the eev mailing list soon
+- Dealing with diagrams with Emacs is tricky. Having documented examples of that is nice and would be helpful
+ - A: I _guess_ that the ideas that I presented would be easy to adapt to SVG diagrams, and to some packages that use Javascript to generate their diagram... but I don't want to write the code for SVG and for js diagrams all by myself. what do you use - or what have tried to use - to generate diagrams?
+ - i've personally tried using a bunch of different tools but never found anything that fully clicked for me or was remotely pleasant to use. i guess 'draw.io' is decent, but something in Emacs would be awesome
+ - do you think that musa's way to making emacs run javascript could work for draw.io?
+ - hmm no clue tbh, worth trying to ask him. but i must say i'm not super enthused about embedding js in emacs
+ - having tried most things (from exwm to org-protocol, to devtools debug protocol, and what not), I've converged on small personal extension that loads across browsers, locally, and stay connected with Emacs via the very useful emacs-websocket package, to interact both with the internal state of the browser (windows, tabs, etc.) and intra-page
+
+[[!inline pages="internal(2023/info/repl-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/repl-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/sat-close.md b/2023/talks/sat-close.md
new file mode 100644
index 00000000..78ffa525
--- /dev/null
+++ b/2023/talks/sat-close.md
@@ -0,0 +1,21 @@
+[[!meta title="Saturday closing remarks"]]
+[[!meta copyright="Copyright &copy; 2023 ${speakers}"]]
+[[!inline pages="internal(2023/info/sat-close-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Saturday closing remarks
+
+
+[[!inline pages="internal(2023/info/sat-close-before)" raw="yes"]]
+
+
+
+
+[[!inline pages="internal(2023/info/sat-close-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/sat-close-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/sat-open.md b/2023/talks/sat-open.md
new file mode 100644
index 00000000..6179cce0
--- /dev/null
+++ b/2023/talks/sat-open.md
@@ -0,0 +1,24 @@
+[[!meta title="Saturday opening remarks"]]
+[[!meta copyright="Copyright &copy; 2023 ${speakers}"]]
+[[!inline pages="internal(2023/info/sat-open-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Saturday opening remarks
+
+
+[[!inline pages="internal(2023/info/sat-open-before)" raw="yes"]]
+
+# Discussion
+
+- I like the relaxing music
+- So intimidating! Being in a chatroom with all these famous Emacs celebrities!
+
+
+[[!inline pages="internal(2023/info/sat-open-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/sat-open-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/scheme.md b/2023/talks/scheme.md
new file mode 100644
index 00000000..011d52b1
--- /dev/null
+++ b/2023/talks/scheme.md
@@ -0,0 +1,78 @@
+[[!meta title="Bringing joy to Scheme programming"]]
+[[!meta copyright="Copyright &copy; 2023 Andrew Tropin"]]
+[[!inline pages="internal(2023/info/scheme-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Bringing joy to Scheme programming
+Andrew Tropin - Nick: [abcdw](https://trop.in/contact), Site: <https://trop.in/>, Fediverse: <https://fosstodon.org/@abcdw>
+
+[[!inline pages="internal(2023/info/scheme-before)" raw="yes"]]
+
+Emacs is usually a primary tool people remember, when talk about
+development environment for lisp languages. It serves the purpose
+great for Common Lisp, Clojure and of course Emacs Lisp, but what
+about Scheme? Let's talk about current state of the things, recent
+improvements, and emerging tools in this field.
+
+My talk covers the following:
+
+- What does a usual Scheme developer day look like? And how it can be
+ made more enjoyable?
+- Important developer duties, their automation and acceleration.
+- Interactive development and its benefits.
+- Emacs setup for Scheme development.
+
+Links:
+
+- <https://git.sr.ht/~abcdw/emacs-arei>
+- <https://git.sr.ht/~abcdw/guile-ares-rs>
+
+About the speaker:
+
+Talk about Lisp development workflows, REPLs, and modern Scheme tooling for Emacs.
+Author of Guix Home, maintainer of [rde](https://git.sr.ht/~abcdw/rde), FOSS developer.
+
+# Discussion
+
+## Questions and answers
+
+- Q: How much do you use these repels remotely ex using a server or
+ desktop from your laptop?
+ - A: I don't use it remotely at the moment, but it should work
+ perfectly fine (except maybe lookup and other similiar
+ functions). I also want to add a shepherd service for ares-rs,
+ so you can connect to GNU Shepherd and systems based on it (like
+ GNU Guix) from you emacs process and interact fluently with
+ guile code.
+- Q: Can this be integrated with eglot?
+ - A: I'm not sure how this integration could look like.
+ Theoretically, it's possible to expose many of ares-rs
+ functions via LSP custom actions (or whatever it called).
+ Anyway, contact me on IRC or <https://trop.in/contact> to
+ discuss it in more details if you have something in mind.
+- Q: How hard is it to add support for something else than Guile? Does
+ it make sense to contribute at this early stage of development?
+ I've written several packages for CHICKEN Scheme before and would
+ like to try this one.
+ - A: It's a matter of implementing the whole chicken-ares-rs :)
+ Many of the code can be reused, but not all, unfortunately.
+ emacs-arei doesn't need any (or almost any) changes.
+- Q: (One day late sorry) Is nREPL more extensible than what SLIME/SLY
+ use in Common Lisp world (I think it's comint.el) ?
+ - A: Yes, it's. I was evaluating and considering SWANK protocol,
+ but found nREPL to be more suitable and future proof.
+ <https://github.com/astine/swank-client/blob/master/swank-description.markdown>
+
+### Notes and discussion
+
+- brilliant work for scheme
+- yeah, this is overdue. the only real alternative is slime-r7rs
+
+[[!inline pages="internal(2023/info/scheme-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/scheme-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/sharing.md b/2023/talks/sharing.md
new file mode 100644
index 00000000..b27edbbb
--- /dev/null
+++ b/2023/talks/sharing.md
@@ -0,0 +1,117 @@
+[[!meta title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video"]]
+[[!meta copyright="Copyright &copy; 2023 Jacob Boxerman"]]
+[[!inline pages="internal(2023/info/sharing-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Sharing Emacs is Caring Emacs: Emacs education and why I embraced video
+Jacob Boxerman (he/him) - <mailto:jakebox0@protonmail.com> - <https://www.youtube.com/c/JakeBox0> - <https://www.linkedin.com/in/jacob-boxerman/>
+
+I am looking for a summer internship for Summer 2024, please feel free to reach out, I am looking to network :)
+
+[[!inline pages="internal(2023/info/sharing-before)" raw="yes"]]
+
+My YouTube Emacs series, "Straightforward Emacs," started as a quick video to
+share with one person. That video now has over 50 thousand views, and inspired
+me to do my part and give back to the Emacs community, creating what I wish I
+had when I started my journey.
+
+150,000 views later, I still find my YouTube channel one of the most
+fulfilling things in my life at the moment (despite the fact that I am very
+busy and don't have so much time for videos these days), because it is my way
+of giving back and sharing Emacs with a wider community.
+
+In addition to the technicalities of video production and teaching Emacs, this
+talk will also address two crucial topics in our community &#x2014; a love of Emacs
+and desire for its longevity, and spreading Emacs to new users.
+
+In particular, I will discuss my views on the sharing of information in the
+Emacs community &#x2014; how we do it, what it does for us, and how we can do it
+better.
+
+People often complain about the Emacs learning curve. As we all know, Emacs is
+a beast, and those who use and love Emacs spend years tweaking, adjusting,
+modifying, and, above all, learning. Because at the end of the day, Emacs is a
+personal journey. Everyone has preferences, searching for what makes them most
+comfortable, happy, and productive. Still, I believe that we are stronger
+together than we are apart. One of the best ways to find out what we like is
+by seeing what other people like. What's important is that what other people
+like, other people can understand.
+
+I hope you'll come check out my talk, and that it will inspire you to do one
+of the most honorable things one can do: teach and share with others.
+
+About the speaker:
+
+Jacob Boxerman is the creator of Straightforward Emacs, a video-based
+Emacs series with practical, easy-to-follow and implement tutorials
+and advice. He is a 2nd-year computer science student at Columbia
+University in New York and is interested in the intersections of
+computer science, finance, and psychology. In his talk today, titled
+"Sharing Emacs is Caring Emacs: Emacs Education and Why I Embraced
+Video," he will share his views on communication and sharing in the
+Emacs community, and how we can all do our part to spread Emacs,
+support each other, and ensure its growth.
+# Discussion
+
+## Questions and answers
+
+- Q: Are you using ox-reveal to make your slides? If not, what are you
+ using? They look very elegant.
+ - A: Yes, and Jacob has a video about it on his channel!
+- Q: Videos can be very inspirational to learn about something by
+ watching it used. I often find I need to do some research after
+ watching a video to learn more. Do you give people links to relevant
+ resources etc?
+ - A: Definitely something that I can do more of.  I like to think
+ of my videos as jumping-points to the manual.
+- Q: What are your fellow cohort of students using for their editors? 
+ What kinds of "feedback" do you get from them when they learn
+ about you using Emacs? (Missed your talk so perhaps you answered
+ this)
+ - A: Professors making entry to comp sci as "accessible/simple"
+ as possible.  In 3rd course the professor gives option of either
+ Emacs or Vim.  Professor uses vim; so the class gravitates
+ towards that.  A 4th course, in assembly, and the professor
+ suggests Emacs.  At Columbia, vim is more used (as it's
+ modeled)
+- Q: Did you start those university classes using Emacs?
+ - A: Yes. (Two years before entering college); taking notes in
+ org-mode for programming classes is the BEST!!!  Syntax
+ highlighting, inline code blocks, literate-esque programming is
+ great for school.  Professors want PDFs on their desk!  And
+ org-mode simplifies this process.
+ - Also presenter is in humanities, and writes their humanities
+ essays in org-mode
+- Q: To Leo: Before NeoVim, you had to do as much (or more)
+ configuration to get basic editing done than in Emacs. It's also
+ slower with modal editing compared to Emacs keybindings because you
+ have to press Esc and two keys to get things done while in Emacs you
+ only have to press C/M-something (one keypress) to move or search or
+ whatever and then write. I instantly became productive for writing
+ when I switched to Emacs. (I have 5 times tried to adopt Vim...and
+ each time I get a bit better.  But Emacs was lightning in a bottle
+ for "productivity"; for those where vim works, I love it.  And am
+ eccstatic that they are owning their editor)
+ - A:
+- Q: Wha was a question you'd hoped we'd ask of you?
+ - A:
+
+## Notes
+
+- Cool talk! :-)
+- I've used your videos before! Thanks for all the good work.
+ - So awesome to hear that!! You are welcome and thanks for letting me know, love to hear it
+- Ha ha. I think Emacs users might just enjoy inconvenience. If a picture is worth a thousand words ... then maybe the value of a video is based on frame rate.
+- Agreed, jakeb --- video is worth it.
+- Interesting to think about video beeing worth it while watching a video of the conference.
+
+
+
+[[!inline pages="internal(2023/info/sharing-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/sharing-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/solo.md b/2023/talks/solo.md
new file mode 100644
index 00000000..9bf2edbe
--- /dev/null
+++ b/2023/talks/solo.md
@@ -0,0 +1,136 @@
+[[!meta title="How I play TTRPGs in Emacs"]]
+[[!meta copyright="Copyright &copy; 2023 Howard Abrams"]]
+[[!inline pages="internal(2023/info/solo-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# How I play TTRPGs in Emacs
+Howard Abrams - Website: <https://www.howardism.org> - Mastodon: @howard@emacs.ch, <mailto:howard@howardabrams.com>
+
+[[!inline pages="internal(2023/info/solo-before)" raw="yes"]]
+
+
+- Ironsworn Emacs project code: <https://gitlab.com/howardabrams/emacs-ironsworn>
+- Note that this code depends on my earlier project: <https://gitlab.com/howardabrams/emacs-rpgdm>
+- The alpha version of a RPG Toolkit code: <https://codeberg.org/howardabrams/emacs-rpgtk>
+
+As an eternal Dungeon Master, I have a long history of collecting my notes
+in Emacs. When my son was very young, I would export my Org files to
+an HTML page that would include some magic JavaScript, so that when
+displayed on my iPad, I could touch a table to have it randomly return a
+line, or touch a phrase like `3d6+1`, to have the web page return a dice
+roll.
+
+Lately I’ve been getting into Solo versions of tabletop role playing games
+(TTRPG), and have had a fun time writing Lisp to support this style of
+play, and thought I’d share my code and my fun.
+
+I’d like to begin by showing my game play in action: I’m currently playing
+Ironsworn with the Mythic GM Emulator and various other tables and
+procedures to stike a balance between *playing a game* and *writing a
+book*. Next I would like to show the code that supports the interface, and
+perhaps dive a bit deeper into some of the underlying mechanisms and
+functions, especially that function that randomly chooses entries from Org
+tables. I’ll end with a plan for turning my code into a community project,
+if people are interested.
+
+Format (10 minutes, 20 minutes, description of other format) and outline:
+20 minutes, but I could do less if you have too many submissions.
+
+About the speaker:
+
+Howard often gives technical, work-related talks at EmacsConf, but here he
+is talking about playing games in Emacs.
+# Discussion
+
+## Questions and answers
+
+- Q: Where can I get this?
+ - A: <https://gitlab.com/howardabrams/emacs-ironsworn>
+- Q: How well would this suppliment freefoxm writing. short novels or
+ novels?
+ - A: I think it would be a good start. It is just an org file, so
+ you can go as far as you'd like with the writing.
+- Q: Does the current version also have some utilities for doing
+ multiplayer? (either physically or digitally) (since you mentioned,
+ you previously did multiplayer sessions as well..)
+ - A: Nope, it is just Solo, but that does sound like a fun idea.
+- Q: This game + CRDT (collabrative editing
+ <https://github.com/emacs-straight/crdt.git>) should be great for
+ non-solo playing?
+ - A: Perhaps, I'd like to try it out.
+- Q: How does one become super awesome like Howard Abrams??
+ - A: "There's no secrets! Just follow your passions!"
+ - Seriously inspiring.
+- Q: Please talk a little about how you produced such a slick
+ presentation video!  Everything looked completely professional!
+ - A: <https://emacs.ch/@howard/111506614571155011> "My son helped
+ me record my presentation for #emacsconf and we were able to
+ achieve an over-the-top show that will evoke the feels ... from
+ snickers to eyerolls."
+- Q: Does table data allow for recursion?  I have a table that when I
+ roll on it, a result comes up that references another table (e.g.
+ result that returns "There are [random monster] haunting the
+ cavern entrance" and we'd roll on [random monster] and inject
+ them into the result.)
+ - A: Yes.
+- Q: With your toolkit a list of good books would be nice to be
+ included. example d&d, space, steampunk, cyberpunk settings
+- Q:  Hi Howard and Thanks for an outstanding presentation!!! What did
+ you use to create the graphics in your presentation?
+ - A: I don't really know. I will have to ask my son, as he did
+ the editing and directing.
+- Q: Any plans to borrow tables from Dungeon World, or
+ Ironsworn:Starforged and publish in the toolkit repository? 
+ (<https://github.com/lifelike/Dungeon-World-Org-Mode>)
+ - A: That does sound like fun.
+- Q: How has this impacted your imagination on the scenes?  (e.g.
+ constraints by algorithms)
+ - A: Yes, writing creatively can be very helpful in many other
+ aspects of your life.
+- Q: Your essay/video "Literate DevOps" I consider a classic, and
+ it's really opened my eyes on org-babel and what you could do. Do
+ you still use those techniques at work? Have you come up with any
+ improvements or changes to your workflow?
+ - Yup. Still do.
+
+## Notes
+
+- Ironsworn Emacs project code:
+ <https://gitlab.com/howardabrams/emacs-ironsworn>
+- Note that this code depends on my earlier project:
+ <https://gitlab.com/howardabrams/emacs-rpgdm>
+- The alpha version of a RPG Toolkit code:
+ <https://codeberg.org/howardabrams/emacs-rpgtk>
+- Really cool project! - Also the enthusiasm for the topic is really
+ contagious!
+- "Every time Howard publishes a talk, I end up doing one more thing
+ in a new radical or literate way inside Emacs - currently looking
+ into how to go about literate snow shoveling for the winter ahead."
+- I can see this one is going to be a classic
+- the camera and lighting already has me sold
+- Such a vibe!
+- can I just (require 'howardism) and be done with it all?
+- i love this so hard
+- "Howard's talk is published on the site now" "I'll be in my bunk"
+- Holy CRAP Howardism WINNING EmacsConf2023
+- Could we add this to emacs beside dunnet?
+- Howard's stuff is always great. this particular thing is totally unchained. :D
+- "Howard approaches your table in the tavern. Do you (1) buy him a tanker of mead (2) kill him and eat his brain"
+- "Not showing-off," he said.
+- That was epic
+- Happy Hacking!
+- What's the emoji for a crowd picking Howard up on our shoulders and carrying him around
+- there's a peaceful aspect of having non web based stuff to play
+ - Non-web, and not-networked!
+- the web is horrible. lisp machines are the future.
+- Imagine playing D&D with colab (from the previous talk)!
+
+
+[[!inline pages="internal(2023/info/solo-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/solo-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/steno.md b/2023/talks/steno.md
new file mode 100644
index 00000000..1e130c37
--- /dev/null
+++ b/2023/talks/steno.md
@@ -0,0 +1,68 @@
+[[!meta title="Programming with steno]]
+[[!meta copyright="Copyright &copy; 2023 Daniel Alejandro Tapia"]]
+[[!inline pages="internal(2023/info/steno-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Programming with steno
+
+Daniel Alejandro Tapia (I like "thou" for the second person and "ou" for the third) - I'm also on emacs.ch @SequentialDesign, <mailto:z111.513.321@gmail.com>
+
+[[!inline pages="internal(2023/info/steno-before)" raw="yes"]]
+
+Talk about what stenotypy is and give a brief history.
+Then onto the challenges of using stenotypy in Emacs
+and how I overcame them.
+Also talk about the advantages of using stenotypy in Emacs
+and in general.
+
+This talk uses two pieces of media under a Creative Commons license:
+
+- <https://en.wikipedia.org/wiki/File:Demonstratie_met_een_stenotypemachine_Weeknummer_28-28_-_Open_Beelden_-_22262.ogv?useskin=vector> - (a short video) Nederlands Instituut voor Beeld en Geluid, Creative Commons Attribution-Share Alike 3.0
+- <https://www.youtube.com/watch?v=EoAcHCTDXio> (a pic from this) -
+Nathan Olivares, Creative Commons Attribution
+
+# Discussion
+
+## Questions and answers
+
+- Q:I found your screen dimensions and battlestation picture
+ interesting. Do you have any place where I can read more about it?
+ - A:
+- Q:I missed the first part of the talk.  This is Excalamus.  How do
+ you handle 1-up and repeat type issues? Suppose you need to move 5
+ characters to the right.  Do you make 5 separate "right arrow"
+ strokes?
+ - A:
+- Q: How did you get into stenotypy, and was that before/during/after
+ you started programming and using Emacs?
+ - A:
+- Q:I recently switched to using my homerow index finger keys as shift
+ on hold. It feels very nice from an ergonomic perspective, but I'm
+ having trouble with consistent shift inputs. Did you have similar
+ experiences when starting to use double function keys?
+ - A:
+
+## Notes
+
+- So much good stuff here, thanks for sharing! +1
+- I appreciate the large text on this one
+- What a fantastic presentation.
+- Yes, ou's doing a great job and setting a good pace
+- I have not gone that far with keyboard but I have been using Keymouse (keymouse.com) for a few years and it is killer one for Emacs :).
+- Other than Daniel and myself, anyone else in the Emacs community using steno?
+ - I played with it but haven't had the time to practice. I have a Georgi and some Elisp to help with things like defining chords, looking things up, etc.
+ - I'm on a Georgi now. So good.
+ - what is a georgi?
+ - <http://plover.stenoknight.com/2019/12/georgi-review.html>
+ - It's a Stenoboard that's (sadly) no longer available :(
+- I set a metronome and did typey type for 10-15 minutes until I had the basic lessons complete at 90% accuracy and 70wpm. Not that I write that fast now...
+- If gpg can perform notarization then maybe Emacs can do legal transcriptions?
+
+[[!inline pages="internal(2023/info/steno-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/steno-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/sun-close.md b/2023/talks/sun-close.md
new file mode 100644
index 00000000..ae336792
--- /dev/null
+++ b/2023/talks/sun-close.md
@@ -0,0 +1,46 @@
+[[!meta title="Sunday closing remarks"]]
+[[!meta copyright="Copyright &copy; 2023 ${speakers}"]]
+[[!inline pages="internal(2023/info/sun-close-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Sunday closing remarks
+
+
+[[!inline pages="internal(2023/info/sun-close-before)" raw="yes"]]
+
+# General conference feedback
+
+- Subtitles:
+ - [regarding the adventure talk:] that is some hero subtitling on "cccc" to "C-c C-c". thank you!
+ - subtitles useful for those who are deaf and broken sound
+ - No sound!!?? Good thing for captions!
+ - FWIW I think it's actually helpful when the subtitles are delayed by a few seconds, so I can watch and listen normally, but if I misunderstand a few words, I can look at the delayed subtitles and find out was said.
+- Closing mpv with "Q" (rather than "q") will save position
+- I can honestly say though that I had a great time putting my talk together. I hope people will have a good time listening to it. Now that the work is over, I can say it was worth it. so I recommend it warmly
+- Nice way to display countdown  with emacs, that's why i love emacs and emacser
+- Indeed, seeing all the use cases across so many fields is one of the big selling point of this coming together, loving it.
+- this conference is crazy i am not sure i ever saw so much interesting emacs ideas in one day
+- On Github: I once looking into commit activity in Vim vs. Neovim vs. Emacs and ... well ... Emacs is more actively developer despite not using github- Y'all, I have to say, this is like Christmas before Christmas every year. Emacsconf makes my year every year :)
+- Thanks to the organizers for your tireless work, and to the most excellent presenters of today, what a treat!
+- So many good talks
+- many good talks, and a sense of community around emacs, which is nice to see
+ - Agreed, I enjoyed a thread I saw on Hacker News yesterday. There was a lot of love in it for Emacs and its community
+- i also have a feeling that it's hard to communicate with others when you start digging into a large system. your confusion diffuses. i felt similar when jumping into web framework and legacy apps. that's also why i liked emacsconf, watching others clarifies a lot of stuff. (memories of johnw edebug flash talk)
+- the pacing, clarity, and depth of the talks today has been really impressive, a presentation masterclass
+ - They're making me feel professionally inadequate
+- Thank you for such responsiveness in running this conference!!!
+- Yes, having the schedule in my own timezone was super helpful.
+- emacsconf-attendee-mode? including etherpad-mode among others
+- yeah virtual conf is fire thanks sacha
+- What our Swiss friends are doing looks quite nice
+- I've seen some virtual conferences (TeX / TUG?) that ran around-the-clock for different time zones.
+ - that would be lovely!
+
+[[!inline pages="internal(2023/info/sun-close-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/sun-close-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/sun-open.md b/2023/talks/sun-open.md
new file mode 100644
index 00000000..189e6fdd
--- /dev/null
+++ b/2023/talks/sun-open.md
@@ -0,0 +1,21 @@
+[[!meta title="Sunday opening remarks"]]
+[[!meta copyright="Copyright &copy; 2023 ${speakers}"]]
+[[!inline pages="internal(2023/info/sun-open-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Sunday opening remarks
+
+
+[[!inline pages="internal(2023/info/sun-open-before)" raw="yes"]]
+
+
+
+
+[[!inline pages="internal(2023/info/sun-open-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/sun-open-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/table.md b/2023/talks/table.md
new file mode 100644
index 00000000..ce63a419
--- /dev/null
+++ b/2023/talks/table.md
@@ -0,0 +1,88 @@
+[[!meta title="Who needs Excel? Managing your students qualifications with org-table"]]
+[[!meta copyright="Copyright &copy; 2023 Daniel Molina"]]
+[[!inline pages="internal(2023/info/table-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Who needs Excel? Managing your students qualifications with org-table
+Daniel Molina (he/him) - website: <https://www.danimolina.net> Mastodon: @dmolina@fosstodon.org, <mailto:dmolina@mailbox.org>
+
+[[!inline pages="internal(2023/info/table-before)" raw="yes"]]
+
+In this talk I will explain how to use org-table to review and calculate the qualifications of the students (but the used techniques are general). I will show how to use several tables, one for each partial exam, using weights for create the final table. I also use summarize table with org-aggregate for a general view of results, and export the qualification to PDF. All the process with Emacs!
+
+I’ll demonstrate some functionality I use for:
+
+- Formula for calculate the qualification using weights, that can be easily updated.
+
+- Summarize tables with org-aggregate (<https://github.com/tbanel/orgaggregate>).
+
+- Create a final table making reference to tables in different files.
+
+For several years, I have been using that workflow, and I consider it is very natural with many advantages, like writing the reasons/feedback in the same file with the qualifications, or to be able to use a version control.
+
+About the speaker:
+
+My name is Daniel Molina Cabrera, I am a senior lecturer in Computer
+Science at the University of Granada, in Spain. I use only Linux in my
+computer, and after been using Vim many years, last years I mainly use
+Emacs for editing, as file manager, as email program, ...
+
+In my experience, using org-table is very powerful and useful, but
+many interesting features are not well-known. Unfortunately, sometimes
+it is difficult to see examples showing the possibilities, and I think
+this example could be very informative.
+
+# Discussion
+
+## Notes
+
+- Very impressive on your skill over the org-table
+- Thank you for your opinion.
+- Never use aggregate function before, will have a try.
+ - Yes, you should, it is clearly a nice package and very useful. Also,
+ it is very well documented at its page:
+ <https://github.com/emacsmirror/orgtbl-aggregate>
+- org table is awesome, but it lacks the fold, if i don't missing something. long table is bad to view
+ - You can put the table under a heading, and you will be able to fold it.
+ - very true. Long tables also have performance issues unfortunately. (IME) but still invaluable for any form of data analysis. I've not used the aggregate package used in this talk: must have a look. Don't get me wrong: I will put up with the performance hit of long tables well before I would ever consider one of those other tools!
+ - any block can be folded by pressing TAB on its header line
+ - I have manage about 200+ students evaluations with multiple columns (20+) in a single org file. It is not fast, but I can't say it is worst than using Excell (or even LibreOffice's Calc). I have separate my students in multiple tables, according to their groups, and that helps.
+- Got an answer on mastodon concerning org tables and formulas: "The documentation is not ideal", which is a little sad.
+ - sadly, that's true. Much experimentation is needed.
+ - I find the documentation for org tables quite good. It does help if you know Calc as well, however. But, of course, updates to the documentation are always welcome...
+- This talk was really good in showing how to actually make some things though. Going to look up the aggregate package.
+
+## Questions and answers
+
+- Q: Why we splitter the table like this, instead of using a giant
+ master table?
+ - A: Actually, some of the tables are only for me, and other are
+ published. This is the main reason to have several tables.
+- Q: Do you have some kind of school administrative system you have to
+ enter the grades into in addition, or is this how you present the
+ grades to the students? Do you use it for your own records only?
+ - A: Well, I use the final table (and for each practique) and
+ export it to PDF to put the qualifications, it is not only for
+ my own records. Also, there is a school administrative system
+ that I need to use to publish the final score. In order to make
+ easier to me, I export in the same order and then with the
+ browser I put the qualifications. It is suppose to import from
+ csv (and I could export from my org-table) for it is not always
+ working nicely, it is a pity, because in that case, I could
+ automatically  put the qualifications.
+- Q:
+ - A:
+- Q:
+ - A:
+- Q:
+ - A:
+
+
+[[!inline pages="internal(2023/info/table-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/table-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/taming.md b/2023/talks/taming.md
new file mode 100644
index 00000000..769242eb
--- /dev/null
+++ b/2023/talks/taming.md
@@ -0,0 +1,47 @@
+[[!meta title="Taming things with Org Mode"]]
+[[!meta copyright="Copyright &copy; 2023 Gergely Nagy (algernon)"]]
+[[!inline pages="internal(2023/info/taming-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Taming things with Org Mode
+Gergely Nagy (algernon) (he/him) - Pronunciation: "algernon" (all small letters, no capital A, please), IRC: algernon, IRC: algernon (@libera.chat, @OFTC) - but I normally don't check IRC. I'll be around for the conference, but IRC isn't a good way to reach me nowadays. Website: <https://asylum.madhouse-project.org/> Social media: @algernon@trunk.mad-scientist.club (<https://trunk.mad-scientist.club/@algernon>), <mailto:emacsconf@gergo.csillger.hu>
+
+[[!inline pages="internal(2023/info/taming-before)" raw="yes"]]
+
+**This talk has been cancelled. Sorry!**
+
+I'd like to present my solution of taming a NixOS configuration **and** a
+Doom Emacs configuration with Org Mode. Taming, as in highlighting the
+pain points I had with them, why I found them to be a pain point, and
+then offering a solution. Might not be the best solution, but one that
+worked out remarkably well for me: writing a lot of words in Org mode to
+explain my thinking, for future me, sprinkling some code blocks here and
+there, and holistically assembling them into their tangled out form.
+
+Not a very in-depth talk, not a one-size-fits-all kind of solution. The
+goal is to show that you don't necessarily have to adapt to languages,
+or frameworks. With a little bit of care, and a whole lot of words your
+future self will thank you for, you can bend them to your will. So the
+computer will work for you, rather than the other way around.
+
+Because Emacs and Org mode can bend time and space - at least in a way,
+and you don't even need M-x butterfly!
+
+About the speaker:
+
+I'm a tiny mouse, a hacker. I like to play with things. I'm also very
+opinionated. These things don't always mix well. When I wanted to play with
+NixOS and Doom Emacs, I faced a problem: I don't like the Nix language, and I
+don't like how Doom's config has to be structured. I really wanted to play with
+both, though. So I tamed them. With Org Mode. I'd love to tell you how, so you
+can do the same.
+
+
+[[!inline pages="internal(2023/info/taming-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/taming-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/teaching.md b/2023/talks/teaching.md
new file mode 100644
index 00000000..70e0ffa2
--- /dev/null
+++ b/2023/talks/teaching.md
@@ -0,0 +1,145 @@
+[[!meta title="Teaching computer and data science with literate programming tools"]]
+[[!meta copyright="Copyright &copy; 2023 Marcus Birkenkrahe"]]
+[[!inline pages="internal(2023/info/teaching-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Teaching computer and data science with literate programming tools
+Marcus Birkenkrahe - Faculty website <https://www.lyon.edu/marcus-birkenkrahe> - LinkedIn <https://www.linkedin.com/in/birkenkrahe> - Twitter (X) <https://twitter.com/birkenkrahe> - Researchgate.net <https://www.researchgate.net/profile/Marcus-Birkenkrahe> - Google Scholar <https://scholar.google.com/citations?user=Vvnwsv0AAAAJ&hl=en> - ORCID <https://orcid.org/my-orcid?orcid=0000-0001-9461-8474> - Wikipedia <https://en.wikipedia.org/wiki/Marcus_Birkenkrahe>, <mailto:birkenkrahe@lyon.edu>
+
+[[!inline pages="internal(2023/info/teaching-before)" raw="yes"]]
+
+[[!template id="help"
+volunteer=""
+summary="Q&A could be indexed with chapter markers"
+tags="help_with_chapter_markers"
+message="""The Q&A session for this talk does not have chapter markers yet.
+Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="teaching-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]]
+
+I present a case study on using Emacs and Org-mode for literate
+programming in undergraduate computer and data science courses. Use of
+Emacs was obligatory in courses covering R, Python, C/C++, SQL, and more.
+Onboarding relied on simplified Emacs tutorials and starter configurations.
+Sessions involved live coding, and assignments and projects required
+Org-mode notebooks. I will present the setup, the results, and provide
+insight into my ongoing work with Emacs in the classroom. Especially in
+AI-assisted teaching, literate programming tools will become even more
+important, and Emacs and Org-mode will have a new role to play. Most
+importantly, using Emacs consistently for all classwork imparts deep
+infrastructure and computing knowledge that other tools often obfuscate.
+
+- Outline (tentative):
+ 1. Introduction to the speaker and the case study
+ 2. Teaching computer and data science today
+ 3. The rationale for using Emacs as an IDE
+ 4. The rationale for using Org-mode for literate programming
+ 5. Case study: purpose, content, technology, results
+ 6. Challenges and lessons learnt
+ 7. Literate programming in the age of low code and AI
+ 8. Conclusions and outlook
+
+About the speaker:
+
+Associate Professor of Computer and Data Science at Lyon College in
+Batesville, AR. He joined the Lyon faculty in 2021, on leave of absence
+from the Berlin School of Economics and Law. He earned a PhD in theoretical
+physics (lattice gauge theory). He has published widely in different areas,
+including: neural nets, multigrid applications, knowledge management,
+e-learning, literate programming, process modeling, and data science. He is
+associate editor of the International Journal of Data Science, editorial
+board member of the International Journal of Big Data Management, and
+corresponding member of the Institute for Data-Driven Digital
+Transformation (d-cube) in Berlin, Germany. Emacs user since ca. 1990.
+
+This talk is based on a recent publication with the same title
+(Birkenkrahe, 2023; [doi.org/10.3390/digital3030015](https://doi.org/10.3390/digital3030015)).
+
+
+# Discussion
+
+## Feedback
+
+- at my company new helpdesk analysts seem to suffer from the same symptoms of not fully understanding comp architecture. I guess i will have to teach them emacs...
+- Very interesting talk, thank you!
+- Great talk, thanks.
+- Well done!
+- Very important point to teach CS: immersion. Nothing better than emacs for that.
+- Emacs is *great* for beginners (on CS): it makes them think programatically on their environment.
+
+## Notes
+
+- <https://www.mdpi.com/2673-6470/3/3/15>
+- Data Science: intersection of math, comp sci, domain knowledge
+- I like the idea you use this method to write every piece of your
+ code. It's so easy for me to just ask llm a piece of code, run it
+ and forget about it. I will try to improve this type of way to write
+ code.
+- Students were able to use Emacs competently with 1 week (did I hear
+ that right?) of practice
+ - This is quit counter-intuitive.
+ - I picked up Emacs 3 years ago, and through immersion was up to
+ previous competency parity in about a week or so.
+- Org Remark allows you to highlight in org mode documents, If you
+ pair that with org web tools you can highliht an offline web page
+ backup with highlights in org mode
+- CRDT.el -- allows multiple people with their own emacs config to
+ edit a hosted Emacs buffer
+- Just use one of the Emacs chatgpt or other LLM interfaces instead of
+ leaving for Jupyter notebooks.
+- "The AI advantage [of Jupyter notebooks] does not make up for the
+ loss of immersion that Emacs and Org-Mode provides.  [Immersion is
+ a important]"
+
+## Questions and answers
+
+- Q: What tool(s) do you use for making your slides; they are very
+ nice.  Would be great to get a template.
+ - A: org-reveal
+- Q: Why MDPI? :)
+ - A:
+- Q: Do you think immersion can be achieve on teaching other students
+ with differnet backgrounds?
+ - A:
+ - yeh, exactly, kinda risky for young teacher.
+ - Actually, may depend on the uni. AFAIK, MIT style they
+ promote is full of workshops/handson classes with more
+ limited lectures.
+- Q: Do some of your students nag you about using VSCode? I teach
+ simple programming at a vocational school and even after showing the
+ students vim, Emacs and nano and telling them that I prefer Emacs
+ and also showing them code inside code blocks in Org mode and using
+ Emacs in every class I teach, they still all chose VSCode as their
+ editor. (I let them choose.) It seems like they are brainwashed
+ somehow... Is the success in the obligatory use of Emacs?
+ - A: I observe the same behavior
+ - "The arguments from beginners for VS Code aren't strong";
+ appreciate the fact that immersion is the goal and the
+ constraints of Emacs as required pushes towards immersion. 
+ (Thank you for your answer!)
+ - Having more tutorials on Emacs/Org mode would be most welcome
+ (yantar92 aka Org contributor)
+ - If you make more videos, share them on
+ [[https://orgmode.org/worg/]{.underline}](https://orgmode.org/worg/)
+- Q: I'm curious about your approach to handling EDA, particularly
+ with wide datasets that have numerous columns. Given the constraints
+ of Emacs which might not be optimal for viewing large tables, could
+ you share how you navigate and explore such datasets efficiently? Do
+ you integrate any specific Emacs tools or external methods to
+ streamline this process?
+ - A:
+ - I know that John Kitchin is working with remote DFT
+ calculations - Tbs of data to visualize.
+- Q: Do you have a startup emacs configuration for your students?
+ - A:
+- Q: (from chat) Fantastic talk, thank you. I realise that it will be
+ difficult to provide an accurate answer, but what proportion of your
+ students do you think will keep on using Emacs after your courses?
+
+
+[[!inline pages="internal(2023/info/teaching-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/teaching-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/test.md b/2023/talks/test.md
new file mode 100644
index 00000000..f704f599
--- /dev/null
+++ b/2023/talks/test.md
@@ -0,0 +1,113 @@
+[[!meta title="What I learned by writing test cases for GNU Hyperbole"]]
+[[!meta copyright="Copyright &copy; 2023 Mats Lidell"]]
+[[!inline pages="internal(2023/info/test-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# What I learned by writing test cases for GNU Hyperbole
+Mats Lidell (he, him, his) - IRC: matsl, @matsl@mastodon.acc.sunet.se, <mailto:matsl@gnu.org>
+
+[[!inline pages="internal(2023/info/test-before)" raw="yes"]]
+
+I'm maintaining GNU Hyperbole. I volunteered for that at a time when FSF was asking for one
+since it was unmaintained. I did not have much elisp experience but a passion for the
+package. Not much happened.
+
+To my great delight a few years ago the author of Hyperbole Bob Weiner joined the band and
+we started together to actively develop Hyperbole again.
+
+One of my focus areas in that work has been to add test cases. We have now gone from no
+tests to over 300 ert tests for the package. This talk is about my test case journey. What
+I have learned by doing that.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q:How many tests do you have for Hyperbole and how wouild you rate
+ the test coverage compared to other packages?
+ - A: 
+ - With all tests including the interactive we have 354 tests.
+ Havng said that I must point out that the size of the tests
+ can be very different. I tend to split tests so they are
+ logically (in some sense) different. So that if a test fails
+ it will more likely point you to what the error is. This
+ makes it become more tests. Codewise you could collect
+ similar tests to one ert-deftest making the name of the test
+ point out some group or collection of functions, but I
+ don't do that!
+ - I have not studied other packages so I don't know how our
+ test coverage compares to other packages. In fact I don't
+ know what code coverage we have. That is another thing to
+ look into.
+- Q: One small suggestion, to me 'should' means optional, whereas
+ 'shall' or 'must' means required. Not sure if it is too late to
+ make a major grammar change like that :) Very nice presentation. (I
+ see :))
+ - A: The assertions come from the ert package so any changes would
+ have to be suggested to that. I guess you could make your own
+ version of the assestions using aliases for should et al.
+- Q: FYI, you may find this helpful for running Emacs tests/lints,
+ both from a command line and from within Emacs with a Transient
+ menu: <https://github.com/alphapapa/makem.sh>  It also works on
+ remote CI.
+ - A: Thanks for the suggestion. I did have a look at makem.sh but
+ a long time ago so I don't remember why we did not try to apply
+ it. I might give it another look now when I have used plain ert
+ more.
+- Q: Is it easy to run ad hoc tests inside of an Emacs session, given
+ the command line scripts you need to run to get a batch test session
+ running? In other words, can you tweak tests in an Emacs session and
+ run them right away?
+ - A: 
+ - Yes, in principle you just load your tests and run them all
+ using `ert` and give it the test selector `t`. That runs
+ all loaded tests. 
+ - If you want to modify a test you can do that. You change it,
+ evaluate it, and run it again. Just as you change any
+ function.
+- Q: Did you have to change Hyperbole code and design to be more
+ readily testable as you were increasing your test coverage?
+ - A: 
+ - Yes, we have done that to a small extent but we should do
+ more of that. Some Hyperbole functions are large and by that
+ complicated to test. Splitting them into smaller logical
+ parts can make testing easier. 
+ - Also moving code into pure functions and avoid side effects
+ is a good thing. Pure functions are easier to test. Maybe
+ haveing the side effects separated out into fewer places.
+ This has not been applied but is something I have been
+ thinking about. With side effects I here mean things like
+ adding or modifying text in buffers. 
+- Q: What's the craziest bug you found when writing these tests?
+ - A: This is not a bug but I always assumed giving a prefix
+ argument to a cursor movement would give the same result as
+ hitting the key the same amount of times. So like C-u 2 C-f
+ would be the same as hitting the C-f key twise. It is not! When
+ moving over a hidden area, the three dots '...' at the end of
+ folded line in org-mode or outline-mode, you get different
+ behavior. Trying to write a test case for the kotl-mode and its
+ folded behavior teached me that.
+- Q: Why do you prefer el-mock to mocking using cl-letf. (Question
+ asked in BBB)
+ - - With cl-letf you need to keep track if the mocked
+ functionality is being called or not. The el-mock package
+ does that for you which is what you normally want. Doing
+ this with cl-letf means the definition becomes longer and
+ more complicated. Sort of blurs the picture. el-mock is more
+ to the point.
+ - BUT since cl-letf does allow you do define a "new"
+ function it is more powerful and it can be the only option
+ in cases where el-mock is too limited. So it is good to know
+ of this possibility with cl-letf when el-mock does not
+ provide what you need.
+
+
+[[!inline pages="internal(2023/info/test-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/test-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/unentangling.md b/2023/talks/unentangling.md
new file mode 100644
index 00000000..14993980
--- /dev/null
+++ b/2023/talks/unentangling.md
@@ -0,0 +1,166 @@
+[[!meta title="(Un)entangling projects and repos"]]
+[[!meta copyright="Copyright &copy; 2023 Alexey Bochkarev"]]
+[[!inline pages="internal(2023/info/unentangling-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# (Un)entangling projects and repos
+Alexey Bochkarev (he/him) - <https://www.bochkarev.io>, @bochkarev@qoto.org (Mastodon)
+
+[[!inline pages="internal(2023/info/unentangling-before)" raw="yes"]]
+
+Emacs provides a few excellent tools for working on projects through
+all their key stages. Orgmode is great for brainstorming, structuring
+and maintaining TODO lists, tracking time, organizing notes, and
+writing memos or reports. Many major modes help writing code, magit
+makes version control almost frictionless, and projectile helps with
+project management and navigation. However, I found a few situations
+when I wanted to separate the concepts of "project" and "source
+storage" (say, having a few version control repositories associated
+with a single "generalized project").
+
+In this talk, I would like:
+
+1. to describe a specific example of such situation,
+
+2. discuss a workflow aimed at managing such "generalized" projects
+and present my solution, based on a very simple ELisp "glue" on top of
+the functionality provided by package projectile.
+
+For example, consider a research project (think: applied mathematics with
+a heavy part of computational experiments). It might consist of:
+
+- The ``paper'' draft: some sort of final report source, usually in
+ LaTeX format, or orgmode exported to PDF via LaTeX. Version controlled
+ by git.
+
+- Numerical experiments: a separate folder, or even a separate git
+ repo. Contains the source code for numerical experiments and the
+ related technical documentation. Will be published along with the
+ paper.
+
+- A collection of intermediate memos (notes) sent to collaborators.
+
+- A collection of "raw" notes (lab journal), regarding what did I try
+ and especially what did NOT work and in which ways.
+
+This setting raises a few problems that all boil down to the necessity
+of having an easily accessible private notes file(s) associated with a
+few repositories at the same time outside of these repos. This way one
+can:
+
+- Maintain more granular project structure and TODOs while still having
+more concise TODO lists for the colleagues on a per-repository basis.
+
+- Maintain (project-specific) private technical notes, and maybe a full
+ lab journal both describing the "big picture" of the project and
+ containing the technical information.
+
+- Keep time tracking data private and outside of the source repositories,
+
+- Capture thoughts and TODOs to a single place from across a few
+ specific repositories.
+
+I propose to solve this problem by associating a single "notes folder"
+and a main `.org` file to each repository using the standard mechanism
+of directory-local variables on top of what is already provided by
+projectile package.
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: Do you use these unentangling techniques in a blog or hosting a
+ zettelkasten?
+ - A: Well, I try to keep my "private notes" in something that
+ might qualify as a Zettelkasten, yes. I wouldn't say I 'host'
+ it --- it's not online. But yes, the whole point is that
+ these "private" notes are interconnected in a Zettelkasten-y
+ way (using org-roam package)
+ - Denote notes Silo features might be useful with your
+ workflow
+ - <https://protesilaos.com/emacs/denote#h:e43baf95-f201-4fec-8620-c0eb5eaa1c85>
+ - oh, thanks --- I'll have a look!
+- Q: What is the biggest unhappiness you haven't figured out for your
+ current workflow?
+ - A: Maybe I am still on the fence re: where do I structure my
+ TODOs and clock time. I tried to play around with the idea that
+ I structure the work in a repo, and then when I "clock in" it
+ saves time to a separate notes file instead... but it seemed a
+ little too complicated, to my taste.
+ - I feel that the time tracking also kind of annoying,
+ especially you forgot to clock on and all the things mess
+ up. So right now I'm just using a Pomodoro technique, 25
+ minutes, done, rest, 25 minutes, rest, and kind of repeating
+ that. And I'm quite happy with that.
+ - wait, what's that? 'org-pomodoro'?. sounds
+ interesting...
+ - It's not, you know, special for Org Mode. It's
+ kind of a general technique which you focus on a
+ small task for just 25 minutes, but at the time
+ you're super focused, 100% focused, and after that
+ five minutes you rest, and you're kind of repeating
+ these patterns over long sections. You can do four,
+ five, six of those sections, and it helps me to
+ focus over relateive long time.
+ - I also feel this might be something really
+ useful. Just haven't found a way to incorporate
+ it into my workflow
+ - for me it's quite simple is I can just use
+ a simple stopwatch that every 25 minutes
+ stop and reminde me  a rest. I believe
+ there's a lot of fancy clock specialized on
+ this this type of technique it's at the
+ core of this concept is really not a complex
+ idea.
+ - wait, I'm confused. So, that's outside
+ Emacs right? :-)
+ - Yes, the concept is outside of
+ Emacs, but I saw people using this
+ package. Let me search,:
+ <https://github.com/marcinkoziej/org-pomodoro>
+ <-- yeah, that one. Maybe I'll
+ have a look, thanks!
+ - Yeah, it's, again, if you're
+ familiar with the sports, it's
+ kind of making your long hard
+ working, breaking into a small
+ section, but I feel it's, you
+ have more kind of energy over a
+ long term, yeah.
+ - I like Using a weekly GTD log files for my TODO. That way I
+ can look back at them and not have my GTD to big. I like to
+ pull daily tasks from agenda
+ - and what do you do to transfer stuff between the weeks
+ --- a manual review? 
+- Q: Do you use project.el features as well, or just projectile.el
+ ones?
+ - A: Ugh. OK, I am at that point where I am not sure any more ;)
+ it is pretty well integrated to my Doom Emacs, so I am not sure
+ which one is that...
+
+## Notes
+
+- GNU Hyperbole already supports this with directory-specific quick
+ access button files (which can be Org files).  These can connect to
+ any number and type of document artifacts, including projects,
+ repos, directories, etc.  You don't need to put any code in
+ dir-locals either.  The directory/project-specific tags jumping
+ (automatically selecting appropriate TAGS files) is also built-in.
+ Have a look.
+ - Yes, there's clearly a few ways to achieve this. I have a
+ feeling Hyperbole achieves this, and much more. I wanted to have
+ something simpler, somehow.   (Yes, you seem to have some very
+ efficient techniques down; maybe you could utilize both). 
+ Thanks for the talk, it was good. Thanks for the suggestion,
+ tho!
+
+
+[[!inline pages="internal(2023/info/unentangling-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/unentangling-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/uni.md b/2023/talks/uni.md
new file mode 100644
index 00000000..11d45730
--- /dev/null
+++ b/2023/talks/uni.md
@@ -0,0 +1,167 @@
+[[!meta title="Authoring and presenting university courses with Emacs and a full libre software stack"]]
+[[!meta copyright="Copyright &copy; 2023 James Howell"]]
+[[!inline pages="internal(2023/info/uni-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Authoring and presenting university courses with Emacs and a full libre software stack
+James Howell
+
+[[!inline pages="internal(2023/info/uni-before)" raw="yes"]]
+
+Resources: <https://git.sr.ht/~jamesendreshowell/org-teach>
+
+Relying exclusively on free and open source software for teaching science courses at a large university? With GNU Emacs at the center of these
+workflows? It's not only possible, it's much more flexible and empowering than being locked into proprietary platforms. We will step through the
+entire software stack and workflows for authoring and presenting lessons, authoring and evaluating assessments, and engaging students both in
+person and in fully online teaching environments.
+
+About the speaker:
+
+James Endres Howell has taught Molecular and Cell Biology,
+Biochemistry, Microbiology, Immunology, Toxicology, and Molecular
+Medicine at Penn State since 2006. Recently Dr. Howell has developed
+popular courses for non-science majors in Genetics, Ecology and
+Evolution; Science in Literature; and Science in Society. He has used
+Emacs daily since 1988.
+
+# Discussion
+
+## Notes
+
+- I'm digging the weather-report style with your pointing at the screen :)
+- I'm using org-mode to study for exams rather than present lectures recently btw. I like to copy questions in the org file and add notes as I work through the questions on paper.
+- Q: do you use org-present or something like that?
+ - A: Nope, just a normal Org buffer. I have a few custom keybindings for narrowing to headlines and such, when I do use Emacs for presenting. (Coming up in a few slides)
+- Next step: libre hardware :)
+- ahh he broke the fourth...fifth?...wall! :)
+- bookmarking xournal+++ for sure
+- Living dangerously now. :-)
+- he's definitely a wizard!
+- OBS looks very useful. Must explore.
+- I had never thought of using OBS for presentations like that... this has to be the slickest setup there is
+- my students all seem to come to class with tablets these days and they annotate the PDF of all of my slides. When I realised they were doing this, I decreased the density of material on each slide to ensure there was enough space for their notes.
+- macros are a very powerful and useful feature of org for complex documents!
+
+- Feedback
+- Damn, this looks really really useful
+- This presentation is damn cool, LOL.
+- excellent talk! Thank you.
+- Thanks for the talk, it was very interesting!!
+- Fantastic. I think this talk will be a reference for years to come!
+- Great stuff!
+- You are one of my heroes now! 👏👏👏👏👏
+- Brilliant talk James, inspiring stuff
+- Great system!
+
+
+
+
+- Download the handout (27MB PDF):
+ - <https://git.sr.ht/~jamesendreshowell/org-teach/blob/master/EmacsConf_2023_Howell_handout.pdf>
+- The whole repository:
+ <https://git.sr.ht/~jamesendreshowell/org-teach>
+- Resolution kinda low. 
+ - No, sorry! It was the best I was able to record.
+ - okay, it's fine.
+- OBS is cool.
+- I use pdfpc (can also present and draw, but command line) -
+ <https://pdfpc.github.io/>
+ - Also, pdfpc supports videos/animations in presentations :)
+ - Hm! I will look into it!
+- Kinda mute?
+ - I don't know why!
+- On publishing lectures/books - another classic example is John
+ Kitchin's <https://github.com/jkitchin/dft-book>
+ - Kitchin is a monster! He must have made a deal with the devil or
+ something.
+ - I suspect that it is what Assistant Prof position does to
+ people
+- Pedagogy first "development"
+ - Materials must provide a way to take notes on
+ - Separate the work of writing/developing/scaffolding from slide
+ wrangling
+ - THe org-teach allows for grabbing a slide from another
+ repository (e.g. don't repeat knowledge)
+- If you want to highlight org mode documents you can use
+ <https://github.com/nobiot/org-remark>. If you use Org Remark with
+ <https://github.com/alphapapa/org-web-tools> you can get an offline
+ backup af a web page that you can highlight and edit
+ - Wow. I will look into these.
+- Macros are a cool idea!
+ - Are org-mode macros a new concept/learning for you?
+ - Surely not (I am a contributor). But it is a new idea to use
+ them for beamer presentations.
+ - Yeah, I loved see other ways folks use macros.  I've
+ done some of that for Beamer, but only recently.
+- I use org-transclusion
+ (<https://github.com/nobiot/org-transclusion>) for include other
+ document.
+ - It sounds like the include other file might be for including
+ non-org-mode files; does org-transclusion provide that
+ functionality?
+ - yep~, quit powerful.
+ - :)
+ - opps, I double check the manual. It seems mainly for
+ human readable source code (txt, md, source code). I
+ don't think it works with Pdf ...
+- OBS TIP -- You can use an android app like OBS Blade to control obs
+ from android
+ - Cool, thanks!
+- CRDT.el <https://code.librehq.com/qhong/crdt.el> -- This can allow
+ multiple people with thier own Emacs Configs to edit a hosted emacs
+ buffer at the same time
+ - Awesome
+
+## Questions and answers
+
+- Q: I'm curious how the xournal stylus work is composited with OBS
+- Q: that entire screen was xournal at the time? I was thinking the slide was a different screen / software
+ - A: All the slides are presented via Xournal++. The "slides" frame is video capture from the tablet, running Xournal++.
+- Q: Do you have a fancy OBS scene changer to switch between the software being presented?
+ - A: I just map scenes to function keys on the keyboard.
+- Q: How you overlap yourself with the presenation? It's so cool.
+ - A: OBS provides a chroma key "filter"
+ - it's so cool! with DNA demo.
+- Q: How you deal with Video in Beam? I found it's so hard to do
+ that. PPT on the other hand is so easy to achieve.
+ - A: I use Beamer export to make static slides, that I present via
+ Xournal++. Videos, I present via VLC. So I use OBS to switch
+ back and forth between Xournal, VLC, Firefox, etc.
+ - The above-mentioned pdfpc provides a LaTeX package to link
+ videos right to pdf (battle-tested on conferences ;))
+ - Thanks, I will have a try.
+ - Thank you!
+- Q: Do you ever use things like Org Presnet and stay forgo powerpoint
+ slidees
+ - A: I've tried them but my core need is to annotate PDFs with
+ the stylus in real time, so the best solution is Xournal++
+- Q: Is the {{{ }}} syntax an Org Mode core feature that I have missed
+ so far, or did you program that? (Btw, thank you for the great
+ talk🙏)
+ - A: <https://orgmode.org/manual/Macro-Replacement.html>
+ - Some export backends allow for conditionals in the macro
+ replacement; when exporting to Hugo you can add an @@hugo
+ within the resolved macro.
+ - @@backend:...@@ is a separate construct - you do not
+ have to use it in combination with macros. For example,
+ see @@html example in
+ <https://orgmode.org/manual/Quoting-HTML-tags.html>
+ - Thank you very much, I'll definitively look into this🙏
+- Q: What kind of (comparative) feedback are students giving you
+ regarding your approach?
+ - A: They love it! All accounts were that my courses were much
+ more successful than other instructors'.
+- Q: You also teach English at Uni? cool
+ - A: Yes, it's a fun course.
+- Q: Is the input from the Surface captured by OBS and all of that
+ combined goes to Jitsi or Zoom? Correct?
+
+
+[[!inline pages="internal(2023/info/uni-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/uni-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/voice.md b/2023/talks/voice.md
new file mode 100644
index 00000000..2c5c537f
--- /dev/null
+++ b/2023/talks/voice.md
@@ -0,0 +1,216 @@
+[[!meta title="Enhancing productivity with voice computing"]]
+[[!meta copyright="Copyright &copy; 2023 Blaine Mooers"]]
+[[!inline pages="internal(2023/info/voice-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+# Enhancing productivity with voice computing
+Blaine Mooers (he/him/his) - Pronunciation: pronounced like "moors", blaine-mooers(at)ouhsc.edu, <https://basicsciences.ouhsc.edu/bmb/Faculty/bio_details/mooers-blaine-hm-phd>, <https://twitter.com/BlaineMooers>, <https://github.com/MooersLab>, <https://codeberg.org/MooersLab>, mastodon(at)bhmooers
+
+[[!inline pages="internal(2023/info/voice-before)" raw="yes"]]
+
+[[!template id="help"
+volunteer=""
+summary="Q&A could be indexed with chapter markers"
+tags="help_with_chapter_markers"
+message="""The Q&A session for this talk does not have chapter markers yet.
+Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="voice-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]]
+
+Voice computing uses speech recognition software to convert speech into text, commands, or code.
+While there is a venerated program called EmacSpeaks for converting text into speech, an
+``EmacsListens'' for converting speech into text is not available yet.
+The Emacs Wiki describes the underdeveloped situation for speech-to-text in Emacs.
+I will explain how two external software packages convert my speech into text and computer
+commands that can be used with Emacs.
+
+First, I present some motivations for using voice computing.
+These can be divided into two categories: productivity improvement and health-related issues.
+In this second category, there is the underappreciated cure for ``standing desk envy'';
+the cure is achievable with a large dose of voice computing while standing.
+
+I found one software package (Voice In) to be quite accurate for speech-to-text or dictation
+(Voice In Plus, <https://dictanote.co/voicein/plus/>), but less versatile for speech-to-commands.
+I have used this package daily, and I found a three-fold increase in my daily word count almost
+immediately.
+Of course, there are limits here; you can talk for only so many hours per day.
+
+Second, I found another software package that has a less accurate language model (Talon Voice,
+<http://talon.wiki/>)) but that supports custom commands that can be executed anywhere you can
+place the cursor, including in virtual machines and on remote servers.
+Talon Voice will appeal to those who like to tinker with configuration files, yet it is easy to
+use.
+
+I will explain how I have integrated these two packages into my workflow.
+I have developed a library of commands that expand 94 English contractions when spoken.
+This library eliminates tedious downstream editing of formal prose where I do not use
+contractions.
+The library is available on GitHub for both Voice In Plus
+(<https://github.com/mooersLab/voice-in-plus-contractions>) and Talon Voice
+(<https://github.com/MooersLab/talon-contractions>).
+
+I also supply the interactive quizzes to master the basic Voice In commands
+(<https://github.com/MooersLab/voice-in-basics-quiz>) and the Talon Voice phonetic alphabet
+(<https://github.com/MooersLab/talon-voice-quizzes/qTalonAlphabet.py>)
+I learned the Talon alphabet in one day by taking the quiz at spaced intervals.
+The quiz took only 60 seconds to complete when I was proficient.
+
+I store my daily writing in a multi-file LaTeX document with one tex file per day.
+365 files are compiled into one PDF per year. This is usually about 1000 pages.
+I am not going to push my luck with a multiyear document.
+Each month is a chapter. The resulting PDF is a breeze to scroll and search.
+It has an autogenerated table of contents and an index. I have posted
+a blank version for 2023 and another for the upcoming year
+(<https://github.com/MooersLab/diary2024inLaTeX>)
+One could take a similar approach in org-mode by using Bastian Bechtold's
+org-journal package (<https://github.com/bastibe/org-journal>).
+
+I gave a 60-minute talk on this topic to the Oklahoma Data Science Workshop
+2023 Nov. 16 (<https://mediasite.ouhsc.edu/Mediasite/Channel/python>).
+This workshop meets once a month and is for people interested in data
+science and scientific computing. You do not have to be an Oklahoma
+resident to attend. Send me e-mail if you want to be added to our mailing list.
+
+# About the speaker:
+
+I am an Associate Professor of Biochemistry at the University of
+Oklahoma Health Sciences Center. I use X-ray crystallography to study
+the structures of RNA, proteins, and protein-drug complexes. I have
+been using Python and LaTeX for a dozen years, and Jupyter Notebooks
+since 2013. I have been using Emacs every day for 2.5 years. I
+discovered voice computing this summer when my chronic repetitive
+stress injury flared up while entering data in a spreadsheet. I
+tripled my daily word count by using the speech-to-text, and I get a
+kick out of running remote computers by speech-to-command.
+# Discussion
+
+## Questions and answers
+
+- Q:  Comment there is a text to command thing called clipea that
+ would be awesome <https://github.com/dave1010/clipea>
+ - A: <https://sourceforge.net/projects/sox/> also a good
+ alternative.
+- Q: Could you comment on how speaking vs. typing affects your
+ logic/content.  Thanks!
+ - A: I find that this is like the difference between writing your thoughts
+ down on a blank piece of printer paper versus paper bound with a
+ leather notebook. I do not think there has any real difference. I know
+ that some people believe there is a solid certain difference but this
+ is, for the purpose I am using this, for the purpose of generating the
+ first draft, because my skills with the-- using my voice to edit my
+ text is still not very well developed, I am still more efficient using
+ the keyboard for that stage.
+
+ So the hardest part about
+ writing generally is getting the first crappy draft written. I
+ have found that dictation is perfectly fine for that phase. I
+ find it actually very conducive for just getting the text out. The
+ biggest problem that most of us have is applying our internal editor and
+ that inhibits us from generating words in a free-flowing
+ fashion.
+
+ I generally do my generative writing--actually, I divide my writing
+ into two categories: generative writing (generating the first crappy
+ draft) and then rewriting. Rewriting is probably 80-90% of writing
+ where you can go back and rework the order of the sentences, order of
+ paragraphs, the order of words in a sentence and so forth. It is
+ really hard work that is best done later in the day when I am more
+ awake. I do my generative writing first thing in the morning when I am
+ feel horrible. That is when my internal editor is not very awake and I
+ can get more words out more words past that gatekeeper. I can do this
+ sitting down. I can do this standing up. I can do this 20 feet away
+ from my computer looking out the window to get my eyes a break. I find
+ it is just a very enjoyable to use it in this fashion. The downside is
+ that I wind up generating three times as much text. That makes for
+ three times as much work when it comes to rewriting the text, and that
+ means I am using the keyboard a lot and later on in the day.
+
+ I have not made any progress on recovering from my own repetitive
+ stress injury. I hope that I will add the use of voice commands,
+ speech-to-commands, for editing the text in the future and I will
+ eventually give my hands more of a break.
+
+ This allows you to actually separate those two activities not only by
+ time... So many professional writers will spend several hours in the
+ morning doing the generative part and then they will spend the rest of
+ the day rewriting. They have separated this to activities temporally.
+ What most people actually do is they they do the generative part and
+ then they write one sentence, and they apply that internal editor
+ right away because they want to write the first draft as a perfect
+ version, as a final draft, and that is what slows them down
+ dramatically.
+
+ This also allows you to separate these two activities in terms of
+ modality. You are going to do the generative writing by Voice In, the
+ rewriting by keyboard. I think this is like what most people... One way
+ that many people can get into using speech-to-text in a productive way
+ that sounds great...
+ - A: (not the author, just an audiance): So, for example, when
+ you're talking, you have an immense feeling of the topic you
+ have. You can close your eyes and do your body gestures to
+ manipulate a concept or idea, and you have... I just feel you
+ feel more creative than just tapping. Definitely you have much
+ more speed advantage over tapping, but more important thing is
+ you use your body as a whole to interact with those ideas.
+ [this one is done via voice...]
+ - but typing is definitely good for acturate control, such as
+ M-x some-command ...
+- Q: Have you tried the ChatGTP voice chat interface, if so how has
+ been your experience of it? As someone experienced with voice
+ control, interested to hear your thoughts, performance relative to
+ the open source tools in particular.
+ - A: I do not have much experience with that particular software. I have
+ use Whisper a little bit, and so that is related. Of course, you have
+ this problem of lag. I find that Whisper is good for spitting out a
+ sentence maybe for a docstring and a programming file. I find that it
+ is very prone to hallucinations. I find myself spending half my
+ time deleting the hallucinations, and I feel like the net gain is
+ diminished as a result, or there has not much of a net gain in terms of
+ what I am getting out of it.
+- Q: Are any of these voice command/dictions freemium?
+ - A: To be able to add custom commands, you have to pay
+ $48 a year. The Talon Voice software is free and the only
+ limitation there is access to the language model. If you want to get
+ the beta version, you need to subscribe to Patreon to support the
+ developer. I did that, and I really did not find much of
+ an improvement. I really do not intend to do that in the future.
+ But otherwise in Talon Voice, everything is open and free. The Slack
+ community is incredibly welcoming. Its parallels with
+ the Emacs Community are pretty striking.
+- Q: How good is Talon compared to whisper?
+ - A: With Talon, I find that the first part of the sentence will
+ be fairly accurate. When I am doing dictation and then towards
+ the end, the errors... In general, I think its error rate is
+ about five words out of 100 or so or will be wrong. Whisper is
+ wonderful because it will insert punctuation for you, but I
+ guess its errors are longer and that will hallucinate full
+ sentences for you. So they both have significant error rates.
+ They are just different kinds of errors. Hopefully, both over
+ time... [Talon] errors are generally shorter in extent. It do
+ not hallucinate as long.
+- Q: are any of those voice command/dictation tools libre? i can not find that information on the web
+ - (not the speaker):
+ - this FAQ <https://talon.wiki/faq/> says that Talon Voice is closed source
+ - talon voice is non-free <https://talonvoice.com/EULA.txt>
+ - Mistral 7B is apache 2.0 license i.e. no restrictions
+
+
+## Notes
+
+- From the speaker: I really appreciate the high level of accuracy that I am getting from
+Voice In. I would use Talon Voice for dictation, but at this point,
+there is a significant difference between the level of accuracy of
+Voice In versus Talon Voice. It's large enough of a difference that I'll
+probably use Voice In for a while until I can figure out how to get
+Talon Voice to generate more accurate text.
+- When you do Org mode and you have the bullets, it can allows you to naturally shard your thoughts in a way that is really easy to edit. ... It has a
+summarizing capability. It allows you to you know pull back and get a
+overview.
+- Great stuff, definitely going to test-drive Talon
+
+
+[[!inline pages="internal(2023/info/voice-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/voice-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/web.md b/2023/talks/web.md
new file mode 100644
index 00000000..f4b05d7e
--- /dev/null
+++ b/2023/talks/web.md
@@ -0,0 +1,147 @@
+[[!meta title="Emacs saves the Web (maybe)"]]
+[[!meta copyright="Copyright &copy; 2023 Yuchen Pei"]]
+[[!inline pages="internal(2023/info/web-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs saves the Web (maybe)
+Yuchen Pei (he/him, pronounced: "eww-churn pay"), IRC: dragestil, <mailto:id@ypei.org>, <https://ypei.org>, mastodon: dragestil@hostux.social
+
+[[!inline pages="internal(2023/info/web-before)" raw="yes"]]
+
+On one hand, Emacs is the crown jewel of the GNU Project for its
+customisability and the ability to effortlessly convert users to
+hackers. On the other hand, today many of the sticky issues with
+proprietary software proliferation stems from the web, including the
+Javascript trap[1] on the client side and the SaaSS trap[2] on the
+server side. So enters the topic of this talk. I will briefly talk about
+these issues and existing non-emacs solutions, followed by ideas and
+demonstrations on how Emacs can fix user freedom on the web, including:
+emacs clients for specific websites and services, emacs-based browsers
+aka universal frontends, transformer of emacs packages to web apps and
+firefox browser extensions, and more.
+
+- [1] <https://www.gnu.org/philosophy/javascript-trap.html>
+- [2] <https://www.gnu.org/philosophy/who-does-that-server-really-serve.en.html>
+
+Projects and tools mentioned in the talk:
+
+- LibreJS <https://gnu.org/s/librejs>
+- lynx <https://lynx.invisible-island.net>
+- noscript <https://NoScript.net>
+- GreaseMonkey <https://www.greasespot.net/>
+- Haketilo <https://haketilo.koszko.org>
+- mitmproxy <https://mitmproxy.org>
+- Invidious <https://invidious.io>
+- youtube-dl <https://youtube-dl.org>
+- libretube <https://libre-tube.github.io>
+- newpipe <https://newpipe.net>
+- woob <https://woob.tech/>
+- Redirector <http://einaregilsson.com/redirector/>
+- libredirect <https://libredirect.github.io>
+- openwith <https://addons.mozilla.org/addon/open-with/>
+- mastodon.el <https://codeberg.org/martianh/mastodon.el>
+- mastorg <https://g.ypei.me/dotted.git/tree/emacs/.emacs.d/lisp/my/mastorg.el>
+- sx.el <https://github.com/vermiculus/sx.el>
+- buildbot.el <https://g.ypei.me/buildbot.el.git/about/>
+- emacs-hnreader <https://github.com/thanhvg/emacs-hnreader>
+- emacs-w3m <https://emacs-w3m.github.io/>
+- luwak <https://g.ypei.me/luwak.git/about/>
+- url-rewrite <https://g.ypei.me/url-rewrite.git/about/>
+- wkhtmltopdf <https://wkhtmltopdf.org>
+- pdf-tools <https://github.com/vedang/pdf-tools>
+- emacs-web-server <https://elpa.gnu.org/packages/web-server.html>
+- yolo.el <https://g.ypei.me/dotted.git/tree/emacs/.emacs.d/lisp/my/yolo.el>
+- bom.el <https://g.ypei.me/bom.el.git/about/>
+
+About the speaker:
+
+Yuchen is a computer programmer, mathematician and free software
+advocate based in Melbourne, Australia. He is addicted to writing
+Emacs packages[3], of which a few has made into ELPA. He likes to
+claim to be the only free software advocate in Australia, in the hope
+that someone will correct him and point him to fellow comrades
+fighting for user freedom in Oz.
+
+- [3] <https://g.ypei.me>
+# Discussion
+
+## Questions and answers
+
+- Q: I like the idea of using org mode to display data from the web.
+ Are there many different packages that does that? (I am newish to
+ Emacs, so maybe this is obvious to everyone else.)
+ - A: dragestil uses roughly 10 packages that display data from the
+ web.  Roughly half of them are org-mode based
+- Q: Have you tried EAF (Emacs Application Framework) and its browser?
+ If yes, what is your opinion about it?
+ - A: No I haven't. My impression is it would run javascript by
+ default. Not sure whether it has any extensions to block js. A
+ nice comparison between different browsers including EAF, nyxt
+ and emacs-webkit can be found in the readme file of
+ <https://github.com/akirakyle/emacs-webkit>
+- Q: I find the JavaScript trap almost impossible to avoid since I
+ like to buy used stuff online and use my online bank. How do you
+ deal with the JavaScript trap? I use NoScript and compromise on the
+ few things I really feel I cannot live wihtout. Eww is nice for a
+ lot of things, especially with R for less noise, but I need Firefox
+ for those JS-entrapped pages...
+ - A: Unfortunately I don't have a solution for that. I run
+ nonfree javascript when doing banking or online shopping, though
+ in a more isolated environment (mullvad browser) with a VPN.
+ It's a tiny portion of my online activity (<.1% I suppose), so
+ it's not *that* bad
+ - However, that does not mean emacs cannot help. woob has a few
+ clients interfacing with online banking, so perhaps at least
+ some banks allow the possibility of non-js client. It would be
+ good to look into this.
+- Q: This is not really relevant to the talk, but I am curious about
+ your nickname. Do you have some connection to Norway? Your nick
+ indicates an interest in the architectural style inspired by the
+ decoration on viking ships that was popular in the early 20th
+ century. dragestil = dragon style
+ - A: dragestil is my favourite architectural style. Look at these
+ images on wikipedia <https://en.wikipedia.org/wiki/Dragestil> -
+ aren't they gorgeous? I've only seen one of these famous ones
+ in real life, the Buksnes Church on Lofoten Islands.
+- Thoughts about Nyxt; about its aims, its approach, its relevance,
+ etc.?
+ - Very early on, ran into issues with keybindings. More
+ specifically, some conflicts between binding j to follow-hint in
+ document mode and C-s/C-r to next-suggestion/previous-suggestion
+ in prompt buffer mode. Did not continue with trying nyxt because
+ keybindings are basic functionalities IMO. Might revisit
+ someday. nyxt has a noscript-mode btw that blocks javascript. A
+ nice comparison between different browsers including EAF, nyxt
+ and emacs-webkit can be found in the readme file of
+ <https://github.com/akirakyle/emacs-webkit>
+- Q: so trying to understand, is emacs being used as a web proxy to scrub potentially privacy attacking JS?
+- Q: Anyone else here has experimented with Nyxt? I haven't much, but can't say there's not an overlap with some of the ideas of Emacs and all. Just curious.
+ - Not the speaker:
+ - I recommend qutebrowser over nyxt. For me it was just easier to use, customize and has better user experience.
+ - I do/did too. But then it occurred to be that a very simple locally-loaded extension might very well be able to transform any of the major browsers into 99 + of Nyxt when paired with an Emacs backend (and websocket async bidirectional communication between the two)... (when said extension is made of a service worker part and a per-page part, to access both browser-level API/state, and page-level DOM, with just these two bits) e.g. could expose/present open tabs as pseudo-buffers (à la "virtual buffers/files"), candidates for completion, and such
+
+## Notes
+
+- mastorg for mastodon
+- hacker news in org mode
+- emacs-web-server for hosting things from Emacs
+- Dang, this is really a great demo.
+- I love how he's using org-mode to do it all.
+- It might actually save the web!
+- Emacs as a Firefox extension!!! Ha!
+- Definitely some interesting ideas in that one, and the literate form is top-notch. Warrants a focused rewatch for me (back-n-forth between 2 talks is not conductive to my best focus it seems...)
+- I *really* like Org-Babel as a bridge to make complex one-off tasks ("why did the stuff in the database get into this state?" type things, usually) reproduceable and version-controlled.
+ - Hear hear! Howard's talks over the years have converted me to do pretty much anything in Org-mode in literate form at this point :)
+- I use org-babel for recurring tasks that I need to remember. Things I have to run once a month, etc. I guess I could use cron, but usually they aren't really time sensitive enough. Or they are things like clearing my mu4e trash, which requires that I quit mu4e.
+- "It's not Emacs!" Ha!
+
+
+
+[[!inline pages="internal(2023/info/web-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/web-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/windows.md b/2023/talks/windows.md
new file mode 100644
index 00000000..1dd47f8b
--- /dev/null
+++ b/2023/talks/windows.md
@@ -0,0 +1,70 @@
+[[!meta title="Windows into Freedom"]]
+[[!meta copyright="Copyright &copy; 2023 Corwin Brust"]]
+[[!inline pages="internal(2023/info/windows-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Windows into Freedom
+Corwin Brust (He/Him) - Core-win Brew-st, IRC: corwin, <mailto:corwin@bru.st>
+
+[[!template id="help"
+summary="main talk does not have captions"
+tags="help_with_main_captions"
+message="""This talk does not have captions yet.
+Would you like to help [caption this talk](/captioning)?
+You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt)."""]]
+
+
+[[!inline pages="internal(2023/info/windows-before)" raw="yes"]]
+
+- A Brief History of the windows port
+
+ When (and why?) was the windows port added? Was that contentious? How
+ about now? (5m)
+
+- Acquire Binaries
+
+ There are lots of ways for Windows users to get pre-compiled Emacs
+ binaries. I'll mention some and get into the particulars of Emacs as
+ found on GNU FTP. (2m)
+
+- Build Sources
+
+ I'll talk about how building for Windows differs from building for
+ other platforms, where to find documentation, important configuration
+ options to consider, requirements for the build machine. After that
+ I'll show build commands and good and not-so-good outputs, ultimately
+ covering the complete process, both using the latest release tarball
+ (from GNU FTP) as well as for building the main development branch
+ from emacs.git (hosted on GNU Savannah). (20m)
+
+- Make an Installer
+
+ I'll show how to use the NSIS script contained within
+ admin/nt/dist-build in the Emacs source tree to create an executable
+ self-installer of Emacs for Windows. (2m)
+
+- Share
+
+ I'll describe the requirements of the GNU Public License as related to
+ sharing binary versions of Emacs, and talk about what I do to comply,
+ command by command. (1m)
+
+- Automate
+
+ I'll introduce scripting I use to automate publishing binaries
+ tracking a given Emacs branch, and a couple other related tools, thus
+ recapping most topics. (10m)
+
+# Discussion
+
+- I can't imagine cross-compiling Emacs for Windows on Linux is easy, but sounds "fun".
+
+
+[[!inline pages="internal(2023/info/windows-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/windows-nav)" raw="yes"]]
+
+
diff --git a/2023/talks/world.md b/2023/talks/world.md
new file mode 100644
index 00000000..b0916167
--- /dev/null
+++ b/2023/talks/world.md
@@ -0,0 +1,98 @@
+[[!meta title="GNU Emacs: A World of Possibilities"]]
+[[!meta copyright="Copyright &copy; 2023 Anand Tamariya"]]
+[[!inline pages="internal(2023/info/world-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# GNU Emacs: A World of Possibilities
+Anand Tamariya
+
+[[!inline pages="internal(2023/info/world-before)" raw="yes"]]
+
+- Draw and scribble in GNU Emacs 3:46
+- SVG Symbols library 1:34
+- GNU Emacs: A multimedia editor 2:45
+- Fill PDF form using GNU Emacs 1:32
+- Desktop and window management in GNU Emacs 1:36
+- Screen mirroring in GNU Emacs 0:43
+- Swipe for Text Input in GNU Emacs 0:33
+- Formula Editor in GNU Emacs 0:35
+- Transliteration in Emacs
+- Social Media client - Tumblr, reddit (slide)
+- Comics Builder (slide)
+- Matching game (slide)
+
+GNU Emacs as a lightweight IDE (CEDET Semantic)
+
+- Interactive XPath Builder in GNU Emacs 0:12
+- Interactive JSON Builder in GNU Emacs (slide)
+- Java - Generate getter/setter 0:52
+- Generate C header 0:45
+- C Rename symbols 0:56
+- SQL (offline) 3:15
+
+19:04
+
+GNU Emacs for Electronics
+<https://www.youtube.com/playlist?list=PLW9poAEUvGDC7ZWO69qrwRMqdW2xYLsGt>
+
+GNU Emacs for Note taking
+<https://www.youtube.com/playlist?list=PLW9poAEUvGDDxCZX-3xIQ3Wb1HOVcg7N>_
+
+GNU Emacs as a lightweight IDE
+<https://www.youtube.com/watch?v=d14tLD5XiCU&list=PLW9poAEUvGDAMYvvznljaNtvooaJZxsFQ&pp=gAQBiAQB>
+
+
+# Discussion
+
+## Questions and answers
+
+- Q: A lot of what you showd was the type of stuff Emacs didn't do
+ very well. This stuff looks like it could be useful for using Emacs
+ with a touchscreen and in a tablet. Have you used it for purposes
+ like these
+ - A:
+- Q: Is there a mode for using ffmpeg through Emacs or did you make it
+ yourself? Really cool stuff!
+ - A:
+- Q: These demos are always so impressive.  Do you plan to upstream
+ any of these projects into Emacs, or to publish them as e.g. ELPA
+ packages?
+ - A:
+- Q: How did you make that electronic circuit diagram? Is there a mode
+ with the symbols already available? (Thank you for your very clear
+ answer!)
+ - A:
+- Q:I've seen your blog posts with some of these features, but can
+ you link to the repo(s) where you are doing the development for
+ this/these package(s)?
+ - A: <https://lifeofpenguin.blogspot.com> (blog),
+ <https://gitlab.com/atamariya/emacs> (dev branch)
+- Q:The pdf form-filling is especially interesting - I would love to
+ do my taxes in emacs!
+ - A:
+- Q: the author is not using artist-mode?
+ - Not the speaker:
+ - I think he said canvas-mode
+ - After some searching, it appears to not be a separate package, but some code in the presenter's repo (https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/svg.el?ref_type=heads)
+ - Author used xwidgets ig, probably emacs has to be compiled with support for xwdigets
+
+## Notes
+
+- Thank you for showing so many new possibilities with Emacs!
+- which package is required for pdf filling? so that works with (usually adobe authored) "pdf forms"?
+ - A: It's an extension (not a separate package) to doc-view mode. It will work with Adobe authored forms as long as the form doesn't use javascript. *Details:* <https://lifeofpenguin.blogspot.com/2022/10/take-charge-of-pdf-in-gnu-emacs.html>
+ - A: *Code:*
+ <https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/pdf.el>
+ <https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/doc-view.el>
+
+- This author's work is always very impressive when he shares it on his blog and on Reddit. But unfortunately he seems to develop it in his own fork of emacs.git so it's impractical for other users to try.
+
+
+[[!inline pages="internal(2023/info/world-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/world-nav)" raw="yes"]]
+
+[[!taglink CATEGORY:]]
diff --git a/2023/talks/writing.md b/2023/talks/writing.md
new file mode 100644
index 00000000..d37115ab
--- /dev/null
+++ b/2023/talks/writing.md
@@ -0,0 +1,99 @@
+[[!meta title="Emacs Turbo-Charges My Writing"]]
+[[!meta copyright="Copyright &copy; 2023 Jeremy Friesen"]]
+[[!inline pages="internal(2023/info/writing-nav)" raw="yes"]]
+
+<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
+<!-- You can manually edit this file to update the abstract, add links, etc. --->
+
+
+# Emacs Turbo-Charges My Writing
+Jeremy Friesen (he/him) - Pronunciation: JERR-im-EE FREE-SEHN, https://takeonrules.com, <mailto:jeremy@jeremyfriesen.com>
+
+[[!inline pages="internal(2023/info/writing-before)" raw="yes"]]
+
+<https://takeonrules.com/2023/12/03/emacs-turbo-charges-my-writing/>
+
+I’ve been actively blogging since 2011. In May 2020 I switched to
+writing my blog posts in Emacs. The numbers don’t lie, I’m writing
+more than ever, in part because of Emacs.
+
+In this presentation I’ll walk through my writing setup for Emacs.
+I’ll go over the workflow of writing in Org Mode syntax with Denote
+serving as my personal knowledge management system.
+
+I’ll demonstrate some of functions (or types of functions) I use for:
+
+- Dynamic auto-completion for Org-Mode macros
+- Linking to other Org-Mode documents via different contexts (abbreviations, citations, and links)
+- Different Org-Mode blocks that map to HTML elements
+
+And with a complete post, I’ll then walk through the resulting export.
+Demonstrating the output to Hugo (and its shortcodes) as well as other
+formats.
+
+About the speaker:
+
+Jeremy Friesen is a long-time software developer but only recently an
+Emacs convert (as of May 2020). When he switched to writing posts
+using Emacs, he observed an explosion in writing, in part because of
+the joy of using a tool that he can shape and extend to meet his needs
+and wants.
+
+# Discussion
+
+## Questions and answers
+
+- Q: Do you think the line number for writing document kind of
+ distraction? Especially for notes.
+ - A:I don't find it distracting; I've been coding for a long
+ time and those fringes are partially invisible.  But help me
+ orient.
+ - or, what it brings to you, if we don't have that.
+ - Given that I'm writing code, prose, documentation, etc,
+ I prefer to have a common left fring...most of the time.
+ - Okay. I use (avy-goto-line &optional ARG) for jumping
+ - I bind C-j to jump to `avy-goto-char-timer`; My C-l is
+ bound to `consult-goto-line`
+- Q: How do you manage private and public data with your zettlekasten.
+ One of my blockers on putting my zettlekasten on the web is I don't
+ want everything in it to be public. expeccily fleeting notes
+ - A: I explicitly export a single page at a time; this ensures the
+ primary page is something I consider public.
+ - Q: Do you have anything to prevent private links from getting
+ accidentally being made publicaly accessible
+ - The main guard is the "publish this page" function.  Under
+ the hood, private notes are those that I don't specify a
+ public URL.  I do this by way of the `#+ROAM_REFS:`
+ keyword (technically there are a few other keywords I check
+ as well; for bespoke historical reasons) on the document. 
+ If it doesn't have that, then an internal link to that item
+ will not export a public link.
+- Q: Is there anything special you're using to go from Org to Hugo
+ Markdown?  This looks like a really nice setup, and I'd like to
+ give it a try!
+ - A: <https://github.com/jeremyf/dotemacs> you'll be looking for
+ jf-blogging.el (also jf-org-mode.el)
+- Q: Another font question.   What font were you using in eww?
+ - A: For fixed fonts I'm using "Iosevka Comfy Motion Fixed" and
+ for variable "ETBembo"
+- Q: What's the story behind the name "Take On Rules"?
+ - A: The blog started as a game rules oriented blog; it was my
+ time to interrogate rule systems.  But over time that drifted;
+ and once I moved to Org-Mode for writing I settled on an
+ everything and nothing blog.  My
+ <https://takeonrules.com/about/> has a bit more details on this
+ -  "Anything and nothing." Makes sense. :-)
+
+## Notes
+
+- <https://takeonrules.com> (presenter's personal blog)
+- When you put your thoughts on the physical world, it actually helps
+ you to generate more. It's kind of releasing your mind and let your
+ mind freely be free so from that kind of states you can create
+ something new
+
+[[!inline pages="internal(2023/info/writing-after)" raw="yes"]]
+
+[[!inline pages="internal(2023/info/writing-nav)" raw="yes"]]
+
+
diff --git a/2023/volunteer.md b/2023/volunteer.md
new file mode 100644
index 00000000..64c515ae
--- /dev/null
+++ b/2023/volunteer.md
@@ -0,0 +1,114 @@
+[[!meta title="Volunteer"]]
+[[!meta copyright="Copyright &copy; 2022-2023 Sacha Chua"]]
+
+Want to help make EmacsConf awesomer and learn a lot along the way?
+Volunteering is a great way to meet fellow Emacs geeks, tinker around
+with interesting packages and scripts, and develop your skills.
+
+In addition to the
+[emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss)
+list, feel free to subscribe to
+[emacsconf-org](https://lists.gnu.org/mailman/listinfo/emacsconf-org)
+as well, for discussions related to organizing the conference by the
+EmacsConf organizers and volunteers.
+
+Here are some of the roles that you might be able to help with. Roles
+have different responsibilities, and a person can have multiple roles.
+You can help out with one or more of the things here, or you can
+suggest your own ways of making EmacsConf better.
+
+# A few roles you can help with
+
+If you don't see something you want to help with here, [e-mail
+emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering for
+EmacsConf 2023) and let us know about the skills you have and the skills you
+want to develop! Also, if you’d like to volunteer privately, you can use
+[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering
+for EmacsConf 2023) instead.
+
+## Captioner
+
+Do you like working with text? Do you want early access to the
+pre-recorded talks? Help make EmacsConf videos easier to understand
+and search by captioning them!
+
+Here's what people said about how most of the EmacsConf talks were
+streamed with captions during the conference itself:
+
+- "I really appreciate the approach of doing things prerecorded and
+ having captions."
+- "The captions for this conference have has an impressive amount of
+ work put into them."
+- "++ to all that stuff. Great job on the captions, and the
+ demonstrated functionality is very impressive."
+- "At first, I thought the captions would be unnecessary, but over
+ time, understanding the accents for various individuals has been
+ challenging, so the captions helped."
+
+Most of the captioning work will begin once speakers submit their
+pre-recorded videos. If you like, you can warm up by
+[captioning previous talks.](https://emacsconf.org/help_with_main_captions/)
+You can use any captioning tool you want. There's even
+[one for Emacs](https://github.com/sachac/subed). Check out these
+[captioning tips](https://emacsconf.org/captioning/). You can start by
+editing autogenerated captions, or you can write captions from scratch
+if you want. You can work with timing, or you can send us plain text
+and we'll get them aligned with the videos. Videos range from 10
+minutes to 40 minutes and typically take 2-6x the video time to
+caption once you've gotten the hang of it. Partial work is also
+helpful, so feel free to contribute whatever you want, whenever you want.
+
+More details: [[2023/volunteer/caption]]
+
+To volunteer as a captioner, [e-mail
+emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering to
+caption) (or privately:
+[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering
+to caption)) and we'll help you get set up.
+
+## Internet Relay Chat monitor
+
+Do you like the buzz of fast-flowing discussions? Do you want to make
+sure that questions and interesting points don't get lost? Volunteer
+to copy stuff from the EmacsConf IRC channels to the Etherpad so that
+speakers and hosts can find them.
+
+More details: [[2023/volunteer/irc]]
+
+To volunteer as an Internet Relay Chat monitor, [let us know your availability
+at emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering as
+an IRC monitor) (or privately:
+[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering
+as an IRC monitor)) and we'll schedule you in.
+
+## Pad scribe
+
+Do you like taking notes? Volunteer to summarize interesting points
+and links from the EmacsConf talks and Q&A sessions to the Etherpad so
+that people can review them afterwards.
+
+More details: [[2023/volunteer/pad]]
+
+To volunteer as a pad scribe monitor,
+[let us know your availability at emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering
+as a pad scribe) (or privately: [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering
+as a pad scribe)) and we'll schedule you in.
+
+## Infrastructure and video
+
+Do you have an arcane cookbook filed with `ffmpeg` incantations? Is
+OBS your jam? Are you comfortable with the command-line? Do you
+Ansible all your servers? Do you like tweaking CSS rules to make
+things look good? (You don't have to say yes to all of these things -
+that would be quite a full stack!) We could use your help!
+
+To volunteer for infrastructure and video, [e-mail
+emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering for
+infrastructure and video) (or privately:
+[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering
+for infrastructure and video)) and we'll help you get set up.
+
+# Got other ideas?
+
+[We'd love to hear from you!](mailto:emacsconf-org@gnu.org) (or privately:
+[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org))
diff --git a/2023/volunteer/caption.md b/2023/volunteer/caption.md
new file mode 100644
index 00000000..1880b541
--- /dev/null
+++ b/2023/volunteer/caption.md
@@ -0,0 +1,63 @@
+[[!meta title="Caption volunteer"]]
+
+# Responsibilities
+
+- Write captions or edit auto-generated captions in order to make
+ pre-recorded videos easier to understand
+- (optional) Note chapter markers
+- (optional) Note other things that may need additional help to make
+ them accessible, such as images not described in the speaker's
+ voiceover
+- (optional) Help extract information from Q&A videos after the conference
+
+# Preparation
+
+We'll set up a protected directory so you can get a sneak peek at the
+prerecorded videos, and we'll e-mail you the username and password to
+use. If slides, scripts, or auto-generated captions are available as a
+starting point, we'll upload those as well.
+
+# Process
+
+We'll e-mail all the captioning volunteers once speakers submit videos.
+
+When you want to caption a video, browse through the protected
+directory to see which ones are available for captioning. E-mail
+<sacha@sachachua.com> or send a message to `sachac` via IRC
+(`#emacsconf-org` on IRC) so that we can reserve that one for you.
+Check out these [[captioning]] tips and fire up your favorite subtitle
+editor.
+
+We find that captioning generally takes between 2-6x the video time if
+you're an experienced captioner editing auto-generated captions, and
+can take a bit longer than that if you're starting out or starting
+from scratch. You can work with timestamps, or you can send us plain
+text and we'll get them aligned with the videos. It's okay to work in
+small chunks.
+
+E-mail your partial or finished captions to <sacha@sachachua.com> .
+When you're finished, we'll send them to the speaker for review and
+prepare the transcript for inclusion in the wiki.
+
+When the streamer shows the pre-recorded video, your captions will be
+included below it. They will also be combined into a transcript for
+the wiki, which will be published when the talk is live. Chapter
+markers will be listed below videos so that people can jump to
+specific sections.
+
+# After the conference
+
+If any talks weren't captioned by the time of the conference, you're certainly welcome to help caption them afterwards. We'll also extract the Q&A sessions and work on either chapter markers (to indicate when specific questions were answered) or captions for those.
+
+Here's what people said about how most of the EmacsConf 2021 talks were streamed with captions during the conference itself:
+
+- "I really appreciate the approach of doing things prerecorded and having captions."
+- "The captions for this conference have has an impressive amount of work put into them."
+- "++ to all that stuff. Great job on the captions, and the demonstrated functionality is very impressive."
+- "At first, I thought the captions would be unnecessary, but over time, understanding the accents for various individuals has been challenging, so the captions helped."
+
+Your captions will not only make talks more accessible during the conference, but also more searchable and more browsable after the conference. Thank you!
+
+[[Check out other ways to volunteer|2023/volunteer]]
+
+[[!taglink CategoryVolunteer ]]
diff --git a/2023/volunteer/checkin.md b/2023/volunteer/checkin.md
new file mode 100644
index 00000000..89036829
--- /dev/null
+++ b/2023/volunteer/checkin.md
@@ -0,0 +1,118 @@
+[[!meta title="Check-in volunteer"]]
+
+# Responsibilities
+
+- Notice speakers checking into IRC or Big Blue Button
+- Get them into the correct room and help them doublecheck their audio and video quality
+- Follow up with speakers who haven't checked in yet
+- Check on speakers periodically so that they're not waiting alone
+- (optional) Do tech-checks with speakers before the conference to identify potential issues
+
+Live Q&A is part of what makes EmacsConf better than a video playlist
+watch party. You can help speakers get settled in and feel at ease so
+that they're ready to go live as soon as their video finishes.
+
+# Preparation
+
+You'll need an account on bbb.emacsverse.org, and we'll set you up
+with moderator access on the relevant BBB rooms.
+
+We'll share a list of talks for your shift with:
+
+- starting time
+- talk title
+- track
+- speaker name
+- pronunciation
+- pronouns
+- BBB room URL
+- pad URL
+- email address
+- emergency contact information
+
+# Process
+
+## Looking for speakers
+
+We'll ask speakers to check into `#emacsconf-org` at least 30 minutes
+before their Q&A session and say something like "Hello, this is NAME
+checking in." You can hang out in the #emacsconf-org channel and keep
+an eye out for their messages.
+
+## Checking speakers in
+
+When you notice a speaker checking in, you can use something like
+`/msg NICK Hi, let me help you get checked in. Please join BBB_URL .`
+to send a private message to the speaker with the Big Blue Button URL.
+
+Join the BBB room. If you do not have moderator access, let sachac know.
+
+The BBB rooms will be set up so that people can join without approval.
+When the speaker arrives, you can take a few moments to say hi to
+them, thank them for presenting at EmacsConf, etc.
+
+Click on their name and choose **Promote to moderator.**
+
+Click on their name again and choose **Make presenter.**
+
+**Checklist with notes:**
+
+- Can you speak and be heard? Is there echo?
+ - Help them doublecheck their audio quality. Using earphones or headphones can help avoid audio feedback, and using an external microphone can improve audio as well.
+- Can you hear me?
+- Can you share your screen? Will the screen be readable at 1280x720?
+ - Speakers may want to share their screen during the Q&A session. They can do so using the monitor icon in the lower middle. Sharing a single window is usually more advisable than sharing the entire screen, since it allows them to resize the window so that it's easy for people to read.
+ - We recommend good contrast with dark foreground on light background to make it easier for people to see things even in bright light.
+- If you plan to show your keystrokes, is that display visible?
+- If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background?
+ - The speaker's webcam is optional but highly recommended. The speaker can turn their webcam on using the camera icon in the lower middle.
+- Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you?
+ - If the speaker wants to read questions as they come in on Etherpad or IRC, help them load the pad or the track-specific IRC channel. If there is a host for the session, the host can also read questions out loud. Let the speaker know that they can answer questions in any order they want, skip questions, take a little time to think about their answers, and answer questions for as short or as long as they'd like. The room is dedicated for their use, so they don't have to worry about stepping on someone else's Q&A. The first part of their Q&A will be streamed. The host will let them know when the time for streamed Q&A is almost done, but people can continue discussing things in the Q&A room if they want.
+- If you plan to play sounds during your Q&A session, is that audible?
+ - Sometimes speakers will need to set up a virtual loopback device to get their system audio to be included in BBB. This is somewhat complicated and should be tested before the conference.
+
+Once the speaker is settled in, you can let `#emacsconf-org` know that
+the speaker has been checked in.
+
+Let the speaker know how many minutes before their Q&A starts. They
+can take a break before then. Many speakers choose to watch other
+talks before theirs.
+
+## Heads-up before the Q&A starts
+
+Check in on the speaker about five minutes before their Q&A session
+starts to give them a heads-up. Ask them to close any other tabs that
+they might be using to watch EmacsConf, because that will create an
+audio feedback loop once their Q&A session is being streamed.
+
+Right before the Q&A starts, make sure the host has started the
+recording. If there is no host or the host has forgotten, you can use
+the **Start recording** button at the top.
+
+In between checking in people, feel free to enjoy the conference!
+
+## What if a live Q&A session is starting within 30 minutes and the speaker hasn't shown up yet?
+
+Let us know on `#emacsconf-org`. You or another organizer can contact
+them using their emergency contact info. If you prefer to not use your
+phone, you can ask one of the organizers in #emacsconf-org and we'll
+call the speaker for you.
+
+If the speaker is still not available, we can stream any ongoing Q&A
+sessions or open it up for community discussion.
+
+## After the Q&A wraps up
+
+If you notice that the Q&A in a room is all done, you can thank the
+speaker and click on **Stop recording** in the top middle.
+
+# After the conference
+
+Checking in speakers goes a long way to reducing the technical risks
+and keeping the conference running smoothly. A smooth checkin can
+encourage both speakers and participants to come back next year for
+more Emacs awesomeness. Thank you!
+
+[[Check out other ways to volunteer|2023/volunteer]]
+
+[[!taglink CategoryVolunteer]]
diff --git a/2023/volunteer/host.md b/2023/volunteer/host.md
new file mode 100644
index 00000000..d39b22f1
--- /dev/null
+++ b/2023/volunteer/host.md
@@ -0,0 +1,111 @@
+[[!meta title="Host volunteer"]]
+
+# Responsibilities
+
+For talks with live Q&A sessions:
+
+- Start the recording
+- Ask the speaker questions from the pad and read out feedback if you want
+- (optional) Monitor IRC for questions as well
+- (optional) Let the other organizers know when you're ready for conference
+ participants to join the Q&A; moderate the discussion as needed
+- Handle technical issues that turn up
+- Give the speaker time warnings
+- Keep things cool
+
+Many speakers find it easier to reply to questions that are spoken
+aloud, and this also ensures that the questions get into the
+recording. As the host, you can help shape the Q&A session by choosing
+the order of questions to ask (unless the speaker wants to address a
+different question). You can also help rephrase unclear questions or
+help the speaker feel more comfortable by reminding them that they
+don't have to answer all the questions.
+
+# Preparation
+
+We will give you a list of talks with the times, speaker info, pad
+URL, and URL for the live Q&A session. Please keep the Q&A URLs secret
+until you are ready for everyone to join the Q&A session.
+
+We will also add you as a moderator to the rooms for the talks in your
+shift. You may want to practice muting people in BBB.
+
+We strongly recommend using a headset or earphones to minimize audio
+feedback. Using a headset microphone or an external microphone can
+also improve your sound quality.
+
+# Process
+
+This year we are experimenting with per-talk pads in order to simplify
+the experience for the speakers, since many speakers found it
+difficult to find and focus on their section in a long pad.
+
+At least 5 minutes before the Q&A session starts, go to the provided
+URL. If BBB shows you a list of meetings, you can click on **Join**
+to join the selected one. If you do not have moderator access, let
+us know in `#emacsconf-org` and we can add you.
+
+Have another window for the pad for the current talk.
+
+Have another window or two for IRC. You may want to set up your
+windows so that you can quickly glance at #emacsconf-org. Optionally,
+you can also monitor the chat channel for your track (optional).
+Ideally, an IRC volunteer will monitor that channel and copy the
+questions into the pad for you, so you can focus on just the pad if
+you like.
+
+Make sure you do **not** have another window watching the stream, or
+you may get audio feedback whenever you unmute yourself. If you notice
+audio feedback when other people unmute, you can ask them to make sure
+they aren't watching the stream in a different window and that they
+haven't accidentally joined twice.
+
+To minimize background noise, keep your mic on mute unless you're
+speaking. You can optionally turn on your webcam.
+
+The streamer will join the BBB meeting shortly after the prerecorded
+video ends. When the streamer gives you the go-ahead, **turn on
+recording** and confirm that it is on. Double-check that recording is
+on by seeing whether the button at the top has changed to a red button
+with a timer.
+
+The Q&A will start out closed; just you and the speaker. Depending on
+your comfort level and how the discussion goes, you can let us know
+when you would like it to be opened up to general participation by
+inviting people out loud (and possibly quickly posting in #emacsconf-org).
+Then we will update the public BBB redirect URL to
+point to the BBB room so that people can join. This should take less
+than a minute to update. People will then be able to join using the
+Q&A URL that will be in the talk page and in IRC. That way,
+participants can join the Q&A session and ask directly. You can then
+shift to be more of a moderator, reminding people to stay on mute
+unless it's their turn to speak and muting people as needed.
+
+BBB sometimes has issues if there are lots of participants with
+webcams on. If you notice that things are getting slow or choppy, you
+can ask participants to turn their webcams off.
+
+Please give the speaker a 5-minute warning and a 2-minute warning
+before the end of their streamed Q&A session. If you've decided to
+open up the Q&A session, it can continue off-stream for as long as the
+speaker likes while you move on to the next Q&A session to host. If
+the speaker would like to wrap up, they can leave the meeting whenever
+they want. You can then thank everyone and move on to the next
+presentation.
+
+# In case of...
+
+- Incidents: If someone isn't keeping the
+ [[guidelines for conduct|conduct]] in mind, you can moderate using
+ BBB's tools (muting or removing participants), or let us know in
+ `#emacsconf-org` and we'll figure out how to deal with the
+ situation.
+
+# Afterwards
+
+Q&A sessions are what make EmacsConf more fun than a playlist. =)
+Thanks for helping make EmacsConf awesome!
+
+[[Check out other ways to volunteer|2023/volunteer]]
+
+[[!taglink CategoryVolunteer ]]
diff --git a/2023/volunteer/irc.md b/2023/volunteer/irc.md
new file mode 100644
index 00000000..6ec5eac7
--- /dev/null
+++ b/2023/volunteer/irc.md
@@ -0,0 +1,82 @@
+[[!meta title="IRC volunteer"]]
+
+# Responsibilities
+
+- Keep an eye on the IRC channel for your track and copy questions to
+ the relevant Etherpad so that hosts and speakers can easily find
+ them.
+- (optional) Copy other talk-related items to the talk's Etherpad
+- (optional) Copy other conference-related items to the conference Etherpad
+- (optional) Answer conference-related questions
+- (optional) Announce talks and Q&A sessions
+
+The IRC conversations can be pretty fast and difficult to follow. Your
+help in copying questions and other important points to the Etherpad
+will be much appreciated by hosts, speakers, and other participants.
+
+# Preparation
+
+If you'd like to announce talks and Q&A sessions, we can share a pad
+with announcements that you can copy and paste.
+
+If you would like to help set the channel topic or moderate the
+channel, please ask one of the main organizers (bandali, zaeph, or
+sachac) to add you as a channel operator.
+
+# Process
+
+## Copying questions
+
+Open `#emacsconf-gen` and/or `#emacsconf-dev` depending on your shift
+and your ability to keep track of multiple things at the same time.
+
+In another window, open the Etherpad for the relevant talk(s). You can
+find pad URLs on the talk page or in the talk announcement that is
+also posted on IRC.
+
+When you notice a question posted in IRC, reply to the person and say
+that you'll copy the question into the relevant pad. If you're using
+ERC or another programmable IRC client, you may want to make a command
+that simplifies that process.
+
+Copy the question to the bottom of the question list of the relevant
+pad and add the person's nick after it in parentheses. Please keep it
+as a top-level item instead of nesting it under something else. You
+can reword the question for clarity if needed.
+
+The conversation might be too fast to keep track of, especially if the
+channel for a track has overlapping discussions. Feel free to ask if
+people have any more questions for a particular speaker. You can also
+encourage people to use conventions like starting their questions with
+Q: or Q-talkid:.
+
+## Copying other talk-related items
+
+IRC participants might share interesting observations, links, or
+feedback. Please feel free to copy them into the Etherpad for future
+reference.
+
+For Q&A sessions done over IRC, it would also be helpful to copy the
+answers to the Etherpad.
+
+## Announcing talks and Q&A sessions
+
+At the indicated time, paste the announcement into the relevant
+channel. (This might be automated if we get around to it.)
+
+# In case of...
+
+- Incidents: If someone isn't keeping
+ [[guidelines for conduct|conduct]] in mind, let us know in
+ `#emacsconf-org` and we'll figure out how to deal with the
+ situation.
+
+# After the conference
+
+We'll review the chat logs and add anything that might have been
+missed to the Etherpad before archiving it onto the talk page. Thank
+you!
+
+[[Check out other ways to volunteer|2023/kvolunteer]]
+
+[[!taglink CategoryVolunteer ]]
diff --git a/2023/volunteer/pad.md b/2023/volunteer/pad.md
new file mode 100644
index 00000000..50190b4d
--- /dev/null
+++ b/2023/volunteer/pad.md
@@ -0,0 +1,83 @@
+[[!meta title="Etherpad volunteer"]]
+
+# Responsibilities
+
+- Write down interesting points, links, questions, and answers on the
+ Etherpad during talks and Q&A sessions so that people can quickly
+ get the gist even if they're jumping in late or skimming through
+ things without watching the full video
+- Add the Q&A BBB URL to the Etherpad when the host gives the OK for
+ everyone to join
+
+# Preparation
+
+We will add the pad URLs to the watch page for the track.
+
+We will also give you a list of URLs for the live Q&A sessions in the
+BBB room. Please keep these URLs secret until the host gives you the
+OK to add them to the pad.
+
+You can see the pad for the previous year at
+https://etherpad.wikimedia.org/p/emacsconf-2021 . The discussion
+section in https://emacsconf.org/2021/talks/frownies/ shows how the
+pad will be archived onto the talk page. A sample pad for this year's
+conference can be found at <https://pad.emacsconf.org/2022-journalism>
+
+If you would like to suggest improvements to the pad format, please
+e-mail <emacsconf-org@gnu.org> before the conference starts. Thank
+you!
+
+# Process
+
+This year we are experimenting with per-talk pads in order to simplify
+the experience for the speakers, since many speakers found it
+difficult to find and focus on their section in a long pad.
+
+Open one window with the watch page for the EmacsConf track so that
+you can watch the prerecorded video and the Q&A session. Open another
+for the pad for the current talk. You can get the pad URL from the
+watch page, the talk page, the IRC announcements, or by navigating the
+**Next talks** links on a pad.
+
+You don't need to make a verbatim transcription. Short bullet-points
+are enough. If you're not sure about a term, you can mark it with
+something like ?? and someone else may be able to fill it in. If you
+happen to be able to quickly add timestamps in US/Eastern time, that
+may be handy.
+
+If you would like to continue scribing the live Q&A for a session even
+after the next pre-recorded talk starts, you can join the BBB session
+for the live Q&A. Scribing live Q&A sessions might be more useful than
+scribing the pre-recorded video portion because people will have
+access to the videos and possibly transcripts, while Q&A may take a
+while to extract.
+
+To make it easier for the hosts and speakers, we keep the BBB room
+URLs secret until the hosts or speakers give the OK to open it up.
+When the host or speaker invites everyone in, you can add the BBB URL
+to the Etherpad to make it easier for people to join from there.
+
+You can keep an eye on the time to see when the next live Q&A session
+is starting so that you can join the next one if there are overlapping
+sessions.
+
+# In case of...
+
+- Oopsies: Sometimes people accidentally delete chunks of the pad. It happens.
+ You can use the time slider (looks like a clock, second icon in the
+ top right) to go back to a previous version.
+
+- Incidents: If someone isn't keeping
+ [[guidelines for conduct|conduct]] in mind, let us know in
+ `#emacsconf-org` and we'll figure out how to deal with the
+ situation.
+
+# After the conference
+
+We'll archive the pad on the talk page after the event, so your work
+will also help people follow up, find ideas and answers, and get even
+more out of EmacsConf 2023. Thank you!
+
+[[Check out other ways to volunteer|2023/volunteer]]
+
+[[!taglink CategoryVolunteer ]]
diff --git a/2023/volunteer/stream.md b/2023/volunteer/stream.md
new file mode 100644
index 00000000..fdb05183
--- /dev/null
+++ b/2023/volunteer/stream.md
@@ -0,0 +1,90 @@
+[[!meta title="Stream volunteer"]]
+
+# Responsibilities
+
+As the stream volunteer, you'll be in charge of managing the
+livestream: playing the talk video at the right time, updating the
+stream overlays, joining the Q&A (live or IRC) when it finishes,
+arranging the windows so that the Etherpad can be seen, adjusting the
+volume, etc.
+
+# Preparation
+
+We will give you a list of talks with the times, speaker info, pad
+URL, and URL for the live Q&A session. Please keep the Q&A URLs secret.
+
+You can use OBS on your system or you can use VNC to connect to the
+OBS setup on res.emacsconf.org. We will e-mail the connection details
+to you. Add an entry for res.emacsconf.org to your ~/.ssh/config so
+that you don't have to specify the port. Use `export TRACK=gen` or
+`export TRACK=dev` in your shell to set the variable for your stream.
+
+Copy the password file:
+`scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK`
+
+# Process
+
+## Setting up the stream
+
+1. Start up the VNC server if it's not already running
+ `ssh emacsconf-$TRACK@res.emacsconf.org -L 5905:127.0.0.1:5905 -L 6005:127.0.0.1:6005 -L 5906:127.0.0.1:5906 -L 6006:127.0.0.1:6006 "~/bin/track-vnc; sleep infinity"`
+2. Connect via VNC viewer to the appropriate forwarded port from your laptop
+ - Gen: xvncviewer 127.0.0.1:5905 -shared -geometry 1280x720 -passwd vnc-passwd-gen
+ - Dev: xvncviewer 127.0.0.1:5906 -shared -geometry 1280x720 -passwd vnc-passwd-dev
+3. Switch to OBS and **start recording** (not streaming) when you're ready.
+
+## Playing the talk video
+
+### From conf.org with a todo state change hook
+
+If things go well, an organizer should be able to start the video from
+the conf.org setup in orga@res.emacsconf.org. Here are the steps in
+case you are in charge of it and have access:
+
+Set up:
+
+1. ssh orga@res.emacsconf.org
+2. `emacsclient -c -nw emacsconf-2022-private/conf.org` (or `emacs emacsconf-2022-private/conf.org` if there's no server yet)
+3. `M-x emacsconf-add-org-after-todo-state-change-hook` unless you've already done so this session
+
+Play talk:
+
+1. Use `M-g t` (`emacsconf-go-to-talk`) to find the talk, or use another way to navigate to the talk heading. (Org agenda?)
+2. Use `C-c C-t` (`org-todo`) to mark the talk as `m` (PLAYING - *m*pv).
+
+This should make MPV appear. If it does not appear, you can manually
+play it with one of the backup plans below:
+
+### Backup plan: emacsconf-stream-play-video from conf.org
+
+1. Use `M-x emacsconf-stream-set-talk-info` to update the overlay. If
+this does not update the overlay, play the video and then manually
+copy the right overlays over `~/video.png` and `~/other.png`.
+
+2. Use `M-x emacsconf-stream-play-video` to play the video for the talk.
+
+### Backup plan: Use track-mpv
+
+1. ssh emacsconf-$TRACK@res.emacsconf.org
+2. cd /data/emacsconf/cache
+3. ~/bin/track-mpv file-to-play.webm
+
+This should make the file play in the correct display.
+
+## Updating the overlay
+
+If the overlay wasn't automatically updated by the todo state change
+hook in conf.org, you can set it from conf.org if you have access. Use
+`M-x emacsconf-stream-set-talk-info`. If that doesn't work, manually
+copy the right overlays over `~/video.png` and `~/other.png`. The
+overlays will be in `/data/emacsconf/overlays`.
+
+## Displaying an emergency announcement
+
+echo Your emergency announcement here > ~/news.txt
+
+Be sure to clear it with `echo > ~/news.txt` when done.
+
+From conf.org on res, you can also use `M-x
+emacsconf-stream-broadcast` to announce something on both streams or
+`M-x emacsconf-stream-set-news` to set the news on one stream.
diff --git a/2023/watch.md b/2023/watch.md
new file mode 100644
index 00000000..7d60de2e
--- /dev/null
+++ b/2023/watch.md
@@ -0,0 +1,73 @@
+[[!inline pages="internal(2023/watch/announce)" raw="yes"]]
+[[!inline pages="internal(2023/watch/info)" raw="yes"]]
+[[!sidebar content=""]]
+
+EmacsConf 2023 will be on Dec 2 (Sat) and Dec 3 (Sun), 2023 from
+9am-5pm Toronto/EST time (US/Eastern); equivalently, 6am-3pm PST,
+2pm-10pm UTC, 3pm-11pm Zurich/CET, 7:30pm-4:30am(next-day) India/IST,
+10pm-6am GMT+8.
+
+You can view streams using the watch pages or in a streaming web
+player such as [MPV](https://mpv.io). If you need to reverse the video
+for easier viewing (ex: turning dark mode into light mode), try a
+command like `mpv --vf=negate URL`.
+
+If you experience any disruptions (including weird audio), try waiting
+a minute or two and then reloading the page you're using to watch the
+video. If that still doesn't work, please check our status page at
+<https://status.emacsconf.org> for updates on the status of various
+parts of our infrastructure, and instructions on how to get in touch
+with us about disruptions.
+
+<!-- If you prefer, you can watch the livestream via Toobnix (a PeerTube
+instance): [General
+track](https://toobnix.org/w/7t9X8eXuSby8YpyEKTb4aj), [Development
+track](https://toobnix.org/w/w6K77y3bNMo8xsNuqQeCcD). Pre-recorded
+videos and replays will also be available on Toobnix in the [EmacsConf
+channel](https://toobnix.org/c/emacsconf). -->
+
+To participate in the Q&A, please check the [[talks]] index for a link
+to the talk page, and [[read these Q&A tips|qa]]. The talk page will
+have the Q&A details, including the Etherpad link, IRC channel, and
+optionally a BigBlueButton room (BBB) for Q&A. If you plan to
+participate in Q&A in the BigBlueButton room, please use headphones or
+earphones in order to minimize audio feedback. The link on the talk
+page will take you to a waiting room that will automatically refresh
+when the host has opened the Q&A.
+
+The Etherpad for general EmacsConf discussions is at
+<https://pad.emacsconf.org/2023>. The schedule and the talk pages link
+to the Etherpads for the specific talk. Please feel free to add notes
+and questions to the Etherpad.
+
+You can join IRC using <https://chat.emacsconf.org> or your favourite
+IRC client. Here are the irc.libera.chat IRC channels that we'll be
+using this year:
+
+- \#emacsconf-gen: discussion for the General track
+- \#emacsconf-dev: discussion for the development track
+- \#emacsconf: hallway conversations, other general conversations
+- \#emacsconf-org: if you need to get in touch with the organizers
+
+You can use the `/JOIN` command in an IRC client to join a different
+channel. Ex: `/join #emacsconf-org` if you want to talk to the
+organizers.
+
+Pre-recorded talk videos will be available on the talk pages after the
+talks go live, and other videos (including Q&A) will also be added to
+the talk pages once we process them. (Probably by January.) You can
+subscribe to `emacsconf-discuss` for updates:
+<https://lists.gnu.org/mailman/listinfo/emacsconf-discuss>
+
+**Accessibility:** Pre-recorded talks will be streamed with open
+captions, and the transcripts will be posted to the talk pages as
+well. If you have any accessibility requests, please join the
+[#emacsconf-org](https://chat.emacsconf.org/?join=emacsconf-org) and
+let us know, or e-mail <emacsconf-org-private@gnu.org> to reach the
+organizers.
+
+Physical events:
+
+- [Lucerne, Switzerland](https://200ok.ch/posts/2023-11-01_announcing_emacsconf__swiss_satellite.html)
+- Let us know at <emacsconf-org@gnu.org> if you're organizing one!
+
diff --git a/2023/watch/dev.md b/2023/watch/dev.md
new file mode 100644
index 00000000..626dbcb1
--- /dev/null
+++ b/2023/watch/dev.md
@@ -0,0 +1,157 @@
+<!-- Automatically generated by emacsconf-publish-watch-pages -->
+<!--
+[[!inline pages="internal(2023/watch/announce)" raw="yes"]]
+[[!meta title="Development stream"]]
+[[!sidebar content=""]] -->
+
+<hr size="1">
+<div><a name="watch"></a><strong>Watch</strong> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <a href="/2023/watch/gen/">General</a> - <strong>Development</strong> | <a href="https://emacsconf.org/2023/watch/">Tips for watching/participating</a></div>
+
+For better performance, we recommend watching <a href="https://live0.emacsconf.org/dev.webm">https://live0.emacsconf.org/dev.webm</a> using a streaming media player. Examples:
+
+<ul>
+<li>mpv https://live0.emacsconf.org/dev.webm</li>
+<li>vlc https://live0.emacsconf.org/dev.webm</li>
+<li>ffplay https://live0.emacsconf.org/dev.webm</li>
+</ul>
+
+If you have limited bandwidth, you can watch the low-res stream <a href="https://live0.emacsconf.org/dev-480p.webm">https://live0.emacsconf.org/dev-480p.webm</a>.
+
+If you don't have a streaming media player, you might be able to watch using the player below. (Google Chrome seems to be having issues; Mozilla Firefox might work better. If watching from a phone, Google Chrome seems to work there, or download VLC from your phone's app store and use the URLs like https://live0.emacsconf.org/dev.webm .) 2023-12-03 Sun: Many people are reporting widespread network issues like dropped packets. We're now rebroadcasting to Toobnix (<a href="https://toobnix.org/w/vKSUEbWRFosr8UGtdS2GwX">General</a>, <a href="https://toobnix.org/w/cDaTmi7Y7PjhB58tAGvHtV">Development</a>) in case that helps with network issues.
+
+<video controls class="reload"><source src="https://live0.emacsconf.org/dev.webm" type="video/webm" /></video>
+
+<hr size="1"><div><a name="links"></a><a href="#watch">Watch</a> - <strong>Pad and Q&amp;A links</strong> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <a href="/2023/watch/gen/">General</a> - <strong>Development</strong></div><div><span><a href="https://emacsconf.org/2023/talks/matplotllm">matplotllm</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-matplotllm">pad</a>, <a href="https://pad.emacsconf.org/2023-matplotllm">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/voice">voice</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-voice">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-voice.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/llm">llm</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-llm">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-llm.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/overlay">overlay</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-overlay">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-overlay.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/eval">eval</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-eval">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2023/talks/repl">repl</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-repl">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: edrx</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/doc">doc</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-doc">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-doc.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/windows">windows</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-windows">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-windows.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/scheme">scheme</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-scheme">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-scheme.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/world">world</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-world">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-world.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/flat">flat</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-flat">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-flat.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/emacsen">emacsen</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-emacsen">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-emacsen.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/gc">gc</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-gc">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-gc.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/hyperdrive">hyperdrive</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-hyperdrive">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-hyperdrive.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/lspocaml">lspocaml</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-lspocaml">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-lspocaml.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/test">test</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-test">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-test.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/emacsconf">emacsconf</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-emacsconf">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-emacsconf.html">BBB</a>)</span></div>
+<div class="pad-output"></div>
+<hr size="1"><div><a name="chat"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <strong>Chat</strong> - <a href="#sched">Schedule</a> | Tracks: <a href="/2023/watch/gen/">General</a> - <strong>Development</strong></div><div>Chat: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">emacsconf-dev</a> on libera.chat</div>
+
+<div class="chat-iframe" data-track="dev"></div>
+<iframe src="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev" height="600" width="100%"></iframe>
+<hr size="1"><div><a name="sched"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <strong>Schedule</strong> | Tracks: <a href="/2023/watch/gen/">General</a> - <strong>Development</strong></div>
+<ul>Legend:
+<li>Solid lines: Q&A will be through a BigBlueButton room (you can ask questions there or through IRC/Etherpad)</li>
+<li>Dashed lines: Q&A will be over IRC or the Etherpad, or the speaker will follow up afterwards</li></ul>
+<div>Times are in Eastern Standard Time (America/Toronto, GMT-5). If you have Javascript enabled, clicking on talk pages should include times in your computer's local time setting.</div>
+<div><svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="https://emacsconf.org/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="https://emacsconf.org/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="https://emacsconf.org/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="https://emacsconf.org/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="https://emacsconf.org/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="https://emacsconf.org/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="https://emacsconf.org/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="https://emacsconf.org/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="https://emacsconf.org/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="https://emacsconf.org/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="https://emacsconf.org/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="https://emacsconf.org/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="https://emacsconf.org/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="https://emacsconf.org/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="https://emacsconf.org/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="https://emacsconf.org/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="https://emacsconf.org/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="https://emacsconf.org/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="https://emacsconf.org/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:58- 9:04 Sunday opening remarks</title> <rect x="-4" y="15" opacity="0.8" width="9" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="https://emacsconf.org/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="https://emacsconf.org/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="https://emacsconf.org/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="https://emacsconf.org/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="https://emacsconf.org/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="https://emacsconf.org/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="https://emacsconf.org/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="https://emacsconf.org/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="https://emacsconf.org/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="https://emacsconf.org/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="https://emacsconf.org/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="https://emacsconf.org/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="https://emacsconf.org/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="https://emacsconf.org/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="https://emacsconf.org/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="https://emacsconf.org/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg></div>
+<div><h1>Saturday, Dec 2, 2023</h1>
+<div data-start="2023-12-02T15:00:00+0000" data-end="2023-12-02T15:10:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:00</span> - <span class="sched-end">10:10</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-matplotllm">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2023-matplotllm">Etherpad</a></span>; <span class="sched-slug">id:matplotllm</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/matplotllm">MatplotLLM, iterative natural language data visualization in org-babel</a></div>
+ <div class="sched-speakers">Abhinav Tushar (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T15:20:00+0000" data-end="2023-12-02T15:40:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:20</span> - <span class="sched-end">10:40</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-voice">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-voice.html">BBB</a></span>; <span class="sched-slug">id:voice</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/voice">Enhancing productivity with voice computing</a></div>
+ <div class="sched-speakers">Blaine Mooers (he/him/his)</div>
+
+</div>
+
+<div data-start="2023-12-02T15:55:00+0000" data-end="2023-12-02T16:15:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:55</span> - <span class="sched-end">11:15</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-llm">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-llm.html">BBB</a></span>; <span class="sched-slug">id:llm</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a></div>
+ <div class="sched-speakers">Andrew Hyatt (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T18:00:00+0000" data-end="2023-12-02T18:20:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-overlay">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-overlay.html">BBB</a></span>; <span class="sched-slug">id:overlay</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/overlay">Improving compiler diagnostics with overlays</a></div>
+ <div class="sched-speakers">Jeff Trull (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T18:35:00+0000" data-end="2023-12-02T18:45:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:35</span> - <span class="sched-end">1:45</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-eval">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:eval</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/eval">Editor Integrated REPL Driven Development for all languages</a></div>
+ <div class="sched-speakers">Musa Al-hassy (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T19:00:00+0000" data-end="2023-12-02T20:00:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:00</span> - <span class="sched-end">3:00</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-repl">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: edrx</a></span>; <span class="sched-slug">id:repl</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/repl">REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</a></div>
+ <div class="sched-speakers">Eduardo Ochs</div>
+
+</div>
+
+<div data-start="2023-12-02T20:10:00+0000" data-end="2023-12-02T20:50:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:10</span> - <span class="sched-end">3:50</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-doc">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-doc.html">BBB</a></span>; <span class="sched-slug">id:doc</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/doc">Literate Documentation with Emacs and Org Mode</a></div>
+ <div class="sched-speakers">Mike Hamrick</div>
+
+</div>
+
+<div data-start="2023-12-02T21:05:00+0000" data-end="2023-12-02T21:45:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:05</span> - <span class="sched-end">4:45</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-windows">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-windows.html">BBB</a></span>; <span class="sched-slug">id:windows</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/windows">Windows into Freedom</a></div>
+ <div class="sched-speakers">Corwin Brust (He/Him)</div>
+
+</div>
+
+<h1>Sunday, Dec 3, 2023</h1>
+<div data-start="2023-12-03T15:00:00+0000" data-end="2023-12-03T15:20:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:00</span> - <span class="sched-end">10:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-scheme">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-scheme.html">BBB</a></span>; <span class="sched-slug">id:scheme</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/scheme">Bringing joy to Scheme programming</a></div>
+ <div class="sched-speakers">Andrew Tropin</div>
+
+</div>
+
+<div data-start="2023-12-03T15:35:00+0000" data-end="2023-12-03T15:55:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:35</span> - <span class="sched-end">10:55</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-world">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-world.html">BBB</a></span>; <span class="sched-slug">id:world</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/world">GNU Emacs: A World of Possibilities</a></div>
+ <div class="sched-speakers">Anand Tamariya</div>
+
+</div>
+
+<div data-start="2023-12-03T16:10:00+0000" data-end="2023-12-03T16:20:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:10</span> - <span class="sched-end">11:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-flat">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-flat.html">BBB</a></span>; <span class="sched-slug">id:flat</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/flat">A modern Emacs look-and-feel without pain</a></div>
+ <div class="sched-speakers">Pedro A. Aranda (he)</div>
+
+</div>
+
+<div data-start="2023-12-03T16:35:00+0000" data-end="2023-12-03T16:55:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:35</span> - <span class="sched-end">11:55</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-emacsen">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-emacsen.html">BBB</a></span>; <span class="sched-slug">id:emacsen</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a></div>
+ <div class="sched-speakers">Fermin (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-03T18:00:00+0000" data-end="2023-12-03T18:35:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:35</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-gc">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-gc.html">BBB</a></span>; <span class="sched-slug">id:gc</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/gc">emacs-gc-stats: Does garbage collection actually slow down Emacs?</a></div>
+ <div class="sched-speakers">Ihor Radchenko (he)</div>
+
+</div>
+
+<div data-start="2023-12-03T18:50:00+0000" data-end="2023-12-03T19:30:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:50</span> - <span class="sched-end">2:30</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-hyperdrive">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-hyperdrive.html">BBB</a></span>; <span class="sched-slug">id:hyperdrive</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/hyperdrive">hyperdrive.el: Peer-to-peer filesystem in Emacs</a></div>
+ <div class="sched-speakers">Joseph Turner and Protesilaos Stavrou</div>
+
+</div>
+
+<div data-start="2023-12-03T19:45:00+0000" data-end="2023-12-03T20:00:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:45</span> - <span class="sched-end">3:00</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-lspocaml">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-lspocaml.html">BBB</a></span>; <span class="sched-slug">id:lspocaml</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/lspocaml">Writing a language server in OCaml for Emacs, fun, and profit</a></div>
+ <div class="sched-speakers">Austin Theriault (he/they)</div>
+
+</div>
+
+<div data-start="2023-12-03T20:15:00+0000" data-end="2023-12-03T20:45:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:15</span> - <span class="sched-end">3:45</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-test">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-test.html">BBB</a></span>; <span class="sched-slug">id:test</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/test">What I learned by writing test cases for GNU Hyperbole</a></div>
+ <div class="sched-speakers">Mats Lidell (he, him, his)</div>
+
+</div>
+
+<div data-start="2023-12-03T21:00:00+0000" data-end="2023-12-03T21:20:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:00</span> - <span class="sched-end">4:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-emacsconf">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-emacsconf.html">BBB</a></span>; <span class="sched-slug">id:emacsconf</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/emacsconf">EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</a></div>
+ <div class="sched-speakers">Sacha Chua (she/her)</div>
+
+</div>
+
+</div>
diff --git a/2023/watch/gen.md b/2023/watch/gen.md
new file mode 100644
index 00000000..4087dab2
--- /dev/null
+++ b/2023/watch/gen.md
@@ -0,0 +1,234 @@
+<!-- Automatically generated by emacsconf-publish-watch-pages -->
+<!--
+[[!inline pages="internal(2023/watch/announce)" raw="yes"]]
+[[!meta title="General stream"]]
+[[!sidebar content=""]] -->
+
+<hr size="1">
+<div><a name="watch"></a><strong>Watch</strong> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2023/watch/dev/">Development</a> | <a href="https://emacsconf.org/2023/watch/">Tips for watching/participating</a></div>
+
+For better performance, we recommend watching <a href="https://live0.emacsconf.org/gen.webm">https://live0.emacsconf.org/gen.webm</a> using a streaming media player. Examples:
+
+<ul>
+<li>mpv https://live0.emacsconf.org/gen.webm</li>
+<li>vlc https://live0.emacsconf.org/gen.webm</li>
+<li>ffplay https://live0.emacsconf.org/gen.webm</li>
+</ul>
+
+If you have limited bandwidth, you can watch the low-res stream <a href="https://live0.emacsconf.org/gen-480p.webm">https://live0.emacsconf.org/gen-480p.webm</a>.
+
+If you don't have a streaming media player, you might be able to watch using the player below. (Google Chrome seems to be having issues; Mozilla Firefox might work better. If watching from a phone, Google Chrome seems to work there, or download VLC from your phone's app store and use the URLs like https://live0.emacsconf.org/gen.webm .) 2023-12-03 Sun: Many people are reporting widespread network issues like dropped packets. We're now rebroadcasting to Toobnix (<a href="https://toobnix.org/w/vKSUEbWRFosr8UGtdS2GwX">General</a>, <a href="https://toobnix.org/w/cDaTmi7Y7PjhB58tAGvHtV">Development</a>) in case that helps with network issues.
+
+<video controls class="reload"><source src="https://live0.emacsconf.org/gen.webm" type="video/webm" /></video>
+
+<hr size="1"><div><a name="links"></a><a href="#watch">Watch</a> - <strong>Pad and Q&amp;A links</strong> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2023/watch/dev/">Development</a></div><div><span><a href="https://emacsconf.org/2023/talks/sat-open">sat-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-sat-open">pad</a>, <a href="https://pad.emacsconf.org/2023-sat-open">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/adventure">adventure</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-adventure">pad</a>, <a href="https://pad.emacsconf.org/2023-adventure">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/uni">uni</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-uni">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-uni.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/teaching">teaching</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-teaching">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-teaching.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/table">table</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-table">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2023/talks/one">one</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-one">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-one.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/writing">writing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-writing">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-writing.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/nabokov">nabokov</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-nabokov">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-nabokov.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/collab">collab</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-collab">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2023/talks/solo">solo</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-solo">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-solo.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/ref">ref</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-ref">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/unentangling">unentangling</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-unentangling">pad</a>, <a href="https://pad.emacsconf.org/2023-unentangling">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/devel">devel</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-devel">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-devel.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/core">core</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-core">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-core.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/sat-close">sat-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-sat-close">pad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/sun-open">sun-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-sun-open">pad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/hyperamp">hyperamp</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-hyperamp">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-hyperamp.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/koutline">koutline</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-koutline">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/parallel">parallel</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-parallel">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-parallel.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/eat">eat</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-eat">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-eat.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/poltys">poltys</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-poltys">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-poltys.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/cubing">cubing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-cubing">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: wasamasa</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/emms">emms</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-emms">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-emms.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/steno">steno</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-steno">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2023/talks/mentor">mentor</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-mentor">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-mentor.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/web">web</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-web">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-web.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/sharing">sharing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-sharing">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-sharing.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/sun-close">sun-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-sun-close">pad</a>)</span></div>
+<div class="pad-output"></div>
+<hr size="1"><div><a name="chat"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <strong>Chat</strong> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2023/watch/dev/">Development</a></div><div>Chat: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">emacsconf-gen</a> on libera.chat</div>
+
+<div class="chat-iframe" data-track="gen"></div>
+<iframe src="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen" height="600" width="100%"></iframe>
+<hr size="1"><div><a name="sched"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <strong>Schedule</strong> | Tracks: <strong>General</strong> - <a href="/2023/watch/dev/">Development</a></div>
+<ul>Legend:
+<li>Solid lines: Q&A will be through a BigBlueButton room (you can ask questions there or through IRC/Etherpad)</li>
+<li>Dashed lines: Q&A will be over IRC or the Etherpad, or the speaker will follow up afterwards</li></ul>
+<div>Times are in Eastern Standard Time (America/Toronto, GMT-5). If you have Javascript enabled, clicking on talk pages should include times in your computer's local time setting.</div>
+<div><svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="https://emacsconf.org/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="https://emacsconf.org/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="https://emacsconf.org/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="https://emacsconf.org/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="https://emacsconf.org/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="https://emacsconf.org/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="https://emacsconf.org/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="https://emacsconf.org/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="https://emacsconf.org/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="https://emacsconf.org/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="https://emacsconf.org/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="https://emacsconf.org/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="https://emacsconf.org/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="https://emacsconf.org/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="https://emacsconf.org/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="https://emacsconf.org/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="https://emacsconf.org/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="https://emacsconf.org/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="https://emacsconf.org/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:58- 9:04 Sunday opening remarks</title> <rect x="-4" y="15" opacity="0.8" width="9" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="https://emacsconf.org/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="https://emacsconf.org/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="https://emacsconf.org/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="https://emacsconf.org/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="https://emacsconf.org/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="https://emacsconf.org/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="https://emacsconf.org/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="https://emacsconf.org/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="https://emacsconf.org/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="https://emacsconf.org/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="https://emacsconf.org/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="https://emacsconf.org/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="https://emacsconf.org/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="https://emacsconf.org/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="https://emacsconf.org/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="https://emacsconf.org/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg></div>
+<div><h1>Saturday, Dec 2, 2023</h1>
+<div data-start="2023-12-02T14:00:00+0000" data-end="2023-12-02T14:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:00</span> - <span class="sched-end">9:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-sat-open">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2023-sat-open">Etherpad</a></span>; <span class="sched-slug">id:sat-open</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/sat-open">Saturday opening remarks</a></div>
+
+
+</div>
+
+<div data-start="2023-12-02T14:10:00+0000" data-end="2023-12-02T14:20:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:10</span> - <span class="sched-end">9:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-adventure">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2023-adventure">Etherpad</a></span>; <span class="sched-slug">id:adventure</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/adventure">An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</a></div>
+ <div class="sched-speakers">Chung-hong Chan (he/his/him, er/sein/ihn/ihm, 佢/他)</div>
+
+</div>
+
+<div data-start="2023-12-02T14:30:00+0000" data-end="2023-12-02T14:50:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:30</span> - <span class="sched-end">9:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-uni">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-uni.html">BBB</a></span>; <span class="sched-slug">id:uni</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a></div>
+ <div class="sched-speakers">James Howell</div>
+
+</div>
+
+<div data-start="2023-12-02T15:05:00+0000" data-end="2023-12-02T15:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:05</span> - <span class="sched-end">10:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-teaching">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-teaching.html">BBB</a></span>; <span class="sched-slug">id:teaching</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/teaching">Teaching computer and data science with literate programming tools</a></div>
+ <div class="sched-speakers">Marcus Birkenkrahe</div>
+
+</div>
+
+<div data-start="2023-12-02T15:40:00+0000" data-end="2023-12-02T15:50:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:40</span> - <span class="sched-end">10:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-table">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:table</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/table">Who needs Excel? Managing your students qualifications with org-table</a></div>
+ <div class="sched-speakers">Daniel Molina (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T16:30:00+0000" data-end="2023-12-02T16:50:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:30</span> - <span class="sched-end">11:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-one">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-one.html">BBB</a></span>; <span class="sched-slug">id:one</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a></div>
+ <div class="sched-speakers">Tony Aldon</div>
+
+</div>
+
+<div data-start="2023-12-02T18:00:00+0000" data-end="2023-12-02T18:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-writing">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-writing.html">BBB</a></span>; <span class="sched-slug">id:writing</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/writing">Emacs turbo-charges my writing</a></div>
+ <div class="sched-speakers">Jeremy Friesen (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T18:25:00+0000" data-end="2023-12-02T18:35:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:25</span> - <span class="sched-end">1:35</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-nabokov">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-nabokov.html">BBB</a></span>; <span class="sched-slug">id:nabokov</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/nabokov">Why Nabokov would use Org-Mode if he were writing today</a></div>
+ <div class="sched-speakers">Edmund Jorgensen (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T18:50:00+0000" data-end="2023-12-02T19:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:50</span> - <span class="sched-end">2:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-collab">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:collab</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/collab">Collaborative data processing and documenting using org-babel</a></div>
+ <div class="sched-speakers">Jonathan Hartman (he/him), Lukas C. Bossert (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T19:20:00+0000" data-end="2023-12-02T19:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:20</span> - <span class="sched-end">2:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-solo">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-solo.html">BBB</a></span>; <span class="sched-slug">id:solo</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/solo">How I play TTRPGs in Emacs</a></div>
+ <div class="sched-speakers">Howard Abrams</div>
+
+</div>
+
+<div data-start="2023-12-02T19:55:00+0000" data-end="2023-12-02T20:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:55</span> - <span class="sched-end">3:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-ref">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs</a></span>; <span class="sched-slug">id:ref</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/ref">Org-Mode workflow: informal reference tracking</a></div>
+ <div class="sched-speakers">Christopher Howard (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T20:25:00+0000" data-end="2023-12-02T20:35:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:25</span> - <span class="sched-end">3:35</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-unentangling">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2023-unentangling">Etherpad</a></span>; <span class="sched-slug">id:unentangling</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/unentangling">(Un)entangling projects and repos</a></div>
+ <div class="sched-speakers">Alexey Bochkarev (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T20:45:00+0000" data-end="2023-12-02T20:55:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:45</span> - <span class="sched-end">3:55</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-devel">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-devel.html">BBB</a></span>; <span class="sched-slug">id:devel</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/devel">Emacs development updates</a></div>
+ <div class="sched-speakers">John Wiegley (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-02T21:10:00+0000" data-end="2023-12-02T21:50:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:10</span> - <span class="sched-end">4:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-core">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-core.html">BBB</a></span>; <span class="sched-slug">id:core</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/core">Emacs core development: how it works</a></div>
+ <div class="sched-speakers">Stefan Kangas</div>
+
+</div>
+
+<div data-start="2023-12-02T22:05:00+0000" data-end="2023-12-02T22:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">5:05</span> - <span class="sched-end">5:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-sat-close">Etherpad</a></span>; <span class="sched-slug">id:sat-close</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/sat-close">Saturday closing remarks</a></div>
+
+
+</div>
+
+<h1>Sunday, Dec 3, 2023</h1>
+<div data-start="2023-12-03T13:58:00+0000" data-end="2023-12-03T14:04:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">8:58</span> - <span class="sched-end">9:04</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-sun-open">Etherpad</a></span>; <span class="sched-slug">id:sun-open</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/sun-open">Sunday opening remarks</a></div>
+
+
+</div>
+
+<div data-start="2023-12-03T14:05:00+0000" data-end="2023-12-03T14:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:05</span> - <span class="sched-end">9:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-hyperamp">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-hyperamp.html">BBB</a></span>; <span class="sched-slug">id:hyperamp</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/hyperamp">Top 10 ways Hyperbole amps up Emacs</a></div>
+ <div class="sched-speakers">Robert Weiner</div>
+
+</div>
+
+<div data-start="2023-12-03T14:40:00+0000" data-end="2023-12-03T15:00:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:40</span> - <span class="sched-end">10:00</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-koutline">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a></span>; <span class="sched-slug">id:koutline</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/koutline">Using Koutline for stream of thought journaling</a></div>
+ <div class="sched-speakers">Matthew Jorgensen (PlasmaStrike)</div>
+
+</div>
+
+<div data-start="2023-12-03T15:10:00+0000" data-end="2023-12-03T15:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:10</span> - <span class="sched-end">10:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-parallel">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-parallel.html">BBB</a></span>; <span class="sched-slug">id:parallel</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/parallel">Parallel text replacement</a></div>
+ <div class="sched-speakers">Lovro, Valentino Picotti</div>
+
+</div>
+
+<div data-start="2023-12-03T15:35:00+0000" data-end="2023-12-03T15:45:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:35</span> - <span class="sched-end">10:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-eat">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-eat.html">BBB</a></span>; <span class="sched-slug">id:eat</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/eat">Eat and Eat powered Eshell, fast featureful terminal inside Emacs</a></div>
+ <div class="sched-speakers">Akib Azmain Turja (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-03T16:00:00+0000" data-end="2023-12-03T16:20:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:00</span> - <span class="sched-end">11:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-poltys">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-poltys.html">BBB</a></span>; <span class="sched-slug">id:poltys</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/poltys">The browser in a buffer</a></div>
+ <div class="sched-speakers">Michael Bauer (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-03T16:35:00+0000" data-end="2023-12-03T16:55:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:35</span> - <span class="sched-end">11:55</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-cubing">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: wasamasa</a></span>; <span class="sched-slug">id:cubing</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/cubing">Speedcubing in Emacs</a></div>
+ <div class="sched-speakers">wasamasa (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-03T18:00:00+0000" data-end="2023-12-03T18:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-emms">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-emms.html">BBB</a></span>; <span class="sched-slug">id:emms</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/emms">Emacs MultiMedia System (EMMS)</a></div>
+ <div class="sched-speakers">Yoni Rabkin</div>
+
+</div>
+
+<div data-start="2023-12-03T18:55:00+0000" data-end="2023-12-03T19:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:55</span> - <span class="sched-end">2:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-steno">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:steno</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/steno">Programming with steno</a></div>
+ <div class="sched-speakers">Daniel Alejandro Tapia (I like "thou" for the second person and "ou" for the third)</div>
+
+</div>
+
+<div data-start="2023-12-03T19:35:00+0000" data-end="2023-12-03T19:45:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:35</span> - <span class="sched-end">2:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-mentor">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-mentor.html">BBB</a></span>; <span class="sched-slug">id:mentor</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/mentor">Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</a></div>
+ <div class="sched-speakers">Jeremy Friesen (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-03T20:10:00+0000" data-end="2023-12-03T20:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:10</span> - <span class="sched-end">3:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-web">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-web.html">BBB</a></span>; <span class="sched-slug">id:web</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/web">Emacs saves the Web (maybe)</a></div>
+ <div class="sched-speakers">Yuchen Pei (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-03T20:55:00+0000" data-end="2023-12-03T21:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:55</span> - <span class="sched-end">4:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-sharing">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2023/current/bbb-sharing.html">BBB</a></span>; <span class="sched-slug">id:sharing</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/sharing">Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</a></div>
+ <div class="sched-speakers">Jacob Boxerman (he/him)</div>
+
+</div>
+
+<div data-start="2023-12-03T21:30:00+0000" data-end="2023-12-03T21:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:30</span> - <span class="sched-end">4:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-sun-close">Etherpad</a></span>; <span class="sched-slug">id:sun-close</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2023/talks/sun-close">Sunday closing remarks</a></div>
+
+
+</div>
+
+</div>
diff --git a/2023/watch/info.md b/2023/watch/info.md
new file mode 100644
index 00000000..5900cd5e
--- /dev/null
+++ b/2023/watch/info.md
@@ -0,0 +1,11 @@
+[[!sidebar content=""]]<!-- Automatically generated by emacsconf-publish-watch-pages -->
+
+<h2>Tracks</h2>
+We recommend using a streaming player like mpv to watch the livestreams. Example: <pre>
+mpv https://live0.emacsconf.org/gen.webm
+mpv https://live0.emacsconf.org/dev.webm
+</pre><table width="100%"><tr><th>Watch page</th><th>IRC channel (libera.chat)</th><th>URL for streaming player (ex: mpv, vlc, ffplay)</th><th>Low res</th></tr>
+<tr><td><div class="sched-track General"><a href="/2023/watch/gen/">General</a></div></td><td><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">emacsconf-gen</a></td><td><a href="https://live0.emacsconf.org/gen.webm">https://live0.emacsconf.org/gen.webm</a></td><td><a href="https://live0.emacsconf.org/gen-480p.webm">gen-480p.webm</a></tr>
+<tr><td><div class="sched-track Development"><a href="/2023/watch/dev/">Development</a></div></td><td><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">emacsconf-dev</a></td><td><a href="https://live0.emacsconf.org/dev.webm">https://live0.emacsconf.org/dev.webm</a></td><td><a href="https://live0.emacsconf.org/dev-480p.webm">dev-480p.webm</a></tr></table>
+
+<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="https://emacsconf.org/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="https://emacsconf.org/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="https://emacsconf.org/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="https://emacsconf.org/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="https://emacsconf.org/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="https://emacsconf.org/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="https://emacsconf.org/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="https://emacsconf.org/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="https://emacsconf.org/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="https://emacsconf.org/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="https://emacsconf.org/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="https://emacsconf.org/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="https://emacsconf.org/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="https://emacsconf.org/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="https://emacsconf.org/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="https://emacsconf.org/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="https://emacsconf.org/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="https://emacsconf.org/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="https://emacsconf.org/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:58- 9:04 Sunday opening remarks</title> <rect x="-4" y="15" opacity="0.8" width="9" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="https://emacsconf.org/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="https://emacsconf.org/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="https://emacsconf.org/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="https://emacsconf.org/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="https://emacsconf.org/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="https://emacsconf.org/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="https://emacsconf.org/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="https://emacsconf.org/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="https://emacsconf.org/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="https://emacsconf.org/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="https://emacsconf.org/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="https://emacsconf.org/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="https://emacsconf.org/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="https://emacsconf.org/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="https://emacsconf.org/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="https://emacsconf.org/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> \ No newline at end of file
diff --git a/CategoryCategory.md b/CategoryCategory.md
new file mode 100644
index 00000000..2e9234ce
--- /dev/null
+++ b/CategoryCategory.md
@@ -0,0 +1 @@
+[[!inline pages="tagged(CategoryCategory)" archive="yes" limit="0" trail="yes"]]
diff --git a/CategoryCoding.md b/CategoryCoding.md
new file mode 100644
index 00000000..74fb79f3
--- /dev/null
+++ b/CategoryCoding.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryCoding"]]
+
+[[!inline pages="tagged(CategoryCoding)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryCommunity.md b/CategoryCommunity.md
new file mode 100644
index 00000000..ed0b3dad
--- /dev/null
+++ b/CategoryCommunity.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryCommunity"]]
+
+[[!inline pages="tagged(CategoryCommunity)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryConfiguration.md b/CategoryConfiguration.md
new file mode 100644
index 00000000..5540c771
--- /dev/null
+++ b/CategoryConfiguration.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryConfiguration"]]
+
+[[!inline pages="tagged(CategoryConfiguration)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryEEV.md b/CategoryEEV.md
new file mode 100644
index 00000000..2c4f2a6a
--- /dev/null
+++ b/CategoryEEV.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryEEV"]]
+
+[[!inline pages="tagged(CategoryEEV)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryEmacsLisp.md b/CategoryEmacsLisp.md
new file mode 100644
index 00000000..3a6d6a49
--- /dev/null
+++ b/CategoryEmacsLisp.md
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged CategoryEmacsLisp"]]
+
+[[!inline pages="tagged(CategoryEmacsLisp)" actions="no" archive="yes"
+feedshow=10]]
diff --git a/CategoryEmacsNews.md b/CategoryEmacsNews.md
new file mode 100644
index 00000000..b371ae62
--- /dev/null
+++ b/CategoryEmacsNews.md
@@ -0,0 +1,7 @@
+[[!meta title="pages tagged CategoryEmacsNews"]]
+
+[[!inline pages="tagged(CategoryEmacsNews)" actions="no" archive="yes"
+feedshow=10]]
+
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryFun.md b/CategoryFun.md
new file mode 100644
index 00000000..24e0e77e
--- /dev/null
+++ b/CategoryFun.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryFun"]]
+
+[[!inline pages="tagged(CategoryFun)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryHyperbole.md b/CategoryHyperbole.md
new file mode 100644
index 00000000..a4ee017f
--- /dev/null
+++ b/CategoryHyperbole.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryHyperbole"]]
+
+[[!inline pages="tagged(CategoryHyperbole)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryLinguistics.md b/CategoryLinguistics.md
new file mode 100644
index 00000000..1e8d26ce
--- /dev/null
+++ b/CategoryLinguistics.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryLinguistics"]]
+
+[[!inline pages="tagged(CategoryLinguistics)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryMail.md b/CategoryMail.md
new file mode 100644
index 00000000..632b8a0d
--- /dev/null
+++ b/CategoryMail.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryMail"]]
+
+[[!inline pages="tagged(CategoryMail)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryOrgMode.md b/CategoryOrgMode.md
new file mode 100644
index 00000000..3e050428
--- /dev/null
+++ b/CategoryOrgMode.md
@@ -0,0 +1,3 @@
+[[!inline pages="tagged(CategoryOrgMode)" archive="yes" limit="0" trail="yes"]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryOrgRoam.md b/CategoryOrgRoam.md
new file mode 100644
index 00000000..f4d07e31
--- /dev/null
+++ b/CategoryOrgRoam.md
@@ -0,0 +1,3 @@
+[[!inline pages="tagged(CategoryOrgRoam)" archive="yes" limit="0" trail="yes"]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryPhilosophy.md b/CategoryPhilosophy.md
new file mode 100644
index 00000000..ff2789a6
--- /dev/null
+++ b/CategoryPhilosophy.md
@@ -0,0 +1,3 @@
+[[!inline pages="tagged(CategoryPhilosophy)" archive="yes" limit="0" trail="yes"]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryPython.md b/CategoryPython.md
new file mode 100644
index 00000000..295d9b47
--- /dev/null
+++ b/CategoryPython.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryPython"]]
+
+[[!inline pages="tagged(CategoryPython)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryTreeSitter.md b/CategoryTreeSitter.md
new file mode 100644
index 00000000..676ec8cf
--- /dev/null
+++ b/CategoryTreeSitter.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryTreeSitter"]]
+
+[[!inline pages="tagged(CategoryTreeSitter)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/CategoryVolunteer.md b/CategoryVolunteer.md
new file mode 100644
index 00000000..6cd3e4fb
--- /dev/null
+++ b/CategoryVolunteer.md
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged CategoryVolunteer"]]
+
+[[!inline pages="tagged(CategoryVolunteer)" actions="no" archive="yes"
+feedshow=10]]
diff --git a/CategoryZettelkasten.md b/CategoryZettelkasten.md
new file mode 100644
index 00000000..84ba9e67
--- /dev/null
+++ b/CategoryZettelkasten.md
@@ -0,0 +1,6 @@
+[[!meta title="pages tagged CategoryZettelkasten"]]
+
+[[!inline pages="tagged(CategoryZettelkasten)" actions="no" archive="yes"
+feedshow=10]]
+
+[[!taglink CategoryCategory]]
diff --git a/__60__TMPL_VAR.md b/__60__TMPL_VAR.md
new file mode 100644
index 00000000..e619e20a
--- /dev/null
+++ b/__60__TMPL_VAR.md
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged <TMPL VAR"]]
+
+[[!inline pages="tagged(__60__TMPL_VAR)" actions="no" archive="yes"
+feedshow=10]]
diff --git a/bandali.md b/bandali.md
index a7f2218b..24312343 100644
--- a/bandali.md
+++ b/bandali.md
@@ -1,15 +1,22 @@
-Hi, I'm [bandali][bandali], and I'm a [free software][freesw] activist.
-I [wear a few different hats][bandali-gnu] around the GNU Project, and
-I'm also an ex-intern and current volunteer for the FSF.
+Hi, I'm [bandali][bandali], and I'm a [free software][freesw]
+activist. I [wear a few hats][bandali-gnu] around the
+[GNU Project][gnu], and I'm also an ex-intern and current
+volunteer with the [Free Software Foundation][fsf].
I first got involved with EmacsConf back in 2015 when I helped
-organize [[EmacsConf 2015|2015]], mainly taking care of the infra, and
-was the chief organizer for EmacsConf [[2019]] and [[2020]].
+organize [[EmacsConf 2015|2015]], mainly taking care of the infra,
+and was the chief organizer for EmacsConf [[2019]] and [[2020]].
+I'm currently a core organizer of EmacsConf and the sysadmin looking
+over the EmacsConf infra.
-You can contact me by emailing me at bandali at gnu dot org, or by
-messaging me (bandali) on freenode.
+You can reach me via email me at bandali at gnu dot org, or via IRC
+by messaging me (`bandali`) on the [Libera.Chat][libera] network.
+You can also find me on various free software-related channels there,
+such as `#gnu`, `#emacs`, and `#emacsconf`.
-[bandali]: https://shemshak.org/~bandali
+[bandali]: https://www.gnu.ca/~bandali/
[freesw]: https://www.gnu.org/philosophy/free-sw.html
[bandali-gnu]: https://www.gnu.org/people/people.html#bandali
-[emacsel]: https://emacsel.com
+[gnu]: https://www.gnu.org
+[fsf]: https://www.fsf.org
+[libera]: https://libera.chat
diff --git a/blog.md b/blog.md
new file mode 100644
index 00000000..70e01d97
--- /dev/null
+++ b/blog.md
@@ -0,0 +1 @@
+[[!inline pages="blog/* and !*/Discussion" show="10" rootpage="blog"]]
diff --git a/blog/2022-10-16.md b/blog/2022-10-16.md
new file mode 100644
index 00000000..a3aae9fb
--- /dev/null
+++ b/blog/2022-10-16.md
@@ -0,0 +1,44 @@
+[[!date "2022-10-16"]]
+[[!meta title="Speakers confirmed, Etherpad, watch pages, shifts"]]
+
+Hello, folks! Here's the weekly update on what's happening backstage
+for EmacsConf 2022 in case you notice something that you want to help
+out with. =)
+
+- All the speakers have confirmed that they've gotten the acceptance
+ e-mails. Many speakers have confirmed that the schedule works for
+ them after I reshuffled a few talks for better availability. I've
+ posted the schedule at <https://emacsconf.org/2022/talks/> . We'll
+ announce the schedule on the emacsconf-discuss mailing, Reddit, and
+ various places this week.
+
+- zaeph has been working on the ffmpeg incantations for preprocessing
+ the videos that will be submitted soon. bandali is working on
+ getting the FTP and web-based uploads sorted out so that speakers
+ can submit their videos.
+
+- I created some watch pages to support viewing different tracks:
+ <https://emacsconf.org/2022/watch/> . The livestreams won't work yet
+ and it would be nice to figure out something that can dynamically
+ display info for recent/current/upcoming talks, but it's a start.
+
+- We set up a self-hosted Etherpad (ex:
+ <https://pad.emacsconf.org/2022-journalism>) with an easy way to
+ redirect to using Wikimedia in case we run into scaling issues. I've
+ added it to our Ansible playbook
+ (git@git.emacsconf.org:pub/emacsconf-ansible) and I'm looking
+ forward to incorporating Ry P.'s improvements. Karl Voit gave
+ feedback on the first draft of the template.
+
+- vetrivln volunteered for some of the dev hosting shifts, Karl Voit
+ volunteered for some of the gen pad shifts, and FlowyCoder
+ volunteered for some of the gen check-in shifts. Thanks!
+
+Next week, we hope to:
+
+- Announce the EmacsConf 2022 schedule in the usual places (got any wording/JS/CSS suggestions?)
+- Finalize the upload instructions so that speakers can start submitting their files
+- Put together volunteer training materials
+- Set up per-speaker BBB rooms and friendly URLs
+
+Sacha
diff --git a/blog/2022-10-23.md b/blog/2022-10-23.md
new file mode 100644
index 00000000..3bbced51
--- /dev/null
+++ b/blog/2022-10-23.md
@@ -0,0 +1,67 @@
+[[!date "2022-10-23T18:07:00Z"]]
+[[!meta title="Backstage, captions, streaming, and more"]]
+
+Hello, folks! Here's the weekly update on what's happening backstage
+for EmacsConf 2022 in case you notice something that you want to help
+out with. =)
+
+- We've e-mailed the speakers instructions for uploading their files
+ through either a web browser or an FTP client, and three speakers
+ have already done so! Those talks are now available in the backstage
+ area (<https://media.emacsconf.org/2022/backstage/>), along with the
+ first set of edited captions (thanks Jai Vetrivelan!). If you don't
+ have the username and password for the backstage area and you would
+ like to access it, please e-mail me and I'll send you the details.
+- We've created a BBB room for each speaker's live Q&A session. The
+ URLs are in conf.org in the private repository if you need them.
+- We've drafted some documentation for different volunteer roles. If
+ you'd like to volunteer as a captioner, check-in person (hmm,
+ reception?), Etherpad scribe, IRC monitor, or host, please check out
+ the appropriate link and let me know if I need to add anything to
+ the docs:
+ - <https://emacsconf.org/2022/volunteer/caption>
+ - <https://emacsconf.org/2022/volunteer/irc>
+ - <https://emacsconf.org/2022/volunteer/pad>
+ - <https://emacsconf.org/2022/volunteer/checkin>
+ - <https://emacsconf.org/2022/volunteer/host>
+- Thanks to David O'Toole for signing up for some IRC shifts! If you
+ would like to volunteer for a shift, check out
+ <https://emacsconf.org/2022/organizers-notebook/#shifts> .
+- We've updated our streaming configuration for the General and
+ Development tracks, and have started testing them using mpv and the
+ watch pages. Videos aren't currently streaming, but you can check
+ out the layout of the watch pages at:
+ - <https://emacsconf.org/2022/watch/gen/>
+ - <https://live.emacsconf.org/2022/watch/gen/>
+ - <https://emacsconf.org/2022/watch/dev/>
+ - <https://live.emacsconf.org/2022/watch/dev/>
+ These pages could probably be a lot prettier and easier to use. If you have some ideas
+ for improving them or if you'd like to work on the HTML/CSS/JS, we'd
+ love your help!
+- There are now Q&A waiting rooms with friendly URLs so that it's
+ easier for people to join the live Q&A when the host decides it's
+ okay to let everyone in. They're linked on the watch pages (along
+ with the pads) and they'll be linked from the talk pages once we're
+ ready to share them.
+- zaeph has been busy tweaking the ffmpeg workflow for reencoding and
+ normalizing videos. Thanks to Ry P. for sharing the
+ res.emacsconf.org server with us - we've been using it for all the
+ processing that our laptops can't handle.
+- We experimented with using the OpenAI Whisper speech-to-text toolkit
+ to create the auto-generated captions that captioning volunteers can
+ edit. Looks promising! If you'd like to compare the performance
+ between small, medium, and large models, you can look at the VTT
+ files for the sqlite talk in the backstage area. I've also added
+ support for tab-separated values (like Audacity label exports) and a
+ subed-convert command to subed.el, which might give us a more
+ concise format to work with. I'll work on getting word-level timing
+ data so that our captioning workflow can be even easier.
+
+Next week, we hope to:
+
+- improve the prerec and captioning workflows
+- get more captions underway
+
+Lots of good stuff happening!
+
+Sacha
diff --git a/blog/2022-10-30.md b/blog/2022-10-30.md
new file mode 100644
index 00000000..cc56d0a5
--- /dev/null
+++ b/blog/2022-10-30.md
@@ -0,0 +1,51 @@
+[[!meta title="Captions, tech checks, intros, OBS"]]
+
+Hello, everyone! Here's the weekly update on what's happening backstage
+for EmacsConf 2022 in case you notice something that you want to help
+out with. =)
+
+- Help wanted - Captioning: There are three talks open for captioning
+ in <https://media.emacsconf.org/2022/backstage/> , so feel free to
+ e-mail me if you'd like to reserve one. I've tweaked the captioning
+ process a little bit so that I can reflow the transcripts into
+ shorter subtitles before people edit the captions, so editing is
+ easier to do because you don't have to split along the way. (If
+ you're curious about the technical stuff, I switched to manually
+ splitting the text using emacsconf-reflow from emacsconf-el and then
+ the using aeneas for forced alignment, because I couldn't figure out
+ how to get torchaudio unstuck sometimes.)
+
+ If you don't have the username and password for the backstage area
+ and you would like to access it, please e-mail me and I'll send you
+ the details.
+
+- Help wanted - tech checks: For sessions with live Q&A, we'd like to
+ set up tech-checks with speakers to make sure that their setup works
+ well with BigBlueButton. A rough outline of the process is in the
+ tech-checking protocol heading at
+ <https://emacsconf.org/2022/organizers-notebook/#tech-checks> . If you
+ would like to help with tech-checks, please e-mail us with your
+ general availability (including timezones) and preferred public
+ contact information so that we can include you on the list at
+ <https://emacsconf.org/2022/prepare/#tech-check> and in the e-mail to
+ speakers.
+
+- Help wanted - intro/intermission slides, OBS overlay, ??: It might
+ be interesting to design something to show right before and right
+ after a talk so that people can see the title, speaker name, talk
+ page URL, Q&A info, pad URL, pronouns, etc. Ideally we'd be able to
+ generate a whole bunch of these from the talk data, so maybe SVG or
+ a TikZ picture? If this is your jam, let us know.
+
+- OBS in the cloud: We've been able to figure out how to stream both
+ streams using OBS, VNC, and PulseAudio on Ry P.'s virtual server, so
+ it's even more likely that we're going to pull off two tracks this
+ year. Yay!
+
+- Tom Purl has joined as a captioning volunteer. Hi Tom!
+
+This week we hope to get lots of talks submitted, processed, and on
+the way to being captioned. We're also planning to make the captioning
+workflow even better, and to improve the OBS streaming workflow. Whee!
+
+Sacha <sacha@sachachua.com>
diff --git a/blog/2022-11-07.md b/blog/2022-11-07.md
new file mode 100644
index 00000000..571937af
--- /dev/null
+++ b/blog/2022-11-07.md
@@ -0,0 +1,51 @@
+[[!date "2022-10-16"]]
+[[!meta title="Captions, dry run, workflow improvements"]]
+
+Hi everyone!
+
+Here's what's been happening backstage.
+
+- Speakers have been submitting their videos, hooray! I added a
+ schedule to the backstage page at
+ <https://media.emacsconf.org/2022/backstage/> so that people can see
+ how the schedule's coming along. We expect more talks to come in the
+ next two weeks. Not panicking yet. =)
+
+- Thanks to all the people who've been working on captions so far!
+ Bhavin, Andrea, and Ramin did the captions for their talks, and Jai
+ captioned Bala's talk. Tom, Bhavin, and Hannah are currently working
+ on captions. There are three more talks backstage if anyone wants to
+ work on them.
+
+- I just posted some notes on how I reflow and edit subtitles in case
+ they're helpful:
+ <https://media.emacsconf.org/2022/backstage/editing-captions.html>
+ It's also linked from the backstage page under More info: editing
+ captions.
+
+- We added the Emacs development updates talk from John Wiegley and
+ updated the times of other talks based on messages from the
+ speakers.
+
+- We did a dry run of the OBS streaming setup with Leo, Amin, and
+ Corwin. I think we're on track to being able to broadcast two
+ streams this year.
+
+- IRC announcements, BBB redirection, and media file publishing can
+ now all automatically happen when the talk status changes,
+ simplifying our work during the conference. Video playback and Q&A
+ browser windows can happen automatically if streaming from
+ res.emacsconf.org. I want to get the publishing workflow all
+ smoothed out too, so that talks and transcripts can be more easily
+ published to the wiki pages during the conference.
+
+Plans for this week:
+
+- More videos and captions!
+- I plan to work on talk page publishing so that it happens smoothly during the conference
+- Leo's going to review the videos submitted so far and prepare intros for them
+- Might be a good idea to reach out to speakers for tech checks and bios
+
+EmacsConf is a little less than four weeks away. Stuff is happening!
+
+Sacha
diff --git a/blog/2023-08-14-cfp-progress.md b/blog/2023-08-14-cfp-progress.md
new file mode 100644
index 00000000..b9086b03
--- /dev/null
+++ b/blog/2023-08-14-cfp-progress.md
@@ -0,0 +1,141 @@
+[[!date "2023-08-14"]]
+[[!meta title="EmacsConf 2023 CFP progress report (8 talks accepted so far, 1 to review, 6 todo)"]]
+
+The end of the EmacsConf 2023 call for participation is one month away
+(Sept 14; <https://emacsconf.org/2023/cfp/>). Whee! So far, we&rsquo;ve sent
+early acceptances to the following talks and added them to the program
+on the wiki (<https://emacsconf.org/2023/talks>):
+
+<table>
+<colgroup>
+<col class="org-right">
+<col class="org-left">
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-right">Duration</td>
+<td class="org-left">Title</td>
+<td class="org-left">Speaker</td>
+</tr>
+<tr>
+<td class="org-right">10</td>
+<td class="org-left">An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</td>
+<td class="org-left">Chung-hong Chan</td>
+</tr>
+<tr>
+<td class="org-right">20</td>
+<td class="org-left">Authoring and presenting university courses with Emacs and a full libre software stack</td>
+<td class="org-left">James Howell</td>
+</tr>
+<tr>
+<td class="org-right">20</td>
+<td class="org-left">Org-Mode workflow: informal reference tracking</td>
+<td class="org-left">Christopher Howard</td>
+</tr>
+<tr>
+<td class="org-right">20</td>
+<td class="org-left">GNU Emacs for electronics, note-taking, and as lightweight IDE</td>
+<td class="org-left">Anand Tamariya</td>
+</tr>
+<tr>
+<td class="org-right">10</td>
+<td class="org-left">A modern Emacs look-and-feel without pain</td>
+<td class="org-left">Pedro A. Aranda</td>
+</tr>
+<tr>
+<td class="org-right">10</td>
+<td class="org-left">Writing a language server in OCaml for Emacs, fun, and profit</td>
+<td class="org-left">Austin Theriault</td>
+</tr>
+<tr>
+<td class="org-right">20</td>
+<td class="org-left">LLM clients in Emacs, functionality and standardization</td>
+<td class="org-left">Andrew Hyatt</td>
+</tr>
+<tr>
+<td class="org-right">10</td>
+<td class="org-left">The many ways to browse Hacker News from Emacs</td>
+<td class="org-left">Mickael Kerjean</td>
+</tr>
+</tbody>
+</table>
+
+There&rsquo;s one talk that&rsquo;s waiting for feedback on the emacsconf-submit
+before we send the early acceptance in about a week:
+
+<table>
+
+
+<colgroup>
+<col class="org-right">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-right">Duration</td>
+<td class="org-left">Title</td>
+<td class="org-left">Speaker</td>
+</tr>
+<tr>
+<td class="org-right">20</td>
+<td class="org-left">one.el: the static site generator for Emacs Lisp Programmers</td>
+<td class="org-left">Tony Aldon</td>
+</tr>
+</tbody>
+</table>
+
+There are several talk proposals that are in progress (need to
+coordinate, don&rsquo;t have speaker releases / full details / etc.):
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">Title</td>
+<td class="org-left">Speaker</td>
+</tr>
+<tr>
+<td class="org-left">Emacs MultiMedia System (EMMS)</td>
+<td class="org-left">Yoni Rabkin</td>
+</tr>
+<tr>
+<td class="org-left">Emacs development updates</td>
+<td class="org-left">John Wiegley</td>
+</tr>
+<tr>
+<td class="org-left">Watch Over Our Folders</td>
+<td class="org-left">Bastien Guerry</td>
+</tr>
+<tr>
+<td class="org-left">Emacs community information sharing?</td>
+<td class="org-left">Jake B</td>
+</tr>
+<tr>
+<td class="org-left">Emacs saves the Web</td>
+<td class="org-left">Yuchen Pei</td>
+</tr>
+<tr>
+<td class="org-left">How to build an Emacs 2: Revenge of the Lem</td>
+<td class="org-left">Fermin</td>
+</tr>
+</tbody>
+</table>
+
+This time last year, we had 2 proposals, with most of the proposals
+coming in at the end of the CFP. This was usually when we started
+panicking about not having lots of proposals, but I think we can skip
+stressing about it this year. <laugh> Even with the program as it is
+now, we&rsquo;d already have a pretty fun EmacsConf. Can&rsquo;t wait to see what
+it&rsquo;ll look like when more people get their proposals in!
+
+Sacha
diff --git a/blog/2023-09-25-draft-schedule.md b/blog/2023-09-25-draft-schedule.md
new file mode 100644
index 00000000..4b93e422
--- /dev/null
+++ b/blog/2023-09-25-draft-schedule.md
@@ -0,0 +1,33 @@
+[[!date "2023-09-25"]]
+[[!meta title="EmacsConf 2023 progress report: 44 talks accepted, schedule being drafted"]]
+
+The EmacsConf 2023 call for participation period has wrapped up,
+hooray! We&rsquo;ve accepted 44 talks and posted them at
+<https://emacsconf.org/2023/talks/>, with 1 more penciled in (woof -
+Watch Over Our Folders). This is about ~12 hours of talks. If we were
+to have 5 minutes buffer in between talks, it would be 15 hours and a
+pretty cramped conference. I think we can pull off a two-track
+conference again this year. Shall we give it a try? =) We can set up a
+schedule for the different roles as we get closer to the conference.
+
+I started drafting a schedule at
+<https://emacsconf.org/2023/organizers-notebook/#draft-schedule> .
+Thoughts on the order/grouping of talks? If the schedule looks all
+right, I can send this draft to all the speakers in case they have any
+requests regarding time preferences, other talk Q&A sessions that they
+want to attend live, etc.
+
+Next steps:
+
+- Schedule: We&rsquo;ll e-mail the draft schedule to speakers so that they
+ can get a sense of where they are in the schedule, see if they
+ really want to make it to a conflicting session&rsquo;s Q&A live
+ (they&rsquo;ll have early access to the videos), etc.
+- Infrastructure:
+ - Dust off and document infrastructure, processes
+ - Sort out access to media.emacsconf.org so that we can get the upload service up and running
+- Draft brief intros for talks, keeping in mind that we&rsquo;re going to say them out loud
+- Speakers will work on videos, and we can help with nudges/coordination if needed
+
+Sacha
+
diff --git a/captioning.md b/captioning.md
new file mode 100644
index 00000000..895e732b
--- /dev/null
+++ b/captioning.md
@@ -0,0 +1,201 @@
+[[!meta title="Captioning tips"]]
+[[!meta copyright="Copyright &copy; 2021, 2022 Sacha Chua"]]
+
+Captions are great for making videos (especially technical ones!)
+easier to understand and search.
+
+If you see a talk that you'd like to caption, feel free to download it
+and start working on it with your favourite subtitle editor. Let me
+know what you pick by e-mailing me at <sacha@sachachua.com> so that I
+can update the index and try to avoid duplication of work. [Find talks that need captions here](https://emacsconf.org/help_with_main_captions). You can also help by [adding chapter markers to Q&A sessions](https://emacsconf.org/help_with_chapter_markers).
+
+You're welcome to work with captions using your favourite tool. We've
+been using <https://github.com/sachac/subed> to caption things as VTT
+or SRT in Emacs, often starting with autogenerated captions from
+OpenAI Whisper (the .vtt).
+
+We'll be posting VTT files so that they can be included by the HTML5
+video player (demo: <https://emacsconf.org/2021/talks/news/>), so if
+you use a different tool that produces another format, any format that
+can be converted into that one (like SRT or ASS) is fine. `subed` has
+a `subed-convert` command that might be useful for turning WebVTT
+files into tab-separated values (TSV) and back again, if you prefer a
+more concise format.
+
+You can e-mail me the subtitles when you're done, and then I can merge
+it into the video.
+
+You might find it easier to start with the autogenerated captions
+and then refer to any resources provided by the speaker in order to
+figure out spelling. Sometimes speakers provide pretty complete
+scripts, which is great, but they also tend to add extra words.
+
+# Reflowing the text
+
+First, let's start with reflowing. We like to have one line of
+captions about 60 characters long so that they'll display nicely in
+the stream. If the captions haven't been reflowed yet, you can reflow
+the captions at natural pausing points (ex: phrases) so that they're
+displayed nicely. You don't have to worry too much about getting the
+timestamps precisely.
+
+For example, instead of:
+
+- so i'm going to talk today about a
+- fun rewrite i did of uh of the bindat
+- package
+
+you can edit it to be more like:
+
+- So I'm going to talk today
+- about a fun rewrite I did
+- of the bindat package.
+
+You probably don't need to do this step if you're working with the VTT
+files in the backstage area, since we try to reflow things before
+people edit them, but we thought we'd demonstrate it in case people
+are curious.
+
+We start with the text file that OpenAI Whisper generates. We set my
+`fill-column` to 50 and use `display-fill-column-indicator-mode` to
+give myself a goal column. A little over is fine too. Then we use
+`emacsconf-reflow` from the
+[emacsconf-el](git.emacsconf.org/emacsconf-el/) repository to quickly
+split up the text into captions by looking for where we want to add
+newlines and then typing the word or words. We type in ' to join lines.
+Sometimes, if it splits at the wrong one, we just undo it and edit it
+normally.
+
+It took about 4 minutes to reflow John Wiegley's 5-minute presentation.
+
+<video src="https://media.emacsconf.org/reflowing.webm" controls=""></video>
+
+The next step is to align it with
+[aeneas](https://github.com/readbeyond/aeneas) to get the timestamps
+for each line of text. `subed-align` from the subed package helps with that.
+
+<video src="https://media.emacsconf.org/alignment.webm" controls=""></video>
+
+# Edit the VTT to fix misrecognized words
+
+The next step is to edit these subtitles. VTT files are plain text, so
+you can edit them with regular `text-mode` if you want to. If you're
+editing subtitles within Emacs,
+[subed](https://github.com/sachac/subed) can conveniently synchronize
+video playback with subtitle editing, which makes it easier to figure
+out technical words. subed tries to load the video based on the
+filename, but if it can't find it, you can use `C-c C-v`
+(`subed-mpv-find-media`) to play a file or `C-c C-u` to play a URL.
+
+Look for misrecognized words and edit them. We also like to change
+things to follow Emacs keybinding conventions. We sometimes spell out
+acronyms on first use or add extra information in brackets. The
+captions will be used in a transcript as well, so you can add
+punctuation, remove filler words, and try to make it read better.
+
+Sometimes you may want to tweak how the captions are split. You can
+use `M-j` (`subed-jump-to-current-subtitle`) to jump to the caption if
+I'm not already on it, listen for the right spot, and maybe use
+`M-SPC` to toggle playback. Use `M-.` (`subed-split-subtitle`) to
+split a caption at the current MPV playing position and `M-m`
+(`subed-merge-with-next`) to merge a subtitle with the next one. Times
+don't need to be very precise. If you don't understand a word or
+phrase, add two question marks (`[??]`) and move on. We'll ask the
+speakers to review the subtitles and can sort that out then.
+
+If there are multiple speakers, indicate switches between speakers
+with a `[speaker-name]:` tag.
+
+<video src="https://media.emacsconf.org/editing.webm" controls=""></video>
+
+Once you've gotten the hang of things, it might take between 1x to 4x
+the video time to edit captions.
+
+# Playing your subtitles together with the video
+
+To load a specific subtitle file in MPV, use the `--sub-file=` or
+`--sub-files=` command-line argument.
+
+If you're using subed, the video should autoplay if it's named the
+same as your subtitle file. If not, you can use `C-c C-v`
+(`subed-mpv-play-from-file`) to load the video file. You can toggle
+looping over the current subtitle with `C-c C-l`
+(`subed-toggle-loop-over-current-subtitle`), synchronizing player to
+point with `C-c ,` (`subed-toggle-sync-player-to-point`), and
+synchronizing point to player with `C-c .`
+(`subed-toggle-sync-point-to-player`).
+
+# Using word-level timing data
+
+If there is a `.srv2` file with word-level timing data, you can load
+it with `subed-word-data-load-from-file` from `subed-word-data.el` in
+the subed package. You can then split with the usual `M-.`
+(`subed-split-subtitle`), and it should use word-level timestamps when
+available.
+
+# Starting from a script
+
+Some talks don't have autogenerated captions, or you may prefer to
+start from scratch. Whenever the speaker has provided a script, you
+can use that as a starting point. One way is to start by making a VTT
+file with one subtitle spanning the whole video, like this:
+
+```text
+WEBVTT
+
+00:00:00.000 -> 00:39:07.000
+If the speaker provided a script, I usually put the script under this heading.
+```
+
+If you're using subed, you can move to the point to a good stopping
+point for a phrase, toggle playing with `M-SPC`, and then `M-.`
+(`subed-split-subtitle`) when the player reaches that point. If it's
+too fast, use `M-j` to repeat the current subtitle.
+
+# Starting from scratch
+
+You can send us a text file with just the text transcript in it and
+not worry about the timestamps. We can figure out the timing using
+[aeneas for forced alignment](https://www.readbeyond.it/aeneas/).
+
+If you want to try timing as you go, you might find it easier to start
+by making a VTT file with one subtitle spanning the whole video, like
+this:
+
+```text
+WEBVTT
+
+00:00:00.000 -> 00:39:07.000
+```
+
+Then start playback and type, using `M-.` (`subed-split-subtitle`) to
+split after a reasonable length for a subtitle. If it's too fast, use
+`M-j` to repeat the current subtitle.
+
+# Chapter markers
+
+In addition to the captions, you may also want to add chapter markers.
+An easy way to do that is to add a =NOTE Chapter heading= before the
+subtitle that starts the chapter. For example:
+
+```text
+...
+00:05:13.880 --> 00:05:20.119
+So yeah, like that's currently the problem.
+
+NOTE Embeddings
+
+00:05:20.120 --> 00:05:23.399
+So I want to talk about embeddings.
+...
+```
+
+We can then extract those with
+`emacsconf-subed-make-chapter-file-based-on-comments`.
+
+For an example of how chapter markers allow people to quickly navigate
+videos, see <https://emacsconf.org/2021/talks/bindat/> .
+
+Please let us know if you need any help!
+
+Sacha <sacha@sachachua.com>
diff --git a/colophon.md b/colophon.md
index 2870d860..adde7413 100644
--- a/colophon.md
+++ b/colophon.md
@@ -1,5 +1,7 @@
[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali"]]
+You can find some rough notes at [[infra]].
+
## Ikiwiki
The EmacsConf site is actually a wiki, editable by anyone on the
@@ -9,7 +11,40 @@ using the [ikiwiki](//ikiwiki.info) wiki compiler.
You are welcome and encouraged to help improve the site. Please see
the [[instructions on how to edit the wiki|edit]].
-## Oddmuse
+## BigBlueButton
+
+We use BigBlueButton for the web conference.
+
+## Etherpad
+
+We use Etherpad for collaborative notes.
+
+## IRC via libera.chat and TheLounge
+
+We have #emacsconf and associated channels on the libera.chat network.
+
+We use TheLounge to provide a simple web chat interface.
+
+## OBS
+
+## VNC
+
+## Icecast
+
+Streaming
+
+## PsiTransfer
+
+## Captioning
+
+### OpenAI Whisper
+### Aeneas
+### subed-mode
+
+## Org Mode and Emacs
+
+## Archive
+### Oddmuse
The EmacsConf site during 2019 was built on the awesome
[Oddmuse](//oddmuse.org) wiki software, available under GPLv3+.
@@ -22,7 +57,7 @@ Feel free to check out our [[oddmuse]] page for more information about
our old Oddmuse setup, including the latest Oddmuse config file we
used, along with other related files.
-## Discourse
+### Discourse
For EmacsConf 2015 we started self-hosting a Discourse instance at
[discourse.emacsconf.org](//discourse.emacsconf.org). But as years
diff --git a/contact.md b/contact.md
new file mode 100644
index 00000000..27665828
--- /dev/null
+++ b/contact.md
@@ -0,0 +1,26 @@
+[[!meta title="Contact information"]]
+
+The EmacsConf community, including organizers, volunteers, and other
+folks interested in EmacsConf and Emacs, communicate mainly via IRC
+and mailing lists.
+
+EmacsConf's official IRC channels are on the [Libera.Chat][libera]
+network. The main IRC channel is `#emacsconf`, and `#emacsconf-org`
+is meant for discussing among EmacsConf organizers and/or discussions
+pertaining to the organization of the conference.
+
+EmacsConf's official mailing lists are hosted on the GNU Project's
+lists server. [emacsconf-discuss][emacsconf-discuss] is the main
+EmacsConf mailing list, for general discussion and announcements about
+the conference. The public [emacsconf-org][emacsconf-org] list is
+dedicated to discussions related to organizing the conference by the
+EmacsConf organizers and volunteers. There is also an
+[emacsconf-org-private][emacsconf-org-private] list for discussion of
+private matters with the EmacsConf organizers when need be, though the
+list is rather low traffic, as almost all discussions about organizing
+the conference are carried out publicly on the emacsconf-org list.
+
+[libera]: https://libera.chat
+[emacsconf-discuss]: https://lists.gnu.org/mailman/listinfo/emacsconf-discuss
+[emacsconf-org]: https://lists.gnu.org/mailman/listinfo/emacsconf-org
+[emacsconf-org-private]: https://lists.gnu.org/mailman/listinfo/emacsconf-org-private
diff --git a/edit.md b/edit.md
index bf6687fc..507feca3 100644
--- a/edit.md
+++ b/edit.md
@@ -10,21 +10,21 @@ encouraged to edit and help improve the site.
proceeding further and making any changes to the wiki.
To edit the wiki, you need to install `git` if it is not installed on
-your machine already. Then, you can clone the sources from any one of
-the following addresses:
+your machine already. After you do the first-time SSH setup below,
+you can clone the sources from any one of the following addresses:
- ssh://anon@git.emacsconf.org:emacsconf-wiki
+ anon@git.emacsconf.org:pub/emacsconf-wiki
git://git.emacsconf.org/emacsconf-wiki
https://git.emacsconf.org/emacsconf-wiki
Note that the `https://` access is read-only and does not allow
-pushing changes, while the `ssh://` and `git://` methods allow pushes
+pushing changes, while the `git@` (SSH) and `git://` methods allow pushes
as well. Even though `https://` access is read-only, it can be useful
if you would like to manually cross-check and compare the hashes of
commits with hashes of the commits of a clone over the insecure
`git://` protocol.
-We strongly recommend using `ssh://` (which is both secure and allows
+We strongly recommend using `git@git.emacsconf.org` (which is both secure and allows
pushes), and avoiding `git://` (no transport security) and `https://`
(read-only access) when possible.
@@ -173,6 +173,18 @@ course, can be reversed by making a series of new changes that reverse
the current changes. Git even has a `revert` subcommand just for that
(see `man git-revert`).
+## Note to EmacsConf admins
+
+If you need to add or update files that are normally restricted by the pre-receive hook, modify your `~/.ssh/config` to specify the `User` (and optionally `IdentityFile`) that's registered in the gitolite configuration, and add a remote with `git remote add trusted git@git.emacsconf.org:pub/emacsconf-wiki`. Then you should be able to push your changes with `git push trusted master`.
+
+To do this on a temporary basis, override `GIT_SSH_COMMAND` like so:
+
+```
+GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa' git clone git@git.emacsconf.org:pub/emacsconf-wiki
+```
+
+You can confirm your access with `ssh git@git.emacsconf.org`, which should list the different repositories you have access to.
+
## Have questions?
If you have any questions, or are having trouble pushing your changes
diff --git a/harvesting.md b/harvesting.md
new file mode 100644
index 00000000..264e077d
--- /dev/null
+++ b/harvesting.md
@@ -0,0 +1,66 @@
+[[!meta title="Harvesting Q&A"]]
+[[!meta copyright="Copyright &copy; 2021, 2022 Sacha Chua"]]
+
+During the harvesting phase of the conference, we work on collecting
+the ideas that people shared in the Q&A sessions as well as any talks
+that were not available as pre-recorded videos. It's a great way to
+help speakers get stuff out of their heads and into a form we can all
+learn from. Here's a process for doing so.
+
+# Add chapter markers
+
+Chapter markers make it easier for people to jump to the part of the
+Q&A that they're interested in. You can see an example of chapter
+headings in the
+[Q&A for asmblox](https://emacsconf.org/2022/talks/asmblox/). You can
+make a text file with the hh:mm:ss or mm:ss timestamps and the chapter
+headings.
+
+ 00:00 Introduction
+ 01:12 Why did you choose an internal state versus many 'state buffers'?
+ 02:10 Do you have plans to port shenzhen.io to Emacs?
+ 02:29 Did this use WASM?
+ 02:59 Why wasm rather than a more traditional Assembly dialect? It wouldn't be harder to implement, right?
+ 05:08 Any next projects on your mind?
+ 05:52 Does this work with any other paren-based editing packages?
+ 06:46 What kind of tool could use this idea?
+ 07:56 How did you go about designing the puzzles?
+ 08:39 What are your favorite changes in the upcoming Emacs 29?
+ 09:07 Are there tools to add more puzzles?
+
+If you're not sure how something is spelled, you can look at the list
+of questions asked during the Q&A sessions by going to the wiki page
+for the talk (see the links from [[/2022/talks]]), or indicating it
+with `??`.
+
+Alternatively, you can edit the VTT file (`--bbb-webcams.vtt`) and add
+NOTE comments with the chapter headings before the subtitles that are
+part of that chapter. If you're using [subed](https://github.com/sachac/subed) to edit subtitles within
+Emacs, you can split the subtitle as needed with `M-.`
+(`subed-split-subtitle`) so that the subtitle starts with the
+question. You don't have to worry about getting the timestamps exact,
+as we can re-align them with `M-x subed-align`. Here's what that NOTE
+comment can look like:
+
+ NOTE Why did you choose an internal state versus many 'state buffers'?
+
+ 00:01:12.600 --> 00:01:16.039
+ Okay. So, the first question is why did you choose an internal state
+
+These can then be extracted with
+`emacsconf-subed-make-chapter-file-based-on-comments` from [emacsconf-subed.el](https://git.emacsconf.org/emacsconf-el/tree/emacsconf-subed.el)
+and included in our publishing workflow.
+
+# Edit the transcript
+
+If you want to make it even easier for people to learn from the Q&A,
+you can edit the transcript so that it can also be published on the
+wiki page. See [[Captioning tips|captioning]].
+
+EmacsConf 2022 status update: asmblox, async, buttons, dbus, detached,
+eshell all have large-model Whisper transcripts. The rest have
+small-model Whisper transcripts that might need lots of extra editing,
+so you can either use them just for chapter markers, wait for the
+better transcripts (ETA Dec 15 or so), or work with the ones made with
+a small model.
+
diff --git a/help.md b/help.md
new file mode 100644
index 00000000..b01edc00
--- /dev/null
+++ b/help.md
@@ -0,0 +1,27 @@
+[[!meta title="Pages that need help"]]
+
+<details>
+<summary>How to add the help marker to a page</summary>
+To add the help marker to a page, you can use something like the following template:
+
+<pre>
+&#91;&#91;!template id="help"
+summary="main talk does not have captions"
+tags="help_with_main_captions"
+message="""This talk does not have captions yet.
+Would you like to help &#91;caption this talk&#93;(/2021/contribute/#edit-captions)?
+You may be able to start with these &#91;autogenerated captions&#93;(https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf--main.vtt)
+and &#91;timing information&#93;(https://media.emacsconf.org/2021/emacsconf-2021-build--how-to-build-an-emacs--fermin-mf.en.srv2)."""&#93;&#93;
+</pre>
+</details>
+
+If you want to work on a task that might take you a while, you can reserve it by editing the page and setting the `help` template's `volunteer` attribute to `your-name date`, or by e-mailing <emacsconf-submit@gnu.org>.
+
+Categories:
+
+ * [[help with chapter markers]]
+ * [[help with main captions]]
+
+Here are the pages that need help:
+
+[[!inline pages="tagged(help) and !templates/*" archive="yes" limit="0" trail="yes"]]
diff --git a/help_with_chapter_markers.md b/help_with_chapter_markers.md
new file mode 100644
index 00000000..a09a7ce0
--- /dev/null
+++ b/help_with_chapter_markers.md
@@ -0,0 +1,83 @@
+[[!meta title="Pages that need chapter markers"]]
+
+Chapter markers make videos easier to navigate. You can see an example
+of chapter headings in the
+[Q&A for asmblox](https://emacsconf.org/2022/talks/asmblox/).
+
+# Option A: Send us a text file
+
+To add chapter markers, make a rough note of the times the sections
+begin. You can make a text file with the hh:mm:ss or mm:ss timestamps
+and the chapter headings.
+
+ 00:00 Introduction
+ 01:12 Why did you choose an internal state versus many 'state buffers'?
+ 02:10 Do you have plans to port shenzhen.io to Emacs?
+ 02:29 Did this use WASM?
+ 02:59 Why wasm rather than a more traditional Assembly dialect? It wouldn't be harder to implement, right?
+ 05:08 Any next projects on your mind?
+ 05:52 Does this work with any other paren-based editing packages?
+ 06:46 What kind of tool could use this idea?
+ 07:56 How did you go about designing the puzzles?
+ 08:39 What are your favorite changes in the upcoming Emacs 29?
+ 09:07 Are there tools to add more puzzles?
+
+If you're not sure how something is spelled, you can look at the list
+of questions asked during the Q&A sessions by going to the wiki page
+for the talk, or you can indicate it with `??`.
+
+You can e-mail this to <emacsconf-submit@gnu.org> and we'll update the
+page with the chapters.
+
+# Option B: Edit the wiki page
+
+Another way to add chapter markers is by editing the wiki page and
+adding markup like this (example from [[2021/info/native-schedule]]):
+
+<pre>&#91;&#91;!template id="chapters" vidid="video-qanda" data="""
+00:00 Thanks
+01:16 Why is Elisp not a general-purpose programming language, at least not completely?
+02:05 Is this activity related to the garbage collector?
+02:37 Is the idea to eventually develop Emacs itself in Elisp?
+03:42 How did you work on this?
+...
+"""&#93;&#93;
+</pre>
+
+Use the vidid from the help message.
+
+# Option C: Edit the VTT file
+
+Alternatively, you can edit the VTT file (Q&A: `--answers.vtt` if available) and add
+NOTE comments with the chapter headings before the subtitles that are
+part of that chapter. If you're using [subed](https://github.com/sachac/subed) to edit subtitles within
+Emacs, you can split the subtitle as needed with `M-.`
+(`subed-split-subtitle`) so that the subtitle starts with the
+question. You don't have to worry about getting the timestamps exact,
+as we can re-align them with `M-x subed-align`. Here's what that NOTE
+comment can look like:
+
+ NOTE Why did you choose an internal state versus many 'state buffers'?
+
+ 00:01:12.600 --> 00:01:16.039
+ Okay. So, the first question is why did you choose an internal state
+
+These can then be extracted with
+`emacsconf-subed-make-chapter-file-based-on-comments` from `emacsconf-subed.el`
+and included in our publishing workflow.
+
+# Reserving a task
+
+If you want to work on a task that might take you a while, you can
+reserve it by editing the page and setting the `help` template's
+`volunteer` attribute to `your-name date`, or by e-mailing
+<emacsconf-submit@gnu.org>.
+
+If you're not sure how to edit the wiki, you can e-mail your chapter
+notes to <emacsconf-submit@gnu.org> and we can add them for you.
+
+The following pages do not yet have chapter markers (usually for long Q&A sessions):
+
+[[!inline pages="tagged(help_with_chapter_markers) and !templates/*" archive="yes" limit="0" trail="yes"]]
+
+[[Check out other ways to help|help]]
diff --git a/help_with_main_captions.md b/help_with_main_captions.md
new file mode 100644
index 00000000..8aee0edd
--- /dev/null
+++ b/help_with_main_captions.md
@@ -0,0 +1,15 @@
+[[!meta title="Talks that need captioning"]]
+
+Want to help make videos easier for people to enjoy during the
+conference, or find and learn from afterwards? Please volunteer to
+help caption recorded talks!
+
+If you want to work on a task that might take you a while, you can reserve it by editing the page and setting the `help` template's `volunteer` attribute to `your-name date`, or by e-mailing <emacsconf-submit@gnu.org>.
+
+[[Check out these captioning tips.|/captioning]]
+
+The following talks do not have edited captions:
+
+[[!inline pages="tagged(help_with_main_captions) and !templates/*" archive="yes" limit="0" trail="yes"]]
+
+[[Check out other ways to help|help]]
diff --git a/i/2022-handwritten-abstract.png b/i/2022-handwritten-abstract.png
new file mode 100644
index 00000000..c55c9c79
--- /dev/null
+++ b/i/2022-handwritten-abstract.png
Binary files differ
diff --git a/i/2022-handwritten-title.png b/i/2022-handwritten-title.png
new file mode 100644
index 00000000..fcbae768
--- /dev/null
+++ b/i/2022-handwritten-title.png
Binary files differ
diff --git a/i/emacsconf-2020-poster-alphapapa.svg b/i/emacsconf-2020-poster-alphapapa.svg
new file mode 100644
index 00000000..55fdf96f
--- /dev/null
+++ b/i/emacsconf-2020-poster-alphapapa.svg
@@ -0,0 +1,7598 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="600"
+ height="849"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="emacsconf2020poster.svg"
+ inkscape:export-filename="/home/me/Dropbox/Outbox/emacsconf/emacsconf2020poster.png"
+ inkscape:export-xdpi="119.1"
+ inkscape:export-ydpi="119.1">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient6010">
+ <stop
+ id="stop6012"
+ offset="0"
+ style="stop-color:#6200cb;stop-opacity:1;" />
+ <stop
+ id="stop6014"
+ offset="1"
+ style="stop-color:#6200cb;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5994">
+ <stop
+ style="stop-color:#8bd2d3;stop-opacity:1;"
+ offset="0"
+ id="stop5996" />
+ <stop
+ style="stop-color:#8bd2d3;stop-opacity:0;"
+ offset="1"
+ id="stop5998" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5917"
+ is_visible="true"
+ bendpath="m 355.0825,604.945 c 29.80726,9.48938 66.63249,10.86495 114.045,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <linearGradient
+ id="linearGradient5904">
+ <stop
+ id="stop5906"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop5908"
+ offset="1"
+ style="stop-color:#c4c39a;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5868"
+ is_visible="true"
+ bendpath="m 355.6025,605.785 c 51.56564,15.50745 109.16544,20.59916 181.64875,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <linearGradient
+ id="linearGradient5845">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5847" />
+ <stop
+ style="stop-color:#9c9ac4;stop-opacity:1;"
+ offset="1"
+ id="stop5849" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5809"
+ is_visible="true"
+ bendpath="m 353.5625,605.485 c 62.06774,17.24583 128.8137,22.83655 206.97,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <linearGradient
+ id="linearGradient5768">
+ <stop
+ id="stop5770"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop5772"
+ offset="1"
+ style="stop-color:#c49a9a;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5732"
+ is_visible="true"
+ bendpath="m 354.8425,601.685 c 61.48451,-10.30401 127.37439,-16.25926 205.69,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <linearGradient
+ id="linearGradient5682">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5684" />
+ <stop
+ style="stop-color:#8bd2d3;stop-opacity:1;"
+ offset="1"
+ id="stop5686" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5556"
+ is_visible="true"
+ bendpath="m 24.09375,571.56771 c 38.345678,10.55748 69.7203,8.44032 97.61719,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5494"
+ is_visible="true"
+ bendpath="m 127.68125,566.45032 c 58.33042,33.97329 117.39421,32.01132 177.07125,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5469"
+ is_visible="true"
+ bendpath="m 58.8825,332.97532 c 80.14605,-52.56148 147.48485,-41.08675 208.90125,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5436"
+ is_visible="true"
+ bendpath="m 39.2825,197.47782 c 46.568265,-34.50803 97.26127,-44.6801 157.25125,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3836">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3838" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3840" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3800">
+ <stop
+ style="stop-color:#605bad;stop-opacity:1;"
+ offset="0"
+ id="stop3802" />
+ <stop
+ style="stop-color:#b257c3;stop-opacity:1;"
+ offset="1"
+ id="stop3804" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3790">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3792" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3794" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3776"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#b257c3;stop-opacity:1;"
+ offset="0"
+ id="stop3778" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3770"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#605bad;stop-opacity:1;"
+ offset="0"
+ id="stop3772" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3800"
+ id="linearGradient3806"
+ x1="277.79196"
+ y1="13.603845"
+ x2="340.42142"
+ y2="266.14197"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3836"
+ id="linearGradient3963"
+ gradientUnits="userSpaceOnUse"
+ x1="19.992188"
+ y1="37.136068"
+ x2="223.05859"
+ y2="37.136068" />
+ <filter
+ id="filter9519-5-9"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9521-8-2"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9523-6-9"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9519-5"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9521-8"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9523-6"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9519"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9521"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9523"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9513"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9515"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9517"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9507"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9509"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9511"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9501"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9503"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9505"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9495"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9497"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9499"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9489"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9491"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9493"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9483"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9485"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9487"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9477"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9479"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9481"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9471"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9473"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9475"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9465"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9467"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9469"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9459"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9461"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9463"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9453"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9455"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9457"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9447"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9449"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9451"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9441"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9443"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9445"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9435"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9437"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9439"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9429"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9431"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9433"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9423"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9425"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9427"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9417"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9419"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9421"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9411"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9413"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9415"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9405"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9407"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9409"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9399"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9401"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9403"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9393"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9395"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9397"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9387"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9389"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9391"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9381"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9383"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9385"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9375"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9377"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9379"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9369"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9371"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9373"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9363"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9365"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9367"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9357"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9359"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9361"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9351"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9353"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9355"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9345"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9347"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9349"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9339"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9341"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9343"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9333"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9335"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9337"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9327"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9329"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9331"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9321"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9323"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9325"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9315"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9317"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9319"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9309"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9311"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9313"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9303"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9305"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9307"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9297"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9299"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9301"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter4362"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4364"
+ stdDeviation="1.5160574" />
+ </filter>
+ <filter
+ id="filter4354"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4356"
+ stdDeviation="1.5160574" />
+ </filter>
+ <filter
+ id="filter4346"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4348"
+ stdDeviation="1.5160574" />
+ </filter>
+ <filter
+ id="filter4338"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4340"
+ stdDeviation="1.5160574" />
+ </filter>
+ <filter
+ id="filter4330"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4332"
+ stdDeviation="1.5160574" />
+ </filter>
+ <filter
+ id="filter4322"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4324"
+ stdDeviation="1.5160574" />
+ </filter>
+ <linearGradient
+ id="linearGradient54267"
+ inkscape:collect="always">
+ <stop
+ id="stop54269"
+ offset="0"
+ style="stop-color:#d2d9b1;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffe7af;stop-opacity:1"
+ offset="0.05920397"
+ id="stop54271" />
+ <stop
+ id="stop54273"
+ offset="0.39160991"
+ style="stop-color:#c047c5;stop-opacity:1" />
+ <stop
+ style="stop-color:#5955a9;stop-opacity:0.99215686"
+ offset="1"
+ id="stop54275" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient54267"
+ id="radialGradient5366"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45138353,0.81323238,-1.222419,0.67850203,1036.3581,-157.52982)"
+ cx="584.20154"
+ cy="666.87793"
+ fx="584.20154"
+ fy="666.87793"
+ r="196.41905" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient54267-0"
+ id="radialGradient5366-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45138353,0.81323238,-1.222419,0.67850203,1036.3581,-157.52982)"
+ cx="584.20154"
+ cy="666.87793"
+ fx="584.20154"
+ fy="666.87793"
+ r="196.41905" />
+ <linearGradient
+ id="linearGradient54267-0"
+ inkscape:collect="always">
+ <stop
+ id="stop54269-7"
+ offset="0"
+ style="stop-color:#d2d9b1;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffe7af;stop-opacity:1"
+ offset="0.05920397"
+ id="stop54271-6" />
+ <stop
+ id="stop54273-0"
+ offset="0.39160991"
+ style="stop-color:#c047c5;stop-opacity:1" />
+ <stop
+ style="stop-color:#5955a9;stop-opacity:0.99215686"
+ offset="1"
+ id="stop54275-1" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5494-7"
+ is_visible="true"
+ bendpath="m 127.68125,566.45032 c 58.33042,33.97329 117.39421,32.01132 177.07125,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5682"
+ id="radialGradient5688"
+ cx="262.63965"
+ cy="741.92383"
+ fx="262.63965"
+ fy="741.92383"
+ r="82.697357"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5682-4"
+ id="radialGradient5688-6"
+ cx="262.63965"
+ cy="741.92383"
+ fx="262.63965"
+ fy="741.92383"
+ r="82.697357"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient5682-4">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5684-0" />
+ <stop
+ style="stop-color:#8bd2d3;stop-opacity:1;"
+ offset="1"
+ id="stop5686-9" />
+ </linearGradient>
+ <radialGradient
+ r="82.697357"
+ fy="741.92383"
+ fx="262.63965"
+ cy="741.92383"
+ cx="262.63965"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient5749"
+ xlink:href="#linearGradient5768"
+ inkscape:collect="always" />
+ <radialGradient
+ r="82.697357"
+ fy="741.92383"
+ fx="262.63965"
+ cy="741.92383"
+ cx="262.63965"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient5749-9"
+ xlink:href="#linearGradient5768-5"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5768-5">
+ <stop
+ id="stop5770-2"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop5772-1"
+ offset="1"
+ style="stop-color:#c49a9a;stop-opacity:1;" />
+ </linearGradient>
+ <radialGradient
+ r="82.697357"
+ fy="741.92383"
+ fx="262.63965"
+ cy="741.92383"
+ cx="262.63965"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient5826"
+ xlink:href="#linearGradient5845"
+ inkscape:collect="always" />
+ <radialGradient
+ r="82.697357"
+ fy="741.92383"
+ fx="262.63965"
+ cy="741.92383"
+ cx="262.63965"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient5826-0"
+ xlink:href="#linearGradient5845-9"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5845-9">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5847-9" />
+ <stop
+ style="stop-color:#9c9ac4;stop-opacity:1;"
+ offset="1"
+ id="stop5849-1" />
+ </linearGradient>
+ <radialGradient
+ r="82.697357"
+ fy="741.92383"
+ fx="262.63965"
+ cy="741.92383"
+ cx="262.63965"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient5885"
+ xlink:href="#linearGradient5904"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6010"
+ id="radialGradient6000"
+ cx="400"
+ cy="752.36218"
+ fx="400"
+ fy="752.36218"
+ r="196.41905"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5994"
+ id="radialGradient6002"
+ gradientUnits="userSpaceOnUse"
+ cx="400"
+ cy="752.36218"
+ fx="400"
+ fy="752.36218"
+ r="196.41905" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5994"
+ id="radialGradient6004"
+ gradientUnits="userSpaceOnUse"
+ cx="400"
+ cy="752.36218"
+ fx="400"
+ fy="752.36218"
+ r="196.41905" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5994"
+ id="radialGradient6006"
+ gradientUnits="userSpaceOnUse"
+ cx="400"
+ cy="752.36218"
+ fx="400"
+ fy="752.36218"
+ r="196.41905" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5994"
+ id="radialGradient6008"
+ gradientUnits="userSpaceOnUse"
+ cx="400"
+ cy="752.36218"
+ fx="400"
+ fy="752.36218"
+ r="196.41905" />
+ <filter
+ inkscape:collect="always"
+ id="filter6028">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="8.9281386"
+ id="feGaussianBlur6030" />
+ </filter>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6010"
+ id="radialGradient6040"
+ cx="307.85715"
+ cy="443.28571"
+ fx="307.85715"
+ fy="443.28571"
+ r="100.71429"
+ gradientUnits="userSpaceOnUse" />
+ <filter
+ inkscape:collect="always"
+ id="filter6042"
+ x="-0.28909091"
+ width="1.5781818"
+ y="-0.28909091"
+ height="1.5781818">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="24.262987"
+ id="feGaussianBlur6044" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.7"
+ inkscape:cx="-89.494687"
+ inkscape:cy="403.45279"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ showguides="true"
+ inkscape:snap-global="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1053"
+ inkscape:window-x="0"
+ inkscape:window-y="6"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2998"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Background"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-72.047241,-101.68109)"
+ style="display:inline">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:5.09875011000000011;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;fill-opacity:0.99607843"
+ id="rect3967-1"
+ width="600"
+ height="850"
+ x="72.047241"
+ y="100.68108" />
+ <rect
+ style="fill:url(#linearGradient3806);fill-opacity:1;stroke:none"
+ id="rect3000"
+ width="600"
+ height="160"
+ x="0"
+ y="-1"
+ transform="translate(72.047241,101.68109)" />
+ <rect
+ style="fill:none;stroke:#605bad;stroke-width:8.899;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:0.99607842999999996"
+ id="rect3967"
+ width="600"
+ height="850"
+ x="0"
+ y="-1"
+ transform="translate(72.047241,101.68109)" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3818"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ transform="translate(72.047241,101.68109)"><flowRegion
+ id="flowRegion3820"><rect
+ id="rect3822"
+ width="366.42856"
+ height="105"
+ x="15"
+ y="16.142857" /></flowRegion><flowPara
+ id="flowPara3824"></flowPara></flowRoot> </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Text">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.39351855;fill:url(#radialGradient6040);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter6042)"
+ id="path6032"
+ sodipodi:cx="307.85715"
+ sodipodi:cy="443.28571"
+ sodipodi:rx="100.71429"
+ sodipodi:ry="100.71429"
+ d="m 408.57143,443.28571 a 100.71429,100.71429 0 1 1 -201.42857,0 100.71429,100.71429 0 1 1 201.42857,0 z"
+ transform="matrix(1.2588652,0,0,1.2588652,-87.550649,-133.53695)" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3808"
+ style="font-size:72px;font-style:italic;font-variant:normal;font-weight:900;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#605bad;stroke-width:3.17200756;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;font-family:Source Code Pro;-inkscape-font-specification:Source Code Pro Heavy Italic"
+ transform="matrix(1.3853372,0,0,1.3853372,-222.10978,24.17965)"><flowRegion
+ id="flowRegion3810"><rect
+ id="rect3812"
+ width="393.01004"
+ height="244.386"
+ x="396.98996"
+ y="14.613997"
+ style="font-size:72px;font-style:italic;font-variant:normal;font-weight:900;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#605bad;stroke-width:3.17200756;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Source Code Pro;-inkscape-font-specification:Source Code Pro Heavy Italic" /></flowRegion><flowPara
+ id="flowPara3816"
+ style="font-size:72px;font-style:italic;font-variant:normal;font-weight:900;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#605bad;stroke-width:3.17200756;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Source Code Pro;-inkscape-font-specification:Source Code Pro Heavy Italic">2020</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot3826"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Roboto;-inkscape-font-specification:Roboto Heavy"
+ transform="matrix(1.5030022,0,0,1.5030022,42.471819,-11.943247)"><flowRegion
+ id="flowRegion3828"
+ style="stroke:url(#linearGradient3963)"><rect
+ id="rect3830"
+ width="355.71429"
+ height="135.71428"
+ x="17.857143"
+ y="12.571427"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke:none;font-family:Roboto;-inkscape-font-specification:Roboto Heavy" /></flowRegion><flowPara
+ id="flowPara3834"
+ style="fill:#ffffff;stroke:none">EmacsConf</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot3969"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.73031759;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;font-family:Roboto;-inkscape-font-specification:Roboto Medium"
+ transform="matrix(1.011375,0,0,1.011375,-0.283551,0.64673)"><flowRegion
+ id="flowRegion3971"><rect
+ id="rect3973"
+ width="515.1778"
+ height="60.609154"
+ x="20.203051"
+ y="83.304367"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke:#000000;stroke-width:1.73031759;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Roboto;-inkscape-font-specification:Roboto Medium" /></flowRegion><flowPara
+ id="flowPara3979">November 28-29</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4012"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Anonymous Pro;-inkscape-font-specification:Anonymous Pro Bold"
+ transform="translate(-15.657364,-2.525381)"><flowRegion
+ id="flowRegion4014"><rect
+ id="rect4016"
+ width="190.91884"
+ height="60.609154"
+ x="393.9595"
+ y="27.745981"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;font-family:Anonymous Pro;-inkscape-font-specification:Anonymous Pro Bold" /></flowRegion><flowPara
+ id="flowPara4020">.org</flowPara></flowRoot> <g
+ inkscape:label="logo"
+ id="layer1-9"
+ style="display:inline"
+ transform="translate(492.64259,-482.54723)">
+ <circle
+ d="m 596.41905,752.36218 c 0,108.47925 -87.9398,196.41905 -196.41905,196.41905 -108.47925,0 -196.41905,-87.9398 -196.41905,-196.41905 0,-108.47924 87.9398,-196.41905 196.41905,-196.41905 108.47925,0 196.41905,87.93981 196.41905,196.41905 z"
+ sodipodi:ry="196.41905"
+ sodipodi:rx="196.41905"
+ sodipodi:cy="752.36218"
+ sodipodi:cx="400"
+ style="color:#000000;fill:url(#radialGradient5366);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path54245"
+ cx="400"
+ cy="752.36218"
+ r="196.41905" />
+ <path
+ style="color:#000000;fill:#59509f;fill-opacity:0.99215686;fill-rule:nonzero;stroke:none;stroke-width:1.19700003;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 246.71273,875.02715 c 5.30707,-1.91678 11.21951,-1.07383 15.77945,2.24972 6.38683,4.67105 8.49739,13.29908 5.38115,20.57227 12.14398,11.00811 25.39824,20.45943 39.88974,28.11784 3.68734,-6.41948 11.5721,-9.83951 18.78293,-8.16326 9.02961,2.10252 14.64463,11.12745 12.54091,20.15677 -0.0896,0.35677 -0.19093,0.71049 -0.30378,1.0606 15.57369,5.04379 31.71723,8.11936 48.05451,9.15505 -1.01104,-8.7225 4.95288,-16.72102 13.60117,-18.24127 9.02229,-1.57386 17.61208,4.46455 19.18548,13.48693 0.23908,1.41366 0.29382,2.85238 0.16284,4.28012 16.62401,-1.6842 32.96491,-5.48438 48.6262,-11.30833 -0.33933,-0.41747 -0.65852,-0.8509 -0.95541,-1.29955 -4.91386,-7.59756 -2.73772,-17.74012 4.86036,-22.65318 7.59692,-4.91331 17.73846,-2.73794 22.65196,4.85885 1.08924,1.69488 1.85648,3.57615 2.26323,5.54937 9.13587,-5.12543 17.84673,-10.97404 26.04911,-17.48978 4.92512,-4.05567 9.64954,-8.34908 14.15644,-12.86493 -0.7586,-0.35369 -1.48864,-0.7657 -2.18351,-1.23232 -7.39953,-5.01207 -9.3356,-15.0733 -4.32456,-22.47351 5.01174,-7.40089 15.0742,-9.33762 22.47503,-4.32579 1.78793,1.21147 3.31531,2.76856 4.49212,4.5795 9.86282,-13.43645 17.9739,-28.07453 24.13738,-43.56082 -0.68657,-0.0382 -1.36996,-0.12057 -2.04592,-0.24672 -8.66506,-1.70098 -14.31034,-10.10459 -12.60879,-18.76953 1.70158,-8.66385 10.10398,-14.30823 18.76801,-12.60757 1.88133,0.3763 3.67957,1.08815 5.30871,2.1015 3.50739,-15.83095 5.03944,-32.03554 4.56115,-48.24332 -0.2772,0.0764 -0.55644,0.14512 -0.83739,0.20623 -8.53607,1.79747 -16.91306,-3.66524 -18.71053,-12.20131 -1.79747,-8.53607 3.66525,-16.91306 12.20133,-18.71053 1.41178,-0.29142 2.85682,-0.3882 4.29486,-0.28765 -2.93469,-15.4206 -7.70875,-30.43344 -14.21986,-44.71674 -7.05457,4.60498 -16.49076,2.77874 -21.31784,-4.12577 -4.93035,-7.06855 -3.19668,-16.79562 3.87217,-21.72555 0.83185,-0.57788 1.71803,-1.07333 2.64593,-1.47943 -3.46207,-5.27744 -7.17669,-10.3848 -11.13091,-15.30428 -5.68959,-6.93614 -11.84801,-13.47404 -18.43199,-19.56769 -4.82679,6.34987 -13.70035,7.96905 -20.45875,3.73318 -7.21117,-4.52518 -9.38873,-14.03929 -4.86378,-21.2506 0.40059,-0.6274 0.84611,-1.22495 1.33305,-1.78798 -12.41641,-8.42207 -25.75757,-15.39266 -39.76209,-20.7752 -1.80346,4.47435 -5.64318,7.8125 -10.32487,8.97615 -8.06632,1.99539 -16.22285,-2.92647 -18.21758,-10.99296 -0.54302,-2.22521 -0.57078,-4.54503 -0.0812,-6.7826 -14.85942,-3.19105 -30.03921,-4.64532 -45.2342,-4.3336 1.86804,8.01264 -3.04689,16.03973 -11.03281,18.01887 -8.06632,1.99539 -16.22284,-2.92647 -18.21758,-10.99296 -0.3548,-1.44099 -0.49445,-2.92656 -0.4144,-4.40843 -15.14883,2.61374 -29.93813,6.99823 -44.06378,13.06328 0.62478,0.58648 1.19766,1.22589 1.71226,1.91109 4.92654,6.56452 3.59952,15.87973 -2.96416,20.80739 -6.56446,4.92784 -15.88078,3.60131 -20.80891,-2.96294 -1.51864,-2.0258 -2.49452,-4.40601 -2.83521,-6.91481 -7.42416,4.43358 -14.54721,9.35296 -21.32258,14.72598 -6.17316,5.08504 -12.02978,10.5426 -17.53702,16.34224 2.42068,0.0763 4.78493,0.75011 6.88208,1.96152 7.01434,4.06792 9.4034,13.05153 5.33636,20.06639 -4.06754,7.0157 -13.05241,9.40546 -20.06792,5.33758 -3.72641,-2.16811 -6.31166,-5.86438 -7.07005,-10.10839 -37.96812,49.55357 -50.09792,114.21401 -32.67095,174.15927 2.96174,1.46395 5.43916,3.74997 7.136,6.58472 2.83741,4.75705 3.21007,10.58949 1.00115,15.66897 6.89206,16.19628 15.93154,31.39185 26.87526,45.1779 z m -8.50817,-35.53011 c -4.90963,-6.08526 -3.95644,-14.99839 2.12897,-19.90783 6.08593,-4.90878 14.99893,-3.95437 19.90753,2.13171 4.9083,6.08535 3.95462,14.99735 -2.1302,19.90631 -6.08534,4.90831 -14.99735,3.95462 -19.9063,-2.13019 z m 47.38703,49.78827 c -3.53469,-4.36911 -4.11121,-10.42946 -1.46335,-15.38646 3.63858,-6.81387 12.11212,-9.3877 18.92576,-5.74871 6.81401,3.63914 9.38724,12.11345 5.74718,18.92697 -3.63955,6.81267 -12.11262,9.38517 -18.92545,5.74596 -1.65027,-0.88088 -3.10705,-2.08387 -4.28414,-3.53776 z M 213.50702,774.09846 c -1.07227,-1.41607 -1.87186,-3.01919 -2.35812,-4.72756 -2.1667,-7.61133 2.2465,-15.53812 9.85758,-17.70572 7.61218,-2.16738 15.54002,2.24679 17.70694,9.8591 2.16669,7.61134 -2.24651,15.53811 -9.85758,17.70571 -5.68495,1.61871 -11.7805,-0.41919 -15.34882,-5.13153 z m 64.61074,65.20147 c -3.93971,-4.50583 -3.82535,-11.26356 0.26457,-15.63352 4.39865,-4.69931 11.77423,-4.94239 16.47274,-0.5429 4.69758,4.39828 4.94076,11.77174 0.54319,16.46999 -4.39809,4.69894 -11.77275,4.94269 -16.47152,0.54442 -0.28344,-0.26569 -0.55347,-0.54533 -0.80898,-0.83799 z m 69.83284,77.01637 c -2.26549,-2.79125 -3.3539,-6.35556 -3.03413,-9.93624 0.67978,-7.60057 7.39243,-13.21092 14.99298,-12.53096 7.60064,0.67902 13.21168,7.3911 12.53247,14.99174 -0.67977,7.60057 -7.3924,13.21092 -14.99296,12.53097 -3.71917,-0.33246 -7.14545,-2.1561 -9.49836,-5.05551 z M 250.512,788.78667 c -0.67676,-0.82462 -1.23918,-1.73678 -1.67097,-2.71227 -2.63734,-5.95578 0.0519,-12.92196 6.00705,-15.5607 5.9566,-2.63915 12.92481,0.0505 15.56345,6.00733 2.63797,5.95653 -0.0521,12.92375 -6.00856,15.56193 -4.84509,2.14613 -10.52669,0.7979 -13.89097,-3.29629 z m 71.94488,85.67888 c -2.77528,-3.16589 -3.60105,-7.59424 -2.15333,-11.54761 2.18621,-5.97027 8.79826,-9.03796 14.76861,-6.85194 5.97027,2.18621 9.03795,8.79826 6.85193,14.7686 -2.18622,5.97027 -8.79827,9.03795 -14.76861,6.85193 -1.8113,-0.66309 -3.42696,-1.77065 -4.6986,-3.22098 z m -12.33306,-40.45213 c -2.57194,-3.32724 -2.67668,-7.94179 -0.25842,-11.38235 3.04658,-4.33415 9.02988,-5.37787 13.36396,-2.3312 4.33416,3.04658 5.37788,9.02988 2.33119,13.36397 -3.04657,4.33415 -9.02987,5.37788 -13.36396,2.33119 -0.78631,-0.55295 -1.48504,-1.22094 -2.07277,-1.98161 z m -27.65294,-37.31354 c -0.36817,-0.41324 -0.70042,-0.85714 -0.99272,-1.32716 -2.83245,-4.55291 -1.43812,-10.53991 3.11446,-13.37291 4.55291,-2.8337 10.54097,-1.43984 13.37443,3.11324 2.83427,4.55357 1.4396,10.54266 -3.11476,13.37566 -4.01255,2.49607 -9.23942,1.74089 -12.38137,-1.78886 z m -65.97761,-92.83373 c -2.27367,-3.01164 -3.28423,-6.79076 -2.81723,-10.53529 0.99148,-7.94898 8.23869,-13.58948 16.1878,-12.59894 7.95016,0.99084 13.59159,8.23924 12.60017,16.18932 -0.99222,7.94892 -8.24,13.58875 -16.18902,12.59743 -3.89047,-0.48485 -7.41901,-2.52388 -9.78172,-5.65252 z m 28.3976,27.31775 c -1.70791,-2.0849 -2.66015,-4.68633 -2.70197,-7.38114 -0.10281,-6.59343 5.15873,-12.02187 11.75215,-12.12494 6.59449,-0.1035 12.02394,5.15915 12.12619,11.75367 0.10196,6.59331 -5.16008,12.02103 -11.75339,12.12343 -3.64341,0.0571 -7.1135,-1.55251 -9.42298,-4.37102 z m 105.4186,126.43488 c -1.71251,-2.20912 -2.36234,-5.06163 -1.77573,-7.79454 1.09763,-5.1172 6.13572,-8.37572 11.25294,-7.27815 5.1172,1.09764 8.37572,6.13573 7.27815,11.25294 -1.09764,5.1172 -6.13573,8.37573 -11.25294,7.27815 -2.18446,-0.46815 -4.13328,-1.69304 -5.50242,-3.4584 z m 26.08452,31.74822 c -1.69544,-1.92738 -2.68901,-4.37164 -2.81913,-6.93531 -0.3169,-6.27354 4.51213,-11.61605 10.78569,-11.93253 6.27354,-0.31692 11.61605,4.51213 11.93253,10.78568 0.31623,6.27251 -4.51172,11.61401 -10.78417,11.9313 -3.46648,0.17503 -6.82314,-1.24246 -9.11492,-3.84914 z m -67.24634,-90.15409 c -2.83099,-3.38669 -2.38052,-8.4271 1.00612,-11.25814 3.38727,-2.83145 8.42867,-2.38026 11.25936,1.00764 2.83098,3.38669 2.38052,8.4271 -1.00612,11.25814 -3.38727,2.83146 -8.42868,2.38026 -11.25936,-1.00764 z m -37.86533,-48.83185 c -1.25019,-1.40839 -2.06938,-3.14633 -2.36017,-5.00696 -0.83902,-5.3628 2.82813,-10.3904 8.1909,-11.22959 5.36375,-0.83972 10.3924,2.82847 11.23083,8.19242 0.83806,5.36268 -2.82955,10.38947 -8.19214,11.22808 -3.3057,0.5176 -6.64765,-0.6821 -8.86942,-3.18395 z m 65.1051,76.46878 c -2.03769,-2.43146 -2.42228,-5.84637 -0.97646,-8.67017 1.98735,-3.8811 6.74444,-5.41661 10.62583,-3.4298 3.88111,1.98735 5.41662,6.74444 3.4298,10.62584 -1.98734,3.8811 -6.74443,5.41661 -10.62583,3.4298 -0.94036,-0.48122 -1.77461,-1.14624 -2.45334,-1.95567 z m 78.75091,90.02543 c -1.06755,-1.31226 -1.88223,-2.81131 -2.40202,-4.42113 -2.31608,-7.17397 1.62206,-14.86716 8.79606,-17.18317 7.17396,-2.31608 14.86716,1.62206 17.18317,8.79606 2.31607,7.17397 -1.62206,14.86716 -8.79606,17.18317 -5.3578,1.72962 -11.22787,-0.008 -14.78115,-4.37493 z M 294.56263,762.5422 c -0.61891,-0.78907 -1.08572,-1.68633 -1.37664,-2.64605 -1.29818,-4.27511 1.11486,-8.7932 5.38985,-10.09177 4.27511,-1.29818 8.7932,1.11487 10.09177,5.38985 1.29886,4.27595 -1.11514,8.7951 -5.39137,10.093 -3.19269,0.96938 -6.65302,-0.12072 -8.71361,-2.74503 z m 36.69707,35.65901 c -1.85944,-2.51833 -1.68691,-5.9981 0.41254,-8.32013 2.43633,-2.69573 6.59668,-2.90596 9.29235,-0.46958 2.69572,2.43633 2.90596,6.59668 0.46958,9.29235 -2.43633,2.69572 -6.59668,2.90596 -9.29235,0.46958 -0.32571,-0.29387 -0.6212,-0.61957 -0.88214,-0.9722 z m 40.59425,43.29306 c -1.30606,-1.55331 -1.95539,-3.55445 -1.81008,-5.57867 0.30849,-4.29736 4.04251,-7.53082 8.33983,-7.22182 4.29735,0.30849 7.53081,4.04251 7.22181,8.33983 -0.30848,4.29735 -4.04251,7.53081 -8.33982,7.22181 -2.10294,-0.1512 -4.05512,-1.14722 -5.41174,-2.76115 z m -56.25794,-71.026 c -0.39029,-0.45835 -0.7166,-0.96752 -0.97002,-1.5136 -1.54849,-3.33611 -0.0993,-7.29587 3.23682,-8.84432 3.33612,-1.54849 7.29588,-0.0993 8.84433,3.23682 1.54849,3.33612 0.0993,7.29588 -3.23682,8.84433 -2.71385,1.25967 -5.93466,0.55483 -7.87431,-1.72323 z m 41.04395,47.15107 c -1.27668,-1.72409 -1.62029,-3.96715 -0.91833,-5.99438 1.17551,-3.39117 4.87729,-5.18757 8.26864,-4.01262 3.39112,1.1749 5.18814,4.876 4.01413,8.26743 -1.17437,3.3924 -4.8767,5.19024 -8.26894,4.01535 -1.23759,-0.42932 -2.31658,-1.22258 -3.0955,-2.27578 z m 39.35607,45.98568 c -0.90641,-1.16522 -1.52444,-2.52828 -1.80359,-3.9779 -0.97747,-5.07774 2.34693,-9.98631 7.42483,-10.96295 5.07774,-0.97747 9.98631,2.34694 10.96294,7.42483 0.97748,5.07774 -2.34692,9.98631 -7.42483,10.96296 -3.45843,0.66533 -6.99764,-0.66659 -9.15935,-3.44694 z m -46.30495,-68.19417 c -1.48557,-1.85277 -1.59011,-4.45748 -0.25846,-6.42379 1.67696,-2.47747 5.04511,-3.12583 7.52196,-1.44794 2.4761,1.67728 3.1238,5.04419 1.44672,7.52042 -1.67696,2.47748 -5.04511,3.12585 -7.52196,1.44796 -0.44873,-0.30402 -0.84928,-0.67369 -1.18826,-1.09665 z m -16.32816,-21.21208 c -0.0772,-0.10369 -0.15143,-0.20955 -0.22147,-0.3182 -1.64387,-2.54174 -0.91639,-5.93481 1.62498,-7.57923 2.54238,-1.64442 5.93649,-0.91617 7.58048,1.6265 1.64259,2.54176 0.91465,5.93376 -1.62622,7.57773 -2.41552,1.56258 -5.62804,0.992 -7.35773,-1.30683 z m -54.16526,-71.35903 c -2.17661,-2.45916 -2.99942,-5.83404 -2.19889,-9.01905 1.33996,-5.32809 6.7451,-8.56144 12.07339,-7.22229 5.3281,1.33929 8.56209,6.74381 7.22381,12.07217 -1.33871,5.32934 -6.74444,8.5642 -12.07368,7.22504 -1.94454,-0.48902 -3.69595,-1.55419 -5.02463,-3.05587 z m 16.35906,20.02783 c -1.31354,-1.67788 -1.92134,-3.8017 -1.69434,-5.92046 0.4817,-4.49635 4.51667,-7.75123 9.01313,-7.2706 4.49751,0.48105 7.75334,4.5172 7.27183,9.01466 -0.4817,4.49635 -4.51667,7.75123 -9.01314,7.2706 -2.20092,-0.23526 -4.21288,-1.35143 -5.57748,-3.0942 z m 16.29866,15.1406 c -0.98507,-1.16016 -1.54849,-2.61958 -1.59866,-4.1407 -0.12299,-3.72141 2.79448,-6.83774 6.5159,-6.96004 3.72141,-0.12299 6.83773,2.79448 6.96003,6.51591 0.1223,3.72035 -2.79405,6.83566 -6.51438,6.95879 -2.05624,0.0685 -4.0312,-0.80572 -5.36289,-2.37396 z M 262.4588,675.34176 c -2.79591,-3.42316 -3.50032,-8.09946 -1.83689,-12.19435 2.51228,-6.18373 9.5615,-9.16036 15.74552,-6.64877 6.18373,2.51229 9.16036,9.56151 6.64877,15.74552 -2.51229,6.18372 -9.5615,9.16035 -15.74551,6.64877 -1.87612,-0.76194 -3.53074,-1.98304 -4.81189,-3.55117 z m 168.77519,206.7959 c -0.67203,-0.76205 -1.23758,-1.61174 -1.68118,-2.52584 -2.70933,-5.58219 -0.38073,-12.3038 5.20122,-15.01358 5.58291,-2.70995 12.30556,-0.38049 15.01481,5.20275 2.70933,5.58219 0.38072,12.30379 -5.20123,15.01358 -4.54124,2.20425 -9.99505,1.10933 -13.33362,-2.67691 z m -58.62645,-73.8004 c -0.98818,-1.2298 -1.38346,-2.83291 -1.07986,-4.38103 0.56956,-2.89928 3.38158,-4.78789 6.28086,-4.21839 2.89931,0.56886 4.78858,3.38029 4.21989,6.27963 -0.56955,2.89928 -3.38157,4.78789 -6.28085,4.21838 -1.23776,-0.24291 -2.3499,-0.91534 -3.14004,-1.89859 z m 14.62863,17.17031 c -0.73333,-0.98761 -1.16752,-2.16508 -1.25094,-3.39235 -0.24001,-3.53734 2.43248,-6.59971 5.96976,-6.84067 3.53748,-0.24091 6.60062,2.43111 6.8422,5.96853 0.24161,3.5385 -2.43151,6.60266 -5.97006,6.84344 -2.18117,0.14822 -4.28788,-0.82354 -5.59096,-2.57895 z M 348.7977,775.77546 c -1.63192,-1.88368 -1.42771,-4.73367 0.45615,-6.36537 1.88436,-1.63106 4.7342,-1.42561 6.36509,0.4589 1.63059,1.88378 1.42585,4.73262 -0.45739,6.36385 -1.88379,1.63059 -4.73263,1.42585 -6.36385,-0.45738 z m -22.211,-27.61824 c -0.52473,-0.70018 -0.87636,-1.51457 -1.02629,-2.3766 -0.52593,-3.01878 1.49471,-5.89241 4.51344,-6.41872 3.01878,-0.52592 5.89241,1.49472 6.41871,4.51344 0.52593,3.01878 -1.49471,5.89241 -4.51344,6.41872 -2.05631,0.35868 -4.13995,-0.467 -5.39242,-2.13684 z m 37.85857,42.9503 c -1.174,-1.35217 -1.42497,-3.27559 -0.63716,-4.88369 1.08347,-2.21064 3.75382,-3.12444 5.96451,-2.04102 2.21051,1.0829 3.12491,3.7525 2.04254,5.96328 -1.08303,2.21198 -3.75464,3.12652 -5.96602,2.04225 -0.53557,-0.26271 -1.01295,-0.63025 -1.40387,-1.08082 z m -24.24273,-35.88883 c -0.35774,-0.43871 -0.63015,-0.94055 -0.80425,-1.47919 -0.77529,-2.40111 0.54324,-4.97601 2.94462,-5.75045 2.40031,-0.77462 4.97413,0.54296 5.74923,2.94311 0.77462,2.40031 -0.54296,4.97413 -2.94311,5.74923 -1.7927,0.57923 -3.75712,-0.002 -4.94649,-1.4627 z m 69.58314,85.93034 c -0.61562,-0.73021 -1.09017,-1.56845 -1.39942,-2.47208 -1.37896,-4.02677 0.76781,-8.40893 4.79474,-9.78739 4.02667,-1.37786 8.40791,0.76936 9.78587,4.79598 1.37896,4.02676 -0.76782,8.40892 -4.79475,9.78738 -3.00723,1.029 -6.33771,0.10612 -8.38644,-2.32389 z m -48.51672,-66.16408 c -1.07353,-1.40312 -1.01022,-3.36824 0.15147,-4.69929 1.34894,-1.54572 3.6956,-1.70505 5.2411,-0.35586 1.54572,1.34895 1.70505,3.6956 0.35585,5.2411 -1.34894,1.54572 -3.6956,1.70506 -5.2411,0.35586 -0.18678,-0.16321 -0.35671,-0.34474 -0.50733,-0.5418 z m -9.11547,-15.49974 c -0.22471,-0.25452 -0.41401,-0.53824 -0.56254,-0.84357 -0.90741,-1.86826 -0.12802,-4.11837 1.74058,-5.02509 1.86826,-0.90742 4.11837,-0.12803 5.0251,1.74057 0.9062,1.86821 0.12638,4.11732 -1.74181,5.02357 -1.51944,0.73746 -3.34416,0.3712 -4.46133,-0.89548 z m 32.45672,39.53878 c -0.75273,-0.86369 -1.13927,-1.98672 -1.07754,-3.13073 0.132,-2.42823 2.20721,-4.28984 4.63546,-4.15833 2.42934,0.13133 4.29192,2.2077 4.15956,4.63697 -0.132,2.42823 -2.20721,4.28984 -4.63546,4.15834 -1.18871,-0.0649 -2.3005,-0.60823 -3.08202,-1.50625 z m -8.82448,-13.32547 c -0.73722,-0.96073 -0.95288,-2.22334 -0.57645,-3.37434 0.62952,-1.92636 2.70152,-2.9776 4.62784,-2.34795 1.92637,0.62951 2.97762,2.70152 2.34797,4.62785 -0.63016,1.92639 -2.70283,2.97701 -4.62908,2.34643 -0.70274,-0.22947 -1.31978,-0.66586 -1.77028,-1.25199 z m 22.66784,25.56845 c -0.52265,-0.64873 -0.88455,-1.41182 -1.05618,-2.22702 -0.60115,-2.85657 1.22737,-5.65956 4.08398,-6.2605 2.8558,-0.60146 5.65859,1.2256 6.2608,4.08125 0.60215,2.8567 -1.22593,5.66054 -4.08277,6.26202 -1.94623,0.41023 -3.95797,-0.30691 -5.20583,-1.85575 z m -26.80881,-38.03713 c -0.85646,-1.03164 -0.94084,-2.50094 -0.20807,-3.62382 0.92246,-1.41373 2.81611,-1.81233 4.2302,-0.89044 1.4151,0.92212 1.81436,2.817 0.89167,4.23172 -0.92301,1.41395 -2.81749,1.81194 -4.23143,0.88891 -0.25651,-0.16684 -0.48654,-0.37124 -0.68237,-0.60637 z m -9.42535,-11.81191 c -0.0451,-0.0574 -0.0878,-0.11677 -0.12825,-0.17761 -0.95408,-1.41903 -0.57654,-3.34288 0.84308,-4.29609 1.41906,-0.95281 3.34184,-0.57479 4.29458,0.84431 0.95227,1.41842 0.57503,3.34018 -0.84279,4.29335 -1.3479,0.90644 -3.16721,0.61653 -4.16664,-0.66395 z m -31.63666,-40.18022 c -0.99168,-1.32651 -1.34738,-3.02306 -0.972,-4.63617 0.70353,-3.02165 3.72368,-4.90061 6.74519,-4.19647 3.02041,0.70412 4.8985,3.72305 4.19525,6.74367 -0.70344,3.02044 -3.72177,4.89916 -6.74245,4.19676 -1.29025,-0.30019 -2.43288,-1.04675 -3.22599,-2.10779 z m 9.78954,11.57585 c -0.75819,-0.93353 -1.12199,-2.12618 -1.01518,-3.32406 0.22713,-2.54418 2.47435,-4.42212 5.01843,-4.19375 2.54304,0.22779 4.42002,2.47384 4.19251,5.01691 -0.22778,2.54305 -2.47384,4.42003 -5.01691,4.19253 -1.24468,-0.11111 -2.39139,-0.72132 -3.17885,-1.69163 z m -19.15127,-26.50053 c -1.61213,-1.90485 -2.05586,-4.5378 -1.15705,-6.86579 1.35749,-3.51517 5.30737,-5.26454 8.82271,-3.90749 3.5151,1.35688 5.26507,5.30606 3.909,8.82147 -1.35639,3.51641 -5.3068,5.26717 -8.82299,3.91024 -1.06684,-0.41191 -2.01305,-1.08534 -2.75167,-1.95843 z m 28.50146,34.88755 c -0.56702,-0.64541 -0.89898,-1.46368 -0.94188,-2.32172 -0.1055,-2.09842 1.50951,-3.88534 3.60788,-3.9919 2.09855,-0.10637 3.8862,1.50814 3.99342,3.60665 0.10618,2.09946 -1.50992,3.88738 -3.6094,3.99313 -1.15965,0.059 -2.28279,-0.4146 -3.05002,-1.28616 z m 90.15982,110.24719 c -0.13405,-0.17254 -0.26196,-0.34974 -0.38341,-0.53136 -2.84888,-4.24 -1.72086,-9.98669 2.51939,-12.83517 4.24002,-2.84759 9.98563,-1.71913 12.83365,2.52062 2.84887,4.23999 1.72086,9.98668 -2.51939,12.83516 -4.02909,2.7067 -9.46514,1.83814 -12.45021,-1.98928 z m -55.17406,-71.14752 c -0.5698,-0.68471 -0.80831,-1.58601 -0.65175,-2.46292 0.29349,-1.64139 1.86156,-2.73444 3.50313,-2.44192 1.64144,0.29279 2.73515,1.86027 2.44344,3.5019 -0.29216,1.64265 -1.86085,2.73727 -3.50342,2.44467 -0.7013,-0.12512 -1.3358,-0.4941 -1.7914,-1.04173 z m -26.57025,-33.51696 c -0.30297,-0.38991 -0.50907,-0.84618 -0.60204,-1.33114 -0.32662,-1.69877 0.78554,-3.34073 2.48425,-3.66767 1.69877,-0.32662 3.34072,0.78553 3.66767,2.48424 0.32661,1.69876 -0.78553,3.34072 -2.48424,3.66767 -1.15743,0.223 -2.34208,-0.22258 -3.06564,-1.1531 z m 59.98659,74.10847 c -0.21571,-0.28923 -0.40637,-0.59631 -0.56986,-0.91797 -1.58513,-3.12445 -0.33704,-6.94231 2.78759,-8.5271 3.12445,-1.58513 6.94231,-0.33704 8.5271,2.78758 1.58514,3.12445 0.33705,6.94232 -2.78758,8.52711 -2.75392,1.39662 -6.11343,0.60728 -7.95725,-1.86962 z m -24.98904,-31.04345 c -0.42366,-0.55037 -0.68037,-1.21081 -0.73948,-1.90284 -0.17051,-1.99421 1.30747,-3.74923 3.30161,-3.92049 1.99521,-0.1712 3.75126,1.30786 3.92172,3.30313 0.17121,1.99522 -1.30785,3.75126 -3.30313,3.92173 -1.22969,0.10474 -2.42819,-0.42336 -3.18072,-1.40153 z m -22.18903,-27.6937 c -0.93832,-1.04725 -0.85062,-2.65674 0.19591,-3.59587 1.04714,-0.93964 2.65775,-0.85249 3.59739,0.19467 0.93964,1.04715 0.85249,2.65776 -0.19468,3.5974 -1.04771,0.94009 -2.65931,0.85223 -3.59862,-0.1962 z M 476.7524,891.79775 c -4.87546,-5.62979 -4.26387,-14.14601 1.36602,-19.02137 5.6298,-4.87546 14.14601,-4.26387 19.02138,1.36602 4.87545,5.62979 4.26386,14.14601 -1.36602,19.02137 -5.6298,4.87546 -14.14602,4.26387 -19.02138,-1.36602 z M 379.77203,770.46049 c -0.54453,-0.74273 -0.63989,-1.72358 -0.24859,-2.55728 0.59018,-1.2587 2.08913,-1.80047 3.34768,-1.20989 1.2587,0.59019 1.80048,2.08913 1.20989,3.34768 -0.59063,1.25737 -2.08837,1.79833 -3.34616,1.20866 -0.38197,-0.17827 -0.71304,-0.44963 -0.96282,-0.78917 z m -67.584,-84.13022 c -2.04919,-2.62521 -2.32846,-6.22184 -0.70899,-9.13185 2.227,-3.99977 7.27468,-5.43707 11.27461,-3.21036 3.99977,2.22699 5.43707,7.27467 3.21037,11.2746 -2.227,3.99977 -7.27467,5.43707 -11.27461,3.21037 -0.96872,-0.53975 -1.8193,-1.26839 -2.50138,-2.14276 z m 53.70475,64.30526 c -0.20525,-0.2449 -0.36399,-0.52529 -0.467,-0.82779 -0.46089,-1.34726 0.25745,-2.8131 1.60461,-3.27429 1.34726,-0.4609 2.8131,0.25745 3.27429,1.60461 0.4609,1.34726 -0.25745,2.81308 -1.60462,3.27428 -1.00641,0.34497 -2.12136,0.0365 -2.80728,-0.77681 z m 40.12516,47.81945 c -0.35474,-0.40568 -0.63105,-0.87372 -0.81483,-1.38032 -0.81805,-2.25993 0.3514,-4.75504 2.61165,-5.57218 2.25913,-0.81739 4.75318,0.35114 5.57095,2.61014 0.81806,2.25993 -0.3514,4.75504 -2.61165,5.57218 -1.68729,0.60999 -3.576,0.12162 -4.75612,-1.22982 z M 377.9785,761.58622 c -0.62002,-0.78135 -0.60322,-1.89151 0.0396,-2.65423 0.74601,-0.88606 2.06911,-0.99946 2.95501,-0.25325 0.88607,0.746 0.99947,2.06912 0.25326,2.95502 -0.74601,0.88607 -2.06913,0.99946 -2.95502,0.25324 -0.10744,-0.0902 -0.20555,-0.19095 -0.29285,-0.30076 z m -5.43112,-8.82324 c -0.072,-0.0972 -0.13603,-0.20001 -0.19068,-0.3079 -0.52958,-1.04482 -0.11264,-2.32113 0.93159,-2.85184 1.04557,-0.53138 2.32394,-0.11405 2.85459,0.93189 0.53016,1.04552 0.1124,2.32288 -0.93313,2.85306 -0.92136,0.46727 -2.04531,0.20333 -2.66238,-0.6252 z m 18.68605,21.96998 c -0.33232,-0.45211 -0.50194,-1.00335 -0.48127,-1.56407 0.0509,-1.3723 1.20467,-2.44348 2.57696,-2.39242 1.37131,0.0507 2.44221,1.20287 2.39271,2.57421 -0.05,1.37241 -1.20334,2.44429 -2.57573,2.39393 -0.75856,-0.0276 -1.46298,-0.40014 -1.91267,-1.01165 z m -4.95434,-7.24298 c -0.42543,-0.53534 -0.55939,-1.24607 -0.35788,-1.89949 0.33667,-1.09294 1.49529,-1.70631 2.58842,-1.37031 1.09421,0.33611 1.70843,1.49597 1.37154,2.58994 -0.33729,1.09295 -1.49658,1.7057 -2.58965,1.36878 -0.39919,-0.12236 -0.75209,-0.3625 -1.01243,-0.68892 z m 13.04816,14.20939 c -0.30164,-0.36119 -0.51416,-0.78821 -0.61938,-1.2469 -0.36736,-1.60649 0.63716,-3.2066 2.24365,-3.57396 1.60661,-0.36839 3.2076,0.63569 3.57549,2.24242 0.36736,1.60649 -0.63715,3.20662 -2.24365,3.57397 -1.09419,0.25062 -2.23644,-0.13407 -2.95611,-0.99553 z M 360.12788,731.5497 c -0.57264,-0.73934 -0.78971,-1.69375 -0.59318,-2.60804 0.36761,-1.71176 2.05296,-2.80167 3.76487,-2.43474 1.71176,0.36762 2.80169,2.05296 2.43475,3.76487 -0.36761,1.71177 -2.05297,2.80168 -3.76487,2.43475 -0.73103,-0.15648 -1.38328,-0.56619 -1.84157,-1.15684 z m 18.25452,22.36827 c -0.0263,-0.0323 -0.0516,-0.0655 -0.0754,-0.0998 -0.55084,-0.79164 -0.35605,-1.87989 0.43518,-2.43132 0.79099,-0.5516 1.8793,-0.35804 2.43161,0.43244 0.55211,0.79162 0.35782,1.88094 -0.43395,2.43284 -0.75184,0.52413 -1.78089,0.37824 -2.3574,-0.33422 z m 5.43694,6.57515 c -0.4941,-0.57398 -0.55635,-1.40299 -0.15347,-2.0443 0.50686,-0.80707 1.5719,-1.05061 2.37916,-0.54406 0.80707,0.50687 1.05061,1.57192 0.54404,2.37917 -0.50631,0.80684 -1.57053,1.05101 -2.37792,0.54557 -0.1467,-0.0919 -0.27878,-0.20528 -0.39184,-0.33636 z m -18.04952,-22.50604 c -0.43752,-0.51945 -0.65536,-1.18899 -0.60724,-1.86645 0.10312,-1.43806 1.35263,-2.52016 2.79067,-2.41677 1.43807,0.10313 2.52016,1.35264 2.41677,2.79068 -0.10313,1.43807 -1.35264,2.52016 -2.79068,2.41677 -0.70325,-0.051 -1.35594,-0.3844 -1.80952,-0.92423 z m -11.0714,-14.77011 c -0.92928,-1.05881 -1.2064,-2.54048 -0.72272,-3.86362 0.7313,-1.99854 2.9446,-3.02548 4.94286,-2.29341 1.99724,0.7318 3.02338,2.94388 2.29219,4.94134 -0.7318,1.99724 -2.94388,3.02337 -4.94134,2.29219 -0.60551,-0.2217 -1.14568,-0.59184 -1.57099,-1.0765 z m -49.30493,-61.4982 c -3.16954,-3.59187 -3.37021,-8.91931 -0.47989,-12.73944 3.35534,-4.4349 9.67034,-5.31057 14.1058,-1.95597 4.43626,3.35506 5.31254,9.67127 1.95718,14.10731 -3.3556,4.43654 -9.67267,5.31219 -14.10852,1.95567 -0.53593,-0.40552 -1.02991,-0.86366 -1.47457,-1.36757 z m 65.59918,80.74267 c -0.24475,-0.33016 -0.3897,-0.72358 -0.41761,-1.13362 -0.0813,-1.1839 0.81269,-2.20948 1.99659,-2.29063 1.18378,-0.0803 2.2086,0.81406 2.28911,1.99782 0.0813,1.1839 -0.81268,2.20948 -1.99659,2.29063 -0.73031,0.0495 -1.43561,-0.27614 -1.8715,-0.8642 z m 4.94147,3.23587 c -0.17441,-0.21704 -0.29508,-0.4722 -0.35228,-0.74468 -0.20161,-0.95591 0.41001,-1.89423 1.36597,-2.09559 0.95578,-0.20061 1.89326,0.41145 2.09408,1.36719 0.20062,0.95579 -0.41145,1.89327 -1.3672,2.09409 -0.65079,0.13669 -1.32327,-0.10324 -1.74057,-0.62101 z m 47.17343,58.27414 c -0.0772,-0.096 -0.15074,-0.19484 -0.2211,-0.29592 -1.64893,-2.3651 -1.06879,-5.61907 1.29589,-7.2686 2.36512,-1.64894 5.61909,-1.06879 7.26862,1.2959 1.65021,2.36507 1.07055,5.62013 -1.29467,7.27012 -2.24824,1.56808 -5.32626,1.13073 -7.04872,-1.00152 z m -31.84422,-39.6163 c -0.32889,-0.38065 -0.47295,-0.8871 -0.3936,-1.38385 0.14935,-0.92986 1.02424,-1.56257 1.95408,-1.41319 0.92986,0.14935 1.56257,1.02423 1.4132,1.95409 -0.14935,0.92986 -1.02425,1.56257 -1.9541,1.41319 -0.3964,-0.0641 -0.75746,-0.26604 -1.01958,-0.57024 z m -41.86349,-52.32929 c -1.18297,-1.46172 -1.37542,-3.48982 -0.48939,-5.14844 1.21802,-2.28006 4.05394,-3.14077 6.33377,-1.92233 2.2799,1.21746 3.14125,4.05257 1.92386,6.33254 -1.21802,2.28006 -4.05393,3.14077 -6.33377,1.92233 -0.55256,-0.29474 -1.04036,-0.69739 -1.43447,-1.1841 z m 46.71391,57.63606 c -0.24448,-0.30625 -0.3957,-0.67636 -0.43594,-1.06615 -0.11562,-1.12382 0.70129,-2.12876 1.82505,-2.24509 1.12396,-0.11654 2.12968,0.6999 2.24661,1.82382 0.11632,1.12482 -0.70167,2.13078 -1.82656,2.24632 -0.69291,0.0714 -1.37456,-0.21453 -1.80916,-0.7589 z m 14.41158,17.27764 c -0.12493,-0.16125 -0.23563,-0.33304 -0.33125,-0.51321 -0.9254,-1.74825 -0.25813,-3.91567 1.49028,-4.84075 1.74825,-0.9254 3.91568,-0.25814 4.84076,1.49028 0.92539,1.74825 0.25813,3.91567 -1.49029,4.84075 -1.54065,0.81516 -3.44444,0.40268 -4.50954,-0.97704 z m 33.31321,38.8554 c -2.30771,-3.15724 -1.84791,-7.54941 1.06365,-10.16026 3.13021,-2.80707 7.94332,-2.54511 10.75039,0.58511 2.80662,3.12963 2.54536,7.94176 -0.58359,10.74915 -3.12951,2.80797 -7.9428,2.54723 -10.75068,-0.58235 -0.16973,-0.18906 -0.32981,-0.38656 -0.4798,-0.59161 z M 403.31561,774.2036 c -0.13221,-0.17824 -0.23902,-0.37403 -0.31836,-0.58131 -0.48467,-1.26768 0.15064,-2.68816 1.41865,-3.17196 1.26758,-0.48354 2.68714,0.15221 3.17043,1.41989 0.48289,1.26679 -0.15194,2.68528 -1.41835,3.1692 -1.0306,0.39358 -2.19718,0.0518 -2.85237,-0.83582 z m -58.35346,-76.44214 c -1.48915,-1.99831 -1.50332,-4.73349 -0.035,-6.74712 1.8503,-2.53648 5.40633,-3.09302 7.94312,-1.24315 2.53648,1.85029 3.09302,5.40633 1.24315,7.94311 -1.85029,2.53649 -5.40633,3.09303 -7.94311,1.24316 -0.4604,-0.33586 -0.86768,-0.73904 -1.20819,-1.196 z m 31.9458,39.31604 c -0.33046,-0.41125 -0.46263,-0.94737 -0.3613,-1.46512 0.19069,-0.9698 1.13123,-1.60156 2.10112,-1.41135 0.9698,0.1907 1.60158,1.13124 1.41135,2.10113 -0.1907,0.96979 -1.13123,1.60156 -2.10112,1.41134 -0.41404,-0.0816 -0.78593,-0.30687 -1.05005,-0.636 z m 22.62003,27.92317 c -0.17354,-0.20079 -0.29761,-0.43949 -0.36155,-0.69706 -0.22372,-0.90382 0.32822,-1.81773 1.23229,-2.04045 0.90295,-0.22304 1.8158,0.32791 2.03923,1.23076 0.22304,0.90295 -0.3279,1.81581 -1.23076,2.03924 -0.61534,0.15263 -1.26427,-0.0531 -1.67921,-0.53249 z m -25.90612,-32.74029 c -0.42708,-0.57674 -0.54223,-1.32701 -0.30767,-2.00524 0.39273,-1.13572 1.63212,-1.73768 2.76758,-1.34419 1.13572,0.39273 1.73769,1.63212 1.3442,2.76758 -0.39335,1.13577 -1.63342,1.73711 -2.76881,1.34267 -0.41384,-0.14356 -0.77469,-0.40874 -1.0353,-0.76082 z m -2.96305,-6.09651 c -0.68165,-0.81397 -0.80994,-1.95686 -0.32564,-2.90165 0.66516,-1.29892 2.25772,-1.81223 3.55627,-1.14729 1.29892,0.66516 1.81223,2.25772 1.14729,3.55626 -0.66516,1.29893 -2.25772,1.81223 -3.55626,1.14729 -0.31494,-0.161 -0.59435,-0.38361 -0.82166,-0.65461 z m 42.51341,51.17516 c -0.0445,-0.0536 -0.0874,-0.10857 -0.1281,-0.16517 -0.95409,-1.31878 -0.65865,-3.16127 0.65988,-4.11569 1.31877,-0.95409 3.16127,-0.65865 4.11569,0.65988 0.95409,1.31877 0.65865,3.16127 -0.65988,4.11569 -1.25313,0.90679 -2.99402,0.69079 -3.98751,-0.49477 z m -7.27101,-9.48958 c -0.0719,-0.0901 -0.13594,-0.1862 -0.19154,-0.28714 -0.5398,-0.97751 -0.18492,-2.20753 0.79262,-2.74726 0.97751,-0.5398 2.20752,-0.18493 2.74726,0.79262 0.53979,0.9775 0.18491,2.20752 -0.79262,2.74725 -0.86139,0.47603 -1.94041,0.26263 -2.55576,-0.50544 z m 19.18786,21.60281 c -1.33378,-1.7592 -1.11783,-4.24279 0.49954,-5.74541 1.73934,-1.61478 4.4583,-1.51409 6.07344,0.2249 1.61569,1.73863 1.51623,4.45778 -0.22216,6.07373 -1.7392,1.61612 -4.45932,1.51596 -6.07496,-0.22368 -0.0976,-0.10503 -0.18948,-0.21514 -0.27601,-0.32942 z m -57.0762,-71.29689 c -0.85997,-1.11338 -0.89464,-2.65703 -0.0856,-3.80795 1.01958,-1.45063 3.02221,-1.79978 4.47253,-0.77978 1.44926,1.01988 1.79777,3.02129 0.77856,4.47101 -1.01903,1.45037 -3.02082,1.80016 -4.47131,0.7813 -0.26343,-0.18544 -0.49746,-0.40947 -0.69419,-0.66458 z M 477.8531,853.82631 c -3.20931,-4.1926 -3.02111,-10.06563 0.45005,-14.04416 4.02996,-4.61915 11.04137,-5.09699 15.66076,-1.0673 4.6195,4.0305 5.09669,11.04283 1.06579,15.66199 -4.0305,4.6195 -11.04284,5.09668 -15.66199,1.06579 -0.5575,-0.48692 -1.06489,-1.02839 -1.51461,-1.61632 z m -70.55374,-91.42334 c -0.0253,-0.0297 -0.0498,-0.0602 -0.0736,-0.0912 -0.55233,-0.7355 -0.4033,-1.77959 0.33279,-2.33116 0.73551,-0.55233 1.7796,-0.40328 2.33116,0.3328 0.55107,0.73554 0.40149,1.77854 -0.33402,2.32964 -0.69856,0.52458 -1.68382,0.41977 -2.25636,-0.24006 z M 300.93421,630.31515 c -3.96934,-4.8721 -3.60181,-11.9591 0.85019,-16.39451 4.78676,-4.76962 12.53388,-4.75525 17.30291,0.0321 4.76963,4.78676 4.75528,12.53389 -0.0321,17.30293 -4.78675,4.76963 -12.53388,4.75527 -17.30292,-0.0321 -0.2877,-0.28897 -0.5607,-0.59219 -0.81811,-0.90843 z m 80.2925,99.12553 c -0.49657,-0.62036 -0.53121,-1.4918 -0.0853,-2.1495 0.56138,-0.82792 1.68744,-1.04438 2.51576,-0.4836 0.82793,0.56137 1.04438,1.68742 0.4836,2.51575 -0.56137,0.82792 -1.68743,1.04438 -2.51575,0.4836 -0.15034,-0.10148 -0.28461,-0.22493 -0.39834,-0.36623 z m -38.73046,-48.92444 c -2.28735,-2.71084 -2.14955,-6.71358 0.31875,-9.26076 2.65501,-2.73898 7.0277,-2.80709 9.76673,-0.15212 2.73899,2.655 2.8071,7.0277 0.15213,9.76673 -2.655,2.73899 -7.0277,2.8071 -9.76673,0.15213 -0.16533,-0.16067 -0.32249,-0.32954 -0.47086,-0.50599 z m 71.64957,88.60715 c -0.76906,-0.97998 -0.67114,-2.38311 0.22661,-3.24674 0.96553,-0.92908 2.50138,-0.89966 3.43062,0.0657 0.92908,0.96553 0.89966,2.50139 -0.0657,3.43062 -0.96553,0.92909 -2.50138,0.89966 -3.43062,-0.0657 -0.0564,-0.0588 -0.11037,-0.11994 -0.16107,-0.18375 z M 366.45173,708.4462 c -1.31804,-1.50779 -1.27959,-3.76888 0.0889,-5.23101 1.47159,-1.57226 3.93909,-1.65396 5.51145,-0.18247 1.57227,1.47159 1.65396,3.9391 0.18247,5.51145 -1.47158,1.57226 -3.93909,1.65396 -5.51144,0.18247 -0.0951,-0.0889 -0.18564,-0.18251 -0.27143,-0.28041 z m 78.11278,96.49494 c -1.85316,-2.33505 -1.80488,-5.65236 0.11549,-7.93245 2.22939,-2.6473 6.18274,-2.98602 8.82998,-0.75657 2.64729,2.2294 2.98601,6.18274 0.75656,8.82998 -2.22939,2.64728 -6.18273,2.98601 -8.82997,0.75656 -0.31991,-0.26932 -0.61204,-0.56999 -0.87206,-0.89752 z M 380.11034,723.8043 c -0.62209,-0.8427 -0.5643,-2.00701 0.13819,-2.78396 0.81541,-0.90121 2.20685,-0.97115 3.10853,-0.15626 0.90257,0.8152 0.97309,2.20784 0.15749,3.11005 -0.81541,0.90121 -2.20686,0.97116 -3.10853,0.15627 -0.10919,-0.0986 -0.20824,-0.20782 -0.29568,-0.32609 z m 45.18357,53.86934 c -1.06892,-1.29947 -1.07474,-3.17202 -0.0139,-4.47808 1.23224,-1.51689 3.461,-1.74733 4.97752,-0.51462 1.51721,1.23278 1.747,3.46245 0.5131,4.97875 -1.23303,1.51585 -3.46148,1.74502 -4.97723,0.51187 -0.18269,-0.14891 -0.35001,-0.31572 -0.49954,-0.4979 z m -11.14758,-15.2005 c -0.61629,-0.72306 -0.63789,-1.78019 -0.0517,-2.52788 0.68042,-0.86858 1.93623,-1.0209 2.80458,-0.34018 0.86889,0.68097 1.02056,1.93766 0.33867,2.80581 -0.68123,0.86752 -1.93672,1.0186 -2.8043,0.33744 -0.10465,-0.082 -0.20087,-0.17415 -0.28725,-0.27518 z M 379.89922,717.0939 c -0.94721,-1.13314 -0.79657,-2.81959 0.33643,-3.76696 1.13314,-0.94721 2.81958,-0.79657 3.76696,0.33644 0.94722,1.13314 0.79656,2.81958 -0.33644,3.76695 -1.13313,0.94721 -2.81958,0.79657 -3.76695,-0.33643 z m 33.39873,39.86043 c -0.39659,-0.52733 -0.43945,-1.24069 -0.10891,-1.81175 0.4552,-0.7861 1.46166,-1.05406 2.24748,-0.59842 0.78628,0.45576 1.05361,1.46302 0.5969,2.2487 -0.45614,0.78493 -1.46213,1.05161 -2.24719,0.59568 -0.19019,-0.11059 -0.35621,-0.25826 -0.48828,-0.43421 z m -25.05657,-32.95634 c -0.0255,-0.0348 -0.0502,-0.0702 -0.0731,-0.10661 -0.55023,-0.85053 -0.30684,-1.98609 0.54365,-2.53638 0.85054,-0.55025 1.98609,-0.30685 2.53639,0.54364 0.55024,0.85055 0.30684,1.98609 -0.54366,2.53639 -0.80846,0.52353 -1.88414,0.3326 -2.46305,-0.43718 z m -22.1984,-27.74887 c -1.64314,-2.03603 -1.32459,-5.01859 0.71149,-6.66167 2.03662,-1.64362 5.02018,-1.32435 6.6629,0.713 1.6423,2.03671 1.32253,5.01914 -0.71423,6.66138 -2.03612,1.64183 -5.01755,1.32278 -6.66016,-0.71271 z m 58.10124,71.85522 c -0.8503,-0.95311 -0.98023,-2.34908 -0.3205,-3.44279 0.83145,-1.37712 2.62201,-1.81926 3.9989,-0.98741 1.37693,0.83091 1.81967,2.62065 0.98893,3.99768 -0.83145,1.37712 -2.62201,1.81926 -3.9989,0.98741 -0.24926,-0.15053 -0.47461,-0.33754 -0.66843,-0.55489 z m 18.68083,19.85127 c -1.47537,-1.71461 -1.6615,-4.1904 -0.45911,-6.10635 1.51457,-2.41327 4.69887,-3.14155 7.11188,-1.62656 2.41305,1.51402 3.14195,4.6975 1.62808,7.11065 -1.51457,2.41327 -4.69887,3.14155 -7.11188,1.62656 -0.43775,-0.27434 -0.83181,-0.61289 -1.16897,-1.0043 z m -20.84278,-27.65797 c -0.54286,-0.68904 -0.66594,-1.6196 -0.32097,-2.42612 0.52031,-1.21659 1.92794,-1.78151 3.14493,-1.26214 1.21649,0.51972 1.78202,1.92663 1.26366,3.14369 -0.51925,1.21781 -1.9274,1.78412 -3.14521,1.26489 -0.36953,-0.15736 -0.69358,-0.40505 -0.94241,-0.72032 z M 380.80983,708.9868 c -0.12282,-0.13793 -0.23425,-0.28562 -0.33186,-0.44246 -0.94887,-1.52364 -0.48249,-3.52801 1.04153,-4.47626 1.52363,-0.94886 3.52802,-0.48248 4.47626,1.04154 0.9476,1.52363 0.48076,3.52695 -1.04276,4.47473 -1.34246,0.83556 -3.09153,0.58331 -4.14319,-0.59753 z m 8.79126,9.63838 c -0.13029,-0.15354 -0.23909,-0.32409 -0.32357,-0.50686 -0.51793,-1.11633 -0.0329,-2.44116 1.08338,-2.95921 1.11633,-0.51793 2.44116,-0.0329 2.95921,1.08337 0.51793,1.11633 0.0329,2.44117 -1.08337,2.95921 -0.90829,0.42193 -1.98648,0.1861 -2.63565,-0.57651 z m -47.45322,-59.7222 c -2.8457,-3.65754 -2.18767,-8.92944 1.46981,-11.77521 3.65694,-2.84522 8.92784,-2.18792 11.77399,1.46829 2.84655,3.65684 2.18972,8.92887 -1.46706,11.7755 -3.65745,2.84704 -8.93049,2.18949 -11.77674,-1.46858 z m 133.14929,164.78733 c -2.55872,-3.08213 -2.81151,-7.47151 -0.62343,-10.82693 2.75624,-4.22582 8.41595,-5.4178 12.64244,-2.66259 4.22719,2.7559 5.41983,8.41685 2.66381,12.64397 -2.75591,4.22718 -8.41685,5.41982 -12.64396,2.6638 -0.7669,-0.50048 -1.45421,-1.11341 -2.03886,-1.81825 z m -55.77361,-69.30882 c -0.42321,-0.49518 -0.57479,-1.16731 -0.40504,-1.7962 0.28445,-1.05191 1.36772,-1.6741 2.41966,-1.38976 1.05191,0.28379 1.67474,1.36643 1.39127,2.41843 -0.28321,1.05317 -1.36708,1.67686 -2.41994,1.39251 -0.38416,-0.10412 -0.72786,-0.32197 -0.98595,-0.62498 z m -2.76678,-4.63377 c -0.25487,-0.33761 -0.36801,-0.76131 -0.31531,-1.18102 0.11191,-0.88908 0.92272,-1.51954 1.81195,-1.40896 0.89031,0.11053 1.52239,0.92196 1.41166,1.81227 -0.11127,0.89025 -0.92326,1.52164 -1.81347,1.41019 -0.4354,-0.0543 -0.83032,-0.28241 -1.09487,-0.63247 z m -19.80915,-27.98488 c -0.17592,-0.23465 -0.29383,-0.5076 -0.34394,-0.79656 -0.17536,-1.00982 0.50066,-1.97073 1.51034,-2.14682 1.00994,-0.17634 1.97167,0.49924 2.14834,1.50912 0.17633,1.00994 -0.49924,1.97167 -1.50912,2.14834 -0.68829,0.12071 -1.38607,-0.15525 -1.80562,-0.71408 z m 42.29165,52.30008 c -0.93926,-1.23604 -1.12914,-2.88613 -0.49511,-4.30318 0.95779,-2.1405 3.46947,-3.09926 5.60996,-2.14145 2.14051,0.95778 3.09927,3.46946 2.14146,5.60995 -0.95837,2.14062 -3.47077,3.09878 -5.61118,2.13995 -0.64902,-0.29047 -1.21469,-0.73929 -1.64513,-1.30527 z m -47.19022,-61.81638 c -0.20751,-0.26361 -0.36439,-0.56337 -0.46235,-0.88424 -0.43494,-1.43115 0.37318,-2.94381 1.80459,-3.37788 1.43115,-0.43494 2.94382,0.37317 3.37789,1.80459 0.43494,1.43115 -0.37317,2.94381 -1.80459,3.37788 -1.06866,0.32387 -2.22651,-0.0416 -2.91554,-0.92035 z m -24.14211,-30.32642 c -0.21359,-0.24884 -0.40475,-0.51608 -0.57302,-0.79747 -1.6321,-2.72753 -0.74398,-6.26171 1.98365,-7.89366 2.72752,-1.63084 6.26065,-0.74226 7.89213,1.98488 1.6321,2.72753 0.74397,6.26171 -1.98365,7.89366 -2.40359,1.43799 -5.4934,0.93671 -7.31911,-1.18741 z m 49.2184,59.94443 c -0.12021,-0.15858 -0.20975,-0.33823 -0.26416,-0.52967 -0.24225,-0.85209 0.25184,-1.73928 1.10379,-1.98198 0.85221,-0.24331 1.74029,0.25034 1.9835,1.10257 0.24293,0.85293 -0.25212,1.74119 -1.10532,1.9832 -0.6362,0.18099 -1.31827,-0.047 -1.71781,-0.57412 z m -33.94548,-42.60378 c -0.22628,-0.27573 -0.41419,-0.58083 -0.55852,-0.90703 -0.8828,-1.99305 0.0171,-4.32439 2.01009,-5.20737 1.99304,-0.8828 4.32439,0.0171 5.20737,2.01009 0.8828,1.99304 -0.0171,4.3244 -2.01009,5.20738 -1.62145,0.71845 -3.52301,0.26726 -4.64885,-1.10307 z m 51.88685,64.25102 c -0.73379,-0.89006 -0.9812,-2.08485 -0.66112,-3.19311 0.53485,-1.85543 2.47298,-2.92556 4.32814,-2.38975 1.85417,0.53605 2.92282,2.4736 2.387,4.32785 -0.53541,1.85416 -2.47232,2.92345 -4.32662,2.38852 -0.67688,-0.19512 -1.27899,-0.59022 -1.7274,-1.13351 z M 421.29754,744.9556 c -0.24326,-0.28355 -0.39986,-0.63106 -0.45124,-1.0011 -0.14769,-1.06677 0.59765,-2.05119 1.66449,-2.19838 1.06581,-0.147 2.04919,0.59728 2.19715,1.66296 0.14796,1.06594 -0.59588,2.05012 -1.66173,2.19867 -0.65763,0.0915 -1.31658,-0.15803 -1.74867,-0.66215 z m 9.19367,10.48566 c -0.56494,-0.63232 -0.82221,-1.48164 -0.70304,-2.32117 0.2235,-1.57322 1.6801,-2.66732 3.25329,-2.44366 1.57316,0.22424 2.6666,1.68141 2.44215,3.25453 -0.22424,1.57316 -1.68141,2.66659 -3.25454,2.44214 -0.67097,-0.0962 -1.28644,-0.4262 -1.73786,-0.93184 z m -4.7811,-6.18827 c -0.33165,-0.41911 -0.51138,-0.9383 -0.51048,-1.47276 0.003,-1.30751 1.06489,-2.36527 2.3724,-2.36292 1.30751,0.003 2.36527,1.06489 2.36292,2.37241 -0.003,1.3075 -1.06489,2.36527 -2.3724,2.36291 -0.72238,-0.002 -1.40449,-0.33292 -1.85244,-0.89964 z m -25.25368,-31.84128 c -0.3296,-0.38806 -0.51818,-0.87624 -0.53513,-1.38511 -0.0406,-1.24464 0.93513,-2.28672 2.17976,-2.32797 1.24477,-0.0414 2.28759,0.93379 2.32949,2.17855 0.0421,1.24581 -0.9342,2.28963 -2.18005,2.33071 -0.6882,0.0223 -1.34891,-0.27087 -1.79407,-0.79618 z m 13.99392,17.18295 c -0.55036,-0.6816 -0.44348,-1.6804 0.23864,-2.23012 0.6816,-0.55036 1.68041,-0.44348 2.23013,0.23865 0.54904,0.68169 0.44166,1.67937 -0.23988,2.22861 -0.68101,0.54988 -1.67882,0.44372 -2.22889,-0.23714 z m -8.50278,-11.46455 c -0.33208,-0.44384 -0.45123,-1.01167 -0.32566,-1.55158 0.23536,-1.01127 1.24614,-1.64012 2.25732,-1.40435 1.01127,0.23536 1.64012,1.24614 1.40435,2.25732 -0.23536,1.01127 -1.24613,1.64012 -2.25732,1.40435 -0.43152,-0.10073 -0.81356,-0.35069 -1.07869,-0.70574 z m 63.42857,75.84631 c -1.62605,-2.21852 -1.9113,-5.14775 -0.7438,-7.63828 1.76196,-3.76106 6.23909,-5.38188 10.00036,-3.62035 3.76251,1.76211 5.38348,6.24122 3.62005,10.00311 -1.76255,3.76118 -6.24042,5.38138 -10.00159,3.61882 -1.1412,-0.53447 -2.1298,-1.34712 -2.87502,-2.3633 z m -50.09725,-63.27057 c -0.0712,-0.0835 -0.13623,-0.17206 -0.19232,-0.26645 -0.54732,-0.91294 -0.25018,-2.09676 0.6634,-2.64302 0.91294,-0.54607 2.09572,-0.24848 2.64152,0.66463 0.54549,0.91227 0.24869,2.094 -0.66312,2.64028 -0.80393,0.48182 -1.838,0.31487 -2.44946,-0.39546 z m -5.48403,-7.73163 c -0.49889,-0.66863 -0.50394,-1.58428 -0.0125,-2.2584 0.61932,-0.84895 1.80964,-1.035 2.65848,-0.41553 0.84868,0.61877 1.03537,1.80822 0.41706,2.65724 -0.61931,0.84896 -1.80963,1.03502 -2.65848,0.41555 -0.15404,-0.11196 -0.29039,-0.24643 -0.40459,-0.39883 z m -17.49533,-22.67455 c -0.41861,-0.47147 -0.69286,-1.05334 -0.79011,-1.67629 -0.28026,-1.79428 0.94682,-3.47613 2.74103,-3.75686 1.79428,-0.28027 3.47613,0.94681 3.75686,2.74102 0.28123,1.79441 -0.9454,3.47706 -2.73979,3.75838 -1.10634,0.17303 -2.2247,-0.22874 -2.96799,-1.06625 z m 28.54358,32.48223 c -0.13125,-0.1659 -0.23905,-0.34906 -0.32096,-0.5441 -0.50308,-1.18991 0.0536,-2.56238 1.24338,-3.0657 1.19067,-0.50371 2.5642,0.0538 3.06693,1.24491 0.50256,1.1906 -0.0554,2.56316 -1.24613,3.06541 -0.96796,0.40909 -2.08992,0.12257 -2.74322,-0.70052 z m -13.78964,-17.19717 c -0.53949,-0.63725 -0.68808,-1.51816 -0.38754,-2.29713 0.45417,-1.1765 1.77612,-1.76201 2.95257,-1.30773 1.17649,0.45417 1.76201,1.77612 1.30773,2.95257 -0.45417,1.1765 -1.77612,1.76201 -2.95258,1.30773 -0.35678,-0.13795 -0.6732,-0.36333 -0.92018,-0.65544 z m -5.74026,-7.95906 c -0.43893,-0.56132 -0.6419,-1.27158 -0.56593,-1.98008 0.16118,-1.50461 1.51139,-2.59379 3.01604,-2.43294 1.5046,0.16117 2.59378,1.51139 2.43293,3.01604 -0.16117,1.5046 -1.51139,2.59378 -3.01603,2.43293 -0.7368,-0.0787 -1.41034,-0.45241 -1.86701,-1.03595 z m 14.36499,15.11701 c -0.76594,-0.90731 -0.71984,-2.24737 0.10671,-3.09983 0.88839,-0.91541 2.35042,-0.93798 3.26666,-0.0505 0.91676,0.88821 0.9399,2.35144 0.0517,3.26819 -0.88821,0.91675 -2.35144,0.93989 -3.26818,0.0517 -0.055,-0.0539 -0.10746,-0.11044 -0.15685,-0.16959 z M 387.711,688.04241 c -0.35937,-0.47417 -0.6274,-1.01105 -0.79034,-1.58327 -0.72495,-2.54762 0.753,-5.20051 3.30081,-5.92484 2.54679,-0.72427 5.1986,0.75273 5.92361,3.2993 0.72533,2.54691 -0.75122,5.1996 -3.29807,5.92513 -1.90213,0.54182 -3.94178,-0.13978 -5.13601,-1.71632 z m 74.60185,92.11765 c -1.27272,-1.59893 -1.6743,-3.72297 -1.07323,-5.67621 1.00573,-3.26747 4.46965,-5.10116 7.73725,-4.09587 3.26874,1.00519 5.10328,4.47034 4.0971,7.73877 -1.00637,3.26749 -4.47094,5.10056 -7.73848,4.09435 -1.19218,-0.36682 -2.24573,-1.08521 -3.02264,-2.06104 z M 431.3857,741.48777 c -0.29944,-0.33393 -0.51554,-0.73402 -0.63065,-1.16754 -0.4027,-1.51667 0.49998,-3.07272 2.01649,-3.47604 1.51668,-0.4027 3.07273,0.49997 3.47605,2.01649 0.40375,1.5168 -0.49849,3.07373 -2.01527,3.47757 -1.03331,0.27449 -2.13324,-0.0541 -2.84662,-0.85048 z M 345.89347,633.58322 c -0.37077,-0.4469 -0.70239,-0.92489 -0.99164,-1.42841 -2.80484,-4.88062 -1.12271,-11.1109 3.7574,-13.91663 4.88064,-2.80609 11.11195,-1.12441 13.91815,3.75617 2.80667,4.88131 1.12418,11.11368 -3.75768,13.91938 -4.30173,2.47248 -9.75883,1.48859 -12.92623,-2.33051 z m 92.60689,113.28694 c -0.4212,-0.5094 -0.68771,-1.12879 -0.76738,-1.78497 -0.22843,-1.89307 1.12094,-3.61294 3.014,-3.84155 1.89307,-0.22843 3.61293,1.12093 3.84154,3.01399 0.22843,1.89307 -1.12093,3.61293 -3.01398,3.84155 -1.16713,0.14035 -2.32548,-0.32274 -3.07418,-1.22902 z m -66.09548,-82.1014 c -0.39201,-0.49552 -0.71555,-1.04154 -0.96101,-1.62375 -1.50188,-3.55741 0.16457,-7.65877 3.72205,-9.16047 3.55666,-1.50124 7.65696,0.16433 9.15925,3.72054 1.50304,3.55749 -0.16298,7.65981 -3.72083,9.162 -2.89417,1.22222 -6.24818,0.3639 -8.19946,-2.09832 z m 82.05211,100.95826 c -0.98165,-1.13808 -1.41084,-2.65144 -1.17282,-4.13542 0.44529,-2.77917 3.0594,-4.67105 5.83853,-4.22542 2.77912,0.446 4.67033,3.06069 4.22392,5.83974 -0.44591,2.778 -3.05883,4.66896 -5.83701,4.22422 -1.18652,-0.19004 -2.26772,-0.79326 -3.05262,-1.70312 z m -8.27714,-11.10705 c -0.57341,-0.75289 -0.87535,-1.67755 -0.85679,-2.62375 0.0444,-2.31657 1.95855,-4.15841 4.27511,-4.11356 2.31645,0.0452 4.15757,1.95987 4.11203,4.27632 -0.0459,2.31537 -1.95941,4.15551 -4.2748,4.11082 -1.2801,-0.0243 -2.47903,-0.63187 -3.25555,-1.64983 z m -28.6512,-36.38281 c -0.68573,-0.8786 -0.77904,-2.08229 -0.23688,-3.05605 0.74529,-1.33875 2.43487,-1.81967 3.77344,-1.07405 1.33741,0.74568 1.81761,2.43403 1.07282,3.77193 -0.74474,1.33857 -2.43352,1.8201 -3.77221,1.07556 -0.32425,-0.1807 -0.60893,-0.42465 -0.83717,-0.71739 z m 9.16577,10.07153 c -0.95178,-1.22353 -0.73201,-2.98687 0.491,-3.93931 1.22413,-0.95226 2.98846,-0.73177 3.94053,0.49252 0.95178,1.22353 0.73201,2.98687 -0.491,3.93931 -1.22413,0.95226 -2.98847,0.73177 -3.94053,-0.49252 z m -24.25439,-30.86068 c -0.57175,-0.69763 -0.88999,-1.56855 -0.90375,-2.47043 -0.0336,-2.20581 1.72698,-4.0214 3.93278,-4.05575 2.20593,-0.0344 4.02225,1.72564 4.05727,3.93156 0.0351,2.20699 -1.72607,4.02431 -3.93308,4.0585 -1.2194,0.0188 -2.38064,-0.52026 -3.15322,-1.46388 z m 9.75703,10.55566 c -0.72816,-0.82288 -1.00333,-1.95208 -0.73544,-3.01772 0.44787,-1.78308 2.25634,-2.86556 4.03946,-2.41787 1.78433,0.4473 2.86769,2.25699 2.41909,4.041 -0.44797,1.78431 -2.25828,2.86702 -4.04221,2.41756 -0.65058,-0.16383 -1.23647,-0.5204 -1.6809,-1.02297 z m 110.60266,137.07346 c -3.51049,-4.04159 -4.26068,-9.79197 -1.90458,-14.59891 3.23773,-6.6064 11.21786,-9.33738 17.82439,-6.09992 6.60772,3.23731 9.33945,11.21868 6.10113,17.82591 -3.23788,6.60786 -11.22,9.33897 -17.82713,6.09961 -1.59964,-0.78431 -3.0257,-1.88152 -4.19381,-3.22669 z M 435.20993,730.42558 c -0.12351,-0.14992 -0.23429,-0.30988 -0.33073,-0.47848 -0.93782,-1.63313 -0.3747,-3.71728 1.25798,-4.65588 1.63315,-0.93906 3.71834,-0.37639 4.6574,1.25675 0.9384,1.63381 0.37447,3.71901 -1.25951,4.65712 -1.43931,0.82726 -3.26518,0.49818 -4.32512,-0.77953 z m -9.26333,-13.5988 c -1.06008,-1.20169 -1.12721,-2.98372 -0.16064,-4.26183 1.12233,-1.48471 3.23578,-1.77843 4.72043,-0.65602 1.48499,1.12286 1.77808,3.23718 0.6545,4.72164 -1.12314,1.48363 -3.23624,1.77608 -4.72012,0.65328 -0.17956,-0.13548 -0.3451,-0.28861 -0.4942,-0.45704 z m -30.49351,-40.95932 c -0.72621,-0.84754 -1.19359,-1.8859 -1.34663,-2.99146 -0.44146,-3.18698 1.78429,-6.12839 4.97129,-6.56973 3.18698,-0.44147 6.1284,1.78428 6.56974,4.97128 0.44077,3.18603 -1.78394,6.12639 -4.96977,6.56851 -1.96483,0.27304 -3.93356,-0.47254 -5.22463,-1.9786 z m 49.54954,58.40757 c -0.22761,-0.29809 -0.41439,-0.62521 -0.55421,-0.97323 -0.85237,-2.1233 0.17739,-4.53561 2.30035,-5.38882 2.1233,-0.85236 4.5356,0.1774 5.38882,2.30035 0.85351,2.12338 -0.17581,4.53665 -2.29913,5.39034 -1.7274,0.69348 -3.70524,0.15007 -4.83583,-1.32864 z m -23.89118,-30.88014 c -0.93577,-1.14571 -1.17161,-2.71079 -0.6147,-4.08125 0.84053,-2.06942 3.19948,-3.06566 5.26891,-2.22519 2.06942,0.84052 3.06566,3.19948 2.22518,5.26892 -0.84052,2.0694 -3.19947,3.06565 -5.2689,2.22518 -0.62784,-0.25474 -1.18162,-0.66312 -1.61049,-1.18766 z m -9.92035,-14.27331 c -0.76081,-1.00799 -1.09878,-2.27285 -0.94218,-3.52599 0.3315,-2.66008 2.75661,-4.5478 5.41671,-4.21641 2.66008,0.33151 4.5478,2.75661 4.2164,5.41671 -0.33086,2.66125 -2.75715,4.54992 -5.41823,4.21764 -1.30174,-0.16248 -2.48228,-0.84496 -3.2727,-1.89195 z m 98.85917,121.36746 c -2.20466,-2.87129 -2.85011,-6.64567 -1.72494,-10.08642 1.88215,-5.75691 8.07518,-8.89766 13.83182,-7.01469 5.75561,1.88268 8.89551,8.07447 7.01344,13.83028 -1.88266,5.75562 -8.07446,8.89554 -13.83028,7.01346 -2.10011,-0.68614 -3.94399,-1.99065 -5.29004,-3.74263 z m -73.88686,-94.15235 c -1.32699,-1.6307 -1.20392,-4.0012 0.28554,-5.48498 1.6016,-1.59464 4.19246,-1.58971 5.78798,0.011 1.59599,1.60144 1.59161,4.19346 -0.01,5.7895 -1.60144,1.59599 -4.19346,1.59161 -5.7895,-0.01 -0.0965,-0.0973 -0.188,-0.1993 -0.27425,-0.30574 z m 20.31012,24.705 c -0.51923,-0.60019 -0.88919,-1.31466 -1.07971,-2.08508 -0.66755,-2.69873 0.97881,-5.4277 3.67745,-6.09566 2.69873,-0.66754 5.4277,0.97881 6.09565,3.67745 0.66824,2.6996 -0.9791,5.42964 -3.67895,6.09688 -1.83817,0.45404 -3.77563,-0.16169 -5.01444,-1.59359 z M 380.77644,645.0372 c -0.62097,-0.85038 -1.07842,-1.8088 -1.349,-2.82642 -1.20584,-4.53371 1.49228,-9.18647 6.02614,-10.39175 4.53372,-1.20585 9.18648,1.49228 10.39176,6.02615 1.20583,4.53372 -1.49229,9.18646 -6.02615,10.39174 -3.38568,0.90042 -6.97685,-0.37029 -9.04275,-3.19972 z m 88.13027,105.75897 c -0.73079,-0.91549 -1.18316,-2.02166 -1.30349,-3.18685 -0.34724,-3.36028 2.09565,-6.36569 5.45601,-6.71231 3.36029,-0.34724 6.36569,2.09566 6.71231,5.45601 0.34724,3.36029 -2.09566,6.3657 -5.45601,6.71232 -2.0717,0.21391 -4.10986,-0.64116 -5.40882,-2.26917 z m 27.6778,33.88827 c -1.70364,-2.04585 -2.41727,-4.73942 -1.94998,-7.3604 0.87486,-4.90792 5.56287,-8.17725 10.47074,-7.30212 4.90792,0.87487 8.17726,5.56286 7.30213,10.47074 -0.87486,4.90793 -5.56287,8.17727 -10.47075,7.30213 -2.09491,-0.37349 -3.9905,-1.4751 -5.35214,-3.11035 z m -14.31555,-19.92722 c -0.99299,-1.35139 -1.49952,-2.99901 -1.43732,-4.67485 0.15167,-4.09981 3.59756,-7.30077 7.69741,-7.15028 4.09992,0.15087 7.30158,3.59625 7.15179,7.6962 -0.15019,4.10102 -3.59671,7.30366 -7.69771,7.15302 -2.26644,-0.0831 -4.37082,-1.19678 -5.71417,-3.02409 z M 354.39177,603.34807 c -0.6803,-0.88953 -1.23685,-1.86721 -1.65436,-2.90632 -2.55021,-6.34603 0.52671,-13.55788 6.87262,-16.10839 6.3468,-2.55087 13.55971,0.52696 16.10962,6.87414 2.55086,6.34681 -0.52697,13.55971 -6.87415,16.10962 -5.1625,2.07381 -11.07431,0.4504 -14.45373,-3.96905 z m 78.25907,96.08836 c -1.18701,-1.57678 -1.3153,-3.7108 -0.32576,-5.41844 1.36121,-2.34738 4.3676,-3.14687 6.715,-1.78571 2.34737,1.36122 3.14685,4.3676 1.7857,6.71501 -1.36121,2.34738 -4.36759,3.14686 -6.715,1.7857 -0.56849,-0.33016 -1.06493,-0.77106 -1.45994,-1.29656 z m 16.14196,18.3962 c -0.0767,-0.0887 -0.15029,-0.17995 -0.22073,-0.27364 -1.6491,-2.19692 -1.20473,-5.31477 0.99241,-6.96357 2.19692,-1.64909 5.31478,-1.20474 6.96358,0.99241 1.64909,2.19692 1.20473,5.31478 -0.99242,6.96357 -2.08788,1.56731 -5.03225,1.25343 -6.74284,-0.71877 z m -42.22022,-55.68012 c -0.99083,-1.25363 -1.52818,-2.80573 -1.52468,-4.40363 0.008,-3.90817 3.18258,-7.06996 7.09076,-7.06241 3.90818,0.008 7.06996,3.1826 7.0624,7.09077 -0.007,3.9083 -3.18125,7.0708 -7.08954,7.06392 -2.15986,-0.004 -4.19964,-0.99418 -5.53894,-2.68865 z m 16.95275,18.99684 c -1.26445,-1.48023 -1.71683,-3.48915 -1.20892,-5.3685 0.84896,-3.14393 4.08574,-5.00448 7.22974,-4.15573 3.14394,0.84895 5.00449,4.08575 4.15574,7.22974 -0.84896,3.14395 -4.08575,5.00449 -7.22975,4.15574 -1.14737,-0.30932 -2.17452,-0.95808 -2.94681,-1.86125 z m 40.06407,40.4209 c -0.21548,-0.26871 -0.40715,-0.55569 -0.57357,-0.85724 -1.61205,-2.92178 -0.55024,-6.59716 2.37159,-8.20911 2.92177,-1.61205 6.59715,-0.55024 8.2091,2.37159 1.61146,2.92109 0.55048,6.59542 -2.37006,8.20787 -2.57466,1.4216 -5.79893,0.78278 -7.63706,-1.51311 z m -15.98468,-24.3699 c -1.84148,-2.16099 -1.90594,-5.32005 -0.15414,-7.55435 2.03409,-2.59483 5.78676,-3.04899 8.38114,-1.01432 2.59377,2.0349 3.04668,5.78724 1.01158,8.38085 -2.03436,2.59347 -5.78581,3.04702 -8.37963,1.0131 -0.31311,-0.24577 -0.60087,-0.52223 -0.85895,-0.82528 z m -52.73779,-73.48416 c -1.26035,-1.52308 -2.05662,-3.37617 -2.2941,-5.33879 -0.6832,-5.65757 3.34921,-10.79781 9.00675,-11.4812 5.65672,-0.68344 10.79672,3.34745 11.48149,9.00401 0.68414,5.6577 -3.34781,10.79873 -9.00553,11.48272 -3.48733,0.42145 -6.94952,-0.96015 -9.18861,-3.66674 z m 85.94338,104.97353 c -0.39378,-0.53371 -0.71343,-1.11831 -0.95019,-1.73787 -1.44607,-3.78769 0.45261,-8.03043 4.24055,-9.47584 3.78692,-1.44541 8.0286,0.45236 9.47462,4.23904 1.44606,3.7877 -0.45262,8.03043 -4.24056,9.47584 -3.08072,1.17564 -6.56731,0.15263 -8.52442,-2.50117 z M 439.45495,673.2605 c -1.62167,-2.05779 -1.99066,-4.83669 -0.96215,-7.24635 1.55322,-3.63844 5.76174,-5.32904 9.40035,-3.77622 3.63836,1.55263 5.32957,5.76042 3.77774,9.39912 -1.55275,3.63976 -5.7625,5.33115 -9.40186,3.77745 -1.10362,-0.47099 -2.07125,-1.21165 -2.81408,-2.154 z m -17.12706,-25.58388 c -1.31671,-1.80871 -1.87655,-4.05943 -1.56063,-6.27423 0.66987,-4.70024 5.02277,-7.9678 9.72313,-7.29879 4.70141,0.66924 7.9699,5.02333 7.30002,9.72465 -0.66925,4.70141 -5.02333,7.96989 -9.72465,7.30002 -2.30048,-0.32788 -4.37028,-1.57297 -5.73787,-3.45165 z m 78.58809,93.35121 c -0.90088,-1.07936 -1.53382,-2.35642 -1.8471,-3.72699 -1.09872,-4.8007 1.90234,-9.58312 6.70305,-10.68183 4.8007,-1.09872 9.58312,1.90234 10.68183,6.70304 1.09872,4.8007 -1.90234,9.58313 -6.70305,10.68184 -3.27027,0.74892 -6.68414,-0.40107 -8.83473,-2.97606 z M 465.71177,696.649 c -2.30105,-2.92852 -2.00935,-7.12404 0.67475,-9.70603 2.8861,-2.77633 7.47638,-2.68746 10.25284,0.19852 2.77634,2.88609 2.68746,7.47637 -0.1985,10.25284 -2.8861,2.77633 -7.47638,2.68746 -10.25285,-0.19852 -0.16777,-0.17421 -0.32669,-0.35673 -0.47627,-0.54678 z m 56.92523,62.03865 c -1.26593,-1.64435 -2.03295,-3.61769 -2.2098,-5.68534 -0.51057,-5.96132 3.9083,-11.20776 9.86964,-11.71803 5.96119,-0.50968 11.20686,3.90966 11.71653,9.87085 0.51057,5.96133 -3.90829,11.20777 -9.86964,11.71805 -3.67479,0.31411 -7.25693,-1.26301 -9.50673,-4.18553 z m 24.04781,26.17169 c -2.2489,-2.58131 -3.40339,-5.93738 -3.21846,-9.35594 0.39335,-7.25859 6.59709,-12.8236 13.85562,-12.42905 7.25739,0.3948 12.82073,6.59793 12.42631,13.85533 -0.39401,7.25749 -6.59661,12.82153 -13.8541,12.42783 -3.55151,-0.19333 -6.87353,-1.81592 -9.20937,-4.49817 z M 460.5592,667.28518 c -2.53883,-2.84857 -2.92598,-7.01874 -0.95493,-10.286 2.48379,-4.11525 7.83348,-5.43762 11.94854,-2.95352 4.11505,2.48324 5.43803,7.83213 2.95503,11.94732 -2.48324,4.11504 -7.83212,5.43803 -11.94731,2.95503 -0.74666,-0.45085 -1.42131,-1.0114 -2.00133,-1.66283 z m 27.47595,32.39992 c -0.13354,-0.15917 -0.26155,-0.32292 -0.3834,-0.49122 -2.85197,-3.94132 -1.96916,-9.44832 1.97189,-12.30067 3.94133,-2.85197 9.44833,-1.96915 12.30068,1.97189 2.85326,3.94128 1.97093,9.44938 -1.97067,12.3022 -3.74617,2.71023 -8.95019,2.06297 -11.91832,-1.48235 z m -73.05216,-99.9147 c -1.71562,-2.24991 -2.61964,-5.01403 -2.56505,-7.8429 0.13408,-6.92169 5.85376,-12.42424 12.77546,-12.29045 6.9217,0.13407 12.42425,5.85376 12.29046,12.77547 -0.13408,6.92169 -5.85376,12.42424 -12.77546,12.29045 -3.8246,-0.0742 -7.40602,-1.89061 -9.72541,-4.93257 z m 29.43558,34.16664 c -2.19311,-2.6598 -2.9326,-6.23042 -1.9762,-9.54246 1.60029,-5.54207 7.3903,-8.73754 12.93238,-7.13731 5.54208,1.60029 8.73755,7.39029 7.13732,12.93238 -1.60029,5.54207 -7.39029,8.73755 -12.93238,7.13732 -2.0227,-0.58401 -3.82171,-1.76562 -5.16112,-3.38993 z m 69.70483,72.8261 c -0.37218,-0.48257 -0.7024,-0.9961 -0.98719,-1.53487 -2.76572,-5.22378 -0.77294,-11.70055 4.45094,-14.46607 5.22443,-2.76509 11.70123,-0.77103 14.46576,4.45369 2.7645,5.22374 0.77128,11.69948 -4.45217,14.46454 -4.60375,2.43705 -10.29351,1.20545 -13.47734,-2.91729 z m -27.55784,-43.65366 c -3.1946,-3.88492 -3.21018,-9.48258 -0.0371,-13.38514 3.68309,-4.53024 10.34109,-5.21747 14.87189,-1.53508 4.5316,3.68284 5.21945,10.34205 1.5363,14.87341 -3.68338,4.53191 -10.34348,5.21912 -14.87463,1.53478 -0.54718,-0.44484 -1.04847,-0.94332 -1.49641,-1.48797 z m 58.63976,57.81499 c -1.06005,-1.21393 -1.8851,-2.61443 -2.43318,-4.13 -2.44311,-6.75186 1.04963,-14.2059 7.80138,-16.64931 6.75266,-2.44378 14.20775,1.04988 16.65054,7.8029 2.44311,6.75187 -1.04963,14.20589 -7.80138,16.6493 -5.04305,1.82528 -10.6894,0.36661 -14.21736,-3.67289 z M 472.87323,620.45902 c -2.80764,-3.69426 -3.37494,-8.62644 -1.47934,-12.86167 2.8624,-6.39649 10.36811,-9.26157 16.76471,-6.39942 6.3965,2.86239 9.26159,10.36811 6.39943,16.76472 -2.86193,6.39782 -10.3689,9.26367 -16.76624,6.40065 -1.94075,-0.86876 -3.63206,-2.21131 -4.91856,-3.90428 z m 45.78004,42.23403 c -3.98528,-5.2571 -3.34,-12.67844 1.4928,-17.16883 5.19739,-4.82832 13.32491,-4.52885 18.15287,0.66889 4.82789,5.19682 4.52911,13.32337 -0.66737,18.15164 -5.19739,4.82833 -13.32492,4.52885 -18.15288,-0.66889 -0.29131,-0.31366 -0.56682,-0.64166 -0.82543,-0.9828 z"
+ id="path45821"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccscccccccccccccccccccccccccccscccccccccccccscccccscccccccccccccccccccccccccccccccccccccccscccccccsccccscccccccccccccccccccccccsccccscsccccccccccccccsccccccccscccsscccccccccccccccccccccccccscsccsccccscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccssccscccccsccccsccccccccccccccccccccccccccccccccsccccsccccscccscccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccsscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsscccsccccscccccccccccccccccccccccccccccccscccssscsccccccccccccccsccccccccccccccccssscsccccscccccccccscccccccccccccc" />
+ <path
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d=""
+ id="path54483"
+ inkscape:connector-curvature="0"
+ transform="translate(0,452.36216)" />
+ <path
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 446.49318,561.34265 c -0.29563,0.0542 -0.59144,0.098 -0.88672,0.15692 -25.79016,5.14867 -87.89844,24.62342 -87.89844,24.62342 76.93842,-1.32265 89.82678,-0.0807 95.64062,8.30915 3.43335,4.95467 -1.45662,11.82573 -21.95117,15.50807 -22.31219,4.0089 -68.71875,8.99571 -68.71875,8.99571 -44.5297,3.13684 -75.91009,3.57706 -85.16797,24.55868 -6.04831,13.70751 6.74815,25.67877 12.37305,33.19149 23.73629,27.26589 57.83769,41.79731 79.79883,52.52461 8.26321,4.0362 32.47656,11.58887 32.47656,11.58887 -71.01583,-3.52004 -122.05321,19.76197 -151.89648,46.33393 -33.73014,33.24127 -18.41273,72.41573 51.36718,96.04565 41.21482,13.95678 61.65316,20.51162 122.93165,14.22128 36.10362,-2.33537 41.80642,-1.1663 42.18945,1.93999 0.53907,4.37338 -40.00615,15.5771 -51.07227,19.02317 -18.05502,5.62243 -54.7165,14.92781 -78.92187,20.93765 a 196.41905,197.26698 0 0 0 17.53125,5.08043 c 2.49441,-0.19217 5.03527,-0.40727 7.65429,-0.67085 11.07305,-1.11431 53.1118,-5.7901 84.51172,-13.2817 0,0 38.28567,-8.9253 58.74414,-17.02042 8.58318,-3.39759 15.57032,-6.58111 21.22461,-9.82151 a 196.41905,197.26698 0 0 0 16.98633,-16.2515 c -0.0586,-2.45011 1.01271,-9.10758 -8.37305,-13.14832 -25.39181,-10.93152 -54.72998,-8.67923 -112.82226,-9.49981 -64.42866,-1.7993 -85.93871,-12.93469 -97.41992,-21.95178 -11.01351,-9.15264 -5.69927,-34.76483 41.0332,-57.66584 23.53592,-12.1842 115.98242,-35.06675 115.98242,-35.06675 -31.30818,-15.92015 -89.67555,-43.88093 -101.67578,-49.92357 -10.52484,-5.29966 -27.36473,-13.27014 -31.07422,-23.05024 -4.19322,-9.38379 9.61145,-17.61011 17.33789,-19.99612 24.8835,-7.74892 60.05565,-12.72461 92.09375,-13.51121 16.1041,-0.39515 18.70899,-1.50254 18.70899,-1.50254 22.19458,-4.04764 36.70726,-20.1177 30.42578,-45.32961 -0.91003,-4.13686 -2.42872,-7.99001 -4.43946,-11.52807 a 196.41905,197.26698 0 0 0 -56.69335,-23.81918 z"
+ id="path54245-1"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="layer4"
+ inkscape:label="assets"
+ style="display:none"
+ transform="translate(425.49973,15.529223)">
+ <g
+ style="display:inline"
+ id="g55068"
+ transform="matrix(-1.4449173,-1.0202092,1.0202092,-1.4449173,147.03069,2572.2755)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path54337"
+ d="m 943.19308,860.02418 c -5.52072,-2.71967 -8.38031,-10.23022 -6.1343,-16.11132 3.98883,-10.44461 18.73157,-11.56273 23.71294,-1.79844 1.59043,3.11751 1.91703,9.06835 0.63468,11.56436 -1.17306,2.28328 -4.24535,5.42169 -6.41922,6.55738 -2.57737,1.34647 -8.85979,1.23356 -11.7941,-0.21198 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54339"
+ d="m 988.5309,812.78574 c -4.71897,-2.8922 -7.15933,-8.79513 -5.77984,-13.98072 1.65476,-6.22035 6.36503,-9.85353 12.71098,-9.80437 12.40346,0.0961 17.29136,15.58985 7.31816,23.19682 -3.79092,2.89147 -10.0685,3.15063 -14.2493,0.58827 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54341"
+ d="m 1013.2306,752.94331 c -8.3555,-4.13587 -9.3864,-15.79139 -1.9017,-21.50029 3.8433,-2.93145 9.7671,-3.28061 13.9608,-0.8229 4.0012,2.34483 6.2067,6.27743 6.2067,11.06714 0,9.76778 -9.4757,15.60704 -18.2658,11.25605 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54343"
+ d="m 1014.8794,690.13627 c -7.0707,-1.61307 -11.6255,-8.91675 -9.6574,-15.48566 1.7639,-5.8873 6.3378,-9.2855 12.4982,-9.2855 6.7817,0 12.362,5.58589 12.362,12.37437 0,7.74751 -7.7788,14.09049 -15.2028,12.39679 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54345"
+ d="m 985.75798,631.46397 c -9.41908,-4.2764 -8.96063,-18.95758 0.70637,-22.6203 2.83202,-1.07303 7.98729,-0.93283 10.33468,0.28105 4.54417,2.3499 7.73327,8.55628 6.84087,13.3132 -1.051,5.60247 -6.62238,10.38066 -12.09506,10.37312 -1.55564,-0.002 -4.15972,-0.60833 -5.78686,-1.34707 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54347"
+ d="m 939.23335,588.83564 c -4.16364,-2.41864 -6.14464,-6.27028 -5.83149,-11.33805 0.66388,-10.74344 13.06292,-15.5017 20.64275,-7.92188 5.48743,5.48743 4.61686,14.12149 -1.91147,18.95749 -3.00619,2.2269 -9.33159,2.3752 -12.89979,0.30244 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54349"
+ d="m 883.43127,569.17141 c -4.43863,-1.32824 -8.2055,-6.67182 -8.2055,-11.64008 0,-7.77274 7.86263,-13.81901 15.17486,-11.66929 5.41607,1.59228 8.87435,6.20492 8.85514,11.81095 -0.0286,8.3368 -7.71817,13.92423 -15.8245,11.49842 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54351"
+ d="m 821.83921,572.15032 c -3.37686,-1.59719 -4.87889,-3.17748 -6.33699,-6.66721 -1.46679,-3.51051 -1.36916,-5.86306 0.3945,-9.50629 2.16433,-4.47091 6.48829,-6.85367 11.65912,-6.42487 6.3548,0.52699 10.21827,4.3598 10.74032,10.65507 0.7714,9.30199 -8.22991,15.83451 -16.45695,11.9433 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54353"
+ d="m 767.14396,598.40459 c -5.75703,-2.83651 -7.97686,-11.39098 -4.33506,-16.70584 5.26822,-7.68846 16.40248,-7.08321 20.58698,1.11911 2.80903,5.50615 0.44031,12.88975 -5.04517,15.7264 -2.69333,1.39278 -8.23669,1.32369 -11.20675,-0.13967 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54355"
+ d="m 728.51553,643.28322 c -4.04356,-2.34941 -6.15216,-6.30481 -5.8237,-10.92434 1.00019,-14.0669 21.60615,-14.45925 22.9535,-0.43705 0.66681,6.93953 -3.77303,12.24678 -10.65448,12.73607 -2.86521,0.20372 -4.27317,-0.0952 -6.47532,-1.37468 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54357"
+ d="m 711.14873,699.09217 c -3.49189,-1.84656 -6.33569,-6.3526 -6.33569,-10.03898 0,-3.68639 2.8438,-8.19243 6.33569,-10.03898 3.87287,-2.04802 6.65589,-2.05776 10.65891,-0.0373 8.3379,4.20843 8.3379,15.9441 0,20.15254 -4.00302,2.02047 -6.78604,2.01073 -10.65891,-0.0373 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54359"
+ d="m 716.19177,756.46769 c -4.07615,-2.79693 -5.36832,-5.13546 -5.36832,-9.71542 0,-3.39464 0.33774,-4.51185 2.03775,-6.74069 6.63571,-8.69986 20.30856,-4.36848 20.43985,6.47508 0.08,6.60887 -3.97182,10.88486 -10.7641,11.35956 -3.24874,0.22705 -4.35577,-0.0134 -6.34518,-1.37853 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54361"
+ d="m 743.60388,806.67509 c -3.76469,-2.18301 -5.8086,-6.21198 -5.38544,-10.61585 0.41662,-4.33582 2.15228,-6.82311 6.20703,-8.89499 3.91651,-2.00124 5.94341,-2.00124 9.91199,0 4.12003,2.07761 6.5777,6.52097 6.10687,11.04094 -0.83526,8.01856 -9.82312,12.53901 -16.84045,8.4699 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54363"
+ d="m 788.60519,842.16434 c -3.96562,-2.06101 -5.53578,-4.52085 -5.86155,-9.18279 -0.30321,-4.33899 1.1817,-7.3693 4.9957,-10.19491 2.72332,-2.01759 8.90787,-2.01759 11.6312,0 3.35165,2.48308 5.14455,5.77842 5.14455,9.45567 0,8.23132 -8.71066,13.66363 -15.9099,9.92203 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54365"
+ d="m 843.05241,857.44561 c -10.86737,-5.02742 -7.64233,-20.96066 4.24264,-20.96066 10.97348,0 14.91555,13.32273 5.91441,19.9885 -2.38375,1.76528 -7.40396,2.24578 -10.15705,0.97216 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54367"
+ d="m 898.91385,850.57636 c -6.52768,-2.07473 -9.63575,-9.82122 -6.25977,-15.60171 5.64799,-9.67068 20.03668,-5.99698 20.04571,5.11804 0.006,7.1622 -7.1397,12.59608 -13.78594,10.48367 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54369"
+ d="m 881.56946,885.24925 c -5.01396,-2.98857 -7.79827,-9.42127 -6.37143,-14.72013 0.95832,-3.55895 4.46932,-7.74105 7.59538,-9.04721 5.57063,-2.32755 13.00544,-0.13238 16.27257,4.80457 3.82523,5.78032 2.48908,13.80422 -2.99527,17.98734 -3.61542,2.75762 -10.71056,3.23487 -14.50125,0.97543 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54371"
+ d="m 816.56926,885.76681 c -6.10693,-1.94685 -10.23596,-9.67016 -8.53902,-15.97214 0.95176,-3.53457 4.4705,-7.71728 7.58803,-9.01986 2.73776,-1.14391 7.84179,-1.24261 10.59433,-0.20486 2.8621,1.07906 6.42933,4.76168 7.36823,7.60657 2.26936,6.87623 -0.37483,13.59125 -6.5669,16.67689 -3.91177,1.94931 -6.48839,2.17464 -10.44467,0.9134 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54373"
+ d="m 755.72015,859.18974 c -8.41007,-2.70504 -12.5105,-10.43242 -9.59156,-18.07555 5.05393,-13.23354 24.37,-10.74464 26.30733,3.38974 0.6342,4.62697 -2.21798,10.3932 -6.33383,12.80508 -3.31009,1.9397 -7.71671,2.73798 -10.38194,1.88073 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54375"
+ d="m 705.86055,808.62949 c -2.90534,-1.26594 -6.46415,-5.47339 -7.47042,-8.83199 -1.79829,-6.00219 1.32622,-13.29928 6.87106,-16.0469 4.33794,-2.14957 10.08072,-1.81946 13.84449,0.79581 8.64871,6.00959 8.00156,19.19447 -1.1598,23.6294 -3.41694,1.65412 -8.86126,1.8585 -12.08533,0.45368 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54377"
+ d="m 681.12496,743.3836 c -4.97775,-2.63012 -7.62665,-7.03474 -7.62665,-12.68172 0,-14.60484 20.39951,-18.93577 26.45007,-5.6155 3.16429,6.96617 -0.43517,16.09905 -7.37896,18.7226 -2.90003,1.0957 -8.99437,0.86918 -11.44446,-0.42538 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54379"
+ d="m 684.6605,673.48746 c -5.49141,-2.95295 -8.13173,-7.19914 -8.13173,-13.07756 0,-12.57689 14.83017,-18.58446 23.78112,-9.63352 6.34822,6.34822 5.41524,16.57511 -1.95721,21.45397 -3.64435,2.41172 -10.39282,3.03131 -13.69218,1.25711 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54381"
+ d="m 943.01005,821.3188 c -2.56226,-1.7411 -4.85177,-5.99761 -4.85177,-9.02009 0,-2.94568 2.7362,-7.32132 5.57641,-8.91761 7.17978,-4.03526 15.90875,0.86604 15.90875,8.93272 0,8.71535 -9.49491,13.8557 -16.63339,9.00498 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54383"
+ d="m 980.4521,780.14048 c 0.51044,-0.20426 1.12032,-0.17914 1.35529,0.0558 0.23496,0.23497 -0.18267,0.40209 -0.92808,0.37139 -0.82374,-0.0339 -0.99129,-0.20148 -0.42721,-0.42721 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54385"
+ d="m 976.33101,778.60712 c -7.31633,-3.8879 -7.60571,-14.08978 -0.52576,-18.53553 3.00724,-1.88835 8.56466,-1.58679 11.68345,0.63398 2.77628,1.97689 4.74896,6.92762 4.11242,10.32069 -0.88558,4.72053 -5.96407,8.89015 -10.82798,8.89015 -1.08806,0 -3.08702,-0.58918 -4.44213,-1.30929 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54387"
+ d="m 990.3007,727.29512 c -5.24011,-1.88601 -7.20682,-5.03789 -6.73016,-10.78587 1.08729,-13.11128 20.33476,-12.07229 20.34606,1.0983 0.01,7.18821 -6.90271,12.10377 -13.6159,9.68757 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54389"
+ d="m 980.16841,674.63461 c -3.75578,-2.29025 -5.24112,-4.79646 -5.23592,-8.83453 0.0142,-11.02788 14.2224,-14.46059 19.30257,-4.66352 4.49293,8.66459 -5.79844,18.53996 -14.06665,13.49805 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54391"
+ d="m 952.19668,630.70621 c -3.2812,-1.73359 -5.90278,-6.75057 -5.27185,-10.08885 1.72016,-9.10141 11.7027,-11.96475 18.04488,-5.1759 2.55819,2.73836 2.86752,8.43177 0.63784,11.73988 -3.15358,4.6789 -8.54468,6.09587 -13.41087,3.52487 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54393"
+ d="m 910.7725,601.75108 c -4.20255,-1.90773 -6.00251,-5.01384 -5.6522,-9.75374 0.44345,-6.00021 5.05887,-9.83205 11.03172,-9.15883 2.61235,0.29445 3.71739,0.90074 5.89323,3.23336 2.32816,2.49591 2.67765,3.31329 2.67535,6.25708 -0.004,4.45837 -2,7.67644 -5.84559,9.42213 -3.71546,1.68662 -4.38706,1.68662 -8.10251,0 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54395"
+ d="m 860.55771,591.37016 c -3.08511,-1.5209 -5.13093,-5.00435 -5.13093,-8.73654 0,-10.63621 13.83543,-13.65334 18.80552,-4.10098 4.19653,8.06561 -5.28967,16.97113 -13.67459,12.83752 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54397"
+ d="m 811.57513,601.1152 c -6.73926,-3.60346 -6.73926,-13.56072 0,-17.16418 6.63267,-3.54646 14.1441,0.96481 14.15052,8.49863 0.007,7.61509 -7.50838,12.21708 -14.15052,8.66555 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54399"
+ d="m 770.16382,628.7184 c -1.19785,-0.75355 -2.70929,-2.48989 -3.35875,-3.85854 -5.08159,-10.70864 9.09064,-19.30772 16.43439,-9.97165 1.08184,1.37534 1.47664,2.89434 1.47664,5.68136 0,3.32597 -0.29642,4.12757 -2.35837,6.37755 -2.04956,2.23645 -2.85972,2.61061 -6.18718,2.8574 -2.92205,0.21673 -4.3446,-0.0405 -6.00673,-1.08612 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54401"
+ d="m 743.91502,669.63638 c -6.92533,-4.22262 -5.28447,-14.7153 2.67406,-17.09973 7.54552,-2.2607 14.59407,6.39862 10.94784,13.44966 -2.43364,4.70614 -9.00293,6.46642 -13.6219,3.65007 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54403"
+ d="m 738.37405,718.33556 c -5.77,-1.63099 -8.50657,-9.11901 -5.14175,-14.06928 2.04686,-3.01131 4.31041,-4.2288 7.88764,-4.24251 3.71888,-0.0143 6.57804,1.85801 8.31418,5.44441 3.50674,7.24396 -3.22941,15.08086 -11.06007,12.86738 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54405"
+ d="m 760.91164,690.28232 c -5.31741,-2.63209 -5.934,-10.0378 -1.12107,-13.46491 2.44956,-1.74424 6.22868,-1.92094 8.47195,-0.39614 2.95159,2.00628 4.13533,4.22955 3.88857,7.30338 -0.2591,3.22756 -1.44182,4.97441 -4.38689,6.47926 -2.73286,1.39642 -4.15694,1.41272 -6.85256,0.0784 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54407"
+ d="m 778.58407,654.33647 c -3.18016,-1.00686 -5.31067,-4.1609 -5.30779,-7.85773 0.008,-9.70164 14.55315,-10.40467 15.84598,-0.76588 0.74129,5.52676 -5.13399,10.33462 -10.53819,8.62361 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54409"
+ d="m 785.42369,672.87886 c -5.58409,-3.50844 -3.10176,-12.04995 3.50195,-12.04995 1.9835,0 4.81155,1.74119 5.70912,3.51501 0.3437,0.67925 0.62823,2.19455 0.63228,3.36734 0.006,1.72255 -0.31087,2.4796 -1.64864,3.93936 -1.38223,1.50828 -2.0642,1.84232 -4.125,2.02049 -1.87548,0.16216 -2.85378,-0.0283 -4.06971,-0.79225 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54411"
+ d="m 807.29142,647.45314 c -3.27047,-1.64982 -4.71403,-6.47287 -2.80802,-9.3818 1.1126,-1.69804 3.69437,-3.23822 5.43207,-3.24056 7.10926,-0.01 9.49071,9.40877 3.1546,12.47603 -2.57856,1.24826 -3.54571,1.27275 -5.77865,0.14633 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54413"
+ d="m 807.52441,626.34526 c -5.00772,-2.60365 -6.00815,-8.85819 -2.05,-12.81635 5.41917,-5.41916 14.40728,-1.19594 13.67496,6.42542 -0.55394,5.76499 -6.52023,9.04502 -11.62496,6.39093 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54415"
+ d="m 846.25442,612.67754 c -2.96682,-1.56889 -4.64435,-4.66568 -4.33948,-8.01087 0.38724,-4.2491 3.23362,-6.91015 7.72775,-7.22462 2.40563,-0.16832 3.16325,-0.008 4.58575,0.96761 2.51996,1.72912 3.65913,3.55421 3.90545,6.25701 0.30487,3.34519 -1.37266,6.44198 -4.33949,8.01087 -2.75352,1.4561 -4.78646,1.4561 -7.53998,0 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54417"
+ d="m 888.77441,615.96815 c -2.94987,-1.10844 -5.47804,-4.7494 -5.47804,-7.88924 0,-2.25214 1.65497,-5.45186 3.49896,-6.76489 2.14193,-1.52519 6.2132,-1.90684 8.3813,-0.78567 6.28705,3.25116 6.32296,11.8314 0.0631,15.06852 -1.39052,0.71906 -4.98967,0.92575 -6.46528,0.37128 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54419"
+ d="m 925.99962,634.65332 c -3.51959,-1.59699 -5.7156,-6.14636 -4.73133,-9.80167 1.97342,-7.32873 11.71571,-8.65997 15.40017,-2.10436 3.0767,5.47425 -0.37503,12.01774 -6.55512,12.42661 -1.50327,0.0995 -3.22834,-0.11884 -4.11372,-0.52058 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54421"
+ d="m 952.73525,666.69201 c -5.17704,-3.4888 -5.39563,-10.90676 -0.41845,-14.2005 3.82078,-2.52847 8.12101,-2.01325 11.14638,1.33546 5.06242,5.6035 1.17447,14.00194 -6.48203,14.00194 -1.8336,0 -3.03701,-0.32223 -4.2459,-1.1369 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54423"
+ d="m 966.49962,708.62561 c -2.03967,-0.88842 -4.07896,-3.3967 -4.73133,-5.81943 -0.75268,-2.79524 0.14101,-5.7298 2.4473,-8.03609 5.31942,-5.31943 13.83201,-2.19886 14.45374,5.2985 0.17797,2.14603 -0.009,3.07719 -0.95648,4.76296 -2.17663,3.8728 -7.16076,5.55921 -11.21323,3.79406 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54425"
+ d="m 963.09304,752.61974 c -4.08861,-1.50673 -6.13033,-4.87098 -5.69646,-9.38636 0.63817,-6.6416 8.32054,-9.86161 13.95533,-5.84928 2.06536,1.47066 3.59538,5.06489 3.29406,7.73818 -0.63755,5.6563 -6.40047,9.39624 -11.55293,7.49746 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54427"
+ d="m 942.17009,791.83471 c -3.49973,-1.05497 -6.40768,-4.94397 -6.3847,-8.53866 0.0129,-2.01643 1.44165,-5.35649 2.81171,-6.57307 1.40303,-1.24586 4.4022,-2.39407 6.25339,-2.39407 3.85475,0 7.85025,3.41845 8.67903,7.42555 1.2622,6.10266 -5.28396,11.91166 -11.35943,10.08025 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54429"
+ d="m 906.27798,819.53242 c -3.68816,-1.59939 -5.50357,-4.30379 -5.50357,-8.1986 0,-3.46429 1.43886,-6.1339 4.16809,-7.73334 6.83671,-4.00658 15.36745,2.16902 13.3493,9.66386 -0.70732,2.62678 -2.72103,4.97748 -5.2467,6.12474 -2.44422,1.11026 -4.43995,1.15253 -6.76712,0.14334 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54431"
+ d="m 862.02441,831.54262 c -3.4625,-1.80082 -5.25,-4.58084 -5.25,-8.1651 0,-3.53949 1.92133,-6.68254 5.10017,-8.34325 1.73739,-0.90765 6.06228,-0.90765 7.79966,0 5.51175,2.87948 6.84393,10.04208 2.69336,14.48122 -2.56804,2.7466 -7.21043,3.65644 -10.34319,2.02713 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54433"
+ d="m 815.88597,825.26962 c -2.26963,-1.12345 -4.24076,-3.8804 -4.84308,-6.77387 -0.83781,-4.02478 2.4542,-9.01507 6.70158,-10.15877 2.42884,-0.65402 5.65071,-0.10721 7.84685,1.33175 3.02289,1.98067 4.54806,7.30577 3.15128,11.00263 -1.84626,4.88655 -7.90004,7.05172 -12.85663,4.59826 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54435"
+ d="m 775.64819,801.82221 c -4.57508,-2.48342 -6.15568,-9.00147 -3.24822,-13.39493 3.86859,-5.84584 12.80689,-5.32225 15.99867,0.93718 1.1546,2.26431 1.13013,6.25577 -0.0519,8.45973 -0.5102,0.95132 -1.75607,2.40017 -2.7686,3.21968 -2.44822,1.98151 -7.04909,2.34214 -9.93,0.77834 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54437"
+ d="m 749.09304,764.61912 c -2.37895,-0.87593 -4.71655,-3.01379 -5.63021,-5.14915 -1.44161,-3.36927 -0.42757,-8.45796 2.13338,-10.70576 2.71907,-2.38659 7.05752,-3.12588 10.32708,-1.75978 2.18774,0.9141 4.691,3.87296 5.35135,6.32533 1.88572,7.00301 -5.42413,13.77745 -12.1816,11.28936 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54439"
+ d="m 759.87868,729.99503 c -7.73953,-3.81446 -4.48279,-15.27744 4.13737,-14.56259 3.15303,0.26147 4.90113,1.4539 6.31233,4.30582 3.21793,6.50319 -3.89668,13.48646 -10.4497,10.25677 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54441"
+ d="m 777.58407,705.30662 c -6.97072,-2.06252 -5.62542,-12.5148 1.60371,-12.45999 2.7729,0.021 4.29999,0.77349 5.61346,2.766 3.16068,4.79468 -1.70181,11.32589 -7.21717,9.69399 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54443"
+ d="m 795.46847,688.33888 c -3.30907,-1.33702 -4.21666,-5.8497 -1.73507,-8.62708 1.2526,-1.40191 1.78886,-1.63289 3.79101,-1.63289 2.00215,0 2.53841,0.23098 3.79102,1.63289 2.50367,2.8021 1.79407,6.64247 -1.54654,8.36997 -1.60242,0.82864 -2.72045,0.89549 -4.30042,0.25711 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54445"
+ d="m 809.43491,664.54675 c -2.32063,-1.18018 -3.44117,-3.80935 -2.69085,-6.31368 1.21525,-4.05615 6.29707,-5.12584 9.15535,-1.92714 3.94001,4.40925 -1.17561,10.93054 -6.4645,8.24082 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54447"
+ d="m 829.23595,661.86737 c -4.04443,-4.04443 1.17603,-10.07726 5.66484,-6.54637 2.48872,1.95763 2.13118,5.83193 -0.67197,7.28149 -2.08811,1.0798 -3.36612,0.89164 -4.99287,-0.73512 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54449"
+ d="m 832.46356,648.61644 c -2.02806,-0.89044 -3.18915,-2.59491 -3.18915,-4.68165 0,-5.05408 5.36876,-7.49604 9.11711,-4.14689 1.3921,1.24384 1.63289,1.7954 1.63289,3.74038 0,1.87662 -0.26614,2.54084 -1.5,3.74363 -1.82701,1.78101 -3.97929,2.25847 -6.06085,1.34453 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54451"
+ d="m 837.43257,631.85722 c -6.41737,-2.91358 -4.23643,-12.52831 2.84184,-12.52831 7.1046,0 9.28309,9.60389 2.84184,12.52831 -2.59958,1.18025 -3.0841,1.18025 -5.68368,0 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54453"
+ d="m 870.58185,628.78477 c -6.63991,-5.22296 -0.2519,-15.5182 7.16173,-11.54222 4.45537,2.38944 4.67237,8.99035 0.38156,11.60661 -2.19212,1.33661 -5.80136,1.3058 -7.54329,-0.0644 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54455"
+ d="m 860.94074,642.9753 c -1.4961,-0.28317 -3.55976,-2.29768 -3.95113,-3.85706 -0.52322,-2.08467 0.20318,-4.65254 1.63464,-5.77853 2.64946,-2.08406 5.31864,-1.91925 7.71423,0.47635 3.73421,3.73421 -0.0584,10.16979 -5.39774,9.15924 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54457"
+ d="m 852.01229,654.64229 c -1.46198,-0.64796 -2.73788,-2.56409 -2.73788,-4.11173 0,-1.62086 1.52552,-3.63252 3.165,-4.17359 3.11463,-1.02792 5.835,0.94041 5.835,4.22194 0,3.43203 -3.11948,5.45621 -6.26212,4.06338 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54459"
+ d="m 846.00169,664.60164 c -0.675,-0.675 -1.22728,-1.56441 -1.22728,-1.97647 0,-1.47407 1.15253,-3.23812 2.47293,-3.78504 3.6839,-1.52592 6.76862,3.17837 3.86985,5.90163 -1.53509,1.44213 -3.58952,1.38586 -5.1155,-0.14012 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54461"
+ d="m 866.4321,663.82076 c -1.31722,-0.5251 -2.15769,-1.96983 -2.15769,-3.70898 0,-3.14827 4.46528,-4.50604 6.46371,-1.96544 1.33232,1.69377 1.3093,2.82651 -0.0887,4.36428 -1.33977,1.47373 -2.72639,1.90449 -4.21731,1.31014 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54463"
+ d="m 875.32945,655.63116 c -1.32921,-0.73672 -2.51023,-2.57626 -2.53732,-3.95208 -0.0342,-1.7357 1.44057,-3.75885 3.15157,-4.32353 4.80083,-1.58442 8.18224,4.17768 4.42282,7.53671 -1.74662,1.56061 -3.17618,1.77031 -5.03707,0.7389 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54465"
+ d="m 886.73314,646.93769 c -1.19765,-1.0701 -1.61806,-1.93254 -1.82139,-3.73649 -0.24509,-2.17441 -0.13586,-2.47376 1.49916,-4.10878 1.48086,-1.48087 2.1143,-1.76351 3.95225,-1.76351 4.69459,0 6.9565,3.9895 4.77251,8.41766 -1.38222,2.80253 -5.88471,3.44079 -8.40253,1.19112 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54467"
+ d="m 904.50812,640.33005 c -2.50015,-1.23758 -3.73427,-3.24767 -3.73184,-6.07828 0.006,-6.95 8.90126,-9.49272 12.55079,-3.58765 0.839,1.35752 1.01717,2.26222 0.82971,4.21309 -0.26915,2.80108 -1.63246,4.65452 -4.24131,5.76614 -2.15217,0.91703 -3.0239,0.86652 -5.40735,-0.3133 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54469"
+ d="m 911.15952,663.34586 c -2.65792,-2.09072 -3.03198,-6.26836 -0.75245,-8.40368 2.79266,-2.61599 6.18625,-2.41127 8.65451,0.52209 1.83972,2.18638 1.51353,5.45463 -0.7459,7.47342 -1.94441,1.73733 -5.22828,1.92464 -7.15616,0.40817 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54473"
+ d="m 931.64467,664.10235 c -2.40628,-0.84341 -3.09586,-1.4353 -4.0742,-3.497 -1.01907,-2.14754 -1.00777,-3.92916 0.0389,-6.1349 2.33206,-4.91446 10.37644,-4.84765 12.44511,0.10335 2.43944,5.83842 -2.61124,11.56098 -8.40983,9.52855 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54475"
+ d="m 945.79142,695.95314 c -4.60677,-2.32393 -4.81982,-9.37696 -0.36773,-12.17417 2.23081,-1.4016 6.33762,-1.10367 8.15207,0.5914 2.00484,1.87293 2.84284,3.86517 2.5486,6.05897 -0.68871,5.1347 -5.7455,7.83797 -10.33294,5.5238 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54477"
+ d="m 927.12804,687.82109 c -0.70468,-0.5543 -1.54392,-1.80375 -1.86497,-2.77655 -2.02016,-6.12114 6.03739,-10.40412 10.02829,-5.33052 1.11908,1.42268 1.29773,4.3772 0.38571,6.37886 -1.22696,2.69288 -6.07638,3.6732 -8.54903,1.72821 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54479"
+ d="m 912.66198,684.04951 c -2.82114,-1.53098 -3.25479,-4.9303 -0.92603,-7.25906 3.64786,-3.64786 9.50204,0.29796 7.52468,5.07175 -0.64447,1.55589 -2.74336,2.98213 -4.33639,2.94669 -0.4949,-0.011 -1.51292,-0.35273 -2.26226,-0.75938 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54481"
+ d="m 919.52202,706.62197 c -3.25131,-3.25131 -1.11375,-8.29306 3.51602,-8.29306 2.07659,0 4.23637,2.49473 4.23637,4.89336 0,4.08744 -4.911,6.24109 -7.75239,3.3997 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54485"
+ d="m 947.00301,731.8974 c -4.04133,-2.46448 -4.71875,-8.01748 -1.36157,-11.16113 4.93079,-4.61718 12.75827,-0.8012 12.00813,5.85408 -0.57915,5.13816 -6.27094,7.97538 -10.64656,5.30705 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54487"
+ d="m 933.1557,717.54622 c -2.83886,-1.54035 -3.77488,-5.94643 -1.79734,-8.46047 3.66711,-4.66197 10.41605,-2.40331 10.41605,3.48592 0,4.37502 -4.71166,7.09449 -8.61871,4.97455 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54489"
+ d="m 934.99962,766.62561 c -2.65643,-1.15707 -4.22521,-3.51843 -4.22521,-6.35989 0,-3.07832 0.96691,-5.02578 3.1719,-6.38854 3.75936,-2.32341 8.59796,-0.82599 10.38499,3.21389 1.20764,2.73008 0.89031,5.12965 -0.97089,7.34157 -2.23958,2.66159 -5.38864,3.48756 -8.36079,2.19297 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54491"
+ d="m 926.87346,746.99251 c -2.03,-1.00044 -3.09905,-2.95887 -3.09905,-5.67723 0,-5.06857 6.89436,-7.38314 10.21986,-3.431 2.38765,2.83756 1.40554,7.55939 -1.8984,9.12721 -2.1427,1.01678 -3.12801,1.0132 -5.22241,-0.019 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54493"
+ d="m 918.96847,732.3578 c -1.58499,-0.66881 -3.19406,-2.98032 -3.19406,-4.58843 0,-0.8654 0.56876,-2.06124 1.44883,-3.04621 1.17396,-1.31388 1.826,-1.62152 3.43685,-1.62152 2.30779,0 3.49895,0.83069 4.44848,3.10227 0.57235,1.36923 0.57235,1.88077 0,3.25 -0.37359,0.89375 -1.0168,1.90492 -1.42936,2.24703 -1.03419,0.85762 -3.43998,1.19307 -4.71074,0.65686 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54495"
+ d="m 910.02441,793.58323 c -5.32954,-1.90095 -6.68772,-8.51037 -2.50371,-12.18398 1.88262,-1.65297 4.46954,-2.37556 6.59493,-1.84212 4.75249,1.1928 7.1607,6.91713 4.53378,10.77687 -2.27423,3.34154 -5.23698,4.45768 -8.625,3.24923 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54497"
+ d="m 908.71515,771.57737 c -1.44464,-0.78508 -2.94178,-3.49727 -2.93887,-5.32402 0.003,-1.87809 1.86331,-4.41913 3.83991,-5.24501 2.57333,-1.07521 4.74406,-0.53315 6.67586,1.66705 1.44636,1.64731 1.57165,2.04842 1.35243,4.32982 -0.19436,2.02277 -0.54894,2.78893 -1.81372,3.91901 -1.79389,1.60284 -4.85159,1.88351 -7.11561,0.65315 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54499"
+ d="m 876.52441,808.82215 c -3.94412,-0.84485 -5.98233,-3.68483 -5.6366,-7.85387 0.20757,-2.50308 0.45065,-3.00407 2.29005,-4.71985 1.83667,-1.71322 2.33569,-1.91952 4.64317,-1.91952 4.45536,0 7.62283,3.00145 7.61747,7.21822 -0.006,4.83373 -4.22752,8.27891 -8.91409,7.27502 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54501"
+ d="m 883.17261,788.02814 c -2.34174,-0.99607 -4.07209,-4.20477 -3.58388,-6.6458 0.41851,-2.09255 2.78237,-4.43245 4.87431,-4.8249 2.27903,-0.42755 5.06263,0.83922 6.29856,2.86638 3.11185,5.10405 -2.05249,10.95933 -7.58899,8.60432 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54503"
+ d="m 836.39484,808.33161 c -5.03785,-3.07161 -4.72059,-10.68037 0.5496,-13.18124 6.49865,-3.08381 13.26037,3.87057 9.90417,10.18634 -2.00888,3.78035 -6.87774,5.17523 -10.45377,2.9949 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54505"
+ d="m 851.99874,792.55318 c -3.48063,-1.71778 -4.32353,-6.43755 -1.68613,-9.44138 2.65182,-3.02025 6.52419,-2.88574 9.22193,0.32033 2.34731,2.78962 1.33611,7.52538 -1.93867,9.07936 -2.12401,1.00791 -3.61682,1.01903 -5.59713,0.0417 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54507"
+ d="m 801.3835,793.99737 c -4.6672,-2.30037 -5.47203,-8.86822 -1.53159,-12.49875 3.4678,-3.19507 9.65585,-2.09886 11.62943,2.06014 3.20627,6.75671 -3.50082,13.69015 -10.09784,10.43861 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54509"
+ d="m 774.46398,766.61062 c -0.85825,-0.37353 -2.20021,-1.51792 -2.98215,-2.54309 -1.82214,-2.38896 -2.00677,-6.4234 -0.39358,-8.60087 2.59931,-3.50855 6.66133,-4.58918 10.19397,-2.71194 5.39635,2.86762 5.3814,10.67655 -0.0258,13.44919 -2.48442,1.27395 -4.51986,1.39583 -6.79249,0.40671 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54511"
+ d="m 779.86929,737.15248 c -2.83348,-1.57234 -3.96487,-5.94649 -2.27711,-8.80365 1.67691,-2.83877 5.60657,-3.8604 8.6986,-2.26145 3.95559,2.04551 3.95559,8.93755 0,10.98307 -1.77467,0.91771 -4.84485,0.95694 -6.42149,0.082 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54513"
+ d="m 791.93087,715.2438 c -5.08127,-1.36211 -4.64755,-9.21464 0.56294,-10.19214 3.01401,-0.56543 6.2806,2.17932 6.2806,5.27725 0,3.34003 -3.45692,5.82272 -6.84354,4.91489 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54515"
+ d="m 799.04525,741.42723 c -2.75671,-0.59619 -4.66626,-3.59874 -3.99348,-6.27931 0.96658,-3.85117 5.93144,-5.18713 8.7611,-2.35747 2.7622,2.7622 1.49198,7.45369 -2.28846,8.45231 -0.825,0.21793 -1.94062,0.30094 -2.47916,0.18447 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54517"
+ d="m 795.19651,764.70143 c -1.79535,-1.51767 -2.4221,-2.91231 -2.4221,-5.38965 0,-1.69488 0.31118,-2.39405 1.67053,-3.7534 2.11882,-2.11882 3.93552,-2.58669 6.53117,-1.68201 4.91654,1.71358 5.73493,8.50223 1.33808,11.09951 -2.09677,1.2386 -5.48222,1.10806 -7.11768,-0.27445 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54519"
+ d="m 814.46847,762.3578 c -2.62292,-1.10678 -4.0209,-5.04966 -2.67924,-7.55658 0.69089,-1.29094 3.07953,-2.47231 4.99881,-2.47231 4.01837,0 6.08603,5.78035 3.09328,8.64757 -1.54868,1.48374 -3.80536,2.05963 -5.41285,1.38132 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54521"
+ d="m 820.72335,784.18563 c -3.31341,-2.22971 -3.56726,-6.81565 -0.53302,-9.62916 3.84376,-3.56414 10.08408,-0.7309 10.08408,4.5784 0,1.22872 -0.36993,2.79382 -0.82425,3.48719 -1.8288,2.79111 -5.8358,3.50904 -8.72681,1.56357 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54523"
+ d="m 835.73595,773.86737 c -2.82324,-2.82324 -1.46255,-7.61775 2.36575,-8.33595 3.73582,-0.70084 6.66668,2.25764 5.96133,6.01749 -0.70941,3.78148 -5.52366,5.12188 -8.32708,2.31846 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54525"
+ d="m 862.42569,777.73039 c -1.53081,-0.7396 -2.79761,-3.59699 -2.3991,-5.4114 0.17674,-0.80467 1.02506,-2.05518 1.88515,-2.77891 3.21242,-2.70307 7.86267,-0.42299 7.86267,3.85518 0,3.77869 -3.82731,6.03648 -7.34872,4.33513 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54527"
+ d="m 887.57176,770.57751 c -2.06715,-1.09554 -2.76325,-2.21454 -2.78145,-4.47124 -0.0119,-1.4732 0.32427,-2.32769 1.32765,-3.375 2.56567,-2.67798 7.57743,-1.32151 8.25728,2.23491 0.78171,4.08928 -3.3091,7.46328 -6.80348,5.61133 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54529"
+ d="m 905.73595,753.36737 c -1.91567,-1.91566 -1.97819,-4.34773 -0.16709,-6.50009 1.04586,-1.24294 1.67631,-1.53837 3.28287,-1.53837 2.62638,0 3.85758,0.72206 4.71004,2.7623 0.691,1.65378 0.6248,2.43213 -0.38763,4.55747 -1.20151,2.5223 -5.24399,2.91289 -7.43819,0.71869 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54531"
+ d="m 812.45229,677.64371 c -1.83958,-1.58234 -1.90894,-4.32281 -0.15288,-6.03984 2.89191,-2.82761 7.475,-1.00355 7.475,2.97504 0,3.80256 -4.34842,5.62266 -7.32212,3.0648 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54533"
+ d="m 829.27441,673.82891 c -2.16409,-2.16409 -0.56579,-6 2.5,-6 0.83334,0 1.94445,0.44445 2.5,1 2.16409,2.16409 0.5658,6 -2.5,6 -0.83333,0 -1.94444,-0.44444 -2.5,-1 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54535"
+ d="m 817.50169,688.60164 c -1.3451,-1.34509 -1.47567,-2.05431 -0.73624,-3.99914 1.05358,-2.77114 5.31559,-2.65464 6.48865,0.17737 1.54761,3.73626 -2.88981,6.68438 -5.75241,3.82177 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54537"
+ d="m 804.20244,699.09092 c -2.85387,-1.594 -2.75801,-6.04857 0.16268,-7.55891 4.20326,-2.17359 8.38936,2.99105 5.28429,6.51956 -1.39305,1.58301 -3.68918,2.02115 -5.44697,1.03935 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54539"
+ d="m 897.91648,666.43724 c -1.58451,-0.24799 -3.64207,-2.89483 -3.64207,-4.68515 0,-2.06924 2.39185,-4.42318 4.49441,-4.42318 2.11611,0 3.33982,0.7291 4.28213,2.55132 1.77037,3.42352 -1.16927,7.17761 -5.13447,6.55701 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54541"
+ d="m 885.22695,669.64891 c -2.87622,-1.43395 -3.1445,-5.17793 -0.47012,-6.5609 1.94219,-1.00435 2.62852,-0.95905 4.20015,0.27719 1.39809,1.09974 1.75257,3.21639 0.82799,4.94399 -0.72342,1.35172 -3.12065,2.05633 -4.55802,1.33972 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54543"
+ d="m 898.77162,681.4618 c -2.5971,-3.30168 1.74449,-8.0269 5.04612,-5.49199 3.13918,2.41019 1.78712,6.8591 -2.08453,6.8591 -1.45952,0 -2.12949,-0.30926 -2.96159,-1.36711 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54545"
+ d="m 909.77441,700.9708 c -0.4125,-0.14804 -1.25625,-0.72975 -1.875,-1.29268 -3.038,-2.76395 0.62215,-7.56606 4.6026,-6.03862 1.1965,0.45914 2.34113,2.99149 1.98804,4.3983 -0.51339,2.0455 -2.95576,3.56459 -4.71564,2.933 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54547"
+ d="m 909.71498,720.82556 c -0.44519,-0.26012 -1.08427,-1.13647 -1.42019,-1.94744 -1.26104,-3.04444 1.75261,-6.09923 4.9258,-4.99305 1.8026,0.62839 2.55382,1.75319 2.55382,3.82381 0,2.7305 -3.5741,4.56884 -6.05943,3.11668 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54549"
+ d="m 902.64249,740.20391 c -2.14642,-1.62993 -2.03799,-4.99886 0.21162,-6.57454 3.80803,-2.66725 8.10924,2.55508 4.90956,5.96098 -1.28658,1.3695 -3.73881,1.6633 -5.12118,0.61356 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54551"
+ d="m 888.88889,755.99427 c -0.84106,-0.3384 -2.11448,-2.84567 -2.11448,-4.16325 0,-1.64957 2.19004,-3.50211 4.14012,-3.50211 3.59494,0 5.33532,4.76684 2.54245,6.96371 -1.24425,0.97873 -3.15137,1.27166 -4.56809,0.70165 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54553"
+ d="m 870.02441,764.76363 c -2.58894,-1.44733 -3.07765,-4.65252 -1.02272,-6.70744 1.7709,-1.77091 4.45751,-1.45133 6.13182,0.72939 2.22108,2.89288 -1.93309,7.75359 -5.1091,5.97805 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54555"
+ d="m 848.52441,765.27213 c -2.06379,-1.17129 -2.81884,-3.37906 -1.93941,-5.67082 0.37755,-0.98388 2.75188,-2.2724 4.18731,-2.2724 2.82434,0 4.56726,4.6063 2.6271,6.9431 -1.05849,1.2749 -3.5061,1.77703 -4.875,1.00012 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54557"
+ d="m 827.45229,756.64371 c -1.04929,-0.90257 -1.37788,-1.63343 -1.37788,-3.0648 0,-1.43136 0.32859,-2.16223 1.37788,-3.06479 1.59,-1.36766 2.7976,-1.48213 4.78636,-0.4537 2.42849,1.25582 2.83169,4.51802 0.80849,6.54122 -1.58068,1.58068 -3.78682,1.59727 -5.59485,0.0421 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54559"
+ d="m 811.50169,741.10164 c -2.35381,-2.35381 -0.88717,-6.40805 2.55671,-7.06756 1.19954,-0.22971 1.88089,-0.002 3.125,1.04498 1.91754,1.6135 2.13369,3.9251 0.55472,5.93242 -1.42014,1.80542 -4.47699,1.84961 -6.23643,0.0902 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54561"
+ d="m 804.43878,721.59592 c -2.74174,-1.18553 -3.49079,-4.08152 -1.65827,-6.41119 0.55335,-0.70347 1.66192,-1.42308 2.4635,-1.59914 1.65287,-0.36303 4.22922,0.73727 4.71981,2.01572 1.51994,3.96089 -1.82791,7.59326 -5.52504,5.99461 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54922"
+ d="m 839.56959,752.11809 c -2.68878,-1.24095 -2.71913,-5.03243 -0.0512,-6.4006 0.77356,-0.39671 2.19446,-0.44295 3.01793,-0.0982 0.80086,0.33527 1.85102,1.55912 1.99461,2.3245 0.066,0.35156 0.0818,1.03561 0.0353,1.52011 -0.21347,2.22156 -2.87297,3.6343 -4.99657,2.6542 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54924"
+ d="m 825.63048,741.66412 c -0.74966,-0.2247 -1.59555,-0.85751 -2.06807,-1.54711 -0.59348,-0.86613 -0.69148,-2.54965 -0.20379,-3.50089 0.67356,-1.31378 1.80518,-2.01836 3.24168,-2.01836 1.82408,0 3.30275,1.24501 3.60526,3.03554 0.4211,2.49251 -2.14997,4.75772 -4.57508,4.03082 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54926"
+ d="m 815.88,725.78279 c -3.61574,-1.6426 -2.44983,-6.96973 1.5267,-6.97561 3.23874,-0.005 4.83143,3.8748 2.53392,6.17231 -1.13377,1.13378 -2.66595,1.43688 -4.06062,0.8033 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54928"
+ d="m 814.0686,707.73174 c -1.30908,-0.31062 -2.5556,-1.66161 -2.78479,-3.01817 -0.18574,-1.09944 0.30567,-2.4771 1.15839,-3.24748 0.89775,-0.81107 1.35523,-0.98623 2.57572,-0.98623 2.10933,0 3.60364,1.50271 3.60364,3.62392 0,1.72639 -1.12214,3.19809 -2.75127,3.60831 -0.84956,0.21392 -0.97708,0.21531 -1.80169,0.0196 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54930"
+ d="m 822.14181,713.21561 c -1.8388,-0.55725 -2.67914,-2.7407 -1.71503,-4.45611 1.48241,-2.63759 5.6194,-1.52278 5.6194,1.51428 0,2.01701 -1.99526,3.52038 -3.90437,2.94183 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54932"
+ d="m 823.83647,697.85733 c -1.26536,-0.60133 -1.85867,-1.53399 -1.85325,-2.91325 0.0106,-2.70747 3.59072,-3.99349 5.33765,-1.91737 0.93666,1.11316 1.04392,2.46517 0.29254,3.68773 -0.75475,1.22805 -2.49172,1.75365 -3.77694,1.14289 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54934"
+ d="m 831.58214,684.40317 c -1.28918,-0.5853 -2.02293,-2.14897 -1.65302,-3.5227 0.39051,-1.45024 1.55453,-2.32092 3.10284,-2.32092 3.14822,0 4.17314,4.21651 1.40588,5.78383 -0.86217,0.48832 -1.86556,0.50933 -2.8557,0.0598 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54936"
+ d="m 844.15825,675.0585 c -1.70945,-1.07506 -2.15603,-2.99578 -1.07599,-4.62783 1.08872,-1.64518 3.62981,-1.74322 4.93637,-0.19047 1.20888,1.43668 0.98627,3.40151 -0.51512,4.54668 -0.85147,0.64945 -2.52801,0.78558 -3.34526,0.27162 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54938"
+ d="m 860.38746,671.66952 c -1.37599,-0.32565 -2.41622,-1.71385 -2.39698,-3.19879 0.0322,-2.48722 2.80021,-3.96471 4.84548,-2.5864 1.21526,0.81896 1.75466,2.14338 1.40373,3.44664 -0.45821,1.70164 -2.16511,2.73784 -3.85223,2.33855 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54940"
+ d="m 875.8015,674.17129 c -1.10127,-0.51548 -2.02364,-1.85917 -2.02364,-2.94798 0,-0.55613 0.44065,-1.59174 0.89979,-2.11467 1.50171,-1.71035 4.28642,-1.3632 5.264,0.65622 1.32159,2.73003 -1.44071,5.66999 -4.14015,4.40643 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54942"
+ d="m 880.67018,684.18433 c -1.68142,-1.133 -1.58589,-3.66488 0.17211,-4.56174 1.29123,-0.65874 2.68509,-0.30172 3.51165,0.89946 0.34591,0.5027 0.40168,0.76815 0.34162,1.62621 -0.0628,0.89725 -0.15203,1.10571 -0.71377,1.66745 -0.56174,0.56174 -0.77019,0.65097 -1.66745,0.71376 -0.85784,0.06 -1.12657,0.004 -1.64416,-0.34514 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54944"
+ d="m 889.77418,683.12958 c -1.35266,-0.49486 -2.35602,-2.16242 -2.1366,-3.55094 0.34713,-2.19663 2.79671,-3.47866 4.69819,-2.45889 1.59214,0.85387 2.23559,2.83824 1.43144,4.4145 -0.70173,1.37551 -2.56216,2.1188 -3.99303,1.59533 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54946"
+ d="m 898.78979,696.64995 c -1.20385,-0.63608 -1.85616,-1.68254 -1.85616,-2.97773 0,-1.829 1.43223,-3.26863 3.25182,-3.26863 0.99159,0 1.64613,0.2434 2.28824,0.85093 0.74754,0.70729 1.00068,1.31933 1.00068,2.41943 0,0.54441 -0.11222,1.20464 -0.24938,1.46719 -0.33485,0.64094 -1.14123,1.38482 -1.75087,1.61516 -0.71953,0.27186 -2.06978,0.21837 -2.68433,-0.10635 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54948"
+ d="m 902.94404,713.3825 c -0.83974,-0.14829 -1.26725,-0.40261 -1.91286,-1.13792 -1.71951,-1.95841 -0.62241,-4.91951 2.03065,-5.48073 1.2112,-0.25621 2.8865,0.64949 3.54042,1.91403 0.36135,0.69879 0.36135,2.17383 0,2.87261 -0.37097,0.71737 -1.42137,1.62651 -2.02627,1.75377 -0.86613,0.18222 -1.00538,0.18889 -1.63194,0.0782 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54950"
+ d="m 898.994,729.92049 c -2.90615,-1.03619 -2.95468,-5.15958 -0.0749,-6.36284 2.18164,-0.91155 4.60577,0.75074 4.60577,3.1583 0,1.4277 -0.81681,2.60574 -2.21034,3.18785 -0.7969,0.33288 -1.42113,0.33737 -2.32054,0.0167 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54952"
+ d="m 889.06555,744.00069 c -2.50186,-1.17152 -2.75895,-4.49123 -0.46932,-6.06012 0.50565,-0.34647 0.84404,-0.426 1.81268,-0.426 1.0386,0 1.28702,0.0678 1.94175,0.53033 2.63552,1.86165 1.54337,5.9998 -1.64221,6.22234 -0.65556,0.0458 -1.14567,-0.0337 -1.6429,-0.26655 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54954"
+ d="m 887.36079,734.06426 c -0.89505,-0.47287 -1.4058,-1.36146 -1.41432,-2.46059 -0.009,-1.14976 0.50061,-1.98786 1.5037,-2.47345 0.9545,-0.46206 1.5722,-0.46206 2.52669,0 0.99133,0.4799 1.51749,1.33366 1.51749,2.46233 0,2.15008 -2.22456,3.48027 -4.13356,2.47171 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54956"
+ d="m 874.48299,753.40781 c -2.3824,-1.03194 -2.95423,-3.84431 -1.14875,-5.64979 1.74995,-1.74995 4.40279,-1.29679 5.50675,0.94066 0.36982,0.74953 0.44265,1.10524 0.37354,1.8244 -0.21899,2.27906 -2.6741,3.7759 -4.73154,2.88473 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54958"
+ d="m 876.599,743.3924 c -1.07745,-0.54431 -1.58568,-1.3517 -1.58568,-2.51907 0,-1.18451 0.51172,-1.98024 1.6305,-2.53544 0.65295,-0.32403 0.9885,-0.3881 1.54242,-0.29452 1.57195,0.26558 2.55356,1.48251 2.4384,3.02294 -0.0841,1.12433 -0.6383,1.94282 -1.61635,2.387 -0.95253,0.43258 -1.45771,0.41981 -2.40929,-0.0609 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54960"
+ d="m 857.46008,756.44301 c -0.99458,-0.26744 -1.80661,-0.96962 -2.26416,-1.95787 -1.22277,-2.64107 1.24477,-5.52543 4.09455,-4.78621 2.02924,0.52638 3.16152,2.75497 2.36725,4.6593 -0.41387,0.99228 -1.2766,1.78063 -2.2722,2.07629 -1.01242,0.30066 -0.84164,0.29991 -1.92544,0.008 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54962"
+ d="m 863.36777,748.02803 c -2.36579,-0.54117 -3.02067,-3.74158 -1.0524,-5.1431 0.85562,-0.60926 2.3463,-0.66736 3.1478,-0.12269 0.9219,0.62649 1.41842,1.46961 1.41842,2.40854 0,1.87104 -1.71801,3.26804 -3.51382,2.85725 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54964"
+ d="m 848.18573,746.42233 c -1.00815,-0.49903 -1.50257,-1.23299 -1.59691,-2.37062 -0.23583,-2.84387 2.97379,-4.26345 4.94916,-2.18896 1.09899,1.15414 1.11822,2.66896 0.0489,3.85257 -0.56768,0.62836 -1.53639,1.08022 -2.31508,1.07989 -0.18317,-8e-5 -0.6719,-0.16787 -1.08607,-0.37288 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54966"
+ d="m 835.10426,739.35126 c -1.14521,-0.56686 -1.54507,-1.24807 -1.54507,-2.63218 0,-1.38824 0.45545,-2.16061 1.5735,-2.66837 0.91638,-0.41617 1.59347,-0.41617 2.50985,0 1.11805,0.50776 1.5735,1.28013 1.5735,2.66837 0,1.38824 -0.45545,2.16061 -1.5735,2.66837 -0.9468,0.42998 -1.61578,0.42044 -2.53828,-0.0362 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54968"
+ d="m 825.502,727.47829 c -0.94293,-0.63544 -1.40047,-1.45161 -1.39971,-2.49681 10e-4,-2.00555 1.80234,-3.44899 3.67419,-2.94495 2.07473,0.55866 2.90917,2.80042 1.72073,4.62284 -0.79678,1.22185 -2.7908,1.63057 -3.99521,0.81892 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54970"
+ d="m 829.13977,716.59119 c -0.87305,-0.53928 -1.19525,-1.02605 -1.28289,-1.93813 -0.1542,-1.6048 0.84752,-2.68079 2.49693,-2.68206 0.76175,-5.8e-4 0.93792,0.0768 1.53533,0.67419 0.75579,0.75578 0.96671,1.34175 0.80097,2.2252 -0.30469,1.62416 -2.21098,2.54811 -3.55034,1.7208 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54972"
+ d="m 828.78622,703.84082 c -1.10114,-0.72467 -1.46176,-2.22719 -0.79645,-3.31838 1.13438,-1.86055 3.65669,-1.65879 4.49311,0.35939 0.34381,0.82959 0.34381,0.84134 0,1.67092 -0.44834,1.08178 -1.24978,1.63983 -2.35279,1.63825 -0.51145,-7.3e-4 -1.01047,-0.13076 -1.34387,-0.35018 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54974"
+ d="m 834.44307,692.40071 c -1.0803,-0.28679 -1.85615,-1.34325 -1.85615,-2.52746 0,-1.45221 1.03215,-2.47546 2.49573,-2.47421 1.47236,10e-4 2.51018,1.08103 2.51203,2.61357 0.002,1.51692 -1.66775,2.78202 -3.15161,2.3881 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54976"
+ d="m 842.62905,682.65386 c -0.64515,-0.60178 -0.73625,-0.78699 -0.80439,-1.63518 -0.0636,-0.79172 -0.005,-1.06314 0.34017,-1.57525 0.47879,-0.71037 1.40656,-1.23676 2.18049,-1.23716 0.74393,-3.9e-4 1.6892,0.54423 2.17851,1.25512 0.34236,0.49742 0.40027,0.76529 0.33665,1.55729 -0.0681,0.84819 -0.15925,1.0334 -0.8044,1.63518 -0.66353,0.61894 -0.81431,0.67866 -1.71351,0.67866 -0.89921,0 -1.04999,-0.0597 -1.71352,-0.67866 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54978"
+ d="m 855.56789,678.4347 c -0.84814,-0.31004 -1.59133,-1.4661 -1.59033,-2.47383 0.002,-1.86853 2.05753,-3.07771 3.81473,-2.24386 1.70884,0.8109 1.82719,3.50258 0.19769,4.49614 -0.54509,0.33236 -1.80396,0.44751 -2.42209,0.22155 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54980"
+ d="m 869.07282,678.90426 c -2.1323,-0.63998 -2.47804,-3.59421 -0.55766,-4.76509 1.7976,-1.096 4.17939,0.37679 3.96507,2.45183 -0.17358,1.68069 -1.81108,2.79237 -3.40741,2.31326 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54982"
+ d="m 874.00814,686.34652 c -0.72584,-0.44257 -0.93936,-0.86077 -0.93936,-1.83977 0,-2.00596 2.48678,-2.88028 3.78934,-1.33227 0.53628,0.63734 0.62629,1.95371 0.1774,2.59459 -0.64066,0.91467 -2.0374,1.18108 -3.02738,0.57745 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54984"
+ d="m 877.02648,693.94264 c -0.20534,-0.083 -0.54342,-0.36707 -0.7513,-0.63135 -1.14982,-1.46175 0.60166,-3.50717 2.26613,-2.64644 1.99972,1.03409 0.57295,4.12135 -1.51483,3.27779 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54986"
+ d="m 882.84428,693.66148 c -1.44277,-0.73556 -1.63873,-2.63572 -0.38097,-3.69405 0.77322,-0.65063 2.06036,-0.63303 2.80966,0.0384 0.98347,0.88129 0.99146,2.35836 0.0178,3.29118 -0.64493,0.61789 -1.65442,0.76827 -2.44649,0.36446 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54988"
+ d="m 890.60232,694.64982 c -1.64111,-0.39327 -2.51673,-2.56366 -1.62459,-4.02688 1.38344,-2.26903 5.01869,-1.30543 5.01869,1.33031 0,1.84303 -1.61189,3.12366 -3.3941,2.69657 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54990"
+ d="m 888.18319,703.84674 c -1.60494,-0.66384 -1.75254,-3.21645 -0.23148,-4.00302 1.62342,-0.83951 3.32507,0.1931 3.32507,2.01773 0,1.47547 -1.69554,2.56356 -3.09359,1.98529 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54992"
+ d="m 894.45026,707.32935 c -1.79251,-1.20798 -1.64791,-3.88014 0.25679,-4.74516 0.39819,-0.18084 0.96263,-0.32924 1.25431,-0.32978 1.42695,-0.003 2.85498,1.63669 2.67563,3.0715 -0.24215,1.93724 -2.60626,3.06852 -4.18673,2.00344 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54994"
+ d="m 893.56638,721.29471 c -1.71686,-1.15699 -1.70776,-3.52614 0.0181,-4.69902 0.50185,-0.34106 0.78186,-0.40193 1.58947,-0.34549 3.61015,0.25227 3.41932,5.44286 -0.20011,5.44286 -0.55417,0 -1.00612,-0.12792 -1.40741,-0.39835 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54996"
+ d="m 888.86673,715.17716 c -0.82952,-0.52132 -1.12549,-1.05419 -1.12549,-2.02639 0,-0.74086 0.0827,-0.94487 0.5871,-1.44933 1.50714,-1.50713 3.83232,-0.58339 3.83232,1.5225 0,0.74025 -0.0882,0.9692 -0.58059,1.50645 -0.73988,0.80734 -1.849,0.98997 -2.71334,0.44677 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54998"
+ d="m 884.16151,710.71874 c -0.81186,-0.47286 -1.07503,-1.93705 -0.48337,-2.68924 0.98202,-1.24842 2.99969,-0.81982 3.28438,0.69769 0.13254,0.70651 -0.17707,1.55866 -0.69919,1.92437 -0.42165,0.29534 -1.64307,0.33438 -2.10182,0.0672 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55000"
+ d="m 880.20296,707.72919 c -0.96184,-0.38815 -1.23682,-1.67228 -0.51309,-2.39601 0.98228,-0.98228 2.5713,-0.36714 2.5713,0.99541 0,0.52062 -0.11524,0.75754 -0.5439,1.11823 -0.56876,0.47858 -0.88293,0.53717 -1.51431,0.28237 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55002"
+ d="m 879.64999,715.56434 c -0.2989,-0.12027 -0.74758,-1.00702 -0.74758,-1.4775 0,-0.58026 0.93269,-1.40939 1.58543,-1.40939 1.25694,0 1.93332,1.75402 1.01063,2.62083 -0.39069,0.36704 -1.27954,0.49497 -1.84848,0.26606 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55004"
+ d="m 882.68333,720.2906 c -0.20533,-0.0875 -0.55118,-0.38446 -0.76854,-0.65994 -0.31209,-0.39552 -0.37756,-0.65885 -0.31131,-1.25207 0.0995,-0.8905 0.3628,-1.25017 1.15898,-1.58298 1.19149,-0.49804 2.50391,0.41216 2.50391,1.73652 0,1.26935 -1.43625,2.24711 -2.58304,1.75847 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55006"
+ d="m 885.80967,726.4993 c -2.2365,-0.34431 -2.41309,-3.854 -0.22359,-4.44357 1.79173,-0.48246 3.43643,1.16799 2.87105,2.88109 -0.35859,1.08655 -1.4717,1.74348 -2.64746,1.56248 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55008"
+ d="m 877.72382,735.28748 c -1.14185,-0.3302 -1.92396,-1.89924 -1.48044,-2.97 0.59012,-1.42468 2.19767,-2.00938 3.36614,-1.22434 0.8312,0.55845 1.31096,1.55466 1.15333,2.39488 -0.13938,0.74296 -1.11555,1.81685 -1.65153,1.81685 -0.19622,0 -0.46271,0.0325 -0.5922,0.0722 -0.12949,0.0397 -0.48737,-6e-4 -0.7953,-0.0896 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55010"
+ d="m 877.39981,728.4187 c -0.19446,-0.0804 -0.5221,-0.33392 -0.7281,-0.56332 -1.14242,-1.27214 -0.22743,-3.15712 1.53249,-3.15712 0.77185,0 1.75887,0.98702 1.75887,1.75887 0,0.82449 -0.47306,1.594 -1.15511,1.87898 -0.67285,0.28113 -0.89644,0.29425 -1.40815,0.0826 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55012"
+ d="m 875.97907,722.52778 c -0.6335,-0.54491 -0.67283,-1.53149 -0.086,-2.15618 0.57496,-0.61203 1.6164,-0.61784 2.22184,-0.0124 1.36845,1.36844 -0.66541,3.43343 -2.13588,2.16858 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55014"
+ d="m 866.71738,740.30727 c -2.2613,-1.18565 -1.54021,-4.47384 0.98057,-4.47141 1.27815,10e-4 2.36667,1.11165 2.36496,2.41254 -0.002,1.59589 -1.94642,2.79245 -3.34553,2.05887 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55016"
+ d="m 868.5433,733.28961 c -1.27905,-1.27904 -0.37298,-3.21496 1.48011,-3.16243 0.50974,0.0145 0.77715,0.15863 1.24889,0.67338 0.53488,0.58367 0.58958,0.73466 0.50218,1.38641 -0.135,1.00672 -0.91561,1.70368 -1.90815,1.70368 -0.58539,0 -0.83571,-0.11372 -1.32303,-0.60104 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55018"
+ d="m 870.3148,728.16022 c -1.50671,-0.65738 -1.02148,-2.94068 0.6218,-2.926 0.94636,0.008 1.60185,0.67805 1.60185,1.63632 0,0.42629 -0.71325,1.36326 -1.03776,1.36326 -0.0939,0 -0.27671,0.0369 -0.40619,0.0819 -0.12949,0.0451 -0.48035,-0.0249 -0.7797,-0.15552 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55020"
+ d="m 854.59561,740.81374 c -2.22131,-1.04951 -1.4936,-4.44953 0.95192,-4.44755 1.93345,0.002 3.10961,1.90637 2.14945,3.48107 -0.69995,1.14796 -1.91551,1.52676 -3.10137,0.96648 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55022"
+ d="m 859.1589,735.49955 c -0.71253,-0.44599 -0.93936,-0.87199 -0.93936,-1.7642 0,-1.24289 1.15659,-2.09437 2.39622,-1.7641 1.43091,0.38123 1.9066,2.11758 0.86538,3.1588 -0.7044,0.7044 -1.56773,0.84177 -2.32224,0.3695 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55024"
+ d="m 862.03595,730.34155 c -0.86261,-1.02514 -0.34694,-2.36424 0.99255,-2.57746 0.56569,-0.09 0.72794,-0.031 1.19324,0.43431 1.06746,1.06746 0.44766,2.68705 -1.0283,2.68705 -0.56446,0 -0.78837,-0.10521 -1.15749,-0.5439 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55026"
+ d="m 854.41884,730.19181 c -1.09694,-0.46078 -1.38863,-1.79878 -0.57051,-2.61691 0.99478,-0.99477 2.67415,-0.30344 2.67415,1.10084 0,1.04483 -1.18772,1.90081 -2.10364,1.51607 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55028"
+ d="m 849.63087,733.46308 c -1.58552,-0.69172 -1.73632,-2.78138 -0.25596,-3.54691 0.86475,-0.44718 1.55619,-0.34411 2.23318,0.33288 0.50522,0.50522 0.60104,0.7277 0.60104,1.39552 0,0.63273 -0.10442,0.90625 -0.51287,1.3435 -0.28207,0.30197 -0.63354,0.54903 -0.78103,0.54903 -0.1475,0 -0.37412,0.0369 -0.5036,0.0819 -0.12949,0.0451 -0.48083,-0.0251 -0.78076,-0.15596 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55030"
+ d="m 843.48388,736.71409 c -1.45784,-0.43687 -2.14315,-2.19037 -1.3588,-3.47675 1.31291,-2.15323 4.42439,-1.3404 4.42653,1.15637 8.7e-4,1.00652 -0.44148,1.72081 -1.33292,2.15235 -0.78354,0.3793 -0.96965,0.39733 -1.73481,0.16803 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55032"
+ d="m 834.57513,728.28575 c -0.65245,-0.12562 -1.59082,-1.14111 -1.72746,-1.86943 -0.16973,-0.90477 0.003,-1.44867 0.70347,-2.21283 0.56697,-0.61868 0.65879,-0.65427 1.68743,-0.65427 1.02863,0 1.12045,0.0356 1.68742,0.65427 0.32978,0.35985 0.65062,0.85756 0.71298,1.10602 0.2968,1.18254 -0.50877,2.59826 -1.66047,2.91813 -0.67,0.18609 -0.72649,0.18843 -1.40337,0.0581 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55034"
+ d="m 835.94931,718.84412 c -0.68711,-0.27415 -1.05076,-0.68691 -1.24689,-1.41531 -0.36275,-1.34716 0.54752,-2.45326 2.01893,-2.45326 1.12173,0 1.87597,0.75424 1.87597,1.87597 0,0.95766 -0.40371,1.6247 -1.1795,1.94884 -0.66566,0.27813 -0.86613,0.2841 -1.46851,0.0438 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55036"
+ d="m 841.16059,727.53635 c -0.61218,-0.25056 -1.011,-0.85183 -1.1023,-1.66184 -0.0793,-0.70367 -0.0271,-0.84928 0.51709,-1.44315 0.4964,-0.54166 0.73318,-0.66386 1.31594,-0.67914 0.90245,-0.0237 1.60614,0.43057 1.95297,1.26065 0.68447,1.63818 -0.99298,3.21548 -2.6837,2.52348 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55038"
+ d="m 846.74851,726.21934 c -0.46339,-0.25684 -0.88727,-0.90899 -0.89708,-1.38018 -0.0197,-0.94783 1.03488,-1.84192 1.9385,-1.64345 0.58953,0.12948 1.41399,1.00864 1.41399,1.5078 0,0.57688 -0.40515,1.24979 -0.90952,1.51061 -0.59762,0.30905 -0.9953,0.31039 -1.54589,0.005 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55040"
+ d="m 841.08576,719.46764 c -0.75652,-0.63657 -0.76799,-1.64354 -0.0272,-2.38437 0.65876,-0.65876 1.38465,-0.67897 2.12135,-0.0591 0.45286,0.38106 0.5439,0.58554 0.5439,1.22172 0,0.63619 -0.091,0.84067 -0.5439,1.22173 -0.30636,0.25779 -0.76364,0.45765 -1.04709,0.45765 -0.28345,0 -0.74073,-0.19986 -1.0471,-0.45765 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55042"
+ d="m 839.21703,711.58905 c -0.68074,-0.18206 -1.14119,-0.797 -1.14611,-1.53068 -0.005,-0.80013 0.27371,-1.25633 0.93842,-1.53406 1.172,-0.4897 2.31999,0.25328 2.31999,1.50149 0,1.17576 -0.9453,1.87535 -2.1123,1.56325 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55044"
+ d="m 833.71829,708.01054 c -0.50047,-0.50046 -0.60104,-0.73053 -0.60104,-1.37488 0,-0.88361 0.32693,-1.44535 1.06261,-1.82578 0.66399,-0.34337 1.32648,-0.33482 1.93555,0.025 0.98386,0.58118 1.31978,1.71582 0.80354,2.71412 -0.38043,0.73568 -0.94217,1.06261 -1.82578,1.06261 -0.64435,0 -0.87442,-0.10057 -1.37488,-0.60104 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55046"
+ d="m 836.88709,698.2858 c -0.30865,-0.13889 -0.69735,-0.46036 -0.86379,-0.71438 -0.35136,-0.53623 -0.39615,-1.62291 -0.0904,-2.19413 0.26799,-0.50075 1.21024,-1.08309 1.75387,-1.08396 0.65355,-10e-4 1.51686,0.48799 1.84645,1.04594 0.48973,0.82906 0.39235,1.68872 -0.27294,2.40927 -0.67148,0.72727 -1.52266,0.91997 -2.37314,0.53726 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55048"
+ d="m 839.55192,702.53047 c -0.57607,-0.57607 -0.63447,-0.71683 -0.54099,-1.304 0.13571,-0.85244 0.81437,-1.45372 1.6408,-1.45372 0.84961,0 1.28873,0.27299 1.58685,0.9865 0.21459,0.51359 0.21646,0.69089 0.0124,1.17901 -0.30984,0.74124 -0.64624,1.00965 -1.4235,1.13578 -0.5541,0.0899 -0.70742,0.0246 -1.27558,-0.54357 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55050"
+ d="m 844.31229,695.27241 c -0.66962,-0.29128 -0.942,-0.74322 -0.942,-1.56299 0,-1.27176 1.30748,-2.05336 2.44816,-1.46349 0.6508,0.33654 0.9106,0.76764 0.9106,1.51101 0,0.72959 -0.43078,1.35033 -1.0987,1.58317 -0.66262,0.23099 -0.62724,0.2328 -1.31806,-0.0677 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55052"
+ d="m 843.45868,689.88138 c -0.77705,-0.32141 -1.23743,-1.05192 -1.23743,-1.96351 0,-0.72992 0.0848,-0.95108 0.53909,-1.40534 1.34269,-1.34268 3.61516,-0.45248 3.61516,1.41618 0,1.47347 -1.55638,2.51539 -2.91682,1.95267 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55054"
+ d="m 850.9568,689.55789 c -0.95043,-0.8492 -0.69739,-2.30735 0.48622,-2.8019 1.7625,-0.73642 3.19392,1.42375 1.84037,2.77731 -0.69586,0.69586 -1.56503,0.70505 -2.32659,0.0246 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55056"
+ d="m 852.91624,684.62189 c -0.96069,-0.35119 -1.56483,-1.6232 -1.23935,-2.60941 0.66473,-2.01416 3.49484,-1.99906 4.05278,0.0216 0.45265,1.63936 -1.2141,3.17243 -2.81343,2.58779 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55058"
+ d="m 860.055,687.64882 c -1.02157,-0.50397 -1.25825,-1.8034 -0.49392,-2.71175 0.88436,-1.05101 2.66179,-0.58665 3.00614,0.78536 0.1781,0.70961 -0.33516,1.64242 -1.07344,1.95089 -0.74719,0.31219 -0.75662,0.31203 -1.43878,-0.0245 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55060"
+ d="m 863.40154,683.16454 c -0.72146,-0.4399 -0.93936,-0.8607 -0.93936,-1.814 0,-0.87787 0.32823,-1.43997 1.06261,-1.81973 1.47819,-0.7644 3.18003,0.22949 3.18003,1.85716 0,1.69253 -1.8284,2.67587 -3.30328,1.77657 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55062"
+ d="m 868.63576,688.64942 c -0.85793,-0.85794 -0.67892,-2.2127 0.36362,-2.75181 0.82308,-0.42564 1.38601,-0.33409 2.05414,0.33405 0.66814,0.66813 0.75968,1.23106 0.33405,2.05414 -0.53911,1.04253 -1.89388,1.22155 -2.75181,0.36362 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55064"
+ d="m 877.03822,700.04595 c -0.91128,-0.91128 -0.23764,-2.46523 1.06869,-2.46523 0.50607,0 0.76447,0.11617 1.08357,0.48715 0.48354,0.56215 0.52401,0.9891 0.16041,1.69224 -0.444,0.8586 -1.59736,1.00115 -2.31267,0.28584 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55066"
+ d="m 881.89402,701.20056 c -0.4129,-0.4129 -0.51674,-0.67141 -0.51674,-1.28649 0,-0.97318 0.36071,-1.49052 1.2184,-1.74749 1.23763,-0.3708 2.31714,0.46912 2.31714,1.80289 0,0.72017 -0.26217,1.16116 -0.88035,1.48083 -0.82078,0.42444 -1.54936,0.33936 -2.13845,-0.24974 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ </g>
+ <path
+ style="color:#000000;fill:#59509f;fill-opacity:0.99215686;fill-rule:nonzero;stroke:none;stroke-width:1.19700003;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -530.45039,253.75092 c 5.30707,-1.91678 11.21951,-1.07383 15.77945,2.24972 6.38683,4.67105 8.49739,13.29908 5.38115,20.57227 12.14398,11.00811 25.39824,20.45943 39.88974,28.11784 3.68734,-6.41948 11.5721,-9.83951 18.78293,-8.16326 9.02961,2.10252 14.64463,11.12745 12.54091,20.15677 -0.0896,0.35677 -0.19093,0.71049 -0.30378,1.0606 15.57369,5.04379 31.71723,8.11936 48.05451,9.15505 -1.01104,-8.7225 4.95288,-16.72102 13.60117,-18.24127 9.02229,-1.57386 17.61208,4.46455 19.18548,13.48693 0.23908,1.41366 0.29382,2.85238 0.16284,4.28012 16.62401,-1.6842 32.96491,-5.48438 48.6262,-11.30833 -0.33933,-0.41747 -0.65852,-0.8509 -0.95541,-1.29955 -4.91386,-7.59756 -2.73772,-17.74012 4.86036,-22.65318 7.59692,-4.91331 17.73846,-2.73794 22.65196,4.85885 1.08924,1.69488 1.85648,3.57615 2.26323,5.54937 9.13587,-5.12543 17.84673,-10.97404 26.04911,-17.48978 4.92512,-4.05567 9.64954,-8.34908 14.15644,-12.86493 -0.7586,-0.35369 -1.48864,-0.7657 -2.18351,-1.23232 -7.39953,-5.01207 -9.3356,-15.0733 -4.32456,-22.47351 5.01174,-7.40089 15.0742,-9.33762 22.47503,-4.32579 1.78793,1.21147 3.31531,2.76856 4.49212,4.5795 9.86282,-13.43645 17.9739,-28.07453 24.13738,-43.56082 -0.68657,-0.0382 -1.36996,-0.12057 -2.04592,-0.24672 -8.66506,-1.70098 -14.31034,-10.10459 -12.60879,-18.76953 1.70158,-8.66385 10.10398,-14.30823 18.76801,-12.60757 1.88133,0.3763 3.67957,1.08815 5.30871,2.1015 3.50739,-15.83095 5.03944,-32.03554 4.56115,-48.24332 -0.2772,0.0764 -0.55644,0.14512 -0.83739,0.20623 -8.53607,1.79747 -16.91306,-3.66524 -18.71053,-12.20131 -1.79747,-8.53607 3.66525,-16.91306 12.20133,-18.71053 1.41178,-0.29142 2.85682,-0.3882 4.29486,-0.28765 -2.93469,-15.4206 -7.70875,-30.43344 -14.21986,-44.71674 -7.05457,4.60498 -16.49076,2.77874 -21.31784,-4.12577 -4.93035,-7.06855 -3.19668,-16.795623 3.87217,-21.725553 0.83185,-0.57788 1.71803,-1.07333 2.64593,-1.47943 -3.46207,-5.27744 -7.17669,-10.3848 -11.13091,-15.30428 -5.68959,-6.93614 -11.84801,-13.47404 -18.43199,-19.56769 -4.82679,6.34987 -13.70035,7.96905 -20.45875,3.73318 -7.21117,-4.52518 -9.38873,-14.03929 -4.86378,-21.2506 0.40059,-0.6274 0.84611,-1.22495 1.33305,-1.78798 -12.41641,-8.42207 -25.75757,-15.39266 -39.76209,-20.7752 -1.80346,4.47435 -5.64318,7.8125 -10.32487,8.97615 -8.06632,1.99539 -16.22285,-2.92647 -18.21758,-10.99296 -0.54302,-2.22521 -0.57078,-4.54503 -0.0812,-6.7826 -14.85942,-3.19105 -30.03921,-4.64532 -45.2342,-4.3336 1.86804,8.01264 -3.04689,16.03973 -11.03281,18.01887 -8.06632,1.99539 -16.22284,-2.92647 -18.21758,-10.99296 -0.3548,-1.44099 -0.49445,-2.92656 -0.4144,-4.40843 -15.14883,2.61374 -29.93813,6.99823 -44.06378,13.06328 0.62478,0.58648 1.19766,1.22589 1.71226,1.91109 4.92654,6.56452 3.59952,15.87973 -2.96416,20.80739 -6.56446,4.92784 -15.88078,3.60131 -20.80891,-2.96294 -1.51864,-2.0258 -2.49452,-4.40601 -2.83521,-6.91481 -7.42416,4.43358 -14.54721,9.35296 -21.32258,14.72598 -6.17316,5.08504 -12.02978,10.5426 -17.53702,16.34224 2.42068,0.0763 4.78493,0.75011 6.88208,1.96152 7.01434,4.06792 9.4034,13.05153 5.33636,20.06639 -4.06754,7.0157 -13.05241,9.40546 -20.06792,5.33758 -3.72641,-2.16811 -6.31166,-5.86438 -7.07005,-10.10839 -37.96812,49.553573 -50.09792,114.214013 -32.67095,174.159273 2.96174,1.46395 5.43916,3.74997 7.136,6.58472 2.83741,4.75705 3.21007,10.58949 1.00115,15.66897 6.89206,16.19628 15.93154,31.39185 26.87526,45.1779 z m -8.50817,-35.53011 c -4.90963,-6.08526 -3.95644,-14.99839 2.12897,-19.90783 6.08593,-4.90878 14.99893,-3.95437 19.90753,2.13171 4.9083,6.08535 3.95462,14.99735 -2.1302,19.90631 -6.08534,4.90831 -14.99735,3.95462 -19.9063,-2.13019 z m 47.38703,49.78827 c -3.53469,-4.36911 -4.11121,-10.42946 -1.46335,-15.38646 3.63858,-6.81387 12.11212,-9.3877 18.92576,-5.74871 6.81401,3.63914 9.38724,12.11345 5.74718,18.92697 -3.63955,6.81267 -12.11262,9.38517 -18.92545,5.74596 -1.65027,-0.88088 -3.10705,-2.08387 -4.28414,-3.53776 z M -563.6561,152.82223 c -1.07227,-1.41607 -1.87186,-3.01919 -2.35812,-4.72756 -2.1667,-7.61133 2.2465,-15.53812 9.85758,-17.70572 7.61218,-2.16738 15.54002,2.24679 17.70694,9.8591 2.16669,7.61134 -2.24651,15.53811 -9.85758,17.70571 -5.68495,1.61871 -11.7805,-0.41919 -15.34882,-5.13153 z m 64.61074,65.20147 c -3.93971,-4.50583 -3.82535,-11.26356 0.26457,-15.63352 4.39865,-4.69931 11.77423,-4.94239 16.47274,-0.5429 4.69758,4.39828 4.94076,11.77174 0.54319,16.46999 -4.39809,4.69894 -11.77275,4.94269 -16.47152,0.54442 -0.28344,-0.26569 -0.55347,-0.54533 -0.80898,-0.83799 z m 69.83284,77.01637 c -2.26549,-2.79125 -3.3539,-6.35556 -3.03413,-9.93624 0.67978,-7.60057 7.39243,-13.21092 14.99298,-12.53096 7.60064,0.67902 13.21168,7.3911 12.53247,14.99174 -0.67977,7.60057 -7.3924,13.21092 -14.99296,12.53097 -3.71917,-0.33246 -7.14545,-2.1561 -9.49836,-5.05551 z m -97.4386,-127.52963 c -0.67676,-0.82462 -1.23918,-1.73678 -1.67097,-2.71227 -2.63734,-5.95578 0.0519,-12.92196 6.00705,-15.5607 5.9566,-2.63915 12.92481,0.0505 15.56345,6.00733 2.63797,5.95653 -0.0521,12.92375 -6.00856,15.56193 -4.84509,2.14613 -10.52669,0.7979 -13.89097,-3.29629 z m 71.94488,85.67888 c -2.77528,-3.16589 -3.60105,-7.59424 -2.15333,-11.54761 2.18621,-5.97027 8.79826,-9.03796 14.76861,-6.85194 5.97027,2.18621 9.03795,8.79826 6.85193,14.7686 -2.18622,5.97027 -8.79827,9.03795 -14.76861,6.85193 -1.8113,-0.66309 -3.42696,-1.77065 -4.6986,-3.22098 z m -12.33306,-40.45213 c -2.57194,-3.32724 -2.67668,-7.94179 -0.25842,-11.38235 3.04658,-4.33415 9.02988,-5.37787 13.36396,-2.3312 4.33416,3.04658 5.37788,9.02988 2.33119,13.36397 -3.04657,4.33415 -9.02987,5.37788 -13.36396,2.33119 -0.78631,-0.55295 -1.48504,-1.22094 -2.07277,-1.98161 z m -27.65294,-37.31354 c -0.36817,-0.41324 -0.70042,-0.85714 -0.99272,-1.32716 -2.83245,-4.55291 -1.43812,-10.53991 3.11446,-13.37291 4.55291,-2.8337 10.54097,-1.43984 13.37443,3.11324 2.83427,4.55357 1.4396,10.54266 -3.11476,13.37566 -4.01255,2.49607 -9.23942,1.74089 -12.38137,-1.78886 z m -65.97761,-92.83373 c -2.27367,-3.01164 -3.28423,-6.79076 -2.81723,-10.53529 0.99148,-7.94898 8.23869,-13.58948 16.1878,-12.59894 7.95016,0.99084 13.59159,8.23924 12.60017,16.18932 -0.99222,7.94892 -8.24,13.58875 -16.18902,12.59743 -3.89047,-0.48485 -7.41901,-2.52388 -9.78172,-5.65252 z m 28.3976,27.31775 c -1.70791,-2.0849 -2.66015,-4.68633 -2.70197,-7.38114 -0.10281,-6.59343 5.15873,-12.02187 11.75215,-12.12494 6.59449,-0.1035 12.02394,5.15915 12.12619,11.75367 0.10196,6.59331 -5.16008,12.02103 -11.75339,12.12343 -3.64341,0.0571 -7.1135,-1.55251 -9.42298,-4.37102 z m 105.4186,126.43488 c -1.71251,-2.20912 -2.36234,-5.06163 -1.77573,-7.79454 1.09763,-5.1172 6.13572,-8.37572 11.25294,-7.27815 5.1172,1.09764 8.37572,6.13573 7.27815,11.25294 -1.09764,5.1172 -6.13573,8.37573 -11.25294,7.27815 -2.18446,-0.46815 -4.13328,-1.69304 -5.50242,-3.4584 z m 26.08452,31.74822 c -1.69544,-1.92738 -2.68901,-4.37164 -2.81913,-6.93531 -0.3169,-6.27354 4.51213,-11.61605 10.78569,-11.93253 6.27354,-0.31692 11.61605,4.51213 11.93253,10.78568 0.31623,6.27251 -4.51172,11.61401 -10.78417,11.9313 -3.46648,0.17503 -6.82314,-1.24246 -9.11492,-3.84914 z m -67.24634,-90.15409 c -2.83099,-3.38669 -2.38052,-8.4271 1.00612,-11.25814 3.38727,-2.83145 8.42867,-2.38026 11.25936,1.00764 2.83098,3.38669 2.38052,8.4271 -1.00612,11.25814 -3.38727,2.83146 -8.42868,2.38026 -11.25936,-1.00764 z m -37.86533,-48.83185 c -1.25019,-1.40839 -2.06938,-3.14633 -2.36017,-5.00696 -0.83902,-5.3628 2.82813,-10.3904 8.1909,-11.22959 5.36375,-0.83972 10.3924,2.82847 11.23083,8.19242 0.83806,5.36268 -2.82955,10.38947 -8.19214,11.22808 -3.3057,0.5176 -6.64765,-0.6821 -8.86942,-3.18395 z m 65.1051,76.46878 c -2.03769,-2.43146 -2.42228,-5.84637 -0.97646,-8.67017 1.98735,-3.8811 6.74444,-5.41661 10.62583,-3.4298 3.88111,1.98735 5.41662,6.74444 3.4298,10.62584 -1.98734,3.8811 -6.74443,5.41661 -10.62583,3.4298 -0.94036,-0.48122 -1.77461,-1.14624 -2.45334,-1.95567 z m 78.75091,90.02543 c -1.06755,-1.31226 -1.88223,-2.81131 -2.40202,-4.42113 -2.31608,-7.17397 1.62206,-14.86716 8.79606,-17.18317 7.17396,-2.31608 14.86716,1.62206 17.18317,8.79606 2.31607,7.17397 -1.62206,14.86716 -8.79606,17.18317 -5.3578,1.72962 -11.22787,-0.008 -14.78115,-4.37493 z m -120.5757,-154.33307 c -0.61891,-0.78907 -1.08572,-1.68633 -1.37664,-2.64605 -1.29818,-4.27511 1.11486,-8.7932 5.38985,-10.09177 4.27511,-1.29818 8.7932,1.11487 10.09177,5.38985 1.29886,4.27595 -1.11514,8.7951 -5.39137,10.093 -3.19269,0.96938 -6.65302,-0.12072 -8.71361,-2.74503 z m 36.69707,35.65901 c -1.85944,-2.51833 -1.68691,-5.9981 0.41254,-8.32013 2.43633,-2.69573 6.59668,-2.90596 9.29235,-0.46958 2.69572,2.43633 2.90596,6.59668 0.46958,9.29235 -2.43633,2.69572 -6.59668,2.90596 -9.29235,0.46958 -0.32571,-0.29387 -0.6212,-0.61957 -0.88214,-0.9722 z m 40.59425,43.29306 c -1.30606,-1.55331 -1.95539,-3.55445 -1.81008,-5.57867 0.30849,-4.29736 4.04251,-7.53082 8.33983,-7.22182 4.29735,0.30849 7.53081,4.04251 7.22181,8.33983 -0.30848,4.29735 -4.04251,7.53081 -8.33982,7.22181 -2.10294,-0.1512 -4.05512,-1.14722 -5.41174,-2.76115 z m -56.25794,-71.026 c -0.39029,-0.45835 -0.7166,-0.96752 -0.97002,-1.5136 -1.54849,-3.33611 -0.0993,-7.29587 3.23682,-8.84432 3.33612,-1.54849 7.29588,-0.0993 8.84433,3.23682 1.54849,3.33612 0.0993,7.29588 -3.23682,8.84433 -2.71385,1.25967 -5.93466,0.55483 -7.87431,-1.72323 z m 41.04395,47.15107 c -1.27668,-1.72409 -1.62029,-3.96715 -0.91833,-5.99438 1.17551,-3.39117 4.87729,-5.18757 8.26864,-4.01262 3.39112,1.1749 5.18814,4.876 4.01413,8.26743 -1.17437,3.3924 -4.8767,5.19024 -8.26894,4.01535 -1.23759,-0.42932 -2.31658,-1.22258 -3.0955,-2.27578 z m 39.35607,45.98568 c -0.90641,-1.16522 -1.52444,-2.52828 -1.80359,-3.9779 -0.97747,-5.07774 2.34693,-9.98631 7.42483,-10.96295 5.07774,-0.97747 9.98631,2.34694 10.96294,7.42483 0.97748,5.07774 -2.34692,9.98631 -7.42483,10.96296 -3.45843,0.66533 -6.99764,-0.66659 -9.15935,-3.44694 z m -46.30495,-68.19417 c -1.48557,-1.85277 -1.59011,-4.45748 -0.25846,-6.42379 1.67696,-2.47747 5.04511,-3.12583 7.52196,-1.44794 2.4761,1.67728 3.1238,5.04419 1.44672,7.52042 -1.67696,2.47748 -5.04511,3.12585 -7.52196,1.44796 -0.44873,-0.30402 -0.84928,-0.67369 -1.18826,-1.09665 z m -16.32816,-21.21208 c -0.0772,-0.10369 -0.15143,-0.20955 -0.22147,-0.3182 -1.64387,-2.54174 -0.91639,-5.93481 1.62498,-7.57923 2.54238,-1.64442 5.93649,-0.91617 7.58048,1.6265 1.64259,2.54176 0.91465,5.93376 -1.62622,7.57773 -2.41552,1.56258 -5.62804,0.992 -7.35773,-1.30683 z m -54.16526,-71.35903 c -2.17661,-2.45916 -2.99942,-5.83404 -2.19889,-9.01905 1.33996,-5.32809 6.7451,-8.56144 12.07339,-7.22229 5.3281,1.33929 8.56209,6.74381 7.22381,12.07217 -1.33871,5.32934 -6.74444,8.5642 -12.07368,7.22504 -1.94454,-0.48902 -3.69595,-1.55419 -5.02463,-3.05587 z m 16.35906,20.02783 c -1.31354,-1.67788 -1.92134,-3.8017 -1.69434,-5.92046 0.4817,-4.49635 4.51667,-7.75123 9.01313,-7.2706 4.49751,0.48105 7.75334,4.5172 7.27183,9.01466 -0.4817,4.49635 -4.51667,7.75123 -9.01314,7.2706 -2.20092,-0.23526 -4.21288,-1.35143 -5.57748,-3.0942 z m 16.29866,15.1406 c -0.98507,-1.16016 -1.54849,-2.61958 -1.59866,-4.1407 -0.12299,-3.72141 2.79448,-6.83774 6.5159,-6.96004 3.72141,-0.12299 6.83773,2.79448 6.96003,6.51591 0.1223,3.72035 -2.79405,6.83566 -6.51438,6.95879 -2.05624,0.0685 -4.0312,-0.80572 -5.36289,-2.37396 z m -49.39658,-62.66641 c -2.79591,-3.42316 -3.50032,-8.09946 -1.83689,-12.19435 2.51228,-6.18373 9.5615,-9.160363 15.74552,-6.648773 6.18373,2.512293 9.16036,9.561513 6.64877,15.745523 -2.51229,6.18372 -9.5615,9.16035 -15.74551,6.64877 -1.87612,-0.76194 -3.53074,-1.98304 -4.81189,-3.55117 z m 168.77519,206.7959 c -0.67203,-0.76205 -1.23758,-1.61174 -1.68118,-2.52584 -2.70933,-5.58219 -0.38073,-12.3038 5.20122,-15.01358 5.58291,-2.70995 12.30556,-0.38049 15.01481,5.20275 2.70933,5.58219 0.38072,12.30379 -5.20123,15.01358 -4.54124,2.20425 -9.99505,1.10933 -13.33362,-2.67691 z m -58.62645,-73.8004 c -0.98818,-1.2298 -1.38346,-2.83291 -1.07986,-4.38103 0.56956,-2.89928 3.38158,-4.78789 6.28086,-4.21839 2.89931,0.56886 4.78858,3.38029 4.21989,6.27963 -0.56955,2.89928 -3.38157,4.78789 -6.28085,4.21838 -1.23776,-0.24291 -2.3499,-0.91534 -3.14004,-1.89859 z m 14.62863,17.17031 c -0.73333,-0.98761 -1.16752,-2.16508 -1.25094,-3.39235 -0.24001,-3.53734 2.43248,-6.59971 5.96976,-6.84067 3.53748,-0.24091 6.60062,2.43111 6.8422,5.96853 0.24161,3.5385 -2.43151,6.60266 -5.97006,6.84344 -2.18117,0.14822 -4.28788,-0.82354 -5.59096,-2.57895 z m -38.43847,-49.73211 c -1.63192,-1.88368 -1.42771,-4.73367 0.45615,-6.36537 1.88436,-1.63106 4.7342,-1.42561 6.36509,0.4589 1.63059,1.88378 1.42585,4.73262 -0.45739,6.36385 -1.88379,1.63059 -4.73263,1.42585 -6.36385,-0.45738 z m -22.211,-27.61824 c -0.52473,-0.70018 -0.87636,-1.51457 -1.02629,-2.3766 -0.52593,-3.01878 1.49471,-5.89241 4.51344,-6.41872 3.01878,-0.52592 5.89241,1.49472 6.41871,4.51344 0.52593,3.01878 -1.49471,5.89241 -4.51344,6.41872 -2.05631,0.35868 -4.13995,-0.467 -5.39242,-2.13684 z m 37.85857,42.9503 c -1.174,-1.35217 -1.42497,-3.27559 -0.63716,-4.88369 1.08347,-2.21064 3.75382,-3.12444 5.96451,-2.04102 2.21051,1.0829 3.12491,3.7525 2.04254,5.96328 -1.08303,2.21198 -3.75464,3.12652 -5.96602,2.04225 -0.53557,-0.26271 -1.01295,-0.63025 -1.40387,-1.08082 z m -24.24273,-35.88883 c -0.35774,-0.43871 -0.63015,-0.94055 -0.80425,-1.47919 -0.77529,-2.40111 0.54324,-4.97601 2.94462,-5.75045 2.40031,-0.77462 4.97413,0.54296 5.74923,2.94311 0.77462,2.40031 -0.54296,4.97413 -2.94311,5.74923 -1.7927,0.57923 -3.75712,-0.002 -4.94649,-1.4627 z m 69.58314,85.93034 c -0.61562,-0.73021 -1.09017,-1.56845 -1.39942,-2.47208 -1.37896,-4.02677 0.76781,-8.40893 4.79474,-9.78739 4.02667,-1.37786 8.40791,0.76936 9.78587,4.79598 1.37896,4.02676 -0.76782,8.40892 -4.79475,9.78738 -3.00723,1.029 -6.33771,0.10612 -8.38644,-2.32389 z m -48.51672,-66.16408 c -1.07353,-1.40312 -1.01022,-3.36824 0.15147,-4.69929 1.34894,-1.54572 3.6956,-1.70505 5.2411,-0.35586 1.54572,1.34895 1.70505,3.6956 0.35585,5.2411 -1.34894,1.54572 -3.6956,1.70506 -5.2411,0.35586 -0.18678,-0.16321 -0.35671,-0.34474 -0.50733,-0.5418 z m -9.11547,-15.49974 c -0.22471,-0.25452 -0.41401,-0.53824 -0.56254,-0.84357 -0.90741,-1.86826 -0.12802,-4.11837 1.74058,-5.02509 1.86826,-0.90742 4.11837,-0.12803 5.0251,1.74057 0.9062,1.86821 0.12638,4.11732 -1.74181,5.02357 -1.51944,0.73746 -3.34416,0.3712 -4.46133,-0.89548 z m 32.45672,39.53878 c -0.75273,-0.86369 -1.13927,-1.98672 -1.07754,-3.13073 0.132,-2.42823 2.20721,-4.28984 4.63546,-4.15833 2.42934,0.13133 4.29192,2.2077 4.15956,4.63697 -0.132,2.42823 -2.20721,4.28984 -4.63546,4.15834 -1.18871,-0.0649 -2.3005,-0.60823 -3.08202,-1.50625 z m -8.82448,-13.32547 c -0.73722,-0.96073 -0.95288,-2.22334 -0.57645,-3.37434 0.62952,-1.92636 2.70152,-2.9776 4.62784,-2.34795 1.92637,0.62951 2.97762,2.70152 2.34797,4.62785 -0.63016,1.92639 -2.70283,2.97701 -4.62908,2.34643 -0.70274,-0.22947 -1.31978,-0.66586 -1.77028,-1.25199 z m 22.66784,25.56845 c -0.52265,-0.64873 -0.88455,-1.41182 -1.05618,-2.22702 -0.60115,-2.85657 1.22737,-5.65956 4.08398,-6.2605 2.8558,-0.60146 5.65859,1.2256 6.2608,4.08125 0.60215,2.8567 -1.22593,5.66054 -4.08277,6.26202 -1.94623,0.41023 -3.95797,-0.30691 -5.20583,-1.85575 z m -26.80881,-38.03713 c -0.85646,-1.03164 -0.94084,-2.50094 -0.20807,-3.62382 0.92246,-1.41373 2.81611,-1.81233 4.2302,-0.89044 1.4151,0.92212 1.81436,2.817 0.89167,4.23172 -0.92301,1.41395 -2.81749,1.81194 -4.23143,0.88891 -0.25651,-0.16684 -0.48654,-0.37124 -0.68237,-0.60637 z m -9.42535,-11.81191 c -0.0451,-0.0574 -0.0878,-0.11677 -0.12825,-0.17761 -0.95408,-1.41903 -0.57654,-3.34288 0.84308,-4.29609 1.41906,-0.95281 3.34184,-0.57479 4.29458,0.84431 0.95227,1.41842 0.57503,3.34018 -0.84279,4.29335 -1.3479,0.90644 -3.16721,0.61653 -4.16664,-0.66395 z m -31.63666,-40.18022 c -0.99168,-1.32651 -1.34738,-3.02306 -0.972,-4.63617 0.70353,-3.02165 3.72368,-4.90061 6.74519,-4.19647 3.02041,0.70412 4.8985,3.72305 4.19525,6.74367 -0.70344,3.02044 -3.72177,4.89916 -6.74245,4.19676 -1.29025,-0.30019 -2.43288,-1.04675 -3.22599,-2.10779 z m 9.78954,11.57585 c -0.75819,-0.93353 -1.12199,-2.12618 -1.01518,-3.32406 0.22713,-2.54418 2.47435,-4.42212 5.01843,-4.19375 2.54304,0.22779 4.42002,2.47384 4.19251,5.01691 -0.22778,2.54305 -2.47384,4.42003 -5.01691,4.19253 -1.24468,-0.11111 -2.39139,-0.72132 -3.17885,-1.69163 z M -455.9421,85.0368 c -1.61213,-1.90485 -2.05586,-4.5378 -1.15705,-6.86579 1.35749,-3.51517 5.30737,-5.26454 8.82271,-3.90749 3.5151,1.35688 5.26507,5.30606 3.909,8.82147 -1.35639,3.51641 -5.3068,5.26717 -8.82299,3.91024 -1.06684,-0.41191 -2.01305,-1.08534 -2.75167,-1.95843 z m 28.50146,34.88755 c -0.56702,-0.64541 -0.89898,-1.46368 -0.94188,-2.32172 -0.1055,-2.09842 1.50951,-3.88534 3.60788,-3.9919 2.09855,-0.10637 3.8862,1.50814 3.99342,3.60665 0.10618,2.09946 -1.50992,3.88738 -3.6094,3.99313 -1.15965,0.059 -2.28279,-0.4146 -3.05002,-1.28616 z m 90.15982,110.24719 c -0.13405,-0.17254 -0.26196,-0.34974 -0.38341,-0.53136 -2.84888,-4.24 -1.72086,-9.98669 2.51939,-12.83517 4.24002,-2.84759 9.98563,-1.71913 12.83365,2.52062 2.84887,4.23999 1.72086,9.98668 -2.51939,12.83516 -4.02909,2.7067 -9.46514,1.83814 -12.45021,-1.98928 z m -55.17406,-71.14752 c -0.5698,-0.68471 -0.80831,-1.58601 -0.65175,-2.46292 0.29349,-1.64139 1.86156,-2.73444 3.50313,-2.44192 1.64144,0.29279 2.73515,1.86027 2.44344,3.5019 -0.29216,1.64265 -1.86085,2.73727 -3.50342,2.44467 -0.7013,-0.12512 -1.3358,-0.4941 -1.7914,-1.04173 z m -26.57025,-33.51696 c -0.30297,-0.38991 -0.50907,-0.84618 -0.60204,-1.33114 -0.32662,-1.69877 0.78554,-3.34073 2.48425,-3.66767 1.69877,-0.32662 3.34072,0.78553 3.66767,2.48424 0.32661,1.69876 -0.78553,3.34072 -2.48424,3.66767 -1.15743,0.223 -2.34208,-0.22258 -3.06564,-1.1531 z m 59.98659,74.10847 c -0.21571,-0.28923 -0.40637,-0.59631 -0.56986,-0.91797 -1.58513,-3.12445 -0.33704,-6.94231 2.78759,-8.5271 3.12445,-1.58513 6.94231,-0.33704 8.5271,2.78758 1.58514,3.12445 0.33705,6.94232 -2.78758,8.52711 -2.75392,1.39662 -6.11343,0.60728 -7.95725,-1.86962 z m -24.98904,-31.04345 c -0.42366,-0.55037 -0.68037,-1.21081 -0.73948,-1.90284 -0.17051,-1.99421 1.30747,-3.74923 3.30161,-3.92049 1.99521,-0.1712 3.75126,1.30786 3.92172,3.30313 0.17121,1.99522 -1.30785,3.75126 -3.30313,3.92173 -1.22969,0.10474 -2.42819,-0.42336 -3.18072,-1.40153 z m -22.18903,-27.6937 c -0.93832,-1.04725 -0.85062,-2.65674 0.19591,-3.59587 1.04714,-0.93964 2.65775,-0.85249 3.59739,0.19467 0.93964,1.04715 0.85249,2.65776 -0.19468,3.5974 -1.04771,0.94009 -2.65931,0.85223 -3.59862,-0.1962 z m 105.80589,129.64314 c -4.87546,-5.62979 -4.26387,-14.14601 1.36602,-19.02137 5.6298,-4.87546 14.14601,-4.26387 19.02138,1.36602 4.87545,5.62979 4.26386,14.14601 -1.36602,19.02137 -5.6298,4.87546 -14.14602,4.26387 -19.02138,-1.36602 z m -96.98037,-121.33726 c -0.54453,-0.74273 -0.63989,-1.72358 -0.24859,-2.55728 0.59018,-1.2587 2.08913,-1.80047 3.34768,-1.20989 1.2587,0.59019 1.80048,2.08913 1.20989,3.34768 -0.59063,1.25737 -2.08837,1.79833 -3.34616,1.20866 -0.38197,-0.17827 -0.71304,-0.44963 -0.96282,-0.78917 z m -67.584,-84.13022 c -2.04919,-2.62521 -2.32846,-6.22184 -0.70899,-9.13185 2.227,-3.99977 7.27468,-5.43707 11.27461,-3.21036 3.99977,2.22699 5.43707,7.27467 3.21037,11.2746 -2.227,3.99977 -7.27467,5.43707 -11.27461,3.21037 -0.96872,-0.53975 -1.8193,-1.26839 -2.50138,-2.14276 z m 53.70475,64.30526 c -0.20525,-0.2449 -0.36399,-0.52529 -0.467,-0.82779 -0.46089,-1.34726 0.25745,-2.8131 1.60461,-3.27429 1.34726,-0.4609 2.8131,0.25745 3.27429,1.60461 0.4609,1.34726 -0.25745,2.81308 -1.60462,3.27428 -1.00641,0.34497 -2.12136,0.0365 -2.80728,-0.77681 z m 40.12516,47.81945 c -0.35474,-0.40568 -0.63105,-0.87372 -0.81483,-1.38032 -0.81805,-2.25993 0.3514,-4.75504 2.61165,-5.57218 2.25913,-0.81739 4.75318,0.35114 5.57095,2.61014 0.81806,2.25993 -0.3514,4.75504 -2.61165,5.57218 -1.68729,0.60999 -3.576,0.12162 -4.75612,-1.22982 z m -28.03944,-36.86876 c -0.62002,-0.78135 -0.60322,-1.89151 0.0396,-2.65423 0.74601,-0.88606 2.06911,-0.99946 2.95501,-0.25325 0.88607,0.746 0.99947,2.06912 0.25326,2.95502 -0.74601,0.88607 -2.06913,0.99946 -2.95502,0.25324 -0.10744,-0.0902 -0.20555,-0.19095 -0.29285,-0.30076 z m -5.43112,-8.82324 c -0.072,-0.0972 -0.13603,-0.20001 -0.19068,-0.3079 -0.52958,-1.04482 -0.11264,-2.32113 0.93159,-2.85184 1.04557,-0.53138 2.32394,-0.11405 2.85459,0.93189 0.53016,1.04552 0.1124,2.32288 -0.93313,2.85306 -0.92136,0.46727 -2.04531,0.20333 -2.66238,-0.6252 z m 18.68605,21.96998 c -0.33232,-0.45211 -0.50194,-1.00335 -0.48127,-1.56407 0.0509,-1.3723 1.20467,-2.44348 2.57696,-2.39242 1.37131,0.0507 2.44221,1.20287 2.39271,2.57421 -0.05,1.37241 -1.20334,2.44429 -2.57573,2.39393 -0.75856,-0.0276 -1.46298,-0.40014 -1.91267,-1.01165 z m -4.95434,-7.24298 c -0.42543,-0.53534 -0.55939,-1.24607 -0.35788,-1.89949 0.33667,-1.09294 1.49529,-1.70631 2.58842,-1.37031 1.09421,0.33611 1.70843,1.49597 1.37154,2.58994 -0.33729,1.09295 -1.49658,1.7057 -2.58965,1.36878 -0.39919,-0.12236 -0.75209,-0.3625 -1.01243,-0.68892 z m 13.04816,14.20939 c -0.30164,-0.36119 -0.51416,-0.78821 -0.61938,-1.2469 -0.36736,-1.60649 0.63716,-3.2066 2.24365,-3.57396 1.60661,-0.36839 3.2076,0.63569 3.57549,2.24242 0.36736,1.60649 -0.63715,3.20662 -2.24365,3.57397 -1.09419,0.25062 -2.23644,-0.13407 -2.95611,-0.99553 z m -39.19937,-50.14967 c -0.57264,-0.73934 -0.78971,-1.69375 -0.59318,-2.60804 0.36761,-1.71176 2.05296,-2.80167 3.76487,-2.43474 1.71176,0.36762 2.80169,2.05296 2.43475,3.76487 -0.36761,1.71177 -2.05297,2.80168 -3.76487,2.43475 -0.73103,-0.15648 -1.38328,-0.56619 -1.84157,-1.15684 z m 18.25452,22.36827 c -0.0263,-0.0323 -0.0516,-0.0655 -0.0754,-0.0998 -0.55084,-0.79164 -0.35605,-1.87989 0.43518,-2.43132 0.79099,-0.5516 1.8793,-0.35804 2.43161,0.43244 0.55211,0.79162 0.35782,1.88094 -0.43395,2.43284 -0.75184,0.52413 -1.78089,0.37824 -2.3574,-0.33422 z m 5.43694,6.57515 c -0.4941,-0.57398 -0.55635,-1.40299 -0.15347,-2.0443 0.50686,-0.80707 1.5719,-1.05061 2.37916,-0.54406 0.80707,0.50687 1.05061,1.57192 0.54404,2.37917 -0.50631,0.80684 -1.57053,1.05101 -2.37792,0.54557 -0.1467,-0.0919 -0.27878,-0.20528 -0.39184,-0.33636 z m -18.04952,-22.50604 c -0.43752,-0.51945 -0.65536,-1.18899 -0.60724,-1.86645 0.10312,-1.43806 1.35263,-2.52016 2.79067,-2.41677 1.43807,0.10313 2.52016,1.35264 2.41677,2.79068 -0.10313,1.43807 -1.35264,2.52016 -2.79068,2.41677 -0.70325,-0.051 -1.35594,-0.3844 -1.80952,-0.92423 z m -11.0714,-14.77011 c -0.92928,-1.05881 -1.2064,-2.54048 -0.72272,-3.86362 0.7313,-1.99854 2.9446,-3.02548 4.94286,-2.29341 1.99724,0.7318 3.02338,2.94388 2.29219,4.94134 -0.7318,1.99724 -2.94388,3.02337 -4.94134,2.29219 -0.60551,-0.2217 -1.14568,-0.59184 -1.57099,-1.0765 z m -49.30493,-61.4982 c -3.16954,-3.59187 -3.37021,-8.919313 -0.47989,-12.739443 3.35534,-4.4349 9.67034,-5.31057 14.1058,-1.95597 4.43626,3.35506 5.31254,9.671273 1.95718,14.107313 -3.3556,4.43654 -9.67267,5.31219 -14.10852,1.95567 -0.53593,-0.40552 -1.02991,-0.86366 -1.47457,-1.36757 z m 65.59918,80.74267 c -0.24475,-0.33016 -0.3897,-0.72358 -0.41761,-1.13362 -0.0813,-1.1839 0.81269,-2.20948 1.99659,-2.29063 1.18378,-0.0803 2.2086,0.81406 2.28911,1.99782 0.0813,1.1839 -0.81268,2.20948 -1.99659,2.29063 -0.73031,0.0495 -1.43561,-0.27614 -1.8715,-0.8642 z m 4.94147,3.23587 c -0.17441,-0.21704 -0.29508,-0.4722 -0.35228,-0.74468 -0.20161,-0.95591 0.41001,-1.89423 1.36597,-2.09559 0.95578,-0.20061 1.89326,0.41145 2.09408,1.36719 0.20062,0.95579 -0.41145,1.89327 -1.3672,2.09409 -0.65079,0.13669 -1.32327,-0.10324 -1.74057,-0.62101 z m 47.17343,58.27414 c -0.0772,-0.096 -0.15074,-0.19484 -0.2211,-0.29592 -1.64893,-2.3651 -1.06879,-5.61907 1.29589,-7.2686 2.36512,-1.64894 5.61909,-1.06879 7.26862,1.2959 1.65021,2.36507 1.07055,5.62013 -1.29467,7.27012 -2.24824,1.56808 -5.32626,1.13073 -7.04872,-1.00152 z m -31.84422,-39.6163 c -0.32889,-0.38065 -0.47295,-0.8871 -0.3936,-1.38385 0.14935,-0.92986 1.02424,-1.56257 1.95408,-1.41319 0.92986,0.14935 1.56257,1.02423 1.4132,1.95409 -0.14935,0.92986 -1.02425,1.56257 -1.9541,1.41319 -0.3964,-0.0641 -0.75746,-0.26604 -1.01958,-0.57024 z m -41.86349,-52.32929 c -1.18297,-1.46172 -1.37542,-3.48982 -0.48939,-5.14844 1.21802,-2.28006 4.05394,-3.14077 6.33377,-1.92233 2.2799,1.21746 3.14125,4.05257 1.92386,6.33254 -1.21802,2.28006 -4.05393,3.14077 -6.33377,1.92233 -0.55256,-0.29474 -1.04036,-0.69739 -1.43447,-1.1841 z m 46.71391,57.63606 c -0.24448,-0.30625 -0.3957,-0.67636 -0.43594,-1.06615 -0.11562,-1.12382 0.70129,-2.12876 1.82505,-2.24509 1.12396,-0.11654 2.12968,0.6999 2.24661,1.82382 0.11632,1.12482 -0.70167,2.13078 -1.82656,2.24632 -0.69291,0.0714 -1.37456,-0.21453 -1.80916,-0.7589 z m 14.41158,17.27764 c -0.12493,-0.16125 -0.23563,-0.33304 -0.33125,-0.51321 -0.9254,-1.74825 -0.25813,-3.91567 1.49028,-4.84075 1.74825,-0.9254 3.91568,-0.25814 4.84076,1.49028 0.92539,1.74825 0.25813,3.91567 -1.49029,4.84075 -1.54065,0.81516 -3.44444,0.40268 -4.50954,-0.97704 z m 33.31321,38.8554 c -2.30771,-3.15724 -1.84791,-7.54941 1.06365,-10.16026 3.13021,-2.80707 7.94332,-2.54511 10.75039,0.58511 2.80662,3.12963 2.54536,7.94176 -0.58359,10.74915 -3.12951,2.80797 -7.9428,2.54723 -10.75068,-0.58235 -0.16973,-0.18906 -0.32981,-0.38656 -0.4798,-0.59161 z m -40.52295,-51.59136 c -0.13221,-0.17824 -0.23902,-0.37403 -0.31836,-0.58131 -0.48467,-1.26768 0.15064,-2.68816 1.41865,-3.17196 1.26758,-0.48354 2.68714,0.15221 3.17043,1.41989 0.48289,1.26679 -0.15194,2.68528 -1.41835,3.1692 -1.0306,0.39358 -2.19718,0.0518 -2.85237,-0.83582 z m -58.35346,-76.44214 c -1.48915,-1.99831 -1.50332,-4.73349 -0.035,-6.74712 1.8503,-2.53648 5.40633,-3.09302 7.94312,-1.24315 2.53648,1.85029 3.09302,5.40633 1.24315,7.94311 -1.85029,2.53649 -5.40633,3.09303 -7.94311,1.24316 -0.4604,-0.33586 -0.86768,-0.73904 -1.20819,-1.196 z m 31.9458,39.31604 c -0.33046,-0.41125 -0.46263,-0.94737 -0.3613,-1.46512 0.19069,-0.9698 1.13123,-1.60156 2.10112,-1.41135 0.9698,0.1907 1.60158,1.13124 1.41135,2.10113 -0.1907,0.96979 -1.13123,1.60156 -2.10112,1.41134 -0.41404,-0.0816 -0.78593,-0.30687 -1.05005,-0.636 z m 22.62003,27.92317 c -0.17354,-0.20079 -0.29761,-0.43949 -0.36155,-0.69706 -0.22372,-0.90382 0.32822,-1.81773 1.23229,-2.04045 0.90295,-0.22304 1.8158,0.32791 2.03923,1.23076 0.22304,0.90295 -0.3279,1.81581 -1.23076,2.03924 -0.61534,0.15263 -1.26427,-0.0531 -1.67921,-0.53249 z m -25.90612,-32.74029 c -0.42708,-0.57674 -0.54223,-1.32701 -0.30767,-2.00524 0.39273,-1.13572 1.63212,-1.73768 2.76758,-1.34419 1.13572,0.39273 1.73769,1.63212 1.3442,2.76758 -0.39335,1.13577 -1.63342,1.73711 -2.76881,1.34267 -0.41384,-0.14356 -0.77469,-0.40874 -1.0353,-0.76082 z m -2.96305,-6.09651 c -0.68165,-0.81397 -0.80994,-1.95686 -0.32564,-2.90165 0.66516,-1.29892 2.25772,-1.81223 3.55627,-1.14729 1.29892,0.66516 1.81223,2.25772 1.14729,3.55626 -0.66516,1.29893 -2.25772,1.81223 -3.55626,1.14729 -0.31494,-0.161 -0.59435,-0.38361 -0.82166,-0.65461 z m 42.51341,51.17516 c -0.0445,-0.0536 -0.0874,-0.10857 -0.1281,-0.16517 -0.95409,-1.31878 -0.65865,-3.16127 0.65988,-4.11569 1.31877,-0.95409 3.16127,-0.65865 4.11569,0.65988 0.95409,1.31877 0.65865,3.16127 -0.65988,4.11569 -1.25313,0.90679 -2.99402,0.69079 -3.98751,-0.49477 z m -7.27101,-9.48958 c -0.0719,-0.0901 -0.13594,-0.1862 -0.19154,-0.28714 -0.5398,-0.97751 -0.18492,-2.20753 0.79262,-2.74726 0.97751,-0.5398 2.20752,-0.18493 2.74726,0.79262 0.53979,0.9775 0.18491,2.20752 -0.79262,2.74725 -0.86139,0.47603 -1.94041,0.26263 -2.55576,-0.50544 z m 19.18786,21.60281 c -1.33378,-1.7592 -1.11783,-4.24279 0.49954,-5.74541 1.73934,-1.61478 4.4583,-1.51409 6.07344,0.2249 1.61569,1.73863 1.51623,4.45778 -0.22216,6.07373 -1.7392,1.61612 -4.45932,1.51596 -6.07496,-0.22368 -0.0976,-0.10503 -0.18948,-0.21514 -0.27601,-0.32942 z m -57.0762,-71.29689 c -0.85997,-1.11338 -0.89464,-2.65703 -0.0856,-3.80795 1.01958,-1.45063 3.02221,-1.79978 4.47253,-0.77978 1.44926,1.01988 1.79777,3.02129 0.77856,4.47101 -1.01903,1.45037 -3.02082,1.80016 -4.47131,0.7813 -0.26343,-0.18544 -0.49746,-0.40947 -0.69419,-0.66458 z m 109.84023,135.67094 c -3.20931,-4.1926 -3.02111,-10.06563 0.45005,-14.04416 4.02996,-4.61915 11.04137,-5.09699 15.66076,-1.0673 4.6195,4.0305 5.09669,11.04283 1.06579,15.66199 -4.0305,4.6195 -11.04284,5.09668 -15.66199,1.06579 -0.5575,-0.48692 -1.06489,-1.02839 -1.51461,-1.61632 z m -70.55374,-91.42334 c -0.0253,-0.0297 -0.0498,-0.0602 -0.0736,-0.0912 -0.55233,-0.7355 -0.4033,-1.77959 0.33279,-2.33116 0.73551,-0.55233 1.7796,-0.40328 2.33116,0.3328 0.55107,0.73554 0.40149,1.77854 -0.33402,2.32964 -0.69856,0.52458 -1.68382,0.41977 -2.25636,-0.24006 z M -476.22891,9.038917 c -3.96934,-4.8721 -3.60181,-11.9591 0.85019,-16.39451 4.78676,-4.76962 12.53388,-4.75525 17.30291,0.0321 4.76963,4.78676 4.75528,12.53389 -0.0321,17.30293 -4.78675,4.76963 -12.53388,4.75527 -17.30292,-0.0321 -0.2877,-0.28897 -0.5607,-0.59219 -0.81811,-0.90843 z m 80.2925,99.125533 c -0.49657,-0.62036 -0.53121,-1.4918 -0.0853,-2.1495 0.56138,-0.82792 1.68744,-1.04438 2.51576,-0.4836 0.82793,0.56137 1.04438,1.68742 0.4836,2.51575 -0.56137,0.82792 -1.68743,1.04438 -2.51575,0.4836 -0.15034,-0.10148 -0.28461,-0.22493 -0.39834,-0.36623 z m -38.73046,-48.92444 c -2.28735,-2.71084 -2.14955,-6.71358 0.31875,-9.26076 2.65501,-2.73898 7.0277,-2.80709 9.76673,-0.15212 2.73899,2.655 2.8071,7.0277 0.15213,9.76673 -2.655,2.73899 -7.0277,2.8071 -9.76673,0.15213 -0.16533,-0.16067 -0.32249,-0.32954 -0.47086,-0.50599 z m 71.64957,88.60715 c -0.76906,-0.97998 -0.67114,-2.38311 0.22661,-3.24674 0.96553,-0.92908 2.50138,-0.89966 3.43062,0.0657 0.92908,0.96553 0.89966,2.50139 -0.0657,3.43062 -0.96553,0.92909 -2.50138,0.89966 -3.43062,-0.0657 -0.0564,-0.0588 -0.11037,-0.11994 -0.16107,-0.18375 z m -47.69409,-60.67719 c -1.31804,-1.50779 -1.27959,-3.76888 0.0889,-5.23101 1.47159,-1.57226 3.93909,-1.65396 5.51145,-0.18247 1.57227,1.47159 1.65396,3.9391 0.18247,5.51145 -1.47158,1.57226 -3.93909,1.65396 -5.51144,0.18247 -0.0951,-0.0889 -0.18564,-0.18251 -0.27143,-0.28041 z m 78.11278,96.49494 c -1.85316,-2.33505 -1.80488,-5.65236 0.11549,-7.93245 2.22939,-2.6473 6.18274,-2.98602 8.82998,-0.75657 2.64729,2.2294 2.98601,6.18274 0.75656,8.82998 -2.22939,2.64728 -6.18273,2.98601 -8.82997,0.75656 -0.31991,-0.26932 -0.61204,-0.56999 -0.87206,-0.89752 z m -64.45417,-81.13684 c -0.62209,-0.8427 -0.5643,-2.00701 0.13819,-2.78396 0.81541,-0.90121 2.20685,-0.97115 3.10853,-0.15626 0.90257,0.8152 0.97309,2.20784 0.15749,3.11005 -0.81541,0.90121 -2.20686,0.97116 -3.10853,0.15627 -0.10919,-0.0986 -0.20824,-0.20782 -0.29568,-0.32609 z m 45.18357,53.86934 c -1.06892,-1.29947 -1.07474,-3.17202 -0.0139,-4.47808 1.23224,-1.51689 3.461,-1.74733 4.97752,-0.51462 1.51721,1.23278 1.747,3.46245 0.5131,4.97875 -1.23303,1.51585 -3.46148,1.74502 -4.97723,0.51187 -0.18269,-0.14891 -0.35001,-0.31572 -0.49954,-0.4979 z m -11.14758,-15.2005 c -0.61629,-0.72306 -0.63789,-1.78019 -0.0517,-2.52788 0.68042,-0.86858 1.93623,-1.0209 2.80458,-0.34018 0.86889,0.68097 1.02056,1.93766 0.33867,2.80581 -0.68123,0.86752 -1.93672,1.0186 -2.8043,0.33744 -0.10465,-0.082 -0.20087,-0.17415 -0.28725,-0.27518 z M -397.2639,95.81767 c -0.94721,-1.13314 -0.79657,-2.81959 0.33643,-3.76696 1.13314,-0.94721 2.81958,-0.79657 3.76696,0.33644 0.94722,1.13314 0.79656,2.81958 -0.33644,3.76695 -1.13313,0.94721 -2.81958,0.79657 -3.76695,-0.33643 z m 33.39873,39.86043 c -0.39659,-0.52733 -0.43945,-1.24069 -0.10891,-1.81175 0.4552,-0.7861 1.46166,-1.05406 2.24748,-0.59842 0.78628,0.45576 1.05361,1.46302 0.5969,2.2487 -0.45614,0.78493 -1.46213,1.05161 -2.24719,0.59568 -0.19019,-0.11059 -0.35621,-0.25826 -0.48828,-0.43421 z m -25.05657,-32.95634 c -0.0255,-0.0348 -0.0502,-0.0702 -0.0731,-0.10661 -0.55023,-0.85053 -0.30684,-1.98609 0.54365,-2.53638 0.85054,-0.55025 1.98609,-0.30685 2.53639,0.54364 0.55024,0.85055 0.30684,1.98609 -0.54366,2.53639 -0.80846,0.52353 -1.88414,0.3326 -2.46305,-0.43718 z m -22.1984,-27.74887 c -1.64314,-2.03603 -1.32459,-5.01859 0.71149,-6.66167 2.03662,-1.64362 5.02018,-1.32435 6.6629,0.713 1.6423,2.03671 1.32253,5.01914 -0.71423,6.66138 -2.03612,1.64183 -5.01755,1.32278 -6.66016,-0.71271 z m 58.10124,71.85522 c -0.8503,-0.95311 -0.98023,-2.34908 -0.3205,-3.44279 0.83145,-1.37712 2.62201,-1.81926 3.9989,-0.98741 1.37693,0.83091 1.81967,2.62065 0.98893,3.99768 -0.83145,1.37712 -2.62201,1.81926 -3.9989,0.98741 -0.24926,-0.15053 -0.47461,-0.33754 -0.66843,-0.55489 z m 18.68083,19.85127 c -1.47537,-1.71461 -1.6615,-4.1904 -0.45911,-6.10635 1.51457,-2.41327 4.69887,-3.14155 7.11188,-1.62656 2.41305,1.51402 3.14195,4.6975 1.62808,7.11065 -1.51457,2.41327 -4.69887,3.14155 -7.11188,1.62656 -0.43775,-0.27434 -0.83181,-0.61289 -1.16897,-1.0043 z m -20.84278,-27.65797 c -0.54286,-0.68904 -0.66594,-1.6196 -0.32097,-2.42612 0.52031,-1.21659 1.92794,-1.78151 3.14493,-1.26214 1.21649,0.51972 1.78202,1.92663 1.26366,3.14369 -0.51925,1.21781 -1.9274,1.78412 -3.14521,1.26489 -0.36953,-0.15736 -0.69358,-0.40505 -0.94241,-0.72032 z m -41.17244,-51.31084 c -0.12282,-0.13793 -0.23425,-0.28562 -0.33186,-0.44246 -0.94887,-1.52364 -0.48249,-3.52801 1.04153,-4.47626 1.52363,-0.94886 3.52802,-0.48248 4.47626,1.04154 0.9476,1.52363 0.48076,3.52695 -1.04276,4.47473 -1.34246,0.83556 -3.09153,0.58331 -4.14319,-0.59753 z m 8.79126,9.63838 c -0.13029,-0.15354 -0.23909,-0.32409 -0.32357,-0.50686 -0.51793,-1.11633 -0.0329,-2.44116 1.08338,-2.95921 1.11633,-0.51793 2.44116,-0.0329 2.95921,1.08337 0.51793,1.11633 0.0329,2.44117 -1.08337,2.95921 -0.90829,0.42193 -1.98648,0.1861 -2.63565,-0.57651 z m -47.45322,-59.7222 c -2.8457,-3.657543 -2.18767,-8.929443 1.46981,-11.775213 3.65694,-2.84522 8.92784,-2.18792 11.77399,1.46829 2.84655,3.65684 2.18972,8.928873 -1.46706,11.775503 -3.65745,2.84704 -8.93049,2.18949 -11.77674,-1.46858 z m 133.14929,164.78733 c -2.55872,-3.08213 -2.81151,-7.47151 -0.62343,-10.82693 2.75624,-4.22582 8.41595,-5.4178 12.64244,-2.66259 4.22719,2.7559 5.41983,8.41685 2.66381,12.64397 -2.75591,4.22718 -8.41685,5.41982 -12.64396,2.6638 -0.7669,-0.50048 -1.45421,-1.11341 -2.03886,-1.81825 z m -55.77361,-69.30882 c -0.42321,-0.49518 -0.57479,-1.16731 -0.40504,-1.7962 0.28445,-1.05191 1.36772,-1.6741 2.41966,-1.38976 1.05191,0.28379 1.67474,1.36643 1.39127,2.41843 -0.28321,1.05317 -1.36708,1.67686 -2.41994,1.39251 -0.38416,-0.10412 -0.72786,-0.32197 -0.98595,-0.62498 z m -2.76678,-4.63377 c -0.25487,-0.33761 -0.36801,-0.76131 -0.31531,-1.18102 0.11191,-0.88908 0.92272,-1.51954 1.81195,-1.40896 0.89031,0.11053 1.52239,0.92196 1.41166,1.81227 -0.11127,0.89025 -0.92326,1.52164 -1.81347,1.41019 -0.4354,-0.0543 -0.83032,-0.28241 -1.09487,-0.63247 z m -19.80915,-27.98488 c -0.17592,-0.23465 -0.29383,-0.5076 -0.34394,-0.79656 -0.17536,-1.00982 0.50066,-1.97073 1.51034,-2.14682 1.00994,-0.17634 1.97167,0.49924 2.14834,1.50912 0.17633,1.00994 -0.49924,1.97167 -1.50912,2.14834 -0.68829,0.12071 -1.38607,-0.15525 -1.80562,-0.71408 z m 42.29165,52.30008 c -0.93926,-1.23604 -1.12914,-2.88613 -0.49511,-4.30318 0.95779,-2.1405 3.46947,-3.09926 5.60996,-2.14145 2.14051,0.95778 3.09927,3.46946 2.14146,5.60995 -0.95837,2.14062 -3.47077,3.09878 -5.61118,2.13995 -0.64902,-0.29047 -1.21469,-0.73929 -1.64513,-1.30527 z m -47.19022,-61.81638 c -0.20751,-0.26361 -0.36439,-0.56337 -0.46235,-0.88424 -0.43494,-1.43115 0.37318,-2.94381 1.80459,-3.37788 1.43115,-0.43494 2.94382,0.37317 3.37789,1.80459 0.43494,1.43115 -0.37317,2.94381 -1.80459,3.37788 -1.06866,0.32387 -2.22651,-0.0416 -2.91554,-0.92035 z m -24.14211,-30.32642 c -0.21359,-0.24884 -0.40475,-0.51608 -0.57302,-0.79747 -1.6321,-2.72753 -0.74398,-6.26171 1.98365,-7.89366 2.72752,-1.63084 6.26065,-0.74226 7.89213,1.98488 1.6321,2.72753 0.74397,6.26171 -1.98365,7.89366 -2.40359,1.43799 -5.4934,0.93671 -7.31911,-1.18741 z m 49.2184,59.94443 c -0.12021,-0.15858 -0.20975,-0.33823 -0.26416,-0.52967 -0.24225,-0.85209 0.25184,-1.73928 1.10379,-1.98198 0.85221,-0.24331 1.74029,0.25034 1.9835,1.10257 0.24293,0.85293 -0.25212,1.74119 -1.10532,1.9832 -0.6362,0.18099 -1.31827,-0.047 -1.71781,-0.57412 z m -33.94548,-42.60378 c -0.22628,-0.27573 -0.41419,-0.58083 -0.55852,-0.90703 -0.8828,-1.99305 0.0171,-4.32439 2.01009,-5.20737 1.99304,-0.8828 4.32439,0.0171 5.20737,2.01009 0.8828,1.99304 -0.0171,4.3244 -2.01009,5.20738 -1.62145,0.71845 -3.52301,0.26726 -4.64885,-1.10307 z m 51.88685,64.25102 c -0.73379,-0.89006 -0.9812,-2.08485 -0.66112,-3.19311 0.53485,-1.85543 2.47298,-2.92556 4.32814,-2.38975 1.85417,0.53605 2.92282,2.4736 2.387,4.32785 -0.53541,1.85416 -2.47232,2.92345 -4.32662,2.38852 -0.67688,-0.19512 -1.27899,-0.59022 -1.7274,-1.13351 z m -13.76917,-18.55619 c -0.24326,-0.28355 -0.39986,-0.63106 -0.45124,-1.0011 -0.14769,-1.06677 0.59765,-2.05119 1.66449,-2.19838 1.06581,-0.147 2.04919,0.59728 2.19715,1.66296 0.14796,1.06594 -0.59588,2.05012 -1.66173,2.19867 -0.65763,0.0915 -1.31658,-0.15803 -1.74867,-0.66215 z m 9.19367,10.48566 c -0.56494,-0.63232 -0.82221,-1.48164 -0.70304,-2.32117 0.2235,-1.57322 1.6801,-2.66732 3.25329,-2.44366 1.57316,0.22424 2.6666,1.68141 2.44215,3.25453 -0.22424,1.57316 -1.68141,2.66659 -3.25454,2.44214 -0.67097,-0.0962 -1.28644,-0.4262 -1.73786,-0.93184 z m -4.7811,-6.18827 c -0.33165,-0.41911 -0.51138,-0.9383 -0.51048,-1.47276 0.003,-1.30751 1.06489,-2.36527 2.3724,-2.36292 1.30751,0.003 2.36527,1.06489 2.36292,2.37241 -0.003,1.3075 -1.06489,2.36527 -2.3724,2.36291 -0.72238,-0.002 -1.40449,-0.33292 -1.85244,-0.89964 z m -25.25368,-31.84128 c -0.3296,-0.38806 -0.51818,-0.87624 -0.53513,-1.38511 -0.0406,-1.24464 0.93513,-2.28672 2.17976,-2.32797 1.24477,-0.0414 2.28759,0.93379 2.32949,2.17855 0.0421,1.24581 -0.9342,2.28963 -2.18005,2.33071 -0.6882,0.0223 -1.34891,-0.27087 -1.79407,-0.79618 z m 13.99392,17.18295 c -0.55036,-0.6816 -0.44348,-1.6804 0.23864,-2.23012 0.6816,-0.55036 1.68041,-0.44348 2.23013,0.23865 0.54904,0.68169 0.44166,1.67937 -0.23988,2.22861 -0.68101,0.54988 -1.67882,0.44372 -2.22889,-0.23714 z m -8.50278,-11.46455 c -0.33208,-0.44384 -0.45123,-1.01167 -0.32566,-1.55158 0.23536,-1.01127 1.24614,-1.64012 2.25732,-1.40435 1.01127,0.23536 1.64012,1.24614 1.40435,2.25732 -0.23536,1.01127 -1.24613,1.64012 -2.25732,1.40435 -0.43152,-0.10073 -0.81356,-0.35069 -1.07869,-0.70574 z m 63.42857,75.84631 c -1.62605,-2.21852 -1.9113,-5.14775 -0.7438,-7.63828 1.76196,-3.76106 6.23909,-5.38188 10.00036,-3.62035 3.76251,1.76211 5.38348,6.24122 3.62005,10.00311 -1.76255,3.76118 -6.24042,5.38138 -10.00159,3.61882 -1.1412,-0.53447 -2.1298,-1.34712 -2.87502,-2.3633 z m -50.09725,-63.27057 c -0.0712,-0.0835 -0.13623,-0.17206 -0.19232,-0.26645 -0.54732,-0.91294 -0.25018,-2.09676 0.6634,-2.64302 0.91294,-0.54607 2.09572,-0.24848 2.64152,0.66463 0.54549,0.91227 0.24869,2.094 -0.66312,2.64028 -0.80393,0.48182 -1.838,0.31487 -2.44946,-0.39546 z m -5.48403,-7.73163 c -0.49889,-0.66863 -0.50394,-1.58428 -0.0125,-2.2584 0.61932,-0.84895 1.80964,-1.035 2.65848,-0.41553 0.84868,0.61877 1.03537,1.80822 0.41706,2.65724 -0.61931,0.84896 -1.80963,1.03502 -2.65848,0.41555 -0.15404,-0.11196 -0.29039,-0.24643 -0.40459,-0.39883 z m -17.49533,-22.67455 c -0.41861,-0.47147 -0.69286,-1.05334 -0.79011,-1.67629 -0.28026,-1.79428 0.94682,-3.47613 2.74103,-3.75686 1.79428,-0.28027 3.47613,0.94681 3.75686,2.74102 0.28123,1.79441 -0.9454,3.47706 -2.73979,3.75838 -1.10634,0.17303 -2.2247,-0.22874 -2.96799,-1.06625 z m 28.54358,32.48223 c -0.13125,-0.1659 -0.23905,-0.34906 -0.32096,-0.5441 -0.50308,-1.18991 0.0536,-2.56238 1.24338,-3.0657 1.19067,-0.50371 2.5642,0.0538 3.06693,1.24491 0.50256,1.1906 -0.0554,2.56316 -1.24613,3.06541 -0.96796,0.40909 -2.08992,0.12257 -2.74322,-0.70052 z M -366.10965,99.3085 c -0.53949,-0.63725 -0.68808,-1.51816 -0.38754,-2.29713 0.45417,-1.1765 1.77612,-1.76201 2.95257,-1.30773 1.17649,0.45417 1.76201,1.77612 1.30773,2.95257 -0.45417,1.1765 -1.77612,1.76201 -2.95258,1.30773 -0.35678,-0.13795 -0.6732,-0.36333 -0.92018,-0.65544 z m -5.74026,-7.95906 c -0.43893,-0.56132 -0.6419,-1.27158 -0.56593,-1.98008 0.16118,-1.50461 1.51139,-2.59379 3.01604,-2.43294 1.5046,0.16117 2.59378,1.51139 2.43293,3.01604 -0.16117,1.5046 -1.51139,2.59378 -3.01603,2.43293 -0.7368,-0.0787 -1.41034,-0.45241 -1.86701,-1.03595 z m 14.36499,15.11701 c -0.76594,-0.90731 -0.71984,-2.24737 0.10671,-3.09983 0.88839,-0.91541 2.35042,-0.93798 3.26666,-0.0505 0.91676,0.88821 0.9399,2.35144 0.0517,3.26819 -0.88821,0.91675 -2.35144,0.93989 -3.26818,0.0517 -0.055,-0.0539 -0.10746,-0.11044 -0.15685,-0.16959 z m -31.9672,-39.70027 c -0.35937,-0.47417 -0.6274,-1.01105 -0.79034,-1.58327 -0.72495,-2.54762 0.753,-5.20051 3.30081,-5.92484 2.54679,-0.72427 5.1986,0.75273 5.92361,3.2993 0.72533,2.54691 -0.75122,5.1996 -3.29807,5.92513 -1.90213,0.54182 -3.94178,-0.13978 -5.13601,-1.71632 z m 74.60185,92.11765 c -1.27272,-1.59893 -1.6743,-3.72297 -1.07323,-5.67621 1.00573,-3.26747 4.46965,-5.10116 7.73725,-4.09587 3.26874,1.00519 5.10328,4.47034 4.0971,7.73877 -1.00637,3.26749 -4.47094,5.10056 -7.73848,4.09435 -1.19218,-0.36682 -2.24573,-1.08521 -3.02264,-2.06104 z m -30.92715,-38.67229 c -0.29944,-0.33393 -0.51554,-0.73402 -0.63065,-1.16754 -0.4027,-1.51667 0.49998,-3.07272 2.01649,-3.47604 1.51668,-0.4027 3.07273,0.49997 3.47605,2.01649 0.40375,1.5168 -0.49849,3.07373 -2.01527,3.47757 -1.03331,0.27449 -2.13324,-0.0541 -2.84662,-0.85048 z M -431.26965,12.306987 c -0.37077,-0.4469 -0.70239,-0.92489 -0.99164,-1.42841 -2.80484,-4.88062 -1.12271,-11.1109 3.7574,-13.91663 4.88064,-2.80609 11.11195,-1.12441 13.91815,3.75617 2.80667,4.88131 1.12418,11.11368 -3.75768,13.91938 -4.30173,2.47248 -9.75883,1.48859 -12.92623,-2.33051 z m 92.60689,113.286943 c -0.4212,-0.5094 -0.68771,-1.12879 -0.76738,-1.78497 -0.22843,-1.89307 1.12094,-3.61294 3.014,-3.84155 1.89307,-0.22843 3.61293,1.12093 3.84154,3.01399 0.22843,1.89307 -1.12093,3.61293 -3.01398,3.84155 -1.16713,0.14035 -2.32548,-0.32274 -3.07418,-1.22902 z m -66.09548,-82.1014 c -0.39201,-0.49552 -0.71555,-1.04154 -0.96101,-1.62375 -1.50188,-3.55741 0.16457,-7.658773 3.72205,-9.160473 3.55666,-1.50124 7.65696,0.16433 9.15925,3.720543 1.50304,3.55749 -0.16298,7.65981 -3.72083,9.162 -2.89417,1.22222 -6.24818,0.3639 -8.19946,-2.09832 z m 82.05211,100.95826 c -0.98165,-1.13808 -1.41084,-2.65144 -1.17282,-4.13542 0.44529,-2.77917 3.0594,-4.67105 5.83853,-4.22542 2.77912,0.446 4.67033,3.06069 4.22392,5.83974 -0.44591,2.778 -3.05883,4.66896 -5.83701,4.22422 -1.18652,-0.19004 -2.26772,-0.79326 -3.05262,-1.70312 z m -8.27714,-11.10705 c -0.57341,-0.75289 -0.87535,-1.67755 -0.85679,-2.62375 0.0444,-2.31657 1.95855,-4.15841 4.27511,-4.11356 2.31645,0.0452 4.15757,1.95987 4.11203,4.27632 -0.0459,2.31537 -1.95941,4.15551 -4.2748,4.11082 -1.2801,-0.0243 -2.47903,-0.63187 -3.25555,-1.64983 z m -28.6512,-36.38281 c -0.68573,-0.8786 -0.77904,-2.08229 -0.23688,-3.05605 0.74529,-1.33875 2.43487,-1.81967 3.77344,-1.07405 1.33741,0.74568 1.81761,2.43403 1.07282,3.77193 -0.74474,1.33857 -2.43352,1.8201 -3.77221,1.07556 -0.32425,-0.1807 -0.60893,-0.42465 -0.83717,-0.71739 z m 9.16577,10.07153 c -0.95178,-1.22353 -0.73201,-2.98687 0.491,-3.93931 1.22413,-0.95226 2.98846,-0.73177 3.94053,0.49252 0.95178,1.22353 0.73201,2.98687 -0.491,3.93931 -1.22413,0.95226 -2.98847,0.73177 -3.94053,-0.49252 z m -24.25439,-30.86068 c -0.57175,-0.69763 -0.88999,-1.56855 -0.90375,-2.47043 -0.0336,-2.20581 1.72698,-4.0214 3.93278,-4.05575 2.20593,-0.0344 4.02225,1.72564 4.05727,3.93156 0.0351,2.20699 -1.72607,4.02431 -3.93308,4.0585 -1.2194,0.0188 -2.38064,-0.52026 -3.15322,-1.46388 z m 9.75703,10.55566 c -0.72816,-0.82288 -1.00333,-1.95208 -0.73544,-3.01772 0.44787,-1.78308 2.25634,-2.86556 4.03946,-2.41787 1.78433,0.4473 2.86769,2.25699 2.41909,4.041 -0.44797,1.78431 -2.25828,2.86702 -4.04221,2.41756 -0.65058,-0.16383 -1.23647,-0.5204 -1.6809,-1.02297 z M -254.3634,223.8009 c -3.51049,-4.04159 -4.26068,-9.79197 -1.90458,-14.59891 3.23773,-6.6064 11.21786,-9.33738 17.82439,-6.09992 6.60772,3.23731 9.33945,11.21868 6.10113,17.82591 -3.23788,6.60786 -11.22,9.33897 -17.82713,6.09961 -1.59964,-0.78431 -3.0257,-1.88152 -4.19381,-3.22669 z m -87.58979,-114.65155 c -0.12351,-0.14992 -0.23429,-0.30988 -0.33073,-0.47848 -0.93782,-1.63313 -0.3747,-3.71728 1.25798,-4.65588 1.63315,-0.93906 3.71834,-0.37639 4.6574,1.25675 0.9384,1.63381 0.37447,3.71901 -1.25951,4.65712 -1.43931,0.82726 -3.26518,0.49818 -4.32512,-0.77953 z m -9.26333,-13.5988 c -1.06008,-1.20169 -1.12721,-2.98372 -0.16064,-4.26183 1.12233,-1.48471 3.23578,-1.77843 4.72043,-0.65602 1.48499,1.12286 1.77808,3.23718 0.6545,4.72164 -1.12314,1.48363 -3.23624,1.77608 -4.72012,0.65328 -0.17956,-0.13548 -0.3451,-0.28861 -0.4942,-0.45704 z m -30.49351,-40.95932 c -0.72621,-0.84754 -1.19359,-1.8859 -1.34663,-2.99146 -0.44146,-3.18698 1.78429,-6.12839 4.97129,-6.56973 3.18698,-0.44147 6.1284,1.78428 6.56974,4.97128 0.44077,3.18603 -1.78394,6.12639 -4.96977,6.56851 -1.96483,0.27304 -3.93356,-0.47254 -5.22463,-1.9786 z m 49.54954,58.40757 c -0.22761,-0.29809 -0.41439,-0.62521 -0.55421,-0.97323 -0.85237,-2.1233 0.17739,-4.53561 2.30035,-5.38882 2.1233,-0.85236 4.5356,0.1774 5.38882,2.30035 0.85351,2.12338 -0.17581,4.53665 -2.29913,5.39034 -1.7274,0.69348 -3.70524,0.15007 -4.83583,-1.32864 z m -23.89118,-30.88014 c -0.93577,-1.14571 -1.17161,-2.71079 -0.6147,-4.08125 0.84053,-2.06942 3.19948,-3.06566 5.26891,-2.22519 2.06942,0.84052 3.06566,3.19948 2.22518,5.26892 -0.84052,2.0694 -3.19947,3.06565 -5.2689,2.22518 -0.62784,-0.25474 -1.18162,-0.66312 -1.61049,-1.18766 z m -9.92035,-14.27331 c -0.76081,-1.00799 -1.09878,-2.27285 -0.94218,-3.52599 0.3315,-2.66008 2.75661,-4.5478 5.41671,-4.21641 2.66008,0.33151 4.5478,2.75661 4.2164,5.41671 -0.33086,2.66125 -2.75715,4.54992 -5.41823,4.21764 -1.30174,-0.16248 -2.48228,-0.84496 -3.2727,-1.89195 z m 98.85917,121.36746 c -2.20466,-2.87129 -2.85011,-6.64567 -1.72494,-10.08642 1.88215,-5.75691 8.07518,-8.89766 13.83182,-7.01469 5.75561,1.88268 8.89551,8.07447 7.01344,13.83028 -1.88266,5.75562 -8.07446,8.89554 -13.83028,7.01346 -2.10011,-0.68614 -3.94399,-1.99065 -5.29004,-3.74263 z m -73.88686,-94.15235 c -1.32699,-1.6307 -1.20392,-4.0012 0.28554,-5.48498 1.6016,-1.59464 4.19246,-1.58971 5.78798,0.011 1.59599,1.60144 1.59161,4.19346 -0.01,5.7895 -1.60144,1.59599 -4.19346,1.59161 -5.7895,-0.01 -0.0965,-0.0973 -0.188,-0.1993 -0.27425,-0.30574 z m 20.31012,24.705 c -0.51923,-0.60019 -0.88919,-1.31466 -1.07971,-2.08508 -0.66755,-2.69873 0.97881,-5.4277 3.67745,-6.09566 2.69873,-0.66754 5.4277,0.97881 6.09565,3.67745 0.66824,2.6996 -0.9791,5.42964 -3.67895,6.09688 -1.83817,0.45404 -3.77563,-0.16169 -5.01444,-1.59359 z m -75.69709,-96.004493 c -0.62097,-0.85038 -1.07842,-1.8088 -1.349,-2.82642 -1.20584,-4.53371 1.49228,-9.18647 6.02614,-10.39175 4.53372,-1.20585 9.18648,1.49228 10.39176,6.02615 1.20583,4.53372 -1.49229,9.18646 -6.02615,10.39174 -3.38568,0.90042 -6.97685,-0.37029 -9.04275,-3.19972 z m 88.13027,105.758973 c -0.73079,-0.91549 -1.18316,-2.02166 -1.30349,-3.18685 -0.34724,-3.36028 2.09565,-6.36569 5.45601,-6.71231 3.36029,-0.34724 6.36569,2.09566 6.71231,5.45601 0.34724,3.36029 -2.09566,6.3657 -5.45601,6.71232 -2.0717,0.21391 -4.10986,-0.64116 -5.40882,-2.26917 z m 27.6778,33.88827 c -1.70364,-2.04585 -2.41727,-4.73942 -1.94998,-7.3604 0.87486,-4.90792 5.56287,-8.17725 10.47074,-7.30212 4.90792,0.87487 8.17726,5.56286 7.30213,10.47074 -0.87486,4.90793 -5.56287,8.17727 -10.47075,7.30213 -2.09491,-0.37349 -3.9905,-1.4751 -5.35214,-3.11035 z m -14.31555,-19.92722 c -0.99299,-1.35139 -1.49952,-2.99901 -1.43732,-4.67485 0.15167,-4.09981 3.59756,-7.30077 7.69741,-7.15028 4.09992,0.15087 7.30158,3.59625 7.15179,7.6962 -0.15019,4.10102 -3.59671,7.30366 -7.69771,7.15302 -2.26644,-0.0831 -4.37082,-1.19678 -5.71417,-3.02409 z M -422.77135,-17.928163 c -0.6803,-0.88953 -1.23685,-1.86721 -1.65436,-2.90632 -2.55021,-6.34603 0.52671,-13.55788 6.87262,-16.10839 6.3468,-2.55087 13.55971,0.52696 16.10962,6.87414 2.55086,6.34681 -0.52697,13.55971 -6.87415,16.10962 -5.1625,2.07381 -11.07431,0.4504 -14.45373,-3.96905 z m 78.25907,96.088363 c -1.18701,-1.57678 -1.3153,-3.7108 -0.32576,-5.41844 1.36121,-2.34738 4.3676,-3.14687 6.715,-1.78571 2.34737,1.36122 3.14685,4.3676 1.7857,6.71501 -1.36121,2.34738 -4.36759,3.14686 -6.715,1.7857 -0.56849,-0.33016 -1.06493,-0.77106 -1.45994,-1.29656 z m 16.14196,18.3962 c -0.0767,-0.0887 -0.15029,-0.17995 -0.22073,-0.27364 -1.6491,-2.19692 -1.20473,-5.31477 0.99241,-6.96357 2.19692,-1.64909 5.31478,-1.20474 6.96358,0.99241 1.64909,2.19692 1.20473,5.31478 -0.99242,6.96357 -2.08788,1.56731 -5.03225,1.25343 -6.74284,-0.71877 z m -42.22022,-55.68012 c -0.99083,-1.25363 -1.52818,-2.80573 -1.52468,-4.40363 0.008,-3.908173 3.18258,-7.069963 7.09076,-7.062413 3.90818,0.008 7.06996,3.1826 7.0624,7.090773 -0.007,3.9083 -3.18125,7.0708 -7.08954,7.06392 -2.15986,-0.004 -4.19964,-0.99418 -5.53894,-2.68865 z m 16.95275,18.99684 c -1.26445,-1.48023 -1.71683,-3.48915 -1.20892,-5.3685 0.84896,-3.14393 4.08574,-5.00448 7.22974,-4.15573 3.14394,0.84895 5.00449,4.08575 4.15574,7.22974 -0.84896,3.14395 -4.08575,5.00449 -7.22975,4.15574 -1.14737,-0.30932 -2.17452,-0.95808 -2.94681,-1.86125 z m 40.06407,40.4209 c -0.21548,-0.26871 -0.40715,-0.55569 -0.57357,-0.85724 -1.61205,-2.92178 -0.55024,-6.59716 2.37159,-8.20911 2.92177,-1.61205 6.59715,-0.55024 8.2091,2.37159 1.61146,2.92109 0.55048,6.59542 -2.37006,8.20787 -2.57466,1.4216 -5.79893,0.78278 -7.63706,-1.51311 z m -15.98468,-24.3699 c -1.84148,-2.16099 -1.90594,-5.32005 -0.15414,-7.55435 2.03409,-2.59483 5.78676,-3.04899 8.38114,-1.01432 2.59377,2.0349 3.04668,5.78724 1.01158,8.38085 -2.03436,2.59347 -5.78581,3.04702 -8.37963,1.0131 -0.31311,-0.24577 -0.60087,-0.52223 -0.85895,-0.82528 z M -382.29619,2.439957 c -1.26035,-1.52308 -2.05662,-3.37617 -2.2941,-5.33879 -0.6832,-5.65757 3.34921,-10.79781 9.00675,-11.4812 5.65672,-0.68344 10.79672,3.34745 11.48149,9.00401 0.68414,5.6577 -3.34781,10.79873 -9.00553,11.48272 -3.48733,0.42145 -6.94952,-0.96015 -9.18861,-3.66674 z m 85.94338,104.973533 c -0.39378,-0.53371 -0.71343,-1.11831 -0.95019,-1.73787 -1.44607,-3.78769 0.45261,-8.03043 4.24055,-9.47584 3.78692,-1.44541 8.0286,0.45236 9.47462,4.23904 1.44606,3.7877 -0.45262,8.03043 -4.24056,9.47584 -3.08072,1.17564 -6.56731,0.15263 -8.52442,-2.50117 z m -41.35536,-55.42922 c -1.62167,-2.05779 -1.99066,-4.83669 -0.96215,-7.24635 1.55322,-3.63844 5.76174,-5.32904 9.40035,-3.77622 3.63836,1.55263 5.32957,5.76042 3.77774,9.39912 -1.55275,3.63976 -5.7625,5.33115 -9.40186,3.77745 -1.10362,-0.47099 -2.07125,-1.21165 -2.81408,-2.154 z m -17.12706,-25.583883 c -1.31671,-1.80871 -1.87655,-4.05943 -1.56063,-6.27423 0.66987,-4.70024 5.02277,-7.9678 9.72313,-7.29879 4.70141,0.66924 7.9699,5.02333 7.30002,9.72465 -0.66925,4.70141 -5.02333,7.96989 -9.72465,7.30002 -2.30048,-0.32788 -4.37028,-1.57297 -5.73787,-3.45165 z m 78.58809,93.351213 c -0.90088,-1.07936 -1.53382,-2.35642 -1.8471,-3.72699 -1.09872,-4.8007 1.90234,-9.58312 6.70305,-10.68183 4.8007,-1.09872 9.58312,1.90234 10.68183,6.70304 1.09872,4.8007 -1.90234,9.58313 -6.70305,10.68184 -3.27027,0.74892 -6.68414,-0.40107 -8.83473,-2.97606 z m -35.20421,-44.37883 c -2.30105,-2.92852 -2.00935,-7.12404 0.67475,-9.70603 2.8861,-2.77633 7.47638,-2.68746 10.25284,0.19852 2.77634,2.88609 2.68746,7.47637 -0.1985,10.25284 -2.8861,2.77633 -7.47638,2.68746 -10.25285,-0.19852 -0.16777,-0.17421 -0.32669,-0.35673 -0.47627,-0.54678 z m 56.92523,62.03865 c -1.26593,-1.64435 -2.03295,-3.61769 -2.2098,-5.68534 -0.51057,-5.96132 3.9083,-11.20776 9.86964,-11.71803 5.96119,-0.50968 11.20686,3.90966 11.71653,9.87085 0.51057,5.96133 -3.90829,11.20777 -9.86964,11.71805 -3.67479,0.31411 -7.25693,-1.26301 -9.50673,-4.18553 z m 24.04781,26.17169 c -2.2489,-2.58131 -3.40339,-5.93738 -3.21846,-9.35594 0.39335,-7.25859 6.59709,-12.8236 13.85562,-12.42905 7.25739,0.3948 12.82073,6.59793 12.42631,13.85533 -0.39401,7.25749 -6.59661,12.82153 -13.8541,12.42783 -3.55151,-0.19333 -6.87353,-1.81592 -9.20937,-4.49817 z M -316.60392,46.00895 c -2.53883,-2.84857 -2.92598,-7.01874 -0.95493,-10.286 2.48379,-4.115253 7.83348,-5.437623 11.94854,-2.953523 4.11505,2.48324 5.43803,7.832133 2.95503,11.947323 -2.48324,4.11504 -7.83212,5.43803 -11.94731,2.95503 -0.74666,-0.45085 -1.42131,-1.0114 -2.00133,-1.66283 z m 27.47595,32.39992 c -0.13354,-0.15917 -0.26155,-0.32292 -0.3834,-0.49122 -2.85197,-3.94132 -1.96916,-9.44832 1.97189,-12.30067 3.94133,-2.85197 9.44833,-1.96915 12.30068,1.97189 2.85326,3.94128 1.97093,9.44938 -1.97067,12.3022 -3.74617,2.71023 -8.95019,2.06297 -11.91832,-1.48235 z m -73.05216,-99.914703 c -1.71562,-2.24991 -2.61964,-5.01403 -2.56505,-7.8429 0.13408,-6.92169 5.85376,-12.42424 12.77546,-12.29045 6.9217,0.13407 12.42425,5.85376 12.29046,12.77547 -0.13408,6.92169 -5.85376,12.42424 -12.77546,12.29045 -3.8246,-0.0742 -7.40602,-1.89061 -9.72541,-4.93257 z m 29.43558,34.16664 c -2.19311,-2.6598 -2.9326,-6.23042 -1.9762,-9.54246 1.60029,-5.54207 7.3903,-8.73754 12.93238,-7.13731 5.54208,1.60029 8.73755,7.39029 7.13732,12.93238 -1.60029,5.54207 -7.39029,8.73755 -12.93238,7.13732 -2.0227,-0.58401 -3.82171,-1.76562 -5.16112,-3.38993 z m 69.70483,72.826103 c -0.37218,-0.48257 -0.7024,-0.9961 -0.98719,-1.53487 -2.76572,-5.22378 -0.77294,-11.70055 4.45094,-14.46607 5.22443,-2.76509 11.70123,-0.77103 14.46576,4.45369 2.7645,5.22374 0.77128,11.69948 -4.45217,14.46454 -4.60375,2.43705 -10.29351,1.20545 -13.47734,-2.91729 z m -27.55784,-43.65366 c -3.1946,-3.88492 -3.21018,-9.482583 -0.0371,-13.385143 3.68309,-4.53024 10.34109,-5.21747 14.87189,-1.53508 4.5316,3.68284 5.21945,10.342053 1.5363,14.873413 -3.68338,4.53191 -10.34348,5.21912 -14.87463,1.53478 -0.54718,-0.44484 -1.04847,-0.94332 -1.49641,-1.48797 z m 58.63976,57.81499 c -1.06005,-1.21393 -1.8851,-2.61443 -2.43318,-4.13 -2.44311,-6.75186 1.04963,-14.2059 7.80138,-16.64931 6.75266,-2.44378 14.20775,1.04988 16.65054,7.8029 2.44311,6.75187 -1.04963,14.20589 -7.80138,16.6493 -5.04305,1.82528 -10.6894,0.36661 -14.21736,-3.67289 z M -304.28989,-0.817213 c -2.80764,-3.69426 -3.37494,-8.62644 -1.47934,-12.86167 2.8624,-6.39649 10.36811,-9.26157 16.76471,-6.39942 6.3965,2.86239 9.26159,10.36811 6.39943,16.76472 -2.86193,6.39782 -10.3689,9.26367 -16.76624,6.40065 -1.94075,-0.86876 -3.63206,-2.21131 -4.91856,-3.90428 z m 45.78004,42.234033 c -3.98528,-5.2571 -3.34,-12.678443 1.4928,-17.168833 5.19739,-4.82832 13.32491,-4.52885 18.15287,0.66889 4.82789,5.19682 4.52911,13.323373 -0.66737,18.151643 -5.19739,4.82833 -13.32492,4.52885 -18.15288,-0.66889 -0.29131,-0.31366 -0.56682,-0.64166 -0.82543,-0.9828 z"
+ id="path45821-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccscccccccccccccccccccccccccccscccccccccccccscccccscccccccccccccccccccccccccccccccccccccccscccccccsccccscccccccccccccccccccccccsccccscsccccccccccccccsccccccccscccsscccccccccccccccccccccccccscsccsccccscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccssccscccccsccccsccccccccccccccccccccccccccccccccsccccsccccscccscccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccsscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsscccsccccscccccccccccccccccccccccccccccccscccssscsccccccccccccccsccccccccccccccccssscsccccscccccccccscccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m -812.49649,409.41705 c 0,0 21.28047,1.39989 48.62312,-1.34004 11.07305,-1.10952 53.11134,-5.76585 84.51126,-13.22525 0,0 38.28503,-8.88578 58.7435,-16.9461 21.40602,-8.43701 33.03562,-15.54486 38.22015,-25.52535 -0.24464,-2.03429 1.55026,-9.27004 -8.38153,-13.52748 -25.39181,-10.88453 -54.73028,-8.64173 -112.82256,-9.45878 -64.42866,-1.79156 -85.93924,-12.88053 -97.42045,-21.85886 -11.01351,-9.1133 -5.69808,-34.61479 41.03439,-57.41736 23.53592,-12.13183 115.98191,-34.91594 115.98191,-34.91594 -31.30818,-15.85172 -89.67568,-43.69173 -101.67591,-49.7084 -10.52484,-5.27688 -27.36414,-13.2142 -31.07363,-22.95227 -4.19322,-9.34345 9.60989,-17.53285 17.33633,-19.9086 24.8835,-7.71561 60.05553,-12.67025 92.09363,-13.45346 16.1041,-0.39347 18.71049,-1.49716 18.71049,-1.49716 22.19458,-4.03024 36.70675,-20.030636 30.42527,-45.134176 -5.66246,-25.63018 -34.6335,-40.48327 -62.02024,-35.03909 -25.79016,5.12654 -87.89855,24.51691 -87.89855,24.51691 76.93842,-1.31696 89.82662,-0.08 95.64046,8.27383 3.43335,4.93337 -1.45648,11.77543 -21.95103,15.44194 -22.31219,3.99167 -68.71783,8.95667 -68.71783,8.95667 -44.5297,3.12336 -75.9095,3.56181 -85.16738,24.453236 -6.04831,13.64859 6.74679,25.56844 12.37169,33.04888 23.73629,27.14868 57.83871,41.61862 79.79985,52.2998 8.26321,4.01885 32.47649,11.53874 32.47649,11.53874 -71.01583,-3.50491 -122.05375,19.67737 -151.89702,46.13511 -33.73014,33.09839 -18.41175,72.10252 51.36816,95.63088 41.21482,13.89679 61.6519,20.42399 122.93038,14.16069 36.10363,-2.32533 41.80632,-1.16111 42.18935,1.93181 0.53907,4.35458 -40.00509,15.50966 -51.07121,18.94092 -28.15266,8.7292 -101.98946,26.49291 -102.35909,26.57903 z"
+ id="use9653"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ inkscape:transform-center-y="2.1453047"
+ inkscape:tile-x0="337.8419"
+ inkscape:tile-y0="368.94759"
+ inkscape:transform-center-x="-2.9490228" />
+ </g>
+ <g
+ inkscape:label="logo"
+ id="layer1-9-0"
+ style="display:inline;stroke:none"
+ transform="matrix(0.55257257,0,0,0.55257257,78.970972,8.7652952)">
+ <path
+ style="color:#000000;fill:url(#radialGradient5366-1);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715532999999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 596.41905,752.36218 c 0,108.47925 -87.9398,196.41905 -196.41905,196.41905 -108.47925,0 -196.41905,-87.9398 -196.41905,-196.41905 0,-108.47924 87.9398,-196.41905 196.41905,-196.41905 108.47925,0 196.41905,87.93981 196.41905,196.41905 z"
+ id="path54245-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;fill:#59509f;fill-opacity:0.99215686000000003;fill-rule:nonzero;stroke:none;stroke-width:1.19700003000000010;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 246.71273,875.02715 c 5.30707,-1.91678 11.21951,-1.07383 15.77945,2.24972 6.38683,4.67105 8.49739,13.29908 5.38115,20.57227 12.14398,11.00811 25.39824,20.45943 39.88974,28.11784 3.68734,-6.41948 11.5721,-9.83951 18.78293,-8.16326 9.02961,2.10252 14.64463,11.12745 12.54091,20.15677 -0.0896,0.35677 -0.19093,0.71049 -0.30378,1.0606 15.57369,5.04379 31.71723,8.11936 48.05451,9.15505 -1.01104,-8.7225 4.95288,-16.72102 13.60117,-18.24127 9.02229,-1.57386 17.61208,4.46455 19.18548,13.48693 0.23908,1.41366 0.29382,2.85238 0.16284,4.28012 16.62401,-1.6842 32.96491,-5.48438 48.6262,-11.30833 -0.33933,-0.41747 -0.65852,-0.8509 -0.95541,-1.29955 -4.91386,-7.59756 -2.73772,-17.74012 4.86036,-22.65318 7.59692,-4.91331 17.73846,-2.73794 22.65196,4.85885 1.08924,1.69488 1.85648,3.57615 2.26323,5.54937 9.13587,-5.12543 17.84673,-10.97404 26.04911,-17.48978 4.92512,-4.05567 9.64954,-8.34908 14.15644,-12.86493 -0.7586,-0.35369 -1.48864,-0.7657 -2.18351,-1.23232 -7.39953,-5.01207 -9.3356,-15.0733 -4.32456,-22.47351 5.01174,-7.40089 15.0742,-9.33762 22.47503,-4.32579 1.78793,1.21147 3.31531,2.76856 4.49212,4.5795 9.86282,-13.43645 17.9739,-28.07453 24.13738,-43.56082 -0.68657,-0.0382 -1.36996,-0.12057 -2.04592,-0.24672 -8.66506,-1.70098 -14.31034,-10.10459 -12.60879,-18.76953 1.70158,-8.66385 10.10398,-14.30823 18.76801,-12.60757 1.88133,0.3763 3.67957,1.08815 5.30871,2.1015 3.50739,-15.83095 5.03944,-32.03554 4.56115,-48.24332 -0.2772,0.0764 -0.55644,0.14512 -0.83739,0.20623 -8.53607,1.79747 -16.91306,-3.66524 -18.71053,-12.20131 -1.79747,-8.53607 3.66525,-16.91306 12.20133,-18.71053 1.41178,-0.29142 2.85682,-0.3882 4.29486,-0.28765 -2.93469,-15.4206 -7.70875,-30.43344 -14.21986,-44.71674 -7.05457,4.60498 -16.49076,2.77874 -21.31784,-4.12577 -4.93035,-7.06855 -3.19668,-16.79562 3.87217,-21.72555 0.83185,-0.57788 1.71803,-1.07333 2.64593,-1.47943 -3.46207,-5.27744 -7.17669,-10.3848 -11.13091,-15.30428 -5.68959,-6.93614 -11.84801,-13.47404 -18.43199,-19.56769 -4.82679,6.34987 -13.70035,7.96905 -20.45875,3.73318 -7.21117,-4.52518 -9.38873,-14.03929 -4.86378,-21.2506 0.40059,-0.6274 0.84611,-1.22495 1.33305,-1.78798 -12.41641,-8.42207 -25.75757,-15.39266 -39.76209,-20.7752 -1.80346,4.47435 -5.64318,7.8125 -10.32487,8.97615 -8.06632,1.99539 -16.22285,-2.92647 -18.21758,-10.99296 -0.54302,-2.22521 -0.57078,-4.54503 -0.0812,-6.7826 -14.85942,-3.19105 -30.03921,-4.64532 -45.2342,-4.3336 1.86804,8.01264 -3.04689,16.03973 -11.03281,18.01887 -8.06632,1.99539 -16.22284,-2.92647 -18.21758,-10.99296 -0.3548,-1.44099 -0.49445,-2.92656 -0.4144,-4.40843 -15.14883,2.61374 -29.93813,6.99823 -44.06378,13.06328 0.62478,0.58648 1.19766,1.22589 1.71226,1.91109 4.92654,6.56452 3.59952,15.87973 -2.96416,20.80739 -6.56446,4.92784 -15.88078,3.60131 -20.80891,-2.96294 -1.51864,-2.0258 -2.49452,-4.40601 -2.83521,-6.91481 -7.42416,4.43358 -14.54721,9.35296 -21.32258,14.72598 -6.17316,5.08504 -12.02978,10.5426 -17.53702,16.34224 2.42068,0.0763 4.78493,0.75011 6.88208,1.96152 7.01434,4.06792 9.4034,13.05153 5.33636,20.06639 -4.06754,7.0157 -13.05241,9.40546 -20.06792,5.33758 -3.72641,-2.16811 -6.31166,-5.86438 -7.07005,-10.10839 -37.96812,49.55357 -50.09792,114.21401 -32.67095,174.15927 2.96174,1.46395 5.43916,3.74997 7.136,6.58472 2.83741,4.75705 3.21007,10.58949 1.00115,15.66897 6.89206,16.19628 15.93154,31.39185 26.87526,45.1779 z m -8.50817,-35.53011 c -4.90963,-6.08526 -3.95644,-14.99839 2.12897,-19.90783 6.08593,-4.90878 14.99893,-3.95437 19.90753,2.13171 4.9083,6.08535 3.95462,14.99735 -2.1302,19.90631 -6.08534,4.90831 -14.99735,3.95462 -19.9063,-2.13019 z m 47.38703,49.78827 c -3.53469,-4.36911 -4.11121,-10.42946 -1.46335,-15.38646 3.63858,-6.81387 12.11212,-9.3877 18.92576,-5.74871 6.81401,3.63914 9.38724,12.11345 5.74718,18.92697 -3.63955,6.81267 -12.11262,9.38517 -18.92545,5.74596 -1.65027,-0.88088 -3.10705,-2.08387 -4.28414,-3.53776 z M 213.50702,774.09846 c -1.07227,-1.41607 -1.87186,-3.01919 -2.35812,-4.72756 -2.1667,-7.61133 2.2465,-15.53812 9.85758,-17.70572 7.61218,-2.16738 15.54002,2.24679 17.70694,9.8591 2.16669,7.61134 -2.24651,15.53811 -9.85758,17.70571 -5.68495,1.61871 -11.7805,-0.41919 -15.34882,-5.13153 z m 64.61074,65.20147 c -3.93971,-4.50583 -3.82535,-11.26356 0.26457,-15.63352 4.39865,-4.69931 11.77423,-4.94239 16.47274,-0.5429 4.69758,4.39828 4.94076,11.77174 0.54319,16.46999 -4.39809,4.69894 -11.77275,4.94269 -16.47152,0.54442 -0.28344,-0.26569 -0.55347,-0.54533 -0.80898,-0.83799 z m 69.83284,77.01637 c -2.26549,-2.79125 -3.3539,-6.35556 -3.03413,-9.93624 0.67978,-7.60057 7.39243,-13.21092 14.99298,-12.53096 7.60064,0.67902 13.21168,7.3911 12.53247,14.99174 -0.67977,7.60057 -7.3924,13.21092 -14.99296,12.53097 -3.71917,-0.33246 -7.14545,-2.1561 -9.49836,-5.05551 z M 250.512,788.78667 c -0.67676,-0.82462 -1.23918,-1.73678 -1.67097,-2.71227 -2.63734,-5.95578 0.0519,-12.92196 6.00705,-15.5607 5.9566,-2.63915 12.92481,0.0505 15.56345,6.00733 2.63797,5.95653 -0.0521,12.92375 -6.00856,15.56193 -4.84509,2.14613 -10.52669,0.7979 -13.89097,-3.29629 z m 71.94488,85.67888 c -2.77528,-3.16589 -3.60105,-7.59424 -2.15333,-11.54761 2.18621,-5.97027 8.79826,-9.03796 14.76861,-6.85194 5.97027,2.18621 9.03795,8.79826 6.85193,14.7686 -2.18622,5.97027 -8.79827,9.03795 -14.76861,6.85193 -1.8113,-0.66309 -3.42696,-1.77065 -4.6986,-3.22098 z m -12.33306,-40.45213 c -2.57194,-3.32724 -2.67668,-7.94179 -0.25842,-11.38235 3.04658,-4.33415 9.02988,-5.37787 13.36396,-2.3312 4.33416,3.04658 5.37788,9.02988 2.33119,13.36397 -3.04657,4.33415 -9.02987,5.37788 -13.36396,2.33119 -0.78631,-0.55295 -1.48504,-1.22094 -2.07277,-1.98161 z m -27.65294,-37.31354 c -0.36817,-0.41324 -0.70042,-0.85714 -0.99272,-1.32716 -2.83245,-4.55291 -1.43812,-10.53991 3.11446,-13.37291 4.55291,-2.8337 10.54097,-1.43984 13.37443,3.11324 2.83427,4.55357 1.4396,10.54266 -3.11476,13.37566 -4.01255,2.49607 -9.23942,1.74089 -12.38137,-1.78886 z m -65.97761,-92.83373 c -2.27367,-3.01164 -3.28423,-6.79076 -2.81723,-10.53529 0.99148,-7.94898 8.23869,-13.58948 16.1878,-12.59894 7.95016,0.99084 13.59159,8.23924 12.60017,16.18932 -0.99222,7.94892 -8.24,13.58875 -16.18902,12.59743 -3.89047,-0.48485 -7.41901,-2.52388 -9.78172,-5.65252 z m 28.3976,27.31775 c -1.70791,-2.0849 -2.66015,-4.68633 -2.70197,-7.38114 -0.10281,-6.59343 5.15873,-12.02187 11.75215,-12.12494 6.59449,-0.1035 12.02394,5.15915 12.12619,11.75367 0.10196,6.59331 -5.16008,12.02103 -11.75339,12.12343 -3.64341,0.0571 -7.1135,-1.55251 -9.42298,-4.37102 z m 105.4186,126.43488 c -1.71251,-2.20912 -2.36234,-5.06163 -1.77573,-7.79454 1.09763,-5.1172 6.13572,-8.37572 11.25294,-7.27815 5.1172,1.09764 8.37572,6.13573 7.27815,11.25294 -1.09764,5.1172 -6.13573,8.37573 -11.25294,7.27815 -2.18446,-0.46815 -4.13328,-1.69304 -5.50242,-3.4584 z m 26.08452,31.74822 c -1.69544,-1.92738 -2.68901,-4.37164 -2.81913,-6.93531 -0.3169,-6.27354 4.51213,-11.61605 10.78569,-11.93253 6.27354,-0.31692 11.61605,4.51213 11.93253,10.78568 0.31623,6.27251 -4.51172,11.61401 -10.78417,11.9313 -3.46648,0.17503 -6.82314,-1.24246 -9.11492,-3.84914 z m -67.24634,-90.15409 c -2.83099,-3.38669 -2.38052,-8.4271 1.00612,-11.25814 3.38727,-2.83145 8.42867,-2.38026 11.25936,1.00764 2.83098,3.38669 2.38052,8.4271 -1.00612,11.25814 -3.38727,2.83146 -8.42868,2.38026 -11.25936,-1.00764 z m -37.86533,-48.83185 c -1.25019,-1.40839 -2.06938,-3.14633 -2.36017,-5.00696 -0.83902,-5.3628 2.82813,-10.3904 8.1909,-11.22959 5.36375,-0.83972 10.3924,2.82847 11.23083,8.19242 0.83806,5.36268 -2.82955,10.38947 -8.19214,11.22808 -3.3057,0.5176 -6.64765,-0.6821 -8.86942,-3.18395 z m 65.1051,76.46878 c -2.03769,-2.43146 -2.42228,-5.84637 -0.97646,-8.67017 1.98735,-3.8811 6.74444,-5.41661 10.62583,-3.4298 3.88111,1.98735 5.41662,6.74444 3.4298,10.62584 -1.98734,3.8811 -6.74443,5.41661 -10.62583,3.4298 -0.94036,-0.48122 -1.77461,-1.14624 -2.45334,-1.95567 z m 78.75091,90.02543 c -1.06755,-1.31226 -1.88223,-2.81131 -2.40202,-4.42113 -2.31608,-7.17397 1.62206,-14.86716 8.79606,-17.18317 7.17396,-2.31608 14.86716,1.62206 17.18317,8.79606 2.31607,7.17397 -1.62206,14.86716 -8.79606,17.18317 -5.3578,1.72962 -11.22787,-0.008 -14.78115,-4.37493 z M 294.56263,762.5422 c -0.61891,-0.78907 -1.08572,-1.68633 -1.37664,-2.64605 -1.29818,-4.27511 1.11486,-8.7932 5.38985,-10.09177 4.27511,-1.29818 8.7932,1.11487 10.09177,5.38985 1.29886,4.27595 -1.11514,8.7951 -5.39137,10.093 -3.19269,0.96938 -6.65302,-0.12072 -8.71361,-2.74503 z m 36.69707,35.65901 c -1.85944,-2.51833 -1.68691,-5.9981 0.41254,-8.32013 2.43633,-2.69573 6.59668,-2.90596 9.29235,-0.46958 2.69572,2.43633 2.90596,6.59668 0.46958,9.29235 -2.43633,2.69572 -6.59668,2.90596 -9.29235,0.46958 -0.32571,-0.29387 -0.6212,-0.61957 -0.88214,-0.9722 z m 40.59425,43.29306 c -1.30606,-1.55331 -1.95539,-3.55445 -1.81008,-5.57867 0.30849,-4.29736 4.04251,-7.53082 8.33983,-7.22182 4.29735,0.30849 7.53081,4.04251 7.22181,8.33983 -0.30848,4.29735 -4.04251,7.53081 -8.33982,7.22181 -2.10294,-0.1512 -4.05512,-1.14722 -5.41174,-2.76115 z m -56.25794,-71.026 c -0.39029,-0.45835 -0.7166,-0.96752 -0.97002,-1.5136 -1.54849,-3.33611 -0.0993,-7.29587 3.23682,-8.84432 3.33612,-1.54849 7.29588,-0.0993 8.84433,3.23682 1.54849,3.33612 0.0993,7.29588 -3.23682,8.84433 -2.71385,1.25967 -5.93466,0.55483 -7.87431,-1.72323 z m 41.04395,47.15107 c -1.27668,-1.72409 -1.62029,-3.96715 -0.91833,-5.99438 1.17551,-3.39117 4.87729,-5.18757 8.26864,-4.01262 3.39112,1.1749 5.18814,4.876 4.01413,8.26743 -1.17437,3.3924 -4.8767,5.19024 -8.26894,4.01535 -1.23759,-0.42932 -2.31658,-1.22258 -3.0955,-2.27578 z m 39.35607,45.98568 c -0.90641,-1.16522 -1.52444,-2.52828 -1.80359,-3.9779 -0.97747,-5.07774 2.34693,-9.98631 7.42483,-10.96295 5.07774,-0.97747 9.98631,2.34694 10.96294,7.42483 0.97748,5.07774 -2.34692,9.98631 -7.42483,10.96296 -3.45843,0.66533 -6.99764,-0.66659 -9.15935,-3.44694 z m -46.30495,-68.19417 c -1.48557,-1.85277 -1.59011,-4.45748 -0.25846,-6.42379 1.67696,-2.47747 5.04511,-3.12583 7.52196,-1.44794 2.4761,1.67728 3.1238,5.04419 1.44672,7.52042 -1.67696,2.47748 -5.04511,3.12585 -7.52196,1.44796 -0.44873,-0.30402 -0.84928,-0.67369 -1.18826,-1.09665 z m -16.32816,-21.21208 c -0.0772,-0.10369 -0.15143,-0.20955 -0.22147,-0.3182 -1.64387,-2.54174 -0.91639,-5.93481 1.62498,-7.57923 2.54238,-1.64442 5.93649,-0.91617 7.58048,1.6265 1.64259,2.54176 0.91465,5.93376 -1.62622,7.57773 -2.41552,1.56258 -5.62804,0.992 -7.35773,-1.30683 z m -54.16526,-71.35903 c -2.17661,-2.45916 -2.99942,-5.83404 -2.19889,-9.01905 1.33996,-5.32809 6.7451,-8.56144 12.07339,-7.22229 5.3281,1.33929 8.56209,6.74381 7.22381,12.07217 -1.33871,5.32934 -6.74444,8.5642 -12.07368,7.22504 -1.94454,-0.48902 -3.69595,-1.55419 -5.02463,-3.05587 z m 16.35906,20.02783 c -1.31354,-1.67788 -1.92134,-3.8017 -1.69434,-5.92046 0.4817,-4.49635 4.51667,-7.75123 9.01313,-7.2706 4.49751,0.48105 7.75334,4.5172 7.27183,9.01466 -0.4817,4.49635 -4.51667,7.75123 -9.01314,7.2706 -2.20092,-0.23526 -4.21288,-1.35143 -5.57748,-3.0942 z m 16.29866,15.1406 c -0.98507,-1.16016 -1.54849,-2.61958 -1.59866,-4.1407 -0.12299,-3.72141 2.79448,-6.83774 6.5159,-6.96004 3.72141,-0.12299 6.83773,2.79448 6.96003,6.51591 0.1223,3.72035 -2.79405,6.83566 -6.51438,6.95879 -2.05624,0.0685 -4.0312,-0.80572 -5.36289,-2.37396 z M 262.4588,675.34176 c -2.79591,-3.42316 -3.50032,-8.09946 -1.83689,-12.19435 2.51228,-6.18373 9.5615,-9.16036 15.74552,-6.64877 6.18373,2.51229 9.16036,9.56151 6.64877,15.74552 -2.51229,6.18372 -9.5615,9.16035 -15.74551,6.64877 -1.87612,-0.76194 -3.53074,-1.98304 -4.81189,-3.55117 z m 168.77519,206.7959 c -0.67203,-0.76205 -1.23758,-1.61174 -1.68118,-2.52584 -2.70933,-5.58219 -0.38073,-12.3038 5.20122,-15.01358 5.58291,-2.70995 12.30556,-0.38049 15.01481,5.20275 2.70933,5.58219 0.38072,12.30379 -5.20123,15.01358 -4.54124,2.20425 -9.99505,1.10933 -13.33362,-2.67691 z m -58.62645,-73.8004 c -0.98818,-1.2298 -1.38346,-2.83291 -1.07986,-4.38103 0.56956,-2.89928 3.38158,-4.78789 6.28086,-4.21839 2.89931,0.56886 4.78858,3.38029 4.21989,6.27963 -0.56955,2.89928 -3.38157,4.78789 -6.28085,4.21838 -1.23776,-0.24291 -2.3499,-0.91534 -3.14004,-1.89859 z m 14.62863,17.17031 c -0.73333,-0.98761 -1.16752,-2.16508 -1.25094,-3.39235 -0.24001,-3.53734 2.43248,-6.59971 5.96976,-6.84067 3.53748,-0.24091 6.60062,2.43111 6.8422,5.96853 0.24161,3.5385 -2.43151,6.60266 -5.97006,6.84344 -2.18117,0.14822 -4.28788,-0.82354 -5.59096,-2.57895 z M 348.7977,775.77546 c -1.63192,-1.88368 -1.42771,-4.73367 0.45615,-6.36537 1.88436,-1.63106 4.7342,-1.42561 6.36509,0.4589 1.63059,1.88378 1.42585,4.73262 -0.45739,6.36385 -1.88379,1.63059 -4.73263,1.42585 -6.36385,-0.45738 z m -22.211,-27.61824 c -0.52473,-0.70018 -0.87636,-1.51457 -1.02629,-2.3766 -0.52593,-3.01878 1.49471,-5.89241 4.51344,-6.41872 3.01878,-0.52592 5.89241,1.49472 6.41871,4.51344 0.52593,3.01878 -1.49471,5.89241 -4.51344,6.41872 -2.05631,0.35868 -4.13995,-0.467 -5.39242,-2.13684 z m 37.85857,42.9503 c -1.174,-1.35217 -1.42497,-3.27559 -0.63716,-4.88369 1.08347,-2.21064 3.75382,-3.12444 5.96451,-2.04102 2.21051,1.0829 3.12491,3.7525 2.04254,5.96328 -1.08303,2.21198 -3.75464,3.12652 -5.96602,2.04225 -0.53557,-0.26271 -1.01295,-0.63025 -1.40387,-1.08082 z m -24.24273,-35.88883 c -0.35774,-0.43871 -0.63015,-0.94055 -0.80425,-1.47919 -0.77529,-2.40111 0.54324,-4.97601 2.94462,-5.75045 2.40031,-0.77462 4.97413,0.54296 5.74923,2.94311 0.77462,2.40031 -0.54296,4.97413 -2.94311,5.74923 -1.7927,0.57923 -3.75712,-0.002 -4.94649,-1.4627 z m 69.58314,85.93034 c -0.61562,-0.73021 -1.09017,-1.56845 -1.39942,-2.47208 -1.37896,-4.02677 0.76781,-8.40893 4.79474,-9.78739 4.02667,-1.37786 8.40791,0.76936 9.78587,4.79598 1.37896,4.02676 -0.76782,8.40892 -4.79475,9.78738 -3.00723,1.029 -6.33771,0.10612 -8.38644,-2.32389 z m -48.51672,-66.16408 c -1.07353,-1.40312 -1.01022,-3.36824 0.15147,-4.69929 1.34894,-1.54572 3.6956,-1.70505 5.2411,-0.35586 1.54572,1.34895 1.70505,3.6956 0.35585,5.2411 -1.34894,1.54572 -3.6956,1.70506 -5.2411,0.35586 -0.18678,-0.16321 -0.35671,-0.34474 -0.50733,-0.5418 z m -9.11547,-15.49974 c -0.22471,-0.25452 -0.41401,-0.53824 -0.56254,-0.84357 -0.90741,-1.86826 -0.12802,-4.11837 1.74058,-5.02509 1.86826,-0.90742 4.11837,-0.12803 5.0251,1.74057 0.9062,1.86821 0.12638,4.11732 -1.74181,5.02357 -1.51944,0.73746 -3.34416,0.3712 -4.46133,-0.89548 z m 32.45672,39.53878 c -0.75273,-0.86369 -1.13927,-1.98672 -1.07754,-3.13073 0.132,-2.42823 2.20721,-4.28984 4.63546,-4.15833 2.42934,0.13133 4.29192,2.2077 4.15956,4.63697 -0.132,2.42823 -2.20721,4.28984 -4.63546,4.15834 -1.18871,-0.0649 -2.3005,-0.60823 -3.08202,-1.50625 z m -8.82448,-13.32547 c -0.73722,-0.96073 -0.95288,-2.22334 -0.57645,-3.37434 0.62952,-1.92636 2.70152,-2.9776 4.62784,-2.34795 1.92637,0.62951 2.97762,2.70152 2.34797,4.62785 -0.63016,1.92639 -2.70283,2.97701 -4.62908,2.34643 -0.70274,-0.22947 -1.31978,-0.66586 -1.77028,-1.25199 z m 22.66784,25.56845 c -0.52265,-0.64873 -0.88455,-1.41182 -1.05618,-2.22702 -0.60115,-2.85657 1.22737,-5.65956 4.08398,-6.2605 2.8558,-0.60146 5.65859,1.2256 6.2608,4.08125 0.60215,2.8567 -1.22593,5.66054 -4.08277,6.26202 -1.94623,0.41023 -3.95797,-0.30691 -5.20583,-1.85575 z m -26.80881,-38.03713 c -0.85646,-1.03164 -0.94084,-2.50094 -0.20807,-3.62382 0.92246,-1.41373 2.81611,-1.81233 4.2302,-0.89044 1.4151,0.92212 1.81436,2.817 0.89167,4.23172 -0.92301,1.41395 -2.81749,1.81194 -4.23143,0.88891 -0.25651,-0.16684 -0.48654,-0.37124 -0.68237,-0.60637 z m -9.42535,-11.81191 c -0.0451,-0.0574 -0.0878,-0.11677 -0.12825,-0.17761 -0.95408,-1.41903 -0.57654,-3.34288 0.84308,-4.29609 1.41906,-0.95281 3.34184,-0.57479 4.29458,0.84431 0.95227,1.41842 0.57503,3.34018 -0.84279,4.29335 -1.3479,0.90644 -3.16721,0.61653 -4.16664,-0.66395 z m -31.63666,-40.18022 c -0.99168,-1.32651 -1.34738,-3.02306 -0.972,-4.63617 0.70353,-3.02165 3.72368,-4.90061 6.74519,-4.19647 3.02041,0.70412 4.8985,3.72305 4.19525,6.74367 -0.70344,3.02044 -3.72177,4.89916 -6.74245,4.19676 -1.29025,-0.30019 -2.43288,-1.04675 -3.22599,-2.10779 z m 9.78954,11.57585 c -0.75819,-0.93353 -1.12199,-2.12618 -1.01518,-3.32406 0.22713,-2.54418 2.47435,-4.42212 5.01843,-4.19375 2.54304,0.22779 4.42002,2.47384 4.19251,5.01691 -0.22778,2.54305 -2.47384,4.42003 -5.01691,4.19253 -1.24468,-0.11111 -2.39139,-0.72132 -3.17885,-1.69163 z m -19.15127,-26.50053 c -1.61213,-1.90485 -2.05586,-4.5378 -1.15705,-6.86579 1.35749,-3.51517 5.30737,-5.26454 8.82271,-3.90749 3.5151,1.35688 5.26507,5.30606 3.909,8.82147 -1.35639,3.51641 -5.3068,5.26717 -8.82299,3.91024 -1.06684,-0.41191 -2.01305,-1.08534 -2.75167,-1.95843 z m 28.50146,34.88755 c -0.56702,-0.64541 -0.89898,-1.46368 -0.94188,-2.32172 -0.1055,-2.09842 1.50951,-3.88534 3.60788,-3.9919 2.09855,-0.10637 3.8862,1.50814 3.99342,3.60665 0.10618,2.09946 -1.50992,3.88738 -3.6094,3.99313 -1.15965,0.059 -2.28279,-0.4146 -3.05002,-1.28616 z m 90.15982,110.24719 c -0.13405,-0.17254 -0.26196,-0.34974 -0.38341,-0.53136 -2.84888,-4.24 -1.72086,-9.98669 2.51939,-12.83517 4.24002,-2.84759 9.98563,-1.71913 12.83365,2.52062 2.84887,4.23999 1.72086,9.98668 -2.51939,12.83516 -4.02909,2.7067 -9.46514,1.83814 -12.45021,-1.98928 z m -55.17406,-71.14752 c -0.5698,-0.68471 -0.80831,-1.58601 -0.65175,-2.46292 0.29349,-1.64139 1.86156,-2.73444 3.50313,-2.44192 1.64144,0.29279 2.73515,1.86027 2.44344,3.5019 -0.29216,1.64265 -1.86085,2.73727 -3.50342,2.44467 -0.7013,-0.12512 -1.3358,-0.4941 -1.7914,-1.04173 z m -26.57025,-33.51696 c -0.30297,-0.38991 -0.50907,-0.84618 -0.60204,-1.33114 -0.32662,-1.69877 0.78554,-3.34073 2.48425,-3.66767 1.69877,-0.32662 3.34072,0.78553 3.66767,2.48424 0.32661,1.69876 -0.78553,3.34072 -2.48424,3.66767 -1.15743,0.223 -2.34208,-0.22258 -3.06564,-1.1531 z m 59.98659,74.10847 c -0.21571,-0.28923 -0.40637,-0.59631 -0.56986,-0.91797 -1.58513,-3.12445 -0.33704,-6.94231 2.78759,-8.5271 3.12445,-1.58513 6.94231,-0.33704 8.5271,2.78758 1.58514,3.12445 0.33705,6.94232 -2.78758,8.52711 -2.75392,1.39662 -6.11343,0.60728 -7.95725,-1.86962 z m -24.98904,-31.04345 c -0.42366,-0.55037 -0.68037,-1.21081 -0.73948,-1.90284 -0.17051,-1.99421 1.30747,-3.74923 3.30161,-3.92049 1.99521,-0.1712 3.75126,1.30786 3.92172,3.30313 0.17121,1.99522 -1.30785,3.75126 -3.30313,3.92173 -1.22969,0.10474 -2.42819,-0.42336 -3.18072,-1.40153 z m -22.18903,-27.6937 c -0.93832,-1.04725 -0.85062,-2.65674 0.19591,-3.59587 1.04714,-0.93964 2.65775,-0.85249 3.59739,0.19467 0.93964,1.04715 0.85249,2.65776 -0.19468,3.5974 -1.04771,0.94009 -2.65931,0.85223 -3.59862,-0.1962 z M 476.7524,891.79775 c -4.87546,-5.62979 -4.26387,-14.14601 1.36602,-19.02137 5.6298,-4.87546 14.14601,-4.26387 19.02138,1.36602 4.87545,5.62979 4.26386,14.14601 -1.36602,19.02137 -5.6298,4.87546 -14.14602,4.26387 -19.02138,-1.36602 z M 379.77203,770.46049 c -0.54453,-0.74273 -0.63989,-1.72358 -0.24859,-2.55728 0.59018,-1.2587 2.08913,-1.80047 3.34768,-1.20989 1.2587,0.59019 1.80048,2.08913 1.20989,3.34768 -0.59063,1.25737 -2.08837,1.79833 -3.34616,1.20866 -0.38197,-0.17827 -0.71304,-0.44963 -0.96282,-0.78917 z m -67.584,-84.13022 c -2.04919,-2.62521 -2.32846,-6.22184 -0.70899,-9.13185 2.227,-3.99977 7.27468,-5.43707 11.27461,-3.21036 3.99977,2.22699 5.43707,7.27467 3.21037,11.2746 -2.227,3.99977 -7.27467,5.43707 -11.27461,3.21037 -0.96872,-0.53975 -1.8193,-1.26839 -2.50138,-2.14276 z m 53.70475,64.30526 c -0.20525,-0.2449 -0.36399,-0.52529 -0.467,-0.82779 -0.46089,-1.34726 0.25745,-2.8131 1.60461,-3.27429 1.34726,-0.4609 2.8131,0.25745 3.27429,1.60461 0.4609,1.34726 -0.25745,2.81308 -1.60462,3.27428 -1.00641,0.34497 -2.12136,0.0365 -2.80728,-0.77681 z m 40.12516,47.81945 c -0.35474,-0.40568 -0.63105,-0.87372 -0.81483,-1.38032 -0.81805,-2.25993 0.3514,-4.75504 2.61165,-5.57218 2.25913,-0.81739 4.75318,0.35114 5.57095,2.61014 0.81806,2.25993 -0.3514,4.75504 -2.61165,5.57218 -1.68729,0.60999 -3.576,0.12162 -4.75612,-1.22982 z M 377.9785,761.58622 c -0.62002,-0.78135 -0.60322,-1.89151 0.0396,-2.65423 0.74601,-0.88606 2.06911,-0.99946 2.95501,-0.25325 0.88607,0.746 0.99947,2.06912 0.25326,2.95502 -0.74601,0.88607 -2.06913,0.99946 -2.95502,0.25324 -0.10744,-0.0902 -0.20555,-0.19095 -0.29285,-0.30076 z m -5.43112,-8.82324 c -0.072,-0.0972 -0.13603,-0.20001 -0.19068,-0.3079 -0.52958,-1.04482 -0.11264,-2.32113 0.93159,-2.85184 1.04557,-0.53138 2.32394,-0.11405 2.85459,0.93189 0.53016,1.04552 0.1124,2.32288 -0.93313,2.85306 -0.92136,0.46727 -2.04531,0.20333 -2.66238,-0.6252 z m 18.68605,21.96998 c -0.33232,-0.45211 -0.50194,-1.00335 -0.48127,-1.56407 0.0509,-1.3723 1.20467,-2.44348 2.57696,-2.39242 1.37131,0.0507 2.44221,1.20287 2.39271,2.57421 -0.05,1.37241 -1.20334,2.44429 -2.57573,2.39393 -0.75856,-0.0276 -1.46298,-0.40014 -1.91267,-1.01165 z m -4.95434,-7.24298 c -0.42543,-0.53534 -0.55939,-1.24607 -0.35788,-1.89949 0.33667,-1.09294 1.49529,-1.70631 2.58842,-1.37031 1.09421,0.33611 1.70843,1.49597 1.37154,2.58994 -0.33729,1.09295 -1.49658,1.7057 -2.58965,1.36878 -0.39919,-0.12236 -0.75209,-0.3625 -1.01243,-0.68892 z m 13.04816,14.20939 c -0.30164,-0.36119 -0.51416,-0.78821 -0.61938,-1.2469 -0.36736,-1.60649 0.63716,-3.2066 2.24365,-3.57396 1.60661,-0.36839 3.2076,0.63569 3.57549,2.24242 0.36736,1.60649 -0.63715,3.20662 -2.24365,3.57397 -1.09419,0.25062 -2.23644,-0.13407 -2.95611,-0.99553 z M 360.12788,731.5497 c -0.57264,-0.73934 -0.78971,-1.69375 -0.59318,-2.60804 0.36761,-1.71176 2.05296,-2.80167 3.76487,-2.43474 1.71176,0.36762 2.80169,2.05296 2.43475,3.76487 -0.36761,1.71177 -2.05297,2.80168 -3.76487,2.43475 -0.73103,-0.15648 -1.38328,-0.56619 -1.84157,-1.15684 z m 18.25452,22.36827 c -0.0263,-0.0323 -0.0516,-0.0655 -0.0754,-0.0998 -0.55084,-0.79164 -0.35605,-1.87989 0.43518,-2.43132 0.79099,-0.5516 1.8793,-0.35804 2.43161,0.43244 0.55211,0.79162 0.35782,1.88094 -0.43395,2.43284 -0.75184,0.52413 -1.78089,0.37824 -2.3574,-0.33422 z m 5.43694,6.57515 c -0.4941,-0.57398 -0.55635,-1.40299 -0.15347,-2.0443 0.50686,-0.80707 1.5719,-1.05061 2.37916,-0.54406 0.80707,0.50687 1.05061,1.57192 0.54404,2.37917 -0.50631,0.80684 -1.57053,1.05101 -2.37792,0.54557 -0.1467,-0.0919 -0.27878,-0.20528 -0.39184,-0.33636 z m -18.04952,-22.50604 c -0.43752,-0.51945 -0.65536,-1.18899 -0.60724,-1.86645 0.10312,-1.43806 1.35263,-2.52016 2.79067,-2.41677 1.43807,0.10313 2.52016,1.35264 2.41677,2.79068 -0.10313,1.43807 -1.35264,2.52016 -2.79068,2.41677 -0.70325,-0.051 -1.35594,-0.3844 -1.80952,-0.92423 z m -11.0714,-14.77011 c -0.92928,-1.05881 -1.2064,-2.54048 -0.72272,-3.86362 0.7313,-1.99854 2.9446,-3.02548 4.94286,-2.29341 1.99724,0.7318 3.02338,2.94388 2.29219,4.94134 -0.7318,1.99724 -2.94388,3.02337 -4.94134,2.29219 -0.60551,-0.2217 -1.14568,-0.59184 -1.57099,-1.0765 z m -49.30493,-61.4982 c -3.16954,-3.59187 -3.37021,-8.91931 -0.47989,-12.73944 3.35534,-4.4349 9.67034,-5.31057 14.1058,-1.95597 4.43626,3.35506 5.31254,9.67127 1.95718,14.10731 -3.3556,4.43654 -9.67267,5.31219 -14.10852,1.95567 -0.53593,-0.40552 -1.02991,-0.86366 -1.47457,-1.36757 z m 65.59918,80.74267 c -0.24475,-0.33016 -0.3897,-0.72358 -0.41761,-1.13362 -0.0813,-1.1839 0.81269,-2.20948 1.99659,-2.29063 1.18378,-0.0803 2.2086,0.81406 2.28911,1.99782 0.0813,1.1839 -0.81268,2.20948 -1.99659,2.29063 -0.73031,0.0495 -1.43561,-0.27614 -1.8715,-0.8642 z m 4.94147,3.23587 c -0.17441,-0.21704 -0.29508,-0.4722 -0.35228,-0.74468 -0.20161,-0.95591 0.41001,-1.89423 1.36597,-2.09559 0.95578,-0.20061 1.89326,0.41145 2.09408,1.36719 0.20062,0.95579 -0.41145,1.89327 -1.3672,2.09409 -0.65079,0.13669 -1.32327,-0.10324 -1.74057,-0.62101 z m 47.17343,58.27414 c -0.0772,-0.096 -0.15074,-0.19484 -0.2211,-0.29592 -1.64893,-2.3651 -1.06879,-5.61907 1.29589,-7.2686 2.36512,-1.64894 5.61909,-1.06879 7.26862,1.2959 1.65021,2.36507 1.07055,5.62013 -1.29467,7.27012 -2.24824,1.56808 -5.32626,1.13073 -7.04872,-1.00152 z m -31.84422,-39.6163 c -0.32889,-0.38065 -0.47295,-0.8871 -0.3936,-1.38385 0.14935,-0.92986 1.02424,-1.56257 1.95408,-1.41319 0.92986,0.14935 1.56257,1.02423 1.4132,1.95409 -0.14935,0.92986 -1.02425,1.56257 -1.9541,1.41319 -0.3964,-0.0641 -0.75746,-0.26604 -1.01958,-0.57024 z m -41.86349,-52.32929 c -1.18297,-1.46172 -1.37542,-3.48982 -0.48939,-5.14844 1.21802,-2.28006 4.05394,-3.14077 6.33377,-1.92233 2.2799,1.21746 3.14125,4.05257 1.92386,6.33254 -1.21802,2.28006 -4.05393,3.14077 -6.33377,1.92233 -0.55256,-0.29474 -1.04036,-0.69739 -1.43447,-1.1841 z m 46.71391,57.63606 c -0.24448,-0.30625 -0.3957,-0.67636 -0.43594,-1.06615 -0.11562,-1.12382 0.70129,-2.12876 1.82505,-2.24509 1.12396,-0.11654 2.12968,0.6999 2.24661,1.82382 0.11632,1.12482 -0.70167,2.13078 -1.82656,2.24632 -0.69291,0.0714 -1.37456,-0.21453 -1.80916,-0.7589 z m 14.41158,17.27764 c -0.12493,-0.16125 -0.23563,-0.33304 -0.33125,-0.51321 -0.9254,-1.74825 -0.25813,-3.91567 1.49028,-4.84075 1.74825,-0.9254 3.91568,-0.25814 4.84076,1.49028 0.92539,1.74825 0.25813,3.91567 -1.49029,4.84075 -1.54065,0.81516 -3.44444,0.40268 -4.50954,-0.97704 z m 33.31321,38.8554 c -2.30771,-3.15724 -1.84791,-7.54941 1.06365,-10.16026 3.13021,-2.80707 7.94332,-2.54511 10.75039,0.58511 2.80662,3.12963 2.54536,7.94176 -0.58359,10.74915 -3.12951,2.80797 -7.9428,2.54723 -10.75068,-0.58235 -0.16973,-0.18906 -0.32981,-0.38656 -0.4798,-0.59161 z M 403.31561,774.2036 c -0.13221,-0.17824 -0.23902,-0.37403 -0.31836,-0.58131 -0.48467,-1.26768 0.15064,-2.68816 1.41865,-3.17196 1.26758,-0.48354 2.68714,0.15221 3.17043,1.41989 0.48289,1.26679 -0.15194,2.68528 -1.41835,3.1692 -1.0306,0.39358 -2.19718,0.0518 -2.85237,-0.83582 z m -58.35346,-76.44214 c -1.48915,-1.99831 -1.50332,-4.73349 -0.035,-6.74712 1.8503,-2.53648 5.40633,-3.09302 7.94312,-1.24315 2.53648,1.85029 3.09302,5.40633 1.24315,7.94311 -1.85029,2.53649 -5.40633,3.09303 -7.94311,1.24316 -0.4604,-0.33586 -0.86768,-0.73904 -1.20819,-1.196 z m 31.9458,39.31604 c -0.33046,-0.41125 -0.46263,-0.94737 -0.3613,-1.46512 0.19069,-0.9698 1.13123,-1.60156 2.10112,-1.41135 0.9698,0.1907 1.60158,1.13124 1.41135,2.10113 -0.1907,0.96979 -1.13123,1.60156 -2.10112,1.41134 -0.41404,-0.0816 -0.78593,-0.30687 -1.05005,-0.636 z m 22.62003,27.92317 c -0.17354,-0.20079 -0.29761,-0.43949 -0.36155,-0.69706 -0.22372,-0.90382 0.32822,-1.81773 1.23229,-2.04045 0.90295,-0.22304 1.8158,0.32791 2.03923,1.23076 0.22304,0.90295 -0.3279,1.81581 -1.23076,2.03924 -0.61534,0.15263 -1.26427,-0.0531 -1.67921,-0.53249 z m -25.90612,-32.74029 c -0.42708,-0.57674 -0.54223,-1.32701 -0.30767,-2.00524 0.39273,-1.13572 1.63212,-1.73768 2.76758,-1.34419 1.13572,0.39273 1.73769,1.63212 1.3442,2.76758 -0.39335,1.13577 -1.63342,1.73711 -2.76881,1.34267 -0.41384,-0.14356 -0.77469,-0.40874 -1.0353,-0.76082 z m -2.96305,-6.09651 c -0.68165,-0.81397 -0.80994,-1.95686 -0.32564,-2.90165 0.66516,-1.29892 2.25772,-1.81223 3.55627,-1.14729 1.29892,0.66516 1.81223,2.25772 1.14729,3.55626 -0.66516,1.29893 -2.25772,1.81223 -3.55626,1.14729 -0.31494,-0.161 -0.59435,-0.38361 -0.82166,-0.65461 z m 42.51341,51.17516 c -0.0445,-0.0536 -0.0874,-0.10857 -0.1281,-0.16517 -0.95409,-1.31878 -0.65865,-3.16127 0.65988,-4.11569 1.31877,-0.95409 3.16127,-0.65865 4.11569,0.65988 0.95409,1.31877 0.65865,3.16127 -0.65988,4.11569 -1.25313,0.90679 -2.99402,0.69079 -3.98751,-0.49477 z m -7.27101,-9.48958 c -0.0719,-0.0901 -0.13594,-0.1862 -0.19154,-0.28714 -0.5398,-0.97751 -0.18492,-2.20753 0.79262,-2.74726 0.97751,-0.5398 2.20752,-0.18493 2.74726,0.79262 0.53979,0.9775 0.18491,2.20752 -0.79262,2.74725 -0.86139,0.47603 -1.94041,0.26263 -2.55576,-0.50544 z m 19.18786,21.60281 c -1.33378,-1.7592 -1.11783,-4.24279 0.49954,-5.74541 1.73934,-1.61478 4.4583,-1.51409 6.07344,0.2249 1.61569,1.73863 1.51623,4.45778 -0.22216,6.07373 -1.7392,1.61612 -4.45932,1.51596 -6.07496,-0.22368 -0.0976,-0.10503 -0.18948,-0.21514 -0.27601,-0.32942 z m -57.0762,-71.29689 c -0.85997,-1.11338 -0.89464,-2.65703 -0.0856,-3.80795 1.01958,-1.45063 3.02221,-1.79978 4.47253,-0.77978 1.44926,1.01988 1.79777,3.02129 0.77856,4.47101 -1.01903,1.45037 -3.02082,1.80016 -4.47131,0.7813 -0.26343,-0.18544 -0.49746,-0.40947 -0.69419,-0.66458 z M 477.8531,853.82631 c -3.20931,-4.1926 -3.02111,-10.06563 0.45005,-14.04416 4.02996,-4.61915 11.04137,-5.09699 15.66076,-1.0673 4.6195,4.0305 5.09669,11.04283 1.06579,15.66199 -4.0305,4.6195 -11.04284,5.09668 -15.66199,1.06579 -0.5575,-0.48692 -1.06489,-1.02839 -1.51461,-1.61632 z m -70.55374,-91.42334 c -0.0253,-0.0297 -0.0498,-0.0602 -0.0736,-0.0912 -0.55233,-0.7355 -0.4033,-1.77959 0.33279,-2.33116 0.73551,-0.55233 1.7796,-0.40328 2.33116,0.3328 0.55107,0.73554 0.40149,1.77854 -0.33402,2.32964 -0.69856,0.52458 -1.68382,0.41977 -2.25636,-0.24006 z M 300.93421,630.31515 c -3.96934,-4.8721 -3.60181,-11.9591 0.85019,-16.39451 4.78676,-4.76962 12.53388,-4.75525 17.30291,0.0321 4.76963,4.78676 4.75528,12.53389 -0.0321,17.30293 -4.78675,4.76963 -12.53388,4.75527 -17.30292,-0.0321 -0.2877,-0.28897 -0.5607,-0.59219 -0.81811,-0.90843 z m 80.2925,99.12553 c -0.49657,-0.62036 -0.53121,-1.4918 -0.0853,-2.1495 0.56138,-0.82792 1.68744,-1.04438 2.51576,-0.4836 0.82793,0.56137 1.04438,1.68742 0.4836,2.51575 -0.56137,0.82792 -1.68743,1.04438 -2.51575,0.4836 -0.15034,-0.10148 -0.28461,-0.22493 -0.39834,-0.36623 z m -38.73046,-48.92444 c -2.28735,-2.71084 -2.14955,-6.71358 0.31875,-9.26076 2.65501,-2.73898 7.0277,-2.80709 9.76673,-0.15212 2.73899,2.655 2.8071,7.0277 0.15213,9.76673 -2.655,2.73899 -7.0277,2.8071 -9.76673,0.15213 -0.16533,-0.16067 -0.32249,-0.32954 -0.47086,-0.50599 z m 71.64957,88.60715 c -0.76906,-0.97998 -0.67114,-2.38311 0.22661,-3.24674 0.96553,-0.92908 2.50138,-0.89966 3.43062,0.0657 0.92908,0.96553 0.89966,2.50139 -0.0657,3.43062 -0.96553,0.92909 -2.50138,0.89966 -3.43062,-0.0657 -0.0564,-0.0588 -0.11037,-0.11994 -0.16107,-0.18375 z M 366.45173,708.4462 c -1.31804,-1.50779 -1.27959,-3.76888 0.0889,-5.23101 1.47159,-1.57226 3.93909,-1.65396 5.51145,-0.18247 1.57227,1.47159 1.65396,3.9391 0.18247,5.51145 -1.47158,1.57226 -3.93909,1.65396 -5.51144,0.18247 -0.0951,-0.0889 -0.18564,-0.18251 -0.27143,-0.28041 z m 78.11278,96.49494 c -1.85316,-2.33505 -1.80488,-5.65236 0.11549,-7.93245 2.22939,-2.6473 6.18274,-2.98602 8.82998,-0.75657 2.64729,2.2294 2.98601,6.18274 0.75656,8.82998 -2.22939,2.64728 -6.18273,2.98601 -8.82997,0.75656 -0.31991,-0.26932 -0.61204,-0.56999 -0.87206,-0.89752 z M 380.11034,723.8043 c -0.62209,-0.8427 -0.5643,-2.00701 0.13819,-2.78396 0.81541,-0.90121 2.20685,-0.97115 3.10853,-0.15626 0.90257,0.8152 0.97309,2.20784 0.15749,3.11005 -0.81541,0.90121 -2.20686,0.97116 -3.10853,0.15627 -0.10919,-0.0986 -0.20824,-0.20782 -0.29568,-0.32609 z m 45.18357,53.86934 c -1.06892,-1.29947 -1.07474,-3.17202 -0.0139,-4.47808 1.23224,-1.51689 3.461,-1.74733 4.97752,-0.51462 1.51721,1.23278 1.747,3.46245 0.5131,4.97875 -1.23303,1.51585 -3.46148,1.74502 -4.97723,0.51187 -0.18269,-0.14891 -0.35001,-0.31572 -0.49954,-0.4979 z m -11.14758,-15.2005 c -0.61629,-0.72306 -0.63789,-1.78019 -0.0517,-2.52788 0.68042,-0.86858 1.93623,-1.0209 2.80458,-0.34018 0.86889,0.68097 1.02056,1.93766 0.33867,2.80581 -0.68123,0.86752 -1.93672,1.0186 -2.8043,0.33744 -0.10465,-0.082 -0.20087,-0.17415 -0.28725,-0.27518 z M 379.89922,717.0939 c -0.94721,-1.13314 -0.79657,-2.81959 0.33643,-3.76696 1.13314,-0.94721 2.81958,-0.79657 3.76696,0.33644 0.94722,1.13314 0.79656,2.81958 -0.33644,3.76695 -1.13313,0.94721 -2.81958,0.79657 -3.76695,-0.33643 z m 33.39873,39.86043 c -0.39659,-0.52733 -0.43945,-1.24069 -0.10891,-1.81175 0.4552,-0.7861 1.46166,-1.05406 2.24748,-0.59842 0.78628,0.45576 1.05361,1.46302 0.5969,2.2487 -0.45614,0.78493 -1.46213,1.05161 -2.24719,0.59568 -0.19019,-0.11059 -0.35621,-0.25826 -0.48828,-0.43421 z m -25.05657,-32.95634 c -0.0255,-0.0348 -0.0502,-0.0702 -0.0731,-0.10661 -0.55023,-0.85053 -0.30684,-1.98609 0.54365,-2.53638 0.85054,-0.55025 1.98609,-0.30685 2.53639,0.54364 0.55024,0.85055 0.30684,1.98609 -0.54366,2.53639 -0.80846,0.52353 -1.88414,0.3326 -2.46305,-0.43718 z m -22.1984,-27.74887 c -1.64314,-2.03603 -1.32459,-5.01859 0.71149,-6.66167 2.03662,-1.64362 5.02018,-1.32435 6.6629,0.713 1.6423,2.03671 1.32253,5.01914 -0.71423,6.66138 -2.03612,1.64183 -5.01755,1.32278 -6.66016,-0.71271 z m 58.10124,71.85522 c -0.8503,-0.95311 -0.98023,-2.34908 -0.3205,-3.44279 0.83145,-1.37712 2.62201,-1.81926 3.9989,-0.98741 1.37693,0.83091 1.81967,2.62065 0.98893,3.99768 -0.83145,1.37712 -2.62201,1.81926 -3.9989,0.98741 -0.24926,-0.15053 -0.47461,-0.33754 -0.66843,-0.55489 z m 18.68083,19.85127 c -1.47537,-1.71461 -1.6615,-4.1904 -0.45911,-6.10635 1.51457,-2.41327 4.69887,-3.14155 7.11188,-1.62656 2.41305,1.51402 3.14195,4.6975 1.62808,7.11065 -1.51457,2.41327 -4.69887,3.14155 -7.11188,1.62656 -0.43775,-0.27434 -0.83181,-0.61289 -1.16897,-1.0043 z m -20.84278,-27.65797 c -0.54286,-0.68904 -0.66594,-1.6196 -0.32097,-2.42612 0.52031,-1.21659 1.92794,-1.78151 3.14493,-1.26214 1.21649,0.51972 1.78202,1.92663 1.26366,3.14369 -0.51925,1.21781 -1.9274,1.78412 -3.14521,1.26489 -0.36953,-0.15736 -0.69358,-0.40505 -0.94241,-0.72032 z M 380.80983,708.9868 c -0.12282,-0.13793 -0.23425,-0.28562 -0.33186,-0.44246 -0.94887,-1.52364 -0.48249,-3.52801 1.04153,-4.47626 1.52363,-0.94886 3.52802,-0.48248 4.47626,1.04154 0.9476,1.52363 0.48076,3.52695 -1.04276,4.47473 -1.34246,0.83556 -3.09153,0.58331 -4.14319,-0.59753 z m 8.79126,9.63838 c -0.13029,-0.15354 -0.23909,-0.32409 -0.32357,-0.50686 -0.51793,-1.11633 -0.0329,-2.44116 1.08338,-2.95921 1.11633,-0.51793 2.44116,-0.0329 2.95921,1.08337 0.51793,1.11633 0.0329,2.44117 -1.08337,2.95921 -0.90829,0.42193 -1.98648,0.1861 -2.63565,-0.57651 z m -47.45322,-59.7222 c -2.8457,-3.65754 -2.18767,-8.92944 1.46981,-11.77521 3.65694,-2.84522 8.92784,-2.18792 11.77399,1.46829 2.84655,3.65684 2.18972,8.92887 -1.46706,11.7755 -3.65745,2.84704 -8.93049,2.18949 -11.77674,-1.46858 z m 133.14929,164.78733 c -2.55872,-3.08213 -2.81151,-7.47151 -0.62343,-10.82693 2.75624,-4.22582 8.41595,-5.4178 12.64244,-2.66259 4.22719,2.7559 5.41983,8.41685 2.66381,12.64397 -2.75591,4.22718 -8.41685,5.41982 -12.64396,2.6638 -0.7669,-0.50048 -1.45421,-1.11341 -2.03886,-1.81825 z m -55.77361,-69.30882 c -0.42321,-0.49518 -0.57479,-1.16731 -0.40504,-1.7962 0.28445,-1.05191 1.36772,-1.6741 2.41966,-1.38976 1.05191,0.28379 1.67474,1.36643 1.39127,2.41843 -0.28321,1.05317 -1.36708,1.67686 -2.41994,1.39251 -0.38416,-0.10412 -0.72786,-0.32197 -0.98595,-0.62498 z m -2.76678,-4.63377 c -0.25487,-0.33761 -0.36801,-0.76131 -0.31531,-1.18102 0.11191,-0.88908 0.92272,-1.51954 1.81195,-1.40896 0.89031,0.11053 1.52239,0.92196 1.41166,1.81227 -0.11127,0.89025 -0.92326,1.52164 -1.81347,1.41019 -0.4354,-0.0543 -0.83032,-0.28241 -1.09487,-0.63247 z m -19.80915,-27.98488 c -0.17592,-0.23465 -0.29383,-0.5076 -0.34394,-0.79656 -0.17536,-1.00982 0.50066,-1.97073 1.51034,-2.14682 1.00994,-0.17634 1.97167,0.49924 2.14834,1.50912 0.17633,1.00994 -0.49924,1.97167 -1.50912,2.14834 -0.68829,0.12071 -1.38607,-0.15525 -1.80562,-0.71408 z m 42.29165,52.30008 c -0.93926,-1.23604 -1.12914,-2.88613 -0.49511,-4.30318 0.95779,-2.1405 3.46947,-3.09926 5.60996,-2.14145 2.14051,0.95778 3.09927,3.46946 2.14146,5.60995 -0.95837,2.14062 -3.47077,3.09878 -5.61118,2.13995 -0.64902,-0.29047 -1.21469,-0.73929 -1.64513,-1.30527 z m -47.19022,-61.81638 c -0.20751,-0.26361 -0.36439,-0.56337 -0.46235,-0.88424 -0.43494,-1.43115 0.37318,-2.94381 1.80459,-3.37788 1.43115,-0.43494 2.94382,0.37317 3.37789,1.80459 0.43494,1.43115 -0.37317,2.94381 -1.80459,3.37788 -1.06866,0.32387 -2.22651,-0.0416 -2.91554,-0.92035 z m -24.14211,-30.32642 c -0.21359,-0.24884 -0.40475,-0.51608 -0.57302,-0.79747 -1.6321,-2.72753 -0.74398,-6.26171 1.98365,-7.89366 2.72752,-1.63084 6.26065,-0.74226 7.89213,1.98488 1.6321,2.72753 0.74397,6.26171 -1.98365,7.89366 -2.40359,1.43799 -5.4934,0.93671 -7.31911,-1.18741 z m 49.2184,59.94443 c -0.12021,-0.15858 -0.20975,-0.33823 -0.26416,-0.52967 -0.24225,-0.85209 0.25184,-1.73928 1.10379,-1.98198 0.85221,-0.24331 1.74029,0.25034 1.9835,1.10257 0.24293,0.85293 -0.25212,1.74119 -1.10532,1.9832 -0.6362,0.18099 -1.31827,-0.047 -1.71781,-0.57412 z m -33.94548,-42.60378 c -0.22628,-0.27573 -0.41419,-0.58083 -0.55852,-0.90703 -0.8828,-1.99305 0.0171,-4.32439 2.01009,-5.20737 1.99304,-0.8828 4.32439,0.0171 5.20737,2.01009 0.8828,1.99304 -0.0171,4.3244 -2.01009,5.20738 -1.62145,0.71845 -3.52301,0.26726 -4.64885,-1.10307 z m 51.88685,64.25102 c -0.73379,-0.89006 -0.9812,-2.08485 -0.66112,-3.19311 0.53485,-1.85543 2.47298,-2.92556 4.32814,-2.38975 1.85417,0.53605 2.92282,2.4736 2.387,4.32785 -0.53541,1.85416 -2.47232,2.92345 -4.32662,2.38852 -0.67688,-0.19512 -1.27899,-0.59022 -1.7274,-1.13351 z M 421.29754,744.9556 c -0.24326,-0.28355 -0.39986,-0.63106 -0.45124,-1.0011 -0.14769,-1.06677 0.59765,-2.05119 1.66449,-2.19838 1.06581,-0.147 2.04919,0.59728 2.19715,1.66296 0.14796,1.06594 -0.59588,2.05012 -1.66173,2.19867 -0.65763,0.0915 -1.31658,-0.15803 -1.74867,-0.66215 z m 9.19367,10.48566 c -0.56494,-0.63232 -0.82221,-1.48164 -0.70304,-2.32117 0.2235,-1.57322 1.6801,-2.66732 3.25329,-2.44366 1.57316,0.22424 2.6666,1.68141 2.44215,3.25453 -0.22424,1.57316 -1.68141,2.66659 -3.25454,2.44214 -0.67097,-0.0962 -1.28644,-0.4262 -1.73786,-0.93184 z m -4.7811,-6.18827 c -0.33165,-0.41911 -0.51138,-0.9383 -0.51048,-1.47276 0.003,-1.30751 1.06489,-2.36527 2.3724,-2.36292 1.30751,0.003 2.36527,1.06489 2.36292,2.37241 -0.003,1.3075 -1.06489,2.36527 -2.3724,2.36291 -0.72238,-0.002 -1.40449,-0.33292 -1.85244,-0.89964 z m -25.25368,-31.84128 c -0.3296,-0.38806 -0.51818,-0.87624 -0.53513,-1.38511 -0.0406,-1.24464 0.93513,-2.28672 2.17976,-2.32797 1.24477,-0.0414 2.28759,0.93379 2.32949,2.17855 0.0421,1.24581 -0.9342,2.28963 -2.18005,2.33071 -0.6882,0.0223 -1.34891,-0.27087 -1.79407,-0.79618 z m 13.99392,17.18295 c -0.55036,-0.6816 -0.44348,-1.6804 0.23864,-2.23012 0.6816,-0.55036 1.68041,-0.44348 2.23013,0.23865 0.54904,0.68169 0.44166,1.67937 -0.23988,2.22861 -0.68101,0.54988 -1.67882,0.44372 -2.22889,-0.23714 z m -8.50278,-11.46455 c -0.33208,-0.44384 -0.45123,-1.01167 -0.32566,-1.55158 0.23536,-1.01127 1.24614,-1.64012 2.25732,-1.40435 1.01127,0.23536 1.64012,1.24614 1.40435,2.25732 -0.23536,1.01127 -1.24613,1.64012 -2.25732,1.40435 -0.43152,-0.10073 -0.81356,-0.35069 -1.07869,-0.70574 z m 63.42857,75.84631 c -1.62605,-2.21852 -1.9113,-5.14775 -0.7438,-7.63828 1.76196,-3.76106 6.23909,-5.38188 10.00036,-3.62035 3.76251,1.76211 5.38348,6.24122 3.62005,10.00311 -1.76255,3.76118 -6.24042,5.38138 -10.00159,3.61882 -1.1412,-0.53447 -2.1298,-1.34712 -2.87502,-2.3633 z m -50.09725,-63.27057 c -0.0712,-0.0835 -0.13623,-0.17206 -0.19232,-0.26645 -0.54732,-0.91294 -0.25018,-2.09676 0.6634,-2.64302 0.91294,-0.54607 2.09572,-0.24848 2.64152,0.66463 0.54549,0.91227 0.24869,2.094 -0.66312,2.64028 -0.80393,0.48182 -1.838,0.31487 -2.44946,-0.39546 z m -5.48403,-7.73163 c -0.49889,-0.66863 -0.50394,-1.58428 -0.0125,-2.2584 0.61932,-0.84895 1.80964,-1.035 2.65848,-0.41553 0.84868,0.61877 1.03537,1.80822 0.41706,2.65724 -0.61931,0.84896 -1.80963,1.03502 -2.65848,0.41555 -0.15404,-0.11196 -0.29039,-0.24643 -0.40459,-0.39883 z m -17.49533,-22.67455 c -0.41861,-0.47147 -0.69286,-1.05334 -0.79011,-1.67629 -0.28026,-1.79428 0.94682,-3.47613 2.74103,-3.75686 1.79428,-0.28027 3.47613,0.94681 3.75686,2.74102 0.28123,1.79441 -0.9454,3.47706 -2.73979,3.75838 -1.10634,0.17303 -2.2247,-0.22874 -2.96799,-1.06625 z m 28.54358,32.48223 c -0.13125,-0.1659 -0.23905,-0.34906 -0.32096,-0.5441 -0.50308,-1.18991 0.0536,-2.56238 1.24338,-3.0657 1.19067,-0.50371 2.5642,0.0538 3.06693,1.24491 0.50256,1.1906 -0.0554,2.56316 -1.24613,3.06541 -0.96796,0.40909 -2.08992,0.12257 -2.74322,-0.70052 z m -13.78964,-17.19717 c -0.53949,-0.63725 -0.68808,-1.51816 -0.38754,-2.29713 0.45417,-1.1765 1.77612,-1.76201 2.95257,-1.30773 1.17649,0.45417 1.76201,1.77612 1.30773,2.95257 -0.45417,1.1765 -1.77612,1.76201 -2.95258,1.30773 -0.35678,-0.13795 -0.6732,-0.36333 -0.92018,-0.65544 z m -5.74026,-7.95906 c -0.43893,-0.56132 -0.6419,-1.27158 -0.56593,-1.98008 0.16118,-1.50461 1.51139,-2.59379 3.01604,-2.43294 1.5046,0.16117 2.59378,1.51139 2.43293,3.01604 -0.16117,1.5046 -1.51139,2.59378 -3.01603,2.43293 -0.7368,-0.0787 -1.41034,-0.45241 -1.86701,-1.03595 z m 14.36499,15.11701 c -0.76594,-0.90731 -0.71984,-2.24737 0.10671,-3.09983 0.88839,-0.91541 2.35042,-0.93798 3.26666,-0.0505 0.91676,0.88821 0.9399,2.35144 0.0517,3.26819 -0.88821,0.91675 -2.35144,0.93989 -3.26818,0.0517 -0.055,-0.0539 -0.10746,-0.11044 -0.15685,-0.16959 z M 387.711,688.04241 c -0.35937,-0.47417 -0.6274,-1.01105 -0.79034,-1.58327 -0.72495,-2.54762 0.753,-5.20051 3.30081,-5.92484 2.54679,-0.72427 5.1986,0.75273 5.92361,3.2993 0.72533,2.54691 -0.75122,5.1996 -3.29807,5.92513 -1.90213,0.54182 -3.94178,-0.13978 -5.13601,-1.71632 z m 74.60185,92.11765 c -1.27272,-1.59893 -1.6743,-3.72297 -1.07323,-5.67621 1.00573,-3.26747 4.46965,-5.10116 7.73725,-4.09587 3.26874,1.00519 5.10328,4.47034 4.0971,7.73877 -1.00637,3.26749 -4.47094,5.10056 -7.73848,4.09435 -1.19218,-0.36682 -2.24573,-1.08521 -3.02264,-2.06104 z M 431.3857,741.48777 c -0.29944,-0.33393 -0.51554,-0.73402 -0.63065,-1.16754 -0.4027,-1.51667 0.49998,-3.07272 2.01649,-3.47604 1.51668,-0.4027 3.07273,0.49997 3.47605,2.01649 0.40375,1.5168 -0.49849,3.07373 -2.01527,3.47757 -1.03331,0.27449 -2.13324,-0.0541 -2.84662,-0.85048 z M 345.89347,633.58322 c -0.37077,-0.4469 -0.70239,-0.92489 -0.99164,-1.42841 -2.80484,-4.88062 -1.12271,-11.1109 3.7574,-13.91663 4.88064,-2.80609 11.11195,-1.12441 13.91815,3.75617 2.80667,4.88131 1.12418,11.11368 -3.75768,13.91938 -4.30173,2.47248 -9.75883,1.48859 -12.92623,-2.33051 z m 92.60689,113.28694 c -0.4212,-0.5094 -0.68771,-1.12879 -0.76738,-1.78497 -0.22843,-1.89307 1.12094,-3.61294 3.014,-3.84155 1.89307,-0.22843 3.61293,1.12093 3.84154,3.01399 0.22843,1.89307 -1.12093,3.61293 -3.01398,3.84155 -1.16713,0.14035 -2.32548,-0.32274 -3.07418,-1.22902 z m -66.09548,-82.1014 c -0.39201,-0.49552 -0.71555,-1.04154 -0.96101,-1.62375 -1.50188,-3.55741 0.16457,-7.65877 3.72205,-9.16047 3.55666,-1.50124 7.65696,0.16433 9.15925,3.72054 1.50304,3.55749 -0.16298,7.65981 -3.72083,9.162 -2.89417,1.22222 -6.24818,0.3639 -8.19946,-2.09832 z m 82.05211,100.95826 c -0.98165,-1.13808 -1.41084,-2.65144 -1.17282,-4.13542 0.44529,-2.77917 3.0594,-4.67105 5.83853,-4.22542 2.77912,0.446 4.67033,3.06069 4.22392,5.83974 -0.44591,2.778 -3.05883,4.66896 -5.83701,4.22422 -1.18652,-0.19004 -2.26772,-0.79326 -3.05262,-1.70312 z m -8.27714,-11.10705 c -0.57341,-0.75289 -0.87535,-1.67755 -0.85679,-2.62375 0.0444,-2.31657 1.95855,-4.15841 4.27511,-4.11356 2.31645,0.0452 4.15757,1.95987 4.11203,4.27632 -0.0459,2.31537 -1.95941,4.15551 -4.2748,4.11082 -1.2801,-0.0243 -2.47903,-0.63187 -3.25555,-1.64983 z m -28.6512,-36.38281 c -0.68573,-0.8786 -0.77904,-2.08229 -0.23688,-3.05605 0.74529,-1.33875 2.43487,-1.81967 3.77344,-1.07405 1.33741,0.74568 1.81761,2.43403 1.07282,3.77193 -0.74474,1.33857 -2.43352,1.8201 -3.77221,1.07556 -0.32425,-0.1807 -0.60893,-0.42465 -0.83717,-0.71739 z m 9.16577,10.07153 c -0.95178,-1.22353 -0.73201,-2.98687 0.491,-3.93931 1.22413,-0.95226 2.98846,-0.73177 3.94053,0.49252 0.95178,1.22353 0.73201,2.98687 -0.491,3.93931 -1.22413,0.95226 -2.98847,0.73177 -3.94053,-0.49252 z m -24.25439,-30.86068 c -0.57175,-0.69763 -0.88999,-1.56855 -0.90375,-2.47043 -0.0336,-2.20581 1.72698,-4.0214 3.93278,-4.05575 2.20593,-0.0344 4.02225,1.72564 4.05727,3.93156 0.0351,2.20699 -1.72607,4.02431 -3.93308,4.0585 -1.2194,0.0188 -2.38064,-0.52026 -3.15322,-1.46388 z m 9.75703,10.55566 c -0.72816,-0.82288 -1.00333,-1.95208 -0.73544,-3.01772 0.44787,-1.78308 2.25634,-2.86556 4.03946,-2.41787 1.78433,0.4473 2.86769,2.25699 2.41909,4.041 -0.44797,1.78431 -2.25828,2.86702 -4.04221,2.41756 -0.65058,-0.16383 -1.23647,-0.5204 -1.6809,-1.02297 z m 110.60266,137.07346 c -3.51049,-4.04159 -4.26068,-9.79197 -1.90458,-14.59891 3.23773,-6.6064 11.21786,-9.33738 17.82439,-6.09992 6.60772,3.23731 9.33945,11.21868 6.10113,17.82591 -3.23788,6.60786 -11.22,9.33897 -17.82713,6.09961 -1.59964,-0.78431 -3.0257,-1.88152 -4.19381,-3.22669 z M 435.20993,730.42558 c -0.12351,-0.14992 -0.23429,-0.30988 -0.33073,-0.47848 -0.93782,-1.63313 -0.3747,-3.71728 1.25798,-4.65588 1.63315,-0.93906 3.71834,-0.37639 4.6574,1.25675 0.9384,1.63381 0.37447,3.71901 -1.25951,4.65712 -1.43931,0.82726 -3.26518,0.49818 -4.32512,-0.77953 z m -9.26333,-13.5988 c -1.06008,-1.20169 -1.12721,-2.98372 -0.16064,-4.26183 1.12233,-1.48471 3.23578,-1.77843 4.72043,-0.65602 1.48499,1.12286 1.77808,3.23718 0.6545,4.72164 -1.12314,1.48363 -3.23624,1.77608 -4.72012,0.65328 -0.17956,-0.13548 -0.3451,-0.28861 -0.4942,-0.45704 z m -30.49351,-40.95932 c -0.72621,-0.84754 -1.19359,-1.8859 -1.34663,-2.99146 -0.44146,-3.18698 1.78429,-6.12839 4.97129,-6.56973 3.18698,-0.44147 6.1284,1.78428 6.56974,4.97128 0.44077,3.18603 -1.78394,6.12639 -4.96977,6.56851 -1.96483,0.27304 -3.93356,-0.47254 -5.22463,-1.9786 z m 49.54954,58.40757 c -0.22761,-0.29809 -0.41439,-0.62521 -0.55421,-0.97323 -0.85237,-2.1233 0.17739,-4.53561 2.30035,-5.38882 2.1233,-0.85236 4.5356,0.1774 5.38882,2.30035 0.85351,2.12338 -0.17581,4.53665 -2.29913,5.39034 -1.7274,0.69348 -3.70524,0.15007 -4.83583,-1.32864 z m -23.89118,-30.88014 c -0.93577,-1.14571 -1.17161,-2.71079 -0.6147,-4.08125 0.84053,-2.06942 3.19948,-3.06566 5.26891,-2.22519 2.06942,0.84052 3.06566,3.19948 2.22518,5.26892 -0.84052,2.0694 -3.19947,3.06565 -5.2689,2.22518 -0.62784,-0.25474 -1.18162,-0.66312 -1.61049,-1.18766 z m -9.92035,-14.27331 c -0.76081,-1.00799 -1.09878,-2.27285 -0.94218,-3.52599 0.3315,-2.66008 2.75661,-4.5478 5.41671,-4.21641 2.66008,0.33151 4.5478,2.75661 4.2164,5.41671 -0.33086,2.66125 -2.75715,4.54992 -5.41823,4.21764 -1.30174,-0.16248 -2.48228,-0.84496 -3.2727,-1.89195 z m 98.85917,121.36746 c -2.20466,-2.87129 -2.85011,-6.64567 -1.72494,-10.08642 1.88215,-5.75691 8.07518,-8.89766 13.83182,-7.01469 5.75561,1.88268 8.89551,8.07447 7.01344,13.83028 -1.88266,5.75562 -8.07446,8.89554 -13.83028,7.01346 -2.10011,-0.68614 -3.94399,-1.99065 -5.29004,-3.74263 z m -73.88686,-94.15235 c -1.32699,-1.6307 -1.20392,-4.0012 0.28554,-5.48498 1.6016,-1.59464 4.19246,-1.58971 5.78798,0.011 1.59599,1.60144 1.59161,4.19346 -0.01,5.7895 -1.60144,1.59599 -4.19346,1.59161 -5.7895,-0.01 -0.0965,-0.0973 -0.188,-0.1993 -0.27425,-0.30574 z m 20.31012,24.705 c -0.51923,-0.60019 -0.88919,-1.31466 -1.07971,-2.08508 -0.66755,-2.69873 0.97881,-5.4277 3.67745,-6.09566 2.69873,-0.66754 5.4277,0.97881 6.09565,3.67745 0.66824,2.6996 -0.9791,5.42964 -3.67895,6.09688 -1.83817,0.45404 -3.77563,-0.16169 -5.01444,-1.59359 z M 380.77644,645.0372 c -0.62097,-0.85038 -1.07842,-1.8088 -1.349,-2.82642 -1.20584,-4.53371 1.49228,-9.18647 6.02614,-10.39175 4.53372,-1.20585 9.18648,1.49228 10.39176,6.02615 1.20583,4.53372 -1.49229,9.18646 -6.02615,10.39174 -3.38568,0.90042 -6.97685,-0.37029 -9.04275,-3.19972 z m 88.13027,105.75897 c -0.73079,-0.91549 -1.18316,-2.02166 -1.30349,-3.18685 -0.34724,-3.36028 2.09565,-6.36569 5.45601,-6.71231 3.36029,-0.34724 6.36569,2.09566 6.71231,5.45601 0.34724,3.36029 -2.09566,6.3657 -5.45601,6.71232 -2.0717,0.21391 -4.10986,-0.64116 -5.40882,-2.26917 z m 27.6778,33.88827 c -1.70364,-2.04585 -2.41727,-4.73942 -1.94998,-7.3604 0.87486,-4.90792 5.56287,-8.17725 10.47074,-7.30212 4.90792,0.87487 8.17726,5.56286 7.30213,10.47074 -0.87486,4.90793 -5.56287,8.17727 -10.47075,7.30213 -2.09491,-0.37349 -3.9905,-1.4751 -5.35214,-3.11035 z m -14.31555,-19.92722 c -0.99299,-1.35139 -1.49952,-2.99901 -1.43732,-4.67485 0.15167,-4.09981 3.59756,-7.30077 7.69741,-7.15028 4.09992,0.15087 7.30158,3.59625 7.15179,7.6962 -0.15019,4.10102 -3.59671,7.30366 -7.69771,7.15302 -2.26644,-0.0831 -4.37082,-1.19678 -5.71417,-3.02409 z M 354.39177,603.34807 c -0.6803,-0.88953 -1.23685,-1.86721 -1.65436,-2.90632 -2.55021,-6.34603 0.52671,-13.55788 6.87262,-16.10839 6.3468,-2.55087 13.55971,0.52696 16.10962,6.87414 2.55086,6.34681 -0.52697,13.55971 -6.87415,16.10962 -5.1625,2.07381 -11.07431,0.4504 -14.45373,-3.96905 z m 78.25907,96.08836 c -1.18701,-1.57678 -1.3153,-3.7108 -0.32576,-5.41844 1.36121,-2.34738 4.3676,-3.14687 6.715,-1.78571 2.34737,1.36122 3.14685,4.3676 1.7857,6.71501 -1.36121,2.34738 -4.36759,3.14686 -6.715,1.7857 -0.56849,-0.33016 -1.06493,-0.77106 -1.45994,-1.29656 z m 16.14196,18.3962 c -0.0767,-0.0887 -0.15029,-0.17995 -0.22073,-0.27364 -1.6491,-2.19692 -1.20473,-5.31477 0.99241,-6.96357 2.19692,-1.64909 5.31478,-1.20474 6.96358,0.99241 1.64909,2.19692 1.20473,5.31478 -0.99242,6.96357 -2.08788,1.56731 -5.03225,1.25343 -6.74284,-0.71877 z m -42.22022,-55.68012 c -0.99083,-1.25363 -1.52818,-2.80573 -1.52468,-4.40363 0.008,-3.90817 3.18258,-7.06996 7.09076,-7.06241 3.90818,0.008 7.06996,3.1826 7.0624,7.09077 -0.007,3.9083 -3.18125,7.0708 -7.08954,7.06392 -2.15986,-0.004 -4.19964,-0.99418 -5.53894,-2.68865 z m 16.95275,18.99684 c -1.26445,-1.48023 -1.71683,-3.48915 -1.20892,-5.3685 0.84896,-3.14393 4.08574,-5.00448 7.22974,-4.15573 3.14394,0.84895 5.00449,4.08575 4.15574,7.22974 -0.84896,3.14395 -4.08575,5.00449 -7.22975,4.15574 -1.14737,-0.30932 -2.17452,-0.95808 -2.94681,-1.86125 z m 40.06407,40.4209 c -0.21548,-0.26871 -0.40715,-0.55569 -0.57357,-0.85724 -1.61205,-2.92178 -0.55024,-6.59716 2.37159,-8.20911 2.92177,-1.61205 6.59715,-0.55024 8.2091,2.37159 1.61146,2.92109 0.55048,6.59542 -2.37006,8.20787 -2.57466,1.4216 -5.79893,0.78278 -7.63706,-1.51311 z m -15.98468,-24.3699 c -1.84148,-2.16099 -1.90594,-5.32005 -0.15414,-7.55435 2.03409,-2.59483 5.78676,-3.04899 8.38114,-1.01432 2.59377,2.0349 3.04668,5.78724 1.01158,8.38085 -2.03436,2.59347 -5.78581,3.04702 -8.37963,1.0131 -0.31311,-0.24577 -0.60087,-0.52223 -0.85895,-0.82528 z m -52.73779,-73.48416 c -1.26035,-1.52308 -2.05662,-3.37617 -2.2941,-5.33879 -0.6832,-5.65757 3.34921,-10.79781 9.00675,-11.4812 5.65672,-0.68344 10.79672,3.34745 11.48149,9.00401 0.68414,5.6577 -3.34781,10.79873 -9.00553,11.48272 -3.48733,0.42145 -6.94952,-0.96015 -9.18861,-3.66674 z m 85.94338,104.97353 c -0.39378,-0.53371 -0.71343,-1.11831 -0.95019,-1.73787 -1.44607,-3.78769 0.45261,-8.03043 4.24055,-9.47584 3.78692,-1.44541 8.0286,0.45236 9.47462,4.23904 1.44606,3.7877 -0.45262,8.03043 -4.24056,9.47584 -3.08072,1.17564 -6.56731,0.15263 -8.52442,-2.50117 z M 439.45495,673.2605 c -1.62167,-2.05779 -1.99066,-4.83669 -0.96215,-7.24635 1.55322,-3.63844 5.76174,-5.32904 9.40035,-3.77622 3.63836,1.55263 5.32957,5.76042 3.77774,9.39912 -1.55275,3.63976 -5.7625,5.33115 -9.40186,3.77745 -1.10362,-0.47099 -2.07125,-1.21165 -2.81408,-2.154 z m -17.12706,-25.58388 c -1.31671,-1.80871 -1.87655,-4.05943 -1.56063,-6.27423 0.66987,-4.70024 5.02277,-7.9678 9.72313,-7.29879 4.70141,0.66924 7.9699,5.02333 7.30002,9.72465 -0.66925,4.70141 -5.02333,7.96989 -9.72465,7.30002 -2.30048,-0.32788 -4.37028,-1.57297 -5.73787,-3.45165 z m 78.58809,93.35121 c -0.90088,-1.07936 -1.53382,-2.35642 -1.8471,-3.72699 -1.09872,-4.8007 1.90234,-9.58312 6.70305,-10.68183 4.8007,-1.09872 9.58312,1.90234 10.68183,6.70304 1.09872,4.8007 -1.90234,9.58313 -6.70305,10.68184 -3.27027,0.74892 -6.68414,-0.40107 -8.83473,-2.97606 z M 465.71177,696.649 c -2.30105,-2.92852 -2.00935,-7.12404 0.67475,-9.70603 2.8861,-2.77633 7.47638,-2.68746 10.25284,0.19852 2.77634,2.88609 2.68746,7.47637 -0.1985,10.25284 -2.8861,2.77633 -7.47638,2.68746 -10.25285,-0.19852 -0.16777,-0.17421 -0.32669,-0.35673 -0.47627,-0.54678 z m 56.92523,62.03865 c -1.26593,-1.64435 -2.03295,-3.61769 -2.2098,-5.68534 -0.51057,-5.96132 3.9083,-11.20776 9.86964,-11.71803 5.96119,-0.50968 11.20686,3.90966 11.71653,9.87085 0.51057,5.96133 -3.90829,11.20777 -9.86964,11.71805 -3.67479,0.31411 -7.25693,-1.26301 -9.50673,-4.18553 z m 24.04781,26.17169 c -2.2489,-2.58131 -3.40339,-5.93738 -3.21846,-9.35594 0.39335,-7.25859 6.59709,-12.8236 13.85562,-12.42905 7.25739,0.3948 12.82073,6.59793 12.42631,13.85533 -0.39401,7.25749 -6.59661,12.82153 -13.8541,12.42783 -3.55151,-0.19333 -6.87353,-1.81592 -9.20937,-4.49817 z M 460.5592,667.28518 c -2.53883,-2.84857 -2.92598,-7.01874 -0.95493,-10.286 2.48379,-4.11525 7.83348,-5.43762 11.94854,-2.95352 4.11505,2.48324 5.43803,7.83213 2.95503,11.94732 -2.48324,4.11504 -7.83212,5.43803 -11.94731,2.95503 -0.74666,-0.45085 -1.42131,-1.0114 -2.00133,-1.66283 z m 27.47595,32.39992 c -0.13354,-0.15917 -0.26155,-0.32292 -0.3834,-0.49122 -2.85197,-3.94132 -1.96916,-9.44832 1.97189,-12.30067 3.94133,-2.85197 9.44833,-1.96915 12.30068,1.97189 2.85326,3.94128 1.97093,9.44938 -1.97067,12.3022 -3.74617,2.71023 -8.95019,2.06297 -11.91832,-1.48235 z m -73.05216,-99.9147 c -1.71562,-2.24991 -2.61964,-5.01403 -2.56505,-7.8429 0.13408,-6.92169 5.85376,-12.42424 12.77546,-12.29045 6.9217,0.13407 12.42425,5.85376 12.29046,12.77547 -0.13408,6.92169 -5.85376,12.42424 -12.77546,12.29045 -3.8246,-0.0742 -7.40602,-1.89061 -9.72541,-4.93257 z m 29.43558,34.16664 c -2.19311,-2.6598 -2.9326,-6.23042 -1.9762,-9.54246 1.60029,-5.54207 7.3903,-8.73754 12.93238,-7.13731 5.54208,1.60029 8.73755,7.39029 7.13732,12.93238 -1.60029,5.54207 -7.39029,8.73755 -12.93238,7.13732 -2.0227,-0.58401 -3.82171,-1.76562 -5.16112,-3.38993 z m 69.70483,72.8261 c -0.37218,-0.48257 -0.7024,-0.9961 -0.98719,-1.53487 -2.76572,-5.22378 -0.77294,-11.70055 4.45094,-14.46607 5.22443,-2.76509 11.70123,-0.77103 14.46576,4.45369 2.7645,5.22374 0.77128,11.69948 -4.45217,14.46454 -4.60375,2.43705 -10.29351,1.20545 -13.47734,-2.91729 z m -27.55784,-43.65366 c -3.1946,-3.88492 -3.21018,-9.48258 -0.0371,-13.38514 3.68309,-4.53024 10.34109,-5.21747 14.87189,-1.53508 4.5316,3.68284 5.21945,10.34205 1.5363,14.87341 -3.68338,4.53191 -10.34348,5.21912 -14.87463,1.53478 -0.54718,-0.44484 -1.04847,-0.94332 -1.49641,-1.48797 z m 58.63976,57.81499 c -1.06005,-1.21393 -1.8851,-2.61443 -2.43318,-4.13 -2.44311,-6.75186 1.04963,-14.2059 7.80138,-16.64931 6.75266,-2.44378 14.20775,1.04988 16.65054,7.8029 2.44311,6.75187 -1.04963,14.20589 -7.80138,16.6493 -5.04305,1.82528 -10.6894,0.36661 -14.21736,-3.67289 z M 472.87323,620.45902 c -2.80764,-3.69426 -3.37494,-8.62644 -1.47934,-12.86167 2.8624,-6.39649 10.36811,-9.26157 16.76471,-6.39942 6.3965,2.86239 9.26159,10.36811 6.39943,16.76472 -2.86193,6.39782 -10.3689,9.26367 -16.76624,6.40065 -1.94075,-0.86876 -3.63206,-2.21131 -4.91856,-3.90428 z m 45.78004,42.23403 c -3.98528,-5.2571 -3.34,-12.67844 1.4928,-17.16883 5.19739,-4.82832 13.32491,-4.52885 18.15287,0.66889 4.82789,5.19682 4.52911,13.32337 -0.66737,18.15164 -5.19739,4.82833 -13.32492,4.52885 -18.15288,-0.66889 -0.29131,-0.31366 -0.56682,-0.64166 -0.82543,-0.9828 z"
+ id="path45821-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccscccccccccccccccccccccccccccscccccccccccccscccccscccccccccccccccccccccccccccccccccccccccscccccccsccccscccccccccccccccccccccccsccccscsccccccccccccccsccccccccscccsscccccccccccccccccccccccccscsccsccccscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccssccscccccsccccsccccccccccccccccccccccccccccccccsccccsccccscccscccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccsscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsscccsccccscccccccccccccccccccccccccccccccscccssscsccccccccccccccsccccccccccccccccssscsccccscccccccccscccccccccccccc" />
+ <path
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715532999999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d=""
+ id="path54483-1"
+ inkscape:connector-curvature="0"
+ transform="translate(0,452.36216)" />
+ <path
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715532999999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 446.49318,561.34265 c -0.29563,0.0542 -0.59144,0.098 -0.88672,0.15692 -25.79016,5.14867 -87.89844,24.62342 -87.89844,24.62342 76.93842,-1.32265 89.82678,-0.0807 95.64062,8.30915 3.43335,4.95467 -1.45662,11.82573 -21.95117,15.50807 -22.31219,4.0089 -68.71875,8.99571 -68.71875,8.99571 -44.5297,3.13684 -75.91009,3.57706 -85.16797,24.55868 -6.04831,13.70751 6.74815,25.67877 12.37305,33.19149 23.73629,27.26589 57.83769,41.79731 79.79883,52.52461 8.26321,4.0362 32.47656,11.58887 32.47656,11.58887 -71.01583,-3.52004 -122.05321,19.76197 -151.89648,46.33393 -33.73014,33.24127 -18.41273,72.41573 51.36718,96.04565 41.21482,13.95678 61.65316,20.51162 122.93165,14.22128 36.10362,-2.33537 41.80642,-1.1663 42.18945,1.93999 0.53907,4.37338 -40.00615,15.5771 -51.07227,19.02317 -18.05502,5.62243 -54.7165,14.92781 -78.92187,20.93765 a 196.41905,197.26698 0 0 0 17.53125,5.08043 c 2.49441,-0.19217 5.03527,-0.40727 7.65429,-0.67085 11.07305,-1.11431 53.1118,-5.7901 84.51172,-13.2817 0,0 38.28567,-8.9253 58.74414,-17.02042 8.58318,-3.39759 15.57032,-6.58111 21.22461,-9.82151 a 196.41905,197.26698 0 0 0 16.98633,-16.2515 c -0.0586,-2.45011 1.01271,-9.10758 -8.37305,-13.14832 -25.39181,-10.93152 -54.72998,-8.67923 -112.82226,-9.49981 -64.42866,-1.7993 -85.93871,-12.93469 -97.41992,-21.95178 -11.01351,-9.15264 -5.69927,-34.76483 41.0332,-57.66584 23.53592,-12.1842 115.98242,-35.06675 115.98242,-35.06675 -31.30818,-15.92015 -89.67555,-43.88093 -101.67578,-49.92357 -10.52484,-5.29966 -27.36473,-13.27014 -31.07422,-23.05024 -4.19322,-9.38379 9.61145,-17.61011 17.33789,-19.99612 24.8835,-7.74892 60.05565,-12.72461 92.09375,-13.51121 16.1041,-0.39515 18.70899,-1.50254 18.70899,-1.50254 22.19458,-4.04764 36.70726,-20.1177 30.42578,-45.32961 -0.91003,-4.13686 -2.42872,-7.99001 -4.43946,-11.52807 a 196.41905,197.26698 0 0 0 -56.69335,-23.81918 z"
+ id="path54245-1-9"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient5688);fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="path5680"
+ sodipodi:cx="249.50768"
+ sodipodi:cy="717.68018"
+ sodipodi:rx="81.822357"
+ sodipodi:ry="81.822357"
+ d="m 331.33003,717.68018 a 81.822357,81.822357 0 1 1 -163.64471,0 81.822357,81.822357 0 1 1 163.64471,0 z"
+ transform="matrix(0.64576348,0,0,0.64576348,-25.14132,-167.84288)" />
+ <g
+ transform="matrix(0.66013278,-0.18035686,0.18035686,0.66013278,-275.17315,-19.80709)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:semi-condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:NK57 Monospace;-inkscape-font-specification:NK57 Monospace Semi-Bold Semi-Condensed"
+ id="flowRoot5558"
+ inkscape:path-effect="#path-effect5732">
+ <path
+ d="m 352.19799,585.90506 0.74046,4.41838 c 2.60816,-0.43816 5.21963,-0.86673 7.83431,-1.28477 l 4.25123,26.62858 c 1.66943,-0.26598 3.33889,-0.52756 5.00835,-0.78447 L 365.9258,588.2293 c 2.60544,-0.40177 5.214,-0.79253 7.8256,-1.17138 l -0.64336,-4.4351 c -6.99584,1.01484 -13.96639,2.11462 -20.91005,3.28224 z"
+ id="path5714"
+ inkscape:original-d="m 354.8425,585.685 0,4.48 7.8,0 0,26.96 5.12,0 0,-26.96 7.76,0 0,-4.48 -20.68,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 378.47419,591.92151 1.973,14.067 c 0.82254,5.86454 3.21804,7.29949 7.04996,6.79139 3.4018,-0.45108 5.50235,-2.04104 6.64302,-4.11599 l 0.34583,2.81939 c 1.47334,-0.18111 2.9466,-0.3576 4.41975,-0.52928 l -2.4805,-21.33848 c -1.61314,0.18734 -3.22545,0.38019 -4.83692,0.57832 l 1.84208,14.96988 c -0.73179,1.54131 -2.1355,2.76213 -4.69161,3.09475 -2.12354,0.27634 -3.20229,-0.30312 -3.59062,-3.19805 l -1.85124,-13.80049 c -1.60847,0.21567 -3.21606,0.43626 -4.82275,0.66156 z"
+ id="path5716"
+ inkscape:original-d="m 379.44375,595.645 0,14.2 c 0,5.91999 2.2,7.68 6.12,7.68 3.48,0 5.8,-1.32 7.2,-3.24 l 0,2.84 4.52,0 0,-21.48 -4.8,0 0,15.08 c -0.92,1.44 -2.48,2.48 -5.08,2.48 -2.16,0 -3.16,-0.72 -3.16,-3.64 l 0,-13.92 -4.8,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 400.30631,590.34284 0.40966,3.69748 c 1.12211,-0.12429 2.24451,-0.24582 3.36721,-0.36451 l 1.04307,9.86465 c 0.52574,4.97209 3.10617,6.92478 9.19792,6.36152 3.57304,-0.33038 5.55571,-1.15088 6.60754,-2.46458 1.05183,-1.3137 1.1697,-3.11673 0.99345,-5.3691 l -0.0374,-0.47838 c -1.34464,0.10536 -2.68921,0.21543 -4.0337,0.33008 l 0.0509,0.59767 c 0.1764,2.07194 -0.32138,3.18924 -3.62239,3.4925 -3.02593,0.27799 -4.14159,-0.56997 -4.36447,-2.83875 l -0.98146,-9.99059 c 3.66478,-0.35994 7.33251,-0.68852 11.00297,-0.98319 l -0.29766,-3.7069 c -3.69331,0.29633 -7.38304,0.62664 -11.06896,0.98839 l -0.58653,-5.97047 c -1.64278,0.16105 -3.28455,0.32825 -4.92528,0.50139 l 0.63089,5.96652 c -1.12894,0.11926 -2.25751,0.24138 -3.38571,0.36627 z"
+ id="path5718"
+ inkscape:original-d="m 401.005,596.805 0,3.72 3.36,0 0,9.92 c 0,4.99999 2.40001,7.24 8.64,7.24 7.31999,0 8.36,-2.64 8.36,-7.16 l 0,-0.48 -4.08,0 0,0.6 c 0,2.08 -0.6,3.16 -3.96,3.16 -3.08,0 -4.12,-0.96 -4.12,-3.24 l 0,-10.04 10.96,0 0,-3.72 -10.96,0 0,-6 -4.84,0 0,6 -3.36,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 434.6535,585.75899 c -6.71008,0.36084 -9.25333,3.62063 -8.67031,11.87697 0.58584,8.29622 3.44892,11.02686 9.88249,10.68183 3.21678,-0.17252 5.44011,-1.00525 6.83236,-2.84172 1.39225,-1.83648 1.95427,-4.67599 1.80478,-8.83229 -0.14878,-4.13633 -0.92196,-6.94145 -2.50848,-8.67348 -1.58653,-1.73203 -3.9858,-2.39172 -7.34084,-2.21131 z m 0.22527,4.19235 c 3.34953,-0.18004 4.7035,1.12868 4.96263,6.88091 0.26092,5.79217 -0.93696,7.15809 -4.19885,7.33312 -3.26188,0.17503 -4.60167,-1.05502 -4.96152,-6.84154 -0.35736,-5.74662 0.84821,-7.19246 4.19774,-7.37249 z"
+ id="path5720"
+ inkscape:original-d="m 435.08625,595.085 c -6.59999,0 -9.32,3.04001 -9.32,11.32 0,8.31999 2.72001,11.28 9.32,11.28 6.59999,0 9.28,-2.96001 9.28,-11.28 0,-8.27999 -2.68001,-11.32 -9.28,-11.32 m 0,4.2 c 3.32,0 4.6,1.36001 4.6,7.12 0,5.79999 -1.28,7.12 -4.6,7.12 -3.32,0 -4.6,-1.32001 -4.6,-7.12 0,-5.75999 1.28,-7.12 4.6,-7.12"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 449.36852,585.73031 0.55123,21.4713 c 0.59824,-0.015 1.19644,-0.0288 1.79458,-0.0415 0.96075,-0.0211 1.92158,-0.0392 2.88245,-0.0544 l -0.22716,-14.35819 c 2.01384,-2.19212 4.27326,-3.45414 6.53803,-3.4595 1.45592,-0.003 2.62783,0.44066 3.02966,0.9222 l -0.0116,3.03995 c 1.48426,0.006 2.9685,0.0181 4.45264,0.0374 l 0.0639,-4.91953 c -0.50545,-1.64668 -2.81384,-3.15825 -5.91305,-3.16116 -3.42545,-0.003 -6.19068,1.7475 -8.49311,4.3456 l -0.0643,-3.91947 c -0.9095,0.0149 -1.81895,0.0323 -2.72836,0.0523 -0.62505,0.0139 -1.25002,0.0289 -1.8749,0.0451 z"
+ id="path5722"
+ inkscape:original-d="m 449.5275,595.645 0,21.48 4.8,0 0,-14.36 c 2.04,-2.16 4.28,-3.4 6.52,-3.4 1.44,0 2.6,0.44 3,0.92 l 0,3.04 4.44,0 0,-4.92 c -0.52,-1.64 -2.8,-3.12 -5.84,-3.12 -3.36,0 -6.08,1.72 -8.4,4.28 l 0,-3.92 -4.52,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 475.03862,585.73708 -0.0988,3.75863 c 1.73826,0.0457 3.47628,0.10063 5.21395,0.16483 l -0.51683,13.99013 c -1.89736,-0.0701 -3.79515,-0.12878 -5.69324,-0.17613 l -0.0928,3.71878 c 5.32506,0.13282 10.64775,0.35574 15.9649,0.66875 l 0.21868,-3.71343 c -1.88222,-0.11081 -3.76513,-0.21042 -5.64858,-0.29883 l 0.83298,-17.73993 c -3.39202,-0.1593 -6.78567,-0.28357 -10.18026,-0.3728 z m 4.37924,-6.34924 c -0.0805,2.31855 0.98423,3.55195 3.31884,3.64923 2.29364,0.0956 3.45716,-1.04525 3.56961,-3.36245 0.11245,-2.31721 -0.95227,-3.53436 -3.27827,-3.6313 -2.36753,-0.0987 -3.5297,1.02597 -3.61018,3.34452 z"
+ id="path5724"
+ inkscape:original-d="m 474.72875,595.645 0,3.76 5.16,0 0,14 -5.8,0 0,3.72 16.4,0 0,-3.72 -5.76,0 0,-17.76 -10,0 m 4.08,-6.48 c 0,2.32 1.08,3.52 3.36,3.52 2.24,0 3.32,-1.2 3.32,-3.52 0,-2.32 -1.08,-3.48 -3.32,-3.48 -2.28,0 -3.36,1.16 -3.36,3.48"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 502.23561,596.31467 c -4.58045,0.54179 -6.97018,2.23687 -7.24593,6.22718 -0.25093,3.63118 1.40793,6.17443 5.79263,6.53574 2.67739,0.22062 4.56536,-0.41005 6.94376,-1.82725 0.0843,-0.0588 0.1687,-0.11759 0.25309,-0.17635 0.15668,1.62272 1.14458,2.31895 3.23736,2.53831 0.85262,0.0894 1.70498,0.18107 2.55707,0.27511 l 0.41248,-3.73705 c -0.20823,-0.023 -0.41646,-0.0458 -0.62472,-0.0685 -0.85905,-0.0936 -1.11981,-0.24141 -1.01382,-1.23571 l 1.06836,-10.02256 c 0.55538,-5.21013 -2.49347,-7.40286 -7.73534,-7.86994 -3.94158,-0.35122 -7.28103,0.44586 -9.01905,2.60793 l -0.28651,4.02965 c 1.40299,0.0998 2.80554,0.20559 4.2076,0.31753 l 0.18144,-2.27265 c 0.64191,-0.43025 1.73667,-0.90743 4.07436,-0.70148 2.90196,0.25566 4.30242,1.32251 4.02766,4.14901 l -0.0464,0.47772 c -2.26615,0.23516 -4.52756,0.48632 -6.78401,0.75334 z m 0.10702,9.12062 c -2.11161,-0.17965 -3.05415,-1.2128 -2.91655,-2.96732 0.1501,-1.91403 1.35861,-2.62548 3.61301,-2.87431 1.88264,-0.25385 3.76913,-0.49658 5.65933,-0.7281 l -0.46052,4.73738 c -0.24971,0.12308 -0.49923,0.24635 -0.74855,0.36982 -2.65894,1.3126 -3.97699,1.60219 -5.14672,1.46253 z"
+ id="path5726"
+ inkscape:original-d="m 502.21,604.725 c -4.52,0.92 -6.8,2.76 -6.8,6.76 0,3.64 1.88,6.08 6.4,6.08 2.76,0 4.64,-0.8 6.92,-2.44 l 0.24,-0.2 c 0.32,1.6 1.4,2.2 3.56,2.2 l 2.64,0 0,-3.76 -0.64,0 c -0.88,0 -1.16,-0.12 -1.16,-1.12 l 0,-10.08 c 0,-5.23999 -3.20001,-7.08 -8.36,-7.08 -3.88,0 -7.08,1.04 -8.64,3.32 l 0,4.04 4.2,0 0,-2.28 c 0.6,-0.48 1.64,-1.04 3.96,-1.04 2.88,0 4.36,0.92 4.36,3.76 l 0,0.48 -6.68,1.36 m 0.88,9.08 c -2.16,0 -3.2,-0.96 -3.2,-2.72 0,-1.92 1.16,-2.72 3.4,-3.16 l 5.6,-1.24 0,4.76 -0.72,0.44 c -2.56,1.56 -3.88,1.96 -5.08,1.92"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 523.54228,579.37756 -0.45506,3.6918 c 1.82951,0.22552 3.6578,0.46124 5.48475,0.70715 l -3.20127,23.78378 c -1.94608,-0.26194 -3.89383,-0.51172 -5.8431,-0.74935 l -0.45016,3.6924 c 5.28607,0.64439 10.56077,1.37888 15.82093,2.20345 l 0.576,-3.67488 c -1.79754,-0.28177 -3.59676,-0.55311 -5.39752,-0.81401 l 3.97423,-27.43161 c -3.49798,-0.50676 -7.00116,-0.97633 -10.5088,-1.40873 z"
+ id="path5728"
+ inkscape:original-d="m 521.29125,585.685 0,3.72 5.36,0 0,24 -6,0 0,3.72 16.4,0 0,-3.72 -5.56,0 0,-27.72 -10.2,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 540.8686,606.78663 -0.0859,0.51282 c -0.32387,1.93293 -0.17787,3.68957 0.87259,5.10726 1.05046,1.41769 3.00259,2.49286 6.31109,3.10942 3.0025,0.55954 5.44471,0.42369 7.27036,-0.45193 1.82565,-0.87561 3.03535,-2.49137 3.53134,-4.88043 0.56105,-2.70237 -0.14604,-4.57063 -2.42764,-6.00529 -1.79549,-1.11323 -4.33379,-1.70445 -6.34638,-2.4178 -2.0126,-0.71336 -3.50433,-1.55447 -3.21134,-3.20863 0.32787,-1.85109 2.40853,-2.21735 5.07625,-1.71806 1.63249,0.30554 2.98078,0.81005 4.20617,1.70339 l -0.44014,2.23706 c 1.3557,0.26674 2.71026,0.53934 4.06363,0.81782 l 0.87067,-4.23133 c -2.00006,-2.16752 -4.68385,-3.35565 -7.97254,-3.9717 -2.40636,-0.45076 -4.75392,-0.49338 -6.59443,0.17661 -1.84051,0.66999 -3.17005,2.05076 -3.57033,4.43728 -0.71124,4.2405 2.55162,5.76118 5.85957,6.91467 3.30796,1.1535 6.67257,1.94177 6.16398,4.51187 -0.41929,2.11887 -2.20481,3.05963 -5.63632,2.41899 -3.39296,-0.63344 -4.26792,-1.99485 -3.92707,-3.92488 l 0.0765,-0.43328 c -1.3623,-0.24061 -2.72567,-0.47523 -4.09005,-0.70386 z"
+ id="path5730"
+ inkscape:original-d="m 542.0925,610.325 0,0.52 c 0,3.92 1.76001,6.84 8.68,6.84 6.27999,0 9.76,-2.44 9.76,-7.32 0,-2.76 -1.08,-4.44 -3.6,-5.4 -3.96,-1.48 -10.4,-0.4 -10.4,-3.76 0,-1.88 1.96,-2.6 4.64,-2.6 1.64,0 3.04,0.24 4.4,0.88 l 0,2.28 4.12,0 0,-4.32 c -2.36,-1.72 -5.16,-2.36 -8.44,-2.36 -4.8,0 -9.08,1.48 -9.08,6.32 0,8.59999 13.92,3.84001 13.92,9.08 0,2.16 -1.6,3.44 -5.16,3.44 -3.52,0 -4.64,-1.2 -4.64,-3.16 l 0,-0.44 -4.2,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient5749);fill-opacity:1;stroke:none"
+ id="path5680-4"
+ sodipodi:cx="249.50768"
+ sodipodi:cy="717.68018"
+ sodipodi:rx="81.822357"
+ sodipodi:ry="81.822357"
+ d="m 331.33003,717.68018 a 81.822357,81.822357 0 1 1 -163.64471,0 81.822357,81.822357 0 1 1 163.64471,0 z"
+ transform="matrix(0.81066669,0,0,0.81066669,269.97875,-275.7564)" />
+ <g
+ transform="matrix(0.89992469,0.2411341,-0.2411341,0.89992469,210.84676,-347.11565)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:semi-condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:NK57 Monospace;-inkscape-font-specification:NK57 Monospace Semi-Bold Semi-Condensed"
+ id="flowRoot5558-9"
+ inkscape:path-effect="#path-effect5809">
+ <path
+ d="m 358.86322,586.40773 c -1.84428,10.36352 -3.62184,20.74395 -5.3312,31.1405 1.40417,0.38085 2.81049,0.75534 4.2189,1.12334 2.99769,-5.61296 5.94143,-11.24811 8.82944,-16.90473 -0.11061,6.35289 -0.16188,12.71408 -0.15214,19.08257 1.51112,0.36361 3.02445,0.71954 4.53994,1.06765 3.33501,-9.99196 6.60207,-20.00306 9.79979,-30.03267 -1.449,-0.32268 -2.89691,-0.65315 -4.34364,-0.99125 -2.14728,6.74497 -4.3215,13.4825 -6.52233,20.21244 -0.0587,-5.73181 -0.0655,-11.45776 -0.0219,-17.17701 -0.8371,-0.20712 -1.67372,-0.41672 -2.50984,-0.62875 -2.63686,5.17949 -5.32037,10.34098 -8.04916,15.48389 1.28471,-7.06766 2.59447,-14.12937 3.92899,-21.18498 -1.46381,-0.38968 -2.92614,-0.78674 -4.38689,-1.191 z"
+ id="path5791"
+ inkscape:original-d="m 353.5625,585.685 3.08,31.44 4.2,0 4.28,-18.56 4.32,18.56 4.48,0 2.92,-31.44 -4.6,0 -1.72,21.16 -4.08,-16.68 -2.64,0 -3.92,17 -1.64,-21.48 -4.68,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 390.04014,603.42065 c -3.20365,-0.62066 -5.60875,-0.34792 -7.44622,1.09898 -1.83748,1.4469 -3.10783,4.0664 -3.98529,8.11424 -0.8817,4.06739 -0.79965,6.97426 0.35954,9.03919 1.15919,2.06494 3.3946,3.28906 6.77705,3.94272 3.38245,0.65367 5.90581,0.34896 7.7422,-1.13683 1.83639,-1.48579 2.98518,-4.1538 3.6814,-8.25545 0.69287,-4.08192 0.49987,-6.98319 -0.65433,-9.00851 -1.1542,-2.02532 -3.2707,-3.17367 -6.47435,-3.79434 z m -0.79817,4.12476 c 3.2565,0.6306 4.27271,2.18651 3.24221,7.85473 -1.03766,5.70758 -2.57855,6.78168 -5.94839,6.13017 -3.36984,-0.65152 -4.3981,-2.2223 -3.23252,-7.90626 1.15754,-5.64477 2.6822,-6.70924 5.9387,-6.07864 z"
+ id="path5793"
+ inkscape:original-d="m 388.52375,595.085 c -6.59999,0 -9.32,3.04001 -9.32,11.32 0,8.31999 2.72001,11.28 9.32,11.28 6.59999,0 9.28,-2.96001 9.28,-11.28 0,-8.27999 -2.68001,-11.32 -9.28,-11.32 m 0,4.2 c 3.32,0 4.6,1.36001 4.6,7.12 0,5.79999 -1.28,7.12 -4.6,7.12 -3.32,0 -4.6,-1.32001 -4.6,-7.12 0,-5.75999 1.28,-7.12 4.6,-7.12"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 404.00662,606.43696 -3.3159,21.22105 c 1.65004,0.2573 3.30196,0.50447 4.95567,0.74132 l 2.03986,-14.21146 c 2.33942,-1.84576 4.71164,-2.77467 6.92773,-2.49517 1.42463,0.17969 2.52063,0.7523 2.86151,1.2756 l -0.35547,3.01782 c 1.48104,0.17452 2.96299,0.34013 4.44578,0.49667 l 0.51613,-4.89032 c -0.34195,-1.68441 -2.41671,-3.38948 -5.39232,-3.75206 -3.28884,-0.40074 -6.16779,0.93852 -8.82545,3.1407 l 0.55969,-3.87907 c -1.4733,-0.21298 -2.94573,-0.43472 -4.41723,-0.66508 z"
+ id="path5795"
+ inkscape:original-d="m 402.965,595.645 0,21.48 4.8,0 0,-14.36 c 2.04,-2.16 4.28,-3.4 6.52,-3.4 1.44,0 2.6,0.44 3,0.92 l 0,3.04 4.44,0 0,-4.92 c -0.52,-1.64 -2.8,-3.12 -5.84,-3.12 -3.36,0 -6.08,1.72 -8.4,4.28 l 0,-3.92 -4.52,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 441.11493,610.32059 c -3.35484,2.88553 -6.79551,5.71957 -10.31684,8.50146 l 1.51069,-19.04913 c -1.52674,-0.12102 -3.05337,-0.25266 -4.57978,-0.39471 l -2.90676,31.28754 c 1.66609,0.15464 3.3336,0.29825 5.00243,0.43063 l 0.60997,-7.69138 c 1.87975,-1.41491 3.73795,-2.84443 5.57386,-4.28849 1.45636,4.23356 2.97445,8.4586 4.55579,12.67409 1.74384,0.0869 3.48891,0.1612 5.23508,0.22266 -2.08181,-5.30186 -4.06087,-10.62027 -5.94027,-15.95308 2.26435,-1.81346 4.4932,-3.64971 6.68509,-5.5086 -1.81006,-0.062 -3.61987,-0.1391 -5.42926,-0.23099 z"
+ id="path5797"
+ inkscape:original-d="m 440.80625,595.645 -9.76,9.16 0,-19.12 -4.8,0 0,31.44 4.8,0 0,-7.72 5.16,-4.68 5.12,12.4 5,0 -6.48,-15.68 6.48,-5.8 -5.52,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 448.74959,625.30316 -0.0139,0.51975 c -0.0571,2.12996 0.42932,3.98256 2.06302,5.24872 1.37181,1.0615 3.55551,1.71042 6.8728,1.71103 3.2982,6.1e-4 5.85579,-0.65322 7.55798,-1.90924 1.7022,-1.25603 2.54863,-3.11338 2.47884,-5.55135 -0.0789,-2.75769 -1.2295,-4.39693 -3.79647,-5.31071 -2.01665,-0.7037 -4.64033,-0.78166 -6.76266,-1.12114 -2.12234,-0.33949 -3.73481,-0.93393 -3.71242,-2.61362 0.0251,-1.87966 1.98065,-2.56809 4.64178,-2.5694 1.62845,-8e-4 3.01836,0.22739 4.38118,0.84848 l 0.0316,2.27898 c 1.37655,-0.019 2.75299,-0.0465 4.12923,-0.0824 l -0.11282,-4.31673 c -2.37972,-1.65791 -5.13086,-2.24954 -8.35304,-2.2475 -2.71348,0.002 -5.25789,0.45498 -6.96538,1.7582 -1.25993,0.96258 -2.0663,2.38949 -2.12082,4.44333 -0.0549,2.06644 0.7211,3.38389 1.94311,4.25682 1.93067,1.37911 4.96192,1.63544 7.50284,2.01521 2.54092,0.37978 4.60186,0.89209 4.63255,2.88129 0.0333,2.15896 -1.60829,3.47995 -5.30733,3.48068 -3.65747,7.1e-4 -4.80503,-1.23242 -4.77748,-3.19205 l 0.006,-0.43992 c -0.71763,-0.01 -1.43527,-0.0222 -2.15293,-0.0367 -0.72208,-0.015 -1.44404,-0.0322 -2.16586,-0.0517 z"
+ id="path5799"
+ inkscape:original-d="m 448.9675,610.325 0,0.52 c 0,3.92 1.76001,6.84 8.68,6.84 6.27999,0 9.76,-2.44 9.76,-7.32 0,-2.76 -1.08,-4.44 -3.6,-5.4 -3.96,-1.48 -10.4,-0.4 -10.4,-3.76 0,-1.88 1.96,-2.6 4.64,-2.6 1.64,0 3.04,0.24 4.4,0.88 l 0,2.28 4.12,0 0,-4.32 c -2.36,-1.72 -5.16,-2.36 -8.44,-2.36 -4.8,0 -9.08,1.48 -9.08,6.32 0,8.59999 13.92,3.84001 13.92,9.08 0,2.16 -1.6,3.44 -5.16,3.44 -3.52,0 -4.64,-1.2 -4.64,-3.16 l 0,-0.44 -4.2,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 472.15787,600.47469 1.39896,31.39431 c 1.67441,-0.0747 3.34806,-0.16105 5.02082,-0.25904 l -0.87965,-15.0073 c 0.83512,-1.53081 2.31914,-2.65831 4.90284,-2.84805 2.14645,-0.15762 3.19847,0.47236 3.43854,3.38129 l 1.14442,13.86726 c 1.6693,-0.13756 3.33749,-0.28656 5.00443,-0.44689 l -1.36129,-14.12972 c -0.56753,-5.89069 -2.88759,-7.37922 -6.73366,-7.07609 -3.37511,0.26601 -5.56659,1.71673 -6.61987,3.42055 l -0.7346,-12.53269 c -1.52679,0.0896 -3.05381,0.16841 -4.58094,0.23637 z"
+ id="path5801"
+ inkscape:original-d="m 472.80875,585.685 0,31.44 4.8,0 0,-15.04 c 0.92,-1.48 2.48,-2.52 5.08,-2.52 2.16,0 3.16,0.72 3.16,3.64 l 0,13.92 4.8,0 0,-14.2 c 0,-5.91999 -2.2,-7.64 -6.12,-7.64 -3.44,0 -5.76,1.32 -6.92,2.96 l 0,-12.56 -4.8,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 504.03855,606.99303 c -3.22006,0.44187 -5.39912,1.46724 -6.67328,3.42302 -1.27417,1.95578 -1.64467,4.84074 -1.18991,8.95458 0.45695,4.13371 1.45972,6.86202 3.22208,8.44816 1.76236,1.58614 4.28349,2.03141 7.70891,1.56279 3.42543,-0.46862 5.72252,-1.57278 6.98303,-3.57242 1.2605,-1.99965 1.48347,-4.89611 0.81345,-9.00208 -0.6668,-4.08623 -1.78909,-6.76827 -3.5333,-8.31112 -1.7442,-1.54285 -4.11092,-1.9448 -7.33098,-1.50293 z m 0.57012,4.1607 c 3.27798,-0.44955 4.73993,0.69308 5.59444,6.38925 0.86045,5.73573 -0.25329,7.25101 -3.66145,7.71752 -3.40816,0.46651 -4.88873,-0.6936 -5.60224,-6.44846 -0.70859,-5.71518 0.39128,-7.20876 3.66925,-7.65831 z"
+ id="path5803"
+ inkscape:original-d="m 504.93,595.085 c -6.59999,0 -9.32,3.04001 -9.32,11.32 0,8.31999 2.72001,11.28 9.32,11.28 6.59999,0 9.28,-2.96001 9.28,-11.28 0,-8.27999 -2.68001,-11.32 -9.28,-11.32 m 0,4.2 c 3.32,0 4.6,1.36001 4.6,7.12 0,5.79999 -1.28,7.12 -4.6,7.12 -3.32,0 -4.6,-1.32001 -4.6,-7.12 0,-5.75999 1.28,-7.12 4.6,-7.12"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 524.06248,610.79695 c 0.68674,-1.76057 1.95835,-2.94111 4.30567,-3.4217 1.9561,-0.4005 3.93427,-0.13167 5.24073,5.93101 1.29804,6.02356 -0.41933,7.29542 -2.57034,7.73483 -2.31335,0.47257 -4.00563,-0.18045 -5.3091,-1.52003 z m -5.87011,-5.46692 5.18531,29.1875 c 1.68222,-0.29837 3.36225,-0.60769 5.03994,-0.92785 -0.60236,-3.45578 -1.2062,-6.9113 -1.81153,-10.36655 0.74257,1.44654 3.85781,2.11343 7.21708,1.40929 2.00736,-0.42077 3.66554,-1.23523 4.55268,-3.08859 0.88715,-1.85337 0.99702,-4.74283 -0.0513,-9.32595 -1.05276,-4.60262 -2.38698,-7.14887 -3.91758,-8.44696 -1.53061,-1.29809 -3.26459,-1.34762 -5.15785,-0.95044 -2.8592,0.59981 -5.19449,1.99114 -6.17359,4.29537 l -0.49363,-2.59402 c -1.4617,0.27835 -2.92493,0.54777 -4.38955,0.8082 z"
+ id="path5805"
+ inkscape:original-d="m 524.17125,602.085 c 1,-1.6 2.48,-2.52 4.88,-2.52 2,0 3.88,0.68001 3.88,6.88 0,6.15999 -1.88,7.04 -4,7.04 -2.28,0 -3.76,-0.96 -4.76,-2.52 l 0,-8.88 m -4.8,-6.44 0,29.64 4.8,0 0.16,-10.52 c 0.44,1.56 3.24,2.8 6.52,2.8 3.92,0 6.84,-1.76001 6.84,-11.16 0,-9.43999 -2.92,-11.12 -6.84,-11.12 -2.96,0 -5.56,0.92 -6.96,3 l 0,-2.64 -4.52,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 543.5991,615.007 0.12185,0.50569 c 0.45928,1.90605 1.30043,3.46498 2.91102,4.3257 1.61059,0.86071 3.99604,1.02586 7.49352,0.0981 3.17402,-0.84193 5.46976,-2.12221 6.79128,-3.76827 1.32152,-1.64606 1.66872,-3.65703 0.98439,-5.9991 -0.77408,-2.64923 -2.30155,-3.94608 -5.0183,-4.17709 -2.13071,-0.16776 -4.6901,0.42802 -6.83081,0.64574 -2.1407,0.21773 -3.85415,0.061 -4.26677,-1.56799 -0.46174,-1.82295 1.25541,-2.99628 3.83567,-3.68277 1.57896,-0.4201 2.98583,-0.55582 4.46584,-0.30323 l 0.61157,2.19676 c 1.32893,-0.36985 2.65586,-0.74674 3.98072,-1.1306 l -1.20269,-4.14932 c -2.73051,-0.99997 -5.55588,-0.86917 -8.68474,-0.0362 -2.28941,0.60947 -4.36574,1.52017 -5.73552,2.86586 -1.36979,1.34568 -2.03676,3.13017 -1.46919,5.48344 1.00849,4.18142 4.67067,4.28599 8.23715,3.91497 3.56647,-0.37102 7.02146,-1.21348 7.72761,1.30989 0.58217,2.08033 -0.66495,3.77317 -4.22958,4.72011 -3.52457,0.93629 -4.94784,0.0424 -5.42803,-1.85846 l -0.1078,-0.42672 c -1.39375,0.35216 -2.78951,0.69668 -4.18719,1.03349 z"
+ id="path5807"
+ inkscape:original-d="m 542.0925,610.325 0,0.52 c 0,3.92 1.76001,6.84 8.68,6.84 6.27999,0 9.76,-2.44 9.76,-7.32 0,-2.76 -1.08,-4.44 -3.6,-5.4 -3.96,-1.48 -10.4,-0.4 -10.4,-3.76 0,-1.88 1.96,-2.6 4.64,-2.6 1.64,0 3.04,0.24 4.4,0.88 l 0,2.28 4.12,0 0,-4.32 c -2.36,-1.72 -5.16,-2.36 -8.44,-2.36 -4.8,0 -9.08,1.48 -9.08,6.32 0,8.59999 13.92,3.84001 13.92,9.08 0,2.16 -1.6,3.44 -5.16,3.44 -3.52,0 -4.64,-1.2 -4.64,-3.16 l 0,-0.44 -4.2,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient5826);fill-opacity:1;stroke:none"
+ id="path5680-4-3"
+ sodipodi:cx="249.50768"
+ sodipodi:cy="717.68018"
+ sodipodi:rx="81.822357"
+ sodipodi:ry="81.822357"
+ d="m 331.33003,717.68018 a 81.822357,81.822357 0 1 1 -163.64471,0 81.822357,81.822357 0 1 1 163.64471,0 z"
+ transform="matrix(0.81066669,0,0,0.81066669,-43.673611,7.5913832)" />
+ <g
+ transform="matrix(0.88833144,-0.07069696,0.07069696,0.88833144,-279.42433,87.288059)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:semi-condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:NK57 Monospace;-inkscape-font-specification:NK57 Monospace Semi-Bold Semi-Condensed"
+ id="flowRoot5558-9-5"
+ inkscape:path-effect="#path-effect5868">
+ <path
+ d="m 361.39112,586.53658 -9.05444,30.10798 c 1.71214,0.51573 3.42868,1.01867 5.14943,1.50861 l 3.89622,-13.69916 c 2.89074,0.82192 5.7924,1.60571 8.7039,2.35011 l -3.52865,13.80043 c 1.72129,0.44021 3.44637,0.86722 5.17504,1.28079 l 7.31915,-30.5862 c -1.57007,-0.37588 -3.13794,-0.76398 -4.70341,-1.16408 l -3.18173,12.44364 c -2.87338,-0.73458 -5.73753,-1.50803 -8.59136,-2.3191 l 3.51316,-12.35234 c -1.56863,-0.44519 -3.13447,-0.90216 -4.69731,-1.37068 z"
+ id="path5852"
+ inkscape:original-d="m 355.6025,585.685 0,31.44 5.12,0 0,-14.24 8.96,0 0,14.24 5.08,0 0,-31.44 -5.08,0 0,12.84 -8.96,0 0,-12.84 -5.12,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 385.52418,612.23581 c -4.66349,-0.009 -7.33294,1.25078 -8.21322,5.15384 -0.80106,3.55178 0.58387,6.39458 5.24214,7.3468 2.84443,0.58145 4.94869,0.167 7.58548,-1.021 0.0942,-0.0507 0.18826,-0.10136 0.28232,-0.1521 0.0437,1.63389 1.05522,2.43115 3.29431,2.80942 0.91223,0.1541 1.82519,0.30432 2.73887,0.45063 l 0.59539,-3.71207 c -0.21891,-0.0351 -0.43779,-0.0704 -0.65662,-0.10589 -0.90268,-0.14656 -1.16981,-0.31379 -1.00567,-1.30014 l 1.65448,-9.9424 c 0.43003,-2.58423 -0.065,-4.4586 -1.27644,-5.80127 -1.21145,-1.34268 -3.14224,-2.15536 -5.62616,-2.63815 -3.73552,-0.72606 -7.01455,-0.37869 -9.02026,1.51139 l -0.87735,3.94467 c 1.3728,0.30539 2.74747,0.60182 4.1239,0.88917 l 0.46589,-2.23235 c 0.68378,-0.34768 1.80747,-0.68085 4.06975,-0.23779 2.80834,0.55001 4.09228,1.70829 3.58563,4.50279 l -0.0856,0.47231 c -2.28691,0.046 -4.57944,0.0666 -6.87681,0.0621 z m -0.91226,9.08041 c -2.20293,-0.44119 -3.06183,-1.60956 -2.69852,-3.33203 0.39634,-1.87906 1.72445,-2.41074 4.05461,-2.39408 1.95095,-0.0319 3.898,-0.0817 5.8407,-0.14962 l -0.84917,4.68374 c -0.27007,0.10013 -0.54042,0.19992 -0.81105,0.29937 -2.88592,1.05643 -4.32059,1.17695 -5.53657,0.89262 z"
+ id="path5854"
+ inkscape:original-d="m 385.80375,604.725 c -4.52,0.92 -6.8,2.76 -6.8,6.76 0,3.64 1.88,6.08 6.4,6.08 2.76,0 4.64,-0.8 6.92,-2.44 l 0.24,-0.2 c 0.32,1.6 1.4,2.2 3.56,2.2 l 2.64,0 0,-3.76 -0.64,0 c -0.88,0 -1.16,-0.12 -1.16,-1.12 l 0,-10.08 c 0,-5.23999 -3.20001,-7.08 -8.36,-7.08 -3.88,0 -7.08,1.04 -8.64,3.32 l 0,4.04 4.2,0 0,-2.28 c 0.6,-0.48 1.64,-1.04 3.96,-1.04 2.88,0 4.36,0.92 4.36,3.76 l 0,0.48 -6.68,1.36 m 0.88,9.08 c -2.16,0 -3.2,-0.96 -3.2,-2.72 0,-1.92 1.16,-2.72 3.4,-3.16 l 5.6,-1.24 0,4.76 -0.72,0.44 c -2.56,1.56 -3.88,1.96 -5.08,1.92"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 403.92977,606.24306 -3.10831,21.24889 c 1.66526,0.24318 3.33273,0.47323 5.00225,0.68996 l 1.93869,-14.90947 c 1.10485,-1.34823 2.76812,-2.17899 5.33401,-1.88967 2.13167,0.24036 3.04716,1.05077 2.7516,3.95444 l -1.40896,13.8422 c 1.67607,0.17045 3.3539,0.32726 5.03333,0.47023 l 1.20376,-14.1422 c 0.25093,-2.94794 -0.13254,-4.89527 -1.04558,-6.15231 -0.91304,-1.25705 -2.35843,-1.82444 -4.26538,-2.02745 -3.34688,-0.3563 -5.78999,0.6172 -7.41877,2.37975 l 0.37391,-2.85467 c -1.46464,-0.19215 -2.92821,-0.39543 -4.39055,-0.6097 z"
+ id="path5856"
+ inkscape:original-d="m 402.965,595.645 0,21.48 4.8,0 0,-15.04 c 0.92,-1.48 2.48,-2.52 5.08,-2.52 2.16,0 3.16,0.72 3.16,3.64 l 0,13.92 4.8,0 0,-14.2 c 0,-5.91999 -2.2,-7.64 -6.12,-7.64 -3.44,0 -5.8,1.28 -7.2,3.24 l 0,-2.88 -4.52,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 426.49054,624.83735 c -1.66469,0.73667 -2.1915,1.65769 -2.2639,2.6947 -0.0668,0.95725 0.25361,1.7822 1.0629,2.31636 -2.02292,1.22908 -2.71646,2.45486 -2.84069,4.1295 -0.2189,2.95054 1.46763,4.82678 5.9338,5.06854 3.25212,0.17604 6.50996,0.30112 9.77243,0.37398 0.52124,0.0103 1.04239,0.0192 1.56346,0.0269 4.42953,0.0653 6.54425,-1.61053 6.52143,-6.12825 -0.0226,-4.47774 -2.07094,-6.20241 -6.32106,-6.26869 -0.49996,-0.008 -0.99996,-0.0169 -1.5,-0.0272 -2.96046,-0.0643 -5.91832,-0.17395 -8.87263,-0.32804 -0.49932,-0.026 -0.6527,-0.27504 -0.63971,-0.5146 0.013,-0.23956 0.1899,-0.42996 0.57136,-0.57008 1.28954,-0.54619 2.57179,-1.10093 3.84655,-1.6642 0.45195,0.0579 0.90567,0.0748 1.40064,0.092 1.42438,0.0494 2.67529,-0.007 3.7611,-0.17746 4.10102,-0.64639 5.81512,-2.88901 5.8213,-7.41009 0.005,-3.71852 -1.14317,-5.86946 -3.75166,-6.99025 0.1478,-0.27768 0.29517,-0.55547 0.4421,-0.83337 0.52052,-0.95257 0.95002,-1.26532 2.15541,-1.25768 1.06281,0.007 2.1258,0.007 3.18892,0.002 l -0.0212,-3.59813 c -1.01105,0.005 -2.02191,0.005 -3.03255,-0.002 -2.56674,-0.0158 -3.60543,0.46004 -4.4182,2.03926 -0.18357,0.35739 -0.35558,0.77063 -0.53121,1.24622 -0.20694,0.55547 -0.4151,1.11068 -0.62448,1.66563 -0.73967,-0.0983 -1.5577,-0.1617 -2.45503,-0.19221 -3.21869,-0.10942 -5.51204,0.28071 -7.06186,1.41973 -1.54983,1.13903 -2.35691,3.02489 -2.54868,5.85717 -0.2782,4.1088 0.99481,6.41479 4.27919,7.50438 -1.13982,0.51535 -2.28578,1.02394 -3.43775,1.52575 z m 8.65613,-13.02956 c 1.66988,0.057 2.82976,0.28142 3.5765,0.91924 0.78986,0.67508 1.11865,1.81109 1.08657,3.68127 -0.0324,1.89073 -0.40384,3.02649 -1.24305,3.67136 -0.79383,0.60988 -2.00533,0.78072 -3.72998,0.72116 -3.54799,-0.12253 -4.84814,-1.04961 -4.65829,-4.72344 0.18779,-3.63389 1.53294,-4.3869 4.96825,-4.26959 z m 3.69859,18.98448 c 1.94152,0.0363 3.03114,0.80126 3.01352,2.6807 -0.018,1.91943 -1.14025,2.59424 -3.11606,2.55809 -0.17176,-0.003 -0.34353,-0.006 -0.5153,-0.01 -2.89569,-0.0642 -5.78803,-0.17012 -8.67623,-0.31691 -2.10177,-0.10682 -3.04313,-0.89088 -2.94875,-2.44739 0.0653,-1.07759 0.58246,-1.80232 2.41166,-2.82588 3.10427,0.1657 6.21289,0.28322 9.32481,0.35136 0.16879,0.003 0.33757,0.007 0.50635,0.01 z"
+ id="path5858"
+ inkscape:original-d="m 427.16625,611.805 c -1.56,0.84 -2,1.8 -2,2.84 0,0.96 0.36,1.76 1.16,2.24 -1.84,1.36 -2.4,2.64 -2.4,4.32 0,2.96 1.68,4.68 5.8,4.68 l 10.44,0 c 4.08,0 6.04,-1.64 6.04,-6.16 0,-4.48 -1.96,-6.24 -6.04,-6.24 l -9.96,0 c -0.48,0 -0.64,-0.24 -0.64,-0.48 0,-0.24 0.16,-0.44 0.52,-0.6 l 3.64,-1.84 c 0.44,0.04 0.88,0.04 1.36,0.04 6.59999,0 9.28,-2.04001 9.28,-7.76 0,-3.72 -1.16,-5.88 -3.84,-6.96 l 0.44,-0.84 c 0.52,-0.96 0.96,-1.28 2.2,-1.28 l 3.28,0 0,-3.6 -3.16,0 c -3.28,0 -4.16,0.76 -5.08,3.36 l -0.6,1.68 c -0.76,-0.08 -1.6,-0.12 -2.52,-0.12 -6.59999,0 -9.32,2.08001 -9.32,7.76 0,4.12 1.4,6.32 4.64,7.24 l -3.24,1.72 m 7.92,-13.44 c 3.48,0 4.8,0.84 4.8,4.48 0,3.68 -1.32,4.52 -4.8,4.52 -3.48,0 -4.8,-0.84 -4.8,-4.52 0,-3.64 1.32,-4.48 4.8,-4.48 m 4.12,18.88 c 1.84,0 2.88,0.76 2.88,2.64 0,1.92 -1.04,2.6 -2.88,2.6 l -8.56,0 c -1.96,0 -2.88,-0.72 -2.88,-2.28 0,-1.08 0.44,-1.84 2.12,-2.96 l 9.32,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 457.99825,608.38658 c -3.22429,0.14997 -5.47107,0.9659 -6.91462,2.79212 -1.44356,1.82622 -2.08531,4.66126 -2.02372,8.79826 0.0619,4.15699 0.80212,6.96769 2.4158,8.7104 1.61368,1.74271 4.09958,2.41878 7.57259,2.25699 3.473,-0.1618 5.8706,-1.06471 7.30384,-2.94804 1.43324,-1.88333 1.90118,-4.74886 1.58124,-8.8936 -0.31839,-4.12481 -1.20823,-6.88965 -2.80614,-8.5755 -1.59791,-1.68584 -3.90469,-2.2906 -7.12899,-2.14063 z m 0.19514,4.19215 c 3.29035,-0.15309 4.64177,1.10917 4.99704,6.85373 0.35774,5.78446 -0.88742,7.19908 -4.33542,7.35966 -3.448,0.16059 -4.82079,-1.13251 -5.00059,-6.92543 -0.17855,-5.75296 1.04863,-7.13487 4.33897,-7.28796 z"
+ id="path5860"
+ inkscape:original-d="m 458.3675,595.085 c -6.59999,0 -9.32,3.04001 -9.32,11.32 0,8.31999 2.72001,11.28 9.32,11.28 6.59999,0 9.28,-2.96001 9.28,-11.28 0,-8.27999 -2.68001,-11.32 -9.28,-11.32 m 0,4.2 c 3.32,0 4.6,1.36001 4.6,7.12 0,5.79999 -1.28,7.12 -4.6,7.12 -3.32,0 -4.6,-1.32001 -4.6,-7.12 0,-5.75999 1.28,-7.12 4.6,-7.12"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 471.91826,607.97111 1.3156,14.13059 c 0.27424,2.94552 1.01932,4.80474 2.21735,5.87246 1.19803,1.06772 2.84651,1.34367 4.89325,1.11407 3.63401,-0.40767 5.8863,-2.03999 7.07275,-4.13699 l 0.3801,2.81411 c 1.5663,-0.21089 3.13087,-0.4325 4.69361,-0.66463 L 489.32591,605.854 c -1.55773,0.23267 -3.11658,0.4541 -4.6764,0.66406 l 2.00554,14.94405 c -0.74726,1.55283 -2.21929,2.80013 -4.89758,3.11644 -2.22505,0.26279 -3.33477,-0.34698 -3.64934,-3.24871 l -1.49958,-13.83291 c -1.56275,0.16997 -3.12623,0.3281 -4.69029,0.47418 z"
+ id="path5862"
+ inkscape:original-d="m 472.56875,595.645 0,14.2 c 0,5.91999 2.2,7.68 6.12,7.68 3.48,0 5.8,-1.32 7.2,-3.24 l 0,2.84 4.52,0 0,-21.48 -4.8,0 0,15.08 c -0.92,1.44 -2.48,2.48 -5.08,2.48 -2.16,0 -3.16,-0.72 -3.16,-3.64 l 0,-13.92 -4.8,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 493.13039,606.43828 0.58884,3.67383 c 1.10509,-0.17734 2.20948,-0.36018 3.31311,-0.54844 l 1.66689,9.78208 c 0.42008,2.46523 1.33582,4.14838 2.96116,5.06597 1.62534,0.91759 3.96136,1.07089 7.17283,0.44215 3.76731,-0.73757 5.7742,-1.85134 6.71298,-3.30833 0.93879,-1.457 0.81296,-3.2654 0.32635,-5.47394 l -0.10335,-0.46907 c -1.36404,0.30052 -2.72986,0.59339 -4.09738,0.87849 l 0.12257,0.58773 c 0.42489,2.03749 0.0395,3.2381 -3.38211,3.9115 -3.13646,0.61727 -4.37532,-0.1433 -4.7899,-2.38636 l -1.82565,-9.87732 c 3.59249,-0.66455 7.17617,-1.38566 10.74936,-2.16074 l -0.78898,-3.6379 c -3.53653,0.76724 -7.0827,1.48108 -10.63681,2.13892 l -1.09103,-5.90278 c -1.54218,0.28573 -3.08563,0.56071 -4.63022,0.82474 l 1.0082,5.91658 c -1.09163,0.18636 -2.18393,0.36735 -3.27686,0.54289 z"
+ id="path5864"
+ inkscape:original-d="m 494.13,596.805 0,3.72 3.36,0 0,9.92 c 0,4.99999 2.40001,7.24 8.64,7.24 7.31999,0 8.36,-2.64 8.36,-7.16 l 0,-0.48 -4.08,0 0,0.6 c 0,2.08 -0.6,3.16 -3.96,3.16 -3.08,0 -4.12,-0.96 -4.12,-3.24 l 0,-10.04 10.96,0 0,-3.72 -10.96,0 0,-6 -4.84,0 0,6 -3.36,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 520.16064,614.89502 0.11794,0.5068 c 0.44453,1.91027 1.27398,3.4763 2.87924,4.34943 1.60526,0.87313 3.99193,1.05596 7.49785,0.15284 3.18168,-0.81959 5.48648,-2.08416 6.81971,-3.72108 1.33322,-1.63691 1.69491,-3.6454 1.02789,-5.99246 -0.75449,-2.65487 -2.2722,-3.96297 -4.98749,-4.21398 -2.12966,-0.18344 -4.69383,0.39362 -6.8365,0.59546 -2.14268,0.20185 -3.85522,0.0321 -4.25569,-1.60055 -0.44814,-1.82699 1.27759,-2.98741 3.86305,-3.65458 1.58215,-0.40827 2.99022,-0.53344 4.46862,-0.26976 l 0.5956,2.20154 c 1.33181,-0.36002 2.66169,-0.72707 3.98953,-1.10099 l -1.17215,-4.1582 c -2.72376,-1.02069 -5.55094,-0.91134 -8.68592,-0.1021 -2.29389,0.59213 -4.37643,1.48699 -5.75594,2.82231 -1.3795,1.33532 -2.05998,3.11498 -1.51061,5.47346 0.97614,4.19067 4.63873,4.32373 8.20895,3.97901 3.57022,-0.34472 7.03167,-1.16237 7.71946,1.36647 0.56704,2.08485 -0.69204,3.76922 -4.26495,4.69077 -3.53278,0.91119 -4.95053,0.006 -5.41653,-1.89877 l -0.10461,-0.42766 c -1.39709,0.34187 -2.79627,0.67593 -4.19745,1.00204 z"
+ id="path5866"
+ inkscape:original-d="m 518.81125,610.325 0,0.52 c 0,3.92 1.76001,6.84 8.68,6.84 6.27999,0 9.76,-2.44 9.76,-7.32 0,-2.76 -1.08,-4.44 -3.6,-5.4 -3.96,-1.48 -10.4,-0.4 -10.4,-3.76 0,-1.88 1.96,-2.6 4.64,-2.6 1.64,0 3.04,0.24 4.4,0.88 l 0,2.28 4.12,0 0,-4.32 c -2.36,-1.72 -5.16,-2.36 -8.44,-2.36 -4.8,0 -9.08,1.48 -9.08,6.32 0,8.59999 13.92,3.84001 13.92,9.08 0,2.16 -1.6,3.44 -5.16,3.44 -3.52,0 -4.64,-1.2 -4.64,-3.16 l 0,-0.44 -4.2,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient5885);fill-opacity:1;stroke:none"
+ id="path5680-4-3-3"
+ sodipodi:cx="249.50768"
+ sodipodi:cy="717.68018"
+ sodipodi:rx="81.822357"
+ sodipodi:ry="81.822357"
+ d="m 331.33003,717.68018 a 81.822357,81.822357 0 1 1 -163.64471,0 81.822357,81.822357 0 1 1 163.64471,0 z"
+ transform="matrix(0.59461731,0,0,0.59461731,311.7629,109.61273)" />
+ <g
+ transform="matrix(0.99718594,-0.07496796,0.07496796,0.99718594,4.6325647,-25.634703)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:semi-condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:NK57 Monospace;-inkscape-font-specification:NK57 Monospace Semi-Bold Semi-Condensed"
+ id="flowRoot5558-9-5-8"
+ inkscape:path-effect="#path-effect5917">
+ <path
+ d="m 369.65882,588.52133 c -3.45996,-0.8733 -5.71604,-1.0029 -7.68076,0.77099 -1.96472,1.7739 -3.64358,5.43784 -5.73674,12.01269 -2.09316,6.57485 -2.79619,10.49333 -1.86924,13.07775 0.92694,2.58441 3.47196,3.8449 7.75147,4.8788 0.11058,1.31003 0.23058,2.62036 0.35989,3.93096 0.15957,1.63096 0.51635,2.77541 1.38166,3.62794 0.8653,0.85252 2.24084,1.41645 4.43382,1.8431 1.29955,0.25283 2.59984,0.49204 3.90071,0.71789 l 0.75044,-4.30671 c -1.37119,-0.23823 -2.74132,-0.4918 -4.11017,-0.76103 -1.90199,-0.37408 -2.38337,-0.89032 -2.69516,-2.13664 -0.19338,-0.75999 -0.38246,-1.52021 -0.5672,-2.28064 2.92376,0.29904 4.95661,-0.30153 6.49109,-2.39062 1.53448,-2.08909 2.56884,-5.67242 3.58924,-11.40463 1.2015,-6.74952 1.39875,-10.75525 0.46238,-13.24847 -0.93636,-2.49321 -3.01852,-3.46238 -6.46143,-4.33138 z m -1.07105,4.36937 c 1.84989,0.46351 2.93478,0.99745 3.29712,2.69572 0.36233,1.69828 0.007,4.55796 -1.05573,9.61672 -1.05496,5.01984 -1.88305,7.74261 -3.00174,9.08794 -1.11869,1.34534 -2.52426,1.31793 -4.68021,0.79445 -2.15596,-0.52349 -3.40246,-1.13997 -3.75431,-2.84685 -0.35184,-1.70688 0.19565,-4.50722 1.58855,-9.46087 1.4037,-4.99205 2.39678,-7.70412 3.48424,-9.04489 1.08747,-1.34077 2.27219,-1.30574 4.12208,-0.84222 z"
+ id="path5911"
+ inkscape:original-d="m 365.2425,585.085 c -8.11999,0 -10.16,2.24001 -10.16,16.04 0,13.79999 2.04001,15.76 10.16,15.76 l 1.16,3.76 c 0.96,3.12 2.16,4.16 6.12,4.16 l 3.52,0 0,-4.4 -3.8,0 c -1.76,0 -2.28,-0.4 -2.8,-1.56 l -0.96,-2.12 c 5.39999,-0.68 6.96,-3.88001 6.96,-15.6 0,-13.79999 -2.12001,-16.04 -10.2,-16.04 m 0,4.52 c 4.2,0 5.2,1.16001 5.2,11.56 0,10.31999 -1,11.4 -5.2,11.4 -4.2,0 -5.12,-1.08001 -5.12,-11.4 0,-10.39999 0.92,-11.56 5.12,-11.56"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 400.12341,617.14674 c -0.0923,2.63121 0.64021,4.67818 2.1594,6.07633 1.51919,1.39815 3.82434,2.14555 6.78311,2.13492 3.43048,-0.0123 6.11341,-1.05672 7.88066,-3.33093 0.68275,0.82903 1.37234,1.65553 2.06857,2.47945 1.69204,-0.0785 3.38255,-0.17471 5.07113,-0.28804 -1.7666,-2.02699 -3.4941,-4.07027 -5.1797,-6.12893 1.25863,-3.12556 2.46234,-6.26425 3.61369,-9.41394 -1.26517,0.0867 -2.53017,0.16332 -3.79478,0.22949 -0.74962,2.03344 -1.52124,4.06196 -2.31551,6.08504 -1.61512,-2.06155 -3.18795,-4.13751 -4.71579,-6.22699 0.77253,-0.52324 1.53985,-1.05097 2.30206,-1.58301 3.09992,-2.18324 4.43839,-4.68419 4.27507,-7.84768 -0.12094,-2.34258 -0.92193,-4.03234 -2.23401,-5.11831 -1.31207,-1.08596 -3.13649,-1.5691 -5.36255,-1.51893 -2.44682,0.0552 -4.31833,0.72395 -5.61213,1.94297 -1.2938,1.21901 -2.00987,2.98909 -2.06131,5.2239 -0.0597,2.59398 0.89097,4.41215 2.31986,6.50203 0.38621,0.56267 0.77582,1.12443 1.16878,1.68525 -2.48089,1.66965 -4.05409,3.15172 -5.01166,4.62087 -0.95756,1.46916 -1.30036,2.92169 -1.35489,4.47651 z m 9.71397,4.12737 c -3.24233,0.0267 -5.07201,-1.89384 -5.03485,-4.8493 0.0286,-2.2765 0.91844,-3.72558 3.68029,-5.49928 1.95344,2.72202 3.98386,5.42155 6.08542,8.09672 -1.0006,1.35206 -2.49912,2.23351 -4.73086,2.25186 z m -1.15107,-16.70761 c -1.13959,-1.71004 -1.74439,-2.71066 -1.73997,-4.34922 0.007,-2.59773 1.27805,-3.7085 3.75253,-3.7607 2.24952,-0.0475 3.59827,0.81456 3.68831,3.49666 0.0524,1.56122 -0.47267,2.95157 -2.35349,4.31854 -0.79349,0.56647 -1.59272,1.12811 -2.39781,1.68471 -0.31871,-0.46273 -0.63524,-0.92606 -0.94957,-1.38999 z"
+ id="path5913"
+ inkscape:original-d="m 400.725,609.645 c 0,5.27999 3.08001,8.08 8.6,8.08 3.2,0 5.72,-0.96 7.48,-3.16 l 1.84,2.56 4.76,0 -4.56,-6.4 4.08,-9.16 -3.8,0 -2.56,5.96 -4.48,-6.36 2.36,-1.52 c 3.2,-2.08 4.72,-4.48 4.72,-7.64 0,-4.68 -3,-6.92 -7.84,-6.92 -5.31999,0 -8.2,2.68 -8.2,7.16 0,2.6 1.04,4.4 2.52,6.48 l 1.2,1.68 c -4.99999,3.36 -6.12,6.12 -6.12,9.24 m 9.36,4 c -3.08,0 -4.84,-1.88 -4.84,-4.84 0,-2.28 0.84,-3.76 3.6,-5.52 l 5.8,8.2 c -1,1.32 -2.44,2.16 -4.56,2.16 m -1,-16.72 c -1.16,-1.72 -1.8,-2.72 -1.8,-4.36 0,-2.6 1.36,-3.72 4,-3.72 2.4,0 3.8,0.92 3.8,3.6 0,1.56 -0.6,2.92 -2.56,4.24 l -2.48,1.64 -0.96,-1.4"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 452.45607,588.6734 c -0.69978,10.83697 -1.66728,21.71322 -2.9419,32.59959 1.64461,-0.26681 3.28529,-0.54708 4.92164,-0.84016 0.1647,-1.89523 0.32099,-3.78976 0.46907,-5.68348 3.14615,-0.57601 6.27812,-1.19863 9.39293,-1.86292 0.80934,1.70017 1.62476,3.39732 2.44611,5.09137 1.70755,-0.37458 3.40911,-0.76169 5.1042,-1.16054 -5.12085,-9.5611 -10.04301,-19.24734 -14.72538,-29.03842 -1.55487,0.30835 -3.11058,0.60679 -4.66667,0.89456 z m 3.67175,6.54227 c 2.07644,4.65693 4.20214,9.29387 6.37364,13.90906 -2.42961,0.50744 -4.86836,0.98949 -7.3148,1.44375 0.3719,-5.12529 0.68438,-10.24381 0.94116,-15.35281 z"
+ id="path5915"
+ inkscape:original-d="m 455.9675,585.685 -8.48,31.44 4.72,0 1.4,-5.48 9.24,0 1.28,5.48 5,0 -8.2,-31.44 -4.96,0 m 2.44,7.08 3.48,14.84 -7.28,0 3.8,-14.84"
+ inkscape:connector-curvature="0" />
+ </g>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot6046"
+ style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:89.99999762%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Hack;-inkscape-font-specification:Hack"
+ transform="matrix(0.76579231,0,0,0.76579231,70.117973,201.62368)"><flowRegion
+ id="flowRegion6048"><rect
+ id="rect6050"
+ width="579.28571"
+ height="88.571426"
+ x="10"
+ y="750.42859"
+ style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:89.99999762%;writing-mode:lr-tb;text-anchor:middle;font-family:Hack;-inkscape-font-specification:Hack" /></flowRegion><flowPara
+ id="flowPara6060">GNU Emacs is an extensible, customizable, </flowPara><flowPara
+ id="flowPara6062">free/libre text editor, and more!</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6064"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843;stroke:none;font-family:Anonymous Pro;-inkscape-font-specification:Anonymous Pro Bold"
+ transform="matrix(0.76579231,0,0,0.76579231,77.426653,288.04881)"><flowRegion
+ id="flowRegion6066"><rect
+ id="rect6068"
+ width="384.28571"
+ height="69.285713"
+ x="121.42857"
+ y="676.14288"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843;font-family:Anonymous Pro;-inkscape-font-specification:Anonymous Pro Bold" /></flowRegion><flowPara
+ id="flowPara6072">www.gnu.org/software/emacs</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6074"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Raleway;-inkscape-font-specification:Raleway Medium"
+ transform="translate(131.31983,3.0304577)"><flowRegion
+ id="flowRegion6076"><rect
+ id="rect6078"
+ width="565.68542"
+ height="68.690376"
+ x="11.111678"
+ y="166.13689"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Raleway;-inkscape-font-specification:Raleway Medium" /></flowRegion><flowPara
+ id="flowPara6082">A free, virtual, online conference for all things Emacs</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6084"
+ style="font-size:24px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Liberation Sans Narrow Bold Italic Condensed"
+ transform="translate(162.63457,-23.233505)"><flowRegion
+ id="flowRegion6086"><rect
+ id="rect6088"
+ width="321.42856"
+ height="127.14286"
+ x="254.28572"
+ y="637.57141"
+ style="font-size:24px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:condensed;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Liberation Sans Narrow;-inkscape-font-specification:Liberation Sans Narrow Bold Italic Condensed" /></flowRegion><flowPara
+ id="flowPara6181">Streamed live at</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6064-4"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
+ transform="matrix(0.76579231,0,0,0.76579231,246.94366,126.14914)"><flowRegion
+ id="flowRegion6066-2"><rect
+ id="rect6068-4"
+ width="384.28571"
+ height="69.285713"
+ x="121.42857"
+ y="676.14288"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843;font-family:Droid Sans;-inkscape-font-specification:Droid Sans" /></flowRegion><flowPara
+ id="flowPara6072-9">https://emacsconf.org/2020</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6064-4-9"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
+ transform="matrix(0.76579231,0,0,0.76579231,180.92997,186.46242)"><flowRegion
+ id="flowRegion6066-2-9"><rect
+ id="rect6068-4-4"
+ width="470.02689"
+ height="50.818378"
+ x="121.42857"
+ y="676.14288"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843;font-family:Droid Sans;-inkscape-font-specification:Droid Sans" /></flowRegion><flowPara
+ id="flowPara6072-9-9">irc://chat.freenode.net/#emacsconf</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6084-8"
+ style="font-size:24px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Liberation Sans Narrow Bold Italic Condensed"
+ transform="translate(201.49395,35.946089)"><flowRegion
+ id="flowRegion6086-1"><rect
+ id="rect6088-6"
+ width="321.42856"
+ height="127.14286"
+ x="254.28572"
+ y="637.57141"
+ style="font-size:24px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:condensed;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Liberation Sans Narrow;-inkscape-font-specification:Liberation Sans Narrow Bold Italic Condensed" /></flowRegion><flowPara
+ id="flowPara6212">Chat on IRC</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6074-9"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#353091;fill-opacity:1;stroke:none;font-family:Raleway;-inkscape-font-specification:Raleway Medium"
+ transform="translate(349.74561,22.509963)"><flowRegion
+ id="flowRegion6076-3"><rect
+ id="rect6078-3"
+ width="565.68542"
+ height="68.690376"
+ x="11.111678"
+ y="166.13689"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#353091;fill-opacity:1;font-family:Raleway;-inkscape-font-specification:Raleway Medium" /></flowRegion><flowPara
+ id="flowPara6241">10, 20, and 50 minute talks</flowPara></flowRoot> <path
+ style="fill:none;stroke:#000000;stroke-width:1.02294576px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 135.56288,755.42857 328.87424,0"
+ id="path6275"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Old poster"
+ style="display:inline">
+ <image
+ y="-65.461769"
+ x="-645.09564"
+ id="image2993"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAANRCAYAAAA/HsKgAAAABHNCSVQICAgIfAhkiAAAIABJREFU
+eJzsnXd4FNX+xt8zM9s3yaZBCAmEEiAUqdIsgBVBRFG49mu7YG8/27XG3hW72EUFBUURBUEUAUF6
+DwGSkJDeN9t36vf3RyIk2U2TIOQ6n0fAZ2fnnDOzM3Pe+bYD6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo
+6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo
+6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo
+6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Oj8BdjxHoCOjo6Ojo5O+0BEDAD77TdwSUnVVp53WXw+zcjz
+ktmsBa2ADK8oCOUVtkgAMBg0tUuM1w0APM+pkiHWY1IoIBki/CUlewLjK8YTpkNjjNFxPbAOiC6w
+dHR0dHR0OihUQJbPv97q2JVbYu+ZFpNs4QwDpYAaL/qUGLdP7AxACAZUh6oqFp7jeEWTIlQisxTQ
+BABgHDSQpjDGyGw0ujQgaDYZXLzA+XiOD0Y7jCXWaMNBX9CfkbXPU3RSShfv+OnxNT169Age50M/
+4dEFlo6Ojo6OTgeAiHggL2L/Lha9fkVZj6yCimR7pDBU8qpjSqt8vSWNszKe51E7t3Mg1JmdiIHq
+t6OBZDGkfQZ2WBWww39BI0DVVFWzW8yeHt1isjolRaxLTIrM7Dc4ppTjWE5Bgadm1KgeVYwx5Zie
+gA6GLrB0dHR0dHROUIiI7diRF1WR7xtQnO0ZXlrtGuz2ir2DAerl9gY7S7IqHNZFHA8mGFt25dUK
+rCbnf6prgeMAgePgiLYgOdmBTl0iENPJjrhYK+LjbYjtbKkUBD7H4/EXEKl7/B4pw2Zw//FrUp/S
+GYyp7XQKOiy6wNLR0dHR0TmBICJu4xfZ9i2FBckcbzh///6KSaKs9GTEoiVZNcuKygMExkKncGYw
+ERjXfPuKyKBp9fsDEcDzHAwCB5NZgMNhobT+nVmfAZ2R2DUSEREmmMwCeAMHnmvYr6pqRKTJAPOI
+klrmdolrjUb6sLi4Jruq6qBnwoQJ/0jLli6wdHR0dHR0TgCIMuyrllOv/KyqEWXFgbPzi31n+kXR
+QUTCn3oojKZqSEtWLNJAssRqRRVB4Dk4HBbEOCzonOxAcnIUevaKQUJSJGx2I3iOa5NSIAKISFMU
+xeXzBNYFJekXrzP4R9GByv0TLhpa0/qWOj66wNLR0dHR0TmOEJHhi3e3jDyUX36V26ue7HVLPX0B
+0fGX0vYYqxVZHN/QkkW1sVdQJcaI4IiyoFffOKT2iaGuSTEsNt4Gm8MCu1UAx7WPNCAiyJLsk0Qt
+LyipGZyBWxQT5f2RsU7edungBEcXWDo6Ojo6On8zRMS2bj0QeyjTN3Z3RvVFZZX+CbKkJsmyzJMq
+H/3kzGq9gIwBJqMAm8WA6HgrkhOjkJoWj6QUB+LibLBFGMO6GtsbVSUQUWUw6P8VwDcVFZ6NPeZ2
+KWDpTGtx5w6KLrB0dHR0dHT+RjI3Fsb+/NvBCYGAPK242HumN6jGqxoYAAIRSJEY6K/pDiKCphEM
+Aoe4+Agkp0QjtVcMklOiEdfJjug4K4wG/rjN/kREiqLUeF3BnbIiLXCXB5ekDk4qPD6jObboAktH
+R0dHR+dvgIjMK77cO3jznpKZJaW+aUFRcagIU8BTU2tFVhvgGYPJLCA2zobkHrHo3sOB3r3ikJji
+gNnI/S1WqrZAmgZJkiVRkn8qK3O9X80sa0anxrqP97jakxPrjOvo6Ojo6PyPkZFBRnfh1qE7tvn/
+lVvsPbPKJfZXVBJYg+pU9VAVkCq3an42Wczo1jUC3bo5kNgzFomJdsTF22GzGwAikEbQagPPm22H
+MQbGcFiIcVzt/3Mcq/2XZ+A4ruUg+zaiaRoFg3KZLxD4Ke9AzSc+MW/d/0rWoS6wdHR0dHR0jhFr
+fzgUvXV37mVlxb5ZlS4xTdZgAJoQVkCtKJJF1txXamFggoHi42ywWgVmMQswmQWIkgpSNUiiDK0u
+9VCSVKia1myDRgPPBIGH0WwCAJjNAowGDna7GUYjD1ukEY5YG2KiTbDbjYiKMsMWZYbR0HxJiNYi
+Swoyd5Xt37m15MU+3RwLR09K7fDWLF1g6ejoHGtqY0t0dP5BUG6ueclm56itm0puKK/wn+/zSw7G
+cbV1qprdkUBysOW5uZlyDKRpgCK1QqQ1gheI8YbmhgYDZDiiTCwhIRIpqXE4aXACevSJg8AfvZwo
+KXDh+wV7qkrLPN+OHJ344XnTTtrKGJOPuuHjhC6wdHR02gUiYp/de7W1SqlKzS9yjtucUdA/N6+i
+izOgWMjeWYztnlrWf8yZW8+bddO3d42ILzne49XROVZkZJTbf5i3/bqKisBt1e5AT0XTDhc+YLyB
+wAtN7EkgRWbQWiqCzsAMxmYLipIitaKdRrSiEjzJIiNNBRFgNPBISnLgghknYfCwLiEFSNuKomj4
+Zt4ObFyRp8Y67Ds79bC9cv7lPb9NTEz0H1XDx4mmfmUdnX8MRGR05e+2bcgsNhcXO4WkJKsaFxct
+Dx16mosxJh3v8XUEKD2dmz0jbdSv+92zNmSXneOWWQwRGVVVYxoR4C1D8b5KuEpLzowfN2MngHYX
+WETEAFh/++23iNzcUgMA9OiRII8fP94DwM9YmGDio+/TsnHjL5EVFQGhosLL9e/fQxo1apSHMXZM
+JgQi4vLz86N27dplra6u5nnerp188sBgnz59PIyx0MXljr4/lp2dHVFYWGgtKqoWAKCuP1dHtiwc
+K4iIW/7N3rTvvth+W/bBqqtJIwuhoSWDVJkxgGqDnOoEEmm1dao0pXWiiAEtVWtnHE+kaW2zYjWT
+ucjVJjjWNV4bryUrGg7mVuG35QeQkuJATJy19X2FQRA49EnthH1ryjhPlTjUXyO9s8R9cPiyxfvm
+TLygbxZjHaukwwklsB4Z4Rj6aWbNufk+GNG+LgVmihztvPXFN+e/PGtEZTu2q9NBoYy37G/PWTJk
+3k87hqR0794nKsIUT8wUqREzcZwmEWkBny9YEpuUVjDo7Iszzp71wOaHRtvLjve4T0SISHh4bNJF
+P2WVPbajShmghrtzSQUpKiRJNahyCzNDG8lefk+n199cOaZ3UsJAZnf0shgNnTSNmQGAMfKLolhR
+5eSKRk+5Zc/kKy7f+vC/xuYezYOaipdYX33y7ZM/Xbp5RK9evVJtNksXImYiYgJj5A8EA6WxXfvl
+Dpt63dZJ99676a4e7KiqVxMR99NrV6W+O++PUd27JqbZomNSeMaiiTEDI1IJ5Pb7AmWxiSMPnXbx
+pTvOmzZ526wJfY/qObdpQXrCp3O/HdOjS/xgU1RsL5PJ4NA0mACAQG5XjacoMe3U/Wff+H8bJ99+
+4e4Z+osIiLJMc99aPSnrgPfu0nLPWE2jJq9zUmUGrbYgKABAVdH2Ka+xdGu0VVPb7iIkAJp6ZFx1
+CHXvJpqqMqonwhirdRsGgzJUpX2WHuzeOwZWuxFBjwIQIoqya24L+OR+XrfvWSJazzrQGocnlIvw
+4RHRs+burXkl309HJ4NDYDBFjC6c+dqr575x3ei97du2Tkdi1Vs3239cv+vspWszr3B6g8N8ASnR
+E5CbDIoQjFayRESVcwZzZu8hE5aPP/XM+S89dHlBR3uTOpa8Pq3bWR+uLn5jd5XSr6WTYorqV3TR
+7MWXfXlt37VH2++8p2/ovHzNjkvW7zxwkTuonFTjFWNFRQ07qTHODFuUo9posmQnDTz9++HjL5r7
+8cMXFrSlv1Xp44U1+XTaTz/v/k++Tx5b4/Un+iQ1bMAKb7CQNSqmWHD02tLvtKkfPPLg3T9PSm2b
+hSk9HVxs4JoBS39ec+XuQ+VnBySld41PjFDDxioz8IYIJcIRUSZYHbtPOmPG3H7d05a8nT6jTRWz
+P08/L3LD5tLpv2zIvrJaVQdUuwNxskZh5gkGozVSskTEHLQljfx1zNTpb3/9yMWZ/9T7omJfRcTX
+P2X+O3N3+f1uj5REf0fIIS/UuhuboPF6g62G48EEAxkYoAFgBPCMSFSJkSqzP81Yf2Yl2u0mTDx/
+AM6Z3AcmE99Mw61DkVV89txaZGV4SAAHDQQjx6lGM5+dPCT6uStuH/kVYyx41B39DZxQFiyNmEq1
+v2n7w0jm1RbyVHX+ZyEi7skrxw145v0f79qwr3iaX1IjVU1r8QVDkfzMU+XvzBjXeeeqr8YeyNg/
+9fdD1S9NmVO8bMmsjhkX0J7kvjA+4ZYPt9+SUd2yuAIApqksgvxH9QZKRNyjl4w4+fWPv39sd75z
+fEBWLFoLtzZpQXidpTFg3Ei3c+GQgrzcs8+84YVHVr5/b6veiMtXvWV/8J5nr1uZXf5/hR45WQkr
+Oo6gygHmqSzqypzliVtKCsbeVVr+0jWr6L1PJrTOmrV+wSuWj99951+fZyy6p6DK109U1BZmLoIq
+u4WaCndXxpV2Xff1m6P39x13+o3Pzn/+3f9elteaPuffeWHK55+vfnB9kedSV0CJaP73JEh+l1Hy
+u/p5qsr6LC86OGZURc0jM4lWvPcPcx2unLe785cLd9+xL6fqZq9fivrbOlYVEMDCiaxaC9lfnEo1
+FSRrTOYFAuPAaypTNY0RaX+uMwgGIDLSjKTu0Rg9pjuGjk5uF3EFAIxjsCVEwJThByOAwAAVvORT
+++VlOh/+bPZG+6JPM7+c9u+0qnbp8BhyQgksHZ1jARFxz10+avx3K/c+vafKN0pqYXIM34YGRfQZ
+PQXrR+9aVP5GfInr9ZsX0Jtvz2D/iDW1muLj3yuHZ+R7T1ea0Dcme6w3rkvSXgsL5EEDs0V3F+Ni
+jH/ZZUZE3CMXDTnrx/X7nt1dIQ5rqt+mG9CgiH6j8+Af4zaINHvcrV3vArCm+T4/Ns8c8+TMn3YX
+P1IoaY42dafKTPblxuf89vnD4HjT8xU0+/545ml2n50v2v79n1dnrdpb8kCBV4lvS38AQJoK0VPh
+KN718/WLFHPEzM/23vveVf2bjXlb/PyliXPmrHjm9zzndLfWtnlBU/yct3Tb0IyF77xi4Ez3EtEP
+/xRL1vz521M27Ch5tKio5lK/JFv+9gGoCojAGMcRGAM0rTYWUWuhjBRjDd2ARGgQ+0V1wfYAZKp1
+dfGMwWQV0LlzJFL7d0LfPnHolhqH2BgTOK79vP6MMVjMxsPutXoPa1Kr1d4F22qejeuh9dqw8uDz
+o8/qeUKHbfxjBBYR2jXuQ6fj8OYNp4+Zv2zny5k14pCjf7UmBKqyuhSv+/TeJSabtJTorUnHILi4
+I0BbZhruvG/JqYVBLTp0K4O1U79DSYNOeXHCuRNXPD/z4krAhe3bt5sCSf2dz/7FPuf9Z/jQXzbs
+f6I5ccU4HnxtRC5TVS28s0aT4SvaOmzXH8v/b/o7BTkLb0ouaqrPVy987OxVmSV3NCmuGAeeY8Sh
+tr9wykIJFEUcXLfwlnm323KJaF5TAoSIhMfO7DZjzd7i+wu8ahPiioHjeXCMiDSNhXcZAiS5DBX7
+f7l42aKhmRlELw5oIk6Kcj8233bp/924rsA5rSlxxRgPngehrr/QHlX4Snf12b34g4cu7941B0BG
++LH/77Bx9b4eq1cUPpxXUH2FJKvGthXgbPzlo3CuaApIY6y2GErL7RAAcIbaIHtCXXFRwKBxjKBB
+EDhYLAay2gzMZjch0m5CVJQFXZKj0KlLBOLjrYhLiGiXsgxhx0eAX5KhMA0G4iCA1boqa/+QFtQi
+nLnuG3ZyKr9u3d5XTjml/6FjMpB2oMMILN5kD9qtphqe/ZUFmhgTIhzFZrPxH2W61gFWPzyyx0Of
+bnss09WUuOJgNNuDJqu5kuRAjSxJkiAIvNkg2DVF7OT2i3Y1jMVLcWbHVP7+0R1P3pl0AMAPx/o4
+TkQ2/lBgcRZX99cQen44aycxctg1n/y47L4PUhkT59x39P0VLLg+5v6nvrlja3lwZDhxxRttitFi
+zTdao/f16mwtEwLlxvwSV6pfkft5/FJkyC6aH57M1Wdmbf5+EhF9GE70ZKWPT7px7o6ZeW65W2iP
+HCx2RzXj7ftTukbndKIy9UBhTa+goqV5AlJs4+tNrsnufHDH5pumvL5jI4CscMe46JahQ3/MLL89
+z6t2CrfdYI32G4zGA5HRnXN6xajOmrLy2HKXN80blHoGZNXY+PsUKDNXbfjmioc+mPQTgK3h2lz4
+xEtjl+3zXe2SyRRyhJxRs9gdhYI5et+ArlyhWFVqL6gO9hVFqa9bVs0Nz6kMT9HW4b8tWzVzSTH9
+d0riscmkPBGYN2d9v+VLcp8sKHFdICttE1eMN1DjIPLa8gwSa41ACg/V/kd1///n3/U+Y1TrfjNa
+zGS1mWEyCzBbDYiOFBDtMLPYaCsiIk2IirbAGmVhZqsRNisPq0WAQeAhGDiwoyzD0LpDIVRU+1BN
+QRbBjGQlASbiGUCQGZHEVJSJ/oi8bPfM8mAg+stPtjx+6TUjco79wNpOhxFY1p7jD1w8edzTSVa/
+U+Pa6uLhocYN8Iw9s0vxsRmdzokI0SrzNcOm/WdnqX+cHOa5xXizZuvUZ1di1+4Lx1906R/nDYvJ
+7RwV5TYajab9m35OXP7dl4O3ZZdNyi+qnOgWFVuj1hGoONDtwC+fzTr/0+pdP/w7Jv/vOaoThwqP
+YKyoUuPDvXwbzbbqtLPO/SO1Ha17y5euPX31Ac8kSQtNzuHNMcHY/md/M/aCS18fMs6xDatXawAw
+pqc3btGnP1z5w8aDdxZ7peTGQ1WDhbaDu/ZOuf2L6q8AhFSOfn9t/rj9xe4wLlAOlti+OUPOuuSF
+mTdOW3Bo9WJ3eno6bVj6esSS1z6cuuiPzAcOeKT+DTMqCb6c9cOzN62/YAHR7BmNYr8o9xrzf/61
+dPq+UnFQ6NEzmGJTS7oMO+/dabfc8PErO74pKk1PpwULFnDuvd+kffvNmttWZ5Zd7VU0c8P9NIie
+3B4bvlsxAWEEFtGLtmm9n5lR4hFDBSQzU3SvsavOuPDSJ2+elLpxwoQJYnp6OjstriL5k3cX/WdF
+VtktZWJDqx7JPr5m55LzX/hkyiIAq0OPo+OzbPHOvmtXlTxbVuGdqshq2+YixiF8DSwGJhiptSKL
+Gl1XDAwGgQNv4GA0ChAEHgYDB6vFAKvNCKvNAJvdDLvdAEeMlcXGWOGIscARZ0NkpAm1Hj7W7svg
+/BV8XgklRS54VBEBTmY2ZoQNPECAn6nMRxIUECDBnHeo6gpFVgxrVx546LSz+hw83mNvTIcRWIq1
+s3uV8eLVuU8chc/11nYckM4Jz4f/unH45nz/NI9MIW/2jDNTfNo5P6eeMunh39+dtY0xpr3X8Csl
+ALYeXPzgj/c9+uktv+8tvqtUJnuDb2giag7ljMv5+rNxAD47hodyQiL7RE4UG0/otXAwBPqkRFSt
+aqe+qGCB5d+nXXNBlaTGhGzkTWQdfMnSk65Lf/C7WYn53zXcWk70yjt3T3je+tEfFQ+6RK1hnAwR
+xNzM3iatMBaNBBbNOSvq6nc2nVcUpMiQLiO6eLqMv+7tN7685+MR9YK6R0+63U1E8ywX9cVrP+W+
+VhGUG7hPNbnaVLht08TsX6Z+AqBBkO68xzOTD+RWn+cjhEQL85HJnphTrn/jogfum/3KWBb48/MZ
+M2aoAPZkvX/ek3e9uCbxxwO+80NEZMBvVrK39iUiC2NH9gWAVTe/2y/P5x/rDyNaLckjDvS79L7H
+Fz45ce3CF2s/S09PJwCHqpamv3Dzg29Hf7ez4kaR6pcjIIie8uSs5UvHEdHvHSmlvjV888W27lv+
+qHiyoiZ4nsp4xgQjkaa2uqAn44XDP88RkfRnfSkGgAMHtXbNPw6H/zXwPJktAswmgQkGHna7EVaz
+EUYTD3ukCUYTD5vVCMFmgs1mhNUqwG4VYDEbYTILMFkEGM0GGIQTQEG1wMEDVXB7RNTGthNcJMIF
+HF4Pov4RKKrGFZd5Llz9S5649JudD0+6eHDh8Rl1eDqMwAKIxdg4Lvc49Z6bm2vOycmxud1uvnfv
+3vKgQYP8rSnsV1v8cJd106YKc1GRm09ISFDGjBnjb880UyIy7Nixw1ZVVcW73W6+b98EpX//9u2j
+rh8GFJrz8ipN27fnGqOjo7WBAweKcXFx/vZ4kBIRq6iosGVkZJidTidnNpspNTVV7N27d6CtRQ2J
+7rJcfvL8C/KcUmroVgZzymm7ep9/+yPrnjtrC5tzY5Pt9Jz6TJl7zmWvX/riTz1+yXFeKTaavVRP
+VoTbd+CMKzbQ4i9Gs1avnUVErLKy0l5enmU4dKiGB4ARI7oH4uP7+45FQczGfZeUlFj2799vdTqd
+3NChPaSUlCG+tp7j6lyPgrCxtAwgQYuOimi3ybVk5WfdN3nYEDGMEBBsqZXDJ0x+f+WsxLBWRMbu
+Dmx7+fwlP2z9+Wq3KKY2PLkaIBU4KsVgEoAGj5cv9lDX/Tm+UaERRwIsUf0zJl//n8Ujwpwzxpi6
+8dOrl27cln/VjwXy2Q1CpEiBXLqx34Zs9wA0Cq538eKQXTXUI/QAjLDGDto69abb5786tqFA+pPe
+NywtGvJ9/+/W5+w7q1qlhqJX9YNHaeLsQ3AAaLD/95sDgyurxV4hDfIxFJc8eNkDT5y7dcqTof3F
+Tkp3v3RBj68y85xTdtXIyfW3aYEKg1q17eS7MtEJx6Cg7PHixwUZCat/y5td7ZOmKCrxAAgcX1vQ
+s5VV0zUwMCIIHMAbeBgNPExmAQazAUYDhyg7jxiHGZ3i7IiMNsOREImoSCMsJo7xAgeOHVl4medq
+XXY8z8A4Bo4xgKtbsPnYn45jQjCoImNPGfx+6fCi0y0diyQp5rxD1Vf4PKJh3fLsu045t3f5sR9p
+6+hAAqv9oFXjhVuf3D/2vV9LTmr4dDSwqK6nlt24+Jvlz4+IcVHWUtM773488JNFa4ZOnTJloNFs
+TgJg5Dh4PaJW2rX/uH3nXHnL7x/9d/q+xvEbGavesr/98gej0nqmDIl02FLBW2I1MBNjFPAG1aKU
+QWfsPuOmh9d/eNOEA39lQnVuf9Xx4pNfDv1286G0/gP7d7dbrV2JmBmAkTH4RFkqS0zpf7DryGl7
+b37+/7Zc2yP6L2duFS56JvbpT78d2j8pcZAtPq4Xx/MOhYQIxkgFQ7XbFSzp2u+c7LNvuWPbv2+d
+lDmBsVavhE5EbOuihxJeeHXRiF49ug9wxMb15BgXC8AAQGWMXF5/sLRLysC8IWdfnnntrBt3zBgR
+42qp3W+uXZVUXlR5jj9MsT9mSwp2Th07b92zZ25nz7U8xshZ8ytfPCthyZ4yYWK+R4lruFVCRU7B
+mIrFKxIRxsXU6Fi5HV/e1e2J2csG9+ienBYb37k3xzG7RjAzgDRNqyip9Ob2HTs9a8q1t2598YbT
+D7UmG2vDFTGR6eu95/6UKyWgQbRsJIvqdmFmzaFPf2OMKaU759pefvHTYf27JwwzxXTpy/N8AhHj
+OR5uj08rSRlyTsb4a+9Z//HtZ2eHuyYp63XTxDEPnPVbpb+nCNC9v2+NiFYoTKwQQQ5WOj66+azL
+AIxF3TOSM/WXz/j3HctWvjerze7UbWt2dA9qYqdwN4qh+7CsANdze3P7C5aB+X2My4sOAqmh06Df
+UBU02Bt/KrFAarbIQo6PGUzEdx+749/nReW/0UR/I68O1Az6Mn7tT4WFZ2hEDSxSquKM3r5u5yDU
+E1hE4J46r7C/Xwu1CDKjRRV6jdvyzkRz/rtN9McYo2fG9TmQbGKuan8jgQUFGpOt+0vQIMaK6GPz
+FWMfTSuTEFJ3kHckuNSY4ZumNFOR/v+mJmYv3Ve9GzWu5IZbZHgD7tRln2zviv8RgbVtW1b8uh+L
+HnQH5ImyWhcQVA/GG4hIa9K9RwQIPKP4TlYkdLajc6KdRcdYEBtjRUyMFRFxdkTYDTAZax9XjJ0Y
+7rq/m5wDlcjYUQxF0doU7yXJqlDjDkzdtb24MDOz8IW0tKQTooTDP1JgwRRvgHZgBgG3NNygQlMD
+eww+w+5V6eMj/nX+FbdtrMFkZ42nt0csa1SMksFoiZSWvPvYrrS16957cSfNu3cw8xGlc+/evWPE
+DVen31zgD55Z7vInSrmNix8ymGwO/+Ln79i99sfJH6WvKp+XPqFTq9L9N755S+yni36ZNvLcR88P
+ajSk0h1MDBSUhv0deYNF8/32ecn/TVi2acSl6fPue/GxH2ckh38DDse+D++LeHPJ6qln3vridI+k
+Da92ehKDRSVhrnoOJmuZ//vnbzuw6uPXVl777pqPu886bV96C+JgzUfXxl9zZr9L1u4tu9gflE+q
+cPvjDublh72rDCabunHJnIINPy7acda/n5h/6uSLl6bPGNDkOcsTMSCjkkLfzAHYYhNzEs+7fhVr
+gxC88vKhez7YtaYIIQILUMv3JwpUlQJgX7h9icCWvnV5tylj+16WmVcx2RuQ0ipd/ti8/FBrNmMC
+3B5PzUeP7tz7w+ejfrj7o+Wfv3ztOYXNiXCRU2PB0b0ATm7YGIHn5C8BbHz7ptN6XDDjgdsKq/1n
+Vjs93YL5ZY3cUBzMdod/8csP7ez74+9zVhF9NaGxBVSIsDBoNwOYBABOnwRnE2OSA2Vx5Vll9zY8
+Nvh5RocAtFlgFRS7o5gGnnGcxB0+FwQQj+gucXnCqIHNBlRXkVm2mFgw/LLTBtVk4Btk2BGBvXrR
+wd4BChU8HCeI3YYNyghnvfoTxhaq6ZcMy4jhioJlGjWI31Ml1eLeuyeFiPjDlt/f0jmX88UYjuMk
+HkcynokIgsEYiO/Tq8Xq80YoQYMBYTIFOQCCbLWjobZ89SWrHHT3DJdaaLGZy3qMn5BbvKSZDq97
+0Wl94aJsK1xofPLFGk+8nLkxobnxdhSIyPTGS2uvycyruSooq2aGMPeaeGmBAAAgAElEQVRiM1pA
+4Dl06xZNI09JYb1TYxATa4M10gSTkf9HiqimcLtErFmVg9IKT5uD6RkD/EHZtndf+fUqB1dubu4r
+PXr0OO7FSP+ZAisZIKIw9lwNmuYy+Va8Oe7RDzZM2VklnuNWqIlzRJACLmNlgXuEq0bu+fb/RUZt
+Kaa3X5saf9YnGz2P762QBjddb4kg+pxW0ecc5XL5+7wbMEbfVUCvv9qM+CEi7uWLRg99+PmPHttQ
+Lk/wS4o97JIk9VDlAOcqz+vKuMKLdpYXn/5kZeH7l80rmz3/8s4txrG9c+fElEeef+e/vxSKM1wB
+2dF8jVYNor/SKvorh7jKSgZ9++w947tvue7Z9FX0ffqEUBFDRGzpfSMHP/7ktw9vLfZOdEmKraW4
+Tln08dWlvhTGilN+X1Qybs/2g1/d8uYvz71165khKbq0arzw6HMZJ1eqmi2kIWaBQeia9eAdydnn
+39nSWThCwqizS7vatu0uj+RjFGqYycoZvJKf+DgiYo2FEKWPF16ZemDS51u+u29fpTwiIMkhmVoN
+vk8KfM4Shw+lY93VpcM/yc6ZlLkt55mZW2jleyPCT+gaz4goTHUAkmEweCJfuP/KaZ/N33R7llce
+IipaE+VKNAS91dagzzXGW+VKvWWqMWIO0ZxZ9UWEZiOAtXTZNXNwUDVS/1J9pH6T71p/WVrldRWi
+auC0+k43HrYBp+aPvgD+dc3sHxct2Sp8cIReZwwQ4r2JVjS8J35bxRcWTOpGmhZy/zPOLCfG28t3
+tzBmuSZY7uBILAMaXIckiRxXfahLGWAG4AMAjH9MHTEj8NF1w2tWqo2fTCabGndGn91Pv918f26T
+1eEWKcw1bwajyIrzBsL9Sr2PV24P2H1Of9fQlhiMzOBJOynF1dw5ZWxs4NJkR6WFg+bXGpbBIXdN
+hMlT0rn5EZ/4EGUY5737yyX793nu9QfJ0VpvAxHBbBCQ0jMWo0/pjpNGJLLoaCu4Y1TaoKNTURHA
+iu/3YtumfGhNlB1pDW6fGLtnT+ndtghjAdGWLxkbcVwrB/wzBVYzSJ7CxPlz3nikpiqYEGxN7Swi
+yO7smIKdP95537RfoqoO1kzbWa70b21/Sk1OdGXGkttWP9V7L4Am3xefvXLMmG/X7Jq90xkYIbV1
+eSlNgewvid37++I7axBjfmAXPfHcSawp4wO+ePj81I++WPvsxgLvVG+TAjM8qhzgaw5tGuFfhhd9
+WqSQTvR1Y0vWTw+dPujJhfte2XzIM16ltoULEMkIeoqiyzKW3PDt+6Lj7vmb7nvlspENljwpOdDH
+mJezvi8ojHvQaFG1rsOyJ7fgzguh/12u65/q/IRfliO1Rk8AjefJNmR4UYi4oi2GJ86ceumX28ue
+yHSqKW3qDwRFdJuqizaeunpR4PUUvyk9neir9DZY3QAZwYrtw1/7wDekrEZMbFVAFKmQfVlx2RuW
+3L3w6VN2APi9beM+Nky4Pb0QQBMBrG8Dtze//77fvx+8T0FKiLpjHISkITlW3tGgDlZeSp5Q5aSY
+cPXzGMxKlFFp0U1tCQSDVj6MRYkkCKwqcg1gRZ3Aqrt2dtb9CeX1V8J+fLhJmmm4/YwfxuRJCKkk
+zlkiJOp6cuZZja75YinC7POFBvADHECGQK84tGjtjoTsN3DQ0EhgQXPzBlsguoGVroNBRNy3X/xx
+zo49gUd8IsUz1rpiVUSA3WLEuPG9cOrZqUjoaq+Nj9IJy6FDLiz9NgPbNudDkrWjs+oxIBhUYvfv
+KbvnxwWJJUT06/EsettxBJamcL6sP0wATGhLDN/wmSq2vtdqFSsHPLbSgOfwWyBjHMAARgSipleY
+Uit3Jm72Cvd4g8oRC0VdQGJL+yple7rm7958xRWfV63+4srYkIl/+d0nJ7/87a4HdtaEF1eM44kB
+CpGmMcYYA3hN0/jQlPQKc/nmxVcueSJpOxF9Fu5tbNfbk6Ofem3tfzcWuJsUV4xx4FjtW1pTS5RI
+xVt6lqz66IFtbwzOAnA4Pqb65/ujZt445+7t+d4w4oqBcZxqFDh/lNXo9QdVsyhJNpXIoFFDayCp
+VULp/pUXzf8sLXtBBj05Y8CRIooFssFSUK4lhhsaJ3BSVGpaflsf+nXfD1u7qCnenTb13AU7Sx/b
+14y4YoyrfaA0eS5V+Iu39z60/O3Hlj+QWAlgeetHoMJVU9S5vhJouT8AICjOvd13LV16+SqiLQ1c
+hRyv8TwHDkxjIGiqxijs/cjAcZx25GFJ4HlOE4S//5FDWa9Hzpjy2MWeoBQaT8XblR6DUlefe3k3
+z3NXHPlcKHEyMaCZw54iJmg8b2jxmRJp4VSDkUkIhNyJACeaCwsRkt36V1nxeFWvTXsqL5I1CslA
+NJqjyoecefofje/3gFsRZFELY1HlQExQuPjwKQz1sUfwMlfOFDR6VpAmMTDZhlr/ZIcUWH8sz+m5
+Y3vNzZUuqQ/CuQXrQzjserZZDHTu5H7srMl9YbW120/8P4WmanB7ZOzZWoTffs3BwYOV0DRqF5cp
+gVBW5R+4bVvVTQkxBw/gL4QktBcdRmAFMxYN2b9z3gqg5Zu+DgYhAtFeWryNKL1HGzPqOKNNNRoN
+xUZLdGF0XFyVyZ1nqqp2d/cpSregrIbEZRCpzBOo+5wzwWyxVBjMkXlR8Z3Kbf4ioaqyKtmvaN0D
+kmILvVNluPbuGKuW7emFemKktt0F/EOT779gY1HwLCn09Ru8Kd7dfcDIpaOHJi2V3WX5ZrPFppTu
+PfX3TftmFLuDvRr7c0RXTlzZwY2XTZl7wy8AGry1ExF77ryk6asPeS4JJ6443qgazRFl5si4nIGd
+lNLKyipHsUvqpYrBZJ+sNVz0ljT4i7YN2jB/7lW5RJl/nv9fFywevbHcf44Y4j7lYHb0Kuk/9pQ5
+zJO/RNy/1SU5ogzjh3YftH1H9n/25FVOCFDDMWnBKlPNlsXTF66/8DvUq/FjtBkiXBpnD/fawjHI
+sZ0dNcf6jjuQfmrP6z7edce+arVXuCczb7LLFiNfEBUTe7BbtFBdUVIRX+n29wzKStegooace1/x
+rtTMBW8/8K8v87O/urRbm4vq8aYIySAIRVHR8QcjHHYPlR2MqvIGukmynOxXtJBZQJN9XPDQutFz
+F3t7AqhdIL2nPdj/gmlfG8ud2QQNJEumA6tXX3LAL4XE2pjtXZzDTz9tscPgreTqhLTZ0sl92uBO
+OcvaOvijgIjY85O7T9xa7JniV0OtUaauw7MTEgYuC5eY4Q+Enpe2YDAAHBfu7ZmggROKPO3z/KWM
+m+03Xv3l9RlOeUBouS4TmXqe8fsl5/bb8vNDDTdVBTROClPCpC0IPK+Ft+xo0DizaRk65goa27fn
+OpZ9c+Du4mLXWZoGxgRjM7M/1a79BwLPGIYNT2bjzknVxVUjJElD0C+htMyHvP0V2LOnBNkHKuHz
+Sa2KuTpSPpUd/repvVRN4woKaiavWnfwYFZW1pOpqalt81i0Ex1GYJHktQAIk3Lf3E4AMWw1tfEm
+Z9bOgdi+py2YeNW1b1r2bd67dWux3HNgCps+MqrrVwt/uXX59vwbvbIaknkDABAitYjEob+fMfXi
+l4amxqxe8umaAGyEZ+6aEvfN4tXXL92Qc3dNUAlZWoTEzOjC6sBANBJYW59/z56XVTzRLYUG2/KW
+mEC3069+7c43X3zp9tQjJQKIaPlT09K2fLTq4OzcGqlRho+CmoKDQ8p++7o3Ggms/R9ckPLdluqr
+KoNaRMg54exqfJ+xP5wx7eKXIgzYhuL3ZFNBH27QmJ69l81fcNO63Mqry4PUYD+SqgV/ydqzrno9
+5wvUCaCfVxeP8gflkEBxZunm73HWjS/MWnj3W0fiflzYn1u0f/njE7e//P6aD1YWBcY1TrGXgmVJ
+a1duH4V6AktRPXYf48LGOjEIqsMR4Qu3rb0gIu7mUQmTs0o8p4QLWOIiunk6Dxj/yeQrL59j3v9j
+tiiu10ymXtygCHvagu/Wz9qWXXJVtdQofoxkuCu2jVr7yafTiOjltpi9DbE9Krr0m/DJOZdf9nHR
+D68cLE9O1joVdOYuGd8nZcncr25ds6/0hmoVoQUq5equa5av74M6gcXYJDGdaN6VCxfOx/Tp4O+6
+uNMba5TTsoCExgkgnNHhHHbNo++8Pn3hloUL+zMAmD4dAC7Ubp/V2pEfPd89NGHwol3Vd+a5lS6N
+tzFLgpiQNvLLu18+b+/KMB44ClMSos00bfdgBvHo2yci/tELe0/78YD3Sq9Chsbbhdj+JYPPmvTx
+rCYyb6mNLvrGaECTx6hRx/SLEZHh7RdWX56XV3OtrNa+OJIiNSGy6tbs01QQEWLibRgzoSeiHGHL
+w3Vgai3eGgGqUmewI0CVFGiqBkVWQQBkUQURoMgqVFVDUFQgigpqnEEUFXlQdKgaxUUu8vkkSLLK
+iAhohbhiAOwwwEoCzOARgAovJyNA4e0tDICkqKaDB6tvWvezMYuIPmpLUlN70WEE1l8mXPBvcwgR
+FNH9zMXDrn74v5/ddWSB1K1bgYULkbtlzvTXKh4rGru2VB0d+lwRYOs0dPupV91//+KnJ21YXG/L
+xVu3ltSsfeCty//95vAVed4LlUaj0kg05ueXJjVusdIdaa0oUztZOC5A9R5lRBwn2HvmnHX9nYvq
+iyug1p1F1c/9svqkp9aU1EhXNDbdaTUFMRalrDcRranvNvjus42nFQakgaH2fB5RfcZvPP2OJx6c
+f+OwvQ02LUNG5ptXP/bg7MXW5Tmua/yNHth+l6t7zk9L+wHYSkSm85McCcFwE0Fc70rV2HP9rEaZ
+WYwxIlqQu3xz7pI1pTmjJE2rv0IpSFZ4Je9gZyLi/hQdvOLlRYYQF+nfxR93j+1ysNI7tUyikMVf
+mSlejkq74NPxtz312PtXOBrHwe3I+Omuhx64a762an/ZTK/WyGLnLbWI+RvOmbIQX6GVZm/OluyL
+HnrNW9c99+iL6SMaptwvW7Zs/+qnznkh+IFrwE95gQmN95VEOcKdvbdBEHT9eLq5N56joqnplQAG
+TmUs/bjFP6x/Z3rXR55d8dCOIt+okEFwBtiTh6zrdf6/53fktSRfumzoaQtXFd5X5Am1InKmGCnh
+pPFfjLzs/HVrWlGORKeW337OGlBQ4JkpScoRlURa7VI2rPG7ugZodVcXAQMGJVLv1NgOJyyJCKQB
+iqrCF9AQ9EkI+kTIogoxoCAYlKF6ZFKrRCrRZM4tyhQIKJCCEtMUDYqigYgaCCzlT4EVVOD3SVCJ
+6tY9rFWpAjjYOAMxMKikMR9khFs5lAdDEtmRqFlhhQADMUhMg4cU5HMeVCAYdj8AQBC26j3ytRvW
+ZK0FkHksz2E4/vcFVhvhbHFB1nXsmuV3hV99fnhJRunQHuYd68qkUY1jiJjFoRj7nfPT0qfO28Se
+Dt036tTnasandd78a75vsqI1FBmkQaguLm0gFAAgrjKuEuCvNAmhFhkVXYJdB7jCF1eMecB1U297
+zjYDU4Jy4/iIGj7AKQ7Ui48gWm+Zkjr15Bq/GrKgLTN2lbr0HDVvwayh+1iYmpxpt86tmn1O50UZ
+ld6JB2rUBpYCzV0daXYeSKHagHOy8EwJCRIBoHnKIgxSbk8i2tw4VoSxGeqcp++cdwGXs51MvKCq
+tdt5npjK7GTp0iUPzdkK/mbWlsr9DxQHhoZu4RDROS1j8NSbPpwXKq4AAAMmvlq96LaR75W4XaO3
+FAWGNdyqwlVRedLBb+YOQCsFljkuqSTm5ItWNBZXf3L6QzeUfbh8/x983qEJIcJaFI2oLA6xZnYE
+lj4zPf7pV359aFORe6oUkuzAYI5JOzT4/Otf/eXWtAPHZ4RHzwvXnDxk/tI9z2a7xTCuQTNiep/2
+65hpN7z30mB2TC22/0tkrC+I+W7J3plV1b7Qc0pa7Z8wEAFmiwE9e8cykzncE+7EQVMJYlBBICjD
+45VRUexGWZEblVV+OJ0+eP0ySUEFWlCDQzTBpHKMVIKqqMwtB1HE/JBUjWlaqKxhjS18dUVPGWMN
+Av0tEJBCdjg0E+PBIEJFDZOQyzxQGtlEOsOG3lokDMQOh7oZiEMsGWEmBzS+BuUIhJhibRDQU4tE
+vFMYWbqqYlYxFT+YyBL/1vUx/wECKzSTrFkY02AyNR2U+VgnLWqzq4IxD6FR4DXjBYXFdatpyn3D
+GOi9a6IqBFahAqFWHNSmhHPAkStsxHvvyWgquLrie6QP+B4AQLXxSYa6/QkAd//QBJ7BGyo8NJmp
+GswL630UePuBOC+T+vrCrSvXuXux1Hno9ubcUpdOH5yxpDr7F3+pNJBj9UpgcNEsuaulBgDPGJMe
+GBxxaHUZC0JsWAxRdWVEF26a92Cfseuj7nz+/TWv3ndDDmNHAtdnPTS7BE0WLfwc814/ovyCzKI1
+k1NwTCFK556cNndQkRQmO8sQCT5q2KZVD/bPZA+F2bmOi17/av8HP41ca+MCw3yNzrjqPBRjlPIG
+EtHPrTF5czwUc6Stme9NV8A9WmXhmOptHCCtEm9QZXO48hMnMuvvmh7z6me/PLQ+v+Yajxp6n/GR
+Ka7EM2+YffvLl6z4vfnkvBOWty4cMmTeij2v7K4MjAr5cRkHc9KojNQL7nhu4S0Dso/H+DoiRMRe
+e3bNRYXF7stFWRXa5uAkGAw8rNYTa0qVZQ0BnwSPK4gaVxDVThE1lT4UF9QgP9+JaqcfsqSCJwaz
+JkAgBj8pLFi72h+cMCAaJvBg8EKBm4lMotpMP45vemoVwMDAQKC6lo5gAIeeWgQSNSu4Ollkg4Ao
+ZoTMaTjEvPjz8c2DIVGzHBZX9SEANuLRWbPAyYmHhRkBMIFHCkUiQbOACzIukKdN3/p6+WoA37bP
+mW0dJ9bV0AxC/KCS1C6274ws0GoFygk2FpXSZXsXoB1rYcSTwOdKPBDG+0sg0pq9LYk3S01lpNRd
+ri3e1nPmzDQkqJ167tq2adDK9Rmpe3Mru0RFRUVYLBYTY7U2bI7nmcnjGeRVmv6N4+v19fPv+6Kl
+gD8kTgUAIqJshX3OnVyW83HTY+p8w38L7o7JedgZ4ELq8HAJsVWoS044e3KfVYsP7T5YKUr9G9Y0
+0ODK3zrIX35w9lcl23fPffnpvcmDzskedtr4fSPOOGOn6skswKFrpPT0lmOPDIJFMoDUsDUljzVv
+bDRUFZf3UxGazcUbDQHb4JP3trTEEmM9go+PsGfuNDGfL9CwrhEpVYJbCvaaVQIjWpnwQWrzU4VJ
+lmVDk64+xnAkqvSEJ+vz2yKfembuPWsOum9wimFctJYuwagBUz8+feJVn8yoJ+A7EnNvGJY298eM
+p7eViePkcAtfx5xU0nnUv55Z/8yE39mzx2OEHZMV3+zuW1Ls+o/PL0W1PXqMQVFUBIJ/e5hPCJKs
+oarCh4JcJ0pKPKgocVNJsZu53UF4PCKCQaVOwNRWi+fBEMOsFEVGJhCDDA1lzI8aiPBBhh8yGNhh
+N1xzp6Y2VsqIzmSBERw0EMpZAE6Ihx8gDjKiSz1x9Sc8McSSGeUsAB8UMAAWVht3BQACMWgsNObH
+BgEGcJBx5GawQUCsVisMiQFwa4lirvf+DUv27hk9pX+bssGPhg4jsAxJJ+cNvPGp5xbM7FKKti21
+pLV1jbUTlZ1zr7J9tuzQqC9fXHxdRon7ZIVnsZIkRwZFxaAERLjdfz1RIq9MsAf9akgNHQAQOPL0
+GtJ8TRzGJigAQop+/snldf+e8fRLuy7ccv2bH/xe8GSFX45t+C2CHKw2l+RVnwzGn+z1VCkr87e6
+Vsx9vsoak5zbb/iGjedd8cgKe9KgPQufn9FkHSLezAUjicJOngSF99R4QosxthO7xDjB6ZTjECZ4
+2MAZAr0G9A5Tvz2UtN62EiE76EVAaTRWGX4xGJOxOXRB4H8621+90PHa7C/uXJ7rvrUsTMFNZoxT
+4lInfnXajCtf+OTaViwd1R75b00/qUg2tV20/njLyD7vLN39/Ppy8dxA49pTYBAi+1V1H37xs1el
+3/R1a0qRtLa2U/ONhP+YYy2VDz5xICLTW8+vvayyyje8TeKq1pQDjuMpIBEKi31M0wDub8ydJAIC
+fglV1UEc3FeB3duK4S0RIXplkiQViqLBqQQQJOXwEjz18+9MjEcEGWCssxKZwMEGAW5I0OqkWGsc
+AgTADAG9tEjEayb8uZJgFGfEPq4GLkhgAKzMCL5e/6zev1YSYACPw++ORDASg1njoDBCbcRWwz5Z
+o2xCBsBOAqzEQyAGpc6eIZepw6py/BfXJQn9LZqgwwgscFAzSkSJddC3zqPli8vTuj/x5to71uwu
+vtopyjGqRu3qs3H7OaMiI9RtCQ4MTIpztLo8RrMwNkGh5ffMdcsLDN9vLbur1COmyOEOhFRIAY8g
+BRALIDbo9/bZULz/LMZ3uj0pbdCKsRc+8OGdbzy7NtzSP7IT3khO84Uzu2gEobyyJiTOrL3waF04
+jzdMNW0AxAmyIzbC05p2YuJtfnDOsA+BgCjbSjI7Zvr7saI8fbz9iflr7vx6b82dpQEKzYI1OpT4
+fpMWTL//3sfeuiJ8fGVjLGZORFgZzxhYywJXlgEKu5oDAwdN6RrRtntqyay01Pd+2v38yvzA5GBI
+yQkGIbJXde8xlz774KcPf3R1QsvPyQgLpxkMTA6t00XgwHEktnyNaarKhc9E5CBoknQe2phkdJz4
+fcW+gXmHqqcpamjl/ibheDDecCSzkCPk7Kug4kIXS+oW9l213QkGZGTsKcf29fk4cKAC1U4/BJVD
+FMwkMAaBOJggQGNGKEwLGwyu1lbTZYRaa5YGqhNWzc8wPGoFWX3LVhQMiCXj4W0AEKkZEcPM8LDa
+IPYAyVBBMNR9R6i7RQRicPIy5HqXjB8KPEyBHQJqV9cGQAxgf9rgADeTITGtgV9IIO6wKPuzfUgw
+8HnBKzevy14CIKOt5/qv0HEEFsAsho6Z9nu0fHf3yclzl+x95uc8/yWecHVrGAOrfZAR1XtprL0M
+WzcRW4xM4/gmHoaMCO1o82HnvuQjen2O+dw3MjcW+a/LPFR9TrUvGA1qWjSSpkLVVB5KkSNvR9mM
+ykPZYx6/SX3zusUV73w0Nb6BaDFHuoPd4rhizgM0XnVBUzWjKy+/S+NkgtYwZ84cgyiKXGhIXCoG
+DRqkTpgwQQEAgW+isCKRZhSUVr05cbXLxnYYC8DxpHjJTOtTT8y/9dtM762lfgqZ2ZghSo5LPW3R
+Bbdd//BbV/Rv0spaH6VLNFmsXJCFdY4qnF9pXNYiFHdA4yUpXJ0pHtBMwaSkcOsGhueHmwb1fH9l
+1hMr84NhxBUg2JNreo2a+Py9nz/63tXxrQtqt9l51WjixFANRCCmGmrKWi6E6vWoBk0NdYczzkjQ
+OB86gMAiIuHxe5Ze4qwJ9Gv1To3FFQCOYygocmPntlJ0SYwALxzbdyBnlR+rlmVh/bpcVFcHDgsd
+A+MggIOR6mQTAWozgkmGhhomIZZMEMAgQYO7TuaEm3A5MMTDgri6GrVFXK07kaE2+JyhoVmUoTbu
+Cqi9lZxMRAUXQJJqAw+AqxNAIqehnAsgWOceBGrFWz7vhYMMsGk8FEbgAaioTRN3chJKmA9Ko+QD
+mWmHxVVdThR4lcFXRKnKN9VTiWjv3xFX2pEE1j8SWjDdeM8bq2/49ZD/4hBxxThwhihf556D1w/r
+32WJpzI/JzProKeipESyWCIxPk66Zn2peL1LDhNQ3wh7pCYbDOHeejUQkdFf1L7XCmO3iwB+/umV
+67d+suLAUKb6ztm2M2t8vlvqAcZsqqxYJEVpQlAr8DpzknPWLnxAsXUTVxG9Vb9Q5EnJBWL3XlH7
+kVepNV4uhyRJQPb2Xvtr14drlTUJACgjPWbkmfc+taPcO1JrJMw4IUI69c63XgSwOILTNKs1fMYe
+SBX8vtB6ZuGodvqsTNXC/m4mg+CPTwIdbO3g/4cpnjPF+tbLC2Z+k+m7p8hLsY23M0OUGtd3/KIp
+1//nwQ/+My63te2m5KUosdHMyQ5BQ6OXFNI8gisYZp3LRvjMZotfRWg9NmaEosZ4TkfIGslh2XDf
+SUkv/XDg8ZV5wYt9IVZmBiGim7PX6POff/2lh986t5XiCgC6mb0Bm425UdF4iwpN85lL3GHG3gg3
+DFZZC302EBepin6LsyMsk/PWC6snVFYFLpcVrdWB7YxxYQuPihJh66Z89O0bg95p8e080iOUlfmw
+eMEubNmQD1FSGhTqFEmFn0ngYQRPDEEo8EJuIHp4MJgYD6r7fgX54WUSTOARhAJ/PZHTmDhYkKY6
+YCIOHBjsMCKTc8INCT6mwM8URNZNOQwMMtPgYQq0urgJCRpyOA9EpiFGM8FKPESmIZ/3owjeECtb
+OQLYx3NIZnZEaAKI1QrGGl5CFudGDRqGtBIAF5PgZQpiyVBr8QJqxZkEo1SjXLr0o+0rAGw5qh+h
+FegC6wTnp12eHr/tqJ7hkijkYWewJ1aljpvxzLlXX/LJK9PHOOsr8kDAjQFRtjM2l7fOCtI5EgHB
+xPnDrWqhELNnZLT8xv5XmHj3h9UAftkyZ+aar3v3s0cmD+y3f//eQdvXrh5c7KxJM3LUp9LlT5AU
+rdFbMiHoyo8uXP3lzDkfnrEG9Qq0sgm/KS9fPmS7g6sOVGpqw4lQ84HUnNS7v3CmAGhpvd7D5K9a
+3cWjqafImnZS423EO/xmpTa54aQBohIXY6gAE6lxHJYGMmdnl4TUOgvHgf3+TqqkhpnEOdishprB
+Z0DZ2NrB/49CH19jfnDukhs+2+p+sMirhYorLori+5397Tl3/Pfhj24Y3jY9On6C2jUpIZ/tEhWo
+DSu6E6mG0mJ315ayKw3RxoRKlVkam8CY0ahpccklnYEWV5fYkD4qafbC3U8uPSD+y6+EEVfWbq6e
+Yy956brXXnr73H5tK8cwKs3os+2yFiOMH1Qiitq1IyvknNaHaPwEKKkAACAASURBVL3l3L4XJvjC
+BNpzEVHeoD2hxUXljzdUURHx/OxN//L4xW7t4R9hDMgr9NJPy7LY5fFWxMS1f7inzyti2XcZ2LA+
+D6pKIVXQNRCcFGReSOAYg0rUoPTBnxaoKM0EYkANgihHAF7I8IbJB/vz6mV1+0aTESb60yJFsBGP
+SBjggQQ3JBxiXnTlbLCTAJU0FHMBVNcL4WUAvJBxgLlg4jkYwUOGhkCdna0xKggFzIcqXoSZF8gI
+HhJU5oWEYJj5igHwQUER70cURYKrC443EoPGAM2lDhIOiZevp4KMsSy5xfU2jwZdYJ3glB7aPzJL
+oqSQeiO8AfZ+k3698eGHPrh9dKz71TD7ahzjWmsDHT+sk3P2JncpIIcsVO3zyQmZqzbFAGhykqLc
+dPOb3woDK2rUaI470q2maczWvWf+fdddmcUY04hCY1IYYzRi1nsyACeAP+r+YP+qeXEfvTl7+PqM
+/HNyCyqvLPQpjdaS0xD05qasWfz7aWhUAT+K1zL7OFhhZSX6NhopfM6y1L2ffXIKEe1prZn462/3
+DgwEgl3DbWMRvaqYGFG7fM15sbL93ZhcDj6tcSahIovW8q2b+7S0AC4RGS/tHd/HI3rsIX3xUVoE
+L+TO6QLpvdYM/H8Uykg3Pnrn29fM3+a6r9CjhZgKGBelxfYY/8PEWfc+NPeG4W0uVcAY6IPbeu83
+s8pgAA0FlqbJhrJ9mb2zASOAsBmhRNP5/56/oY+LQl+MOIMQtKUNymvJurPlweFdXvku88GlWcFL
+/WGK8/KmZF+3YVNfvendl96+qwdrtTX2TyL+e7+PW5yeZYQrxFcp+QMx1Vs3NP8y8Pn9DglS93Aq
+0eSIqDD0PbkUP7R1VH8vK9bkDv1/9s46PK4q/ePf99w7nol700bqSiV1QUqF0lKsZdFdtKU4LG4p
+LC7LIssCCyzOFqcsUKAUqEDd3dI0LpNkMn7vPe/vj0lKZFJSQX/zeZ5pnydz5dwzV977nvd8v7Uu
+41hmHJIPHkuDSCgRs1jMwLr1FZz48TaaPqMfHM6fTAQeEvv31mHfxhpWDSIZ4falIuyfq7NEpGkG
+VihIYAssUKBKApEFrgPCDC2xQYUTZuiQqG+cCfjjHMTG4wWgNf7NAKOEvHCJIBxsQggGPO0IiEow
+/DDg74BVpQQ3BYAd+pUkGEXkhaIAnaUD9sZbsUBYyqzOpZ2SuKD8bQArOrK9wyUaYP2GYWa6Z6wz
+j7mtISuRWeucP3rlVcMTG65uZ32S1GE1qPgbrqt2vHD9ThsaTmgd0gfKSrOs+5b0w0FSqutf+qDr
+2+9WPrClItRPUNMVw4BIRNf8qU/edNF5Tzxy56whZ581Y7zRLKhhNsRZs26oM4+/8ZPXZqa3GMLp
+efw51QAWcOlziy86/eGKj1ftmVujt9LPCoTs/p0buzGzqfnMkIvPzNm3cFPpN6tqanqGWt1ljIbC
+mJqi786a+NzkheiAgbP7uWnJ5zy6bFpFhCwJQIjrlr3B1/+EMgAgKpD3n5O/KU3d7ykOoUU9EAca
+FFn6/YiZr7tzAbT70F9164CsYiMwoj5iZqCzW5NJW34N24ffCvzpVZYHb3nh7NdWuO4orNfbBL0k
+HJycN3rBxItm3frqlcMPW0jUCufurmauWhVCC00z1oJC2/PtwEc+q88CENEXcuOzptitm6rGyDYi
+p4CqJtQOHj5gU+nr7e+77MmxKTe/uunW/231/DmiTZYlw9t16ClP3fBEwROzcqndGbUHg+jCwJWD
+sranmuAv1tBC0kKvK0uQxUuHzmf+cBpFHvJ+4p3SvNoqb7+235gQY4/dNfHcoSU7Hjuclv0yMLPl
+uce/nVxd78s+5OxVk+goRZjrwAwtEKTvlxUiKcWO8Sf1hHoU67FCAR1KSCCGLFyPABnNbvIxMCEO
+VhYMeKFRHYJtgpsDtVosGkUXI9ud2KGiG8chSVpggLFHNKCYPKgkPxxCRZI0gwkoFWEZhub4WIcP
+Gg7mF/hzE4COHcKNKhFAHFvgZFM4e0Y6fHVal+DO1AnMvO7nnDj3O5qJROzyyt98weRRhtw+doQn
+ebT9LhSUprntTJLmJRc5iz1GdjDCm2/EHdEF3vwkrE6wiTZvwuzfba8qXj3jkvd2RnyjZS5Q31hY
+esLeworhta6a9Jqamk7hj6uTy4uUsoZ4DxGFCr/6svey+R/f/MH7HxZ8+MGHd3/4wYd3f/T+R3d/
+9MHnBYv/++m4dtuWOcuXK2hxZyu1VT+XEhT0WdDqXKbpHzcMSXF8lBOrRFBF0OHZ9e3oba///eYr
+nl6afbB+KZ1fkHzZv9bNXlNYe0ogwusg2boE01KyPlt0mdPV9LdBsfqWXpnWLW0WhoaGis353734
+xFlX7Wyb2QAAXvSy9elPK8/eVuwd1vZbQmxGp01pky/ddLA2/5HhzTPMD/zroz89v7jynkjBFcjB
+CTmjPzvhiutueOO2KRF+g44zpZ9W0qurY2XbC0yHr35nv89eeGE6c1tTdGamL77dcPz3lUZ+60kW
+IBVqWv72/H5J7f6GZU+OTbnttS23f7Ch/tL6oGzjeapYMjw5+dP+cc699z7UnsdgRzk137whOcnS
+NjNt1KKiZPPJBbfMHxxhNfD8AvvqEv+p2+v1NvcEsiXpSvwxK58ahN/0EOH6FXuyd+6oP0nXjQ7d
+I1vDRtiDsEWaiDnsWwhGQ0MQn3+6DWvXlEGPZEp6mCRnOBGXaA3P7271nRNmdsKEeDZTAqxsbmXt
+wwACMFBGPtRREDUURAl5I2aY7FARL02wsICDVWRIGyxQ0IAQNgkXvlcrsVypwi6qR6hVFiosnvfr
+BVdNbZBg1CCIveTGRuHCBuHCbnKjLOQ3bdnmmrJ1696I2o9Hi99NBsvkr4qZ7vhqcM9nH68xjA64
+QzZDCIMUxRIaMWLs9mOOOeb3ZBvB8TFqPYUzQi1elaQRVPcv+3jS+n8f/wFaeSz975k56ef+9eNZ
+31WHTvUcgmHtGTP7fzd/+/fbyv2Boa3mZKBm44ITv7xPv+vK5xY9/tRlx+1omoG3d1FB/BWT35zx
+5fb6q0r9bU2ibYnx++NHTty8f0kBBsQG9y62savIpXVpsfXqfYl1W744c9pT276bf1WvNoXIzCxu
+Pr5Tn7JAhBliqsqIS3QjgujmDfecsnTFpa99VLK1frZXbzlcx1qtqXT5vPM/qFiTPnTyRe9e9JfT
+V00c2nu/ECIopbQUr/0udf4Ljww69dp/nrqjpHZqndb22AAVMZm9ViePOnVR8xmJk5+9rfTDkdd9
+urakdHCN1jKQkt4ie+3mt+Z8fFk5Fyza+9Ldx+VUNA1TLnrhqqw/33jXBYt3VV3dOlMHAGRPC9ky
+hixcNCe2iK5o25o/OsyL1EdmzjrtpaWVdxbWaZ3bLqEiNTd/zZw77vz77Cndax6Yvieto9uWUrLd
+bvdkZv5opZE466v6m8bnfZJp9ZxUEpAtzj3ZUBrjWvyfWaPP9bvmba58d2bfVA8A7N+/zHbnmeMm
+ffztrltdEUzNherUsvKHLuhzXEZEqyT3K6clXfOvH677cEP9xQ0RMldCdep9hk9574FnCl7Pt9WY
+L9jT8WO0Wq1GRkZGffNM7/j7btia/d1ti3dUBfv4jJb3itD+1d32ffj07X+6/aV7Z/3twhVNE0kW
+zXs4/c/3Pnv+N9sqLgi0Vv8HYHEklXQ9aeq3v/UC94UL9k12e/w9DvxBKIA8hCY3BlMg8aPwlWxp
+p1Pr8uP9t9ZBMjAkPxOqcuQhR0q6E33GZdK+ylo2WllvSAJUGc7HNelQNaGAEENmZoDqOYT6Rr3j
+5ltQIaA0ziT0w4CfJGwcDlS8pB+o5ZLgiPVPv1UiaXm5G/z9Pn+v6AQAB5HQPjJ+NwGWb8+inq/+
+fdkzSjjYOLSzlEFmZ++yC+7NvwzAEb3V/pIQEb87Z8AG8/LNPsBoOYOQdfh3LRj51b0z/338KRd/
+Mqx38ha/3x9ftGlFt8vu+M/x7oA2sKGNSOWPaCws37b624Brvt419aPMt/ctq+jnCsoWQwZSrzEX
+b/z0z6/cvnT4x48lb5h0/LGlDeV7E8ac9kh3n24MqPWEEtu0X4lBTFLfH665Y+TGSx4BLrt+2ub3
+r/jv8u21tV2Czc916UH93gUTFz1S8vxps+59NlC0dkVd0XYfUI+Bx+TEzzr5mKlfra+9qkLnNm/z
+qs1Wnzhk5IZIN3Ma8ZT7s2uGP7+veP2IlbWBIa3Tn4ZWby7bve7kuop9Y25b+UnJ9b6GOl3XDVVV
+FbvV4lR1X6bLG0qMpJYNAKaE3Jqs4ae99N2tg7bRbc32SzNDS24e+sHa/bUn1Zb4RrXeb6hqW2bJ
+8srbHj3jg6kvpHffPn78iVX1u1ann33Di70CoVCfyDPUVMQk9V835PSz3/n/qgX3yl9mT3n+6/33
+7q4JdI2cD5DwVG/q9Pi1U+9//NpDyBiwQYjr5c8YdMFjAJp7tOOy45O+W7W3emn5HveUlieYhLd6
+W491nzz58OyFL589dNSx25LYZZwweHJ3lz80xO0NZOhtmkAwZY/c1LnXwPkzI5yvPH+a/dpHl1/9
+4dqqObVBvU39XXihIBVu+njU2aPm/afJNLdjx8hQO00qHjb54usBFB5oUeoVnvcu6v3ehnL/lL31
+oS4t1/GTa+e3E//3zw3dvnvjkbXHjz++0KjYHXve7Hv7en3+gfUBo22NoOqQ1p6Tvrzm0uErlx7E
+DurXpnLv5vQHH95+ckhnO6nmJhdigFWAG7NT7fgOtoElYLS/bGlJHT58ex1UhTBoSCYOLT3QFpNK
+GHlsNurrfVjw6XYOBLUDp0ItB8gkBJtZoB5BCjW6lhGAFLJzJ2knBrBfeFHFLUd+LVCQx05YWUEV
+BVBGPuwQdUghG0IwUEnhMvQ2h9/4f6TDahIUjbReeB1qtIngdmUhfi68AS22oqrm5Pr6zR/FxfV1
+/fQah87vJsDSAw02V6Ah9/DWJpiD9RZ3qG1W4LdOaqduq4Yk7Fj/ZblxbBvRTN1n8hSvHrWkfP3Q
+pZ9zEIAAS7Om6+rBNZQl6TrMpa3OZyIyfrhv/Bsb9tWP+mKf/zS/0bJ+xNA85oZq7wBfbUX/8kKS
+LKXQDUkccWcEe3rvnb2nX/riJXHkAgCa9K/KF87J+8++GvfQ7bVGTvO1OFBr9hb/MH7+SytHCpOj
+LiNWrSGEaN37K1IM3UjQDCPidHd78qgfZs4Y99X9L0Y+0slP/LBxW0X/u8s/2/nE/vpgtzaKP9KA
+z10d58OP9VKapsHvP/jkEpMzwxM/6E8vnHX7rP9G0tMa/eCKLWduTH+6uiGYt8dtpLf+Xve5HB4/
+jfS5XSOqdkGyoYf7sp392VO6lvacdtEjH1/RZwtdedCm/SFhZtMV/RyTSur87QRXACDhc9ekA2jT
+3z8FCa/f5g6ltv57tztW7n/opMwX9rv8/Xe2yZoZ8LmrU/wNronrXMUnEhiGYQijzbhgGHNcTk33
+waOf/vKOcTvozrbfvzPPlbxtV9XJtQG9XZVKaYSUBldV90M8PACA4vEn+0L+NvZBp59/1pKv1v/9
+jbc2atfXtZqtLGVQNNSWd/O6q7tVlewyiCXphiEiH6KAs9OQDcdNn/zMzFTyHE4bfynm/bd6nKar
++VBbVbeHZc5BZGbWQx0PslpD4sDdlRgoK6nHu6+vAUtG/wFpsFiP7NFrd5gxfnIPkpKx+Js9qK3z
+Q4iwaXIpewhAK+Urgo0VWBtv6Q6poqrZYTOAFLahk3RAZYKdVNQoQdQhBDdpwEECICsUiEbD5uai
+o6mwo0vj9oqFD2XkO5ABIwDxsCCTwwXodQihTPgizmJsfixHc9iRmeH30Zj/vlA7HMBnR2mzLfgd
+1WAdGUSQQvn5rRvoKNtDjL3tvfIJo1P/mRunlET6nqUBLRQ0hUKhmFAoZA9pPxVcAQyD6j2+lNrv
+2wbYI25fWHHyKaP/NjjF8a01otAlwzB0CoU0RdONdoIrQEnqWZk69i+PPDZ39JLmf79k7tMLp/dN
+eTTPKcrbHotGuhZwhHw1nfaVVwwoLK/t7w+E0kO6YWm7GwUxXYZuHnjunx++f3JKu8rcRMTXvnXm
+ggtPyL25R7xly9F4o7DHZdTkDD/5H5fcds6jBX0jP0iIiG+84+YPp/ZMfDDXqbQ5VgAAM6QeolAo
+pGgHCa5siXnleWPOfuiCqX+a/3syXT7a6GGpjp/nJZeZQZFFMW96/okFE/qm/72TWUSsd2KW0DRN
+hDS93eBKsSYHMoae9vLUO277oL2hM0MxhC7b1nQdRaTQTW3zascXBM48d+Izo7Ji33NS5HEfaejQ
+NE0J6e0FVwRrSp/93Sdd8MgHN07osPzJrwEz20KakR8M6nHtXk9ECGe2DuMRKRSQycKkNn3MDEWg
+rMyNea+uxuKvdyPgP/I5KnEJNpx0Sm/86YLB6NkjFaoQiIMZqQjXSrV4gQWjBn5yUQjVFERVhHkL
+PtIQaAySXCJ0wNvvx+CmLfGw4BiZhHwjGT1l3AFBUSfMyNcT0EuLQS89BiO0JGRJR+O2GMlsxUgt
+GUND8einOTFcS0S+ngRHBDMRMwQy2IFsjkHcT0uzdRgiQtCvJWmGzGeOJAh85Py/CbB+KSLJEBwJ
+RMR/nZr38dmDY+/PjVeLWxtktoewp3n69+y7LMFmiljrUbt7X7fUNdvaDLkBwKV//2L9mScO+uuE
+HPsHMWbFfygpbVIsHJPRd0fXcX+5I3/YKa/nt/J8ou5TgrMvnv3iyUN73tQ1LW6TSRGH+IpIECan
+lpw7eunA6Zf8NXXupO9+cg0q0O9+/08fnzOhz5xxnaxf2k1K4JBLIUhANVm1xE691udPOuumsROm
+PfTAib1rDrrKqOv9153c97nzhyXe0ifFesjHSoqVnSn9tg+adN5tuZPv/vfVUw5uEh3l54E6z/Rf
+cc3FL0zrm3pvN6darBxCkEtCgcmWWZd37DmPDbvsnsceHBBhokbz5X8l9f7x179TMv3EUXdNyHa+
+mmhRvIfyYCDFwrbkftv6Tb/85ry/XNxuAPlbYcn/dmZ4vcaIUAQF+hYQHZapIClqK+EzAinhYK2i
+sgGffLiZv/h4G+rrflIG7SdxOC0YMSYHf75sKKaM6ca97fGczjYkSWsLvz8zBIIksYfc2ENueBtL
+Vu1Q0YvjkctOeKBho+LCOqUGe8jdQjsLCPsMdoETaQgbNasgdJVOdNFt6KxbcYwej8zGKo4ktiJJ
+mqE2tiGWVWRIC0RjaX6WtCNdWg8Ml5pB6CJtjUFYGAFCJuw41kjFOCMFY/QUHGukoCvHhqUojgJB
+TVfrawNjln65v0295NHgNzVEKIgV+tmCPjIRN14t+wESkebXAgAJgYP7jFFY36jNI5oZitHgixi0
+NCGIBSIfIzFExN+DLvwmwE+e9KK1k7f4v5+vu6oiGBpU7w0khdo8rhWYbTFBW1z6zpRB016887SY
+bx6/7cHnV/i1lkXrzNBL1vcs9pT2BLCszf7CD5A1n946Y3bqqp3nLFyze2aDZvRq8PgTQpG81UjA
+bI8Lmi2OfY4u+d8MP/28f7nlGRvfuT6ylEDuhQWBefNmvDl4dZc1r3++4eL1Re7JekjPrveF7LKd
+jJhQzGx3xtdCse/NGXzi+6PGT3z9uZtnFHfU7oaoQAfw7ZvXjN/Wf1vZjM9X7z29RqO+Hl8oOaDp
+7Z5zisnGthhnjTDZd+YNHLdg1Kjhb8y4e07h8R2UScgt+CbA8/B63upJq16av372trKGCcGAlt0Q
+CFkjZgJIgdUR5zdZ7PvsnYd/N2raqf+8+p7zNh9sf8JgIop83RCRYHHwWh0mVhDpnKcD30VE1Q1C
+e/cQgkLy6Fretnd9HB1ICGrvngD0nVngWXXZkCcz+uVu+t/C7bP2+QLDPL5gmi9kqJF+RsVkZZsj
+rtIUn72u29hTnz/7/vM/u75zzEHHnTVDEv2c92SGYpDR7m8y6/nPdn9y+Zgb0vd6Vi1cvuu8GsPo
+6fYEE0JSRvRTNNucmsUeU2TPGvbtyJOnP3XOfX/ZGKm27LdGhaumb2W1v88hCV91FEVFxKxXY40X
+EaG2LkDz529Gabkbk0/pg+zsuDZioYcCEZCVHY+UC4+holE1KP2uTK7d6hJlLh8kJBxkQmeOgYkF
+SskHF/wH7GyS2IrORgwCZKBOCcGFAJrquZpmAkowTBDoLePRxbBBA2OTWo8S8sDCAjEcDuUkA1ZW
+AAKCZEAHHwiwJBhBCjscqhBwCBWqyiAzN47CElQCYjSlUToCSGQLRqiJyLCY0TRSkkgmJBoJUHXC
+Drg7ZEJ9MBhARaVngKehsieA0iPaWAR+UwEWkVgD0CMAW3BU3+SImGWdNPTwUJI5QWeJBQDcrRcE
+OGQQrW5/W33Z4BWLCfTgAQ3+AzuRhpRy8cFaIgWtB9HDAExoVh8Y9hKUy9GOdxdd/VkQwMfb5z+6
+7NknXj7uk40lI9S4+Fwo1nhmMhFJr9tjFCsJ3bYef/lfv3rl8vGb8c1c+jKVHl3jwsCWwRgT6SWh
+fVWhg/riTXngnSpmfvL7V69/96V3vh3z9Q/7BpviY7MVkxIr2eSAYIMNdvv8Wjml9Nk67qzLFt96
+47RNfTtQhD1z5jsGgM3M82783/3vvfTce6tGrSlx97Y6YzMtZlOKYZBKBMmQ7lDIcNd59aL+46au
+n/iXOT/cPqV3ERHx87f81F7acs4/FlYw8zNln8x9+5+vLxjxzpKdg7xkzY6JiUknYquUwiyEDDFT
+wO12l/lkTPGACWdsPOH8y3+4e0LnMiLifxYc2hQ+mgkDWLCZueC6d+7f3O+F1xeP3uziXjHx8Vmq
+QnGNx2owZEOtO1QU2+WYzSedM3tZv6smbZlFpH1w7/kH3b4wUCcZLwP4Gi3PHyFZVkDRIw4vN8Ik
+aQVA9yP84tD8nGRi+gbtXIuq2fAy4XkCMlv6JpIgoFqIo3rDksT4hAiVACI6BB4BREAILNYcbKH8
+51drABZULnpm6Stvvj/ijS82DKtjW3erw96JJVmJwEKw3x8IVTUETXsHnnzB8lMvvuqHK4fH1qx8
+7baDbRoAoBjmOiZ6HkAmjn4mi0igBmZzG2Oc5kx9dkktMz/7/avXf/TK21+PWbimdCCcsXnmVtek
+1+evYHuXrSdcfO3SE848Y/2FuRT48P4Lj3KTjz7MLF58+tvenkAoHuiwDvNRhQjQNAMrftiH6goP
+Jk/phQFDM2C2HJZaxAEsdhO6D0pHl97JInl7FRyLC7FxXSmoIayPZWMBN1S4mj21fKSjQWgIwmgc
+EvyxximFbciQVlQ21mI5WIHKFLbHYRUGMfYJLxKFGTGsolwJoFiEJ+lXw489ihc5hgOCgTI1gN2K
+p1GoVKJOBEEWB1SBxuFHhh8StSIAqYeL4zuTHcnCBGGWMBr1RRmAUxXIZTv2GV74W1n6CFDjJ1xY
+LzsQgnn9waSaal8vZv7maJdg/L80T/4jwMxKw7aF8Z9vdDk8Ho+anZ0SPOGEqTVEdOR554PsE3Xr
+nGs3F9lXb6232O2KHDZsmK9bt25uoiMfvmJmpaioKHbVqlWx9fX1ChHJ3vm9/cP7DfcDaPi56o+Y
+2bp48eKEurpyU3W1R01OjtHT01NCQ4ceV3s0jqudfaq7du1KWLFihT0YDCpks8n8fv38/fr1c1Gr
+YdUov12Y2f7ZZ58llpeXmwEgOzs7OGDACe7kZHj+CPVyzExFRUXxS5YsiQ0GgwqRTebn9/P369ev
+/ue81/xcvFywyLqj2vdRWY1nIpS29WgtYBmWYTiUstpWtVsEQCGGlGFJh9YZepaMxAQ7Ro7NwbHj
+uyE1w3nUEmteTwhbN1di27oyVK1zs9vlRzl7yU8G4mFBAltQR0FokAdU1ZvaLEAYaiSjs2FDuRLE
+KqUaiWxBtoxBkAzsEG64G/X/49gc1sciDf5majkWKEhkM1QIuCgEX6MfIgOIZROGUCK6WWxQCDAY
+2Kx7sBo1CBrhjNkIJZmHOO0kLAzZaEvLDLBGqAhp+DxQiXoKHXjbskBBZ3Igw7DCLhV4yEANhVAq
+vGhop3g+/JMRstLj3h8wOufsmTP7HtUZ2r+pDFaUjtNY51DT+Pkl91nX+Pm5tl/b+PnFaHxQtFso
+/zPtUwfa2uxG+X1BYZXzDpk2/x5pDBJ/8Wvy5yKuV2xu1fzKPmzoIBJh7av2kBKHFFwB4eWlBER4
+SJAbNyNl5AlBJAiuOh+++Hw79u+txYkn9UTP/qmwWo8smwUAjhgzhgzLQt/+KSgd56bF3xaifn0J
+QrV+pOhW5LAThaoHu1APibCadXcOmzjvEW64SUOdUFFL4YL3EvKiWgnAAENrliivoxDCxqstZ/gF
+YKCUWnoQNv3fQBqWowa7Q1bYoMADDVUcQKjRwNUAI2DRAWu4z0SzWFiYGSFDtrD2sUBBvpKIPqoD
+Jg4PxWoaI6g5sE+3Yp3qimAIFYaZ4XJ5+ybajSwcxA7ucDh4kV+UKFGiRInyB+HY4RecV1HRMM0w
+pAlNAg2RaqYMPayFdTiwJLAR3jZLkKGTPIiAKRFBSkZNpRd7t9YgUBOCPc4CR5wV4ghFs4gAk0lF
+YooD/Y7JQHZOAmxWE3sDIfIFAqiQfgRIh9I4tNZfT0AiLKikAEoUH8qVQAt5BR0Mo5WLfXuq7dTq
+0xodEm6EUIMgGhr9Cpsvp4GRZLdyvIUIFNZzJQn4DcY6fwNKZTh4EyD0tMfycJuTzE2lqAQoCqAQ
+EMcmGJJQKQIRFeuZAdWsWMwm8/ZPFry0ts0CR0A0wIoSJUqUKP8v6NFl6mxfQMtnoDHbZBCYCdIg
+AjXZ39CBMakjgSWBWxrCChBMjQFd60c9E+D3ayjeU4e9hS4EgzoSk6yw2s1HpZZHKISUtBj07JNK
+nbrHw0hQUVXvZXiZuupOGAS4RAguEYSLgghBIggDaMxO8InKkgAAIABJREFUAYAJAimwsRUqBRrr
+n2JhRjJsDDCFIpQQtyfx8FMEpEG1UmO72cQxiiDYJEpDOq/21tN2nxc6hQMyuzBhUKKT0ywqCTU8
+OstGsxmUZgAsUMx+BMhoGwiGPXUsWp2+d8natz8/jKa2S3SIMEqUKFGi/OEp3FKY8djjq7INyS3r
+nBqzSyzlwVUymme6uKmaqGMQAIuislkKUklhAsgPDX7WW2zFIEYDQmjYVYWi/bXYsroU4yf3RHbv
+RDid1qNSn2WxqujWMwXZeUkYNjaHNn9TDG1pA4LuSuwI1EEhggkKTI2iCt1lLBjAdlGHzuxAvpZI
+AZJYplYhSAZOoBQkmlWqCmpYiEr4oCNeNXO6yQISksq9GuqgHfKMPwlGqc8vPguEYBPhDFZAMgUM
+A5J+nOliMTMSWQiSODA/X7ExZIjC/cVALCmwsYI64gi5NkAzJHSr3quycnN6amrfyLqFh0E0wIoS
+JUqUKH941i6v7WlSlJz2cyrtBABCAQmFW9RrSQMsDeqod6EiBCxSkABBEQKqFKxCwGCmYARtVyLA
+ElLg2ezHwn1bkD4gHnlDUtCjbyriE9uI8R8WJpNARkYMUmf2ROVYD5S1sRAr96O60I1cXwz8wkAd
+guhrxEIyo8TshY0V2FkBgWCCgCoEUkwmmImQGWNCos/KLHw0Ij4OPVU7CZVRaNH4mzoXamXwQKer
+imBDcrtC1c0JSgOBZomx1kOOhgGEwgLfBACKpVFNXjB0X3iaYtOMwkgwwjphNlhzfvhfqDOAaIAV
+JUqUKFGidJSqcl+SrnPsoa5HitpW0V0oICGYNdmhWYYKCIIIEMSqbJphSC3EQFvsEwQnTLBDgfQY
+2LG0gn/YsJ+yeyRi3HF56NM/DTbH0REfVxRCRpYTKek9cEx+Jgq3VSP4RS1276nDfniwUtRAIYIP
+OgqFB7pJIkAGqigAkxQo0gPIs1uwzwigRgYozq4g06ySxcaAiZFgEzImKEStF7CbVM5PjeG0GJVc
+bilXuRqoPvjTtW7tLUAAPJqBcqlzpsNMFPjx5yAKB1syQKgUQbiF1iZ7ZYOKrtKJDN0KRTPZAwHp
+PMLubEG0BitKlChRovyhYWZl/Zp9x5WWeiaENMPS4aE2RQW1q28bnq0Gafzk1gQR28gMM5QDD3km
+wC80GBHcPxiACQpsFN53g9CoJuRDaZkbOzZXcmlxPZlUBTa7CRazekAc9EgQghDjtCAzOx4pgxKg
+pSjwSh1lfg/KQ+FC9xAxqimIOgoP+emQKGU/dhle7NC88MMA64QMswXJcSZmAarw6djm8ZJuMI1O
+j+dRuXbKiFOpU7wJVqi81+2ndhymOgQDaDAMJNvNHO9USBgEGOERXUUhlPt1rNHdqMOPijsEIJPt
+GGokoYcegwQ2w25GTFwGr3r503+vPOLObCSawYoSJUqUKH9wqu0+X6hXKGQ4DiUWIfyUllnHNmZI
+pgBpiCELEwCDGT7WKMjtDzHWIQCNJBQQPAiBKZwJq3P76fvv92Hrlkru3iOZ+h2TjgGDOyEh6aAm
+Ih1GCIIj2YaRk/PQa1gmCndVY9WKEqxdXQTdL2EmBb5mulI+GPAZxoGhO580sNhTi0oKgUC8o85P
+tSGNkh0KuqYrwmxiSAYUE6hbZ0GpNSqK3dqP6sEHpI47XhxfEwjSwrJa9I+P4RyTDVZVsJ91qvSH
+aH3Ihwr2txggjIUZA4x4ZBhWAOF6L0WDYjcomZlV6qBTx08RDbCiRIkSJcofmvp6k+r16Ym6bhzl
+UZuOpV4kGD7WoYOJQJDcNEMPUCFggYAEEGw0WwbCdUNuDoIBWKGgEztgh4oqCqAeQdTW+2nl8v3Y
+uK4M+5dX84CRGUjrn0pJCRaopiM/TCEISck2JCV3Ro/+6eg/MA2168sgdwSwvKoBpexDnGKGMBmo
+Cxowmg2V1gR0LPXXhVUwGiNaDQQdYekx1cYQBBh1QEAPy2iZFEK604SUBAWqCpRVGyh16zBkxyxc
+q7UgLa7SsMXiZZsqKMA6aoMagsxtArVsIwZpjcEVgHAk5xXQa9XkMpSZAUQDrChRokSJEuWn8HiE
+0AxWDeZDmonHUicSSrsrsdFxOQcJhp9/fG4TGtXOYWNrY7WOG0FyIdhmxp0DJmTCAQsLSDAaGsU9
+IQBzSCC0xk/f7tjF3uzd6NU/DflDspDRKQaK9eg84p0OE0aOzYUxOAO+0joYSytQuHU/9w/ayBDA
+Ek89F7kDjUN9DKLGmrNmB+v1G1hV7IXTFoMEB+ALMX4o9MHl10kRhBE5DozIscMRSxAEVHsNfLHR
+g+1lgQ6FsWGBUonygJ+a/kIRsmBmKMiEBWqjz2ITLAG/RvYil+WoxUXRACtKlChRovyh2be9Il6G
+kH7IqkzMzYKs5jINslHpvW12RbR6cDentUCnjVRYOWyJrIKQCBt7oVGg2cxCQtg82c9GuG6LjAOi
+nNz4XanqQ0NAo7odIezcWYXtX+/BgCGdkZWfjszMWMQkWGExH1lWiwhQY6yI7ZGOKXlp8O1LJf+G
+KtTuquPE3WZZQkElza4iRphkRTBEHq1l8GkwY1OlD66ghuRYBWX1EtUNGiQz0pxmHtXTTolOCgeO
+xMhUVYzNdaDUpaE+YHQ4MD6Ytz0DMJECq1WAfNzG+dcX1Dv5drpi0dan+LCIBlhRokSJEuUPTVll
+KDYQ0FMPS/LS0MOSDNTkhU7hwKpVcGUSAkIRrCD83NalhG7Ig+6wyZgYAExM5CcZLnlvFZ/5WUch
+uWGGAi9pSGQrbFDhQhBeaNhJbiTAgl6cgEr2YWutB5VfFXLnlTVkdBKclZtI3bolIadbIuISbVDV
+COr1h4BZJZi7ZiCuSxIsu2uo+6pqEbO3GL0tKmKFGRsbPPh2VwOCess+YgaK6zQU12otaqwSbUQW
+hw4Rq4bthQIAKQa6pAnYLQJ1gbYCoYcDAdBgHFCmb03I4Fh2wXIUdgUgGmBFiRIlSpQ/OLVVnhif
+L5R42E9pZoDbL8sxCwGzSZVCghRDQCGBEBnwCQ16OzVEDMDHGqxQEQsTSTAaEKQQG1BAUCBggGE0
+mjGHDYs1xLAJnWUM7FIBE8Mrwh57hmBmMAkh2MECPqFRYUM9PNs12r23BiuWFSIx0Y5uPZLDtjld
+E2FzmKAohx9skcmMhF4ZOCE7mXRPF8jiMgT214h+5Was2Cs4oElSGjNKkvnHoKrl6CHqpIBhVyDM
+4a4WqgKwhnqfRIjlgcWZwzVdRGGjbD6EQvgmQmygKqghlW3h7TQLZgksLVYjOkQYJUqUKFGidATB
+mioZR5a2aQ8SUFSFhQQJDgdXIMAqVRgsm5WttyUAA5XwkZdM0GAgAAMqBFJhRwJbECAD5fCigUM/
+6jtZCEqMAqfDjhRBiLPHsM1hgsmqwma3oKtZRYZQ2WUGNBVkUkW46L1xA0SEsrIGKIpAdrcE2OxH
+pqdFAGw2E2CLAyfHwp7nRv2mfUjdY1Bc0M85TkEMA5uLddR49IgRUZUrgNXbFR7Z20axMQJMhFoX
+Y+laH+o8stFbUKBTgoqEBIUVk0C9S6eS6hD8etsi9p9ij/Cik2JDEpmg/zghEmZDJjkatGgGK0qU
+KFGiROkIfk1Xdd2wHY1hptYoRCAiPuBVzICQBIXCVjM/hQ6Jeg5rNDEDTjIhlk2wQSAWKmAF0jJj
+kZkVh4QkO+KTHEhItCIx3gZFETBbFLJaTSBVQDEpMKmCFAV0sFqknwsigikuDl2G9MW56VnQ3DUU
+31AJI+RD1q4Q/rfcgzpv23oqQzK+XeNHWbmOjGQVuhBcUh7C3jKNDMlQBKFfroWP7WGneDsRCPB5
+gS27NSzb50HtIQ4huhDAOlGHgXoC4pqFQRbNyLa69Zij0xvRACtKlChRovzB0YKGakjjqGUmmkNS
+gliASGHFIJIsSSG1cT5dy/mAB4a6mv2NmcESUFUBi01FYrydezlj2dnZSUk9Eig5yw5bnBV2hxkm
+swLlCOunfgmsVgXZXRMBjofmTYdeWYK+9nKs2BVArSdywbpfM2hdocTGfUEwgaTkAx3WLcOESYNN
+lGQxwH4rwIDDAYzqboJmMBbtaYAmO57JMsAoJA8aTDq6GU4kSTOIAUOTUAyODhFGiRIlSpQoHcFk
+Ekq71TpNT/sOWN5EQgfDJJmEwSQF2EwqCyYEWaNAY90WATCTAjuboIDgIx1eGRbXjI21IjMrDl1y
+EpCTnYCUNCelZ8ZSjNMEEnRUVNp/NUjAFOOEYsmFJ2CGsPmZKEhNZWmNo6k/Lk4cLj/nH38WRRDy
+khSkJpghDYYMGYChgBkw2Rid01XEFAvU+o1DKsiSYFTBjxolAIeigkCI8ZhpkNtx1Do8GmBFiRIl
+SpQ/NEQRZvMJBUTiR/kFlmCWHTZwbk5IN4jBsECFzgY0luRjDXpjrspCKpJgYwsrUIiQJIiQq6Br
+v2R075GC7NxEOONtUBX8rgMqZkBKiUBQor7ai5L99fDVNKDO5caG7TUo3u9DYrKKvM4Cwiewt1RD
+taf9/maEAyy7OfwbCYsJhj8INOrFMgC7nWA1C8B/6L8bgAMTCBiAgIB+dDRGAUQDrChRokSJ8geH
+WbRMTwkFpJpbpawECGDWQ4ccZIVn+xkISUmE8Iy5AxtnwCoVOMwmJKTbqcuQRGTlJSGzayziE60w
+HaE+1a+NYUj4fRrcdQHUlbtRWORGYVEdyorqUFsfgB4IQdMldAYyE000dZoJeV1VkCZQudeMjz4P
+YFdlKOKwISFcn1XnNxoDoJawTqitZniDHVN7PxjU7N+jxW9qMHfBs7NTZ4zuMSbNYp9mcXaZ2vuE
+c8YVvLUms/VyPG+GMqufKV8xdz514IQbu3MEs0wAePiMrO5mc+fpnXpd0QMAmFlMzY0/JsGeMHXC
+Q0vabBcAXj41J354qjpB7X/hsSddtbPdMftnpqSk90lQTgJwGoBTI3xOj+829tiLlvBRdeeO8v+T
+Vc9dZrpkQOyI7FEzRs5YxjZmprP6ZfROtiRMO67gvayfWv+hU3o6RzowKWHEuaOPe5mtP7V8lMOH
+memh450987r3P/Gkl8pSfq79vF5wUmxPi2Vy1oApw59kPmh9ETPTBVnmAckJnU7uev2Czj9Xm36r
+hAyjmYQ6RQiufoRUM0McXtAjmWE0BlfMACTDalXRrUcyjv1Tdzr9liE48axeGDA6Aynpjt9tcKVp
+OipKG7B+VQk+eW8z3np+JbZ/uRLWkh3wFO3hTWv3Y19xHRo8AfgNhk4EoQj0yTWjZ3cT7HaCLY7R
+9RjCyFFWNqnt94MuGRuLNWwrMiB1HYLCw4eCCH4fY2t5kBuCsk2AdngDvkfgOh2B30QGi1c9Z5p7
+z4Mn3fTQe39x+ULD3HooTedaLt28rOb5gqvW9Rh/5yvPfXXPh8cTBQCguBhmEF0P3XV2UXXVexf+
+p+pKAOUttsmgR8+UpwLKAzpwJ4AHAJiZlVkAzmcYfwbwfpu26JwniJ8Fc43LGTgFQEWkNquGPoSJ
+/w1QeuQfhQDwCunFnwFsO6IOivKLwaXP2R/9T80xQSWGjzn/qg3TMsn3a7cJAGqq3OlF5f6n6xMb
+1G2fbTwfI/tvYkOew0Q3UMi4BMCbB1vfEVS6MPACgXZ4gfPQ6nr5vcM8T3n+6V3dS1zcKePEqRsv
+H31M5a/XmkLLjmLjmga3b+a2Jd9fD+DVn2MvMcKcDfBLEnKFy4PLABzsmAXpfCkJPk+R6tUAXvs5
+2vRbRVHCHnjQABLqTz5FSTExS+Ow0xnEQKzTipycRAzI74RB+ZlISnEc7uZ+dXx+HW6XH2bDB+Fu
+wLqd9Vi8qgYl++vY69eoV4YF43vFIzVDYnyGSjuKFWwvkhDNelABQYlj4EfFCEiFocSChEJgHZGz
+WARU1hv45PsG1LssSEtUAUOD2y2xeX+IN1X4qPkzWCVqNMIhhKAjFEFtv13M5Fct5sMba4zArx5g
+MTP946yup7y6pOLRMupkyTpm5Ku9fTuWemurtL4Z9vzV6zdcvL/S9fi1ZykqM79JRBIACILBXtTt
+WDh51YK3Z85jfmYmUYuOYQq/SLSoXiQwwJLkQSsaObxc+wgCg0xQck9cGuNbd3d9RUmg1SYIBhq8
+Tuw7xC6J8itStnZDyhsvfn5Pna1PaPbUqy4HUPRrtwkA7IkJnrxBgxb47FnCkRVbDYAkiAFIop+u
+zpWCwtcCH2Yl728f84L/vnXu93vNZx1n7XcFgC9/vabk6J0GDFrezx1n5ryEHXt/3p1JEElzB169
+uXHCGok/7DnQLg6LWVMV1QvocR3KThEBigoYHa/H4ca0lc1hxoABGRgxOhdd8hKQmGw7qH3LbxFp
+MAIBDeQPoN5Vg2+/r8bOnbWcKHQ4pEbrS4Jc2aCRIoiICCENCGkMRZHw1AFBre2MPp0lthcC/csM
+dO4cFrBw1Uts2BpAKBTOQLVnZEQElNfq+HSNhNOqgAjwBiUagvJAcCVA6BJrQQ+nQ9qgMkDQDEm7
+qgOiUHoQ6oBpNJnhg5VDR9h9B/jVA6ytT07s9sqi8r+WoIstc+K1f33rzVn/zSfSAGDbNv5y7im9
+172xaOdz29esv3bq3CXLAOxpWlcoqiH85fY9X71+9T9u67MWwOJftPFEIGf36uvuenppwYW5gdZf
+1+1dgndG/b4urP/vJMTYRK3LlVJn94bUhKM8IH8EjJ3zbC0z3wGAiEjisqM3lfiPwVBuaKiNddXY
+M0OGZvo1W0JEOoBXmPm1phfCKL8ywhRQhOJnII5YImx7cxCYcSh1WMwMq9WE7NxEjDs+D4OHZsHu
+ODIBz18SyYDfp8HrDkD6QrxrZzVWrCilXAMy0w6xfY8Lu2sDJIjgMAt0SjIjyanyfleIAppESa2G
+hSs96FlB2FzCKKmSEETMDAL9GGwV7Qti/v8syB8YnkG5pVDD+rUMyWE9MbNC0AyGjGDKTQR4NQlv
+SLb4GxAOsbLjLHxieiIS1LA0PRuA4RHokmTl1V4FaxvqSSN50Ju61WpyO2z2oxZg/eo1WO+8tfa4
+qiD1dvSa8NlD/5j1YVNwBQBEZNx9df/F/XslfWJ2be8MWdm76TsDBlFMF8+Q3n2Xmn1bUjYteG3O
+JV9x2i9/BFIg2XLQfnzqynG5nc0pd+SNmT112UePdztzeOcLM63muxPSet123MUPT361nB286jnT
+45dPGjsw3XljjD1xbt7QaXMuffDdvq3ry6qWvOgsuGjCxCHZiTckWmPmZvQYc/0pN/9r3KcRajD2
+fHRN2hWTes7MjbHeERubeVef48+96NoPtua03ubOTwtir58x4pQeKXG3xNoT52bnT73i/Ifeyl/F
+fOBBteq5afazuzsuzMo/9eIZn3PiwY6Xmemrf16ed9bxfS/IjbHeGRufeVefE8678Ib3tmQ37ZuZ
+1ZM7J5+S5Oxx63VvLM57/MoJ+SO7ZVwbb4+dmzd08pxLn36/R3u1dW32t/9x28OXHn/swKzkG2Nj
+kgt6jz3zkiteWX5g/WfmHJc+JFncILJPumH0TV8cqL3jeX3Ml4xOOl1VE++desacaVOyY67oesY/
+b6z1+zP8dTuy7hmYdbMpe8aVM27+Mq5pnQVPnZ97xshuF6Xa7Xendhl809TrHxv/SDkfyP0v+/fF
+if0dsdeldpt0/qK9m9Ovmz54Wrck522x8Z3vHDpt9sx/btiX0Lr9az8oiL/2jGGn9kiKuzU2Jnlu
+3tDpcy58+O3Bzfv/o4tGOyfE0ZWJ/SZe3uNRdzKabEoZsFvY9PS1U0eOyEm8Lt5qvydnyEmXX/7P
+z3p2pP+Ymd69/4xeUwbnzEq22wsyeoy4fvqtL4z9qZqe9qhdVBB/x8z8KX2SHLfGxiQX5A2dNufi
+Zxf0Y2bRtL/zhnUem2hOnnvspU8Mbd5GXjQjZmTXpAtUx/E3XfH08qRmbRSvF8zoM2lQzuxUq7Ug
+Ia3PbSPPuWXGI0t3pTKzuLy3/eSM+F5z1+9zjdb1atPXT9/8F5E45M4uk57u27xti1+6PO+8cb0v
+SLdb70pJSrtj3MzrZt733qqM5ss8e+1xOZ3NKXfkjpk1bemnT3adMTTnL03X6uiLHjzp1XJ2MD9n
+emLO5DFN12pu/tQrLr7v7ebHKC5IU6Ynp3a5tdd13/bneVCuHWE7XRW4D8D9rT73QaTd1330DROY
++cBTn/fPsz1xzZRxI7unXZNstc5Nzcm/acKchye+2uxca06vLSsyzxudfW6W3XxXQkru7SfOvm9S
+e8u2puaHgti/njF0Wo+kuNti4zPvGjL9snNu+qIoYo3q75WktFiv3a7WgBls6B17cYqQ6FOIYFYV
+bvoojY/rzE5xmHbGAFw6ZyRGHZv3uwmufH4D5btd2PT5Trzz+jp+8Zkf8Pozq/DBGxuwblMZvt1T
+Qwt213OZRwdReFinTxcLZo520IwxVspNMTEA6MxYucuP1xb6sGFngPO6qZhwvAmjB5nZaRUHupJZ
+YvtOP/77oY55H+hYu5LBBpCbasKJY0w86QQTjs23IC028vsjIRxUNX2aSLGpGJflpJTY8KAkGwAH
+w8ktOxEdI5yUSbaD9gUzYFZVn82i+I+8Z8P8qm/BzGyZ1i25b0NIteSMGP/DzFTytFnoxHlux0N9
+73M65X8CFvVA9oqkQWxO0GMGnfrmsf651V/uXjT5u6fmnsHMzze+Qf4yxwAha/Z6D/qqIyTlSARv
+oZJlOy6/8fO68kpXrls3YhVPsXXV/H+73LvXvbg0sFj5cp9venVdIFUzQhbXzqXK2y80bFqxI3QT
+gCUA8MEtk3POPO+Gudu96lhDg4lVokDFFsvi/zxYv31T4QuP7+cnr+9MfgB498p++edf+/Ide91i
+WIMhVGn4ZPmGr+iVG4u2fPX19Q8w81dEJBc/OKPLNbOeuGudnyb5gjApMijrd/+gfvL4nppVS3Y/
+9STzi1cTBRu81sw9dfImNzeYt378xVYAyyL2B89Trj0u+/QF2z03uHTqZJAVpHnU8nUL1FduKVy3
+YtHsAgBLgUIVQk5lw3fO1n/f23PB1rV9Sj3eTgHdcFTvWCneuc+zvqbefg2ANQfr2z0vnJI245QH
+rlteLM9sCBgxhsGo2vItvXnXnj1LV93yN2b+tOjNc4MLlyT22rZn3fmlu9baC5gfKCDSX1sYM2D5
+5l0PmbNGajGduq0xl6WMsO+pHebSPbESPum0JByXmWNPiOlk+S/zIvWpcy496Zq/zb/ZpaldfWwi
+pXav+P71J7zr1ha+c/Hn9Q++ODnOxaqSANavUEJVvgfOOG/K9v2Fg6o9gUQpqq3bl8zX/na2+82C
+VTy3IJ+qAeDbe2fk3nr1E3dv8NOJviBURfdL165l6geP7qxa8X3hE/OYX5lJFNJVEcPAbIYIxSih
+rwHUhDtcV7e9848Lt9Xsia+p96UFDMNeu3slvf1gweatO8pvA/BNu+cuF5jvO73rjP8sc11bH1Ky
+/GwivWIHfffS39zr1he+UrCZnyjoG+GabIfl947LPf+KJ+5YU4EJXj9bDdZk7Z7l4v37ioq//r7k
+8XnM8wDoRMoYZtxBQpYBWHVgA4rFCfDZAA8EQh8CqGGep9w9sdfp768tu7lMiiyDTBKeYrH9i9fw
+8PJ1S9ff+Og9WTldeqX7qifvr/ZkScOnKhyf361zTEZqZ2VxUeM5+dyFd06Ydcfbt9cEubuXTSCf
+hzZ/85a+ec3yjaNm/Wvusudmfw8AikHZjODNVPL9rjnXLnCVV1blNV2r6z95sfaxnetf/EFfRp/v
+806vrg+kaXrI4tq1TJn3kmfzyp3aTQhn0QWEmEoGzoTgPcjDNotQxjkd9jOatBAlg00qqT6PLyUo
+LALCEgCwCAB+eOKUtJOPm33bOreYounSaqgm6K7d1tXvPunbtXXvf2+et/u+h2Z2rQcAEMlgdWHf
+Oy/4yxO1Va6cWs1wCm+lddV7L9bt2rjnxYK1/PeCQVTX3m/29b2je844/8lbttWJ8Z4AmSV7ad/S
+j+S/t+9ePerOb+Yuu/e4lR39/X/LZKY56q1WpRJAY9Dd3mBU47eG1uZLUlQ2KwIqgUmCIAF7jB29
+h6Xh2BO7oVN2Akzqbybp3QYGQxoMza+jqsaPNcuLsH9bHfc1VOx3ufn76nqKdyjcy2HjMoUFg2FT
+CEM72VEDBUt3+9gfNEgYAookmG0G7Ka2ndg310zTTrEgKUWSFiQ45iv4epUfxgGrHsDQJQyEf4WM
+TMK0qSbk5ikkNABuFX2ygHe+akCVp2OP8k5OM1IVC4xgY3MkIEPhAEsagFVXkEsOlLK/XaNnALDZ
+lfLMzvaGQ+3b9vh1M1j1t9rrFUr1wal3TzVHrHUhIn7tqy1FJfu2fb/w9uktCs4JkrZ6u5See2Lf
+x7K5rHbv6q+vGX3j50N/mcYjHPLWbkn7z91jJgKY8ONHnWhzjh1dMH+VHQCIhST2hopd3s6UN+mH
+/DMvnTLx5KkDb5qYelV6cA9tWfL+ze/vTzmr8/GXPt1z3JShV587Ydhpefq/lf0/DK4qWfvn89ez
+g3mz+fNFa+Zs9ydMM/U+//0BZ199bFpW7DF3nBT/p66ytLZk+cdXfvL6mpEAsPD2Ezq9tGDv3evq
+Ukaljzj/6bEnnTp0cH7/QeeM6XJLQvWarkVfvnbPmDtXdWdmevXVr89dW8NnqX1P+3ToOVeNTUsS
+/Wcfm3Z5emgP71n0XsFnd302AgBSs1LK+40e+UzvIYOeGnrcgJ3tdckrVz7ba11Rw+1llgGxOVPv
+uCqhW+7g00/sOeyC3vrjomjNyD1rFs3+y1qOB3IYRHowUOFYutuTH3vcnBcGnnnW6NsvGTdySpb+
+NtdtzP/6qxV/3szc7qsgf3qV5e8vfn/1V7vFLKPrKUsGnnvjiUOH9xh41TD1+uT6zZ0KP3vhthMf
+29U7+9w3ay8en/HkMXF1q6uWvXPBl3O/yedPzknzwGbSAAAgAElEQVT45LuN1+yRnZIy+05++q1/
+XPeJNSlx1mNzxv0p1encZU/ov21qwTNnd7GUXfLy1eOq3jx3zqjnF5Y/WGzqk5Q19aZrc0blH3Pr
+9MwJo+KrVrpXvTdr2RtvnM3MZJYKg0LBqsrCnhtkV3vPs26bM2D0pEH3/6n3qX3Vir01VVvOevnv
+b4wNnz6svvLGwgvW1dIZlv4zPhx+1uVj8hLjBlw6OvmqtNAedddX797z+gOLhgKAoSoMhg5mScaP
+9Ta67jEXVwe72Idf9PKIcy8de+H5Jw0/rUfss+aqjT1XfvLJXdfNr+7UXv+9cPobE1/+tupvlTFD
+kHvqzZdm5A/of+vktOmDLeW7a5a9ee37z8yb1tFLoXLenJhn3lt/43fFttNj+k7/6MTzLh/XtXv2
+gEsm97koS9utVC168e6/XTp/DBFJMlgHEGLili8mhsoADAI03ZAMAB/e9HLO16sLb99v6erscdrN
+VzkSO/W/dPrAsSdkBN4NFK2Y9tUzj12d/eA3r/3rulET++UkvWu2ZPkGz7zp1qH9sk5WsyqWAPg/
+9s47vKoqa+PvOufcnt4LoYTeawSkCCgiiAooqBRBLDAyMGIDxxmNOoNtREVRYFRABQUUlKaiEnoN
+vQWSQBLS+83t95T1/XGTkJAQcEZk5pv8nofnIfe0vfdp66y91rvw5eQXb/rnj9mvZWrN4uKGPPJi
+51vv6DlqZN+EEZ2D39MXHO969McN79z/zxPtAYBQda/a4oQWQw/2Gv/YiAF33trtuaGRM6I9F/js
+3nXPrc4MfTB24NSPWt867KZpE4bedG9rdYl4cW/34uwjU8aeYj8ArGlQGdCISaNekE16018sgVJX
+f0HqwoLU5aY+nbo90jvyhQCjqcyvVdfdTe68bz0RKcwsrFp7ZOJJu3GS1vzeXV0nz7ndEhTY9YV7
+okd21helFB3a/Oj2QynDfAOmB0Hm8rKSuBJLt/zuE1+Y0G3ALV1njUmY2JrycnJP7Zm56tW3q85h
+HXfM2cS7whZ+efLF/UUB9xh6TPo84f6Hb77nlnY9J7V3zzdm7+uXvvnjZ0av5YhrvQb+k2nfPcQm
+GIQCAvn0rhSZUG/wc+Ub+fJlggidJEIUfFGMgiggrlUw3T2hM+6b1APNW4b8xxpXqqKhotSFokP5
+2Lk2FSve3svvvbIVP32bgotnirAzrRhHK6yCV1OoiUWiDkEWCjPoACZEmvTUNsyANsFG6Csz/U5c
+dGPjIQc27FNwJle+5J0CoBMJ7ZvrERMuQJAEGC2EDu0kGPT1BzWLgoAerc1o00oHSUeQWIRBT2gV
+T2jX3OCr63gNBJBJE3U+z5UPAok+hXyfNhcQwHqIDTj1CYCgF/Lado+ruNaxvRo3No4jrVQUiXUg
+s6ITRc+/sguvomLs4hf27jj5x0UlR5P/mrbjq5nz9lecAwJKf+vm1oFlVi9u6WMD1tdeoIEFPud2
+me4EkEYiEyAIIW0TdvRKXPTex32oAAC+XT1odWZuab9lBzElpOddq+5dkbh8FpHnIIC197f89FxB
+1tD9uUWdCzeeCUCXA2XnOXSvf4tWp0fNef6Ht+6MyAeAp1PwyzNdjJsycspnHz1wrCuArYfTc285
+mGUaHNxrxLL7ly14f0442QBgB89c6R1a1PTb0xmPU3FyB6BX9kWPEO+Av3bz3VM3/fB0/1QAeC37
+5HdFt/XRGQuUW3WBBgaAjuM+tAP4ANiK/av+ccUhKdMZHMXGmCWdEgafeW/pk7t60Ww57Qjw5QOd
+vjiTfmrsttKSrj//83AYFvbIAgOSIcAVNujRRXuXP/wJEWnbAOx4tu3y/Z8WDC04e7LDuXKYAdQ7
+J/7z3mMdfj5hG4+o/id6THvj7xsfjkgFgKSkxFW2l95ttfBo5tOpm1b0B3B6xPzjJ0+ltFqQuzt9
+ftqGj2c9f+TssR05+mHGdkM2Tnx57mryTU3Lr07tWSEQqSSISpNewyoWP3KHg/kty9i2r9930ebX
+LG78o08e+vjhNUTPaXOBgh+mt/lH2jf5nS7s3H7fO3vv+rKfKjM0CMaItqnNx8ydt+XFXvsBYA8n
+5rnuzv7qyM/Wv+Hc8XhfD9abstxivBMmufuYxzZ9PzMhDQCSc1Z8U3zbczpLIQZK/g3fooLOIkcN
+efTj9774w4eDKz23nD7ntXtu+zB6e+nBkd//cnAggC9rbuNSwJz+eOCIQV89WOgNDWg9atbTB96+
+ZyMAzAGKVk9s+nbq5vJPzv+0eUwS84bBdHUv1oEjyd23p2K0Lq7/riEvLXt90a2UAwDHjvGm4PHt
+Qz/YXvIa5x/sxsy7Jic0v9ruqrELQmSWXYjzi2+9ddg7c5MSP3m+5K2VKSWbFzz6evHi3YqzmZCb
+7IhUpv9ptNPwyWEPSIAhOMKx4r0VFQDAvNQ4scef704r8W8Xe+/Uv7y1cuang4mUvQCYV7//aI9p
+IevOH3xix/rto5k55eNZg8AQhOA2N+3s+MKS974YSHkA8ONnt6/Jyi/pt/QATw3qMWLN2C9fXTqL
+yHMIwOqxTT9NzXUO3ZtX1Llk3bFAdOhaZ4ohcVtRrTGcFKn0/OCH3OkVlo7OFoOmvJ40t8cx35JD
+4gUEnjDERj5/15PTflg4oUcmADz7Ofa/2Mtv7XlHee9TJ1J7AVgNeMFMon/TbkfaP/qPxE1PxJ4F
+gL1Azltj2sslP55fVliQds+dK3gjAOvlbdp0Jr3fgTT5Tku3QRuHzJ7/9id3UCkA8ILei3Otpzt/
+e/7c8Mx1izoB2HrNJ+w/FE3TVIMoaKJAPk+KpoI1lSBIIKFSI4s1MHO9GlgCGBKBoQFGQRK6DWyC
+wUNbIyrWH6J4wyNt6sXpUpBxthinjuZBy5URfU7FQXsZTohlJIDQngLQPSgApxQHX7ApxADOl3tQ
+5ixDgdsDgYALFW7efA5wil44XD6vnkNRcSjTjegQCW2b65Ger6HC5gUBUDQg185wyICh8tFltWpQ
+1bpB7wzAIADBfgSBAbYLEDyCT1xUAkKDBeh1BKf36upUXlZIcREEAjQPgeVKDxYArdIZ6SYVDeW2
+SYIAnST8pjGTN9bAsrh9o861VXbz5rUKn/JZwZwfU2y9CL4vQVHv7+0+fdGSg++NX5/9zrjqdUVo
+RDROPfq3IStSMg/025Oy9c6P3lux8/kV/DEQDeA66oyQjsS4W/aZbcdes5UX1AhyF0AaOYwmVy4A
++IRhBdJLXDqoN1wfV6029kGP4Z/pOYIkyUE68ewsomojs0Oc4jCapArNWhEsOvP0RA+7AazbsLiV
+ed+PT/eYOHH8/SVFJRHMTLvTj/R1KKyT7HYTM4S5/S8k2PzaKAZL671VxhUAEL3veWLKoMUR+eU/
+mQL0GQBcbUJw8kRh+X0HP3xp9qhpcy3+zuJ9g2e8XLT0533fNvcZjl565tqHZPa7P2Qw80cfzLkn
+etmMqWNGjbq7tdPpMi/Pc/ilO8VI1aLYVVtpdWyRKOrcnXt3OFczGLh1x+blhEInZJvRVoIrerCy
+Us72yBMDQtkY9738y3Q7gFAA1OTut3l0/yYpAc5cktSC9nuYTUTk4lMLN6U+/FLvNSe/m7LkLA3z
+BiVc7D5i8rtV03WXQSr5/M0pz38SXqq6u1VYOhR3dKaeIqJgVOpwHBbjyk2cn6OvSIk/XkBNBytK
+OQRRsBil3Fsf6Zm778Wq3b3E5pBVhaRWQNBcpsp4HUe7UD5xuqTsnoML/vz0mGlzA4y2on2DZ2wv
+Wfrzga+bA98AkGnmlcdbIJ3csmXY+cE1psWp5RvWBbcH7tudrNyTm5xcOSVy6fvFHQjt+HvfxxVC
+7ejwb5sbUrInFUBY5WI+H9Q83085XFRhT41ftwPRAK7osaziwvGUbhWGADMHdUuuMq4Anwf6ncRR
+30WeTD9niRAL8CuFZgJB2a3C+cy+1IMDvh7z6JwZzzz/9amzGekpvaaWJM385/MAmIjcH/NqE9dT
+WffM7MRgq7M0wRbYryQhLGZrrXGica6kuZ1++H5R7kOOEzt7pmGGv6YqDAhkkrhswAA4v6haedK9
+XuMXKTmiKMohopRS817t3FJwGo+KFZrNHiaVF1w1+ObAmwlRr/3z+NwUV3i7preNeunrD8f81PGj
+qjb1kgFsObW6vX7N3je7TJ48aWRhYWE0IND2jFNdKrxWvWJ3mphZ+O7VUQAkspik/NF/iClNeuLS
+MfpHuE79FMGpP+cUdLQm/xKM8bfWmSYsK8nrk6+P0kWR/5GjL7QVUHkNjFhTQhZdwBmzPeM+kVzt
+mHnbf3uwfmCgV/YzC4WiJCqqrFx672kKmCujea748iUIosgCGP5BBho4qCVuvjUegUH/eXJyHo+C
+4gInUk4XQEl2QDjvRVZZEbIlFwKhR5HghgCCDgJc0FCmKXCpKjGAcLOE9v4BWr7TSy6vL8jcwQpl
+2t2sJ5/MggJfQHpEoICRff3RvIkOZzMUbN5lRaFdAcA4dMqJQJMJreJE5BWp2HnAA49Sd2wJgEcD
+yuyAaBer7VoCweMQUFbqhiI3HJReRY7dTZ4QP5hFAZoHQKVJobgIqoegeIEszQH5CpcxA5B0otff
+n4qAjN8sxOjGGljtOig6/OCQ4BQdslxdwdoSGsiiUEgSoNNLoqQTqJmbOYqALVfaVbe/bM1Z/lDr
+9zPXZ3bL27Xij8PntjsxjEirfVozLv33t+g5ERDcoWDKswt/fH9W6xoeOAUu204k3tWr1uoMkOMy
+Y5w1YoIAvmxi2KsyAUysqaRXfab48kd7dJn//okXTuSrCaKOi5z2cruqamqA4I1RKRySKDDwuGiz
+fhxCZoNTadq67PImf7hsWz6A/JMnHwG9+Qh2fjj+s/wv9hl3pxy6N/m7Y3+3OmAIbtH59OjbH90Y
+1bP/d9+/NuVXyUxcSBxkfHpEu/Hrj9lnWllvVGVbkdvp9OiI9aKqmAhUa36bAWiKXOsTkBQmhkYC
+qeRpoBx9bo4tij1eve3sV5O3nZPvM+h8J7XY7cInW9N0DPgF6DxBWwAdABd1nGH/6qnBy4+n7rhr
+f0VQ8y6jx6ya+dKAYzsTG+7T2XS7v+zyhHDJwbjkr/dvMOik6nP18sc7SNA4SB9sK6iwagEwusuh
+gTUwKeWXn2v2qXtIigBfNqC6Z/7YT/NWJxv2nE0efeC7I69ZnWQIju98ctTQRzfE9Ru4fkPiQxev
+Nuascp1P6NgWIUV80KWhtNCfmYX3b2tdvczfDzh1vjxIc7sDtZIdcTtXbN1q0F3SBnpxyV5B1LQQ
+c5A9pbDcedXK8sxML99sCCZdsIpmLYqwr/by2YnflgPYixMngE9eEn9NYMJdr2+4eDKv37Ml21Jn
+F534buTqQ+p4ryG0ouCFBTu/1H+5+pblC/b61jTVe52cL2ST1yUHC6GhJTladB2vdkSnroXQsp2C
+Whiyw4nqvmoa4Lz8XmVNA0nQNKr9WHEDYBBr2lV7xhdXm/5w/6xpSXmWYQG97vpixFN/WdqRqJaH
+9qvHe7ac88aBOfszlKFkFEtcFWUVqqoqfoIc5WGTINSabWFmjcl+mY+xT89Il7SrtIQLrHFGT3Gd
+hAVOGiT9cfaeKHbZjXmH//liIZQ5VffP1n2ZEASYmHRGTaeFbPOFkvxXG1hAuMvrFbNEQVCYIdXK
+ULuqagWDVRVRzULptjtaU/eEWBiMNzRRtQ5eWUVBmg0XDxch7VAuHywqonaOALRV/WHUSbAKMkrh
+hQCgCfzQFv7IhQs7bSXk1Hz2RLfAAL4pzJ/O2px00e2Ey8toGWbA0Fb+pBcE/Jhmxck8N5iB0ABC
+y1gBRqOI+BhGZLCEQrviM8psGn7Y4YROB8iV8g06kXzFmC8LTlc0DSdOe9EuVkLreAEAwWkTkJbm
+xulMD+RrVBTJdXmxs7gcA0KCYGDJZ6xVBhxoKnBadiJTdF458o4BURS8mqK7CDT//yLTMMcRizcz
+/AWPcOh4Tidm3kBEHDDtUDGAZwCwLCu6+zvGvvBLWsVcBQ1/RT00Z8KOg6ffX7Ly+KkXjiR9Nb1P
+y+gcoLDGGWquScyKwEReT/1992qioGnX/gogaEJoC8u/7SZjQbiiIWFnSeMjTwaNHLvsueSikFta
+3DL+7RkPj1k7pFNhdutWw72vDzfPfOUQvexUNQLOsSRCZkWT2Ga96lNgwBMry5j5zf0r5qz4euOe
+hO/2pncwlh3uVXD+yF+zsoqGT23e/ikAp6+1H9+nW3tv2puXWBTSK+22Bx5545UJ3Q6uWdOhfISj
+Y8Sb68988a3Cv0JFuuHTIEmskN5PMfq33eXnPrNbq/GxowEMTSOjWXespNJ9w8zCvBFNuuZ4EKJj
+h1CYcqDb6W1jggHU58G61ArJqZEAjULa5gXoylbAXW4Hah5Lg8msq4BOyhScugYbzQCoxgv65qfW
+lDLzvINfPf3Zym/2J2w6eL6DsSQ5oSDtyMs5OcV3PB7f7ikA5xociHpwuTx6AhMEsc4TyqGCJZ2i
+kiBoQljHjADO+YplR62HiqZp8LfoiiTl6oKkRMR/76eXWWOBndZ/KfuwoX0D2Htxz/yj238+1Gn5
++gM90vPL20un1g857Wlyt+cPL85byrwEWFPvk9gEWRUEUgBIOpNU99xYHXoAImDwBpuhFP2Wjb8M
+ZhaeG95m1PfH7X9QYoceaDty+nvvDq4dgM682PxApxee2J1puC+0930fTZ485osprXQZcTff7Fp4
+d8ADiXuFBYV1Z1vqUFxYIbCq6UGChvqcwEXbWCSdKpgjXMbAqE0m+9nTKoTq8dEAFkWBDUZpx/b/
+euPKl5G+5K09GQa9aHe62fhrS6LExQXSyHs7oUv3aFz5Sf374/GqyMuuwNF92XBvs8KvEDAKIEFH
+fFZXQcWiB8WCG1Vhm3qIiFctaGcywcyETNlRvSzN5oZBJMpxKOxWmIiAMKOOww16kiUVRgNVF2Eu
+szHO5yqIjiBk5SkorpHnReRTX5fdQESAhC5tdQgOI5QWg0+ky1RUVi0UAIGA7GIZ3/ziRLdsHcxG
+EfklKk6cc6OogRqFl6Mx42SpA7KL0N7PDD9Nz2QVyaEqyIITp8QKuKA0lNYAo0Gy6TQx/bf01t5Q
+A4uIlC/ub7Z/e0GJNX/PxmF/XDt0BVAtzFn1wNSESgFR4Spp59Qx0fvL30YuSytLujkp5fu7vynw
+XtS0Sw9VIvI+Fu9XIok6MeXw6bbMTJUP8GoKVDGyzMbB/m38T/g361RH2+pG4JUDOeOn3c1T7egu
++3c9m/jG3E/HtA8oqVpecbPJyNVGYZIaHhNxQUivsJgKzzW7vI8fzP9rx9MX3AnRfYbuvt2UXHow
+pazvtAWbHOj3xq4lE2kdgHW5G54Om/3ERy/9nLXjkYNH7h+KazSwmBOFv436uM8FJSK0WdO+876Z
+N+HHb+b5lt38x7aCxwsjBF82zm8xLk1ahGXRMVUxRw84VZC873WqIfFRRemGxThBiwEA217o1+Hr
+I9ZZFQGdM29tbf8lOfWXIYv+8flkZn6vTuapBhbZF3/Wr1sT67uHzucLcpTf4NnvfLpmzpCzdRpT
+fhZrJ8Tg+U+nxl9j8zlp8dNhJ4qkvo+//31FbOe3d7/7Na0FsDZt7TMRz/3pg1e2Ze6atP9A5q1o
+0MBikhWxloHPzPSnTv7tmAJEMb59LhFpC4a3utS1ItDNXaNLhENFxZIWZ5g4/+OP3hnXLefyPZdW
+HELGvdemPt2sZUSmeMJLnJXSnJkNVGMK7csv/xa3d1fZkMA2nU8COCYoLIuQ4SaDHpVTrQAAsYKA
+2t64je893XObLarpy2kjjn784lMHARxkTtYtvH9S3yXrUz7POXvwgc+XezZNmeyXXbVNTRHhIXe2
+rHj/pPMCXUgbGug42xRALd3PXb/s7aAKYoAW3CZrNFDxsXj9IpVXPhrf65ejuc8W6bs4u942/rWk
+OV3rXEfWjz6PuuBUEmyWHgWzHpq0+K8P9cr6a+WyUhv0rHGdjzmNBNHurP01sma/Fl5a5G6ui4rM
+t0W0rJMVReOgJt4RlEHpfghpe+/2jF/+vLi+NhctfBJ7Fj75L/b4P4uYKEtxSjpV4NJ0+DURFe2P
+Ufd1Rucukf8xxhUzoyzfhsz9hXxwTw6OXiyg1nIAWpM/HKRCgUZ2eFEueCCAIIHgDx0UMDJEJ0SZ
+UAA3vFAhgBCkF6GQQtsLy+H0MjF85X5SS9xkkgCAcKFQYSKfA6rYqmL9bgcHB0koKlaoyKbU8kwx
+A37+jNsGiejfyQTRCMguUPNoCd9sZbY6LkllaMw4n+9FRp4MnY7gVSu1wclngIkCgcFQqqcQ60fR
+gNN2BzIVFyyaDqJHgItUVJAXCmp/lVQ9IKjG3zodlcXEmX/T2O0bHp03Ye7De28KEjdLRQcSVs2b
+N/eRhXta1dSDKdr2XLjN5Y6WWSJJFK5q0t76l405t7ULXxAv5JWczMzvoDJqvX1uHxCx29/gLa7Y
+88WY4XO/7JfEPsFGZpZWJ97d6sDFvIcypThd82ZxP/70OK4S3EtgEtRTh8quuyyEYNbLelYVOPLC
+V6/Z1JSZiU+t1i+aNrTXpnN8u92jGXWixETEEdHx25siu8yaf2D0mDd2danax7EFE5r8uHTRMytW
+7X11y7bimKaZ6/2/++zTWStef2Nh1hef9aoa9+iRbaxBAVKRTtRUb9X4JCYKf3vq4bixc95tWjVm
+9bZTktw6b4XkqrgYv7mEAwBg//IZoRtOKHcezeaOBGKd9Ns8ppp3S9jfUipLc+VtH5kwfemIU6d8
+GYfMTPP/OKLzA2MnPTLwj5+1AICLHw8LeXftmVlp7tCWQbdMW/zaH/q/0MZkTXEc+frxwbM39q/a
+p2Y0qyZWFLDLmFnoNQJAyHPHCmL9/LcHVRyM2PPLD9OfeHNTVNX66xKnBM26/44Hhkx49fbVq+u+
+/K4EEWlBF38JXvvZx7NXvvHGB4d+XNW9avxbjvYrD/HTF+tEVfVAaNALqSoO45FtW0aOSlzXnJmJ
+mYV1swf12VqgDXdJYWV9hvbb7VvzkmPJqEKIfemDzOYmwx5T2d74dV989+iMD36u1p1a/fzY8Gn3
+j3zololvDmBmYd2T3YICTJF9IrtMalGl9XQ58d36HmghWS94S/bddtucdQOr9K3KV8wN3rrwo8c/
+X7XlrXU/FHYlIsVPdRdbRIeaeTqt98s/Ish3zlINr7x5oE+Z1d5OreExOb/nm16fz39v0eb333li
+xfHyYN/Y9ZJbR5gLLUbYmTTR7oUIRGhGsKzTnEK599JUH8bvLI/3C/wlUj0rnjy6c9oDf/s2znc8
+ph/nPdjusz3OCQ4K4xa3Dd9ClaW4rgcH3r49bvnO0rln3U1i24x89OU9H9xXb+B4oMWo6JhlwVEQ
+tP/gwXhmFpmTpNXP39Nh0zncWWLXAkmsKlzsyyIsKczr9uWsDwamVmqXVaydEXoov3zcKZt/s+gm
+0duHv9SlGPW8l8Jj4rc117LKSrN3TRr8zNe9q64/TkqUXpkybMCoB6ZPuvX5n0OZx4p9m4e205kT
+Eh5fvMF8vcboetP7Dl2arMpZ1+y9YiAiwo/HPZSALr1iIdbjAP29YQAOuxfntubi9N/OIvvLAiq+
+YIdLU5EiWpGkz0eyVAwnZBCo0rgS0IoDMEyORl8tDOXwYCcXIoWtkKEhWNLh9pBwvicyHJ3DzMyV
+3+MEoNghY1emHTsy7Ch1yjVnCJBXptCFbC95FQ16ieoMa5hZjzYxRggioHp85YpaRQARlrrPf4EA
+CAyvqoHAEAgIN+u4TzM/HpMQgGEd/NE6yAjzVc4BE8PmUZEvuylHcKKUfN67mgcUQQiADrFsQnPN
+DzFsRgD0gKakD7tf/5tWXrnhatDUPbE86bW7X89ftD342NlvJ2x452TnqDcKd0h6qTwsJMRy52PL
+u10sVgcIcT33B0eGHyAivjh/bIP7fHrj0u1n+kxYmnsk93mrUruw7X2vzdm7+czLC388dWzu3s9e
+W/LQmle+FwRTXvOYkOBgs9QvrcDcM6zbsBXRQ6eso8tK79REYxBYhZa7o+13ry95BnUz3SioxU0F
+wz/dv5m+6vdvuRz9yCY0nTEto/OSp7ZeTD01/YdP33wv6p9/3h5s1AL1HgwoU0xNNDDDXmJhZsLn
+Dx1JuXD+w6+Sd87euyT7g/DIZj8qznLv5Pk/9cstFfoH3dRzedTQB09EjY2uaLfmoXXnsg+9vO87
+93vR6+b9EBQUWty1xZ9b2q3ee+xhvS8ktGmx4xyArZHno7d9s/uDVJNDnz2343MATlzeTqJE7dMZ
+A3a2DTp49nR60iOP9O0WEhMbm/vEaxvbW0u0Pk69ToTHZQxUi00AwNcw1dEQ/Z/skvHgnsNvLfrl
+zLy09W/OH7L1nUFBpoCMFuGBQWaLaXgh2pniBmmpzJzx/G0x9x3Kke81tB7244THJnzd7dbppeN+
+3r4ge9OZRcd+WvHk2OUXU9dMjsvRB8eXtjR5srLsF25dPX3gc2Htxu6dtuT8qj+OiFtZ4jrbZfe+
+ZVPXZibFB4bG7DY4y5S/Lt/YvcQROEhs0/mL/O7Y3sKngtRgvxhMvpfZkoxOP7+6Lj03+aXdq+e/
+H/1V4o+hQaEl3Zq/39paId/jCuub1r9ts5113WU1xpwlzS97R+8DK08tCV00Y4+JPVIwqcMzHH7t
+ghKGLXh4VMfD318WJG+SQEQjPFvndP24+Ov09od3LP7TN2c3tA8MiUg2eWx4ddX23oWOkL7mzgnv
+Adjr0RluYubVkiouAzAHNSPmK+k7+4mM+7bteWfxzlOvHF354ttRK55f728JKhv0l2VdCos9d5ra
+Df4pZsS4pJPfP4cRfcIPHy+sOHbwwJrR//xTkmI0Gs91iu8XB1kbkm2jaJKoelqybafOWzrs3Dr6
+SNrmKU+PPRoZEhZ9RC8p+r9uSBl0Ro2KC7vpOtcAACAASURBVI7p9MHYxww5RL3k6d0jM/wFKw6t
+efvxwCZ9mrXuN3kzEZ288OagDTluV7ctJ9dNSCpODgwMjdkRFRYiRhv59myXXxe/Lnd+MmrcTT8e
+nV+jQ8K1idxeC8wQnhp4/OH96bY7pZj4jJLdC+LCQp59IjQ4gHyHAgX2ejAr8E+LfsLIQ3kdPrzr
+53OF527a891Hb8dsfHuLRZR1Fg39y52GeFXwKKKtzAJAguwFk14z2XMt3kMrXryl9ce3+Pv75/Z/
+bm3HwmzrXRTV70STVn1WJxK5X7pkGFf364lJpuT0jMD3ViXvfPbY1zmLIta8sCnIYCpqM+m9GLDp
+rjI/c16bOO8eoKWmCVtfJUJfQfO7A8DJ32psfk/CwzvkzZjy9UVRoAazyQCfA8Vs0mHwra2oc+dw
+NBDB8buhKirOnSnG3l2ZKN9ThgCnBA9pyBddxGB4oMKD2q8shs+giFKN8BdE6CQ9AlQdrOStvhD0
+AiHcLMFiAEJdZhbhIA0MA4noEGbmmGCBslwyp+S6Iau+6HECISZEx33b6CkiTI+sYgW7TjpRVsOT
+pWrEXqdImkaVwvgEj0rwqFcOhar6McIi4e6OgdQ0TAdmQDERuvkR9mY5eE+ujTx8ZV8LNfCXH3Ro
+pQWgiWqGkQUIAGQwyg0KF4nKcaL2JfgNueEGFgAMfn592qcv3P7klu0Zd58vyhqdUVz0CMvkX2YX
+HMbINsfDesa9FZUw7Nvv5956lp6v3IjgAsimQqvjPSIa7D7x9u1LM3OKE5LycQvjUhApxUxzJi1M
+/BCrVmamWyvGXcgoHKeHGpxvNzo5sv2R+HatngvsOvHbzQ9HNBx7IpAMVmxcdLiZ11dM+vILRgTo
+sObAYUCRwbCBye2pk0XFHiJUgLVa01sqCxoYDhDpBEljoocc+xJ7v638UlR2MPX8A9nFyp88kU3z
+Ilt1++7e2KIL+0/l3usMKOU8wBTz0OeO9DnxC2WJs45kZE9OtTlmyYKfUGxucSq6e8ILzW55cN2a
+cVRKAHjX1C8cf95dklaaPzElq/xRt0ewXNCHlkW2TvipVY8Hlhmb3nwYAEwuF1CS5W/zj9fJpogr
+Pp0evk88XlDa8slNx8v/cCIz9W6napaEkJZHmt7UZt4geXeLXUXcu0WU0wKAQOwCYCMNtc4hC6IG
+kB2Aw6BdOeuMKFHj1R3W2bhJ2e5018SzmTmjXZoWVIYwmxjVaWfLlj3/uW/Z5L1rZt3WftvRkskF
+gb1zeg4b9f5rtwWUvAagZMGEH/ed3rTyu6y9Yw5t/va+ROaFoUQVC8Z3/jB3X174mZwT94jxzVoo
+3ryNvf924ELSk+3mWJLV46nZ5+/JdLjmuEQzSnQtU0O6dH57wBOjVs5qTZ69S6drYNgFkJP1tWNX
+BIIXBBvIZ6AQTZN584TljjcOFacW50w4l2V93OGVzBcMoaXRbXpvbtVj/LLOM3sd+2YWYPCKDMAB
+QFGIK+txkkfUR+b1GTR4vvvM5nbnSssfyitXwlyxbS7E9bsp8bbxg5eNqxSeJVXWANgZ5BQU35gO
+eePYqa8fb/PkypPapHNZ5+/MdriHOfR+imRscyaibZeX75330BoiUlbN7mEASaKq6hVcIR6HaLDC
+C1p9ZWNDye7zxVPOZVVMZc1gzBeiL4Td3Hl+TP9Hvtwys/kFABi+6OTZg3nd/mI4XzTzSOrJu1jw
+l4rFpmndOzf9Sji8rU9KmdaUyZdIcPtf1mek5fWdHZBcNPFcXvrIizb33U7JrAoBHc61GNhtruGW
+mWufJXIAwNA+TTfmUG63HWcPjVQCu8YrJJ8CcLLFc9vyTyUmvEpJ5WfPXcy+P8PpeNZOeqEsotWx
+pj0S5g4b1v+bxD6hPlkHElUwbABc5lr3ah4zC14i2HDZVLSmeTUADhCZJFY0ACwIcENlG0NV8PIg
+fX7unk52TfNw9vEolyQ8S3TpecGaJui8ri3NNOwj6lWQOq/7x7IlwLXnXPaUCznuJ+zBMWXRrbpt
+ur2395P01DN35/mVer8th1kWvSrI6Axt0nPnLe1c+08eOXf/edk1PjXfKEd3uXVjizYJH+x6/94j
+9EH1BegGYGNABgAavM1d9EbbxV5D8MUTWcUTzmaVP+ImyVSsRRSHt+zyfYdufT7d8daIdEycFCEK
+ml4jEzQFv5uI8/WgfZvI5GOnc+7zetUGZb0JQPvOUeg9sAV0uuuYiX6NOF0K9iSlI+mHVOQV2UAq
+oJckaNDgRV1jwwgR4WyChzSUwo0cwY0QVY9S1YOyGsYVAJTJCvZZrQjXBJwu95BcqQEW7afDLTEB
+CA5lxHsVsjlUXCj1fVvpRULPZkbq1cIA0ayiabQO1nIDdqdUZmsRUFiu0JEUmf0tRjLqBcgeFWdS
+VRTZGi6iLQhA344mNA3XQXGRT9uKAMnA6BBkRqbdjXSr+qu/zo0Q0UUNRivFAhUMd+WLhxgIFfWF
+0f0jduODq+7mV/EfYWABwNS/b7nInLT45Udf/3Ltuh3mCieL5sAINWHIKOec+bNtvYhkevMhAECT
+2WvcWITnREk0ieB6Lc7OT2+5OKMdpuySND+3V64VSDp4RqKdmdcsmTvuh89WJlnsVrtEAeFa5zse
+cUx+bXzF5UWj68PhZ96pQ+kQNKADIWmKNzAHxV59qaDphL6sepylqDnt+LhiUF/7kIi/8DhNtfpR
+HpSRraqWSQxNsJukQgDok7g/e/OCBW8UfT5/SX65VR/UupP3wcnzyl+aslyZNn7bmkIDK0t8OU1o
++cZ5KzOvfHnczZsLSo6aFQRQ215DnD8vn1de0zNH/T+1MfOaZbNHb/n7mh1+hRWaGB7bUu47drz1
+82cfchxdNAUA0LeiY177yO/vv2DyoxYvdSlJTqy/zzR4m8LMSeXThh66UH7Y3+sKpI63PeR4ZP4j
+Vvc/hhlL9lgsUrjBBsCrqsrfSDW+o2exVpB5lFyYqpA0ilnQjC3R4BcFjTvtZeaf1rw8bs97XyYF
+FDrtkiWkpXrLmOcrPp3T30YrX8H8sX0vFJZ4H9QntPTuMwyvPlborBUVU+9u+2fD6bP/kASPIxG+
+J9XMNvduPZm78mhGud4U6B/gtUXmFgPA4HdTMpIXL35z+beLlhQWpBjLDAa07TncNejxl8oTB/ti
+uNyZUdkSxLtY1qvm7EttJyJeOLbDeibsgqpaq84BjVhRwcxfvTt79PcLP9vhV2jTxPCYePmW4feU
+L0mc6Dz80UQAgMcaUiypuFdiguQXVkxEPKpb84UahM90rQcXPNI6W/pg1d6/ldntuphWfTw3j51e
++v7UXtWGgL7EP5003K6DqjQNRPH+yt/vW3IuJXXBzFde2bj9vZwd54yKLoDbDh7hnHbL8+XjupPK
+zPT6rSEdyBLqphZdz9YX51bdx1lpHmbe9P6sETu+XLfN/2wJCRFdentmvPBo2bRevWqVwGLmbUum
+DT18IbfMX0MoxXTv6/5+9XRr7/a3+0slojGm1FtQNW4AzqQumPnKi98lLci/mGZQLf7cpudA1xOj
+/1E2btyla/nejw6eT5zQ+8kzBa4Xyyx+bIqOqo6n6Jh4MJ9Xr174zOdvrPwy77QJRjN6DBnqnPXB
+PGtN6QY3Gw5pOuFmzSu58oAasUsvqQo++4gIK73u2vdqYUhurqxYJjM0welvLiQi7ZEmeIU92tt6
+QS7FS9s87s/9/qiy1wSo8Mp1Hi+kKuwM8fiul9Z/PlKUnLx4oXXWwpVZxReNQbEdlEGT55YvfvwN
+z1OPxn+jq9AgB8FWlluYqkIcKpPZufSbjdY/j2m/cnW+y4zAaO474sGKFYkTK+iLxKox1x5pgtc1
+4H2joFaPS/icszZmXvPu7ME/Ll1z3O9cCQsh0R3l8RPfsyZOi3ECwJ6PkiM0j7eJrln8WTdFXc88
+gOtObHu/9cdO0WwAza+0DjMQGxWAu0d1REhIw+VVfg+KipzYuiUNO345B7vNAxJ803FOn51cJ7bI
+BAk3qaFoqprhIQ3JUgnShQrkkB0qGN7KbyQTJISRHl5J4xMlDtLKNSjqJc+tKDAgaAQI0CsiS3Qp
+yooAGHUEQROh2hmaQYbOlxtdPTXhVTRsPWKn7FwZTaN1KCxX+HSWh1zehid0LDqJm0gmUl2XtGA1
+haC6CGYQYo0mLd3q/lXztQSgpRaA5qoZKhgyMXQQfGNBgCYgq3VzU4NVQ/4Vbrzfs5FGGvmPpejL
+qTHjnvn2s5PBA7U7X136+LLRwRk3uk2N/H4ws/DMwCaPf53q/4J5xMwXTn/yxBf/zZpYCxakGooz
+0lZl5ZTec6VZQkkUeOQ9HenusZ1u+NRgZnopNm84jWNHcuFy1Q4kr4Iv+yuUjRiiRCFAEyGAcFKy
+Yp9UXBU3Dgagh4AeCEEXiwVKgKodKLfRaVcFcY29GUUBncLNaBFsQE65qh0qspFHqfI+ETo3N/Dg
+dhYKM0tIL3Xjh2NOzi+Vqb42VtpdVylQ5CPELPHELqEUbBJRqVAEr1UAfNvzwWKHllRQKl7rmWH4
+pgb7yeGI0YxwVZbCUCsD+SFAk3sa3g/9s+OZwTT4N/XQ/sd4sBpppJH/POz5550BXfusaNJifMrS
+UUGZy250gxr5nSHWNx1wIiYy4QVX5xHr/5uNKwCYObOV/PmSnK15BeIIr6zWSSBhBkJCLNSha8wN
+N67ysiuw7qvjfOJUHqkq12tcGSCiCVsQrOpRLsrIIjtcpKJA8MCkmeAQFBQKnmrjqno7FhErmOBn
+JEAQKdJPr6W5RNFdQ8rArWo4mu/EyUIXZGiCWktVkpGS5aESq4IAk4jCCgXlDrVe48q3OsGsE9jP
+IJBAQLlbY7dc/1ShzaOhqJy1IAME1U1gn36pT5hUARVVqL8y24DhzzoEQIKbNMhgiDVGgwQokZF0
+vD8GXbsuxDXSaGA10kgjV6TF7G3lzLyciDRaeKNb08jvDRGYecceAHv/240rwDdVunn14WPBwc6s
+gmJby3pCeBET44/IyGuTJ7le5OdUYO2qY3ziZB4pqs+6qPIuEXwBfAIILTR/tFX9oWMBqsYwSCLO
+CGU4IpbgomCCm1QugvMyu4d9wfHkRphihuxRUeDxkoxLcU1BBj3H+Utk1gnIqZCR66irvenVGFkl
+MgDFl/knUL3eKQKhRZSeb4m3UGRl6a+LhQrtSLcju8JbJ8hWVjXaftHGkhKiRRtJEEAQAHicwGmH
+W8uQL+/P1REAeMDQVbrQapRzhRTGNr9g6ezlkk2/BY0GViONNNIg/x9erI3861S+eH7zl8+NIiww
+4Hygf+n5ojKppcZqLSV3SSRu0jwEZovuhrmvyss92LTuNA4dzIbKDIEIgdDBX9NBJkYZeeCBCokE
++EMPiQkaGHoQwlgPAQQ7ZNh94ZK1+qEjERIEeKHgmFaOHKsbMlQqJDdplSacWRLQN9wfHQPMEAgo
+tWi8Oa+Ych21k4eNIiE+yIxgf4ntLg1pZS5yqHWDz4ONIoa0tlB8mB6al6B6CW0jRMgugTe5y+Hw
+KnXGOt/hFn7OKuO2IUYONYqkOgl5bpnPuO3kUORfeW4IVpLhIAWGy4tHM+ANMu4ujPK/ajmwf4VG
+A6uRRhpppJH/GRJub1mw+0DmHr0kDHZrkgTVFyzODEg6kaJi/aDT35jMQVlRkbwnC4eTs6ExkwBC
+LCxoofrBj3UAGBdFJ1LJp2FVQV54yQAdE7xglApe1Jd4TQAiYUYb2R9mSCgUXDgtWJGBCvgSun3r
+MTOC9DqONRkg+oTbEWwQKMwkItdxaX86kdAz3A8D4vxh9ifyeMEHigTsTLPDo9b+HvMzCAglPbw2
+oYbDkBBtMMBPktjuVep4pDQwcr1Oyi9wwSgSNEWAGwpV9eXXQPAlBOQLLgRoumrxTwUMMgFmP959
++80tG6zm8a9y45XTGmmkkUYaaeR3goi8MaEBu8xmfQ4u82iIAsF0A+sMFuTYsCfpPDucvik5AwQ0
+1SywsAQNDJEJzRQzAqGDyoxMsiFFqkCW5MQpyYpUstZrYBkhoZschFaqBU00I7pKAYjX/CFeJtpH
+IHhYJZtTBRSCSIQKRdNK7ZfcfMyARSeiTYQRJj+CojB0OqZuESZE+9f12agMyF5iVuDLCmSAVQIx
+qCEtRILP4HMqGmrGhvFl/64FBpAh2JEvuqsD7QUGyF9MrwjDzuvlpW/0YDXSSCONNPI/xbg/NNt3
++KninaKNml2KbGaIkghJujHeKwaQdbQElKeSSAS1Mhhb5EvVvRmAjgXoWAAR4IaKNLJWVlDmKxoc
+UqWiO8PnHRJUgpmlOtYNEVDqUrCn1AaHm9lkYcpwuYVC+VKRAwYgQWBRFaG4QJoqQBMZgibCVE8p
+1lKXyqkFXu4aaSTVQyAR8LqIz1ndbPfKV00lqLncSBICWAdjZdEMK3lhh1yvUXk5TihIEcvhpQCE
+awboBEKgWTs4dJrfCUy/6ub/Eo0GViONNNJII/9TEEXYP1u8//vdVs9I1esr1wQAmqpBVW9MyKHN
+6kHRSSuCnBIsej2s7IEHGqyCArPqM4Y0AsoEGTZSqj0xPtOiroFRc7kTCi5KLgTIEvQsoExRkKtz
+1Qr2rrlNlstJhW4PhHKGW2FwjfhvIsCmKpRZ7tWCYIFexyQ7BKS7nciuqCuT55JVSi6wkSYTRxgM
+DNKQ4XDRqTInubRrT9wLgQFtlUBEaUYY2GcsVpCMTNGBC4IdrmvQwC2HF6eEMgSSHlFmc3mPNiEb
+iTpepSTev06jgdVII4000sj/HO26h+48eaLojNuOvgAAIni9CsrLr1tJygZxZFrZkWGFKAhkYJEJ
+IAUa0oUKCAwEsQ5uqMgSHbBDbjAWyQARZojQs4AKkuGGhjNUhhKdGxboOB9OsqG2MaSDgBDSI1Aw
+cJnmoTLNCzdrdeQhCIBH1rCvoIKsipeaGixqkdcjHCu3UYWnfoX1fKcXP3tKySCIADFcikqyytcU
+UMUAwtiAPko4wjV9rbgmCxsQwBJIIpwRyq/Jk+WGCllwwxBoSI68M2IrZly9Df8qjQZWI4000kgj
+/3MkJLTMP70/b1NZmaO7V1aMBEBVGIXZFex1K6Q3/r6vR49bhcetQSOGE95q08PBXpwUSmGACBlq
+tRL7lfCHHh21YMQqBphZRL7owUnJinw4kO2rKkU1BT8ZvjIy3SgYnfR+MOhALk3DMYcDJ1AG+QrH
+sysKJRfacRgOUQPX0dqqCcOnq+WurmWIBo0rgi8eTKucJm2m+SFS09eJu9IAGFlAK9UPOYIT5XXL
+pNa7b5Ne5+jUKXhj+2bNrktwexWNQe6NNNJII438z0FEcpMYw5bwYMv5qhBujRk52eVks1/9Rf1b
+I4kEUQCK4Yb7svqCCjQ4IF/VuCIQotmMKMUAE4tgADGqAS1VPxhqVHW73LYJZSNaiWYYiQCFYBFE
+tNOZEQhDw41m35hdpXZ29TGr9LuEajWvS4hXsLiMEBEMfZ3fvWAo8AmH6lhAOBuv3ohKwkIsZ5s0
+lX5uqPTXb0GjB6uRRhpppJH/Sbp2bJGy/2j5HqGIOjAzmICs7HJkppUiNOz3FRu1NPEjZzMJF0/b
+68RGXSsEQAeBBYA8pEHPBBm+bMQrGTC+bQiaW4BmBCACrAB6QYBU29lVTTAZECuYERogcgV5KLtM
+QQm7G5yi00NADCxoQWYEkIhyRcUFwYlcOKBAq7Wtz1Pl+1uoDPSvQgaDwVDJlwnoJQ0qfMH/1zLl
+KAiEwFDDjn4dE85ffe1/j0YP1jXASUnS3x+6tUurUP97giJb3TPy9fVNb3SbGmmkkUYa+fcIbxdu
+Cw2xfGox689wpWaA1erGgT1ZcLt/88opDRIUYUHb/jEwBkjga3AJVRkhGi5lD2pg2Egmlbj6V5kY
+JeSF+wreLwZQSh6UwAuvQ4DsJKgyocitoKLGVGUVITBgoBCGgeZAdBX8qJ8WiiFiGMLI2EAWo4CO
+CMIQfSjaG8yIEY1obzBjoBKKzlow9BCu6JvzQoOHNGjwaVeplRUTCaj+XSVGiXANXkcGAvxMR4KC
+/JZRHLmuvsG/R6OBdRWYk3VPPzdx4pfbjiwvdHi+8tqtn9mt3sHMfA228vVjQ+Jd5jtCgmbHth41
+5QKz8Z0BzaIT/PByaJ/Jfxi0kP0AgE8l6md2M06I6TDomZHLnbEA8FjfljdH6fz/0fOhvw9m5ht6
+/n/PMWRm+r2ON+/Bnu2a6g1vNL99+gMLmA0A8NrAwCHxTVu91P/1/V1vVLv+v8DH3rLcHGx+Iiii
+44tjVpQ1u9HtaeS/m+mz++2NDDOv0+skFfDpPB09nov9e7KgqL+fgD0R4aabm2HYiPYIDW3Ye6aD
+gCiY0UYLQkctGHFsga5ShiEPDqSINpQIMkpFBRckB84LNqhXMGEIgB0yjoilSJHsyGUvTnudOEil
+cF6WmUcAWrI/YnR6QCYoDoLmJoRKEtoiAFI9JgUDCGcDOpI/dIoAxeOLdZPdBIMmIF61IKSB6T0Z
+GrIFJ8oFGR7SILDPaKwpzlAqeFGGqycnGA2SMzbKb+kjs3ofu+rKvwGNBtZV2Dp7audfssqeSnc0
+CWs15P5noiKD72ziR1uuR92iX4Nkz+6apg+aqTbt1aI54CG9EC4wHoMojHHpYQGAnLN6/4sl4mSP
+2/2nlL3bOwEAMXdl8J9YEHrh14vi/iYws/DBvD/1njp1xpN//WRt1+ttYGxY+pfWjz3yxJ+efX3R
+LUnM131anCA0B2OmoAlDSwEdM0upxeIIt0d++sKx04Or1mNeavzLszNGPjr9qT+8vysl5nq36/8N
+RjIxeCwJmKoTtegb3ZxG/vsZNCR+VViw5SjgkyFwOb34edMZpKcU/a7tsPjpMfTOdnhwcgK6d4+F
+wSBB02rHOAkgxLEfOilB6KgGop0SgK5KMFpqAdBBgBcaUgUr9ktF2CUW4KhQCivq1hKsWdtQA1BA
+LhwQi7FdKsA+sQiF9Th4RJAvtktD9b/KnSFU1UGs560ogBDKJtZ7RHjdgOwmKF6CpgAaA0ZNRADX
+Z5pdamcOOZAq2uEgFV6q8tr59MGKRA9SROvV49OIEB7md3D4qLabG1zxN6QxBusq/LItq4vVjaaG
+vuO/mPvWnH+O60je8y/ce0PbxMzSE92C7rFLrVw3jb9vAxHx/NvaMQMqNE0TDb47J7ZpaEWfEYPf
+13uahIeM7n8kbREg+BRrZeKrXI3XF+HAz1sGrd3veaGH2KYCU3H8eh7s9N7tHb/+Kv3lyN66RTPm
+Yh9wDYIp/w6aoAGQWfCJvBCRsviZe9d4c6UMYVj3LZ99Wbme1WX65btvx58qie5PfSYeBpB7Xdv1
+/wgiksFQNIEb6yQ28m8z4I62p1NSir8qsTo7eb2KgYiQk2PFT5tTOCTMTOGRfr9bW0wmCQm9Y9Gm
+fRj278rA7u3nkZdXAY/Hp30VKBg4VrWQDgJkMATyxR+1Vv1RRh7kkwsaGA4oAF0KLq8JgRDEBoSz
+AQYSUQw3SsgDL1R4KwPs6/vqVcFwsgqP3beUCBB9FXxgFZQrvlRUMCnM1XFgte5auroiuxsqzglW
+lApexKommCsD+EsFL7IEB2z1GJCXY9BJjtbtQld36hmXedWVfyMaPVhXwWpXLCyzGBQZUvjhmpc1
+ILFqzHwJEQC4+v+JdcYzMRECAAGJiUJDnhpmUCIq172KR+fi+7c2Sy4x3Iy4gYd6dG17+krrUa9p
+8tzFGzeuXrZo6aJh/oX1Hb9m+66wG6Gyr0is7mPt/VSGLlxT2337WiMosiwqsqLzyIq4DRBRz/18
+lf0SfOGY9R1PACAmJiYKnJgoyB6vqCiKTlVkaecVjlUfNc9rg+eugfNfxbR/fHPgi5WrFn42udu5
+6h/TCkVFUSRFlnUut0P07aOBsa2/r1X9rXGOGlz3ulJ9PSGx3mvh0lj52nupf/WvX73f6n4BsBh/
+jff40rFw5eupev9Xvg8ub/+V2lurf4lXuC5qXTONU8Q3HCJS4lsHrA0Pt+yq+k1jxrFjubT+6xMo
+yLP9zg0CAgMNGDq8DR6b0RdjxnZBQkJThIX6wcQSSUxgvlQuRiGGgNrq7PUZVlW/x7IFfZUw9JPD
+kOANxgA5Ap0qY6GutB0qj5Uu2lFAHl/JGw1QPECxIuMMKlCfiaWBUUQu2ASlzn4JgI2UyhqKDSND
+Qy4cOCyWYL9UjP1SMU4JZddkXAFAZJT/1vbtwzYQ0fX9wK5Bo4F1BX6YP7ZV+yDTNyuyXE/luz2m
+vG//MnXf31/d0WRI8d8Xl3Lg+E7RE0N1YVvumv7ypMfu6PJMbKDfD6ab7POmLL1gBIBTq8f6zRnf
++54tK6OXBRst28KXffv1gEnPPzb6s2MRNY/DDFqaeEfzqbe1f/bzsMBN/n7hW1v2vfPDu/766S1j
+T3Hd3FQAH3x27OYST3Dz5r26f5vYi5xX6sPF1bNNd4dgflCznqs7vnK2a81pTVF1+D8/5dZx338a
+vDJIZ9gRunzDqtsee2Vc4uqk6k+1bxLHxLczmL9u0nHY66/MmT5uU5zf5+bYX9ZFj/+2h6/tY8WF
+z93W/oEBrV+NCwz40T8w5ucOg+9/c9Rrq3uOZa633sScm8IebB40acv65KxpXrlAf2zta8+NCG+/
+pcltb4yuHpOkQdLbMwd3HdOn5ZsxAX5bAkKabulyx0Ovjn5rbSdUxo09NbDZ8CYB5s2GLo+9lZhU
+Vq3E/O20jh06R1q+MIb1WOlMT3m8y4J5699cffTvLrnMcPHwqvunBcdsCenz5yf5Cu0DgIt7xppe
+nNR32KAOTT4OMVmSQuO+/rbv+Nl/HLt8T2ytc7d6rLj4yWE97uoZ949wgy4pOOLTzQNHPzanBP6x
+zLVvrofjDNMjgiN+aD1j00hOXqyb2iEgMfSWeRtP55QO9jjTQ9Y9d/dH5rjBa3tOWNEJADi5p27B
+U8P7jOkd/48Yf8tPwf7+v3QYcM+CK4jEhQAAIABJREFUMbPeHjw2cXX1dfHTu5OadjCZV0W2GfL2
+q3+Zed/3zQKWWWL7ro+8f23vK/XverDg4eHhTz1w85RNn0euCDcZk4KjVmzuNPzhFye++/3/sXfe
+4VUU7d//zu7p/aT3TkJC771EmnQUCAqKYqGJCIgKPCoR7EoRRUARBBUFBESagBikl9CTkEZ676e3
+3Z33jyQYBASVRx5/7/lcFxdwzu7M7Myc3XvvGtNUOP3gsa7twiT6vbG9n5y5bP7EbsPah67wlssO
+qTy/2ttx+LNzJy/76QaT35H5g72fG9Vh2iZP+U6FXPNrTMf41fO/qO4tUHrHgnFH14wNiVbqvwuI
+GvrBe2/NiX+oQ+CHAXLxz3K138HogU+9NXHJnuikxFG6V8Z1eWRnoHarSqo44vnl7q3xTyyaOGFF
+lqZpW2UbByoXP9V7RN+4gLUeMtlhT2//vZ2GPZU4bu6qlk2F2deGtu4ZLNbsbzXw6Vnzn3rw6W+8
+5DvkMZlfxr10xg8AaOpYyZvP9u4+tG3oJ95K5SG9z9d7O4ycOm/Uir2RbkHr/tJ/WOscPz/NapVS
+WtH4mdMp4OSJfOzYcpmWFRv/8TERhiAoVIcBQ2Lw2FMd8PS0bhgwrjk8WiqoSM2Ciil4IkDEAy5B
+gA3cHR3klRCjBaeBhyAGBwoHBCgpi1hODa+7SHVQCztOiCpxVlyLTJEFF8QGHBNVohy39hknqHei
+T2dNsJCmhYkAC+GRJTKhDo67euslqBfYHE00bXeDVi0vCghQfdq5T1ThXZ90D3CbCG+DXKdyhIV5
+ZzMldb55NbZghVdIRRBhrioCvfJ76sEfZpgQUGvf03u+iWQ4jkDlYfT1UknCwsJg3PSo14wPD738
+U6Yw0SlWFrkYWanCkO2Xvmv1W5mZZb1n/VT50vIHvUsppeS7Fzp3+/T7k+9ku7SRnEueQajNymX9
++kBSzrUhIbmmRErpV00lbvrNUP3wxacG1fl3zI0L73L6j67BCAdLgFYAjWQEXnu9DcqR3KQtT3zD
+wGo0CmVOEXHo6rK6nPrus37Xcs1L1ifRJZPiiZ2IqQKE72QoTem9+pu8RwReZ9N5awp9dCxTCmDZ
+xLQha38qWFxKvLQuXpYphlkwX94z9uesa0PjimwvU0r3/N5XTREZWRllK02XVBpU1xx8oN4vqthf
+I76qCpVWFQGgdI347bFLRq9PKltYLfIQc1SeJebqRDVntj+Rl54zpGc1mXMMODxpXNsrl4uT7LVF
+vzy9Zd3WFABf0l3DFRNeOTapwCgfre8zcomvd9rFkIigaFJplKcVmqMU+pCqEE/RVXm4rBi30UrT
+HU/qprxy8Pkfr9im2SWaChcjLdKY8vQ5e9e/lnW1tN+T316d9eWjsXmUUvLpIxH9VicVL8vhvH2I
+XJ0hmKuYvNN7E4rEElUNJQq/Ju0yFBEE6EYY8j066AV1ZFhhc1qTmVNS4+uwKRT+IVE5Wg91RoC/
+xJxMJ4sXjTwwfv2xrNcNIg1xUWkWI7iEuqtHBxxKT3lI13rMsjW76Kopw4mVBZWD8B2sFVcfWPVl
+0cMCr3FovbRFPnoRW/4X9v1fYffsnhHLfjj2/tlaTS9WLEojElm11F7qUXly63N7c4oGPGxhpgJI
+AQAiZnSgjm7WgrP+G4sxocBgsdoE3qmjpSFXD+5YXFxBIp+8QOd92Y7UpS3r5f/qml/f/blI/BBk
+ngW8UFVSnXelxbYNRT3qnGwQJ8EfOsiwECkAZydn1aX4DV9ee6C8xm6w8MSplxv9S45vn7U/K61L
+rbqyLLWOb1lex1UKRLDLjSkdjv9Q1c+31OWTSumKFoQ4DVsGeby44uKcnZedk3mZotzByvJldrO8
+4OT2SRmXLoxp8ahrXsomupcQwlOG8aRwdC++lBT7ZQojULHe6OWlTPUUM4QWzpa/8uz2SZtO1b1s
+knpYOchzFY5yecmv38y8lpn34DCXeuZu4B9xvnVzaxKeiN73xcfW7Xl53BSniyeEAC6XgLOnCgjn
+EOiQUbEkJMITItE/KwuzIgY6TwV0ngrEtvSG60GOFOUYYMiqpbTMQg35AlNmsQEOFlKbCE4nD54X
+QAhpyMROrmdklxERFYMhHKnXf4kpAwvhIWvIJVVGrHc02dUSJwzEBQb1yT4F/EHV5obv0xkDjGIX
+wvh6h3wHEZDPWFBGrHeVgf2vopCJ7aEh+i+mzO55eOqc/1o3t8StwboNfZ5aX7jvYsEr/bTkay+p
+yK5/YMaO81mlzxz/KnF1HGAjABUEO6mFryG4zxOvvLP6u4SN8x74YGFfcO99lJRwIN35NBc94pdB
+C7eMt1irhx9a1G1MP3/7Nmf6/qHbP9+SQCklJ9542PubH1L/k+IKbOYVP/PNlRmlIwzmuhGLBnlN
+bSbkWApO7JrRfd7J2KbjWr4tO66wRtFNFxC0b9fs6Ds8Q31AAAEglKFsgwaWAaiDqWN9Ld7xz726
+MbtulNV6Zcgrw1tPD5NUXyu5eGjqlpNJHQBAAgkIXLyFY8VcQPfvHk9cO/6bj+Y+u2vl8JQtT3WM
+2XEw59VcaawqbOSrcy+YykfUmNYOn9FN8VKAJUWdcWTfzIHvZ9zkgLzw29MHf76cP6Nzc+/vJSJP
+V0TP8V+dSz4648gXs44AwIaET1rvSCpYUKRuxzcf+9Zzp4wVI6svfTT8mQ7ShZ615wPSft7z/Ni1
+hR6tnttZOKmv75JIlFcWn/n+yaErM2PXfJva90yx/VES2vNI/6GjPn9x6eZTe5Jz5jw+sNknMpHG
+4RXR8+APF8/OOPXt61tuVz198dKfh/10yTDDGj4ouc+cDY+bzdXDz306/KGh4dwGXPu574FNuyZS
+Stlznz3ut/Nk6dxMLsjHr+fU95cfrx5hsViGLZ7Y65kImemS6+YITYFSUIESgZAE/qNdl784nrbg
+hWAP9VmJLMAYP/eTd88f/fGVXR8m5H6acKzLjuNl8yvU7aytHnppxhZT9QiDxThswYRuk8NIZU7l
+hX0vf3b4h4GNDRPq4i08K+H8umx/dMGaCes/mf/MhmlhF/9gY5C/8OeWUErJobTygfkuz45enSZ+
+OXV30ZgaQ93DpTueGTU4iPmCKTzb9sKVzNGJjfNBGQGw8oVG6meOefjrt49XjrHYnUM+fzxqUmu9
+Ia2qKGvI+RXbYiil5LMt2eOOFmEUooYkDXh103i73Tbk0GeLR8eHky8Jdbn4O5h6xTxLQZ28icgo
+Ezd609Jjl8bYHI4h38/sPL6Xr/1YTf6ZBw7XeHcMHTp3UYrZPMxqsw2d90DQC+F8vsVUnjrq6eV1
+AQDwzkeXH/7pkmUqF97/dL/p7z9uNteOqDq2csTj8dEL9IYsRf6JHxMHr8poAdRbTUAdQp2ghCJu
+2AcvLvvmka/ffmzukbc6VH707K7eP56ueKnOt2dxx6dWPG02V46o2DNtZEIsu1xedKLlqZ27ps4+
+QeV/dE1u/rv4+flZOrT3/9xLpzh33dRGAF6guHChCF99kYyTJwphd9w/1z+GIZAqxIhs6YX2DzUj
+bZ9uwbR9MQZdn4/BmKfaYfSj7fDgsDj06h2B1q0DEBSkg1YrBWkoq+wETwRQuK7/EQBab4Izw3VX
+og5BvfM535CT6m7EzUZn9dOiSpwUVeIsW4USYvnbwpUYDOQQQQa2wcD5Gwwh8PZUnW7XzmcrIeQf
+r4Hk1mDdAVofqkAg3PyDYkQqV0T8hG+HbpiydVLDA9u67eGgwyXWUUYm3DJw0ivLN0+LyQSA5s8f
+LLmwqNMXZz/K6V+VfLj/HkzfWJaX3v1MubiXrmXnLc9vfnHTREIsEwFQmnj0cv81X2ecKlhgTDnY
+HsCV+rH0Fc3unTmoWBFtC4gZlvTXbMkCCCMTQrsN3jZiw8xdIxvaoJTuyezoHVOVlb0wOTn9QUrp
+yR1vPwxKGVYf1PJC2xnrVn8wkeR+UH8sc6WiesDlGmVr/z7x73/92VO7mhHiBAB66fG9Fyb91Hd7
+Vvp4LudYLG7nuE0bfXB+M4tQukY8M37R4AyTrll43wcXnPh4/M+E1OuU6dGhO84+e+qBn7OuDLBn
+n4kEUDN+7WcnLmY9vnLjxSsLS75+8cXN5bXNiuXN+ei+D3301fNtcq9f8V2aXujesd6DZh4cVSUE
+MT0fnrp857w+V8g8AEBV/rs9vjy9NHVA3rmjA1ZfnrbaJ+Vc+0uV0k6q8C6HHlr86oZnWpCaZ+qb
+ubDksY5fp+WkDL5jhwZD41zAKZCG+UiUPNf3s4FZJq/Q0N5DF/y6eub+xjkAcOS9wf5rVp7KXZ5x
++NiYLYV0v7DlCUopy+oCml9p89znq5ZNkmUt+4MuC39K9Jg+/cPXTlWjBUfv7s5GVSGOkEc+2HB5
+6dBtt/q+SKzZCw/FmcUvDMkNsB626V5+WT2ncpQj2m/rOc/Sakt+QUls9T6IgcY6FmLiE93hl07z
+F301JYbUTgFAC8de/v5c6ZEzZ6uflRiLPXE2wfdShXWAEVHOnqOe/njbrN6XySwAQAVNXrDp0oMf
+DcsA7piPjlKGUfsEpXee++b2J2JJ9RP1c5z2wJVrPyUVmuK9w9vtm7Nqxr7whptv/rSQI0eDxRe/
+rzW1qLp62oMmDzf3G3d0aDUNo91HTlmxNbH/RZI4AQAslO7d6uoytuX6rMzpF3fsHQA0BmtI4N8m
+/kD7j5atf6kFMQMALZurPFVmGF5g8/Fu2e+RBYfeGX6SvAMAMNF1AzedXXSm3/m0sw9wmecCAFy7
+m3Vx899h0MOtLxYUmZfUGe2rrQ7Xdc0/L1CSk1uN2k3nUVVmQK/4CHh6Kq4LLvcLViKGh7cYHt5K
+RKA+Mo/nBLicHBx2DjYbB4fDBbPZCUOdA1aDHVoLhbLQAN5GwJnr0y3USTnKEBH8qLr+TYECnJ0H
+CLludmRFBCqHGAwBMYhdVPh9GguK25ooBYFC4AQiUAoOFEQAxGABSiE0nEcFCtrwf6BeuCW/L4bY
+gAIi+FIFPKkUEsqAgsJEOJQxVtTCAR4UCrm4ukVL5afxw+Nu66v838QtYP0NCGEEH19p+UKAJjZ8
+lrT7eKCFd4XaxWrzqXdGhALQoUHgf2pTsadgNQusoiDg5yPw887PbWUS60SimjJ+vk7WtbFZmewd
+2jZQo5LaS0UQ26NSKZW0IMR5LFEUkJzBDWH9Q099urxnWs+P/urIWaqVM4am4yaE0B0T/dL2FvDm
+ssz0qGxALOIZSgkLqUioG/AQLAcaT/94iLiuoryNWerLM3nn2PYycR/Ua0OpZ/x2JlQmlkhthTI7
+y0dRSn+525QWVe8vlRkNNW0sshBnxaUDMrF4/gON7fqPPSrypWAl9jyllWUjAJwlJJ7LWT7iu8yK
+w51+Tt73uEvi6/LuPPS95asm/hy/+ok/PSvHd5z2sThtkTapznxx/Qx/AAPRsHbD1l7TOq02QSzP
+9z1dRALaZuRF2mXeLNG1uPhhG1LRtB07z9rEoLcQye9M3uwvFYaKinZ2fbc6wvonNxGuAABPJ3Q8
+t/bc0WJacKF5bo3N0wMOgDCQsLSu7zCp+eAd2jcaAXOti60zOlnuzsE7AAAxVyq2msy39FlrWNuC
+VVO78d+9O22YWazvZTbbguihQyJbLetdZKE6CAJjKs9rcpdkiELG1I3qCdemxo+CegmUOW5jqINh
+WEFyeUuKl5NzBrl8WuSH61RXbujUL8DJCtRF2LsYPyFgqOD08mvqCbuQsqpvawnD8yzHVg3DbwXM
+1KEiQSwlDlrjlDJmm+jEqmN+Noe1mcOndUGwSnPlxqaHOHa+1Onwhsu5U2nR2RhKqeK1YW0oCAuN
+jFRNioNra8OxGUs3ay02U5xVFmDLO7BSJwIGcg17q9nC8zKpyQkxl6cvsolD4Raw7iuEEKGwsHCn
+yeiIy0ivnGN3csrGZzwhBLU1Fuz5IRXZ6ZXoHR+BFm38odLcoaTMPwhDAEbMQCyWQKGUQP+774UG
+IYa4+Pr0D5RA4ClcPE/auQS4XAI4oV5IE+xOELEI4HnQRpNjQ4SGQECaClOEEPC8ALv99u/9dqsL
+vEsAJYDTzoHnBDhcPOxODhaLC3a7C2aTkxoNNmK3OmEyO2G1OuFy8SCEgGkQZnWQoJmghVaod8un
+oLAzPLQQQyloUEHsqJM6beExnksSnuq9836lVXILWH8Tyt2oHams5FSC0ykXqs8GG6TYqJD99sPL
+yKsGpZTVSJyX7BarzFDHaam9UmIvOjxJzGJi02OvlBgBMUNFEkFyqMEUcuHClf65Yg+9tutDB3sS
+8vfCWm6h1fH01VkpKXdRq0Emu24+rldzWJocV+7gRRYLp6OWQoUlv/QlEcO+qJDVP3/tVg4ZVg6Q
+SDnCQopGbfJdkFXmIXZYczWCKUdjtucvlIikVNKwQ411DhgBsFKRXWCE6xMVMevH8tk9go/p8swP
+V8n0tZ3GP300/i+qgouqnQrOxStpzfkwk4Wsbboe14pqQSlllFrHNZfdIbNZHEoiIgL03ubft8MI
++Mu/5mrWU+R05isYldJs9Qm6aY2VQeFWSo/ZGGpU1xk5hZjnGquoEZftzpr6FgmJNQBm/pkxOa21
+yP583G2/XzU6qt3mwzmLLtfo2mu9LCeNpblXqmsNlihPNlIhYcJvtVEpFZjfO1AxDQHbLAuUmxwy
+zsVJGa22ttTmf2OYkMX+Z1UGRPz7wmcNYqtwCz9ZWj9AAECtkZUKHC9l/fRleWLvm/YVp/YyMcji
+WZFNlQdIKKl/pRd+FxOVX8pIXXZOjbo0L6ONXSaRSa9HsJRUmkABIlU5qzmO/995Uv9/THBwsO3S
+qazPrBZndG5+7VieF66b/Akh4HgBqallKCqqQ6uL/rRbrzASHecFseSOsRf3nXohhQDsb14MLAAx
+xFDch/HwvFCvLePrhT8nJxDO7oLZYEdVhQXVtRYUFRhRkFONsjITlTgJiRQ08BCk4IgAG/jrYSYM
+CFgAPmK53T9M9114mPcGQsg/X1iyAbeAdY9RyAUHIxK5RGEDz/gyOQvthuIbbsocx0EpE1nEsF9T
+KBgnq/azygN7rVZV79ztcomu73iu/mDKSkjxTMBJr72rHRL/3kCnNKrkyYSex95a8zcHeguJvqKs
+TkkoFROZ6g/jXn0tmbxUTO2sPrpOF9jiHbb0p1OUstc1HBwHSsSgIrE4F3cQrgj57RXIm6vkxCLB
+wXq1rtD7hySS0p9TKW0yJxwoEbOCREazGz/79T+dgt/anDrUIIipxF6qP7vhvWErK2jycz7kJsHn
+TugUdifLEicT/ECqn7xqga06+4awIY7jIFOwNsg9rmo8VR0hULBW400+MwLz13MkePLVnETCWGFy
+SMWm6psetpaiXAUhVC5AY9dpRFYXK7of98TrULpUPq79+xPOFcr6BA8Y95/pM+Zueq6fupYQIix9
+QNHn1WN871r+z/l68gDC/eVWkURkpU6rLFhXd+NT68+lafhrNKgs9BrewYhYB7VY5P589U33S5Gp
+XC1AxPKc3BwGOAhlb7n0WqnJxYrgYPy7Fnh5SOdz5aeKgd88pTmOoxIJy0EiZPy3LsnNn6NN12ZF
++3ee+dRktrWvqLQ1qy/PcmPSz7o6O44eySFX08rRvkMg2nUORViUHgrF/76g9b8C2yDoiRp+XQqw
+gFoML28FwqI8AAB2O4/aKgsKC42kKt8ALttKrZl2OK084dDUUbTemd/DV3wptI/vB90GRN/X3IJu
+Aese0ye+Rcl7Jy6XiMxW307L9hZsfSz0BtsvpVQGwEEIoasei0gVXbAyMoU3u/mK6Wx38lvq3IY0
+AiwhxImv38X28eFt8p2KNqquA78SP+BZ+vdGyRODTdC+0cRJmFLKPNPKq43VTjWa5nEZQYDjLCvc
+Wk5Y+L5Le3pWijjDNloT0JbLurTlRFNTFm0IoSeEuMjSp27ZRH2iIAFoImBFrWhnV/YypYpzLf08
+YvvZUy/tONpUtUsplQAQGn3PaOoWydTJMyadrvDoHdJjyPIWFdsj96YfeWzJzFXnKaXf3qgWpgDh
+adgfzMqgQV0q3j55Kl9cY2oTO2tlyd45XZKbft907Ua/2DFDcjCbR9n5Vu/UUf18HaltPE7O2FUO
+CvaOpWKJlJCGTGqsuN6iGLbsSau272cXJNey+hNjRkdK6dmmDvlrvjvX3uFyBZKIDvvDPeTVwH15
+6fyNb/doTC57jEUSbWoXHH1oRn9N9YyGr1JqtN5We7WKYShV+4bdvVDEcSTqscFV7IYvCsRFl7rl
+1xqaAfjNDJuXLuVApMJ/uRIBddhJ94UPlikO78sSFZ7rUVZd0QLAr9e/p1TyQmdVH0HuyTBBHdMJ
+Ibb/DG97yzF1eWawUXJ2X6aowtQyaPTM2lOf/Pxr0+9pfUkl7vcmYTf3l4EjOp2srOBfSz5b/p7V
+6goREUo5l8BwggAetF4OJwRV1Rb88nM2Lp0vRVS0Fzp0D0V0rDdUasn9KZfxfwyZjIV/kAb+QRpw
+nfxhNDhJWXYd8pKKaUmqiQi2erMjpRQSFZsR0kn8Stf+zdLv97jdUYT3GJ9pRws7Bkj3qmznfY5+
+/Nq8J5f+0IpSylBK2Y9mDu3Qv3Pnd5sPfH0CpZQNCW1+rK3OdN6Qd3DM1LGvT1qbavAAgOpTKzTP
+De80oX3XER+0f3xjLKVUtOOSqX+NKErUPCZ0X+JtIuDuDgZUsDP5J/eN+fGJFcP3VlMNpbmyjx7v
+OexUiXVcjSSqrkPH2P23i7IDAEIS+HA//4OxytKc0pQfJ3d7+sPRWyrq6x+e3zLf+8n+7ae16j7+
+rQdm7wq8TROCjBKrjJpIpdERdBKQUUpFhGx1Rvv7/BQpLygtOPP98/HTVg7dRakCAA58MSPgkb7t
+XmjZ48nEh+b/7AkAH89/acDBVNuz1K/j6fDHF38xsk/0kkiSV1N5eucLD799uEVjZ2JKrGpq5a0O
+p/8bmVBRSkW3TBz62E/l7X2Ue/XcFcXZr5fOH7vomw6UUpZSyqx5ZWSrwd07LI7uP29yMqVi36jY
+S228nMnGinPx659+a9LSVIMHpVS8bsG49nvO5k+s4ukd5StoIl1qgbOJBIP0Wk5tIKVUBCx0xXrq
+9zdTV+UXXdw/tc/UFQ/upVRKKWXXTxvU64dzhsmVJEKI6dv9+4RgYmNY8f29f3eKs4khKpeYsz3O
+ZyYP21BEPWtrc3UfTuo/aOcVwzPFRt6TZRgqMhfd9b1GRCiDyA8q2/hKftEgR3pm+2ezRn9wpDWl
+lL20f5XP9Ff3Pp5jc7R03aXp+a8iY5wMifm2qouffI8XyWUu7lk/95FFG9pRShmavEaxeES7MbvT
+6DhBG53V5qGhP/9RW6TrN8YWvtq9gSTTmn5o3cvDX1rXZ29Dncod7z8ROapn2wVxfabPnbvx0p33
+jZt/DEKIa8IzXbe1auWzWKeRlBOGMFKWpSqIIYfoemZyQgh4SlFRbcaJE3n4+tPT+OHzy7hwtBBl
+JSY4HG65+V4hErHw8JQjros/ek9vSSIH+4ORMwAFRCq2yKubblG3R7sdvV9+VzeM9X4P4H8dAsqA
+gID8TvVP67OF/z7EgRDiSls26EvTxjMh+6/uHvvje4faal6bVCjmbZBrlCE2cZgkOMb3BAA65M09
+BeWl0YuM+wrezk364vU5v6x5RCdX1sUMWKASKzRRvHdYcvu4VrZj00NDii38ACaq9TH/QSOysfjm
+cTKUEgowN46nArQhq7dA+HpdCeUJISoSLK7jyn5Z+eajEa8/73Q4oJNLokycpzK4a/8lCd3iz+27
+fv0QEYARW298EZu8bvjl2oer31x3NDUxY3fxkqe3vzdFL1VYBk35RE/EHmGicMW+Vs2jb2n7JoQI
+7zwQfjVQZa3I+PmTaQ94bezu33b85wC+n/1231PGF2rf3XAyecHl7dc+mfBtYpanVGF77KWNXhB5
+Bcubqbfqu/Zznk7sGT33i4tzy9kwUfO+j3665ynfnN10TeGZs9nrKlNOLzz60+4XZu2ofWn5Q/o6
+Txef08zDde301d3D3ukSGrYqauz2srMffgLA9ftxlawZvtm87njozqv7Jx1aeby55oMZ+WLOLkhV
+8iCHKEgT0M3rrRxAGDt1Y+XoI79+WHYwd1lO0qoFr3ZbMnoB57D66PQeEpFeoWHsPKWkqVDBEALC
+kKbpG0aYW2jplbSqiodOr3jyXeXnkeNb9Xt60altM8/UjHznnfXHL7x2ZUfOJwnfvJENziHolGy4
+jXgrAzoNWzK576gDU5Zcb0hEKXtfXpZIs4+Ny8bG7sgsy+tRcPq7V6a13DjyeVBeq1D5SsT+RKUu
+rbMaKvQh3pwUgA28wFCAJSA3jVcgDAOAZQgYQghNW9Zra2ndufYH0nc9fPC9w7GSVytLtWq1XKfW
+aeSMjHEREJa/vYLAxfIEgOhWRc1JfTw3S5kbXzKJXSAAwwBgKFvvUfvy9PbbKlcmh/6QcnDygU9O
+bFS9N7NAQni5QkSa2fQxxsjeo9/cNy0mlUxvrExCRZSCkf9Ow7b4uVb7zS7b8i0Xjs86vjHl86RV
+L+V6SuWOae/v9OdYXx9dO/3qkG6t/7Es027uDkIIl5VVvVVw0qD09Mo5TpdLQ1hC5TxLWBDYwIFv
+KusTwGnnkXqqhBalVkMfoIRfnI6EhesQHu0JtU523Vnbzd9DpZGh1cAQGDINqMyx1CrjVCtCRvrv
+/CMFwT+JW8C6AwylxQTkhECFphlgKSjyARylQNnvz4mbvb80eU3/eVHH7L8cOp09LK3OHu6Se7q8
+Y3r83KVzn03Pfzj9QuMGoBS/sAuGPHb0XN7DSclFvSoEohfpo2oiewx8N6pdx+3rX2pb/vIAMinH
+FhKm9o5Ysq7nrZ3bGcpbCMFpAuQybL3goIGUB3CZENRQMHX1BwqlYHVJEd1GfNYZh9lDRysfulpC
+g1y6qFOd4kdu7tNl6L5J8fXNh0sdAAAgAElEQVRO4iJBZAHFSUqRwUhvrEdASCJHk/p+7xEVl550
++tqYY5fqOtUSkV7q3aK0eY/+a2I7ddmzakpM7e/H2ci82QOOla45ubDuVN6YOrGHWKGVOAGANPvY
+QbfEbfRqFncl6cy1MSdTa9saGYlO49c6N7b7gKUdusXvf28ELC8szm+fVckLpMvQVZMTEw5M+Wwc
+CJniKlz6wLcnPzwTlpJ+MPTY+TEtAByfuGHutYKJS/5TeTjzyQKTxEehlzpxG+1HwJRdVRUr+y4K
+PSccO3Q6e8Tla/ZmTrFW8Ijqcqx9136bR0zofiqhMXVEIg6J/Ac//sOvaY+dTjF34LQBXGiXAd+1
+o0XnD5eXvGAUSKamwZ1aIMihwAkq0OvmXUIIPbX80a9Kt55WHLxU3geeUqpQU56QKS6a3GGTxzdh
+qYdOFD5y5mptWwMRy5ThbX/p1nf0VqWq5Ykpw+vXiAexAeQUIUIBRHdZM+IeM2u67351kH/lhkPX
+nkzONLeg2mBzQLcHt03syJxITjo48JLgkHMSuQQAGEJrCcFxAJneaJqKWSowAs0BpUdBSCUAxM0+
+WpqU2Heu3yXTqYNH0oYUMVKdZ0SrlK49+2+t3rC4/2kgnGdvH+whgchKCE4xDCl1NIkUBACBMmWg
+OErqf8fX94ILCo6CplKAMJQaAUA3YU9tya7h7wRuqzl5+Gzuw5eNzmYumZbz7dxrQ8vuw7ZEYGJK
+4++ZCEI1BXMUoDmVuNHTnYz80UTX910RGMMkHzqV9fC5DGucTaSUqYM7XI7tGv/9gPjeh2c2u38O
+uW5uT7NmnsZTe7OW1VTb1KW8cRp1UEV9mgEGDkpuFLBQv6EIS2A1u2DPMKAix0Svioqh9pShZd9A
+EhXjSbU+ciJTSSASMbhNJgI3d4GHXoagaHVlueBcpYwjK9v4+d22usk/jXtZ70yD/xyluDE47Haf
+3+Z81BuIb6O2pBTkDQKSCABIBKULKSGE0qS+ohdeuzJ8Y3Xn0GaTNnx39mWfmwS6JjBAIoDE6zf2
+RIBJvLHvxvHUC3gNqUaQmAgkJt5K6mfwW8mrW0JpffRufYe3beePz7vFPN74/U1jqL+OW8/pLdcm
+MRFMYuKt+7rl+Brn5jbju/m4RIAupCCEJtbPe9Mx33a//HadiWi6dncxB43ctO73g6bzcH3/0us6
+VXrjMbe8ltvOUWLjPv7tvBv28R/QqKG6cV7vahw3t30Xe6Lx3Lv/zdzlfnRz/zmyN8s7+UzxqyXF
+dY+5TJyHiDKwUld9iZomx4nAQM/IqQgMGEogpcwNdwKtUkQ10WqiDVUhIFhDwsL18PRVQ/wPZ4j/
+vwDPcaiprltuc1gXhYaG3val/n7gXk03bty4cePmLsk+Xuaz68DV+YX5dZN5K6/gIMAK7qaM5AqI
+oGZkVAQGIkrAUKBRpuZBUU2txM7ykCvF8PRUIjBIh5Zt/NAszhdarQQilrnvSUz/16GUwlBnOVxT
+XjQzMjb2yp3P+Gdxr54bN27cuHHzJzjyU5r/2ZPlC8oKDRNtZqfGcgsBiwBQQAwFI6FiSiBucAV0
+EQF11EFsDWVp6jOYA4QhkMvF0OvlNDzck0Q184RvsA6eXnKolBLIlRKwt84C8v8lPM9To9F6uOCa
+6cW2nQIv3O/x3Ar3arlx48aNGzd/kitXcnxP/1D2Qvq18mmVVqvudseJCAOWErAgoACc4G/y2Wqk
+MWkNIYBYxFKNRkr0Hgp4eSjgF6Knvv5K4u+vgbefGkrlP5NrS6AULp7C5eDhsDjBcQKcDh6ci4fN
+7oIg/HYtIhEDjUYGnZcSCsV/z8VbEHiYTcZ91zLq5rfvEvE/WyDdLWC5cePGjRs3f4Grp4s8d/6Y
+viC3oHqK3cHd8xQbtL56OAgFGEKoRMaSEG89Ij084KORUlmQFHIfBVHrpJDJRAAhIDIJKAOIWYJb
+WRgpBVw8ILg4UBcHgRdgd3Bw2DhYjE6AAlKji3K1LuoyMIwgUHAchdPFId9pRDlnhcvJg+cE2J3c
+DbUHWZaBUiGBl48KAx+MQUwrn3s9JeA4zm6zmHc7LOWvegc2/59OzOuOInTjxo0bN27+ArFdgqq3
+bEl9S6uXFKWnV75YZ7AH3ku1RX1ERX1YhQAQ3k7hKHCgMK8KJQBhpAykYhEkIrY+vwkIjBIOFUo7
+lUhYwt4ie4vTxYPjBCpwAjgnD4eLJzwvQBAoFDyLUEENGUeIwFGC3yUNsTI8KhgDjA0ZbkiTMA3a
+ULBZqZTA01sJieyW5Uv/FhzHmc1m8+c2W83ygMDmBfe8g3uMW4Plxo0bN27c/A0opZIvPjk5Ju1y
++Ru1RlukcKtExn+3DwBqiBFC1WBRL0w1xp5SUIgakrq5iIBMxgALuFs/4OkNf6ExKJcA8IcSYYIK
+hAAiSsARChYEQkNNWgAoYCwohvm382m9aVCpkiI8Qo+OXYLRpmMQ1Op7V1bTxXE8KL1mt9u/FITa
+1Trd/1a04O1wa7DcuHHjxo2bvwEhxEkp/X7L+vPVWelVM3KLagZynCC585l/DgYEogZfLgG0vmZz
+Q2YQviELD08AlrAUlLu1kEdu+Ov6vwgIVFT8m1bqVudSQCmIAQIwLIFaI0VIkB5hUV5oFuuNsHAd
+NFrZPblWSgGHw4XSAqPdbLTtCmmmXq3Vao8Rorkv+f7+Cm4By40bN27cuPmbNAhZB44cyM9kT2TN
+yc2pecLh4NT3up/fCz486rVMBAAHChco6F+sN9+Y9BCo14QRELhAQRoc2RkZA7VKijg/X8S19UNE
+jA98fZVQa2QQiZl7YhKjAKwmB65lViLtcnmVmGXWiiX4uFXHoNL/hfI3fwa3idCNGzdu3Li5hyQn
+X9Oe+bXksbzs2snVNZaWHBX+dikrivrcWgFQQU7Z2z68rYRDEcxw4M/VPyQAAqGCH5WDpQRCvYc9
+ZDJCFf4KogtQUI9oNbyitCQwTAupVPT7SnF/C7OFQ1WpEfkFdchOqeArykwX/ANEy54cRraT8Hj7
+PevoH8QtYLlxcxsoTRKtW2eUFxaOsCQm3rvaVktnj5Wr4waGMQwj4Th13pTJY423y/D/v0rj3KjV
+DmtCQsK/qpItpcni99cVy15+aoT53/ZG7ObfA6VUsufrlI5XruY/kV9ofcTmcGn+6PimD+PbbUoC
+Aj2RUV8qJwwloA3aq0YEUJQTG6phb+I1dTdjre9VATHCGQ10jATa5ioERnvAy09GtWEqovFWQq4Q
+3zIy8a9AAVCeorbaipTLZchIr0RJXi3MZmeNj4/465ZxIV8NeaTlRULIv7Y+p9tE6MbNbdj37PSO
+K9O6P+UXL3oLQP69aHPXix2ar9mf/OLV3dkeHmyt0+rT1TKRRL+/EcgEgC1bxrJpaSH61LhZlq0J
+wbZ70ed/g4NTp7ZdfaX7FHWPEe8CuHa/x/Nn2DTxiQe+zOo9skDk9xqA6vs9Hjf/NyGEOAGcOHYs
+/Yry18rTpSW1c6oNtiiHg5M2laZYEEgICxlEEBGWAgBPBZipk7h+lzGLgqKO2glDCNVADClY4oBA
+RZQQFxFQBwdq71K4EoR6DZVIzEAuFUOllFCdpxwt4gJIm7YB0PkrIFOJwbLMPdNT8bwAu52D2eBE
+aZ4BBVerkX2pEteMtRAEweahkyWHR3kvadZa9fOgQa0sePQedXyfcAtYbtzcAkrXyx5v+/4oEuDJ
+izoPqbk3bSbKJvX+8fEcTS8mYuRjz48vfdm6n7bo7Sy5et1p03rWHJaZnvWyPVS+FsDZe9HvvYbS
+vdIn2784knrpCdNpVNX9Hs+fgV57RTt62O4x8tjgCu+OnW9bKNqNm3tFz57NTZTSDUl70i9lp9SM
+Sr9W8WityRbB85TIGBYaIqUi1Kc0aPRiklARFERMTXAQE3XekCVeaCizYyEiyCCiFAAlFE7KwwH+
+pozyTWlMpcAwBD4+avh5q+AfqkNwsBZBwTriG6iu11LdwxI9TpeAqnIzTJU2WpVrIkVFBtQUWFBb
+bKWcIBAXKzj1HtIrEZG6zZ17K7a37NAht7F4+r8dt4D1LyI1NUlVw3uKe7ZqZWi6AWlSkugQr9Cq
+1QDLBts6dgy4oZr4pf37lTWSIBIUZGLyDN6kf4cIY1PTSGpqqqSiokLRt29f4502NqUgW7eu1cNQ
+F15JfA2VRdeK4uLa+7Aaiat9jLS2qMhTLk87aT4H+ItECnkhw+UnTppkB4Dk5GRxoYlV6lBnjo+P
+5wAgNzdJlpcH2d30DQCJffuKwidN8hWJeGm5WFU6JyHhupYnKSlJJBJ5qk1+cmv57pVyqm0dUMeq
+DMZc7/LExHiOUpAfv/3cx+YwhJQxIeV1uWkVrVp1DJB4KI3D4+NvEBTWD18QV6ro3NLh2+qjH0eS
+6w/iL957T60MbRYkEgnc8eMFRcuWzbH9fnyRjz7qzUulijyHZ2nilOHX16L0jc9UgrJtcJ0t6lTq
+ywPK3nhjFL5LfO3HxjXc76jU5Gxb2iIzzdwyeniRx0/bvvJ3hfYztPTMECoq/JTWzs0N8U3U5ZRS
+5vDhwxq1Wm3p0KEj98YbT0pjYgb5EeJgkwuZsg9fmmhpPHbLli2sv7+/xuTnZy3ctlYm9okJNPMS
+Y01xYFliYv1abFk6W86E9Agq5BiRgYkpTExoYb7VGmwcMzmmVNa2rcW39erkBGK43sfKlSrO1zeo
+lJMLRYy+cFlCd1vjGqemWuQaxioqrGXVer28mGXt2tpap9oQFVUwpWNHV2JiIuPj46P18PDwtlgs
+5q++Kqw4fDixybWCfPrGdKVfq36eFRUVts3l5TWHExObmg7Ihg2feBBpgL+M4Yxb09LKtiYm3hRt
+9PH0rzqV6voGioNiVye2IP+aaCQ3/24IITyAc5TS9C8/PnMgv6jmCUO1fZjISrxZyjQtEA4KCicD
+sJRARaSUByVmeuNWpQBslIMNt4kUREMJcdS3TAiBTMJSrV5OwiM8ERnjheBgHbx9VFBopJBKmHvm
+T8VxAuwOHnWVVpTlVKEow4iSAjO11djAGXhq5wVCGELBQCBqptA/UP1VZGvZ5kGjO2USQlz3ZBD/
+I7h9sP5FfP/SgCHzT3WOf+3V5xN7MDtF646zMQ8Ne/oCd2x87NSvJS/5ebPWVFfLvYU/z9n56fJP
+YwpsWtc7834tnDDKNe1cta/5pe7XXItPtAjNO7rw3X1bP9YfS1MFv7Vw0qV1r0zo/cZPnoM/v7Ti
+jUGEWP5oDF9O7dhjfbL5aYfUm7HV2NQMAANl4dlh9Jb/eHxnnZ/UbHznKNuF5HMXe1TYeI0qrFdq
+9/kfvvvN6KCiH8ZKWn1SMXp2SeCwFWmbJlwEgNVTBgx591fZiEW7f3x9YhSp+KO+V84ZGLzrdPX0
+ixklrcWCi9FGdykOHjB55b7FIy8AwPIHA2IO1sa+Ko5sllly9MfYPAs8RFJv2vLJ19bsf3v07o+f
+bDXo6yt4VCzXugw1Lp2Y2Pk6kQcX3nPsul8+fe5AYz80NU7y3Eztq0m2dp7jdq2cn+hJjJRSsnFK
+zx5rDlVOL5MEwpst5w2SZq4uT8xdueGFXucA4IuXRwRsP1k85Xx6SUcR52DUEZ3Kgvs9vWr/+wln
+kj6b1XZ/csHIpANXxtr82mbE9wo7Z9G0Tf/81fG7CSHOymW9/BPWZcxKKTDFW12ScEahSGUpW9V2
+1leffEAXGKb+2vUZbetubx+aaal+/StXK7Z5j6sLVW/r2iYqXvZt2/3TZf0zuHlL9z5/qaAuVMFb
+BLs2mms+Yvqn+z547FdCCF0zODhyd3XEQiayZXbl8R3R2WZ4iaQeaPHY/C8OvD/++zUzh8T+dCLv
+uSy7SqdwVYrt+g51gcOeWfLTa4NvyJRMkzuIZy4Qv3LQ2CbkkX2rX07UkzpKKfloygOd958pn1JC
+5RLGXC0XgvrkhyU8t2znc50LEx97sO/+k2Vztf5MUWV5TbA6umuO3pJJCsttEc74d9ZdWjly+xfz
+xg39aGvyRKfTSewOl1QZPeBqx8lzP9r4RNvirOejpBuqg4fuOl0wrrDappSLeWhbDs7pPfGFpasn
+tcujyWvEb7+1evSmZGcCfPxMEkOR1BXap2DQ9Hkrl4yOuG7apTtj1I++6/N2irKH4cWD77w5iZB/
+peOsm38/STtydSXFla05pzC4OKtuiNXMRXNOQdaQgQFA/cNZRBk4wKGW2onzDk7rjdopAJBKWMjk
+Yuj0cnh5KREcpENohAf8QzTQ6eSQKyS4F/KUQAGnzQWT2YXKMhNqqyyoKDcjL7cGKBWo3eiA08qj
+QcoDACKSMDalVpzmE6na69Rgb/8HAy8FB//vukP8HdwarH8RIq22jtZejcpROrXaHRtbfLXba25l
+m4HTx1tqPOHfg4H1skvtyo2idKd6bJ+l05OFdrXvzBu8XKU/4GtwBBkgZNWJDVcHHQZUGXs2D/zy
+VOCYwCcmTVMzNi/eO1ASBPzh24N5eUvfJ/cqn6oKjj8X0ab3+oTi+W0/Oe67OKTroGWHB7+0z75n
+5SOGSluPq80eLHxw2tBXtJdWqA9llHx46KON/QBsoC6n3OlyRPAcvV5SguedWoeLDXVJ/ngv0m96
+6ketKH/lqqyPPG5S+5lDLeucaVeyZu3bu2XhM9uKZqwdHVQkgVRqLrjcOcWoiOqekLhIX3DwdLw/
+29zZJcyU8WanyB8L/J8QWvXZLFir9z4X+Uu/VWcC57YZ/sjLPxzPPd+0r81rdNFZteKO8gFjPkr0
+JEYAQNU61fb9uc/VdnqpLMbfsLBNzjZW5k+GHrxwxhcA6N7BmkfezH0xhe3p3XxS9zkPW1eb0q7k
+zth1cHvi+G9ypjGm5RaWJeUSlc5oYVQGRkRKBQG1AAQA8Ar0q+jTz/OdvhUVKZ+elD41bPZzc8q2
+LM9TxPS1hLDhQdy2nACVqrNPwZ61uu83qd/0Ge7z5vOxZdWsTzddKadxlhZXoPOIxw5aT2WejVal
+O/VllZM3/XLs+Td2d04BUMXIZBJLYWrHSyZVTJcxiYvbFR488YAfE811CrBX/DjeZ/uZmlll3oOL
+9R6SV0epTrHXrmS8/ONPh2dvqaBzE3zIdU3W7m/VkemVfDdF/NhViXpSBwDpy+NDt55xzLFFjjmi
+cl3c+FiARHP84tU3Dm3eO5lSumjhqA5qI6vzUcXP+WDQuVnd12XXDhkwZfHsQb/MG73uwpmewMhd
+cr23oc+E2cs3r1506fWhfkFJV3Pf/OWLXWMopSsWDo0edqDA8Zw6fsbnnQwp+wcF1fn/cv7qhKrS
+4mAAebt+2BaUdNn5HD/wta9bnVy0vn831u+CyDX0zP6DnmjiO/fRN5J2pYImQtptzCK3cOXmfhL/
+UHgdgCMlJSXJVXmKTcmHTYML84wJDivXmndRMQFACaiLCGDBQAIWTnqzgEUpBaX1pkWZTARPLyX8
+g7WIivBAcIgeOk8FNHoZlEoxbpXV/a/gcgmoq7GiotyEgiIzCrOqUFpmgKHWBqvZBSfPAwIQQFWQ
+gEW9ugpgpMShULEpAZGqTW16yX/SBHrn/l8VrBpxC1j/Jmyuwg7ya47sQjZMeSG1hZ80zOdQ0tVO
+Q4VCXh8Tcy3k+FfFqmDPqPUfpwZrTRejxB4tHPNezw32kjvEktgOxVzp8pL2Wi92y0+1Ib7XLrf0
+VIoCV316pPUrljIPn7hmhXF3ELAuXM5WCoj2qHI0y09NHG7d/MMjhR8llVnUaj2LBMLzj0WAlQQU
+txk3ee2SR2Iz6bEYddo8WXZ2XWVgYxsEDE+Y34pXUUIocGfT4DtrM+OMfLsW0pj+r/3ywYhrvwDY
+P7/b51e/v7Q6JaWkHYAiwAUq8XIqQjp+/eOHz+4nZLKwHziBFd+hw+OaLjw7SllhDc8r2Pqq7eOl
+I/NXHjW7PIOCgMNPNDFFJYle7jd91FXFoNIXp8afPv9ewxd2Nefni/xzl7d2r7TETjQN/SBJFj9o
+y7E4cOTLF7Fk+cVmNY7m7SVtBr2V9P6ojCQAR9/ptzZl7YXPc9ILu/RZvGKLIRHVJeGjuu61tjq+
+7J056wFg3cIJ9fOSsJUHULfq2d4CS9TmruNGlzw7c0wtjhFsSV1ZEUfer+TV0yL2H8wXAlnWJ7Pc
+1P2cvfhUcKi+7rSmtan/7NGViYmJRS88M86v1mn1tZ7+ppLbes3b4bJ5AKiC0wle4umSBbf7bs+S
+Z/cRMpnfD5zCx5uhjtf1cbg6tQgJ0l/qFs50tgn9iA9/uoocS+5wPtvhByC7fm4ou6B/3IgM+YDq
+WWM6nTi/tH5qdm273Mkp6h3cOlhmjPTs1MPAMERXfqhSlHOhxbeABw81VKyicOq84Zlpz34SRV3e
+eRtnD8l898TrVupwaAAIE+atPPL1119req/dGKh05auOFmypZWuyQ2He6lVs0w4pVnU5WfT5rG2E
+EOd+oIZS+iYAB1kA+Hh5WrWqzNIrJ1YPrm43zJozfPivft49P1/VFzz5bAoAIHf9k7J31198KEve
+6ur3izpc7r74TjvOjZv/PgEBAVYAVyilqVu/ubC7OLVumMAj3my0tXGYOT+Bq/flYBuytgugIISA
+YQiUSgm0Whl8vNUIDNLCP1iDgEAt/IK0kP3NMjWUAhzHw2RywWK0wWxwwlBnQ3mlCRWVVlSVmVBa
+YoDR6GjQmpEbNGIEgI3hiBSsINKIijU66UXK4pdm3RUHBg3vdPX/io/VnXALWP8imtVm1Ub4a6tO
+XExuY9MP1kfp+ePl5w62T/dhDD5tSWmXQEvublbVLalU1ZyP6J+vrbDocjOy2oeSMk3ssFaVnX/M
+rkz1ibZnHjvWpsJ3sCjKTs6nndvXKU9rVUd01l26U8h6zzemlW56/MC5QDP79IRXXvOY8dnBNo7Q
+ttU0oN0FAAArBiv1tXoLhnq/HL0/FYjgFEudTfaZcIOR/W5vA6UOpb+ZZ6DuMOi6r1TJVVtZsBiW
+kzmF/gDgsDsYtV+LSlNAr5Tf/4B7jBuWuenN5Oxagcx6+j8v//TBrl9687EDUyWaqKymx517542o
+A2V+PSJG9v14dni9hgYASHCCLenF6A+5q5bReYXHh+9681ACs6HL1Uujpn4MIKXcpfY1uBiRumPv
+CqyrP8eaxpYHi3jjsdxS/+sdUIGA3l45T50OJaiIKuVN7AFx3rb2gaL8XQXlrZJUA6tDWhiOZGWc
+jTkXqjF4+ZiMI0ZHOSMNg+K3fL95/Ibv9soDQoLMHo5Cvcsll0EsZwDAwTkYrW9UtT2o75UGf5Dr
+FFVAy3EVGqE2u122S4ikYAhvE4tbt1KdVimE62+YVz/oE7G/zLd30OBen8/prr3u+F9YzntAXKYy
+lmV0y64V7AQMcTIKabuWXmdFgEugDKFUEHgFKMCA5yUUqP+3AErNFz7WTR7RY9x/Xl/UQ+0TavP3
+kDkNpdVxRBFy9lxSjtxuh69VGnyuISqrfj0Iue7b1nXWt+VfTo6aL881jM85u+2JjUk7n9LEDTha
+kDNjNYASAEi5eq31sWqfFm2eGvV6d0L+T781u/n30XC/SqOUZhw+nL3JWFrZsrrAObAg39abs/DN
+WJ5RKaVSRq2RIizUA6Hhevj4q+Htq4JWK4NCKYFI/Oc1VIJAwXMCnE4eThsHo8GJmnIzyspMKKsw
+oabGArPBTo1GB7E7ONjtLjhd9SY/hqn37Wr03Wo0TzIMA7GIsREZyQ2NUO3SBil+9opUp/XoEVP+
++3vP/3XcAta/iLiVaXb62MO5puM7B2p7PnjRq3j/3nj5ifGHLCERAahYM2Zoi7zPvqhWBxFHfHmb
+Wad67E0IKubiH7hiha3/AGVpuyCYVqxQlZtO7xhMuz1yOe7Ce6eV8tqRR42+8lhPy7Y7DiBoqcPD
+f/A1eYEp6uiBvbHa2D7Z8X0G71kxpeP1opsMS6hL1CQEhfIEDRVDFQoxz9vsIrGhUtz4ta2uwosg
++I5ylo61VYp4Tl56bI8vgHQA8Gyp0VekVMj8Q/3KGwcgYokglitu+hFrh46yeK+tyJaUlrbds/9q
+rFfrwSfH9X9gd+L432paUUpFL3YLHymJTChQtuh1rOn5lFIGgPHXN974nBq+3TSgV8dWh5JSXj2z
++ZvnKKVz3urnXyWlLnHF0Z8DAFwGAG1LVl92kij9A73K77YqKSWEguEZ2H6TPQlJ4L+aMyi98tiv
+kwN6xp4zSjz2DCr94JEj1pZ91I7aX8Z/2z9w/QXbi5aocT96iFM3Hz+e49o4VtPrYoFsHu9yEgBw
+OgGGIYJYJrtpbnw11CJBVFWJ77B1kez8c2XJ3swFnU74vEsbvm8bOf9q/fWzc7tFDhOHjSrXR3Q+
+0vR8Lz1jZCSx5TXhD6/QnFySl+FwEENQEJ840sgnEMK/8lD/GwXK688BAQQMXbfo44fOVLYf0nzU
+uPn7v1p9bf7IcPFui25+hVksad4l1iFlzNVye2bMR5QqJ97CR5BSygIoUCSQt8936vnJQFYcv/PY
+iXknvtVUUko/Ab6UTu/05hhx7NMXomK7XLjLpXDj5h+nQQApAlCUvCb5kC5ar3dUOUaaba5nWrbz
+i23eylelVMqISHR3TumcAHBOHgLHw+nk4XLy4DgBDqsL9hoXamqsqKm0orTYiNpCK+UtPHiBolKw
+EKPgaCziTBozcxFCbjA1UlqvUROLWF4hExuIiFQwIGkREZ6HPT0lW/yjbNXx8Z3+tXms/i5uAetf
+BCHg5o6syzFdvTbbEBZ9dOW48EuvvX864Vy1T7StRFGseX1GmSRxgSOlLKhbr3HRnw8qVFS+fCz9
+0Up9t1/2+aIWvpQTXutaUJHJT1C17LPn+QGaS3O+zn082dnBK6iWFjf2s3p0RLMNl/1HOro/m3R+
+w5PnfhvBZ7KzOabOFS4PYUCfXmeJYKVMRXbUB/uz7S8NiqogFAQUN7xGEQYEYEApJbaN/crEZ4tq
+eVP6kA+TklNb7X8udA+T+wcAACAASURBVMkPucNdroDrAhellLzRI6DXppruHbu+8OLmjdO6FwPA
+9LH+aVlri9LrUjc//eyGo6Uj5CmWvcs/eiZL08Y6pGP4hdON5wME7C0ia4ovqI9nmbs6PENLe7eP
+S6ZCDTEUFcV+ejQ/ZXqveiFr51Oh0WlCXA9GHfjFvsc8jU1PP7mgY/RrF2PG+ncccPiJxE8uO1L2
+1GZezi5LsYmceQD9z+N+men/j737jovi6BsA/pvd65W74+i9SREQQQQr2HsN2LtiiZqYmKgxhcTE
+kqhJ1Jho7MYSjF2xiw1FBRQEpaOASO/H9Z33D0QpakyexDx5n/l+PvDH3dzu7Nzs7szsb+a+L0sq
+S90/ecpP5/Pess2v2Ldy1dQssQ8T6md/uzF/CBACinnplZHFZ5eyDIVWv67Z3nXPD5FZF5OfWPRd
+9tM1/Xfh2Sg7zjlLzM/8Zsuk5Jh7X3Q5mlE1Ri4I3K0p3EVp1W2ljMC+Jn7PZ6odK+a5HP3t8GhN
+va2CZnOej0oijDBjbLXvkeEu9y/tzCksST45Fs3fXhDWNbmiy/1sv2W1HqwQgGsAgKMjnJ3TsEt3
+o8Dql5Nzmv/Qar8BrgmXDtwbV5YoGtNpwcqN4bW31HcyCoJ+uNmxDuDA7YbvpeFuQGEKQZOf8aBp
+hKpLtXI9liK+rXf1pi/fYR7H7+uclpXdF1vYXRaaDal1kM45aZp1/YNvR3w07czlW4drU4/I1h+5
+H+Q8bPr5bXMG5eyb36nLd1neXXoNOXG0mx+Vxxz9oTRWqinLpigDQgjvHWPvlwI+3jILqy/XD0Da
+l5U9Qfw3CZgZoAeAksLC+D1GjV0STyzwwUZ9O1UNtOHwKU8ej2tOURQyGhlUr2GQWqUDTZ0WVLVa
+UKl0UFOrBbXGCDXValDXaLGu1oAYDQa93gj1NTrQlOpx4ypb6Nm/BixMAYKGhUxRizefTnfEXA6r
+3tREmMuXUClCLuuxXGJyx8qJn957iOI+Qs1nsv+vIg2sfxlLTXqOmcLh/v1iUZrNoEWFeMnmRDlf
+KknnhZQDONZ5Cacm59KdgNLWPXLu0rlcEn0lp8y9/bPpr5FBiox78oC0B/lUutO3Zx9R60zvSSws
+rE9SHZ9Nty+uppzqKmsmczXlJRjjxGePDhOegK2oskQFJo4atbazQVXDL0jYozi+64Rx6p5HH8Op
+HnUYoIQFrIZREnUtA4y4AjDUAADiT7xQGHK2y09Hb11+d9mIQzs9vNo/sXbwy4QMg6Ls+elI5Vfi
+IG1l2RiDTnMZAB4DAFjOv1O6aXLwStadm+9Gf3Bxw296hG3cupXbBY9cvmmwZf5mAMCI1iOESmmg
+Wt1EC66XYEd5dXGxCNmq1aqumrpaQW7sRosTO088+Siu7vPlQaLia08cuqq5ZmV24+dfv7n3nWaf
+5yjEZe6S6tpr+7/6YMR3xZSAL+faeIU+8gsdvMWxIWBas2Va8Dd04p13Lnw29rsjOiNj6dS12qZT
++PIdo1xydo4GYAAYBuFyYKgXLn8AAODXVhzX6fbDmzHbli5MEFhW+w8ack6khOuaivRCRzlOjqs3
+Twt1NCta0tPploKigkulnQtHfaXITJpVfuDRlc+nKJWLR5hYuWs6OHUop4orcjFjMAAAcChaDwiV
+0qzWDQz7d+OLOt/tspzOTZ1z8O23Nu5QqQ22nh00bccN3AkAGGOMPhoc0rmOraxxDJt1Lf7Awmaf
+D/zsZlZoWvCy64+uzd46ee+WDXqGcfYPqfIa99YmAABEIzUCXAYARkBMHUJQDg0d41qjEXN7v9X9
+6P3t510urYzecMXIqPw6hpYJFNqUyoZJAMZebdBxBqt455L2jB83YvNgvtDEaBswIMXC3OI4AIBE
+Ich3zX4o+vWrmSu/r6wBmcKOZ+Pb72a7oGFHss/0ZM3svqQHrbBPN509KQk2TH5Z0RPEfyUrq4B6
+ALiFMb5948YNHotlZuroKFUCTVlQGMsL8qrtblx93L8wr9Kxvl7L1emMHJ3OyNXpjCyGwUivNyKj
+ASMTzAMWojBA46O9hlYTphpaWSyMgKEAAIGRAyzEwTQyAsaIAj0A6BiG0XJYnEqlXPBIZsmPri1T
+32nrZl7Ss59LscSmRg1go/1fia16XaSB9S9jK+mU0iVEFqaBoHqEEI6cHLKZa+6x04rvWIsQwpsi
+Bq8rNAmiN4c71W3CO2u6ngifaB3soTtwuOHzlj4OlztAu9uVlbw6hJAxcvDg5QJ/J9aeheb18EFD
+GrsuXS4P8bbuq7VSVjWNy/rk3S2B1WxfL5uFBz/cuoOXHQ5h9IS2evsDl3M2ZmQ99t2qzT72Jav9
+ee59v4bmkn+Cul49eBmI1UzjiYcxPlM7e2JCL4mlIqGILrGSWtZB3iG2ug3UAzQMkUfOm/fTCJb5
+HneepGRvk2OfueNG2tpgWGA5bJSVjm/PimNsnlxfF1bbmEe/7u7pNVVtZhV4cFRFLcrt6xVH+xrs
+Bgkc393+ju3l0LJUCKH6Vcf7X8vHX8XEFjkDQLFjrwGpxeWyu7sHoNKW5R6w8FJZTGTIhrQk1u5e
+ERHKynpGdzLbqjhh2cBnj6ymb72RtTYYPlQODrPAUjvupVrlk+sbwp+tOWYSCdWcwXipQlFtKH7J
+9xv4dnTRpgj/94VubZQZ5ZSuut6+sj+AFn5Krk0eN26yytVWd+kGgIOz7EwfW89rd8d2qkOuWYaY
+ENjIGRFxBMmtRMcT0ktMewTXMhmH2NnaVDUAgJm8U3Y7a+tZ+R4CVWGLfT7NX+qCYJuFZv26KZHM
+knvt9pNyxrq8GiGEMY6k7Hv2TXv8WJ62K1zUsmgb40duzglRptqMHKDUUybU1YSiMpcZHWohAqBC
+XhGj4ShiwwDqP9eLD7E17GMAoLbp6PFzNzNHFLxgdd0PYZ7vug8cZVNeV6c/+4hf4tPGzPCooAAA
+QNfp2wKMo8L25G+9f6Jb2zCz9NyiugqJomz5yAANAMCgyAs56+a5RFbWu8re6thRkVlQX32owr4U
+lgZoYVgkx77v8Didxqxkhxd6acOWIP7bPT1P1QCQ//QPAACiwqLoOIB1WgDOiFFKp3qt2LGmWGtX
+UaE1ZxDiMwaDzGA0yBCmGJrGLAAAZAAWuxbJMQZskOIKTIORYgAMiFKLhJxyjLFRwYiMFEPVKRT8
+IrklO4/Pq82JjanIdbK21k9Y6KP5X4un+jPIOljEa9s8uV2Hg3eZT5PqZbmWtpZJjlSe8fFjlZ/O
+up2g7YTPl++e6JD7T+fxZZYPdRtwKk88P0MtvOPsZJ1hVpdG5VewgyjHDtX+czd8/VPfV6/BRRAE
+8W+DMebV1j4W6msrBZjLYVgGDafxvaIqLoeNMVbIdM/mHekoiZrLZekkEoEBQK5HZELIf4Q0sIjX
+hnEI68OBD9umcwODbJ1dZHK2Rp2YXFSU4z7txoM1Pf+S3+r7u+CYEN60Lwv8qpWdO9jaWQuFTK3q
+WlJFfnnIsuspS51eNqBEEARBEATxZmCMqdTUKE58fDwbY/yvaqRjjOnUqH9n3gmCIAiCIAiCIAiC
+IAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC
+IAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC
+IAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC
+IAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC
+IAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIP6cmzvfVuw5f94pMgaz/um8vEkYY2rNmjVu0dHRkn86
+LwRBEARB/BfaFAFsF7lcAuYThBhj9Lqfu7vU13qkr+mPfiMWr+91Dkv/zjw2ta4/cGUgk9rYhPHf
+1D5bwuenm/fw89jlHDz2m4i96ab/VD7+aqmRYZyP3o2wXLNmjd/aDRu8dp1JEv7Tefo3id8UwY6c
+NcFszZo1vmvXr/deFx33X9sAjwoDjlwul4BVhODFrw8W/JHrQUuRnsBxAZCAf6Tg91MTBPH/XtSC
+YDmfDYFst76+5gtffXMp3OQvaGsj9GFLbAKdZ50xAwD4eXpbc0evLr59F0TJ30yO/3PbhpsMtZEI
+UziK4bvPYPxaN9SCQ8MV4/zkP8lNffJ9x6ybGYPfzAgWxhit7iOYI+aZ5pjYTv4CP90vjgrm9/Sz
+83Tuu9glCmP6b89HZjR3SXfJfBuldaE86P3VEW+wgfl3Of9RR/Nx3Vy/tODSOWw2u0ootsgPXXZx
+xD+dr3+L65HB8mm9PRbZ8tnpbDarki9QlAQv2DftP2mk/J1+HCCcoBCYZIosx36PMeY2vr55sDTc
+TCRO45mN2pSP8Z/uxLzjIhlvy+dlcv0WbozOzOT+Xnoc3Z/bx9/B3anne24x/8IR8R8nOJvx2RAI
+AEEv/2MHcdwmu0dF/f3XKOK/A/VPZ+C/CYemXS0pOIirq6Plj1M7vSrt2VOlwTqV/ihGvEO21hIf
+HO/PvpdUuKSyuODc4/x7U1Mx5rzufida8AOVfMl8XvevQt/0BRkxSIgAbBCAmfA16gPGmLV21Y0p
+53MFw038hv48Z++83aEIGd5EXgEAgEESALAFgGeN2O37CoNLi6sPVj1K3nLjTIHj350F5DpA+860
+oVu7m6kOGTJPTri844eRGON/7bmEcSrn13NZM6JvPXq/UuDKEcrNjjPA7BcL6Nx/Om//BhhjOupi
+7pgT1zM/KuI4yERK69MMNu4R8ag0hBD+p/P3IgxCYkDYBhhQAMDzaw5iRBRGNgiwkm76+gss8rSy
+82DDbI7v9FHBa683a4xhhEQAYIsRmBYXsH73mrZ/V4Z/RXH5r5V5ybv2l2a5/cnD+sdwgBmMEHUB
+AGIB4PoL/yh0gzLib3V2FWRk+H/Ev66n8HeyoXlpHR348Q+zM4eAOi0oHuNLAQjpW6bDGLNG+9sF
+FddhW45j0MUhHWwSoXYwjWA10tQbaW0tUJ4Ar31hRQj1oQBHAqJ+BoArAGD8K4/rVTAC3JDR17sR
+RM/zbnchp26iyrRP2siFS7bPRKj+b81gCxg1lit+ll+aTVMGrQ6pVJjFYjhv5IZmMXG3av/8Tj9l
+/pYclBp3dtZb6wKuAkDmm9j3X02zdZ7lvXJdjxoswd6D312+bOfMHYMRqj/2fvd/Omv/DgcGyFPL
+dT1KtQKBe/9pq97/cdH6aUpUe27FqH86Z78LveC8x4Ch6fn1MpgytAGEVmEMqahGGAMA6labeo3t
+AABQNCCjTo9UBsymmdf7zH8ZCoBiy63dMzw8HE/RBpWKoqgWDUsWcC2c0q3Na3T/TBaJN400sJrw
+X3mu1jrJ7bQsO6t/3sO8Xsu/e7QFAJ60TPdggaeyurayW7VRBG2Dupxc0NemEqFIvPXDNh97cXzW
+KLy7lKMXNMxehtEZdAA0Y8SUDiH0xhpXfxTG23mT2i8emVcvdrAbPHjjD334BRv/6UwBwMSesstH
+q2WhLEFHo7C/Wdmb2u+o72PTTl9WHs3JvLY4+WbCUIzxWoQQ86b2/1cpfpgvQIxRgtiWVX3D/GIH
+v+FG87+dOiOfRxu1JphlXd+xm1PsNCWq/afz9Cao63Q6BGDAiDKkFr/+9e5Fwqfb3jxVKe+jha5g
+Nsq1BEb/Vbl8M4wAgDGiBOZOaVOPHl89VQAl8OInAgx6kyP+xD/qX/tY4++AEGICpCjOzZSTVZ8W
+51tXer/di9IdfcT2yM6va882839obmYZgxDCOCqMvn8t2y/51u0B909HOzemjbDhdzQVmc7i9/mu
+44UfZ1n3a28/wsTcd6rDyO3us1xYISIue3acmulcb9BROOdYOzabPY/jO31ESGQuD2NMjZCyeomk
+DjOFAzZ5t8zH4vHBLlIKZll0n9G/f/TzOAqMMTq79UOrGX08+1vJ5VPZAuuZHl3Chs/bH+/8nzyC
+PDx6md3D4so+KmVAvpOj04WXPf4oiYkSrZzRo1M7C+EkqUAW4dhhcPjba495tXyMNtNWEGAmks3k
+D/oxEBftEi6f2j3Yy8JkklRqOSNg0PQBGx4UKF4nX/tjci0exKf2Tj0X111yo4ALALC2r5c8UAgT
+Od6jwnqtzJae3zjWaWB7pxGmAkGEjVe3sVNWb/PEL4nXuh71pXV4F/fBAq5opljZZmqfmZHdVpVi
+cct0CCHD4HbiywqBpig/9tzwz089tnqd/GKM0YV1Ec6hAa4jBQLZTBMr7yl9533ddV0mfmlQ9LV9
+q6ymhboOtBHwpkuVLtOChs3tHxmVatEy3fKuLsoOQpjM8Rk/csjWNPHpteNdBvjYj5QJBBG2Xj1H
+R6ze69543EVnFgrbizgjBmx6NKGgSmfB6Gv4O96ZOgYA5jgM/6R7WJPywbkxvPULhgS4WSsmsNmy
+2Y7+A8Nmbj/r2vI7fddV5OEg4M5kBX3c68yuSLPwbh4DTOV2M6R9Nvo3TZd+fJPp20MCekvF4hkC
+qd2M4JFz+y5/UNPs+46wF7S3FEln8vtvDMJFu4SrpocEeVmYTJRKLWe06ztt4Or4l08wyD0cafJe
+eOdQc7l8GltgHeEdOnbo4sMPHF78fUTRuyKntQ1wsxrNZotmW7l3Gzvmm50+8RizX7b9hjLZzusk
+EwxsuzptSmaJxgGMKnb0t1+OAIC3bXvP6ROW+jxMAMfHs7d+Mt43xNl0tIwrmGnZptu4kQs3dIzO
+xK3ik2bYCjqYiWSz+D2/Db62fq5Vv/b2w6XmbacpRm53f2V+MEYnN7xtPzHEfZCpVDqdLbKL8Ok9
+fsiiY9l2r/rcH7XIX+ZtKaBnHC1RjSw3Yh5TnGCl/iV0Jm3XbaIy7GSzOokx4BCHh7zv5/fx91GK
+J0kFphFeoaOHfB1zq1m6Q1tTlHfvJPVMv3wltG53Mh8AYFOYv7SrEMZzPIaM9l6RLIvdMs1+WKDz
+MFOBIMKyTedx477Y5P2y+E9ceFzwybiunZ3k4qmmUumMDkNm9otMxfL1vTjeclPLGZIeqwKbXgtx
+5jpJ5NhO3VyVJlMEXOksW5/eY2auPuKJ/2B8KcaYKWZAjxAyIIR0L/gzAABEz+vP7cmHt4SOnSZ4
+fBRveerHdx36+tmPtOTxZihtvScPW7AqMAZjHgDAmR8Xmo0N9R5gKhBEiOWO04NHvt93y+nUVnG+
+GMezty8a6t3L1zpcIJBFiJWeU3tO/TR0RTKWvSK/1KE1E926eDuGcbmyWQq7dpMGLfw2+IdULGqd
+Noqz86MhPsGu5mOkbMEsha335P5zv+18puj1YncJAjCOFA3xUPwoZAuMZgO/Xt3yIotjQlgf9DBf
+xqH4BpvQt7fOe3pTxNHzuB8Eczex2PbY1vvd9xrTz7DlLTcVSLXuHd46FeIqP2QqFdYIzL2rnUZt
+mzKrDfsnHo30CDV0gAAhBiFk4LWbfjlwyQMFxpg1QkrvE5nYayQDNs1vmdfFozuPktJIb9kj4nDf
+01jekP8Y1vdjPQb4WspO25mZFAr5fDWbI9KbmFqWmzkFXA6c8ePwpse0bZhsjI1EWMVVjDh9Dbdu
+RDS1dIhnmCWbVWfda+62qWkvTntsbqDjwDayjXbmiiy5kFfP4/B1EoVVldLeI8Gt9+y318WVP2tE
+RNjxPlMKTTQuAz7aPby91dfOlqbpMiFPxecJDBJT2xIbnyFbRu974vD8u8Hom97CRWKeqd7EdtL6
+xovfb2PN+nqacgspcb/kb85kmQEArO3l7h0khAKOx4j700YM+tDTRnnJSiEpEXA4BqHUVCW38bsV
+NHvzkKYNBIwx/f0Ay34dHEyjLU2lJRwOV88TSLVyC8eHFkET1vXYkGPfqr4kRZoFmglPiWROpYGR
+Vwe9qvwAAPD1tfxpHa2mulvLYs3l0goOh6/nCWVqUyvHHLn/hM2BkTebxZ9gjOkVPW36+dnLT1mb
+SovFXI6WL5Bo5OZ2ReaunY52jvg+tOkxrA519u8ghCfctuH3Iob1/tDDWnnVUi4ubThuZZ3Ctv2N
+zm/vGgAAkH98qXUHKe86CyEGATAAgBFCBkRResfhkRv6P735J30z3GySn3yZs6UiVSoSqFhsnkEi
+t6hSOLSLdZuybVTTm9w7btIZ9nxOvYXPiOsDPcx3W8glpQITW61iwIaPG9PsHOsY2MNVvs/WTFbA
+43J1HJ5YJzOzfWLmO+iXwE+u+jamm2MvWGoulGgc+i3ZO8LfaqWzlWmaXMiv43MFBompbamV1+Dt
+YbuKWsXcfTslqH1nB+keG3P5I6FAoGFzRToTpXWpzDkoxmb8jpFN63/p0ani9zop5rexNk1QSEXV
+LBbXKJQq6+Q2HnccR3w1b+31lwd644INiq5K4QlOy/IDMNr0nru3f1zDteHOt5NNprSTLXW0VCSb
+SYQ1fDZHLzIxqzW1dk63CQxfOXdfYrOGeYSt4AszgVjr2iHsdKir4qBSKqzmm7etUY7YNfmlecFR
+nM+HuIS1tTCJsVZKiwQ8nobNFetkSutS8zbBZzrN29GnaYfih4GiOQqhVC02H7cbP72RAwBsHiKe
+ai4U1/HNwg4WYvzCGYBL/GWzrflUDQAwCAADNBw/2y4k12z0kU4AAPNdpbNs+Lx6eYc5Zwd38lrp
+YmWaIhdwVXwu3yBWWFdYtOn968hN6c8ajEfHWnbzs+DkUoJeWQt2XrcGANgypL1LVyHksF0GZE0O
+D1/kbWN63lohKRZyOHqhRKFWWPskdpj43aiWE1uydk0w6+tj/aWDmTRbzOfp+TyeTm5uV2Dp3Xfv
++A7OUSYmlrUmIV8vazxvzn7g4drXy3Sjg7k8Ryrgq7kcnkEkM69VWHknuvVaOPeb12hAbJ7gOIPP
+Zuus/QYeXF6Llb+X/sTisbKeAogXWrcrHNp78Pde9qbnLeTiMhGHrecLTfQyS8+0dgM/nPNz5PSg
+Lo6mv9qYyQqFHI6exxcbTMzsC5XtJv48dV/as3pTuHeM6QR/88VuFrIkc5m4gsPh6XgCE43Cwi7P
+NmDElpGrY1o1zktiIkUT/S3muFmb3DSVSSrZbL6eL1bUK6ycM2VB09aHfPu8Q1L+S39JRGeLD1ws
+5XeVUlENj80xCERytdzSJceq7VvfT9j51zbi/78gjwhbQCiybk1v5cW7j5mw0jvnOp+4OdccAAoa
+349NcTK7lXi1D5a0UfFFjufXu6KaZx/GwAAAwzDQ5DERZWR0NfTDlNOhBWxZsYm110XvNs7ZZu0s
+U1wFwedD2wo30TeuTr1exszSuI8+Emiev0pv61pr5edeBQAUIDACBvx0281RiAEAIxiBYRkaYpP2
+TZ3b7ftTj74v0Jma2vqF/PpWW9k5GS5G+XGXel5OTZyQdo67bNaHXiXQEIz52jCOYC/sd7xdCTbl
+tuXwUra2gfptLdLc/XGQ9Sdfn/vmShFrEKP0SfbvHvSjj7z6YUX6rfZX72SOz43TLF+zWGqyIB+v
+/dYWqRGijKCrpfOv7hhSIVIUWHr4n3rLjXdbn3vb6fLNu1PyM5nx1zZ8l4Ux/uZVj06xETAGYABh
+o97YEL9BUwgDhQy67IvOh8sU8znKgMSOPZwjHak8ze1r19+68/Be7+RT0YtmbOmY2Pj9rh/pHLrz
+Vuna+zpzKyvvfvsneYvOcUofWMdeujk+4+6JiEyROZoTg5dsDEV1z3bu81l5O8mKtPQSTUjmxeu+
+AHDi5WUYRb8T+sG4synlK8o41nr3jt02DbPn3kbVeSY3rsVOznhwZGIK4ire2Zsz5/uxTsUAAN+/
+5dFr/52i7x7oTK1lLkHRfQNcT9ros4z3Em4Mjs9OHJhwDLl14dnMAYAYAABkRAwAMmgzzrkdLFHM
+45h2iA/q6/KJrSHHcPtabNjdvHs97p4+8uGcqNxEG6fbpW2Cuk8MYef5n47P/vx+jZO8S9iwd+py
+bqU7+ViWHXABXcW5COl7C/Z+dCLHEKFXtk8L7N9ukZdpbXFB3KUesQ/ujSo888OXixdaVwDAuYYq
+CQwY9bgs/VTAVa7Mkafwig9oY5WtCLC6eTga4NAsn7bfH3/w7e0qSTuJW0h0+BCL30w0D8UJl66E
+JT+4GJ7HlvGHrC+dd2yespBByIh1KupJ7M5Bl0SKAgt3v7Mj2whuGh7edrwclzw5Lydh7PXNa7Ix
+xisbRwbOLAlx/2T7re9TqtkBEtfAs0MHOh1UcmpUD27F9khMjx9bfOnHrydMBg0AnMR4Hffdjp/N
+Oni/7qNykVe5d7fAVUF2hgcVSbEdryZmjCu+tP3TnTKnKozxLy8crbX2qnYNDJnfgXr00/WkzM9v
+Flu7dRw67D0ou5ug9LWv9O8IddHXPhRPm71p0cms+nnVYvcij86d13dwZiWivESHq7eSxmXfu7hg
+30qh2eSo3I92hDsWAQAAAiOjq6PyUk6FFLPlJRJr9xhvN6ccRXuz+wcOvaheYbRptGv/n2Mef1cK
+ViynjqF7e7oIrpgannAyYs8PuJZxa/QDJJYGfe5dBADJL6ufr8vSJ+g3f2sc2znnXqf49MerHtoO
+fOTrLF3AlyuKRf783LP7G9IhoxZVpUR1vSS1cLR06nNxiI9sFasw0eLa9cTJWQ/vjLy6ZWM+xngp
+QkiLaAODMTCA8LPHZ0YKYaCRQf8o1uFYtel8lqx9Uoce7l+6svJqE29cG5aYmdo/5dLZRUe+878N
+ADkNZbGAP81vz5yEBxXv1Ylty927dl7v46xMYj+6YnszJXHo8cwqr1pKQUsoZEAIMVUrushm/3p/
+yZUs/TiBU6fLIYN8lpvT1dXl9692jk1MG517ve6LnR/YqDHG21/r8T8FjET0gmv1CyCK1muKUs2v
+aivDpM6hV3r1iZVnPwAAIABJREFUEC1lA4PTrp/tn5yVNiAjtvrT5bdxlVZgq/Ls5LHZzZyXo86K
+c78clz4mL+PsxDP7A3Mxxqvg0hT27KWn5x5LqftAb+L+MKBv9+VtxLUZIlWOMvb8tUkpSWcm3RDZ
+0mFR+N0D4ai6oZwiORGdtkw796AislrgWOPVqcs6f1vqLlOWYxYbGzclO/m3GQlIIF1x4tE7iwdu
+r14+cPOEQ3eqPq6Xuj/26xO63NNMl67NS3K7dT1+XHZa5ewLG79ivXsHL/3OD1X98RpF/E8p3zfa
+toOcd0UgcyxrO+dEs6nqB2a2GWrK5VSaOPeIHbS9xLXxdRw9j/tBEPdHFtveaO317ruNr8+wFSyT
+s1gMz7JDcsi8jb02xcezo6Ki6KbD05PMhUvM+GIdP2TF+uYjKvHsESb0LyKpvVrSf9PclvlcPLZL
+mJRGGsvuEQcHnsAyjDFa3Nd3rq+Hb6xbn0+X7GrS80rb+qF4nANnL0dgp7PtuGhh4/5fdwQrc904
+ySQP1mFa3LbOrefXraJ3McbUR51M35fx+Wqh69Dzvb695/H8vRjW+nDnYS4S6jHLvGNB8Oxd3QEA
+ZtoLPlayaCPbKjjVZ/7xno09bIyj6DVDLd4WsTkac58RJ6dew1ZP9/HCEawDo8z6eJhyCyhJ3zvL
+ozOVAADf9/FoGyRGD4Frrrbo//kXkdGZksZjvr7A3TvAmn+LJbSvCll+ZRgAQHxkiOlIF+ExFt9K
+bdv3808i45/33vdNDPALNOfdZot9yvp9erxny2PfOEj2tlQoVytcJ27Fr5javv/tQLeuFlQikrap
+9JyweXLTkZ+YJf7unS15MVy+ZV2XpSfCAAASl/dXDnXmnaR4Fhrrvp9+ERnzfNgenxgrm+RnslrK
+42mFHhOOr46vMQUAWNPNxa+DEOUDz7LectDyj1ddKxU3HvfleZ5+7Sy5d9hip/LeX98e0Lit63Nt
+vDva85NY4qCCeTvv+jXN89pe1uH2Yl4p1zrkTqdPYjs0vp4bs523sKNyiYRrojH3Hr/720psAgCw
+oI10mh0HqVkyj4KA8V+P2R4Tw2us7zgmkjfT12QDjyvXmXacuSnieM2zR3znFvWy628vOMniOdW3
+H7tuMgDALAfhYjM2ZWBbBD1o+87R3k3rx9rhlrPEbI5a2Xbo6elx2Kbh9VTOLF/hKjFfopX5Td07
+/qDKsnH7+VFr+e91Uy4VU1yDbdcpOyIxFu0YYtfZ15SbQcvb5fvNPda/8dzDGNPLQ6wnWQqEFVL7
+AZfmX1W/snf+4F0Hh96u/KsUv13l+BWnQpqVX3+7wc4mnELaLDArcPGZHk32gU5/4N8+0Jx1myVx
+qnMY8OWsxu8pwk7wmYJFGwWWHVK7zfmhz4uuGU1hHM9+v4f3x+6eAdfch3w5N7PJsgvnlw9XDLdh
+nWIJXdWuPT6f0vj6fzKC1Wihl3UPDw6qZPlMv+Yf2fxx7XxX6SwbDtLQpu0euUX8OqyxrmOM0ZbR
+NmMVPE611KXn9bHHsSsAwLEJyi7tzDnZlLBnWuMI1qZh/s5dJSgDOKZas56LV88+8UjWWAZ3l/i6
+dXEQXqF5VqouS0+NadzvujC3QD8FnYkkHuV+M3ePiY9/PloZNd3ZP1BBx7EEFgaTHt98BgDw3ZC2
+PgEi9Ii265cZPO/os7qPcSTn7V4u7zoqpaW2vd//9cOjpa8c3d86wXGGgMPSSCzcEk2sXRYAwHQA
+mNH0z6z72709oxoeG59YPFbWS4Ru0BxTvU3IghWrmjwRuLC0h/UgF3E0AMIcyy4ZoV9c7Nx43Bhj
+6uNAxTxzvqBe4jDi7LZarIxeHqYcH+j6i513/7PdZm3r0bSerOvvEuQvo7MpRff8oYuOPAsz2T65
+XbuOZqxUJGtb2m72nrDIJved0+/5+QaY8W7yxPblocsuDyg6s1A4WElHc2VutTaD1s1okhe0bXZw
+97YWokwrv0F3Ahedfjb6TDQgMVgvIB+973FPR84lSlMjKb1xpHvjBQhjzD52Nq+nlmUiYFt0vHJ8
+svLh72+NAcQWGTlWPa/GrJt9eWZAgD48PNzYtEeMqcYTAiP4nanRr4IQwl7jFx5cuPKLSZ9Fff4T
+b164JizMk+Pi4sJdufuW3s1dlAF6FcU2likB4JXxJS2lParhlJYYLCiRuE4jt6loleDqTPMLuere
+alqOlYFhv51f4P3geb5CDXPfsj0f6GRyApWmWFZWPglpuFkyAGwhwzHveiPp+0HXGkepEAo3Ovq0
+S5RShloto1Gm3K1tFQ/wWjBGlKlPsYud98HIAa41jWUevHZBnpAtyOTgOt6TwmoLAID75Uav2480
+nQR27e+btR9+IDLgeaD36J2371lJxeeEumzJg5ySTi1vdGY2ilKa0RhYUGy6uw5eeiEuUul8U0op
+D4VrQKxDjxmnmy5vEbI8Pr1zQNttnQNcLshoPQsAIK2k2vtWni5YYOObZtFuyIHIJiNnaNDeypmh
+VnusxJBhLL7R/tTlvCYxehhRpn6Fno6ehxZ1UdY2Hne3ZRMeCtn8bDau4z0urGgev/W0z80YDc/j
+UvA3wgu56h7lOr6JssOoI7FfdIpvfM8xdIqm54iQQ1ao5km9ttBn26YC22d5o9iYtuyWNHvWlBNT
+QkM1jfX9Xso9hytZql60wvmJwj9s/+bBkmcTEnqvOp9na2N+WG7Iox5XlXWJerrMCWIJGLZF55v3
+vhtypWn98PT3T5SCsUbPaExTEsobyvz4SosbT3AnPc+0xr7n+F9/GSl8NkHFNvw9tXfHblG9g1z3
+uzhblbullAivPGG6PqpEjqbtBp3zHTk4pnGEAiFknLZy0mlrjv6BUfvI9ezJpFfGPjUUVsN5q9Pp
+mpTfWv71Qm3ok1raQtl+aPTCCX2uNdkH7vt1wp3B/ha/cFT5XH1lWuj0+9AYK4MQW8RQlqHXLv8w
+59KLrhnN+Rv9pi7aEbn6i0kLdizdfSccGcI8G877Ow+yNY7OokysrWVzULnyZXGHfwZFN9QVBBgE
+HFWr6xaiuJhj3unOpndCzzfWdYQQDujRNUlCGcsxo5Zl3c9/9RpyGCNa7lVmbe1z8MdB9pWNZeC7
+/P3HAo7wARdU7JLSmsYOGPWwmvHPrAAHmXu3Gw7eQ88GBDwPvg/7OetuWyHnlpAGIzRbmgIw6LRc
+SqsSNjaAEYrUKcWCvb5u5hMdxNp1zkWPNL9fIgxTU5TpV/MkZy1FUT9TFLX5+R/aTNNojhkbnjda
+MUaUiX0NI29/Y5H784kRPb68UCJWmt/mUjQWe3SP45mExjceN0KIGTLALonDhXJG90Sech9k/YO9
+Knu9t/SzFT99NWPKj1Oufx4aSod5enIAQlheLlAqM+Pl47piMYejexpGglFutc7vQRlyMfPsFOMa
+OvZCZJPRub5rElM6t/fcFuTvdFXEqNnmAAAUwmAwspCmVgRP7x0IIVzHMokLcLeY4SBjLbLnF+T/
+fhn9byGPCF8AIcQcXNL1jPzBzRk1qvyg0DVPHAAgrWBdd4c7KtRRzzap9Bkw4uJrzxSkKGzkCzTw
+BpZfmDBhwpMTK7rITu/8rmtZaX7vjPzqNqo6JDlQmccWa+otDEYejWiGhj/YkKs1ILpOBUIk5mhA
+adlyOjYkRl+wUgG2Y1iK0l5Dg25v2dP8fRR+qW5OoP0tJV09Me9JRdvNAA29bIQwwxNoAKDZzBoD
+0Do2g43AMBRj0P65RicGADZXV43Z2uZvuBlZDNZRCAM2GmkAgOqyPK9izJLIKbWqTfWeQN+pEz2M
+gCgAGubMmayn9UYFCzCUFzyxu38f2ADwbKq1UGZSh3C+kaG1/JQieOH6ZxhHUssHbXSvQxK2vUCa
+9sNkqHKc8vx9hBDOj1r7W3Qlc+qJzERzHAAqHz/0rEICkUIsS5670j9/yqrm2wxe81G2ze5pGXmM
+ru+9Oylu8PQxIQMAwOXqqrSc5scttW04bmCQgTH8bueq6oe9ptW03k2F+cZ2/CzelBlThk+aOhUB
+GAExCEfffsgXI8aortcpau4nmT7bN0Jg5Ao01ZSm2Xeal57iVgK0koWY4rbMJffOEyeaGFksCgCA
+zaYM6rjztlzEGEuKK2xzcoD/tGAwwxW2OneMiKXjIMaIMUNp1ahhZPLiDWs1gAVQZmV9Bvtk3F3d
+/HgmdxiVo2yXPe9etTeMeTAXHWXUbaswh2rHKTHivbMHTpo66WlKGr7cmIpE2Ejp9UZRVWaWJfwJ
+qu+3SbTGejc1pdB2amt3LdwLNZuejxDgDRPtbtlSBVUP67SuN/elyACgofNCIWzkvd4142mjrWDb
+kq7Kuz+v6lNa4twzvabYtU7DEn0ezbCEapUNg9kIUYgF/0EH7g9DAEY+X/OwRNWsHmA2V8fG0PDd
+6X+nHmIAYHH0tcBp0cDpaqQYrKfBCEaDsWEb98NZBmOdiwoJKTtrs6Qxb4trD7cY92exGAM8baxg
+jBFs7v3odmHFsfR7idMTf/18R8ecg4dGjRoXk16Bs/IGfVp0ZJr7KYAMuHpowyuz2TCLkKbMXf1u
+h/bqvpOnq6jBCD0va4YBvnfnPAs3qL/U9NhoysAWCFp+x0aaMdbyKWD4JqLqkk7NHzlyhUItAmxA
+SM3SaIBGoZEGjOHhJ5N7OJR/rZqWXVnQJa9SbWViWst/aw/Dw3VqB4pmjEBDQ+P6UiitqS3yUFFS
+2kYsSY0Kg9qmlQIhZIw/Hrnbs1B0sIaP1NBHpO7SyfG3W+eLAopjf1zq2v5KQNi4icfyilQPzilG
+Fh6LGXMZIYTh4pFXltH/ItLAegkfS7t7wXa3Yn8rzO9TdG2vHwCkbYu6H6hSG91o665xI0PdEl4/
+iAkDGN/MAqKJX3ay/2Jvyucx2cxwttyykNJTGVU1lSUGQzmjkCIKNOi1Zrq1xEUsSgdAIwQYKLpV
+T7qsvJYLGHMQltXbmzSJS2uCqqyt4iEwGurrxVDZdATtpSELCNDrryf2MmwGvajsEWAA5un2VZV1
+cgQ6eJJ2sev+9JiuLdJiwAzCNB8ENTWSagk0GwWgEGBAGCOgaI3uJaPCB1KRVqMWIiQErIZqB4BW
+jXPb8PfU0GQtofp6lRAhHkKMsHoygHZKyw/AuHqJcVINwpg2VFU1D8TFDMKsluvwAAB+zQXPACAr
+s5hH6fVirKvlxu5fu/h6q2JsiJoBnb6critr9jiJwkyrfVcUV0op0NPVjxM8Dm++03qFD4wxBoTY
+KpWYqW7aUH1x/Wh5HBVVdVyEMRdjYZ0NV9NqqQQUHm4EgEoAgEmRVqaMTmMCjIpKOvPz9GSEprc+
+NoxAatRATfmfGkF9/KiKxRgMAqBM9AJMV74ojephTZWYAo1Ro+OzqyubzSik/sCCHzFL/N1XHLy7
+PO4x3ZOnMM9jNCirurriCTBlWCZGPNCCKfwT60sxrRt0iGpdN35P63O4yeKljWfcrVIKdGoBogQM
+F6A87PcbpwjNPF99bd+HKyu+jnqcXlw5oCjp3LikSs27XJlNUV3lghiv8C9/83x36fkDnVCrTuUL
+UCyReb7P119HfSRGpS1HuhtGocY0eQGAAkD4BedKw7NwAHj5rO9nKxgCAPww0a3vsXOxX+ZoFI4i
+qfCBtr62oKa2UCPmIgGHg5Sgh2ePgSGjFhl1OiEgE4w1UA0vKKeAwZH1AFAPAPDBRABcuOnXnOk/
+aS7ezR9tLI4PPH2/doSeLVNblJXf8oq9crjnz3VHLswQFb9GGf1PIQ2sl3CZ90utw6m4M5Ks3IEq
+VWH3rKKsC4t6BweVaIQCl04dohcES6re+/3NvFEYY9ZsX+WUSzlMmN6x76ke/QetWbFoYoq7EtVi
+DGjtcOXiJSeNrZZ7eB1Go9ogYoEGGxkJo6prVW/EPKEBo1ojhjp2rY5+cb0SCPgGXE3RbJ7WIHtz
+i6m+DppN6QHxkdTMMcZoKDlYV17aejFABiGjWp2jtWneONJrdGwjpigaI521GF68xk3YAUxtkesx
+GAFoIwcabguvLAMOh60HrAcMKk7yCx/nJ3C0QPMwAoz4wr988UIhh8cARRmAbV5v7mCxvigzKfsF
+yRBtNGpAp733e9tjcVkGDGzEM3G8JxAatlc8flgLrUZUEAKDtjjYD2rz/mB++Xy2ERAyItDSWi3r
+lY/AhRIZA3StAWi5wczBbltZXmq8Ud+qzYuAMRqgXn3zD2YFAADkpmIGoUo94HraiHQvHNnkWIr4
+OgwsisXSq9ncP7U+Es6P4k/qHTEn9jGnH+3S79f+I4duWPVJWJoFQiocE8L6eEXyipUXoc2f2fa/
+SqCSYf3CraewDlGMhgOvOVrXZczXhRjjr2/v/2rvjxt/8byZW+6mkGo7Z6VeGFLwMLcnCBSfh2G8
+7cBrrVH4vFX8JlbxpxjAF5b2sP5qW+xH93X2dhY+fVe+/c7EA4tHBOQjhPRPIn1sRuzI2XEmB3do
+9jkWSw/YgGikZ8NrlBOymlkPAPvyr285s/Pnve77z9x1Fyt4fhX5NwdmZT5YUwdsz+E78ReHJ6Hy
+v+tY/41IDNZLIISwt5wd526qz3qckdXll8+/CyqtqOysUfg+trEwi3mtGSWv6xVbQvTTjjpu/V1x
+6Oe9eJUQMKTMUNws03TSIJHBO/zDfYdXT7rh3mTRQ4PWyPoDC8w3Y6MQGSUmqJqpVws4ZQWt4oz8
+OrQtZQMqpZhS2dX4YueW72O8jqsWYvdSI81VWkhz5gBoW6b5J5mYKx9zsNEosPcpnxJXEgUAP7f6
+Y+o3ax6sPx/aYqHAqrJyGUYsFsLCmkBbeMkinRhLFMocNlPDaFl6+wUPodXU75+nj7NZMHt29wUb
+zzsBAMgtbHI4jEqnhXrHT49Cq3VvtHs/s8hjsewZRNXbebn80fbI7/IIca9lUdwyNk3hNuO/T4AX
+lQnAZmN5/K6cEzPzAF59QbFysi1iA9ZwFTaqfttzTwDAltbbYzbrsvYeDUXoNWJemvP18y6mAZUj
+KJWdT623afl+1IIwfuT0cUEzI38KgKAFwOYIC9nAIIvus9INOt3WFx0b1OZsK4pdnPpH8wIAYDoy
+uI7mCvLYxlLeo0qdR+QLfk6JZte2eWSkTKQSboF1QGD1n9mP5s5xi5sl2mDMU1T7jP9sz85PwxMs
+EFIBAEBGLTLomL+nI/3ftlymZ5SB5svyuLgOl2sNjjOftHpcj1uOqH03vaO5h0dA2/C3vzHvMHpp
+wfaraWfuF5SuP7Zhxqw+XoovZKosSc61K5Mttt/5r/x9WRYFqKS21v1Oid7XxNYzqd3CdfuWjOyQ
+0xi+UlVfR2HG2DzuLmKwkSdV5LCZaqhnYacPoMno1lM/zhrtMG/2vO7zN121i1vXXxLUvq1Htz7T
+HYuDp9V+vP3i9ZTCim3XN73z4dge7jPcOCXFT5LiR+We2vGnOu//n5EG1iuM+2VajplMellYFOd0
+4srV+feLaQ9rT4/zHqOG/6W/0cZmIYwAAGt1LS6E/tjGglUG+nqaV5Vu33S2D87dznucneujZTCb
+AoBaA2CoZmgG0ZQRY7q6qLDZY43bH7e1ictUBTDMnwtyDfYEtaUNPxvXVwl4xiet1nnhTVhb6C/j
+3uAYq0UPTu56a0p087Vgzi3Y5pH6sHiAVuRca61QXEEI6fGbjAf5HQq5Y0IbqT6rJPd+l+gvdvRs
+ObwfPc7aJmzCvO6z9yQ3W7QPY4yyMyptEC2gtVzHxyEAdfACCCEsFiqT3US6x8UP0zvH/hTt02w7
+ceMkZy8e/2jHrkOHTySV9wEAMLOyTWonQ6kVeZn+qft/6t18hmkM66sdt/uU1Bs8QeKR2aOrfdJf
+VRbPDDhZ5iTk3JCgKjrh8O6x/dcVNGu04DCgv5nQpWPI/C1tXyd42s496L6XlEmuL3vkdfH7b4ZG
+tvi9zuvTJPIZYyZ0H/HtlT8V82Q6Y/RjdxFOpnTlysSjO/tFtZjRWZBzp9funVFHDp6KW/oxbxpt
+I+DGWvDqah9cOx3eZVmSR9O0GABtHe/l23PG6g7RuPVioK8DuW+r9RTxrpvztLUZV6OHX9+Q0WyN
+s5LtAywu3sp6S8WxoEViy+vnx0DrySOvQafBtJFClJExsqoLC5o13K+lqxzv5Kr88As6aP8pFosF
+iALM6I0sYwX9j5/LCCHGisVOchQai/LvJfZMXn+12YzYR5u7mT9UY2etAdNPCwNVVZaFZWfcv3E9
+OWv5lEvwLOBeFhpZ1Z6vSzblQZ22rl7KoqnX+21ZBmEO/s/DGv4ITLPYRoSQXqcT1KSVNltw+re7
+Gt/8Up0jAsQ0togRimRkXOkdJ6GmOD8zJST+q0vN6/7pMPnpE8e/2L3n8IEzD+q7QnmJT25m9ok7
+D9J//WB9hmdjOtTpPXUQ33jPSQRFRo1OYFSrXjnr9H8ReUT4Cgh9oFrTXXn5XkF5+J0HpT1A6lmt
+lLpcXO37tHf4F7G2RBV0pVZHFcS0f/tLi947fvstX+DhkYkQ0u2c6By3Ozt/ak366eHBYaKHW3bu
+vEY9Oi8ZOCKy193M0unapxdOCy1Q0GtJeRvJoeScssruOSdXzxw0/gPc11dYkH7+oP27u3KHpZYY
+ehsYI2CE+ckN3/3rjyKFRWlFv7ilcHQlNEa1zqkYc7zQ86BdhFy1Zz/qsCdly93Qu2kHh1+ILFJP
+X7btwBBnqvjm8a3uHx9Onn63TNhW4e2/1zRg6FX4efZfWYT/seGrOmRfib+z4+GNB58VXtjweZte
+d6xW/Hz4sqdZXd3dfZs8v7qcMOkhN8GtW/thcwHg4vNPPuTefMi4MSy2XuwdmPaqn8GYPlT2IPau
+fG9ucuJ7mVFfLus97csNM/q6paryEoWD5+59K6FUPVJt2TU7oL3HpUwA6PPxe/nXriZuyb6WseLx
+5R8XBwy9J/5y69FYd12ScXLo9J6Xk2sjypEVtg/st2V1D8v8NX9xmSCEDDeWBR1O3ZTU707G0b5x
+P5WuGTRv3S8Te7lmMLmXJWO3be2VVJo+2eB+59JegMXwNL7pZRzHfFfa99CJrZmn83yLb25d8HPn
+dJOF30adDHSCisKz++w+OX5qbBbc6easzIgEgN1/PL8TVTsnOu++d7QgJP/Gjskf936sW7Fxzwkv
+E5Um+rcd7XfdSJyXL7Ln2Nt6nV7nB2X5I91i7hVWninPuzDi3u76b7uM/3L71CHtk0xqk9kRWzd3
+vn0hf3qlTfzj5ATN2wDwp0YI54zzPZtSFHPmYt6FoYk/zV85bO6qHWO7tcl4dHWX1bhVV8feeET3
+51l7xFkFDz/8R35eqymJT2hxW9nRewV5Rb7ZR76aO2rGR/wuTkzJvdMHXd6PyhuZWmwMZrARIRoJ
+4C/sVNtboDrhY1TNFN52NKk+OmDr/kN35FzZo+HDQ/+xtZDefSfg7tX7j6MfZsdNe/Bb5Fc9J0Zu
+GdvdNi03JcF06ve/jkqs1odqEIAAKAwAjLlQdquN5GHR/dSYweeWzniydN3B44H2xsqCS3vtD0Wd
+m5Kv4sjl3h4XtXzf1xldxIjRmOhPXmq7c+/OCgazWpW1UCyuDhs8OP/kknF/yfEaGMB8lkmmu4zK
+vv0o0Td977yFH3y87Kil4SET5m3RPrWkekxmJWNHcQ21BmA/awAtGGSedPO+7EBBWtys5J2RXw2e
+verHKb3t00vS4kwGLooaHV9lHKi1CUwJ7ugWa4f963wU91Mvlz7onbBp0ZIxi3/aMTzYMleTcdFk
+9y+/DkwoQV4CB+tsjnv7fDj6lxzW/xukgfU7xs7qeXv/+yfSHtaqu0otHO/bDJmT8ODwi6OvUENs
+IkVRzS5iNAJEAUIv7eEPHuQTe6wwJamy9FbQnjUpu454jrzReZDTdAAoDejW/lyfu2W/Rmfkjr13
+duOK988bq3hsmjFiHpJYeBQqcpKUDA2UgQUIIVftsUWdtxbvveueUJ7Y/eqJ+xtuRGM1m8a0nutY
+3K4tupD0IKcHi4+VW+6AAABUFAIKIUAA8MoRCIQQs7KfW4ILr64sr7QqYOH2OikAlDZN0/urW0mp
+ya4LcULeV+npF8Yczr4y7De9Rsvh0EKVjscSu/Y50HvY0K/2zrRqmJ6PgUIAFMao1axGiqYRIKAB
+IQobnge4IsA0AqAwQs/qLqIBIQQUYESz6Ya0RgY/PSZE4yZLDzw/IEwDAgphim44vkjd6bXTttWU
+HRaezkmZUZyY/9nXCburGYYx8Dk0X6VRUNK2HtvF5jbNFmqs3jnHOh/TbQwsi9IePf0Td+99RRkO
+Pl4fFRm2vrLuguj646RxiUdzfog4oFZRLBbNMCBC5h2TfAZNW7Y3wjt938yG5S1SI8P2VpdfEB3O
+Sn8nN7Ywcs2V/XUUGDBCSFKHHKvsgod+9en00P2Nj6wxjSkKgAagaLZR3/q4KaARQhQG6lkdNeox
+hRCmAIDFUM3LKujjG2nhye0Xsa6mfHk373K/G3vjQq/u0KjYbBZFYxDXsZyzfD18DrIBagAAmIYG
+PwUI0cJyumWQL3M9au3RwoJvTI4/yH2v5H75O1u/ODJ5s1Gv43NYXI1WyuPYtTmmcHW9BgBAYUwD
+IApQ6+uUwcggQMAChCgW9XxphIk7t1y923vG4ujEgsjihCMLvk44NA0zRiOLzRZpGTOVY/cxKz0G
+Tv/1aXxM4Q/Tu31Onb+NrhVe75N6Kqn9gmOaOpqmgE2BqM5oU+7q1m7f4xLeK4N3dSzcUP8AaKpJ
+uQIA2M4+8Xj31IBPmZhUKjYvttfV/Xc6XdqlqWezEFdnoATYPOR28KChS8990fk+WtbwGYzhaR1/
+9Tn5rFzdp9Xun9PhhydHUpxSS252On3gbuB5GmvYgGmjyL2gvafqYlLmkxCGgywWlQEXAHQUAxQC
+RGHU/KdgKAYohBACQL97b4iY1SHrROS1C8L0rElXfl3zfcK14AyrblPnA8AN1DDaSgG0vu7pDSyE
+AFiAkAEcbhLLAAAgAElEQVRTDecrNrKop+cwi003TM6gGdx4DaAxY2xVlymMWACIwgg9K3MUuqNq
+e0Sfbx+qb1tkP47rffvYPb87xw01NIuHaYFZpb2cfqStAWeGaYjLmDW//Z2KJ3mf70nMW/L4/tF5
+GyMPT1qv1+t5HDZPp+PwKacOV/y6dv1uYzh64cj0s7wgikKIYYozbnRZPnv4XjAaW8drITbFNemZ
+UGfTYZojr16PAVgYEAUvmISDEaYRAgojqlUjDQFNAQBFIaD1RqCGfX0qJzHFeU1FXP4nT7LPTtqy
+4dxbLBYyIECUyDzgXltRVnx2mdq9Ug3WGGOEEMJo/KmanYsGra2rvyqIK4p/K/ZAWrsre9T1LBaL
+ZTCCkGPT5Xa7oVM/3zHG8eEOANg/2W2Z8eIjXkLepf5nfr4ecvIHjZrNZrEQw0g0Cs8Cl8DQ1REr
+g9NmrmqZ2/9tpIH1OyxG78tvH8nf/oBrUsxm2Z47O5n7CLWezgVgpmUYYG4jQCYMhvTnb6BkAPwb
+IJz4sn0EfBabOk019MPNv94YlVdSq+QLeAlKFxs1AIDX9AMV8XsjPlLsvXXr2M3c4MIqLBa5eBUG
+DRt/1rMwunpPbtIsnZFJlnAblg0Ysio2NWbd9Ii9Z5MHnbicElyj57FtOva8799n7PFB8mvqX048
+GMy2c6owxN0zAAAYAR4BhiMYUAb1O1EVc4ZbpV3NfhKbmZHQncm94A4tGlgIIYwBLluvnD8m9uaN
+vqevpnZ8otaLeNY+RV37jr/k4tE1ZtXMgGc9QQQoFSP4jQImAVpEoiEwViCEjiAM5QwX1zR54z4A
+HAAGx8PTgDLKCEWA4TgFUMM1Yg0AAKb0VYDgOGBsYLh0y96nAQDiAIDGNJPR+GK/97ZWREWGrQjQ
+C8+cPXOx382UStcaJKJN/o+9846PovgC+Jvd6y136b2RHjqBQEIJEFrovSMIgqIoYEfU2EAEsfAD
+BSmKCBhEei+hSQ2EACGEdNL79b47vz8unQQQC4rz/XzyR+5mZt/Mzc6+ffPem9aRWVHdhxwfOijs
+wozewY18gzb8lNxRb2H9eIG9D/eLCE57mNllXPyOkn3xs9+OLsk99uuZtJjb2SpPVuBqCIkddy5m
+6KhDyyZ0KG7oHBsev0ObtHb2qtB7zLnjR48NPH+zOMjA4YNP57j0rn1HHsJOgSnTBrSrs3xghlOF
+EewFwAaWpppE0vEsiEXnMcYWBFDnsE5xWCWL8VEMSAJs42i3Glku7PnklUnnb6X0O3wqKTpLaXbg
+unirQnoNTQ6O7L1/7StD8+vz9EAWANqJML6uMFTfN5+ixi00JIwd+134QIdzZxITB51KymlTaeHx
+hT7BhZG9xpwK6RCZ+NnM7hoAABbwbUDwC2B0GZo4D7JcqhoA7QHMVlMWXv2cQr2tGOMdQa9PuP3b
+jfRBRy9ntdaZKZ4itE/m4DETd/sNGnEzvkG6hBfXn0k79uns2V2yivocPXG+5618vbtV5moIjOp/
+q033fge+e2N8+sP8LRmTScsCOgEI7mKM7lPGpm5MSj+8csGcTjdu9T188kqPdJXOhXLxVXaOHX+p
+Y6eYw5/N61+Evp7TYNDxTQzoFwC41rTfLTF+9eUkSeDM6dsPJg09eu5uhJ4rQ37RA250jRu3t5Pu
+CHfXueyBwgC3ouJDpba+UDiDBbwTMFyEBsEWGFHZGJhdAHBd95AgDDRqV2XC0imf6n4+n5+cmhfK
+5bL37N3cSgEAWECZALATAb5ilvo2agdZzWoMsB9jjDmIqQQAoGkoxyw6CAhbLUZWDwCAwawBDAcA
+gGagaRSmmmERvoIAyynM3mn4zYx1R+8c/mL287tPJg07cPpONzVDcV3a9U4bOOuVPRWv95+bg+wD
+rRSqzStmwQljt/ncUaQcTTw7MPFqXnipEYl4Lq0rwqPiLkUMjD381aSuD42OowBnYcC/Wkw6vsXU
+kpWQg8y0IUOlEljMWr0FAI4CBhdAbNF9YwsoDTDagQBf88+2LZC1MBhXIIz3AwY9jwY1QoCT1vbd
+5tOx+s7WfUnDktKKA2knT1VYv7EXZk0cdPjW7m/b3ik2dJCIrJkNNblnlu2/lxA/d2HXgruH95xN
+63E3x+jGOARq2wwYd7rnyFFHPxnWugzVKEwTvr97Zd/KBTNOn7/U/+iF1M7pSr0Tcmyl8ezc7070
+0KF7qxX9M+Y8UhAAgUBokff6eEz1kduVufR656tNOfg+58j/EvjiZNnIUMU6qTysLPr1X+IeXoNA
+IPzV5J8/L8zJyblvbcKpK+1jXCS/iu3ctR7PJMx+ErIRCARCi2gSxjr1D1Rss3PtlN1r0fHeT1qe
+J8nnQ/2HhMgd8l16vLJu3kEse3gNAoHwV4LxJsHsaN8FbftM/6LvWzv9UzHmYYypkpTl4kU9PKb7
+SLglQudOdyf8kNrh4a0RCATC38y+BRFdWrs63VD4DTs89stzT39+nWY4Nrd1aB9f6SlZ8ODfun14
+noQnEwj/APBP3RXTurh8bS8WaxX+3ZIi+w5b0rt3j9cHdPL7wUPIKRfa+5f7jFz5ekIqfrSoQAKB
+QPg7wTie+nKE2+gwD4/bvgPe+nJ20YMPhX3awDeWKoa1dVnv4heZHD7x24EtHcJLIBD+fq5/3M1j
+eEePBZ1aOZ9xlYvKuTyRSSR3q/IMiTjSZsSi6csecnAzgfBnQZzcCb8bhOJZvLbTXh3frE8PcHM2
+3Pzn5LP6W8AcsyS459XW/IAfjv8457e/I2MzgUB4NNovvlCIExK+Xndu886NR6866QoZgdjZz9x/
+wsTCDe+/VPKnJokmEAiEvwKMMfUoCSafRhITEznEckUgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgE
+AoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQC
+gUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKB
+QCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFA
+IBAIBAKBQCAQCAQCgUAgEAgEAoFAIBCeUjAGNDtI6ggA3pKo550hHlNPWqanjeX9XcQeQvAEhyAP
+99n7RE9aHgLhnwpZfAgEwlND8QdDhQzftIICuEmx5g1BoLF/0jI9bfAYw1CKggs0wDlA3H5PWh4C
+4Z8KUbAIBMK/koVdQoJa8eBDiiddErlwZ1cAAEpsQoApEQDIMEZilofQExbzX0tO4iZBLzvucxyA
+FR6dx06fm4olAACAgQsAMoRAhgBxn6yUBMI/F86TFoBAIBAeBxOLfBCGhYAoLofHuwcAF5+0TE8T
+Jq49F7EwCQBigObsM7NwCAC0T1ouAuHfArFgEQh/AWuHSh3DHTh9ACAOAOKA365/32n/c3jScj0N
+YIzR/I4OoZcKi7poWUCYtaC80z+0VoTFdv8WT5QilsUAABRF4T6SG7IhEZ5d7Oyc+3ccPKvT6rIy
+yZOW/9/Aihh3x5dnzY4psWIFBgB9WZbz7smxvT3euOhZWwYjhMUCHr10VKC/u4NDrGdAt17P/7DP
+A2NMrIYEAhAL1lMF3jVC3nHeidHJBZpWAMAAxUF877H5r3z1/tbPhodoWqoXHyOI/eycuYfeytIA
+gGQuwWVx687t2D7cqejvk/7pArHcTgC6jQDgDgCAgNawDGckAJx4spL9eWCM6ROrn2m18dcrkedu
+lrhXVOtEIHGzuAa2q+w28pkbw2eNShnnjB5q8cAY04e/eTdgz4EDHY4l53sVl6klZo6c9QhsW9mh
+7/Cs7lNGX3ktwr2iQRXaYDC8mFauf0HHAAWgh4ILv7woDenTPZUb9oIcMSwAAFWR6Xz722c/zCtT
+9jIYGJec5LMFX096d8ObSXjVsgikeoz+oks/vemxbuvxqDMX0luVGBBf5NlaHTl00q0+06ZeXtBB
+ofy9bT6M/MPx9hu3Hovccz47+G5BpZ2VkiCJSytNuz7DsvpPmZD0RkxAIUIIP1juBPrAl/uCduy9
+1Pnw9WJPncHEc/EPr2o7aGbasJcmX5nhd7/cLAUdi4vL190xsK4AANXZlyNpod0m/16Vb9I0VQ0I
+MJh0XOGFFaO3F5XNV+pMHZA127hvxVenC4rF7wFAyu/pJ8YYFZ/6wGHN+iNd91zIDcwpqJRZKQnI
+PIM07XqPzIybOv7Kgp6+xY/UVlK86Lsdye0TDl1rdzmz3MnMCiiJWytN1MCxdwYMGXr1xcHhJY/U
+Tspm8ZoNWzsknEprm5Jd7mA0Uxy+o7chuGu/ezEjp1yNmBKROQ4h5mH9urL9Rc+ftp3vuv9ynl9h
+hU5MSVws/m27FvcZ/cz1gXGDb8UFItOjyEMgEJ4g+MAonw5edqcBANf+ceUhlW3n/DyxpbdKjAF9
+0Eu0RMhB1to6UteQ9Am/KCP+RtGfOtYNth8Q5kAVQM2YIn5Hdc+p3/R50nL9WexfOth/VLjDp64K
+UYqDTKQS8LgshShMcwRYILU3SB09sx2D+v3ca96mHhi3HMl38buJLtMiXBb5OMqSnexEVUI+l6EQ
+wojiYb5YYZI6uBc5eLc/EvXMx6PjE7EAAABjTG2c23fM4PbeuxUUMgHFZTzaDzo7dM7iN5cmnA+Y
+Fc7dTiHAHJ7UJBW7lDq7+Nx0EnHLKADMc+5YGDJty5Df21+cmsB7a1Do+DBnyWkHO1GViEOzNEVj
+nlBmkdi7FroFR/0y6KVvov8s603JkaniNwYFTw51Eh11kouKJEKemUNRmKK4mCuUWqUObmVSp7AL
+oSM/eHH22mN2LbWT8P5Y76GdvD91VYhvOsoEKh6HZmmKwkKRxCR1cCtwbtV5T8yclQPjE3Gjl+1f
+3h4asnB4x+WtpIICBIDF7q3zogZPXTt5S2b0V31kU70kqBooLisSOajkjv7p7gpZpoAGM+JIGKee
+76xOzLH9Vo9C+Z5npQti/WcEOQpPOslFJWIBz0JTFKZoLuYJZVapg1uJ1LX12fDxS2e9sWGPtKV2
+MMboixf7dOwa5L7JRS7OthPzDRyawhTFwVyB1CpzcC128Aw5OXBm/IQF57GwxXaSZnO/mNGxT2cP
+0U5nuTjbTiwwcmkaUxSNOXwxK1a4VEsc/VP8er3wybSV+zxaaudg/GTZ84PaP+flJL3gbCeqEPI4
+TO09IpI5aOXOnumBEQO/nr3qSMijjhWBQHhC4AOjfNp7SROhgYIFiIvt/AedHrYmO7jZOhhQfE/R
+R0IOstTWkTqH3JmUoOz0N4r+1PE0K1jbXgyLjPSRnhDQlBU1nGtN/hDFZcXubdPbz/h2eHNK1pm1
+o9ziwp1+kHIp4wPbQRTmysNKWg3+bF5CKuYB2JSsRb1bD/bnIhXFlZm6zt8+LxVjXurqsZKZrXkJ
+FALMc4vJ7jRpWe+YmBHylRMCJzmJqArguOGA6JffwhjTj9pfjDH9wdCgqd4iXjGNmpeRojms0Kdv
+Sve3j0T+gaEFAICC//V1mNnNZYmCz61u6Xq2P4S5EmeNR/TMlSN/UN+3/bz+5cGtY3zle8VcytxS
+G4iiWZ5jh3shI796JhHXK1kYY6r4zNdOvey4J2kA7B4xZv/LZ7E3AIBNwQIlCN3NLlELPx766grH
+LXM6hPVoJTsMwMESl/4XVl0rd3+UvmZ/2ddlShfnlXZ8jvrBfaUwT+au9Or1wiezE3CzCuXKMWE9
+2jvzr3Fpimmxv4jCAnv/0oDxy+evxPcrWfj8WOHiOO85njJ+Hod68NjTfKnZqe2InQOWXg1o2k5G
+/CDZxLYOS5xEHFXLbQCmOUKLffjw43Erk9o8yngRCIQnRLMKFgBGIjeD94B3P0hobkEhCtZfwtOq
+YJ39cqx3H1/JkcYPQx4rVbiV+/t4pTtL+dVUIwWfxqKAYRem/FjYSMHHSWu5L3d1e0fCoYzQ4KHF
+E9lrvX197/o4ygqFCKzQoC2ua9fsvh+e6lHbxoKogP6tuKCiuDJjl1d/eR4AoGR5f/HM1oIECgBL
+I2eeDFiicQIAuLLhheBWEl46QgocGvP8xxjbFLVH4eqy2ND2rqJLdf1CCEvkzpWtfNzTFUKuplY5
+RLSYdery2vebS7D4cccX41TeS9FerzkIaE3DceEK7PUeXj5ZPs7yfD5FNRoXyi6oOnzK/2Y1VGJT
+4vs7jwiVbxbR9ZZpQBwsdfAo8/dyzZAJOLpG7bt2zeiw4HBsQ1myktba9ZRxj3MAsHuXsXtn3cQu
+ADUKlhhUHMegSo85R8bY5M4RDAr3+EIANBY7RybHny+7T+m4v6+JgtmRru/KeZS+XhYK84QOOk9v
+30wfJ7sCXpO+0orwivYzN01qainM+jLWu6+X4CC3wbxEFIexd3IvauXpnCnh0saG7QhdInI7T986
+sKlMHwwPHelvx8tvNL4cqcXF3SfP390pu2k7SOBsdu/95rLNuP43xxijD+K8p3qJqKqGZXlCO72v
+t9ddN7m4jAPA1rVBixjXLvN++PpipexhY0b4d0F8sP4DYH2xoPzGySn/mx9xAgDOPGl5CP9OMMbU
+4l4u464V6noxNV4/SOhiUAQP2B7oYvzRX2KsNJfddSvJK3rhaqFmiJHBNGAGzKXXWp85eTYGANJr
+28rMu+Jy6W71ML2V5ds+4YDYrUOqb6eun7XmlqVQ6rsitih75Mkc9ZxyI5YBADBVt71SLl4dgjE+
+jx7i+9IUDmVg+YBZAAZYCnMA4JG38o4cSIkq0xhDWFuPge8VkxrYOuD9DtJ7mebCzHZJ13I/vKNn
+fDBjQPrsMxEpV3K9AODO75Gvlh2Th7W5mFE2rdLI2JzxEQf43r2TW/l5rvSRGVIV2jSusryi/42c
+0pcLtFYnAABWlSUvyk4bPnCD+lcAqMIYo2Wjg2Kv5KmH6hmbpQ5xFBbXsJ473HycNrRl8qqs6uy2
+N27kv3VLbQ5lAYO1/FZA4YlfZqxX4Wuz7FAVAABUNxFO9yDJfTGXYRgaMACwtJ5FD7UQ/jB+VqeL
+mVVTlGbW9uKHuFjoF3u5lZ/TF/5y8127qtu8irLSoddzKuYW6xkFAACjTHe4l5k2fPhe2AcAdX6l
+m35OHZRWaY621MxLjtBb49a571pXKNvV1slk0Oamd03NLlp4q5oJAAAwlKX5FGb9NmHyRXz+p65I
+DQBw+fXOrh/+evu5PJW5zpGf69zpnldQu6+8Zaoznkwhq60WdbiTUfzWnWpzAAAANpZxVUW3+n/+
+3u3NAJAKAHBl+TiXKzfKpxfoWYWtX3yw8+162dnX76sI+6pbjDLPwZiXPT0xVztBY8U8zOip6rsn
+Bvy0f0x3ADj4sHEjEAhPgJYsWACAgeJj+y7P7Xg1scixUZ3HsGBhnMH/Zv4I33Z+nl2kAk4PqdQ9
+OixmevtXth53aW4rKGGGq5O7lBMNAL0AoBdH6h4duei4S9NyifExnKmhvNa15QA4Ma7tRofHN2Nt
+wBhzElfPdR3R2be9QiroLhAoevh3iIuY+ula7ySMm83Nsyxa5O4kgO41bfeS9Hg7DOIxhfF54Xev
+DfVr6+IQKeBIeko9OnQb+tJHfrjJlknCZ9Nde4d4d1JwOD0UUkV0j7Gvhm04h5v1CWnOghU9aXVv
+jA/yl84cEODrYt9VIVV0D+g6quPrmy67PorvDsaYuvTD2w7P9w9t7WwvjRJwpD1cg3p0GbZgaUBz
+1sm6fscIPRUN+s3rvCAcAKPDK8faD4oI6CAB6OkcObrt2IQHW3W0Fxe5RDuLjnHq5hQPy0Kf2Td9
+U45rw3I7X+/TMVDGu1u37ce1x/LWr3zVcDyvLenVzUPCz6sdH1pob/CbsuH1hlt3GRtnOA1wFhyq
+s0rQIiwKmr3zSI214PdYsJI3TQ8MkXDTEJLh4D5zPsUY8x823jVjjqb7yuMdabBtO1EKa/iI+MW1
+cwxvihHMjbb/FtXIKHEKyZq6Lf+xtgkxxtScKL95DjTUbenxnCKKWk9ZP7hRuTtvSOOCHb8RNtjC
+ol0HZgx7a08AAEDZ6rGSGeHC7VTtuCEelgcOOj56U35gw2t9Mix0gjufrq5tQ+jeKSd84anetWWy
+jjWwYHUeu+fBFizMHxbiukIEFBY7R6QsPlferEtCg+vTUzt5vqWg662UPJeoex1nbG1k5cVnX1DE
++il+ENRZphDmegy/OXlZYn004/GRDv1D7LfRdesdF7v3fOGn2YnYseH1XmzvON+Vh+osd1y3Pjmx
+C/d0qC3z5fTIft6CeqsTLfXVesV+tKDxOpBAz4r2na/gIENtOUreqTpk8JcDasvseKnDIGcBp6L2
+e759q+KI1w+MbniPn3gnzqeXE++3Wqso4tkzDp1f//JR5yXh3wFJ0/BfgTWBOvVI/8MbD418kNPx
+g8A4kfPutKhu3Vr3/mDtgYs/FlVVHzRZ8AmjWXO8OOPCnl+XLP7Oq/OEufMP57o1rCdz9A5BiP4J
+AE4BQCJmLEeL8oqmNG2/pILrXFLFbgCARABIBI7kJNB2L3QDaKQw7fxiituILgFz31y1e31KbtVe
+g9F6nLEaTpQX3N6f+MN3m8dEjXt1+jeJvvd1gEONQBQ6BACnALGJwFqXfln9TOvhHccv+t/uq1uL
+tNrDVsZ80qwqOHr16K9bAgbOf777GqzAG6Klc3v7TV2x8ej69JKqA3oGn9SbjcfvXjm08+OXR37a
+fc6P7R42dggAu9MVnqM6zn5z66mU7dVa/RG90XC8LCdlX8LnC78L7P3O5GXlzStrAAAZB+Nlk3uH
+TJz36eY1p1KLf9XpTces2HhSXZZ1OGl/wvY3Og+O7/f6pvbN/bYsQ42lAB2x9RsSuRgvi58+stey
+Dee+uJVXvtcE6BRgznIlHxybuXQd+YknPItZ1tNa8z/NEZj8+/Q7/P0Mv0ZRWR5ebpkdFSiTqn2c
+WBlgqyrsAKBOeTJa9TyM6mWlKa7RJyw8p6FlKiDyNZWXnCqkbYoEAGYBGXV8XrnN+kQbsZUDwGJg
+kcXMPPKW3+8BIYSNZhZYbLsmQggEPDB2sm3xQLneiaPXWKU2CWnAtKvKxxlXPKjNFimeIzCAIbSK
+qZ/vCh/fa6ETZ15tJFPIZ5qOUua6Ax/V25RUGgk26fgAAFeqGYcbuZY2uMaaQ4nsTVyfvsd3zvDK
+aNAvNsqZe66dB/dW7WfG6kp3zcVjdb5AUo6V4YPt92AB86qq/8TnxaUpYj2YQqqZ2jmBwKGV/yWf
+5yc2ij5EPb6p7iTDKXZ8ZKz9jFUqpRyzoU4R2ffjVVe9ThtWO3GQwNOkkLglro2Bygb9ZZ4b6Hza
+3p6fVddOZZoLg6tCAWyKtNlQEVJiqb8HRfYOOYFjnz2NELLWtzOOCedar/tIqLq2sU4v5GiU4tp2
+7tzMitCzjK0dxAFaEJg9YmTkxYbRnn0+FhdEd7I/SlO28cVmDUVVXw/95O6D70HCvwuyRfiUgyia
+RZihWAxg1RfL7l38ZdqYdX3Owu/cwsA4nvPO0DmTtl4ofLNIZQgxW9n6xZbRcKsL072rC5E3Lcjs
+t/WtV3r1XHp+yZm3o5IBAML7xqW2/unGnVIN+FgxIMZkEFVfPNUpBWNxO9TgIcExBN1Sgj/UbN9w
+pA5KXnCfKwMalNmyILbNJ18e+iCrXNNfpTc38HWxgqU810VTnuvCEWZ321um6jHk00uL9r8VWbdg
+I9tDEtV0CKHcE6033MtflVdaEak21785WrXlkqK75VHc4oowFyHj+FL1Pe6upOLZpTqrY90KaTJw
+SnNvh0BBfnC5lhc0duX5F3YsjMpscfwsucJLB9e8pdKU+6vMbF2Elak0y11dluvOlVRGbZyA3ddi
+/L85COkb1r24bJTncwu/ffN2oXJSucZojxt8Z1UWKfTKok4U7277isLKvj1M/MUY4yPNhO7XqDss
+okuSQvcX3/rsVrEqwshiBIAAwcN9vlknb1XPGLvtAWrWAQBhDk9katPD59z11Y3LWQ0eGCPAdQJw
+aKDk9hoAqFOeFD7+xXbUDWUxgCcGAIa1CjJv3vLHGNO1SlZW+ip5lpL1tLI1yg1NY8rDp1DqBCYA
+AHsRoxOLaB1WG+R3f1nyrG/Mc+6vVXTdJsCJ7EM78zvo2IrKPaui1KBj7TCrojMycmNn7CjfcnHL
+PP3aH7ZNPJWl7YsBgOJKGXnb2NN9/b0KP36cC6Wb2XadIy6WSEwWhFiMMU05hoVd6hcHyh1NimIA
+3GiTUyrVI77YBADA5SKnMqBktePP4XH0Dm063is/3riNmFke6nUppRko29gdAwA2VPK4UOifj7HQ
+CyGDDkRWRymlpDQAlennI87N6f95+AsJ2yFz1uP0rjEqiunYtfM5jYNZjRBmMeZSLu3Czw7tAppd
+TYoiGhrNZUoq0VFIbK79/1Ymttcorc713zup9RznvKb3QLthA8rozRvLERhtZiNWzS1TW/zjMaYA
+EPYNHZbRN9bvfyxgxLKIlroGZvUZ7J53sok8GEEjezMSCY2s2M5g++8qJzPH7M1aa6zoFAewQ1Bh
+tJumsnErCSxP0SmLh8qtFmBoAAtYwOR89pzSEQAKf8dIEv7BEAXraQZR2DW4122Hyiv8W2WaQMAW
+0OVf7nJp6/IZr5XgD1e4ogd6VdSCMUYrJ7aO23Im7+N8tcmrdtWiODwsEggNFGOgtQYznwUMjLFC
+UH7z8CgWeKJn1t58+Yc5bbI8B4Ayqp1j4qnSwj5WBnOB0QFtvhG04oDZGwDSaq/x6UDnSCXL1jh6
+0sAXueb0njgo6Ydttk+Ov9Xd/8PvLy1LLdMOMtlySQKiaBAIxUY+ZbXqdQaxmcXIaqjiVeecj7u4
+aYV5wrbCl7dP9MhvplegK7rudxtYf+AIWJmMp8NmA09ntHBrn84WTb486dD3byRjA2W0YD5PKLYI
+aNI2YqIAACAASURBVNZqNJn5JgtjUzCtGqTPO9HryqWYSQkYf9JSXhzMVnHzKyEM0VwskNiZ+NjI
+6vQGoRUDAGbAokmzz7nGW7BuVqu7ALC7tp5yzSTF9C+PvH01q+o5DVOzaCMEfKHEIuRgo1FvEBmt
+DM2adbS2OLnT9R3rlsS5+ZYCQHLzPyYL2qKLftex1d9a9/jBQFOs0dUXrM3WqSFsZnj2ppmTPwUI
+qHm85AKAr2XZhMbljIarfrcq2YBaDYsW8LXSjl1vN7QEhHiH3uvb6tCxghRTqIYBmjEoBVVn1k9t
+Py4nb9KkSdd4ynTB++/+PD5Vbe5WKydX5l/cqW/PXREIWQAAZozzyr6iMxzJSKueYihJaVcld5MV
+MIOPByGb8k8BorG5RjmjWIQAuAAIMIt+17o3enLn37Zn/Ha7WKfvxmIGtHcORydv5i9+P3evNDmr
+ali5gZUDJQSBW7fL7fv2WNfbr97a8ruI2WRaGHN7+0IIS7B9UIAAPK2opr+1YLxcPCJ4SdtqQ71j
+tbSVT5opIKYKAICicSPNAgMgK2bv34KOjLSydIoW2coAgA6stNVxgxL4AGDwjZlu6tL9k71njhZH
+l6tLPNSFzFhKbcxAQOXYtHKEgG1gMUWIg2wX5DKWhxxR1H+zflH/25sXQVhN/VwA8GXu62vWm3aD
++37bRm2qSfuAEIgDA29XuvWsy91VZRHINMb6sUACgckoc73/N/BuZZSwWMcBAAsAYGyh1GqDIhVq
+eoLfOzEWOp2qbQYgkwUA80sN5cGYermnb5tCNVNnaRK4OObRET0K4BAAQCWvVIvtmVr1FyGM7Oy1
+dyt9G60LCCH80YSuagnCVh0AHwDAwpjFRbkl5PDspwiiYD3NIAq4gb1TensW3yw7m764zMhKWGMl
+ryTtwuRTH/90CsC2JDyMW8v7+u84lzu/UFOrXFHAk/qXyF0UO4O8HG7wq9IkJYXl/QpVht5KC+Zj
+xkRVpZ7od+ZAu+lrMf4QIWT5elbMaW9BcUWGjnEDwGA06r3PbNsTAjUKVkX6Rslv17VdGSvLAwBA
+XAHm+sZcmzPUPvsHAMA4gTc9Yu6Um5XavrXKFSVwNCjcfA54ujicCZCojXl37nQtrlYPL9SxDpjV
+QmXRlX5XfvpuOMZ4DULoPqsGCzTi2wVmOzjLd4X7yO8wRakOBcUVQ++pjN2MjG07xGzSCmm+xCL3
+bHXKxUFy1E+kUlZXlodk5VePK9ebXQEAWIuGW3b1SveKc5NkcL9rcO2PAbTEXeno7r1HqnBK9uEU
+MNXZ6VEFKv3AUj1WAACYlbddc29ee2b22qrEdXPsVQAAn++9NOBqQfXEWuUKcWVWmbPvWWcX50Nt
+XcyVhXfvhFVUVI7JUjE+GMygrUxpe233lukpGN9tZB1s2G/WilgA4PDEFmdHRRGXphgnd+cSoQAe
+aPlBKJ4FiH9gUkRcslw8Z8iyKXlGq1/9XGmV3TcuKvH7LQ3a6h1vPPB23Ldp5ecCLhZrBuqsDFdf
+eLn1nUNZ6zQudvlIUy4uKVd56rBtjRLY+5a5dp+4qkPcgNOnasxDbi+fLd+19PmPVFuPJKek53sJ
+RdxCuYNLJguwFwDyAUEmHwx6AAArV1AFCH+HEHbBiE2EBta0h+E/52jWiJ3uG0uqDGFFZmzHGkok
+Nw6sm3sDMGAMiOZJrFKf6NNtY8a+d+DNXmmP2m5Taiwu5oeVWzv1h6iMCm2cri7QwNPg5u554PBM
+mRLNArBaRNVyYA2FYFOcrEarWHn9SgDGmGp8H2gRjRpu+2FgMeKVl9jMmQghnH9+5a855l+0O09c
+72zi0azMwekYKsNGjGAVsMAijGst4QzC7AkAwIBQIdD8Jhabx+vrF2/ujslQ6voZavsq8tb5envv
+3/MsaNFM22ccIYeHG2iUCBBG+P77HaRmjKCRNQwZdEZR+ana7d8IC9h0rxZJ/HhQYEpO6eQKxqYU
+AVeO7RSep1Z82Cl7wEcAUK3iAEU3sbk1D0IMphrIwzCYV62s/ku2ugkEwh+kqZM7ojisfMDHG/Yv
+fda/l6d4H7fWCRTxsLztzN2z99kc3h/m5P5uZ4fp3iKqLp8LJfDWhA776JXzDRyrd86M8unnI9oh
+oFFNDhoKCz36p7yQcCcYACDj7Q5Oo0OlB2vbAK4z69P1hY9wjbNw2qrYNsH2gpu139NCd3XEq7um
+1ra/59m2wT08hZfr6lNSxqvThO8Xnan398IH42UTg+Qr5BTU9AVhx85TDkZ9g50BAD7rKXnRWYS0
+tW1wRL6VnSevmoIbOMVvfLZNrKeMl1t3HcTFIu/+v41+95fwuuuUvCae0U6ySsSpddClsMi+2623
+jxcE1ZZp6uROcRzMIf1eWrImz6ZMAQDkremumBgkWi1tMPYcuzYFE7843g0AIDl+hHxcmPSXOlmA
+jxX+fU5OXlXvJ4NxEndhN485Hlykrvv9/Hvc6PxJavvaMkt7iBc4CFB9KDzFZ+18u14Ijh46c+jQ
+UV2fmz6587MfbQiendR8cMCjgjGmFsQGTvIRc2qf7ZjiORoDhn+2qKXAg7WvDg2J8xLtFNONUzI0
+/OPJfSsCxyx5bWwCfmLH3Nz8bpbL8EDZnqaycfjuupBeU7/q9/KmwL/jiJi9i4f69fCSHa67l4GL
+5cFDTgxbmVmXFuHs0kmK4Z7843VO7sDFCr/YC3GfHK2bExhjtGluVPuunqL6ewoQ9uo+NeHFNPyP
+ONJp66v9Q7p6SE7VBVUgHrZvPfbA8NWFXg3LvdMrdKQfp37+c7163XOfvCe6aXtYtdI+ylW2p3bs
+EM1jHeOWfRPTJMlqS+T99IJiRKjjGjGF6tYXoVunu91eP9mr7hpVCXYDHUW7+bUyc4SsqHv8xrXN
+3FsfT+w81JVD1aXjEHhH5nrOO9+raTnCvxfi5P6UQwNLvf/WhvyJPdzWeUg5tr19bAZN5uG+Zzbv
+mWCL2mrZcIHxakmyntulVM/W5WgRh/a66t17dEIUQobaz0ZvOJ/33ACf7xW26BkAYIFRp/mcSyqI
+AAAIWLKyWmHvcEZG12wTWcqRkalqP+4UOAAAJB5Ibqczm+uyInOcO+cFBbrVHd57odTaNqvUGFb7
+P8+9dQGn9cSNSxocn4Hi4tUjw2GfhwNdUCM9qEqrgnDqwfsiFgEQINqnOmZoxwsNtyUmzIpNc+Bw
+CmtvDIrLZ8Tt4s7u/GhMal1N1xW6mDBpCseWwwls66NaWKyiW8yoDbSn0cM37ORcH1Rn4fKZe676
+2bigHfZiXv2RROZixc0cXTsAgDtGk9/1XH1dRBotd9Pw2k786ad5/W7WyYIiLEN9dEfCPbl18unV
+Os+ypPP+zQuCgC8NKuo37dXFd87t3bhv368Xv/v+pysb352Zvi4CPfDt/UFgjNEXg/36n7yW8+49
+ndWWZJKWYEn44KPh/Qf9GIHubztpX7wo7fz1vplKUyc907ITmEVTbleedrF/TvKxdk/inLuc+Pby
+b3ZcmpRSbLz/dAOpd7Wi3chDx76ekYEQwhgn0PFvzIkYP378tDFjxkyb8tI7o1/57mYz8+/3s29B
+N4/N20/GXyvSxNoGEwHXqW2+a/T4NXsXBtT5/3V/a4Q6rI37YSmNaixEFlDlX4i4/tOSlRGDx0/w
+9/fuPm1Q52fX7L7xzbUifYNoYQQUwmYn10e37v1VHHgxyidh928fXi/R9rAtGBTw3Dtlu0SPWL3n
+xea2/P9a7iwbJl26/OdXfsuunKpjbQoZJfXWOnSd/N36z3pf+LvlIfw7IFuETzsIANYBzHl1yolr
+t77esTlV+ZKRZTmMvkRy77ftz/VcHHR5AGZb1rD+t15mwQbfun0hJARPN9frA+aHKo8saFw0PLrH
+TfdtWcWlAM4sAFgYkzD/Zro/AABCva3rhnpeuCznFNyotPgCYKgqrQhP277XE2NcOaaVUwe1npXb
+rsHDDiGhF+lukUUAttDo1wa/1arcCnUWM8pcCuXH3+kPAG2gPqcR++Elg2+lCdU5kbOVJY4ifUEL
+kTkcMDY5kQ6zXEwB1D/FEWBKKLpPOeCKxUaA2m0IDECZEMtYW3z4Y6DBYrx/28Jv0OAs0ffpZRSA
+NwsALLZwS4oqXAAAWF2pX4kV6pQ2yqpljbc3dQSbz0atDoinHdHKBRxKXtdndbWUX57VKHVCPQgw
+dtUEtwvPfNgZdo8KxhitHu7eY1tSxdKb1dYQDACAeCD0jLoa2HPkJ3tebHPfAxHjRM6bPadM25FS
+8kGhnnEAAOCJ7PVSe8eLuqqiDKmYKxSz1i5F1ZpgM6PjqG4f7JduMisGKuznAMC1P0PuR+Ha2x2c
+PjmUvXBXivaFSiNjB2Ab+Nof0lp1zT354MZ32764u/rG6hGXAPIEl4/un3E0pWiuFWMQ+PXIdmYH
+PgMApX9EjuOvRLqsP5zyzrF7hvG6mtxWlMRP4xox5quVG6bsj9tYZ+wFhMYxBxb23Xvxetngs8W6
+GCsAsFYdpzjtdO/iNOiJMcY5OfkIMKYbTwAe0Ihrspc/eKv4r2bf8+08Nh69Hn/8nmFE7VY9LQuo
+du80ZsWP3046FrF28t8qT/7KscJlWw+/sC9DN6/cZLOiIp6TxT58+JYx02Z8F47QQ7c6Cf9NiAXr
+P4BBAQhFxOuHxLZa386JUxOWzYC+4mZ41und06xyPzkAbvZhe6ewmsdYLHWhy4iSsDyEihc046tg
+rhKp3Tissk7LYBgOriq1q00d8Nys7hkSO/Gt2knHlGa6igxZ4XD0WddSiglX10SLUSIfvbPc8dSP
+7Wp8iG7voMFidGQa6D3GsmxvbeGtdwDgfwCwquZv9a0i0+slamu9cmE1UMC1/qHcMg9QP/8wXJFE
+68BYtXXaEgbKpFZKMMaUUVntwED99oVFW2Gnunt+LgCshvo+/y+/2vpxRrm5/jwzxkxRtFnQcjoO
+BGB8PD/s5tj2jG/XrdcqliaXW9qzGAAQDUKXNukde496P+nL4Veaq3Puo3fDD98pf7GoRrmi+QqT
+c7ep6yfM/+JZg07zQlnZuedmx0U8H2YvuEwjAIytoM091/H6zi2z/0im9N8DTo3nbbtcOmPPDfWL
+NuUKAdelQ354+25fBMs5GQgAgDUjY25it5wz29/vsiQtCH78UQxmjZe15nbicrDe3tfvoQdeP4i8
+NYMV287deuNojmGaqibalRa66rzb9/9m8cI56+PQ/YcFx31+PCMuNvijNvaCJD6FMAIAjDHU5Bnj
+AOJQEodWxV7OdgV1lSgJUFZByTyAP29y/E4ylvRw2nE+453jeYbxWottW40We2h8OsZ9/dnShc1a
+Qn+Pue2+N6CHPAHxwXn8tXuPP7snXfdaoY61BwBAXBnjGNRz15jxI5d9OfKPHfD9t5tjCX8rRMH6
+DzF05eW0rgGu37ryKVsGZHMVXZmaOG5vJqeHtYWdF2S9LygZUyxT6y/TCCUowcQ0SMoHAJjB9akR
+hm0r7iRBFxQ82wOBNRcKipWazl9vygzSVavrEhOKPP0zOKH9GuXDYTBD40brEQKaooBD0w/4o4Di
+UDSHw/vHJu9jrYJaf55aEDZbOQAAFsBN+gxAPbTPCCgOhbhcLg/+hvU7YWZQlzWJRcsvF1lqov24
+IHRulxExcuZb5zbNOdJccAEAwJH9t/sUaaytah3hufZds2ImvbBm9WuD8xBCGKFw86IfE09P6emx
+Ucyl9QAA2KqjtPfO9Pz1cPHfcjjuzxtOhx69Uv5cucGWG4kWe+oc2oxbtTf5/KIxnbw/aCXkFCEA
+AKsOae/s75ez+9OPFu52ji0s0rW1tUADnxaV9OzjUfW4MuSvHGC/5PtTb/+aqp9TVRMpRwtc9Z4R
+Q9eNfnPB8jn97FXN1UMI4dc2Xz01eWz0MwM6+n2lEAluSqXSArlcViwUKTJdg/tsnzBq4PzWUnOd
+dZESKfRGnncOekIWmYyvezgt2XH1vd3phhkqs82/kxZ6any7jFg17f1XvhwXjppVVM1Gk6nG3wwA
+ADBgRKNmXi40PMRQFNXgZsNikUDrFNO8SzpOnC54f8WWZzdfU72br2GdAAAQLWOcgmN395nxwrvf
+Luide18lhdCCWMba6M7DGCmE99+LDKIopsE9yqGRyd7F6YFBJIR/F2SL8D8EQogt/bLv7oySqt4n
+c7TjjSyAqTrVKVkJji35tni7y800t1oPYHO3wqyeNtPY7rYtaWSjl0e+vUBcxVJiXPMxoimGsrfX
+1OY1QgjhY6+1P787T1daaTZ7A2ZQ1c1bUcneBlW+krE5q1MykErdL737ftu84fE1DYcpMKJ5emQz
+syEAAKG9d4lELDyCVYWVQKEWXhRYMPC4ZopiMpr//skjBpVAj2gBrjcIsrRIYEQIsRueDdUjqFdQ
+uCIHrdzZ+yiuysx9UJ9NHCFm+fgSPMi57k9g54yAjv87kb/0UoElyooBAXBAIG+d1TZ26qIza17Y
+19JxNhhjeoK7xMdSd0QKAvAIylPwnYqblvUIC70rOZinVwOIADBYGa3DrZRMTwC42rTsn41aVdI2
+08DU+QWKZA73omfOSvRDyIjx178YYr6UJVy6F19otDpji5ZTlbxj5K+5/MhiNWvLMs6VYywKSv2q
+E5R+/RjXz4lvL1+648r8X28Z51TXKFcU19XkFhq3fuzijz5dMcD1gQlNa5Tb2wkJY18bqnrbUa9X
+t7JarXyxvWeBfZdJeRUfd+x2uthU56sntJcXuvYfmlZw6u3HkPaPkRQf5Lhsy63X96QZZ9SmZKB4
+HgavNkPXTP1kyefxUXYtWoqcOVa1TIi0YLEdqYSNBiFPW3Z/QETWbZEGY0ltrhCEeKxUKq4KB8D3
+5Rlb24n7wZJDU7Zc0759T83afOgoO9beJ+bgwJffW7R5dvu7zUszxOJmhyppFWBgwPZyqiq3M1pL
+udAgahJjjD6c1EGuxfVJZTk0V+fp66a78QjjRfh3QBSs/xgu80+Ufjc2fN2d8owu2WqzH9SEmrdU
+Xjh8oBZv2FREg9qmNmEtlCsN4W9sBTE0CbPW3roaUAbYqfapTtPI6BgUmK88Wl8mvFffWyE/3Ukr
+VoO3FWOwFP4WnGgw21XWhD1z7JxUfN+oS8MR0tTXWmulOWHZMoQsyppjc7DYy6AY9M76u+sGnXtw
+j6/DoVXPP/oA/UUgAOA0c7cVXTvnpqLBvlYToSmOxdnbq1gFACIH9xw7lKHXAYgAADBPzgg6L9iX
+v2Pa9w++2l1IPfAZIPTZn9mFRhxY0KbNit1Zn5y7Z+xtwYAAKBDYBee3HTT53Ytb5u95yFmBlBHR
+HLahzUFZKePpcu4PUddWic3sH4tufFxMeqOcgYbO95jlC4RWAACEXjbhlNc2m+dtt9t+qfitChNj
+x1j03LwyvU9taa5UUebVZ1QiamYL72HghLGSV1YlzvslRTWvXM/IAAAojoPZs03/zVPWLF6ypKtr
+2aO2NW7cDgZgRyk08ANL3nRMnnAz75kcI3YCAABaBHxZcPL0aeF3khb9Xmn/GFUJY+3e+vL4gl03
+Vc9XGdkaRdLJ5NNh8HfPfb9s+aJQ2QMtgN3bCssPFvILQW1wBwBgVUUyEZvfqmlaivO/HnbFrKk+
+4ICWm11lKCu+iZUV43jOZ8PXj9ucVPVuttJii1ikxNjBL+rYwFfmvdWycgUAANaQEFkGVWg2A8Py
+gbEAqrztdVcpcAaAnLpSp3rThvLCQEvdMTw84ICopF93cQU5jPDpgWwR/geZtWT5b4PChNskNHpg
+YkkAAPD/VB0AKMWJV/+QqL5xvkfVwdUxDc+NS/p0rN2WXWnjqw1Mjf8TAprrXh7V2bORQ7LbEGlV
+TDu70xza5kthNheJ7pVW+tduFQlELjmRk0Y38ttBCGFvypLqb0fVRdsZi1O89bcSZszbkuHZsCzG
+GK2eG+f60tSRz498fWuvJxF11ixsCU+pKmqLG5yriFPjeT/vTO6nMtQfLosoua5NK9ltAACJFWe3
+dqDqosOsqnw7zc2tk8d/fum+o3m2xE+WvTqp/+TRr6wanZD64DMF/yinF3cNXbk/75Pf7hn6W1iM
+AGjg24XktY+b/tqlra8mNE0W2RSEkMXLji3lcWvKYRbY0ksB1zLSoxvOKbxhmPTM2RsDNAxbZ43g
+Iq46pLX/IysXfwShVFLJgfp7RK9Xep7atLF7Ys1DEbVboVu14Y01YyM9NokpqvG9RAtZsV//489M
+7nD6914XJ4yVvLHu4vNbryoXlukZOQAAxXU0urUZtGHc/FcXL+nq/9gO8zg1lbdmwWD/Fcv3LDqV
+UT3WUpMolCt1LwsYMGnbS57ogfmr/mxwwli791afffmXZPW8SgMrBQCgeC46rw5D1ox/+Z34RaGy
+h8oT/dqIEolIklqrhWNzMbegIHvwiO1FddZHjNdyN51Q9SuvqrfYcZ3bFAK4NspbhpNmc7+asGXk
+2nNlH2VXW7wBABAlZu19exyMnf7cgp9ejr39IFkQQji4TeBVGU3XbN0yYNZlBWxbvzO24dw+vNvS
+6vRV5SBrzfgjvpQBp8hb833g8Y5ZIvwjIRas/yAoMM60/62+G27kXOh1tlR/X76YRmURwuffbHP8
+/A/qSaUlhggMABZNqlPy0e+XtorY5913wKhUB/M93lvrjg6+VaSfpK2JcEKUmJWHxR5rH9juzuZG
+7cWz61/qccbjbGVFltXqBmBzvgUAQBwh5rlFJr8yUpH1cxM55r3cIe18btXRdFXVczoWEFg1dNGV
+3ZP3fZYlD2gXtTvEz71IoM6gI0M8vBBYh9zO0w0Ah8pb/VjDQozxb39WxNzjwlqK+amnEhb6dUkW
+9uw34qoHKsCDx66KSC9Wzq6oeWsHoEDg2SVN5uh2CwBgyMqepedSMnZeKy9oX2HBAsBmUN490+fM
+t/NWBbaL3url7pTthkuZ7Kw859UJJ2Kz8tUj1HSp7l6ljk7CeFdzDsF/lHMfRQd/uCV16bksbZy5
+9uHAczaHdYs93sG1tGr65MnRU6dObKzUWgEsYldWFt49c92C0cUAAD2j3S7uyc8przTbUjpYdLku
+SdtWfhjw2w6voUNH3uZW3hEO+eJczJUcwyRTzZwCig9IGpbRv6dd5v4/u2PNIBC73AyQ3C66Xg0B
+AACMqsBOfeW7BZPanJJGDnrmapCg2Bo9eJkHAuzBBdzICoIogVXhH5zWvr38dzm443PPShd+cGz2
+tgtlb1borTWRoVyQe3W6E9uvzW8VR5cGT504MfT+lZsDrG+XqlkfvpTWu0HG/KS1a7lrdn0VmZat
+diqrNEi7TJkYYqko7JtRUN2xNokr4iksitbDd4x+btCJy5///nF6XPCu6fJ5Xx178efLlQurDLVn
+9/HBya9Lap8+QZdKDr3ZeurEiVSjvloBgCMA1jOyfMuSOekIIQa1WqZa0tPj1E0RPTxfzygAWFDd
+Otz78ueG96NiR+3y5ZeZ+gUvisgvVz5Xbqk5EouyAxf/kMSgWXE5x7+okQev5S6fsHzE+uOFH+dU
+mf1snyIQ2IeVxgyJOSLI3OM0deJE5+aemkbHcEO3sX1uLoyKMnh5ut/q6sJL2p1riWMBwKIulpcc
+/3p+YK+TvAljRqRW56Y6LN99bcINjaVNzcoHfLFXSeu4QUcf9nJC+HdBFKz/KIOXHs9JutFqzb0z
+ecF5WuaBB4x2+/TrtAHJMzcWqu4FlBuscsBWMJYnBd9TiZdrFLJKjkXLqazWOpjrrEUUSH26pkT0
+7/fdwqj6XFm1tOfr09t78q9npVsbHQpNcWVa/559TjXMr1UL6rdDtWly+/V5Rfp2SZXGSAsAsJZq
+fu6Ns6MEIulgTWl2Jcdq4FSrdQq92Wp7mS292ele6u1R+21h/fqmbf69YDBVpXvla/I/1CjsKrOw
+HpRKrYPOwtTdg7TIR+vZvsu2TdPDyr6fAYBQvPXYm7EJt+4qI08VakbpMFDA6qnijMs9uHxRt+oS
+u8q7YGI1aq1CZTDXHCWSbn/v5tUp+9PhHAAUtSTNY/UAJ3Lmho6adT5TPdjEsvVbZ6yGykv6Ja7s
+JsRCs9vNLGCBn8W9wvUDAPgRACB2/KjLPS6vPbQrVTXdwGAaWAtoCq+2NVZmrNDKRZWUScuvUusV
+Jqb2zEsEXKF3lW/0wJ/mBUgqXv4zO9YCk4d5Zpw6a/9zzrWK11Us5gEwoC2+6a8rz//YVCarKER6
+i1qpdNSYrPym2ju2qHiF53dMnfeS72UAOPao11z5/omI40klL5foLPX3JGKxofy67/EtNz6xOaw1
+A8WluG7iM8OnV88FgDrHd43+gliVWbw4s9TYXWcwC7KTKxulZkC0nHUO7HNw+Ky4L94Mabgt/9ez
+bOWx6OPXy18sN1jk9Z8yWFOcFHh0c9KylvqKKQEl8BQfuQHwCgDoAABmzWh35EKR6mh5jnackQHE
+miv5pcn7ZhgVjsPzKKOlqlLlbGDYuoOlJW5h6V7t+m5f08Bxfse0DZ6HTxW8nlFpDKofIwwWXY7d
+hR1fvUY94PQfyp7Jd/HvMRUAcjrMS6jodipg/Y2q3PaZasYdwAq64pSwfHXecr2MX2XWaqTVGoOs
+dg+d4kqsTm0G7R00tuulU+8+5mAS/pEQBes/CkII4/0vHLqalRBbnlE5Xc+27IeFUG9rWeLYHyv1
+Fvs918peqTKanRgWg9Ws45aX6hrlW6I4QmznEZ7cqv/kd/e/2z8ZvXd/e51WrFDaX55xVpKh769l
+cd2ix1G0KWgd5HQhqQU5pm9JTlJNjn7DfPL6J7erzF0MZisPAINRr+Yb9Wr3hmVpnp3Vzrtzokfn
+vjuH1HroPybUn7CRLpB7VsuxVlepUXpUlunvSzxJ8ZxMHq17/RQ7esIvDf1G+i07fm/z3MHvmQ6e
+x5dLtIM1RosIA4DFpOdUlDZuh+KKsMgh7KZ3dNz3wPwVWw3OVHGp1tvKso3WDWzVcqoqtG4tCreM
+iQAAIABJREFU1QIAQHwxw3dU1+X0su+3THV6ceQylSVNeirbMFRvtggxBrAY1fzSksa/JaI5mCP0
+LA/sOuSLJfOe3fV3WSNR7++NifGDvi1TXnA9W6CbUG2yiAEDYKuSqipTOjd2DKKBJxQZuMhs0etN
+MgwsmIsvBxcmrn17+IprhXte6/jAraVacnI09jq9pXEmdcwgg6ZUXqgBeQvVABAfhEy1u4XTeLaa
+VDrKUKmWVmoYcUMTG6L4wJcqKlyCY3fEjpyyct30vlmPIt+fSXa+ztFgMNs3+hBbkV5drNCrQdFC
+NQBKBGJQumoauLg4zzhY8uOcLkvL96e6Xi8zRhktDJdlLFR1RbFjw7OrEMUBkWNgrme/aZ9+9dXg
+cxENog/uZFeJVEqTR9PJZTVUiIoN4P2gvnANlUip1NuO+UII4/MLDt/J3/aFIb3ytSKN1QVjDCad
+UlikA4/6Wgi4fKlJ0WbIgU6TJn3+dyu4hL8eomA9dTRaYBHglqLNANCQb6p/nhm8IbtUHX1baal/
+a6MAsVRjhcu59w4tzl+5UjDvxzsnkoumaw3GtmqNwUVvtPAxR4AFUoVKIBIX8uyCzgyZNHW9+6Lx
+11sK0Ueot/Xzvh4X/WR08U2l1eZ/hHjg1CbigqNfZItWl5oH65nvF4+Y/uPe5GezyzR9jGZzgFpt
+sDdYgeLyuYzQzqGS5kkyhW4dj496ae6Gr5/pcQ99VDcaFGqcuoDm0I1fSxHFRajxfYGsVuY+nyZk
+s9TU18VA4wZjRrOYoho8AESBvW6N6+72xelfNk6oMliiKpV6dxMLlEBipxPKnTIEzp12j3znvW+/
+Gu5W3vRa09YcSDv49YwXv9/x24WkjIohZsYaolLpnfUWlkNxaCyU2au4AlkOLW91Pnr87O9+fXfk
+zUZjj4BCqHG/mQe9jj8A1KIJ5SH1ELJJ0YBeH1/KSPpx9vwPV5+5dDO/cqjVbAqq1pqcDEYLF1N8
+LBCLDEKJXTElcrru03Xc5hc/Wnh06OMepPyY9I4/VHB+/YI3uJuPJqdkFY8ymy3BlRqji8HEcIAj
+xCKxUCuRiIoMZnG2X+uuJ/s45xh2HT7/Ro7S7A2sGZTp53pf/nHph7O+uzh//XNdCx52PUQBoh4z
+vQaFmveppRBQiKKByxWxAolILRSKChjkeKPtgEk748b2OfL6gHaPdOj7nw3nD6QRaa6vU9deTtm0
+ePRzP+y9PDu3VB2rN1r8q3UmqZWhEFcosUjs7AoFIvsrkYMnbBz41fMnmm6h83g8aHKfPDIINV5n
+UdQXhvyEBavtfj6bs+9C1nSThWlXpTW66o1WLtACLJTKNCKJLN3ZO2zfkNkv/LDsmTb3Hue6hH82
+RMF6mrBaqwDYlQCQAABsTXBX+u3b0KIz+7j1317a9uvA+ZkAfiZbPiYKYahiWDqvaVnktdAAADtv
+7vny3Lafd4TtTbzjmVtaLWYFcqtnaFRVt7gxudMmjb/d2w8Z4Z0JDxR1VA9u8s4c7nxQWl0BgAUk
+wq4uDpeW9wf9iod0c/rHu7Mwxu+fXPXyxvU7T4adv5blVKTBPJlMagrq1q+0y7SZd1aO6p7bVMFD
+CBIB8HwA4AJgQAhUVj3VyGFarTEpAeFlGMANAIBlgTWbzPdFTiOKvYQBFgCA7a0VQA0Uty5KCDHo
+Fgb0FgBIAAB4PCq3eOzyxK3d3E9/+9OPHXcdS/Mpt1AcN7/Q6j7PvJ42e8HwOw/ymYp7eVM5xvir
+CzsWJ/y05XjYid9uedyrNAu4ApHVr02Xik7jZ2QufH7k3XCEzE2thoiF44CxBurud1zNioSP4cwc
+ZgWEv2MxnIJm8qA9AASYZSmKvS/iM2LqumKM8RdXtn+y48etu0IPXct3KSqrFlu4ctbBy08dOWD8
+vZHvPZM2WS6vnrHl1d8v8p9A1KwvqjDGa278+uaejT8cDd1zOde9sEwnpAWOVo9WrVSxcTH3Wk14
+N2NhOKpKTugmzE4VZ+cozX4AgDGjRhX5acaS3PRHGi8O4l4D29YXD37PGGNA/2fvvsOjqNq/gX/P
+zGzfTe89tEACoYXeQu+dANKkIyAKiA1bsCGKgIgiovQaeu+EXhMgQCAkkN572c3WmfP+EUBA8EHF
+F5/fcz7XxQVX9swps7OZm3PO3EuBLEeL/WNL4ZKT3gCCrzle4a608zD7BweXtu8zNPXVdjXvhIWF
+VUb/8idOxAtGiXieEryBquvyT11PhCOpyqckRB3z+bYkSqM+WDtn4+p1u2JrX7xT6Fhh4nidS/XK
+pl37pA0eNjJuTPvA0h2L3/ldpXITyQHog8/sn+oPJaRCEE2PPXzgO3ihEcC2K/u/PBW1fGu97ZeS
+fdJyDGpJ5SR61Qkr7vPK5Pj5r3dJ+g9P3DIMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM
+wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM
+wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM
+wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM
+wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM
+wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM
+wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMw/wDKKWkMaCGS5AOE5fJ/ok2oiPDhdDQUE3j
+ZTF/qv7F07orglyg82o8UQ1KyT/Rt7+LRkXwXUJDNd2nLVa87L78r+FedgcYhmGYf6fPezl7y2R2
+TQOajw7Yv3+/or+/vA6AplV/ZE3V9tUbt+gzpcb+pKTf3bzj4+PlM3rWq+avljWyd6nRqMe4z/3j
+KZX/2T4Unv1aq9Vyv6g44YyL2aPLXxlHXNwazYYNG9yjoqO1T3v95qXbg/XFJcfK9x5/jVLKP0+d
+G95sE3rw3K0fCsv5KyUWaUPE91dd/krfXrT46B+0GzZscN8TE6MGgPVRF8MLSjIPxMfnREZlUNXL
+7t//EhZgMQzDML9DKQiximM50DNEtM7S2Aq9QOgPAM4BOA+IF8ymotP34k7vmDHu01kD1hZ4Pjg2
+Z3Eb108n9H392I3MbSVW8bTRUHjq6ukdUQN6TpvccXW585/pR7nSgQOohwT4ERDNnx9HJHdx9fpu
+ixb8uHzjlnMDYij93SxVVrmdVqOy08oNJfZ4jvsijf9Bu3vv5VnHb5WOtLkElXk6qeI0IrH+2b69
+aJRGCoe37+q7cMFPy9duOtULAFJK1CqZykmrMJY7orzguYJH5sVgARbDMAzzdBQcAJ4SUnWvkCSe
+8O40KLjVhjbtWn3YoUngUnlRol1y7OnZV9b9PJhSSihdrPhwW9qYI1cyIpNMPva1Wnb5qWNDn58c
+C647pZze82n+zoWjnhbkAEBkRLDc3d1d4+XVWB0ZHS0AgIPNTAFQQkBlMkJiGkPm7u6uaTxx4mN1
+UErJ6PBwpbu7u8anRYQqKqpqJipz5iHF7du3Q67GXut961ZSwyWrUn8XpLUf3ndno5Zhk9r1bLYa
+gK0FoKrqAxVGhwcovby81BGRkQ9m38iRo5c9rxYiGBrX8mr95iy+t+W1b1ZOb1AGVC03NvbyUsM9
+VBMRGfVwxq47oHB3D9VERMXLw8PDlS1mLFBNbNxY5g5ogiOj5MuWTZQ19vJSB4SHKymlhEZF8C18
+fFReXo3V4ZGRwuNjjeQeG+v9Wbdbc04o79y8FXo19mrvhPi7oRE/xGubTxp9umHrllM79Gj5bUSw
+q+FhHZGRXEQLHxXgrgkIH62MpJQDgMhwCE/2yadFhIref51hGIZhmL+BUpAvujh8opDpxICmI348
+uXtNYH8//iSRBZuad/tsAKWUo/FR8g9aaz9TyzSid+jANfGUajcMDKjdylN2jWhqF7ec8P3AFEqV
+lCYp3utTL6K6o116QMfXt7+yQe/+eFuUmze2VVjX+l4rNErNHZVj4LWGvSZ91n1enE/RhcV27XT8
+MbljtdIm3casqutlf0SrsrtdveXgxeOWnPUHALpmpGbm8C5DGtfy2qtS6O7q3Gtfajbonbciz1a4
+vV5L+Ym7ii8ECBUUduVa36E7F5zLcHq0/Q8aqSe66Fzi1I1mf1B+e7tzKw23Weda/Xz3PkPm1/Nz
+PqRVO8TXaTN46fSl5wOOT/ALCa+mPE4IsXK8zCpX2mVX7/vJF5GUKpdM6FhraOsaX3lpVXGC0vVO
+tWY914ZPXt6cUiob6CjM1WrdbtRtP2xFTR/3o9oOny6cHOI/zE8u3PBu9erabk3rLHfWKG86+zc6
+0n70p8NGdQqeVsNZc1HpEHC9etdZn05dnekMAAW/9tG9MbTDyPrVPQ4qFbq7dl51z7ca9sHrX57K
+cZ1YXTHPWcGXAIQKSocylf+oNV/3rT8k0F51SVZnytI1cVQDAHvnTnac2j10cl1P+xM8r0t2qd7k
+SIvhnw6LplQ5OsgjwksmxNdsNXhV9xYhy1w1yhsuvqEnuo+fO+RZgTHzdMJ/LsIwDMMwVSiASr3V
+SgiRaO43MkMltJSTU4nXGYIBcVWxvFpGgbW6ULNRAnVrfCGQEBMARC+cfsQz1DgxzbG5tbqQZtj4
+SJ1bxoSFbDtw+7uberu6Gnfvs46Vma6Jxze9lVmidEgaMHYeCJFoRb5dctzlZjpBd9tNU4i0y0df
+O+sRXEwp/fyzDj49t10p/j6T96/QCpUnnU2JYTeORH1UbPaxjvezu+GnN9wqMFlaa5y8k3hHlzMK
+s8Ly2KB43gkEtTiedyMy8IQQb1NJQbOYmFv2Ol6R4KIqkiVdODKeeDVK6+Bbe7OHo/mCLrs4xMTZ
+q3Xu3ud09rJL9b+a4bH0cMxXZ7NJT42Hz6VAsTCn6Oax3jk5pjp9fgybrKLUBYaCundjjgc6u7on
++dXwzRPTTWpIYs2i6yd9b7sozrvaCUXpOTfbXNpa2DTJ1e6WoLbPc6tID0s9u2v6Zd8atwFsXLzq
+0sCtceULCgT/fLVgPOWiT2h+9YBlTpHRyzzSV3fVx1CZUJJna6Zz9r0tObmeo9ZKNSGkJiEk114B
+jsYsk017/dMpm2JLZktOHunensbrKLkRenlvxeI3pwYKjQS5ApJYM+N6rLfZRXbByV6Wn52X0Orc
+0T3qLzZPuA7g9v+3i+2/HJvyYxiGYZ4PRwAxU3YndsksjuPWOdX6eMPGePMwovNP9W7aaw8hxMjp
+lHZGCoHXaoyS2sP24ND2MxaVvvn5soML3hpxbOrgEP2Dn1NKub23izokl1jCdI0H7n37xJ2x84c1
+mFLPz+6ME83wjC2xc4Foo5zOzWDfdsqylPSMV4fW91ziLJWKuSX6uoNvQZlrdk3x9K35ee3Wr06d
+8fb018e3cFrFmUrVZQlnG75zJO9o72ZuuwWikvwbdTpYFPf991Pbu+l/NzYCColSAIAkUaL10Du2
+mPzDvfSsUb1rui5xouVSRkFJ4zk1D+WtWDptqZtani639yqp/fquH66t+XDXpZMHGyXklXcSgjpe
+6PPe9olXl78yurM32U2Kb9W7HrW7t0Kp4KjCQZRV67llxOvvjFq8bPRyXjKL4HjAu/XVCfMPvLb+
+rXYz/eW2dKtKY9W0f3dJSvrW0W2CXLdwlZmaSouhFqVUVmD1SPIOqBNZs+3oqR9GTpg2rKn9BslQ
+aF+eeDF0dnTBvs6NXA7yRCVVb9Frd+mV+ctoRaHxwak2i6AnTkd7n7+V80qlY/XiWn3mfJiWkT18
+WIhugYeYIks9fnykXKXUgnCUBLSPHfvlgdd2fdhtSi2l7bbZYvC7cvJ6tX/4Cvs/hQVYDMMwzPOj
+Ro5SU4hWKe9irjT2LOQC5U0GjH5/wk8DjwAAlWDjAVCbxBkeOSyKRvEXki7YRefnayMf289zQFZJ
+JK9SmyDzqRN89e0A5PdedDYmsKbbMIW7Zkqw4WYmCOGJXGUtVfpnEEIqysuQoeaoaDKZtclnwE8d
+VPNe+wauZuHG0ulLv/v+yKILxklGq03GK4kiEZBbRBCAQhQpd/f5Rkk4tdpUbFc9jRCiNxu4HCWh
+os1iU+ps4EoLjBwoCECJ1WIiAGCg1hq5Zl7rGVTrUuiUusnanj/mdqynO8eLZonLT/Dj1Wo1kamt
+knvY9XkzR9zoREgRlUBBOCo5eheezQrMta8RlK+kqFSoNWVCQItUQloWC0r7XDmhEpUkfg5AJ/ap
+mRgeoqX81SXvzf9y5eFlscZXLTYbLyihBCCTJBAAEG02DgA4isfSR5CKHN9UE+ehcXRMqTd+xBVC
+iKF3PeVFJx2XY81L8YXG3QOEULj65F0sCMiR1eyUqxJpBSQqGM2GP/0U6P8yFmAxDMMwz0eiIIK/
+uXW3Nz/a8c3Efq28lYdlYpEqu0QImAhIAKAymXJdlKTMlpfpUd2a8PCJwcz39tX+bMz0BbPfWf7O
+nY05j+yB8qcCeJsASq1WUb4FIAD4dj0nOI7r081e5aLiadXKJHhSFTRQGyWUAlQCXm2ily/ccHrc
+rzvOfZMpry+06Dtyef/WQQdkAmehVbvzyf2ugbv/93OhIDyxcgBAHgaEhD67uKyyagxUmXL/3lqh
+tygBwoGT20CpCAAy/sn7LgWhIO46ELPFRiiqgkHCWavaut82JYR+AsgXRUVPXbHrypf5usaWNv1H
+LOvRtNpRgSciBSFVXa0KqHhCn9pXQaExCoTaJApZURZkAFBYZpZLEmSUk9mIaLUAAEdtnLsOhNPn
+EFJVJxUInjl+5vdYgMUwDMM8Nwo5csuU2R2nLj7XpbbLOhe5wZB+YfvQQcvTawPA6C5ed3297c5x
++bF+l/fsmvn+95tbbfl2SssTu/a8ffzs1bHJdzOqEztP8UF9hIRYvECT3BSiIeXyqY7Rv5xpsOHN
+1l2WL5y/bMWK/R/dNXu7UenpwQIlhDY2XlLf1UshxRZe69G866lhPdz2OZWkGHgqcYRQKgGUcLwV
+1EJKjZLfof1Z/pTSF77/2IWSO34aWpBzJaZD1nsb2h7+fGDY7pvGHlaZxsZXb3LLXFFqJATPnYyU
+SuTxspRS6A9r75TTuuUSr3Rv0St6QrjsoFNpuon7LckppZRaQM1csUEKXHMLvkSl5IHfAiO51i0z
+2J7cq8zLDUpd82XvC3t+qrnzttgnq4x6qarXjbdVFOS9kBPCsE3uDMMwzNMRAg4ARwkRrBxPwIMH
+wHOoSgsw6fUeh4/Frz19svBmr/OrvhsVTekngYTk/jKu3qIcfapbSuLWoT9+sKk3IZRylFMparQ8
+Wbf9oCUbepGSR9sZNbjukRv5FbtiUw73XfPWsd2bYRWsMhci9w06Xl+RlU84XgZQjgOq8jhxlAMB
+TwiE84oOhiAFjU1WWnrd2/bR9DHbxOH2MlFjEUUBUqX6HkCUMrskd3VWUV7M1kGR07Idqf2S8QCy
+H3aAggMIB0J5wvEEgAAQjhLu/uwR5VGVroIHAMLJCAEEUMJxQlWZaePbXLqRWbK2JO3SuENLY9Yc
+liyiyGk1Mq+W+4e+NWjH7VNv1AMIRx+MAQCllCcgHCh4Rw0I4UVCwAmiRJQVhcXKqjehqm1CCA9t
+l4q6KlzOFIwdEze+/f6ATdIEe96mtUngqGRU3wCoQmGf5KoqKM08t37EW32ztO809j8LXOMAIij4
+QtJkysq8NnsuL0k7nfplyvFvP+h8xDRd4Hmd0TEsqU2v7j/SzVtqkftjNWhAKmQKQjgIIIR7mK6D
+eS4swGIYhmGeSiK4RoE1hEpn5ZysAhI9ACCRgEsDALvePxcuG+z/3fkdmcWmirv6uWthB8A07pcb
+p2suHjhm+earvY9dSatToXKnddr2vtZs+JQD30eEppLPHm+nwcy9WeeWvvbe0s3HL+y5mtdA0vib
+m/YYdaJN35H7HSo2UY7Qg6C4TSQpGQBAkEYlso4DTdwYi8oDH0xdiRVbS3ZcTGtL7QMrwxu43Tl4
+4HRDGzWmrj0BumFKv5OJJfTdfZezW3IOmiSbRlf5aPuEw3WArqOEu2gWZUYKuo8Q6sFLtvT77d2j
+wFoCKV4lwkqV0EuE7AaR7Cgh2QDgNPjnsqsrp3+xef/ZmO2Hb7bNohpF9Za9r3d7ddzWz9q650Zw
+/FlQSinojQftchyXKFG6DkS6ZiiBjbhCTwl2Ukq1FmrLAQBQXAOwBpRcmwOYZ38y/ifx550Fey/n
+tuCdq1eE13VI2nfgdGMbNScsuAa6cOygw6nlUe8dulbQlDip4igRb4FiIyFSYrHCxUoIoTRm2VaX
+1dszN++J6XEjS/LUBrfM6DL41R2bZne+OnaDDRR0LSQa61gCm0VlNkOi+0DpVQBp/8iFxjAMwzAM
+wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMw/wve+6ssgzDMMwfo5TK
+KisrXdRqNUvI+GIQgH09C/P/VQUhpPxFVMQSjTIMw7wgeXl5Pvb2DqusVmsDSZL+xBffMU+ilEqC
+IFgBKERR/I/lGebvEgTBKop4k1K6iZBnf+/kc9f3IjrFMAzDABqNRi+TyYvLy0vtjEYjCGGLBH+D
+VavVlVAqOej1enYumX+cg4ODSaVSJbyI4ApgX/bMMAzzohEWDLwY7DQy/81YgMUwDMMwDPOCsQCL
+eSHu7Il0GdspZKCXgzbS0dHxGzv3wA/bjv6wx68FVPey+/ZvsWPl3IDhn69sHpVBVS+7LwzDMMw/
+i+3BYv62tWNCG02a8u2Htw18y3KjTS2KNhsvswg39q7RfxSTsOO1PYVf/tTbJetl9/NlovGR8nem
+LRp3KNm/f+z5/I8BbP9dGRrFfzBpk5ugcWqaUmz2FxQas9Wr4eWybCTs+XlS5TPrpiAr5vTxTCxz
+bVxg1noY1QH3XPxcY75/Y8Qzn4ShNJKbMzPegYeu0d0yMUikHFH417+eZlTFHZ03qewPxxIZyf1k
+jfFMrfQIKzDbuVWqfZP8XKvFfv1u34o/dVIYhmH+D2MBFvO3XFvQy/vtb498dbnMqblXgy7rWjf1
+Wx67fVtORKfgmucOHppx15wZfv7C3Y0A/qcDrPN7jgftjSmJMGkD4NCobRb2Pf56dISrdnqvT4fs
+u5T+ep5FHqBW8jZbpV6lpzsr3Wq33jbsu60LNrw5KOnJemlUBP/5gNvdN14+PTuzHLXVKpm1vBxy
+51otj/SdfyFy16zmt353TCSEOQO2dtsVmzPjXonYSKFWiTDr5WWmHdSuWrPj3Wcunrf/22mXCCG/
+ewqORkcKnyza3DsqJuf9HD2poVTIrOUVRO5Su/X+PoviPt09vf6dF3neGIZh/luxAIv5Wy6evdrp
+SpmymTyww4G+81ZFzm9F8gHgm19u5X71RkRallHWxntssxtxX7zsnr48lFLZlDDn/rmS1lfh2+GX
+jZ82jwv87JHXoyJU0xccnLrlVuYss2PgPQd3h29quMpyTWlx7qVGU7+0qwfGH7US19c3Jryx5JXa
+2Y/WvWjt6S5bzlYsSIcf9Q7yWOhvx6Xr78W0vZt8tN/ZdXLFyKjc6WsHe6T81pdI7quuiwduiEmb
+lyf3Mel8nZb6uTncE3Ku6EorrV3SEk/2PFdp9uhp5zsZwLUnxkHm9/ToufW8/ttMLsDkF+Qx308t
+Zpelxra/e/dI7/NrVfKRUcVvrR3slP4Pn1KGYZh/PRZgMX8ZpZSbFCivLwpuAg1of/lBcPXAu99F
+ZQKIIoRYX1IX/xViZ4dWv5Rt7mmU1SkO799jSyAhpscKWCuVNmoXpPCsd77puI8+3vlOq2sZqApo
+ts/qdPTrzRe/vpp0sufe3cfPUEq/e/AIcfayTn5Dv7gwPRmByoaDprxxatnkvYQQW9rc1rs/33y1
+LOre6XHRP/04ilI6lxBiAQDcChY4XlNLVHtmNY6YOeejBUOOtyfEBgAnv4nYNX/F8U+P3I0ZGnPm
+4oTwaPrWifa/9TVpUafAHdcrZ6TxNdA0Ytrbx38cd5AQIt7+sumeeZtvVmxPOjHy5C8/DqOUzif3
+62SYl4kQAkIAKtGXkq2U47iq9imFJP035EslIBwBJIlld30B/hUBFo2Jka3ZEukZdVVvl68Ioa16
+DSleOLFNPiHksexy+fFR2gL4yIOD5RVnd0cpl6264GMI6G/uOnx6xqQwYr0X9a79wh1XPVPtOolh
+E97OigwjT923UpBwRvfDqvWul6/cVqvd6lhDOo4p+2R0k8L/dFOglAoJO36wX3HonFNZYSEva/iq
+cfirw/Jb+hLjHx0XHx8vP7b3mNuBc6ft8g3gg8K6G/r1GZMzuOUfH0cpFRL3fuvww7YrjqaKQl7Z
+ZHjl0OGjCv6oPUopObf2bdcFB7KcJEkg9btNK/lkdJP8py730EguObaVrgSCTNU4vDyEEEtKSopy
+9bJ5HrHxWRpd6FB9v/rDMgcPJs/M8ldaJqkJIaLaw6v4yY0799t8ockWKaXciR/fcVt8Kt2R41S0
+Vv8Pir6MqFH0rPHFxrbSiaKdoG3atCKEEEt8fJT81PIVXjtuSdoy+3pS94jpuZ9E+JQ8Le8JpZTs
+mD/KdfO+GLfbeZDX6DaxdOj4LpmDQ0Is19e/57joWKZbJudhGfjaN5mTwp4eRFJKhclNPXtmFNF6
+dm26rejStnXswScLDdtX2jx++gcNvZrIx01tmUHeqfrx/T5d/qKD6+qs2MqGeZdiww/nYTkAAwB8
+uzK+S3KprIl96yE//bRs8v4H16//+2dKtkyse3Bv4p3h5Skn+rb9LmUHgOsAQEIGW/b6HJCbAAAg
+AElEQVS+N3nJu50abp4wc0jKo9d8u7e3pCwfFPhzemFWqxu3brXzO3vcGfeXdimlZHozzx6p5fJQ
+x/bDFx3/cdzhB5/POrMvFW0YHXJo/53EV8qSo/u3+3HsLgC3/9QbyzAvHIGpshxFFRY4OTtByf+1
+nA+EEFD6Z8MNAgIbCvLzUFxWCY2DGzyctODJywn0npdkLUVJmQFae08oZC83R8b/hRT+LzXAopSS
+OaNahbQZ3W+Q0WLrUFDJ+Rj5fJqfei1xz8bq+0Ysi9m2blJYDlC112TJ4m8j1tzybNewll90SszW
+sJRSqYspYX3pzWTT8uXju1164/N1k5LKpQ56WYH5dnrutq4LMn44NNO3+EF7+dE/aN/+cmWHbhGj
+exktUv0Kg8mVv5dtjL0el7r2F98TQ+ce2LLp/e6pT+tr1FcRfh2b1x2grzS3qjBaa4g2q0K8s7B4
+z5afrtQf9OHeRVs+O9X+iZkJSik/Z1TrhpMG9+pXAlXLMr3J1yJCnp+Vknvp4NqzPabO3/n2krfO
+tX9KYLfms4jA9k3rDTAajS3LTLbqks0mFxOWFO7c8Etso1ci92ze8MnZmoSYHz3mh5l9fXuGBfYv
+NEod8oxCEAWHuFsp91b+6BvdLTJ628HI9o+Pbe8dp7nLD06Ny9fW7Pyuw/yVfX3ESX1aDcs0q8L1
+ZpsLTS7OjT1/ckPkVboxsiEpfXDY4Y3zvK6my3x++ma2zKRUeIh6C3EzxPvNnD+/iUkUea2CF90C
+vdKH9R2W9xcui2daPK179a71A/qX2kj73EquOuE56Ur86MRN31U/GrHg3I4tM1s+vs/rhsn+6w8/
+eSOtQlUj5PWfv9s+3t8wdfC04eUW0iGvkve0yrMsqxKuXtu7KnTnD9H5e6a2d9M/ODRh1zu68R1C
+e9/OLhiSV2YMLTdzmqIDG1JvX7y4e0Cn1smvfbGhe56Rb8z7NUs4n4GZAFLxFIemtgy4m10cUeTQ
+sKR1aMjmmU8JqgkBBRblAMD414f/ro6warIsWZypUiovti+TV31m6cEIp55vHetQIK9j6No0dHvI
+gxkqAJc+qOv72eaUscUmq6ulIE+btXt9Y9wPsACg11dLSwCUTHxr4u/aauZPC1aphSIUVbgTOZQP
+X9jSwyW+3BJepAwpG9C60c5HZyXPv9cg4NMtd8aUmq1Otvyc4JzdaxqCBVjMS0Y4Dllxx7HsaA7G
+TRmDIGflnw6UJEphNhnBK5SQP3dSLgJOMuDG6V3ijlOpxGqq5PSVWrHfpHGkdbAbR/6lCf4JoShL
+j8bqLfHoOm42Qt0B8SV1VRRFmG02KBQK8C+nCy/ESw2wfuof1OTQpZz5caWKhq61Qk/4e4pHeGpz
+yk1J7JCZmvjl3kpFk4gf4t/dMjUkF9WSucyfU0JjL9wZnn6vWjvvwLCz/qq0g7dv3R6Unrvqs+/t
+kSRqa5a7uZWuUyVfG3bzvG26X7U6sQD2A1VPaL3f99PBJ65mzimSNHLvgGrXAj1l5wVq5gqTb7W6
+dy/xk4PliqZjVtyYuXJsvYxH+7ljessGX31/+MuEUrGdTe5U6uHvf8tXqS8qS7lVJ6HEOqkwo6Tf
+G30Vn0VRunrwIze693vUbXcgLuObFINzgHdt7/0+uoo9Cp4oTfkp7RLTyiecKyjoNcHoM4dSuvHR
+GZitrzcN+/LHw3PvlostRaVziae/f7yvvLy0OPlGcGKpNLUwq6xfxCBVZDSl6x8EZ5smNK316/bj
+cy8XiF2pvU+uf7VqVxWmQkVW0tVGxZb4jiVm2qbthyffPvV5u982SuelaZJuxbe7kmEfVmfb8rvn
+Y0rCE+Dm6+XrFqfRF5Yl3r3QOicjr976dz+WUUqXPrippu5f2WXtRfOblSazUl9m9dCbStSpRxZP
+/P4cHwEqEfBuYrWG3RdSSlc9bWbpr/h1SEj9NTvPzL1WJIZzTgFp/gG+cbwhT5uVdKV5Kb3T+bCJ
+tOzy7Y13D7/1yHtXnq+Kv3GzTVKpIiz01I/Ji4/ktYwpUDZ3DQyKqeGlOmHOTfS/fTuhdznnFLD9
+SlEsgEQAoOdmqN78aNPk/VcMMzm3muk+QZqVPrYSI8lI6H4tPfG9PKWdSeHknxrgK9/l5OOWoKEV
+T316jtJI7suev3aNy5eHujWptz50ytC4kwtf+dNjv3jH7G0ToRICa2a4OsIMANuWX3bTl1bUFfyC
+75XIm6Y9bDN6inbMe9umnM1Vd61e3edCYUpefYLckGhKlU/+B+BpziSIrnqD1VXw8s2SyX8LODdu
+vuFZWa4P5v3rJWXYwh6eYxoVYT/y65NvXMjXta9Vw+98bkpuA4KCkHhK5Y8GfczLRgDJgkqjGTZR
+giBXQqWUV30ZLRVhMhphsd3/qBIOCrUGCl6CudIEs61qAluQK6FSKSCZTbBQDiqF7H7dEkxGM3iF
+CjIOkEQLjJUmiPdjGU6QQ6VSgpMsqKw0Q6S0qg2VGgoZ92KmKQgB98hyoEQpQAgsRbnITMuBVapa
+rqOUglIJD+Osh8cRUCo9tozH8TLkx27B8r255sEzJspr6zgiPscyH+EI9BnXELX5EHFrP4H0CXPB
+7StxhOdMoCDgOYKq7lX1V5LoI4Ff1RIdd3/WjD66VEcIOPJgyfHxvhLCAaAPx0Mlqeoc/FYChOPA
+PeVYEA4cR8ARCUZ9Me6llEEvcSD3WyaEA+EICKWQHj13f/h2kPszUPeXHJ/SX8IRENDHx08ICLXi
+6o7F0snyUNuE8d3kjhDxPOf93+ilBVgXFvVx/2LJwQ+vV/iH+LUbMLv9iOHrfhxWrwIAv2pW+8At
+e2I+PXl738Dr55tdoZR+j9gwgHISbEYBXqEX6745/93VEbGlfX0HaI5l3xuX4dg2rdXExR/smRYS
+P7a5P58Wc+/DcpM+mFJ6kBAiETJYnNvNJ7lJ3Xqbiv3abgmtViPxzVfDTQEBNrrno6leP0ZdmHMm
++dCgo/ubXqWUfvUgMDj2Yffqn644M/d6obKdS6Muq0ObNv3BXi3LGlKzwnZzX5Q202Duu/9i1ge5
+RZmdtmzBTgAFAECXNbYftuze2PhCu3r1ug6d1XfmjBWfhLsaAHBr5r7+8/X9mwfuSTdMlmsV3KNB
+yIF32gd9vubyvNslmmbujbv8EtK00U/2SkXuiLr54qW9R7TZBWWDDsZkvpNTmNVp+T7sBlCStGKM
+6/tfbYw8l6fp4Va/8/oGLZt83bxdsxx6+wxnuR5V49y5m5+euHOgR9Jp34KvYuis98JI1WqeSCgh
+nEQthbp9B/ZPdArodDw0rMWbg5u6JhvzrsjTj24duer0vc/z0i4Ob/lt6mEACQDgXDM4Kdho28mZ
+yhT3LpR2rxC5Ou7V6l4O8uTjABADceHsgwJS8IJmeK8t6OX90ZIjn18qcmjn07T7z7XrhnzXunOL
+QnnyZb7i9C8hxy8lfn4+fu+g+IOBOcuy6UeTvO4vDSsFyhEiwlyqObp9zZgSqaa5Vu/+b9St5rb7
+raFtTPE7vlLtPX2tb7ZW7hLcp3busbeq2lu35WzYnotFb1Z6t0toNHzWm8c/an8TAN0+ofnGtSeu
+zN+f49rbrVbX5ef2fbgSgO1ZQeT17697HbmQO1zvFFIaULPjzu9r/vkvEE2Y19lrys+X+hSILnxI
+m5YHHwRJcRmia3Eh9XSpq7vQbKxH5enZAKXRwqwuY0YcumWZwNUbdKBvTfOGQ5nrl2VZLdUXH4MG
+wB8GWHTPRPXIOTv7Jekd3H3ahqxs8mbd4l+m3x9LuuRWUkw93MPsj3V6z9545n2A0mWyN9t9MfrI
+HdurQugrO/v65O3cm7FzWYHVUiPyKFQAWID1r0AAsRKJ0eulDeezOJvZCLnGC90HD0dYdVdIhjgs
+fnshTeRdRU8HhcBpHNFh6FS09UzG0vfm0xs2J9HLSS4ode4IHz4O3sm7sfSsJM2YNoTz1MlhyLiA
+eYuPit1nzObb+BDcjYnCV18fFBWBAUQrSJxDUAsMHdgLQspOfP7pLpEPCCD2MolzC26FPv26I0DL
+4+/cPwlHYDWVIze3AAaTBJ2zFzyctVU3N0LA8RyIuQwZyakwwg4enu7QyDkABDazARmZObBYJWic
+PeHlbA+OiJBEGwrys5AQewHnzxbZQrsnyOWe7vBwc4JC+OOZLInaUJx1F+XUh+vdvCkCA+XwqVaL
+o5IEW2UBCgwc7NQC8nJzYREFOLt7wkmnAAEBoRYUZ6cjr8QMmc4Vft6ukJOqQIVaDcjJyUCxnkLj
+5AlfD4eqoEcSUVpaCEGuBjHmI7fUBgcPb7jYqUEoBUAgcBbkZ6ehoEyE2skbXm52EKgEEA42Yz7u
+ZRYDghq2Sh7c/cCnaplTQmVJBjLzyiAJWnj5eMNOKfzhTCClFPryYpgkOXScHln5pZDZecDT3REC
+pSCEwFyRi6ycQpipEm7evnDWyUElwGKsQH5OJm6eP00vGTlbu3bV5d4ObvBw0vxXZvV/aQHWxbPX
+upzJ0Yara7eK6rvkqzXzqpOypVWrIzYACdtG+S+9s6+wSdrpA31/jh28fmJFbCmoAyEqX5NGHXB4
+zWCXrDUAZoSos86WOZitTk3O7pkWcpMQIo5u7F8oJ5JktHKaLVVLuQCA95qPP4Xg4NNk8GDxOIBF
+kQ+7k7Iqwn3r7cLKrnkXL7Q+UDxVC6CcUiqMaeQ5KL7YFq6p03vPiI+/+HhuD88CANhQdVwFjWqx
++t26r+bGGIKytwwmBQ8qPHtDrzFV6P1EztkmuAYWfRLuari/p0YEUETjI1fZb+Nia9d2uDN4cdUx
+lMbIRtbvNjShlLbS1Om7ZeLC+Z/ObmZX9Eh75XRP719mHOuUed1aJ3VDL1ICAPt3HutxOovvwXm3
+OFdv/Ddf7Rjve3fHgodji902PvSz7F2Jvrev7OkTHd1nM4Cjv70TFBKhkHzbXWz+7sLZawc7pR9a
+VvVKdGSPTTdv7h9yuLi0Rs7pI/64H2AN+GjbuQHAOQB8hLPgkqzxCOBbvxW1+9tO6ymlD8/3i/g+
+J0op+bKr94AzObIOysC2R5pO+3H++oHqzD1LHhY5u3pYnS+yD6T8lB67c+DB3QO2Ajj/8FUCWGxW
+IdvkqKzVcfTHsZtmriWEiGvmAgAM8fHxa52dbTJ3d1R+/6C9TrrwfLm7TuHedkf0xx3iyMcPa8v8
+uEOt1TczUruaUNpgUg6En72ePUtzZM/ZbvFWTYjar+HuaZ8OPTdl9Z+bvcqPitS+P3fJpJs5XEdV
+zY77mzcIOxR7/zXJ2dFBL+YpFHKpvIM7bPMBLOw7vtOBq0Wzyj3CbzYaOP3zxlcGWc9paZnJbLZP
+uvnHn3VKY2QftO87+MwdwwjOo/2VasGNoiY9sgwo6nSOBluRXCejZcGARCklX/eq1v1QfOl0vWfH
+2MaD3/sy5FR7ebROKk83mezT7vw79ncyAAgHok/Cum2xlurD3pO/2tqFu7pvA64l5KJhoCsgmWER
+3ciAtz8WegSqq4IdIoBWWmC2OJFeb34g9Kkhw+nVX2DXgTh8EREC1bY14uXMnqRPbR1JPHuEltrX
+tdV0FXgKG8x6IxxrtufHfzQB1RU2iBTgBYoUgxE6/5b8q59MRWBFHBYv3YALNxsjsKX3X16LIoTA
+XJSM3etXSMcSjMRBKxAi19H67QZgQMd6hIDAkp9lOxq1mi8tyiU5OTbU7j4arw1sBJklE/vXbsTJ
+u3rY82UoNbmh49Cx6NHMA9bKclw4FoWTB26gKIsIx9atwK3Qzhg1sDO87cmzA0JqQcKJnYjatFu6
+dlsi/LLvaEyt6ug6qB9XUwOkXt9Gl0alSs5ubkjPyuY0kpG4hPbEhBFd4arW48qRbdgafRsyQUJZ
+iQ11+4zHK52CoRTzcWzzehyLL4SKq0RppR06vjoZ3Rp4wGbIw85fvhNTRT/JlcuUJaWUQebbBBNe
+G4ZgVxWoWIKYg1voxl0xViKX5AZ42Jr1GckPaV+LSDlx2LpxhRiTreGdtASVJaW00KykAOE4TkRm
+fDTWRR1DhcTBXFoCh9A+ePWVzvDScM+eyaIWxO5dTnfckltCXMsVSamFqBBd0W/yZHSv64ayzFis
+X7UdmUYO0BeC826DEaMHorabCuUFydi/cysuXswjubIrwvaVRajeegRe7RKE/xDX/iu9lF+CND5K
+Pqb70A42VTXJzr/phVFrQ4zJLXweZre+WqCUqrVvnSk7sCNHMNzxP5es958IlIBKIEqVyaZ0Kgeq
+boYz6moIZDIr9QnKe7Dp1mp7+iI3iYx8+HNKKRcbG8vv3buXnEA7KdA6s5Q/nlzJGYvsCkv0SgDl
+hV83csup1Lcvpm5iux7dNz0Irh6rc/B5I6Xn9gCQyE+TH/681YSmZUsvlsYqktNa3jrw/Xv1BuW4
+TFiy/YC18Hr6yk8+Md9/qiv20bpy5o3yzKw0tSuFu7lT/z6bHgRXj+m127iwF3YBkMgPk0BplLa7
+/5hOBqJV2tXuemj3eN+7Tx4yYPmua2uPNDidWpk/Pvb8rRaU0mOPBj+Cws5YrcuwnU8+Xl9HH1vh
+4cFn0VRjXaW1VPtwzPePpVXRFAUASeLoo6+9MDe+cjhyvaSzWeFGXWp3PbB+oDrzySKj1s+6uNnr
+9YvZlXn9Lx6/0gSPBliUArwW6oB2B4ctnLnryQcnQkJCLHhipsVcaVERjqNUpXlsjxsAKIhoUlJR
+rIAks+PwzI984epe3gM+OtnfwLtbanUatnWKf1Uw/LzuRb1rP+er76YevGN+w+Le6kr7V4bN/eFV
+n4fXg8QRmRXg5AD0AD00K7TuZ5vvzU6XgkndVgO+OD0r5NbbI4MClQqYrDZJUWEofOa3NtCkxYpP
+wnsP3n6teE6Bql5Jwx4DPzvyWacE8vlvZWycILMBnEgJqQbQA2+FNNh5LX92FqlnCW3X/4tTb/om
+vR4RGKSUw2SxSoricj37loh/CyoBai+0DnOWnTi4gmzW90aDhgNoD52O8BwgEgKLPhn7fv4W1+wU
+UAa0xviI1qj6wEuwWcywmvSw2qwQ5Bx4+5oIryPKDp+9hc6B3oi5Wkoa9WqqcBYIKAg4QURufDR+
+mZ8PpUyH0Ha90b+1HwgIqCTCajbCaiwGpRwE/m9uZRaNuLRvrbT7FicNGTWRb+AjIPP0UaSUlcEq
+EYAAhuwEmiLvh3GjhqL43Ep8u2er2Lp9Pb6RTg6vGg0xIbwW3DRmXNz+s7Rz+y6xXuhrMn+lDq07
+94csLx1pGmdhzPjBxNHZFc4a7o9n2wgHZw8f1K4TgNt5efAPrI4a/j7Q8gAFhaUwXzq/76A5cNBU
++WvjJxNvLh95FVooBYL8+Gis2X4ZwX0no18TZ+Rc3IpFUeutQfXel7nf2opNpwsxcOJraO5jQ9y+
+lXT9uq22WjWmyqpJBhReO0fPKR3ojElj0a19KpYuWSvuvtCU1OwbyuVd2o+lS6PN9UfO4Ho31ODO
+kRXkx18W2/xrzJXRg5twINWbzJg6FN5CIfav/hqXC9zuB653sW3dZpR6R2ByRBiQeQZLft5t21+r
+Fje6bXWOf+rzSwSEWFGZcgOXLiqkoDenYGJXNY6v+kbasuu01DAgXDizfgXixTaY9loXOBrisXbZ
+BnHbseqYPqQl7+AWiF79+sOUeIuovfrwE0c2hsLeA/x/6W+TlxJglSNTe6dM5mcx5Wosl+bPiLhc
+Plp6ZOZDgBGvfLhHkVNmqC3pjGX5RRZ7vAaKpQAIRwnHP/7OElCJ5//jY+GUUn7OuC7uF1PLag/t
+271BiUXyN1RUuFDxID/LUOGab7C68w7IqTDyCgDYfaHUVV9mCoRDjQKdKI9/Vr1P3rQBgNRfazgY
+Gf5DRkmc6/WsxH5J++d/k3iAm+VTp/GF1okzdrYd9valDv1Gp0UODnl4c997tsLdWG70p45Bec5U
++dRNwo/MglXZstY1x0qq2TiZIahdeHz23qcdE2iKbKy9c76YiPqEG4EA5ADMD04eqMri66nJj33i
+OHcvmSRXKvSwSQKxWWV4CXJjTnlmWmkABHlJUKeOCem/y38OEDKu4t2Gyjvn74q8/s6NAEop/+A9
+4SiIoFSbnJv3Pvn+cwQ5hBC6fES1G8pr+YTLONrp3d3x++f1CUkHABrdz2HMrFN9UwRvdTVBe+0b
+dxjnP6OeBb9ca59WbG3B1ep4ckjfJqeuPavgU0TPn+jy/hcrZp1KlKaYPVvHtB43c9aO9zrEPVpG
+ZrQaVRBFi02uU2xZ57d4d9rsOINnULVuo2dfWDn6OFk1BiaTwFtFyHgOFRqZ6qm3hYxzC1STxnwz
+9sj18g8KVKFlDSJen/nG96OOPBkoy8zWSiVE0SzJdDmrFgd8vzvrg5tGH/+afca/c+7nkafJ8lGw
+WHjeZoOM54iNk2v/OzdN/J9EIQkOaDVoGu9/7zruxBzG6n16c9grk+T9WgVyoIBM7YUWfYagrbcK
+ROkAtcABVsBamYYDvy7EWUOqlOcUTiLfbUh4ToXQTp0R/cNJnD5TC0naYIwLdkfVJUNBJR7OgY3R
+a8gQeCsAtYMLCKUgvIj8hBP4ZV4OytKSRN8eb/FdGrhDEv/ipUIIzKXpOHryHtds4Mekb9sgQkUK
+X09/0likEGQUlAJ2tZvLhg/oiAa+WpSTetR+/2Frar6Vb+buhuDGoUhNz0ViQTlEQURhdqKUWyah
+moccrh5+cHLSwqFaIF+jVi3oFOQ5Ui0I8A5tg86WdC4uJQEdevUnjf0EmC22qhkfKkEe0IB7ZUg/
+IbyRGySxGqpJAM9bEH/rJlKLlLShOZtcuZoNahbA5d8Ukm6nIvdyPMppILUVJJDLRRRGyInxXqyQ
+kqZHDR+A6tyFdh26oXvrelAZNQgNUIvJZRWcJJZxVy+dp2JQZ3lEz6ach5qDp9MU/sylD7nYy+eg
+vpsphXQYwTWsHQA58UWH9o3psYwckRDK6Qvv4fL1clq7uoiE67GE2MxQmrP521fuwtqyGvg/2H1O
+BSWp1bKjakj3pvCUm1ERFkgvxxaK5eVZwrmL2VC3UtL02zEkk5rB03Iu+cpNVPRqBg+NPbx8fKF1
+0BCPoCC+Zo3qEEX6xH6y/x4vJcASigoVFo7IKcdbzZwqp8SszwN+Pxsgt3dMcnB2LtQqSC62PHu2
+oMofTzHTqGD5h31D+u67WTw5pdjaQOtUkaXkrIWUUiMACJJJTikkjiPEylWt9hoqobCYJSXUKrOV
+yv50Xp9ukSfuxkfNeGPBsgNHzt7K62wlpFHujdP9UuPO9XPyqXknO7NybWR09q+R7b0KAUBfCaXF
+AiV0ylIrpc/VXk5BmRIcVVBAVGsUv5txecDTg5ZxSVTkDBW6HDz+YAYBoKGVT0/F8GCn4zMTNfyz
+SouLVRyBAqCiVqN+5nKctysp5ZJECoNei6rxiUDVVcET3lS9tm/u76b2niG4fqtjYZf3HjiVer7H
+qndfn+9du9U+Z77U0uG16Nbx6eJIGtDstLpJz0PP2nt1N7Kl2/QN8QOziS/XqHnL9e+3cXju2auL
+26c6f/XRpg9Pp4ljJK+2Z3pMnfXu+pntbjxZzk6sKLRXS2UZOQkhv3695+2LeZrO9i1f+XHku1M2
+PQguk8uhKasgDjqN8laDbhrzrXcer4NmRKkmDp418cDNkg9LdQ3Tmw587f1ji4f/LrgCACeLvtBO
+JZXnZt4M/XnRtXevFNq1c2gzcuHIz8ZtfXAekks5TZmes7fTyS436QtL4qznHTXzjyI8bIW3se3g
+XVvT9p34fpM6EJ/1nyhXXbiG7s38IQPA8Rq4+1VDjUANJCpBEilsFJCpA9F7yvtoYzvBLVx3BcXG
+qkve3qM+6rntwspl6bYmQ0dzvo4qjtL7vyQogVLnAr/qNaqWCCUJFDZIIg+P4I4YOXss9Ie/5Xdl
+psMgtoKd7Pk2Tv8eBScVw2oD7DVqQkQRNpECPA9BeHBDoeAVaqgFQJRESODAEZ5SKiH72iGsiDpj
+y7fIeK1gJMbCVCLSanJ6/1NNqYTiMgkWGwdJkiBJzzeNIok2WG0iREmC1WqF1Xp/UzuqNrS7+3kR
+b08XUJvt/sooAUctMFvKQM15UvKdeK5QRgmlEkI69yL1fDjcOaOHzZAhJcQLvEAoqKREy15dSaCz
+DBKlILwMKqUcHGwQJQqO48ATABYj8ovLbMTTgyh4jpNEG4jCHh72PCkuyAFnJZJWKyeQJCIREbxS
+TdQC4QAKi7UYkrWC5mfcws1yjkiUQle3LWkUFvAfl+soIZAr1VBwImxi1V4vgQNEWwlsVgOtyE2Q
+4qHgJQpQrwakQ3AoNEJVCgtRlFBYev/fkvS39ue9bC8lwBIVXhYdFc1Ke8/SGhM2Lbr4Yd2Df9AX
+CsCK2MY88LtvCnluv+6xdN18JuubXGWQxT2k5sdt27U716eJd3GN+vWNktqVivvfqTPonU3LCqTf
+vgDbyY4YlUrOgPJ8J4VS7/BX2g0ZvLAYwGoat2brnB9WBR05l9JQQc2dbt6L755caPh4xXw/UEoX
+EEKsTjpSqVAQA8pz7eUqi/3z1O8Z4FMpSleMFJIyMz3f+VnlCsuIVgLhJKXK6PmCc1P9k1y9fAwi
+rpskSh0yUrIdn1WuqJxoJXCgSqURT4yPgFK5XHjuZKet3l6bv3p600WZm+Pr3Lx9epBKZ9+9krPZ
+7pjknEdom80OPh2XXPyo+TMvxh23S1tczTCF62q3OOsX0v3Mxedst2h/pN3U2T/MPJ0ijqP+LQ/3
+mf76B6smtUt4WtmOLTQFBzOVqXG3jzc/LSgbijV67ajba9rSt+sTw4MyNnveL8vqbGcnaO/NqYfK
+DY8cT2mU/I3wWSMO3SyaXebQ4F7LwSPeOTR/+JlnLfF2babM25+vyLh541CL04IqjNbsE9Wk/5vL
+Zz6Sk83sJATk2Fy0ToL9vXU1YFz/nONm/mkUnNIRaks6Wf/rEmgVNtgMQNOuwekxiU8AACAASURB
+VJDxHAjhYDOm0K3fzZWuuCh5XqFD6x7D0cyHg0yugFzg4V67C3qHXKO795631JnUSeGic0e9xnWw
+42Y2GtatDbUggYoAKAEvBzKvHxGXfJFLHGUS5+Abir69O0PgBcgUCiiUOtTu2B+Xv19nPRLTEsPa
++su4v7IHixJwSg946AxS/NUbUmkLb0EnB2wWC2yUg1xZdUuhtGp57jccOFqIk9vXI1M1EJHv9yNe
+dhISo7/H7BUpIh69F1EKU3kZJEqrgiwQCNz90E2ywSZS8IIM3J/YH/Sg6G89oqBEAY3GHRpPLT9o
+3Oto5K2GJIqwWEXwvAHZWic4VGvMj3/zVXioeUiiDRabCEIIrMX3a6OPVQoKCiLXorqHK38oLgGF
+hk5wdFJANCQhu9iGagFB0BWcFE7Ep0IfXgOOvISClBRkm2wUIJApPKF19uCa9xqFka19QEURVqsV
+9MFJ/Q/noOqJzccHzMncYefoTALaDeLf6h8MXqKw2qwQJVr11OH9ekWrFaYKPQACUbQBHI+/mMbs
+pXopAZbOqZq+hjuXcjnP1Dz77MFqhNSzoWpz+zPRmMZ/OR1G7qFvNFPHvj86k/o7uTYa8/7dPW/8
+RAgRVz5S5vzbQTU52OR45P9S/cKdC9beKLxHChJrJiXnt6GUXn3etAOUUg6A8CCDNqk/ygDgCoAr
+1/e+t/2XyOVTNsRnfVByM7rXvFvvbASQ3ruDZ96qm8WppDix3Y07ea0ppTf/456mHh2Lvfld6fds
+lhaZ547Wo5RufXLJklIq7+evCzKJvKAKaZiEh8uD/37ODRsX+PJ7MzINptqZZ/aHUEoPPHlOKN2j
+7u41uLaVl0maug3v/d0s4jR6tPKND450LNE1M9ZrHDqymWux3kY5cjfNmFJrxLTkFeNaP/NLjZPW
+TbN7f87PIwoVAfD1Cd20Zapb7nO1SaOFj9pHvHLmnnGyzaPz+e7jJn+walLXpwZXANBg7qd5qn1v
+xshsBW3MHi3j+r46Ye7GR9qiMRNlb7wR1a5U52fTqGrGPZkz7ccB73Q4fjPv3QJ1k+I2gye/c2j+
+sNN/dK01+C4yW31kVqxgK2lm8WwTM2D02Hnrxuoe7kmk+6cpXvtsbbtyu2pmB2Vg3P969v5/FSqB
+13mi7/BX+Rb5RTBZbFCo7eHq7gyBSIAmBFPmziPlRisHQkA4AU5uahBVEEZ/MB1yRw1E8AgbOJ34
+6yHTEAoRMtRoNx6LGlgEeyd7PMjJIEo8fBsMwqcL2nOW+1eTTKWDo1oGvm4vTPOXYCcXwclrY8S0
+mYJV0IH85SkKCkHnjc79O3Cfz1tjXcRb0CpELtw6dRVicG+Mj2gISBJsNttvcQeVYLNaAQhwdHKE
+PjlVuJd4gybkJ9G9y/ciA3Xul6UQJRk8vZ1h3H3UtjIqUFBaCmxOYe25/g18OBkkpB1fgoWHSjFo
+3EyEB9s/nkpAEiHabA9nrh42T6tm2R6NOwBAkuSo3bgNah+eK635aQUp69GMWAru0esFKtJ7UFc0
+7xCOQ9+sFH9dofl/7N13WBTH/wfw9+xe5Th6710FKQIiig3svYI12DUxaozR5Gs0kWhMTGJMrIkt
+JnbBLrErKhZAsAKiiKBIUZoCB8fd7c7vD1BRMTGJiSa/fT2PzyPszM7s3LL7uZnZWbZ9cycU5Vyj
+d1gXMrBHMAxBodPpwPK1yzQAAMdpwXE8dIwh/Nv3YGzP/kjXrrXge4bYMbcObeLyZf66t1oFSKnO
+E5vWrOHWKFWMv6WGHtqeQqqZJqxOR2Fs44tQ32384Z++g2HNQMaEltCUzBL4dOxKWtobgVAe2ceW
+4vsj5YgYMw3tmhg8flaB1+lqe64eN7sOWk4HidIVXdo50VXbFtFtorcYZyOOXr6WA8uAUNLZ2w4i
+ngcYBZytWbr58B7uZ8MKUemDMm2Lnn3Frayk/7qFR1/L1DHi3r2mmb/tcVlVIVQ3j/cb/tXpRg2l
+i79yxTguLu4vBYHpAGUkKmVeOWwYqbya2npnPxeAHOqsWHessHtJhcYWzJObjGJiUpGnseKomVil
+yTq+dUy3GVtaPLt/Gh0u2br1F493Nl15qnfl29nD7AcOGjmu/1cJds/m8em5oCysifyiVMxU8jVq
+MdWoGQAwmZxQ2NRE/6gxW85nHv5lbO+Z2wKfK2//ZOkvW7d6jF+ZbAjUzj/q5m98QMGXq2qyjvbs
++lFswLN5No5vFnhTpQtTSe2Lm7duduqVT0T/k2jhN4pF7w8IHBO1pimltOE5Xo1nlnVpZrxfpinm
+1TdP9O3/2QmvZ5OsGj6z9c1qGqKVOeQFhbU819Bu/ohdB+46J6aqRrAG1tmTNn93aM269Xt+/vnn
+3afjtl3+reAKAM4dPdT6TIGonZ65S2L7aR/EvWyZPw6f1GJvWtV7Dwy9CwLGTp2zZfqLgysAICSi
+uqu99LCdUpzLcUSUq9F76u8kZsXxwGPXdb3lxg5XfIcMO19/24Go9k47Uoo+zKbOiia9RkT9XnBV
+W16kqquL9JC1UlxAeUaUxxs/Vd7mbQdbnMjguuuZO6T4Do288LLHLfiHUAqxTAl7R2e4u7vDwcYc
+skddDowcFvbOcPfwIO7u7nBzdYaxvhggUphaWUApqV1jSaQwho2lMSMmdc+OyAxgYWkGiYg8deMT
+6xnD0c2duLu7E3d3dzjZWkIqIhDJDWFuYQwJoaCEhaGpBTEzlBHyF+bX8JCgUdtR+N8HvaVs3lF2
+x85YmmfoTFsFuEFOOBg5eqJj+yCYyNjaNjB0Jh27thU5Glug3aCRCLMsw9Y16+mhk7k6v96j6fBu
+IbDQQ+2wFAW8ewzAW339Rdkph3D7vqbGQU/BPTrxOZESxob6VC55uoeMUgK5uQdatmkBM33m8fwh
+CgbGjoGkY9sA1lRKnxr6ojwHuV0ApnwwlfEW3yUx6zbSA8cyeGt7d2omZmDm0x2zp41gZXeTsOmn
+zfTMxWLe3dkVSgYgUiP4t+0MP2cTgOfBMwo0DmrPBHlYEZbTQeHaDrNmjIVF+VVu0/oduMYH6SZ/
+OF7sZiCBW+dxmDoqlClKPUkPxefzLQdPQmSnEGLKagE9c/QdN4MZEmjIHI/ejK0xJynkttTJWFk7
+c4RS8CIljA2UVC6pPcLaf2I4+YciNMAZYlJ73GYugSQ02IvVl0jRatBUMrlnI+bywZ3YsD6WltUY
+Uncrc4jq2kkk1UPXCRNJezcqSj53nNbwRtU2EuaNuGf9Ua/tUWo/f99jIclFBw7lnu8Vu2reV8Nn
+rv7WXJ2erDp1StcxPEDvekZayMTBI4dIAocfoJRuQ8pzscZL8QSITolyN3Pm5sX8vICqy9F9B6/N
+uNRf+cm99PQi0lyrZztixplJh7KrRpTVQGLAP7nREEK45AUhu67lPQg9VZjcM37rd9+3HvTJ8oEd
+mxza9tPS8plDvayGLYsbkJSbOkDhPzh6CaUrphBSQ2k0+0mnif1PpvCzybX77QdM+3GdmwU5s2/9
+4uqIIAvGzEzi+/3OxHEPOT19w8Zh8cF+ssK68nSJ89rGXM9Pan+6KKlz3Mbq70Mj5y7v197uyJFd
+y1WjOwVYD5r/a0RywfE+RkFDN6ykdNUEQrSDhvc7dOLmL7EHsq6En9764xfdZkbP89ImJeuXl1ND
+Jid4cUz8pznleu7WbbouD+vQPPnAK/oM/wpKk8UTWwx8Kz7v4ZT7RqVljbIVnwI49mw6Qgh/6YfI
+PSezdnQ9die569H1S78YMHf3fNO7+6/62oiYBzevtlux7/yn+WoDG9tWPb56J9Tjyr6/WDeWYbUs
+U60uuXms7Qf2ZqsM9Q3v2SnZKoAHFetxcs92hZ4dBpxx7T7gYpTXk2UaaOYSgwFdZ4WrGGOZqU/f
+fWtCyXNPPDYka0FHw49/OTf+ZqWBY0Bou+9n+NOi9/buda6fRqvVkkoiE8lbd8+PsCCVADDxm5Gn
+L45asnVbauKkG5uj5g6OWjuvv2duxs0jJwMWHz4/+w5vZeTcvPcXO4Ya5pC6BeJp8krxtCkfDU+5
+Jwp2CGq+c3qvRtcO7t7tuHfv3qc64B+qqUTq1b4owsvw8ZsQ3vuk74mUdzbE7Lx+dlza+tlRQ+ev
+m9/B6n7W3VOxQcuOX/gkj9jJnQP7rI8Ol+X+C3vz//voiyYL0xe+q++p9Y7oM2me/fn3ynkm/R9/
+/UzDZRFWDu8uQ+DbZQCpruEgkcnB8Bx4Xgdrn/aY4AfwHA9KKaRWzTDmnQAx5TnwaIa3PvJFRLWO
+kclkErbubshzXF3wQ8HInBExZRb66TiIxGIFw3N1x0bgEjoWn7bVEZZlUf+5dZ4HDJxaIcIFtcOK
+dYdJwcDGrw8zwY9natvo+cNRurbF8P+1RXi1jojFIlYkonU9YyJYBfbHpIC+0KgpkUpZljB17zfU
+s0L3Ee/ULubJceBFxgjpEykCePB87fwnU88u5L3POonVVTrIZBIpw9QuRErERmjfdwJp05MjgIgR
+iQGAgOc5cBwPsbE7OoydibY1GoCKGamMguceDf0xcA0bhzntatvgcYcVkcKn+yj4gdbOoYIIjs17
+Mc7NwfA8Byq3RPOI99Gsvxa8lmVkegQ8zz8+HyglMLZvjffntwIHEAnLGFD+z87Te71eW4AVMmPX
+/UMfB36mir5OLhSe67xraVIrqcIw005f+2Bn1DpHXqYw04kcyltYWOxE7ZwaBgQMQFgK/vFwIaVg
+a9eorTdxm4ABwDJ1j9HbBEZVrXzLd+WV3Rk+WVe3Dt0781zzHFeDy4yqQLEmr9RTTQwVNnaO6TTv
+VtMqUImIPOm9DfzfmTvrxwTOxpE0nC1K7XRh3/UV57ar7hGO00akJOvJZDJjXuFwt5GBYf5kQDcF
+ABDON3Kem9j4WubFy7fPdj68OiFsrwb3zI3lRct23dar0fH2RKSQMY177wsZFrmi/grbLT45lb1u
+ZPOP6dGrNLHkamji9oyVpzap7hOO0x45fFVPJpWZ8PpOOZZKk/zxADcBgHXE0qKE2X5R1Tuy2TN3
+Tvc6vvjM9tOU5smImq+hxJ4nSpmhX48tnd8dv7j+HB2wlKC23UQ8Gp7BSRjKAmAJaINDtBQQ1T7a
+Sf5Yb+iDeEV2WXnbzLyyJtoHOTqJyQ1/NBBgAYDfO+vzDrzXdLb61ztILjjWKXbB8RYy8Hk7aQ2j
+AbHnGCPWuHnfn7rOmPBjd/d6Q2FqHSEEDAUlPPPyy9T17tLybuyh1H2Z6aXvVTAkhIhY7l41pYQh
+ImhqCC4cZ64nnVZZHUtYF5VAF0UF1y4g+uP/vmmZVqYN0xkGZnQf3St2+Y4JL1XeoTyx35nbNT2r
+anR65/cuHd9v7+LI568lDGto63+j34q2kwCkAgDxiqq89HnLxSUPUqxP3DzSd/eCk0E7KVcmZnkz
+SExg3nro8gHfj9tef1g7NTXV4eB19aByrU5efX5HzzGDY9o1cOEiEn3n8i5R694DcOTxL4OXlp+Z
+1WzRw4o0q/jMQz12zosL2U51D8Usb0ZkZrxV28jvI78euedN6SEV/P9BeQ4cWEglIlCOezwJk1Ie
+XP3xCkrBPf4FBQGBXE8CSrmn0z3JAMoDYoZ5ar8Aap+MZNiGb/zPllvv97/5x1G3UrpUxtTWna+/
+qfYHqax21Xn6eBsF//RBguefLpzWJZbriWtXcqf109a+VghoqM4UlOMgFrMNbn9RG9R+Hk/X/cnP
+FJTnwDIMRDIKroGnSCnlQQCIURsc/1u91sUAu3yRnJqweey769af6RmbVNiJEddYlmtZfZGBaa7I
+1H1/4MAx23bNHXaJEEJpdDgPmplEQaWUQTZQ+0j91KbyFJ7STTyPJ09aEfF1kUi8iRWRK+l10/7G
+r790RvS/XpGrdl4YllN+3/deYbmHtqamvEKv0anggeN2RLnF5Q2fc3tkFfgqEG1l/XpGrk1OPfr9
+exNiduzvdzDtXjutsZUdyzASlZreUlg3utRjyNiYMNfBVx4NPdbdYM7GLZ8xfPORM12Pxae1VSsV
+jqxIJJKyxipOKzru2rzziU4jZuz6MsLpubW1Rv18/tLB78aP3R59vP/h6/fb6oytbFmGEanUNEtp
+0/hC9+GjYyynD0mtf+MM/vxS5qkN899fuW7LiTPpBZ0gltrwxJDyNaJ45xYdYntO/HR3VNcn72UE
+AIh1laA4COC6iG2gt6XcgCO0NB6AhhJkNfARUoA5DUI1hOca2v5iRlPLvQ2/3pFjZ2VcpW9X4tDM
+5/jd+Bcn77Y49crelXMm/bJha7/zN4rDGKnCUkcNOPCyY+4hPXYP+eDT2CnBpk+vlK7gq1gRe1Qs
+FmeJGD7/ZapFKSVfdnHuerVE3ME0KGLV9GHdfjaVV1BVBS9XPSzW1/Ja6a3keKek+PgJd1NiJ2zf
+1vkygF2UZkpHtAhre6/KzNKuc5fvl3W3vrP8ZduC0ZQ91JLt4GvkajUIGniiFmAIW1mdy9donzpG
+v9nn8jKXtJn25bprl47mMZ10EomemtPPsAsOj56/87O9vcjTLzzntaU1DzXkAOV1lzRqHRouC+AY
+VWV1jfb+s78PmX/xdtrX7d9bsOFqysl7oo46ib6sijNIc24zaMvMbR/vjyC//QJzgeDv9Gd6xV4m
+zz/9jeG3qvRXenL+bK/h39V79Hv7/bd/U3tjevIppdLci0dMH+qkrIGlU6Wjo+MfWpjxD5TD3Lhx
+wyQjI8PI09PzoZubW2lD61j9Rn7ZqVOnzEtVpRK/Jn4lTk5OD3/vGzullM3Ozja7X1Eh1nEcH9Ks
+WQl5ZtLxb+SVHz192ryyoljsE9yu2MXYuPx3y7ufpn86KdGiSmxLmzVrVmRhYVH5W+lfF0opuXLl
+irmBgYHG2dn5we/nqFWSmWBwKTXDXGPkyPm2b3/f5pkg4q/IXBLmOmzBxfU3pK01Uw/sHRbVmDQY
+mH0Wopi5KMPsf3yzDz6vODrlG0qjRB/2jW55ttg31L1T7/U/Rw3JeVV1ehmUUpKSkmKqE4tlrjY2
+D83NzX9zrtirKC/+4kUzCctKXaytH7yp59g/raKiwlwuV6yuqHjYp6qqCuTf+H6PN4dWqVSW8Txv
+UVlZKbSl4G9nZGSklsvlrQghF1/F/t6Y11nUBRwv1cvwF8vhARTX/fsz+dUAcn834dN5OAD3/mR5
+1QDu/G7C+nksvCoBvPE3vLpA8blekt9j6h5cDuAPv9fvZZSUPLQuqOHsNJy6oODEMSNKaUH9gJZS
+SmK/G2GzfMkOb8pI1baNXW9lHAUIidIBiKc0LRGA7ueoP/5S57+iro5/6pz+C+U91/sqEAgEglpv
+TIAlELwJXH0CstxNbyUW5yT22/ntnJUnVnyyw9I58JaNo2UVzbsmDWnq5EirKnqnFxuFyJ3abh07
+ss3J6U/ei4hHy3IIBAKB4P83IcASCOox67+ycFp88pzvjhVl3KvI7HL3TvnnNWIFr63KV6G6Uqaj
+YsbQ3v2qsWeTzztPfnv99ECDf6zXSCAQCAT/HkKAJRDUUzf0dY0mr5w3e9G2tRv3J5jIzZSGzu4e
+Rmq1Vnv7fuX9oL6RhdM/n1gYKCymKRAIBIIXEGYNCgQCwSvyaJJ7efmDPtXV1cLE7L9Gq1QqH/A8
+by5Mchf8E/6zk9wFAoHgP4AAPGFZtkwkEj2E8CX2r+AAIhLaUvBPISyrr32Fb7gRAiyBQCB4Raqq
+qpRisdheT09PLpPJGAhBwV9BGYYVEQJWLBYLbSn4u1GRSCTmtJwXpfTCq1gwWQiwBAKB4BVRKBSV
+IpEor7Kysll1dbVMGNb6S7T6+voPeZ43U6lUQlsK/nYGBgZqkVx+/VW9jUIIsAQCgeAVoZTyAKOj
+lILneWHe0F9EKeWFthT8k8TAK1tq55WNNQoEAoEAgDCUJRAIIARYAoFAIBAIBK+cEGAJBAKBQCAQ
+vGJCgCUQCAQCgUDwigkBlkAgEAgEAsErJgRYAoFAIBD8hwgPXL4Z/jUBVvz34Q6NTBzXmPhOG00p
+bbDel1eHOzdr1HixQ+SWgf90/eqjlLLJycliSul/9jSnlDJDvCyHWDr0XNVi8g67F6QhyTRZHEfj
+/tByIMXR4bbONlZLDHt8N55SSjaNdgy1c2y0pvH0My1fTe3/nINzQ728mjRb4Tx+X2eg7viSk8XR
+lLKP0lAaxXzSw36wqUf7pa1X3HP5I/unUe1FP73XukVvf8evbZX6282s3LcE93nno0HfHWkS9YJz
+vr7DXw22GRHa5EN7E/NtFg6+63u9/eWARWep/GXLj57Y3Kq1sf5Km6ChH31YRJV/pO4CwetECKlb
+xoH8v1zOgRCgqvQ2PRi7G8t/XIut+5NpiYoTAq3X7F+zDpaW55UAOgLkwQsTqSokGg1vWVVSYkIp
+Ja9qsbA/Knr2oJCDdw1DGo393yYAd15HHf4BhFLiAaADUyNZ1FCCqz9MNNpz4cGIXJOAnGRKf33Z
+lyPTGugTQtpQngcAAsLYAUyYiKH7X2H9/zCi1crUNbx1dWmxIQAkLh5nsedq5Vv37dukUkqPEEI4
+II0A1IMwTBuGkJ9edt80c4l0zpQvI9enMB9oZIZFjj6OaVJVofTO2eiIvPSLfbNzSqMopYdfdE7T
+s++b9B23Kep8pU1rp8B2R5WFV4zSYjfOvaFxlgHY9DJ1KK2sbHddpRleVVxy9+i8w0cBpLxs/QWC
+14WAorKyAloqhr6UR5VaA7nCCOJ/TffBX0QYcA9uYPPShdwNeJMARwl7ac82nczCgukV5MQyHP+6
+a/j/1r8mwBKJdJRSaEHwwrPFd+rB62mURnoCutcVXAFAzsmDfqeyXd5iO6sO478bYAGEcIRAx7B8
+g21dlBCtd+mMaFC6teLMOuAggJcKsOrwIKT2s6aEpwDPgXmtV4rOc+Mv7J2LQbXn1yjkn9tteD5R
+MjSvkdUuAEcfJ6yrr47HS5+DKz5c1nzvBfK+yqZLYvhHH89eMdj1LgUQ826I74odqQszDm6bPWy5
+ewaA2w3lP7f7V7eccq6lqOWo3SO2TZnj+F2Ecuk3CbvOJ54JoZRGk98Jbgsvf6OYHPFtD4VdQJZR
+1Q2iyk0Ii6b0UgQh3Mseg+D1errnhoLSJ7+nlD6djtKnTs7avE/y1N8ffbIjkMdpSF3vSMPlPN+L
+9HS6Z8v/8whYRoWUo3uQq/BBS8t8nLpYhS4RA2Er58HTZ+pSr9wX9XQ1fAxPt81vbydP9xw9d6xP
+b3/us2kwX20eiieLrD3KxzIU97NSkFqgFA2cPgLtPPTQufd9MZUagDR8aRb8Q/41AdbLuPp1mGsn
+W6dp5UGfHr/yRcu03svuTlGHfHa8MGb09kdpxjoZDjpU6dO+42eff7Hu3Xa5NC1K8vWSk22OnL7Z
+42qhzkLp4l/o1XV4zLC5g5NfdHPZNbuv65aTNwedvZLrpZEaUudWPc8HjX9/R+DWSPrLkSvTF1+p
+bl+muWW3dXLnr1zCRseGbF67ev0uX0WLhQVTHtj30gWIrqrjLpZ7NuoRue7k+llx+5f0t9u178aA
++KsFfqWsJTxa9z7n3fudmB+GOZYBAI0OZ5efrfY9lXyzV0JqoVu1wopza9UtuVn42O0rIrwKKY1i
+5vT8acCKDOugMaP6nU7dubJ5ys0SN5GNV3HL8Lc3hRvEF+4/fL7fqQvZ/pUSK65Rx0FxHYZM3RnV
+3bQcAGhalGTh9yfaHjqb1f1qoc7CwMW/wKvHiBi/OeHJUXVBzv3oifpfxVzptzv+Rlg5MWE6Rc64
+aMQqrPkGrpOUUjLV2zRi1O7KIWod9agoijUxtvYw67Awafmx6UHn93zc2zIuo6jP8aTMwLsqsb5p
+o+A7AT2Hbe8/a8DFl7mh07iJ+oPf3THqWImDT+sP5i/f/WHnSwCwI6q/y7ZjGYPOpeY1rREbUucW
+PZJ93xqzc1VE4J2n8480Chn766RrdqM11u8u+D49gmgyPmyk/HRvybSz+h1KFp3fujaCkGqatly/
+c4fPpl007lt9Mn3l4r0zghuP2vxwkqzTvO2TPRRWUw9UDKrSwrnqwdbBpvZH7LqvzFoGuKYC9uB0
+OrFz4a/+Fi29eiWk5XqJbLyKA4ZO2bb7k8FnyKPA8XF7TZaOb7m1Z57cm7h3CF+2YohbLoY8vpBe
+WtjNbl3u+ZT5WTlZLfGCAEsiYnUcCK9VV0tbp4NcybrunieSGRJbx3wAv9umNzZt87pULvN2GjT5
+J5v9Ex3OXM/osWtx4noA934vr+ANUJKF2EOxuJBVDi1rq+rYq5estbcFy5WnYcfGi2g6ZBB8TCTQ
+PLiNg4ePwsJ/AFq6G4LjKaj2AXas+QnqRn3osA6uBJSARRnitq3HFU0zjB7cBnosh4zj65FCQjAs
+1APVxUlYt/okPHuPQgdfC1QVXMO+uPNoHNIP/o5A4q9bEH0gQyc1MWRZQol9q74Ib98MSiYfh9cf
+AAK7IczLEsyzUcsfRHktqsoLkXr5ukbj48Lc12SJ7maJoAUHCgaaigJcOL0fCWn3QBW2aNu1J/xd
+zUEqsnD41CWoq8pxM68KXk19KFN2mdx8YITOvfvD1ZTD5fMJiEtIBQWBg09ndGzZBIZyHhQEVPMA
+lxKPI/7CHfCsEu7+bdGmmROUMhYP89MRf+IwrufVQGbsiNY9u9OmVgaEBUCgQ35WMo6euoh7pRpY
+eTRH62A/OFkoQHQluHz6VxqXdIewJm4ICuuOQGclGAC5188hKYejTc0qybnEi6jUa4zO/brBw1CM
+4sI8XL2cjgfVIlQWF+CWXAFzG1soGPpU8Cb45/2nOlG1ItYYQGcGtImLb7MHbqTGm7t2esBpWjuf
+hCa+a5ojkQzQuPk41Bj5VlKaJpk5bcP4ZXtzv68ycjdu3z4ox7Yk2TsxeuWyqLe3tm+ojJPzOjv/
+sOHUsnP39Hp5tQ0tCGtsXFYWHzNh+8dRyy75fWTSY/iQhGBn6yyFTFkd/O2YFwAAIABJREFU3Ln/
+xX5dgtLkltDUUKk+oTVt7yYffz/hrlHrpq2bF4YEOTw8OLeL14KlySsO3xIN9GzdLj/YUaIpid84
+JXrV4qioBGoAACt2XOuwadfl1ZfVDn6te/a+Fuxp8bAsYdvY7UvWzF2QXGoIACIRda++nzV+88Y9
+01Q2wfrNm/vcU1RktDvx06J1i9YnrUgqM2vVNKR9vquJ2vja/s3zdm78eVg0pSyl+6Ufvb/h7cWx
+d7+rMnE3atcu6LZNyXnfhC0/Lot5N7odUDt89cXynRO3xN39XGvkax7Y0q9AnX6kZWLuvd7lfMPn
+UMuIAbd6dwtNsNKTVpg5NMnvPyQiIbSZ3f3sdeFWm3ae+353qm6sXVCn4o4dWtw0KTvvd3zTqmVf
+Td0TCAAQ6154VaC0vWzsx7GTEwpN3zf3aZ/p0btTFgCc+by748qfTiw9W6jfxzMkrLCDl2Hpw7Mx
+42LnL1refWG641M7aT+r2p7RWegV5AwMrrhoBgDnqiydrt0uHldZWRG58LMMewC4cXCLa75I1N/Q
+10/qCWgpeAtCSFcNxzl3GB5xvXtYyyRzuURl6eZ3Z0BE/8RW3oalAAjD8rz63g2HY1t+fKdA7mrf
+vHnTe0YV19ucWbfim6GrLzd59pjSp+1SPHigasaam93wHNn1uR7PPt1c0hmZuuJ62p0WtN58r/oC
+IkdmNjJkT3BJWzvPmNVv5sLD1Qvz9PwyOw/vuenZgO75NqXshgM5XWv0/Hib5iF7ewYYx4nLL5tn
+5pW0/q18gjcBAXSl2LtxNZ+iaYIho0ZjYCCV7d21X3NbxYOvKULahXSU6VhIpBKwfDVuXb+C/Ac1
+YAgAwqIq9yz2nUyix3bF6u6U8WAYAoJq5KZfRPTKH3W7LuZzOgKU3L6C1JwSgFDo1PeRsGcnXb1p
+j/b6A55SdSky0lNRVK4DSzQozMwB69yaHfH2RPL2hPHoFeQGOUtBqAq3rlxBTnEVXsWC91UF57Du
+p404lHSNTTuyh9m8OxEp11LowSOXUFlRgEOblmDt0Qp4ePvDouIyfly6nr90r4bqHuRj/6bVuq0X
+1FR0P4VbMG+F5lalFb0bt0uz+/S1mqL7l3Hi1zgYmNujkbkOcesW0c3HU6mWEYHlVUiIWU4X/nBA
+V8Waw96wCifXfc3tOVcAviIdq775hh68Y43Wwd4wvHeebl69W1uspWAIUJR+HN/N+447n83zjvZm
+KD63nl+78QhfVl6KYxsW8QuWp6gVJja86PZh7qtP52pP3CgFI+JRdOEQVn/znWrZzsu0RmKDglM7
+sGTtUVqmrcGtuG2I3hvPZVxL4jcs/Va3cuMB7q6KF14n8Ab4T/VgiXhCKSU8yxBe0X35/eAmO/em
+Zl0fMv3LdE8Aiavm7GpSVmXoZernsHTzMKOyYUkBLQ5cqR5LGo/ZP2LTO59NsLGpSp4R4Dp9x9Uf
+Mm8mRvY+TZP2tiYV9cu4n3srMJ0zbiIJ+3TuoR97/kQpZad0C+hzNrd8QFEZz3z3zZptC9oaWF3U
+c/Jy6D5227eR/sn46G0sXt2WAiLKOIcldJo0fdzK8U0KcW6abNzUy59l6jztXAd88M7OhT0SKY0S
+ze/y4/gfrh+bvDP23AEAB6sYra7SPugnWdcvdm+e3SiPUiqZH2Yx/cfMI8PSMie5IyAqhVJbCoVj
+uWHzdxbHrX9rFyGErupnM/iT43eWXTftf3HGos+nfNzWuqjkpz723eadWZVxM7tnTAw26CfMbnrg
+inoM4zk2dsTGqHkTbEjV2f/5u/1v2+Ufs64nRbbMpQlJS729Dt/QDuddBx99Z+H702e2cSy7+UNn
+i+lLsr89VoHgZz+HuuHZ84dGuRbmGMj7Vhq5XPhk0ec/OxOi7jWvrXOpwvKsXtCHK35dMfA0AMSO
+8Qmef+TKmsr8C20ppUkV2/o/99lSSqmzolz5dnDGpCM3TMYqAnovnXr4y5UTCKkCgHv5mQHXOENP
+cejs+YdW9V5DKWXe7xLY+0xeRbhB8WUT1Ov5IcS9Zs1A2/jEs6lhRaUVjSmlBd9HNG5dYeim0asq
+Mai+vNsXwI39v2Z4ahlHsYunUzwhhO76sDkFBc9z4Pp+ui5x3xCbh5lK/b55po3Orfp27gZCiHYW
+DWeB0xDJjarMW0YuX75+4qZAQrTrh9qGzzpx5+ukS7mtAKTVP7ZclaW0qlplKDEQFTZvCvWaZ47d
+3N65nOcz1ZqyMsOU2i9Fz/VIkcYfVZz62H9/ypLU8AO/5n5i7dNt44Ap02f9GNk47/f+bu4sCHJM
+U7HtaGO/c6ZBDnkdjbpVrTi9Kz8z7nCPZEoPBNa1seANxDDQ3kvDwVRePXB2C5m7gzFDLXuyw62L
+5ApKAYaBTpWLkzs3Id9IDE3ZXXo1V0udGTAAAYNyXDyZgsZhA4lR6RWcTivQ2rd1FDMEEImsENjC
+iDm3baPWzXICK2JZsHXPWlBeBFu3FqRacxcxe0/x44LFLMuydcNYBAzLofTmZRJ/vAaszAxBwS1g
+ZghQnoAVsa9sIrqeTXMM6KxG/n0V26rXCGiubsQNkwgyrqcXitIO4sC5cnR++22ENDUC9TTC7XlL
++ZPnc9gm3hQ6xprrOrALE5Bfzl4oo2zHsEDEZ8eRnIoq6NuE4J1PAiEWS0A1pZBVzuO2JSfzxV2a
+SfSyUxB9Ipfv8PZMJrKNCxiqQ6eA62y5hSW4qlzkFZbxjL2CKp3aiSJatCcdSx9IzEUAV/MAh3fs
+plU+wxE1uRdjLgFq2rRjiqoJagoSEbs/i+/yzhfitzq6MyhrB+6zWdh99DJt7dGWQKeByNBK3mvU
+u6SzqxxZjqV05tbzmpyq7tLgwVNhbmPILo0pQOSMjxhvWzEoIRBGB1+//1SAVR8hhF872uuw/Y2H
+I+8e2dWCUpoyPtg6uFjfo8rEvuUpADgXnxn4sEZp5eLM8Fe/+Kr/pEnTsFtTLuVFd5mHuff8yo8m
+GgJ4KsAyNLfMNudvFN2PXzyw59jZ9NMFiy5ZD5l9MjayU3wl9Ms3zntcg2dqpAZhxNTYzS2zbHyT
+EkIIPTg+wCg/t6IdMRNXNGEv+/hNes998uQyiA1crPnqYpO75xK8ABycvjnjhHJaj/Jde/qMv6tU
+uugrlSJzica1UqTQv1/GGREC+mkPhpEbGRaZtel169H8s9YdvG+wCRklnFNQ+sdtrYsAwGTU1DLF
+54kFTGWVh5sjpGe/vNm8XKu0dHcm9OoXU/tPmjQNseqHMojzmIe5BX52R1WGh+LuNtVqTY28OrXd
+NbNN7bCl69uHSqTLbTIULIJe/ClU185Arcf3k1PZR78fGx19ZEF/J6t33iqurNY3lFADjYa3MKes
+aSjA7n1mL5SwFDUPJaW7o0ZcuaH2lLTs88vMI1+siqx34ze0sMoxR0ZR4ZklA3uM+Zj/dMGiixbD
+ZsXvjex0phKF5VsXPL3Pll1bXTQ8l1BxIf5qK/S6ef7CFVVLqzYTDxpfXa13V13epojSg+80tvCt
+NvUu5ln7jIaOjtdpKCB+/vccw8iNrQr1Ww29/Ghif7NAz2z+xI2a0qL7pg3ti0ADoIZIGvhaT7Qc
+AQDCMJC/4Gv/L0Ptgj6Nuf0usfK6764uenhfS5U3C8QspVT0+ajOnXNsB7D2HScciAolumfzrj2Y
+H/CgxtrJ3Mxs2RI38DfRs6y9275TN24mDvho8Q0vAOcbKlPw+hEQ6KpU4HiWZ1m2dkhIYgXfphYA
+YVCjpiCsBEojE5iaSFCDCiKX1J1CDAPtves4cZOHbz9vGN3KIvvPn6Edg5xgKwEABq7t2jNOxcek
+sTFn4K8HMIrarJTyYA0t0SeylfjchhM4IGlGKa1/bhJI5EoYmZhALFZC+rfNOBdDowEoJ6IMCLmb
+c49SU4JqTkcqKu+hIPsmd3DzCpKiAAO+BoWlKpG3Sg1QCsIoqLm+mBICKGQySNjazmFCCDSVBYjf
+vx/x5zNptaqMFN+6SjQ+TVhep8ODgkyoGCu2uasNJAzA8SyUXk1hQCko743RYwayG7Zt082eEcs5
+NmqpihjSW2FuybCoKcCt2+XEJ8KXtZYRaDkKiY09HAiPjBPbaY6+E4Y0dhJJKAfexA1+no3Yc9ez
+oNKGgBIGho5NWB9bOQhDoDA0oAZMCaUgIAwLlmVBGAasSASWZcEJ0dUb4T8bYAHA6BCjW0cu3jlf
+WJkRsmLNhiNl5WyY1sjq3NyFbXJ6fQvk39MZqlUVyvM7fwhL4apb1OaiRKeulnG2muvmWtVzZ2mn
+z0+nnL/ddsK5m3mjLsT+NDyF0An65m4luw+kbvLs8tbO360UzxOk1/73bjEvKa/gjErKL8q2rkwc
+Co6rLU+nEalZi1tG1epSSin5pKd7zx0XdVGsW+v0noPCDjPQPBRf3dt9723SWaPhWACg4ClPecJz
+2scXOcpzFASUEdWf8K+hLChlCKGmRiBp93WG6spKZcKOFR2SuOrg+m2gs625YWMCmlesU2q1FoxC
+U1NY/1DISywd8Kz4BT0dZn635/u7Ch8z704hu60UNVn69y46xJ1JbaJ6wfkoFrFUXVFmdDmjxl9P
+zPOqB6XOp9Zk6wNQPUoTNufUxb63Wk1IuVk4KvnAz8MuUDpeYe5auuvglc1OzcfseHafeq5ed/2N
+Em7sy0j0STwjDrygM3ayb9F+fqt739mtv5M5Ys+yL32KWaWn1Nb2bJuPm5Ydm/VHjpIBTxhKeO3j
+ducJw/MUAM8/N8TX1InV6Cu40howpvtPQPbs9oLsG0Ysw8vFxiYPPBvovUqLam41Oybrf5cQbOXf
+bdD4HndmmW28dOjLxF0G8/Y26fBtfMK1UXe8yu8p+uHgs3np2hDl0CXXut1WlZp7Zu8a1rnrru6g
+IMxDxrGqLN/92vZ1YZTSlN8bZhS8HpRSSE2tYCJXi0vKVIR1MYG66Bqij2ZyLcM6srYgkCisERDW
+DR3tZKgqvIrsWxmEpwQso0Va8lU+LT2NK+Y2iGSqXOZ6aRnNuNMNNu61k94hMkD7nn2QvuAn7c5L
+Vxjb4RFPliThdVA6tMTgblk06uv1Wq2FnaT1oysClcHepzV69u0AJbTQajXQ6B5FYASsWAyxWAyW
+cuA47k8GBBRl1w5izfq99NyVkuoq/CK+mZTDmfMn6eXGCrkpR2Hs3JgZMPod4mfOgKMEIrEY+kbm
+YIrO1LXfk33Vzt0n4KsqsXvRFzRB5a8dEh4psTflcfnQKiY2lwMFIJEw4Kof8uWqGkKInBBCwDAM
+wHOgVIlmnYbCrXkHUfqVBLr/5616X8/P0X707Ww2RMFAwmppWdkDysGJIQS1wRGhEFNQsU7Na3ge
+ICwIagBaBTFhIHkyqx08rZ3mTile0UMCgr/TfzrAImPOVHzUxvLg5YL8WSd27+mfU2NmqefRbWWv
+up4PM2OmUl5jW+w9ce7HR+aGn8KT3gEeOQyNmR/23E1l1apV9kYtI6snDrWdfvPmTSnz4LrXrs07
+xl89UTVfaupwD8Cxl62fuVGVVl9fXmluGRb/7oYtM2b6kArUDgFRIJcvOvsxf2/hVr27d0qGPzBu
+ca/fvA0zV7QjuQCwuq+x5f48Nuy35i/rOLa2/+gFt8aSB6CmRqRSXmNb5Df5y/8dmtPn9NNtsINf
+3GcHP7+l0UOJqkxbI5EYPdPCf/hv/OKJc2F5GgNfp7Ez34v9pGMsAKRMtW5y4bI4UvWCiyxPNYSR
+maotfEevGWuyL2fDmX0fxW1XTP4wg371dePaIdwV69bZmbYYrZ4w2HZGh5s3paLya547N+0adyWu
++nOJge09AEfq79M5NEr9dUTTk8fOXxu7bY9yCEwCK7Ui5aU+fZvk7/g+NfLUCXawlrO34TjT1VGE
+aP7ocT67BhphaN1DV8xzB2k7s3uFMvZ2CnencEj+zj3uAJ4KZGMO3/XVqvUN3NztL5IGHgKITy62
+vFcsbWrp677+2JLIC0Akrwqz0I9J3xX16aeXFpWVSu1MDQ0OJgdA92z3188JqsbX7klCaiBKvHA2
+ruDREoViETLN9eQm6oqbYZ1i1FvwX34a9t+McmCMm2BQZxfpzgPbUHXNGqo7meo8STPaWV8kxwMK
+nuOg02mh1bLQaXXQ6WovCDUleUi6lMmHjp+LEV08iJgvJrHff4uEpAyEuNiD53lwHA+plTcGh/uI
+r6WdoepH3xkoBeV58LwIbq17kgEJB8XfJ2koqbt+UKiQfno/v4nNJTLCEXOXZmjp6wE9BuB0pbh0
+YCcnv2vF6jh9rmnb1oy3tZKQPxwyEJg37YT+Xe4T1pTVGzrCFZsW1IhbvD0eIS5ylGWVwJgeRdr1
+PNrBvy0R1ZQgPasAMDSH9DdmKLHFBcjKKiMuA1tL2rVsjIrcK7iVlkPLFF6U50WslVszeCh+5WM2
+HeJsJvWVWEpKSXpSJqReAbArTcbpmzVq/9AO0qCQrkRfncNeXJmhfVDNAeYOCG5hjRU7t2qOe9qK
+gz3kbEFaKvJhBS/XVoyr6Kz44IGT1HdUGGEKEnAi8Q7n2XEwI5eIhOlU/1L/sgCLggElAERxcXFP
+hQ2hoaHPDX0AwLgOZsln1t8oSjjLTVIbBV5994OBKVHr6/K0cz4fu/P+w9QDJyMm/3Tqiumd42Wd
+DdLE65L5UM6ro6brxzgVQZ5EMJRS8tVA/x4x2Yo+Rn2jPjO5Gp8UExNz7n/NjJ3yisq6EFJjCQCE
+gHK8VlRcVqWMiopioqKiGgxxeo/1KYtNP3ki+e6d7jHfrQ5amZx8HCmraMWNYpvzxRatm7y78Biz
+v2cl4W+JtDqqn305XRkeDjbSI8xq7bbzbapqeDmLBuc8v5S8jAoMDrU7v39HaeWVA8ciPtgcd7WF
+qKjMpWyD9IcTorbEp7t6zf/Gnuz+WbMrW9fml1w6k9L7qz0ZiR/2blRZsCrUWEVrXMu5Fz8oIWEJ
+pVRHdDyvfxiQAlDzOp2Y8lRcmn/fNCoqSuJpcIjd9mt+q9tFDxxlTMNXWF4HIlUalCta9U6a/Tl7
+IKv5GtujKb+OPPCJ1U1K6QZCCFexf3H37bf0+xv0nvuZaVp8YkxMTMIsf0PHvPul3YhIZ9XQumhy
+PeV568r06ZtPGvW169Jppet7TUu9C4ZV+Kz6KOvYsdIhEvsWV616Dr+WfWBawwcolYDyWqLlqHID
+IKGU6oCIP/w5EBKlWT2sya8p2Td6ZcdvmDzo6635/PmM3PBwoHj/Xv/NB2+OqLIOu9bex/dEcgP5
+G9lJHyqvqe7drqz2mBBbYbSyp7Lkk5++3ps38FOPbRfOzVG79LruYdbk7LPHT2k0+2nYxG4Fcrca
+n0k/fXJhtmfCo20cB4xsYzp0S+qtL/J3rGoGIcB6cxEpvLtEQuF4CZl5Kpj4dSU9/ZtKLcQEOoPG
+CB9nCAsjEXhKITKwRbd+w6GwVULLiNCqc1+Riasr5CwDypqj9cChcFCbgVBDtOo/GDXGdmA4wKFF
+X8z6woWUG7gClEDP3A+DxjjATh+A1Axd3p5HrEIr4Wwth5YDfDsNBLXJAy8WEwIKmUQEQih4Yo7Q
+oW/B5s4DwkhE0PJyiNm/NnxIjOUwb2QFmRSQuAfAwUIKUMDIwRdjhrXDpm3LMf3sLspyNbzIqTUZ
+M8GDMWMYSCQSsAwhDFPbm8aQ2h4uqZUtQl09sXbDV/SDExY8VfOcqkDM6HuyIJSD1KIJIsaMEq1a
+uJF+Mv04FOIaWiHyw9vOLYi1BLi872eya98+aqCnIyX3q3X+nUeIA6zEoIwEgX3fJh2zfhSv+ewD
+bDGTorJanwb3e5cEePtjRGRXsmr9Wu20CztFePiAM3Luonu7c1OpiKFgWDEkYtHj5R0Iw0IiET++
++BKGrTuGv9SUglfsXxNgMYyIUG2FTFR6tmv3nl0VOp6vnZfCgYgMzB5OO3p3LS69BUIoQ/FkGMZ1
+TmqOx2aDxAytNBheXc/M8UF+VN22rss+STl3+6OlvyTtm3Lw29Qt9naKW0klWaY3CiSOttKWq8KB
++Pp1IITQnZODzkrj0wdmb/74O97OPK1Hp/b0UHq6X7F9cIqVmXcSALg0ssgQXS/B5ZVz5hsN7P/L
++Hy6Ab+2AKGUIQx5XDfSKqb6wOyQVVkx2fbXDy5duCrH5bINuae5l33fvVThfc+hQpVgEXWi8NNe
+XjHG5y58lrFsyFob05Dc6Zfvm6kr9Swg1aMPHlQqAYCAYRkQhqfk8dWKMJSAEAYgT0dhlIoASFju
+HtNt6bzzZ299uHRD8p7Je7+4uuWirV62pCjLNPO+xMFe7+FKCsRjzjtpvePn/LQla+fE6O9u/JCx
+U5mhyqt2Ts1ThxIDSsVsw3/W7dvbla++fOtqeVZizy29R9Gpe3NWBWdMOmGXfnZA9r45s/bZWPTZ
+o1ZLy8oY8yqJHhVRqcHdm2Ch5QhAGJC66JFQBoCI0dawhERpbn7Tb0Xpz2ecziTu/1+zceZ5lNKj
+e6YFnpXGXxuYs+Xj76iDaVrPDmHcgetpfsW2wRfNjT0TGloXbZil5s4ZS+215HyLUFuF2elVhGhX
+Adofhjqd2reraihktuk7Jprn27z7qD1ZAkJZBrX1CguyLF179e61ktQTgzcOmiBKjpy7dnGPmDQQ
+O4YhhBExT74mE44SELD1z836xm5ckVzef/j81UmnZpxZcjnG2tosZ9mXpczNjFsBats2lc0Gj5y4
+brRbboPt/MO13MPtbVbl3zk+JWP5qIVjt7CpTHWJMrlS1lasb5QtKs0wKrwW1yMqmd6OCnwyby11
+xU6bE9eYHtS06fXPZzVJ7z776f32DdRPOpmVezfrfs6A8Dh6LCaUVDZUvuD1Y2VGaOzfAZ6BBKC8
+lON48JSClVnBL8QalOPAUwpGbgRP3yBQXgceMng3D679f93aVqYu/jAnFBxH4ewbAEJ5cDwPSozg
+ERQKUA4cRyHWt4N/K3vwOg48BeSmTRDShoDndOB4wLZxMBw8n1yLKM9Bx/Gg0EfjoDB4tni0jbK8
+jgP3J5cT4Hgx3Px6wrZp7SKj48Y0g1JOaofSRHJ4dRpDPmjaFVm5ZWBF+oy1sy2xULJg9Jrho3nu
+Uj1jYyK2jsTMAAITY330GDddpJMYwESvOSybZpP7pRxjbmVFTIzFhGMkMJVx0HFSuAR0xceLvcW5
+hXfxUCeHpb0bHE2lYJkQTPnSRXo7vwgVVWqYmNmKbO1tiVJWO+lcYdoEkR/PYTvl5SC/TA2llQtx
+srKETMKgcdthmNWovej6rUIikVqwLo0dWBOlhPA6Hk16TMQXHUUwl7GgFDDz7stEzdFJjZSAliOw
+8O2L9104GBgL86/eJP+aAIsXy0sJr9pw/26S+eG8pwIGIjN2IqJuGsKKNEWUYishT1agJoTo1g8w
+2xGnMte5t/PbUX8uCSERGkqj1jl9cCpt1f4bnc6erLAydmh6o2mfQSu7De8XT8jzE4L7L026fOC7
+kWPW7z3f/WRCeuNqsQE8Q7qsGRM+fv9XI1rdAYDAIcNPhd6KmRObdKnlhdSAqkBr8LIalPPAXp6j
+BUWeTwbtun1+5nrauvApy2Iyum1PiPe7xusxLkHdY7pEDNrzdZjFnW8AfLZowk75l1tLNsSmdbxa
+ZCa3axtx4IsOXNriA7kt1DXqXEpBPutFU3gKQlm26NG+WcoXUUq3EYbU6/jgdJShxymQTiinrmuD
+tW7vn0z98WBWp7MnH1oaOzS94d0n/MeuwwacrhuS4rLjon7CupN524+eCNmXbmDi07FHfNsm2uPH
+C0gjFc80uLo+GZ5Yvnxqx0WZhZcKrl29KlIWqmqCP4zNPPDV8PeWbTze92xqqqO4UaeCiTP7Hkk/
+/ItzqqEp45gJMCweUNAdhKeZACjH0xsA3cxTcgsA3Gbsun/gvUZf3tp+OTLrWrZDTDrEEd+lXD22
+bMzYtTvPdz+ReKpJNWuAJq06/BTZb8z+b8e2a3DtKOMFH1XKz05db0TsL6odQy4/+r2BtUucpUH+
+t2XGXsds6k2kZ4n2LijZRFiaDgDKKReLvp7Y/qvbu6/mXLmSXqN8qK2pfeCApvCUUvBs8aO8Wp57
+7tx8qq1IqI5SbG/0dY/Un7endj+bdtlZKxHDTC6VSGvuut/ct73VxHXZ11aMci58Pi/haFzUFqdf
+r97YfTipw86TZU6cvq3Wo23fDd9+GXBu05R3OyQnnLIsuX3TBMDj4ym+m6bIYcXHGK+Q090JKX92
+v/5ffpNrsGf0KtXtfCdxwunnZ/ML3hyUguN04J4dQKY8ON3z6ep+qPf/R8m5x132/FM7o+B0uvoJ
+n9ovpRzqb+Y5HfgGZy/U7ufVrV5LIJUoIZNSUEpgoqy3cCeloIwMpvZuMLWjQN0zjpRSQKQHCys9
+AkpBpSaw1K/NZ2xhXZeGwMPbDx51b+F5sktadxQMDCwd0dTKoXbxTwrwlAfAwMDCHj6W9qCUojbv
+k0VIKaWQ6pvAubEpnGq3o3Y7D8pIYWrjSlrZuDxdVxDIDM1hC9TNwQJEciNYyZ/sWyQ3grn86UVL
+Ba+f0KEoELzBoid2tzqYcPbt45VefRpP+GrOwQ9aP/uQpeANUlFRYS6XK1ZXVDzsU1VV9f/yvXiv
+kFapVJbxPG9RWVkptKXgb2dkZKSWy+WtCCEXX8X+/jU9WALB/0cRK/YX0pUBX0eetttWqqHP9V4J
+BAKB4M0kBFgCwRuOTEipAlKuAdted1UEAoFA8JL+U6/KEQgEAoFAIHgTCAGWQCAQCAQCwSsmBFgC
+gUAgEAgEr5gQYAkEAoFAIBC8YsIkd4FAIHjFHq+XJKxL9KcRQlC/+YS2FPzdaO1J9spONCHAEggE
+gleHADyRSCS1PwhrN/0VjFgsUlBKIZfLhbYU/K0opRCJRAzHcdYALr2KfQpnrEAgELwilFK5huO6
+S1jWDYAGwjX2r6AARDxAGEALoS0Ffy/KA2JOqz0hFovPN/R6NYECxsZkAAAgAElEQVRAIBAIBAKB
+QCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBD8k87+8LZtCzfzd818+70dsLDc
+7HXX5xUj9f79XjrBG0hYyV0gEAj+IYe+6ayI9Gk8x3lEdO/fSndxqpPRlIjeHzpP+LXt312nVYMc
+u7V469upI9dly/7usl4lmpws3rD6wETOPKhnWEtfTa+mlH8t9aCUWRTuPbTpyDWjoyllo6PCJS4u
+4YZRlL70/bV0gbHh0HYdPrFp/Wkvus7PaEAT+desRL5PKpXvMLF03dq854TZo5aftH9SJsjGmX08
+IzoGz3E0M9/s2jRkde93vukRFU0lL1vmio7y4PZ9p0QpZ5ab7hxu4dtjyPRZTT5Otv6jxw8ANKq9
+yMmpr1H7qDhhbc16hMYQCASCfwjDGYoA0gwMSn4rnco7jHMyscppLdcrzf6b66T0alsaKLa8ba6o
+ei0Byp9V4ZFgcKOY8bIYPm5D9Bd9N+PHqNdVFWrSNOheS6mRKBygsZrqNhoqHuVRUDEVQPHL7EDM
+ayU8qB/Al6oePpQyyia+bi1apA8KNT5M72WZnz1zOOLsHkPrtw7RDzd0IarYj1s22rgnc0GBRau8
+iAndtqvSD7sfP7l/Rn6FjAWw92XKZBhiTin8xTW39Qx9Qiu9NQ63rKzkNdf+RANUeCjdJCLtXEdZ
+wWcA0v7ELv6ThB4sgUAg+AdRQnSEEh4AaOZ+6YIxYW3dzAzet23S7p1hC/d7AkD+wX009UwSt/+K
+itsz2kw5rHnzQePe+7RLSyfjCaYOAVM6zNzvSSl9amhojqexQ6/WvYa4flNoAQDR4QZuId3fjTAe
+f8SQUkqWTOvp29TGaIq5Q9P3es5aExRHqQgA8k4e4c9cLtA8/Kabe//Ogwe9OzKiu4uRYppt0JAR
+k6MzzQGAUkqWTO7WzM3E6H07n05j3xkzvoel//u9kikV16/DknCPILtmkwZEp6VJAOD93iGBdl69
+BkRTKqdx62RRb7UKczZRfODg3WH8uG+PegBAVCtLi/5BoUN9ojLtAGDHMLld526jBtmMTzaL8jdw
+69+2y9A+HUOHWrv1GL4gixoCQOmCAMPRnb4YdLVU5ZW0dWEve69RXSil7NFl75oOaesZYaVQfOTi
+333UR7/EO9AoMB/2C+lkFvBhKKWUUEqZ8BYurdv3Gd0xo4gq541s3d7NRDHN1rP9hJELDzV+dCwf
+eCgbd+84IsJtSYkBAKzrY+nt22Nm/5FxVDatiUlwvx6DBof5Nx/lGDCix+3rN0RxqWU1H3kb+S/c
+enZ4adHF4Pf6jB5nNum0DaXRkg+Htgu1t7D4wN6/+8gZv2ZbPXdOaAglgI4Q8FCpIJIp1aWs2+W5
+c784MG/ltvUTgthVfM71pmzGERtKo5ikSxX9r+q1Vg2a+92n38yfs2P5ztOLWopT46XVud0C9lG9
++vu+ED3TvHcrj8GmSuOPAruPG/Bl7BVjAKAcKEA5iGT09qE9NCnphm5HqoYHgFMb5lt3D3R+y9DC
+dUart2aHxVEqmu1n4N6/c/igSaOHdXMxUUyzbR4+cvL+CvOFrawdh845Narw/tXm+9b9ONZy5G7v
+F577NJpd/UHfAF8bg0nmDj5T+s76JYhSysRFtZeN9nEZMCBixIBG9gHvhLy7yuvZvAmrJ9v1be4w
+3MzQYkZw+Ie9v9pTpASAt13/j737Doyi6PsA/p3dq7mWcum9EhICJCH03kMXDUVRUARUFEUFacIB
+ioAoKiqCAmIHpIgUETX03iG0ENJ7T+5ydXfeP1JIEBCfxwef53U+/2RyO7MzW3L7y+zMrqZTj6T5
+A5FMJZRSsnhIeFf/wUv7UnpK+ly0e/+HHhmXFBfeamKLobM70j/Rq/hXYAEWwzDM32T5wrn9N6fY
+Z0Z1TfTtFiyJTtv00cL4WUfjAiTFKkLo4xwnxrjLXLVVRdmvHjt37eXwjom+sZ72PoXHN8zsu7am
+ye0cB0+DOJEbLxXsngAggG8GQsYSiU773SPu8TuOG+d5xQ4OGxDh1Kzs183z3pnzTRwAUOroRCke
+5iTylnlpZ95IqXQd0blbF3e/mpSnD/zww3hQyu2dGt1q49GC+Z5terbu29o9OOXEkdlWi/kJAE0C
+LK3e092jJu3ZwzeUwdQACXHQ0YImolMSQBesWjF05w3Zqy27DfLs7EdjL2z+cEHCgpRoF9g8KKUT
+rJwQCADEJgmihIwVpRZPmZSPyM24vrBM5jeka5dWimZc7XgjoXkvMSQ02KpTqB2+fn41cbHhNbg8
+X7lr+/5n0vmYoZ37JiLW2dLjzPq1U7a+TF3gkIT7izlPL6+CC7a7qzh1yOPlNn2rXYY+iduv8tOj
+ewz07hLItbr6/UcLEmYdbg0AlNAYCjqW2pU6ABA4MQ5UfKyiAgoCoeu1K5cXycJi2/XtGi3jjJWJ
+gl0YENS+ty3QW1ctVapswc2aV4+JEenshxc98mu69JXYLn08m6tqBu1avGiqIZ063/PEIIDoQEOP
+op3yhONk1CZyQsY+yG5er2yhje56dlZXTTEAEEJsgQrjKipIVp0+DVt9ucp3o10Xr/hlerEi7qFe
+vbrp1JWXxn6//ttJEymVcgQUINTi5CNSnjajBGMtgDNd2dFj/sdbZ9d4JvTr3S7S25JyfLrh1a/7
+KDTqqPwb5xaeL1ON7tS9i97PcvWp/V+tnODUdwofEexR5SST2bxDIqvjg9TWu23WllfeSVhzoMDg
+135As/6tfQNK96yb2/qFnX1aRUXIjVVlk1Ju5L0a1bWDb8+Wvk1ik+qVfT3mf35oeoVbm4G9e3XU
+umbtf/Lrzz+ekkypgoD0AMXDfsWQAps4AvSGyA8GILVYbSNSLl+f5xfXKaJr65AHHu+wAIthGOYB
+EwCUfpWoPX7OMromfMzPzyz5bvbXwyVzA1BYXLNv/XCh03gFpdQGjojmmlIQjbepxLnTlvVff20Y
+pU9f7AOTx5l9+/wbr5MjhFJC7Xah9q3IhEKECIfSw4WmZpgjzMRDw3d5bc3ni4fPDPVXbvLSOzkB
+AOWIQAkcominnFtUQZau+0frt+2ePcgta6NQWhL30j5ot+zOH2jWd6lSPbR02htJ6je7+tl/Ucp4
+K/KbbpdWJZyMcSmp2PPj+bizsi4uuXmWEN9uA/dffaud6mKKONLU/PHt27Z8N3v5cJPBy5prNid/
+OoSExUhBqY2Ite3meIgAddgcEkoFK5X5ts7K8H9k2Xdr31wzLAiVAOA+dGn1vFf77HZTe9yMSJyw
+44evZh28jChb+5HP/NYm2mXNzbQLR8rTz12wW4paLPoB+jDbxf3h7hb5hwvOhW5aWe0jlchcfFvE
+XTt+sGB4dcTjuxZ9v2H26mHiXB9HXpXp0NfDKKUcEQWBgrM37F9KBIBzAIBIiCAJ7HKhOGzM/E+X
+9/pRMFfVEFD67KffXxrWMfxnjSY8Y/wbMzb3ufEKTU1zjKqOGrtt++avp48NLXqjubI8/PNFe1vd
+9eRQqSDYKnhr4b5Ybz/3/r06xo1Zc0o2Vt6sxSFZ6155DjNk5Vaq1LmpqhsXMxw35xzZtugcDMRR
+/9k7m42tKm2e0faur7yzYevW2YPcMldoBJv+5ApjowCvBoIIkQB2bz9POmft1R5WabMgc7eZ87/f
+vuOVofr0PTVZOYMrRI2cc21elO3c9eMvNu+eM8g151uUlcTPKZ1YMmd0+HatS3h2q16JP+wy9L5+
+p82idJf8x59LHq0JGHI1ZPjC2V/M9Z/b0qXyhPHgV6OO+o50lqj1JmPg4G1vzHp2wYKJAy41Lrvw
+86tdTZLoIGP7F978dvPWeY+1tH0kXNzfa9M35yJBqQDA0agmgdT9LpE52YXg/sl+D082fGR46ggh
+5IHeBmcBFsMwzANGKKWFdhfP9EqNvk23ticGhBMreXpPmVNN7mlveXnAcVusuvZVfIBVoESjVla7
+xXRMJ4SIHpLqCoVcapE7rNI/qAYAYC4qJ/HRylOe8tLrpt3TX/EeuWlKjrZN6tSXhh1pklEAXN3d
+C6zNh+QTQkQvHSnnOCJ2Vx3Q5FJ9gKur7vLMZ0LLfAavrvF2U5ZyHP+7i9VDbx8pc9MrTgundrbN
+18XEX7CGij27RZzO5IL9MqtVuo79u50khNg9JxwvVNdknfeSVQXnS8Odbl9PPREgLi7OZZLwrsWE
+ENrk/XBGG4Uowmar7bCJOrSEXt77XXD2jfxxao3riFIHjS8zC2pTVqF0wtKyDMFmK3C7uiUhza9/
+6+tFkupJ7SuqblZo3Dr07nAymhCbdtK+EpU556y3tDJwCqC+507lOLh7eRfkB3apBHYIwK2pfDah
+9qV2NSU14FWuPlfyCwNK9r2TIJFIZs788cboi1mFAfb08553W7VKrqGisVgqMd7oqFNpHr+WVjDj
+mqIl3/+laZ983oNYbEqIMkJF0Q7+Xk2klJJKTWBIuVVRMWpem5uEENr9h9x9ny6ZteDMC+oSkf5+
+9mGcukKWQ1RhOTdPeFxcOvBxqVw+c9u1ooTMa2khRKpycnXXF3CRA/IIIaK3TijneSJ6uxVITGaR
+UAEQjOLd3993MtklzegSGBIWdHLFmPAq0mZ1jdphPh5I8vX7s1zcFbzE4h4SnRcdHW1rfJwppXw+
+8WnmoPLsKfO6pxNCxLYP9T/vY71mLCyzhtL6P5Q74DlO0PuH5X48Itr4oIMrgAVYDMMw/zGVP011
+nf/+570Mnx1xBQC7RUZFKhJwHKREEDlQ2ETaMNmISCQSUaCiRHKPC9W9EAConUgmCjbKAdBZq7mc
+TsPTRw+Nesuee+qrWG8iVp5Lnvny1DV97meVNodOtEmojcq4hgvU3a7shMChrSk5HKXN9d/za8YI
+bbue59KNvvkCJCIBYLXwEqD24k95XiJQKso5sS5wqo0XRauj6eCyu10/OUeTbF9f0nheSCl9ND84
+6df9h46++liQ64cRGnmFVbAT0gomn6oL5/0VRXGlFtKtIGTw+TDz2RKOgLM7OP5WmyQSEaKorK+0
+0RWSircdE/Hu12sRoDKlkpqhFEH0NCQg2N6uXTv4RyZUegUHr+8T63P2bmVN1gLC60KsHrETv7hy
+NW3iY7Hui/0VwG+7j6kAAMWwebrLSgrSM3wajymaMqhlr14Tl08MWkcVtceCUCI4BMIRzmis3ZL4
++UR4YtYb9ru9yNguUGp16KhC5eFo3bKF0C4hAYrAuAutYwI+UzrKTcC9YpQ/CCfkKpGIlAoCuTW5
+TkYkAgUkMl4kHL3r4yZEQRAIOD6/rhIJdfAiJRxHiMgBEBvqThJ/f1z+vrkbLMBiGIb5D7HmnHX9
+7dN1L/28d+9QSqn6SlF+i+tVCi8fH9c8DVdeEKYtLzixY2evjafKdGff6h5UKvftmEcDrrXFvipK
+yJ96vpGnN28SYOdlWccCaOku7b5MaWRxlUXdLMyVpO88NOKznysnxnxy8/ymlWM+8yhNNZkrTa1v
+Hyh/OwJCkoVWNdGysrTSzKyED9/eG3zsm1me57OMQQ6HwOMOk/rnDVNckdJc449HSno2C9Ae2jSC
+CNqKipwgbUXZ0W3f9TxUTDUH3mgfVqYMTMgTfC4naLJKOJlAbeknAim9qvktRx5ZWG5xliulfyrI
+dICTW62ik0TnYqw6Ol91pbw0/malxUUCOwcAj/dXnyy4fjBs57Gsth2H9jwiu3EuJ1RXUXx8+5Ze
+u1JLtacWdwkuV/i3y6d+V5YSUu3tI6u2WU1Kt/wTfik/vet6KFOMrDbZlB7qu/eYAIAAKhJildsL
+c3QaW3V+jJcsjYT0Tv1qx6GVb8x6em3b2JDDzh0HFN91BSaA43haXiOaCCGmxZNdfvKpvFzB3Tzx
+sIFSSfQIg61FC/1vTjd2J/SdtaVDMaWa5LeSwlJu2sdZqiu9+o6DUL8qD1vmNRdJlW7rzM2xlGYr
+l56OGCKT6N6I+Ibqa8dgNXWq2sUWRoou+3r7lrj1m7bn0KFDH4zs2nxri759LwiWKhvuck5SGS+K
+tIbniUNHaYpspL9H6EOGLR5NMrUcVN5cW5R64+LJ7rO+ueiZuvZJ92KbU88saXhmL+9rhZRyd1w3
+IUQIRW4KcRSHfP/i9zGUZiu3frWza642Tq7R6S57esgqq8sL9T0qr3l9MWOw/+lsR7jNbr9n796D
+wh7TwDAM8x/iPv65rGYrZ+9Nydj3aPd2OztSnvc1+nU+OaxHxCGv3j+bPpyUsC47Zc9zH7+87x0n
+mURW6Rxm8ug6fjOONrcDPTnQ2gsaATgq1qY5EQTk97Ohxgz1Tj+2ofii/MT7Uwc9oR3GyXxCqq12
+2Y1yteMRqenyhby8IZcNI5cPEI1mo3dL4unu9ishhL7dy52AUkIBQkAa1kspJYSAu/JrBn1nWNCO
+lD1n4rK3ZL77lrdrTnm1JsYmCFl33OgXzpRoPnG/pAoa7JMuj70KAJ3f2llxtKDNuoIbu5+eM3zv
+uyqZWlmtDyx06fr09gGh6wt/vOR1XHtu9YT+iZqeSnmQb6XJoZAB4CgIoffoCCDguLqB7y3cVPkn
+vLlDeXuWPvfQUc0jUmWIi12utkkr82UAkPDmjFTPTdPSsp0fdm0d5ZIa/sTxqvcmtF2Xc2X3xKVP
+//qOk0SuqND7l3t1Gbft6m9vY3CfoMtHdmZml+97Y+7M66psG3FrbrLaq+ACEIBQwjXaVyBA7fFR
+aZ0yQhXn+G+Xr5ja8aHFS1u1nLQ+5+qGpx8fsClGpeQp79uqzOJT/jGAiqbbQjhad7wpAVffLUMG
+7ytZMSxi65rrZyaff/fETgDnI73Fnzq65jW/fvTL14Z3+aBExzm0Rvc2pWbn2A2rCWkYNzZzcvjF
+9E+K9pkvrnmmW/eVwxVCiLfcxWnbtdEo/WQNCCW1dXAUhAJcWXYBWfha6IFHPrnRpmD32zO6bDHk
+OLu5am2O9D3xRGYm9FaARSkICCEqq5HI/JsXhWk2FF5L3vTCRBcXUUrFMTVWcgzAmlub18b+42ud
+v0o9dGT6kdWXl5zlrUINFyDz6vfECtef55rAER5UvGOQNX9azOFrKzPb5KesfblP1w+KOZm/u7Z9
+z++qxzS70eVSgCJ576nEq2teWFbjpaootsuirQ56qG6XctwdboU+KCzAYhiG+Q8hZIStoOCLNc8N
+m3/611PZPqrmnSufXzDs9KzefqUAMPmTafvKJ3yYt2rDkUjBJ96c+PwzF9a+0DzPPA4KnnBvCxIu
+x2hyKqUQFxHYbwAAJyKLcHgLkDYZTOz83MXyVbOGL7u09pfYI2XNMa5r86LKQpXsRsXVsqc3Z+Ys
+Hes7a/3OI9GpFndp+yeevrxryWPXyNIxcAjYRUXuMEf4IohiOpEqSwGAUrJfFElqEWpqFFFDsgbY
+speuXPdjRI2YYO0XqLCmG/14ZZPBxfWOKoq1QWqPANcDz8xqXnpwNkAIKKVv/1zxxOysdVtPRpCg
+zsYBL049/9mE4EIC4BtDlw/Pr9lz9EiBt+zRvnH54QWc/LRgz7VzpFygYpnVaP5dj4+T3amMUvKm
+nTjSAaCN4cear996dvm51RsO7c8KUT46aUJaYOVN2UVNdUbtsXjCtKi7z9t5YbEyyw6XagB4cfWr
+v5SOez/nsy1HI+Dbvmbw1OcvrJ4UnQ8AEbPP5fXM77Xwva+PtzpmTLA8FR9anlcs4wDUgOe2gwrq
+PBdYgXmUcF9+XRcA06HdKq8f+jFzxtrrV13yr8vLM794Z3fJozMyv9h2IVz0iLEM6Nnj3BfPh+Q2
+3haNa3U1B/IOL9Jild2pEpS+xXNcXv3ykS/2/uWbJ0+W24lQAgB9lpyuTP4oadnHX5xu/evZHG9J
+SKeq4ePHnP1kWr+iJuffiH1G+sOQj0csOnd491W7Z0inwTnjnpl2gRBCV/VzOk0IV1pTaSmnkJwl
+4JbolHwJGXHUlLljxjuPv/Zl7JlUo1tQ9xG5cyePPHtu71POIkW+xWIpAQCekxwiNjHdKFdXe/Z9
+2z5w6QcLFly6FNLLnGW+7Bqk8VY48nCbQYsPXih/fcScBZ/8FFMqC6A9Jr6SssXQ9aYwMV7KgS4D
+4fJvL1O7HXvK0rcalj8959PYk5lm14iBk7Mef+TFC1MIETZSemnvzbgZa3ZciiyX9C8b3dxr9U2T
+xAzctIqcsAqUM99pnQ8Ce8Q+wzAMc08/T23R5t3UluOU7r5prubr/IXUgt6K3rNXHlwy5IfG+c79
+ONv37U9PTk6tcmlR1nzEohsrHz72d7WZ+XsceT0+ZnbOI4MU4Z0+2z2r691vhTIMwzDMP11q6i75
+wqf69G3m7blQ591i0aBJiwbsSqXy2/P9OKdruE9Qy3lxY5b2v/0hpMw/AwWIITlZ8kfj+xiGYRiG
+YRiGYRiGYRiGYRiGYRiGYRiGYRjm72IAuKSkJBn+YIwLNYCLikqSwWDgAGBjEvggQAHACYATwhLl
+httefkspJYlhkANQRiUZZH92HI2hOyTduxsk9en4iavYOCwG/9TxWOxBowzDMP9DuHhtglDBvxO0
+uCDwXvmOVPi2VCrEVZ1yg5oDQH6VamSNs/Ovaq32B2dn722ROutXhycsHmlIr33y9/lXW6rmjOk3
+wuzS+jN/b//N8sJzKwc+v6rL7UHY3VBKCc8HTsrx0L+STKlE79NiNCfQF1ed+tcGuy+e2FvnGzbc
+byOlf+qhkfSDRHlUSO+AwRNX3fUVPPcsbzBwGz9a2nryd+ci/pXyzC1j+nXxnjZjTt833npr6ITJ
+r0XHr/pnTXxgARbDMMz/EMoRNUADCSf53Sy+xhyixImABoPjlAAAzslNGzjY9urrS95cNu/Z+b09
+io6XnNgx+buF33cFgA2XHEm7Tpsm8s0fPjT7tUmLo7j0vKv7fpx77aOTze+zaYSCehBCva+fBnGJ
+6XK5fbTbcZeb/9q7StRUkkjBLwn5o/cC3s6HDwAv+5Bzk8b8K/XecD0uPb/jy7G//pra718pv35y
+24jIsZ/G329g+v/Vj1M7+IrgX0s+ld77zIHfwosqKodFh8Hjj0v+//GPPgEYhmEeJErBLXy0xwDP
+uJdHUkq5HQPhMrpbzxd0wz6PB4BZrZ1bDxrw1DMBb1GXUxsX6yYNaTfG28v3nfCOI6ZM3HzZGwA4
+IqGwVEjbXHxtiJ+X5+KAdqNnDFv6a+idayQi4WrfoUcBKipcy+Dd+8zTU+ceXjE4e00zNckyXzrS
+qvjLMd6p1W6DioMHb/tl/ZxPn3lpzoElczq/F4dLRdeuZHdqug2U+2T2qDZxYX4GL6/QtxPHLxy2
+rrYXjFICSihExAMZe7d67D6c572prsyyV5I6twr1X+AZEr9o6OvftqOUclOi3IYOGvXqhCd6tZnk
+7eq+PHLI7LHJlKpfidImfrrj6JOleYc79G0/5tXgFy96Nm2DgfvwpUFx3ZsHznHXui/vMHjS+A9/
+yXFb3j0oaMCrv03Nzjsdl/ztxy96jN3cpO13YugOSVRUlAx1tzbrtpEXRMpRgERFJckMhqbBkqF7
+d0lYWJg8fuJEaf2tWgqQjYYkWWVJ9VDeIY7YM+JleVLSxvvqfZsYD2lYWJg8KSmpIb/BQDlD9+6S
++Ph4qYEauPj4eCkarW9jUhIfFQVZVFSS7He3egEyMR5SNLpFXK97d9S2Pf5W22vrA5cUFSW7U5n6
+fdS0fQbOQClnMICrXdZ0W/edyY0SqJM6eNFX727Z/cuyVz+a+XGbAJT80b5ISgIfFRUl697oeNTX
+RynIxvrlBkPdey1BoqIgQ1iYPGnjRj4+Pl6atPH+9vt/GguwGIZhHhBCINodEl2g/cYj6wC3PKeo
+wLQrOa/oii73ppTyuWrvTuVWS/ybfUoUK1d989yxcq+H+wwYlBtC8zod/WjFi19QqpLzRMhNvxKc
+WuRonTg4MT/GfqFD2i+7pg/8usLlj1vAUVTaRAC4UB2osgi8EgpNzebtZ11qjNRV0brvBUKICAC+
+vT8q89fKp5WXWZs8TPTHCeFt1+4sMHjED5MP6dWytOzs9smffLBhGBo9uDoegAiuLS9Bd5cQcF9N
+iO36+W/5c4I6DqG9W+j56z98MWfitoyWgt3S4frZQ69WB/TwGdw9ptLpxq5Jr0zbM6BD4sD0tpHe
+KWqXwKJO3bqeTozgTI3bsG/yppDfzpY/i+aD5KNGJl70LLg0YM/azx7zfW6pqWfHqNOuOn1JaGzX
+8wNa+zR5YnpjFCDLnu0RX+bRc45Go/+gu6/NMGT2920kmnaECnaqJwW+CyYOmKh1M354ImPmxCWH
+qAYAdq+bEWQJUUz1UfHv6YodC8bN/qx3EqV8+nu9PDIysydvOVcx1Hjp+85iVd4iZUtjD3qPnixK
+DdwbUx9uI3q3n+Ukka4oF11mTP802Y+mLdZdvPnSc3kBXjM9teolhS/ang12lhs6OU5O+ziTulz9
+YYkmw5c+6a+KfNfFy7H42ivvPmpILlIDwKqJPk5vPjNoWI2+7eJYveODxHz15FFLfvYBgE/mPBwe
+4tL1VTcFeV8faH3jqUUbuydRyn/8aIwLlz9ojOiuejvOR7Z8UInb2HHrzjoDwJtTHmqR59x5trfe
+eXm1KuTFcSuTgwDAvehgt/xX572gMI8fEejltaxUODDnha+O+VFKueStq1ublP490wtF38hT3/Vc
+v2lHXGddQNWUcGK919n5zuxR/j58jyn+rqr3pJ6Fsx59c2NrUEoo3ajMu3bpqVefG//EWe3gqS5a
+3ftOWeLUPecPeyybNqGXq7T5uxG84iP17kMzfJzVBuMNfed71fOgsACLYRjmAdKXXjwf4W7Gp8uv
+B9td9S3NnvrSSH9LwIebfg6ALjI03Rxx0e3b4S75pcqe9rZTVn+xdtW7jwfkLA9S1DSbO/VkOGCB
+OjAutyDsifc+/fTz96d25RbLsy5HSM/vDL9nxaID1tLT/j5o18YAACAASURBVCveTHzKy8vj2Rc3
+0DkZnLsj8KGnfisqN8rNgsjpPd0t9dkJQJcfvZ6b/u2jhfWfUUq5jfts/eRBHbPcxq54a9XTrZYN
+CbKvsxeWaHHbq9cIRwQI1D4t+Ljy14N5SXzEsPOxMz58c1a/0IX9vctz9m8+0FMiU9glgT1PWGIf
+fmfmYHFxdy/LuYJrN6IfXvbNtZah/mdkcr/s6Usm7v94crSx8bo1T71XPPqZsev8rGeP/fjTHlNB
+1oWaEou95Qi/JOMLifpDTir/Qv+wloc+n9oh4267Y+vLnVvuuSh5tdi7742pz49d2UpekJ5x8mxb
+9aDeUrupWlqccqJFhW+PgjHtXbcrss/0/Xzr/vYAcCa1RGvXRqa+tmjR4od1F4+UXj72xPFXjzcL
+fnFOaauHX9oboHHKatZuUPIzT4xaP6xnswvA3V8Ove/FDVGHL9snFraYcPT9Bc/PbVl9BMm/nZxg
+KXA4p1242OW6slNxgFhQcPhE6gCfln0PxjpORW7eUxCWmZeuzDI7V4+ZMm3F1O7cl5KrP/f5duOJ
+ngCQVhyQtPeGanBQ7wk/vjIq/nM+N1WXdu5qOKUblZv2lU+6yHd2Wvj9hgX9vHKSi/NzQ7pv2uV+
+tsRpfHKWR5v2j77wzfN9AzaaUq8EZ19K9dn9bMtmyRetL2d4Ds+Z8fzYT3zzdrue+nHvjKcOUY3t
++tng04fOjDxS4e/8WFL/DSFlB/0P7Ls+EgC5fvQnl5yyQg+jvVh16eRRn32Xclz3/cGbY069Eq8/
+frxw6hGxo2ry9Nc/auU4WXb9t59nxM08GgpYuLQTl7r8dCRz8jVV58JXJiR+4svn3yxZvyD6dAZG
+2Hq+teHd0fr38jIyokt9Blz9YGaP/4o3CLB3ETIMwzxA4xK5opMHXcrL9v7QokAoad5n5KRvz524
+GXFo486Wes7k6tG13/YS4y6va9k3/Yu/GT9GKpUmTv85z5XT5wYpVFd1hJcQrZOi2smvVSUA9Boz
+OEOxda+RyGR+AE7cvWYBvKVS5+2uj1IK1bqLeXxCwjMTX/5patCVzu38WsoIoUVGa5NbKwaDgTPU
+JurGUX3sVCpx95VLJalfJcJEiEGglG6cBfAAhNtrFCmhrjkntNdNQkDuoVXqt9q8/u4yKvI+nj6x
+VRVp1Qqlk93dxyt/d0y7mqCP91G1qkUNqb1tRRwOEADEdKcL81dTnLaleAytVAbog4NohiUtRWe2
+2ipRCmKzAaCE2O2/K9WAUkpmd/AZZImcfdPRafLGUSOIjVJ6CYDs8vwRAqfUUJtT+2PL5z3/A10C
+zTWfx3odvJbqBwDhrStTXO2hxtOXroZVyXy9i6pEN+HqaU9CJl+m9NS1ba9Wl7n4BV5/8rFh5+7e
+glrbDpa0gy7Um885GboqrdTHzVmvyL14I/ZCYcgWuUfrymqb/qzDXB0S6Wm5mOBvuXEhm7NXV1Qp
++k3/pCh549L9V3JKw1MqXHwqRUFRcvlKUN6yeL1hO/qWt3luwxvTuu2r29azAERgNWKcKjP3Xdnb
+e+YrBQ/3Hj7twLtP9Uv+dYBbqJV2SCiIe3H5tEmtjteVOQHANj7OMIHovaxBb039vo8rqUz5bIx5
+7EdHl0hvnmhGRZFyHjEZWd5jvxvzbHDFmkldYn7KKojcB5BJS7ckjxscrzNp9L1Hr33/0xGEVH6+
+4Jl77ovt17hW5RXywMhpb6wY0o+k05Sp+T3GnmytrDoaDwzcJYoihX/Hn8ren/7tcEIcAM5Hd1V3
+Vfv5UFtAu+yBntXG5SeCymostCyc3Lun7EFhPVgMwzAPkOaV3HJzfkFacGlyzz01Yb5tenba4ZK5
+p1RSfbn/1RILmfBy+6slRqVdrQo0JXRJvJSY2Pd0fLcBv3Tu0nrBS6MTLtnsICIlhAo2AgCW4jw5
+5XgJJ9gs96yYk0Pm0/Xq3BU7X/987mNT+wVyR9LOnIuklHLRbsZKhVpqLTm1368+e3pysuLmsb2v
+tK9pN+zWSmIF3uGwCbxcMb8u8Nk3P1rhP2KNCnfqqeFEyCUaB0fc7cHNO6b379//dPd+/U9Et++6
+YuxDUV+bLRb6B0PgqeoO6/3mUGVCickp0tjrjeXJB48ubKeV7tUrZXbcer0w5erGnt0FKS+1OGuc
+pNWbkmpfWE0IEQghZpmrkUikUkHp5VEJAAh2pwKRODjRzlNqUJxac/7ZBeuOTTNRXYSru7uWEyjP
+O4S6wPQmMdWIcg70vgb253MqlUOuMreObW1q3batzTu6x9XELiErW3mWGsFJKOVlhIIjEARRDgAi
+IJdw3KcjQgbMe2fbmymlfIKnh7srz0skVHTwN4sUMqvR7OTqH1DVsKGEWAkhdkIm2SfoTq/rHCG8
+n6DO89nz7usLhg2e+2KuLNZNqDFLXMMjqxuVMQNAmdbFpUK0Va5ygQUAhGYdS11sOTa7ndfwAPSe
++uJzCLIBAKdUWESHQDR15wVHKQHonQPkOzA6uzvnCdSS2Be17Yh6t1phza5ykopaoIKU6UKtHh7K
+8/tqgysAwJPPJ16yFlypVm151NDnE+X8ItGtukXvIWfup74HgQVYDMMwDxAhROisTT1nKzkZm+0U
+V3PUPT59aGT5+as30nqeI53Ln3NHiUdVbnozLy6zWBJkevurb3c+1sX9iKiQVVxuFmnlCGhpfrov
+PbO+/YkTyV5L39/br8o5RFbFa1P/qG6RcMLlLKM1eoShoEMA/d4ze3/PdgtTYh7dGZqnl1cdc87c
+MWzUO/tj01OSvb5d+Vr/C+nCQA83Zfmttnc0t3YpOF+dfz0uZdHeFvvXzvb/fr9ylquz8inU9mI1
+wVFCTkaNq0jwMJ1xSJy4ZoNeOPLtO8/t9Jab8wr9W9YQKtK7XYUEieAgXI36xtHrnpQ2HXQtkYKz
+W61KpSlP9/2sIS0vVVk651aY1VCCyDQyQSBGXgqrN6XZyrscAzGsmevFrEtH2naf9XMEACQnL9NP
+nLc+AAirrV8QawOD+tcVE45uf25vYHauqq/rqOXrFsx4fmVo8eGDxGyikNTfDAqhREqQnlnpc4pS
+qWHjCa+NG1NkAJC2d7Fu0tKvwxu/wzFaVp0thcRxQtP+2Ixp076Z/Zxie6eXJ5+QC/k1t7e5vkvG
+S1KpPnjcOErfd/qvH73x8vJE1akfJBWlFg5Ap8dCKhUustyMXSv7vvBVqZZSA7fssw8Dxy3f6nxo
+ejPNz0FPRpT3+PjUJxt+mvlabN5qjbGge65bvESQCzX5m5b0MaRQGaUTpTOWfxyyIx/y5mJ2qsZh
+Cu323rEQADj76ZrWubr2Uk6jzwAAnocIbW0AzBFyr4C2CZpsUEx7/5Nww65j2vrP/MxZmYFSs2b5
+tC2tAeCXqfFhFc5tfHIF51QgS7RKFNSOpuG41lQsM+lbyCLb9b827oUXd0ydOuTjLyc2L7y9vr8L
+C7AYhmEesHFJwTfKOd9cb2/9iRXhxBrZru1FwWovCejQ/jQhxPHY5tj8yEhuvWvOzu6jO3X9aOX2
+jPlmQd42zwYJJaAK0WQPEy4PfHnKax/8UBQxWh4Zu7HT6EGZjeuQCA4KQCRCbU8OIbUTCeuX94y2
+HfKVV+SYD28Yehqn0MM1f11LbUFBztYF8x8ZNfXjfQXacaRZ4obQ4NAm41keHx2yKxxXUvN3L547
+fdX+d6+hmV9Mc789AByEQhRRO0geFCJ4Sr89DeGRkeHfelvOmg+umr2kZ9K85ZkW1UhTjUMLSkSR
+0lsXZgqRcBABUBctvdxMel7xwZsfvzT6w1FejdvQLlp/yl1ZfiP3u+kL3zsAA/GLUEs1yprWpRlS
+eWxcUStt2vX0g1sm9Z13pePdjkH/J4bsaMldPG/aOecNN7Xre9NfP7KA16jiwmKqCSgVCa3bDg1H
+QSBCpLRHe48SrbP95tWVz4yJadb8tY1Zno+aLDYd4eryIl6IiPI6XHzok8T+Xs1XnNjz29NmV04D
+ACc2b+x58sfNC3ddzQ+ub8Ojo6MOuUrLrxWtfn66j0fAvM7Dfp11+lBKazg5gRCIhKOUgFBKqSiV
+SCgIEaup0hIQ6HQ68+eVfcLCo1+buQuTS0xiAERKSasvTaEhqs9a1Rzw3j2n0wpf/erle3/NfMHb
+2dOrZYBOZq4qGXT+sxfe8tdp33j7vNcjcj+/o7r+L5wP0VvWRlb81P6z3kEfBfkmv3MlpfSpK2cv
+a18brfs1wNly1rLmhZk+Hh5L1153fsqzddftfkmBmSIPSiE2nE8cIbRhnwEgAqGUkDv25J3cvzPy
+9Obv3zx+Mr9hlufU8ZaLkSGqbfLk5U/6eXgsnbNPOl0XFH+mPPbp00AxCKEiEbkmQVxZtVnCWQsU
+5TnXQk8f+KX9nmUzX2o2aM4zj31Vqv19rQ8eG4PFMAzzgOniW2RRaelkD4mtFAC4rt7XPT44PV4X
+4ZN/FgAhmwRKk3eOHzTl4raTV7x4347mvg/3S/s6llS1j3c55xIQOc7Fxe7YvO+qXtIiyRSSMCrN
+EE1sjeugKuslnnJTlGZJJgBIgM2gwt4UWZgJAKLmXSqX7+k4T20tVe4AqGFLfuZWQ7MFS9edDr6c
+KygDenco7TZ37s3lbUiT0UzNXj6ae3Zd90XjDGeCrxvdZX3GP5n91dSu+YQQaujuu1ZwgI8HHD9R
+sp4QSFfHw7G6zW9p3ywb/fqct34Izre78B3ajc3e8XRM3ivvi0WiSAm6Q0APQBggfCTynEgIodTQ
+PeW4JOfZjRlZcoVdVd64DQ9/diFn2ej4uSd2Xg5J8wq0zh0/qvR4Fs+XVWYYSbjB8WU/LJx1XuGX
+n2fOutsxiB6xvGzN9CHvFmw+FRPRrJlHdpklX9DormJ/kE0kx96TSCW1nUaKQguxSz6GALN27NbS
+l8Y0XxJRpGgB30jkU26Hk5fbymozlw/U9oz9+OPEjZ7Ttl0TlH7anNz8jAC+oBIAjNWOkyo4imqK
+pA0zG8OnHCw+tSrpvdc+uRnl0qqlS04VKUvJzL+KGJgEjnvbLBGLOEFIA88fNmskRTylS6otfHHC
+WN8TZ9ZXxwbHx6qKSqsL3IK916OEVgPAtNXJ5/M7+s8pUqlbWF1DpFfTTWkDPd3TNYnHbbYne6yW
+OUzhrePiXc+XqX4SJQGXlo/wr6CU7h/f0iuzxM27uYVTC2m5VakvDYgqcSYXHcc+aPnhwrTrLbTR
+0e4ZiqgsmcfTKQZCxA8S1TtFCUlGVW3nmt3O7RYk9EA8am+5QpQdEDl6PhMw4jZFhZZMJ071gd0q
+ptV/RgbcsNLkMd888tK6s6roZgGZgm9xhffwi9fGk2o8tZEXifC2g5dWNpzflJLnn0qKr+SUOWF+
+AduqMs/U6BSmEKf8Y88qyo6cwj3HIz4Y/8jH1zMMwzAM879tcv9uD+UK7kPdfNUHTlzJKe3XPsI/
++YY2KCShy7JNhoEFf3f7/isexsUwDMMwDPNnnNj7ZEZByrncg8cvuOdUUlezOiBn8FMjN654pud/
+zTgshmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEY
+hmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEY
+hmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEY
+hmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmH+DPJ3N4BhGOYBIwaDgX33
+Mcw/hMFgoADog66XfckwDPOP8eWXa5o5OTm/plGrm3E8LxACcFzt16AICir8zQ1kmP9hdrsd1dXV
+f3czmrDZbLzJZDzL8463n376+cwHWTcLsBiG+UdYtGiRe9u2bda0iG4xSKlUEgCwWgVUlVvhcAhQ
+OkmhdZaB4zjQB/6/LsP8byMEMBpNyMvP+7ub8jsWi0XIzs7+Ljs759nXXnvtgUWAkgdVEcMwzN9J
+r9d7KJVOfXU6HaFURGFBNc6dLEJRngl2hwitTgHfQBViYvVQqZR/d3MZ5n8KIQSkrjdYIvnvCi3U
+ajUvlckHKpVKHQAWYDEMw/yV1GoZpFIpBFFASbERB37JRHGRBTKZBP5+Orh5OOHUiWyUlVSjW99g
+KBVyEEIgiiI4joNIKQghAKWgqL2gUErB3W+eRj8Jqb0Q3W0ZpbT29sI96rifPE3aUb9MFEE47lZ5
+4J558Fdsa12e25fdjlIKjuNAAAii2LCfbssEjuOAurY01MtxoKIIkVKIogie5+9aDxq15X72wZ/a
+z/+Ac+JOdfA8D1EUIQgCJBIJKKUNx0UQBFBKwfN8k+MsNlp3Qx2N90PdZ/W/NyAAAWlSxu5wgIoi
+pFIp7HY7OI6DVCptKMLz3B3Pg/8kFmAxDPOPQakIh0PEpdOlyMkyokVLLwRFeKAgpwzlBTWwlTpw
+LbOMBgS6kKhYTwhC7Ze7cIcv+fq0UP/zfvLU/Wyc527LaO0v96zjfvI0aUf9svqfTfbNnfP8ldsq
+AhAEAQLQcHFsCI7qftrtdoh1F0qgdlwPIbUXU4fDAYlEghqTCXn5+bDbbHB1dYXeXQ+HwwFCCPLy
+8pCZmYmEhATwPA+e50Ephd3ugETCN9Rb34b72Qd/ej//Pz8n7laHIAgQhNqf9YGSyWQCAIiiCJlM
+BolEAkJIQx5BEBqW07ogsD5oqs9jMpkgiCKUCiUcDjusNhvUKlVtEF13PM01ZkilUlitxrqgToST
+ExqO/99x258FWAzD/INwsFqtyMwsAwCUFJvg5WOGQwCupxTBkmejdsGB4rxK0FbuYMNU/zqEEOTk
+5uLUyVMAKMLCwnD16jVUVVVBqVSAUqBLl84oKCjA9evXERoaCo1GgwsXLsDPzx9WqxXFxcWIj49D
+fkEB0tMzYLPZoNGoERUVhYz0DFRUVEAilSInOxsymRw3b96Eu7s7QkNDcObMGVAKxMa2xqlTp2Gz
+WREWFo62bRPu3FPG/GmiKMJmszb0FlksFshkcoSHh8FoNCI9PQNyuayhJ6uxxr2lt39OCAeOA0Qq
+QCqVwuFwwGq1QiaTNeShlEKlcoKTkwpWqwXFxcVwOBwNPWAOh/0/uel3xAIshmH+QUQ4HA7YbA64
+ujkhrp0frBYHKkprYDcKIAIgCoDNKkAQBRA8+NsK/19RChw9chQ7duyARqtBRkYmcvPyoNGoYKw2
+geN5uLg4Iy8vH0eOHMGpU6fh7uEON1dXuLvrsX37j8jKyoJGq0FJcQmUSgVKS0shk0mRn5ePgoIC
+ZGdno3Vsa9gdAn744QdkZ2XB1c0NXbp0wcmTJ3H5SqrDZrPzBw8eINEtWmDz5i2Ij4sFx/NgMda/
+i8DhcKDGbG74xFRjBm+xIicnB2azGZVVVVCrVU0CLIfdDqvVCkJqeyhlchmUCkVDT1rtLUmCsrIy
+CIIAhUIBmUwGjufgqOv9AgWsVitsNhs8PDxRY6651Y66A2uzsQDrvlCaIlu79pg+3yYhjq5PFBui
+ie3vbhPDMP8LKORyGVxcZTBXC1AqOZQWWWAutcJXq4VJtJLKShOcXZW1tx4ENp3wr0IIgZurC4KD
+gxEUHAyNRgOZTAZPTw9UVlZCFCkcDgGlpaUIDAwEz/Pw0LujqroaFZWViG7RAjVmM8rLykE4DiZT
+DYzV1dCo1dBo1EhLu4mIiHAoFUro9W7gOD2USgUCAoPqero0CAwOBiGAuaYGxmoj/P39QDgOwN9z
+C+n/G0EQYLVYGwa5SyQ8REFEdk4OCAjkMhlEQYRYd+udEAKLxQInJyd4e3ujvLwcZeXlsNsdtT1a
+pDbActgdUCgU4DgOPM/DZrOCE28FafW3F61WG06dOgWtTgue42CxWpuM+3rQ7hlg3XyznefgDy4O
+Tims8cCtW7MUt/rNidSvbbVr30U7C9f2vnmvdeWtGqzvMP/s0Mr4WTfKtz97YO3jIS3nHFK3149a
+u/fi4oR7lm3szPRmPsMS+o9Lq1H14H1jy12MCQsAXLrf8gzD/LNJJDzi2rjg1w1p2PH5FYSEqhHs
+rqISLzkyUsuIygMIjHADFWndl3KTYb//Q+n6r+y/Iv3XtKt9h/bw8fWF3eGAu7523JRUKoUgOEAp
+4OSkRFRUc9SYa+Csc4ZGo0FWVhbUajXc3Fzh7e2FwIAA5OfnIzX1Btzd3REWFgZvby9otBoQwsFZ
+p0NcXCzkcjmys7OhUCjg6uaKgoIWkEokErvdjtTUVHTp2hnNIyPBcaTuNtKD3x//n84JQmrHO9WP
+s6on8iJEKwXPcbW39G7rKVQ6OcFiseLGjTQAgEKhqB0k33g0WF0PlSAIsNvtkEgkkNdNQqlfbrPZ
+UFlZAblcDmO1EYSQhjwE5G+5DXzPAEsRFKpomaBsoSm1hBJCBKG60OtiWmFLvV/EDX93xU1RFDip
+Z1SZOkh6aPcfVOTgRS8KvEyJuBPAARChLYDplCM5AO4rwKI0RfZ018Qxx7MUk3kf3/VCcdlhrsxS
+eH+b+vfYs2pm5MFsPspj+NiDU+LCi//u9jAMA/gFeqLzQDuO/ZKLlFPVUFM5pQ5CfEJ5tB4SBFd3
+RV2PRu2Xcu3kq/tP//tIk3Td5K8/mf7X2v5XpW/fDkopZDI5IiLCG2a83YlOp2tYTilFTEyLhsHP
+9evR6bTw8HCH1WqFh4cHpFIpYlq0aFhev24Xl5iGz/RubgAAs9mMJ58cB09PT/A81yi4+v1+//+X
+/s+tm1IKtVoNvV4Pq9VSOxuUEAAESoWiITelDXftGtIKubzRjMC6mYqN8shlcqhUTvfOI5eD0vpl
+jfPUzaT8bwuwvB+NyE4U+s+u4Cp4vtJLdEt9u+/UUvouafPiZx+Mtn52pNIq4WVeYpS7aPmjAIuK
+HAWFAFr7rGQRpHY2Laj4B0VvOTRdVW6siROCe18MeG7NOyfGktKCc3vuu/jf4fKmVR23pYdM7hY7
+bAIAFmAxzH8BwnMIbekH7xAPlBRVwmqxclqtFi6uTpA7yeqm7zeecYU/lW706b+R/nN1/rel74xC
+FP/crZr6WWa3c3PT1wV0tGEg8/2Ulcvl8PH1qX2kg0jrLvLs/uC/i1JArpDDz88XRUXFdYPK7zeo
+adzDdrcy/14ead2A+AfpngEWIQYRgKn+95+mxdXwHBHtUo2lzeBxNY3zZh/ZqFy3ckXb73afjsw0
+qxR+CYm5D4+fcXjR41H599MQSg2yx2M+7razyD+0x9ylu7c83yuz8fJDS/r4RCX99pjVQWJqFKfF
+cy+GT3YNfvpo6c1PfyOECDR9neKteZ/GfvtTSky64CqN7DQwe/i4xw/PGt6uFACWJwW1XnjMNXbE
+yCHppzd8FJQmRJs/OZe8s/SVgKB5+/WxLy9649yllc8H7z2VFwz/GGOfCS8e+vJx5+xZryxK2LTz
+THSR1Iu0fejplKQFc05M8iE1tW1Olqye/k7LtRsPtb5SIGo1kR1Kh06ccfSj57qnffNYS+fVP10d
+tvZc1eBca5b/Ny898aRPu5H+nZZ/9/OmjsT8pWFM2KpvkjteSC9xU4e0ruz13Osnvpgy8DIhRKSU
+kvmPxMR8nRHawnnwot9OGqIL7vN4MgxzTwQcx9f9h8tDp5NCq1M1Wlp7oeCARj1C9c8YunMaFKC4
+1cNyR43z3C0NNJlJdT9137Ud/0J999VuSmsfJnm3NAAq3krfeZtqd/Kd8v/pdN2jHRraWrfe+oHR
+9WN4bk9TAITjb12Kyb/ZDrFuH5Hb0n/Qjr8ifavH8n7T9cfi30nf/RzUaDRQqVS14U3dc7Rq98e/
+lgYhf0F7KczmGlRWVNz5PP8P+UsGuadtnKib+eTkmed5r55e0R2z3UWrpLzwhP+ajxaldHzjzJwj
+c+Iy/2gd8wd9OfxkvtrgEhqTrPcO/eH25S7BLZwioquDzp9PUUEUSOvYmAiNf1QmAJStStKNe2zu
+CwczNQ/rAuMqWkut9tIre73fn33j3NhVpwzrJ7VJk8pIJ0dFxhu7v9+d6+bZsjTO2++ERIFfpLy0
+ra0qe9GaZYuv+OibVUW2clFk5+U12/vZ6vQB20zni6ySln4tEyzq4jzvC7u/dyqpIosopV8Bm/gp
+cSPHHzTqxmoD40sSAgVLZVm2/9bVSx7de7nGsKF9m5uxNW6BRy5c8xAKLXJ/P5/giPjm3kkdwLdP
+DGu/ev3e+eXaYOeEBO/imtISz+Tlcye2umJ6m1K6FdhEasymfmWVpqck+Rk5AFiAxTB/EZ7nQXBr
+gGzj4KL+IYpN+pSa3NJoGpzcK6i6/TbY3co2DhIopXcdRdPYvdb1R+km66lv6x32w79aF3g0+fxO
+29BkG7lG6/mT6Xvt43t9dif/Tjvumv43jtNfl250/uLO59bdRlrds8xd/i7+1m29S1tFSsHzHJQP
++AUNf8kc5OLUK4H5Cr17ZdS4DxPHT3ti34EDox4LqlrglXOkvflGcq+7lSOEUlcnTjJ/QODD3xwW
+51sCuu0d+ersuasfDvpdr1dU0rtp377QfHG0t+KSOqzT+QELt0xfsn7qNwDEVXvPDvr1pvppR0ji
+t5HDHh2V0K75qMdaWOe4VFxK2PXp+qnnKVWJDofokOio1bvDhtAe/UY+1L/t/Ic0KKcUVCAqqdEp
+9rAursez7YePGDE6xDpPUXwu+nievpNzp1Hz3Dt1Gv1iH5fR4YqMm+lpaU90XWF0rfnuU30Brwqr
+CB6+zbPntCd+2Z/8+IQE5bPNKs97CZd/HO7+wlrj8q3Jbz4cZN/kpvUpbDthwdtbVsxbk5QzQrhW
+Uf7YZXkrb9p5xpTpDzUfOaaL+xP+jtL8qsO/DNhdBjUhIwSf8JgvEnt1GOWvkZz+K44RwzC/RymF
+1WZrmOItCAIcgtAkwGp8bW58ESGEQKQibDYbbDZb86qIpgAAIABJREFUw5iQ+qdZ22y2JmVuL1uP
+4zjYbLaGB2o2DgXq0w5BaHjY473Wda80BYXd4YDdfmu6OmlUR/0+qB9M/K/UVb/d9etqvA31KKUQ
+HI77bnP9BbR+bFXjPHa7vUmAdadA6n4HN/8r+/R/I41badw9Te6QvmeZu/xd/Oe24z7Sd2nrfdy7
+/o/4S3qw2s06eHFZlOGVdV9vi3/vxXljDM8STYgr8a0wViqd7YKfgVIOnw5pUoYQUOqokWiPLB76
+3eHqjpawpP0jFs1f+FY/rzuOUyKEULo21kJABRBeOGdHjYEQe96qiU5XLxQPtWs6XBv74bJvlrYi
+hQBAT63aVfzs7O7flZ3vvPQHU0hbh0idXN0LAh56dt+m6c0KNgGYPHkyVj8WQhQ6t2K/xGf2bX89
+Km87gKovhxzbOONYliWw0/k5H0w92oMQx0ZKzZtb+18gVdUDafpxjWrK3pvZR96ds/7Lva2+XP3p
+MPXbVld3jVQjd5idHGKNz4flkC1xJeYl3dQ2QjjRAZmFEGKn9AVOIpVVyswlMiF9f+ylXs+XPz42
+ODs48eALxXbiFOgKCwC89P72QmD7f/UAfob5X0YIQUFhIa5duw6dsw5qlQparRalpWUIDAyAQi6H
+SCkkd3goYr2MjExk5+RAq9UiNCQEGrUamVnZdbPjJFAqlQClcPfwuOMgW0opMjIzkZeXD57nEBIS
+Ar2bGwRBAC/hkZeXD4VCAbvdAYVcBmdnZ9gdDkjrXkVS/zoZnuNgs9vB101jv5Pqqmqcu3ABHMfB
+x9sbgYGBtW0iQFWVERcvXoRGo4HVakV4eBi0Gg0IIU1eV1L/2pm77ZOSkhKk3kiD0VgNX18/hIaG
+QKlQgJC6J3YTgpqaGmRlZaN5ZDMIogie427d5rvt+FRUVKKsrAy+Pj4oKCyEWqWGq5sLBIcIgOLi
+pUto3rw5ZFIpBFGE9L/sHXjMP9tfcjZe3jTeZcacVbPzFKEdg+O6pQg1ZXkqU56qqrJI4gCkBgBP
+3laG42XUVp7temRf0UibyEt0noE/REd4Vt1XhRSwS2oD1JTycmlBkcxXULukL2mJ0qX1eeInOoLC
+l1wXT1j7p1/NcmlHRFob00rvvM5Ge0KmVjooOEGiVDZ+vhaV2QWHFISKEiWhdJd8RKvxE6/aPEe7
+RXW96VZTlC61VSpKbl6XCSIvraqu7R2kDa92qv2vkZAV1rfGtf+sg7mMu5n5y7h3p+547B1K8rxa
+9jzY5dHJm8YS9kwvhnkQCCEoLi5Gfn4+3D3cUVlZBUEQkJObA5XKCTk5ObA7BEQ2i4CXp2eTnpJ6
+2dk5KK8oh16vR7XRiIsXL+HmzZvw9vaGUqmEyWRCWVkZ+vfvB2ed7nf1V1VV4fz5CwgLC4PdbsOR
+I0fh4ekBY7URLi7OyMzMglwuh7+/H3Q6Z6RnZqKkpARBgYGorq5GWXk5XF1cIZdLUVhUjMCAQISG
+BP9+WwEYjSZkZGRCr9fDaDTBZrfBQ++O8ooKZGVl4+LFi9BqtZDUBYbFJcVQq9Tw8HDH1WvXoVGr
+YLZY4FcXON0pmNFoNFAoFMjKyoJO54yDhw7B3d0dPt7euHzlCqRSKTw9PJGfnw+pVIrMrCyEhAQj
+JCjojr0gFRUVSEm5DFGkSE1Nha+vLzKyMlFRUYnAAH9kZeXA2dkZN26kgZfwiAgPh5+v7793YjDM
+X+QvCbD2f72j/w2jcqi269gF7bsGbF72RD/T2ZeCWk/eKm9bKlJiuGMpASK0RBHed9NQ9UHT3vNf
+Jb03T55CKf2WEHLnaSN3oCQa0UkhmCUys2IfIAdQ9/jW+cRYYnYFJQ4nrfYvDVpElauw+8kRsTfL
+hAnW2IGbI3sMfH/j1A6VpkUx+if/j73zjo+i2v/+58zM9t3sJrvZ9EJPoRN6C0U6gmhAEBERwd5R
+7r16jfeqP7teuz5euyhdEUVAOoIgvZNQEtLbbraXKef5Y5MQICEJonBl3q+XJbszZ86c2ez55FsX
+qNK30frWyXP/Mlu0aBGriGxXPV21+5XbZ//z/eRO7VtzvP+6/ftW3ffFGbHzl7n0sentSPOEpoyM
+zO+CUsDr8yHgD8DpdIAwBCzD4ujRY/D7fVCp1DhzpgBWq7XRWCiv1we/34/cnFwYDAbExsZAkihs
+NjsiI83Q6XQw6PUNXt/r84LnebRr1xYetxs7f/sNgYAfaWlpKC4uQTAYRLt2bREMBlFYWACPx4vo
+6CjknzmDiopKpKeloqrKBpvdhrCwMLAsc4EbDTgbVyPwPPhgEIQhKCoshFqlRmFRESiAtm3bQq/X
+g2EYnM7LA6USXE4X3G43BJ6HWqNBlc3WoLWpFoPBgOgoK8rKylFRWYn27dujuLgY+/btQ6+evWCv
+tuP06dNgOQ4ORzW8Xs9F0+cppaisqsLxnBxUVVVBEMWawpQaFBQWgVIJ1fZquFwudOjQHseOHUNc
+bGyz3YIyMn8klyUGy17ljQlSDROR0rXklRkjPQCw6YyYWOUSwplG8l9FQWTUFmt5+Jj7lrxwR9q/
+umjLfyvfsPixzMeX9GvJtfsP6+1v24H7RQoWpWY/+kO32tcL398VszlHGCxycWfGZsbli4S7bD0v
+1Co1iiu85oDA6dUxbUoXPdzXTggR15UjqqBKjDknvxsSKJUYiVFzABBWuNq4/s3HnrrtraO3jDlc
+VPHtyo0bF//032f6K2y/quyHuh8udUUDAKWUoZQq6eUrrCMjI3MehAAd2rdHl86doNZoQsVFQaFS
+q+HzB8CwDCwW80WTwlVKZegflQrV1dWodjjrMqvUag1cbjd89dqH1MegN0Cj1WL37j04dOQIoqOi
+QQGUl1dAFEXo9HrYbDYEAgEwDAtBEGCz2UEIgUajgckUDoZlYbVGweFw4sDBQ3VNj8+5z5q5MiwD
+k8kEUQzVCcrNPYGiomIwDAO1Wg2dTgetTgeVUgm/3w+z2Qy9wYDw8HDEx8WBgODgoYPwer0NB81T
+ComG1pBlWZSXlcHv99e4XqvgdrnBKThQSYLZbIYkSti3/8A5cWHnPh+ChIR49OvbB8lJSVCplBBr
+7s9iMde0uCHweD0oKyuHQvHnp+LLyDRGiyxYEkMJBWFApXN+s1J6tP0t7Fi+/9D7D84fOnxED29F
+gemd7fbMMi+xWkVosgEyi5EICJja0DhCQQghDMAiZtaqim8eGfCCbXHuO4dWLHpyyku/3LPw8f4n
+G5oDCWWoEjhqfs6Yy3/7t2ELtxUdH3Bgwb+f6zP2ju9aacpdU97YPSgnmBCfMHDUkw+louw/YFjQ
+C78nCUMJwXnfFHztXM87ngGhkFjBUcn0Hdbl+Gf7D5w8uurtuX2HfGPN7NWdzF9e3resGm21YE8X
+ngqlKcXEGsv4o1XqnR+8dOd9L3yo5/q33hX4fIr/ZGn+fR8Oyk+ceccdR2/qf0vMEacqQ2jXa2dy
+rKGM0mxm/vWtb/o4p/110X3vfhPAwZY8JxkZmaahlCIxIQG8IIBhGLRv2xaEhALO9QY9ioqKQamE
+iPDwRsdI7dAepaVlUCgUaNu2DSoqK2GxmBFpsYAC0Ot00Gk1OP8rpvb6Op0OvTIyUFxSAo7j0KZ1
+a+zduw9qtRpt2rSGVqOBvboaBoMBGrUG1Y5quFxuWCMjIYoijEYj1GoVvF4fwk0mhJtMYDn2Ancm
+BRAebkKPbt0BArRr1xZajQYFhYWIjo6CNdIKSimUKiUYhkFyYgJKy8qgUqthCjNCkkSwHBeak1YL
+nVbboMu0tqBnj27dwHEcikqKER8fB4vZjDMFhbBGRiIqOqpGMBK079AeYQbDOZW/648VabFAo1ZD
+r9MhJaUDFAoFHNUOeH1emC0WWMxmOJ1OKJVKWCxmJMTHy9YrmauGFgksAslFgWOUwlb/9Ulv/L/t
+x6oemPfj9lOzDu8lExWJPQsGjWv9flnOjrQiXbgtazFYAtZPgFxSU3KAEtgAHCdgXAAw5dUtB+yl
+rf796oZfH127duPEw5S+lX5+PJJKJ1BC8kEhSQzq3IgTnl931Bvsce/KXZ5btx1cN+KEn1GZ23Q9
+1WXQwAdenDt7EyFEen1ychVAcxmInvpDiiB2Smguw8Bd+5qkZAOE4oREUFRx1rpOKaRSEJJDqV9I
+e3hDwbScUX9b8cvhufsOnBlNrB3t6YOHrUit2LzxiC7e4j3hYQGg2/jB6/rk7fhs6/FNw7fvS+pl
+ufPO7deP6vOK9mjF6e05e8etOerpow03exIGT1oQ1+umL+e2IY45dBGrYohOreSsTLRVjtqUkfkD
+oJTCZDKFsgElCZGRkXW555RSpKZ0CP3yU9qgmACA2NhYxMfFgdaMF2W1gpCzSUuUUkRERNT1SmuI
+qCgrrNZIEEIQCAbQtWsXWMyhPnoAEB0dXZdBFxFxrtijlMJg0Nf9f+29NIROq0XXrl3qjq2d2zml
+DmrLKhACi8VSV7aidk3M9Y5vTGDpdDroa1yiUVHWutc7m0wXHBsdFd3onCkNVQY3GAw1x0YBNXOo
+vTbDMKjW6WAwGELP4SLPSuYa5gqJ7hZt3js0+7eZwtKuP+Kn58RIEZLBU4of8zN6rPnl5G4WUSrp
+qw9f5ydPnsyIiW3J4slEWERxUvda2pR8V6VECKGLsvBduDZt5RFVdyE0BqGUYs1b6WkbbEU8LhBX
+ADBta3XJa3ikzCNg1RjCn70+KLD72KIs/HPnJnCVAEmaOFz8+YP5AqlxUcbRvEWVau3SSm9bof6Q
+Ef5T31Vo0lZW+FLrXtdM+KZQ8fe029x+rzS5Jh6MECJkZuLdynLyfuWLA3jyIqEAdmZnZu5ZdXAj
+hwgNLf78pWD2M8+Q/OIYdt1snYA7gc63LLAvysrK3vfr4meRa5OyIyDghR8opdkfT07P/nxHJRiY
+9HR651g+e/5AKXStyeKiLHxuEHt8tf//+vJ4oSVPSUZG5mLUlSBoaiM+W+Sn+YNfyjn1ziMgiLKG
+REmQ5xsep76Ca87rzbhuo+Od/15L76/+8eefe6lrVXtuzXkajQYajabx9ZK5tqn7gwAA/txCWLIt
+VUZG5ppgwYJP09u0ab+7Q4cUlbwPy8hcS1AcOnSoOj+/oNP06dML/6yryu4nGRmZawgCBae4NGuP
+zJ/KxTrOXSmuxjnJNEGNCzoUm9dwsskfhSywZGRkri1qq6XLwdBXNYFAACql8qoKWueDQSgUiqtq
+Tn8UvCAAoKE/SP7HuVJPSxZYMjIyMpeZ+oHg9ZvO/q9vzLWNg9FUc+vLgCg2HKzfMH+ObUmUpMZK
+VZ/D5ZjNBcH657VRaj6h51X/c9jsOUiylff3IAssGRkZGQCCIMDlcZ+3sREwhIeOCIBaD4XS0OQ4
+QZ5HMBCAPxDAqVOn63ryGQx6tG/fHlqNphmZbgTBoA92WwUEQTrH2EapBJ0uDEaTudlGuPqNcWt/
+bmm2ncPpRHGZC1TQgVV4YLVoQ1mYV9RpRiAFyyHwXii0yTXr8ceJguaIE5/fD7fLDaMxDCqVCkGe
+h6PaAY1WA51W2+T5kiTB7fGCUumspbUmSUCj0UCpCEm85jw/SiVIfAC+II+y8krwPA+NRgtzhAka
+tRIM+/sshA6nE6IknvMZkCQJer0eKqVck0wWWDIyMtc8hBC4PR5UlFdCoQh9LRKGAQMBWiYfAZUf
+KsoC3DCAabw3oSiKOHHiBIqLS+Dz+SBKElJTUsAwDJwuJ3Jzc5GeltZov8C6+TAEpQXHkf/bEoQb
+1DU9AAkIKARRgKRPRIdeN8IQZmpyow0GgzidlwelUonEhARwHIeS0lJUVlUhIT4exrCwJtfHHwig
+tLwSNkEHn98FtwuodJUhvTWBMcwIkNDs6kou1Pz8R0IBSMEK+O07AKoCS1RgVZEAy6EhkdWYqKSg
+AG2eeGrOMW63B7wgwO3xQKFQwO12I8jzIH4GGrUGDHPxMUIlKyj0Oh1ESQoVYaUUQZ6Hy+mCuqa3
+o0qtumgVfBACn7MSJaf2oJo3Iigy4DgOdns1qsoLEKnzwpqcAZU2/JLiESmlKCwsgtForPs8EwI4
+nc5Q2ROLpcVj/tWQBZaMjIxMDVqtFmq1CiAAw7Bg4YNSUoNh9WBQCSJR0Iv0hJAkCr8/AF4QEAjy
+oFSC2+2BUqVEZGQk8vLy4fZ4YDIaLyqMKAUkUYSt5DSc+dVQMQI4SPBISii1ehiTFJCCTgDhuJjF
+hhACl8uF7b/+CpVSBa/XC51eh92798LhcAAUMHVMv+hcCCEIBoOQhCBah2tht3twgtegTDBCV+ZC
+vCCCYRiEm0woKy+Hz+eDVquF2WwGcxG3aEMtfZoLBSD4K8C7f4NaVwECioDHDniTwYWlQaE0gJCQ
+hQUAtBoNnC4X9Ho9lArFOdf2eDzw+wOICA+/LG5cpUIBng+CUgqnywW/PwCOY6FQKJoUV7XUCtVA
+IACfzweNRgOGYUAYQJREBAIBcAoOTBPNrf1+D5zeIKxJSWAZUnPfDBjRg6rTv8Ac6wPRRoRE5qXc
+q1IJg0EPnhdCjXcZAo1GfdF2StcSssCSkZGRAQAaskBJkgSuJpCZMHqIbDv4A5Xw+Y2INTb+lUlI
+yBoSDAZwqEINqKLBMkBFScjiwLJBBINmeE/6MKKr4eLWB4QiZ+yeINTOUkgMDwKKIGXg90YAFuGi
+59ZHp9ejVXIrFBQW4uChw3WFU61WK+LiYpu0gFFKwbEc9Ho91CoVXNCDJxwoYWHz8jDrAiBUglaj
+QXl5BSLCw0OCxulEVVUVdFotWI6DwWAAHwxCFEW4PR74fD5EWa0wmowt9uoRkYJ6i6FSl0GpkuBx
+AsGgGxI9DDUhUJi6gSiUcLvdobgpjkN1tQM8L8Dr9YBKFJGRkXC5XaiqqoJSqUIwEITH44HJZITZ
+Ymny+TSGXq+Dz++DWNM3kWU5MAwDva5p92BDsCwLBcdBqIlJYxkGAtv8588yDHQ6HVimJpuOYcCK
+FLbLEkNHa9o3VaGguBxBQYQoCmidGIdwkxHMRay91wKyzJSRkZEBAAJwHAeVSg2GMGCZkEuF4fSg
+bBQE2tQGSQCKkEuHVcIabUVYuBmcWguFWgORKKA1GOAO0GZ5ZCgANeHhghZFUgSKJDNcVAcfUUPD
+ik2eD4TEkUatRkZGD5hMRlBJAstyIAyDXj0zLtoGqO6uairMq9UaKBQcFGyNq4xSBIganEoPlVoN
+nucRHWWFw+lAeUUFBEGAUqlEtcMJr9eHoqIiVNlscLrcqK52gGFYuD0eSJcSSM0SKPUdIPjbw2WT
+wEADMFYQEIh8IajgQO3zCIm3UKC3z+erc68Vl5bA7/fDYrFAkiRU2WyItEbC4XQh4PdfsiWL5Tjo
+DQb4AkEwHIcAz0NvCGvSLXwxREmCKIoQBOGSrE2SJCEYDILneUiSVJch+PshCAQCOF1UiSoaDXV0
+R/gNKTh20oHi4tLLMP7/NrIFS0ZGRgaos2BRGhIhLMuAYQgIYUAIg+ZsSISEBJYkArwggSEUDAEY
+hkCSKHhegtLQ/LR3llCYyNnGynrih8AowJLmb46iKKKkpAQ+ry8UgM/zYFkW+flnEB4eDkUTbiYg
+lADAcRxUajXaxgCS5EBFQIlOcRpEGJRwunj4A4E6S5XL5YLT6YJKrYIgCjCGGXA6Lx9arQZRUVGw
+2aogScqaeKJm38q5KNXg9N3hreYhiSw4bWvw7k2oU1U1vRWrqmwol0KWSZVKDQKAZRkQIOTO5XkA
+FCzLwOl0glIKhmEuueWO5HJBPHkCKCuDpOBABBHBynKwbdpAYWg63g1AjbuNOcelSAhACAO2psF1
+S2AZBgqVItTkm2HBBy/VKXguhBAEAn5U+hRISIpFuygdDgl2FFeGo6i4HPHxcZfhKv+7yAJLRkZG
+pgamxmrFsiwYhoBhQpsZx7HNCtmmlCIQCMLuphDsAXAMUCvMCAhcfgFxEeomN0hKQ/E3HkmJcPDQ
+Eh5AKIaGoRLKq31o6/fV+iUbhRACp8uF33bths/nQ3iN+66ouBhHjh6FTqdFakpKMzdsCp7noeA4
+tInWI1YATFoWoiSFBKQYcsWpVCoYjUYAobXguJB7sU2b1mBq3FWtWiWD5wXotNpLDoaXJAlBMJAU
+afCKHjBBCRyl4KkOQaqEitJQ82uWBc/zsJjN4DgFJBoqOmkIC4PP5wMv8NCoNSAkJLgiIiKgvNQM
+uGAQzl074T11EgpKoTBbwNttcBfkQ7DbYeo/AEwzxq7tbVlb7IHjQp9HSs9ao7TNyEisHQuEgGUV
+CAR9UDIshKAPTAtEemOIogAFp4JSwaDS44GykkFQBFTKKogi/V1xdn8FZIElIyMjU0OtG0aSpJpA
+XREMEwrybu52FAz44XR6EeAcYEn9Wk4EDo+AyFQjmop1liQKv88HluNQpYyrFy9DwbEaaCQGAZ42
+K/tLkiQolUqwLIuUDh1gMhkBQlBRXg6/3w9BFJosJkkphT8QgNPpAqWASqWESqmAz+8P3XMwCAXH
+ISwsDHqD4axkqlfVwmgMqxODJqPpd2++FKENXqIsfH4F4DkFpdIIysWDExgoqQSWZRF+XpPp+mg1
+5/amC2u6CkfjEAIaDIC32yAFgyCWSAQ7pEA8cBCMw4ZAUQFEvx+MSnXR58YwLBiGgc/rhVjTBDtk
+UQ1l6FVWVoaSCprj3gUB73Ogqvg4lEpl3eebuE9Bw/gvg5eQwOX2QOkvRYXLC6faBEoliLZCFDop
+qqqqEBkZec024JYFloyMzDUPpRRKlQIAhcvlvmDjFwQBYU3svpRSsCyL5Fat0A928MyF/eoVHIs2
+iZqaiKDGYRmC2KR2oINuhihK5xTdZFkGCp0FRktcE6OE5hRmCMPQzMGQKIVOp4OC49C/b1+43KGs
+OrY5gciUwu/zg2GYOguKIJ4NtBZFqc7q06hkuqBu5u+zbDCEQFlT6Z1hCCQuHlDoodZooVap/hDL
+iSRdpPgppYBSBX27DuAskfAYTRB0erCpHaF22qA0GAClsklRzDAEep0OQOhzV1FZBZfLDYDC6/VB
+pVLBHBHRLNeuSmeC0RIPv9sGl8BDFEKxe0qVEWHhyeBU+kvOICSEIDExAS6XCwqFArEuJwIBJ1iG
+gUthhMvtgc1uh9VqlQWWjIyMzLWMRq1BTEwMaAObKCEEnKLp2CmWZdGpY0ekpQoNbqS14zRnu4mM
+ToQ5MgESlc4JBGcYApZhaupPNj0Sx7GIiIgAcPZ4g0EPvUEfEnrNyCIMDw+HTq8/RzydW441lLJ/
+eTfSi49FCIGC46DgOGg0GoRKVoTm8ke5pZoalyiV0KZ3hFoUoSehumWIIyA1cV2kheULQhY4Y50r
+WKVShe65GZ9FUAqNzoTk1AF1VtlagcixHDgFB45jf1dPTq1aDa1GgyirFaIogud5EIaBKAihkiA6
+3cVF6V8cWWDJyMjIILR5KhWKBoOuW7IHMQwDllU1+n6zRQilYBiAAQPCojYR7pLsDedfs/bn5o6l
+UCiajEu63FaK5tRSqhU8f1aUT3PmRAkB4bhmtdRpClJTvb1+852WrDNByGqqVFy41Tc1DiEEtKlY
+wdBAAEJro1arQ28olXUxYteq9QqQBZaMjIzMOVyO/eBybyq07l9Xjj97o1T9QW6+3wPHcX/6nM6u
++6Wv/6U8O45lIbXQ4nYti6mGkAWWjIzMtUVNXzegNqCYxRVXLzIyMi2G0lBle1CpJhHDH2pLREhN
+Y6lQIgjDsjXiT9PkmJcTWWDJyMhcQ1CIkghKQ0HSCqUSXBMZdDIyMlcnVKIQ/UJN4VTA5fLA4/Eg
+yIeq8ms1WqhUoXprVyIW7IpVcqeUMpv+M63d9TfNnNTz9o8Tzn//8E8fRdx5Q99xURERD5uiOjw0
+aNqTY378NbeZVdpaOpdFyht7JY9MHPH4TVmL6J8rcZsJXZtlbB9nvTXsuufHZFPKbHhpTHTXtK4z
+k+74rluzx9jVQ3Fr7+gxloypU6//jv6ehORGeX1299QOXYbfnjJ/e/IfMf7vhdJF7NS+0YO1qZNm
+J87PD6df9g4b1C58WtyIJ8dlbqDyHxzXAOd6Ma4uF5SMjEwLqPfrG7JQUYiiiDP5+diyZSuO5+RA
+EERQenkKq7aUP31D2friLMPGnLzMAamtxhZVVXX3mnqHR2ZgLoCC2mMcr/WNmPP0c3/fXaUbGZ2S
+URImOqTynUvuuONRz8oXt1Y8/8SASNdlnZT9lIYPBCZ6q93J/jM5GwH4LtfQqz/4W8qWAjYtbvTM
+rXf3b1t+yQP51BFgyD0U5BiANSrqT/R7Aw/4q6s+BbC3WWMozEqCwhsJSCtewBYADa7jtkXZEduO
+eAd5YzJOPjUn6xAhzatIRyklr8/o2MXjCTzMVdhKAOQ1a16XAKWUrHxrfudfy7TJaXMe3HxLksne
+zFNZgIwCwQQx6N0MUfAzDOaAQwGAnwE0v8mXjIyMjMxVBaUUDqcLPp8fdrs9VEvsCsXyNWnBopSS
+DR/Msdxww9jUu177Po7Si/WSb5pVu3KGL/wpZ34JzNYO0WElfqdfV1Orro7X11Rm7jujmkQ6jP5w
+6KzZN/fv3mbq9dGlnzL5ayd/8s3OEb/n+g0SPt/ZJmPAP1KT4mf0cLe3Xc6hjyz+oN/yr3968lBp
+dfzvHYtQSIAkxOwGUZocezMGDBybGuX7uEWDUEiUQAqIjQv68q9eiV6zYNnffth8YBBa8Cc+IYTq
+2rRe0atPj5HJYvnGFs2rhRBC6IGl/x2xePHax3NL+ciWnEslUICKQVZJoWQoFYlIJdq85m4yMjIy
+Mlc9hIQ6H1yWrJVLpEmxtObv/Tr8+92fXtu759C3qz9747+D5y3OpJRekhyklJIuI0buy3rimXtO
+Ht01tZ1ZuUJLyDkbGz2cpazy2Ac6IhKKWt/80qrXZ0+2vfDeAvvosX2WRgdc3ortWzMaEnmO1/pG
+dGsdNbX/3e8OfOGesf3SLNq7wsJiH+h78wMQrpUZAAAgAElEQVTDvqdUu+Tf09oNamO+zaTSPdS+
+/6Qpj/9YWE/w3K/cvW1jn735BZlfRkBxOLtndPvEmFvHZS/vlX3PhH5tzfq7w8xJ9w2dmz3oE0rV
+ALA/u7O1c6J1Rptb3uuPmvWgNJu7qWfUsLBuU6fOmfN0YqaZnfnffc7xxeVnEhY8dOus2N5TJszZ
+dbZj7KnvHoya3i/pxqiwsPujOgy647YXVqQ3Z21LXKC2EnXk2vXrx+yz6dvVvr7hg0ctkzM7TYzQ
+6B6M7nTdzPv/9d8ukxLaTDH3/Puwc9aMUra/Y3XrYemxN4fWY8KUeRtOR1O6iL01WTXy8U3+2cdK
+y5KOrV86xpTU9c5x7xXELZrVqkN0YvptT3y5rdOc8b1HxGpUD1iTu8y54V9fdFlEaV2lwrKDR1ut
+/eW3scfZxChKM7mbMqJHJw6eOf7TTz9Mz0yLmR6mCXuow+CbsrJ/KbXWv6cfX5wdPyqjzc0mTdiD
+Sb2ypmVnv9xxeFzqDPPAF3udf//vZCZH9wpXzP3mSPV1pSWnWr1508C5ycPvGplNqRIAlr80p834
+brFTI1Sah8ITu8+dNP+TnrsobXagzYb5fZJbG613txr24HWLasaklHLvPDSma6eYiDt1Ct3DrbqP
+mn7fov2tLvV3QUZGRkbmr81FXYSUUvLsYMuE3cfskx0BSUUKy9tVm/pWfLg761cA3pZerMbVdBoA
+nrp/VoMbU8XGw0qfi49lWJWt70i4V9e8Xl2mro5m/I4iZ0EUAPX51+cVsFLR/2Duqg/038ZbTsd2
+6iMpC3OTc7euU7/Qb+hawVcZz8V00qaHVSjO5O9tveAfj/08b6f7Hy/30pei2qwhFLdSkDhJhTWc
+ik+AEHhi77IPnEUqtzshvXtQU3iq1eHVK/DedNWTAJYrgHiGMI9S0B+yge3ZoTQkJQM6iYD0lOLT
+c7oNGpD4y/4cq1jmVybGxye365EaE5sYErU/PdKty7R5y/4uqM0JHbsnl/pLS+LXffbqjNZHnc8B
+WHPRhcwEFL+gNQWeYiTyHwB7f3mss/X1dz995pdSy2hrh56FkRGcffvSN6ZWuXzdpCiyFMBm8CoK
+hlJP3r72C98qeCbaku5LI/lhBXn7khf+7Z/Lui17598d+/W3luWUJh48elqlC9Nb09PTW7Vqb1BL
+e5hugs/27JLX/51jVmn49p07o6S4uN0vX/63CNDdD2A/pZQ8e3P7XoTSf4qMVAC4KjgiTHPmH+z9
+8n9O55kjO/JpJN9UeGJ34iePz//6yyr67HQzcX53R5u2r3/67XMH7VF9EtN7njRqqn0rFn44q9xH
+uzOQXgaws/7tR/forsowJCbv2HfYTP28OjEpsVW77h2stwEMO7TViJfe//EJKaoduvfjKjwuW8yu
+5e/Mmpgn/odS+jWwuNFlLYwH3f5/mclPf3jsBb+ufWrrDqlPABAppeSpAQnXryoi85jYNKFvstdh
+Lzue+O1TD5Rs3539bwBbL/q8ZGRkZGSuOZqyYBGXmzfQGgsFpSLh3V49569sRm+FS8NRYWD8fqpj
+QIREDeqsW/poBVWqRT/LujS7cWENNyoyFJQQN9vaqU4d+lT84PG3Te8aNrWr4mTJ7iOl0wOJozZY
++4ydPrZf+5smpfjedpcfGb7so819as8XKZEkUCE0FqGSJLJuXh0w9ZrwlKXvmFtm92BmtKPHXWeK
+iqZ03k91FIIkgUoE5zQbAyVEgiSJvzL9y19btvH5G5P5xeaw2LKedz7z8rK3nv5vtpW46c/3mt/5
+seTB01LXBEXPKfdOypo8Y1oncVpn6YDDf/j7e25eQ2ObWicqMRQEIkFojTbmOq7fXGyZoOxw/dt9
+J8+4oXN85MzxSY4FAisJIs66vwgjUUFkOFXbwd+oU/vfPmJA+o3jYyu/8ZYeHv3mf/M7PrFg/Rf3
+dOJebhMeXmxJHbZszdJP/v3mUOMphmGpyIsanyr2lKHP+Ac6jR47eVZnfl6481Dc/uOlE7JrLGSh
+bFkqgtauiyT6vIJe0WHIAl3njJnjh6dMGh1dttxdfHT8mx+fSKcU7Krjrlt2VyX1C+s++cme06be
+1KmV4o7r4hw/+QEKigtSPya9srTgnRWbnhmTQH80GRMLR81/97lFLz60IHn3XMbB0LSq6IGHvX0e
+uHPt+p9nPn3n4JsHsKcKxP3Lpr+chyjgSMOpJIxC+ufKh1s/9WHOCwe9bVNSrp/18JZ35q6ZTIiI
+r4db99rdM/Iih3iNox+fMXVi16kTeujnWpylWvfmH4bQFljHZGRkZGSuDS5qwSKESF/NbbcmvoId
+d7LM20lhbl3YpmfXZYb+lhZbr1oEBYF0oeOUqSlW42owLigAhlWJkd0HbM/88JFD2YQIlL7p29v/
++R2EaxvtThq/dvkrg8qXA/jowaE79IfK73OcOR3V2BSUSg0fkTFu3fq379hJCKGL6OM5P3X+5LDH
+7W1/+geoL7qjMoBdoJQQIrw4WB8khJEEKP2EEB4APntzeUpJNT8wul/Hn27sncB5qivaR2bez8ZW
+vZ2z41TlxN++/i4ZQHGzl+v0TPXto5aMIOG9jo1+5qUl7w8hFQBwctGcDd9v/7HIS+utlwTGlJR2
+NHzcs6vWzCLlawB8dlfHbQtXCll5efmRAOCvPuMHo5MkMEEAfkII/ebONkQVZrZHDJr547oXBuas
+A0BXZO394r6NxWWV9gRsBINMXBDHRChLjK06HjaNfPqnVbeTilUA3puZum3Jen58/okzFucj8caS
+QucwbUKbLdM++OcP2QnEBgDLnhi5dsX+03dVNnC/hBAJgP+fvfVBAJKHUfhIyNXspRs2vJ226aP2
+H3/zYJ+w96fHKLVqZZLKaxU0lerdhxGO5MMVF44oQWc/mPjlO9ufP+SPb9sq6+7H1r01bUNdcH9E
+BK/gOCdbnR/vPb69h2L247tn3xq2v9OOHTO9klIALhSBMjIyMjLXNk1mEU4b9twvWwtfuKN0a16y
+sfOo8qFDb901+by4qcuJScNRTkmCYFi2qr6QsgOCQDhISj79IpleDKkvzKKpCCIwCo5nNca6OTPU
+JyhBpSDTeGqBSFmqVCqDZzPoIiUKIoiCpDAo3Cwu7OPaILRO3PB1rx09FTS5HV5z0ZavRv9nF9Mb
+VAIBheCqjHArIxlLtU3dvNFrzFcHbIoqmzKKhJlKHs2E7f2a97wid4FIpRILyioETn9WFIgsy4ug
+hPABBQAwnOKCdRHBgoKlSrX27I1o1KJIiSQKvBJWMIQQ4V9Z7eqdVQJJIgQcJyiNZ68nMAwvUTBU
+9Cl2VUHjcOosxKTb8XQ83Nk1xwTRdHQ9wzAEADgGNTFwlNw3pP2obfl4lEvs7u5qsR/heX+QKTyo
+pmDYYBCNWF4pivat6VfG+zgpOf0wDWtdcU7m5MhF9g4fdH+VLyq7O//Q90/8bfY37r9x2oKkfuPW
+jLhl9gryB/4+yMj8lZACAfgK8uErLYHCaIImIQmKsLDm9eiTQsUkCcNcsaywywWVJIhBHlQSQQgB
+q1SBsFesapLMH0STAotMniwC2A1gt23163h99et/6IQsVgWv0ZEq3hNIOrAPdUKDN0JZ7VcagmFW
+ZyQQaMmYFABlW/4bKV5EgFEmtAGfa7oIo+SCktAX/tJolJKoUFn85nYDP6zKWf2tq7ISCOkJERFC
+wMNVN2S4aRAWANRGSa2iPsIG1L8BdQ3D1Eo2VBjkgslfdLQ/FYOeE5UKf4BhRW1J6PMYBABGyUpo
+ZnltQQodd+TxVlEFJY77KszDKzuOemTeqvl9irD7Qzz92OOaE0Uks7HzKUAETceSsWPi38/buf7m
+gp/ffmL60ryHvrwxuQQAPvxwNzdk3jsFMwrX/H3uPz42demR0qHaVj7u4Ibl//rgpJhEKX2ZENJM
+yS0jc20SKC9FyXeLYNuxGYLXA8JxUEXFI6JvJiwDhkBlsVwotCgF73TCV5QPT+5xBB0OKMPDoU1u
+DW18EjijqcUNlK8kkiDAV5APx/7dcB47gmBlMRi1DqZuvWHuPxhqa9T/1P3IXJyrr7DizA0Bw4JW
+u5gzVcMOfragI4AzAFB+fFe3QqUqTJPe42Ctq+1KoQ0SkpRg9gJVfldpVRSOhISB+5Pt+oDTE3tu
+qVIJlEqMJKnr1npIH3P+2oqqfJuo6/ivxbkfPjwkvBoAsufNiy7TmaxDnn64bDJ5pPkTGuH3t27D
+7N5wsmrSew+u7AJgHQDkb9sS44UU1uLCTjxAqEQklv1jY4sEoOddQWfMr9K+3c7ynnc9v6MtgAMA
+4Mk7luCRmIsWfRVD8pYRSGht88s5XcAPK6Kt+X3m96kkhPDOBeMth4r4ZCo1nu1HwFJzxpCt4995
+7t3Dt7UvWrZ73bPb3ol+4J1y+ty9VuIOP/1i0lcrbfPKE8eueyAnf+lkQk5ty87a8X8nVnfe7crp
+8QlgBNCA61FGRoYCcOYcR/HCT1G9ZxsgnTX4Cg47vKeOwbF3B2LGToKpR28witDXjhQIwL57B8rX
+/wTX4T0Q/bWRKQSMSg1DSieYBw5HREYfKIymP//GWoivpBhVW9ahbO1KBCtLQuUDahwursN7UL1z
+MxJunQNjepf/eQudTIgrKrBoyGpzjtmEEEKX3dtr/fbjxVmHf3jnH/0n3JkWK56Q3tyw74aqiMy8
+iTeOXv3pkgvHIqyCACAg7DmfTBJy0TGo59NjJEoAwjLS2dIFhIAwNeYmIlECAoahhFBKSa27iAIE
+BIwalYxq5vjidi88v7fw8IKR39+986msrKyykS/u7F5QIgyibZiTtcogLs5Uyh+tUv/635fn3PPS
+Rwbr0Ds2D+rx4YmBp/7vk8I96+e9Mvemt8ZPvXO7uXKX+tuvlw7huow53Ql4GrjQCUkBBpSpX26B
+oYRhCFksLnqo6+LN+XnDDix89rmMkTN6x3iP4emlpwYW+ZgESs5agigDwpxXWoBQSgjAgEgEAFLb
+GV3sQZutZO/Wibc88M/Sf6zzrmUXdAIJ3f+55wIEODsnSkEIISxqrH+UAQEhRGTPnsdQEIAwYCRC
+Moq9b05p+/WeXw69vvndea8OHDdzjbF8j+69jWeGVfLh4TrSeBGTqBhdcSC3zLz5pcfveuitxYva
+dXEdtux9Ynvw6NqxC/te5xkxuH9Fv6cOdq4qI4OFKLasuqpSBQCEqf1MAAhKBIQyIAz+tQdC7kfP
+LXdMfrTNskOrZ//nzpiTlNJPTvzfIMc3Rw5pDu2tfPLFnB0pt826rej5pZvaHxEsMSS255rbAces
+xiYpI3MNQyUJ9n27ULDgY3hzD4e+8c8TD1QU4Dy0C/7SAsRW3gLriLGgwQBKVi5D2U/LEbSVn2fV
+oZD8XlTv2Q7X8UOo3tUbMeNugiE1/eq0/lAKV85xFC76FI79O0H54Nk1qP0vleA6fhCFCz+H6t55
+UEfHXLn5ylw2rpjAIoTQ+4e0tgE4IlHJXf+9G97ekXtCe+M8wy/5d+zftWbcSaKTotLG7c1IH///
+Pp0ak9fQeALEAICToFLJ4TrXkp1SQkoBkkN4RZ1bkXKMBxRHwdCQK07wiqBSAaXwuwSIAqiXUJor
+UpSfjcVhJUpRRED1asILhMzzfDd/5Gvsplz/9qM7MwtORQa79xmxI1G57isvYSLFoIIHgC7jBq3v
+k7/js63HNg7fsSex5/AbsZ2QuV66qO8XBkuwaM2Bwmm//nx0qlJrCkanDvktql3qZ+WAo4EFCxLg
+BCFiYRpAiSR6AHKMUlQCQNbr+/ZXuvs/tHBnxd05u34eWx2fUt6rz5hf7es2JheHPJkSgpWUgBRS
+SsFxZ4PCKGWdlIjHiMTYAaDjS9Pzu5/+9q3CTYfu+XWberjiOt9vnSXRToHjLCHOujmJlKfAKQqp
+KMZXu+bUJkn0KCjcgFICFQtAqRvi2bg5yhIHQI8RMA4AuP+u+PUeTeDRZdtLZufsOD3R3KpLYUbv
+1usqNx1NqiZMowHkGYOGfp+Rv6Pj7gPrev7aOj038b55O8aNWfEys/WgbeuxPUP265P4mI7Xb5qY
+cXDDBnvrDGd5BQXSqSRtLQVIjoJBABITBOgpACXd3KAkYbLv+ILx71W88Itl1eGNo3o80fOXPS9t
+OfrxPSP+YT5dNWVHzvbha/bx2nBrTHWrUde9jJQRS2T3oIzMhUiBAGw7t6Fw0WfwnTkRepGiYesM
+pQiUFaPgm4/AO6tBJRGlPyyG6HE1KpoIw0DyumHbtg7egjzETrwZlgGZYNVXV7czx6GDyP/8fXhy
+D57TaLwhXEf3oXrPTkSPvl62Yv0FuKIWrFLLqe8iItQrj3QtFPDt2ddrRM2e7MzMAz8W7WaBtkiZ
+PUv8OXtIo96uqPt25vnfS5uVVO6SFtcEHRMyl8/MxLtesO8ff6VznaDIN207oDanjT+ls4aOi3zJ
+1aMHnvRKIrz3Ej6N4gjzTdrNJ5zKs+UNyCO+zEw85yn3Mnv/1pbH34EJL6w+sSgra96e7Yu5Auhh
+mHydYFhcDfvhAHvkeSsPAJ1vWWBflJWVvW/b4meRa5NebB0SGmTydh+AH+b0wJpNFWABLe3Xa6Sw
++I3J4g9v3HvhDY77vJh9Iu0OJy9IkwkRs7NxwGJKm3CEhua4+N17dKq+EfbH/nXP3eNjY4O4f470
+YtnSoTs4Ok3Xqk1eTSC2LzMTz1a4wsiaG84KnjNRe7dUG9LGwh+sWbdsgWZnL/3pSPZ3R3z5mLEn
+QjialHfUrE/b8JvU7ewzGPllqdaKO93VMZibEXLbppITK9165Sp33BaBkDxpTg88Xc6rsK7e9Srj
+D61zGNI2ORJ3CQCwfHuiMfq6Hidv/ceYWx5o1068+97ZMB/57OZ1Sg0f1ialwLa54Wfe56Gvy7Kz
+Mx/Lyd7Iqk96xUcIEQDkLcrKyt6+dfGzZZURKOs5QNj7zX+kjLkffrKbTxUJyZYyM/GO18W+532x
+NQ/6G9xv466SAEcXTyYCAHSY9n1ldiYeXeoV2T3aDTwAzHp3TQHNzn6tXW72WyUVIOGR4dLAz14Q
+sgmRMwhlrgl4RzU4nQ6kGc2xeacDFet/QsmKbxC0VQKEgFGqAJaD5PcCDbQvIQwD0VWNkm+/BABI
+AX/TFqmaMfwFJ1Hw+bvgK8thHTEeyoiIS7vJy4wnPw/5X3wQEldAaL71q4szIcdLLVTgUX1wPyKH
+jQKrUv35E5a5rMgS+S/CV/PGdP1y3alncrnWJ/ukxx4Uio4ZThzYOykvfAg78JHX5iy/s/3RKz3H
+xnhlZu/rVux1P1hhaLuvT1pUruPQzqgTp05NKYoen3/D8//vgY/GaAuv9Bxl/vdZsODT9DZt2u9O
+SUlTAQBDCNQaLTju6gtFvdrgnU4UL1sAXbt0mPsNALmIdcVfXobi5d+gavMaCJ6QwZszGBE1ciJU
+1li4jx+Gfc828PZK1Ji0Gh6oVoTUv1ZDr9WD1egQ3nco4qfcBk1Uo1V4/hRErxf5X3yI8tXLQSUp
+FD/BclBaoqFNbgcqifCcOAq+fk4TpdB36IT2j2VDZb2y8/9fgFIKv88HXuBBKUV1dTUcDif2HziA
+kydPwWqNRN8+fRBmDENhYUF1YUFRp+nTp/9p+4n8zfIXQaTm3LYJzo9U9qKJv63ZcxuvMkqWzuMO
+pKZN/nTZ7HbHyJ1XeoaNo9VYdqUnKxbkl54Yt2nFjkGswRKIyJiyOr1r1ieyuJKRufI4D+5DxYZV
+8JzOhS65FTRxF7ZWpYIAV+5xFC76HM6Dv0EKBkAIgSaxLWInTYO53yCwShUsAzIR3rMfir9fDPex
+/aAC36BgYrV6aOKTobDEgOEUEH0eBKtKESgvgehxAVQCyLkWLtHrRtXGH0EDAcRPnQltfMIftiZN
+4Tx6CPadW0FFASAMWK0eEf2GIWrEOGhi40ElEVW//oKihR8jWFlaF8oatFVAcLtkgfUXQBZYfxFm
+vPKFh1K68pnJ6at3bi7liuM5OqNfKp+dfaNA3rjSs7s497z3g51S+vXk9PQlp0pLOajVUvaj04Ts
+IY27hGVkZP4c+OpqVG3fCL66Cs4jHhQt+xpxN06DOjYOBIBEKYKVFbBt24zytSvgKzwNUApGoYSu
+XTrip8yCqXMXEDaUz8RqtYjo0x/qxGSUfb8EFZtWQfS464ksAl1yG1iGjUdE7/5QhkeEGveKIoK2
+KrhP5cK2bQOch/eBr646d7KEgEoCqrb/DMHjQvyU22DokPqnBb97CwvAqNRgVWpUbPgJgfJiEIaB
+Ojoe0WNugmXYKCh0urrjIwcOgfPgblRuKauz4xGWq583JPM/jCyw/kLUxK4FAQRRWIjs7OwrPKPm
+c87c8/KQPWTIlZ6SjIwMANexQ6jeuwMAQIN+VG1Zg2BlKSyDR0NhMsGdfxLOfTvhyTkC0esCADBK
+FSJ6D0LMpFuga922QSegNjYO8VNmgFEqULbmO4g+L6gkQZvYGom33oWwrhlg2LNJ5oTjoI6JhTom
+FsZO3eDYvxtlq1fAdWRvjZXorECDJMGxfwcEtwMJU2bC1L1XncC7GJRS+EuKEayqRFhax2adUwvv
+dKBs7SqE9+gNKehH9d4dIAwLbZtUxN90C8Iz+oTi0OrBqDVQJ7QBo1CBCqE8LE6nB6vRNvu6Mlcv
+ssCSkZGRkWkQweNGxaafIbqq66wqUsCH6r2/wn3iGBiFAqLXA9HnAWEYUErB6cJgHTkRMWNvgCrS
+etHxFaZwxN54C4IOJyrWfw9WrUXUqEkwde910Sw6RVgYzP0HQ9c2BcXLF6By00+Q/L7z4rUkeHIP
+I++TtxFVMgmRQ0dBodc1OiYVRVTv3Y2iZV9CabbCkJLWbIFFJQlVv2xCoKQACuMIlP24AaLHCX1q
+FyTNmAtDSiMlJBgSslgRUpdhyRnN4MKMzbquzNWNLLBkZGRkZBok6HDAc/r4uS4rQkAIgeh21DUf
+JSwLKklQRlgRPW4yYsZOBKtpulyC6PMiUFkB64hxENwuKMIMiBw8vFklCgjDQBMTg6QZc6CJiUPx
+d9+At1ecG5dFCPxF+ShY8CG8+acQPXoCtK3bgjlP7AhuN6p+WY/CJV+Bt1cgefbDYFqQ/OA8fBBl
+q79HRJ+BUEdFQ9e6LaLHTUbU6BugbSBerRbK8xAclWctcIRA3yZFziD8iyALLBkZGRmZBlEYTQhL
+74aKkoILRU9dkUwKEAaGDmmIuf5mRPQd2CxxwldXo3jFIgQqbWg1+x60vushMJwCnMHQojlyegOi
+x9wAzhCGwkWfI1BedME8Jb8XlRtWwnPiKIw9+yGiR19ok1qBUSrgzctD+c8rUbVlDXiXE4b2HWHq
+0gMgBKLfB0gSWG0jli9K4ThyGPmffwDCEUT0GQhWrUbUiLFn+yZeDEkEb68A5YMgLAOF0QJjl25X
+Z8FUmRYjCywZGRkZmQZR6HSInTAZwcqyUBVySaor0UApBSEMWF0YwnsPRuy4SdC1atOsAO2A3Y6i
+RZ/BvnMLkmbeD84Q9rvqajIqFSKHjASj1aNo0efw5h2/oKgnlSR4Th+Hr+AUqjauhioyCqxajWBV
+JXyFeZCEIFi1BuYBQ6GyRoECqNy6Gc4jBxB/483QxCWcM5bgdsO++1eUfLcQ/uIzSJg+F7qk5NAB
+NVa+puAdDvC2ypoxKXRtU6FNSL70hZC5qpAFloyMjIxMo2gSkpE8+0GUrlyM6n2/QXC7AMKA02qh
+TW6LiL5DYOzZGyp98yxPgsuJkmVfo/znlYgcNhbhGb0uS9FywrIw9xkAZUQkihZ/Bse+HReUgCAM
+AyqJCJQXhzL86r9HWJh69Idl0HAQloW3IA/lq5fBnXsUgtOOqOFjoAg3Q/T74Ms/CfveXfCcPAK+
+2oaIfsNgGTisxdXX/eXlCFRWhhqOKVQI69gVXFjY718MmauCP11gUUrJ0mdvb/vNj1uGbtpbkhQI
+Sw72GH3TwazZd6y/Z2CSvfa4nxe8EfXV1wuHrtqem+rnLFJ65sSjt8+8de3sUem2yz+nN1VZvV4d
+u8s4xdgp66GF38+N9TZ9lgwA/Pz2DPOj2Ztmnkm+7Yjtt2d+Otta6PdDKWVvbB85anNwUErvqbM+
+/uGFcfamz2o+b83s1OnJdYrr1cP+vaL0k7FH7h5ovn6pq39c29u+WLD9EeNl+5xRSpmJsZYJx7o9
+qDg+86mlmEzEps+Skbk6IATQJiQi6ba7YB40Av6yMoAhUFsioY1PCDVabqawEH1elP70HcrXrYAm
+LgnWEeMva8YcYRgYUlKRPOt+lKyMRuWWmgD92hupd9xZQsVOdW07ImbCVCgjzJB4HhWb18Fz8hgA
+CY49v8B17ABYtQ5SwAfR6wQVBFBKoYlNROz4m6AMD2/xfAPlxRBcDoBSqGMSoE/tLLsH/0L86QLr
+nUnJfb7a73u2Uh2n79o/OUeyl4fnr/ts6tMHi37O3uV8OjsjrPLEy/2sT7z8avZuh2lgbHqvXJNo
+l0p2Lr7pb3nuAfNXVv/zhXGmy7rRwmZT8UE+0+1wJcHl+h7AZRNY373xYOetZ5RdYyfeu/bhQckl
+l2vchtjywROJa477M9mMMTuzp4089kdeqxaFKESAkDlg8B2Any7z8CylzFBCyFjKa5YAuOC5H/hq
+fviPB7wjK6O75L/80KwdpAWtaxSc1AHA3RJoDtDjGCF5Iwhhugc5ugrA7xZYlFLmCMARQoJTokyD
+DFq1GnYs30Up0wMQWzJXGZkrDavVwZjeCcb0Therv94oEs+jYtN6lP64HFSisF43HoZWbS5pLpRS
+QJJAGPaCiRAAmrg4JEybBUNKZ1RuWQf38QMQvW5QUQCVxLoC8oQwYFRq6Dt0RvyU2xHWIQUA4C8q
+gG3rOlBRrKmtJUF0VUN02WtPBEChCItA9IRbYEhJb/E9SDwP35nTED1OEIaDvkMa9LUuRpm/BE0K
+LEopWf/+bbFv/WCL0/efYbt+ftbpyfJJFbEAACAASURBVOTS/gI/+UIP45Ofn37oGNdL22r03Hvu
+7M0fDB75Tn1444/3/PfEr3d//sHG9QCWfryubOiBUsNIbb+sZ6fOmbDQs/0dis2LZ3yUs+7xpd+P
+2Abg60u5fmMQc7bz5Zcf+5u5IpX5+NH2bjx2+cY+sfzT3t/nt7l/SJ+bDwP4QwXWieXvtF59LPZx
+A0nNBvCnCCyOiBJAg6D4I4qCUhDCg4IPclKDlrGixW8Ytx6JfPBMB2blyw/hN4QaWzcLEUQCqEio
+JAGAJEICqMhw6stihdv25qS07DVMVnrm9Ucdx7dZqO0kO+zNpAn3LxmWlpwxdhH+pGckI3O5aam4
+opTCvmsHipZ8DsFpg2Xw6GZnC56PKIqo3r8Hvtyj0KV0gqlj5wbLKSgMYYgcNASmbhnwnD4J5+ED
+8BWeRqCsEBAlgABKSzSM3fogvFdfqMyWkJgSBFRsXItAWdG58yP1+gZSClYbhuhxWbAOGd6ielm1
+CC4X3KdPhEpbGAwwdukFVq1u8TgyVy9NCqyf5vXp9OwPhU/nO2kGTtrzc4rFFymlP16KK2h/ZaJK
+EakKpFh6fLXtlYkHCCE8gOCivw3bpDlWPNd24lQcpZncfQMO9nOYuxf0nPbUxnkjiQcA1r4w7scf
+Dxy8+9RvW7tRShee/9d/yZsDI8e+dnySauT8/FH4SVy4bHuPwoBOlTpi8r77P/jPBrwxOenDbzYO
+PVAUiIjsMrRo+H3/+vm9WzqfAgBKs9WDU94Zu8uYZUj+dNZXq5/tYp7wfsUNydNfPdS98mvFsuWb
+MkqpiUsfd9uuiS89s3leNPEcy+4Wm/VJyST3wOzjp7+Y+zMIoZTOUUzp9d2o1cLwuGl92q05tuS5
+ce8f8IwtD+bHffXgTQ/E95m2ZsgHX337RZfQPe38+PaEVz/aNHzTIVs8Yjt6M2++d9PXT9+8lzQi
+YEv3v6x79blvBy9Zd6hblY9VJg8Yd2r8/c/9PLvyqarHnvxmyr+3B0a5hNLYwFcvzTC3HxDV/+Ut
+S1ZMIGWbP3goZsHy9YNXbc1pZ1fGIGXoDcdunv3wukdGJdgA4J1bWvfM3mboPefJl38tWDi/zZqt
+x1IRk+oaOPuJjYvmZ+2tv9bfvnpPwsdL1l23dX9JojZlUOWGsoQCQn47x6a97r274hYs/WXw6l9z
+2zrVcbTj0KwjWXc/se7hIeHVAPDqlOQ+z20L73fDxBG5+7/9tO0pmu56ee+6hbPKnwk89dLmzAUr
+9/ao4iLJlIdfOqJQqQ3gccFnjVLKzG1vHH33es9YkVa1sttXjDbFr8Z1/zmyaO2DabmNz2PuuoeH
+tKpuzufVuWC8ZdQjWyfnmAYL93382ZLsfkbbhk/uif7w443DN+zOa+vXRopdx9++d+q9T2+Zm0Ec
+F5x/6ghvP+FndXrrzOO81MV5YD3TOikupqzAdtAUW8U3dE0Zmb8i7hM5KFz4KYIVxdAmd4B1xHhw
+en2Lx6GUwnFgHwo+fhu+gpNQRSci4ZY7Yek3EKShzEVCoAgLg6lLNxg7d4PocYN32AGJAgTg9GHg
+jMZzYrFEvw+Og7sgCULD7jpKwZnMiBo1CTHjJl2yKApUlcNfmAcQApXFirD0Tpc0jszVy0UFFqWU
+PD0wYvyhk9XjHEGqJP+fvfMOi+L6+vj3znbYpXcQkKaCoBQrFuy9RVETe4yaoklM0RSTkKamvCbR
+NE1MsYvGHnsPKioIShXpvZddts/Mff9AURRbYvJLmc/z+AjLzLllZ3e+c8+555TXemrsr5SsSZx8
+Ar/DjWY7olPtAF+r192suuiuiysAQEVeXltOomKd2gcUYttJiaHR2kXMyOp79oL21+vHNJaL1U5i
+o7pYU+wIQH57+xLC2lPe+GTW/rW2Zg+XTI/QSK1Fflrb7DMHZ64c1Oc3jq23l7t2ZjvbVoryCi7N
+2LnsnX4LTuheXdXPohj1kBOCcQRwZ0zYDsCd5/XPJO/73lAiM1V7dOrSoChI980+vnP6poXStwFs
+5sG5iIA5hPK/xgDHYgAKuEkAOhSgXbSuoee7DxwgPnPpiriqxMj4BgTLO0R0FIdcLy+1/bnwbk+/
+f+QtqnKyCuvuW6AtzveO27hqomeufimA3Xe8F6WrLeYOWrLwdKPNJOd2EflBTI2hIP3EhB+XzB+b
+MfHl97sNrmYaL1+TJF8tYZw9fGUhnTpKg71Bp8/r7P/h8k2fllj52neMHHjVoK+zLkneM/6jpbTP
+3NicJWsm+jZIxSSU1VS/sWnlx9n2Kjt1UGhHU0lBYfCptV+Pmyy2fhpAKgAcWRzuufKHX5ZdqLKP
+dO/YI8NeZdLGbt/tVqQ3efDXBfdPc7oELft450fl1r7WnfoMuKpvrLcrvrR9/LL3+J6LdlfFfDTa
+oXHVFJ8Ic11+zMFdx4qd3UILu7fxiPeQNyreXvj14xtTLF7hbYMaQn1scwrPbI8qLmkI0FpD3dpX
+WHBUlKgqq0ySlJTGWNs5SUNDA2UBflbkCIBNc7oELf9450dlt/Sj5NL28cveo5GLdle98/EYR83d
+rlMjJ6N0Z5TNpHeSFhey3uPbhIR9YNXGSn/6wyGun76/9ZMMaZvAgIgeuRbaYsW1Az9O+TCv/sAT
+G+vf2zSlpet62BdXr1JK318wNPSFfcXyDpSIGIu+L8R+9cqkn0e5ESHOT+A/gam2BqXb10ObmwGR
+XAHHqEFQ+rd7oHMpz4MzGiGSSkFEImhzslGy+Xvoi7IBwsBQVoCS7esgtbOHdceQe9oiBBArlfcV
+dkQig9TJHSTnKijPomnVqsmnKJLJYenbAc4jJsCuSzeI5PfP9XU3jGUlYNV1YMRiWHfuDqmt3e+2
+JfD35L4rWCYjJ6PX10Up5cEbzRKxofrh10MB9OsXwwJokaRk98Iefv+3s3AmcRh08YnZw+KuxrYT
+G4xlFoyUGF0tbrp7lC4SKpWxBiLSypMBKW4TWJRjKCUMNShCSpx69HvFw4oWT/Yocdl2Oueb4zmS
+UUFDJi7yDvTd2hO7+dLz52Z+fSVn0b6Nh7sD2A4AHCU8D8oCAAXDU8ozRmJX7Tlk1MuOUi57bsGH
+Pl8fz1udWVI2PvAE3UtPBfE8KE/QciWNEsIDPHeWD6/K3nxwxUf97NkitYtH5+lvrFr7ZLdzhBBO
+s2Oa06TXDr9QIo1UBg4dMWdmhCoPx5c4bj6Z/vm51P3zxuyil3aPJUW32k3/+bt2CWpuQl3wjNMD
+RkQuftXiZ3bV1vP9D6WVv1Z6Id5/8e59P/44xqOiotyhs3W3xzZs//LpLQDYDRzbqdKmfb6228IP
+930zNgGA5L2+Tk//lHN4fnnp2G0AToPnOY6DjDoEn207JOTzIEfU2+1cPPzzCxmfJmSUDwOQSmmM
+eNHgNZPPVrv0duw+6a3xU3v8oju4nijlqdGrq5hljZQSAIzZ3OhVbReUbej+4rp9X45KBiB9u4/D
+8+uuHXyyoHLSNkIc4z+b7EV5qYORCRj5fcTEwLXh4T46688Ghmy/guc0LgMTBk4Yubg9W1flmr/C
+f3OleUU8hevt1xIhhKeU7m37XPi1z/NVESVeEYf3bl61HID+/ygl380O8qyxC8rWd31p/b6vRyQB
+kL7Tx3HBz9cOPFVQOTEWQHxr1yiFiA6wPmk/6a2sZ8+UOo126jspZsXWxZv6EcJumuUz9pLJrreo
+z+J3T81Xr8/OPK1445O4py4XZo0QXYtzRysxYuunhwVnFGKETZeJH4/R7HE6cGTjuC88/OIApLTW
+voDAvwneZEL5wd2oSzgDAFAFhcOuV/8WJXDuhqmuFnUXz8JQUQHXUeMBQlC2NxaN19KaXXeEYaDL
+z0Lp9nWQObwEuYvbH+6zSCaF17S5kCitmmK3DHowMhlkjs6wCesB+x59ILG1+0PB6JTjoMnKBG82
+Q2JjD7suPYTg9n8h9xRYhBC65ZkO+9tWVw66WqoNkzq1yw/oHr7lyUgH7exH0PiJRd08vtmT9lau
+oodlh8lPvhETQaqnxHSzIrSMtBZKc2MRt3X/jhEMI+WdOnVJ7Pp/c3JjCGFX05Ulx3ssTWIYX0+1
+85AzG2O6qzcC+G5h38vKpBqqKS6xv1vfJBKF2S5sxOl9H05LI4TQH+miop86/XhVq9W3156DTHKf
+selv/MAbWUIYaibUfMP1t2Xt0XYV9eZuzj18D/d31LmmZ5U5W/tOY2wyfio1FdSMSt25wxNAC4El
+s7LXKEV5NciPa5d9kR0YN3lu6tzPX/ttSEVFhsnSUjNqN8CbNCyBHeUoz96yQnjk0FfPZv6w9c0+
+9qopQw0QyXysufZqfbWlWkOcAIDlwVhYO1bb9Hny2LZFweXbAKjXj05blXihtqqizpVSyiS/209Z
+mNvYX+IQlvTY568fjPEhjQBwZuWkU79ciK+8rnb5OT9l7N/5Wbf09b8s7m1vOXmUUSSS+ajYwEZj
+tbKqnnMEAMqBKGzsK92GTbuwZp5vAwB82MM63MjbW3ceN2HjliVDiwCAUpp5KMD5ksqE4YZW5pgQ
+Qvc+4ciCiHmOIxwA8y2u6wO/ftoj/Yfdi3rbqyaONJLmflhW1ppar9/BMFSkLba++sXCV5NL5F3t
++01d9t0vL2+OIIQFALGFVbWSrzSoM3Z3n7Wrb+4TQ1/OeuOnV34oq63drXBxqVgfc6dJtdiWZxy9
+NkW+9dn2wLWJ0oICifpycv4j2JQuIPD3pzbhPCoP7wVvNkFibQfHgSPuWz6HN5tRn5KMygO7oM3N
+hOvoyWCkUpT+uhO18acBnr9jR2BDaiJq4k7Cbdyk3xUPdTsKNze0nTMfhopysOoGiCyVkLu4PrIY
+KU6nhTYnE5TnoPDyhaKN1yOxK/D34r4rWJOcJ12I67h3VnFtvptd+8G1I3tPTn8Uu5+uLe3t+O7m
+5CXnacdAh75T3jm8qGsiWQzYKMRUIiVGEDFTc2ssZR1gZkUS8HJzEO4VUH1r11woyxCOEYtYkULR
+HNck4kycBJQ3MnePsOSoiIrFzC03bEeep4TjOF6skjSKYHqwcVJ6Zzzo1QKzVaNab1sUt3HQVxdo
+OCgIAQWrrbNqlDsZnbTqO/Sb77MH87r92ukNq5qip6/G5b7+6uHvjRKVa5Ff5Jgd/uOePNDc3m3n
+ffN0z45vf7R7uc6lkyK8b7t41qCuUVWm6qpLKDHyfHM7HBHxUqmkeY6oQsLzFJTlzRIAJK/cJK2u
+UThTR4fzH7ZFw9Lrx5lEkhbj+7/pEaFLPz+61OjSSRwR1S7ebNRUqyqu6CvLQFgzd8u4WvY0r5hz
+NJtcqasFKXiQeW3JneGAn83s0jlm1aFlRpdO4og+AU39qEzRVZbyhDWTVvUxIxLxDQWpfnGE9+ZU
+bbRyibU5HM3VQOA4YexvfTJil2TVXp5+bF3CRwd/MDQq3YIy2kdN3BjxSf+81mzO//H4JUppEiGE
+UkrJXODzu8XYCQj8m9CXFKN8byzMdVUgDAPbbn1hGxpx9wB5SqGvqUblgd2oOr4fvFEPt3HT4DRo
+BHiWhTo5AbxB2/qpZjPqLl2A46ARkFo/mjp+jFQKizaej8TW7ehLimCsLAEjkcI2tAvEKiH31b+R
++wosEhPDo2m3U2bNkU8Qc+STP9zotaWhjst3pbx2zBTWxbLXvJikbx9vzp/kEFxhkiuZKqPW4H/u
+Apod3BoHVlZnkFiZbB3rHYHWFjTuCgVARQ+/XYW7hwATM4QChPJNrrHrWFFyx93+zmVflZRnZQoH
+vVunkV/WlxyPrb56tblJEJgZYtl4+zlfb9um6PH8x4VDCna8+Mn3Z6069Q/tcCXx0uOXD8R+WlTO
+WABYD7Tc3UNjo0WvfnF0RqHYz7X92LeePfx69wRCCLfjCfvH0mvlPcA9+H3eylbBqVS8RiTSSatu
+uW7EhOdvtpkuKcjMmVUsam8bMv7dZw++Gp5MCOG3TnR4/EqduMu9mrO3FTeKDXreLCe3PSISSkgr
+CqrlMS1+o6vDJQvXZj9ZLGlvFxz93rOHXg5LIoTwWyY5TL5SK+vKofWOEMoRKvNqDOo/bLlb9rqI
+sxd/fL7PIutcAKcAIKcq0OLJpStPH/z2gyNWZXBo66zqGn/u0syzW83fGMTWswAktWr3+rV9/X9B
+XAn86zHrdCg7sAeNWakAAImNPVwGj4DYovWcV7zRiIaUZJTs3orGtEuQObnCY/KTcOg7EGK5HJRS
+tHl8Fkq2i6FJuwTeZLxjh5+xogjG8tJHJrD+TDRXM2Cur4PUwQXKdh0F9+C/lL/8XS1aMcRu+a78
+lw+qg/pZ9nzmvWvfP/5rixWxYddMKpXVBWlltc+1H38KvfFy7aXEbiVSmVLVqXsyue6y+V9hYSLE
+ra2jloDoG8or3LxOQgoABWvibHR1Wi8euKkMwYNSjtFzUumNV4ZGOeVZWWtzGhuMkTNXnmIBlAIo
+XRbztOKpBSMCno6NvkPYSY9/33Xt8uWfrSgbGn74YmrRJ2u2Hn7MmVvhYy5jibEsiFIq4jlQCo6w
+kMgopQRKF7G+0WTPQsEpvQMaCSEcpTHyE7kIbNRzloRhHmgn6DYAA3oHNrq3oReM5srgie9e9Lvx
+N0NJjpOawrLpDcwVG7Rme5ZRsDaeHRsJITwtWqg4mccH6g2cxb1W7vv2tE8RSSpM509l9qWUNh2Z
+O8/CJGKd9JQy91yYpxyBiJFmX7+ei237iA16sz3LWLDWnv7N/TidywfqDbyF+C7j5lieUbUNyJKM
+/L9fogd4f+BpyFRn7123ZNLqFF9KKSnf/dXkRa+v/DBv6Fb7PYdOZn+xbu+mAUrtBnttnhPltb8v
+oY+AwL8Q9eUE1J45AsqaAFDYdu0DhWfbO46jlEJXmI+i2PXI+24FNKmJsPBtD+/Zz8N54DCIr7vk
+CCGw7hgCn2degfPgMRAp7qwNyGk1TUk7/+ZwJhN0+VngTUYo/QJgIbgH/7X8pYlGaVq09PWFcfP2
+pEuecQn1PNtXdd513rzfnpw79zkwlCPw6lS7MBnHxgTaHruYXf7YlaNfv9V95IxwV3M+/8WZtGF1
+9gOujn9s2OHcjXfaJiIJIQABEbUQJ4SCAcDgFp8ew1MCEDHD02aBSQgIAyICAMJTAgKGoYRQSknT
+yoOWUAICAkaOakY2dXRJ4NIPLpSlbR63csmFj8eNG1cxeUVSSFEF1xMqUc4Nu228bYu5zBppwuql
+L85b+q2jasS8Q11DkDM4139N6bkTb255bvKaIROmX7CvS5Fv/u5wpCR4WGoYcBWA8dZxtLWtL9Zf
+vWaTVbh8ad8REw972KBhy5nj3fIs/FilW8gFQgh3aoFfNZNZp845tm32tFcrSPjk5Qe9ffYfVp7M
+HJD0/siPBvQbcDk0cJNnXTXpouPFcr3OZAk07RYFwFCGaynsCGEY2lSangxfZfzpqeDNiZXZPTK3
+xXww8+mXdtuzReSD7SdHVhskrgRggJFGDx/XI5Zxae+df6//JwP69UvtNHCft7qGdNFTsUyvN1sA
+ACWUAUMY8S0rhMOmjr/YO2ndr/sv/Dyz76hU5WuLXsx+YvbR0Csl2kFmO6LhxUyrq4kdAxw1isvl
+peVp8WNenflS9WsHi3Z7DPHI8djw62HL31LfPx8z5JMB/fqldB64z6uhhnTVU7FMpzVa3nIdiOj1
+fhAGhDCE0TcayeSVCalfPNHho6+OJq04/f3Xrz3f5qU3OrKF2fVXNM+e+OCJz0ZGP35WaahlDl44
+P7jOJSzXS+WddtcLX0DgP4SppgaVR/fDXFsFgECktIZteLc74pdYbSPqEi6gfF8stLlZAOVh26UP
+PCZOg9LXv9UcWXJnZ7hHTwORSFFxcAc4va75OMpTsI2tuxD/TpiqKqEvLYZIbgGrwLDfla5C4J/B
+XyqwKn48LSmtaLCuamRTNRd2inIvicaieYcix9gEDbvqbjvxwuefJ+d/tWTaK1anM6dfTDgams2o
+qGenMYd7dxv90/fj7Ytbs81wJh0luMxTPjet2U3nyBMgjxKayPI3dx1SEDVA4nlCSgEAZrCU569S
+0GqtGizEIg2huMQRWnQzBsuKI8A1UEJVRGwi5CX9qQ/GrBAdzmg4lZ7YtTDPwbtH3+HnFOmHMi8D
+zo1GkREAwscPOt4778zXR1PjBly85OcXGY2jhBCOxkbH2rgWF+25UDL54vH0PlKFg9Gj87BjbUO7
+bX4GqH/2tvENWHr+WjE7/LmTyRWTziSe6pbOMlL3tkGF3ftEP28Y8NTpa+vnoM/TU9Mi83b9356z
+SVMuXHAIkoyyOPrDnOE7NeJ4uudc1oTkalUXmw4DLk8eLV984kJepIGl9ZRS8vUTPmWEIkFESPMu
+OAmhekqQBCD7xmszvhufpHs+7uUd8QXTDm+/NMrWp1NFaLfRv+oOntBkU+QB4MdEz91mkMay++Iz
+xyVXWUfYBg9MmjKKiT2cUNrbaGTVlFKyYpJ3CXg+keXQ/LhJen2sSfh01HLRicqyU5f2Ra5PtQvq
+1CMyKbiN6YdEPbyMlLbqFvZ+J60iPCdyRe7Ra88mJshCLAaTY4QQenndJ9v10lh277mrt/Zj28GE
+4l5GI69uuuaYaoCepxTVgIpSnmaDUIYVcwYAeH7ji0dqhi1Ztio57rGdP0dGrNySe1j39MA5x5PL
+JyafuNyHk1pyXp0Gnu3bc/KWX5b0ycRbD/AhEBD4N0Mp6pMuQpNx+fqvPOSubaBwvxnLxOl0aMy5
+hqpj+1GXEAdzQx2k9k5wHDACzsPGQe7gcM8mJDa2cB4xHvqyEtTFn7i18aYs7X9z9KXFMJQUQWJj
+C2VA+/91dwT+RP7y3UwxABNz17ZjKBDT7C68Xgv9Zupc3De5KdPKcQSIIa3bbXHs7cc9mC0KQghu
+LS+Pux8Tg1tfv2kTDAB6/fx7jvGW9ghiYihiWtq7W1sxN+edNv27ETtGaPN83Nl+a3PQss+gNAaE
+xDTbvb29G+c/UHu3vucEoE3plm+bz9Zobu82mw/Uj5tjvMf7e/u1cmP8Lcct8Pdl06afgnx9AxLb
+tw+UAQBDCOQKC4hbS1Ap8LswN9Tj6kdvQ5PeFI5IeR4W3gHwnv08ZPYO0BUVoOFyAuoSz8FUVQpQ
+CgufDnAdPRH23SIhukuMVmtUnjiKgrWfg9XUA4SAkcrQ9unFcOo/6M8a3h+GUoqSHZtQtH417LpH
+we/5xRBZ3OnuFHgwKKUw6PUws2ZQSlFfX4+GBjUuX7mCnJxcODk5okf37rCytkJxcVF9cVFJ8NSp
+U1tdpPkz+Mu/WWLuWcokpsVvpMXN64G0IN/KcbRJuLVml9zruAezRW7pY/OS9t2OiWmtzzcDnx8g
+Dr9FezF32rtbWzF3zPtNEdI8H3e239octOwzCGJaERg327tx/gO1d5f3POa+Aqa5vdtsPlA/bo7x
+Hu/v7deKEKwuIHA76vQU6HKvXn8eISAMA0NpAfLXfg5GJIaxtgasug6UNUNkYQm7Lr3gPGoSVP7t
+QFqPArgrSl9/SGztYVbXghARQAhE0vsl0Pnfwmo00GZnAQSwDgl/pIWuBf5+CI9uAgICAgJ/GJ7j
+UJ+cAM6ob/GgQ1kzdPnXWhRYlrt7wXnoY3DqNwgSa5vf1Z7U0akpfun6IxEjFkP0N093YKytQWN2
+JqS2jrD0b/e7ajEK/HMQBJaAgICAwB+GbaiHviALlGXvSPZJGBFAeYgsrWAT1gPOQ8dA1aHjA2V0
+vxtULAJlbnjqAbGNA8R/83IzxpICmKrLYBPWCzKnOwpUCPzLEASWgICAgMAfxtzQAFaruy0Z3/Xo
+CbEEFm3bwWXoGNh26QnJI8hVxfC0KZLyeoikxNbpb13Pj7IsNJnpAM9D1T4QEpXqf90lgT8ZQWAJ
+CAgICPxhxCoriFXWAM83eQMJA0ZhCbm7Fxx6DYB9zyjIHB0fXVJNeiNckgIMA+ugjpD8VTFNN7bI
+PARmjQaaaxkQ2zjAwredkFz0P4AgsAQEBAQE/jBSe3s4D30M4Cl4sxEWnm2hbBcMq5DOkLu4gfmz
+BAWlkNo4QNUhBORP3hHKGY1Qp6bA0rstpPZ3LWXbKsbyMhiKc6Fo4wML9zZ/Ug8F/k4IAktAQEBA
+4A9DCIFDZG8o/fxBWRYyR0cwCou77v/meAq9kUODhkWVxohKjQ61ahPUuqZCHSKGwMdZiY6e1nC0
+laLVHc08DxAGNuHdofRr96eN7Qa1F86h6th+eM969qEEFgWguXYVnE4Luas7pA6Of14nBf42CAJL
+QEBAQOCRQEQiKNzcW/0bzwNaA4vqBiPyynXILKtHQYUOFfVm1GsMMLIczCwFy1FQNCWgk0tE6N3R
+Hs+N9IeNpbSFPSpiILK2hW14T7gMf+xPz4iuLy1B5cGdkNo7QObs8lDn8nodGrOugIglsPTt8IeC
++wX+OfxPnMDRrtbhdiLMBvDUzX8Oc5z9nupOaVP5mqq4tapnoyN7OdlYTbN0aje134z3IvcmlP4p
+DnZKV0uiu3r18BnyysBhK6nsz2jjvwqlJ8SD2zj2cfCfPnLBymu/e24ppUx0e9dwJ6+x4yMX7X6k
+0aEFX4+w9XL1GGc9elUEAKyZ7hPg0jY4OmRRvMejbAcAZvo4+nfuOnmEY0yaUB9D4D9Bo45DWoEa
+v8SV4NPtV7FkQwqWbk/D1lNFOJdRg5xSNWo0JjTqORhZHjyloLRphavRwEJr4EFbyZ4oEknQJnom
+vOcuhKVPU3lUyvPgdDpQ9tGWq2UNBpQf2Q9DeQkc+g65o+zP/TDV1sJQWgSRhQUsPL0fad8E/r78
+5StYlFLJGC/7qRKl05z2rvZZIoawoDxhRXaMhU+bTQAu0pXdrKa/vuzFixXSx5z8OzdaQs+Xxv+i
+erpQF7s6gX4xL4Lo7tvQw1BXZ2EymZ9UN+i8gezLAKoelemjP8T4nC+T+DqPnZ74VFCb2kdl9/dy
+fsdS+7NXTaGsb4+cVycOyfvz069raAAAIABJREFUW7STEUKfoiD+YgvTWdxWY/EhEPHgJ4CQx+Rm
+URIAze0HXD70ieXZK9ouVdYBVW/NeTyjRRHxe0CkcKcE7wNkP6U0ce007z6E4nVeLH4ewCPJ+nuj
+pqWYGrsppdIZEpXLFQCNN2tdCgj8e+B5HtUNZlzKrcWla/VILWxAeb0BJjMHcpurjxCAYa6XpyBN
+worSpizdDlYyRAU7wUYpvaMNwhAo/fxbvKYrLEDN2dNw6j8YcpdHlwahMf0Kan87BFW7jrAKDH7o
+83VFhTBWVULu6gYLrzuLXgv8O3kggRW3e5Fqxc/Z1l7D5+pWzB5S98duCCdlDTKplThwxOng7kHP
+O5tzdRKWJTVQQO3iqSWEcB+O8O+deA0zjEG91vbo12m9TfFJ3njpwJwdOYeeXLVpYAqAfb+//Vaw
+NWjcvfzec2WtJPra4rr7n/DgpG35tndsvvfTkYHDnwHwPxdYeRtWeO3LcHqfG2D5FaU0/8+/uZsp
+QDgC/NFHyhuFxlizSNJqn0vWLbM9mmL7Zr73qONvzXk8C/esGnCLYZ6hoJQHpU3Z2RnwlFK+9efm
+h6d+3xO2C158aVjfqS9U1Z/ZZMtwOj7g3Ju+PSdM6z7x1XXFAM49inYEBP7XmFmKwkotzmXU4lRq
+BYqqddAZOfB8k8sPaIpHkksY2CilsLNSwNNRCl8XFRyVFjCaWWw9U4CcskY4WEsxJaoNegfZP9CG
+PbNGg5Idm0HNxodeYboXxtoalO3fBWo2wWnQSIgUioc6n7IsdHlZ4HSNsPAKEIo7/4e4r4vw1Pt9
+2n68fMey1JQre/d//9W3g5bs7faHWszaLDcR3kbm6FLg8uzCoi+//LL0s2+/LVn37Wclu2Jm1dOE
+uZIyTV1UjZ13hfukT7f/uOS5os++3VYSPS5yg6uuzlgWd7o7pfSOj1vNym5WYd6OQ6NeXNP58xeG
+hgTaKaItrdye6DvlhS7XKJWdWDnFo29b21FWUssp7ftMGLz0dNmtUYbilMxMz9yaBh+NaxTJWNrV
+3t/LfcSYpfsDl88fE+xnp5hoZes9edCzMZ1jKZUCQFpMkF0nT+eR3k981RnX+0NpjDg6wqWrVdjj
+Q5999lWX3jaiMZsu1wwsLi9s+8trsye4d5vYb2Yebf7kX/ltme20nl79HSytHncK6D122ieH7vto
+cyL2WZfRIa5DrSytnvAKHz1i7uqE5se0pzq6dnBT+E4euPjn5sqqPzzbpY2jte+k0H6LO03zVvZd
+fqp+fHZZaduUA5sHO/h2HTdqk9qhqe9UvOrlwe3DXG0eU1i5PR4evbjXJ4fKLQEgY2lX+w435mNh
+dLCfnSLayrbN5IFPvxd6Yz5uQGNjpG9Oi4poY62YpHQJmfD2F4nBUrFYzN9STYdSSmI/n+Y5wN9h
+pKWlwxT/vlMHPfdzRouIUUpjRSvmDw/2c1ROUNp5T5r17jcRMpmF7ObWbLSwN8/HImLR/vrH04or
+/bOTj/ey8wqeFPXRZQ8AoGkx0o9n9Q4LtFNEy+X2UzsMeHJgTGzRAyfMofSEeHK4czc7x7CJo1fF
+uQEATUiQxEztHeZtrZgkl9tO7TzyqajP8mirKanL0zIUV09s6Vgcf+z1TKp4OiPzQlhjatwn5xJz
+5qSeyXBp7XoWEPgnwfNATmkjNh4vwFsbUvH9kRxkFmugNTRX1AIhgKeDJfqHuOCpoT54c1IH/N+T
+wXg9OhCT+3giqpM9KCiq1GZ4OSnxzAg/jO7uAYXs/usAlONQffIQNGmJsOveBxIb20czLrMZVUd+
+RUPyedhFDoSqfdBD22B1WugKckB5DpY+fiBESM/wX+G+V+7ZU+ljT1+qfbLeyCtIbmmnastwzY8n
+aPKsfsTwexqs2BOvElFip6KaatefFwyb9dQspdQtvMI1IOJ8zNTuapyIlxo05jYisbx64CCVOu76
+edoGcY0rY2woq8tzBSAHoL/VLiWMG0/ZmKv7v2N+cbEqdeoQZoHSAs/0M6eNs/uO2EO1Rb6cSwe3
+dpY1ivL8K07fv/r67tfP0/eXdSM1qIcFCJ4DT93rgIsMMfmANSxP3rG6olxcZ3IJ6CSXlhW1ST1y
+qOGzJ5VvAjgETuwFgg9EIL/GAFdimh7MpITwMwglEWb7TvM7dg2PPJORF2hUN1rayWWR/iH+tU5K
+JAAwxC2JaLdg7jcv66U2wYGd3NSGukqnU+s/K/WZG7ssd83EONwGpZTseK5jxOIl+1+RWDq7h3SS
+6ww1V533f/dxWuDC4x+mf9Y/LayDtdO5SvWSKycvxcWk0VeeLn6VvrRow2Ioffo7B4e80s4uxO9a
+elm3xvwySynhgwOC2ld52UuSaEJ4w+IRPpMPXRM9aePtz3c28RJN8j7VZx9jT8g6+jEpDGvLs/pl
+STu/rSoX1Rvd2nWWSUsLPdOOHmhYMdviLQAHAICeiBG/+8naJ7aniF8SOQSJg9zsSg5v3ciX15l8
+TQ6k5Po4mNVTg/qtuaBfqLD2VHW2k7C6souOu1Z/ci78nYQPE9+NKKSUMqsmeA3/KRFLTJYBtu3d
+7AqvHtnOVZbp3PQWTW/+bRCfsNB2mTk1vbKy8qzFSrNvgL9/lH9bq9Qth6bVzY7+asFlxnmkU4cI
+jRVrFmvLL9p/t+rd+MiPLn1wZnFY6f2u2U8nPjsktUCxVOXe/rK1s208pWnShREDp59UWz5l5xvC
+e1A1W5t62v7zqTOODVxd+unReW6Ft57ffnFSKaU05pvXZg5as3H/Co1ZKuc7jrnw4pw5n74y2KtA
+cBEK/JOpVZtwOKkcR5IqkF2madrYd6OkOgGkEhE6eKrQw98eIW1t4eVkCZVlyyBvjY7F/osV2H62
+AO3dlZjery1CfKwgEj3Ys4c6Iw3lB3ZB7ukDq05hj2xsmsx0VB77FRaebeHYb8hDr14BgKmhAbri
+QoiVyqZYMeFx6j/DPQUWpZR5JczKieeppOl3lhhqax01ilopgN8lsDJy6ixFMFnnnd8xdGW8PpQD
+lTCiI0qTTZ8Lk1YmvF2tn1JpNFBLRkJMng43C+rKbCx4mcKsF5NGRSIgxe0Ci2MoKE/qjQ4ig0vg
+ig7+tjk9Ujd5nLmU+XniFf0Cv+4DPnVwUy3pLc5hq9JOPfVLfvK0nZuOHcV1dyOloDwI12SLUMqZ
+xXUNJkuXrj0/9rDlUwfmbwo4kJz2WWFBl6nhpfQ3rAmitKlgcYubIyWEB8/zZyz7V6QdmvLOsgGu
+lavNHvP6PrNs6XujA864ORIdTVhsPX7m+ucz9B3DvTp2emloqG266dTqNnHZFz9OT7ZfMO0MzVof
+SSpvtVu0Zbbr10fqXs9FN6vOYe0W9O9kVazb9X/BR3JOf1SW5j53bil9/RlXxBVEOazelH34hZ0r
+N46Vl23BmWrVEJs+k1Z+8MUTR8LxxDHP6R2vrmyw/5LpMX7djnVL1toB2p/nyyJ/vSJ+rcqp76+R
+I7xXeTdkm4uO75i479ru+UiOvAJnSQHPseL6eqOlS5ceH7vZ0ZS+Dpv8jySlfVaQEzZ1Sjw9s7E7
+UZ88ur/zliT21Sqr3ind+4Z86GNTWyO6tLXHcanx/XKAMSiU9PzKCb4/x6nfKrToXdG3u/cr4W6o
+qf/1m94Hi468W5/uPy2a0uW5K/v6/HxRv6hQHNkY3CtiQQcPXZH80vbAi3Lth8UcvSMFNCGEp5Ru
+7/Ta0NRPa2t/KvbtfeKro6uXhQI1Fz7KCy4U2YZVuI+LHT+xx+aobjbcrmfGDvs17/S7xoygcwDW
+33GRck1FnpUyMbNygt/gNce1yxtcIi8Nmf/8m99PDCp+/ZOIjmeqTPNKvCelD+ri8PYw2SXToYPn
+Rp3LTnux5tctZwEU3m4yd9tERfzBxFGN9j3PPxmcd/Vkatzg/XGRnq8O8f4L4uAEBB49LMfjUk4t
+tsWVIjmnFjojBxFz0w2oUogR7GWDwZ1dEeKngr1KBua2gs6UArnlGmw+VYjMYh0GhTljTFc3ONs+
+uJAxlJehdOcmGCvL4Dz0MUgf0eqVqaYKlYd2gVU3wGXkRCh9/e9/Umv9KyqAua4KMic3yBydH0nf
+BP4Z3FNgEUL4ddP8TjqVk8f01YYAiY1HhVfnkF+Du9n97iBzy+BR1U6lOT90sQnTtGtjedxNF8/n
+Xs6MPpQc99rpLc759csXf86vfYFAdKcviAGllOGJptVnACMYkZxzCut3xnLrq2fXEcJSurJ6Rs8P
+4i5U+to3ek/YdfnbfrnHAPywsN+xQzlVM6qvZrrdrZ9SicJsFzHmQPyGeUcIIZTWLGi8ELUpKUOj
+9dNsgfyeNdsZoMHA84QQ/Ue9lDoR48iZxJYNbm5uOgDYuHRDh+Ia4wCXnt0OzX28TyVXWWzjPidG
+V/71hxeTCirH//bjAR8ALQTWnp93dytpkIa3mzD0m2l9rLX6er1N5NMxVenLl6deLS7tHb/igjP5
+tFteTuzcdZnv7gu5uHfZW6uphBpd+517YcbMjRGEmAFg/QiVRsTYsmYq1toBGmCN+Mq5K+NqmPZk
+zFMz43pIM2VqFy/ZYBdZ2qnP92hyL14eQB9TrZdK5Ga7LqMPnt/47GFCCKVVizSXBvxwKV2ra3f2
+WKUCgDruZEa/Ruomi3jqhTX7X+2WAgCUxh4a6vXc6BJQH09PT5z67viAMoONT7fpEzaN9FFzOk5s
+3WPeK4UJH67KLcjJ72/eha/27kvp1mBQerabPn3xb58+duE3AJTS6kkdXI7n6MmY1pQ9IcS4J9pZ
+LWYYlqUifSjQQAjhY2OjU597aeDcM8fPtvtq4ad9P+RlymBHeOl1pRKGNXnHUMrgu9EtjYkAyhpE
+rimrhnx/vLZ3reuIK6PfWfLGtxPbNa3CcTLKADwxVFs08p6Ovs/8kvtij30beheUJkjsvatm7b4z
+cF1dYrYtg3e93+SFa991WpH53NpySUJGgYcQ5C7wT6RRx+FwUhm2nC5EWW3TJ1LEEFAAMqkIwV5W
+GB7mgW4dbKCykLQaQ2VmKeIzarH7QjEUYgbPj/RFqJ8NJOIHd6GxGjXKdm+BOuUiLLx8YBMa8UgW
+iCjHoerUUdTGn4KqYxgcekX9rszrlGWhzkgFp9VA6R8IkYXlI+idwD+F+7oIA1949XhU9VfP/HK2
+KMAmeGjJjLFjTvYj5HcHLHd97utyAF8Ch3Ds+mvXYrr9oCvJiDremNd1c+UMJ4mIGnnCMDW3Cqk6
+gOMYMXgJ64qbK1u3w4gYPgrASQCACzURkUkkkxrFVnbm5oM4g1kGypvvkVqYg5jKlJbG5pufnSfH
+Q2RmzZxUxTU+8O5LyjSNgTJs81jSck126nqdY/m5zcM+uhwbDnBgAGKqL3XWMk5yu9ryO6IgM7JZ
+F63aaFez77Mp7x/mRwKACGamsabWQ2+p0VsbyxQA4DtxTcOaOT3XZG87NzDLIpL0GjJk9UtDrZuD
+64lITACQ5vDvfKmooMjcRqsrcD/02dwlJ6jJBDAQcY2yyjpdW9a6JsMksxVzEFOpwvLmDkAHR54H
+Y2ZZTio1G0WUUjLdXeXBmd11XdtZ5x1uPrAdxfVgc0c7kLM5RjddQ639pQ1LnrkqMk8HGIh5k7i+
+WuNptG8o8rfRyjOyWRejyR3etuKs87e+JxT8vaJdGUnz9dJ8UKjSxfKld79/vkTiOcgjuEexvbq6
+EqYaJ5Op1kLGkzu3JgFgRFJqri+xjTuwbYaOZaT2Pp32LIgOqPr2+t8DF7+ZHbx3/kcSTcKcrEOp
+Xz6++9syKBzSOg1//MDbzw0ub00whS7clU8pfQeAmZAonlL6MQCjIK4E/llQVNaZsC2uFPsTi6HW
+mVt8JB2sZBjd1QODwhzhbm9xz+B0o5FDfSOL4eGu6OxjA1uVpDkQ/kHgDAZUHDmAqhMHwciVcB4y
+Dgr3R5NZRZORgoqDuyCysoPT8PGQ2j1c1vYbsDodGrNSQUQiWHq3hUgmZAH6L3FfoRARMc8M4DiA
+43XHv8bi41//oQZnju1sk6DrqeKf+qoifSIxAYBfX4XJ7pikjG/ggqt1UqKwpHWc0dTmai6ab4Aa
+hhU36CVKs8pB0+4ht/pTAFT0kIWjcA8VB4Ayrd0YrSi5NZobQGv7CAjHUrHEzmzhFLCpJPfEQb1a
+f6NvHGw5A1VI828/R0w4XiJ10oncAr7OTtyTBHOziGAhJXpWbMoDmty67wxrF6jhFHKZvgrVeSWB
+lNJz90pZIBJJIFV4ZsudrGKyzpyoud5pComFGVpRtVhT8kDr2hYKkYlhOYoW3yFmCnJzTiQEVCxz
+rbVw8/00+8y+HDSJIQqAhZ258eMoy+pX5MQsFnE8Wi4TUoLb5/auNB93Yu32QRk1kmmSvmM+GzI8
+fOvS6QMaLr3SodOC7Y0dqnm+VYHNgAPLKcRSr16HRiiTdHGXN0yaNdcymVK6ixBC1yQ68Ut3xh/e
+/f6MC1/sv+zZ2bdtcE119bjz2zaNfjybewN32eVKCDHe8vOjTTUiIPAXUFCpxfoTRTiVUgWDkW0W
+UJQC3s4WmBbljb4hTpBJ77/aY6EQYWiEE8Ri8rBl/UBZFtVxp1C2dys4ox4u/UfAvmefR1Lfz1hd
+hZJfNsBUWwm3sVNh+wdiugzlpTCWF0FkaQ2pi8dD1y8U+Gfzl29nkFc3jFJnp+7Byc1db7yWmGVn
+W1iM9lLGsmTotA4VCmvrJNQ1+CV+vb259gFbndKxWCy3lrbrnEFIkzD7X0FNhLi62xgoiLGhut7+
+5Mnr87jpmNys1zu0VAE8KHhCRLLmuY4Mty1WWRuKidLf5b1tuhQ0bdM/t3ju3KuvLRrb+N2GKXfc
+fLuGWuUoLPUNIofu9idMNOHGOQsWzMpf/N5o9ZAV0UYA+GVeUJcDSZoXLUMn7hjjqd9WeeaX+WGv
+Hmve+ckCoJQnRHr9m8i7wBTgL70skbJKu7CXTQDOAzhHKT3/zPwZdYu3vVkvMht4MHf/ZrAAQAih
+ESGKFMKUWOw7cK1T8x+L98k5QpUsgNQs8J2DVRkyud4s8RyloJSevz6O+Pnznyx94/0nGgghbGQ3
+q6siaanpUkp515s77LZJqIi3MlJK7rUBm1KeEIYR4foqVmV5Y1sjUTKefcZkLJsxsIYQwp4r1dnV
+63iV6C6rRyzHEYWja6Xz8Fd+/mBGu9eDREVZRcc2vz7w/b0RAIDNH3WbP2fOhyfaz3dIzSk9u/vI
+mdUT23CvezdmK0Wa3EhKhWS1Av8+Sqr0WH0wF0culcFgaimuPBwUmDvEFwNCnR9IXAFNua8kkt8h
+rihF7aWLKP1lHUw1FVB1CIXzsLEPlf6A8jw4vQ6Ub/ncaVarUbprGxpSkmDVMQJOg0b8oVUnfVEh
+OJ0OMgdnyIX4q/8cf3mi0WEBqgvp+Tm1Wb+uerP/5Ge3tkOO6aVPz/TN0bi2sY/o991wQqrWzQ45
+dS6zaErWvi8X95u4wMvVlMl/duTC5BqbyPJB4wYd2rrrrubv+KgS2pS/rpVDCShPWhzXdCwIT5vP
+uTVGhgIEBMTBXEVUoyNLvZdnpBelxPbXfZiwYMqUyRV93zvbpbDM2J/3ZXJvhGg6O1nWmDPqFPE/
+ff3485+uFdmNfzJhuPeqrMP9P9lYmHZo/hcLhy8bO+vZc84V8fLjh44PFHcaXuUJvAugRT6uJ+aM
+vHi4cP/O/fGbZzwVflH++Jynr8ivnbY9vTd+qIPG9+K8ufi08qsou9lfXX4+17anvsvkt1e+1HCF
+K/o+LSTj5E8vT/ml5sWN4+2LfdxtNEhWawsS4kbNfYMrdh/8UvyQAUe3niov6JMa+967EUNmtQ/z
+0FWM7eTpn23yiurkn/YxJJL61iabUhCAEl7ctAIX1S/0eGxG0viEvV+8MG7mG/Kevkz51Mk/9cms
+1UUanUieXFdIxs0efPxwyfGTp459s7BDrxNOM+fOvma6ctL11P5LQ7ylXfZQSr/DoacubEja99uJ
+39Y/1X9SpmnFx+/lzB7wTujlcs0wvfLuua38PGwMYnlFbUVuWt9Jz73z2Jtndafb/RyRpMys4JK/
+mv/igKEj/E2VuTZfn64dXqym7q6UyGIAMgsAmKax3BgXwwC8XM61X3CkdN3c7h9+vifry8uxW96Y
+vLnqOZdTfbUl58u75mZp/fqPm7U9wJmo9x3c1atM6gm5vV8GgP/pA4CAwKOmTm3G5lOlOJtWA0pb
+fqGqLKSIjvRCj0CHB97190fQ5lxD2Y4NMJQWQGrnCPfxU6Hw8Lz/ibfQmHMNNXHHYd+9N1QdOgIA
+TDotKg7tQ9WxvZBYWcNl+HjIH7Ikzq1QAI3ZGeAMOsidnSG1fTTB9wL/HP5ygTV67eWsyzN6vmKX
+pZ6THb9vbj4nElm6BJe36dH7zaHL5+5N2TYP075/LD1/zrnF8uTKZ7LPH3jmGpHxdl4Dr/r5Dv9m
+y3Sfa1tn3GmXZ6QsgEqANKQ1u4jqKCGkgQLlPEuaY7Aoz5gIUAaCxqaTwQO0hiEQS+rBA8REgAqA
+aG7GyGgpQGoBVDASSonjx5oNc3t8xiSWkOSUquklOfaGDkF9khzp6YMNDLExm1gOAMIG9Dwemp+8
+KyHlUP8Lbi7q7uORSsjz9VVrI78X766rjM/LfSL+UHqkXGZptvGKuGxh57nRAVDfPj4yaE3D1U/D
+P1Ec0RclFKWPPbY3cZiVlb3ByjvkrEjpuCMa4BdtLxqcVOwQ6Dx06P8deKZtFpCIYXHtvyqKP7vo
+8qZvB1NKf8bJWVkhuRfXViRenPvbGcXk7lGy7N4xcZkbFoS+sDupcfaV7N+e2HPZLLN38a2x8O24
+S6fwSEAd6wnaNB83e2RFAVIHkAozK+UAwP/5A8Ub5ocvkSVVP592Ysv8zERntV+73ume+UfP6kUg
+BlMtdZmyvvLsm53esjlrmp5YmjTk4B79BCs7V43SJ+i4SGpz6Lors/bQK10/ZBI1C9IS9s76+opK
+5x8YntXGTh+n4Ygnb2Ja9d62++j9isDcpd9di8t8JeEspol6PZn/wfMTf0ss3f3OyfTU2ZlJ4gUi
+t+CSTr2777YpSLlaI7fVR6dDJAJnBkU5CNMAABRESynKCJpSkUxbfe5iZa33sq/OnF109Mfvp3xy
+KO3LIRVhLyVWVMzKSro2L9tMGHungCqPDoPeM4aM2C3EVQn8m2A5iiPJ5Th6pQQcT+9YcQpwVyIq
+2B7iBxBXZpZHo94MS7kEUsnDO1D0JcUoif0JjVmpEFko4TIyGjadQh9qFUybn4fCDWuhSb0I7bV0
+uI59HCKpFBUnj6D+4m9NLseR0bDp/MfSPbBqNfTFuSAiMeRtfCFSCAHu/zX+coF1/eaTtHLBsIXJ
+6w8o8qk1CYkabxr689v6mOtxQoTE8JTSuLqJPROSspNk9fBGj3GTjLErog13u3k51Z7NU0gdplZS
+wm4jTekWCJlnnhnl/YUlx32dnZ/R7HYrcpAkE5NhiBXljZUAYBej0ancFmstCHN1EbQB2/xSqb7o
+MdZsvhkYj3f0Uuma9ywaGVGqua0WAKauOZfy48yoZy7nnJSXGMUYFDHb4NFYjDyzTFIg9dICQKdn
+dlb+ODNq0W8JyfK8KoM53hs6AHCcfUZDaczm6UO+2XUmpUIKm87Ub+R0ffKq4cZTP73S6ty1eyWx
+OjY2+puamJM/JZRXSSstHLnAqBH6wzETTeTLeYju4bGtUe2wpwd1bhaGsdHRO0jN0cO1pgIzAJ70
++8mQsHrumqQL2zbklWqotkHaNJZVSemxMdGvJ36xTVFeZyVifQeY53dZpY2ZRfidsdEaqigcb+J4
+8835n6uXSN9936JRLEqHt/ZGH6esSkjNfrffgrjPk+X1DTycw4cYupET5JrIUvT5zM5azAJ6fni5
+5ERM1CdZm1O/vFJeLTEpg1i3XtN0u2L6NW+eGPLphbz9K4e9/uzbBxT51JM4BocZ2rFxtFTGSY7a
+ndGiFQiZyMXGRu84m1J8ML1Aw5Rl5WnJEzEsjYnZOlHz1d74k3qJo73SvGfzD7pZs2ZJr9pak22B
+MMemWeYoTMbHeJmJJYTQ2OjAHUaJYb+8uikVCCGEp7HRu79NPna02mTkPQDD2zuTzv0YE5X07ucp
+8sJ6a6L072K+tPE9Pbl+7QkI/FvILW/E3oulaNSbW40UCHKzhZVlq/tFmtEbOVwr0eBsRi0MZhbR
+kW3g7vhwOaVMtTUo3voTai+eASiFTUQvOA0cDiJ+8NuYsaYGxVt+hvpKPMDzUKdfRmNOJggh4IwG
+gOdgHdYLToNHgZHee0z3bau8HKaaajByC8hdPUBEQoLR/xpCxJ2AgMB/gk2bfgry9Q1IbN8+UAYA
+DCGQKywgfogb9H8NSoGdZ0qxcl8WeL517/zwcDcsGO0HS8Wd86jVs0jOacDZjGok5dXC3kqOaVFt
+ER5g3Zwz60FgDQYUb12Piv3bwOu1sPQLhM9zix4qNxVvNKJo6zqU7dkEyppx++2P8jwUrm3Q9pmX
+YdO5ywPbvRtVJ48i95uPIbGygf8r70HVrv0ftinQEkopDHo9zKwZlFLU19ejoUGNy1euICcnF05O
+jujRvTusrK1QXFxUX1xUEjx16tRHUl/2QRC+WQQEBAQEWsXIcsitVIPj7p4hJS6jEjZKMSI7OMPJ
+VgKjmaKixoi8Kg0uZtchq0gDA8tiYGcnTO7tCQ9Hy4dy6XEmEyoO7EXloZ3g9VrInN3gHj0dSh+/
+hxpLXXIiqo7/Ct5kunO3IaUQK63hOuZxWHcMfSi7d8NQXgROq4bSrz1kzkKA+38RQWAJCAgICLQK
+QwjkUgYUFOQuDo8GHYutvxVhf2IF5DIxOI6HVm+GieXAU4IAd0tMjPRHZJA9FDJRqzbuBs9yqD59
+DGW7NoBtrIfYQgXHwWNh26XHQ6U80BYWoGzXZphqq1o9jUjlcOw/Eg59BjyUy/FucHo9jJUVACOG
+hV8QxCqrP2xT4J+HILD796SrAAAgAElEQVQEBAQEBFpFKmbQ1c8eR5MqUaM2tS5OAHA8RX2jEWg0
+4saWa2dbGfoFu2JwmCN8XVV46BRVlEKdcglluzbBVFsFkdwCDv1HwmXIKDAPIYI4gwGVh/dCk5EM
+kcISUlsHGCqKm/yflIKIRLDr1gduYyY8VKqHe7eph7m+DmKlEjYhncGIHk5YCvw7EASWgICAgMBd
+CfGxwYRId2w9XYx6nblJlLSitJqKswJKuQgRvg4Y0cUFnX1toJD/PnHRmH0Nxds3Ql+cDyKWwLZ7
+P7g/9jgkVg+3GqRJT0VN3DEwEimcB4+GTdfeqDiwEw3J8QAI7LpHwSN6KmSOTr+rn61BGAaMwgI2
+od2hCujwyOwK/LMQBJaAgICAwF2RS0UYH9kG3g7WOJhUitSCBtRqjS3qKlAKyKQMfF2tMCzcCVHB
+zrC2bL0G4YOgKy5C4aa10KQnAYTAqmNokwhycHgoO6baGpQf3AlzXRWsQ3vCZcR4yF1cIXd2gSa9
+F8QWFlC273hX0UYpwHEUIhEeqoyPSKVCm6lPQSSV/2H3oNlM0WhkYTCzkEtEUCkkD5QSQ+B/jyCw
+BAQEBATuiUImRq9gO9ipJPj2YA5qG024obAIAfxcVegd5Ih+IY7wcn6wIHaOp1A3cuApha1KDOb6
+rkJDTQ2Kt2+E+soFgDPD0rcDPJ+YAwtPr7vaYjkKlqVgGNzMr0WB+ksXoE5NgszZHa6jJ0Hu4goA
+kDs5Q+5098BznqMorTUgpaAe1Q0sBnRyhJvDvWpItIRhRLBwdb/ZP5aHzsCjQceiVquHWmeGycwB
+IGjrrEJbl5ZzRimFWsvhSn49UvLUKK7VokFnhLWlDIOCXdEr2B4SsSCy/u4IAktAQEBA4J6YWQ4p
+uRpsP1uIjOJ68JQHIQSO1jJEBTljcJgT2rooH6hMDstRFFZocTq9Eil5mqYyO0N9YKkQg9VqULJ3
+O0rP/YY8awmqpOGQOveCZ60SURoz7FQ3C5RSCqi1JiTnqHGloBZVahYuNjKM6e4Odwc5DFUVqDpx
+GLxBB/uh42DdMfgBxsmjpMqAk6kVuJhdD53RjN4dnKGQMuB52iwCH2zOeFTVGXC5sB7ZpY0oqNCj
+VmOCxtAkriRiEXzdlZgUKQOlTQKL4ymq602Iz6jFbxmVyCrRoNHAQiETw8FKCks5B57wQn6lfwiC
+wBIQEBAQuCt1GjMOJ5XhlzPFKKszgFLARilFmJ89xnRzRkdP2wcSVpQCFXVGHLxUiiPJVSir0YLj
+gQ6enpDLRGBNJqSfTcSeLDUu285Ag5UcLJGD1kshPZgPjZ7D9AFtQQhBncaMhKt1OJhUhvSiBuiN
+HMwcD2cbOSL8beHuIEPdxXPQ5mVC2T4ETgOH3zNxqMnMo6BCi1Mp1TiVVgmtkUVnXzuM7uqNNnaW
+SMnXQC4WIbyd9X3LAVEKFFXpcORSOY5drkCVxgizmcLIcpBLRfCwt0CYrx16BDigg5cKjtZSgFAU
+VulxLrMap1KqkFXcCIYBOnjaoHegPUK8beBkK4VExEAmEQkuwn8IgsASEBAQELgDSimulmiw5WQx
+zl2tgtbAQiYRIczXDkPCnNGjvX2ryUVbg+cpLmbVYttvJUjOr4XRxAOgCGhjjUGdXaEzsjgYn4d9
+J0zIN4eBWt1w81FQygNmApan4DmK1MJ6/BJXigvXqqE1cABp2slICGCrlMPVxgLm2lpUHd8PRiqH
+y4jxULi63WWMQEGFFseSK3H6/9m77/A4qnvh498zM7uzVV1a9WJLsiz3DhiDbboJEIpJgxBCyg03
+5CYh5U27cfqbhJQ3PSS5yU0IEJMQgym2wWAbbNwrcpPVe91dbS8z5/1jbdnGpuTGoVzm8zx+Hms0
+Z+bMzGr3t7/Tmgbp98eZU5vPFXN8zKzOoXskym/XtnKgO8jtl9a8anA1Fkmz8cAwj27v4mh3KLNw
+qsw0W86vKWDRtHxm1uRQVeTGpmWucXA0yZYjgzyxq5/mnjDSNJlalcPls4u5cEoBed5/bkZ5yxvH
+CrAsFovFchrTlOw+NsJv17XxYvsYQhEUZbt45/wyLp9TiC/P+Zo7sI9F0jyxs5eHt3TROxLPNLMJ
+sKkaV8zyoQj45ePNrN83RDilIZAgzdOW5XE7NCrzvNy/sYcndvXQPRRBCHFaHeyayqJp+ZQU6AS2
+bCXe00He+YvJmT77jDmzTCkZ9CdZt6ePDfsH6RqO0lCexbsWVbGgIQ+7Bo9u7+Hx7f10D0e5dJaP
++fWvvFhzz3CE+zd0Za4jnkQRAkVAlS+LG88v5bzJ+RTl6ONViSdMnj84zGPbejnUHSSSSCMQFOY4
+WTa7lPmTcrCpEImnxzvYKwJUVaCpitVM+BZgBVgWi8ViGWcYkg37B/n90210DEZACGp8bj5yRS0L
+JuVhs722j3bTlBzrCbPyuV42HRwgmkiN92ESwMyaHFw2O99+6AiHOgOkTbApJr5cF6YJQ2MJTFNm
+slOKwsNbuzjaG8bjVFnQkE9LX5jhYGZuLgnUlrlZMrUIxUgxum0jttx8ii6/Fs3rPa1eI6EkWw+N
+8PjOPg51Bcn16Lxv8QSunltEQbaD9oEI965tYfvRUeJJg5JcJ9fMLcfrtJ1xjSe0D4T5xWPH2N48
+imFIFCHQVMHCxnxuv3Qi1T73afOASQnbDwf4/dPtdI+EMU0QIrODP5zkV+ta+O3TmQDSNE0cug2H
+rpHjUigrcDKzKpf5DXlkuV6+TpY3nhVgWSwWiwXINAtuenGQ365rpXskhgQKsx188NKJLJyS/9qz
+VuE0G18cZtXWTvyRJIKTc2dJwGlXEarJfz/bQt9oHCEEucoIS8oFV7xjNi8cDvDAc50YxwOsYDhB
+MJxgcmUu71tcjmnADx85PH4+TVW4sLGQ8iIXkebDRDtayTtvMZ7a+vF9YgmT3cdGeXRHD7uPBTEM
+ybzafG5aWMacujxUVXC0K8yv1hxj97FRDBNURXBBQwGTq15+AtKe4Qi/frKFbUdHkTIznYOUMHti
+Hv92VS1lBa4zyggBdeUu3ru4jOGxJLGkJHV8qXsBKMenDkunJaOBOM19YVp7g5gSdjX7eXJHP8sv
+LOf2S2rQ/8HZ8S2vHyvAslgsFgsA+9r8/P7pNrqHYwgBNk1h2Vzfaw6upISO/jAPv9DDsweGmVuX
+zcL8Ah7d3ks0cbK/VDJtsq8lSCJlogkTn9rLlTmj3HjZpQzpGjuOjZJImZwYtCcEzKnN447LJjKx
+1M0vH2/GH0plsldSUpBlZ2Z1DqqA8NGDCM1OweLLUWw2pITekRiP7ejj6T0D9I5G8bo0ls0p4z0X
+VVCcrwMwEkxw/8Z2drf4MWXmnA5dY3pVHg7b2YOYSMzgb8/3svXwaKbM8XuQ47Vx9YKSswZXJ5Tk
+O7g6v4xMyCk4dS3tE9ku05TEEyaHu0L85qljNHWMARBPGmw5NMJls4uZWHxuZp+3nHtWgGWxWCwW
+Bv1JHni2m9a+CIoikEBRrptLZ5S8pjmXxiJJXjjo5/7nugjHU1w1z8c75pTw9y29jIZOX2bHNCUJ
+UyIUkwpjH1fbjnDp4tsxSuu47/FmDnePjQdXioB59fn8+7JaqkvcbD/sZ/Oh0fHjmRIml2VT5fNi
+hEJEWo5SsGgp7vIKook0u48GWbm5k6bOIMmUidelccN5Fdy8qIKc49M+SCl5du8wzx8cxjTl8W2Q
+5dQozrdztg5PqZRk3e4B1uwZIG2Y4xk6U0ry3Tr1xa91gtHj/avOMhBTUQQup8qsuhxmtGRzqCuU
+aTYVmSBrLJJ6jeewvBGsAMtisVje5lJpk7W7e9nd5j9txnKvU6U4T3/Vsoe6Q6ze2stzTYMU5Ti4
+49IaLppawNYjwzx3aPB409np5RRhMj11hEXp7Sy65D1kTZ/NX7YMsGHfEPL4LPGKIlhQn2lqqy5x
+E46mWbe3n6FgDMjkfhx2lUnlXrKcKjKpUbT0SvTSCtqHkqzf18eGphE6B8KYUqIqgqtml/GuiyrJ
+9pz8+BsOJll/oJ9Eyhyv54kgJhRLn3HNY5E0z+4f5M8b2wjFkqfdMwGYJqTPLJa5XykTRRGvOiLx
+VKY0CUbSSHky+Mv3OPFlvXyGzPLGe1MGWFIiltXV2gezl5q7dt37D4foUiLq6mrt2Us/a+6696P/
+60J8uQLlsy2XO/Fd4G6qnB988hPLEm90nSwWy1tX52CUNXsGiCeM0wIhw5TEkibOs/TzMU3JwGiC
+dXsHWLe3j6FgivNqi1i+qITGqmw6B2L8dUsvA/7E6bOUI9CMNLNGX+Tq1CYmXX4lvosv49BQnDW7
+e0kbmQyNEDBnYi4funwiNSVuADqGoxzqGsMwM5ktZGbtw0qfA6GAcDihdhrr9g+w/egADl1iGMZ4
+1qcg285Vc3zjwVXaMEkkTfa3Begejp5xjWPRFE/u7MNp0/Dl2kkZJkf6xthx2M/+jjGGgskzkltC
+CIZDCfa0jlKUW4TNpmCYklAkzd4OP4c6xphXV8D8SXmveQHszv44R7rCx/ukCQqynVwxpwRfnjWF
+w5vZawqwdn4E23dbl5c8zZyg/+n/EzzbPv93+Zzsnx20F1bcsbLnhU9XxP6ZSoV/Nb1QetWvx3z5
+e6SUvxVCGP/QAXZ9JD/LfPibibD/0Eopf3bzP1r+FUi5QvnDqouzQlMXxz5RJxJy5XL1ll8cKdmX
+tSR14JEfDwoh5Ksf5Z85/0r1R+/6zLJnX9h7V5c2IHOuWfD/gCfOzbGl+OkHLyr4yUPPFR2TPqVx
+yQeCN9/9f3tXLBEv810s4+EvXJ//yZ8+XjzqqZMf+s7Pen98+5LAaznf7xfn5Hy3uaroqh/9sutH
+N1/wT71mLBbL/4xhSp49MEDvcPSMLFPvSJRNBwe4clYJDnsmyIonDUbGEuxqDvLkrh6O9IQpzLZz
+x6VVXDarhLwsG+FYmoe3dnGka+yM4EoXMRYmn2dxcDdVi5dQdM3NGHYXzze10jsSO96vCmpKsrht
+6QTqyk72MTrSPcaAPzYe1EgyAY2mCOIpg6aOMZ7Y1cegP8Wy2SUMjUV47sXh8X29To3BQIJ4ymQo
+kORwXwDDkAwG48SSxln7mT1/aJD97QFsmsAwJTabwuSKLK6aVcKfN7YRT53+8SIEhOMp/vBMG9uO
+DePWVUxT0h9I4Q8naKjIIj9LQ1EyndgD4QSJtElxrvOMrJaUko7BGH/a0EVLfxhNVSjNc/HuRdVc
+MafwH8qCWV5/rynAqix15yt96teUmHMV8MjZ9klo5qWklM8oNvUuYOc/UyklndCQzgopRBdnbf1+
+FbpTFVCOkMP/TD3O5rnfj+Svf+Tez3bMkOuBtdiGvDaH/cs2jW7ge0DyXJ/zVLv+4/+UPdWk3dWd
+t3jkjg/d+DPPvNnHvvSTf/64Uv7advdVky7b1aN/1FXeWNFopISta2v4oW/e+eDH9sv7fzld+M9W
+7skvL5z0o6fbvpBVMXVSkU7yuT/9ft/77uv+3p9vKe9+5fNJ5a5ZWR8Jxkb/feO2oU8BD//zV2Gx
+WP5R/rEUu1sC45mjEwQQiaX5/do2jnWFqShwI4E+f5QjvWMc7Q5jUxXOn1zIjQtLmFGdg6oqmCZs
+2D/Is/tP9E3KHE8icCpxFsae5+L+bfhmzqPkplux5+Yy4E9wsHOMZNpEVQTZbo3lF5YwdYL3tE+A
+QCRNIn2yngKIJtKs3zPIhheHONIdobE8i09eW4nLofLNv3QRjqXH59Rq64/y7b8dIW0YqALm1xey
+bF4RTR1BthwcOd7d/HRpQzI0Fke3KUwuz+aaBaWc31CAP5Tgyd3d9IycPTAbCSV4vinTuJDjsTOt
+KocbLyhlQX0+poRth4bZ3xriYHeQSDLNuxdVUlfqRVMUIqkkoUiKQ50hNjQN0dofpSBL58IpRVwx
+q5BJ5VlWcPUW8IoJytDK5YUf/8I3rv2z+65G06bjy0rn/uprd1/2/u8/Of2MnYVUhJB2aWReah+Z
+M8cGy9UVi9EAB43L7Uh52itCSsTyRuyAs7FxuV2e8nsBpjjeEr8ClMbG5XZWrBiv74rFi7U5c+bY
+TpRZsQLlqlp0aLQT1FUFIcWJBusTZVYs1qrBQe1VunxJXZYvR60GB1Q7li9fedYhI8tBfXHHi3lt
+u3YsObTv0LTFixdr6M6Y4vTc53TYHwPSEkRj43L7ihUrlNpadMCxeMUK7bRz1Nbqp14LgFyxQqkF
+/ZXOL6UUj+wM+iJGUb6SO/VxfeTQti+d5xs49Z5w/PpWSHnyXq3I3L/ly1eqtaDPmfORMyZP+cF1
+Pz5/4wHtG82pmq7S86799NUXTf74RHn0b8aRLXc+83+++34p5RllpJRiw7pjN+4fLGmouOTDX1q+
+oPibWsuO+ft2HFh8tvqfqu+7U8oPxasucrrc9D23edlaKd2vVsZisZx73aNR+kbjSM5MvgsB/nCK
+VVt7+MljR/npY0d56PlumjpCFOe6+dBlE/n0dbXMnpiHqmbecjqHIqx6oZdAOHVK4CEodCe52lzP
+Rb3bya+qo+K9d+AszcywHkuniSYziXLTlCyoL+CixqLTJhsFcNoVVCXTkfzEu3ssYfLUvgE6BqK8
+Z1EV/7ZsIhNLPfjDKToGj/fVkhJTZsolkykay7O465p6/uPaWhZMymdmTR6+XBdIxveTx6/fYVeY
+X5fPx6+u54vvauSKOcVkezRKCxzcdEEFvlwd5ZRJT4UARQhsqsCXo3PVvGI+e0MDd19fzyUzfLid
+Kk/uGuAHq5q5b1Mbu1tHOdod4udPNPOtvxzkW385yLdXHuK7fzvMH55pxzBNbl5UzhdunsyHr6ih
+serVl+uxvDm8YgarLVXgHdy9Zsljew/PD4aMhrRj47xvH6jpqHnHgt8C+89WJq1qUl6L992dsXvq
+p4uRVu8FysTKrjmx9GC89MO//uUOKdcIIcydv/6I7SvvPnCF3+F/d7EvUSzcwaGr7vzhA4ulfMJ1
+b+Opf+lG4/LchdrW4U/NO1LwnzugScrl6hev2n9nX/+E2vvhq10/XB7/3lNH39OXHr2puiEn9b5f
+jRwNJ0WRIpTxga+/eP+i6es3xD6oVdfW1zuDiWV3fPWvn9knV90zQ0RWf3Np2coXwh/wVPZeMBGb
+2hNft2v5T9f+9qG7rmg79dqmXFBzyW8f3nF3c8CsT2767ofa51/vfTBY/9tAx6+uGfAmuoH9q95p
+m5F1tPsLG3dm7a3Omz45Wdhf3fP0gRc/evfnH9TaNs321g9cWh5XnMW7/Wsu/Lv/Nz++Pjew8s55
+xR/dvv5W16RJi6oNpzaUWr/lI386+Lt7b23sO/X8676xdP6DxxLfGAwfrk32dX325y3nLfj1Uy1f
+/uhlE4PfvvXCBVvbQrfVlZZO0LyhyIb3fmXd4hV7/rJhxazAzCb7lDXR5q919f6l3dk4b2KqQH+2
+Tcpf1QgRB5Arz3fe/sOe9wzkzu696Et//vaD73H3rgFk04odH/rgf+U+1bXlhgt+MfQ4cOylzzuV
+xqV4fIGrPnjLAfGz31dpmiPpstkjr/K644cPD89J5F1sv2Bu3g8P79h03bd/cLQR2PFq5SwWy7k1
+PBYjkTIQr9BYoCjHv+4KyHHZWDS1gOvPr6Ta5zpthGHaMFmzu49j/aHxkYhImFTh4bq8ToqeasKe
+l0/FrR/GU1s3Xi7XpTPRl8OhzjB5Ho2l0wvJcp85ieYFDYXsawtxoH0EKcFhU6kocnPpjCIWTMqn
+MPvkTOn5WXZm1GTT1J5ppvQ4bTRWelnYUMjUmixy3PbxPlDTa7L592V1rNnTS9dQFMMwKch2UF/u
+Zk5NHnXlXrJdttMCG7tN5drzy5g5MZe97aP0jMQIx9K4HSoe3UZ9aQ7VxU7ys+249ZMftQLB4ukF
+NJR5GIuk6QtGGQjGCIZT4wtK52W5Kcl2U1/moTBXJ8dtx669xg5bljeNVwywpr33l203NS/+SlHC
+d/ejBxM1trqLWyZdduNn3Y2RFn708uWCHjQz2T1xMCgWd9Se/9/Lr2v8r73rn3jnrk3rv3jbj+r2
+AT3btmxb8sgL0f/Up1287rarKh7qfPa/L3hxY+iL2gfcEa51HUSebNeWgiwE9UJqzhPbBLJYQFUO
+6L9fu+2adbv1z+gz37Hqummeff0v/O08fzBWnSd08yDIjd+4qO6bv+v+TmvevMFLll/ze7lvZdXu
+LY98vD1SY0i5YtW/L7r/4093l5y37Pr3/6ZubIvy8JpHP7wn4ila/qz81ENLRPjEOed/8rt7qvb9
+/Wc//N228si8j6z94qcv+9M1fV9LPqQoE4Wa6XslNM2VCh6b3dnhcV+85OaHJlU949qy5ekPPdbb
+eklVfePaxcsu+PPY7lVTNuzZfPt6zwPtcmTF2lsX//dnd8Sqp9Zd8t4H6+O7jV0vPHbr+nBJ1rNt
+8j+X1GSCIIB5H//t4TuO3f6HhzZHymm8+v5PvWvqE2WXToisvHPmzHse77nHX3ze0Stve+e9ounR
+ivU7Hrk95CdvpZTfU292OY1U69QjPTkFF1x05YMXzKnc1g7j/aoeeqIve3jUPT3lrXvygXe7+h58
+z/F7PGVF8u65Rc/nRkM3dT6/oZKXBFhCCPnAhxrXbtq4adHvPn3bd3Kj9ryBqqXrP7G0cv32e17+
+9SF/3ui55X7XFV349t1zfcXfftSyZ+HG1fctkVLuEkKYL1/SYrGca3ZVQ32VSa5MKfE4NGZNyGPZ
+3BLm1ufh1M/8wA+EUmw8MIJhZL4ja6pgdm0Oty4oxP7wX4lip2z5B8ieNuu0ctlujXcvKsflUMhy
+qMyYkHfWelT5nHz+xnoOdPpJGSbFWW6qfU5cDvW0kXwAvhwHn79xMp39cYSA4jwb2V4bmnpmvTVN
+sHBqHgsackilDUwJNlVB0xRU5eXvjd2mUFvmYWKpG1MyPlpSwPis9Wfjy9Hx5WRGZ0qZjynl+PQQ
+J5YAOjUrZnlresUASwjkyjtDM3cOl86fe8PSr428sHpp19H2y3/y1Tt/9dArlJN2JEqudJde9MR3
+/vaLH10gRGzVB0rDn3u242tJJV0um1YO3XHTJ28aLnzn0e//8effuyVfjAV+MW3TZ9bmBYOFMguq
+VGg9eTwTKSQv7UloSinM+IFm14GjqRsCNddtvnfdT75znRAh+eelW+d/ZWxa2EyqXwW+sqrpylbX
+RXnLPnzblyfL9vbZM650R3/y8PRnDq+9dM+RD26KRf8wQcmZ2Fl04xee+vwiz/Cx6bWHng+FqzY/
+sOu0D/tlN988tP6eG/bn2bSxfldZ64eWzDl2x3835KM4JObx/HoqhbBVRCtnXHvvAz+561G5AuU/
+h3yl93ZlX1F2y09/89Nb8g7I1e8ou+juXbNGzZGGn3/skYFjydKLs867/kefv2XCE62t1Up59HDu
+97atf9ffmz9VATSfOH9e3sTgT5YUNXmdDeEjRsmxW265+YB8nxR3Pdt5Q7/nstQlX7hnxU/fWdYl
+pVQ+PidXPDNwZPmXvtb5lx+rMVOx1cUmXnDtL9b88dMPrvkj8B8fHr+uwUGhR6OK06wsC7y0k36u
+SEecMokyNnDW2eyqGqf0la55VDz5nP+D5Rfe9ruP/uY7P75rwtfCk596Kru0tDQ2ZcqUM/qk/Xab
+MqEvpDTY5135/fNufEf3JxY2PlOTPHbJsocpBV6x75bFYjm3yvM8uHQNf/j06QZONME5dZUp5Tks
+nl7EwsZ88rNtZwQzJ0k4HmS4HXYun+Hj5sVluNtfpKW7jdzzl5A7fyHiLMPnqkuc3PWOCZiSV2wC
+y/XauGhK0Wu6tiy3xtSJr20iTkFmYlXb/yBTJITgf9pqJwSoQrxiIGd5a3rVTu6FddO6p8man33y
+419Yv0HftHt/Xa1zI7xilkEkEYgsSUwfPh/iAJ78vLgUaZk2VXsg2eNqDlChTZm585Z8MQaQc+cB
+/+rV3/7x8NR3mNHH7j3715ezsAe7vcMJR66omL35OiFCAEytj0n2R5XM1Lj2XX1GnT+yvfZPX3zu
+h4owTUVIoUhZ5G2Uu5+0X2Y0lor7mvY+/sn7PrT3v7dOm3XYNvfWZyrzJ6xdd8/cM8ftnrzKs/41
+pEgjhMcMD4czU+5+Fek6kDem9dgCixbn+h8CmFUVT8sXopowPE0j9sre3iNV/ie/c9d1TyRuB4Su
+mF7pdaW7B6M5Lz2+qkmBRCiKefz861xHg9pEMXVa6+/3lvZlaibMXyx2vLi9e/SDocObinXVlhLC
+a6TH5NjZ6uyyKaaqSlPGome8HhRVEyiaYar2M0Zi7vvGRTWf/9WOr/eVXte5rLL9O829By66/+t/
+njvb/puRb+7f/6nU1GU/BvacWkZKxNevjFx2aNTtnKo8b6+66qrz4uGD6fRI+4TOv/56FlaAZbG8
+rsoK7SyeXsDfX+ghnsx8U7SpArdDY0Kxh8umlzJ3Ug5FOfqrTiuQ49V538VVvNg1yqyafC5oLMDj
+ELQ9tBmHr4Sy627GlvXyE3AKRWAt/GL53+JVA6wln/pDu5Sy43hmY4eUT4rXNhWB5Hin9sxsJemT
+n89mQjUVpGmmk6f9Lb3jHe+QgIwSBZy8lFDM8fMKoUgAQ1VNXRNp1aaenEpA0U8LfjRFkfl1Fx+8
+8cbzvpWlxo/PGWUzsyrrh4pq8C9fvW7d/F98e++aVvecvS9smHd084Yv2adef9Gta+XX/nSFeNX+
+RGe9+lO+jkgDISWcnIcg8wYjBYqSNoS3qGFo2pU3/HJpvWxOJAzVNBXpzssP22cVH3v1oXX1hiaM
+hDTS6pwSxK7jW+MJVTNlJqQ9sac6HpSdrmGCI5LTmhi0xdqrpJQOIU42S/rtWrlftRv2qslDLy33
+X395cWk75zdqc25+/6qPP9P64fc9Lp/e/Oev/L+8gt1jqqPa9DScEaD2P3R7waamRy4DxXlw7f0f
+Q0KzMISMNnv1UG6JRdMAACAASURBVO9V16yW61dfI14hsLVYLOeSbldZfmEleV47zT0xTAllBTam
+V+VRX+Yhy217zU1VmipYNt/H5XMKsWkqQkBiZBhF1ym/6VYcJaX/2ouxWN5EXlMu9NSA6lzM85S3
+YFp0eolyVLRsnfzFpwd8AE3fm1d889JLP3vlv/3kSlfplPF6CSGkritJqQYV1aPmSynFwV/gHOgL
+VqCYQpbUhyrzjA55ZGPjI1J6AQaf3eExpcgyM1+30vOr7UeNQJ9nc2LK2Bc/97nnvvDZz23OKcju
+6096Unlfem/uTXPu+ModT82d/J0f/GzVE5sPfOXynNHVie7uS1offzr/bPWXiiIQZw9WXtFLZnpK
+Gcg5E7ydXjEWa+pOOio+8eltX/zc556bUcnhfllu3Nn40hJnEqImPrtSHBLdO+sr07trAaRc4dgf
+cy4Y8+aPymnX9iTiqVd8Zuf/8KvBouzE047RQxdfcOdDC6SUQkopNv3ohpIjI46bIk7fi8vuXNTy
+0nImSEV3JW0uV1pM+UX4W5+b8dP5np0dzx0c+2hQKdh3+Y8XnpGNeuKhZy7scM3Ivvpj37j7wYcf
+/tAf/v7whx5d/cTtn77U933a904Th9fXvto1WyyWc6sgW+emhZV88rpaPntDHbdfOoF5k3LJ9rz2
+4OoERRHYbep4Oc3lpuTqG8iaNvPcV9xieRM7dzO5C0WRKDZ5YlytQJNCjmeoZCa5rAlMRYhL03/8
++MI/b3vs+Xue+s5d3739I3fu+8LDz8w5Fssq8drL1xHtMCTCJhCqlFLp+93Vx1zb9nf0PP/QF99/
++67Z0Z7+sr0dscuNArFHqS6OTZ3ifXD7lhdWfHvZx776ybs/t+dzq58+r3c4PqXQZtt4M8jP3zR3
+9caf7by4ZeW3vnftez/29MdubFK3tv5pfnryex/4xt3e1Q881ZEnjt735ffe8oFZH77t3eYuo+Ay
+UVm2O2v+pWdMmOlU1FCeCI649v/1hnfd82R3d966bRhPq/J4ZltREUhpwzwZgAmkClLTxofpjAGK
+ItOGev0P/2vfs5cufGRo/8qP/uS69rpP3HZd/z333De/Jz/SOuf6S78JhE89v5FZXF7DPJmsX3RJ
+4183/XnfokO/W/H993zwro0fuPLx0i2RCQtF47x7W76c35W6kVIENinP3sgvxM3Gli8t/UvrQ8em
+v7jqWz9Y1LZqc60rGNy/eetF/fq07Nm3feDOn08WIy8td8tNjc/vemDfNYkDD3/6zrvuXvOjTX16
+KK37pOFPmEag7Ngf2guB8QyglD/3vLPu68uomNcZrHvPC4vmnhxA0Pvn9677ywsvvK9lb8uVUsoX
+rc7uFsvrS1UFHte5X9xDdTpRnWe2SFgs/9uds3GfwpSdINfYDGM0rpJEig1CKk1kJtDFUOlHslYR
+YhDg1p8+v+uO5VM/XTCyo+fxv62acZS6jkXv+fCnt/30xq2EknGE3CiQTQAldzze+dH3LPy6L928
+e82jjzV0aTV9s+bN/oGqsjEEsbvum7x++VLfV1Iv/l2//76HLk6WzDo0oSjr1zaMpikg537ysc7/
+uPPyT11cEVi1f+1fJjyyc6S0cNai+y64ftZqMffe4Ic/ctnXLqlJPrBzzd/rVq/b1pAz9eK/3/ju
+5V978hZxRp+l8z+10n/Jhb7vewY3NW/bsKHihdh0A5TNQop9AEaaYYRcoyra4IkyEnEIxIaEg0zT
+l+5OmsgXwNz/kZzq0Ac/+M4fLj/f+52xPavcDzy2c0q0ZO62Re887+fLCzmjedLQVL9ErkMRXSe2
+XfHNTW0fu23hJ2Zld21cv+pvUzb2eMWUK2796hUf/eyfAFT0USFYI6XS+3LP74JvPdPzubsXfuaG
+ubZfDux5yvPwxoNVYdVhmkKV/qPPl3zmj/vOmKdqwYrnj372jlmfqTe2HX3wT3+86ld/37XYX3/T
+49+4bc77c3s3dXVu3dBw6nxjHT/+L++g9PQ5K4rvX7mc05oBSyZ9urfBGftrYN8OYwNY6z9YLBaL
+5X9EURRM00RVj48u/Zeur/LyrGELlpe17ydXld/1q4P/YVQtKT3/k7/88j1XONtevZTF8uZ0//1/
+mDJxYv2uhoZGHTLD4B1OF5r2plyS1WKxvAopJfFYjFQ6hZSSQCBAKBRmaHiYzo5OfMU+ykpLcbmc
+dPd0B7q7eqbdcsstr9tAKuudxfKyZnziye47ly/+WrQspyAxwdH36iUsFovFYnnjCARFhYXk5eai
+qgpCvHETtFoBluUV/eKhDWHYEObHP36jq2KxWCwWyyuSSATiTZGZtubet1gsFovFYjnHrADLYrFY
+LBaL5RyzAiyLxWKxWCyWc8wKsCwWi8VisVjOMSvAslgsFovFYjnHrADLYrFYLBaL5RyzAiyLxWKx
+WCyWc8wKsCwWi8VisVjOMSvAslgsFovFYjnHrADLYrFYLBaL5RyzAiyLxfL2JeVr2i5N8+X3/Rcy
+DEnaOHneE1WQEiSZfy/93XhZM1PWNF//er+VyXQ687xP2yjP3PYK0obEOMt9P9tL6NRtL/3/m+bZ
+SYk0jDe6Fm85b/xiPRaLxfIGMIFQSzOuwiJkOkWsuxNvw1QSgwNoXi96QSHSNBGKQvhYM5rTibOi
+cnwbHA+8FAVxynElnPbz2fZL+kcxUyn0Qh9CgJQmAgEis4dpSjr743QPJlAUmFjuQhXQ3Bthdn02
+g6MpVCGJJUzKinQURdDSHaOh2o0QMDSaoKk9il0TFOXamVjuBMTxc2XqcPxUSCkR4mSNT/1ZypP7
+nUEeD/FeZjHds92bE9uFyFzrqf8f/51y5vFeuv2Mn89yz88m1tuDlp2Dze0+6+/jA/2MNR3AO7kR
+Z0kZ8f4+FKcLTJN4Xw/umgmoTtfLXmPakLR1RxnwJ1EVhck1LmKJNH2jSRqrPAwHUiAglTIp9zkJ
+RdKMRdKUFur4x5KMBtP48u3kZdsJhFLEEwbFBTonnt0/6uXu51n3BXjJayE+PIQQoLm9RNpa8dTW
+odhsr+14p7w+zqi6lEgBRixGcnQUR0kpiqJkXnvwCi+6txYrwLJYLG9LQlGI9/WS7u9HsWsMPLUG
+1eUlsG83efMWEOvrI+UfwVlRRayrAz0vDyOVItbdhbO8AsWuE2o+jJaVjad6AtHuLtLhEIrDgSIB
+m43sKVOJdrQT7enCnl9Adn0DwmYjeGAvocOH8F12FVJRCB87irOwCO+UaSiqysBIgo27gsxt9KDr
+CqmUwUAwzdrtI+iKSjhmoiqC3qEEbpeGboNtB0JMqnYjgM6+BK2dcc6fmYVuE7R1xxgKpABwOVQS
+KZPGCS5CEZOO/jgep0JdhYvugQSD/hSFuRpSwnAgTXGBjaoS52n3Lh0O4d+7C0W14a6fRGJggFTA
+j9Bs5M6cRWJ4mHDrMRSHg5wp01CdTmQ6Tbj5CPHBQdw1E5CmSaStBXuhD0dJCZHWVtKhIKrLA4aB
+XlCAo7iE0LGjGJEwtoIivHX1hA42kRgaxD2xFtWhE+3oxDRSeGrrsXmzCB1qIh2J4J3UQCoUJjHQ
+h2Kz4Z5YR/8Tq3BW1pB33oXYs7Iwk0nGDjaRCvhxV9cwuvMFEsNDeGbNQUrJ8HPPAgL3hFrGDu4n
+1tWJo7IKd90kIseaSQz04SgpwzuxFqGqtHTF2NccYXqdG9OEdFrS1hfnyW3D6ItV+kaSmFISipgU
+5uoM+lN09MVxOlQOtsUYDaZJG5CXbSeZMgmG08QTJkOBNJoKk2vcDPmT5GbZMAxJImmSMk3smkos
+YZDlUsnNtiMlRFqaCbcdw1FShrO0nHDLMWQ8hrO8AmdpGaGjR0iODOOqrkGoKpGebuweL2Y6jREO
+4a6ZgH/nCyRGhilcciXpcIhYTzexgX5Ip3HXTMCel09g/15kOo29oBBvbR1CUUgFgwSaDqDabDjK
+KzBjMVwVlUQ62lHtOtGuDhS3G0VVGFz3OMVX34CWlUW49Rg2pwv3hFoiHe0YkTDCrmeOn52Ft34S
+QnttAd6bgRVgWSyWtyUhJd7aOobWPo6jtBJHSQWRlmakkSYZCBDYuR17bh7x/n5UpwOMNImjR/FM
+rAVFIbB7B8JuJ97RRqK7i8TwEK7qCYRe3I+7to5Ybw+q3c7o1s3YsrKJtrZg93hxVVWjaBqKrmMm
+E/h378RVVs7ojq3Yi3w4i0sIhAwcukJ9lYvDbVGSCTAl1Pq8tPUksNsEedm2k9koTmQMjv8sIBQx
+6OpL4Cuw0d6TwOVQGBxNkZ9jI5YwyXKpOHSF0bE0R9pTjEUMeoeS1FU4EQL2NUdw6QplRfYz7p1/
+1w6MSJhU2iAZGCUxMICjrIJYVzt6fj7+XTtASoxoBFXTyJk5m9jgAKM7t5IzYy5mMklg7y4cxSUE
+9+4i2pFLvLcXZ0UlY3ufJe+8ixjdtpns6bMI7NyOd3IjY/v3YEYjhA414SirwL99K6quk45Gsefn
+Ez7chOp0EzywB3tuPoM9nQhFQXV7M1kcKUGA5nKjapmPvlhPF/7dL+CdNI2hTc+g2DQcRT50jxch
+BEJTEaoNVdcxkymEzUZgzy6EqjK65Tn0/AJG29uxe704SkrpG0pQVmCnvMhOU0sMp11BV1Uq8900
+d8UwDPB4lPGm3RNNvZFomkTCJMejjv9uLGrQPZQkljCxKQJFhbaeKD2DSeqr3QTDacbCKcqLdNZu
+GaEoz8aimdlAJgAe3bENR2kpoaYDJPp6CbceI3v6LEa3b8Xb2MjIpvU4ymuIPvcsmisTALvPW0S0
+u4tIeyvRrg40pwObx4uiCGLdnSSGBkiO+tGyszGiYfQCH/HeHlSHk3hPN56qaoSuE2ltIdz0It5p
+0zFTKfzbt2Am4oSPHEb1eom2t5E7ex6KEAhVRdV1RjZtQGg2wv5hUuEQoUNNeCdNJrh1I3kXLCZ4
+YC9adg6usvJ/zRvCv4DVB8tisbw9SYktv4D4QA/xvi6yp88g3HwImycLIxLBSCSw5eSiFxUhhEI6
+HAYp8dTVo+fmYsSieKonoBcWkhgeQHN78NTUYM/NwzOhFpvbQ2Kwn1Q4hOJy4SguQdF1AFSXB72w
+GMXlRqZSeOomoTpdpIN+AHSbIJE0SSZNDEOy82CYVFriy9coLrCx7WCQtGkiBETjBpG4iaqebFYR
+AkqLdGY1eCnJ17HbBOU+B6VFdkoK7BTk2BgNpWnpjoOUpNMmPUMJFEVQU+agvEinvtLBWMSgqSWK
+TCUxE/Hx+5YcGcFVWYOjuBgjFEZoGtlTpmLPySUVDIxnsxwlpWjHm+NS0QgIBU/9JFSXCzOZyToJ
+RcUYC+EsK8czqQG7r4TceechpYEZT6B5PLiralBUlUR/H7asbLIaJmOmkqTCYZylpbhrJmJE4yQG
++zDCY+iFPvSCIhTdibeuHoevmFQwiC07H4evGNWVaeYzYlFUpxtPbT1GIo7icqP7SlCPN4Np7mwc
+vhJUtweHrxhvfQOqXSc1PExydBjFruMsKUZxODLPTVcIhDNZqMHRBAfbI6QNycQyB6oqaBuIYtcy
+TWHRhEk4ZiDIZApLCnWEECSTZubZp0xSaRO7JqgudVKUZycQNjBMSTJlEo4apA2J160SCKUxDInb
+qQJknpU0yJo0GcVuIzk8iOrQ8dbWYiZipEaGSQz1Y8vKxlleBULBVT0BzeMhfPQQmsdLYqAP1eNF
+95WgeTOZLSEUPBMn4qmuwUylSYwMYc/JRS8sPPFHBYCjtBRneQVjTQfgeFN4/5OPohcV4Z08FXte
+PqPbt2AaJnpRCbacHOJD/UgzjausAtXhwJ6bR/bUaahZOWTPmotit5OOhDFisbdMfzD1ja6AxWKx
+vB5uvPGdRXl5+R8tKCjUAIQQ2O06RiiE5tTJnjWPSPNBcmbNw1NdTWp0FGHTcJaUoug6emERppEm
+2t6KYtNBVYh2tGNEY3gbJqPoOo7iEsxUCmdJKeloFFdVdSZ7Ypo4fMU4SstQ7HZkOp3JjDkyfaMi
+ba0odhvZ02ai6g5sGoyMGXQPxAnHTbI9GtkeDUUIKnxOukajVBXreJ02jnXF6B9OUVms48uzY5oS
+fzBFx0Ai82GdMgFBjlfDMCUeZyaDYlMFsaRBLCFJpSUTyh0kUpLeoSSJlBzfLlSVQn+mOUkv8mWu
+R6iMHWoiFQzgnliLYrPjLC3DiMVxlpSgOpyYiTj2/AJcFZWoTheqohLv6yPW05W5biEItzSjaCqe
+2kkouh09rwAjHsMzoZbEYD9adg7hw4cyQardTu7cBcR7e4h1tKN5s3BVVaF5PNiysjL3vawCM5VC
+dbnQC4tQbHb0/AJQVISqYMvOITkyjD03H9XhAEUl0ddHtKsTV1kF9rw8NE8mmAIw4zHigwMomoaq
+6ziKfKTDIVxVNWAYKDYbelFxJni22bDbBB39CQZGU0RiJiUFdlwOBVVVmFjp5NhAmClVXuIJk+6B
+BP6xFKUFdroHE0yvdRMIG3T0JxgJpojGTZy6ikNX8bq1TLckCbpdoas/SSCUIi9LIxwzKcy1oWkC
+mybI8dpQVI34YD+RttZMcFhcQvhIE0Y0hr3Qh3dSA2YyhaJq6IWFKG439py8TKa1ox3V4UDzeHBV
+1hDv70N1ujNfSLxZ2LxZaB4PEnBVVhPtbCfa3gKKQlbjNISqkgoEMGJRpJHGXT0BxaEztn83RZdc
+iTTSmLEYMhXDM7GedCiEAGx5BZixGPacHBxllUjTwFFaTjrgx1s3iZR/FM2bTXJoAM3tHv+ykk6n
+MY8PQIjH4ySTydP6kQFomsZYaCw+Nhb65cMPPzz2+rzjvLZ+gRaLxfKWd//9f5gycWL9roaGRh1A
+EQKH04lIppCGgeJ2kwoEsHncKHad5OgIyeFh7AUFqE4XQlORqRTx/j5sObmoLjfxvt7MB3xuHjKV
+RLHZMZNJFN2OEY+jOpwY8Tjxvh40jxe9sAihqkjTJOX3g6qg6DqJvj7s+fnYsnMA6OiL0d6boH84
+iSmhOD+TUTFMicOuEI6a2DSwaQoDo0kAfHn28SxWMmkyHEyRPp7VcDsUVFVgmKBm4j2EyHTKHh1L
+43YqeJwayZTJcCCF161iGBBLmFSWOKiR3eQUeHGVVwCZztOx3h4EoPuKMRNxVIdjvBmNE7/XVBzF
+peMdo1PBIInBfnRfMUKzkejrxZaXj+Z2ZwIjux0jEUfzeElHwsQHBxjbtwdPbT3Oiips2dmZ5zI6
+iu4rRnXoSCPTkdtMJVGdLlL+UVJjY9jz8lBsdoRNGx8FKFQt80GdlXU8uIVUwE8yEMBRUjrecf/E
+72Q6RXLUj2K3oeg6it2OEYtlAshkkvjgAKrTiV5QiIlCa3eU9r4Ew4EUqiIoyjv1uamMRdI4dRXD
+lAz7U+h2hWyPynAgRUmBTixhMDqWRkrwOBUcuooQmWeWOQ5oimBgNIluF7idKqYpcTlU4kmTglwb
+02o9qIrAiEaJ9/ViLywiMTiAf9cO8ubNx15UjM3jIekfJTk0hC03F9XrRVFUFJuN+EA/MpXKvMad
+ThIjw6gOx3jfJ6EoCE3FNAyMtMHQuieJtreSt+B88s+/EKEopCMREkODaC4XalY2g0+vBUWh5Mqr
+MaIREkNDaF4v9rx80qEQZiqJ5s0i0d8Hx19T0jQzzeiRCJrXixGNgKohjz9noWlIKYnHYqTSKaSU
+BAIBQqHwGQGWw6HT3dMd6O7qmXbLLbd0n9t3lpdnBVgWi+Vt4ewBlgtNe/N1RY0fbyJSTowqHO9f
+JcZHemW2nDriT56ct0FkMnSZvlmM73smgSJO7CNP+3n8OIDDDpqqvO6ju8xUinQshs3jec2j4d4o
+UkI8YZAy5FmeG5kBdUIcv8+Z19+J+y6EQJqZIZuKOHk8edZnljkOpzzuE8M9barAoStnPKZ0PI6Z
+TGLPyjqHVwymYZAKBo53Qs9G0R1n7CNNk9jwEHaPF83lOstR/ufe7AHWm++dxWKxWN7mHHYFh/3N
+HVC8HjLNbm+NUWNCgNOh4nz1XV93msMBjjODn3+WoqroefmvuI9QFFxFvnN+7rcC6y/YYrFYLBaL
+5RyzAiyLxWKxWCyWc8wKsCwWi8VisVjOMSvAslgsFovFYjnHrADLYrG8Lb38yDqLxWL551mjCC0W
+y9uSaRqsWbOGQ4cOoygK+QX5XHftdeTm5r7RVTvurMtGn2Wb5U3HekwWrAyWxWJ5GxJCYBgma55c
+w6OrV7N23TqeeGINgUDgnz522pAcbI3w/J4gm3YH2d8cJpE8ubSHKSEYThNLmC97jGgsTXtv/LRt
+yZRJU0uEZOrly70ZRSIRWlpaSCaT//SxxsbGOHDgAKlU6lX3DQaDHDlyhHQ6fcbv+vv7OdrcjPEP
+LrmSSqXo7+/HNF8+83n06FF6e3v+oeO+HoaGhmhqOoiVtX39WBksi8XytiSlpLKqCpfbzdat20g4
+4wRCSXqHkqTTBnabIJGU+PLtgGRoNIXNrlKQYyMSNRgOJMn2qNg0ldGxFDkeldxsOwKJ16nQ1pum
+bzDB0gW5BEJp8rMhHMt8uG3eG6Agx86MOhf+UJr48fOkUib+sTSKAsmUJJYwGPancOgKul2hqSVK
+VakT+1tjaigARkZG2LhxI9dffz12u53R0RF6e3vJzs7B5/PR29tDIpGgvLycWDzO0OAQum5HSojF
+YhQUFODz+RBC4Pf7eeaZZ0gk4pSWluHz+RgcHGR0dJTS0lLsdjudnR3ouoOsrCxSqSTxeJzu7m4Q
+UFNdja476O7poauri+ysLIQQeL1eOjs7URSFosJCEskk+fn5+P2jCKEwNDSEqqpomsrKlSu5+eZ3
+4XDoBMeCeN1eDMNgbGyM8opyDh46iK/Ih6KquJwuDNOgr68PjzeLstJSVFXBNA26u7sJBoNUVFSS
+iMfp6++jpKQUt9tNX18f8UScbG824UiYwsJCPB4PPb09JOIJPG4PkWiE/Px8CgoK6O3tIRKJUFZW
+TiptMDw0QCqVpqamBiEEHR0dNDc3EwgEqKwop6e3F13XqaioeFNOtPu/hXVnLRbL25aqqni9XrK8
+HlRFZeOuIJVVIUYDCbI8GpomKC3UKS+ys+NgmEF/ioXTvRzrjpPl1vAV2DjcNkbakMxucJPttaGq
+ChUlTgJhg1jMoKpY56ltAWZPcrPrUIjyYgejY2lSBjh1wYstUXK8GofaoxiGJBgymFjhYCSQxm4X
+7DoYwj9mMG+KJ1Ppt1gCwjAMYvE4UkI4HOKPf/wTkWgEwzC48ooraG1tY+++fcyZPYt4IkFnZxcz
+Z8xg85YtTKipQSK56aabyM3JRUqTjvZ2srOz2bp1G8uuvppDhw6yY/sOCgoLmTihho0bN7Fk6VIq
+ysvZu3cfR48epa+vn8bGRgryC9B1B6Zp0tLSQiAQYOaMGTQ3N9N08CDpdJopjY34/X4uv/xytmzZ
+gsfjYfv27VywcCHlZaV0dXYxMDDAnj17iESjNE6ezNGjR/B4PKi7NKSE7q5uWlpbWTB/AY88uopk
+IkkoHOLOf/sYFZWVNDcfY/Xq1Uye3IBpStauXUtJSQmbnnuOqqoqdu7cRfHx4LGsrBTd4aCxsZG/
+/e1haqqr6ejooKqqGlVVWHbVVWzbtp1t27Yxffp0XG4Xhw8fITcnh56eHkBwtPkokXAYb5aXDRs3
+sHvPXi5cuJCioiIrwPoXspoILRbL25aUEI3FGBwaYiwUQgiY1eCmrMjOzElupkxwMRZO0zuUpCjf
+hl0TDAfTJNOS82dk0VjjpqHaSbZHZXA0s/bfSWJ8yRLDlJhSkjYkqiIoK9KZVOXClIKCHDsXTM9i
+YCSJYcL0eg+VxQ5MKRkaTeN1aXhdKv4x4/VeqeacEKcsCTMyMorf76e+rp5pU6cxNDSEoipUVVYy
+ODiEaUqWLF5MXV0dtRMncvXVV2Oz2QmFwuPHKysv59prr8XhcNDX28vw0BCNUxoZGhyguLiYadOm
+0d3dTTgcJplM0tbWzsKFC1myZAkFBQWZOiE4cvgwwWCQxsYptLQco7SkhNmzZlEzYQI+n4/Vq1fj
+druYO3cOM2fNZHh4CJvNRv2keqZPn47b4+GSpUsRQjBhwgSWXnIJqVSK4eFh9uzdQ15eHgWFRfR0
+99A4pZEZ02cgFBWAzq4uKququOqqZfiKi5BSct1116EIhYDfz+SGBpYtW0ZpaSkXX7wYIRQi4Qh1
+tbVce+21lJWVceklS9F1ne6eXqKxKI2NjfT09mIaBnPnzOGyyy6jt7ePUX+AaVMaWbx4MQ7dQW1t
+5t4ODA4SDofP+sws58YbEmBJKZVmKfXBwWc98tC/58t9lxeNNN+VJaV8C759WCyWtypVVcjPz2fG
+zFk0NEzG4dBJpyWKklnHL22AaUp6hpL0DCaJxA10e2a9uKe3+dl1OEQwnCYUNejoSxCJGSSSJomk
+SdrI9JVKpiU2m+D5PSGaesZIGgbITD+tVMqgeyDOk1tGKcy14dQVTFOO97PqHcos+DwWSZNIZrZJ
++dZKYamqyvDwEA8++CB79u453vTmx+l0YrPZ6evtIxaPodk0XC4XDqcTTdPwZmWhqipOpxPl+DqE
+qqoxNjbGqkdWYZom+fn5tLa1MRYcQ1U1DEOiahrt7e2k0yncbjeNjZPZvHkza9etY3h4GACb3cZF
+F11Msa+YzZufZ+rUacRiMQzTwFdUxMwZMzl06CCTJjUgJShCoaenh1QqjVBUtm3fhqZp6LrO5MkN
+tLe3s3btWjxuNzU1NVx5xZWMDA/T0d5KY+NkhoeGcbpcZGdnA/+fvfcOk+M6z3x/p0J3dQ7T0z15
+MBGDSAQmAAQYZYkUJSrYsuWVbMuWLK8c1t713utwfe3d9bWvH1+v7661XktraxUs2RattWWtKZEU
+cwAIEnkwg8HMYHLome6ezqnC2T96ABLEkARFMWiF93kmVZ06daq6puqt73u/90B/Xx/zc3P84ze/
+yUpyFY/HOfgDnAAAIABJREFU4P7770fTddrbO/D7/Wiahj8QQNd1PB4Dt9tNMBhEUzUCgQCaruP1
+erBsk/m5eaq16npbL571c2gYBm2tCYbPjvDkU08BYNkWUkoWFhYolkpvz0XxQ4I3jdBIKZWRVbxx
+cSIYKDwZUPLPhER1xCfMdMwytnQIxdsmKLcqVrpLcQpBW0uct1zb/8zY+d+eFkL8YN1BruEaruEd
+j5dP9uw4Dn/5l3/F6dOn0V0ugsEQB971c7S1d1Cv27hcYn0CXwdFEazlLVRFEAtrVOsO6ayF12hM
+rFuuOoSDGiG/einKVK44OI7E71Mplh0yOQtNg2iwkUYqVRw8boVcsUHKWpt1LAs0rRH1qZsOQghS
+ayYet4LHUBAIdvT7aI663s5T+bpgWSbJ5STVWg2fz4fhdrGaSmMYBk1NTaysrOA4DpFIGE3TcLlc
+CKFQrVbwev2Uy2W8XgNN0zFNi3Q6RaFQIBQK0dTUxOLiIvV6jWAwiK67WVlJ4vf7aWqKUq/Vcbvd
+LC4t4TgOHR0duFwuarUqpmWjKgqVSgWfz8fCwgKOdGhJJDh16jSnTp3iU5/6JGbdZGFxEY/HIJFo
+oVgoYNnWOpnx4XLpLC8vUSwWaW1tBQSaplKr1VFVFSkly8vLGIabtrb2S8uSyST5fJ6WlhZs22J5
+OUk8Hsfv82FaJm63h3K5hNfrpVqtoKk6lm3i9fooFouXlrtcbpIrSRzbvnQOVFWg6y4qlQqG4WZx
+cQmAcDiMoigsLy/h9weJJ+Joqvr2XiBvAO/0yZ6/LwRLSilSqWf8vuLpbVr+4UG1PNyCudwi1eZm
+FE8TOE3CKcWFXQgLOxuCjSNVtnvLQ2bi05/y9P3q7PdjXNdwDddwDRfxcoIlpeSRRx7h7PBZFEUh
+Eolwz/t+lEg0hpTvzEo9gbgkeL+GNweWZXLy5CkSiQSdnZ1v93Cu4VXwTidY35O6TUqpMvLnnorz
+UESqQzutkz9yqKlw9GaE3om0osiaXzgVFbvwuvpVnbWdav6bncDbRrBWz/1VIOCcOaTa+a22olel
+4s/XZdMqTn7VZZ5cNZTtq+z84/K1KNs1XMMPNlRF4fY7foShnbcjJfi9Gu0JP5qmAG/srV5KSGfr
+rGRNPC5Ba8yN4b68z1TWRFcFoUAjorWwUiMS1PB5rtx33XTI5k3CQR2XrrCWN0nnTKQEVRUkIho+
+7zu3tDCdTjE7O4uu63R3byIQCLzuPur1OkvLizTH4ni93u9pHGNjY1QqFbZt24ZAMD4xTq1Wxe12
+07OpZz09qXP99dd/T/1DIzI6OjqKlJKhoaENReRSSnK53KVU4PcL1WoN06x/T+f3Gr7/uOpPdkpK
+o2XmL1u1pb/qNo/9yHXI6j6jcvpm4TwQAwykpb7h8hZpaXVXX+tY/tGYkpwoDAwM1N5Yh69z92e/
+7qoW/9uvu0rP/IqQlldrHJDjRtoCx0HoFdtIf8e88Pn/m7eRBF7DNVzDG4cQguU1yVOnamzp8aDr
+GulsnWLFRtMUdFWhZjq0NrsxLcniShWfR6Ul5qZYtlhJ1wkFdHRNsJKpEQnqxKNuhGhop54+kaWr
+1WBNgtul4PdINFWgKIK6aZMtmnjdClJKllI1Tk+UuWVXEMeRLKdqeI3GvpZTNRZTNZIZk/3XhYjq
+CsWyzdh0hfHZCruH/AQ8CiuZMghBa8xFpWYT8OoUyxYeQ6FUcUjn6jSFdKKhtza9uJZd42//9m9p
+bo5TLpc5c2aYW2+9Fa/Xi9/vJ5VK4ff7mZ6ZRqCwaVM3qVSKtbUMoWCI1rY2pIRkcplUahWfN7Bu
+zbBGd3cXtm3j8/lIp1JEolFqtRqRSARVVVlbW2N6eppQMITbcPPVv/5rbrzxRnZs30Eun+W/f/GL
+3HTTjYRDIYKBIPlCgVq1SjQaZW1tjfaODgIBPxcuTGFZFv39/TiOw8TEBLrLTSIRZ2F+Hk13MdDf
+j6439F9f+MIX+MAHPsD8/DyZTIb2tna8Pi/T01O4XC5isWa++rWvsXfPHvp6+/B4PaiqSr1eR9d1
+5uYXcOkafp+P5eUlok0xYrEY09PT2LZNf38/Ho8Hx3GYnZ1tjLW9nbHzY5w9O8IH7vsAiUQcIQRL
+y0nm5+YIhYK0traSz+VJZzIYhotNm3rIrmUJR8JkszkCAT8ejweAfL7A+MQEoWCA9vZ2FhYWqVYr
+NDfHWF5aRlVVOru6LunKruFKvCrBys2djbqK/2Onq/StIQ53XSeVwFbFXN4uqpnomzEYKR3VcgIh
+X8Vs1wKBvJRyXgjx2o5y3yeUtGNbvOUXPiGccvilyy8FG6UdVCvHP2Znvzktpfz3Qoh3Zh7hGq7h
+Gq4Ktr1e3Wc5SCTHxkpYlqRUsfF5VFRFkCtatMVcLKVMllJF9gz5mZir4jVUHGBiroqqNCJJsYgL
+VQjOTpbobjPY3udncbUGEoYni0SCLnwehamFCn6vSjYPmVxDdLy0WqdSdTg3nadclTiOJBGtkspZ
+WJYkW3zRMLOzxcDnUciXLG7YFmByvsr0YgXbhuV0nVLFZs9mPyfPl+jtMBibqVCt2dy8861/GI6c
+HUHVNO69915yuRxf/OIXCQT82LbD4ObNnD59moDfx+zcPLqmMTFxnumZGWJNzQgBg4ODFEsl8vk8
+lmVSKlUYPjtMwO/n7NkzGB4vPq+XY8eOsWfPbkzT4n333ku9XuOJJ54gl8thWhaxWIxqtUos1oyi
+NooJioUC9VoNIQRj58/z/PPPE4s1kc83NF4Tk5McOnSQ6ZkZRkdHWV1NUq3WSSZX2Lx5M/Nzs4yM
+jnD93r3YPT3oukapVKRWq2FZNg9/97toqsro6Ch79uxmZnaW8fPjbN++nZVkkrW1NU6cPE4kEsXr
+87G4sEAoFOSRRx7hrjvv4tvf/jaRSIRyuUxXVxfDZ4e57rrr6O7uxuPxYNs2S8vLnD51Cq/Xi8vl
+YmlpiXKlhBANY9ZHH/kutm2zuLjIu971Lp559hmikSjlcpl9N9cZOTfKwQMHeObZw+zatZOBgUEc
+x+HRRx8hn8uRy+fZs3cPjz36GNft2sWZM2eQUjIzO8v+ffu49dZb3/Jr6gcFGyby5fi4u37yxz8R
+mLnjfnfqP31RlEf+RKnN/YJaGTkk7FchV3L9CwGKCzQv6AEw4hDeAs03Qvtd0PNj0PeTYMQ26uRi
+GMy/urrqfqMH+HrgLp97r3BKiVdvJVXdnLyOkX+nXat6vIZr+EGHxONW6EgYRII6lg1bNnmIBFT6
+Ogx62g1WMibTSzVMyyFbtFhYrZErNojNQKeX1ia9IXrPWTjrr1y203BsdxyH87NlhifLFEs21VpD
+0J4vWlSqjW2KFZsbtwdpbXaRL1mcn6kgpcRwC6YWG5GxPVsCBHwqLy8gvPj3fLLGULenMd61OrmS
+jWk7ZAp1KjUHx4HNm3wk3hZxvEC8RO4rpaSpKUYymeSBf/5nmqJRRkZGya6tYXgMCoUihmFwxx23
+09/Xz8mTJzly+Ah9vb0UCkXOj48xdeECbsPAcSQ+n5dHH30Ul8vFCy8cw3EcVE0jXyiSSqW4+eab
+aWttJZVaZWBwgN6+3nWNjsQwDAYHN9PV1Y3jOHR1dXHzzfvw+Xxcf/31lCtlZmZmWVpcRErJ8RMn
+GZ+Y4MabbmT//n20d3TidrkZOzdGbd2pvrm5maGhIRRFMDExjqqq2I7D+MQEhXyBdDrNykqSjo4O
+du7ciarp5PN5SsUia9k1qtUabW3tbNu+jbNnz146Z4ZhEAqGmJyYpLRe/Vcul5mcmEBRVSYvXMDl
+cjE0NETPph5AkEqlKJVK3HnnnYTCIarVKvVandtvv414PM78whzFQoFavUYmk6ZareI4DrVqjamp
+Ke648w7C4TCzMzMYhsGB/ftJp9Ps37+PjvZ2arW3NMn0A4cNI1j16p++V88/8EfCLja/Ztrv4mqX
+H9xR0HwNQhUabJArBGgesKtgFqCeh2oSystQz72sM4GNX6iq7hK1qu6i2lxe+JuIUp5zCWdNt9yb
+cr5Nn156paEUJv447i4cbUMUNyQ+Ug3bleDBuXD3Z9Zevq64crRFHbvnHmT98jvQy+eUkuA4anAl
+8uE+JZlMSynTQojXN9/CDyjm5r7uiWcf3yScSQ+A1DvqeWX/TPPQz70+sd01XMM7BIZLwa0LajWb
+uiEIeBW8HpWgTyMSUKmZ4PU0UnKGruD2OQQCgmJZZWymRGvMTVNIw7Il6ZyFaUl0TbB7s4+nTuQI
++1Q8LgWfR8WlK2TyFitrdfxeFa+hYrhVFAHn1k1Gm0I6vR0e3LpCW0ynq0UyvVhj0nQQgKa+eDPS
+VEHQ34iydbe6mEvWkBJam9xU6w4Tc1VWyxU03U/Ir+Jxvz3C+G3btnLy1EmeeuopMpkMfX197Nix
+g9nZWcYnJviJLVsol8usrKywqbsbw/AwtZ5K6x/o54knn8Af8F9yMw8FWykVizTHYsTjcaRsVFvu
+3r2bR777XXp7ewHw+3yEw2GGh8+Qyxfo6+1jcXHxJZYPKqFQiGKxBEh0XSMSiWAYBs3xZjweDwG/
+n3w+h2mZ+P0+FEUlGokyfOYMjm2j6zpbtmzh6NGjVMolQsEAiqLg8/no6uqivb2dplgTbW1tjJ0b
+QwiB1+fDcBsoisrU1AXCoSDDZ0cAcLl0/H4/sVgMw/CwefNmQqEgvT09NMViqJrK0aNHyWZztLa2
+UqlUyGazRCJhPIabcDjM5OQECwsLdHR00NTURDAU4shzzzE3O8fuXbuJxWK4XG58Ph8uXScajXLy
+1GlWV1YQ4iIp1Ghvb+fo0efJ5XLs2LGDer2Oy6XT09vLseMnGD13jmj0TUlm/W+Djav5ju75/5Xy
+8K8g668SoRFgNIG3HXwdEOwD/yZwxxrRq9oqzD8IuVGwqlBLgf3qbFcqnoqtdj4hNV9OgEcACNuP
+dDwC0yPRFy019Dn39U//z5en58zjP7ZPrY/+unQKu5C2Ci8XoUsBek2qwWctz/7/17juv469dK31
+3K6fVqrjfyac0ovqQFcY3BHIT73kTClYxtbHUu3f/D8dNWgrijHX2hpYfdUD+wGGlFKpT//JoJb8
+0iHs/C4U1wGcSiPPINwlEEdM745/WG36z490dnZW3ubhXsM1vCJeXkUoBMwsS46dq1IzJZGgRtCr
+EvCqVOoOhksgEVTrNkiYXqzh9yp0JNxUapLJuQrNER0JpNZMetoNmiMvvp+tZOrMLFXxGgr9nR6k
+hIm5CrouaArraIpA1wTlqsPMUo1oSKMj7qZWdzg/W8GlCQa6PSTTddI5i9aYi+aIC10TIMG0HNJ5
+k+awjuPA2EwZKaG/y0O15jA539h3d2ujT6+hsbXHQyjw1ovh0+k0p06fxjAMrtu5E5/Px/LyMsVi
+kd7eXqrVKqdPn6JYLLF161aEEDQ1NaHrOhcuXMDn89LUFCOVShEKhZibm+XChSkGBgZobW1ldXWV
+aLSJ1dUV2traLumIMpk0p0+fIdrUxObBQVKpFM3NzbhcLkzT5OzZs2TWPbk61y0cfD4fxWIBvz9A
+oVDA6/UyMjKCEILOzg78/gAnT51CU1USiQQTExO0tbWxdetWVFWlVjdZSS7T2dnJ9PQ0586do7Oz
+k0QiwfDwMIZhMDDQj+04zM/P093VzeSFC9RrNfr6+/B6PFQqVVpaWtZNS08SCgZobW1j7Px5wuEQ
+O7bvwO12Y9s2o6OjpFIpOjs7iMcTTE1N4fP76O3pQQiFo0eP8uBDD+LYDp/4mZ9B0VSam+MU8gU0
+VcGybc6OjOD3+RjavJlSuYSm6aiqyvETJ2iKRunv7yOTydDa2sbS4iL3f+MbzMzM8PGPfZy9e/e8
+5dfTRbzTqwg3jvQc2fJfqE58BvkS+ZPQQDPAaIbgAPi6wC5DZQUiWyGyA7T1qRzsKkz9Hcw/DNJ+
+lT29ftjuvsNW4ud+xuj7rfMXl+VH/6DJm//6X6nl0/fBa8iihCZt//7/qoZ+9F/T/8t1LvxR0Mx+
+90N6/pHfBtl3Wdv4fgj2w+RXXzwOQKqRRct340MoilQc05SyVEFPJB3P9n90D/7+6PfnSN8ZqJz8
+ydvd5Sf/EHNtl3BKG6RsBVINrtha4qup5t//w9aBj7xtZFO+8Dm96hs9oJVH34XM+5AbhF8FAsVf
+ttxbHjEq254U13/6LdP4XcPbi40IVqWuU7NeUrUnwZGycb9av3qEEEgkihCX1gvRWI4EoTT6chwu
+mwRYiBed3C8uV5TGNpIXDUMvtpPyxWWq0lhmO40Quqo00o4vNxltuKS/pO8N9nXxeAQQC+l4N6hS
+vIb/fbG0tMjMzCzBYIDBwc1vuGoxl80xPjGOIhQGhzbj9/m+TyN9/XinE6yrO9MSCHRB4gA4JlSS
+sPCdRorPrkLy6QYRGfhp8HaCVYLMGcD+vluZqk52s5r75z7gEsEKFB8IYae2vya5ApC2UMyFPZXq
+ibh6+kdv1CvDP69Xp/eD9F/WTnFB/GawyiDUywiWsLOteuHRj7/YWAiEsGXh6PsLI7/3qcDW3xt+
+rWHMSelpHv/NVlE97UON2LXIJ1cCrbel30n2D/LUr/vs2hO/JGqLN73yuZUIOxfX7MIvx9K/W5Tj
+D/w/YuCetzwxL6UU9VM/8T736kP/STjlFpCvlg+RqvL8T9f9d/0bKeXfvZPO+TW8lRCoiqClqREV
+KpYbGiloiNWvBo4jSWZMbFvi1hViYe0S0XkjsGxJJmfSHNBRVUEqaxLza2/I/yqdNXEchzdqQfF6
+kclk0HWdQCBAsVikUChgWRYdHR1XPAg3gpSSfD5PMBgkmUzicrleMzW1uLhINptF03VaW1re0bYF
+qVQK06zT0tL6mucjnU7jSIfmWPNr9nvRCiIQCHLzzTdftnx+fp5yuUxPzyZcrtcndQ6FQ2/IxuKH
+CVdHsAQNUjX9DbAqXKnLMiF7DlLHoKtrfdmrkB2h2qjBnKNGk1LoOcVKdwor1fZKBqQvhXRstSa6
+4sni0wk7v1Roa2srQw2uWnAukQ5+1c5/Rs8//AvCzoc3bOaJQ6AP1s5s1IdAmpffpSSKILvHW378
+XuAKglVY+nqzJ/XNm6gvhNTaBZ/zTPcWqfr3CVlsBlddLZweZmL2aP3oDauK1lS1wwdHXD2/Nfy2
+ViqaJzXVXu24KuKKo2nm4s+XK3/3TeDYmz20KzDxKy69Pv4xYeeuarzCNtt0c+JfcPgj3wSupTZ/
+KOFw/Fye1mabrb0+jpzJ4dIVIkGNcFBncbWGqggiAQ3Ww6GW1SBSEvAYKvmiyTcfW2Wox0vAq6Iq
+BlVTYloOIZ9GtmgRjzTmMFzOmAigNebGsiWLqzV0XRD2ayQzJi5d0N7sQlEUVjM1vvLPK9xzS5SA
+T+X+h1Pcc0uERJObXNEiGtTwuFUyeZNq3aE53PDHqtYcfJ6GLYPHUFhZM7Esh9aYm7GZMiG/xtY+
+/c2bwmMDnD59mmKpxD13383hw4dJZ9K0trQST8SZn5+nXqvT3t6O4zjouk4ulycajVCr1QiFQmSz
+a3z5S1/mPffczcjIKNJx2LJ1C91dXQ291tQ0plWnu6v7Umrwa3/zN3gMg/b2djS1Mb9fvlggHApT
+KpUIBALE43EWFhbI5XN0dXYRCASYm5sjXyjQ3dlJKp2mUqmwadMmfD4f0mk4sufyOQyPB+k4SCnp
+7u4inc6wnEySiMeJRCIsLy9RKBRJJBIEgwGKxcY+c7kcoVCY5eUlcrkc3d1djI2Nkctlec97WgBY
+W1vD7/dTKpcx3AaVSpn5+flGdWMuj+U0XvYz6Qxut0FnZwelUonZ2Vm8Xi9tba0YhgfLsnjyqacI
+BYMMDQ2xmkoRa2pCVVU+9xef44Ybb8Dr9ZLL50nE4zQ3vzZpu4bXh6uPFVqvMWeRtF+9jVAc27P7
+25beec6RalK629dM966sY3SXAgu/+UualWmHl2jFhQaKBk4dLnNVlopUAiGzbLa6NC0gpZzi6E0b
+pIKURhrTqUN58WUrHb9ePfu+VyRXrhC0v7sh2tf9oHrArl9FNM7WFLkWWa8uFEIIpzD+B83u/KMf
+0yY+fR9om8Hy4VTdilNxcXlyagjUD2vV8xWEaiql5xec5JceKZ7/t1/wmTeMiG0fqb/W3t8yKHrj
+836527VViGlm/icWM4uri5HWpevfQosN5s8I4c6GXo8Xm2PlE8XOn2xLp/9iNRqNFq5Fsn64IIRC
+X4eXE+fLhP0qhZJNV4tGOmty/FyeZMZEERD26ziOxFEsVvN1En4v7XE3vR0NXVXdbAjbdV0wtVhl
+fK6C11AxTYnLJWgKNrRPS6k688kag902uaJFtmDR1eJmbqlKMmPS22HQEtVRFDAtqNQcVtdMZpZq
++Dxqo+owW2/YQqjQ1uzm9PkSrc0uFldqtMXdLKxU2TXg48iZAjduC7CSrrOwWmNhpUbdlJiWvLJw
+503G4OAgf//3f8/4+Dizc7P09PSwvLzMCy8cY/jMGbw+L2eGz+DSG/qno0ePcv0N1xNcj7zU6yaT
+FybJrq1RyOdIJlfIZrMsLS4Rj8d59vCzKEKw1LfEoUOHUFWVUqlEKBTCH/BTLJZ44NvfprOjg9nZ
+Wbq7u7FtmzvvvIvFpUVGR0cZHx+nu6ubEyeO09vbB9LhO995kF27dtHSksDn82FaFn/911+hvbOD
+hfkFEok4tuOwf99+LMtk5OxZjh17gd27dvHggw/R29fLqdOn2bN7N+fOneOWA7fw0MMP8Z6738PS
+0iIjo6OMjIwQDocxLRspJY7j8Mgjj3DgwAFOnDhBe3s7F6amqFbK7Nx5Hblclnrd5MknniQcCVMq
+Fjl06FbOj5+nWCwycX6cD37og2zfvgOASqVCIZ/n1KmTRJuaEEJh29at5At5mpqiPPbYY2iaiuNI
+7r77bpqamt66C+OHABvHm8X3+u/3yptJJbJWDbz379Kd//C1TOffP7zW/P89X/R8cKKi7FkGy7q8
+MdByCK777QZJuqIzKZHIer3uH0vhheqVbVxh2PxJ6Pnxhl3ES+E4mrSKkQ0HqmjQ/h5ovb3xd2gI
+YntBfWnKQDRIl/IyfiolpvRHl5eLW+dX8725yc/f4Fn+L1/QC0/8kbDWbhXWaouw1gI4lVfIP9hC
+2DmvsDIhYaW3KrUL/9K79NkHrMpn/6By4ic2bbzN24COu6Hzngb5vAxSVWoTNymltda2pWyblPKt
+zUWIjTRXGqjuxs/LIBEoWk02tViW1VMoLFwrh/lhg4T2uBshBCfOFQn6VPwehVTW4sxsnuW1KtVa
+wyPrwkKVxaSFU1M5db6I11AudoGmCSJBjUigMdlwPOJiaJMXl64w2OWlVLNJ5SxWMibZgsWZ80VW
+MnW29XnZ3ufD51Gp1RtViHL9HupI6Ii7KVds5ldqtDTr1C3J4mrD42puuUY6axEOamzr9bGWtymW
+HIolB8uBtbxFvmSzuFpnLW8xvVjDeptqndva2vB6vTz11FPUa3U2dXezvLzEudERpqencRwHy7RY
+WlriuaNH8fl8fOfb31mfk1Dg83lpaWll+/adeL0+du7cyeDgZpaWlnjmmWdJLiexbYdcLottNw5S
+EYJEPE4iHkdVFRQhOHToEIZhsHPnTgDm52cZHx8nu5bl5IlTHD9xgng8wR133EFLogW32838/ByF
+Qmn9M5FUqjUO7D9AIBBgaGgLiXiC6elppqamyWQyjI6MMr+wgK7r3HXnXaxlMqyupslkMtTqdZLJ
+JLnsGhMTk6yuphgdHaFQLF56ckopWV1dpVatNn7Wqvi8HtLpzKW5C3O5HOVyif37bsbr9TI9Pc30
+9Ay3HLiFSCRCtfri81AIQa1WxzA83HTjTUjHWU/PtuPxeDAti1tuOUitXmNubu4tvS5+GLAhwXLU
+cAmUV/53FKqDUF5X6koKxZFoppQlR7GWVMVOaYpSUYWoXDkGRW1UJ/q7X0ZsXjYMIYSqvAKrE0pD
+dK95eV2va7YFhQtgFRt/az6I7WlEtS7r2wvi5dU4ElBUW3Xr/vw/b/ct/+F/VK2Fe5Hm91a2Iy1N
+OJVWrXj4V93Fxz5fO3bXRzKZhzd0CnxMSq008lt7rCObPyGPXvex6vCn3l2a+PO92eTzvSsr8uVM
+6I2hNN/QqOnBK1YJbAVAynJTMpl8e1+HhAotB6H/p6H11isJMSAQwrZtrZanScpX1W1dBimlUpz8
+sx21Ez96n/XCHT9mHbv9I7WT936wdO6Prpdnz/7gzMT7Qw5VVejvNBifq7KpzcBrqHgNhd6Yn3jA
+TWuTi82bvMQiGmYdElEXuq4Q8jfeHYRoVPOtrpmsrpnYDnjcCoZLwWsoGG6BW1fIFhv6rosic79H
+5fxUmXNTJYI+lUSTzvhMhUqtcdvVVAj6Vbb1+zm4O4TPo2I7sJIxiQYbWixVAb9HxaULHClxuwTl
+msPJsRKW3TAmLddsQj4VTRVoCo0KxLfBve+mm27iyJEjDA4M4g8EMDweOju7iMfjNEWj7Nmzh87O
+TvK5LFu3bsE0TWLrOiNd0/H6fJw8dRLHcQgEAvh8XlxuF5s3DxIIBGhpaWHz5henpdF0nVRqlYWF
+BQrFIqFQCK/Xe+mnx+OhUq2yuLBIPB7H4/XQkkgwOzvHE48/Qb5QoLe3l/n5BRYXFxqfNeLS9v6A
+f30cvkZ16MQEgYAfr9eLIhQCwcYYdU3D5/dRr9d54snHyWbXyOXypFIpmppiuN0GiqKg6zpCCBRF
+IdrUxOEjhxk7P4aUkubmZnw+HydOnkBK0HUdr9eL1+tb//LQFI3yzDPPMDM3y0s/YF3X0V06Pn9j
+bIbhRggFt8tNIpHAMus8+eRT1OvmtRThm4ANU4QV78GHvOVzPy4c6+JMlxZoNUdvmXfc3eccETmr
+VkduUs0LdyDt1/Hv+iInE0JUFEWpqqpaU4RZZL0i58UGV5etsZ1XyAnJS9+uhJDyFXcggMJEQ3Om
+R6Hm92r9AAAgAElEQVQ8A7PfgupLiuOkDbX0xn1LId21k6FA8v/6ZbU+dcvG41rfj9Bekm5bD+Jt
+NMmsNFVhJd+ll2p7g2P/6muF8f/87wMDv3JZtd4Nw796u5H7+p8Ip7AZFMtVT2al8u2se1kWFCe/
+Zj8dX7aDtz1bCtx9f6TnE1kppWDkfp3c/VdGmVq3STb9bp3nbpYb3o1TxxtfG33y65V7QgihmGZI
+Srn6tqXeFBc07YHYQXAdgZXD4FgbNjUb5jgbV9VKKTi838gF7mnzyvG71PLzW3jK3+ZRApsFThvS
+0gEUqVpa4fiKtP/DmHn04FEr/lN/69n0qak37wCv4Y1ASoex6SILqw6RkM7UYg3bkVRqjZvKUspk
+MWWSzlvYDmi6IJO3Cfo1jgwXG6k8U+LSVYYny7hdCiG/hqYKckWbctXm3FSDNOUKNsspE5erofGS
+FYfF1Tozy3UCPpV01sTvVTk2WkRVBdWag2XDXLKGIyWFok2l4lCpOZyfreIxlIaxqYRjo0UqNYcL
+i1XyRZvVNQuPWzC/UieTs6jVHZojLjIFC5dLectThABDQ5v5zGc+w8DAAC6Xi7vfczeRaJR4PE6l
+UiESibB//34GBgaIxWJs2tRDa2tDk+Ryu/nAffdRq9XoaG8nGAyiKiqtra2Ew2ECgQBmvU4kErkk
+Ev/whz5EJpNB0zRaWlpoa20jEAhw113vIhZr4sCBA3g8BpFQmEq1yt69e2lra2Vy8gK1uonH4yUR
+j/Pe997DwMAgALqu8v73v49QKMjtt91OKBQikUhgOw79/X2srq6yY8dO2tra2FbZhqbpvGc97eb3
+ekhn1tixfQd9fX0oikKp1IhChcNhVFW9RLBuv+02pqam6OsbYGCgj0xmjW1btxJPJPD7/Ugp2bZt
+G6FQhH379mMYbhKJFk6cOIEQCsFg48VX0zT23XwzlmVdsr04cOAWPB4vkUiY1tY27rrrXSwuLtDS
+0kprW+tbe1H8EGBDgnVuy0ce3zJc+oxefu7HFFl3297dM6beN1pz9y/YxnWVura1GJu5PaGa01ym
+m7pKOI5jeTye+Wg0WgQkk9YGOb43D1K4alKPzirmfPuGJMyx1qsG1UY0qzB9tV0LR1FkKPk771fN
++Y3JlREDb0ujGtMdgaa9UJqD/ASY+QaRk/aGREDY2ajqlD7jXf3jgpTydy4anMoXPqfb9a/9hGIm
+t4MjAJew814BbS9uW0Zkv/Oj/upMV/nUJz9XP/n+vaos3YuSar8stSYRpGZqztqRx8rhg9/y5p8e
+1Zm68fKBvNLRC8cy+kelFnCQUL+aEqE3FZIGqbf5Xq7TqakpY9Pcrb32iXfvVFj6mVD63+2UwhUS
+0jKQpqLYV2oOBTSB2KKVj94jllburJ7+tZ83dv7phTd8KNfw/YdQ6Gpx09GioamNyj0hBIpYtzrY
+xYt2DUK8+Cvr1gfruHlH44HWsF5oLJNSXrJQuPSTRj8vhyIaKUFxqY8Xx2E78rLKspcM5xX3JdYb
+Oo5E7BKXbaepGw7hTYeuu9iz50W/pK71Yqhdu3Zd1u5ideBLtUBCCDZt2nRFn8FQ47zv3bv3inWD
+g4MbjqOrqxEzuDhZdDh8uVJk9+7dl35vexnhUBSFnp4eANrb2y9b1xyL0d/fv8H+Gsc5uHnzZct3
+7rxuw/EBJBIJEokXJxSJRps27BugpaXRrlwuYng8fOAD9106V0IIWlpaLmvf2to4pnC4kQjp6+uj
+r+9yd6Jr+P5hQ4J1vbjeBP6n/PqPfZveu5S16Ht76sLdSDPJOlBCse03pK+p1WrWxQo5+dyWN9LV
+64aQolzxHLzfY2UNxcn2CSvVjHRelh5avwtJh6sXTit1oQa9SuX0lg0d4QPdDSsLocHid6E43Ui3
+IRt3S7vaSD06ZqOS2ixeuQtpKsIpf7R++uNnpJT3CyEsQv+oqKmFzlevwrQRdt6vVs99XDiZO9Xq
+9B6k9Yr1uarg/d7y5E1W+M7/odXO3yasTPdrHb2jNZ+t+N//gON4bCHMH9hphObknKflxM/uZ/ld
+75Iy83E191Dr+iMNITeOgF0OCbLmUmuTt1r+8o9IKT93TUD/zoOgUQkohUK2YBIN6tTqkkLZIv4W
+TSlTqtgsrNZojbnxGSqlioXPq1KpOdiOJOhTyZdsAj6NN+L+YNkSKSW69va4uVcqFcbGxrAdh77e
+HtxuD+l0ing8jmma1Ot1bNsiGGw8+IvFAsFgCE3TKJfLzMzOUK1UiTZF6WjvQFV/cLy8HMchmUzi
+8XhwuVx4vV4WFhcJBYP4/VeqNyzLYjW1SjgURtd1pqamKJfLtLa2EI/HSSaTTE/P0NQUpbe3l3rd
+ZDWVYVN3N5vXiVw6kyYcDiOdhsXFxf2k02ny+TyVagWBwOMxMAyDtWwWgaC9vR0pJdFolEqlQrVa
+pampiWw2ixCNFGmtVmV19cXPzjRNAoEAU1NT5HI5+vv7L00AXamUqVZr+P1+1tbW8Pl8KIqgUqkS
+jUTJrGWQ0qEpGiO5kiSZTBKLxUgkEqQzGZaXlgiHw3R2dCIUQaFQoFyuEI/HL3tReNvf5V8Br1pF
+KD5yvy3l151KKlXUTHN93huBBAfldZRrvdMgbFEJffCsGbjz943Ctwfc2b/9PxRrtf21N7zUgUQo
+Nhc1bOvaHUcJzQlp1RRrefdlzSXg74T+nwLFDee/APnJVwnTK6C5wZNokK1q5rK2wkxv0vMP/ofa
+6L9dBb579eMGYee61UruNckSEkW3pj6glI4LHPs1q02lGk7XIh/5Ujn60Vlh5l7xyKT8PY2J9NXd
+HetNkq2/e4mIv5mQUsr5+cOu6umfuk1/Zt/HhCwfElam4yUtvpdeEUIJra6WEsvLy4VEIlG+RrTe
+eZhdqvL4sSzv3hfFthxOni9xy+4Qfq+KrgkKJQspBQG/hmU5lMoW3vWJoOumQ63uEPBpaJpCuWJR
+qTkE/TpSSoolC5/3cv+qYtnCshx8Xo3hyRIrmTrxiIu65XD8XJHedg+jUyUQsGvQz5nJEvt3BDFN
+B00TeNwqNdOmXHUwXArW+jugpoBpS3xeDQGUqza2A0GfytR8mbWCxdbehvjepavU6jaaKlDVN5d0
+lUolvvGNb+A23Ph9fhQBLpebz/3FX/Azn/gEUjosLCxSKBS4/fbbQQiOHD7MbbffRjQSZfLCBR5+
++GF6ezahKIKmSATTsgCBpmnU6zUikSi2ZZPNZ3G73QT8Aer1+iXLA13XyKyt4ff6CQQbnlgXjSlN
+0yQajVApVyhXykQjURwJ5VIR23EaVgnVCuFwCE3TyWYbYvpIJLK+jwyRSPSSRUSlUkbXdGr1Gm63
+m0qlwtraGul0ihMnTvK+972fxx9/nL7eXgYHBwiFwpcRxomJCb7yla/w4Q9/mK6ubr5+//309/Xx
+5JNPsm/fPk6dOkVLawuWZRKJRHj44YfRdRe5XI7Z2VkGBgY4e/Ys9957L5lMhqeffpq77rqLTCbN
+M888S2dXJ0ePPo/P62HXrl0cP36cpqYYsVgTjiM5c+Y0H/3oR8mk0zz19NPs37+fp59+mjvuaKRF
+Z2dn+fznPs+/+PjHKRYKmJaJWTdJpVOoisrZs2e57777Gm3n5jk/Nsb27dv56lf/mne/+93rhNpi
+/759/NUXvkBzLMZHP/pRHnroQVRNY3F+gfff9wHOnDlNLpcjn89z993vYWBgkG984xvk8nl+/lOf
+wuPxIBBks9mG43xT02WRv3cCXvPBKYSQZ6VMRZaWdCGEX0rpKJZaUqkX1nVM70zq+FqwqpT9h5Ys
+Ry25c98qwNUbkEs1PGdGPvh30spHFKfiUazViKP5i5b39qe1woM3C6fquWwDdxgGf7aRHhz589cg
+VwBOw2/MsSHY29BpVZKXtRBWus9VeOjXVuaenSb50CKMX96FUBrCfKvSiIx9T3AMpXbu/cLJv6ZV
+r3CKIa0yvFurTx2xSFSEMIVct5iem5vzxFY/HdfsfE/95At3q9bSINJ+9bu6lALFU3VOHntcPrPp
+2VzHp2fC3b95xRyS3w9IqUuo++JL/+Y39MqJXxSOGYWr1BYKlUbE6koOKNXISl3tG69jtujCjOdy
+s3PAm3IM1/C9wXYkw5MlokGNyfkKLVGdifkKigKGW6G71eDw6TzdLW6GNnk5eb5ItmChqYKOhJuJ
++Qq6qtDWrDPY5eWxF3JEQzp9HQanxkvU6jZeQ+WOGyP4PSpLqzUOn8ljWpJ4RGd6qUrQ19BtubRG
+Iu/CQoVU1sRjKAxPllAVWF2rMzxZJp012XddkJPniwgEPo/C4mqdXZv9FEsWs8s12uNuokGNY6NF
+QgGN9riLStVhdKqMI6FSddg95Oe5M3lu2h4gHHxzo3UjI6OUyxXuueduqtUaUkrS6VWKpRJnzpwh
+FAqxtrZGNpulXq+DEKTSaaz1ssdSqUQul8Pj9eL1evnHb/4TKysrVKtVvD4vbpeLvXuvJxIJ89jj
+j5PL5XnvPffw/AvPY5kWg4ODnB8/T6Vc4YYbbmDv3r1omsbw8DCPPvoonV1ddHV2cuTIERwp6ezs
+QFU1zo2OIpHougtFCK7buZPmeJxvfetbqKrK9h07mJ+fw7YdDuzfz/bt25EIHnzwYaLRCM888yy3
+3XaIiYlJ/H4flm3z9FNPsWnTJpaXlpmZnua5557j1kOH2LWemiyVyhx9/nl8Pl/DVNXtIruWAdFH
+rVYjmUyyuLjIzut2MtA/wOHDh6nX67zvfe9nfn6ef/iHf0BKSalUwu12s5JcIZNJEwgEOHXqFEi4
+8YYbOX36DAcPHqK1tYVv/tM/0d29ida2NkqlMpVKGU1TaYrFqFQqfPazn+VDH/ogLS2N9OLi4hL5
+QoGpCxdIp9MYhpt0Os1HPvIRXC4XX/7yl5mdnWXHjh0gJcvJZVxuF8nkCsvLSebmZrnnnvdy9Pmj
+qIpCLp8jlVplYmKSW2+9lQuTF8hms0zPzDA4uJlMZg3LshkeHqZYKlKrVhvXg8cDAjJrazx7+Fnm
+Zud47733snPHjnVD3bcfV+WDtU2IupRylkbiyhFCOPLItvIVwvQfMAizoihOTbsag9OXbIWttV1Y
+C//GN6RmND5FqyKkGnCMymPxkLnwS1dsEtsDoc0w/52GgP5q9+bUoTADif0NomTmX7oSUR0/FEr9
+yY8vt//+V1umv3o5YVFc0P1hKM3CwsO84gclWa+KNBqu9ZetkwJpXt3rrbQ0tTZ9g145+VXL894y
+mMIwoqXa2GcGW/InPqZYyfuU+sxmQEO+gj3IBlCRH0KotcDiV/7ReqbluzLw7sl0/F8fa2m57jWM
+2a4OEk0qiqVFFz/1YVf5+V9BWsbr6kDRG+RKXmlTZrmHniwHP7AszLJiC1Wt1WRUSpm9FsV6h0BA
+JldnerFKd6ub2eUaXregLebi3fsifPXbK7TFXISDGghYTNWZS9bZ1O6mWnNIZkyaoy56Wj1MzJY5
+P1smHtU5tDfMWs5idqnKnq1+1nIWtZqF36MyNlOhv8OD261wbrpEokmnq8XA721EMKJBnedHCrTH
+XfgMheeGi/zIzRFMu+GpZTmSyYUKqiLYMxRgabWGS1PY1uvlueEC4aDGzFINXYPOhJu9W/08+nyW
+7laDrT1edg74OXo2z+HTeaQEr+eNTZtyNahWK3i8BqqqcfToUywvL7NjxzZ2796FlJIzZ87Q2dl5
+Kc0j1x+OF2+TQgik42CaFpbtUCwWOXToIKdOnWJgYBDDcDM+Ps7g4ADRSJQLFy4wPj7B0uISn/nM
+v8TtNkilU6yx1nD4WRevHTt2jN27d3HLLQd58qmniCcSXH/99TzwwAOoisJ1111HtVpFCEGsKcbs
+3AyjY2N4vF5isRilUgm/349lWthWY75KVRUEgn6ee+4IS8tLvPDCC4TDESqVKpFImC1bt7J//35G
+R0c5dPAW0uk0S8tL7KJBsJ599hkmJyfxeT3Mz89RKhVpa2+nWCji8Xo5cOAAwWCAR777XSbGx8nn
+CwwNDeHz+VhbW8Pr9VAsFi5FckqVCqqqoaoqS8vLdHR1gpQUCnn6+/uZmZnG5XLjcrsx6yZzs7P0
+9PQBAq/XS1NTlKGhzdx0080oioLjOCwsLHDrbbeSL+SZmJhgaGgzoVBDND8zMwMIQuv6OL/fx8rK
+Kvl8gYMHD3Ly5EkGBwcRQuHBhx6irbWVldUVzp8fp1DI88QTjxOPxwkGAywuLFCtVGBdoP+lL30R
+j8dLqVwimUxe0petZbNMT88wOjLmHDhwi/JOShde9YNOCCGFEG9JuuadD4FESik1R0rNkWrAlprH
+pp5VcaqXm24JFeIHGr+XFsC6wntTongKUvFnQblS4GNXoDgDkW1XciSn4lfLx9/lqi8MSEW/8k6p
++6H5xg3tCYCGP1TLwYZf2MAnGnNMXlbJKSRC31h0tBFFcKpezSmoIITU/UU9/dk2Lf3A57Ty8d9Q
+alM7kI6roXVzuPovqSItr1Id+UnVzHxezT/85aaZj/1OduarG/uYvV6obieU/O1b9OLTP/e6yRU0
+ooPOleRKqoGC5Rp8wdS7yuLSf/zrm5LiGt5sSEamSvS2GXTE3ShCspwxKZRtTo2XcbkU/N7G9DcT
+81WyRQuvoWBZkkRUJ+xX8bgUNFXgSAj5NVI5k9GpEoWyheFWkA60NLvwuBsEKuhXmVyoML1YweNS
+cOvKZVqScEAjX7SJBjQMl0K17hDwqSys1CmUbExLUjcdXHpjomhVFRhulWq9EaHSNYFlOyg0lrv1
+RuduXZAv2xRKFomIizPjJXo7DFz6m6/J2jy0mUK+wJHnjlx6SEspMQyDgwcPMnXhQsOeIBLhyJHn
+OHzkMC6XTiDQ0A0JIXC7DQy3G3u9Is7v8+MxPISCIQzDg+M4nDlzhmKphHQkLl1D13Wef/4FZmZm
+6GhvRwjBsePHLvlEJRIJxsbOMzw8jKoopFZXOXH8OG6X3jAp9fvxeL2EI2Fcbhcg6Ghvx7YswqEQ
+/X19bNq0iXKlwgvHj1E3G/eBrs4uZmdmuenGGxkbO093dxeapmG4DSzLZHx8HKEIfD4fLpf70tyR
+y8vLTExOsnfPbtrb2skXCpw6fZpYrBmPx4PhdnN2ZASX2yAWa0ZZr6QcGxvjqaeeXCeMe0inM0xN
+TXH06FGqlTKp1CqPPfYYKysrbBkaolAsoCoqhmGwsLiE4TbweDyEwiGmpqZYWFzkueeeI5/LYdsO
+HR2dl1KYtVqNdDrNLQduoVwsUalU6O3pI5VO8+STT/DYY4/R399Pe3tDXeH1+piZnrdbEi0yEokw
+NTXF9m3bOHHiOP19vfT0bMLtdnNm+Aw33byPX/iFX8BxJFNTUwwNbeGTn/p5XC4XDz38MMFgkK1b
+txAMBEilUpeuL7fLzcrKCjuv28n11+/Ftt85FOXNf315K+BSJNbbE0tTHceSmpZ3dMPxyLXAFWaX
+erBhelpZhtL0FdErR28dqUY++R9t4V0zyo/dphcf/1lk/XLlY2VlfR7IemM6opdAkeUBo/Rwv2PJ
+DWSfAjytDUf6l6UYG6s1sAqQGwWzBOWlDaJrL/M7E0rDn8yuNfqUL63OuxiZkVKvF7ze6vGPqub8
+Lcg3VhBxCbKuCXOxW7OSvx6Y/7XA2tSf/nak59eyb6RLxaobevm5Q8LJb+DZpTQOSb7+S8vRmk9X
+Ij97WphZgWhovGyPJ3ctevXOgZQSty7w+1z4fSptcTfVukMooDEyVaKt2cVS2mRmsUbAqxL0aViW
+ZGG1TqXm0BTWUFRI5+oYboHlNCZpPjZSpKvNTU+HwcxSleBLiNhFa4eVsklPu4EjJfmS3dBcAXVL
+0tthNGpfLdjW5yVbtHCkpFp3iAQ1vIYKApKZOjXTQUqYW67RFNbI5CwSTS7M9arFqaUa4YCGaUsU
+BYYvlLAtMFwKhZJNrmASCnxvNn1Xi3hznPvuu4/x8XFcuou7734PkUiUjo4uenp6+MVf+kVisWZ8
+Pi9nzgxj2Tbbt23FMBpKi77eXiq3HMBxHIQQ3HnnnbQkEng8XkLr1XChYAgEDXuD3l62bNnC4OZB
+pmdmsB0bwzDYtKmbzs5OfOuTEx88eJDTp0+Ty+cZGhrC7/eTzqS48cYb0HUXqqbh2DaKovwv9t47
+Sq70PO/8fTdVrurq7urcjc4AGqmRB+DMYAJnhsMkiUNxLYo8omjpeLW2dLQ6u7K1WtsyV7acZFtr
+2mv7WLIsW7REUaJkKnACODOcGQzSDNKgERupc6quHG769o9bXeiIATAJpPo5p4CuuvdLt8L33Dc8
+L5qm0djYQLwmTiKRoFQuU1dXSzI5z8aN/XR19eDzeTdQbW1t/M2f+Rk6OjrYtGkzPd3ddHVlCQYD
+NLU0IwQ8dugxGhubSDQ0VMVRdV3n2U88Q0dHB+Wyydj4GNNT01iWRSgconNDJ1PTU4yNjjEwMMDW
+rVsRQnD+/Hmy2SxPP/00HR0dhCMRkslkRc5hAH/ARyFf5LOf+TRNTU3kcjmee+45FEWhv78fVVFQ
+FC8W74knHieXq3gyhGDfvr34fLfvO1VV46mnnqK1tZVnPvEJHn7kEXp7e4nGokxOTTI4uINNmzZX
+CVk4HOGrf/Mrysb+PmGaJolEgs6uTgKhIPV19UQjEQY2D5BKp2loSNDU1MwzzzyNbhhs2bKFhkSC
+H/mRz1LIF2htbSWRSDCwZRuyUi5ISkl/Xy//7utfR9NUBQSFQvEjyZRdDT8cBKs4q+HmPpKS3qaU
+hbbGxptCCFeeeFhFiKXmDKF6pKQ8B4WppQRGGCUz8vE/TSX+3imJlEX55cn4rb9Ro+ePfglp3761
+tPNePFbn5yF9Zamr0MnHRen6SsVPAKRnxYptWjn2Qr9zZ1jbfSgkQl2qb6AGoPsnvPius/8MyslV
+mzpuWcdNJ9Z0vyoGqH5P0HU17a87QTqqYqW+Gp75g7S8/l++Jrp++r6CzCQ4wfR/26Q6k/uXH8Co
+gVCzJ9Ph3GPtauEzXd/Gk8XA4IxiZ1QARVFKuamp7P3Mcx0fFARdrUGKpgIC2hv9t5OH5W05g9qY
+jhCeOnhNVKOz1U+lFla1p3hUBwHb+8MVuQTveFfL0nMNQ2HXQBgkCGVliIWhw5ae2z9ljXVefFQk
+qNFWUZ1fjGjo9k/44MZKv8vO6Wr1YlVqIjply2X4VpG92yIk4vqHln3V3t5elTbwJOduSzLs3n27
+cPChQ4eWnAOeZMOjjz56W4aiMufwogLONTU11XEWzqmvr6erq/u261HKJf2Gw2EOHDhQfT2RSOC6
+7pJzFiMe94zmDz30UHUu7e0dK/oNBAJV+YmFNdbEayprqa+29XB7DXV1dVV5ikAgQG9PL709vVWX
+5oKW1eZNm5dch/379y+Zw87BwSVtGhoalxyPRCLV4tcbKvFnCx/4rs7uJW0XNLUWYBg6mzZtAqC7
+u7v6+o4dO9guty+ZF4Cuazy0f1/1hQXXZXfXbRtCx4YNLK7X0t+/VNKiv69/yTVraV4qPWH4jKpm
+WjKZ5CMRelsDP4gESyzWNNJVlLJ/14Av/efLLBAfmqFAVgdzzVUGrRp1VsxJInJm6NnXhZ1WBGDL
+UKlQ86XvRIrnDyrOfO+KfoKtnjVqEcESbiGg2lPBtVQ/UQJeaZsF69cKd9YdrpMQUuIzl/YsPNKo
+6NzpQ+wqtbbl3/mqln31x4QsLrXICdUrpu2atxXzV4ytVGpAVuowLydh0vSr5UtfzWaG/kpK+Qav
+PL72OtaAEKpQypfbhT239Bur+qDnJ7yYtMyVNVqDVCMZhFEW9lzCyyxFIoVw9aYLpZqvviSs9IL/
+RxiGm+3t7f3wajOuY00sbAICaKg1KJfLGLqBpmkUiwUs28auZKkJAcFAEL8/gGmWkUh8vsC7DfFA
+Y6DrHqtbvE9Yi7jczTnLN+67bb/4+Wrtl/d7N3Nc3uZeSep7OX+167DWa3c6vuLc97CeuxnjveKO
+fUuWxNY9SPiBI1jCyYaxJ4JS1yWW5kbSJwJG4eTfBrnUzq1olQ/Ng3fRFyDVhpmyUrcosrwgCnVf
+OB6d+NUhEL0r5i7EyrqKuKjk9wpFrlpCB4Bwl+fWmzl+T/NztcYZpHrvCp0AWBQjnzvny/3l82r+
+zHNLDknXE1R1rbWtV1KCU4CaLRBq8+a+zFom7Gy94Q7/jenp6TGt7XOztbP/5p5m6Eonosn5j604
+YEQgsRcmX7sz/3TLflePzaPVzyKlkHrzhOtrv1YIPfvHOf/HxxbKQKmqaoKWXo9ffBAgqunsifoE
+bW1t/NPf+Kfs2buXnTsHeenwYaKRKN///vdpamrylMLDYQ499hgnTp6kt6eHHTvWFon8wcCDcXe/
+jnX8sOOjUZ27F6zY4Fz00tX9vty5moB5tCEy97WfwZ7ds+RECdRsBiO+Wgd3gTv9AC1Igb0fMDWo
+xpALIUShOR4fF3r9jJf+v3xoFSJdK+anWJPbcM0Iqy5WgDUP6cuem3E1CMNBGMsOKtL19R5zFb14
+j4uqLMYSBWPPnKMmviHV2DI/ovTcbnd0DVZin7LXoXanpyGmLo9Bd1Wt8Paga6bqHf+ORsRd3H4u
+GkDBDijW5EqJ5LpdnhVL0b26mGv2YBqKOdYhnLla4STrhDXaIsyJJiP7Sp8uxsMVmQoB5Gtra9+X
+rMd13D8MwyCbzfHbv/07/Na/+tfytde+TyqdIp3NMDw8zPmhIaKRKJ/4xDP09PTw1FNP85Wv/BS2
+4/B7v/d7+A2DLQNbPuplrGMd6/gBwQNswaqYLY2V4UWadfWztSOfjIIIqfbMINJcuvPqIW+TVML3
+x6+comddWRUS4WYDoFf0k+7/EirOfJ3fmYrnIA+epUMIYctjG9eYtQ6122H0r5YEXkvX0VHkGuxJ
+8dTis9dW8EapBPOO3vOKbbS8pbhSUdzZ7YrM9AO4om6oEHzqT8Lm76xeo+EuIMxRUe77x6/q73md
+u7EAACAASURBVHzheziZz9/Xm2HnYf4stH0S6gZh6uiidUgUe65elWm/K0K1El2/+3tzseKPKhTN
+I3/RPvA3Qu7WHTi3FCxUQXFStWrx9D5VnN+ujqVq5jt+5xsmgbzl8yUXyhqt46ODYRhkc1nOvP22
+WyiVhGlaDA8Ps3XLFkKhMMeOHuPJJ5+kUCji8/toaEgQDIZobmkhmUzy2OOPo62SrLuOdaxjHavh
+AbVgVYQbhQ8S+714nKXHVdUcfVI1Rx7CLfmXNyXS6W2O3KdHxrUqxZ0dVu6sEsWZb41mf3ebv3C4
+PlA8XFd468tN8u0fT1hGS2yJMxvAynqEbZmfu9JXxJ/55lMeUUO6hYI3YemuYTYRoNeAdo/x/K61
+MvZKGNly/Iu/nmr/j/9itv27fzyz4flvzbf87m+m6//BL6fr/8Evz7f8p39TDjwyUqlteF8QQijR
+6P45K3zw96UWXSWNccnZaxfgTg2BFvDe0+WzESTCmT/aDQFc170HxUQppNDLUk/cXHFo9qSnOxZq
+h+4vQLDRs2YJ5XbE3Z24orT8WuHIl6Njv/isLuVkRyz2njId1/H+IJczaWps5KlnnhaXL18WI6Mj
+jIyMMDg4SGNjI5evXKGhoZFkMkkgEKgGNZvlMlu3bqkqda9jHetYx93gwbwdc1ww097fsY0Q6fVc
+XHe71RenYPwwtD3zrm2kpkgUbaXW08wxT+DTO2vJIeFk2oIz/+Jf+/XGMdRAEdeVjsRVtEhaOoX4
+kiFdy4vlaX4Cgs2QunJ7TtLSlcLbu1W1/N8dR5gCkFJq8rVog1jVICXBTK4QBBVCuPdqG5JKIJkN
+//gRS+nLqc6EDmCpzTkr2FGJOrcwnKnInfq4q3GkFOn0rVf1K1feIP/259Z0CwrNBkdFrpJ1KB3v
+UTPgxWPlRqvXUEgropnnOiXaG6u2vQMESsZR64+o8NCSA2bGqxUZ3wrxQdjW7FnRzLQnmWFloTQF
+ZtYjYquMKtxSzJd79Weik7/65zT+57svE7CODxAmiqLwuec+J578+Meratk9Pb2USiV++itfoaWl
+mVwux759+6r12/r6+ohGo3cVAL2OdaxjHQt4MAiWWLYxCiB9EQojEGyDrufg8m9DYfrdSZYASrNw
+4489chPbeMfTHW1j0THaTyrl4aXBFfkxcCzPcqL6lrsMBW4xopRvbFrSZtVsfumRtbZPeMHm81eW
+rEFxMxtjE7/4mUzDP/0Lx1fr2ue+8DEVMbC6icT0rCvLyJdUwknuUcVSqokUatBdXJRZyrIrhFkU
+QpQMwwjopqXflwhUFfVYb392f7g89FPSKW0Wt2OSVpmQdWcxHul6FiV/vUewbk9auLalgX7PsbtS
+Oq5ldF3T1PiMcOYT1QNOCa59E4KvegKvvlqo2+2NLzQvizM/4hGu/E2YO+W5YZeRR+GkG4TM/+js
+7OyolHJyPcj9QYAkGAwSCARRhKCxsQlN04jFYjz11FOAl8be3NxcbbF584dbjH4d61jHDwceCIJl
+i3hKQ7gsuCwFXr2+4d+Hzs95Ok79PwNX/iuUZysbmQBp3yFQWsLscQgkWMufI4QlbK236FJzDKF8
+2VMZX5hUzotbivZ7j9m37z/5ppz0yuREusEILrFACbcU96X//Ofq8keelnrrddW6sUm4+c5VZusR
+q/zIiiOW1nhEs5OD3OsMRbXenhBCFMrB4Fj3xESRgQEHUHNjL9cIwX0WMgwST/3fh7T8G/+7cNKb
+F0tr3Dsqb4vQvMQFseLofZFAAUox9hOX9OLZF/Xiif9liSCqwNMOy095ge6Tr3kyGUaNZ8EKNkHT
+IajfB02Pwfw7cO0PvJixKqSqmUMH7eLUt2dmpCulnF4nWR89lt8ymLakULRRhCAU9Io4320/haJN
+wK+i3GUb25EUig5SekWZNfXd27mupFh2UFVRUSn3xrNtB9OWhD6EcjfvFZZlkc1mkVISiUQwjHf3
+5tu2TS6XxVdRQA8EgiiKgm1ZFEslYrG1E6fXgmmaJJNzRKNRgsH7l04slYpYloWqariuQzh829jv
+OA5CiKrFU0pJLpdDURXMcpmamviqsgNSSlzXQVFU8pXz38scl8NxXPL5PIGAD11fef1TqXlCoTC6
+fu/Cs47jkE6nqKmJ35Wl13EccrkclmVhGAbhcPj+LcRCoKrqukzDWrDDe/5My5/8KrDoGyNh7m2v
+dl/TIYhvh/ZPVVw1GW+TKyeXbWjLUJiCq/8NnJWlTG4jjxUYmDNKR6eENXn7ttUpw5Xf9WJwOj7r
+WTXmh7xjd5LkEP4SgJCLYsMknpUj1g/BFkgvrUcoZCmuWuN7sKd2I92l6oMSL9A/3O5Z1MrLagUL
+zRX4R5Hufd9mSykdRVFme2pr04teduTJj5e5H0Kgh4hN/creQPp3/65wkp33O68qoj2eFRG5dtmf
++4Nw8BezTb/+u7GJXwqppaHPLBF4FZUHjvdZKk5VXqgY4mZOQN9PQe0gBJo8i9b1by19bx3TEIqj
+WpbVnM2OWcDc+7mAdbw3lMoOR89nKBZd/D6Fwf4QoaCGaUkiIRWkpFB2cV2IBFVcV3pER0Kx7HB1
+tEhfh2cNK1kuIb+KrgnyRQfLkQR9CrrmyaGZlsuJoQyz8zZ+QzDQHaSh1qBQdgkHNISAsuniuJJw
+wCNRuaJDMmVyZaTIxg0BCiWXXMFTdA8HFOYyNn3tKtmCja4rBH0KpiUpll18hiDgUymUHK/kTkBF
+/xBK4yyHaZq89NKLjI6OEQgE2LN3N50bOslmc8RiMVRVpVDIY1k2sVgNmqaSyaS5dWuE8+fPs2/v
+XuZT86TTaerq6qmrr2NsbIw9u/cwP59E170NulQqUSwW8fv9hEIh8vk8uZw3ht/vR0rJ4cMvcevW
+CM8++wnC4TKqqhKJRCiXyxSLRcLhMIZhYFkWhUIBRRFomk4ulyUajWEYBplMhnfOnyeXy7FhwwZs
+y6K/v5/5+XlCoRBnz57F5/exaeMmhBDkcjlu3ryJ4TM4eeIkn/70p4lGI/h8fizLQtf1Kpk8efIt
+Nm/eTDqdwufz09HRQT6fR9d1IpEIpmmSzqTx+7w1LpCSYrFINpslEong8/kolYoUCgXC4Qh+v59i
+scjk5CRnzp5l965dtLe3V98bbywff/7nf8Hu3btobW2rXpNMJkMoFCIYDFIsFikWCwQCXtHtQqFA
+Pp+vKONLzp8/z65du3FdF9MsE43G0HWdTCaDaZlEwhF8lZJDY2Nj/NEf/ZEnqNrby759+1AUBcex
+8fm8+cbjNbiuJJVKoWkaNTUxHMclOZ/E0A2i0SgCQS6X5dKlS0Sj0fsi3R8kPgCCde9mHv/8yeOu
+WvuHijP3VaS9dE5mBm59B8Ze8jSgFph/eX6Fq2wl3HdV4RZ2QSlHn70ZyPzJEdWaem4JuSlOwuXf
+8chdfKunXp4frQSMVzba0uzSeQjDcoyWEa18rQtpelGxAihMeuuIdHu1BVfLUpTOyosn8AhGbBNM
+H/WI5eImSqjg6C0F1R6572B0zXWdhpbU+xKIbUvDCc38Vp8/9Y1fEPZc5/vRJ7GNoHwwdfwEtihp
+O+bcpn/+W7HxXyjo5rUvIO1Vqw55kLf/L0zCld+DjQbUbPfcl4qy3KoqwQv4L6XduJQyuV4u5wGB
+gKFreQpFl4/vj4OEVNbmtbdTuBKa6rw7+dFpE0MX9LX7yRdd6mt0imWXTM4mX3KZmClzfriAYQhq
+ozo9bX5OX85h2pKgoXBgewzDUBiZKjMxY/H43hoCPoV8weaN02nKtqQuphPwKQyPFvH7FLpb/IQC
+Kuev5ckVXQoFh64WP+mczTvDReprNDZ1BimWXC5czzMyXUIVCt2tPoZHS7hAwFDY0RfiyNkMNVGN
+vvYADbUffj3MS5cuMTw8zOd//MeJhCNkMhn+5//8DuVymcaGRuK1NZw6fZpAIMjAwAC18ThH3jxC
+Op2mVCyybetWZueSnDhxnIZEgv3795PNZDlx4gRXrlxGUTW2bNnCmdOnEYpCKBjkwIEDfO97h4lE
+wmzfvoPOzi5Ms8zx4ydo72jn6tWrjI6OoaoK27Zu49Tp00RjMQ49+ii1tbWcOHGCc+fOsm3bNsbG
+xjAtk/q6BM3NzZw+fYrxiQmampqpr6+nWCjwF3/xFziOQ39/HydPnsSVEuk6nDp9hkR9Ak3TqKur
+ZWjovOeiDgbYObiTa9evMbhjkBMnTtDU1MTLL7+MbdtEIhGCgQB/8D++gS8QAAmPPvooQxcuMj09
+SSqZ5Ed+9MdobW3FdV1u3rzB0NAFHMdhcHAHr732Oj6fQTAY4oknnuDw4ZdIpVKMjU+wfft2wCNl
+L730EqVSkb6+Pm7evEGhUCAajXLgwAEsy+Kdd85RLpvs27eP733vewQCAXRd58knnuT1N14nlUph
+WSaPP/44mUyWy5cvc/Tom8Rra2lINNDfv5HX33idcqlIOBTmM5/9LIZhkC8UyBcKbN68mQ0bNnDq
+1Glu3LiO4zholTqSfT29dGzYwKlTb5Ocn2fP7j2MjY0xMTlBb08vg4OD+Hw+knNJXjp8mNR8iqef
+foqurm5c98FwFLy/tzNOGZysZ1W6h/In4uCbxULzz/19x+j5rwhtdX0Ep+iVmynNriQ19wzVRfN4
+nBC2YqpbJ0vRJ35dqrGhFadaOZg6AmMveO45Rfdicnxxz0ewYp1ScXxbvyP9vW8sNWUAmWuQugiB
+Rk/T6l0j8PFIXduzHrGafAXspR47qYRmbV/3PGuVpLkLuJpmw8D7IyMgNNVfeGG/Yk+ttKgphudi
+CzSukhl6B8y/41kQPzCYlNQDo5m6T/2fZvjR35Bq/AbCyK4oE7QcAq9+49iL4BYqwfhrf+5NIRTW
+VR4fIEjmMzaxiIbfpxAMqKRyNpYDW3tCvDNc4NpYmXBApS3h453hIiVTcuVWkXNXC6iawviMycy8
+SaHksKkzwPWxEpdvFVEVQUejj5HpMrbj8elUxsJnCCJBlaBfJV9yyRVdtvWEuDlWZHisiKYqNNf7
+uDlR5uZEGVVR6G31Y+jCqx2Yd6iPa2xo9qMogluTZW5NlmlvDBANqZy8kGM+59DTGiBbdJlO2cyl
+bdI55z1FU74XzM7OEgqHidfECYfD5PI5pqamePjhh7lw8QJnz51D1wz6+/oYOn+eixcvogiFwR2D
+aJrOXDLJ1NQUTU3N9G/0YmqvXLnCmTNn6OzsIhqJ8Ppr32d6epod27eTSqUYHR1lZGSU+flMdd2G
+4SPR0EB7exs3b96ku7ub2to6Xjp8mNm5OTZu3EgsFsN1XSYnJ6mpieO6ktffeIOZmTnePnWK5194
+nu7ubgYGBtB1nbnZWSbGJxgdGWFqagohFGrr6hjYvBm/P0A6nWbzwACpVIpUKkU45InWjo2OceXK
+Fa5fu065XObChQsoiqCltZWNGzcyn5pncnKK6zduMji4i2w2y8WLF7l86QJ79+xlfj5FOu05HKSU
+zM7OMTY+zosvvsjVq1fJZNIMbN7CjRs3OHPmDLlcnt27d3ulbyoX5MbNG4yMjrB//366u7vRNY3B
+wUEMw+DKlcvMzc0yOjbG4cOHuTZ8jdnZWXbsGGR0dIxz75xjbm6OPXv2kEplmEt6BaYnJyawLIcd
+23dw4cIFTp16G7/PR29vL7dGRrAsb3sXQmCZJvl8HtM0uXXrBvF4DX6/D03V2NS/idNnzpBKzTMy
+OsqbR97kxInjnDx5kt27drNly5aqK3M+leLmzVvyxZdesa9cufpAJaO8jzORMP0GnPkNGPp6Rebg
+7hHp/bXpuaZ/+KuO1vZHCOUDpJ8Ktq/rjCtaqn5DUU6J8JZ/f9rRW/8EVskoFICZ8oKrcze8jMb0
+5coal/9qSeEK/2y69hf+P1drvLCCZBXGvE1ZD3uuPz3iFYTWw56FTgt4gprCgGiXV/dPKJ6rM3Vx
+2fYscJXYmVL485cR8r7fS/n+Oa+lZl2v1+yxR1ZIZOhh6PkiDPwdbz33coeRu7nIavj+Qkqfq6qq
+HuatFrXhF/LG7sNfS3b89ifzzf/k563A4Dddre4tqdVNSLUmuSr5F3jEuzwH2RurRYOtE6oHFAKF
+7jY/03Mml28UGB4pUCo7WJZkNmWhawJdExSKDpm8jc9Q2NQZ5NLNIsWSQ3er35Pq0wSJuE5jXEdR
+IORXsG1JMmUhXc+oCdCS8FUsTgWujRbJ5m0cF2bmbVRVIexXaYjrxCPezZ+uCkxLki+6qIpXKFpT
+BeGAV6jZcSS6JjB0QSZnk8k7BPwqIb9KPKrjN7zoxH1bwuTyDlduFT+SOJXu7m7SqTTHjh3jzJnT
+zExNUyqVGBnx4kkD/gB19fU0NjZiWRaappHLZpmensZ1vHg1VVUJhYLMzSUpFksIIdB0nZmZGebn
+k/h8PqLRKM3Nzfh8PlzX5bHHn2B6eooTJ05g2zZCCAxdp6amBp/fz/T0NMnkHIGAn9raOIn6+mqR
+YlVVaWxspLa2lvr6BL29vRx69FFaWlqZnplhdmYO27IAiStdDh06hOM4vP76awSDAVKpFLl8nsaG
+Rurr6lAUBSklhWKJkVuj2LZDOBLGNE1OnXqb8THPfaprOtPTXoFniSQUCtPS3ILf70MIr9jyyK1b
+5PO343iLxSKnTp2io72daCSC4zrUxOM0NDRgGAaKqlAul5mYmCSfz1d/orzrJJmYmCSTyWD4/DQ1
+NRGLRSkUCrx96hQtzS2EgkEsyyQUCtLa0oyua2iahuM43Lp5i0Ihj0BU6h2q1NbW0djYiOs6BIN+
+0uk0E+OT1fcAACnRNI1wKISqqghFpamxiWg0SkOigaamJmzb5ty5cwT8AVpbmrEsB13XGR8fJ5lM
+LrFSXbt2Tewc3KY+/PDDlTJXDwbeXxehlQPr6n03b+z+4tT80H/+vyKpfzmvODPPragRtyYUKbW6
+aUdrOCGEnBbSGcTN1y3VVZICoTquiA8VIs9921EaLEFhyeZXSvydfxuY/OebVev6c8tHACpewXch
+Boq/IPXGQj72t4YNZ/xfB2b//d8T9uztqphIz9JhpkELe4QK4Wl31WzxSJZ0PBKmaB65uPHHqxJW
+qcWmrNCTL7sCE3mXUbYfLKRqzfqFPd+89GUBrc94j7HnoTR3j7TjA9oUBG6w9HKLb/pPP6246V4h
+S9cp3bgZDe+Zc4ytAScwOOQGt48Je3ZAs8abKA5tEtJePQI0cwWmj6wgwFKPJ5GBdZfgAwjXdZEu
+ZAsuf/XGPLou6GjyMTlncnWkSGeLn4kZk4lZk7oanf4NAS7dLJLKOgR8KueuFiiWJWOzFqWyy6nL
+eYpll1TO4dZUmYlkGVV3OXslX4nbkrgSvnc8haJAe5OPVMbm6q0iLQ0GWklQKJlkCw6prI3jSK7c
+8iy3NRGVkSmTsuUiJYzPFGlJ+HBcF9MSnLtSQFUFve1+0jmHC9cLzGdsSmWXsekyZcuL27Id+LC1
+Ujds2MATTzzB8PAw6XSavr4+9u7dy8TEBA8//DB1dbVYtkM8Hmfvvn00JBLYtk25XGbf/v10dHTQ
+0NiIqihcu36dWCzKgQMH8Qf8nDt7hpqaWgYHdzA3N0coFGLnzp2EQkGGh6/R19fHwMBAlTjt2bOH
+1tZWauO1nD59mmgkyiOPPEoqlarEEnnWlYGBAQzDoLm5mUcfeYRUah5d1zl06FGOHztOJBKmp7eX
+eE0N+XyeTCZDe3s7GzZsoL6+nqGhIYLBILt27SIYDLJjxw4CAT+OIxkZvcWuXTvZumUr0pWMj49x
+8OBBGhub2LVrJ8VSib7ePoLBIIlEAp9PZ+fgTurq64hGowwNXSCdTuH3e2G+/kCAffv2MTY+zoED
+B9m0aTPFYpFoLMpDDz1Ef38fju0wMzPNrp07qasUoN7QsYE9u3czPj5OIBjiYx/7GDU1NfT09ODY
+Dq2tbdy6dYsDBw6ycdMm6hMJ/H4/Bw8epLu7G9uxuXjhItlcjng8zsGDB4nH47S2tREIBDhw4ACd
+nZ0UCiUuXboEeKQKIJFIsGP7drK5HMlkkoGBAZqbmqirq0PVtOrcw5EwQ+eH6OnpY+u2rQBcGBpi
+amqSpiaPHvT0dPO1r/0jNFUTkUikaiV7EPDhfdWUQNbWak2BJeQddsz4wM/cnJn5s18JTnznLzUn
+vVOxJw8IN1271vlSrZm2ROJV179luhD5/Ijl78lGsn/ZKuxbK9MvFMMt+ffMmMrmjBCFFVt8pPfn
+pgtnfvkX9fKr59Xy1a8IJ926ajzOWhCqdLSm48XwFy4Ke1ZNRX/+LazUPwuk/uuvCifdseJ8O3e7
+2LG0vfR/X8Kz1pSTXgyYmQPkKgKbRrYcfvq3M41/96iwZx4cm+hqUDSo3w1onm6UXH6HIUBoRanV
+TEklVFbKN+6srfE+wUUJ+HJ/+eN64cTnK8HtHwPQCudLWvFiZZJSgnCQpk+45dWVJp0i3PyzFfpk
+CMWyfDsPu2rchgfnS7+OCgTEwhof3xerpi4ADPaHEIDjSm5MlBncFKK13kACw6MlNnYG2NIVQNME
+rfXR21F5UtLe6KNUdklnbRQV+jv9NNXquBXLUUM8ghAgXXk7nrTy5+J+RLsfJAx0Bap3/YtFTsTA
+0mzIXRtDCEXcTrCWks5mL1NsR18QpMTQFT6q27AdO3awY8cOb21CsHnz5urfi1FTUwPAJz/5LKvd
+hfX19S193ttb7WMhcHtgYADwiJ2ULBljcHAQ8Db47u6e6rGOjts/z0KIJeMcOnSIamIL0Pa5tlXX
+uHg9i/sD2LLFUwHq7u5Z8vqBAweWPN+3b9+S5729XiGNrdu2IaUklc7gui6fePZZWlpaANBUlf37
+9686p927d6+6BvCsdA899NCK9yEajS5qv6vapqurC4Bdu3aBlITDXkD9M08/TUdHBz09S9e2Z89e
+isUihs9HfX09u3btrGaP1tXV8aM/9mOrznkBu3btAqC/r2/JvL3311uLrMxjz+5dSAlzc0lM0/xA
+C0/fC+6bYLmKevc+KeErOYGe16zwoRks+11Xnkj8SFZK+fxEqnReLVx8RTiZNUmOVGttW99YlJhS
+WEVF2Gkl6//4GJU0VLks8kBYRWU5uZI+X/Wc4I5/PirP/9o/zkYizxvFl7+k5d/eqVBqR9p3SE8Q
+jhT6tPT1HsvU/srvl/XulBCWkFK6mcQ//rZGZl5LffufKE567bIz5SSUkiAu3f7lrGaxLVuzEp62
+Yp/9eqrxN593HdfW1tTAUiuPjzj0R4/eDlJfbT1qdLRU++V/VQo8fjky8xtfVfhwCJYirZAwb+xb
+kjkICDe/vOjhnWHOryoX5mot7xQDh4akRAqx7ip8UOAVVVAQQF3cV72rXg0dzQFPz6Pyg92c8D4a
+7yavsKElgCvBpysrCzj8Ncbije/Om+DdXbR36+NOh+9tE373cz/oTV0IQU93N60tLdVg83vsYc1+
+77UNQrB1yxb6+/oIBAJrfof8fj+PPPwwUnr6c/eH1eaw6DUpcRy34v5+sJwF902wnMDWC6I4nBOU
+lxYLFJot1ZqUqyeugpp2JfOOr/NKue6XX7VkS94jHu/evxDCkVKOjxcaXM3XUus4zppzFfasd2NW
+veYFoTilspTSQcqgWPKtXtpWSumGw+6S1Dyx5ddMKeXx6ekvTUqr0BAsfGuzXrrcumbpHdVnl3yH
+LhaDT4yAheC2eKdtpxxj23/5VvmtXNoon/w/hDXxKLK8OiESsKq1avF8lfC8FX7qPycbf/N513Vt
+IcTqpaddG5KnQdW82KDlpXI+TLjld0lKcMpq6Z2WaPaVh9Ty0Kc/nEkJCVKRrq2955/F1T7QwrDN
+wOCfFWNfmFLsibu3gq7jA0epVGZ8fJxIJMKGjg2USiWkdPH7Ays2m+X6VnejWwVgfARyCOv44Ydh
+GHelIfZhwOfz4fPdOStVCPEeiNUPPu6bYOXDP/udYHlqs54/9mWQuIGBi67aet5WgtddvS1lhp+c
+dnwdRZuOvKPoprDT6mLV8LuBEMKSUo4lk8m0ptkxx9H9wqsosyZsWzUDgXIql9PKtm3LcDhcC+Xw
+aue6ru64rpuJRltWSBQIIezzUo42zs2V8+r/mnViPo0FK4RcXjvHFMIqKouJFSA0Tbq6HnKEEFJK
++WLq5h/MhFJ//BW1cPJJxRzdAMKHtPV3Z91CIjTTVWvHiuFP/Yd84muvV8nVWpA2TL4Kcyc9ArBm
+8eoPAsvWYxc9C12oc9WlCqfQbeSO/BLSWl0z1FcPQlvZ7weF1ZL9hADXues5OFrTkUL8Z98UVmrd
+dvXAwKBYLPOtb32Lt956myeffAKzXObIm0dJNDTwsYMHqa1dMxphHetYxzruCfdNsOJdj6fk9f/y
+taJZ+HcoPpFL/MN6x79Nd9SoBSCsvMC1BaRQpNAWbTLCryjlunz+rmQBKsrXGSlljruzG8vFatlS
+ygnunC3prqVLtEUIU0o5Pjo6mgwGlXrTVKKq4+hrzMNdog+qI21bJBsa4rnKOqSU8lwysvdfknz7
+DzT7Vqev9NZ+Lff9vYosNoFdD3KZpUNxQJl1ldCYVfOZF4r+Q2+Vgk9OS2nKReRKKI5moiordQyk
+4+mIvZ8QcNv1uAoUn4swlprLpAMjfw41mypCoQpLrYGuQN6BOPvr703W4b0i1F4pqF15Q6XjkcTS
+zF3JRbhG69u5hl/9esn3yKwQherEA0IUedBs2H+NEA4bJJNJXvru8y6qKrK5vJiZnaNYKhGNRFDV
+B0J3eR3rWMcPCd7TL4ro+ukSMCalFKmJCQVpJhR71tt5q9ulQJPSdVXVAlAdx1KDwSnR0nJnBdDl
+Y91niZEKebpvjadK+6KUcnR0dNQfjBK4o+WoAtsO2g0N8ZwQojq2EMIGRkZG5KxhTE/n7J+4pNSX
+vxEwj7b7Cq9txC0aKJW6za4iUEJmKXjwYin4yIiUmiulLgWWWEKuFKXkU/UJtJZzcPHRfUoFzgAA
+IABJREFUu9bDErhI9d43e8eE6de8kjVOcUWvltE5b+hNbyvWre4lRzJXYPx7EO4AXw0UZ+8+LGzi
+FYj0QNOj9zhZsej/ezAjWdmlArWuWVHQf5fLJTTH0VreyDX86tcLoc9dW5ylKqXMZVrMmbp1kdGP
+DLmcyYYN7ex96CHlt37r/6V/40Y+8+lPkUqlOHr0KLGaGgZ37Piop7mOdazjhwTvyy2bEEKOj4/P
+AiEppV9KKRVFKRmGk83n3YIvHHZcy3Jc15WNLSlbiNaPMCDo/rBAtCqP94T2dlGU8vzIxEQ8jRZo
+zImPD+cinx1edVyrqAjpuR4XuViFlNLRdT0nhJiMNm3O5i78/f8UtMZ6RGn4IEgDpAZSRUplZeyY
+gtQaxqQauwviuayta8LYYc8StSIbEOFoNVnL6Dmult75pHALt53vdhlufBsiGzyh0fK8J3khWD2G
+aTEcEyYOQ83GexKwxSl5emWqD5Jvr7Q+rTVsOXn3YwCgINXwpBV6/L/nol96sRT75Iyw0wuWKyGl
+dFzXnekSXR+kWuo63hUmmqbx3OefY3DnIK2treTzeWzHZmDLAC3Nze/exTrWsY513CXeN5t4S0tL
+Qcor15LJWp/jOG4ikSgBTn39+h37ahBiiwnMSnkynU4nwqWSW+O6rl9VVUPYS7La5OKYL6m5jm0r
+Zdd1ZxKJRHrBQhba9LV3GBr/UiH4WJfQY/2aObEbd6ZRlG41KuZIkxBKACECSKmg1V4vxj7z323R
+XF4WN7YCEm2lSUywGrkCpNDcgppt+H/eMPLHjqjutY8vaWNnIfmOR3gWXIWK6skb3Ik4CSBzFc79
+q9uyFncF6amsT7zsxaAtGUMKhJCg339wmtAtqQRvOfqGC+X43/iTTPRnz0mpOYvJlSalYwsx19bW
+lr5jX+v4kCBpbm6mtbUVAEVRaWpqRtf1dw3YXcc61rGOe8H7WzlX9JWBe3L9/XWHEHssYB6Yl1Jq
+6XQ6ojjOmllnlhY0Gxpq84tdj14/QgJJIHn+/PlztQ21Z6S0gmChuqau2xNxw71WhzS1om/XDVP0
+pN816aDlxy17/Peu6qXr++8qdEgxyo5qSEvryJuhx17wZ2Z2CTe7NGpY4GUVLuBunbfShfytVQ+5
+VJMPVjlorplB6Qo9h948pJi32sG9N+lTLTFm+7d8t1T7C3+aC+yZhIAECyGsKrkCcv6InIlEWlLL
+3691fHRwXRfXdVGEwDB8nmCjlBXJs9U/BmXTxVhDckFKiWVLNFWsyDr8sGBZXgjoD1P2YrFYxDB8
+qOqd1ySlxDTLaJpeFRS9X5TLJooCun5vmXrlcglVM9DeZa4rIKFU8rSi7rXEi5SSfD6PpmlV0dH3
+G47jYFmWpwj/AJWg+UHBelTnA4RKjNb8e+1nYGDAmpycnHFdpVUIv+IoAdMxYlNFuW3SG8cSiyxX
+QtMcm1XoiWj5W4XChV/694o52aGaN3d6bseFFDupghTIBQOXkI6v7S07sC8j7LSabvpHrwpR8Bm5
+V76sWNPd4H5gnzVFKBJNSlTtHlzPAvSG67nYT/yPIGpRcyYHkI63Q8o1BWOkI2ovSOk7Y4UemsrV
+//wlx1FN71reNoRJKaWmOSnTFOPRaPt7dimv44ODbTu8cSZHMm2iawq7NkdorvfhVEIhFeGRq6Pn
+0uzdEiXoV7EdiaoKFCFwpaRUdpmcK5OIG4QDKrYDmiZQhCdW6jigqqBWyFcmb/PCm/Ps3BgiEdd5
+4WiKnRvDdLcFsGy3StQcR+K4Xl+iooQqBLhSIvCOSzzpiKujRWxHMtAdWjHeR42ZmRn++FvfwrJt
+enp6ePzxx6uEYEHkcqG8iaqqVaHIl156iW3bttHa2oqu69XNXtN1NFXFsiwc10W6LleuXKGlpYV4
+PI5t2+i6jqIo2LaN4ziomoa2iHwtvK5pGoqi4LoulmVx9eowoVCQzs5OTNNzKZfLZc6dO0dPTw91
+dXVeGRspMQyjQu5MDh8+zJYtW+ns3FBd18I6dF2vqovruo7ruti2jaIoKIrCmXNn2bRxE5FIBNM0
+MQwDIUS1/WJZhoV5G4bBuXPnOH78OJ/4xDO0tbVX+wVQFKV6npQSy7JQFKV6HRfGX5iPEKL6Xixc
+C8MwmJmZ4ezZs+zfv59AIFBdw4Mi5PmgY51g/RCikrE4NzMzU3RdNyilDDqOY6iqrQkhFCFUdcEN
+6aqqpeuBmbWSCAKbfvMYZ2c+b/n3dpjB/m2KW06obrIWa7ZBtafqsKbiuGU/wc1ncrG//W1LNhQ8
+rTPVmW/4+rfi4td+3yi/+RVRvvZVYc+vLoG8GhR/UaJlhFtoXFN/DJCKL2MHdlyTMuq6vi0n1dLV
+fUhzFQU+AUJ3QSKFUZZKcKIUePh/Fmq+fN0MHfoPWuGc1MzhGTe4qc1x1ygmoqnS0TqLprYpJ0Re
+EVZaEaJq+RKAVBTFVFV1tr6+fqZCmNfxgEIIuHCjwGzK5uHBGDfGyxw9m2FbX5CrIyXqYhqOC6ms
+zY3xEtv7QtwYL3NtrEhjrU59jc7wWAlVFURDKrYluT5RomxKulv9dLUGODmUIVdwCQUVHh6Momsq
+pbLLpRsFaqMq2bzNpZsFOpp8SCG5fLNIokZnQ7OPU5dyWBZ0NPloafCRzFi01BsMjxbpaQswPFJi
+MmnS3eonk7fJFx1ODrkk0zb9nQF6WlcvPPBhI5fLkcpk2LplC0MXLmDbNoODg5TLZcrlErqu88aR
+N+nq7MS2LUZGR9myZQvnz5/nxs2b1NfV8dRTTzE/P8+xY8eJx71khKPHjmFaFnt27yadTiORvPji
+i5iWSW9PL1u3buX73/8+U9PThEMhfuzHfhSfz08qleKFF14gk83Q1NjI/v37ef2NI+TzeWKxKK2t
+7Zz+0z8lX8gTi8Xo7enjm9/8Jrt37+bAgQMcPXYMx7bZt/8hUqkk586+w/nz71TV26WUXBga4tiJ
+47Q0t9DZ1c3RN48gFIUDBw5y/dowt0ZGiEYiPP74Y8zPz5PJZDh27Bjj4+P09/cTCPg5c/YcHe3t
+PPLII+i6TiaT4YXnn2c+lWL37l28+ur3mZmZRjc8snry5EkuXLyIbVnE4zWk0mke/tgjhMNBjrz5
+Jq7j8tBDD/HOO+8wMztDOBzmkYcfYXh4mI0bN3L16lU6OtpJpzOcOHmSeDxOV2cn4xMTnD17luFr
+12htaeHgwYPVskLruDPWCdYPKSqEKQfkZNXKhDLKqBFOhX1qRbg157qFmpqaNa0sFdfWtJRyNjUz
+k7JtEQNLgO0F3dueMr9UAy4E5OKYLtctuf7t//bGDW78RuOF/zhkzH/ri4LyZiHNKGv4HCXClSJw
+y/Zve80J7Ljsy/zpFxRnbhPSMZa3kUIrWVrnS7nITx+XElmIfuE7YetmCGd+E0K4uNJFYiGcElLN
+uFpjDsDx98yagQPn8+HPXhF2WnFErGwHH8+5/gNjPp9P2LaIyuVaZ1WYqM6EXrk4AEJVXUsIIy9E
+qQCBbH19fW4t6Y91PDiQSKbmTBK1PhpqfbgSLt0sMDJlgvRqBb76VpqP7YgyOWsyPmNy6lKeRNzg
+xkSZqXkLy5bsHYgwdD1PLu+QTNvsHQhzqVJDcC5lsWNjmFdPpnhoawRd8z7ErQ0G6ZzD6LRJf4e3
+QTo26Jrg9OUcbqUI9GO7Yxw7l0XTBJNzJrGgwqUbRdoafEgkxaLDqUs5Gmp1TEuSK5j4DAXjvcvn
+vm8QQpDNpBkbH6O9rY35VIqpqUmymRy5fI5AIEC5VKStrY1vf/vb/ORP/iSRSIRXX3mVwR07GB4e
+5uaNGwRDQYLBAK+/8QYAY2NjdHV1oiiCW7duEY3FuHnzJs899zleeOFFHMdhbGyMj33sIH/4h3/I
+pz71SXw+P5lMhitXr/CpT32KN954g2g0ypXLl/nkpz7JlctXGB8b5fSpU3zxi1/k+6+9Rl1dgv7+
+fnbt2smRI0eYnJwkEo3y8svfo1gs8szTTzM2OlItPlzIF3j5lVc4ePAAXV1dvPDiS9TX1xMIBHjx
+heexLIvt27czOzfLyZNvcfPmTRQEf/Xd73Lw4EFee+01Ojo6yOdzxGIxlIpEzaVLl5hPpTl48CDf
+/e53aWpqoru7i8aGBADn3zlPNBZBCMHU1DQ7dw7y5tE3OfToo/h8PobODyGlZHh4mGeeeZqrw8MM
+nT/PtRs3aGlp4eKFiwQC3mfR5/Nx9M03EXhVDG6N3KJULBKLRVG1dd3ku8U6wfprgEWbvcN9ZkIK
+IdxkMjnjuqbfcaTh6WBpYpEclmBpwLwECgBdoqt0MyVfMOL/27Vg9ju9mj0WAmU1yVGBorsl377x
+UuiJKay08MU+ecOfeblVyJy+vI2t1JdLkU9fc0SwLLBE3n8oWd7w1G/ESq9jqjGtpEQbISIcUVdy
+lGi56sZbRRhW10tuItFWnpmZmVAUx1ZVx3AcVXcqumcL0hhSIl3XtRVFMRVFKbmum9W0gFlbW1tY
+t1j9YEEgaKrzcXXUIp2zGJ8pUxPR8BsKQb9KOKChKgJVWRqaFQ4odDQFSWZshBBEwxqa4rn1ErUG
+DbU+hsfK1cpvruux9WofEiJBlURcI+BXCPpUXBdOXcrRVKdj2xIpJbGwSlOd7uViSEnZcsnkHcqW
+y1za5uZkCV0XZAoOjisJBhR623xcGytx9nKetgb/A1OmJxqNsW/ffjZv2sRLhw+TTCbJZLK4rkss
+FqOltY1w2NOD1jQVRVGJRqO0tbUxMz1DNpdj6MIFfD4Ds1wiHA6xe/duzp07R6lURkqJIgSJRIL2
+9nZc18GxPWFg1/HciAuQUqIqKj7DQBEKjuPS0NhAoj7BteFrAMRqaujYsIHgWydBOhg+A8eRuK6s
+lqzRdY1Tp06j61qlTEulfySu66LrBqqqevF+qoKqqjiuF4qpqSqq4h2TUuK4Lo7jUlNTw0MP7aex
+sZErV67y3eefp7+/n0gkgpSgqgqa5o3n8/nwLYq98gcCtLa24rgOQii0tbVx5sxZzp49y9TUJKqq
+kM1miMVitLW1MTExQalUQgjB3Nwck5MTZNLdDF+/jqaq2LZNsVhEKF5ZnNHRMd588ygtLa20td29
+M+KvM9YJ1jruGvF4PDM6OjqsxtSQXtYNRTFV23YM0xSKqqpahYQI4fkoc62trdML5K4jRmosp1zL
+xr+clq7PXw0Gl8YqqvgFIexZBQFl2Zss122fq9aUXHy+MIWw0oqoBLkLYSvlcqnk3/DpcSmlXpqZ
+kbZtR5F5FCe/9LO+SPhWSulkAjXpBMiGhoaclLIIKAwNiam6Ol3TrBrV0nSklKlgMG3PzhZ7e9Mu
+7HbXg9d/cOFKaEkYXJ+w+OYLMwT9Cjs2hiiVXRwXckUXTRP81ZEUQkDAp9BUZ3DxRpHmep14VEMo
+MJ+xq2WuFAHzWQtVAVUV5Msu3z0y7xWiTdv4DEk676DrCu1NAVRVMDxSxHYluiYYHi0R8KsoCgR8
+KrMpm2Dleb7g8MpbGYJ+L2Yom3MoW5LamEcELVsydL3AxKxJb0cA2/H6/KgRCgXZu3cv/X19+P1+
+tm7ZwksvvUixWGL37t3U1tYSjUZJ1CfYvn07f/In32bnzp309/cTjUZoa28jFvNKwV65coVNmzYT
+DIW4cf0GqqLS09NDoVgkFAoSCgXRVI3Nmwfo7e1lenaa5198Ecd1q7X7FEUhk8nwvcPfo6W1lYGB
+zRiGTiAQoK29HUV4sWCqqtGxoYvmpmYcx+XipYvs2bub48eOMzY2xp49e9i1axeHD3+P2ro66uvr
+KusN8cgjj3DkyBFGR0fZvm0bb1Ssbo88/Agvv/IKbxw5Qnt7OwcOHMAf8NPX24dpmozcukXHhg2k
+02mmpqbo6uzEqMy7r6+Py5cv8cILL/DYY4cwjKVZr11dXdTV1QEuAX+QUCjMxo0biUQiTExMEK+t
+o7/PG8fvD9Da2oamG9TV13P8+HH8gQDNLc2UymXPbbhpEx0bOiiXy2SyWaanp2lqaqoS4XW8Oz76
+b986fmCxyPW4AIXblaXt1eK6pJTa9PR0nRBmFFOEbEW5Uw0coUnpoLtZ21ZNVXXjjqPoa5wvVNW1
+dD14o7a2Ng2QTCZjbqnUbCuKvlrGpJS61FzXclR1vqGhYfZOZGlhreuuvx9cfOMbv7ulp6f/rU2b
+BnzgfUjH5mAmBabpomkKui5AUrU4OY7EcSSapqAoXqKhd+7tjEEhlkq5LTx3HMm10QKZvENTnUFb
+o78SqXe7f4FH9OB2NqKuKSji9jkLyY2W5dUp1RSBULzgeynBZ9zO7rJtiWW71EQ0NnUGCQcfDHfO
+QgD1AizT8taiaSsCrE3TQte94PPlx2zLRtVUFEXBsjxXrmH4llQvW2hjmianT5/m6tWrxOM1PPvs
+JxFCMD09zfHjxzh48CA1NXEURamOsdgStXhsKT2rlKIoOJVAc70SfL4wp8UZjF5guYkQXiC5ZZoI
+RVAslnjz6FF6e/vY0NGOqqpL114ue0RQCCzLQteXZkbato1t20skRRau68Lcl88bwDTNCmlUl5xT
+fT8qQfCapq24zuBZYS3LRtfV95yp+X5CSkmpWMSyvcSDVCpFNptb8lmTUhII+BkdG02Njoxt+9KX
+vjT6Yc1v3YK1jvvGKmTD4V2EFyputCkpZXJ+fj4oHCcopQwrir3iW2vbStkXsNLRaFsGcEczmZyv
+XK5TbFvDWEqyXFdzHMdJxePxauHu2tratJRXSrOzNcZapX2yxaLV2dlZfjfitE6sfljgZaxZlrfB
+N8R0WmpVQFQ26YXH7fM9TuRWnnn/eJvTnURvBa4r2dCgYdoK8YiGoblVt+HC/6vD63fxuYtbiIV0
+QhaI3fJ5CJA2VjnD/IcomrN8034vfRTvIYghXyis+rqUkvr6OsLhEPX1CVIpr+SsoigMDu4EIJ1+
+D/J09zJJvLU5jsPA5s34fD4ymdtlzBYy+YQQFP9/9t48yo6rPPd+dg2n6sxD9+l5brVGS9ZgW7ax
+ZGObwQZDsCHBQEJICCYD3CRfxktCyF3hXjKQ8IWEXC7hfgECJDhxjMGWLTuWbcnWZM1Sq+d57jP2
+GWvc3x/79Ok+Q2uw5Snev7W0tHSqateuOtWqp9/33c+bX/Ejzq1xjrU+f615g057SUzTYKlWsBSu
+KEolqXEmNqu3uX2t4QKL84ZACDEAJCmlS2Dqp2p/x9VRJUppHMDSGvtSAFa5EOLebJxSKBYXI4hG
+I+z/W8pesg6HA6ZpglIKn89XjGpomoZkMgm/3w9FUZBKpWAYBgKBwBX5Ai0LsoVpG/m8hkwmDVV1
+wul0Ym5uFgsLEdrY2EBM04TqVAG6HKUwUFNTi0QigWAwWGJrMD83h/mFRUoEka7r7hRWp2xWR4qW
+i65XohArL/HlCE86kwEohdfrhSiKr2j5fTweRzQahWVZcLtdaGxsKqbjys9ZLsBisRhUVYXL5YJt
+25iZnoZmGAiFgggGAriUDL0Sls+dSCQRiUSgqiokScTc3BwoCGpCIQT8AVAU7hulIIX7tTxfQggi
+0SgAIFxbW9y2PP7qfde61xQU2UwWkixBKaT2lreZlom+vj5IooQNGzbAti1EIlE4nU74fL5XLVrf
+HhR+DaEouV/LotayLOTz2aLVxOsFF1icN5SCILqi4vCr2ZfDWQvLMqHrOliUyS4U7jYhmUyACAS7
+du5CJpuFqigYGR1Ff18/tmzZhMamJpw9cxbRaBR79+4t1gVdCZqm4eixozjy0mHccOON6OjowCOP
+/AdESbF27tgqnT5xgoqSROobG4tpjve//33Yv38/3n/ffejs7AC1mSj68aOPYnBwxF63YZMtikQw
+DQOWbUFRVNTX1WF8ghnydnV2QpIkDA0NQZQkdLS3IxKJYGFxAa0trdB0DU8+8QQEQcQ9996LhoaG
+VySwFiMRHD1yBLNzc7j1llvgdLowNTUFRVHQ3NyMWCyGaCyKcLgOdeFw8RyCIOCFgwfR0d6OzZs3
+I5PJ4LGfPIbW1jZs2rQJbte1sQIghDA/p3PnsGvnTszNzeH5557Dps2bYVkm8poGp6oim81ClmXE
+4jGkUyk0N7dAVVWMjo5icHAQzc3NyOdymJ+fRzgchup0YnZmBqZpoqa2FgG/HxMTE5AkES0trYjH
+44jFYgiFQnA6nXjmmWcQCASwfft2CIKI6ZkpeDxeNDc3Q9d0nO8/h46ODgDAyMgICCHYsWPHNbkH
+b2eW06qWfRVt1q4RXGBxOJy3IatrNFh6gVJWHKXpOi5evIh13d3FAuOR0THkNR2iJCGfz+NCby+6
+u7tRFw4XoxVrRbSW62tisTgikQji8TgM07YdDhXvfOdeSRAE6Bas6Pys6FBVwup9WOCWvRSYsehy
+nREzgRSFhvqgGI0s4sVDL0LTNPj8frzzzneir68PY6Nj2LFjByRRwLnz57Fp8ybIsoT9Tz2NQDAA
+v88P0zQwP78AURCgadorNo/s7uqCruvwDA5i165duHDhAqampmCaJrK5HAYHBuB2uzA6OoY777wT
+btdKi1JqF9KmhftXU1MLwzCQTCRgt7RcM/fwWCwKXdcRCoUwNT2NVCZTFNl9fX1obm7C8NAwAsEg
+RoaHWWH4zCz8gQAi0QiSySTq6uqQz+cQjUYxPj4OfyCIsdERSJIERVFQV1+HZCIBUZSQyeYwNjYG
+RXFgcGgIN998M7LZLFwuFzMRNXRk0hmMDI9AEkWEw2GMjI4yWwRRRCAQwOjoKHK5PFwuJ49ivQrI
+crHjGwAXWBwO522PbdlFgeWQZazr7i6mZ3x+H6KRCAghqK2pgdvjKbw8FZimiQsXzmPjho1ob2+v
++iJcXlJ/++23Y8P69airr8P5c+eJaRk4ffoMMpkMbAi0o6ub9vddJBs3bYRhWDSbyRLbsgpVYCtj
+CaKIuvp60tTUjKVCDZFUcOg+ffIUpiankEgmMDk5iUQyba5b1ynedONNxLIs+Hxe9F3sQygYwm23
+vQMf/8QnYFMbjU2vvNE1Zd4lRcfwhYUFdHV3Y252FvPz8wCA9es34Pjx49DyeXjc7uJ9ooUWRbZt
+Q1EU3H3XXRgbH8fA4CDa2tsRCASuibiwCq2RltN2DfX12LR5E5yqE0PZLHRNx9LSEhRVhcfrRc/6
+Hpw+fQaaYaCrsxNulxs2tdHf349MJouFhQUQQYDH60UoGMTU1BQu9l6EKIqora1FOp2GKIroWdeD
+kydPQFUUtLa2or6hAeFwGIcPH8b8wgJm5+YQi8XQ2NhYqCNiyLIM3TBgmgaAN4dhLOfq4QKLw+G8
+bSEF76SxsVFQStGzvgeWZWFsfBxdXV0Ih8PYtXMnTp48CVGS0NrWilBNCAP9A7AsC8FgAHv37IUs
+y5cUAoIgIBRkdUWiKKK7u4ucOnUKc3OzCIfDkGRF2LJ5E4nHFtHU1IR0RrOef+F5KeD3IxDwF8cW
+BAFurwexiUmMjo3C7/MjFArBopS1mcnnbadTJU53E/H7fWhpbpbOXzgPVVWwadMmtLa2IplMIp1O
+weFwoLOz81ULGEopJEmCy+mEJEmoqa3FyPAwTNNEW3s7Zmdm0NfXB0VV4XSqJedTnU6MjY/DMHTU
+1dUhHk9gcXEBXq+3pEXMq8XldIGCpWoVh4M1/G5qLqzIc2BkZASZTAYtigJKKWTZAa/Xi4Dfj8mp
+KSwtLaG9vQ3pdAYejwdOpwtOpwuyzOwd/H4/mpubkclkUF9fj1BopWWPx8PMPwOBAGZnZlAXDiOd
+yUBRFHi9XuZnpSggAEZHR9HZ2YF0OgWX0wlVVXn06i0Mt2ngcDhvC5ZtGjwenzI/v1D8XNN0jIwM
+Q5IltLe3QxBERBYXEQgE4HQ6Yds25ufnQSlFQ0MDDMPA7Nwc/D4fAoHAK5oLpTZmZ+cwNzeHxsZG
+ABQejxeJRAJutxvZbBZz8/NobWlGfX3DquMoZudmsTA/D0EQEa6rg21ZxWJs2eHAwvw8JElCIBBA
+IBBA/0A/ZElGa2sr5ubnkEln0NbWhlAotPYEr5JMJoN8Po+amhrk83mMjo5CdTrh9Xhw6NAh1NbW
+oqenB3V1dcVU5HJt1NzcHARBQG1tLWLxGHRdR3tb+1XVuF0KQghyuRz6+vrQ0toKt8uFTCaD2tpa
+EEIQi8UwPTMNj8eDYDAE27bhdDqZyHG5MT7O/LYaGhuRzWQQiUTg8/ng8Xhg2zYkSYJhGHA6nZiZ
+mYGu62hpaYFNKVxOJ9LpNAKBAEzTxNTUFAIFkT09MwOX04mGhgY4nU7Mzs7CsizUN9RjYGAAbpcb
+XV3doPT1rx36r8Ry70XTMhK6Zmx94IEHXjebBi6wOBzO24JlgaWqbmVycrIQqZAhOxzFhr+WZRVX
+khVXkQHFlWW2bRf/vZzeWtPEbXmFmW2XWsEDxTFWWxsUVwAWjK/KV96tjmIJhDBDiSrRjUIHp1Ur
+25ipll1wO8eqca80OlLutbSa5abFoJQ1oiakOId8Po9oJIpwuBayw8Hu7/JxhECUJNY0e/neF461
+7Suf2xXNH6y2TiiIUEJISf3X6voz5k224iNFCCn5rOh7tvy9FMYQCCl9LpbnXzjALkT6rEJD5uJq
+z/IViJYFrdBoWhLFUtOQ5Xle4rm70vuxPK9XO07xObZt2KtX8BXOsdb3WKxbpGBdzV7h973sS0YA
+GKYJ07KK3xkFCt0CfACliXQ6svWBB7gPFofD4bwmtLW1oqWlufhCHB4ega7rqK+vR3Nzc7EVSbWl
++OVMTk4iEAjA6/Wu2o+9u5aWlnDhwnl0dHSyFXoFEVI+7mroKnG1vG+24PO03GA3Ho+zdFZLCxMA
+q8a91FxJQVyBUkRjcaRTS8UGxZe6TkIIUqklSLKD2UWUbZ+fn8fU5BTCdWHIsgzbtuHxeKBpGgzD
+QG1tLSKRCEKhIJxOV3HMSCSC8fFxEELQ3NyM+vr6kvtQzUCz9N8CgOpCbPW+5aaGMExzAAAgAElE
+QVSTgiAgEokgm82iqalppZCeEGj5PAzDgNfrxeLiIvL5HFpb2y77LFiWjdHRESwtpdDa2oJMJoNA
+IABd1wumqAZCoRDm5+fR2tpa8d1Xu5bVAg9gYsHQdeTzeXg8nhJhWO06L4Vt28hk0sU0Z7kYvNy9
+X32eiYlJLMzPo7WtDfX1dcXnLJNOY2FxEc3NzVAcjopj8/k8BgYGIAgCurq64HK5sdqs6lLP8urz
+lxqNJpHJZGAYBrJZZsvgcDjgdKqYmZnG4uIlb8s1581jycrhcDivIQ888DN1oVDNQ+FwnbTsWh2L
+xfD9738fqupEwB+Az+/D2NgYdF2Dz+dDLpfFXKEQ2evzwyHLxYhNJpPB2XPnio18FxcXMTs7C0li
+flLPP/88Dh46iK1btxWX+1Nqw+vxIJNJY25uDvF4HKZpYmZmBvFEHLIsI5/PY2J8DACBKIp49sAB
+DA4OorGxAbIk4mJfHyzLQmNjI9KpFEZHRyGKImRZLnhrLcLpVKGqzuJcl/vNTU5OQJYdmJmexvMv
+vACP283EIQiGhoahaRrcbjcymTREUUYmkwalFI/++FHEYwk0NNTD6VwZN5lI4LGf/ASGacDldOLI
+0aM4ePAgFEXB8PAwzpw5g7a2Njz+xBNoqK9HbW1t8dhDh17E0aNH4fF44Ha7YBgm5ufnkE6noKpO
+LCwsYH5+Dm63G4qiYH5+DrOzs/B6vNB0A2Ojw7DtFQ+v5XHz+TzGx8eQzWbh8XgRj0eL6Tevx4O5
+uVkcPnIEc3Nz2LB+PeTCdwoAhw+/hOMvn0BdXRjj4xN4+eUT8HjcxfYw4+PjyOVy8PsDJeccHh7C
+s88+C1Vl9VTf/d73YOgGhkdGEI/F0Nvbi6amRjzyyCPYvXs3JEkqHpvL5TAyMsKc0h0ydF2DwyEj
+mVyCIAiYnp5CPJ6Az+vFuXPncOjQIXi9XgSDQcRiUczMzMDlYinNqUK9mCzLcLlcxXOU/xkbG8NT
+T+0v1Ib5kcvloaoqlpLJ4urSSCRSvO6xMXY//X4fRHFl7rOzs3j88Z9ClAT4/T6Ew3XF+7KwuIjn
+DhwAQOHzeUvmQ4iAZ/7zGYyPjUJRFITr6uB2u4vbNd3A+PgYUqkU/H5/yf0q/7Pa703XdRi6junp
+aZw/fwGUUtTU1EBRHFhKpfJLS6l/eOSRR5aq/PfwmsAjWBwO522LYZpIpzNQVAVujwuHDh3CxMQE
+8vk87rvvPoyNjeHI0aPYuXMnQjU1UBzB4rGZTBrnzp5FZ0c7KLXxwx/+AB6vDz6vB3tvvx1j4+OF
+gmgF+59+Gol4ArlcFg888ABeevFFDA4NYefOHYhEojh+/Dg6OjtQF65DV3c3zp87h2w2g3e/+z0Y
+GxtDLpvFrl07oTgcGBwcRMAfwObNm/HTxx9HLp+HbVvYuWMnntr/FGpqatHc1IT3ve99xSiAaZoY
+GhrC+fPnIUkiOju7MDQ0CGrbGB0dhcMhY3ycXffNu3djaHgYN9+8GwcPHsIdd9yB/v4B5LI5bNu2
+FV6vt3gPhkdHoBs6br3lVtiWhXw+j7ym4eSpU6gLM6PUZdsFwzBK7n02l2fCzOVEKp3Gc8+/gOGh
+QbS1d2Dzpk0wTQN9fX1ob+/Ali1b8MQTj6OnpweKouLMmbOYnp7CzTfvRjgcLmnfMjc3i5MnT2Jq
+agZ79+7BkSNHIDtkqIqK66+/HkePHkU8kUBDfR1WV8lYloWJiQkMDAzi+uu3Qdd1jIyOwDAMdHR0
+IJ/PYXx8AhQE737X3diwYUPx2BMnTqC7uxs7tm9HOpuDoeuYmp5EIp7AdddtQSqVgmkaiBfc5Jeh
+AJ5++hnML8xj29atMAwNL798Alu3bUNvby/a29qwb98+1rNxebXixYtYv74HhBA8sW8fREGAz+eD
+wyHj6NFjCIfrsP36bbjn3nvXfO6j0SgGBgYQCoVQFw7j+MsvY+fOnTh06BAaGxtw9NhxNDQ0oKW5
+uSBYxyGIIu66805s2rSpOM6F3l74/X7cd98Hik2u8/k8FEWBbdmYmJyEaZo4d+48PvWpTxWFrGHo
+OH3qFD760Y+iq7ur6PGm6zqcTidisShOnTqJsbFx3HPPe7F167bL/zAXsClFLB5HPJGAoiro7u6u
+SNG/XlwbkxEOh8N5i+J0OlETqoHD4cDQ0BDe8Y53gAgiIpEIDMNAT8963HXXXQVn8RUaGhrh8/lg
+WTYMw4TL5cGunbuQy2lwyA5s2rgR69dvQE1NDUZHRnD73j3IZrNIJpOwbBvbt2/HbbfdBrfbBZ/f
+h67OLszOzmJ6egp5TcPk1BQMw8CmjRuxdetWdHR0wu3xoqOzE+lMGrqmY3Z2FnffdSfisRgSiQRq
+QjW48cYbsLi4WJJa0TUN8/Pz0DQN4+PjSCaTuG7Lddi5axcWFhdx5uxZ7NlzG5xOFQuLC0wYmQYW
+FxdQW1uLTRs34vrrt6GhoaHkHliWBYfDgZmZGfz7I48gmVzChvXrMTQ4iHw+D0EQIBaihQKpfN14
+PR7U1oYhEAFuN2tp09jQgJGREURjceTzGkZHR9B7sRehUC3e8573oqWlBaFQEIQQzM/Pl9R1AcD8
+3DxSqTQSiQTGCinIW26+BbIs48TJE2hrb8fNu3dDVUv9pWRZxsaNm7B161Zs3rQZoihi44aN2Lpt
+KyYnJ3Cx92LBlFRBOp0uOadhmhBEEYdefBFPPbmPRTVVZzEFyqItIsQyXy8CoKamBpRSRKNR+P1B
+JJNJ7H/qKaiKgoaGBgQCfkSjURimiZ6e9dhy3XXYvn0HFhcXMToyAo/HA8PQYdsU9Q31aGlpxlJq
+CbZtFbsTlNPR0YGNmzZh+44daGllPRH37dvHVjMSAW2trdixYztGR0dw+vRpaLoOVVUrWvTYlgWh
+ELESBRHpdBqHXnwRg0ODoNRGW2srbr3lFsRiMdjWSrE+q7NjDbgJWKpzbGwMhw4dQiwWQywaQTab
+QyQSAauXtNe8lrVYq3vA6wkXWBwO520LAVBfX4cbbrgBTU3NaGhswIEDB5BMxOH1eiGJIjxuF8RC
+mm0Z27bR19+P3gsXcOTIESwuLkJ1qnA4HBBEobCiT4YkipBlB8LhMJ7avx+macLlcsHhcMDj8RSb
++cqyDNWpwLYtjI6MQCAEqqKCEIJQKIT+/n709/djcnISx48exYkTJzG/MAePx439+/dDFEU4nU6o
+qgJVUYpF+ctkslkMD49AEATIsgOU2ujt7cXxY8fg83rR3taOZ575T0QiUdTW1MK2bTy9/2lEIlEI
+Bb+ns2fPYnJysmTcrs5O5PN5nDhxArbNioubmpoQDoeRSWcQCoWw78knkc1m4HKXOrMLAmu83N/X
+j/n5BXYPVBWKoiCZTGJqcrJQHwQ0NjRianIS+/btY2lCrxeSJOL06TMFw9AVRkdHkclkWOshoDgm
+CEFjYyMGBwZw9OjRquaqfr8fc3NzOHHyBAghUBQFsiRDlmS0d3RAVVXU1YULKz9XuH7bNpw7x+6P
+7JDhcMjYsGED9EzWliUJ2WwW+/btQ7AgDJehlCIQ8IOA4Ny5c6DURs/69RgdHcW6desgyzLC4Tpc
+vHgRCwsLCIWCSCYSeOnwYfj9ATQ1NUGSJHR2dsKhOCDLrN5IFCWkU2k8+uh/IBqNVDz3LpcLoBSH
+X3oJ2WwW3d3dOHP6NK677jqoqoqBgX4cOXwEoVAI69evh+JwoLampqRODgDWr1+PyclJPPzwv6G3
+txdOpxO7du5Ae1tb8WfAoTgqhKUsydi4cSOefPJJPP3004hGo2htbcUNN+yCz+fDxMQkYvE4VFWF
+TYFMJot9TzyOmenpimt5M8NXEXI4nLcFy6sIN27crAAoGE8KSC4toaGhgdUUJZMYHh6C2+1BZ2cn
+stksKKUIBoMlY7GIQwyzszNQVRW1tcyB3O32IJ1JoyYUQjabgWlaCIVCiEajGBsbRSAQRHt7O5aW
+liBJMrxeT7Fo3ev1IpfLQdN0JJMJOJ1OtLS0gBCCqakpBEMhyJKEmZkZGIaBzs4OZLNZTE9Po7Y2
+jFAoVBwnlUqVWCIwb68JpJaS8Pm88PsDmJmZgWVZaGtrgyRJGBwagsftRnt7OxYWFhCPxeD2eNDV
+1YVkMoloNIpwOFxhnzAzM4O5uVn4/czWYvn8lFIoDgXT01Nwud3o6Ogo9igEgGg0hpmZaYiiCJ/f
+B1VRoRciJbquIxGPI69pqKmpQV1dHcbGRqHrJtraWpHNMrPPUE0IzU3NJY7vkUgE09PTkGUZdXV1
+ME0TPp8P6XQaLhdr46NpedTXN6C+vr5E8OiF+h1FUeB2u2EYRjFyI8syE1CyhNbWtuKiA4CtZBsa
+HkY6k0FTYxMotREKhTA5Pk7DdXUknkggmUygoaGxNApIKebm5jG/MI9AgAmmo0ePore3F7/0S79U
+sLwYgcOhoKO9HZIsY7ogMurq6zEzM4ulZBK14Rqoisp8vhQFhBAYho4f/vCHeOihzzJBVfb8Liws
+IJ1Oo6WlBQODAzjw7AH8wi/8Avr6+nDq1Cns3n0TOru6QEAwNTUJUZTQ2tYGz+rrtiyMjY0hmUyg
+paUF4fDKM7fcx9Pr9SIWi6GpqankXqfTGQwPD0N2SOjs6CzpE5iIxzExOQFBENDU1Ayv14upqSmE
+w2GU994sLXJPIJlcwpmzZzE8PIK6ujBuuflm+Pw+TE1NJqYmp7d+4hOv3ypCLrA4HM7bgmoCS3W6
+IEm8FJXz5mBpKYljx17Gpk0b0dzc/KrGsm2rWOh/KfL5PI4ePYqGhgZs2LAB09PTyGQyWLdu3TVr
+VfRa8WYXWPx/Fg6Hw+Fw3gT4fH7cffdd12QsQRAvK64AlkK9/fbbi/9+tcKOs8KbW55yOBwOh8Ph
+vAXhAovD4XA4HA7nGsMFFofD4XA4HM41hgssDofD4XA4nGsMF1gcDofD4XD+S7BsLmrbNmybLn/4
+hsyFryLkcDhvC3QdsO1iP1tQAJZlYnWDWQ6H89aB2rTYixAAJEmC0+VEuOBLFwwG4HI5i4a1rzdc
+YHE4nLcFg4ODCUEUjpimuZ0QQgEKQggIuMTicN5qLP/crm6FY9k2qG1DFAU0NtRBlFgDdApCRkZH
+XhzsH8y83nPkcDictwPCH/7hHwa3bOlyXn5XDofz1mLlx5qZwjsB5LDcPvH8+fOZr3zlKwnw36c4
+HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwO5y3BG1bkTiklhfMTADZb1XO5Y34kYujg2isf
+9RqKzX9iXMlYb0boyy/Lefe/3iplz9wGmlEqbcpsQFANS91+RHG+/yDpfGf+DZkoh8PhcDicS/Ka
+CyxKqYCLX6hH8uEAzDGHKXa7LefWoCmEaiRieQm0oAlpQdDTTzpveHhirXEyfV9qEvODDwrmyE2C
+lXUBQpmIsgmk0IIutj8+7/+TJzo7O99S4oNSKuin73tQTr/4v2DnGwC6xndDKIgSMV03/g951/5/
+JISYr+9MORwOh8PhXI7X3AdLO/fJOx25U79LzOg2WHZAMvtESesnCtN2BATEAYFSdd3j2cG//XVX
+z+enyseYm6NuZXz3H4q5Mw+B6jL7tFx/ML2lCq4PNlH9VwE8/Jpe2LXmxENe2Zr4FDHjrZffOdco
+mFOfxPmP/QeA+dd8bhwOh8PhcK6KNQUWpZTguT8VgX+SMu1f8JtUaZXNkRY5d76V5AcaBWMyZEvN
+ES34yR95Nv7u2WpjzA29WOdY+NgXiDZxR6n1BEXx3xQAbMCY3yNmn98D4Ifl43iyP+wmxsxeUE0u
+HaMSQnM1jvTj7wHwMKWUvGXShfo5kSARutLdRWsphNy047WcEofD4XA4nFdGVYFFKYjR9ys7RV/f
+rwjZpR2uiV8PgchOEMEJSp0EhgPUFAUrAxL/1k354a/+htr9/wyUj+MxntkBc2nDlfh6ESsVlNLH
+Nv+IUvEjZTVZ6tKP2wj0+iu7JAJbrHfMxBJti4uLOqU0SggxruzYN5oqYpCI7G9qlXxsUyIv+X5u
+3fT0k9CbnIudhLypUqJ08G99ef1gAFqGAGrpRlWFqtyeIN0PJd+Y2XE4HA6H89pSVWBlev+iXk1+
+/e8FffomUEoIKED1KntaEPWpveLi13cCqBBYzvzhbsDwVxy2LCNWZ/moCSr4tr8zMrJjkdZPrRZG
+YuZgF8x4qcAiIiDIgFWmK4gjp3tunqa5RI0Bg8zEZmRK6TQhxMZbDUEGGm5nf88+C1jaqo1UoMSj
+ApmwOpcUKaWThBBrzbFeR7RzD26z4v/8OYeVuAnUEit3ILYlDJ3WT93/dceOR46/AVPkcDgcDuc1
+parAsiW1R9AX14Haly+Ct7OKSQNb51L02ZQHyR5CiipAyBzrgJ1zleyvhoHaGwArC8y/BNgrwSUC
+o1lKnW7KeO405+fnbQALFyh1mIe3dUh0ZtUgBAjfBHg7gcknAD1R3EIhZG3nDYOASQghAjR4xgAH
+gDdVhOeKEFWgYS8guoDFI2UCqwR3b2+vCOANF1iJ8W8Exblv/4GYPf3gpacjbAXN+dMjX/6Mp+sL
+vI6Mw+FwOP+lKPcBAABYxEpV5KSAktKp1RDJuUNIndrojETa5+bm3ACwQKnHou7WkmEEGWh+N9D1
+INB+PyC5S8cxIu2OzKEwgYNQSl0A0D76WJCIak/prEWg/jbA3Q6gLDBFhKWsdN0wIQYBAEqpna3Y
+6S0EtQHYl8yyEsN40/SU9C/8IChYCzdeXuvZEK3oDnf8yStM/XI4HA6H89ahqsAKZJ4fg+Sfrdjg
+XwfU7kD5Cj5ixpql7LCb6PDIshkEAGXq4QZIztIVcYID8LSxvyUP4GkvHceKhQRjoo0QCDKl6suU
+ytLSD/zEinWX7CiqgFoLZKcAbWn1CIC6fsiS6ovRKlEU9c3AW6QG678AJEcIzMq0YBUoNaW8uqF2
+aonWLC4ueimlVZ9HDofD4XDealRfRVi7V7OtaK9oLF5fstqv7mYgtANITwBatLg70Sc7ZO2MO+e7
+l1oWVQHAlXikjtiZ5pJxBRlwNrLBRAfg6wZiZ0p2EWmuTbAWZNuW1RbAIWbP1BJ9uq1kJ6WGjZUr
+yywRYpuO7gEqeW1QFr0SRV0DgMzYNxvl1KG7iTZej0vEg0y1O0Kc219Sug6NEPLwZVNuqwxTl+8S
+3jIrF18TFFRaaBBACQF6vBCRY1BKJZ221pN8ts2yLXMimZwCEH89Z8vhcDgczmtBdYHV8lu6GTl6
+SgQ+iuW3JQGQHgdqdgKeViAfLb5HiZ13iXaynZjGqC3Y6o8oFcmLrQ3EijaVjKvWApILMNMAEQBn
+E0AIQFf0iGBMbhJzo4qhbDVIGi7TuW2LpPc7S8Zx1gO2ySJYq6GwbbFh0LZ9FiFZYktOUzJOycap
+hz7rzBz7ZVC9B9RWcQmBJWbP5EH/ZcFaXPeifv6hrzmu++aZtfbN9H6iMX/+s/cKSHQKcOQsQclT
+4k6kzv1+iti5qCCMDzive3SWEGLSl78pw38+gFSfjNwxZ955fwsE01KTj02j6f40sgmCzPRap3pr
+owSArp8FRv8dyC+s3kIFgVAKSm3bdqiaFqKUJt+SCxI4HA6Hw1lFVYFFCLGMY7edAxENUHPFaym3
+wFbvORvKDoAg2bE2QnKCZdnyDsBtyW09ojFV6tOk1gLTTwGpYZbmU2oAOcAiGwUEbaRbMQd8umNr
+ysot+kVo20FXhUQoAFcTYGtAZqYkWEKlQMyQGiYhU0rhp4o55PdO/s5nxXzfJyuK7ddGAeAX8709
+gjG73Th243+Tbzr+QvlO6ZEf1CvzX/5rURt8ALAFALRwM202S0ptqa5fO/+ZP9JP3Bexrf/zLhqz
+7iZWPCQYqTZV/44MUECQszR2rNcSw/tFEPVNU0x1LSEy4ChEHS+BZVkOvIHtmzgcDofDuVasaTRq
+S8qELTdMCvrUSv1TdhawdRZBWg2lAtH6NxEzJkAII7wwFCaivLl0JwKkRoHF46x+noKlCYXSKRCq
+uyVzpoMQzKjZYZ+gj2xB+UvXWQ/oS4CRKp2zo2VYc920JFh5yRP/yg3O5KMfELWRu0CNS7/Zq0Et
+EDOyXbRyf5s78eHPOXf928HVm9Xk928QrIW7VpzlKxGM2esdiUf+nBLZKRjznVUDZ7buJNkLeyTB
+eSMl6qte6Ujpl4Spqc1Ky9A3DCyGKT6yhQJ/AgD0jUtdUryV1xlwOBwOh3O1rCmwzNCvxcX5/zWI
+1QLLzLL6K6UWkN2AmSlsoBDzA12CHZMtIayTzLEa0ZzfUjoiBbLzK1KJgIk1u8JfS5a0gQ2A8RLM
+Bb+QH1lXIkwUH+AIsihY2UvbFoLD1NFt1Ez/wselzOGPEztbA1SxmqBgqUmyajLUZqnKsr0JzV7v
+yL3w/+qn7n9otWeTaEx5QPXLRsWIGd18RSEZO69AuAJH1jXIbd5M471/124e+96vt+S/cjsEaqCl
+PmIdH0tY8olFQayJ5Hp/M0qhRqk5O6F7O4eDnV9KlI9D5/7SjZljLohmybRTjiYrqv5O5q3W45HD
+4XA4nDeCNQXWTPv9sY6ZL/YDeO/KpzaQmQTCNwJqCEhlVpV3W26nNd5gSNcNE226jujT7RWDVlMa
+osIiWnahZzE1JSFzciMAuKzBHsDyFPelYD5aDj+QHCip3QIE2JBmPPNfvkVOP/cZUKO0bqswfTi8
+gLeDrWYUlx3GCWAkgfQkkBxEqcUAhWAs7iCZl/4qO/mdj7laP/naFEoRUqnurhAqy7Rz6JF6d/x/
+f1kyej/G/MsIoE9B1KepCGIDxJaY34MNUEvJbn00O/mdP3C1fnKaUkryp3+rXc7/9CZr8pF3w0ps
+hW0LIAXBR0Fc+fGUM/XzR42XWp43m36/X23/jXFeK8XhcDgcTnXWFFg9hGj0cGs/BMWGrbHl89Rm
+kaPmd7MoEiZXH+IS8xe64PnQsGinWoid9V7RDBx+wMwB9nK6j0KwFpsc+qhfMIZbCauJWkEJMVGW
+mytEogpHid4lqrTkldS+j1QVV6ITaLkd8HSw480sigNYecDhA+r3ALMHgNnnUNE70UruEhd/9FBq
+bu7vvA0NCxXjA6ymTFSA7EzVzQymfdjw1yJjJ1FKk6ov8deflIzBB1bMYemyACUAxMKfIoLW92Eh
+tu+MPvilZ+1DjR+QBfEO0Vh4B/JDl2oA/k4quD9HZr72sj35Pw7nzv/a/jn3Rw53dr7zVUS1KAV1
+FFZfGgR4jryleki+wbBVrASR/kMer/X924RcX+fKVhsgTtPy3dqvSq1H0fEpjZBr8tBxOBwO5zJc
+6mUKy7N3Ukg+vUjsBVZ0RQHkY6zQ3REo2ZdQwyOlD/egFk/Lxuh6lL3Q1z6JDthlbgiEBJzGiQ4x
+c6Yd1CwVWI4Qq72y8qUF7qJ3RjYXryNGZEPFOUQVaP8A4G4F5l9k0S8zvbLdttk1eVqBjvvZ/lNP
+YXUKktg5t5w5+mlj8S8GnqD0YRzfXnktrgZmflpWfF86j58BvF3AxE+A2LnS/YhkAKgUh2tARZsS
+QoRg9KvvEXPnPw2qqZc/qnAqagtSvvd+IXXgF4kV3QDTvOSzUDzOzrhFbfh2EGmPEvv+x9uj354w
+Tt7zE8O79fuunr+YuvwIJXMQBSPudca/2+gyTu0Q9b7N1kw+Q+XWKf3M+5+QjfTEbNOD2cbGz+S4
+4CqFTn7Eqc1pbdqZD79Pym/eUaPd2QPiagNooDR1LthS5miMUn3EjtxyMX9u40Uqhn7s3PzV8Tds
+8hwOh/M24JIv1azno0Pu5HNTBGACi4DVXWUmmUmoKK+0uqG6IGkDraK94BAyB28Gta/ohc1W0oml
+WTlbCwiZwz2SPtwCuqoWSFKYSMrOVraNESSN5Ps7QbVSe3hRAdo/CChhoO+bgJGuWmsFarD04PD3
+gc6fZdc1+2yJbxMxI41S7sSe7VGcsMSwS8RY6UtfUAB3S3VxJbnZPGpvYP5dVrbKTsLViAgKKPAv
+ffVGJfnvDxErGSzZSkRWJ2dkqpryg0i6oI1eR6y09xVF0qgpECvZCqBVWnpmN8le2LvU90e/jdRh
+A5Re0YDEjgfV9L/9njP+jVoC2wVABkCAYyZAf8eWmyZqp39w2Br5q6cS4984EGj/tVftkZUb/lqb
+mN7fCAC2Y2Nc2egbIuRLr3mqMzP2N41y/GALhDyLBpuUQA4a+dCtY76W34he5vAS8r2f77FmDn5e
+yZ75BIjoAmwZ1CJAtX6hAAA3QFrFzPG9YuaEYTlaHjBOfuCPpR0/PsTTvBwOh/PacEkRlO54/4Rn
+Mj8NkF3Fl7CZYYXuriYWkVnVS9AWpJBbO9UmWEuBq3ppuxqBVK5Yh0XsrFPOX9hNCakvahUK5qHl
+agAiL5c2eSaiBUguYiVL05IUgH8DS/1d/AdATzHxs1apEwGQngJGH2Yia2kISI+V7OLQzr/PEfvu
+wyapD4kVvRops6JQa4FcpNR+VHIyYTXwbSAzBejJsnkQCsjmFd2v5bnkL7SpS9/9NDEWSo1YRQVo
+vBOQPcDUPiYqS06laBAcOjGTwTW/J1FlaVPbBLRlXbPGvtSQRGPqHmf84Zzh6v5LWb/CaBO1BUGf
+6qmyRQbgF/SJrYI+sRVE/EXPxJcfM19c96/9tw4+toWQNZVEyfCUysbAF7cj9/JWMTfohzbZSBa+
+voPa2gaAEkEYmLEPLR20Dl83YakNOduxfjJV9/kXw+GNqcuNHY0e8bnnv7NHyPU3lf52IBAITl33
+3X3C3fVbvZnRf6x1RP/vh6WZr7+PUnMzsKr5tSZpnvSLp6xDHSft8AMHpfWfPU5Iz5oNJymlQv7k
+vXdIice/KOpjewBbWP0LwGXuBgq/rDhEbXSvRa0/13u/+GkAF65wAA6Hw+FcBZcUWE2EZI1jOwek
+bMoG1dlv3pbB6p9qb2Av4WXRAoBQo1bJHLgdsEqjKaVG56WYGVaHRSQAZgVatIMAACAASURBVHE/
+QRu5AbBK5ye5AdnLIlir66+ImoboShFtpKyljgQEtzKD1MzkldWQE7Bi98hx1u8wM1EWxUrUefVD
+N9sEFqUQSoakNouw1ewE5p5n6U8UomX5CDD9n6W3o/TElBL5ipsKEjvndS396DOCPr2jdIMANN4B
+NL4TGP+PVSs9l7fLuu1onSDGTCMBJRXHyj6gYQ8Q2FLwraKsmXb8HBA5BVATMPPsWkuOtomojb5H
+V7ftX7U889pALYdoTn+YEnlPz4l3N1N64R8I2bKmyKKUCtmLD223jmz9NcmYugNAPajmIFRzID+8
+etotgHATtTO6ZEyawMlETfT7g9rRPV9zeO56hmz5Urra+PHRAwHPwK98UTRnPwZqVIkAElvMnB3U
+lg78wJU+chfs7B5iZ9xr3JRuQpT7yeI/TZjxQ38/MzPzjaamporw5pcoFXKnPvQhNXPkz4m11L1m
+r8flFbKra/wqTkwh2KlNyB/eAuACr3njcDica89l03jU+44LNNeXJVRfWc2XmwdA2cs4v1j8mFjJ
+einx03uJnS8VWLKX7W9UCQzYJkutkdI2dMROVxbJy36W7tKTpZ8TwaIUGqhdOohSA4RvYvVO+lJ5
+vZNFBe8kJUJeMOM9gL0SWSAAloZZFMjVwiJ2K6E0Wc4cv0WTNrxUeTFgabn2D7Fi+oWXgPj5Vees
+egQbVfBmcBUvOWLFQ8RK1JTW2xAmKBvvBmb/E1g4gtKXP4Glrj9gC6GErI9/uGLQ4HVAxwPseuee
+K3xfhUnn5oDARiaGM9PMkT0fKZ8VNYk7KFMqv6KmgqVTrbxmatRL6ef/1Dj6yRil9AeEkAqVcYBS
+KXfq5z7oTD3+V4Tm21nq7FLYIHbGAcABwAWQJjl3dKdlR3+Sv/CRP1G3PDxUfoR36et7BXPu48SM
+1K01KrGWdijJ+c2AKeNyPRapJhBD6xCt3B/XTD0gzcy8/LdNTTcURdYBSqXdp37mZ9T0s39DrFRL
+5fGFvx0eZgK8bAScX2DmwEaV3u1EWcp73uWcmvrp+ulUKkopjfN0IYfD4Vw7Lvse1IWOU6BW6W/y
+uTnWi9DXjdVvQmJnXUQb7QTVVwrTRYWlAMtrplaTmSxEsC41U4GdLx9h5y5Nr4mClWgsPYAAtTex
+CM7SYMVwVPCMpBr++AtLLd/6A0vpPFSxgxZj56jdWbbBhq1Nh0HWeHFTsAUAwetwNbYLVGqaAsSr
+SBFSUiKuKJj9RMeHgcR5YO4gyiMrtqO5P1f7e/8fjBmAGmLJsc56oPU+JggHv8PEWfwC+3f8PLvv
+i8fYIgFRZUKrDFvp7CNy0yIofWURLF8nUH8z4G1f0/WdUN0v58//pXX8lnvLt/2IUnH3iY9+SE3v
++yqxMx2XF1fVoCBU94ra4M85Yi98Szvx3m3le4jacA2h+cuskqUANZTLiqtVEDvrk7Mn/3t47KHf
+iY+OBgC2SvDWk/fcp6af+6uq4oqIrAF77Q62eKJmJxDaxp6F5ncDPb8I+Hoqgmw2UUZzrjvHCUl5
+5FyuZWlpKlAxNofD4XBeMZeNYLlT+8ao4FqEpbFfiwnYb8RGplDQXdpLsALRBXg7gUT/2nojv8hE
+mLG09jhEYPVXubnSSBghNnW0TBMzURo1E0SgbjebZ7kgI7JueG9/NBX4TC8AOELnv+tc/HoPMRdX
+eifaGhA9y0xVBbEkAiBAC4vE6FrzwqnFomaro1crJweIVMgdUhkAKHGkDHXjU2Lu1PvWfBtfTioo
+fqDtg6zt0MRPK1KDVArN5733fd0UHDkXrI0Vx7tb2JRmnmVRxbXOZ2aByMkqcyKw5dbDutQRV6uZ
+u641IAXgbgRa38eifrKHRRvNDEuzRk5WmtHSfL1gLn4qGh08FQqtm15Ob91z5pN7lewzXyZWqtKD
+bfmbIgLrIADK6gcpXfkaV0+RGiIx5++QU8/9PT25536y8+BKqBZrRBpXpa3X3C7KBe83yuoIbavk
+GEI1r6if/X3X/MflWIz+lXb+87WS1v+7xEq2V4wV3ATU7GC1grk5Viu3NMQ2mgagBlhz9fxi2fPv
+MG2lp1dTNiUEc0m0LMimSVyFKBZPFXI4HM414PIr/fwfyJvUOCOnX9i6UuieZf+he7vAgmCXyCxI
+KiA4Lv3isU22z6UgEqA2AKkjZS8ywbKV7guCeeIdJaeQfaxmy8xW6CBKlMWU7xf2C+aSSCmlqcBn
+epXYv74kmosraTNqsxdTcBPz3sqtvKQI1etEbfQmoEpKhRB2b+JnKlYrUsE1b0u1/Yb3zpcguvKi
+NtINEGo6Np/OKbf0BrInKqIybAB7xYi1GqJaWCkZBAb/qaQRNzuvM6W5bv92vP4bh4ILn7uFWEsd
+pcfLQGg7q20zyovvq1BlO5XrpnX3nlMisYyqgVFRZeau6enSzQSsCH/xGGujZGbYvo13AOs/DfgP
+AsP/wgTv6sPMyO3q9N/cM+/4+x9TSiOpvr8PuiN/+j+JFatSNE8AZw2g1rHVrzU72XjJARZZ1SJA
+agTIxyuujcC8yaTOz0xOTv51a2trbs17IvvYIozcXPXtogJ4Otl1Bbcym5D5F5kIz0yViEhCDZes
+X3xInv3jM0Q7S0R94qaK8Wp3shrB6f1Asr/6ythcpHSxRQFKHHHdd+9RYuSE5W2W5TC5uOJwOJxr
+x+UF1rrPmfTMkfMgsEELr0YKIDsFBDazlWZabI2DCeBqLqnTqg6t1jKnFIePRZLSZfY9lNoW9Y8I
+FLeUnnr5LV6lU45UF7NJjQYAhBBiS/UJSsgAiMzsGorYgKeL1bTkVq6BUipS21AIKqqb2fliZ1g0
+oTRqRk33Lf8SaX/sezBKa8golakjd9S/1nCwjMpi9WUEib1o/ZuYxcTSaHmtmW66b/5RqvHPnqQA
+hW2SivZBRCx8j/FX7H1qC8H+nOcjY1LmGV/lVsrER8t7WdQm0VuaMjZSQOxs6SHJAWD9p4DGu5gA
+m/hxqci0kiEp3/sOmh45PZ7vEpuXvvvzxEpcX6XgnEUyG+9igjs/z0Tk8rNp60DLe1it0vTTQPRE
+2dRNh5g59ut1qb8cHqX00U5CqpuqBjcDgevYKtHyOQgyO1ftLrZIYKmf7dv1IJvL+a8Bib7SSJYV
+DzuyR+6lgssEtUo95SQX0HovM8VdPq6aKK6+mAK23DCacd3ez4xdAdGydElV1xaPHA6Hw7lqLiuw
+CCFW/sitp0CJBRTqSQgKZpoCi0qsJbCIwGwS5itLnEqgNksLrVicV+LtZC/YstWAVHSnbVGZrTjw
+skKh+LImEJGTRGkagqLBMlbqx2hBGKi1V1FORZgYoqURJ1sInE/7PvUM1XWbEKxWf2yma30T1AL0
+WPVsJAUTuS3vBSafYDVTJfMUqOm8/sBSw5/9wKCBDIFBQCVakeKyNJbCddZf8isAEU0AFNQqLZAS
+VN1W1p3TlI0JJbO/sjhrGd9GZrSamQLMxUvfU0tn6crgVqDpLuZJppXaYEnG1G45e/Z7TnvfHkEf
+/eUKB38isGPbfgaInwWGvlt4VgsXuNx/0t3E6pbaPsBE/MKxMrGTbBRTz/28d+rgyI8oPYHjpQs3
+2ViUpbCdYSC7UJZutJmAG3+UpSUFB/u5Ce9m4rjlHrZa1SxdPCjnjt9PxVCl99dy5Dg5cDVlfoWL
+Ibbp3v6yLdaahdtAiKLkgsHgGgqew+FwOK+EKyrAVSQ6AUdjSV8cZCbZb//OhrVfyILECr61y/go
+UotFKWTPGtsBeNextIpVGkCgjqZJKtWnXmnohVJq5QJIAPZaJk+XT19WUBlSoII6lQ387BQhuaK4
+EgRBkyRrSVWFRae1GAGpsvbeNoFkH6pen6gANbvYasW558v2IaBy67lc4NPf1MjmOCGEEJIRdO+u
+BSr6Sr9LSllkx1kPSL41biWhtqN50nJue5nK9ZPMe6wwRSk0mAl84gXgEu9oQgArw0RTeU1Q1f3B
+FidMPMbSw6FqoianAhKc0R/uEMzo+tJtYPem48NA7DQw9M/MfsPMMCFjZgs1UBqL+o0/Boz8kNlb
+1N2MMoUEMdf7Llfkm7femECrLQZKzWwBJqI8HcxzTa0p22axZ9fMsJ8ZMw3Ee4Gh7zErjeB1QOdH
+mFfa6ltgp7zEXKhcqVi/h+1bLW1MBIuKgUUqBeZBKn3VqBiY0+Qbjtq2zwIASqmtaVqWEHJVHmwc
+DofDuTRXJLDSLb8bs+Sm3pIPbZPV+iwvCa+G5C4IMaPkYyoGIlRQS39dFx2sjmUtnaSECv5XZcEX
+qb7XdrSs8hO4OiRK7W5Ckpfe61WWphCJ2nJLnCCzeo4ZURTHwuGWoZqamkl3/v9MCwSVSy2pyaKF
+FQhA892Afz1ruVPWboiKgfFc8KPfSHkeHF8WdcTMCZr7YwOUiEcrvvrsDEtlNe5hUZzKiRBBm+gU
+tLF1tqNtzHJtf95SN75oOTfvy9f88t/lnHvHCS5l4yUw+4f4+Su/nRSFdGuURXsqvmJii+aCT0Cu
+p6IOUPYAdbcA0VPA8A+YuLmUwSwoS7fNHgBa76kU+9SUHfnT73FmLjbYQn2gakhRVFk00dtx+Wsj
+YN/t7AEgO82EXc2u0ntDKSFUL4sWOpiAI2t1ohItKtUuWOqWftN9035L2fiU7Wgdth1N07badUbz
+3futXOjnBpbFsCRRS1GUyzz/HA6Hw7larkhgzdV/KEmt/EDppxaQnWSiSFwjwkNtFoUo+03bVtoP
+Q/CWFVMR9mKv9hKUFBbFSI2gIhNoi8MGdVXrO7M2lNDlnJwtLlsjWATlxpsrB1zV8FcAkSQpHg6H
+U8XC4jVfcQJ72S9PgQKAyIraux5k99isvHxb8I2ka3/73Oqokm3bVqreMWEr7ceo4F7ZQABkZpm5
+avN7gM4Ps4J5Uvl4ECseFjMnbyVmMmQEP/hkrO3RryRCv310eTuTeVUWPRCwaFFZD0kAsKXg+bzn
+ni9YcvuRkkeSgF2bbQAOLxPspVCH1hsWzMVdFecLbAKcdcDUk2wl6ZVAwARdPsJW55UhaIPvUDIH
+G2xqi2vaL+hLQGrsyh8ZM8vOKaisTqvEo5USUKPMr8Jm37mosLq58vNQwyFoQ1vEzImbBG2ogwou
+W/d/8OF88MH/udT4lT9N1H3tccty6ISwE1mWoIfDYV5/xeFwONeYKxJYPYRoghnrB1FW3pyUstSK
+7GZpwGovFCvHDDtXmxwSxbSkhou2VDNe8qY1s8whvJr/EZELkZzSzBakQIK6Ns2BGpUL5C8Zz9Ic
+yzVYlFIblBJbm2mCla2iFAl7aVZe3yt2KxdFS5ck6cpeaqKDrTxzNTCBoQSA5jtZGkuLsfowb2fF
+YQLNrPfE/u46KvttAKCUUofDMddDyJIR/sRPQcRSwUzAoilT+1gKavsXWU2SUlPlUi1R0IavVxa+
+9avemd+9RzKiTkplCoMQESLIWj0VKUW54SUljmi65ne+HG174vFM8Ff+jhKpzI12eemmWP3ZoHmx
+xHcNYGK85b3s/uRmqwS+5BQVvBep4JmoWo8WPcUK0svOR2A73dln77BhilXW7DFxFHm5ykpMAVQM
+jtpSwwkquMpWfFCW4rVy7HxVRG0Jy3WIjhBQdys7ptraCJpXBWN+s5Q78y4l8o+/4ox867edse+8
+S0k9WQ+sCFVJkuK45DJgDofD4bwSrtgE0Q68c5RKgdniBxSsbgeEvfSr4QiyOqxVUNETt9RdU7Zz
+y3ChaLpwAp05T5elEwF2CtbgubT+yhb8c3nXrQsiqZKasjSs1aeNmAth2ZoKAoBty1b+7O+vp4L/
+zqqrv/QYaxVTMoBgUyJdwjn1khBCkAsGg5ftd1ckuA3Y8ptsVV3Xz7Hr6vsH4PxXgdnngPpbmZfU
+6pOYkWbn0iMfcmsn/ZRKtiAIsXA4HAEAV+svzVKl+19BlNJrsDRWLD/6I/ai7/gIsOlXgfpbqtSh
+UUKsWJOSfvLzwbnPPijYKYkoQpbQVJKIpPJLpGA+Z2ZZDZ0Yimrq7mliRkSqds9RMXCJhs6VKwQJ
+zYrEzpYWL0lOJjz1JcAs/5rEvOG66duL3Sd/Odvwx39EpeB8xWlycyyaFNxSdkpbEvThSo+tVfOB
+kapI19picDgV/G9fnN84/JDp2v3PFYfpKSA1zKJSa6b+VjHzLLOWaLoL6PgQ4Gm5RMTMkgjN1xBr
+qVtJPv6rvsU//IJX+0kLIUoOwOLExESU2zNwOBzOteeKBVYu+OC4TRwrxUDL6Rszy36bvlKING/4
+7hg21S2DgFBFTVU9iNWpWKVWDpRI84Zz96JlVUnXmNmCcWm10BP1uRP/8m4q+W0otSDagRtFY+bG
+kp0EGfD3AEsjTNyVWi6k4aifxFXcv9XTtizJuLq2JAIroA5uZav9pv+TpaFS46xI2kixtj7l7Yby
+I3tdiX9+hymIekwUI8uFzIQQmqz9/f9tyW3/t9IkyWL+TAPfZo7w/s1A9y8C3R9jDb7LA4VUc0mp
+Q78Umv359zlF75wn/+x05fxJobC7fJUjAMmbkkSFAoBJ3RTEWd0GoSqEEKTqiJ0uLZiSXKzmKtlb
+cQQVfdOJhr9+xCQuLeX7WL+ubH2scifKIneezrKaKIDa1hUooJI5whZCZ9P1//2Cbcum4dzZS6VQ
+qaizCmnCwCZADV8+vZidYd87wMxlN/8GE8JNd629UKSAqE/e7Jn5g885jRe0xsbGqRtuuOEKfwY5
+HA6HczVcsUCINt87IdhlOTojzfoSSq4qLwVSWKVVvjhJXMyIN83rQuMUBbl8FIiC1dIYKZZGKQ4v
+whY9U5qwLgFJBIhUVklvM/NKJQS4m8telIYs5k/cHZj9vZtDkx97j5w992egemmoTXQy801jib0A
+S8deNEngOF6ZwGJpyauCsIjFyA+B+YMrIoWARYSmnwF869hKy9XXaedc0tKTH3Hlj4X9emkaLdT9
+s0lbDX0XcmiscoIW86W6+A1g4hHASrM05ZbfZNEsUhrNIjTvknNnf901dOftEFQTtEoBuJljUZqy
+67KkliFdbDBXfXTl0RRKHbIxextI2fcgedizV+4JBkJN165jNgnqhBBiCS2aLTVeoESpNGEjhLUD
+Esv0lHCVmWEiUeqoT1DolJiLYjrwWxdsMXCy9DpsFj10NVZpQUQqbTVAgblDrHg/Ow2ojUDDXcC6
+nwe2/QHrv1n1Z7Iw4v/P3neHR1F2b59nytbspmzqppCEhEBCC4TQu1QBEQUFpHcpoiIWLLGjKFhR
+sKDYMEpHKYL0KkgJIUAI6b3tbrZPOd8fk5Bkd0NTX9/3++W+rr0IuzPPc+bZ2Zkz59znPnx5H3Xp
+iklnAO7QWWxGM5rRjGbcLm7bQYgixC7IW15BoqjPfwiCxHHxROGoe5JuKCBKWEFUtb2OiCJPhVYj
+G+SenvEEViMRpMUGFDCisAiqrtcALMDLk42iLNilLw0CVJyS0i7e7p1hKL68lapq9QdK44ZVBO3u
+aR9VsBTJqMkCEFw1rbxqAJsQnPzbQQBEm8SNKjnixmECAhL535QJEDoQgG2cLaO44njvyg/G0LQy
+KBMzGzlZbKcTpwVZ/AuiLCwdPPGmnEaA7I0A518HyNkkOaux0wDCh7ilfolYoyOiY5RZnhzl+bRq
+0JKm3naRY6IOC7IWDgAAmqGQoujbj6gQkaa44kjABm4UgsRPk/m6rxWAyLFxhwV5qFPa1ImE9bMA
+5VIkIdglWwnlSjoHwhtUt22fZCQCSmtLCCEcG2oFoi7zzLUiEp+xcVsbJ7raJx2KxJk7/ybAta8A
+qs9I3DNNLEDcLIBW0yVnmPUgS4ZOGeXIHRWd/XO3TES5+wbNaEYzmtGMv4o7isDwquQrQOj6iz0B
+iZ/kNHggEtNuN2EgtJ1TJl4D4ImgDHeI8hbuXZjdLKSlsVybRRO6RlAnZxHeRjsViSYRVRfc9nVU
+S3wVVYjUssdlBABkANDDUzwB8E+SyMoVf7oTluUti+4yeHUXIBJZu/Js0+1yUAAoPijpWAV0dfmM
+k9G20yNUps87a8wx3ljbiLn2X5Hucuh7Qd1rEq+IfwXZwFwPg0tyHHk7JKV4kQMIHwGgjnDbknFk
+DKUchXGIeOsOAQCAxMuMtK8BwSl5XqIgeFZUvckYrnPRrLQOHgjxSGlNIqOruGEvI+NZzK9wS9fy
+ZmlN3UxBIEKVH0Ha7WS6XdCMkyMy/zIgstvSnUJCoyCPP460d46HT6Xek0X7AS6vBbj+PUDlHxJf
+LrAXQNxsgLjpkqipq28rWqMVpt+SWSPoEdFzZ+1mNKMZzWjGXePOHCxF2zOAQuOOzI4qiUzsKXPi
+4hAgEKudic8AcIJIhTuRCrzqtg8lk14IUmBMHSo5SI4q13SPxU7HFRPCEcIZiMN/ynFkg882nl+U
+dJeUIQDa2NssnadrxSZ7AhgypChOIxCOV3f8AyjmP1d5JXISp+xm2SlroeRkBSRLkaYGoPiKKJVp
+80i65kpEAYAC08f62S7MfcBxYcaT9nOT+tSoW2cx3b563ek3eabAhhwBIvcQnROl8bO+l1Ja4SPA
+9fQhglHHiuWxiJ6cVncgpbQj430jzIQo3M2aNv5WCV3LRXP/spFS2nhKKwBIUVVBBJ6u3k+D4NIo
+XBRqxVApcOOcEVoJFOXncYJbgyAls1CCwew2cJNAWmBD/7TpFryFtDbP424EJCe4YDdAxicAF94C
+KD0kfeDfDSC4n7uUCnJygiY57QBNQUGBu5hpM5rRjGY04y/hjhwsL35nLqGYell2AgDWUuni3VCj
+iJJJlVwu1XdIBxVz8hZVhBAi0FqOJ8o8cOW/qPQALUYBBHQBCOoK0GKMxKlxmhtsRECURWRzVKAJ
+AIAQG23VTUtHWrMHCCs22ExKnRXtBYgYAeDfsd55a2o59P2kdi4Vf0hpMVfdLcanxMF2O33nPKq/
+ilvcj+tEOVH0IMqJQNsyBqmrV3eXFVyM5S05LykMX38jr/5qudy0dZN31ebP4PC9U1Aw81WRWxc6
+vUd+hHSDitEbEKW2R0X7pCiRTONqIkvbrwyC2+lxecPov4zGC8PbJb6epw1Fq5IRTTSA5GwIIvBA
+qTkgbOO0JCG1DcrrnLUGFiOIgDfrvH1zCALwQDi+6e/T/X1EQawKee2YTffYy6K8xRmP0S8CUtSN
+t0i9Hq98JvVvFCwAQT0l0n6j5Za4XQSAMAzjnZ+fr3Qbsxn/NdgxAXz7xHQbFTf4VXdNln8ZiEgW
+3BPWLqzTwKFj9+PNqyzudo5fF8qX9vTpH6bTLWgxImV4v5Tbi5L/U8heN9onJkI/sutT2z00l//v
+x7MjI1uHtu1978Rf0a137NZREJQc2Xt0h7ErQ+9m7P1PxQcnxHQbNeK17Xe1/98JTAFmWqe4AUGx
+s7tiU9qF/yDubEKhk0NUdTzXaDfBIUWIvOOklCBhJMK1lyutiYCobJmJVFCtAJUTUdk2R5QFNa46
+40xS9KjNo9LLL9G9WTShBFHR7grSmjonB3lzIcfr7v8aCJPjZnfJEanyLnwkQOxUgOCeUlWeV4Rk
+pzIIQB0utSuJGAVQ+SdA9s8SMbvRvDKnU9Vzm9V3TBVpUpT0PwOkvY1Ie9eH1wgA2KsAyk5IDpY6
+rNH2RDD6yEy7x2lMG/rRXMH9RLQrAEWKiDW+tPX8OBAr18gMW77wLn56gtV72na7z8MrUBZ+HogH
+blbln5JquV97N+VxFG2apgVb/34Q4qES1ZAhOVnEJfok1mgovvIGKYkAEFBHW4H2auyREVoSWhU5
+d90uFKwIUA23HYFqvDsnAA+2fB9Ap+coH++p6xMCOAENPk+ctQYsetLp1fMVQdH6GADFAaE8O/oi
+B5D/C0DhbslZlHl7tBgliTSlTCbz0KT7fw+IKdSLo1sOk9P0Wpqm19K0fK1WF/t+0qi5Cx7/Zn9M
+XYr8bnH61c4tkzolLx37zpb4v8tmT9i8bpXP8yvW3vPoL2XBAAA0QjgAvowCSf4n571LUCJSwwCp
+p1gRdLfe/M6xZsPOobuL/Vapw9sOiooJ0QfE/8c4Gh6hQNQTxBeAgV5/dazs/esUL77+bv/HN16N
+/jtsuxUQkQjADACEZ3kEt1YsAs3EIsFXGWQS7mZ8GYWtEEkKCqTtX7f2r6HUDHICuAAQHoF/oajn
+zp4C4l/iuAs5J+VwbCK4GttyIoB9sPS3zBvg+gbXvZFnQy4JVAgHYAUEC3KaHvlyw7c5AFD/VMaZ
+pbSefxJI/J+KWgX3RhA4WdglRFYkhCMMoigyjFMWq7rCm5J+ZMwnn2pUFUhAEoC0FUnpv9AhkoPA
+qKWbsNMopeBQlCr1qtIk9W9XBQNZ+BGz7ulNgqByrzq7MRENd3fvvTMgpTUKqjZHWNPvYwF59sb0
+FacBdB0BgvtIx9Ig0EY5czuw1oMOEKzuN1PkKYoviZZZqhexljEPijJ9CVJeNJEq2BofkGCXihi8
+IgHg8D93kLcExYny8PO083o90Z2AJG7LWz2JdtIsd2kA7ShME2kvydEXOApQbLyhzFsaiLh+jxQg
+G1oOINyBtIFIgSg5U4iISrFEh0QeRdAt9SxxBt1T0iIhckbBH/QXib+zRv14elHM439E5W7dJ7cc
+asVwWV1Z84lBFF8ZCcg3/k0KToDiw1KRh7sKfqNJCHFqEbGKEA8aZv9TiCeCwCd6h8QMTOzRc7Mv
+Za0SLdUB+Zl7xv7w2vV7S2y+SwAg/W5HVyk0SrkXE6VimX804pd/Yo/+6EnH8xldY94GgF9FHhCA
+4gn+V4rCIhAiEiQiJ/v7215gClCLt9sGF8sHZD/61oo5Lw0OqgKp9ca/BmQoRACRNKy8uksU5edq
+T3+/7cm0Li12AMCnf4N5twSFokgARV708DhHpHNNFO/uXEORIADwFHVnfNp/DAQFIMS9z+9/AHf0
+FEAIQVrIuwiErncwCEg95miFFG3yS5QaBlsKXGaS2wTUXhMZFQ8A50qT0wAAIABJREFUIHMC1Oh7
+54Bga1y7Lzolocv0VQBpKwAufwpgznGprFKYBUpXACyDAADIMALLsnZCUkRG1flDlIXvdhdsFCWb
+sr6XOCoFv0gptao0KYV49QuAtLcAyk567FuHRGWwK3vvsqs6VAFpwoNyGgAMF6TKyn/83ELBqei1
+G2URjUv+BTtA4W9SRNG3faOPiGjXMNYzPQlyTXevRoecoCOKduR0p+yXEwCFf/VJ8RbgnCTgCIBL
+5aFglWQ2NC1dokFIGOvZrjRfogCQojeCLVsNgrlxqR1hJOdKcLqJhgKR31l6EHmghKIAihBGpP05
+TfnLyQB8n8ZjUlIRRuVZSeTUJenJCNk9fAsWLPcrmrXYPztmfMdTif0Z2iSYgt49UaH/bo0p+J0l
+nCp5A1LKqsbjgkSCdxqkKtybWOlwgLKgoOBfTbv8XXCIFGG0wTmxy774eMOGDW88OGnGkiWDdUt8
+zddDD+y7MKhuu70fzdeNSooapFYHTUgYMGnAB79WajEV6Mk9YrpHdn2o2+la8j+mp8ruDQ3t7z/i
+o07W6prK6iLrrsoaLKkb5/LWpZpJ/Vv39VX7TojsMmpoyvYr/gAAT9/Xrl1wwqj+K/NRCQCwdbw6
+qHuHe4d0Hr/GHwAgPTVFNjoiemDQ2HXtGtr/WJy6/TfbDz94Pf9ay+o9KffqRryWzCv1DACAvxq1
+EwbG9VerfSfou84c9PH+dC+PdnSqt8MTMD1dtnRUYpJeqRzvFdxu7P3Pb2jTMLp3ePU83we7RA/0
+lSkmtuw+duhj7+0Narh/+v6PvcZ2Ch3gq/Yf33fc4/0E2qsRXwARyVdPDWvZNkw3xiug1UPDH327
+4/6bFL/UfRe+MvXEmD4TBy/88lAAAACuH6we9HPwsEP55kSrMctvxUMjh3fo/3KwqzguIjKvT+rR
+NsZbOU7p2+rhe+Z+kNhwvvO7V6inDozv7a+UTdC3Hzxy9vJtN6p0Nt0PgV3bDB2+aNHbscM6hA9W
+qv0nRPZb0G9/draiwfjUq9N7xsV4K8f5xPS+b2tuREsC1I1r4yv9QzsEhY4dsKbunFnZXTm4fcKA
+NvcuaYuIBBHpt2b2aRPn5zVWqY0e32/6W0n7EZnn23tHLX1h5bgrhblxFYdXDwjs+sig7ivRzXnH
+ojWqJ0a27xbupXzYKyB+3PDH17VLqU15nZ4N7LQu7fom9luW9MzYrp39terxPq0Gjn7k9Y031KeL
+Tq9RTegR1cdX6Ts+ecSjAx1y3ybUwesRpnH4jeoaMUip9nVbj/3rFvs82D16oFbtPyG217h73tyR
+6+u6vwismDpWGZqU+OCw+bNnd+oU4jVG6xv5cNcJb3ZuqhBq0/0Q2L3T8KGPLn6rTe/Y4HvVMu3E
+xPuXdC9CVKVM7BofEeA9zjs4fuzYpW/F1aX8EFOVS0d3SA73Uj6s9Gvz0JAnPu2Q2gQPGHE2OzEp
+sKdv0qxhYz8u85Le28+kTO3RMcLPb5x3i8QHZryZ+pcj3XW44wuqIMoLKVafSzlz67UPbCWSCjuA
+dDE3XpYq8BpAZPV5orqTiXAWAgRAZEQhnJAq4XBYFhAZADYICnE1AMamhc5FeYtsTtbaBhxPgEi6
+UlV+fg4AABL/XrHj3JSnWb5MQ4SaPm471/FUig5KrzrcbDkJ7eTVSRtM/q8eongTLdBqz569JV/S
+juKt8Dfxi6QIlEe6FxKBjSu1e/XfpOAr4ohgqv/B1ORITmnYEADzdakI4cZuDpm7rpLHiQGaWhWZ
+txRpqfYYCPgPPrUgIPF2IKWpIUJ1vdwAZ5E4gD5tpPRwQ4j2AK+ab7tXyd7eo+SveYM8ZDBYK92d
+SMEhpaZFbPwYchfuJoWWBG3Z8rbGgFfOy2wZ7Qlf1ZhUTqsA/DpI68k7Gq06QbuStpzvCiDQAJAM
+AA+i6GtQ5z1/TU1eOS/IE6pF1osHRmMDiuHcnjkJSKlup1H6Zv7VxPZ/DiKhEAVpNcaNGyfsXjGy
+Qo1VjjK7XQ4AsHFh17DVq397oVjbqmVSF7GaM6QHfPHhiwd9ltd8zIptB7K82Gvhp7YZAFBYcPyn
+iDK5MkWn999gE4UMFPFFilDPAEDhhdUTfF99/udnrsiju7RLblEBNUX+m1e+kjbzV+sK6uNOnbzB
+PmPLLvMcAMg4lqUcWF6UtULXk30MAH62VWeEl9LwckCQbl0pQFqd7aGduul906+1uZbtUPso6JgO
+CRHRpCYwC/gipihj62S/Nq1Kk9upNbkVZyPefGPLWkT8KO2TidrXnvv56SvK6K7tkluU19pxcdhn
+lW/vnKVr9LSLmC6b3n3E5KsOn4lRXfpWM5xRcf3XT+geFaaVALD7i6WD9K9/tOfFCq+oVondwiuA
+y/fb9u0XhV0XbX/t5AcjMytPpGjnT33ziQzef3Rsp9B8P3uO7dCFstZcQHhZ3RyvDGg5YF+Z7+Oa
+6G7QBU182fGfvZ6Z6/9pKuLmcS7RhDWze0a8/cnuFw1e0VGdu4VXCtw13fZP1uZ2e2b/K9DuoCG6
+paVVYdmlAEawOWMSWia1bhd89sIBKKg/HqTm9201Ks2kmBfUvq81VDBRlSd/8HpqknNtKmJq9No5
+Xi8u+fCZQjaye/vk4HJaMGoOpH5pSZj67fL0rx75Q6AVcbz12qrde6uut4rqWJMsy/PJKTwdMmXB
+5ncQcT0hBF8Z0bbvzou2FxRRyWxXvX/x5l8OayprOH0AJRcRkXptoH4sIHbxrYYzAGC0slW+BOil
+IAhHAODKogGtBp+vki/0b9vLGcRb0HR2k8+SR+DLad0HXw06l9b2WmWZVol8RNv2sa1DWsPJ4wA3
++ClYskQ9ZfS7c7KdXqNad0ouczo5ddbB7+TFTwa/CQD7vHhQAF/5RMGVXyLOK0MuJ3bsqCosKY76
+bcfvx+9Zfnrpb1P385MGvrogzeE7PjapdaGeKrbs/aMwxqlq1UQPXxZEZ74884+fZ8W27FDdNT7P
+J7vwdMjkhZtXIuJXvy7tH7T6nR3LctUx8YnJWCnUXAvc8P4rJ8am4rs/jSM3+Dw8xQi8k+lkqTj7
+wcGLndJbJQ28rqsqDs67uEffcqx2JSJudnWUeVC0cVZdeW/vIeF6bFwPY0flJX3RxT2a4d1OH2uh
+VWlbt++sqSrKCz/56/GKAdz2JxHXZU3tuWzWdbtmTHyn5DIbx6ly96cqly8OfhsAdt+4Hkj/kHce
+/G3IOXPYMlVk+I4WMQGHEPczT3SdMvG4PXxKRPvuBsZRpTizcbWjl0P/FgCcaPoKc3u449uFU/+o
+UZQFX270Jm+VIk3nX5ciTzk/u1cQ0j45DnlnAwBPAABoWuphwmt75iCtuUl7FHcIdOA1Xp5gqasG
+43neGQNwI4oh7/h1OqfqvQBZ/X4gMs+hQeLy8ghKEGWhGXbtw69X69d+K1C3UJ5HoTZa4CmDKN75
+rY23AFz9HCBznSfiNuGJlZj9lx4XZJHH3HhxRb9LYpP+XaDRAaJIAbqokddxdIDc3D3C2m0DewBY
+CgGq01wrOwWU6bMA7kSl/i+CUQhuQqHIA5T/IRVHuMhzELRr5KYt8/wqFozUVCwfStlzJriNqQqW
+BHRdj49QPMpjspv+2aDE53Op2CN8dQuF8Yf5AYVjZjD20xPddpNpJQV3q2tdAUEEGVfrXDUcz4d2
+5iXRjuzprHnPInn15sWsaf9Uwtc0ijIAgqQHZrgkCdU2+q6Q/Ce5cv9JEADkbGbtlTWvdR4xdGD3
+OVPHD/34+6vLSpgQZ1KPtvsRgTqTXjXlghAbETdm6dID+/dMnxhV8i6bfWHIuytTO/YKcx7U8Qbv
+st+/jgMA+GXLoc5mVTwVFhe1j0KHiAACEaUQ9d6dp8actkf1CBk0++Uvft81c3pCzQu+pVc6Hfzg
+/XvaBlDnQ1mOvrRlYzTiQvk1Vp9ohhp5aXFl79mnkS04fzG+nG4FyYlhpxva/9T3e/dOHNDmg5b+
+4QXq3ku+3vPW5A1sdaZDRAvFBSVcpVuPeHbBQ0OnD9bl/SZk/THi0yyzbu+vx0b/4YzqGXTPjJe/
++H3XzFntzM/7ll7tmLnhoyGu67NlyoiOlyq0M4z6vpvufebDOdP76OZ2kudcrT535KG9JtRdOXJx
+2iVnRFtV90kpC19OmT2xjfmZYMPx4Mrrp+fORmR/ev2T/hfNPmNJp4c+vmfynJmDw8pfiPW2XwFC
+QGBBzH5UHfxnhXp+uU/SpXtf+nrOp6/MmzlQW3C0dP+u2ed25zZ6uMDUsfTlizmzrjgjY7x6znxh
+2csvzx4bZ1sWWHWkRcXlY7Nflr1kffOdZV90C/Y+pY4cfOqPIz89/80HcxppHh6YHxOdWS6bW6JN
+Ptl38cq580d3nNVLm7vffOnEwwXnbcH7fto25qJZP4Tp/PDKGU+9PHtaR2pxhO0MZ8059ljcEdRQ
+Ii+CYAZ7WNJFRdsRSx6/r9OMftrcP53XTo48CaBJfzzMLz3HuLDAq1Nl7PjnZ4/u325BN5+Sn9Vy
+ysFj7XWdEJEQaHSvQUABKYbPXDcj/Ho582ihsvPF5AXL5y2e1HVWH5/8X2yXjj5kHfdu2fKlw96O
+89NlKZNmbdu39sU13w6DRhf7U+/vCK2gA9qYI/qveXXzgZmvT+w0K8F0uabs5JEHEVEGACDwZkCt
+zmBPGP3evMWzpz/couwDTVFaD9pe0fKreSt6XDRpHhESRn/Zd/qCGcMiTc+20VrTCHUTShKxUI7Q
+pAts+yFPLb6v04z+XnlnuCsnRxwB8DlzNu/hc1xMm4gRjz236fc9Mye1rH5DmZ/R99L3K90CGiIl
+IIisk+jbb5y5csvzK6e2XNhZmX3GnnVg9v1bwE1/kiaAyAtI+cceihoy5clHhnec0oXKvFZYah1a
+2nLcjlGTp8xc0IN9wsd8ybei/Fr/jA82hlczAQmm0D5fvL7lwKx3ZvecmWC5XFn2x4lx+xEVokm6
+o7E0Q33/3Mh7vjmjfrY6YMjuIWPnvf/OEGLZPm1G4klD8Ew+ZvCPj675Yfayh2LmtsM8S87G9dOK
+EO9Q89AddxzBuhoywtgu74UMABhd/y5K1YR1cLtsExBRdt2p6GgiXDEBACBEYQEA4L37XWFN+0oB
+wC3E6BGUsoZnI87ybISN8BUUAIBKRdnBxTWQJ/2aZs98ahZT/dvjxFE4lBKq3TkqN51HZeXl8btq
+Ap5bZ1f2LkYEJLU9DwlwhLC+NkKxDhDhNrgYlCjS3lbg4BYRBJcbHooAlqIm9yECRZxMaI3TZ/xG
+2rk8iQhG6eJFQIpg5e+QeuoRWnI6moJcBxA+XHIozLkADoPkpNXNWxfMUgcDBPeVyO2XPvTUN5Ln
+mRa/yyAr7mZH+TeCIBteg4xPNvAl+hvviqKkeB8zRZL4cFF0J1x5hKLqh2VAAAEFl3QpAdB1kpxb
+q9va2x3qXocZ0yHP5E1Ead/cbQB8eYN9RaAdWZ1pZ3aim3MLROLL2SsAjFdcHDqCQGgeEJoQAxUI
+EW1Np3sJSD0ZbaUAnM1lbMaJROsg4KGP5/845AwRHBU50Wk7v3lCARbH6RN/xGBoz7LOsxc/+cvS
+7n+kfTLP5/TljQPK5Tb+2KczkvWruKSW/pRveUWGlxdXkTj15ce/Xn//2nw5Xz4QEc+MjovsyUa2
+uZI1JjmP/0giBfMAgLhfcX/omAHlTKjM+dPzbft89XhciA+oLNXlcj6sKLHv3Ll7v1vwXb7GfDF+
+55Jz2axcHzl0aPL3p/48FRVhLNYfOlbSlo0cmaeWt8huaD8hhP9kcpKdpolodkgCgCJvQYpNcGrU
+sXu3rJiTtQUA1jzSOmN7SWVnsFgCD52p6l/OtpA5f34poc/XS1pJdpTJMbS840pE5ROE3IiIbD9a
+1aHGqytYou7f8dzw2HIAgH3fLXsn9Lp/S/bsBtWFPLqPo9XgIwffm3K4NsJwenG85rcdOVmjA36v
+DDxxwdbeGpBc0Trpvu1vzEooRcSK9CGRp86WCIP9dABfnlbFZlc4OpTaM/LXTus4/BMBqThfwbfG
+dD48Pd8RAwA3niQO5DG+F/PYXrbWQw78vnL8sd9XAgDAiYVttPt3ZF0bmHXogk9Vi2tGIoo8j4QH
+ABtxiYBtPVwVW0m6+ldFjt32xgPxxQAA5zelfKpJU3ZIDq3AdzO4fvbIvukT7p+3e+Jw4gCA6mWJ
+6q1lZYVPCT/uC2cYAGBibIH+rXf/9NacvFQEKuN068u/pVf1PW8FtS1D1BaZg1rynYau3Pz0oIzN
+AFD55X3Hf0g/VUHxN//9UBQFP2xKiyrhgvXG2AfeXjWuY+EqALiyPeVLrzPycyq9j8F8ySinAQQO
+BCchxO3pPPnNy5lTv/zgud1b1rd6MIwZVOYEZZLeW+2sKva7BCCjAQDoYGRIzOnfV8w+Qwjh/3g2
+LuPHawa7tw8GHD/vjLf4drIEtB26dcW0niWISHLua3niWBbXREUqBxQba/fzi9u96fUFuRsRSMaZ
+uIw9aZUDCi/mBp+4WD2gXOGgz361sFPbT2Z3iNShtqzqslLOGDoi4qajSxtz4ykm1N4iKvb88Fhi
+AgBTysCI7VcKK/qe2PxLFADkNJ6bB8KEO1TaiKMfLbyvCBGoqozY80czfH1HLJp7ckE8qcS0mVfW
+HtxSUsObAg8v2p4zS/Husm2/bmw1OoIZWGYDZRe9l5ezsoS1SeXiPIV2kbWlJS9fl9W3vOWkc1Ne
+fGrlW4P8agAAdhyvTiqy+oY60rYFPDXg0zEsS1GhjE3mJJfDXz0CwQDgRgC/E9yxg5VECMcfa3EN
+iUIgaK+/WdzkNENaa+DV7a+jyAmkdk6algRLi1rMvRRZvm4jbbU+RtBW6zHSPADNI+NtQOJllqrJ
+gQChnYKi7R6LbsEJ4Ix16UG0Mmjx89CwVhG7Iis/H5/S1ry0U24+MJzlcgdQXGE0oMC6WUxAlCJW
+Ybki8b0sKmJP2AIWH7eRSAMBjpAGvCtarOHtiqTDMvrXPwlvcG8S7Xr8lLLc6TXweF30ziO8/BAt
+lQ4PvulNQTgbZdCMP8fW7NzBWo5MbUTYLv8DAP+4dVrIXgZQdlRS/dZGS1EPzgJQc01KL+oSpYpL
+79YSXyhvm8S7c4HIhuSKtK7c83r8I/dx4pC1LpPR3n/QAD0bTWUrlYojfNtLKVPXpoIgsB7NVOik
+CsKCPW4fIdEa7RBe4QVi01+4zFuqUs3d6joncXeuQCKf+7YFsJZIWlaNRW0RKJUNRMtNGepNQu4r
+8clqrrtzCin1dbvm3suEN1D/v6UNHbxAe+lbX53yxrfPTIm8lv/OnKmTj1nY4Q4rbSCE4OlvFivK
+7U4vtdoiaDV+nbTeSMwA4BchOxIeGXQR4qeUd/N9+9imgpzBX704qb1BHRkrqHzW50QROzzZBgAA
+iIgIVYWyMidqZXKzwluj7uitUYMIAHI9dS6yVcTJ0K4LK73sb53XB9gSdlbHl16rKBUeXTTiu+pT
+LzyTn3ahb36VX6ugdv4XdBP9zPBI42OgRIYACIBUw0oLGkSxwXVOBCQEUUnM8jInamUKs0Kj0SR6
+a9QoAoA8mDofHRt+gnFptVFDyzWCXOGwaONv6N0NnPh6LgDkTti4OKQaGAUbFNaoCXiLILqKzjUq
+FZXZXhwtV9FaH8MJRXBdigmxliytJUCMrEZjdVplPgpnuFYTqAREUiECaRkXss1XLWtUEq72UyiN
+QMtk+vDKhu+HB9KVdF61FzhMCgAwAtzoNeF2tloUGo3VzvCMTn/DiewwJqUMAH57/cVQ7fPAqln/
+oMJFp+qzHC0C0MBk1bBCVYkagAUAGsBZXzFdt2BOACL3CVAJLCugf8SNTItDIrljXalXU5wdikJi
+oRiNjaZF1j/MUvd+3MiUCgDYAynPwrFPJt9czuC7e31SP179aCEd261NZ3lWgNGAjupKfwSsLgMA
+iWhFg4j19vPAgAgAMkpgHKxcxXhrjTls1I35BQ/k9sagkTgbXucoqWudYFCUO3iNUmNRa728O2m9
+pVymNow5GRap/5MQgkeeci2wJcA1eBbnqs1mluNowVjeRHCCAp6rd00QaERA3jug9vuTeQs8IQIn
+AHvvqfXaJ7/5Yk4Oie6d0LH7NZ3RIDoM5QEiYn1aXCyHkjJHe/RWVtKOfK8Kk90HAIyISMbEBnsL
+fA3jo/aNk3sFtwAAqBHBFBcRfUbmAAv8RdwVqRV9R2RA1Zbr4Cy8iQYIBUBoEQjNCUzoCat26jnC
+G2kgAKIo8na7nQMAiCXEUZ29+R1l9XdHgVa1AiKneWQqgTA8ykIcPB3A0QAARCRA1LxN3rWSJz6O
+umgSACAasYlcMkB4OLGlIu7qVma87G388VfGflHP8Jk9KaEiAgCkIAYo7Lws8k8BtJmioqPRoepS
+7ZAlGghfQTeYhyCiKJOhmaZJqXfwNBPn3Psk5Wg1HbjSWECKQbpx4zoCAEjUFgfbYa9FPSGtwVju
+UL5n5fjHDsgc2Z3gZiT0OtCaSpHx5gAAeErj4FXJaxnHlT6EK41ptN3t3DxRAKiuzfqyKqldC6OS
+bv6UQiJ7W4sBjFclx8pWDgCumVea4xTttzvlCRUK13QoirdpyJ0DeTs6ve/7k3FeyyFcZeSNDwRO
+kqwIHyZJcdTk3IYJBCCgm3R8lefc52J8apDW3jz9aS+X1pOQmxc6IEjOqn6AtN7ZP7vZJzJBZQCU
+e27ZgwBqIzBKyUlWh0vpQbf2SjKnoGh/2KboW0yIlQIAolAQu7+/8V+ptPm7gUARQtEWW1xEXnxC
+i7y0V3t8f+nLtL65aScnpKbjZeH0AqfeS2uqDB968ey+lBdBohcQI4CiujZCcur1Hge2r/vjvk0H
+gx7hZH6U0Gb0GdjybP0cFCHg15oPVctMBSG9M37YteqZ1hqwAAAxAMhtAE5CiO3rYb7n1lQXD8kQ
+6fsKdMkXp90XeCHrc9nFXRvXT+T92rLejPqblJs0fufw5ul2JIRwRM6FKuWmguDel3/cveppVzv0
+pHHP1wB0VjF2szKg8qxXXVuDXz9LCTta6KfngsNy9OzP1dcLruoRkSGE8IhI5rXWhHAKb5tJ3cLo
+yzqraXuNKsGcK6+tISYUkQjHJgSMpkwWH59WRrHr3G/PfDZpB0g5dToPQBYBYPqqQVKeKjObQljB
+lJtzWY+IFCFERERqZmtvvaD2MfNKZZPX9jr4cuZqNe9gTSWXbxSrnP4+xX9jhjr2as2AzFA5X55Z
+nBe84pVS5VMp0k3zchkdZGe8BEGrN0El12QxAFgB2OrKGg0T7MTy3BvV13KRpwjAjaQgIQQBOcLW
+PojbrQJFRKBFkaAvxRm8BI4yFGbc4Mmmp6b4fX9e0TrpwYcuwYmXAAGJ2MR3vfyT052zy+PGVLTs
+/nLOzmd/gYLj1BNjH1r5Yw11y6yPzUnzEYyzmrZZFP7WK4qi2vdZmrpjehABAI5VO0NUalNpyD1X
+zx58fSkAOKD2XDMDOHa8M8/DngLQ6noNKlqnCamuYUERHGH2sPFNDsbl/zQj/vjqex2zS/3GFkck
+v3li74tbAHLI0917v/VtDRUOtSU/ImgpbUinnQ8NC1y3f/vx5357b9WjKen4KiHEPD9BV6OWtano
+PGnJO9880ety7WGy1QCUL4Dp/Tsy0B135WAVtP7obMSpY18AinMAHX4AlBMIa0EgVgCwIaIdae8q
+lIVWCvKoQqt63CEnG2uoTUcQOSF2/5CQGzkr36j7DQCwExF/Kyg3RVLAaBAQCRACXG3ElIValpWV
+NHRUKIpyGgyGm94YxhEiIGJ2nnx2Fcs7gylb0QVCGeqdIaRRoEI4kfHmCVgIcDyhhGKmwT2MiKLI
+y+XyUn9//7IGIepzmJ66BOw/0WWhc0KA9gsC4lLbjwoUKH9nA4qYR5DYWIclZ80HlDMPaWdBd6RU
+vgRADSAoAUUW0KEiolMBINBIe5XwqqRtnKqrkSBH5BxFTLoVF2nrmXUy3pgCaL/z1id1VvNWAK5W
+Nb7uRm6+XhuMwSaI0gQEWewBk/6dbazpd183jhJnBDBcbNys+45AgzSmu1PBEgdt9Hnsorzyu9MM
+VEfW0xkBwJwtcdHChgCUHJLkGwSn+zB1zk5IXwBNFED2TwCiu5i9IA+7ICg72KDagyGESN0GMtdJ
+jbJvBgQAVi2lBkMHS03JDRfdthJlMWcoLs9dbymwh5T6bFT8QKRKwep0qTm6vRKg8ox7iykAEOjA
+0zV+T24nxNrgOOQ1hCQ0IT/yvwcEIIJD+p7aPn/0+rADEZu/PP/79E8399+0b1nZmcTvyJ6LV395
+qN04xfDFoyNO5G55R39MGNA7vMfgbQBwucu4hzO6rX8ma1Oa6WFN/Mi1R95onR/+Zv340oWzs61X
+Z/Wuc2f2LRk18cUHJo+K/U114hOfXeVt+2vajTwGACcmL+yf9u7ME0Im+HZps2DpF4R0sb09Iem4
+4cCWOeb2488pWo+8CuDhpoQcRztstKbqatQqRB96kleTN8RCq7e9dxfF7rNn9j49atILD04e0WqP
+qx0Nt39oRPCZc9vTbdVXv5/07Nq93/qnvav+4tOvFp1nB3IdHl/4TIfoBXvOX98zLWmy5v7vvvvu
+1GsPxiec5PVDmDZtfssZHlA+fkvIyaN7jz9gOq67f+Ol8u0/vDjKLyPb0MupYom5GsiMoZrLJzYU
+ZPx5atPEAYtthY+3zS/b9NPODrkhkyLmLZ3wJQDcuLF2fvqnmoTfWuy9cH332K5TtPd9993nf778
+QOsOp3j9AHn7+O387M7VzIG0m17PJj2ov3zh+7xc47UfJ8z/aFd1XOGP+MF7n804yveOpIbNX9Sj
+reK30+cPvLA+RTvhw/Wpe7k9y8N++sMwzh4adTxodf88YQwf0NTYVgBYMEpbcmS94cLVKxtHzv3k
+6Ln5iRXly19Y1M9iwyB/hkVCiPjeg5GFBHNGf/r8qr5r1nyh8cU7AAAgAElEQVRw8cl1bw7ILcIE
+Egm/z5494NrxpVsyq679NH7qyi2l3U17uXfe/WzyEUf3dpakhxY+zHA2RnSIbGVWxFtH8vRRPcNL
+GxYC0CJHCQ6z3GEqDvr4zedapO/f1Pr4dXtXm5cz92brQgGA0eKAofeEnzm67c9HLOf9Hvzhz/LU
+n16bpDl7tbyvg4TfsZNl8I0xJ7ejdqdl7JwV/4Bq1PzhUYeq9q8IPGTt3S8gafhuAHC5+NEgOjM1
+2af3D3vsvW9q2pX8pNq44/QkgyY4894HBlz7cs2dWuByjMgTwWmWOy1lQWtWvBCRtvfnuOPZ9u42
+haO8ztkF2hsoOiLv7Y/W7HmlIEb9dfqhZ796Zc1lAFg3sl/g8TM7z084tOnrqRMMWZ8/IDvg/O5I
+ca+a6Icdv62emgoSG+CucVcOVhQh9vz8/A+CrSuOirasSJ6NU6O8lY2ThZoEOtgsQKCNB29bnVMh
+OUT1DgZHiN2T4YQQvri42CiKooYitToLN278dX/X3xMQEVmWr46Pj7/lItQ+GRmKiysdotrbn3Iq
+taIoyuvn4IDiKxrPCZIDJ4qiURCEGn9/f6Nr3zqSMM4JAFBZ+WkFz/NegiA0vhjUjt3QZoZhPNbM
+qyPnFCPissLCGj+FcCZRLhb5U858DQhmGeUs0FBcsRegg+Y13bLNmrlpoigKhBAC4ISMIHB0LU/8
+RhCNrWnbxXGATlmDA6n9wzWiQtAj0flGbNDDA5WHwAnS3kU2r+GbnXSsSQF7/dyaf4s8QO4WT4d8
+awh2gPLjkoitBweNJ5IT7vCfupkuX9WeOItaNdrAeEUikYf0l9oIVZ0HsJXVfy7YJImRgK6SrEPO
+z1K6zjWlxgRctqmHbeHluiaafFOSQ+eu2dagiAAkLpwuEcC3A4BPa4DSox6LQoDIHSIbfAL4/Gi3
+q6DIAbBaqNfpIhJnrK7AoqyJ4hdCiwIbfsQcuOxDh6JDVd15ySAKDofj/x/nSgQkpP4kJIRg2ruD
+tx1cffn+zJ1bxhcsS03rknTP+ktVuT75Wdvnf/q2bYZMoaBrlDUXSDllBQAgsYscq8bH7tt+RN5H
+njDkaHgDDhOpPcEJIXg6dfa2EwX7grMKfpuw9aOd42QyilhVtusGg1OqYBq2sTRBrUsrF6JlSZ19
+0w4BQEsoTI/WeV/PpNiz3y4NLY992v0YurcNLjhyIe142YVvpq1dGsY/q4s9BoAiiPVhUVFSOxbt
+AoqDR3TadrwwXZ+Vt2f81o92jZXJKGJR27KrK3m3XHeflRkZiefj3r9iPj9z79rMbhQILK9oUxia
+NGj1OG9SlZoyZEOiITeo+PLWuSsu4iy1PICxhbc61bJjjy9+IkRIzV95alfm519eyN8//pWHDgxt
+GRNisKLWR0mLVsEIJGhZdukL98W/Y87NXGQ8XP7O6wfNVkqlg6pyw+YCbUCjh2FCQPxyYfz6RGO2
+X/HlzQtWpHGCShFEO8PbHE7o2O3rnwgR3t6/jkUCKDYREm67LK2g7ZF272Fl5sLTX7/63h8gUki3
+NoZ07rP6te7K4jOzZu5Keu3biJz8feO+WLV3rEquYkwB8ZmBrft+cJwQG38/AwRQFEj9+EgACYII
+NgAy/5J51dQuq4vTSpaeWP3EynRfTVmQMoKiIZNjaOl+0KZrlz1tMi/1y93z1Uufn9GV6rQJDiuT
+bfFGgfgNW1HS5uNf33OWZT12+Ye3V6WjCMC0sgR27P3JqtGRefBTHBOvP7ov70rqhI1fauzx3JLl
+AHCjDcp9Y6L+PLfdmmorOTbnsx9l4/19wioD9EKJlXbYsktAmVADNgIiNgyZS1pUBGnOSQa/t/zc
+totPrPmz7NjkN6fe2y8qSl9dgz7+Cgo9PvWLlKQ/LDQQmUYEBAJoEoBP6tZuw7mKrIC8nF9mfvWB
+fbJMoaRqVJYM0YD1KTUEkVB0LXtXhV624s4Z275IPFWaF1gua2f1bzv0zS8Hk6Im5haJIDaaG11u
+KkQEBFEgA2Y8cOHPDzf8YC46MW31t7IHA3xDK/1DhHIL5bDkGEDRuhqcgDdS3eKLLwzcXrhgW+vf
+036eMeK1XelDlg3589cBsW+frT4z+8qOix+vBIeT89Lbasotn8HfUBF/17o34eHhNgA4gojHqkrs
+EaLo8ANwIgAhhHCEgNVTfR5SFGWXyWQGtwa7tQgODq4qrilGykppKKrpMgdEREKIxd9fX9nUWK6o
+5RRYUxELu+TklMnlci+aprWEuCtSCoLAq1S8yWQSbGFhYY5bzeHn51djMhUUOBygE0VWTjhOGlNG
+CAALHMcRlgUEYM2BgYFVTY1DCEFErC4u7pjpwI6VoJYBAiKgDBFY6YQlForiTTSpW1+ZDAIvXaJU
+7Vbmm9NmPiUH/iuObZfIMKgH0SkH0epLhKoAmqvyBb7CH8QaNcjDc0RGn0tZ07oTtPsBCHJA/g6f
+aGi7KG+RbvUa+VWN/7N/EGKhhBvRptvCrfOGolNSIwfwRKqvBU8MPvMuMeYzH8u5jW8Dcg1I4Shx
+0WquAwT1Boi4r3ba2t+OyEtOnPGKpJFmLXZ3rojc4VR03W7WPXkZuCZsJiBFizzZiLzkxOnvkaoM
+VXqpKvTaeoDK8/URwxtjMRynbLvRoh5y3tty4hG38cpOSppZDYOlogAg1Hbg8cwGQUHW8oA1+NX3
+LF4jCghvrPuSCAdgDQ0NNXna638PY0UanluPSLZSGrihVdX2yT0FcXH+8y+VZtO/AvBz3thXenrN
+7Nff/HxX1J4LRb6KhEGWwRNHZ323aNCNdaD9Y37xUVWlR7ftkVPXNFXu5M5RSM8hApcLAJA0bq0x
+PXXs++9+cmHb5sNZ/kJEsnPg/WOub35uTCUAACGES+kX+s5xRyuvbsaWRQAAY/oWF6Ve7zSNF8AU
+65K+q0P7Z3+pfm9m2xeOp16OKsjMKcdW6jKR4majyN/ofCGy1HYg5ITCoS1oPWObvbEdiY3saIja
+tN/WZ+9PPPvN7pMhNboEYdyS13I/X3xPKQDAuJTdVcdWjl3+4Q8nozen1fiGdB9q6j9pavaXM3rV
+AACQ8Cds6amp61LeXXR41xmDzqkLqb63U7xlZx4ozRyUAgC8uvXSye9TRj729qf7oi4Z5bLYQf0q
+nnhxxPU54e5CttM/3Fl+es3s11//bGf0zjSzj77Hfcahjy7KXj0uwQwAEHkw14m0+LooEIS60vHG
+x4OIeHDVlB6Zq7f8GV7IhMKwmU8XbHxrZlHtddt6es3sj9ekHvp1w8HCQK/4vtbRc+dkf/Jo72oA
+AKeKv0CAmk5Ali2NB2LKGP5bAcRtthqoAABYvO7UeW5a8hNrN56Jul4WibMeua+4MDdbK9BUKQDA
+4CWpOXnOCYvfWLmlRW6liXpw+vzSWOM2ZbnoMAGAsHxH2vH35vTJ/mzj6YhsDKUGPrKgcPv7iwpq
+7XNuXjX6/UOv/fJr3pWrVuFqY+5P3JIzFZe3Ll0xfcm6TaeusurkUdNL3n6whe31IxZlXhUYAwAE
+kRKfowjYoJa7QSntFwE0sxieyyNkuOP06TXfGx97+cTWk1WBDmWw8f5ubUyVZx1qygaNJDwAABxy
+/iKgMB1FIad2PfC1scJ3Igq/mExQPjRltzN73dS3nv/y95+2HS/yk8f2sY4YP/L6V48PNwAAMHbn
+eYL0nDxtQpYoCv2JLNIc03nQR1kbX6i+VC3K242cXnj068l5ZP0Ut/PeIefPU0BNVwiy6w2+i29Q
+pLdW1n4XUFNj5GlxGeFpW4cxz5elp6asXPD86q2HMxmvLiMml344oaVl2d5qtU0AQ1gCcJBNXgBK
+dAKAQJLWWnfcCx8cy2V/cRrK8mp/C9tWTu/754cbj4eWop7qPnli4amP5ue5SkjcDf4WYkxRUZE/
+TQt6QaBlAICMKAoiwwiIKIiiKDAMwwEAMAznLBFCDfEBYLmV8bfZNwj/yiLUEhObXIPbddxcxqzL
+ZRGAa3QBKCg5yGlSEUAE/1IxCILsrlUwnlBSUqImhAQjopIQjuI4QhEivVzmE+VyealOpytuaG+B
+yaSjzI5IQniaCHaKEANFBCPNCiaK5x2ElvnzTjqIZ22XvFW2fV1p+9k2lD2rBSEYRpD3dreo4cLQ
+DiRMkSBrs9cY8sZ2jo41A3CAyKLCeTTAu/TZ12hbRtKtjlFkgkususcWG/0XXiGcjVLaD6t8yx7/
+BOy5t9ViQWRDcwzBr82zK0eUASAquEsK75KFz9O29OFuUTQEKQrGqqXWTnXOCYoAjkpJRV0UPKU/
+UVDE7qwO+/ZtJxVVIzL+vH/BA2Pk5t3PENFS78gFdgPQdZZkNTyk5YBQALRcijwxaqmwgLOA+0MS
+xXOqxE3G0Pc/Bc4p+pXMe5+yX+lwO+vRJAgjCrKWByz6N1aa2T7FDVPstRHVwqCgoNKbDdGMZjSj
+GXeK9fepRr51rvtrIaNmTt374fiz/7Y9/2n8LcrNISEhVQZDDs9xcoUoiqJMxXEcJ+ft/v58GABH
+CLnjPObdODd3MQfC3yyM6WL3Xedvg4ODLYiYU15ermQYNc1xVoaiKIqmaZoQQjkpJ00chKJp2qbT
+6apd1ytUozFUm83lNhH9CSUnAEEATBDwDADI65OWDnWPCruq7w4A2EGLdlZlS23D2K8FuTkoDUHr
+rFafkRkOiKlqmP4lhCOcsrPBqe6XqhCqvImzPKZp/S8CKAu64FB3riCcjQIA4GhvUSDextvW0qC1
+1UgCeGlunrKqupVr5W3eQLQoiSOvTyNZDgJSJMlp9NCOpsE2LhDkLfebApd/wtFR5ptKGiCA1By6
+CetRlAQ/XftbukBkdQXmoOe/cpI4I6WwM5ws7ojckZUAyN9dQQrtXcYrO+6x+8370dW5AgAghFQE
+BgZWNLV/M5rRjGb8JYiANO3Wd+z/BP4WB6v25m645YbNuCPURro8VlrURd+ackSJROwvttYUWhSc
+QkmIg+J5QcbzNEtRFE14yfngAAgLDhQoygnAciaf6ecAalUBsAnnkzgJ4WxUwwpLAEBRFAWallVz
+Eau/oK9m7KTp8DhBGdOWIO8HaNMRvjqACFV+RHQqRFlIpt174g8OJrG6bhxUJJpEeYvvKWdOKyLa
+dfXMeg/HTxirUx6/m1N1NhKstcNRDkzHH4/Zzz4wjWFDpzPmE4sBubtrYkwp7IKs9U5TSMrnNrZf
+SW3KGwgAoQgjuK+7KKX+FIG3WbHoCgJIqQxOVb/1dlnXcgIcEUUFb/Z5dAsQFGTmg8NBtAUTIIqb
+C4QSAQBtIqPP5ZWd9nCK2HMWn/k5PKhsHqpYK0JCQopuJ6LajGY0oxl3CqToYwSomXKZMvPftuXf
+wP9Jr/L/GlxSoY3Tl+VyWhRFDAoKspeWlipomvZGtKsFgWEpSmAJB4RrnJrEBuMgI4qCQNMcIcQq
+k8mqfH19zXU37PR0lOl05laIZhUhdooIBpo4TDQhDiLKQjgegu0u6SozTe8r8Ck/2Z92pvcl6FSJ
+RK0EQlOAtQROQggQSnQyrS9ZNNOO8Wz9GIIgGMPCwrIIIZiNqAg92X4y48x7lIiWNoD8raUv6uxg
+/K471X231Pgu3e6UtTE1rLbjSIhdXzxiKGM++AoI5nqlX/8uAAmPAVxZC1B86A5/WRQvyCL+tGtH
+ppp9lh4RKAV3w+lERlQonOV+ueMdVkX3nrTj6iAK7eob69EIBERZcDkn63zGxrYq5hWdrCKj5Aln
+pAghjZxhACivda7+UpVMM5rRjGY0wzP+v2ju2oybo4lUqKcbqwUALIhICgoKFBqNqCAKighWmhYE
+Qa6gKC+eohhERIqi7IQQi9Pp5ChEW0hIiJteTXw8CMXFNTUAIEeUC0CCOFDUd3NxTbnJ5aJZp5tk
+JcGTdwDAjqKiIhVFUS1FUWzSOWoqbRdFiB0RP6u5vv6Asuz9uQTMvYhoDfKwDvVDEVoQieqaw3v8
+tyafeekAHNRFrgAkvhKngXJGKK1uzDCvG4FqUN1X74ci41OBtNZQqxrfcH4ChHUItN+pmsBXvrXL
+ksukApE65wpRlFNlfn6hxUR3WEQ89Et5eflFnud9bnIcUK9pwgHFc7SLqWaapqsDAwMrmiNXzWhG
+M5rxz6HZwWqGG2odMhs0bDiKSACuyQoKFBQAQFhYGE+Ie0WQyzhCJmaW+FYqeFGU36yvExJCLDpd
+SEXDooWQkBBnaWmpGQD84NYxIVSpSCMJhdqxruYbja9pq37rAvYcP4q6mfoniw5593KHqlU14W2N
+igkIIXaapitiNKQMT3W8fX4goVGQtTpg8Z2xgUajm56PQGl4h2poEQ9q12geymSyEn+drrQuHUkI
+4crKykoAgEXEm7Roqi+0IlKJlUjTNM+yfLXVipV6vf5uBcma0YxmNKMZt4lmB6sZt4VaZ8VjSfnN
+EEtiHYhYBLfWbhBdK0IJIXwmYpGysJADABVFUTfURomEuv8jIU6bySRU6HTuVaVhWm11jvjASbng
+DEaRVwKAJH3h6Tg5G+XiXBGGYQyOgIDCMIAmNLBuBgqRUhprtLOuEsrigQHPAeGslHvHAFmJv79/
+iSvXKzAw0JyP+Tnycrk3TTtv4/eLYGO1tkqNpiYegPO0Ps1oRjOa0Yy/H80OVjP+cdQ6TneVjqrV
+CSqo5ZFRtS+SA0ApS0tpiqIIz/NiSEi4o6mUV61OjrG83MjzPO9HCPESRVHRgJfUYOP6v2hacAoC
+bbQEBJRGEXIXzlUtRJEQykJTvInGWu5Uo7kJkeQSRJEXaJpjWbba39+/oqkChnAS3ii62Iz/Drwx
+MLD76is9ox/75ZMtT3UI/st9zJrRjH8bx5Z1CH11w/XhZ2xBYcohr+7OXTf+2D8537WU9oEPf68Y
+Kh8088zRj2enb1/UJvaxHYG9erz87q5vJyUV33qE/y7csVR+M5rxb4AQgoQQQVKxJc4oQuzBwcGW
+wMBAs16vt96KT0QIwcDAQHNISEgBz/PZKpXzOgBUsKxY4/oCgHKHw3ENkc0KCQkp+EvOlQsYnjeo
+VM7rhJDKuvkoiqpS83w2smyWw+HIDggIKG0mn//3480Xnum88IPtg8emowwAgALsj4TMY23E69+2
+7W6RvX+d4tnnU0bM/vZCu3/blrsF4n7mxedeHDT/y+NdoYkmzP9N2LW0Q3JC5z7L5228Gv1v29IQ
+uH6w+quDlYsuk7hF0e06q9u2C79tBZ27hUAJIQA4H0UxEQAAREgAxEXIK8JOpHSNbxHW4sMBbx1L
+/qft+LvQHMFqxv8p1EaFbCD1zDSBZ24X/lM6bBxNO4N8Wxhc5v7H5mvGPwNEJJMTWgw6o+e6X6rq
+dQoAnIggACLHCTfj+f13w+qoVp3/8ce5F5KiDwFA2r9tz90hTnYhdeak820Dy2Bat1P/tjW3glzl
+JSq8vERvlfBfdQ3Y8M0e72JDh5624KFfHd/16ioAQPLEPzun1OIHOAqk66EIlAhSz3NRANGfELov
+DeJv/6wVfx+aI1jN+D8LQohYGxVzff0nRG7F/+R8zfj7sHvJYPWDUV6TjxaUDiy6tC9B/eU9cxJS
+zsTQRESaYijn3pXtEsL8ZnkFxC7qNPHdboh440EW8Vf5S5P69YoO1D3qG5449+EXPk9sqmsFIpKv
+Ux5q1SM2dKrWL+Kx7vc/PnT9eVRjarxX/4TYB9qPfKJb3b6bU0b79IpoOynwkQ0dAACOpab4Te4f
+f5+fT8BjEZ3ufWTZlwfDAQD2jwWv0R26jOs97IWeM4e2G+6j9XksoP39Ux7bmhb0ZveAmBkzXpp7
+saSwTcXhjwb7J40b3/ML1LjZdfktzZIxifdEab0WeOlaLxg8/70+a05jkw2ZMXud4tmHO/WO0Hot
+DO1475SlS5d2axcdPXHgqqvRHwzx6dAq6v7Jk8eNuScwMOHR3nM+jZeO/TT71sx+3WICdfN8Q9vP
+G/Pkx10Qka5bl01vPNRqSJvASUq53xPR3cdOWPjZiTAAgLd6husHRLSec7akOLH09Ppefu2GTEt8
+o9itmfOWd6eFD02MHq/1CVncbvDU0St3pftJY6fKhrTwvzegw9xxC3/NlAMArJnaul14dNL0biln
+I1/rp+8Vnzxv7KwH+g+J0ioXBrXqPWvk02sTsEGkLD8/VfnM2OQBYTrdAv+obrNmLf8+AREJjgV6
+XlLLYQntZz0wsl/yaJ/gXtNmby/yry6sNFXlWTIM5U4rAEDmrx9o5wztODzAJ2BRaPyAqY+v3hsN
+ALB/KigmdOowJqnfM/0W3tflngAf7SK/uMHTxy7fFtHw2PZ8MV0/KjH8YbXc54mILqMfmf/50RYN
+zqn/x955h0dRfX383JnZli1JNr33hCT0hN679KKg0gSkI0izi0ZUFEFQEJUmFgSNCtK7oUNIIKEk
+mEJ6L5vsJttn5rx/bMA0qth+73yeJ88Du3PL3LnJfvecc8+hP186onVbX7cZKpfQFwZMXd7rYAZK
+oBGX3uvps+Kq3fMpJeW+VWl7OsscBk195atzCsRE0aqZAzuFudrPcXINnjto5so+cdnZUgCAlLEg
+ntw2bGTbTrNG9uvU7iknr76TXj1T7dh0X8cxmxYOaNvFT/28ROa2qOUTM0a/tuum0932z20YsciK
+lNh6u8bhfwHBgiUg8Ni4E4Mv8D+MPLwfFd6RU9w6lyQt46WiVq3DFGGhzhJy1oLm2itB+46XLQhu
+10Orzk/3ybh8/NmQ8c6LAeACYqx4QfSsaecMvs/6RvfJDdOXSH/fs/nJzibPVQDQpCjzJ0NadP01
+U/Q659mJ7RZQW6W5dXzMR8uXtxr92Zdfy9lnnijSc3ZtvoOZAKDndcXtKiWShf4hAa9f3jIof8lb
+25any8MjoruFZvMVed57tn4yoPvnpe94JLqZeEvhi2nXfpUr2weldO/gQGXl/t7yh5Xb2r/Zd+p3
+kQknFIXx2SKF3EnaoWOkQuHb8Es4psQoJk3ZOj/TpBrcskuPDItZb5d7Knb8Z7z7WgD4qfE9ICK9
+sGvguFOFokVOrXoX+btKKxIP755UWsuFuElgrohifWurLy+/kB6Z2iIqqqB1C5erpxGZxR19J56p
+8ZziFdW3INRUzOQc2za2w0L3TxBx3w+L+0RtOFiwXOre2trPly6rqsgafuC7LX17b8M3wzKfpXOT
+cxV5F26KRWIVG9W+ldIhWEnXr9Hy7aT24V9+eXZ5hWtLRbcuXFFtyeWRX635vOv47/EDANB2DF3i
+k5ZzfU786bwK3D3lypi3Tr3CKdraR4bYn7Ce0A4vyTs7KcOlw5FO/VRFFcX5rZMPHXyyg8HtNQBI
+wvw1sjlDFs+P54OGhXXsk83U5qvif/xiVBet94oLkZBAZVVOyM8/20+sanm1Y2f1zSBfh2NIYWsE
+ssgqYm5Ubp9gWrBk9RspkrBObbsGZoEm1+3412uG9H4/dXnb8ogC5Mpm5/y+z8s5Kuhq544KzMvJ
+izz1y6GeU9YmLfx6UbvqvW8P8/1o1YkVNeoWrl16yfK5qtwhJzd/NLTPm4di4t4bnPZ278Ahx4od
+FyrCemh6YKW5LPHncW+85/RNHOI3feqFJahCezLhYVWKyzeraFcnF0mL4Aj7J7s6iad1HvhUUrXr
+8x5t++aHo4bNu/DzhGen63fFIW6gnycigqXP38o4145qFX69Qxe3ZB81c6zRfiCrJnQYuCvZsNQ+
+JKqifwjWlBVfefKnzds6eZ/Hd0THw+8qnsRExCICx9DNF6n+NyJYsAQEHgecAcBQaCvi/HirLwn8
+y+j+/Cs17/54fEsrleikq39Uhnrwqg3fjPdL4VmgKJm8lrR/bnP3sXPnvBhtejECcxGKrnYBAPh1
+woK2iXrvCeL2o7duOPDTnM0v9pjdQ1Wekbdv53PHEBvU/8xe6O9wuUw0p1DdKWfy17/MOnjkyOzJ
+odqtlqSzT02Olbn197MeJ2U5/uqb+30QkU5KLOxVq2yd88y0jgk/xt58KomPbN120tJXjuzfPe+N
+HuwST12Od2HsuiGKtp0o4Ewc7dkqRdprxutL3pw/49mAii3SwqvdMltMqHn7reGfhdg7ZIojnjxx
+cMNb234aQBrUlUra8aOTXuzmaAoetHrv4YOzv3u77/RObE5aZeKlUUdKUN54rQ5N8fVPq4AZGq8+
+Jzst+WTqE52CFvT3M/zEMJSZsyIizyMtUWqcu41d1fmpJ2evXzjm/P5J3pGXaz2mYOTQne8fjJ39
+xfKhs/uoK68UHfppyk8l4FxeWBJSoW6fHD7xjXn7jxyZMUSRvcKlPDuq4NC2NqPe/yF/w/63N7SQ
+y28oWgyKf/2d1Rtjx8rv1NnE2AhxYnbt9DRpNA57Z/28gwf3z5nTpmalOPta71tHN3UghPCLZnTe
+2VtRfKH01y1zF227PifF7BUUMeTpj7eMD8zjUQoikXOWz7DnP96569e3lvUXLfY1JnNV2VemRCGK
+dixZ3e2iOWCMuuf4NWsO/jT3y2nhc9qLyqrz9n0zvvrFJDueB17i6Hnde9icJfOfH/bGK23sCpAw
+CIBWRiLjY3fGDbnChvYIfOqFt7468Mu8D4baLwiy5Cpu7ds8ihk4VcRZDRzlEpxJdZsV8/aKVTMm
+Bld+qixLaVdjKg5ARCrh1LXxGVyYt+eIOS9tPrJn3sRW1Ut82SKJNftKt9TVff2SNPaztN69z7x6
+9KeZ+7d/MmuUd9Uezdkjk37ele1V/7m1GPde9lMhkq+C3TzzGb8R+47t/2RN1ps9fdMq7Wfq/Qfu
+7T1nzZxXn2s9b6B32VZl3rEJC9+I7xLGAIc8zUtcfBMDxix58a3FPd+dGyEva7ghhoh1tZaQSpcO
+hwct/WT2/mPHpvcT3fpKmp85wGH7cX8Rfb9TzhJkKOo/k79PsGAJCDwOtBkAN9YAWKr+6ZkI/D2w
+aOU4QiFmGlkWAICnpECRoOKnnx2asLCzmx6/alf83bEqD9YAACAASURBVBVTKaGNjojIzAxzalOs
+1frWnNrarq/7Sh9CCPGQWrxZOsNlZxy4A8AdMXOwWO2RllcSXSq9kfJeV/fnY1gAX3veU6NLcamo
+0rQYM75b4va3Us1VVTW9DOde0Z3MlUWre3aOW+RdbBqVoutewZc7HF09ZajrB9ZBaikvsRgsjuim
+ibxKtT6KtIFj0CNx19KhubsAYM8Lkdl0uhY0Fk5pLqrUEJ5HluK55g5atH//Zm7cjtUrt//wS3SA
+g3RqYY3VrqWr3NfKlxsMRmjiJrySDV4a9HKwePU4+uWY4DIAgLPv9b76ZVJOre1gsQQoJqCqZ6/W
+11aOi6756HmAua2cWxZWaAM0l35q+aT7+gWIhPKWW/zNfLr/nniL+/Yff/+Bf6N7yq7VT/dSUJTj
+pmSNP6PSKkR6jU3gaSpYgjwPBPlTOcD2CfjjQ/tERhvHq+nHu1aKs/WbJ3Ucv4EF9FShY6nmpqMn
+Y4lExOOEEO0Ps6M/yzry25ffXHRZ4NHrmVVjPxh1DgAAiYQQ4l45eXbX/LpyZJnBOxzjS8pKe0ad
+BPsjifqoMoPWveDA6i4D3d9qKaKRcqDNrpwqz+XLZGdnilLxhPjl7H2lTyaxnZCug6CrihGfSNJ1
+KccqJ80XCwa0Xz+zp1KCDGMxqzGgNPyosb+S0Od5hvdNPvDakExCCH9ycWTOltQa1krxDlC8SZqQ
+YenAtuyfvOuV0dcJITxi7A3Luoy3uOCelh/W7QjMKtFHFmhPVc5wd53LAkV8FWxQTW2qZ36FJRAA
+cus/uypNKUuIBxpYW2Ha0zfZSJ04WGz2HXAgZnRAdQwAxI71PnKd1ExLOH28HXwYlkguATLEL/Pn
+BZ2yCencZP+QIYfM2XHbNop/3t9m+4xuI17Lr1YGqqlWekWV3IWtlBGauat1ipLSHCL1nwqnEASW
+gMBDwzX1A/IWmwWrCf/+U0wCj0rzDoC7BLlTGhApgCGcj6+HSE47qwCA8Dz83s67xWG1BBooc71I
+LtNzROTmYo/u8hAVAqF4HvQR/spv/L3s032eez+/++cDk35Kiu98RJZQUq1soXR3cfoNIIuutIDC
+zkFi8XUPkN+pb4X0Uae2LS4wJb9YCRDSoJZ7PXsAYWz52Chsvjgvft/dceynmxZnM2FRrbv0ueyl
+rbLSpbkMkObNthaxRGZlJBzn5HHPtBXGeklHdCBR8Azhfb1dRQrGwb5unbKi3INPezmzlVumtuj1
+7ZWrr6qD+xZ28SzOZStz7QqrHswZg3JGomNR6uAu1/rahyjr1pUP9pH86BPulQB15uene7gV7ktI
+LzxfLQ8PV7rcmEWIdSbW+f/r3SkhBKd6K01oMko9rfniBGSUjJi2evl6S8WEpQAAeB6SvAMj0px1
+aTV5hK5fsuqPeQGAijEzlRytkCpEFm8PXzuagBQAABFOqVuHXRHnXjIToJpdaYpHBLNYXIuUhFYq
+DH8kJx7HAcANAIDFfcKDLQQoD3c1cZHIbu+p8rb27l95O8rz77d2BpHUjqVFJrOT952n5SfTmlQS
+lZHSaVTgFk0AEu9pwEeMod4Z89GoPTnqGW5t+t+09y8tozVZ0oya+40OIJEoWJrRWqXE9J85YS0I
+LAGBh4WS8QDUA/oBKZ6nxP+ZPwgCDw4BIAQoLKl9oNNffKAdW3WT+Gmd+s3++vjy4YkAQBUAiCuq
+QdLWAbSr613sBEa9m4NjdbbXgNNn9i7dALaPLTpVB8oIFegIIex386IPHzkct2zjb5LJMo+g7PzI
+JzMBMi3+KlFlrn0keWnnqg9HeymrAIBkakAuVYM1/7kX1UBa33eyCM2nPfngs99b51aGDysO7P5W
+4qGX9wAAvbiTp/JWLRVUDdVNrndgqyvlvAvKqtP+qJHFG0T1aps2wVdqqbqm9NIpus/efvajp84C
+AJUDIKquBmnb6pOmKRdqJhcw3WtGPLfopZhxkZpvRnl33JrGdCpG/o9KCACAhOahdwMpCXZWMHmr
+VFXlTl2vnvlt+dtgK3tAXdeCUmYPhrqceeTDES2fuK7x8W/nYryZf/PClLGxxUkAHhXA80BRVpoD
+qAu432g3KuR1X1ap1JrCfIxBMtSkYUB12PjFn383p1sGAJBSAGmNBujgGGKeSwU1K1wJAOhYCRug
+oCqzFGGlw1e8s/r1Hn6lAEDSKsDO7Aw8M51IgEQ0256nCAF/N6OXhNdkFuW6HUSUDCHEjCljxTEb
+XTryEf1rnA6+UatWumh1IU8eOLN9VizYviHQqTpQRKhA+/ndHkgd3nRt8TWj1s5aGu9eCpAFAJDO
+eDoX6Sk1CfIugaw1HEDYPfs48Npx+6s32Kn5iqjkDV98+mZXH2JcO9B11De5TGvkqbt+GaU5lsgD
+2xeMGBX+WUi4e1rsfeb6b0EQWAICD4lB2iVVairMojhty/tdi5S0yqrskUysRkqIf/+fgpdRViNX
+mevc2ZTQdlglJhrHujZ7YZ2SwHHDvC5c+uH6+LQD389/0pS7caQywRB7LLuXNnii4cxXM7eBrYAk
+AABMmxRecCHzZNyt1F/HtZ9oLXqxC3Xz9K/bI28qxrTsPv7pzwGgxAPsr7SCc/p9+cG9g0O8lv4+
+DWoJCcHN44P3Xz5zcvnLU5fNin8i/IDjtW/tDxX595e0f/r4OhVk3uumRGJilYCZpYpvhLy2KznU
+f3Sb7Fn1SmKp7XgLsVYRVpPW9qN3XilIO7MnLDHb3EcvNZeLKYcmO3z6U4HZ5zaXXM9L3jtl6KLP
+q1qYE01rft7zrN6sdLjbabBnhvonXtqRlpd2dMcLQy2lZKzrVd3uwze6VwZMhN3f9P5aJrIarbrc
+0MuHf4peMX2QcfuZhKfSyww+aj/OttRqe1ZGWc1Q9Lt/6ZYzLWOyMT0mwJbLruvS7lWtjp4+kJJ+
+YHzEaJI+r7/rxYwjmwMSoHeX4N7DvwGA9Li3OkYcuWGZWRMybe+q7nHH39x68uOUH3+YBGNxA6CC
+t5iuh74z4fXRn36xJf71kauj0ji37mJ3/28+8AXtkYHeJ+P3XB5z5ttNCybnJ3/bjYvjdl/U9TOG
+PVNwaurYXRB/5S4rj6SkhrP27+l6OPHE2f5b3vpwXvmAdrt8Cn+U7k9z7M9Ejkv8OVJ1ERLuZR8a
+bOkSrTqQHH9o6XvjqfGfbvk2YfGid6LOFqqft1aEbEya1+vYmZcOXLl0+ZdpPaYbtLMjSwv37z0S
+leP+jOcLC2d8BgC6e+2NZwa7Jsf/nJlTlfzrvIlvbIKO1pPsruNnJmfK2mpbjxx+Bn5ZjITc+6+c
+s9TKiSmT2arNDvxq3QfRb47vLtl17vq4/FqjcxDdjGegHmxxDp9342Z1ZcT4/0zsuCCwBAQeErvI
+T5LMV26+zog9ZxKuyq/Zws8AgESmt4pDj+oVk5Pq1xkU+O9DCMFtE1qfTD2dNCTrBHn1eHDUOz0I
+Z0WoF1dj1SPytAUJWAGAin73akbnKxHvScrT52QdSlu5ludYsVtQmVFv3gTQ0NJCBn2n/+z5ruur
+U6q5vJRfX1yTqOOkak+zUWrZRyS0HgCg32ezqn/pm/abUuThIA4flHi71NQTL8w9Gl+4UZ2mOffM
+oU3HnxDZ2XHgLLmmNVLFvAWQIDEjUvWsqjwHQEwUjeg7tEIXFSLfk/37nhcO/iifHyptsxwAym9f
+OWZM6+tJ+6s26bMvT9r6A/2Et2dgflAwc5PjzKAxGmQADV2dqhcuVX40MeqTmmvZL2fv/+zDCjeP
+CrU6vIYqLbDwPCKHrBWBmBmx5I5waPX2pexOl9u8x5Rkzys+sXXFp7yVFbsEaowmdosLRJh69fHd
+kna+5LWUk7tXFjmpNH6+bbIDxbpkiRcRpdjSJRg7tlbvy7h85I3TuyVLQhQd3gaAHNtzm2WNfW3s
+tzmGFElW7qGJGz+rmSxVuVhZRzyVV+OgQfxW/nTU65NTHXoae018dsfASebc48ezdn5/9cCz0a+2
+vDScFvMiypFzMab1jP1y79M6MzqwAT2Ph7bqudMW8xR37cjNF967VnFj5rU9V1ffoJETObcosBjw
+LJjLEXi0AIIV6jvSCM8BgIkz6/HZpc+ePZv948qU2sTJv20/05MRSXjKxSsNTdbdWKZDsOVbuyN4
+eeR4ADDRhOIJIRi3Ye6BLuVxHjmZR8ZvvnZ4sszOk2dCWu/y6tD7ABm0qHr5sx1WmW+VzitO+P7N
+j84ZWZmLt15v4nZa3dR/FDCtQ0QRBB7MhEIOAKDV+7fyX30icoWkOm/ejX2bV1wDAhKHqDL70Cfe
+Pzwv+GbqPLBDBHP9+TWm09vxNZ3z2q3LvZy75LddeZ+4uqrLvIMjivSleNPDlZGZaWIiAGZE3rY/
+OdvaWBmKY82VXtUlZCExmNcBQMHdxhAQEPiPg4gEU2LUNanvt6zM+mFgZfbPg7SNfipyD/cvLq7o
+UFhY2L6oqCiqqKgoqqCgwPufnrvA4wExln4mzM7TxSUyOCImRbFmkErt6TnSJza2Ll9T7Fh6WJtQ
+r9DeM53r50nasqiLOlAlCZEoPcN6TF3ngvfINp64cbhdzzD7ALFYER7Uc6rPzI2JDQLJJwzupGrd
+aYx3VKM8VBg7ll44KNzDSQwtVN7tg8fGxCoAAOJ6AzOyZUsf31av3slPFDs3QhEQ0M5vyrY4KQBA
+3LYp0ih7CHKMmuTbOw6bfAnHg+sk/SM8fcVipxYdxr7knrR7ocOQsWPd75YLKzalTLH5kxfdXCUQ
+JAvq4LNjQc9xPj6tkkd8mdpzXSdQBXoO8218XwAA2xb2dri9Tl0nxbjeXidEJJ/N6+fkrJSE2vt0
+DYo9FmsfM7ur69hXPrxzEjMlNkbc213q79DiCf/B65rmecpYN18yLMrTVwzicPe2o/xv3ztiDNMh
+yNPHbtBaj9tZ4NcsGitz9YkKajtlm8OyHp4rPf0m7Vv39bogLwmEuvq0DBq49EiD05OISFbPjHL2
+kkCoRBkYOmjRFluOLQAyM8rPwzVgulv9Z75nWpgyIKCv3+28W4gx1OsjWro5SyBM4tI2ZHDMdhUA
+QOxYoCe0bu3tGTrT+XbbfTFRduEB7fyGx+yzu/1a4sYo0TMtPX3EYmULz6ixvo3zXO1ZOUIZ5SoJ
+EouVLcJGvOw5tm6/NmbjzChR/4goX8f+HzY44XrnuTi3CB2+ZMedvY0xQE1uE+rlHjz/nnvadn+d
+3JRiZQuH8CF+Fy9uV82d0tt90qpv5RnrgiVRgVG+neavs93z3AhFQEBfvynbsqUZ6wZLunl28+0d
+k/KfqZQgfKsWEPgTFBWhHSEaf0RehtjUfF+/iDPD86xYweU6OPgJRw0F/l+AuE4ya8KZaWfypcpn
+R3c/JKpKFp/c8cuSVLv+DpPWvjd1Rf/A0vv38u8AEciynp4rN+f0Ctuet2PyANIwhYWAQGMEF6GA
+wJ/AwwOMWm1tscUic6JY9u7ZrEU8x/Mirb29l/BHWeD/ERpOXpua7Y2qqb9+m/KEmacZ2jW63Dt6
+2Mr3+wWUrfinp/fQEJaQu7vABAQEBAQeM4jIIKaI7/6DonuZzQUE/ldBROq1se1c3BXiSLE6OHL0
+0lWudysP9G/n9X6ubp6eY31jsXm3moCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
+gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMA/jZD4UEBAQEDgP0Pctt7S
+r/crg/wio/11uqrqZGiTErd2ivZ2set/C5gdI52xRuYsC2lVvn7BEPP9WzzGsTPWST760dpO1q1/
+wYI+bYTCyP8QQqkcAQEBAYH/BHh+jWzJss/nJOYqByZcz8pgeJOLvFfA1QKATwDA+E/Prz6xr2zr
+klzQb56dNOI1AMj4Wwc3aOwPbDu82Mvi8R0APDaBtWbRMK8bvrMlX2mH5kAM4R9Xv/+r/CfLFQgI
+CAgI/P/jYtz+8LhCz6H2o5evSU1Pmf/u8mkvusrhVCb8u+oDYslS+a4M9TBQOuf7TRxW9LdPgLIQ
+1spKkOcem5cKEUUpCRlTy3Lyxke9DUKpoAdAsGAJCAgI/IdYNzhYUhzUN0Dq4eeTUQ2V19An7drq
+yfrd29Y63Lh8y1HmLJFVWZUKnjff8pLx7qVWuaK21dRra8f5GBGRLBrdzp5z6+TnoFY53MiqLt5d
+6pUHJ2NMt/v/dmlr+aE0Px+voDDHK2mZZdpObxZfjok23H5//uBglTjkqRBnHzfHW2m5hUlUeO7l
+TbPuvB8zoZPqFuvv6+LlpbiYnFMs7vlx6cmYgDv9jwhzVrp1GRakslMpMkzqrL2+b5dADOEvbo9R
+HSuOcLLXn6nMLDCGgJ1alVLOpB7f8X4ZAIH169eJMy+vDzAperCBTFHetJdXKtemd6w8ua5P6Z51
+Lz7Q2k3opFYpw4YFiRUO8jRWcevIxvdLoM61GBszVlxp39cTQ3y0VzYud3AI7hlUXoNVmeqe6ec+
+GlmDG6NEy262C1Y7OwVnVolLym+eyQ/tONjfPTC8dP7kEdn1x1k/9edWGmnr8Frfziu/a0P0t19f
+OS1Mmapt6evk56c8fyWrRNp7bUn9tRkbAQp1+4lBdo6OqgytKmt/4HvFEEP4s1tXKuM0Hs72+oTK
+jHxtECpdHbOqFakHtr1dRgjhEZGsWNjftdaufahWT3FbD1t0QAhFAcUAAOzYGOOcXB0sXfnyhEJC
+CCLGUJ99JHOvkQVYX5s/toIQggfXDZZs2VPjFdiqs9ut3Pzq63bDCzO/n6gDAIhd95rL6pfGBWfn
+l0VV2d8sjlryZtSADzZUBAyYmzsrmvyrxO2/CUFgCQgICPxH2LP1ZeXeH47PuXrqSgfWcrIMrbyn
+LHzktUWHtZ+eWTe4z+nfzS/Zu5OruvKyIIl/x0p7c1ZFeZm5ha44YgsA7NRdWOtI2bku+PXAsVa0
+WaMDqZN7h3ajz7eL1azbNE6t3TIxKHjvFfu5CWkpIbrfzumdXJ0c1NLvL6+IxzWvdyKVB+Z19dtx
+xfDSyV+Ouzu5kAKiN3rbd3VNXnexct2Czk66L5+ObHMwTzQvMT3e3aLXGp28vB3U6V8dW1WCX7zk
+TvQxU3tEnMrABfEHf/MQmbWcOrgN1Rlcv7oIsLfw1Pbe20+HLm4VLEtIT70aUKLVKRU+XQyDViQu
+O9JucIbKnD3+cJ5ipC7vagtZKT0fnAJ0nfyoHScBrj/I2i2b0S3y7E3qxdSDca5iq453Cm5HdZn2
+5ZZBiAdjCOGrL13231eY82mtd8s8a5rG8ebJbykHpZs84rnoHYgY++7TbcceyUoYxhNZKepMvjzF
+qOOz9ud7dJZ8AwB3BBZu85fO3+E5OpsKTNuwaXTioM221794Orzl4UzneYnpl72MR34zOnl4OTin
+bj65shw/e8WF1Lw7p1vYqRR6wZljZ70ZUyXrHNCW6Uyt/+YiwC7NxU3dvz8V+mpkiPxS1s3kgMIq
+nULh09HaZ8X5ZQCQ/O2Srm0TLlW/mFxRIbHozXyCu6/EyPH+LMPwAABFe7c8G1v1dFu/jgNfBIBa
+KE+xO/Jr8cu3pO0KX5s/9uNdk4Jcfj5UOz01u6LriYtf6x1VUoVjpF3Jwt3Z734yOiCn4MLuzh8f
+yZtiNFNR3IVdlb//pnX3iBoR33/A3C8BQPtYN/n/EIKLUEBAQOA/QvbJE0+crfDv7jrqneXJaenz
+Phpmt0xSfLPdqe+2DxAxnMxs51ETvHDnp70C5afSCli73m/sWN03VJlUeS2pJSKSK0mZlrCOvQ/N
+XPPz7Fvl1VPXDpa8j7kZvS7u/aU13pppf+g6teR3i5/D8LUHF2hqKycsGd36NXfrreL0Cr0IAOBY
+fE7Xm6aA9i5zv3nvWnLCwi3T3F52Irq0Q4czoHznCM9fr7Ov54hb62b+cGlmec2uCc/19F7hasqu
+ztADgx/4Ot5Iq12UQXWwDvk6d3r+zUUThzmXxhUmHFw0fGN2C7SYRAbdLZ9seah21md7Xti9OHhm
+C7pCkrRrTx8YfJAlFEl2c6QuS5z8SnhadR6AxNGstexB1q1odZTzjWvGxRlMR8PIn/Km552eMWmQ
+S9Hp/MSDi25uyQgDAEAZQ5lKMv2uZ1WEesz4Yk2VrvSZtQu7vNCnd8TZK8taBZ6t9Bllajnj28sJ
+F19cNZL5gHBqS4/pr38a//XCY/XH2nXVJyKpVNTabeAzewcRm/WqdMcItwM3+NduicItE749Pbuy
+RjN+Rj+f5W6WW5U5xcDgxkD7lOuGF9OwLfXEVzdm5d94Z+Iwz9KjRYmHXxz4RWpL5CwiY+0tryxx
+kOGZtbEL9r4aMT1SUgE3dh3oh7hUfu6GacoNuz4Vr+2Mm11YuH1KX+f0E1qrQWGs8+Qhx0uBB4VU
+RGwuQ2ImyPN2LPISAJAezqKnJRYru0TOWhdTXVs+ft3rT7wQTOddq9DoJAAAi3bc3F98fNr8EN/I
+hJaD52w0GGqeuXXm+483RoHuMW3t/0kEC5aAgIDAfwBM3CiaO+2dPiL7tnQ0SYxu8+Zb0aliPU2o
+U7SEFIaaRd6FCoorXjw2uGzT9wG1tNUpf+lArvyNzwlPcWYaAEifeZ/XTuvmnCrvXOnzwfrNrUpr
+r7mZ4pIkSsrgfH7d8dBiUXgY+nZ597NxLbI/AwBETJ4NcJ0QwgIAtG+tzrhyIbkmd+fcZUOmvn7o
+jULHExb/6N0nYzqzJye4dyuUdnfz6NT/3Zg+riUxtvZnAOAcIYT17O3VWWN0DBV3GfHGtiGkfBsA
+nF47KDZh/e9DCrNyohmRyMSI/ErbDhz+w7yhkSVYFGXncsI5S1yhdQUAeG7JmqTDc4PcjlV0ja51
+HBS346OBDxzb9MWB4rBqa3iwJGrEa5v6kIpNAHB05YAfrmxOeyIjI689ANwEiwWI0sco9eu8c9cr
+Ay6SVwAA4BbAJjg+3bE1YKREW82YEZEcfasvZ0YKaGz4GYqYKHqh27Oj893G5r7yVKeEc2/bXr9w
+OLFVgaSzl7pNn9UfDfQt+si2NucBIJ4QwvoO9I2q0CtbijuMePvroYqSrwHg6rejf7oUc3Voxa3C
+DkQk0dAiv4oWfZ/Y+crI9kWY7S91OxaaKS7WuuxbrXPVlNKhooGT18+KVmtnAUD+5z3O7cs0FPJm
+9o4RhQdocMqS5wGBJ1i8Y4JLObh30Th32vvLKwMT6+47GxE33H7uhBDEX3vSIlomshr4akKI5UHX
+/v8z/1qBFYtI99OAXMIl2DEVe5WEuykTWzQio6pXqSz47SJChBMMAgIC/4+w96FqtGYVpdLRWZlp
+3gAA+cCDs5dHom+U/wX2tyvePEjw9gcp3yALDwUAQDbP7935h8vGGam7joqd3VPKfRQG2mA2K9Qy
+CcnI1asIJRHVmhXVt1vVpT5gb/9/0tYbly2Le887e0Mz7sqhrSO1dp5THMOrD8YgflLQz96BMAqo
+rGB09drzAMADAJhohUMNB7QqJLL29vvGQtS5iok+rbjciZbRhbTMySKy1p0G5MTIA8sxIjMFdSmF
+eASCAISI8KGCrE0od9SzhLIPbXVn7Opcq85FBIa0kgo1AIDBaCZKJ5dq3qdrVuP2/TZvzNjd89WE
+igpu6dy5SdFlmWykuFWvc0xo9I361519dUbE6dqQ6OCenVfNiyR3xsor1DtQjB1VVSK+406rv7Z6
+WmmvMwOjDP1jbfRJTI2rCGvTSiqcaHtaw8jUZmI22NbGPxx5YuYY2kwZeKVUb+LECmfHO6kgXJzd
+DSzkWgA4AABABEI1CngnBCigANIyKmQcSykNvLq64fuErf9/c1GViCbOIgtQ3AMsuQD8iwSWPm+n
+J6Pd04mpSXGluAIH9qy/K4ocXChCHAHN7oQ3OCJapGJr2Q1TTe4HgHga/mV5TwQEBAT+MoJrWQ8P
+VckFUZhhxCfvrh3n+scHOOzZB/MG9JoEILlLYx4gc738UnzR3FsO4wp+yXr33a6EGE9s6B086BNp
+GGvhqG7t3Uu2pN+ySunyToh49XbwNABQhBAOEUlaRZrC7aWwoq89yYqylDjFl8sWPbP10pl5l949
+euKllu755HCKhKP7tQeAPACAuvaEEMJ7MrXFSrRS2Wf2BwNAMgCAUmHxyLFS9t5BvjlsLs8AALCM
+uZ4Q4Ak8hq/SnpLaIju00Nnn9gUBwDUAALUr65ljpVT+gd65eQBAIxIgiCCmm/lcKeH19i1raY05
+JT4+odYj+skfp40ad2bBEJea21cgxorndVw2QuEbkanoMjyhfutWES4FcDSVpuR9ogEgq/HauDM1
+pfaUCtPPHwgBgAQAALmn1j3HSjt4+XvlcOUcEAQitlINRBIPAJG+0lonFalNSzjte/v1M2cvu9Oc
+wp5QIgQAkEoZE6vTyLWUSQQAUL4tU06ZiBuRk+zew6K1n+3bXa7gMjs8h7h/LSHGuvnRhJA7Ygpl
+cp7jrUgkIumjP4n/X/wrBJYp490gcf6ba4DXdgXepAI0iRmsAmBzm1xLQ4kXEqmhOu/Daw4AVf/A
+dAUEBAT+dggZx30zt9OBkyeOvr1mATet/9hJv3Z0MKmLVe2jqcBeJ+m9LwMSoCkAAgQpQELVNaSQ
+AICDHMHKAWM0Obw1eZbLwrnT5a/tvjittMLSOoSykuBlyZlt9jsfP3Z919TBk0usMTExl5dOH9fq
+dJGd67Zs3ArriXHL6d7PnzK2cVz4eszuVz/eagzkGbXU0anSYrHqes99vqDd6ZXxp898vWjM9Fcl
+HXxF6bMnjumUrHfnzyN+1+XyiIxrc9JOVaT9OH3wCx9oWkB2+caD52bmqTtV94tuGc9mUz0IAC22
+NBARFCJ/x81FeCSAd7deISJ5u4f7sB9Lo4e2nLX0k1+W9vkdAGDhq93Try+5dlaTumPG0AUrq8NJ
+RuV3By7MzlN3qnyqlXfC6T9WmQaeNJPaQCK9PpDhCwAAIABJREFUlZvT2qQMYHr07pFBzLm+18/+
+OmTK2kMXty18IpcQgtvHLArPolt3NqqCN+wdSWrqt+49fdb1tuc+OHfm3Pb5I59/henoQ6fOm/hU
+hwSds+gI4jcDC7pm3XhKc6Is7ccpofM/qAgnuUWf/nzu+QJ1Z2OH1hEXuCPYAQjQHFO3NjlGQhGg
+EXnS8pmPNfabWp0VpcROeOLF9ZWD3MoqdxyNnaitNXtSIoYAALgFByc7JF2f+N2q9eNemv/0sU3x
+SSNTS9j2Eme4BFHvV0Sotu7JLPht8YVRC6qXLVt+iNal+3Qa8HS7N369/tX7o1rlAwBIu3arlfK/
+VlfkXRvx5psxxZqSPD95ZKekVYtmXXnIrfz/hscmsBCRVFcn20tL9zvSVb86irCUMSrHFctaflx4
+P3ceXXN6MrEWDAE0P8B8EBiuPMK++opDLKJuLAD/b8vgKyAgIPBXMHnDktN50z5bvv/8zglJRZr+
+V8T2bFhf7wtTlnSpvvoLX0oh3GQArIhQAAQQQMVRhMqmCM2D8zR9786bPs06suOF6+nUp8m0wjBg
+QN+ryqykPchbKwkh5osxgz9TX7xZ8dPhbaPiWf4phXNgVdSI52P9/aEW5gPXWuNzPO3wyYnbP89+
+x4qM2N6jTWX4wBGrn393aDohw7jEmN7vOZzMnLJ3V9LkOADK0SuyJGrk6O+6AJhJ9D7+4IqxayS/
+XJi2/4f4ReetDOMS1i+z/dDJy74eqigZOj24HBCSjDJiS1tgcuARjRlgSyCKAABIURok5Dolgrtl
+RifF1bSLVVcdwJhr7O682Oen2iMxo1dLDlx6/sCO+CVnrSLaNbx/Rrsnpiz75En/YgAATgQGmqKu
+UTSpbtzpiTdipYHuoqJ8mVxprjGojTU1djlntnfRmHzGTfJq+TIAZKZJ2kabpC7Zfd6YdTF5x+yG
+k2rzkj5+Rb+VjsduTf5199UJpxEoB8/wsqjhw78fCGAkPhf44ysmfyrZHafduzNh/iUrw7iE9sqO
+GPzcmz+Ncy58dmZgAAFMolFc5yIs4wFdMynbZ59pwoTwrTWbLlMnvn9n9g21f+WgvgPjfbLPc8DT
+VQAA46b1vHgu89AX+y58++RXvGhAt76Dk53drv1YDXwJAPCTR7f/xflclv670zsmbjjN9xTLnfWR
+AyYe9fV2qrxzE6GrKyd22b957ZHD89avj1vqFdk97cm+IRcfbScL3BNEpKqKzvkZM5b1Yi91ncid
+dV9miW+/nb3Y8gJ3xqUETyu1/PngE9qUlzvet69LLb7CkwxiHDzQD3/O65YubU2PvNLqoOyyMndE
+/FdY4gQEBAT+DjZunCk6f/68ekNcnAL+KHlGmvt3XFwcExsbe8fqExe3TXrx4kW3ffv22QFg3XXY
+wGpz5Mi38sTEOOeYmBhxM8OTPXv2KM+dO+caExvb5H0EIGf37FHGxx93iomJafK3GQFI4rGN9nFx
+cc4xcXFM/dfrzf/OWPVfu8s1DUhMTBTFpaQoELHJKfm7jQ1gMxIkJiaKYpppNz/a7dnhA5/9bsxp
+9Lj92rYZHdoOah19rOfq9J4AAF99tS5i+rs/hN9rbghA4uJiFfdam4sH16lOnz7tsjExUdTwvmMa
+z6vxWpCDBw+qYmPPy5p7rohI4uLiHOLi4hxiYmKoZtrDwYPrJKdPn3aJjY2V3e0e4uK2SQ8ePKga
+OzZWSDZ6Hx4py6vp93fD6Oof5hBrRWdCKDfCG50Jp5MD8I36I2hV9vtCJJu5iESOu+upA4wP3wrG
+jGmA9WLqCAVA6vYfb4X6ByB4xjNP67Z8rlE+shjAAgzDFLq5uZXe6Q+RgoLFEsi9xBjVnSJFlt/7
+g7VKBdRdLF08ANByk0nUJk5hjksC8LSC/QAOgudb7mcdux2jcLsnwZomICAg8L/F5imtO/9wxfpq
+qkFVExwWlu5mzcTUHGsraesBqQNffH/dhz2IEK4i0ISHtvxU5+53pMref50xpU0EZO+XR4uI2NyW
+YJdqh4gAANYHFiBO7QG8BgBYawEyvwOw1LPaEgCo65AQQiwWixIRywDeIearV4Otl0f0p7C8L4WZ
+wbKyRE8gxB4Q6bvKSQRAQlCOp15AIirjpZY80P1SAEn7f9bdnHdJFb6hsrlmhqtjvE1XnxtIEc4D
+gZg5ntYZLj9ZLbLmVDPGDJ1Z0bVK4v5WHvHpasT8NTJz9e+exFwsaq4vFHtbdO7vlLm6utY2976A
+gICAwD/D9G1jLmVO3rcg3KVbW7W9o5OCDjIo/HRHctpOuPlhDyL8zRZolocWWPYV653QWtjlAcQV
+AAAgj1KtqJc/V1ls4ji6ChEr6p9MaBZCA9i3AHCMAtDfslmz7okE9Dmr3MQVh54UmfNmUWxpJCBS
+d6xetyXdPaRdnexTA1rUtOFGCwAApKTj7EzZhw2XJ3wsa789vr44rCnZ5SrOfedD2pj6DCBL2eId
+bo+DCEDxIktKtrX8gw2ma09n8AWbnhAR7Am8SXFntPpYM2vUt3rFs+d9Eq2OI7NqnOYkurpGCr+4
+AgICAv8whMTwAJAHcDmvzmtRl2bh4394ZgL/Zh4+domtogham/rlSZ1LF+trJwREEFk5RsFagOZ5
+q7SmuJgDgIpHnnEjEBElpFohqT4xgzFcmwe8Uf4YegUAAMIbFbQ54ymJtTK4JuXlFwDg3O0rZMUb
+O1CWwoGA1rpUuY3tYzxNWfJDCad7CyiJlVjL3RrHOTRDe6RkJknlz6WSyp+umK8M3pGnnL8vJGTI
+3QI6m589xjGQ803DZ+v/HEtIH/YuTQQEBAQEHgAhDETgQXk8weGUCMD7CQDOCFB4AhqbihAYBACg
+KIquBZDDYxRYAHYoNv7qShtujnk84qopFK9pa6f5apUxZ/MEmf+MbAAAmi1WAljt7teWcFoneIi0
+bIQ3SoE3+gFQfmLdib6+lrJPS0qOfOTuPkh/r3aIcYwpeaM3Y87wtlxdPZA2F7azCTokAGIrp117
+zXq+5WFO5lHO23U0yEL7lwqCS0BAQEBA4K/h8QgssQOA5wAAQwFA6XkA1nD/No8TXs4hEZseKWL/
+AaFQH8WUfTspA3FlCCFmwLt8i0F4xKMDjeEB0GIvNiW/7JAbU1tUhBs8PUmThUVE2nptaDR7cd5g
+MZqGU5b8CDBekTSeBW24PAIIvZSC2gI0Fxez8T8ft9yYcrg0ctsNt4x3wnhznisvctNz0g4ak7xH
+dW2tc1VAADE1Hk9AQEBAQEDg/jzm9AbNKQuCQEt4RDskxErRVgONKWPFYMxitPYzPUSkKhTLPo0k
++GjZ9wkxUkbVoGJ5zZbtxFIYQ9D46FlmCQUg97adWjQUN3yLN4kJW9zZoSg3MgXxBiS0bdpebA/g
+HAVQmQRgfkyHSpCTio1X3nTKi5ZWZmR86hQScqcMRQaixJrQczJjTnmJcNpgQO5e0o4AsjLKnBMC
+ACFA6O5o1TzrdcYhDSh5IAI4A6EMQHZqZTyrdeK0Wu6MugIkQSUWVb+TJZJB5wMC+giCqx76vPWe
+ouoLw4g5zxOoemZbIuU4WatLEumI0+QxrBliLA2pqTRACkBZAmX0me7CGNMHEEuWT8MLaeTt2l+3
+iFqdVQRPrRBcGQICAgL/HH99/ijeJJNrvm5BKFrGYI0n4Sqd0JLtRkw5vqraBc5ARHKCRod7RqDf
+B6uVMmvUL33tZF4cRVuyx8Kj1lZAHkDuB+AzGCDja4Dq9AaakfD6ljLd9lZy+RtVnNhNTptzGk5a
+7g0QOAFA5gmQ/RMA/1ChUwCU2JaagjU0HBfNKrHp2qtyzfRqRPycEMLFITI+iQOnM4aEdwmaHB/+
+XjmKsOXhABAOnPYu0pgGMF7nJKaM6e7yq2/HIn417h4HFFIQxf5przhT5pt3q9cBHBNllEe8XX7f
+gw7/cmqzP3KXFH2+njLnDQLgG98v0rUJlVbZ1fcRcSMhxPowfSMipStY6yDWHLana4qcLEnf9qfZ
+0g5AOIoSmZxlBW97I5E6AfCNc9UgrU/Q07Tj7xbTkVWIsXsIGfefXmcBAQGB/yp/ucCiuMIwO83G
+z+oC4wkQIIBA2aLCEQCbESGEAqAePIcZIRbKLXBkqeXmkpWkcmcYZS1u/WcEGygCALwGAtTmAXB/
+GCAIb7Qnlnw54cCOQzdnGhvl/SIMAC0G8OgNoM8FKDkLDzwPBACJA4Bja4DqFABDScO2aLVj+IoJ
+NdlfHQWAtC5XRg0W68/E3FVcPQ5XJXIAyNEETB4ia/7EsanTfwEATePLqqqSHBQZczvDhcguhGL6
+EF7vdJceCdK5xfy5LYfZC8G5KO9Rqrfvf83Bb8J/LoeMRHNkMm3OHgq86S5i0uhOs4VT4NrEXwGg
+4EH7NaXHBPJnfQfbSdz6UGxlBMXm+YM2VQwAdb8QCAAIBO8akudA84bOlDZuleU6mwoAvz/4XQkI
+CAgIPC7+egsW8hQB8x/B4A+iNxg7AIn6AS+u6xZj6drMpDw5b71nMPgD9gbgEAnAyBoIrPoX8MhS
+iEA10TCItnZ23gCE2P7/IBAAMJYDuCoBQp8HSNsKYGzkpuS0rjwv8tLm7VWJCxcsImh2btoRBSCy
+A1C3BTBXAGjTbZa5PwnFVbuZKR/nRMSa6DqLTH7+eZlH2bIxVOrwp4DXdyZslfsDdBUOQPoiLzdB
+zdFSlW7PDe6M0y2T49TjFqvXGcd2i5qUqbgNIpKa9J1OHJF584S2Il9V7UQl1kDGejP4RSBAJIDR
+ESGqP/9XWm5Mtz4OpYtXj7m7uLJBOK2rkbLzrSyIA86kkyqwwoXmMrwBOGDtfM/JfecX3b6v2syV
+EXblW5/Gks/7U1xFR4rN/1NZkom1wstKnH1AEFgCAgIC/wj/vhIzhAJw6Wiz5DzA8TtEEYqAk1qT
+Nk6R66/OJlxFmz89PoDNXSd2eLRYKuQBdJnNChukZJUApAYAHQhvtm+Q/R4RQHMNwK0ngO8IgLSN
+TZqzxIUoy1aPJuaCXk0EKBHb3JsuHQHKzgNokh9c4AHUWdEcAYAHsGgbvoWENolCvT2LK2mNRlOE
+lRdRUThvCWVOX0B4w0O6eBEIVysFrtYPAPwIYXhZ5ZcTZMhmWRMGLNodffRiY1ckIlLcjemDFdUH
+Xwde5wsEOOBZK6CVBTuRhauqqqboq7U8ra7mkityLMmT94jafJPQXBwSZqyTGLh0J6o2h0EJ3eR9
+YuYIMmpO5tqtinjOMjRsO1jCl62bRFhNVJO1a1zHgK3wkGp2fifV7tIDZ1AAYSQARAYAQNMu541Z
+q+dJA5bkGS+PeUquP7aCoMUX0NJcaZKHBhl1GUuHQGWlwZsQU42jo2PN/WqCCggICAg8Ph6vwBIp
+AUT2AFbDo7unkAcwawA4AwB9vywIDIq4fKVD2QtPM/pLkwlvVjziqDYoEYAqyPZvAn+U6nkU2KaG
+NKQdc4zq6av1yqevKnQ72kt0P86jLEWhd8QJAQBTOQCnt8VzUWIAvkGFIWT4bDXNVrRvkuiVkgD4
+Dgfw6m9zTRYerSsx9IAg2MYMex7AVAGQtrnx2MBRDI2IMmIsDpRXvjNOZEpdQNB831QV9x+bpQjW
+OgGAE224+O3Q5HELAPEg1BNHpt/f8RXpL75K2OKuTdvzQFtLAKylQBMAGggi7TTKkLJwCgAk1L9U
+d3OFE6v9eY6E1QwhaFSCtdlAcAKsyMwWZp4y3py9Xhb+ZU4ioqhF6rxIviT2WYqtWAT1f3cIBSD3
+rHt29VzeyDIEawOBb5ovlkZrP6xNfMZweXSarPbIxwSNPk0uemQoYGVtDxgdn9bypipXnufVAJAL
+ANr7tRQQEBAQeDw8PoGFPIDcB8C9G0Du3iYfzg9FVQpA5VUAjwH3vIyiOEZV+MLTIsP56YDsY/nm
+3zBr/CPEcREAYI02C1ADqwYFrKTl/mq3jy4QazGpUi87Y88bJfKqzcsB2UYnHxGAYmyuUkv9dSQo
+MmaqCVse0WRQz942q1d1CkDe3ocTVwAAjMSWy8y+JQD53ebmtDR8hoiINNaK5cUvTBSZk58HNN/7
+xCahAWjJQ6XtIHxNoEx3aJX1Uqe25qxPtigCF5YCAEhNRx2Q0/jfvaUtNul2jljC14RITZcHQT2B
+hYjEenXUZEaf8Abw9z9tShFRWyQyRvf78ljZxfAnKU47kOKqwuGP2pM2JGqbuM3+qaHAuhfIMlTt
+ladl1kLHxyuuAFDkessiH3iaox0tFOpomqZFiEYVIuqEk4UCAgICfw8PVO7mwUEAzgKPfIrvNry1
+7kP57mYwmpJwdtrvQkWWjMFNxBVCXcC59J59NDuuLvORpvwHFEDVVVvtxHpDI2Vn4hj3Ep6HuuSe
+LDHbdbqKtN3DWRXQTAGyDesZ0hIA9z4AlBRAlwHANrKYEAqRklUhkRYCJTM0+9g5s81qaCv02PzQ
+tD3nWDKvP6M/PxX4xuKKAIhUtrncacDX7YeHg/C14bTp+luykvVrDWnvedXNjyLINY1LwrtMFzkG
+ebN7uR49ysvLlQAAcLIPzZgyuwNaHiyVB1pp2pQxWl624WvGfGsBZS2OBOSaLp5zNIAqFEDq8hCa
+nCfEWhhKeL1/s/f0qBCx1SJufVRnPzODYnV31ovjRA9eB1RAQEBA4E/z+AQWoQBqcmyxP9xfnyCc
+BTGKjMkehNO7NXjjdhyRz2AA+5CH75j/s7HRxHYCkDM2nBYjz7fY971FsdW3T4MhzVorgbJvcirv
+oRHb26xdADZR0yjuCinHW3qnpa9q/PdMNjlMWMWJQ48BETU0KyHYAuKtmuZrPxJAxlqupLmSqCZu
+QUoC4NoFoMVsm5uxfqd4n71AaJswaxxOxhvFlLVgrKT65ym2rpoRB4QCUPjY3HN044wFgDyRSc16
+vRvHcf5lZWUK221Y6YdRMISrcKb48sA7JZEajAB1VtteADIPAIeWD9wvIE+R5uKtiNjmpqaarQl+
+X3ix5zWD64IDiNY733IoijKbzWbBPSggICDwN/J4LVicoUkOpz8gYCtyTDgAwvEijzxO1voSJ+9w
+BClF+SMOCE2sZSI5QPAEm7vMrH24IO+/EMJDgd7u2UxCjBQAEIZBnT2eKiIU/Alf6p3e7/EeBRzj
+lqx1XXbJIm6l1Tiv2qPxiX2Pk4bGN0y2BQA1WQDmyub7QwrF5htuhCtveojAIcx28pFn69JLPMzU
+iU0I2wc31T28mQFz/gTd1fk9gHZtKnDEDgAhzwGEzwNQt26mc9v25jhOREwmFZSfRAC+6YYQ29uE
+kqRpdgmCFhHgXWpIItjEkNwHgK2xVTL4s3gPAAh4qjnBeH8IzbN2bVNZKuBOMlpEREJIube3t5Ak
+VkBAQOBv5G/I5A4c0qoCThyegbKAVJ5S3WI5rLJKIvS8NNTAi7zMDnkTX2XMqQP/tGsRAUCsAnDu
+CGAouluKhXtD/QUHKwkNLONRjgxyhL0jamuhJp0FbJrp4aG5VxZ8QiPSzgYC+roK8EbKSnvUGhTD
+dyhN6Z0A69VTRO7egpSrEQFnaljvkRIBeA+2CaWyswBWfaNtQAAIwwEQBGSZJs+YZwH0BXV9UDYr
+Wv3uOU24hCvob5R1uiYzJDZsS8sA7LwAxM4AUle4m3uTEELMFNX8lwmKsY3t1h2g+iZAxrZGMWMU
+D9CMa7Lu1qAmx5ZOgzAAulsP7pEmBJGIWIJWUb3XAJw72Cx6YkcAi+7hDosgT0Tao8MdTZlKndvq
+jSZx5zIUW2srnJ2r3AT3oICAgMDfyl+epgFp+wKdx5qZZlmHGp52YXlGxSGKeAJ6AlYrABAClMT4
+mAr42VxkvNlmjaDvmaaoGYjtQ/4x5I1q1C8CJb/jK0NE3mqVPT4/qlV3dzGJPAG+SoogQgJGQETk
+RWIdTSyXkYhrCDYqWH33EKzmoaU2C47uVrPxa0jJ81l59AmellkY4y0vwmnCKa7Kv0Esk6EUwFoL
+4P8kwPW1AHz9e0Gg2JyerDWwEBGZhrsEwSbYbv88CpRNzEi8AKTlNpdlA+4irgD+OPVpqQaQON9b
+6NZrhLTcgJR9HuFNLgCGP0xViADlF22HDTz7AGT98JBfEpAQ3uDAGFNG2pcsFlPun3xE5B2zvQl5
+DFZSAQEBAYGH4W8QWC4aszhCz1HOFkAEYtUScjsr9Z1Py7u4YB4WArYPu5yfbbmk7NwB9PkPMVm0
+1RF07vho8Vv35DGJNorGJmVmeNYmbuS+zTTggOIqPcWmPBXLuOiJhBhMTqp8Jj8tsIH15FERKWyi
+hNU3dQ8TEcfatT9Q5nP0S8LqKUIIJa/+PEJZ/v4KgnrvBv3UZNqsSG5dAYp/a3jLlkp3kBiZx1ZH
+uwm3hVpTZYmUgxbQICO8SfbHtc00bxaCvNgzDynHMqAl1TxSZYBUNScJLLTK2pbJK9a9STho6Jcs
+PGaz6Cl8bUHzD7N//5gQoU1pg+yqtlwU+w+48AgdCAgICAj8Sf6RRKOIyDMM8mBB5BmGA0S2ieWE
+UABA6oK27yJOiBiBNEoUyZkBCo8DVCY/fKoIArYcXOmbAZRBAMaHjCdC1mZ94a1/UewXEqTd9Tzl
+WExDqdcfL3MAJacA3HsAANUkgzzNlrdXF42NMSpG/cCLPa56ZH3jyPKW2QCcfdMhHudsxWV6xzlH
+CVtOE0IIAIDeYUqqXe2eS4w+wetOklUCALX5tufl2gWg5GSDZ064ckfC6f+ZvUorKy12A39m2Lx2
+hKtR0qa09oDmBwqQQlpdblKN+9CkGJSDIhcLy/jpOcrJwiNwUssZR1n1zjzKWujfsBEHoLkBUJVa
+565uzqRIAGRutoMNZo1N3HLWRuoTacqc1qss/8aOFMT8SMGKJSAgIPC38k98aBl4haIUVUazG1Ra
+ASI4yDU2CjZBAH0eQNkpAF26zQXWmP9r796D4zqrA4Cf83333n3rZWnXlmQ7yjsyebjOG1qSEJIC
+MyEB0oYOKcOk0xDoHzBtYQYKAy0d2unQFkIzpTzCoyXQTjNJTIEECIEkQEjiODhyHn7Jth6WtFpp
+V7t7997vcfrHXcXS7kqWZDvE4fxmPPb43rt39+6u7tH3fecc9EWYuvJQrPzDETTFcxZtIxNNO611
+uMPPR8U2V2tuGOCluwHm9sGaIxVEiN6WljNTGMTPn3BE5tcS4OJFWyqjUQZnqg/ASQGouaPbSCWl
+//xV6dqLl5HsnCBE5ejCADSWPUCnPkW6ikxKo+Doa218zSSFPpIE8ABAgZRWE6VLKvXGe5zqU28B
+ggXTYyYKqoQbZSUuyMJE0gkUdsPKn9QJRGAqmVt/bOID20VtR7zryMfuFOrglhUdirFQx8497Cev
+GUddlGACQDsuJIBQcltZJbZul8FLr0Nb7Vp0IAIA2GV+QaAoiN90A0D6tOh9H38EoDa5aB+0YYxQ
+dK+bmLBEdBgRT356L2OMMQA44XWwVqS6sb29sB7XVxC3hIhooLGFB9nohrH7CwAjP2wewSIANFpU
+U+/aHyZ/715Ar7ls+vHMJa31WF0BmHgMoDp+7H2XYmoAYw8CTD7ecv0NkTYmeeFukpnFmZeqDLD/
+u1Fgksg1HQdgEUgnUU8NoJo8u6mWFgFA25kA8W5YVXCoStHCdhlrWvOGFGQTxW/dIARKABcA3Llc
+rv2g4z+2AVpFkIhRUNFQ4gIAUKI9/orxa0JAYEljdyBk1gfhrGIkiMAYLRArAlHVkwzQd10qO06l
+WOj9uwfCzDV/TxhbfTRfmwY48N/RlPimtwNkL2/xtkUfZGtt19TUVIu+lYwxxk6WExRgIQDIaCnV
+WqbGyK4upIlmm4CIbCn7xe1h5rq7AL0ZQLm2hU4oLKBrjhVZkUzndeKcWUQQKGMGUaymaNYSD97w
+lE0AMPYzgJHvtwyw0FbkXPYzT+m2a+8B9I6WDUcAqBUAhu+rV3FfZZToxAC6LgRw2peZknUNorO4
+RLwNAfbfE7VISg8svsmTAcff9ZaOw3/0Ds//eac793gy2Pm+M5zq8+8DsotrQMl4NIImvFYlCrQ2
+4tDqXtASq97IyOOZBkXA4yiU5lVG16/f093du6enp2d/X3ffnsrmb3xFtV//IZN83WOAcuWPjQBQ
+GQMY+zFA5SDAzK6mt5ykePkSBEGQoaXKTTDGGDvhTswUoQ0B5vYAzB1oNfpw7MMxGQrAFa9hJmfd
+sIkN+AAaNaaCQu+Xv9458bGfONXHbhdm+gognUZbTQDp1hlgIhEQeiGg0ATOqJXZfdbrn3FqQ9vQ
+zm1u+TzQLStv8H6/7U/2CV1xgsQlI2754XFhiitYDS+0iHXnoUXcQyib73pIS7W6QQBEY2Jhsf2O
+e9eVHnkrmvDMhVshyAOEBVj1FCWKenHLJd4CtKhiZ87G3J69Uo33LdqW3xEdJ9x68Hv03EgqE6/8
+7EMxf8etNtZ/WKixHNqZzYuOJwBoPycaPfPHmwJLEukyCK9FD5rlPi5WCFPygLyXn8zIFR/2+vd9
+se+4Eg5wNZGrliCkMU6HkpjykuXvrb9g591tigzZtktng1BjW+2Xt6Iu/D4CZsjpyqOazi5qAL78
+c4lql439BKB8sHGjMfFzn7UyYwCiUhUrf96MMcaO14kJsMIiwItfAtBrq2UYJrc9GfN3/ykCLL14
+GF1FsmPWeut3B5kbvqW8C0sI0bSL1kbFLvzaQ6Ojo091lL96gxsO94na7nWoZ7chVTfWsxQRMFYh
+jP/GeJv2WqevSk4m8JPXD9W8bZMAAJnw4U3O3CPnIIaicXBPeQN5P3Xzc9ZaLWxJVjPv2BsrP/jP
+nszcRNbfDKbcgbaaQgpi0JCdZ71Nu6rt7364XmS0rgSw8TZfj9y9y4Xh5uKdrcjMLIkuDaBRx8+t
+hpmrtsdKP3g/vJzhVreWMhOhX1/Ds8R9mAC1s3E6SL3124ng4Oloikf75yEATD8d9eQTTovg0MTR
+zvZJf7YPWpEeQMe50bqx8Z9CY3BITk/EFAG3AAAO8ElEQVSeMNk8umOqS79W0uCYyV5Xj6U0JH1E
+THWP/vpGADi99QEnnjCzXen8P70nVbp3BE1+naDyINpqLwCACPaPOaYaSj1+JZBa+/cwmImuWcN1
+IJEu1txLHyVqs4hVJHqVVNxljLHfESdokTtFDY6bIJBwj9l1WDlvvU+kD/c5wdCNgkgat6dETlee
+ZHqaMFGwhCVL7gw5m0pB+xsnAmdrAaD5Yfv6+grjc5/cLqrheo2eTAQP/8Dzd3ZGWy2S7Aqq6evG
+FPb7UXAWAmpfzq+PmfOuOUTr3zYM4EVLbxa9lAoK7S/o7WbUeOfnv5PFh+5H/9CAtTCAeiYOdlYi
+qbQUIg0InrWogtTrn6vGrlqUby+EQOy9vRoOfeRO0vleDA9ujfqkgAtAsrF0BaFbDWODD6rkRSUk
+hdZmdCXz7oec2u6tsvbiVce6xquz1GBHALO5TzwVK927Q5rSxqZRsmCNXX/azozqSO35BsDUjqbT
+G2/TLnLaa9hYzkNVommy2HyR0QZq6pJ1B17/OettOiTUWI9Q4xcAqY6XtxNEmXheG6w9fXKZ40jF
+3PDALaBGLVAoG0bOWtXUWL1WI8boBWHi4u/W2m86DFCBk1XcgjHG2NJWH2AJiyuuW4XSGm9giMT6
+ZbOX2s57x/TQ0Kf+YdCr3Alhp5zp+fBm62TjJNu1tRlDrmuJXAsQAqoqIqhFw0uplAwAABCRiGh6
+RlcUqtlu5W01tfjlRxeDqxDQ+kLC+ILq2Qv/FZJjjVFK+a7rxq21jU2B5++mKKVUQogw1Xv77JEj
+VCI3nDUGPSCXABUiKhEFcS4QhRb1wtErIGOMBQBwB//xKdg5+c5K+02noUxdLtXI6ajHutEuGNVA
+x4buuUOVttt+Ya1jEBWmw8ezqalP/5UM9l22gnfi2BCiNVAA9WKtzW8ZIiKEIZW6P/bltsm/6ZRq
+5A+O+7wyHrW82XN31GanseA4eqGSuSdsrG8WRKwMAEcXa9sQYOxHAB2DUTadjDdkHwZtUo1eLvWR
+S4GsaBkMpTYCtJ0Da5421NUouQF7lugCYBGotnSx0pPAeJsfKfXfeY+hjnDB4nqOshhj7BW0+gDL
+OTMgXZxGOLLkb+Ak4jVys6NWbHi22vau+41Iq/npvKVs2fKpEABCIhJqfDYF4HdH97wqoIIWxUkj
+iOiHIU5jvRVI/e8iEc0VCoW09mfaMIYpaaQbPULzun4iIiFEDREriFjJ5XKVQqGQrtVq7UIIKaV0
+tNauEEICAEhjVGBtvq+vzwcAyOWgNjVVLOggyEopm4p3YvNJq7o/6seCUQblLBHtGhvL+4jqyeWu
+E4JCooSNF//rGhnuez2QbgwC10a69YbRFPXV082JmRGNQeadByp6z0czhf+4C9XU1tWdJ16vE1af
+8TO1qMzAEozb/1St4937dPJ1pWT+356W0FA3qvgCwMF7owX6iWyLtUgAi6rGN/InoiKtXRet6mUs
+UtgJ0HYWQPvZx1ce5AQg2T4ZJq/9P+X0lhcG9a573F3MGWOMrcLqA6yL7hnVO6/9iqPzn0BT7gAA
+S+hVydt4yLrrDxvR+YLBzCGbvjTvx645omRPef636JVARDs5OTktNCQCogQRkUNkyHGM4xittQyN
+52nPGB0EQQgAfqtGtvXApUREc3thr5caTy07ipDNZsOGOkElIpqDeork8PCwjMViAgAg11s1AGeG
+C4I6Q0STExMTc57nOULMCSGkqFYdKYQQoZSOCAIphBDGNRoDnB7AgcbnbKU0M8ZQMnrIphGHhZ2Z
+EcODfUBmtb2AlocIQDWA6R3Nm4SjiepFXcMCTp73mWfc3eU74jP3fgb1+JuA9MreYzKw0uk4kp0H
+gs4//lrNu3rKQlIrb8tTIhi+Hm05/fJOqgxwaDtA/mmAcGZFj3v0RQGAPwlw+HtR1X+7sKbXUseI
+5h0mHo+eR+Y0gGTutxBkIQDK0Lq9e/z0m78+l/3krxYGV0Rk43GcQe5HyBhjr5hVB1iIqGjo5q/4
+Pe9/FkmcqbBNaNExadxNFettVAb7AyvbFWAFUfliYXBFROS6botssMWy2WyZiPZNTEx4Simbm5jQ
+sG0bQXT3m/8DK7lh1Pc55jmXOXa+j8qya8nqAV3TsE89NR5b7Nt0LiLKF4uHlDEyNX+M1o4XhiEK
+ISRGBHjCCmuOubZtxQgAvHaARG8UKOSbAywjN7xonTNq8+9n8emn7VkXf/4Jf/dtf+YWH/2MCEff
+jLbSqgDXYq2zIxdDT1nZ9lJt3V/8a7HjgzsRiij0rFPu+egvZfjidre262Ygc/SzSxqgfGhtQQ0C
+wOxugOf+OcqkVEuN3AHUvL7QOhuek/DS4iKvVkUB3uxQNLX6CgZXJFIzVmb2qtTVD1Xbb/lZEL+y
+AHT0GltrjeM4Y21tvauMPhljjB2PNS1yxy3/EwLA40NDQ092dXWdZa0TAwCIbr5VEKYaPe6CG03U
+HscpFXt6VvSDHhEVHCOoORUsCNJWsq8FgJn6nyZEJADAeQTAbthXnjmhd/L0aVGAcei+ltODWnb9
+KkxcWBZ6fNFIYGLwqweniD7Q/swNNwr/hXch+IMiHD1jbf0lkcjp3h8mBh/02//8IT913cj8RwAR
+MRS5Uil31992jL83lOGB9ywqw3E8l4JM66nFxmeHG/3QHfxSTO7aKkyhIfNzqUSPkwCFte6mIQPu
+kM684Zm5ro88akR7SOTSwqn4+nduLJfL5Xn0ijHGXlnHlUU4ODioC4XRYq1ms1gfgoF6MCGl1EII
+Xzs6xAD9WCwWHOjq8i+OAie2BvUALAQAoCcGT9wNEwGgPBz1YKyMQ+OCb+vmDpvEJYdbDNABAEAP
+4txPie4598jeHenS98/35n40IKi0VdZeuAxNoQeitMzlitoa66wbMbGL7gtSV/+q1POXeyAsQuO6
+Pcdxirt6rzh0fnjHxzsmPx+T+tAtJ7R5YisoCBwAREDEMh644K4dG3eGH0yWt39O6qnL1t4SSZJ1
+e5+xbt+Y9H9zJVLQBi37I2EIRMp6faPkdE1rJ7vLUnxP0PH2/dX2Ww8ShVbokgSY/wUnal5orTWu
+645ns9l8qxFTxhhjJ9dxBViIaInoyNzceE1rSFobM77r+rJSqeVyOQXRnZr4B/yJZyFuBCIBnaBh
+LL/eraVp5ZdXM7Hz7y+vu30vqqIARADPg20Nu12NqPcQ7RXi9lqx447nPbPnUa+8I+Go3f1eMPQG
+tKW25hRBAEIkK/sPVJNveizIvG3CyLgSKi8XZncKIQLHUYV162amcpjTADA6+9JnP56evAuFLV2L
+ttYGFDQlFxw/BOttfN66mwOoV4kdBLC49auPV5790Adic9/5F6lnrgQKVvg9QqoXuZ3U8cFfVjrv
++LbyzivEa490x2tPX4XqSO/CvQmFJe+sXTV51jMq1h+SyGqTOM/XmKshzgpUeYGLgzKsJ2tU4/H4
+dGdnZ4lHrhhj7LeDU7dPUcFvbrvRnf3fL6GZzZ60k6AXmNSl/1nIfeGbSubK8wvvhRCFXC53CLG5
+bQwReVNTU10AkA4CJymlcQH8Y3zOHCJyaYlkiIrruqM9PT1zjRuKh3/YFa/++DosPXmlCEc2I+hz
+6iNBSyIAAkweMYh7BUGvoOpAq9E1QmFJtu2rtL/338ttd7yIWEVE9NevX//SfDJEbc9fnyFnHn6/
+UIU3Afk5XOb7RCKeJ/SGTOLCYT993U4/df1+axMvXz9EJRA1UmP9tfq1WbBfq3OglFYROSVr7URv
+b291uWvAGGPs5OMA6xR1+PAvErnJT98ias/fIdWhLVE5dJBRX8cTMGiBsZpJXnJPof+uryvasCgT
+1Fo73N/fP73c4UTkFgqFhDEmCQBpojClNcqV1GMiIoohVhXidK1WmxsYaMq4XLivHJ+BPhFO9Mbn
+HtjkmJHU8o8uIfS25P30DSNx/xfdserP+wBbZECSZ4P4ZUeC2CV5gCheaQywAACOHKFUvPLNKxw1
+vBFgiUoIBsDGzp6da7/pIFnXoC7KhkAJhRABERlrbXy5azQ/De841gghAmsdba0teZ4XdHV1VVoF
+vYwxxl55HGCdwohIwhPXdoduOQdy4Gahxgcx3Ncr9GwvIHQBWQep5kVFNlcAXU0i5oNIjKnEFQ8U
+uz/7gHKy1QXBACKiT0QHVjpKUs+ilMPDww4le9o7TWnZul0UB3IcW8lk+kq4wvV6e4himYmJXoB0
+WotW65gWQ6UQ0RdEjiU3uWQ0iqqKiPrla9cqwAIAOEAU9/LBZiCTpCW6nc+fc+F/AUQL0RGx6jjO
+SE9PUY3PpTJxDUmstf5uGs/TWuvZ6elpNTg4OD8Fz0EVY4y9ynCA9RpARJjPH96gteoDrTGunlsf
+L//oQrSFlKg82y9AbRAQnA6kW/Z6JIxPEZmXrNs3ZdJXHKy2/eEzgbwgT+TahjIbVko5msvlpta6
+tqcecC1rLY9NRE6xeChTLstUDDFlHRszRnqw9HAeAgAJIUJrrSaiOCLK5faPA0x2btgw0mpN4dTU
+VIaIcvXq/ysZpTOI6CNiNZstzSKeFSzYtuTxvKaKMcZODRxgvUZEU3KjOa2pS+uYfHlkhlIUC3d1
+JKoPbUI7HQdqvkGr2NkzlczN+4lcG9Uvq4rGaSoisp7nHenu7p58tY+YEA15+Xw2ppSKAUDKdWnR
+tFtUuZ8q1SpVY7FYGASBcRwnLaVsF0I3LViP9odqoas6edaCQKjFfu7U1NSKir8GQWD6+/sDTgBh
+jLHXJg6wXkOISOzdu9eNZ7Mpr1brJKKE0NpR6CG40dKkVlNYLaavAOqfDSmtEgJ81zVT7e2biqda
+QFCvHdZq2tAsfC3zU5mw9HfCnGqvnTHG2G8PB1ivUUSEewG83Nx4plZzHKWU6ziOZ62NC6GXXadE
+5JKUOlBK1BKJRKmjo2Pu1T5qxRhjjL2acID1O4SI5MTERFxKecxF793d3QEihq/E82KMMcYYY4wx
+xhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYY
+Y4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4ydmv4f6UFMCRbAiE8AAAAASUVORK5CYII=
+"
+ height="849"
+ width="600" />
+ </g>
+</svg>
diff --git a/i/emacsconf-2021-poster-alphapapa.png b/i/emacsconf-2021-poster-alphapapa.png
new file mode 100644
index 00000000..91c94754
--- /dev/null
+++ b/i/emacsconf-2021-poster-alphapapa.png
Binary files differ
diff --git a/i/emacsconf-2021-poster-alphapapa.svg b/i/emacsconf-2021-poster-alphapapa.svg
new file mode 100644
index 00000000..ab87e6a7
--- /dev/null
+++ b/i/emacsconf-2021-poster-alphapapa.svg
@@ -0,0 +1,2642 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="600"
+ height="849"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+ sodipodi:docname="emacsconf-2021-poster-alphapapa.svg"
+ inkscape:export-filename="/home/me/Dropbox/Outbox/emacsconf/emacsconf2020poster.png"
+ inkscape:export-xdpi="119.1"
+ inkscape:export-ydpi="119.1">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient6010">
+ <stop
+ id="stop6012"
+ offset="0"
+ style="stop-color:#6200cb;stop-opacity:1;" />
+ <stop
+ id="stop6014"
+ offset="1"
+ style="stop-color:#6200cb;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5994">
+ <stop
+ style="stop-color:#8bd2d3;stop-opacity:1;"
+ offset="0"
+ id="stop5996" />
+ <stop
+ style="stop-color:#8bd2d3;stop-opacity:0;"
+ offset="1"
+ id="stop5998" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5917"
+ is_visible="true"
+ bendpath="m 355.0825,604.945 c 29.80726,9.48938 66.63249,10.86495 114.045,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <linearGradient
+ id="linearGradient5904">
+ <stop
+ id="stop5906"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop5908"
+ offset="1"
+ style="stop-color:#c4c39a;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5868"
+ is_visible="true"
+ bendpath="m 355.6025,605.785 c 51.56564,15.50745 109.16544,20.59916 181.64875,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <linearGradient
+ id="linearGradient5845">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5847" />
+ <stop
+ style="stop-color:#9c9ac4;stop-opacity:1;"
+ offset="1"
+ id="stop5849" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5809"
+ is_visible="true"
+ bendpath="m 353.5625,605.485 c 62.06774,17.24583 128.8137,22.83655 206.97,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <linearGradient
+ id="linearGradient5768">
+ <stop
+ id="stop5770"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop5772"
+ offset="1"
+ style="stop-color:#c49a9a;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5732"
+ is_visible="true"
+ bendpath="m 354.8425,601.685 c 61.48451,-10.30401 127.37439,-16.25926 205.69,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <linearGradient
+ id="linearGradient5682">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5684" />
+ <stop
+ style="stop-color:#8bd2d3;stop-opacity:1;"
+ offset="1"
+ id="stop5686" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5556"
+ is_visible="true"
+ bendpath="m 24.09375,571.56771 c 38.345678,10.55748 69.7203,8.44032 97.61719,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5494"
+ is_visible="true"
+ bendpath="m 127.68125,566.45032 c 58.33042,33.97329 117.39421,32.01132 177.07125,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5469"
+ is_visible="true"
+ bendpath="m 58.8825,332.97532 c 80.14605,-52.56148 147.48485,-41.08675 208.90125,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5436"
+ is_visible="true"
+ bendpath="m 39.2825,197.47782 c 46.568265,-34.50803 97.26127,-44.6801 157.25125,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3836">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3838" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3840" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3800">
+ <stop
+ style="stop-color:#605bad;stop-opacity:1;"
+ offset="0"
+ id="stop3802" />
+ <stop
+ style="stop-color:#b257c3;stop-opacity:1;"
+ offset="1"
+ id="stop3804" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3790">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3792" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3794" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3776"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#b257c3;stop-opacity:1;"
+ offset="0"
+ id="stop3778" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3770"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#605bad;stop-opacity:1;"
+ offset="0"
+ id="stop3772" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3800"
+ id="linearGradient3806"
+ x1="277.79196"
+ y1="13.603845"
+ x2="340.42142"
+ y2="266.14197"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3836"
+ id="linearGradient3963"
+ gradientUnits="userSpaceOnUse"
+ x1="19.992188"
+ y1="37.136068"
+ x2="223.05859"
+ y2="37.136068" />
+ <filter
+ id="filter9519-5-9"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9521-8-2"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9523-6-9"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9519-5"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9521-8"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9523-6"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9519"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9521"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9523"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9513"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9515"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9517"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9507"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9509"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9511"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9501"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9503"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9505"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9495"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9497"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9499"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9489"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9491"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9493"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9483"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9485"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9487"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9477"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9479"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9481"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9471"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9473"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9475"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9465"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9467"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9469"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9459"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9461"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9463"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9453"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9455"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9457"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9447"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9449"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9451"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9441"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9443"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9445"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9435"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9437"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9439"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9429"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9431"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9433"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9423"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9425"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9427"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9417"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9419"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9421"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9411"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9413"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9415"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9405"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9407"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9409"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9399"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9401"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9403"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9393"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9395"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9397"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9387"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9389"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9391"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9381"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9383"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9385"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9375"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9377"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9379"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9369"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9371"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9373"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9363"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9365"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9367"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9357"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9359"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9361"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9351"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9353"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9355"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9345"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9347"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9349"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9339"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9341"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9343"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9333"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9335"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9337"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9327"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9329"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9331"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9321"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9323"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9325"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9315"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9317"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9319"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9309"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9311"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9313"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9303"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9305"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9307"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter9297"
+ inkscape:label="Color Shift"
+ style="color-interpolation-filters:sRGB">
+ <feColorMatrix
+ id="feColorMatrix9299"
+ result="color1"
+ values="26"
+ type="hueRotate" />
+ <feColorMatrix
+ id="feColorMatrix9301"
+ result="color2"
+ values="1"
+ type="saturate" />
+ </filter>
+ <filter
+ id="filter4362"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4364"
+ stdDeviation="1.5160574" />
+ </filter>
+ <filter
+ id="filter4354"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4356"
+ stdDeviation="1.5160574" />
+ </filter>
+ <filter
+ id="filter4346"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4348"
+ stdDeviation="1.5160574" />
+ </filter>
+ <filter
+ id="filter4338"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4340"
+ stdDeviation="1.5160574" />
+ </filter>
+ <filter
+ id="filter4330"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4332"
+ stdDeviation="1.5160574" />
+ </filter>
+ <filter
+ id="filter4322"
+ style="color-interpolation-filters:sRGB"
+ height="1.1104"
+ y="-0.055199999"
+ width="1.1104"
+ x="-0.055199999">
+ <feGaussianBlur
+ id="feGaussianBlur4324"
+ stdDeviation="1.5160574" />
+ </filter>
+ <linearGradient
+ id="linearGradient54267"
+ inkscape:collect="always">
+ <stop
+ id="stop54269"
+ offset="0"
+ style="stop-color:#d2d9b1;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffe7af;stop-opacity:1"
+ offset="0.05920397"
+ id="stop54271" />
+ <stop
+ id="stop54273"
+ offset="0.39160991"
+ style="stop-color:#c047c5;stop-opacity:1" />
+ <stop
+ style="stop-color:#5955a9;stop-opacity:0.99215686"
+ offset="1"
+ id="stop54275" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient54267"
+ id="radialGradient5366"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45138353,0.81323238,-1.222419,0.67850203,1036.3581,-157.52982)"
+ cx="584.20154"
+ cy="666.87793"
+ fx="584.20154"
+ fy="666.87793"
+ r="196.41905" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient54267-0"
+ id="radialGradient5366-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45138353,0.81323238,-1.222419,0.67850203,1036.3581,-157.52982)"
+ cx="584.20154"
+ cy="666.87793"
+ fx="584.20154"
+ fy="666.87793"
+ r="196.41905" />
+ <linearGradient
+ id="linearGradient54267-0"
+ inkscape:collect="always">
+ <stop
+ id="stop54269-7"
+ offset="0"
+ style="stop-color:#d2d9b1;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffe7af;stop-opacity:1"
+ offset="0.05920397"
+ id="stop54271-6" />
+ <stop
+ id="stop54273-0"
+ offset="0.39160991"
+ style="stop-color:#c047c5;stop-opacity:1" />
+ <stop
+ style="stop-color:#5955a9;stop-opacity:0.99215686"
+ offset="1"
+ id="stop54275-1" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="bend_path"
+ id="path-effect5494-7"
+ is_visible="true"
+ bendpath="m 127.68125,566.45032 c 58.33042,33.97329 117.39421,32.01132 177.07125,0"
+ prop_scale="1"
+ scale_y_rel="false"
+ vertical="false"
+ bendpath-nodetypes="cc" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5682"
+ id="radialGradient5688"
+ cx="262.63965"
+ cy="741.92383"
+ fx="262.63965"
+ fy="741.92383"
+ r="82.697357"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5682-4"
+ id="radialGradient5688-6"
+ cx="262.63965"
+ cy="741.92383"
+ fx="262.63965"
+ fy="741.92383"
+ r="82.697357"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient5682-4">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5684-0" />
+ <stop
+ style="stop-color:#8bd2d3;stop-opacity:1;"
+ offset="1"
+ id="stop5686-9" />
+ </linearGradient>
+ <radialGradient
+ r="82.697357"
+ fy="741.92383"
+ fx="262.63965"
+ cy="741.92383"
+ cx="262.63965"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient5749"
+ xlink:href="#linearGradient5768"
+ inkscape:collect="always" />
+ <radialGradient
+ r="82.697357"
+ fy="741.92383"
+ fx="262.63965"
+ cy="741.92383"
+ cx="262.63965"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient5749-9"
+ xlink:href="#linearGradient5768-5"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5768-5">
+ <stop
+ id="stop5770-2"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop5772-1"
+ offset="1"
+ style="stop-color:#c49a9a;stop-opacity:1;" />
+ </linearGradient>
+ <radialGradient
+ r="82.697357"
+ fy="741.92383"
+ fx="262.63965"
+ cy="741.92383"
+ cx="262.63965"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient5826"
+ xlink:href="#linearGradient5845"
+ inkscape:collect="always" />
+ <radialGradient
+ r="82.697357"
+ fy="741.92383"
+ fx="262.63965"
+ cy="741.92383"
+ cx="262.63965"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient5826-0"
+ xlink:href="#linearGradient5845-9"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5845-9">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5847-9" />
+ <stop
+ style="stop-color:#9c9ac4;stop-opacity:1;"
+ offset="1"
+ id="stop5849-1" />
+ </linearGradient>
+ <radialGradient
+ r="82.697357"
+ fy="741.92383"
+ fx="262.63965"
+ cy="741.92383"
+ cx="262.63965"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient5885"
+ xlink:href="#linearGradient5904"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6010"
+ id="radialGradient6000"
+ cx="400"
+ cy="752.36218"
+ fx="400"
+ fy="752.36218"
+ r="196.41905"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5994"
+ id="radialGradient6002"
+ gradientUnits="userSpaceOnUse"
+ cx="400"
+ cy="752.36218"
+ fx="400"
+ fy="752.36218"
+ r="196.41905" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5994"
+ id="radialGradient6004"
+ gradientUnits="userSpaceOnUse"
+ cx="400"
+ cy="752.36218"
+ fx="400"
+ fy="752.36218"
+ r="196.41905" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5994"
+ id="radialGradient6006"
+ gradientUnits="userSpaceOnUse"
+ cx="400"
+ cy="752.36218"
+ fx="400"
+ fy="752.36218"
+ r="196.41905" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5994"
+ id="radialGradient6008"
+ gradientUnits="userSpaceOnUse"
+ cx="400"
+ cy="752.36218"
+ fx="400"
+ fy="752.36218"
+ r="196.41905" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6010"
+ id="radialGradient6040"
+ cx="307.85715"
+ cy="443.28571"
+ fx="307.85715"
+ fy="443.28571"
+ r="100.71429"
+ gradientUnits="userSpaceOnUse" />
+ <filter
+ inkscape:collect="always"
+ id="filter6042"
+ x="-0.28909091"
+ width="1.5781818"
+ y="-0.28909091"
+ height="1.5781818">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="24.262987"
+ id="feGaussianBlur6044" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4"
+ inkscape:cx="271.34466"
+ inkscape:cy="518.50045"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ showguides="true"
+ inkscape:snap-global="true"
+ inkscape:window-width="1912"
+ inkscape:window-height="1050"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2998"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Background"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-72.047241,-101.68109)"
+ style="display:inline">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:5.09875011000000011;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;fill-opacity:0.99607843"
+ id="rect3967-1"
+ width="600"
+ height="850"
+ x="72.047241"
+ y="100.68108" />
+ <rect
+ style="fill:url(#linearGradient3806);fill-opacity:1;stroke:none"
+ id="rect3000"
+ width="600"
+ height="160"
+ x="0"
+ y="-1"
+ transform="translate(72.047241,101.68109)" />
+ <rect
+ style="fill:none;stroke:#605bad;stroke-width:8.899;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:0.99607842999999996"
+ id="rect3967"
+ width="600"
+ height="850"
+ x="0"
+ y="-1"
+ transform="translate(72.047241,101.68109)" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3818"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ transform="translate(72.047241,101.68109)"><flowRegion
+ id="flowRegion3820"
+ style="font-family:sans-serif"><rect
+ id="rect3822"
+ width="366.42856"
+ height="105"
+ x="15"
+ y="16.142857"
+ style="font-family:sans-serif" /></flowRegion><flowPara
+ id="flowPara3824"
+ style="font-size:40px;line-height:1.25;font-family:sans-serif"> </flowPara></flowRoot> </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Text">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.39351855;fill:url(#radialGradient6040);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter6042)"
+ id="path6032"
+ sodipodi:cx="307.85715"
+ sodipodi:cy="443.28571"
+ sodipodi:rx="100.71429"
+ sodipodi:ry="100.71429"
+ d="m 408.57143,443.28571 a 100.71429,100.71429 0 1 1 -201.42857,0 100.71429,100.71429 0 1 1 201.42857,0 z"
+ transform="matrix(1.2588652,0,0,1.2588652,-87.550649,-133.53695)" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3808"
+ style="font-style:italic;font-variant:normal;font-weight:900;font-stretch:normal;line-height:0.01%;font-family:'Source Code Pro';-inkscape-font-specification:'Source Code Pro Heavy Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ffffff;fill-opacity:1;stroke:#605bad;stroke-width:3.17200756;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="matrix(1.3853372,0,0,1.3853372,-200.10978,34.17965)"><flowRegion
+ id="flowRegion3810"><rect
+ id="rect3812"
+ width="393.01004"
+ height="244.386"
+ x="396.98996"
+ y="14.613997"
+ style="font-style:italic;font-variant:normal;font-weight:900;font-stretch:normal;font-size:72px;line-height:125%;font-family:'Source Code Pro';-inkscape-font-specification:'Source Code Pro Heavy Italic';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#605bad;stroke-width:3.17200756;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></flowRegion><flowPara
+ id="flowPara3816"
+ style="font-style:italic;font-variant:normal;font-weight:900;font-stretch:normal;font-size:61.59751892px;line-height:125%;font-family:'Source Code Pro';-inkscape-font-specification:'Source Code Pro Heavy Italic';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#605bad;stroke-width:3.17200756;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">2021</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot3826"
+ style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;line-height:0.01%;font-family:Roboto;-inkscape-font-specification:'Roboto Heavy';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ffffff;fill-opacity:1;stroke:none"
+ transform="matrix(1.5030022,0,0,1.5030022,42.471819,-11.943247)"><flowRegion
+ id="flowRegion3828"
+ style="stroke:url(#linearGradient3963)"><rect
+ id="rect3830"
+ width="355.71429"
+ height="135.71428"
+ x="17.857143"
+ y="12.571427"
+ style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:40px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto Heavy';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke:none" /></flowRegion><flowPara
+ id="flowPara3834"
+ style="font-size:40px;line-height:1.25;fill:#ffffff;stroke:none">EmacsConf</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot3969"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:0.01%;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.73031759;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="matrix(1.011375,0,0,1.011375,9.716449,0.64673)"><flowRegion
+ id="flowRegion3971"><rect
+ id="rect3973"
+ width="515.1778"
+ height="60.609154"
+ x="20.203051"
+ y="83.304367"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:40px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke:#000000;stroke-width:1.73031759;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></flowRegion><flowPara
+ id="flowPara3979"
+ style="font-size:36.91344452px;line-height:1.25">November 27-28</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4012"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0.01%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ffffff;fill-opacity:1;stroke:none"
+ transform="translate(-15.657364,-2.525381)"><flowRegion
+ id="flowRegion4014"><rect
+ id="rect4016"
+ width="190.91884"
+ height="60.609154"
+ x="393.9595"
+ y="27.745981"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff" /></flowRegion><flowPara
+ id="flowPara4020"
+ style="font-size:40px;line-height:1.25">.org</flowPara></flowRoot> <g
+ inkscape:label="logo"
+ id="layer1-9"
+ style="display:inline"
+ transform="translate(492.64259,-482.54723)">
+ <circle
+ d="m 596.41905,752.36218 c 0,108.47925 -87.9398,196.41905 -196.41905,196.41905 -108.47925,0 -196.41905,-87.9398 -196.41905,-196.41905 0,-108.47924 87.9398,-196.41905 196.41905,-196.41905 108.47925,0 196.41905,87.93981 196.41905,196.41905 z"
+ sodipodi:ry="196.41905"
+ sodipodi:rx="196.41905"
+ sodipodi:cy="752.36218"
+ sodipodi:cx="400"
+ style="color:#000000;fill:url(#radialGradient5366);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path54245"
+ cx="400"
+ cy="752.36218"
+ r="196.41905" />
+ <path
+ style="color:#000000;fill:#59509f;fill-opacity:0.99215686;fill-rule:nonzero;stroke:none;stroke-width:1.19700003;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 246.71273,875.02715 c 5.30707,-1.91678 11.21951,-1.07383 15.77945,2.24972 6.38683,4.67105 8.49739,13.29908 5.38115,20.57227 12.14398,11.00811 25.39824,20.45943 39.88974,28.11784 3.68734,-6.41948 11.5721,-9.83951 18.78293,-8.16326 9.02961,2.10252 14.64463,11.12745 12.54091,20.15677 -0.0896,0.35677 -0.19093,0.71049 -0.30378,1.0606 15.57369,5.04379 31.71723,8.11936 48.05451,9.15505 -1.01104,-8.7225 4.95288,-16.72102 13.60117,-18.24127 9.02229,-1.57386 17.61208,4.46455 19.18548,13.48693 0.23908,1.41366 0.29382,2.85238 0.16284,4.28012 16.62401,-1.6842 32.96491,-5.48438 48.6262,-11.30833 -0.33933,-0.41747 -0.65852,-0.8509 -0.95541,-1.29955 -4.91386,-7.59756 -2.73772,-17.74012 4.86036,-22.65318 7.59692,-4.91331 17.73846,-2.73794 22.65196,4.85885 1.08924,1.69488 1.85648,3.57615 2.26323,5.54937 9.13587,-5.12543 17.84673,-10.97404 26.04911,-17.48978 4.92512,-4.05567 9.64954,-8.34908 14.15644,-12.86493 -0.7586,-0.35369 -1.48864,-0.7657 -2.18351,-1.23232 -7.39953,-5.01207 -9.3356,-15.0733 -4.32456,-22.47351 5.01174,-7.40089 15.0742,-9.33762 22.47503,-4.32579 1.78793,1.21147 3.31531,2.76856 4.49212,4.5795 9.86282,-13.43645 17.9739,-28.07453 24.13738,-43.56082 -0.68657,-0.0382 -1.36996,-0.12057 -2.04592,-0.24672 -8.66506,-1.70098 -14.31034,-10.10459 -12.60879,-18.76953 1.70158,-8.66385 10.10398,-14.30823 18.76801,-12.60757 1.88133,0.3763 3.67957,1.08815 5.30871,2.1015 3.50739,-15.83095 5.03944,-32.03554 4.56115,-48.24332 -0.2772,0.0764 -0.55644,0.14512 -0.83739,0.20623 -8.53607,1.79747 -16.91306,-3.66524 -18.71053,-12.20131 -1.79747,-8.53607 3.66525,-16.91306 12.20133,-18.71053 1.41178,-0.29142 2.85682,-0.3882 4.29486,-0.28765 -2.93469,-15.4206 -7.70875,-30.43344 -14.21986,-44.71674 -7.05457,4.60498 -16.49076,2.77874 -21.31784,-4.12577 -4.93035,-7.06855 -3.19668,-16.79562 3.87217,-21.72555 0.83185,-0.57788 1.71803,-1.07333 2.64593,-1.47943 -3.46207,-5.27744 -7.17669,-10.3848 -11.13091,-15.30428 -5.68959,-6.93614 -11.84801,-13.47404 -18.43199,-19.56769 -4.82679,6.34987 -13.70035,7.96905 -20.45875,3.73318 -7.21117,-4.52518 -9.38873,-14.03929 -4.86378,-21.2506 0.40059,-0.6274 0.84611,-1.22495 1.33305,-1.78798 -12.41641,-8.42207 -25.75757,-15.39266 -39.76209,-20.7752 -1.80346,4.47435 -5.64318,7.8125 -10.32487,8.97615 -8.06632,1.99539 -16.22285,-2.92647 -18.21758,-10.99296 -0.54302,-2.22521 -0.57078,-4.54503 -0.0812,-6.7826 -14.85942,-3.19105 -30.03921,-4.64532 -45.2342,-4.3336 1.86804,8.01264 -3.04689,16.03973 -11.03281,18.01887 -8.06632,1.99539 -16.22284,-2.92647 -18.21758,-10.99296 -0.3548,-1.44099 -0.49445,-2.92656 -0.4144,-4.40843 -15.14883,2.61374 -29.93813,6.99823 -44.06378,13.06328 0.62478,0.58648 1.19766,1.22589 1.71226,1.91109 4.92654,6.56452 3.59952,15.87973 -2.96416,20.80739 -6.56446,4.92784 -15.88078,3.60131 -20.80891,-2.96294 -1.51864,-2.0258 -2.49452,-4.40601 -2.83521,-6.91481 -7.42416,4.43358 -14.54721,9.35296 -21.32258,14.72598 -6.17316,5.08504 -12.02978,10.5426 -17.53702,16.34224 2.42068,0.0763 4.78493,0.75011 6.88208,1.96152 7.01434,4.06792 9.4034,13.05153 5.33636,20.06639 -4.06754,7.0157 -13.05241,9.40546 -20.06792,5.33758 -3.72641,-2.16811 -6.31166,-5.86438 -7.07005,-10.10839 -37.96812,49.55357 -50.09792,114.21401 -32.67095,174.15927 2.96174,1.46395 5.43916,3.74997 7.136,6.58472 2.83741,4.75705 3.21007,10.58949 1.00115,15.66897 6.89206,16.19628 15.93154,31.39185 26.87526,45.1779 z m -8.50817,-35.53011 c -4.90963,-6.08526 -3.95644,-14.99839 2.12897,-19.90783 6.08593,-4.90878 14.99893,-3.95437 19.90753,2.13171 4.9083,6.08535 3.95462,14.99735 -2.1302,19.90631 -6.08534,4.90831 -14.99735,3.95462 -19.9063,-2.13019 z m 47.38703,49.78827 c -3.53469,-4.36911 -4.11121,-10.42946 -1.46335,-15.38646 3.63858,-6.81387 12.11212,-9.3877 18.92576,-5.74871 6.81401,3.63914 9.38724,12.11345 5.74718,18.92697 -3.63955,6.81267 -12.11262,9.38517 -18.92545,5.74596 -1.65027,-0.88088 -3.10705,-2.08387 -4.28414,-3.53776 z M 213.50702,774.09846 c -1.07227,-1.41607 -1.87186,-3.01919 -2.35812,-4.72756 -2.1667,-7.61133 2.2465,-15.53812 9.85758,-17.70572 7.61218,-2.16738 15.54002,2.24679 17.70694,9.8591 2.16669,7.61134 -2.24651,15.53811 -9.85758,17.70571 -5.68495,1.61871 -11.7805,-0.41919 -15.34882,-5.13153 z m 64.61074,65.20147 c -3.93971,-4.50583 -3.82535,-11.26356 0.26457,-15.63352 4.39865,-4.69931 11.77423,-4.94239 16.47274,-0.5429 4.69758,4.39828 4.94076,11.77174 0.54319,16.46999 -4.39809,4.69894 -11.77275,4.94269 -16.47152,0.54442 -0.28344,-0.26569 -0.55347,-0.54533 -0.80898,-0.83799 z m 69.83284,77.01637 c -2.26549,-2.79125 -3.3539,-6.35556 -3.03413,-9.93624 0.67978,-7.60057 7.39243,-13.21092 14.99298,-12.53096 7.60064,0.67902 13.21168,7.3911 12.53247,14.99174 -0.67977,7.60057 -7.3924,13.21092 -14.99296,12.53097 -3.71917,-0.33246 -7.14545,-2.1561 -9.49836,-5.05551 z M 250.512,788.78667 c -0.67676,-0.82462 -1.23918,-1.73678 -1.67097,-2.71227 -2.63734,-5.95578 0.0519,-12.92196 6.00705,-15.5607 5.9566,-2.63915 12.92481,0.0505 15.56345,6.00733 2.63797,5.95653 -0.0521,12.92375 -6.00856,15.56193 -4.84509,2.14613 -10.52669,0.7979 -13.89097,-3.29629 z m 71.94488,85.67888 c -2.77528,-3.16589 -3.60105,-7.59424 -2.15333,-11.54761 2.18621,-5.97027 8.79826,-9.03796 14.76861,-6.85194 5.97027,2.18621 9.03795,8.79826 6.85193,14.7686 -2.18622,5.97027 -8.79827,9.03795 -14.76861,6.85193 -1.8113,-0.66309 -3.42696,-1.77065 -4.6986,-3.22098 z m -12.33306,-40.45213 c -2.57194,-3.32724 -2.67668,-7.94179 -0.25842,-11.38235 3.04658,-4.33415 9.02988,-5.37787 13.36396,-2.3312 4.33416,3.04658 5.37788,9.02988 2.33119,13.36397 -3.04657,4.33415 -9.02987,5.37788 -13.36396,2.33119 -0.78631,-0.55295 -1.48504,-1.22094 -2.07277,-1.98161 z m -27.65294,-37.31354 c -0.36817,-0.41324 -0.70042,-0.85714 -0.99272,-1.32716 -2.83245,-4.55291 -1.43812,-10.53991 3.11446,-13.37291 4.55291,-2.8337 10.54097,-1.43984 13.37443,3.11324 2.83427,4.55357 1.4396,10.54266 -3.11476,13.37566 -4.01255,2.49607 -9.23942,1.74089 -12.38137,-1.78886 z m -65.97761,-92.83373 c -2.27367,-3.01164 -3.28423,-6.79076 -2.81723,-10.53529 0.99148,-7.94898 8.23869,-13.58948 16.1878,-12.59894 7.95016,0.99084 13.59159,8.23924 12.60017,16.18932 -0.99222,7.94892 -8.24,13.58875 -16.18902,12.59743 -3.89047,-0.48485 -7.41901,-2.52388 -9.78172,-5.65252 z m 28.3976,27.31775 c -1.70791,-2.0849 -2.66015,-4.68633 -2.70197,-7.38114 -0.10281,-6.59343 5.15873,-12.02187 11.75215,-12.12494 6.59449,-0.1035 12.02394,5.15915 12.12619,11.75367 0.10196,6.59331 -5.16008,12.02103 -11.75339,12.12343 -3.64341,0.0571 -7.1135,-1.55251 -9.42298,-4.37102 z m 105.4186,126.43488 c -1.71251,-2.20912 -2.36234,-5.06163 -1.77573,-7.79454 1.09763,-5.1172 6.13572,-8.37572 11.25294,-7.27815 5.1172,1.09764 8.37572,6.13573 7.27815,11.25294 -1.09764,5.1172 -6.13573,8.37573 -11.25294,7.27815 -2.18446,-0.46815 -4.13328,-1.69304 -5.50242,-3.4584 z m 26.08452,31.74822 c -1.69544,-1.92738 -2.68901,-4.37164 -2.81913,-6.93531 -0.3169,-6.27354 4.51213,-11.61605 10.78569,-11.93253 6.27354,-0.31692 11.61605,4.51213 11.93253,10.78568 0.31623,6.27251 -4.51172,11.61401 -10.78417,11.9313 -3.46648,0.17503 -6.82314,-1.24246 -9.11492,-3.84914 z m -67.24634,-90.15409 c -2.83099,-3.38669 -2.38052,-8.4271 1.00612,-11.25814 3.38727,-2.83145 8.42867,-2.38026 11.25936,1.00764 2.83098,3.38669 2.38052,8.4271 -1.00612,11.25814 -3.38727,2.83146 -8.42868,2.38026 -11.25936,-1.00764 z m -37.86533,-48.83185 c -1.25019,-1.40839 -2.06938,-3.14633 -2.36017,-5.00696 -0.83902,-5.3628 2.82813,-10.3904 8.1909,-11.22959 5.36375,-0.83972 10.3924,2.82847 11.23083,8.19242 0.83806,5.36268 -2.82955,10.38947 -8.19214,11.22808 -3.3057,0.5176 -6.64765,-0.6821 -8.86942,-3.18395 z m 65.1051,76.46878 c -2.03769,-2.43146 -2.42228,-5.84637 -0.97646,-8.67017 1.98735,-3.8811 6.74444,-5.41661 10.62583,-3.4298 3.88111,1.98735 5.41662,6.74444 3.4298,10.62584 -1.98734,3.8811 -6.74443,5.41661 -10.62583,3.4298 -0.94036,-0.48122 -1.77461,-1.14624 -2.45334,-1.95567 z m 78.75091,90.02543 c -1.06755,-1.31226 -1.88223,-2.81131 -2.40202,-4.42113 -2.31608,-7.17397 1.62206,-14.86716 8.79606,-17.18317 7.17396,-2.31608 14.86716,1.62206 17.18317,8.79606 2.31607,7.17397 -1.62206,14.86716 -8.79606,17.18317 -5.3578,1.72962 -11.22787,-0.008 -14.78115,-4.37493 z M 294.56263,762.5422 c -0.61891,-0.78907 -1.08572,-1.68633 -1.37664,-2.64605 -1.29818,-4.27511 1.11486,-8.7932 5.38985,-10.09177 4.27511,-1.29818 8.7932,1.11487 10.09177,5.38985 1.29886,4.27595 -1.11514,8.7951 -5.39137,10.093 -3.19269,0.96938 -6.65302,-0.12072 -8.71361,-2.74503 z m 36.69707,35.65901 c -1.85944,-2.51833 -1.68691,-5.9981 0.41254,-8.32013 2.43633,-2.69573 6.59668,-2.90596 9.29235,-0.46958 2.69572,2.43633 2.90596,6.59668 0.46958,9.29235 -2.43633,2.69572 -6.59668,2.90596 -9.29235,0.46958 -0.32571,-0.29387 -0.6212,-0.61957 -0.88214,-0.9722 z m 40.59425,43.29306 c -1.30606,-1.55331 -1.95539,-3.55445 -1.81008,-5.57867 0.30849,-4.29736 4.04251,-7.53082 8.33983,-7.22182 4.29735,0.30849 7.53081,4.04251 7.22181,8.33983 -0.30848,4.29735 -4.04251,7.53081 -8.33982,7.22181 -2.10294,-0.1512 -4.05512,-1.14722 -5.41174,-2.76115 z m -56.25794,-71.026 c -0.39029,-0.45835 -0.7166,-0.96752 -0.97002,-1.5136 -1.54849,-3.33611 -0.0993,-7.29587 3.23682,-8.84432 3.33612,-1.54849 7.29588,-0.0993 8.84433,3.23682 1.54849,3.33612 0.0993,7.29588 -3.23682,8.84433 -2.71385,1.25967 -5.93466,0.55483 -7.87431,-1.72323 z m 41.04395,47.15107 c -1.27668,-1.72409 -1.62029,-3.96715 -0.91833,-5.99438 1.17551,-3.39117 4.87729,-5.18757 8.26864,-4.01262 3.39112,1.1749 5.18814,4.876 4.01413,8.26743 -1.17437,3.3924 -4.8767,5.19024 -8.26894,4.01535 -1.23759,-0.42932 -2.31658,-1.22258 -3.0955,-2.27578 z m 39.35607,45.98568 c -0.90641,-1.16522 -1.52444,-2.52828 -1.80359,-3.9779 -0.97747,-5.07774 2.34693,-9.98631 7.42483,-10.96295 5.07774,-0.97747 9.98631,2.34694 10.96294,7.42483 0.97748,5.07774 -2.34692,9.98631 -7.42483,10.96296 -3.45843,0.66533 -6.99764,-0.66659 -9.15935,-3.44694 z m -46.30495,-68.19417 c -1.48557,-1.85277 -1.59011,-4.45748 -0.25846,-6.42379 1.67696,-2.47747 5.04511,-3.12583 7.52196,-1.44794 2.4761,1.67728 3.1238,5.04419 1.44672,7.52042 -1.67696,2.47748 -5.04511,3.12585 -7.52196,1.44796 -0.44873,-0.30402 -0.84928,-0.67369 -1.18826,-1.09665 z m -16.32816,-21.21208 c -0.0772,-0.10369 -0.15143,-0.20955 -0.22147,-0.3182 -1.64387,-2.54174 -0.91639,-5.93481 1.62498,-7.57923 2.54238,-1.64442 5.93649,-0.91617 7.58048,1.6265 1.64259,2.54176 0.91465,5.93376 -1.62622,7.57773 -2.41552,1.56258 -5.62804,0.992 -7.35773,-1.30683 z m -54.16526,-71.35903 c -2.17661,-2.45916 -2.99942,-5.83404 -2.19889,-9.01905 1.33996,-5.32809 6.7451,-8.56144 12.07339,-7.22229 5.3281,1.33929 8.56209,6.74381 7.22381,12.07217 -1.33871,5.32934 -6.74444,8.5642 -12.07368,7.22504 -1.94454,-0.48902 -3.69595,-1.55419 -5.02463,-3.05587 z m 16.35906,20.02783 c -1.31354,-1.67788 -1.92134,-3.8017 -1.69434,-5.92046 0.4817,-4.49635 4.51667,-7.75123 9.01313,-7.2706 4.49751,0.48105 7.75334,4.5172 7.27183,9.01466 -0.4817,4.49635 -4.51667,7.75123 -9.01314,7.2706 -2.20092,-0.23526 -4.21288,-1.35143 -5.57748,-3.0942 z m 16.29866,15.1406 c -0.98507,-1.16016 -1.54849,-2.61958 -1.59866,-4.1407 -0.12299,-3.72141 2.79448,-6.83774 6.5159,-6.96004 3.72141,-0.12299 6.83773,2.79448 6.96003,6.51591 0.1223,3.72035 -2.79405,6.83566 -6.51438,6.95879 -2.05624,0.0685 -4.0312,-0.80572 -5.36289,-2.37396 z M 262.4588,675.34176 c -2.79591,-3.42316 -3.50032,-8.09946 -1.83689,-12.19435 2.51228,-6.18373 9.5615,-9.16036 15.74552,-6.64877 6.18373,2.51229 9.16036,9.56151 6.64877,15.74552 -2.51229,6.18372 -9.5615,9.16035 -15.74551,6.64877 -1.87612,-0.76194 -3.53074,-1.98304 -4.81189,-3.55117 z m 168.77519,206.7959 c -0.67203,-0.76205 -1.23758,-1.61174 -1.68118,-2.52584 -2.70933,-5.58219 -0.38073,-12.3038 5.20122,-15.01358 5.58291,-2.70995 12.30556,-0.38049 15.01481,5.20275 2.70933,5.58219 0.38072,12.30379 -5.20123,15.01358 -4.54124,2.20425 -9.99505,1.10933 -13.33362,-2.67691 z m -58.62645,-73.8004 c -0.98818,-1.2298 -1.38346,-2.83291 -1.07986,-4.38103 0.56956,-2.89928 3.38158,-4.78789 6.28086,-4.21839 2.89931,0.56886 4.78858,3.38029 4.21989,6.27963 -0.56955,2.89928 -3.38157,4.78789 -6.28085,4.21838 -1.23776,-0.24291 -2.3499,-0.91534 -3.14004,-1.89859 z m 14.62863,17.17031 c -0.73333,-0.98761 -1.16752,-2.16508 -1.25094,-3.39235 -0.24001,-3.53734 2.43248,-6.59971 5.96976,-6.84067 3.53748,-0.24091 6.60062,2.43111 6.8422,5.96853 0.24161,3.5385 -2.43151,6.60266 -5.97006,6.84344 -2.18117,0.14822 -4.28788,-0.82354 -5.59096,-2.57895 z M 348.7977,775.77546 c -1.63192,-1.88368 -1.42771,-4.73367 0.45615,-6.36537 1.88436,-1.63106 4.7342,-1.42561 6.36509,0.4589 1.63059,1.88378 1.42585,4.73262 -0.45739,6.36385 -1.88379,1.63059 -4.73263,1.42585 -6.36385,-0.45738 z m -22.211,-27.61824 c -0.52473,-0.70018 -0.87636,-1.51457 -1.02629,-2.3766 -0.52593,-3.01878 1.49471,-5.89241 4.51344,-6.41872 3.01878,-0.52592 5.89241,1.49472 6.41871,4.51344 0.52593,3.01878 -1.49471,5.89241 -4.51344,6.41872 -2.05631,0.35868 -4.13995,-0.467 -5.39242,-2.13684 z m 37.85857,42.9503 c -1.174,-1.35217 -1.42497,-3.27559 -0.63716,-4.88369 1.08347,-2.21064 3.75382,-3.12444 5.96451,-2.04102 2.21051,1.0829 3.12491,3.7525 2.04254,5.96328 -1.08303,2.21198 -3.75464,3.12652 -5.96602,2.04225 -0.53557,-0.26271 -1.01295,-0.63025 -1.40387,-1.08082 z m -24.24273,-35.88883 c -0.35774,-0.43871 -0.63015,-0.94055 -0.80425,-1.47919 -0.77529,-2.40111 0.54324,-4.97601 2.94462,-5.75045 2.40031,-0.77462 4.97413,0.54296 5.74923,2.94311 0.77462,2.40031 -0.54296,4.97413 -2.94311,5.74923 -1.7927,0.57923 -3.75712,-0.002 -4.94649,-1.4627 z m 69.58314,85.93034 c -0.61562,-0.73021 -1.09017,-1.56845 -1.39942,-2.47208 -1.37896,-4.02677 0.76781,-8.40893 4.79474,-9.78739 4.02667,-1.37786 8.40791,0.76936 9.78587,4.79598 1.37896,4.02676 -0.76782,8.40892 -4.79475,9.78738 -3.00723,1.029 -6.33771,0.10612 -8.38644,-2.32389 z m -48.51672,-66.16408 c -1.07353,-1.40312 -1.01022,-3.36824 0.15147,-4.69929 1.34894,-1.54572 3.6956,-1.70505 5.2411,-0.35586 1.54572,1.34895 1.70505,3.6956 0.35585,5.2411 -1.34894,1.54572 -3.6956,1.70506 -5.2411,0.35586 -0.18678,-0.16321 -0.35671,-0.34474 -0.50733,-0.5418 z m -9.11547,-15.49974 c -0.22471,-0.25452 -0.41401,-0.53824 -0.56254,-0.84357 -0.90741,-1.86826 -0.12802,-4.11837 1.74058,-5.02509 1.86826,-0.90742 4.11837,-0.12803 5.0251,1.74057 0.9062,1.86821 0.12638,4.11732 -1.74181,5.02357 -1.51944,0.73746 -3.34416,0.3712 -4.46133,-0.89548 z m 32.45672,39.53878 c -0.75273,-0.86369 -1.13927,-1.98672 -1.07754,-3.13073 0.132,-2.42823 2.20721,-4.28984 4.63546,-4.15833 2.42934,0.13133 4.29192,2.2077 4.15956,4.63697 -0.132,2.42823 -2.20721,4.28984 -4.63546,4.15834 -1.18871,-0.0649 -2.3005,-0.60823 -3.08202,-1.50625 z m -8.82448,-13.32547 c -0.73722,-0.96073 -0.95288,-2.22334 -0.57645,-3.37434 0.62952,-1.92636 2.70152,-2.9776 4.62784,-2.34795 1.92637,0.62951 2.97762,2.70152 2.34797,4.62785 -0.63016,1.92639 -2.70283,2.97701 -4.62908,2.34643 -0.70274,-0.22947 -1.31978,-0.66586 -1.77028,-1.25199 z m 22.66784,25.56845 c -0.52265,-0.64873 -0.88455,-1.41182 -1.05618,-2.22702 -0.60115,-2.85657 1.22737,-5.65956 4.08398,-6.2605 2.8558,-0.60146 5.65859,1.2256 6.2608,4.08125 0.60215,2.8567 -1.22593,5.66054 -4.08277,6.26202 -1.94623,0.41023 -3.95797,-0.30691 -5.20583,-1.85575 z m -26.80881,-38.03713 c -0.85646,-1.03164 -0.94084,-2.50094 -0.20807,-3.62382 0.92246,-1.41373 2.81611,-1.81233 4.2302,-0.89044 1.4151,0.92212 1.81436,2.817 0.89167,4.23172 -0.92301,1.41395 -2.81749,1.81194 -4.23143,0.88891 -0.25651,-0.16684 -0.48654,-0.37124 -0.68237,-0.60637 z m -9.42535,-11.81191 c -0.0451,-0.0574 -0.0878,-0.11677 -0.12825,-0.17761 -0.95408,-1.41903 -0.57654,-3.34288 0.84308,-4.29609 1.41906,-0.95281 3.34184,-0.57479 4.29458,0.84431 0.95227,1.41842 0.57503,3.34018 -0.84279,4.29335 -1.3479,0.90644 -3.16721,0.61653 -4.16664,-0.66395 z m -31.63666,-40.18022 c -0.99168,-1.32651 -1.34738,-3.02306 -0.972,-4.63617 0.70353,-3.02165 3.72368,-4.90061 6.74519,-4.19647 3.02041,0.70412 4.8985,3.72305 4.19525,6.74367 -0.70344,3.02044 -3.72177,4.89916 -6.74245,4.19676 -1.29025,-0.30019 -2.43288,-1.04675 -3.22599,-2.10779 z m 9.78954,11.57585 c -0.75819,-0.93353 -1.12199,-2.12618 -1.01518,-3.32406 0.22713,-2.54418 2.47435,-4.42212 5.01843,-4.19375 2.54304,0.22779 4.42002,2.47384 4.19251,5.01691 -0.22778,2.54305 -2.47384,4.42003 -5.01691,4.19253 -1.24468,-0.11111 -2.39139,-0.72132 -3.17885,-1.69163 z m -19.15127,-26.50053 c -1.61213,-1.90485 -2.05586,-4.5378 -1.15705,-6.86579 1.35749,-3.51517 5.30737,-5.26454 8.82271,-3.90749 3.5151,1.35688 5.26507,5.30606 3.909,8.82147 -1.35639,3.51641 -5.3068,5.26717 -8.82299,3.91024 -1.06684,-0.41191 -2.01305,-1.08534 -2.75167,-1.95843 z m 28.50146,34.88755 c -0.56702,-0.64541 -0.89898,-1.46368 -0.94188,-2.32172 -0.1055,-2.09842 1.50951,-3.88534 3.60788,-3.9919 2.09855,-0.10637 3.8862,1.50814 3.99342,3.60665 0.10618,2.09946 -1.50992,3.88738 -3.6094,3.99313 -1.15965,0.059 -2.28279,-0.4146 -3.05002,-1.28616 z m 90.15982,110.24719 c -0.13405,-0.17254 -0.26196,-0.34974 -0.38341,-0.53136 -2.84888,-4.24 -1.72086,-9.98669 2.51939,-12.83517 4.24002,-2.84759 9.98563,-1.71913 12.83365,2.52062 2.84887,4.23999 1.72086,9.98668 -2.51939,12.83516 -4.02909,2.7067 -9.46514,1.83814 -12.45021,-1.98928 z m -55.17406,-71.14752 c -0.5698,-0.68471 -0.80831,-1.58601 -0.65175,-2.46292 0.29349,-1.64139 1.86156,-2.73444 3.50313,-2.44192 1.64144,0.29279 2.73515,1.86027 2.44344,3.5019 -0.29216,1.64265 -1.86085,2.73727 -3.50342,2.44467 -0.7013,-0.12512 -1.3358,-0.4941 -1.7914,-1.04173 z m -26.57025,-33.51696 c -0.30297,-0.38991 -0.50907,-0.84618 -0.60204,-1.33114 -0.32662,-1.69877 0.78554,-3.34073 2.48425,-3.66767 1.69877,-0.32662 3.34072,0.78553 3.66767,2.48424 0.32661,1.69876 -0.78553,3.34072 -2.48424,3.66767 -1.15743,0.223 -2.34208,-0.22258 -3.06564,-1.1531 z m 59.98659,74.10847 c -0.21571,-0.28923 -0.40637,-0.59631 -0.56986,-0.91797 -1.58513,-3.12445 -0.33704,-6.94231 2.78759,-8.5271 3.12445,-1.58513 6.94231,-0.33704 8.5271,2.78758 1.58514,3.12445 0.33705,6.94232 -2.78758,8.52711 -2.75392,1.39662 -6.11343,0.60728 -7.95725,-1.86962 z m -24.98904,-31.04345 c -0.42366,-0.55037 -0.68037,-1.21081 -0.73948,-1.90284 -0.17051,-1.99421 1.30747,-3.74923 3.30161,-3.92049 1.99521,-0.1712 3.75126,1.30786 3.92172,3.30313 0.17121,1.99522 -1.30785,3.75126 -3.30313,3.92173 -1.22969,0.10474 -2.42819,-0.42336 -3.18072,-1.40153 z m -22.18903,-27.6937 c -0.93832,-1.04725 -0.85062,-2.65674 0.19591,-3.59587 1.04714,-0.93964 2.65775,-0.85249 3.59739,0.19467 0.93964,1.04715 0.85249,2.65776 -0.19468,3.5974 -1.04771,0.94009 -2.65931,0.85223 -3.59862,-0.1962 z M 476.7524,891.79775 c -4.87546,-5.62979 -4.26387,-14.14601 1.36602,-19.02137 5.6298,-4.87546 14.14601,-4.26387 19.02138,1.36602 4.87545,5.62979 4.26386,14.14601 -1.36602,19.02137 -5.6298,4.87546 -14.14602,4.26387 -19.02138,-1.36602 z M 379.77203,770.46049 c -0.54453,-0.74273 -0.63989,-1.72358 -0.24859,-2.55728 0.59018,-1.2587 2.08913,-1.80047 3.34768,-1.20989 1.2587,0.59019 1.80048,2.08913 1.20989,3.34768 -0.59063,1.25737 -2.08837,1.79833 -3.34616,1.20866 -0.38197,-0.17827 -0.71304,-0.44963 -0.96282,-0.78917 z m -67.584,-84.13022 c -2.04919,-2.62521 -2.32846,-6.22184 -0.70899,-9.13185 2.227,-3.99977 7.27468,-5.43707 11.27461,-3.21036 3.99977,2.22699 5.43707,7.27467 3.21037,11.2746 -2.227,3.99977 -7.27467,5.43707 -11.27461,3.21037 -0.96872,-0.53975 -1.8193,-1.26839 -2.50138,-2.14276 z m 53.70475,64.30526 c -0.20525,-0.2449 -0.36399,-0.52529 -0.467,-0.82779 -0.46089,-1.34726 0.25745,-2.8131 1.60461,-3.27429 1.34726,-0.4609 2.8131,0.25745 3.27429,1.60461 0.4609,1.34726 -0.25745,2.81308 -1.60462,3.27428 -1.00641,0.34497 -2.12136,0.0365 -2.80728,-0.77681 z m 40.12516,47.81945 c -0.35474,-0.40568 -0.63105,-0.87372 -0.81483,-1.38032 -0.81805,-2.25993 0.3514,-4.75504 2.61165,-5.57218 2.25913,-0.81739 4.75318,0.35114 5.57095,2.61014 0.81806,2.25993 -0.3514,4.75504 -2.61165,5.57218 -1.68729,0.60999 -3.576,0.12162 -4.75612,-1.22982 z M 377.9785,761.58622 c -0.62002,-0.78135 -0.60322,-1.89151 0.0396,-2.65423 0.74601,-0.88606 2.06911,-0.99946 2.95501,-0.25325 0.88607,0.746 0.99947,2.06912 0.25326,2.95502 -0.74601,0.88607 -2.06913,0.99946 -2.95502,0.25324 -0.10744,-0.0902 -0.20555,-0.19095 -0.29285,-0.30076 z m -5.43112,-8.82324 c -0.072,-0.0972 -0.13603,-0.20001 -0.19068,-0.3079 -0.52958,-1.04482 -0.11264,-2.32113 0.93159,-2.85184 1.04557,-0.53138 2.32394,-0.11405 2.85459,0.93189 0.53016,1.04552 0.1124,2.32288 -0.93313,2.85306 -0.92136,0.46727 -2.04531,0.20333 -2.66238,-0.6252 z m 18.68605,21.96998 c -0.33232,-0.45211 -0.50194,-1.00335 -0.48127,-1.56407 0.0509,-1.3723 1.20467,-2.44348 2.57696,-2.39242 1.37131,0.0507 2.44221,1.20287 2.39271,2.57421 -0.05,1.37241 -1.20334,2.44429 -2.57573,2.39393 -0.75856,-0.0276 -1.46298,-0.40014 -1.91267,-1.01165 z m -4.95434,-7.24298 c -0.42543,-0.53534 -0.55939,-1.24607 -0.35788,-1.89949 0.33667,-1.09294 1.49529,-1.70631 2.58842,-1.37031 1.09421,0.33611 1.70843,1.49597 1.37154,2.58994 -0.33729,1.09295 -1.49658,1.7057 -2.58965,1.36878 -0.39919,-0.12236 -0.75209,-0.3625 -1.01243,-0.68892 z m 13.04816,14.20939 c -0.30164,-0.36119 -0.51416,-0.78821 -0.61938,-1.2469 -0.36736,-1.60649 0.63716,-3.2066 2.24365,-3.57396 1.60661,-0.36839 3.2076,0.63569 3.57549,2.24242 0.36736,1.60649 -0.63715,3.20662 -2.24365,3.57397 -1.09419,0.25062 -2.23644,-0.13407 -2.95611,-0.99553 z M 360.12788,731.5497 c -0.57264,-0.73934 -0.78971,-1.69375 -0.59318,-2.60804 0.36761,-1.71176 2.05296,-2.80167 3.76487,-2.43474 1.71176,0.36762 2.80169,2.05296 2.43475,3.76487 -0.36761,1.71177 -2.05297,2.80168 -3.76487,2.43475 -0.73103,-0.15648 -1.38328,-0.56619 -1.84157,-1.15684 z m 18.25452,22.36827 c -0.0263,-0.0323 -0.0516,-0.0655 -0.0754,-0.0998 -0.55084,-0.79164 -0.35605,-1.87989 0.43518,-2.43132 0.79099,-0.5516 1.8793,-0.35804 2.43161,0.43244 0.55211,0.79162 0.35782,1.88094 -0.43395,2.43284 -0.75184,0.52413 -1.78089,0.37824 -2.3574,-0.33422 z m 5.43694,6.57515 c -0.4941,-0.57398 -0.55635,-1.40299 -0.15347,-2.0443 0.50686,-0.80707 1.5719,-1.05061 2.37916,-0.54406 0.80707,0.50687 1.05061,1.57192 0.54404,2.37917 -0.50631,0.80684 -1.57053,1.05101 -2.37792,0.54557 -0.1467,-0.0919 -0.27878,-0.20528 -0.39184,-0.33636 z m -18.04952,-22.50604 c -0.43752,-0.51945 -0.65536,-1.18899 -0.60724,-1.86645 0.10312,-1.43806 1.35263,-2.52016 2.79067,-2.41677 1.43807,0.10313 2.52016,1.35264 2.41677,2.79068 -0.10313,1.43807 -1.35264,2.52016 -2.79068,2.41677 -0.70325,-0.051 -1.35594,-0.3844 -1.80952,-0.92423 z m -11.0714,-14.77011 c -0.92928,-1.05881 -1.2064,-2.54048 -0.72272,-3.86362 0.7313,-1.99854 2.9446,-3.02548 4.94286,-2.29341 1.99724,0.7318 3.02338,2.94388 2.29219,4.94134 -0.7318,1.99724 -2.94388,3.02337 -4.94134,2.29219 -0.60551,-0.2217 -1.14568,-0.59184 -1.57099,-1.0765 z m -49.30493,-61.4982 c -3.16954,-3.59187 -3.37021,-8.91931 -0.47989,-12.73944 3.35534,-4.4349 9.67034,-5.31057 14.1058,-1.95597 4.43626,3.35506 5.31254,9.67127 1.95718,14.10731 -3.3556,4.43654 -9.67267,5.31219 -14.10852,1.95567 -0.53593,-0.40552 -1.02991,-0.86366 -1.47457,-1.36757 z m 65.59918,80.74267 c -0.24475,-0.33016 -0.3897,-0.72358 -0.41761,-1.13362 -0.0813,-1.1839 0.81269,-2.20948 1.99659,-2.29063 1.18378,-0.0803 2.2086,0.81406 2.28911,1.99782 0.0813,1.1839 -0.81268,2.20948 -1.99659,2.29063 -0.73031,0.0495 -1.43561,-0.27614 -1.8715,-0.8642 z m 4.94147,3.23587 c -0.17441,-0.21704 -0.29508,-0.4722 -0.35228,-0.74468 -0.20161,-0.95591 0.41001,-1.89423 1.36597,-2.09559 0.95578,-0.20061 1.89326,0.41145 2.09408,1.36719 0.20062,0.95579 -0.41145,1.89327 -1.3672,2.09409 -0.65079,0.13669 -1.32327,-0.10324 -1.74057,-0.62101 z m 47.17343,58.27414 c -0.0772,-0.096 -0.15074,-0.19484 -0.2211,-0.29592 -1.64893,-2.3651 -1.06879,-5.61907 1.29589,-7.2686 2.36512,-1.64894 5.61909,-1.06879 7.26862,1.2959 1.65021,2.36507 1.07055,5.62013 -1.29467,7.27012 -2.24824,1.56808 -5.32626,1.13073 -7.04872,-1.00152 z m -31.84422,-39.6163 c -0.32889,-0.38065 -0.47295,-0.8871 -0.3936,-1.38385 0.14935,-0.92986 1.02424,-1.56257 1.95408,-1.41319 0.92986,0.14935 1.56257,1.02423 1.4132,1.95409 -0.14935,0.92986 -1.02425,1.56257 -1.9541,1.41319 -0.3964,-0.0641 -0.75746,-0.26604 -1.01958,-0.57024 z m -41.86349,-52.32929 c -1.18297,-1.46172 -1.37542,-3.48982 -0.48939,-5.14844 1.21802,-2.28006 4.05394,-3.14077 6.33377,-1.92233 2.2799,1.21746 3.14125,4.05257 1.92386,6.33254 -1.21802,2.28006 -4.05393,3.14077 -6.33377,1.92233 -0.55256,-0.29474 -1.04036,-0.69739 -1.43447,-1.1841 z m 46.71391,57.63606 c -0.24448,-0.30625 -0.3957,-0.67636 -0.43594,-1.06615 -0.11562,-1.12382 0.70129,-2.12876 1.82505,-2.24509 1.12396,-0.11654 2.12968,0.6999 2.24661,1.82382 0.11632,1.12482 -0.70167,2.13078 -1.82656,2.24632 -0.69291,0.0714 -1.37456,-0.21453 -1.80916,-0.7589 z m 14.41158,17.27764 c -0.12493,-0.16125 -0.23563,-0.33304 -0.33125,-0.51321 -0.9254,-1.74825 -0.25813,-3.91567 1.49028,-4.84075 1.74825,-0.9254 3.91568,-0.25814 4.84076,1.49028 0.92539,1.74825 0.25813,3.91567 -1.49029,4.84075 -1.54065,0.81516 -3.44444,0.40268 -4.50954,-0.97704 z m 33.31321,38.8554 c -2.30771,-3.15724 -1.84791,-7.54941 1.06365,-10.16026 3.13021,-2.80707 7.94332,-2.54511 10.75039,0.58511 2.80662,3.12963 2.54536,7.94176 -0.58359,10.74915 -3.12951,2.80797 -7.9428,2.54723 -10.75068,-0.58235 -0.16973,-0.18906 -0.32981,-0.38656 -0.4798,-0.59161 z M 403.31561,774.2036 c -0.13221,-0.17824 -0.23902,-0.37403 -0.31836,-0.58131 -0.48467,-1.26768 0.15064,-2.68816 1.41865,-3.17196 1.26758,-0.48354 2.68714,0.15221 3.17043,1.41989 0.48289,1.26679 -0.15194,2.68528 -1.41835,3.1692 -1.0306,0.39358 -2.19718,0.0518 -2.85237,-0.83582 z m -58.35346,-76.44214 c -1.48915,-1.99831 -1.50332,-4.73349 -0.035,-6.74712 1.8503,-2.53648 5.40633,-3.09302 7.94312,-1.24315 2.53648,1.85029 3.09302,5.40633 1.24315,7.94311 -1.85029,2.53649 -5.40633,3.09303 -7.94311,1.24316 -0.4604,-0.33586 -0.86768,-0.73904 -1.20819,-1.196 z m 31.9458,39.31604 c -0.33046,-0.41125 -0.46263,-0.94737 -0.3613,-1.46512 0.19069,-0.9698 1.13123,-1.60156 2.10112,-1.41135 0.9698,0.1907 1.60158,1.13124 1.41135,2.10113 -0.1907,0.96979 -1.13123,1.60156 -2.10112,1.41134 -0.41404,-0.0816 -0.78593,-0.30687 -1.05005,-0.636 z m 22.62003,27.92317 c -0.17354,-0.20079 -0.29761,-0.43949 -0.36155,-0.69706 -0.22372,-0.90382 0.32822,-1.81773 1.23229,-2.04045 0.90295,-0.22304 1.8158,0.32791 2.03923,1.23076 0.22304,0.90295 -0.3279,1.81581 -1.23076,2.03924 -0.61534,0.15263 -1.26427,-0.0531 -1.67921,-0.53249 z m -25.90612,-32.74029 c -0.42708,-0.57674 -0.54223,-1.32701 -0.30767,-2.00524 0.39273,-1.13572 1.63212,-1.73768 2.76758,-1.34419 1.13572,0.39273 1.73769,1.63212 1.3442,2.76758 -0.39335,1.13577 -1.63342,1.73711 -2.76881,1.34267 -0.41384,-0.14356 -0.77469,-0.40874 -1.0353,-0.76082 z m -2.96305,-6.09651 c -0.68165,-0.81397 -0.80994,-1.95686 -0.32564,-2.90165 0.66516,-1.29892 2.25772,-1.81223 3.55627,-1.14729 1.29892,0.66516 1.81223,2.25772 1.14729,3.55626 -0.66516,1.29893 -2.25772,1.81223 -3.55626,1.14729 -0.31494,-0.161 -0.59435,-0.38361 -0.82166,-0.65461 z m 42.51341,51.17516 c -0.0445,-0.0536 -0.0874,-0.10857 -0.1281,-0.16517 -0.95409,-1.31878 -0.65865,-3.16127 0.65988,-4.11569 1.31877,-0.95409 3.16127,-0.65865 4.11569,0.65988 0.95409,1.31877 0.65865,3.16127 -0.65988,4.11569 -1.25313,0.90679 -2.99402,0.69079 -3.98751,-0.49477 z m -7.27101,-9.48958 c -0.0719,-0.0901 -0.13594,-0.1862 -0.19154,-0.28714 -0.5398,-0.97751 -0.18492,-2.20753 0.79262,-2.74726 0.97751,-0.5398 2.20752,-0.18493 2.74726,0.79262 0.53979,0.9775 0.18491,2.20752 -0.79262,2.74725 -0.86139,0.47603 -1.94041,0.26263 -2.55576,-0.50544 z m 19.18786,21.60281 c -1.33378,-1.7592 -1.11783,-4.24279 0.49954,-5.74541 1.73934,-1.61478 4.4583,-1.51409 6.07344,0.2249 1.61569,1.73863 1.51623,4.45778 -0.22216,6.07373 -1.7392,1.61612 -4.45932,1.51596 -6.07496,-0.22368 -0.0976,-0.10503 -0.18948,-0.21514 -0.27601,-0.32942 z m -57.0762,-71.29689 c -0.85997,-1.11338 -0.89464,-2.65703 -0.0856,-3.80795 1.01958,-1.45063 3.02221,-1.79978 4.47253,-0.77978 1.44926,1.01988 1.79777,3.02129 0.77856,4.47101 -1.01903,1.45037 -3.02082,1.80016 -4.47131,0.7813 -0.26343,-0.18544 -0.49746,-0.40947 -0.69419,-0.66458 z M 477.8531,853.82631 c -3.20931,-4.1926 -3.02111,-10.06563 0.45005,-14.04416 4.02996,-4.61915 11.04137,-5.09699 15.66076,-1.0673 4.6195,4.0305 5.09669,11.04283 1.06579,15.66199 -4.0305,4.6195 -11.04284,5.09668 -15.66199,1.06579 -0.5575,-0.48692 -1.06489,-1.02839 -1.51461,-1.61632 z m -70.55374,-91.42334 c -0.0253,-0.0297 -0.0498,-0.0602 -0.0736,-0.0912 -0.55233,-0.7355 -0.4033,-1.77959 0.33279,-2.33116 0.73551,-0.55233 1.7796,-0.40328 2.33116,0.3328 0.55107,0.73554 0.40149,1.77854 -0.33402,2.32964 -0.69856,0.52458 -1.68382,0.41977 -2.25636,-0.24006 z M 300.93421,630.31515 c -3.96934,-4.8721 -3.60181,-11.9591 0.85019,-16.39451 4.78676,-4.76962 12.53388,-4.75525 17.30291,0.0321 4.76963,4.78676 4.75528,12.53389 -0.0321,17.30293 -4.78675,4.76963 -12.53388,4.75527 -17.30292,-0.0321 -0.2877,-0.28897 -0.5607,-0.59219 -0.81811,-0.90843 z m 80.2925,99.12553 c -0.49657,-0.62036 -0.53121,-1.4918 -0.0853,-2.1495 0.56138,-0.82792 1.68744,-1.04438 2.51576,-0.4836 0.82793,0.56137 1.04438,1.68742 0.4836,2.51575 -0.56137,0.82792 -1.68743,1.04438 -2.51575,0.4836 -0.15034,-0.10148 -0.28461,-0.22493 -0.39834,-0.36623 z m -38.73046,-48.92444 c -2.28735,-2.71084 -2.14955,-6.71358 0.31875,-9.26076 2.65501,-2.73898 7.0277,-2.80709 9.76673,-0.15212 2.73899,2.655 2.8071,7.0277 0.15213,9.76673 -2.655,2.73899 -7.0277,2.8071 -9.76673,0.15213 -0.16533,-0.16067 -0.32249,-0.32954 -0.47086,-0.50599 z m 71.64957,88.60715 c -0.76906,-0.97998 -0.67114,-2.38311 0.22661,-3.24674 0.96553,-0.92908 2.50138,-0.89966 3.43062,0.0657 0.92908,0.96553 0.89966,2.50139 -0.0657,3.43062 -0.96553,0.92909 -2.50138,0.89966 -3.43062,-0.0657 -0.0564,-0.0588 -0.11037,-0.11994 -0.16107,-0.18375 z M 366.45173,708.4462 c -1.31804,-1.50779 -1.27959,-3.76888 0.0889,-5.23101 1.47159,-1.57226 3.93909,-1.65396 5.51145,-0.18247 1.57227,1.47159 1.65396,3.9391 0.18247,5.51145 -1.47158,1.57226 -3.93909,1.65396 -5.51144,0.18247 -0.0951,-0.0889 -0.18564,-0.18251 -0.27143,-0.28041 z m 78.11278,96.49494 c -1.85316,-2.33505 -1.80488,-5.65236 0.11549,-7.93245 2.22939,-2.6473 6.18274,-2.98602 8.82998,-0.75657 2.64729,2.2294 2.98601,6.18274 0.75656,8.82998 -2.22939,2.64728 -6.18273,2.98601 -8.82997,0.75656 -0.31991,-0.26932 -0.61204,-0.56999 -0.87206,-0.89752 z M 380.11034,723.8043 c -0.62209,-0.8427 -0.5643,-2.00701 0.13819,-2.78396 0.81541,-0.90121 2.20685,-0.97115 3.10853,-0.15626 0.90257,0.8152 0.97309,2.20784 0.15749,3.11005 -0.81541,0.90121 -2.20686,0.97116 -3.10853,0.15627 -0.10919,-0.0986 -0.20824,-0.20782 -0.29568,-0.32609 z m 45.18357,53.86934 c -1.06892,-1.29947 -1.07474,-3.17202 -0.0139,-4.47808 1.23224,-1.51689 3.461,-1.74733 4.97752,-0.51462 1.51721,1.23278 1.747,3.46245 0.5131,4.97875 -1.23303,1.51585 -3.46148,1.74502 -4.97723,0.51187 -0.18269,-0.14891 -0.35001,-0.31572 -0.49954,-0.4979 z m -11.14758,-15.2005 c -0.61629,-0.72306 -0.63789,-1.78019 -0.0517,-2.52788 0.68042,-0.86858 1.93623,-1.0209 2.80458,-0.34018 0.86889,0.68097 1.02056,1.93766 0.33867,2.80581 -0.68123,0.86752 -1.93672,1.0186 -2.8043,0.33744 -0.10465,-0.082 -0.20087,-0.17415 -0.28725,-0.27518 z M 379.89922,717.0939 c -0.94721,-1.13314 -0.79657,-2.81959 0.33643,-3.76696 1.13314,-0.94721 2.81958,-0.79657 3.76696,0.33644 0.94722,1.13314 0.79656,2.81958 -0.33644,3.76695 -1.13313,0.94721 -2.81958,0.79657 -3.76695,-0.33643 z m 33.39873,39.86043 c -0.39659,-0.52733 -0.43945,-1.24069 -0.10891,-1.81175 0.4552,-0.7861 1.46166,-1.05406 2.24748,-0.59842 0.78628,0.45576 1.05361,1.46302 0.5969,2.2487 -0.45614,0.78493 -1.46213,1.05161 -2.24719,0.59568 -0.19019,-0.11059 -0.35621,-0.25826 -0.48828,-0.43421 z m -25.05657,-32.95634 c -0.0255,-0.0348 -0.0502,-0.0702 -0.0731,-0.10661 -0.55023,-0.85053 -0.30684,-1.98609 0.54365,-2.53638 0.85054,-0.55025 1.98609,-0.30685 2.53639,0.54364 0.55024,0.85055 0.30684,1.98609 -0.54366,2.53639 -0.80846,0.52353 -1.88414,0.3326 -2.46305,-0.43718 z m -22.1984,-27.74887 c -1.64314,-2.03603 -1.32459,-5.01859 0.71149,-6.66167 2.03662,-1.64362 5.02018,-1.32435 6.6629,0.713 1.6423,2.03671 1.32253,5.01914 -0.71423,6.66138 -2.03612,1.64183 -5.01755,1.32278 -6.66016,-0.71271 z m 58.10124,71.85522 c -0.8503,-0.95311 -0.98023,-2.34908 -0.3205,-3.44279 0.83145,-1.37712 2.62201,-1.81926 3.9989,-0.98741 1.37693,0.83091 1.81967,2.62065 0.98893,3.99768 -0.83145,1.37712 -2.62201,1.81926 -3.9989,0.98741 -0.24926,-0.15053 -0.47461,-0.33754 -0.66843,-0.55489 z m 18.68083,19.85127 c -1.47537,-1.71461 -1.6615,-4.1904 -0.45911,-6.10635 1.51457,-2.41327 4.69887,-3.14155 7.11188,-1.62656 2.41305,1.51402 3.14195,4.6975 1.62808,7.11065 -1.51457,2.41327 -4.69887,3.14155 -7.11188,1.62656 -0.43775,-0.27434 -0.83181,-0.61289 -1.16897,-1.0043 z m -20.84278,-27.65797 c -0.54286,-0.68904 -0.66594,-1.6196 -0.32097,-2.42612 0.52031,-1.21659 1.92794,-1.78151 3.14493,-1.26214 1.21649,0.51972 1.78202,1.92663 1.26366,3.14369 -0.51925,1.21781 -1.9274,1.78412 -3.14521,1.26489 -0.36953,-0.15736 -0.69358,-0.40505 -0.94241,-0.72032 z M 380.80983,708.9868 c -0.12282,-0.13793 -0.23425,-0.28562 -0.33186,-0.44246 -0.94887,-1.52364 -0.48249,-3.52801 1.04153,-4.47626 1.52363,-0.94886 3.52802,-0.48248 4.47626,1.04154 0.9476,1.52363 0.48076,3.52695 -1.04276,4.47473 -1.34246,0.83556 -3.09153,0.58331 -4.14319,-0.59753 z m 8.79126,9.63838 c -0.13029,-0.15354 -0.23909,-0.32409 -0.32357,-0.50686 -0.51793,-1.11633 -0.0329,-2.44116 1.08338,-2.95921 1.11633,-0.51793 2.44116,-0.0329 2.95921,1.08337 0.51793,1.11633 0.0329,2.44117 -1.08337,2.95921 -0.90829,0.42193 -1.98648,0.1861 -2.63565,-0.57651 z m -47.45322,-59.7222 c -2.8457,-3.65754 -2.18767,-8.92944 1.46981,-11.77521 3.65694,-2.84522 8.92784,-2.18792 11.77399,1.46829 2.84655,3.65684 2.18972,8.92887 -1.46706,11.7755 -3.65745,2.84704 -8.93049,2.18949 -11.77674,-1.46858 z m 133.14929,164.78733 c -2.55872,-3.08213 -2.81151,-7.47151 -0.62343,-10.82693 2.75624,-4.22582 8.41595,-5.4178 12.64244,-2.66259 4.22719,2.7559 5.41983,8.41685 2.66381,12.64397 -2.75591,4.22718 -8.41685,5.41982 -12.64396,2.6638 -0.7669,-0.50048 -1.45421,-1.11341 -2.03886,-1.81825 z m -55.77361,-69.30882 c -0.42321,-0.49518 -0.57479,-1.16731 -0.40504,-1.7962 0.28445,-1.05191 1.36772,-1.6741 2.41966,-1.38976 1.05191,0.28379 1.67474,1.36643 1.39127,2.41843 -0.28321,1.05317 -1.36708,1.67686 -2.41994,1.39251 -0.38416,-0.10412 -0.72786,-0.32197 -0.98595,-0.62498 z m -2.76678,-4.63377 c -0.25487,-0.33761 -0.36801,-0.76131 -0.31531,-1.18102 0.11191,-0.88908 0.92272,-1.51954 1.81195,-1.40896 0.89031,0.11053 1.52239,0.92196 1.41166,1.81227 -0.11127,0.89025 -0.92326,1.52164 -1.81347,1.41019 -0.4354,-0.0543 -0.83032,-0.28241 -1.09487,-0.63247 z m -19.80915,-27.98488 c -0.17592,-0.23465 -0.29383,-0.5076 -0.34394,-0.79656 -0.17536,-1.00982 0.50066,-1.97073 1.51034,-2.14682 1.00994,-0.17634 1.97167,0.49924 2.14834,1.50912 0.17633,1.00994 -0.49924,1.97167 -1.50912,2.14834 -0.68829,0.12071 -1.38607,-0.15525 -1.80562,-0.71408 z m 42.29165,52.30008 c -0.93926,-1.23604 -1.12914,-2.88613 -0.49511,-4.30318 0.95779,-2.1405 3.46947,-3.09926 5.60996,-2.14145 2.14051,0.95778 3.09927,3.46946 2.14146,5.60995 -0.95837,2.14062 -3.47077,3.09878 -5.61118,2.13995 -0.64902,-0.29047 -1.21469,-0.73929 -1.64513,-1.30527 z m -47.19022,-61.81638 c -0.20751,-0.26361 -0.36439,-0.56337 -0.46235,-0.88424 -0.43494,-1.43115 0.37318,-2.94381 1.80459,-3.37788 1.43115,-0.43494 2.94382,0.37317 3.37789,1.80459 0.43494,1.43115 -0.37317,2.94381 -1.80459,3.37788 -1.06866,0.32387 -2.22651,-0.0416 -2.91554,-0.92035 z m -24.14211,-30.32642 c -0.21359,-0.24884 -0.40475,-0.51608 -0.57302,-0.79747 -1.6321,-2.72753 -0.74398,-6.26171 1.98365,-7.89366 2.72752,-1.63084 6.26065,-0.74226 7.89213,1.98488 1.6321,2.72753 0.74397,6.26171 -1.98365,7.89366 -2.40359,1.43799 -5.4934,0.93671 -7.31911,-1.18741 z m 49.2184,59.94443 c -0.12021,-0.15858 -0.20975,-0.33823 -0.26416,-0.52967 -0.24225,-0.85209 0.25184,-1.73928 1.10379,-1.98198 0.85221,-0.24331 1.74029,0.25034 1.9835,1.10257 0.24293,0.85293 -0.25212,1.74119 -1.10532,1.9832 -0.6362,0.18099 -1.31827,-0.047 -1.71781,-0.57412 z m -33.94548,-42.60378 c -0.22628,-0.27573 -0.41419,-0.58083 -0.55852,-0.90703 -0.8828,-1.99305 0.0171,-4.32439 2.01009,-5.20737 1.99304,-0.8828 4.32439,0.0171 5.20737,2.01009 0.8828,1.99304 -0.0171,4.3244 -2.01009,5.20738 -1.62145,0.71845 -3.52301,0.26726 -4.64885,-1.10307 z m 51.88685,64.25102 c -0.73379,-0.89006 -0.9812,-2.08485 -0.66112,-3.19311 0.53485,-1.85543 2.47298,-2.92556 4.32814,-2.38975 1.85417,0.53605 2.92282,2.4736 2.387,4.32785 -0.53541,1.85416 -2.47232,2.92345 -4.32662,2.38852 -0.67688,-0.19512 -1.27899,-0.59022 -1.7274,-1.13351 z M 421.29754,744.9556 c -0.24326,-0.28355 -0.39986,-0.63106 -0.45124,-1.0011 -0.14769,-1.06677 0.59765,-2.05119 1.66449,-2.19838 1.06581,-0.147 2.04919,0.59728 2.19715,1.66296 0.14796,1.06594 -0.59588,2.05012 -1.66173,2.19867 -0.65763,0.0915 -1.31658,-0.15803 -1.74867,-0.66215 z m 9.19367,10.48566 c -0.56494,-0.63232 -0.82221,-1.48164 -0.70304,-2.32117 0.2235,-1.57322 1.6801,-2.66732 3.25329,-2.44366 1.57316,0.22424 2.6666,1.68141 2.44215,3.25453 -0.22424,1.57316 -1.68141,2.66659 -3.25454,2.44214 -0.67097,-0.0962 -1.28644,-0.4262 -1.73786,-0.93184 z m -4.7811,-6.18827 c -0.33165,-0.41911 -0.51138,-0.9383 -0.51048,-1.47276 0.003,-1.30751 1.06489,-2.36527 2.3724,-2.36292 1.30751,0.003 2.36527,1.06489 2.36292,2.37241 -0.003,1.3075 -1.06489,2.36527 -2.3724,2.36291 -0.72238,-0.002 -1.40449,-0.33292 -1.85244,-0.89964 z m -25.25368,-31.84128 c -0.3296,-0.38806 -0.51818,-0.87624 -0.53513,-1.38511 -0.0406,-1.24464 0.93513,-2.28672 2.17976,-2.32797 1.24477,-0.0414 2.28759,0.93379 2.32949,2.17855 0.0421,1.24581 -0.9342,2.28963 -2.18005,2.33071 -0.6882,0.0223 -1.34891,-0.27087 -1.79407,-0.79618 z m 13.99392,17.18295 c -0.55036,-0.6816 -0.44348,-1.6804 0.23864,-2.23012 0.6816,-0.55036 1.68041,-0.44348 2.23013,0.23865 0.54904,0.68169 0.44166,1.67937 -0.23988,2.22861 -0.68101,0.54988 -1.67882,0.44372 -2.22889,-0.23714 z m -8.50278,-11.46455 c -0.33208,-0.44384 -0.45123,-1.01167 -0.32566,-1.55158 0.23536,-1.01127 1.24614,-1.64012 2.25732,-1.40435 1.01127,0.23536 1.64012,1.24614 1.40435,2.25732 -0.23536,1.01127 -1.24613,1.64012 -2.25732,1.40435 -0.43152,-0.10073 -0.81356,-0.35069 -1.07869,-0.70574 z m 63.42857,75.84631 c -1.62605,-2.21852 -1.9113,-5.14775 -0.7438,-7.63828 1.76196,-3.76106 6.23909,-5.38188 10.00036,-3.62035 3.76251,1.76211 5.38348,6.24122 3.62005,10.00311 -1.76255,3.76118 -6.24042,5.38138 -10.00159,3.61882 -1.1412,-0.53447 -2.1298,-1.34712 -2.87502,-2.3633 z m -50.09725,-63.27057 c -0.0712,-0.0835 -0.13623,-0.17206 -0.19232,-0.26645 -0.54732,-0.91294 -0.25018,-2.09676 0.6634,-2.64302 0.91294,-0.54607 2.09572,-0.24848 2.64152,0.66463 0.54549,0.91227 0.24869,2.094 -0.66312,2.64028 -0.80393,0.48182 -1.838,0.31487 -2.44946,-0.39546 z m -5.48403,-7.73163 c -0.49889,-0.66863 -0.50394,-1.58428 -0.0125,-2.2584 0.61932,-0.84895 1.80964,-1.035 2.65848,-0.41553 0.84868,0.61877 1.03537,1.80822 0.41706,2.65724 -0.61931,0.84896 -1.80963,1.03502 -2.65848,0.41555 -0.15404,-0.11196 -0.29039,-0.24643 -0.40459,-0.39883 z m -17.49533,-22.67455 c -0.41861,-0.47147 -0.69286,-1.05334 -0.79011,-1.67629 -0.28026,-1.79428 0.94682,-3.47613 2.74103,-3.75686 1.79428,-0.28027 3.47613,0.94681 3.75686,2.74102 0.28123,1.79441 -0.9454,3.47706 -2.73979,3.75838 -1.10634,0.17303 -2.2247,-0.22874 -2.96799,-1.06625 z m 28.54358,32.48223 c -0.13125,-0.1659 -0.23905,-0.34906 -0.32096,-0.5441 -0.50308,-1.18991 0.0536,-2.56238 1.24338,-3.0657 1.19067,-0.50371 2.5642,0.0538 3.06693,1.24491 0.50256,1.1906 -0.0554,2.56316 -1.24613,3.06541 -0.96796,0.40909 -2.08992,0.12257 -2.74322,-0.70052 z m -13.78964,-17.19717 c -0.53949,-0.63725 -0.68808,-1.51816 -0.38754,-2.29713 0.45417,-1.1765 1.77612,-1.76201 2.95257,-1.30773 1.17649,0.45417 1.76201,1.77612 1.30773,2.95257 -0.45417,1.1765 -1.77612,1.76201 -2.95258,1.30773 -0.35678,-0.13795 -0.6732,-0.36333 -0.92018,-0.65544 z m -5.74026,-7.95906 c -0.43893,-0.56132 -0.6419,-1.27158 -0.56593,-1.98008 0.16118,-1.50461 1.51139,-2.59379 3.01604,-2.43294 1.5046,0.16117 2.59378,1.51139 2.43293,3.01604 -0.16117,1.5046 -1.51139,2.59378 -3.01603,2.43293 -0.7368,-0.0787 -1.41034,-0.45241 -1.86701,-1.03595 z m 14.36499,15.11701 c -0.76594,-0.90731 -0.71984,-2.24737 0.10671,-3.09983 0.88839,-0.91541 2.35042,-0.93798 3.26666,-0.0505 0.91676,0.88821 0.9399,2.35144 0.0517,3.26819 -0.88821,0.91675 -2.35144,0.93989 -3.26818,0.0517 -0.055,-0.0539 -0.10746,-0.11044 -0.15685,-0.16959 z M 387.711,688.04241 c -0.35937,-0.47417 -0.6274,-1.01105 -0.79034,-1.58327 -0.72495,-2.54762 0.753,-5.20051 3.30081,-5.92484 2.54679,-0.72427 5.1986,0.75273 5.92361,3.2993 0.72533,2.54691 -0.75122,5.1996 -3.29807,5.92513 -1.90213,0.54182 -3.94178,-0.13978 -5.13601,-1.71632 z m 74.60185,92.11765 c -1.27272,-1.59893 -1.6743,-3.72297 -1.07323,-5.67621 1.00573,-3.26747 4.46965,-5.10116 7.73725,-4.09587 3.26874,1.00519 5.10328,4.47034 4.0971,7.73877 -1.00637,3.26749 -4.47094,5.10056 -7.73848,4.09435 -1.19218,-0.36682 -2.24573,-1.08521 -3.02264,-2.06104 z M 431.3857,741.48777 c -0.29944,-0.33393 -0.51554,-0.73402 -0.63065,-1.16754 -0.4027,-1.51667 0.49998,-3.07272 2.01649,-3.47604 1.51668,-0.4027 3.07273,0.49997 3.47605,2.01649 0.40375,1.5168 -0.49849,3.07373 -2.01527,3.47757 -1.03331,0.27449 -2.13324,-0.0541 -2.84662,-0.85048 z M 345.89347,633.58322 c -0.37077,-0.4469 -0.70239,-0.92489 -0.99164,-1.42841 -2.80484,-4.88062 -1.12271,-11.1109 3.7574,-13.91663 4.88064,-2.80609 11.11195,-1.12441 13.91815,3.75617 2.80667,4.88131 1.12418,11.11368 -3.75768,13.91938 -4.30173,2.47248 -9.75883,1.48859 -12.92623,-2.33051 z m 92.60689,113.28694 c -0.4212,-0.5094 -0.68771,-1.12879 -0.76738,-1.78497 -0.22843,-1.89307 1.12094,-3.61294 3.014,-3.84155 1.89307,-0.22843 3.61293,1.12093 3.84154,3.01399 0.22843,1.89307 -1.12093,3.61293 -3.01398,3.84155 -1.16713,0.14035 -2.32548,-0.32274 -3.07418,-1.22902 z m -66.09548,-82.1014 c -0.39201,-0.49552 -0.71555,-1.04154 -0.96101,-1.62375 -1.50188,-3.55741 0.16457,-7.65877 3.72205,-9.16047 3.55666,-1.50124 7.65696,0.16433 9.15925,3.72054 1.50304,3.55749 -0.16298,7.65981 -3.72083,9.162 -2.89417,1.22222 -6.24818,0.3639 -8.19946,-2.09832 z m 82.05211,100.95826 c -0.98165,-1.13808 -1.41084,-2.65144 -1.17282,-4.13542 0.44529,-2.77917 3.0594,-4.67105 5.83853,-4.22542 2.77912,0.446 4.67033,3.06069 4.22392,5.83974 -0.44591,2.778 -3.05883,4.66896 -5.83701,4.22422 -1.18652,-0.19004 -2.26772,-0.79326 -3.05262,-1.70312 z m -8.27714,-11.10705 c -0.57341,-0.75289 -0.87535,-1.67755 -0.85679,-2.62375 0.0444,-2.31657 1.95855,-4.15841 4.27511,-4.11356 2.31645,0.0452 4.15757,1.95987 4.11203,4.27632 -0.0459,2.31537 -1.95941,4.15551 -4.2748,4.11082 -1.2801,-0.0243 -2.47903,-0.63187 -3.25555,-1.64983 z m -28.6512,-36.38281 c -0.68573,-0.8786 -0.77904,-2.08229 -0.23688,-3.05605 0.74529,-1.33875 2.43487,-1.81967 3.77344,-1.07405 1.33741,0.74568 1.81761,2.43403 1.07282,3.77193 -0.74474,1.33857 -2.43352,1.8201 -3.77221,1.07556 -0.32425,-0.1807 -0.60893,-0.42465 -0.83717,-0.71739 z m 9.16577,10.07153 c -0.95178,-1.22353 -0.73201,-2.98687 0.491,-3.93931 1.22413,-0.95226 2.98846,-0.73177 3.94053,0.49252 0.95178,1.22353 0.73201,2.98687 -0.491,3.93931 -1.22413,0.95226 -2.98847,0.73177 -3.94053,-0.49252 z m -24.25439,-30.86068 c -0.57175,-0.69763 -0.88999,-1.56855 -0.90375,-2.47043 -0.0336,-2.20581 1.72698,-4.0214 3.93278,-4.05575 2.20593,-0.0344 4.02225,1.72564 4.05727,3.93156 0.0351,2.20699 -1.72607,4.02431 -3.93308,4.0585 -1.2194,0.0188 -2.38064,-0.52026 -3.15322,-1.46388 z m 9.75703,10.55566 c -0.72816,-0.82288 -1.00333,-1.95208 -0.73544,-3.01772 0.44787,-1.78308 2.25634,-2.86556 4.03946,-2.41787 1.78433,0.4473 2.86769,2.25699 2.41909,4.041 -0.44797,1.78431 -2.25828,2.86702 -4.04221,2.41756 -0.65058,-0.16383 -1.23647,-0.5204 -1.6809,-1.02297 z m 110.60266,137.07346 c -3.51049,-4.04159 -4.26068,-9.79197 -1.90458,-14.59891 3.23773,-6.6064 11.21786,-9.33738 17.82439,-6.09992 6.60772,3.23731 9.33945,11.21868 6.10113,17.82591 -3.23788,6.60786 -11.22,9.33897 -17.82713,6.09961 -1.59964,-0.78431 -3.0257,-1.88152 -4.19381,-3.22669 z M 435.20993,730.42558 c -0.12351,-0.14992 -0.23429,-0.30988 -0.33073,-0.47848 -0.93782,-1.63313 -0.3747,-3.71728 1.25798,-4.65588 1.63315,-0.93906 3.71834,-0.37639 4.6574,1.25675 0.9384,1.63381 0.37447,3.71901 -1.25951,4.65712 -1.43931,0.82726 -3.26518,0.49818 -4.32512,-0.77953 z m -9.26333,-13.5988 c -1.06008,-1.20169 -1.12721,-2.98372 -0.16064,-4.26183 1.12233,-1.48471 3.23578,-1.77843 4.72043,-0.65602 1.48499,1.12286 1.77808,3.23718 0.6545,4.72164 -1.12314,1.48363 -3.23624,1.77608 -4.72012,0.65328 -0.17956,-0.13548 -0.3451,-0.28861 -0.4942,-0.45704 z m -30.49351,-40.95932 c -0.72621,-0.84754 -1.19359,-1.8859 -1.34663,-2.99146 -0.44146,-3.18698 1.78429,-6.12839 4.97129,-6.56973 3.18698,-0.44147 6.1284,1.78428 6.56974,4.97128 0.44077,3.18603 -1.78394,6.12639 -4.96977,6.56851 -1.96483,0.27304 -3.93356,-0.47254 -5.22463,-1.9786 z m 49.54954,58.40757 c -0.22761,-0.29809 -0.41439,-0.62521 -0.55421,-0.97323 -0.85237,-2.1233 0.17739,-4.53561 2.30035,-5.38882 2.1233,-0.85236 4.5356,0.1774 5.38882,2.30035 0.85351,2.12338 -0.17581,4.53665 -2.29913,5.39034 -1.7274,0.69348 -3.70524,0.15007 -4.83583,-1.32864 z m -23.89118,-30.88014 c -0.93577,-1.14571 -1.17161,-2.71079 -0.6147,-4.08125 0.84053,-2.06942 3.19948,-3.06566 5.26891,-2.22519 2.06942,0.84052 3.06566,3.19948 2.22518,5.26892 -0.84052,2.0694 -3.19947,3.06565 -5.2689,2.22518 -0.62784,-0.25474 -1.18162,-0.66312 -1.61049,-1.18766 z m -9.92035,-14.27331 c -0.76081,-1.00799 -1.09878,-2.27285 -0.94218,-3.52599 0.3315,-2.66008 2.75661,-4.5478 5.41671,-4.21641 2.66008,0.33151 4.5478,2.75661 4.2164,5.41671 -0.33086,2.66125 -2.75715,4.54992 -5.41823,4.21764 -1.30174,-0.16248 -2.48228,-0.84496 -3.2727,-1.89195 z m 98.85917,121.36746 c -2.20466,-2.87129 -2.85011,-6.64567 -1.72494,-10.08642 1.88215,-5.75691 8.07518,-8.89766 13.83182,-7.01469 5.75561,1.88268 8.89551,8.07447 7.01344,13.83028 -1.88266,5.75562 -8.07446,8.89554 -13.83028,7.01346 -2.10011,-0.68614 -3.94399,-1.99065 -5.29004,-3.74263 z m -73.88686,-94.15235 c -1.32699,-1.6307 -1.20392,-4.0012 0.28554,-5.48498 1.6016,-1.59464 4.19246,-1.58971 5.78798,0.011 1.59599,1.60144 1.59161,4.19346 -0.01,5.7895 -1.60144,1.59599 -4.19346,1.59161 -5.7895,-0.01 -0.0965,-0.0973 -0.188,-0.1993 -0.27425,-0.30574 z m 20.31012,24.705 c -0.51923,-0.60019 -0.88919,-1.31466 -1.07971,-2.08508 -0.66755,-2.69873 0.97881,-5.4277 3.67745,-6.09566 2.69873,-0.66754 5.4277,0.97881 6.09565,3.67745 0.66824,2.6996 -0.9791,5.42964 -3.67895,6.09688 -1.83817,0.45404 -3.77563,-0.16169 -5.01444,-1.59359 z M 380.77644,645.0372 c -0.62097,-0.85038 -1.07842,-1.8088 -1.349,-2.82642 -1.20584,-4.53371 1.49228,-9.18647 6.02614,-10.39175 4.53372,-1.20585 9.18648,1.49228 10.39176,6.02615 1.20583,4.53372 -1.49229,9.18646 -6.02615,10.39174 -3.38568,0.90042 -6.97685,-0.37029 -9.04275,-3.19972 z m 88.13027,105.75897 c -0.73079,-0.91549 -1.18316,-2.02166 -1.30349,-3.18685 -0.34724,-3.36028 2.09565,-6.36569 5.45601,-6.71231 3.36029,-0.34724 6.36569,2.09566 6.71231,5.45601 0.34724,3.36029 -2.09566,6.3657 -5.45601,6.71232 -2.0717,0.21391 -4.10986,-0.64116 -5.40882,-2.26917 z m 27.6778,33.88827 c -1.70364,-2.04585 -2.41727,-4.73942 -1.94998,-7.3604 0.87486,-4.90792 5.56287,-8.17725 10.47074,-7.30212 4.90792,0.87487 8.17726,5.56286 7.30213,10.47074 -0.87486,4.90793 -5.56287,8.17727 -10.47075,7.30213 -2.09491,-0.37349 -3.9905,-1.4751 -5.35214,-3.11035 z m -14.31555,-19.92722 c -0.99299,-1.35139 -1.49952,-2.99901 -1.43732,-4.67485 0.15167,-4.09981 3.59756,-7.30077 7.69741,-7.15028 4.09992,0.15087 7.30158,3.59625 7.15179,7.6962 -0.15019,4.10102 -3.59671,7.30366 -7.69771,7.15302 -2.26644,-0.0831 -4.37082,-1.19678 -5.71417,-3.02409 z M 354.39177,603.34807 c -0.6803,-0.88953 -1.23685,-1.86721 -1.65436,-2.90632 -2.55021,-6.34603 0.52671,-13.55788 6.87262,-16.10839 6.3468,-2.55087 13.55971,0.52696 16.10962,6.87414 2.55086,6.34681 -0.52697,13.55971 -6.87415,16.10962 -5.1625,2.07381 -11.07431,0.4504 -14.45373,-3.96905 z m 78.25907,96.08836 c -1.18701,-1.57678 -1.3153,-3.7108 -0.32576,-5.41844 1.36121,-2.34738 4.3676,-3.14687 6.715,-1.78571 2.34737,1.36122 3.14685,4.3676 1.7857,6.71501 -1.36121,2.34738 -4.36759,3.14686 -6.715,1.7857 -0.56849,-0.33016 -1.06493,-0.77106 -1.45994,-1.29656 z m 16.14196,18.3962 c -0.0767,-0.0887 -0.15029,-0.17995 -0.22073,-0.27364 -1.6491,-2.19692 -1.20473,-5.31477 0.99241,-6.96357 2.19692,-1.64909 5.31478,-1.20474 6.96358,0.99241 1.64909,2.19692 1.20473,5.31478 -0.99242,6.96357 -2.08788,1.56731 -5.03225,1.25343 -6.74284,-0.71877 z m -42.22022,-55.68012 c -0.99083,-1.25363 -1.52818,-2.80573 -1.52468,-4.40363 0.008,-3.90817 3.18258,-7.06996 7.09076,-7.06241 3.90818,0.008 7.06996,3.1826 7.0624,7.09077 -0.007,3.9083 -3.18125,7.0708 -7.08954,7.06392 -2.15986,-0.004 -4.19964,-0.99418 -5.53894,-2.68865 z m 16.95275,18.99684 c -1.26445,-1.48023 -1.71683,-3.48915 -1.20892,-5.3685 0.84896,-3.14393 4.08574,-5.00448 7.22974,-4.15573 3.14394,0.84895 5.00449,4.08575 4.15574,7.22974 -0.84896,3.14395 -4.08575,5.00449 -7.22975,4.15574 -1.14737,-0.30932 -2.17452,-0.95808 -2.94681,-1.86125 z m 40.06407,40.4209 c -0.21548,-0.26871 -0.40715,-0.55569 -0.57357,-0.85724 -1.61205,-2.92178 -0.55024,-6.59716 2.37159,-8.20911 2.92177,-1.61205 6.59715,-0.55024 8.2091,2.37159 1.61146,2.92109 0.55048,6.59542 -2.37006,8.20787 -2.57466,1.4216 -5.79893,0.78278 -7.63706,-1.51311 z m -15.98468,-24.3699 c -1.84148,-2.16099 -1.90594,-5.32005 -0.15414,-7.55435 2.03409,-2.59483 5.78676,-3.04899 8.38114,-1.01432 2.59377,2.0349 3.04668,5.78724 1.01158,8.38085 -2.03436,2.59347 -5.78581,3.04702 -8.37963,1.0131 -0.31311,-0.24577 -0.60087,-0.52223 -0.85895,-0.82528 z m -52.73779,-73.48416 c -1.26035,-1.52308 -2.05662,-3.37617 -2.2941,-5.33879 -0.6832,-5.65757 3.34921,-10.79781 9.00675,-11.4812 5.65672,-0.68344 10.79672,3.34745 11.48149,9.00401 0.68414,5.6577 -3.34781,10.79873 -9.00553,11.48272 -3.48733,0.42145 -6.94952,-0.96015 -9.18861,-3.66674 z m 85.94338,104.97353 c -0.39378,-0.53371 -0.71343,-1.11831 -0.95019,-1.73787 -1.44607,-3.78769 0.45261,-8.03043 4.24055,-9.47584 3.78692,-1.44541 8.0286,0.45236 9.47462,4.23904 1.44606,3.7877 -0.45262,8.03043 -4.24056,9.47584 -3.08072,1.17564 -6.56731,0.15263 -8.52442,-2.50117 z M 439.45495,673.2605 c -1.62167,-2.05779 -1.99066,-4.83669 -0.96215,-7.24635 1.55322,-3.63844 5.76174,-5.32904 9.40035,-3.77622 3.63836,1.55263 5.32957,5.76042 3.77774,9.39912 -1.55275,3.63976 -5.7625,5.33115 -9.40186,3.77745 -1.10362,-0.47099 -2.07125,-1.21165 -2.81408,-2.154 z m -17.12706,-25.58388 c -1.31671,-1.80871 -1.87655,-4.05943 -1.56063,-6.27423 0.66987,-4.70024 5.02277,-7.9678 9.72313,-7.29879 4.70141,0.66924 7.9699,5.02333 7.30002,9.72465 -0.66925,4.70141 -5.02333,7.96989 -9.72465,7.30002 -2.30048,-0.32788 -4.37028,-1.57297 -5.73787,-3.45165 z m 78.58809,93.35121 c -0.90088,-1.07936 -1.53382,-2.35642 -1.8471,-3.72699 -1.09872,-4.8007 1.90234,-9.58312 6.70305,-10.68183 4.8007,-1.09872 9.58312,1.90234 10.68183,6.70304 1.09872,4.8007 -1.90234,9.58313 -6.70305,10.68184 -3.27027,0.74892 -6.68414,-0.40107 -8.83473,-2.97606 z M 465.71177,696.649 c -2.30105,-2.92852 -2.00935,-7.12404 0.67475,-9.70603 2.8861,-2.77633 7.47638,-2.68746 10.25284,0.19852 2.77634,2.88609 2.68746,7.47637 -0.1985,10.25284 -2.8861,2.77633 -7.47638,2.68746 -10.25285,-0.19852 -0.16777,-0.17421 -0.32669,-0.35673 -0.47627,-0.54678 z m 56.92523,62.03865 c -1.26593,-1.64435 -2.03295,-3.61769 -2.2098,-5.68534 -0.51057,-5.96132 3.9083,-11.20776 9.86964,-11.71803 5.96119,-0.50968 11.20686,3.90966 11.71653,9.87085 0.51057,5.96133 -3.90829,11.20777 -9.86964,11.71805 -3.67479,0.31411 -7.25693,-1.26301 -9.50673,-4.18553 z m 24.04781,26.17169 c -2.2489,-2.58131 -3.40339,-5.93738 -3.21846,-9.35594 0.39335,-7.25859 6.59709,-12.8236 13.85562,-12.42905 7.25739,0.3948 12.82073,6.59793 12.42631,13.85533 -0.39401,7.25749 -6.59661,12.82153 -13.8541,12.42783 -3.55151,-0.19333 -6.87353,-1.81592 -9.20937,-4.49817 z M 460.5592,667.28518 c -2.53883,-2.84857 -2.92598,-7.01874 -0.95493,-10.286 2.48379,-4.11525 7.83348,-5.43762 11.94854,-2.95352 4.11505,2.48324 5.43803,7.83213 2.95503,11.94732 -2.48324,4.11504 -7.83212,5.43803 -11.94731,2.95503 -0.74666,-0.45085 -1.42131,-1.0114 -2.00133,-1.66283 z m 27.47595,32.39992 c -0.13354,-0.15917 -0.26155,-0.32292 -0.3834,-0.49122 -2.85197,-3.94132 -1.96916,-9.44832 1.97189,-12.30067 3.94133,-2.85197 9.44833,-1.96915 12.30068,1.97189 2.85326,3.94128 1.97093,9.44938 -1.97067,12.3022 -3.74617,2.71023 -8.95019,2.06297 -11.91832,-1.48235 z m -73.05216,-99.9147 c -1.71562,-2.24991 -2.61964,-5.01403 -2.56505,-7.8429 0.13408,-6.92169 5.85376,-12.42424 12.77546,-12.29045 6.9217,0.13407 12.42425,5.85376 12.29046,12.77547 -0.13408,6.92169 -5.85376,12.42424 -12.77546,12.29045 -3.8246,-0.0742 -7.40602,-1.89061 -9.72541,-4.93257 z m 29.43558,34.16664 c -2.19311,-2.6598 -2.9326,-6.23042 -1.9762,-9.54246 1.60029,-5.54207 7.3903,-8.73754 12.93238,-7.13731 5.54208,1.60029 8.73755,7.39029 7.13732,12.93238 -1.60029,5.54207 -7.39029,8.73755 -12.93238,7.13732 -2.0227,-0.58401 -3.82171,-1.76562 -5.16112,-3.38993 z m 69.70483,72.8261 c -0.37218,-0.48257 -0.7024,-0.9961 -0.98719,-1.53487 -2.76572,-5.22378 -0.77294,-11.70055 4.45094,-14.46607 5.22443,-2.76509 11.70123,-0.77103 14.46576,4.45369 2.7645,5.22374 0.77128,11.69948 -4.45217,14.46454 -4.60375,2.43705 -10.29351,1.20545 -13.47734,-2.91729 z m -27.55784,-43.65366 c -3.1946,-3.88492 -3.21018,-9.48258 -0.0371,-13.38514 3.68309,-4.53024 10.34109,-5.21747 14.87189,-1.53508 4.5316,3.68284 5.21945,10.34205 1.5363,14.87341 -3.68338,4.53191 -10.34348,5.21912 -14.87463,1.53478 -0.54718,-0.44484 -1.04847,-0.94332 -1.49641,-1.48797 z m 58.63976,57.81499 c -1.06005,-1.21393 -1.8851,-2.61443 -2.43318,-4.13 -2.44311,-6.75186 1.04963,-14.2059 7.80138,-16.64931 6.75266,-2.44378 14.20775,1.04988 16.65054,7.8029 2.44311,6.75187 -1.04963,14.20589 -7.80138,16.6493 -5.04305,1.82528 -10.6894,0.36661 -14.21736,-3.67289 z M 472.87323,620.45902 c -2.80764,-3.69426 -3.37494,-8.62644 -1.47934,-12.86167 2.8624,-6.39649 10.36811,-9.26157 16.76471,-6.39942 6.3965,2.86239 9.26159,10.36811 6.39943,16.76472 -2.86193,6.39782 -10.3689,9.26367 -16.76624,6.40065 -1.94075,-0.86876 -3.63206,-2.21131 -4.91856,-3.90428 z m 45.78004,42.23403 c -3.98528,-5.2571 -3.34,-12.67844 1.4928,-17.16883 5.19739,-4.82832 13.32491,-4.52885 18.15287,0.66889 4.82789,5.19682 4.52911,13.32337 -0.66737,18.15164 -5.19739,4.82833 -13.32492,4.52885 -18.15288,-0.66889 -0.29131,-0.31366 -0.56682,-0.64166 -0.82543,-0.9828 z"
+ id="path45821"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccscccccccccccccccccccccccccccscccccccccccccscccccscccccccccccccccccccccccccccccccccccccccscccccccsccccscccccccccccccccccccccccsccccscsccccccccccccccsccccccccscccsscccccccccccccccccccccccccscsccsccccscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccssccscccccsccccsccccccccccccccccccccccccccccccccsccccsccccscccscccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccsscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsscccsccccscccccccccccccccccccccccccccccccscccssscsccccccccccccccsccccccccccccccccssscsccccscccccccccscccccccccccccc" />
+ <path
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d=""
+ id="path54483"
+ inkscape:connector-curvature="0"
+ transform="translate(0,452.36216)" />
+ <path
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 446.49318,561.34265 c -0.29563,0.0542 -0.59144,0.098 -0.88672,0.15692 -25.79016,5.14867 -87.89844,24.62342 -87.89844,24.62342 76.93842,-1.32265 89.82678,-0.0807 95.64062,8.30915 3.43335,4.95467 -1.45662,11.82573 -21.95117,15.50807 -22.31219,4.0089 -68.71875,8.99571 -68.71875,8.99571 -44.5297,3.13684 -75.91009,3.57706 -85.16797,24.55868 -6.04831,13.70751 6.74815,25.67877 12.37305,33.19149 23.73629,27.26589 57.83769,41.79731 79.79883,52.52461 8.26321,4.0362 32.47656,11.58887 32.47656,11.58887 -71.01583,-3.52004 -122.05321,19.76197 -151.89648,46.33393 -33.73014,33.24127 -18.41273,72.41573 51.36718,96.04565 41.21482,13.95678 61.65316,20.51162 122.93165,14.22128 36.10362,-2.33537 41.80642,-1.1663 42.18945,1.93999 0.53907,4.37338 -40.00615,15.5771 -51.07227,19.02317 -18.05502,5.62243 -54.7165,14.92781 -78.92187,20.93765 a 196.41905,197.26698 0 0 0 17.53125,5.08043 c 2.49441,-0.19217 5.03527,-0.40727 7.65429,-0.67085 11.07305,-1.11431 53.1118,-5.7901 84.51172,-13.2817 0,0 38.28567,-8.9253 58.74414,-17.02042 8.58318,-3.39759 15.57032,-6.58111 21.22461,-9.82151 a 196.41905,197.26698 0 0 0 16.98633,-16.2515 c -0.0586,-2.45011 1.01271,-9.10758 -8.37305,-13.14832 -25.39181,-10.93152 -54.72998,-8.67923 -112.82226,-9.49981 -64.42866,-1.7993 -85.93871,-12.93469 -97.41992,-21.95178 -11.01351,-9.15264 -5.69927,-34.76483 41.0332,-57.66584 23.53592,-12.1842 115.98242,-35.06675 115.98242,-35.06675 -31.30818,-15.92015 -89.67555,-43.88093 -101.67578,-49.92357 -10.52484,-5.29966 -27.36473,-13.27014 -31.07422,-23.05024 -4.19322,-9.38379 9.61145,-17.61011 17.33789,-19.99612 24.8835,-7.74892 60.05565,-12.72461 92.09375,-13.51121 16.1041,-0.39515 18.70899,-1.50254 18.70899,-1.50254 22.19458,-4.04764 36.70726,-20.1177 30.42578,-45.32961 -0.91003,-4.13686 -2.42872,-7.99001 -4.43946,-11.52807 a 196.41905,197.26698 0 0 0 -56.69335,-23.81918 z"
+ id="path54245-1"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="layer4"
+ inkscape:label="assets"
+ style="display:none"
+ transform="translate(425.49973,15.529223)">
+ <g
+ style="display:inline"
+ id="g55068"
+ transform="matrix(-1.4449173,-1.0202092,1.0202092,-1.4449173,147.03069,2572.2755)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path54337"
+ d="m 943.19308,860.02418 c -5.52072,-2.71967 -8.38031,-10.23022 -6.1343,-16.11132 3.98883,-10.44461 18.73157,-11.56273 23.71294,-1.79844 1.59043,3.11751 1.91703,9.06835 0.63468,11.56436 -1.17306,2.28328 -4.24535,5.42169 -6.41922,6.55738 -2.57737,1.34647 -8.85979,1.23356 -11.7941,-0.21198 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54339"
+ d="m 988.5309,812.78574 c -4.71897,-2.8922 -7.15933,-8.79513 -5.77984,-13.98072 1.65476,-6.22035 6.36503,-9.85353 12.71098,-9.80437 12.40346,0.0961 17.29136,15.58985 7.31816,23.19682 -3.79092,2.89147 -10.0685,3.15063 -14.2493,0.58827 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54341"
+ d="m 1013.2306,752.94331 c -8.3555,-4.13587 -9.3864,-15.79139 -1.9017,-21.50029 3.8433,-2.93145 9.7671,-3.28061 13.9608,-0.8229 4.0012,2.34483 6.2067,6.27743 6.2067,11.06714 0,9.76778 -9.4757,15.60704 -18.2658,11.25605 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54343"
+ d="m 1014.8794,690.13627 c -7.0707,-1.61307 -11.6255,-8.91675 -9.6574,-15.48566 1.7639,-5.8873 6.3378,-9.2855 12.4982,-9.2855 6.7817,0 12.362,5.58589 12.362,12.37437 0,7.74751 -7.7788,14.09049 -15.2028,12.39679 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54345"
+ d="m 985.75798,631.46397 c -9.41908,-4.2764 -8.96063,-18.95758 0.70637,-22.6203 2.83202,-1.07303 7.98729,-0.93283 10.33468,0.28105 4.54417,2.3499 7.73327,8.55628 6.84087,13.3132 -1.051,5.60247 -6.62238,10.38066 -12.09506,10.37312 -1.55564,-0.002 -4.15972,-0.60833 -5.78686,-1.34707 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54347"
+ d="m 939.23335,588.83564 c -4.16364,-2.41864 -6.14464,-6.27028 -5.83149,-11.33805 0.66388,-10.74344 13.06292,-15.5017 20.64275,-7.92188 5.48743,5.48743 4.61686,14.12149 -1.91147,18.95749 -3.00619,2.2269 -9.33159,2.3752 -12.89979,0.30244 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54349"
+ d="m 883.43127,569.17141 c -4.43863,-1.32824 -8.2055,-6.67182 -8.2055,-11.64008 0,-7.77274 7.86263,-13.81901 15.17486,-11.66929 5.41607,1.59228 8.87435,6.20492 8.85514,11.81095 -0.0286,8.3368 -7.71817,13.92423 -15.8245,11.49842 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54351"
+ d="m 821.83921,572.15032 c -3.37686,-1.59719 -4.87889,-3.17748 -6.33699,-6.66721 -1.46679,-3.51051 -1.36916,-5.86306 0.3945,-9.50629 2.16433,-4.47091 6.48829,-6.85367 11.65912,-6.42487 6.3548,0.52699 10.21827,4.3598 10.74032,10.65507 0.7714,9.30199 -8.22991,15.83451 -16.45695,11.9433 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54353"
+ d="m 767.14396,598.40459 c -5.75703,-2.83651 -7.97686,-11.39098 -4.33506,-16.70584 5.26822,-7.68846 16.40248,-7.08321 20.58698,1.11911 2.80903,5.50615 0.44031,12.88975 -5.04517,15.7264 -2.69333,1.39278 -8.23669,1.32369 -11.20675,-0.13967 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54355"
+ d="m 728.51553,643.28322 c -4.04356,-2.34941 -6.15216,-6.30481 -5.8237,-10.92434 1.00019,-14.0669 21.60615,-14.45925 22.9535,-0.43705 0.66681,6.93953 -3.77303,12.24678 -10.65448,12.73607 -2.86521,0.20372 -4.27317,-0.0952 -6.47532,-1.37468 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54357"
+ d="m 711.14873,699.09217 c -3.49189,-1.84656 -6.33569,-6.3526 -6.33569,-10.03898 0,-3.68639 2.8438,-8.19243 6.33569,-10.03898 3.87287,-2.04802 6.65589,-2.05776 10.65891,-0.0373 8.3379,4.20843 8.3379,15.9441 0,20.15254 -4.00302,2.02047 -6.78604,2.01073 -10.65891,-0.0373 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54359"
+ d="m 716.19177,756.46769 c -4.07615,-2.79693 -5.36832,-5.13546 -5.36832,-9.71542 0,-3.39464 0.33774,-4.51185 2.03775,-6.74069 6.63571,-8.69986 20.30856,-4.36848 20.43985,6.47508 0.08,6.60887 -3.97182,10.88486 -10.7641,11.35956 -3.24874,0.22705 -4.35577,-0.0134 -6.34518,-1.37853 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54361"
+ d="m 743.60388,806.67509 c -3.76469,-2.18301 -5.8086,-6.21198 -5.38544,-10.61585 0.41662,-4.33582 2.15228,-6.82311 6.20703,-8.89499 3.91651,-2.00124 5.94341,-2.00124 9.91199,0 4.12003,2.07761 6.5777,6.52097 6.10687,11.04094 -0.83526,8.01856 -9.82312,12.53901 -16.84045,8.4699 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54363"
+ d="m 788.60519,842.16434 c -3.96562,-2.06101 -5.53578,-4.52085 -5.86155,-9.18279 -0.30321,-4.33899 1.1817,-7.3693 4.9957,-10.19491 2.72332,-2.01759 8.90787,-2.01759 11.6312,0 3.35165,2.48308 5.14455,5.77842 5.14455,9.45567 0,8.23132 -8.71066,13.66363 -15.9099,9.92203 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54365"
+ d="m 843.05241,857.44561 c -10.86737,-5.02742 -7.64233,-20.96066 4.24264,-20.96066 10.97348,0 14.91555,13.32273 5.91441,19.9885 -2.38375,1.76528 -7.40396,2.24578 -10.15705,0.97216 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54367"
+ d="m 898.91385,850.57636 c -6.52768,-2.07473 -9.63575,-9.82122 -6.25977,-15.60171 5.64799,-9.67068 20.03668,-5.99698 20.04571,5.11804 0.006,7.1622 -7.1397,12.59608 -13.78594,10.48367 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54369"
+ d="m 881.56946,885.24925 c -5.01396,-2.98857 -7.79827,-9.42127 -6.37143,-14.72013 0.95832,-3.55895 4.46932,-7.74105 7.59538,-9.04721 5.57063,-2.32755 13.00544,-0.13238 16.27257,4.80457 3.82523,5.78032 2.48908,13.80422 -2.99527,17.98734 -3.61542,2.75762 -10.71056,3.23487 -14.50125,0.97543 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54371"
+ d="m 816.56926,885.76681 c -6.10693,-1.94685 -10.23596,-9.67016 -8.53902,-15.97214 0.95176,-3.53457 4.4705,-7.71728 7.58803,-9.01986 2.73776,-1.14391 7.84179,-1.24261 10.59433,-0.20486 2.8621,1.07906 6.42933,4.76168 7.36823,7.60657 2.26936,6.87623 -0.37483,13.59125 -6.5669,16.67689 -3.91177,1.94931 -6.48839,2.17464 -10.44467,0.9134 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54373"
+ d="m 755.72015,859.18974 c -8.41007,-2.70504 -12.5105,-10.43242 -9.59156,-18.07555 5.05393,-13.23354 24.37,-10.74464 26.30733,3.38974 0.6342,4.62697 -2.21798,10.3932 -6.33383,12.80508 -3.31009,1.9397 -7.71671,2.73798 -10.38194,1.88073 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54375"
+ d="m 705.86055,808.62949 c -2.90534,-1.26594 -6.46415,-5.47339 -7.47042,-8.83199 -1.79829,-6.00219 1.32622,-13.29928 6.87106,-16.0469 4.33794,-2.14957 10.08072,-1.81946 13.84449,0.79581 8.64871,6.00959 8.00156,19.19447 -1.1598,23.6294 -3.41694,1.65412 -8.86126,1.8585 -12.08533,0.45368 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54377"
+ d="m 681.12496,743.3836 c -4.97775,-2.63012 -7.62665,-7.03474 -7.62665,-12.68172 0,-14.60484 20.39951,-18.93577 26.45007,-5.6155 3.16429,6.96617 -0.43517,16.09905 -7.37896,18.7226 -2.90003,1.0957 -8.99437,0.86918 -11.44446,-0.42538 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54379"
+ d="m 684.6605,673.48746 c -5.49141,-2.95295 -8.13173,-7.19914 -8.13173,-13.07756 0,-12.57689 14.83017,-18.58446 23.78112,-9.63352 6.34822,6.34822 5.41524,16.57511 -1.95721,21.45397 -3.64435,2.41172 -10.39282,3.03131 -13.69218,1.25711 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54381"
+ d="m 943.01005,821.3188 c -2.56226,-1.7411 -4.85177,-5.99761 -4.85177,-9.02009 0,-2.94568 2.7362,-7.32132 5.57641,-8.91761 7.17978,-4.03526 15.90875,0.86604 15.90875,8.93272 0,8.71535 -9.49491,13.8557 -16.63339,9.00498 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54383"
+ d="m 980.4521,780.14048 c 0.51044,-0.20426 1.12032,-0.17914 1.35529,0.0558 0.23496,0.23497 -0.18267,0.40209 -0.92808,0.37139 -0.82374,-0.0339 -0.99129,-0.20148 -0.42721,-0.42721 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54385"
+ d="m 976.33101,778.60712 c -7.31633,-3.8879 -7.60571,-14.08978 -0.52576,-18.53553 3.00724,-1.88835 8.56466,-1.58679 11.68345,0.63398 2.77628,1.97689 4.74896,6.92762 4.11242,10.32069 -0.88558,4.72053 -5.96407,8.89015 -10.82798,8.89015 -1.08806,0 -3.08702,-0.58918 -4.44213,-1.30929 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54387"
+ d="m 990.3007,727.29512 c -5.24011,-1.88601 -7.20682,-5.03789 -6.73016,-10.78587 1.08729,-13.11128 20.33476,-12.07229 20.34606,1.0983 0.01,7.18821 -6.90271,12.10377 -13.6159,9.68757 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54389"
+ d="m 980.16841,674.63461 c -3.75578,-2.29025 -5.24112,-4.79646 -5.23592,-8.83453 0.0142,-11.02788 14.2224,-14.46059 19.30257,-4.66352 4.49293,8.66459 -5.79844,18.53996 -14.06665,13.49805 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54391"
+ d="m 952.19668,630.70621 c -3.2812,-1.73359 -5.90278,-6.75057 -5.27185,-10.08885 1.72016,-9.10141 11.7027,-11.96475 18.04488,-5.1759 2.55819,2.73836 2.86752,8.43177 0.63784,11.73988 -3.15358,4.6789 -8.54468,6.09587 -13.41087,3.52487 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54393"
+ d="m 910.7725,601.75108 c -4.20255,-1.90773 -6.00251,-5.01384 -5.6522,-9.75374 0.44345,-6.00021 5.05887,-9.83205 11.03172,-9.15883 2.61235,0.29445 3.71739,0.90074 5.89323,3.23336 2.32816,2.49591 2.67765,3.31329 2.67535,6.25708 -0.004,4.45837 -2,7.67644 -5.84559,9.42213 -3.71546,1.68662 -4.38706,1.68662 -8.10251,0 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54395"
+ d="m 860.55771,591.37016 c -3.08511,-1.5209 -5.13093,-5.00435 -5.13093,-8.73654 0,-10.63621 13.83543,-13.65334 18.80552,-4.10098 4.19653,8.06561 -5.28967,16.97113 -13.67459,12.83752 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54397"
+ d="m 811.57513,601.1152 c -6.73926,-3.60346 -6.73926,-13.56072 0,-17.16418 6.63267,-3.54646 14.1441,0.96481 14.15052,8.49863 0.007,7.61509 -7.50838,12.21708 -14.15052,8.66555 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54399"
+ d="m 770.16382,628.7184 c -1.19785,-0.75355 -2.70929,-2.48989 -3.35875,-3.85854 -5.08159,-10.70864 9.09064,-19.30772 16.43439,-9.97165 1.08184,1.37534 1.47664,2.89434 1.47664,5.68136 0,3.32597 -0.29642,4.12757 -2.35837,6.37755 -2.04956,2.23645 -2.85972,2.61061 -6.18718,2.8574 -2.92205,0.21673 -4.3446,-0.0405 -6.00673,-1.08612 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54401"
+ d="m 743.91502,669.63638 c -6.92533,-4.22262 -5.28447,-14.7153 2.67406,-17.09973 7.54552,-2.2607 14.59407,6.39862 10.94784,13.44966 -2.43364,4.70614 -9.00293,6.46642 -13.6219,3.65007 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54403"
+ d="m 738.37405,718.33556 c -5.77,-1.63099 -8.50657,-9.11901 -5.14175,-14.06928 2.04686,-3.01131 4.31041,-4.2288 7.88764,-4.24251 3.71888,-0.0143 6.57804,1.85801 8.31418,5.44441 3.50674,7.24396 -3.22941,15.08086 -11.06007,12.86738 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54405"
+ d="m 760.91164,690.28232 c -5.31741,-2.63209 -5.934,-10.0378 -1.12107,-13.46491 2.44956,-1.74424 6.22868,-1.92094 8.47195,-0.39614 2.95159,2.00628 4.13533,4.22955 3.88857,7.30338 -0.2591,3.22756 -1.44182,4.97441 -4.38689,6.47926 -2.73286,1.39642 -4.15694,1.41272 -6.85256,0.0784 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54407"
+ d="m 778.58407,654.33647 c -3.18016,-1.00686 -5.31067,-4.1609 -5.30779,-7.85773 0.008,-9.70164 14.55315,-10.40467 15.84598,-0.76588 0.74129,5.52676 -5.13399,10.33462 -10.53819,8.62361 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54409"
+ d="m 785.42369,672.87886 c -5.58409,-3.50844 -3.10176,-12.04995 3.50195,-12.04995 1.9835,0 4.81155,1.74119 5.70912,3.51501 0.3437,0.67925 0.62823,2.19455 0.63228,3.36734 0.006,1.72255 -0.31087,2.4796 -1.64864,3.93936 -1.38223,1.50828 -2.0642,1.84232 -4.125,2.02049 -1.87548,0.16216 -2.85378,-0.0283 -4.06971,-0.79225 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54411"
+ d="m 807.29142,647.45314 c -3.27047,-1.64982 -4.71403,-6.47287 -2.80802,-9.3818 1.1126,-1.69804 3.69437,-3.23822 5.43207,-3.24056 7.10926,-0.01 9.49071,9.40877 3.1546,12.47603 -2.57856,1.24826 -3.54571,1.27275 -5.77865,0.14633 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54413"
+ d="m 807.52441,626.34526 c -5.00772,-2.60365 -6.00815,-8.85819 -2.05,-12.81635 5.41917,-5.41916 14.40728,-1.19594 13.67496,6.42542 -0.55394,5.76499 -6.52023,9.04502 -11.62496,6.39093 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54415"
+ d="m 846.25442,612.67754 c -2.96682,-1.56889 -4.64435,-4.66568 -4.33948,-8.01087 0.38724,-4.2491 3.23362,-6.91015 7.72775,-7.22462 2.40563,-0.16832 3.16325,-0.008 4.58575,0.96761 2.51996,1.72912 3.65913,3.55421 3.90545,6.25701 0.30487,3.34519 -1.37266,6.44198 -4.33949,8.01087 -2.75352,1.4561 -4.78646,1.4561 -7.53998,0 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54417"
+ d="m 888.77441,615.96815 c -2.94987,-1.10844 -5.47804,-4.7494 -5.47804,-7.88924 0,-2.25214 1.65497,-5.45186 3.49896,-6.76489 2.14193,-1.52519 6.2132,-1.90684 8.3813,-0.78567 6.28705,3.25116 6.32296,11.8314 0.0631,15.06852 -1.39052,0.71906 -4.98967,0.92575 -6.46528,0.37128 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54419"
+ d="m 925.99962,634.65332 c -3.51959,-1.59699 -5.7156,-6.14636 -4.73133,-9.80167 1.97342,-7.32873 11.71571,-8.65997 15.40017,-2.10436 3.0767,5.47425 -0.37503,12.01774 -6.55512,12.42661 -1.50327,0.0995 -3.22834,-0.11884 -4.11372,-0.52058 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54421"
+ d="m 952.73525,666.69201 c -5.17704,-3.4888 -5.39563,-10.90676 -0.41845,-14.2005 3.82078,-2.52847 8.12101,-2.01325 11.14638,1.33546 5.06242,5.6035 1.17447,14.00194 -6.48203,14.00194 -1.8336,0 -3.03701,-0.32223 -4.2459,-1.1369 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54423"
+ d="m 966.49962,708.62561 c -2.03967,-0.88842 -4.07896,-3.3967 -4.73133,-5.81943 -0.75268,-2.79524 0.14101,-5.7298 2.4473,-8.03609 5.31942,-5.31943 13.83201,-2.19886 14.45374,5.2985 0.17797,2.14603 -0.009,3.07719 -0.95648,4.76296 -2.17663,3.8728 -7.16076,5.55921 -11.21323,3.79406 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54425"
+ d="m 963.09304,752.61974 c -4.08861,-1.50673 -6.13033,-4.87098 -5.69646,-9.38636 0.63817,-6.6416 8.32054,-9.86161 13.95533,-5.84928 2.06536,1.47066 3.59538,5.06489 3.29406,7.73818 -0.63755,5.6563 -6.40047,9.39624 -11.55293,7.49746 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54427"
+ d="m 942.17009,791.83471 c -3.49973,-1.05497 -6.40768,-4.94397 -6.3847,-8.53866 0.0129,-2.01643 1.44165,-5.35649 2.81171,-6.57307 1.40303,-1.24586 4.4022,-2.39407 6.25339,-2.39407 3.85475,0 7.85025,3.41845 8.67903,7.42555 1.2622,6.10266 -5.28396,11.91166 -11.35943,10.08025 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54429"
+ d="m 906.27798,819.53242 c -3.68816,-1.59939 -5.50357,-4.30379 -5.50357,-8.1986 0,-3.46429 1.43886,-6.1339 4.16809,-7.73334 6.83671,-4.00658 15.36745,2.16902 13.3493,9.66386 -0.70732,2.62678 -2.72103,4.97748 -5.2467,6.12474 -2.44422,1.11026 -4.43995,1.15253 -6.76712,0.14334 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54431"
+ d="m 862.02441,831.54262 c -3.4625,-1.80082 -5.25,-4.58084 -5.25,-8.1651 0,-3.53949 1.92133,-6.68254 5.10017,-8.34325 1.73739,-0.90765 6.06228,-0.90765 7.79966,0 5.51175,2.87948 6.84393,10.04208 2.69336,14.48122 -2.56804,2.7466 -7.21043,3.65644 -10.34319,2.02713 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54433"
+ d="m 815.88597,825.26962 c -2.26963,-1.12345 -4.24076,-3.8804 -4.84308,-6.77387 -0.83781,-4.02478 2.4542,-9.01507 6.70158,-10.15877 2.42884,-0.65402 5.65071,-0.10721 7.84685,1.33175 3.02289,1.98067 4.54806,7.30577 3.15128,11.00263 -1.84626,4.88655 -7.90004,7.05172 -12.85663,4.59826 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54435"
+ d="m 775.64819,801.82221 c -4.57508,-2.48342 -6.15568,-9.00147 -3.24822,-13.39493 3.86859,-5.84584 12.80689,-5.32225 15.99867,0.93718 1.1546,2.26431 1.13013,6.25577 -0.0519,8.45973 -0.5102,0.95132 -1.75607,2.40017 -2.7686,3.21968 -2.44822,1.98151 -7.04909,2.34214 -9.93,0.77834 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54437"
+ d="m 749.09304,764.61912 c -2.37895,-0.87593 -4.71655,-3.01379 -5.63021,-5.14915 -1.44161,-3.36927 -0.42757,-8.45796 2.13338,-10.70576 2.71907,-2.38659 7.05752,-3.12588 10.32708,-1.75978 2.18774,0.9141 4.691,3.87296 5.35135,6.32533 1.88572,7.00301 -5.42413,13.77745 -12.1816,11.28936 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54439"
+ d="m 759.87868,729.99503 c -7.73953,-3.81446 -4.48279,-15.27744 4.13737,-14.56259 3.15303,0.26147 4.90113,1.4539 6.31233,4.30582 3.21793,6.50319 -3.89668,13.48646 -10.4497,10.25677 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54441"
+ d="m 777.58407,705.30662 c -6.97072,-2.06252 -5.62542,-12.5148 1.60371,-12.45999 2.7729,0.021 4.29999,0.77349 5.61346,2.766 3.16068,4.79468 -1.70181,11.32589 -7.21717,9.69399 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54443"
+ d="m 795.46847,688.33888 c -3.30907,-1.33702 -4.21666,-5.8497 -1.73507,-8.62708 1.2526,-1.40191 1.78886,-1.63289 3.79101,-1.63289 2.00215,0 2.53841,0.23098 3.79102,1.63289 2.50367,2.8021 1.79407,6.64247 -1.54654,8.36997 -1.60242,0.82864 -2.72045,0.89549 -4.30042,0.25711 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54445"
+ d="m 809.43491,664.54675 c -2.32063,-1.18018 -3.44117,-3.80935 -2.69085,-6.31368 1.21525,-4.05615 6.29707,-5.12584 9.15535,-1.92714 3.94001,4.40925 -1.17561,10.93054 -6.4645,8.24082 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54447"
+ d="m 829.23595,661.86737 c -4.04443,-4.04443 1.17603,-10.07726 5.66484,-6.54637 2.48872,1.95763 2.13118,5.83193 -0.67197,7.28149 -2.08811,1.0798 -3.36612,0.89164 -4.99287,-0.73512 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54449"
+ d="m 832.46356,648.61644 c -2.02806,-0.89044 -3.18915,-2.59491 -3.18915,-4.68165 0,-5.05408 5.36876,-7.49604 9.11711,-4.14689 1.3921,1.24384 1.63289,1.7954 1.63289,3.74038 0,1.87662 -0.26614,2.54084 -1.5,3.74363 -1.82701,1.78101 -3.97929,2.25847 -6.06085,1.34453 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54451"
+ d="m 837.43257,631.85722 c -6.41737,-2.91358 -4.23643,-12.52831 2.84184,-12.52831 7.1046,0 9.28309,9.60389 2.84184,12.52831 -2.59958,1.18025 -3.0841,1.18025 -5.68368,0 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54453"
+ d="m 870.58185,628.78477 c -6.63991,-5.22296 -0.2519,-15.5182 7.16173,-11.54222 4.45537,2.38944 4.67237,8.99035 0.38156,11.60661 -2.19212,1.33661 -5.80136,1.3058 -7.54329,-0.0644 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54455"
+ d="m 860.94074,642.9753 c -1.4961,-0.28317 -3.55976,-2.29768 -3.95113,-3.85706 -0.52322,-2.08467 0.20318,-4.65254 1.63464,-5.77853 2.64946,-2.08406 5.31864,-1.91925 7.71423,0.47635 3.73421,3.73421 -0.0584,10.16979 -5.39774,9.15924 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54457"
+ d="m 852.01229,654.64229 c -1.46198,-0.64796 -2.73788,-2.56409 -2.73788,-4.11173 0,-1.62086 1.52552,-3.63252 3.165,-4.17359 3.11463,-1.02792 5.835,0.94041 5.835,4.22194 0,3.43203 -3.11948,5.45621 -6.26212,4.06338 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54459"
+ d="m 846.00169,664.60164 c -0.675,-0.675 -1.22728,-1.56441 -1.22728,-1.97647 0,-1.47407 1.15253,-3.23812 2.47293,-3.78504 3.6839,-1.52592 6.76862,3.17837 3.86985,5.90163 -1.53509,1.44213 -3.58952,1.38586 -5.1155,-0.14012 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54461"
+ d="m 866.4321,663.82076 c -1.31722,-0.5251 -2.15769,-1.96983 -2.15769,-3.70898 0,-3.14827 4.46528,-4.50604 6.46371,-1.96544 1.33232,1.69377 1.3093,2.82651 -0.0887,4.36428 -1.33977,1.47373 -2.72639,1.90449 -4.21731,1.31014 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54463"
+ d="m 875.32945,655.63116 c -1.32921,-0.73672 -2.51023,-2.57626 -2.53732,-3.95208 -0.0342,-1.7357 1.44057,-3.75885 3.15157,-4.32353 4.80083,-1.58442 8.18224,4.17768 4.42282,7.53671 -1.74662,1.56061 -3.17618,1.77031 -5.03707,0.7389 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54465"
+ d="m 886.73314,646.93769 c -1.19765,-1.0701 -1.61806,-1.93254 -1.82139,-3.73649 -0.24509,-2.17441 -0.13586,-2.47376 1.49916,-4.10878 1.48086,-1.48087 2.1143,-1.76351 3.95225,-1.76351 4.69459,0 6.9565,3.9895 4.77251,8.41766 -1.38222,2.80253 -5.88471,3.44079 -8.40253,1.19112 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54467"
+ d="m 904.50812,640.33005 c -2.50015,-1.23758 -3.73427,-3.24767 -3.73184,-6.07828 0.006,-6.95 8.90126,-9.49272 12.55079,-3.58765 0.839,1.35752 1.01717,2.26222 0.82971,4.21309 -0.26915,2.80108 -1.63246,4.65452 -4.24131,5.76614 -2.15217,0.91703 -3.0239,0.86652 -5.40735,-0.3133 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54469"
+ d="m 911.15952,663.34586 c -2.65792,-2.09072 -3.03198,-6.26836 -0.75245,-8.40368 2.79266,-2.61599 6.18625,-2.41127 8.65451,0.52209 1.83972,2.18638 1.51353,5.45463 -0.7459,7.47342 -1.94441,1.73733 -5.22828,1.92464 -7.15616,0.40817 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54473"
+ d="m 931.64467,664.10235 c -2.40628,-0.84341 -3.09586,-1.4353 -4.0742,-3.497 -1.01907,-2.14754 -1.00777,-3.92916 0.0389,-6.1349 2.33206,-4.91446 10.37644,-4.84765 12.44511,0.10335 2.43944,5.83842 -2.61124,11.56098 -8.40983,9.52855 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54475"
+ d="m 945.79142,695.95314 c -4.60677,-2.32393 -4.81982,-9.37696 -0.36773,-12.17417 2.23081,-1.4016 6.33762,-1.10367 8.15207,0.5914 2.00484,1.87293 2.84284,3.86517 2.5486,6.05897 -0.68871,5.1347 -5.7455,7.83797 -10.33294,5.5238 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54477"
+ d="m 927.12804,687.82109 c -0.70468,-0.5543 -1.54392,-1.80375 -1.86497,-2.77655 -2.02016,-6.12114 6.03739,-10.40412 10.02829,-5.33052 1.11908,1.42268 1.29773,4.3772 0.38571,6.37886 -1.22696,2.69288 -6.07638,3.6732 -8.54903,1.72821 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54479"
+ d="m 912.66198,684.04951 c -2.82114,-1.53098 -3.25479,-4.9303 -0.92603,-7.25906 3.64786,-3.64786 9.50204,0.29796 7.52468,5.07175 -0.64447,1.55589 -2.74336,2.98213 -4.33639,2.94669 -0.4949,-0.011 -1.51292,-0.35273 -2.26226,-0.75938 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54481"
+ d="m 919.52202,706.62197 c -3.25131,-3.25131 -1.11375,-8.29306 3.51602,-8.29306 2.07659,0 4.23637,2.49473 4.23637,4.89336 0,4.08744 -4.911,6.24109 -7.75239,3.3997 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54485"
+ d="m 947.00301,731.8974 c -4.04133,-2.46448 -4.71875,-8.01748 -1.36157,-11.16113 4.93079,-4.61718 12.75827,-0.8012 12.00813,5.85408 -0.57915,5.13816 -6.27094,7.97538 -10.64656,5.30705 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54487"
+ d="m 933.1557,717.54622 c -2.83886,-1.54035 -3.77488,-5.94643 -1.79734,-8.46047 3.66711,-4.66197 10.41605,-2.40331 10.41605,3.48592 0,4.37502 -4.71166,7.09449 -8.61871,4.97455 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54489"
+ d="m 934.99962,766.62561 c -2.65643,-1.15707 -4.22521,-3.51843 -4.22521,-6.35989 0,-3.07832 0.96691,-5.02578 3.1719,-6.38854 3.75936,-2.32341 8.59796,-0.82599 10.38499,3.21389 1.20764,2.73008 0.89031,5.12965 -0.97089,7.34157 -2.23958,2.66159 -5.38864,3.48756 -8.36079,2.19297 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54491"
+ d="m 926.87346,746.99251 c -2.03,-1.00044 -3.09905,-2.95887 -3.09905,-5.67723 0,-5.06857 6.89436,-7.38314 10.21986,-3.431 2.38765,2.83756 1.40554,7.55939 -1.8984,9.12721 -2.1427,1.01678 -3.12801,1.0132 -5.22241,-0.019 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54493"
+ d="m 918.96847,732.3578 c -1.58499,-0.66881 -3.19406,-2.98032 -3.19406,-4.58843 0,-0.8654 0.56876,-2.06124 1.44883,-3.04621 1.17396,-1.31388 1.826,-1.62152 3.43685,-1.62152 2.30779,0 3.49895,0.83069 4.44848,3.10227 0.57235,1.36923 0.57235,1.88077 0,3.25 -0.37359,0.89375 -1.0168,1.90492 -1.42936,2.24703 -1.03419,0.85762 -3.43998,1.19307 -4.71074,0.65686 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54495"
+ d="m 910.02441,793.58323 c -5.32954,-1.90095 -6.68772,-8.51037 -2.50371,-12.18398 1.88262,-1.65297 4.46954,-2.37556 6.59493,-1.84212 4.75249,1.1928 7.1607,6.91713 4.53378,10.77687 -2.27423,3.34154 -5.23698,4.45768 -8.625,3.24923 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54497"
+ d="m 908.71515,771.57737 c -1.44464,-0.78508 -2.94178,-3.49727 -2.93887,-5.32402 0.003,-1.87809 1.86331,-4.41913 3.83991,-5.24501 2.57333,-1.07521 4.74406,-0.53315 6.67586,1.66705 1.44636,1.64731 1.57165,2.04842 1.35243,4.32982 -0.19436,2.02277 -0.54894,2.78893 -1.81372,3.91901 -1.79389,1.60284 -4.85159,1.88351 -7.11561,0.65315 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54499"
+ d="m 876.52441,808.82215 c -3.94412,-0.84485 -5.98233,-3.68483 -5.6366,-7.85387 0.20757,-2.50308 0.45065,-3.00407 2.29005,-4.71985 1.83667,-1.71322 2.33569,-1.91952 4.64317,-1.91952 4.45536,0 7.62283,3.00145 7.61747,7.21822 -0.006,4.83373 -4.22752,8.27891 -8.91409,7.27502 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54501"
+ d="m 883.17261,788.02814 c -2.34174,-0.99607 -4.07209,-4.20477 -3.58388,-6.6458 0.41851,-2.09255 2.78237,-4.43245 4.87431,-4.8249 2.27903,-0.42755 5.06263,0.83922 6.29856,2.86638 3.11185,5.10405 -2.05249,10.95933 -7.58899,8.60432 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54503"
+ d="m 836.39484,808.33161 c -5.03785,-3.07161 -4.72059,-10.68037 0.5496,-13.18124 6.49865,-3.08381 13.26037,3.87057 9.90417,10.18634 -2.00888,3.78035 -6.87774,5.17523 -10.45377,2.9949 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54505"
+ d="m 851.99874,792.55318 c -3.48063,-1.71778 -4.32353,-6.43755 -1.68613,-9.44138 2.65182,-3.02025 6.52419,-2.88574 9.22193,0.32033 2.34731,2.78962 1.33611,7.52538 -1.93867,9.07936 -2.12401,1.00791 -3.61682,1.01903 -5.59713,0.0417 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54507"
+ d="m 801.3835,793.99737 c -4.6672,-2.30037 -5.47203,-8.86822 -1.53159,-12.49875 3.4678,-3.19507 9.65585,-2.09886 11.62943,2.06014 3.20627,6.75671 -3.50082,13.69015 -10.09784,10.43861 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54509"
+ d="m 774.46398,766.61062 c -0.85825,-0.37353 -2.20021,-1.51792 -2.98215,-2.54309 -1.82214,-2.38896 -2.00677,-6.4234 -0.39358,-8.60087 2.59931,-3.50855 6.66133,-4.58918 10.19397,-2.71194 5.39635,2.86762 5.3814,10.67655 -0.0258,13.44919 -2.48442,1.27395 -4.51986,1.39583 -6.79249,0.40671 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54511"
+ d="m 779.86929,737.15248 c -2.83348,-1.57234 -3.96487,-5.94649 -2.27711,-8.80365 1.67691,-2.83877 5.60657,-3.8604 8.6986,-2.26145 3.95559,2.04551 3.95559,8.93755 0,10.98307 -1.77467,0.91771 -4.84485,0.95694 -6.42149,0.082 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54513"
+ d="m 791.93087,715.2438 c -5.08127,-1.36211 -4.64755,-9.21464 0.56294,-10.19214 3.01401,-0.56543 6.2806,2.17932 6.2806,5.27725 0,3.34003 -3.45692,5.82272 -6.84354,4.91489 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54515"
+ d="m 799.04525,741.42723 c -2.75671,-0.59619 -4.66626,-3.59874 -3.99348,-6.27931 0.96658,-3.85117 5.93144,-5.18713 8.7611,-2.35747 2.7622,2.7622 1.49198,7.45369 -2.28846,8.45231 -0.825,0.21793 -1.94062,0.30094 -2.47916,0.18447 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54517"
+ d="m 795.19651,764.70143 c -1.79535,-1.51767 -2.4221,-2.91231 -2.4221,-5.38965 0,-1.69488 0.31118,-2.39405 1.67053,-3.7534 2.11882,-2.11882 3.93552,-2.58669 6.53117,-1.68201 4.91654,1.71358 5.73493,8.50223 1.33808,11.09951 -2.09677,1.2386 -5.48222,1.10806 -7.11768,-0.27445 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54519"
+ d="m 814.46847,762.3578 c -2.62292,-1.10678 -4.0209,-5.04966 -2.67924,-7.55658 0.69089,-1.29094 3.07953,-2.47231 4.99881,-2.47231 4.01837,0 6.08603,5.78035 3.09328,8.64757 -1.54868,1.48374 -3.80536,2.05963 -5.41285,1.38132 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54521"
+ d="m 820.72335,784.18563 c -3.31341,-2.22971 -3.56726,-6.81565 -0.53302,-9.62916 3.84376,-3.56414 10.08408,-0.7309 10.08408,4.5784 0,1.22872 -0.36993,2.79382 -0.82425,3.48719 -1.8288,2.79111 -5.8358,3.50904 -8.72681,1.56357 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54523"
+ d="m 835.73595,773.86737 c -2.82324,-2.82324 -1.46255,-7.61775 2.36575,-8.33595 3.73582,-0.70084 6.66668,2.25764 5.96133,6.01749 -0.70941,3.78148 -5.52366,5.12188 -8.32708,2.31846 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54525"
+ d="m 862.42569,777.73039 c -1.53081,-0.7396 -2.79761,-3.59699 -2.3991,-5.4114 0.17674,-0.80467 1.02506,-2.05518 1.88515,-2.77891 3.21242,-2.70307 7.86267,-0.42299 7.86267,3.85518 0,3.77869 -3.82731,6.03648 -7.34872,4.33513 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54527"
+ d="m 887.57176,770.57751 c -2.06715,-1.09554 -2.76325,-2.21454 -2.78145,-4.47124 -0.0119,-1.4732 0.32427,-2.32769 1.32765,-3.375 2.56567,-2.67798 7.57743,-1.32151 8.25728,2.23491 0.78171,4.08928 -3.3091,7.46328 -6.80348,5.61133 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54529"
+ d="m 905.73595,753.36737 c -1.91567,-1.91566 -1.97819,-4.34773 -0.16709,-6.50009 1.04586,-1.24294 1.67631,-1.53837 3.28287,-1.53837 2.62638,0 3.85758,0.72206 4.71004,2.7623 0.691,1.65378 0.6248,2.43213 -0.38763,4.55747 -1.20151,2.5223 -5.24399,2.91289 -7.43819,0.71869 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54531"
+ d="m 812.45229,677.64371 c -1.83958,-1.58234 -1.90894,-4.32281 -0.15288,-6.03984 2.89191,-2.82761 7.475,-1.00355 7.475,2.97504 0,3.80256 -4.34842,5.62266 -7.32212,3.0648 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54533"
+ d="m 829.27441,673.82891 c -2.16409,-2.16409 -0.56579,-6 2.5,-6 0.83334,0 1.94445,0.44445 2.5,1 2.16409,2.16409 0.5658,6 -2.5,6 -0.83333,0 -1.94444,-0.44444 -2.5,-1 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54535"
+ d="m 817.50169,688.60164 c -1.3451,-1.34509 -1.47567,-2.05431 -0.73624,-3.99914 1.05358,-2.77114 5.31559,-2.65464 6.48865,0.17737 1.54761,3.73626 -2.88981,6.68438 -5.75241,3.82177 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54537"
+ d="m 804.20244,699.09092 c -2.85387,-1.594 -2.75801,-6.04857 0.16268,-7.55891 4.20326,-2.17359 8.38936,2.99105 5.28429,6.51956 -1.39305,1.58301 -3.68918,2.02115 -5.44697,1.03935 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54539"
+ d="m 897.91648,666.43724 c -1.58451,-0.24799 -3.64207,-2.89483 -3.64207,-4.68515 0,-2.06924 2.39185,-4.42318 4.49441,-4.42318 2.11611,0 3.33982,0.7291 4.28213,2.55132 1.77037,3.42352 -1.16927,7.17761 -5.13447,6.55701 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54541"
+ d="m 885.22695,669.64891 c -2.87622,-1.43395 -3.1445,-5.17793 -0.47012,-6.5609 1.94219,-1.00435 2.62852,-0.95905 4.20015,0.27719 1.39809,1.09974 1.75257,3.21639 0.82799,4.94399 -0.72342,1.35172 -3.12065,2.05633 -4.55802,1.33972 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54543"
+ d="m 898.77162,681.4618 c -2.5971,-3.30168 1.74449,-8.0269 5.04612,-5.49199 3.13918,2.41019 1.78712,6.8591 -2.08453,6.8591 -1.45952,0 -2.12949,-0.30926 -2.96159,-1.36711 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54545"
+ d="m 909.77441,700.9708 c -0.4125,-0.14804 -1.25625,-0.72975 -1.875,-1.29268 -3.038,-2.76395 0.62215,-7.56606 4.6026,-6.03862 1.1965,0.45914 2.34113,2.99149 1.98804,4.3983 -0.51339,2.0455 -2.95576,3.56459 -4.71564,2.933 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54547"
+ d="m 909.71498,720.82556 c -0.44519,-0.26012 -1.08427,-1.13647 -1.42019,-1.94744 -1.26104,-3.04444 1.75261,-6.09923 4.9258,-4.99305 1.8026,0.62839 2.55382,1.75319 2.55382,3.82381 0,2.7305 -3.5741,4.56884 -6.05943,3.11668 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54549"
+ d="m 902.64249,740.20391 c -2.14642,-1.62993 -2.03799,-4.99886 0.21162,-6.57454 3.80803,-2.66725 8.10924,2.55508 4.90956,5.96098 -1.28658,1.3695 -3.73881,1.6633 -5.12118,0.61356 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54551"
+ d="m 888.88889,755.99427 c -0.84106,-0.3384 -2.11448,-2.84567 -2.11448,-4.16325 0,-1.64957 2.19004,-3.50211 4.14012,-3.50211 3.59494,0 5.33532,4.76684 2.54245,6.96371 -1.24425,0.97873 -3.15137,1.27166 -4.56809,0.70165 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54553"
+ d="m 870.02441,764.76363 c -2.58894,-1.44733 -3.07765,-4.65252 -1.02272,-6.70744 1.7709,-1.77091 4.45751,-1.45133 6.13182,0.72939 2.22108,2.89288 -1.93309,7.75359 -5.1091,5.97805 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54555"
+ d="m 848.52441,765.27213 c -2.06379,-1.17129 -2.81884,-3.37906 -1.93941,-5.67082 0.37755,-0.98388 2.75188,-2.2724 4.18731,-2.2724 2.82434,0 4.56726,4.6063 2.6271,6.9431 -1.05849,1.2749 -3.5061,1.77703 -4.875,1.00012 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54557"
+ d="m 827.45229,756.64371 c -1.04929,-0.90257 -1.37788,-1.63343 -1.37788,-3.0648 0,-1.43136 0.32859,-2.16223 1.37788,-3.06479 1.59,-1.36766 2.7976,-1.48213 4.78636,-0.4537 2.42849,1.25582 2.83169,4.51802 0.80849,6.54122 -1.58068,1.58068 -3.78682,1.59727 -5.59485,0.0421 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54559"
+ d="m 811.50169,741.10164 c -2.35381,-2.35381 -0.88717,-6.40805 2.55671,-7.06756 1.19954,-0.22971 1.88089,-0.002 3.125,1.04498 1.91754,1.6135 2.13369,3.9251 0.55472,5.93242 -1.42014,1.80542 -4.47699,1.84961 -6.23643,0.0902 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54561"
+ d="m 804.43878,721.59592 c -2.74174,-1.18553 -3.49079,-4.08152 -1.65827,-6.41119 0.55335,-0.70347 1.66192,-1.42308 2.4635,-1.59914 1.65287,-0.36303 4.22922,0.73727 4.71981,2.01572 1.51994,3.96089 -1.82791,7.59326 -5.52504,5.99461 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54922"
+ d="m 839.56959,752.11809 c -2.68878,-1.24095 -2.71913,-5.03243 -0.0512,-6.4006 0.77356,-0.39671 2.19446,-0.44295 3.01793,-0.0982 0.80086,0.33527 1.85102,1.55912 1.99461,2.3245 0.066,0.35156 0.0818,1.03561 0.0353,1.52011 -0.21347,2.22156 -2.87297,3.6343 -4.99657,2.6542 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54924"
+ d="m 825.63048,741.66412 c -0.74966,-0.2247 -1.59555,-0.85751 -2.06807,-1.54711 -0.59348,-0.86613 -0.69148,-2.54965 -0.20379,-3.50089 0.67356,-1.31378 1.80518,-2.01836 3.24168,-2.01836 1.82408,0 3.30275,1.24501 3.60526,3.03554 0.4211,2.49251 -2.14997,4.75772 -4.57508,4.03082 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54926"
+ d="m 815.88,725.78279 c -3.61574,-1.6426 -2.44983,-6.96973 1.5267,-6.97561 3.23874,-0.005 4.83143,3.8748 2.53392,6.17231 -1.13377,1.13378 -2.66595,1.43688 -4.06062,0.8033 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54928"
+ d="m 814.0686,707.73174 c -1.30908,-0.31062 -2.5556,-1.66161 -2.78479,-3.01817 -0.18574,-1.09944 0.30567,-2.4771 1.15839,-3.24748 0.89775,-0.81107 1.35523,-0.98623 2.57572,-0.98623 2.10933,0 3.60364,1.50271 3.60364,3.62392 0,1.72639 -1.12214,3.19809 -2.75127,3.60831 -0.84956,0.21392 -0.97708,0.21531 -1.80169,0.0196 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54930"
+ d="m 822.14181,713.21561 c -1.8388,-0.55725 -2.67914,-2.7407 -1.71503,-4.45611 1.48241,-2.63759 5.6194,-1.52278 5.6194,1.51428 0,2.01701 -1.99526,3.52038 -3.90437,2.94183 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54932"
+ d="m 823.83647,697.85733 c -1.26536,-0.60133 -1.85867,-1.53399 -1.85325,-2.91325 0.0106,-2.70747 3.59072,-3.99349 5.33765,-1.91737 0.93666,1.11316 1.04392,2.46517 0.29254,3.68773 -0.75475,1.22805 -2.49172,1.75365 -3.77694,1.14289 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54934"
+ d="m 831.58214,684.40317 c -1.28918,-0.5853 -2.02293,-2.14897 -1.65302,-3.5227 0.39051,-1.45024 1.55453,-2.32092 3.10284,-2.32092 3.14822,0 4.17314,4.21651 1.40588,5.78383 -0.86217,0.48832 -1.86556,0.50933 -2.8557,0.0598 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54936"
+ d="m 844.15825,675.0585 c -1.70945,-1.07506 -2.15603,-2.99578 -1.07599,-4.62783 1.08872,-1.64518 3.62981,-1.74322 4.93637,-0.19047 1.20888,1.43668 0.98627,3.40151 -0.51512,4.54668 -0.85147,0.64945 -2.52801,0.78558 -3.34526,0.27162 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54938"
+ d="m 860.38746,671.66952 c -1.37599,-0.32565 -2.41622,-1.71385 -2.39698,-3.19879 0.0322,-2.48722 2.80021,-3.96471 4.84548,-2.5864 1.21526,0.81896 1.75466,2.14338 1.40373,3.44664 -0.45821,1.70164 -2.16511,2.73784 -3.85223,2.33855 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54940"
+ d="m 875.8015,674.17129 c -1.10127,-0.51548 -2.02364,-1.85917 -2.02364,-2.94798 0,-0.55613 0.44065,-1.59174 0.89979,-2.11467 1.50171,-1.71035 4.28642,-1.3632 5.264,0.65622 1.32159,2.73003 -1.44071,5.66999 -4.14015,4.40643 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54942"
+ d="m 880.67018,684.18433 c -1.68142,-1.133 -1.58589,-3.66488 0.17211,-4.56174 1.29123,-0.65874 2.68509,-0.30172 3.51165,0.89946 0.34591,0.5027 0.40168,0.76815 0.34162,1.62621 -0.0628,0.89725 -0.15203,1.10571 -0.71377,1.66745 -0.56174,0.56174 -0.77019,0.65097 -1.66745,0.71376 -0.85784,0.06 -1.12657,0.004 -1.64416,-0.34514 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54944"
+ d="m 889.77418,683.12958 c -1.35266,-0.49486 -2.35602,-2.16242 -2.1366,-3.55094 0.34713,-2.19663 2.79671,-3.47866 4.69819,-2.45889 1.59214,0.85387 2.23559,2.83824 1.43144,4.4145 -0.70173,1.37551 -2.56216,2.1188 -3.99303,1.59533 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54946"
+ d="m 898.78979,696.64995 c -1.20385,-0.63608 -1.85616,-1.68254 -1.85616,-2.97773 0,-1.829 1.43223,-3.26863 3.25182,-3.26863 0.99159,0 1.64613,0.2434 2.28824,0.85093 0.74754,0.70729 1.00068,1.31933 1.00068,2.41943 0,0.54441 -0.11222,1.20464 -0.24938,1.46719 -0.33485,0.64094 -1.14123,1.38482 -1.75087,1.61516 -0.71953,0.27186 -2.06978,0.21837 -2.68433,-0.10635 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54948"
+ d="m 902.94404,713.3825 c -0.83974,-0.14829 -1.26725,-0.40261 -1.91286,-1.13792 -1.71951,-1.95841 -0.62241,-4.91951 2.03065,-5.48073 1.2112,-0.25621 2.8865,0.64949 3.54042,1.91403 0.36135,0.69879 0.36135,2.17383 0,2.87261 -0.37097,0.71737 -1.42137,1.62651 -2.02627,1.75377 -0.86613,0.18222 -1.00538,0.18889 -1.63194,0.0782 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54950"
+ d="m 898.994,729.92049 c -2.90615,-1.03619 -2.95468,-5.15958 -0.0749,-6.36284 2.18164,-0.91155 4.60577,0.75074 4.60577,3.1583 0,1.4277 -0.81681,2.60574 -2.21034,3.18785 -0.7969,0.33288 -1.42113,0.33737 -2.32054,0.0167 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54952"
+ d="m 889.06555,744.00069 c -2.50186,-1.17152 -2.75895,-4.49123 -0.46932,-6.06012 0.50565,-0.34647 0.84404,-0.426 1.81268,-0.426 1.0386,0 1.28702,0.0678 1.94175,0.53033 2.63552,1.86165 1.54337,5.9998 -1.64221,6.22234 -0.65556,0.0458 -1.14567,-0.0337 -1.6429,-0.26655 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54954"
+ d="m 887.36079,734.06426 c -0.89505,-0.47287 -1.4058,-1.36146 -1.41432,-2.46059 -0.009,-1.14976 0.50061,-1.98786 1.5037,-2.47345 0.9545,-0.46206 1.5722,-0.46206 2.52669,0 0.99133,0.4799 1.51749,1.33366 1.51749,2.46233 0,2.15008 -2.22456,3.48027 -4.13356,2.47171 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54956"
+ d="m 874.48299,753.40781 c -2.3824,-1.03194 -2.95423,-3.84431 -1.14875,-5.64979 1.74995,-1.74995 4.40279,-1.29679 5.50675,0.94066 0.36982,0.74953 0.44265,1.10524 0.37354,1.8244 -0.21899,2.27906 -2.6741,3.7759 -4.73154,2.88473 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54958"
+ d="m 876.599,743.3924 c -1.07745,-0.54431 -1.58568,-1.3517 -1.58568,-2.51907 0,-1.18451 0.51172,-1.98024 1.6305,-2.53544 0.65295,-0.32403 0.9885,-0.3881 1.54242,-0.29452 1.57195,0.26558 2.55356,1.48251 2.4384,3.02294 -0.0841,1.12433 -0.6383,1.94282 -1.61635,2.387 -0.95253,0.43258 -1.45771,0.41981 -2.40929,-0.0609 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54960"
+ d="m 857.46008,756.44301 c -0.99458,-0.26744 -1.80661,-0.96962 -2.26416,-1.95787 -1.22277,-2.64107 1.24477,-5.52543 4.09455,-4.78621 2.02924,0.52638 3.16152,2.75497 2.36725,4.6593 -0.41387,0.99228 -1.2766,1.78063 -2.2722,2.07629 -1.01242,0.30066 -0.84164,0.29991 -1.92544,0.008 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54962"
+ d="m 863.36777,748.02803 c -2.36579,-0.54117 -3.02067,-3.74158 -1.0524,-5.1431 0.85562,-0.60926 2.3463,-0.66736 3.1478,-0.12269 0.9219,0.62649 1.41842,1.46961 1.41842,2.40854 0,1.87104 -1.71801,3.26804 -3.51382,2.85725 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54964"
+ d="m 848.18573,746.42233 c -1.00815,-0.49903 -1.50257,-1.23299 -1.59691,-2.37062 -0.23583,-2.84387 2.97379,-4.26345 4.94916,-2.18896 1.09899,1.15414 1.11822,2.66896 0.0489,3.85257 -0.56768,0.62836 -1.53639,1.08022 -2.31508,1.07989 -0.18317,-8e-5 -0.6719,-0.16787 -1.08607,-0.37288 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54966"
+ d="m 835.10426,739.35126 c -1.14521,-0.56686 -1.54507,-1.24807 -1.54507,-2.63218 0,-1.38824 0.45545,-2.16061 1.5735,-2.66837 0.91638,-0.41617 1.59347,-0.41617 2.50985,0 1.11805,0.50776 1.5735,1.28013 1.5735,2.66837 0,1.38824 -0.45545,2.16061 -1.5735,2.66837 -0.9468,0.42998 -1.61578,0.42044 -2.53828,-0.0362 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54968"
+ d="m 825.502,727.47829 c -0.94293,-0.63544 -1.40047,-1.45161 -1.39971,-2.49681 10e-4,-2.00555 1.80234,-3.44899 3.67419,-2.94495 2.07473,0.55866 2.90917,2.80042 1.72073,4.62284 -0.79678,1.22185 -2.7908,1.63057 -3.99521,0.81892 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54970"
+ d="m 829.13977,716.59119 c -0.87305,-0.53928 -1.19525,-1.02605 -1.28289,-1.93813 -0.1542,-1.6048 0.84752,-2.68079 2.49693,-2.68206 0.76175,-5.8e-4 0.93792,0.0768 1.53533,0.67419 0.75579,0.75578 0.96671,1.34175 0.80097,2.2252 -0.30469,1.62416 -2.21098,2.54811 -3.55034,1.7208 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54972"
+ d="m 828.78622,703.84082 c -1.10114,-0.72467 -1.46176,-2.22719 -0.79645,-3.31838 1.13438,-1.86055 3.65669,-1.65879 4.49311,0.35939 0.34381,0.82959 0.34381,0.84134 0,1.67092 -0.44834,1.08178 -1.24978,1.63983 -2.35279,1.63825 -0.51145,-7.3e-4 -1.01047,-0.13076 -1.34387,-0.35018 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54974"
+ d="m 834.44307,692.40071 c -1.0803,-0.28679 -1.85615,-1.34325 -1.85615,-2.52746 0,-1.45221 1.03215,-2.47546 2.49573,-2.47421 1.47236,10e-4 2.51018,1.08103 2.51203,2.61357 0.002,1.51692 -1.66775,2.78202 -3.15161,2.3881 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54976"
+ d="m 842.62905,682.65386 c -0.64515,-0.60178 -0.73625,-0.78699 -0.80439,-1.63518 -0.0636,-0.79172 -0.005,-1.06314 0.34017,-1.57525 0.47879,-0.71037 1.40656,-1.23676 2.18049,-1.23716 0.74393,-3.9e-4 1.6892,0.54423 2.17851,1.25512 0.34236,0.49742 0.40027,0.76529 0.33665,1.55729 -0.0681,0.84819 -0.15925,1.0334 -0.8044,1.63518 -0.66353,0.61894 -0.81431,0.67866 -1.71351,0.67866 -0.89921,0 -1.04999,-0.0597 -1.71352,-0.67866 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54978"
+ d="m 855.56789,678.4347 c -0.84814,-0.31004 -1.59133,-1.4661 -1.59033,-2.47383 0.002,-1.86853 2.05753,-3.07771 3.81473,-2.24386 1.70884,0.8109 1.82719,3.50258 0.19769,4.49614 -0.54509,0.33236 -1.80396,0.44751 -2.42209,0.22155 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54980"
+ d="m 869.07282,678.90426 c -2.1323,-0.63998 -2.47804,-3.59421 -0.55766,-4.76509 1.7976,-1.096 4.17939,0.37679 3.96507,2.45183 -0.17358,1.68069 -1.81108,2.79237 -3.40741,2.31326 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54982"
+ d="m 874.00814,686.34652 c -0.72584,-0.44257 -0.93936,-0.86077 -0.93936,-1.83977 0,-2.00596 2.48678,-2.88028 3.78934,-1.33227 0.53628,0.63734 0.62629,1.95371 0.1774,2.59459 -0.64066,0.91467 -2.0374,1.18108 -3.02738,0.57745 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54984"
+ d="m 877.02648,693.94264 c -0.20534,-0.083 -0.54342,-0.36707 -0.7513,-0.63135 -1.14982,-1.46175 0.60166,-3.50717 2.26613,-2.64644 1.99972,1.03409 0.57295,4.12135 -1.51483,3.27779 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54986"
+ d="m 882.84428,693.66148 c -1.44277,-0.73556 -1.63873,-2.63572 -0.38097,-3.69405 0.77322,-0.65063 2.06036,-0.63303 2.80966,0.0384 0.98347,0.88129 0.99146,2.35836 0.0178,3.29118 -0.64493,0.61789 -1.65442,0.76827 -2.44649,0.36446 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54988"
+ d="m 890.60232,694.64982 c -1.64111,-0.39327 -2.51673,-2.56366 -1.62459,-4.02688 1.38344,-2.26903 5.01869,-1.30543 5.01869,1.33031 0,1.84303 -1.61189,3.12366 -3.3941,2.69657 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54990"
+ d="m 888.18319,703.84674 c -1.60494,-0.66384 -1.75254,-3.21645 -0.23148,-4.00302 1.62342,-0.83951 3.32507,0.1931 3.32507,2.01773 0,1.47547 -1.69554,2.56356 -3.09359,1.98529 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54992"
+ d="m 894.45026,707.32935 c -1.79251,-1.20798 -1.64791,-3.88014 0.25679,-4.74516 0.39819,-0.18084 0.96263,-0.32924 1.25431,-0.32978 1.42695,-0.003 2.85498,1.63669 2.67563,3.0715 -0.24215,1.93724 -2.60626,3.06852 -4.18673,2.00344 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54994"
+ d="m 893.56638,721.29471 c -1.71686,-1.15699 -1.70776,-3.52614 0.0181,-4.69902 0.50185,-0.34106 0.78186,-0.40193 1.58947,-0.34549 3.61015,0.25227 3.41932,5.44286 -0.20011,5.44286 -0.55417,0 -1.00612,-0.12792 -1.40741,-0.39835 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54996"
+ d="m 888.86673,715.17716 c -0.82952,-0.52132 -1.12549,-1.05419 -1.12549,-2.02639 0,-0.74086 0.0827,-0.94487 0.5871,-1.44933 1.50714,-1.50713 3.83232,-0.58339 3.83232,1.5225 0,0.74025 -0.0882,0.9692 -0.58059,1.50645 -0.73988,0.80734 -1.849,0.98997 -2.71334,0.44677 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path54998"
+ d="m 884.16151,710.71874 c -0.81186,-0.47286 -1.07503,-1.93705 -0.48337,-2.68924 0.98202,-1.24842 2.99969,-0.81982 3.28438,0.69769 0.13254,0.70651 -0.17707,1.55866 -0.69919,1.92437 -0.42165,0.29534 -1.64307,0.33438 -2.10182,0.0672 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55000"
+ d="m 880.20296,707.72919 c -0.96184,-0.38815 -1.23682,-1.67228 -0.51309,-2.39601 0.98228,-0.98228 2.5713,-0.36714 2.5713,0.99541 0,0.52062 -0.11524,0.75754 -0.5439,1.11823 -0.56876,0.47858 -0.88293,0.53717 -1.51431,0.28237 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55002"
+ d="m 879.64999,715.56434 c -0.2989,-0.12027 -0.74758,-1.00702 -0.74758,-1.4775 0,-0.58026 0.93269,-1.40939 1.58543,-1.40939 1.25694,0 1.93332,1.75402 1.01063,2.62083 -0.39069,0.36704 -1.27954,0.49497 -1.84848,0.26606 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55004"
+ d="m 882.68333,720.2906 c -0.20533,-0.0875 -0.55118,-0.38446 -0.76854,-0.65994 -0.31209,-0.39552 -0.37756,-0.65885 -0.31131,-1.25207 0.0995,-0.8905 0.3628,-1.25017 1.15898,-1.58298 1.19149,-0.49804 2.50391,0.41216 2.50391,1.73652 0,1.26935 -1.43625,2.24711 -2.58304,1.75847 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55006"
+ d="m 885.80967,726.4993 c -2.2365,-0.34431 -2.41309,-3.854 -0.22359,-4.44357 1.79173,-0.48246 3.43643,1.16799 2.87105,2.88109 -0.35859,1.08655 -1.4717,1.74348 -2.64746,1.56248 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55008"
+ d="m 877.72382,735.28748 c -1.14185,-0.3302 -1.92396,-1.89924 -1.48044,-2.97 0.59012,-1.42468 2.19767,-2.00938 3.36614,-1.22434 0.8312,0.55845 1.31096,1.55466 1.15333,2.39488 -0.13938,0.74296 -1.11555,1.81685 -1.65153,1.81685 -0.19622,0 -0.46271,0.0325 -0.5922,0.0722 -0.12949,0.0397 -0.48737,-6e-4 -0.7953,-0.0896 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55010"
+ d="m 877.39981,728.4187 c -0.19446,-0.0804 -0.5221,-0.33392 -0.7281,-0.56332 -1.14242,-1.27214 -0.22743,-3.15712 1.53249,-3.15712 0.77185,0 1.75887,0.98702 1.75887,1.75887 0,0.82449 -0.47306,1.594 -1.15511,1.87898 -0.67285,0.28113 -0.89644,0.29425 -1.40815,0.0826 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55012"
+ d="m 875.97907,722.52778 c -0.6335,-0.54491 -0.67283,-1.53149 -0.086,-2.15618 0.57496,-0.61203 1.6164,-0.61784 2.22184,-0.0124 1.36845,1.36844 -0.66541,3.43343 -2.13588,2.16858 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55014"
+ d="m 866.71738,740.30727 c -2.2613,-1.18565 -1.54021,-4.47384 0.98057,-4.47141 1.27815,10e-4 2.36667,1.11165 2.36496,2.41254 -0.002,1.59589 -1.94642,2.79245 -3.34553,2.05887 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55016"
+ d="m 868.5433,733.28961 c -1.27905,-1.27904 -0.37298,-3.21496 1.48011,-3.16243 0.50974,0.0145 0.77715,0.15863 1.24889,0.67338 0.53488,0.58367 0.58958,0.73466 0.50218,1.38641 -0.135,1.00672 -0.91561,1.70368 -1.90815,1.70368 -0.58539,0 -0.83571,-0.11372 -1.32303,-0.60104 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55018"
+ d="m 870.3148,728.16022 c -1.50671,-0.65738 -1.02148,-2.94068 0.6218,-2.926 0.94636,0.008 1.60185,0.67805 1.60185,1.63632 0,0.42629 -0.71325,1.36326 -1.03776,1.36326 -0.0939,0 -0.27671,0.0369 -0.40619,0.0819 -0.12949,0.0451 -0.48035,-0.0249 -0.7797,-0.15552 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55020"
+ d="m 854.59561,740.81374 c -2.22131,-1.04951 -1.4936,-4.44953 0.95192,-4.44755 1.93345,0.002 3.10961,1.90637 2.14945,3.48107 -0.69995,1.14796 -1.91551,1.52676 -3.10137,0.96648 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55022"
+ d="m 859.1589,735.49955 c -0.71253,-0.44599 -0.93936,-0.87199 -0.93936,-1.7642 0,-1.24289 1.15659,-2.09437 2.39622,-1.7641 1.43091,0.38123 1.9066,2.11758 0.86538,3.1588 -0.7044,0.7044 -1.56773,0.84177 -2.32224,0.3695 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55024"
+ d="m 862.03595,730.34155 c -0.86261,-1.02514 -0.34694,-2.36424 0.99255,-2.57746 0.56569,-0.09 0.72794,-0.031 1.19324,0.43431 1.06746,1.06746 0.44766,2.68705 -1.0283,2.68705 -0.56446,0 -0.78837,-0.10521 -1.15749,-0.5439 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55026"
+ d="m 854.41884,730.19181 c -1.09694,-0.46078 -1.38863,-1.79878 -0.57051,-2.61691 0.99478,-0.99477 2.67415,-0.30344 2.67415,1.10084 0,1.04483 -1.18772,1.90081 -2.10364,1.51607 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55028"
+ d="m 849.63087,733.46308 c -1.58552,-0.69172 -1.73632,-2.78138 -0.25596,-3.54691 0.86475,-0.44718 1.55619,-0.34411 2.23318,0.33288 0.50522,0.50522 0.60104,0.7277 0.60104,1.39552 0,0.63273 -0.10442,0.90625 -0.51287,1.3435 -0.28207,0.30197 -0.63354,0.54903 -0.78103,0.54903 -0.1475,0 -0.37412,0.0369 -0.5036,0.0819 -0.12949,0.0451 -0.48083,-0.0251 -0.78076,-0.15596 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55030"
+ d="m 843.48388,736.71409 c -1.45784,-0.43687 -2.14315,-2.19037 -1.3588,-3.47675 1.31291,-2.15323 4.42439,-1.3404 4.42653,1.15637 8.7e-4,1.00652 -0.44148,1.72081 -1.33292,2.15235 -0.78354,0.3793 -0.96965,0.39733 -1.73481,0.16803 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55032"
+ d="m 834.57513,728.28575 c -0.65245,-0.12562 -1.59082,-1.14111 -1.72746,-1.86943 -0.16973,-0.90477 0.003,-1.44867 0.70347,-2.21283 0.56697,-0.61868 0.65879,-0.65427 1.68743,-0.65427 1.02863,0 1.12045,0.0356 1.68742,0.65427 0.32978,0.35985 0.65062,0.85756 0.71298,1.10602 0.2968,1.18254 -0.50877,2.59826 -1.66047,2.91813 -0.67,0.18609 -0.72649,0.18843 -1.40337,0.0581 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55034"
+ d="m 835.94931,718.84412 c -0.68711,-0.27415 -1.05076,-0.68691 -1.24689,-1.41531 -0.36275,-1.34716 0.54752,-2.45326 2.01893,-2.45326 1.12173,0 1.87597,0.75424 1.87597,1.87597 0,0.95766 -0.40371,1.6247 -1.1795,1.94884 -0.66566,0.27813 -0.86613,0.2841 -1.46851,0.0438 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55036"
+ d="m 841.16059,727.53635 c -0.61218,-0.25056 -1.011,-0.85183 -1.1023,-1.66184 -0.0793,-0.70367 -0.0271,-0.84928 0.51709,-1.44315 0.4964,-0.54166 0.73318,-0.66386 1.31594,-0.67914 0.90245,-0.0237 1.60614,0.43057 1.95297,1.26065 0.68447,1.63818 -0.99298,3.21548 -2.6837,2.52348 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55038"
+ d="m 846.74851,726.21934 c -0.46339,-0.25684 -0.88727,-0.90899 -0.89708,-1.38018 -0.0197,-0.94783 1.03488,-1.84192 1.9385,-1.64345 0.58953,0.12948 1.41399,1.00864 1.41399,1.5078 0,0.57688 -0.40515,1.24979 -0.90952,1.51061 -0.59762,0.30905 -0.9953,0.31039 -1.54589,0.005 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55040"
+ d="m 841.08576,719.46764 c -0.75652,-0.63657 -0.76799,-1.64354 -0.0272,-2.38437 0.65876,-0.65876 1.38465,-0.67897 2.12135,-0.0591 0.45286,0.38106 0.5439,0.58554 0.5439,1.22172 0,0.63619 -0.091,0.84067 -0.5439,1.22173 -0.30636,0.25779 -0.76364,0.45765 -1.04709,0.45765 -0.28345,0 -0.74073,-0.19986 -1.0471,-0.45765 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55042"
+ d="m 839.21703,711.58905 c -0.68074,-0.18206 -1.14119,-0.797 -1.14611,-1.53068 -0.005,-0.80013 0.27371,-1.25633 0.93842,-1.53406 1.172,-0.4897 2.31999,0.25328 2.31999,1.50149 0,1.17576 -0.9453,1.87535 -2.1123,1.56325 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55044"
+ d="m 833.71829,708.01054 c -0.50047,-0.50046 -0.60104,-0.73053 -0.60104,-1.37488 0,-0.88361 0.32693,-1.44535 1.06261,-1.82578 0.66399,-0.34337 1.32648,-0.33482 1.93555,0.025 0.98386,0.58118 1.31978,1.71582 0.80354,2.71412 -0.38043,0.73568 -0.94217,1.06261 -1.82578,1.06261 -0.64435,0 -0.87442,-0.10057 -1.37488,-0.60104 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55046"
+ d="m 836.88709,698.2858 c -0.30865,-0.13889 -0.69735,-0.46036 -0.86379,-0.71438 -0.35136,-0.53623 -0.39615,-1.62291 -0.0904,-2.19413 0.26799,-0.50075 1.21024,-1.08309 1.75387,-1.08396 0.65355,-10e-4 1.51686,0.48799 1.84645,1.04594 0.48973,0.82906 0.39235,1.68872 -0.27294,2.40927 -0.67148,0.72727 -1.52266,0.91997 -2.37314,0.53726 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55048"
+ d="m 839.55192,702.53047 c -0.57607,-0.57607 -0.63447,-0.71683 -0.54099,-1.304 0.13571,-0.85244 0.81437,-1.45372 1.6408,-1.45372 0.84961,0 1.28873,0.27299 1.58685,0.9865 0.21459,0.51359 0.21646,0.69089 0.0124,1.17901 -0.30984,0.74124 -0.64624,1.00965 -1.4235,1.13578 -0.5541,0.0899 -0.70742,0.0246 -1.27558,-0.54357 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55050"
+ d="m 844.31229,695.27241 c -0.66962,-0.29128 -0.942,-0.74322 -0.942,-1.56299 0,-1.27176 1.30748,-2.05336 2.44816,-1.46349 0.6508,0.33654 0.9106,0.76764 0.9106,1.51101 0,0.72959 -0.43078,1.35033 -1.0987,1.58317 -0.66262,0.23099 -0.62724,0.2328 -1.31806,-0.0677 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55052"
+ d="m 843.45868,689.88138 c -0.77705,-0.32141 -1.23743,-1.05192 -1.23743,-1.96351 0,-0.72992 0.0848,-0.95108 0.53909,-1.40534 1.34269,-1.34268 3.61516,-0.45248 3.61516,1.41618 0,1.47347 -1.55638,2.51539 -2.91682,1.95267 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55054"
+ d="m 850.9568,689.55789 c -0.95043,-0.8492 -0.69739,-2.30735 0.48622,-2.8019 1.7625,-0.73642 3.19392,1.42375 1.84037,2.77731 -0.69586,0.69586 -1.56503,0.70505 -2.32659,0.0246 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55056"
+ d="m 852.91624,684.62189 c -0.96069,-0.35119 -1.56483,-1.6232 -1.23935,-2.60941 0.66473,-2.01416 3.49484,-1.99906 4.05278,0.0216 0.45265,1.63936 -1.2141,3.17243 -2.81343,2.58779 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55058"
+ d="m 860.055,687.64882 c -1.02157,-0.50397 -1.25825,-1.8034 -0.49392,-2.71175 0.88436,-1.05101 2.66179,-0.58665 3.00614,0.78536 0.1781,0.70961 -0.33516,1.64242 -1.07344,1.95089 -0.74719,0.31219 -0.75662,0.31203 -1.43878,-0.0245 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55060"
+ d="m 863.40154,683.16454 c -0.72146,-0.4399 -0.93936,-0.8607 -0.93936,-1.814 0,-0.87787 0.32823,-1.43997 1.06261,-1.81973 1.47819,-0.7644 3.18003,0.22949 3.18003,1.85716 0,1.69253 -1.8284,2.67587 -3.30328,1.77657 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55062"
+ d="m 868.63576,688.64942 c -0.85793,-0.85794 -0.67892,-2.2127 0.36362,-2.75181 0.82308,-0.42564 1.38601,-0.33409 2.05414,0.33405 0.66814,0.66813 0.75968,1.23106 0.33405,2.05414 -0.53911,1.04253 -1.89388,1.22155 -2.75181,0.36362 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55064"
+ d="m 877.03822,700.04595 c -0.91128,-0.91128 -0.23764,-2.46523 1.06869,-2.46523 0.50607,0 0.76447,0.11617 1.08357,0.48715 0.48354,0.56215 0.52401,0.9891 0.16041,1.69224 -0.444,0.8586 -1.59736,1.00115 -2.31267,0.28584 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path55066"
+ d="m 881.89402,701.20056 c -0.4129,-0.4129 -0.51674,-0.67141 -0.51674,-1.28649 0,-0.97318 0.36071,-1.49052 1.2184,-1.74749 1.23763,-0.3708 2.31714,0.46912 2.31714,1.80289 0,0.72017 -0.26217,1.16116 -0.88035,1.48083 -0.82078,0.42444 -1.54936,0.33936 -2.13845,-0.24974 z"
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715533;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ </g>
+ <path
+ style="color:#000000;fill:#59509f;fill-opacity:0.99215686;fill-rule:nonzero;stroke:none;stroke-width:1.19700003;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -530.45039,253.75092 c 5.30707,-1.91678 11.21951,-1.07383 15.77945,2.24972 6.38683,4.67105 8.49739,13.29908 5.38115,20.57227 12.14398,11.00811 25.39824,20.45943 39.88974,28.11784 3.68734,-6.41948 11.5721,-9.83951 18.78293,-8.16326 9.02961,2.10252 14.64463,11.12745 12.54091,20.15677 -0.0896,0.35677 -0.19093,0.71049 -0.30378,1.0606 15.57369,5.04379 31.71723,8.11936 48.05451,9.15505 -1.01104,-8.7225 4.95288,-16.72102 13.60117,-18.24127 9.02229,-1.57386 17.61208,4.46455 19.18548,13.48693 0.23908,1.41366 0.29382,2.85238 0.16284,4.28012 16.62401,-1.6842 32.96491,-5.48438 48.6262,-11.30833 -0.33933,-0.41747 -0.65852,-0.8509 -0.95541,-1.29955 -4.91386,-7.59756 -2.73772,-17.74012 4.86036,-22.65318 7.59692,-4.91331 17.73846,-2.73794 22.65196,4.85885 1.08924,1.69488 1.85648,3.57615 2.26323,5.54937 9.13587,-5.12543 17.84673,-10.97404 26.04911,-17.48978 4.92512,-4.05567 9.64954,-8.34908 14.15644,-12.86493 -0.7586,-0.35369 -1.48864,-0.7657 -2.18351,-1.23232 -7.39953,-5.01207 -9.3356,-15.0733 -4.32456,-22.47351 5.01174,-7.40089 15.0742,-9.33762 22.47503,-4.32579 1.78793,1.21147 3.31531,2.76856 4.49212,4.5795 9.86282,-13.43645 17.9739,-28.07453 24.13738,-43.56082 -0.68657,-0.0382 -1.36996,-0.12057 -2.04592,-0.24672 -8.66506,-1.70098 -14.31034,-10.10459 -12.60879,-18.76953 1.70158,-8.66385 10.10398,-14.30823 18.76801,-12.60757 1.88133,0.3763 3.67957,1.08815 5.30871,2.1015 3.50739,-15.83095 5.03944,-32.03554 4.56115,-48.24332 -0.2772,0.0764 -0.55644,0.14512 -0.83739,0.20623 -8.53607,1.79747 -16.91306,-3.66524 -18.71053,-12.20131 -1.79747,-8.53607 3.66525,-16.91306 12.20133,-18.71053 1.41178,-0.29142 2.85682,-0.3882 4.29486,-0.28765 -2.93469,-15.4206 -7.70875,-30.43344 -14.21986,-44.71674 -7.05457,4.60498 -16.49076,2.77874 -21.31784,-4.12577 -4.93035,-7.06855 -3.19668,-16.795623 3.87217,-21.725553 0.83185,-0.57788 1.71803,-1.07333 2.64593,-1.47943 -3.46207,-5.27744 -7.17669,-10.3848 -11.13091,-15.30428 -5.68959,-6.93614 -11.84801,-13.47404 -18.43199,-19.56769 -4.82679,6.34987 -13.70035,7.96905 -20.45875,3.73318 -7.21117,-4.52518 -9.38873,-14.03929 -4.86378,-21.2506 0.40059,-0.6274 0.84611,-1.22495 1.33305,-1.78798 -12.41641,-8.42207 -25.75757,-15.39266 -39.76209,-20.7752 -1.80346,4.47435 -5.64318,7.8125 -10.32487,8.97615 -8.06632,1.99539 -16.22285,-2.92647 -18.21758,-10.99296 -0.54302,-2.22521 -0.57078,-4.54503 -0.0812,-6.7826 -14.85942,-3.19105 -30.03921,-4.64532 -45.2342,-4.3336 1.86804,8.01264 -3.04689,16.03973 -11.03281,18.01887 -8.06632,1.99539 -16.22284,-2.92647 -18.21758,-10.99296 -0.3548,-1.44099 -0.49445,-2.92656 -0.4144,-4.40843 -15.14883,2.61374 -29.93813,6.99823 -44.06378,13.06328 0.62478,0.58648 1.19766,1.22589 1.71226,1.91109 4.92654,6.56452 3.59952,15.87973 -2.96416,20.80739 -6.56446,4.92784 -15.88078,3.60131 -20.80891,-2.96294 -1.51864,-2.0258 -2.49452,-4.40601 -2.83521,-6.91481 -7.42416,4.43358 -14.54721,9.35296 -21.32258,14.72598 -6.17316,5.08504 -12.02978,10.5426 -17.53702,16.34224 2.42068,0.0763 4.78493,0.75011 6.88208,1.96152 7.01434,4.06792 9.4034,13.05153 5.33636,20.06639 -4.06754,7.0157 -13.05241,9.40546 -20.06792,5.33758 -3.72641,-2.16811 -6.31166,-5.86438 -7.07005,-10.10839 -37.96812,49.553573 -50.09792,114.214013 -32.67095,174.159273 2.96174,1.46395 5.43916,3.74997 7.136,6.58472 2.83741,4.75705 3.21007,10.58949 1.00115,15.66897 6.89206,16.19628 15.93154,31.39185 26.87526,45.1779 z m -8.50817,-35.53011 c -4.90963,-6.08526 -3.95644,-14.99839 2.12897,-19.90783 6.08593,-4.90878 14.99893,-3.95437 19.90753,2.13171 4.9083,6.08535 3.95462,14.99735 -2.1302,19.90631 -6.08534,4.90831 -14.99735,3.95462 -19.9063,-2.13019 z m 47.38703,49.78827 c -3.53469,-4.36911 -4.11121,-10.42946 -1.46335,-15.38646 3.63858,-6.81387 12.11212,-9.3877 18.92576,-5.74871 6.81401,3.63914 9.38724,12.11345 5.74718,18.92697 -3.63955,6.81267 -12.11262,9.38517 -18.92545,5.74596 -1.65027,-0.88088 -3.10705,-2.08387 -4.28414,-3.53776 z M -563.6561,152.82223 c -1.07227,-1.41607 -1.87186,-3.01919 -2.35812,-4.72756 -2.1667,-7.61133 2.2465,-15.53812 9.85758,-17.70572 7.61218,-2.16738 15.54002,2.24679 17.70694,9.8591 2.16669,7.61134 -2.24651,15.53811 -9.85758,17.70571 -5.68495,1.61871 -11.7805,-0.41919 -15.34882,-5.13153 z m 64.61074,65.20147 c -3.93971,-4.50583 -3.82535,-11.26356 0.26457,-15.63352 4.39865,-4.69931 11.77423,-4.94239 16.47274,-0.5429 4.69758,4.39828 4.94076,11.77174 0.54319,16.46999 -4.39809,4.69894 -11.77275,4.94269 -16.47152,0.54442 -0.28344,-0.26569 -0.55347,-0.54533 -0.80898,-0.83799 z m 69.83284,77.01637 c -2.26549,-2.79125 -3.3539,-6.35556 -3.03413,-9.93624 0.67978,-7.60057 7.39243,-13.21092 14.99298,-12.53096 7.60064,0.67902 13.21168,7.3911 12.53247,14.99174 -0.67977,7.60057 -7.3924,13.21092 -14.99296,12.53097 -3.71917,-0.33246 -7.14545,-2.1561 -9.49836,-5.05551 z m -97.4386,-127.52963 c -0.67676,-0.82462 -1.23918,-1.73678 -1.67097,-2.71227 -2.63734,-5.95578 0.0519,-12.92196 6.00705,-15.5607 5.9566,-2.63915 12.92481,0.0505 15.56345,6.00733 2.63797,5.95653 -0.0521,12.92375 -6.00856,15.56193 -4.84509,2.14613 -10.52669,0.7979 -13.89097,-3.29629 z m 71.94488,85.67888 c -2.77528,-3.16589 -3.60105,-7.59424 -2.15333,-11.54761 2.18621,-5.97027 8.79826,-9.03796 14.76861,-6.85194 5.97027,2.18621 9.03795,8.79826 6.85193,14.7686 -2.18622,5.97027 -8.79827,9.03795 -14.76861,6.85193 -1.8113,-0.66309 -3.42696,-1.77065 -4.6986,-3.22098 z m -12.33306,-40.45213 c -2.57194,-3.32724 -2.67668,-7.94179 -0.25842,-11.38235 3.04658,-4.33415 9.02988,-5.37787 13.36396,-2.3312 4.33416,3.04658 5.37788,9.02988 2.33119,13.36397 -3.04657,4.33415 -9.02987,5.37788 -13.36396,2.33119 -0.78631,-0.55295 -1.48504,-1.22094 -2.07277,-1.98161 z m -27.65294,-37.31354 c -0.36817,-0.41324 -0.70042,-0.85714 -0.99272,-1.32716 -2.83245,-4.55291 -1.43812,-10.53991 3.11446,-13.37291 4.55291,-2.8337 10.54097,-1.43984 13.37443,3.11324 2.83427,4.55357 1.4396,10.54266 -3.11476,13.37566 -4.01255,2.49607 -9.23942,1.74089 -12.38137,-1.78886 z m -65.97761,-92.83373 c -2.27367,-3.01164 -3.28423,-6.79076 -2.81723,-10.53529 0.99148,-7.94898 8.23869,-13.58948 16.1878,-12.59894 7.95016,0.99084 13.59159,8.23924 12.60017,16.18932 -0.99222,7.94892 -8.24,13.58875 -16.18902,12.59743 -3.89047,-0.48485 -7.41901,-2.52388 -9.78172,-5.65252 z m 28.3976,27.31775 c -1.70791,-2.0849 -2.66015,-4.68633 -2.70197,-7.38114 -0.10281,-6.59343 5.15873,-12.02187 11.75215,-12.12494 6.59449,-0.1035 12.02394,5.15915 12.12619,11.75367 0.10196,6.59331 -5.16008,12.02103 -11.75339,12.12343 -3.64341,0.0571 -7.1135,-1.55251 -9.42298,-4.37102 z m 105.4186,126.43488 c -1.71251,-2.20912 -2.36234,-5.06163 -1.77573,-7.79454 1.09763,-5.1172 6.13572,-8.37572 11.25294,-7.27815 5.1172,1.09764 8.37572,6.13573 7.27815,11.25294 -1.09764,5.1172 -6.13573,8.37573 -11.25294,7.27815 -2.18446,-0.46815 -4.13328,-1.69304 -5.50242,-3.4584 z m 26.08452,31.74822 c -1.69544,-1.92738 -2.68901,-4.37164 -2.81913,-6.93531 -0.3169,-6.27354 4.51213,-11.61605 10.78569,-11.93253 6.27354,-0.31692 11.61605,4.51213 11.93253,10.78568 0.31623,6.27251 -4.51172,11.61401 -10.78417,11.9313 -3.46648,0.17503 -6.82314,-1.24246 -9.11492,-3.84914 z m -67.24634,-90.15409 c -2.83099,-3.38669 -2.38052,-8.4271 1.00612,-11.25814 3.38727,-2.83145 8.42867,-2.38026 11.25936,1.00764 2.83098,3.38669 2.38052,8.4271 -1.00612,11.25814 -3.38727,2.83146 -8.42868,2.38026 -11.25936,-1.00764 z m -37.86533,-48.83185 c -1.25019,-1.40839 -2.06938,-3.14633 -2.36017,-5.00696 -0.83902,-5.3628 2.82813,-10.3904 8.1909,-11.22959 5.36375,-0.83972 10.3924,2.82847 11.23083,8.19242 0.83806,5.36268 -2.82955,10.38947 -8.19214,11.22808 -3.3057,0.5176 -6.64765,-0.6821 -8.86942,-3.18395 z m 65.1051,76.46878 c -2.03769,-2.43146 -2.42228,-5.84637 -0.97646,-8.67017 1.98735,-3.8811 6.74444,-5.41661 10.62583,-3.4298 3.88111,1.98735 5.41662,6.74444 3.4298,10.62584 -1.98734,3.8811 -6.74443,5.41661 -10.62583,3.4298 -0.94036,-0.48122 -1.77461,-1.14624 -2.45334,-1.95567 z m 78.75091,90.02543 c -1.06755,-1.31226 -1.88223,-2.81131 -2.40202,-4.42113 -2.31608,-7.17397 1.62206,-14.86716 8.79606,-17.18317 7.17396,-2.31608 14.86716,1.62206 17.18317,8.79606 2.31607,7.17397 -1.62206,14.86716 -8.79606,17.18317 -5.3578,1.72962 -11.22787,-0.008 -14.78115,-4.37493 z m -120.5757,-154.33307 c -0.61891,-0.78907 -1.08572,-1.68633 -1.37664,-2.64605 -1.29818,-4.27511 1.11486,-8.7932 5.38985,-10.09177 4.27511,-1.29818 8.7932,1.11487 10.09177,5.38985 1.29886,4.27595 -1.11514,8.7951 -5.39137,10.093 -3.19269,0.96938 -6.65302,-0.12072 -8.71361,-2.74503 z m 36.69707,35.65901 c -1.85944,-2.51833 -1.68691,-5.9981 0.41254,-8.32013 2.43633,-2.69573 6.59668,-2.90596 9.29235,-0.46958 2.69572,2.43633 2.90596,6.59668 0.46958,9.29235 -2.43633,2.69572 -6.59668,2.90596 -9.29235,0.46958 -0.32571,-0.29387 -0.6212,-0.61957 -0.88214,-0.9722 z m 40.59425,43.29306 c -1.30606,-1.55331 -1.95539,-3.55445 -1.81008,-5.57867 0.30849,-4.29736 4.04251,-7.53082 8.33983,-7.22182 4.29735,0.30849 7.53081,4.04251 7.22181,8.33983 -0.30848,4.29735 -4.04251,7.53081 -8.33982,7.22181 -2.10294,-0.1512 -4.05512,-1.14722 -5.41174,-2.76115 z m -56.25794,-71.026 c -0.39029,-0.45835 -0.7166,-0.96752 -0.97002,-1.5136 -1.54849,-3.33611 -0.0993,-7.29587 3.23682,-8.84432 3.33612,-1.54849 7.29588,-0.0993 8.84433,3.23682 1.54849,3.33612 0.0993,7.29588 -3.23682,8.84433 -2.71385,1.25967 -5.93466,0.55483 -7.87431,-1.72323 z m 41.04395,47.15107 c -1.27668,-1.72409 -1.62029,-3.96715 -0.91833,-5.99438 1.17551,-3.39117 4.87729,-5.18757 8.26864,-4.01262 3.39112,1.1749 5.18814,4.876 4.01413,8.26743 -1.17437,3.3924 -4.8767,5.19024 -8.26894,4.01535 -1.23759,-0.42932 -2.31658,-1.22258 -3.0955,-2.27578 z m 39.35607,45.98568 c -0.90641,-1.16522 -1.52444,-2.52828 -1.80359,-3.9779 -0.97747,-5.07774 2.34693,-9.98631 7.42483,-10.96295 5.07774,-0.97747 9.98631,2.34694 10.96294,7.42483 0.97748,5.07774 -2.34692,9.98631 -7.42483,10.96296 -3.45843,0.66533 -6.99764,-0.66659 -9.15935,-3.44694 z m -46.30495,-68.19417 c -1.48557,-1.85277 -1.59011,-4.45748 -0.25846,-6.42379 1.67696,-2.47747 5.04511,-3.12583 7.52196,-1.44794 2.4761,1.67728 3.1238,5.04419 1.44672,7.52042 -1.67696,2.47748 -5.04511,3.12585 -7.52196,1.44796 -0.44873,-0.30402 -0.84928,-0.67369 -1.18826,-1.09665 z m -16.32816,-21.21208 c -0.0772,-0.10369 -0.15143,-0.20955 -0.22147,-0.3182 -1.64387,-2.54174 -0.91639,-5.93481 1.62498,-7.57923 2.54238,-1.64442 5.93649,-0.91617 7.58048,1.6265 1.64259,2.54176 0.91465,5.93376 -1.62622,7.57773 -2.41552,1.56258 -5.62804,0.992 -7.35773,-1.30683 z m -54.16526,-71.35903 c -2.17661,-2.45916 -2.99942,-5.83404 -2.19889,-9.01905 1.33996,-5.32809 6.7451,-8.56144 12.07339,-7.22229 5.3281,1.33929 8.56209,6.74381 7.22381,12.07217 -1.33871,5.32934 -6.74444,8.5642 -12.07368,7.22504 -1.94454,-0.48902 -3.69595,-1.55419 -5.02463,-3.05587 z m 16.35906,20.02783 c -1.31354,-1.67788 -1.92134,-3.8017 -1.69434,-5.92046 0.4817,-4.49635 4.51667,-7.75123 9.01313,-7.2706 4.49751,0.48105 7.75334,4.5172 7.27183,9.01466 -0.4817,4.49635 -4.51667,7.75123 -9.01314,7.2706 -2.20092,-0.23526 -4.21288,-1.35143 -5.57748,-3.0942 z m 16.29866,15.1406 c -0.98507,-1.16016 -1.54849,-2.61958 -1.59866,-4.1407 -0.12299,-3.72141 2.79448,-6.83774 6.5159,-6.96004 3.72141,-0.12299 6.83773,2.79448 6.96003,6.51591 0.1223,3.72035 -2.79405,6.83566 -6.51438,6.95879 -2.05624,0.0685 -4.0312,-0.80572 -5.36289,-2.37396 z m -49.39658,-62.66641 c -2.79591,-3.42316 -3.50032,-8.09946 -1.83689,-12.19435 2.51228,-6.18373 9.5615,-9.160363 15.74552,-6.648773 6.18373,2.512293 9.16036,9.561513 6.64877,15.745523 -2.51229,6.18372 -9.5615,9.16035 -15.74551,6.64877 -1.87612,-0.76194 -3.53074,-1.98304 -4.81189,-3.55117 z m 168.77519,206.7959 c -0.67203,-0.76205 -1.23758,-1.61174 -1.68118,-2.52584 -2.70933,-5.58219 -0.38073,-12.3038 5.20122,-15.01358 5.58291,-2.70995 12.30556,-0.38049 15.01481,5.20275 2.70933,5.58219 0.38072,12.30379 -5.20123,15.01358 -4.54124,2.20425 -9.99505,1.10933 -13.33362,-2.67691 z m -58.62645,-73.8004 c -0.98818,-1.2298 -1.38346,-2.83291 -1.07986,-4.38103 0.56956,-2.89928 3.38158,-4.78789 6.28086,-4.21839 2.89931,0.56886 4.78858,3.38029 4.21989,6.27963 -0.56955,2.89928 -3.38157,4.78789 -6.28085,4.21838 -1.23776,-0.24291 -2.3499,-0.91534 -3.14004,-1.89859 z m 14.62863,17.17031 c -0.73333,-0.98761 -1.16752,-2.16508 -1.25094,-3.39235 -0.24001,-3.53734 2.43248,-6.59971 5.96976,-6.84067 3.53748,-0.24091 6.60062,2.43111 6.8422,5.96853 0.24161,3.5385 -2.43151,6.60266 -5.97006,6.84344 -2.18117,0.14822 -4.28788,-0.82354 -5.59096,-2.57895 z m -38.43847,-49.73211 c -1.63192,-1.88368 -1.42771,-4.73367 0.45615,-6.36537 1.88436,-1.63106 4.7342,-1.42561 6.36509,0.4589 1.63059,1.88378 1.42585,4.73262 -0.45739,6.36385 -1.88379,1.63059 -4.73263,1.42585 -6.36385,-0.45738 z m -22.211,-27.61824 c -0.52473,-0.70018 -0.87636,-1.51457 -1.02629,-2.3766 -0.52593,-3.01878 1.49471,-5.89241 4.51344,-6.41872 3.01878,-0.52592 5.89241,1.49472 6.41871,4.51344 0.52593,3.01878 -1.49471,5.89241 -4.51344,6.41872 -2.05631,0.35868 -4.13995,-0.467 -5.39242,-2.13684 z m 37.85857,42.9503 c -1.174,-1.35217 -1.42497,-3.27559 -0.63716,-4.88369 1.08347,-2.21064 3.75382,-3.12444 5.96451,-2.04102 2.21051,1.0829 3.12491,3.7525 2.04254,5.96328 -1.08303,2.21198 -3.75464,3.12652 -5.96602,2.04225 -0.53557,-0.26271 -1.01295,-0.63025 -1.40387,-1.08082 z m -24.24273,-35.88883 c -0.35774,-0.43871 -0.63015,-0.94055 -0.80425,-1.47919 -0.77529,-2.40111 0.54324,-4.97601 2.94462,-5.75045 2.40031,-0.77462 4.97413,0.54296 5.74923,2.94311 0.77462,2.40031 -0.54296,4.97413 -2.94311,5.74923 -1.7927,0.57923 -3.75712,-0.002 -4.94649,-1.4627 z m 69.58314,85.93034 c -0.61562,-0.73021 -1.09017,-1.56845 -1.39942,-2.47208 -1.37896,-4.02677 0.76781,-8.40893 4.79474,-9.78739 4.02667,-1.37786 8.40791,0.76936 9.78587,4.79598 1.37896,4.02676 -0.76782,8.40892 -4.79475,9.78738 -3.00723,1.029 -6.33771,0.10612 -8.38644,-2.32389 z m -48.51672,-66.16408 c -1.07353,-1.40312 -1.01022,-3.36824 0.15147,-4.69929 1.34894,-1.54572 3.6956,-1.70505 5.2411,-0.35586 1.54572,1.34895 1.70505,3.6956 0.35585,5.2411 -1.34894,1.54572 -3.6956,1.70506 -5.2411,0.35586 -0.18678,-0.16321 -0.35671,-0.34474 -0.50733,-0.5418 z m -9.11547,-15.49974 c -0.22471,-0.25452 -0.41401,-0.53824 -0.56254,-0.84357 -0.90741,-1.86826 -0.12802,-4.11837 1.74058,-5.02509 1.86826,-0.90742 4.11837,-0.12803 5.0251,1.74057 0.9062,1.86821 0.12638,4.11732 -1.74181,5.02357 -1.51944,0.73746 -3.34416,0.3712 -4.46133,-0.89548 z m 32.45672,39.53878 c -0.75273,-0.86369 -1.13927,-1.98672 -1.07754,-3.13073 0.132,-2.42823 2.20721,-4.28984 4.63546,-4.15833 2.42934,0.13133 4.29192,2.2077 4.15956,4.63697 -0.132,2.42823 -2.20721,4.28984 -4.63546,4.15834 -1.18871,-0.0649 -2.3005,-0.60823 -3.08202,-1.50625 z m -8.82448,-13.32547 c -0.73722,-0.96073 -0.95288,-2.22334 -0.57645,-3.37434 0.62952,-1.92636 2.70152,-2.9776 4.62784,-2.34795 1.92637,0.62951 2.97762,2.70152 2.34797,4.62785 -0.63016,1.92639 -2.70283,2.97701 -4.62908,2.34643 -0.70274,-0.22947 -1.31978,-0.66586 -1.77028,-1.25199 z m 22.66784,25.56845 c -0.52265,-0.64873 -0.88455,-1.41182 -1.05618,-2.22702 -0.60115,-2.85657 1.22737,-5.65956 4.08398,-6.2605 2.8558,-0.60146 5.65859,1.2256 6.2608,4.08125 0.60215,2.8567 -1.22593,5.66054 -4.08277,6.26202 -1.94623,0.41023 -3.95797,-0.30691 -5.20583,-1.85575 z m -26.80881,-38.03713 c -0.85646,-1.03164 -0.94084,-2.50094 -0.20807,-3.62382 0.92246,-1.41373 2.81611,-1.81233 4.2302,-0.89044 1.4151,0.92212 1.81436,2.817 0.89167,4.23172 -0.92301,1.41395 -2.81749,1.81194 -4.23143,0.88891 -0.25651,-0.16684 -0.48654,-0.37124 -0.68237,-0.60637 z m -9.42535,-11.81191 c -0.0451,-0.0574 -0.0878,-0.11677 -0.12825,-0.17761 -0.95408,-1.41903 -0.57654,-3.34288 0.84308,-4.29609 1.41906,-0.95281 3.34184,-0.57479 4.29458,0.84431 0.95227,1.41842 0.57503,3.34018 -0.84279,4.29335 -1.3479,0.90644 -3.16721,0.61653 -4.16664,-0.66395 z m -31.63666,-40.18022 c -0.99168,-1.32651 -1.34738,-3.02306 -0.972,-4.63617 0.70353,-3.02165 3.72368,-4.90061 6.74519,-4.19647 3.02041,0.70412 4.8985,3.72305 4.19525,6.74367 -0.70344,3.02044 -3.72177,4.89916 -6.74245,4.19676 -1.29025,-0.30019 -2.43288,-1.04675 -3.22599,-2.10779 z m 9.78954,11.57585 c -0.75819,-0.93353 -1.12199,-2.12618 -1.01518,-3.32406 0.22713,-2.54418 2.47435,-4.42212 5.01843,-4.19375 2.54304,0.22779 4.42002,2.47384 4.19251,5.01691 -0.22778,2.54305 -2.47384,4.42003 -5.01691,4.19253 -1.24468,-0.11111 -2.39139,-0.72132 -3.17885,-1.69163 z M -455.9421,85.0368 c -1.61213,-1.90485 -2.05586,-4.5378 -1.15705,-6.86579 1.35749,-3.51517 5.30737,-5.26454 8.82271,-3.90749 3.5151,1.35688 5.26507,5.30606 3.909,8.82147 -1.35639,3.51641 -5.3068,5.26717 -8.82299,3.91024 -1.06684,-0.41191 -2.01305,-1.08534 -2.75167,-1.95843 z m 28.50146,34.88755 c -0.56702,-0.64541 -0.89898,-1.46368 -0.94188,-2.32172 -0.1055,-2.09842 1.50951,-3.88534 3.60788,-3.9919 2.09855,-0.10637 3.8862,1.50814 3.99342,3.60665 0.10618,2.09946 -1.50992,3.88738 -3.6094,3.99313 -1.15965,0.059 -2.28279,-0.4146 -3.05002,-1.28616 z m 90.15982,110.24719 c -0.13405,-0.17254 -0.26196,-0.34974 -0.38341,-0.53136 -2.84888,-4.24 -1.72086,-9.98669 2.51939,-12.83517 4.24002,-2.84759 9.98563,-1.71913 12.83365,2.52062 2.84887,4.23999 1.72086,9.98668 -2.51939,12.83516 -4.02909,2.7067 -9.46514,1.83814 -12.45021,-1.98928 z m -55.17406,-71.14752 c -0.5698,-0.68471 -0.80831,-1.58601 -0.65175,-2.46292 0.29349,-1.64139 1.86156,-2.73444 3.50313,-2.44192 1.64144,0.29279 2.73515,1.86027 2.44344,3.5019 -0.29216,1.64265 -1.86085,2.73727 -3.50342,2.44467 -0.7013,-0.12512 -1.3358,-0.4941 -1.7914,-1.04173 z m -26.57025,-33.51696 c -0.30297,-0.38991 -0.50907,-0.84618 -0.60204,-1.33114 -0.32662,-1.69877 0.78554,-3.34073 2.48425,-3.66767 1.69877,-0.32662 3.34072,0.78553 3.66767,2.48424 0.32661,1.69876 -0.78553,3.34072 -2.48424,3.66767 -1.15743,0.223 -2.34208,-0.22258 -3.06564,-1.1531 z m 59.98659,74.10847 c -0.21571,-0.28923 -0.40637,-0.59631 -0.56986,-0.91797 -1.58513,-3.12445 -0.33704,-6.94231 2.78759,-8.5271 3.12445,-1.58513 6.94231,-0.33704 8.5271,2.78758 1.58514,3.12445 0.33705,6.94232 -2.78758,8.52711 -2.75392,1.39662 -6.11343,0.60728 -7.95725,-1.86962 z m -24.98904,-31.04345 c -0.42366,-0.55037 -0.68037,-1.21081 -0.73948,-1.90284 -0.17051,-1.99421 1.30747,-3.74923 3.30161,-3.92049 1.99521,-0.1712 3.75126,1.30786 3.92172,3.30313 0.17121,1.99522 -1.30785,3.75126 -3.30313,3.92173 -1.22969,0.10474 -2.42819,-0.42336 -3.18072,-1.40153 z m -22.18903,-27.6937 c -0.93832,-1.04725 -0.85062,-2.65674 0.19591,-3.59587 1.04714,-0.93964 2.65775,-0.85249 3.59739,0.19467 0.93964,1.04715 0.85249,2.65776 -0.19468,3.5974 -1.04771,0.94009 -2.65931,0.85223 -3.59862,-0.1962 z m 105.80589,129.64314 c -4.87546,-5.62979 -4.26387,-14.14601 1.36602,-19.02137 5.6298,-4.87546 14.14601,-4.26387 19.02138,1.36602 4.87545,5.62979 4.26386,14.14601 -1.36602,19.02137 -5.6298,4.87546 -14.14602,4.26387 -19.02138,-1.36602 z m -96.98037,-121.33726 c -0.54453,-0.74273 -0.63989,-1.72358 -0.24859,-2.55728 0.59018,-1.2587 2.08913,-1.80047 3.34768,-1.20989 1.2587,0.59019 1.80048,2.08913 1.20989,3.34768 -0.59063,1.25737 -2.08837,1.79833 -3.34616,1.20866 -0.38197,-0.17827 -0.71304,-0.44963 -0.96282,-0.78917 z m -67.584,-84.13022 c -2.04919,-2.62521 -2.32846,-6.22184 -0.70899,-9.13185 2.227,-3.99977 7.27468,-5.43707 11.27461,-3.21036 3.99977,2.22699 5.43707,7.27467 3.21037,11.2746 -2.227,3.99977 -7.27467,5.43707 -11.27461,3.21037 -0.96872,-0.53975 -1.8193,-1.26839 -2.50138,-2.14276 z m 53.70475,64.30526 c -0.20525,-0.2449 -0.36399,-0.52529 -0.467,-0.82779 -0.46089,-1.34726 0.25745,-2.8131 1.60461,-3.27429 1.34726,-0.4609 2.8131,0.25745 3.27429,1.60461 0.4609,1.34726 -0.25745,2.81308 -1.60462,3.27428 -1.00641,0.34497 -2.12136,0.0365 -2.80728,-0.77681 z m 40.12516,47.81945 c -0.35474,-0.40568 -0.63105,-0.87372 -0.81483,-1.38032 -0.81805,-2.25993 0.3514,-4.75504 2.61165,-5.57218 2.25913,-0.81739 4.75318,0.35114 5.57095,2.61014 0.81806,2.25993 -0.3514,4.75504 -2.61165,5.57218 -1.68729,0.60999 -3.576,0.12162 -4.75612,-1.22982 z m -28.03944,-36.86876 c -0.62002,-0.78135 -0.60322,-1.89151 0.0396,-2.65423 0.74601,-0.88606 2.06911,-0.99946 2.95501,-0.25325 0.88607,0.746 0.99947,2.06912 0.25326,2.95502 -0.74601,0.88607 -2.06913,0.99946 -2.95502,0.25324 -0.10744,-0.0902 -0.20555,-0.19095 -0.29285,-0.30076 z m -5.43112,-8.82324 c -0.072,-0.0972 -0.13603,-0.20001 -0.19068,-0.3079 -0.52958,-1.04482 -0.11264,-2.32113 0.93159,-2.85184 1.04557,-0.53138 2.32394,-0.11405 2.85459,0.93189 0.53016,1.04552 0.1124,2.32288 -0.93313,2.85306 -0.92136,0.46727 -2.04531,0.20333 -2.66238,-0.6252 z m 18.68605,21.96998 c -0.33232,-0.45211 -0.50194,-1.00335 -0.48127,-1.56407 0.0509,-1.3723 1.20467,-2.44348 2.57696,-2.39242 1.37131,0.0507 2.44221,1.20287 2.39271,2.57421 -0.05,1.37241 -1.20334,2.44429 -2.57573,2.39393 -0.75856,-0.0276 -1.46298,-0.40014 -1.91267,-1.01165 z m -4.95434,-7.24298 c -0.42543,-0.53534 -0.55939,-1.24607 -0.35788,-1.89949 0.33667,-1.09294 1.49529,-1.70631 2.58842,-1.37031 1.09421,0.33611 1.70843,1.49597 1.37154,2.58994 -0.33729,1.09295 -1.49658,1.7057 -2.58965,1.36878 -0.39919,-0.12236 -0.75209,-0.3625 -1.01243,-0.68892 z m 13.04816,14.20939 c -0.30164,-0.36119 -0.51416,-0.78821 -0.61938,-1.2469 -0.36736,-1.60649 0.63716,-3.2066 2.24365,-3.57396 1.60661,-0.36839 3.2076,0.63569 3.57549,2.24242 0.36736,1.60649 -0.63715,3.20662 -2.24365,3.57397 -1.09419,0.25062 -2.23644,-0.13407 -2.95611,-0.99553 z m -39.19937,-50.14967 c -0.57264,-0.73934 -0.78971,-1.69375 -0.59318,-2.60804 0.36761,-1.71176 2.05296,-2.80167 3.76487,-2.43474 1.71176,0.36762 2.80169,2.05296 2.43475,3.76487 -0.36761,1.71177 -2.05297,2.80168 -3.76487,2.43475 -0.73103,-0.15648 -1.38328,-0.56619 -1.84157,-1.15684 z m 18.25452,22.36827 c -0.0263,-0.0323 -0.0516,-0.0655 -0.0754,-0.0998 -0.55084,-0.79164 -0.35605,-1.87989 0.43518,-2.43132 0.79099,-0.5516 1.8793,-0.35804 2.43161,0.43244 0.55211,0.79162 0.35782,1.88094 -0.43395,2.43284 -0.75184,0.52413 -1.78089,0.37824 -2.3574,-0.33422 z m 5.43694,6.57515 c -0.4941,-0.57398 -0.55635,-1.40299 -0.15347,-2.0443 0.50686,-0.80707 1.5719,-1.05061 2.37916,-0.54406 0.80707,0.50687 1.05061,1.57192 0.54404,2.37917 -0.50631,0.80684 -1.57053,1.05101 -2.37792,0.54557 -0.1467,-0.0919 -0.27878,-0.20528 -0.39184,-0.33636 z m -18.04952,-22.50604 c -0.43752,-0.51945 -0.65536,-1.18899 -0.60724,-1.86645 0.10312,-1.43806 1.35263,-2.52016 2.79067,-2.41677 1.43807,0.10313 2.52016,1.35264 2.41677,2.79068 -0.10313,1.43807 -1.35264,2.52016 -2.79068,2.41677 -0.70325,-0.051 -1.35594,-0.3844 -1.80952,-0.92423 z m -11.0714,-14.77011 c -0.92928,-1.05881 -1.2064,-2.54048 -0.72272,-3.86362 0.7313,-1.99854 2.9446,-3.02548 4.94286,-2.29341 1.99724,0.7318 3.02338,2.94388 2.29219,4.94134 -0.7318,1.99724 -2.94388,3.02337 -4.94134,2.29219 -0.60551,-0.2217 -1.14568,-0.59184 -1.57099,-1.0765 z m -49.30493,-61.4982 c -3.16954,-3.59187 -3.37021,-8.919313 -0.47989,-12.739443 3.35534,-4.4349 9.67034,-5.31057 14.1058,-1.95597 4.43626,3.35506 5.31254,9.671273 1.95718,14.107313 -3.3556,4.43654 -9.67267,5.31219 -14.10852,1.95567 -0.53593,-0.40552 -1.02991,-0.86366 -1.47457,-1.36757 z m 65.59918,80.74267 c -0.24475,-0.33016 -0.3897,-0.72358 -0.41761,-1.13362 -0.0813,-1.1839 0.81269,-2.20948 1.99659,-2.29063 1.18378,-0.0803 2.2086,0.81406 2.28911,1.99782 0.0813,1.1839 -0.81268,2.20948 -1.99659,2.29063 -0.73031,0.0495 -1.43561,-0.27614 -1.8715,-0.8642 z m 4.94147,3.23587 c -0.17441,-0.21704 -0.29508,-0.4722 -0.35228,-0.74468 -0.20161,-0.95591 0.41001,-1.89423 1.36597,-2.09559 0.95578,-0.20061 1.89326,0.41145 2.09408,1.36719 0.20062,0.95579 -0.41145,1.89327 -1.3672,2.09409 -0.65079,0.13669 -1.32327,-0.10324 -1.74057,-0.62101 z m 47.17343,58.27414 c -0.0772,-0.096 -0.15074,-0.19484 -0.2211,-0.29592 -1.64893,-2.3651 -1.06879,-5.61907 1.29589,-7.2686 2.36512,-1.64894 5.61909,-1.06879 7.26862,1.2959 1.65021,2.36507 1.07055,5.62013 -1.29467,7.27012 -2.24824,1.56808 -5.32626,1.13073 -7.04872,-1.00152 z m -31.84422,-39.6163 c -0.32889,-0.38065 -0.47295,-0.8871 -0.3936,-1.38385 0.14935,-0.92986 1.02424,-1.56257 1.95408,-1.41319 0.92986,0.14935 1.56257,1.02423 1.4132,1.95409 -0.14935,0.92986 -1.02425,1.56257 -1.9541,1.41319 -0.3964,-0.0641 -0.75746,-0.26604 -1.01958,-0.57024 z m -41.86349,-52.32929 c -1.18297,-1.46172 -1.37542,-3.48982 -0.48939,-5.14844 1.21802,-2.28006 4.05394,-3.14077 6.33377,-1.92233 2.2799,1.21746 3.14125,4.05257 1.92386,6.33254 -1.21802,2.28006 -4.05393,3.14077 -6.33377,1.92233 -0.55256,-0.29474 -1.04036,-0.69739 -1.43447,-1.1841 z m 46.71391,57.63606 c -0.24448,-0.30625 -0.3957,-0.67636 -0.43594,-1.06615 -0.11562,-1.12382 0.70129,-2.12876 1.82505,-2.24509 1.12396,-0.11654 2.12968,0.6999 2.24661,1.82382 0.11632,1.12482 -0.70167,2.13078 -1.82656,2.24632 -0.69291,0.0714 -1.37456,-0.21453 -1.80916,-0.7589 z m 14.41158,17.27764 c -0.12493,-0.16125 -0.23563,-0.33304 -0.33125,-0.51321 -0.9254,-1.74825 -0.25813,-3.91567 1.49028,-4.84075 1.74825,-0.9254 3.91568,-0.25814 4.84076,1.49028 0.92539,1.74825 0.25813,3.91567 -1.49029,4.84075 -1.54065,0.81516 -3.44444,0.40268 -4.50954,-0.97704 z m 33.31321,38.8554 c -2.30771,-3.15724 -1.84791,-7.54941 1.06365,-10.16026 3.13021,-2.80707 7.94332,-2.54511 10.75039,0.58511 2.80662,3.12963 2.54536,7.94176 -0.58359,10.74915 -3.12951,2.80797 -7.9428,2.54723 -10.75068,-0.58235 -0.16973,-0.18906 -0.32981,-0.38656 -0.4798,-0.59161 z m -40.52295,-51.59136 c -0.13221,-0.17824 -0.23902,-0.37403 -0.31836,-0.58131 -0.48467,-1.26768 0.15064,-2.68816 1.41865,-3.17196 1.26758,-0.48354 2.68714,0.15221 3.17043,1.41989 0.48289,1.26679 -0.15194,2.68528 -1.41835,3.1692 -1.0306,0.39358 -2.19718,0.0518 -2.85237,-0.83582 z m -58.35346,-76.44214 c -1.48915,-1.99831 -1.50332,-4.73349 -0.035,-6.74712 1.8503,-2.53648 5.40633,-3.09302 7.94312,-1.24315 2.53648,1.85029 3.09302,5.40633 1.24315,7.94311 -1.85029,2.53649 -5.40633,3.09303 -7.94311,1.24316 -0.4604,-0.33586 -0.86768,-0.73904 -1.20819,-1.196 z m 31.9458,39.31604 c -0.33046,-0.41125 -0.46263,-0.94737 -0.3613,-1.46512 0.19069,-0.9698 1.13123,-1.60156 2.10112,-1.41135 0.9698,0.1907 1.60158,1.13124 1.41135,2.10113 -0.1907,0.96979 -1.13123,1.60156 -2.10112,1.41134 -0.41404,-0.0816 -0.78593,-0.30687 -1.05005,-0.636 z m 22.62003,27.92317 c -0.17354,-0.20079 -0.29761,-0.43949 -0.36155,-0.69706 -0.22372,-0.90382 0.32822,-1.81773 1.23229,-2.04045 0.90295,-0.22304 1.8158,0.32791 2.03923,1.23076 0.22304,0.90295 -0.3279,1.81581 -1.23076,2.03924 -0.61534,0.15263 -1.26427,-0.0531 -1.67921,-0.53249 z m -25.90612,-32.74029 c -0.42708,-0.57674 -0.54223,-1.32701 -0.30767,-2.00524 0.39273,-1.13572 1.63212,-1.73768 2.76758,-1.34419 1.13572,0.39273 1.73769,1.63212 1.3442,2.76758 -0.39335,1.13577 -1.63342,1.73711 -2.76881,1.34267 -0.41384,-0.14356 -0.77469,-0.40874 -1.0353,-0.76082 z m -2.96305,-6.09651 c -0.68165,-0.81397 -0.80994,-1.95686 -0.32564,-2.90165 0.66516,-1.29892 2.25772,-1.81223 3.55627,-1.14729 1.29892,0.66516 1.81223,2.25772 1.14729,3.55626 -0.66516,1.29893 -2.25772,1.81223 -3.55626,1.14729 -0.31494,-0.161 -0.59435,-0.38361 -0.82166,-0.65461 z m 42.51341,51.17516 c -0.0445,-0.0536 -0.0874,-0.10857 -0.1281,-0.16517 -0.95409,-1.31878 -0.65865,-3.16127 0.65988,-4.11569 1.31877,-0.95409 3.16127,-0.65865 4.11569,0.65988 0.95409,1.31877 0.65865,3.16127 -0.65988,4.11569 -1.25313,0.90679 -2.99402,0.69079 -3.98751,-0.49477 z m -7.27101,-9.48958 c -0.0719,-0.0901 -0.13594,-0.1862 -0.19154,-0.28714 -0.5398,-0.97751 -0.18492,-2.20753 0.79262,-2.74726 0.97751,-0.5398 2.20752,-0.18493 2.74726,0.79262 0.53979,0.9775 0.18491,2.20752 -0.79262,2.74725 -0.86139,0.47603 -1.94041,0.26263 -2.55576,-0.50544 z m 19.18786,21.60281 c -1.33378,-1.7592 -1.11783,-4.24279 0.49954,-5.74541 1.73934,-1.61478 4.4583,-1.51409 6.07344,0.2249 1.61569,1.73863 1.51623,4.45778 -0.22216,6.07373 -1.7392,1.61612 -4.45932,1.51596 -6.07496,-0.22368 -0.0976,-0.10503 -0.18948,-0.21514 -0.27601,-0.32942 z m -57.0762,-71.29689 c -0.85997,-1.11338 -0.89464,-2.65703 -0.0856,-3.80795 1.01958,-1.45063 3.02221,-1.79978 4.47253,-0.77978 1.44926,1.01988 1.79777,3.02129 0.77856,4.47101 -1.01903,1.45037 -3.02082,1.80016 -4.47131,0.7813 -0.26343,-0.18544 -0.49746,-0.40947 -0.69419,-0.66458 z m 109.84023,135.67094 c -3.20931,-4.1926 -3.02111,-10.06563 0.45005,-14.04416 4.02996,-4.61915 11.04137,-5.09699 15.66076,-1.0673 4.6195,4.0305 5.09669,11.04283 1.06579,15.66199 -4.0305,4.6195 -11.04284,5.09668 -15.66199,1.06579 -0.5575,-0.48692 -1.06489,-1.02839 -1.51461,-1.61632 z m -70.55374,-91.42334 c -0.0253,-0.0297 -0.0498,-0.0602 -0.0736,-0.0912 -0.55233,-0.7355 -0.4033,-1.77959 0.33279,-2.33116 0.73551,-0.55233 1.7796,-0.40328 2.33116,0.3328 0.55107,0.73554 0.40149,1.77854 -0.33402,2.32964 -0.69856,0.52458 -1.68382,0.41977 -2.25636,-0.24006 z M -476.22891,9.038917 c -3.96934,-4.8721 -3.60181,-11.9591 0.85019,-16.39451 4.78676,-4.76962 12.53388,-4.75525 17.30291,0.0321 4.76963,4.78676 4.75528,12.53389 -0.0321,17.30293 -4.78675,4.76963 -12.53388,4.75527 -17.30292,-0.0321 -0.2877,-0.28897 -0.5607,-0.59219 -0.81811,-0.90843 z m 80.2925,99.125533 c -0.49657,-0.62036 -0.53121,-1.4918 -0.0853,-2.1495 0.56138,-0.82792 1.68744,-1.04438 2.51576,-0.4836 0.82793,0.56137 1.04438,1.68742 0.4836,2.51575 -0.56137,0.82792 -1.68743,1.04438 -2.51575,0.4836 -0.15034,-0.10148 -0.28461,-0.22493 -0.39834,-0.36623 z m -38.73046,-48.92444 c -2.28735,-2.71084 -2.14955,-6.71358 0.31875,-9.26076 2.65501,-2.73898 7.0277,-2.80709 9.76673,-0.15212 2.73899,2.655 2.8071,7.0277 0.15213,9.76673 -2.655,2.73899 -7.0277,2.8071 -9.76673,0.15213 -0.16533,-0.16067 -0.32249,-0.32954 -0.47086,-0.50599 z m 71.64957,88.60715 c -0.76906,-0.97998 -0.67114,-2.38311 0.22661,-3.24674 0.96553,-0.92908 2.50138,-0.89966 3.43062,0.0657 0.92908,0.96553 0.89966,2.50139 -0.0657,3.43062 -0.96553,0.92909 -2.50138,0.89966 -3.43062,-0.0657 -0.0564,-0.0588 -0.11037,-0.11994 -0.16107,-0.18375 z m -47.69409,-60.67719 c -1.31804,-1.50779 -1.27959,-3.76888 0.0889,-5.23101 1.47159,-1.57226 3.93909,-1.65396 5.51145,-0.18247 1.57227,1.47159 1.65396,3.9391 0.18247,5.51145 -1.47158,1.57226 -3.93909,1.65396 -5.51144,0.18247 -0.0951,-0.0889 -0.18564,-0.18251 -0.27143,-0.28041 z m 78.11278,96.49494 c -1.85316,-2.33505 -1.80488,-5.65236 0.11549,-7.93245 2.22939,-2.6473 6.18274,-2.98602 8.82998,-0.75657 2.64729,2.2294 2.98601,6.18274 0.75656,8.82998 -2.22939,2.64728 -6.18273,2.98601 -8.82997,0.75656 -0.31991,-0.26932 -0.61204,-0.56999 -0.87206,-0.89752 z m -64.45417,-81.13684 c -0.62209,-0.8427 -0.5643,-2.00701 0.13819,-2.78396 0.81541,-0.90121 2.20685,-0.97115 3.10853,-0.15626 0.90257,0.8152 0.97309,2.20784 0.15749,3.11005 -0.81541,0.90121 -2.20686,0.97116 -3.10853,0.15627 -0.10919,-0.0986 -0.20824,-0.20782 -0.29568,-0.32609 z m 45.18357,53.86934 c -1.06892,-1.29947 -1.07474,-3.17202 -0.0139,-4.47808 1.23224,-1.51689 3.461,-1.74733 4.97752,-0.51462 1.51721,1.23278 1.747,3.46245 0.5131,4.97875 -1.23303,1.51585 -3.46148,1.74502 -4.97723,0.51187 -0.18269,-0.14891 -0.35001,-0.31572 -0.49954,-0.4979 z m -11.14758,-15.2005 c -0.61629,-0.72306 -0.63789,-1.78019 -0.0517,-2.52788 0.68042,-0.86858 1.93623,-1.0209 2.80458,-0.34018 0.86889,0.68097 1.02056,1.93766 0.33867,2.80581 -0.68123,0.86752 -1.93672,1.0186 -2.8043,0.33744 -0.10465,-0.082 -0.20087,-0.17415 -0.28725,-0.27518 z M -397.2639,95.81767 c -0.94721,-1.13314 -0.79657,-2.81959 0.33643,-3.76696 1.13314,-0.94721 2.81958,-0.79657 3.76696,0.33644 0.94722,1.13314 0.79656,2.81958 -0.33644,3.76695 -1.13313,0.94721 -2.81958,0.79657 -3.76695,-0.33643 z m 33.39873,39.86043 c -0.39659,-0.52733 -0.43945,-1.24069 -0.10891,-1.81175 0.4552,-0.7861 1.46166,-1.05406 2.24748,-0.59842 0.78628,0.45576 1.05361,1.46302 0.5969,2.2487 -0.45614,0.78493 -1.46213,1.05161 -2.24719,0.59568 -0.19019,-0.11059 -0.35621,-0.25826 -0.48828,-0.43421 z m -25.05657,-32.95634 c -0.0255,-0.0348 -0.0502,-0.0702 -0.0731,-0.10661 -0.55023,-0.85053 -0.30684,-1.98609 0.54365,-2.53638 0.85054,-0.55025 1.98609,-0.30685 2.53639,0.54364 0.55024,0.85055 0.30684,1.98609 -0.54366,2.53639 -0.80846,0.52353 -1.88414,0.3326 -2.46305,-0.43718 z m -22.1984,-27.74887 c -1.64314,-2.03603 -1.32459,-5.01859 0.71149,-6.66167 2.03662,-1.64362 5.02018,-1.32435 6.6629,0.713 1.6423,2.03671 1.32253,5.01914 -0.71423,6.66138 -2.03612,1.64183 -5.01755,1.32278 -6.66016,-0.71271 z m 58.10124,71.85522 c -0.8503,-0.95311 -0.98023,-2.34908 -0.3205,-3.44279 0.83145,-1.37712 2.62201,-1.81926 3.9989,-0.98741 1.37693,0.83091 1.81967,2.62065 0.98893,3.99768 -0.83145,1.37712 -2.62201,1.81926 -3.9989,0.98741 -0.24926,-0.15053 -0.47461,-0.33754 -0.66843,-0.55489 z m 18.68083,19.85127 c -1.47537,-1.71461 -1.6615,-4.1904 -0.45911,-6.10635 1.51457,-2.41327 4.69887,-3.14155 7.11188,-1.62656 2.41305,1.51402 3.14195,4.6975 1.62808,7.11065 -1.51457,2.41327 -4.69887,3.14155 -7.11188,1.62656 -0.43775,-0.27434 -0.83181,-0.61289 -1.16897,-1.0043 z m -20.84278,-27.65797 c -0.54286,-0.68904 -0.66594,-1.6196 -0.32097,-2.42612 0.52031,-1.21659 1.92794,-1.78151 3.14493,-1.26214 1.21649,0.51972 1.78202,1.92663 1.26366,3.14369 -0.51925,1.21781 -1.9274,1.78412 -3.14521,1.26489 -0.36953,-0.15736 -0.69358,-0.40505 -0.94241,-0.72032 z m -41.17244,-51.31084 c -0.12282,-0.13793 -0.23425,-0.28562 -0.33186,-0.44246 -0.94887,-1.52364 -0.48249,-3.52801 1.04153,-4.47626 1.52363,-0.94886 3.52802,-0.48248 4.47626,1.04154 0.9476,1.52363 0.48076,3.52695 -1.04276,4.47473 -1.34246,0.83556 -3.09153,0.58331 -4.14319,-0.59753 z m 8.79126,9.63838 c -0.13029,-0.15354 -0.23909,-0.32409 -0.32357,-0.50686 -0.51793,-1.11633 -0.0329,-2.44116 1.08338,-2.95921 1.11633,-0.51793 2.44116,-0.0329 2.95921,1.08337 0.51793,1.11633 0.0329,2.44117 -1.08337,2.95921 -0.90829,0.42193 -1.98648,0.1861 -2.63565,-0.57651 z m -47.45322,-59.7222 c -2.8457,-3.657543 -2.18767,-8.929443 1.46981,-11.775213 3.65694,-2.84522 8.92784,-2.18792 11.77399,1.46829 2.84655,3.65684 2.18972,8.928873 -1.46706,11.775503 -3.65745,2.84704 -8.93049,2.18949 -11.77674,-1.46858 z m 133.14929,164.78733 c -2.55872,-3.08213 -2.81151,-7.47151 -0.62343,-10.82693 2.75624,-4.22582 8.41595,-5.4178 12.64244,-2.66259 4.22719,2.7559 5.41983,8.41685 2.66381,12.64397 -2.75591,4.22718 -8.41685,5.41982 -12.64396,2.6638 -0.7669,-0.50048 -1.45421,-1.11341 -2.03886,-1.81825 z m -55.77361,-69.30882 c -0.42321,-0.49518 -0.57479,-1.16731 -0.40504,-1.7962 0.28445,-1.05191 1.36772,-1.6741 2.41966,-1.38976 1.05191,0.28379 1.67474,1.36643 1.39127,2.41843 -0.28321,1.05317 -1.36708,1.67686 -2.41994,1.39251 -0.38416,-0.10412 -0.72786,-0.32197 -0.98595,-0.62498 z m -2.76678,-4.63377 c -0.25487,-0.33761 -0.36801,-0.76131 -0.31531,-1.18102 0.11191,-0.88908 0.92272,-1.51954 1.81195,-1.40896 0.89031,0.11053 1.52239,0.92196 1.41166,1.81227 -0.11127,0.89025 -0.92326,1.52164 -1.81347,1.41019 -0.4354,-0.0543 -0.83032,-0.28241 -1.09487,-0.63247 z m -19.80915,-27.98488 c -0.17592,-0.23465 -0.29383,-0.5076 -0.34394,-0.79656 -0.17536,-1.00982 0.50066,-1.97073 1.51034,-2.14682 1.00994,-0.17634 1.97167,0.49924 2.14834,1.50912 0.17633,1.00994 -0.49924,1.97167 -1.50912,2.14834 -0.68829,0.12071 -1.38607,-0.15525 -1.80562,-0.71408 z m 42.29165,52.30008 c -0.93926,-1.23604 -1.12914,-2.88613 -0.49511,-4.30318 0.95779,-2.1405 3.46947,-3.09926 5.60996,-2.14145 2.14051,0.95778 3.09927,3.46946 2.14146,5.60995 -0.95837,2.14062 -3.47077,3.09878 -5.61118,2.13995 -0.64902,-0.29047 -1.21469,-0.73929 -1.64513,-1.30527 z m -47.19022,-61.81638 c -0.20751,-0.26361 -0.36439,-0.56337 -0.46235,-0.88424 -0.43494,-1.43115 0.37318,-2.94381 1.80459,-3.37788 1.43115,-0.43494 2.94382,0.37317 3.37789,1.80459 0.43494,1.43115 -0.37317,2.94381 -1.80459,3.37788 -1.06866,0.32387 -2.22651,-0.0416 -2.91554,-0.92035 z m -24.14211,-30.32642 c -0.21359,-0.24884 -0.40475,-0.51608 -0.57302,-0.79747 -1.6321,-2.72753 -0.74398,-6.26171 1.98365,-7.89366 2.72752,-1.63084 6.26065,-0.74226 7.89213,1.98488 1.6321,2.72753 0.74397,6.26171 -1.98365,7.89366 -2.40359,1.43799 -5.4934,0.93671 -7.31911,-1.18741 z m 49.2184,59.94443 c -0.12021,-0.15858 -0.20975,-0.33823 -0.26416,-0.52967 -0.24225,-0.85209 0.25184,-1.73928 1.10379,-1.98198 0.85221,-0.24331 1.74029,0.25034 1.9835,1.10257 0.24293,0.85293 -0.25212,1.74119 -1.10532,1.9832 -0.6362,0.18099 -1.31827,-0.047 -1.71781,-0.57412 z m -33.94548,-42.60378 c -0.22628,-0.27573 -0.41419,-0.58083 -0.55852,-0.90703 -0.8828,-1.99305 0.0171,-4.32439 2.01009,-5.20737 1.99304,-0.8828 4.32439,0.0171 5.20737,2.01009 0.8828,1.99304 -0.0171,4.3244 -2.01009,5.20738 -1.62145,0.71845 -3.52301,0.26726 -4.64885,-1.10307 z m 51.88685,64.25102 c -0.73379,-0.89006 -0.9812,-2.08485 -0.66112,-3.19311 0.53485,-1.85543 2.47298,-2.92556 4.32814,-2.38975 1.85417,0.53605 2.92282,2.4736 2.387,4.32785 -0.53541,1.85416 -2.47232,2.92345 -4.32662,2.38852 -0.67688,-0.19512 -1.27899,-0.59022 -1.7274,-1.13351 z m -13.76917,-18.55619 c -0.24326,-0.28355 -0.39986,-0.63106 -0.45124,-1.0011 -0.14769,-1.06677 0.59765,-2.05119 1.66449,-2.19838 1.06581,-0.147 2.04919,0.59728 2.19715,1.66296 0.14796,1.06594 -0.59588,2.05012 -1.66173,2.19867 -0.65763,0.0915 -1.31658,-0.15803 -1.74867,-0.66215 z m 9.19367,10.48566 c -0.56494,-0.63232 -0.82221,-1.48164 -0.70304,-2.32117 0.2235,-1.57322 1.6801,-2.66732 3.25329,-2.44366 1.57316,0.22424 2.6666,1.68141 2.44215,3.25453 -0.22424,1.57316 -1.68141,2.66659 -3.25454,2.44214 -0.67097,-0.0962 -1.28644,-0.4262 -1.73786,-0.93184 z m -4.7811,-6.18827 c -0.33165,-0.41911 -0.51138,-0.9383 -0.51048,-1.47276 0.003,-1.30751 1.06489,-2.36527 2.3724,-2.36292 1.30751,0.003 2.36527,1.06489 2.36292,2.37241 -0.003,1.3075 -1.06489,2.36527 -2.3724,2.36291 -0.72238,-0.002 -1.40449,-0.33292 -1.85244,-0.89964 z m -25.25368,-31.84128 c -0.3296,-0.38806 -0.51818,-0.87624 -0.53513,-1.38511 -0.0406,-1.24464 0.93513,-2.28672 2.17976,-2.32797 1.24477,-0.0414 2.28759,0.93379 2.32949,2.17855 0.0421,1.24581 -0.9342,2.28963 -2.18005,2.33071 -0.6882,0.0223 -1.34891,-0.27087 -1.79407,-0.79618 z m 13.99392,17.18295 c -0.55036,-0.6816 -0.44348,-1.6804 0.23864,-2.23012 0.6816,-0.55036 1.68041,-0.44348 2.23013,0.23865 0.54904,0.68169 0.44166,1.67937 -0.23988,2.22861 -0.68101,0.54988 -1.67882,0.44372 -2.22889,-0.23714 z m -8.50278,-11.46455 c -0.33208,-0.44384 -0.45123,-1.01167 -0.32566,-1.55158 0.23536,-1.01127 1.24614,-1.64012 2.25732,-1.40435 1.01127,0.23536 1.64012,1.24614 1.40435,2.25732 -0.23536,1.01127 -1.24613,1.64012 -2.25732,1.40435 -0.43152,-0.10073 -0.81356,-0.35069 -1.07869,-0.70574 z m 63.42857,75.84631 c -1.62605,-2.21852 -1.9113,-5.14775 -0.7438,-7.63828 1.76196,-3.76106 6.23909,-5.38188 10.00036,-3.62035 3.76251,1.76211 5.38348,6.24122 3.62005,10.00311 -1.76255,3.76118 -6.24042,5.38138 -10.00159,3.61882 -1.1412,-0.53447 -2.1298,-1.34712 -2.87502,-2.3633 z m -50.09725,-63.27057 c -0.0712,-0.0835 -0.13623,-0.17206 -0.19232,-0.26645 -0.54732,-0.91294 -0.25018,-2.09676 0.6634,-2.64302 0.91294,-0.54607 2.09572,-0.24848 2.64152,0.66463 0.54549,0.91227 0.24869,2.094 -0.66312,2.64028 -0.80393,0.48182 -1.838,0.31487 -2.44946,-0.39546 z m -5.48403,-7.73163 c -0.49889,-0.66863 -0.50394,-1.58428 -0.0125,-2.2584 0.61932,-0.84895 1.80964,-1.035 2.65848,-0.41553 0.84868,0.61877 1.03537,1.80822 0.41706,2.65724 -0.61931,0.84896 -1.80963,1.03502 -2.65848,0.41555 -0.15404,-0.11196 -0.29039,-0.24643 -0.40459,-0.39883 z m -17.49533,-22.67455 c -0.41861,-0.47147 -0.69286,-1.05334 -0.79011,-1.67629 -0.28026,-1.79428 0.94682,-3.47613 2.74103,-3.75686 1.79428,-0.28027 3.47613,0.94681 3.75686,2.74102 0.28123,1.79441 -0.9454,3.47706 -2.73979,3.75838 -1.10634,0.17303 -2.2247,-0.22874 -2.96799,-1.06625 z m 28.54358,32.48223 c -0.13125,-0.1659 -0.23905,-0.34906 -0.32096,-0.5441 -0.50308,-1.18991 0.0536,-2.56238 1.24338,-3.0657 1.19067,-0.50371 2.5642,0.0538 3.06693,1.24491 0.50256,1.1906 -0.0554,2.56316 -1.24613,3.06541 -0.96796,0.40909 -2.08992,0.12257 -2.74322,-0.70052 z M -366.10965,99.3085 c -0.53949,-0.63725 -0.68808,-1.51816 -0.38754,-2.29713 0.45417,-1.1765 1.77612,-1.76201 2.95257,-1.30773 1.17649,0.45417 1.76201,1.77612 1.30773,2.95257 -0.45417,1.1765 -1.77612,1.76201 -2.95258,1.30773 -0.35678,-0.13795 -0.6732,-0.36333 -0.92018,-0.65544 z m -5.74026,-7.95906 c -0.43893,-0.56132 -0.6419,-1.27158 -0.56593,-1.98008 0.16118,-1.50461 1.51139,-2.59379 3.01604,-2.43294 1.5046,0.16117 2.59378,1.51139 2.43293,3.01604 -0.16117,1.5046 -1.51139,2.59378 -3.01603,2.43293 -0.7368,-0.0787 -1.41034,-0.45241 -1.86701,-1.03595 z m 14.36499,15.11701 c -0.76594,-0.90731 -0.71984,-2.24737 0.10671,-3.09983 0.88839,-0.91541 2.35042,-0.93798 3.26666,-0.0505 0.91676,0.88821 0.9399,2.35144 0.0517,3.26819 -0.88821,0.91675 -2.35144,0.93989 -3.26818,0.0517 -0.055,-0.0539 -0.10746,-0.11044 -0.15685,-0.16959 z m -31.9672,-39.70027 c -0.35937,-0.47417 -0.6274,-1.01105 -0.79034,-1.58327 -0.72495,-2.54762 0.753,-5.20051 3.30081,-5.92484 2.54679,-0.72427 5.1986,0.75273 5.92361,3.2993 0.72533,2.54691 -0.75122,5.1996 -3.29807,5.92513 -1.90213,0.54182 -3.94178,-0.13978 -5.13601,-1.71632 z m 74.60185,92.11765 c -1.27272,-1.59893 -1.6743,-3.72297 -1.07323,-5.67621 1.00573,-3.26747 4.46965,-5.10116 7.73725,-4.09587 3.26874,1.00519 5.10328,4.47034 4.0971,7.73877 -1.00637,3.26749 -4.47094,5.10056 -7.73848,4.09435 -1.19218,-0.36682 -2.24573,-1.08521 -3.02264,-2.06104 z m -30.92715,-38.67229 c -0.29944,-0.33393 -0.51554,-0.73402 -0.63065,-1.16754 -0.4027,-1.51667 0.49998,-3.07272 2.01649,-3.47604 1.51668,-0.4027 3.07273,0.49997 3.47605,2.01649 0.40375,1.5168 -0.49849,3.07373 -2.01527,3.47757 -1.03331,0.27449 -2.13324,-0.0541 -2.84662,-0.85048 z M -431.26965,12.306987 c -0.37077,-0.4469 -0.70239,-0.92489 -0.99164,-1.42841 -2.80484,-4.88062 -1.12271,-11.1109 3.7574,-13.91663 4.88064,-2.80609 11.11195,-1.12441 13.91815,3.75617 2.80667,4.88131 1.12418,11.11368 -3.75768,13.91938 -4.30173,2.47248 -9.75883,1.48859 -12.92623,-2.33051 z m 92.60689,113.286943 c -0.4212,-0.5094 -0.68771,-1.12879 -0.76738,-1.78497 -0.22843,-1.89307 1.12094,-3.61294 3.014,-3.84155 1.89307,-0.22843 3.61293,1.12093 3.84154,3.01399 0.22843,1.89307 -1.12093,3.61293 -3.01398,3.84155 -1.16713,0.14035 -2.32548,-0.32274 -3.07418,-1.22902 z m -66.09548,-82.1014 c -0.39201,-0.49552 -0.71555,-1.04154 -0.96101,-1.62375 -1.50188,-3.55741 0.16457,-7.658773 3.72205,-9.160473 3.55666,-1.50124 7.65696,0.16433 9.15925,3.720543 1.50304,3.55749 -0.16298,7.65981 -3.72083,9.162 -2.89417,1.22222 -6.24818,0.3639 -8.19946,-2.09832 z m 82.05211,100.95826 c -0.98165,-1.13808 -1.41084,-2.65144 -1.17282,-4.13542 0.44529,-2.77917 3.0594,-4.67105 5.83853,-4.22542 2.77912,0.446 4.67033,3.06069 4.22392,5.83974 -0.44591,2.778 -3.05883,4.66896 -5.83701,4.22422 -1.18652,-0.19004 -2.26772,-0.79326 -3.05262,-1.70312 z m -8.27714,-11.10705 c -0.57341,-0.75289 -0.87535,-1.67755 -0.85679,-2.62375 0.0444,-2.31657 1.95855,-4.15841 4.27511,-4.11356 2.31645,0.0452 4.15757,1.95987 4.11203,4.27632 -0.0459,2.31537 -1.95941,4.15551 -4.2748,4.11082 -1.2801,-0.0243 -2.47903,-0.63187 -3.25555,-1.64983 z m -28.6512,-36.38281 c -0.68573,-0.8786 -0.77904,-2.08229 -0.23688,-3.05605 0.74529,-1.33875 2.43487,-1.81967 3.77344,-1.07405 1.33741,0.74568 1.81761,2.43403 1.07282,3.77193 -0.74474,1.33857 -2.43352,1.8201 -3.77221,1.07556 -0.32425,-0.1807 -0.60893,-0.42465 -0.83717,-0.71739 z m 9.16577,10.07153 c -0.95178,-1.22353 -0.73201,-2.98687 0.491,-3.93931 1.22413,-0.95226 2.98846,-0.73177 3.94053,0.49252 0.95178,1.22353 0.73201,2.98687 -0.491,3.93931 -1.22413,0.95226 -2.98847,0.73177 -3.94053,-0.49252 z m -24.25439,-30.86068 c -0.57175,-0.69763 -0.88999,-1.56855 -0.90375,-2.47043 -0.0336,-2.20581 1.72698,-4.0214 3.93278,-4.05575 2.20593,-0.0344 4.02225,1.72564 4.05727,3.93156 0.0351,2.20699 -1.72607,4.02431 -3.93308,4.0585 -1.2194,0.0188 -2.38064,-0.52026 -3.15322,-1.46388 z m 9.75703,10.55566 c -0.72816,-0.82288 -1.00333,-1.95208 -0.73544,-3.01772 0.44787,-1.78308 2.25634,-2.86556 4.03946,-2.41787 1.78433,0.4473 2.86769,2.25699 2.41909,4.041 -0.44797,1.78431 -2.25828,2.86702 -4.04221,2.41756 -0.65058,-0.16383 -1.23647,-0.5204 -1.6809,-1.02297 z M -254.3634,223.8009 c -3.51049,-4.04159 -4.26068,-9.79197 -1.90458,-14.59891 3.23773,-6.6064 11.21786,-9.33738 17.82439,-6.09992 6.60772,3.23731 9.33945,11.21868 6.10113,17.82591 -3.23788,6.60786 -11.22,9.33897 -17.82713,6.09961 -1.59964,-0.78431 -3.0257,-1.88152 -4.19381,-3.22669 z m -87.58979,-114.65155 c -0.12351,-0.14992 -0.23429,-0.30988 -0.33073,-0.47848 -0.93782,-1.63313 -0.3747,-3.71728 1.25798,-4.65588 1.63315,-0.93906 3.71834,-0.37639 4.6574,1.25675 0.9384,1.63381 0.37447,3.71901 -1.25951,4.65712 -1.43931,0.82726 -3.26518,0.49818 -4.32512,-0.77953 z m -9.26333,-13.5988 c -1.06008,-1.20169 -1.12721,-2.98372 -0.16064,-4.26183 1.12233,-1.48471 3.23578,-1.77843 4.72043,-0.65602 1.48499,1.12286 1.77808,3.23718 0.6545,4.72164 -1.12314,1.48363 -3.23624,1.77608 -4.72012,0.65328 -0.17956,-0.13548 -0.3451,-0.28861 -0.4942,-0.45704 z m -30.49351,-40.95932 c -0.72621,-0.84754 -1.19359,-1.8859 -1.34663,-2.99146 -0.44146,-3.18698 1.78429,-6.12839 4.97129,-6.56973 3.18698,-0.44147 6.1284,1.78428 6.56974,4.97128 0.44077,3.18603 -1.78394,6.12639 -4.96977,6.56851 -1.96483,0.27304 -3.93356,-0.47254 -5.22463,-1.9786 z m 49.54954,58.40757 c -0.22761,-0.29809 -0.41439,-0.62521 -0.55421,-0.97323 -0.85237,-2.1233 0.17739,-4.53561 2.30035,-5.38882 2.1233,-0.85236 4.5356,0.1774 5.38882,2.30035 0.85351,2.12338 -0.17581,4.53665 -2.29913,5.39034 -1.7274,0.69348 -3.70524,0.15007 -4.83583,-1.32864 z m -23.89118,-30.88014 c -0.93577,-1.14571 -1.17161,-2.71079 -0.6147,-4.08125 0.84053,-2.06942 3.19948,-3.06566 5.26891,-2.22519 2.06942,0.84052 3.06566,3.19948 2.22518,5.26892 -0.84052,2.0694 -3.19947,3.06565 -5.2689,2.22518 -0.62784,-0.25474 -1.18162,-0.66312 -1.61049,-1.18766 z m -9.92035,-14.27331 c -0.76081,-1.00799 -1.09878,-2.27285 -0.94218,-3.52599 0.3315,-2.66008 2.75661,-4.5478 5.41671,-4.21641 2.66008,0.33151 4.5478,2.75661 4.2164,5.41671 -0.33086,2.66125 -2.75715,4.54992 -5.41823,4.21764 -1.30174,-0.16248 -2.48228,-0.84496 -3.2727,-1.89195 z m 98.85917,121.36746 c -2.20466,-2.87129 -2.85011,-6.64567 -1.72494,-10.08642 1.88215,-5.75691 8.07518,-8.89766 13.83182,-7.01469 5.75561,1.88268 8.89551,8.07447 7.01344,13.83028 -1.88266,5.75562 -8.07446,8.89554 -13.83028,7.01346 -2.10011,-0.68614 -3.94399,-1.99065 -5.29004,-3.74263 z m -73.88686,-94.15235 c -1.32699,-1.6307 -1.20392,-4.0012 0.28554,-5.48498 1.6016,-1.59464 4.19246,-1.58971 5.78798,0.011 1.59599,1.60144 1.59161,4.19346 -0.01,5.7895 -1.60144,1.59599 -4.19346,1.59161 -5.7895,-0.01 -0.0965,-0.0973 -0.188,-0.1993 -0.27425,-0.30574 z m 20.31012,24.705 c -0.51923,-0.60019 -0.88919,-1.31466 -1.07971,-2.08508 -0.66755,-2.69873 0.97881,-5.4277 3.67745,-6.09566 2.69873,-0.66754 5.4277,0.97881 6.09565,3.67745 0.66824,2.6996 -0.9791,5.42964 -3.67895,6.09688 -1.83817,0.45404 -3.77563,-0.16169 -5.01444,-1.59359 z m -75.69709,-96.004493 c -0.62097,-0.85038 -1.07842,-1.8088 -1.349,-2.82642 -1.20584,-4.53371 1.49228,-9.18647 6.02614,-10.39175 4.53372,-1.20585 9.18648,1.49228 10.39176,6.02615 1.20583,4.53372 -1.49229,9.18646 -6.02615,10.39174 -3.38568,0.90042 -6.97685,-0.37029 -9.04275,-3.19972 z m 88.13027,105.758973 c -0.73079,-0.91549 -1.18316,-2.02166 -1.30349,-3.18685 -0.34724,-3.36028 2.09565,-6.36569 5.45601,-6.71231 3.36029,-0.34724 6.36569,2.09566 6.71231,5.45601 0.34724,3.36029 -2.09566,6.3657 -5.45601,6.71232 -2.0717,0.21391 -4.10986,-0.64116 -5.40882,-2.26917 z m 27.6778,33.88827 c -1.70364,-2.04585 -2.41727,-4.73942 -1.94998,-7.3604 0.87486,-4.90792 5.56287,-8.17725 10.47074,-7.30212 4.90792,0.87487 8.17726,5.56286 7.30213,10.47074 -0.87486,4.90793 -5.56287,8.17727 -10.47075,7.30213 -2.09491,-0.37349 -3.9905,-1.4751 -5.35214,-3.11035 z m -14.31555,-19.92722 c -0.99299,-1.35139 -1.49952,-2.99901 -1.43732,-4.67485 0.15167,-4.09981 3.59756,-7.30077 7.69741,-7.15028 4.09992,0.15087 7.30158,3.59625 7.15179,7.6962 -0.15019,4.10102 -3.59671,7.30366 -7.69771,7.15302 -2.26644,-0.0831 -4.37082,-1.19678 -5.71417,-3.02409 z M -422.77135,-17.928163 c -0.6803,-0.88953 -1.23685,-1.86721 -1.65436,-2.90632 -2.55021,-6.34603 0.52671,-13.55788 6.87262,-16.10839 6.3468,-2.55087 13.55971,0.52696 16.10962,6.87414 2.55086,6.34681 -0.52697,13.55971 -6.87415,16.10962 -5.1625,2.07381 -11.07431,0.4504 -14.45373,-3.96905 z m 78.25907,96.088363 c -1.18701,-1.57678 -1.3153,-3.7108 -0.32576,-5.41844 1.36121,-2.34738 4.3676,-3.14687 6.715,-1.78571 2.34737,1.36122 3.14685,4.3676 1.7857,6.71501 -1.36121,2.34738 -4.36759,3.14686 -6.715,1.7857 -0.56849,-0.33016 -1.06493,-0.77106 -1.45994,-1.29656 z m 16.14196,18.3962 c -0.0767,-0.0887 -0.15029,-0.17995 -0.22073,-0.27364 -1.6491,-2.19692 -1.20473,-5.31477 0.99241,-6.96357 2.19692,-1.64909 5.31478,-1.20474 6.96358,0.99241 1.64909,2.19692 1.20473,5.31478 -0.99242,6.96357 -2.08788,1.56731 -5.03225,1.25343 -6.74284,-0.71877 z m -42.22022,-55.68012 c -0.99083,-1.25363 -1.52818,-2.80573 -1.52468,-4.40363 0.008,-3.908173 3.18258,-7.069963 7.09076,-7.062413 3.90818,0.008 7.06996,3.1826 7.0624,7.090773 -0.007,3.9083 -3.18125,7.0708 -7.08954,7.06392 -2.15986,-0.004 -4.19964,-0.99418 -5.53894,-2.68865 z m 16.95275,18.99684 c -1.26445,-1.48023 -1.71683,-3.48915 -1.20892,-5.3685 0.84896,-3.14393 4.08574,-5.00448 7.22974,-4.15573 3.14394,0.84895 5.00449,4.08575 4.15574,7.22974 -0.84896,3.14395 -4.08575,5.00449 -7.22975,4.15574 -1.14737,-0.30932 -2.17452,-0.95808 -2.94681,-1.86125 z m 40.06407,40.4209 c -0.21548,-0.26871 -0.40715,-0.55569 -0.57357,-0.85724 -1.61205,-2.92178 -0.55024,-6.59716 2.37159,-8.20911 2.92177,-1.61205 6.59715,-0.55024 8.2091,2.37159 1.61146,2.92109 0.55048,6.59542 -2.37006,8.20787 -2.57466,1.4216 -5.79893,0.78278 -7.63706,-1.51311 z m -15.98468,-24.3699 c -1.84148,-2.16099 -1.90594,-5.32005 -0.15414,-7.55435 2.03409,-2.59483 5.78676,-3.04899 8.38114,-1.01432 2.59377,2.0349 3.04668,5.78724 1.01158,8.38085 -2.03436,2.59347 -5.78581,3.04702 -8.37963,1.0131 -0.31311,-0.24577 -0.60087,-0.52223 -0.85895,-0.82528 z M -382.29619,2.439957 c -1.26035,-1.52308 -2.05662,-3.37617 -2.2941,-5.33879 -0.6832,-5.65757 3.34921,-10.79781 9.00675,-11.4812 5.65672,-0.68344 10.79672,3.34745 11.48149,9.00401 0.68414,5.6577 -3.34781,10.79873 -9.00553,11.48272 -3.48733,0.42145 -6.94952,-0.96015 -9.18861,-3.66674 z m 85.94338,104.973533 c -0.39378,-0.53371 -0.71343,-1.11831 -0.95019,-1.73787 -1.44607,-3.78769 0.45261,-8.03043 4.24055,-9.47584 3.78692,-1.44541 8.0286,0.45236 9.47462,4.23904 1.44606,3.7877 -0.45262,8.03043 -4.24056,9.47584 -3.08072,1.17564 -6.56731,0.15263 -8.52442,-2.50117 z m -41.35536,-55.42922 c -1.62167,-2.05779 -1.99066,-4.83669 -0.96215,-7.24635 1.55322,-3.63844 5.76174,-5.32904 9.40035,-3.77622 3.63836,1.55263 5.32957,5.76042 3.77774,9.39912 -1.55275,3.63976 -5.7625,5.33115 -9.40186,3.77745 -1.10362,-0.47099 -2.07125,-1.21165 -2.81408,-2.154 z m -17.12706,-25.583883 c -1.31671,-1.80871 -1.87655,-4.05943 -1.56063,-6.27423 0.66987,-4.70024 5.02277,-7.9678 9.72313,-7.29879 4.70141,0.66924 7.9699,5.02333 7.30002,9.72465 -0.66925,4.70141 -5.02333,7.96989 -9.72465,7.30002 -2.30048,-0.32788 -4.37028,-1.57297 -5.73787,-3.45165 z m 78.58809,93.351213 c -0.90088,-1.07936 -1.53382,-2.35642 -1.8471,-3.72699 -1.09872,-4.8007 1.90234,-9.58312 6.70305,-10.68183 4.8007,-1.09872 9.58312,1.90234 10.68183,6.70304 1.09872,4.8007 -1.90234,9.58313 -6.70305,10.68184 -3.27027,0.74892 -6.68414,-0.40107 -8.83473,-2.97606 z m -35.20421,-44.37883 c -2.30105,-2.92852 -2.00935,-7.12404 0.67475,-9.70603 2.8861,-2.77633 7.47638,-2.68746 10.25284,0.19852 2.77634,2.88609 2.68746,7.47637 -0.1985,10.25284 -2.8861,2.77633 -7.47638,2.68746 -10.25285,-0.19852 -0.16777,-0.17421 -0.32669,-0.35673 -0.47627,-0.54678 z m 56.92523,62.03865 c -1.26593,-1.64435 -2.03295,-3.61769 -2.2098,-5.68534 -0.51057,-5.96132 3.9083,-11.20776 9.86964,-11.71803 5.96119,-0.50968 11.20686,3.90966 11.71653,9.87085 0.51057,5.96133 -3.90829,11.20777 -9.86964,11.71805 -3.67479,0.31411 -7.25693,-1.26301 -9.50673,-4.18553 z m 24.04781,26.17169 c -2.2489,-2.58131 -3.40339,-5.93738 -3.21846,-9.35594 0.39335,-7.25859 6.59709,-12.8236 13.85562,-12.42905 7.25739,0.3948 12.82073,6.59793 12.42631,13.85533 -0.39401,7.25749 -6.59661,12.82153 -13.8541,12.42783 -3.55151,-0.19333 -6.87353,-1.81592 -9.20937,-4.49817 z M -316.60392,46.00895 c -2.53883,-2.84857 -2.92598,-7.01874 -0.95493,-10.286 2.48379,-4.115253 7.83348,-5.437623 11.94854,-2.953523 4.11505,2.48324 5.43803,7.832133 2.95503,11.947323 -2.48324,4.11504 -7.83212,5.43803 -11.94731,2.95503 -0.74666,-0.45085 -1.42131,-1.0114 -2.00133,-1.66283 z m 27.47595,32.39992 c -0.13354,-0.15917 -0.26155,-0.32292 -0.3834,-0.49122 -2.85197,-3.94132 -1.96916,-9.44832 1.97189,-12.30067 3.94133,-2.85197 9.44833,-1.96915 12.30068,1.97189 2.85326,3.94128 1.97093,9.44938 -1.97067,12.3022 -3.74617,2.71023 -8.95019,2.06297 -11.91832,-1.48235 z m -73.05216,-99.914703 c -1.71562,-2.24991 -2.61964,-5.01403 -2.56505,-7.8429 0.13408,-6.92169 5.85376,-12.42424 12.77546,-12.29045 6.9217,0.13407 12.42425,5.85376 12.29046,12.77547 -0.13408,6.92169 -5.85376,12.42424 -12.77546,12.29045 -3.8246,-0.0742 -7.40602,-1.89061 -9.72541,-4.93257 z m 29.43558,34.16664 c -2.19311,-2.6598 -2.9326,-6.23042 -1.9762,-9.54246 1.60029,-5.54207 7.3903,-8.73754 12.93238,-7.13731 5.54208,1.60029 8.73755,7.39029 7.13732,12.93238 -1.60029,5.54207 -7.39029,8.73755 -12.93238,7.13732 -2.0227,-0.58401 -3.82171,-1.76562 -5.16112,-3.38993 z m 69.70483,72.826103 c -0.37218,-0.48257 -0.7024,-0.9961 -0.98719,-1.53487 -2.76572,-5.22378 -0.77294,-11.70055 4.45094,-14.46607 5.22443,-2.76509 11.70123,-0.77103 14.46576,4.45369 2.7645,5.22374 0.77128,11.69948 -4.45217,14.46454 -4.60375,2.43705 -10.29351,1.20545 -13.47734,-2.91729 z m -27.55784,-43.65366 c -3.1946,-3.88492 -3.21018,-9.482583 -0.0371,-13.385143 3.68309,-4.53024 10.34109,-5.21747 14.87189,-1.53508 4.5316,3.68284 5.21945,10.342053 1.5363,14.873413 -3.68338,4.53191 -10.34348,5.21912 -14.87463,1.53478 -0.54718,-0.44484 -1.04847,-0.94332 -1.49641,-1.48797 z m 58.63976,57.81499 c -1.06005,-1.21393 -1.8851,-2.61443 -2.43318,-4.13 -2.44311,-6.75186 1.04963,-14.2059 7.80138,-16.64931 6.75266,-2.44378 14.20775,1.04988 16.65054,7.8029 2.44311,6.75187 -1.04963,14.20589 -7.80138,16.6493 -5.04305,1.82528 -10.6894,0.36661 -14.21736,-3.67289 z M -304.28989,-0.817213 c -2.80764,-3.69426 -3.37494,-8.62644 -1.47934,-12.86167 2.8624,-6.39649 10.36811,-9.26157 16.76471,-6.39942 6.3965,2.86239 9.26159,10.36811 6.39943,16.76472 -2.86193,6.39782 -10.3689,9.26367 -16.76624,6.40065 -1.94075,-0.86876 -3.63206,-2.21131 -4.91856,-3.90428 z m 45.78004,42.234033 c -3.98528,-5.2571 -3.34,-12.678443 1.4928,-17.168833 5.19739,-4.82832 13.32491,-4.52885 18.15287,0.66889 4.82789,5.19682 4.52911,13.323373 -0.66737,18.151643 -5.19739,4.82833 -13.32492,4.52885 -18.15288,-0.66889 -0.29131,-0.31366 -0.56682,-0.64166 -0.82543,-0.9828 z"
+ id="path45821-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccscccccccccccccccccccccccccccscccccccccccccscccccscccccccccccccccccccccccccccccccccccccccscccccccsccccscccccccccccccccccccccccsccccscsccccccccccccccsccccccccscccsscccccccccccccccccccccccccscsccsccccscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccssccscccccsccccsccccccccccccccccccccccccccccccccsccccsccccscccscccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccsscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsscccsccccscccccccccccccccccccccccccccccccscccssscsccccccccccccccsccccccccccccccccssscsccccscccccccccscccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m -812.49649,409.41705 c 0,0 21.28047,1.39989 48.62312,-1.34004 11.07305,-1.10952 53.11134,-5.76585 84.51126,-13.22525 0,0 38.28503,-8.88578 58.7435,-16.9461 21.40602,-8.43701 33.03562,-15.54486 38.22015,-25.52535 -0.24464,-2.03429 1.55026,-9.27004 -8.38153,-13.52748 -25.39181,-10.88453 -54.73028,-8.64173 -112.82256,-9.45878 -64.42866,-1.79156 -85.93924,-12.88053 -97.42045,-21.85886 -11.01351,-9.1133 -5.69808,-34.61479 41.03439,-57.41736 23.53592,-12.13183 115.98191,-34.91594 115.98191,-34.91594 -31.30818,-15.85172 -89.67568,-43.69173 -101.67591,-49.7084 -10.52484,-5.27688 -27.36414,-13.2142 -31.07363,-22.95227 -4.19322,-9.34345 9.60989,-17.53285 17.33633,-19.9086 24.8835,-7.71561 60.05553,-12.67025 92.09363,-13.45346 16.1041,-0.39347 18.71049,-1.49716 18.71049,-1.49716 22.19458,-4.03024 36.70675,-20.030636 30.42527,-45.134176 -5.66246,-25.63018 -34.6335,-40.48327 -62.02024,-35.03909 -25.79016,5.12654 -87.89855,24.51691 -87.89855,24.51691 76.93842,-1.31696 89.82662,-0.08 95.64046,8.27383 3.43335,4.93337 -1.45648,11.77543 -21.95103,15.44194 -22.31219,3.99167 -68.71783,8.95667 -68.71783,8.95667 -44.5297,3.12336 -75.9095,3.56181 -85.16738,24.453236 -6.04831,13.64859 6.74679,25.56844 12.37169,33.04888 23.73629,27.14868 57.83871,41.61862 79.79985,52.2998 8.26321,4.01885 32.47649,11.53874 32.47649,11.53874 -71.01583,-3.50491 -122.05375,19.67737 -151.89702,46.13511 -33.73014,33.09839 -18.41175,72.10252 51.36816,95.63088 41.21482,13.89679 61.6519,20.42399 122.93038,14.16069 36.10363,-2.32533 41.80632,-1.16111 42.18935,1.93181 0.53907,4.35458 -40.00509,15.50966 -51.07121,18.94092 -28.15266,8.7292 -101.98946,26.49291 -102.35909,26.57903 z"
+ id="use9653"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ inkscape:transform-center-y="2.1453047"
+ inkscape:tile-x0="337.8419"
+ inkscape:tile-y0="368.94759"
+ inkscape:transform-center-x="-2.9490228" />
+ </g>
+ <g
+ inkscape:label="logo"
+ id="layer1-9-0"
+ style="display:inline;stroke:none"
+ transform="matrix(0.55257257,0,0,0.55257257,78.970972,8.7652952)">
+ <path
+ style="color:#000000;fill:url(#radialGradient5366-1);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715532999999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 596.41905,752.36218 c 0,108.47925 -87.9398,196.41905 -196.41905,196.41905 -108.47925,0 -196.41905,-87.9398 -196.41905,-196.41905 0,-108.47924 87.9398,-196.41905 196.41905,-196.41905 108.47925,0 196.41905,87.93981 196.41905,196.41905 z"
+ id="path54245-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;fill:#59509f;fill-opacity:0.99215686000000003;fill-rule:nonzero;stroke:none;stroke-width:1.19700003000000010;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 246.71273,875.02715 c 5.30707,-1.91678 11.21951,-1.07383 15.77945,2.24972 6.38683,4.67105 8.49739,13.29908 5.38115,20.57227 12.14398,11.00811 25.39824,20.45943 39.88974,28.11784 3.68734,-6.41948 11.5721,-9.83951 18.78293,-8.16326 9.02961,2.10252 14.64463,11.12745 12.54091,20.15677 -0.0896,0.35677 -0.19093,0.71049 -0.30378,1.0606 15.57369,5.04379 31.71723,8.11936 48.05451,9.15505 -1.01104,-8.7225 4.95288,-16.72102 13.60117,-18.24127 9.02229,-1.57386 17.61208,4.46455 19.18548,13.48693 0.23908,1.41366 0.29382,2.85238 0.16284,4.28012 16.62401,-1.6842 32.96491,-5.48438 48.6262,-11.30833 -0.33933,-0.41747 -0.65852,-0.8509 -0.95541,-1.29955 -4.91386,-7.59756 -2.73772,-17.74012 4.86036,-22.65318 7.59692,-4.91331 17.73846,-2.73794 22.65196,4.85885 1.08924,1.69488 1.85648,3.57615 2.26323,5.54937 9.13587,-5.12543 17.84673,-10.97404 26.04911,-17.48978 4.92512,-4.05567 9.64954,-8.34908 14.15644,-12.86493 -0.7586,-0.35369 -1.48864,-0.7657 -2.18351,-1.23232 -7.39953,-5.01207 -9.3356,-15.0733 -4.32456,-22.47351 5.01174,-7.40089 15.0742,-9.33762 22.47503,-4.32579 1.78793,1.21147 3.31531,2.76856 4.49212,4.5795 9.86282,-13.43645 17.9739,-28.07453 24.13738,-43.56082 -0.68657,-0.0382 -1.36996,-0.12057 -2.04592,-0.24672 -8.66506,-1.70098 -14.31034,-10.10459 -12.60879,-18.76953 1.70158,-8.66385 10.10398,-14.30823 18.76801,-12.60757 1.88133,0.3763 3.67957,1.08815 5.30871,2.1015 3.50739,-15.83095 5.03944,-32.03554 4.56115,-48.24332 -0.2772,0.0764 -0.55644,0.14512 -0.83739,0.20623 -8.53607,1.79747 -16.91306,-3.66524 -18.71053,-12.20131 -1.79747,-8.53607 3.66525,-16.91306 12.20133,-18.71053 1.41178,-0.29142 2.85682,-0.3882 4.29486,-0.28765 -2.93469,-15.4206 -7.70875,-30.43344 -14.21986,-44.71674 -7.05457,4.60498 -16.49076,2.77874 -21.31784,-4.12577 -4.93035,-7.06855 -3.19668,-16.79562 3.87217,-21.72555 0.83185,-0.57788 1.71803,-1.07333 2.64593,-1.47943 -3.46207,-5.27744 -7.17669,-10.3848 -11.13091,-15.30428 -5.68959,-6.93614 -11.84801,-13.47404 -18.43199,-19.56769 -4.82679,6.34987 -13.70035,7.96905 -20.45875,3.73318 -7.21117,-4.52518 -9.38873,-14.03929 -4.86378,-21.2506 0.40059,-0.6274 0.84611,-1.22495 1.33305,-1.78798 -12.41641,-8.42207 -25.75757,-15.39266 -39.76209,-20.7752 -1.80346,4.47435 -5.64318,7.8125 -10.32487,8.97615 -8.06632,1.99539 -16.22285,-2.92647 -18.21758,-10.99296 -0.54302,-2.22521 -0.57078,-4.54503 -0.0812,-6.7826 -14.85942,-3.19105 -30.03921,-4.64532 -45.2342,-4.3336 1.86804,8.01264 -3.04689,16.03973 -11.03281,18.01887 -8.06632,1.99539 -16.22284,-2.92647 -18.21758,-10.99296 -0.3548,-1.44099 -0.49445,-2.92656 -0.4144,-4.40843 -15.14883,2.61374 -29.93813,6.99823 -44.06378,13.06328 0.62478,0.58648 1.19766,1.22589 1.71226,1.91109 4.92654,6.56452 3.59952,15.87973 -2.96416,20.80739 -6.56446,4.92784 -15.88078,3.60131 -20.80891,-2.96294 -1.51864,-2.0258 -2.49452,-4.40601 -2.83521,-6.91481 -7.42416,4.43358 -14.54721,9.35296 -21.32258,14.72598 -6.17316,5.08504 -12.02978,10.5426 -17.53702,16.34224 2.42068,0.0763 4.78493,0.75011 6.88208,1.96152 7.01434,4.06792 9.4034,13.05153 5.33636,20.06639 -4.06754,7.0157 -13.05241,9.40546 -20.06792,5.33758 -3.72641,-2.16811 -6.31166,-5.86438 -7.07005,-10.10839 -37.96812,49.55357 -50.09792,114.21401 -32.67095,174.15927 2.96174,1.46395 5.43916,3.74997 7.136,6.58472 2.83741,4.75705 3.21007,10.58949 1.00115,15.66897 6.89206,16.19628 15.93154,31.39185 26.87526,45.1779 z m -8.50817,-35.53011 c -4.90963,-6.08526 -3.95644,-14.99839 2.12897,-19.90783 6.08593,-4.90878 14.99893,-3.95437 19.90753,2.13171 4.9083,6.08535 3.95462,14.99735 -2.1302,19.90631 -6.08534,4.90831 -14.99735,3.95462 -19.9063,-2.13019 z m 47.38703,49.78827 c -3.53469,-4.36911 -4.11121,-10.42946 -1.46335,-15.38646 3.63858,-6.81387 12.11212,-9.3877 18.92576,-5.74871 6.81401,3.63914 9.38724,12.11345 5.74718,18.92697 -3.63955,6.81267 -12.11262,9.38517 -18.92545,5.74596 -1.65027,-0.88088 -3.10705,-2.08387 -4.28414,-3.53776 z M 213.50702,774.09846 c -1.07227,-1.41607 -1.87186,-3.01919 -2.35812,-4.72756 -2.1667,-7.61133 2.2465,-15.53812 9.85758,-17.70572 7.61218,-2.16738 15.54002,2.24679 17.70694,9.8591 2.16669,7.61134 -2.24651,15.53811 -9.85758,17.70571 -5.68495,1.61871 -11.7805,-0.41919 -15.34882,-5.13153 z m 64.61074,65.20147 c -3.93971,-4.50583 -3.82535,-11.26356 0.26457,-15.63352 4.39865,-4.69931 11.77423,-4.94239 16.47274,-0.5429 4.69758,4.39828 4.94076,11.77174 0.54319,16.46999 -4.39809,4.69894 -11.77275,4.94269 -16.47152,0.54442 -0.28344,-0.26569 -0.55347,-0.54533 -0.80898,-0.83799 z m 69.83284,77.01637 c -2.26549,-2.79125 -3.3539,-6.35556 -3.03413,-9.93624 0.67978,-7.60057 7.39243,-13.21092 14.99298,-12.53096 7.60064,0.67902 13.21168,7.3911 12.53247,14.99174 -0.67977,7.60057 -7.3924,13.21092 -14.99296,12.53097 -3.71917,-0.33246 -7.14545,-2.1561 -9.49836,-5.05551 z M 250.512,788.78667 c -0.67676,-0.82462 -1.23918,-1.73678 -1.67097,-2.71227 -2.63734,-5.95578 0.0519,-12.92196 6.00705,-15.5607 5.9566,-2.63915 12.92481,0.0505 15.56345,6.00733 2.63797,5.95653 -0.0521,12.92375 -6.00856,15.56193 -4.84509,2.14613 -10.52669,0.7979 -13.89097,-3.29629 z m 71.94488,85.67888 c -2.77528,-3.16589 -3.60105,-7.59424 -2.15333,-11.54761 2.18621,-5.97027 8.79826,-9.03796 14.76861,-6.85194 5.97027,2.18621 9.03795,8.79826 6.85193,14.7686 -2.18622,5.97027 -8.79827,9.03795 -14.76861,6.85193 -1.8113,-0.66309 -3.42696,-1.77065 -4.6986,-3.22098 z m -12.33306,-40.45213 c -2.57194,-3.32724 -2.67668,-7.94179 -0.25842,-11.38235 3.04658,-4.33415 9.02988,-5.37787 13.36396,-2.3312 4.33416,3.04658 5.37788,9.02988 2.33119,13.36397 -3.04657,4.33415 -9.02987,5.37788 -13.36396,2.33119 -0.78631,-0.55295 -1.48504,-1.22094 -2.07277,-1.98161 z m -27.65294,-37.31354 c -0.36817,-0.41324 -0.70042,-0.85714 -0.99272,-1.32716 -2.83245,-4.55291 -1.43812,-10.53991 3.11446,-13.37291 4.55291,-2.8337 10.54097,-1.43984 13.37443,3.11324 2.83427,4.55357 1.4396,10.54266 -3.11476,13.37566 -4.01255,2.49607 -9.23942,1.74089 -12.38137,-1.78886 z m -65.97761,-92.83373 c -2.27367,-3.01164 -3.28423,-6.79076 -2.81723,-10.53529 0.99148,-7.94898 8.23869,-13.58948 16.1878,-12.59894 7.95016,0.99084 13.59159,8.23924 12.60017,16.18932 -0.99222,7.94892 -8.24,13.58875 -16.18902,12.59743 -3.89047,-0.48485 -7.41901,-2.52388 -9.78172,-5.65252 z m 28.3976,27.31775 c -1.70791,-2.0849 -2.66015,-4.68633 -2.70197,-7.38114 -0.10281,-6.59343 5.15873,-12.02187 11.75215,-12.12494 6.59449,-0.1035 12.02394,5.15915 12.12619,11.75367 0.10196,6.59331 -5.16008,12.02103 -11.75339,12.12343 -3.64341,0.0571 -7.1135,-1.55251 -9.42298,-4.37102 z m 105.4186,126.43488 c -1.71251,-2.20912 -2.36234,-5.06163 -1.77573,-7.79454 1.09763,-5.1172 6.13572,-8.37572 11.25294,-7.27815 5.1172,1.09764 8.37572,6.13573 7.27815,11.25294 -1.09764,5.1172 -6.13573,8.37573 -11.25294,7.27815 -2.18446,-0.46815 -4.13328,-1.69304 -5.50242,-3.4584 z m 26.08452,31.74822 c -1.69544,-1.92738 -2.68901,-4.37164 -2.81913,-6.93531 -0.3169,-6.27354 4.51213,-11.61605 10.78569,-11.93253 6.27354,-0.31692 11.61605,4.51213 11.93253,10.78568 0.31623,6.27251 -4.51172,11.61401 -10.78417,11.9313 -3.46648,0.17503 -6.82314,-1.24246 -9.11492,-3.84914 z m -67.24634,-90.15409 c -2.83099,-3.38669 -2.38052,-8.4271 1.00612,-11.25814 3.38727,-2.83145 8.42867,-2.38026 11.25936,1.00764 2.83098,3.38669 2.38052,8.4271 -1.00612,11.25814 -3.38727,2.83146 -8.42868,2.38026 -11.25936,-1.00764 z m -37.86533,-48.83185 c -1.25019,-1.40839 -2.06938,-3.14633 -2.36017,-5.00696 -0.83902,-5.3628 2.82813,-10.3904 8.1909,-11.22959 5.36375,-0.83972 10.3924,2.82847 11.23083,8.19242 0.83806,5.36268 -2.82955,10.38947 -8.19214,11.22808 -3.3057,0.5176 -6.64765,-0.6821 -8.86942,-3.18395 z m 65.1051,76.46878 c -2.03769,-2.43146 -2.42228,-5.84637 -0.97646,-8.67017 1.98735,-3.8811 6.74444,-5.41661 10.62583,-3.4298 3.88111,1.98735 5.41662,6.74444 3.4298,10.62584 -1.98734,3.8811 -6.74443,5.41661 -10.62583,3.4298 -0.94036,-0.48122 -1.77461,-1.14624 -2.45334,-1.95567 z m 78.75091,90.02543 c -1.06755,-1.31226 -1.88223,-2.81131 -2.40202,-4.42113 -2.31608,-7.17397 1.62206,-14.86716 8.79606,-17.18317 7.17396,-2.31608 14.86716,1.62206 17.18317,8.79606 2.31607,7.17397 -1.62206,14.86716 -8.79606,17.18317 -5.3578,1.72962 -11.22787,-0.008 -14.78115,-4.37493 z M 294.56263,762.5422 c -0.61891,-0.78907 -1.08572,-1.68633 -1.37664,-2.64605 -1.29818,-4.27511 1.11486,-8.7932 5.38985,-10.09177 4.27511,-1.29818 8.7932,1.11487 10.09177,5.38985 1.29886,4.27595 -1.11514,8.7951 -5.39137,10.093 -3.19269,0.96938 -6.65302,-0.12072 -8.71361,-2.74503 z m 36.69707,35.65901 c -1.85944,-2.51833 -1.68691,-5.9981 0.41254,-8.32013 2.43633,-2.69573 6.59668,-2.90596 9.29235,-0.46958 2.69572,2.43633 2.90596,6.59668 0.46958,9.29235 -2.43633,2.69572 -6.59668,2.90596 -9.29235,0.46958 -0.32571,-0.29387 -0.6212,-0.61957 -0.88214,-0.9722 z m 40.59425,43.29306 c -1.30606,-1.55331 -1.95539,-3.55445 -1.81008,-5.57867 0.30849,-4.29736 4.04251,-7.53082 8.33983,-7.22182 4.29735,0.30849 7.53081,4.04251 7.22181,8.33983 -0.30848,4.29735 -4.04251,7.53081 -8.33982,7.22181 -2.10294,-0.1512 -4.05512,-1.14722 -5.41174,-2.76115 z m -56.25794,-71.026 c -0.39029,-0.45835 -0.7166,-0.96752 -0.97002,-1.5136 -1.54849,-3.33611 -0.0993,-7.29587 3.23682,-8.84432 3.33612,-1.54849 7.29588,-0.0993 8.84433,3.23682 1.54849,3.33612 0.0993,7.29588 -3.23682,8.84433 -2.71385,1.25967 -5.93466,0.55483 -7.87431,-1.72323 z m 41.04395,47.15107 c -1.27668,-1.72409 -1.62029,-3.96715 -0.91833,-5.99438 1.17551,-3.39117 4.87729,-5.18757 8.26864,-4.01262 3.39112,1.1749 5.18814,4.876 4.01413,8.26743 -1.17437,3.3924 -4.8767,5.19024 -8.26894,4.01535 -1.23759,-0.42932 -2.31658,-1.22258 -3.0955,-2.27578 z m 39.35607,45.98568 c -0.90641,-1.16522 -1.52444,-2.52828 -1.80359,-3.9779 -0.97747,-5.07774 2.34693,-9.98631 7.42483,-10.96295 5.07774,-0.97747 9.98631,2.34694 10.96294,7.42483 0.97748,5.07774 -2.34692,9.98631 -7.42483,10.96296 -3.45843,0.66533 -6.99764,-0.66659 -9.15935,-3.44694 z m -46.30495,-68.19417 c -1.48557,-1.85277 -1.59011,-4.45748 -0.25846,-6.42379 1.67696,-2.47747 5.04511,-3.12583 7.52196,-1.44794 2.4761,1.67728 3.1238,5.04419 1.44672,7.52042 -1.67696,2.47748 -5.04511,3.12585 -7.52196,1.44796 -0.44873,-0.30402 -0.84928,-0.67369 -1.18826,-1.09665 z m -16.32816,-21.21208 c -0.0772,-0.10369 -0.15143,-0.20955 -0.22147,-0.3182 -1.64387,-2.54174 -0.91639,-5.93481 1.62498,-7.57923 2.54238,-1.64442 5.93649,-0.91617 7.58048,1.6265 1.64259,2.54176 0.91465,5.93376 -1.62622,7.57773 -2.41552,1.56258 -5.62804,0.992 -7.35773,-1.30683 z m -54.16526,-71.35903 c -2.17661,-2.45916 -2.99942,-5.83404 -2.19889,-9.01905 1.33996,-5.32809 6.7451,-8.56144 12.07339,-7.22229 5.3281,1.33929 8.56209,6.74381 7.22381,12.07217 -1.33871,5.32934 -6.74444,8.5642 -12.07368,7.22504 -1.94454,-0.48902 -3.69595,-1.55419 -5.02463,-3.05587 z m 16.35906,20.02783 c -1.31354,-1.67788 -1.92134,-3.8017 -1.69434,-5.92046 0.4817,-4.49635 4.51667,-7.75123 9.01313,-7.2706 4.49751,0.48105 7.75334,4.5172 7.27183,9.01466 -0.4817,4.49635 -4.51667,7.75123 -9.01314,7.2706 -2.20092,-0.23526 -4.21288,-1.35143 -5.57748,-3.0942 z m 16.29866,15.1406 c -0.98507,-1.16016 -1.54849,-2.61958 -1.59866,-4.1407 -0.12299,-3.72141 2.79448,-6.83774 6.5159,-6.96004 3.72141,-0.12299 6.83773,2.79448 6.96003,6.51591 0.1223,3.72035 -2.79405,6.83566 -6.51438,6.95879 -2.05624,0.0685 -4.0312,-0.80572 -5.36289,-2.37396 z M 262.4588,675.34176 c -2.79591,-3.42316 -3.50032,-8.09946 -1.83689,-12.19435 2.51228,-6.18373 9.5615,-9.16036 15.74552,-6.64877 6.18373,2.51229 9.16036,9.56151 6.64877,15.74552 -2.51229,6.18372 -9.5615,9.16035 -15.74551,6.64877 -1.87612,-0.76194 -3.53074,-1.98304 -4.81189,-3.55117 z m 168.77519,206.7959 c -0.67203,-0.76205 -1.23758,-1.61174 -1.68118,-2.52584 -2.70933,-5.58219 -0.38073,-12.3038 5.20122,-15.01358 5.58291,-2.70995 12.30556,-0.38049 15.01481,5.20275 2.70933,5.58219 0.38072,12.30379 -5.20123,15.01358 -4.54124,2.20425 -9.99505,1.10933 -13.33362,-2.67691 z m -58.62645,-73.8004 c -0.98818,-1.2298 -1.38346,-2.83291 -1.07986,-4.38103 0.56956,-2.89928 3.38158,-4.78789 6.28086,-4.21839 2.89931,0.56886 4.78858,3.38029 4.21989,6.27963 -0.56955,2.89928 -3.38157,4.78789 -6.28085,4.21838 -1.23776,-0.24291 -2.3499,-0.91534 -3.14004,-1.89859 z m 14.62863,17.17031 c -0.73333,-0.98761 -1.16752,-2.16508 -1.25094,-3.39235 -0.24001,-3.53734 2.43248,-6.59971 5.96976,-6.84067 3.53748,-0.24091 6.60062,2.43111 6.8422,5.96853 0.24161,3.5385 -2.43151,6.60266 -5.97006,6.84344 -2.18117,0.14822 -4.28788,-0.82354 -5.59096,-2.57895 z M 348.7977,775.77546 c -1.63192,-1.88368 -1.42771,-4.73367 0.45615,-6.36537 1.88436,-1.63106 4.7342,-1.42561 6.36509,0.4589 1.63059,1.88378 1.42585,4.73262 -0.45739,6.36385 -1.88379,1.63059 -4.73263,1.42585 -6.36385,-0.45738 z m -22.211,-27.61824 c -0.52473,-0.70018 -0.87636,-1.51457 -1.02629,-2.3766 -0.52593,-3.01878 1.49471,-5.89241 4.51344,-6.41872 3.01878,-0.52592 5.89241,1.49472 6.41871,4.51344 0.52593,3.01878 -1.49471,5.89241 -4.51344,6.41872 -2.05631,0.35868 -4.13995,-0.467 -5.39242,-2.13684 z m 37.85857,42.9503 c -1.174,-1.35217 -1.42497,-3.27559 -0.63716,-4.88369 1.08347,-2.21064 3.75382,-3.12444 5.96451,-2.04102 2.21051,1.0829 3.12491,3.7525 2.04254,5.96328 -1.08303,2.21198 -3.75464,3.12652 -5.96602,2.04225 -0.53557,-0.26271 -1.01295,-0.63025 -1.40387,-1.08082 z m -24.24273,-35.88883 c -0.35774,-0.43871 -0.63015,-0.94055 -0.80425,-1.47919 -0.77529,-2.40111 0.54324,-4.97601 2.94462,-5.75045 2.40031,-0.77462 4.97413,0.54296 5.74923,2.94311 0.77462,2.40031 -0.54296,4.97413 -2.94311,5.74923 -1.7927,0.57923 -3.75712,-0.002 -4.94649,-1.4627 z m 69.58314,85.93034 c -0.61562,-0.73021 -1.09017,-1.56845 -1.39942,-2.47208 -1.37896,-4.02677 0.76781,-8.40893 4.79474,-9.78739 4.02667,-1.37786 8.40791,0.76936 9.78587,4.79598 1.37896,4.02676 -0.76782,8.40892 -4.79475,9.78738 -3.00723,1.029 -6.33771,0.10612 -8.38644,-2.32389 z m -48.51672,-66.16408 c -1.07353,-1.40312 -1.01022,-3.36824 0.15147,-4.69929 1.34894,-1.54572 3.6956,-1.70505 5.2411,-0.35586 1.54572,1.34895 1.70505,3.6956 0.35585,5.2411 -1.34894,1.54572 -3.6956,1.70506 -5.2411,0.35586 -0.18678,-0.16321 -0.35671,-0.34474 -0.50733,-0.5418 z m -9.11547,-15.49974 c -0.22471,-0.25452 -0.41401,-0.53824 -0.56254,-0.84357 -0.90741,-1.86826 -0.12802,-4.11837 1.74058,-5.02509 1.86826,-0.90742 4.11837,-0.12803 5.0251,1.74057 0.9062,1.86821 0.12638,4.11732 -1.74181,5.02357 -1.51944,0.73746 -3.34416,0.3712 -4.46133,-0.89548 z m 32.45672,39.53878 c -0.75273,-0.86369 -1.13927,-1.98672 -1.07754,-3.13073 0.132,-2.42823 2.20721,-4.28984 4.63546,-4.15833 2.42934,0.13133 4.29192,2.2077 4.15956,4.63697 -0.132,2.42823 -2.20721,4.28984 -4.63546,4.15834 -1.18871,-0.0649 -2.3005,-0.60823 -3.08202,-1.50625 z m -8.82448,-13.32547 c -0.73722,-0.96073 -0.95288,-2.22334 -0.57645,-3.37434 0.62952,-1.92636 2.70152,-2.9776 4.62784,-2.34795 1.92637,0.62951 2.97762,2.70152 2.34797,4.62785 -0.63016,1.92639 -2.70283,2.97701 -4.62908,2.34643 -0.70274,-0.22947 -1.31978,-0.66586 -1.77028,-1.25199 z m 22.66784,25.56845 c -0.52265,-0.64873 -0.88455,-1.41182 -1.05618,-2.22702 -0.60115,-2.85657 1.22737,-5.65956 4.08398,-6.2605 2.8558,-0.60146 5.65859,1.2256 6.2608,4.08125 0.60215,2.8567 -1.22593,5.66054 -4.08277,6.26202 -1.94623,0.41023 -3.95797,-0.30691 -5.20583,-1.85575 z m -26.80881,-38.03713 c -0.85646,-1.03164 -0.94084,-2.50094 -0.20807,-3.62382 0.92246,-1.41373 2.81611,-1.81233 4.2302,-0.89044 1.4151,0.92212 1.81436,2.817 0.89167,4.23172 -0.92301,1.41395 -2.81749,1.81194 -4.23143,0.88891 -0.25651,-0.16684 -0.48654,-0.37124 -0.68237,-0.60637 z m -9.42535,-11.81191 c -0.0451,-0.0574 -0.0878,-0.11677 -0.12825,-0.17761 -0.95408,-1.41903 -0.57654,-3.34288 0.84308,-4.29609 1.41906,-0.95281 3.34184,-0.57479 4.29458,0.84431 0.95227,1.41842 0.57503,3.34018 -0.84279,4.29335 -1.3479,0.90644 -3.16721,0.61653 -4.16664,-0.66395 z m -31.63666,-40.18022 c -0.99168,-1.32651 -1.34738,-3.02306 -0.972,-4.63617 0.70353,-3.02165 3.72368,-4.90061 6.74519,-4.19647 3.02041,0.70412 4.8985,3.72305 4.19525,6.74367 -0.70344,3.02044 -3.72177,4.89916 -6.74245,4.19676 -1.29025,-0.30019 -2.43288,-1.04675 -3.22599,-2.10779 z m 9.78954,11.57585 c -0.75819,-0.93353 -1.12199,-2.12618 -1.01518,-3.32406 0.22713,-2.54418 2.47435,-4.42212 5.01843,-4.19375 2.54304,0.22779 4.42002,2.47384 4.19251,5.01691 -0.22778,2.54305 -2.47384,4.42003 -5.01691,4.19253 -1.24468,-0.11111 -2.39139,-0.72132 -3.17885,-1.69163 z m -19.15127,-26.50053 c -1.61213,-1.90485 -2.05586,-4.5378 -1.15705,-6.86579 1.35749,-3.51517 5.30737,-5.26454 8.82271,-3.90749 3.5151,1.35688 5.26507,5.30606 3.909,8.82147 -1.35639,3.51641 -5.3068,5.26717 -8.82299,3.91024 -1.06684,-0.41191 -2.01305,-1.08534 -2.75167,-1.95843 z m 28.50146,34.88755 c -0.56702,-0.64541 -0.89898,-1.46368 -0.94188,-2.32172 -0.1055,-2.09842 1.50951,-3.88534 3.60788,-3.9919 2.09855,-0.10637 3.8862,1.50814 3.99342,3.60665 0.10618,2.09946 -1.50992,3.88738 -3.6094,3.99313 -1.15965,0.059 -2.28279,-0.4146 -3.05002,-1.28616 z m 90.15982,110.24719 c -0.13405,-0.17254 -0.26196,-0.34974 -0.38341,-0.53136 -2.84888,-4.24 -1.72086,-9.98669 2.51939,-12.83517 4.24002,-2.84759 9.98563,-1.71913 12.83365,2.52062 2.84887,4.23999 1.72086,9.98668 -2.51939,12.83516 -4.02909,2.7067 -9.46514,1.83814 -12.45021,-1.98928 z m -55.17406,-71.14752 c -0.5698,-0.68471 -0.80831,-1.58601 -0.65175,-2.46292 0.29349,-1.64139 1.86156,-2.73444 3.50313,-2.44192 1.64144,0.29279 2.73515,1.86027 2.44344,3.5019 -0.29216,1.64265 -1.86085,2.73727 -3.50342,2.44467 -0.7013,-0.12512 -1.3358,-0.4941 -1.7914,-1.04173 z m -26.57025,-33.51696 c -0.30297,-0.38991 -0.50907,-0.84618 -0.60204,-1.33114 -0.32662,-1.69877 0.78554,-3.34073 2.48425,-3.66767 1.69877,-0.32662 3.34072,0.78553 3.66767,2.48424 0.32661,1.69876 -0.78553,3.34072 -2.48424,3.66767 -1.15743,0.223 -2.34208,-0.22258 -3.06564,-1.1531 z m 59.98659,74.10847 c -0.21571,-0.28923 -0.40637,-0.59631 -0.56986,-0.91797 -1.58513,-3.12445 -0.33704,-6.94231 2.78759,-8.5271 3.12445,-1.58513 6.94231,-0.33704 8.5271,2.78758 1.58514,3.12445 0.33705,6.94232 -2.78758,8.52711 -2.75392,1.39662 -6.11343,0.60728 -7.95725,-1.86962 z m -24.98904,-31.04345 c -0.42366,-0.55037 -0.68037,-1.21081 -0.73948,-1.90284 -0.17051,-1.99421 1.30747,-3.74923 3.30161,-3.92049 1.99521,-0.1712 3.75126,1.30786 3.92172,3.30313 0.17121,1.99522 -1.30785,3.75126 -3.30313,3.92173 -1.22969,0.10474 -2.42819,-0.42336 -3.18072,-1.40153 z m -22.18903,-27.6937 c -0.93832,-1.04725 -0.85062,-2.65674 0.19591,-3.59587 1.04714,-0.93964 2.65775,-0.85249 3.59739,0.19467 0.93964,1.04715 0.85249,2.65776 -0.19468,3.5974 -1.04771,0.94009 -2.65931,0.85223 -3.59862,-0.1962 z M 476.7524,891.79775 c -4.87546,-5.62979 -4.26387,-14.14601 1.36602,-19.02137 5.6298,-4.87546 14.14601,-4.26387 19.02138,1.36602 4.87545,5.62979 4.26386,14.14601 -1.36602,19.02137 -5.6298,4.87546 -14.14602,4.26387 -19.02138,-1.36602 z M 379.77203,770.46049 c -0.54453,-0.74273 -0.63989,-1.72358 -0.24859,-2.55728 0.59018,-1.2587 2.08913,-1.80047 3.34768,-1.20989 1.2587,0.59019 1.80048,2.08913 1.20989,3.34768 -0.59063,1.25737 -2.08837,1.79833 -3.34616,1.20866 -0.38197,-0.17827 -0.71304,-0.44963 -0.96282,-0.78917 z m -67.584,-84.13022 c -2.04919,-2.62521 -2.32846,-6.22184 -0.70899,-9.13185 2.227,-3.99977 7.27468,-5.43707 11.27461,-3.21036 3.99977,2.22699 5.43707,7.27467 3.21037,11.2746 -2.227,3.99977 -7.27467,5.43707 -11.27461,3.21037 -0.96872,-0.53975 -1.8193,-1.26839 -2.50138,-2.14276 z m 53.70475,64.30526 c -0.20525,-0.2449 -0.36399,-0.52529 -0.467,-0.82779 -0.46089,-1.34726 0.25745,-2.8131 1.60461,-3.27429 1.34726,-0.4609 2.8131,0.25745 3.27429,1.60461 0.4609,1.34726 -0.25745,2.81308 -1.60462,3.27428 -1.00641,0.34497 -2.12136,0.0365 -2.80728,-0.77681 z m 40.12516,47.81945 c -0.35474,-0.40568 -0.63105,-0.87372 -0.81483,-1.38032 -0.81805,-2.25993 0.3514,-4.75504 2.61165,-5.57218 2.25913,-0.81739 4.75318,0.35114 5.57095,2.61014 0.81806,2.25993 -0.3514,4.75504 -2.61165,5.57218 -1.68729,0.60999 -3.576,0.12162 -4.75612,-1.22982 z M 377.9785,761.58622 c -0.62002,-0.78135 -0.60322,-1.89151 0.0396,-2.65423 0.74601,-0.88606 2.06911,-0.99946 2.95501,-0.25325 0.88607,0.746 0.99947,2.06912 0.25326,2.95502 -0.74601,0.88607 -2.06913,0.99946 -2.95502,0.25324 -0.10744,-0.0902 -0.20555,-0.19095 -0.29285,-0.30076 z m -5.43112,-8.82324 c -0.072,-0.0972 -0.13603,-0.20001 -0.19068,-0.3079 -0.52958,-1.04482 -0.11264,-2.32113 0.93159,-2.85184 1.04557,-0.53138 2.32394,-0.11405 2.85459,0.93189 0.53016,1.04552 0.1124,2.32288 -0.93313,2.85306 -0.92136,0.46727 -2.04531,0.20333 -2.66238,-0.6252 z m 18.68605,21.96998 c -0.33232,-0.45211 -0.50194,-1.00335 -0.48127,-1.56407 0.0509,-1.3723 1.20467,-2.44348 2.57696,-2.39242 1.37131,0.0507 2.44221,1.20287 2.39271,2.57421 -0.05,1.37241 -1.20334,2.44429 -2.57573,2.39393 -0.75856,-0.0276 -1.46298,-0.40014 -1.91267,-1.01165 z m -4.95434,-7.24298 c -0.42543,-0.53534 -0.55939,-1.24607 -0.35788,-1.89949 0.33667,-1.09294 1.49529,-1.70631 2.58842,-1.37031 1.09421,0.33611 1.70843,1.49597 1.37154,2.58994 -0.33729,1.09295 -1.49658,1.7057 -2.58965,1.36878 -0.39919,-0.12236 -0.75209,-0.3625 -1.01243,-0.68892 z m 13.04816,14.20939 c -0.30164,-0.36119 -0.51416,-0.78821 -0.61938,-1.2469 -0.36736,-1.60649 0.63716,-3.2066 2.24365,-3.57396 1.60661,-0.36839 3.2076,0.63569 3.57549,2.24242 0.36736,1.60649 -0.63715,3.20662 -2.24365,3.57397 -1.09419,0.25062 -2.23644,-0.13407 -2.95611,-0.99553 z M 360.12788,731.5497 c -0.57264,-0.73934 -0.78971,-1.69375 -0.59318,-2.60804 0.36761,-1.71176 2.05296,-2.80167 3.76487,-2.43474 1.71176,0.36762 2.80169,2.05296 2.43475,3.76487 -0.36761,1.71177 -2.05297,2.80168 -3.76487,2.43475 -0.73103,-0.15648 -1.38328,-0.56619 -1.84157,-1.15684 z m 18.25452,22.36827 c -0.0263,-0.0323 -0.0516,-0.0655 -0.0754,-0.0998 -0.55084,-0.79164 -0.35605,-1.87989 0.43518,-2.43132 0.79099,-0.5516 1.8793,-0.35804 2.43161,0.43244 0.55211,0.79162 0.35782,1.88094 -0.43395,2.43284 -0.75184,0.52413 -1.78089,0.37824 -2.3574,-0.33422 z m 5.43694,6.57515 c -0.4941,-0.57398 -0.55635,-1.40299 -0.15347,-2.0443 0.50686,-0.80707 1.5719,-1.05061 2.37916,-0.54406 0.80707,0.50687 1.05061,1.57192 0.54404,2.37917 -0.50631,0.80684 -1.57053,1.05101 -2.37792,0.54557 -0.1467,-0.0919 -0.27878,-0.20528 -0.39184,-0.33636 z m -18.04952,-22.50604 c -0.43752,-0.51945 -0.65536,-1.18899 -0.60724,-1.86645 0.10312,-1.43806 1.35263,-2.52016 2.79067,-2.41677 1.43807,0.10313 2.52016,1.35264 2.41677,2.79068 -0.10313,1.43807 -1.35264,2.52016 -2.79068,2.41677 -0.70325,-0.051 -1.35594,-0.3844 -1.80952,-0.92423 z m -11.0714,-14.77011 c -0.92928,-1.05881 -1.2064,-2.54048 -0.72272,-3.86362 0.7313,-1.99854 2.9446,-3.02548 4.94286,-2.29341 1.99724,0.7318 3.02338,2.94388 2.29219,4.94134 -0.7318,1.99724 -2.94388,3.02337 -4.94134,2.29219 -0.60551,-0.2217 -1.14568,-0.59184 -1.57099,-1.0765 z m -49.30493,-61.4982 c -3.16954,-3.59187 -3.37021,-8.91931 -0.47989,-12.73944 3.35534,-4.4349 9.67034,-5.31057 14.1058,-1.95597 4.43626,3.35506 5.31254,9.67127 1.95718,14.10731 -3.3556,4.43654 -9.67267,5.31219 -14.10852,1.95567 -0.53593,-0.40552 -1.02991,-0.86366 -1.47457,-1.36757 z m 65.59918,80.74267 c -0.24475,-0.33016 -0.3897,-0.72358 -0.41761,-1.13362 -0.0813,-1.1839 0.81269,-2.20948 1.99659,-2.29063 1.18378,-0.0803 2.2086,0.81406 2.28911,1.99782 0.0813,1.1839 -0.81268,2.20948 -1.99659,2.29063 -0.73031,0.0495 -1.43561,-0.27614 -1.8715,-0.8642 z m 4.94147,3.23587 c -0.17441,-0.21704 -0.29508,-0.4722 -0.35228,-0.74468 -0.20161,-0.95591 0.41001,-1.89423 1.36597,-2.09559 0.95578,-0.20061 1.89326,0.41145 2.09408,1.36719 0.20062,0.95579 -0.41145,1.89327 -1.3672,2.09409 -0.65079,0.13669 -1.32327,-0.10324 -1.74057,-0.62101 z m 47.17343,58.27414 c -0.0772,-0.096 -0.15074,-0.19484 -0.2211,-0.29592 -1.64893,-2.3651 -1.06879,-5.61907 1.29589,-7.2686 2.36512,-1.64894 5.61909,-1.06879 7.26862,1.2959 1.65021,2.36507 1.07055,5.62013 -1.29467,7.27012 -2.24824,1.56808 -5.32626,1.13073 -7.04872,-1.00152 z m -31.84422,-39.6163 c -0.32889,-0.38065 -0.47295,-0.8871 -0.3936,-1.38385 0.14935,-0.92986 1.02424,-1.56257 1.95408,-1.41319 0.92986,0.14935 1.56257,1.02423 1.4132,1.95409 -0.14935,0.92986 -1.02425,1.56257 -1.9541,1.41319 -0.3964,-0.0641 -0.75746,-0.26604 -1.01958,-0.57024 z m -41.86349,-52.32929 c -1.18297,-1.46172 -1.37542,-3.48982 -0.48939,-5.14844 1.21802,-2.28006 4.05394,-3.14077 6.33377,-1.92233 2.2799,1.21746 3.14125,4.05257 1.92386,6.33254 -1.21802,2.28006 -4.05393,3.14077 -6.33377,1.92233 -0.55256,-0.29474 -1.04036,-0.69739 -1.43447,-1.1841 z m 46.71391,57.63606 c -0.24448,-0.30625 -0.3957,-0.67636 -0.43594,-1.06615 -0.11562,-1.12382 0.70129,-2.12876 1.82505,-2.24509 1.12396,-0.11654 2.12968,0.6999 2.24661,1.82382 0.11632,1.12482 -0.70167,2.13078 -1.82656,2.24632 -0.69291,0.0714 -1.37456,-0.21453 -1.80916,-0.7589 z m 14.41158,17.27764 c -0.12493,-0.16125 -0.23563,-0.33304 -0.33125,-0.51321 -0.9254,-1.74825 -0.25813,-3.91567 1.49028,-4.84075 1.74825,-0.9254 3.91568,-0.25814 4.84076,1.49028 0.92539,1.74825 0.25813,3.91567 -1.49029,4.84075 -1.54065,0.81516 -3.44444,0.40268 -4.50954,-0.97704 z m 33.31321,38.8554 c -2.30771,-3.15724 -1.84791,-7.54941 1.06365,-10.16026 3.13021,-2.80707 7.94332,-2.54511 10.75039,0.58511 2.80662,3.12963 2.54536,7.94176 -0.58359,10.74915 -3.12951,2.80797 -7.9428,2.54723 -10.75068,-0.58235 -0.16973,-0.18906 -0.32981,-0.38656 -0.4798,-0.59161 z M 403.31561,774.2036 c -0.13221,-0.17824 -0.23902,-0.37403 -0.31836,-0.58131 -0.48467,-1.26768 0.15064,-2.68816 1.41865,-3.17196 1.26758,-0.48354 2.68714,0.15221 3.17043,1.41989 0.48289,1.26679 -0.15194,2.68528 -1.41835,3.1692 -1.0306,0.39358 -2.19718,0.0518 -2.85237,-0.83582 z m -58.35346,-76.44214 c -1.48915,-1.99831 -1.50332,-4.73349 -0.035,-6.74712 1.8503,-2.53648 5.40633,-3.09302 7.94312,-1.24315 2.53648,1.85029 3.09302,5.40633 1.24315,7.94311 -1.85029,2.53649 -5.40633,3.09303 -7.94311,1.24316 -0.4604,-0.33586 -0.86768,-0.73904 -1.20819,-1.196 z m 31.9458,39.31604 c -0.33046,-0.41125 -0.46263,-0.94737 -0.3613,-1.46512 0.19069,-0.9698 1.13123,-1.60156 2.10112,-1.41135 0.9698,0.1907 1.60158,1.13124 1.41135,2.10113 -0.1907,0.96979 -1.13123,1.60156 -2.10112,1.41134 -0.41404,-0.0816 -0.78593,-0.30687 -1.05005,-0.636 z m 22.62003,27.92317 c -0.17354,-0.20079 -0.29761,-0.43949 -0.36155,-0.69706 -0.22372,-0.90382 0.32822,-1.81773 1.23229,-2.04045 0.90295,-0.22304 1.8158,0.32791 2.03923,1.23076 0.22304,0.90295 -0.3279,1.81581 -1.23076,2.03924 -0.61534,0.15263 -1.26427,-0.0531 -1.67921,-0.53249 z m -25.90612,-32.74029 c -0.42708,-0.57674 -0.54223,-1.32701 -0.30767,-2.00524 0.39273,-1.13572 1.63212,-1.73768 2.76758,-1.34419 1.13572,0.39273 1.73769,1.63212 1.3442,2.76758 -0.39335,1.13577 -1.63342,1.73711 -2.76881,1.34267 -0.41384,-0.14356 -0.77469,-0.40874 -1.0353,-0.76082 z m -2.96305,-6.09651 c -0.68165,-0.81397 -0.80994,-1.95686 -0.32564,-2.90165 0.66516,-1.29892 2.25772,-1.81223 3.55627,-1.14729 1.29892,0.66516 1.81223,2.25772 1.14729,3.55626 -0.66516,1.29893 -2.25772,1.81223 -3.55626,1.14729 -0.31494,-0.161 -0.59435,-0.38361 -0.82166,-0.65461 z m 42.51341,51.17516 c -0.0445,-0.0536 -0.0874,-0.10857 -0.1281,-0.16517 -0.95409,-1.31878 -0.65865,-3.16127 0.65988,-4.11569 1.31877,-0.95409 3.16127,-0.65865 4.11569,0.65988 0.95409,1.31877 0.65865,3.16127 -0.65988,4.11569 -1.25313,0.90679 -2.99402,0.69079 -3.98751,-0.49477 z m -7.27101,-9.48958 c -0.0719,-0.0901 -0.13594,-0.1862 -0.19154,-0.28714 -0.5398,-0.97751 -0.18492,-2.20753 0.79262,-2.74726 0.97751,-0.5398 2.20752,-0.18493 2.74726,0.79262 0.53979,0.9775 0.18491,2.20752 -0.79262,2.74725 -0.86139,0.47603 -1.94041,0.26263 -2.55576,-0.50544 z m 19.18786,21.60281 c -1.33378,-1.7592 -1.11783,-4.24279 0.49954,-5.74541 1.73934,-1.61478 4.4583,-1.51409 6.07344,0.2249 1.61569,1.73863 1.51623,4.45778 -0.22216,6.07373 -1.7392,1.61612 -4.45932,1.51596 -6.07496,-0.22368 -0.0976,-0.10503 -0.18948,-0.21514 -0.27601,-0.32942 z m -57.0762,-71.29689 c -0.85997,-1.11338 -0.89464,-2.65703 -0.0856,-3.80795 1.01958,-1.45063 3.02221,-1.79978 4.47253,-0.77978 1.44926,1.01988 1.79777,3.02129 0.77856,4.47101 -1.01903,1.45037 -3.02082,1.80016 -4.47131,0.7813 -0.26343,-0.18544 -0.49746,-0.40947 -0.69419,-0.66458 z M 477.8531,853.82631 c -3.20931,-4.1926 -3.02111,-10.06563 0.45005,-14.04416 4.02996,-4.61915 11.04137,-5.09699 15.66076,-1.0673 4.6195,4.0305 5.09669,11.04283 1.06579,15.66199 -4.0305,4.6195 -11.04284,5.09668 -15.66199,1.06579 -0.5575,-0.48692 -1.06489,-1.02839 -1.51461,-1.61632 z m -70.55374,-91.42334 c -0.0253,-0.0297 -0.0498,-0.0602 -0.0736,-0.0912 -0.55233,-0.7355 -0.4033,-1.77959 0.33279,-2.33116 0.73551,-0.55233 1.7796,-0.40328 2.33116,0.3328 0.55107,0.73554 0.40149,1.77854 -0.33402,2.32964 -0.69856,0.52458 -1.68382,0.41977 -2.25636,-0.24006 z M 300.93421,630.31515 c -3.96934,-4.8721 -3.60181,-11.9591 0.85019,-16.39451 4.78676,-4.76962 12.53388,-4.75525 17.30291,0.0321 4.76963,4.78676 4.75528,12.53389 -0.0321,17.30293 -4.78675,4.76963 -12.53388,4.75527 -17.30292,-0.0321 -0.2877,-0.28897 -0.5607,-0.59219 -0.81811,-0.90843 z m 80.2925,99.12553 c -0.49657,-0.62036 -0.53121,-1.4918 -0.0853,-2.1495 0.56138,-0.82792 1.68744,-1.04438 2.51576,-0.4836 0.82793,0.56137 1.04438,1.68742 0.4836,2.51575 -0.56137,0.82792 -1.68743,1.04438 -2.51575,0.4836 -0.15034,-0.10148 -0.28461,-0.22493 -0.39834,-0.36623 z m -38.73046,-48.92444 c -2.28735,-2.71084 -2.14955,-6.71358 0.31875,-9.26076 2.65501,-2.73898 7.0277,-2.80709 9.76673,-0.15212 2.73899,2.655 2.8071,7.0277 0.15213,9.76673 -2.655,2.73899 -7.0277,2.8071 -9.76673,0.15213 -0.16533,-0.16067 -0.32249,-0.32954 -0.47086,-0.50599 z m 71.64957,88.60715 c -0.76906,-0.97998 -0.67114,-2.38311 0.22661,-3.24674 0.96553,-0.92908 2.50138,-0.89966 3.43062,0.0657 0.92908,0.96553 0.89966,2.50139 -0.0657,3.43062 -0.96553,0.92909 -2.50138,0.89966 -3.43062,-0.0657 -0.0564,-0.0588 -0.11037,-0.11994 -0.16107,-0.18375 z M 366.45173,708.4462 c -1.31804,-1.50779 -1.27959,-3.76888 0.0889,-5.23101 1.47159,-1.57226 3.93909,-1.65396 5.51145,-0.18247 1.57227,1.47159 1.65396,3.9391 0.18247,5.51145 -1.47158,1.57226 -3.93909,1.65396 -5.51144,0.18247 -0.0951,-0.0889 -0.18564,-0.18251 -0.27143,-0.28041 z m 78.11278,96.49494 c -1.85316,-2.33505 -1.80488,-5.65236 0.11549,-7.93245 2.22939,-2.6473 6.18274,-2.98602 8.82998,-0.75657 2.64729,2.2294 2.98601,6.18274 0.75656,8.82998 -2.22939,2.64728 -6.18273,2.98601 -8.82997,0.75656 -0.31991,-0.26932 -0.61204,-0.56999 -0.87206,-0.89752 z M 380.11034,723.8043 c -0.62209,-0.8427 -0.5643,-2.00701 0.13819,-2.78396 0.81541,-0.90121 2.20685,-0.97115 3.10853,-0.15626 0.90257,0.8152 0.97309,2.20784 0.15749,3.11005 -0.81541,0.90121 -2.20686,0.97116 -3.10853,0.15627 -0.10919,-0.0986 -0.20824,-0.20782 -0.29568,-0.32609 z m 45.18357,53.86934 c -1.06892,-1.29947 -1.07474,-3.17202 -0.0139,-4.47808 1.23224,-1.51689 3.461,-1.74733 4.97752,-0.51462 1.51721,1.23278 1.747,3.46245 0.5131,4.97875 -1.23303,1.51585 -3.46148,1.74502 -4.97723,0.51187 -0.18269,-0.14891 -0.35001,-0.31572 -0.49954,-0.4979 z m -11.14758,-15.2005 c -0.61629,-0.72306 -0.63789,-1.78019 -0.0517,-2.52788 0.68042,-0.86858 1.93623,-1.0209 2.80458,-0.34018 0.86889,0.68097 1.02056,1.93766 0.33867,2.80581 -0.68123,0.86752 -1.93672,1.0186 -2.8043,0.33744 -0.10465,-0.082 -0.20087,-0.17415 -0.28725,-0.27518 z M 379.89922,717.0939 c -0.94721,-1.13314 -0.79657,-2.81959 0.33643,-3.76696 1.13314,-0.94721 2.81958,-0.79657 3.76696,0.33644 0.94722,1.13314 0.79656,2.81958 -0.33644,3.76695 -1.13313,0.94721 -2.81958,0.79657 -3.76695,-0.33643 z m 33.39873,39.86043 c -0.39659,-0.52733 -0.43945,-1.24069 -0.10891,-1.81175 0.4552,-0.7861 1.46166,-1.05406 2.24748,-0.59842 0.78628,0.45576 1.05361,1.46302 0.5969,2.2487 -0.45614,0.78493 -1.46213,1.05161 -2.24719,0.59568 -0.19019,-0.11059 -0.35621,-0.25826 -0.48828,-0.43421 z m -25.05657,-32.95634 c -0.0255,-0.0348 -0.0502,-0.0702 -0.0731,-0.10661 -0.55023,-0.85053 -0.30684,-1.98609 0.54365,-2.53638 0.85054,-0.55025 1.98609,-0.30685 2.53639,0.54364 0.55024,0.85055 0.30684,1.98609 -0.54366,2.53639 -0.80846,0.52353 -1.88414,0.3326 -2.46305,-0.43718 z m -22.1984,-27.74887 c -1.64314,-2.03603 -1.32459,-5.01859 0.71149,-6.66167 2.03662,-1.64362 5.02018,-1.32435 6.6629,0.713 1.6423,2.03671 1.32253,5.01914 -0.71423,6.66138 -2.03612,1.64183 -5.01755,1.32278 -6.66016,-0.71271 z m 58.10124,71.85522 c -0.8503,-0.95311 -0.98023,-2.34908 -0.3205,-3.44279 0.83145,-1.37712 2.62201,-1.81926 3.9989,-0.98741 1.37693,0.83091 1.81967,2.62065 0.98893,3.99768 -0.83145,1.37712 -2.62201,1.81926 -3.9989,0.98741 -0.24926,-0.15053 -0.47461,-0.33754 -0.66843,-0.55489 z m 18.68083,19.85127 c -1.47537,-1.71461 -1.6615,-4.1904 -0.45911,-6.10635 1.51457,-2.41327 4.69887,-3.14155 7.11188,-1.62656 2.41305,1.51402 3.14195,4.6975 1.62808,7.11065 -1.51457,2.41327 -4.69887,3.14155 -7.11188,1.62656 -0.43775,-0.27434 -0.83181,-0.61289 -1.16897,-1.0043 z m -20.84278,-27.65797 c -0.54286,-0.68904 -0.66594,-1.6196 -0.32097,-2.42612 0.52031,-1.21659 1.92794,-1.78151 3.14493,-1.26214 1.21649,0.51972 1.78202,1.92663 1.26366,3.14369 -0.51925,1.21781 -1.9274,1.78412 -3.14521,1.26489 -0.36953,-0.15736 -0.69358,-0.40505 -0.94241,-0.72032 z M 380.80983,708.9868 c -0.12282,-0.13793 -0.23425,-0.28562 -0.33186,-0.44246 -0.94887,-1.52364 -0.48249,-3.52801 1.04153,-4.47626 1.52363,-0.94886 3.52802,-0.48248 4.47626,1.04154 0.9476,1.52363 0.48076,3.52695 -1.04276,4.47473 -1.34246,0.83556 -3.09153,0.58331 -4.14319,-0.59753 z m 8.79126,9.63838 c -0.13029,-0.15354 -0.23909,-0.32409 -0.32357,-0.50686 -0.51793,-1.11633 -0.0329,-2.44116 1.08338,-2.95921 1.11633,-0.51793 2.44116,-0.0329 2.95921,1.08337 0.51793,1.11633 0.0329,2.44117 -1.08337,2.95921 -0.90829,0.42193 -1.98648,0.1861 -2.63565,-0.57651 z m -47.45322,-59.7222 c -2.8457,-3.65754 -2.18767,-8.92944 1.46981,-11.77521 3.65694,-2.84522 8.92784,-2.18792 11.77399,1.46829 2.84655,3.65684 2.18972,8.92887 -1.46706,11.7755 -3.65745,2.84704 -8.93049,2.18949 -11.77674,-1.46858 z m 133.14929,164.78733 c -2.55872,-3.08213 -2.81151,-7.47151 -0.62343,-10.82693 2.75624,-4.22582 8.41595,-5.4178 12.64244,-2.66259 4.22719,2.7559 5.41983,8.41685 2.66381,12.64397 -2.75591,4.22718 -8.41685,5.41982 -12.64396,2.6638 -0.7669,-0.50048 -1.45421,-1.11341 -2.03886,-1.81825 z m -55.77361,-69.30882 c -0.42321,-0.49518 -0.57479,-1.16731 -0.40504,-1.7962 0.28445,-1.05191 1.36772,-1.6741 2.41966,-1.38976 1.05191,0.28379 1.67474,1.36643 1.39127,2.41843 -0.28321,1.05317 -1.36708,1.67686 -2.41994,1.39251 -0.38416,-0.10412 -0.72786,-0.32197 -0.98595,-0.62498 z m -2.76678,-4.63377 c -0.25487,-0.33761 -0.36801,-0.76131 -0.31531,-1.18102 0.11191,-0.88908 0.92272,-1.51954 1.81195,-1.40896 0.89031,0.11053 1.52239,0.92196 1.41166,1.81227 -0.11127,0.89025 -0.92326,1.52164 -1.81347,1.41019 -0.4354,-0.0543 -0.83032,-0.28241 -1.09487,-0.63247 z m -19.80915,-27.98488 c -0.17592,-0.23465 -0.29383,-0.5076 -0.34394,-0.79656 -0.17536,-1.00982 0.50066,-1.97073 1.51034,-2.14682 1.00994,-0.17634 1.97167,0.49924 2.14834,1.50912 0.17633,1.00994 -0.49924,1.97167 -1.50912,2.14834 -0.68829,0.12071 -1.38607,-0.15525 -1.80562,-0.71408 z m 42.29165,52.30008 c -0.93926,-1.23604 -1.12914,-2.88613 -0.49511,-4.30318 0.95779,-2.1405 3.46947,-3.09926 5.60996,-2.14145 2.14051,0.95778 3.09927,3.46946 2.14146,5.60995 -0.95837,2.14062 -3.47077,3.09878 -5.61118,2.13995 -0.64902,-0.29047 -1.21469,-0.73929 -1.64513,-1.30527 z m -47.19022,-61.81638 c -0.20751,-0.26361 -0.36439,-0.56337 -0.46235,-0.88424 -0.43494,-1.43115 0.37318,-2.94381 1.80459,-3.37788 1.43115,-0.43494 2.94382,0.37317 3.37789,1.80459 0.43494,1.43115 -0.37317,2.94381 -1.80459,3.37788 -1.06866,0.32387 -2.22651,-0.0416 -2.91554,-0.92035 z m -24.14211,-30.32642 c -0.21359,-0.24884 -0.40475,-0.51608 -0.57302,-0.79747 -1.6321,-2.72753 -0.74398,-6.26171 1.98365,-7.89366 2.72752,-1.63084 6.26065,-0.74226 7.89213,1.98488 1.6321,2.72753 0.74397,6.26171 -1.98365,7.89366 -2.40359,1.43799 -5.4934,0.93671 -7.31911,-1.18741 z m 49.2184,59.94443 c -0.12021,-0.15858 -0.20975,-0.33823 -0.26416,-0.52967 -0.24225,-0.85209 0.25184,-1.73928 1.10379,-1.98198 0.85221,-0.24331 1.74029,0.25034 1.9835,1.10257 0.24293,0.85293 -0.25212,1.74119 -1.10532,1.9832 -0.6362,0.18099 -1.31827,-0.047 -1.71781,-0.57412 z m -33.94548,-42.60378 c -0.22628,-0.27573 -0.41419,-0.58083 -0.55852,-0.90703 -0.8828,-1.99305 0.0171,-4.32439 2.01009,-5.20737 1.99304,-0.8828 4.32439,0.0171 5.20737,2.01009 0.8828,1.99304 -0.0171,4.3244 -2.01009,5.20738 -1.62145,0.71845 -3.52301,0.26726 -4.64885,-1.10307 z m 51.88685,64.25102 c -0.73379,-0.89006 -0.9812,-2.08485 -0.66112,-3.19311 0.53485,-1.85543 2.47298,-2.92556 4.32814,-2.38975 1.85417,0.53605 2.92282,2.4736 2.387,4.32785 -0.53541,1.85416 -2.47232,2.92345 -4.32662,2.38852 -0.67688,-0.19512 -1.27899,-0.59022 -1.7274,-1.13351 z M 421.29754,744.9556 c -0.24326,-0.28355 -0.39986,-0.63106 -0.45124,-1.0011 -0.14769,-1.06677 0.59765,-2.05119 1.66449,-2.19838 1.06581,-0.147 2.04919,0.59728 2.19715,1.66296 0.14796,1.06594 -0.59588,2.05012 -1.66173,2.19867 -0.65763,0.0915 -1.31658,-0.15803 -1.74867,-0.66215 z m 9.19367,10.48566 c -0.56494,-0.63232 -0.82221,-1.48164 -0.70304,-2.32117 0.2235,-1.57322 1.6801,-2.66732 3.25329,-2.44366 1.57316,0.22424 2.6666,1.68141 2.44215,3.25453 -0.22424,1.57316 -1.68141,2.66659 -3.25454,2.44214 -0.67097,-0.0962 -1.28644,-0.4262 -1.73786,-0.93184 z m -4.7811,-6.18827 c -0.33165,-0.41911 -0.51138,-0.9383 -0.51048,-1.47276 0.003,-1.30751 1.06489,-2.36527 2.3724,-2.36292 1.30751,0.003 2.36527,1.06489 2.36292,2.37241 -0.003,1.3075 -1.06489,2.36527 -2.3724,2.36291 -0.72238,-0.002 -1.40449,-0.33292 -1.85244,-0.89964 z m -25.25368,-31.84128 c -0.3296,-0.38806 -0.51818,-0.87624 -0.53513,-1.38511 -0.0406,-1.24464 0.93513,-2.28672 2.17976,-2.32797 1.24477,-0.0414 2.28759,0.93379 2.32949,2.17855 0.0421,1.24581 -0.9342,2.28963 -2.18005,2.33071 -0.6882,0.0223 -1.34891,-0.27087 -1.79407,-0.79618 z m 13.99392,17.18295 c -0.55036,-0.6816 -0.44348,-1.6804 0.23864,-2.23012 0.6816,-0.55036 1.68041,-0.44348 2.23013,0.23865 0.54904,0.68169 0.44166,1.67937 -0.23988,2.22861 -0.68101,0.54988 -1.67882,0.44372 -2.22889,-0.23714 z m -8.50278,-11.46455 c -0.33208,-0.44384 -0.45123,-1.01167 -0.32566,-1.55158 0.23536,-1.01127 1.24614,-1.64012 2.25732,-1.40435 1.01127,0.23536 1.64012,1.24614 1.40435,2.25732 -0.23536,1.01127 -1.24613,1.64012 -2.25732,1.40435 -0.43152,-0.10073 -0.81356,-0.35069 -1.07869,-0.70574 z m 63.42857,75.84631 c -1.62605,-2.21852 -1.9113,-5.14775 -0.7438,-7.63828 1.76196,-3.76106 6.23909,-5.38188 10.00036,-3.62035 3.76251,1.76211 5.38348,6.24122 3.62005,10.00311 -1.76255,3.76118 -6.24042,5.38138 -10.00159,3.61882 -1.1412,-0.53447 -2.1298,-1.34712 -2.87502,-2.3633 z m -50.09725,-63.27057 c -0.0712,-0.0835 -0.13623,-0.17206 -0.19232,-0.26645 -0.54732,-0.91294 -0.25018,-2.09676 0.6634,-2.64302 0.91294,-0.54607 2.09572,-0.24848 2.64152,0.66463 0.54549,0.91227 0.24869,2.094 -0.66312,2.64028 -0.80393,0.48182 -1.838,0.31487 -2.44946,-0.39546 z m -5.48403,-7.73163 c -0.49889,-0.66863 -0.50394,-1.58428 -0.0125,-2.2584 0.61932,-0.84895 1.80964,-1.035 2.65848,-0.41553 0.84868,0.61877 1.03537,1.80822 0.41706,2.65724 -0.61931,0.84896 -1.80963,1.03502 -2.65848,0.41555 -0.15404,-0.11196 -0.29039,-0.24643 -0.40459,-0.39883 z m -17.49533,-22.67455 c -0.41861,-0.47147 -0.69286,-1.05334 -0.79011,-1.67629 -0.28026,-1.79428 0.94682,-3.47613 2.74103,-3.75686 1.79428,-0.28027 3.47613,0.94681 3.75686,2.74102 0.28123,1.79441 -0.9454,3.47706 -2.73979,3.75838 -1.10634,0.17303 -2.2247,-0.22874 -2.96799,-1.06625 z m 28.54358,32.48223 c -0.13125,-0.1659 -0.23905,-0.34906 -0.32096,-0.5441 -0.50308,-1.18991 0.0536,-2.56238 1.24338,-3.0657 1.19067,-0.50371 2.5642,0.0538 3.06693,1.24491 0.50256,1.1906 -0.0554,2.56316 -1.24613,3.06541 -0.96796,0.40909 -2.08992,0.12257 -2.74322,-0.70052 z m -13.78964,-17.19717 c -0.53949,-0.63725 -0.68808,-1.51816 -0.38754,-2.29713 0.45417,-1.1765 1.77612,-1.76201 2.95257,-1.30773 1.17649,0.45417 1.76201,1.77612 1.30773,2.95257 -0.45417,1.1765 -1.77612,1.76201 -2.95258,1.30773 -0.35678,-0.13795 -0.6732,-0.36333 -0.92018,-0.65544 z m -5.74026,-7.95906 c -0.43893,-0.56132 -0.6419,-1.27158 -0.56593,-1.98008 0.16118,-1.50461 1.51139,-2.59379 3.01604,-2.43294 1.5046,0.16117 2.59378,1.51139 2.43293,3.01604 -0.16117,1.5046 -1.51139,2.59378 -3.01603,2.43293 -0.7368,-0.0787 -1.41034,-0.45241 -1.86701,-1.03595 z m 14.36499,15.11701 c -0.76594,-0.90731 -0.71984,-2.24737 0.10671,-3.09983 0.88839,-0.91541 2.35042,-0.93798 3.26666,-0.0505 0.91676,0.88821 0.9399,2.35144 0.0517,3.26819 -0.88821,0.91675 -2.35144,0.93989 -3.26818,0.0517 -0.055,-0.0539 -0.10746,-0.11044 -0.15685,-0.16959 z M 387.711,688.04241 c -0.35937,-0.47417 -0.6274,-1.01105 -0.79034,-1.58327 -0.72495,-2.54762 0.753,-5.20051 3.30081,-5.92484 2.54679,-0.72427 5.1986,0.75273 5.92361,3.2993 0.72533,2.54691 -0.75122,5.1996 -3.29807,5.92513 -1.90213,0.54182 -3.94178,-0.13978 -5.13601,-1.71632 z m 74.60185,92.11765 c -1.27272,-1.59893 -1.6743,-3.72297 -1.07323,-5.67621 1.00573,-3.26747 4.46965,-5.10116 7.73725,-4.09587 3.26874,1.00519 5.10328,4.47034 4.0971,7.73877 -1.00637,3.26749 -4.47094,5.10056 -7.73848,4.09435 -1.19218,-0.36682 -2.24573,-1.08521 -3.02264,-2.06104 z M 431.3857,741.48777 c -0.29944,-0.33393 -0.51554,-0.73402 -0.63065,-1.16754 -0.4027,-1.51667 0.49998,-3.07272 2.01649,-3.47604 1.51668,-0.4027 3.07273,0.49997 3.47605,2.01649 0.40375,1.5168 -0.49849,3.07373 -2.01527,3.47757 -1.03331,0.27449 -2.13324,-0.0541 -2.84662,-0.85048 z M 345.89347,633.58322 c -0.37077,-0.4469 -0.70239,-0.92489 -0.99164,-1.42841 -2.80484,-4.88062 -1.12271,-11.1109 3.7574,-13.91663 4.88064,-2.80609 11.11195,-1.12441 13.91815,3.75617 2.80667,4.88131 1.12418,11.11368 -3.75768,13.91938 -4.30173,2.47248 -9.75883,1.48859 -12.92623,-2.33051 z m 92.60689,113.28694 c -0.4212,-0.5094 -0.68771,-1.12879 -0.76738,-1.78497 -0.22843,-1.89307 1.12094,-3.61294 3.014,-3.84155 1.89307,-0.22843 3.61293,1.12093 3.84154,3.01399 0.22843,1.89307 -1.12093,3.61293 -3.01398,3.84155 -1.16713,0.14035 -2.32548,-0.32274 -3.07418,-1.22902 z m -66.09548,-82.1014 c -0.39201,-0.49552 -0.71555,-1.04154 -0.96101,-1.62375 -1.50188,-3.55741 0.16457,-7.65877 3.72205,-9.16047 3.55666,-1.50124 7.65696,0.16433 9.15925,3.72054 1.50304,3.55749 -0.16298,7.65981 -3.72083,9.162 -2.89417,1.22222 -6.24818,0.3639 -8.19946,-2.09832 z m 82.05211,100.95826 c -0.98165,-1.13808 -1.41084,-2.65144 -1.17282,-4.13542 0.44529,-2.77917 3.0594,-4.67105 5.83853,-4.22542 2.77912,0.446 4.67033,3.06069 4.22392,5.83974 -0.44591,2.778 -3.05883,4.66896 -5.83701,4.22422 -1.18652,-0.19004 -2.26772,-0.79326 -3.05262,-1.70312 z m -8.27714,-11.10705 c -0.57341,-0.75289 -0.87535,-1.67755 -0.85679,-2.62375 0.0444,-2.31657 1.95855,-4.15841 4.27511,-4.11356 2.31645,0.0452 4.15757,1.95987 4.11203,4.27632 -0.0459,2.31537 -1.95941,4.15551 -4.2748,4.11082 -1.2801,-0.0243 -2.47903,-0.63187 -3.25555,-1.64983 z m -28.6512,-36.38281 c -0.68573,-0.8786 -0.77904,-2.08229 -0.23688,-3.05605 0.74529,-1.33875 2.43487,-1.81967 3.77344,-1.07405 1.33741,0.74568 1.81761,2.43403 1.07282,3.77193 -0.74474,1.33857 -2.43352,1.8201 -3.77221,1.07556 -0.32425,-0.1807 -0.60893,-0.42465 -0.83717,-0.71739 z m 9.16577,10.07153 c -0.95178,-1.22353 -0.73201,-2.98687 0.491,-3.93931 1.22413,-0.95226 2.98846,-0.73177 3.94053,0.49252 0.95178,1.22353 0.73201,2.98687 -0.491,3.93931 -1.22413,0.95226 -2.98847,0.73177 -3.94053,-0.49252 z m -24.25439,-30.86068 c -0.57175,-0.69763 -0.88999,-1.56855 -0.90375,-2.47043 -0.0336,-2.20581 1.72698,-4.0214 3.93278,-4.05575 2.20593,-0.0344 4.02225,1.72564 4.05727,3.93156 0.0351,2.20699 -1.72607,4.02431 -3.93308,4.0585 -1.2194,0.0188 -2.38064,-0.52026 -3.15322,-1.46388 z m 9.75703,10.55566 c -0.72816,-0.82288 -1.00333,-1.95208 -0.73544,-3.01772 0.44787,-1.78308 2.25634,-2.86556 4.03946,-2.41787 1.78433,0.4473 2.86769,2.25699 2.41909,4.041 -0.44797,1.78431 -2.25828,2.86702 -4.04221,2.41756 -0.65058,-0.16383 -1.23647,-0.5204 -1.6809,-1.02297 z m 110.60266,137.07346 c -3.51049,-4.04159 -4.26068,-9.79197 -1.90458,-14.59891 3.23773,-6.6064 11.21786,-9.33738 17.82439,-6.09992 6.60772,3.23731 9.33945,11.21868 6.10113,17.82591 -3.23788,6.60786 -11.22,9.33897 -17.82713,6.09961 -1.59964,-0.78431 -3.0257,-1.88152 -4.19381,-3.22669 z M 435.20993,730.42558 c -0.12351,-0.14992 -0.23429,-0.30988 -0.33073,-0.47848 -0.93782,-1.63313 -0.3747,-3.71728 1.25798,-4.65588 1.63315,-0.93906 3.71834,-0.37639 4.6574,1.25675 0.9384,1.63381 0.37447,3.71901 -1.25951,4.65712 -1.43931,0.82726 -3.26518,0.49818 -4.32512,-0.77953 z m -9.26333,-13.5988 c -1.06008,-1.20169 -1.12721,-2.98372 -0.16064,-4.26183 1.12233,-1.48471 3.23578,-1.77843 4.72043,-0.65602 1.48499,1.12286 1.77808,3.23718 0.6545,4.72164 -1.12314,1.48363 -3.23624,1.77608 -4.72012,0.65328 -0.17956,-0.13548 -0.3451,-0.28861 -0.4942,-0.45704 z m -30.49351,-40.95932 c -0.72621,-0.84754 -1.19359,-1.8859 -1.34663,-2.99146 -0.44146,-3.18698 1.78429,-6.12839 4.97129,-6.56973 3.18698,-0.44147 6.1284,1.78428 6.56974,4.97128 0.44077,3.18603 -1.78394,6.12639 -4.96977,6.56851 -1.96483,0.27304 -3.93356,-0.47254 -5.22463,-1.9786 z m 49.54954,58.40757 c -0.22761,-0.29809 -0.41439,-0.62521 -0.55421,-0.97323 -0.85237,-2.1233 0.17739,-4.53561 2.30035,-5.38882 2.1233,-0.85236 4.5356,0.1774 5.38882,2.30035 0.85351,2.12338 -0.17581,4.53665 -2.29913,5.39034 -1.7274,0.69348 -3.70524,0.15007 -4.83583,-1.32864 z m -23.89118,-30.88014 c -0.93577,-1.14571 -1.17161,-2.71079 -0.6147,-4.08125 0.84053,-2.06942 3.19948,-3.06566 5.26891,-2.22519 2.06942,0.84052 3.06566,3.19948 2.22518,5.26892 -0.84052,2.0694 -3.19947,3.06565 -5.2689,2.22518 -0.62784,-0.25474 -1.18162,-0.66312 -1.61049,-1.18766 z m -9.92035,-14.27331 c -0.76081,-1.00799 -1.09878,-2.27285 -0.94218,-3.52599 0.3315,-2.66008 2.75661,-4.5478 5.41671,-4.21641 2.66008,0.33151 4.5478,2.75661 4.2164,5.41671 -0.33086,2.66125 -2.75715,4.54992 -5.41823,4.21764 -1.30174,-0.16248 -2.48228,-0.84496 -3.2727,-1.89195 z m 98.85917,121.36746 c -2.20466,-2.87129 -2.85011,-6.64567 -1.72494,-10.08642 1.88215,-5.75691 8.07518,-8.89766 13.83182,-7.01469 5.75561,1.88268 8.89551,8.07447 7.01344,13.83028 -1.88266,5.75562 -8.07446,8.89554 -13.83028,7.01346 -2.10011,-0.68614 -3.94399,-1.99065 -5.29004,-3.74263 z m -73.88686,-94.15235 c -1.32699,-1.6307 -1.20392,-4.0012 0.28554,-5.48498 1.6016,-1.59464 4.19246,-1.58971 5.78798,0.011 1.59599,1.60144 1.59161,4.19346 -0.01,5.7895 -1.60144,1.59599 -4.19346,1.59161 -5.7895,-0.01 -0.0965,-0.0973 -0.188,-0.1993 -0.27425,-0.30574 z m 20.31012,24.705 c -0.51923,-0.60019 -0.88919,-1.31466 -1.07971,-2.08508 -0.66755,-2.69873 0.97881,-5.4277 3.67745,-6.09566 2.69873,-0.66754 5.4277,0.97881 6.09565,3.67745 0.66824,2.6996 -0.9791,5.42964 -3.67895,6.09688 -1.83817,0.45404 -3.77563,-0.16169 -5.01444,-1.59359 z M 380.77644,645.0372 c -0.62097,-0.85038 -1.07842,-1.8088 -1.349,-2.82642 -1.20584,-4.53371 1.49228,-9.18647 6.02614,-10.39175 4.53372,-1.20585 9.18648,1.49228 10.39176,6.02615 1.20583,4.53372 -1.49229,9.18646 -6.02615,10.39174 -3.38568,0.90042 -6.97685,-0.37029 -9.04275,-3.19972 z m 88.13027,105.75897 c -0.73079,-0.91549 -1.18316,-2.02166 -1.30349,-3.18685 -0.34724,-3.36028 2.09565,-6.36569 5.45601,-6.71231 3.36029,-0.34724 6.36569,2.09566 6.71231,5.45601 0.34724,3.36029 -2.09566,6.3657 -5.45601,6.71232 -2.0717,0.21391 -4.10986,-0.64116 -5.40882,-2.26917 z m 27.6778,33.88827 c -1.70364,-2.04585 -2.41727,-4.73942 -1.94998,-7.3604 0.87486,-4.90792 5.56287,-8.17725 10.47074,-7.30212 4.90792,0.87487 8.17726,5.56286 7.30213,10.47074 -0.87486,4.90793 -5.56287,8.17727 -10.47075,7.30213 -2.09491,-0.37349 -3.9905,-1.4751 -5.35214,-3.11035 z m -14.31555,-19.92722 c -0.99299,-1.35139 -1.49952,-2.99901 -1.43732,-4.67485 0.15167,-4.09981 3.59756,-7.30077 7.69741,-7.15028 4.09992,0.15087 7.30158,3.59625 7.15179,7.6962 -0.15019,4.10102 -3.59671,7.30366 -7.69771,7.15302 -2.26644,-0.0831 -4.37082,-1.19678 -5.71417,-3.02409 z M 354.39177,603.34807 c -0.6803,-0.88953 -1.23685,-1.86721 -1.65436,-2.90632 -2.55021,-6.34603 0.52671,-13.55788 6.87262,-16.10839 6.3468,-2.55087 13.55971,0.52696 16.10962,6.87414 2.55086,6.34681 -0.52697,13.55971 -6.87415,16.10962 -5.1625,2.07381 -11.07431,0.4504 -14.45373,-3.96905 z m 78.25907,96.08836 c -1.18701,-1.57678 -1.3153,-3.7108 -0.32576,-5.41844 1.36121,-2.34738 4.3676,-3.14687 6.715,-1.78571 2.34737,1.36122 3.14685,4.3676 1.7857,6.71501 -1.36121,2.34738 -4.36759,3.14686 -6.715,1.7857 -0.56849,-0.33016 -1.06493,-0.77106 -1.45994,-1.29656 z m 16.14196,18.3962 c -0.0767,-0.0887 -0.15029,-0.17995 -0.22073,-0.27364 -1.6491,-2.19692 -1.20473,-5.31477 0.99241,-6.96357 2.19692,-1.64909 5.31478,-1.20474 6.96358,0.99241 1.64909,2.19692 1.20473,5.31478 -0.99242,6.96357 -2.08788,1.56731 -5.03225,1.25343 -6.74284,-0.71877 z m -42.22022,-55.68012 c -0.99083,-1.25363 -1.52818,-2.80573 -1.52468,-4.40363 0.008,-3.90817 3.18258,-7.06996 7.09076,-7.06241 3.90818,0.008 7.06996,3.1826 7.0624,7.09077 -0.007,3.9083 -3.18125,7.0708 -7.08954,7.06392 -2.15986,-0.004 -4.19964,-0.99418 -5.53894,-2.68865 z m 16.95275,18.99684 c -1.26445,-1.48023 -1.71683,-3.48915 -1.20892,-5.3685 0.84896,-3.14393 4.08574,-5.00448 7.22974,-4.15573 3.14394,0.84895 5.00449,4.08575 4.15574,7.22974 -0.84896,3.14395 -4.08575,5.00449 -7.22975,4.15574 -1.14737,-0.30932 -2.17452,-0.95808 -2.94681,-1.86125 z m 40.06407,40.4209 c -0.21548,-0.26871 -0.40715,-0.55569 -0.57357,-0.85724 -1.61205,-2.92178 -0.55024,-6.59716 2.37159,-8.20911 2.92177,-1.61205 6.59715,-0.55024 8.2091,2.37159 1.61146,2.92109 0.55048,6.59542 -2.37006,8.20787 -2.57466,1.4216 -5.79893,0.78278 -7.63706,-1.51311 z m -15.98468,-24.3699 c -1.84148,-2.16099 -1.90594,-5.32005 -0.15414,-7.55435 2.03409,-2.59483 5.78676,-3.04899 8.38114,-1.01432 2.59377,2.0349 3.04668,5.78724 1.01158,8.38085 -2.03436,2.59347 -5.78581,3.04702 -8.37963,1.0131 -0.31311,-0.24577 -0.60087,-0.52223 -0.85895,-0.82528 z m -52.73779,-73.48416 c -1.26035,-1.52308 -2.05662,-3.37617 -2.2941,-5.33879 -0.6832,-5.65757 3.34921,-10.79781 9.00675,-11.4812 5.65672,-0.68344 10.79672,3.34745 11.48149,9.00401 0.68414,5.6577 -3.34781,10.79873 -9.00553,11.48272 -3.48733,0.42145 -6.94952,-0.96015 -9.18861,-3.66674 z m 85.94338,104.97353 c -0.39378,-0.53371 -0.71343,-1.11831 -0.95019,-1.73787 -1.44607,-3.78769 0.45261,-8.03043 4.24055,-9.47584 3.78692,-1.44541 8.0286,0.45236 9.47462,4.23904 1.44606,3.7877 -0.45262,8.03043 -4.24056,9.47584 -3.08072,1.17564 -6.56731,0.15263 -8.52442,-2.50117 z M 439.45495,673.2605 c -1.62167,-2.05779 -1.99066,-4.83669 -0.96215,-7.24635 1.55322,-3.63844 5.76174,-5.32904 9.40035,-3.77622 3.63836,1.55263 5.32957,5.76042 3.77774,9.39912 -1.55275,3.63976 -5.7625,5.33115 -9.40186,3.77745 -1.10362,-0.47099 -2.07125,-1.21165 -2.81408,-2.154 z m -17.12706,-25.58388 c -1.31671,-1.80871 -1.87655,-4.05943 -1.56063,-6.27423 0.66987,-4.70024 5.02277,-7.9678 9.72313,-7.29879 4.70141,0.66924 7.9699,5.02333 7.30002,9.72465 -0.66925,4.70141 -5.02333,7.96989 -9.72465,7.30002 -2.30048,-0.32788 -4.37028,-1.57297 -5.73787,-3.45165 z m 78.58809,93.35121 c -0.90088,-1.07936 -1.53382,-2.35642 -1.8471,-3.72699 -1.09872,-4.8007 1.90234,-9.58312 6.70305,-10.68183 4.8007,-1.09872 9.58312,1.90234 10.68183,6.70304 1.09872,4.8007 -1.90234,9.58313 -6.70305,10.68184 -3.27027,0.74892 -6.68414,-0.40107 -8.83473,-2.97606 z M 465.71177,696.649 c -2.30105,-2.92852 -2.00935,-7.12404 0.67475,-9.70603 2.8861,-2.77633 7.47638,-2.68746 10.25284,0.19852 2.77634,2.88609 2.68746,7.47637 -0.1985,10.25284 -2.8861,2.77633 -7.47638,2.68746 -10.25285,-0.19852 -0.16777,-0.17421 -0.32669,-0.35673 -0.47627,-0.54678 z m 56.92523,62.03865 c -1.26593,-1.64435 -2.03295,-3.61769 -2.2098,-5.68534 -0.51057,-5.96132 3.9083,-11.20776 9.86964,-11.71803 5.96119,-0.50968 11.20686,3.90966 11.71653,9.87085 0.51057,5.96133 -3.90829,11.20777 -9.86964,11.71805 -3.67479,0.31411 -7.25693,-1.26301 -9.50673,-4.18553 z m 24.04781,26.17169 c -2.2489,-2.58131 -3.40339,-5.93738 -3.21846,-9.35594 0.39335,-7.25859 6.59709,-12.8236 13.85562,-12.42905 7.25739,0.3948 12.82073,6.59793 12.42631,13.85533 -0.39401,7.25749 -6.59661,12.82153 -13.8541,12.42783 -3.55151,-0.19333 -6.87353,-1.81592 -9.20937,-4.49817 z M 460.5592,667.28518 c -2.53883,-2.84857 -2.92598,-7.01874 -0.95493,-10.286 2.48379,-4.11525 7.83348,-5.43762 11.94854,-2.95352 4.11505,2.48324 5.43803,7.83213 2.95503,11.94732 -2.48324,4.11504 -7.83212,5.43803 -11.94731,2.95503 -0.74666,-0.45085 -1.42131,-1.0114 -2.00133,-1.66283 z m 27.47595,32.39992 c -0.13354,-0.15917 -0.26155,-0.32292 -0.3834,-0.49122 -2.85197,-3.94132 -1.96916,-9.44832 1.97189,-12.30067 3.94133,-2.85197 9.44833,-1.96915 12.30068,1.97189 2.85326,3.94128 1.97093,9.44938 -1.97067,12.3022 -3.74617,2.71023 -8.95019,2.06297 -11.91832,-1.48235 z m -73.05216,-99.9147 c -1.71562,-2.24991 -2.61964,-5.01403 -2.56505,-7.8429 0.13408,-6.92169 5.85376,-12.42424 12.77546,-12.29045 6.9217,0.13407 12.42425,5.85376 12.29046,12.77547 -0.13408,6.92169 -5.85376,12.42424 -12.77546,12.29045 -3.8246,-0.0742 -7.40602,-1.89061 -9.72541,-4.93257 z m 29.43558,34.16664 c -2.19311,-2.6598 -2.9326,-6.23042 -1.9762,-9.54246 1.60029,-5.54207 7.3903,-8.73754 12.93238,-7.13731 5.54208,1.60029 8.73755,7.39029 7.13732,12.93238 -1.60029,5.54207 -7.39029,8.73755 -12.93238,7.13732 -2.0227,-0.58401 -3.82171,-1.76562 -5.16112,-3.38993 z m 69.70483,72.8261 c -0.37218,-0.48257 -0.7024,-0.9961 -0.98719,-1.53487 -2.76572,-5.22378 -0.77294,-11.70055 4.45094,-14.46607 5.22443,-2.76509 11.70123,-0.77103 14.46576,4.45369 2.7645,5.22374 0.77128,11.69948 -4.45217,14.46454 -4.60375,2.43705 -10.29351,1.20545 -13.47734,-2.91729 z m -27.55784,-43.65366 c -3.1946,-3.88492 -3.21018,-9.48258 -0.0371,-13.38514 3.68309,-4.53024 10.34109,-5.21747 14.87189,-1.53508 4.5316,3.68284 5.21945,10.34205 1.5363,14.87341 -3.68338,4.53191 -10.34348,5.21912 -14.87463,1.53478 -0.54718,-0.44484 -1.04847,-0.94332 -1.49641,-1.48797 z m 58.63976,57.81499 c -1.06005,-1.21393 -1.8851,-2.61443 -2.43318,-4.13 -2.44311,-6.75186 1.04963,-14.2059 7.80138,-16.64931 6.75266,-2.44378 14.20775,1.04988 16.65054,7.8029 2.44311,6.75187 -1.04963,14.20589 -7.80138,16.6493 -5.04305,1.82528 -10.6894,0.36661 -14.21736,-3.67289 z M 472.87323,620.45902 c -2.80764,-3.69426 -3.37494,-8.62644 -1.47934,-12.86167 2.8624,-6.39649 10.36811,-9.26157 16.76471,-6.39942 6.3965,2.86239 9.26159,10.36811 6.39943,16.76472 -2.86193,6.39782 -10.3689,9.26367 -16.76624,6.40065 -1.94075,-0.86876 -3.63206,-2.21131 -4.91856,-3.90428 z m 45.78004,42.23403 c -3.98528,-5.2571 -3.34,-12.67844 1.4928,-17.16883 5.19739,-4.82832 13.32491,-4.52885 18.15287,0.66889 4.82789,5.19682 4.52911,13.32337 -0.66737,18.15164 -5.19739,4.82833 -13.32492,4.52885 -18.15288,-0.66889 -0.29131,-0.31366 -0.56682,-0.64166 -0.82543,-0.9828 z"
+ id="path45821-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccscccccccccccccccccccccccccccscccccccccccccscccccscccccccccccccccccccccccccccccccccccccccscccccccsccccscccccccccccccccccccccccsccccscsccccccccccccccsccccccccscccsscccccccccccccccccccccccccscsccsccccscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccssccscccccsccccsccccccccccccccccccccccccccccccccsccccsccccscccscccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccccccccccccccccccccccsccccccccccccccccccccccsscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsscccsccccscccccccccccccccccccccccccccccccscccssscsccccccccccccccsccccccccccccccccssscsccccscccccccccscccccccccccccc" />
+ <path
+ style="color:#000000;fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715532999999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d=""
+ id="path54483-1"
+ inkscape:connector-curvature="0"
+ transform="translate(0,452.36216)" />
+ <path
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.47715532999999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 446.49318,561.34265 c -0.29563,0.0542 -0.59144,0.098 -0.88672,0.15692 -25.79016,5.14867 -87.89844,24.62342 -87.89844,24.62342 76.93842,-1.32265 89.82678,-0.0807 95.64062,8.30915 3.43335,4.95467 -1.45662,11.82573 -21.95117,15.50807 -22.31219,4.0089 -68.71875,8.99571 -68.71875,8.99571 -44.5297,3.13684 -75.91009,3.57706 -85.16797,24.55868 -6.04831,13.70751 6.74815,25.67877 12.37305,33.19149 23.73629,27.26589 57.83769,41.79731 79.79883,52.52461 8.26321,4.0362 32.47656,11.58887 32.47656,11.58887 -71.01583,-3.52004 -122.05321,19.76197 -151.89648,46.33393 -33.73014,33.24127 -18.41273,72.41573 51.36718,96.04565 41.21482,13.95678 61.65316,20.51162 122.93165,14.22128 36.10362,-2.33537 41.80642,-1.1663 42.18945,1.93999 0.53907,4.37338 -40.00615,15.5771 -51.07227,19.02317 -18.05502,5.62243 -54.7165,14.92781 -78.92187,20.93765 a 196.41905,197.26698 0 0 0 17.53125,5.08043 c 2.49441,-0.19217 5.03527,-0.40727 7.65429,-0.67085 11.07305,-1.11431 53.1118,-5.7901 84.51172,-13.2817 0,0 38.28567,-8.9253 58.74414,-17.02042 8.58318,-3.39759 15.57032,-6.58111 21.22461,-9.82151 a 196.41905,197.26698 0 0 0 16.98633,-16.2515 c -0.0586,-2.45011 1.01271,-9.10758 -8.37305,-13.14832 -25.39181,-10.93152 -54.72998,-8.67923 -112.82226,-9.49981 -64.42866,-1.7993 -85.93871,-12.93469 -97.41992,-21.95178 -11.01351,-9.15264 -5.69927,-34.76483 41.0332,-57.66584 23.53592,-12.1842 115.98242,-35.06675 115.98242,-35.06675 -31.30818,-15.92015 -89.67555,-43.88093 -101.67578,-49.92357 -10.52484,-5.29966 -27.36473,-13.27014 -31.07422,-23.05024 -4.19322,-9.38379 9.61145,-17.61011 17.33789,-19.99612 24.8835,-7.74892 60.05565,-12.72461 92.09375,-13.51121 16.1041,-0.39515 18.70899,-1.50254 18.70899,-1.50254 22.19458,-4.04764 36.70726,-20.1177 30.42578,-45.32961 -0.91003,-4.13686 -2.42872,-7.99001 -4.43946,-11.52807 a 196.41905,197.26698 0 0 0 -56.69335,-23.81918 z"
+ id="path54245-1-9"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient5688);fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="path5680"
+ sodipodi:cx="249.50768"
+ sodipodi:cy="717.68018"
+ sodipodi:rx="81.822357"
+ sodipodi:ry="81.822357"
+ d="m 331.33003,717.68018 a 81.822357,81.822357 0 1 1 -163.64471,0 81.822357,81.822357 0 1 1 163.64471,0 z"
+ transform="matrix(0.64576348,0,0,0.64576348,-25.14132,-167.84288)" />
+ <g
+ transform="matrix(0.66013278,-0.18035686,0.18035686,0.66013278,-275.17315,-19.80709)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:semi-condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:NK57 Monospace;-inkscape-font-specification:NK57 Monospace Semi-Bold Semi-Condensed"
+ id="flowRoot5558"
+ inkscape:path-effect="#path-effect5732">
+ <path
+ d="m 352.09726,585.922 0.74088,4.4183 c 2.60808,-0.43841 5.21946,-0.86724 7.83406,-1.28555 l 4.25397,26.62809 c 1.66943,-0.26615 3.33889,-0.52791 5.00835,-0.785 l -4.10944,-26.65301 c 2.60535,-0.40205 5.21383,-0.79311 7.82536,-1.17226 l -0.64389,-4.43503 c -6.99559,1.01567 -13.96589,2.11619 -20.90929,3.28446 z"
+ id="path5714"
+ inkscape:original-d="m 354.8425,585.685 0,4.48 7.8,0 0,26.96 5.12,0 0,-26.96 7.76,0 0,-4.48 -20.68,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 378.37377,591.9356 1.97472,14.06676 c 0.82369,5.86752 3.22686,7.29806 7.0509,6.7905 3.3996,-0.45122 5.50145,-2.04042 6.6426,-4.11688 l 0.34622,2.81934 c 1.47335,-0.18131 2.94661,-0.358 4.41976,-0.52989 l -2.48354,-21.33817 c -1.61311,0.18757 -3.22539,0.38064 -4.83681,0.57899 l 1.84412,14.96965 c -0.73212,1.54256 -2.13629,2.76258 -4.69126,3.09539 -2.12178,0.27639 -3.2022,-0.30146 -3.59107,-3.19759 l -1.85299,-13.80026 c -1.60844,0.21587 -3.216,0.43666 -4.82265,0.66216 z"
+ id="path5716"
+ inkscape:original-d="m 379.44375,595.645 0,14.2 c 0,5.91999 2.2,7.68 6.12,7.68 3.48,0 5.8,-1.32 7.2,-3.24 l 0,2.84 4.52,0 0,-21.48 -4.8,0 0,15.08 c -0.92,1.44 -2.48,2.48 -5.08,2.48 -2.16,0 -3.16,-0.72 -3.16,-3.64 l 0,-13.92 -4.8,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 400.20558,590.35399 0.4102,3.69744 c 1.12209,-0.12446 2.24448,-0.24616 3.36716,-0.36501 l 1.04456,9.86451 c 0.52807,4.9869 3.11908,6.92324 9.19904,6.36008 7.13087,-0.6605 7.95524,-3.30301 7.59983,-7.83496 l -0.0375,-0.47837 c -1.34463,0.10559 -2.6892,0.21588 -4.03369,0.33076 l 0.051,0.59766 c 0.17722,2.0775 -0.3239,3.18958 -3.62188,3.4931 -3.02346,0.27826 -4.14135,-0.56537 -4.36497,-2.83806 l -0.98302,-9.99045 c 3.66472,-0.36051 7.3324,-0.68969 11.00281,-0.98498 l -0.29828,-3.70685 c -3.69325,0.29695 -7.38291,0.62786 -11.06876,0.99018 l -0.58746,-5.97039 c -1.64274,0.1613 -3.28447,0.32875 -4.92515,0.50214 l 0.63179,5.96644 c -1.12892,0.11943 -2.25748,0.24171 -3.38565,0.36676 z"
+ id="path5718"
+ inkscape:original-d="m 401.005,596.805 0,3.72 3.36,0 0,9.92 c 0,4.99999 2.40001,7.24 8.64,7.24 7.31999,0 8.36,-2.64 8.36,-7.16 l 0,-0.48 -4.08,0 0,0.6 c 0,2.08 -0.6,3.16 -3.96,3.16 -3.08,0 -4.12,-0.96 -4.12,-3.24 l 0,-10.04 10.96,0 0,-3.72 -10.96,0 0,-6 -4.84,0 0,6 -3.36,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 434.55183,585.76447 c -6.73568,0.36346 -9.25126,3.64148 -8.66815,11.87853 0.58858,8.31435 3.47463,11.025 9.88452,10.68002 6.40386,-0.34465 8.93629,-3.34489 8.63501,-11.67566 -0.2985,-8.25372 -3.11151,-11.24657 -9.85138,-10.88289 z m 0.22605,4.1923 c 3.35711,-0.18107 4.70393,1.13273 4.96392,6.87997 0.26225,5.79698 -0.9433,7.15868 -4.1975,7.33391 -3.25524,0.17529 -4.60162,-1.04931 -4.96281,-6.84062 -0.35809,-5.74154 0.83984,-7.19223 4.19639,-7.37326 z"
+ id="path5720"
+ inkscape:original-d="m 435.08625,595.085 c -6.59999,0 -9.32,3.04001 -9.32,11.32 0,8.31999 2.72001,11.28 9.32,11.28 6.59999,0 9.28,-2.96001 9.28,-11.28 0,-8.27999 -2.68001,-11.32 -9.28,-11.32 m 0,4.2 c 3.32,0 4.6,1.36001 4.6,7.12 0,5.79999 -1.28,7.12 -4.6,7.12 -3.32,0 -4.6,-1.32001 -4.6,-7.12 0,-5.75999 1.28,-7.12 4.6,-7.12"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 449.26672,585.73296 0.55556,21.4711 c 0.63074,-0.0159 1.26142,-0.0306 1.89205,-0.044 0.92828,-0.0204 1.85663,-0.038 2.78502,-0.0529 l -0.23012,-14.35814 c 2.01382,-2.19301 4.27081,-3.45502 6.53731,-3.46085 1.45694,-0.004 2.62786,0.44005 3.02985,0.92157 l -0.011,3.03996 c 1.48427,0.005 2.96851,0.0175 4.45265,0.0365 l 0.0629,-4.91954 c -0.50562,-1.64606 -2.80769,-3.15767 -5.9137,-3.15994 -3.42875,-0.003 -6.1913,1.74988 -8.49221,4.34734 l -0.0651,-3.91945 c -0.87554,0.0145 -1.75104,0.0314 -2.6265,0.0506 -0.659,0.0146 -1.3179,0.0305 -1.9767,0.0477 z"
+ id="path5722"
+ inkscape:original-d="m 449.5275,595.645 0,21.48 4.8,0 0,-14.36 c 2.04,-2.16 4.28,-3.4 6.52,-3.4 1.44,0 2.6,0.44 3,0.92 l 0,3.04 4.44,0 0,-4.92 c -0.52,-1.64 -2.8,-3.12 -5.84,-3.12 -3.36,0 -6.08,1.72 -8.4,4.28 l 0,-3.92 -4.52,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 474.93678,585.73441 -0.098,3.75866 c 1.73827,0.0453 3.4763,0.0999 5.21398,0.16375 l -0.51394,13.99024 c -1.89737,-0.0697 -3.79518,-0.128 -5.69328,-0.17496 l -0.0921,3.7188 c 5.32509,0.13172 10.64782,0.35354 15.96504,0.66545 l 0.21792,-3.71347 c -1.88225,-0.11043 -3.76518,-0.20965 -5.64865,-0.29767 l 0.82932,-17.7401 c -3.39205,-0.1586 -6.78573,-0.28216 -10.18034,-0.3707 z m 4.37793,-6.35014 c -0.0801,2.32075 0.98899,3.55191 3.31959,3.64854 2.28967,0.0949 3.45685,-1.04391 3.56892,-3.36319 0.11187,-2.31509 -0.94906,-3.534 -3.27902,-3.63062 -2.37152,-0.0983 -3.52956,1.02896 -3.60949,3.34527 z"
+ id="path5724"
+ inkscape:original-d="m 474.72875,595.645 0,3.76 5.16,0 0,14 -5.8,0 0,3.72 16.4,0 0,-3.72 -5.76,0 0,-17.76 -10,0 m 4.08,-6.48 c 0,2.32 1.08,3.52 3.36,3.52 2.24,0 3.32,-1.2 3.32,-3.52 0,-2.32 -1.08,-3.48 -3.32,-3.48 -2.28,0 -3.36,1.16 -3.36,3.48"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 502.13596,596.30638 c -4.58857,0.54372 -6.97015,2.24465 -7.24464,6.22868 -0.25082,3.64042 1.42288,6.17527 5.79399,6.53455 2.68231,0.22047 4.56068,-0.40825 6.94338,-1.8287 0.0843,-0.0588 0.16867,-0.11762 0.25305,-0.1764 0.15718,1.62438 1.14626,2.31884 3.23789,2.53764 0.85264,0.0892 1.70502,0.18072 2.55713,0.27459 l 0.4117,-3.73715 c -0.20823,-0.0229 -0.41647,-0.0457 -0.62473,-0.0684 -0.85881,-0.0934 -1.11991,-0.24076 -1.01408,-1.2355 l 1.06628,-10.02279 c 0.55354,-5.2031 -2.47527,-7.40058 -7.73697,-7.86833 -3.94684,-0.35087 -7.28036,0.44666 -9.01851,2.6098 l -0.28567,4.0297 c 1.40301,0.0995 2.80558,0.20502 4.20766,0.31667 l 0.18098,-2.2727 c 0.63873,-0.42831 1.73814,-0.90764 4.07421,-0.70232 2.90698,0.2555 4.30239,1.32478 4.02852,4.14818 l -0.0463,0.47773 c -2.2661,0.23563 -4.52745,0.48725 -6.78385,0.75474 z m 0.10891,9.1206 c -2.10863,-0.17895 -3.05455,-1.21032 -2.91717,-2.96672 0.14959,-1.91255 1.35626,-2.62556 3.61242,-2.87505 1.88259,-0.25424 3.76903,-0.49736 5.65918,-0.72928 l -0.45953,4.73748 c -0.2497,0.12313 -0.49919,0.24646 -0.74848,0.36998 -2.6629,1.31523 -3.96902,1.60392 -5.14642,1.46359 z"
+ id="path5726"
+ inkscape:original-d="m 502.21,604.725 c -4.52,0.92 -6.8,2.76 -6.8,6.76 0,3.64 1.88,6.08 6.4,6.08 2.76,0 4.64,-0.8 6.92,-2.44 l 0.24,-0.2 c 0.32,1.6 1.4,2.2 3.56,2.2 l 2.64,0 0,-3.76 -0.64,0 c -0.88,0 -1.16,-0.12 -1.16,-1.12 l 0,-10.08 c 0,-5.23999 -3.20001,-7.08 -8.36,-7.08 -3.88,0 -7.08,1.04 -8.64,3.32 l 0,4.04 4.2,0 0,-2.28 c 0.6,-0.48 1.64,-1.04 3.96,-1.04 2.88,0 4.36,0.92 4.36,3.76 l 0,0.48 -6.68,1.36 m 0.88,9.08 c -2.16,0 -3.2,-0.96 -3.2,-2.72 0,-1.92 1.16,-2.72 3.4,-3.16 l 5.6,-1.24 0,4.76 -0.72,0.44 c -2.56,1.56 -3.88,1.96 -5.08,1.92"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 523.43911,579.36486 -0.45429,3.69189 c 1.82956,0.22514 3.6579,0.46048 5.4849,0.706 l -3.19633,23.78445 c -1.94613,-0.26153 -3.89393,-0.51091 -5.84326,-0.74813 l -0.44938,3.69249 c 5.2862,0.6433 10.56105,1.37668 15.82139,2.20016 l 0.57524,-3.675 c -1.79761,-0.2814 -3.59688,-0.55236 -5.3977,-0.81288 l 3.96852,-27.43244 c -3.49808,-0.50603 -7.00136,-0.97488 -10.50909,-1.40654 z"
+ id="path5728"
+ inkscape:original-d="m 521.29125,585.685 0,3.72 5.36,0 0,24 -6,0 0,3.72 16.4,0 0,-3.72 -5.56,0 0,-27.72 -10.2,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 540.77114,606.77031 -0.0858,0.51283 c -0.65156,3.8937 0.58619,6.98681 7.1854,8.21518 5.98012,1.11314 9.80709,-0.54415 10.80059,-5.33463 0.56007,-2.70049 -0.14476,-4.56918 -2.4289,-6.00478 -3.59145,-2.2257 -10.14419,-2.31597 -9.5589,-5.62442 0.32733,-1.8503 2.40374,-2.21866 5.07589,-1.71912 1.63169,0.30504 2.98158,0.80988 4.20652,1.70251 l -0.43967,2.23715 c 1.35576,0.26645 2.71038,0.53877 4.0638,0.81697 l 0.86978,-4.23152 c -2.00005,-2.1666 -4.68515,-3.35477 -7.97337,-3.97002 -4.83329,-0.90434 -9.36381,-0.15969 -10.16379,4.61601 -0.70945,4.2353 2.56256,5.76404 5.86103,6.91345 3.31072,1.15368 6.67376,1.93639 6.16492,4.51057 -0.41991,2.12433 -2.21035,3.05894 -5.63581,2.42018 -3.38855,-0.63188 -4.26952,-1.98729 -3.92789,-3.92406 l 0.0764,-0.43329 c -1.36235,-0.24033 -2.72577,-0.47467 -4.0902,-0.70301 z"
+ id="path5730"
+ inkscape:original-d="m 542.0925,610.325 0,0.52 c 0,3.92 1.76001,6.84 8.68,6.84 6.27999,0 9.76,-2.44 9.76,-7.32 0,-2.76 -1.08,-4.44 -3.6,-5.4 -3.96,-1.48 -10.4,-0.4 -10.4,-3.76 0,-1.88 1.96,-2.6 4.64,-2.6 1.64,0 3.04,0.24 4.4,0.88 l 0,2.28 4.12,0 0,-4.32 c -2.36,-1.72 -5.16,-2.36 -8.44,-2.36 -4.8,0 -9.08,1.48 -9.08,6.32 0,8.59999 13.92,3.84001 13.92,9.08 0,2.16 -1.6,3.44 -5.16,3.44 -3.52,0 -4.64,-1.2 -4.64,-3.16 l 0,-0.44 -4.2,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient5749);fill-opacity:1;stroke:none"
+ id="path5680-4"
+ sodipodi:cx="249.50768"
+ sodipodi:cy="717.68018"
+ sodipodi:rx="81.822357"
+ sodipodi:ry="81.822357"
+ d="m 331.33003,717.68018 a 81.822357,81.822357 0 1 1 -163.64471,0 81.822357,81.822357 0 1 1 163.64471,0 z"
+ transform="matrix(0.81066669,0,0,0.81066669,269.97875,-275.7564)" />
+ <g
+ transform="matrix(0.89992469,0.2411341,-0.2411341,0.89992469,210.84676,-347.11565)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:semi-condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:NK57 Monospace;-inkscape-font-specification:NK57 Monospace Semi-Bold Semi-Condensed"
+ id="flowRoot5558-9"
+ inkscape:path-effect="#path-effect5809">
+ <path
+ d="m 358.76958,586.3818 c -1.84647,10.36307 -3.62624,20.74308 -5.33786,31.13921 1.40407,0.38116 2.8103,0.75596 4.2186,1.12427 2.9989,-5.61229 5.94388,-11.24678 8.83316,-16.90274 -0.11203,6.35285 -0.16473,12.71403 -0.15645,19.08251 1.51102,0.36395 3.02426,0.72023 4.53965,1.06868 3.33731,-9.99118 6.60669,-20.00153 9.80677,-30.0304 -1.44895,-0.32301 -2.89681,-0.65382 -4.34349,-0.99225 -2.14884,6.74448 -4.3246,13.48151 -6.52696,20.21094 -0.0574,-5.73182 -0.0629,-11.45776 -0.018,-17.177 -0.83705,-0.20731 -1.67364,-0.41709 -2.50973,-0.62931 -2.63801,5.1789 -5.32266,10.33978 -8.05257,15.48207 1.28626,-7.06735 2.59755,-14.12875 3.93359,-21.18404 -1.46375,-0.39 -2.92601,-0.78737 -4.3867,-1.19194 z"
+ id="path5791"
+ inkscape:original-d="m 353.5625,585.685 3.08,31.44 4.2,0 4.28,-18.56 4.32,18.56 4.48,0 2.92,-31.44 -4.6,0 -1.72,21.16 -4.08,-16.68 -2.64,0 -3.92,17 -1.64,-21.48 -4.68,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 389.94306,603.40183 c -6.37429,-1.23653 -9.67194,1.0922 -11.43377,9.21049 -1.75976,8.10879 0.335,11.6681 7.13344,12.98364 6.80195,1.31622 10.03587,-1.21288 11.4259,-9.38947 1.39163,-8.18608 -0.75533,-11.56891 -7.12557,-12.80466 z m -0.79918,4.12458 c 3.24669,0.62951 4.27332,2.18144 3.2403,7.85554 -1.03784,5.70058 -2.57054,6.78293 -5.94989,6.12872 -3.3788,-0.65411 -4.39618,-2.22996 -3.2306,-7.90705 1.16019,-5.65079 2.69282,-6.70686 5.94019,-6.07721 z"
+ id="path5793"
+ inkscape:original-d="m 388.52375,595.085 c -6.59999,0 -9.32,3.04001 -9.32,11.32 0,8.31999 2.72001,11.28 9.32,11.28 6.59999,0 9.28,-2.96001 9.28,-11.28 0,-8.27999 -2.68001,-11.32 -9.28,-11.32 m 0,4.2 c 3.32,0 4.6,1.36001 4.6,7.12 0,5.79999 -1.28,7.12 -4.6,7.12 -3.32,0 -4.6,-1.32001 -4.6,-7.12 0,-5.75999 1.28,-7.12 4.6,-7.12"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 403.90895,606.42166 -3.32135,21.22025 c 1.64995,0.25772 3.3018,0.50532 4.95544,0.74261 l 2.04357,-14.21097 c 2.33939,-1.84473 4.71461,-2.77316 6.92844,-2.49334 1.42326,0.1799 2.52054,0.75312 2.86119,1.27638 l -0.35629,3.01773 c 1.481,0.17492 2.96291,0.34093 4.44566,0.49788 l 0.51748,-4.89019 c -0.34156,-1.68483 -2.42476,-3.39124 -5.39137,-3.75354 -3.28481,-0.40115 -6.16643,0.93548 -8.82635,3.13836 l 0.56069,-3.87894 c -1.47325,-0.21337 -2.94565,-0.4355 -4.41711,-0.66623 z"
+ id="path5795"
+ inkscape:original-d="m 402.965,595.645 0,21.48 4.8,0 0,-14.36 c 2.04,-2.16 4.28,-3.4 6.52,-3.4 1.44,0 2.6,0.44 3,0.92 l 0,3.04 4.44,0 0,-4.92 c -0.52,-1.64 -2.8,-3.12 -5.84,-3.12 -3.36,0 -6.08,1.72 -8.4,4.28 l 0,-3.92 -4.52,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 441.01659,610.31558 c -3.3557,2.88453 -6.7972,5.71756 -10.31932,8.49846 l 1.51609,-19.0487 c -1.52674,-0.12146 -3.05336,-0.25353 -4.57976,-0.39602 l -2.91549,31.28675 c 1.66603,0.15511 3.33348,0.29917 5.00226,0.43202 l 0.61215,-7.69121 c 1.88014,-1.41437 3.73875,-2.84337 5.57507,-4.28689 1.45514,4.23397 2.97199,8.45945 4.55207,12.67538 1.7438,0.0874 3.48881,0.16221 5.23494,0.22419 -2.08019,-5.30245 -4.05767,-10.62142 -5.93552,-15.95477 2.26488,-1.81279 4.49428,-3.64837 6.68674,-5.50659 -1.81006,-0.0626 -3.61985,-0.14019 -5.42923,-0.23262 z"
+ id="path5797"
+ inkscape:original-d="m 440.80625,595.645 -9.76,9.16 0,-19.12 -4.8,0 0,31.44 4.8,0 0,-7.72 5.16,-4.68 5.12,12.4 5,0 -6.48,-15.68 6.48,-5.8 -5.52,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 448.6468,625.30037 -0.0141,0.51974 c -0.0588,2.17207 0.44809,4.05921 2.16442,5.32728 1.37298,1.0127 3.53522,1.63368 6.76931,1.63524 6.63328,0.003 10.17666,-2.60267 10.03911,-7.45762 -0.0782,-2.76062 -1.23162,-4.39852 -3.7949,-5.31186 -4.02134,-1.40456 -10.52024,-0.34457 -10.47398,-3.73792 0.0256,-1.88079 1.98771,-2.56749 4.64256,-2.56799 1.62978,-3.2e-4 3.0172,0.2278 4.38092,0.84979 l 0.0309,2.279 c 1.37656,-0.0186 2.75301,-0.0457 4.12926,-0.0812 l -0.11154,-4.31677 c -2.38031,-1.65937 -5.12897,-2.25108 -8.35235,-2.25001 -2.65762,8.8e-4 -5.16157,0.43789 -6.86557,1.68123 -1.3156,0.96096 -2.16595,2.41087 -2.22251,4.5176 -0.057,2.12323 0.76051,3.45324 2.04185,4.32722 3.90147,2.66105 11.97427,0.88593 12.03394,4.83033 0.0325,2.15042 -1.60036,3.47949 -5.3084,3.4791 -3.66474,-3.8e-4 -4.80455,-1.24416 -4.77655,-3.1935 l 0.006,-0.43992 c -0.68335,-0.01 -1.36672,-0.0214 -2.05009,-0.0353 -0.75636,-0.0157 -1.51258,-0.0338 -2.26865,-0.0545 z"
+ id="path5799"
+ inkscape:original-d="m 448.9675,610.325 0,0.52 c 0,3.92 1.76001,6.84 8.68,6.84 6.27999,0 9.76,-2.44 9.76,-7.32 0,-2.76 -1.08,-4.44 -3.6,-5.4 -3.96,-1.48 -10.4,-0.4 -10.4,-3.76 0,-1.88 1.96,-2.6 4.64,-2.6 1.64,0 3.04,0.24 4.4,0.88 l 0,2.28 4.12,0 0,-4.32 c -2.36,-1.72 -5.16,-2.36 -8.44,-2.36 -4.8,0 -9.08,1.48 -9.08,6.32 0,8.59999 13.92,3.84001 13.92,9.08 0,2.16 -1.6,3.44 -5.16,3.44 -3.52,0 -4.64,-1.2 -4.64,-3.16 l 0,-0.44 -4.2,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 472.06242,600.47892 1.38976,31.39474 c 1.67444,-0.0742 3.34813,-0.16008 5.02092,-0.25759 l -0.87528,-15.00755 c 0.83696,-1.53313 2.32201,-2.65779 4.90364,-2.84662 2.14231,-0.1567 3.19811,0.47054 3.43756,3.38227 l 1.14044,13.86757 c 1.66935,-0.13708 3.33759,-0.2856 5.00458,-0.44546 l -1.35727,-14.13009 c -0.56648,-5.89744 -2.9044,-7.37855 -6.7316,-7.07802 -3.36959,0.2646 -5.56544,1.71251 -6.62083,3.41864 l -0.73095,-12.5329 c -1.5268,0.0891 -3.05383,0.16751 -4.58097,0.23501 z"
+ id="path5801"
+ inkscape:original-d="m 472.80875,585.685 0,31.44 4.8,0 0,-15.04 c 0.92,-1.48 2.48,-2.52 5.08,-2.52 2.16,0 3.16,0.72 3.16,3.64 l 0,13.92 4.8,0 0,-14.2 c 0,-5.91999 -2.2,-7.64 -6.12,-7.64 -3.44,0 -5.76,1.32 -6.92,2.96 l 0,-12.56 -4.8,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 503.94097,607.00641 c -6.399,0.87628 -8.77665,4.12163 -7.86662,12.37537 0.90827,8.23772 4.03487,10.95508 10.9282,10.01398 6.89119,-0.9408 9.13291,-4.38972 7.79995,-12.57232 -1.33571,-8.1995 -4.45979,-10.6937 -10.86153,-9.81703 z m 0.56897,4.16085 c 3.26755,-0.4472 4.73864,0.68718 5.59265,6.39078 0.85773,5.72836 -0.24457,7.24947 -3.66359,7.7165 -3.41924,0.46705 -4.8895,-0.70271 -5.60044,-6.45001 -0.70786,-5.72244 0.40422,-7.21013 3.67138,-7.65727 z"
+ id="path5803"
+ inkscape:original-d="m 504.93,595.085 c -6.59999,0 -9.32,3.04001 -9.32,11.32 0,8.31999 2.72001,11.28 9.32,11.28 6.59999,0 9.28,-2.96001 9.28,-11.28 0,-8.27999 -2.68001,-11.32 -9.28,-11.32 m 0,4.2 c 3.32,0 4.6,1.36001 4.6,7.12 0,5.79999 -1.28,7.12 -4.6,7.12 -3.32,0 -4.6,-1.32001 -4.6,-7.12 0,-5.75999 1.28,-7.12 4.6,-7.12"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 523.96376,610.8158 c 0.68804,-1.7625 1.96017,-2.94078 4.30658,-3.42054 1.94698,-0.39809 3.93452,-0.12957 5.23914,5.9324 1.29657,6.0245 -0.41109,7.29323 -2.5724,7.73414 -2.31489,0.47224 -4.00689,-0.18285 -5.3087,-1.52145 z m -5.86861,-5.4685 5.17738,29.18886 c 1.68232,-0.29791 3.36244,-0.60677 5.04023,-0.92649 -0.60142,-3.45594 -1.20433,-6.91161 -1.80873,-10.36702 0.74283,1.44801 3.84746,2.11652 7.21672,1.41122 4.04281,-0.8463 6.59835,-3.24893 4.50471,-12.41333 -2.10342,-9.20724 -5.31319,-10.18749 -9.07291,-9.39981 -2.85494,0.59812 -5.19568,1.99135 -6.17472,4.29371 l -0.49293,-2.59415 c -1.46177,0.27795 -2.92506,0.54698 -4.38975,0.80701 z"
+ id="path5805"
+ inkscape:original-d="m 524.17125,602.085 c 1,-1.6 2.48,-2.52 4.88,-2.52 2,0 3.88,0.68001 3.88,6.88 0,6.15999 -1.88,7.04 -4,7.04 -2.28,0 -3.76,-0.96 -4.76,-2.52 l 0,-8.88 m -4.8,-6.44 0,29.64 4.8,0 0.16,-10.52 c 0.44,1.56 3.24,2.8 6.52,2.8 3.92,0 6.84,-1.76001 6.84,-11.16 0,-9.43999 -2.92,-11.12 -6.84,-11.12 -2.96,0 -5.56,0.92 -6.96,3 l 0,-2.64 -4.52,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 543.49926,615.03105 0.12172,0.50572 c 0.90857,3.77498 3.38333,6.28673 10.40343,4.42654 6.37948,-1.69043 9.14055,-5.0985 7.77823,-9.76538 -0.77409,-2.65179 -2.3037,-3.94696 -5.01725,-4.1784 -4.25103,-0.3358 -10.2658,2.36146 -11.09734,-0.92512 -0.4615,-1.82399 1.26139,-2.99734 3.83661,-3.68178 1.58018,-0.41998 2.98496,-0.55522 4.46592,-0.30207 l 0.61101,2.19692 c 1.32902,-0.36951 2.65606,-0.74606 3.98102,-1.12958 l -1.20164,-4.14964 c -2.73134,-1.00107 -5.5546,-0.87088 -8.68472,-0.0385 -4.55458,1.21124 -8.3398,3.64461 -7.20687,8.34743 1.00891,4.18801 4.65657,4.28857 8.23613,3.91713 3.56358,-0.36978 7.02319,-1.20666 7.7273,1.31189 0.57963,2.07334 -0.65839,3.77101 -4.23082,4.71902 -3.53078,0.93696 -4.95007,0.0324 -5.42757,-1.85987 l -0.10769,-0.42675 c -1.39384,0.3518 -2.7897,0.69595 -4.18747,1.0324 z"
+ id="path5807"
+ inkscape:original-d="m 542.0925,610.325 0,0.52 c 0,3.92 1.76001,6.84 8.68,6.84 6.27999,0 9.76,-2.44 9.76,-7.32 0,-2.76 -1.08,-4.44 -3.6,-5.4 -3.96,-1.48 -10.4,-0.4 -10.4,-3.76 0,-1.88 1.96,-2.6 4.64,-2.6 1.64,0 3.04,0.24 4.4,0.88 l 0,2.28 4.12,0 0,-4.32 c -2.36,-1.72 -5.16,-2.36 -8.44,-2.36 -4.8,0 -9.08,1.48 -9.08,6.32 0,8.59999 13.92,3.84001 13.92,9.08 0,2.16 -1.6,3.44 -5.16,3.44 -3.52,0 -4.64,-1.2 -4.64,-3.16 l 0,-0.44 -4.2,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient5826);fill-opacity:1;stroke:none"
+ id="path5680-4-3"
+ sodipodi:cx="249.50768"
+ sodipodi:cy="717.68018"
+ sodipodi:rx="81.822357"
+ sodipodi:ry="81.822357"
+ d="m 331.33003,717.68018 a 81.822357,81.822357 0 1 1 -163.64471,0 81.822357,81.822357 0 1 1 163.64471,0 z"
+ transform="matrix(0.81066669,0,0,0.81066669,-43.673611,7.5913832)" />
+ <g
+ transform="matrix(0.88833144,-0.07069696,0.07069696,0.88833144,-279.42433,87.288059)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:semi-condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:NK57 Monospace;-inkscape-font-specification:NK57 Monospace Semi-Bold Semi-Condensed"
+ id="flowRoot5558-9-5"
+ inkscape:path-effect="#path-effect5868">
+ <path
+ d="m 361.29955,586.50911 -9.06318,30.10522 c 1.71196,0.51622 3.42834,1.01967 5.14892,1.51012 l 3.90025,-13.69798 c 2.8905,0.82278 5.79193,1.60743 8.70321,2.35271 l -3.53281,13.79935 c 1.72114,0.44074 3.44607,0.86827 5.17459,1.28237 l 7.32853,-30.58397 c -1.56999,-0.37636 -3.13777,-0.76494 -4.70315,-1.16552 l -3.18548,12.44268 c -2.87318,-0.73545 -5.73711,-1.50976 -8.59071,-2.32166 l 3.5168,-12.35127 c -1.56852,-0.44565 -3.13425,-0.90308 -4.69697,-1.37205 z"
+ id="path5852"
+ inkscape:original-d="m 355.6025,585.685 0,31.44 5.12,0 0,-14.24 8.96,0 0,14.24 5.08,0 0,-31.44 -5.08,0 0,12.84 -8.96,0 0,-12.84 -5.12,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 385.42506,612.21564 c -4.65186,-0.0108 -7.33124,1.23921 -8.21483,5.15128 -0.79869,3.53617 0.56144,6.39058 5.23982,7.34845 2.83667,0.58079 4.95631,0.16508 7.58575,-1.0186 0.0942,-0.0506 0.18829,-0.1013 0.28237,-0.15201 0.0431,1.63103 1.05265,2.43119 3.29338,2.81048 0.91217,0.1544 1.82508,0.30492 2.73871,0.45151 l 0.5966,-3.71187 c -0.2189,-0.0352 -0.43776,-0.0705 -0.65658,-0.10611 -0.90303,-0.14691 -1.16959,-0.31486 -1.00525,-1.30046 l 1.65771,-9.94189 c 0.86322,-5.17703 -1.96211,-7.4803 -6.89995,-8.44167 -3.72796,-0.72581 -7.01539,-0.38007 -9.02082,1.50856 l -0.87857,3.9444 c 1.37271,0.30582 2.74729,0.60268 4.12364,0.89046 l 0.46659,-2.23221 c 0.68894,-0.35003 1.80503,-0.68081 4.06985,-0.2365 2.80066,0.54942 4.09258,1.70514 3.58422,4.50395 l -0.0858,0.47228 c -2.28694,0.0452 -4.57948,0.0651 -6.87686,0.0599 z m -0.91513,9.08014 c -2.2073,-0.44279 -3.06068,-1.6135 -2.69745,-3.33288 0.39742,-1.88126 1.72787,-2.41019 4.05536,-2.39281 1.95095,-0.0313 3.89803,-0.0805 5.84075,-0.14777 l -0.85067,4.68348 c -0.27011,0.10005 -0.54049,0.19975 -0.81115,0.29911 -2.87949,1.05304 -4.33256,1.17287 -5.53684,0.89087 z"
+ id="path5854"
+ inkscape:original-d="m 385.80375,604.725 c -4.52,0.92 -6.8,2.76 -6.8,6.76 0,3.64 1.88,6.08 6.4,6.08 2.76,0 4.64,-0.8 6.92,-2.44 l 0.24,-0.2 c 0.32,1.6 1.4,2.2 3.56,2.2 l 2.64,0 0,-3.76 -0.64,0 c -0.88,0 -1.16,-0.12 -1.16,-1.12 l 0,-10.08 c 0,-5.23999 -3.20001,-7.08 -8.36,-7.08 -3.88,0 -7.08,1.04 -8.64,3.32 l 0,4.04 4.2,0 0,-2.28 c 0.6,-0.48 1.64,-1.04 3.96,-1.04 2.88,0 4.36,0.92 4.36,3.76 l 0,0.48 -6.68,1.36 m 0.88,9.08 c -2.16,0 -3.2,-0.96 -3.2,-2.72 0,-1.92 1.16,-2.72 3.4,-3.16 l 5.6,-1.24 0,4.76 -0.72,0.44 c -2.56,1.56 -3.88,1.96 -5.08,1.92"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 403.83271,606.22882 -3.11532,21.24792 c 1.66516,0.24372 3.33254,0.47432 5.00198,0.69161 l 1.94367,-14.90885 c 1.10753,-1.35058 2.77115,-2.17781 5.33469,-1.88788 2.12652,0.24052 3.04714,1.04866 2.75026,3.95539 l -1.4137,13.84173 c 1.676,0.17102 3.35377,0.3284 5.03313,0.47195 l 1.20866,-14.14178 c 0.50453,-5.90318 -1.5177,-7.77677 -5.30819,-8.1816 -3.34208,-0.35695 -5.78759,0.61234 -7.41964,2.37723 l 0.37486,-2.85455 c -1.46459,-0.19264 -2.92811,-0.39642 -4.3904,-0.61117 z"
+ id="path5856"
+ inkscape:original-d="m 402.965,595.645 0,21.48 4.8,0 0,-15.04 c 0.92,-1.48 2.48,-2.52 5.08,-2.52 2.16,0 3.16,0.72 3.16,3.64 l 0,13.92 4.8,0 0,-14.2 c 0,-5.91999 -2.2,-7.64 -6.12,-7.64 -3.44,0 -5.8,1.28 -7.2,3.24 l 0,-2.88 -4.52,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 426.3872,624.83084 c -1.66561,0.73638 -2.19186,1.65411 -2.26483,2.6939 -0.0672,0.957 0.25251,1.78197 1.06208,2.31672 -2.02508,1.22944 -2.71695,2.44939 -2.84211,4.12852 -0.2188,2.93529 1.45091,4.82645 5.93191,5.07059 3.28813,0.17914 6.58211,0.30619 9.88083,0.37986 0.48503,0.01 0.97,0.018 1.45489,0.0253 4.4481,0.0671 6.54493,-1.6213 6.52374,-6.12604 -0.0211,-4.4892 -2.089,-6.20348 -6.31897,-6.27092 -0.46524,-0.007 -0.93052,-0.0159 -1.39583,-0.0255 -2.9952,-0.065 -5.98775,-0.17654 -8.97666,-0.33349 -0.49949,-0.0262 -0.65258,-0.27548 -0.63951,-0.51481 0.0131,-0.23965 0.19008,-0.42991 0.57156,-0.56989 1.28972,-0.54573 2.57215,-1.10002 3.8471,-1.66282 0.45157,0.058 0.90604,0.0752 1.4006,0.0925 1.46936,0.0515 2.75549,-0.01 3.86462,-0.19274 4.04081,-0.66903 5.71282,-2.91891 5.72051,-7.39139 0.006,-3.72116 -1.14765,-5.8727 -3.7492,-6.99163 0.1479,-0.27763 0.29536,-0.55537 0.4424,-0.83322 0.52164,-0.95385 0.94953,-1.265 2.15583,-1.25691 1.0628,0.007 2.12578,0.008 3.18889,0.003 l -0.0199,-3.59814 c -1.01104,0.005 -2.02189,0.004 -3.03251,-0.003 -2.46399,-0.016 -3.51547,0.41508 -4.31822,1.85003 -0.22238,0.39835 -0.42468,0.87247 -0.63223,1.43386 -0.20715,0.55539 -0.41551,1.11052 -0.62509,1.66539 -0.7398,-0.0986 -1.5575,-0.16226 -2.45498,-0.1931 -6.40342,-0.22004 -9.22529,1.57471 -9.61315,7.27343 -0.27924,4.10275 0.98275,6.41188 4.27652,7.50588 -1.14,0.51494 -2.28613,1.02313 -3.43827,1.52454 z m 8.66076,-13.02644 c 1.74492,0.0602 2.93094,0.30199 3.67339,1.0082 0.7185,0.6838 1.01936,1.80276 0.98799,3.59394 -0.0317,1.81134 -0.37333,2.92868 -1.14082,3.5869 -0.78979,0.67726 -2.03308,0.86667 -3.83376,0.80384 -3.5571,-0.12412 -4.84718,-1.06235 -4.65659,-4.72509 0.18962,-3.64416 1.5433,-4.38604 4.96979,-4.26779 z m 3.69178,18.98588 c 1.93712,0.0369 3.03093,0.80051 3.01263,2.68177 -0.0186,1.91737 -1.13721,2.59394 -3.11704,2.55702 -0.13596,-0.003 -0.27193,-0.005 -0.40791,-0.008 -2.93152,-0.065 -5.85962,-0.17275 -8.78346,-0.32238 -2.10526,-0.10774 -3.04259,-0.89492 -2.94784,-2.44841 0.066,-1.08201 0.58075,-1.80081 2.41264,-2.82503 3.13928,0.16867 6.28303,0.28809 9.43015,0.357 0.13361,0.003 0.26722,0.005 0.40083,0.008 z"
+ id="path5858"
+ inkscape:original-d="m 427.16625,611.805 c -1.56,0.84 -2,1.8 -2,2.84 0,0.96 0.36,1.76 1.16,2.24 -1.84,1.36 -2.4,2.64 -2.4,4.32 0,2.96 1.68,4.68 5.8,4.68 l 10.44,0 c 4.08,0 6.04,-1.64 6.04,-6.16 0,-4.48 -1.96,-6.24 -6.04,-6.24 l -9.96,0 c -0.48,0 -0.64,-0.24 -0.64,-0.48 0,-0.24 0.16,-0.44 0.52,-0.6 l 3.64,-1.84 c 0.44,0.04 0.88,0.04 1.36,0.04 6.59999,0 9.28,-2.04001 9.28,-7.76 0,-3.72 -1.16,-5.88 -3.84,-6.96 l 0.44,-0.84 c 0.52,-0.96 0.96,-1.28 2.2,-1.28 l 3.28,0 0,-3.6 -3.16,0 c -3.28,0 -4.16,0.76 -5.08,3.36 l -0.6,1.68 c -0.76,-0.08 -1.6,-0.12 -2.52,-0.12 -6.59999,0 -9.32,2.08001 -9.32,7.76 0,4.12 1.4,6.32 4.64,7.24 l -3.24,1.72 m 7.92,-13.44 c 3.48,0 4.8,0.84 4.8,4.48 0,3.68 -1.32,4.52 -4.8,4.52 -3.48,0 -4.8,-0.84 -4.8,-4.52 0,-3.64 1.32,-4.48 4.8,-4.48 m 4.12,18.88 c 1.84,0 2.88,0.76 2.88,2.64 0,1.92 -1.04,2.6 -2.88,2.6 l -8.56,0 c -1.96,0 -2.88,-0.72 -2.88,-2.28 0,-1.08 0.44,-1.84 2.12,-2.96 l 9.32,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 457.90055,608.39111 c -6.39757,0.29541 -9.06304,3.2815 -8.94224,11.58735 0.1204,8.27856 2.98555,11.29452 9.98474,10.97077 6.99327,-0.32347 9.52344,-3.58534 8.88904,-11.83872 -0.63661,-8.28218 -3.52846,-11.01506 -9.93154,-10.7194 z m 0.19374,4.19222 c 3.27774,-0.1514 4.64083,1.10202 4.99474,6.85539 0.35527,5.77527 -0.87705,7.19819 -4.33787,7.35822 -3.46166,0.16007 -4.82074,-1.14336 -4.99829,-6.92711 -0.17687,-5.76173 1.0644,-7.13513 4.34142,-7.2865 z"
+ id="path5860"
+ inkscape:original-d="m 458.3675,595.085 c -6.59999,0 -9.32,3.04001 -9.32,11.32 0,8.31999 2.72001,11.28 9.32,11.28 6.59999,0 9.28,-2.96001 9.28,-11.28 0,-8.27999 -2.68001,-11.32 -9.28,-11.32 m 0,4.2 c 3.32,0 4.6,1.36001 4.6,7.12 0,5.79999 -1.28,7.12 -4.6,7.12 -3.32,0 -4.6,-1.32001 -4.6,-7.12 0,-5.75999 1.28,-7.12 4.6,-7.12"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 471.82051,607.98023 1.3111,14.13096 c 0.54583,5.88298 2.99265,7.44915 7.10842,6.98874 3.63835,-0.40701 5.88921,-2.04213 7.07408,-4.13481 l 0.37924,2.81421 c 1.56637,-0.21042 3.13103,-0.43155 4.69385,-0.66322 l -3.15865,-21.24759 c -1.55777,0.23221 -3.11666,0.45316 -4.67653,0.66265 l 2.00099,14.9446 c -0.7463,1.54961 -2.21801,2.79919 -4.89856,3.11493 -2.22983,0.26266 -3.33501,-0.35115 -3.64833,-3.24983 l -1.49525,-13.83333 c -1.56277,0.16947 -3.12628,0.32711 -4.69036,0.47269 z"
+ id="path5862"
+ inkscape:original-d="m 472.56875,595.645 0,14.2 c 0,5.91999 2.2,7.68 6.12,7.68 3.48,0 5.8,-1.32 7.2,-3.24 l 0,2.84 4.52,0 0,-21.48 -4.8,0 0,15.08 c -0.92,1.44 -2.48,2.48 -5.08,2.48 -2.16,0 -3.16,-0.72 -3.16,-3.64 l 0,-13.92 -4.8,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 493.0328,606.45394 0.58776,3.67399 c 1.10513,-0.17702 2.20956,-0.35953 3.31324,-0.54747 l 1.66403,9.78253 c 0.8339,4.90235 3.68113,6.77216 10.13246,5.51102 7.55397,-1.47669 8.00267,-4.41376 7.04183,-8.7803 l -0.10322,-0.4691 c -1.36412,0.30014 -2.73003,0.59264 -4.09763,0.87736 l 0.1224,0.58777 c 0.42219,2.02737 0.0427,3.2373 -3.38322,3.91053 -3.14208,0.61746 -4.37664,-0.15178 -4.78925,-2.38771 l -1.82281,-9.87781 c 3.59265,-0.66352 7.17651,-1.38362 10.74989,-2.15772 l -0.78797,-3.63811 c -3.53671,0.76626 -7.08304,1.4791 -10.6373,2.13592 l -1.08933,-5.90307 c -1.54223,0.28528 -3.08574,0.55982 -4.63037,0.82339 l 1.00647,5.91685 c -1.09167,0.18604 -2.18401,0.36671 -3.27698,0.54193 z"
+ id="path5864"
+ inkscape:original-d="m 494.13,596.805 0,3.72 3.36,0 0,9.92 c 0,4.99999 2.40001,7.24 8.64,7.24 7.31999,0 8.36,-2.64 8.36,-7.16 l 0,-0.48 -4.08,0 0,0.6 c 0,2.08 -0.6,3.16 -3.96,3.16 -3.08,0 -4.12,-0.96 -4.12,-3.24 l 0,-10.04 10.96,0 0,-3.72 -10.96,0 0,-6 -4.84,0 0,6 -3.36,0"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 520.06055,614.9183 0.1178,0.50683 c 0.87916,3.78263 3.33708,6.31627 10.37599,4.50505 6.39421,-1.64532 9.17779,-5.03568 7.85022,-9.71156 -0.75448,-2.6574 -2.27434,-3.96386 -4.98645,-4.21528 -4.24902,-0.36709 -10.28482,2.28628 -11.09194,-1.00799 -0.44788,-1.82801 1.28368,-2.98844 3.864,-3.65357 1.58337,-0.40814 2.98931,-0.53285 4.46867,-0.2686 l 0.59504,2.2017 c 1.33191,-0.35968 2.66188,-0.72638 3.98982,-1.09997 l -1.1711,-4.15853 c -2.7247,-1.02183 -5.54959,-0.91304 -8.68586,-0.10433 -4.56296,1.17659 -8.36517,3.58092 -7.26871,8.29385 0.97655,4.19755 4.62417,4.32629 8.2079,3.98122 3.56746,-0.34351 7.03336,-1.15559 7.71916,1.36849 0.56449,2.07762 -0.68563,3.76716 -4.26623,4.68967 -3.53933,0.91188 -4.95274,-0.004 -5.41607,-1.9002 l -0.1045,-0.42769 c -1.39718,0.34149 -2.79646,0.67518 -4.19774,1.00091 z"
+ id="path5866"
+ inkscape:original-d="m 518.81125,610.325 0,0.52 c 0,3.92 1.76001,6.84 8.68,6.84 6.27999,0 9.76,-2.44 9.76,-7.32 0,-2.76 -1.08,-4.44 -3.6,-5.4 -3.96,-1.48 -10.4,-0.4 -10.4,-3.76 0,-1.88 1.96,-2.6 4.64,-2.6 1.64,0 3.04,0.24 4.4,0.88 l 0,2.28 4.12,0 0,-4.32 c -2.36,-1.72 -5.16,-2.36 -8.44,-2.36 -4.8,0 -9.08,1.48 -9.08,6.32 0,8.59999 13.92,3.84001 13.92,9.08 0,2.16 -1.6,3.44 -5.16,3.44 -3.52,0 -4.64,-1.2 -4.64,-3.16 l 0,-0.44 -4.2,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient5885);fill-opacity:1;stroke:none"
+ id="path5680-4-3-3"
+ sodipodi:cx="249.50768"
+ sodipodi:cy="717.68018"
+ sodipodi:rx="81.822357"
+ sodipodi:ry="81.822357"
+ d="m 331.33003,717.68018 a 81.822357,81.822357 0 1 1 -163.64471,0 81.822357,81.822357 0 1 1 163.64471,0 z"
+ transform="matrix(0.59461731,0,0,0.59461731,311.7629,109.61273)" />
+ <g
+ transform="matrix(0.99718594,-0.07496796,0.07496796,0.99718594,4.6325647,-25.634703)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:semi-condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:NK57 Monospace;-inkscape-font-specification:NK57 Monospace Semi-Bold Semi-Condensed"
+ id="flowRoot5558-9-5-8"
+ inkscape:path-effect="#path-effect5917">
+ <path
+ d="m 369.57361,588.49979 c -6.81457,-1.72519 -9.1926,-0.49154 -13.42614,12.77505 -4.15704,13.02685 -2.80853,15.85872 5.87068,17.96122 0.10975,1.31013 0.22893,2.62057 0.35742,3.93128 0.31431,3.23331 1.42685,4.61874 5.8126,5.47464 1.2995,0.25361 2.59975,0.49358 3.90059,0.72019 l 0.75306,-4.30627 c -1.37114,-0.23904 -2.7412,-0.49342 -4.10999,-0.76347 -1.90021,-0.37491 -2.3845,-0.8978 -2.69403,-2.13831 -0.19292,-0.76011 -0.38154,-1.52046 -0.56581,-2.28102 5.90119,0.60723 8.05019,-2.37532 10.08917,-13.78918 2.43073,-13.60676 0.82009,-15.86068 -5.98755,-17.58413 z m -1.07392,4.36881 c 3.67036,0.92238 4.37241,2.16757 2.23335,12.31424 -2.10876,10.00292 -3.34851,10.93441 -7.68849,9.87773 -4.34691,-1.05837 -4.94101,-2.43674 -2.15777,-12.3096 2.82376,-10.01659 3.9463,-10.80381 7.61291,-9.88237 z"
+ id="path5911"
+ inkscape:original-d="m 365.2425,585.085 c -8.11999,0 -10.16,2.24001 -10.16,16.04 0,13.79999 2.04001,15.76 10.16,15.76 l 1.16,3.76 c 0.96,3.12 2.16,4.16 6.12,4.16 l 3.52,0 0,-4.4 -3.8,0 c -1.76,0 -2.28,-0.4 -2.8,-1.56 l -0.96,-2.12 c 5.39999,-0.68 6.96,-3.88001 6.96,-15.6 0,-13.79999 -2.12001,-16.04 -10.2,-16.04 m 0,4.52 c 4.2,0 5.2,1.16001 5.2,11.56 0,10.31999 -1,11.4 -5.2,11.4 -4.2,0 -5.12,-1.08001 -5.12,-11.4 0,-10.39999 0.92,-11.56 5.12,-11.56"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 400.02018,617.14296 c -0.18618,5.23348 2.95696,8.23406 8.93854,8.21539 3.43383,-0.0107 6.11516,-1.05533 7.88228,-3.32722 0.6824,0.82931 1.37163,1.6561 2.06751,2.48031 1.6921,-0.0777 3.38269,-0.17324 5.07135,-0.28585 -1.76579,-2.02769 -3.49243,-4.07166 -5.17711,-6.131 1.25998,-3.12493 2.46501,-6.26303 3.61764,-9.41216 -1.26516,0.0862 -2.53015,0.16224 -3.79474,0.22786 -0.75047,2.03306 -1.52296,4.0612 -2.31811,6.08386 -1.61418,-2.06221 -3.18602,-4.13882 -4.71283,-6.22894 0.77273,-0.52287 1.54026,-1.05024 2.30267,-1.58192 3.10451,-2.18442 4.43985,-4.6891 4.27827,-7.84558 -0.24059,-4.69968 -3.17933,-6.7379 -7.59287,-6.64045 -4.8371,0.10681 -7.5707,2.6795 -7.67613,7.16297 -0.0611,2.59642 0.88627,4.40891 2.3165,6.50299 0.38591,0.56285 0.77523,1.12478 1.1679,1.68577 -4.98804,3.35355 -6.25833,5.93053 -6.37087,9.09397 z m 9.71193,4.13199 c -3.26413,0.0253 -5.071,-1.90472 -5.03251,-4.85157 0.0299,-2.28937 0.91574,-3.72211 3.68285,-5.49735 1.95209,2.72287 3.98121,5.42326 6.08156,8.09931 -0.99976,1.34961 -2.49813,2.23229 -4.7319,2.24961 z m -1.14316,-16.70767 c -1.13699,-1.70793 -1.74297,-2.71494 -1.73778,-4.34993 0.008,-2.60206 1.29205,-3.70801 3.75397,-3.75881 2.24059,-0.0462 3.59743,0.81201 3.6864,3.49823 0.0515,1.5554 -0.47531,2.95227 -2.35528,4.31735 -0.7937,0.5661 -1.59315,1.12735 -2.39846,1.68356 -0.31847,-0.46287 -0.63477,-0.92634 -0.94885,-1.3904 z"
+ id="path5913"
+ inkscape:original-d="m 400.725,609.645 c 0,5.27999 3.08001,8.08 8.6,8.08 3.2,0 5.72,-0.96 7.48,-3.16 l 1.84,2.56 4.76,0 -4.56,-6.4 4.08,-9.16 -3.8,0 -2.56,5.96 -4.48,-6.36 2.36,-1.52 c 3.2,-2.08 4.72,-4.48 4.72,-7.64 0,-4.68 -3,-6.92 -7.84,-6.92 -5.31999,0 -8.2,2.68 -8.2,7.16 0,2.6 1.04,4.4 2.52,6.48 l 1.2,1.68 c -4.99999,3.36 -6.12,6.12 -6.12,9.24 m 9.36,4 c -3.08,0 -4.84,-1.88 -4.84,-4.84 0,-2.28 0.84,-3.76 3.6,-5.52 l 5.8,8.2 c -1,1.32 -2.44,2.16 -4.56,2.16 m -1,-16.72 c -1.16,-1.72 -1.8,-2.72 -1.8,-4.36 0,-2.6 1.36,-3.72 4,-3.72 2.4,0 3.8,0.92 3.8,3.6 0,1.56 -0.6,2.92 -2.56,4.24 l -2.48,1.64 -0.96,-1.4"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 452.36196,588.69079 c -0.70296,10.83706 -1.67393,21.71317 -2.95232,32.59914 1.64477,-0.26624 3.28563,-0.54595 4.92216,-0.83849 0.16533,-1.89519 0.32224,-3.78971 0.47092,-5.6834 3.14646,-0.57501 6.27878,-1.19667 9.39396,-1.86006 0.80888,1.70047 1.62387,3.39792 2.44478,5.09228 1.70779,-0.37408 3.40959,-0.7607 5.10495,-1.15908 -5.11864,-9.56302 -10.03824,-19.25102 -14.71771,-29.0437 -1.55491,0.30795 -3.11064,0.60598 -4.66674,0.89331 z m 3.66971,6.54349 c 2.07504,4.65766 4.19942,9.29536 6.36966,13.91135 -2.42986,0.50674 -4.86884,0.98806 -7.31549,1.44155 0.37352,-5.12526 0.68755,-10.24381 0.94583,-15.3529 z"
+ id="path5915"
+ inkscape:original-d="m 455.9675,585.685 -8.48,31.44 4.72,0 1.4,-5.48 9.24,0 1.28,5.48 5,0 -8.2,-31.44 -4.96,0 m 2.44,7.08 3.48,14.84 -7.28,0 3.8,-14.84"
+ inkscape:connector-curvature="0" />
+ </g>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot6046"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:Hack;-inkscape-font-specification:Hack;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ transform="matrix(0.76579231,0,0,0.76579231,70.117973,199.62368)"><flowRegion
+ id="flowRegion6048"><rect
+ id="rect6050"
+ width="579.28571"
+ height="88.571426"
+ x="10"
+ y="750.42859"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:89.99999762%;font-family:Hack;-inkscape-font-specification:Hack;text-align:center;writing-mode:lr-tb;text-anchor:middle" /></flowRegion><flowPara
+ id="flowPara6060"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20.89339256px;line-height:1;font-family:FreeSans;-inkscape-font-specification:FreeSans">GNU Emacs is an extensible, customizable, </flowPara><flowPara
+ id="flowPara6062"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20.89339256px;line-height:1;font-family:FreeSans;-inkscape-font-specification:FreeSans">free/libre text editor, and more!</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6064"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0.01%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843;stroke:none"
+ transform="matrix(0.76579231,0,0,0.76579231,91.426653,290.04881)"><flowRegion
+ id="flowRegion6066"><rect
+ id="rect6068"
+ width="384.28571"
+ height="69.285713"
+ x="121.42857"
+ y="676.14288"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:24px;line-height:125%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843" /></flowRegion><flowPara
+ id="flowPara6072"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.15227699px;line-height:1.25;font-family:'Source Code Pro';-inkscape-font-specification:'Source Code Pro Bold'">www.gnu.org/software/emacs</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6074"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:0.01%;font-family:Raleway;-inkscape-font-specification:'Raleway Medium';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+ transform="translate(159.31983,3.0304577)"><flowRegion
+ id="flowRegion6076"><rect
+ id="rect6078"
+ width="565.68542"
+ height="68.690376"
+ x="11.111678"
+ y="166.13689"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:18px;line-height:125%;font-family:Raleway;-inkscape-font-specification:'Raleway Medium';text-align:start;writing-mode:lr-tb;text-anchor:start" /></flowRegion><flowPara
+ id="flowPara6082"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:1.25;font-family:FreeSans;-inkscape-font-specification:FreeSans">A conference about the joy of Emacs and Emacs Lisp</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6084"
+ style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:condensed;line-height:0.01%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Italic Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+ transform="translate(162.63457,-23.233505)"><flowRegion
+ id="flowRegion6086"><rect
+ id="rect6088"
+ width="321.42856"
+ height="127.14286"
+ x="254.28572"
+ y="637.57141"
+ style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:24px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Italic Condensed';text-align:start;writing-mode:lr-tb;text-anchor:start" /></flowRegion><flowPara
+ id="flowPara6181"
+ style="font-size:24px;line-height:1.25">Streamed live at</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6064-4"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Droid Sans';-inkscape-font-specification:'Droid Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843;stroke:none"
+ transform="matrix(0.76579231,0,0,0.76579231,258.94366,126.14914)"><flowRegion
+ id="flowRegion6066-2"><rect
+ id="rect6068-4"
+ width="384.28571"
+ height="69.285713"
+ x="121.42857"
+ y="676.14288"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:'Droid Sans';-inkscape-font-specification:'Droid Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843" /></flowRegion><flowPara
+ id="flowPara6072-9"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:1.25;font-family:FreeSans;-inkscape-font-specification:FreeSans">https://emacsconf.org/2021</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6064-4-9"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:'Droid Sans';-inkscape-font-specification:'Droid Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843;stroke:none"
+ transform="matrix(0.76579231,0,0,0.76579231,240.92997,184.46242)"><flowRegion
+ id="flowRegion6066-2-9"><rect
+ id="rect6068-4-4"
+ width="470.02689"
+ height="50.818378"
+ x="121.42857"
+ y="676.14288"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:'Droid Sans';-inkscape-font-specification:'Droid Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#413e7d;fill-opacity:0.99607843" /></flowRegion><flowPara
+ id="flowPara6072-9-9"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:1.25;font-family:FreeSans;-inkscape-font-specification:FreeSans">#emacsconf on irc.libera.chat</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6084-8"
+ style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:condensed;line-height:0.01%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Italic Condensed';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+ transform="translate(201.49395,35.946089)"><flowRegion
+ id="flowRegion6086-1"><rect
+ id="rect6088-6"
+ width="321.42856"
+ height="127.14286"
+ x="254.28572"
+ y="637.57141"
+ style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:24px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Italic Condensed';text-align:start;writing-mode:lr-tb;text-anchor:start" /></flowRegion><flowPara
+ id="flowPara6212"
+ style="font-size:24px;line-height:1.25">Chat on IRC</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot6074-9"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:0.01%;font-family:Raleway;-inkscape-font-specification:'Raleway Medium';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#353091;fill-opacity:1;stroke:none"
+ transform="translate(385.74561,24.509963)"><flowRegion
+ id="flowRegion6076-3"><rect
+ id="rect6078-3"
+ width="565.68542"
+ height="68.690376"
+ x="11.111678"
+ y="166.13689"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:18px;line-height:125%;font-family:Raleway;-inkscape-font-specification:'Raleway Medium';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#353091;fill-opacity:1" /></flowRegion><flowPara
+ id="flowPara6241"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:FreeSans;-inkscape-font-specification:FreeSans">10, 20, and 40 minute talks</flowPara></flowRoot> <path
+ style="fill:none;stroke:#000000;stroke-width:1.02294576px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 135.56288,755.42857 328.87424,0"
+ id="path6275"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Old poster"
+ style="display:inline">
+ <image
+ y="-65.461769"
+ x="-645.09564"
+ id="image2993"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAANRCAYAAAA/HsKgAAAABHNCSVQICAgIfAhkiAAAIABJREFU eJzsnXd4FNX+xt8zM9s3yaZBCAmEEiAUqdIsgBVBRFG49mu7YG8/27XG3hW72EUFBUURBUEUAUF6 DwGSkJDeN9t36vf3RyIk2U2TIOQ6n0fAZ2fnnDOzM3Pe+bYD6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo 6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo 6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo 6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Oj8BdjxHoCOjo6Ojo5O+0BEDAD77TdwSUnVVp53WXw+zcjz ktmsBa2ADK8oCOUVtkgAMBg0tUuM1w0APM+pkiHWY1IoIBki/CUlewLjK8YTpkNjjNFxPbAOiC6w dHR0dHR0OihUQJbPv97q2JVbYu+ZFpNs4QwDpYAaL/qUGLdP7AxACAZUh6oqFp7jeEWTIlQisxTQ BABgHDSQpjDGyGw0ujQgaDYZXLzA+XiOD0Y7jCXWaMNBX9CfkbXPU3RSShfv+OnxNT169Age50M/ 4dEFlo6Ojo6OTgeAiHggL2L/Lha9fkVZj6yCimR7pDBU8qpjSqt8vSWNszKe51E7t3Mg1JmdiIHq t6OBZDGkfQZ2WBWww39BI0DVVFWzW8yeHt1isjolRaxLTIrM7Dc4ppTjWE5Bgadm1KgeVYwx5Zie gA6GLrB0dHR0dHROUIiI7diRF1WR7xtQnO0ZXlrtGuz2ir2DAerl9gY7S7IqHNZFHA8mGFt25dUK rCbnf6prgeMAgePgiLYgOdmBTl0iENPJjrhYK+LjbYjtbKkUBD7H4/EXEKl7/B4pw2Zw//FrUp/S GYyp7XQKOiy6wNLR0dHR0TmBICJu4xfZ9i2FBckcbzh///6KSaKs9GTEoiVZNcuKygMExkKncGYw ERjXfPuKyKBp9fsDEcDzHAwCB5NZgMNhobT+nVmfAZ2R2DUSEREmmMwCeAMHnmvYr6pqRKTJAPOI klrmdolrjUb6sLi4Jruq6qBnwoQJ/0jLli6wdHR0dHR0TgCIMuyrllOv/KyqEWXFgbPzi31n+kXR QUTCn3oojKZqSEtWLNJAssRqRRVB4Dk4HBbEOCzonOxAcnIUevaKQUJSJGx2I3iOa5NSIAKISFMU xeXzBNYFJekXrzP4R9GByv0TLhpa0/qWOj66wNLR0dHR0TmOEJHhi3e3jDyUX36V26ue7HVLPX0B 0fGX0vYYqxVZHN/QkkW1sVdQJcaI4IiyoFffOKT2iaGuSTEsNt4Gm8MCu1UAx7WPNCAiyJLsk0Qt LyipGZyBWxQT5f2RsU7edungBEcXWDo6Ojo6On8zRMS2bj0QeyjTN3Z3RvVFZZX+CbKkJsmyzJMq H/3kzGq9gIwBJqMAm8WA6HgrkhOjkJoWj6QUB+LibLBFGMO6GtsbVSUQUWUw6P8VwDcVFZ6NPeZ2 KWDpTGtx5w6KLrB0dHR0dHT+RjI3Fsb+/NvBCYGAPK242HumN6jGqxoYAAIRSJEY6K/pDiKCphEM Aoe4+Agkp0QjtVcMklOiEdfJjug4K4wG/rjN/kREiqLUeF3BnbIiLXCXB5ekDk4qPD6jObboAktH R0dHR+dvgIjMK77cO3jznpKZJaW+aUFRcagIU8BTU2tFVhvgGYPJLCA2zobkHrHo3sOB3r3ikJji gNnI/S1WqrZAmgZJkiVRkn8qK3O9X80sa0anxrqP97jakxPrjOvo6Ojo6PyPkZFBRnfh1qE7tvn/ lVvsPbPKJfZXVBJYg+pU9VAVkCq3an42Wczo1jUC3bo5kNgzFomJdsTF22GzGwAikEbQagPPm22H MQbGcFiIcVzt/3Mcq/2XZ+A4ruUg+zaiaRoFg3KZLxD4Ke9AzSc+MW/d/0rWoS6wdHR0dHR0jhFr fzgUvXV37mVlxb5ZlS4xTdZgAJoQVkCtKJJF1txXamFggoHi42ywWgVmMQswmQWIkgpSNUiiDK0u 9VCSVKia1myDRgPPBIGH0WwCAJjNAowGDna7GUYjD1ukEY5YG2KiTbDbjYiKMsMWZYbR0HxJiNYi Swoyd5Xt37m15MU+3RwLR09K7fDWLF1g6ejoHGtqY0t0dP5BUG6ueclm56itm0puKK/wn+/zSw7G cbV1qprdkUBysOW5uZlyDKRpgCK1QqQ1gheI8YbmhgYDZDiiTCwhIRIpqXE4aXACevSJg8AfvZwo KXDh+wV7qkrLPN+OHJ344XnTTtrKGJOPuuHjhC6wdHR02gUiYp/de7W1SqlKzS9yjtucUdA/N6+i izOgWMjeWYztnlrWf8yZW8+bddO3d42ILzne49XROVZkZJTbf5i3/bqKisBt1e5AT0XTDhc+YLyB wAtN7EkgRWbQWiqCzsAMxmYLipIitaKdRrSiEjzJIiNNBRFgNPBISnLgghknYfCwLiEFSNuKomj4 Zt4ObFyRp8Y67Ds79bC9cv7lPb9NTEz0H1XDx4mmfmUdnX8MRGR05e+2bcgsNhcXO4WkJKsaFxct Dx16mosxJh3v8XUEKD2dmz0jbdSv+92zNmSXneOWWQwRGVVVYxoR4C1D8b5KuEpLzowfN2MngHYX WETEAFh/++23iNzcUgMA9OiRII8fP94DwM9YmGDio+/TsnHjL5EVFQGhosLL9e/fQxo1apSHMXZM JgQi4vLz86N27dplra6u5nnerp188sBgnz59PIyx0MXljr4/lp2dHVFYWGgtKqoWAKCuP1dHtiwc K4iIW/7N3rTvvth+W/bBqqtJIwuhoSWDVJkxgGqDnOoEEmm1dao0pXWiiAEtVWtnHE+kaW2zYjWT ucjVJjjWNV4bryUrGg7mVuG35QeQkuJATJy19X2FQRA49EnthH1ryjhPlTjUXyO9s8R9cPiyxfvm TLygbxZjHaukwwklsB4Z4Rj6aWbNufk+GNG+LgVmihztvPXFN+e/PGtEZTu2q9NBoYy37G/PWTJk 3k87hqR0794nKsIUT8wUqREzcZwmEWkBny9YEpuUVjDo7Iszzp71wOaHRtvLjve4T0SISHh4bNJF P2WVPbajShmghrtzSQUpKiRJNahyCzNDG8lefk+n199cOaZ3UsJAZnf0shgNnTSNmQGAMfKLolhR 5eSKRk+5Zc/kKy7f+vC/xuYezYOaipdYX33y7ZM/Xbp5RK9evVJtNksXImYiYgJj5A8EA6WxXfvl Dpt63dZJ99676a4e7KiqVxMR99NrV6W+O++PUd27JqbZomNSeMaiiTEDI1IJ5Pb7AmWxiSMPnXbx pTvOmzZ526wJfY/qObdpQXrCp3O/HdOjS/xgU1RsL5PJ4NA0mACAQG5XjacoMe3U/Wff+H8bJ99+ 4e4Z+osIiLJMc99aPSnrgPfu0nLPWE2jJq9zUmUGrbYgKABAVdH2Ka+xdGu0VVPb7iIkAJp6ZFx1 CHXvJpqqMqonwhirdRsGgzJUpX2WHuzeOwZWuxFBjwIQIoqya24L+OR+XrfvWSJazzrQGocnlIvw 4RHRs+burXkl309HJ4NDYDBFjC6c+dqr575x3ei97du2Tkdi1Vs3239cv+vspWszr3B6g8N8ASnR E5CbDIoQjFayRESVcwZzZu8hE5aPP/XM+S89dHlBR3uTOpa8Pq3bWR+uLn5jd5XSr6WTYorqV3TR 7MWXfXlt37VH2++8p2/ovHzNjkvW7zxwkTuonFTjFWNFRQ07qTHODFuUo9posmQnDTz9++HjL5r7 8cMXFrSlv1Xp44U1+XTaTz/v/k++Tx5b4/Un+iQ1bMAKb7CQNSqmWHD02tLvtKkfPPLg3T9PSm2b hSk9HVxs4JoBS39ec+XuQ+VnBySld41PjFDDxioz8IYIJcIRUSZYHbtPOmPG3H7d05a8nT6jTRWz P08/L3LD5tLpv2zIvrJaVQdUuwNxskZh5gkGozVSskTEHLQljfx1zNTpb3/9yMWZ/9T7omJfRcTX P2X+O3N3+f1uj5REf0fIIS/UuhuboPF6g62G48EEAxkYoAFgBPCMSFSJkSqzP81Yf2Yl2u0mTDx/ AM6Z3AcmE99Mw61DkVV89txaZGV4SAAHDQQjx6lGM5+dPCT6uStuH/kVYyx41B39DZxQFiyNmEq1 v2n7w0jm1RbyVHX+ZyEi7skrxw145v0f79qwr3iaX1IjVU1r8QVDkfzMU+XvzBjXeeeqr8YeyNg/ 9fdD1S9NmVO8bMmsjhkX0J7kvjA+4ZYPt9+SUd2yuAIApqksgvxH9QZKRNyjl4w4+fWPv39sd75z fEBWLFoLtzZpQXidpTFg3Ei3c+GQgrzcs8+84YVHVr5/b6veiMtXvWV/8J5nr1uZXf5/hR45WQkr Oo6gygHmqSzqypzliVtKCsbeVVr+0jWr6L1PJrTOmrV+wSuWj99951+fZyy6p6DK109U1BZmLoIq u4WaCndXxpV2Xff1m6P39x13+o3Pzn/+3f9elteaPuffeWHK55+vfnB9kedSV0CJaP73JEh+l1Hy u/p5qsr6LC86OGZURc0jM4lWvPcPcx2unLe785cLd9+xL6fqZq9fivrbOlYVEMDCiaxaC9lfnEo1 FSRrTOYFAuPAaypTNY0RaX+uMwgGIDLSjKTu0Rg9pjuGjk5uF3EFAIxjsCVEwJThByOAwAAVvORT ++VlOh/+bPZG+6JPM7+c9u+0qnbp8BhyQgksHZ1jARFxz10+avx3K/c+vafKN0pqYXIM34YGRfQZ PQXrR+9aVP5GfInr9ZsX0Jtvz2D/iDW1muLj3yuHZ+R7T1ea0Dcme6w3rkvSXgsL5EEDs0V3F+Ni jH/ZZUZE3CMXDTnrx/X7nt1dIQ5rqt+mG9CgiH6j8+Af4zaINHvcrV3vArCm+T4/Ns8c8+TMn3YX P1IoaY42dafKTPblxuf89vnD4HjT8xU0+/545ml2n50v2v79n1dnrdpb8kCBV4lvS38AQJoK0VPh KN718/WLFHPEzM/23vveVf2bjXlb/PyliXPmrHjm9zzndLfWtnlBU/yct3Tb0IyF77xi4Ez3EtEP /xRL1vz521M27Ch5tKio5lK/JFv+9gGoCojAGMcRGAM0rTYWUWuhjBRjDd2ARGgQ+0V1wfYAZKp1 dfGMwWQV0LlzJFL7d0LfPnHolhqH2BgTOK79vP6MMVjMxsPutXoPa1Kr1d4F22qejeuh9dqw8uDz o8/qeUKHbfxjBBYR2jXuQ6fj8OYNp4+Zv2zny5k14pCjf7UmBKqyuhSv+/TeJSabtJTorUnHILi4 I0BbZhruvG/JqYVBLTp0K4O1U79DSYNOeXHCuRNXPD/z4krAhe3bt5sCSf2dz/7FPuf9Z/jQXzbs f6I5ccU4HnxtRC5TVS28s0aT4SvaOmzXH8v/b/o7BTkLb0ouaqrPVy987OxVmSV3NCmuGAeeY8Sh tr9wykIJFEUcXLfwlnm323KJaF5TAoSIhMfO7DZjzd7i+wu8ahPiioHjeXCMiDSNhXcZAiS5DBX7 f7l42aKhmRlELw5oIk6Kcj8233bp/924rsA5rSlxxRgPngehrr/QHlX4Snf12b34g4cu7941B0BG +LH/77Bx9b4eq1cUPpxXUH2FJKvGthXgbPzlo3CuaApIY6y2GErL7RAAcIbaIHtCXXFRwKBxjKBB EDhYLAay2gzMZjch0m5CVJQFXZKj0KlLBOLjrYhLiGiXsgxhx0eAX5KhMA0G4iCA1boqa/+QFtQi nLnuG3ZyKr9u3d5XTjml/6FjMpB2oMMILN5kD9qtphqe/ZUFmhgTIhzFZrPxH2W61gFWPzyyx0Of bnss09WUuOJgNNuDJqu5kuRAjSxJkiAIvNkg2DVF7OT2i3Y1jMVLcWbHVP7+0R1P3pl0AMAPx/o4 TkQ2/lBgcRZX99cQen44aycxctg1n/y47L4PUhkT59x39P0VLLg+5v6nvrlja3lwZDhxxRttitFi zTdao/f16mwtEwLlxvwSV6pfkft5/FJkyC6aH57M1Wdmbf5+EhF9GE70ZKWPT7px7o6ZeW65W2iP HCx2RzXj7ftTukbndKIy9UBhTa+goqV5AlJs4+tNrsnufHDH5pumvL5jI4CscMe46JahQ3/MLL89 z6t2CrfdYI32G4zGA5HRnXN6xajOmrLy2HKXN80blHoGZNXY+PsUKDNXbfjmioc+mPQTgK3h2lz4 xEtjl+3zXe2SyRRyhJxRs9gdhYI5et+ArlyhWFVqL6gO9hVFqa9bVs0Nz6kMT9HW4b8tWzVzSTH9 d0riscmkPBGYN2d9v+VLcp8sKHFdICttE1eMN1DjIPLa8gwSa41ACg/V/kd1///n3/U+Y1TrfjNa zGS1mWEyCzBbDYiOFBDtMLPYaCsiIk2IirbAGmVhZqsRNisPq0WAQeAhGDiwoyzD0LpDIVRU+1BN QRbBjGQlASbiGUCQGZHEVJSJ/oi8bPfM8mAg+stPtjx+6TUjco79wNpOhxFY1p7jD1w8edzTSVa/ U+Pa6uLhocYN8Iw9s0vxsRmdzokI0SrzNcOm/WdnqX+cHOa5xXizZuvUZ1di1+4Lx1906R/nDYvJ 7RwV5TYajab9m35OXP7dl4O3ZZdNyi+qnOgWFVuj1hGoONDtwC+fzTr/0+pdP/w7Jv/vOaoThwqP YKyoUuPDvXwbzbbqtLPO/SO1Ha17y5euPX31Ac8kSQtNzuHNMcHY/md/M/aCS18fMs6xDatXawAw pqc3btGnP1z5w8aDdxZ7peTGQ1WDhbaDu/ZOuf2L6q8AhFSOfn9t/rj9xe4wLlAOlti+OUPOuuSF mTdOW3Bo9WJ3eno6bVj6esSS1z6cuuiPzAcOeKT+DTMqCb6c9cOzN62/YAHR7BmNYr8o9xrzf/61 dPq+UnFQ6NEzmGJTS7oMO+/dabfc8PErO74pKk1PpwULFnDuvd+kffvNmttWZ5Zd7VU0c8P9NIie 3B4bvlsxAWEEFtGLtmm9n5lR4hFDBSQzU3SvsavOuPDSJ2+elLpxwoQJYnp6OjstriL5k3cX/WdF VtktZWJDqx7JPr5m55LzX/hkyiIAq0OPo+OzbPHOvmtXlTxbVuGdqshq2+YixiF8DSwGJhiptSKL Gl1XDAwGgQNv4GA0ChAEHgYDB6vFAKvNCKvNAJvdDLvdAEeMlcXGWOGIscARZ0NkpAm1Hj7W7svg /BV8XgklRS54VBEBTmY2ZoQNPECAn6nMRxIUECDBnHeo6gpFVgxrVx546LSz+hw83mNvTIcRWIq1 s3uV8eLVuU8chc/11nYckM4Jz4f/unH45nz/NI9MIW/2jDNTfNo5P6eeMunh39+dtY0xpr3X8Csl ALYeXPzgj/c9+uktv+8tvqtUJnuDb2giag7ljMv5+rNxAD47hodyQiL7RE4UG0/otXAwBPqkRFSt aqe+qGCB5d+nXXNBlaTGhGzkTWQdfMnSk65Lf/C7WYn53zXcWk70yjt3T3je+tEfFQ+6RK1hnAwR xNzM3iatMBaNBBbNOSvq6nc2nVcUpMiQLiO6eLqMv+7tN7685+MR9YK6R0+63U1E8ywX9cVrP+W+ VhGUG7hPNbnaVLht08TsX6Z+AqBBkO68xzOTD+RWn+cjhEQL85HJnphTrn/jogfum/3KWBb48/MZ M2aoAPZkvX/ek3e9uCbxxwO+80NEZMBvVrK39iUiC2NH9gWAVTe/2y/P5x/rDyNaLckjDvS79L7H Fz45ce3CF2s/S09PJwCHqpamv3Dzg29Hf7ez4kaR6pcjIIie8uSs5UvHEdHvHSmlvjV888W27lv+ qHiyoiZ4nsp4xgQjkaa2uqAn44XDP88RkfRnfSkGgAMHtXbNPw6H/zXwPJktAswmgQkGHna7EVaz EUYTD3ukCUYTD5vVCMFmgs1mhNUqwG4VYDEbYTILMFkEGM0GGIQTQEG1wMEDVXB7RNTGthNcJMIF HF4Pov4RKKrGFZd5Llz9S5649JudD0+6eHDh8Rl1eDqMwAKIxdg4Lvc49Z6bm2vOycmxud1uvnfv 3vKgQYP8rSnsV1v8cJd106YKc1GRm09ISFDGjBnjb880UyIy7Nixw1ZVVcW73W6+b98EpX//9u2j rh8GFJrz8ipN27fnGqOjo7WBAweKcXFx/vZ4kBIRq6iosGVkZJidTidnNpspNTVV7N27d6CtRQ2J 7rJcfvL8C/KcUmroVgZzymm7ep9/+yPrnjtrC5tzY5Pt9Jz6TJl7zmWvX/riTz1+yXFeKTaavVRP VoTbd+CMKzbQ4i9Gs1avnUVErLKy0l5enmU4dKiGB4ARI7oH4uP7+45FQczGfZeUlFj2799vdTqd 3NChPaSUlCG+tp7j6lyPgrCxtAwgQYuOimi3ybVk5WfdN3nYEDGMEBBsqZXDJ0x+f+WsxLBWRMbu Dmx7+fwlP2z9+Wq3KKY2PLkaIBU4KsVgEoAGj5cv9lDX/Tm+UaERRwIsUf0zJl//n8Ujwpwzxpi6 8dOrl27cln/VjwXy2Q1CpEiBXLqx34Zs9wA0Cq538eKQXTXUI/QAjLDGDto69abb5786tqFA+pPe NywtGvJ9/+/W5+w7q1qlhqJX9YNHaeLsQ3AAaLD/95sDgyurxV4hDfIxFJc8eNkDT5y7dcqTof3F Tkp3v3RBj68y85xTdtXIyfW3aYEKg1q17eS7MtEJx6Cg7PHixwUZCat/y5td7ZOmKCrxAAgcX1vQ s5VV0zUwMCIIHMAbeBgNPExmAQazAUYDhyg7jxiHGZ3i7IiMNsOREImoSCMsJo7xAgeOHVl4medq XXY8z8A4Bo4xgKtbsPnYn45jQjCoImNPGfx+6fCi0y0diyQp5rxD1Vf4PKJh3fLsu045t3f5sR9p 6+hAAqv9oFXjhVuf3D/2vV9LTmr4dDSwqK6nlt24+Jvlz4+IcVHWUtM773488JNFa4ZOnTJloNFs TgJg5Dh4PaJW2rX/uH3nXHnL7x/9d/q+xvEbGavesr/98gej0nqmDIl02FLBW2I1MBNjFPAG1aKU QWfsPuOmh9d/eNOEA39lQnVuf9Xx4pNfDv1286G0/gP7d7dbrV2JmBmAkTH4RFkqS0zpf7DryGl7 b37+/7Zc2yP6L2duFS56JvbpT78d2j8pcZAtPq4Xx/MOhYQIxkgFQ7XbFSzp2u+c7LNvuWPbv2+d lDmBsVavhE5EbOuihxJeeHXRiF49ug9wxMb15BgXC8AAQGWMXF5/sLRLysC8IWdfnnntrBt3zBgR 42qp3W+uXZVUXlR5jj9MsT9mSwp2Th07b92zZ25nz7U8xshZ8ytfPCthyZ4yYWK+R4lruFVCRU7B mIrFKxIRxsXU6Fi5HV/e1e2J2csG9+ienBYb37k3xzG7RjAzgDRNqyip9Ob2HTs9a8q1t2598YbT D7UmG2vDFTGR6eu95/6UKyWgQbRsJIvqdmFmzaFPf2OMKaU759pefvHTYf27JwwzxXTpy/N8AhHj OR5uj08rSRlyTsb4a+9Z//HtZ2eHuyYp63XTxDEPnPVbpb+nCNC9v2+NiFYoTKwQQQ5WOj66+azL AIxF3TOSM/WXz/j3HctWvjerze7UbWt2dA9qYqdwN4qh+7CsANdze3P7C5aB+X2My4sOAqmh06Df UBU02Bt/KrFAarbIQo6PGUzEdx+749/nReW/0UR/I68O1Az6Mn7tT4WFZ2hEDSxSquKM3r5u5yDU E1hE4J46r7C/Xwu1CDKjRRV6jdvyzkRz/rtN9McYo2fG9TmQbGKuan8jgQUFGpOt+0vQIMaK6GPz FWMfTSuTEFJ3kHckuNSY4ZumNFOR/v+mJmYv3Ve9GzWu5IZbZHgD7tRln2zviv8RgbVtW1b8uh+L HnQH5ImyWhcQVA/GG4hIa9K9RwQIPKP4TlYkdLajc6KdRcdYEBtjRUyMFRFxdkTYDTAZax9XjJ0Y 7rq/m5wDlcjYUQxF0doU7yXJqlDjDkzdtb24MDOz8IW0tKQTooTDP1JgwRRvgHZgBgG3NNygQlMD eww+w+5V6eMj/nX+FbdtrMFkZ42nt0csa1SMksFoiZSWvPvYrrS16957cSfNu3cw8xGlc+/evWPE DVen31zgD55Z7vInSrmNix8ymGwO/+Ln79i99sfJH6WvKp+XPqFTq9L9N755S+yni36ZNvLcR88P ajSk0h1MDBSUhv0deYNF8/32ecn/TVi2acSl6fPue/GxH2ckh38DDse+D++LeHPJ6qln3vridI+k Da92ehKDRSVhrnoOJmuZ//vnbzuw6uPXVl777pqPu886bV96C+JgzUfXxl9zZr9L1u4tu9gflE+q cPvjDublh72rDCabunHJnIINPy7acda/n5h/6uSLl6bPGNDkOcsTMSCjkkLfzAHYYhNzEs+7fhVr gxC88vKhez7YtaYIIQILUMv3JwpUlQJgX7h9icCWvnV5tylj+16WmVcx2RuQ0ipd/ti8/FBrNmMC 3B5PzUeP7tz7w+ejfrj7o+Wfv3ztOYXNiXCRU2PB0b0ATm7YGIHn5C8BbHz7ptN6XDDjgdsKq/1n Vjs93YL5ZY3cUBzMdod/8csP7ez74+9zVhF9NaGxBVSIsDBoNwOYBABOnwRnE2OSA2Vx5Vll9zY8 Nvh5RocAtFlgFRS7o5gGnnGcxB0+FwQQj+gucXnCqIHNBlRXkVm2mFgw/LLTBtVk4Btk2BGBvXrR wd4BChU8HCeI3YYNyghnvfoTxhaq6ZcMy4jhioJlGjWI31Ml1eLeuyeFiPjDlt/f0jmX88UYjuMk HkcynokIgsEYiO/Tq8Xq80YoQYMBYTIFOQCCbLWjobZ89SWrHHT3DJdaaLGZy3qMn5BbvKSZDq97 0Wl94aJsK1xofPLFGk+8nLkxobnxdhSIyPTGS2uvycyruSooq2aGMPeaeGmBAAAgAElEQVRiM1pA 4Dl06xZNI09JYb1TYxATa4M10gSTkf9HiqimcLtErFmVg9IKT5uD6RkD/EHZtndf+fUqB1dubu4r PXr0OO7FSP+ZAisZIKIw9lwNmuYy+Va8Oe7RDzZM2VklnuNWqIlzRJACLmNlgXuEq0bu+fb/RUZt Kaa3X5saf9YnGz2P762QBjddb4kg+pxW0ecc5XL5+7wbMEbfVUCvv9qM+CEi7uWLRg99+PmPHttQ Lk/wS4o97JIk9VDlAOcqz+vKuMKLdpYXn/5kZeH7l80rmz3/8s4txrG9c+fElEeef+e/vxSKM1wB 2dF8jVYNor/SKvorh7jKSgZ9++w947tvue7Z9FX0ffqEUBFDRGzpfSMHP/7ktw9vLfZOdEmKraW4 Tln08dWlvhTGilN+X1Qybs/2g1/d8uYvz71165khKbq0arzw6HMZJ1eqmi2kIWaBQeia9eAdydnn 39nSWThCwqizS7vatu0uj+RjFGqYycoZvJKf+DgiYo2FEKWPF16ZemDS51u+u29fpTwiIMkhmVoN vk8KfM4Shw+lY93VpcM/yc6ZlLkt55mZW2jleyPCT+gaz4goTHUAkmEweCJfuP/KaZ/N33R7llce IipaE+VKNAS91dagzzXGW+VKvWWqMWIO0ZxZ9UWEZiOAtXTZNXNwUDVS/1J9pH6T71p/WVrldRWi auC0+k43HrYBp+aPvgD+dc3sHxct2Sp8cIReZwwQ4r2JVjS8J35bxRcWTOpGmhZy/zPOLCfG28t3 tzBmuSZY7uBILAMaXIckiRxXfahLGWAG4AMAjH9MHTEj8NF1w2tWqo2fTCabGndGn91Pv918f26T 1eEWKcw1bwajyIrzBsL9Sr2PV24P2H1Of9fQlhiMzOBJOynF1dw5ZWxs4NJkR6WFg+bXGpbBIXdN hMlT0rn5EZ/4EGUY5737yyX793nu9QfJ0VpvAxHBbBCQ0jMWo0/pjpNGJLLoaCu4Y1TaoKNTURHA iu/3YtumfGhNlB1pDW6fGLtnT+ndtghjAdGWLxkbcVwrB/wzBVYzSJ7CxPlz3nikpiqYEGxN7Swi yO7smIKdP95537RfoqoO1kzbWa70b21/Sk1OdGXGkttWP9V7L4Am3xefvXLMmG/X7Jq90xkYIbV1 eSlNgewvid37++I7axBjfmAXPfHcSawp4wO+ePj81I++WPvsxgLvVG+TAjM8qhzgaw5tGuFfhhd9 WqSQTvR1Y0vWTw+dPujJhfte2XzIM16ltoULEMkIeoqiyzKW3PDt+6Lj7vmb7nvlspENljwpOdDH mJezvi8ojHvQaFG1rsOyJ7fgzguh/12u65/q/IRfliO1Rk8AjefJNmR4UYi4oi2GJ86ceumX28ue yHSqKW3qDwRFdJuqizaeunpR4PUUvyk9neir9DZY3QAZwYrtw1/7wDekrEZMbFVAFKmQfVlx2RuW 3L3w6VN2APi9beM+Nky4Pb0QQBMBrG8Dtze//77fvx+8T0FKiLpjHISkITlW3tGgDlZeSp5Q5aSY cPXzGMxKlFFp0U1tCQSDVj6MRYkkCKwqcg1gRZ3Aqrt2dtb9CeX1V8J+fLhJmmm4/YwfxuRJCKkk zlkiJOp6cuZZja75YinC7POFBvADHECGQK84tGjtjoTsN3DQ0EhgQXPzBlsguoGVroNBRNy3X/xx zo49gUd8IsUz1rpiVUSA3WLEuPG9cOrZqUjoaq+Nj9IJy6FDLiz9NgPbNudDkrWjs+oxIBhUYvfv KbvnxwWJJUT06/EsettxBJamcL6sP0wATGhLDN/wmSq2vtdqFSsHPLbSgOfwWyBjHMAARgSipleY Uit3Jm72Cvd4g8oRC0VdQGJL+yple7rm7958xRWfV63+4srYkIl/+d0nJ7/87a4HdtaEF1eM44kB CpGmMcYYA3hN0/jQlPQKc/nmxVcueSJpOxF9Fu5tbNfbk6Ofem3tfzcWuJsUV4xx4FjtW1pTS5RI xVt6lqz66IFtbwzOAnA4Pqb65/ujZt445+7t+d4w4oqBcZxqFDh/lNXo9QdVsyhJNpXIoFFDayCp VULp/pUXzf8sLXtBBj05Y8CRIooFssFSUK4lhhsaJ3BSVGpaflsf+nXfD1u7qCnenTb13AU7Sx/b 14y4YoyrfaA0eS5V+Iu39z60/O3Hlj+QWAlgeetHoMJVU9S5vhJouT8AICjOvd13LV16+SqiLQ1c hRyv8TwHDkxjIGiqxijs/cjAcZx25GFJ4HlOE4S//5FDWa9Hzpjy2MWeoBQaT8XblR6DUlefe3k3 z3NXHPlcKHEyMaCZw54iJmg8b2jxmRJp4VSDkUkIhNyJACeaCwsRkt36V1nxeFWvTXsqL5I1CslA NJqjyoecefofje/3gFsRZFELY1HlQExQuPjwKQz1sUfwMlfOFDR6VpAmMTDZhlr/ZIcUWH8sz+m5 Y3vNzZUuqQ/CuQXrQzjserZZDHTu5H7srMl9YbW120/8P4WmanB7ZOzZWoTffs3BwYOV0DRqF5cp gVBW5R+4bVvVTQkxBw/gL4QktBcdRmAFMxYN2b9z3gqg5Zu+DgYhAtFeWryNKL1HGzPqOKNNNRoN xUZLdGF0XFyVyZ1nqqp2d/cpSregrIbEZRCpzBOo+5wzwWyxVBjMkXlR8Z3Kbf4ioaqyKtmvaN0D kmILvVNluPbuGKuW7emFemKktt0F/EOT779gY1HwLCn09Ru8Kd7dfcDIpaOHJi2V3WX5ZrPFppTu PfX3TftmFLuDvRr7c0RXTlzZwY2XTZl7wy8AGry1ExF77ryk6asPeS4JJ6443qgazRFl5si4nIGd lNLKyipHsUvqpYrBZJ+sNVz0ljT4i7YN2jB/7lW5RJl/nv9fFywevbHcf44Y4j7lYHb0Kuk/9pQ5 zJO/RNy/1SU5ogzjh3YftH1H9n/25FVOCFDDMWnBKlPNlsXTF66/8DvUq/FjtBkiXBpnD/fawjHI sZ0dNcf6jjuQfmrP6z7edce+arVXuCczb7LLFiNfEBUTe7BbtFBdUVIRX+n29wzKStegooace1/x rtTMBW8/8K8v87O/urRbm4vq8aYIySAIRVHR8QcjHHYPlR2MqvIGukmynOxXtJBZQJN9XPDQutFz F3t7AqhdIL2nPdj/gmlfG8ud2QQNJEumA6tXX3LAL4XE2pjtXZzDTz9tscPgreTqhLTZ0sl92uBO OcvaOvijgIjY85O7T9xa7JniV0OtUaauw7MTEgYuC5eY4Q+Enpe2YDAAHBfu7ZmggROKPO3z/KWM m+03Xv3l9RlOeUBouS4TmXqe8fsl5/bb8vNDDTdVBTROClPCpC0IPK+Ft+xo0DizaRk65goa27fn OpZ9c+Du4mLXWZoGxgRjM7M/1a79BwLPGIYNT2bjzknVxVUjJElD0C+htMyHvP0V2LOnBNkHKuHz Sa2KuTpSPpUd/repvVRN4woKaiavWnfwYFZW1pOpqalt81i0Ex1GYJHktQAIk3Lf3E4AMWw1tfEm Z9bOgdi+py2YeNW1b1r2bd67dWux3HNgCps+MqrrVwt/uXX59vwbvbIaknkDABAitYjEob+fMfXi l4amxqxe8umaAGyEZ+6aEvfN4tXXL92Qc3dNUAlZWoTEzOjC6sBANBJYW59/z56XVTzRLYUG2/KW mEC3069+7c43X3zp9tQjJQKIaPlT09K2fLTq4OzcGqlRho+CmoKDQ8p++7o3Ggms/R9ckPLdluqr KoNaRMg54exqfJ+xP5wx7eKXIgzYhuL3ZFNBH27QmJ69l81fcNO63Mqry4PUYD+SqgV/ydqzrno9 5wvUCaCfVxeP8gflkEBxZunm73HWjS/MWnj3W0fiflzYn1u0f/njE7e//P6aD1YWBcY1TrGXgmVJ a1duH4V6AktRPXYf48LGOjEIqsMR4Qu3rb0gIu7mUQmTs0o8p4QLWOIiunk6Dxj/yeQrL59j3v9j tiiu10ymXtygCHvagu/Wz9qWXXJVtdQofoxkuCu2jVr7yafTiOjltpi9DbE9Krr0m/DJOZdf9nHR D68cLE9O1joVdOYuGd8nZcncr25ds6/0hmoVoQUq5equa5av74M6gcXYJDGdaN6VCxfOx/Tp4O+6 uNMba5TTsoCExgkgnNHhHHbNo++8Pn3hloUL+zMAmD4dAC7Ubp/V2pEfPd89NGHwol3Vd+a5lS6N tzFLgpiQNvLLu18+b+/KMB44ClMSos00bfdgBvHo2yci/tELe0/78YD3Sq9Chsbbhdj+JYPPmvTx rCYyb6mNLvrGaECTx6hRx/SLEZHh7RdWX56XV3OtrNa+OJIiNSGy6tbs01QQEWLibRgzoSeiHGHL w3Vgai3eGgGqUmewI0CVFGiqBkVWQQBkUQURoMgqVFVDUFQgigpqnEEUFXlQdKgaxUUu8vkkSLLK iAhohbhiAOwwwEoCzOARgAovJyNA4e0tDICkqKaDB6tvWvezMYuIPmpLUlN70WEE1l8mXPBvcwgR FNH9zMXDrn74v5/ddWSB1K1bgYULkbtlzvTXKh4rGru2VB0d+lwRYOs0dPupV91//+KnJ21YXG/L xVu3ltSsfeCty//95vAVed4LlUaj0kg05ueXJjVusdIdaa0oUztZOC5A9R5lRBwn2HvmnHX9nYvq iyug1p1F1c/9svqkp9aU1EhXNDbdaTUFMRalrDcRranvNvjus42nFQakgaH2fB5RfcZvPP2OJx6c f+OwvQ02LUNG5ptXP/bg7MXW5Tmua/yNHth+l6t7zk9L+wHYSkSm85McCcFwE0Fc70rV2HP9rEaZ WYwxIlqQu3xz7pI1pTmjJE2rv0IpSFZ4Je9gZyLi/hQdvOLlRYYQF+nfxR93j+1ysNI7tUyikMVf mSlejkq74NPxtz312PtXOBrHwe3I+Omuhx64a762an/ZTK/WyGLnLbWI+RvOmbIQX6GVZm/OluyL HnrNW9c99+iL6SMaptwvW7Zs/+qnznkh+IFrwE95gQmN95VEOcKdvbdBEHT9eLq5N56joqnplQAG TmUs/bjFP6x/Z3rXR55d8dCOIt+okEFwBtiTh6zrdf6/53fktSRfumzoaQtXFd5X5Am1InKmGCnh pPFfjLzs/HVrWlGORKeW337OGlBQ4JkpScoRlURa7VI2rPG7ugZodVcXAQMGJVLv1NgOJyyJCKQB iqrCF9AQ9EkI+kTIogoxoCAYlKF6ZFKrRCrRZM4tyhQIKJCCEtMUDYqigYgaCCzlT4EVVOD3SVCJ 6tY9rFWpAjjYOAMxMKikMR9khFs5lAdDEtmRqFlhhQADMUhMg4cU5HMeVCAYdj8AQBC26j3ytRvW ZK0FkHksz2E4/vcFVhvhbHFB1nXsmuV3hV99fnhJRunQHuYd68qkUY1jiJjFoRj7nfPT0qfO28Se Dt036tTnasandd78a75vsqI1FBmkQaguLm0gFAAgrjKuEuCvNAmhFhkVXYJdB7jCF1eMecB1U297 zjYDU4Jy4/iIGj7AKQ7Ui48gWm+Zkjr15Bq/GrKgLTN2lbr0HDVvwayh+1iYmpxpt86tmn1O50UZ ld6JB2rUBpYCzV0daXYeSKHagHOy8EwJCRIBoHnKIgxSbk8i2tw4VoSxGeqcp++cdwGXs51MvKCq tdt5npjK7GTp0iUPzdkK/mbWlsr9DxQHhoZu4RDROS1j8NSbPpwXKq4AAAMmvlq96LaR75W4XaO3 FAWGNdyqwlVRedLBb+YOQCsFljkuqSTm5ItWNBZXf3L6QzeUfbh8/x983qEJIcJaFI2oLA6xZnYE lj4zPf7pV359aFORe6oUkuzAYI5JOzT4/Otf/eXWtAPHZ4RHzwvXnDxk/tI9z2a7xTCuQTNiep/2 65hpN7z30mB2TC22/0tkrC+I+W7J3plV1b7Qc0pa7Z8wEAFmiwE9e8cykzncE+7EQVMJYlBBICjD 45VRUexGWZEblVV+OJ0+eP0ySUEFWlCDQzTBpHKMVIKqqMwtB1HE/JBUjWlaqKxhjS18dUVPGWMN Av0tEJBCdjg0E+PBIEJFDZOQyzxQGtlEOsOG3lokDMQOh7oZiEMsGWEmBzS+BuUIhJhibRDQU4tE vFMYWbqqYlYxFT+YyBL/1vUx/wECKzSTrFkY02AyNR2U+VgnLWqzq4IxD6FR4DXjBYXFdatpyn3D GOi9a6IqBFahAqFWHNSmhHPAkStsxHvvyWgquLrie6QP+B4AQLXxSYa6/QkAd//QBJ7BGyo8NJmp GswL630UePuBOC+T+vrCrSvXuXux1Hno9ubcUpdOH5yxpDr7F3+pNJBj9UpgcNEsuaulBgDPGJMe GBxxaHUZC0JsWAxRdWVEF26a92Cfseuj7nz+/TWv3ndDDmNHAtdnPTS7BE0WLfwc814/ovyCzKI1 k1NwTCFK556cNndQkRQmO8sQCT5q2KZVD/bPZA+F2bmOi17/av8HP41ca+MCw3yNzrjqPBRjlPIG EtHPrTF5czwUc6Stme9NV8A9WmXhmOptHCCtEm9QZXO48hMnMuvvmh7z6me/PLQ+v+Yajxp6n/GR Ka7EM2+YffvLl6z4vfnkvBOWty4cMmTeij2v7K4MjAr5cRkHc9KojNQL7nhu4S0Dso/H+DoiRMRe e3bNRYXF7stFWRXa5uAkGAw8rNYTa0qVZQ0BnwSPK4gaVxDVThE1lT4UF9QgP9+JaqcfsqSCJwaz JkAgBj8pLFi72h+cMCAaJvBg8EKBm4lMotpMP45vemoVwMDAQKC6lo5gAIeeWgQSNSu4Ollkg4Ao ZoTMaTjEvPjz8c2DIVGzHBZX9SEANuLRWbPAyYmHhRkBMIFHCkUiQbOACzIukKdN3/p6+WoA37bP mW0dJ9bV0AxC/KCS1C6274ws0GoFygk2FpXSZXsXoB1rYcSTwOdKPBDG+0sg0pq9LYk3S01lpNRd ri3e1nPmzDQkqJ167tq2adDK9Rmpe3Mru0RFRUVYLBYTY7U2bI7nmcnjGeRVmv6N4+v19fPv+6Kl gD8kTgUAIqJshX3OnVyW83HTY+p8w38L7o7JedgZ4ELq8HAJsVWoS044e3KfVYsP7T5YKUr9G9Y0 0ODK3zrIX35w9lcl23fPffnpvcmDzskedtr4fSPOOGOn6skswKFrpPT0lmOPDIJFMoDUsDUljzVv bDRUFZf3UxGazcUbDQHb4JP3trTEEmM9go+PsGfuNDGfL9CwrhEpVYJbCvaaVQIjWpnwQWrzU4VJ lmVDk64+xnAkqvSEJ+vz2yKfembuPWsOum9wimFctJYuwagBUz8+feJVn8yoJ+A7EnNvGJY298eM p7eViePkcAtfx5xU0nnUv55Z/8yE39mzx2OEHZMV3+zuW1Ls+o/PL0W1PXqMQVFUBIJ/e5hPCJKs oarCh4JcJ0pKPKgocVNJsZu53UF4PCKCQaVOwNRWi+fBEMOsFEVGJhCDDA1lzI8aiPBBhh8yGNhh N1xzp6Y2VsqIzmSBERw0EMpZAE6Ihx8gDjKiSz1x9Sc8McSSGeUsAB8UMAAWVht3BQACMWgsNObH BgEGcJBx5GawQUCsVisMiQFwa4lirvf+DUv27hk9pX+bssGPhg4jsAxJJ+cNvPGp5xbM7FKKti21 pLV1jbUTlZ1zr7J9tuzQqC9fXHxdRon7ZIVnsZIkRwZFxaAERLjdfz1RIq9MsAf9akgNHQAQOPL0 GtJ8TRzGJigAQop+/snldf+e8fRLuy7ccv2bH/xe8GSFX45t+C2CHKw2l+RVnwzGn+z1VCkr87e6 Vsx9vsoak5zbb/iGjedd8cgKe9KgPQufn9FkHSLezAUjicJOngSF99R4QosxthO7xDjB6ZTjECZ4 2MAZAr0G9A5Tvz2UtN62EiE76EVAaTRWGX4xGJOxOXRB4H8621+90PHa7C/uXJ7rvrUsTMFNZoxT 4lInfnXajCtf+OTaViwd1R75b00/qUg2tV20/njLyD7vLN39/Ppy8dxA49pTYBAi+1V1H37xs1el 3/R1a0qRtLa2U/ONhP+YYy2VDz5xICLTW8+vvayyyje8TeKq1pQDjuMpIBEKi31M0wDub8ydJAIC fglV1UEc3FeB3duK4S0RIXplkiQViqLBqQQQJOXwEjz18+9MjEcEGWCssxKZwMEGAW5I0OqkWGsc AgTADAG9tEjEayb8uZJgFGfEPq4GLkhgAKzMCL5e/6zev1YSYACPw++ORDASg1njoDBCbcRWwz5Z o2xCBsBOAqzEQyAGpc6eIZepw6py/BfXJQn9LZqgwwgscFAzSkSJddC3zqPli8vTuj/x5to71uwu vtopyjGqRu3qs3H7OaMiI9RtCQ4MTIpztLo8RrMwNkGh5ffMdcsLDN9vLbur1COmyOEOhFRIAY8g BRALIDbo9/bZULz/LMZ3uj0pbdCKsRc+8OGdbzy7NtzSP7IT3khO84Uzu2gEobyyJiTOrL3waF04 jzdMNW0AxAmyIzbC05p2YuJtfnDOsA+BgCjbSjI7Zvr7saI8fbz9iflr7vx6b82dpQEKzYI1OpT4 fpMWTL//3sfeuiJ8fGVjLGZORFgZzxhYywJXlgEKu5oDAwdN6RrRtntqyay01Pd+2v38yvzA5GBI yQkGIbJXde8xlz774KcPf3R1QsvPyQgLpxkMTA6t00XgwHEktnyNaarKhc9E5CBoknQe2phkdJz4 fcW+gXmHqqcpamjl/ibheDDecCSzkCPk7Kug4kIXS+oW9l213QkGZGTsKcf29fk4cKAC1U4/BJVD FMwkMAaBOJggQGNGKEwLGwyu1lbTZYRaa5YGqhNWzc8wPGoFWX3LVhQMiCXj4W0AEKkZEcPM8LDa IPYAyVBBMNR9R6i7RQRicPIy5HqXjB8KPEyBHQJqV9cGQAxgf9rgADeTITGtgV9IIO6wKPuzfUgw 8HnBKzevy14CIKOt5/qv0HEEFsAsho6Z9nu0fHf3yclzl+x95uc8/yWecHVrGAOrfZAR1XtprL0M WzcRW4xM4/gmHoaMCO1o82HnvuQjen2O+dw3MjcW+a/LPFR9TrUvGA1qWjSSpkLVVB5KkSNvR9mM ykPZYx6/SX3zusUV73w0Nb6BaDFHuoPd4rhizgM0XnVBUzWjKy+/S+NkgtYwZ84cgyiKXGhIXCoG DRqkTpgwQQEAgW+isCKRZhSUVr05cbXLxnYYC8DxpHjJTOtTT8y/9dtM762lfgqZ2ZghSo5LPW3R Bbdd//BbV/Rv0spaH6VLNFmsXJCFdY4qnF9pXNYiFHdA4yUpXJ0pHtBMwaSkcOsGhueHmwb1fH9l 1hMr84NhxBUg2JNreo2a+Py9nz/63tXxrQtqt9l51WjixFANRCCmGmrKWi6E6vWoBk0NdYczzkjQ OB86gMAiIuHxe5Ze4qwJ9Gv1To3FFQCOYygocmPntlJ0SYwALxzbdyBnlR+rlmVh/bpcVFcHDgsd A+MggIOR6mQTAWozgkmGhhomIZZMEMAgQYO7TuaEm3A5MMTDgri6GrVFXK07kaE2+JyhoVmUoTbu Cqi9lZxMRAUXQJJqAw+AqxNAIqehnAsgWOceBGrFWz7vhYMMsGk8FEbgAaioTRN3chJKmA9Ko+QD mWmHxVVdThR4lcFXRKnKN9VTiWjv3xFX2pEE1j8SWjDdeM8bq2/49ZD/4hBxxThwhihf556D1w/r 32WJpzI/JzProKeipESyWCIxPk66Zn2peL1LDhNQ3wh7pCYbDOHeejUQkdFf1L7XCmO3iwB+/umV 67d+suLAUKb6ztm2M2t8vlvqAcZsqqxYJEVpQlAr8DpzknPWLnxAsXUTVxG9Vb9Q5EnJBWL3XlH7 kVepNV4uhyRJQPb2Xvtr14drlTUJACgjPWbkmfc+taPcO1JrJMw4IUI69c63XgSwOILTNKs1fMYe SBX8vtB6ZuGodvqsTNXC/m4mg+CPTwIdbO3g/4cpnjPF+tbLC2Z+k+m7p8hLsY23M0OUGtd3/KIp 1//nwQ/+My63te2m5KUosdHMyQ5BQ6OXFNI8gisYZp3LRvjMZotfRWg9NmaEosZ4TkfIGslh2XDf SUkv/XDg8ZV5wYt9IVZmBiGim7PX6POff/2lh986t5XiCgC6mb0Bm425UdF4iwpN85lL3GHG3gg3 DFZZC302EBepin6LsyMsk/PWC6snVFYFLpcVrdWB7YxxYQuPihJh66Z89O0bg95p8e080iOUlfmw eMEubNmQD1FSGhTqFEmFn0ngYQRPDEEo8EJuIHp4MJgYD6r7fgX54WUSTOARhAJ/PZHTmDhYkKY6 YCIOHBjsMCKTc8INCT6mwM8URNZNOQwMMtPgYQq0urgJCRpyOA9EpiFGM8FKPESmIZ/3owjeECtb OQLYx3NIZnZEaAKI1QrGGl5CFudGDRqGtBIAF5PgZQpiyVBr8QJqxZkEo1SjXLr0o+0rAGw5qh+h FegC6wTnp12eHr/tqJ7hkijkYWewJ1aljpvxzLlXX/LJK9PHOOsr8kDAjQFRtjM2l7fOCtI5EgHB xPnDrWqhELNnZLT8xv5XmHj3h9UAftkyZ+aar3v3s0cmD+y3f//eQdvXrh5c7KxJM3LUp9LlT5AU rdFbMiHoyo8uXP3lzDkfnrEG9Qq0sgm/KS9fPmS7g6sOVGpqw4lQ84HUnNS7v3CmAGhpvd7D5K9a 3cWjqafImnZS423EO/xmpTa54aQBohIXY6gAE6lxHJYGMmdnl4TUOgvHgf3+TqqkhpnEOdishprB Z0DZ2NrB/49CH19jfnDukhs+2+p+sMirhYorLori+5397Tl3/Pfhj24Y3jY9On6C2jUpIZ/tEhWo DSu6E6mG0mJ315ayKw3RxoRKlVkam8CY0ahpccklnYEWV5fYkD4qafbC3U8uPSD+y6+EEVfWbq6e Yy956brXXnr73H5tK8cwKs3os+2yFiOMH1Qiitq1IyvknNaHaPwEKKkAACAASURBVL3l3L4XJvjC BNpzEVHeoD2hxUXljzdUURHx/OxN//L4xW7t4R9hDMgr9NJPy7LY5fFWxMS1f7inzyti2XcZ2LA+ D6pKIVXQNRCcFGReSOAYg0rUoPTBnxaoKM0EYkANgihHAF7I8IbJB/vz6mV1+0aTESb60yJFsBGP SBjggQQ3JBxiXnTlbLCTAJU0FHMBVNcL4WUAvJBxgLlg4jkYwUOGhkCdna0xKggFzIcqXoSZF8gI HhJU5oWEYJj5igHwQUER70cURYKrC443EoPGAM2lDhIOiZevp4KMsSy5xfU2jwZdYJ3glB7aPzJL oqSQeiO8AfZ+k3698eGHPrh9dKz71TD7ahzjWmsDHT+sk3P2JncpIIcsVO3zyQmZqzbFAGhykqLc dPOb3woDK2rUaI470q2maczWvWf+fdddmcUY04hCY1IYYzRi1nsyACeAP+r+YP+qeXEfvTl7+PqM /HNyCyqvLPQpjdaS0xD05qasWfz7aWhUAT+K1zL7OFhhZSX6NhopfM6y1L2ffXIKEe1prZn462/3 DgwEgl3DbWMRvaqYGFG7fM15sbL93ZhcDj6tcSahIovW8q2b+7S0AC4RGS/tHd/HI3rsIX3xUVoE L+TO6QLpvdYM/H8Uykg3Pnrn29fM3+a6r9CjhZgKGBelxfYY/8PEWfc+NPeG4W0uVcAY6IPbeu83 s8pgAA0FlqbJhrJ9mb2zASOAsBmhRNP5/56/oY+LQl+MOIMQtKUNymvJurPlweFdXvku88GlWcFL /WGK8/KmZF+3YVNfvendl96+qwdrtTX2TyL+e7+PW5yeZYQrxFcp+QMx1Vs3NP8y8Pn9DglS93Aq 0eSIqDD0PbkUP7R1VH8vK9bkDv1/9s46PK4q/ePf99w7nol700bqSiV1QUqF0lKsZdFdtKU4LG4p LC7LIssCCyzOFqcsUKAUqEDd3dI0LpNkMn7vPe/vj0lKZFJSQX/zeZ5pnydz5dwzV977nvd8v7Uu 41hmHJIPHkuDSCgRs1jMwLr1FZz48TaaPqMfHM6fTAQeEvv31mHfxhpWDSIZ4falIuyfq7NEpGkG VihIYAssUKBKApEFrgPCDC2xQYUTZuiQqG+cCfjjHMTG4wWgNf7NAKOEvHCJIBxsQggGPO0IiEow /DDg74BVpQQ3BYAd+pUkGEXkhaIAnaUD9sZbsUBYyqzOpZ2SuKD8bQArOrK9wyUaYP2GYWa6Z6wz j7mtISuRWeucP3rlVcMTG65uZ32S1GE1qPgbrqt2vHD9ThsaTmgd0gfKSrOs+5b0w0FSqutf+qDr 2+9WPrClItRPUNMVw4BIRNf8qU/edNF5Tzxy56whZ581Y7zRLKhhNsRZs26oM4+/8ZPXZqa3GMLp efw51QAWcOlziy86/eGKj1ftmVujt9LPCoTs/p0buzGzqfnMkIvPzNm3cFPpN6tqanqGWt1ljIbC mJqi786a+NzkheiAgbP7uWnJ5zy6bFpFhCwJQIjrlr3B1/+EMgAgKpD3n5O/KU3d7ykOoUU9EAca FFn6/YiZr7tzAbT70F9164CsYiMwoj5iZqCzW5NJW34N24ffCvzpVZYHb3nh7NdWuO4orNfbBL0k HJycN3rBxItm3frqlcMPW0jUCufurmauWhVCC00z1oJC2/PtwEc+q88CENEXcuOzptitm6rGyDYi p4CqJtQOHj5gU+nr7e+77MmxKTe/uunW/231/DmiTZYlw9t16ClP3fBEwROzcqndGbUHg+jCwJWD sranmuAv1tBC0kKvK0uQxUuHzmf+cBpFHvJ+4p3SvNoqb7+235gQY4/dNfHcoSU7Hjuclv0yMLPl uce/nVxd78s+5OxVk+goRZjrwAwtEKTvlxUiKcWO8Sf1hHoU67FCAR1KSCCGLFyPABnNbvIxMCEO VhYMeKFRHYJtgpsDtVosGkUXI9ud2KGiG8chSVpggLFHNKCYPKgkPxxCRZI0gwkoFWEZhub4WIcP Gg7mF/hzE4COHcKNKhFAHFvgZFM4e0Y6fHVal+DO1AnMvO7nnDj3O5qJROzyyt98weRRhtw+doQn ebT9LhSUprntTJLmJRc5iz1GdjDCm2/EHdEF3vwkrE6wiTZvwuzfba8qXj3jkvd2RnyjZS5Q31hY esLeworhta6a9Jqamk7hj6uTy4uUsoZ4DxGFCr/6svey+R/f/MH7HxZ8+MGHd3/4wYd3f/T+R3d/ 9MHnBYv/++m4dtuWOcuXK2hxZyu1VT+XEhT0WdDqXKbpHzcMSXF8lBOrRFBF0OHZ9e3oba///eYr nl6afbB+KZ1fkHzZv9bNXlNYe0ogwusg2boE01KyPlt0mdPV9LdBsfqWXpnWLW0WhoaGis353734 xFlX7Wyb2QAAXvSy9elPK8/eVuwd1vZbQmxGp01pky/ddLA2/5HhzTPMD/zroz89v7jynkjBFcjB CTmjPzvhiutueOO2KRF+g44zpZ9W0qurY2XbC0yHr35nv89eeGE6c1tTdGamL77dcPz3lUZ+60kW IBVqWv72/H5J7f6GZU+OTbnttS23f7Ch/tL6oGzjeapYMjw5+dP+cc699z7UnsdgRzk137whOcnS NjNt1KKiZPPJBbfMHxxhNfD8AvvqEv+p2+v1NvcEsiXpSvwxK58ahN/0EOH6FXuyd+6oP0nXjQ7d I1vDRtiDsEWaiDnsWwhGQ0MQn3+6DWvXlEGPZEp6mCRnOBGXaA3P7271nRNmdsKEeDZTAqxsbmXt wwACMFBGPtRREDUURAl5I2aY7FARL02wsICDVWRIGyxQ0IAQNgkXvlcrsVypwi6qR6hVFiosnvfr BVdNbZBg1CCIveTGRuHCBuHCbnKjLOQ3bdnmmrJ1696I2o9Hi99NBsvkr4qZ7vhqcM9nH68xjA64 QzZDCIMUxRIaMWLs9mOOOeb3ZBvB8TFqPYUzQi1elaQRVPcv+3jS+n8f/wFaeSz975k56ef+9eNZ 31WHTvUcgmHtGTP7fzd/+/fbyv2Boa3mZKBm44ITv7xPv+vK5xY9/tRlx+1omoG3d1FB/BWT35zx 5fb6q0r9bU2ibYnx++NHTty8f0kBBsQG9y62savIpXVpsfXqfYl1W744c9pT276bf1WvNoXIzCxu Pr5Tn7JAhBliqsqIS3QjgujmDfecsnTFpa99VLK1frZXbzlcx1qtqXT5vPM/qFiTPnTyRe9e9JfT V00c2nu/ECIopbQUr/0udf4Ljww69dp/nrqjpHZqndb22AAVMZm9ViePOnVR8xmJk5+9rfTDkdd9 urakdHCN1jKQkt4ie+3mt+Z8fFk5Fyza+9Ldx+VUNA1TLnrhqqw/33jXBYt3VV3dOlMHAGRPC9ky hixcNCe2iK5o25o/OsyL1EdmzjrtpaWVdxbWaZ3bLqEiNTd/zZw77vz77Cndax6Yvieto9uWUrLd bvdkZv5opZE466v6m8bnfZJp9ZxUEpAtzj3ZUBrjWvyfWaPP9bvmba58d2bfVA8A7N+/zHbnmeMm ffztrltdEUzNherUsvKHLuhzXEZEqyT3K6clXfOvH677cEP9xQ0RMldCdep9hk9574FnCl7Pt9WY L9jT8WO0Wq1GRkZGffNM7/j7btia/d1ti3dUBfv4jJb3itD+1d32ffj07X+6/aV7Z/3twhVNE0kW zXs4/c/3Pnv+N9sqLgi0Vv8HYHEklXQ9aeq3v/UC94UL9k12e/w9DvxBKIA8hCY3BlMg8aPwlWxp p1Pr8uP9t9ZBMjAkPxOqcuQhR0q6E33GZdK+ylo2WllvSAJUGc7HNelQNaGAEENmZoDqOYT6Rr3j 5ltQIaA0ziT0w4CfJGwcDlS8pB+o5ZLgiPVPv1UiaXm5G/z9Pn+v6AQAB5HQPjJ+NwGWb8+inq/+ fdkzSjjYOLSzlEFmZ++yC+7NvwzAEb3V/pIQEb87Z8AG8/LNPsBoOYOQdfh3LRj51b0z/338KRd/ Mqx38ha/3x9ftGlFt8vu+M/x7oA2sKGNSOWPaCws37b624Brvt419aPMt/ctq+jnCsoWQwZSrzEX b/z0z6/cvnT4x48lb5h0/LGlDeV7E8ac9kh3n24MqPWEEtu0X4lBTFLfH665Y+TGSx4BLrt+2ub3 r/jv8u21tV2Czc916UH93gUTFz1S8vxps+59NlC0dkVd0XYfUI+Bx+TEzzr5mKlfra+9qkLnNm/z qs1Wnzhk5IZIN3Ma8ZT7s2uGP7+veP2IlbWBIa3Tn4ZWby7bve7kuop9Y25b+UnJ9b6GOl3XDVVV FbvV4lR1X6bLG0qMpJYNAKaE3Jqs4ae99N2tg7bRbc32SzNDS24e+sHa/bUn1Zb4RrXeb6hqW2bJ 8srbHj3jg6kvpHffPn78iVX1u1ann33Di70CoVCfyDPUVMQk9V835PSz3/n/qgX3yl9mT3n+6/33 7q4JdI2cD5DwVG/q9Pi1U+9//NpDyBiwQYjr5c8YdMFjAJp7tOOy45O+W7W3emn5HveUlieYhLd6 W491nzz58OyFL589dNSx25LYZZwweHJ3lz80xO0NZOhtmkAwZY/c1LnXwPkzI5yvPH+a/dpHl1/9 4dqqObVBvU39XXihIBVu+njU2aPm/afJNLdjx8hQO00qHjb54usBFB5oUeoVnvcu6v3ehnL/lL31 oS4t1/GTa+e3E//3zw3dvnvjkbXHjz++0KjYHXve7Hv7en3+gfUBo22NoOqQ1p6Tvrzm0uErlx7E DurXpnLv5vQHH95+ckhnO6nmJhdigFWAG7NT7fgOtoElYLS/bGlJHT58ex1UhTBoSCYOLT3QFpNK GHlsNurrfVjw6XYOBLUDp0ItB8gkBJtZoB5BCjW6lhGAFLJzJ2knBrBfeFHFLUd+LVCQx05YWUEV BVBGPuwQdUghG0IwUEnhMvQ2h9/4f6TDahIUjbReeB1qtIngdmUhfi68AS22oqrm5Pr6zR/FxfV1 /fQah87vJsDSAw02V6Ah9/DWJpiD9RZ3qG1W4LdOaqduq4Yk7Fj/ZblxbBvRTN1n8hSvHrWkfP3Q pZ9zEIAAS7Om6+rBNZQl6TrMpa3OZyIyfrhv/Bsb9tWP+mKf/zS/0bJ+xNA85oZq7wBfbUX/8kKS LKXQDUkccWcEe3rvnb2nX/riJXHkAgCa9K/KF87J+8++GvfQ7bVGTvO1OFBr9hb/MH7+SytHCpOj LiNWrSGEaN37K1IM3UjQDCPidHd78qgfZs4Y99X9L0Y+0slP/LBxW0X/u8s/2/nE/vpgtzaKP9KA z10d58OP9VKapsHvP/jkEpMzwxM/6E8vnHX7rP9G0tMa/eCKLWduTH+6uiGYt8dtpLf+Xve5HB4/ jfS5XSOqdkGyoYf7sp392VO6lvacdtEjH1/RZwtdedCm/SFhZtMV/RyTSur87QRXACDhc9ekA2jT 3z8FCa/f5g6ltv57tztW7n/opMwX9rv8/Xe2yZoZ8LmrU/wNronrXMUnEhiGYQijzbhgGHNcTk33 waOf/vKOcTvozrbfvzPPlbxtV9XJtQG9XZVKaYSUBldV90M8PACA4vEn+0L+NvZBp59/1pKv1v/9 jbc2atfXtZqtLGVQNNSWd/O6q7tVlewyiCXphiEiH6KAs9OQDcdNn/zMzFTyHE4bfynm/bd6nKar +VBbVbeHZc5BZGbWQx0PslpD4sDdlRgoK6nHu6+vAUtG/wFpsFiP7NFrd5gxfnIPkpKx+Js9qK3z Q4iwaXIpewhAK+Urgo0VWBtv6Q6poqrZYTOAFLahk3RAZYKdVNQoQdQhBDdpwEECICsUiEbD5uai o6mwo0vj9oqFD2XkO5ABIwDxsCCTwwXodQihTPgizmJsfixHc9iRmeH30Zj/vlA7HMBnR2mzLfgd 1WAdGUSQQvn5rRvoKNtDjL3tvfIJo1P/mRunlET6nqUBLRQ0hUKhmFAoZA9pPxVcAQyD6j2+lNrv 2wbYI25fWHHyKaP/NjjF8a01otAlwzB0CoU0RdONdoIrQEnqWZk69i+PPDZ39JLmf79k7tMLp/dN eTTPKcrbHotGuhZwhHw1nfaVVwwoLK/t7w+E0kO6YWm7GwUxXYZuHnjunx++f3JKu8rcRMTXvnXm ggtPyL25R7xly9F4o7DHZdTkDD/5H5fcds6jBX0jP0iIiG+84+YPp/ZMfDDXqbQ5VgAAM6QeolAo pGgHCa5siXnleWPOfuiCqX+a/3syXT7a6GGpjp/nJZeZQZFFMW96/okFE/qm/72TWUSsd2KW0DRN hDS93eBKsSYHMoae9vLUO277oL2hM0MxhC7b1nQdRaTQTW3zascXBM48d+Izo7Ji33NS5HEfaejQ NE0J6e0FVwRrSp/93Sdd8MgHN07osPzJrwEz20KakR8M6nHtXk9ECGe2DuMRKRSQycKkNn3MDEWg rMyNea+uxuKvdyPgP/I5KnEJNpx0Sm/86YLB6NkjFaoQiIMZqQjXSrV4gQWjBn5yUQjVFERVhHkL PtIQaAySXCJ0wNvvx+CmLfGw4BiZhHwjGT1l3AFBUSfMyNcT0EuLQS89BiO0JGRJR+O2GMlsxUgt GUND8einOTFcS0S+ngRHBDMRMwQy2IFsjkHcT0uzdRgiQtCvJWmGzGeOJAh85Py/CbB+KSLJEBwJ RMR/nZr38dmDY+/PjVeLWxtktoewp3n69+y7LMFmiljrUbt7X7fUNdvaDLkBwKV//2L9mScO+uuE HPsHMWbFfygpbVIsHJPRd0fXcX+5I3/YKa/nt/J8ou5TgrMvnv3iyUN73tQ1LW6TSRGH+IpIECan lpw7eunA6Zf8NXXupO9+cg0q0O9+/08fnzOhz5xxnaxf2k1K4JBLIUhANVm1xE691udPOuumsROm PfTAib1rDrrKqOv9153c97nzhyXe0ifFesjHSoqVnSn9tg+adN5tuZPv/vfVUw5uEh3l54E6z/Rf cc3FL0zrm3pvN6darBxCkEtCgcmWWZd37DmPDbvsnsceHBBhokbz5X8l9f7x179TMv3EUXdNyHa+ mmhRvIfyYCDFwrbkftv6Tb/85ry/XNxuAPlbYcn/dmZ4vcaIUAQF+hYQHZapIClqK+EzAinhYK2i sgGffLiZv/h4G+rrflIG7SdxOC0YMSYHf75sKKaM6ca97fGczjYkSWsLvz8zBIIksYfc2ENueBtL Vu1Q0YvjkctOeKBho+LCOqUGe8jdQjsLCPsMdoETaQgbNasgdJVOdNFt6KxbcYwej8zGKo4ktiJJ mqE2tiGWVWRIC0RjaX6WtCNdWg8Ml5pB6CJtjUFYGAFCJuw41kjFOCMFY/QUHGukoCvHhqUojgJB TVfrawNjln65v0295NHgNzVEKIgV+tmCPjIRN14t+wESkebXAgAJgYP7jFFY36jNI5oZitHgixi0 NCGIBSIfIzFExN+DLvwmwE+e9KK1k7f4v5+vu6oiGBpU7w0khdo8rhWYbTFBW1z6zpRB016887SY bx6/7cHnV/i1lkXrzNBL1vcs9pT2BLCszf7CD5A1n946Y3bqqp3nLFyze2aDZvRq8PgTQpG81UjA bI8Lmi2OfY4u+d8MP/28f7nlGRvfuT6ylEDuhQWBefNmvDl4dZc1r3++4eL1Re7JekjPrveF7LKd jJhQzGx3xtdCse/NGXzi+6PGT3z9uZtnFHfU7oaoQAfw7ZvXjN/Wf1vZjM9X7z29RqO+Hl8oOaDp 7Z5zisnGthhnjTDZd+YNHLdg1Kjhb8y4e07h8R2UScgt+CbA8/B63upJq16av372trKGCcGAlt0Q CFkjZgJIgdUR5zdZ7PvsnYd/N2raqf+8+p7zNh9sf8JgIop83RCRYHHwWh0mVhDpnKcD30VE1Q1C e/cQgkLy6Fretnd9HB1ICGrvngD0nVngWXXZkCcz+uVu+t/C7bP2+QLDPL5gmi9kqJF+RsVkZZsj rtIUn72u29hTnz/7/vM/u75zzEHHnTVDEv2c92SGYpDR7m8y6/nPdn9y+Zgb0vd6Vi1cvuu8GsPo 6fYEE0JSRvRTNNucmsUeU2TPGvbtyJOnP3XOfX/ZGKm27LdGhaumb2W1v88hCV91FEVFxKxXY40X EaG2LkDz529Gabkbk0/pg+zsuDZioYcCEZCVHY+UC4+holE1KP2uTK7d6hJlLh8kJBxkQmeOgYkF SskHF/wH7GyS2IrORgwCZKBOCcGFAJrquZpmAkowTBDoLePRxbBBA2OTWo8S8sDCAjEcDuUkA1ZW AAKCZEAHHwiwJBhBCjscqhBwCBWqyiAzN47CElQCYjSlUToCSGQLRqiJyLCY0TRSkkgmJBoJUHXC Drg7ZEJ9MBhARaVngKehsieA0iPaWAR+UwEWkVgD0CMAW3BU3+SImGWdNPTwUJI5QWeJBQDcrRcE OGQQrW5/W33Z4BWLCfTgAQ3+AzuRhpRy8cFaIgWtB9HDAExoVh8Y9hKUy9GOdxdd/VkQwMfb5z+6 7NknXj7uk40lI9S4+Fwo1nhmMhFJr9tjFCsJ3bYef/lfv3rl8vGb8c1c+jKVHl3jwsCWwRgT6SWh fVWhg/riTXngnSpmfvL7V69/96V3vh3z9Q/7BpviY7MVkxIr2eSAYIMNdvv8Wjml9Nk67qzLFt96 47RNfTtQhD1z5jsGgM3M82783/3vvfTce6tGrSlx97Y6YzMtZlOKYZBKBMmQ7lDIcNd59aL+46au n/iXOT/cPqV3ERHx87f81F7acs4/FlYw8zNln8x9+5+vLxjxzpKdg7xkzY6JiUknYquUwiyEDDFT wO12l/lkTPGACWdsPOH8y3+4e0LnMiLifxYc2hQ+mgkDWLCZueC6d+7f3O+F1xeP3uziXjHx8Vmq QnGNx2owZEOtO1QU2+WYzSedM3tZv6smbZlFpH1w7/kH3b4wUCcZLwP4Gi3PHyFZVkDRIw4vN8Ik aQVA9yP84tD8nGRi+gbtXIuq2fAy4XkCMlv6JpIgoFqIo3rDksT4hAiVACI6BB4BREAILNYcbKH8 51drABZULnpm6Stvvj/ijS82DKtjW3erw96JJVmJwEKw3x8IVTUETXsHnnzB8lMvvuqHK4fH1qx8 7baDbRoAoBjmOiZ6HkAmjn4mi0igBmZzG2Oc5kx9dkktMz/7/avXf/TK21+PWbimdCCcsXnmVtek 1+evYHuXrSdcfO3SE848Y/2FuRT48P4Lj3KTjz7MLF58+tvenkAoHuiwDvNRhQjQNAMrftiH6goP Jk/phQFDM2C2HJZaxAEsdhO6D0pHl97JInl7FRyLC7FxXSmoIayPZWMBN1S4mj21fKSjQWgIwmgc EvyxximFbciQVlQ21mI5WIHKFLbHYRUGMfYJLxKFGTGsolwJoFiEJ+lXw489ihc5hgOCgTI1gN2K p1GoVKJOBEEWB1SBxuFHhh8StSIAqYeL4zuTHcnCBGGWMBr1RRmAUxXIZTv2GV74W1n6CFDjJ1xY LzsQgnn9waSaal8vZv7maJdg/L80T/4jwMxKw7aF8Z9vdDk8Ho+anZ0SPOGEqTVEdOR554PsE3Xr nGs3F9lXb6232O2KHDZsmK9bt25uoiMfvmJmpaioKHbVqlWx9fX1ChHJ3vm9/cP7DfcDaPi56o+Y 2bp48eKEurpyU3W1R01OjtHT01NCQ4ceV3s0jqudfaq7du1KWLFihT0YDCpks8n8fv38/fr1c1Gr YdUov12Y2f7ZZ58llpeXmwEgOzs7OGDACe7kZHj+CPVyzExFRUXxS5YsiQ0GgwqRTebn9/P369ev /ue81/xcvFywyLqj2vdRWY1nIpS29WgtYBmWYTiUstpWtVsEQCGGlGFJh9YZepaMxAQ7Ro7NwbHj uyE1w3nUEmteTwhbN1di27oyVK1zs9vlRzl7yU8G4mFBAltQR0FokAdU1ZvaLEAYaiSjs2FDuRLE KqUaiWxBtoxBkAzsEG64G/X/49gc1sciDf5majkWKEhkM1QIuCgEX6MfIgOIZROGUCK6WWxQCDAY 2Kx7sBo1CBrhjNkIJZmHOO0kLAzZaEvLDLBGqAhp+DxQiXoKHXjbskBBZ3Igw7DCLhV4yEANhVAq vGhop3g+/JMRstLj3h8wOufsmTP7HtUZ2r+pDFaUjtNY51DT+Pkl91nX+Pm5tl/b+PnFaHxQtFso /zPtUwfa2uxG+X1BYZXzDpk2/x5pDBJ/8Wvy5yKuV2xu1fzKPmzoIBJh7av2kBKHFFwB4eWlBER4 SJAbNyNl5AlBJAiuOh+++Hw79u+txYkn9UTP/qmwWo8smwUAjhgzhgzLQt/+KSgd56bF3xaifn0J QrV+pOhW5LAThaoHu1APibCadXcOmzjvEW64SUOdUFFL4YL3EvKiWgnAAENrliivoxDCxqstZ/gF YKCUWnoQNv3fQBqWowa7Q1bYoMADDVUcQKjRwNUAI2DRAWu4z0SzWFiYGSFDtrD2sUBBvpKIPqoD Jg4PxWoaI6g5sE+3Yp3qimAIFYaZ4XJ5+ybajSwcxA7ucDh4kV+UKFGiRInyB+HY4RecV1HRMM0w pAlNAg2RaqYMPayFdTiwJLAR3jZLkKGTPIiAKRFBSkZNpRd7t9YgUBOCPc4CR5wV4ghFs4gAk0lF YooD/Y7JQHZOAmxWE3sDIfIFAqiQfgRIh9I4tNZfT0AiLKikAEoUH8qVQAt5BR0Mo5WLfXuq7dTq 0xodEm6EUIMgGhr9Cpsvp4GRZLdyvIUIFNZzJQn4DcY6fwNKZTh4EyD0tMfycJuTzE2lqAQoCqAQ EMcmGJJQKQIRFeuZAdWsWMwm8/ZPFry0ts0CR0A0wIoSJUqUKP8v6NFl6mxfQMtnoDHbZBCYCdIg AjXZ39CBMakjgSWBWxrCChBMjQFd60c9E+D3ayjeU4e9hS4EgzoSk6yw2s1HpZZHKISUtBj07JNK nbrHw0hQUVXvZXiZuupOGAS4RAguEYSLgghBIggDaMxO8InKkgAAIABJREFUAYAJAimwsRUqBRrr n2JhRjJsDDCFIpQQtyfx8FMEpEG1UmO72cQxiiDYJEpDOq/21tN2nxc6hQMyuzBhUKKT0ywqCTU8 OstGsxmUZgAsUMx+BMhoGwiGPXUsWp2+d8natz8/jKa2S3SIMEqUKFGi/OEp3FKY8djjq7INyS3r nBqzSyzlwVUymme6uKmaqGMQAIuislkKUklhAsgPDX7WW2zFIEYDQmjYVYWi/bXYsroU4yf3RHbv RDid1qNSn2WxqujWMwXZeUkYNjaHNn9TDG1pA4LuSuwI1EEhggkKTI2iCt1lLBjAdlGHzuxAvpZI AZJYplYhSAZOoBQkmlWqCmpYiEr4oCNeNXO6yQISksq9GuqgHfKMPwlGqc8vPguEYBPhDFZAMgUM A5J+nOliMTMSWQiSODA/X7ExZIjC/cVALCmwsYI64gi5NkAzJHSr3quycnN6amrfyLqFh0E0wIoS JUqUKH941i6v7WlSlJz2cyrtBABCAQmFW9RrSQMsDeqod6EiBCxSkABBEQKqFKxCwGCmYARtVyLA ElLg2ezHwn1bkD4gHnlDUtCjbyriE9uI8R8WJpNARkYMUmf2ROVYD5S1sRAr96O60I1cXwz8wkAd guhrxEIyo8TshY0V2FkBgWCCgCoEUkwmmImQGWNCos/KLHw0Ij4OPVU7CZVRaNH4mzoXamXwQKer imBDcrtC1c0JSgOBZomx1kOOhgGEwgLfBACKpVFNXjB0X3iaYtOMwkgwwjphNlhzfvhfqDOAaIAV JUqUKFGidJSqcl+SrnPsoa5HitpW0V0oICGYNdmhWYYKCIIIEMSqbJphSC3EQFvsEwQnTLBDgfQY 2LG0gn/YsJ+yeyRi3HF56NM/DTbH0REfVxRCRpYTKek9cEx+Jgq3VSP4RS1276nDfniwUtRAIYIP OgqFB7pJIkAGqigAkxQo0gPIs1uwzwigRgYozq4g06ySxcaAiZFgEzImKEStF7CbVM5PjeG0GJVc bilXuRqoPvjTtW7tLUAAPJqBcqlzpsNMFPjx5yAKB1syQKgUQbiF1iZ7ZYOKrtKJDN0KRTPZAwHp PMLubEG0BitKlChRovyhYWZl/Zp9x5WWeiaENMPS4aE2RQW1q28bnq0Gafzk1gQR28gMM5QDD3km wC80GBHcPxiACQpsFN53g9CoJuRDaZkbOzZXcmlxPZlUBTa7CRazekAc9EgQghDjtCAzOx4pgxKg pSjwSh1lfg/KQ+FC9xAxqimIOgoP+emQKGU/dhle7NC88MMA64QMswXJcSZmAarw6djm8ZJuMI1O j+dRuXbKiFOpU7wJVqi81+2ndhymOgQDaDAMJNvNHO9USBgEGOERXUUhlPt1rNHdqMOPijsEIJPt GGokoYcegwQ2w25GTFwGr3r503+vPOLObCSawYoSJUqUKH9wqu0+X6hXKGQ4DiUWIfyUllnHNmZI pgBpiCELEwCDGT7WKMjtDzHWIQCNJBQQPAiBKZwJq3P76fvv92Hrlkru3iOZ+h2TjgGDOyEh6aAm Ih1GCIIj2YaRk/PQa1gmCndVY9WKEqxdXQTdL2EmBb5mulI+GPAZxoGhO580sNhTi0oKgUC8o85P tSGNkh0KuqYrwmxiSAYUE6hbZ0GpNSqK3dqP6sEHpI47XhxfEwjSwrJa9I+P4RyTDVZVsJ91qvSH aH3Ihwr2txggjIUZA4x4ZBhWAOF6L0WDYjcomZlV6qBTx08RDbCiRIkSJcofmvp6k+r16Ym6bhzl UZuOpV4kGD7WoYOJQJDcNEMPUCFggYAEEGw0WwbCdUNuDoIBWKGgEztgh4oqCqAeQdTW+2nl8v3Y uK4M+5dX84CRGUjrn0pJCRaopiM/TCEISck2JCV3Ro/+6eg/MA2168sgdwSwvKoBpexDnGKGMBmo Cxowmg2V1gR0LPXXhVUwGiNaDQQdYekx1cYQBBh1QEAPy2iZFEK604SUBAWqCpRVGyh16zBkxyxc q7UgLa7SsMXiZZsqKMA6aoMagsxtArVsIwZpjcEVgHAk5xXQa9XkMpSZAUQDrChRokSJEuWn8HiE 0AxWDeZDmonHUicSSrsrsdFxOQcJhp9/fG4TGtXOYWNrY7WOG0FyIdhmxp0DJmTCAQsLSDAaGsU9 IQBzSCC0xk/f7tjF3uzd6NU/DflDspDRKQaK9eg84p0OE0aOzYUxOAO+0joYSytQuHU/9w/ayBDA Ek89F7kDjUN9DKLGmrNmB+v1G1hV7IXTFoMEB+ALMX4o9MHl10kRhBE5DozIscMRSxAEVHsNfLHR g+1lgQ6FsWGBUonygJ+a/kIRsmBmKMiEBWqjz2ITLAG/RvYil+WoxUXRACtKlChRovyh2be9Il6G kH7IqkzMzYKs5jINslHpvW12RbR6cDentUCnjVRYOWyJrIKQCBt7oVGg2cxCQtg82c9GuG6LjAOi nNz4XanqQ0NAo7odIezcWYXtX+/BgCGdkZWfjszMWMQkWGExH1lWiwhQY6yI7ZGOKXlp8O1LJf+G KtTuquPE3WZZQkElza4iRphkRTBEHq1l8GkwY1OlD66ghuRYBWX1EtUNGiQz0pxmHtXTTolOCgeO xMhUVYzNdaDUpaE+YHQ4MD6Ytz0DMJECq1WAfNzG+dcX1Dv5drpi0dan+LCIBlhRokSJEuUPTVll KDYQ0FMPS/LS0MOSDNTkhU7hwKpVcGUSAkIRrCD83NalhG7Ig+6wyZgYAExM5CcZLnlvFZ/5WUch uWGGAi9pSGQrbFDhQhBeaNhJbiTAgl6cgEr2YWutB5VfFXLnlTVkdBKclZtI3bolIadbIuISbVDV COr1h4BZJZi7ZiCuSxIsu2uo+6pqEbO3GL0tKmKFGRsbPPh2VwOCess+YgaK6zQU12otaqwSbUQW hw4Rq4bthQIAKQa6pAnYLQJ1gbYCoYcDAdBgHFCmb03I4Fh2wXIUdgUgGmBFiRIlSpQ/OLVVnhif L5R42E9pZoDbL8sxCwGzSZVCghRDQCGBEBnwCQ16OzVEDMDHGqxQEQsTSTAaEKQQG1BAUCBggGE0 mjGHDYs1xLAJnWUM7FIBE8Mrwh57hmBmMAkh2MECPqFRYUM9PNs12r23BiuWFSIx0Y5uPZLDtjld E2FzmKAohx9skcmMhF4ZOCE7mXRPF8jiMgT214h+5Was2Cs4oElSGjNKkvnHoKrl6CHqpIBhVyDM 4a4WqgKwhnqfRIjlgcWZwzVdRGGjbD6EQvgmQmygKqghlW3h7TQLZgksLVYjOkQYJUqUKFGidATB mioZR5a2aQ8SUFSFhQQJDgdXIMAqVRgsm5WttyUAA5XwkZdM0GAgAAMqBFJhRwJbECAD5fCigUM/ 6jtZCEqMAqfDjhRBiLPHsM1hgsmqwma3oKtZRYZQ2WUGNBVkUkW46L1xA0SEsrIGKIpAdrcE2OxH pqdFAGw2E2CLAyfHwp7nRv2mfUjdY1Bc0M85TkEMA5uLddR49IgRUZUrgNXbFR7Z20axMQJMhFoX Y+laH+o8stFbUKBTgoqEBIUVk0C9S6eS6hD8etsi9p9ij/Cik2JDEpmg/zghEmZDJjkatGgGK0qU KFGiROkIfk1Xdd2wHY1hptYoRCAiPuBVzICQBIXCVjM/hQ6Jeg5rNDEDTjIhlk2wQSAWKmAF0jJj kZkVh4QkO+KTHEhItCIx3gZFETBbFLJaTSBVQDEpMKmCFAV0sFqknwsigikuDl2G9MW56VnQ3DUU 31AJI+RD1q4Q/rfcgzpv23oqQzK+XeNHWbmOjGQVuhBcUh7C3jKNDMlQBKFfroWP7WGneDsRCPB5 gS27NSzb50HtIQ4huhDAOlGHgXoC4pqFQRbNyLa69Zij0xvRACtKlChRovzB0YKGakjjqGUmmkNS gliASGHFIJIsSSG1cT5dy/mAB4a6mv2NmcESUFUBi01FYrydezlj2dnZSUk9Eig5yw5bnBV2hxkm swLlCOunfgmsVgXZXRMBjofmTYdeWYK+9nKs2BVArSdywbpfM2hdocTGfUEwgaTkAx3WLcOESYNN lGQxwH4rwIDDAYzqboJmMBbtaYAmO57JMsAoJA8aTDq6GU4kSTOIAUOTUAyODhFGiRIlSpQoHcFk Ekq71TpNT/sOWN5EQgfDJJmEwSQF2EwqCyYEWaNAY90WATCTAjuboIDgIx1eGRbXjI21IjMrDl1y EpCTnYCUNCelZ8ZSjNMEEnRUVNp/NUjAFOOEYsmFJ2CGsPmZKEhNZWmNo6k/Lk4cLj/nH38WRRDy khSkJpghDYYMGYChgBkw2Rid01XEFAvU+o1DKsiSYFTBjxolAIeigkCI8ZhpkNtx1Do8GmBFiRIl SpQ/NEQRZvMJBUTiR/kFlmCWHTZwbk5IN4jBsECFzgY0luRjDXpjrspCKpJgYwsrUIiQJIiQq6Br v2R075GC7NxEOONtUBX8rgMqZkBKiUBQor7ai5L99fDVNKDO5caG7TUo3u9DYrKKvM4Cwiewt1RD taf9/maEAyy7OfwbCYsJhj8INOrFMgC7nWA1C8B/6L8bgAMTCBiAgIB+dDRGAUQDrChRokSJ8geH WbRMTwkFpJpbpawECGDWQ4ccZIVn+xkISUmE8Iy5AxtnwCoVOMwmJKTbqcuQRGTlJSGzayziE60w HaE+1a+NYUj4fRrcdQHUlbtRWORGYVEdyorqUFsfgB4IQdMldAYyE000dZoJeV1VkCZQudeMjz4P YFdlKOKwISFcn1XnNxoDoJawTqitZniDHVN7PxjU7N+jxW9qMHfBs7NTZ4zuMSbNYp9mcXaZ2vuE c8YVvLUms/VyPG+GMqufKV8xdz514IQbu3MEs0wAePiMrO5mc+fpnXpd0QMAmFlMzY0/JsGeMHXC Q0vabBcAXj41J354qjpB7X/hsSddtbPdMftnpqSk90lQTgJwGoBTI3xOj+829tiLlvBRdeeO8v+T Vc9dZrpkQOyI7FEzRs5YxjZmprP6ZfROtiRMO67gvayfWv+hU3o6RzowKWHEuaOPe5mtP7V8lMOH memh450987r3P/Gkl8pSfq79vF5wUmxPi2Vy1oApw59kPmh9ETPTBVnmAckJnU7uev2Czj9Xm36r hAyjmYQ6RQiufoRUM0McXtAjmWE0BlfMACTDalXRrUcyjv1Tdzr9liE48axeGDA6Aynpjt9tcKVp OipKG7B+VQk+eW8z3np+JbZ/uRLWkh3wFO3hTWv3Y19xHRo8AfgNhk4EoQj0yTWjZ3cT7HaCLY7R 9RjCyFFWNqnt94MuGRuLNWwrMiB1HYLCw4eCCH4fY2t5kBuCsk2AdngDvkfgOh2B30QGi1c9Z5p7 z4Mn3fTQe39x+ULD3HooTedaLt28rOb5gqvW9Rh/5yvPfXXPh8cTBQCguBhmEF0P3XV2UXXVexf+ p+pKAOUttsmgR8+UpwLKAzpwJ4AHAJiZlVkAzmcYfwbwfpu26JwniJ8Fc43LGTgFQEWkNquGPoSJ /w1QeuQfhQDwCunFnwFsO6IOivKLwaXP2R/9T80xQSWGjzn/qg3TMsn3a7cJAGqq3OlF5f6n6xMb 1G2fbTwfI/tvYkOew0Q3UMi4BMCbB1vfEVS6MPACgXZ4gfPQ6nr5vcM8T3n+6V3dS1zcKePEqRsv H31M5a/XmkLLjmLjmga3b+a2Jd9fD+DVn2MvMcKcDfBLEnKFy4PLABzsmAXpfCkJPk+R6tUAXvs5 2vRbRVHCHnjQABLqTz5FSTExS+Ow0xnEQKzTipycRAzI74RB+ZlISnEc7uZ+dXx+HW6XH2bDB+Fu wLqd9Vi8qgYl++vY69eoV4YF43vFIzVDYnyGSjuKFWwvkhDNelABQYlj4EfFCEiFocSChEJgHZGz WARU1hv45PsG1LssSEtUAUOD2y2xeX+IN1X4qPkzWCVqNMIhhKAjFEFtv13M5Fct5sMba4zArx5g MTP946yup7y6pOLRMupkyTpm5Ku9fTuWemurtL4Z9vzV6zdcvL/S9fi1ZykqM79JRBIACILBXtTt WDh51YK3Z85jfmYmUYuOYQq/SLSoXiQwwJLkQSsaObxc+wgCg0xQck9cGuNbd3d9RUmg1SYIBhq8 Tuw7xC6J8itStnZDyhsvfn5Pna1PaPbUqy4HUPRrtwkA7IkJnrxBgxb47FnCkRVbDYAkiAFIop+u zpWCwtcCH2Yl728f84L/vnXu93vNZx1n7XcFgC9/vabk6J0GDFrezx1n5ryEHXt/3p1JEElzB169 uXHCGok/7DnQLg6LWVMV1QvocR3KThEBigoYHa/H4ca0lc1hxoABGRgxOhdd8hKQmGw7qH3LbxFp MAIBDeQPoN5Vg2+/r8bOnbWcKHQ4pEbrS4Jc2aCRIoiICCENCGkMRZHw1AFBre2MPp0lthcC/csM dO4cFrBw1Uts2BpAKBTOQLVnZEQElNfq+HSNhNOqgAjwBiUagvJAcCVA6BJrQQ+nQ9qgMkDQDEm7 qgOiUHoQ6oBpNJnhg5VDR9h9B/jVA6ytT07s9sqi8r+WoIstc+K1f33rzVn/zSfSAGDbNv5y7im9 172xaOdz29esv3bq3CXLAOxpWlcoqiH85fY9X71+9T9u67MWwOJftPFEIGf36uvuenppwYW5gdZf 1+1dgndG/b4urP/vJMTYRK3LlVJn94bUhKM8IH8EjJ3zbC0z3wGAiEjisqM3lfiPwVBuaKiNddXY M0OGZvo1W0JEOoBXmPm1phfCKL8ywhRQhOJnII5YImx7cxCYcSh1WMwMq9WE7NxEjDs+D4OHZsHu ODIBz18SyYDfp8HrDkD6QrxrZzVWrCilXAMy0w6xfY8Lu2sDJIjgMAt0SjIjyanyfleIAppESa2G hSs96FlB2FzCKKmSEETMDAL9GGwV7Qti/v8syB8YnkG5pVDD+rUMyWE9MbNC0AyGjGDKTQR4NQlv SLb4GxAOsbLjLHxieiIS1LA0PRuA4RHokmTl1V4FaxvqSSN50Ju61WpyO2z2oxZg/eo1WO+8tfa4 qiD1dvSa8NlD/5j1YVNwBQBEZNx9df/F/XslfWJ2be8MWdm76TsDBlFMF8+Q3n2Xmn1bUjYteG3O JV9x2i9/BFIg2XLQfnzqynG5nc0pd+SNmT112UePdztzeOcLM63muxPSet123MUPT361nB286jnT 45dPGjsw3XljjD1xbt7QaXMuffDdvq3ry6qWvOgsuGjCxCHZiTckWmPmZvQYc/0pN/9r3KcRajD2 fHRN2hWTes7MjbHeERubeVef48+96NoPtua03ubOTwtir58x4pQeKXG3xNoT52bnT73i/Ifeyl/F fOBBteq5afazuzsuzMo/9eIZn3PiwY6Xmemrf16ed9bxfS/IjbHeGRufeVefE8678Ib3tmQ37ZuZ 1ZM7J5+S5Oxx63VvLM57/MoJ+SO7ZVwbb4+dmzd08pxLn36/R3u1dW32t/9x28OXHn/swKzkG2Nj kgt6jz3zkiteWX5g/WfmHJc+JFncILJPumH0TV8cqL3jeX3Ml4xOOl1VE++desacaVOyY67oesY/ b6z1+zP8dTuy7hmYdbMpe8aVM27+Mq5pnQVPnZ97xshuF6Xa7Xendhl809TrHxv/SDkfyP0v+/fF if0dsdeldpt0/qK9m9Ovmz54Wrck522x8Z3vHDpt9sx/btiX0Lr9az8oiL/2jGGn9kiKuzU2Jnlu 3tDpcy58+O3Bzfv/o4tGOyfE0ZWJ/SZe3uNRdzKabEoZsFvY9PS1U0eOyEm8Lt5qvydnyEmXX/7P z3p2pP+Ymd69/4xeUwbnzEq22wsyeoy4fvqtL4z9qZqe9qhdVBB/x8z8KX2SHLfGxiQX5A2dNufi Zxf0Y2bRtL/zhnUem2hOnnvspU8Mbd5GXjQjZmTXpAtUx/E3XfH08qRmbRSvF8zoM2lQzuxUq7Ug Ia3PbSPPuWXGI0t3pTKzuLy3/eSM+F5z1+9zjdb1atPXT9/8F5E45M4uk57u27xti1+6PO+8cb0v SLdb70pJSrtj3MzrZt733qqM5ss8e+1xOZ3NKXfkjpk1bemnT3adMTTnL03X6uiLHjzp1XJ2MD9n emLO5DFN12pu/tQrLr7v7ebHKC5IU6Ynp3a5tdd13/bneVCuHWE7XRW4D8D9rT73QaTd1330DROY +cBTn/fPsz1xzZRxI7unXZNstc5Nzcm/acKchye+2uxca06vLSsyzxudfW6W3XxXQkru7SfOvm9S e8u2puaHgti/njF0Wo+kuNti4zPvGjL9snNu+qIoYo3q75WktFiv3a7WgBls6B17cYqQ6FOIYFYV bvoojY/rzE5xmHbGAFw6ZyRGHZv3uwmufH4D5btd2PT5Trzz+jp+8Zkf8Pozq/DBGxuwblMZvt1T Qwt213OZRwdReFinTxcLZo520IwxVspNMTEA6MxYucuP1xb6sGFngPO6qZhwvAmjB5nZaRUHupJZ YvtOP/77oY55H+hYu5LBBpCbasKJY0w86QQTjs23IC028vsjIRxUNX2aSLGpGJflpJTY8KAkGwAH w8ktOxEdI5yUSbaD9gUzYFZVn82i+I+8Z8P8qm/BzGyZ1i25b0NIteSMGP/DzFTytFnoxHlux0N9 73M65X8CFvVA9oqkQWxO0GMGnfrmsf651V/uXjT5u6fmnsHMzze+Qf4yxwAha/Z6D/qqIyTlSARv oZJlOy6/8fO68kpXrls3YhVPsXXV/H+73LvXvbg0sFj5cp9venVdIFUzQhbXzqXK2y80bFqxI3QT gCUA8MEtk3POPO+Gudu96lhDg4lVokDFFsvi/zxYv31T4QuP7+cnr+9MfgB498p++edf+/Ide91i WIMhVGn4ZPmGr+iVG4u2fPX19Q8w81dEJBc/OKPLNbOeuGudnyb5gjApMijrd/+gfvL4nppVS3Y/ 9STzi1cTBRu81sw9dfImNzeYt378xVYAyyL2B89Trj0u+/QF2z03uHTqZJAVpHnU8nUL1FduKVy3 YtHsAgBLgUIVQk5lw3fO1n/f23PB1rV9Sj3eTgHdcFTvWCneuc+zvqbefg2ANQfr2z0vnJI245QH rlteLM9sCBgxhsGo2vItvXnXnj1LV93yN2b+tOjNc4MLlyT22rZn3fmlu9baC5gfKCDSX1sYM2D5 5l0PmbNGajGduq0xl6WMsO+pHebSPbESPum0JByXmWNPiOlk+S/zIvWpcy496Zq/zb/ZpaldfWwi pXav+P71J7zr1ha+c/Hn9Q++ODnOxaqSANavUEJVvgfOOG/K9v2Fg6o9gUQpqq3bl8zX/na2+82C VTy3IJ+qAeDbe2fk3nr1E3dv8NOJviBURfdL165l6geP7qxa8X3hE/OYX5lJFNJVEcPAbIYIxSih rwHUhDtcV7e9848Lt9Xsia+p96UFDMNeu3slvf1gweatO8pvA/BNu+cuF5jvO73rjP8sc11bH1Ky /GwivWIHfffS39zr1he+UrCZnyjoG+GabIfl947LPf+KJ+5YU4EJXj9bDdZk7Z7l4v37ioq//r7k 8XnM8wDoRMoYZtxBQpYBWHVgA4rFCfDZAA8EQh8CqGGep9w9sdfp768tu7lMiiyDTBKeYrH9i9fw 8PJ1S9ff+Og9WTldeqX7qifvr/ZkScOnKhyf361zTEZqZ2VxUeM5+dyFd06Ydcfbt9cEubuXTSCf hzZ/85a+ec3yjaNm/Wvusudmfw8AikHZjODNVPL9rjnXLnCVV1blNV2r6z95sfaxnetf/EFfRp/v 806vrg+kaXrI4tq1TJn3kmfzyp3aTQhn0QWEmEoGzoTgPcjDNotQxjkd9jOatBAlg00qqT6PLyUo LALCEgCwCAB+eOKUtJOPm33bOreYounSaqgm6K7d1tXvPunbtXXvf2+et/u+h2Z2rQcAEMlgdWHf Oy/4yxO1Va6cWs1wCm+lddV7L9bt2rjnxYK1/PeCQVTX3m/29b2je844/8lbttWJ8Z4AmSV7ad/S j+S/t+9ePerOb+Yuu/e4lR39/X/LZKY56q1WpRJAY9Dd3mBU47eG1uZLUlQ2KwIqgUmCIAF7jB29 h6Xh2BO7oVN2Akzqbybp3QYGQxoMza+jqsaPNcuLsH9bHfc1VOx3ufn76nqKdyjcy2HjMoUFg2FT CEM72VEDBUt3+9gfNEgYAookmG0G7Ka2ndg310zTTrEgKUWSFiQ45iv4epUfxgGrHsDQJQyEf4WM TMK0qSbk5ikkNABuFX2ygHe+akCVp2OP8k5OM1IVC4xgY3MkIEPhAEsagFVXkEsOlLK/XaNnALDZ lfLMzvaGQ+3b9vh1M1j1t9rrFUr1wal3TzVHrHUhIn7tqy1FJfu2fb/w9uktCs4JkrZ6u5See2Lf x7K5rHbv6q+vGX3j50N/mcYjHPLWbkn7z91jJgKY8ONHnWhzjh1dMH+VHQCIhST2hopd3s6UN+mH /DMvnTLx5KkDb5qYelV6cA9tWfL+ze/vTzmr8/GXPt1z3JShV587Ydhpefq/lf0/DK4qWfvn89ez g3mz+fNFa+Zs9ydMM/U+//0BZ199bFpW7DF3nBT/p66ytLZk+cdXfvL6mpEAsPD2Ezq9tGDv3evq Ukaljzj/6bEnnTp0cH7/QeeM6XJLQvWarkVfvnbPmDtXdWdmevXVr89dW8NnqX1P+3ToOVeNTUsS /Wcfm3Z5emgP71n0XsFnd302AgBSs1LK+40e+UzvIYOeGnrcgJ3tdckrVz7ba11Rw+1llgGxOVPv uCqhW+7g00/sOeyC3vrjomjNyD1rFs3+y1qOB3IYRHowUOFYutuTH3vcnBcGnnnW6NsvGTdySpb+ NtdtzP/6qxV/3szc7qsgf3qV5e8vfn/1V7vFLKPrKUsGnnvjiUOH9xh41TD1+uT6zZ0KP3vhthMf 29U7+9w3ay8en/HkMXF1q6uWvXPBl3O/yedPzknzwGbSAAAgAElEQVT45LuN1+yRnZIy+05++q1/ XPeJNSlx1mNzxv0p1encZU/ov21qwTNnd7GUXfLy1eOq3jx3zqjnF5Y/WGzqk5Q19aZrc0blH3Pr 9MwJo+KrVrpXvTdr2RtvnM3MZJYKg0LBqsrCnhtkV3vPs26bM2D0pEH3/6n3qX3Vir01VVvOevnv b4wNnz6svvLGwgvW1dIZlv4zPhx+1uVj8hLjBlw6OvmqtNAedddX797z+gOLhgKAoSoMhg5mScaP 9Ta67jEXVwe72Idf9PKIcy8de+H5Jw0/rUfss+aqjT1XfvLJXdfNr+7UXv+9cPobE1/+tupvlTFD kHvqzZdm5A/of+vktOmDLeW7a5a9ee37z8yb1tFLoXLenJhn3lt/43fFttNj+k7/6MTzLh/XtXv2 gEsm97koS9utVC168e6/XTp/DBFJMlgHEGLili8mhsoADAI03ZAMAB/e9HLO16sLb99v6erscdrN VzkSO/W/dPrAsSdkBN4NFK2Y9tUzj12d/eA3r/3rulET++UkvWu2ZPkGz7zp1qH9sk5WsyqWAPg/ 9s47vKoqa+PvOufcnt4LoYTeawSkCCgiiAooqBRBLDAyMGIDxxmNOoNtREVRYFRABQUUlKaiEnoN vQWSQBLS+83t95T1/XGTkJAQcEZk5pv8nofnIfe0vfdp66y91rvw5eQXb/rnj9mvZWrN4uKGPPJi 51vv6DlqZN+EEZ2D39MXHO969McN79z/zxPtAYBQda/a4oQWQw/2Gv/YiAF33trtuaGRM6I9F/js 3nXPrc4MfTB24NSPWt867KZpE4bedG9rdYl4cW/34uwjU8aeYj8ArGlQGdCISaNekE16018sgVJX f0HqwoLU5aY+nbo90jvyhQCjqcyvVdfdTe68bz0RKcwsrFp7ZOJJu3GS1vzeXV0nz7ndEhTY9YV7 okd21helFB3a/Oj2QynDfAOmB0Hm8rKSuBJLt/zuE1+Y0G3ALV1njUmY2JrycnJP7Zm56tW3q85h HXfM2cS7whZ+efLF/UUB9xh6TPo84f6Hb77nlnY9J7V3zzdm7+uXvvnjZ0av5YhrvQb+k2nfPcQm GIQCAvn0rhSZUG/wc+Ub+fJlggidJEIUfFGMgiggrlUw3T2hM+6b1APNW4b8xxpXqqKhotSFokP5 2Lk2FSve3svvvbIVP32bgotnirAzrRhHK6yCV1OoiUWiDkEWCjPoACZEmvTUNsyANsFG6Csz/U5c dGPjIQc27FNwJle+5J0CoBMJ7ZvrERMuQJAEGC2EDu0kGPT1BzWLgoAerc1o00oHSUeQWIRBT2gV T2jX3OCr63gNBJBJE3U+z5UPAok+hXyfNhcQwHqIDTj1CYCgF/Lado+ruNaxvRo3No4jrVQUiXUg s6ITRc+/sguvomLs4hf27jj5x0UlR5P/mrbjq5nz9lecAwJKf+vm1oFlVi9u6WMD1tdeoIEFPud2 me4EkEYiEyAIIW0TdvRKXPTex32oAAC+XT1odWZuab9lBzElpOddq+5dkbh8FpHnIIC197f89FxB 1tD9uUWdCzeeCUCXA2XnOXSvf4tWp0fNef6Ht+6MyAeAp1PwyzNdjJsycspnHz1wrCuArYfTc285 mGUaHNxrxLL7ly14f0442QBgB89c6R1a1PTb0xmPU3FyB6BX9kWPEO+Av3bz3VM3/fB0/1QAeC37 5HdFt/XRGQuUW3WBBgaAjuM+tAP4ANiK/av+ccUhKdMZHMXGmCWdEgafeW/pk7t60Ww57Qjw5QOd vjiTfmrsttKSrj//83AYFvbIAgOSIcAVNujRRXuXP/wJEWnbAOx4tu3y/Z8WDC04e7LDuXKYAdQ7 J/7z3mMdfj5hG4+o/id6THvj7xsfjkgFgKSkxFW2l95ttfBo5tOpm1b0B3B6xPzjJ0+ltFqQuzt9 ftqGj2c9f+TssR05+mHGdkM2Tnx57mryTU3Lr07tWSEQqSSISpNewyoWP3KHg/kty9i2r9930ebX LG78o08e+vjhNUTPaXOBgh+mt/lH2jf5nS7s3H7fO3vv+rKfKjM0CMaItqnNx8ydt+XFXvsBYA8n 5rnuzv7qyM/Wv+Hc8XhfD9abstxivBMmufuYxzZ9PzMhDQCSc1Z8U3zbczpLIQZK/g3fooLOIkcN efTj9774w4eDKz23nD7ntXtu+zB6e+nBkd//cnAggC9rbuNSwJz+eOCIQV89WOgNDWg9atbTB96+ ZyMAzAGKVk9s+nbq5vJPzv+0eUwS84bBdHUv1oEjyd23p2K0Lq7/riEvLXt90a2UAwDHjvGm4PHt Qz/YXvIa5x/sxsy7Jic0v9ruqrELQmSWXYjzi2+9ddg7c5MSP3m+5K2VKSWbFzz6evHi3YqzmZCb 7IhUpv9ptNPwyWEPSIAhOMKx4r0VFQDAvNQ4scef704r8W8Xe+/Uv7y1cuang4mUvQCYV7//aI9p IevOH3xix/rto5k55eNZg8AQhOA2N+3s+MKS974YSHkA8ONnt6/Jyi/pt/QATw3qMWLN2C9fXTqL yHMIwOqxTT9NzXUO3ZtX1Llk3bFAdOhaZ4ohcVtRrTGcFKn0/OCH3OkVlo7OFoOmvJ40t8cx35JD 4gUEnjDERj5/15PTflg4oUcmADz7Ofa/2Mtv7XlHee9TJ1J7AVgNeMFMon/TbkfaP/qPxE1PxJ4F gL1Azltj2sslP55fVliQds+dK3gjAOvlbdp0Jr3fgTT5Tku3QRuHzJ7/9id3UCkA8ILei3Otpzt/ e/7c8Mx1izoB2HrNJ+w/FE3TVIMoaKJAPk+KpoI1lSBIIKFSI4s1MHO9GlgCGBKBoQFGQRK6DWyC wUNbIyrWH6J4wyNt6sXpUpBxthinjuZBy5URfU7FQXsZTohlJIDQngLQPSgApxQHX7ApxADOl3tQ 5ixDgdsDgYALFW7efA5wil44XD6vnkNRcSjTjegQCW2b65Ger6HC5gUBUDQg185wyICh8tFltWpQ 1bpB7wzAIADBfgSBAbYLEDyCT1xUAkKDBeh1BKf36upUXlZIcREEAjQPgeVKDxYArdIZ6SYVDeW2 SYIAnST8pjGTN9bAsrh9o861VXbz5rUKn/JZwZwfU2y9CL4vQVHv7+0+fdGSg++NX5/9zrjqdUVo RDROPfq3IStSMg/025Oy9c6P3lux8/kV/DEQDeA66oyQjsS4W/aZbcdes5UX1AhyF0AaOYwmVy4A +IRhBdJLXDqoN1wfV6029kGP4Z/pOYIkyUE68ewsomojs0Oc4jCapArNWhEsOvP0RA+7AazbsLiV ed+PT/eYOHH8/SVFJRHMTLvTj/R1KKyT7HYTM4S5/S8k2PzaKAZL671VxhUAEL3veWLKoMUR+eU/ mQL0GQBcbUJw8kRh+X0HP3xp9qhpcy3+zuJ9g2e8XLT0533fNvcZjl565tqHZPa7P2Qw80cfzLkn etmMqWNGjbq7tdPpMi/Pc/ilO8VI1aLYVVtpdWyRKOrcnXt3OFczGLh1x+blhEInZJvRVoIrerCy Us72yBMDQtkY9738y3Q7gFAA1OTut3l0/yYpAc5cktSC9nuYTUTk4lMLN6U+/FLvNSe/m7LkLA3z BiVc7D5i8rtV03WXQSr5/M0pz38SXqq6u1VYOhR3dKaeIqJgVOpwHBbjyk2cn6OvSIk/XkBNBytK OQRRsBil3Fsf6Zm778Wq3b3E5pBVhaRWQNBcpsp4HUe7UD5xuqTsnoML/vz0mGlzA4y2on2DZ2wv Wfrzga+bA98AkGnmlcdbIJ3csmXY+cE1psWp5RvWBbcH7tudrNyTm5xcOSVy6fvFHQjt+HvfxxVC 7ejwb5sbUrInFUBY5WI+H9Q83085XFRhT41ftwPRAK7osaziwvGUbhWGADMHdUuuMq4Anwf6ncRR 30WeTD9niRAL8CuFZgJB2a3C+cy+1IMDvh7z6JwZzzz/9amzGekpvaaWJM385/MAmIjcH/NqE9dT WffM7MRgq7M0wRbYryQhLGZrrXGica6kuZ1++H5R7kOOEzt7pmGGv6YqDAhkkrhswAA4v6haedK9 XuMXKTmiKMohopRS817t3FJwGo+KFZrNHiaVF1w1+ObAmwlRr/3z+NwUV3i7preNeunrD8f81PGj qjb1kgFsObW6vX7N3je7TJ48aWRhYWE0IND2jFNdKrxWvWJ3mphZ+O7VUQAkspik/NF/iClNeuLS MfpHuE79FMGpP+cUdLQm/xKM8bfWmSYsK8nrk6+P0kWR/5GjL7QVUHkNjFhTQhZdwBmzPeM+kVzt mHnbf3uwfmCgV/YzC4WiJCqqrFx672kKmCujea748iUIosgCGP5BBho4qCVuvjUegUH/eXJyHo+C 4gInUk4XQEl2QDjvRVZZEbIlFwKhR5HghgCCDgJc0FCmKXCpKjGAcLOE9v4BWr7TSy6vL8jcwQpl 2t2sJ5/MggJfQHpEoICRff3RvIkOZzMUbN5lRaFdAcA4dMqJQJMJreJE5BWp2HnAA49Sd2wJgEcD yuyAaBer7VoCweMQUFbqhiI3HJReRY7dTZ4QP5hFAZoHQKVJobgIqoegeIEszQH5CpcxA5B0otff n4qAjN8sxOjGGljtOig6/OCQ4BQdslxdwdoSGsiiUEgSoNNLoqQTqJmbOYqALVfaVbe/bM1Z/lDr 9zPXZ3bL27Xij8PntjsxjEirfVozLv33t+g5ERDcoWDKswt/fH9W6xoeOAUu204k3tWr1uoMkOMy Y5w1YoIAvmxi2KsyAUysqaRXfab48kd7dJn//okXTuSrCaKOi5z2cruqamqA4I1RKRySKDDwuGiz fhxCZoNTadq67PImf7hsWz6A/JMnHwG9+Qh2fjj+s/wv9hl3pxy6N/m7Y3+3OmAIbtH59OjbH90Y 1bP/d9+/NuVXyUxcSBxkfHpEu/Hrj9lnWllvVGVbkdvp9OiI9aKqmAhUa36bAWiKXOsTkBQmhkYC qeRpoBx9bo4tij1eve3sV5O3nZPvM+h8J7XY7cInW9N0DPgF6DxBWwAdABd1nGH/6qnBy4+n7rhr f0VQ8y6jx6ya+dKAYzsTG+7T2XS7v+zyhHDJwbjkr/dvMOik6nP18sc7SNA4SB9sK6iwagEwusuh gTUwKeWXn2v2qXtIigBfNqC6Z/7YT/NWJxv2nE0efeC7I69ZnWQIju98ctTQRzfE9Ru4fkPiQxev Nuascp1P6NgWIUV80KWhtNCfmYX3b2tdvczfDzh1vjxIc7sDtZIdcTtXbN1q0F3SBnpxyV5B1LQQ c5A9pbDcedXK8sxML99sCCZdsIpmLYqwr/by2YnflgPYixMngE9eEn9NYMJdr2+4eDKv37Ml21Jn F534buTqQ+p4ryG0ouCFBTu/1H+5+pblC/b61jTVe52cL2ST1yUHC6GhJTladB2vdkSnroXQsp2C Whiyw4nqvmoa4Lz8XmVNA0nQNKr9WHEDYBBr2lV7xhdXm/5w/6xpSXmWYQG97vpixFN/WdqRqJaH 9qvHe7ac88aBOfszlKFkFEtcFWUVqqoqfoIc5WGTINSabWFmjcl+mY+xT89Il7SrtIQLrHFGT3Gd hAVOGiT9cfaeKHbZjXmH//liIZQ5VffP1n2ZEASYmHRGTaeFbPOFkvxXG1hAuMvrFbNEQVCYIdXK ULuqagWDVRVRzULptjtaU/eEWBiMNzRRtQ5eWUVBmg0XDxch7VAuHywqonaOALRV/WHUSbAKMkrh hQCgCfzQFv7IhQs7bSXk1Hz2RLfAAL4pzJ/O2px00e2Ey8toGWbA0Fb+pBcE/Jhmxck8N5iB0ABC y1gBRqOI+BhGZLCEQrviM8psGn7Y4YROB8iV8g06kXzFmC8LTlc0DSdOe9EuVkLreAEAwWkTkJbm xulMD+RrVBTJdXmxs7gcA0KCYGDJZ6xVBhxoKnBadiJTdF458o4BURS8mqK7CDT//yLTMMcRizcz /AWPcOh4Tidm3kBEHDDtUDGAZwCwLCu6+zvGvvBLWsVcBQ1/RT00Z8KOg6ffX7Ly+KkXjiR9Nb1P y+gcoLDGGWquScyKwEReT/1992qioGnX/gogaEJoC8u/7SZjQbiiIWFnSeMjTwaNHLvsueSikFta 3DL+7RkPj1k7pFNhdutWw72vDzfPfOUQvexUNQLOsSRCZkWT2Ga96lNgwBMry5j5zf0r5qz4euOe hO/2pncwlh3uVXD+yF+zsoqGT23e/ikAp6+1H9+nW3tv2puXWBTSK+22Bx5545UJ3Q6uWdOhfISj Y8Sb68988a3Cv0JFuuHTIEmskN5PMfq33eXnPrNbq/GxowEMTSOjWXespNJ9w8zCvBFNuuZ4EKJj h1CYcqDb6W1jggHU58G61ArJqZEAjULa5gXoylbAXW4Hah5Lg8msq4BOyhScugYbzQCoxgv65qfW lDLzvINfPf3Zym/2J2w6eL6DsSQ5oSDtyMs5OcV3PB7f7ikA5xociHpwuTx6AhMEsc4TyqGCJZ2i kiBoQljHjADO+YplR62HiqZp8LfoiiTl6oKkRMR/76eXWWOBndZ/KfuwoX0D2Htxz/yj238+1Gn5 +gM90vPL20un1g857Wlyt+cPL85byrwEWFPvk9gEWRUEUgBIOpNU99xYHXoAImDwBpuhFP2Wjb8M ZhaeG95m1PfH7X9QYoceaDty+nvvDq4dgM682PxApxee2J1puC+0930fTZ485osprXQZcTff7Fp4 d8ADiXuFBYV1Z1vqUFxYIbCq6UGChvqcwEXbWCSdKpgjXMbAqE0m+9nTKoTq8dEAFkWBDUZpx/b/ euPKl5G+5K09GQa9aHe62fhrS6LExQXSyHs7oUv3aFz5Sf374/GqyMuuwNF92XBvs8KvEDAKIEFH fFZXQcWiB8WCG1Vhm3qIiFctaGcywcyETNlRvSzN5oZBJMpxKOxWmIiAMKOOww16kiUVRgNVF2Eu szHO5yqIjiBk5SkorpHnReRTX5fdQESAhC5tdQgOI5QWg0+ky1RUVi0UAIGA7GIZ3/ziRLdsHcxG EfklKk6cc6OogRqFl6Mx42SpA7KL0N7PDD9Nz2QVyaEqyIITp8QKuKA0lNYAo0Gy6TQx/bf01t5Q A4uIlC/ub7Z/e0GJNX/PxmF/XDt0BVAtzFn1wNSESgFR4Spp59Qx0fvL30YuSytLujkp5fu7vynw XtS0Sw9VIvI+Fu9XIok6MeXw6bbMTJUP8GoKVDGyzMbB/m38T/g361RH2+pG4JUDOeOn3c1T7egu +3c9m/jG3E/HtA8oqVpecbPJyNVGYZIaHhNxQUivsJgKzzW7vI8fzP9rx9MX3AnRfYbuvt2UXHow pazvtAWbHOj3xq4lE2kdgHW5G54Om/3ERy/9nLXjkYNH7h+KazSwmBOFv436uM8FJSK0WdO+876Z N+HHb+b5lt38x7aCxwsjBF82zm8xLk1ahGXRMVUxRw84VZC873WqIfFRRemGxThBiwEA217o1+Hr I9ZZFQGdM29tbf8lOfWXIYv+8flkZn6vTuapBhbZF3/Wr1sT67uHzucLcpTf4NnvfLpmzpCzdRpT fhZrJ8Tg+U+nxl9j8zlp8dNhJ4qkvo+//31FbOe3d7/7Na0FsDZt7TMRz/3pg1e2Ze6atP9A5q1o 0MBikhWxloHPzPSnTv7tmAJEMb59LhFpC4a3utS1ItDNXaNLhENFxZIWZ5g4/+OP3hnXLefyPZdW HELGvdemPt2sZUSmeMJLnJXSnJkNVGMK7csv/xa3d1fZkMA2nU8COCYoLIuQ4SaDHpVTrQAAsYKA 2t64je893XObLarpy2kjjn784lMHARxkTtYtvH9S3yXrUz7POXvwgc+XezZNmeyXXbVNTRHhIXe2 rHj/pPMCXUgbGug42xRALd3PXb/s7aAKYoAW3CZrNFDxsXj9IpVXPhrf65ejuc8W6bs4u942/rWk OV3rXEfWjz6PuuBUEmyWHgWzHpq0+K8P9cr6a+WyUhv0rHGdjzmNBNHurP01sma/Fl5a5G6ui4rM t0W0rJMVReOgJt4RlEHpfghpe+/2jF/+vLi+NhctfBJ7Fj75L/b4P4uYKEtxSjpV4NJ0+DURFe2P Ufd1Rucukf8xxhUzoyzfhsz9hXxwTw6OXiyg1nIAWpM/HKRCgUZ2eFEueCCAIIHgDx0UMDJEJ0SZ UAA3vFAhgBCkF6GQQtsLy+H0MjF85X5SS9xkkgCAcKFQYSKfA6rYqmL9bgcHB0koKlaoyKbU8kwx A37+jNsGiejfyQTRCMguUPNoCd9sZbY6LkllaMw4n+9FRp4MnY7gVSu1wclngIkCgcFQqqcQ60fR gNN2BzIVFyyaDqJHgItUVJAXCmp/lVQ9IKjG3zodlcXEmX/T2O0bHp03Ye7De28KEjdLRQcSVs2b N/eRhXta1dSDKdr2XLjN5Y6WWSJJFK5q0t76l405t7ULXxAv5JWczMzvoDJqvX1uHxCx29/gLa7Y 88WY4XO/7JfEPsFGZpZWJ97d6sDFvIcypThd82ZxP/70OK4S3EtgEtRTh8quuyyEYNbLelYVOPLC V6/Z1JSZiU+t1i+aNrTXpnN8u92jGXWixETEEdHx25siu8yaf2D0mDd2danax7EFE5r8uHTRMytW 7X11y7bimKaZ6/2/++zTWStef2Nh1hef9aoa9+iRbaxBAVKRTtRUb9X4JCYKf3vq4bixc95tWjVm 9bZTktw6b4XkqrgYv7mEAwBg//IZoRtOKHcezeaOBGKd9Ns8ppp3S9jfUipLc+VtH5kwfemIU6d8 GYfMTPP/OKLzA2MnPTLwj5+1AICLHw8LeXftmVlp7tCWQbdMW/zaH/q/0MZkTXEc+frxwbM39q/a p2Y0qyZWFLDLmFnoNQJAyHPHCmL9/LcHVRyM2PPLD9OfeHNTVNX66xKnBM26/44Hhkx49fbVq+u+ /K4EEWlBF38JXvvZx7NXvvHGB4d+XNW9avxbjvYrD/HTF+tEVfVAaNALqSoO45FtW0aOSlzXnJmJ mYV1swf12VqgDXdJYWV9hvbb7VvzkmPJqEKIfemDzOYmwx5T2d74dV989+iMD36u1p1a/fzY8Gn3 j3zololvDmBmYd2T3YICTJF9IrtMalGl9XQ58d36HmghWS94S/bddtucdQOr9K3KV8wN3rrwo8c/ X7XlrXU/FHYlIsVPdRdbRIeaeTqt98s/Ish3zlINr7x5oE+Z1d5OreExOb/nm16fz39v0eb333li xfHyYN/Y9ZJbR5gLLUbYmTTR7oUIRGhGsKzTnEK599JUH8bvLI/3C/wlUj0rnjy6c9oDf/s2znc8 ph/nPdjusz3OCQ4K4xa3Dd9ClaW4rgcH3r49bvnO0rln3U1i24x89OU9H9xXb+B4oMWo6JhlwVEQ tP/gwXhmFpmTpNXP39Nh0zncWWLXAkmsKlzsyyIsKczr9uWsDwamVmqXVaydEXoov3zcKZt/s+gm 0duHv9SlGPW8l8Jj4rc117LKSrN3TRr8zNe9q64/TkqUXpkybMCoB6ZPuvX5n0OZx4p9m4e205kT Eh5fvMF8vcboetP7Dl2arMpZ1+y9YiAiwo/HPZSALr1iIdbjAP29YQAOuxfntubi9N/OIvvLAiq+ YIdLU5EiWpGkz0eyVAwnZBCo0rgS0IoDMEyORl8tDOXwYCcXIoWtkKEhWNLh9pBwvicyHJ3DzMyV 3+MEoNghY1emHTsy7Ch1yjVnCJBXptCFbC95FQ16ieoMa5hZjzYxRggioHp85YpaRQARlrrPf4EA CAyvqoHAEAgIN+u4TzM/HpMQgGEd/NE6yAjzVc4BE8PmUZEvuylHcKKUfN67mgcUQQiADrFsQnPN DzFsRgD0gKakD7tf/5tWXrnhatDUPbE86bW7X89ftD342NlvJ2x452TnqDcKd0h6qTwsJMRy52PL u10sVgcIcT33B0eGHyAivjh/bIP7fHrj0u1n+kxYmnsk93mrUruw7X2vzdm7+czLC388dWzu3s9e W/LQmle+FwRTXvOYkOBgs9QvrcDcM6zbsBXRQ6eso8tK79REYxBYhZa7o+13ry95BnUz3SioxU0F wz/dv5m+6vdvuRz9yCY0nTEto/OSp7ZeTD01/YdP33wv6p9/3h5s1AL1HgwoU0xNNDDDXmJhZsLn Dx1JuXD+w6+Sd87euyT7g/DIZj8qznLv5Pk/9cstFfoH3dRzedTQB09EjY2uaLfmoXXnsg+9vO87 93vR6+b9EBQUWty1xZ9b2q3ee+xhvS8ktGmx4xyArZHno7d9s/uDVJNDnz2343MATlzeTqJE7dMZ A3a2DTp49nR60iOP9O0WEhMbm/vEaxvbW0u0Pk69ToTHZQxUi00AwNcw1dEQ/Z/skvHgnsNvLfrl zLy09W/OH7L1nUFBpoCMFuGBQWaLaXgh2pniBmmpzJzx/G0x9x3Kke81tB7244THJnzd7dbppeN+ 3r4ge9OZRcd+WvHk2OUXU9dMjsvRB8eXtjR5srLsF25dPX3gc2Htxu6dtuT8qj+OiFtZ4jrbZfe+ ZVPXZibFB4bG7DY4y5S/Lt/YvcQROEhs0/mL/O7Y3sKngtRgvxhMvpfZkoxOP7+6Lj03+aXdq+e/ H/1V4o+hQaEl3Zq/39paId/jCuub1r9ts5113WU1xpwlzS97R+8DK08tCV00Y4+JPVIwqcMzHH7t ghKGLXh4VMfD318WJG+SQEQjPFvndP24+Ov09od3LP7TN2c3tA8MiUg2eWx4ddX23oWOkL7mzgnv Adjr0RluYubVkiouAzAHNSPmK+k7+4mM+7bteWfxzlOvHF354ttRK55f728JKhv0l2VdCos9d5ra Df4pZsS4pJPfP4cRfcIPHy+sOHbwwJrR//xTkmI0Gs91iu8XB1kbkm2jaJKoelqybafOWzrs3Dr6 SNrmKU+PPRoZEhZ9RC8p+r9uSBl0Ro2KC7vpOtcAACAASURBVI7p9MHYxww5RL3k6d0jM/wFKw6t efvxwCZ9mrXuN3kzEZ288OagDTluV7ctJ9dNSCpODgwMjdkRFRYiRhv59myXXxe/Lnd+MmrcTT8e nV+jQ8K1idxeC8wQnhp4/OH96bY7pZj4jJLdC+LCQp59IjQ4gHyHAgX2ejAr8E+LfsLIQ3kdPrzr 53OF527a891Hb8dsfHuLRZR1Fg39y52GeFXwKKKtzAJAguwFk14z2XMt3kMrXryl9ce3+Pv75/Z/ bm3HwmzrXRTV70STVn1WJxK5X7pkGFf364lJpuT0jMD3ViXvfPbY1zmLIta8sCnIYCpqM+m9GLDp rjI/c16bOO8eoKWmCVtfJUJfQfO7A8DJ32psfk/CwzvkzZjy9UVRoAazyQCfA8Vs0mHwra2oc+dw NBDB8buhKirOnSnG3l2ZKN9ThgCnBA9pyBddxGB4oMKD2q8shs+giFKN8BdE6CQ9AlQdrOStvhD0 AiHcLMFiAEJdZhbhIA0MA4noEGbmmGCBslwyp+S6Iau+6HECISZEx33b6CkiTI+sYgW7TjpRVsOT pWrEXqdImkaVwvgEj0rwqFcOhar6McIi4e6OgdQ0TAdmQDERuvkR9mY5eE+ujTx8ZV8LNfCXH3Ro pQWgiWqGkQUIAGQwyg0KF4nKcaL2JfgNueEGFgAMfn592qcv3P7klu0Zd58vyhqdUVz0CMvkX2YX HMbINsfDesa9FZUw7Nvv5956lp6v3IjgAsimQqvjPSIa7D7x9u1LM3OKE5LycQvjUhApxUxzJi1M /BCrVmamWyvGXcgoHKeHGpxvNzo5sv2R+HatngvsOvHbzQ9HNBx7IpAMVmxcdLiZ11dM+vILRgTo sObAYUCRwbCBye2pk0XFHiJUgLVa01sqCxoYDhDpBEljoocc+xJ7v638UlR2MPX8A9nFyp88kU3z Ilt1++7e2KIL+0/l3usMKOU8wBTz0OeO9DnxC2WJs45kZE9OtTlmyYKfUGxucSq6e8ILzW55cN2a cVRKAHjX1C8cf95dklaaPzElq/xRt0ewXNCHlkW2TvipVY8Hlhmb3nwYAEwuF1CS5W/zj9fJpogr Pp0evk88XlDa8slNx8v/cCIz9W6napaEkJZHmt7UZt4geXeLXUXcu0WU0wKAQOwCYCMNtc4hC6IG kB2Aw6BdOeuMKFHj1R3W2bhJ2e5018SzmTmjXZoWVIYwmxjVaWfLlj3/uW/Z5L1rZt3WftvRkskF gb1zeg4b9f5rtwWUvAagZMGEH/ed3rTyu6y9Yw5t/va+ROaFoUQVC8Z3/jB3X174mZwT94jxzVoo 3ryNvf924ELSk+3mWJLV46nZ5+/JdLjmuEQzSnQtU0O6dH57wBOjVs5qTZ69S6drYNgFkJP1tWNX BIIXBBvIZ6AQTZN584TljjcOFacW50w4l2V93OGVzBcMoaXRbXpvbtVj/LLOM3sd+2YWYPCKDMAB QFGIK+txkkfUR+b1GTR4vvvM5nbnSssfyitXwlyxbS7E9bsp8bbxg5eNqxSeJVXWANgZ5BQU35gO eePYqa8fb/PkypPapHNZ5+/MdriHOfR+imRscyaibZeX75330BoiUlbN7mEASaKq6hVcIR6HaLDC C1p9ZWNDye7zxVPOZVVMZc1gzBeiL4Td3Hl+TP9Hvtwys/kFABi+6OTZg3nd/mI4XzTzSOrJu1jw l4rFpmndOzf9Sji8rU9KmdaUyZdIcPtf1mek5fWdHZBcNPFcXvrIizb33U7JrAoBHc61GNhtruGW mWufJXIAwNA+TTfmUG63HWcPjVQCu8YrJJ8CcLLFc9vyTyUmvEpJ5WfPXcy+P8PpeNZOeqEsotWx pj0S5g4b1v+bxD6hPlkHElUwbABc5lr3ah4zC14i2HDZVLSmeTUADhCZJFY0ACwIcENlG0NV8PIg fX7unk52TfNw9vEolyQ8S3TpecGaJui8ri3NNOwj6lWQOq/7x7IlwLXnXPaUCznuJ+zBMWXRrbpt ur2395P01DN35/mVer8th1kWvSrI6Axt0nPnLe1c+08eOXf/edk1PjXfKEd3uXVjizYJH+x6/94j 9EH1BegGYGNABgAavM1d9EbbxV5D8MUTWcUTzmaVP+ImyVSsRRSHt+zyfYdufT7d8daIdEycFCEK ml4jEzQFv5uI8/WgfZvI5GOnc+7zetUGZb0JQPvOUeg9sAV0uuuYiX6NOF0K9iSlI+mHVOQV2UAq oJckaNDgRV1jwwgR4WyChzSUwo0cwY0QVY9S1YOyGsYVAJTJCvZZrQjXBJwu95BcqQEW7afDLTEB CA5lxHsVsjlUXCj1fVvpRULPZkbq1cIA0ayiabQO1nIDdqdUZmsRUFiu0JEUmf0tRjLqBcgeFWdS VRTZGi6iLQhA344mNA3XQXGRT9uKAMnA6BBkRqbdjXSr+qu/zo0Q0UUNRivFAhUMd+WLhxgIFfWF 0f0jduODq+7mV/EfYWABwNS/b7nInLT45Udf/3Ltuh3mCieL5sAINWHIKOec+bNtvYhkevMhAECT 2WvcWITnREk0ieB6Lc7OT2+5OKMdpuySND+3V64VSDp4RqKdmdcsmTvuh89WJlnsVrtEAeFa5zse cUx+bXzF5UWj68PhZ96pQ+kQNKADIWmKNzAHxV59qaDphL6sepylqDnt+LhiUF/7kIi/8DhNtfpR HpSRraqWSQxNsJukQgDok7g/e/OCBW8UfT5/SX65VR/UupP3wcnzyl+aslyZNn7bmkIDK0t8OU1o +cZ5KzOvfHnczZsLSo6aFQRQ215DnD8vn1de0zNH/T+1MfOaZbNHb/n7mh1+hRWaGB7bUu47drz1 82cfchxdNAUA0LeiY177yO/vv2DyoxYvdSlJTqy/zzR4m8LMSeXThh66UH7Y3+sKpI63PeR4ZP4j Vvc/hhlL9lgsUrjBBsCrqsrfSDW+o2exVpB5lFyYqpA0ilnQjC3R4BcFjTvtZeaf1rw8bs97XyYF FDrtkiWkpXrLmOcrPp3T30YrX8H8sX0vFJZ4H9QntPTuMwyvPlborBUVU+9u+2fD6bP/kASPIxG+ J9XMNvduPZm78mhGud4U6B/gtUXmFgPA4HdTMpIXL35z+beLlhQWpBjLDAa07TncNejxl8oTB/ti uNyZUdkSxLtY1qvm7EttJyJeOLbDeibsgqpaq84BjVhRwcxfvTt79PcLP9vhV2jTxPCYePmW4feU L0mc6Dz80UQAgMcaUiypuFdiguQXVkxEPKpb84UahM90rQcXPNI6W/pg1d6/ldntuphWfTw3j51e +v7UXtWGgL7EP5003K6DqjQNRPH+yt/vW3IuJXXBzFde2bj9vZwd54yKLoDbDh7hnHbL8+XjupPK zPT6rSEdyBLqphZdz9YX51bdx1lpHmbe9P6sETu+XLfN/2wJCRFdentmvPBo2bRevWqVwGLmbUum DT18IbfMX0MoxXTv6/5+9XRr7/a3+0slojGm1FtQNW4AzqQumPnKi98lLci/mGZQLf7cpudA1xOj /1E2btyla/nejw6eT5zQ+8kzBa4Xyyx+bIqOqo6n6Jh4MJ9Xr174zOdvrPwy77QJRjN6DBnqnPXB PGtN6QY3Gw5pOuFmzSu58oAasUsvqQo++4gIK73u2vdqYUhurqxYJjM0welvLiQi7ZEmeIU92tt6 QS7FS9s87s/9/qiy1wSo8Mp1Hi+kKuwM8fiul9Z/PlKUnLx4oXXWwpVZxReNQbEdlEGT55YvfvwN z1OPxn+jq9AgB8FWlluYqkIcKpPZufSbjdY/j2m/cnW+y4zAaO474sGKFYkTK+iLxKox1x5pgtc1 4H2joFaPS/icszZmXvPu7ME/Ll1z3O9cCQsh0R3l8RPfsyZOi3ECwJ6PkiM0j7eJrln8WTdFXc88 gOtObHu/9cdO0WwAza+0DjMQGxWAu0d1REhIw+VVfg+KipzYuiUNO345B7vNAxJ803FOn51cJ7bI BAk3qaFoqprhIQ3JUgnShQrkkB0qGN7KbyQTJISRHl5J4xMlDtLKNSjqJc+tKDAgaAQI0CsiS3Qp yooAGHUEQROh2hmaQYbOlxtdPTXhVTRsPWKn7FwZTaN1KCxX+HSWh1zehid0LDqJm0gmUl2XtGA1 haC6CGYQYo0mLd3q/lXztQSgpRaA5qoZKhgyMXQQfGNBgCYgq3VzU4NVQ/4Vbrzfs5FGGvmPpejL qTHjnvn2s5PBA7U7X136+LLRwRk3uk2N/H4ws/DMwCaPf53q/4J5xMwXTn/yxBf/zZpYCxakGooz 0lZl5ZTec6VZQkkUeOQ9HenusZ1u+NRgZnopNm84jWNHcuFy1Q4kr4Iv+yuUjRiiRCFAEyGAcFKy Yp9UXBU3Dgagh4AeCEEXiwVKgKodKLfRaVcFcY29GUUBncLNaBFsQE65qh0qspFHqfI+ETo3N/Dg dhYKM0tIL3Xjh2NOzi+Vqb42VtpdVylQ5CPELPHELqEUbBJRqVAEr1UAfNvzwWKHllRQKl7rmWH4 pgb7yeGI0YxwVZbCUCsD+SFAk3sa3g/9s+OZwTT4N/XQ/sd4sBpppJH/POz5550BXfusaNJifMrS UUGZy250gxr5nSHWNx1wIiYy4QVX5xHr/5uNKwCYObOV/PmSnK15BeIIr6zWSSBhBkJCLNSha8wN N67ysiuw7qvjfOJUHqkq12tcGSCiCVsQrOpRLsrIIjtcpKJA8MCkmeAQFBQKnmrjqno7FhErmOBn JEAQKdJPr6W5RNFdQ8rArWo4mu/EyUIXZGiCWktVkpGS5aESq4IAk4jCCgXlDrVe48q3OsGsE9jP IJBAQLlbY7dc/1ShzaOhqJy1IAME1U1gn36pT5hUARVVqL8y24DhzzoEQIKbNMhgiDVGgwQokZF0 vD8GXbsuxDXSaGA10kgjV6TF7G3lzLyciDRaeKNb08jvDRGYecceAHv/240rwDdVunn14WPBwc6s gmJby3pCeBET44/IyGuTJ7le5OdUYO2qY3ziZB4pqs+6qPIuEXwBfAIILTR/tFX9oWMBqsYwSCLO CGU4IpbgomCCm1QugvMyu4d9wfHkRphihuxRUeDxkoxLcU1BBj3H+Utk1gnIqZCR66irvenVGFkl MgDFl/knUL3eKQKhRZSeb4m3UGRl6a+LhQrtSLcju8JbJ8hWVjXaftHGkhKiRRtJEEAQAHicwGmH W8uQL+/P1REAeMDQVbrQapRzhRTGNr9g6ezlkk2/BY0GViONNNIg/x9erI3861S+eH7zl8+NIiww 4Hygf+n5ojKppcZqLSV3SSRu0jwEZovuhrmvyss92LTuNA4dzIbKDIEIgdDBX9NBJkYZeeCBCokE +EMPiQkaGHoQwlgPAQQ7ZNh94ZK1+qEjERIEeKHgmFaOHKsbMlQqJDdplSacWRLQN9wfHQPMEAgo tWi8Oa+Ych21k4eNIiE+yIxgf4ntLg1pZS5yqHWDz4ONIoa0tlB8mB6al6B6CW0jRMgugTe5y+Hw KnXGOt/hFn7OKuO2IUYONYqkOgl5bpnPuO3kUORfeW4IVpLhIAWGy4tHM+ANMu4ujPK/ajmwf4VG A6uRRhpppJH/GRJub1mw+0DmHr0kDHZrkgTVFyzODEg6kaJi/aDT35jMQVlRkbwnC4eTs6ExkwBC LCxoofrBj3UAGBdFJ1LJp2FVQV54yQAdE7xglApe1Jd4TQAiYUYb2R9mSCgUXDgtWJGBCvgSun3r MTOC9DqONRkg+oTbEWwQKMwkItdxaX86kdAz3A8D4vxh9ifyeMEHigTsTLPDo9b+HvMzCAglPbw2 oYbDkBBtMMBPktjuVep4pDQwcr1Oyi9wwSgSNEWAGwpV9eXXQPAlBOQLLgRoumrxTwUMMgFmP959 +80tG6zm8a9y45XTGmmkkUYaaeR3goi8MaEBu8xmfQ4u82iIAsF0A+sMFuTYsCfpPDucvik5AwQ0 1SywsAQNDJEJzRQzAqGDyoxMsiFFqkCW5MQpyYpUstZrYBkhoZschFaqBU00I7pKAYjX/CFeJtpH IHhYJZtTBRSCSIQKRdNK7ZfcfMyARSeiTYQRJj+CojB0OqZuESZE+9f12agMyF5iVuDLCmSAVQIx qCEtRILP4HMqGmrGhvFl/64FBpAh2JEvuqsD7QUGyF9MrwjDzuvlpW/0YDXSSCONNPI/xbg/NNt3 +KninaKNml2KbGaIkghJujHeKwaQdbQElKeSSAS1Mhhb5EvVvRmAjgXoWAAR4IaKNLJWVlDmKxoc UqWiO8PnHRJUgpmlOtYNEVDqUrCn1AaHm9lkYcpwuYVC+VKRAwYgQWBRFaG4QJoqQBMZgibCVE8p 1lKXyqkFXu4aaSTVQyAR8LqIz1ndbPfKV00lqLncSBICWAdjZdEMK3lhh1yvUXk5TihIEcvhpQCE awboBEKgWTs4dJrfCUy/6ub/Eo0GViONNNJII/9TEEXYP1u8//vdVs9I1esr1wQAmqpBVW9MyKHN 6kHRSSuCnBIsej2s7IEHGqyCArPqM4Y0AsoEGTZSqj0xPtOiroFRc7kTCi5KLgTIEvQsoExRkKtz 1Qr2rrlNlstJhW4PhHKGW2FwjfhvIsCmKpRZ7tWCYIFexyQ7BKS7nciuqCuT55JVSi6wkSYTRxgM DNKQ4XDRqTInubRrT9wLgQFtlUBEaUYY2GcsVpCMTNGBC4IdrmvQwC2HF6eEMgSSHlFmc3mPNiEb iTpepSTev06jgdVII4000sj/HO26h+48eaLojNuOvgAAIni9CsrLr1tJygZxZFrZkWGFKAhkYJEJ IAUa0oUKCAwEsQ5uqMgSHbBDbjAWyQARZojQs4AKkuGGhjNUhhKdGxboOB9OsqG2MaSDgBDSI1Aw cJnmoTLNCzdrdeQhCIBH1rCvoIKsipeaGixqkdcjHCu3UYWnfoX1fKcXP3tKySCIADFcikqyytcU UMUAwtiAPko4wjV9rbgmCxsQwBJIIpwRyq/Jk+WGCllwwxBoSI68M2IrZly9Df8qjQZWI4000kgj /3MkJLTMP70/b1NZmaO7V1aMBEBVGIXZFex1K6Q3/r6vR49bhcetQSOGE95q08PBXpwUSmGACBlq tRL7lfCHHh21YMQqBphZRL7owUnJinw4kO2rKkU1BT8ZvjIy3SgYnfR+MOhALk3DMYcDJ1AG+QrH sysKJRfacRgOUQPX0dqqCcOnq+WurmWIBo0rgi8eTKucJm2m+SFS09eJu9IAGFlAK9UPOYIT5XXL pNa7b5Ne5+jUKXhj+2bNrktwexWNQe6NNNJII438z0FEcpMYw5bwYMv5qhBujRk52eVks1/9Rf1b I4kEUQCK4Yb7svqCCjQ4IF/VuCIQotmMKMUAE4tgADGqAS1VPxhqVHW73LYJZSNaiWYYiQCFYBFE tNOZEQhDw41m35hdpXZ29TGr9LuEajWvS4hXsLiMEBEMfZ3fvWAo8AmH6lhAOBuv3ohKwkIsZ5s0 lX5uqPTXb0GjB6uRRhpppJH/Sbp2bJGy/2j5HqGIOjAzmICs7HJkppUiNOz3FRu1NPEjZzMJF0/b 68RGXSsEQAeBBYA8pEHPBBm+bMQrGTC+bQiaW4BmBCACrAB6QYBU29lVTTAZECuYERogcgV5KLtM QQm7G5yi00NADCxoQWYEkIhyRcUFwYlcOKBAq7Wtz1Pl+1uoDPSvQgaDwVDJlwnoJQ0qfMH/1zLl KAiEwFDDjn4dE85ffe1/j0YP1jXASUnS3x+6tUurUP97giJb3TPy9fVNb3SbGmmkkUYa+fcIbxdu Cw2xfGox689wpWaA1erGgT1ZcLt/88opDRIUYUHb/jEwBkjga3AJVRkhGi5lD2pg2Egmlbj6V5kY JeSF+wreLwZQSh6UwAuvQ4DsJKgyocitoKLGVGUVITBgoBCGgeZAdBX8qJ8WiiFiGMLI2EAWo4CO CMIQfSjaG8yIEY1obzBjoBKKzlow9BCu6JvzQoOHNGjwaVeplRUTCaj+XSVGiXANXkcGAvxMR4KC /JZRHLmuvsG/R6OBdRWYk3VPPzdx4pfbjiwvdHi+8tqtn9mt3sHMfA228vVjQ+Jd5jtCgmbHth41 5QKz8Z0BzaIT/PByaJ/Jfxi0kP0AgE8l6md2M06I6TDomZHLnbEA8FjfljdH6fz/0fOhvw9m5ht6 /n/PMWRm+r2ON+/Bnu2a6g1vNL99+gMLmA0A8NrAwCHxTVu91P/1/V1vVLv+v8DH3rLcHGx+Iiii 44tjVpQ1u9HtaeS/m+mz++2NDDOv0+skFfDpPB09nov9e7KgqL+fgD0R4aabm2HYiPYIDW3Ye6aD gCiY0UYLQkctGHFsga5ShiEPDqSINpQIMkpFBRckB84LNqhXMGEIgB0yjoilSJHsyGUvTnudOEil cF6WmUcAWrI/YnR6QCYoDoLmJoRKEtoiAFI9JgUDCGcDOpI/dIoAxeOLdZPdBIMmIF61IKSB6T0Z GrIFJ8oFGR7SILDPaKwpzlAqeFGGqycnGA2SMzbKb+kjs3ofu+rKvwGNBtZV2Dp7audfssqeSnc0 CWs15P5noiKD72ziR1uuR92iX4Nkz+6apg+aqTbt1aI54CG9EC4wHoMojHHpYQGAnLN6/4sl4mSP 2/2nlL3bOwEAMXdl8J9YEHrh14vi/iYws/DBvD/1njp1xpN//WRt1+ttYGxY+pfWjz3yxJ+efX3R LUnM131anCA0B2OmoAlDSwEdM0upxeIIt0d++sKx04Or1mNeavzLszNGPjr9qT+8vysl5nq36/8N RjIxeCwJmKoTtegb3ZxG/vsZNCR+VViw5SjgkyFwOb34edMZpKcU/a7tsPjpMfTOdnhwcgK6d4+F wSBB02rHOAkgxLEfOilB6KgGop0SgK5KMFpqAdBBgBcaUgUr9ktF2CUW4KhQCivq1hKsWdtQA1BA LhwQi7FdKsA+sQiF9Th4RJAvtktD9b/KnSFU1UGs560ogBDKJtZ7RHjdgOwmKF6CpgAaA0ZNRADX Z5pdamcOOZAq2uEgFV6q8tr59MGKRA9SROvV49OIEB7md3D4qLabG1zxN6QxBusq/LItq4vVjaaG vuO/mPvWnH+O60je8y/ce0PbxMzSE92C7rFLrVw3jb9vAxHx/NvaMQMqNE0TDb47J7ZpaEWfEYPf 13uahIeM7n8kbREg+BRrZeKrXI3XF+HAz1sGrd3veaGH2KYCU3H8eh7s9N7tHb/+Kv3lyN66RTPm Yh9wDYIp/w6aoAGQWfCJvBCRsviZe9d4c6UMYVj3LZ99Wbme1WX65btvx58qie5PfSYeBpB7Xdv1 /wgiksFQNIEb6yQ28m8z4I62p1NSir8qsTo7eb2KgYiQk2PFT5tTOCTMTOGRfr9bW0wmCQm9Y9Gm fRj278rA7u3nkZdXAY/Hp30VKBg4VrWQDgJkMATyxR+1Vv1RRh7kkwsaGA4oAF0KLq8JgRDEBoSz AQYSUQw3SsgDL1R4KwPs6/vqVcFwsgqP3beUCBB9FXxgFZQrvlRUMCnM1XFgte5auroiuxsqzglW lApexKommCsD+EsFL7IEB2z1GJCXY9BJjtbtQld36hmXedWVfyMaPVhXwWpXLCyzGBQZUvjhmpc1 ILFqzHwJEQC4+v+JdcYzMRECAAGJiUJDnhpmUCIq172KR+fi+7c2Sy4x3Iy4gYd6dG17+krrUa9p 8tzFGzeuXrZo6aJh/oX1Hb9m+66wG6Gyr0is7mPt/VSGLlxT2337WiMosiwqsqLzyIq4DRBRz/18 lf0SfOGY9R1PACAmJiYKnJgoyB6vqCiKTlVkaecVjlUfNc9rg+eugfNfxbR/fHPgi5WrFn42udu5 6h/TCkVFUSRFlnUut0P07aOBsa2/r1X9rXGOGlz3ulJ9PSGx3mvh0lj52nupf/WvX73f6n4BsBh/ jff40rFw5eupev9Xvg8ub/+V2lurf4lXuC5qXTONU8Q3HCJS4lsHrA0Pt+yq+k1jxrFjubT+6xMo yLP9zg0CAgMNGDq8DR6b0RdjxnZBQkJThIX6wcQSSUxgvlQuRiGGgNrq7PUZVlW/x7IFfZUw9JPD kOANxgA5Ap0qY6GutB0qj5Uu2lFAHl/JGw1QPECxIuMMKlCfiaWBUUQu2ASlzn4JgI2UyhqKDSND Qy4cOCyWYL9UjP1SMU4JZddkXAFAZJT/1vbtwzYQ0fX9wK5Bo4F1BX6YP7ZV+yDTNyuyXE/luz2m vG//MnXf31/d0WRI8d8Xl3Lg+E7RE0N1YVvumv7ypMfu6PJMbKDfD6ab7POmLL1gBIBTq8f6zRnf +54tK6OXBRst28KXffv1gEnPPzb6s2MRNY/DDFqaeEfzqbe1f/bzsMBN/n7hW1v2vfPDu/766S1j T3Hd3FQAH3x27OYST3Dz5r26f5vYi5xX6sPF1bNNd4dgflCznqs7vnK2a81pTVF1+D8/5dZx338a vDJIZ9gRunzDqtsee2Vc4uqk6k+1bxLHxLczmL9u0nHY66/MmT5uU5zf5+bYX9ZFj/+2h6/tY8WF z93W/oEBrV+NCwz40T8w5ucOg+9/c9Rrq3uOZa633sScm8IebB40acv65KxpXrlAf2zta8+NCG+/ pcltb4yuHpOkQdLbMwd3HdOn5ZsxAX5bAkKabulyx0Ovjn5rbSdUxo09NbDZ8CYB5s2GLo+9lZhU Vq3E/O20jh06R1q+MIb1WOlMT3m8y4J5699cffTvLrnMcPHwqvunBcdsCenz5yf5Cu0DgIt7xppe nNR32KAOTT4OMVmSQuO+/rbv+Nl/HLt8T2ytc7d6rLj4yWE97uoZ949wgy4pOOLTzQNHPzanBP6x zLVvrofjDNMjgiN+aD1j00hOXqyb2iEgMfSWeRtP55QO9jjTQ9Y9d/dH5rjBa3tOWNEJADi5p27B U8P7jOkd/48Yf8tPwf7+v3QYcM+CK4jEhQAAIABJREFUMbPeHjw2cXX1dfHTu5OadjCZV0W2GfL2 q3+Zed/3zQKWWWL7ro+8f23vK/XverDg4eHhTz1w85RNn0euCDcZk4KjVmzuNPzhFye++/3/sXfe 4VUU7d//zu7p/aT3TkJC771EmnQUCAqKYqGJCIgKPCoR7EoRRUARBBUFBESagBikl9CTkEZ676e3 3Z33jyQYBASVRx5/7/lcFxdwzu7M7Myc3XvvGtNUOP3gsa7twiT6vbG9n5y5bP7EbsPah67wlssO qTy/2ttx+LNzJy/76QaT35H5g72fG9Vh2iZP+U6FXPNrTMf41fO/qO4tUHrHgnFH14wNiVbqvwuI GvrBe2/NiX+oQ+CHAXLxz3K138HogU+9NXHJnuikxFG6V8Z1eWRnoHarSqo44vnl7q3xTyyaOGFF lqZpW2UbByoXP9V7RN+4gLUeMtlhT2//vZ2GPZU4bu6qlk2F2deGtu4ZLNbsbzXw6Vnzn3rw6W+8 5DvkMZlfxr10xg8AaOpYyZvP9u4+tG3oJ95K5SG9z9d7O4ycOm/Uir2RbkHr/tJ/WOscPz/NapVS WtH4mdMp4OSJfOzYcpmWFRv/8TERhiAoVIcBQ2Lw2FMd8PS0bhgwrjk8WiqoSM2Ciil4IkDEAy5B gA3cHR3klRCjBaeBhyAGBwoHBCgpi1hODa+7SHVQCztOiCpxVlyLTJEFF8QGHBNVohy39hknqHei T2dNsJCmhYkAC+GRJTKhDo67euslqBfYHE00bXeDVi0vCghQfdq5T1ThXZ90D3CbCG+DXKdyhIV5 ZzMldb55NbZghVdIRRBhrioCvfJ76sEfZpgQUGvf03u+iWQ4jkDlYfT1UknCwsJg3PSo14wPD738 U6Yw0SlWFrkYWanCkO2Xvmv1W5mZZb1n/VT50vIHvUsppeS7Fzp3+/T7k+9ku7SRnEueQajNymX9 +kBSzrUhIbmmRErpV00lbvrNUP3wxacG1fl3zI0L73L6j67BCAdLgFYAjWQEXnu9DcqR3KQtT3zD wGo0CmVOEXHo6rK6nPrus37Xcs1L1ifRJZPiiZ2IqQKE72QoTem9+pu8RwReZ9N5awp9dCxTCmDZ xLQha38qWFxKvLQuXpYphlkwX94z9uesa0PjimwvU0r3/N5XTREZWRllK02XVBpU1xx8oN4vqthf I76qCpVWFQGgdI347bFLRq9PKltYLfIQc1SeJebqRDVntj+Rl54zpGc1mXMMODxpXNsrl4uT7LVF vzy9Zd3WFABf0l3DFRNeOTapwCgfre8zcomvd9rFkIigaFJplKcVmqMU+pCqEE/RVXm4rBi30UrT HU/qprxy8Pkfr9im2SWaChcjLdKY8vQ5e9e/lnW1tN+T316d9eWjsXmUUvLpIxH9VicVL8vhvH2I XJ0hmKuYvNN7E4rEElUNJQq/Ju0yFBEE6EYY8j066AV1ZFhhc1qTmVNS4+uwKRT+IVE5Wg91RoC/ xJxMJ4sXjTwwfv2xrNcNIg1xUWkWI7iEuqtHBxxKT3lI13rMsjW76Kopw4mVBZWD8B2sFVcfWPVl 0cMCr3FovbRFPnoRW/4X9v1fYffsnhHLfjj2/tlaTS9WLEojElm11F7qUXly63N7c4oGPGxhpgJI AQAiZnSgjm7WgrP+G4sxocBgsdoE3qmjpSFXD+5YXFxBIp+8QOd92Y7UpS3r5f/qml/f/blI/BBk ngW8UFVSnXelxbYNRT3qnGwQJ8EfOsiwECkAZydn1aX4DV9ee6C8xm6w8MSplxv9S45vn7U/K61L rbqyLLWOb1lex1UKRLDLjSkdjv9Q1c+31OWTSumKFoQ4DVsGeby44uKcnZedk3mZotzByvJldrO8 4OT2SRmXLoxp8ahrXsomupcQwlOG8aRwdC++lBT7ZQojULHe6OWlTPUUM4QWzpa/8uz2SZtO1b1s knpYOchzFY5yecmv38y8lpn34DCXeuZu4B9xvnVzaxKeiN73xcfW7Xl53BSniyeEAC6XgLOnCgjn EOiQUbEkJMITItE/KwuzIgY6TwV0ngrEtvSG60GOFOUYYMiqpbTMQg35AlNmsQEOFlKbCE4nD54X QAhpyMROrmdklxERFYMhHKnXf4kpAwvhIWvIJVVGrHc02dUSJwzEBQb1yT4F/EHV5obv0xkDjGIX wvh6h3wHEZDPWFBGrHeVgf2vopCJ7aEh+i+mzO55eOqc/1o3t8StwboNfZ5aX7jvYsEr/bTkay+p yK5/YMaO81mlzxz/KnF1HGAjABUEO6mFryG4zxOvvLP6u4SN8x74YGFfcO99lJRwIN35NBc94pdB C7eMt1irhx9a1G1MP3/7Nmf6/qHbP9+SQCklJ9542PubH1L/k+IKbOYVP/PNlRmlIwzmuhGLBnlN bSbkWApO7JrRfd7J2KbjWr4tO66wRtFNFxC0b9fs6Ds8Q31AAAEglKFsgwaWAaiDqWN9Ld7xz726 MbtulNV6Zcgrw1tPD5NUXyu5eGjqlpNJHQBAAgkIXLyFY8VcQPfvHk9cO/6bj+Y+u2vl8JQtT3WM 2XEw59VcaawqbOSrcy+YykfUmNYOn9FN8VKAJUWdcWTfzIHvZ9zkgLzw29MHf76cP6Nzc+/vJSJP V0TP8V+dSz4648gXs44AwIaET1rvSCpYUKRuxzcf+9Zzp4wVI6svfTT8mQ7ShZ615wPSft7z/Ni1 hR6tnttZOKmv75JIlFcWn/n+yaErM2PXfJva90yx/VES2vNI/6GjPn9x6eZTe5Jz5jw+sNknMpHG 4RXR8+APF8/OOPXt61tuVz198dKfh/10yTDDGj4ouc+cDY+bzdXDz306/KGh4dwGXPu574FNuyZS Stlznz3ut/Nk6dxMLsjHr+fU95cfrx5hsViGLZ7Y65kImemS6+YITYFSUIESgZAE/qNdl784nrbg hWAP9VmJLMAYP/eTd88f/fGVXR8m5H6acKzLjuNl8yvU7aytHnppxhZT9QiDxThswYRuk8NIZU7l hX0vf3b4h4GNDRPq4i08K+H8umx/dMGaCes/mf/MhmlhF/9gY5C/8OeWUErJobTygfkuz45enSZ+ OXV30ZgaQ93DpTueGTU4iPmCKTzb9sKVzNGJjfNBGQGw8oVG6meOefjrt49XjrHYnUM+fzxqUmu9 Ia2qKGvI+RXbYiil5LMt2eOOFmEUooYkDXh103i73Tbk0GeLR8eHky8Jdbn4O5h6xTxLQZ28icgo Ezd609Jjl8bYHI4h38/sPL6Xr/1YTf6ZBw7XeHcMHTp3UYrZPMxqsw2d90DQC+F8vsVUnjrq6eV1 AQDwzkeXH/7pkmUqF97/dL/p7z9uNteOqDq2csTj8dEL9IYsRf6JHxMHr8poAdRbTUAdQp2ghCJu 2AcvLvvmka/ffmzukbc6VH707K7eP56ueKnOt2dxx6dWPG02V46o2DNtZEIsu1xedKLlqZ27ps4+ QeV/dE1u/rv4+flZOrT3/9xLpzh33dRGAF6guHChCF99kYyTJwphd9w/1z+GIZAqxIhs6YX2DzUj bZ9uwbR9MQZdn4/BmKfaYfSj7fDgsDj06h2B1q0DEBSkg1YrBWkoq+wETwRQuK7/EQBab4Izw3VX og5BvfM535CT6m7EzUZn9dOiSpwUVeIsW4USYvnbwpUYDOQQQQa2wcD5Gwwh8PZUnW7XzmcrIeQf r4Hk1mDdAVofqkAg3PyDYkQqV0T8hG+HbpiydVLDA9u67eGgwyXWUUYm3DJw0ivLN0+LyQSA5s8f LLmwqNMXZz/K6V+VfLj/HkzfWJaX3v1MubiXrmXnLc9vfnHTREIsEwFQmnj0cv81X2ecKlhgTDnY HsCV+rH0Fc3unTmoWBFtC4gZlvTXbMkCCCMTQrsN3jZiw8xdIxvaoJTuyezoHVOVlb0wOTn9QUrp yR1vPwxKGVYf1PJC2xnrVn8wkeR+UH8sc6WiesDlGmVr/z7x73/92VO7mhHiBAB66fG9Fyb91Hd7 Vvp4LudYLG7nuE0bfXB+M4tQukY8M37R4AyTrll43wcXnPh4/M+E1OuU6dGhO84+e+qBn7OuDLBn n4kEUDN+7WcnLmY9vnLjxSsLS75+8cXN5bXNiuXN+ei+D3301fNtcq9f8V2aXujesd6DZh4cVSUE MT0fnrp857w+V8g8AEBV/rs9vjy9NHVA3rmjA1ZfnrbaJ+Vc+0uV0k6q8C6HHlr86oZnWpCaZ+qb ubDksY5fp+WkDL5jhwZD41zAKZCG+UiUPNf3s4FZJq/Q0N5DF/y6eub+xjkAcOS9wf5rVp7KXZ5x +NiYLYV0v7DlCUopy+oCml9p89znq5ZNkmUt+4MuC39K9Jg+/cPXTlWjBUfv7s5GVSGOkEc+2HB5 6dBtt/q+SKzZCw/FmcUvDMkNsB626V5+WT2ncpQj2m/rOc/Sakt+QUls9T6IgcY6FmLiE93hl07z F301JYbUTgFAC8de/v5c6ZEzZ6uflRiLPXE2wfdShXWAEVHOnqOe/njbrN6XySwAQAVNXrDp0oMf DcsA7piPjlKGUfsEpXee++b2J2JJ9RP1c5z2wJVrPyUVmuK9w9vtm7Nqxr7whptv/rSQI0eDxRe/ rzW1qLp62oMmDzf3G3d0aDUNo91HTlmxNbH/RZI4AQAslO7d6uoytuX6rMzpF3fsHQA0BmtI4N8m /kD7j5atf6kFMQMALZurPFVmGF5g8/Fu2e+RBYfeGX6SvAMAMNF1AzedXXSm3/m0sw9wmecCAFy7 m3Vx899h0MOtLxYUmZfUGe2rrQ7Xdc0/L1CSk1uN2k3nUVVmQK/4CHh6Kq4LLvcLViKGh7cYHt5K RKA+Mo/nBLicHBx2DjYbB4fDBbPZCUOdA1aDHVoLhbLQAN5GwJnr0y3USTnKEBH8qLr+TYECnJ0H CLludmRFBCqHGAwBMYhdVPh9GguK25ooBYFC4AQiUAoOFEQAxGABSiE0nEcFCtrwf6BeuCW/L4bY gAIi+FIFPKkUEsqAgsJEOJQxVtTCAR4UCrm4ukVL5afxw+Nu66v838QtYP0NCGEEH19p+UKAJjZ8 lrT7eKCFd4XaxWrzqXdGhALQoUHgf2pTsadgNQusoiDg5yPw887PbWUS60SimjJ+vk7WtbFZmewd 2jZQo5LaS0UQ26NSKZW0IMR5LFEUkJzBDWH9Q099urxnWs+P/urIWaqVM4am4yaE0B0T/dL2FvDm ssz0qGxALOIZSgkLqUioG/AQLAcaT/94iLiuoryNWerLM3nn2PYycR/Ua0OpZ/x2JlQmlkhthTI7 y0dRSn+525QWVe8vlRkNNW0sshBnxaUDMrF4/gON7fqPPSrypWAl9jyllWUjAJwlJJ7LWT7iu8yK w51+Tt73uEvi6/LuPPS95asm/hy/+ok/PSvHd5z2sThtkTapznxx/Qx/AAPRsHbD1l7TOq02QSzP 9z1dRALaZuRF2mXeLNG1uPhhG1LRtB07z9rEoLcQye9M3uwvFYaKinZ2fbc6wvonNxGuAABPJ3Q8 t/bc0WJacKF5bo3N0wMOgDCQsLSu7zCp+eAd2jcaAXOti60zOlnuzsE7AAAxVyq2msy39FlrWNuC VVO78d+9O22YWazvZTbbguihQyJbLetdZKE6CAJjKs9rcpdkiELG1I3qCdemxo+CegmUOW5jqINh WEFyeUuKl5NzBrl8WuSH61RXbujUL8DJCtRF2LsYPyFgqOD08mvqCbuQsqpvawnD8yzHVg3DbwXM 1KEiQSwlDlrjlDJmm+jEqmN+Noe1mcOndUGwSnPlxqaHOHa+1Onwhsu5U2nR2RhKqeK1YW0oCAuN jFRNioNra8OxGUs3ay02U5xVFmDLO7BSJwIGcg17q9nC8zKpyQkxl6cvsolD4Raw7iuEEKGwsHCn yeiIy0ivnGN3csrGZzwhBLU1Fuz5IRXZ6ZXoHR+BFm38odLcoaTMPwhDAEbMQCyWQKGUQP+774UG IYa4+Pr0D5RA4ClcPE/auQS4XAI4oV5IE+xOELEI4HnQRpNjQ4SGQECaClOEEPC8ALv99u/9dqsL vEsAJYDTzoHnBDhcPOxODhaLC3a7C2aTkxoNNmK3OmEyO2G1OuFy8SCEgGkQZnWQoJmghVaod8un oLAzPLQQQyloUEHsqJM6beExnksSnuq9836lVXILWH8Tyt2oHams5FSC0ykXqs8GG6TYqJD99sPL yKsGpZTVSJyX7BarzFDHaam9UmIvOjxJzGJi02OvlBgBMUNFEkFyqMEUcuHClf65Yg+9tutDB3sS 8vfCWm6h1fH01VkpKXdRq0Emu24+rldzWJocV+7gRRYLp6OWQoUlv/QlEcO+qJDVP3/tVg4ZVg6Q SDnCQopGbfJdkFXmIXZYczWCKUdjtucvlIikVNKwQ411DhgBsFKRXWCE6xMVMevH8tk9go/p8swP V8n0tZ3GP300/i+qgouqnQrOxStpzfkwk4Wsbboe14pqQSlllFrHNZfdIbNZHEoiIgL03ubft8MI +Mu/5mrWU+R05isYldJs9Qm6aY2VQeFWSo/ZGGpU1xk5hZjnGquoEZftzpr6FgmJNQBm/pkxOa21 yP583G2/XzU6qt3mwzmLLtfo2mu9LCeNpblXqmsNlihPNlIhYcJvtVEpFZjfO1AxDQHbLAuUmxwy zsVJGa22ttTmf2OYkMX+Z1UGRPz7wmcNYqtwCz9ZWj9AAECtkZUKHC9l/fRleWLvm/YVp/YyMcji WZFNlQdIKKl/pRd+FxOVX8pIXXZOjbo0L6ONXSaRSa9HsJRUmkABIlU5qzmO/995Uv9/THBwsO3S qazPrBZndG5+7VieF66b/Akh4HgBqallKCqqQ6uL/rRbrzASHecFseSOsRf3nXohhQDsb14MLAAx xFDch/HwvFCvLePrhT8nJxDO7oLZYEdVhQXVtRYUFRhRkFONsjITlTgJiRQ08BCk4IgAG/jrYSYM CFgAPmK53T9M9114mPcGQsg/X1iyAbeAdY9RyAUHIxK5RGEDz/gyOQvthuIbbsocx0EpE1nEsF9T KBgnq/azygN7rVZV79ztcomu73iu/mDKSkjxTMBJr72rHRL/3kCnNKrkyYSex95a8zcHeguJvqKs TkkoFROZ6g/jXn0tmbxUTO2sPrpOF9jiHbb0p1OUstc1HBwHSsSgIrE4F3cQrgj57RXIm6vkxCLB wXq1rtD7hySS0p9TKW0yJxwoEbOCREazGz/79T+dgt/anDrUIIipxF6qP7vhvWErK2jycz7kJsHn TugUdifLEicT/ECqn7xqga06+4awIY7jIFOwNsg9rmo8VR0hULBW400+MwLz13MkePLVnETCWGFy SMWm6psetpaiXAUhVC5AY9dpRFYXK7of98TrULpUPq79+xPOFcr6BA8Y95/pM+Zueq6fupYQIix9 QNHn1WN871r+z/l68gDC/eVWkURkpU6rLFhXd+NT68+lafhrNKgs9BrewYhYB7VY5P589U33S5Gp XC1AxPKc3BwGOAhlb7n0WqnJxYrgYPy7Fnh5SOdz5aeKgd88pTmOoxIJy0EiZPy3LsnNn6NN12ZF +3ee+dRktrWvqLQ1qy/PcmPSz7o6O44eySFX08rRvkMg2nUORViUHgrF/76g9b8C2yDoiRp+XQqw gFoML28FwqI8AAB2O4/aKgsKC42kKt8ALttKrZl2OK084dDUUbTemd/DV3wptI/vB90GRN/X3IJu Aese0ye+Rcl7Jy6XiMxW307L9hZsfSz0BtsvpVQGwEEIoasei0gVXbAyMoU3u/mK6Wx38lvq3IY0 AiwhxImv38X28eFt8p2KNqquA78SP+BZ+vdGyRODTdC+0cRJmFLKPNPKq43VTjWa5nEZQYDjLCvc Wk5Y+L5Le3pWijjDNloT0JbLurTlRFNTFm0IoSeEuMjSp27ZRH2iIAFoImBFrWhnV/YypYpzLf08 YvvZUy/tONpUtUsplQAQGn3PaOoWydTJMyadrvDoHdJjyPIWFdsj96YfeWzJzFXnKaXf3qgWpgDh adgfzMqgQV0q3j55Kl9cY2oTO2tlyd45XZKbft907Ua/2DFDcjCbR9n5Vu/UUf18HaltPE7O2FUO CvaOpWKJlJCGTGqsuN6iGLbsSau272cXJNey+hNjRkdK6dmmDvlrvjvX3uFyBZKIDvvDPeTVwH15 6fyNb/doTC57jEUSbWoXHH1oRn9N9YyGr1JqtN5We7WKYShV+4bdvVDEcSTqscFV7IYvCsRFl7rl 1xqaAfjNDJuXLuVApMJ/uRIBddhJ94UPlikO78sSFZ7rUVZd0QLAr9e/p1TyQmdVH0HuyTBBHdMJ Ibb/DG97yzF1eWawUXJ2X6aowtQyaPTM2lOf/Pxr0+9pfUkl7vcmYTf3l4EjOp2srOBfSz5b/p7V 6goREUo5l8BwggAetF4OJwRV1Rb88nM2Lp0vRVS0Fzp0D0V0rDdUasn9KZfxfwyZjIV/kAb+QRpw nfxhNDhJWXYd8pKKaUmqiQi2erMjpRQSFZsR0kn8Stf+zdLv97jdUYT3GJ9pRws7Bkj3qmznfY5+ /Nq8J5f+0IpSylBK2Y9mDu3Qv3Pnd5sPfH0CpZQNCW1+rK3OdN6Qd3DM1LGvT1qbavAAgOpTKzTP De80oX3XER+0f3xjLKVUtOOSqX+NKErUPCZ0X+JtIuDuDgZUsDP5J/eN+fGJFcP3VlMNpbmyjx7v OexUiXVcjSSqrkPH2P23i7IDAEIS+HA//4OxytKc0pQfJ3d7+sPRWyrq6x+e3zLf+8n+7ae16j7+ rQdm7wq8TROCjBKrjJpIpdERdBKQUUpFhGx1Rvv7/BQpLygtOPP98/HTVg7dRakCAA58MSPgkb7t XmjZ48nEh+b/7AkAH89/acDBVNuz1K/j6fDHF38xsk/0kkiSV1N5eucLD799uEVjZ2JKrGpq5a0O p/8bmVBRSkW3TBz62E/l7X2Ue/XcFcXZr5fOH7vomw6UUpZSyqx5ZWSrwd07LI7uP29yMqVi36jY S228nMnGinPx659+a9LSVIMHpVS8bsG49nvO5k+s4ukd5StoIl1qgbOJBIP0Wk5tIKVUBCx0xXrq 9zdTV+UXXdw/tc/UFQ/upVRKKWXXTxvU64dzhsmVJEKI6dv9+4RgYmNY8f29f3eKs4khKpeYsz3O ZyYP21BEPWtrc3UfTuo/aOcVwzPFRt6TZRgqMhfd9b1GRCiDyA8q2/hKftEgR3pm+2ezRn9wpDWl lL20f5XP9Ff3Pp5jc7R03aXp+a8iY5wMifm2qouffI8XyWUu7lk/95FFG9pRShmavEaxeES7MbvT 6DhBG53V5qGhP/9RW6TrN8YWvtq9gSTTmn5o3cvDX1rXZ29Dncod7z8ROapn2wVxfabPnbvx0p33 jZt/DEKIa8IzXbe1auWzWKeRlBOGMFKWpSqIIYfoemZyQgh4SlFRbcaJE3n4+tPT+OHzy7hwtBBl JSY4HG65+V4hErHw8JQjros/ek9vSSIH+4ORMwAFRCq2yKubblG3R7sdvV9+VzeM9X4P4H8dAsqA gID8TvVP67OF/z7EgRDiSls26EvTxjMh+6/uHvvje4faal6bVCjmbZBrlCE2cZgkOMb3BAA65M09 BeWl0YuM+wrezk364vU5v6x5RCdX1sUMWKASKzRRvHdYcvu4VrZj00NDii38ACaq9TH/QSOysfjm cTKUEgowN46nArQhq7dA+HpdCeUJISoSLK7jyn5Z+eajEa8/73Q4oJNLokycpzK4a/8lCd3iz+27 fv0QEYARW298EZu8bvjl2oer31x3NDUxY3fxkqe3vzdFL1VYBk35RE/EHmGicMW+Vs2jb2n7JoQI 7zwQfjVQZa3I+PmTaQ94bezu33b85wC+n/1231PGF2rf3XAyecHl7dc+mfBtYpanVGF77KWNXhB5 Bcubqbfqu/Zznk7sGT33i4tzy9kwUfO+j3665ynfnN10TeGZs9nrKlNOLzz60+4XZu2ofWn5Q/o6 Txef08zDde301d3D3ukSGrYqauz2srMffgLA9ftxlawZvtm87njozqv7Jx1aeby55oMZ+WLOLkhV 8iCHKEgT0M3rrRxAGDt1Y+XoI79+WHYwd1lO0qoFr3ZbMnoB57D66PQeEpFeoWHsPKWkqVDBEALC kKbpG0aYW2jplbSqiodOr3jyXeXnkeNb9Xt60altM8/UjHznnfXHL7x2ZUfOJwnfvJENziHolGy4 jXgrAzoNWzK576gDU5Zcb0hEKXtfXpZIs4+Ny8bG7sgsy+tRcPq7V6a13DjyeVBeq1D5SsT+RKUu rbMaKvQh3pwUgA28wFCAJSA3jVcgDAOAZQgYQghNW9Zra2ndufYH0nc9fPC9w7GSVytLtWq1XKfW aeSMjHEREJa/vYLAxfIEgOhWRc1JfTw3S5kbXzKJXSAAwwBgKFvvUfvy9PbbKlcmh/6QcnDygU9O bFS9N7NAQni5QkSa2fQxxsjeo9/cNy0mlUxvrExCRZSCkf9Ow7b4uVb7zS7b8i0Xjs86vjHl86RV L+V6SuWOae/v9OdYXx9dO/3qkG6t/7Es027uDkIIl5VVvVVw0qD09Mo5TpdLQ1hC5TxLWBDYwIFv KusTwGnnkXqqhBalVkMfoIRfnI6EhesQHu0JtU523Vnbzd9DpZGh1cAQGDINqMyx1CrjVCtCRvrv /CMFwT+JW8C6AwylxQTkhECFphlgKSjyARylQNnvz4mbvb80eU3/eVHH7L8cOp09LK3OHu6Se7q8 Y3r83KVzn03Pfzj9QuMGoBS/sAuGPHb0XN7DSclFvSoEohfpo2oiewx8N6pdx+3rX2pb/vIAMinH FhKm9o5Ysq7nrZ3bGcpbCMFpAuQybL3goIGUB3CZENRQMHX1BwqlYHVJEd1GfNYZh9lDRysfulpC g1y6qFOd4kdu7tNl6L5J8fXNh0sdAAAgAElEQVRO4iJBZAHFSUqRwUhvrEdASCJHk/p+7xEVl550 +tqYY5fqOtUSkV7q3aK0eY/+a2I7ddmzakpM7e/H2ci82QOOla45ubDuVN6YOrGHWKGVOAGANPvY QbfEbfRqFncl6cy1MSdTa9saGYlO49c6N7b7gKUdusXvf28ELC8szm+fVckLpMvQVZMTEw5M+Wwc CJniKlz6wLcnPzwTlpJ+MPTY+TEtAByfuGHutYKJS/5TeTjzyQKTxEehlzpxG+1HwJRdVRUr+y4K PSccO3Q6e8Tla/ZmTrFW8Ijqcqx9136bR0zofiqhMXVEIg6J/Ac//sOvaY+dTjF34LQBXGiXAd+1 o0XnD5eXvGAUSKamwZ1aIMihwAkq0OvmXUIIPbX80a9Kt55WHLxU3geeUqpQU56QKS6a3GGTxzdh qYdOFD5y5mptWwMRy5ThbX/p1nf0VqWq5Ykpw+vXiAexAeQUIUIBRHdZM+IeM2u67351kH/lhkPX nkzONLeg2mBzQLcHt03syJxITjo48JLgkHMSuQQAGEJrCcFxAJneaJqKWSowAs0BpUdBSCUAxM0+ WpqU2Heu3yXTqYNH0oYUMVKdZ0SrlK49+2+t3rC4/2kgnGdvH+whgchKCE4xDCl1NIkUBACBMmWg OErqf8fX94ILCo6CplKAMJQaAUA3YU9tya7h7wRuqzl5+Gzuw5eNzmYumZbz7dxrQ8vuw7ZEYGJK 4++ZCEI1BXMUoDmVuNHTnYz80UTX910RGMMkHzqV9fC5DGucTaSUqYM7XI7tGv/9gPjeh2c2u38O uW5uT7NmnsZTe7OW1VTb1KW8cRp1UEV9mgEGDkpuFLBQv6EIS2A1u2DPMKAix0Svioqh9pShZd9A EhXjSbU+ciJTSSASMbhNJgI3d4GHXoagaHVlueBcpYwjK9v4+d22usk/jXtZ70yD/xyluDE47Haf 3+Z81BuIb6O2pBTkDQKSCABIBKULKSGE0qS+ohdeuzJ8Y3Xn0GaTNnx39mWfmwS6JjBAIoDE6zf2 RIBJvLHvxvHUC3gNqUaQmAgkJt5K6mfwW8mrW0JpffRufYe3beePz7vFPN74/U1jqL+OW8/pLdcm MRFMYuKt+7rl+Brn5jbju/m4RIAupCCEJtbPe9Mx33a//HadiWi6dncxB43ctO73g6bzcH3/0us6 VXrjMbe8ltvOUWLjPv7tvBv28R/QqKG6cV7vahw3t30Xe6Lx3Lv/zdzlfnRz/zmyN8s7+UzxqyXF dY+5TJyHiDKwUld9iZomx4nAQM/IqQgMGEogpcwNdwKtUkQ10WqiDVUhIFhDwsL18PRVQ/wPZ4j/ vwDPcaiprltuc1gXhYaG3val/n7gXk03bty4cePmLsk+Xuaz68DV+YX5dZN5K6/gIMAK7qaM5AqI oGZkVAQGIkrAUKBRpuZBUU2txM7ykCvF8PRUIjBIh5Zt/NAszhdarQQilrnvSUz/16GUwlBnOVxT XjQzMjb2yp3P+Gdxr54bN27cuHHzJzjyU5r/2ZPlC8oKDRNtZqfGcgsBiwBQQAwFI6FiSiBucAV0 EQF11EFsDWVp6jOYA4QhkMvF0OvlNDzck0Q184RvsA6eXnKolBLIlRKwt84C8v8lPM9To9F6uOCa 6cW2nQIv3O/x3Ar3arlx48aNGzd/kitXcnxP/1D2Qvq18mmVVqvudseJCAOWErAgoACc4G/y2Wqk MWkNIYBYxFKNRkr0Hgp4eSjgF6Knvv5K4u+vgbefGkrlP5NrS6AULp7C5eDhsDjBcQKcDh6ci4fN 7oIg/HYtIhEDjUYGnZcSCsV/z8VbEHiYTcZ91zLq5rfvEvE/WyDdLWC5cePGjRs3f4Grp4s8d/6Y viC3oHqK3cHd8xQbtL56OAgFGEKoRMaSEG89Ij084KORUlmQFHIfBVHrpJDJRAAhIDIJKAOIWYJb WRgpBVw8ILg4UBcHgRdgd3Bw2DhYjE6AAlKji3K1LuoyMIwgUHAchdPFId9pRDlnhcvJg+cE2J3c DbUHWZaBUiGBl48KAx+MQUwrn3s9JeA4zm6zmHc7LOWvegc2/59OzOuOInTjxo0bN27+ArFdgqq3 bEl9S6uXFKWnV75YZ7AH3ku1RX1ERX1YhQAQ3k7hKHCgMK8KJQBhpAykYhEkIrY+vwkIjBIOFUo7 lUhYwt4ie4vTxYPjBCpwAjgnD4eLJzwvQBAoFDyLUEENGUeIwFGC3yUNsTI8KhgDjA0ZbkiTMA3a ULBZqZTA01sJieyW5Uv/FhzHmc1m8+c2W83ygMDmBfe8g3uMW4Plxo0bN27c/A0opZIvPjk5Ju1y +Ru1RlukcKtExn+3DwBqiBFC1WBRL0w1xp5SUIgakrq5iIBMxgALuFs/4OkNf6ExKJcA8IcSYYIK hAAiSsARChYEQkNNWgAoYCwohvm382m9aVCpkiI8Qo+OXYLRpmMQ1Op7V1bTxXE8KL1mt9u/FITa 1Trd/1a04O1wa7DcuHHjxo2bvwEhxEkp/X7L+vPVWelVM3KLagZynCC585l/DgYEogZfLgG0vmZz Q2YQviELD08AlrAUlLu1kEdu+Ov6vwgIVFT8m1bqVudSQCmIAQIwLIFaI0VIkB5hUV5oFuuNsHAd NFrZPblWSgGHw4XSAqPdbLTtCmmmXq3Vao8Rorkv+f7+Cm4By40bN27cuPmbNAhZB44cyM9kT2TN yc2pecLh4NT3up/fCz486rVMBAAHChco6F+sN9+Y9BCo14QRELhAQRoc2RkZA7VKijg/X8S19UNE jA98fZVQa2QQiZl7YhKjAKwmB65lViLtcnmVmGXWiiX4uFXHoNL/hfI3fwa3idCNGzdu3Li5hyQn X9Oe+bXksbzs2snVNZaWHBX+dikrivrcWgFQQU7Z2z68rYRDEcxw4M/VPyQAAqGCH5WDpQRCvYc9 ZDJCFf4KogtQUI9oNbyitCQwTAupVPT7SnF/C7OFQ1WpEfkFdchOqeArykwX/ANEy54cRraT8Hj7 PevoH8QtYLlxcxsoTRKtW2eUFxaOsCQm3rvaVktnj5Wr4waGMQwj4Th13pTJY423y/D/v0rj3KjV DmtCQsK/qpItpcni99cVy15+aoT53/ZG7ObfA6VUsufrlI5XruY/kV9ofcTmcGn+6PimD+PbbUoC Aj2RUV8qJwwloA3aq0YEUJQTG6phb+I1dTdjre9VATHCGQ10jATa5ioERnvAy09GtWEqovFWQq4Q 3zIy8a9AAVCeorbaipTLZchIr0RJXi3MZmeNj4/465ZxIV8NeaTlRULIv7Y+p9tE6MbNbdj37PSO K9O6P+UXL3oLQP69aHPXix2ar9mf/OLV3dkeHmyt0+rT1TKRRL+/EcgEgC1bxrJpaSH61LhZlq0J wbZ70ed/g4NTp7ZdfaX7FHWPEe8CuHa/x/Nn2DTxiQe+zOo9skDk9xqA6vs9Hjf/NyGEOAGcOHYs /Yry18rTpSW1c6oNtiiHg5M2laZYEEgICxlEEBGWAgBPBZipk7h+lzGLgqKO2glDCNVADClY4oBA RZQQFxFQBwdq71K4EoR6DZVIzEAuFUOllFCdpxwt4gJIm7YB0PkrIFOJwbLMPdNT8bwAu52D2eBE aZ4BBVerkX2pEteMtRAEweahkyWHR3kvadZa9fOgQa0sePQedXyfcAtYbtzcAkrXyx5v+/4oEuDJ izoPqbk3bSbKJvX+8fEcTS8mYuRjz48vfdm6n7bo7Sy5et1p03rWHJaZnvWyPVS+FsDZe9HvvYbS vdIn2784knrpCdNpVNX9Hs+fgV57RTt62O4x8tjgCu+OnW9bKNqNm3tFz57NTZTSDUl70i9lp9SM Sr9W8WityRbB85TIGBYaIqUi1Kc0aPRiklARFERMTXAQE3XekCVeaCizYyEiyCCiFAAlFE7KwwH+ pozyTWlMpcAwBD4+avh5q+AfqkNwsBZBwTriG6iu11LdwxI9TpeAqnIzTJU2WpVrIkVFBtQUWFBb bKWcIBAXKzj1HtIrEZG6zZ17K7a37NAht7F4+r8dt4D1LyI1NUlVw3uKe7ZqZWi6AWlSkugQr9Cq 1QDLBts6dgy4oZr4pf37lTWSIBIUZGLyDN6kf4cIY1PTSGpqqqSiokLRt29f4502NqUgW7eu1cNQ F15JfA2VRdeK4uLa+7Aaiat9jLS2qMhTLk87aT4H+ItECnkhw+UnTppkB4Dk5GRxoYlV6lBnjo+P 5wAgNzdJlpcH2d30DQCJffuKwidN8hWJeGm5WFU6JyHhupYnKSlJJBJ5qk1+cmv57pVyqm0dUMeq DMZc7/LExHiOUpAfv/3cx+YwhJQxIeV1uWkVrVp1DJB4KI3D4+NvEBTWD18QV6ro3NLh2+qjH0eS 6w/iL957T60MbRYkEgnc8eMFRcuWzbH9fnyRjz7qzUulijyHZ2nilOHX16L0jc9UgrJtcJ0t6lTq ywPK3nhjFL5LfO3HxjXc76jU5Gxb2iIzzdwyeniRx0/bvvJ3hfYztPTMECoq/JTWzs0N8U3U5ZRS 5vDhwxq1Wm3p0KEj98YbT0pjYgb5EeJgkwuZsg9fmmhpPHbLli2sv7+/xuTnZy3ctlYm9okJNPMS Y01xYFliYv1abFk6W86E9Agq5BiRgYkpTExoYb7VGmwcMzmmVNa2rcW39erkBGK43sfKlSrO1zeo lJMLRYy+cFlCd1vjGqemWuQaxioqrGXVer28mGXt2tpap9oQFVUwpWNHV2JiIuPj46P18PDwtlgs 5q++Kqw4fDixybWCfPrGdKVfq36eFRUVts3l5TWHExObmg7Ihg2feBBpgL+M4Yxb09LKtiYm3hRt 9PH0rzqV6voGioNiVye2IP+aaCQ3/24IITyAc5TS9C8/PnMgv6jmCUO1fZjISrxZyjQtEA4KCicD sJRARaSUByVmeuNWpQBslIMNt4kUREMJcdS3TAiBTMJSrV5OwiM8ERnjheBgHbx9VFBopJBKmHvm T8VxAuwOHnWVVpTlVKEow4iSAjO11djAGXhq5wVCGELBQCBqptA/UP1VZGvZ5kGjO2USQlz3ZBD/ I7h9sP5FfP/SgCHzT3WOf+3V5xN7MDtF646zMQ8Ne/oCd2x87NSvJS/5ebPWVFfLvYU/z9n56fJP YwpsWtc7834tnDDKNe1cta/5pe7XXItPtAjNO7rw3X1bP9YfS1MFv7Vw0qV1r0zo/cZPnoM/v7Ti jUGEWP5oDF9O7dhjfbL5aYfUm7HV2NQMAANl4dlh9Jb/eHxnnZ/UbHznKNuF5HMXe1TYeI0qrFdq 9/kfvvvN6KCiH8ZKWn1SMXp2SeCwFWmbJlwEgNVTBgx591fZiEW7f3x9YhSp+KO+V84ZGLzrdPX0 ixklrcWCi9FGdykOHjB55b7FIy8AwPIHA2IO1sa+Ko5sllly9MfYPAs8RFJv2vLJ19bsf3v07o+f bDXo6yt4VCzXugw1Lp2Y2Pk6kQcX3nPsul8+fe5AYz80NU7y3Eztq0m2dp7jdq2cn+hJjJRSsnFK zx5rDlVOL5MEwpst5w2SZq4uT8xdueGFXucA4IuXRwRsP1k85Xx6SUcR52DUEZ3Kgvs9vWr/+wln kj6b1XZ/csHIpANXxtr82mbE9wo7Z9G0Tf/81fG7CSHOymW9/BPWZcxKKTDFW12ScEahSGUpW9V2 1leffEAXGKb+2vUZbetubx+aaal+/StXK7Z5j6sLVW/r2iYqXvZt2/3TZf0zuHlL9z5/qaAuVMFb BLs2mms+Yvqn+z547FdCCF0zODhyd3XEQiayZXbl8R3R2WZ4iaQeaPHY/C8OvD/++zUzh8T+dCLv uSy7SqdwVYrt+g51gcOeWfLTa4NvyJRMkzuIZy4Qv3LQ2CbkkX2rX07UkzpKKfloygOd958pn1JC 5RLGXC0XgvrkhyU8t2znc50LEx97sO/+k2Vztf5MUWV5TbA6umuO3pJJCsttEc74d9ZdWjly+xfz xg39aGvyRKfTSewOl1QZPeBqx8lzP9r4RNvirOejpBuqg4fuOl0wrrDappSLeWhbDs7pPfGFpasn tcujyWvEb7+1evSmZGcCfPxMEkOR1BXap2DQ9Hkrl4yOuG7apTtj1I++6/N2irKH4cWD77w5iZB/ peOsm38/STtydSXFla05pzC4OKtuiNXMRXNOQdaQgQFA/cNZRBk4wKGW2onzDk7rjdopAJBKWMjk Yuj0cnh5KREcpENohAf8QzTQ6eSQKyS4F/KUQAGnzQWT2YXKMhNqqyyoKDcjL7cGKBWo3eiA08qj QcoDACKSMDalVpzmE6na69Rgb/8HAy8FB//vukP8HdwarH8RIq22jtZejcpROrXaHRtbfLXba25l m4HTx1tqPOHfg4H1skvtyo2idKd6bJ+l05OFdrXvzBu8XKU/4GtwBBkgZNWJDVcHHQZUGXs2D/zy VOCYwCcmTVMzNi/eO1ASBPzh24N5eUvfJ/cqn6oKjj8X0ab3+oTi+W0/Oe67OKTroGWHB7+0z75n 5SOGSluPq80eLHxw2tBXtJdWqA9llHx46KON/QBsoC6n3OlyRPAcvV5SguedWoeLDXVJ/ngv0m96 6ketKH/lqqyPPG5S+5lDLeucaVeyZu3bu2XhM9uKZqwdHVQkgVRqLrjcOcWoiOqekLhIX3DwdLw/ 29zZJcyU8WanyB8L/J8QWvXZLFir9z4X+Uu/VWcC57YZ/sjLPxzPPd+0r81rdNFZteKO8gFjPkr0 JEYAQNU61fb9uc/VdnqpLMbfsLBNzjZW5k+GHrxwxhcA6N7BmkfezH0xhe3p3XxS9zkPW1eb0q7k zth1cHvi+G9ypjGm5RaWJeUSlc5oYVQGRkRKBQG1AAQA8Ar0q+jTz/OdvhUVKZ+elD41bPZzc8q2 LM9TxPS1hLDhQdy2nACVqrNPwZ61uu83qd/0Ge7z5vOxZdWsTzddKadxlhZXoPOIxw5aT2WejVal O/VllZM3/XLs+Td2d04BUMXIZBJLYWrHSyZVTJcxiYvbFR488YAfE811CrBX/DjeZ/uZmlll3oOL 9R6SV0epTrHXrmS8/ONPh2dvqaBzE3zIdU3W7m/VkemVfDdF/NhViXpSBwDpy+NDt55xzLFFjjmi cl3c+FiARHP84tU3Dm3eO5lSumjhqA5qI6vzUcXP+WDQuVnd12XXDhkwZfHsQb/MG73uwpmewMhd cr23oc+E2cs3r1506fWhfkFJV3Pf/OWLXWMopSsWDo0edqDA8Zw6fsbnnQwp+wcF1fn/cv7qhKrS 4mAAebt+2BaUdNn5HD/wta9bnVy0vn831u+CyDX0zP6DnmjiO/fRN5J2pYImQtptzCK3cOXmfhL/ UHgdgCMlJSXJVXmKTcmHTYML84wJDivXmndRMQFACaiLCGDBQAIWTnqzgEUpBaX1pkWZTARPLyX8 g7WIivBAcIgeOk8FNHoZlEoxbpXV/a/gcgmoq7GiotyEgiIzCrOqUFpmgKHWBqvZBSfPAwIQQFWQ gEW9ugpgpMShULEpAZGqTW16yX/SBHrn/l8VrBpxC1j/Jmyuwg7ya47sQjZMeSG1hZ80zOdQ0tVO Q4VCXh8Tcy3k+FfFqmDPqPUfpwZrTRejxB4tHPNezw32kjvEktgOxVzp8pL2Wi92y0+1Ib7XLrf0 VIoCV316pPUrljIPn7hmhXF3ELAuXM5WCoj2qHI0y09NHG7d/MMjhR8llVnUaj2LBMLzj0WAlQQU txk3ee2SR2Iz6bEYddo8WXZ2XWVgYxsEDE+Y34pXUUIocGfT4DtrM+OMfLsW0pj+r/3ywYhrvwDY P7/b51e/v7Q6JaWkHYAiwAUq8XIqQjp+/eOHz+4nZLKwHziBFd+hw+OaLjw7SllhDc8r2Pqq7eOl I/NXHjW7PIOCgMNPNDFFJYle7jd91FXFoNIXp8afPv9ewxd2Nefni/xzl7d2r7TETjQN/SBJFj9o y7E4cOTLF7Fk+cVmNY7m7SVtBr2V9P6ojCQAR9/ptzZl7YXPc9ILu/RZvGKLIRHVJeGjuu61tjq+ 7J056wFg3cIJ9fOSsJUHULfq2d4CS9TmruNGlzw7c0wtjhFsSV1ZEUfer+TV0yL2H8wXAlnWJ7Pc 1P2cvfhUcKi+7rSmtan/7NGViYmJRS88M86v1mn1tZ7+ppLbes3b4bJ5AKiC0wle4umSBbf7bs+S Z/cRMpnfD5zCx5uhjtf1cbg6tQgJ0l/qFs50tgn9iA9/uoocS+5wPtvhByC7fm4ou6B/3IgM+YDq WWM6nTi/tH5qdm273Mkp6h3cOlhmjPTs1MPAMERXfqhSlHOhxbeABw81VKyicOq84Zlpz34SRV3e eRtnD8l898TrVupwaAAIE+atPPL1119req/dGKh05auOFmypZWuyQ2He6lVs0w4pVnU5WfT5rG2E EOd+oIZS+iYAB1kA+Hh5WrWqzNIrJ1YPrm43zJozfPivft49P1/VFzz5bAoAIHf9k7J31198KEve 6ur3izpc7r74TjvOjZv/PgEBAVYAVyilqVu/ubC7OLVumMAj3my0tXGYOT+Bq/flYBuytgugIISA YQiUSgm0Whl8vNUIDNLCP1iDgEAt/IK0kP3NMjWUAhzHw2RywWK0wWxwwlBnQ3mlCRWVVlSVmVBa YoDR6GjQmpEbNGIEgI3hiBSsINKIijU66UXK4pdm3RUHBg3vdPX/io/VnXALWP8imtVm1Ub4a6tO XExuY9MP1kfp+ePl5w62T/dhDD5tSWmXQEvublbVLalU1ZyP6J+vrbDocjOy2oeSMk3ssFaVnX/M rkz1ibZnHjvWpsJ3sCjKTs6nndvXKU9rVUd01l26U8h6zzemlW56/MC5QDP79IRXXvOY8dnBNo7Q ttU0oN0FAAArBiv1tXoLhnq/HL0/FYjgFEudTfaZcIOR/W5vA6UOpb+ZZ6DuMOi6r1TJVVtZsBiW kzmF/gDgsDsYtV+LSlNAr5Tf/4B7jBuWuenN5Oxagcx6+j8v//TBrl9687EDUyWaqKymx517542o A2V+PSJG9v14dni9hgYASHCCLenF6A+5q5bReYXHh+9681ACs6HL1Uujpn4MIKXcpfY1uBiRumPv CqyrP8eaxpYHi3jjsdxS/+sdUIGA3l45T50OJaiIKuVN7AFx3rb2gaL8XQXlrZJUA6tDWhiOZGWc jTkXqjF4+ZiMI0ZHOSMNg+K3fL95/Ibv9soDQoLMHo5Cvcsll0EsZwDAwTkYrW9UtT2o75UGf5Dr FFVAy3EVGqE2u122S4ikYAhvE4tbt1KdVimE62+YVz/oE7G/zLd30OBen8/prr3u+F9YzntAXKYy lmV0y64V7AQMcTIKabuWXmdFgEugDKFUEHgFKMCA5yUUqP+3AErNFz7WTR7RY9x/Xl/UQ+0TavP3 kDkNpdVxRBFy9lxSjtxuh69VGnyuISqrfj0Iue7b1nXWt+VfTo6aL881jM85u+2JjUk7n9LEDTha kDNjNYASAEi5eq31sWqfFm2eGvV6d0L+T781u/n30XC/SqOUZhw+nL3JWFrZsrrAObAg39abs/DN WJ5RKaVSRq2RIizUA6Hhevj4q+Htq4JWK4NCKYFI/Oc1VIJAwXMCnE4eThsHo8GJmnIzyspMKKsw oabGArPBTo1GB7E7ONjtLjhd9SY/hqn37Wr03Wo0TzIMA7GIsREZyQ2NUO3SBil+9opUp/XoEVP+ +3vP/3XcAta/iLiVaXb62MO5puM7B2p7PnjRq3j/3nj5ifGHLCERAahYM2Zoi7zPvqhWBxFHfHmb Wad67E0IKubiH7hiha3/AGVpuyCYVqxQlZtO7xhMuz1yOe7Ce6eV8tqRR42+8lhPy7Y7DiBoqcPD f/A1eYEp6uiBvbHa2D7Z8X0G71kxpeP1opsMS6hL1CQEhfIEDRVDFQoxz9vsIrGhUtz4ta2uwosg +I5ylo61VYp4Tl56bI8vgHQA8Gyp0VekVMj8Q/3KGwcgYokglitu+hFrh46yeK+tyJaUlrbds/9q rFfrwSfH9X9gd+L432paUUpFL3YLHymJTChQtuh1rOn5lFIGgPHXN974nBq+3TSgV8dWh5JSXj2z +ZvnKKVz3urnXyWlLnHF0Z8DAFwGAG1LVl92kij9A73K77YqKSWEguEZ2H6TPQlJ4L+aMyi98tiv kwN6xp4zSjz2DCr94JEj1pZ91I7aX8Z/2z9w/QXbi5aocT96iFM3Hz+e49o4VtPrYoFsHu9yEgBw OgGGIYJYJrtpbnw11CJBVFWJ77B1kez8c2XJ3swFnU74vEsbvm8bOf9q/fWzc7tFDhOHjSrXR3Q+ 0vR8Lz1jZCSx5TXhD6/QnFySl+FwEENQEJ840sgnEMK/8lD/GwXK688BAQQMXbfo44fOVLYf0nzU uPn7v1p9bf7IcPFui25+hVksad4l1iFlzNVye2bMR5QqJ97CR5BSygIoUCSQt8936vnJQFYcv/PY iXknvtVUUko/Ab6UTu/05hhx7NMXomK7XLjLpXDj5h+nQQApAlCUvCb5kC5ar3dUOUaaba5nWrbz i23eylelVMqISHR3TumcAHBOHgLHw+nk4XLy4DgBDqsL9hoXamqsqKm0orTYiNpCK+UtPHiBolKw EKPgaCziTBozcxFCbjA1UlqvUROLWF4hExuIiFQwIGkREZ6HPT0lW/yjbNXx8Z3+tXms/i5uAetf BCHg5o6syzFdvTbbEBZ9dOW48EuvvX864Vy1T7StRFGseX1GmSRxgSOlLKhbr3HRnw8qVFS+fCz9 0Up9t1/2+aIWvpQTXutaUJHJT1C17LPn+QGaS3O+zn082dnBK6iWFjf2s3p0RLMNl/1HOro/m3R+ w5PnfhvBZ7KzOabOFS4PYUCfXmeJYKVMRXbUB/uz7S8NiqogFAQUN7xGEQYEYEApJbaN/crEZ4tq eVP6kA+TklNb7X8udA+T+wcAACAASURBVMkPucNdroDrAhellLzRI6DXppruHbu+8OLmjdO6FwPA 9LH+aVlri9LrUjc//eyGo6Uj5CmWvcs/eiZL08Y6pGP4hdON5wME7C0ia4ovqI9nmbs6PENLe7eP S6ZCDTEUFcV+ejQ/ZXqveiFr51Oh0WlCXA9GHfjFvsc8jU1PP7mgY/RrF2PG+ncccPiJxE8uO1L2 1GZezi5LsYmceQD9z+N+men/j737jovi6BsA/pvd65W74+i9SREQQQQr2HsN2LtiiZqYmKgxhcTE kqhJ1Jho7MYSjF2xiw1FBRQEpaOASO/H9Z33D0QpakyexDx5n/l+PvDH3dzu7Nzs7szsb+a+L0sq S90/ecpP5/Pess2v2Ldy1dQssQ8T6md/uzF/CBACinnplZHFZ5eyDIVWv67Z3nXPD5FZF5OfWPRd 9tM1/Xfh2Sg7zjlLzM/8Zsuk5Jh7X3Q5mlE1Ri4I3K0p3EVp1W2ljMC+Jn7PZ6odK+a5HP3t8GhN va2CZnOej0oijDBjbLXvkeEu9y/tzCksST45Fs3fXhDWNbmiy/1sv2W1HqwQgGsAgKMjnJ3TsEt3 o8Dql5Nzmv/Qar8BrgmXDtwbV5YoGtNpwcqN4bW31HcyCoJ+uNmxDuDA7YbvpeFuQGEKQZOf8aBp hKpLtXI9liK+rXf1pi/fYR7H7+uclpXdF1vYXRaaDal1kM45aZp1/YNvR3w07czlW4drU4/I1h+5 H+Q8bPr5bXMG5eyb36nLd1neXXoNOXG0mx+Vxxz9oTRWqinLpigDQgjvHWPvlwI+3jILqy/XD0Da l5U9Qfw3CZgZoAeAksLC+D1GjV0STyzwwUZ9O1UNtOHwKU8ej2tOURQyGhlUr2GQWqUDTZ0WVLVa UKl0UFOrBbXGCDXValDXaLGu1oAYDQa93gj1NTrQlOpx4ypb6Nm/BixMAYKGhUxRizefTnfEXA6r 3tREmMuXUClCLuuxXGJyx8qJn957iOI+Qs1nsv+vIg2sfxlLTXqOmcLh/v1iUZrNoEWFeMnmRDlf KknnhZQDONZ5Cacm59KdgNLWPXLu0rlcEn0lp8y9/bPpr5FBiox78oC0B/lUutO3Zx9R60zvSSws rE9SHZ9Nty+uppzqKmsmczXlJRjjxGePDhOegK2oskQFJo4atbazQVXDL0jYozi+64Rx6p5HH8Op HnUYoIQFrIZREnUtA4y4AjDUAADiT7xQGHK2y09Hb11+d9mIQzs9vNo/sXbwy4QMg6Ls+elI5Vfi IG1l2RiDTnMZAB4DAFjOv1O6aXLwStadm+9Gf3Bxw296hG3cupXbBY9cvmmwZf5mAMCI1iOESmmg Wt1EC66XYEd5dXGxCNmq1aqumrpaQW7sRosTO088+Siu7vPlQaLia08cuqq5ZmV24+dfv7n3nWaf 5yjEZe6S6tpr+7/6YMR3xZSAL+faeIU+8gsdvMWxIWBas2Va8Dd04p13Lnw29rsjOiNj6dS12qZT +PIdo1xydo4GYAAYBuFyYKgXLn8AAODXVhzX6fbDmzHbli5MEFhW+w8ack6khOuaivRCRzlOjqs3 Twt1NCta0tPploKigkulnQtHfaXITJpVfuDRlc+nKJWLR5hYuWs6OHUop4orcjFjMAAAcChaDwiV 0qzWDQz7d+OLOt/tspzOTZ1z8O23Nu5QqQ22nh00bccN3AkAGGOMPhoc0rmOraxxDJt1Lf7Awmaf D/zsZlZoWvCy64+uzd46ee+WDXqGcfYPqfIa99YmAABEIzUCXAYARkBMHUJQDg0d41qjEXN7v9X9 6P3t510urYzecMXIqPw6hpYJFNqUyoZJAMZebdBxBqt455L2jB83YvNgvtDEaBswIMXC3OI4AIBE Ich3zX4o+vWrmSu/r6wBmcKOZ+Pb72a7oGFHss/0ZM3svqQHrbBPN509KQk2TH5Z0RPEfyUrq4B6 ALiFMb5948YNHotlZuroKFUCTVlQGMsL8qrtblx93L8wr9Kxvl7L1emMHJ3OyNXpjCyGwUivNyKj ASMTzAMWojBA46O9hlYTphpaWSyMgKEAAIGRAyzEwTQyAsaIAj0A6BiG0XJYnEqlXPBIZsmPri1T 32nrZl7Ss59LscSmRg1go/1fia16XaSB9S9jK+mU0iVEFqaBoHqEEI6cHLKZa+6x04rvWIsQwpsi Bq8rNAmiN4c71W3CO2u6ngifaB3soTtwuOHzlj4OlztAu9uVlbw6hJAxcvDg5QJ/J9aeheb18EFD GrsuXS4P8bbuq7VSVjWNy/rk3S2B1WxfL5uFBz/cuoOXHQ5h9IS2evsDl3M2ZmQ99t2qzT72Jav9 ee59v4bmkn+Cul49eBmI1UzjiYcxPlM7e2JCL4mlIqGILrGSWtZB3iG2ug3UAzQMkUfOm/fTCJb5 HneepGRvk2OfueNG2tpgWGA5bJSVjm/PimNsnlxfF1bbmEe/7u7pNVVtZhV4cFRFLcrt6xVH+xrs Bgkc393+ju3l0LJUCKH6Vcf7X8vHX8XEFjkDQLFjrwGpxeWyu7sHoNKW5R6w8FJZTGTIhrQk1u5e ERHKynpGdzLbqjhh2cBnj6ymb72RtTYYPlQODrPAUjvupVrlk+sbwp+tOWYSCdWcwXipQlFtKH7J 9xv4dnTRpgj/94VubZQZ5ZSuut6+sj+AFn5Krk0eN26yytVWd+kGgIOz7EwfW89rd8d2qkOuWYaY ENjIGRFxBMmtRMcT0ktMewTXMhmH2NnaVDUAgJm8U3Y7a+tZ+R4CVWGLfT7NX+qCYJuFZv26KZHM knvt9pNyxrq8GiGEMY6k7Hv2TXv8WJ62K1zUsmgb40duzglRptqMHKDUUybU1YSiMpcZHWohAqBC XhGj4ShiwwDqP9eLD7E17GMAoLbp6PFzNzNHFLxgdd0PYZ7vug8cZVNeV6c/+4hf4tPGzPCooAAA QNfp2wKMo8L25G+9f6Jb2zCz9NyiugqJomz5yAANAMCgyAs56+a5RFbWu8re6thRkVlQX32owr4U lgZoYVgkx77v8Didxqxkhxd6acOWIP7bPT1P1QCQ//QPAACiwqLoOIB1WgDOiFFKp3qt2LGmWGtX UaE1ZxDiMwaDzGA0yBCmGJrGLAAAZAAWuxbJMQZskOIKTIORYgAMiFKLhJxyjLFRwYiMFEPVKRT8 IrklO4/Pq82JjanIdbK21k9Y6KP5X4un+jPIOljEa9s8uV2Hg3eZT5PqZbmWtpZJjlSe8fFjlZ/O up2g7YTPl++e6JD7T+fxZZYPdRtwKk88P0MtvOPsZJ1hVpdG5VewgyjHDtX+czd8/VPfV6/BRRAE 8W+DMebV1j4W6msrBZjLYVgGDafxvaIqLoeNMVbIdM/mHekoiZrLZekkEoEBQK5HZELIf4Q0sIjX hnEI68OBD9umcwODbJ1dZHK2Rp2YXFSU4z7txoM1Pf+S3+r7u+CYEN60Lwv8qpWdO9jaWQuFTK3q WlJFfnnIsuspS51eNqBEEARBEATxZmCMqdTUKE58fDwbY/yvaqRjjOnUqH9n3gmCIAiCIAiCIAiC IAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC IAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC IAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC IAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC IAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIP6cmzvfVuw5f94pMgaz/um8vEkYY2rNmjVu0dHRkn86 LwRBEARB/BfaFAFsF7lcAuYThBhj9Lqfu7vU13qkr+mPfiMWr+91Dkv/zjw2ta4/cGUgk9rYhPHf 1D5bwuenm/fw89jlHDz2m4i96ab/VD7+aqmRYZyP3o2wXLNmjd/aDRu8dp1JEv7Tefo3id8UwY6c NcFszZo1vmvXr/deFx33X9sAjwoDjlwul4BVhODFrw8W/JHrQUuRnsBxAZCAf6Tg91MTBPH/XtSC YDmfDYFst76+5gtffXMp3OQvaGsj9GFLbAKdZ50xAwD4eXpbc0evLr59F0TJ30yO/3PbhpsMtZEI UziK4bvPYPxaN9SCQ8MV4/zkP8lNffJ9x6ybGYPfzAgWxhit7iOYI+aZ5pjYTv4CP90vjgrm9/Sz 83Tuu9glCmP6b89HZjR3SXfJfBuldaE86P3VEW+wgfl3Of9RR/Nx3Vy/tODSOWw2u0ootsgPXXZx xD+dr3+L65HB8mm9PRbZ8tnpbDarki9QlAQv2DftP2mk/J1+HCCcoBCYZIosx36PMeY2vr55sDTc TCRO45mN2pSP8Z/uxLzjIhlvy+dlcv0WbozOzOT+Xnoc3Z/bx9/B3anne24x/8IR8R8nOJvx2RAI AEEv/2MHcdwmu0dF/f3XKOK/A/VPZ+C/CYemXS0pOIirq6Plj1M7vSrt2VOlwTqV/ihGvEO21hIf HO/PvpdUuKSyuODc4/x7U1Mx5rzufida8AOVfMl8XvevQt/0BRkxSIgAbBCAmfA16gPGmLV21Y0p 53MFw038hv48Z++83aEIGd5EXgEAgEESALAFgGeN2O37CoNLi6sPVj1K3nLjTIHj350F5DpA+860 oVu7m6kOGTJPTri844eRGON/7bmEcSrn13NZM6JvPXq/UuDKEcrNjjPA7BcL6Nx/Om//BhhjOupi 7pgT1zM/KuI4yERK69MMNu4R8ag0hBD+p/P3IgxCYkDYBhhQAMDzaw5iRBRGNgiwkm76+gss8rSy 82DDbI7v9FHBa683a4xhhEQAYIsRmBYXsH73mrZ/V4Z/RXH5r5V5ybv2l2a5/cnD+sdwgBmMEHUB AGIB4PoL/yh0gzLib3V2FWRk+H/Ev66n8HeyoXlpHR348Q+zM4eAOi0oHuNLAQjpW6bDGLNG+9sF FddhW45j0MUhHWwSoXYwjWA10tQbaW0tUJ4Ar31hRQj1oQBHAqJ+BoArAGD8K4/rVTAC3JDR17sR RM/zbnchp26iyrRP2siFS7bPRKj+b81gCxg1lit+ll+aTVMGrQ6pVJjFYjhv5IZmMXG3av/8Tj9l /pYclBp3dtZb6wKuAkDmm9j3X02zdZ7lvXJdjxoswd6D312+bOfMHYMRqj/2fvd/Omv/DgcGyFPL dT1KtQKBe/9pq97/cdH6aUpUe27FqH86Z78LveC8x4Ch6fn1MpgytAGEVmEMqahGGAMA6labeo3t AABQNCCjTo9UBsymmdf7zH8ZCoBiy63dMzw8HE/RBpWKoqgWDUsWcC2c0q3Na3T/TBaJN400sJrw X3mu1jrJ7bQsO6t/3sO8Xsu/e7QFAJ60TPdggaeyurayW7VRBG2Dupxc0NemEqFIvPXDNh97cXzW KLy7lKMXNMxehtEZdAA0Y8SUDiH0xhpXfxTG23mT2i8emVcvdrAbPHjjD334BRv/6UwBwMSesstH q2WhLEFHo7C/Wdmb2u+o72PTTl9WHs3JvLY4+WbCUIzxWoQQ86b2/1cpfpgvQIxRgtiWVX3D/GIH v+FG87+dOiOfRxu1JphlXd+xm1PsNCWq/afz9Cao63Q6BGDAiDKkFr/+9e5Fwqfb3jxVKe+jha5g Nsq1BEb/Vbl8M4wAgDGiBOZOaVOPHl89VQAl8OInAgx6kyP+xD/qX/tY4++AEGICpCjOzZSTVZ8W 51tXer/di9IdfcT2yM6va882839obmYZgxDCOCqMvn8t2y/51u0B909HOzemjbDhdzQVmc7i9/mu 44UfZ1n3a28/wsTcd6rDyO3us1xYISIue3acmulcb9BROOdYOzabPY/jO31ESGQuD2NMjZCyeomk DjOFAzZ5t8zH4vHBLlIKZll0n9G/f/TzOAqMMTq79UOrGX08+1vJ5VPZAuuZHl3Chs/bH+/8nzyC PDx6md3D4so+KmVAvpOj04WXPf4oiYkSrZzRo1M7C+EkqUAW4dhhcPjba495tXyMNtNWEGAmks3k D/oxEBftEi6f2j3Yy8JkklRqOSNg0PQBGx4UKF4nX/tjci0exKf2Tj0X111yo4ALALC2r5c8UAgT Od6jwnqtzJae3zjWaWB7pxGmAkGEjVe3sVNWb/PEL4nXuh71pXV4F/fBAq5opljZZmqfmZHdVpVi cct0CCHD4HbiywqBpig/9tzwz089tnqd/GKM0YV1Ec6hAa4jBQLZTBMr7yl9533ddV0mfmlQ9LV9 q6ymhboOtBHwpkuVLtOChs3tHxmVatEy3fKuLsoOQpjM8Rk/csjWNPHpteNdBvjYj5QJBBG2Xj1H R6ze69543EVnFgrbizgjBmx6NKGgSmfB6Gv4O96ZOgYA5jgM/6R7WJPywbkxvPULhgS4WSsmsNmy 2Y7+A8Nmbj/r2vI7fddV5OEg4M5kBX3c68yuSLPwbh4DTOV2M6R9Nvo3TZd+fJPp20MCekvF4hkC qd2M4JFz+y5/UNPs+46wF7S3FEln8vtvDMJFu4SrpocEeVmYTJRKLWe06ztt4Or4l08wyD0cafJe eOdQc7l8GltgHeEdOnbo4sMPHF78fUTRuyKntQ1wsxrNZotmW7l3Gzvmm50+8RizX7b9hjLZzusk EwxsuzptSmaJxgGMKnb0t1+OAIC3bXvP6ROW+jxMAMfHs7d+Mt43xNl0tIwrmGnZptu4kQs3dIzO xK3ik2bYCjqYiWSz+D2/Db62fq5Vv/b2w6XmbacpRm53f2V+MEYnN7xtPzHEfZCpVDqdLbKL8Ok9 fsiiY9l2r/rcH7XIX+ZtKaBnHC1RjSw3Yh5TnGCl/iV0Jm3XbaIy7GSzOokx4BCHh7zv5/fx91GK J0kFphFeoaOHfB1zq1m6Q1tTlHfvJPVMv3wltG53Mh8AYFOYv7SrEMZzPIaM9l6RLIvdMs1+WKDz MFOBIMKyTedx477Y5P2y+E9ceFzwybiunZ3k4qmmUumMDkNm9otMxfL1vTjeclPLGZIeqwKbXgtx 5jpJ5NhO3VyVJlMEXOksW5/eY2auPuKJ/2B8KcaYKWZAjxAyIIR0L/gzAABEz+vP7cmHt4SOnSZ4 fBRveerHdx36+tmPtOTxZihtvScPW7AqMAZjHgDAmR8Xmo0N9R5gKhBEiOWO04NHvt93y+nUVnG+ GMezty8a6t3L1zpcIJBFiJWeU3tO/TR0RTKWvSK/1KE1E926eDuGcbmyWQq7dpMGLfw2+IdULGqd Noqz86MhPsGu5mOkbMEsha335P5zv+18puj1YncJAjCOFA3xUPwoZAuMZgO/Xt3yIotjQlgf9DBf xqH4BpvQt7fOe3pTxNHzuB8Eczex2PbY1vvd9xrTz7DlLTcVSLXuHd46FeIqP2QqFdYIzL2rnUZt mzKrDfsnHo30CDV0gAAhBiFk4LWbfjlwyQMFxpg1QkrvE5nYayQDNs1vmdfFozuPktJIb9kj4nDf 01jekP8Y1vdjPQb4WspO25mZFAr5fDWbI9KbmFqWmzkFXA6c8ePwpse0bZhsjI1EWMVVjDh9Dbdu RDS1dIhnmCWbVWfda+62qWkvTntsbqDjwDayjXbmiiy5kFfP4/B1EoVVldLeI8Gt9+y318WVP2tE RNjxPlMKTTQuAz7aPby91dfOlqbpMiFPxecJDBJT2xIbnyFbRu974vD8u8Hom97CRWKeqd7EdtL6 xovfb2PN+nqacgspcb/kb85kmQEArO3l7h0khAKOx4j700YM+tDTRnnJSiEpEXA4BqHUVCW38bsV NHvzkKYNBIwx/f0Ay34dHEyjLU2lJRwOV88TSLVyC8eHFkET1vXYkGPfqr4kRZoFmglPiWROpYGR Vwe9qvwAAPD1tfxpHa2mulvLYs3l0goOh6/nCWVqUyvHHLn/hM2BkTebxZ9gjOkVPW36+dnLT1mb SovFXI6WL5Bo5OZ2ReaunY52jvg+tOkxrA519u8ghCfctuH3Iob1/tDDWnnVUi4ubThuZZ3Ctv2N zm/vGgAAkH98qXUHKe86CyEGATAAgBFCBkRResfhkRv6P735J30z3GySn3yZs6UiVSoSqFhsnkEi t6hSOLSLdZuybVTTm9w7btIZ9nxOvYXPiOsDPcx3W8glpQITW61iwIaPG9PsHOsY2MNVvs/WTFbA 43J1HJ5YJzOzfWLmO+iXwE+u+jamm2MvWGoulGgc+i3ZO8LfaqWzlWmaXMiv43MFBompbamV1+Dt YbuKWsXcfTslqH1nB+keG3P5I6FAoGFzRToTpXWpzDkoxmb8jpFN63/p0ani9zop5rexNk1QSEXV LBbXKJQq6+Q2HnccR3w1b+31lwd644INiq5K4QlOy/IDMNr0nru3f1zDteHOt5NNprSTLXW0VCSb SYQ1fDZHLzIxqzW1dk63CQxfOXdfYrOGeYSt4AszgVjr2iHsdKir4qBSKqzmm7etUY7YNfmlecFR nM+HuIS1tTCJsVZKiwQ8nobNFetkSutS8zbBZzrN29GnaYfih4GiOQqhVC02H7cbP72RAwBsHiKe ai4U1/HNwg4WYvzCGYBL/GWzrflUDQAwCAADNBw/2y4k12z0kU4AAPNdpbNs+Lx6eYc5Zwd38lrp YmWaIhdwVXwu3yBWWFdYtOn968hN6c8ajEfHWnbzs+DkUoJeWQt2XrcGANgypL1LVyHksF0GZE0O D1/kbWN63lohKRZyOHqhRKFWWPskdpj43aiWE1uydk0w6+tj/aWDmTRbzOfp+TyeTm5uV2Dp3Xfv +A7OUSYmlrUmIV8vazxvzn7g4drXy3Sjg7k8Ryrgq7kcnkEkM69VWHknuvVaOPeb12hAbJ7gOIPP Zuus/QYeXF6Llb+X/sTisbKeAogXWrcrHNp78Pde9qbnLeTiMhGHrecLTfQyS8+0dgM/nPNz5PSg Lo6mv9qYyQqFHI6exxcbTMzsC5XtJv48dV/as3pTuHeM6QR/88VuFrIkc5m4gsPh6XgCE43Cwi7P NmDElpGrY1o1zktiIkUT/S3muFmb3DSVSSrZbL6eL1bUK6ycM2VB09aHfPu8Q1L+S39JRGeLD1ws 5XeVUlENj80xCERytdzSJceq7VvfT9j51zbi/78gjwhbQCiybk1v5cW7j5mw0jvnOp+4OdccAAoa 349NcTK7lXi1D5a0UfFFjufXu6KaZx/GwAAAwzDQ5DERZWR0NfTDlNOhBWxZsYm110XvNs7ZZu0s U1wFwedD2wo30TeuTr1exszSuI8+Emiev0pv61pr5edeBQAUIDACBvx0281RiAEAIxiBYRkaYpP2 TZ3b7ftTj74v0Jma2vqF/PpWW9k5GS5G+XGXel5OTZyQdo67bNaHXiXQEIz52jCOYC/sd7xdCTbl tuXwUra2gfptLdLc/XGQ9Sdfn/vmShFrEKP0SfbvHvSjj7z6YUX6rfZX72SOz43TLF+zWGqyIB+v /dYWqRGijKCrpfOv7hhSIVIUWHr4n3rLjXdbn3vb6fLNu1PyM5nx1zZ8l4Ux/uZVj06xETAGYABh o97YEL9BUwgDhQy67IvOh8sU8znKgMSOPZwjHak8ze1r19+68/Be7+RT0YtmbOmY2Pj9rh/pHLrz Vuna+zpzKyvvfvsneYvOcUofWMdeujk+4+6JiEyROZoTg5dsDEV1z3bu81l5O8mKtPQSTUjmxeu+ AHDi5WUYRb8T+sG4synlK8o41nr3jt02DbPn3kbVeSY3rsVOznhwZGIK4ire2Zsz5/uxTsUAAN+/ 5dFr/52i7x7oTK1lLkHRfQNcT9ros4z3Em4Mjs9OHJhwDLl14dnMAYAYAABkRAwAMmgzzrkdLFHM 45h2iA/q6/KJrSHHcPtabNjdvHs97p4+8uGcqNxEG6fbpW2Cuk8MYef5n47P/vx+jZO8S9iwd+py bqU7+ViWHXABXcW5COl7C/Z+dCLHEKFXtk8L7N9ukZdpbXFB3KUesQ/ujSo888OXixdaVwDAuYYq CQwY9bgs/VTAVa7Mkafwig9oY5WtCLC6eTga4NAsn7bfH3/w7e0qSTuJW0h0+BCL30w0D8UJl66E JT+4GJ7HlvGHrC+dd2yespBByIh1KupJ7M5Bl0SKAgt3v7Mj2whuGh7edrwclzw5Lydh7PXNa7Ix xisbRwbOLAlx/2T7re9TqtkBEtfAs0MHOh1UcmpUD27F9khMjx9bfOnHrydMBg0AnMR4Hffdjp/N Oni/7qNykVe5d7fAVUF2hgcVSbEdryZmjCu+tP3TnTKnKozxLy8crbX2qnYNDJnfgXr00/WkzM9v Flu7dRw67D0ou5ug9LWv9O8IddHXPhRPm71p0cms+nnVYvcij86d13dwZiWivESHq7eSxmXfu7hg 30qh2eSo3I92hDsWAQAAAiOjq6PyUk6FFLPlJRJr9xhvN6ccRXuz+wcOvaheYbRptGv/n2Mef1cK ViynjqF7e7oIrpgannAyYs8PuJZxa/QDJJYGfe5dBADJL6ufr8vSJ+g3f2sc2znnXqf49MerHtoO fOTrLF3AlyuKRf783LP7G9IhoxZVpUR1vSS1cLR06nNxiI9sFasw0eLa9cTJWQ/vjLy6ZWM+xngp QkiLaAODMTCA8LPHZ0YKYaCRQf8o1uFYtel8lqx9Uoce7l+6svJqE29cG5aYmdo/5dLZRUe+878N ADkNZbGAP81vz5yEBxXv1Ylty927dl7v46xMYj+6YnszJXHo8cwqr1pKQUsoZEAIMVUrushm/3p/ yZUs/TiBU6fLIYN8lpvT1dXl9692jk1MG517ve6LnR/YqDHG21/r8T8FjET0gmv1CyCK1muKUs2v aivDpM6hV3r1iZVnPwAAIABJREFUEC1lA4PTrp/tn5yVNiAjtvrT5bdxlVZgq/Ls5LHZzZyXo86K c78clz4mL+PsxDP7A3Mxxqvg0hT27KWn5x5LqftAb+L+MKBv9+VtxLUZIlWOMvb8tUkpSWcm3RDZ 0mFR+N0D4ai6oZwiORGdtkw796AislrgWOPVqcs6f1vqLlOWYxYbGzclO/m3GQlIIF1x4tE7iwdu r14+cPOEQ3eqPq6Xuj/26xO63NNMl67NS3K7dT1+XHZa5ewLG79ivXsHL/3OD1X98RpF/E8p3zfa toOcd0UgcyxrO+dEs6nqB2a2GWrK5VSaOPeIHbS9xLXxdRw9j/tBEPdHFtveaO317ruNr8+wFSyT s1gMz7JDcsi8jb02xcezo6Ki6KbD05PMhUvM+GIdP2TF+uYjKvHsESb0LyKpvVrSf9PclvlcPLZL mJRGGsvuEQcHnsAyjDFa3Nd3rq+Hb6xbn0+X7GrS80rb+qF4nANnL0dgp7PtuGhh4/5fdwQrc904 ySQP1mFa3LbOrefXraJ3McbUR51M35fx+Wqh69Dzvb695/H8vRjW+nDnYS4S6jHLvGNB8Oxd3QEA ZtoLPlayaCPbKjjVZ/7xno09bIyj6DVDLd4WsTkac58RJ6dew1ZP9/HCEawDo8z6eJhyCyhJ3zvL ozOVAADf9/FoGyRGD4Frrrbo//kXkdGZksZjvr7A3TvAmn+LJbSvCll+ZRgAQHxkiOlIF+ExFt9K bdv3808i45/33vdNDPALNOfdZot9yvp9erxny2PfOEj2tlQoVytcJ27Fr5javv/tQLeuFlQikrap 9JyweXLTkZ+YJf7unS15MVy+ZV2XpSfCAAASl/dXDnXmnaR4Fhrrvp9+ERnzfNgenxgrm+RnslrK 42mFHhOOr46vMQUAWNPNxa+DEOUDz7LectDyj1ddKxU3HvfleZ5+7Sy5d9hip/LeX98e0Lit63Nt vDva85NY4qCCeTvv+jXN89pe1uH2Yl4p1zrkTqdPYjs0vp4bs523sKNyiYRrojH3Hr/720psAgCw oI10mh0HqVkyj4KA8V+P2R4Tw2us7zgmkjfT12QDjyvXmXacuSnieM2zR3znFvWy628vOMniOdW3 H7tuMgDALAfhYjM2ZWBbBD1o+87R3k3rx9rhlrPEbI5a2Xbo6elx2Kbh9VTOLF/hKjFfopX5Td07 /qDKsnH7+VFr+e91Uy4VU1yDbdcpOyIxFu0YYtfZ15SbQcvb5fvNPda/8dzDGNPLQ6wnWQqEFVL7 AZfmX1W/snf+4F0Hh96u/KsUv13l+BWnQpqVX3+7wc4mnELaLDArcPGZHk32gU5/4N8+0Jx1myVx qnMY8OWsxu8pwk7wmYJFGwWWHVK7zfmhz4uuGU1hHM9+v4f3x+6eAdfch3w5N7PJsgvnlw9XDLdh nWIJXdWuPT6f0vj6fzKC1Wihl3UPDw6qZPlMv+Yf2fxx7XxX6SwbDtLQpu0euUX8OqyxrmOM0ZbR NmMVPE611KXn9bHHsSsAwLEJyi7tzDnZlLBnWuMI1qZh/s5dJSgDOKZas56LV88+8UjWWAZ3l/i6 dXEQXqF5VqouS0+NadzvujC3QD8FnYkkHuV+M3ePiY9/PloZNd3ZP1BBx7EEFgaTHt98BgDw3ZC2 PgEi9Ii265cZPO/os7qPcSTn7V4u7zoqpaW2vd//9cOjpa8c3d86wXGGgMPSSCzcEk2sXRYAwHQA mNH0z6z72709oxoeG59YPFbWS4Ru0BxTvU3IghWrmjwRuLC0h/UgF3E0AMIcyy4ZoV9c7Nx43Bhj 6uNAxTxzvqBe4jDi7LZarIxeHqYcH+j6i513/7PdZm3r0bSerOvvEuQvo7MpRff8oYuOPAsz2T65 XbuOZqxUJGtb2m72nrDIJved0+/5+QaY8W7yxPblocsuDyg6s1A4WElHc2VutTaD1s1okhe0bXZw 97YWokwrv0F3Ahedfjb6TDQgMVgvIB+973FPR84lSlMjKb1xpHvjBQhjzD52Nq+nlmUiYFt0vHJ8 svLh72+NAcQWGTlWPa/GrJt9eWZAgD48PNzYtEeMqcYTAiP4nanRr4IQwl7jFx5cuPKLSZ9Fff4T b164JizMk+Pi4sJdufuW3s1dlAF6FcU2likB4JXxJS2lParhlJYYLCiRuE4jt6loleDqTPMLuere alqOlYFhv51f4P3geb5CDXPfsj0f6GRyApWmWFZWPglpuFkyAGwhwzHveiPp+0HXGkepEAo3Ovq0 S5RShloto1Gm3K1tFQ/wWjBGlKlPsYud98HIAa41jWUevHZBnpAtyOTgOt6TwmoLAID75Uav2480 nQR27e+btR9+IDLgeaD36J2371lJxeeEumzJg5ySTi1vdGY2ilKa0RhYUGy6uw5eeiEuUul8U0op D4VrQKxDjxmnmy5vEbI8Pr1zQNttnQNcLshoPQsAIK2k2vtWni5YYOObZtFuyIHIJiNnaNDeypmh VnusxJBhLL7R/tTlvCYxehhRpn6Fno6ehxZ1UdY2Hne3ZRMeCtn8bDau4z0urGgev/W0z80YDc/j UvA3wgu56h7lOr6JssOoI7FfdIpvfM8xdIqm54iQQ1ao5km9ttBn26YC22d5o9iYtuyWNHvWlBNT QkM1jfX9Xso9hytZql60wvmJwj9s/+bBkmcTEnqvOp9na2N+WG7Iox5XlXWJerrMCWIJGLZF55v3 vhtypWn98PT3T5SCsUbPaExTEsobyvz4SosbT3AnPc+0xr7n+F9/GSl8NkHFNvw9tXfHblG9g1z3 uzhblbullAivPGG6PqpEjqbtBp3zHTk4pnGEAiFknLZy0mlrjv6BUfvI9ezJpFfGPjUUVsN5q9Pp mpTfWv71Qm3ok1raQtl+aPTCCX2uNdkH7vt1wp3B/ha/cFT5XH1lWuj0+9AYK4MQW8RQlqHXLv8w 59KLrhnN+Rv9pi7aEbn6i0kLdizdfSccGcI8G877Ow+yNY7OokysrWVzULnyZXGHfwZFN9QVBBgE HFWr6xaiuJhj3unOpndCzzfWdYQQDujRNUlCGcsxo5Zl3c9/9RpyGCNa7lVmbe1z8MdB9pWNZeC7 /P3HAo7wARdU7JLSmsYOGPWwmvHPrAAHmXu3Gw7eQ88GBDwPvg/7OetuWyHnlpAGIzRbmgIw6LRc SqsSNjaAEYrUKcWCvb5u5hMdxNp1zkWPNL9fIgxTU5TpV/MkZy1FUT9TFLX5+R/aTNNojhkbnjda MUaUiX0NI29/Y5H784kRPb68UCJWmt/mUjQWe3SP45mExjceN0KIGTLALonDhXJG90Sech9k/YO9 Knu9t/SzFT99NWPKj1Oufx4aSod5enIAQlheLlAqM+Pl47piMYejexpGglFutc7vQRlyMfPsFOMa OvZCZJPRub5rElM6t/fcFuTvdFXEqNnmAAAUwmAwspCmVgRP7x0IIVzHMokLcLeY4SBjLbLnF+T/ fhn9byGPCF8AIcQcXNL1jPzBzRk1qvyg0DVPHAAgrWBdd4c7KtRRzzap9Bkw4uJrzxSkKGzkCzTw BpZfmDBhwpMTK7rITu/8rmtZaX7vjPzqNqo6JDlQmccWa+otDEYejWiGhj/YkKs1ILpOBUIk5mhA adlyOjYkRl+wUgG2Y1iK0l5Dg25v2dP8fRR+qW5OoP0tJV09Me9JRdvNAA29bIQwwxNoAKDZzBoD 0Do2g43AMBRj0P65RicGADZXV43Z2uZvuBlZDNZRCAM2GmkAgOqyPK9izJLIKbWqTfWeQN+pEz2M gCgAGubMmayn9UYFCzCUFzyxu38f2ADwbKq1UGZSh3C+kaG1/JQieOH6ZxhHUssHbXSvQxK2vUCa 9sNkqHKc8vx9hBDOj1r7W3Qlc+qJzERzHAAqHz/0rEICkUIsS5670j9/yqrm2wxe81G2ze5pGXmM ru+9Oylu8PQxIQMAwOXqqrSc5scttW04bmCQgTH8bueq6oe9ptW03k2F+cZ2/CzelBlThk+aOhUB GAExCEfffsgXI8aortcpau4nmT7bN0Jg5Ao01ZSm2Xeal57iVgK0koWY4rbMJffOEyeaGFksCgCA zaYM6rjztlzEGEuKK2xzcoD/tGAwwxW2OneMiKXjIMaIMUNp1ahhZPLiDWs1gAVQZmV9Bvtk3F3d /HgmdxiVo2yXPe9etTeMeTAXHWXUbaswh2rHKTHivbMHTpo66WlKGr7cmIpE2Ejp9UZRVWaWJfwJ qu+3SbTGejc1pdB2amt3LdwLNZuejxDgDRPtbtlSBVUP67SuN/elyACgofNCIWzkvd4142mjrWDb kq7Kuz+v6lNa4twzvabYtU7DEn0ezbCEapUNg9kIUYgF/0EH7g9DAEY+X/OwRNWsHmA2V8fG0PDd 6X+nHmIAYHH0tcBp0cDpaqQYrKfBCEaDsWEb98NZBmOdiwoJKTtrs6Qxb4trD7cY92exGAM8baxg jBFs7v3odmHFsfR7idMTf/18R8ecg4dGjRoXk16Bs/IGfVp0ZJr7KYAMuHpowyuz2TCLkKbMXf1u h/bqvpOnq6jBCD0va4YBvnfnPAs3qL/U9NhoysAWCFp+x0aaMdbyKWD4JqLqkk7NHzlyhUItAmxA SM3SaIBGoZEGjOHhJ5N7OJR/rZqWXVnQJa9SbWViWst/aw/Dw3VqB4pmjEBDQ+P6UiitqS3yUFFS 2kYsSY0Kg9qmlQIhZIw/Hrnbs1B0sIaP1NBHpO7SyfG3W+eLAopjf1zq2v5KQNi4icfyilQPzilG Fh6LGXMZIYTh4pFXltH/ItLAegkfS7t7wXa3Yn8rzO9TdG2vHwCkbYu6H6hSG91o665xI0PdEl4/ iAkDGN/MAqKJX3ay/2Jvyucx2cxwttyykNJTGVU1lSUGQzmjkCIKNOi1Zrq1xEUsSgdAIwQYKLpV T7qsvJYLGHMQltXbmzSJS2uCqqyt4iEwGurrxVDZdATtpSELCNDrryf2MmwGvajsEWAA5un2VZV1 cgQ6eJJ2sev+9JiuLdJiwAzCNB8ENTWSagk0GwWgEGBAGCOgaI3uJaPCB1KRVqMWIiQErIZqB4BW jXPb8PfU0GQtofp6lRAhHkKMsHoygHZKyw/AuHqJcVINwpg2VFU1D8TFDMKsluvwAAB+zQXPACAr s5hH6fVirKvlxu5fu/h6q2JsiJoBnb6critr9jiJwkyrfVcUV0op0NPVjxM8Dm++03qFD4wxBoTY KpWYqW7aUH1x/Wh5HBVVdVyEMRdjYZ0NV9NqqQQUHm4EgEoAgEmRVqaMTmMCjIpKOvPz9GSEprc+ NoxAatRATfmfGkF9/KiKxRgMAqBM9AJMV74ojephTZWYAo1Ro+OzqyubzSik/sCCHzFL/N1XHLy7 PO4x3ZOnMM9jNCirurriCTBlWCZGPNCCKfwT60sxrRt0iGpdN35P63O4yeKljWfcrVIKdGoBogQM F6A87PcbpwjNPF99bd+HKyu+jnqcXlw5oCjp3LikSs27XJlNUV3lghiv8C9/83x36fkDnVCrTuUL UCyReb7P119HfSRGpS1HuhtGocY0eQGAAkD4BedKw7NwAHj5rO9nKxgCAPww0a3vsXOxX+ZoFI4i qfCBtr62oKa2UCPmIgGHg5Sgh2ePgSGjFhl1OiEgE4w1UA0vKKeAwZH1AFAPAPDBRABcuOnXnOk/ aS7ezR9tLI4PPH2/doSeLVNblJXf8oq9crjnz3VHLswQFb9GGf1PIQ2sl3CZ90utw6m4M5Ks3IEq VWH3rKKsC4t6BweVaIQCl04dohcES6re+/3NvFEYY9ZsX+WUSzlMmN6x76ke/QetWbFoYoq7EtVi DGjtcOXiJSeNrZZ7eB1Go9ogYoEGGxkJo6prVW/EPKEBo1ojhjp2rY5+cb0SCPgGXE3RbJ7WIHtz i6m+DppN6QHxkdTMMcZoKDlYV17aejFABiGjWp2jtWneONJrdGwjpigaI521GF68xk3YAUxtkesx GAFoIwcabguvLAMOh60HrAcMKk7yCx/nJ3C0QPMwAoz4wr988UIhh8cARRmAbV5v7mCxvigzKfsF yRBtNGpAp733e9tjcVkGDGzEM3G8JxAatlc8flgLrUZUEAKDtjjYD2rz/mB++Xy2ERAyItDSWi3r lY/AhRIZA3StAWi5wczBbltZXmq8Ud+qzYuAMRqgXn3zD2YFAADkpmIGoUo94HraiHQvHNnkWIr4 OgwsisXSq9ncP7U+Es6P4k/qHTEn9jGnH+3S79f+I4duWPVJWJoFQiocE8L6eEXyipUXoc2f2fa/ SqCSYf3CraewDlGMhgOvOVrXZczXhRjjr2/v/2rvjxt/8byZW+6mkGo7Z6VeGFLwMLcnCBSfh2G8 7cBrrVH4vFX8JlbxpxjAF5b2sP5qW+xH93X2dhY+fVe+/c7EA4tHBOQjhPRPIn1sRuzI2XEmB3do 9jkWSw/YgGikZ8NrlBOymlkPAPvyr285s/Pnve77z9x1Fyt4fhX5NwdmZT5YUwdsz+E78ReHJ6Hy v+tY/41IDNZLIISwt5wd526qz3qckdXll8+/CyqtqOysUfg+trEwi3mtGSWv6xVbQvTTjjpu/V1x 6Oe9eJUQMKTMUNws03TSIJHBO/zDfYdXT7rh3mTRQ4PWyPoDC8w3Y6MQGSUmqJqpVws4ZQWt4oz8 OrQtZQMqpZhS2dX4YueW72O8jqsWYvdSI81VWkhz5gBoW6b5J5mYKx9zsNEosPcpnxJXEgUAP7f6 Y+o3ax6sPx/aYqHAqrJyGUYsFsLCmkBbeMkinRhLFMocNlPDaFl6+wUPodXU75+nj7NZMHt29wUb zzsBAMgtbHI4jEqnhXrHT49Cq3VvtHs/s8hjsewZRNXbebn80fbI7/IIca9lUdwyNk3hNuO/T4AX lQnAZmN5/K6cEzPzAF59QbFysi1iA9ZwFTaqfttzTwDAltbbYzbrsvYeDUXoNWJemvP18y6mAZUj KJWdT623afl+1IIwfuT0cUEzI38KgKAFwOYIC9nAIIvus9INOt3WFx0b1OZsK4pdnPpH8wIAYDoy uI7mCvLYxlLeo0qdR+QLfk6JZte2eWSkTKQSboF1QGD1n9mP5s5xi5sl2mDMU1T7jP9sz85PwxMs EFIBAEBGLTLomL+nI/3ftlymZ5SB5svyuLgOl2sNjjOftHpcj1uOqH03vaO5h0dA2/C3vzHvMHpp wfaraWfuF5SuP7Zhxqw+XoovZKosSc61K5Mttt/5r/x9WRYFqKS21v1Oid7XxNYzqd3CdfuWjOyQ 0xi+UlVfR2HG2DzuLmKwkSdV5LCZaqhnYacPoMno1lM/zhrtMG/2vO7zN121i1vXXxLUvq1Htz7T HYuDp9V+vP3i9ZTCim3XN73z4dge7jPcOCXFT5LiR+We2vGnOu//n5EG1iuM+2VajplMellYFOd0 4srV+feLaQ9rT4/zHqOG/6W/0cZmIYwAAGt1LS6E/tjGglUG+nqaV5Vu33S2D87dznucneujZTCb AoBaA2CoZmgG0ZQRY7q6qLDZY43bH7e1ictUBTDMnwtyDfYEtaUNPxvXVwl4xiet1nnhTVhb6C/j 3uAYq0UPTu56a0p087Vgzi3Y5pH6sHiAVuRca61QXEEI6fGbjAf5HQq5Y0IbqT6rJPd+l+gvdvRs ObwfPc7aJmzCvO6z9yQ3W7QPY4yyMyptEC2gtVzHxyEAdfACCCEsFiqT3US6x8UP0zvH/hTt02w7 ceMkZy8e/2jHrkOHTySV9wEAMLOyTWonQ6kVeZn+qft/6t18hmkM66sdt/uU1Bs8QeKR2aOrfdJf VRbPDDhZ5iTk3JCgKjrh8O6x/dcVNGu04DCgv5nQpWPI/C1tXyd42s496L6XlEmuL3vkdfH7b4ZG tvi9zuvTJPIZYyZ0H/HtlT8V82Q6Y/RjdxFOpnTlysSjO/tFtZjRWZBzp9funVFHDp6KW/oxbxpt I+DGWvDqah9cOx3eZVmSR9O0GABtHe/l23PG6g7RuPVioK8DuW+r9RTxrpvztLUZV6OHX9+Q0WyN s5LtAywu3sp6S8WxoEViy+vnx0DrySOvQafBtJFClJExsqoLC5o13K+lqxzv5Kr88As6aP8pFosF iALM6I0sYwX9j5/LCCHGisVOchQai/LvJfZMXn+12YzYR5u7mT9UY2etAdNPCwNVVZaFZWfcv3E9 OWv5lEvwLOBeFhpZ1Z6vSzblQZ22rl7KoqnX+21ZBmEO/s/DGv4ITLPYRoSQXqcT1KSVNltw+re7 Gt/8Up0jAsQ0togRimRkXOkdJ6GmOD8zJST+q0vN6/7pMPnpE8e/2L3n8IEzD+q7QnmJT25m9ok7 D9J//WB9hmdjOtTpPXUQ33jPSQRFRo1OYFSrXjnr9H8ReUT4Cgh9oFrTXXn5XkF5+J0HpT1A6lmt lLpcXO37tHf4F7G2RBV0pVZHFcS0f/tLi947fvstX+DhkYkQ0u2c6By3Ozt/ak366eHBYaKHW3bu vEY9Oi8ZOCKy193M0unapxdOCy1Q0GtJeRvJoeScssruOSdXzxw0/gPc11dYkH7+oP27u3KHpZYY ehsYI2CE+ckN3/3rjyKFRWlFv7ilcHQlNEa1zqkYc7zQ86BdhFy1Zz/qsCdly93Qu2kHh1+ILFJP X7btwBBnqvjm8a3uHx9Onn63TNhW4e2/1zRg6FX4efZfWYT/seGrOmRfib+z4+GNB58VXtjweZte d6xW/Hz4sqdZXd3dfZs8v7qcMOkhN8GtW/thcwHg4vNPPuTefMi4MSy2XuwdmPaqn8GYPlT2IPau fG9ucuJ7mVFfLus97csNM/q6paryEoWD5+59K6FUPVJt2TU7oL3HpUwA6PPxe/nXriZuyb6WseLx 5R8XBwy9J/5y69FYd12ScXLo9J6Xk2sjypEVtg/st2V1D8v8NX9xmSCEDDeWBR1O3ZTU707G0b5x P5WuGTRv3S8Te7lmMLmXJWO3be2VVJo+2eB+59JegMXwNL7pZRzHfFfa99CJrZmn83yLb25d8HPn dJOF30adDHSCisKz++w+OX5qbBbc6easzIgEgN1/PL8TVTsnOu++d7QgJP/Gjskf936sW7Fxzwkv E5Um+rcd7XfdSJyXL7Ln2Nt6nV7nB2X5I91i7hVWninPuzDi3u76b7uM/3L71CHtk0xqk9kRWzd3 vn0hf3qlTfzj5ATN2wDwp0YI54zzPZtSFHPmYt6FoYk/zV85bO6qHWO7tcl4dHWX1bhVV8feeET3 51l7xFkFDz/8R35eqymJT2hxW9nRewV5Rb7ZR76aO2rGR/wuTkzJvdMHXd6PyhuZWmwMZrARIRoJ 4C/sVNtboDrhY1TNFN52NKk+OmDr/kN35FzZo+HDQ/+xtZDefSfg7tX7j6MfZsdNe/Bb5Fc9J0Zu GdvdNi03JcF06ve/jkqs1odqEIAAKAwAjLlQdquN5GHR/dSYweeWzniydN3B44H2xsqCS3vtD0Wd m5Kv4sjl3h4XtXzf1xldxIjRmOhPXmq7c+/OCgazWpW1UCyuDhs8OP/kknF/yfEaGMB8lkmmu4zK vv0o0Td977yFH3y87Kil4SET5m3RPrWkekxmJWNHcQ21BmA/awAtGGSedPO+7EBBWtys5J2RXw2e verHKb3t00vS4kwGLooaHV9lHKi1CUwJ7ugWa4f963wU91Mvlz7onbBp0ZIxi3/aMTzYMleTcdFk 9y+/DkwoQV4CB+tsjnv7fDj6lxzW/xukgfU7xs7qeXv/+yfSHtaqu0otHO/bDJmT8ODwi6OvUENs IkVRzS5iNAJEAUIv7eEPHuQTe6wwJamy9FbQnjUpu454jrzReZDTdAAoDejW/lyfu2W/Rmfkjr13 duOK988bq3hsmjFiHpJYeBQqcpKUDA2UgQUIIVftsUWdtxbvveueUJ7Y/eqJ+xtuRGM1m8a0nutY 3K4tupD0IKcHi4+VW+6AAABUFAIKIUAA8MoRCIQQs7KfW4ILr64sr7QqYOH2OikAlDZN0/urW0mp ya4LcULeV+npF8Yczr4y7De9Rsvh0EKVjscSu/Y50HvY0K/2zrRqmJ6PgUIAFMao1axGiqYRIKAB IQobnge4IsA0AqAwQs/qLqIBIQQUYESz6Ya0RgY/PSZE4yZLDzw/IEwDAgphim44vkjd6bXTttWU HRaezkmZUZyY/9nXCburGYYx8Dk0X6VRUNK2HtvF5jbNFmqs3jnHOh/TbQwsi9IePf0Td+99RRkO Pl4fFRm2vrLuguj646RxiUdzfog4oFZRLBbNMCBC5h2TfAZNW7Y3wjt938yG5S1SI8P2VpdfEB3O Sn8nN7Ywcs2V/XUUGDBCSFKHHKvsgod+9en00P2Nj6wxjSkKgAagaLZR3/q4KaARQhQG6lkdNeox hRCmAIDFUM3LKujjG2nhye0Xsa6mfHk373K/G3vjQq/u0KjYbBZFYxDXsZyzfD18DrIBagAAmIYG PwUI0cJyumWQL3M9au3RwoJvTI4/yH2v5H75O1u/ODJ5s1Gv43NYXI1WyuPYtTmmcHW9BgBAYUwD IApQ6+uUwcggQMAChCgW9XxphIk7t1y923vG4ujEgsjihCMLvk44NA0zRiOLzRZpGTOVY/cxKz0G Tv/1aXxM4Q/Tu31Onb+NrhVe75N6Kqn9gmOaOpqmgE2BqM5oU+7q1m7f4xLeK4N3dSzcUP8AaKpJ uQIA2M4+8Xj31IBPmZhUKjYvttfV/Xc6XdqlqWezEFdnoATYPOR28KChS8990fk+WtbwGYzhaR1/ 9Tn5rFzdp9Xun9PhhydHUpxSS252On3gbuB5GmvYgGmjyL2gvafqYlLmkxCGgywWlQEXAHQUAxQC RGHU/KdgKAYohBACQL97b4iY1SHrROS1C8L0rElXfl3zfcK14AyrblPnA8AN1DDaSgG0vu7pDSyE AFiAkAEcbhLLAAAgAElEQVRTDecrNrKop+cwi003TM6gGdx4DaAxY2xVlymMWACIwgg9K3MUuqNq e0Sfbx+qb1tkP47rffvYPb87xw01NIuHaYFZpb2cfqStAWeGaYjLmDW//Z2KJ3mf70nMW/L4/tF5 GyMPT1qv1+t5HDZPp+PwKacOV/y6dv1uYzh64cj0s7wgikKIYYozbnRZPnv4XjAaW8drITbFNemZ UGfTYZojr16PAVgYEAUvmISDEaYRAgojqlUjDQFNAQBFIaD1RqCGfX0qJzHFeU1FXP4nT7LPTtqy 4dxbLBYyIECUyDzgXltRVnx2mdq9Ug3WGGOEEMJo/KmanYsGra2rvyqIK4p/K/ZAWrsre9T1LBaL ZTCCkGPT5Xa7oVM/3zHG8eEOANg/2W2Z8eIjXkLepf5nfr4ecvIHjZrNZrEQw0g0Cs8Cl8DQ1REr g9NmrmqZ2/9tpIH1OyxG78tvH8nf/oBrUsxm2Z47O5n7CLWezgVgpmUYYG4jQCYMhvTnb6BkAPwb IJz4sn0EfBabOk019MPNv94YlVdSq+QLeAlKFxs1AIDX9AMV8XsjPlLsvXXr2M3c4MIqLBa5eBUG DRt/1rMwunpPbtIsnZFJlnAblg0Ysio2NWbd9Ii9Z5MHnbicElyj57FtOva8799n7PFB8mvqX048 GMy2c6owxN0zAAAYAR4BhiMYUAb1O1EVc4ZbpV3NfhKbmZHQncm94A4tGlgIIYwBLluvnD8m9uaN vqevpnZ8otaLeNY+RV37jr/k4tE1ZtXMgGc9QQQoFSP4jQImAVpEoiEwViCEjiAM5QwX1zR54z4A HAAGx8PTgDLKCEWA4TgFUMM1Yg0AAKb0VYDgOGBsYLh0y96nAQDiAIDGNJPR+GK/97ZWREWGrQjQ C8+cPXOx382UStcaJKJN/o+9846PovgC+Jvd6y136b2RHjqBQEIJEFrovSMIgqIoYEfU2EAEsfAD BSmKCBhEei+hSQ2EACGEdNL79b47vz8unQQQC4rz/XzyR+5mZt/Mzc6+ffPem9aRWVHdhxwfOijs wozewY18gzb8lNxRb2H9eIG9D/eLCE57mNllXPyOkn3xs9+OLsk99uuZtJjb2SpPVuBqCIkddy5m 6KhDyyZ0KG7oHBsev0ObtHb2qtB7zLnjR48NPH+zOMjA4YNP57j0rn1HHsJOgSnTBrSrs3xghlOF EewFwAaWpppE0vEsiEXnMcYWBFDnsE5xWCWL8VEMSAJs42i3Glku7PnklUnnb6X0O3wqKTpLaXbg unirQnoNTQ6O7L1/7StD8+vz9EAWANqJML6uMFTfN5+ixi00JIwd+134QIdzZxITB51KymlTaeHx hT7BhZG9xpwK6RCZ+NnM7hoAABbwbUDwC2B0GZo4D7JcqhoA7QHMVlMWXv2cQr2tGOMdQa9PuP3b jfRBRy9ntdaZKZ4itE/m4DETd/sNGnEzvkG6hBfXn0k79uns2V2yivocPXG+5618vbtV5moIjOp/ q033fge+e2N8+sP8LRmTScsCOgEI7mKM7lPGpm5MSj+8csGcTjdu9T188kqPdJXOhXLxVXaOHX+p Y6eYw5/N61+Evp7TYNDxTQzoFwC41rTfLTF+9eUkSeDM6dsPJg09eu5uhJ4rQ37RA250jRu3t5Pu CHfXueyBwgC3ouJDpba+UDiDBbwTMFyEBsEWGFHZGJhdAHBd95AgDDRqV2XC0imf6n4+n5+cmhfK 5bL37N3cSgEAWECZALATAb5ilvo2agdZzWoMsB9jjDmIqQQAoGkoxyw6CAhbLUZWDwCAwawBDAcA gGagaRSmmmERvoIAyynM3mn4zYx1R+8c/mL287tPJg07cPpONzVDcV3a9U4bOOuVPRWv95+bg+wD rRSqzStmwQljt/ncUaQcTTw7MPFqXnipEYl4Lq0rwqPiLkUMjD381aSuD42OowBnYcC/Wkw6vsXU kpWQg8y0IUOlEljMWr0FAI4CBhdAbNF9YwsoDTDagQBf88+2LZC1MBhXIIz3AwY9jwY1QoCT1vbd 5tOx+s7WfUnDktKKA2knT1VYv7EXZk0cdPjW7m/b3ik2dJCIrJkNNblnlu2/lxA/d2HXgruH95xN 63E3x+jGOARq2wwYd7rnyFFHPxnWugzVKEwTvr97Zd/KBTNOn7/U/+iF1M7pSr0Tcmyl8ezc7070 0KF7qxX9M+Y8UhAAgUBokff6eEz1kduVufR656tNOfg+58j/EvjiZNnIUMU6qTysLPr1X+IeXoNA IPzV5J8/L8zJyblvbcKpK+1jXCS/iu3ctR7PJMx+ErIRCARCi2gSxjr1D1Rss3PtlN1r0fHeT1qe J8nnQ/2HhMgd8l16vLJu3kEse3gNAoHwV4LxJsHsaN8FbftM/6LvWzv9UzHmYYypkpTl4kU9PKb7 SLglQudOdyf8kNrh4a0RCATC38y+BRFdWrs63VD4DTs89stzT39+nWY4Nrd1aB9f6SlZ8ODfun14 noQnEwj/APBP3RXTurh8bS8WaxX+3ZIi+w5b0rt3j9cHdPL7wUPIKRfa+5f7jFz5ekIqfrSoQAKB QPg7wTie+nKE2+gwD4/bvgPe+nJ20YMPhX3awDeWKoa1dVnv4heZHD7x24EtHcJLIBD+fq5/3M1j eEePBZ1aOZ9xlYvKuTyRSSR3q/IMiTjSZsSi6csecnAzgfBnQZzcCb8bhOJZvLbTXh3frE8PcHM2 3Pzn5LP6W8AcsyS459XW/IAfjv8457e/I2MzgUB4NNovvlCIExK+Xndu886NR6866QoZgdjZz9x/ wsTCDe+/VPKnJokmEAiEvwKMMfUoCSafRhITEznEckUgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgE AoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQC gUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKB QCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFA IBAIBAKBQCAQCAQCgUAgEAgEAoFAIBCeUjAGNDtI6ggA3pKo550hHlNPWqanjeX9XcQeQvAEhyAP 99n7RE9aHgLhnwpZfAgEwlND8QdDhQzftIICuEmx5g1BoLF/0jI9bfAYw1CKggs0wDlA3H5PWh4C 4Z8KUbAIBMK/koVdQoJa8eBDiiddErlwZ1cAAEpsQoApEQDIMEZilofQExbzX0tO4iZBLzvucxyA FR6dx06fm4olAACAgQsAMoRAhgBxn6yUBMI/F86TFoBAIBAeBxOLfBCGhYAoLofHuwcAF5+0TE8T Jq49F7EwCQBigObsM7NwCAC0T1ouAuHfArFgEQh/AWuHSh3DHTh9ACAOAOKA365/32n/c3jScj0N YIzR/I4OoZcKi7poWUCYtaC80z+0VoTFdv8WT5QilsUAABRF4T6SG7IhEZ5d7Oyc+3ccPKvT6rIy yZOW/9/Aihh3x5dnzY4psWIFBgB9WZbz7smxvT3euOhZWwYjhMUCHr10VKC/u4NDrGdAt17P/7DP A2NMrIYEAhAL1lMF3jVC3nHeidHJBZpWAMAAxUF877H5r3z1/tbPhodoWqoXHyOI/eycuYfeytIA gGQuwWVx687t2D7cqejvk/7pArHcTgC6jQDgDgCAgNawDGckAJx4spL9eWCM6ROrn2m18dcrkedu lrhXVOtEIHGzuAa2q+w28pkbw2eNShnnjB5q8cAY04e/eTdgz4EDHY4l53sVl6klZo6c9QhsW9mh 7/Cs7lNGX3ktwr2iQRXaYDC8mFauf0HHAAWgh4ILv7woDenTPZUb9oIcMSwAAFWR6Xz722c/zCtT 9jIYGJec5LMFX096d8ObSXjVsgikeoz+oks/vemxbuvxqDMX0luVGBBf5NlaHTl00q0+06ZeXtBB ofy9bT6M/MPx9hu3Hovccz47+G5BpZ2VkiCJSytNuz7DsvpPmZD0RkxAIUIIP1juBPrAl/uCduy9 1Pnw9WJPncHEc/EPr2o7aGbasJcmX5nhd7/cLAUdi4vL190xsK4AANXZlyNpod0m/16Vb9I0VQ0I MJh0XOGFFaO3F5XNV+pMHZA127hvxVenC4rF7wFAyu/pJ8YYFZ/6wGHN+iNd91zIDcwpqJRZKQnI PIM07XqPzIybOv7Kgp6+xY/UVlK86Lsdye0TDl1rdzmz3MnMCiiJWytN1MCxdwYMGXr1xcHhJY/U Tspm8ZoNWzsknEprm5Jd7mA0Uxy+o7chuGu/ezEjp1yNmBKROQ4h5mH9urL9Rc+ftp3vuv9ynl9h hU5MSVws/m27FvcZ/cz1gXGDb8UFItOjyEMgEJ4g+MAonw5edqcBANf+ceUhlW3n/DyxpbdKjAF9 0Eu0RMhB1to6UteQ9Am/KCP+RtGfOtYNth8Q5kAVQM2YIn5Hdc+p3/R50nL9WexfOth/VLjDp64K UYqDTKQS8LgshShMcwRYILU3SB09sx2D+v3ca96mHhi3HMl38buJLtMiXBb5OMqSnexEVUI+l6EQ wojiYb5YYZI6uBc5eLc/EvXMx6PjE7EAAABjTG2c23fM4PbeuxUUMgHFZTzaDzo7dM7iN5cmnA+Y Fc7dTiHAHJ7UJBW7lDq7+Nx0EnHLKADMc+5YGDJty5Df21+cmsB7a1Do+DBnyWkHO1GViEOzNEVj nlBmkdi7FroFR/0y6KVvov8s603JkaniNwYFTw51Eh11kouKJEKemUNRmKK4mCuUWqUObmVSp7AL oSM/eHH22mN2LbWT8P5Y76GdvD91VYhvOsoEKh6HZmmKwkKRxCR1cCtwbtV5T8yclQPjE3Gjl+1f 3h4asnB4x+WtpIICBIDF7q3zogZPXTt5S2b0V31kU70kqBooLisSOajkjv7p7gpZpoAGM+JIGKee 76xOzLH9Vo9C+Z5npQti/WcEOQpPOslFJWIBz0JTFKZoLuYJZVapg1uJ1LX12fDxS2e9sWGPtKV2 MMboixf7dOwa5L7JRS7OthPzDRyawhTFwVyB1CpzcC128Aw5OXBm/IQF57GwxXaSZnO/mNGxT2cP 0U5nuTjbTiwwcmkaUxSNOXwxK1a4VEsc/VP8er3wybSV+zxaaudg/GTZ84PaP+flJL3gbCeqEPI4 TO09IpI5aOXOnumBEQO/nr3qSMijjhWBQHhC4AOjfNp7SROhgYIFiIvt/AedHrYmO7jZOhhQfE/R R0IOstTWkTqH3JmUoOz0N4r+1PE0K1jbXgyLjPSRnhDQlBU1nGtN/hDFZcXubdPbz/h2eHNK1pm1 o9ziwp1+kHIp4wPbQRTmysNKWg3+bF5CKuYB2JSsRb1bD/bnIhXFlZm6zt8+LxVjXurqsZKZrXkJ FALMc4vJ7jRpWe+YmBHylRMCJzmJqArguOGA6JffwhjTj9pfjDH9wdCgqd4iXjGNmpeRojms0Kdv Sve3j0T+gaEFAICC//V1mNnNZYmCz61u6Xq2P4S5EmeNR/TMlSN/UN+3/bz+5cGtY3zle8VcytxS G4iiWZ5jh3shI796JhHXK1kYY6r4zNdOvey4J2kA7B4xZv/LZ7E3AIBNwQIlCN3NLlELPx766grH LXM6hPVoJTsMwMESl/4XVl0rd3+UvmZ/2ddlShfnlXZ8jvrBfaUwT+au9Or1wiezE3CzCuXKMWE9 2jvzr3Fpimmxv4jCAnv/0oDxy+evxPcrWfj8WOHiOO85njJ+Hod68NjTfKnZqe2InQOWXg1o2k5G /CDZxLYOS5xEHFXLbQCmOUKLffjw43Erk9o8yngRCIQnRLMKFgBGIjeD94B3P0hobkEhCtZfwtOq YJ39cqx3H1/JkcYPQx4rVbiV+/t4pTtL+dVUIwWfxqKAYRem/FjYSMHHSWu5L3d1e0fCoYzQ4KHF E9lrvX197/o4ygqFCKzQoC2ua9fsvh+e6lHbxoKogP6tuKCiuDJjl1d/eR4AoGR5f/HM1oIECgBL I2eeDFiicQIAuLLhheBWEl46QgocGvP8xxjbFLVH4eqy2ND2rqJLdf1CCEvkzpWtfNzTFUKuplY5 RLSYdery2vebS7D4cccX41TeS9FerzkIaE3DceEK7PUeXj5ZPs7yfD5FNRoXyi6oOnzK/2Y1VGJT 4vs7jwiVbxbR9ZZpQBwsdfAo8/dyzZAJOLpG7bt2zeiw4HBsQ1myktba9ZRxj3MAsHuXsXtn3cQu ADUKlhhUHMegSo85R8bY5M4RDAr3+EIANBY7RybHny+7T+m4v6+JgtmRru/KeZS+XhYK84QOOk9v 30wfJ7sCXpO+0orwivYzN01qainM+jLWu6+X4CC3wbxEFIexd3IvauXpnCnh0saG7QhdInI7T986 sKlMHwwPHelvx8tvNL4cqcXF3SfP390pu2k7SOBsdu/95rLNuP43xxijD+K8p3qJqKqGZXlCO72v t9ddN7m4jAPA1rVBixjXLvN++PpipexhY0b4d0F8sP4DYH2xoPzGySn/mx9xAgDOPGl5CP9OMMbU 4l4u464V6noxNV4/SOhiUAQP2B7oYvzRX2KsNJfddSvJK3rhaqFmiJHBNGAGzKXXWp85eTYGANJr 28rMu+Jy6W71ML2V5ds+4YDYrUOqb6eun7XmlqVQ6rsitih75Mkc9ZxyI5YBADBVt71SLl4dgjE+ jx7i+9IUDmVg+YBZAAZYCnMA4JG38o4cSIkq0xhDWFuPge8VkxrYOuD9DtJ7mebCzHZJ13I/vKNn fDBjQPrsMxEpV3K9AODO75Gvlh2Th7W5mFE2rdLI2JzxEQf43r2TW/l5rvSRGVIV2jSusryi/42c 0pcLtFYnAABWlSUvyk4bPnCD+lcAqMIYo2Wjg2Kv5KmH6hmbpQ5xFBbXsJ473HycNrRl8qqs6uy2 N27kv3VLbQ5lAYO1/FZA4YlfZqxX4Wuz7FAVAABUNxFO9yDJfTGXYRgaMACwtJ5FD7UQ/jB+VqeL mVVTlGbW9uKHuFjoF3u5lZ/TF/5y8127qtu8irLSoddzKuYW6xkFAACjTHe4l5k2fPhe2AcAdX6l m35OHZRWaY621MxLjtBb49a571pXKNvV1slk0Oamd03NLlp4q5oJAAAwlKX5FGb9NmHyRXz+p65I DQBw+fXOrh/+evu5PJW5zpGf69zpnldQu6+8Zaoznkwhq60WdbiTUfzWnWpzAAAANpZxVUW3+n/+ 3u3NAJAKAHBl+TiXKzfKpxfoWYWtX3yw8+162dnX76sI+6pbjDLPwZiXPT0xVztBY8U8zOip6rsn Bvy0f0x3ADj4sHEjEAhPgJYsWACAgeJj+y7P7Xg1scixUZ3HsGBhnMH/Zv4I33Z+nl2kAk4PqdQ9 OixmevtXth53aW4rKGGGq5O7lBMNAL0AoBdH6h4duei4S9NyifExnKmhvNa15QA4Ma7tRofHN2Nt wBhzElfPdR3R2be9QiroLhAoevh3iIuY+ula7ySMm83Nsyxa5O4kgO41bfeS9Hg7DOIxhfF54Xev DfVr6+IQKeBIeko9OnQb+tJHfrjJlknCZ9Nde4d4d1JwOD0UUkV0j7Gvhm04h5v1CWnOghU9aXVv jA/yl84cEODrYt9VIVV0D+g6quPrmy67PorvDsaYuvTD2w7P9w9t7WwvjRJwpD1cg3p0GbZgaUBz 1sm6fscIPRUN+s3rvCAcAKPDK8faD4oI6CAB6OkcObrt2IQHW3W0Fxe5RDuLjnHq5hQPy0Kf2Td9 U45rw3I7X+/TMVDGu1u37ce1x/LWr3zVcDyvLenVzUPCz6sdH1pob/CbsuH1hlt3GRtnOA1wFhyq s0rQIiwKmr3zSI214PdYsJI3TQ8MkXDTEJLh4D5zPsUY8x823jVjjqb7yuMdabBtO1EKa/iI+MW1 cwxvihHMjbb/FtXIKHEKyZq6Lf+xtgkxxtScKL95DjTUbenxnCKKWk9ZP7hRuTtvSOOCHb8RNtjC ol0HZgx7a08AAEDZ6rGSGeHC7VTtuCEelgcOOj56U35gw2t9Mix0gjufrq5tQ+jeKSd84anetWWy jjWwYHUeu+fBFizMHxbiukIEFBY7R6QsPlferEtCg+vTUzt5vqWg662UPJeoex1nbG1k5cVnX1DE +il+ENRZphDmegy/OXlZYn004/GRDv1D7LfRdesdF7v3fOGn2YnYseH1XmzvON+Vh+osd1y3Pjmx C/d0qC3z5fTIft6CeqsTLfXVesV+tKDxOpBAz4r2na/gIENtOUreqTpk8JcDasvseKnDIGcBp6L2 e759q+KI1w+MbniPn3gnzqeXE++3Wqso4tkzDp1f//JR5yXh3wFJ0/BfgTWBOvVI/8MbD418kNPx g8A4kfPutKhu3Vr3/mDtgYs/FlVVHzRZ8AmjWXO8OOPCnl+XLP7Oq/OEufMP57o1rCdz9A5BiP4J AE4BQCJmLEeL8oqmNG2/pILrXFLFbgCARABIBI7kJNB2L3QDaKQw7fxiituILgFz31y1e31KbtVe g9F6nLEaTpQX3N6f+MN3m8dEjXt1+jeJvvd1gEONQBQ6BACnALGJwFqXfln9TOvhHccv+t/uq1uL tNrDVsZ80qwqOHr16K9bAgbOf777GqzAG6Klc3v7TV2x8ej69JKqA3oGn9SbjcfvXjm08+OXR37a fc6P7R42dggAu9MVnqM6zn5z66mU7dVa/RG90XC8LCdlX8LnC78L7P3O5GXlzStrAAAZB+Nlk3uH TJz36eY1p1KLf9XpTces2HhSXZZ1OGl/wvY3Og+O7/f6pvbN/bYsQ42lAB2x9RsSuRgvi58+stey Dee+uJVXvtcE6BRgznIlHxybuXQd+YknPItZ1tNa8z/NEZj8+/Q7/P0Mv0ZRWR5ebpkdFSiTqn2c WBlgqyrsAKBOeTJa9TyM6mWlKa7RJyw8p6FlKiDyNZWXnCqkbYoEAGYBGXV8XrnN+kQbsZUDwGJg kcXMPPKW3+8BIYSNZhZYbLsmQggEPDB2sm3xQLneiaPXWKU2CWnAtKvKxxlXPKjNFimeIzCAIbSK qZ/vCh/fa6ETZ15tJFPIZ5qOUua6Ax/V25RUGgk26fgAAFeqGYcbuZY2uMaaQ4nsTVyfvsd3zvDK aNAvNsqZe66dB/dW7WfG6kp3zcVjdb5AUo6V4YPt92AB86qq/8TnxaUpYj2YQqqZ2jmBwKGV/yWf 5yc2ij5EPb6p7iTDKXZ8ZKz9jFUqpRyzoU4R2ffjVVe9ThtWO3GQwNOkkLglro2Bygb9ZZ4b6Hza 3p6fVddOZZoLg6tCAWyKtNlQEVJiqb8HRfYOOYFjnz2NELLWtzOOCedar/tIqLq2sU4v5GiU4tp2 7tzMitCzjK0dxAFaEJg9YmTkxYbRnn0+FhdEd7I/SlO28cVmDUVVXw/95O6D70HCvwuyRfiUgyia RZihWAxg1RfL7l38ZdqYdX3Owu/cwsA4nvPO0DmTtl4ofLNIZQgxW9n6xZbRcKsL072rC5E3Lcjs t/WtV3r1XHp+yZm3o5IBAML7xqW2/unGnVIN+FgxIMZkEFVfPNUpBWNxO9TgIcExBN1Sgj/UbN9w pA5KXnCfKwMalNmyILbNJ18e+iCrXNNfpTc38HWxgqU810VTnuvCEWZ321um6jHk00uL9r8VWbdg I9tDEtV0CKHcE6033MtflVdaEak21785WrXlkqK75VHc4oowFyHj+FL1Pe6upOLZpTqrY90KaTJw SnNvh0BBfnC5lhc0duX5F3YsjMpscfwsucJLB9e8pdKU+6vMbF2Elak0y11dluvOlVRGbZyA3ddi /L85COkb1r24bJTncwu/ffN2oXJSucZojxt8Z1UWKfTKok4U7277isLKvj1M/MUY4yPNhO7XqDss okuSQvcX3/rsVrEqwshiBIAAwcN9vlknb1XPGLvtAWrWAQBhDk9katPD59z11Y3LWQ0eGCPAdQJw aKDk9hoAqFOeFD7+xXbUDWUxgCcGAIa1CjJv3vLHGNO1SlZW+ip5lpL1tLI1yg1NY8rDp1DqBCYA AHsRoxOLaB1WG+R3f1nyrG/Mc+6vVXTdJsCJ7EM78zvo2IrKPaui1KBj7TCrojMycmNn7CjfcnHL PP3aH7ZNPJWl7YsBgOJKGXnb2NN9/b0KP36cC6Wb2XadIy6WSEwWhFiMMU05hoVd6hcHyh1NimIA 3GiTUyrVI77YBADA5SKnMqBktePP4XH0Dm063is/3riNmFke6nUppRko29gdAwA2VPK4UOifj7HQ CyGDDkRWRymlpDQAlennI87N6f95+AsJ2yFz1uP0rjEqiunYtfM5jYNZjRBmMeZSLu3Czw7tAppd TYoiGhrNZUoq0VFIbK79/1Ymttcorc713zup9RznvKb3QLthA8rozRvLERhtZiNWzS1TW/zjMaYA EPYNHZbRN9bvfyxgxLKIlroGZvUZ7J53sok8GEEjezMSCY2s2M5g++8qJzPH7M1aa6zoFAewQ1Bh tJumsnErCSxP0SmLh8qtFmBoAAtYwOR89pzSEQAKf8dIEv7BEAXraQZR2DW4122Hyiv8W2WaQMAW 0OVf7nJp6/IZr5XgD1e4ogd6VdSCMUYrJ7aO23Im7+N8tcmrdtWiODwsEggNFGOgtQYznwUMjLFC UH7z8CgWeKJn1t58+Yc5bbI8B4Ayqp1j4qnSwj5WBnOB0QFtvhG04oDZGwDSaq/x6UDnSCXL1jh6 0sAXueb0njgo6Ydttk+Ov9Xd/8PvLy1LLdMOMtlySQKiaBAIxUY+ZbXqdQaxmcXIaqjiVeecj7u4 aYV5wrbCl7dP9MhvplegK7rudxtYf+AIWJmMp8NmA09ntHBrn84WTb486dD3byRjA2W0YD5PKLYI aNI2YqIAACAASURBVNZqNJn5JgtjUzCtGqTPO9HryqWYSQkYf9JSXhzMVnHzKyEM0VwskNiZ+NjI 6vQGoRUDAGbAokmzz7nGW7BuVqu7ALC7tp5yzSTF9C+PvH01q+o5DVOzaCMEfKHEIuRgo1FvEBmt DM2adbS2OLnT9R3rlsS5+ZYCQHLzPyYL2qKLftex1d9a9/jBQFOs0dUXrM3WqSFsZnj2ppmTPwUI qHm85AKAr2XZhMbljIarfrcq2YBaDYsW8LXSjl1vN7QEhHiH3uvb6tCxghRTqIYBmjEoBVVn1k9t Py4nb9KkSdd4ynTB++/+PD5Vbe5WKydX5l/cqW/PXREIWQAAZozzyr6iMxzJSKueYihJaVcld5MV MIOPByGb8k8BorG5RjmjWIQAuAAIMIt+17o3enLn37Zn/Ha7WKfvxmIGtHcORydv5i9+P3evNDmr ali5gZUDJQSBW7fL7fv2WNfbr97a8ruI2WRaGHN7+0IIS7B9UIAAPK2opr+1YLxcPCJ4SdtqQ71j tbSVT5opIKYKAICicSPNAgMgK2bv34KOjLSydIoW2coAgA6stNVxgxL4AGDwjZlu6tL9k71njhZH l6tLPNSFzFhKbcxAQOXYtHKEgG1gMUWIg2wX5DKWhxxR1H+zflH/25sXQVhN/VwA8GXu62vWm3aD +37bRm2qSfuAEIgDA29XuvWsy91VZRHINMb6sUACgckoc73/N/BuZZSwWMcBAAsAYGyh1GqDIhVq eoLfOzEWOp2qbQYgkwUA80sN5cGYermnb5tCNVNnaRK4OObRET0K4BAAQCWvVIvtmVr1FyGM7Oy1 dyt9G60LCCH80YSuagnCVh0AHwDAwpjFRbkl5PDspwiiYD3NIAq4gb1TensW3yw7m764zMhKWGMl ryTtwuRTH/90CsC2JDyMW8v7+u84lzu/UFOrXFHAk/qXyF0UO4O8HG7wq9IkJYXl/QpVht5KC+Zj xkRVpZ7od+ZAu+lrMf4QIWT5elbMaW9BcUWGjnEDwGA06r3PbNsTAjUKVkX6Rslv17VdGSvLAwBA XAHm+sZcmzPUPvsHAMA4gTc9Yu6Um5XavrXKFSVwNCjcfA54ujicCZCojXl37nQtrlYPL9SxDpjV QmXRlX5XfvpuOMZ4DULoPqsGCzTi2wVmOzjLd4X7yO8wRakOBcUVQ++pjN2MjG07xGzSCmm+xCL3 bHXKxUFy1E+kUlZXlodk5VePK9ebXQEAWIuGW3b1SveKc5NkcL9rcO2PAbTEXeno7r1HqnBK9uEU MNXZ6VEFKv3AUj1WAACYlbddc29ee2b22qrEdXPsVQAAn++9NOBqQfXEWuUKcWVWmbPvWWcX50Nt XcyVhXfvhFVUVI7JUjE+GMygrUxpe233lukpGN9tZB1s2G/WilgA4PDEFmdHRRGXphgnd+cSoQAe aPlBKJ4FiH9gUkRcslw8Z8iyKXlGq1/9XGmV3TcuKvH7LQ3a6h1vPPB23Ldp5ecCLhZrBuqsDFdf eLn1nUNZ6zQudvlIUy4uKVd56rBtjRLY+5a5dp+4qkPcgNOnasxDbi+fLd+19PmPVFuPJKek53sJ RdxCuYNLJguwFwDyAUEmHwx6AAArV1AFCH+HEHbBiE2EBta0h+E/52jWiJ3uG0uqDGFFZmzHGkok Nw6sm3sDMGAMiOZJrFKf6NNtY8a+d+DNXmmP2m5Taiwu5oeVWzv1h6iMCm2cri7QwNPg5u554PBM mRLNArBaRNVyYA2FYFOcrEarWHn9SgDGmGp8H2gRjRpu+2FgMeKVl9jMmQghnH9+5a855l+0O09c 72zi0azMwekYKsNGjGAVsMAijGst4QzC7AkAwIBQIdD8Jhabx+vrF2/ujslQ6voZavsq8tb5envv 3/MsaNFM22ccIYeHG2iUCBBG+P77HaRmjKCRNQwZdEZR+ana7d8IC9h0rxZJ/HhQYEpO6eQKxqYU AVeO7RSep1Z82Cl7wEcAUK3iAEU3sbk1D0IMphrIwzCYV62s/ku2ugkEwh+kqZM7ojisfMDHG/Yv fda/l6d4H7fWCRTxsLztzN2z99kc3h/m5P5uZ4fp3iKqLp8LJfDWhA776JXzDRyrd86M8unnI9oh oFFNDhoKCz36p7yQcCcYACDj7Q5Oo0OlB2vbAK4z69P1hY9wjbNw2qrYNsH2gpu139NCd3XEq7um 1ra/59m2wT08hZfr6lNSxqvThO8Xnan398IH42UTg+Qr5BTU9AVhx85TDkZ9g50BAD7rKXnRWYS0 tW1wRL6VnSevmoIbOMVvfLZNrKeMl1t3HcTFIu/+v41+95fwuuuUvCae0U6ySsSpddClsMi+2623 jxcE1ZZp6uROcRzMIf1eWrImz6ZMAQDkremumBgkWi1tMPYcuzYFE7843g0AIDl+hHxcmPSXOlmA jxX+fU5OXlXvJ4NxEndhN485Hlykrvv9/Hvc6PxJavvaMkt7iBc4CFB9KDzFZ+18u14Ijh46c+jQ UV2fmz6587MfbQiendR8cMCjgjGmFsQGTvIRc2qf7ZjiORoDhn+2qKXAg7WvDg2J8xLtFNONUzI0 /OPJfSsCxyx5bWwCfmLH3Nz8bpbL8EDZnqaycfjuupBeU7/q9/KmwL/jiJi9i4f69fCSHa67l4GL 5cFDTgxbmVmXFuHs0kmK4Z7843VO7sDFCr/YC3GfHK2bExhjtGluVPuunqL6ewoQ9uo+NeHFNPyP ONJp66v9Q7p6SE7VBVUgHrZvPfbA8NWFXg3LvdMrdKQfp37+c7163XOfvCe6aXtYtdI+ylW2p3bs EM1jHeOWfRPTJMlqS+T99IJiRKjjGjGF6tYXoVunu91eP9mr7hpVCXYDHUW7+bUyc4SsqHv8xrXN 3FsfT+w81JVD1aXjEHhH5nrOO9+raTnCvxfi5P6UQwNLvf/WhvyJPdzWeUg5tr19bAZN5uG+Zzbv mWCL2mrZcIHxakmyntulVM/W5WgRh/a66t17dEIUQobaz0ZvOJ/33ACf7xW26BkAYIFRp/mcSyqI AAAIWLKyWmHvcEZG12wTWcqRkalqP+4UOAAAJB5Ibqczm+uyInOcO+cFBbrVHd57odTaNqvUGFb7 P8+9dQGn9cSNSxocn4Hi4tUjw2GfhwNdUCM9qEqrgnDqwfsiFgEQINqnOmZoxwsNtyUmzIpNc+Bw CmtvDIrLZ8Tt4s7u/GhMal1N1xW6mDBpCseWwwls66NaWKyiW8yoDbSn0cM37ORcH1Rn4fKZe676 2bigHfZiXv2RROZixc0cXTsAgDtGk9/1XH1dRBotd9Pw2k786ad5/W7WyYIiLEN9dEfCPbl18unV Os+ypPP+zQuCgC8NKuo37dXFd87t3bhv368Xv/v+pysb352Zvi4CPfDt/UFgjNEXg/36n7yW8+49 ndWWZJKWYEn44KPh/Qf9GIHubztpX7wo7fz1vplKUyc907ITmEVTbleedrF/TvKxdk/inLuc+Pby b3ZcmpRSbLz/dAOpd7Wi3chDx76ekYEQwhgn0PFvzIkYP378tDFjxkyb8tI7o1/57mYz8+/3s29B N4/N20/GXyvSxNoGEwHXqW2+a/T4NXsXBtT5/3V/a4Q6rI37YSmNaixEFlDlX4i4/tOSlRGDx0/w 9/fuPm1Q52fX7L7xzbUifYNoYQQUwmYn10e37v1VHHgxyidh928fXi/R9rAtGBTw3Dtlu0SPWL3n xea2/P9a7iwbJl26/OdXfsuunKpjbQoZJfXWOnSd/N36z3pf+LvlIfw7IFuETzsIANYBzHl1yolr t77esTlV+ZKRZTmMvkRy77ftz/VcHHR5AGZb1rD+t15mwQbfun0hJARPN9frA+aHKo8saFw0PLrH TfdtWcWlAM4sAFgYkzD/Zro/AABCva3rhnpeuCznFNyotPgCYKgqrQhP277XE2NcOaaVUwe1npXb rsHDDiGhF+lukUUAttDo1wa/1arcCnUWM8pcCuXH3+kPAG2gPqcR++Elg2+lCdU5kbOVJY4ifUEL kTkcMDY5kQ6zXEwB1D/FEWBKKLpPOeCKxUaA2m0IDECZEMtYW3z4Y6DBYrx/28Jv0OAs0ffpZRSA NwsALLZwS4oqXAAAWF2pX4kV6pQ2yqpljbc3dQSbz0atDoinHdHKBRxKXtdndbWUX57VKHVCPQgw dtUEtwvPfNgZdo8KxhitHu7eY1tSxdKb1dYQDACAeCD0jLoa2HPkJ3tebHPfAxHjRM6bPadM25FS 8kGhnnEAAOCJ7PVSe8eLuqqiDKmYKxSz1i5F1ZpgM6PjqG4f7JduMisGKuznAMC1P0PuR+Ha2x2c PjmUvXBXivaFSiNjB2Ab+Nof0lp1zT354MZ32764u/rG6hGXAPIEl4/un3E0pWiuFWMQ+PXIdmYH PgMApX9EjuOvRLqsP5zyzrF7hvG6mtxWlMRP4xox5quVG6bsj9tYZ+wFhMYxBxb23Xvxetngs8W6 GCsAsFYdpzjtdO/iNOiJMcY5OfkIMKYbTwAe0Ihrspc/eKv4r2bf8+08Nh69Hn/8nmFE7VY9LQuo du80ZsWP3046FrF28t8qT/7KscJlWw+/sC9DN6/cZLOiIp6TxT58+JYx02Z8F47QQ7c6Cf9NiAXr P4BBAQhFxOuHxLZa386JUxOWzYC+4mZ41und06xyPzkAbvZhe6ewmsdYLHWhy4iSsDyEihc046tg rhKp3Tissk7LYBgOriq1q00d8Nys7hkSO/Gt2knHlGa6igxZ4XD0WddSiglX10SLUSIfvbPc8dSP 7Wp8iG7voMFidGQa6D3GsmxvbeGtdwDgfwCwquZv9a0i0+slamu9cmE1UMC1/qHcMg9QP/8wXJFE 68BYtXXaEgbKpFZKMMaUUVntwED99oVFW2Gnunt+LgCshvo+/y+/2vpxRrm5/jwzxkxRtFnQcjoO BGB8PD/s5tj2jG/XrdcqliaXW9qzGAAQDUKXNukde496P+nL4Veaq3Puo3fDD98pf7GoRrmi+QqT c7ep6yfM/+JZg07zQlnZuedmx0U8H2YvuEwjAIytoM091/H6zi2z/0im9N8DTo3nbbtcOmPPDfWL NuUKAdelQ354+25fBMs5GQgAgDUjY25it5wz29/vsiQtCH78UQxmjZe15nbicrDe3tfvoQdeP4i8 NYMV287deuNojmGaqibalRa66rzb9/9m8cI56+PQ/YcFx31+PCMuNvijNvaCJD6FMAIAjDHU5Bnj AOJQEodWxV7OdgV1lSgJUFZByTyAP29y/E4ylvRw2nE+453jeYbxWottW40We2h8OsZ9/dnShc1a Qn+Pue2+N6CHPAHxwXn8tXuPP7snXfdaoY61BwBAXBnjGNRz15jxI5d9OfKPHfD9t5tjCX8rRMH6 DzF05eW0rgGu37ryKVsGZHMVXZmaOG5vJqeHtYWdF2S9LygZUyxT6y/TCCUowcQ0SMoHAJjB9akR hm0r7iRBFxQ82wOBNRcKipWazl9vygzSVavrEhOKPP0zOKH9GuXDYTBD40brEQKaooBD0w/4o4Di UDSHw/vHJu9jrYJaf55aEDZbOQAAFsBN+gxAPbTPCCgOhbhcLg/+hvU7YWZQlzWJRcsvF1lqov24 IHRulxExcuZb5zbNOdJccAEAwJH9t/sUaaytah3hufZds2ImvbBm9WuD8xBCGKFw86IfE09P6emx Ucyl9QAA2KqjtPfO9Pz1cPHfcjjuzxtOhx69Uv5cucGWG4kWe+oc2oxbtTf5/KIxnbw/aCXkFCEA AKsOae/s75ez+9OPFu52ji0s0rW1tUADnxaV9OzjUfW4MuSvHGC/5PtTb/+aqp9TVRMpRwtc9Z4R Q9eNfnPB8jn97FXN1UMI4dc2Xz01eWz0MwM6+n2lEAluSqXSArlcViwUKTJdg/tsnzBq4PzWUnOd dZESKfRGnncOekIWmYyvezgt2XH1vd3phhkqs82/kxZ6any7jFg17f1XvhwXjppVVM1Gk6nG3wwA ADBgRKNmXi40PMRQFNXgZsNikUDrFNO8SzpOnC54f8WWZzdfU72br2GdAAAQLWOcgmN395nxwrvf Luide18lhdCCWMba6M7DGCmE99+LDKIopsE9yqGRyd7F6YFBJIR/F2SL8D8EQogt/bLv7oySqt4n c7TjjSyAqTrVKVkJji35tni7y800t1oPYHO3wqyeNtPY7rYtaWSjl0e+vUBcxVJiXPMxoimGsrfX 1OY1QgjhY6+1P787T1daaTZ7A2ZQ1c1bUcneBlW+krE5q1MykErdL737ftu84fE1DYcpMKJ5emQz syEAAKG9d4lELDyCVYWVQKEWXhRYMPC4ZopiMpr//skjBpVAj2gBrjcIsrRIYEQIsRueDdUjqFdQ uCIHrdzZ+yiuysx9UJ9NHCFm+fgSPMi57k9g54yAjv87kb/0UoElyooBAXBAIG+d1TZ26qIza17Y 19JxNhhjeoK7xMdSd0QKAvAIylPwnYqblvUIC70rOZinVwOIADBYGa3DrZRMTwC42rTsn41aVdI2 08DU+QWKZA73omfOSvRDyIjx178YYr6UJVy6F19otDpji5ZTlbxj5K+5/MhiNWvLMs6VYywKSv2q E5R+/RjXz4lvL1+648r8X28Z51TXKFcU19XkFhq3fuzijz5dMcD1gQlNa5Tb2wkJY18bqnrbUa9X t7JarXyxvWeBfZdJeRUfd+x2uthU56sntJcXuvYfmlZw6u3HkPaPkRQf5Lhsy63X96QZZ9SmZKB4 HgavNkPXTP1kyefxUXYtWoqcOVa1TIi0YLEdqYSNBiFPW3Z/QETWbZEGY0ltrhCEeKxUKq4KB8D3 5Rlb24n7wZJDU7Zc0759T83afOgoO9beJ+bgwJffW7R5dvu7zUszxOJmhyppFWBgwPZyqiq3M1pL udAgahJjjD6c1EGuxfVJZTk0V+fp66a78QjjRfh3QBSs/xgu80+Ufjc2fN2d8owu2WqzH9SEmrdU Xjh8oBZv2FREg9qmNmEtlCsN4W9sBTE0CbPW3roaUAbYqfapTtPI6BgUmK88Wl8mvFffWyE/3Ukr VoO3FWOwFP4WnGgw21XWhD1z7JxUfN+oS8MR0tTXWmulOWHZMoQsyppjc7DYy6AY9M76u+sGnXtw j6/DoVXPP/oA/UUgAOA0c7cVXTvnpqLBvlYToSmOxdnbq1gFACIH9xw7lKHXAYgAADBPzgg6L9iX v2Pa9w++2l1IPfAZIPTZn9mFRhxY0KbNit1Zn5y7Z+xtwYAAKBDYBee3HTT53Ytb5u95yFmBlBHR HLahzUFZKePpcu4PUddWic3sH4tufFxMeqOcgYbO95jlC4RWAACEXjbhlNc2m+dtt9t+qfitChNj x1j03LwyvU9taa5UUebVZ1QiamYL72HghLGSV1YlzvslRTWvXM/IAAAojoPZs03/zVPWLF6ypKtr 2aO2NW7cDgZgRyk08ANL3nRMnnAz75kcI3YCAABaBHxZcPL0aeF3khb9Xmn/GFUJY+3e+vL4gl03 Vc9XGdkaRdLJ5NNh8HfPfb9s+aJQ2QMtgN3bCssPFvILQW1wBwBgVUUyEZvfqmlaivO/HnbFrKk+ 4ICWm11lKCu+iZUV43jOZ8PXj9ucVPVuttJii1ikxNjBL+rYwFfmvdWycgUAANaQEFkGVWg2A8Py gbEAqrztdVcpcAaAnLpSp3rThvLCQEvdMTw84ICopF93cQU5jPDpgWwR/geZtWT5b4PChNskNHpg YkkAAPD/VB0AKMWJV/+QqL5xvkfVwdUxDc+NS/p0rN2WXWnjqw1Mjf8TAprrXh7V2bORQ7LbEGlV TDu70xza5kthNheJ7pVW+tduFQlELjmRk0Y38ttBCGFvypLqb0fVRdsZi1O89bcSZszbkuHZsCzG GK2eG+f60tSRz498fWuvJxF11ixsCU+pKmqLG5yriFPjeT/vTO6nMtQfLosoua5NK9ltAACJFWe3 dqDqosOsqnw7zc2tk8d/fum+o3m2xE+WvTqp/+TRr6wanZD64DMF/yinF3cNXbk/75Pf7hn6W1iM AGjg24XktY+b/tqlra8mNE0W2RSEkMXLji3lcWvKYRbY0ksB1zLSoxvOKbxhmPTM2RsDNAxbZ43g Iq46pLX/IysXfwShVFLJgfp7RK9Xep7atLF7Ys1DEbVboVu14Y01YyM9NokpqvG9RAtZsV//489M 7nD6914XJ4yVvLHu4vNbryoXlukZOQAAxXU0urUZtGHc/FcXL+nq/9gO8zg1lbdmwWD/Fcv3LDqV UT3WUpMolCt1LwsYMGnbS57ogfmr/mxwwli791afffmXZPW8SgMrBQCgeC46rw5D1ox/+Z34RaGy h8oT/dqIEolIklqrhWNzMbegIHvwiO1FddZHjNdyN51Q9SuvqrfYcZ3bFAK4NspbhpNmc7+asGXk 2nNlH2VXW7wBABAlZu19exyMnf7cgp9ejr39IFkQQji4TeBVGU3XbN0yYNZlBWxbvzO24dw+vNvS 6vRV5SBrzfgjvpQBp8hb833g8Y5ZIvwjIRas/yAoMM60/62+G27kXOh1tlR/X76YRmURwuffbHP8 /A/qSaUlhggMABZNqlPy0e+XtorY5913wKhUB/M93lvrjg6+VaSfpK2JcEKUmJWHxR5rH9juzuZG 7cWz61/qccbjbGVFltXqBmBzvgUAQBwh5rlFJr8yUpH1cxM55r3cIe18btXRdFXVczoWEFg1dNGV 3ZP3fZYlD2gXtTvEz71IoM6gI0M8vBBYh9zO0w0Ah8pb/VjDQozxb39WxNzjwlqK+amnEhb6dUkW 9uw34qoHKsCDx66KSC9Wzq6oeWsHoEDg2SVN5uh2CwBgyMqepedSMnZeKy9oX2HBAsBmUN490+fM t/NWBbaL3url7pTthkuZ7Kw859UJJ2Kz8tUj1HSp7l6ljk7CeFdzDsF/lHMfRQd/uCV16bksbZy5 9uHAczaHdYs93sG1tGr65MnRU6dObKzUWgEsYldWFt49c92C0cUAAD2j3S7uyc8przTbUjpYdLku SdtWfhjw2w6voUNH3uZW3hEO+eJczJUcwyRTzZwCig9IGpbRv6dd5v4/u2PNIBC73AyQ3C66Xg0B AACMqsBOfeW7BZPanJJGDnrmapCg2Bo9eJkHAuzBBdzICoIogVXhH5zWvr38dzm443PPShd+cGz2 tgtlb1borTWRoVyQe3W6E9uvzW8VR5cGT504MfT+lZsDrG+XqlkfvpTWu0HG/KS1a7lrdn0VmZat diqrNEi7TJkYYqko7JtRUN2xNokr4iksitbDd4x+btCJy5///nF6XPCu6fJ5Xx178efLlQurDLVn 9/HBya9Lap8+QZdKDr3ZeurEiVSjvloBgCMA1jOyfMuSOekIIQa1WqZa0tPj1E0RPTxfzygAWFDd Otz78ueG96NiR+3y5ZeZ+gUvisgvVz5Xbqk5EouyAxf/kMSgWXE5x7+okQev5S6fsHzE+uOFH+dU mf1snyIQ2IeVxgyJOSLI3OM0deJE5+aemkbHcEO3sX1uLoyKMnh5ut/q6sJL2p1riWMBwKIulpcc /3p+YK+TvAljRqRW56Y6LN99bcINjaVNzcoHfLFXSeu4QUcf9nJC+HdBFKz/KIOXHs9JutFqzb0z ecF5WuaBB4x2+/TrtAHJMzcWqu4FlBuscsBWMJYnBd9TiZdrFLJKjkXLqazWOpjrrEUUSH26pkT0 7/fdwqj6XFm1tOfr09t78q9npVsbHQpNcWVa/559TjXMr1UL6rdDtWly+/V5Rfp2SZXGSAsAsJZq fu6Ns6MEIulgTWl2Jcdq4FSrdQq92Wp7mS292ele6u1R+21h/fqmbf69YDBVpXvla/I/1CjsKrOw HpRKrYPOwtTdg7TIR+vZvsu2TdPDyr6fAYBQvPXYm7EJt+4qI08VakbpMFDA6qnijMs9uHxRt+oS u8q7YGI1aq1CZTDXHCWSbn/v5tUp+9PhHAAUtSTNY/UAJ3Lmho6adT5TPdjEsvVbZ6yGykv6Ja7s JsRCs9vNLGCBn8W9wvUDAPgRACB2/KjLPS6vPbQrVTXdwGAaWAtoCq+2NVZmrNDKRZWUScuvUusV Jqb2zEsEXKF3lW/0wJ/mBUgqXv4zO9YCk4d5Zpw6a/9zzrWK11Us5gEwoC2+6a8rz//YVCarKER6 i1qpdNSYrPym2ju2qHiF53dMnfeS72UAOPao11z5/omI40klL5foLPX3JGKxofy67/EtNz6xOaw1 A8WluG7iM8OnV88FgDrHd43+gliVWbw4s9TYXWcwC7KTKxulZkC0nHUO7HNw+Ky4L94Mabgt/9ez bOWx6OPXy18sN1jk9Z8yWFOcFHh0c9KylvqKKQEl8BQfuQHwCgDoAABmzWh35EKR6mh5jnackQHE miv5pcn7ZhgVjsPzKKOlqlLlbGDYuoOlJW5h6V7t+m5f08Bxfse0DZ6HTxW8nlFpDKofIwwWXY7d hR1fvUY94PQfyp7Jd/HvMRUAcjrMS6jodipg/Y2q3PaZasYdwAq64pSwfHXecr2MX2XWaqTVGoOs dg+d4kqsTm0G7R00tuulU+8+5mAS/pEQBes/CkII4/0vHLqalRBbnlE5Xc+27IeFUG9rWeLYHyv1 Fvs918peqTKanRgWg9Ws45aX6hrlW6I4QmznEZ7cqv/kd/e/2z8ZvXd/e51WrFDaX55xVpKh769l cd2ix1G0KWgd5HQhqQU5pm9JTlJNjn7DfPL6J7erzF0MZisPAINRr+Yb9Wr3hmVpnp3Vzrtzokfn vjuH1HroPybUn7CRLpB7VsuxVlepUXpUlunvSzxJ8ZxMHq17/RQ7esIvDf1G+i07fm/z3MHvmQ6e x5dLtIM1RosIA4DFpOdUlDZuh+KKsMgh7KZ3dNz3wPwVWw3OVHGp1tvKso3WDWzVcqoqtG4tCreM iQAAIABJREFU1QIAQHwxw3dU1+X0su+3THV6ceQylSVNeirbMFRvtggxBrAY1fzSksa/JaI5mCP0 LA/sOuSLJfOe3fV3WSNR7++NifGDvi1TXnA9W6CbUG2yiAEDYKuSqipTOjd2DKKBJxQZuMhs0etN MgwsmIsvBxcmrn17+IprhXte6/jAraVacnI09jq9pXEmdcwgg6ZUXqgBeQvVABAfhEy1u4XTeLaa VDrKUKmWVmoYcUMTG6L4wJcqKlyCY3fEjpyyct30vlmPIt+fSXa+ztFgMNs3+hBbkV5drNCrQdFC NQBKBGJQumoauLg4zzhY8uOcLkvL96e6Xi8zRhktDJdlLFR1RbFjw7OrEMUBkWNgrme/aZ9+9dXg cxENog/uZFeJVEqTR9PJZTVUiIoN4P2gvnANlUip1NuO+UII4/MLDt/J3/aFIb3ytSKN1QVjDCad UlikA4/6Wgi4fKlJ0WbIgU6TJn3+dyu4hL8eomA9dTRaYBHglqLNANCQb6p/nhm8IbtUHX1baal/ a6MAsVRjhcu59w4tzl+5UjDvxzsnkoumaw3GtmqNwUVvtPAxR4AFUoVKIBIX8uyCzgyZNHW9+6Lx 11sK0Ueot/Xzvh4X/WR08U2l1eZ/hHjg1CbigqNfZItWl5oH65nvF4+Y/uPe5GezyzR9jGZzgFpt sDdYgeLyuYzQzqGS5kkyhW4dj496ae6Gr5/pcQ99VDcaFGqcuoDm0I1fSxHFRajxfYGsVuY+nyZk s9TU18VA4wZjRrOYoho8AESBvW6N6+72xelfNk6oMliiKpV6dxMLlEBipxPKnTIEzp12j3znvW+/ Gu5W3vRa09YcSDv49YwXv9/x24WkjIohZsYaolLpnfUWlkNxaCyU2au4AlkOLW91Pnr87O9+fXfk zUZjj4BCqHG/mQe9jj8A1KIJ5SH1ELJJ0YBeH1/KSPpx9vwPV5+5dDO/cqjVbAqq1pqcDEYLF1N8 LBCLDEKJXTElcrru03Xc5hc/Wnh06OMepPyY9I4/VHB+/YI3uJuPJqdkFY8ymy3BlRqji8HEcIAj xCKxUCuRiIoMZnG2X+uuJ/s45xh2HT7/Ro7S7A2sGZTp53pf/nHph7O+uzh//XNdCx52PUQBoh4z vQaFmveppRBQiKKByxWxAolILRSKChjkeKPtgEk748b2OfL6gHaPdOj7nw3nD6QRaa6vU9deTtm0 ePRzP+y9PDu3VB2rN1r8q3UmqZWhEFcosUjs7AoFIvsrkYMnbBz41fMnmm6h83g8aHKfPDIINV5n UdQXhvyEBavtfj6bs+9C1nSThWlXpTW66o1WLtACLJTKNCKJLN3ZO2zfkNkv/LDsmTb3Hue6hH82 RMF6mrBaqwDYlQCQAABsTXBX+u3b0KIz+7j1317a9uvA+ZkAfiZbPiYKYahiWDqvaVnktdAAADtv 7vny3Lafd4TtTbzjmVtaLWYFcqtnaFRVt7gxudMmjb/d2w8Z4Z0JDxR1VA9u8s4c7nxQWl0BgAUk wq4uDpeW9wf9iod0c/rHu7Mwxu+fXPXyxvU7T4adv5blVKTBPJlMagrq1q+0y7SZd1aO6p7bVMFD CBIB8HwA4AJgQAhUVj3VyGFarTEpAeFlGMANAIBlgTWbzPdFTiOKvYQBFgCA7a0VQA0Uty5KCDHo Fgb0FgBIAAB4PCq3eOzyxK3d3E9/+9OPHXcdS/Mpt1AcN7/Q6j7PvJ42e8HwOw/ymYp7eVM5xvir CzsWJ/y05XjYid9uedyrNAu4ApHVr02Xik7jZ2QufH7k3XCEzE2thoiF44CxBurud1zNioSP4cwc ZgWEv2MxnIJm8qA9AASYZSmKvS/iM2LqumKM8RdXtn+y48etu0IPXct3KSqrFlu4ctbBy08dOWD8 vZHvPZM2WS6vnrHl1d8v8p9A1KwvqjDGa278+uaejT8cDd1zOde9sEwnpAWOVo9WrVSxcTH3Wk14 N2NhOKpKTugmzE4VZ+cozX4AgDGjRhX5acaS3PRHGi8O4l4D29YXD37PGGNA/2fvvsOjqNq/gX/P zGzfTe89tEACoYXeQu+dANKkIyAKiA1bsCGKgIgiovQaeu+EXhMgQCAkkN572c3WmfP+EUBA8EHF F5/fcz7XxQVX9swps7OZm3PO3EuBLEeL/WNL4ZKT3gCCrzle4a608zD7BweXtu8zNPXVdjXvhIWF VUb/8idOxAtGiXieEryBquvyT11PhCOpyqckRB3z+bYkSqM+WDtn4+p1u2JrX7xT6Fhh4nidS/XK pl37pA0eNjJuTPvA0h2L3/ldpXITyQHog8/sn+oPJaRCEE2PPXzgO3ihEcC2K/u/PBW1fGu97ZeS fdJyDGpJ5SR61Qkr7vPK5Pj5r3dJ+g9P3DIMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAM wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMw/wDKKWkMaCGS5AOE5fJ/ok2oiPDhdDQUE3j ZTF/qv7F07orglyg82o8UQ1KyT/Rt7+LRkXwXUJDNd2nLVa87L78r+FedgcYhmGYf6fPezl7y2R2 TQOajw7Yv3+/or+/vA6AplV/ZE3V9tUbt+gzpcb+pKTf3bzj4+PlM3rWq+avljWyd6nRqMe4z/3j KZX/2T4Unv1aq9Vyv6g44YyL2aPLXxlHXNwazYYNG9yjoqO1T3v95qXbg/XFJcfK9x5/jVLKP0+d G95sE3rw3K0fCsv5KyUWaUPE91dd/krfXrT46B+0GzZscN8TE6MGgPVRF8MLSjIPxMfnREZlUNXL 7t//EhZgMQzDML9DKQiximM50DNEtM7S2Aq9QOgPAM4BOA+IF8ymotP34k7vmDHu01kD1hZ4Pjg2 Z3Eb108n9H392I3MbSVW8bTRUHjq6ukdUQN6TpvccXW585/pR7nSgQOohwT4ERDNnx9HJHdx9fpu ixb8uHzjlnMDYij93SxVVrmdVqOy08oNJfZ4jvsijf9Bu3vv5VnHb5WOtLkElXk6qeI0IrH+2b69 aJRGCoe37+q7cMFPy9duOtULAFJK1CqZykmrMJY7orzguYJH5sVgARbDMAzzdBQcAJ4SUnWvkCSe 8O40KLjVhjbtWn3YoUngUnlRol1y7OnZV9b9PJhSSihdrPhwW9qYI1cyIpNMPva1Wnb5qWNDn58c C647pZze82n+zoWjnhbkAEBkRLDc3d1d4+XVWB0ZHS0AgIPNTAFQQkBlMkJiGkPm7u6uaTxx4mN1 UErJ6PBwpbu7u8anRYQqKqpqJipz5iHF7du3Q67GXut961ZSwyWrUn8XpLUf3ndno5Zhk9r1bLYa gK0FoKrqAxVGhwcovby81BGRkQ9m38iRo5c9rxYiGBrX8mr95iy+t+W1b1ZOb1AGVC03NvbyUsM9 VBMRGfVwxq47oHB3D9VERMXLw8PDlS1mLFBNbNxY5g5ogiOj5MuWTZQ19vJSB4SHKymlhEZF8C18 fFReXo3V4ZGRwuNjjeQeG+v9Wbdbc04o79y8FXo19mrvhPi7oRE/xGubTxp9umHrllM79Gj5bUSw q+FhHZGRXEQLHxXgrgkIH62MpJQDgMhwCE/2yadFhIref51hGIZhmL+BUpAvujh8opDpxICmI348 uXtNYH8//iSRBZuad/tsAKWUo/FR8g9aaz9TyzSid+jANfGUajcMDKjdylN2jWhqF7ec8P3AFEqV lCYp3utTL6K6o116QMfXt7+yQe/+eFuUmze2VVjX+l4rNErNHZVj4LWGvSZ91n1enE/RhcV27XT8 MbljtdIm3casqutlf0SrsrtdveXgxeOWnPUHALpmpGbm8C5DGtfy2qtS6O7q3Gtfajbonbciz1a4 vV5L+Ym7ii8ECBUUduVa36E7F5zLcHq0/Q8aqSe66Fzi1I1mf1B+e7tzKw23Weda/Xz3PkPm1/Nz PqRVO8TXaTN46fSl5wOOT/ALCa+mPE4IsXK8zCpX2mVX7/vJF5GUKpdM6FhraOsaX3lpVXGC0vVO tWY914ZPXt6cUiob6CjM1WrdbtRtP2xFTR/3o9oOny6cHOI/zE8u3PBu9erabk3rLHfWKG86+zc6 0n70p8NGdQqeVsNZc1HpEHC9etdZn05dnekMAAW/9tG9MbTDyPrVPQ4qFbq7dl51z7ca9sHrX57K cZ1YXTHPWcGXAIQKSocylf+oNV/3rT8k0F51SVZnytI1cVQDAHvnTnac2j10cl1P+xM8r0t2qd7k SIvhnw6LplQ5OsgjwksmxNdsNXhV9xYhy1w1yhsuvqEnuo+fO+RZgTHzdMJ/LsIwDMMwVSiASr3V SgiRaO43MkMltJSTU4nXGYIBcVWxvFpGgbW6ULNRAnVrfCGQEBMARC+cfsQz1DgxzbG5tbqQZtj4 SJ1bxoSFbDtw+7uberu6Gnfvs46Vma6Jxze9lVmidEgaMHYeCJFoRb5dctzlZjpBd9tNU4i0y0df O+sRXEwp/fyzDj49t10p/j6T96/QCpUnnU2JYTeORH1UbPaxjvezu+GnN9wqMFlaa5y8k3hHlzMK s8Ly2KB43gkEtTiedyMy8IQQb1NJQbOYmFv2Ol6R4KIqkiVdODKeeDVK6+Bbe7OHo/mCLrs4xMTZ q3Xu3ud09rJL9b+a4bH0cMxXZ7NJT42Hz6VAsTCn6Oax3jk5pjp9fgybrKLUBYaCundjjgc6u7on +dXwzRPTTWpIYs2i6yd9b7sozrvaCUXpOTfbXNpa2DTJ1e6WoLbPc6tID0s9u2v6Zd8atwFsXLzq 0sCtceULCgT/fLVgPOWiT2h+9YBlTpHRyzzSV3fVx1CZUJJna6Zz9r0tObmeo9ZKNSGkJiEk114B jsYsk017/dMpm2JLZktOHunensbrKLkRenlvxeI3pwYKjQS5ApJYM+N6rLfZRXbByV6Wn52X0Orc 0T3qLzZPuA7g9v+3i+2/HJvyYxiGYZ4PRwAxU3YndsksjuPWOdX6eMPGePMwovNP9W7aaw8hxMjp lHZGCoHXaoyS2sP24ND2MxaVvvn5soML3hpxbOrgEP2Dn1NKub23izokl1jCdI0H7n37xJ2x84c1 mFLPz+6ME83wjC2xc4Foo5zOzWDfdsqylPSMV4fW91ziLJWKuSX6uoNvQZlrdk3x9K35ee3Wr06d 8fb018e3cFrFmUrVZQlnG75zJO9o72ZuuwWikvwbdTpYFPf991Pbu+l/NzYCColSAIAkUaL10Du2 mPzDvfSsUb1rui5xouVSRkFJ4zk1D+WtWDptqZtani639yqp/fquH66t+XDXpZMHGyXklXcSgjpe 6PPe9olXl78yurM32U2Kb9W7HrW7t0Kp4KjCQZRV67llxOvvjFq8bPRyXjKL4HjAu/XVCfMPvLb+ rXYz/eW2dKtKY9W0f3dJSvrW0W2CXLdwlZmaSouhFqVUVmD1SPIOqBNZs+3oqR9GTpg2rKn9BslQ aF+eeDF0dnTBvs6NXA7yRCVVb9Frd+mV+ctoRaHxwak2i6AnTkd7n7+V80qlY/XiWn3mfJiWkT18 WIhugYeYIks9fnykXKXUgnCUBLSPHfvlgdd2fdhtSi2l7bbZYvC7cvJ6tX/4Cvs/hQVYDMMwzPOj Ro5SU4hWKe9irjT2LOQC5U0GjH5/wk8DjwAAlWDjAVCbxBkeOSyKRvEXki7YRefnayMf289zQFZJ JK9SmyDzqRN89e0A5PdedDYmsKbbMIW7Zkqw4WYmCOGJXGUtVfpnEEIqysuQoeaoaDKZtclnwE8d VPNe+wauZuHG0ulLv/v+yKILxklGq03GK4kiEZBbRBCAQhQpd/f5Rkk4tdpUbFc9jRCiNxu4HCWh os1iU+ps4EoLjBwoCECJ1WIiAGCg1hq5Zl7rGVTrUuiUusnanj/mdqynO8eLZonLT/Dj1Wo1kamt knvY9XkzR9zoREgRlUBBOCo5eheezQrMta8RlK+kqFSoNWVCQItUQloWC0r7XDmhEpUkfg5AJ/ap mRgeoqX81SXvzf9y5eFlscZXLTYbLyihBCCTJBAAEG02DgA4isfSR5CKHN9UE+ehcXRMqTd+xBVC iKF3PeVFJx2XY81L8YXG3QOEULj65F0sCMiR1eyUqxJpBSQqGM2GP/0U6P8yFmAxDMMwz0eiIIK/ uXW3Nz/a8c3Efq28lYdlYpEqu0QImAhIAKAymXJdlKTMlpfpUd2a8PCJwcz39tX+bMz0BbPfWf7O nY05j+yB8qcCeJsASq1WUb4FIAD4dj0nOI7r081e5aLiadXKJHhSFTRQGyWUAlQCXm2ily/ccHrc rzvOfZMpry+06Dtyef/WQQdkAmehVbvzyf2ugbv/93OhIDyxcgBAHgaEhD67uKyyagxUmXL/3lqh tygBwoGT20CpCAAy/sn7LgWhIO46ELPFRiiqgkHCWavaut82JYR+AsgXRUVPXbHrypf5usaWNv1H LOvRtNpRgSciBSFVXa0KqHhCn9pXQaExCoTaJApZURZkAFBYZpZLEmSUk9mIaLUAAEdtnLsOhNPn EFJVJxUInjl+5vdYgMUwDMM8Nwo5csuU2R2nLj7XpbbLOhe5wZB+YfvQQcvTawPA6C5ed3297c5x +bF+l/fsmvn+95tbbfl2SssTu/a8ffzs1bHJdzOqEztP8UF9hIRYvECT3BSiIeXyqY7Rv5xpsOHN 1l2WL5y/bMWK/R/dNXu7UenpwQIlhDY2XlLf1UshxRZe69G866lhPdz2OZWkGHgqcYRQKgGUcLwV 1EJKjZLfof1Z/pTSF77/2IWSO34aWpBzJaZD1nsb2h7+fGDY7pvGHlaZxsZXb3LLXFFqJATPnYyU SuTxspRS6A9r75TTuuUSr3Rv0St6QrjsoFNpuon7LckppZRaQM1csUEKXHMLvkSl5IHfAiO51i0z 2J7cq8zLDUpd82XvC3t+qrnzttgnq4x6qarXjbdVFOS9kBPCsE3uDMMwzNMRAg4ARwkRrBxPwIMH wHOoSgsw6fUeh4/Frz19svBmr/OrvhsVTekngYTk/jKu3qIcfapbSuLWoT9+sKk3IZRylFMparQ8 Wbf9oCUbepGSR9sZNbjukRv5FbtiUw73XfPWsd2bYRWsMhci9w06Xl+RlU84XgZQjgOq8jhxlAMB TwiE84oOhiAFjU1WWnrd2/bR9DHbxOH2MlFjEUUBUqX6HkCUMrskd3VWUV7M1kGR07Idqf2S8QCy H3aAggMIB0J5wvEEgAAQjhLu/uwR5VGVroIHAMLJCAEEUMJxQlWZaePbXLqRWbK2JO3SuENLY9Yc liyiyGk1Mq+W+4e+NWjH7VNv1AMIRx+MAQCllCcgHCh4Rw0I4UVCwAmiRJQVhcXKqjehqm1CCA9t l4q6KlzOFIwdEze+/f6ATdIEe96mtUngqGRU3wCoQmGf5KoqKM08t37EW32ztO809j8LXOMAIij4 QtJkysq8NnsuL0k7nfplyvFvP+h8xDRd4Hmd0TEsqU2v7j/SzVtqkftjNWhAKmQKQjgIIIR7mK6D eS4swGIYhmGeSiK4RoE1hEpn5ZysAhI9ACCRgEsDALvePxcuG+z/3fkdmcWmirv6uWthB8A07pcb p2suHjhm+earvY9dSatToXKnddr2vtZs+JQD30eEppLPHm+nwcy9WeeWvvbe0s3HL+y5mtdA0vib m/YYdaJN35H7HSo2UY7Qg6C4TSQpGQBAkEYlso4DTdwYi8oDH0xdiRVbS3ZcTGtL7QMrwxu43Tl4 4HRDGzWmrj0BumFKv5OJJfTdfZezW3IOmiSbRlf5aPuEw3WArqOEu2gWZUYKuo8Q6sFLtvT77d2j wFoCKV4lwkqV0EuE7AaR7Cgh2QDgNPjnsqsrp3+xef/ZmO2Hb7bNohpF9Za9r3d7ddzWz9q650Zw /FlQSinojQftchyXKFG6DkS6ZiiBjbhCTwl2Ukq1FmrLAQBQXAOwBpRcmwOYZ38y/ifx550Fey/n tuCdq1eE13VI2nfgdGMbNScsuAa6cOygw6nlUe8dulbQlDip4igRb4FiIyFSYrHCxUoIoTRm2VaX 1dszN++J6XEjS/LUBrfM6DL41R2bZne+OnaDDRR0LSQa61gCm0VlNkOi+0DpVQBp/8iFxjAMwzAM wzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMw/wve+6ssgzDMMwfo5TK KisrXdRqNUvI+GIQgH09C/P/VQUhpPxFVMQSjTIMw7wgeXl5Pvb2DqusVmsDSZL+xBffMU+ilEqC IFgBKERR/I/lGebvEgTBKop4k1K6iZBnf+/kc9f3IjrFMAzDABqNRi+TyYvLy0vtjEYjCGGLBH+D VavVlVAqOej1enYumX+cg4ODSaVSJbyI4ApgX/bMMAzzohEWDLwY7DQy/81YgMUwDMMwDPOCsQCL eSHu7Il0GdspZKCXgzbS0dHxGzv3wA/bjv6wx68FVPey+/ZvsWPl3IDhn69sHpVBVS+7LwzDMMw/ i+3BYv62tWNCG02a8u2Htw18y3KjTS2KNhsvswg39q7RfxSTsOO1PYVf/tTbJetl9/NlovGR8nem LRp3KNm/f+z5/I8BbP9dGRrFfzBpk5ugcWqaUmz2FxQas9Wr4eWybCTs+XlS5TPrpiAr5vTxTCxz bVxg1noY1QH3XPxcY75/Y8Qzn4ShNJKbMzPegYeu0d0yMUikHFH417+eZlTFHZ03qewPxxIZyf1k jfFMrfQIKzDbuVWqfZP8XKvFfv1u34o/dVIYhmH+D2MBFvO3XFvQy/vtb498dbnMqblXgy7rWjf1 Wx67fVtORKfgmucOHppx15wZfv7C3Y0A/qcDrPN7jgftjSmJMGkD4NCobRb2Pf56dISrdnqvT4fs u5T+ep5FHqBW8jZbpV6lpzsr3Wq33jbsu60LNrw5KOnJemlUBP/5gNvdN14+PTuzHLXVKpm1vBxy 51otj/SdfyFy16zmt353TCSEOQO2dtsVmzPjXonYSKFWiTDr5WWmHdSuWrPj3Wcunrf/22mXCCG/ ewqORkcKnyza3DsqJuf9HD2poVTIrOUVRO5Su/X+PoviPt09vf6dF3neGIZh/luxAIv5Wy6evdrp SpmymTyww4G+81ZFzm9F8gHgm19u5X71RkRallHWxntssxtxX7zsnr48lFLZlDDn/rmS1lfh2+GX jZ82jwv87JHXoyJU0xccnLrlVuYss2PgPQd3h29quMpyTWlx7qVGU7+0qwfGH7US19c3Jryx5JXa 2Y/WvWjt6S5bzlYsSIcf9Q7yWOhvx6Xr78W0vZt8tN/ZdXLFyKjc6WsHe6T81pdI7quuiwduiEmb lyf3Mel8nZb6uTncE3Ku6EorrV3SEk/2PFdp9uhp5zsZwLUnxkHm9/ToufW8/ttMLsDkF+Qx308t Zpelxra/e/dI7/NrVfKRUcVvrR3slP4Pn1KGYZh/PRZgMX8ZpZSbFCivLwpuAg1of/lBcPXAu99F ZQKIIoRYX1IX/xViZ4dWv5Rt7mmU1SkO799jSyAhpscKWCuVNmoXpPCsd77puI8+3vlOq2sZqApo ts/qdPTrzRe/vpp0sufe3cfPUEq/e/AIcfayTn5Dv7gwPRmByoaDprxxatnkvYQQW9rc1rs/33y1 LOre6XHRP/04ilI6lxBiAQDcChY4XlNLVHtmNY6YOeejBUOOtyfEBgAnv4nYNX/F8U+P3I0ZGnPm 4oTwaPrWifa/9TVpUafAHdcrZ6TxNdA0Ytrbx38cd5AQIt7+sumeeZtvVmxPOjHy5C8/DqOUzif3 62SYl4kQAkIAKtGXkq2U47iq9imFJP035EslIBwBJIlld30B/hUBFo2Jka3ZEukZdVVvl68Ioa16 DSleOLFNPiHksexy+fFR2gL4yIOD5RVnd0cpl6264GMI6G/uOnx6xqQwYr0X9a79wh1XPVPtOolh E97OigwjT923UpBwRvfDqvWul6/cVqvd6lhDOo4p+2R0k8L/dFOglAoJO36wX3HonFNZYSEva/iq cfirw/Jb+hLjHx0XHx8vP7b3mNuBc6ft8g3gg8K6G/r1GZMzuOUfH0cpFRL3fuvww7YrjqaKQl7Z ZHjl0OGjCv6oPUopObf2bdcFB7KcJEkg9btNK/lkdJP8py730EguObaVrgSCTNU4vDyEEEtKSopy 9bJ5HrHxWRpd6FB9v/rDMgcPJs/M8ldaJqkJIaLaw6v4yY0799t8ockWKaXciR/fcVt8Kt2R41S0 Vv8Pir6MqFH0rPHFxrbSiaKdoG3atCKEEEt8fJT81PIVXjtuSdoy+3pS94jpuZ9E+JQ8Le8JpZTs mD/KdfO+GLfbeZDX6DaxdOj4LpmDQ0Is19e/57joWKZbJudhGfjaN5mTwp4eRFJKhclNPXtmFNF6 dm26rejStnXswScLDdtX2jx++gcNvZrIx01tmUHeqfrx/T5d/qKD6+qs2MqGeZdiww/nYTkAAwB8 uzK+S3KprIl96yE//bRs8v4H16//+2dKtkyse3Bv4p3h5Skn+rb9LmUHgOsAQEIGW/b6HJCbAAAg AElEQVS+N3nJu50abp4wc0jKo9d8u7e3pCwfFPhzemFWqxu3brXzO3vcGfeXdimlZHozzx6p5fJQ x/bDFx3/cdzhB5/POrMvFW0YHXJo/53EV8qSo/u3+3HsLgC3/9QbyzAvHIGpshxFFRY4OTtByf+1 nA+EEFD6Z8MNAgIbCvLzUFxWCY2DGzyctODJywn0npdkLUVJmQFae08oZC83R8b/hRT+LzXAopSS OaNahbQZ3W+Q0WLrUFDJ+Rj5fJqfei1xz8bq+0Ysi9m2blJYDlC112TJ4m8j1tzybNewll90SszW sJRSqYspYX3pzWTT8uXju1164/N1k5LKpQ56WYH5dnrutq4LMn44NNO3+EF7+dE/aN/+cmWHbhGj exktUv0Kg8mVv5dtjL0el7r2F98TQ+ce2LLp/e6pT+tr1FcRfh2b1x2grzS3qjBaa4g2q0K8s7B4 z5afrtQf9OHeRVs+O9X+iZkJSik/Z1TrhpMG9+pXAlXLMr3J1yJCnp+Vknvp4NqzPabO3/n2krfO tX9KYLfms4jA9k3rDTAajS3LTLbqks0mFxOWFO7c8Etso1ci92ze8MnZmoSYHz3mh5l9fXuGBfYv NEod8oxCEAWHuFsp91b+6BvdLTJ628HI9o+Pbe8dp7nLD06Ny9fW7Pyuw/yVfX3ESX1aDcs0q8L1 ZpsLTS7OjT1/ckPkVboxsiEpfXDY4Y3zvK6my3x++ma2zKRUeIh6C3EzxPvNnD+/iUkUea2CF90C vdKH9R2W9xcui2daPK179a71A/qX2kj73EquOuE56Ur86MRN31U/GrHg3I4tM1s+vs/rhsn+6w8/ eSOtQlUj5PWfv9s+3t8wdfC04eUW0iGvkve0yrMsqxKuXtu7KnTnD9H5e6a2d9M/ODRh1zu68R1C e9/OLhiSV2YMLTdzmqIDG1JvX7y4e0Cn1smvfbGhe56Rb8z7NUs4n4GZAFLxFIemtgy4m10cUeTQ sKR1aMjmmU8JqgkBBRblAMD414f/ro6warIsWZypUiovti+TV31m6cEIp55vHetQIK9j6No0dHvI gxkqAJc+qOv72eaUscUmq6ulIE+btXt9Y9wPsACg11dLSwCUTHxr4u/aauZPC1aphSIUVbgTOZQP X9jSwyW+3BJepAwpG9C60c5HZyXPv9cg4NMtd8aUmq1Otvyc4JzdaxqCBVjMS0Y4Dllxx7HsaA7G TRmDIGflnw6UJEphNhnBK5SQP3dSLgJOMuDG6V3ijlOpxGqq5PSVWrHfpHGkdbAbR/6lCf4JoShL j8bqLfHoOm42Qt0B8SV1VRRFmG02KBQK8C+nCy/ESw2wfuof1OTQpZz5caWKhq61Qk/4e4pHeGpz yk1J7JCZmvjl3kpFk4gf4t/dMjUkF9WSucyfU0JjL9wZnn6vWjvvwLCz/qq0g7dv3R6Unrvqs+/t kSRqa5a7uZWuUyVfG3bzvG26X7U6sQD2A1VPaL3f99PBJ65mzimSNHLvgGrXAj1l5wVq5gqTb7W6 dy/xk4PliqZjVtyYuXJsvYxH+7ljessGX31/+MuEUrGdTe5U6uHvf8tXqS8qS7lVJ6HEOqkwo6Tf G30Vn0VRunrwIze693vUbXcgLuObFINzgHdt7/0+uoo9Cp4oTfkp7RLTyiecKyjoNcHoM4dSuvHR GZitrzcN+/LHw3PvlostRaVziae/f7yvvLy0OPlGcGKpNLUwq6xfxCBVZDSl6x8EZ5smNK316/bj cy8XiF2pvU+uf7VqVxWmQkVW0tVGxZb4jiVm2qbthyffPvV5u982SuelaZJuxbe7kmEfVmfb8rvn Y0rCE+Dm6+XrFqfRF5Yl3r3QOicjr976dz+WUUqXPrippu5f2WXtRfOblSazUl9m9dCbStSpRxZP /P4cHwEqEfBuYrWG3RdSSlc9bWbpr/h1SEj9NTvPzL1WJIZzTgFp/gG+cbwhT5uVdKV5Kb3T+bCJ tOzy7Y13D7/1yHtXnq+Kv3GzTVKpIiz01I/Ji4/ktYwpUDZ3DQyKqeGlOmHOTfS/fTuhdznnFLD9 SlEsgEQAoOdmqN78aNPk/VcMMzm3muk+QZqVPrYSI8lI6H4tPfG9PKWdSeHknxrgK9/l5OOWoKEV T316jtJI7suev3aNy5eHujWptz50ytC4kwtf+dNjv3jH7G0ToRICa2a4OsIMANuWX3bTl1bUFfyC 75XIm6Y9bDN6inbMe9umnM1Vd61e3edCYUpefYLckGhKlU/+B+BpziSIrnqD1VXw8s2SyX8LODdu vuFZWa4P5v3rJWXYwh6eYxoVYT/y65NvXMjXta9Vw+98bkpuA4KCkHhK5Y8GfczLRgDJgkqjGTZR giBXQqWUV30ZLRVhMhphsd3/qBIOCrUGCl6CudIEs61qAluQK6FSKSCZTbBQDiqF7H7dEkxGM3iF CjIOkEQLjJUmiPdjGU6QQ6VSgpMsqKw0Q6S0qg2VGgoZ92KmKQgB98hyoEQpQAgsRbnITMuBVapa rqOUglIJD+Osh8cRUCo9tozH8TLkx27B8r255sEzJspr6zgiPscyH+EI9BnXELX5EHFrP4H0CXPB 7StxhOdMoCDgOYKq7lX1V5LoI4Ff1RIdd3/WjD66VEcIOPJgyfHxvhLCAaAPx0Mlqeoc/FYChOPA PeVYEA4cR8ARCUZ9Me6llEEvcSD3WyaEA+EICKWQHj13f/h2kPszUPeXHJ/SX8IRENDHx08ICLXi 6o7F0snyUNuE8d3kjhDxPOf93+ilBVgXFvVx/2LJwQ+vV/iH+LUbMLv9iOHrfhxWrwIAv2pW+8At e2I+PXl738Dr55tdoZR+j9gwgHISbEYBXqEX6745/93VEbGlfX0HaI5l3xuX4dg2rdXExR/smRYS P7a5P58Wc+/DcpM+mFJ6kBAiETJYnNvNJ7lJ3Xqbiv3abgmtViPxzVfDTQEBNrrno6leP0ZdmHMm +dCgo/ubXqWUfvUgMDj2Yffqn644M/d6obKdS6Muq0ObNv3BXi3LGlKzwnZzX5Q202Duu/9i1ge5 RZmdtmzBTgAFAECXNbYftuze2PhCu3r1ug6d1XfmjBWfhLsaAHBr5r7+8/X9mwfuSTdMlmsV3KNB yIF32gd9vubyvNslmmbujbv8EtK00U/2SkXuiLr54qW9R7TZBWWDDsZkvpNTmNVp+T7sBlCStGKM 6/tfbYw8l6fp4Va/8/oGLZt83bxdsxx6+wxnuR5V49y5m5+euHOgR9Jp34KvYuis98JI1WqeSCgh nEQthbp9B/ZPdArodDw0rMWbg5u6JhvzrsjTj24duer0vc/z0i4Ob/lt6mEACQDgXDM4Kdho28mZ yhT3LpR2rxC5Ou7V6l4O8uTjABADceHsgwJS8IJmeK8t6OX90ZIjn18qcmjn07T7z7XrhnzXunOL QnnyZb7i9C8hxy8lfn4+fu+g+IOBOcuy6UeTvO4vDSsFyhEiwlyqObp9zZgSqaa5Vu/+b9St5rb7 raFtTPE7vlLtPX2tb7ZW7hLcp3busbeq2lu35WzYnotFb1Z6t0toNHzWm8c/an8TAN0+ofnGtSeu zN+f49rbrVbX5ef2fbgSgO1ZQeT17697HbmQO1zvFFIaULPjzu9r/vkvEE2Y19lrys+X+hSILnxI m5YHHwRJcRmia3Eh9XSpq7vQbKxH5enZAKXRwqwuY0YcumWZwNUbdKBvTfOGQ5nrl2VZLdUXH4MG wB8GWHTPRPXIOTv7Jekd3H3ahqxs8mbd4l+m3x9LuuRWUkw93MPsj3V6z9545n2A0mWyN9t9MfrI HdurQugrO/v65O3cm7FzWYHVUiPyKFQAWID1r0AAsRKJ0eulDeezOJvZCLnGC90HD0dYdVdIhjgs fnshTeRdRU8HhcBpHNFh6FS09UzG0vfm0xs2J9HLSS4ode4IHz4O3sm7sfSsJM2YNoTz1MlhyLiA eYuPit1nzObb+BDcjYnCV18fFBWBAUQrSJxDUAsMHdgLQspOfP7pLpEPCCD2MolzC26FPv26I0DL 4+/cPwlHYDWVIze3AAaTBJ2zFzyctVU3N0LA8RyIuQwZyakwwg4enu7QyDkABDazARmZObBYJWic PeHlbA+OiJBEGwrys5AQewHnzxbZQrsnyOWe7vBwc4JC+OOZLInaUJx1F+XUh+vdvCkCA+XwqVaL o5IEW2UBCgwc7NQC8nJzYREFOLt7wkmnAAEBoRYUZ6cjr8QMmc4Vft6ukJOqQIVaDcjJyUCxnkLj 5AlfD4eqoEcSUVpaCEGuBjHmI7fUBgcPb7jYqUEoBUAgcBbkZ6ehoEyE2skbXm52EKgEEA42Yz7u ZRYDghq2Sh7c/cCnaplTQmVJBjLzyiAJWnj5eMNOKfzhTCClFPryYpgkOXScHln5pZDZecDT3REC pSCEwFyRi6ycQpipEm7evnDWyUElwGKsQH5OJm6eP00vGTlbu3bV5d4ObvBw0vxXZvV/aQHWxbPX upzJ0Yara7eK6rvkqzXzqpOypVWrIzYACdtG+S+9s6+wSdrpA31/jh28fmJFbCmoAyEqX5NGHXB4 zWCXrDUAZoSos86WOZitTk3O7pkWcpMQIo5u7F8oJ5JktHKaLVVLuQCA95qPP4Xg4NNk8GDxOIBF kQ+7k7Iqwn3r7cLKrnkXL7Q+UDxVC6CcUiqMaeQ5KL7YFq6p03vPiI+/+HhuD88CANhQdVwFjWqx +t26r+bGGIKytwwmBQ8qPHtDrzFV6P1EztkmuAYWfRLuari/p0YEUETjI1fZb+Nia9d2uDN4cdUx lMbIRtbvNjShlLbS1Om7ZeLC+Z/ObmZX9Eh75XRP719mHOuUed1aJ3VDL1ICAPt3HutxOovvwXm3 OFdv/Ddf7Rjve3fHgodji902PvSz7F2Jvrev7OkTHd1nM4Cjv70TFBKhkHzbXWz+7sLZawc7pR9a VvVKdGSPTTdv7h9yuLi0Rs7pI/64H2AN+GjbuQHAOQB8hLPgkqzxCOBbvxW1+9tO6ymlD8/3i/g+ J0op+bKr94AzObIOysC2R5pO+3H++oHqzD1LHhY5u3pYnS+yD6T8lB67c+DB3QO2Ajj/8FUCWGxW IdvkqKzVcfTHsZtmriWEiGvmAgAM8fHxa52dbTJ3d1R+/6C9TrrwfLm7TuHedkf0xx3iyMcPa8v8 uEOt1TczUruaUNpgUg6En72ePUtzZM/ZbvFWTYjar+HuaZ8OPTdl9Z+bvcqPitS+P3fJpJs5XEdV zY77mzcIOxR7/zXJ2dFBL+YpFHKpvIM7bPMBLOw7vtOBq0Wzyj3CbzYaOP3zxlcGWc9paZnJbLZP uvnHn3VKY2QftO87+MwdwwjOo/2VasGNoiY9sgwo6nSOBluRXCejZcGARCklX/eq1v1QfOl0vWfH 2MaD3/sy5FR7ebROKk83mezT7vw79ncyAAgHok/Cum2xlurD3pO/2tqFu7pvA64l5KJhoCsgmWER 3ciAtz8WegSqq4IdIoBWWmC2OJFeb34g9Kkhw+nVX2DXgTh8EREC1bY14uXMnqRPbR1JPHuEltrX tdV0FXgKG8x6IxxrtufHfzQB1RU2iBTgBYoUgxE6/5b8q59MRWBFHBYv3YALNxsjsKX3X16LIoTA XJSM3etXSMcSjMRBKxAi19H67QZgQMd6hIDAkp9lOxq1mi8tyiU5OTbU7j4arw1sBJklE/vXbsTJ u3rY82UoNbmh49Cx6NHMA9bKclw4FoWTB26gKIsIx9atwK3Qzhg1sDO87cmzA0JqQcKJnYjatFu6 dlsi/LLvaEyt6ug6qB9XUwOkXt9Gl0alSs5ubkjPyuY0kpG4hPbEhBFd4arW48qRbdgafRsyQUJZ iQ11+4zHK52CoRTzcWzzehyLL4SKq0RppR06vjoZ3Rp4wGbIw85fvhNTRT/JlcuUJaWUQebbBBNe G4ZgVxWoWIKYg1voxl0xViKX5AZ42Jr1GckPaV+LSDlx2LpxhRiTreGdtASVJaW00KykAOE4TkRm fDTWRR1DhcTBXFoCh9A+ePWVzvDScM+eyaIWxO5dTnfckltCXMsVSamFqBBd0W/yZHSv64ayzFis X7UdmUYO0BeC826DEaMHorabCuUFydi/cysuXswjubIrwvaVRajeegRe7RKE/xDX/iu9lF+CND5K Pqb70A42VTXJzr/phVFrQ4zJLXweZre+WqCUqrVvnSk7sCNHMNzxP5es958IlIBKIEqVyaZ0Kgeq boYz6moIZDIr9QnKe7Dp1mp7+iI3iYx8+HNKKRcbG8vv3buXnEA7KdA6s5Q/nlzJGYvsCkv0SgDl hV83csup1Lcvpm5iux7dNz0Irh6rc/B5I6Xn9gCQyE+TH/681YSmZUsvlsYqktNa3jrw/Xv1BuW4 TFiy/YC18Hr6yk8+Md9/qiv20bpy5o3yzKw0tSuFu7lT/z6bHgRXj+m127iwF3YBkMgPk0BplLa7 /5hOBqJV2tXuemj3eN+7Tx4yYPmua2uPNDidWpk/Pvb8rRaU0mOPBj+Cws5YrcuwnU8+Xl9HH1vh 4cFn0VRjXaW1VPtwzPePpVXRFAUASeLoo6+9MDe+cjhyvaSzWeFGXWp3PbB+oDrzySKj1s+6uNnr 9YvZlXn9Lx6/0gSPBliUArwW6oB2B4ctnLnryQcnQkJCLHhipsVcaVERjqNUpXlsjxsAKIhoUlJR rIAks+PwzI984epe3gM+OtnfwLtbanUatnWKf1Uw/LzuRb1rP+er76YevGN+w+Le6kr7V4bN/eFV n4fXg8QRmRXg5AD0AD00K7TuZ5vvzU6XgkndVgO+OD0r5NbbI4MClQqYrDZJUWEofOa3NtCkxYpP wnsP3n6teE6Bql5Jwx4DPzvyWacE8vlvZWycILMBnEgJqQbQA2+FNNh5LX92FqlnCW3X/4tTb/om vR4RGKSUw2SxSoricj37loh/CyoBai+0DnOWnTi4gmzW90aDhgNoD52O8BwgEgKLPhn7fv4W1+wU UAa0xviI1qj6wEuwWcywmvSw2qwQ5Bx4+5oIryPKDp+9hc6B3oi5Wkoa9WqqcBYIKAg4QURufDR+ mZ8PpUyH0Ha90b+1HwgIqCTCajbCaiwGpRwE/m9uZRaNuLRvrbT7FicNGTWRb+AjIPP0UaSUlcEq EYAAhuwEmiLvh3GjhqL43Ep8u2er2Lp9Pb6RTg6vGg0xIbwW3DRmXNz+s7Rz+y6xXuhrMn+lDq07 94csLx1pGmdhzPjBxNHZFc4a7o9n2wgHZw8f1K4TgNt5efAPrI4a/j7Q8gAFhaUwXzq/76A5cNBU +WvjJxNvLh95FVooBYL8+Gis2X4ZwX0no18TZ+Rc3IpFUeutQfXel7nf2opNpwsxcOJraO5jQ9y+ lXT9uq22WjWmyqpJBhReO0fPKR3ojElj0a19KpYuWSvuvtCU1OwbyuVd2o+lS6PN9UfO4Ho31ODO kRXkx18W2/xrzJXRg5twINWbzJg6FN5CIfav/hqXC9zuB653sW3dZpR6R2ByRBiQeQZLft5t21+r Fje6bXWOf+rzSwSEWFGZcgOXLiqkoDenYGJXNY6v+kbasuu01DAgXDizfgXixTaY9loXOBrisXbZ BnHbseqYPqQl7+AWiF79+sOUeIuovfrwE0c2hsLeA/x/6W+TlxJglSNTe6dM5mcx5Wosl+bPiLhc Plp6ZOZDgBGvfLhHkVNmqC3pjGX5RRZ7vAaKpQAIRwnHP/7OElCJ5//jY+GUUn7OuC7uF1PLag/t 271BiUXyN1RUuFDxID/LUOGab7C68w7IqTDyCgDYfaHUVV9mCoRDjQKdKI9/Vr1P3rQBgNRfazgY Gf5DRkmc6/WsxH5J++d/k3iAm+VTp/GF1okzdrYd9valDv1Gp0UODnl4c997tsLdWG70p45Bec5U +dRNwo/MglXZstY1x0qq2TiZIahdeHz23qcdE2iKbKy9c76YiPqEG4EA5ADMD04eqMri66nJj33i OHcvmSRXKvSwSQKxWWV4CXJjTnlmWmkABHlJUKeOCem/y38OEDKu4t2Gyjvn74q8/s6NAEop/+A9 4SiIoFSbnJv3Pvn+cwQ5hBC6fES1G8pr+YTLONrp3d3x++f1CUkHABrdz2HMrFN9UwRvdTVBe+0b dxjnP6OeBb9ca59WbG3B1ep4ckjfJqeuPavgU0TPn+jy/hcrZp1KlKaYPVvHtB43c9aO9zrEPVpG ZrQaVRBFi02uU2xZ57d4d9rsOINnULVuo2dfWDn6OFk1BiaTwFtFyHgOFRqZ6qm3hYxzC1STxnwz 9sj18g8KVKFlDSJen/nG96OOPBkoy8zWSiVE0SzJdDmrFgd8vzvrg5tGH/+afca/c+7nkafJ8lGw WHjeZoOM54iNk2v/OzdN/J9EIQkOaDVoGu9/7zruxBzG6n16c9grk+T9WgVyoIBM7YUWfYagrbcK ROkAtcABVsBamYYDvy7EWUOqlOcUTiLfbUh4ToXQTp0R/cNJnD5TC0naYIwLdkfVJUNBJR7OgY3R a8gQeCsAtYMLCKUgvIj8hBP4ZV4OytKSRN8eb/FdGrhDEv/ipUIIzKXpOHryHtds4Mekb9sgQkUK X09/0likEGQUlAJ2tZvLhg/oiAa+WpSTetR+/2Frar6Vb+buhuDGoUhNz0ViQTlEQURhdqKUWyah moccrh5+cHLSwqFaIF+jVi3oFOQ5Ui0I8A5tg86WdC4uJQEdevUnjf0EmC22qhkfKkEe0IB7ZUg/ IbyRGySxGqpJAM9bEH/rJlKLlLShOZtcuZoNahbA5d8Ukm6nIvdyPMppILUVJJDLRRRGyInxXqyQ kqZHDR+A6tyFdh26oXvrelAZNQgNUIvJZRWcJJZxVy+dp2JQZ3lEz6ach5qDp9MU/sylD7nYy+eg vpsphXQYwTWsHQA58UWH9o3psYwckRDK6Qvv4fL1clq7uoiE67GE2MxQmrP521fuwtqyGvg/2H1O BSWp1bKjakj3pvCUm1ERFkgvxxaK5eVZwrmL2VC3UtL02zEkk5rB03Iu+cpNVPRqBg+NPbx8fKF1 0BCPoCC+Zo3qEEX6xH6y/x4vJcASigoVFo7IKcdbzZwqp8SszwN+Pxsgt3dMcnB2LtQqSC62PHu2 oMofTzHTqGD5h31D+u67WTw5pdjaQOtUkaXkrIWUUiMACJJJTikkjiPEylWt9hoqobCYJSXUKrOV yv50Xp9ukSfuxkfNeGPBsgNHzt7K62wlpFHujdP9UuPO9XPyqXknO7NybWR09q+R7b0KAUBfCaXF AiV0ylIrpc/VXk5BmRIcVVBAVGsUv5txecDTg5ZxSVTkDBW6HDz+YAYBoKGVT0/F8GCn4zMTNfyz SouLVRyBAqCiVqN+5nKctysp5ZJECoNei6rxiUDVVcET3lS9tm/u76b2niG4fqtjYZf3HjiVer7H qndfn+9du9U+Z77U0uG16Nbx6eJIGtDstLpJz0PP2nt1N7Kl2/QN8QOziS/XqHnL9e+3cXju2auL 26c6f/XRpg9Pp4ljJK+2Z3pMnfXu+pntbjxZzk6sKLRXS2UZOQkhv3695+2LeZrO9i1f+XHku1M2 PQguk8uhKasgDjqN8laDbhrzrXcer4NmRKkmDp418cDNkg9LdQ3Tmw587f1ji4f/LrgCACeLvtBO JZXnZt4M/XnRtXevFNq1c2gzcuHIz8ZtfXAekks5TZmes7fTyS436QtL4qznHTXzjyI8bIW3se3g XVvT9p34fpM6EJ/1nyhXXbiG7s38IQPA8Rq4+1VDjUANJCpBEilsFJCpA9F7yvtoYzvBLVx3BcXG qkve3qM+6rntwspl6bYmQ0dzvo4qjtL7vyQogVLnAr/qNaqWCCUJFDZIIg+P4I4YOXss9Ie/5Xdl psMgtoKd7Pk2Tv8eBScVw2oD7DVqQkQRNpECPA9BeHBDoeAVaqgFQJRESODAEZ5SKiH72iGsiDpj y7fIeK1gJMbCVCLSanJ6/1NNqYTiMgkWGwdJkiBJzzeNIok2WG0iREmC1WqF1Xp/UzuqNrS7+3kR b08XUJvt/sooAUctMFvKQM15UvKdeK5QRgmlEkI69yL1fDjcOaOHzZAhJcQLvEAoqKREy15dSaCz DBKlILwMKqUcHGwQJQqO48ATABYj8ovLbMTTgyh4jpNEG4jCHh72PCkuyAFnJZJWKyeQJCIREbxS TdQC4QAKi7UYkrWC5mfcws1yjkiUQle3LWkUFvAfl+soIZAr1VBwImxi1V4vgQNEWwlsVgOtyE2Q 4qHgJQpQrwakQ3AoNEJVCgtRlFBYev/fkvS39ue9bC8lwBIVXhYdFc1Ke8/SGhM2Lbr4Yd2Df9AX CsCK2MY88LtvCnluv+6xdN18JuubXGWQxT2k5sdt27U716eJd3GN+vWNktqVivvfqTPonU3LCqTf vgDbyY4YlUrOgPJ8J4VS7/BX2g0ZvLAYwGoat2brnB9WBR05l9JQQc2dbt6L755caPh4xXw/UEoX EEKsTjpSqVAQA8pz7eUqi/3z1O8Z4FMpSleMFJIyMz3f+VnlCsuIVgLhJKXK6PmCc1P9k1y9fAwi rpskSh0yUrIdn1WuqJxoJXCgSqURT4yPgFK5XHjuZKet3l6bv3p600WZm+Pr3Lx9epBKZ9+9krPZ 7pjknEdom80OPh2XXPyo+TMvxh23S1tczTCF62q3OOsX0v3Mxedst2h/pN3U2T/MPJ0ijqP+LQ/3 mf76B6smtUt4WtmOLTQFBzOVqXG3jzc/LSgbijV67ajba9rSt+sTw4MyNnveL8vqbGcnaO/NqYfK DY8cT2mU/I3wWSMO3SyaXebQ4F7LwSPeOTR/+JlnLfF2babM25+vyLh541CL04IqjNbsE9Wk/5vL Zz6Sk83sJATk2Fy0ToL9vXU1YFz/nONm/mkUnNIRaks6Wf/rEmgVNtgMQNOuwekxiU8AACAASURB VJDxHAjhYDOm0K3fzZWuuCh5XqFD6x7D0cyHg0yugFzg4V67C3qHXKO795631JnUSeGic0e9xnWw 42Y2GtatDbUggYoAKAEvBzKvHxGXfJFLHGUS5+Abir69O0PgBcgUCiiUOtTu2B+Xv19nPRLTEsPa +su4v7IHixJwSg946AxS/NUbUmkLb0EnB2wWC2yUg1xZdUuhtGp57jccOFqIk9vXI1M1EJHv9yNe dhISo7/H7BUpIh69F1EKU3kZJEqrgiwQCNz90E2ywSZS8IIM3J/YH/Sg6G89oqBEAY3GHRpPLT9o 3Oto5K2GJIqwWEXwvAHZWic4VGvMj3/zVXioeUiiDRabCEIIrMX3a6OPVQoKCiLXorqHK38oLgGF hk5wdFJANCQhu9iGagFB0BWcFE7Ep0IfXgOOvISClBRkm2wUIJApPKF19uCa9xqFka19QEURVqsV 9MFJ/Q/noOqJzccHzMncYefoTALaDeLf6h8MXqKw2qwQJVr11OH9ekWrFaYKPQACUbQBHI+/mMbs pXopAZbOqZq+hjuXcjnP1Dz77MFqhNSzoWpz+zPRmMZ/OR1G7qFvNFPHvj86k/o7uTYa8/7dPW/8 RAgRVz5S5vzbQTU52OR45P9S/cKdC9beKLxHChJrJiXnt6GUXn3etAOUUg6A8CCDNqk/ygDgCoAr 1/e+t/2XyOVTNsRnfVByM7rXvFvvbASQ3ruDZ96qm8WppDix3Y07ea0ppTf/456mHh2Lvfld6fds lhaZ547Wo5RufXLJklIq7+evCzKJvKAKaZiEh8uD/37ODRsX+PJ7MzINptqZZ/aHUEoPPHlOKN2j 7u41uLaVl0maug3v/d0s4jR6tPKND450LNE1M9ZrHDqymWux3kY5cjfNmFJrxLTkFeNaP/NLjZPW TbN7f87PIwoVAfD1Cd20Zapb7nO1SaOFj9pHvHLmnnGyzaPz+e7jJn+walLXpwZXANBg7qd5qn1v xshsBW3MHi3j+r46Ye7GR9qiMRNlb7wR1a5U52fTqGrGPZkz7ccB73Q4fjPv3QJ1k+I2gye/c2j+ sNN/dK01+C4yW31kVqxgK2lm8WwTM2D02Hnrxuoe7kmk+6cpXvtsbbtyu2pmB2Vg3P969v5/FSqB 13mi7/BX+Rb5RTBZbFCo7eHq7gyBSIAmBFPmziPlRisHQkA4AU5uahBVEEZ/MB1yRw1E8AgbOJ34 6yHTEAoRMtRoNx6LGlgEeyd7PMjJIEo8fBsMwqcL2nOW+1eTTKWDo1oGvm4vTPOXYCcXwclrY8S0 mYJV0IH85SkKCkHnjc79O3Cfz1tjXcRb0CpELtw6dRVicG+Mj2gISBJsNttvcQeVYLNaAQhwdHKE PjlVuJd4gybkJ9G9y/ciA3Xul6UQJRk8vZ1h3H3UtjIqUFBaCmxOYe25/g18OBkkpB1fgoWHSjFo 3EyEB9s/nkpAEiHabA9nrh42T6tm2R6NOwBAkuSo3bgNah+eK635aQUp69GMWAru0esFKtJ7UFc0 7xCOQ9+sFH9dofl/7N13WBTH/wfw9+xe5Th6710FKQIiig3svYI12DUxaozR5Gs0kWhMTGJMrIkt JnbBLrErKhZAsAKiiKBIUZoCB8fd7c7vD1BRMTGJiSa/fT2PzyPszM7s3LL7uZnZWbZ9cycU5Vyj d1gXMrBHMAxBodPpwPK1yzQAAMdpwXE8dIwh/Nv3YGzP/kjXrrXge4bYMbcObeLyZf66t1oFSKnO E5vWrOHWKFWMv6WGHtqeQqqZJqxOR2Fs44tQ32384Z++g2HNQMaEltCUzBL4dOxKWtobgVAe2ceW 4vsj5YgYMw3tmhg8flaB1+lqe64eN7sOWk4HidIVXdo50VXbFtFtorcYZyOOXr6WA8uAUNLZ2w4i ngcYBZytWbr58B7uZ8MKUemDMm2Lnn3Frayk/7qFR1/L1DHi3r2mmb/tcVlVIVQ3j/cb/tXpRg2l i79yxTguLu4vBYHpAGUkKmVeOWwYqbya2npnPxeAHOqsWHessHtJhcYWzJObjGJiUpGnseKomVil yTq+dUy3GVtaPLt/Gh0u2br1F493Nl15qnfl29nD7AcOGjmu/1cJds/m8em5oCysifyiVMxU8jVq MdWoGQAwmZxQ2NRE/6gxW85nHv5lbO+Z2wKfK2//ZOkvW7d6jF+ZbAjUzj/q5m98QMGXq2qyjvbs +lFswLN5No5vFnhTpQtTSe2Lm7duduqVT0T/k2jhN4pF7w8IHBO1pimltOE5Xo1nlnVpZrxfpinm 1TdP9O3/2QmvZ5OsGj6z9c1qGqKVOeQFhbU819Bu/ohdB+46J6aqRrAG1tmTNn93aM269Xt+/vnn 3afjtl3+reAKAM4dPdT6TIGonZ65S2L7aR/EvWyZPw6f1GJvWtV7Dwy9CwLGTp2zZfqLgysAICSi uqu99LCdUpzLcUSUq9F76u8kZsXxwGPXdb3lxg5XfIcMO19/24Go9k47Uoo+zKbOiia9RkT9XnBV W16kqquL9JC1UlxAeUaUxxs/Vd7mbQdbnMjguuuZO6T4Do288LLHLfiHUAqxTAl7R2e4u7vDwcYc skddDowcFvbOcPfwIO7u7nBzdYaxvhggUphaWUApqV1jSaQwho2lMSMmdc+OyAxgYWkGiYg8deMT 6xnD0c2duLu7E3d3dzjZWkIqIhDJDWFuYQwJoaCEhaGpBTEzlBHyF+bX8JCgUdtR+N8HvaVs3lF2 x85YmmfoTFsFuEFOOBg5eqJj+yCYyNjaNjB0Jh27thU5Glug3aCRCLMsw9Y16+mhk7k6v96j6fBu IbDQQ+2wFAW8ewzAW339Rdkph3D7vqbGQU/BPTrxOZESxob6VC55uoeMUgK5uQdatmkBM33m8fwh CgbGjoGkY9sA1lRKnxr6ojwHuV0ApnwwlfEW3yUx6zbSA8cyeGt7d2omZmDm0x2zp41gZXeTsOmn zfTMxWLe3dkVSgYgUiP4t+0MP2cTgOfBMwo0DmrPBHlYEZbTQeHaDrNmjIVF+VVu0/oduMYH6SZ/ OF7sZiCBW+dxmDoqlClKPUkPxefzLQdPQmSnEGLKagE9c/QdN4MZEmjIHI/ejK0xJynkttTJWFk7 c4RS8CIljA2UVC6pPcLaf2I4+YciNMAZYlJ73GYugSQ02IvVl0jRatBUMrlnI+bywZ3YsD6WltUY Uncrc4jq2kkk1UPXCRNJezcqSj53nNbwRtU2EuaNuGf9Ua/tUWo/f99jIclFBw7lnu8Vu2reV8Nn rv7WXJ2erDp1StcxPEDvekZayMTBI4dIAocfoJRuQ8pzscZL8QSITolyN3Pm5sX8vICqy9F9B6/N uNRf+cm99PQi0lyrZztixplJh7KrRpTVQGLAP7nREEK45AUhu67lPQg9VZjcM37rd9+3HvTJ8oEd mxza9tPS8plDvayGLYsbkJSbOkDhPzh6CaUrphBSQ2k0+0mnif1PpvCzybX77QdM+3GdmwU5s2/9 4uqIIAvGzEzi+/3OxHEPOT19w8Zh8cF+ssK68nSJ89rGXM9Pan+6KKlz3Mbq70Mj5y7v197uyJFd y1WjOwVYD5r/a0RywfE+RkFDN6ykdNUEQrSDhvc7dOLmL7EHsq6En9764xfdZkbP89ImJeuXl1ND Jid4cUz8pznleu7WbbouD+vQPPnAK/oM/wpKk8UTWwx8Kz7v4ZT7RqVljbIVnwI49mw6Qgh/6YfI PSezdnQ9die569H1S78YMHf3fNO7+6/62oiYBzevtlux7/yn+WoDG9tWPb56J9Tjyr6/WDeWYbUs U60uuXms7Qf2ZqsM9Q3v2SnZKoAHFetxcs92hZ4dBpxx7T7gYpTXk2UaaOYSgwFdZ4WrGGOZqU/f fWtCyXNPPDYka0FHw49/OTf+ZqWBY0Bou+9n+NOi9/buda6fRqvVkkoiE8lbd8+PsCCVADDxm5Gn L45asnVbauKkG5uj5g6OWjuvv2duxs0jJwMWHz4/+w5vZeTcvPcXO4Ya5pC6BeJp8krxtCkfDU+5 Jwp2CGq+c3qvRtcO7t7tuHfv3qc64B+qqUTq1b4owsvw8ZsQ3vuk74mUdzbE7Lx+dlza+tlRQ+ev m9/B6n7W3VOxQcuOX/gkj9jJnQP7rI8Ol+X+C3vz//voiyYL0xe+q++p9Y7oM2me/fn3ynkm/R9/ /UzDZRFWDu8uQ+DbZQCpruEgkcnB8Bx4Xgdrn/aY4AfwHA9KKaRWzTDmnQAx5TnwaIa3PvJFRLWO kclkErbubshzXF3wQ8HInBExZRb66TiIxGIFw3N1x0bgEjoWn7bVEZZlUf+5dZ4HDJxaIcIFtcOK dYdJwcDGrw8zwY9natvo+cNRurbF8P+1RXi1jojFIlYkonU9YyJYBfbHpIC+0KgpkUpZljB17zfU s0L3Ee/ULubJceBFxgjpEykCePB87fwnU88u5L3POonVVTrIZBIpw9QuRErERmjfdwJp05MjgIgR iQGAgOc5cBwPsbE7OoydibY1GoCKGamMguceDf0xcA0bhzntatvgcYcVkcKn+yj4gdbOoYIIjs17 Mc7NwfA8Byq3RPOI99Gsvxa8lmVkegQ8zz8+HyglMLZvjffntwIHEAnLGFD+z87Te71eW4AVMmPX /UMfB36mir5OLhSe67xraVIrqcIw005f+2Bn1DpHXqYw04kcyltYWOxE7ZwaBgQMQFgK/vFwIaVg a9eorTdxm4ABwDJ1j9HbBEZVrXzLd+WV3Rk+WVe3Dt0781zzHFeDy4yqQLEmr9RTTQwVNnaO6TTv VtMqUImIPOm9DfzfmTvrxwTOxpE0nC1K7XRh3/UV57ar7hGO00akJOvJZDJjXuFwt5GBYf5kQDcF ABDON3Kem9j4WubFy7fPdj68OiFsrwb3zI3lRct23dar0fH2RKSQMY177wsZFrmi/grbLT45lb1u ZPOP6dGrNLHkamji9oyVpzap7hOO0x45fFVPJpWZ8PpOOZZKk/zxADcBgHXE0qKE2X5R1Tuy2TN3 Tvc6vvjM9tOU5smImq+hxJ4nSpmhX48tnd8dv7j+HB2wlKC23UQ8Gp7BSRjKAmAJaINDtBQQ1T7a Sf5Yb+iDeEV2WXnbzLyyJtoHOTqJyQ1/NBBgAYDfO+vzDrzXdLb61ztILjjWKXbB8RYy8Hk7aQ2j AbHnGCPWuHnfn7rOmPBjd/d6Q2FqHSEEDAUlPPPyy9T17tLybuyh1H2Z6aXvVTAkhIhY7l41pYQh ImhqCC4cZ64nnVZZHUtYF5VAF0UF1y4g+uP/vmmZVqYN0xkGZnQf3St2+Y4JL1XeoTyx35nbNT2r anR65/cuHd9v7+LI568lDGto63+j34q2kwCkAgDxiqq89HnLxSUPUqxP3DzSd/eCk0E7KVcmZnkz SExg3nro8gHfj9tef1g7NTXV4eB19aByrU5efX5HzzGDY9o1cOEiEn3n8i5R694DcOTxL4OXlp+Z 1WzRw4o0q/jMQz12zosL2U51D8Usb0ZkZrxV28jvI78euedN6SEV/P9BeQ4cWEglIlCOezwJk1Ie XP3xCkrBPf4FBQGBXE8CSrmn0z3JAMoDYoZ5ar8Aap+MZNiGb/zPllvv97/5x1G3UrpUxtTWna+/ qfYHqax21Xn6eBsF//RBguefLpzWJZbriWtXcqf109a+VghoqM4UlOMgFrMNbn9RG9R+Hk/X/cnP FJTnwDIMRDIKroGnSCnlQQCIURsc/1u91sUAu3yRnJqweey769af6RmbVNiJEddYlmtZfZGBaa7I 1H1/4MAx23bNHXaJEEJpdDgPmplEQaWUQTZQ+0j91KbyFJ7STTyPJ09aEfF1kUi8iRWRK+l10/7G r790RvS/XpGrdl4YllN+3/deYbmHtqamvEKv0anggeN2RLnF5Q2fc3tkFfgqEG1l/XpGrk1OPfr9 exNiduzvdzDtXjutsZUdyzASlZreUlg3utRjyNiYMNfBVx4NPdbdYM7GLZ8xfPORM12Pxae1VSsV jqxIJJKyxipOKzru2rzziU4jZuz6MsLpubW1Rv18/tLB78aP3R59vP/h6/fb6oytbFmGEanUNEtp 0/hC9+GjYyynD0mtf+MM/vxS5qkN899fuW7LiTPpBZ0gltrwxJDyNaJ45xYdYntO/HR3VNcn72UE AIh1laA4COC6iG2gt6XcgCO0NB6AhhJkNfARUoA5DUI1hOca2v5iRlPLvQ2/3pFjZ2VcpW9X4tDM 5/jd+Bcn77Y49crelXMm/bJha7/zN4rDGKnCUkcNOPCyY+4hPXYP+eDT2CnBpk+vlK7gq1gRe1Qs FmeJGD7/ZapFKSVfdnHuerVE3ME0KGLV9GHdfjaVV1BVBS9XPSzW1/Ja6a3keKek+PgJd1NiJ2zf 1vkygF2UZkpHtAhre6/KzNKuc5fvl3W3vrP8ZduC0ZQ91JLt4GvkajUIGniiFmAIW1mdy9donzpG v9nn8jKXtJn25bprl47mMZ10EomemtPPsAsOj56/87O9vcjTLzzntaU1DzXkAOV1lzRqHRouC+AY VWV1jfb+s78PmX/xdtrX7d9bsOFqysl7oo46ib6sijNIc24zaMvMbR/vjyC//QJzgeDv9Gd6xV4m zz/9jeG3qvRXenL+bK/h39V79Hv7/bd/U3tjevIppdLci0dMH+qkrIGlU6Wjo+MfWpjxD5TD3Lhx wyQjI8PI09PzoZubW2lD61j9Rn7ZqVOnzEtVpRK/Jn4lTk5OD3/vGzullM3Ozja7X1Eh1nEcH9Ks WQl5ZtLxb+SVHz192ryyoljsE9yu2MXYuPx3y7ufpn86KdGiSmxLmzVrVmRhYVH5W+lfF0opuXLl irmBgYHG2dn5we/nqFWSmWBwKTXDXGPkyPm2b3/f5pkg4q/IXBLmOmzBxfU3pK01Uw/sHRbVmDQY mH0Wopi5KMPsf3yzDz6vODrlG0qjRB/2jW55ttg31L1T7/U/Rw3JeVV1ehmUUpKSkmKqE4tlrjY2 D83NzX9zrtirKC/+4kUzCctKXaytH7yp59g/raKiwlwuV6yuqHjYp6qqCuTf+H6PN4dWqVSW8Txv UVlZKbSl4G9nZGSklsvlrQghF1/F/t6Y11nUBRwv1cvwF8vhARTX/fsz+dUAcn834dN5OAD3/mR5 1QDu/G7C+nksvCoBvPE3vLpA8blekt9j6h5cDuAPv9fvZZSUPLQuqOHsNJy6oODEMSNKaUH9gJZS SmK/G2GzfMkOb8pI1baNXW9lHAUIidIBiKc0LRGA7ueoP/5S57+iro5/6pz+C+U91/sqEAgEglpv TIAlELwJXH0CstxNbyUW5yT22/ntnJUnVnyyw9I58JaNo2UVzbsmDWnq5EirKnqnFxuFyJ3abh07 ss3J6U/ei4hHy3IIBAKB4P83IcASCOox67+ycFp88pzvjhVl3KvI7HL3TvnnNWIFr63KV6G6Uqaj YsbQ3v2qsWeTzztPfnv99ECDf6zXSCAQCAT/HkKAJRDUUzf0dY0mr5w3e9G2tRv3J5jIzZSGzu4e Rmq1Vnv7fuX9oL6RhdM/n1gYKCymKRAIBIIXEGYNCgQCwSvyaJJ7efmDPtXV1cLE7L9Gq1QqH/A8 by5Mchf8E/6zk9wFAoHgP4AAPGFZtkwkEj2E8CX2r+AAIhLaUvBPISyrr32Fb7gRAiyBQCB4Raqq qpRisdheT09PLpPJGAhBwV9BGYYVEQJWLBYLbSn4u1GRSCTmtJwXpfTCq1gwWQiwBAKB4BVRKBSV IpEor7Kysll1dbVMGNb6S7T6+voPeZ43U6lUQlsK/nYGBgZqkVx+/VW9jUIIsAQCgeAVoZTyAKOj lILneWHe0F9EKeWFthT8k8TAK1tq55WNNQoEAoEAgDCUJRAIIARYAoFAIBAIBK+cEGAJBAKBQCAQ vGJCgCUQCAQCgUDwigkBlkAgEAgEAsErJgRYAoFAIBD8hwgPXL4Z/jUBVvz34Q6NTBzXmPhOG00p bbDel1eHOzdr1HixQ+SWgf90/eqjlLLJycliSul/9jSnlDJDvCyHWDr0XNVi8g67F6QhyTRZHEfj /tByIMXR4bbONlZLDHt8N55SSjaNdgy1c2y0pvH0My1fTe3/nINzQ728mjRb4Tx+X2eg7viSk8XR lLKP0lAaxXzSw36wqUf7pa1X3HP5I/unUe1FP73XukVvf8evbZX6282s3LcE93nno0HfHWkS9YJz vr7DXw22GRHa5EN7E/NtFg6+63u9/eWARWep/GXLj57Y3Kq1sf5Km6ChH31YRJV/pO4CwetECKlb xoH8v1zOgRCgqvQ2PRi7G8t/XIut+5NpiYoTAq3X7F+zDpaW55UAOgLkwQsTqSokGg1vWVVSYkIp Ja9qsbA/Knr2oJCDdw1DGo393yYAd15HHf4BhFLiAaADUyNZ1FCCqz9MNNpz4cGIXJOAnGRKf33Z lyPTGugTQtpQngcAAsLYAUyYiKH7X2H9/zCi1crUNbx1dWmxIQAkLh5nsedq5Vv37dukUkqPEEI4 II0A1IMwTBuGkJ9edt80c4l0zpQvI9enMB9oZIZFjj6OaVJVofTO2eiIvPSLfbNzSqMopYdfdE7T s++b9B23Kep8pU1rp8B2R5WFV4zSYjfOvaFxlgHY9DJ1KK2sbHddpRleVVxy9+i8w0cBpLxs/QWC 14WAorKyAloqhr6UR5VaA7nCCOJ/TffBX0QYcA9uYPPShdwNeJMARwl7ac82nczCgukV5MQyHP+6 a/j/1r8mwBKJdJRSaEHwwrPFd+rB62mURnoCutcVXAFAzsmDfqeyXd5iO6sO478bYAGEcIRAx7B8 g21dlBCtd+mMaFC6teLMOuAggJcKsOrwIKT2s6aEpwDPgXmtV4rOc+Mv7J2LQbXn1yjkn9tteD5R MjSvkdUuAEcfJ6yrr47HS5+DKz5c1nzvBfK+yqZLYvhHH89eMdj1LgUQ826I74odqQszDm6bPWy5 ewaA2w3lP7f7V7eccq6lqOWo3SO2TZnj+F2Ecuk3CbvOJ54JoZRGk98Jbgsvf6OYHPFtD4VdQJZR 1Q2iyk0Ii6b0UgQh3Mseg+D1errnhoLSJ7+nlD6djtKnTs7avE/y1N8ffbIjkMdpSF3vSMPlPN+L 9HS6Z8v/8whYRoWUo3uQq/BBS8t8nLpYhS4RA2Er58HTZ+pSr9wX9XQ1fAxPt81vbydP9xw9d6xP b3/us2kwX20eiieLrD3KxzIU97NSkFqgFA2cPgLtPPTQufd9MZUagDR8aRb8Q/41AdbLuPp1mGsn W6dp5UGfHr/yRcu03svuTlGHfHa8MGb09kdpxjoZDjpU6dO+42eff7Hu3Xa5NC1K8vWSk22OnL7Z 42qhzkLp4l/o1XV4zLC5g5NfdHPZNbuv65aTNwedvZLrpZEaUudWPc8HjX9/R+DWSPrLkSvTF1+p bl+muWW3dXLnr1zCRseGbF67ev0uX0WLhQVTHtj30gWIrqrjLpZ7NuoRue7k+llx+5f0t9u178aA +KsFfqWsJTxa9z7n3fudmB+GOZYBAI0OZ5efrfY9lXyzV0JqoVu1wopza9UtuVn42O0rIrwKKY1i 5vT8acCKDOugMaP6nU7dubJ5ys0SN5GNV3HL8Lc3hRvEF+4/fL7fqQvZ/pUSK65Rx0FxHYZM3RnV 3bQcAGhalGTh9yfaHjqb1f1qoc7CwMW/wKvHiBi/OeHJUXVBzv3oifpfxVzptzv+Rlg5MWE6Rc64 aMQqrPkGrpOUUjLV2zRi1O7KIWod9agoijUxtvYw67Awafmx6UHn93zc2zIuo6jP8aTMwLsqsb5p o+A7AT2Hbe8/a8DFl7mh07iJ+oPf3THqWImDT+sP5i/f/WHnSwCwI6q/y7ZjGYPOpeY1rREbUucW PZJ93xqzc1VE4J2n8480Chn766RrdqM11u8u+D49gmgyPmyk/HRvybSz+h1KFp3fujaCkGqatly/ c4fPpl007lt9Mn3l4r0zghuP2vxwkqzTvO2TPRRWUw9UDKrSwrnqwdbBpvZH7LqvzFoGuKYC9uB0 OrFz4a/+Fi29eiWk5XqJbLyKA4ZO2bb7k8FnyKPA8XF7TZaOb7m1Z57cm7h3CF+2YohbLoY8vpBe WtjNbl3u+ZT5WTlZLfGCAEsiYnUcCK9VV0tbp4NcybrunieSGRJbx3wAv9umNzZt87pULvN2GjT5 J5v9Ex3OXM/osWtx4noA934vr+ANUJKF2EOxuJBVDi1rq+rYq5estbcFy5WnYcfGi2g6ZBB8TCTQ PLiNg4ePwsJ/AFq6G4LjKaj2AXas+QnqRn3osA6uBJSARRnitq3HFU0zjB7cBnosh4zj65FCQjAs 1APVxUlYt/okPHuPQgdfC1QVXMO+uPNoHNIP/o5A4q9bEH0gQyc1MWRZQol9q74Ib98MSiYfh9cf AAK7IczLEsyzUcsfRHktqsoLkXr5ukbj48Lc12SJ7maJoAUHCgaaigJcOL0fCWn3QBW2aNu1J/xd zUEqsnD41CWoq8pxM68KXk19KFN2mdx8YITOvfvD1ZTD5fMJiEtIBQWBg09ndGzZBIZyHhQEVPMA lxKPI/7CHfCsEu7+bdGmmROUMhYP89MRf+IwrufVQGbsiNY9u9OmVgaEBUCgQ35WMo6euoh7pRpY eTRH62A/OFkoQHQluHz6VxqXdIewJm4ICuuOQGclGAC5188hKYejTc0qybnEi6jUa4zO/brBw1CM 4sI8XL2cjgfVIlQWF+CWXAFzG1soGPpU8Cb45/2nOlG1ItYYQGcGtImLb7MHbqTGm7t2esBpWjuf hCa+a5ojkQzQuPk41Bj5VlKaJpk5bcP4ZXtzv68ycjdu3z4ox7Yk2TsxeuWyqLe3tm+ojJPzOjv/ sOHUsnP39Hp5tQ0tCGtsXFYWHzNh+8dRyy75fWTSY/iQhGBn6yyFTFkd/O2YFwAAIABJREFU3Ln/ xX5dgtLkltDUUKk+oTVt7yYffz/hrlHrpq2bF4YEOTw8OLeL14KlySsO3xIN9GzdLj/YUaIpid84 JXrV4qioBGoAACt2XOuwadfl1ZfVDn6te/a+Fuxp8bAsYdvY7UvWzF2QXGoIACIRda++nzV+88Y9 01Q2wfrNm/vcU1RktDvx06J1i9YnrUgqM2vVNKR9vquJ2vja/s3zdm78eVg0pSyl+6Ufvb/h7cWx d7+rMnE3atcu6LZNyXnfhC0/Lot5N7odUDt89cXynRO3xN39XGvkax7Y0q9AnX6kZWLuvd7lfMPn UMuIAbd6dwtNsNKTVpg5NMnvPyQiIbSZ3f3sdeFWm3ae+353qm6sXVCn4o4dWtw0KTvvd3zTqmVf Td0TCAAQ6154VaC0vWzsx7GTEwpN3zf3aZ/p0btTFgCc+by748qfTiw9W6jfxzMkrLCDl2Hpw7Mx 42LnL1refWG641M7aT+r2p7RWegV5AwMrrhoBgDnqiydrt0uHldZWRG58LMMewC4cXCLa75I1N/Q 10/qCWgpeAtCSFcNxzl3GB5xvXtYyyRzuURl6eZ3Z0BE/8RW3oalAAjD8rz63g2HY1t+fKdA7mrf vHnTe0YV19ucWbfim6GrLzd59pjSp+1SPHigasaam93wHNn1uR7PPt1c0hmZuuJ62p0WtN58r/oC IkdmNjJkT3BJWzvPmNVv5sLD1Qvz9PwyOw/vuenZgO75NqXshgM5XWv0/Hib5iF7ewYYx4nLL5tn 5pW0/q18gjcBAXSl2LtxNZ+iaYIho0ZjYCCV7d21X3NbxYOvKULahXSU6VhIpBKwfDVuXb+C/Ac1 YAgAwqIq9yz2nUyix3bF6u6U8WAYAoJq5KZfRPTKH3W7LuZzOgKU3L6C1JwSgFDo1PeRsGcnXb1p j/b6A55SdSky0lNRVK4DSzQozMwB69yaHfH2RPL2hPHoFeQGOUtBqAq3rlxBTnEVXsWC91UF57Du p404lHSNTTuyh9m8OxEp11LowSOXUFlRgEOblmDt0Qp4ePvDouIyfly6nr90r4bqHuRj/6bVuq0X 1FR0P4VbMG+F5lalFb0bt0uz+/S1mqL7l3Hi1zgYmNujkbkOcesW0c3HU6mWEYHlVUiIWU4X/nBA V8Waw96wCifXfc3tOVcAviIdq775hh68Y43Wwd4wvHeebl69W1uspWAIUJR+HN/N+447n83zjvZm KD63nl+78QhfVl6KYxsW8QuWp6gVJja86PZh7qtP52pP3CgFI+JRdOEQVn/znWrZzsu0RmKDglM7 sGTtUVqmrcGtuG2I3hvPZVxL4jcs/Va3cuMB7q6KF14n8Ab4T/VgiXhCKSU8yxBe0X35/eAmO/em Zl0fMv3LdE8Aiavm7GpSVmXoZernsHTzMKOyYUkBLQ5cqR5LGo/ZP2LTO59NsLGpSp4R4Dp9x9Uf Mm8mRvY+TZP2tiYV9cu4n3srMJ0zbiIJ+3TuoR97/kQpZad0C+hzNrd8QFEZz3z3zZptC9oaWF3U c/Jy6D5227eR/sn46G0sXt2WAiLKOIcldJo0fdzK8U0KcW6abNzUy59l6jztXAd88M7OhT0SKY0S ze/y4/gfrh+bvDP23AEAB6sYra7SPugnWdcvdm+e3SiPUiqZH2Yx/cfMI8PSMie5IyAqhVJbCoVj uWHzdxbHrX9rFyGErupnM/iT43eWXTftf3HGos+nfNzWuqjkpz723eadWZVxM7tnTAw26CfMbnrg inoM4zk2dsTGqHkTbEjV2f/5u/1v2+Ufs64nRbbMpQlJS729Dt/QDuddBx99Z+H702e2cSy7+UNn i+lLsr89VoHgZz+HuuHZ84dGuRbmGMj7Vhq5XPhk0ec/OxOi7jWvrXOpwvKsXtCHK35dMfA0AMSO 8Qmef+TKmsr8C20ppUkV2/o/99lSSqmzolz5dnDGpCM3TMYqAnovnXr4y5UTCKkCgHv5mQHXOENP cejs+YdW9V5DKWXe7xLY+0xeRbhB8WUT1Ov5IcS9Zs1A2/jEs6lhRaUVjSmlBd9HNG5dYeim0asq Mai+vNsXwI39v2Z4ahlHsYunUzwhhO76sDkFBc9z4Pp+ui5x3xCbh5lK/b55po3Orfp27gZCiHYW DWeB0xDJjarMW0YuX75+4qZAQrTrh9qGzzpx5+ukS7mtAKTVP7ZclaW0qlplKDEQFTZvCvWaZ47d 3N65nOcz1ZqyMsOU2i9Fz/VIkcYfVZz62H9/ypLU8AO/5n5i7dNt44Ap02f9GNk47/f+bu4sCHJM U7HtaGO/c6ZBDnkdjbpVrTi9Kz8z7nCPZEoPBNa1seANxDDQ3kvDwVRePXB2C5m7gzFDLXuyw62L 5ApKAYaBTpWLkzs3Id9IDE3ZXXo1V0udGTAAAYNyXDyZgsZhA4lR6RWcTivQ2rd1FDMEEImsENjC iDm3baPWzXICK2JZsHXPWlBeBFu3FqRacxcxe0/x44LFLMuydcNYBAzLofTmZRJ/vAaszAxBwS1g ZghQnoAVsa9sIrqeTXMM6KxG/n0V26rXCGiubsQNkwgyrqcXitIO4sC5cnR++22ENDUC9TTC7XlL +ZPnc9gm3hQ6xprrOrALE5Bfzl4oo2zHsEDEZ8eRnIoq6NuE4J1PAiEWS0A1pZBVzuO2JSfzxV2a SfSyUxB9Ipfv8PZMJrKNCxiqQ6eA62y5hSW4qlzkFZbxjL2CKp3aiSJatCcdSx9IzEUAV/MAh3fs plU+wxE1uRdjLgFq2rRjiqoJagoSEbs/i+/yzhfitzq6MyhrB+6zWdh99DJt7dGWQKeByNBK3mvU u6SzqxxZjqV05tbzmpyq7tLgwVNhbmPILo0pQOSMjxhvWzEoIRBGB1+//1SAVR8hhF872uuw/Y2H I+8e2dWCUpoyPtg6uFjfo8rEvuUpADgXnxn4sEZp5eLM8Fe/+Kr/pEnTsFtTLuVFd5mHuff8yo8m GgJ4KsAyNLfMNudvFN2PXzyw59jZ9NMFiy5ZD5l9MjayU3wl9Ms3zntcg2dqpAZhxNTYzS2zbHyT EkIIPTg+wCg/t6IdMRNXNGEv+/hNes998uQyiA1crPnqYpO75xK8ABycvjnjhHJaj/Jde/qMv6tU uugrlSJzica1UqTQv1/GGREC+mkPhpEbGRaZtel169H8s9YdvG+wCRklnFNQ+sdtrYsAwGTU1DLF 54kFTGWVh5sjpGe/vNm8XKu0dHcm9OoXU/tPmjQNseqHMojzmIe5BX52R1WGh+LuNtVqTY28OrXd NbNN7bCl69uHSqTLbTIULIJe/ClU185Arcf3k1PZR78fGx19ZEF/J6t33iqurNY3lFADjYa3MKes aSjA7n1mL5SwFDUPJaW7o0ZcuaH2lLTs88vMI1+siqx34ze0sMoxR0ZR4ZklA3uM+Zj/dMGiixbD ZsXvjex0phKF5VsXPL3Pll1bXTQ8l1BxIf5qK/S6ef7CFVVLqzYTDxpfXa13V13epojSg+80tvCt NvUu5ln7jIaOjtdpKCB+/vccw8iNrQr1Ww29/Ghif7NAz2z+xI2a0qL7pg3ti0ADoIZIGvhaT7Qc AQDCMJC/4Gv/L0Ptgj6Nuf0usfK6764uenhfS5U3C8QspVT0+ajOnXNsB7D2HScciAolumfzrj2Y H/CgxtrJ3Mxs2RI38DfRs6y9275TN24mDvho8Q0vAOcbKlPw+hEQ6KpU4HiWZ1m2dkhIYgXfphYA YVCjpiCsBEojE5iaSFCDCiKX1J1CDAPtves4cZOHbz9vGN3KIvvPn6Edg5xgKwEABq7t2jNOxcek sTFn4K8HMIrarJTyYA0t0SeylfjchhM4IGlGKa1/bhJI5EoYmZhALFZC+rfNOBdDowEoJ6IMCLmb c49SU4JqTkcqKu+hIPsmd3DzCpKiAAO+BoWlKpG3Sg1QCsIoqLm+mBICKGQySNjazmFCCDSVBYjf vx/x5zNptaqMFN+6SjQ+TVhep8ODgkyoGCu2uasNJAzA8SyUXk1hQCko743RYwayG7Zt082eEcs5 NmqpihjSW2FuybCoKcCt2+XEJ8KXtZYRaDkKiY09HAiPjBPbaY6+E4Y0dhJJKAfexA1+no3Yc9ez oNKGgBIGho5NWB9bOQhDoDA0oAZMCaUgIAwLlmVBGAasSASWZcEJ0dUb4T8bYAHA6BCjW0cu3jlf WJkRsmLNhiNl5WyY1sjq3NyFbXJ6fQvk39MZqlUVyvM7fwhL4apb1OaiRKeulnG2muvmWtVzZ2mn z0+nnL/ddsK5m3mjLsT+NDyF0An65m4luw+kbvLs8tbO360UzxOk1/73bjEvKa/gjErKL8q2rkwc Co6rLU+nEalZi1tG1epSSin5pKd7zx0XdVGsW+v0noPCDjPQPBRf3dt9723SWaPhWACg4ClPecJz 2scXOcpzFASUEdWf8K+hLChlCKGmRiBp93WG6spKZcKOFR2SuOrg+m2gs625YWMCmlesU2q1FoxC U1NY/1DISywd8Kz4BT0dZn635/u7Ch8z704hu60UNVn69y46xJ1JbaJ6wfkoFrFUXVFmdDmjxl9P zPOqB6XOp9Zk6wNQPUoTNufUxb63Wk1IuVk4KvnAz8MuUDpeYe5auuvglc1OzcfseHafeq5ed/2N Em7sy0j0STwjDrygM3ayb9F+fqt739mtv5M5Ys+yL32KWaWn1Nb2bJuPm5Ydm/VHjpIBTxhKeO3j ducJw/MUAM8/N8TX1InV6Cu40howpvtPQPbs9oLsG0Ysw8vFxiYPPBvovUqLam41Oybrf5cQbOXf bdD4HndmmW28dOjLxF0G8/Y26fBtfMK1UXe8yu8p+uHgs3np2hDl0CXXut1WlZp7Zu8a1rnrru6g IMxDxrGqLN/92vZ1YZTSlN8bZhS8HpRSSE2tYCJXi0vKVIR1MYG66Bqij2ZyLcM6srYgkCisERDW DR3tZKgqvIrsWxmEpwQso0Va8lU+LT2NK+Y2iGSqXOZ6aRnNuNMNNu61k94hMkD7nn2QvuAn7c5L Vxjb4RFPliThdVA6tMTgblk06uv1Wq2FnaT1oysClcHepzV69u0AJbTQajXQ6B5FYASsWAyxWAyW cuA47k8GBBRl1w5izfq99NyVkuoq/CK+mZTDmfMn6eXGCrkpR2Hs3JgZMPod4mfOgKMEIrEY+kbm YIrO1LXfk33Vzt0n4KsqsXvRFzRB5a8dEh4psTflcfnQKiY2lwMFIJEw4Kof8uWqGkKInBBCwDAM wHOgVIlmnYbCrXkHUfqVBLr/5616X8/P0X707Ww2RMFAwmppWdkDysGJIQS1wRGhEFNQsU7Na3ge ICwIagBaBTFhIHkyqx08rZ3mTile0UMCgr/TfzrAImPOVHzUxvLg5YL8WSd27+mfU2NmqefRbWWv up4PM2OmUl5jW+w9ce7HR+aGn8KT3gEeOQyNmR/23E1l1apV9kYtI6snDrWdfvPmTSnz4LrXrs07 xl89UTVfaupwD8Cxl62fuVGVVl9fXmluGRb/7oYtM2b6kArUDgFRIJcvOvsxf2/hVr27d0qGPzBu ca/fvA0zV7QjuQCwuq+x5f48Nuy35i/rOLa2/+gFt8aSB6CmRqRSXmNb5Df5y/8dmtPn9NNtsINf 3GcHP7+l0UOJqkxbI5EYPdPCf/hv/OKJc2F5GgNfp7Ez34v9pGMsAKRMtW5y4bI4UvWCiyxPNYSR maotfEevGWuyL2fDmX0fxW1XTP4wg371dePaIdwV69bZmbYYrZ4w2HZGh5s3paLya547N+0adyWu +nOJge09AEfq79M5NEr9dUTTk8fOXxu7bY9yCEwCK7Ui5aU+fZvk7/g+NfLUCXawlrO34TjT1VGE aP7ocT67BhphaN1DV8xzB2k7s3uFMvZ2CnencEj+zj3uAJ4KZGMO3/XVqvUN3NztL5IGHgKITy62 vFcsbWrp677+2JLIC0Akrwqz0I9J3xX16aeXFpWVSu1MDQ0OJgdA92z3188JqsbX7klCaiBKvHA2 ruDREoViETLN9eQm6oqbYZ1i1FvwX34a9t+McmCMm2BQZxfpzgPbUHXNGqo7meo8STPaWV8kxwMK nuOg02mh1bLQaXXQ6WovCDUleUi6lMmHjp+LEV08iJgvJrHff4uEpAyEuNiD53lwHA+plTcGh/uI r6WdoepH3xkoBeV58LwIbq17kgEJB8XfJ2koqbt+UKiQfno/v4nNJTLCEXOXZmjp6wE9BuB0pbh0 YCcnv2vF6jh9rmnb1oy3tZKQPxwyEJg37YT+Xe4T1pTVGzrCFZsW1IhbvD0eIS5ylGWVwJgeRdr1 PNrBvy0R1ZQgPasAMDSH9DdmKLHFBcjKKiMuA1tL2rVsjIrcK7iVlkPLFF6U50WslVszeCh+5WM2 HeJsJvWVWEpKSXpSJqReAbArTcbpmzVq/9AO0qCQrkRfncNeXJmhfVDNAeYOCG5hjRU7t2qOe9qK gz3kbEFaKvJhBS/XVoyr6Kz44IGT1HdUGGEKEnAi8Q7n2XEwI5eIhOlU/1L/sgCLggElAERxcXFP hQ2hoaHPDX0AwLgOZsln1t8oSjjLTVIbBV5994OBKVHr6/K0cz4fu/P+w9QDJyMm/3Tqiumd42Wd DdLE65L5UM6ro6brxzgVQZ5EMJRS8tVA/x4x2Yo+Rn2jPjO5Gp8UExNz7n/NjJ3yisq6EFJjCQCE gHK8VlRcVqWMiopioqKiGgxxeo/1KYtNP3ki+e6d7jHfrQ5amZx8HCmraMWNYpvzxRatm7y78Biz v2cl4W+JtDqqn305XRkeDjbSI8xq7bbzbapqeDmLBuc8v5S8jAoMDrU7v39HaeWVA8ciPtgcd7WF qKjMpWyD9IcTorbEp7t6zf/Gnuz+WbMrW9fml1w6k9L7qz0ZiR/2blRZsCrUWEVrXMu5Fz8oIWEJ pVRHdDyvfxiQAlDzOp2Y8lRcmn/fNCoqSuJpcIjd9mt+q9tFDxxlTMNXWF4HIlUalCta9U6a/Tl7 IKv5GtujKb+OPPCJ1U1K6QZCCFexf3H37bf0+xv0nvuZaVp8YkxMTMIsf0PHvPul3YhIZ9XQumhy PeV568r06ZtPGvW169Jppet7TUu9C4ZV+Kz6KOvYsdIhEvsWV616Dr+WfWBawwcolYDyWqLlqHID IKGU6oCIP/w5EBKlWT2sya8p2Td6ZcdvmDzo6635/PmM3PBwoHj/Xv/NB2+OqLIOu9bex/dEcgP5 G9lJHyqvqe7drqz2mBBbYbSyp7Lkk5++3ps38FOPbRfOzVG79LruYdbk7LPHT2k0+2nYxG4Fcrca n0k/fXJhtmfCo20cB4xsYzp0S+qtL/J3rGoGIcB6cxEpvLtEQuF4CZl5Kpj4dSU9/ZtKLcQEOoPG CB9nCAsjEXhKITKwRbd+w6GwVULLiNCqc1+Riasr5CwDypqj9cChcFCbgVBDtOo/GDXGdmA4wKFF X8z6woWUG7gClEDP3A+DxjjATh+A1Axd3p5HrEIr4Wwth5YDfDsNBLXJAy8WEwIKmUQEQih4Yo7Q oW/B5s4DwkhE0PJyiNm/NnxIjOUwb2QFmRSQuAfAwUIKUMDIwRdjhrXDpm3LMf3sLspyNbzIqTUZ M8GDMWMYSCQSsAwhDFPbm8aQ2h4uqZUtQl09sXbDV/SDExY8VfOcqkDM6HuyIJSD1KIJIsaMEq1a uJF+Mv04FOIaWiHyw9vOLYi1BLi872eya98+aqCnIyX3q3X+nUeIA6zEoIwEgX3fJh2zfhSv+ewD bDGTorJanwb3e5cEePtjRGRXsmr9Wu20CztFePiAM3Luonu7c1OpiKFgWDEkYtHj5R0Iw0IiET++ +BKGrTuGv9SUglfsXxNgMYyIUG2FTFR6tmv3nl0VOp6vnZfCgYgMzB5OO3p3LS69BUIoQ/FkGMZ1 TmqOx2aDxAytNBheXc/M8UF+VN22rss+STl3+6OlvyTtm3Lw29Qt9naKW0klWaY3CiSOttKWq8KB +Pp1IITQnZODzkrj0wdmb/74O97OPK1Hp/b0UHq6X7F9cIqVmXcSALg0ssgQXS/B5ZVz5hsN7P/L +Hy6Ab+2AKGUIQx5XDfSKqb6wOyQVVkx2fbXDy5duCrH5bINuae5l33fvVThfc+hQpVgEXWi8NNe XjHG5y58lrFsyFob05Dc6Zfvm6kr9Swg1aMPHlQqAYCAYRkQhqfk8dWKMJSAEAYgT0dhlIoASFju HtNt6bzzZ299uHRD8p7Je7+4uuWirV62pCjLNPO+xMFe7+FKCsRjzjtpvePn/LQla+fE6O9u/JCx U5mhyqt2Ts1ThxIDSsVsw3/W7dvbla++fOtqeVZizy29R9Gpe3NWBWdMOmGXfnZA9r45s/bZWPTZ o1ZLy8oY8yqJHhVRqcHdm2Ch5QhAGJC66JFQBoCI0dawhERpbn7Tb0Xpz2ecziTu/1+zceZ5lNKj e6YFnpXGXxuYs+Xj76iDaVrPDmHcgetpfsW2wRfNjT0TGloXbZil5s4ZS+215HyLUFuF2elVhGhX Adofhjqd2reraihktuk7Jprn27z7qD1ZAkJZBrX1CguyLF179e61ktQTgzcOmiBKjpy7dnGPmDQQ O4YhhBExT74mE44SELD1z836xm5ckVzef/j81UmnZpxZcjnG2tosZ9mXpczNjFsBats2lc0Gj5y4 brRbboPt/MO13MPtbVbl3zk+JWP5qIVjt7CpTHWJMrlS1lasb5QtKs0wKrwW1yMqmd6OCnwyby11 xU6bE9eYHtS06fXPZzVJ7z776f32DdRPOpmVezfrfs6A8Dh6LCaUVDZUvuD1Y2VGaOzfAZ6BBKC8 lON48JSClVnBL8QalOPAUwpGbgRP3yBQXgceMng3D679f93aVqYu/jAnFBxH4ewbAEJ5cDwPSozg ERQKUA4cRyHWt4N/K3vwOg48BeSmTRDShoDndOB4wLZxMBw8n1yLKM9Bx/Gg0EfjoDB4tni0jbK8 jgP3J5cT4Hgx3Px6wrZp7SKj48Y0g1JOaofSRHJ4dRpDPmjaFVm5ZWBF+oy1sy2xULJg9Jrho3nu Uj1jYyK2jsTMAAITY330GDddpJMYwESvOSybZpP7pRxjbmVFTIzFhGMkMJVx0HFSuAR0xceLvcW5 hXfxUCeHpb0bHE2lYJkQTPnSRXo7vwgVVWqYmNmKbO1tiVJWO+lcYdoEkR/PYTvl5SC/TA2llQtx srKETMKgcdthmNWovej6rUIikVqwLo0dWBOlhPA6Hk16TMQXHUUwl7GgFDDz7stEzdFJjZSAliOw 8O2L9104GBgL86/eJP+aAIsXy0sJr9pw/26S+eG8pwIGIjN2IqJuGsKKNEWUYishT1agJoTo1g8w 2xGnMte5t/PbUX8uCSERGkqj1jl9cCpt1f4bnc6erLAydmh6o2mfQSu7De8XT8jzE4L7L026fOC7 kWPW7z3f/WRCeuNqsQE8Q7qsGRM+fv9XI1rdAYDAIcNPhd6KmRObdKnlhdSAqkBr8LIalPPAXp6j BUWeTwbtun1+5nrauvApy2Iyum1PiPe7xusxLkHdY7pEDNrzdZjFnW8AfLZowk75l1tLNsSmdbxa ZCa3axtx4IsOXNriA7kt1DXqXEpBPutFU3gKQlm26NG+WcoXUUq3EYbU6/jgdJShxymQTiinrmuD tW7vn0z98WBWp7MnH1oaOzS94d0n/MeuwwacrhuS4rLjon7CupN524+eCNmXbmDi07FHfNsm2uPH C0gjFc80uLo+GZ5Yvnxqx0WZhZcKrl29KlIWqmqCP4zNPPDV8PeWbTze92xqqqO4UaeCiTP7Hkk/ /ItzqqEp45gJMCweUNAdhKeZACjH0xsA3cxTcgsA3Gbsun/gvUZf3tp+OTLrWrZDTDrEEd+lXD22 bMzYtTvPdz+ReKpJNWuAJq06/BTZb8z+b8e2a3DtKOMFH1XKz05db0TsL6odQy4/+r2BtUucpUH+ t2XGXsds6k2kZ4n2LijZRFiaDgDKKReLvp7Y/qvbu6/mXLmSXqN8qK2pfeCApvCUUvBs8aO8Wp57 7tx8qq1IqI5SbG/0dY/Un7endj+bdtlZKxHDTC6VSGvuut/ct73VxHXZ11aMci58Pi/haFzUFqdf r97YfTipw86TZU6cvq3Wo23fDd9+GXBu05R3OyQnnLIsuX3TBMDj4ym+m6bIYcXHGK+Q090JKX92 v/5ffpNrsGf0KtXtfCdxwunnZ/ML3hyUguN04J4dQKY8ON3z6ep+qPf/R8m5x132/FM7o+B0uvoJ n9ovpRzqb+Y5HfgGZy/U7ufVrV5LIJUoIZNSUEpgoqy3cCeloIwMpvZuMLWjQN0zjpRSQKQHCys9 AkpBpSaw1K/NZ2xhXZeGwMPbDx51b+F5sktadxQMDCwd0dTKoXbxTwrwlAfAwMDCHj6W9qCUojbv k0VIKaWQ6pvAubEpnGq3o3Y7D8pIYWrjSlrZuDxdVxDIDM1hC9TNwQJEciNYyZ/sWyQ3grn86UVL Ba+f0KEoELzBoid2tzqYcPbt45VefRpP+GrOwQ9aP/uQpeANUlFRYS6XK1ZXVDzsU1VV9f/yvXiv kFapVJbxPG9RWVkptKXgb2dkZKSWy+WtCCEXX8X+/jU9WALB/0cRK/YX0pUBX0eetttWqqHP9V4J BAKB4M0kBFgCwRuOTEipAlKuAdted1UEAoFA8JL+U6/KEQgEAoFAIHgTCAGWQCAQCAQCwSsmBFgC gUAgEAgEr5gQYAkEAoFAIBC8YsIkd4FAIHjFHq+XJKxL9KcRQlC/+YS2FPzdaO1J9spONCHAEggE gleHADyRSCS1PwhrN/0VjFgsUlBKIZfLhbYU/K0opRCJRAzHcdYALr2KfQpnrEAgELwilFK5huO6 S1jWDYAGwjX2r6AARDxAGEALoS0Ffy/KA2JOqz0hFovPN/R6NYECxsZkAAAgAElEQVRAIBAIBAKB QCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBD8k87+8LZtCzfzd818+70dsLDc 7HXX5xUj9f79XjrBG0hYyV0gEAj+IYe+6ayI9Gk8x3lEdO/fSndxqpPRlIjeHzpP+LXt312nVYMc u7V469upI9dly/7usl4lmpws3rD6wETOPKhnWEtfTa+mlH8t9aCUWRTuPbTpyDWjoyllo6PCJS4u 4YZRlL70/bV0gbHh0HYdPrFp/Wkvus7PaEAT+desRL5PKpXvMLF03dq854TZo5aftH9SJsjGmX08 IzoGz3E0M9/s2jRkde93vukRFU0lL1vmio7y4PZ9p0QpZ5ab7hxu4dtjyPRZTT5Otv6jxw8ANKq9 yMmpr1H7qDhhbc16hMYQCASCfwjDGYoA0gwMSn4rnco7jHMyscppLdcrzf6b66T0alsaKLa8ba6o ei0Byp9V4ZFgcKOY8bIYPm5D9Bd9N+PHqNdVFWrSNOheS6mRKBygsZrqNhoqHuVRUDEVQPHL7EDM ayU8qB/Al6oePpQyyia+bi1apA8KNT5M72WZnz1zOOLsHkPrtw7RDzd0IarYj1s22rgnc0GBRau8 iAndtqvSD7sfP7l/Rn6FjAWw92XKZBhiTin8xTW39Qx9Qiu9NQ63rKzkNdf+RANUeCjdJCLtXEdZ wWcA0v7ELv6ThB4sgUAg+AdRQnSEEh4AaOZ+6YIxYW3dzAzet23S7p1hC/d7AkD+wX009UwSt/+K itsz2kw5rHnzQePe+7RLSyfjCaYOAVM6zNzvSSl9amhojqexQ6/WvYa4flNoAQDR4QZuId3fjTAe f8SQUkqWTOvp29TGaIq5Q9P3es5aExRHqQgA8k4e4c9cLtA8/Kabe//Ogwe9OzKiu4uRYppt0JAR k6MzzQGAUkqWTO7WzM3E6H07n05j3xkzvoel//u9kikV16/DknCPILtmkwZEp6VJAOD93iGBdl69 BkRTKqdx62RRb7UKczZRfODg3WH8uG+PegBAVCtLi/5BoUN9ojLtAGDHMLld526jBtmMTzaL8jdw 69+2y9A+HUOHWrv1GL4gixoCQOmCAMPRnb4YdLVU5ZW0dWEve69RXSil7NFl75oOaesZYaVQfOTi 333UR7/EO9AoMB/2C+lkFvBhKKWUUEqZ8BYurdv3Gd0xo4gq541s3d7NRDHN1rP9hJELDzV+dCwf eCgbd+84IsJtSYkBAKzrY+nt22Nm/5FxVDatiUlwvx6DBof5Nx/lGDCix+3rN0RxqWU1H3kb+S/c enZ4adHF4Pf6jB5nNum0DaXRkg+Htgu1t7D4wN6/+8gZv2ZbPXdOaAglgI4Q8FCpIJIp1aWs2+W5 c784MG/ltvUTgthVfM71pmzGERtKo5ikSxX9r+q1Vg2a+92n38yfs2P5ztOLWopT46XVud0C9lG9 +vu+ED3TvHcrj8GmSuOPAruPG/Bl7BVjAKAcKEA5iGT09qE9NCnphm5HqoYHgFMb5lt3D3R+y9DC dUart2aHxVEqmu1n4N6/c/igSaOHdXMxUUyzbR4+cvL+CvOFrawdh845Narw/tXm+9b9ONZy5G7v F577NJpd/UHfAF8bg0nmDj5T+s76JYhSysRFtZeN9nEZMCBixIBG9gHvhLy7yuvZvAmrJ9v1be4w 3MzQYkZw+Ie9v9pTpASAt13/j737Doyi6PsA/p3dq7mWcum9EhICJCH03kMXDUVRUARUFEUFacIB ioAoKiqCAmIHpIgUETX03iG0ENJ7T+5ydXfeP1JIEBCfxwef53U+/2RyO7MzW3L7y+zMrqZTj6T5 A5FMJZRSsnhIeFf/wUv7UnpK+ly0e/+HHhmXFBfeamKLobM70j/Rq/hXYAEWwzDM32T5wrn9N6fY Z0Z1TfTtFiyJTtv00cL4WUfjAiTFKkLo4xwnxrjLXLVVRdmvHjt37eXwjom+sZ72PoXHN8zsu7am ye0cB0+DOJEbLxXsngAggG8GQsYSiU773SPu8TuOG+d5xQ4OGxDh1Kzs183z3pnzTRwAUOroRCke 5iTylnlpZ95IqXQd0blbF3e/mpSnD/zww3hQyu2dGt1q49GC+Z5terbu29o9OOXEkdlWi/kJAE0C LK3e092jJu3ZwzeUwdQACXHQ0YImolMSQBesWjF05w3Zqy27DfLs7EdjL2z+cEHCgpRoF9g8KKUT rJwQCADEJgmihIwVpRZPmZSPyM24vrBM5jeka5dWimZc7XgjoXkvMSQ02KpTqB2+fn41cbHhNbg8 X7lr+/5n0vmYoZ37JiLW2dLjzPq1U7a+TF3gkIT7izlPL6+CC7a7qzh1yOPlNn2rXYY+iduv8tOj ewz07hLItbr6/UcLEmYdbg0AlNAYCjqW2pU6ABA4MQ5UfKyiAgoCoeu1K5cXycJi2/XtGi3jjJWJ gl0YENS+ty3QW1ctVapswc2aV4+JEenshxc98mu69JXYLn08m6tqBu1avGiqIZ063/PEIIDoQEOP op3yhONk1CZyQsY+yG5er2yhje56dlZXTTEAEEJsgQrjKipIVp0+DVt9ucp3o10Xr/hlerEi7qFe vbrp1JWXxn6//ttJEymVcgQUINTi5CNSnjajBGMtgDNd2dFj/sdbZ9d4JvTr3S7S25JyfLrh1a/7 KDTqqPwb5xaeL1ON7tS9i97PcvWp/V+tnODUdwofEexR5SST2bxDIqvjg9TWu23WllfeSVhzoMDg 135As/6tfQNK96yb2/qFnX1aRUXIjVVlk1Ju5L0a1bWDb8+Wvk1ik+qVfT3mf35oeoVbm4G9e3XU umbtf/Lrzz+ekkypgoD0AMXDfsWQAps4AvSGyA8GILVYbSNSLl+f5xfXKaJr65AHHu+wAIthGOYB EwCUfpWoPX7OMromfMzPzyz5bvbXwyVzA1BYXLNv/XCh03gFpdQGjojmmlIQjbepxLnTlvVff20Y pU9f7AOTx5l9+/wbr5MjhFJC7Xah9q3IhEKECIfSw4WmZpgjzMRDw3d5bc3ni4fPDPVXbvLSOzkB AOWIQAkcominnFtUQZau+0frt+2ePcgta6NQWhL30j5ot+zOH2jWd6lSPbR02htJ6je7+tl/Ucp4 K/KbbpdWJZyMcSmp2PPj+bizsi4uuXmWEN9uA/dffaud6mKKONLU/PHt27Z8N3v5cJPBy5prNid/ OoSExUhBqY2Ite3meIgAddgcEkoFK5X5ts7K8H9k2Xdr31wzLAiVAOA+dGn1vFf77HZTe9yMSJyw 44evZh28jChb+5HP/NYm2mXNzbQLR8rTz12wW4paLPoB+jDbxf3h7hb5hwvOhW5aWe0jlchcfFvE XTt+sGB4dcTjuxZ9v2H26mHiXB9HXpXp0NfDKKUcEQWBgrM37F9KBIBzAIBIiCAJ7HKhOGzM/E+X 9/pRMFfVEFD67KffXxrWMfxnjSY8Y/wbMzb3ufEKTU1zjKqOGrtt++avp48NLXqjubI8/PNFe1vd 9eRQqSDYKnhr4b5Ybz/3/r06xo1Zc0o2Vt6sxSFZ6155DjNk5Vaq1LmpqhsXMxw35xzZtugcDMRR /9k7m42tKm2e0faur7yzYevW2YPcMldoBJv+5ApjowCvBoIIkQB2bz9POmft1R5WabMgc7eZ87/f vuOVofr0PTVZOYMrRI2cc21elO3c9eMvNu+eM8g151uUlcTPKZ1YMmd0+HatS3h2q16JP+wy9L5+ p82idJf8x59LHq0JGHI1ZPjC2V/M9Z/b0qXyhPHgV6OO+o50lqj1JmPg4G1vzHp2wYKJAy41Lrvw 86tdTZLoIGP7F978dvPWeY+1tH0kXNzfa9M35yJBqQDA0agmgdT9LpE52YXg/sl+D082fGR46ggh 5IHeBmcBFsMwzANGKKWFdhfP9EqNvk23ticGhBMreXpPmVNN7mlveXnAcVusuvZVfIBVoESjVla7 xXRMJ4SIHpLqCoVcapE7rNI/qAYAYC4qJ/HRylOe8tLrpt3TX/EeuWlKjrZN6tSXhh1pklEAXN3d C6zNh+QTQkQvHSnnOCJ2Vx3Q5FJ9gKur7vLMZ0LLfAavrvF2U5ZyHP+7i9VDbx8pc9MrTgundrbN 18XEX7CGij27RZzO5IL9MqtVuo79u50khNg9JxwvVNdknfeSVQXnS8Odbl9PPREgLi7OZZLwrsWE ENrk/XBGG4Uowmar7bCJOrSEXt77XXD2jfxxao3riFIHjS8zC2pTVqF0wtKyDMFmK3C7uiUhza9/ 6+tFkupJ7SuqblZo3Dr07nAymhCbdtK+EpU556y3tDJwCqC+507lOLh7eRfkB3apBHYIwK2pfDah 9qV2NSU14FWuPlfyCwNK9r2TIJFIZs788cboi1mFAfb08553W7VKrqGisVgqMd7oqFNpHr+WVjDj mqIl3/+laZ983oNYbEqIMkJF0Q7+Xk2klJJKTWBIuVVRMWpem5uEENr9h9x9ny6ZteDMC+oSkf5+ 9mGcukKWQ1RhOTdPeFxcOvBxqVw+c9u1ooTMa2khRKpycnXXF3CRA/IIIaK3TijneSJ6uxVITGaR UAEQjOLd3993MtklzegSGBIWdHLFmPAq0mZ1jdphPh5I8vX7s1zcFbzE4h4SnRcdHW1rfJwppXw+ 8WnmoPLsKfO6pxNCxLYP9T/vY71mLCyzhtL6P5Q74DlO0PuH5X48Itr4oIMrgAVYDMMw/zGVP011 nf/+570Mnx1xBQC7RUZFKhJwHKREEDlQ2ETaMNmISCQSUaCiRHKPC9W9EAConUgmCjbKAdBZq7mc TsPTRw+Nesuee+qrWG8iVp5Lnvny1DV97meVNodOtEmojcq4hgvU3a7shMChrSk5HKXN9d/za8YI bbue59KNvvkCJCIBYLXwEqD24k95XiJQKso5sS5wqo0XRauj6eCyu10/OUeTbF9f0nheSCl9ND84 6df9h46++liQ64cRGnmFVbAT0gomn6oL5/0VRXGlFtKtIGTw+TDz2RKOgLM7OP5WmyQSEaKorK+0 0RWSircdE/Hu12sRoDKlkpqhFEH0NCQg2N6uXTv4RyZUegUHr+8T63P2bmVN1gLC60KsHrETv7hy NW3iY7Hui/0VwG+7j6kAAMWwebrLSgrSM3wajymaMqhlr14Tl08MWkcVtceCUCI4BMIRzmis3ZL4 +UR4YtYb9ru9yNguUGp16KhC5eFo3bKF0C4hAYrAuAutYwI+UzrKTcC9YpQ/CCfkKpGIlAoCuTW5 TkYkAgUkMl4kHL3r4yZEQRAIOD6/rhIJdfAiJRxHiMgBEBvqThJ/f1z+vrkbLMBiGIb5D7HmnHX9 7dN1L/28d+9QSqn6SlF+i+tVCi8fH9c8DVdeEKYtLzixY2evjafKdGff6h5UKvftmEcDrrXFvipK yJ96vpGnN28SYOdlWccCaOku7b5MaWRxlUXdLMyVpO88NOKznysnxnxy8/ymlWM+8yhNNZkrTa1v Hyh/OwJCkoVWNdGysrTSzKyED9/eG3zsm1me57OMQQ6HwOMOk/rnDVNckdJc449HSno2C9Ae2jSC CNqKipwgbUXZ0W3f9TxUTDUH3mgfVqYMTMgTfC4naLJKOJlAbeknAim9qvktRx5ZWG5xliulfyrI dICTW62ik0TnYqw6Ol91pbw0/malxUUCOwcAj/dXnyy4fjBs57Gsth2H9jwiu3EuJ1RXUXx8+5Ze u1JLtacWdwkuV/i3y6d+V5YSUu3tI6u2WU1Kt/wTfik/vet6KFOMrDbZlB7qu/eYAIAAKhJildsL c3QaW3V+jJcsjYT0Tv1qx6GVb8x6em3b2JDDzh0HFN91BSaA43haXiOaCCGmxZNdfvKpvFzB3Tzx sIFSSfQIg61FC/1vTjd2J/SdtaVDMaWa5LeSwlJu2sdZqiu9+o6DUL8qD1vmNRdJlW7rzM2xlGYr l56OGCKT6N6I+Ibqa8dgNXWq2sUWRoou+3r7lrj1m7bn0KFDH4zs2nxri759LwiWKhvuck5SGS+K tIbniUNHaYpspL9H6EOGLR5NMrUcVN5cW5R64+LJ7rO+ueiZuvZJ92KbU88saXhmL+9rhZRyd1w3 IUQIRW4KcRSHfP/i9zGUZiu3frWza642Tq7R6S57esgqq8sL9T0qr3l9MWOw/+lsR7jNbr9n796D wh7TwDAM8x/iPv65rGYrZ+9Nydj3aPd2OztSnvc1+nU+OaxHxCGv3j+bPpyUsC47Zc9zH7+87x0n mURW6Rxm8ug6fjOONrcDPTnQ2gsaATgq1qY5EQTk97Ohxgz1Tj+2ofii/MT7Uwc9oR3GyXxCqq12 2Y1yteMRqenyhby8IZcNI5cPEI1mo3dL4unu9ishhL7dy52AUkIBQkAa1kspJYSAu/JrBn1nWNCO lD1n4rK3ZL77lrdrTnm1JsYmCFl33OgXzpRoPnG/pAoa7JMuj70KAJ3f2llxtKDNuoIbu5+eM3zv uyqZWlmtDyx06fr09gGh6wt/vOR1XHtu9YT+iZqeSnmQb6XJoZAB4CgIoffoCCDguLqB7y3cVPkn vLlDeXuWPvfQUc0jUmWIi12utkkr82UAkPDmjFTPTdPSsp0fdm0d5ZIa/sTxqvcmtF2Xc2X3xKVP //qOk0SuqND7l3t1Gbft6m9vY3CfoMtHdmZml+97Y+7M66psG3FrbrLaq+ACEIBQwjXaVyBA7fFR aZ0yQhXn+G+Xr5ja8aHFS1u1nLQ+5+qGpx8fsClGpeQp79uqzOJT/jGAiqbbQjhad7wpAVffLUMG 7ytZMSxi65rrZyaff/fETgDnI73Fnzq65jW/fvTL14Z3+aBExzm0Rvc2pWbn2A2rCWkYNzZzcvjF 9E+K9pkvrnmmW/eVwxVCiLfcxWnbtdEo/WQNCCW1dXAUhAJcWXYBWfha6IFHPrnRpmD32zO6bDHk OLu5am2O9D3xRGYm9FaARSkICCEqq5HI/JsXhWk2FF5L3vTCRBcXUUrFMTVWcgzAmlub18b+42ud v0o9dGT6kdWXl5zlrUINFyDz6vfECtef55rAER5UvGOQNX9azOFrKzPb5KesfblP1w+KOZm/u7Z9 z++qxzS70eVSgCJ576nEq2teWFbjpaootsuirQ56qG6XctwdboU+KCzAYhiG+Q8hZIStoOCLNc8N m3/611PZPqrmnSufXzDs9KzefqUAMPmTafvKJ3yYt2rDkUjBJ96c+PwzF9a+0DzPPA4KnnBvCxIu x2hyKqUQFxHYbwAAJyKLcHgLkDYZTOz83MXyVbOGL7u09pfYI2XNMa5r86LKQpXsRsXVsqc3Z+Ys Hes7a/3OI9GpFndp+yeevrxryWPXyNIxcAjYRUXuMEf4IohiOpEqSwGAUrJfFElqEWpqFFFDsgbY speuXPdjRI2YYO0XqLCmG/14ZZPBxfWOKoq1QWqPANcDz8xqXnpwNkAIKKVv/1zxxOysdVtPRpCg zsYBL049/9mE4EIC4BtDlw/Pr9lz9EiBt+zRvnH54QWc/LRgz7VzpFygYpnVaP5dj4+T3amMUvKm nTjSAaCN4cear996dvm51RsO7c8KUT46aUJaYOVN2UVNdUbtsXjCtKi7z9t5YbEyyw6XagB4cfWr v5SOez/nsy1HI+Dbvmbw1OcvrJ4UnQ8AEbPP5fXM77Xwva+PtzpmTLA8FR9anlcs4wDUgOe2gwrq PBdYgXmUcF9+XRcA06HdKq8f+jFzxtrrV13yr8vLM794Z3fJozMyv9h2IVz0iLEM6Nnj3BfPh+Q2 3haNa3U1B/IOL9Jild2pEpS+xXNcXv3ykS/2/uWbJ0+W24lQAgB9lpyuTP4oadnHX5xu/evZHG9J SKeq4ePHnP1kWr+iJuffiH1G+sOQj0csOnd491W7Z0inwTnjnpl2gRBCV/VzOk0IV1pTaSmnkJwl 4JbolHwJGXHUlLljxjuPv/Zl7JlUo1tQ9xG5cyePPHtu71POIkW+xWIpAQCekxwiNjHdKFdXe/Z9 2z5w6QcLFly6FNLLnGW+7Bqk8VY48nCbQYsPXih/fcScBZ/8FFMqC6A9Jr6SssXQ9aYwMV7KgS4D 4fJvL1O7HXvK0rcalj8959PYk5lm14iBk7Mef+TFC1MIETZSemnvzbgZa3ZciiyX9C8b3dxr9U2T xAzctIqcsAqUM99pnQ8Ce8Q+wzAMc08/T23R5t3UluOU7r5prubr/IXUgt6K3rNXHlwy5IfG+c79 ONv37U9PTk6tcmlR1nzEohsrHz72d7WZ+XsceT0+ZnbOI4MU4Z0+2z2r691vhTIMwzDMP11q6i75 wqf69G3m7blQ591i0aBJiwbsSqXy2/P9OKdruE9Qy3lxY5b2v/0hpMw/AwWIITlZ8kfj+xiGYRiG YRiGYRiGYRiGYRiGYRiGYRiGYRjm72IAuKSkJBn+YIwLNYCLikqSwWDgAGBjEvggQAHACYATwhLl httefkspJYlhkANQRiUZZH92HI2hOyTduxsk9en4iavYOCwG/9TxWOxBowzDMP9DuHhtglDBvxO0 uCDwXvmOVPi2VCrEVZ1yg5oDQH6VamSNs/Ovaq32B2dn722ROutXhycsHmlIr33y9/lXW6rmjOk3 wuzS+jN/b//N8sJzKwc+v6rL7UHY3VBKCc8HTsrx0L+STKlE79NiNCfQF1ed+tcGuy+e2FvnGzbc byOlf+qhkfSDRHlUSO+AwRNX3fUVPPcsbzBwGz9a2nryd+ci/pXyzC1j+nXxnjZjTt833npr6ITJ r0XHr/pnTXxgARbDMMz/EMoRNUADCSf53Sy+xhyixImABoPjlAAAzslNGzjY9urrS95cNu/Z+b09 io6XnNgx+buF33cFgA2XHEm7Tpsm8s0fPjT7tUmLo7j0vKv7fpx77aOTze+zaYSCehBCva+fBnGJ 6XK5fbTbcZeb/9q7StRUkkjBLwn5o/cC3s6HDwAv+5Bzk8b8K/XecD0uPb/jy7G//pra718pv35y 24jIsZ/G329g+v/Vj1M7+IrgX0s+ld77zIHfwosqKodFh8Hjj0v+//GPPgEYhmEeJErBLXy0xwDP uJdHUkq5HQPhMrpbzxd0wz6PB4BZrZ1bDxrw1DMBb1GXUxsX6yYNaTfG28v3nfCOI6ZM3HzZGwA4 IqGwVEjbXHxtiJ+X5+KAdqNnDFv6a+idayQi4WrfoUcBKipcy+Dd+8zTU+ceXjE4e00zNckyXzrS qvjLMd6p1W6DioMHb/tl/ZxPn3lpzoElczq/F4dLRdeuZHdqug2U+2T2qDZxYX4GL6/QtxPHLxy2 rrYXjFICSihExAMZe7d67D6c572prsyyV5I6twr1X+AZEr9o6OvftqOUclOi3IYOGvXqhCd6tZnk 7eq+PHLI7LHJlKpfidImfrrj6JOleYc79G0/5tXgFy96Nm2DgfvwpUFx3ZsHznHXui/vMHjS+A9/ yXFb3j0oaMCrv03Nzjsdl/ztxy96jN3cpO13YugOSVRUlAx1tzbrtpEXRMpRgERFJckMhqbBkqF7 d0lYWJg8fuJEaf2tWgqQjYYkWWVJ9VDeIY7YM+JleVLSxvvqfZsYD2lYWJg8KSmpIb/BQDlD9+6S +Ph4qYEauPj4eCkarW9jUhIfFQVZVFSS7He3egEyMR5SNLpFXK97d9S2Pf5W22vrA5cUFSW7U5n6 fdS0fQbOQClnMICrXdZ0W/edyY0SqJM6eNFX727Z/cuyVz+a+XGbAJT80b5ISgIfFRUl697oeNTX RynIxvrlBkPdey1BoqIgQ1iYPGnjRj4+Pl6atPH+9vt/GguwGIZhHhBCINodEl2g/cYj6wC3PKeo wLQrOa/oii73ppTyuWrvTuVWS/ybfUoUK1d989yxcq+H+wwYlBtC8zod/WjFi19QqpLzRMhNvxKc WuRonTg4MT/GfqFD2i+7pg/8usLlj1vAUVTaRAC4UB2osgi8EgpNzebtZ11qjNRV0brvBUKICAC+ vT8q89fKp5WXWZs8TPTHCeFt1+4sMHjED5MP6dWytOzs9smffLBhGBo9uDoegAiuLS9Bd5cQcF9N iO36+W/5c4I6DqG9W+j56z98MWfitoyWgt3S4frZQ69WB/TwGdw9ptLpxq5Jr0zbM6BD4sD0tpHe KWqXwKJO3bqeTozgTI3bsG/yppDfzpY/i+aD5KNGJl70LLg0YM/azx7zfW6pqWfHqNOuOn1JaGzX 8wNa+zR5YnpjFCDLnu0RX+bRc45Go/+gu6/NMGT2920kmnaECnaqJwW+CyYOmKh1M354ImPmxCWH qAYAdq+bEWQJUUz1UfHv6YodC8bN/qx3EqV8+nu9PDIysydvOVcx1Hjp+85iVd4iZUtjD3qPnixK DdwbUx9uI3q3n+Ukka4oF11mTP802Y+mLdZdvPnSc3kBXjM9teolhS/ang12lhs6OU5O+ziTulz9 YYkmw5c+6a+KfNfFy7H42ivvPmpILlIDwKqJPk5vPjNoWI2+7eJYveODxHz15FFLfvYBgE/mPBwe 4tL1VTcFeV8faH3jqUUbuydRyn/8aIwLlz9ojOiuejvOR7Z8UInb2HHrzjoDwJtTHmqR59x5trfe eXm1KuTFcSuTgwDAvehgt/xX572gMI8fEejltaxUODDnha+O+VFKueStq1ublP490wtF38hT3/Vc v2lHXGddQNWUcGK919n5zuxR/j58jyn+rqr3pJ6Fsx59c2NrUEoo3ajMu3bpqVefG//EWe3gqS5a 3ftOWeLUPecPeyybNqGXq7T5uxG84iP17kMzfJzVBuMNfed71fOgsACLYRjmAdKXXjwf4W7Gp8uv B9td9S3NnvrSSH9LwIebfg6ALjI03Rxx0e3b4S75pcqe9rZTVn+xdtW7jwfkLA9S1DSbO/VkOGCB OjAutyDsifc+/fTz96d25RbLsy5HSM/vDL9nxaID1tLT/j5o18YAACAASURBVCveTHzKy8vj2Rc3 0DkZnLsj8KGnfisqN8rNgsjpPd0t9dkJQJcfvZ6b/u2jhfWfUUq5jfts/eRBHbPcxq54a9XTrZYN CbKvsxeWaHHbq9cIRwQI1D4t+Ljy14N5SXzEsPOxMz58c1a/0IX9vctz9m8+0FMiU9glgT1PWGIf fmfmYHFxdy/LuYJrN6IfXvbNtZah/mdkcr/s6Usm7v94crSx8bo1T71XPPqZsev8rGeP/fjTHlNB 1oWaEou95Qi/JOMLifpDTir/Qv+wloc+n9oh4267Y+vLnVvuuSh5tdi7742pz49d2UpekJ5x8mxb 9aDeUrupWlqccqJFhW+PgjHtXbcrss/0/Xzr/vYAcCa1RGvXRqa+tmjR4od1F4+UXj72xPFXjzcL fnFOaauHX9oboHHKatZuUPIzT4xaP6xnswvA3V8Ove/FDVGHL9snFraYcPT9Bc/PbVl9BMm/nZxg KXA4p1242OW6slNxgFhQcPhE6gCfln0PxjpORW7eUxCWmZeuzDI7V4+ZMm3F1O7cl5KrP/f5duOJ ngCQVhyQtPeGanBQ7wk/vjIq/nM+N1WXdu5qOKUblZv2lU+6yHd2Wvj9hgX9vHKSi/NzQ7pv2uV+ tsRpfHKWR5v2j77wzfN9AzaaUq8EZ19K9dn9bMtmyRetL2d4Ds+Z8fzYT3zzdrue+nHvjKcOUY3t +tng04fOjDxS4e/8WFL/DSFlB/0P7Ls+EgC5fvQnl5yyQg+jvVh16eRRn32Xclz3/cGbY069Eq8/ frxw6hGxo2ry9Nc/auU4WXb9t59nxM08GgpYuLQTl7r8dCRz8jVV58JXJiR+4svn3yxZvyD6dAZG 2Hq+teHd0fr38jIyokt9Blz9YGaP/4o3CLB3ETIMwzxA4xK5opMHXcrL9v7QokAoad5n5KRvz524 GXFo486Wes7k6tG13/YS4y6va9k3/Yu/GT9GKpUmTv85z5XT5wYpVFd1hJcQrZOi2smvVSUA9Boz OEOxda+RyGR+AE7cvWYBvKVS5+2uj1IK1bqLeXxCwjMTX/5patCVzu38WsoIoUVGa5NbKwaDgTPU JurGUX3sVCpx95VLJalfJcJEiEGglG6cBfAAhNtrFCmhrjkntNdNQkDuoVXqt9q8/u4yKvI+nj6x VRVp1Qqlk93dxyt/d0y7mqCP91G1qkUNqb1tRRwOEADEdKcL81dTnLaleAytVAbog4NohiUtRWe2 2ipRCmKzAaCE2O2/K9WAUkpmd/AZZImcfdPRafLGUSOIjVJ6CYDs8vwRAqfUUJtT+2PL5z3/A10C zTWfx3odvJbqBwDhrStTXO2hxtOXroZVyXy9i6pEN+HqaU9CJl+m9NS1ba9Wl7n4BV5/8rFh5+7e glrbDpa0gy7Um885GboqrdTHzVmvyL14I/ZCYcgWuUfrymqb/qzDXB0S6Wm5mOBvuXEhm7NXV1Qp +k3/pCh549L9V3JKw1MqXHwqRUFRcvlKUN6yeL1hO/qWt3luwxvTuu2r29azAERgNWKcKjP3Xdnb e+YrBQ/3Hj7twLtP9Uv+dYBbqJV2SCiIe3H5tEmtjteVOQHANj7OMIHovaxBb039vo8rqUz5bIx5 7EdHl0hvnmhGRZFyHjEZWd5jvxvzbHDFmkldYn7KKojcB5BJS7ckjxscrzNp9L1Hr33/0xGEVH6+ 4Jl77ovt17hW5RXywMhpb6wY0o+k05Sp+T3GnmytrDoaDwzcJYoihX/Hn8ren/7tcEIcAM5Hd1V3 Vfv5UFtAu+yBntXG5SeCymostCyc3Lun7EFhPVgMwzAPkOaV3HJzfkFacGlyzz01Yb5tenba4ZK5 p1RSfbn/1RILmfBy+6slRqVdrQo0JXRJvJSY2Pd0fLcBv3Tu0nrBS6MTLtnsICIlhAo2AgCW4jw5 5XgJJ9gs96yYk0Pm0/Xq3BU7X/987mNT+wVyR9LOnIuklHLRbsZKhVpqLTm1368+e3pysuLmsb2v tK9pN+zWSmIF3uGwCbxcMb8u8Nk3P1rhP2KNCnfqqeFEyCUaB0fc7cHNO6b379//dPd+/U9Et++6 YuxDUV+bLRb6B0PgqeoO6/3mUGVCickp0tjrjeXJB48ubKeV7tUrZXbcer0w5erGnt0FKS+1OGuc pNWbkmpfWE0IEQghZpmrkUikUkHp5VEJAAh2pwKRODjRzlNqUJxac/7ZBeuOTTNRXYSru7uWEyjP O4S6wPQmMdWIcg70vgb253MqlUOuMreObW1q3batzTu6x9XELiErW3mWGsFJKOVlhIIjEARRDgAi IJdw3KcjQgbMe2fbmymlfIKnh7srz0skVHTwN4sUMqvR7OTqH1DVsKGEWAkhdkIm2SfoTq/rHCG8 n6DO89nz7usLhg2e+2KuLNZNqDFLXMMjqxuVMQNAmdbFpUK0Va5ygQUAhGYdS11sOTa7ndfwAPSe +uJzCLIBAKdUWESHQDR15wVHKQHonQPkOzA6uzvnCdSS2Be17Yh6t1phza5ykopaoIKU6UKtHh7K 8/tqgysAwJPPJ16yFlypVm151NDnE+X8ItGtukXvIWfup74HgQVYDMMwDxAhROisTT1nKzkZm+0U V3PUPT59aGT5+as30nqeI53Ln3NHiUdVbnozLy6zWBJkevurb3c+1sX9iKiQVVxuFmnlCGhpfrov PbO+/YkTyV5L39/br8o5RFbFa1P/qG6RcMLlLKM1eoShoEMA/d4ze3/PdgtTYh7dGZqnl1cdc87c MWzUO/tj01OSvb5d+Vr/C+nCQA83Zfmttnc0t3YpOF+dfz0uZdHeFvvXzvb/fr9ylquz8inU9mI1 wVFCTkaNq0jwMJ1xSJy4ZoNeOPLtO8/t9Jab8wr9W9YQKtK7XYUEieAgXI36xtHrnpQ2HXQtkYKz W61KpSlP9/2sIS0vVVk651aY1VCCyDQyQSBGXgqrN6XZyrscAzGsmevFrEtH2naf9XMEACQnL9NP nLc+AAirrV8QawOD+tcVE45uf25vYHauqq/rqOXrFsx4fmVo8eGDxGyikNTfDAqhREqQnlnpc4pS qWHjCa+NG1NkAJC2d7Fu0tKvwxu/wzFaVp0thcRxQtP+2Ixp076Z/Zxie6eXJ5+QC/k1t7e5vkvG S1KpPnjcOErfd/qvH73x8vJE1akfJBWlFg5Ap8dCKhUustyMXSv7vvBVqZZSA7fssw8Dxy3f6nxo ejPNz0FPRpT3+PjUJxt+mvlabN5qjbGge65bvESQCzX5m5b0MaRQGaUTpTOWfxyyIx/y5mJ2qsZh Cu323rEQADj76ZrWubr2Uk6jzwAAnocIbW0AzBFyr4C2CZpsUEx7/5Nww65j2vrP/MxZmYFSs2b5 tC2tAeCXqfFhFc5tfHIF51QgS7RKFNSOpuG41lQsM+lbyCLb9b827oUXd0ydOuTjLyc2L7y9vr8L C7AYhmEesHFJwTfKOd9cb2/9iRXhxBrZru1FwWovCejQ/jQhxPHY5tj8yEhuvWvOzu6jO3X9aOX2 jPlmQd42zwYJJaAK0WQPEy4PfHnKax/8UBQxWh4Zu7HT6EGZjeuQCA4KQCRCbU8OIbUTCeuX94y2 HfKVV+SYD28Yehqn0MM1f11LbUFBztYF8x8ZNfXjfQXacaRZ4obQ4NAm41keHx2yKxxXUvN3L547 fdX+d6+hmV9Mc789AByEQhRRO0geFCJ4Sr89DeGRkeHfelvOmg+umr2kZ9K85ZkW1UhTjUMLSkSR 0lsXZgqRcBABUBctvdxMel7xwZsfvzT6w1FejdvQLlp/yl1ZfiP3u+kL3zsAA/GLUEs1yprWpRlS eWxcUStt2vX0g1sm9Z13pePdjkH/J4bsaMldPG/aOecNN7Xre9NfP7KA16jiwmKqCSgVCa3bDg1H QSBCpLRHe48SrbP95tWVz4yJadb8tY1Zno+aLDYd4eryIl6IiPI6XHzok8T+Xs1XnNjz29NmV04D ACc2b+x58sfNC3ddzQ+ub8Ojo6MOuUrLrxWtfn66j0fAvM7Dfp11+lBKazg5gRCIhKOUgFBKqSiV SCgIEaup0hIQ6HQ68+eVfcLCo1+buQuTS0xiAERKSasvTaEhqs9a1Rzw3j2n0wpf/erle3/NfMHb 2dOrZYBOZq4qGXT+sxfe8tdp33j7vNcjcj+/o7r+L5wP0VvWRlb81P6z3kEfBfkmv3MlpfSpK2cv a18brfs1wNly1rLmhZk+Hh5L1153fsqzddftfkmBmSIPSiE2nE8cIbRhnwEgAqGUkDv25J3cvzPy 9Obv3zx+Mr9hlufU8ZaLkSGqbfLk5U/6eXgsnbNPOl0XFH+mPPbp00AxCKEiEbkmQVxZtVnCWQsU 5TnXQk8f+KX9nmUzX2o2aM4zj31Vqv19rQ8eG4PFMAzzgOniW2RRaelkD4mtFAC4rt7XPT44PV4X 4ZN/FgAhmwRKk3eOHzTl4raTV7x4347mvg/3S/s6llS1j3c55xIQOc7Fxe7YvO+qXtIiyRSSMCrN EE1sjeugKuslnnJTlGZJJgBIgM2gwt4UWZgJAKLmXSqX7+k4T20tVe4AqGFLfuZWQ7MFS9edDr6c KygDenco7TZ37s3lbUiT0UzNXj6ae3Zd90XjDGeCrxvdZX3GP5n91dSu+YQQaujuu1ZwgI8HHD9R sp4QSFfHw7G6zW9p3ywb/fqct34Izre78B3ajc3e8XRM3ivvi0WiSAm6Q0APQBggfCTynEgIodTQ PeW4JOfZjRlZcoVdVd64DQ9/diFn2ej4uSd2Xg5J8wq0zh0/qvR4Fs+XVWYYSbjB8WU/LJx1XuGX n2fOutsxiB6xvGzN9CHvFmw+FRPRrJlHdpklX9DormJ/kE0kx96TSCW1nUaKQguxSz6GALN27NbS l8Y0XxJRpGgB30jkU26Hk5fbymozlw/U9oz9+OPEjZ7Ttl0TlH7anNz8jAC+oBIAjNWOkyo4imqK pA0zG8OnHCw+tSrpvdc+uRnl0qqlS04VKUvJzL+KGJgEjnvbLBGLOEFIA88fNmskRTylS6otfHHC WN8TZ9ZXxwbHx6qKSqsL3IK916OEVgPAtNXJ5/M7+s8pUqlbWF1DpFfTTWkDPd3TNYnHbbYne6yW OUzhrePiXc+XqX4SJQGXlo/wr6CU7h/f0iuzxM27uYVTC2m5VakvDYgqcSYXHcc+aPnhwrTrLbTR 0e4ZiqgsmcfTKQZCxA8S1TtFCUlGVW3nmt3O7RYk9EA8am+5QpQdEDl6PhMw4jZFhZZMJ071gd0q ptV/RgbcsNLkMd888tK6s6roZgGZgm9xhffwi9fGk2o8tZEXifC2g5dWNpzflJLnn0qKr+SUOWF+ AduqMs/U6BSmEKf8Y88qyo6cwj3HIz4Y/8jH1zMMwzAM879tcv9uD+UK7kPdfNUHTlzJKe3XPsI/ +YY2KCShy7JNhoEFf3f7/isexsUwDMMwDPNnnNj7ZEZByrncg8cvuOdUUlezOiBn8FMjN654pud/ zTgshmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEY hmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEY hmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEY hmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmH+DPJ3N4BhGOYBIwaDgX33 Mcw/hMFgoADog66XfckwDPOP8eWXa5o5OTm/plGrm3E8LxACcFzt16AICir8zQ1kmP9hdrsd1dXV f3czmrDZbLzJZDzL8463n376+cwHWTcLsBiG+UdYtGiRe9u2bda0iG4xSKlUEgCwWgVUlVvhcAhQ OkmhdZaB4zjQB/6/LsP8byMEMBpNyMvP+7ub8jsWi0XIzs7+Ljs759nXXnvtgUWAkgdVEcMwzN9J r9d7KJVOfXU6HaFURGFBNc6dLEJRngl2hwitTgHfQBViYvVQqZR/d3MZ5n8KIQSkrjdYIvnvCi3U ajUvlckHKpVKHQAWYDEMw/yV1GoZpFIpBFFASbERB37JRHGRBTKZBP5+Orh5OOHUiWyUlVSjW99g KBVyEEIgiiI4joNIKQghAKWgqL2gUErB3W+eRj8Jqb0Q3W0ZpbT29sI96rifPE3aUb9MFEE47lZ5 4J558Fdsa12e25fdjlIKjuNAAAii2LCfbssEjuOAurY01MtxoKIIkVKIogie5+9aDxq15X72wZ/a z/+Ac+JOdfA8D1EUIQgCJBIJKKUNx0UQBFBKwfN8k+MsNlp3Qx2N90PdZ/W/NyAAAWlSxu5wgIoi pFIp7HY7OI6DVCptKMLz3B3Pg/8kFmAxDPOPQakIh0PEpdOlyMkyokVLLwRFeKAgpwzlBTWwlTpw LbOMBgS6kKhYTwhC7Ze7cIcv+fq0UP/zfvLU/Wyc527LaO0v96zjfvI0aUf9svqfTfbNnfP8ldsq AhAEAQLQcHFsCI7qftrtdoh1F0qgdlwPIbUXU4fDAYlEghqTCXn5+bDbbHB1dYXeXQ+HwwFCCPLy 8pCZmYmEhATwPA+e50Ephd3ugETCN9Rb34b72Qd/ej//Pz8n7laHIAgQhNqf9YGSyWQCAIiiCJlM BolEAkJIQx5BEBqW07ogsD5oqs9jMpkgiCKUCiUcDjusNhvUKlVtEF13PM01ZkilUlitxrqgToST ExqO/99x258FWAzD/INwsFqtyMwsAwCUFJvg5WOGQwCupxTBkmejdsGB4rxK0FbuYMNU/zqEEOTk 5uLUyVMAKMLCwnD16jVUVVVBqVSAUqBLl84oKCjA9evXERoaCo1GgwsXLsDPzx9WqxXFxcWIj49D fkEB0tMzYLPZoNGoERUVhYz0DFRUVEAilSInOxsymRw3b96Eu7s7QkNDcObMGVAKxMa2xqlTp2Gz WREWFo62bRPu3FPG/GmiKMJmszb0FlksFshkcoSHh8FoNCI9PQNyuayhJ6uxxr2lt39OCAeOA0Qq QCqVwuFwwGq1QiaTNeShlEKlcoKTkwpWqwXFxcVwOBwNPWAOh/0/uel3xAIshmH+QUQ4HA7YbA64 ujkhrp0frBYHKkprYDcKIAIgCoDNKkAQBRA8+NsK/19RChw9chQ7duyARqtBRkYmcvPyoNGoYKw2 geN5uLg4Iy8vH0eOHMGpU6fh7uEON1dXuLvrsX37j8jKyoJGq0FJcQmUSgVKS0shk0mRn5ePgoIC ZGdno3Vsa9gdAn744QdkZ2XB1c0NXbp0wcmTJ3H5SqrDZrPzBw8eINEtWmDz5i2Ij4sFx/NgMda/ i8DhcKDGbG74xFRjBm+xIicnB2azGZVVVVCrVU0CLIfdDqvVCkJqeyhlchmUCkVDT1rtLUmCsrIy CIIAhUIBmUwGjufgqOv9AgWsVitsNhs8PDxRY6651Y66A2uzsQDrvlCaIlu79pg+3yYhjq5PFBui ie3vbhPDMP8LKORyGVxcZTBXC1AqOZQWWWAutcJXq4VJtJLKShOcXZW1tx4ENp3wr0IIgZurC4KD gxEUHAyNRgOZTAZPTw9UVlZCFCkcDgGlpaUIDAwEz/Pw0LujqroaFZWViG7RAjVmM8rLykE4DiZT DYzV1dCo1dBo1EhLu4mIiHAoFUro9W7gOD2USgUCAoPqero0CAwOBiGAuaYGxmoj/P39QDgOwN9z C+n/G0EQYLVYGwa5SyQ8REFEdk4OCAjkMhlEQYRYd+udEAKLxQInJyd4e3ujvLwcZeXlsNsdtT1a pDbActgdUCgU4DgOPM/DZrOCE28FafW3F61WG06dOgWtTgue42CxWpuM+3rQ7hlg3XyznefgDy4O Tims8cCtW7MUt/rNidSvbbVr30U7C9f2vnmvdeWtGqzvMP/s0Mr4WTfKtz97YO3jIS3nHFK3149a u/fi4oR7lm3szPRmPsMS+o9Lq1H14H1jy12MCQsAXLrf8gzD/LNJJDzi2rjg1w1p2PH5FYSEqhHs rqISLzkyUsuIygMIjHADFWndl3KTYb//Q+n6r+y/Iv3XtKt9h/bw8fWF3eGAu7523JRUKoUgOEAp 4OSkRFRUc9SYa+Csc4ZGo0FWVhbUajXc3Fzh7e2FwIAA5OfnIzX1Btzd3REWFgZvby9otBoQwsFZ p0NcXCzkcjmys7OhUCjg6uaKgoIWkEokErvdjtTUVHTp2hnNIyPBcaTuNtKD3x//n84JQmrHO9WP s6on8iJEKwXPcbW39G7rKVQ6OcFiseLGjTQAgEKhqB0k33g0WF0PlSAIsNvtkEgkkNdNQqlfbrPZ UFlZAblcDmO1EYSQhjwE5G+5DXzPAEsRFKpomaBsoSm1hBJCBKG60OtiWmFLvV/EDX93xU1RFDip Z1SZOkh6aPcfVOTgRS8KvEyJuBPAARChLYDplCM5AO4rwKI0RfZ018Qxx7MUk3kf3/VCcdlhrsxS eH+b+vfYs2pm5MFsPspj+NiDU+LCi//u9jAMA/gFeqLzQDuO/ZKLlFPVUFM5pQ5CfEJ5tB4SBFd3 RV2PRu2Xcu3kq/tP//tIk3Td5K8/mf7X2v5XpW/fDkopZDI5IiLCG2a83YlOp2tYTilFTEyLhsHP 9evR6bTw8HCH1WqFh4cHpFIpYlq0aFhev24Xl5iGz/RubgAAs9mMJ58cB09PT/A81yi4+v1+//+X /s+tm1IKtVoNvV4Pq9VSOxuUEAAESoWiITelDXftGtIKubzRjMC6mYqN8shlcqhUTvfOI5eD0vpl jfPUzaT8bwuwvB+NyE4U+s+u4Cp4vtJLdEt9u+/UUvouafPiZx+Mtn52pNIq4WVeYpS7aPmjAIuK HAWFAFr7rGQRpHY2Laj4B0VvOTRdVW6siROCe18MeG7NOyfGktKCc3vuu/jf4fKmVR23pYdM7hY7 bAIAFmAxzH8BwnMIbekH7xAPlBRVwmqxclqtFi6uTpA7yeqm7zeecYU/lW706b+R/nN1/rel74xC FP/crZr6WWa3c3PT1wV0tGEg8/2Ulcvl8PH1qX2kg0jrLvLs/uC/i1JArpDDz88XRUXFdYPK7zeo adzDdrcy/14ead2A+AfpngEWIQYRgKn+95+mxdXwHBHtUo2lzeBxNY3zZh/ZqFy3ckXb73afjsw0 qxR+CYm5D4+fcXjR41H599MQSg2yx2M+7razyD+0x9ylu7c83yuz8fJDS/r4RCX99pjVQWJqFKfF cy+GT3YNfvpo6c1PfyOECDR9neKteZ/GfvtTSky64CqN7DQwe/i4xw/PGt6uFACWJwW1XnjMNXbE yCHppzd8FJQmRJs/OZe8s/SVgKB5+/WxLy9649yllc8H7z2VFwz/GGOfCS8e+vJx5+xZryxK2LTz THSR1Iu0fejplKQFc05M8iE1tW1Olqye/k7LtRsPtb5SIGo1kR1Kh06ccfSj57qnffNYS+fVP10d tvZc1eBca5b/Ny898aRPu5H+nZZ/9/OmjsT8pWFM2KpvkjteSC9xU4e0ruz13Osnvpgy8DIhRKSU kvmPxMR8nRHawnnwot9OGqIL7vN4MgxzTwQcx9f9h8tDp5NCq1M1Wlp7oeCARj1C9c8YunMaFKC4 1cNyR43z3C0NNJlJdT9137Ud/0J999VuSmsfJnm3NAAq3krfeZtqd/Kd8v/pdN2jHRraWrfe+oHR 9WN4bk9TAITjb12Kyb/ZDrFuH5Hb0n/Qjr8ifavH8n7T9cfi30nf/RzUaDRQqVS14U3dc7Rq98e/ lgYhf0F7KczmGlRWVNz5PP8P+UsGuadtnKib+eTkmed5r55e0R2z3UWrpLzwhP+ajxaldHzjzJwj c+Iy/2gd8wd9OfxkvtrgEhqTrPcO/eH25S7BLZwioquDzp9PUUEUSOvYmAiNf1QmAJStStKNe2zu CwczNQ/rAuMqWkut9tIre73fn33j3NhVpwzrJ7VJk8pIJ0dFxhu7v9+d6+bZsjTO2++ERIFfpLy0 ra0qe9GaZYuv+OibVUW2clFk5+U12/vZ6vQB20zni6ySln4tEyzq4jzvC7u/dyqpIosopV8Bm/gp cSPHHzTqxmoD40sSAgVLZVm2/9bVSx7de7nGsKF9m5uxNW6BRy5c8xAKLXJ/P5/giPjm3kkdwLdP DGu/ev3e+eXaYOeEBO/imtISz+Tlcye2umJ6m1K6FdhEasymfmWVpqck+Rk5AFiAxTB/EZ7nQXBr gGzj4KL+IYpN+pSa3NJoGpzcK6i6/TbY3co2DhIopXcdRdPYvdb1R+km66lv6x32w79aF3g0+fxO 29BkG7lG6/mT6Xvt43t9dif/Tjvumv43jtNfl250/uLO59bdRlrds8xd/i7+1m29S1tFSsHzHJQP +AUNf8kc5OLUK4H5Cr17ZdS4DxPHT3ti34EDox4LqlrglXOkvflGcq+7lSOEUlcnTjJ/QODD3xwW 51sCuu0d+ersuasfDvpdr1dU0rtp377QfHG0t+KSOqzT+QELt0xfsn7qNwDEVXvPDvr1pvppR0ji t5HDHh2V0K75qMdaWOe4VFxK2PXp+qnnKVWJDofokOio1bvDhtAe/UY+1L/t/Ic0KKcUVCAqqdEp 9rAursez7YePGDE6xDpPUXwu+nievpNzp1Hz3Dt1Gv1iH5fR4YqMm+lpaU90XWF0rfnuU30Brwqr CB6+zbPntCd+2Z/8+IQE5bPNKs97CZd/HO7+wlrj8q3Jbz4cZN/kpvUpbDthwdtbVsxbk5QzQrhW Uf7YZXkrb9p5xpTpDzUfOaaL+xP+jtL8qsO/DNhdBjUhIwSf8JgvEnt1GOWvkZz+K44RwzC/RymF 1WZrmOItCAIcgtAkwGp8bW58ESGEQKQibDYbbDZb86qIpgAAIABJREFUw5iQ+qdZ22y2JmVuL1uP 4zjYbLaGB2o2DgXq0w5BaHjY473Wda80BYXd4YDdfmu6OmlUR/0+qB9M/K/UVb/d9etqvA31KKUQ HI77bnP9BbR+bFXjPHa7vUmAdadA6n4HN/8r+/R/I41badw9Te6QvmeZu/xd/Oe24z7Sd2nrfdy7 /o/4S3qw2s06eHFZlOGVdV9vi3/vxXljDM8STYgr8a0wViqd7YKfgVIOnw5pUoYQUOqokWiPLB76 3eHqjpawpP0jFs1f+FY/rzuOUyKEULo21kJABRBeOGdHjYEQe96qiU5XLxQPtWs6XBv74bJvlrYi hQBAT63aVfzs7O7flZ3vvPQHU0hbh0idXN0LAh56dt+m6c0KNgGYPHkyVj8WQhQ6t2K/xGf2bX89 Km87gKovhxzbOONYliWw0/k5H0w92oMQx0ZKzZtb+18gVdUDafpxjWrK3pvZR96ds/7Lva2+XP3p MPXbVld3jVQjd5idHGKNz4flkC1xJeYl3dQ2QjjRAZmFEGKn9AVOIpVVyswlMiF9f+ylXs+XPz42 ODs48eALxXbiFOgKCwC89P72QmD7f/UAfob5X0YIQUFhIa5duw6dsw5qlQparRalpWUIDAyAQi6H SCkkd3goYr2MjExk5+RAq9UiNCQEGrUamVnZdbPjJFAqlQClcPfwuOMgW0opMjIzkZeXD57nEBIS Ar2bGwRBAC/hkZeXD4VCAbvdAYVcBmdnZ9gdDkjrXkVS/zoZnuNgs9vB101jv5Pqqmqcu3ABHMfB x9sbgYGBtW0iQFWVERcvXoRGo4HVakV4eBi0Gg0IIU1eV1L/2pm77ZOSkhKk3kiD0VgNX18/hIaG QKlQgJC6J3YTgpqaGmRlZaN5ZDMIogie427d5rvt+FRUVKKsrAy+Pj4oKCyEWqWGq5sLBIcIgOLi pUto3rw5ZFIpBFGE9L/sHXjMP9tfcjZe3jTeZcacVbPzFKEdg+O6pQg1ZXkqU56qqrJI4gCkBgBP 3laG42XUVp7temRf0UibyEt0noE/REd4Vt1XhRSwS2oD1JTycmlBkcxXULukL2mJ0qX1eeInOoLC l1wXT1j7p1/NcmlHRFob00rvvM5Ge0KmVjooOEGiVDZ+vhaV2QWHFISKEiWhdJd8RKvxE6/aPEe7 RXW96VZTlC61VSpKbl6XCSIvraqu7R2kDa92qv2vkZAV1rfGtf+sg7mMu5n5y7h3p+547B1K8rxa 9jzY5dHJm8YS9kwvhnkQCCEoLi5Gfn4+3D3cUVlZBUEQkJObA5XKCTk5ObA7BEQ2i4CXp2eTnpJ6 2dk5KK8oh16vR7XRiIsXL+HmzZvw9vaGUqmEyWRCWVkZ+vfvB2ed7nf1V1VV4fz5CwgLC4PdbsOR I0fh4ekBY7URLi7OyMzMglwuh7+/H3Q6Z6RnZqKkpARBgYGorq5GWXk5XF1cIZdLUVhUjMCAQISG BP9+WwEYjSZkZGRCr9fDaDTBZrfBQ++O8ooKZGVl4+LFi9BqtZDUBYbFJcVQq9Tw8HDH1WvXoVGr YLZY4FcXON0pmNFoNFAoFMjKyoJO54yDhw7B3d0dPt7euHzlCqRSKTw9PJGfnw+pVIrMrCyEhAQj JCjojr0gFRUVSEm5DFGkSE1Nha+vLzKyMlFRUYnAAH9kZeXA2dkZN26kgZfwiAgPh5+v7793YjDM X+QvCbD2f72j/w2jcqi269gF7bsGbF72RD/T2ZeCWk/eKm9bKlJiuGMpASK0RBHed9NQ9UHT3vNf Jb03T55CKf2WEHLnaSN3oCQa0UkhmCUys2IfIAdQ9/jW+cRYYnYFJQ4nrfYvDVpElauw+8kRsTfL hAnW2IGbI3sMfH/j1A6VpkUx+if/j73zjo+i2v/+58zM9t3sJrvZ9EJPoRN6C0U6gmhAEBERwd5R 7r16jfeqP7teuz5euyhdEUVAOoIgvZNQEtLbbraXKef5Y5MQICEJonBl3q+XJbszZ86c2ez55FsX qNK30frWyXP/Mlu0aBGriGxXPV21+5XbZ//z/eRO7VtzvP+6/ftW3ffFGbHzl7n0sentSPOEpoyM zO+CUsDr8yHgD8DpdIAwBCzD4ujRY/D7fVCp1DhzpgBWq7XRWCiv1we/34/cnFwYDAbExsZAkihs NjsiI83Q6XQw6PUNXt/r84LnebRr1xYetxs7f/sNgYAfaWlpKC4uQTAYRLt2bREMBlFYWACPx4vo 6CjknzmDiopKpKeloqrKBpvdhrCwMLAsc4EbDTgbVyPwPPhgEIQhKCoshFqlRmFRESiAtm3bQq/X g2EYnM7LA6USXE4X3G43BJ6HWqNBlc3WoLWpFoPBgOgoK8rKylFRWYn27dujuLgY+/btQ6+evWCv tuP06dNgOQ4ORzW8Xs9F0+cppaisqsLxnBxUVVVBEMWawpQaFBQWgVIJ1fZquFwudOjQHseOHUNc bGyz3YIyMn8klyUGy17ljQlSDROR0rXklRkjPQCw6YyYWOUSwplG8l9FQWTUFmt5+Jj7lrxwR9q/ umjLfyvfsPixzMeX9GvJtfsP6+1v24H7RQoWpWY/+kO32tcL398VszlHGCxycWfGZsbli4S7bD0v 1Co1iiu85oDA6dUxbUoXPdzXTggR15UjqqBKjDknvxsSKJUYiVFzABBWuNq4/s3HnrrtraO3jDlc VPHtyo0bF//032f6K2y/quyHuh8udUUDAKWUoZQq6eUrrCMjI3MehAAd2rdHl86doNZoQsVFQaFS q+HzB8CwDCwW80WTwlVKZegflQrV1dWodjjrMqvUag1cbjd89dqH1MegN0Cj1WL37j04dOQIoqOi QQGUl1dAFEXo9HrYbDYEAgEwDAtBEGCz2UEIgUajgckUDoZlYbVGweFw4sDBQ3VNj8+5z5q5MiwD k8kEUQzVCcrNPYGiomIwDAO1Wg2dTgetTgeVUgm/3w+z2Qy9wYDw8HDEx8WBgODgoYPwer0NB81T ComG1pBlWZSXlcHv99e4XqvgdrnBKThQSYLZbIYkSti3/8A5cWHnPh+ChIR49OvbB8lJSVCplBBr 7s9iMde0uCHweD0oKyuHQvHnp+LLyDRGiyxYEkMJBWFApXN+s1J6tP0t7Fi+/9D7D84fOnxED29F gemd7fbMMi+xWkVosgEyi5EICJja0DhCQQghDMAiZtaqim8eGfCCbXHuO4dWLHpyyku/3LPw8f4n G5oDCWWoEjhqfs6Yy3/7t2ELtxUdH3Bgwb+f6zP2ju9aacpdU97YPSgnmBCfMHDUkw+louw/YFjQ C78nCUMJwXnfFHztXM87ngGhkFjBUcn0Hdbl+Gf7D5w8uurtuX2HfGPN7NWdzF9e3resGm21YE8X ngqlKcXEGsv4o1XqnR+8dOd9L3yo5/q33hX4fIr/ZGn+fR8Oyk+ceccdR2/qf0vMEacqQ2jXa2dy rKGM0mxm/vWtb/o4p/110X3vfhPAwZY8JxkZmaahlCIxIQG8IIBhGLRv2xaEhALO9QY9ioqKQamE iPDwRsdI7dAepaVlUCgUaNu2DSoqK2GxmBFpsYAC0Ot00Gk1OP8rpvb6Op0OvTIyUFxSAo7j0KZ1 a+zduw9qtRpt2rSGVqOBvboaBoMBGrUG1Y5quFxuWCMjIYoijEYj1GoVvF4fwk0mhJtMYDn2Ancm BRAebkKPbt0BArRr1xZajQYFhYWIjo6CNdIKSimUKiUYhkFyYgJKy8qgUqthCjNCkkSwHBeak1YL nVbboMu0tqBnj27dwHEcikqKER8fB4vZjDMFhbBGRiIqOqpGMBK079AeYQbDOZW/648VabFAo1ZD r9MhJaUDFAoFHNUOeH1emC0WWMxmOJ1OKJVKWCxmJMTHy9YrmauGFgksAslFgWOUwlb/9Ulv/L/t x6oemPfj9lOzDu8lExWJPQsGjWv9flnOjrQiXbgtazFYAtZPgFxSU3KAEtgAHCdgXAAw5dUtB+yl rf796oZfH127duPEw5S+lX5+PJJKJ1BC8kEhSQzq3IgTnl931Bvsce/KXZ5btx1cN+KEn1GZ23Q9 1WXQwAdenDt7EyFEen1ychVAcxmInvpDiiB2Smguw8Bd+5qkZAOE4oREUFRx1rpOKaRSEJJDqV9I e3hDwbScUX9b8cvhufsOnBlNrB3t6YOHrUit2LzxiC7e4j3hYQGg2/jB6/rk7fhs6/FNw7fvS+pl ufPO7deP6vOK9mjF6e05e8etOerpow03exIGT1oQ1+umL+e2IY45dBGrYohOreSsTLRVjtqUkfkD oJTCZDKFsgElCZGRkXW555RSpKZ0CP3yU9qgmACA2NhYxMfFgdaMF2W1gpCzSUuUUkRERNT1SmuI qCgrrNZIEEIQCAbQtWsXWMyhPnoAEB0dXZdBFxFxrtijlMJg0Nf9f+29NIROq0XXrl3qjq2d2zml DmrLKhACi8VSV7aidk3M9Y5vTGDpdDroa1yiUVHWutc7m0wXHBsdFd3onCkNVQY3GAw1x0YBNXOo vTbDMKjW6WAwGELP4SLPSuYa5gqJ7hZt3js0+7eZwtKuP+Kn58RIEZLBU4of8zN6rPnl5G4WUSrp qw9f5ydPnsyIiW3J4slEWERxUvda2pR8V6VECKGLsvBduDZt5RFVdyE0BqGUYs1b6WkbbEU8LhBX ADBta3XJa3ikzCNg1RjCn70+KLD72KIs/HPnJnCVAEmaOFz8+YP5AqlxUcbRvEWVau3SSm9bof6Q Ef5T31Vo0lZW+FLrXtdM+KZQ8fe029x+rzS5Jh6MECJkZuLdynLyfuWLA3jyIqEAdmZnZu5ZdXAj hwgNLf78pWD2M8+Q/OIYdt1snYA7gc63LLAvysrK3vfr4meRa5OyIyDghR8opdkfT07P/nxHJRiY 9HR651g+e/5AKXStyeKiLHxuEHt8tf//+vJ4oSVPSUZG5mLUlSBoaiM+W+Sn+YNfyjn1ziMgiLKG REmQ5xsep76Ca87rzbhuo+Od/15L76/+8eefe6lrVXtuzXkajQYajabx9ZK5tqn7gwAA/txCWLIt VUZG5ppgwYJP09u0ab+7Q4cUlbwPy8hcS1AcOnSoOj+/oNP06dML/6yryu4nGRmZawgCBae4NGuP zJ/KxTrOXSmuxjnJNEGNCzoUm9dwsskfhSywZGRkri1qq6XLwdBXNYFAACql8qoKWueDQSgUiqtq Tn8UvCAAoKE/SP7HuVJPSxZYMjIyMpeZ+oHg9ZvO/q9vzLWNg9FUc+vLgCg2HKzfMH+ObUmUpMZK VZ/D5ZjNBcH657VRaj6h51X/c9jsOUiylff3IAssGRkZGQCCIMDlcZ+3sREwhIeOCIBaD4XS0OQ4 QZ5HMBCAPxDAqVOn63ryGQx6tG/fHlqNphmZbgTBoA92WwUEQTrH2EapBJ0uDEaTudlGuPqNcWt/ bmm2ncPpRHGZC1TQgVV4YLVoQ1mYV9RpRiAFyyHwXii0yTXr8ceJguaIE5/fD7fLDaMxDCqVCkGe h6PaAY1WA51W2+T5kiTB7fGCUumspbUmSUCj0UCpCEm85jw/SiVIfAC+II+y8krwPA+NRgtzhAka tRIM+/sshA6nE6IknvMZkCQJer0eKqVck0wWWDIyMtc8hBC4PR5UlFdCoQh9LRKGAQMBWiYfAZUf KsoC3DCAabw3oSiKOHHiBIqLS+Dz+SBKElJTUsAwDJwuJ3Jzc5GeltZov8C6+TAEpQXHkf/bEoQb 1DU9AAkIKARRgKRPRIdeN8IQZmpyow0GgzidlwelUonEhARwHIeS0lJUVlUhIT4exrCwJtfHHwig tLwSNkEHn98FtwuodJUhvTWBMcwIkNDs6kou1Pz8R0IBSMEK+O07AKoCS1RgVZEAy6EhkdWYqKSg AG2eeGrOMW63B7wgwO3xQKFQwO12I8jzIH4GGrUGDHPxMUIlKyj0Oh1ESQoVYaUUQZ6Hy+mCuqa3 o0qtumgVfBACn7MSJaf2oJo3Iigy4DgOdns1qsoLEKnzwpqcAZU2/JLiESmlKCwsgtForPs8EwI4 nc5Q2ROLpcVj/tWQBZaMjIxMDVqtFmq1CiAAw7Bg4YNSUoNh9WBQCSJR0Iv0hJAkCr8/AF4QEAjy oFSC2+2BUqVEZGQk8vLy4fZ4YDIaLyqMKAUkUYSt5DSc+dVQMQI4SPBISii1ehiTFJCCTgDhuJjF hhACl8uF7b/+CpVSBa/XC51eh92798LhcAAUMHVMv+hcCCEIBoOQhCBah2tht3twgtegTDBCV+ZC vCCCYRiEm0woKy+Hz+eDVquF2WwGcxG3aEMtfZoLBSD4K8C7f4NaVwECioDHDniTwYWlQaE0gJCQ hQUAtBoNnC4X9Ho9lArFOdf2eDzw+wOICA+/LG5cpUIBng+CUgqnywW/PwCOY6FQKJoUV7XUCtVA IACfzweNRgOGYUAYQJREBAIBcAoOTBPNrf1+D5zeIKxJSWAZUnPfDBjRg6rTv8Ac6wPRRoRE5qXc q1IJg0EPnhdCjXcZAo1GfdF2StcSssCSkZGRAQAaskBJkgSuJpCZMHqIbDv4A5Xw+Y2INTb+lUlI yBoSDAZwqEINqKLBMkBFScjiwLJBBINmeE/6MKKr4eLWB4QiZ+yeINTOUkgMDwKKIGXg90YAFuGi 59ZHp9ejVXIrFBQW4uChw3WFU61WK+LiYpu0gFFKwbEc9Ho91CoVXNCDJxwoYWHz8jDrAiBUglaj QXl5BSLCw0OCxulEVVUVdFotWI6DwWAAHwxCFEW4PR74fD5EWa0wmowt9uoRkYJ6i6FSl0GpkuBx AsGgGxI9DDUhUJi6gSiUcLvdobgpjkN1tQM8L8Dr9YBKFJGRkXC5XaiqqoJSqUIwEITH44HJZITZ Ymny+TSGXq+Dz++DWNM3kWU5MAwDva5p92BDsCwLBcdBqIlJYxkGAtv8588yDHQ6HVimJpuOYcCK FLbLEkNHa9o3VaGguBxBQYQoCmidGIdwkxHMRay91wKyzJSRkZEBAAJwHAeVSg2GMGCZkEuF4fSg bBQE2tQGSQCKkEuHVcIabUVYuBmcWguFWgORKKA1GOAO0GZ5ZCgANeHhghZFUgSKJDNcVAcfUUPD ik2eD4TEkUatRkZGD5hMRlBJAstyIAyDXj0zLtoGqO6uairMq9UaKBQcFGyNq4xSBIganEoPlVoN nucRHWWFw+lAeUUFBEGAUqlEtcMJr9eHoqIiVNlscLrcqK52gGFYuD0eSJcSSM0SKPUdIPjbw2WT wEADMFYQEIh8IajgQO3zCIm3UKC3z+erc68Vl5bA7/fDYrFAkiRU2WyItEbC4XQh4PdfsiWL5Tjo DQb4AkEwHIcAz0NvCGvSLXwxREmCKIoQBOGSrE2SJCEYDILneUiSVJch+PshCAQCOF1UiSoaDXV0 R/gNKTh20oHi4tLLMP7/NrIFS0ZGRgaos2BRGhIhLMuAYQgIYUAIg+ZsSISEBJYkArwggSEUDAEY hkCSKHhegtLQ/LR3llCYyNnGynrih8AowJLmb46iKKKkpAQ+ry8UgM/zYFkW+flnEB4eDkUTbiYg lADAcRxUajXaxgCS5EBFQIlOcRpEGJRwunj4A4E6S5XL5YLT6YJKrYIgCjCGGXA6Lx9arQZRUVGw 2aogScqaeKJm38q5KNXg9N3hreYhiSw4bWvw7k2oU1U1vRWrqmwol0KWSZVKDQKAZRkQIOTO5XkA FCzLwOl0glIKhmEuueWO5HJBPHkCKCuDpOBABBHBynKwbdpAYWg63g1AjbuNOcelSAhACAO2psF1 S2AZBgqVItTkm2HBBy/VKXguhBAEAn5U+hRISIpFuygdDgl2FFeGo6i4HPHxcZfhKv+7yAJLRkZG pgamxmrFsiwYhoBhQpsZx7HNCtmmlCIQCMLuphDsAXAMUCvMCAhcfgFxEeomN0hKQ/E3HkmJcPDQ Eh5AKIaGoRLKq31o6/fV+iUbhRACp8uF33bths/nQ3iN+66ouBhHjh6FTqdFakpKMzdsCp7noeA4 tInWI1YATFoWoiSFBKQYcsWpVCoYjUYAobXguJB7sU2b1mBq3FWtWiWD5wXotNpLDoaXJAlBMJAU afCKHjBBCRyl4KkOQaqEitJQ82uWBc/zsJjN4DgFJBoqOmkIC4PP5wMv8NCoNSAkJLgiIiKgvNQM uGAQzl074T11EgpKoTBbwNttcBfkQ7DbYeo/AEwzxq7tbVlb7IHjQp9HSs9ao7TNyEisHQuEgGUV CAR9UDIshKAPTAtEemOIogAFp4JSwaDS44GykkFQBFTKKogi/V1xdn8FZIElIyMjU0OtG0aSpJpA XREMEwrybu52FAz44XR6EeAcYEn9Wk4EDo+AyFQjmop1liQKv88HluNQpYyrFy9DwbEaaCQGAZ42 K/tLkiQolUqwLIuUDh1gMhkBQlBRXg6/3w9BFJosJkkphT8QgNPpAqWASqWESqmAz+8P3XMwCAXH ISwsDHqD4axkqlfVwmgMqxODJqPpd2++FKENXqIsfH4F4DkFpdIIysWDExgoqQSWZRF+XpPp+mg1 5/amC2u6CkfjEAIaDIC32yAFgyCWSAQ7pEA8cBCMw4ZAUQFEvx+MSnXR58YwLBiGgc/rhVjTBDtk UQ1l6FVWVoaSCprj3gUB73Ogqvg4lEpl3eebuE9Bw/gvg5eQwOX2QOkvRYXLC6faBEoliLZCFDop qqqqEBkZec024JYFloyMzDUPpRRKlQIAhcvlvmDjFwQBYU3svpRSsCyL5Fat0A928MyF/eoVHIs2 iZqaiKDGYRmC2KR2oINuhihK5xTdZFkGCp0FRktcE6OE5hRmCMPQzMGQKIVOp4OC49C/b1+43KGs OrY5gciUwu/zg2GYOguKIJ4NtBZFqc7q06hkuqBu5u+zbDCEQFlT6Z1hCCQuHlDoodZooVap/hDL iSRdpPgppYBSBX27DuAskfAYTRB0erCpHaF22qA0GAClsklRzDAEep0OQOhzV1FZBZfLDYDC6/VB pVLBHBHRLNeuSmeC0RIPv9sGl8BDFEKxe0qVEWHhyeBU+kvOICSEIDExAS6XCwqFArEuJwIBJ1iG gUthhMvtgc1uh9VqlQWWjIyMzLWMRq1BTEwMaAObKCEEnKLp2CmWZdGpY0ekpQoNbqS14zRnu4mM ToQ5MgESlc4JBGcYApZhaupPNj0Sx7GIiIgAcPZ4g0EPvUEfEnrNyCIMDw+HTq8/RzydW441lLJ/ eTfSi49FCIGC46DgOGg0GoRKVoTm8ke5pZoalyiV0KZ3hFoUoSehumWIIyA1cV2kheULQhY4Y50r WKVShe65GZ9FUAqNzoTk1AF1VtlagcixHDgFB45jf1dPTq1aDa1GgyirFaIogud5EIaBKAihkiA6 3cVF6V8cWWDJyMjIILR5KhWKBoOuW7IHMQwDllU1+n6zRQilYBiAAQPCojYR7pLsDedfs/bn5o6l UCiajEu63FaK5tRSqhU8f1aUT3PmRAkB4bhmtdRpClJTvb1+852WrDNByGqqVFy41Tc1DiEEtKlY wdBAAEJro1arQ28olXUxYteq9QqQBZaMjIzMOVyO/eBybyq07l9Xjj97o1T9QW6+3wPHcX/6nM6u +6Wv/6U8O45lIbXQ4nYti6mGkAWWjIzMtUVNXzegNqCYxRVXLzIyMi2G0lBle1CpJhHDH2pLREhN Y6lQIgjDsjXiT9PkmJcTWWDJyMhcQ1CIkghKQ0HSCqUSXBMZdDIyMlcnVKIQ/UJN4VTA5fLA4/Eg yIeq8ms1WqhUoXprVyIW7IpVcqeUMpv+M63d9TfNnNTz9o8Tzn//8E8fRdx5Q99xURERD5uiOjw0 aNqTY378NbeZVdpaOpdFyht7JY9MHPH4TVmL6J8rcZsJXZtlbB9nvTXsuufHZFPKbHhpTHTXtK4z k+74rluzx9jVQ3Fr7+gxloypU6//jv6ehORGeX1299QOXYbfnjJ/e/IfMf7vhdJF7NS+0YO1qZNm J87PD6df9g4b1C58WtyIJ8dlbqDyHxzXAOd6Ma4uF5SMjEwLqPfrG7JQUYiiiDP5+diyZSuO5+RA EERQenkKq7aUP31D2friLMPGnLzMAamtxhZVVXX3mnqHR2ZgLoCC2mMcr/WNmPP0c3/fXaUbGZ2S URImOqTynUvuuONRz8oXt1Y8/8SASNdlnZT9lIYPBCZ6q93J/jM5GwH4LtfQqz/4W8qWAjYtbvTM rXf3b1t+yQP51BFgyD0U5BiANSrqT/R7Aw/4q6s+BbC3WWMozEqCwhsJSCtewBYADa7jtkXZEduO eAd5YzJOPjUn6xAhzatIRyklr8/o2MXjCTzMVdhKAOQ1a16XAKWUrHxrfudfy7TJaXMe3HxLksne zFNZgIwCwQQx6N0MUfAzDOaAQwGAnwE0v8mXjIyMjMxVBaUUDqcLPp8fdrs9VEvsCsXyNWnBopSS DR/Msdxww9jUu177Po7Si/WSb5pVu3KGL/wpZ34JzNYO0WElfqdfV1Orro7X11Rm7jujmkQ6jP5w 6KzZN/fv3mbq9dGlnzL5ayd/8s3OEb/n+g0SPt/ZJmPAP1KT4mf0cLe3Xc6hjyz+oN/yr3968lBp dfzvHYtQSIAkxOwGUZocezMGDBybGuX7uEWDUEiUQAqIjQv68q9eiV6zYNnffth8YBBa8Cc+IYTq 2rRe0atPj5HJYvnGFs2rhRBC6IGl/x2xePHax3NL+ciWnEslUICKQVZJoWQoFYlIJdq85m4yMjIy Mlc9hIQ6H1yWrJVLpEmxtObv/Tr8+92fXtu759C3qz9747+D5y3OpJRekhyklJIuI0buy3rimXtO Ht01tZ1ZuUJLyDkbGz2cpazy2Ac6IhKKWt/80qrXZ0+2vfDeAvvosX2WRgdc3ortWzMaEnmO1/pG dGsdNbX/3e8OfOGesf3SLNq7wsJiH+h78wMQrpUZAAAgAElEQVTDvqdUu+Tf09oNamO+zaTSPdS+ /6Qpj/9YWE/w3K/cvW1jn735BZlfRkBxOLtndPvEmFvHZS/vlX3PhH5tzfq7w8xJ9w2dmz3oE0rV ALA/u7O1c6J1Rptb3uuPmvWgNJu7qWfUsLBuU6fOmfN0YqaZnfnffc7xxeVnEhY8dOus2N5TJszZ dbZj7KnvHoya3i/pxqiwsPujOgy647YXVqQ3Z21LXKC2EnXk2vXrx+yz6dvVvr7hg0ctkzM7TYzQ 6B6M7nTdzPv/9d8ukxLaTDH3/Puwc9aMUra/Y3XrYemxN4fWY8KUeRtOR1O6iL01WTXy8U3+2cdK y5KOrV86xpTU9c5x7xXELZrVqkN0YvptT3y5rdOc8b1HxGpUD1iTu8y54V9fdFlEaV2lwrKDR1ut /eW3scfZxChKM7mbMqJHJw6eOf7TTz9Mz0yLmR6mCXuow+CbsrJ/KbXWv6cfX5wdPyqjzc0mTdiD Sb2ypmVnv9xxeFzqDPPAF3udf//vZCZH9wpXzP3mSPV1pSWnWr1508C5ycPvGplNqRIAlr80p834 brFTI1Sah8ITu8+dNP+TnrsobXagzYb5fZJbG613txr24HWLasaklHLvPDSma6eYiDt1Ct3DrbqP mn7fov2tLvV3QUZGRkbmr81FXYSUUvLsYMuE3cfskx0BSUUKy9tVm/pWfLg761cA3pZerMbVdBoA nrp/VoMbU8XGw0qfi49lWJWt70i4V9e8Xl2mro5m/I4iZ0EUAPX51+cVsFLR/2Duqg/038ZbTsd2 6iMpC3OTc7euU7/Qb+hawVcZz8V00qaHVSjO5O9tveAfj/08b6f7Hy/30pei2qwhFLdSkDhJhTWc ik+AEHhi77IPnEUqtzshvXtQU3iq1eHVK/DedNWTAJYrgHiGMI9S0B+yge3ZoTQkJQM6iYD0lOLT c7oNGpD4y/4cq1jmVybGxye365EaE5sYErU/PdKty7R5y/4uqM0JHbsnl/pLS+LXffbqjNZHnc8B WHPRhcwEFL+gNQWeYiTyHwB7f3mss/X1dz995pdSy2hrh56FkRGcffvSN6ZWuXzdpCiyFMBm8CoK hlJP3r72C98qeCbaku5LI/lhBXn7khf+7Z/Lui17598d+/W3luWUJh48elqlC9Nb09PTW7Vqb1BL e5hugs/27JLX/51jVmn49p07o6S4uN0vX/63CNDdD2A/pZQ8e3P7XoTSf4qMVAC4KjgiTHPmH+z9 8n9O55kjO/JpJN9UeGJ34iePz//6yyr67HQzcX53R5u2r3/67XMH7VF9EtN7njRqqn0rFn44q9xH uzOQXgaws/7tR/forsowJCbv2HfYTP28OjEpsVW77h2stwEMO7TViJfe//EJKaoduvfjKjwuW8yu 5e/Mmpgn/odS+jWwuNFlLYwH3f5/mclPf3jsBb+ufWrrDqlPABAppeSpAQnXryoi85jYNKFvstdh Lzue+O1TD5Rs3539bwBbL/q8ZGRkZGSuOZqyYBGXmzfQGgsFpSLh3V49569sRm+FS8NRYWD8fqpj QIREDeqsW/poBVWqRT/LujS7cWENNyoyFJQQN9vaqU4d+lT84PG3Te8aNrWr4mTJ7iOl0wOJozZY +4ydPrZf+5smpfjedpcfGb7so819as8XKZEkUCE0FqGSJLJuXh0w9ZrwlKXvmFtm92BmtKPHXWeK iqZ03k91FIIkgUoE5zQbAyVEgiSJvzL9y19btvH5G5P5xeaw2LKedz7z8rK3nv5vtpW46c/3mt/5 seTB01LXBEXPKfdOypo8Y1oncVpn6YDDf/j7e25eQ2ObWicqMRQEIkFojTbmOq7fXGyZoOxw/dt9 J8+4oXN85MzxSY4FAisJIs66vwgjUUFkOFXbwd+oU/vfPmJA+o3jYyu/8ZYeHv3mf/M7PrFg/Rf3 dOJebhMeXmxJHbZszdJP/v3mUOMphmGpyIsanyr2lKHP+Ac6jR47eVZnfl6481Dc/uOlE7JrLGSh bFkqgtauiyT6vIJe0WHIAl3njJnjh6dMGh1dttxdfHT8mx+fSKcU7Krjrlt2VyX1C+s++cme06be 1KmV4o7r4hw/+QEKigtSPya9srTgnRWbnhmTQH80GRMLR81/97lFLz60IHn3XMbB0LSq6IGHvX0e uHPt+p9nPn3n4JsHsKcKxP3Lpr+chyjgSMOpJIxC+ufKh1s/9WHOCwe9bVNSrp/18JZ35q6ZTIiI r4db99rdM/Iih3iNox+fMXVi16kTeujnWpylWvfmH4bQFljHZGRkZGSuDS5qwSKESF/NbbcmvoId d7LM20lhbl3YpmfXZYb+lhZbr1oEBYF0oeOUqSlW42owLigAhlWJkd0HbM/88JFD2YQIlL7p29v/ +R2EaxvtThq/dvkrg8qXA/jowaE79IfK73OcOR3V2BSUSg0fkTFu3fq379hJCKGL6OM5P3X+5LDH 7W1/+geoL7qjMoBdoJQQIrw4WB8khJEEKP2EEB4APntzeUpJNT8wul/Hn27sncB5qivaR2bez8ZW vZ2z41TlxN++/i4ZQHGzl+v0TPXto5aMIOG9jo1+5qUl7w8hFQBwctGcDd9v/7HIS+utlwTGlJR2 NHzcs6vWzCLlawB8dlfHbQtXCll5efmRAOCvPuMHo5MkMEEAfkII/ebONkQVZrZHDJr547oXBuas A0BXZO394r6NxWWV9gRsBINMXBDHRChLjK06HjaNfPqnVbeTilUA3puZum3Jen58/okzFucj8caS QucwbUKbLdM++OcP2QnEBgDLnhi5dsX+03dVNnC/hBAJgP+fvfVBAJKHUfhIyNXspRs2vJ226aP2 H3/zYJ+w96fHKLVqZZLKaxU0lerdhxGO5MMVF44oQWc/mPjlO9ufP+SPb9sq6+7H1r01bUNdcH9E BK/gOCdbnR/vPb69h2L247tn3xq2v9OOHTO9klIALhSBMjIyMjLXNk1mEU4b9twvWwtfuKN0a16y sfOo8qFDb901+by4qcuJScNRTkmCYFi2qr6QsgOCQDhISj79IpleDKkvzKKpCCIwCo5nNca6OTPU JyhBpSDTeGqBSFmqVCqDZzPoIiUKIoiCpDAo3Cwu7OPaILRO3PB1rx09FTS5HV5z0ZavRv9nF9Mb VAIBheCqjHArIxlLtU3dvNFrzFcHbIoqmzKKhJlKHs2E7f2a97wid4FIpRILyioETn9WFIgsy4ug hPABBQAwnOKCdRHBgoKlSrX27I1o1KJIiSQKvBJWMIQQ4V9Z7eqdVQJJIgQcJyiNZ68nMAwvUTBU 9Cl2VUHjcOosxKTb8XQ83Nk1xwTRdHQ9wzAEADgGNTFwlNw3pP2obfl4lEvs7u5qsR/heX+QKTyo pmDYYBCNWF4pivat6VfG+zgpOf0wDWtdcU7m5MhF9g4fdH+VLyq7O//Q90/8bfY37r9x2oKkfuPW jLhl9gryB/4+yMj8lZACAfgK8uErLYHCaIImIQmKsLDm9eiTQsUkCcNcsaywywWVJIhBHlQSQQgB q1SBsFesapLMH0STAotMniwC2A1gt23163h99et/6IQsVgWv0ZEq3hNIOrAPdUKDN0JZ7VcagmFW ZyQQaMmYFABlW/4bKV5EgFEmtAGfa7oIo+SCktAX/tJolJKoUFn85nYDP6zKWf2tq7ISCOkJERFC wMNVN2S4aRAWANRGSa2iPsIG1L8BdQ3D1Eo2VBjkgslfdLQ/FYOeE5UKf4BhRW1J6PMYBABGyUpo ZnltQQodd+TxVlEFJY77KszDKzuOemTeqvl9irD7Qzz92OOaE0Uks7HzKUAETceSsWPi38/buf7m gp/ffmL60ryHvrwxuQQAPvxwNzdk3jsFMwrX/H3uPz42demR0qHaVj7u4Ibl//rgpJhEKX2ZENJM yS0jc20SKC9FyXeLYNuxGYLXA8JxUEXFI6JvJiwDhkBlsVwotCgF73TCV5QPT+5xBB0OKMPDoU1u DW18EjijqcUNlK8kkiDAV5APx/7dcB47gmBlMRi1DqZuvWHuPxhqa9T/1P3IXJyrr7DizA0Bw4JW u5gzVcMOfragI4AzAFB+fFe3QqUqTJPe42Ctq+1KoQ0SkpRg9gJVfldpVRSOhISB+5Pt+oDTE3tu qVIJlEqMJKnr1npIH3P+2oqqfJuo6/ivxbkfPjwkvBoAsufNiy7TmaxDnn64bDJ5pPkTGuH3t27D 7N5wsmrSew+u7AJgHQDkb9sS44UU1uLCTjxAqEQklv1jY4sEoOddQWfMr9K+3c7ynnc9v6MtgAMA 4Mk7luCRmIsWfRVD8pYRSGht88s5XcAPK6Kt+X3m96kkhPDOBeMth4r4ZCo1nu1HwFJzxpCt4995 7t3Dt7UvWrZ73bPb3ol+4J1y+ty9VuIOP/1i0lcrbfPKE8eueyAnf+lkQk5ty87a8X8nVnfe7crp 8QlgBNCA61FGRoYCcOYcR/HCT1G9ZxsgnTX4Cg47vKeOwbF3B2LGToKpR28witDXjhQIwL57B8rX /wTX4T0Q/bWRKQSMSg1DSieYBw5HREYfKIymP//GWoivpBhVW9ahbO1KBCtLQuUDahwursN7UL1z MxJunQNjepf/eQudTIgrKrBoyGpzjtmEEEKX3dtr/fbjxVmHf3jnH/0n3JkWK56Q3tyw74aqiMy8 iTeOXv3pkgvHIqyCACAg7DmfTBJy0TGo59NjJEoAwjLS2dIFhIAwNeYmIlECAoahhFBKSa27iAIE BIwalYxq5vjidi88v7fw8IKR39+986msrKyykS/u7F5QIgyibZiTtcogLs5Uyh+tUv/635fn3PPS Rwbr0Ds2D+rx4YmBp/7vk8I96+e9Mvemt8ZPvXO7uXKX+tuvlw7huow53Ql4GrjQCUkBBpSpX26B oYRhCFksLnqo6+LN+XnDDix89rmMkTN6x3iP4emlpwYW+ZgESs5agigDwpxXWoBQSgjAgEgEAFLb GV3sQZutZO/Wibc88M/Sf6zzrmUXdAIJ3f+55wIEODsnSkEIISxqrH+UAQEhRGTPnsdQEIAwYCRC Moq9b05p+/WeXw69vvndea8OHDdzjbF8j+69jWeGVfLh4TrSeBGTqBhdcSC3zLz5pcfveuitxYva dXEdtux9Ynvw6NqxC/te5xkxuH9Fv6cOdq4qI4OFKLasuqpSBQCEqf1MAAhKBIQyIAz+tQdC7kfP LXdMfrTNskOrZ//nzpiTlNJPTvzfIMc3Rw5pDu2tfPLFnB0pt826rej5pZvaHxEsMSS255rbAces xiYpI3MNQyUJ9n27ULDgY3hzD4e+8c8TD1QU4Dy0C/7SAsRW3gLriLGgwQBKVi5D2U/LEbSVn2fV oZD8XlTv2Q7X8UOo3tUbMeNugiE1/eq0/lAKV85xFC76FI79O0H54Nk1qP0vleA6fhCFCz+H6t55 UEfHXLn5ylw2rpjAIoTQ+4e0tgE4IlHJXf+9G97ekXtCe+M8wy/5d+zftWbcSaKTotLG7c1IH/// Pp0ak9fQeALEAICToFLJ4TrXkp1SQkoBkkN4RZ1bkXKMBxRHwdCQK07wiqBSAaXwuwSIAqiXUJor UpSfjcVhJUpRRED1asILhMzzfDd/5Gvsplz/9qM7MwtORQa79xmxI1G57isvYSLFoIIHgC7jBq3v k7/js63HNg7fsSex5/AbsZ2QuV66qO8XBkuwaM2Bwmm//nx0qlJrCkanDvktql3qZ+WAo4EFCxLg BCFiYRpAiSR6AHKMUlQCQNbr+/ZXuvs/tHBnxd05u34eWx2fUt6rz5hf7es2JheHPJkSgpWUgBRS SsFxZ4PCKGWdlIjHiMTYAaDjS9Pzu5/+9q3CTYfu+XWberjiOt9vnSXRToHjLCHOujmJlKfAKQqp KMZXu+bUJkn0KCjcgFICFQtAqRvi2bg5yhIHQI8RMA4AuP+u+PUeTeDRZdtLZufsOD3R3KpLYUbv 1usqNx1NqiZMowHkGYOGfp+Rv6Pj7gPrev7aOj038b55O8aNWfEys/WgbeuxPUP265P4mI7Xb5qY cXDDBnvrDGd5BQXSqSRtLQVIjoJBABITBOgpACXd3KAkYbLv+ILx71W88Itl1eGNo3o80fOXPS9t OfrxPSP+YT5dNWVHzvbha/bx2nBrTHWrUde9jJQRS2T3oIzMhUiBAGw7t6Fw0WfwnTkRepGiYesM pQiUFaPgm4/AO6tBJRGlPyyG6HE1KpoIw0DyumHbtg7egjzETrwZlgGZYNVXV7czx6GDyP/8fXhy D57TaLwhXEf3oXrPTkSPvl62Yv0FuKIWrFLLqe8iItQrj3QtFPDt2ddrRM2e7MzMAz8W7WaBtkiZ PUv8OXtIo96uqPt25vnfS5uVVO6SFtcEHRMyl8/MxLtesO8ff6VznaDIN207oDanjT+ls4aOi3zJ 1aMHnvRKIrz3Ej6N4gjzTdrNJ5zKs+UNyCO+zEw85yn3Mnv/1pbH34EJL6w+sSgra96e7Yu5Auhh mHydYFhcDfvhAHvkeSsPAJ1vWWBflJWVvW/b4meRa5NebB0SGmTydh+AH+b0wJpNFWABLe3Xa6Sw +I3J4g9v3HvhDY77vJh9Iu0OJy9IkwkRs7NxwGJKm3CEhua4+N17dKq+EfbH/nXP3eNjY4O4f470 YtnSoTs4Ok3Xqk1eTSC2LzMTz1a4wsiaG84KnjNRe7dUG9LGwh+sWbdsgWZnL/3pSPZ3R3z5mLEn QjialHfUrE/b8JvU7ewzGPllqdaKO93VMZibEXLbppITK9165Sp33BaBkDxpTg88Xc6rsK7e9Srj D61zGNI2ORJ3CQCwfHuiMfq6Hidv/ceYWx5o1068+97ZMB/57OZ1Sg0f1ialwLa54Wfe56Gvy7Kz Mx/Lyd7Iqk96xUcIEQDkLcrKyt6+dfGzZZURKOs5QNj7zX+kjLkffrKbTxUJyZYyM/GO18W+532x NQ/6G9xv466SAEcXTyYCAHSY9n1ldiYeXeoV2T3aDTwAzHp3TQHNzn6tXW72WyUVIOGR4dLAz14Q sgmRMwhlrgl4RzU4nQ6kGc2xeacDFet/QsmKbxC0VQKEgFGqAJaD5PcCDbQvIQwD0VWNkm+/BABI AX/TFqmaMfwFJ1Hw+bvgK8thHTEeyoiIS7vJy4wnPw/5X3wQEldAaL71q4szIcdLLVTgUX1wPyKH jQKrUv35E5a5rMgS+S/CV/PGdP1y3alncrnWJ/ukxx4Uio4ZThzYOykvfAg78JHX5iy/s/3RKz3H xnhlZu/rVux1P1hhaLuvT1pUruPQzqgTp05NKYoen3/D8//vgY/GaAuv9Bxl/vdZsODT9DZt2u9O SUlTAQBDCNQaLTju6gtFvdrgnU4UL1sAXbt0mPsNALmIdcVfXobi5d+gavMaCJ6QwZszGBE1ciJU 1li4jx+Gfc828PZK1Ji0Gh6oVoTUv1ZDr9WD1egQ3nco4qfcBk1Uo1V4/hRErxf5X3yI8tXLQSUp FD/BclBaoqFNbgcqifCcOAq+fk4TpdB36IT2j2VDZb2y8/9fgFIKv88HXuBBKUV1dTUcDif2HziA kydPwWqNRN8+fRBmDENhYUF1YUFRp+nTp/9p+4n8zfIXQaTm3LYJzo9U9qKJv63ZcxuvMkqWzuMO pKZN/nTZ7HbHyJ1XeoaNo9VYdqUnKxbkl54Yt2nFjkGswRKIyJiyOr1r1ieyuJKRufI4D+5DxYZV 8JzOhS65FTRxF7ZWpYIAV+5xFC76HM6Dv0EKBkAIgSaxLWInTYO53yCwShUsAzIR3rMfir9fDPex /aAC36BgYrV6aOKTobDEgOEUEH0eBKtKESgvgehxAVQCyLkWLtHrRtXGH0EDAcRPnQltfMIftiZN 4Tx6CPadW0FFASAMWK0eEf2GIWrEOGhi40ElEVW//oKihR8jWFlaF8oatFVAcLtkgfUXQBZYfxFm vPKFh1K68pnJ6at3bi7liuM5OqNfKp+dfaNA3rjSs7s497z3g51S+vXk9PQlp0pLOajVUvaj04Ts IY27hGVkZP4c+OpqVG3fCL66Cs4jHhQt+xpxN06DOjYOBIBEKYKVFbBt24zytSvgKzwNUApGoYSu XTrip8yCqXMXEDaUz8RqtYjo0x/qxGSUfb8EFZtWQfS464ksAl1yG1iGjUdE7/5QhkeEGveKIoK2 KrhP5cK2bQOch/eBr646d7KEgEoCqrb/DMHjQvyU22DokPqnBb97CwvAqNRgVWpUbPgJgfJiEIaB Ojoe0WNugmXYKCh0urrjIwcOgfPgblRuKauz4xGWq583JPM/jCyw/kLUxK4FAQRRWIjs7OwrPKPm c87c8/KQPWTIlZ6SjIwMANexQ6jeuwMAQIN+VG1Zg2BlKSyDR0NhMsGdfxLOfTvhyTkC0esCADBK FSJ6D0LMpFuga922QSegNjYO8VNmgFEqULbmO4g+L6gkQZvYGom33oWwrhlg2LNJ5oTjoI6JhTom FsZO3eDYvxtlq1fAdWRvjZXorECDJMGxfwcEtwMJU2bC1L1XncC7GJRS+EuKEayqRFhax2adUwvv dKBs7SqE9+gNKehH9d4dIAwLbZtUxN90C8Iz+oTi0OrBqDVQJ7QBo1CBCqE8LE6nB6vRNvu6Mlcv ssCSkZGRkWkQweNGxaafIbqq66wqUsCH6r2/wn3iGBiFAqLXA9HnAWEYUErB6cJgHTkRMWNvgCrS etHxFaZwxN54C4IOJyrWfw9WrUXUqEkwde910Sw6RVgYzP0HQ9c2BcXLF6By00+Q/L7z4rUkeHIP I++TtxFVMgmRQ0dBodc1OiYVRVTv3Y2iZV9CabbCkJLWbIFFJQlVv2xCoKQACuMIlP24AaLHCX1q FyTNmAtDSiMlJBgSslgRUpdhyRnN4MKMzbquzNWNLLBkZGRkZBok6HDAc/r4uS4rQkAIgeh21DUf JSwLKklQRlgRPW4yYsZOBKtpulyC6PMiUFkB64hxENwuKMIMiBw8vFklCgjDQBMTg6QZc6CJiUPx d9+At1ecG5dFCPxF+ShY8CG8+acQPXoCtK3bgjlP7AhuN6p+WY/CJV+Bt1cgefbDYFqQ/OA8fBBl q79HRJ+BUEdFQ9e6LaLHTUbU6BugbSBerRbK8xAclWctcIRA3yZFziD8iyALLBkZGRmZBlEYTQhL 74aKkoILRU9dkUwKEAaGDmmIuf5mRPQd2CxxwldXo3jFIgQqbWg1+x60vushMJwCnMHQojlyegOi x9wAzhCGwkWfI1BedME8Jb8XlRtWwnPiKIw9+yGiR19ok1qBUSrgzctD+c8rUbVlDXiXE4b2HWHq 0gMgBKLfB0gSWG0jli9K4ThyGPmffwDCEUT0GQhWrUbUiLFn+yZeDEkEb68A5YMgLAOF0QJjl25X Z8FUmRYjCywZGRkZmQZR6HSInTAZwcqyUBVySaor0UApBSEMWF0YwnsPRuy4SdC1atOsAO2A3Y6i RZ/BvnMLkmbeD84Q9rvqajIqFSKHjASj1aNo0efw5h2/oKgnlSR4Th+Hr+AUqjauhioyCqxajWBV JXyFeZCEIFi1BuYBQ6GyRoECqNy6Gc4jBxB/483QxCWcM5bgdsO++1eUfLcQ/uIzSJg+F7qk5NAB NVa+puAdDvC2ypoxKXRtU6FNSL70hZC5qpAFloyMjIxMo2gSkpE8+0GUrlyM6n2/QXC7AMKA02qh TW6LiL5DYOzZGyp98yxPgsuJkmVfo/znlYgcNhbhGb0uS9FywrIw9xkAZUQkihZ/Bse+HReUgCAM AyqJCJQXhzL86r9HWJh69Idl0HAQloW3IA/lq5fBnXsUgtOOqOFjoAg3Q/T74Ms/CfveXfCcPAK+ 2oaIfsNgGTisxdXX/eXlCFRWhhqOKVQI69gVXFjY718MmauCP11gUUrJ0mdvb/vNj1uGbtpbkhQI Sw72GH3TwazZd6y/Z2CSvfa4nxe8EfXV1wuHrtqem+rnLFJ65sSjt8+8de3sUem2yz+nN1VZvV4d u8s4xdgp66GF38+N9TZ9lgwA/Pz2DPOj2Ztmnkm+7Yjtt2d+Otta6PdDKWVvbB85anNwUErvqbM+ /uGFcfamz2o+b83s1OnJdYrr1cP+vaL0k7FH7h5ovn6pq39c29u+WLD9EeNl+5xRSpmJsZYJx7o9 qDg+86mlmEzEps+Skbk6IATQJiQi6ba7YB40Av6yMoAhUFsioY1PCDVabqawEH1elP70HcrXrYAm LgnWEeMva8YcYRgYUlKRPOt+lKyMRuWWmgD92hupd9xZQsVOdW07ImbCVCgjzJB4HhWb18Fz8hgA CY49v8B17ABYtQ5SwAfR6wQVBFBKoYlNROz4m6AMD2/xfAPlxRBcDoBSqGMSoE/tLLsH/0L86QLr nUnJfb7a73u2Uh2n79o/OUeyl4fnr/ts6tMHi37O3uV8OjsjrPLEy/2sT7z8avZuh2lgbHqvXJNo l0p2Lr7pb3nuAfNXVv/zhXGmy7rRwmZT8UE+0+1wJcHl+h7AZRNY373xYOetZ5RdYyfeu/bhQckl l2vchtjywROJa477M9mMMTuzp4089kdeqxaFKESAkDlg8B2Any7z8CylzFBCyFjKa5YAuOC5H/hq fviPB7wjK6O75L/80KwdpAWtaxSc1AHA3RJoDtDjGCF5Iwhhugc5ugrA7xZYlFLmCMARQoJTokyD DFq1GnYs30Up0wMQWzJXGZkrDavVwZjeCcb0Therv94oEs+jYtN6lP64HFSisF43HoZWbS5pLpRS QJJAGPaCiRAAmrg4JEybBUNKZ1RuWQf38QMQvW5QUQCVxLoC8oQwYFRq6Dt0RvyU2xHWIQUA4C8q gG3rOlBRrKmtJUF0VUN02WtPBEChCItA9IRbYEhJb/E9SDwP35nTED1OEIaDvkMa9LUuRpm/BE0K LEopWf/+bbFv/WCL0/efYbt+ftbpyfJJFbEAACAASURBVOTS/gI/+UIP45Ofn37oGNdL22r03Hvu 7M0fDB75Tn1444/3/PfEr3d//sHG9QCWfryubOiBUsNIbb+sZ6fOmbDQs/0dis2LZ3yUs+7xpd+P 2Abg60u5fmMQc7bz5Zcf+5u5IpX5+NH2bjx2+cY+sfzT3t/nt7l/SJ+bDwP4QwXWieXvtF59LPZx A0nNBvCnCCyOiBJAg6D4I4qCUhDCg4IPclKDlrGixW8Ytx6JfPBMB2blyw/hN4QaWzcLEUQCqEio JAGAJEICqMhw6stihdv25qS07DVMVnrm9Ucdx7dZqO0kO+zNpAn3LxmWlpwxdhH+pGckI3O5aam4 opTCvmsHipZ8DsFpg2Xw6GZnC56PKIqo3r8Hvtyj0KV0gqlj5wbLKSgMYYgcNASmbhnwnD4J5+ED 8BWeRqCsEBAlgABKSzSM3fogvFdfqMyWkJgSBFRsXItAWdG58yP1+gZSClYbhuhxWbAOGd6ielm1 CC4X3KdPhEpbGAwwdukFVq1u8TgyVy9NCqyf5vXp9OwPhU/nO2kGTtrzc4rFFymlP16KK2h/ZaJK EakKpFh6fLXtlYkHCCE8gOCivw3bpDlWPNd24lQcpZncfQMO9nOYuxf0nPbUxnkjiQcA1r4w7scf Dxy8+9RvW7tRShee/9d/yZsDI8e+dnySauT8/FH4SVy4bHuPwoBOlTpi8r77P/jPBrwxOenDbzYO PVAUiIjsMrRo+H3/+vm9WzqfAgBKs9WDU94Zu8uYZUj+dNZXq5/tYp7wfsUNydNfPdS98mvFsuWb MkqpiUsfd9uuiS89s3leNPEcy+4Wm/VJyST3wOzjp7+Y+zMIoZTOUUzp9d2o1cLwuGl92q05tuS5 ce8f8IwtD+bHffXgTQ/E95m2ZsgHX337RZfQPe38+PaEVz/aNHzTIVs8Yjt6M2++d9PXT9+8lzQi YEv3v6x79blvBy9Zd6hblY9VJg8Yd2r8/c/9PLvyqarHnvxmyr+3B0a5hNLYwFcvzTC3HxDV/+Ut S1ZMIGWbP3goZsHy9YNXbc1pZ1fGIGXoDcdunv3wukdGJdgA4J1bWvfM3mboPefJl38tWDi/zZqt x1IRk+oaOPuJjYvmZ+2tv9bfvnpPwsdL1l23dX9JojZlUOWGsoQCQn47x6a97r274hYs/WXw6l9z 2zrVcbTj0KwjWXc/se7hIeHVAPDqlOQ+z20L73fDxBG5+7/9tO0pmu56ee+6hbPKnwk89dLmzAUr 9/ao4iLJlIdfOqJQqQ3gccFnjVLKzG1vHH33es9YkVa1sttXjDbFr8Z1/zmyaO2DabmNz2PuuoeH tKpuzufVuWC8ZdQjWyfnmAYL93382ZLsfkbbhk/uif7w443DN+zOa+vXRopdx9++d+q9T2+Zm0Ec F5x/6ghvP+FndXrrzOO81MV5YD3TOikupqzAdtAUW8U3dE0Zmb8i7hM5KFz4KYIVxdAmd4B1xHhw en2Lx6GUwnFgHwo+fhu+gpNQRSci4ZY7Yek3EKShzEVCoAgLg6lLNxg7d4PocYN32AGJAgTg9GHg jMZzYrFEvw+Og7sgCULD7jpKwZnMiBo1CTHjJl2yKApUlcNfmAcQApXFirD0Tpc0jszVy0UFFqWU PD0wYvyhk9XjHEGqJP+fvfMOi+L6+vj3znbYpXcQkKaCoBQrFuy9RVETe4yaoklM0RSTkKamvCbR NE1MsYvGHnsPKioIShXpvZddts/Mff9AURRbYvJLmc/z+AjLzLllZ3e+c8+555TXemrsr5SsSZx8 Ar/DjWY7olPtAF+r192suuiuiysAQEVeXltOomKd2gcUYttJiaHR2kXMyOp79oL21+vHNJaL1U5i o7pYU+wIQH57+xLC2lPe+GTW/rW2Zg+XTI/QSK1Fflrb7DMHZ64c1Oc3jq23l7t2ZjvbVoryCi7N 2LnsnX4LTuheXdXPohj1kBOCcQRwZ0zYDsCd5/XPJO/73lAiM1V7dOrSoChI980+vnP6poXStwFs 5sG5iIA5hPK/xgDHYgAKuEkAOhSgXbSuoee7DxwgPnPpiriqxMj4BgTLO0R0FIdcLy+1/bnwbk+/ f+QtqnKyCuvuW6AtzveO27hqomeufimA3Xe8F6WrLeYOWrLwdKPNJOd2EflBTI2hIP3EhB+XzB+b MfHl97sNrmYaL1+TJF8tYZw9fGUhnTpKg71Bp8/r7P/h8k2fllj52neMHHjVoK+zLkneM/6jpbTP 3NicJWsm+jZIxSSU1VS/sWnlx9n2Kjt1UGhHU0lBYfCptV+Pmyy2fhpAKgAcWRzuufKHX5ZdqLKP dO/YI8NeZdLGbt/tVqQ3efDXBfdPc7oELft450fl1r7WnfoMuKpvrLcrvrR9/LL3+J6LdlfFfDTa oXHVFJ8Ic11+zMFdx4qd3UILu7fxiPeQNyreXvj14xtTLF7hbYMaQn1scwrPbI8qLmkI0FpD3dpX WHBUlKgqq0ySlJTGWNs5SUNDA2UBflbkCIBNc7oELf9450dlt/Sj5NL28cveo5GLdle98/EYR83d rlMjJ6N0Z5TNpHeSFhey3uPbhIR9YNXGSn/6wyGun76/9ZMMaZvAgIgeuRbaYsW1Az9O+TCv/sAT G+vf2zSlpet62BdXr1JK318wNPSFfcXyDpSIGIu+L8R+9cqkn0e5ESHOT+A/gam2BqXb10ObmwGR XAHHqEFQ+rd7oHMpz4MzGiGSSkFEImhzslGy+Xvoi7IBwsBQVoCS7esgtbOHdceQe9oiBBArlfcV dkQig9TJHSTnKijPomnVqsmnKJLJYenbAc4jJsCuSzeI5PfP9XU3jGUlYNV1YMRiWHfuDqmt3e+2 JfD35L4rWCYjJ6PX10Up5cEbzRKxofrh10MB9OsXwwJokaRk98Iefv+3s3AmcRh08YnZw+KuxrYT G4xlFoyUGF0tbrp7lC4SKpWxBiLSypMBKW4TWJRjKCUMNShCSpx69HvFw4oWT/Yocdl2Oueb4zmS UUFDJi7yDvTd2hO7+dLz52Z+fSVn0b6Nh7sD2A4AHCU8D8oCAAXDU8ozRmJX7Tlk1MuOUi57bsGH Pl8fz1udWVI2PvAE3UtPBfE8KE/QciWNEsIDPHeWD6/K3nxwxUf97NkitYtH5+lvrFr7ZLdzhBBO s2Oa06TXDr9QIo1UBg4dMWdmhCoPx5c4bj6Z/vm51P3zxuyil3aPJUW32k3/+bt2CWpuQl3wjNMD RkQuftXiZ3bV1vP9D6WVv1Z6Id5/8e59P/44xqOiotyhs3W3xzZs//LpLQDYDRzbqdKmfb6228IP 930zNgGA5L2+Tk//lHN4fnnp2G0AToPnOY6DjDoEn207JOTzIEfU2+1cPPzzCxmfJmSUDwOQSmmM eNHgNZPPVrv0duw+6a3xU3v8oju4nijlqdGrq5hljZQSAIzZ3OhVbReUbej+4rp9X45KBiB9u4/D 8+uuHXyyoHLSNkIc4z+b7EV5qYORCRj5fcTEwLXh4T46688Ghmy/guc0LgMTBk4Yubg9W1flmr/C f3OleUU8hevt1xIhhKeU7m37XPi1z/NVESVeEYf3bl61HID+/ygl380O8qyxC8rWd31p/b6vRyQB kL7Tx3HBz9cOPFVQOTEWQHxr1yiFiA6wPmk/6a2sZ8+UOo126jspZsXWxZv6EcJumuUz9pLJrreo z+J3T81Xr8/OPK1445O4py4XZo0QXYtzRysxYuunhwVnFGKETZeJH4/R7HE6cGTjuC88/OIApLTW voDAvwneZEL5wd2oSzgDAFAFhcOuV/8WJXDuhqmuFnUXz8JQUQHXUeMBQlC2NxaN19KaXXeEYaDL z0Lp9nWQObwEuYvbH+6zSCaF17S5kCitmmK3DHowMhlkjs6wCesB+x59ILG1+0PB6JTjoMnKBG82 Q2JjD7suPYTg9n8h9xRYhBC65ZkO+9tWVw66WqoNkzq1yw/oHr7lyUgH7exH0PiJRd08vtmT9lau oodlh8lPvhETQaqnxHSzIrSMtBZKc2MRt3X/jhEMI+WdOnVJ7Pp/c3JjCGFX05Ulx3ssTWIYX0+1 85AzG2O6qzcC+G5h38vKpBqqKS6xv1vfJBKF2S5sxOl9H05LI4TQH+miop86/XhVq9W3156DTHKf selv/MAbWUIYaibUfMP1t2Xt0XYV9eZuzj18D/d31LmmZ5U5W/tOY2wyfio1FdSMSt25wxNAC4El s7LXKEV5NciPa5d9kR0YN3lu6tzPX/ttSEVFhsnSUjNqN8CbNCyBHeUoz96yQnjk0FfPZv6w9c0+ 9qopQw0QyXysufZqfbWlWkOcAIDlwVhYO1bb9Hny2LZFweXbAKjXj05blXihtqqizpVSyiS/209Z mNvYX+IQlvTY568fjPEhjQBwZuWkU79ciK+8rnb5OT9l7N/5Wbf09b8s7m1vOXmUUSSS+ajYwEZj tbKqnnMEAMqBKGzsK92GTbuwZp5vAwB82MM63MjbW3ceN2HjliVDiwCAUpp5KMD5ksqE4YZW5pgQ Qvc+4ciCiHmOIxwA8y2u6wO/ftoj/Yfdi3rbqyaONJLmflhW1ppar9/BMFSkLba++sXCV5NL5F3t +01d9t0vL2+OIIQFALGFVbWSrzSoM3Z3n7Wrb+4TQ1/OeuOnV34oq63drXBxqVgfc6dJtdiWZxy9 NkW+9dn2wLWJ0oICifpycv4j2JQuIPD3pzbhPCoP7wVvNkFibQfHgSPuWz6HN5tRn5KMygO7oM3N hOvoyWCkUpT+uhO18acBnr9jR2BDaiJq4k7Cbdyk3xUPdTsKNze0nTMfhopysOoGiCyVkLu4PrIY KU6nhTYnE5TnoPDyhaKN1yOxK/D34r4rWJOcJ12I67h3VnFtvptd+8G1I3tPTn8Uu5+uLe3t+O7m 5CXnacdAh75T3jm8qGsiWQzYKMRUIiVGEDFTc2ssZR1gZkUS8HJzEO4VUH1r11woyxCOEYtYkULR HNck4kycBJQ3MnePsOSoiIrFzC03bEeep4TjOF6skjSKYHqwcVJ6Zzzo1QKzVaNab1sUt3HQVxdo OCgIAQWrrbNqlDsZnbTqO/Sb77MH87r92ukNq5qip6/G5b7+6uHvjRKVa5Ff5Jgd/uOePNDc3m3n ffN0z45vf7R7uc6lkyK8b7t41qCuUVWm6qpLKDHyfHM7HBHxUqmkeY6oQsLzFJTlzRIAJK/cJK2u UThTR4fzH7ZFw9Lrx5lEkhbj+7/pEaFLPz+61OjSSRwR1S7ebNRUqyqu6CvLQFgzd8u4WvY0r5hz NJtcqasFKXiQeW3JneGAn83s0jlm1aFlRpdO4og+AU39qEzRVZbyhDWTVvUxIxLxDQWpfnGE9+ZU bbRyibU5HM3VQOA4YexvfTJil2TVXp5+bF3CRwd/MDQq3YIy2kdN3BjxSf+81mzO//H4JUppEiGE UkrJXODzu8XYCQj8m9CXFKN8byzMdVUgDAPbbn1hGxpx9wB5SqGvqUblgd2oOr4fvFEPt3HT4DRo BHiWhTo5AbxB2/qpZjPqLl2A46ARkFo/mjp+jFQKizaej8TW7ehLimCsLAEjkcI2tAvEKiH31b+R +wosEhPDo2m3U2bNkU8Qc+STP9zotaWhjst3pbx2zBTWxbLXvJikbx9vzp/kEFxhkiuZKqPW4H/u Apod3BoHVlZnkFiZbB3rHYHWFjTuCgVARQ+/XYW7hwATM4QChPJNrrHrWFFyx93+zmVflZRnZQoH vVunkV/WlxyPrb56tblJEJgZYtl4+zlfb9um6PH8x4VDCna8+Mn3Z6069Q/tcCXx0uOXD8R+WlTO WABYD7Tc3UNjo0WvfnF0RqHYz7X92LeePfx69wRCCLfjCfvH0mvlPcA9+H3eylbBqVS8RiTSSatu uW7EhOdvtpkuKcjMmVUsam8bMv7dZw++Gp5MCOG3TnR4/EqduMu9mrO3FTeKDXreLCe3PSISSkgr CqrlMS1+o6vDJQvXZj9ZLGlvFxz93rOHXg5LIoTwWyY5TL5SK+vKofWOEMoRKvNqDOo/bLlb9rqI sxd/fL7PIutcAKcAIKcq0OLJpStPH/z2gyNWZXBo66zqGn/u0syzW83fGMTWswAktWr3+rV9/X9B XAn86zHrdCg7sAeNWakAAImNPVwGj4DYovWcV7zRiIaUZJTs3orGtEuQObnCY/KTcOg7EGK5HJRS tHl8Fkq2i6FJuwTeZLxjh5+xogjG8tJHJrD+TDRXM2Cur4PUwQXKdh0F9+C/lL/8XS1aMcRu+a78 lw+qg/pZ9nzmvWvfP/5rixWxYddMKpXVBWlltc+1H38KvfFy7aXEbiVSmVLVqXsyue6y+V9hYSLE ra2jloDoG8or3LxOQgoABWvibHR1Wi8euKkMwYNSjtFzUumNV4ZGOeVZWWtzGhuMkTNXnmIBlAIo XRbztOKpBSMCno6NvkPYSY9/33Xt8uWfrSgbGn74YmrRJ2u2Hn7MmVvhYy5jibEsiFIq4jlQCo6w kMgopQRKF7G+0WTPQsEpvQMaCSEcpTHyE7kIbNRzloRhHmgn6DYAA3oHNrq3oReM5srgie9e9Lvx N0NJjpOawrLpDcwVG7Rme5ZRsDaeHRsJITwtWqg4mccH6g2cxb1W7vv2tE8RSSpM509l9qWUNh2Z O8/CJGKd9JQy91yYpxyBiJFmX7+ei237iA16sz3LWLDWnv7N/TidywfqDbyF+C7j5lieUbUNyJKM /L9fogd4f+BpyFRn7123ZNLqFF9KKSnf/dXkRa+v/DBv6Fb7PYdOZn+xbu+mAUrtBnttnhPltb8v oY+AwL8Q9eUE1J45AsqaAFDYdu0DhWfbO46jlEJXmI+i2PXI+24FNKmJsPBtD+/Zz8N54DCIr7vk CCGw7hgCn2degfPgMRAp7qwNyGk1TUk7/+ZwJhN0+VngTUYo/QJgIbgH/7X8pYlGaVq09PWFcfP2 pEuecQn1PNtXdd513rzfnpw79zkwlCPw6lS7MBnHxgTaHruYXf7YlaNfv9V95IxwV3M+/8WZtGF1 9gOujn9s2OHcjXfaJiIJIQABEbUQJ4SCAcDgFp8ew1MCEDHD02aBSQgIAyICAMJTAgKGoYRQSknT yoOWUAICAkaOakY2dXRJ4NIPLpSlbR63csmFj8eNG1cxeUVSSFEF1xMqUc4Nu228bYu5zBppwuql L85b+q2jasS8Q11DkDM4139N6bkTb255bvKaIROmX7CvS5Fv/u5wpCR4WGoYcBWA8dZxtLWtL9Zf vWaTVbh8ad8REw972KBhy5nj3fIs/FilW8gFQgh3aoFfNZNZp845tm32tFcrSPjk5Qe9ffYfVp7M HJD0/siPBvQbcDk0cJNnXTXpouPFcr3OZAk07RYFwFCGaynsCGEY2lSangxfZfzpqeDNiZXZPTK3 xXww8+mXdtuzReSD7SdHVhskrgRggJFGDx/XI5Zxae+df6//JwP69UvtNHCft7qGdNFTsUyvN1sA ACWUAUMY8S0rhMOmjr/YO2ndr/sv/Dyz76hU5WuLXsx+YvbR0Csl2kFmO6LhxUyrq4kdAxw1isvl peVp8WNenflS9WsHi3Z7DPHI8djw62HL31LfPx8z5JMB/fqldB64z6uhhnTVU7FMpzVa3nIdiOj1 fhAGhDCE0TcayeSVCalfPNHho6+OJq04/f3Xrz3f5qU3OrKF2fVXNM+e+OCJz0ZGP35WaahlDl44 P7jOJSzXS+WddtcLX0DgP4SppgaVR/fDXFsFgECktIZteLc74pdYbSPqEi6gfF8stLlZAOVh26UP PCZOg9LXv9UcWXJnZ7hHTwORSFFxcAc4va75OMpTsI2tuxD/TpiqKqEvLYZIbgGrwLDfla5C4J/B XyqwKn48LSmtaLCuamRTNRd2inIvicaieYcix9gEDbvqbjvxwuefJ+d/tWTaK1anM6dfTDgams2o qGenMYd7dxv90/fj7Ytbs81wJh0luMxTPjet2U3nyBMgjxKayPI3dx1SEDVA4nlCSgEAZrCU569S 0GqtGizEIg2huMQRWnQzBsuKI8A1UEJVRGwi5CX9qQ/GrBAdzmg4lZ7YtTDPwbtH3+HnFOmHMi8D zo1GkREAwscPOt4778zXR1PjBly85OcXGY2jhBCOxkbH2rgWF+25UDL54vH0PlKFg9Gj87BjbUO7 bX4GqH/2tvENWHr+WjE7/LmTyRWTziSe6pbOMlL3tkGF3ftEP28Y8NTpa+vnoM/TU9Mi83b9356z SVMuXHAIkoyyOPrDnOE7NeJ4uudc1oTkalUXmw4DLk8eLV984kJepIGl9ZRS8vUTPmWEIkFESPMu OAmhekqQBCD7xmszvhufpHs+7uUd8QXTDm+/NMrWp1NFaLfRv+oOntBkU+QB4MdEz91mkMay++Iz xyVXWUfYBg9MmjKKiT2cUNrbaGTVlFKyYpJ3CXg+keXQ/LhJen2sSfh01HLRicqyU5f2Ra5PtQvq 1CMyKbiN6YdEPbyMlLbqFvZ+J60iPCdyRe7Ra88mJshCLAaTY4QQenndJ9v10lh277mrt/Zj28GE 4l5GI69uuuaYaoCepxTVgIpSnmaDUIYVcwYAeH7ji0dqhi1Ztio57rGdP0dGrNySe1j39MA5x5PL JyafuNyHk1pyXp0Gnu3bc/KWX5b0ycRbD/AhEBD4N0Mp6pMuQpNx+fqvPOSubaBwvxnLxOl0aMy5 hqpj+1GXEAdzQx2k9k5wHDACzsPGQe7gcM8mJDa2cB4xHvqyEtTFn7i18aYs7X9z9KXFMJQUQWJj C2VA+/91dwT+RP7y3UwxABNz17ZjKBDT7C68Xgv9Zupc3De5KdPKcQSIIa3bbXHs7cc9mC0KQghu LS+Pux8Tg1tfv2kTDAB6/fx7jvGW9ghiYihiWtq7W1sxN+edNv27ETtGaPN83Nl+a3PQss+gNAaE xDTbvb29G+c/UHu3vucEoE3plm+bz9Zobu82mw/Uj5tjvMf7e/u1cmP8Lcct8Pdl06afgnx9AxLb tw+UAQBDCOQKC4hbS1Ap8LswN9Tj6kdvQ5PeFI5IeR4W3gHwnv08ZPYO0BUVoOFyAuoSz8FUVQpQ CgufDnAdPRH23SIhukuMVmtUnjiKgrWfg9XUA4SAkcrQ9unFcOo/6M8a3h+GUoqSHZtQtH417LpH we/5xRBZ3OnuFHgwKKUw6PUws2ZQSlFfX4+GBjUuX7mCnJxcODk5okf37rCytkJxcVF9cVFJ8NSp U1tdpPkz+Mu/WWLuWcokpsVvpMXN64G0IN/KcbRJuLVml9zruAezRW7pY/OS9t2OiWmtzzcDnx8g Dr9FezF32rtbWzF3zPtNEdI8H3e239octOwzCGJaERg327tx/gO1d5f3POa+Aqa5vdtsPlA/bo7x Hu/v7deKEKwuIHA76vQU6HKvXn8eISAMA0NpAfLXfg5GJIaxtgasug6UNUNkYQm7Lr3gPGoSVP7t QFqPArgrSl9/SGztYVbXghARQAhE0vsl0Pnfwmo00GZnAQSwDgl/pIWuBf5+CI9uAgICAgJ/GJ7j UJ+cAM6ob/GgQ1kzdPnXWhRYlrt7wXnoY3DqNwgSa5vf1Z7U0akpfun6IxEjFkP0N093YKytQWN2 JqS2jrD0b/e7ajEK/HMQBJaAgICAwB+GbaiHviALlGXvSPZJGBFAeYgsrWAT1gPOQ8dA1aHjA2V0 vxtULAJlbnjqAbGNA8R/83IzxpICmKrLYBPWCzKnOwpUCPzLEASWgICAgMAfxtzQAFaruy0Z3/Xo CbEEFm3bwWXoGNh26QnJI8hVxfC0KZLyeoikxNbpb13Pj7IsNJnpAM9D1T4QEpXqf90lgT8ZQWAJ CAgICPxhxCoriFXWAM83eQMJA0ZhCbm7Fxx6DYB9zyjIHB0fXVJNeiNckgIMA+ugjpD8VTFNN7bI PARmjQaaaxkQ2zjAwredkFz0P4AgsAQEBAQE/jBSe3s4D30M4Cl4sxEWnm2hbBcMq5DOkLu4gfmz BAWlkNo4QNUhBORP3hHKGY1Qp6bA0rstpPZ3LWXbKsbyMhiKc6Fo4wML9zZ/Ug8F/k4IAktAQEBA 4A9DCIFDZG8o/fxBWRYyR0cwCou77v/meAq9kUODhkWVxohKjQ61ahPUuqZCHSKGwMdZiY6e1nC0 laLVHc08DxAGNuHdofRr96eN7Qa1F86h6th+eM969qEEFgWguXYVnE4Luas7pA6Of14nBf42CAJL QEBAQOCRQEQiKNzcW/0bzwNaA4vqBiPyynXILKtHQYUOFfVm1GsMMLIczCwFy1FQNCWgk0tE6N3R Hs+N9IeNpbSFPSpiILK2hW14T7gMf+xPz4iuLy1B5cGdkNo7QObs8lDn8nodGrOugIglsPTt8IeC +wX+OfxPnMDRrtbhdiLMBvDUzX8Oc5z9nupOaVP5mqq4tapnoyN7OdlYTbN0aje134z3IvcmlP4p DnZKV0uiu3r18BnyysBhK6nsz2jjvwqlJ8SD2zj2cfCfPnLBymu/e24ppUx0e9dwJ6+x4yMX7X6k 0aEFX4+w9XL1GGc9elUEAKyZ7hPg0jY4OmRRvMejbAcAZvo4+nfuOnmEY0yaUB9D4D9Bo45DWoEa v8SV4NPtV7FkQwqWbk/D1lNFOJdRg5xSNWo0JjTqORhZHjyloLRphavRwEJr4EFbyZ4oEknQJnom vOcuhKVPU3lUyvPgdDpQ9tGWq2UNBpQf2Q9DeQkc+g65o+zP/TDV1sJQWgSRhQUsPL0fad8E/r78 5StYlFLJGC/7qRKl05z2rvZZIoawoDxhRXaMhU+bTQAu0pXdrKa/vuzFixXSx5z8OzdaQs+Xxv+i erpQF7s6gX4xL4Lo7tvQw1BXZ2EymZ9UN+i8gezLAKoelemjP8T4nC+T+DqPnZ74VFCb2kdl9/dy fsdS+7NXTaGsb4+cVycOyfvz069raAAAIABJREFUW7STEUKfoiD+YgvTWdxWY/EhEPHgJ4CQx+Rm URIAze0HXD70ieXZK9ouVdYBVW/NeTyjRRHxe0CkcKcE7wNkP6U0ce007z6E4nVeLH4ewCPJ+nuj pqWYGrsppdIZEpXLFQCNN2tdCgj8e+B5HtUNZlzKrcWla/VILWxAeb0BJjMHcpurjxCAYa6XpyBN worSpizdDlYyRAU7wUYpvaMNwhAo/fxbvKYrLEDN2dNw6j8YcpdHlwahMf0Kan87BFW7jrAKDH7o 83VFhTBWVULu6gYLrzuLXgv8O3kggRW3e5Fqxc/Z1l7D5+pWzB5S98duCCdlDTKplThwxOng7kHP O5tzdRKWJTVQQO3iqSWEcB+O8O+deA0zjEG91vbo12m9TfFJ3njpwJwdOYeeXLVpYAqAfb+//Vaw NWjcvfzec2WtJPra4rr7n/DgpG35tndsvvfTkYHDnwHwPxdYeRtWeO3LcHqfG2D5FaU0/8+/uZsp QDgC/NFHyhuFxlizSNJqn0vWLbM9mmL7Zr73qONvzXk8C/esGnCLYZ6hoJQHpU3Z2RnwlFK+9efm h6d+3xO2C158aVjfqS9U1Z/ZZMtwOj7g3Ju+PSdM6z7x1XXFAM49inYEBP7XmFmKwkotzmXU4lRq BYqqddAZOfB8k8sPaIpHkksY2CilsLNSwNNRCl8XFRyVFjCaWWw9U4CcskY4WEsxJaoNegfZP9CG PbNGg5Idm0HNxodeYboXxtoalO3fBWo2wWnQSIgUioc6n7IsdHlZ4HSNsPAKEIo7/4e4r4vw1Pt9 2n68fMey1JQre/d//9W3g5bs7faHWszaLDcR3kbm6FLg8uzCoi+//LL0s2+/LVn37Wclu2Jm1dOE uZIyTV1UjZ13hfukT7f/uOS5os++3VYSPS5yg6uuzlgWd7o7pfSOj1vNym5WYd6OQ6NeXNP58xeG hgTaKaItrdye6DvlhS7XKJWdWDnFo29b21FWUssp7ftMGLz0dNmtUYbilMxMz9yaBh+NaxTJWNrV 3t/LfcSYpfsDl88fE+xnp5hoZes9edCzMZ1jKZUCQFpMkF0nT+eR3k981RnX+0NpjDg6wqWrVdjj Q5999lWX3jaiMZsu1wwsLi9s+8trsye4d5vYb2Yebf7kX/ltme20nl79HSytHncK6D122ieH7vto cyL2WZfRIa5DrSytnvAKHz1i7uqE5se0pzq6dnBT+E4euPjn5sqqPzzbpY2jte+k0H6LO03zVvZd fqp+fHZZaduUA5sHO/h2HTdqk9qhqe9UvOrlwe3DXG0eU1i5PR4evbjXJ4fKLQEgY2lX+w435mNh dLCfnSLayrbN5IFPvxd6Yz5uQGNjpG9Oi4poY62YpHQJmfD2F4nBUrFYzN9STYdSSmI/n+Y5wN9h pKWlwxT/vlMHPfdzRouIUUpjRSvmDw/2c1ROUNp5T5r17jcRMpmF7ObWbLSwN8/HImLR/vrH04or /bOTj/ey8wqeFPXRZQ8AoGkx0o9n9Q4LtFNEy+X2UzsMeHJgTGzRAyfMofSEeHK4czc7x7CJo1fF uQEATUiQxEztHeZtrZgkl9tO7TzyqajP8mirKanL0zIUV09s6Vgcf+z1TKp4OiPzQlhjatwn5xJz 5qSeyXBp7XoWEPgnwfNATmkjNh4vwFsbUvH9kRxkFmugNTRX1AIhgKeDJfqHuOCpoT54c1IH/N+T wXg9OhCT+3giqpM9KCiq1GZ4OSnxzAg/jO7uAYXs/usAlONQffIQNGmJsOveBxIb20czLrMZVUd+ RUPyedhFDoSqfdBD22B1WugKckB5DpY+fiBESM/wX+G+V+7ZU+ljT1+qfbLeyCtIbmmnastwzY8n aPKsfsTwexqs2BOvElFip6KaatefFwyb9dQspdQtvMI1IOJ8zNTuapyIlxo05jYisbx64CCVOu76 edoGcY0rY2woq8tzBSAHoL/VLiWMG0/ZmKv7v2N+cbEqdeoQZoHSAs/0M6eNs/uO2EO1Rb6cSwe3 dpY1ivL8K07fv/r67tfP0/eXdSM1qIcFCJ4DT93rgIsMMfmANSxP3rG6olxcZ3IJ6CSXlhW1ST1y qOGzJ5VvAjgETuwFgg9EIL/GAFdimh7MpITwMwglEWb7TvM7dg2PPJORF2hUN1rayWWR/iH+tU5K JAAwxC2JaLdg7jcv66U2wYGd3NSGukqnU+s/K/WZG7ssd83EONwGpZTseK5jxOIl+1+RWDq7h3SS 6ww1V533f/dxWuDC4x+mf9Y/LayDtdO5SvWSKycvxcWk0VeeLn6VvrRow2Ioffo7B4e80s4uxO9a elm3xvwySynhgwOC2ld52UuSaEJ4w+IRPpMPXRM9aePtz3c28RJN8j7VZx9jT8g6+jEpDGvLs/pl STu/rSoX1Rvd2nWWSUsLPdOOHmhYMdviLQAHAICeiBG/+8naJ7aniF8SOQSJg9zsSg5v3ciX15l8 TQ6k5Po4mNVTg/qtuaBfqLD2VHW2k7C6souOu1Z/ci78nYQPE9+NKKSUMqsmeA3/KRFLTJYBtu3d 7AqvHtnOVZbp3PQWTW/+bRCfsNB2mTk1vbKy8qzFSrNvgL9/lH9bq9Qth6bVzY7+asFlxnmkU4cI jRVrFmvLL9p/t+rd+MiPLn1wZnFY6f2u2U8nPjsktUCxVOXe/rK1s208pWnShREDp59UWz5l5xvC e1A1W5t62v7zqTOODVxd+unReW6Ft57ffnFSKaU05pvXZg5as3H/Co1ZKuc7jrnw4pw5n74y2KtA cBEK/JOpVZtwOKkcR5IqkF2madrYd6OkOgGkEhE6eKrQw98eIW1t4eVkCZVlyyBvjY7F/osV2H62 AO3dlZjery1CfKwgEj3Ys4c6Iw3lB3ZB7ukDq05hj2xsmsx0VB77FRaebeHYb8hDr14BgKmhAbri QoiVyqZYMeFx6j/DPQUWpZR5JczKieeppOl3lhhqax01ilopgN8lsDJy6ixFMFnnnd8xdGW8PpQD lTCiI0qTTZ8Lk1YmvF2tn1JpNFBLRkJMng43C+rKbCx4mcKsF5NGRSIgxe0Ci2MoKE/qjQ4ig0vg ig7+tjk9Ujd5nLmU+XniFf0Cv+4DPnVwUy3pLc5hq9JOPfVLfvK0nZuOHcV1dyOloDwI12SLUMqZ xXUNJkuXrj0/9rDlUwfmbwo4kJz2WWFBl6nhpfQ3rAmitKlgcYubIyWEB8/zZyz7V6QdmvLOsgGu lavNHvP6PrNs6XujA864ORIdTVhsPX7m+ucz9B3DvTp2emloqG266dTqNnHZFz9OT7ZfMO0MzVof SSpvtVu0Zbbr10fqXs9FN6vOYe0W9O9kVazb9X/BR3JOf1SW5j53bil9/RlXxBVEOazelH34hZ0r N46Vl23BmWrVEJs+k1Z+8MUTR8LxxDHP6R2vrmyw/5LpMX7djnVL1toB2p/nyyJ/vSJ+rcqp76+R I7xXeTdkm4uO75i479ru+UiOvAJnSQHPseL6eqOlS5ceH7vZ0ZS+Dpv8jySlfVaQEzZ1Sjw9s7E7 UZ88ur/zliT21Sqr3ind+4Z86GNTWyO6tLXHcanx/XKAMSiU9PzKCb4/x6nfKrToXdG3u/cr4W6o qf/1m94Hi468W5/uPy2a0uW5K/v6/HxRv6hQHNkY3CtiQQcPXZH80vbAi3Lth8UcvSMFNCGEp5Ru 7/Ta0NRPa2t/KvbtfeKro6uXhQI1Fz7KCy4U2YZVuI+LHT+xx+aobjbcrmfGDvs17/S7xoygcwDW 33GRck1FnpUyMbNygt/gNce1yxtcIi8Nmf/8m99PDCp+/ZOIjmeqTPNKvCelD+ri8PYw2SXToYPn Rp3LTnux5tctZwEU3m4yd9tERfzBxFGN9j3PPxmcd/Vkatzg/XGRnq8O8f4L4uAEBB49LMfjUk4t tsWVIjmnFjojBxFz0w2oUogR7GWDwZ1dEeKngr1KBua2gs6UArnlGmw+VYjMYh0GhTljTFc3ONs+ uJAxlJehdOcmGCvL4Dz0MUgf0eqVqaYKlYd2gVU3wGXkRCh9/e9/Umv9KyqAua4KMic3yBydH0nf BP4Z3FNgEUL4ddP8TjqVk8f01YYAiY1HhVfnkF+Du9n97iBzy+BR1U6lOT90sQnTtGtjedxNF8/n Xs6MPpQc99rpLc759csXf86vfYFAdKcviAGllOGJptVnACMYkZxzCut3xnLrq2fXEcJSurJ6Rs8P 4i5U+to3ek/YdfnbfrnHAPywsN+xQzlVM6qvZrrdrZ9SicJsFzHmQPyGeUcIIZTWLGi8ELUpKUOj 9dNsgfyeNdsZoMHA84QQ/Ue9lDoR48iZxJYNbm5uOgDYuHRDh+Ia4wCXnt0OzX28TyVXWWzjPidG V/71hxeTCirH//bjAR8ALQTWnp93dytpkIa3mzD0m2l9rLX6er1N5NMxVenLl6deLS7tHb/igjP5 tFteTuzcdZnv7gu5uHfZW6uphBpd+517YcbMjRGEmAFg/QiVRsTYsmYq1toBGmCN+Mq5K+NqmPZk zFMz43pIM2VqFy/ZYBdZ2qnP92hyL14eQB9TrZdK5Ga7LqMPnt/47GFCCKVVizSXBvxwKV2ra3f2 WKUCgDruZEa/Ruomi3jqhTX7X+2WAgCUxh4a6vXc6BJQH09PT5z67viAMoONT7fpEzaN9FFzOk5s 3WPeK4UJH67KLcjJ72/eha/27kvp1mBQerabPn3xb58+duE3AJTS6kkdXI7n6MmY1pQ9IcS4J9pZ LWYYlqUifSjQQAjhY2OjU597aeDcM8fPtvtq4ad9P+RlymBHeOl1pRKGNXnHUMrgu9EtjYkAyhpE rimrhnx/vLZ3reuIK6PfWfLGtxPbNa3CcTLKADwxVFs08p6Ovs/8kvtij30beheUJkjsvatm7b4z cF1dYrYtg3e93+SFa991WpH53NpySUJGgYcQ5C7wT6RRx+FwUhm2nC5EWW3TJ1LEEFAAMqkIwV5W GB7mgW4dbKCykLQaQ2VmKeIzarH7QjEUYgbPj/RFqJ8NJOIHd6GxGjXKdm+BOuUiLLx8YBMa8UgW iCjHoerUUdTGn4KqYxgcekX9rszrlGWhzkgFp9VA6R8IkYXlI+idwD+F+7oIA1949XhU9VfP/HK2 KMAmeGjJjLFjTvYj5HcHLHd97utyAF8Ch3Ds+mvXYrr9oCvJiDremNd1c+UMJ4mIGnnCMDW3Cqk6 gOMYMXgJ64qbK1u3w4gYPgrASQCACzURkUkkkxrFVnbm5oM4g1kGypvvkVqYg5jKlJbG5pufnSfH Q2RmzZxUxTU+8O5LyjSNgTJs81jSck126nqdY/m5zcM+uhwbDnBgAGKqL3XWMk5yu9ryO6IgM7JZ F63aaFez77Mp7x/mRwKACGamsabWQ2+p0VsbyxQA4DtxTcOaOT3XZG87NzDLIpL0GjJk9UtDrZuD 64lITACQ5vDvfKmooMjcRqsrcD/02dwlJ6jJBDAQcY2yyjpdW9a6JsMksxVzEFOpwvLmDkAHR54H Y2ZZTio1G0WUUjLdXeXBmd11XdtZ5x1uPrAdxfVgc0c7kLM5RjddQ639pQ1LnrkqMk8HGIh5k7i+ WuNptG8o8rfRyjOyWRejyR3etuKs87e+JxT8vaJdGUnz9dJ8UKjSxfKld79/vkTiOcgjuEexvbq6 EqYaJ5Op1kLGkzu3JgFgRFJqri+xjTuwbYaOZaT2Pp32LIgOqPr2+t8DF7+ZHbx3/kcSTcKcrEOp Xz6++9syKBzSOg1//MDbzw0ub00whS7clU8pfQeAmZAonlL6MQCjIK4E/llQVNaZsC2uFPsTi6HW mVt8JB2sZBjd1QODwhzhbm9xz+B0o5FDfSOL4eGu6OxjA1uVpDkQ/kHgDAZUHDmAqhMHwciVcB4y Dgr3R5NZRZORgoqDuyCysoPT8PGQ2j1c1vYbsDodGrNSQUQiWHq3hUgmZAH6L3FfoRARMc8M4DiA 43XHv8bi41//oQZnju1sk6DrqeKf+qoifSIxAYBfX4XJ7pikjG/ggqt1UqKwpHWc0dTmai6ab4Aa hhU36CVKs8pB0+4ht/pTAFT0kIWjcA8VB4Ayrd0YrSi5NZobQGv7CAjHUrHEzmzhFLCpJPfEQb1a f6NvHGw5A1VI828/R0w4XiJ10oncAr7OTtyTBHOziGAhJXpWbMoDmty67wxrF6jhFHKZvgrVeSWB lNJz90pZIBJJIFV4ZsudrGKyzpyoud5pComFGVpRtVhT8kDr2hYKkYlhOYoW3yFmCnJzTiQEVCxz rbVw8/00+8y+HDSJIQqAhZ258eMoy+pX5MQsFnE8Wi4TUoLb5/auNB93Yu32QRk1kmmSvmM+GzI8 fOvS6QMaLr3SodOC7Y0dqnm+VYHNgAPLKcRSr16HRiiTdHGXN0yaNdcymVK6ixBC1yQ68Ut3xh/e /f6MC1/sv+zZ2bdtcE119bjz2zaNfjybewN32eVKCDHe8vOjTTUiIPAXUFCpxfoTRTiVUgWDkW0W UJQC3s4WmBbljb4hTpBJ77/aY6EQYWiEE8Ri8rBl/UBZFtVxp1C2dys4ox4u/UfAvmefR1Lfz1hd hZJfNsBUWwm3sVNh+wdiugzlpTCWF0FkaQ2pi8dD1y8U+Gfzl29nkFc3jFJnp+7Byc1db7yWmGVn W1iM9lLGsmTotA4VCmvrJNQ1+CV+vb259gFbndKxWCy3lrbrnEFIkzD7X0FNhLi62xgoiLGhut7+ 5Mnr87jpmNys1zu0VAE8KHhCRLLmuY4Mty1WWRuKidLf5b1tuhQ0bdM/t3ju3KuvLRrb+N2GKXfc fLuGWuUoLPUNIofu9idMNOHGOQsWzMpf/N5o9ZAV0UYA+GVeUJcDSZoXLUMn7hjjqd9WeeaX+WGv Hmve+ckCoJQnRHr9m8i7wBTgL70skbJKu7CXTQDOAzhHKT3/zPwZdYu3vVkvMht4MHf/ZrAAQAih ESGKFMKUWOw7cK1T8x+L98k5QpUsgNQs8J2DVRkyud4s8RyloJSevz6O+Pnznyx94/0nGgghbGQ3 q6siaanpUkp515s77LZJqIi3MlJK7rUBm1KeEIYR4foqVmV5Y1sjUTKefcZkLJsxsIYQwp4r1dnV 63iV6C6rRyzHEYWja6Xz8Fd+/mBGu9eDREVZRcc2vz7w/b0RAIDNH3WbP2fOhyfaz3dIzSk9u/vI mdUT23CvezdmK0Wa3EhKhWS1Av8+Sqr0WH0wF0culcFgaimuPBwUmDvEFwNCnR9IXAFNua8kkt8h rihF7aWLKP1lHUw1FVB1CIXzsLEPlf6A8jw4vQ6Ub/ncaVarUbprGxpSkmDVMQJOg0b8oVUnfVEh OJ0OMgdnyIX4q/8cf3mi0WEBqgvp+Tm1Wb+uerP/5Ge3tkOO6aVPz/TN0bi2sY/o991wQqrWzQ45 dS6zaErWvi8X95u4wMvVlMl/duTC5BqbyPJB4wYd2rrrrubv+KgS2pS/rpVDCShPWhzXdCwIT5vP uTVGhgIEBMTBXEVUoyNLvZdnpBelxPbXfZiwYMqUyRV93zvbpbDM2J/3ZXJvhGg6O1nWmDPqFPE/ ff3485+uFdmNfzJhuPeqrMP9P9lYmHZo/hcLhy8bO+vZc84V8fLjh44PFHcaXuUJvAugRT6uJ+aM vHi4cP/O/fGbZzwVflH++Jynr8ivnbY9vTd+qIPG9+K8ufi08qsou9lfXX4+17anvsvkt1e+1HCF K/o+LSTj5E8vT/ml5sWN4+2LfdxtNEhWawsS4kbNfYMrdh/8UvyQAUe3niov6JMa+967EUNmtQ/z 0FWM7eTpn23yiurkn/YxJJL61iabUhCAEl7ctAIX1S/0eGxG0viEvV+8MG7mG/Kevkz51Mk/9cms 1UUanUieXFdIxs0efPxwyfGTp459s7BDrxNOM+fOvma6ctL11P5LQ7ylXfZQSr/DoacubEja99uJ 39Y/1X9SpmnFx+/lzB7wTujlcs0wvfLuua38PGwMYnlFbUVuWt9Jz73z2Jtndafb/RyRpMys4JK/ mv/igKEj/E2VuTZfn64dXqym7q6UyGIAMgsAmKax3BgXwwC8XM61X3CkdN3c7h9+vifry8uxW96Y vLnqOZdTfbUl58u75mZp/fqPm7U9wJmo9x3c1atM6gm5vV8GgP/pA4CAwKOmTm3G5lOlOJtWA0pb fqGqLKSIjvRCj0CHB97190fQ5lxD2Y4NMJQWQGrnCPfxU6Hw8Lz/ibfQmHMNNXHHYd+9N1QdOgIA TDotKg7tQ9WxvZBYWcNl+HjIH7Ikzq1QAI3ZGeAMOsidnSG1fTTB9wL/HP5ygTV67eWsyzN6vmKX pZ6THb9vbj4nElm6BJe36dH7zaHL5+5N2TYP075/LD1/zrnF8uTKZ7LPH3jmGpHxdl4Dr/r5Dv9m y3Sfa1tn3GmXZ6QsgEqANKQ1u4jqKCGkgQLlPEuaY7Aoz5gIUAaCxqaTwQO0hiEQS+rBA8REgAqA aG7GyGgpQGoBVDASSonjx5oNc3t8xiSWkOSUquklOfaGDkF9khzp6YMNDLExm1gOAMIG9Dwemp+8 KyHlUP8Lbi7q7uORSsjz9VVrI78X766rjM/LfSL+UHqkXGZptvGKuGxh57nRAVDfPj4yaE3D1U/D P1Ec0RclFKWPPbY3cZiVlb3ByjvkrEjpuCMa4BdtLxqcVOwQ6Dx06P8deKZtFpCIYXHtvyqKP7vo 8qZvB1NKf8bJWVkhuRfXViRenPvbGcXk7lGy7N4xcZkbFoS+sDupcfaV7N+e2HPZLLN38a2x8O24 S6fwSEAd6wnaNB83e2RFAVIHkAozK+UAwP/5A8Ub5ocvkSVVP592Ysv8zERntV+73ume+UfP6kUg BlMtdZmyvvLsm53esjlrmp5YmjTk4B79BCs7V43SJ+i4SGpz6Lors/bQK10/ZBI1C9IS9s76+opK 5x8YntXGTh+n4Ygnb2Ja9d62++j9isDcpd9di8t8JeEspol6PZn/wfMTf0ss3f3OyfTU2ZlJ4gUi t+CSTr2777YpSLlaI7fVR6dDJAJnBkU5CNMAABRESynKCJpSkUxbfe5iZa33sq/OnF109Mfvp3xy KO3LIRVhLyVWVMzKSro2L9tMGHungCqPDoPeM4aM2C3EVQn8m2A5iiPJ5Th6pQQcT+9YcQpwVyIq 2B7iBxBXZpZHo94MS7kEUsnDO1D0JcUoif0JjVmpEFko4TIyGjadQh9qFUybn4fCDWuhSb0I7bV0 uI59HCKpFBUnj6D+4m9NLseR0bDp/MfSPbBqNfTFuSAiMeRtfCFSCAHu/zX+coF1/eaTtHLBsIXJ 6w8o8qk1CYkabxr689v6mOtxQoTE8JTSuLqJPROSspNk9fBGj3GTjLErog13u3k51Z7NU0gdplZS wm4jTekWCJlnnhnl/YUlx32dnZ/R7HYrcpAkE5NhiBXljZUAYBej0ancFmstCHN1EbQB2/xSqb7o MdZsvhkYj3f0Uuma9ywaGVGqua0WAKauOZfy48yoZy7nnJSXGMUYFDHb4NFYjDyzTFIg9dICQKdn dlb+ODNq0W8JyfK8KoM53hs6AHCcfUZDaczm6UO+2XUmpUIKm87Ub+R0ffKq4cZTP73S6ty1eyWx OjY2+puamJM/JZRXSSstHLnAqBH6wzETTeTLeYju4bGtUe2wpwd1bhaGsdHRO0jN0cO1pgIzAJ70 +8mQsHrumqQL2zbklWqotkHaNJZVSemxMdGvJ36xTVFeZyVifQeY53dZpY2ZRfidsdEaqigcb+J4 8835n6uXSN9936JRLEqHt/ZGH6esSkjNfrffgrjPk+X1DTycw4cYupET5JrIUvT5zM5azAJ6fni5 5ERM1CdZm1O/vFJeLTEpg1i3XtN0u2L6NW+eGPLphbz9K4e9/uzbBxT51JM4BocZ2rFxtFTGSY7a ndGiFQiZyMXGRu84m1J8ML1Aw5Rl5WnJEzEsjYnZOlHz1d74k3qJo73SvGfzD7pZs2ZJr9pak22B MMemWeYoTMbHeJmJJYTQ2OjAHUaJYb+8uikVCCGEp7HRu79NPna02mTkPQDD2zuTzv0YE5X07ucp 8sJ6a6L072K+tPE9Pbl+7QkI/FvILW/E3oulaNSbW40UCHKzhZVlq/tFmtEbOVwr0eBsRi0MZhbR kW3g7vhwOaVMtTUo3voTai+eASiFTUQvOA0cDiJ+8NuYsaYGxVt+hvpKPMDzUKdfRmNOJggh4IwG gOdgHdYLToNHgZHee0z3bau8HKaaajByC8hdPUBEQoLR/xpCxJ2AgMB/gk2bfgry9Q1IbN8+UAYA DCGQKywgfogb9H8NSoGdZ0qxcl8WeL517/zwcDcsGO0HS8Wd86jVs0jOacDZjGok5dXC3kqOaVFt ER5g3Zwz60FgDQYUb12Piv3bwOu1sPQLhM9zix4qNxVvNKJo6zqU7dkEyppx++2P8jwUrm3Q9pmX YdO5ywPbvRtVJ48i95uPIbGygf8r70HVrv0ftinQEkopDHo9zKwZlFLU19ejoUGNy1euICcnF05O jujRvTusrK1QXFxUX1xUEjx16tRHUl/2QRC+WQQEBAQEWsXIcsitVIPj7p4hJS6jEjZKMSI7OMPJ VgKjmaKixoi8Kg0uZtchq0gDA8tiYGcnTO7tCQ9Hy4dy6XEmEyoO7EXloZ3g9VrInN3gHj0dSh+/ hxpLXXIiqo7/Ct5kunO3IaUQK63hOuZxWHcMfSi7d8NQXgROq4bSrz1kzkKA+38RQWAJCAgICLQK QwjkUgYUFOQuDo8GHYutvxVhf2IF5DIxOI6HVm+GieXAU4IAd0tMjPRHZJA9FDJRqzbuBs9yqD59 DGW7NoBtrIfYQgXHwWNh26XHQ6U80BYWoGzXZphqq1o9jUjlcOw/Eg59BjyUy/FucHo9jJUVACOG hV8QxCqrP2xT4J+HILD796SrAAAgAElEQVQEBAQEBFpFKmbQ1c8eR5MqUaM2tS5OAHA8RX2jEWg0 4saWa2dbGfoFu2JwmCN8XVV46BRVlEKdcglluzbBVFsFkdwCDv1HwmXIKDAPIYI4gwGVh/dCk5EM kcISUlsHGCqKm/yflIKIRLDr1gduYyY8VKqHe7eph7m+DmKlEjYhncGIHk5YCvw7EASWgICAgMBd CfGxwYRId2w9XYx6nblJlLSitJqKswJKuQgRvg4Y0cUFnX1toJD/PnHRmH0Nxds3Ql+cDyKWwLZ7 P7g/9jgkVg+3GqRJT0VN3DEwEimcB4+GTdfeqDiwEw3J8QAI7LpHwSN6KmSOTr+rn61BGAaMwgI2 od2hCujwyOwK/LMQBJaAgICAwF2RS0UYH9kG3g7WOJhUitSCBtRqjS3qKlAKyKQMfF2tMCzcCVHB zrC2bL0G4YOgKy5C4aa10KQnAYTAqmNokwhycHgoO6baGpQf3AlzXRWsQ3vCZcR4yF1cIXd2gSa9 F8QWFlC273hX0UYpwHEUIhEeqoyPSKVCm6lPQSSV/2H3oNlM0WhkYTCzkEtEUCkkD5QSQ+B/jyCw BAQEBATuiUImRq9gO9ipJPj2YA5qG024obAIAfxcVegd5Ih+IY7wcn6wIHaOp1A3cuApha1KDOb6 rkJDTQ2Kt2+E+soFgDPD0rcDPJ+YAwtPr7vaYjkKlqVgGNzMr0WB+ksXoE5NgszZHa6jJ0Hu4goA kDs5Q+5098BznqMorTUgpaAe1Q0sBnRyhJvDvWpItIRhRLBwdb/ZP5aHzsCjQceiVquHWmeGycwB IGjrrEJbl5ZzRimFWsvhSn49UvLUKK7VokFnhLWlDIOCXdEr2B4SsSCy/u4IAktAQEBA4J6YWQ4p uRpsP1uIjOJ68JQHIQSO1jJEBTljcJgT2rooH6hMDstRFFZocTq9Eil5mqYyO0N9YKkQg9VqULJ3 O0rP/YY8awmqpOGQOveCZ60SURoz7FQ3C5RSCqi1JiTnqHGloBZVahYuNjKM6e4Odwc5DFUVqDpx GLxBB/uh42DdMfgBxsmjpMqAk6kVuJhdD53RjN4dnKGQMuB52iwCH2zOeFTVGXC5sB7ZpY0oqNCj VmOCxtAkriRiEXzdlZgUKQOlTQKL4ymq602Iz6jFbxmVyCrRoNHAQiETw8FKCks5B57wQn6lfwiC wBIQEBAQuCt1GjMOJ5XhlzPFKKszgFLARilFmJ89xnRzRkdP2wcSVpQCFXVGHLxUiiPJVSir0YLj gQ6enpDLRGBNJqSfTcSeLDUu285Ag5UcLJGD1kshPZgPjZ7D9AFtQQhBncaMhKt1OJhUhvSiBuiN HMwcD2cbOSL8beHuIEPdxXPQ5mVC2T4ETgOH3zNxqMnMo6BCi1Mp1TiVVgmtkUVnXzuM7uqNNnaW SMnXQC4WIbyd9X3LAVEKFFXpcORSOY5drkCVxgizmcLIcpBLRfCwt0CYrx16BDigg5cKjtZSgFAU VulxLrMap1KqkFXcCIYBOnjaoHegPUK8beBkK4VExEAmEQkuwn8IgsASEBAQELgDSimulmiw5WQx zl2tgtbAQiYRIczXDkPCnNGjvX2ryUVbg+cpLmbVYttvJUjOr4XRxAOgCGhjjUGdXaEzsjgYn4d9 J0zIN4eBWt1w81FQygNmApan4DmK1MJ6/BJXigvXqqE1cABp2slICGCrlMPVxgLm2lpUHd8PRiqH y4jxULi63WWMQEGFFseSK3H6/9m77/A4qnvh498zM7uzVV1a9WJLsiz3DhiDbboJEIpJgxBCyg03 5CYh5U27cfqbhJQ3PSS5yU0IEJMQgym2wWAbbNwrcpPVe91dbS8z5/1jbdnGpuTGoVzm8zx+Hms0 Z+bMzGr3t7/Tmgbp98eZU5vPFXN8zKzOoXskym/XtnKgO8jtl9a8anA1Fkmz8cAwj27v4mh3KLNw qsw0W86vKWDRtHxm1uRQVeTGpmWucXA0yZYjgzyxq5/mnjDSNJlalcPls4u5cEoBed5/bkZ5yxvH CrAsFovFchrTlOw+NsJv17XxYvsYQhEUZbt45/wyLp9TiC/P+Zo7sI9F0jyxs5eHt3TROxLPNLMJ sKkaV8zyoQj45ePNrN83RDilIZAgzdOW5XE7NCrzvNy/sYcndvXQPRRBCHFaHeyayqJp+ZQU6AS2 bCXe00He+YvJmT77jDmzTCkZ9CdZt6ePDfsH6RqO0lCexbsWVbGgIQ+7Bo9u7+Hx7f10D0e5dJaP +fWvvFhzz3CE+zd0Za4jnkQRAkVAlS+LG88v5bzJ+RTl6ONViSdMnj84zGPbejnUHSSSSCMQFOY4 WTa7lPmTcrCpEImnxzvYKwJUVaCpitVM+BZgBVgWi8ViGWcYkg37B/n90210DEZACGp8bj5yRS0L JuVhs722j3bTlBzrCbPyuV42HRwgmkiN92ESwMyaHFw2O99+6AiHOgOkTbApJr5cF6YJQ2MJTFNm slOKwsNbuzjaG8bjVFnQkE9LX5jhYGZuLgnUlrlZMrUIxUgxum0jttx8ii6/Fs3rPa1eI6EkWw+N 8PjOPg51Bcn16Lxv8QSunltEQbaD9oEI965tYfvRUeJJg5JcJ9fMLcfrtJ1xjSe0D4T5xWPH2N48 imFIFCHQVMHCxnxuv3Qi1T73afOASQnbDwf4/dPtdI+EMU0QIrODP5zkV+ta+O3TmQDSNE0cug2H rpHjUigrcDKzKpf5DXlkuV6+TpY3nhVgWSwWiwXINAtuenGQ365rpXskhgQKsx188NKJLJyS/9qz VuE0G18cZtXWTvyRJIKTc2dJwGlXEarJfz/bQt9oHCEEucoIS8oFV7xjNi8cDvDAc50YxwOsYDhB MJxgcmUu71tcjmnADx85PH4+TVW4sLGQ8iIXkebDRDtayTtvMZ7a+vF9YgmT3cdGeXRHD7uPBTEM ybzafG5aWMacujxUVXC0K8yv1hxj97FRDBNURXBBQwGTq15+AtKe4Qi/frKFbUdHkTIznYOUMHti Hv92VS1lBa4zyggBdeUu3ru4jOGxJLGkJHV8qXsBKMenDkunJaOBOM19YVp7g5gSdjX7eXJHP8sv LOf2S2rQ/8HZ8S2vHyvAslgsFgsA+9r8/P7pNrqHYwgBNk1h2Vzfaw6upISO/jAPv9DDsweGmVuX zcL8Ah7d3ks0cbK/VDJtsq8lSCJlogkTn9rLlTmj3HjZpQzpGjuOjZJImZwYtCcEzKnN447LJjKx 1M0vH2/GH0plsldSUpBlZ2Z1DqqA8NGDCM1OweLLUWw2pITekRiP7ejj6T0D9I5G8bo0ls0p4z0X VVCcrwMwEkxw/8Z2drf4MWXmnA5dY3pVHg7b2YOYSMzgb8/3svXwaKbM8XuQ47Vx9YKSswZXJ5Tk O7g6v4xMyCk4dS3tE9ku05TEEyaHu0L85qljNHWMARBPGmw5NMJls4uZWHxuZp+3nHtWgGWxWCwW Bv1JHni2m9a+CIoikEBRrptLZ5S8pjmXxiJJXjjo5/7nugjHU1w1z8c75pTw9y29jIZOX2bHNCUJ UyIUkwpjH1fbjnDp4tsxSuu47/FmDnePjQdXioB59fn8+7JaqkvcbD/sZ/Oh0fHjmRIml2VT5fNi hEJEWo5SsGgp7vIKook0u48GWbm5k6bOIMmUidelccN5Fdy8qIKc49M+SCl5du8wzx8cxjTl8W2Q 5dQozrdztg5PqZRk3e4B1uwZIG2Y4xk6U0ry3Tr1xa91gtHj/avOMhBTUQQup8qsuhxmtGRzqCuU aTYVmSBrLJJ6jeewvBGsAMtisVje5lJpk7W7e9nd5j9txnKvU6U4T3/Vsoe6Q6ze2stzTYMU5Ti4 49IaLppawNYjwzx3aPB409np5RRhMj11hEXp7Sy65D1kTZ/NX7YMsGHfEPL4LPGKIlhQn2lqqy5x E46mWbe3n6FgDMjkfhx2lUnlXrKcKjKpUbT0SvTSCtqHkqzf18eGphE6B8KYUqIqgqtml/GuiyrJ 9pz8+BsOJll/oJ9Eyhyv54kgJhRLn3HNY5E0z+4f5M8b2wjFkqfdMwGYJqTPLJa5XykTRRGvOiLx VKY0CUbSSHky+Mv3OPFlvXyGzPLGe1MGWFIiltXV2gezl5q7dt37D4foUiLq6mrt2Us/a+6696P/ 60J8uQLlsy2XO/Fd4G6qnB988hPLEm90nSwWy1tX52CUNXsGiCeM0wIhw5TEkibOs/TzMU3JwGiC dXsHWLe3j6FgivNqi1i+qITGqmw6B2L8dUsvA/7E6bOUI9CMNLNGX+Tq1CYmXX4lvosv49BQnDW7 e0kbmQyNEDBnYi4funwiNSVuADqGoxzqGsMwM5ktZGbtw0qfA6GAcDihdhrr9g+w/egADl1iGMZ4 1qcg285Vc3zjwVXaMEkkTfa3Begejp5xjWPRFE/u7MNp0/Dl2kkZJkf6xthx2M/+jjGGgskzkltC CIZDCfa0jlKUW4TNpmCYklAkzd4OP4c6xphXV8D8SXmveQHszv44R7rCx/ukCQqynVwxpwRfnjWF w5vZawqwdn4E23dbl5c8zZyg/+n/EzzbPv93+Zzsnx20F1bcsbLnhU9XxP6ZSoV/Nb1QetWvx3z5 e6SUvxVCGP/QAXZ9JD/LfPibibD/0Eopf3bzP1r+FUi5QvnDqouzQlMXxz5RJxJy5XL1ll8cKdmX tSR14JEfDwoh5Ksf5Z85/0r1R+/6zLJnX9h7V5c2IHOuWfD/gCfOzbGl+OkHLyr4yUPPFR2TPqVx yQeCN9/9f3tXLBEv810s4+EvXJ//yZ8+XjzqqZMf+s7Pen98+5LAaznf7xfn5Hy3uaroqh/9sutH N1/wT71mLBbL/4xhSp49MEDvcPSMLFPvSJRNBwe4clYJDnsmyIonDUbGEuxqDvLkrh6O9IQpzLZz x6VVXDarhLwsG+FYmoe3dnGka+yM4EoXMRYmn2dxcDdVi5dQdM3NGHYXzze10jsSO96vCmpKsrht 6QTqyk72MTrSPcaAPzYe1EgyAY2mCOIpg6aOMZ7Y1cegP8Wy2SUMjUV47sXh8X29To3BQIJ4ymQo kORwXwDDkAwG48SSxln7mT1/aJD97QFsmsAwJTabwuSKLK6aVcKfN7YRT53+8SIEhOMp/vBMG9uO DePWVUxT0h9I4Q8naKjIIj9LQ1EyndgD4QSJtElxrvOMrJaUko7BGH/a0EVLfxhNVSjNc/HuRdVc MafwH8qCWV5/rynAqix15yt96teUmHMV8MjZ9klo5qWklM8oNvUuYOc/UyklndCQzgopRBdnbf1+ FbpTFVCOkMP/TD3O5rnfj+Svf+Tez3bMkOuBtdiGvDaH/cs2jW7ge0DyXJ/zVLv+4/+UPdWk3dWd t3jkjg/d+DPPvNnHvvSTf/64Uv7advdVky7b1aN/1FXeWNFopISta2v4oW/e+eDH9sv7fzld+M9W 7skvL5z0o6fbvpBVMXVSkU7yuT/9ft/77uv+3p9vKe9+5fNJ5a5ZWR8Jxkb/feO2oU8BD//zV2Gx WP5R/rEUu1sC45mjEwQQiaX5/do2jnWFqShwI4E+f5QjvWMc7Q5jUxXOn1zIjQtLmFGdg6oqmCZs 2D/Is/tP9E3KHE8icCpxFsae5+L+bfhmzqPkplux5+Yy4E9wsHOMZNpEVQTZbo3lF5YwdYL3tE+A QCRNIn2yngKIJtKs3zPIhheHONIdobE8i09eW4nLofLNv3QRjqXH59Rq64/y7b8dIW0YqALm1xey bF4RTR1BthwcOd7d/HRpQzI0Fke3KUwuz+aaBaWc31CAP5Tgyd3d9IycPTAbCSV4vinTuJDjsTOt KocbLyhlQX0+poRth4bZ3xriYHeQSDLNuxdVUlfqRVMUIqkkoUiKQ50hNjQN0dofpSBL58IpRVwx q5BJ5VlWcPUW8IoJytDK5YUf/8I3rv2z+65G06bjy0rn/uprd1/2/u8/Of2MnYVUhJB2aWReah+Z M8cGy9UVi9EAB43L7Uh52itCSsTyRuyAs7FxuV2e8nsBpjjeEr8ClMbG5XZWrBiv74rFi7U5c+bY TpRZsQLlqlp0aLQT1FUFIcWJBusTZVYs1qrBQe1VunxJXZYvR60GB1Q7li9fedYhI8tBfXHHi3lt u3YsObTv0LTFixdr6M6Y4vTc53TYHwPSEkRj43L7ihUrlNpadMCxeMUK7bRz1Nbqp14LgFyxQqkF /ZXOL6UUj+wM+iJGUb6SO/VxfeTQti+d5xs49Z5w/PpWSHnyXq3I3L/ly1eqtaDPmfORMyZP+cF1 Pz5/4wHtG82pmq7S86799NUXTf74RHn0b8aRLXc+83+++34p5RllpJRiw7pjN+4fLGmouOTDX1q+ oPibWsuO+ft2HFh8tvqfqu+7U8oPxasucrrc9D23edlaKd2vVsZisZx73aNR+kbjSM5MvgsB/nCK VVt7+MljR/npY0d56PlumjpCFOe6+dBlE/n0dbXMnpiHqmbecjqHIqx6oZdAOHVK4CEodCe52lzP Rb3bya+qo+K9d+AszcywHkuniSYziXLTlCyoL+CixqLTJhsFcNoVVCXTkfzEu3ssYfLUvgE6BqK8 Z1EV/7ZsIhNLPfjDKToGj/fVkhJTZsolkykay7O465p6/uPaWhZMymdmTR6+XBdIxveTx6/fYVeY X5fPx6+u54vvauSKOcVkezRKCxzcdEEFvlwd5ZRJT4UARQhsqsCXo3PVvGI+e0MDd19fzyUzfLid Kk/uGuAHq5q5b1Mbu1tHOdod4udPNPOtvxzkW385yLdXHuK7fzvMH55pxzBNbl5UzhdunsyHr6ih serVl+uxvDm8YgarLVXgHdy9Zsljew/PD4aMhrRj47xvH6jpqHnHgt8C+89WJq1qUl6L992dsXvq p4uRVu8FysTKrjmx9GC89MO//uUOKdcIIcydv/6I7SvvPnCF3+F/d7EvUSzcwaGr7vzhA4ulfMJ1 b+Opf+lG4/LchdrW4U/NO1LwnzugScrl6hev2n9nX/+E2vvhq10/XB7/3lNH39OXHr2puiEn9b5f jRwNJ0WRIpTxga+/eP+i6es3xD6oVdfW1zuDiWV3fPWvn9knV90zQ0RWf3Np2coXwh/wVPZeMBGb 2hNft2v5T9f+9qG7rmg79dqmXFBzyW8f3nF3c8CsT2767ofa51/vfTBY/9tAx6+uGfAmuoH9q95p m5F1tPsLG3dm7a3Omz45Wdhf3fP0gRc/evfnH9TaNs321g9cWh5XnMW7/Wsu/Lv/Nz++Pjew8s55 xR/dvv5W16RJi6oNpzaUWr/lI386+Lt7b23sO/X8676xdP6DxxLfGAwfrk32dX325y3nLfj1Uy1f /uhlE4PfvvXCBVvbQrfVlZZO0LyhyIb3fmXd4hV7/rJhxazAzCb7lDXR5q919f6l3dk4b2KqQH+2 Tcpf1QgRB5Arz3fe/sOe9wzkzu696Et//vaD73H3rgFk04odH/rgf+U+1bXlhgt+MfQ4cOylzzuV xqV4fIGrPnjLAfGz31dpmiPpstkjr/K644cPD89J5F1sv2Bu3g8P79h03bd/cLQR2PFq5SwWy7k1 PBYjkTIQr9BYoCjHv+4KyHHZWDS1gOvPr6Ta5zpthGHaMFmzu49j/aHxkYhImFTh4bq8ToqeasKe l0/FrR/GU1s3Xi7XpTPRl8OhzjB5Ho2l0wvJcp85ieYFDYXsawtxoH0EKcFhU6kocnPpjCIWTMqn MPvkTOn5WXZm1GTT1J5ppvQ4bTRWelnYUMjUmixy3PbxPlDTa7L592V1rNnTS9dQFMMwKch2UF/u Zk5NHnXlXrJdttMCG7tN5drzy5g5MZe97aP0jMQIx9K4HSoe3UZ9aQ7VxU7ys+249ZMftQLB4ukF NJR5GIuk6QtGGQjGCIZT4wtK52W5Kcl2U1/moTBXJ8dtx669xg5bljeNVwywpr33l203NS/+SlHC d/ejBxM1trqLWyZdduNn3Y2RFn708uWCHjQz2T1xMCgWd9Se/9/Lr2v8r73rn3jnrk3rv3jbj+r2 AT3btmxb8sgL0f/Up1287rarKh7qfPa/L3hxY+iL2gfcEa51HUSebNeWgiwE9UJqzhPbBLJYQFUO 6L9fu+2adbv1z+gz37Hqummeff0v/O08fzBWnSd08yDIjd+4qO6bv+v+TmvevMFLll/ze7lvZdXu LY98vD1SY0i5YtW/L7r/4093l5y37Pr3/6ZubIvy8JpHP7wn4ila/qz81ENLRPjEOed/8rt7qvb9 /Wc//N228si8j6z94qcv+9M1fV9LPqQoE4Wa6XslNM2VCh6b3dnhcV+85OaHJlU949qy5ekPPdbb eklVfePaxcsu+PPY7lVTNuzZfPt6zwPtcmTF2lsX//dnd8Sqp9Zd8t4H6+O7jV0vPHbr+nBJ1rNt 8j+X1GSCIIB5H//t4TuO3f6HhzZHymm8+v5PvWvqE2WXToisvHPmzHse77nHX3ze0Stve+e9ounR ivU7Hrk95CdvpZTfU292OY1U69QjPTkFF1x05YMXzKnc1g7j/aoeeqIve3jUPT3lrXvygXe7+h58 z/F7PGVF8u65Rc/nRkM3dT6/oZKXBFhCCPnAhxrXbtq4adHvPn3bd3Kj9ryBqqXrP7G0cv32e17+ 9SF/3ui55X7XFV349t1zfcXfftSyZ+HG1fctkVLuEkKYL1/SYrGca3ZVQ32VSa5MKfE4NGZNyGPZ 3BLm1ufh1M/8wA+EUmw8MIJhZL4ja6pgdm0Oty4oxP7wX4lip2z5B8ieNuu0ctlujXcvKsflUMhy qMyYkHfWelT5nHz+xnoOdPpJGSbFWW6qfU5cDvW0kXwAvhwHn79xMp39cYSA4jwb2V4bmnpmvTVN sHBqHgsackilDUwJNlVB0xRU5eXvjd2mUFvmYWKpG1MyPlpSwPis9Wfjy9Hx5WRGZ0qZjynl+PQQ J5YAOjUrZnlresUASwjkyjtDM3cOl86fe8PSr428sHpp19H2y3/y1Tt/9dArlJN2JEqudJde9MR3 /vaLH10gRGzVB0rDn3u242tJJV0um1YO3XHTJ28aLnzn0e//8effuyVfjAV+MW3TZ9bmBYOFMguq VGg9eTwTKSQv7UloSinM+IFm14GjqRsCNddtvnfdT75znRAh+eelW+d/ZWxa2EyqXwW+sqrpylbX RXnLPnzblyfL9vbZM650R3/y8PRnDq+9dM+RD26KRf8wQcmZ2Fl04xee+vwiz/Cx6bWHng+FqzY/ sOu0D/tlN988tP6eG/bn2bSxfldZ64eWzDl2x3835KM4JObx/HoqhbBVRCtnXHvvAz+561G5AuU/ h3yl93ZlX1F2y09/89Nb8g7I1e8ou+juXbNGzZGGn3/skYFjydKLs867/kefv2XCE62t1Up59HDu 97atf9ffmz9VATSfOH9e3sTgT5YUNXmdDeEjRsmxW265+YB8nxR3Pdt5Q7/nstQlX7hnxU/fWdYl pVQ+PidXPDNwZPmXvtb5lx+rMVOx1cUmXnDtL9b88dMPrvkj8B8fHr+uwUGhR6OK06wsC7y0k36u SEecMokyNnDW2eyqGqf0la55VDz5nP+D5Rfe9ruP/uY7P75rwtfCk596Kru0tDQ2ZcqUM/qk/Xab MqEvpDTY5135/fNufEf3JxY2PlOTPHbJsocpBV6x75bFYjm3yvM8uHQNf/j06QZONME5dZUp5Tks nl7EwsZ88rNtZwQzJ0k4HmS4HXYun+Hj5sVluNtfpKW7jdzzl5A7fyHiLMPnqkuc3PWOCZiSV2wC y/XauGhK0Wu6tiy3xtSJr20iTkFmYlXb/yBTJITgf9pqJwSoQrxiIGd5a3rVTu6FddO6p8man33y 419Yv0HftHt/Xa1zI7xilkEkEYgsSUwfPh/iAJ78vLgUaZk2VXsg2eNqDlChTZm585Z8MQaQc+cB /+rV3/7x8NR3mNHH7j3715ezsAe7vcMJR66omL35OiFCAEytj0n2R5XM1Lj2XX1GnT+yvfZPX3zu h4owTUVIoUhZ5G2Uu5+0X2Y0lor7mvY+/sn7PrT3v7dOm3XYNvfWZyrzJ6xdd8/cM8ftnrzKs/41 pEgjhMcMD4czU+5+Fek6kDem9dgCixbn+h8CmFUVT8sXopowPE0j9sre3iNV/ie/c9d1TyRuB4Su mF7pdaW7B6M5Lz2+qkmBRCiKefz861xHg9pEMXVa6+/3lvZlaibMXyx2vLi9e/SDocObinXVlhLC a6TH5NjZ6uyyKaaqSlPGome8HhRVEyiaYar2M0Zi7vvGRTWf/9WOr/eVXte5rLL9O829By66/+t/ njvb/puRb+7f/6nU1GU/BvacWkZKxNevjFx2aNTtnKo8b6+66qrz4uGD6fRI+4TOv/56FlaAZbG8 rsoK7SyeXsDfX+ghnsx8U7SpArdDY0Kxh8umlzJ3Ug5FOfqrTiuQ49V538VVvNg1yqyafC5oLMDj ELQ9tBmHr4Sy627GlvXyE3AKRWAt/GL53+JVA6wln/pDu5Sy43hmY4eUT4rXNhWB5Hin9sxsJemT n89mQjUVpGmmk6f9Lb3jHe+QgIwSBZy8lFDM8fMKoUgAQ1VNXRNp1aaenEpA0U8LfjRFkfl1Fx+8 8cbzvpWlxo/PGWUzsyrrh4pq8C9fvW7d/F98e++aVvecvS9smHd084Yv2adef9Gta+XX/nSFeNX+ RGe9+lO+jkgDISWcnIcg8wYjBYqSNoS3qGFo2pU3/HJpvWxOJAzVNBXpzssP22cVH3v1oXX1hiaM hDTS6pwSxK7jW+MJVTNlJqQ9sac6HpSdrmGCI5LTmhi0xdqrpJQOIU42S/rtWrlftRv2qslDLy33 X395cWk75zdqc25+/6qPP9P64fc9Lp/e/Oev/L+8gt1jqqPa9DScEaD2P3R7waamRy4DxXlw7f0f Q0KzMISMNnv1UG6JRdMAACAASURBVO9V16yW61dfI14hsLVYLOeSbldZfmEleV47zT0xTAllBTam V+VRX+Yhy217zU1VmipYNt/H5XMKsWkqQkBiZBhF1ym/6VYcJaX/2ouxWN5EXlMu9NSA6lzM85S3 YFp0eolyVLRsnfzFpwd8AE3fm1d889JLP3vlv/3kSlfplPF6CSGkritJqQYV1aPmSynFwV/gHOgL VqCYQpbUhyrzjA55ZGPjI1J6AQaf3eExpcgyM1+30vOr7UeNQJ9nc2LK2Bc/97nnvvDZz23OKcju 6096Unlfem/uTXPu+ModT82d/J0f/GzVE5sPfOXynNHVie7uS1offzr/bPWXiiIQZw9WXtFLZnpK Gcg5E7ydXjEWa+pOOio+8eltX/zc556bUcnhfllu3Nn40hJnEqImPrtSHBLdO+sr07trAaRc4dgf cy4Y8+aPymnX9iTiqVd8Zuf/8KvBouzE047RQxdfcOdDC6SUQkopNv3ohpIjI46bIk7fi8vuXNTy 0nImSEV3JW0uV1pM+UX4W5+b8dP5np0dzx0c+2hQKdh3+Y8XnpGNeuKhZy7scM3Ivvpj37j7wYcf /tAf/v7whx5d/cTtn77U933a904Th9fXvto1WyyWc6sgW+emhZV88rpaPntDHbdfOoF5k3LJ9rz2 4OoERRHYbep4Oc3lpuTqG8iaNvPcV9xieRM7dzO5C0WRKDZ5YlytQJNCjmeoZCa5rAlMRYhL03/8 +MI/b3vs+Xue+s5d3739I3fu+8LDz8w5Fssq8drL1xHtMCTCJhCqlFLp+93Vx1zb9nf0PP/QF99/ +67Z0Z7+sr0dscuNArFHqS6OTZ3ifXD7lhdWfHvZx776ybs/t+dzq58+r3c4PqXQZtt4M8jP3zR3 9caf7by4ZeW3vnftez/29MdubFK3tv5pfnryex/4xt3e1Q881ZEnjt735ffe8oFZH77t3eYuo+Ay UVm2O2v+pWdMmOlU1FCeCI649v/1hnfd82R3d966bRhPq/J4ZltREUhpwzwZgAmkClLTxofpjAGK ItOGev0P/2vfs5cufGRo/8qP/uS69rpP3HZd/z333De/Jz/SOuf6S78JhE89v5FZXF7DPJmsX3RJ 4183/XnfokO/W/H993zwro0fuPLx0i2RCQtF47x7W76c35W6kVIENinP3sgvxM3Gli8t/UvrQ8em v7jqWz9Y1LZqc60rGNy/eetF/fq07Nm3feDOn08WIy8td8tNjc/vemDfNYkDD3/6zrvuXvOjTX16 KK37pOFPmEag7Ngf2guB8QyglD/3vLPu68uomNcZrHvPC4vmnhxA0Pvn9677ywsvvK9lb8uVUsoX rc7uFsvrS1UFHte5X9xDdTpRnWe2SFgs/9uds3GfwpSdINfYDGM0rpJEig1CKk1kJtDFUOlHslYR YhDg1p8+v+uO5VM/XTCyo+fxv62acZS6jkXv+fCnt/30xq2EknGE3CiQTQAldzze+dH3LPy6L928 e82jjzV0aTV9s+bN/oGqsjEEsbvum7x++VLfV1Iv/l2//76HLk6WzDo0oSjr1zaMpikg537ysc7/ uPPyT11cEVi1f+1fJjyyc6S0cNai+y64ftZqMffe4Ic/ctnXLqlJPrBzzd/rVq/b1pAz9eK/3/ju 5V978hZxRp+l8z+10n/Jhb7vewY3NW/bsKHihdh0A5TNQop9AEaaYYRcoyra4IkyEnEIxIaEg0zT l+5OmsgXwNz/kZzq0Ac/+M4fLj/f+52xPavcDzy2c0q0ZO62Re887+fLCzmjedLQVL9ErkMRXSe2 XfHNTW0fu23hJ2Zld21cv+pvUzb2eMWUK2796hUf/eyfAFT0USFYI6XS+3LP74JvPdPzubsXfuaG ubZfDux5yvPwxoNVYdVhmkKV/qPPl3zmj/vOmKdqwYrnj372jlmfqTe2HX3wT3+86ld/37XYX3/T 49+4bc77c3s3dXVu3dBw6nxjHT/+L++g9PQ5K4rvX7mc05oBSyZ9urfBGftrYN8OYwNY6z9YLBaL 5X9EURRM00RVj48u/Zeur/LyrGELlpe17ydXld/1q4P/YVQtKT3/k7/88j1XONtevZTF8uZ0//1/ mDJxYv2uhoZGHTLD4B1OF5r2plyS1WKxvAopJfFYjFQ6hZSSQCBAKBRmaHiYzo5OfMU+ykpLcbmc dPd0B7q7eqbdcsstr9tAKuudxfKyZnziye47ly/+WrQspyAxwdH36iUsFovFYnnjCARFhYXk5eai qgpCvHETtFoBluUV/eKhDWHYEObHP36jq2KxWCwWyyuSSATiTZGZtubet1gsFovFYjnHrADLYrFY LBaL5RyzAiyLxWKxWCyWc8wKsCwWi8VisVjOMSvAslgsFovFYjnHrADLYrFYLBaL5RyzAiyLxWKx WCyWc8wKsCwWi8VisVjOMSvAslgsFovFYjnHrADLYrFYLBaL5RyzAiyLxfL2JeVr2i5N8+X3/Rcy DEnaOHneE1WQEiSZfy/93XhZM1PWNF//er+VyXQ687xP2yjP3PYK0obEOMt9P9tL6NRtL/3/m+bZ SYk0jDe6Fm85b/xiPRaLxfIGMIFQSzOuwiJkOkWsuxNvw1QSgwNoXi96QSHSNBGKQvhYM5rTibOi cnwbHA+8FAVxynElnPbz2fZL+kcxUyn0Qh9CgJQmAgEis4dpSjr743QPJlAUmFjuQhXQ3Bthdn02 g6MpVCGJJUzKinQURdDSHaOh2o0QMDSaoKk9il0TFOXamVjuBMTxc2XqcPxUSCkR4mSNT/1ZypP7 nUEeD/FeZjHds92bE9uFyFzrqf8f/51y5vFeuv2Mn89yz88m1tuDlp2Dze0+6+/jA/2MNR3AO7kR Z0kZ8f4+FKcLTJN4Xw/umgmoTtfLXmPakLR1RxnwJ1EVhck1LmKJNH2jSRqrPAwHUiAglTIp9zkJ RdKMRdKUFur4x5KMBtP48u3kZdsJhFLEEwbFBTonnt0/6uXu51n3BXjJayE+PIQQoLm9RNpa8dTW odhsr+14p7w+zqi6lEgBRixGcnQUR0kpiqJkXnvwCi+6txYrwLJYLG9LQlGI9/WS7u9HsWsMPLUG 1eUlsG83efMWEOvrI+UfwVlRRayrAz0vDyOVItbdhbO8AsWuE2o+jJaVjad6AtHuLtLhEIrDgSIB m43sKVOJdrQT7enCnl9Adn0DwmYjeGAvocOH8F12FVJRCB87irOwCO+UaSiqysBIgo27gsxt9KDr CqmUwUAwzdrtI+iKSjhmoiqC3qEEbpeGboNtB0JMqnYjgM6+BK2dcc6fmYVuE7R1xxgKpABwOVQS KZPGCS5CEZOO/jgep0JdhYvugQSD/hSFuRpSwnAgTXGBjaoS52n3Lh0O4d+7C0W14a6fRGJggFTA j9Bs5M6cRWJ4mHDrMRSHg5wp01CdTmQ6Tbj5CPHBQdw1E5CmSaStBXuhD0dJCZHWVtKhIKrLA4aB XlCAo7iE0LGjGJEwtoIivHX1hA42kRgaxD2xFtWhE+3oxDRSeGrrsXmzCB1qIh2J4J3UQCoUJjHQ h2Kz4Z5YR/8Tq3BW1pB33oXYs7Iwk0nGDjaRCvhxV9cwuvMFEsNDeGbNQUrJ8HPPAgL3hFrGDu4n 1tWJo7IKd90kIseaSQz04SgpwzuxFqGqtHTF2NccYXqdG9OEdFrS1hfnyW3D6ItV+kaSmFISipgU 5uoM+lN09MVxOlQOtsUYDaZJG5CXbSeZMgmG08QTJkOBNJoKk2vcDPmT5GbZMAxJImmSMk3smkos YZDlUsnNtiMlRFqaCbcdw1FShrO0nHDLMWQ8hrO8AmdpGaGjR0iODOOqrkGoKpGebuweL2Y6jREO 4a6ZgH/nCyRGhilcciXpcIhYTzexgX5Ip3HXTMCel09g/15kOo29oBBvbR1CUUgFgwSaDqDabDjK KzBjMVwVlUQ62lHtOtGuDhS3G0VVGFz3OMVX34CWlUW49Rg2pwv3hFoiHe0YkTDCrmeOn52Ft34S QnttAd6bgRVgWSyWtyUhJd7aOobWPo6jtBJHSQWRlmakkSYZCBDYuR17bh7x/n5UpwOMNImjR/FM rAVFIbB7B8JuJ97RRqK7i8TwEK7qCYRe3I+7to5Ybw+q3c7o1s3YsrKJtrZg93hxVVWjaBqKrmMm E/h378RVVs7ojq3Yi3w4i0sIhAwcukJ9lYvDbVGSCTAl1Pq8tPUksNsEedm2k9koTmQMjv8sIBQx 6OpL4Cuw0d6TwOVQGBxNkZ9jI5YwyXKpOHSF0bE0R9pTjEUMeoeS1FU4EQL2NUdw6QplRfYz7p1/ 1w6MSJhU2iAZGCUxMICjrIJYVzt6fj7+XTtASoxoBFXTyJk5m9jgAKM7t5IzYy5mMklg7y4cxSUE 9+4i2pFLvLcXZ0UlY3ufJe+8ixjdtpns6bMI7NyOd3IjY/v3YEYjhA414SirwL99K6quk45Gsefn Ez7chOp0EzywB3tuPoM9nQhFQXV7M1kcKUGA5nKjapmPvlhPF/7dL+CdNI2hTc+g2DQcRT50jxch BEJTEaoNVdcxkymEzUZgzy6EqjK65Tn0/AJG29uxe704SkrpG0pQVmCnvMhOU0sMp11BV1Uq8900 d8UwDPB4lPGm3RNNvZFomkTCJMejjv9uLGrQPZQkljCxKQJFhbaeKD2DSeqr3QTDacbCKcqLdNZu GaEoz8aimdlAJgAe3bENR2kpoaYDJPp6CbceI3v6LEa3b8Xb2MjIpvU4ymuIPvcsmisTALvPW0S0 u4tIeyvRrg40pwObx4uiCGLdnSSGBkiO+tGyszGiYfQCH/HeHlSHk3hPN56qaoSuE2ltIdz0It5p 0zFTKfzbt2Am4oSPHEb1eom2t5E7ex6KEAhVRdV1RjZtQGg2wv5hUuEQoUNNeCdNJrh1I3kXLCZ4 YC9adg6usvJ/zRvCv4DVB8tisbw9SYktv4D4QA/xvi6yp88g3HwImycLIxLBSCSw5eSiFxUhhEI6 HAYp8dTVo+fmYsSieKonoBcWkhgeQHN78NTUYM/NwzOhFpvbQ2Kwn1Q4hOJy4SguQdF1AFSXB72w GMXlRqZSeOomoTpdpIN+AHSbIJE0SSZNDEOy82CYVFriy9coLrCx7WCQtGkiBETjBpG4iaqebFYR AkqLdGY1eCnJ17HbBOU+B6VFdkoK7BTk2BgNpWnpjoOUpNMmPUMJFEVQU+agvEinvtLBWMSgqSWK TCUxE/Hx+5YcGcFVWYOjuBgjFEZoGtlTpmLPySUVDIxnsxwlpWjHm+NS0QgIBU/9JFSXCzOZyToJ RcUYC+EsK8czqQG7r4TceechpYEZT6B5PLiralBUlUR/H7asbLIaJmOmkqTCYZylpbhrJmJE4yQG +zDCY+iFPvSCIhTdibeuHoevmFQwiC07H4evGNWVaeYzYlFUpxtPbT1GIo7icqP7SlCPN4Np7mwc vhJUtweHrxhvfQOqXSc1PExydBjFruMsKUZxODLPTVcIhDNZqMHRBAfbI6QNycQyB6oqaBuIYtcy TWHRhEk4ZiDIZApLCnWEECSTZubZp0xSaRO7JqgudVKUZycQNjBMSTJlEo4apA2J160SCKUxDInb qQJknpU0yJo0GcVuIzk8iOrQ8dbWYiZipEaGSQz1Y8vKxlleBULBVT0BzeMhfPQQmsdLYqAP1eNF 95WgeTOZLSEUPBMn4qmuwUylSYwMYc/JRS8sPPFHBYCjtBRneQVjTQfgeFN4/5OPohcV4Z08FXte PqPbt2AaJnpRCbacHOJD/UgzjausAtXhwJ6bR/bUaahZOWTPmotit5OOhDFisbdMfzD1ja6AxWKx vB5uvPGdRXl5+R8tKCjUAIQQ2O06RiiE5tTJnjWPSPNBcmbNw1NdTWp0FGHTcJaUoug6emERppEm 2t6KYtNBVYh2tGNEY3gbJqPoOo7iEsxUCmdJKeloFFdVdSZ7Ypo4fMU4SstQ7HZkOp3JjDkyfaMi ba0odhvZ02ai6g5sGoyMGXQPxAnHTbI9GtkeDUUIKnxOukajVBXreJ02jnXF6B9OUVms48uzY5oS fzBFx0Ai82GdMgFBjlfDMCUeZyaDYlMFsaRBLCFJpSUTyh0kUpLeoSSJlBzfLlSVQn+mOUkv8mWu R6iMHWoiFQzgnliLYrPjLC3DiMVxlpSgOpyYiTj2/AJcFZWoTheqohLv6yPW05W5biEItzSjaCqe 2kkouh09rwAjHsMzoZbEYD9adg7hw4cyQardTu7cBcR7e4h1tKN5s3BVVaF5PNiysjL3vawCM5VC dbnQC4tQbHb0/AJQVISqYMvOITkyjD03H9XhAEUl0ddHtKsTV1kF9rw8NE8mmAIw4zHigwMomoaq 6ziKfKTDIVxVNWAYKDYbelFxJni22bDbBB39CQZGU0RiJiUFdlwOBVVVmFjp5NhAmClVXuIJk+6B BP6xFKUFdroHE0yvdRMIG3T0JxgJpojGTZy6ikNX8bq1TLckCbpdoas/SSCUIi9LIxwzKcy1oWkC mybI8dpQVI34YD+RttZMcFhcQvhIE0Y0hr3Qh3dSA2YyhaJq6IWFKG439py8TKa1ox3V4UDzeHBV 1hDv70N1ujNfSLxZ2LxZaB4PEnBVVhPtbCfa3gKKQlbjNISqkgoEMGJRpJHGXT0BxaEztn83RZdc iTTSmLEYMhXDM7GedCiEAGx5BZixGPacHBxllUjTwFFaTjrgx1s3iZR/FM2bTXJoAM3tHv+ykk6n MY8PQIjH4ySTydP6kQFomsZYaCw+Nhb65cMPPzz2+rzjvLZ+gRaLxfKWd//9f5gycWL9roaGRh1A EQKH04lIppCGgeJ2kwoEsHncKHad5OgIyeFh7AUFqE4XQlORqRTx/j5sObmoLjfxvt7MB3xuHjKV RLHZMZNJFN2OEY+jOpwY8Tjxvh40jxe9sAihqkjTJOX3g6qg6DqJvj7s+fnYsnMA6OiL0d6boH84 iSmhOD+TUTFMicOuEI6a2DSwaQoDo0kAfHn28SxWMmkyHEyRPp7VcDsUVFVgmKBm4j2EyHTKHh1L 43YqeJwayZTJcCCF161iGBBLmFSWOKiR3eQUeHGVVwCZztOx3h4EoPuKMRNxVIdjvBmNE7/XVBzF peMdo1PBIInBfnRfMUKzkejrxZaXj+Z2ZwIjux0jEUfzeElHwsQHBxjbtwdPbT3Oiips2dmZ5zI6 iu4rRnXoSCPTkdtMJVGdLlL+UVJjY9jz8lBsdoRNGx8FKFQt80GdlXU8uIVUwE8yEMBRUjrecf/E 72Q6RXLUj2K3oeg6it2OEYtlAshkkvjgAKrTiV5QiIlCa3eU9r4Ew4EUqiIoyjv1uamMRdI4dRXD lAz7U+h2hWyPynAgRUmBTixhMDqWRkrwOBUcuooQmWeWOQ5oimBgNIluF7idKqYpcTlU4kmTglwb 02o9qIrAiEaJ9/ViLywiMTiAf9cO8ubNx15UjM3jIekfJTk0hC03F9XrRVFUFJuN+EA/MpXKvMad ThIjw6gOx3jfJ6EoCE3FNAyMtMHQuieJtreSt+B88s+/EKEopCMREkODaC4XalY2g0+vBUWh5Mqr MaIREkNDaF4v9rx80qEQZiqJ5s0i0d8Hx19T0jQzzeiRCJrXixGNgKohjz9noWlIKYnHYqTSKaSU BAIBQqHwGQGWw6HT3dMd6O7qmXbLLbd0n9t3lpdnBVgWi+Vt4ewBlgtNe/N1RY0fbyJSTowqHO9f JcZHemW2nDriT56ct0FkMnSZvlmM73smgSJO7CNP+3n8OIDDDpqqvO6ju8xUinQshs3jec2j4d4o UkI8YZAy5FmeG5kBdUIcv8+Z19+J+y6EQJqZIZuKOHk8edZnljkOpzzuE8M9barAoStnPKZ0PI6Z TGLPyjqHVwymYZAKBo53Qs9G0R1n7CNNk9jwEHaPF83lOstR/ufe7AHWm++dxWKxWN7mHHYFh/3N HVC8HjLNbm+NUWNCgNOh4nz1XV93msMBjjODn3+WoqroefmvuI9QFFxFvnN+7rcC6y/YYrFYLBaL 5RyzAiyLxWKxWCyWc8wKsCwWi8VisVjOMSvAslgsFovFYjnHrADLYrG8Lb38yDqLxWL551mjCC0W y9uSaRqsWbOGQ4cOoygK+QX5XHftdeTm5r7RVTvurMtGn2Wb5U3HekwWrAyWxWJ5GxJCYBgma55c w6OrV7N23TqeeGINgUDgnz522pAcbI3w/J4gm3YH2d8cJpE8ubSHKSEYThNLmC97jGgsTXtv/LRt yZRJU0uEZOrly70ZRSIRWlpaSCaT//SxxsbGOHDgAKlU6lX3DQaDHDlyhHQ6fcbv+vv7OdrcjPEP LrmSSqXo7+/HNF8+83n06FF6e3v+oeO+HoaGhmhqOoiVtX39WBksi8XytiSlpLKqCpfbzdat20g4 4wRCSXqHkqTTBnabIJGU+PLtgGRoNIXNrlKQYyMSNRgOJMn2qNg0ldGxFDkeldxsOwKJ16nQ1pum bzDB0gW5BEJp8rMhHMt8uG3eG6Agx86MOhf+UJr48fOkUib+sTSKAsmUJJYwGPancOgKul2hqSVK VakT+1tjaigARkZG2LhxI9dffz12u53R0RF6e3vJzs7B5/PR29tDIpGgvLycWDzO0OAQum5HSojF YhQUFODz+RBC4Pf7eeaZZ0gk4pSWluHz+RgcHGR0dJTS0lLsdjudnR3ouoOsrCxSqSTxeJzu7m4Q UFNdja476O7poauri+ysLIQQeL1eOjs7URSFosJCEskk+fn5+P2jCKEwNDSEqqpomsrKlSu5+eZ3 4XDoBMeCeN1eDMNgbGyM8opyDh46iK/Ih6KquJwuDNOgr68PjzeLstJSVFXBNA26u7sJBoNUVFSS iMfp6++jpKQUt9tNX18f8UScbG824UiYwsJCPB4PPb09JOIJPG4PkWiE/Px8CgoK6O3tIRKJUFZW TiptMDw0QCqVpqamBiEEHR0dNDc3EwgEqKwop6e3F13XqaioeFNOtPu/hXVnLRbL25aqqni9XrK8 HlRFZeOuIJVVIUYDCbI8GpomKC3UKS+ys+NgmEF/ioXTvRzrjpPl1vAV2DjcNkbakMxucJPttaGq ChUlTgJhg1jMoKpY56ltAWZPcrPrUIjyYgejY2lSBjh1wYstUXK8GofaoxiGJBgymFjhYCSQxm4X 7DoYwj9mMG+KJ1Ppt1gCwjAMYvE4UkI4HOKPf/wTkWgEwzC48ooraG1tY+++fcyZPYt4IkFnZxcz Z8xg85YtTKipQSK56aabyM3JRUqTjvZ2srOz2bp1G8uuvppDhw6yY/sOCgoLmTihho0bN7Fk6VIq ysvZu3cfR48epa+vn8bGRgryC9B1B6Zp0tLSQiAQYOaMGTQ3N9N08CDpdJopjY34/X4uv/xytmzZ gsfjYfv27VywcCHlZaV0dXYxMDDAnj17iESjNE6ezNGjR/B4PKi7NKSE7q5uWlpbWTB/AY88uopk IkkoHOLOf/sYFZWVNDcfY/Xq1Uye3IBpStauXUtJSQmbnnuOqqoqdu7cRfHx4LGsrBTd4aCxsZG/ /e1haqqr6ejooKqqGlVVWHbVVWzbtp1t27Yxffp0XG4Xhw8fITcnh56eHkBwtPkokXAYb5aXDRs3 sHvPXi5cuJCioiIrwPoXspoILRbL25aUEI3FGBwaYiwUQgiY1eCmrMjOzElupkxwMRZO0zuUpCjf hl0TDAfTJNOS82dk0VjjpqHaSbZHZXA0s/bfSWJ8yRLDlJhSkjYkqiIoK9KZVOXClIKCHDsXTM9i YCSJYcL0eg+VxQ5MKRkaTeN1aXhdKv4x4/VeqeacEKcsCTMyMorf76e+rp5pU6cxNDSEoipUVVYy ODiEaUqWLF5MXV0dtRMncvXVV2Oz2QmFwuPHKysv59prr8XhcNDX28vw0BCNUxoZGhyguLiYadOm 0d3dTTgcJplM0tbWzsKFC1myZAkFBQWZOiE4cvgwwWCQxsYptLQco7SkhNmzZlEzYQI+n4/Vq1fj druYO3cOM2fNZHh4CJvNRv2keqZPn47b4+GSpUsRQjBhwgSWXnIJqVSK4eFh9uzdQ15eHgWFRfR0 99A4pZEZ02cgFBWAzq4uKququOqqZfiKi5BSct1116EIhYDfz+SGBpYtW0ZpaSkXX7wYIRQi4Qh1 tbVce+21lJWVceklS9F1ne6eXqKxKI2NjfT09mIaBnPnzOGyyy6jt7ePUX+AaVMaWbx4MQ7dQW1t 5t4ODA4SDofP+sws58YbEmBJKZVmKfXBwWc98tC/58t9lxeNNN+VJaV8C759WCyWtypVVcjPz2fG zFk0NEzG4dBJpyWKklnHL22AaUp6hpL0DCaJxA10e2a9uKe3+dl1OEQwnCYUNejoSxCJGSSSJomk SdrI9JVKpiU2m+D5PSGaesZIGgbITD+tVMqgeyDOk1tGKcy14dQVTFOO97PqHcos+DwWSZNIZrZJ +dZKYamqyvDwEA8++CB79u453vTmx+l0YrPZ6evtIxaPodk0XC4XDqcTTdPwZmWhqipOpxPl+DqE qqoxNjbGqkdWYZom+fn5tLa1MRYcQ1U1DEOiahrt7e2k0yncbjeNjZPZvHkza9etY3h4GACb3cZF F11Msa+YzZufZ+rUacRiMQzTwFdUxMwZMzl06CCTJjUgJShCoaenh1QqjVBUtm3fhqZp6LrO5MkN tLe3s3btWjxuNzU1NVx5xZWMDA/T0d5KY+NkhoeGcbpcZGdnA/+fvfcOk+M6z3x/p0J3dQ7T0z15 MBGDSAQmAAQYZYkUJSrYsuWVbMuWLK8c1t713utwfe3d9bWvH1+v7661XktraxUs2RattWWtKZEU cwAIEnkwg8HMYHLome6ezqnC2T96ABLEkARFMWiF93kmVZ06daq6puqt73u/90B/Xx/zc3P84ze/ yUpyFY/HOfgDnAAAIABJREFU4P7770fTddrbO/D7/Wiahj8QQNd1PB4Dt9tNMBhEUzUCgQCaruP1 erBsk/m5eaq16npbL571c2gYBm2tCYbPjvDkU08BYNkWUkoWFhYolkpvz0XxQ4I3jdBIKZWRVbxx cSIYKDwZUPLPhER1xCfMdMwytnQIxdsmKLcqVrpLcQpBW0uct1zb/8zY+d+eFkL8YN1BruEaruEd j5dP9uw4Dn/5l3/F6dOn0V0ugsEQB971c7S1d1Cv27hcYn0CXwdFEazlLVRFEAtrVOsO6ayF12hM rFuuOoSDGiG/einKVK44OI7E71Mplh0yOQtNg2iwkUYqVRw8boVcsUHKWpt1LAs0rRH1qZsOQghS ayYet4LHUBAIdvT7aI663s5T+bpgWSbJ5STVWg2fz4fhdrGaSmMYBk1NTaysrOA4DpFIGE3TcLlc CKFQrVbwev2Uy2W8XgNN0zFNi3Q6RaFQIBQK0dTUxOLiIvV6jWAwiK67WVlJ4vf7aWqKUq/Vcbvd LC4t4TgOHR0duFwuarUqpmWjKgqVSgWfz8fCwgKOdGhJJDh16jSnTp3iU5/6JGbdZGFxEY/HIJFo oVgoYNnWOpnx4XLpLC8vUSwWaW1tBQSaplKr1VFVFSkly8vLGIabtrb2S8uSyST5fJ6WlhZs22J5 OUk8Hsfv82FaJm63h3K5hNfrpVqtoKk6lm3i9fooFouXlrtcbpIrSRzbvnQOVFWg6y4qlQqG4WZx cQmAcDiMoigsLy/h9weJJ+Joqvr2XiBvAO/0yZ6/LwRLSilSqWf8vuLpbVr+4UG1PNyCudwi1eZm FE8TOE3CKcWFXQgLOxuCjSNVtnvLQ2bi05/y9P3q7PdjXNdwDddwDRfxcoIlpeSRRx7h7PBZFEUh Eolwz/t+lEg0hpTvzEo9gbgkeL+GNweWZXLy5CkSiQSdnZ1v93Cu4VXwTidY35O6TUqpMvLnnorz UESqQzutkz9yqKlw9GaE3om0osiaXzgVFbvwuvpVnbWdav6bncDbRrBWz/1VIOCcOaTa+a22olel 4s/XZdMqTn7VZZ5cNZTtq+z84/K1KNs1XMMPNlRF4fY7foShnbcjJfi9Gu0JP5qmAG/srV5KSGfr rGRNPC5Ba8yN4b68z1TWRFcFoUAjorWwUiMS1PB5rtx33XTI5k3CQR2XrrCWN0nnTKQEVRUkIho+ 7zu3tDCdTjE7O4uu63R3byIQCLzuPur1OkvLizTH4ni93u9pHGNjY1QqFbZt24ZAMD4xTq1Wxe12 07OpZz09qXP99dd/T/1DIzI6OjqKlJKhoaENReRSSnK53KVU4PcL1WoN06x/T+f3Gr7/uOpPdkpK o2XmL1u1pb/qNo/9yHXI6j6jcvpm4TwQAwykpb7h8hZpaXVXX+tY/tGYkpwoDAwM1N5Yh69z92e/ 7qoW/9uvu0rP/IqQlldrHJDjRtoCx0HoFdtIf8e88Pn/m7eRBF7DNVzDG4cQguU1yVOnamzp8aDr GulsnWLFRtMUdFWhZjq0NrsxLcniShWfR6Ul5qZYtlhJ1wkFdHRNsJKpEQnqxKNuhGhop54+kaWr 1WBNgtul4PdINFWgKIK6aZMtmnjdClJKllI1Tk+UuWVXEMeRLKdqeI3GvpZTNRZTNZIZk/3XhYjq CsWyzdh0hfHZCruH/AQ8CiuZMghBa8xFpWYT8OoUyxYeQ6FUcUjn6jSFdKKhtza9uJZd42//9m9p bo5TLpc5c2aYW2+9Fa/Xi9/vJ5VK4ff7mZ6ZRqCwaVM3qVSKtbUMoWCI1rY2pIRkcplUahWfN7Bu zbBGd3cXtm3j8/lIp1JEolFqtRqRSARVVVlbW2N6eppQMITbcPPVv/5rbrzxRnZs30Eun+W/f/GL 3HTTjYRDIYKBIPlCgVq1SjQaZW1tjfaODgIBPxcuTGFZFv39/TiOw8TEBLrLTSIRZ2F+Hk13MdDf j6439F9f+MIX+MAHPsD8/DyZTIb2tna8Pi/T01O4XC5isWa++rWvsXfPHvp6+/B4PaiqSr1eR9d1 5uYXcOkafp+P5eUlok0xYrEY09PT2LZNf38/Ho8Hx3GYnZ1tjLW9nbHzY5w9O8IH7vsAiUQcIQRL y0nm5+YIhYK0traSz+VJZzIYhotNm3rIrmUJR8JkszkCAT8ejweAfL7A+MQEoWCA9vZ2FhYWqVYr NDfHWF5aRlVVOru6LunKruFKvCrBys2djbqK/2Onq/StIQ53XSeVwFbFXN4uqpnomzEYKR3VcgIh X8Vs1wKBvJRyXgjx2o5y3yeUtGNbvOUXPiGccvilyy8FG6UdVCvHP2Znvzktpfz3Qoh3Zh7hGq7h Gq4Ktr1e3Wc5SCTHxkpYlqRUsfF5VFRFkCtatMVcLKVMllJF9gz5mZir4jVUHGBiroqqNCJJsYgL VQjOTpbobjPY3udncbUGEoYni0SCLnwehamFCn6vSjYPmVxDdLy0WqdSdTg3nadclTiOJBGtkspZ WJYkW3zRMLOzxcDnUciXLG7YFmByvsr0YgXbhuV0nVLFZs9mPyfPl+jtMBibqVCt2dy8861/GI6c HUHVNO69915yuRxf/OIXCQT82LbD4ObNnD59moDfx+zcPLqmMTFxnumZGWJNzQgBg4ODFEsl8vk8 lmVSKlUYPjtMwO/n7NkzGB4vPq+XY8eOsWfPbkzT4n333ku9XuOJJ54gl8thWhaxWIxqtUos1oyi NooJioUC9VoNIQRj58/z/PPPE4s1kc83NF4Tk5McOnSQ6ZkZRkdHWV1NUq3WSSZX2Lx5M/Nzs4yM jnD93r3YPT3oukapVKRWq2FZNg9/97toqsro6Ch79uxmZnaW8fPjbN++nZVkkrW1NU6cPE4kEsXr 87G4sEAoFOSRRx7hrjvv4tvf/jaRSIRyuUxXVxfDZ4e57rrr6O7uxuPxYNs2S8vLnD51Cq/Xi8vl YmlpiXKlhBANY9ZHH/kutm2zuLjIu971Lp559hmikSjlcpl9N9cZOTfKwQMHeObZw+zatZOBgUEc x+HRRx8hn8uRy+fZs3cPjz36GNft2sWZM2eQUjIzO8v+ffu49dZb3/Jr6gcFGyby5fi4u37yxz8R mLnjfnfqP31RlEf+RKnN/YJaGTkk7FchV3L9CwGKCzQv6AEw4hDeAs03Qvtd0PNj0PeTYMQ26uRi GMy/urrqfqMH+HrgLp97r3BKiVdvJVXdnLyOkX+nXat6vIZr+EGHxONW6EgYRII6lg1bNnmIBFT6 Ogx62g1WMibTSzVMyyFbtFhYrZErNojNQKeX1ia9IXrPWTjrr1y203BsdxyH87NlhifLFEs21VpD 0J4vWlSqjW2KFZsbtwdpbXaRL1mcn6kgpcRwC6YWG5GxPVsCBHwqLy8gvPj3fLLGULenMd61OrmS jWk7ZAp1KjUHx4HNm3wk3hZxvEC8RO4rpaSpKUYymeSBf/5nmqJRRkZGya6tYXgMCoUihmFwxx23 09/Xz8mTJzly+Ah9vb0UCkXOj48xdeECbsPAcSQ+n5dHH30Ul8vFCy8cw3EcVE0jXyiSSqW4+eab aWttJZVaZWBwgN6+3nWNjsQwDAYHN9PV1Y3jOHR1dXHzzfvw+Xxcf/31lCtlZmZmWVpcRErJ8RMn GZ+Y4MabbmT//n20d3TidrkZOzdGbd2pvrm5maGhIRRFMDExjqqq2I7D+MQEhXyBdDrNykqSjo4O du7ciarp5PN5SsUia9k1qtUabW3tbNu+jbNnz146Z4ZhEAqGmJyYpLRe/Vcul5mcmEBRVSYvXMDl cjE0NETPph5AkEqlKJVK3HnnnYTCIarVKvVandtvv414PM78whzFQoFavUYmk6ZareI4DrVqjamp Ke648w7C4TCzMzMYhsGB/ftJp9Ps37+PjvZ2arW3NMn0A4cNI1j16p++V88/8EfCLja/Ztrv4mqX H9xR0HwNQhUabJArBGgesKtgFqCeh2oSystQz72sM4GNX6iq7hK1qu6i2lxe+JuIUp5zCWdNt9yb cr5Nn156paEUJv447i4cbUMUNyQ+Ug3bleDBuXD3Z9Zevq64crRFHbvnHmT98jvQy+eUkuA4anAl 8uE+JZlMSynTQojXN9/CDyjm5r7uiWcf3yScSQ+A1DvqeWX/TPPQz70+sd01XMM7BIZLwa0LajWb uiEIeBW8HpWgTyMSUKmZ4PU0UnKGruD2OQQCgmJZZWymRGvMTVNIw7Il6ZyFaUl0TbB7s4+nTuQI +1Q8LgWfR8WlK2TyFitrdfxeFa+hYrhVFAHn1k1Gm0I6vR0e3LpCW0ynq0UyvVhj0nQQgKa+eDPS VEHQ34iydbe6mEvWkBJam9xU6w4Tc1VWyxU03U/Ir+Jxvz3C+G3btnLy1EmeeuopMpkMfX197Nix g9nZWcYnJviJLVsol8usrKywqbsbw/AwtZ5K6x/o54knn8Af8F9yMw8FWykVizTHYsTjcaRsVFvu 3r2bR777XXp7ewHw+3yEw2GGh8+Qyxfo6+1jcXHxJZYPKqFQiGKxBEh0XSMSiWAYBs3xZjweDwG/ n3w+h2mZ+P0+FEUlGokyfOYMjm2j6zpbtmzh6NGjVMolQsEAiqLg8/no6uqivb2dplgTbW1tjJ0b QwiB1+fDcBsoisrU1AXCoSDDZ0cAcLl0/H4/sVgMw/CwefNmQqEgvT09NMViqJrK0aNHyWZztLa2 UqlUyGazRCJhPIabcDjM5OQECwsLdHR00NTURDAU4shzzzE3O8fuXbuJxWK4XG58Ph8uXScajXLy 1GlWV1YQ4iIp1Ghvb+fo0efJ5XLs2LGDer2Oy6XT09vLseMnGD13jmj0TUlm/W+Djav5ju75/5Xy 8K8g668SoRFgNIG3HXwdEOwD/yZwxxrRq9oqzD8IuVGwqlBLgf3qbFcqnoqtdj4hNV9OgEcACNuP dDwC0yPRFy019Dn39U//z5en58zjP7ZPrY/+unQKu5C2Ci8XoUsBek2qwWctz/7/17juv469dK31 3K6fVqrjfyac0ovqQFcY3BHIT73kTClYxtbHUu3f/D8dNWgrijHX2hpYfdUD+wGGlFKpT//JoJb8 0iHs/C4U1wGcSiPPINwlEEdM745/WG36z490dnZW3ubhXsM1vCJeXkUoBMwsS46dq1IzJZGgRtCr EvCqVOoOhksgEVTrNkiYXqzh9yp0JNxUapLJuQrNER0JpNZMetoNmiMvvp+tZOrMLFXxGgr9nR6k hIm5CrouaArraIpA1wTlqsPMUo1oSKMj7qZWdzg/W8GlCQa6PSTTddI5i9aYi+aIC10TIMG0HNJ5 k+awjuPA2EwZKaG/y0O15jA539h3d2ujT6+hsbXHQyjw1ovh0+k0p06fxjAMrtu5E5/Px/LyMsVi kd7eXqrVKqdPn6JYLLF161aEEDQ1NaHrOhcuXMDn89LUFCOVShEKhZibm+XChSkGBgZobW1ldXWV aLSJ1dUV2traLumIMpk0p0+fIdrUxObBQVKpFM3NzbhcLkzT5OzZs2TWPbk61y0cfD4fxWIBvz9A oVDA6/UyMjKCEILOzg78/gAnT51CU1USiQQTExO0tbWxdetWVFWlVjdZSS7T2dnJ9PQ0586do7Oz k0QiwfDwMIZhMDDQj+04zM/P093VzeSFC9RrNfr6+/B6PFQqVVpaWtZNS08SCgZobW1j7Px5wuEQ O7bvwO12Y9s2o6OjpFIpOjs7iMcTTE1N4fP76O3pQQiFo0eP8uBDD+LYDp/4mZ9B0VSam+MU8gU0 VcGybc6OjOD3+RjavJlSuYSm6aiqyvETJ2iKRunv7yOTydDa2sbS4iL3f+MbzMzM8PGPfZy9e/e8 5dfTRbzTqwg3jvQc2fJfqE58BvkS+ZPQQDPAaIbgAPi6wC5DZQUiWyGyA7T1qRzsKkz9Hcw/DNJ+ lT29ftjuvsNW4ud+xuj7rfMXl+VH/6DJm//6X6nl0/fBa8iihCZt//7/qoZ+9F/T/8t1LvxR0Mx+ 90N6/pHfBtl3Wdv4fgj2w+RXXzwOQKqRRct340MoilQc05SyVEFPJB3P9n90D/7+6PfnSN8ZqJz8 ydvd5Sf/EHNtl3BKG6RsBVINrtha4qup5t//w9aBj7xtZFO+8Dm96hs9oJVH34XM+5AbhF8FAsVf ttxbHjEq254U13/6LdP4XcPbi40IVqWuU7NeUrUnwZGycb9av3qEEEgkihCX1gvRWI4EoTT6chwu mwRYiBed3C8uV5TGNpIXDUMvtpPyxWWq0lhmO40Quqo00o4vNxltuKS/pO8N9nXxeAQQC+l4N6hS vIb/fbG0tMjMzCzBYIDBwc1vuGoxl80xPjGOIhQGhzbj9/m+TyN9/XinE6yrO9MSCHRB4gA4JlSS sPCdRorPrkLy6QYRGfhp8HaCVYLMGcD+vluZqk52s5r75z7gEsEKFB8IYae2vya5ApC2UMyFPZXq ibh6+kdv1CvDP69Xp/eD9F/WTnFB/GawyiDUywiWsLOteuHRj7/YWAiEsGXh6PsLI7/3qcDW3xt+ rWHMSelpHv/NVlE97UON2LXIJ1cCrbel30n2D/LUr/vs2hO/JGqLN73yuZUIOxfX7MIvx9K/W5Tj D/w/YuCetzwxL6UU9VM/8T736kP/STjlFpCvlg+RqvL8T9f9d/0bKeXfvZPO+TW8lRCoiqClqREV KpYbGiloiNWvBo4jSWZMbFvi1hViYe0S0XkjsGxJJmfSHNBRVUEqaxLza2/I/yqdNXEchzdqQfF6 kclk0HWdQCBAsVikUChgWRYdHR1XPAg3gpSSfD5PMBgkmUzicrleMzW1uLhINptF03VaW1re0bYF qVQK06zT0tL6mucjnU7jSIfmWPNr9nvRCiIQCHLzzTdftnx+fp5yuUxPzyZcrtcndQ6FQ2/IxuKH CVdHsAQNUjX9DbAqXKnLMiF7DlLHoKtrfdmrkB2h2qjBnKNGk1LoOcVKdwor1fZKBqQvhXRstSa6 4sni0wk7v1Roa2srQw2uWnAukQ5+1c5/Rs8//AvCzoc3bOaJQ6AP1s5s1IdAmpffpSSKILvHW378 XuAKglVY+nqzJ/XNm6gvhNTaBZ/zTPcWqfr3CVlsBlddLZweZmL2aP3oDauK1lS1wwdHXD2/Nfy2 ViqaJzXVXu24KuKKo2nm4s+XK3/3TeDYmz20KzDxKy69Pv4xYeeuarzCNtt0c+JfcPgj3wSupTZ/ KOFw/Fye1mabrb0+jpzJ4dIVIkGNcFBncbWGqggiAQ3Ww6GW1SBSEvAYKvmiyTcfW2Wox0vAq6Iq BlVTYloOIZ9GtmgRjzTmMFzOmAigNebGsiWLqzV0XRD2ayQzJi5d0N7sQlEUVjM1vvLPK9xzS5SA T+X+h1Pcc0uERJObXNEiGtTwuFUyeZNq3aE53PDHqtYcfJ6GLYPHUFhZM7Esh9aYm7GZMiG/xtY+ /c2bwmMDnD59mmKpxD13383hw4dJZ9K0trQST8SZn5+nXqvT3t6O4zjouk4ulycajVCr1QiFQmSz a3z5S1/mPffczcjIKNJx2LJ1C91dXQ291tQ0plWnu6v7Umrwa3/zN3gMg/b2djS1Mb9fvlggHApT KpUIBALE43EWFhbI5XN0dXYRCASYm5sjXyjQ3dlJKp2mUqmwadMmfD4f0mk4sufyOQyPB+k4SCnp 7u4inc6wnEySiMeJRCIsLy9RKBRJJBIEgwGKxcY+c7kcoVCY5eUlcrkc3d1djI2Nkctlec97WgBY W1vD7/dTKpcx3AaVSpn5+flGdWMuj+U0XvYz6Qxut0FnZwelUonZ2Vm8Xi9tba0YhgfLsnjyqacI BYMMDQ2xmkoRa2pCVVU+9xef44Ybb8Dr9ZLL50nE4zQ3vzZpu4bXh6uPFVqvMWeRtF+9jVAc27P7 25beec6RalK629dM966sY3SXAgu/+UualWmHl2jFhQaKBk4dLnNVlopUAiGzbLa6NC0gpZzi6E0b pIKURhrTqUN58WUrHb9ePfu+VyRXrhC0v7sh2tf9oHrArl9FNM7WFLkWWa8uFEIIpzD+B83u/KMf 0yY+fR9om8Hy4VTdilNxcXlyagjUD2vV8xWEaiql5xec5JceKZ7/t1/wmTeMiG0fqb/W3t8yKHrj 836527VViGlm/icWM4uri5HWpevfQosN5s8I4c6GXo8Xm2PlE8XOn2xLp/9iNRqNFq5Fsn64IIRC X4eXE+fLhP0qhZJNV4tGOmty/FyeZMZEERD26ziOxFEsVvN1En4v7XE3vR0NXVXdbAjbdV0wtVhl fK6C11AxTYnLJWgKNrRPS6k688kag902uaJFtmDR1eJmbqlKMmPS22HQEtVRFDAtqNQcVtdMZpZq +Dxqo+owW2/YQqjQ1uzm9PkSrc0uFldqtMXdLKxU2TXg48iZAjduC7CSrrOwWmNhpUbdlJiWvLJw 503G4OAgf//3f8/4+Dizc7P09PSwvLzMCy8cY/jMGbw+L2eGz+DSG/qno0ePcv0N1xNcj7zU6yaT FybJrq1RyOdIJlfIZrMsLS4Rj8d59vCzKEKw1LfEoUOHUFWVUqlEKBTCH/BTLJZ44NvfprOjg9nZ Wbq7u7FtmzvvvIvFpUVGR0cZHx+nu6ubEyeO09vbB9LhO995kF27dtHSksDn82FaFn/911+hvbOD hfkFEok4tuOwf99+LMtk5OxZjh17gd27dvHggw/R29fLqdOn2bN7N+fOneOWA7fw0MMP8Z6738PS 0iIjo6OMjIwQDocxLRspJY7j8Mgjj3DgwAFOnDhBe3s7F6amqFbK7Nx5Hblclnrd5MknniQcCVMq Fjl06FbOj5+nWCwycX6cD37og2zfvgOASqVCIZ/n1KmTRJuaEEJh29at5At5mpqiPPbYY2iaiuNI 7r77bpqamt66C+OHABvHm8X3+u/3yptJJbJWDbz379Kd//C1TOffP7zW/P89X/R8cKKi7FkGy7q8 MdByCK777QZJuqIzKZHIer3uH0vhheqVbVxh2PxJ6Pnxhl3ES+E4mrSKkQ0HqmjQ/h5ovb3xd2gI YntBfWnKQDRIl/IyfiolpvRHl5eLW+dX8725yc/f4Fn+L1/QC0/8kbDWbhXWaouw1gI4lVfIP9hC 2DmvsDIhYaW3KrUL/9K79NkHrMpn/6By4ic2bbzN24COu6Hzngb5vAxSVWoTNymltda2pWyblPKt zUWIjTRXGqjuxs/LIBEoWk02tViW1VMoLFwrh/lhg4T2uBshBCfOFQn6VPwehVTW4sxsnuW1KtVa wyPrwkKVxaSFU1M5db6I11AudoGmCSJBjUigMdlwPOJiaJMXl64w2OWlVLNJ5SxWMibZgsWZ80VW MnW29XnZ3ufD51Gp1RtViHL9HupI6Ii7KVds5ldqtDTr1C3J4mrD42puuUY6axEOamzr9bGWtymW HIolB8uBtbxFvmSzuFpnLW8xvVjDeptqndva2vB6vTz11FPUa3U2dXezvLzEudERpqencRwHy7RY WlriuaNH8fl8fOfb31mfk1Dg83lpaWll+/adeL0+du7cyeDgZpaWlnjmmWdJLiexbYdcLottNw5S EYJEPE4iHkdVFRQhOHToEIZhsHPnTgDm52cZHx8nu5bl5IlTHD9xgng8wR133EFLogW32838/ByF Qmn9M5FUqjUO7D9AIBBgaGgLiXiC6elppqamyWQyjI6MMr+wgK7r3HXnXaxlMqyupslkMtTqdZLJ JLnsGhMTk6yuphgdHaFQLF56ckopWV1dpVatNn7Wqvi8HtLpzKW5C3O5HOVyif37bsbr9TI9Pc30 9Ay3HLiFSCRCtfri81AIQa1WxzA83HTjTUjHWU/PtuPxeDAti1tuOUitXmNubu4tvS5+GLAhwXLU cAmUV/53FKqDUF5X6koKxZFoppQlR7GWVMVOaYpSUYWoXDkGRW1UJ/q7X0ZsXjYMIYSqvAKrE0pD dK95eV2va7YFhQtgFRt/az6I7WlEtS7r2wvi5dU4ElBUW3Xr/vw/b/ct/+F/VK2Fe5Hm91a2Iy1N OJVWrXj4V93Fxz5fO3bXRzKZhzd0CnxMSq008lt7rCObPyGPXvex6vCn3l2a+PO92eTzvSsr8uVM 6I2hNN/QqOnBK1YJbAVAynJTMpl8e1+HhAotB6H/p6H11isJMSAQwrZtrZanScpX1W1dBimlUpz8 sx21Ez96n/XCHT9mHbv9I7WT936wdO6Prpdnz/7gzMT7Qw5VVejvNBifq7KpzcBrqHgNhd6Yn3jA TWuTi82bvMQiGmYdElEXuq4Q8jfeHYRoVPOtrpmsrpnYDnjcCoZLwWsoGG6BW1fIFhv6rosic79H 5fxUmXNTJYI+lUSTzvhMhUqtcdvVVAj6Vbb1+zm4O4TPo2I7sJIxiQYbWixVAb9HxaULHClxuwTl msPJsRKW3TAmLddsQj4VTRVoCo0KxLfBve+mm27iyJEjDA4M4g8EMDweOju7iMfjNEWj7Nmzh87O TvK5LFu3bsE0TWLrOiNd0/H6fJw8dRLHcQgEAvh8XlxuF5s3DxIIBGhpaWHz5henpdF0nVRqlYWF BQrFIqFQCK/Xe+mnx+OhUq2yuLBIPB7H4/XQkkgwOzvHE48/Qb5QoLe3l/n5BRYXFxqfNeLS9v6A f30cvkZ16MQEgYAfr9eLIhQCwcYYdU3D5/dRr9d54snHyWbXyOXypFIpmppiuN0GiqKg6zpCCBRF IdrUxOEjhxk7P4aUkubmZnw+HydOnkBK0HUdr9eL1+tb//LQFI3yzDPPMDM3y0s/YF3X0V06Pn9j bIbhRggFt8tNIpHAMus8+eRT1OvmtRThm4ANU4QV78GHvOVzPy4c6+JMlxZoNUdvmXfc3eccETmr VkduUs0LdyDt1/Hv+iInE0JUFEWpqqpaU4RZZL0i58UGV5etsZ1XyAnJS9+uhJDyFXcggMJEQ3Om R6Hm92r9AAAgAElEQVQ8A7PfgupLiuOkDbX0xn1LId21k6FA8v/6ZbU+dcvG41rfj9Bekm5bD+Jt NMmsNFVhJd+ll2p7g2P/6muF8f/87wMDv3JZtd4Nw796u5H7+p8Ip7AZFMtVT2al8u2se1kWFCe/ Zj8dX7aDtz1bCtx9f6TnE1kppWDkfp3c/VdGmVq3STb9bp3nbpYb3o1TxxtfG33y65V7QgihmGZI Srn6tqXeFBc07YHYQXAdgZXD4FgbNjUb5jgbV9VKKTi838gF7mnzyvG71PLzW3jK3+ZRApsFThvS 0gEUqVpa4fiKtP/DmHn04FEr/lN/69n0qak37wCv4Y1ASoex6SILqw6RkM7UYg3bkVRqjZvKUspk MWWSzlvYDmi6IJO3Cfo1jgwXG6k8U+LSVYYny7hdCiG/hqYKckWbctXm3FSDNOUKNsspE5erofGS FYfF1Tozy3UCPpV01sTvVTk2WkRVBdWag2XDXLKGIyWFok2l4lCpOZyfreIxlIaxqYRjo0UqNYcL i1XyRZvVNQuPWzC/UieTs6jVHZojLjIFC5dLectThABDQ5v5zGc+w8DAAC6Xi7vfczeRaJR4PE6l UiESibB//34GBgaIxWJs2tRDa2tDk+Ryu/nAffdRq9XoaG8nGAyiKiqtra2Ew2ECgQBmvU4kErkk Ev/whz5EJpNB0zRaWlpoa20jEAhw113vIhZr4sCBA3g8BpFQmEq1yt69e2lra2Vy8gK1uonH4yUR j/Pe997DwMAgALqu8v73v49QKMjtt91OKBQikUhgOw79/X2srq6yY8dO2tra2FbZhqbpvGc97eb3 ekhn1tixfQd9fX0oikKp1IhChcNhVFW9RLBuv+02pqam6OsbYGCgj0xmjW1btxJPJPD7/Ugp2bZt G6FQhH379mMYbhKJFk6cOIEQCsFg48VX0zT23XwzlmVdsr04cOAWPB4vkUiY1tY27rrrXSwuLtDS 0kprW+tbe1H8EGBDgnVuy0ce3zJc+oxefu7HFFl3297dM6beN1pz9y/YxnWVura1GJu5PaGa01ym m7pKOI5jeTye+Wg0WgQkk9YGOb43D1K4alKPzirmfPuGJMyx1qsG1UY0qzB9tV0LR1FkKPk771fN +Y3JlREDb0ujGtMdgaa9UJqD/ASY+QaRk/aGREDY2ajqlD7jXf3jgpTydy4anMoXPqfb9a/9hGIm t4MjAJew814BbS9uW0Zkv/Oj/upMV/nUJz9XP/n+vaos3YuSar8stSYRpGZqztqRx8rhg9/y5p8e 1Zm68fKBvNLRC8cy+kelFnCQUL+aEqE3FZIGqbf5Xq7TqakpY9Pcrb32iXfvVFj6mVD63+2UwhUS 0jKQpqLYV2oOBTSB2KKVj94jllburJ7+tZ83dv7phTd8KNfw/YdQ6Gpx09GioamNyj0hBIpYtzrY xYt2DUK8+Cvr1gfruHlH44HWsF5oLJNSXrJQuPSTRj8vhyIaKUFxqY8Xx2E78rLKspcM5xX3JdYb Oo5E7BKXbaepGw7hTYeuu9iz50W/pK71Yqhdu3Zd1u5ideBLtUBCCDZt2nRFn8FQ47zv3bv3inWD g4MbjqOrqxEzuDhZdDh8uVJk9+7dl35vexnhUBSFnp4eANrb2y9b1xyL0d/fv8H+Gsc5uHnzZct3 7rxuw/EBJBIJEokXJxSJRps27BugpaXRrlwuYng8fOAD9106V0IIWlpaLmvf2to4pnC4kQjp6+uj r+9yd6Jr+P5hQ4J1vbjeBP6n/PqPfZveu5S16Ht76sLdSDPJOlBCse03pK+p1WrWxQo5+dyWN9LV 64aQolzxHLzfY2UNxcn2CSvVjHRelh5avwtJh6sXTit1oQa9SuX0lg0d4QPdDSsLocHid6E43Ui3 IRt3S7vaSD06ZqOS2ixeuQtpKsIpf7R++uNnpJT3CyEsQv+oqKmFzlevwrQRdt6vVs99XDiZO9Xq 9B6k9Yr1uarg/d7y5E1W+M7/odXO3yasTPdrHb2jNZ+t+N//gON4bCHMH9hphObknKflxM/uZ/ld 75Iy83E191Dr+iMNITeOgF0OCbLmUmuTt1r+8o9IKT93TUD/zoOgUQkohUK2YBIN6tTqkkLZIv4W TSlTqtgsrNZojbnxGSqlioXPq1KpOdiOJOhTyZdsAj6NN+L+YNkSKSW69va4uVcqFcbGxrAdh77e HtxuD+l0ing8jmma1Ot1bNsiGGw8+IvFAsFgCE3TKJfLzMzOUK1UiTZF6WjvQFV/cLy8HMchmUzi 8XhwuVx4vV4WFhcJBYP4/VeqNyzLYjW1SjgURtd1pqamKJfLtLa2EI/HSSaTTE/P0NQUpbe3l3rd ZDWVYVN3N5vXiVw6kyYcDiOdhsXFxf2k02ny+TyVagWBwOMxMAyDtWwWgaC9vR0pJdFolEqlQrVa pampiWw2ixCNFGmtVmV19cXPzjRNAoEAU1NT5HI5+vv7L00AXamUqVZr+P1+1tbW8Pl8KIqgUqkS jUTJrGWQ0qEpGiO5kiSZTBKLxUgkEqQzGZaXlgiHw3R2dCIUQaFQoFyuEI/HL3tReNvf5V8Br1pF KD5yvy3l151KKlXUTHN93huBBAfldZRrvdMgbFEJffCsGbjz943Ctwfc2b/9PxRrtf21N7zUgUQo Nhc1bOvaHUcJzQlp1RRrefdlzSXg74T+nwLFDee/APnJVwnTK6C5wZNokK1q5rK2wkxv0vMP/ofa 6L9dBb579eMGYee61UruNckSEkW3pj6glI4LHPs1q02lGk7XIh/5Ujn60Vlh5l7xyKT8PY2J9NXd HetNkq2/e4mIv5mQUsr5+cOu6umfuk1/Zt/HhCwfElam4yUtvpdeEUIJra6WEsvLy4VEIlG+RrTe eZhdqvL4sSzv3hfFthxOni9xy+4Qfq+KrgkKJQspBQG/hmU5lMoW3vWJoOumQ63uEPBpaJpCuWJR qTkE/TpSSoolC5/3cv+qYtnCshx8Xo3hyRIrmTrxiIu65XD8XJHedg+jUyUQsGvQz5nJEvt3BDFN B00TeNwqNdOmXHUwXArW+jugpoBpS3xeDQGUqza2A0GfytR8mbWCxdbehvjepavU6jaaKlDVN5d0 lUolvvGNb+A23Ph9fhQBLpebz/3FX/Azn/gEUjosLCxSKBS4/fbbQQiOHD7MbbffRjQSZfLCBR5+ +GF6ezahKIKmSATTsgCBpmnU6zUikSi2ZZPNZ3G73QT8Aer1+iXLA13XyKyt4ff6CQQbnlgXjSlN 0yQajVApVyhXykQjURwJ5VIR23EaVgnVCuFwCE3TyWYbYvpIJLK+jwyRSPSSRUSlUkbXdGr1Gm63 m0qlwtraGul0ihMnTvK+972fxx9/nL7eXgYHBwiFwpcRxomJCb7yla/w4Q9/mK6ubr5+//309/Xx 5JNPsm/fPk6dOkVLawuWZRKJRHj44YfRdRe5XI7Z2VkGBgY4e/Ys9957L5lMhqeffpq77rqLTCbN M888S2dXJ0ePPo/P62HXrl0cP36cpqYYsVgTjiM5c+Y0H/3oR8mk0zz19NPs37+fp59+mjvuaKRF Z2dn+fznPs+/+PjHKRYKmJaJWTdJpVOoisrZs2e57777Gm3n5jk/Nsb27dv56lf/mne/+93rhNpi /759/NUXvkBzLMZHP/pRHnroQVRNY3F+gfff9wHOnDlNLpcjn89z993vYWBgkG984xvk8nl+/lOf wuPxIBBks9mG43xT02WRv3cCXvPBKYSQZ6VMRZaWdCGEX0rpKJZaUqkX1nVM70zq+FqwqpT9h5Ys Ry25c98qwNUbkEs1PGdGPvh30spHFKfiUazViKP5i5b39qe1woM3C6fquWwDdxgGf7aRHhz589cg VwBOw2/MsSHY29BpVZKXtRBWus9VeOjXVuaenSb50CKMX96FUBrCfKvSiIx9T3AMpXbu/cLJv6ZV r3CKIa0yvFurTx2xSFSEMIVct5iem5vzxFY/HdfsfE/95At3q9bSINJ+9bu6lALFU3VOHntcPrPp 2VzHp2fC3b95xRyS3w9IqUuo++JL/+Y39MqJXxSOGYWr1BYKlUbE6koOKNXISl3tG69jtujCjOdy s3PAm3IM1/C9wXYkw5MlokGNyfkKLVGdifkKigKGW6G71eDw6TzdLW6GNnk5eb5ItmChqYKOhJuJ +Qq6qtDWrDPY5eWxF3JEQzp9HQanxkvU6jZeQ+WOGyP4PSpLqzUOn8ljWpJ4RGd6qUrQ19BtubRG Iu/CQoVU1sRjKAxPllAVWF2rMzxZJp012XddkJPniwgEPo/C4mqdXZv9FEsWs8s12uNuokGNY6NF QgGN9riLStVhdKqMI6FSddg95Oe5M3lu2h4gHHxzo3UjI6OUyxXuueduqtUaUkrS6VWKpRJnzpwh FAqxtrZGNpulXq+DEKTSaaz1ssdSqUQul8Pj9eL1evnHb/4TKysrVKtVvD4vbpeLvXuvJxIJ89jj j5PL5XnvPffw/AvPY5kWg4ODnB8/T6Vc4YYbbmDv3r1omsbw8DCPPvoonV1ddHV2cuTIERwp6ezs QFU1zo2OIpHougtFCK7buZPmeJxvfetbqKrK9h07mJ+fw7YdDuzfz/bt25EIHnzwYaLRCM888yy3 3XaIiYlJ/H4flm3z9FNPsWnTJpaXlpmZnua5557j1kOH2LWemiyVyhx9/nl8Pl/DVNXtIruWAdFH rVYjmUyyuLjIzut2MtA/wOHDh6nX67zvfe9nfn6ef/iHf0BKSalUwu12s5JcIZNJEwgEOHXqFEi4 8YYbOX36DAcPHqK1tYVv/tM/0d29ida2NkqlMpVKGU1TaYrFqFQqfPazn+VDH/ogLS2N9OLi4hL5 QoGpCxdIp9MYhpt0Os1HPvIRXC4XX/7yl5mdnWXHjh0gJcvJZVxuF8nkCsvLSebmZrnnnvdy9Pmj qIpCLp8jlVplYmKSW2+9lQuTF8hms0zPzDA4uJlMZg3LshkeHqZYKlKrVhvXg8cDAjJrazx7+Fnm Zud47733snPHjnVD3bcfV+WDtU2IupRylkbiyhFCOPLItvIVwvQfMAizoihOTbsag9OXbIWttV1Y C//GN6RmND5FqyKkGnCMymPxkLnwS1dsEtsDoc0w/52GgP5q9+bUoTADif0NomTmX7oSUR0/FEr9 yY8vt//+V1umv3o5YVFc0P1hKM3CwsO84gclWa+KNBqu9ZetkwJpXt3rrbQ0tTZ9g145+VXL894y mMIwoqXa2GcGW/InPqZYyfuU+sxmQEO+gj3IBlCRH0KotcDiV/7ReqbluzLw7sl0/F8fa2m57jWM 2a4OEk0qiqVFFz/1YVf5+V9BWsbr6kDRG+RKXmlTZrmHniwHP7AszLJiC1Wt1WRUSpm9FsV6h0BA JldnerFKd6ub2eUaXregLebi3fsifPXbK7TFXISDGghYTNWZS9bZ1O6mWnNIZkyaoy56Wj1MzJY5 P1smHtU5tDfMWs5idqnKnq1+1nIWtZqF36MyNlOhv8OD261wbrpEokmnq8XA721EMKJBnedHCrTH XfgMheeGi/zIzRFMu+GpZTmSyYUKqiLYMxRgabWGS1PY1uvlueEC4aDGzFINXYPOhJu9W/08+nyW 7laDrT1edg74OXo2z+HTeaQEr+eNTZtyNahWK3i8BqqqcfToUywvL7NjxzZ2796FlJIzZ87Q2dl5 Kc0j1x+OF2+TQgik42CaFpbtUCwWOXToIKdOnWJgYBDDcDM+Ps7g4ADRSJQLFy4wPj7B0uISn/nM v8TtNkilU6yx1nD4WRevHTt2jN27d3HLLQd58qmniCcSXH/99TzwwAOoisJ1111HtVpFCEGsKcbs 3AyjY2N4vF5isRilUgm/349lWthWY75KVRUEgn6ee+4IS8tLvPDCC4TDESqVKpFImC1bt7J//35G R0c5dPAW0uk0S8tL7KJBsJ599hkmJyfxeT3Mz89RKhVpa2+nWCji8Xo5cOAAwWCAR777XSbGx8nn CwwNDeHz+VhbW8Pr9VAsFi5FckqVCqqqoaoqS8vLdHR1gpQUCnn6+/uZmZnG5XLjcrsx6yZzs7P0 9PQBAq/XS1NTlKGhzdx0080oioLjOCwsLHDrbbeSL+SZmJhgaGgzoVBDND8zMwMIQuv6OL/fx8rK Kvl8gYMHD3Ly5EkGBwcRQuHBhx6irbWVldUVzp8fp1DI88QTjxOPxwkGAywuLFCtVGBdoP+lL30R j8dLqVwimUxe0petZbNMT88wOjLmHDhwi/JOShde9YNOCCGFEG9JuuadD4FESik1R0rNkWrAlprH pp5VcaqXm24JFeIHGr+XFsC6wntTongKUvFnQblS4GNXoDgDkW1XciSn4lfLx9/lqi8MSEW/8k6p +6H5xg3tCYCGP1TLwYZf2MAnGnNMXlbJKSRC31h0tBFFcKpezSmoIITU/UU9/dk2Lf3A57Ty8d9Q alM7kI6roXVzuPovqSItr1Id+UnVzHxezT/85aaZj/1OduarG/uYvV6obieU/O1b9OLTP/e6yRU0 ooPOleRKqoGC5Rp8wdS7yuLSf/zrm5LiGt5sSEamSvS2GXTE3ShCspwxKZRtTo2XcbkU/N7G9DcT 81WyRQuvoWBZkkRUJ+xX8bgUNFXgSAj5NVI5k9GpEoWyheFWkA60NLvwuBsEKuhXmVyoML1YweNS cOvKZVqScEAjX7SJBjQMl0K17hDwqSys1CmUbExLUjcdXHpjomhVFRhulWq9EaHSNYFlOyg0lrv1 RuduXZAv2xRKFomIizPjJXo7DFz6m6/J2jy0mUK+wJHnjlx6SEspMQyDgwcPMnXhQsOeIBLhyJHn OHzkMC6XTiDQ0A0JIXC7DQy3G3u9Is7v8+MxPISCIQzDg+M4nDlzhmKphHQkLl1D13Wef/4FZmZm 6GhvRwjBsePHLvlEJRIJxsbOMzw8jKoopFZXOXH8OG6X3jAp9fvxeL2EI2Fcbhcg6Ghvx7YswqEQ /X19bNq0iXKlwgvHj1E3G/eBrs4uZmdmuenGGxkbO093dxeapmG4DSzLZHx8HKEIfD4fLpf70tyR y8vLTExOsnfPbtrb2skXCpw6fZpYrBmPx4PhdnN2ZASX2yAWa0ZZr6QcGxvjqaeeXCeMe0inM0xN TXH06FGqlTKp1CqPPfYYKysrbBkaolAsoCoqhmGwsLiE4TbweDyEwiGmpqZYWFzkueeeI5/LYdsO HR2dl1KYtVqNdDrNLQduoVwsUalU6O3pI5VO8+STT/DYY4/R399Pe3tDXeH1+piZnrdbEi0yEokw NTXF9m3bOHHiOP19vfT0bMLtdnNm+Aw33byPX/iFX8BxJFNTUwwNbeGTn/p5XC4XDz38MMFgkK1b txAMBEilUpeuL7fLzcrKCjuv28n11+/Ftt85FOXNf315K+BSJNbbE0tTHceSmpZ3dMPxyLXAFWaX erBhelpZhtL0FdErR28dqUY++R9t4V0zyo/dphcf/1lk/XLlY2VlfR7IemM6opdAkeUBo/Rwv2PJ DWSfAjytDUf6l6UYG6s1sAqQGwWzBOWlDaJrL/M7E0rDn8yuNfqUL63OuxiZkVKvF7ze6vGPqub8 Lcg3VhBxCbKuCXOxW7OSvx6Y/7XA2tSf/nak59eyb6RLxaobevm5Q8LJb+DZpTQOSb7+S8vRmk9X Ij97WphZgWhovGyPJ3ctevXOgZQSty7w+1z4fSptcTfVukMooDEyVaKt2cVS2mRmsUbAqxL0aViW ZGG1TqXm0BTWUFRI5+oYboHlNCZpPjZSpKvNTU+HwcxSleBLiNhFa4eVsklPu4EjJfmS3dBcAXVL 0tthNGpfLdjW5yVbtHCkpFp3iAQ1vIYKApKZOjXTQUqYW67RFNbI5CwSTS7M9arFqaUa4YCGaUsU BYYvlLAtMFwKhZJNrmASCnxvNn1Xi3hznPvuu4/x8XFcuou7734PkUiUjo4uenp6+MVf+kVisWZ8 Pi9nzgxj2Tbbt23FMBpKi77eXiq3HMBxHIQQ3HnnnbQkEng8XkLr1XChYAgEDXuD3l62bNnC4OZB pmdmsB0bwzDYtKmbzs5OfOuTEx88eJDTp0+Ty+cZGhrC7/eTzqS48cYb0HUXqqbh2DaKovwv9t47 Sq70PO/8fTdVrurq7urcjc4AGqmRB+DMYAJnhsMkiUNxLYo8omjpeLW2dLQ6u7K1WtsyV7acZFtr 2mv7WLIsW7REUaJkKnACODOcGQzSDNKgERupc6quHG769o9bXeiIATAJpPo5p4CuuvdLt8L33Dc8 L5qm0djYQLwmTiKRoFQuU1dXSzI5z8aN/XR19eDzeTdQbW1t/M2f+Rk6OjrYtGkzPd3ddHVlCQYD NLU0IwQ8dugxGhubSDQ0VMVRdV3n2U88Q0dHB+Wyydj4GNNT01iWRSgconNDJ1PTU4yNjjEwMMDW rVsRQnD+/Hmy2SxPP/00HR0dhCMRkslkRc5hAH/ARyFf5LOf+TRNTU3kcjmee+45FEWhv78fVVFQ FC8W74knHieXq3gyhGDfvr34fLfvO1VV46mnnqK1tZVnPvEJHn7kEXp7e4nGokxOTTI4uINNmzZX CVk4HOGrf/Mrysb+PmGaJolEgs6uTgKhIPV19UQjEQY2D5BKp2loSNDU1MwzzzyNbhhs2bKFhkSC H/mRz1LIF2htbSWRSDCwZRuyUi5ISkl/Xy//7utfR9NUBQSFQvEjyZRdDT8cBKs4q+HmPpKS3qaU hbbGxptCCFeeeFhFiKXmDKF6pKQ8B4WppQRGGCUz8vE/TSX+3imJlEX55cn4rb9Ro+ePfglp3761 tPNePFbn5yF9Zamr0MnHRen6SsVPAKRnxYptWjn2Qr9zZ1jbfSgkQl2qb6AGoPsnvPius/8MyslV mzpuWcdNJ9Z0vyoGqH5P0HU17a87QTqqYqW+Gp75g7S8/l++Jrp++r6CzCQ4wfR/26Q6k/uXH8Co gVCzJ9Ph3GPtauEzXd/Gk8XA4IxiZ1QARVFKuamp7P3Mcx0fFARdrUGKpgIC2hv9t5OH5W05g9qY jhCeOnhNVKOz1U+lFla1p3hUBwHb+8MVuQTveFfL0nMNQ2HXQBgkCGVliIWhw5ae2z9ljXVefFQk qNFWUZ1fjGjo9k/44MZKv8vO6Wr1YlVqIjply2X4VpG92yIk4vqHln3V3t5elTbwJOduSzLs3n27 cPChQ4eWnAOeZMOjjz56W4aiMufwogLONTU11XEWzqmvr6erq/u261HKJf2Gw2EOHDhQfT2RSOC6 7pJzFiMe94zmDz30UHUu7e0dK/oNBAJV+YmFNdbEayprqa+29XB7DXV1dVV5ikAgQG9PL709vVWX 5oKW1eZNm5dch/379y+Zw87BwSVtGhoalxyPRCLV4tcbKvFnCx/4rs7uJW0XNLUWYBg6mzZtAqC7 u7v6+o4dO9guty+ZF4Cuazy0f1/1hQXXZXfXbRtCx4YNLK7X0t+/VNKiv69/yTVraV4qPWH4jKpm WjKZ5CMRelsDP4gESyzWNNJVlLJ/14Av/efLLBAfmqFAVgdzzVUGrRp1VsxJInJm6NnXhZ1WBGDL UKlQ86XvRIrnDyrOfO+KfoKtnjVqEcESbiGg2lPBtVQ/UQJeaZsF69cKd9YdrpMQUuIzl/YsPNKo 6NzpQ+wqtbbl3/mqln31x4QsLrXICdUrpu2atxXzV4ytVGpAVuowLydh0vSr5UtfzWaG/kpK+Qav PL72OtaAEKpQypfbhT239Bur+qDnJ7yYtMyVNVqDVCMZhFEW9lzCyyxFIoVw9aYLpZqvviSs9IL/ RxiGm+3t7f3wajOuY00sbAICaKg1KJfLGLqBpmkUiwUs28auZKkJAcFAEL8/gGmWkUh8vsC7DfFA Y6DrHqtbvE9Yi7jczTnLN+67bb/4+Wrtl/d7N3Nc3uZeSep7OX+167DWa3c6vuLc97CeuxnjveKO fUuWxNY9SPiBI1jCyYaxJ4JS1yWW5kbSJwJG4eTfBrnUzq1olQ/Ng3fRFyDVhpmyUrcosrwgCnVf OB6d+NUhEL0r5i7EyrqKuKjk9wpFrlpCB4Bwl+fWmzl+T/NztcYZpHrvCp0AWBQjnzvny/3l82r+ zHNLDknXE1R1rbWtV1KCU4CaLRBq8+a+zFom7Gy94Q7/jenp6TGt7XOztbP/5p5m6Eonosn5j604 YEQgsRcmX7sz/3TLflePzaPVzyKlkHrzhOtrv1YIPfvHOf/HxxbKQKmqaoKWXo9ffBAgqunsifoE bW1t/NPf+Kfs2buXnTsHeenwYaKRKN///vdpamrylMLDYQ499hgnTp6kt6eHHTvWFon8wcCDcXe/ jnX8sOOjUZ27F6zY4Fz00tX9vty5moB5tCEy97WfwZ7ds+RECdRsBiO+Wgd3gTv9AC1Igb0fMDWo xpALIUShOR4fF3r9jJf+v3xoFSJdK+anWJPbcM0Iqy5WgDUP6cuem3E1CMNBGMsOKtL19R5zFb14 j4uqLMYSBWPPnKMmviHV2DI/ovTcbnd0DVZin7LXoXanpyGmLo9Bd1Wt8Paga6bqHf+ORsRd3H4u GkDBDijW5EqJ5LpdnhVL0b26mGv2YBqKOdYhnLla4STrhDXaIsyJJiP7Sp8uxsMVmQoB5Gtra9+X rMd13D8MwyCbzfHbv/07/Na/+tfytde+TyqdIp3NMDw8zPmhIaKRKJ/4xDP09PTw1FNP85Wv/BS2 4/B7v/d7+A2DLQNbPuplrGMd6/gBwQNswaqYLY2V4UWadfWztSOfjIIIqfbMINJcuvPqIW+TVML3 x6+comddWRUS4WYDoFf0k+7/EirOfJ3fmYrnIA+epUMIYctjG9eYtQ6122H0r5YEXkvX0VHkGuxJ 8dTis9dW8EapBPOO3vOKbbS8pbhSUdzZ7YrM9AO4om6oEHzqT8Lm76xeo+EuIMxRUe77x6/q73md u7EAACAASURBVHzheziZz9/Xm2HnYf4stH0S6gZh6uiidUgUe65elWm/K0K1El2/+3tzseKPKhTN I3/RPvA3Qu7WHTi3FCxUQXFStWrx9D5VnN+ujqVq5jt+5xsmgbzl8yUXyhqt46ODYRhkc1nOvP22 WyiVhGlaDA8Ps3XLFkKhMMeOHuPJJ5+kUCji8/toaEgQDIZobmkhmUzy2OOPo62SrLuOdaxjHavh AbVgVYQbhQ8S+714nKXHVdUcfVI1Rx7CLfmXNyXS6W2O3KdHxrUqxZ0dVu6sEsWZb41mf3ebv3C4 PlA8XFd468tN8u0fT1hGS2yJMxvAynqEbZmfu9JXxJ/55lMeUUO6hYI3YemuYTYRoNeAdo/x/K61 MvZKGNly/Iu/nmr/j/9itv27fzyz4flvzbf87m+m6//BL6fr/8Evz7f8p39TDjwyUqlteF8QQijR 6P45K3zw96UWXSWNccnZaxfgTg2BFvDe0+WzESTCmT/aDQFc170HxUQppNDLUk/cXHFo9qSnOxZq h+4vQLDRs2YJ5XbE3Z24orT8WuHIl6Njv/isLuVkRyz2njId1/H+IJczaWps5KlnnhaXL18WI6Mj jIyMMDg4SGNjI5evXKGhoZFkMkkgEKgGNZvlMlu3bqkqda9jHetYx93gwbwdc1ww097fsY0Q6fVc XHe71RenYPwwtD3zrm2kpkgUbaXW08wxT+DTO2vJIeFk2oIz/+Jf+/XGMdRAEdeVjsRVtEhaOoX4 kiFdy4vlaX4Cgs2QunJ7TtLSlcLbu1W1/N8dR5gCkFJq8rVog1jVICXBTK4QBBVCuPdqG5JKIJkN //gRS+nLqc6EDmCpzTkr2FGJOrcwnKnInfq4q3GkFOn0rVf1K1feIP/259Z0CwrNBkdFrpJ1KB3v UTPgxWPlRqvXUEgropnnOiXaG6u2vQMESsZR64+o8NCSA2bGqxUZ3wrxQdjW7FnRzLQnmWFloTQF ZtYjYquMKtxSzJd79Weik7/65zT+57svE7CODxAmiqLwuec+J578+Meratk9Pb2USiV++itfoaWl mVwux759+6r12/r6+ohGo3cVAL2OdaxjHQt4MAiWWLYxCiB9EQojEGyDrufg8m9DYfrdSZYASrNw 4489chPbeMfTHW1j0THaTyrl4aXBFfkxcCzPcqL6lrsMBW4xopRvbFrSZtVsfumRtbZPeMHm81eW rEFxMxtjE7/4mUzDP/0Lx1fr2ue+8DEVMbC6icT0rCvLyJdUwknuUcVSqokUatBdXJRZyrIrhFkU QpQMwwjopqXflwhUFfVYb392f7g89FPSKW0Wt2OSVpmQdWcxHul6FiV/vUewbk9auLalgX7PsbtS Oq5ldF3T1PiMcOYT1QNOCa59E4KvegKvvlqo2+2NLzQvizM/4hGu/E2YO+W5YZeRR+GkG4TM/+js 7OyolHJyPcj9QYAkGAwSCARRhKCxsQlN04jFYjz11FOAl8be3NxcbbF584dbjH4d61jHDwceCIJl i3hKQ7gsuCwFXr2+4d+Hzs95Ok79PwNX/iuUZysbmQBp3yFQWsLscQgkWMufI4QlbK236FJzDKF8 2VMZX5hUzotbivZ7j9m37z/5ppz0yuREusEILrFACbcU96X//Ofq8keelnrrddW6sUm4+c5VZusR q/zIiiOW1nhEs5OD3OsMRbXenhBCFMrB4Fj3xESRgQEHUHNjL9cIwX0WMgwST/3fh7T8G/+7cNKb F0tr3Dsqb4vQvMQFseLofZFAAUox9hOX9OLZF/Xiif9liSCqwNMOy095ge6Tr3kyGUaNZ8EKNkHT IajfB02Pwfw7cO0PvJixKqSqmUMH7eLUt2dmpCulnF4nWR89lt8ymLakULRRhCAU9Io4320/haJN wK+i3GUb25EUig5SekWZNfXd27mupFh2UFVRUSn3xrNtB9OWhD6EcjfvFZZlkc1mkVISiUQwjHf3 5tu2TS6XxVdRQA8EgiiKgm1ZFEslYrG1E6fXgmmaJJNzRKNRgsH7l04slYpYloWqariuQzh829jv OA5CiKrFU0pJLpdDURXMcpmamviqsgNSSlzXQVFU8pXz38scl8NxXPL5PIGAD11fef1TqXlCoTC6 fu/Cs47jkE6nqKmJ35Wl13EccrkclmVhGAbhcPj+LcRCoKrqukzDWrDDe/5My5/8KrDoGyNh7m2v dl/TIYhvh/ZPVVw1GW+TKyeXbWjLUJiCq/8NnJWlTG4jjxUYmDNKR6eENXn7ttUpw5Xf9WJwOj7r WTXmh7xjd5LkEP4SgJCLYsMknpUj1g/BFkgvrUcoZCmuWuN7sKd2I92l6oMSL9A/3O5Z1MrLagUL zRX4R5Hufd9mSykdRVFme2pr04teduTJj5e5H0Kgh4hN/creQPp3/65wkp33O68qoj2eFRG5dtmf +4Nw8BezTb/+u7GJXwqppaHPLBF4FZUHjvdZKk5VXqgY4mZOQN9PQe0gBJo8i9b1by19bx3TEIqj WpbVnM2OWcDc+7mAdbw3lMoOR89nKBZd/D6Fwf4QoaCGaUkiIRWkpFB2cV2IBFVcV3pER0Kx7HB1 tEhfh2cNK1kuIb+KrgnyRQfLkQR9CrrmyaGZlsuJoQyz8zZ+QzDQHaSh1qBQdgkHNISAsuniuJJw wCNRuaJDMmVyZaTIxg0BCiWXXMFTdA8HFOYyNn3tKtmCja4rBH0KpiUpll18hiDgUymUHK/kTkBF /xBK4yyHaZq89NKLjI6OEQgE2LN3N50bOslmc8RiMVRVpVDIY1k2sVgNmqaSyaS5dWuE8+fPs2/v XuZT86TTaerq6qmrr2NsbIw9u/cwP59E170NulQqUSwW8fv9hEIh8vk8uZw3ht/vR0rJ4cMvcevW CM8++wnC4TKqqhKJRCiXyxSLRcLhMIZhYFkWhUIBRRFomk4ulyUajWEYBplMhnfOnyeXy7FhwwZs y6K/v5/5+XlCoRBnz57F5/exaeMmhBDkcjlu3ryJ4TM4eeIkn/70p4lGI/h8fizLQtf1Kpk8efIt Nm/eTDqdwufz09HRQT6fR9d1IpEIpmmSzqTx+7w1LpCSYrFINpslEong8/kolYoUCgXC4Qh+v59i scjk5CRnzp5l965dtLe3V98bbywff/7nf8Hu3btobW2rXpNMJkMoFCIYDFIsFikWCwQCXtHtQqFA Pp+vKONLzp8/z65du3FdF9MsE43G0HWdTCaDaZlEwhF8lZJDY2Nj/NEf/ZEnqNrby759+1AUBcex 8fm8+cbjNbiuJJVKoWkaNTUxHMclOZ/E0A2i0SgCQS6X5dKlS0Sj0fsi3R8kPgCCde9mHv/8yeOu WvuHijP3VaS9dE5mBm59B8Ze8jSgFph/eX6Fq2wl3HdV4RZ2QSlHn70ZyPzJEdWaem4JuSlOwuXf 8chdfKunXp4frQSMVzba0uzSeQjDcoyWEa18rQtpelGxAihMeuuIdHu1BVfLUpTOyosn8AhGbBNM H/WI5eImSqjg6C0F1R6572B0zXWdhpbU+xKIbUvDCc38Vp8/9Y1fEPZc5/vRJ7GNoHwwdfwEtihp O+bcpn/+W7HxXyjo5rUvIO1Vqw55kLf/L0zCld+DjQbUbPfcl4qy3KoqwQv4L6XduJQyuV4u5wGB gKFreQpFl4/vj4OEVNbmtbdTuBKa6rw7+dFpE0MX9LX7yRdd6mt0imWXTM4mX3KZmClzfriAYQhq ozo9bX5OX85h2pKgoXBgewzDUBiZKjMxY/H43hoCPoV8weaN02nKtqQuphPwKQyPFvH7FLpb/IQC Kuev5ckVXQoFh64WP+mczTvDReprNDZ1BimWXC5czzMyXUIVCt2tPoZHS7hAwFDY0RfiyNkMNVGN vvYADbUffj3MS5cuMTw8zOd//MeJhCNkMhn+5//8DuVymcaGRuK1NZw6fZpAIMjAwAC18ThH3jxC Op2mVCyybetWZueSnDhxnIZEgv3795PNZDlx4gRXrlxGUTW2bNnCmdOnEYpCKBjkwIEDfO97h4lE wmzfvoPOzi5Ms8zx4ydo72jn6tWrjI6OoaoK27Zu49Tp00RjMQ49+ii1tbWcOHGCc+fOsm3bNsbG xjAtk/q6BM3NzZw+fYrxiQmampqpr6+nWCjwF3/xFziOQ39/HydPnsSVEuk6nDp9hkR9Ak3TqKur ZWjovOeiDgbYObiTa9evMbhjkBMnTtDU1MTLL7+MbdtEIhGCgQB/8D++gS8QAAmPPvooQxcuMj09 SSqZ5Ed+9MdobW3FdV1u3rzB0NAFHMdhcHAHr732Oj6fQTAY4oknnuDw4ZdIpVKMjU+wfft2wCNl L730EqVSkb6+Pm7evEGhUCAajXLgwAEsy+Kdd85RLpvs27eP733vewQCAXRd58knnuT1N14nlUph WSaPP/44mUyWy5cvc/Tom8Rra2lINNDfv5HX33idcqlIOBTmM5/9LIZhkC8UyBcKbN68mQ0bNnDq 1Glu3LiO4zholTqSfT29dGzYwKlTb5Ocn2fP7j2MjY0xMTlBb08vg4OD+Hw+knNJXjp8mNR8iqef foqurm5c98FwFLy/tzNOGZysZ1W6h/In4uCbxULzz/19x+j5rwhtdX0Ep+iVmynNriQ19wzVRfN4 nBC2YqpbJ0vRJ35dqrGhFadaOZg6AmMveO45Rfdicnxxz0ewYp1ScXxbvyP9vW8sNWUAmWuQugiB Rk/T6l0j8PFIXduzHrGafAXspR47qYRmbV/3PGuVpLkLuJpmw8D7IyMgNNVfeGG/Yk+ttKgphudi CzSukhl6B8y/41kQPzCYlNQDo5m6T/2fZvjR35Bq/AbCyK4oE7QcAq9+49iL4BYqwfhrf+5NIRTW VR4fIEjmMzaxiIbfpxAMqKRyNpYDW3tCvDNc4NpYmXBApS3h453hIiVTcuVWkXNXC6iawviMycy8 SaHksKkzwPWxEpdvFVEVQUejj5HpMrbj8elUxsJnCCJBlaBfJV9yyRVdtvWEuDlWZHisiKYqNNf7 uDlR5uZEGVVR6G31Y+jCqx2Yd6iPa2xo9qMogluTZW5NlmlvDBANqZy8kGM+59DTGiBbdJlO2cyl bdI55z1FU74XzM7OEgqHidfECYfD5PI5pqamePjhh7lw8QJnz51D1wz6+/oYOn+eixcvogiFwR2D aJrOXDLJ1NQUTU3N9G/0YmqvXLnCmTNn6OzsIhqJ8Ppr32d6epod27eTSqUYHR1lZGSU+flMdd2G 4SPR0EB7exs3b96ku7ub2to6Xjp8mNm5OTZu3EgsFsN1XSYnJ6mpieO6ktffeIOZmTnePnWK5194 nu7ubgYGBtB1nbnZWSbGJxgdGWFqagohFGrr6hjYvBm/P0A6nWbzwACpVIpUKkU45InWjo2OceXK Fa5fu065XObChQsoiqCltZWNGzcyn5pncnKK6zduMji4i2w2y8WLF7l86QJ79+xlfj5FOu05HKSU zM7OMTY+zosvvsjVq1fJZNIMbN7CjRs3OHPmDLlcnt27d3ulbyoX5MbNG4yMjrB//366u7vRNY3B wUEMw+DKlcvMzc0yOjbG4cOHuTZ8jdnZWXbsGGR0dIxz75xjbm6OPXv2kEplmEt6BaYnJyawLIcd 23dw4cIFTp16G7/PR29vL7dGRrAsb3sXQmCZJvl8HtM0uXXrBvF4DX6/D03V2NS/idNnzpBKzTMy OsqbR97kxInjnDx5kt27drNly5aqK3M+leLmzVvyxZdesa9cufpAJaO8jzORMP0GnPkNGPp6Rebg 7hHp/bXpuaZ/+KuO1vZHCOUDpJ8Ktq/rjCtaqn5DUU6J8JZ/f9rRW/8EVskoFICZ8oKrcze8jMb0 5coal/9qSeEK/2y69hf+P1drvLCCZBXGvE1ZD3uuPz3iFYTWw56FTgt4gprCgGiXV/dPKJ6rM3Vx 2fYscJXYmVL485cR8r7fS/n+Oa+lZl2v1+yxR1ZIZOhh6PkiDPwdbz33coeRu7nIavj+Qkqfq6qq HuatFrXhF/LG7sNfS3b89ifzzf/k563A4Dddre4tqdVNSLUmuSr5F3jEuzwH2RurRYOtE6oHFAKF 7jY/03Mml28UGB4pUCo7WJZkNmWhawJdExSKDpm8jc9Q2NQZ5NLNIsWSQ3er35Pq0wSJuE5jXEdR IORXsG1JMmUhXc+oCdCS8FUsTgWujRbJ5m0cF2bmbVRVIexXaYjrxCPezZ+uCkxLki+6qIpXKFpT BeGAV6jZcSS6JjB0QSZnk8k7BPwqIb9KPKrjN7zoxH1bwuTyDlduFT+SOJXu7m7SqTTHjh3jzJnT zExNUyqVGBnx4kkD/gB19fU0NjZiWRaappHLZpmensZ1vHg1VVUJhYLMzSUpFksIIdB0nZmZGebn k/h8PqLRKM3Nzfh8PlzX5bHHn2B6eooTJ05g2zZCCAxdp6amBp/fz/T0NMnkHIGAn9raOIn6+mqR YlVVaWxspLa2lvr6BL29vRx69FFaWlqZnplhdmYO27IAiStdDh06hOM4vP76awSDAVKpFLl8nsaG Rurr6lAUBSklhWKJkVuj2LZDOBLGNE1OnXqb8THPfaprOtPTXoFniSQUCtPS3ILf70MIr9jyyK1b 5PO343iLxSKnTp2io72daCSC4zrUxOM0NDRgGAaKqlAul5mYmCSfz1d/orzrJJmYmCSTyWD4/DQ1 NRGLRSkUCrx96hQtzS2EgkEsyyQUCtLa0oyua2iahuM43Lp5i0Ihj0BU6h2q1NbW0djYiOs6BIN+ 0uk0E+OT1fcAACnRNI1wKISqqghFpamxiWg0SkOigaamJmzb5ty5cwT8AVpbmrEsB13XGR8fJ5lM LrFSXbt2Tewc3KY+/PDDlTJXDwbeXxehlQPr6n03b+z+4tT80H/+vyKpfzmvODPPragRtyYUKbW6 aUdrOCGEnBbSGcTN1y3VVZICoTquiA8VIs9921EaLEFhyeZXSvydfxuY/OebVev6c8tHACpewXch Boq/IPXGQj72t4YNZ/xfB2b//d8T9uztqphIz9JhpkELe4QK4Wl31WzxSJZ0PBKmaB65uPHHqxJW qcWmrNCTL7sCE3mXUbYfLKRqzfqFPd+89GUBrc94j7HnoTR3j7TjA9oUBG6w9HKLb/pPP6246V4h S9cp3bgZDe+Zc4ytAScwOOQGt48Je3ZAs8abKA5tEtJePQI0cwWmj6wgwFKPJ5GBdZfgAwjXdZEu ZAsuf/XGPLou6GjyMTlncnWkSGeLn4kZk4lZk7oanf4NAS7dLJLKOgR8KueuFiiWJWOzFqWyy6nL eYpll1TO4dZUmYlkGVV3OXslX4nbkrgSvnc8haJAe5OPVMbm6q0iLQ0GWklQKJlkCw6prI3jSK7c 8iy3NRGVkSmTsuUiJYzPFGlJ+HBcF9MSnLtSQFUFve1+0jmHC9cLzGdsSmWXsekyZcuL27Id+LC1 Ujds2MATTzzB8PAw6XSavr4+9u7dy8TEBA8//DB1dbVYtkM8Hmfvvn00JBLYtk25XGbf/v10dHTQ 0NiIqihcu36dWCzKgQMH8Qf8nDt7hpqaWgYHdzA3N0coFGLnzp2EQkGGh6/R19fHwMBAlTjt2bOH 1tZWauO1nD59mmgkyiOPPEoqlarEEnnWlYGBAQzDoLm5mUcfeYRUah5d1zl06FGOHztOJBKmp7eX eE0N+XyeTCZDe3s7GzZsoL6+nqGhIYLBILt27SIYDLJjxw4CAT+OIxkZvcWuXTvZumUr0pWMj49x 8OBBGhub2LVrJ8VSib7ePoLBIIlEAp9PZ+fgTurq64hGowwNXSCdTuH3e2G+/kCAffv2MTY+zoED B9m0aTPFYpFoLMpDDz1Ef38fju0wMzPNrp07qasUoN7QsYE9u3czPj5OIBjiYx/7GDU1NfT09ODY Dq2tbdy6dYsDBw6ycdMm6hMJ/H4/Bw8epLu7G9uxuXjhItlcjng8zsGDB4nH47S2tREIBDhw4ACd nZ0UCiUuXboEeKQKIJFIsGP7drK5HMlkkoGBAZqbmqirq0PVtOrcw5EwQ+eH6OnpY+u2rQBcGBpi amqSpiaPHvT0dPO1r/0jNFUTkUikaiV7EPDhfdWUQNbWak2BJeQddsz4wM/cnJn5s18JTnznLzUn vVOxJw8IN1271vlSrZm2ROJV179luhD5/Ijl78lGsn/ZKuxbK9MvFMMt+ffMmMrmjBCFFVt8pPfn pgtnfvkX9fKr59Xy1a8IJ926ajzOWhCqdLSm48XwFy4Ke1ZNRX/+LazUPwuk/uuvCifdseJ8O3e7 2LG0vfR/X8Kz1pSTXgyYmQPkKgKbRrYcfvq3M41/96iwZx4cm+hqUDSo3w1onm6UXH6HIUBoRanV TEklVFbKN+6srfE+wUUJ+HJ/+eN64cTnK8HtHwPQCudLWvFiZZJSgnCQpk+45dWVJp0i3PyzFfpk CMWyfDsPu2rchgfnS7+OCgTEwhof3xerpi4ADPaHEIDjSm5MlBncFKK13kACw6MlNnYG2NIVQNME rfXR21F5UtLe6KNUdklnbRQV+jv9NNXquBXLUUM8ghAgXXk7nrTy5+J+RLsfJAx0Bap3/YtFTsTA 0mzIXRtDCEXcTrCWks5mL1NsR18QpMTQFT6q27AdO3awY8cOb21CsHnz5urfi1FTUwPAJz/5LKvd hfX19S193ttb7WMhcHtgYADwiJ2ULBljcHAQ8Db47u6e6rGOjts/z0KIJeMcOnSIamIL0Pa5tlXX uHg9i/sD2LLFUwHq7u5Z8vqBAweWPN+3b9+S5729XiGNrdu2IaUklc7gui6fePZZWlpaANBUlf37 9686p927d6+6BvCsdA899NCK9yEajS5qv6vapqurC4Bdu3aBlITDXkD9M08/TUdHBz09S9e2Z89e isUihs9HfX09u3btrGaP1tXV8aM/9mOrznkBu3btAqC/r2/JvL3311uLrMxjz+5dSAlzc0lM0/xA C0/fC+6bYLmKevc+KeErOYGe16zwoRks+11Xnkj8SFZK+fxEqnReLVx8RTiZNUmOVGttW99YlJhS WEVF2Gkl6//4GJU0VLks8kBYRWU5uZI+X/Wc4I5/PirP/9o/zkYizxvFl7+k5d/eqVBqR9p3SE8Q jhT6tPT1HsvU/srvl/XulBCWkFK6mcQ//rZGZl5LffufKE567bIz5SSUkiAu3f7lrGaxLVuzEp62 Yp/9eqrxN593HdfW1tTAUiuPjzj0R4/eDlJfbT1qdLRU++V/VQo8fjky8xtfVfhwCJYirZAwb+xb kjkICDe/vOjhnWHOryoX5mot7xQDh4akRAqx7ip8UOAVVVAQQF3cV72rXg0dzQFPz6Pyg92c8D4a 7yavsKElgCvBpysrCzj8Ncbije/Om+DdXbR36+NOh+9tE373cz/oTV0IQU93N60tLdVg83vsYc1+ 77UNQrB1yxb6+/oIBAJrfof8fj+PPPwwUnr6c/eH1eaw6DUpcRy34v5+sJwF902wnMDWC6I4nBOU lxYLFJot1ZqUqyeugpp2JfOOr/NKue6XX7VkS94jHu/evxDCkVKOjxcaXM3XUus4zppzFfasd2NW veYFoTilspTSQcqgWPKtXtpWSumGw+6S1Dyx5ddMKeXx6ekvTUqr0BAsfGuzXrrcumbpHdVnl3yH LhaDT4yAheC2eKdtpxxj23/5VvmtXNoon/w/hDXxKLK8OiESsKq1avF8lfC8FX7qPycbf/N513Vt IcTqpaddG5KnQdW82KDlpXI+TLjld0lKcMpq6Z2WaPaVh9Ty0Kc/nEkJCVKRrq2955/F1T7QwrDN wOCfFWNfmFLsibu3gq7jA0epVGZ8fJxIJMKGjg2USiWkdPH7Ays2m+X6VnejWwVgfARyCOv44Ydh GHelIfZhwOfz4fPdOStVCPEeiNUPPu6bYOXDP/udYHlqs54/9mWQuIGBi67aet5WgtddvS1lhp+c dnwdRZuOvKPoprDT6mLV8LuBEMKSUo4lk8m0ptkxx9H9wqsosyZsWzUDgXIql9PKtm3LcDhcC+Xw aue6ru64rpuJRltWSBQIIezzUo42zs2V8+r/mnViPo0FK4RcXjvHFMIqKouJFSA0Tbq6HnKEEFJK +WLq5h/MhFJ//BW1cPJJxRzdAMKHtPV3Z91CIjTTVWvHiuFP/Yd84muvV8nVWpA2TL4Kcyc9ArBm 8eoPAsvWYxc9C12oc9WlCqfQbeSO/BLSWl0z1FcPQlvZ7weF1ZL9hADXues5OFrTkUL8Z98UVmrd dvXAwKBYLPOtb32Lt956myeffAKzXObIm0dJNDTwsYMHqa1dMxphHetYxzruCfdNsOJdj6fk9f/y taJZ+HcoPpFL/MN6x79Nd9SoBSCsvMC1BaRQpNAWbTLCryjlunz+rmQBKsrXGSlljruzG8vFatlS ygnunC3prqVLtEUIU0o5Pjo6mgwGlXrTVKKq4+hrzMNdog+qI21bJBsa4rnKOqSU8lwysvdfknz7 DzT7Vqev9NZ+Lff9vYosNoFdD3KZpUNxQJl1ldCYVfOZF4r+Q2+Vgk9OS2nKReRKKI5moiordQyk 4+mIvZ8QcNv1uAoUn4swlprLpAMjfw41mypCoQpLrYGuQN6BOPvr703W4b0i1F4pqF15Q6XjkcTS zF3JRbhG69u5hl/9esn3yKwQherEA0IUedBs2H+NEA4bJJNJXvru8y6qKrK5vJiZnaNYKhGNRFDV B0J3eR3rWMcPCd7TL4ro+ukSMCalFKmJCQVpJhR71tt5q9ulQJPSdVXVAlAdx1KDwSnR0nJnBdDl Y91niZEKebpvjadK+6KUcnR0dNQfjBK4o+WoAtsO2g0N8ZwQojq2EMIGRkZG5KxhTE/n7J+4pNSX vxEwj7b7Cq9txC0aKJW6za4iUEJmKXjwYin4yIiUmiulLgWWWEKuFKXkU/UJtJZzcPHRfUoFzgAA IABJREFUu9bDErhI9d43e8eE6de8kjVOcUWvltE5b+hNbyvWre4lRzJXYPx7EO4AXw0UZ+8+LGzi FYj0QNOj9zhZsej/ezAjWdmlArWuWVHQf5fLJTTH0VreyDX86tcLoc9dW5ylKqXMZVrMmbp1kdGP DLmcyYYN7ex96CHlt37r/6V/40Y+8+lPkUqlOHr0KLGaGgZ37Piop7mOdazjhwTvyy2bEEKOj4/P AiEppV9KKRVFKRmGk83n3YIvHHZcy3Jc15WNLSlbiNaPMCDo/rBAtCqP94T2dlGU8vzIxEQ8jRZo zImPD+cinx1edVyrqAjpuR4XuViFlNLRdT0nhJiMNm3O5i78/f8UtMZ6RGn4IEgDpAZSRUplZeyY gtQaxqQauwviuayta8LYYc8StSIbEOFoNVnL6Dmult75pHALt53vdhlufBsiGzyh0fK8J3khWD2G aTEcEyYOQ83GexKwxSl5emWqD5Jvr7Q+rTVsOXn3YwCgINXwpBV6/L/nol96sRT75Iyw0wuWKyGl dFzXnekSXR+kWuo63hUmmqbx3OefY3DnIK2treTzeWzHZmDLAC3Nze/exTrWsY513CXeN5t4S0tL Qcor15LJWp/jOG4ikSgBTn39+h37ahBiiwnMSnkynU4nwqWSW+O6rl9VVUPYS7La5OKYL6m5jm0r Zdd1ZxKJRHrBQhba9LV3GBr/UiH4WJfQY/2aObEbd6ZRlG41KuZIkxBKACECSKmg1V4vxj7z323R XF4WN7YCEm2lSUywGrkCpNDcgppt+H/eMPLHjqjutY8vaWNnIfmOR3gWXIWK6skb3Ik4CSBzFc79 q9uyFncF6amsT7zsxaAtGUMKhJCg339wmtAtqQRvOfqGC+X43/iTTPRnz0mpOYvJlSalYwsx19bW lr5jX+v4kCBpbm6mtbUVAEVRaWpqRtf1dw3YXcc61rGOe8H7WzlX9JWBe3L9/XWHEHssYB6Yl1Jq 6XQ6ojjOmllnlhY0Gxpq84tdj14/QgJJIHn+/PlztQ21Z6S0gmChuqau2xNxw71WhzS1om/XDVP0 pN816aDlxy17/Peu6qXr++8qdEgxyo5qSEvryJuhx17wZ2Z2CTe7NGpY4GUVLuBunbfShfytVQ+5 VJMPVjlorplB6Qo9h948pJi32sG9N+lTLTFm+7d8t1T7C3+aC+yZhIAECyGsKrkCcv6InIlEWlLL 3691fHRwXRfXdVGEwDB8nmCjlBXJs9U/BmXTxVhDckFKiWVLNFWsyDr8sGBZXgjoD1P2YrFYxDB8 qOqd1ySlxDTLaJpeFRS9X5TLJooCun5vmXrlcglVM9DeZa4rIKFU8rSi7rXEi5SSfD6PpmlV0dH3 G47jYFmWpwj/AJWg+UHBelTnA4RKjNb8e+1nYGDAmpycnHFdpVUIv+IoAdMxYlNFuW3SG8cSiyxX QtMcm1XoiWj5W4XChV/694o52aGaN3d6bseFFDupghTIBQOXkI6v7S07sC8j7LSabvpHrwpR8Bm5 V76sWNPd4H5gnzVFKBJNSlTtHlzPAvSG67nYT/yPIGpRcyYHkI63Q8o1BWOkI2ovSOk7Y4UemsrV //wlx1FN71reNoRJKaWmOSnTFOPRaPt7dimv44ODbTu8cSZHMm2iawq7NkdorvfhVEIhFeGRq6Pn 0uzdEiXoV7EdiaoKFCFwpaRUdpmcK5OIG4QDKrYDmiZQhCdW6jigqqBWyFcmb/PCm/Ps3BgiEdd5 4WiKnRvDdLcFsGy3StQcR+K4Xl+iooQqBLhSIvCOSzzpiKujRWxHMtAdWjHeR42ZmRn++FvfwrJt enp6ePzxx6uEYEHkcqG8iaqqVaHIl156iW3bttHa2oqu69XNXtN1NFXFsiwc10W6LleuXKGlpYV4 PI5t2+i6jqIo2LaN4ziomoa2iHwtvK5pGoqi4LoulmVx9eowoVCQzs5OTNNzKZfLZc6dO0dPTw91 dXVeGRspMQyjQu5MDh8+zJYtW+ns3FBd18I6dF2vqovruo7ruti2jaIoKIrCmXNn2bRxE5FIBNM0 MQwDIUS1/WJZhoV5G4bBuXPnOH78OJ/4xDO0tbVX+wVQFKV6npQSy7JQFKV6HRfGX5iPEKL6Xixc C8MwmJmZ4ezZs+zfv59AIFBdw4Mi5PmgY51g/RCikrE4NzMzU3RdNyilDDqOY6iqrQkhFCFUdcEN 6aqqpeuBmbWSCAKbfvMYZ2c+b/n3dpjB/m2KW06obrIWa7ZBtafqsKbiuGU/wc1ncrG//W1LNhQ8 rTPVmW/4+rfi4td+3yi/+RVRvvZVYc+vLoG8GhR/UaJlhFtoXFN/DJCKL2MHdlyTMuq6vi0n1dLV fUhzFQU+AUJ3QSKFUZZKcKIUePh/Fmq+fN0MHfoPWuGc1MzhGTe4qc1x1ygmoqnS0TqLprYpJ0Re EVZaEaJq+RKAVBTFVFV1tr6+fqZCmNfxgEIIuHCjwGzK5uHBGDfGyxw9m2FbX5CrIyXqYhqOC6ms zY3xEtv7QtwYL3NtrEhjrU59jc7wWAlVFURDKrYluT5RomxKulv9dLUGODmUIVdwCQUVHh6Momsq pbLLpRsFaqMq2bzNpZsFOpp8SCG5fLNIokZnQ7OPU5dyWBZ0NPloafCRzFi01BsMjxbpaQswPFJi MmnS3eonk7fJFx1ODrkk0zb9nQF6WlcvPPBhI5fLkcpk2LplC0MXLmDbNoODg5TLZcrlErqu88aR N+nq7MS2LUZGR9myZQvnz5/nxs2b1NfV8dRTTzE/P8+xY8eJx71khKPHjmFaFnt27yadTiORvPji i5iWSW9PL1u3buX73/8+U9PThEMhfuzHfhSfz08qleKFF14gk83Q1NjI/v37ef2NI+TzeWKxKK2t 7Zz+0z8lX8gTi8Xo7enjm9/8Jrt37+bAgQMcPXYMx7bZt/8hUqkk586+w/nz71TV26WUXBga4tiJ 47Q0t9DZ1c3RN48gFIUDBw5y/dowt0ZGiEYiPP74Y8zPz5PJZDh27Bjj4+P09/cTCPg5c/YcHe3t PPLII+i6TiaT4YXnn2c+lWL37l28+ur3mZmZRjc8snry5EkuXLyIbVnE4zWk0mke/tgjhMNBjrz5 Jq7j8tBDD/HOO+8wMztDOBzmkYcfYXh4mI0bN3L16lU6OtpJpzOcOHmSeDxOV2cn4xMTnD17luFr 12htaeHgwYPVskLruDPWCdYPKSqEKQfkZNXKhDLKqBFOhX1qRbg157qFmpqaNa0sFdfWtJRyNjUz k7JtEQNLgO0F3dueMr9UAy4E5OKYLtctuf7t//bGDW78RuOF/zhkzH/ri4LyZiHNKGv4HCXClSJw y/Zve80J7Ljsy/zpFxRnbhPSMZa3kUIrWVrnS7nITx+XElmIfuE7YetmCGd+E0K4uNJFYiGcElLN uFpjDsDx98yagQPn8+HPXhF2WnFErGwHH8+5/gNjPp9P2LaIyuVaZ1WYqM6EXrk4AEJVXUsIIy9E qQCBbH19fW4t6Y91PDiQSKbmTBK1PhpqfbgSLt0sMDJlgvRqBb76VpqP7YgyOWsyPmNy6lKeRNzg xkSZqXkLy5bsHYgwdD1PLu+QTNvsHQhzqVJDcC5lsWNjmFdPpnhoawRd8z7ErQ0G6ZzD6LRJf4e3 QTo26Jrg9OUcbqUI9GO7Yxw7l0XTBJNzJrGgwqUbRdoafEgkxaLDqUs5Gmp1TEuSK5j4DAXjvcvn vm8QQpDNpBkbH6O9rY35VIqpqUmymRy5fI5AIEC5VKStrY1vf/vb/ORP/iSRSIRXX3mVwR07GB4e 5uaNGwRDQYLBAK+/8QYAY2NjdHV1oiiCW7duEY3FuHnzJs899zleeOFFHMdhbGyMj33sIH/4h3/I pz71SXw+P5lMhitXr/CpT32KN954g2g0ypXLl/nkpz7JlctXGB8b5fSpU3zxi1/k+6+9Rl1dgv7+ fnbt2smRI0eYnJwkEo3y8svfo1gs8szTTzM2OlItPlzIF3j5lVc4ePAAXV1dvPDiS9TX1xMIBHjx heexLIvt27czOzfLyZNvcfPmTRQEf/Xd73Lw4EFee+01Ojo6yOdzxGIxlIpEzaVLl5hPpTl48CDf /e53aWpqoru7i8aGBADn3zlPNBZBCMHU1DQ7dw7y5tE3OfToo/h8PobODyGlZHh4mGeeeZqrw8MM nT/PtRs3aGlp4eKFiwQC3mfR5/Nx9M03EXhVDG6N3KJULBKLRVG1dd3ku8U6wfprgEWbvcN9ZkIK IdxkMjnjuqbfcaTh6WBpYpEclmBpwLwECgBdoqt0MyVfMOL/27Vg9ju9mj0WAmU1yVGBorsl377x UuiJKay08MU+ecOfeblVyJy+vI2t1JdLkU9fc0SwLLBE3n8oWd7w1G/ESq9jqjGtpEQbISIcUVdy lGi56sZbRRhW10tuItFWnpmZmVAUx1ZVx3AcVXcqumcL0hhSIl3XtRVFMRVFKbmum9W0gFlbW1tY t1j9YEEgaKrzcXXUIp2zGJ8pUxPR8BsKQb9KOKChKgJVWRqaFQ4odDQFSWZshBBEwxqa4rn1ErUG DbU+hsfK1cpvruux9WofEiJBlURcI+BXCPpUXBdOXcrRVKdj2xIpJbGwSlOd7uViSEnZcsnkHcqW y1za5uZkCV0XZAoOjisJBhR623xcGytx9nKetgb/A1OmJxqNsW/ffjZv2sRLhw+TTCbJZLK4rkss FqOltY1w2NOD1jQVRVGJRqO0tbUxMz1DNpdj6MIFfD4Ds1wiHA6xe/duzp07R6lURkqJIgSJRIL2 9nZc18GxPWFg1/HciAuQUqIqKj7DQBEKjuPS0NhAoj7BteFrAMRqaujYsIHgWydBOhg+A8eRuK6s lqzRdY1Tp06j61qlTEulfySu66LrBqqqevF+qoKqqjiuF4qpqSqq4h2TUuK4Lo7jUlNTw0MP7aex sZErV67y3eefp7+/n0gkgpSgqgqa5o3n8/nwLYq98gcCtLa24rgOQii0tbVx5sxZzp49y9TUJKqq kM1miMVitLW1MTExQalUQgjB3Nwck5MTZNLdDF+/jqaq2LZNsVhEKF5ZnNHRMd588ygtLa20td29 M+KvM9YJ1jruGvF4PDM6OjqsxtSQXtYNRTFV23YM0xSKqqpahYQI4fkoc62trdML5K4jRmosp1zL xr+clq7PXw0Gl8YqqvgFIexZBQFl2Zss122fq9aUXHy+MIWw0oqoBLkLYSvlcqnk3/DpcSmlXpqZ kbZtR5F5FCe/9LO+SPhWSulkAjXpBMiGhoaclLIIKAwNiam6Ol3TrBrV0nSklKlgMG3PzhZ7e9Mu 7HbXg9d/cOFKaEkYXJ+w+OYLMwT9Cjs2hiiVXRwXckUXTRP81ZEUQkDAp9BUZ3DxRpHmep14VEMo MJ+xq2WuFAHzWQtVAVUV5Msu3z0y7xWiTdv4DEk676DrCu1NAVRVMDxSxHYluiYYHi0R8KsoCgR8 KrMpm2Dleb7g8MpbGYJ+L2Yom3MoW5LamEcELVsydL3AxKxJb0cA2/H6/KgRCgXZu3cv/X19+P1+ tm7ZwksvvUixWGL37t3U1tYSjUZJ1CfYvn07f/In32bnzp309/cTjUZoa28jFvNKwV65coVNmzYT DIW4cf0GqqLS09NDoVgkFAoSCgXRVI3Nmwfo7e1lenaa5198Ecd1q7X7FEUhk8nwvcPfo6W1lYGB zRiGTiAQoK29HUV4sWCqqtGxoYvmpmYcx+XipYvs2bub48eOMzY2xp49e9i1axeHD3+P2ro66uvr KusN8cgjj3DkyBFGR0fZvm0bb1Ssbo88/Agvv/IKbxw5Qnt7OwcOHMAf8NPX24dpmozcukXHhg2k 02mmpqbo6uzEqMy7r6+Py5cv8cILL/DYY4cwjKVZr11dXdTV1QEuAX+QUCjMxo0biUQiTExMEK+t o7/PG8fvD9Da2oamG9TV13P8+HH8gQDNLc2UymXPbbhpEx0bOiiXy2SyWaanp2lqaqoS4XW8Oz76 b986fmCxyPW4AIXblaXt1eK6pJTa9PR0nRBmFFOEbEW5Uw0coUnpoLtZ21ZNVXXjjqPoa5wvVNW1 dD14o7a2Ng2QTCZjbqnUbCuKvlrGpJS61FzXclR1vqGhYfZOZGlhreuuvx9cfOMbv7ulp6f/rU2b BnzgfUjH5mAmBabpomkKui5AUrU4OY7EcSSapqAoXqKhd+7tjEEhlkq5LTx3HMm10QKZvENTnUFb o78SqXe7f4FH9OB2NqKuKSji9jkLyY2W5dUp1RSBULzgeynBZ9zO7rJtiWW71EQ0NnUGCQcfDHfO QgD1AizT8taiaSsCrE3TQte94PPlx2zLRtVUFEXBsjxXrmH4llQvW2hjmianT5/m6tWrxOM1PPvs JxFCMD09zfHjxzh48CA1NXEURamOsdgStXhsKT2rlKIoOJVAc70SfL4wp8UZjF5guYkQXiC5ZZoI RVAslnjz6FF6e/vY0NGOqqpL114ue0RQCCzLQteXZkbato1t20skRRau68Lcl88bwDTNCmlUl5xT fT8qQfCapq24zuBZYS3LRtfV95yp+X5CSkmpWMSyvcSDVCpFNptb8lmTUhII+BkdG02Njoxt+9KX vjT6Yc1v3YK1jvvGKmTD4V2EFyputCkpZXJ+fj4oHCcopQwrir3iW2vbStkXsNLRaFsGcEczmZyv XK5TbFvDWEqyXFdzHMdJxePxauHu2tratJRXSrOzNcZapX2yxaLV2dlZfjfitE6sfljgZaxZlrfB N8R0WmpVQFQ26YXH7fM9TuRWnnn/eJvTnURvBa4r2dCgYdoK8YiGoblVt+HC/6vD63fxuYtbiIV0 QhaI3fJ5CJA2VjnD/IcomrN8034vfRTvIYghXyis+rqUkvr6OsLhEPX1CVIpr+SsoigMDu4EIJ1+ D/J09zJJvLU5jsPA5s34fD4ymdtlzBYy+YQQFP9/9t48yo6rPPd+dg2n6sxD9+l5brVGS9ZgW7ax ZGObwQZDsCHBQEJICCYD3CRfxktCyF3hXjKQ8IWEXC7hfgECJDhxjMGWLTuWbcnWZM1Sq+d57jP2 GWvc3x/79Ok+Q2uw5Snev7W0tHSqateuOtWqp9/33c+bX/Ejzq1xjrU+f615g057SUzTYKlWsBSu KEolqXEmNqu3uX2t4QKL84ZACDEAJCmlS2Dqp2p/x9VRJUppHMDSGvtSAFa5EOLebJxSKBYXI4hG I+z/W8pesg6HA6ZpglIKn89XjGpomoZkMgm/3w9FUZBKpWAYBgKBwBX5Ai0LsoVpG/m8hkwmDVV1 wul0Ym5uFgsLEdrY2EBM04TqVAG6HKUwUFNTi0QigWAwWGJrMD83h/mFRUoEka7r7hRWp2xWR4qW i65XohArL/HlCE86kwEohdfrhSiKr2j5fTweRzQahWVZcLtdaGxsKqbjys9ZLsBisRhUVYXL5YJt 25iZnoZmGAiFgggGAriUDL0Sls+dSCQRiUSgqiokScTc3BwoCGpCIQT8AVAU7hulIIX7tTxfQggi 0SgAIFxbW9y2PP7qfde61xQU2UwWkixBKaT2lreZlom+vj5IooQNGzbAti1EIlE4nU74fL5XLVrf HhR+DaEouV/LotayLOTz2aLVxOsFF1icN5SCILqi4vCr2ZfDWQvLMqHrOliUyS4U7jYhmUyACAS7 du5CJpuFqigYGR1Ff18/tmzZhMamJpw9cxbRaBR79+4t1gVdCZqm4eixozjy0mHccOON6OjowCOP /AdESbF27tgqnT5xgoqSROobG4tpjve//33Yv38/3n/ffejs7AC1mSj68aOPYnBwxF63YZMtikQw DQOWbUFRVNTX1WF8ghnydnV2QpIkDA0NQZQkdLS3IxKJYGFxAa0trdB0DU8+8QQEQcQ9996LhoaG VySwFiMRHD1yBLNzc7j1llvgdLowNTUFRVHQ3NyMWCyGaCyKcLgOdeFw8RyCIOCFgwfR0d6OzZs3 I5PJ4LGfPIbW1jZs2rQJbte1sQIghDA/p3PnsGvnTszNzeH5557Dps2bYVkm8poGp6oim81ClmXE 4jGkUyk0N7dAVVWMjo5icHAQzc3NyOdymJ+fRzgchup0YnZmBqZpoqa2FgG/HxMTE5AkES0trYjH 44jFYgiFQnA6nXjmmWcQCASwfft2CIKI6ZkpeDxeNDc3Q9d0nO8/h46ODgDAyMgICCHYsWPHNbkH b2eW06qWfRVt1q4RXGBxOJy3IatrNFh6gVJWHKXpOi5evIh13d3FAuOR0THkNR2iJCGfz+NCby+6 u7tRFw4XoxVrRbSW62tisTgikQji8TgM07YdDhXvfOdeSRAE6Bas6Pys6FBVwup9WOCWvRSYsehy nREzgRSFhvqgGI0s4sVDL0LTNPj8frzzzneir68PY6Nj2LFjByRRwLnz57Fp8ybIsoT9Tz2NQDAA v88P0zQwP78AURCgadorNo/s7uqCruvwDA5i165duHDhAqampmCaJrK5HAYHBuB2uzA6OoY777wT btdKi1JqF9KmhftXU1MLwzCQTCRgt7RcM/fwWCwKXdcRCoUwNT2NVCZTFNl9fX1obm7C8NAwAsEg RoaHWWH4zCz8gQAi0QiSySTq6uqQz+cQjUYxPj4OfyCIsdERSJIERVFQV1+HZCIBUZSQyeYwNjYG RXFgcGgIN998M7LZLFwuFzMRNXRk0hmMDI9AEkWEw2GMjI4yWwRRRCAQwOjoKHK5PFwuJ49ivQrI crHjGwAXWBwO522PbdlFgeWQZazr7i6mZ3x+H6KRCAghqK2pgdvjKbw8FZimiQsXzmPjho1ob2+v +iJcXlJ/++23Y8P69airr8P5c+eJaRk4ffoMMpkMbAi0o6ub9vddJBs3bYRhWDSbyRLbsgpVYCtj CaKIuvp60tTUjKVCDZFUcOg+ffIUpiankEgmMDk5iUQyba5b1ynedONNxLIs+Hxe9F3sQygYwm23 vQMf/8QnYFMbjU2vvNE1Zd4lRcfwhYUFdHV3Y252FvPz8wCA9es34Pjx49DyeXjc7uJ9ooUWRbZt Q1EU3H3XXRgbH8fA4CDa2tsRCASuibiwCq2RltN2DfX12LR5E5yqE0PZLHRNx9LSEhRVhcfrRc/6 Hpw+fQaaYaCrsxNulxs2tdHf349MJouFhQUQQYDH60UoGMTU1BQu9l6EKIqora1FOp2GKIroWdeD kydPQFUUtLa2or6hAeFwGIcPH8b8wgJm5+YQi8XQ2NhYqCNiyLIM3TBgmgaAN4dhLOfq4QKLw+G8 bSEF76SxsVFQStGzvgeWZWFsfBxdXV0Ih8PYtXMnTp48CVGS0NrWilBNCAP9A7AsC8FgAHv37IUs y5cUAoIgIBRkdUWiKKK7u4ucOnUKc3OzCIfDkGRF2LJ5E4nHFtHU1IR0RrOef+F5KeD3IxDwF8cW BAFurwexiUmMjo3C7/MjFArBopS1mcnnbadTJU53E/H7fWhpbpbOXzgPVVWwadMmtLa2IplMIp1O weFwoLOz81ULGEopJEmCy+mEJEmoqa3FyPAwTNNEW3s7Zmdm0NfXB0VV4XSqJedTnU6MjY/DMHTU 1dUhHk9gcXEBXq+3pEXMq8XldIGCpWoVh4M1/G5qLqzIc2BkZASZTAYtigJKKWTZAa/Xi4Dfj8mp KSwtLaG9vQ3pdAYejwdOpwtOpwuyzOwd/H4/mpubkclkUF9fj1BopWWPx8PMPwOBAGZnZlAXDiOd yUBRFHi9XuZnpSggAEZHR9HZ2YF0OgWX0wlVVXn06i0Mt2ngcDhvC5ZtGjwenzI/v1D8XNN0jIwM Q5IltLe3QxBERBYXEQgE4HQ6Yds25ufnQSlFQ0MDDMPA7Nwc/D4fAoHAK5oLpTZmZ+cwNzeHxsZG ABQejxeJRAJutxvZbBZz8/NobWlGfX3DquMoZudmsTA/D0EQEa6rg21ZxWJs2eHAwvw8JElCIBBA IBBA/0A/ZElGa2sr5ubnkEln0NbWhlAotPYEr5JMJoN8Po+amhrk83mMjo5CdTrh9Xhw6NAh1NbW oqenB3V1dcVU5HJt1NzcHARBQG1tLWLxGHRdR3tb+1XVuF0KQghyuRz6+vrQ0toKt8uFTCaD2tpa EEIQi8UwPTMNj8eDYDAE27bhdDqZyHG5MT7O/LYaGhuRzWQQiUTg8/ng8Xhg2zYkSYJhGHA6nZiZ mYGu62hpaYFNKVxOJ9LpNAKBAEzTxNTUFAIFkT09MwOX04mGhgY4nU7Mzs7CsizUN9RjYGAAbpcb XV3doPT1rx36r8Ry70XTMhK6Zmx94IEHXjebBi6wOBzO24JlgaWqbmVycrIQqZAhOxzFhr+WZRVX khVXkQHFlWW2bRf/vZzeWtPEbXmFmW2XWsEDxTFWWxsUVwAWjK/KV96tjmIJhDBDiSrRjUIHp1Ur 25ipll1wO8eqca80OlLutbSa5abFoJQ1oiakOId8Po9oJIpwuBayw8Hu7/JxhECUJNY0e/neF461 7Suf2xXNH6y2TiiIUEJISf3X6voz5k224iNFCCn5rOh7tvy9FMYQCCl9LpbnXzjALkT6rEJD5uJq z/IViJYFrdBoWhLFUtOQ5Xle4rm70vuxPK9XO07xObZt2KtX8BXOsdb3WKxbpGBdzV7h973sS0YA GKYJ07KK3xkFCt0CfACliXQ6svWBB7gPFofD4bwmtLW1oqWlufhCHB4ega7rqK+vR3Nzc7EVSbWl +OVMTk4iEAjA6/Wu2o+9u5aWlnDhwnl0dHSyFXoFEVI+7mroKnG1vG+24PO03GA3Ho+zdFZLCxMA q8a91FxJQVyBUkRjcaRTS8UGxZe6TkIIUqklSLKD2UWUbZ+fn8fU5BTCdWHIsgzbtuHxeKBpGgzD QG1tLSKRCEKhIJxOV3HMSCSC8fFxEELQ3NyM+vr6kvtQzUCz9N8CgOpCbPW+5aaGMExzAAAgAElE QVSTgiAgEokgm82iqalppZCeEGj5PAzDgNfrxeLiIvL5HFpb2y77LFiWjdHRESwtpdDa2oJMJoNA IABd1wumqAZCoRDm5+fR2tpa8d1Xu5bVAg9gYsHQdeTzeXg8nhJhWO06L4Vt28hk0sU0Z7kYvNy9 X32eiYlJLMzPo7WtDfX1dcXnLJNOY2FxEc3NzVAcjopj8/k8BgYGIAgCurq64HK5sdqs6lLP8urz lxqNJpHJZGAYBrJZZsvgcDjgdKqYmZnG4uIlb8s1581jycrhcDivIQ888DN1oVDNQ+FwnbTsWh2L xfD9738fqupEwB+Az+/D2NgYdF2Dz+dDLpfFXKEQ2evzwyHLxYhNJpPB2XPnio18FxcXMTs7C0li flLPP/88Dh46iK1btxWX+1Nqw+vxIJNJY25uDvF4HKZpYmZmBvFEHLIsI5/PY2J8DACBKIp49sAB DA4OorGxAbIk4mJfHyzLQmNjI9KpFEZHRyGKImRZLnhrLcLpVKGqzuJcl/vNTU5OQJYdmJmexvMv vACP283EIQiGhoahaRrcbjcymTREUUYmkwalFI/++FHEYwk0NNTD6VwZN5lI4LGf/ASGacDldOLI 0aM4ePAgFEXB8PAwzpw5g7a2Njz+xBNoqK9HbW1t8dhDh17E0aNH4fF44Ha7YBgm5ufnkE6noKpO LCwsYH5+Dm63G4qiYH5+DrOzs/B6vNB0A2Ojw7DtFQ+v5XHz+TzGx8eQzWbh8XgRj0eL6Tevx4O5 uVkcPnIEc3Nz2LB+PeTCdwoAhw+/hOMvn0BdXRjj4xN4+eUT8HjcxfYw4+PjyOVy8PsDJeccHh7C s88+C1Vl9VTf/d73YOgGhkdGEI/F0Nvbi6amRjzyyCPYvXs3JEkqHpvL5TAyMsKc0h0ydF2DwyEj mVyCIAiYnp5CPJ6Az+vFuXPncOjQIXi9XgSDQcRiUczMzMDlYinNqUK9mCzLcLlcxXOU/xkbG8NT T+0v1Ib5kcvloaoqlpLJ4urSSCRSvO6xMXY//X4fRHFl7rOzs3j88Z9ClAT4/T6Ew3XF+7KwuIjn DhwAQOHzeUvmQ4iAZ/7zGYyPjUJRFITr6uB2u4vbNd3A+PgYUqkU/H5/yf0q/7Pa703XdRi6junp aZw/fwGUUtTU1EBRHFhKpfJLS6l/eOSRR5aq/PfwmsAjWBwO522LYZpIpzNQVAVujwuHDh3CxMQE 8vk87rvvPoyNjeHI0aPYuXMnQjU1UBzB4rGZTBrnzp5FZ0c7KLXxwx/+AB6vDz6vB3tvvx1j4+OF gmgF+59+Gol4ArlcFg888ABeevFFDA4NYefOHYhEojh+/Dg6OjtQF65DV3c3zp87h2w2g3e/+z0Y GxtDLpvFrl07oTgcGBwcRMAfwObNm/HTxx9HLp+HbVvYuWMnntr/FGpqatHc1IT3ve99xSiAaZoY GhrC+fPnIUkiOju7MDQ0CGrbGB0dhcMhY3ycXffNu3djaHgYN9+8GwcPHsIdd9yB/v4B5LI5bNu2 FV6vt3gPhkdHoBs6br3lVtiWhXw+j7ym4eSpU6gLM6PUZdsFwzBK7n02l2fCzOVEKp3Gc8+/gOGh QbS1d2Dzpk0wTQN9fX1ob+/Ali1b8MQTj6OnpweKouLMmbOYnp7CzTfvRjgcLmnfMjc3i5MnT2Jq agZ79+7BkSNHIDtkqIqK66+/HkePHkU8kUBDfR1WV8lYloWJiQkMDAzi+uu3Qdd1jIyOwDAMdHR0 IJ/PYXx8AhQE737X3diwYUPx2BMnTqC7uxs7tm9HOpuDoeuYmp5EIp7AdddtQSqVgmkaiBfc5Jeh AJ5++hnML8xj29atMAwNL798Alu3bUNvby/a29qwb98+1rNxebXixYtYv74HhBA8sW8fREGAz+eD wyHj6NFjCIfrsP36bbjn3nvXfO6j0SgGBgYQCoVQFw7j+MsvY+fOnTh06BAaGxtw9NhxNDQ0oKW5 uSBYxyGIIu66805s2rSpOM6F3l74/X7cd98Hik2u8/k8FEWBbdmYmJyEaZo4d+48PvWpTxWFrGHo OH3qFD760Y+iq7ur6PGm6zqcTidisShOnTqJsbFx3HPPe7F167bL/zAXsClFLB5HPJGAoiro7u6u SNG/XlwbkxEOh8N5i+J0OlETqoHD4cDQ0BDe8Y53gAgiIpEIDMNAT8963HXXXQVn8RUaGhrh8/lg WTYMw4TL5cGunbuQy2lwyA5s2rgR69dvQE1NDUZHRnD73j3IZrNIJpOwbBvbt2/HbbfdBrfbBZ/f h67OLszOzmJ6egp5TcPk1BQMw8CmjRuxdetWdHR0wu3xoqOzE+lMGrqmY3Z2FnffdSfisRgSiQRq QjW48cYbsLi4WJJa0TUN8/Pz0DQN4+PjSCaTuG7Lddi5axcWFhdx5uxZ7NlzG5xOFQuLC0wYmQYW FxdQW1uLTRs34vrrt6GhoaHkHliWBYfDgZmZGfz7I48gmVzChvXrMTQ4iHw+D0EQIBaihQKpfN14 PR7U1oYhEAFuN2tp09jQgJGREURjceTzGkZHR9B7sRehUC3e8573oqWlBaFQEIQQzM/Pl9R1AcD8 3DxSqTQSiQTGCinIW26+BbIs48TJE2hrb8fNu3dDVUv9pWRZxsaNm7B161Zs3rQZoihi44aN2Lpt KyYnJ3Cx92LBlFRBOp0uOadhmhBEEYdefBFPPbmPRTVVZzEFyqItIsQyXy8CoKamBpRSRKNR+P1B JJNJ7H/qKaiKgoaGBgQCfkSjURimiZ6e9dhy3XXYvn0HFhcXMToyAo/HA8PQYdsU9Q31aGlpxlJq CbZtFbsTlNPR0YGNmzZh+44daGllPRH37dvHVjMSAW2trdixYztGR0dw+vRpaLoOVVUrWvTYlgWh ELESBRHpdBqHXnwRg0ODoNRGW2srbr3lFsRiMdjWSrE+q7NjDbgJWKpzbGwMhw4dQiwWQywaQTab QyQSAauXtNe8lrVYq3vA6wkXWBwO520LAVBfX4cbbrgBTU3NaGhswIEDB5BMxOH1eiGJIjxuF8RC mm0Z27bR19+P3gsXcOTIESwuLkJ1qnA4HBBEobCiT4YkipBlB8LhMJ7avx+macLlcsHhcMDj8RSb +cqyDNWpwLYtjI6MQCAEqqKCEIJQKIT+/n709/djcnISx48exYkTJzG/MAePx439+/dDFEU4nU6o qgJVUYpF+ctkslkMD49AEATIsgOU2ujt7cXxY8fg83rR3taOZ575T0QiUdTW1MK2bTy9/2lEIlEI Bb+ns2fPYnJysmTcrs5O5PN5nDhxArbNioubmpoQDoeRSWcQCoWw78knkc1m4HKXOrMLAmu83N/X j/n5BXYPVBWKoiCZTGJqcrJQHwQ0NjRianIS+/btY2lCrxeSJOL06TMFw9AVRkdHkclkWOshoDgm CEFjYyMGBwZw9OjRquaqfr8fc3NzOHHyBAghUBQFsiRDlmS0d3RAVVXU1YULKz9XuH7bNpw7x+6P 7JDhcMjYsGED9EzWliUJ2WwW+/btQ7AgDJehlCIQ8IOA4Ny5c6DURs/69RgdHcW6desgyzLC4Tpc vHgRCwsLCIWCSCYSeOnwYfj9ATQ1NUGSJHR2dsKhOCDLrN5IFCWkU2k8+uh/IBqNVDz3LpcLoBSH X3oJ2WwW3d3dOHP6NK677jqoqoqBgX4cOXwEoVAI69evh+JwoLampqRODgDWr1+PyclJPPzwv6G3 txdOpxO7du5Ae1tb8WfAoTgqhKUsydi4cSOefPJJPP3004hGo2htbcUNN+yCz+fDxMQkYvE4VFWF TYFMJot9TzyOmenpimt5M8NXEXI4nLcFy6sIN27crAAoGE8KSC4toaGhgdUUJZMYHh6C2+1BZ2cn stksKKUIBoMlY7GIQwyzszNQVRW1tcyB3O32IJ1JoyYUQjabgWlaCIVCiEajGBsbRSAQRHt7O5aW liBJMrxeT7Fo3ev1IpfLQdN0JJMJOJ1OtLS0gBCCqakpBEMhyJKEmZkZGIaBzs4OZLNZTE9Po7Y2 jFAoVBwnlUqVWCIwb68JpJaS8Pm88PsDmJmZgWVZaGtrgyRJGBwagsftRnt7OxYWFhCPxeD2eNDV 1YVkMoloNIpwOFxhnzAzM4O5uVn4/czWYvn8lFIoDgXT01Nwud3o6Ogo9igEgGg0hpmZaYiiCJ/f B1VRoRciJbquIxGPI69pqKmpQV1dHcbGRqHrJtraWpHNMrPPUE0IzU3NJY7vkUgE09PTkGUZdXV1 ME0TPp8P6XQaLhdr46NpedTXN6C+vr5E8OiF+h1FUeB2u2EYRjFyI8syE1CyhNbWtuKiA4CtZBsa HkY6k0FTYxMotREKhTA5Pk7DdXUknkggmUygoaGxNApIKebm5jG/MI9AgAmmo0ePore3F7/0S79U sLwYgcOhoKO9HZIsY7ogMurq6zEzM4ulZBK14Rqoisp8vhQFhBAYho4f/vCHeOihzzJBVfb8Liws IJ1Oo6WlBQODAzjw7AH8wi/8Avr6+nDq1Cns3n0TOru6QEAwNTUJUZTQ2tYGz+rrtiyMjY0hmUyg paUF4fDKM7fcx9Pr9SIWi6GpqankXqfTGQwPD0N2SOjs6CzpE5iIxzExOQFBENDU1Ayv14upqSmE w2GU994sLXJPIJlcwpmzZzE8PIK6ujBuuflm+Pw+TE1NJqYmp7d+4hOv3ypCLrA4HM7bgmoCS3W6 IEm8FJXz5mBpKYljx17Gpk0b0dzc/KrGsm2rWOh/KfL5PI4ePYqGhgZs2LAB09PTyGQyWLdu3TVr VfRa8WYXWPx/Fg6Hw+Fw3gT4fH7cffdd12QsQRAvK64AlkK9/fbbi/9+tcKOs8KbW55yOBwOh8Ph vAXhAovD4XA4HA7nGsMFFofD4XA4HM41hgssDofD4XA4nGsMF1gcDofD4XD+S7BsLmrbNmybLn/4 hsyFryLkcDhvC3QdsO1iP1tQAJZlYnWDWQ6H89aB2rTYixAAJEmC0+VEuOBLFwwG4HI5i4a1rzdc YHE4nLcFg4ODCUEUjpimuZ0QQgEKQggIuMTicN5qLP/crm6FY9k2qG1DFAU0NtRBlFgDdApCRkZH XhzsH8y83nPkcDictwPCH/7hHwa3bOlyXn5XDofz1mLlx5qZwjsB5LDcPvH8+fOZr3zlKwnw36c4 HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwO5y3BG1bkTiklhfMTADZb1XO5Y34kYujg2isf 9RqKzX9iXMlYb0boyy/Lefe/3iplz9wGmlEqbcpsQFANS91+RHG+/yDpfGf+DZkoh8PhcDicS/Ka CyxKqYCLX6hH8uEAzDGHKXa7LefWoCmEaiRieQm0oAlpQdDTTzpveHhirXEyfV9qEvODDwrmyE2C lXUBQpmIsgmk0IIutj8+7/+TJzo7O99S4oNSKuin73tQTr/4v2DnGwC6xndDKIgSMV03/g951/5/ JISYr+9MORwOh8PhXI7X3AdLO/fJOx25U79LzOg2WHZAMvtESesnCtN2BATEAYFSdd3j2cG//XVX z+enyseYm6NuZXz3H4q5Mw+B6jL7tFx/ML2lCq4PNlH9VwE8/Jpe2LXmxENe2Zr4FDHjrZffOdco mFOfxPmP/QeA+dd8bhwOh8PhcK6KNQUWpZTguT8VgX+SMu1f8JtUaZXNkRY5d76V5AcaBWMyZEvN ES34yR95Nv7u2WpjzA29WOdY+NgXiDZxR6n1BEXx3xQAbMCY3yNmn98D4Ifl43iyP+wmxsxeUE0u HaMSQnM1jvTj7wHwMKWUvGXShfo5kSARutLdRWsphNy047WcEofD4XA4nFdGVYFFKYjR9ys7RV/f rwjZpR2uiV8PgchOEMEJSp0EhgPUFAUrAxL/1k354a/+htr9/wyUj+MxntkBc2nDlfh6ESsVlNLH Nv+IUvEjZTVZ6tKP2wj0+iu7JAJbrHfMxBJti4uLOqU0SggxruzYN5oqYpCI7G9qlXxsUyIv+X5u 3fT0k9CbnIudhLypUqJ08G99ef1gAFqGAGrpRlWFqtyeIN0PJd+Y2XE4HA6H89pSVWBlev+iXk1+ /e8FffomUEoIKED1KntaEPWpveLi13cCqBBYzvzhbsDwVxy2LCNWZ/moCSr4tr8zMrJjkdZPrRZG YuZgF8x4qcAiIiDIgFWmK4gjp3tunqa5RI0Bg8zEZmRK6TQhxMZbDUEGGm5nf88+C1jaqo1UoMSj ApmwOpcUKaWThBBrzbFeR7RzD26z4v/8OYeVuAnUEit3ILYlDJ3WT93/dceOR46/AVPkcDgcDuc1 parAsiW1R9AX14Haly+Ct7OKSQNb51L02ZQHyR5CiipAyBzrgJ1zleyvhoHaGwArC8y/BNgrwSUC o1lKnW7KeO405+fnbQALFyh1mIe3dUh0ZtUgBAjfBHg7gcknAD1R3EIhZG3nDYOASQghAjR4xgAH gDdVhOeKEFWgYS8guoDFI2UCqwR3b2+vCOANF1iJ8W8Exblv/4GYPf3gpacjbAXN+dMjX/6Mp+sL vI6Mw+FwOP+lKPcBAABYxEpV5KSAktKp1RDJuUNIndrojETa5+bm3ACwQKnHou7WkmEEGWh+N9D1 INB+PyC5S8cxIu2OzKEwgYNQSl0A0D76WJCIak/prEWg/jbA3Q6gLDBFhKWsdN0wIQYBAEqpna3Y 6S0EtQHYl8yyEsN40/SU9C/8IChYCzdeXuvZEK3oDnf8yStM/XI4HA6H89ahqsAKZJ4fg+Sfrdjg XwfU7kD5Cj5ixpql7LCb6PDIshkEAGXq4QZIztIVcYID8LSxvyUP4GkvHceKhQRjoo0QCDKl6suU ytLSD/zEinWX7CiqgFoLZKcAbWn1CIC6fsiS6ovRKlEU9c3AW6QG678AJEcIzMq0YBUoNaW8uqF2 aonWLC4ueimlVZ9HDofD4XDealRfRVi7V7OtaK9oLF5fstqv7mYgtANITwBatLg70Sc7ZO2MO+e7 l1oWVQHAlXikjtiZ5pJxBRlwNrLBRAfg6wZiZ0p2EWmuTbAWZNuW1RbAIWbP1BJ9uq1kJ6WGjZUr yywRYpuO7gEqeW1QFr0SRV0DgMzYNxvl1KG7iTZej0vEg0y1O0Kc219Sug6NEPLwZVNuqwxTl+8S 3jIrF18TFFRaaBBACQF6vBCRY1BKJZ221pN8ts2yLXMimZwCEH89Z8vhcDgczmtBdYHV8lu6GTl6 SgQ+iuW3JQGQHgdqdgKeViAfLb5HiZ13iXaynZjGqC3Y6o8oFcmLrQ3EijaVjKvWApILMNMAEQBn E0AIQFf0iGBMbhJzo4qhbDVIGi7TuW2LpPc7S8Zx1gO2ySJYq6GwbbFh0LZ9FiFZYktOUzJOycap hz7rzBz7ZVC9B9RWcQmBJWbP5EH/ZcFaXPeifv6hrzmu++aZtfbN9H6iMX/+s/cKSHQKcOQsQclT 4k6kzv1+iti5qCCMDzive3SWEGLSl78pw38+gFSfjNwxZ955fwsE01KTj02j6f40sgmCzPRap3pr owSArp8FRv8dyC+s3kIFgVAKSm3bdqiaFqKUJt+SCxI4HA6Hw1lFVYFFCLGMY7edAxENUHPFaym3 wFbvORvKDoAg2bE2QnKCZdnyDsBtyW09ojFV6tOk1gLTTwGpYZbmU2oAOcAiGwUEbaRbMQd8umNr ysot+kVo20FXhUQoAFcTYGtAZqYkWEKlQMyQGiYhU0rhp4o55PdO/s5nxXzfJyuK7ddGAeAX8709 gjG73Th243+Tbzr+QvlO6ZEf1CvzX/5rURt8ALAFALRwM202S0ptqa5fO/+ZP9JP3Bexrf/zLhqz 7iZWPCQYqTZV/44MUECQszR2rNcSw/tFEPVNU0x1LSEy4ChEHS+BZVkOvIHtmzgcDofDuVasaTRq S8qELTdMCvrUSv1TdhawdRZBWg2lAtH6NxEzJkAII7wwFCaivLl0JwKkRoHF46x+noKlCYXSKRCq uyVzpoMQzKjZYZ+gj2xB+UvXWQ/oS4CRKp2zo2VYc920JFh5yRP/yg3O5KMfELWRu0CNS7/Zq0Et EDOyXbRyf5s78eHPOXf928HVm9Xk928QrIW7VpzlKxGM2esdiUf+nBLZKRjznVUDZ7buJNkLeyTB eSMl6qte6Ujpl4Spqc1Ky9A3DCyGKT6yhQJ/AgD0jUtdUryV1xlwOBwOh3O1rCmwzNCvxcX5/zWI 1QLLzLL6K6UWkN2AmSlsoBDzA12CHZMtIayTzLEa0ZzfUjoiBbLzK1KJgIk1u8JfS5a0gQ2A8RLM Bb+QH1lXIkwUH+AIsihY2UvbFoLD1NFt1Ez/wselzOGPEztbA1SxmqBgqUmyajLUZqnKsr0JzV7v yL3w/+qn7n9otWeTaEx5QPXLRsWIGd18RSEZO69AuAJH1jXIbd5M471/124e+96vt+S/cjsEaqCl PmIdH0tY8olFQayJ5Hp/M0qhRqk5O6F7O4eDnV9KlI9D5/7SjZljLohmybRTjiYrqv5O5q3W45HD 4XA4nDeCNQXWTPv9sY6ZL/YDeO/KpzaQmQTCNwJqCEhlVpV3W26nNd5gSNcNE226jujT7RWDVlMa osIiWnahZzE1JSFzciMAuKzBHsDyFPelYD5aDj+QHCip3QIE2JBmPPNfvkVOP/cZUKO0bqswfTi8 gLeDrWYUlx3GCWAkgfQkkBxEqcUAhWAs7iCZl/4qO/mdj7laP/naFEoRUqnurhAqy7Rz6JF6d/x/ f1kyej/G/MsIoE9B1KepCGIDxJaY34MNUEvJbn00O/mdP3C1fnKaUkryp3+rXc7/9CZr8pF3w0ps hW0LIAXBR0Fc+fGUM/XzR42XWp43m36/X23/jXFeK8XhcDgcTnXWFFg9hGj0cGs/BMWGrbHl89Rm kaPmd7MoEiZXH+IS8xe64PnQsGinWoid9V7RDBx+wMwB9nK6j0KwFpsc+qhfMIZbCauJWkEJMVGW mytEogpHid4lqrTkldS+j1QVV6ITaLkd8HSw480sigNYecDhA+r3ALMHgNnnUNE70UruEhd/9FBq bu7vvA0NCxXjA6ymTFSA7EzVzQymfdjw1yJjJ1FKk6ov8deflIzBB1bMYemyACUAxMKfIoLW92Eh tu+MPvilZ+1DjR+QBfEO0Vh4B/JDl2oA/k4quD9HZr72sj35Pw7nzv/a/jn3Rw53dr7zVUS1KAV1 FFZfGgR4jryleki+wbBVrASR/kMer/X924RcX+fKVhsgTtPy3dqvSq1H0fEpjZBr8tBxOBwO5zJc 6mUKy7N3Ukg+vUjsBVZ0RQHkY6zQ3REo2ZdQwyOlD/egFk/Lxuh6lL3Q1z6JDthlbgiEBJzGiQ4x c6Yd1CwVWI4Qq72y8qUF7qJ3RjYXryNGZEPFOUQVaP8A4G4F5l9k0S8zvbLdttk1eVqBjvvZ/lNP YXUKktg5t5w5+mlj8S8GnqD0YRzfXnktrgZmflpWfF86j58BvF3AxE+A2LnS/YhkAKgUh2tARZsS QoRg9KvvEXPnPw2qqZc/qnAqagtSvvd+IXXgF4kV3QDTvOSzUDzOzrhFbfh2EGmPEvv+x9uj354w Tt7zE8O79fuunr+YuvwIJXMQBSPudca/2+gyTu0Q9b7N1kw+Q+XWKf3M+5+QjfTEbNOD2cbGz+S4 4CqFTn7Eqc1pbdqZD79Pym/eUaPd2QPiagNooDR1LthS5miMUn3EjtxyMX9u40Uqhn7s3PzV8Tds 8hwOh/M24JIv1azno0Pu5HNTBGACi4DVXWUmmUmoKK+0uqG6IGkDraK94BAyB28Gta/ohc1W0oml WTlbCwiZwz2SPtwCuqoWSFKYSMrOVraNESSN5Ps7QbVSe3hRAdo/CChhoO+bgJGuWmsFarD04PD3 gc6fZdc1+2yJbxMxI41S7sSe7VGcsMSwS8RY6UtfUAB3S3VxJbnZPGpvYP5dVrbKTsLViAgKKPAv ffVGJfnvDxErGSzZSkRWJ2dkqpryg0i6oI1eR6y09xVF0qgpECvZCqBVWnpmN8le2LvU90e/jdRh A5Re0YDEjgfV9L/9njP+jVoC2wVABkCAYyZAf8eWmyZqp39w2Br5q6cS4984EGj/tVftkZUb/lqb mN7fCAC2Y2Nc2egbIuRLr3mqMzP2N41y/GALhDyLBpuUQA4a+dCtY76W34he5vAS8r2f77FmDn5e yZ75BIjoAmwZ1CJAtX6hAAA3QFrFzPG9YuaEYTlaHjBOfuCPpR0/PsTTvBwOh/PacEkRlO54/4Rn Mj8NkF3Fl7CZYYXuriYWkVnVS9AWpJBbO9UmWEuBq3ppuxqBVK5Yh0XsrFPOX9hNCakvahUK5qHl agAiL5c2eSaiBUguYiVL05IUgH8DS/1d/AdATzHxs1apEwGQngJGH2Yia2kISI+V7OLQzr/PEfvu wyapD4kVvRops6JQa4FcpNR+VHIyYTXwbSAzBejJsnkQCsjmFd2v5bnkL7SpS9/9NDEWSo1YRQVo vBOQPcDUPiYqS06laBAcOjGTwTW/J1FlaVPbBLRlXbPGvtSQRGPqHmf84Zzh6v5LWb/CaBO1BUGf 6qmyRQbgF/SJrYI+sRVE/EXPxJcfM19c96/9tw4+toWQNZVEyfCUysbAF7cj9/JWMTfohzbZSBa+ voPa2gaAEkEYmLEPLR20Dl83YakNOduxfjJV9/kXw+GNqcuNHY0e8bnnv7NHyPU3lf52IBAITl33 3X3C3fVbvZnRf6x1RP/vh6WZr7+PUnMzsKr5tSZpnvSLp6xDHSft8AMHpfWfPU5Iz5oNJymlQv7k vXdIice/KOpjewBbWP0LwGXuBgq/rDhEbXSvRa0/13u/+GkAF65wAA6Hw+FcBZcUWE2EZI1jOwek bMoG1dlv3pbB6p9qb2Av4WXRAoBQo1bJHLgdsEqjKaVG56WYGVaHRSQAZgVatIMAACAASURBVHE/ QRu5AbBK5ye5AdnLIlir66+ImoboShFtpKyljgQEtzKD1MzkldWQE7Bi98hx1u8wM1EWxUrUefVD N9sEFqUQSoakNouw1ewE5p5n6U8UomX5CDD9n6W3o/TElBL5ipsKEjvndS396DOCPr2jdIMANN4B NL4TGP+PVSs9l7fLuu1onSDGTCMBJRXHyj6gYQ8Q2FLwraKsmXb8HBA5BVATMPPsWkuOtomojb5H V7ftX7U889pALYdoTn+YEnlPz4l3N1N64R8I2bKmyKKUCtmLD223jmz9NcmYugNAPajmIFRzID+8 etotgHATtTO6ZEyawMlETfT7g9rRPV9zeO56hmz5Urra+PHRAwHPwK98UTRnPwZqVIkAElvMnB3U lg78wJU+chfs7B5iZ9xr3JRuQpT7yeI/TZjxQ38/MzPzjaamporw5pcoFXKnPvQhNXPkz4m11L1m r8flFbKra/wqTkwh2KlNyB/eAuACr3njcDica89l03jU+44LNNeXJVRfWc2XmwdA2cs4v1j8mFjJ einx03uJnS8VWLKX7W9UCQzYJkutkdI2dMROVxbJy36W7tKTpZ8TwaIUGqhdOohSA4RvYvVO+lJ5 vZNFBe8kJUJeMOM9gL0SWSAAloZZFMjVwiJ2K6E0Wc4cv0WTNrxUeTFgabn2D7Fi+oWXgPj5Vees egQbVfBmcBUvOWLFQ8RK1JTW2xAmKBvvBmb/E1g4gtKXP4Glrj9gC6GErI9/uGLQ4HVAxwPseuee K3xfhUnn5oDARiaGM9PMkT0fKZ8VNYk7KFMqv6KmgqVTrbxmatRL6ef/1Dj6yRil9AeEkAqVcYBS KXfq5z7oTD3+V4Tm21nq7FLYIHbGAcABwAWQJjl3dKdlR3+Sv/CRP1G3PDxUfoR36et7BXPu48SM 1K01KrGWdijJ+c2AKeNyPRapJhBD6xCt3B/XTD0gzcy8/LdNTTcURdYBSqXdp37mZ9T0s39DrFRL 5fGFvx0eZgK8bAScX2DmwEaV3u1EWcp73uWcmvrp+ulUKkopjfN0IYfD4Vw7Lvse1IWOU6BW6W/y uTnWi9DXjdVvQmJnXUQb7QTVVwrTRYWlAMtrplaTmSxEsC41U4GdLx9h5y5Nr4mClWgsPYAAtTex CM7SYMVwVPCMpBr++AtLLd/6A0vpPFSxgxZj56jdWbbBhq1Nh0HWeHFTsAUAwetwNbYLVGqaAsSr SBFSUiKuKJj9RMeHgcR5YO4gyiMrtqO5P1f7e/8fjBmAGmLJsc56oPU+JggHv8PEWfwC+3f8PLvv i8fYIgFRZUKrDFvp7CNy0yIofWURLF8nUH8z4G1f0/WdUN0v58//pXX8lnvLt/2IUnH3iY9+SE3v +yqxMx2XF1fVoCBU94ra4M85Yi98Szvx3m3le4jacA2h+cuskqUANZTLiqtVEDvrk7Mn/3t47KHf iY+OBgC2SvDWk/fcp6af+6uq4oqIrAF77Q62eKJmJxDaxp6F5ncDPb8I+Hoqgmw2UUZzrjvHCUl5 5FyuZWlpKlAxNofD4XBeMZeNYLlT+8ao4FqEpbFfiwnYb8RGplDQXdpLsALRBXg7gUT/2nojv8hE mLG09jhEYPVXubnSSBghNnW0TBMzURo1E0SgbjebZ7kgI7JueG9/NBX4TC8AOELnv+tc/HoPMRdX eifaGhA9y0xVBbEkAiBAC4vE6FrzwqnFomaro1crJweIVMgdUhkAKHGkDHXjU2Lu1PvWfBtfTioo fqDtg6zt0MRPK1KDVArN5733fd0UHDkXrI0Vx7tb2JRmnmVRxbXOZ2aByMkqcyKw5dbDutQRV6uZ u641IAXgbgRa38eifrKHRRvNDEuzRk5WmtHSfL1gLn4qGh08FQqtm15Ob91z5pN7lewzXyZWqtKD bfmbIgLrIADK6gcpXfkaV0+RGiIx5++QU8/9PT25536y8+BKqBZrRBpXpa3X3C7KBe83yuoIbavk GEI1r6if/X3X/MflWIz+lXb+87WS1v+7xEq2V4wV3ATU7GC1grk5Viu3NMQ2mgagBlhz9fxi2fPv MG2lp1dTNiUEc0m0LMimSVyFKBZPFXI4HM414PIr/fwfyJvUOCOnX9i6UuieZf+he7vAgmCXyCxI KiA4Lv3isU22z6UgEqA2AKkjZS8ywbKV7guCeeIdJaeQfaxmy8xW6CBKlMWU7xf2C+aSSCmlqcBn epXYv74kmosraTNqsxdTcBPz3sqtvKQI1etEbfQmoEpKhRB2b+JnKlYrUsE1b0u1/Yb3zpcguvKi NtINEGo6Np/OKbf0BrInKqIybAB7xYi1GqJaWCkZBAb/qaQRNzuvM6W5bv92vP4bh4ILn7uFWEsd pcfLQGg7q20zyovvq1BlO5XrpnX3nlMisYyqgVFRZeau6enSzQSsCH/xGGujZGbYvo13AOs/DfgP AsP/wgTv6sPMyO3q9N/cM+/4+x9TSiOpvr8PuiN/+j+JFatSNE8AZw2g1rHVrzU72XjJARZZ1SJA agTIxyuujcC8yaTOz0xOTv51a2trbs17IvvYIozcXPXtogJ4Otl1Bbcym5D5F5kIz0yViEhCDZes X3xInv3jM0Q7S0R94qaK8Wp3shrB6f1Asr/6ythcpHSxRQFKHHHdd+9RYuSE5W2W5TC5uOJwOJxr x+UF1rrPmfTMkfMgsEELr0YKIDsFBDazlWZabI2DCeBqLqnTqg6t1jKnFIePRZLSZfY9lNoW9Y8I FLeUnnr5LV6lU45UF7NJjQYAhBBiS/UJSsgAiMzsGorYgKeL1bTkVq6BUipS21AIKqqb2fliZ1g0 oTRqRk33Lf8SaX/sezBKa8golakjd9S/1nCwjMpi9WUEib1o/ZuYxcTSaHmtmW66b/5RqvHPnqQA hW2SivZBRCx8j/FX7H1qC8H+nOcjY1LmGV/lVsrER8t7WdQm0VuaMjZSQOxs6SHJAWD9p4DGu5gA m/hxqci0kiEp3/sOmh45PZ7vEpuXvvvzxEpcX6XgnEUyG+9igjs/z0Tk8rNp60DLe1it0vTTQPRE 2dRNh5g59ut1qb8cHqX00U5CqpuqBjcDgevYKtHyOQgyO1ftLrZIYKmf7dv1IJvL+a8Bib7SSJYV DzuyR+6lgssEtUo95SQX0HovM8VdPq6aKK6+mAK23DCacd3ez4xdAdGydElV1xaPHA6Hw7lqLiuw CCFW/sitp0CJBRTqSQgKZpoCi0qsJbCIwGwS5itLnEqgNksLrVicV+LtZC/YstWAVHSnbVGZrTjw skKh+LImEJGTRGkagqLBMlbqx2hBGKi1V1FORZgYoqURJ1sInE/7PvUM1XWbEKxWf2yma30T1AL0 WPVsJAUTuS3vBSafYDVTJfMUqOm8/sBSw5/9wKCBDIFBQCVakeKyNJbCddZf8isAEU0AFNQqLZAS VN1W1p3TlI0JJbO/sjhrGd9GZrSamQLMxUvfU0tn6crgVqDpLuZJppXaYEnG1G45e/Z7TnvfHkEf /eUKB38isGPbfgaInwWGvlt4VgsXuNx/0t3E6pbaPsBE/MKxMrGTbBRTz/28d+rgyI8oPYHjpQs3 2ViUpbCdYSC7UJZutJmAG3+UpSUFB/u5Ce9m4rjlHrZa1SxdPCjnjt9PxVCl99dy5Dg5cDVlfoWL Ibbp3v6yLdaahdtAiKLkgsHgGgqew+FwOK+EKyrAVSQ6AUdjSV8cZCbZb//OhrVfyILECr61y/go UotFKWTPGtsBeNextIpVGkCgjqZJKtWnXmnohVJq5QJIAPZaJk+XT19WUBlSoII6lQ387BQhuaK4 EgRBkyRrSVWFRae1GAGpsvbeNoFkH6pen6gANbvYasW558v2IaBy67lc4NPf1MjmOCGEEJIRdO+u BSr6Sr9LSllkx1kPSL41biWhtqN50nJue5nK9ZPMe6wwRSk0mAl84gXgEu9oQgArw0RTeU1Q1f3B FidMPMbSw6FqoianAhKc0R/uEMzo+tJtYPem48NA7DQw9M/MfsPMMCFjZgs1UBqL+o0/Boz8kNlb 1N2MMoUEMdf7Llfkm7femECrLQZKzWwBJqI8HcxzTa0p22axZ9fMsJ8ZMw3Ee4Gh7zErjeB1QOdH mFfa6ltgp7zEXKhcqVi/h+1bLW1MBIuKgUUqBeZBKn3VqBiY0+Qbjtq2zwIASqmtaVqWEHJVHmwc DofDuTRXJLDSLb8bs+Sm3pIPbZPV+iwvCa+G5C4IMaPkYyoGIlRQS39dFx2sjmUtnaSECv5XZcEX qb7XdrSs8hO4OiRK7W5Ckpfe61WWphCJ2nJLnCCzeo4ZURTHwuGWoZqamkl3/v9MCwSVSy2pyaKF FQhA892Afz1ruVPWboiKgfFc8KPfSHkeHF8WdcTMCZr7YwOUiEcrvvrsDEtlNe5hUZzKiRBBm+gU tLF1tqNtzHJtf95SN75oOTfvy9f88t/lnHvHCS5l4yUw+4f4+Su/nRSFdGuURXsqvmJii+aCT0Cu p6IOUPYAdbcA0VPA8A+YuLmUwSwoS7fNHgBa76kU+9SUHfnT73FmLjbYQn2gakhRVFk00dtx+Wsj YN/t7AEgO82EXc2u0ntDKSFUL4sWOpiAI2t1ohItKtUuWOqWftN9035L2fiU7Wgdth1N07badUbz 3futXOjnBpbFsCRRS1GUyzz/HA6Hw7larkhgzdV/KEmt/EDppxaQnWSiSFwjwkNtFoUo+03bVtoP Q/CWFVMR9mKv9hKUFBbFSI2gIhNoi8MGdVXrO7M2lNDlnJwtLlsjWATlxpsrB1zV8FcAkSQpHg6H U8XC4jVfcQJ72S9PgQKAyIraux5k99isvHxb8I2ka3/73Oqokm3bVqreMWEr7ceo4F7ZQABkZpm5 avN7gM4Ps4J5Uvl4ECseFjMnbyVmMmQEP/hkrO3RryRCv310eTuTeVUWPRCwaFFZD0kAsKXg+bzn ni9YcvuRkkeSgF2bbQAOLxPspVCH1hsWzMVdFecLbAKcdcDUk2wl6ZVAwARdPsJW55UhaIPvUDIH G2xqi2vaL+hLQGrsyh8ZM8vOKaisTqvEo5USUKPMr8Jm37mosLq58vNQwyFoQ1vEzImbBG2ogwou W/d/8OF88MH/udT4lT9N1H3tccty6ISwE1mWoIfDYV5/xeFwONeYKxJYPYRoghnrB1FW3pyUstSK 7GZpwGovFCvHDDtXmxwSxbSkhou2VDNe8qY1s8whvJr/EZELkZzSzBakQIK6Ns2BGpUL5C8Zz9Ic yzVYlFIblBJbm2mCla2iFAl7aVZe3yt2KxdFS5ck6cpeaqKDrTxzNTCBoQSA5jtZGkuLsfowb2fF YQLNrPfE/u46KvttAKCUUofDMddDyJIR/sRPQcRSwUzAoilT+1gKavsXWU2SUlPlUi1R0IavVxa+ 9avemd+9RzKiTkplCoMQESLIWj0VKUW54SUljmi65ne+HG174vFM8Ff+jhKpzI12eemmWP3ZoHmx xHcNYGK85b3s/uRmqwS+5BQVvBep4JmoWo8WPcUK0svOR2A73dln77BhilXW7DFxFHm5ykpMAVQM jtpSwwkquMpWfFCW4rVy7HxVRG0Jy3WIjhBQdys7ptraCJpXBWN+s5Q78y4l8o+/4ox867edse+8 S0k9WQ+sCFVJkuK45DJgDofD4bwSrtgE0Q68c5RKgdniBxSsbgeEvfSr4QiyOqxVUNETt9RdU7Zz y3ChaLpwAp05T5elEwF2CtbgubT+yhb8c3nXrQsiqZKasjSs1aeNmAth2ZoKAoBty1b+7O+vp4L/ zqqrv/QYaxVTMoBgUyJdwjn1khBCkAsGg5ftd1ckuA3Y8ptsVV3Xz7Hr6vsH4PxXgdnngPpbmZfU 6pOYkWbn0iMfcmsn/ZRKtiAIsXA4HAEAV+svzVKl+19BlNJrsDRWLD/6I/ai7/gIsOlXgfpbqtSh UUKsWJOSfvLzwbnPPijYKYkoQpbQVJKIpPJLpGA+Z2ZZDZ0Yimrq7mliRkSqds9RMXCJhs6VKwQJ zYrEzpYWL0lOJjz1JcAs/5rEvOG66duL3Sd/Odvwx39EpeB8xWlycyyaFNxSdkpbEvThSo+tVfOB kapI19picDgV/G9fnN84/JDp2v3PFYfpKSA1zKJSa6b+VjHzLLOWaLoL6PgQ4Gm5RMTMkgjN1xBr qVtJPv6rvsU//IJX+0kLIUoOwOLExESU2zNwOBzOteeKBVYu+OC4TRwrxUDL6Rszy36bvlKING/4 7hg21S2DgFBFTVU9iNWpWKVWDpRI84Zz96JlVUnXmNmCcWm10BP1uRP/8m4q+W0otSDagRtFY+bG kp0EGfD3AEsjTNyVWi6k4aifxFXcv9XTtizJuLq2JAIroA5uZav9pv+TpaFS46xI2kixtj7l7Yby I3tdiX9+hymIekwUI8uFzIQQmqz9/f9tyW3/t9IkyWL+TAPfZo7w/s1A9y8C3R9jDb7LA4VUc0mp Q78Umv359zlF75wn/+x05fxJobC7fJUjAMmbkkSFAoBJ3RTEWd0GoSqEEKTqiJ0uLZiSXKzmKtlb cQQVfdOJhr9+xCQuLeX7WL+ubH2scifKIneezrKaKIDa1hUooJI5whZCZ9P1//2Cbcum4dzZS6VQ qaizCmnCwCZADV8+vZidYd87wMxlN/8GE8JNd629UKSAqE/e7Jn5g885jRe0xsbGqRtuuOEKfwY5 HA6HczVcsUCINt87IdhlOTojzfoSSq4qLwVSWKVVvjhJXMyIN83rQuMUBbl8FIiC1dIYKZZGKQ4v whY9U5qwLgFJBIhUVklvM/NKJQS4m8telIYs5k/cHZj9vZtDkx97j5w992egemmoTXQy801jib0A S8deNEngOF6ZwGJpyauCsIjFyA+B+YMrIoWARYSmnwF869hKy9XXaedc0tKTH3Hlj4X9emkaLdT9 s0lbDX0XcmiscoIW86W6+A1g4hHASrM05ZbfZNEsUhrNIjTvknNnf901dOftEFQTtEoBuJljUZqy 67KkliFdbDBXfXTl0RRKHbIxextI2fcgedizV+4JBkJN165jNgnqhBBiCS2aLTVeoESpNGEjhLUD Esv0lHCVmWEiUeqoT1DolJiLYjrwWxdsMXCy9DpsFj10NVZpQUQqbTVAgblDrHg/Ow2ojUDDXcC6 nwe2/QHrv1n1Z7Iw4v/P3neHR1F2b59nytbspmzqppCEhEBCC4TQu1QBEQUFpHcpoiIWLLGjKFhR sKDYMEpHKYL0KkgJIUAI6b3tbrZPOd8fk5Bkd0NTX9/3++W+rr0IuzPPc+bZ2Zkz59znPnx5H3Xp iklnAO7QWWxGM5rRjGbcLm7bQYgixC7IW15BoqjPfwiCxHHxROGoe5JuKCBKWEFUtb2OiCJPhVYj G+SenvEEViMRpMUGFDCisAiqrtcALMDLk42iLNilLw0CVJyS0i7e7p1hKL68lapq9QdK44ZVBO3u aR9VsBTJqMkCEFw1rbxqAJsQnPzbQQBEm8SNKjnixmECAhL535QJEDoQgG2cLaO44njvyg/G0LQy KBMzGzlZbKcTpwVZ/AuiLCwdPPGmnEaA7I0A518HyNkkOaux0wDCh7ilfolYoyOiY5RZnhzl+bRq 0JKm3naRY6IOC7IWDgAAmqGQoujbj6gQkaa44kjABm4UgsRPk/m6rxWAyLFxhwV5qFPa1ImE9bMA 5VIkIdglWwnlSjoHwhtUt22fZCQCSmtLCCEcG2oFoi7zzLUiEp+xcVsbJ7raJx2KxJk7/ybAta8A qs9I3DNNLEDcLIBW0yVnmPUgS4ZOGeXIHRWd/XO3TES5+wbNaEYzmtGMv4o7isDwquQrQOj6iz0B iZ/kNHggEtNuN2EgtJ1TJl4D4ImgDHeI8hbuXZjdLKSlsVybRRO6RlAnZxHeRjsViSYRVRfc9nVU S3wVVYjUssdlBABkANDDUzwB8E+SyMoVf7oTluUti+4yeHUXIBJZu/Js0+1yUAAoPijpWAV0dfmM k9G20yNUps87a8wx3ljbiLn2X5Hucuh7Qd1rEq+IfwXZwFwPg0tyHHk7JKV4kQMIHwGgjnDbknFk DKUchXGIeOsOAQCAxMuMtK8BwSl5XqIgeFZUvckYrnPRrLQOHgjxSGlNIqOruGEvI+NZzK9wS9fy ZmlN3UxBIEKVH0Ha7WS6XdCMkyMy/zIgstvSnUJCoyCPP460d46HT6Xek0X7AS6vBbj+PUDlHxJf LrAXQNxsgLjpkqipq28rWqMVpt+SWSPoEdFzZ+1mNKMZzWjGXePOHCxF2zOAQuOOzI4qiUzsKXPi 4hAgEKudic8AcIJIhTuRCrzqtg8lk14IUmBMHSo5SI4q13SPxU7HFRPCEcIZiMN/ynFkg882nl+U dJeUIQDa2NssnadrxSZ7AhgypChOIxCOV3f8AyjmP1d5JXISp+xm2SlroeRkBSRLkaYGoPiKKJVp 80i65kpEAYAC08f62S7MfcBxYcaT9nOT+tSoW2cx3b563ek3eabAhhwBIvcQnROl8bO+l1Ja4SPA 9fQhglHHiuWxiJ6cVncgpbQj430jzIQo3M2aNv5WCV3LRXP/spFS2nhKKwBIUVVBBJ6u3k+D4NIo XBRqxVApcOOcEVoJFOXncYJbgyAls1CCwew2cJNAWmBD/7TpFryFtDbP424EJCe4YDdAxicAF94C KD0kfeDfDSC4n7uUCnJygiY57QBNQUGBu5hpM5rRjGY04y/hjhwsL35nLqGYell2AgDWUuni3VCj iJJJlVwu1XdIBxVz8hZVhBAi0FqOJ8o8cOW/qPQALUYBBHQBCOoK0GKMxKlxmhtsRECURWRzVKAJ AIAQG23VTUtHWrMHCCs22ExKnRXtBYgYAeDfsd55a2o59P2kdi4Vf0hpMVfdLcanxMF2O33nPKq/ ilvcj+tEOVH0IMqJQNsyBqmrV3eXFVyM5S05LykMX38jr/5qudy0dZN31ebP4PC9U1Aw81WRWxc6 vUd+hHSDitEbEKW2R0X7pCiRTONqIkvbrwyC2+lxecPov4zGC8PbJb6epw1Fq5IRTTSA5GwIIvBA qTkgbOO0JCG1DcrrnLUGFiOIgDfrvH1zCALwQDi+6e/T/X1EQawKee2YTffYy6K8xRmP0S8CUtSN t0i9Hq98JvVvFCwAQT0l0n6j5Za4XQSAMAzjnZ+fr3Qbsxn/NdgxAXz7xHQbFTf4VXdNln8ZiEgW 3BPWLqzTwKFj9+PNqyzudo5fF8qX9vTpH6bTLWgxImV4v5Tbi5L/U8heN9onJkI/sutT2z00l//v x7MjI1uHtu1978Rf0a137NZREJQc2Xt0h7ErQ+9m7P1PxQcnxHQbNeK17Xe1/98JTAFmWqe4AUGx s7tiU9qF/yDubEKhk0NUdTzXaDfBIUWIvOOklCBhJMK1lyutiYCobJmJVFCtAJUTUdk2R5QFNa46 40xS9KjNo9LLL9G9WTShBFHR7grSmjonB3lzIcfr7v8aCJPjZnfJEanyLnwkQOxUgOCeUlWeV4Rk pzIIQB0utSuJGAVQ+SdA9s8SMbvRvDKnU9Vzm9V3TBVpUpT0PwOkvY1Ie9eH1wgA2KsAyk5IDpY6 rNH2RDD6yEy7x2lMG/rRXMH9RLQrAEWKiDW+tPX8OBAr18gMW77wLn56gtV72na7z8MrUBZ+HogH blbln5JquV97N+VxFG2apgVb/34Q4qES1ZAhOVnEJfok1mgovvIGKYkAEFBHW4H2auyREVoSWhU5 d90uFKwIUA23HYFqvDsnAA+2fB9Ap+coH++p6xMCOAENPk+ctQYsetLp1fMVQdH6GADFAaE8O/oi B5D/C0DhbslZlHl7tBgliTSlTCbz0KT7fw+IKdSLo1sOk9P0Wpqm19K0fK1WF/t+0qi5Cx7/Zn9M XYr8bnH61c4tkzolLx37zpb4v8tmT9i8bpXP8yvW3vPoL2XBAAA0QjgAvowCSf4n571LUCJSwwCp p1gRdLfe/M6xZsPOobuL/Vapw9sOiooJ0QfE/8c4Gh6hQNQTxBeAgV5/dazs/esUL77+bv/HN16N /jtsuxUQkQjADACEZ3kEt1YsAs3EIsFXGWQS7mZ8GYWtEEkKCqTtX7f2r6HUDHICuAAQHoF/oajn zp4C4l/iuAs5J+VwbCK4GttyIoB9sPS3zBvg+gbXvZFnQy4JVAgHYAUEC3KaHvlyw7c5AFD/VMaZ pbSefxJI/J+KWgX3RhA4WdglRFYkhCMMoigyjFMWq7rCm5J+ZMwnn2pUFUhAEoC0FUnpv9AhkoPA qKWbsNMopeBQlCr1qtIk9W9XBQNZ+BGz7ulNgqByrzq7MRENd3fvvTMgpTUKqjZHWNPvYwF59sb0 FacBdB0BgvtIx9Ig0EY5czuw1oMOEKzuN1PkKYoviZZZqhexljEPijJ9CVJeNJEq2BofkGCXihi8 IgHg8D93kLcExYny8PO083o90Z2AJG7LWz2JdtIsd2kA7ShME2kvydEXOApQbLyhzFsaiLh+jxQg G1oOINyBtIFIgSg5U4iISrFEh0QeRdAt9SxxBt1T0iIhckbBH/QXib+zRv14elHM439E5W7dJ7cc asVwWV1Z84lBFF8ZCcg3/k0KToDiw1KRh7sKfqNJCHFqEbGKEA8aZv9TiCeCwCd6h8QMTOzRc7Mv Za0SLdUB+Zl7xv7w2vV7S2y+SwAg/W5HVyk0SrkXE6VimX804pd/Yo/+6EnH8xldY94GgF9FHhCA 4gn+V4rCIhAiEiQiJ/v7215gClCLt9sGF8sHZD/61oo5Lw0OqgKp9ca/BmQoRACRNKy8uksU5edq T3+/7cm0Li12AMCnf4N5twSFokgARV708DhHpHNNFO/uXEORIADwFHVnfNp/DAQFIMS9z+9/AHf0 FEAIQVrIuwiErncwCEg95miFFG3yS5QaBlsKXGaS2wTUXhMZFQ8A50qT0wAAIABJREFUIHMC1Oh7 54Bga1y7Lzolocv0VQBpKwAufwpgznGprFKYBUpXACyDAADIMALLsnZCUkRG1flDlIXvdhdsFCWb sr6XOCoFv0gptao0KYV49QuAtLcAyk567FuHRGWwK3vvsqs6VAFpwoNyGgAMF6TKyn/83ELBqei1 G2URjUv+BTtA4W9SRNG3faOPiGjXMNYzPQlyTXevRoecoCOKduR0p+yXEwCFf/VJ8RbgnCTgCIBL 5aFglWQ2NC1dokFIGOvZrjRfogCQojeCLVsNgrlxqR1hJOdKcLqJhgKR31l6EHmghKIAihBGpP05 TfnLyQB8n8ZjUlIRRuVZSeTUJenJCNk9fAsWLPcrmrXYPztmfMdTif0Z2iSYgt49UaH/bo0p+J0l nCp5A1LKqsbjgkSCdxqkKtybWOlwgLKgoOBfTbv8XXCIFGG0wTmxy774eMOGDW88OGnGkiWDdUt8 zddDD+y7MKhuu70fzdeNSooapFYHTUgYMGnAB79WajEV6Mk9YrpHdn2o2+la8j+mp8ruDQ3t7z/i o07W6prK6iLrrsoaLKkb5/LWpZpJ/Vv39VX7TojsMmpoyvYr/gAAT9/Xrl1wwqj+K/NRCQCwdbw6 qHuHe4d0Hr/GHwAgPTVFNjoiemDQ2HXtGtr/WJy6/TfbDz94Pf9ay+o9KffqRryWzCv1DACAvxq1 EwbG9VerfSfou84c9PH+dC+PdnSqt8MTMD1dtnRUYpJeqRzvFdxu7P3Pb2jTMLp3ePU83we7RA/0 lSkmtuw+duhj7+0Narh/+v6PvcZ2Ch3gq/Yf33fc4/0E2qsRXwARyVdPDWvZNkw3xiug1UPDH327 4/6bFL/UfRe+MvXEmD4TBy/88lAAAACuH6we9HPwsEP55kSrMctvxUMjh3fo/3KwqzguIjKvT+rR NsZbOU7p2+rhe+Z+kNhwvvO7V6inDozv7a+UTdC3Hzxy9vJtN6p0Nt0PgV3bDB2+aNHbscM6hA9W qv0nRPZb0G9/draiwfjUq9N7xsV4K8f5xPS+b2tuREsC1I1r4yv9QzsEhY4dsKbunFnZXTm4fcKA NvcuaYuIBBHpt2b2aRPn5zVWqY0e32/6W0n7EZnn23tHLX1h5bgrhblxFYdXDwjs+sig7ivRzXnH ojWqJ0a27xbupXzYKyB+3PDH17VLqU15nZ4N7LQu7fom9luW9MzYrp39terxPq0Gjn7k9Y031KeL Tq9RTegR1cdX6Ts+ecSjAx1y3ybUwesRpnH4jeoaMUip9nVbj/3rFvs82D16oFbtPyG217h73tyR 6+u6vwismDpWGZqU+OCw+bNnd+oU4jVG6xv5cNcJb3ZuqhBq0/0Q2L3T8KGPLn6rTe/Y4HvVMu3E xPuXdC9CVKVM7BofEeA9zjs4fuzYpW/F1aX8EFOVS0d3SA73Uj6s9Gvz0JAnPu2Q2gQPGHE2OzEp sKdv0qxhYz8u85Le28+kTO3RMcLPb5x3i8QHZryZ+pcj3XW44wuqIMoLKVafSzlz67UPbCWSCjuA dDE3XpYq8BpAZPV5orqTiXAWAgRAZEQhnJAq4XBYFhAZADYICnE1AMamhc5FeYtsTtbaBhxPgEi6 UlV+fg4AABL/XrHj3JSnWb5MQ4SaPm471/FUig5KrzrcbDkJ7eTVSRtM/q8eongTLdBqz569JV/S juKt8Dfxi6QIlEe6FxKBjSu1e/XfpOAr4ohgqv/B1ORITmnYEADzdakI4cZuDpm7rpLHiQGaWhWZ txRpqfYYCPgPPrUgIPF2IKWpIUJ1vdwAZ5E4gD5tpPRwQ4j2AK+ab7tXyd7eo+SveYM8ZDBYK92d SMEhpaZFbPwYchfuJoWWBG3Z8rbGgFfOy2wZ7Qlf1ZhUTqsA/DpI68k7Gq06QbuStpzvCiDQAJAM AA+i6GtQ5z1/TU1eOS/IE6pF1osHRmMDiuHcnjkJSKlup1H6Zv7VxPZ/DiKhEAVpNcaNGyfsXjGy Qo1VjjK7XQ4AsHFh17DVq397oVjbqmVSF7GaM6QHfPHhiwd9ltd8zIptB7K82Gvhp7YZAFBYcPyn iDK5MkWn999gE4UMFPFFilDPAEDhhdUTfF99/udnrsiju7RLblEBNUX+m1e+kjbzV+sK6uNOnbzB PmPLLvMcAMg4lqUcWF6UtULXk30MAH62VWeEl9LwckCQbl0pQFqd7aGduul906+1uZbtUPso6JgO CRHRpCYwC/gipihj62S/Nq1Kk9upNbkVZyPefGPLWkT8KO2TidrXnvv56SvK6K7tkluU19pxcdhn lW/vnKVr9LSLmC6b3n3E5KsOn4lRXfpWM5xRcf3XT+geFaaVALD7i6WD9K9/tOfFCq+oVondwiuA y/fb9u0XhV0XbX/t5AcjMytPpGjnT33ziQzef3Rsp9B8P3uO7dCFstZcQHhZ3RyvDGg5YF+Z7+Oa 6G7QBU182fGfvZ6Z6/9pKuLmcS7RhDWze0a8/cnuFw1e0VGdu4VXCtw13fZP1uZ2e2b/K9DuoCG6 paVVYdmlAEawOWMSWia1bhd89sIBKKg/HqTm9201Ks2kmBfUvq81VDBRlSd/8HpqknNtKmJq9No5 Xi8u+fCZQjaye/vk4HJaMGoOpH5pSZj67fL0rx75Q6AVcbz12qrde6uut4rqWJMsy/PJKTwdMmXB 5ncQcT0hBF8Z0bbvzou2FxRRyWxXvX/x5l8OayprOH0AJRcRkXptoH4sIHbxrYYzAGC0slW+BOil IAhHAODKogGtBp+vki/0b9vLGcRb0HR2k8+SR+DLad0HXw06l9b2WmWZVol8RNv2sa1DWsPJ4wA3 +ClYskQ9ZfS7c7KdXqNad0ouczo5ddbB7+TFTwa/CQD7vHhQAF/5RMGVXyLOK0MuJ3bsqCosKY76 bcfvx+9Zfnrpb1P385MGvrogzeE7PjapdaGeKrbs/aMwxqlq1UQPXxZEZ74884+fZ8W27FDdNT7P J7vwdMjkhZtXIuJXvy7tH7T6nR3LctUx8YnJWCnUXAvc8P4rJ8am4rs/jSM3+Dw8xQi8k+lkqTj7 wcGLndJbJQ28rqsqDs67uEffcqx2JSJudnWUeVC0cVZdeW/vIeF6bFwPY0flJX3RxT2a4d1OH2uh VWlbt++sqSrKCz/56/GKAdz2JxHXZU3tuWzWdbtmTHyn5DIbx6ly96cqly8OfhsAdt+4Hkj/kHce /G3IOXPYMlVk+I4WMQGHEPczT3SdMvG4PXxKRPvuBsZRpTizcbWjl0P/FgCcaPoKc3u449uFU/+o UZQFX270Jm+VIk3nX5ciTzk/u1cQ0j45DnlnAwBPAABoWuphwmt75iCtuUl7FHcIdOA1Xp5gqasG 43neGQNwI4oh7/h1OqfqvQBZ/X4gMs+hQeLy8ghKEGWhGXbtw69X69d+K1C3UJ5HoTZa4CmDKN75 rY23AFz9HCBznSfiNuGJlZj9lx4XZJHH3HhxRb9LYpP+XaDRAaJIAbqokddxdIDc3D3C2m0DewBY CgGq01wrOwWU6bMA7kSl/i+CUQhuQqHIA5T/IRVHuMhzELRr5KYt8/wqFozUVCwfStlzJriNqQqW BHRdj49QPMpjspv+2aDE53Op2CN8dQuF8Yf5AYVjZjD20xPddpNpJQV3q2tdAUEEGVfrXDUcz4d2 5iXRjuzprHnPInn15sWsaf9Uwtc0ijIAgqQHZrgkCdU2+q6Q/Ce5cv9JEADkbGbtlTWvdR4xdGD3 OVPHD/34+6vLSpgQZ1KPtvsRgTqTXjXlghAbETdm6dID+/dMnxhV8i6bfWHIuytTO/YKcx7U8Qbv st+/jgMA+GXLoc5mVTwVFhe1j0KHiAACEaUQ9d6dp8actkf1CBk0++Uvft81c3pCzQu+pVc6Hfzg /XvaBlDnQ1mOvrRlYzTiQvk1Vp9ohhp5aXFl79mnkS04fzG+nG4FyYlhpxva/9T3e/dOHNDmg5b+ 4QXq3ku+3vPW5A1sdaZDRAvFBSVcpVuPeHbBQ0OnD9bl/SZk/THi0yyzbu+vx0b/4YzqGXTPjJe/ +H3XzFntzM/7ll7tmLnhoyGu67NlyoiOlyq0M4z6vpvufebDOdP76OZ2kudcrT535KG9JtRdOXJx 2iVnRFtV90kpC19OmT2xjfmZYMPx4Mrrp+fORmR/ev2T/hfNPmNJp4c+vmfynJmDw8pfiPW2XwFC QGBBzH5UHfxnhXp+uU/SpXtf+nrOp6/MmzlQW3C0dP+u2ed25zZ6uMDUsfTlizmzrjgjY7x6znxh 2csvzx4bZ1sWWHWkRcXlY7Nflr1kffOdZV90C/Y+pY4cfOqPIz89/80HcxppHh6YHxOdWS6bW6JN Ptl38cq580d3nNVLm7vffOnEwwXnbcH7fto25qJZP4Tp/PDKGU+9PHtaR2pxhO0MZ8059ljcEdRQ Ii+CYAZ7WNJFRdsRSx6/r9OMftrcP53XTo48CaBJfzzMLz3HuLDAq1Nl7PjnZ4/u325BN5+Sn9Vy ysFj7XWdEJEQaHSvQUABKYbPXDcj/Ho582ihsvPF5AXL5y2e1HVWH5/8X2yXjj5kHfdu2fKlw96O 89NlKZNmbdu39sU13w6DRhf7U+/vCK2gA9qYI/qveXXzgZmvT+w0K8F0uabs5JEHEVEGACDwZkCt zmBPGP3evMWzpz/couwDTVFaD9pe0fKreSt6XDRpHhESRn/Zd/qCGcMiTc+20VrTCHUTShKxUI7Q pAts+yFPLb6v04z+XnlnuCsnRxwB8DlzNu/hc1xMm4gRjz236fc9Mye1rH5DmZ/R99L3K90CGiIl IIisk+jbb5y5csvzK6e2XNhZmX3GnnVg9v1bwE1/kiaAyAtI+cceihoy5clHhnec0oXKvFZYah1a 2nLcjlGTp8xc0IN9wsd8ybei/Fr/jA82hlczAQmm0D5fvL7lwKx3ZvecmWC5XFn2x4lx+xEVokm6 o7E0Q33/3Mh7vjmjfrY6YMjuIWPnvf/OEGLZPm1G4klD8Ew+ZvCPj675Yfayh2LmtsM8S87G9dOK EO9Q89AddxzBuhoywtgu74UMABhd/y5K1YR1cLtsExBRdt2p6GgiXDEBACBEYQEA4L37XWFN+0oB wC3E6BGUsoZnI87ybISN8BUUAIBKRdnBxTWQJ/2aZs98ahZT/dvjxFE4lBKq3TkqN51HZeXl8btq Ap5bZ1f2LkYEJLU9DwlwhLC+NkKxDhDhNrgYlCjS3lbg4BYRBJcbHooAlqIm9yECRZxMaI3TZ/xG 2rk8iQhG6eJFQIpg5e+QeuoRWnI6moJcBxA+XHIozLkADoPkpNXNWxfMUgcDBPeVyO2XPvTUN5Ln mRa/yyAr7mZH+TeCIBteg4xPNvAl+hvviqKkeB8zRZL4cFF0J1x5hKLqh2VAAAEFl3QpAdB1kpxb q9va2x3qXocZ0yHP5E1Ead/cbQB8eYN9RaAdWZ1pZ3aim3MLROLL2SsAjFdcHDqCQGgeEJoQAxUI EW1Np3sJSD0ZbaUAnM1lbMaJROsg4KGP5/845AwRHBU50Wk7v3lCARbH6RN/xGBoz7LOsxc/+cvS 7n+kfTLP5/TljQPK5Tb+2KczkvWruKSW/pRveUWGlxdXkTj15ce/Xn//2nw5Xz4QEc+MjovsyUa2 uZI1JjmP/0giBfMAgLhfcX/omAHlTKjM+dPzbft89XhciA+oLNXlcj6sKLHv3Ll7v1vwXb7GfDF+ 55Jz2axcHzl0aPL3p/48FRVhLNYfOlbSlo0cmaeWt8huaD8hhP9kcpKdpolodkgCgCJvQYpNcGrU sXu3rJiTtQUA1jzSOmN7SWVnsFgCD52p6l/OtpA5f34poc/XS1pJdpTJMbS840pE5ROE3IiIbD9a 1aHGqytYou7f8dzw2HIAgH3fLXsn9Lp/S/bsBtWFPLqPo9XgIwffm3K4NsJwenG85rcdOVmjA36v DDxxwdbeGpBc0Trpvu1vzEooRcSK9CGRp86WCIP9dABfnlbFZlc4OpTaM/LXTus4/BMBqThfwbfG dD48Pd8RAwA3niQO5DG+F/PYXrbWQw78vnL8sd9XAgDAiYVttPt3ZF0bmHXogk9Vi2tGIoo8j4QH ABtxiYBtPVwVW0m6+ldFjt32xgPxxQAA5zelfKpJU3ZIDq3AdzO4fvbIvukT7p+3e+Jw4gCA6mWJ 6q1lZYVPCT/uC2cYAGBibIH+rXf/9NacvFQEKuN068u/pVf1PW8FtS1D1BaZg1rynYau3Pz0oIzN AFD55X3Hf0g/VUHxN//9UBQFP2xKiyrhgvXG2AfeXjWuY+EqALiyPeVLrzPycyq9j8F8ySinAQQO BCchxO3pPPnNy5lTv/zgud1b1rd6MIwZVOYEZZLeW+2sKva7BCCjAQDoYGRIzOnfV8w+Qwjh/3g2 LuPHawa7tw8GHD/vjLf4drIEtB26dcW0niWISHLua3niWBbXREUqBxQba/fzi9u96fUFuRsRSMaZ uIw9aZUDCi/mBp+4WD2gXOGgz361sFPbT2Z3iNShtqzqslLOGDoi4qajSxtz4ykm1N4iKvb88Fhi AgBTysCI7VcKK/qe2PxLFADkNJ6bB8KEO1TaiKMfLbyvCBGoqozY80czfH1HLJp7ckE8qcS0mVfW HtxSUsObAg8v2p4zS/Husm2/bmw1OoIZWGYDZRe9l5ezsoS1SeXiPIV2kbWlJS9fl9W3vOWkc1Ne fGrlW4P8agAAdhyvTiqy+oY60rYFPDXg0zEsS1GhjE3mJJfDXz0CwQDgRgC/E9yxg5VECMcfa3EN iUIgaK+/WdzkNENaa+DV7a+jyAmkdk6algRLi1rMvRRZvm4jbbU+RtBW6zHSPADNI+NtQOJllqrJ gQChnYKi7R6LbsEJ4Ix16UG0Mmjx89CwVhG7Iis/H5/S1ry0U24+MJzlcgdQXGE0oMC6WUxAlCJW Ybki8b0sKmJP2AIWH7eRSAMBjpAGvCtarOHtiqTDMvrXPwlvcG8S7Xr8lLLc6TXweF30ziO8/BAt lQ4PvulNQTgbZdCMP8fW7NzBWo5MbUTYLv8DAP+4dVrIXgZQdlRS/dZGS1EPzgJQc01KL+oSpYpL 79YSXyhvm8S7c4HIhuSKtK7c83r8I/dx4pC1LpPR3n/QAD0bTWUrlYojfNtLKVPXpoIgsB7NVOik CsKCPW4fIdEa7RBe4QVi01+4zFuqUs3d6joncXeuQCKf+7YFsJZIWlaNRW0RKJUNRMtNGepNQu4r 8clqrrtzCin1dbvm3suEN1D/v6UNHbxAe+lbX53yxrfPTIm8lv/OnKmTj1nY4Q4rbSCE4OlvFivK 7U4vtdoiaDV+nbTeSMwA4BchOxIeGXQR4qeUd/N9+9imgpzBX704qb1BHRkrqHzW50QROzzZBgAA iIgIVYWyMidqZXKzwluj7uitUYMIAHI9dS6yVcTJ0K4LK73sb53XB9gSdlbHl16rKBUeXTTiu+pT LzyTn3ahb36VX6ugdv4XdBP9zPBI42OgRIYACIBUw0oLGkSxwXVOBCQEUUnM8jInamUKs0Kj0SR6 a9QoAoA8mDofHRt+gnFptVFDyzWCXOGwaONv6N0NnPh6LgDkTti4OKQaGAUbFNaoCXiLILqKzjUq FZXZXhwtV9FaH8MJRXBdigmxliytJUCMrEZjdVplPgpnuFYTqAREUiECaRkXss1XLWtUEq72UyiN QMtk+vDKhu+HB9KVdF61FzhMCgAwAtzoNeF2tloUGo3VzvCMTn/DiewwJqUMAH57/cVQ7fPAqln/ oMJFp+qzHC0C0MBk1bBCVYkagAUAGsBZXzFdt2BOACL3CVAJLCugf8SNTItDIrljXalXU5wdikJi oRiNjaZF1j/MUvd+3MiUCgDYAynPwrFPJt9czuC7e31SP179aCEd261NZ3lWgNGAjupKfwSsLgMA iWhFg4j19vPAgAgAMkpgHKxcxXhrjTls1I35BQ/k9sagkTgbXucoqWudYFCUO3iNUmNRa728O2m9 pVymNow5GRap/5MQgkeeci2wJcA1eBbnqs1mluNowVjeRHCCAp6rd00QaERA3jug9vuTeQs8IQIn AHvvqfXaJ7/5Yk4Oie6d0LH7NZ3RIDoM5QEiYn1aXCyHkjJHe/RWVtKOfK8Kk90HAIyISMbEBnsL fA3jo/aNk3sFtwAAqBHBFBcRfUbmAAv8RdwVqRV9R2RA1Zbr4Cy8iQYIBUBoEQjNCUzoCat26jnC G2kgAKIo8na7nQMAiCXEUZ29+R1l9XdHgVa1AiKneWQqgTA8ykIcPB3A0QAARCRA1LxN3rWSJz6O umgSACAasYlcMkB4OLGlIu7qVma87G388VfGflHP8Jk9KaEiAgCkIAYo7Lws8k8BtJmioqPRoepS 7ZAlGghfQTeYhyCiKJOhmaZJqXfwNBPn3Psk5Wg1HbjSWECKQbpx4zoCAEjUFgfbYa9FPSGtwVju UL5n5fjHDsgc2Z3gZiT0OtCaSpHx5gAAeErj4FXJaxnHlT6EK41ptN3t3DxRAKiuzfqyKqldC6OS bv6UQiJ7W4sBjFclx8pWDgCumVea4xTttzvlCRUK13QoirdpyJ0DeTs6ve/7k3FeyyFcZeSNDwRO kqwIHyZJcdTk3IYJBCCgm3R8lefc52J8apDW3jz9aS+X1pOQmxc6IEjOqn6AtN7ZP7vZJzJBZQCU e27ZgwBqIzBKyUlWh0vpQbf2SjKnoGh/2KboW0yIlQIAolAQu7+/8V+ptPm7gUARQtEWW1xEXnxC i7y0V3t8f+nLtL65aScnpKbjZeH0AqfeS2uqDB968ey+lBdBohcQI4CiujZCcur1Hge2r/vjvk0H gx7hZH6U0Gb0GdjybP0cFCHg15oPVctMBSG9M37YteqZ1hqwAAAxAMhtAE5CiO3rYb7n1lQXD8kQ 6fsKdMkXp90XeCHrc9nFXRvXT+T92rLejPqblJs0fufw5ul2JIRwRM6FKuWmguDel3/cveppVzv0 pHHP1wB0VjF2szKg8qxXXVuDXz9LCTta6KfngsNy9OzP1dcLruoRkSGE8IhI5rXWhHAKb5tJ3cLo yzqraXuNKsGcK6+tISYUkQjHJgSMpkwWH59WRrHr3G/PfDZpB0g5dToPQBYBYPqqQVKeKjObQljB lJtzWY+IFCFERERqZmtvvaD2MfNKZZPX9jr4cuZqNe9gTSWXbxSrnP4+xX9jhjr2as2AzFA5X55Z nBe84pVS5VMp0k3zchkdZGe8BEGrN0El12QxAFgB2OrKGg0T7MTy3BvV13KRpwjAjaQgIQQBOcLW PojbrQJFRKBFkaAvxRm8BI4yFGbc4Mmmp6b4fX9e0TrpwYcuwYmXAAGJ2MR3vfyT052zy+PGVLTs /nLOzmd/gYLj1BNjH1r5Yw11y6yPzUnzEYyzmrZZFP7WK4qi2vdZmrpjehABAI5VO0NUalNpyD1X zx58fSkAOKD2XDMDOHa8M8/DngLQ6noNKlqnCamuYUERHGH2sPFNDsbl/zQj/vjqex2zS/3GFkck v3li74tbAHLI0917v/VtDRUOtSU/ImgpbUinnQ8NC1y3f/vx5357b9WjKen4KiHEPD9BV6OWtano PGnJO9880ety7WGy1QCUL4Dp/Tsy0B135WAVtP7obMSpY18AinMAHX4AlBMIa0EgVgCwIaIdae8q lIVWCvKoQqt63CEnG2uoTUcQOSF2/5CQGzkr36j7DQCwExF/Kyg3RVLAaBAQCRACXG3ElIValpWV NHRUKIpyGgyGm94YxhEiIGJ2nnx2Fcs7gylb0QVCGeqdIaRRoEI4kfHmCVgIcDyhhGKmwT2MiKLI y+XyUn9//7IGIepzmJ66BOw/0WWhc0KA9gsC4lLbjwoUKH9nA4qYR5DYWIclZ80HlDMPaWdBd6RU vgRADSAoAUUW0KEiolMBINBIe5XwqqRtnKqrkSBH5BxFTLoVF2nrmXUy3pgCaL/z1id1VvNWAK5W Nb7uRm6+XhuMwSaI0gQEWewBk/6dbazpd183jhJnBDBcbNys+45AgzSmu1PBEgdt9Hnsorzyu9MM VEfW0xkBwJwtcdHChgCUHJLkGwSn+zB1zk5IXwBNFED2TwCiu5i9IA+7ICg72KDagyGESN0GMtdJ jbJvBgQAVi2lBkMHS03JDRfdthJlMWcoLs9dbymwh5T6bFT8QKRKwep0qTm6vRKg8ox7iykAEOjA 0zV+T24nxNrgOOQ1hCQ0IT/yvwcEIIJD+p7aPn/0+rADEZu/PP/79E8399+0b1nZmcTvyJ6LV395 qN04xfDFoyNO5G55R39MGNA7vMfgbQBwucu4hzO6rX8ma1Oa6WFN/Mi1R95onR/+Zv340oWzs61X Z/Wuc2f2LRk18cUHJo+K/U114hOfXeVt+2vajTwGACcmL+yf9u7ME0Im+HZps2DpF4R0sb09Iem4 4cCWOeb2488pWo+8CuDhpoQcRztstKbqatQqRB96kleTN8RCq7e9dxfF7rNn9j49atILD04e0WqP qx0Nt39oRPCZc9vTbdVXv5/07Nq93/qnvav+4tOvFp1nB3IdHl/4TIfoBXvOX98zLWmy5v7vvvvu 1GsPxiec5PVDmDZtfssZHlA+fkvIyaN7jz9gOq67f+Ol8u0/vDjKLyPb0MupYom5GsiMoZrLJzYU ZPx5atPEAYtthY+3zS/b9NPODrkhkyLmLZ3wJQDcuLF2fvqnmoTfWuy9cH332K5TtPd9993nf778 QOsOp3j9AHn7+O387M7VzIG0m17PJj2ov3zh+7xc47UfJ8z/aFd1XOGP+MF7n804yveOpIbNX9Sj reK30+cPvLA+RTvhw/Wpe7k9y8N++sMwzh4adTxodf88YQwf0NTYVgBYMEpbcmS94cLVKxtHzv3k 6Ln5iRXly19Y1M9iwyB/hkVCiPjeg5GFBHNGf/r8qr5r1nyh8cU7AAAgAElEQVRw8cl1bw7ILcIE Egm/z5494NrxpVsyq679NH7qyi2l3U17uXfe/WzyEUf3dpakhxY+zHA2RnSIbGVWxFtH8vRRPcNL GxYC0CJHCQ6z3GEqDvr4zedapO/f1Pr4dXtXm5cz92brQgGA0eKAofeEnzm67c9HLOf9Hvzhz/LU n16bpDl7tbyvg4TfsZNl8I0xJ7ejdqdl7JwV/4Bq1PzhUYeq9q8IPGTt3S8gafhuAHC5+NEgOjM1 2af3D3vsvW9q2pX8pNq44/QkgyY4894HBlz7cs2dWuByjMgTwWmWOy1lQWtWvBCRtvfnuOPZ9u42 haO8ztkF2hsoOiLv7Y/W7HmlIEb9dfqhZ796Zc1lAFg3sl/g8TM7z084tOnrqRMMWZ8/IDvg/O5I ca+a6Icdv62emgoSG+CucVcOVhQh9vz8/A+CrSuOirasSJ6NU6O8lY2ThZoEOtgsQKCNB29bnVMh OUT1DgZHiN2T4YQQvri42CiKooYitToLN278dX/X3xMQEVmWr46Pj7/lItQ+GRmKiysdotrbn3Iq taIoyuvn4IDiKxrPCZIDJ4qiURCEGn9/f6Nr3zqSMM4JAFBZ+WkFz/NegiA0vhjUjt3QZoZhPNbM qyPnFCPissLCGj+FcCZRLhb5U858DQhmGeUs0FBcsRegg+Y13bLNmrlpoigKhBAC4ISMIHB0LU/8 RhCNrWnbxXGATlmDA6n9wzWiQtAj0flGbNDDA5WHwAnS3kU2r+GbnXSsSQF7/dyaf4s8QO4WT4d8 awh2gPLjkoitBweNJ5IT7vCfupkuX9WeOItaNdrAeEUikYf0l9oIVZ0HsJXVfy7YJImRgK6SrEPO z1K6zjWlxgRctqmHbeHluiaafFOSQ+eu2dagiAAkLpwuEcC3A4BPa4DSox6LQoDIHSIbfAL4/Gi3 q6DIAbBaqNfpIhJnrK7AoqyJ4hdCiwIbfsQcuOxDh6JDVd15ySAKDofj/x/nSgQkpP4kJIRg2ruD tx1cffn+zJ1bxhcsS03rknTP+ktVuT75Wdvnf/q2bYZMoaBrlDUXSDllBQAgsYscq8bH7tt+RN5H njDkaHgDDhOpPcEJIXg6dfa2EwX7grMKfpuw9aOd42QyilhVtusGg1OqYBq2sTRBrUsrF6JlSZ19 0w4BQEsoTI/WeV/PpNiz3y4NLY992v0YurcNLjhyIe142YVvpq1dGsY/q4s9BoAiiPVhUVFSOxbt AoqDR3TadrwwXZ+Vt2f81o92jZXJKGJR27KrK3m3XHeflRkZiefj3r9iPj9z79rMbhQILK9oUxia NGj1OG9SlZoyZEOiITeo+PLWuSsu4iy1PICxhbc61bJjjy9+IkRIzV95alfm519eyN8//pWHDgxt GRNisKLWR0mLVsEIJGhZdukL98W/Y87NXGQ8XP7O6wfNVkqlg6pyw+YCbUCjh2FCQPxyYfz6RGO2 X/HlzQtWpHGCShFEO8PbHE7o2O3rnwgR3t6/jkUCKDYREm67LK2g7ZF272Fl5sLTX7/63h8gUki3 NoZ07rP6te7K4jOzZu5Keu3biJz8feO+WLV3rEquYkwB8ZmBrft+cJwQG38/AwRQFEj9+EgACYII NgAy/5J51dQuq4vTSpaeWP3EynRfTVmQMoKiIZNjaOl+0KZrlz1tMi/1y93z1Uufn9GV6rQJDiuT bfFGgfgNW1HS5uNf33OWZT12+Ye3V6WjCMC0sgR27P3JqtGRefBTHBOvP7ov70rqhI1fauzx3JLl AHCjDcp9Y6L+PLfdmmorOTbnsx9l4/19wioD9EKJlXbYsktAmVADNgIiNgyZS1pUBGnOSQa/t/zc totPrPmz7NjkN6fe2y8qSl9dgz7+Cgo9PvWLlKQ/LDQQmUYEBAJoEoBP6tZuw7mKrIC8nF9mfvWB fbJMoaRqVJYM0YD1KTUEkVB0LXtXhV624s4Z275IPFWaF1gua2f1bzv0zS8Hk6Im5haJIDaaG11u KkQEBFEgA2Y8cOHPDzf8YC46MW31t7IHA3xDK/1DhHIL5bDkGEDRuhqcgDdS3eKLLwzcXrhgW+vf 036eMeK1XelDlg3589cBsW+frT4z+8qOix+vBIeT89Lbasotn8HfUBF/17o34eHhNgA4gojHqkrs EaLo8ANwIgAhhHCEgNVTfR5SFGWXyWQGtwa7tQgODq4qrilGykppKKrpMgdEREKIxd9fX9nUWK6o 5RRYUxELu+TklMnlci+aprWEuCtSCoLAq1S8yWQSbGFhYY5bzeHn51djMhUUOBygE0VWTjhOGlNG CAALHMcRlgUEYM2BgYFVTY1DCEFErC4u7pjpwI6VoJYBAiKgDBFY6YQlForiTTSpW1+ZDAIvXaJU 7Vbmm9NmPiUH/iuObZfIMKgH0SkH0epLhKoAmqvyBb7CH8QaNcjDc0RGn0tZ07oTtPsBCHJA/g6f aGi7KG+RbvUa+VWN/7N/EGKhhBvRptvCrfOGolNSIwfwRKqvBU8MPvMuMeYzH8u5jW8Dcg1I4Shx 0WquAwT1Boi4r3ba2t+OyEtOnPGKpJFmLXZ3rojc4VR03W7WPXkZuCZsJiBFizzZiLzkxOnvkaoM VXqpKvTaeoDK8/URwxtjMRynbLvRoh5y3tty4hG38cpOSppZDYOlogAg1Hbg8cwGQUHW8oA1+NX3 LF4jCghvrPuSCAdgDQ0NNXna638PY0UanluPSLZSGrihVdX2yT0FcXH+8y+VZtO/AvBz3thXenrN 7Nff/HxX1J4LRb6KhEGWwRNHZ323aNCNdaD9Y37xUVWlR7ftkVPXNFXu5M5RSM8hApcLAJA0bq0x PXXs++9+cmHb5sNZ/kJEsnPg/WOub35uTCUAACGES+kX+s5xRyuvbsaWRQAAY/oWF6Ve7zSNF8AU 65K+q0P7Z3+pfm9m2xeOp16OKsjMKcdW6jKR4majyN/ofCGy1HYg5ITCoS1oPWObvbEdiY3saIja tN/WZ+9PPPvN7pMhNboEYdyS13I/X3xPKQDAuJTdVcdWjl3+4Q8nozen1fiGdB9q6j9pavaXM3rV AACQ8Cds6amp61LeXXR41xmDzqkLqb63U7xlZx4ozRyUAgC8uvXSye9TRj729qf7oi4Z5bLYQf0q nnhxxPU54e5CttM/3Fl+es3s11//bGf0zjSzj77Hfcahjy7KXj0uwQwAEHkw14m0+LooEIS60vHG x4OIeHDVlB6Zq7f8GV7IhMKwmU8XbHxrZlHtddt6es3sj9ekHvp1w8HCQK/4vtbRc+dkf/Jo72oA AKeKv0CAmk5Ali2NB2LKGP5bAcRtthqoAABYvO7UeW5a8hNrN56Jul4WibMeua+4MDdbK9BUKQDA 4CWpOXnOCYvfWLmlRW6liXpw+vzSWOM2ZbnoMAGAsHxH2vH35vTJ/mzj6YhsDKUGPrKgcPv7iwpq 7XNuXjX6/UOv/fJr3pWrVuFqY+5P3JIzFZe3Ll0xfcm6TaeusurkUdNL3n6whe31IxZlXhUYAwAE kRKfowjYoJa7QSntFwE0sxieyyNkuOP06TXfGx97+cTWk1WBDmWw8f5ubUyVZx1qygaNJDwAABxy /iKgMB1FIad2PfC1scJ3Igq/mExQPjRltzN73dS3nv/y95+2HS/yk8f2sY4YP/L6V48PNwAAMHbn eYL0nDxtQpYoCv2JLNIc03nQR1kbX6i+VC3K242cXnj068l5ZP0Ut/PeIefPU0BNVwiy6w2+i29Q pLdW1n4XUFNj5GlxGeFpW4cxz5elp6asXPD86q2HMxmvLiMml344oaVl2d5qtU0AQ1gCcJBNXgBK dAKAQJLWWnfcCx8cy2V/cRrK8mp/C9tWTu/754cbj4eWop7qPnli4amP5ue5SkjcDf4WYkxRUZE/ TQt6QaBlAICMKAoiwwiIKIiiKDAMwwEAMAznLBFCDfEBYLmV8bfZNwj/yiLUEhObXIPbddxcxqzL ZRGAa3QBKCg5yGlSEUAE/1IxCILsrlUwnlBSUqImhAQjopIQjuI4QhEivVzmE+VyealOpytuaG+B yaSjzI5IQniaCHaKEANFBCPNCiaK5x2ElvnzTjqIZ22XvFW2fV1p+9k2lD2rBSEYRpD3dreo4cLQ DiRMkSBrs9cY8sZ2jo41A3CAyKLCeTTAu/TZ12hbRtKtjlFkgkususcWG/0XXiGcjVLaD6t8yx7/ BOy5t9ViQWRDcwzBr82zK0eUASAquEsK75KFz9O29OFuUTQEKQrGqqXWTnXOCYoAjkpJRV0UPKU/ UVDE7qwO+/ZtJxVVIzL+vH/BA2Pk5t3PENFS78gFdgPQdZZkNTyk5YBQALRcijwxaqmwgLOA+0MS xXOqxE3G0Pc/Bc4p+pXMe5+yX+lwO+vRJAgjCrKWByz6N1aa2T7FDVPstRHVwqCgoNKbDdGMZjSj GXeK9fepRr51rvtrIaNmTt374fiz/7Y9/2n8LcrNISEhVQZDDs9xcoUoiqJMxXEcJ+ft/v58GABH CLnjPObdODd3MQfC3yyM6WL3Xedvg4ODLYiYU15ermQYNc1xVoaiKIqmaZoQQjkpJ00chKJp2qbT 6apd1ytUozFUm83lNhH9CSUnAEEATBDwDADI65OWDnWPCruq7w4A2EGLdlZlS23D2K8FuTkoDUHr rFafkRkOiKlqmP4lhCOcsrPBqe6XqhCqvImzPKZp/S8CKAu64FB3riCcjQIA4GhvUSDextvW0qC1 1UgCeGlunrKqupVr5W3eQLQoiSOvTyNZDgJSJMlp9NCOpsE2LhDkLfebApd/wtFR5ptKGiCA1By6 CetRlAQ/XftbukBkdQXmoOe/cpI4I6WwM5ws7ojckZUAyN9dQQrtXcYrO+6x+8370dW5AgAghFQE BgZWNLV/M5rRjGb8JYiANO3Wd+z/BP4WB6v25m645YbNuCPURro8VlrURd+ackSJROwvttYUWhSc QkmIg+J5QcbzNEtRFE14yfngAAgLDhQoygnAciaf6ecAalUBsAnnkzgJ4WxUwwpLAEBRFAWallVz Eau/oK9m7KTp8DhBGdOWIO8HaNMRvjqACFV+RHQqRFlIpt174g8OJrG6bhxUJJpEeYvvKWdOKyLa dfXMeg/HTxirUx6/m1N1NhKstcNRDkzHH4/Zzz4wjWFDpzPmE4sBubtrYkwp7IKs9U5TSMrnNrZf SW3KGwgAoQgjuK+7KKX+FIG3WbHoCgJIqQxOVb/1dlnXcgIcEUUFb/Z5dAsQFGTmg8NBtAUTIIqb C4QSAQBtIqPP5ZWd9nCK2HMWn/k5PKhsHqpYK0JCQopuJ6LajGY0oxl3CqToYwSomXKZMvPftuXf wP9Jr/L/GlxSoY3Tl+VyWhRFDAoKspeWlipomvZGtKsFgWEpSmAJB4RrnJrEBuMgI4qCQNMcIcQq k8mqfH19zXU37PR0lOl05laIZhUhdooIBpo4TDQhDiLKQjgegu0u6SozTe8r8Ck/2Z92pvcl6FSJ RK0EQlOAtQROQggQSnQyrS9ZNNOO8Wz9GIIgGMPCwrIIIZiNqAg92X4y48x7lIiWNoD8raUv6uxg /K471X231Pgu3e6UtTE1rLbjSIhdXzxiKGM++AoI5nqlX/8uAAmPAVxZC1B86A5/WRQvyCL+tGtH ppp9lh4RKAV3w+lERlQonOV+ueMdVkX3nrTj6iAK7eob69EIBERZcDkn63zGxrYq5hWdrCKj5Aln pAghjZxhACivda7+UpVMM5rRjGY0wzP+v2ju2oybo4lUqKcbqwUALIhICgoKFBqNqCAKighWmhYE Qa6gKC+eohhERIqi7IQQi9Pp5ChEW0hIiJteTXw8CMXFNTUAIEeUC0CCOFDUd3NxTbnJ5aJZp5tk JcGTdwDAjqKiIhVFUS1FUWzSOWoqbRdFiB0RP6u5vv6Asuz9uQTMvYhoDfKwDvVDEVoQieqaw3v8 tyafeekAHNRFrgAkvhKngXJGKK1uzDCvG4FqUN1X74ci41OBtNZQqxrfcH4ChHUItN+pmsBXvrXL ksukApE65wpRlFNlfn6hxUR3WEQ89Et5eflFnud9bnIcUK9pwgHFc7SLqWaapqsDAwMrmiNXzWhG M5rxz6HZwWqGG2odMhs0bDiKSACuyQoKFBQAQFhYGE+Ie0WQyzhCJmaW+FYqeFGU36yvExJCLDpd SEXDooWQkBBnaWmpGQD84NYxIVSpSCMJhdqxruYbja9pq37rAvYcP4q6mfoniw5593KHqlU14W2N igkIIXaapitiNKQMT3W8fX4goVGQtTpg8Z2xgUajm56PQGl4h2poEQ9q12geymSyEn+drrQuHUkI 4crKykoAgEXEm7Roqi+0IlKJlUjTNM+yfLXVipV6vf5uBcma0YxmNKMZt4lmB6sZt4VaZ8VjSfnN EEtiHYhYBLfWbhBdK0IJIXwmYpGysJADABVFUTfURomEuv8jIU6bySRU6HTuVaVhWm11jvjASbng DEaRVwKAJH3h6Tg5G+XiXBGGYQyOgIDCMIAmNLBuBgqRUhprtLOuEsrigQHPAeGslHvHAFmJv79/ iSvXKzAw0JyP+Tnycrk3TTtv4/eLYGO1tkqNpiYegPO0Ps1oRjOa0Yy/H80OVjP+cdQ6TneVjqrV CSqo5ZFRtS+SA0ApS0tpiqIIz/NiSEi4o6mUV61OjrG83MjzPO9HCPESRVHRgJfUYOP6v2hacAoC bbQEBJRGEXIXzlUtRJEQykJTvInGWu5Uo7kJkeQSRJEXaJpjWbba39+/oqkChnAS3ii62Iz/Drwx MLD76is9ox/75ZMtT3UI/st9zJrRjH8bx5Z1CH11w/XhZ2xBYcohr+7OXTf+2D8537WU9oEPf68Y Kh8088zRj2enb1/UJvaxHYG9erz87q5vJyUV33qE/y7csVR+M5rxb4AQgoQQQVKxJc4oQuzBwcGW wMBAs16vt96KT0QIwcDAQHNISEgBz/PZKpXzOgBUsKxY4/oCgHKHw3ENkc0KCQkp+EvOlQsYnjeo VM7rhJDKuvkoiqpS83w2smyWw+HIDggIKG0mn//3480Xnum88IPtg8emowwAgALsj4TMY23E69+2 7W6RvX+d4tnnU0bM/vZCu3/blrsF4n7mxedeHDT/y+NdoYkmzP9N2LW0Q3JC5z7L5228Gv1v29IQ uH6w+quDlYsuk7hF0e06q9u2C79tBZ27hUAJIQA4H0UxEQAAREgAxEXIK8JOpHSNbxHW4sMBbx1L /qft+LvQHMFqxv8p1EaFbCD1zDSBZ24X/lM6bBxNO4N8Wxhc5v7H5mvGPwNEJJMTWgw6o+e6X6rq dQoAnIggACLHCTfj+f13w+qoVp3/8ce5F5KiDwFA2r9tz90hTnYhdeak820Dy2Bat1P/tjW3glzl JSq8vERvlfBfdQ3Y8M0e72JDh5624KFfHd/16ioAQPLEPzun1OIHOAqk66EIlAhSz3NRANGfELov DeJv/6wVfx+aI1jN+D8LQohYGxVzff0nRG7F/+R8zfj7sHvJYPWDUV6TjxaUDiy6tC9B/eU9cxJS zsTQRESaYijn3pXtEsL8ZnkFxC7qNPHdboh440EW8Vf5S5P69YoO1D3qG5449+EXPk9sqmsFIpKv Ux5q1SM2dKrWL+Kx7vc/PnT9eVRjarxX/4TYB9qPfKJb3b6bU0b79IpoOynwkQ0dAACOpab4Te4f f5+fT8BjEZ3ufWTZlwfDAQD2jwWv0R26jOs97IWeM4e2G+6j9XksoP39Ux7bmhb0ZveAmBkzXpp7 saSwTcXhjwb7J40b3/ML1LjZdfktzZIxifdEab0WeOlaLxg8/70+a05jkw2ZMXud4tmHO/WO0Hot DO1475SlS5d2axcdPXHgqqvRHwzx6dAq6v7Jk8eNuScwMOHR3nM+jZeO/TT71sx+3WICdfN8Q9vP G/Pkx10Qka5bl01vPNRqSJvASUq53xPR3cdOWPjZiTAAgLd6husHRLSec7akOLH09Ppefu2GTEt8 o9itmfOWd6eFD02MHq/1CVncbvDU0St3pftJY6fKhrTwvzegw9xxC3/NlAMArJnaul14dNL0biln I1/rp+8Vnzxv7KwH+g+J0ioXBrXqPWvk02sTsEGkLD8/VfnM2OQBYTrdAv+obrNmLf8+AREJjgV6 XlLLYQntZz0wsl/yaJ/gXtNmby/yry6sNFXlWTIM5U4rAEDmrx9o5wztODzAJ2BRaPyAqY+v3hsN ALB/KigmdOowJqnfM/0W3tflngAf7SK/uMHTxy7fFtHw2PZ8MV0/KjH8YbXc54mILqMfmf/50RYN zqn/x955h0dRfX383JnZli1JNr33hCT0hN679KKg0gSkI0izi0ZUFEFQEJUmFgSNCtK7oUNIIKEk mEJ6L5vsJttn5rx/bMA0qth+73yeJ88Du3PL3LnJfvecc8+hP186onVbX7cZKpfQFwZMXd7rYAZK oBGX3uvps+Kq3fMpJeW+VWl7OsscBk195atzCsRE0aqZAzuFudrPcXINnjto5so+cdnZUgCAlLEg ntw2bGTbTrNG9uvU7iknr76TXj1T7dh0X8cxmxYOaNvFT/28ROa2qOUTM0a/tuum0932z20YsciK lNh6u8bhfwHBgiUg8Ni4E4Mv8D+MPLwfFd6RU9w6lyQt46WiVq3DFGGhzhJy1oLm2itB+46XLQhu 10Orzk/3ybh8/NmQ8c6LAeACYqx4QfSsaecMvs/6RvfJDdOXSH/fs/nJzibPVQDQpCjzJ0NadP01 U/Q659mJ7RZQW6W5dXzMR8uXtxr92Zdfy9lnnijSc3ZtvoOZAKDndcXtKiWShf4hAa9f3jIof8lb 25any8MjoruFZvMVed57tn4yoPvnpe94JLqZeEvhi2nXfpUr2weldO/gQGXl/t7yh5Xb2r/Zd+p3 kQknFIXx2SKF3EnaoWOkQuHb8Es4psQoJk3ZOj/TpBrcskuPDItZb5d7Knb8Z7z7WgD4qfE9ICK9 sGvguFOFokVOrXoX+btKKxIP755UWsuFuElgrohifWurLy+/kB6Z2iIqqqB1C5erpxGZxR19J56p 8ZziFdW3INRUzOQc2za2w0L3TxBx3w+L+0RtOFiwXOre2trPly6rqsgafuC7LX17b8M3wzKfpXOT cxV5F26KRWIVG9W+ldIhWEnXr9Hy7aT24V9+eXZ5hWtLRbcuXFFtyeWRX635vOv47/EDANB2DF3i k5ZzfU786bwK3D3lypi3Tr3CKdraR4bYn7Ce0A4vyTs7KcOlw5FO/VRFFcX5rZMPHXyyg8HtNQBI wvw1sjlDFs+P54OGhXXsk83U5qvif/xiVBet94oLkZBAZVVOyM8/20+sanm1Y2f1zSBfh2NIYWsE ssgqYm5Ubp9gWrBk9RspkrBObbsGZoEm1+3412uG9H4/dXnb8ogC5Mpm5/y+z8s5Kuhq544KzMvJ izz1y6GeU9YmLfx6UbvqvW8P8/1o1YkVNeoWrl16yfK5qtwhJzd/NLTPm4di4t4bnPZ278Ahx4od FyrCemh6YKW5LPHncW+85/RNHOI3feqFJahCezLhYVWKyzeraFcnF0mL4Aj7J7s6iad1HvhUUrXr 8x5t++aHo4bNu/DzhGen63fFIW6gnycigqXP38o4145qFX69Qxe3ZB81c6zRfiCrJnQYuCvZsNQ+ JKqifwjWlBVfefKnzds6eZ/Hd0THw+8qnsRExCICx9DNF6n+NyJYsAQEHgecAcBQaCvi/HirLwn8 y+j+/Cs17/54fEsrleikq39Uhnrwqg3fjPdL4VmgKJm8lrR/bnP3sXPnvBhtejECcxGKrnYBAPh1 woK2iXrvCeL2o7duOPDTnM0v9pjdQ1Wekbdv53PHEBvU/8xe6O9wuUw0p1DdKWfy17/MOnjkyOzJ odqtlqSzT02Olbn197MeJ2U5/uqb+30QkU5KLOxVq2yd88y0jgk/xt58KomPbN120tJXjuzfPe+N HuwST12Od2HsuiGKtp0o4Ewc7dkqRdprxutL3pw/49mAii3SwqvdMltMqHn7reGfhdg7ZIojnjxx cMNb234aQBrUlUra8aOTXuzmaAoetHrv4YOzv3u77/RObE5aZeKlUUdKUN54rQ5N8fVPq4AZGq8+ Jzst+WTqE52CFvT3M/zEMJSZsyIizyMtUWqcu41d1fmpJ2evXzjm/P5J3pGXaz2mYOTQne8fjJ39 xfKhs/uoK68UHfppyk8l4FxeWBJSoW6fHD7xjXn7jxyZMUSRvcKlPDuq4NC2NqPe/yF/w/63N7SQ y28oWgyKf/2d1Rtjx8rv1NnE2AhxYnbt9DRpNA57Z/28gwf3z5nTpmalOPta71tHN3UghPCLZnTe 2VtRfKH01y1zF227PifF7BUUMeTpj7eMD8zjUQoikXOWz7DnP96569e3lvUXLfY1JnNV2VemRCGK dixZ3e2iOWCMuuf4NWsO/jT3y2nhc9qLyqrz9n0zvvrFJDueB17i6Hnde9icJfOfH/bGK23sCpAw CIBWRiLjY3fGDbnChvYIfOqFt7468Mu8D4baLwiy5Cpu7ds8ihk4VcRZDRzlEpxJdZsV8/aKVTMm Bld+qixLaVdjKg5ARCrh1LXxGVyYt+eIOS9tPrJn3sRW1Ut82SKJNftKt9TVff2SNPaztN69z7x6 9KeZ+7d/MmuUd9Uezdkjk37ele1V/7m1GPde9lMhkq+C3TzzGb8R+47t/2RN1ps9fdMq7Wfq/Qfu 7T1nzZxXn2s9b6B32VZl3rEJC9+I7xLGAIc8zUtcfBMDxix58a3FPd+dGyEva7ghhoh1tZaQSpcO hwct/WT2/mPHpvcT3fpKmp85wGH7cX8Rfb9TzhJkKOo/k79PsGAJCDwOtBkAN9YAWKr+6ZkI/D2w aOU4QiFmGlkWAICnpECRoOKnnx2asLCzmx6/alf83bEqD9YAACAASURBVBVTKaGNjojIzAxzalOs 1frWnNrarq/7Sh9CCPGQWrxZOsNlZxy4A8AdMXOwWO2RllcSXSq9kfJeV/fnY1gAX3veU6NLcamo 0rQYM75b4va3Us1VVTW9DOde0Z3MlUWre3aOW+RdbBqVoutewZc7HF09ZajrB9ZBaikvsRgsjuim ibxKtT6KtIFj0CNx19KhubsAYM8Lkdl0uhY0Fk5pLqrUEJ5HluK55g5atH//Zm7cjtUrt//wS3SA g3RqYY3VrqWr3NfKlxsMRmjiJrySDV4a9HKwePU4+uWY4DIAgLPv9b76ZVJOre1gsQQoJqCqZ6/W 11aOi6756HmAua2cWxZWaAM0l35q+aT7+gWIhPKWW/zNfLr/nniL+/Yff/+Bf6N7yq7VT/dSUJTj pmSNP6PSKkR6jU3gaSpYgjwPBPlTOcD2CfjjQ/tERhvHq+nHu1aKs/WbJ3Ucv4EF9FShY6nmpqMn Y4lExOOEEO0Ps6M/yzry25ffXHRZ4NHrmVVjPxh1DgAAiYQQ4l45eXbX/LpyZJnBOxzjS8pKe0ad BPsjifqoMoPWveDA6i4D3d9qKaKRcqDNrpwqz+XLZGdnilLxhPjl7H2lTyaxnZCug6CrihGfSNJ1 KccqJ80XCwa0Xz+zp1KCDGMxqzGgNPyosb+S0Od5hvdNPvDakExCCH9ycWTOltQa1krxDlC8SZqQ YenAtuyfvOuV0dcJITxi7A3Luoy3uOCelh/W7QjMKtFHFmhPVc5wd53LAkV8FWxQTW2qZ36FJRAA cus/uypNKUuIBxpYW2Ha0zfZSJ04WGz2HXAgZnRAdQwAxI71PnKd1ExLOH28HXwYlkguATLEL/Pn BZ2yCencZP+QIYfM2XHbNop/3t9m+4xuI17Lr1YGqqlWekWV3IWtlBGauat1ipLSHCL1nwqnEASW gMBDwzX1A/IWmwWrCf/+U0wCj0rzDoC7BLlTGhApgCGcj6+HSE47qwCA8Dz83s67xWG1BBooc71I LtNzROTmYo/u8hAVAqF4HvQR/spv/L3s032eez+/++cDk35Kiu98RJZQUq1soXR3cfoNIIuutIDC zkFi8XUPkN+pb4X0Uae2LS4wJb9YCRDSoJZ7PXsAYWz52Chsvjgvft/dceynmxZnM2FRrbv0ueyl rbLSpbkMkObNthaxRGZlJBzn5HHPtBXGeklHdCBR8Azhfb1dRQrGwb5unbKi3INPezmzlVumtuj1 7ZWrr6qD+xZ28SzOZStz7QqrHswZg3JGomNR6uAu1/rahyjr1pUP9pH86BPulQB15uene7gV7ktI LzxfLQ8PV7rcmEWIdSbW+f/r3SkhBKd6K01oMko9rfniBGSUjJi2evl6S8WEpQAAeB6SvAMj0px1 aTV5hK5fsuqPeQGAijEzlRytkCpEFm8PXzuagBQAABFOqVuHXRHnXjIToJpdaYpHBLNYXIuUhFYq DH8kJx7HAcANAIDFfcKDLQQoD3c1cZHIbu+p8rb27l95O8rz77d2BpHUjqVFJrOT952n5SfTmlQS lZHSaVTgFk0AEu9pwEeMod4Z89GoPTnqGW5t+t+09y8tozVZ0oya+40OIJEoWJrRWqXE9J85YS0I LAGBh4WS8QDUA/oBKZ6nxP+ZPwgCDw4BIAQoLKl9oNNffKAdW3WT+Gmd+s3++vjy4YkAQBUAiCuq QdLWAbSr613sBEa9m4NjdbbXgNNn9i7dALaPLTpVB8oIFegIIex386IPHzkct2zjb5LJMo+g7PzI JzMBMi3+KlFlrn0keWnnqg9HeymrAIBkakAuVYM1/7kX1UBa33eyCM2nPfngs99b51aGDysO7P5W 4qGX9wAAvbiTp/JWLRVUDdVNrndgqyvlvAvKqtP+qJHFG0T1aps2wVdqqbqm9NIpus/efvajp84C AJUDIKquBmnb6pOmKRdqJhcw3WtGPLfopZhxkZpvRnl33JrGdCpG/o9KCACAhOahdwMpCXZWMHmr VFXlTl2vnvlt+dtgK3tAXdeCUmYPhrqceeTDES2fuK7x8W/nYryZf/PClLGxxUkAHhXA80BRVpoD qAu432g3KuR1X1ap1JrCfIxBMtSkYUB12PjFn383p1sGAJBSAGmNBujgGGKeSwU1K1wJAOhYCRug oCqzFGGlw1e8s/r1Hn6lAEDSKsDO7Aw8M51IgEQ0256nCAF/N6OXhNdkFuW6HUSUDCHEjCljxTEb XTryEf1rnA6+UatWumh1IU8eOLN9VizYviHQqTpQRKhA+/ndHkgd3nRt8TWj1s5aGu9eCpAFAJDO eDoX6Sk1CfIugaw1HEDYPfs48Npx+6s32Kn5iqjkDV98+mZXH2JcO9B11De5TGvkqbt+GaU5lsgD 2xeMGBX+WUi4e1rsfeb6b0EQWAICD4lB2iVVairMojhty/tdi5S0yqrskUysRkqIf/+fgpdRViNX mevc2ZTQdlglJhrHujZ7YZ2SwHHDvC5c+uH6+LQD389/0pS7caQywRB7LLuXNnii4cxXM7eBrYAk AABMmxRecCHzZNyt1F/HtZ9oLXqxC3Xz9K/bI28qxrTsPv7pzwGgxAPsr7SCc/p9+cG9g0O8lv4+ DWoJCcHN44P3Xz5zcvnLU5fNin8i/IDjtW/tDxX595e0f/r4OhVk3uumRGJilYCZpYpvhLy2KznU f3Sb7Fn1SmKp7XgLsVYRVpPW9qN3XilIO7MnLDHb3EcvNZeLKYcmO3z6U4HZ5zaXXM9L3jtl6KLP q1qYE01rft7zrN6sdLjbabBnhvonXtqRlpd2dMcLQy2lZKzrVd3uwze6VwZMhN3f9P5aJrIarbrc 0MuHf4peMX2QcfuZhKfSyww+aj/OttRqe1ZGWc1Q9Lt/6ZYzLWOyMT0mwJbLruvS7lWtjp4+kJJ+ YHzEaJI+r7/rxYwjmwMSoHeX4N7DvwGA9Li3OkYcuWGZWRMybe+q7nHH39x68uOUH3+YBGNxA6CC t5iuh74z4fXRn36xJf71kauj0ji37mJ3/28+8AXtkYHeJ+P3XB5z5ttNCybnJ3/bjYvjdl/U9TOG PVNwaurYXRB/5S4rj6SkhrP27+l6OPHE2f5b3vpwXvmAdrt8Cn+U7k9z7M9Ejkv8OVJ1ERLuZR8a bOkSrTqQHH9o6XvjqfGfbvk2YfGid6LOFqqft1aEbEya1+vYmZcOXLl0+ZdpPaYbtLMjSwv37z0S leP+jOcLC2d8BgC6e+2NZwa7Jsf/nJlTlfzrvIlvbIKO1pPsruNnJmfK2mpbjxx+Bn5ZjITc+6+c s9TKiSmT2arNDvxq3QfRb47vLtl17vq4/FqjcxDdjGegHmxxDp9342Z1ZcT4/0zsuCCwBAQeErvI T5LMV26+zog9ZxKuyq/Zws8AgESmt4pDj+oVk5Pq1xkU+O9DCMFtE1qfTD2dNCTrBHn1eHDUOz0I Z0WoF1dj1SPytAUJWAGAin73akbnKxHvScrT52QdSlu5ludYsVtQmVFv3gTQ0NJCBn2n/+z5ruur U6q5vJRfX1yTqOOkak+zUWrZRyS0HgCg32ezqn/pm/abUuThIA4flHi71NQTL8w9Gl+4UZ2mOffM oU3HnxDZ2XHgLLmmNVLFvAWQIDEjUvWsqjwHQEwUjeg7tEIXFSLfk/37nhcO/iifHyptsxwAym9f OWZM6+tJ+6s26bMvT9r6A/2Et2dgflAwc5PjzKAxGmQADV2dqhcuVX40MeqTmmvZL2fv/+zDCjeP CrU6vIYqLbDwPCKHrBWBmBmx5I5waPX2pexOl9u8x5Rkzys+sXXFp7yVFbsEaowmdosLRJh69fHd kna+5LWUk7tXFjmpNH6+bbIDxbpkiRcRpdjSJRg7tlbvy7h85I3TuyVLQhQd3gaAHNtzm2WNfW3s tzmGFElW7qGJGz+rmSxVuVhZRzyVV+OgQfxW/nTU65NTHXoae018dsfASebc48ezdn5/9cCz0a+2 vDScFvMiypFzMab1jP1y79M6MzqwAT2Ph7bqudMW8xR37cjNF967VnFj5rU9V1ffoJETObcosBjw LJjLEXi0AIIV6jvSCM8BgIkz6/HZpc+ePZv948qU2sTJv20/05MRSXjKxSsNTdbdWKZDsOVbuyN4 eeR4ADDRhOIJIRi3Ye6BLuVxHjmZR8ZvvnZ4sszOk2dCWu/y6tD7ABm0qHr5sx1WmW+VzitO+P7N j84ZWZmLt15v4nZa3dR/FDCtQ0QRBB7MhEIOAKDV+7fyX30icoWkOm/ejX2bV1wDAhKHqDL70Cfe Pzwv+GbqPLBDBHP9+TWm09vxNZ3z2q3LvZy75LddeZ+4uqrLvIMjivSleNPDlZGZaWIiAGZE3rY/ OdvaWBmKY82VXtUlZCExmNcBQMHdxhAQEPiPg4gEU2LUNanvt6zM+mFgZfbPg7SNfipyD/cvLq7o UFhY2L6oqCiqqKgoqqCgwPufnrvA4wExln4mzM7TxSUyOCImRbFmkErt6TnSJza2Ll9T7Fh6WJtQ r9DeM53r50nasqiLOlAlCZEoPcN6TF3ngvfINp64cbhdzzD7ALFYER7Uc6rPzI2JDQLJJwzupGrd aYx3VKM8VBg7ll44KNzDSQwtVN7tg8fGxCoAAOJ6AzOyZUsf31av3slPFDs3QhEQ0M5vyrY4KQBA 3LYp0ih7CHKMmuTbOw6bfAnHg+sk/SM8fcVipxYdxr7knrR7ocOQsWPd75YLKzalTLH5kxfdXCUQ JAvq4LNjQc9xPj6tkkd8mdpzXSdQBXoO8218XwAA2xb2dri9Tl0nxbjeXidEJJ/N6+fkrJSE2vt0 DYo9FmsfM7ur69hXPrxzEjMlNkbc213q79DiCf/B65rmecpYN18yLMrTVwzicPe2o/xv3ztiDNMh yNPHbtBaj9tZ4NcsGitz9YkKajtlm8OyHp4rPf0m7Vv39bogLwmEuvq0DBq49EiD05OISFbPjHL2 kkCoRBkYOmjRFluOLQAyM8rPwzVgulv9Z75nWpgyIKCv3+28W4gx1OsjWro5SyBM4tI2ZHDMdhUA QOxYoCe0bu3tGTrT+XbbfTFRduEB7fyGx+yzu/1a4sYo0TMtPX3EYmULz6ixvo3zXO1ZOUIZ5SoJ EouVLcJGvOw5tm6/NmbjzChR/4goX8f+HzY44XrnuTi3CB2+ZMedvY0xQE1uE+rlHjz/nnvadn+d 3JRiZQuH8CF+Fy9uV82d0tt90qpv5RnrgiVRgVG+neavs93z3AhFQEBfvynbsqUZ6wZLunl28+0d k/KfqZQgfKsWEPgTFBWhHSEaf0RehtjUfF+/iDPD86xYweU6OPgJRw0F/l+AuE4ya8KZaWfypcpn R3c/JKpKFp/c8cuSVLv+DpPWvjd1Rf/A0vv38u8AEciynp4rN+f0Ctuet2PyANIwhYWAQGMEF6GA wJ/AwwOMWm1tscUic6JY9u7ZrEU8x/Mirb29l/BHWeD/ERpOXpua7Y2qqb9+m/KEmacZ2jW63Dt6 2Mr3+wWUrfinp/fQEJaQu7vABAQEBAQeM4jIIKaI7/6DonuZzQUE/ldBROq1se1c3BXiSLE6OHL0 0lWudysP9G/n9X6ubp6eY31jsXm3moCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMA/jZD4UEBAQEDgP0Pctt7S r/crg/wio/11uqrqZGiTErd2ivZ2set/C5gdI52xRuYsC2lVvn7BEPP9WzzGsTPWST760dpO1q1/ wYI+bYTCyP8QQqkcAQEBAYH/BHh+jWzJss/nJOYqByZcz8pgeJOLvFfA1QKATwDA+E/Prz6xr2zr klzQb56dNOI1AMj4Wwc3aOwPbDu82Mvi8R0APDaBtWbRMK8bvrMlX2mH5kAM4R9Xv/+r/CfLFQgI CAgI/P/jYtz+8LhCz6H2o5evSU1Pmf/u8mkvusrhVCb8u+oDYslS+a4M9TBQOuf7TRxW9LdPgLIQ 1spKkOcem5cKEUUpCRlTy3Lyxke9DUKpoAdAsGAJCAgI/IdYNzhYUhzUN0Dq4eeTUQ2V19An7drq yfrd29Y63Lh8y1HmLJFVWZUKnjff8pLx7qVWuaK21dRra8f5GBGRLBrdzp5z6+TnoFY53MiqLt5d 6pUHJ2NMt/v/dmlr+aE0Px+voDDHK2mZZdpObxZfjok23H5//uBglTjkqRBnHzfHW2m5hUlUeO7l TbPuvB8zoZPqFuvv6+LlpbiYnFMs7vlx6cmYgDv9jwhzVrp1GRakslMpMkzqrL2+b5dADOEvbo9R HSuOcLLXn6nMLDCGgJ1alVLOpB7f8X4ZAIH169eJMy+vDzAperCBTFHetJdXKtemd6w8ua5P6Z51 Lz7Q2k3opFYpw4YFiRUO8jRWcevIxvdLoM61GBszVlxp39cTQ3y0VzYud3AI7hlUXoNVmeqe6ec+ GlmDG6NEy262C1Y7OwVnVolLym+eyQ/tONjfPTC8dP7kEdn1x1k/9edWGmnr8Frfziu/a0P0t19f OS1Mmapt6evk56c8fyWrRNp7bUn9tRkbAQp1+4lBdo6OqgytKmt/4HvFEEP4s1tXKuM0Hs72+oTK jHxtECpdHbOqFakHtr1dRgjhEZGsWNjftdaufahWT3FbD1t0QAhFAcUAAOzYGOOcXB0sXfnyhEJC CCLGUJ99JHOvkQVYX5s/toIQggfXDZZs2VPjFdiqs9ut3Pzq63bDCzO/n6gDAIhd95rL6pfGBWfn l0VV2d8sjlryZtSADzZUBAyYmzsrmvyrxO2/CUFgCQgICPxH2LP1ZeXeH47PuXrqSgfWcrIMrbyn LHzktUWHtZ+eWTe4z+nfzS/Zu5OruvKyIIl/x0p7c1ZFeZm5ha44YgsA7NRdWOtI2bku+PXAsVa0 WaMDqZN7h3ajz7eL1azbNE6t3TIxKHjvFfu5CWkpIbrfzumdXJ0c1NLvL6+IxzWvdyKVB+Z19dtx xfDSyV+Ouzu5kAKiN3rbd3VNXnexct2Czk66L5+ObHMwTzQvMT3e3aLXGp28vB3U6V8dW1WCX7zk TvQxU3tEnMrABfEHf/MQmbWcOrgN1Rlcv7oIsLfw1Pbe20+HLm4VLEtIT70aUKLVKRU+XQyDViQu O9JucIbKnD3+cJ5ipC7vagtZKT0fnAJ0nfyoHScBrj/I2i2b0S3y7E3qxdSDca5iq453Cm5HdZn2 5ZZBiAdjCOGrL13231eY82mtd8s8a5rG8ebJbykHpZs84rnoHYgY++7TbcceyUoYxhNZKepMvjzF qOOz9ud7dJZ8AwB3BBZu85fO3+E5OpsKTNuwaXTioM221794Orzl4UzneYnpl72MR34zOnl4OTin bj65shw/e8WF1Lw7p1vYqRR6wZljZ70ZUyXrHNCW6Uyt/+YiwC7NxU3dvz8V+mpkiPxS1s3kgMIq nULh09HaZ8X5ZQCQ/O2Srm0TLlW/mFxRIbHozXyCu6/EyPH+LMPwAABFe7c8G1v1dFu/jgNfBIBa KE+xO/Jr8cu3pO0KX5s/9uNdk4Jcfj5UOz01u6LriYtf6x1VUoVjpF3Jwt3Z734yOiCn4MLuzh8f yZtiNFNR3IVdlb//pnX3iBoR33/A3C8BQPtYN/n/EIKLUEBAQOA/QvbJE0+crfDv7jrqneXJaenz Phpmt0xSfLPdqe+2DxAxnMxs51ETvHDnp70C5afSCli73m/sWN03VJlUeS2pJSKSK0mZlrCOvQ/N XPPz7Fvl1VPXDpa8j7kZvS7u/aU13pppf+g6teR3i5/D8LUHF2hqKycsGd36NXfrreL0Cr0IAOBY fE7Xm6aA9i5zv3nvWnLCwi3T3F52Irq0Q4czoHznCM9fr7Ov54hb62b+cGlmec2uCc/19F7hasqu ztADgx/4Ot5Iq12UQXWwDvk6d3r+zUUThzmXxhUmHFw0fGN2C7SYRAbdLZ9seah21md7Xti9OHhm C7pCkrRrTx8YfJAlFEl2c6QuS5z8SnhadR6AxNGstexB1q1odZTzjWvGxRlMR8PIn/Km552eMWmQ S9Hp/MSDi25uyQgDAEAZQ5lKMv2uZ1WEesz4Yk2VrvSZtQu7vNCnd8TZK8taBZ6t9Bllajnj28sJ F19cNZL5gHBqS4/pr38a//XCY/XH2nXVJyKpVNTabeAzewcRm/WqdMcItwM3+NduicItE749Pbuy RjN+Rj+f5W6WW5U5xcDgxkD7lOuGF9OwLfXEVzdm5d94Z+Iwz9KjRYmHXxz4RWpL5CwiY+0tryxx kOGZtbEL9r4aMT1SUgE3dh3oh7hUfu6GacoNuz4Vr+2Mm11YuH1KX+f0E1qrQWGs8+Qhx0uBB4VU RGwuQ2ImyPN2LPISAJAezqKnJRYru0TOWhdTXVs+ft3rT7wQTOddq9DoJAAAi3bc3F98fNr8EN/I hJaD52w0GGqeuXXm+483RoHuMW3t/0kEC5aAgIDAfwBM3CiaO+2dPiL7tnQ0SYxu8+Zb0aliPU2o U7SEFIaaRd6FCoorXjw2uGzT9wG1tNUpf+lArvyNzwlPcWYaAEifeZ/XTuvmnCrvXOnzwfrNrUpr r7mZ4pIkSsrgfH7d8dBiUXgY+nZ597NxLbI/AwBETJ4NcJ0QwgIAtG+tzrhyIbkmd+fcZUOmvn7o jULHExb/6N0nYzqzJye4dyuUdnfz6NT/3Zg+riUxtvZnAOAcIYT17O3VWWN0DBV3GfHGtiGkfBsA nF47KDZh/e9DCrNyohmRyMSI/ErbDhz+w7yhkSVYFGXncsI5S1yhdQUAeG7JmqTDc4PcjlV0ja51 HBS346OBDxzb9MWB4rBqa3iwJGrEa5v6kIpNAHB05YAfrmxOeyIjI689ANwEiwWI0sco9eu8c9cr Ay6SVwAA4BbAJjg+3bE1YKREW82YEZEcfasvZ0YKaGz4GYqYKHqh27Oj893G5r7yVKeEc2/bXr9w OLFVgaSzl7pNn9UfDfQt+si2NucBIJ4QwvoO9I2q0CtbijuMePvroYqSrwHg6rejf7oUc3Voxa3C DkQk0dAiv4oWfZ/Y+crI9kWY7S91OxaaKS7WuuxbrXPVlNKhooGT18+KVmtnAUD+5z3O7cs0FPJm 9o4RhQdocMqS5wGBJ1i8Y4JLObh30Th32vvLKwMT6+47GxE33H7uhBDEX3vSIlomshr4akKI5UHX /v8z/1qBFYtI99OAXMIl2DEVe5WEuykTWzQio6pXqSz47SJChBMMAgIC/4+w96FqtGYVpdLRWZlp 3gAA+cCDs5dHom+U/wX2tyvePEjw9gcp3yALDwUAQDbP7935h8vGGam7joqd3VPKfRQG2mA2K9Qy CcnI1asIJRHVmhXVt1vVpT5gb/9/0tYbly2Le887e0Mz7sqhrSO1dp5THMOrD8YgflLQz96BMAqo rGB09drzAMADAJhohUMNB7QqJLL29vvGQtS5iok+rbjciZbRhbTMySKy1p0G5MTIA8sxIjMFdSmF eASCAISI8KGCrE0od9SzhLIPbXVn7Opcq85FBIa0kgo1AIDBaCZKJ5dq3qdrVuP2/TZvzNjd89WE igpu6dy5SdFlmWykuFWvc0xo9I361519dUbE6dqQ6OCenVfNiyR3xsor1DtQjB1VVSK+406rv7Z6 WmmvMwOjDP1jbfRJTI2rCGvTSiqcaHtaw8jUZmI22NbGPxx5YuYY2kwZeKVUb+LECmfHO6kgXJzd DSzkWgA4AABABEI1CngnBCigANIyKmQcSykNvLq64fuErf9/c1GViCbOIgtQ3AMsuQD8iwSWPm+n J6Pd04mpSXGluAIH9qy/K4ocXChCHAHN7oQ3OCJapGJr2Q1TTe4HgHga/mV5TwQEBAT+MoJrWQ8P VckFUZhhxCfvrh3n+scHOOzZB/MG9JoEILlLYx4gc738UnzR3FsO4wp+yXr33a6EGE9s6B086BNp GGvhqG7t3Uu2pN+ySunyToh49XbwNABQhBAOEUlaRZrC7aWwoq89yYqylDjFl8sWPbP10pl5l949 euKllu755HCKhKP7tQeAPACAuvaEEMJ7MrXFSrRS2Wf2BwNAMgCAUmHxyLFS9t5BvjlsLs8AALCM uZ4Q4Ak8hq/SnpLaIju00Nnn9gUBwDUAALUr65ljpVT+gd65eQBAIxIgiCCmm/lcKeH19i1raY05 JT4+odYj+skfp40ad2bBEJea21cgxorndVw2QuEbkanoMjyhfutWES4FcDSVpuR9ogEgq/HauDM1 pfaUCtPPHwgBgAQAALmn1j3HSjt4+XvlcOUcEAQitlINRBIPAJG+0lonFalNSzjte/v1M2cvu9Oc wp5QIgQAkEoZE6vTyLWUSQQAUL4tU06ZiBuRk+zew6K1n+3bXa7gMjs8h7h/LSHGuvnRhJA7Ygpl cp7jrUgkIumjP4n/X/wrBJYp490gcf6ba4DXdgXepAI0iRmsAmBzm1xLQ4kXEqmhOu/Daw4AVf/A dAUEBAT+dggZx30zt9OBkyeOvr1mATet/9hJv3Z0MKmLVe2jqcBeJ+m9LwMSoCkAAgQpQELVNaSQ AICDHMHKAWM0Obw1eZbLwrnT5a/tvjittMLSOoSykuBlyZlt9jsfP3Z919TBk0usMTExl5dOH9fq dJGd67Zs3ArriXHL6d7PnzK2cVz4eszuVz/eagzkGbXU0anSYrHqes99vqDd6ZXxp898vWjM9Fcl HXxF6bMnjumUrHfnzyN+1+XyiIxrc9JOVaT9OH3wCx9oWkB2+caD52bmqTtV94tuGc9mUz0IAC22 NBARFCJ/x81FeCSAd7deISJ5u4f7sB9Lo4e2nLX0k1+W9vkdAGDhq93Try+5dlaTumPG0AUrq8NJ RuV3By7MzlN3qnyqlXfC6T9WmQaeNJPaQCK9PpDhCwAAIABJREFUlZvT2qQMYHr07pFBzLm+18/+ OmTK2kMXty18IpcQgtvHLArPolt3NqqCN+wdSWrqt+49fdb1tuc+OHfm3Pb5I59/henoQ6fOm/hU hwSds+gI4jcDC7pm3XhKc6Is7ccpofM/qAgnuUWf/nzu+QJ1Z2OH1hEXuCPYAQjQHFO3NjlGQhGg EXnS8pmPNfabWp0VpcROeOLF9ZWD3MoqdxyNnaitNXtSIoYAALgFByc7JF2f+N2q9eNemv/0sU3x SSNTS9j2Eme4BFHvV0Sotu7JLPht8YVRC6qXLVt+iNal+3Qa8HS7N369/tX7o1rlAwBIu3arlfK/ VlfkXRvx5psxxZqSPD95ZKekVYtmXXnIrfz/hscmsBCRVFcn20tL9zvSVb86irCUMSrHFctaflx4 P3ceXXN6MrEWDAE0P8B8EBiuPMK++opDLKJuLAD/b8vgKyAgIPBXMHnDktN50z5bvv/8zglJRZr+ V8T2bFhf7wtTlnSpvvoLX0oh3GQArIhQAAQQQMVRhMqmCM2D8zR9786bPs06suOF6+nUp8m0wjBg QN+ryqykPchbKwkh5osxgz9TX7xZ8dPhbaPiWf4phXNgVdSI52P9/aEW5gPXWuNzPO3wyYnbP89+ x4qM2N6jTWX4wBGrn393aDohw7jEmN7vOZzMnLJ3V9LkOADK0SuyJGrk6O+6AJhJ9D7+4IqxayS/ XJi2/4f4ReetDOMS1i+z/dDJy74eqigZOj24HBCSjDJiS1tgcuARjRlgSyCKAABIURok5Dolgrtl RifF1bSLVVcdwJhr7O682Oen2iMxo1dLDlx6/sCO+CVnrSLaNbx/Rrsnpiz75En/YgAATgQGmqKu UTSpbtzpiTdipYHuoqJ8mVxprjGojTU1djlntnfRmHzGTfJq+TIAZKZJ2kabpC7Zfd6YdTF5x+yG k2rzkj5+Rb+VjsduTf5199UJpxEoB8/wsqjhw78fCGAkPhf44ysmfyrZHafduzNh/iUrw7iE9sqO GPzcmz+Ncy58dmZgAAFMolFc5yIs4wFdMynbZ59pwoTwrTWbLlMnvn9n9g21f+WgvgPjfbLPc8DT VQAA46b1vHgu89AX+y58++RXvGhAt76Dk53drv1YDXwJAPCTR7f/xflclv670zsmbjjN9xTLnfWR AyYe9fV2qrxzE6GrKyd22b957ZHD89avj1vqFdk97cm+IRcfbScL3BNEpKqKzvkZM5b1Yi91ncid dV9miW+/nb3Y8gJ3xqUETyu1/PngE9qUlzvet69LLb7CkwxiHDzQD3/O65YubU2PvNLqoOyyMndE /FdY4gQEBAT+DjZunCk6f/68ekNcnAL+KHlGmvt3XFwcExsbe8fqExe3TXrx4kW3ffv22QFg3XXY wGpz5Mi38sTEOOeYmBhxM8OTPXv2KM+dO+caExvb5H0EIGf37FHGxx93iomJafK3GQFI4rGN9nFx cc4xcXFM/dfrzf/OWPVfu8s1DUhMTBTFpaQoELHJKfm7jQ1gMxIkJiaKYpppNz/a7dnhA5/9bsxp 9Lj92rYZHdoOah19rOfq9J4AAF99tS5i+rs/hN9rbghA4uJiFfdam4sH16lOnz7tsjExUdTwvmMa z6vxWpCDBw+qYmPPy5p7rohI4uLiHOLi4hxiYmKoZtrDwYPrJKdPn3aJjY2V3e0e4uK2SQ8ePKga OzZWSDZ6Hx4py6vp93fD6Oof5hBrRWdCKDfCG50Jp5MD8I36I2hV9vtCJJu5iESOu+upA4wP3wrG jGmA9WLqCAVA6vYfb4X6ByB4xjNP67Z8rlE+shjAAgzDFLq5uZXe6Q+RgoLFEsi9xBjVnSJFlt/7 g7VKBdRdLF08ANByk0nUJk5hjksC8LSC/QAOgudb7mcdux2jcLsnwZomICAg8L/F5imtO/9wxfpq qkFVExwWlu5mzcTUHGsraesBqQNffH/dhz2IEK4i0ISHtvxU5+53pMref50xpU0EZO+XR4uI2NyW YJdqh4gAANYHFiBO7QG8BgBYawEyvwOw1LPaEgCo65AQQiwWixIRywDeIearV4Otl0f0p7C8L4WZ wbKyRE8gxB4Q6bvKSQRAQlCOp15AIirjpZY80P1SAEn7f9bdnHdJFb6hsrlmhqtjvE1XnxtIEc4D gZg5ntYZLj9ZLbLmVDPGDJ1Z0bVK4v5WHvHpasT8NTJz9e+exFwsaq4vFHtbdO7vlLm6utY2976A gICAwD/D9G1jLmVO3rcg3KVbW7W9o5OCDjIo/HRHctpOuPlhDyL8zRZolocWWPYV653QWtjlAcQV AAAgj1KtqJc/V1ls4ji6ChEr6p9MaBZCA9i3AHCMAtDfslmz7okE9Dmr3MQVh54UmfNmUWxpJCBS d6xetyXdPaRdnexTA1rUtOFGCwAApKTj7EzZhw2XJ3wsa789vr44rCnZ5SrOfedD2pj6DCBL2eId bo+DCEDxIktKtrX8gw2ma09n8AWbnhAR7Am8SXFntPpYM2vUt3rFs+d9Eq2OI7NqnOYkurpGCr+4 AgICAv8whMTwAJAHcDmvzmtRl2bh4394ZgL/Zh4+domtogham/rlSZ1LF+trJwREEFk5RsFagOZ5 q7SmuJgDgIpHnnEjEBElpFohqT4xgzFcmwe8Uf4YegUAAMIbFbQ54ymJtTK4JuXlFwDg3O0rZMUb O1CWwoGA1rpUuY3tYzxNWfJDCad7CyiJlVjL3RrHOTRDe6RkJknlz6WSyp+umK8M3pGnnL8vJGTI 3QI6m589xjGQ803DZ+v/HEtIH/YuTQQEBAQEHgAhDETgQXk8weGUCMD7CQDOCFB4AhqbihAYBACg KIquBZDDYxRYAHYoNv7qShtujnk84qopFK9pa6f5apUxZ/MEmf+MbAAAmi1WAljt7teWcFoneIi0 bIQ3SoE3+gFQfmLdib6+lrJPS0qOfOTuPkh/r3aIcYwpeaM3Y87wtlxdPZA2F7azCTokAGIrp117 zXq+5WFO5lHO23U0yEL7lwqCS0BAQEBA4K/h8QgssQOA5wAAQwFA6XkA1nD/No8TXs4hEZseKWL/ AaFQH8WUfTspA3FlCCFmwLt8i0F4xKMDjeEB0GIvNiW/7JAbU1tUhBs8PUmThUVE2nptaDR7cd5g MZqGU5b8CDBekTSeBW24PAIIvZSC2gI0Fxez8T8ft9yYcrg0ctsNt4x3wnhznisvctNz0g4ak7xH dW2tc1VAADE1Hk9AQEBAQEDg/jzm9AbNKQuCQEt4RDskxErRVgONKWPFYMxitPYzPUSkKhTLPo0k +GjZ9wkxUkbVoGJ5zZbtxFIYQ9D46FlmCQUg97adWjQUN3yLN4kJW9zZoSg3MgXxBiS0bdpebA/g HAVQmQRgfkyHSpCTio1X3nTKi5ZWZmR86hQScqcMRQaixJrQczJjTnmJcNpgQO5e0o4AsjLKnBMC ACFA6O5o1TzrdcYhDSh5IAI4A6EMQHZqZTyrdeK0Wu6MugIkQSUWVb+TJZJB5wMC+giCqx76vPWe ouoLw4g5zxOoemZbIuU4WatLEumI0+QxrBliLA2pqTRACkBZAmX0me7CGNMHEEuWT8MLaeTt2l+3 iFqdVQRPrRBcGQICAgL/HH99/ijeJJNrvm5BKFrGYI0n4Sqd0JLtRkw5vqraBc5ARHKCRod7RqDf B6uVMmvUL33tZF4cRVuyx8Kj1lZAHkDuB+AzGCDja4Dq9AaakfD6ljLd9lZy+RtVnNhNTptzGk5a 7g0QOAFA5gmQ/RMA/1ChUwCU2JaagjU0HBfNKrHp2qtyzfRqRPycEMLFITI+iQOnM4aEdwmaHB/+ XjmKsOXhABAOnPYu0pgGMF7nJKaM6e7yq2/HIn417h4HFFIQxf5przhT5pt3q9cBHBNllEe8XX7f gw7/cmqzP3KXFH2+njLnDQLgG98v0rUJlVbZ1fcRcSMhxPowfSMipStY6yDWHLana4qcLEnf9qfZ 0g5AOIoSmZxlBW97I5E6AfCNc9UgrU/Q07Tj7xbTkVWIsXsIGfefXmcBAQGB/yp/ucCiuMIwO83G z+oC4wkQIIBA2aLCEQCbESGEAqAePIcZIRbKLXBkqeXmkpWkcmcYZS1u/WcEGygCALwGAtTmAXB/ GCAIb7Qnlnw54cCOQzdnGhvl/SIMAC0G8OgNoM8FKDkLDzwPBACJA4Bja4DqFABDScO2aLVj+IoJ NdlfHQWAtC5XRg0W68/E3FVcPQ5XJXIAyNEETB4ia/7EsanTfwEATePLqqqSHBQZczvDhcguhGL6 EF7vdJceCdK5xfy5LYfZC8G5KO9Rqrfvf83Bb8J/LoeMRHNkMm3OHgq86S5i0uhOs4VT4NrEXwGg 4EH7NaXHBPJnfQfbSdz6UGxlBMXm+YM2VQwAdb8QCAAIBO8akudA84bOlDZuleU6mwoAvz/4XQkI CAgIPC7+egsW8hQB8x/B4A+iNxg7AIn6AS+u6xZj6drMpDw5b71nMPgD9gbgEAnAyBoIrPoX8MhS iEA10TCItnZ23gCE2P7/IBAAMJYDuCoBQp8HSNsKYGzkpuS0rjwv8tLm7VWJCxcsImh2btoRBSCy A1C3BTBXAGjTbZa5PwnFVbuZKR/nRMSa6DqLTH7+eZlH2bIxVOrwp4DXdyZslfsDdBUOQPoiLzdB zdFSlW7PDe6M0y2T49TjFqvXGcd2i5qUqbgNIpKa9J1OHJF584S2Il9V7UQl1kDGejP4RSBAJIDR ESGqP/9XWm5Mtz4OpYtXj7m7uLJBOK2rkbLzrSyIA86kkyqwwoXmMrwBOGDtfM/JfecX3b6v2syV EXblW5/Gks/7U1xFR4rN/1NZkom1wstKnH1AEFgCAgIC/wj/vhIzhAJw6Wiz5DzA8TtEEYqAk1qT Nk6R66/OJlxFmz89PoDNXSd2eLRYKuQBdJnNChukZJUApAYAHQhvtm+Q/R4RQHMNwK0ngO8IgLSN TZqzxIUoy1aPJuaCXk0EKBHb3JsuHQHKzgNokh9c4AHUWdEcAYAHsGgbvoWENolCvT2LK2mNRlOE lRdRUThvCWVOX0B4w0O6eBEIVysFrtYPAPwIYXhZ5ZcTZMhmWRMGLNodffRiY1ckIlLcjemDFdUH Xwde5wsEOOBZK6CVBTuRhauqqqboq7U8ra7mkityLMmT94jafJPQXBwSZqyTGLh0J6o2h0EJ3eR9 YuYIMmpO5tqtinjOMjRsO1jCl62bRFhNVJO1a1zHgK3wkGp2fifV7tIDZ1AAYSQARAYAQNMu541Z q+dJA5bkGS+PeUquP7aCoMUX0NJcaZKHBhl1GUuHQGWlwZsQU42jo2PN/WqCCggICAg8Ph6vwBIp AUT2AFbDo7unkAcwawA4AwB9vywIDIq4fKVD2QtPM/pLkwlvVjziqDYoEYAqyPZvAn+U6nkU2KaG NKQdc4zq6av1yqevKnQ72kt0P86jLEWhd8QJAQBTOQCnt8VzUWIAvkGFIWT4bDXNVrRvkuiVkgD4 Dgfw6m9zTRYerSsx9IAg2MYMex7AVAGQtrnx2MBRDI2IMmIsDpRXvjNOZEpdQNB831QV9x+bpQjW OgGAE224+O3Q5HELAPEg1BNHpt/f8RXpL75K2OKuTdvzQFtLAKylQBMAGggi7TTKkLJwCgAk1L9U d3OFE6v9eY6E1QwhaFSCtdlAcAKsyMwWZp4y3py9Xhb+ZU4ioqhF6rxIviT2WYqtWAT1f3cIBSD3 rHt29VzeyDIEawOBb5ovlkZrP6xNfMZweXSarPbIxwSNPk0uemQoYGVtDxgdn9bypipXnufVAJAL ANr7tRQQEBAQeDw8PoGFPIDcB8C9G0Du3iYfzg9FVQpA5VUAjwH3vIyiOEZV+MLTIsP56YDsY/nm 3zBr/CPEcREAYI02C1ADqwYFrKTl/mq3jy4QazGpUi87Y88bJfKqzcsB2UYnHxGAYmyuUkv9dSQo MmaqCVse0WRQz942q1d1CkDe3ocTVwAAjMSWy8y+JQD53ebmtDR8hoiINNaK5cUvTBSZk58HNN/7 xCahAWjJQ6XtIHxNoEx3aJX1Uqe25qxPtigCF5YCAEhNRx2Q0/jfvaUtNul2jljC14RITZcHQT2B hYjEenXUZEaf8Abw9z9tShFRWyQyRvf78ljZxfAnKU47kOKqwuGP2pM2JGqbuM3+qaHAuhfIMlTt ladl1kLHxyuuAFDkessiH3iaox0tFOpomqZFiEYVIuqEk4UCAgICfw8PVO7mwUEAzgKPfIrvNry1 7kP57mYwmpJwdtrvQkWWjMFNxBVCXcC59J59NDuuLvORpvwHFEDVVVvtxHpDI2Vn4hj3Ep6HuuSe LDHbdbqKtN3DWRXQTAGyDesZ0hIA9z4AlBRAlwHANrKYEAqRklUhkRYCJTM0+9g5s81qaCv02PzQ tD3nWDKvP6M/PxX4xuKKAIhUtrncacDX7YeHg/C14bTp+luykvVrDWnvedXNjyLINY1LwrtMFzkG ebN7uR49ysvLlQAAcLIPzZgyuwNaHiyVB1pp2pQxWl624WvGfGsBZS2OBOSaLp5zNIAqFEDq8hCa nCfEWhhKeL1/s/f0qBCx1SJufVRnPzODYnV31ovjRA9eB1RAQEBA4E/z+AQWoQBqcmyxP9xfnyCc BTGKjMkehNO7NXjjdhyRz2AA+5CH75j/s7HRxHYCkDM2nBYjz7fY971FsdW3T4MhzVorgbJvcirv oRHb26xdADZR0yjuCinHW3qnpa9q/PdMNjlMWMWJQ48BETU0KyHYAuKtmuZrPxJAxlqupLmSqCZu QUoC4NoFoMVsm5uxfqd4n71AaJswaxxOxhvFlLVgrKT65ym2rpoRB4QCUPjY3HN044wFgDyRSc16 vRvHcf5lZWUK221Y6YdRMISrcKb48sA7JZEajAB1VtteADIPAIeWD9wvIE+R5uKtiNjmpqaarQl+ X3ix5zWD64IDiNY733IoijKbzWbBPSggICDwN/J4LVicoUkOpz8gYCtyTDgAwvEijzxO1voSJ+9w BClF+SMOCE2sZSI5QPAEm7vMrH24IO+/EMJDgd7u2UxCjBQAEIZBnT2eKiIU/Alf6p3e7/EeBRzj lqx1XXbJIm6l1Tiv2qPxiX2Pk4bGN0y2BQA1WQDmyub7QwrF5htuhCtveojAIcx28pFn69JLPMzU iU0I2wc31T28mQFz/gTd1fk9gHZtKnDEDgAhzwGEzwNQt26mc9v25jhOREwmFZSfRAC+6YYQ29uE kqRpdgmCFhHgXWpIItjEkNwHgK2xVTL4s3gPAAh4qjnBeH8IzbN2bVNZKuBOMlpEREJIube3t5Ak VkBAQOBv5G/I5A4c0qoCThyegbKAVJ5S3WI5rLJKIvS8NNTAi7zMDnkTX2XMqQP/tGsRAUCsAnDu CGAouluKhXtD/QUHKwkNLONRjgxyhL0jamuhJp0FbJrp4aG5VxZ8QiPSzgYC+roK8EbKSnvUGhTD dyhN6Z0A69VTRO7egpSrEQFnaljvkRIBeA+2CaWyswBWfaNtQAAIwwEQBGSZJs+YZwH0BXV9UDYr Wv3uOU24hCvob5R1uiYzJDZsS8sA7LwAxM4AUle4m3uTEELMFNX8lwmKsY3t1h2g+iZAxrZGMWMU D9CMa7Lu1qAmx5ZOgzAAulsP7pEmBJGIWIJWUb3XAJw72Cx6YkcAi+7hDosgT0Tao8MdTZlKndvq jSZx5zIUW2srnJ2r3AT3oICAgMDfyl+epgFp+wKdx5qZZlmHGp52YXlGxSGKeAJ6AlYrABAClMT4 mAr42VxkvNlmjaDvmaaoGYjtQ/4x5I1q1C8CJb/jK0NE3mqVPT4/qlV3dzGJPAG+SoogQgJGQETk RWIdTSyXkYhrCDYqWH33EKzmoaU2C47uVrPxa0jJ81l59AmellkY4y0vwmnCKa7Kv0Esk6EUwFoL 4P8kwPW1AHz9e0Gg2JyerDWwEBGZhrsEwSbYbv88CpRNzEi8AKTlNpdlA+4irgD+OPVpqQaQON9b 6NZrhLTcgJR9HuFNLgCGP0xViADlF22HDTz7AGT98JBfEpAQ3uDAGFNG2pcsFlPun3xE5B2zvQl5 DFZSAQEBAYGH4W8QWC4aszhCz1HOFkAEYtUScjsr9Z1Py7u4YB4WArYPu5yfbbmk7NwB9PkPMVm0 1RF07vho8Vv35DGJNorGJmVmeNYmbuS+zTTggOIqPcWmPBXLuOiJhBhMTqp8Jj8tsIH15FERKWyi hNU3dQ8TEcfatT9Q5nP0S8LqKUIIJa/+PEJZ/v4KgnrvBv3UZNqsSG5dAYp/a3jLlkp3kBiZx1ZH uwm3hVpTZYmUgxbQICO8SfbHtc00bxaCvNgzDynHMqAl1TxSZYBUNScJLLTK2pbJK9a9STho6Jcs PGaz6Cl8bUHzD7N//5gQoU1pg+yqtlwU+w+48AgdCAgICAj8Sf6RRKOIyDMM8mBB5BmGA0S2ieWE UABA6oK27yJOiBiBNEoUyZkBCo8DVCY/fKoIArYcXOmbAZRBAMaHjCdC1mZ94a1/UewXEqTd9Tzl WExDqdcfL3MAJacA3HsAANUkgzzNlrdXF42NMSpG/cCLPa56ZH3jyPKW2QCcfdMhHudsxWV6xzlH CVtOE0IIAIDeYUqqXe2eS4w+wetOklUCALX5tufl2gWg5GSDZ064ckfC6f+ZvUorKy12A39m2Lx2 hKtR0qa09oDmBwqQQlpdblKN+9CkGJSDIhcLy/jpOcrJwiNwUssZR1n1zjzKWujfsBEHoLkBUJVa 565uzqRIAGRutoMNZo1N3HLWRuoTacqc1qss/8aOFMT8SMGKJSAgIPC38k98aBl4haIUVUazG1Ra ASI4yDU2CjZBAH0eQNkpAF26zQXWmP9r796D4zqrA4Cf83333n3rZWnXlmQ7yjsyebjOG1qSEJIC MyEB0oYOKcOk0xDoHzBtYQYKAy0d2unQFkIzpTzCoyXQTjNJTIEECIEkQEjiODhyHn7Jth6WtFpp V7t7997vcfrHXcXS7kqWZDvE4fxmPPb43rt39+6u7tH3fecc9EWYuvJQrPzDETTFcxZtIxNNO611 uMPPR8U2V2tuGOCluwHm9sGaIxVEiN6WljNTGMTPn3BE5tcS4OJFWyqjUQZnqg/ASQGouaPbSCWl //xV6dqLl5HsnCBE5ejCADSWPUCnPkW6ikxKo+Doa218zSSFPpIE8ABAgZRWE6VLKvXGe5zqU28B ggXTYyYKqoQbZSUuyMJE0gkUdsPKn9QJRGAqmVt/bOID20VtR7zryMfuFOrglhUdirFQx8497Cev GUddlGACQDsuJIBQcltZJbZul8FLr0Nb7Vp0IAIA2GV+QaAoiN90A0D6tOh9H38EoDa5aB+0YYxQ dK+bmLBEdBgRT356L2OMMQA44XWwVqS6sb29sB7XVxC3hIhooLGFB9nohrH7CwAjP2wewSIANFpU U+/aHyZ/715Ar7ls+vHMJa31WF0BmHgMoDp+7H2XYmoAYw8CTD7ecv0NkTYmeeFukpnFmZeqDLD/ u1Fgksg1HQdgEUgnUU8NoJo8u6mWFgFA25kA8W5YVXCoStHCdhlrWvOGFGQTxW/dIARKABcA3Llc rv2g4z+2AVpFkIhRUNFQ4gIAUKI9/orxa0JAYEljdyBk1gfhrGIkiMAYLRArAlHVkwzQd10qO06l WOj9uwfCzDV/TxhbfTRfmwY48N/RlPimtwNkL2/xtkUfZGtt19TUVIu+lYwxxk6WExRgIQDIaCnV WqbGyK4upIlmm4CIbCn7xe1h5rq7AL0ZQLm2hU4oLKBrjhVZkUzndeKcWUQQKGMGUaymaNYSD97w lE0AMPYzgJHvtwyw0FbkXPYzT+m2a+8B9I6WDUcAqBUAhu+rV3FfZZToxAC6LgRw2peZknUNorO4 RLwNAfbfE7VISg8svsmTAcff9ZaOw3/0Ds//eac793gy2Pm+M5zq8+8DsotrQMl4NIImvFYlCrQ2 4tDqXtASq97IyOOZBkXA4yiU5lVG16/f093du6enp2d/X3ffnsrmb3xFtV//IZN83WOAcuWPjQBQ GQMY+zFA5SDAzK6mt5ykePkSBEGQoaXKTTDGGDvhTswUoQ0B5vYAzB1oNfpw7MMxGQrAFa9hJmfd sIkN+AAaNaaCQu+Xv9458bGfONXHbhdm+gognUZbTQDp1hlgIhEQeiGg0ATOqJXZfdbrn3FqQ9vQ zm1u+TzQLStv8H6/7U/2CV1xgsQlI2754XFhiitYDS+0iHXnoUXcQyib73pIS7W6QQBEY2Jhsf2O e9eVHnkrmvDMhVshyAOEBVj1FCWKenHLJd4CtKhiZ87G3J69Uo33LdqW3xEdJ9x68Hv03EgqE6/8 7EMxf8etNtZ/WKixHNqZzYuOJwBoPycaPfPHmwJLEukyCK9FD5rlPi5WCFPygLyXn8zIFR/2+vd9 se+4Eg5wNZGrliCkMU6HkpjykuXvrb9g591tigzZtktng1BjW+2Xt6Iu/D4CZsjpyqOazi5qAL78 c4lql439BKB8sHGjMfFzn7UyYwCiUhUrf96MMcaO14kJsMIiwItfAtBrq2UYJrc9GfN3/ykCLL14 GF1FsmPWeut3B5kbvqW8C0sI0bSL1kbFLvzaQ6Ojo091lL96gxsO94na7nWoZ7chVTfWsxQRMFYh jP/GeJv2WqevSk4m8JPXD9W8bZMAAJnw4U3O3CPnIIaicXBPeQN5P3Xzc9ZaLWxJVjPv2BsrP/jP nszcRNbfDKbcgbaaQgpi0JCdZ71Nu6rt7364XmS0rgSw8TZfj9y9y4Xh5uKdrcjMLIkuDaBRx8+t hpmrtsdKP3g/vJzhVreWMhOhX1/Ds8R9mAC1s3E6SL3124ng4Oloikf75yEATD8d9eQTTovg0MTR zvZJf7YPWpEeQMe50bqx8Z9CY3BITk/EFAG3AAAO8ElEQVSeMNk8umOqS79W0uCYyV5Xj6U0JH1E THWP/vpGADi99QEnnjCzXen8P70nVbp3BE1+naDyINpqLwCACPaPOaYaSj1+JZBa+/cwmImuWcN1 IJEu1txLHyVqs4hVJHqVVNxljLHfESdokTtFDY6bIJBwj9l1WDlvvU+kD/c5wdCNgkgat6dETlee ZHqaMFGwhCVL7gw5m0pB+xsnAmdrAaD5Yfv6+grjc5/cLqrheo2eTAQP/8Dzd3ZGWy2S7Aqq6evG FPb7UXAWAmpfzq+PmfOuOUTr3zYM4EVLbxa9lAoK7S/o7WbUeOfnv5PFh+5H/9CAtTCAeiYOdlYi qbQUIg0InrWogtTrn6vGrlqUby+EQOy9vRoOfeRO0vleDA9ujfqkgAtAsrF0BaFbDWODD6rkRSUk hdZmdCXz7oec2u6tsvbiVce6xquz1GBHALO5TzwVK927Q5rSxqZRsmCNXX/azozqSO35BsDUjqbT G2/TLnLaa9hYzkNVommy2HyR0QZq6pJ1B17/OettOiTUWI9Q4xcAqY6XtxNEmXheG6w9fXKZ40jF 3PDALaBGLVAoG0bOWtXUWL1WI8boBWHi4u/W2m86DFCBk1XcgjHG2NJWH2AJiyuuW4XSGm9giMT6 ZbOX2s57x/TQ0Kf+YdCr3Alhp5zp+fBm62TjJNu1tRlDrmuJXAsQAqoqIqhFw0uplAwAABCRiGh6 RlcUqtlu5W01tfjlRxeDqxDQ+kLC+ILq2Qv/FZJjjVFK+a7rxq21jU2B5++mKKVUQogw1Xv77JEj VCI3nDUGPSCXABUiKhEFcS4QhRb1wtErIGOMBQBwB//xKdg5+c5K+02noUxdLtXI6ajHutEuGNVA x4buuUOVttt+Ya1jEBWmw8ezqalP/5UM9l22gnfi2BCiNVAA9WKtzW8ZIiKEIZW6P/bltsm/6ZRq 5A+O+7wyHrW82XN31GanseA4eqGSuSdsrG8WRKwMAEcXa9sQYOxHAB2DUTadjDdkHwZtUo1eLvWR S4GsaBkMpTYCtJ0Da5421NUouQF7lugCYBGotnSx0pPAeJsfKfXfeY+hjnDB4nqOshhj7BW0+gDL OTMgXZxGOLLkb+Ak4jVys6NWbHi22vau+41Iq/npvKVs2fKpEABCIhJqfDYF4HdH97wqoIIWxUkj iOiHIU5jvRVI/e8iEc0VCoW09mfaMIYpaaQbPULzun4iIiFEDREriFjJ5XKVQqGQrtVq7UIIKaV0 tNauEEICAEhjVGBtvq+vzwcAyOWgNjVVLOggyEopm4p3YvNJq7o/6seCUQblLBHtGhvL+4jqyeWu E4JCooSNF//rGhnuez2QbgwC10a69YbRFPXV082JmRGNQeadByp6z0czhf+4C9XU1tWdJ16vE1af 8TO1qMzAEozb/1St4937dPJ1pWT+356W0FA3qvgCwMF7owX6iWyLtUgAi6rGN/InoiKtXRet6mUs UtgJ0HYWQPvZx1ce5AQg2T4ZJq/9P+X0lhcG9a573F3MGWOMrcLqA6yL7hnVO6/9iqPzn0BT7gAA S+hVydt4yLrrDxvR+YLBzCGbvjTvx645omRPef636JVARDs5OTktNCQCogQRkUNkyHGM4xittQyN 52nPGB0EQQgAfqtGtvXApUREc3thr5caTy07ipDNZsOGOkElIpqDeork8PCwjMViAgAg11s1AGeG C4I6Q0STExMTc57nOULMCSGkqFYdKYQQoZSOCAIphBDGNRoDnB7AgcbnbKU0M8ZQMnrIphGHhZ2Z EcODfUBmtb2AlocIQDWA6R3Nm4SjiepFXcMCTp73mWfc3eU74jP3fgb1+JuA9MreYzKw0uk4kp0H gs4//lrNu3rKQlIrb8tTIhi+Hm05/fJOqgxwaDtA/mmAcGZFj3v0RQGAPwlw+HtR1X+7sKbXUseI 5h0mHo+eR+Y0gGTutxBkIQDK0Lq9e/z0m78+l/3krxYGV0Rk43GcQe5HyBhjr5hVB1iIqGjo5q/4 Pe9/FkmcqbBNaNExadxNFettVAb7AyvbFWAFUfliYXBFROS6botssMWy2WyZiPZNTEx4Simbm5jQ sG0bQXT3m/8DK7lh1Pc55jmXOXa+j8qya8nqAV3TsE89NR5b7Nt0LiLKF4uHlDEyNX+M1o4XhiEK ISRGBHjCCmuOubZtxQgAvHaARG8UKOSbAywjN7xonTNq8+9n8emn7VkXf/4Jf/dtf+YWH/2MCEff jLbSqgDXYq2zIxdDT1nZ9lJt3V/8a7HjgzsRiij0rFPu+egvZfjidre262Ygc/SzSxqgfGhtQQ0C wOxugOf+OcqkVEuN3AHUvL7QOhuek/DS4iKvVkUB3uxQNLX6CgZXJFIzVmb2qtTVD1Xbb/lZEL+y AHT0GltrjeM4Y21tvauMPhljjB2PNS1yxy3/EwLA40NDQ092dXWdZa0TAwCIbr5VEKYaPe6CG03U HscpFXt6VvSDHhEVHCOoORUsCNJWsq8FgJn6nyZEJADAeQTAbthXnjmhd/L0aVGAcei+ltODWnb9 KkxcWBZ6fNFIYGLwqweniD7Q/swNNwr/hXch+IMiHD1jbf0lkcjp3h8mBh/02//8IT913cj8RwAR MRS5Uil31992jL83lOGB9ywqw3E8l4JM66nFxmeHG/3QHfxSTO7aKkyhIfNzqUSPkwCFte6mIQPu kM684Zm5ro88akR7SOTSwqn4+nduLJfL5Xn0ijHGXlnHlUU4ODioC4XRYq1ms1gfgoF6MCGl1EII Xzs6xAD9WCwWHOjq8i+OAie2BvUALAQAoCcGT9wNEwGgPBz1YKyMQ+OCb+vmDpvEJYdbDNABAEAP 4txPie4598jeHenS98/35n40IKi0VdZeuAxNoQeitMzlitoa66wbMbGL7gtSV/+q1POXeyAsQuO6 Pcdxirt6rzh0fnjHxzsmPx+T+tAtJ7R5YisoCBwAREDEMh644K4dG3eGH0yWt39O6qnL1t4SSZJ1 e5+xbt+Y9H9zJVLQBi37I2EIRMp6faPkdE1rJ7vLUnxP0PH2/dX2Ww8ShVbokgSY/wUnal5orTWu 645ns9l8qxFTxhhjJ9dxBViIaInoyNzceE1rSFobM77r+rJSqeVyOQXRnZr4B/yJZyFuBCIBnaBh LL/eraVp5ZdXM7Hz7y+vu30vqqIARADPg20Nu12NqPcQ7RXi9lqx447nPbPnUa+8I+Go3f1eMPQG tKW25hRBAEIkK/sPVJNveizIvG3CyLgSKi8XZncKIQLHUYV162amcpjTADA6+9JnP56evAuFLV2L ttYGFDQlFxw/BOttfN66mwOoV4kdBLC49auPV5790Adic9/5F6lnrgQKVvg9QqoXuZ3U8cFfVjrv +LbyzivEa490x2tPX4XqSO/CvQmFJe+sXTV51jMq1h+SyGqTOM/XmKshzgpUeYGLgzKsJ2tU4/H4 dGdnZ4lHrhhj7LeDU7dPUcFvbrvRnf3fL6GZzZ60k6AXmNSl/1nIfeGbSubK8wvvhRCFXC53CLG5 bQwReVNTU10AkA4CJymlcQH8Y3zOHCJyaYlkiIrruqM9PT1zjRuKh3/YFa/++DosPXmlCEc2I+hz 6iNBSyIAAkweMYh7BUGvoOpAq9E1QmFJtu2rtL/338ttd7yIWEVE9NevX//SfDJEbc9fnyFnHn6/ UIU3Afk5XOb7RCKeJ/SGTOLCYT993U4/df1+axMvXz9EJRA1UmP9tfq1WbBfq3OglFYROSVr7URv b291uWvAGGPs5OMA6xR1+PAvErnJT98ias/fIdWhLVE5dJBRX8cTMGiBsZpJXnJPof+uryvasCgT 1Fo73N/fP73c4UTkFgqFhDEmCQBpojClNcqV1GMiIoohVhXidK1WmxsYaMq4XLivHJ+BPhFO9Mbn HtjkmJHU8o8uIfS25P30DSNx/xfdserP+wBbZECSZ4P4ZUeC2CV5gCheaQywAACOHKFUvPLNKxw1 vBFgiUoIBsDGzp6da7/pIFnXoC7KhkAJhRABERlrbXy5azQ/De841gghAmsdba0teZ4XdHV1VVoF vYwxxl55HGCdwohIwhPXdoduOQdy4Gahxgcx3Ncr9GwvIHQBWQep5kVFNlcAXU0i5oNIjKnEFQ8U uz/7gHKy1QXBACKiT0QHVjpKUs+ilMPDww4le9o7TWnZul0UB3IcW8lk+kq4wvV6e4himYmJXoB0 WotW65gWQ6UQ0RdEjiU3uWQ0iqqKiPrla9cqwAIAOEAU9/LBZiCTpCW6nc+fc+F/AUQL0RGx6jjO SE9PUY3PpTJxDUmstf5uGs/TWuvZ6elpNTg4OD8Fz0EVY4y9ynCA9RpARJjPH96gteoDrTGunlsf L//oQrSFlKg82y9AbRAQnA6kW/Z6JIxPEZmXrNs3ZdJXHKy2/eEzgbwgT+TahjIbVko5msvlpta6 tqcecC1rLY9NRE6xeChTLstUDDFlHRszRnqw9HAeAgAJIUJrrSaiOCLK5faPA0x2btgw0mpN4dTU VIaIcvXq/ysZpTOI6CNiNZstzSKeFSzYtuTxvKaKMcZODRxgvUZEU3KjOa2pS+uYfHlkhlIUC3d1 JKoPbUI7HQdqvkGr2NkzlczN+4lcG9Uvq4rGaSoisp7nHenu7p58tY+YEA15+Xw2ppSKAUDKdWnR tFtUuZ8q1SpVY7FYGASBcRwnLaVsF0I3LViP9odqoas6edaCQKjFfu7U1NSKir8GQWD6+/sDTgBh jLHXJg6wXkOISOzdu9eNZ7Mpr1brJKKE0NpR6CG40dKkVlNYLaavAOqfDSmtEgJ81zVT7e2biqda QFCvHdZq2tAsfC3zU5mw9HfCnGqvnTHG2G8PB1ivUUSEewG83Nx4plZzHKWU6ziOZ62NC6GXXadE 5JKUOlBK1BKJRKmjo2Pu1T5qxRhjjL2acID1O4SI5MTERFxKecxF793d3QEihq/E82KMMcYYY4wx xhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYY Y4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4ydmv4f6UFMCRbAiE8AAAAASUVORK5CYII= "
+ height="849"
+ width="600" />
+ </g>
+</svg>
diff --git a/i/emacsconf-2021-poster-garulfo.png b/i/emacsconf-2021-poster-garulfo.png
new file mode 100644
index 00000000..d4b8a17d
--- /dev/null
+++ b/i/emacsconf-2021-poster-garulfo.png
Binary files differ
diff --git a/i/emacsconf-2021-poster-zleap.png b/i/emacsconf-2021-poster-zleap.png
new file mode 100644
index 00000000..cd6f1b04
--- /dev/null
+++ b/i/emacsconf-2021-poster-zleap.png
Binary files differ
diff --git a/i/emacsconf-2023-collab-sponsorship.png b/i/emacsconf-2023-collab-sponsorship.png
new file mode 100644
index 00000000..1ed15586
--- /dev/null
+++ b/i/emacsconf-2023-collab-sponsorship.png
Binary files differ
diff --git a/in-progress.md b/in-progress.md
new file mode 100644
index 00000000..844e8fd2
--- /dev/null
+++ b/in-progress.md
@@ -0,0 +1 @@
+Max-- reviewing https://emacsconf.org/2022/talks/handwritten/
diff --git a/index.md b/index.md
index 0c9653e6..0eb854d3 100644
--- a/index.md
+++ b/index.md
@@ -1,15 +1,20 @@
-[[!img /i/emacsconf-logo1-256.png alt="EmacsConf logo" class="center"]]
-**EmacsConf**
+<p class="center">[[!img /i/emacsconf-logo1-256.png
+alt="EmacsConf logo"]]</p>
-EmacsConf is the conference about the joy of
-[Emacs](https://www.gnu.org/software/emacs/), Emacs Lisp, and
-memorizing key sequences.
-
-<!-- ## Current Conference -->
+<p class="center">EmacsConf is the conference about the joy of
+<a href="https://www.gnu.org/software/emacs/">Emacs</a> and
+Emacs Lisp.</p>
## Past Conferences
+- **[[EmacsConf 2023|2023]]**
+- [[EmacsConf 2022|2022]]
+- [[EmacsConf 2021|2021]]
- [[EmacsConf 2020|2020]]
- [[EmacsConf 2019|2019]]
- [[EmacsConf 2015|2015]]
- [[EmacsConf 2013|2013]]
+
+## Updates
+
+[[!inline pages="(blog/* and !*/Discussion) or 2023/report" limit="10" rootpage="blog" archive="yes"]]
diff --git a/infra.md b/infra.md
new file mode 100644
index 00000000..5258ce92
--- /dev/null
+++ b/infra.md
@@ -0,0 +1,76 @@
+[[!meta copyright="Copyright &copy; 2023 Sacha Chua"]]
+[[!meta title="Infrastructure and processes"]]
+
+[Sacha Chua's EmacsConf presentation on EmacsConf](https://emacsconf.org/2023/talks/emacsconf)
+
+- Q: What did you use to make this? 
+ - All free/libre/open source tools:
+ - One private Org file with speaker/volunteer/talk info
+ - The talks were generally run using run-at-time,
+ org-after-todo-state-change-hook, and some TRAMP (by the
+ way, TRAMP does not like being run from timers at the
+ same time, so we shifted some talks =) )
+ - A public Org file for processes:
+ - <https://emacsconf.org/2022/organizers-notebook>
+ - <https://emacsconf.org/2023/organizers-notebook>
+ - An ansible repo for configuration management:
+ <https://git.emacsconf.org/emacsconf-ansible/>
+ - Lots of Emacs Lisp:
+ <https://git.emacsconf.org/emacsconf-el/>
+ - TRAMP for writing files and running commands on remote
+ computers
+ - OBS for streaming, Icecast for sharing the stream with
+ viewers
+ - VNC for letting hosts and streamers connect to the same
+ display for OBS streaming
+ - screen for naming shell commands and making them easier to
+ resume and kill
+ - BigBlueButton for video Q&A
+ - Mumble for speaking on the stream as well as for backstage
+ communications
+ - ERC for Internet Relay Chat within Emacs, The Lounge for
+ web-based IRC
+ - Ikiwiki for the wiki (editing through git commits)
+ - Etherpad for collaborative note-taking
+ - ffmpeg for reencoding videos to free (patent-unencumbered)
+ formats and compressing them
+ - Captioning (<https://emacsconf.org/captioning>):
+ - OpenAI Whisper for computer-generated transcripts to be
+ reflowed and edited by captioning volunteers
+ - Some Emacs Lisp code to help with reflowing
+ (emacsconf-reflow, in
+ <https://git.emacsconf.org/emacsconf-el/>)
+ - Aeneas (<https://www.readbeyond.it/aeneas/>) for
+ synchronizing reflowed text with the audio files
+ - subed.el (<https://github.com/sachac/subed>) for editing
+ captions within Emacs (synchronizes with MPV)
+ - MPV for playing videos (config tips:
+ <https://emacsconf.org/mpv/>
+ <https://git.emacsconf.org/emacsconf-ansible/tree/roles/obs/templates/mpv.conf>)
+- Q: How do you have multiple font sizes, countdowns and clocks in
+ fundamental mode?
+ - A:
+ <https://git.emacsconf.org/emacsconf-el/tree/emacsconf-stream.el>
+ : see emacsconf-stream-display-clock-and-countdown. You can
+ propertize a string with face attributes and then insert it.
+
+Quick links:
+
+- [emacsconf-ansible](https://git.emacsconf.org/emacsconf-ansible/) - Ansible configuration for setting up servers and scripts
+- [emacsconf-el](https://git.emacsconf.org/emacsconf-el/) - Emacs Lisp support files
+- [emacsconf-wiki](https://git.emacsconf.org/emacsconf-wiki/) - sources for the emacsconf wiki
+- [2023/organizers-notebook](https://emacsconf.org/2023/organizers-notebook/)
+- [2022/organizers-notebook](https://emacsconf.org/2022/organizers-notebook/)
+- [Sacha Chua's blog posts about EmacsConf](https://sachachua.com/blog/category/emacsconf/)
+ - [EmacsConf backstage: capturing submissions from e-mails](https://sachachua.com/blog/2023/09/emacsconf-capturing-submissions-from-e-mails/)
+ - [EmacsConf backstage: converting timezones :: Sacha Chua](https://sachachua.com/blog/2023/09/emacsconf-converting-timezones/)
+ - [EmacsConf backstage: Scheduling with SVGs :: Sacha Chua](https://sachachua.com/blog/2023/09/emacsconf-backstage-scheduling-with-svgs/)
+ - [#EmacsConf backstage: adding a talk to the wiki :: Sacha Chua](https://sachachua.com/blog/2023/09/emacsconf-backstage-adding-a-talk-to-the-wiki/)
+ - [EmacsConf backstage: jumping to and working with talks using Embark :: Sacha Chua](https://sachachua.com/blog/2023/09/emacsconf-backstage-jumping-to-and-working-with-talks-using-embark/)
+ - [EmacsConf backstage: making it easier to do talk-specific actions :: Sacha Chua](https://sachachua.com/blog/2023/09/emacsconf-backstage-making-it-easier-to-do-talk-specific-actions/)
+ - [EmacsConf backstage: Using TRAMP and timers to run two tracks semi-automatically](https://sachachua.com/blog/2023/01/emacsconf-backstage-using-tramp-and-timers-to-run-two-tracks-semi-automatically/)
+ - [Using Emacs and Python to record an animation and synchronize it with audio](https://sachachua.com/blog/2022/12/using-emacs-and-python-to-record-an-animation-and-synchronize-it-with-audio/)
+ - [Converting our VTT files to TTML](https://sachachua.com/blog/2022/11/converting-our-vtt-files-to-ttml/)
+ - [Re-encoding the EmacsConf videos with FFmpeg and GNU Parallel](https://sachachua.com/blog/2021/12/re-encoding-the-emacsconf-videos-with-ffmpeg-and-gnu-parallel/)
+ - [Adding little nudges to help on the EmacsConf wiki](https://sachachua.com/blog/2021/12/adding-little-nudges-to-help-on-the-emacsconf-wiki/)
+ - [EmacsConf backstage: picking timestamps from a waveform](https://sachachua.com/blog/2021/12/emacsconf-backstage-picking-timestamps-from-a-waveform/)
diff --git a/local.css b/local.css
index ba1a94a5..10013896 100644
--- a/local.css
+++ b/local.css
@@ -1,6 +1,7 @@
/* ikiwiki local style sheet */
h1 { font-weight: bold }
-
+.title { min-height: 3em }
+#content a { text-decoration: underline }
.pageheader, #pagebody, #footer {
max-width: 60rem;
margin: 0 auto;
@@ -19,13 +20,14 @@ h1 { font-weight: bold }
.pageheader { border: none }
-#content {
- max-width: 38rem;
+#content { margin: 0 }
+
+body.has-sidebar #content {
margin: 0;
line-height: 1.5;
}
-video { max-width: 100% }
+video { max-width: 100%; width: 100% }
#footer { font-size: 0.9em }
@@ -49,7 +51,7 @@ pre, code {
code { padding: .2em .3em }
pre > code { border: none; padding: 0 }
-.sidebar { padding: 0 1em }
+.sidebar { padding: 0 1em; width: 21ex; }
.sidebar ul, .sidebar ol { padding-left: 1em }
.sidebar > p:nth-child(1) { margin-bottom: 0.1em }
.sidebar > p:nth-child(2) { margin-top: 0; margin-bottom: 0 }
@@ -77,3 +79,54 @@ tbody td {
}
.subtitle { cursor: pointer }
+
+summary h1 { display: inline-block }
+
+.speaker-details { margin: 0 }
+
+.vid .resources ul { margin: 0; list-style-type: none; padding: 0 }
+ol.chapters { list-style-type: none; padding: 0; }
+#content ol.chapters a { text-decoration: none; color: inherit }
+ .vid figure { margin: 0; padding: 0 }
+
+
+ video.sticky { position: fixed; bottom: 15px; right: 15px; }
+
+ .all > ol { list-style-type: none; padding: 0 }
+ .all > ol > li {
+ display: block;
+ box-shadow: 0 3px 10px rgb(0 0 0 / 20%);
+ padding: 10px;
+ position: relative;
+ margin-bottom: 10px;
+ border: 1px solid rgb(0 0 0 / 20%);
+ border-radius: 5px; }
+ .all > ol > li video { max-width: 100%; width: 100% }
+ ol.chapters .current { background-color: rgba(0, 255, 0, 0.2); }
+
+ .help { border: 1px solid green; padding: 1em; }
+ img.img { max-width: 100%; height: auto }
+
+.sched-entry { margin-bottom: 12pt; }
+.sched-entry .sched-title { font-weight: bold; }
+.sched-track { border-radius: 5px; padding: 3px; display: inline-block; min-width: 100pt }
+.sched-track.General { background-color: peachpuff }
+.sched-track.Development { background-color: skyblue }
+.sched-entry .sched-time { min-width: 90pt; display: inline-block }
+.sched-meta { }
+.talk-nav {
+ white-space: pre;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+h1 { margin-top: 2em }
+
+.schedule-in-context, .schedule-svg-container {
+ width: 100%;
+ overflow-x: auto;
+}
+video { border: 1px solid gray; }
+.draft { border: 1px solid red; padding: 10px; background-color: LightPink }
+svg a.highlight rect { stroke-width: 3px }
+a.highlight { background-color: yellow }
diff --git a/mpv.md b/mpv.md
new file mode 100644
index 00000000..04921f21
--- /dev/null
+++ b/mpv.md
@@ -0,0 +1,93 @@
+[[!meta title="MPV tips"]]
+[[!meta copyright="Copyright &copy; 2022 Sacha Chua"]]
+
+# Displaying subtitles below the video
+
+The default position of subtitles tends to hide important details like the mode line or minibuffer. If you use `mpv` to view videos, you can adjust the position of subtitles with the "r" and "R" keyboard shortcuts, which run `add sub-pos -1` and `add sub-pos +1` respectively.
+
+Alternatively, you can configure your MPV to resize videos and show
+subtitles underneath. On Linux, you can create or edit
+`~/.config/mpv/mpv.conf`. On Windows, if compiled with MinGW, MPV will
+look for your configuration in `%APPDATA%\mpv\mpv.conf`. You can
+override the directory that contains mpv.conf by setting the
+`MPV_HOME` environment variable on either system.
+<https://mpv.io/manual/stable/#configuration-files> has more details
+on the format and location of the config file.
+
+For regular use, you might prefer to watch horizontally-centered
+videos with centered subtitles underneath. Here's the `mpv.conf` for
+that.
+
+```
+# Positioning
+video-zoom=-0.15
+video-align-y=-1
+sub-use-margins=yes
+sub-scale-by-window=yes
+sub-pos=103
+sub-margin-x=10
+sub-margin-y=60
+# Style
+sub-back-color=0.0
+sub-color="1/0.82/0"
+sub-blur=0.2
+sub-scale=0.9
+sub-font-size=30
+sub-border-size=0
+sub-border-color=0/1
+sub-shadow-color=0/1
+sub-shadow-offset=1.2
+sub-ass-force-style=Kerning=yes
+sub-ass-line-spacing=0
+```
+
+When we broadcast videos for EmacsConf 2022, we place them on the top
+right so that there's room underneath to display a conference logo and
+a talk URL, and we align the text left so that it doesn't feel like
+it's shifting around a lot. If you want to do the same, here's the
+configuration:
+
+```
+# Positioning
+video-zoom=-0.15
+video-align-y=-1
+sub-use-margins=yes
+sub-scale-by-window=yes
+sub-pos=103
+sub-margin-x=110
+sub-margin-y=60
+sub-align-x=left
+# Style
+sub-font="{{ emacsconf_font }}"
+sub-color="1/0.82/0"
+sub-blur=0.2
+sub-scale=0.9
+sub-font-size=30
+sub-border-size=0
+sub-border-color=0/1
+sub-shadow-color=0/1
+sub-shadow-offset=1.2
+sub-ass-force-style=Kerning=yes
+sub-ass-line-spacing=0
+osc=no
+```
+
+If you would like to specify the font to use, you can include a line like:
+
+```
+sub-font="Clear Sans Bold"
+```
+
+# Streaming files from the backstage area
+
+The backstage area uses basic HTTP authentication. To play files
+directly from the backstage area, specify the username and password in
+the URL as follows:
+
+`mpv https://username:password@media.emacsconf.org/path/to/video.webm`
+
+
+# Loading a subtitle file manually
+
+To load a specific subtitle file in MPV, use the `--sub-file=` or `--sub-files=` command-line argument. Note that this argument does not expand `~` to the user's home directory. If you want to refer to something in your home, use a command like: `mpv --sub-file=$HOME/directory/sub.vtt video.webm`.
+
diff --git a/tags__62__.md b/tags__62__.md
new file mode 100644
index 00000000..0008c2f6
--- /dev/null
+++ b/tags__62__.md
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged tags>"]]
+
+[[!inline pages="tagged(tags__62__)" actions="no" archive="yes"
+feedshow=10]]
diff --git a/talks.md b/talks.md
new file mode 100644
index 00000000..cfa744f6
--- /dev/null
+++ b/talks.md
@@ -0,0 +1,3 @@
+[[!meta title="Talks"]]
+
+[[!inline pages="2023/talks/* or 2022/talks/* or 2021/talks/* or 2020/talks/*" archive="yes"]]
diff --git a/templates/chapters.md b/templates/chapters.md
new file mode 100644
index 00000000..ec06bf02
--- /dev/null
+++ b/templates/chapters.md
@@ -0,0 +1,3 @@
+<pre class="chapters" data-target="<TMPL_VAR vidid>">
+<TMPL_VAR data>
+</pre>
diff --git a/templates/chat.md b/templates/chat.md
new file mode 100644
index 00000000..93e77e68
--- /dev/null
+++ b/templates/chat.md
@@ -0,0 +1 @@
+<iframe src="https://chat.emacsconf.org" width="100%" height="700"></iframe>
diff --git a/templates/help.md b/templates/help.md
new file mode 100644
index 00000000..749c8ee3
--- /dev/null
+++ b/templates/help.md
@@ -0,0 +1,12 @@
+<details class="help"><summary><TMPL_IF volunteer>Work in progress<TMPL_ELSE>Help wanted</TMPL_IF><TMPL_IF summary>: <TMPL_VAR summary></TMPL_IF summary> <TMPL_IF volunteer>(Volunteered: <TMPL_VAR volunteer>)</TMPL_IF></summary>
+<TMPL_IF main_captions>
+This talk does not have captions yet. Would you like to help [caption this talk](/2021/contribute/#edit-captions)? You may be able to start with these
+[auto-generated captions](<TMPL_VAR main_captions>).
+</TMPL_IF><TMPL_IF qa>
+Want to help make the Q&A session easier to search? You can [add chapter markers](/2021/contribute/#chapter-markers) or [edit the captions](/2021/contribute/#edit-captions), maybe starting with these
+[auto-generated captions](<TMPL_VAR qa>).
+</TMPL_IF><TMPL_VAR message>
+<TMPL_IF volunteer>[[!tag in-progress]]<TMPL_ELSE>
+(If you want to work on this and you think it might take you a while, you can reserve this task by editing the page and adding volunteer="your-name date" or by e-mailing <emacsconf-submit@gnu.org>.)
+[[!tag help <TMPL_VAR tags>]]</TMPL_IF volunteer>
+</details>
diff --git a/templates/page.tmpl b/templates/page.tmpl
index 0ccf7af6..1f40aa66 100644
--- a/templates/page.tmpl
+++ b/templates/page.tmpl
@@ -76,28 +76,33 @@
}, 0);
}
+ function handleSubtitleClick(event) {
+ var video = event.target.getAttribute('data-video');
+ var start = event.target.getAttribute('data-start');
+ let m = video.match(/(mainVideo|qnaVideo)-(.*)/);
+ if (m) {
+ video = m[2] + '-' + m[1];
+ }
+ var videoElem = document.getElementById(video);
+ if (videoElem) {
+ videoElem.currentTime = parseSeconds(start);
+ videoElem.scrollIntoView();
+ }
+ event.preventDefault();
+ }
+
window.onload = function initScript() {
mainVideo = document.getElementById("mainVideo");
qnaVideo = document.getElementById("qnaVideo");
timestamps = document.getElementsByClassName("time-link");
- let len = timestamps.length;
+ var len = timestamps.length;
for (let i = 0; i < len; i++) {
timestamps[i].onclick = function () {
- const videoType = this.href.split("/").pop();
- const video = (videoType == "#mainVideo") ? mainVideo : qnaVideo;
+ videoType = this.href.split("/").pop();
+ video = (videoType == "#mainVideo") ? mainVideo : qnaVideo;
video.currentTime = parseSeconds(this.innerText)
};
}
- let handleSubtitleClick = function(event) {
- let video = event.target.attributes['data-video'].value;
- let start = event.target.attributes['data-start'].value
- let videoElem = document.getElementById(video);
- if (videoElem) {
- videoElem.currentTime = parseSeconds(start);
- videoElem.scrollIntoView();
- }
- }
-
let subtitles = document.getElementsByClassName('subtitle');
for (let i = 0; i < subtitles.length; i++) {
subtitles[i].onclick = handleSubtitleClick;
@@ -107,7 +112,7 @@
// @license-end
</script>
</head>
-<body>
+<body <TMPL_IF SIDEBAR>class="has-sidebar"</TMPL_IF>>
<TMPL_IF HTML5><article class="page"><TMPL_ELSE><div class="page"></TMPL_IF>
@@ -290,5 +295,159 @@ Last edited <TMPL_VAR MTIME>
<TMPL_IF HTML5></footer><TMPL_ELSE></div></TMPL_IF>
<TMPL_IF HTML5></article><TMPL_ELSE></div></TMPL_IF>
+
+<script>
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (C) 2021, 2022 Sacha Chua
+
+ if (document.querySelector('.times')) {
+ var dateOptions = {dateStyle: 'short', timeStyle: 'short'};
+ var localStart = (new Date(document.querySelector('.times').getAttribute('start'))).toLocaleString([], dateOptions);
+ var localEnd = (new Date(document.querySelector('.times').getAttribute('end'))).toLocaleString([], dateOptions);
+ var dateElem = document.createElement('div');
+ dateElem.appendChild(document.createTextNode('Your local time: ~ ' + localStart + ' to ~ ' + localEnd));
+ document.querySelector('.times').prepend(dateElem);
+ if (document.querySelector('.times').querySelector('.others')) {
+ document.querySelector('.times').querySelector('.others').style.display = 'none';
+ }
+ }
+ if (document.querySelector('.time-overlay')) {
+ document.querySelectorAll('.time-overlay').forEach(function (o) {
+ if (o.getAttribute('title')) return;
+ var dateOptions = {dateStyle: 'short', timeStyle: 'short'};
+ var localStart, localEnd;
+ if (o.getAttribute('start') && o.getAttribute('end')) {
+ localStart = (new Date(o.getAttribute('start'))).toLocaleString([], dateOptions);
+ localEnd = (new Date(o.getAttribute('end'))).toLocaleString([], dateOptions);
+ o.setAttribute('title', 'Your local time: ~ ' + localStart + ' to ~ ' + localEnd);
+ } else if (o.getAttribute('start')) {
+ localStart = (new Date(o.getAttribute('start'))).toLocaleString([], dateOptions);
+ o.setAttribute('title', 'Your local time: ~ ' + localStart);
+ }
+ });
+ }
+
+ if (document.querySelector('a[name=transcript]')) {
+ var transcriptLink = document.createElement('a');
+ transcriptLink.setAttribute('href', '#transcript');
+ transcriptLink.textContent = 'View transcript';
+ var video = document.querySelector('.mainVideo video');
+ if (video) {
+ var resources = document.querySelector('.mainVideo video').closest('.vid').querySelector('.resources');
+ var transcriptDiv = document.createElement('div');
+ transcriptDiv.appendChild(transcriptLink)
+ if (resources) { resources.prepend(transcriptDiv); }
+ }
+ }
+ var chat = document.querySelector('.chat-iframe');
+ if (chat) {
+ if (chat.getAttribute('data-track')) {
+ chat.innerHTML = '<iframe src="https://chat.emacsconf.org?join=emacsconf,emacsconf-' +
+ chat.getAttribute('data-track').replace(/[^A-Za-z]/g, '') + '" height="600" width="100%"></iframe>';
+ } else {
+ chat.innerHTML = '<iframe src="https://chat.emacsconf.org" height="600" width="100%"></iframe>';
+ }
+ }
+
+ // @license-end
+</script>
+<script>
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (c) 2021 Sacha Chua - CC0 Public Domain
+ function displayChapters(elem) {
+ var i;
+ var chapter;
+ var list = document.createElement('ol');
+ list.setAttribute('class', 'chapters');
+ var link;
+ var target = elem.getAttribute('data-target');
+ var video = document.getElementById(target);
+ var track;
+ if (video) {
+ track = video.addTextTrack('chapters');
+ track.mode = 'hidden';
+ }
+ var chapters = elem.textContent.split(/[ \t]*\n+[ \t]*/).forEach(function(line) {
+ var m = (line.match(/^(((?:[0-9]+:)?[0-9]+:[0-9]+)(?:\.[0-9]+))[ \t]+(.*)/));
+ if (m) {
+ var start = m[1];
+ var text = m[3];
+ chapter = document.createElement('li');
+ link = document.createElement('a');
+ link.setAttribute('href', '#');
+ link.setAttribute('data-video', target);
+ link.setAttribute('data-start', start);
+ link.setAttribute('data-start-s', parseSeconds(start));
+ link.appendChild(document.createTextNode(m[2] + ' ' + text));
+ link.onclick = handleSubtitleClick;
+ chapter.appendChild(link);
+ list.appendChild(chapter);
+ if (track) {
+ var time = parseSeconds(start);
+ if (track.cues.length > 0) {
+ track.cues[track.cues.length - 1].endTime = time - 1;
+ }
+ track.addCue(new VTTCue(time, time, text));
+ }
+ }
+ })
+ if (track && track.cues.length > 0) {
+ video.addEventListener('durationchange', function() {
+ track.cues[track.cues.length - 1].endTime = video.duration;
+ });
+ track.addEventListener('cuechange', function() {
+ if (!this.activeCues[0]) return;
+ if (list.querySelector('.current')) {
+ list.querySelector('.current').className = '';
+ }
+ var chapter;
+ if (chapter = list.querySelector('a[data-start-s="' + this.activeCues[0].startTime + '"]')) {
+ chapter.parentNode.className = 'current';
+ }
+ });
+ }
+ elem.parentNode.replaceChild(list, elem);
+ }
+
+ document.querySelectorAll('pre.chapters').forEach(displayChapters);
+
+ var video = document.querySelector('video.reload');
+if (video) {
+ var myVar = setInterval(reloadAsNeeded, 1000);
+ var oldTime = '';
+ function reloadAsNeeded() {
+ if ((video.paused != true && (video.currentTime - oldTime) == 0 && video.currentTime != 0)) {
+ var source = video.querySelector('source');
+ var oldVideo = source.src;
+ source.src = '';
+ source.src = oldVideo;
+ video.load();
+ video.play();
+ }
+ oldTime = video.currentTime;
+ };
+}
+
+ // @license-end
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (c) 2023 Sacha Chua - CC0 Public Domain
+ function highlightTalks() {
+ // highlight any talk mentioned in the highlight URL parameter
+ var params = new URLSearchParams(window.location.search);
+ if (!params.get('highlight')) return;
+ var talks = params.get('highlight').split(',').filter(function(o) { return o.match(/^[-a-z0-9]+$/); });
+ var regexp = new RegExp('/talks/(' + talks.join('|') + ')/?$');
+ document.querySelectorAll('a[href]').forEach(function(link) {
+ console.debug(link.getAttribute('href'), link.getAttribute('href').match(regexp));
+ if (link.getAttribute('href').match(regexp)) {
+ console.debug(link);
+ link.classList.add('highlight');
+ }
+ });
+ }
+
+ addEventListener('DOMContentLoaded', highlightTalks);
+ // @license-end
+</script>
</body>
</html>
diff --git a/templates/pagedraft.md b/templates/pagedraft.md
new file mode 100644
index 00000000..7fd08768
--- /dev/null
+++ b/templates/pagedraft.md
@@ -0,0 +1,5 @@
+<div class="draft"> THIS IS A DRAFT DOCUMENT. It's not ready for
+sharing yet. We're still working on it! Feel free to update it or
+e-mail
+<a href="mailto:emacsconf-org@gnu.org">emacsconf-org@gnu.org</a>.
+</div>
diff --git a/templates/sched.md b/templates/sched.md
new file mode 100644
index 00000000..cbc94106
--- /dev/null
+++ b/templates/sched.md
@@ -0,0 +1,20 @@
+<div data-start="<TMPL_VAR startutc>" data-end="<TMPL_VAR endutc>" class="sched-entry <TMPL_IF track>track-<TMPL_VAR track></TMPL_IF track>">
+<div class="sched-meta">
+<TMPL_IF start>
+<span class="sched-time"><span class="sched-start"><TMPL_VAR start></span>
+<TMPL_IF end> - <span class="sched-end"><TMPL_VAR end></span></TMPL_IF end>
+</span></TMPL_IF start>
+<TMPL_IF track> <span class="sched-track <TMPL_VAR track>"><TMPL_IF watch><a href="<TMPL_VAR watch>"></TMPL_IF><TMPL_VAR track><TMPL_IF watch></a></TMPL_IF></span></TMPL_IF track>
+<TMPL_IF pad> <span class="sched-pad"><a href="<TMPL_VAR pad>">Etherpad</a></TMPL_IF pad>
+<TMPL_IF q-and-a> <span class="sched-q-and-a">Q&amp;A: <TMPL_VAR q-and-a></span> </TMPL_IF q-and-a>
+</div>
+<div class="sched-title"><a href="<TMPL_VAR url>"><TMPL_VAR title></a></div>
+<div class="sched-speakers"><TMPL_VAR speakers> <TMPL_IF note>- <TMPL_VAR note></TMPL_IF note></div>
+<TMPL_IF time><span class="sched-duration><TMPL_VAR time></span> minutes</TMPL_IF time>
+<TMPL_IF slug> <span class="sched-slug">id:<TMPL_VAR slug></span></TMPL_IF slug>
+<TMPL_IF resources>
+<ul class="resources">
+<TMPL_VAR resources>
+</ul>
+</TMPL_IF resources>
+</div>
diff --git a/templates/subtitle.md b/templates/subtitle.md
index 67906b4b..b4e273c1 100644
--- a/templates/subtitle.md
+++ b/templates/subtitle.md
@@ -1,3 +1,3 @@
<TMPL_IF new>
-<a href="#<TMPL_VAR video>" class="subtitle" data-start="<TMPL_VAR start>" data-video="<TMPL_VAR video>">[<TMPL_VAR start>]</a> <span class="subtitle" data-start="<TMPL_VAR start>" title="<TMPL_VAR start">" data-video="<TMPL_VAR video>"><TMPL_VAR text></span><TMPL_ELSE><span class="subtitle" title="<TMPL_VAR start>" data-start="<TMPL_VAR start>" data-video="<TMPL_VAR video>"><TMPL_VAR text></span></TMPL_IF> \ No newline at end of file
+<a href="#<TMPL_VAR video>" class="subtitle" data-start="<TMPL_VAR start>" data-video="<TMPL_VAR video>">[<TMPL_VAR start>]</a> <span class="subtitle" data-start="<TMPL_VAR start>" title="<TMPL_VAR start">" data-video="<TMPL_VAR video>"><TMPL_VAR text></span><TMPL_ELSE><TMPL_IF time><a href="#<TMPL_VAR video>" class="subtitle" data-start="<TMPL_VAR start>" data-video="<TMPL_VAR video>">[<TMPL_VAR start>]</a> </TMPL_IF time><span class="subtitle" title="<TMPL_VAR start>" data-start="<TMPL_VAR start>" data-video="<TMPL_VAR video>"><TMPL_VAR text></span></TMPL_IF> \ No newline at end of file
diff --git a/templates/time.md b/templates/time.md
new file mode 100644
index 00000000..b3f3c90e
--- /dev/null
+++ b/templates/time.md
@@ -0,0 +1 @@
+<span class="time-overlay" data-start="<TMPL_VAR startutc>" data-end="<TMPL_VAR endutc>"><TMPL_VAR time></span>
diff --git a/templates/vid.md b/templates/vid.md
index 23c31285..2a48e3a0 100644
--- a/templates/vid.md
+++ b/templates/vid.md
@@ -1,11 +1,13 @@
-<div class="vid">
-<video controls preload="metadata" id="<TMPL_VAR vidid>">
-<source src="<TMPL_VAR src>" type="<TMPL_VAR type>" />
+<div class="vid" data-id="<TMPL_VAR vidid>">
+<video controls preload="metadata" id="<TMPL_VAR vidid>" poster="<TMPL_VAR poster>">
+<source src="<TMPL_VAR src>" type="<TMPL_VAR type>" /><TMPL_VAR captions>
<TMPL_IF subtitles>
<track label="English" kind="captions" srclang="en" src="<TMPL_VAR subtitles>" default />
</TMPL_IF>
<p><em>Your browser does not support the video tag, please download the video instead.</em></p>
</video>
+<div class="resources">
+ <a href="<TMPL_VAR src>"><TMPL_IF download><TMPL_VAR download><TMPL_ELSE>Download video</TMPL_IF><TMPL_IF duration>, <TMPL_VAR duration></TMPL_IF><TMPL_IF size>, <TMPL_VAR size></TMPL_IF></a><br />
+ <TMPL_IF subtitles><a href="<TMPL_VAR subtitles>">Download captions</a><br /></TMPL_IF><TMPL_VAR other_resources>
+</div>
</div>
-<a href="<TMPL_VAR src>"><TMPL_IF download><TMPL_VAR download><TMPL_ELSE>Download video</TMPL_IF><TMPL_IF duration>, <TMPL_VAR duration></TMPL_IF><TMPL_IF size>, <TMPL_VAR size></TMPL_IF></a>
-<TMPL_IF subtitles><a href="<TMPL_VAR subtitles>">Download captions</a> </TMPL_IF> \ No newline at end of file